diff -Nrcpad gcc-14.3.0/INSTALL/binaries.html gcc-14.3.0-RC-20260619/INSTALL/binaries.html
*** gcc-14.3.0/INSTALL/binaries.html	Fri May 23 11:03:18 2025
--- gcc-14.3.0-RC-20260619/INSTALL/binaries.html	Fri Jun 19 06:51:10 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Binaries</title>
  
  <meta name="description" content="Installing GCC: Binaries">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
! div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,39 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! ul.mark-bullet {list-style-type: disc}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: Binaries</h1>
  
  
  
--- 41,46 ----
*************** ul.no-bullet {list-style: none}
*** 88,95 ****
  
  
  
! <a name="index-Binaries"></a>
! <a name="index-Installing-GCC_003a-Binaries"></a>
  
  <p>We are often asked about pre-compiled versions of GCC.  While we cannot
  provide these for all platforms, below you&rsquo;ll find links to binaries for
--- 67,74 ----
  
  
  
! <a class="index-entry-id" id="index-Binaries"></a>
! <a class="index-entry-id" id="index-Installing-GCC_003a-Binaries"></a>
  
  <p>We are often asked about pre-compiled versions of GCC.  While we cannot
  provide these for all platforms, below you&rsquo;ll find links to binaries for
*************** reasons.
*** 100,142 ****
  support them.  If you have any problems installing them, please
  contact their makers.
  </p>
! <ul>
! <li> AIX:
! <ul>
! <li> <a href="http://www.perzl.org/aix/">AIX Open Source Packages (AIX5L AIX 6.1
  AIX 7.1)</a>.
  </li></ul>
  
! </li><li> DOS&mdash;<a href="http://www.delorie.com/djgpp/">DJGPP</a>.
  
! </li><li> HP-UX:
! <ul>
! <li> <a href="http://hpux.connect.org.uk/">HP-UX Porting Center</a>;
  </li></ul>
  
! </li><li> macOS:
! <ul>
! <li> The <a href="https://brew.sh">Homebrew</a> package manager;
! </li><li> <a href="https://www.macports.org">MacPorts</a>.
  </li></ul>
  
! </li><li> Microsoft Windows:
! <ul>
! <li> The <a href="https://sourceware.org/cygwin/">Cygwin</a> project;
! </li><li> The <a href="https://osdn.net/projects/mingw/">MinGW</a> and
! <a href="https://www.mingw-w64.org/">mingw-w64</a> projects.
  </li></ul>
  
! </li><li> <a href="http://www.openpkg.org/">OpenPKG</a> offers binaries for quite a
  number of platforms.
  
! </li><li> The <a href="https://gcc.gnu.org/wiki/GFortranBinaries">GFortran Wiki</a> has
  links to GNU Fortran binaries for several platforms.
  </li></ul>
  
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 79,121 ----
  support them.  If you have any problems installing them, please
  contact their makers.
  </p>
! <ul class="itemize mark-bullet">
! <li>AIX:
! <ul class="itemize mark-bullet">
! <li><a class="uref" href="http://www.perzl.org/aix/">AIX Open Source Packages (AIX5L AIX 6.1
  AIX 7.1)</a>.
  </li></ul>
  
! </li><li>DOS&mdash;<a class="uref" href="http://www.delorie.com/djgpp/">DJGPP</a>.
  
! </li><li>HP-UX:
! <ul class="itemize mark-bullet">
! <li><a class="uref" href="http://hpux.connect.org.uk/">HP-UX Porting Center</a>;
  </li></ul>
  
! </li><li>macOS:
! <ul class="itemize mark-bullet">
! <li>The <a class="uref" href="https://brew.sh">Homebrew</a> package manager;
! </li><li><a class="uref" href="https://www.macports.org">MacPorts</a>.
  </li></ul>
  
! </li><li>Microsoft Windows:
! <ul class="itemize mark-bullet">
! <li>The <a class="uref" href="https://sourceware.org/cygwin/">Cygwin</a> project;
! </li><li>The <a class="uref" href="https://osdn.net/projects/mingw/">MinGW</a> and
! <a class="uref" href="https://www.mingw-w64.org/">mingw-w64</a> projects.
  </li></ul>
  
! </li><li><a class="uref" href="http://www.openpkg.org/">OpenPKG</a> offers binaries for quite a
  number of platforms.
  
! </li><li>The <a class="uref" href="https://gcc.gnu.org/wiki/GFortranBinaries">GFortran Wiki</a> has
  links to GNU Fortran binaries for several platforms.
  </li></ul>
  
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/build.html gcc-14.3.0-RC-20260619/INSTALL/build.html
*** gcc-14.3.0/INSTALL/build.html	Fri May 23 11:03:17 2025
--- gcc-14.3.0-RC-20260619/INSTALL/build.html	Fri Jun 19 06:51:10 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Building</title>
  
  <meta name="description" content="Installing GCC: Building">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,42 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
  div.example {margin-left: 3.2em}
! span:hover a.copiable-link {visibility: visible}
! ul.mark-bullet {list-style-type: disc}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: Building</h1>
  
  
  
--- 44,49 ----
*************** ul.no-bullet {list-style: none}
*** 85,97 ****
  
  
  
! <a name="index-Installing-GCC_003a-Building"></a>
  
  <p>Now that GCC is configured, you are ready to build the compiler and
  runtime libraries.
  </p>
  <p>Some commands executed when making the compiler may fail (return a
! nonzero status) and be ignored by <code>make</code>.  These failures, which
  are often due to files that were not found, are expected, and can safely
  be ignored.
  </p>
--- 67,79 ----
  
  
  
! <a class="index-entry-id" id="index-Installing-GCC_003a-Building"></a>
  
  <p>Now that GCC is configured, you are ready to build the compiler and
  runtime libraries.
  </p>
  <p>Some commands executed when making the compiler may fail (return a
! nonzero status) and be ignored by <code class="command">make</code>.  These failures, which
  are often due to files that were not found, are expected, and can safely
  be ignored.
  </p>
*************** Unless you are a GCC developer, you can
*** 100,109 ****
  unless they cause compilation to fail.  Developers should attempt to fix
  any warnings encountered, however they can temporarily continue past
  warnings-as-errors by specifying the configure flag
! <samp>--disable-werror</samp>.
  </p>
  <p>On certain old systems, defining certain environment variables such as
! <code>CC</code> can interfere with the functioning of <code>make</code>.
  </p>
  <p>If you encounter seemingly strange errors when trying to build the
  compiler in a directory other than the source directory, it could be
--- 82,91 ----
  unless they cause compilation to fail.  Developers should attempt to fix
  any warnings encountered, however they can temporarily continue past
  warnings-as-errors by specifying the configure flag
! <samp class="option">--disable-werror</samp>.
  </p>
  <p>On certain old systems, defining certain environment variables such as
! <code class="env">CC</code> can interfere with the functioning of <code class="command">make</code>.
  </p>
  <p>If you encounter seemingly strange errors when trying to build the
  compiler in a directory other than the source directory, it could be
*************** because you have previously configured t
*** 111,127 ****
  directory.  Make sure you have done all the necessary preparations.
  </p>
  <p>If you build GCC on a BSD system using a directory stored in an old System
! V file system, problems may occur in running <code>fixincludes</code> if the
  System V file system doesn&rsquo;t support symbolic links.  These problems
! result in a failure to fix the declaration of <code>size_t</code> in
! <samp>sys/types.h</samp>.  If you find that <code>size_t</code> is a signed type and
  that type mismatches occur, this could be the cause.
  </p>
  <p>The solution is not to use such a directory for building GCC.
  </p>
  <p>Similarly, when building from the source repository or snapshots, or if you modify
! <samp>*.l</samp> files, you need the Flex lexical analyzer generator
! installed.  If you do not modify <samp>*.l</samp> files, releases contain
  the Flex-generated files and you do not need Flex installed to build
  them.  There is still one Flex-based lexical analyzer (part of the
  build machinery, not of GCC itself) that is used even if you only
--- 93,109 ----
  directory.  Make sure you have done all the necessary preparations.
  </p>
  <p>If you build GCC on a BSD system using a directory stored in an old System
! V file system, problems may occur in running <code class="command">fixincludes</code> if the
  System V file system doesn&rsquo;t support symbolic links.  These problems
! result in a failure to fix the declaration of <code class="code">size_t</code> in
! <samp class="file">sys/types.h</samp>.  If you find that <code class="code">size_t</code> is a signed type and
  that type mismatches occur, this could be the cause.
  </p>
  <p>The solution is not to use such a directory for building GCC.
  </p>
  <p>Similarly, when building from the source repository or snapshots, or if you modify
! <samp class="file">*.l</samp> files, you need the Flex lexical analyzer generator
! installed.  If you do not modify <samp class="file">*.l</samp> files, releases contain
  the Flex-generated files and you do not need Flex installed to build
  them.  There is still one Flex-based lexical analyzer (part of the
  build machinery, not of GCC itself) that is used even if you only
*************** documentation, you need version 4.7 or l
*** 132,338 ****
  want Info documentation to be regenerated.  Releases contain Info
  documentation pre-built for the unmodified documentation in the release.
  </p>
! <a name="Building-a-native-compiler"></a>
! <h3 class="section">Building a native compiler</h3>
  
  <p>For a native build, the default configuration is to perform
! a 3-stage bootstrap of the compiler when &lsquo;<samp>make</samp>&rsquo; is invoked.
  This will build the entire GCC system and ensure that it compiles
! itself correctly.  It can be disabled with the <samp>--disable-bootstrap</samp>
! parameter to &lsquo;<samp>configure</samp>&rsquo;, but bootstrapping is suggested because
  the compiler will be tested more completely and could also have
  better performance.
  </p>
  <p>The bootstrapping process will complete the following steps:
  </p>
! <ul>
! <li> Build tools necessary to build the compiler.
  
! </li><li> Perform a 3-stage bootstrap of the compiler.  This includes building
  three times the target tools for use by the compiler such as binutils
  (bfd, binutils, gas, gprof, ld, and opcodes) if they have been
  individually linked or moved into the top level GCC source tree before
  configuring.
  
! </li><li> Perform a comparison test of the stage2 and stage3 compilers.
  
! </li><li> Build runtime libraries using the stage3 compiler from the previous step.
  
  </li></ul>
  
! <p>If you are short on disk space you might consider &lsquo;<samp>make
  bootstrap-lean</samp>&rsquo; instead.  The sequence of compilation is the
  same described above, but object files from the stage1 and
  stage2 of the 3-stage bootstrap of the compiler are deleted as
  soon as they are no longer needed.
  </p>
  <p>If you wish to use non-default GCC flags when compiling the stage2
! and stage3 compilers, set <code>BOOT_CFLAGS</code> on the command line when
! doing &lsquo;<samp>make</samp>&rsquo;.  For example, if you want to save additional space
  during the bootstrap and in the final installation as well, you can
  build the compiler binaries without debugging information as in the
  following example.  This will save roughly 40% of disk space both for
  the bootstrap and the final installation.  (Libraries will still contain
  debugging information.)
  </p>
! <div class="smallexample">
! <pre class="smallexample">make BOOT_CFLAGS='-O' bootstrap
  </pre></div>
  
! <p>You can place non-default optimization flags into <code>BOOT_CFLAGS</code>; they
! are less well tested here than the default of &lsquo;<samp>-g -O2</samp>&rsquo;, but should
  still work.  In a few cases, you may find that you need to specify special
! flags such as <samp>-msoft-float</samp> here to complete the bootstrap; or,
  if the native compiler miscompiles the stage1 compiler, you may need
! to work around this, by choosing <code>BOOT_CFLAGS</code> to avoid the parts
! of the stage1 compiler that were miscompiled, or by using &lsquo;<samp>make
  bootstrap4</samp>&rsquo; to increase the number of stages of bootstrap.
  </p>
! <p><code>BOOT_CFLAGS</code> does not apply to bootstrapped target libraries.
  Since these are always compiled with the compiler currently being
! bootstrapped, you can use <code>CFLAGS_FOR_TARGET</code> to modify their
  compilation flags, as for non-bootstrapped target libraries.
  Again, if the native compiler miscompiles the stage1 compiler, you may
  need to work around this by avoiding non-working parts of the stage1
! compiler.  Use <code>STAGE1_TFLAGS</code> to this end.
  </p>
! <p>If you used the flag <samp>--enable-languages=&hellip;</samp> to restrict
  the compilers to be built, only those you&rsquo;ve actually enabled will be
  built.  This will of course only build those runtime libraries, for
  which the particular compiler has been built.  Please note,
! that re-defining <code>LANGUAGES</code> when calling &lsquo;<samp>make</samp>&rsquo;
! <strong>does not</strong> work anymore!
  </p>
  <p>If the comparison of stage2 and stage3 fails, this normally indicates
  that the stage2 compiler has compiled GCC incorrectly, and is therefore
  a potentially serious bug which you should investigate and report.  (On
  a few systems, meaningful comparison of object files is impossible; they
  always appear &ldquo;different&rdquo;.  If you encounter this problem, you will
! need to disable comparison in the <samp>Makefile</samp>.)
  </p>
  <p>If you do not want to bootstrap your compiler, you can configure with
! <samp>--disable-bootstrap</samp>.  In particular cases, you may want to
  bootstrap your compiler even if the target system is not the same as
  the one you are building on: for example, you could build a
! <code>powerpc-unknown-linux-gnu</code> toolchain on a
! <code>powerpc64-unknown-linux-gnu</code> host.  In this case, pass
! <samp>--enable-bootstrap</samp> to the configure script.
  </p>
! <p><code>BUILD_CONFIG</code> can be used to bring in additional customization
  to the build.  It can be set to a whitespace-separated list of names.
! For each such <code>NAME</code>, top-level <samp>config/<code>NAME</code>.mk</samp> will
! be included by the top-level <samp>Makefile</samp>, bringing in any settings
! it contains.  The default <code>BUILD_CONFIG</code> can be set using the
! configure option <samp>--with-build-config=<code>NAME</code>...</samp>.  Some
  examples of supported build configurations are:
  </p>
! <dl compact="compact">
! <dt>&lsquo;<samp>bootstrap-O1</samp>&rsquo;</dt>
! <dd><p>Removes any <samp>-O</samp>-started option from <code>BOOT_CFLAGS</code>, and adds
! <samp>-O1</samp> to it.  &lsquo;<samp>BUILD_CONFIG=bootstrap-O1</samp>&rsquo; is equivalent to
! &lsquo;<samp>BOOT_CFLAGS='-g -O1'</samp>&rsquo;.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-O3</samp>&rsquo;</dt>
! <dt>&lsquo;<samp>bootstrap-Og</samp>&rsquo;</dt>
! <dd><p>Analogous to <code>bootstrap-O1</code>.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-lto</samp>&rsquo;</dt>
  <dd><p>Enables Link-Time Optimization for host tools during bootstrapping.
! &lsquo;<samp>BUILD_CONFIG=bootstrap-lto</samp>&rsquo; is equivalent to adding
! <samp>-flto</samp> to &lsquo;<samp>BOOT_CFLAGS</samp>&rsquo;.  This option assumes that the host
  supports the linker plugin (e.g. GNU ld version 2.21 or later or GNU gold
  version 2.21 or later).
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-lto-noplugin</samp>&rsquo;</dt>
! <dd><p>This option is similar to <code>bootstrap-lto</code>, but is intended for
  hosts that do not support the linker plugin.  Without the linker plugin 
  static libraries are not compiled with link-time optimizations.  Since 
! the GCC middle end and back end are in <samp>libbackend.a</samp> this means
  that only the front end is actually LTO optimized.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-lto-lean</samp>&rsquo;</dt>
! <dd><p>This option is similar to <code>bootstrap-lto</code>, but is intended for
  faster build by only using LTO in the final bootstrap stage.
! With &lsquo;<samp>make profiledbootstrap</samp>&rsquo; the LTO frontend
  is trained only on generator files.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-debug</samp>&rsquo;</dt>
  <dd><p>Verifies that the compiler generates the same executable code, whether
  or not it is asked to emit debug information.  To this end, this
  option builds stage2 host programs without debug information, and uses
! <samp>contrib/compare-debug</samp> to compare them with the stripped stage3
! object files.  If <code>BOOT_CFLAGS</code> is overridden so as to not enable
  debug information, stage2 will have it, and stage3 won&rsquo;t.  This option
  is enabled by default when GCC bootstrapping is enabled, if
! <code>strip</code> can turn object files compiled with and without debug
  info into identical object files.  In addition to better test
  coverage, this option makes default bootstraps faster and leaner.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-debug-big</samp>&rsquo;</dt>
  <dd><p>Rather than comparing stripped object files, as in
! <code>bootstrap-debug</code>, this option saves internal compiler dumps
  during stage2 and stage3 and compares them as well, which helps catch
  additional potential problems, but at a great cost in terms of disk
! space.  It can be specified in addition to &lsquo;<samp>bootstrap-debug</samp>&rsquo;.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-debug-lean</samp>&rsquo;</dt>
! <dd><p>This option saves disk space compared with <code>bootstrap-debug-big</code>,
  but at the expense of some recompilation.  Instead of saving the dumps
  of stage2 and stage3 until the final compare, it uses
! <samp>-fcompare-debug</samp> to generate, compare and remove the dumps
  during stage3, repeating the compilation that already took place in
  stage2, whose dumps were not saved.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-debug-lib</samp>&rsquo;</dt>
  <dd><p>This option tests executable code invariance over debug information
! generation on target libraries, just like <code>bootstrap-debug-lean</code>
  tests it on host programs.  It builds stage3 libraries with
! <samp>-fcompare-debug</samp>, and it can be used along with any of the
! <code>bootstrap-debug</code> options above.
  </p>
! <p>There aren&rsquo;t <code>-lean</code> or <code>-big</code> counterparts to this option
  because most libraries are only build in stage3, so bootstrap compares
  would not get significant coverage.  Moreover, the few libraries built
  in stage2 are used in stage3 host programs, so we wouldn&rsquo;t want to
  compile stage2 libraries with different options for comparison purposes.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-debug-ckovw</samp>&rsquo;</dt>
  <dd><p>Arranges for error messages to be issued if the compiler built on any
! stage is run without the option <samp>-fcompare-debug</samp>.  This is
! useful to verify the full <samp>-fcompare-debug</samp> testing coverage.  It
! must be used along with <code>bootstrap-debug-lean</code> and
! <code>bootstrap-debug-lib</code>.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-cet</samp>&rsquo;</dt>
  <dd><p>This option enables Intel CET for host tools during bootstrapping.
! &lsquo;<samp>BUILD_CONFIG=bootstrap-cet</samp>&rsquo; is equivalent to adding
! <samp>-fcf-protection</samp> to &lsquo;<samp>BOOT_CFLAGS</samp>&rsquo;.  This option
  assumes that the host supports Intel CET (e.g. GNU assembler version
  2.30 or later).
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-time</samp>&rsquo;</dt>
  <dd><p>Arranges for the run time of each program started by the GCC driver,
! built in any stage, to be logged to <samp>time.log</samp>, in the top level of
  the build tree.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-asan</samp>&rsquo;</dt>
  <dd><p>Compiles GCC itself using Address Sanitization in order to catch invalid memory
  accesses within the GCC code.
  </p>
  </dd>
! <dt>&lsquo;<samp>bootstrap-hwasan</samp>&rsquo;</dt>
  <dd><p>Compiles GCC itself using HWAddress Sanitization in order to catch invalid
  memory accesses within the GCC code.  This option is only available on AArch64
  systems that are running Linux kernel version 5.4 or later.
--- 114,320 ----
  want Info documentation to be regenerated.  Releases contain Info
  documentation pre-built for the unmodified documentation in the release.
  </p>
! <div class="section-level-extent" id="Building-a-native-compiler">
! <h3 class="section"><span>Building a native compiler<a class="copiable-link" href="#Building-a-native-compiler"> &para;</a></span></h3>
  
  <p>For a native build, the default configuration is to perform
! a 3-stage bootstrap of the compiler when &lsquo;<samp class="samp">make</samp>&rsquo; is invoked.
  This will build the entire GCC system and ensure that it compiles
! itself correctly.  It can be disabled with the <samp class="option">--disable-bootstrap</samp>
! parameter to &lsquo;<samp class="samp">configure</samp>&rsquo;, but bootstrapping is suggested because
  the compiler will be tested more completely and could also have
  better performance.
  </p>
  <p>The bootstrapping process will complete the following steps:
  </p>
! <ul class="itemize mark-bullet">
! <li>Build tools necessary to build the compiler.
  
! </li><li>Perform a 3-stage bootstrap of the compiler.  This includes building
  three times the target tools for use by the compiler such as binutils
  (bfd, binutils, gas, gprof, ld, and opcodes) if they have been
  individually linked or moved into the top level GCC source tree before
  configuring.
  
! </li><li>Perform a comparison test of the stage2 and stage3 compilers.
  
! </li><li>Build runtime libraries using the stage3 compiler from the previous step.
  
  </li></ul>
  
! <p>If you are short on disk space you might consider &lsquo;<samp class="samp">make
  bootstrap-lean</samp>&rsquo; instead.  The sequence of compilation is the
  same described above, but object files from the stage1 and
  stage2 of the 3-stage bootstrap of the compiler are deleted as
  soon as they are no longer needed.
  </p>
  <p>If you wish to use non-default GCC flags when compiling the stage2
! and stage3 compilers, set <code class="code">BOOT_CFLAGS</code> on the command line when
! doing &lsquo;<samp class="samp">make</samp>&rsquo;.  For example, if you want to save additional space
  during the bootstrap and in the final installation as well, you can
  build the compiler binaries without debugging information as in the
  following example.  This will save roughly 40% of disk space both for
  the bootstrap and the final installation.  (Libraries will still contain
  debugging information.)
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make BOOT_CFLAGS='-O' bootstrap
  </pre></div>
  
! <p>You can place non-default optimization flags into <code class="code">BOOT_CFLAGS</code>; they
! are less well tested here than the default of &lsquo;<samp class="samp">-g -O2</samp>&rsquo;, but should
  still work.  In a few cases, you may find that you need to specify special
! flags such as <samp class="option">-msoft-float</samp> here to complete the bootstrap; or,
  if the native compiler miscompiles the stage1 compiler, you may need
! to work around this, by choosing <code class="code">BOOT_CFLAGS</code> to avoid the parts
! of the stage1 compiler that were miscompiled, or by using &lsquo;<samp class="samp">make
  bootstrap4</samp>&rsquo; to increase the number of stages of bootstrap.
  </p>
! <p><code class="code">BOOT_CFLAGS</code> does not apply to bootstrapped target libraries.
  Since these are always compiled with the compiler currently being
! bootstrapped, you can use <code class="code">CFLAGS_FOR_TARGET</code> to modify their
  compilation flags, as for non-bootstrapped target libraries.
  Again, if the native compiler miscompiles the stage1 compiler, you may
  need to work around this by avoiding non-working parts of the stage1
! compiler.  Use <code class="code">STAGE1_TFLAGS</code> to this end.
  </p>
! <p>If you used the flag <samp class="option">--enable-languages=&hellip;</samp> to restrict
  the compilers to be built, only those you&rsquo;ve actually enabled will be
  built.  This will of course only build those runtime libraries, for
  which the particular compiler has been built.  Please note,
! that re-defining <code class="env">LANGUAGES</code> when calling &lsquo;<samp class="samp">make</samp>&rsquo;
! <strong class="strong">does not</strong> work anymore!
  </p>
  <p>If the comparison of stage2 and stage3 fails, this normally indicates
  that the stage2 compiler has compiled GCC incorrectly, and is therefore
  a potentially serious bug which you should investigate and report.  (On
  a few systems, meaningful comparison of object files is impossible; they
  always appear &ldquo;different&rdquo;.  If you encounter this problem, you will
! need to disable comparison in the <samp class="file">Makefile</samp>.)
  </p>
  <p>If you do not want to bootstrap your compiler, you can configure with
! <samp class="option">--disable-bootstrap</samp>.  In particular cases, you may want to
  bootstrap your compiler even if the target system is not the same as
  the one you are building on: for example, you could build a
! <code class="code">powerpc-unknown-linux-gnu</code> toolchain on a
! <code class="code">powerpc64-unknown-linux-gnu</code> host.  In this case, pass
! <samp class="option">--enable-bootstrap</samp> to the configure script.
  </p>
! <p><code class="code">BUILD_CONFIG</code> can be used to bring in additional customization
  to the build.  It can be set to a whitespace-separated list of names.
! For each such <code class="code">NAME</code>, top-level <samp class="file">config/<code class="code">NAME</code>.mk</samp> will
! be included by the top-level <samp class="file">Makefile</samp>, bringing in any settings
! it contains.  The default <code class="code">BUILD_CONFIG</code> can be set using the
! configure option <samp class="option">--with-build-config=<code class="code">NAME</code>...</samp>.  Some
  examples of supported build configurations are:
  </p>
! <dl class="table">
! <dt>&lsquo;<samp class="samp">bootstrap-O1</samp>&rsquo;</dt>
! <dd><p>Removes any <samp class="option">-O</samp>-started option from <code class="code">BOOT_CFLAGS</code>, and adds
! <samp class="option">-O1</samp> to it.  &lsquo;<samp class="samp">BUILD_CONFIG=bootstrap-O1</samp>&rsquo; is equivalent to
! &lsquo;<samp class="samp">BOOT_CFLAGS='-g -O1'</samp>&rsquo;.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-O3</samp>&rsquo;</dt>
! <dt>&lsquo;<samp class="samp">bootstrap-Og</samp>&rsquo;</dt>
! <dd><p>Analogous to <code class="code">bootstrap-O1</code>.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-lto</samp>&rsquo;</dt>
  <dd><p>Enables Link-Time Optimization for host tools during bootstrapping.
! &lsquo;<samp class="samp">BUILD_CONFIG=bootstrap-lto</samp>&rsquo; is equivalent to adding
! <samp class="option">-flto</samp> to &lsquo;<samp class="samp">BOOT_CFLAGS</samp>&rsquo;.  This option assumes that the host
  supports the linker plugin (e.g. GNU ld version 2.21 or later or GNU gold
  version 2.21 or later).
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-lto-noplugin</samp>&rsquo;</dt>
! <dd><p>This option is similar to <code class="code">bootstrap-lto</code>, but is intended for
  hosts that do not support the linker plugin.  Without the linker plugin 
  static libraries are not compiled with link-time optimizations.  Since 
! the GCC middle end and back end are in <samp class="file">libbackend.a</samp> this means
  that only the front end is actually LTO optimized.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-lto-lean</samp>&rsquo;</dt>
! <dd><p>This option is similar to <code class="code">bootstrap-lto</code>, but is intended for
  faster build by only using LTO in the final bootstrap stage.
! With &lsquo;<samp class="samp">make profiledbootstrap</samp>&rsquo; the LTO frontend
  is trained only on generator files.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-debug</samp>&rsquo;</dt>
  <dd><p>Verifies that the compiler generates the same executable code, whether
  or not it is asked to emit debug information.  To this end, this
  option builds stage2 host programs without debug information, and uses
! <samp class="file">contrib/compare-debug</samp> to compare them with the stripped stage3
! object files.  If <code class="code">BOOT_CFLAGS</code> is overridden so as to not enable
  debug information, stage2 will have it, and stage3 won&rsquo;t.  This option
  is enabled by default when GCC bootstrapping is enabled, if
! <code class="code">strip</code> can turn object files compiled with and without debug
  info into identical object files.  In addition to better test
  coverage, this option makes default bootstraps faster and leaner.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-debug-big</samp>&rsquo;</dt>
  <dd><p>Rather than comparing stripped object files, as in
! <code class="code">bootstrap-debug</code>, this option saves internal compiler dumps
  during stage2 and stage3 and compares them as well, which helps catch
  additional potential problems, but at a great cost in terms of disk
! space.  It can be specified in addition to &lsquo;<samp class="samp">bootstrap-debug</samp>&rsquo;.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-debug-lean</samp>&rsquo;</dt>
! <dd><p>This option saves disk space compared with <code class="code">bootstrap-debug-big</code>,
  but at the expense of some recompilation.  Instead of saving the dumps
  of stage2 and stage3 until the final compare, it uses
! <samp class="option">-fcompare-debug</samp> to generate, compare and remove the dumps
  during stage3, repeating the compilation that already took place in
  stage2, whose dumps were not saved.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-debug-lib</samp>&rsquo;</dt>
  <dd><p>This option tests executable code invariance over debug information
! generation on target libraries, just like <code class="code">bootstrap-debug-lean</code>
  tests it on host programs.  It builds stage3 libraries with
! <samp class="option">-fcompare-debug</samp>, and it can be used along with any of the
! <code class="code">bootstrap-debug</code> options above.
  </p>
! <p>There aren&rsquo;t <code class="code">-lean</code> or <code class="code">-big</code> counterparts to this option
  because most libraries are only build in stage3, so bootstrap compares
  would not get significant coverage.  Moreover, the few libraries built
  in stage2 are used in stage3 host programs, so we wouldn&rsquo;t want to
  compile stage2 libraries with different options for comparison purposes.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-debug-ckovw</samp>&rsquo;</dt>
  <dd><p>Arranges for error messages to be issued if the compiler built on any
! stage is run without the option <samp class="option">-fcompare-debug</samp>.  This is
! useful to verify the full <samp class="option">-fcompare-debug</samp> testing coverage.  It
! must be used along with <code class="code">bootstrap-debug-lean</code> and
! <code class="code">bootstrap-debug-lib</code>.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-cet</samp>&rsquo;</dt>
  <dd><p>This option enables Intel CET for host tools during bootstrapping.
! &lsquo;<samp class="samp">BUILD_CONFIG=bootstrap-cet</samp>&rsquo; is equivalent to adding
! <samp class="option">-fcf-protection</samp> to &lsquo;<samp class="samp">BOOT_CFLAGS</samp>&rsquo;.  This option
  assumes that the host supports Intel CET (e.g. GNU assembler version
  2.30 or later).
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-time</samp>&rsquo;</dt>
  <dd><p>Arranges for the run time of each program started by the GCC driver,
! built in any stage, to be logged to <samp class="file">time.log</samp>, in the top level of
  the build tree.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-asan</samp>&rsquo;</dt>
  <dd><p>Compiles GCC itself using Address Sanitization in order to catch invalid memory
  accesses within the GCC code.
  </p>
  </dd>
! <dt>&lsquo;<samp class="samp">bootstrap-hwasan</samp>&rsquo;</dt>
  <dd><p>Compiles GCC itself using HWAddress Sanitization in order to catch invalid
  memory accesses within the GCC code.  This option is only available on AArch64
  systems that are running Linux kernel version 5.4 or later.
*************** systems that are running Linux kernel ve
*** 340,347 ****
  </dd>
  </dl>
  
! <a name="Building-a-cross-compiler"></a>
! <h3 class="section">Building a cross compiler</h3>
  
  <p>When building a cross compiler, it is not generally possible to do a
  3-stage bootstrap of the compiler.  This makes for an interesting problem
--- 322,330 ----
  </dd>
  </dl>
  
! </div>
! <div class="section-level-extent" id="Building-a-cross-compiler">
! <h3 class="section"><span>Building a cross compiler<a class="copiable-link" href="#Building-a-cross-compiler"> &para;</a></span></h3>
  
  <p>When building a cross compiler, it is not generally possible to do a
  3-stage bootstrap of the compiler.  This makes for an interesting problem
*************** cross compiler.  The installed native co
*** 353,372 ****
  2.95 or later.
  </p>
  <p>Assuming you have already installed a native copy of GCC and configured
! your cross compiler, issue the command <code>make</code>, which performs the
  following steps:
  </p>
! <ul>
! <li> Build host tools necessary to build the compiler.
  
! </li><li> Build target tools for use by the compiler such as binutils (bfd,
  binutils, gas, gprof, ld, and opcodes)
  if they have been individually linked or moved into the top level GCC source
  tree before configuring.
  
! </li><li> Build the compiler (single stage only).
  
! </li><li> Build runtime libraries using the compiler from the previous step.
  </li></ul>
  
  <p>Note that if an error occurs in any step the make process will exit.
--- 336,355 ----
  2.95 or later.
  </p>
  <p>Assuming you have already installed a native copy of GCC and configured
! your cross compiler, issue the command <code class="command">make</code>, which performs the
  following steps:
  </p>
! <ul class="itemize mark-bullet">
! <li>Build host tools necessary to build the compiler.
  
! </li><li>Build target tools for use by the compiler such as binutils (bfd,
  binutils, gas, gprof, ld, and opcodes)
  if they have been individually linked or moved into the top level GCC source
  tree before configuring.
  
! </li><li>Build the compiler (single stage only).
  
! </li><li>Build runtime libraries using the compiler from the previous step.
  </li></ul>
  
  <p>Note that if an error occurs in any step the make process will exit.
*************** tree before configuring.
*** 374,397 ****
  <p>If you are not building GNU binutils in the same source tree as GCC,
  you will need a cross-assembler and cross-linker installed before
  configuring GCC.  Put them in the directory
! <samp><var>prefix</var>/<var>target</var>/bin</samp>.  Here is a table of the tools
  you should put in this directory:
  </p>
! <dl compact="compact">
! <dt><samp>as</samp></dt>
  <dd><p>This should be the cross-assembler.
  </p>
  </dd>
! <dt><samp>ld</samp></dt>
  <dd><p>This should be the cross-linker.
  </p>
  </dd>
! <dt><samp>ar</samp></dt>
  <dd><p>This should be the cross-archiver: a program which can manipulate
  archive files (linker libraries) in the target machine&rsquo;s format.
  </p>
  </dd>
! <dt><samp>ranlib</samp></dt>
  <dd><p>This should be a program to construct a symbol table in an archive file.
  </p></dd>
  </dl>
--- 357,380 ----
  <p>If you are not building GNU binutils in the same source tree as GCC,
  you will need a cross-assembler and cross-linker installed before
  configuring GCC.  Put them in the directory
! <samp class="file"><var class="var">prefix</var>/<var class="var">target</var>/bin</samp>.  Here is a table of the tools
  you should put in this directory:
  </p>
! <dl class="table">
! <dt><samp class="file">as</samp></dt>
  <dd><p>This should be the cross-assembler.
  </p>
  </dd>
! <dt><samp class="file">ld</samp></dt>
  <dd><p>This should be the cross-linker.
  </p>
  </dd>
! <dt><samp class="file">ar</samp></dt>
  <dd><p>This should be the cross-archiver: a program which can manipulate
  archive files (linker libraries) in the target machine&rsquo;s format.
  </p>
  </dd>
! <dt><samp class="file">ranlib</samp></dt>
  <dd><p>This should be a program to construct a symbol table in an archive file.
  </p></dd>
  </dl>
*************** and copy or link them to the proper plac
*** 401,407 ****
  find them when run later.
  </p>
  <p>The easiest way to provide these files is to build the Binutils package.
! Configure it with the same <samp>--host</samp> and <samp>--target</samp>
  options that you use for configuring GCC, then build and install
  them.  They install their executables automatically into the proper
  directory.  Alas, they do not support all the targets that GCC
--- 384,390 ----
  find them when run later.
  </p>
  <p>The easiest way to provide these files is to build the Binutils package.
! Configure it with the same <samp class="option">--host</samp> and <samp class="option">--target</samp>
  options that you use for configuring GCC, then build and install
  them.  They install their executables automatically into the proper
  directory.  Alas, they do not support all the targets that GCC
*************** supports.
*** 410,468 ****
  <p>If you are not building a C library in the same source tree as GCC,
  you should also provide the target libraries and headers before
  configuring GCC, specifying the directories with
! <samp>--with-sysroot</samp> or <samp>--with-headers</samp> and
! <samp>--with-libs</samp>.  Many targets also require &ldquo;start files&rdquo; such
! as <samp>crt0.o</samp> and
! <samp>crtn.o</samp> which are linked into each executable.  There may be several
! alternatives for <samp>crt0.o</samp>, for use with profiling or other
  compilation options.  Check your target&rsquo;s definition of
! <code>STARTFILE_SPEC</code> to find out what start files it uses.
  </p>
! <a name="Building-in-parallel"></a>
! <h3 class="section">Building in parallel</h3>
  
  <p>GNU Make 3.80 and above, which is necessary to build GCC, support
! building in parallel.  To activate this, you can use &lsquo;<samp>make -j 2</samp>&rsquo;
! instead of &lsquo;<samp>make</samp>&rsquo;.  You can also specify a bigger number, and
  in most cases using a value greater than the number of processors in
  your machine will result in fewer and shorter I/O latency hits, thus
  improving overall throughput; this is especially true for slow drives
  and network filesystems.
  </p>
! <a name="Building-the-Ada-compiler"></a>
! <h3 class="section">Building the Ada compiler</h3>
  
! <p><a href="prerequisites.html#GNAT-prerequisite">GNAT prerequisites</a>.
  </p>
! <a name="Building-the-D-compiler"></a>
! <h3 class="section">Building the D compiler</h3>
  
! <p><a href="prerequisites.html#GDC-prerequisite">GDC prerequisites</a>.
  </p>
! <a name="Building-with-profile-feedback"></a>
! <h3 class="section">Building with profile feedback</h3>
  
  <p>It is possible to use profile feedback to optimize the compiler itself.  This
  should result in a faster compiler binary.  Experiments done on x86 using gcc
  3.3 showed approximately 7 percent speedup on compiling C programs.  To
! bootstrap the compiler with profile feedback, use <code>make profiledbootstrap</code>.
  </p>
! <p>When &lsquo;<samp>make profiledbootstrap</samp>&rsquo; is run, it will first build a <code>stage1</code>
! compiler.  This compiler is used to build a <code>stageprofile</code> compiler
  instrumented to collect execution counts of instruction and branch
! probabilities.  Training run is done by building <code>stagetrain</code>
! compiler.  Finally a <code>stagefeedback</code> compiler is built
  using the information collected.
  </p>
  <p>Unlike standard bootstrap, several additional restrictions apply.  The
! compiler used to build <code>stage1</code> needs to support a 64-bit integral type.
  It is recommended to only use GCC for this.
  </p>
  <p>On Linux/x86_64 hosts with some restrictions (no virtualization) it is
! also possible to do autofdo build with &lsquo;<samp>make
  autoprofiledbootstrap</samp>&rsquo;. This uses Linux perf to sample branches in the
  binary and then rebuild it with feedback derived from the profile.
! Linux perf and the <code>autofdo</code> toolkit needs to be installed for
  this.
  </p>
  <p>Only the profile from the current build is used, so when an error
--- 393,455 ----
  <p>If you are not building a C library in the same source tree as GCC,
  you should also provide the target libraries and headers before
  configuring GCC, specifying the directories with
! <samp class="option">--with-sysroot</samp> or <samp class="option">--with-headers</samp> and
! <samp class="option">--with-libs</samp>.  Many targets also require &ldquo;start files&rdquo; such
! as <samp class="file">crt0.o</samp> and
! <samp class="file">crtn.o</samp> which are linked into each executable.  There may be several
! alternatives for <samp class="file">crt0.o</samp>, for use with profiling or other
  compilation options.  Check your target&rsquo;s definition of
! <code class="code">STARTFILE_SPEC</code> to find out what start files it uses.
  </p>
! </div>
! <div class="section-level-extent" id="Building-in-parallel">
! <h3 class="section"><span>Building in parallel<a class="copiable-link" href="#Building-in-parallel"> &para;</a></span></h3>
  
  <p>GNU Make 3.80 and above, which is necessary to build GCC, support
! building in parallel.  To activate this, you can use &lsquo;<samp class="samp">make -j 2</samp>&rsquo;
! instead of &lsquo;<samp class="samp">make</samp>&rsquo;.  You can also specify a bigger number, and
  in most cases using a value greater than the number of processors in
  your machine will result in fewer and shorter I/O latency hits, thus
  improving overall throughput; this is especially true for slow drives
  and network filesystems.
  </p>
! </div>
! <div class="section-level-extent" id="Building-the-Ada-compiler">
! <h3 class="section"><span>Building the Ada compiler<a class="copiable-link" href="#Building-the-Ada-compiler"> &para;</a></span></h3>
  
! <p><a class="uref" href="prerequisites.html#GNAT-prerequisite">GNAT prerequisites</a>.
  </p>
! </div>
! <div class="section-level-extent" id="Building-the-D-compiler">
! <h3 class="section"><span>Building the D compiler<a class="copiable-link" href="#Building-the-D-compiler"> &para;</a></span></h3>
  
! <p><a class="uref" href="prerequisites.html#GDC-prerequisite">GDC prerequisites</a>.
  </p>
! </div>
! <div class="section-level-extent" id="Building-with-profile-feedback">
! <h3 class="section"><span>Building with profile feedback<a class="copiable-link" href="#Building-with-profile-feedback"> &para;</a></span></h3>
  
  <p>It is possible to use profile feedback to optimize the compiler itself.  This
  should result in a faster compiler binary.  Experiments done on x86 using gcc
  3.3 showed approximately 7 percent speedup on compiling C programs.  To
! bootstrap the compiler with profile feedback, use <code class="code">make profiledbootstrap</code>.
  </p>
! <p>When &lsquo;<samp class="samp">make profiledbootstrap</samp>&rsquo; is run, it will first build a <code class="code">stage1</code>
! compiler.  This compiler is used to build a <code class="code">stageprofile</code> compiler
  instrumented to collect execution counts of instruction and branch
! probabilities.  Training run is done by building <code class="code">stagetrain</code>
! compiler.  Finally a <code class="code">stagefeedback</code> compiler is built
  using the information collected.
  </p>
  <p>Unlike standard bootstrap, several additional restrictions apply.  The
! compiler used to build <code class="code">stage1</code> needs to support a 64-bit integral type.
  It is recommended to only use GCC for this.
  </p>
  <p>On Linux/x86_64 hosts with some restrictions (no virtualization) it is
! also possible to do autofdo build with &lsquo;<samp class="samp">make
  autoprofiledbootstrap</samp>&rsquo;. This uses Linux perf to sample branches in the
  binary and then rebuild it with feedback derived from the profile.
! Linux perf and the <code class="code">autofdo</code> toolkit needs to be installed for
  this.
  </p>
  <p>Only the profile from the current build is used, so when an error
*************** the code quality may be much worse.
*** 471,477 ****
  </p>
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 458,464 ----
  </p>
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
*************** the code quality may be much worse.
*** 479,485 ****
  
  
  
! <hr>
  
  
  
--- 466,472 ----
  
  
  
! </div>
  
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/configure.html gcc-14.3.0-RC-20260619/INSTALL/configure.html
*** gcc-14.3.0/INSTALL/configure.html	Fri May 23 11:03:17 2025
--- gcc-14.3.0-RC-20260619/INSTALL/configure.html	Fri Jun 19 06:51:10 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Configuration</title>
  
  <meta name="description" content="Installing GCC: Configuration">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,43 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
  div.example {margin-left: 3.2em}
! span:hover a.copiable-link {visibility: visible}
! ul.mark-bullet {list-style-type: disc}
! ul.mark-minus {list-style-type: "\2212"}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: Configuration</h1>
  
  
  
--- 45,50 ----
*************** ul.no-bullet {list-style: none}
*** 84,159 ****
  
  
  
! <a name="index-Configuration"></a>
! <a name="index-Installing-GCC_003a-Configuration"></a>
  
  <p>Like most GNU software, GCC must be configured before it can be built.
  This document describes the recommended configuration procedure
  for both native and cross targets.
  </p>
! <p>We use <var>srcdir</var> to refer to the toplevel source directory for
! GCC; we use <var>objdir</var> to refer to the toplevel build/object directory.
  </p>
! <p>If you obtained the sources by cloning the repository, <var>srcdir</var>
! must refer to the top <samp>gcc</samp> directory, the one where the
! <samp>MAINTAINERS</samp> file can be found, and not its <samp>gcc</samp>
  subdirectory, otherwise the build will fail.
  </p>
! <p>If either <var>srcdir</var> or <var>objdir</var> is located on an automounted NFS
! file system, the shell&rsquo;s built-in <code>pwd</code> command will return
  temporary pathnames.  Using these can lead to various sorts of build
! problems.  To avoid this issue, set the <code>PWDCMD</code> environment
! variable to an automounter-aware <code>pwd</code> command, e.g.,
! <code>pawd</code> or &lsquo;<samp>amq -w</samp>&rsquo;, during the configuration and build
  phases.
  </p>
! <p>First, we <strong>highly</strong> recommend that GCC be built into a
! separate directory from the sources which does <strong>not</strong> reside
  within the source tree.  This is how we generally build GCC; building
! where <var>objdir</var> is a subdirectory of <var>srcdir</var> should work as well;
! building where <var>objdir</var> == <var>srcdir</var> is unsupported.
  </p>
  <p>If you have previously built GCC in the same directory for a
! different target machine, do &lsquo;<samp>make distclean</samp>&rsquo; to delete all files
! that might be invalid.  One of the files this deletes is <samp>Makefile</samp>;
! if &lsquo;<samp>make distclean</samp>&rsquo; complains that <samp>Makefile</samp> does not exist
  or issues a message like &ldquo;don&rsquo;t know how to make distclean&rdquo; it probably
  means that the directory is already suitably clean.  However, with the
! recommended method of building in a separate <var>objdir</var>, you should
! simply use a different <var>objdir</var> for each target.
  </p>
! <p>Second, when configuring a native system, either <code>cc</code> or
! <code>gcc</code> must be in your path or you must set <code>CC</code> in
  your environment before running configure.  Otherwise the configuration
  scripts may fail.
  </p>
  
  <p>To configure GCC:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% mkdir <var>objdir</var>
! % cd <var>objdir</var>
! % <var>srcdir</var>/configure [<var>options</var>] [<var>target</var>]
  </pre></div>
  
! <a name="Distributor-options"></a>
! <h3 class="heading">Distributor options</h3>
  
  <p>If you will be distributing binary versions of GCC, with modifications
  to the source code, you should use the options described in this
  section to make clear that your version contains modifications.
  </p>
! <dl compact="compact">
! <dt><code>--with-pkgversion=<var>version</var></code></dt>
  <dd><p>Specify a string that identifies your package.  You may wish
  to include a build number or build date.  This version string will be
! included in the output of <code>gcc --version</code>.  This suffix does
! not replace the default version string, only the &lsquo;<samp>GCC</samp>&rsquo; part.
  </p>
! <p>The default value is &lsquo;<samp>GCC</samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--with-bugurl=<var>url</var></code></dt>
  <dd><p>Specify the URL that users should visit if they wish to report a bug.
  You are of course welcome to forward bugs reported to you to the FSF,
  if you determine that they are not bugs in your modifications.
--- 67,141 ----
  
  
  
! <a class="index-entry-id" id="index-Configuration"></a>
! <a class="index-entry-id" id="index-Installing-GCC_003a-Configuration"></a>
  
  <p>Like most GNU software, GCC must be configured before it can be built.
  This document describes the recommended configuration procedure
  for both native and cross targets.
  </p>
! <p>We use <var class="var">srcdir</var> to refer to the toplevel source directory for
! GCC; we use <var class="var">objdir</var> to refer to the toplevel build/object directory.
  </p>
! <p>If you obtained the sources by cloning the repository, <var class="var">srcdir</var>
! must refer to the top <samp class="file">gcc</samp> directory, the one where the
! <samp class="file">MAINTAINERS</samp> file can be found, and not its <samp class="file">gcc</samp>
  subdirectory, otherwise the build will fail.
  </p>
! <p>If either <var class="var">srcdir</var> or <var class="var">objdir</var> is located on an automounted NFS
! file system, the shell&rsquo;s built-in <code class="command">pwd</code> command will return
  temporary pathnames.  Using these can lead to various sorts of build
! problems.  To avoid this issue, set the <code class="env">PWDCMD</code> environment
! variable to an automounter-aware <code class="command">pwd</code> command, e.g.,
! <code class="command">pawd</code> or &lsquo;<samp class="samp">amq -w</samp>&rsquo;, during the configuration and build
  phases.
  </p>
! <p>First, we <strong class="strong">highly</strong> recommend that GCC be built into a
! separate directory from the sources which does <strong class="strong">not</strong> reside
  within the source tree.  This is how we generally build GCC; building
! where <var class="var">objdir</var> is a subdirectory of <var class="var">srcdir</var> should work as well;
! building where <var class="var">objdir</var> == <var class="var">srcdir</var> is unsupported.
  </p>
  <p>If you have previously built GCC in the same directory for a
! different target machine, do &lsquo;<samp class="samp">make distclean</samp>&rsquo; to delete all files
! that might be invalid.  One of the files this deletes is <samp class="file">Makefile</samp>;
! if &lsquo;<samp class="samp">make distclean</samp>&rsquo; complains that <samp class="file">Makefile</samp> does not exist
  or issues a message like &ldquo;don&rsquo;t know how to make distclean&rdquo; it probably
  means that the directory is already suitably clean.  However, with the
! recommended method of building in a separate <var class="var">objdir</var>, you should
! simply use a different <var class="var">objdir</var> for each target.
  </p>
! <p>Second, when configuring a native system, either <code class="command">cc</code> or
! <code class="command">gcc</code> must be in your path or you must set <code class="env">CC</code> in
  your environment before running configure.  Otherwise the configuration
  scripts may fail.
  </p>
  
  <p>To configure GCC:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% mkdir <var class="var">objdir</var>
! % cd <var class="var">objdir</var>
! % <var class="var">srcdir</var>/configure [<var class="var">options</var>] [<var class="var">target</var>]
  </pre></div>
  
! <h3 class="heading" id="Distributor-options"><span>Distributor options<a class="copiable-link" href="#Distributor-options"> &para;</a></span></h3>
  
  <p>If you will be distributing binary versions of GCC, with modifications
  to the source code, you should use the options described in this
  section to make clear that your version contains modifications.
  </p>
! <dl class="table">
! <dt><code class="code">--with-pkgversion=<var class="var">version</var></code></dt>
  <dd><p>Specify a string that identifies your package.  You may wish
  to include a build number or build date.  This version string will be
! included in the output of <code class="command">gcc --version</code>.  This suffix does
! not replace the default version string, only the &lsquo;<samp class="samp">GCC</samp>&rsquo; part.
  </p>
! <p>The default value is &lsquo;<samp class="samp">GCC</samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--with-bugurl=<var class="var">url</var></code></dt>
  <dd><p>Specify the URL that users should visit if they wish to report a bug.
  You are of course welcome to forward bugs reported to you to the FSF,
  if you determine that they are not bugs in your modifications.
*************** if you determine that they are not bugs
*** 161,223 ****
  <p>The default value refers to the FSF&rsquo;s GCC bug tracker.
  </p>
  </dd>
! <dt><code>--with-documentation-root-url=<var>url</var></code></dt>
! <dd><p>Specify the URL root that contains GCC option documentation.  The <var>url</var>
! should end with a <code>/</code> character.
  </p>
! <p>The default value is <a href="https://gcc.gnu.org/onlinedocs/">https://gcc.gnu.org/onlinedocs/</a>
  on the GCC main development trunk.  On release branches, the default
! is <code>https://gcc.gnu.org/onlinedocs/gcc-<var>major</var>.<var>minor</var>.0/</code>.
  </p>
  </dd>
! <dt><code>--with-changes-root-url=<var>url</var></code></dt>
  <dd><p>Specify the URL root that contains information about changes in GCC
! releases like <code>gcc-<var>version</var>/changes.html</code>.
! The <var>url</var> should end with a <code>/</code> character.
  </p>
! <p>The default value is <a href="https://gcc.gnu.org/">https://gcc.gnu.org/</a>.
  </p>
  </dd>
  </dl>
  
! <a name="Host_002c-Build-and-Target-specification"></a>
! <h3 class="heading">Host, Build and Target specification</h3>
  
  <p>Specify the host, build and target machine configurations.  You do this
! when you run the <samp>configure</samp> script.
  </p>
! <p>The <em>build</em> machine is the system which you are using, the
! <em>host</em> machine is the system where you want to run the resulting
! compiler (normally the build machine), and the <em>target</em> machine is
  the system for which you want the compiler to generate code.
  </p>
  <p>If you are building a compiler to produce code for the machine it runs
  on (a native compiler), you normally do not need to specify any operands
! to <samp>configure</samp>; it will try to guess the type of machine you are on
  and use that as the build, host and target machines.  So you don&rsquo;t need
  to specify a configuration when building a native compiler unless
! <samp>configure</samp> cannot figure out what your configuration is or guesses
  wrong.
  </p>
! <p>In those cases, specify the build machine&rsquo;s <em>configuration name</em>
! with the <samp>--host</samp> option; the host and target will default to be
  the same as the host machine.
  </p>
  <p>Here is an example:
  </p>
! <div class="smallexample">
! <pre class="smallexample">./configure --host=x86_64-pc-linux-gnu
  </pre></div>
  
  <p>A configuration name may be canonical or it may be more or less
! abbreviated (<samp>config.sub</samp> script produces canonical versions).
  </p>
  <p>A canonical configuration name has three parts, separated by dashes.
! It looks like this: &lsquo;<samp><var>cpu</var>-<var>company</var>-<var>system</var></samp>&rsquo;.
  </p>
  <p>Here are the possible CPU types:
  </p>
! <blockquote>
  <p>aarch64, aarch64_be, alpha, alpha64, amdgcn, arc, arceb, arm, armeb, avr, bfin,
  bpf, cris, csky, epiphany, fido, fr30, frv, ft32, h8300, hppa, hppa2.0,
  hppa64, i486, i686, ia64, iq2000, lm32, loongarch64, m32c, m32r, m32rle, m68k,
--- 143,204 ----
  <p>The default value refers to the FSF&rsquo;s GCC bug tracker.
  </p>
  </dd>
! <dt><code class="code">--with-documentation-root-url=<var class="var">url</var></code></dt>
! <dd><p>Specify the URL root that contains GCC option documentation.  The <var class="var">url</var>
! should end with a <code class="code">/</code> character.
  </p>
! <p>The default value is <a class="uref" href="https://gcc.gnu.org/onlinedocs/">https://gcc.gnu.org/onlinedocs/</a>
  on the GCC main development trunk.  On release branches, the default
! is <code class="code">https://gcc.gnu.org/onlinedocs/gcc-<var class="var">major</var>.<var class="var">minor</var>.0/</code>.
  </p>
  </dd>
! <dt><code class="code">--with-changes-root-url=<var class="var">url</var></code></dt>
  <dd><p>Specify the URL root that contains information about changes in GCC
! releases like <code class="code">gcc-<var class="var">version</var>/changes.html</code>.
! The <var class="var">url</var> should end with a <code class="code">/</code> character.
  </p>
! <p>The default value is <a class="uref" href="https://gcc.gnu.org/">https://gcc.gnu.org/</a>.
  </p>
  </dd>
  </dl>
  
! <h3 class="heading" id="Host_002c-Build-and-Target-specification"><span>Host, Build and Target specification<a class="copiable-link" href="#Host_002c-Build-and-Target-specification"> &para;</a></span></h3>
  
  <p>Specify the host, build and target machine configurations.  You do this
! when you run the <samp class="file">configure</samp> script.
  </p>
! <p>The <em class="dfn">build</em> machine is the system which you are using, the
! <em class="dfn">host</em> machine is the system where you want to run the resulting
! compiler (normally the build machine), and the <em class="dfn">target</em> machine is
  the system for which you want the compiler to generate code.
  </p>
  <p>If you are building a compiler to produce code for the machine it runs
  on (a native compiler), you normally do not need to specify any operands
! to <samp class="file">configure</samp>; it will try to guess the type of machine you are on
  and use that as the build, host and target machines.  So you don&rsquo;t need
  to specify a configuration when building a native compiler unless
! <samp class="file">configure</samp> cannot figure out what your configuration is or guesses
  wrong.
  </p>
! <p>In those cases, specify the build machine&rsquo;s <em class="dfn">configuration name</em>
! with the <samp class="option">--host</samp> option; the host and target will default to be
  the same as the host machine.
  </p>
  <p>Here is an example:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">./configure --host=x86_64-pc-linux-gnu
  </pre></div>
  
  <p>A configuration name may be canonical or it may be more or less
! abbreviated (<samp class="file">config.sub</samp> script produces canonical versions).
  </p>
  <p>A canonical configuration name has three parts, separated by dashes.
! It looks like this: &lsquo;<samp class="samp"><var class="var">cpu</var>-<var class="var">company</var>-<var class="var">system</var></samp>&rsquo;.
  </p>
  <p>Here are the possible CPU types:
  </p>
! <blockquote class="quotation">
  <p>aarch64, aarch64_be, alpha, alpha64, amdgcn, arc, arceb, arm, armeb, avr, bfin,
  bpf, cris, csky, epiphany, fido, fr30, frv, ft32, h8300, hppa, hppa2.0,
  hppa64, i486, i686, ia64, iq2000, lm32, loongarch64, m32c, m32r, m32rle, m68k,
*************** v850e, v850e1, vax, visium, x86_64, xsto
*** 232,389 ****
  
  <p>Here is a list of system types:
  </p>
! <blockquote>
! <p>aix<var>version</var>, amdhsa, aout, cygwin, darwin<var>version</var>,
  eabi, eabialtivec, eabisim, eabisimaltivec, elf, elf32,
! elfbare, elfoabi, freebsd<var>version</var>, gnu, hpux, hpux<var>version</var>,
  kfreebsd-gnu, kopensolaris-gnu, linux-androideabi, linux-gnu,
  linux-gnu_altivec, linux-musl, linux-uclibc, lynxos, mingw32, mingw32crt,
! mmixware, msdosdjgpp, netbsd, netbsdelf<var>version</var>, nto-qnx, openbsd,
! rtems, solaris<var>version</var>, symbianelf, tpf, uclinux, uclinux_eabi, vms,
  vxworks, vxworksae, vxworksmils
  </p></blockquote>
  
! <a name="Options-specification"></a>
! <h3 class="heading">Options specification</h3>
  
! <p>Use <var>options</var> to override several configure time options for
! GCC.  A list of supported <var>options</var> follows; &lsquo;<samp>configure
  --help</samp>&rsquo; may list other options, but those not listed below may not
  work and should not normally be used.
  </p>
! <p>Note that each <samp>--enable</samp> option has a corresponding
! <samp>--disable</samp> option and that each <samp>--with</samp> option has a
! corresponding <samp>--without</samp> option.
  </p>
! <dl compact="compact">
! <dt><code>--prefix=<var>dirname</var></code></dt>
  <dd><p>Specify the toplevel installation
  directory.  This is the recommended way to install the tools into a directory
  other than the default.  The toplevel installation directory defaults to
! <samp>/usr/local</samp>.
  </p>
! <p>We <strong>highly</strong> recommend against <var>dirname</var> being the same or a
! subdirectory of <var>objdir</var> or vice versa.  If specifying a directory
  beneath a user&rsquo;s home directory tree, some shells will not expand
! <var>dirname</var> correctly if it contains the &lsquo;<samp>~</samp>&rsquo; metacharacter; use
! <code>$HOME</code> instead.
  </p>
! <p>The following standard <code>autoconf</code> options are supported.  Normally you
  should not need to use these options.
! </p><dl compact="compact">
! <dt><code>--exec-prefix=<var>dirname</var></code></dt>
  <dd><p>Specify the toplevel installation directory for architecture-dependent
! files.  The default is <samp><var>prefix</var></samp>.
  </p>
  </dd>
! <dt><code>--bindir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for the executables called by users
! (such as <code>gcc</code> and <code>g++</code>).  The default is
! <samp><var>exec-prefix</var>/bin</samp>.
  </p>
  </dd>
! <dt><code>--libdir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for object code libraries and
! internal data files of GCC.  The default is <samp><var>exec-prefix</var>/lib</samp>.
  </p>
  </dd>
! <dt><code>--libexecdir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for internal executables of GCC.
! The default is <samp><var>exec-prefix</var>/libexec</samp>.
  </p>
  </dd>
! <dt><code>--with-slibdir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for the shared libgcc library.  The
! default is <samp><var>libdir</var></samp>.
  </p>
  </dd>
! <dt><code>--datarootdir=<var>dirname</var></code></dt>
  <dd><p>Specify the root of the directory tree for read-only architecture-independent
! data files referenced by GCC.  The default is <samp><var>prefix</var>/share</samp>.
  </p>
  </dd>
! <dt><code>--infodir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for documentation in info format.
! The default is <samp><var>datarootdir</var>/info</samp>.
  </p>
  </dd>
! <dt><code>--datadir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for some architecture-independent
! data files referenced by GCC.  The default is <samp><var>datarootdir</var></samp>.
  </p>
  </dd>
! <dt><code>--docdir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for documentation files (other
! than Info) for GCC.  The default is <samp><var>datarootdir</var>/doc</samp>.
  </p>
  </dd>
! <dt><code>--htmldir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for HTML documentation files.
! The default is <samp><var>docdir</var></samp>.
  </p>
  </dd>
! <dt><code>--pdfdir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for PDF documentation files.
! The default is <samp><var>docdir</var></samp>.
  </p>
  </dd>
! <dt><code>--mandir=<var>dirname</var></code></dt>
  <dd><p>Specify the installation directory for manual pages.  The default is
! <samp><var>datarootdir</var>/man</samp>.  (Note that the manual pages are only extracts
  from the full GCC manuals, which are provided in Texinfo format.  The manpages
  are derived by an automatic conversion process from parts of the full
  manual.)
  </p>
  </dd>
! <dt><code>--with-gxx-include-dir=<var>dirname</var></code></dt>
  <dd><p>Specify
  the installation directory for G++ header files.  The default depends
  on other configuration options, and differs between cross and native
  configurations.
  </p>
  </dd>
! <dt><code>--with-specs=<var>specs</var></code></dt>
  <dd><p>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&rsquo;s source code, for instance
! <samp>--with-specs=%{!fcommon:%{!fno-common:-fno-common}}</samp>.
  See &ldquo;Spec Files&rdquo; in the main manual
  </p>
  </dd>
  </dl>
  
  </dd>
! <dt><code>--program-prefix=<var>prefix</var></code></dt>
  <dd><p>GCC supports some transformations of the names of its programs when
! installing them.  This option prepends <var>prefix</var> to the names of
! programs to install in <var>bindir</var> (see above).  For example, specifying
! <samp>--program-prefix=foo-</samp> would result in &lsquo;<samp>gcc</samp>&rsquo;
! being installed as <samp>/usr/local/bin/foo-gcc</samp>.
  </p>
  </dd>
! <dt><code>--program-suffix=<var>suffix</var></code></dt>
! <dd><p>Appends <var>suffix</var> to the names of programs to install in <var>bindir</var>
! (see above).  For example, specifying <samp>--program-suffix=-3.1</samp>
! would result in &lsquo;<samp>gcc</samp>&rsquo; being installed as
! <samp>/usr/local/bin/gcc-3.1</samp>.
  </p>
  </dd>
! <dt><code>--program-transform-name=<var>pattern</var></code></dt>
! <dd><p>Applies the &lsquo;<samp>sed</samp>&rsquo; script <var>pattern</var> to be applied to the names
! of programs to install in <var>bindir</var> (see above).  <var>pattern</var> has to
! consist of one or more basic &lsquo;<samp>sed</samp>&rsquo; editing commands, separated by
! semicolons.  For example, if you want the &lsquo;<samp>gcc</samp>&rsquo; program name to be
! transformed to the installed program <samp>/usr/local/bin/myowngcc</samp> and
! the &lsquo;<samp>g++</samp>&rsquo; program name to be transformed to
! <samp>/usr/local/bin/gspecial++</samp> without changing other program names,
  you could use the pattern
! <samp>--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'</samp>
  to achieve this effect.
  </p>
  <p>All three options can be combined and used together, resulting in more
! complex conversion patterns.  As a basic rule, <var>prefix</var> (and
! <var>suffix</var>) are prepended (appended) before further transformations
! can happen with a special transformation script <var>pattern</var>.
  </p>
  <p>As currently implemented, this option only takes effect for native
  builds; cross compiler binaries&rsquo; names are not transformed even when a
--- 213,369 ----
  
  <p>Here is a list of system types:
  </p>
! <blockquote class="quotation">
! <p>aix<var class="var">version</var>, amdhsa, aout, cygwin, darwin<var class="var">version</var>,
  eabi, eabialtivec, eabisim, eabisimaltivec, elf, elf32,
! elfbare, elfoabi, freebsd<var class="var">version</var>, gnu, hpux, hpux<var class="var">version</var>,
  kfreebsd-gnu, kopensolaris-gnu, linux-androideabi, linux-gnu,
  linux-gnu_altivec, linux-musl, linux-uclibc, lynxos, mingw32, mingw32crt,
! mmixware, msdosdjgpp, netbsd, netbsdelf<var class="var">version</var>, nto-qnx, openbsd,
! rtems, solaris<var class="var">version</var>, symbianelf, tpf, uclinux, uclinux_eabi, vms,
  vxworks, vxworksae, vxworksmils
  </p></blockquote>
  
! <h3 class="heading" id="Options-specification"><span>Options specification<a class="copiable-link" href="#Options-specification"> &para;</a></span></h3>
  
! <p>Use <var class="var">options</var> to override several configure time options for
! GCC.  A list of supported <var class="var">options</var> follows; &lsquo;<samp class="samp">configure
  --help</samp>&rsquo; may list other options, but those not listed below may not
  work and should not normally be used.
  </p>
! <p>Note that each <samp class="option">--enable</samp> option has a corresponding
! <samp class="option">--disable</samp> option and that each <samp class="option">--with</samp> option has a
! corresponding <samp class="option">--without</samp> option.
  </p>
! <dl class="table">
! <dt><code class="code">--prefix=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the toplevel installation
  directory.  This is the recommended way to install the tools into a directory
  other than the default.  The toplevel installation directory defaults to
! <samp class="file">/usr/local</samp>.
  </p>
! <p>We <strong class="strong">highly</strong> recommend against <var class="var">dirname</var> being the same or a
! subdirectory of <var class="var">objdir</var> or vice versa.  If specifying a directory
  beneath a user&rsquo;s home directory tree, some shells will not expand
! <var class="var">dirname</var> correctly if it contains the &lsquo;<samp class="samp">~</samp>&rsquo; metacharacter; use
! <code class="env">$HOME</code> instead.
  </p>
! <p>The following standard <code class="command">autoconf</code> options are supported.  Normally you
  should not need to use these options.
! </p><dl class="table">
! <dt><code class="code">--exec-prefix=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the toplevel installation directory for architecture-dependent
! files.  The default is <samp class="file"><var class="var">prefix</var></samp>.
  </p>
  </dd>
! <dt><code class="code">--bindir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for the executables called by users
! (such as <code class="command">gcc</code> and <code class="command">g++</code>).  The default is
! <samp class="file"><var class="var">exec-prefix</var>/bin</samp>.
  </p>
  </dd>
! <dt><code class="code">--libdir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for object code libraries and
! internal data files of GCC.  The default is <samp class="file"><var class="var">exec-prefix</var>/lib</samp>.
  </p>
  </dd>
! <dt><code class="code">--libexecdir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for internal executables of GCC.
! The default is <samp class="file"><var class="var">exec-prefix</var>/libexec</samp>.
  </p>
  </dd>
! <dt><code class="code">--with-slibdir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for the shared libgcc library.  The
! default is <samp class="file"><var class="var">libdir</var></samp>.
  </p>
  </dd>
! <dt><code class="code">--datarootdir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the root of the directory tree for read-only architecture-independent
! data files referenced by GCC.  The default is <samp class="file"><var class="var">prefix</var>/share</samp>.
  </p>
  </dd>
! <dt><code class="code">--infodir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for documentation in info format.
! The default is <samp class="file"><var class="var">datarootdir</var>/info</samp>.
  </p>
  </dd>
! <dt><code class="code">--datadir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for some architecture-independent
! data files referenced by GCC.  The default is <samp class="file"><var class="var">datarootdir</var></samp>.
  </p>
  </dd>
! <dt><code class="code">--docdir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for documentation files (other
! than Info) for GCC.  The default is <samp class="file"><var class="var">datarootdir</var>/doc</samp>.
  </p>
  </dd>
! <dt><code class="code">--htmldir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for HTML documentation files.
! The default is <samp class="file"><var class="var">docdir</var></samp>.
  </p>
  </dd>
! <dt><code class="code">--pdfdir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for PDF documentation files.
! The default is <samp class="file"><var class="var">docdir</var></samp>.
  </p>
  </dd>
! <dt><code class="code">--mandir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the installation directory for manual pages.  The default is
! <samp class="file"><var class="var">datarootdir</var>/man</samp>.  (Note that the manual pages are only extracts
  from the full GCC manuals, which are provided in Texinfo format.  The manpages
  are derived by an automatic conversion process from parts of the full
  manual.)
  </p>
  </dd>
! <dt><code class="code">--with-gxx-include-dir=<var class="var">dirname</var></code></dt>
  <dd><p>Specify
  the installation directory for G++ header files.  The default depends
  on other configuration options, and differs between cross and native
  configurations.
  </p>
  </dd>
! <dt><code class="code">--with-specs=<var class="var">specs</var></code></dt>
  <dd><p>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&rsquo;s source code, for instance
! <samp class="option">--with-specs=%{!fcommon:%{!fno-common:-fno-common}}</samp>.
  See &ldquo;Spec Files&rdquo; in the main manual
  </p>
  </dd>
  </dl>
  
  </dd>
! <dt><code class="code">--program-prefix=<var class="var">prefix</var></code></dt>
  <dd><p>GCC supports some transformations of the names of its programs when
! installing them.  This option prepends <var class="var">prefix</var> to the names of
! programs to install in <var class="var">bindir</var> (see above).  For example, specifying
! <samp class="option">--program-prefix=foo-</samp> would result in &lsquo;<samp class="samp">gcc</samp>&rsquo;
! being installed as <samp class="file">/usr/local/bin/foo-gcc</samp>.
  </p>
  </dd>
! <dt><code class="code">--program-suffix=<var class="var">suffix</var></code></dt>
! <dd><p>Appends <var class="var">suffix</var> to the names of programs to install in <var class="var">bindir</var>
! (see above).  For example, specifying <samp class="option">--program-suffix=-3.1</samp>
! would result in &lsquo;<samp class="samp">gcc</samp>&rsquo; being installed as
! <samp class="file">/usr/local/bin/gcc-3.1</samp>.
  </p>
  </dd>
! <dt><code class="code">--program-transform-name=<var class="var">pattern</var></code></dt>
! <dd><p>Applies the &lsquo;<samp class="samp">sed</samp>&rsquo; script <var class="var">pattern</var> to be applied to the names
! of programs to install in <var class="var">bindir</var> (see above).  <var class="var">pattern</var> has to
! consist of one or more basic &lsquo;<samp class="samp">sed</samp>&rsquo; editing commands, separated by
! semicolons.  For example, if you want the &lsquo;<samp class="samp">gcc</samp>&rsquo; program name to be
! transformed to the installed program <samp class="file">/usr/local/bin/myowngcc</samp> and
! the &lsquo;<samp class="samp">g++</samp>&rsquo; program name to be transformed to
! <samp class="file">/usr/local/bin/gspecial++</samp> without changing other program names,
  you could use the pattern
! <samp class="option">--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'</samp>
  to achieve this effect.
  </p>
  <p>All three options can be combined and used together, resulting in more
! complex conversion patterns.  As a basic rule, <var class="var">prefix</var> (and
! <var class="var">suffix</var>) are prepended (appended) before further transformations
! can happen with a special transformation script <var class="var">pattern</var>.
  </p>
  <p>As currently implemented, this option only takes effect for native
  builds; cross compiler binaries&rsquo; names are not transformed even when a
*************** transformation is explicitly asked for b
*** 391,428 ****
  </p>
  <p>For native builds, some of the installed programs are also installed
  with the target alias in front of their name, as in
! &lsquo;<samp>i686-pc-linux-gnu-gcc</samp>&rsquo;.  All of the above transformations happen
  before the target alias is prepended to the name&mdash;so, specifying
! <samp>--program-prefix=foo-</samp> and <samp>program-suffix=-3.1</samp>, the
  resulting binary would be installed as
! <samp>/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1</samp>.
  </p>
  <p>As a last shortcoming, none of the installed Ada programs are
  transformed yet, which will be fixed in some time.
  </p>
  </dd>
! <dt><code>--with-local-prefix=<var>dirname</var></code></dt>
  <dd><p>Specify the
  installation directory for local include files.  The default is
! <samp>/usr/local</samp>.  Specify this option if you want the compiler to
! search directory <samp><var>dirname</var>/include</samp> for locally installed
! header files <em>instead</em> of <samp>/usr/local/include</samp>.
  </p>
! <p>You should specify <samp>--with-local-prefix</samp> <strong>only</strong> if your
! site has a different convention (not <samp>/usr/local</samp>) for where to put
  site-specific files.
  </p>
! <p>The default value for <samp>--with-local-prefix</samp> is <samp>/usr/local</samp>
! regardless of the value of <samp>--prefix</samp>.  Specifying
! <samp>--prefix</samp> has no effect on which directory GCC searches for
  local header files.  This may seem counterintuitive, but actually it is
  logical.
  </p>
! <p>The purpose of <samp>--prefix</samp> is to specify where to <em>install
! GCC</em>.  The local header files in <samp>/usr/local/include</samp>&mdash;if you put
  any in that directory&mdash;are not part of GCC.  They are part of other
  programs&mdash;perhaps many others.  (GCC installs its own header files in
! another directory which is based on the <samp>--prefix</samp> value.)
  </p>
  <p>Both the local-prefix include directory and the GCC-prefix include
  directory are part of GCC&rsquo;s &ldquo;system include&rdquo; directories.  Although these
--- 371,408 ----
  </p>
  <p>For native builds, some of the installed programs are also installed
  with the target alias in front of their name, as in
! &lsquo;<samp class="samp">i686-pc-linux-gnu-gcc</samp>&rsquo;.  All of the above transformations happen
  before the target alias is prepended to the name&mdash;so, specifying
! <samp class="option">--program-prefix=foo-</samp> and <samp class="option">program-suffix=-3.1</samp>, the
  resulting binary would be installed as
! <samp class="file">/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1</samp>.
  </p>
  <p>As a last shortcoming, none of the installed Ada programs are
  transformed yet, which will be fixed in some time.
  </p>
  </dd>
! <dt><code class="code">--with-local-prefix=<var class="var">dirname</var></code></dt>
  <dd><p>Specify the
  installation directory for local include files.  The default is
! <samp class="file">/usr/local</samp>.  Specify this option if you want the compiler to
! search directory <samp class="file"><var class="var">dirname</var>/include</samp> for locally installed
! header files <em class="emph">instead</em> of <samp class="file">/usr/local/include</samp>.
  </p>
! <p>You should specify <samp class="option">--with-local-prefix</samp> <strong class="strong">only</strong> if your
! site has a different convention (not <samp class="file">/usr/local</samp>) for where to put
  site-specific files.
  </p>
! <p>The default value for <samp class="option">--with-local-prefix</samp> is <samp class="file">/usr/local</samp>
! regardless of the value of <samp class="option">--prefix</samp>.  Specifying
! <samp class="option">--prefix</samp> has no effect on which directory GCC searches for
  local header files.  This may seem counterintuitive, but actually it is
  logical.
  </p>
! <p>The purpose of <samp class="option">--prefix</samp> is to specify where to <em class="emph">install
! GCC</em>.  The local header files in <samp class="file">/usr/local/include</samp>&mdash;if you put
  any in that directory&mdash;are not part of GCC.  They are part of other
  programs&mdash;perhaps many others.  (GCC installs its own header files in
! another directory which is based on the <samp class="option">--prefix</samp> value.)
  </p>
  <p>Both the local-prefix include directory and the GCC-prefix include
  directory are part of GCC&rsquo;s &ldquo;system include&rdquo; directories.  Although these
*************** local-prefix include directory is search
*** 432,472 ****
  include directory.  Another characteristic of system include directories
  is that pedantic warnings are turned off for headers in these directories.
  </p>
! <p>Some autoconf macros add <samp>-I <var>directory</var></samp> options to the
  compiler command line, to ensure that directories containing installed
! packages&rsquo; headers are searched.  When <var>directory</var> is one of GCC&rsquo;s
  system include directories, GCC will ignore the option so that system
  directories continue to be processed in the correct order.  This
  may result in a search order different from what was specified but the
  directory will still be searched.
  </p>
  <p>GCC automatically searches for ordinary libraries using
! <code>GCC_EXEC_PREFIX</code>.  Thus, when the same installation prefix is
  used for both GCC and packages, GCC will automatically search for
  both headers and libraries.  This provides a configuration that is
  easy to use.  GCC behaves in a manner similar to that when it is
! installed as a system compiler in <samp>/usr</samp>.
  </p>
  <p>Sites that need to install multiple versions of GCC may not want to
  use the above simple configuration.  It is possible to use the
! <samp>--program-prefix</samp>, <samp>--program-suffix</samp> and
! <samp>--program-transform-name</samp> options to install multiple versions
  into a single directory, but it may be simpler to use different prefixes
! and the <samp>--with-local-prefix</samp> option to specify the location of the
  site-specific files for each version.  It will then be necessary for
  users to specify explicitly the location of local site libraries
! (e.g., with <code>LIBRARY_PATH</code>).
  </p>
! <p>The same value can be used for both <samp>--with-local-prefix</samp> and
! <samp>--prefix</samp> provided it is not <samp>/usr</samp>.  This can be used
! to avoid the default search of <samp>/usr/local/include</samp>.
  </p>
! <p><strong>Do not</strong> specify <samp>/usr</samp> as the <samp>--with-local-prefix</samp>!
! The directory you use for <samp>--with-local-prefix</samp> <strong>must not</strong>
  contain any of the system&rsquo;s standard header files.  If it did contain
  them, certain programs would be miscompiled (including GNU Emacs, on
  certain targets), because this would override and nullify the header
! file corrections made by the <code>fixincludes</code> script.
  </p>
  <p>Indications are that people who use this option use it based on mistaken
  ideas of what it is for.  People use it as if it specified where to
--- 412,452 ----
  include directory.  Another characteristic of system include directories
  is that pedantic warnings are turned off for headers in these directories.
  </p>
! <p>Some autoconf macros add <samp class="option">-I <var class="var">directory</var></samp> options to the
  compiler command line, to ensure that directories containing installed
! packages&rsquo; headers are searched.  When <var class="var">directory</var> is one of GCC&rsquo;s
  system include directories, GCC will ignore the option so that system
  directories continue to be processed in the correct order.  This
  may result in a search order different from what was specified but the
  directory will still be searched.
  </p>
  <p>GCC automatically searches for ordinary libraries using
! <code class="env">GCC_EXEC_PREFIX</code>.  Thus, when the same installation prefix is
  used for both GCC and packages, GCC will automatically search for
  both headers and libraries.  This provides a configuration that is
  easy to use.  GCC behaves in a manner similar to that when it is
! installed as a system compiler in <samp class="file">/usr</samp>.
  </p>
  <p>Sites that need to install multiple versions of GCC may not want to
  use the above simple configuration.  It is possible to use the
! <samp class="option">--program-prefix</samp>, <samp class="option">--program-suffix</samp> and
! <samp class="option">--program-transform-name</samp> options to install multiple versions
  into a single directory, but it may be simpler to use different prefixes
! and the <samp class="option">--with-local-prefix</samp> option to specify the location of the
  site-specific files for each version.  It will then be necessary for
  users to specify explicitly the location of local site libraries
! (e.g., with <code class="env">LIBRARY_PATH</code>).
  </p>
! <p>The same value can be used for both <samp class="option">--with-local-prefix</samp> and
! <samp class="option">--prefix</samp> provided it is not <samp class="file">/usr</samp>.  This can be used
! to avoid the default search of <samp class="file">/usr/local/include</samp>.
  </p>
! <p><strong class="strong">Do not</strong> specify <samp class="file">/usr</samp> as the <samp class="option">--with-local-prefix</samp>!
! The directory you use for <samp class="option">--with-local-prefix</samp> <strong class="strong">must not</strong>
  contain any of the system&rsquo;s standard header files.  If it did contain
  them, certain programs would be miscompiled (including GNU Emacs, on
  certain targets), because this would override and nullify the header
! file corrections made by the <code class="command">fixincludes</code> script.
  </p>
  <p>Indications are that people who use this option use it based on mistaken
  ideas of what it is for.  People use it as if it specified where to
*************** install part of GCC.  Perhaps they make
*** 474,494 ****
  installing GCC creates the directory.
  </p>
  </dd>
! <dt><code>--with-gcc-major-version-only</code></dt>
  <dd><p>Specifies that GCC should use only the major number rather than
! <var>major</var>.<var>minor</var>.<var>patchlevel</var> in filesystem paths.
  </p>
  </dd>
! <dt><code>--with-native-system-header-dir=<var>dirname</var></code></dt>
! <dd><p>Specifies that <var>dirname</var> is the directory that contains native system
! header files, rather than <samp>/usr/include</samp>.  This option is most useful
  if you are creating a compiler that should be isolated from the system
  as much as possible.  It is most commonly used with the
! <samp>--with-sysroot</samp> option and will cause GCC to search
! <var>dirname</var> inside the system root specified by that option.
  </p>
  </dd>
! <dt><code>--enable-shared[=<var>package</var>[,&hellip;]]</code></dt>
  <dd><p>Build shared versions of libraries, if shared libraries are supported on
  the target platform.  Unlike GCC 2.95.x and earlier, shared libraries
  are enabled by default on all platforms that support shared libraries.
--- 454,474 ----
  installing GCC creates the directory.
  </p>
  </dd>
! <dt><code class="code">--with-gcc-major-version-only</code></dt>
  <dd><p>Specifies that GCC should use only the major number rather than
! <var class="var">major</var>.<var class="var">minor</var>.<var class="var">patchlevel</var> in filesystem paths.
  </p>
  </dd>
! <dt><code class="code">--with-native-system-header-dir=<var class="var">dirname</var></code></dt>
! <dd><p>Specifies that <var class="var">dirname</var> is the directory that contains native system
! header files, rather than <samp class="file">/usr/include</samp>.  This option is most useful
  if you are creating a compiler that should be isolated from the system
  as much as possible.  It is most commonly used with the
! <samp class="option">--with-sysroot</samp> option and will cause GCC to search
! <var class="var">dirname</var> inside the system root specified by that option.
  </p>
  </dd>
! <dt><code class="code">--enable-shared[=<var class="var">package</var>[,&hellip;]]</code></dt>
  <dd><p>Build shared versions of libraries, if shared libraries are supported on
  the target platform.  Unlike GCC 2.95.x and earlier, shared libraries
  are enabled by default on all platforms that support shared libraries.
*************** are enabled by default on all platforms
*** 496,641 ****
  <p>If a list of packages is given as an argument, build shared libraries
  only for the listed packages.  For other packages, only static libraries
  will be built.  Package names currently recognized in the GCC tree are
! &lsquo;<samp>libgcc</samp>&rsquo; (also known as &lsquo;<samp>gcc</samp>&rsquo;), &lsquo;<samp>libstdc++</samp>&rsquo; (not
! &lsquo;<samp>libstdc++-v3</samp>&rsquo;), &lsquo;<samp>libffi</samp>&rsquo;, &lsquo;<samp>zlib</samp>&rsquo;, &lsquo;<samp>boehm-gc</samp>&rsquo;,
! &lsquo;<samp>ada</samp>&rsquo;, &lsquo;<samp>libada</samp>&rsquo;, &lsquo;<samp>libgo</samp>&rsquo;, &lsquo;<samp>libobjc</samp>&rsquo;, and &lsquo;<samp>libphobos</samp>&rsquo;.
! Note &lsquo;<samp>libiberty</samp>&rsquo; does not support shared libraries at all.
  </p>
! <p>Use <samp>--disable-shared</samp> to build only static libraries.  Note that
! <samp>--disable-shared</samp> does not accept a list of package names as
! argument, only <samp>--enable-shared</samp> does.
  </p>
! <p>Contrast with <samp>--enable-host-shared</samp>, which affects <em>host</em>
  code.
  </p>
  </dd>
! <dt><code>--enable-host-shared</code></dt>
! <dd><p>Specify that the <em>host</em> code should be built into position-independent
! machine code (with <samp>-fPIC</samp>), allowing it to be used within shared
  libraries, but yielding a slightly slower compiler.
  </p>
  <p>This option is required when building the libgccjit.so library.
  </p>
! <p>Contrast with <samp>--enable-shared</samp>, which affects <em>target</em>
  libraries.
  </p>
  </dd>
! <dt><code>--enable-host-pie</code></dt>
! <dd><p>Specify that the <em>host</em> executables should be built into
! position-independent executables (with <samp>-fPIE</samp> and <samp>-pie</samp>),
  yielding a slightly slower compiler (but faster than
! <samp>--enable-host-shared</samp>).  Position-independent executables are loaded
  at random addresses each time they are executed, therefore provide additional
  protection against Return Oriented Programming (ROP) attacks.
  </p>
! <p><samp>--enable-host-pie</samp> may be used with <samp>--enable-host-shared</samp>,
! in which case <samp>-fPIC</samp> is used when compiling, and <samp>-pie</samp> when
  linking.
  </p>
  </dd>
! <dt><code>--enable-host-bind-now</code></dt>
! <dd><p>Specify that the <em>host</em> executables should be linked with the option
! <samp>-Wl,-z,now</samp>, which means that the dynamic linker will resolve all
  symbols when the executables are started, and that in turn allows RELRO to
  mark the GOT read-only, resulting in better security.
  </p>
  </dd>
! <dt><code><a name="with-gnu-as"></a>--with-gnu-as</code></dt>
  <dd><p>Specify that the compiler should assume that the
  assembler it finds is the GNU assembler.  However, this does not modify
  the rules to find an assembler and will result in confusion if the
  assembler found is not actually the GNU assembler.  (Confusion may also
  result if the compiler finds the GNU assembler but has not been
! configured with <samp>--with-gnu-as</samp>.)  If you have more than one
  assembler installed on your system, you may want to use this option in
! connection with <samp>--with-as=<var>pathname</var></samp> or
! <samp>--with-build-time-tools=<var>pathname</var></samp>.
  </p>
  <p>The following systems are the only ones where it makes a difference
  whether you use the GNU assembler.  On any other system,
! <samp>--with-gnu-as</samp> has no effect.
  </p>
! <ul>
! <li> &lsquo;<samp>hppa1.0-<var>any</var>-<var>any</var></samp>&rsquo;
! </li><li> &lsquo;<samp>hppa1.1-<var>any</var>-<var>any</var></samp>&rsquo;
! </li><li> &lsquo;<samp>*-*-solaris2.11</samp>&rsquo;
  </li></ul>
  
  </dd>
! <dt><code><a name="with-as"></a>--with-as=<var>pathname</var></code></dt>
  <dd><p>Specify that the compiler should use the assembler pointed to by
! <var>pathname</var>, rather than the one found by the standard rules to find
  an assembler, which are:
! </p><ul>
! <li> Unless GCC is being built with a cross compiler, check the
! <samp><var>libexec</var>/gcc/<var>target</var>/<var>version</var></samp> directory.
! <var>libexec</var> defaults to <samp><var>exec-prefix</var>/libexec</samp>;
! <var>exec-prefix</var> defaults to <var>prefix</var>, which
! defaults to <samp>/usr/local</samp> unless overridden by the
! <samp>--prefix=<var>pathname</var></samp> switch described above.  <var>target</var>
! is the target system triple, such as &lsquo;<samp>sparc-sun-solaris2.11</samp>&rsquo;, and
! <var>version</var> denotes the GCC version, such as 3.0.
  
! </li><li> If the target system is the same that you are building on, check
  operating system specific directories.
  
! </li><li> Check in the <code>PATH</code> for a tool whose name is prefixed by the
  target system triple.
  
! </li><li> Check in the <code>PATH</code> for a tool whose name is not prefixed by the
  target system triple, if the host and target system triple are
  the same (in other words, we use a host tool if it can be used for
  the target as well).
  </li></ul>
  
! <p>You may want to use <samp>--with-as</samp> if no assembler
  is installed in the directories listed above, or if you have multiple
  assemblers installed and want to choose one that is not found by the
  above rules.
  </p>
  </dd>
! <dt><code><a name="with-gnu-ld"></a>--with-gnu-ld</code></dt>
! <dd><p>Same as <a href="#with-gnu-as"><samp>--with-gnu-as</samp></a>
  but for the linker.
  </p>
  </dd>
! <dt><code>--with-ld=<var>pathname</var></code></dt>
! <dd><p>Same as <a href="#with-as"><samp>--with-as</samp></a>
  but for the linker.
  </p>
  </dd>
! <dt><code>--with-dsymutil=<var>pathname</var></code></dt>
! <dd><p>Same as <a href="#with-as"><samp>--with-as</samp></a>
  but for the debug linker (only used on Darwin platforms so far).
  </p>
  </dd>
! <dt><code>--with-tls=<var>dialect</var></code></dt>
! <dd><p>Specify the default TLS dialect, for systems were there is a choice.
! For ARM targets, possible values for <var>dialect</var> are <code>gnu</code> or
! <code>gnu2</code>, which select between the original GNU dialect and the GNU TLS
  descriptor-based dialect.
! For RISC-V targets, possible values for <var>dialect</var> are <code>trad</code> or
! <code>desc</code>, which select between the traditional GNU dialect and the GNU TLS
  descriptor-based dialect.
  </p>
  </dd>
! <dt><code>--enable-multiarch</code></dt>
  <dd><p>Specify whether to enable or disable multiarch support.  The default is
  to check for glibc start files in a multiarch location, and enable it
  if the files are found.  The auto detection is enabled for native builds,
! and for cross builds configured with <samp>--with-sysroot</samp>, and without
! <samp>--with-native-system-header-dir</samp>.
  More documentation about multiarch can be found at
! <a href="https://wiki.debian.org/Multiarch">https://wiki.debian.org/Multiarch</a>.
  </p>
  </dd>
! <dt><code>--enable-sjlj-exceptions</code></dt>
! <dd><p>Force use of the <code>setjmp</code>/<code>longjmp</code>-based scheme for exceptions.
! &lsquo;<samp>configure</samp>&rsquo; ordinarily picks the correct value based on the platform.
  Only use this option if you are sure you need a different setting.
  </p>
  </dd>
! <dt><code>--enable-vtable-verify</code></dt>
  <dd><p>Specify whether to enable or disable the vtable verification feature.
  Enabling this feature causes libstdc++ to be built with its virtual calls
  in verifiable mode.  This means that, when linked with libvtv, every
--- 476,621 ----
  <p>If a list of packages is given as an argument, build shared libraries
  only for the listed packages.  For other packages, only static libraries
  will be built.  Package names currently recognized in the GCC tree are
! &lsquo;<samp class="samp">libgcc</samp>&rsquo; (also known as &lsquo;<samp class="samp">gcc</samp>&rsquo;), &lsquo;<samp class="samp">libstdc++</samp>&rsquo; (not
! &lsquo;<samp class="samp">libstdc++-v3</samp>&rsquo;), &lsquo;<samp class="samp">libffi</samp>&rsquo;, &lsquo;<samp class="samp">zlib</samp>&rsquo;, &lsquo;<samp class="samp">boehm-gc</samp>&rsquo;,
! &lsquo;<samp class="samp">ada</samp>&rsquo;, &lsquo;<samp class="samp">libada</samp>&rsquo;, &lsquo;<samp class="samp">libgo</samp>&rsquo;, &lsquo;<samp class="samp">libobjc</samp>&rsquo;, and &lsquo;<samp class="samp">libphobos</samp>&rsquo;.
! Note &lsquo;<samp class="samp">libiberty</samp>&rsquo; does not support shared libraries at all.
  </p>
! <p>Use <samp class="option">--disable-shared</samp> to build only static libraries.  Note that
! <samp class="option">--disable-shared</samp> does not accept a list of package names as
! argument, only <samp class="option">--enable-shared</samp> does.
  </p>
! <p>Contrast with <samp class="option">--enable-host-shared</samp>, which affects <em class="emph">host</em>
  code.
  </p>
  </dd>
! <dt><code class="code">--enable-host-shared</code></dt>
! <dd><p>Specify that the <em class="emph">host</em> code should be built into position-independent
! machine code (with <samp class="option">-fPIC</samp>), allowing it to be used within shared
  libraries, but yielding a slightly slower compiler.
  </p>
  <p>This option is required when building the libgccjit.so library.
  </p>
! <p>Contrast with <samp class="option">--enable-shared</samp>, which affects <em class="emph">target</em>
  libraries.
  </p>
  </dd>
! <dt><code class="code">--enable-host-pie</code></dt>
! <dd><p>Specify that the <em class="emph">host</em> executables should be built into
! position-independent executables (with <samp class="option">-fPIE</samp> and <samp class="option">-pie</samp>),
  yielding a slightly slower compiler (but faster than
! <samp class="option">--enable-host-shared</samp>).  Position-independent executables are loaded
  at random addresses each time they are executed, therefore provide additional
  protection against Return Oriented Programming (ROP) attacks.
  </p>
! <p><samp class="option">--enable-host-pie</samp> may be used with <samp class="option">--enable-host-shared</samp>,
! in which case <samp class="option">-fPIC</samp> is used when compiling, and <samp class="option">-pie</samp> when
  linking.
  </p>
  </dd>
! <dt><code class="code">--enable-host-bind-now</code></dt>
! <dd><p>Specify that the <em class="emph">host</em> executables should be linked with the option
! <samp class="option">-Wl,-z,now</samp>, which means that the dynamic linker will resolve all
  symbols when the executables are started, and that in turn allows RELRO to
  mark the GOT read-only, resulting in better security.
  </p>
  </dd>
! <dt><code class="code"><a class="anchor" id="with-gnu-as"></a>--with-gnu-as</code></dt>
  <dd><p>Specify that the compiler should assume that the
  assembler it finds is the GNU assembler.  However, this does not modify
  the rules to find an assembler and will result in confusion if the
  assembler found is not actually the GNU assembler.  (Confusion may also
  result if the compiler finds the GNU assembler but has not been
! configured with <samp class="option">--with-gnu-as</samp>.)  If you have more than one
  assembler installed on your system, you may want to use this option in
! connection with <samp class="option">--with-as=<var class="var">pathname</var></samp> or
! <samp class="option">--with-build-time-tools=<var class="var">pathname</var></samp>.
  </p>
  <p>The following systems are the only ones where it makes a difference
  whether you use the GNU assembler.  On any other system,
! <samp class="option">--with-gnu-as</samp> has no effect.
  </p>
! <ul class="itemize mark-bullet">
! <li>&lsquo;<samp class="samp">hppa1.0-<var class="var">any</var>-<var class="var">any</var></samp>&rsquo;
! </li><li>&lsquo;<samp class="samp">hppa1.1-<var class="var">any</var>-<var class="var">any</var></samp>&rsquo;
! </li><li>&lsquo;<samp class="samp">*-*-solaris2.11</samp>&rsquo;
  </li></ul>
  
  </dd>
! <dt><code class="code"><a class="anchor" id="with-as"></a>--with-as=<var class="var">pathname</var></code></dt>
  <dd><p>Specify that the compiler should use the assembler pointed to by
! <var class="var">pathname</var>, rather than the one found by the standard rules to find
  an assembler, which are:
! </p><ul class="itemize mark-bullet">
! <li>Unless GCC is being built with a cross compiler, check the
! <samp class="file"><var class="var">libexec</var>/gcc/<var class="var">target</var>/<var class="var">version</var></samp> directory.
! <var class="var">libexec</var> defaults to <samp class="file"><var class="var">exec-prefix</var>/libexec</samp>;
! <var class="var">exec-prefix</var> defaults to <var class="var">prefix</var>, which
! defaults to <samp class="file">/usr/local</samp> unless overridden by the
! <samp class="option">--prefix=<var class="var">pathname</var></samp> switch described above.  <var class="var">target</var>
! is the target system triple, such as &lsquo;<samp class="samp">sparc-sun-solaris2.11</samp>&rsquo;, and
! <var class="var">version</var> denotes the GCC version, such as 3.0.
  
! </li><li>If the target system is the same that you are building on, check
  operating system specific directories.
  
! </li><li>Check in the <code class="env">PATH</code> for a tool whose name is prefixed by the
  target system triple.
  
! </li><li>Check in the <code class="env">PATH</code> for a tool whose name is not prefixed by the
  target system triple, if the host and target system triple are
  the same (in other words, we use a host tool if it can be used for
  the target as well).
  </li></ul>
  
! <p>You may want to use <samp class="option">--with-as</samp> if no assembler
  is installed in the directories listed above, or if you have multiple
  assemblers installed and want to choose one that is not found by the
  above rules.
  </p>
  </dd>
! <dt><code class="code"><a class="anchor" id="with-gnu-ld"></a>--with-gnu-ld</code></dt>
! <dd><p>Same as <a class="uref" href="#with-gnu-as"><samp class="option">--with-gnu-as</samp></a>
  but for the linker.
  </p>
  </dd>
! <dt><code class="code">--with-ld=<var class="var">pathname</var></code></dt>
! <dd><p>Same as <a class="uref" href="#with-as"><samp class="option">--with-as</samp></a>
  but for the linker.
  </p>
  </dd>
! <dt><code class="code">--with-dsymutil=<var class="var">pathname</var></code></dt>
! <dd><p>Same as <a class="uref" href="#with-as"><samp class="option">--with-as</samp></a>
  but for the debug linker (only used on Darwin platforms so far).
  </p>
  </dd>
! <dt><code class="code">--with-tls=<var class="var">dialect</var></code></dt>
! <dd><p>Specify the default TLS dialect, for systems where there is a choice.
! For ARM targets, possible values for <var class="var">dialect</var> are <code class="code">gnu</code> or
! <code class="code">gnu2</code>, which select between the original GNU dialect and the GNU TLS
  descriptor-based dialect.
! For RISC-V targets, possible values for <var class="var">dialect</var> are <code class="code">trad</code> or
! <code class="code">desc</code>, which select between the traditional GNU dialect and the GNU TLS
  descriptor-based dialect.
  </p>
  </dd>
! <dt><code class="code">--enable-multiarch</code></dt>
  <dd><p>Specify whether to enable or disable multiarch support.  The default is
  to check for glibc start files in a multiarch location, and enable it
  if the files are found.  The auto detection is enabled for native builds,
! and for cross builds configured with <samp class="option">--with-sysroot</samp>, and without
! <samp class="option">--with-native-system-header-dir</samp>.
  More documentation about multiarch can be found at
! <a class="uref" href="https://wiki.debian.org/Multiarch">https://wiki.debian.org/Multiarch</a>.
  </p>
  </dd>
! <dt><code class="code">--enable-sjlj-exceptions</code></dt>
! <dd><p>Force use of the <code class="code">setjmp</code>/<code class="code">longjmp</code>-based scheme for exceptions.
! &lsquo;<samp class="samp">configure</samp>&rsquo; ordinarily picks the correct value based on the platform.
  Only use this option if you are sure you need a different setting.
  </p>
  </dd>
! <dt><code class="code">--enable-vtable-verify</code></dt>
  <dd><p>Specify whether to enable or disable the vtable verification feature.
  Enabling this feature causes libstdc++ to be built with its virtual calls
  in verifiable mode.  This means that, when linked with libvtv, every
*************** call will be made before actually making
*** 644,684 ****
  the verifier will call stub functions (in libstdc++ itself) and do nothing.
  If vtable verification is disabled, then libstdc++ is not built with its
  virtual calls in verifiable mode at all.  However the libvtv library will
! still be built (see <samp>--disable-libvtv</samp> to turn off building libvtv).
! <samp>--disable-vtable-verify</samp> is the default.
  </p>
  </dd>
! <dt><code>--disable-gcov</code></dt>
  <dd><p>Specify that the run-time library used for coverage analysis
  and associated host tools should not be built.
  </p>
  </dd>
! <dt><code>--disable-multilib</code></dt>
  <dd><p>Specify that multiple target
  libraries to support different target variants, calling
  conventions, etc. should not be built.  The default is to build a
  predefined set of them.
  </p>
  <p>Some targets provide finer-grained control over which multilibs are built
! (e.g., <samp>--disable-softfloat</samp>):
! </p><dl compact="compact">
! <dt><code>arm-*-*</code></dt>
  <dd><p>fpu, 26bit, underscore, interwork, biendian, nofmult.
  </p>
  </dd>
! <dt><code>m68*-*-*</code></dt>
  <dd><p>softfloat, m68881, m68000, m68020.
  </p>
  </dd>
! <dt><code>mips*-*-*</code></dt>
  <dd><p>single-float, biendian, softfloat.
  </p>
  </dd>
! <dt><code>msp430-*-*</code></dt>
  <dd><p>no-exceptions
  </p>
  </dd>
! <dt><code>powerpc*-*-*, rs6000*-*-*</code></dt>
  <dd><p>aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian,
  sysv, aix.
  </p>
--- 624,664 ----
  the verifier will call stub functions (in libstdc++ itself) and do nothing.
  If vtable verification is disabled, then libstdc++ is not built with its
  virtual calls in verifiable mode at all.  However the libvtv library will
! still be built (see <samp class="option">--disable-libvtv</samp> to turn off building libvtv).
! <samp class="option">--disable-vtable-verify</samp> is the default.
  </p>
  </dd>
! <dt><code class="code">--disable-gcov</code></dt>
  <dd><p>Specify that the run-time library used for coverage analysis
  and associated host tools should not be built.
  </p>
  </dd>
! <dt><code class="code">--disable-multilib</code></dt>
  <dd><p>Specify that multiple target
  libraries to support different target variants, calling
  conventions, etc. should not be built.  The default is to build a
  predefined set of them.
  </p>
  <p>Some targets provide finer-grained control over which multilibs are built
! (e.g., <samp class="option">--disable-softfloat</samp>):
! </p><dl class="table">
! <dt><code class="code">arm-*-*</code></dt>
  <dd><p>fpu, 26bit, underscore, interwork, biendian, nofmult.
  </p>
  </dd>
! <dt><code class="code">m68*-*-*</code></dt>
  <dd><p>softfloat, m68881, m68000, m68020.
  </p>
  </dd>
! <dt><code class="code">mips*-*-*</code></dt>
  <dd><p>single-float, biendian, softfloat.
  </p>
  </dd>
! <dt><code class="code">msp430-*-*</code></dt>
  <dd><p>no-exceptions
  </p>
  </dd>
! <dt><code class="code">powerpc*-*-*, rs6000*-*-*</code></dt>
  <dd><p>aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian,
  sysv, aix.
  </p>
*************** sysv, aix.
*** 686,887 ****
  </dl>
  
  </dd>
! <dt><code>--with-multilib-list=<var>list</var></code></dt>
! <dt><code>--without-multilib-list</code></dt>
! <dd><p>Specify what multilibs to build.  <var>list</var> is a comma separated list of
  values, possibly consisting of a single value.  Currently only implemented
  for aarch64*-*-*, amdgcn*-*-*, arm*-*-*, loongarch*-*-*, riscv*-*-*, sh*-*-*
  and x86-64-*-linux*.  The accepted values and meaning for each target is given
  below.
  </p>
! <dl compact="compact">
! <dt><code>aarch64*-*-*</code></dt>
! <dd><p><var>list</var> is a comma separated list of <code>ilp32</code>, and <code>lp64</code>
  to enable ILP32 and LP64 run-time libraries, respectively.  If
! <var>list</var> is empty, then there will be no multilibs and only the
! default run-time library will be built.  If <var>list</var> is
! <code>default</code> or &ndash;with-multilib-list= is not specified, then the
  default set of libraries is selected based on the value of
! <samp>--target</samp>.
  </p>
  </dd>
! <dt><code>amdgcn*-*-*</code></dt>
! <dd><p><var>list</var> is a comma separated list of ISA names (allowed values: <code>fiji</code>,
! <code>gfx900</code>, <code>gfx906</code>, <code>gfx908</code>, <code>gfx90a</code>, <code>gfx90c</code>, 
! <code>gfx1030</code>, <code>gfx1036</code>, <code>gfx1100</code>, <code>gfx1103</code>).
  It ought not include the name of the default
! ISA, specified via <samp>--with-arch</samp>.  If <var>list</var> is empty, then there
  will be no multilibs and only the default run-time library will be built.  If
! <var>list</var> is <code>default</code> or <samp>--with-multilib-list=</samp> is not
  specified, then the default set of libraries is selected.
  </p>
  </dd>
! <dt><code>arm*-*-*</code></dt>
! <dd><p><var>list</var> is a comma separated list of <code>aprofile</code> and
! <code>rmprofile</code> to build multilibs for A or R and M architecture
  profiles respectively.  Note that, due to some limitation of the current
! multilib framework, using the combined <code>aprofile,rmprofile</code>
  multilibs selects in some cases a less optimal multilib than when using
  the multilib profile for the architecture targetted.  The special value
! <code>default</code> is also accepted and is equivalent to omitting the
  option, i.e., only the default run-time library will be enabled.
  </p>
! <p><var>list</var> may instead contain <code>@name</code>, to use the multilib
! configuration Makefile fragment <samp>name</samp> in <samp>gcc/config/arm</samp> in
  the source tree (it is part of the corresponding sources, after all).
  It is recommended, but not required, that files used for this purpose to
! be named starting with <samp>t-ml-</samp>, to make their intended purpose
  self-evident, in line with GCC conventions.  Such files enable custom,
  user-chosen multilib lists to be configured.  Whether multiple such
  files can be used together depends on the contents of the supplied
! files.  See <samp>gcc/config/arm/t-multilib</samp> and its supplementary
! <samp>gcc/config/arm/t-*profile</samp> files for an example of what such
  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</code>-related macros
  expected by the version of GCC you are building.
  See &ldquo;Target Makefile Fragments&rdquo; in the internals manual.
  </p>
  <p>The table below gives the combination of ISAs, architectures, FPUs and
  floating-point ABIs for which multilibs are built for each predefined
  profile.  The union of these options is considered when specifying both
! <code>aprofile</code> and <code>rmprofile</code>.
  </p>
! <table>
! <tr><td width="15%">Option</td><td width="28%">aprofile</td><td width="30%">rmprofile</td></tr>
! <tr><td width="15%">ISAs</td><td width="28%"><code>-marm</code> and <code>-mthumb</code></td><td width="30%"><code>-mthumb</code></td></tr>
  <tr><td width="15%">Architectures<br><br><br><br><br><br></td><td width="28%">default architecture<br>
! <code>-march=armv7-a</code><br>
! <code>-march=armv7ve</code><br>
! <code>-march=armv8-a</code><br><br><br></td><td width="30%">default architecture<br>
! <code>-march=armv6s-m</code><br>
! <code>-march=armv7-m</code><br>
! <code>-march=armv7e-m</code><br>
! <code>-march=armv8-m.base</code><br>
! <code>-march=armv8-m.main</code><br>
! <code>-march=armv7</code></td></tr>
  <tr><td width="15%">FPUs<br><br><br><br><br></td><td width="28%">none<br>
! <code>-mfpu=vfpv3-d16</code><br>
! <code>-mfpu=neon</code><br>
! <code>-mfpu=vfpv4-d16</code><br>
! <code>-mfpu=neon-vfpv4</code><br>
! <code>-mfpu=neon-fp-armv8</code></td><td width="30%">none<br>
! <code>-mfpu=vfpv3-d16</code><br>
! <code>-mfpu=fpv4-sp-d16</code><br>
! <code>-mfpu=fpv5-sp-d16</code><br>
! <code>-mfpu=fpv5-d16</code><br></td></tr>
! <tr><td width="15%">floating-point ABIs<br><br></td><td width="28%"><code>-mfloat-abi=soft</code><br>
! <code>-mfloat-abi=softfp</code><br>
! <code>-mfloat-abi=hard</code></td><td width="30%"><code>-mfloat-abi=soft</code><br>
! <code>-mfloat-abi=softfp</code><br>
! <code>-mfloat-abi=hard</code></td></tr>
  </table>
  
  </dd>
! <dt><code>loongarch*-*-*</code></dt>
! <dd><p><var>list</var> is a comma-separated list, with each of the element starting with
! the following ABI identifiers: <code>lp64d[/base]</code> <code>lp64f[/base]</code>
! <code>lp64d[/base]</code> (the <code>/base</code> suffix may be omitted)
  to enable their respective run-time libraries.
  </p>
! <p>A suffix <code>[/<var>arch</var>][/<var>option</var>/&hellip;]</code> may follow immediately
  after the ABI identifier to customize the compiler options for building the
! given set of libraries.  <var>arch</var> denotes the architecture name recognized
! by the <samp>-march=<var>arch</var></samp> compiler option, which acts as a basic target
! ISA configuration that can be adjusted using the subsequent <var>option</var>
! suffixes, where each <var>option</var> is a compiler option without a leading dash
  (&rsquo;-&rsquo;).
  </p>
  <p>If no such suffix is present for a given multilib variant, the
! configured value of <samp>--with-multilib-default</samp> is appended as a default
! suffix.  If <samp>--with-multilib-default</samp> is not given, the default build
! option <samp>-march=abi-default</samp> is applied when building the variants
  without a suffix.
  </p>
! <p>As a special case, <code>fixed</code> may be used in the position of <var>arch</var>,
  which means using the architecture configured with
! <samp>--with-arch=<var>arch</var></samp>, or its default value (e.g. <code>loongarch64</code>
! for <code>loongarch64-*</code> targets).
  </p>
! <p>If <var>list</var> is empty or <code>default</code>, or if <samp>--with-multilib-list</samp>
  is not specified, then only the default variant of the libraries are built,
  where the default ABI is implied by the configured target triplet.
  </p>
  </dd>
! <dt><code>riscv*-*-*</code></dt>
! <dd><p><var>list</var> is a single ABI name.  The target architecture must be either
! <code>rv32gc</code> or <code>rv64gc</code>.  This will build a single multilib for the
! specified architecture and ABI pair.  If <code>--with-multilib-list</code> is not
  given, then a default set of multilibs is selected based on the value of
! <samp>--target</samp>.  This is usually a large set of multilibs.
  </p>
  </dd>
! <dt><code>sh*-*-*</code></dt>
! <dd><p><var>list</var> is a comma separated list of CPU names.  These must be of the
! form <code>sh*</code> or <code>m*</code> (in which case they match the compiler option
  for that processor).  The list should not contain any endian options -
! these are handled by <samp>--with-endian</samp>.
  </p>
! <p>If <var>list</var> is empty, then there will be no multilibs for extra
  processors.  The multilib for the secondary endian remains enabled.
  </p>
! <p>As a special case, if an entry in the list starts with a <code>!</code>
  (exclamation point), then it is added to the list of excluded multilibs.
! Entries of this sort should be compatible with &lsquo;<samp>MULTILIB_EXCLUDES</samp>&rsquo;
! (once the leading <code>!</code> has been stripped).
  </p>
! <p>If <samp>--with-multilib-list</samp> is not given, then a default set of
! multilibs is selected based on the value of <samp>--target</samp>.  This is
  usually the complete set of libraries, but some targets imply a more
  specialized subset.
  </p>
  <p>Example 1: to configure a compiler for SH4A only, but supporting both
  endians, with little endian being the default:
! </p><div class="smallexample">
! <pre class="smallexample">--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
  </pre></div>
  
  <p>Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
  only little endian SH4AL:
! </p><div class="smallexample">
! <pre class="smallexample">--with-cpu=sh4a --with-endian=little,big \
  --with-multilib-list=sh4al,!mb/m4al
  </pre></div>
  
  </dd>
! <dt><code>x86-64-*-linux*</code></dt>
! <dd><p><var>list</var> is a comma separated list of <code>m32</code>, <code>m64</code> and
! <code>mx32</code> to enable 32-bit, 64-bit and x32 run-time libraries,
! respectively.  If <var>list</var> is empty, then there will be no multilibs
  and only the default run-time library will be enabled.
  </p>
! <p>If <samp>--with-multilib-list</samp> is not given, then only 32-bit and
  64-bit run-time libraries will be enabled.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code>--with-multilib-default</code></dt>
  <dd><p>On LoongArch targets, set the default build options for enabled multilibs
  without build options appended to their corresponding
! <samp>--with-multilib-list</samp> items.  The format of this value is
! <code>[/<var>arch</var>][/<var>option</var>/&hellip;]</code>, where <var>arch</var> is an
! architecture name recognized by <samp>-march=<var>arch</var></samp> compiler option,
! and subsequent <var>option</var> suffixes are compiler options minus a leading
  dash (&rsquo;-&rsquo;).
  </p>
! <p>Multiple <var>option</var>s may appear consecutively while <var>arch</var> may only
! appear in the beginning or be omitted (which means <samp>-march=abi-default</samp>
  is applied when building the libraries).
  </p>
  </dd>
! <dt><code>--with-strict-align-lib</code></dt>
! <dd><p>On LoongArch targets, build all enabled multilibs with <samp>-mstrict-align</samp>
  (Not enabled by default).
  </p>
  </dd>
! <dt><code>--with-multilib-generator=<var>config</var></code></dt>
! <dd><p>Specify what multilibs to build.  <var>config</var> is a semicolon separated list of
  values, possibly consisting of a single value.  Currently only implemented
  for riscv*-*-elf*.  The accepted values and meanings are given below.
  </p>
--- 666,868 ----
  </dl>
  
  </dd>
! <dt><code class="code">--with-multilib-list=<var class="var">list</var></code></dt>
! <dt><code class="code">--without-multilib-list</code></dt>
! <dd><p>Specify what multilibs to build.  <var class="var">list</var> is a comma separated list of
  values, possibly consisting of a single value.  Currently only implemented
  for aarch64*-*-*, amdgcn*-*-*, arm*-*-*, loongarch*-*-*, riscv*-*-*, sh*-*-*
  and x86-64-*-linux*.  The accepted values and meaning for each target is given
  below.
  </p>
! <dl class="table">
! <dt><code class="code">aarch64*-*-*</code></dt>
! <dd><p><var class="var">list</var> is a comma separated list of <code class="code">ilp32</code>, and <code class="code">lp64</code>
  to enable ILP32 and LP64 run-time libraries, respectively.  If
! <var class="var">list</var> is empty, then there will be no multilibs and only the
! default run-time library will be built.  If <var class="var">list</var> is
! <code class="code">default</code> or &ndash;with-multilib-list= is not specified, then the
  default set of libraries is selected based on the value of
! <samp class="option">--target</samp>.
  </p>
  </dd>
! <dt><code class="code">amdgcn*-*-*</code></dt>
! <dd><p><var class="var">list</var> is a comma separated list of ISA names (allowed values: <code class="code">fiji</code>,
! <code class="code">gfx900</code>, <code class="code">gfx906</code>, <code class="code">gfx908</code>, <code class="code">gfx90a</code>, <code class="code">gfx90c</code>, 
! <code class="code">gfx1030</code>, <code class="code">gfx1036</code>, <code class="code">gfx1100</code>, <code class="code">gfx1103</code>).
  It ought not include the name of the default
! ISA, specified via <samp class="option">--with-arch</samp>.  If <var class="var">list</var> is empty, then there
  will be no multilibs and only the default run-time library will be built.  If
! <var class="var">list</var> is <code class="code">default</code> or <samp class="option">--with-multilib-list=</samp> is not
  specified, then the default set of libraries is selected.
  </p>
  </dd>
! <dt><code class="code">arm*-*-*</code></dt>
! <dd><p><var class="var">list</var> is a comma separated list of <code class="code">aprofile</code> and
! <code class="code">rmprofile</code> to build multilibs for A or R and M architecture
  profiles respectively.  Note that, due to some limitation of the current
! multilib framework, using the combined <code class="code">aprofile,rmprofile</code>
  multilibs selects in some cases a less optimal multilib than when using
  the multilib profile for the architecture targetted.  The special value
! <code class="code">default</code> is also accepted and is equivalent to omitting the
  option, i.e., only the default run-time library will be enabled.
  </p>
! <p><var class="var">list</var> may instead contain <code class="code">@name</code>, to use the multilib
! configuration Makefile fragment <samp class="file">name</samp> in <samp class="file">gcc/config/arm</samp> in
  the source tree (it is part of the corresponding sources, after all).
  It is recommended, but not required, that files used for this purpose to
! be named starting with <samp class="file">t-ml-</samp>, to make their intended purpose
  self-evident, in line with GCC conventions.  Such files enable custom,
  user-chosen multilib lists to be configured.  Whether multiple such
  files can be used together depends on the contents of the supplied
! files.  See <samp class="file">gcc/config/arm/t-multilib</samp> and its supplementary
! <samp class="file">gcc/config/arm/t-*profile</samp> files for an example of what such
  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 class="code">MULTILIB</code>-related macros
  expected by the version of GCC you are building.
  See &ldquo;Target Makefile Fragments&rdquo; in the internals manual.
  </p>
  <p>The table below gives the combination of ISAs, architectures, FPUs and
  floating-point ABIs for which multilibs are built for each predefined
  profile.  The union of these options is considered when specifying both
! <code class="code">aprofile</code> and <code class="code">rmprofile</code>.
  </p>
! <table class="multitable">
! <tbody><tr><td width="15%">Option</td><td width="28%">aprofile</td><td width="30%">rmprofile</td></tr>
! <tr><td width="15%">ISAs</td><td width="28%"><code class="code">-marm</code> and <code class="code">-mthumb</code></td><td width="30%"><code class="code">-mthumb</code></td></tr>
  <tr><td width="15%">Architectures<br><br><br><br><br><br></td><td width="28%">default architecture<br>
! <code class="code">-march=armv7-a</code><br>
! <code class="code">-march=armv7ve</code><br>
! <code class="code">-march=armv8-a</code><br><br><br></td><td width="30%">default architecture<br>
! <code class="code">-march=armv6s-m</code><br>
! <code class="code">-march=armv7-m</code><br>
! <code class="code">-march=armv7e-m</code><br>
! <code class="code">-march=armv8-m.base</code><br>
! <code class="code">-march=armv8-m.main</code><br>
! <code class="code">-march=armv7</code></td></tr>
  <tr><td width="15%">FPUs<br><br><br><br><br></td><td width="28%">none<br>
! <code class="code">-mfpu=vfpv3-d16</code><br>
! <code class="code">-mfpu=neon</code><br>
! <code class="code">-mfpu=vfpv4-d16</code><br>
! <code class="code">-mfpu=neon-vfpv4</code><br>
! <code class="code">-mfpu=neon-fp-armv8</code></td><td width="30%">none<br>
! <code class="code">-mfpu=vfpv3-d16</code><br>
! <code class="code">-mfpu=fpv4-sp-d16</code><br>
! <code class="code">-mfpu=fpv5-sp-d16</code><br>
! <code class="code">-mfpu=fpv5-d16</code><br></td></tr>
! <tr><td width="15%">floating-point ABIs<br><br></td><td width="28%"><code class="code">-mfloat-abi=soft</code><br>
! <code class="code">-mfloat-abi=softfp</code><br>
! <code class="code">-mfloat-abi=hard</code></td><td width="30%"><code class="code">-mfloat-abi=soft</code><br>
! <code class="code">-mfloat-abi=softfp</code><br>
! <code class="code">-mfloat-abi=hard</code></td></tr>
! </tbody>
  </table>
  
  </dd>
! <dt><code class="code">loongarch*-*-*</code></dt>
! <dd><p><var class="var">list</var> is a comma-separated list, with each of the element starting with
! the following ABI identifiers: <code class="code">lp64d[/base]</code> <code class="code">lp64f[/base]</code>
! <code class="code">lp64d[/base]</code> (the <code class="code">/base</code> suffix may be omitted)
  to enable their respective run-time libraries.
  </p>
! <p>A suffix <code class="code">[/<var class="var">arch</var>][/<var class="var">option</var>/&hellip;]</code> may follow immediately
  after the ABI identifier to customize the compiler options for building the
! given set of libraries.  <var class="var">arch</var> denotes the architecture name recognized
! by the <samp class="option">-march=<var class="var">arch</var></samp> compiler option, which acts as a basic target
! ISA configuration that can be adjusted using the subsequent <var class="var">option</var>
! suffixes, where each <var class="var">option</var> is a compiler option without a leading dash
  (&rsquo;-&rsquo;).
  </p>
  <p>If no such suffix is present for a given multilib variant, the
! configured value of <samp class="option">--with-multilib-default</samp> is appended as a default
! suffix.  If <samp class="option">--with-multilib-default</samp> is not given, the default build
! option <samp class="option">-march=abi-default</samp> is applied when building the variants
  without a suffix.
  </p>
! <p>As a special case, <code class="code">fixed</code> may be used in the position of <var class="var">arch</var>,
  which means using the architecture configured with
! <samp class="option">--with-arch=<var class="var">arch</var></samp>, or its default value (e.g. <code class="code">loongarch64</code>
! for <code class="code">loongarch64-*</code> targets).
  </p>
! <p>If <var class="var">list</var> is empty or <code class="code">default</code>, or if <samp class="option">--with-multilib-list</samp>
  is not specified, then only the default variant of the libraries are built,
  where the default ABI is implied by the configured target triplet.
  </p>
  </dd>
! <dt><code class="code">riscv*-*-*</code></dt>
! <dd><p><var class="var">list</var> is a single ABI name.  The target architecture must be either
! <code class="code">rv32gc</code> or <code class="code">rv64gc</code>.  This will build a single multilib for the
! specified architecture and ABI pair.  If <code class="code">--with-multilib-list</code> is not
  given, then a default set of multilibs is selected based on the value of
! <samp class="option">--target</samp>.  This is usually a large set of multilibs.
  </p>
  </dd>
! <dt><code class="code">sh*-*-*</code></dt>
! <dd><p><var class="var">list</var> is a comma separated list of CPU names.  These must be of the
! form <code class="code">sh*</code> or <code class="code">m*</code> (in which case they match the compiler option
  for that processor).  The list should not contain any endian options -
! these are handled by <samp class="option">--with-endian</samp>.
  </p>
! <p>If <var class="var">list</var> is empty, then there will be no multilibs for extra
  processors.  The multilib for the secondary endian remains enabled.
  </p>
! <p>As a special case, if an entry in the list starts with a <code class="code">!</code>
  (exclamation point), then it is added to the list of excluded multilibs.
! Entries of this sort should be compatible with &lsquo;<samp class="samp">MULTILIB_EXCLUDES</samp>&rsquo;
! (once the leading <code class="code">!</code> has been stripped).
  </p>
! <p>If <samp class="option">--with-multilib-list</samp> is not given, then a default set of
! multilibs is selected based on the value of <samp class="option">--target</samp>.  This is
  usually the complete set of libraries, but some targets imply a more
  specialized subset.
  </p>
  <p>Example 1: to configure a compiler for SH4A only, but supporting both
  endians, with little endian being the default:
! </p><div class="example smallexample">
! <pre class="example-preformatted">--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
  </pre></div>
  
  <p>Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
  only little endian SH4AL:
! </p><div class="example smallexample">
! <pre class="example-preformatted">--with-cpu=sh4a --with-endian=little,big \
  --with-multilib-list=sh4al,!mb/m4al
  </pre></div>
  
  </dd>
! <dt><code class="code">x86-64-*-linux*</code></dt>
! <dd><p><var class="var">list</var> is a comma separated list of <code class="code">m32</code>, <code class="code">m64</code> and
! <code class="code">mx32</code> to enable 32-bit, 64-bit and x32 run-time libraries,
! respectively.  If <var class="var">list</var> is empty, then there will be no multilibs
  and only the default run-time library will be enabled.
  </p>
! <p>If <samp class="option">--with-multilib-list</samp> is not given, then only 32-bit and
  64-bit run-time libraries will be enabled.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code class="code">--with-multilib-default</code></dt>
  <dd><p>On LoongArch targets, set the default build options for enabled multilibs
  without build options appended to their corresponding
! <samp class="option">--with-multilib-list</samp> items.  The format of this value is
! <code class="code">[/<var class="var">arch</var>][/<var class="var">option</var>/&hellip;]</code>, where <var class="var">arch</var> is an
! architecture name recognized by <samp class="option">-march=<var class="var">arch</var></samp> compiler option,
! and subsequent <var class="var">option</var> suffixes are compiler options minus a leading
  dash (&rsquo;-&rsquo;).
  </p>
! <p>Multiple <var class="var">option</var>s may appear consecutively while <var class="var">arch</var> may only
! appear in the beginning or be omitted (which means <samp class="option">-march=abi-default</samp>
  is applied when building the libraries).
  </p>
  </dd>
! <dt><code class="code">--with-strict-align-lib</code></dt>
! <dd><p>On LoongArch targets, build all enabled multilibs with <samp class="option">-mstrict-align</samp>
  (Not enabled by default).
  </p>
  </dd>
! <dt><code class="code">--with-multilib-generator=<var class="var">config</var></code></dt>
! <dd><p>Specify what multilibs to build.  <var class="var">config</var> is a semicolon separated list of
  values, possibly consisting of a single value.  Currently only implemented
  for riscv*-*-elf*.  The accepted values and meanings are given below.
  </p>
*************** for riscv*-*-elf*.  The accepted values
*** 890,956 ****
  reuse rule with architecture string and reuse rule with sub-extension.
  </p>
  <p>Example 1: Add multi-lib suppport for rv32i with ilp32.
! </p><div class="smallexample">
! <pre class="smallexample">rv32i-ilp32--
  </pre></div>
  
  <p>Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32.
! </p><div class="smallexample">
! <pre class="smallexample">rv32i-ilp32--;rv32imafd-ilp32--
  </pre></div>
  
  <p>Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and
  rv32ic with ilp32 will reuse this multi-lib set.
! </p><div class="smallexample">
! <pre class="smallexample">rv32i-ilp32-rv32im-c
  </pre></div>
  
  <p>Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64,
  rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set.
! </p><div class="smallexample">
! <pre class="smallexample">rv64ima-lp64--f,c,fc
  </pre></div>
  
! <p><samp>--with-multilib-generator</samp> have an optional configuration argument
! <samp>--cmodel=val</samp> for code model, this option will expand with other
! config options, <var>val</var> is a comma separated list of possible code model,
  currently we support medlow and medany.
  </p>
  <p>Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model
! </p><div class="smallexample">
! <pre class="smallexample">rv64ima-lp64--;--cmodel=medlow
  </pre></div>
  
  <p>Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model; rv64ima with lp64 and medany code model
! </p><div class="smallexample">
! <pre class="smallexample">rv64ima-lp64--;--cmodel=medlow,medany
  </pre></div>
  
  </dd>
! <dt><code>--with-endian=<var>endians</var></code></dt>
  <dd><p>Specify what endians to use.
  Currently only implemented for sh*-*-*.
  </p>
! <p><var>endians</var> may be one of the following:
! </p><dl compact="compact">
! <dt><code>big</code></dt>
  <dd><p>Use big endian exclusively.
  </p></dd>
! <dt><code>little</code></dt>
  <dd><p>Use little endian exclusively.
  </p></dd>
! <dt><code>big,little</code></dt>
  <dd><p>Use big endian by default.  Provide a multilib for little endian.
  </p></dd>
! <dt><code>little,big</code></dt>
  <dd><p>Use little endian by default.  Provide a multilib for big endian.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code>--enable-threads</code></dt>
  <dd><p>Specify that the target
  supports threads.  This affects the Objective-C compiler and runtime
  library, and exception handling for other languages like C++.
--- 871,937 ----
  reuse rule with architecture string and reuse rule with sub-extension.
  </p>
  <p>Example 1: Add multi-lib suppport for rv32i with ilp32.
! </p><div class="example smallexample">
! <pre class="example-preformatted">rv32i-ilp32--
  </pre></div>
  
  <p>Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32.
! </p><div class="example smallexample">
! <pre class="example-preformatted">rv32i-ilp32--;rv32imafd-ilp32--
  </pre></div>
  
  <p>Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and
  rv32ic with ilp32 will reuse this multi-lib set.
! </p><div class="example smallexample">
! <pre class="example-preformatted">rv32i-ilp32-rv32im-c
  </pre></div>
  
  <p>Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64,
  rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set.
! </p><div class="example smallexample">
! <pre class="example-preformatted">rv64ima-lp64--f,c,fc
  </pre></div>
  
! <p><samp class="option">--with-multilib-generator</samp> have an optional configuration argument
! <samp class="option">--cmodel=val</samp> for code model, this option will expand with other
! config options, <var class="var">val</var> is a comma separated list of possible code model,
  currently we support medlow and medany.
  </p>
  <p>Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model
! </p><div class="example smallexample">
! <pre class="example-preformatted">rv64ima-lp64--;--cmodel=medlow
  </pre></div>
  
  <p>Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model; rv64ima with lp64 and medany code model
! </p><div class="example smallexample">
! <pre class="example-preformatted">rv64ima-lp64--;--cmodel=medlow,medany
  </pre></div>
  
  </dd>
! <dt><code class="code">--with-endian=<var class="var">endians</var></code></dt>
  <dd><p>Specify what endians to use.
  Currently only implemented for sh*-*-*.
  </p>
! <p><var class="var">endians</var> may be one of the following:
! </p><dl class="table">
! <dt><code class="code">big</code></dt>
  <dd><p>Use big endian exclusively.
  </p></dd>
! <dt><code class="code">little</code></dt>
  <dd><p>Use little endian exclusively.
  </p></dd>
! <dt><code class="code">big,little</code></dt>
  <dd><p>Use big endian by default.  Provide a multilib for little endian.
  </p></dd>
! <dt><code class="code">little,big</code></dt>
  <dd><p>Use little endian by default.  Provide a multilib for big endian.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code class="code">--enable-threads</code></dt>
  <dd><p>Specify that the target
  supports threads.  This affects the Objective-C compiler and runtime
  library, and exception handling for other languages like C++.
*************** On some systems, this is the default.
*** 959,1098 ****
  <p>In general, the best (and, in many cases, the only known) threading
  model available will be configured for use.  Beware that on some
  systems, GCC has not been taught what threading models are generally
! available for the system.  In this case, <samp>--enable-threads</samp> is an
! alias for <samp>--enable-threads=single</samp>.
  </p>
  </dd>
! <dt><code>--disable-threads</code></dt>
  <dd><p>Specify that threading support should be disabled for the system.
! This is an alias for <samp>--enable-threads=single</samp>.
  </p>
  </dd>
! <dt><code>--enable-threads=<var>lib</var></code></dt>
  <dd><p>Specify that
! <var>lib</var> is the thread support library.  This affects the Objective-C
  compiler and runtime library, and exception handling for other languages
! like C++.  The possibilities for <var>lib</var> are:
  </p>
! <dl compact="compact">
! <dt><code>aix</code></dt>
  <dd><p>AIX thread support.
  </p></dd>
! <dt><code>dce</code></dt>
  <dd><p>DCE thread support.
  </p></dd>
! <dt><code>lynx</code></dt>
  <dd><p>LynxOS thread support.
  </p></dd>
! <dt><code>mipssde</code></dt>
  <dd><p>MIPS SDE thread support.
  </p></dd>
! <dt><code>no</code></dt>
! <dd><p>This is an alias for &lsquo;<samp>single</samp>&rsquo;.
  </p></dd>
! <dt><code>posix</code></dt>
  <dd><p>Generic POSIX/Unix98 thread support.
  </p></dd>
! <dt><code>rtems</code></dt>
  <dd><p>RTEMS thread support.
  </p></dd>
! <dt><code>single</code></dt>
  <dd><p>Disable thread support, should work for all platforms.
  </p></dd>
! <dt><code>tpf</code></dt>
  <dd><p>TPF thread support.
  </p></dd>
! <dt><code>vxworks</code></dt>
  <dd><p>VxWorks thread support.
  </p></dd>
! <dt><code>win32</code></dt>
  <dd><p>Microsoft Win32 API thread support.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code>--enable-tls</code></dt>
  <dd><p>Specify that the target supports TLS (Thread Local Storage).  Usually
  configure can correctly determine if TLS is supported.  In cases where
  it guesses incorrectly, TLS can be explicitly enabled or disabled with
! <samp>--enable-tls</samp> or <samp>--disable-tls</samp>.  This can happen if
  the assembler supports TLS but the C library does not, or if the
  assumptions made by the configure test are incorrect.
  </p>
  </dd>
! <dt><code>--disable-tls</code></dt>
  <dd><p>Specify that the target does not support TLS.
! This is an alias for <samp>--enable-tls=no</samp>.
  </p>
  </dd>
! <dt><code>--disable-tm-clone-registry</code></dt>
  <dd><p>Disable TM clone registry in libgcc. It is enabled in libgcc by default.
  This option helps to reduce code size for embedded targets which do
  not use transactional memory.
  </p>
  </dd>
! <dt><code>--with-cpu=<var>cpu</var></code></dt>
! <dt><code>--with-cpu-32=<var>cpu</var></code></dt>
! <dt><code>--with-cpu-64=<var>cpu</var></code></dt>
  <dd><p>Specify which cpu variant the compiler should generate code for by default.
! <var>cpu</var> will be used as the default value of the <samp>-mcpu=</samp> switch.
  This option is only supported on some targets, including ARC, ARM, i386, M68k,
! PowerPC, and SPARC.  It is mandatory for ARC.  The <samp>--with-cpu-32</samp> and
! <samp>--with-cpu-64</samp> options specify separate default CPUs for
  32-bit and 64-bit modes; these options are only supported for aarch64, i386,
  x86-64, PowerPC, and SPARC.
  </p>
  </dd>
! <dt><code>--with-schedule=<var>cpu</var></code></dt>
! <dt><code>--with-arch=<var>cpu</var></code></dt>
! <dt><code>--with-arch-32=<var>cpu</var></code></dt>
! <dt><code>--with-arch-64=<var>cpu</var></code></dt>
! <dt><code>--with-tune=<var>cpu</var></code></dt>
! <dt><code>--with-tune-32=<var>cpu</var></code></dt>
! <dt><code>--with-tune-64=<var>cpu</var></code></dt>
! <dt><code>--with-abi=<var>abi</var></code></dt>
! <dt><code>--with-fpu=<var>type</var></code></dt>
! <dt><code>--with-float=<var>type</var></code></dt>
! <dt><code>--with-simd=<var>type</var></code></dt>
! <dd><p>These configure options provide default values for the <samp>-mschedule=</samp>,
! <samp>-march=</samp>, <samp>-mtune=</samp>, <samp>-mabi=</samp>, and <samp>-mfpu=</samp>
! options and for <samp>-mhard-float</samp> or <samp>-msoft-float</samp>.  As with
! <samp>--with-cpu</samp>, which switches will be accepted and acceptable values
  of the arguments depend on the target.
  </p>
  </dd>
! <dt><code>--with-mode=<var>mode</var></code></dt>
! <dd><p>Specify if the compiler should default to <samp>-marm</samp> or <samp>-mthumb</samp>.
  This option is only supported on ARM targets.
  </p>
  </dd>
! <dt><code>--with-stack-offset=<var>num</var></code></dt>
! <dd><p>This option sets the default for the -mstack-offset=<var>num</var> option,
  and will thus generally also control the setting of this option for
  libraries.  This option is only supported on Epiphany targets.
  </p>
  </dd>
! <dt><code>--with-fpmath=<var>isa</var></code></dt>
! <dd><p>This options sets <samp>-mfpmath=sse</samp> by default and specifies the default
! ISA for floating-point arithmetics.  You can select either &lsquo;<samp>sse</samp>&rsquo; which
! enables <samp>-msse2</samp> or &lsquo;<samp>avx</samp>&rsquo; which enables <samp>-mavx</samp> by default.
  This option is only supported on i386 and x86-64 targets.
  </p>
  </dd>
! <dt><code>--with-fp-32=<var>mode</var></code></dt>
! <dd><p>On MIPS targets, set the default value for the <samp>-mfp</samp> option when using
! the o32 ABI.  The possibilities for <var>mode</var> are:
! </p><dl compact="compact">
! <dt><code>32</code></dt>
! <dd><p>Use the o32 FP32 ABI extension, as with the <samp>-mfp32</samp> command-line
  option.
  </p></dd>
! <dt><code>xx</code></dt>
! <dd><p>Use the o32 FPXX ABI extension, as with the <samp>-mfpxx</samp> command-line
  option.
  </p></dd>
! <dt><code>64</code></dt>
! <dd><p>Use the o32 FP64 ABI extension, as with the <samp>-mfp64</samp> command-line
  option.
  </p></dd>
  </dl>
--- 940,1079 ----
  <p>In general, the best (and, in many cases, the only known) threading
  model available will be configured for use.  Beware that on some
  systems, GCC has not been taught what threading models are generally
! available for the system.  In this case, <samp class="option">--enable-threads</samp> is an
! alias for <samp class="option">--enable-threads=single</samp>.
  </p>
  </dd>
! <dt><code class="code">--disable-threads</code></dt>
  <dd><p>Specify that threading support should be disabled for the system.
! This is an alias for <samp class="option">--enable-threads=single</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-threads=<var class="var">lib</var></code></dt>
  <dd><p>Specify that
! <var class="var">lib</var> is the thread support library.  This affects the Objective-C
  compiler and runtime library, and exception handling for other languages
! like C++.  The possibilities for <var class="var">lib</var> are:
  </p>
! <dl class="table">
! <dt><code class="code">aix</code></dt>
  <dd><p>AIX thread support.
  </p></dd>
! <dt><code class="code">dce</code></dt>
  <dd><p>DCE thread support.
  </p></dd>
! <dt><code class="code">lynx</code></dt>
  <dd><p>LynxOS thread support.
  </p></dd>
! <dt><code class="code">mipssde</code></dt>
  <dd><p>MIPS SDE thread support.
  </p></dd>
! <dt><code class="code">no</code></dt>
! <dd><p>This is an alias for &lsquo;<samp class="samp">single</samp>&rsquo;.
  </p></dd>
! <dt><code class="code">posix</code></dt>
  <dd><p>Generic POSIX/Unix98 thread support.
  </p></dd>
! <dt><code class="code">rtems</code></dt>
  <dd><p>RTEMS thread support.
  </p></dd>
! <dt><code class="code">single</code></dt>
  <dd><p>Disable thread support, should work for all platforms.
  </p></dd>
! <dt><code class="code">tpf</code></dt>
  <dd><p>TPF thread support.
  </p></dd>
! <dt><code class="code">vxworks</code></dt>
  <dd><p>VxWorks thread support.
  </p></dd>
! <dt><code class="code">win32</code></dt>
  <dd><p>Microsoft Win32 API thread support.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code class="code">--enable-tls</code></dt>
  <dd><p>Specify that the target supports TLS (Thread Local Storage).  Usually
  configure can correctly determine if TLS is supported.  In cases where
  it guesses incorrectly, TLS can be explicitly enabled or disabled with
! <samp class="option">--enable-tls</samp> or <samp class="option">--disable-tls</samp>.  This can happen if
  the assembler supports TLS but the C library does not, or if the
  assumptions made by the configure test are incorrect.
  </p>
  </dd>
! <dt><code class="code">--disable-tls</code></dt>
  <dd><p>Specify that the target does not support TLS.
! This is an alias for <samp class="option">--enable-tls=no</samp>.
  </p>
  </dd>
! <dt><code class="code">--disable-tm-clone-registry</code></dt>
  <dd><p>Disable TM clone registry in libgcc. It is enabled in libgcc by default.
  This option helps to reduce code size for embedded targets which do
  not use transactional memory.
  </p>
  </dd>
! <dt><code class="code">--with-cpu=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-cpu-32=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-cpu-64=<var class="var">cpu</var></code></dt>
  <dd><p>Specify which cpu variant the compiler should generate code for by default.
! <var class="var">cpu</var> will be used as the default value of the <samp class="option">-mcpu=</samp> switch.
  This option is only supported on some targets, including ARC, ARM, i386, M68k,
! PowerPC, and SPARC.  It is mandatory for ARC.  The <samp class="option">--with-cpu-32</samp> and
! <samp class="option">--with-cpu-64</samp> options specify separate default CPUs for
  32-bit and 64-bit modes; these options are only supported for aarch64, i386,
  x86-64, PowerPC, and SPARC.
  </p>
  </dd>
! <dt><code class="code">--with-schedule=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-arch=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-arch-32=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-arch-64=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-tune=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-tune-32=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-tune-64=<var class="var">cpu</var></code></dt>
! <dt><code class="code">--with-abi=<var class="var">abi</var></code></dt>
! <dt><code class="code">--with-fpu=<var class="var">type</var></code></dt>
! <dt><code class="code">--with-float=<var class="var">type</var></code></dt>
! <dt><code class="code">--with-simd=<var class="var">type</var></code></dt>
! <dd><p>These configure options provide default values for the <samp class="option">-mschedule=</samp>,
! <samp class="option">-march=</samp>, <samp class="option">-mtune=</samp>, <samp class="option">-mabi=</samp>, and <samp class="option">-mfpu=</samp>
! options and for <samp class="option">-mhard-float</samp> or <samp class="option">-msoft-float</samp>.  As with
! <samp class="option">--with-cpu</samp>, which switches will be accepted and acceptable values
  of the arguments depend on the target.
  </p>
  </dd>
! <dt><code class="code">--with-mode=<var class="var">mode</var></code></dt>
! <dd><p>Specify if the compiler should default to <samp class="option">-marm</samp> or <samp class="option">-mthumb</samp>.
  This option is only supported on ARM targets.
  </p>
  </dd>
! <dt><code class="code">--with-stack-offset=<var class="var">num</var></code></dt>
! <dd><p>This option sets the default for the -mstack-offset=<var class="var">num</var> option,
  and will thus generally also control the setting of this option for
  libraries.  This option is only supported on Epiphany targets.
  </p>
  </dd>
! <dt><code class="code">--with-fpmath=<var class="var">isa</var></code></dt>
! <dd><p>This options sets <samp class="option">-mfpmath=sse</samp> by default and specifies the default
! ISA for floating-point arithmetics.  You can select either &lsquo;<samp class="samp">sse</samp>&rsquo; which
! enables <samp class="option">-msse2</samp> or &lsquo;<samp class="samp">avx</samp>&rsquo; which enables <samp class="option">-mavx</samp> by default.
  This option is only supported on i386 and x86-64 targets.
  </p>
  </dd>
! <dt><code class="code">--with-fp-32=<var class="var">mode</var></code></dt>
! <dd><p>On MIPS targets, set the default value for the <samp class="option">-mfp</samp> option when using
! the o32 ABI.  The possibilities for <var class="var">mode</var> are:
! </p><dl class="table">
! <dt><code class="code">32</code></dt>
! <dd><p>Use the o32 FP32 ABI extension, as with the <samp class="option">-mfp32</samp> command-line
  option.
  </p></dd>
! <dt><code class="code">xx</code></dt>
! <dd><p>Use the o32 FPXX ABI extension, as with the <samp class="option">-mfpxx</samp> command-line
  option.
  </p></dd>
! <dt><code class="code">64</code></dt>
! <dd><p>Use the o32 FP64 ABI extension, as with the <samp class="option">-mfp64</samp> command-line
  option.
  </p></dd>
  </dl>
*************** option.
*** 1100,1166 ****
  FP32 ABI extension.
  </p>
  </dd>
! <dt><code>--with-odd-spreg-32</code></dt>
! <dd><p>On MIPS targets, set the <samp>-modd-spreg</samp> option by default when using
  the o32 ABI.
  </p>
  </dd>
! <dt><code>--without-odd-spreg-32</code></dt>
! <dd><p>On MIPS targets, set the <samp>-mno-odd-spreg</samp> option by default when using
  the o32 ABI.  This is normally used in conjunction with
! <samp>--with-fp-32=64</samp> in order to target the o32 FP64A ABI extension.
  </p>
  </dd>
! <dt><code>--with-nan=<var>encoding</var></code></dt>
  <dd><p>On MIPS targets, set the default encoding convention to use for the
  special not-a-number (NaN) IEEE 754 floating-point data.  The
! possibilities for <var>encoding</var> are:
! </p><dl compact="compact">
! <dt><code>legacy</code></dt>
! <dd><p>Use the legacy encoding, as with the <samp>-mnan=legacy</samp> command-line
  option.
  </p></dd>
! <dt><code>2008</code></dt>
! <dd><p>Use the 754-2008 encoding, as with the <samp>-mnan=2008</samp> command-line
  option.
  </p></dd>
  </dl>
  <p>To use this configuration option you must have an assembler version
! installed that supports the <samp>-mnan=</samp> command-line option too.
  In the absence of this configuration option the default convention is
! the legacy encoding, as when neither of the <samp>-mnan=2008</samp> and
! <samp>-mnan=legacy</samp> command-line options has been used.
  </p>
  </dd>
! <dt><code>--with-divide=<var>type</var></code></dt>
  <dd><p>Specify how the compiler should generate code for checking for
  division by zero.  This option is only supported on the MIPS target.
! The possibilities for <var>type</var> are:
! </p><dl compact="compact">
! <dt><code>traps</code></dt>
  <dd><p>Division by zero checks use conditional traps (this is the default on
  systems that support conditional traps).
  </p></dd>
! <dt><code>breaks</code></dt>
  <dd><p>Division by zero checks use the break instruction.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code>--with-compact-branches=<var>policy</var></code></dt>
  <dd><p>Specify how the compiler should generate branch instructions.
  This option is only supported on the MIPS target.
! The possibilities for <var>type</var> are:
! </p><dl compact="compact">
! <dt><code>optimal</code></dt>
  <dd><p>Cause a delay slot branch to be used if one is available in the
  current ISA and the delay slot is successfully filled. If the delay slot
  is not filled, a compact branch will be chosen if one is available.
  </p></dd>
! <dt><code>never</code></dt>
  <dd><p>Ensures that compact branch instructions will never be generated.
  </p></dd>
! <dt><code>always</code></dt>
  <dd><p>Ensures that a compact branch instruction will be generated if available.
  If a compact branch instruction is not available,
  a delay slot form of the branch will be used instead.
--- 1081,1147 ----
  FP32 ABI extension.
  </p>
  </dd>
! <dt><code class="code">--with-odd-spreg-32</code></dt>
! <dd><p>On MIPS targets, set the <samp class="option">-modd-spreg</samp> option by default when using
  the o32 ABI.
  </p>
  </dd>
! <dt><code class="code">--without-odd-spreg-32</code></dt>
! <dd><p>On MIPS targets, set the <samp class="option">-mno-odd-spreg</samp> option by default when using
  the o32 ABI.  This is normally used in conjunction with
! <samp class="option">--with-fp-32=64</samp> in order to target the o32 FP64A ABI extension.
  </p>
  </dd>
! <dt><code class="code">--with-nan=<var class="var">encoding</var></code></dt>
  <dd><p>On MIPS targets, set the default encoding convention to use for the
  special not-a-number (NaN) IEEE 754 floating-point data.  The
! possibilities for <var class="var">encoding</var> are:
! </p><dl class="table">
! <dt><code class="code">legacy</code></dt>
! <dd><p>Use the legacy encoding, as with the <samp class="option">-mnan=legacy</samp> command-line
  option.
  </p></dd>
! <dt><code class="code">2008</code></dt>
! <dd><p>Use the 754-2008 encoding, as with the <samp class="option">-mnan=2008</samp> command-line
  option.
  </p></dd>
  </dl>
  <p>To use this configuration option you must have an assembler version
! installed that supports the <samp class="option">-mnan=</samp> command-line option too.
  In the absence of this configuration option the default convention is
! the legacy encoding, as when neither of the <samp class="option">-mnan=2008</samp> and
! <samp class="option">-mnan=legacy</samp> command-line options has been used.
  </p>
  </dd>
! <dt><code class="code">--with-divide=<var class="var">type</var></code></dt>
  <dd><p>Specify how the compiler should generate code for checking for
  division by zero.  This option is only supported on the MIPS target.
! The possibilities for <var class="var">type</var> are:
! </p><dl class="table">
! <dt><code class="code">traps</code></dt>
  <dd><p>Division by zero checks use conditional traps (this is the default on
  systems that support conditional traps).
  </p></dd>
! <dt><code class="code">breaks</code></dt>
  <dd><p>Division by zero checks use the break instruction.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code class="code">--with-compact-branches=<var class="var">policy</var></code></dt>
  <dd><p>Specify how the compiler should generate branch instructions.
  This option is only supported on the MIPS target.
! The possibilities for <var class="var">type</var> are:
! </p><dl class="table">
! <dt><code class="code">optimal</code></dt>
  <dd><p>Cause a delay slot branch to be used if one is available in the
  current ISA and the delay slot is successfully filled. If the delay slot
  is not filled, a compact branch will be chosen if one is available.
  </p></dd>
! <dt><code class="code">never</code></dt>
  <dd><p>Ensures that compact branch instructions will never be generated.
  </p></dd>
! <dt><code class="code">always</code></dt>
  <dd><p>Ensures that a compact branch instruction will be generated if available.
  If a compact branch instruction is not available,
  a delay slot form of the branch will be used instead.
*************** For pre-R6/microMIPS/MIPS16, this option
*** 1171,1206 ****
  
  
  </dd>
! <dt><code>--with-llsc</code></dt>
! <dd><p>On MIPS targets, make <samp>-mllsc</samp> the default when no
! <samp>-mno-llsc</samp> option is passed.  This is the default for
  Linux-based targets, as the kernel will emulate them if the ISA does
  not provide them.
  </p>
  </dd>
! <dt><code>--without-llsc</code></dt>
! <dd><p>On MIPS targets, make <samp>-mno-llsc</samp> the default when no
! <samp>-mllsc</samp> option is passed.
  </p>
  </dd>
! <dt><code>--with-synci</code></dt>
! <dd><p>On MIPS targets, make <samp>-msynci</samp> the default when no
! <samp>-mno-synci</samp> option is passed.
  </p>
  </dd>
! <dt><code>--without-synci</code></dt>
! <dd><p>On MIPS targets, make <samp>-mno-synci</samp> the default when no
! <samp>-msynci</samp> option is passed.  This is the default.
  </p>
  </dd>
! <dt><code>--with-lxc1-sxc1</code></dt>
! <dd><p>On MIPS targets, make <samp>-mlxc1-sxc1</samp> the default when no
! <samp>-mno-lxc1-sxc1</samp> option is passed.  This is the default.
  </p>
  </dd>
! <dt><code>--without-lxc1-sxc1</code></dt>
! <dd><p>On MIPS targets, make <samp>-mno-lxc1-sxc1</samp> the default when no
! <samp>-mlxc1-sxc1</samp> option is passed.  The indexed load/store
  instructions are not directly a problem but can lead to unexpected
  behaviour when deployed in an application intended for a 32-bit address
  space but run on a 64-bit processor.  The issue is seen because all
--- 1152,1187 ----
  
  
  </dd>
! <dt><code class="code">--with-llsc</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mllsc</samp> the default when no
! <samp class="option">-mno-llsc</samp> option is passed.  This is the default for
  Linux-based targets, as the kernel will emulate them if the ISA does
  not provide them.
  </p>
  </dd>
! <dt><code class="code">--without-llsc</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mno-llsc</samp> the default when no
! <samp class="option">-mllsc</samp> option is passed.
  </p>
  </dd>
! <dt><code class="code">--with-synci</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-msynci</samp> the default when no
! <samp class="option">-mno-synci</samp> option is passed.
  </p>
  </dd>
! <dt><code class="code">--without-synci</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mno-synci</samp> the default when no
! <samp class="option">-msynci</samp> option is passed.  This is the default.
  </p>
  </dd>
! <dt><code class="code">--with-lxc1-sxc1</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mlxc1-sxc1</samp> the default when no
! <samp class="option">-mno-lxc1-sxc1</samp> option is passed.  This is the default.
  </p>
  </dd>
! <dt><code class="code">--without-lxc1-sxc1</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mno-lxc1-sxc1</samp> the default when no
! <samp class="option">-mlxc1-sxc1</samp> option is passed.  The indexed load/store
  instructions are not directly a problem but can lead to unexpected
  behaviour when deployed in an application intended for a 32-bit address
  space but run on a 64-bit processor.  The issue is seen because all
*************** known MIPS 64-bit Linux kernels execute
*** 1208,1227 ****
  with 64-bit addressing enabled which affects the overflow behaviour
  of the indexed addressing mode.  GCC will assume that ordinary
  32-bit arithmetic overflow behaviour is the same whether performed
! as an <code>addu</code> instruction or as part of the address calculation
! in <code>lwxc1</code> type instructions.  This assumption holds true in a
  pure 32-bit environment and can hold true in a 64-bit environment if
  the address space is accurately set to be 32-bit for o32 and n32.
  </p>
  </dd>
! <dt><code>--with-madd4</code></dt>
! <dd><p>On MIPS targets, make <samp>-mmadd4</samp> the default when no
! <samp>-mno-madd4</samp> option is passed.  This is the default.
  </p>
  </dd>
! <dt><code>--without-madd4</code></dt>
! <dd><p>On MIPS targets, make <samp>-mno-madd4</samp> the default when no
! <samp>-mmadd4</samp> option is passed.  The <code>madd4</code> instruction
  family can be problematic when targeting a combination of cores that
  implement these instructions differently.  There are two known cores
  that implement these as fused operations instead of unfused (where
--- 1189,1208 ----
  with 64-bit addressing enabled which affects the overflow behaviour
  of the indexed addressing mode.  GCC will assume that ordinary
  32-bit arithmetic overflow behaviour is the same whether performed
! as an <code class="code">addu</code> instruction or as part of the address calculation
! in <code class="code">lwxc1</code> type instructions.  This assumption holds true in a
  pure 32-bit environment and can hold true in a 64-bit environment if
  the address space is accurately set to be 32-bit for o32 and n32.
  </p>
  </dd>
! <dt><code class="code">--with-madd4</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mmadd4</samp> the default when no
! <samp class="option">-mno-madd4</samp> option is passed.  This is the default.
  </p>
  </dd>
! <dt><code class="code">--without-madd4</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mno-madd4</samp> the default when no
! <samp class="option">-mmadd4</samp> option is passed.  The <code class="code">madd4</code> instruction
  family can be problematic when targeting a combination of cores that
  implement these instructions differently.  There are two known cores
  that implement these as fused operations instead of unfused (where
*************** only way to ensure compatible code is ge
*** 1230,1322 ****
  a performance penalty.
  </p>
  </dd>
! <dt><code>--with-msa</code></dt>
! <dd><p>On MIPS targets, make <samp>-mmsa</samp> the default when no
! <samp>-mno-msa</samp> option is passed.
  </p>
  </dd>
! <dt><code>--without-msa</code></dt>
! <dd><p>On MIPS targets, make <samp>-mno-msa</samp> the default when no
! <samp>-mmsa</samp> option is passed. This is the default.
  </p>
  </dd>
! <dt><code>--with-mips-plt</code></dt>
  <dd><p>On MIPS targets, make use of copy relocations and PLTs.
  These features are extensions to the traditional
  SVR4-based MIPS ABIs and require support from GNU binutils
  and the runtime C library.
  </p>
  </dd>
! <dt><code>--with-stack-clash-protection-guard-size=<var>size</var></code></dt>
  <dd><p>On certain targets this option sets the default stack clash protection guard
! size as a power of two in bytes.  On AArch64 <var>size</var> is required to be either
  12 (4KB) or 16 (64KB).
  </p>
  </dd>
! <dt><code>--with-isa-spec=<var>ISA-spec-string</var></code></dt>
  <dd><p>On RISC-V targets specify the default version of the RISC-V Unprivileged
  (formerly User-Level) ISA specification to produce code conforming to.
! The possibilities for <var>ISA-spec-string</var> are:
! </p><dl compact="compact">
! <dt><code>2.2</code></dt>
  <dd><p>Produce code conforming to version 2.2.
  </p></dd>
! <dt><code>20190608</code></dt>
  <dd><p>Produce code conforming to version 20190608.
  </p></dd>
! <dt><code>20191213</code></dt>
  <dd><p>Produce code conforming to version 20191213.
  </p></dd>
  </dl>
  <p>In the absence of this configuration option the default version is 20191213.
  </p>
  </dd>
! <dt><code>--enable-__cxa_atexit</code></dt>
  <dd><p>Define if you want to use __cxa_atexit, rather than atexit, to
  register C++ destructors for local statics and global objects.
  This is essential for fully standards-compliant handling of
  destructors, but requires __cxa_atexit in libc.  This option is currently
  only available on systems with GNU libc.  When enabled, this will cause
! <samp>-fuse-cxa-atexit</samp> to be passed by default.
  </p>
  </dd>
! <dt><code>--enable-gnu-indirect-function</code></dt>
! <dd><p>Define if you want to enable the <code>ifunc</code> attribute.  This option is
  currently only available on systems with GNU libc on certain targets.
  </p>
  </dd>
! <dt><code>--enable-target-optspace</code></dt>
  <dd><p>Specify that target
  libraries should be optimized for code space instead of code speed.
  This is the default for the m32r platform.
  </p>
  </dd>
! <dt><code>--with-cpp-install-dir=<var>dirname</var></code></dt>
! <dd><p>Specify that the user visible <code>cpp</code> program should be installed
! in <samp><var>prefix</var>/<var>dirname</var>/cpp</samp>, in addition to <var>bindir</var>.
  </p>
  </dd>
! <dt><code>--enable-comdat</code></dt>
  <dd><p>Enable COMDAT group support.  This is primarily used to override the
  automatically detected value.
  </p>
  </dd>
! <dt><code>--enable-initfini-array</code></dt>
! <dd><p>Force the use of sections <code>.init_array</code> and <code>.fini_array</code>
! (instead of <code>.init</code> and <code>.fini</code>) for constructors and
! destructors.  Option <samp>--disable-initfini-array</samp> has the
  opposite effect.  If neither option is specified, the configure script
! will try to guess whether the <code>.init_array</code> and
! <code>.fini_array</code> sections are supported and, if they are, use them.
  </p>
  </dd>
! <dt><code>--enable-link-mutex</code></dt>
  <dd><p>When building GCC, use a mutex to avoid linking the compilers for
  multiple languages at the same time, to avoid thrashing on build
  systems with limited free memory.  The default is not to use such a mutex.
  </p>
  </dd>
! <dt><code>--enable-link-serialization</code></dt>
  <dd><p>When building GCC, use make dependencies to serialize linking the compilers for
  multiple languages, to avoid thrashing on build
  systems with limited free memory.  The default is not to add such
--- 1211,1303 ----
  a performance penalty.
  </p>
  </dd>
! <dt><code class="code">--with-msa</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mmsa</samp> the default when no
! <samp class="option">-mno-msa</samp> option is passed.
  </p>
  </dd>
! <dt><code class="code">--without-msa</code></dt>
! <dd><p>On MIPS targets, make <samp class="option">-mno-msa</samp> the default when no
! <samp class="option">-mmsa</samp> option is passed. This is the default.
  </p>
  </dd>
! <dt><code class="code">--with-mips-plt</code></dt>
  <dd><p>On MIPS targets, make use of copy relocations and PLTs.
  These features are extensions to the traditional
  SVR4-based MIPS ABIs and require support from GNU binutils
  and the runtime C library.
  </p>
  </dd>
! <dt><code class="code">--with-stack-clash-protection-guard-size=<var class="var">size</var></code></dt>
  <dd><p>On certain targets this option sets the default stack clash protection guard
! size as a power of two in bytes.  On AArch64 <var class="var">size</var> is required to be either
  12 (4KB) or 16 (64KB).
  </p>
  </dd>
! <dt><code class="code">--with-isa-spec=<var class="var">ISA-spec-string</var></code></dt>
  <dd><p>On RISC-V targets specify the default version of the RISC-V Unprivileged
  (formerly User-Level) ISA specification to produce code conforming to.
! The possibilities for <var class="var">ISA-spec-string</var> are:
! </p><dl class="table">
! <dt><code class="code">2.2</code></dt>
  <dd><p>Produce code conforming to version 2.2.
  </p></dd>
! <dt><code class="code">20190608</code></dt>
  <dd><p>Produce code conforming to version 20190608.
  </p></dd>
! <dt><code class="code">20191213</code></dt>
  <dd><p>Produce code conforming to version 20191213.
  </p></dd>
  </dl>
  <p>In the absence of this configuration option the default version is 20191213.
  </p>
  </dd>
! <dt><code class="code">--enable-__cxa_atexit</code></dt>
  <dd><p>Define if you want to use __cxa_atexit, rather than atexit, to
  register C++ destructors for local statics and global objects.
  This is essential for fully standards-compliant handling of
  destructors, but requires __cxa_atexit in libc.  This option is currently
  only available on systems with GNU libc.  When enabled, this will cause
! <samp class="option">-fuse-cxa-atexit</samp> to be passed by default.
  </p>
  </dd>
! <dt><code class="code">--enable-gnu-indirect-function</code></dt>
! <dd><p>Define if you want to enable the <code class="code">ifunc</code> attribute.  This option is
  currently only available on systems with GNU libc on certain targets.
  </p>
  </dd>
! <dt><code class="code">--enable-target-optspace</code></dt>
  <dd><p>Specify that target
  libraries should be optimized for code space instead of code speed.
  This is the default for the m32r platform.
  </p>
  </dd>
! <dt><code class="code">--with-cpp-install-dir=<var class="var">dirname</var></code></dt>
! <dd><p>Specify that the user visible <code class="command">cpp</code> program should be installed
! in <samp class="file"><var class="var">prefix</var>/<var class="var">dirname</var>/cpp</samp>, in addition to <var class="var">bindir</var>.
  </p>
  </dd>
! <dt><code class="code">--enable-comdat</code></dt>
  <dd><p>Enable COMDAT group support.  This is primarily used to override the
  automatically detected value.
  </p>
  </dd>
! <dt><code class="code">--enable-initfini-array</code></dt>
! <dd><p>Force the use of sections <code class="code">.init_array</code> and <code class="code">.fini_array</code>
! (instead of <code class="code">.init</code> and <code class="code">.fini</code>) for constructors and
! destructors.  Option <samp class="option">--disable-initfini-array</samp> has the
  opposite effect.  If neither option is specified, the configure script
! will try to guess whether the <code class="code">.init_array</code> and
! <code class="code">.fini_array</code> sections are supported and, if they are, use them.
  </p>
  </dd>
! <dt><code class="code">--enable-link-mutex</code></dt>
  <dd><p>When building GCC, use a mutex to avoid linking the compilers for
  multiple languages at the same time, to avoid thrashing on build
  systems with limited free memory.  The default is not to use such a mutex.
  </p>
  </dd>
! <dt><code class="code">--enable-link-serialization</code></dt>
  <dd><p>When building GCC, use make dependencies to serialize linking the compilers for
  multiple languages, to avoid thrashing on build
  systems with limited free memory.  The default is not to add such
*************** compilers concurrently.  If the argument
*** 1325,1357 ****
  that number of concurrent link processes for the large binaries.
  </p>
  </dd>
! <dt><code>--enable-maintainer-mode</code></dt>
  <dd><p>The build rules that regenerate the Autoconf and Automake output files as
! well as the GCC master message catalog <samp>gcc.pot</samp> are normally
  disabled.  This is because it can only be rebuilt if the complete source
  tree is present.  If you have changed the sources and want to rebuild the
! catalog, configuring with <samp>--enable-maintainer-mode</samp> will enable
! this.  Note that you need a recent version of the <code>gettext</code> tools
  to do so.
  </p>
  </dd>
! <dt><code>--disable-bootstrap</code></dt>
  <dd><p>For a native build, the default configuration is to perform
! a 3-stage bootstrap of the compiler when &lsquo;<samp>make</samp>&rsquo; is invoked,
  testing that GCC can compile itself correctly.  If you want to disable
! this process, you can configure with <samp>--disable-bootstrap</samp>.
  </p>
  </dd>
! <dt><code>--enable-bootstrap</code></dt>
  <dd><p>In special cases, you may want to perform a 3-stage build
  even if the target and host triplets are different.
  This is possible when the host can run code compiled for
  the target (e.g. host is i686-linux, target is i486-linux).
  Starting from GCC 4.2, to do this you have to configure explicitly
! with <samp>--enable-bootstrap</samp>.
  </p>
  </dd>
! <dt><code>--enable-generated-files-in-srcdir</code></dt>
  <dd><p>Neither the .c and .h files that are generated from Bison and flex nor the
  info manuals and man pages that are built from the .texi files are present
  in the repository development tree.  When building GCC from that development tree,
--- 1306,1338 ----
  that number of concurrent link processes for the large binaries.
  </p>
  </dd>
! <dt><code class="code">--enable-maintainer-mode</code></dt>
  <dd><p>The build rules that regenerate the Autoconf and Automake output files as
! well as the GCC master message catalog <samp class="file">gcc.pot</samp> are normally
  disabled.  This is because it can only be rebuilt if the complete source
  tree is present.  If you have changed the sources and want to rebuild the
! catalog, configuring with <samp class="option">--enable-maintainer-mode</samp> will enable
! this.  Note that you need a recent version of the <code class="code">gettext</code> tools
  to do so.
  </p>
  </dd>
! <dt><code class="code">--disable-bootstrap</code></dt>
  <dd><p>For a native build, the default configuration is to perform
! a 3-stage bootstrap of the compiler when &lsquo;<samp class="samp">make</samp>&rsquo; is invoked,
  testing that GCC can compile itself correctly.  If you want to disable
! this process, you can configure with <samp class="option">--disable-bootstrap</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-bootstrap</code></dt>
  <dd><p>In special cases, you may want to perform a 3-stage build
  even if the target and host triplets are different.
  This is possible when the host can run code compiled for
  the target (e.g. host is i686-linux, target is i486-linux).
  Starting from GCC 4.2, to do this you have to configure explicitly
! with <samp class="option">--enable-bootstrap</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-generated-files-in-srcdir</code></dt>
  <dd><p>Neither the .c and .h files that are generated from Bison and flex nor the
  info manuals and man pages that are built from the .texi files are present
  in the repository development tree.  When building GCC from that development tree,
*************** or from one of our snapshots, those gene
*** 1359,1598 ****
  build directory, which allows for the source to be in a readonly
  directory.
  </p>
! <p>If you configure with <samp>--enable-generated-files-in-srcdir</samp> then those
  generated files will go into the source directory.  This is mainly intended
  for generating release or prerelease tarballs of the GCC sources, since it
  is not a requirement that the users of source releases to have flex, Bison,
  or makeinfo.
  </p>
  </dd>
! <dt><code>--enable-version-specific-runtime-libs</code></dt>
  <dd><p>Specify
  that runtime libraries should be installed in the compiler specific
! subdirectory (<samp><var>libdir</var>/gcc</samp>) rather than the usual places.  In
! addition, &lsquo;<samp>libstdc++</samp>&rsquo;&rsquo;s include files will be installed into
! <samp><var>libdir</var></samp> unless you overruled it by using
! <samp>--with-gxx-include-dir=<var>dirname</var></samp>.  Using this option is
  particularly useful if you intend to use several versions of GCC in
! parallel.  The default is &lsquo;<samp>yes</samp>&rsquo; for &lsquo;<samp>libada</samp>&rsquo;, and &lsquo;<samp>no</samp>&rsquo; for
  the remaining libraries.
  </p>
  </dd>
! <dt><code>--with-darwin-extra-rpath</code></dt>
  <dd><p>This is provided to allow distributions to add a single additional
  runpath on Darwin / macOS systems. This allows for cases where the
  installed GCC library directories are then symlinked to a common
  directory outside of the GCC installation.
  </p>
  </dd>
! <dt><code><a name="WithAixSoname"></a>--with-aix-soname=&lsquo;<samp>aix</samp>&rsquo;, &lsquo;<samp>svr4</samp>&rsquo; or &lsquo;<samp>both</samp>&rsquo;</code></dt>
! <dd><p>Traditional AIX shared library versioning (versioned <code>Shared Object</code>
! files as members of unversioned <code>Archive Library</code> files named
! &lsquo;<samp>lib.a</samp>&rsquo;) causes numerous headaches for package managers. However,
! <code>Import Files</code> as members of <code>Archive Library</code> files allow for
! <strong>filename-based versioning</strong> of shared libraries as seen on Linux/SVR4,
  where this is called the &quot;SONAME&quot;. But as they prevent static linking,
! <code>Import Files</code> may be used with <code>Runtime Linking</code> only, where the
! linker does search for &lsquo;<samp>libNAME.so</samp>&rsquo; before &lsquo;<samp>libNAME.a</samp>&rsquo; library
! filenames with the &lsquo;<samp>-lNAME</samp>&rsquo; linker flag.
  </p>
! <a name="AixLdCommand"></a><p>For detailed information please refer to the AIX
! <a href="https://www.ibm.com/support/knowledgecenter/search/%22the%20ld%20command%2C%20also%20called%20the%20linkage%20editor%20or%20binder%22">ld
  Command</a> reference.
  </p>
  <p>As long as shared library creation is enabled, upon:
! </p><dl compact="compact">
! <dt><code>--with-aix-soname=aix</code></dt>
! <dt><code>--with-aix-soname=both</code></dt>
! <dd><p>A (traditional AIX) <code>Shared Archive Library</code> file is created:
!  </p><ul>
! <li> using the &lsquo;<samp>libNAME.a</samp>&rsquo; filename scheme
!   </li><li> with the <code>Shared Object</code> file as archive member named
!   &lsquo;<samp>libNAME.so.V</samp>&rsquo; (except for &lsquo;<samp>libgcc_s</samp>&rsquo;, where the <code>Shared
!   Object</code> file is named &lsquo;<samp>shr.o</samp>&rsquo; for backwards compatibility), which
!   <ul class="no-bullet">
! <li>- is used for runtime loading from inside the &lsquo;<samp>libNAME.a</samp>&rsquo; file
!    </li><li>- is used for dynamic loading via
!    <code>dlopen(&quot;libNAME.a(libNAME.so.V)&quot;, RTLD_MEMBER)</code>
!    </li><li>- is used for shared linking
!    </li><li>- is used for static linking, so no separate <code>Static Archive
     Library</code> file is needed
    </li></ul>
  </li></ul>
  </dd>
! <dt><code>--with-aix-soname=both</code></dt>
! <dt><code>--with-aix-soname=svr4</code></dt>
! <dd><p>A (second) <code>Shared Archive Library</code> file is created:
!  </p><ul>
! <li> using the &lsquo;<samp>libNAME.so.V</samp>&rsquo; filename scheme
!  </li><li> with the <code>Shared Object</code> file as archive member named
!  &lsquo;<samp>shr.o</samp>&rsquo;, which
!   <ul class="no-bullet">
! <li>- is created with the <code>-G linker flag</code>
!    </li><li>- has the <code>F_LOADONLY</code> flag set
!    </li><li>- is used for runtime loading from inside the &lsquo;<samp>libNAME.so.V</samp>&rsquo; file
!    </li><li>- is used for dynamic loading via <code>dlopen(&quot;libNAME.so.V(shr.o)&quot;,
     RTLD_MEMBER)</code>
    </li></ul>
! </li><li> with the <code>Import File</code> as archive member named &lsquo;<samp>shr.imp</samp>&rsquo;,
   which
!   <ul class="no-bullet">
! <li>- refers to &lsquo;<samp>libNAME.so.V(shr.o)</samp>&rsquo; as the &quot;SONAME&quot;, to be recorded
!    in the <code>Loader Section</code> of subsequent binaries
!    </li><li>- indicates whether &lsquo;<samp>libNAME.so.V(shr.o)</samp>&rsquo; is 32 or 64 bit
!    </li><li>- lists all the public symbols exported by &lsquo;<samp>lib.so.V(shr.o)</samp>&rsquo;,
!    eventually decorated with the <code>&lsquo;<samp>weak</samp>&rsquo; Keyword</code>
!    </li><li>- is necessary for shared linking against &lsquo;<samp>lib.so.V(shr.o)</samp>&rsquo;
     </li></ul>
  </li></ul>
! <p>A symbolic link using the &lsquo;<samp>libNAME.so</samp>&rsquo; filename scheme is created:
!   </p><ul>
! <li> pointing to the &lsquo;<samp>libNAME.so.V</samp>&rsquo; <code>Shared Archive Library</code> file
!   </li><li> to permit the <code>ld Command</code> to find &lsquo;<samp>lib.so.V(shr.imp)</samp>&rsquo; via
!   the &lsquo;<samp>-lNAME</samp>&rsquo; argument (requires <code>Runtime Linking</code> to be enabled)
!   </li><li> to permit dynamic loading of &lsquo;<samp>lib.so.V(shr.o)</samp>&rsquo; without the need
!   to specify the version number via <code>dlopen(&quot;libNAME.so(shr.o)&quot;,
    RTLD_MEMBER)</code>
    </li></ul>
  </dd>
  </dl>
  
  <p>As long as static library creation is enabled, upon:
! </p><dl compact="compact">
! <dt><code>--with-aix-soname=svr4</code></dt>
! <dd><p>A <code>Static Archive Library</code> is created:
!  </p><ul>
! <li> using the &lsquo;<samp>libNAME.a</samp>&rsquo; filename scheme
!  </li><li> with all the <code>Static Object</code> files as archive members, which
!   <ul class="no-bullet">
! <li>- are used for static linking
    </li></ul>
  </li></ul>
  </dd>
  </dl>
  
! <p>While the aix-soname=&lsquo;<samp>svr4</samp>&rsquo; option does not create <code>Shared Object</code>
! files as members of unversioned <code>Archive Library</code> files any more, package
  managers still are responsible to
! <a href="./specific.html#TransferAixShobj">transfer</a> <code>Shared Object</code> files
! found as member of a previously installed unversioned <code>Archive Library</code>
! file into the newly installed <code>Archive Library</code> file with the same
  filename.
  </p>
! <p><em>WARNING:</em> Creating <code>Shared Object</code> files with <code>Runtime Linking</code>
! enabled may bloat the TOC, eventually leading to <code>TOC overflow</code> errors,
! requiring the use of either the <samp>-Wl,-bbigtoc</samp> linker flag (seen to
! break with the <code>GDB</code> debugger) or some of the TOC-related compiler flags,
  see &ldquo;RS/6000 and PowerPC Options&rdquo; in the main manual.
  </p>
! <p><samp>--with-aix-soname</samp> is currently supported by &lsquo;<samp>libgcc_s</samp>&rsquo; only, so
  this option is still experimental and not for normal use yet.
  </p>
! <p>Default is the traditional behavior <samp>--with-aix-soname=&lsquo;<samp>aix</samp>&rsquo;</samp>.
  </p>
  </dd>
! <dt><code>--enable-languages=<var>lang1</var>,<var>lang2</var>,&hellip;</code></dt>
  <dd><p>Specify that only a particular subset of compilers and
  their runtime libraries should be built.  For a list of valid values for
! <var>langN</var> you can issue the following command in the
! <samp>gcc</samp> directory of your GCC source tree:<br>
! </p><div class="smallexample">
! <pre class="smallexample">grep ^language= */config-lang.in
  </pre></div>
  <p>Currently, you can use any of the following:
! <code>all</code>, <code>default</code>, <code>ada</code>, <code>c</code>, <code>c++</code>, <code>d</code>,
! <code>fortran</code>, <code>go</code>, <code>jit</code>, <code>lto</code>, <code>m2</code>,
! <code>objc</code>, <code>obj-c++</code>.
  Building the Ada compiler has special requirements, see below.
! If you do not pass this flag, or specify the option <code>default</code>, then the
! default languages available in the <samp>gcc</samp> sub-tree will be configured.
  Ada, D, Go, Jit, Objective-C++ and Modula-2 are not default languages.
  LTO is not a
! default language, but is built by default because <samp>--enable-lto</samp> is
  enabled by default.  The other languages are default languages.  If
! <code>all</code> is specified, then all available languages are built.  An
! exception is <code>jit</code> language, which requires
! <samp>--enable-host-shared</samp> to be included with <code>all</code>.
  </p>
  </dd>
! <dt><code>--enable-stage1-languages=<var>lang1</var>,<var>lang2</var>,&hellip;</code></dt>
  <dd><p>Specify that a particular subset of compilers and their runtime
  libraries should be built with the system C compiler during stage 1 of
  the bootstrap process, rather than only in later stages with the
  bootstrapped C compiler.  The list of valid values is the same as for
! <samp>--enable-languages</samp>, and the option <code>all</code> will select all
! of the languages enabled by <samp>--enable-languages</samp>.  This option is
  primarily useful for GCC development; for instance, when a development
  version of the compiler cannot bootstrap due to compiler bugs, or when
  one is debugging front ends other than the C front end.  When this
  option is used, one can then build the target libraries for the
! specified languages with the stage-1 compiler by using <code>make
  stage1-bubble all-target</code>, or run the testsuite on the stage-1 compiler
! for the specified languages using <code>make stage1-start check-gcc</code>.
  </p>
  </dd>
! <dt><code>--disable-libada</code></dt>
  <dd><p>Specify that the run-time libraries and tools used by GNAT should not
  be built.  This can be useful for debugging, or for compatibility with
  previous Ada build procedures, when it was required to explicitly
! do a &lsquo;<samp>make -C gcc gnatlib_and_tools</samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--disable-libgm2</code></dt>
  <dd><p>Specify that the run-time libraries and tools used by Modula-2 should not
  be built.  This can be useful for debugging.
  </p>
  </dd>
! <dt><code>--disable-libsanitizer</code></dt>
  <dd><p>Specify that the run-time libraries for the various sanitizers should
  not be built.
  </p>
  </dd>
! <dt><code>--disable-libssp</code></dt>
  <dd><p>Specify that the run-time libraries for stack smashing protection
  should not be built or linked against.  On many targets library support
  is provided by the C library instead.
  </p>
  </dd>
! <dt><code>--disable-libquadmath</code></dt>
  <dd><p>Specify that the GCC quad-precision math library should not be built.
  On some systems, the library is required to be linkable when building
! the Fortran front end, unless <samp>--disable-libquadmath-support</samp>
  is used.
  </p>
  </dd>
! <dt><code>--disable-libquadmath-support</code></dt>
! <dd><p>Specify that the Fortran front end and <code>libgfortran</code> do not add
! support for <code>libquadmath</code> on systems supporting it.
  </p>
  </dd>
! <dt><code>--disable-libgomp</code></dt>
  <dd><p>Specify that the GNU Offloading and Multi Processing Runtime Library
  should not be built.
  </p>
  </dd>
! <dt><code>--disable-libvtv</code></dt>
  <dd><p>Specify that the run-time libraries used by vtable verification
  should not be built.
  </p>
  </dd>
! <dt><code>--with-dwarf2</code></dt>
  <dd><p>Specify that the compiler should
  use DWARF debugging information as the default; the exact
  DWARF version that is the default is target-specific.
  </p>
  </dd>
! <dt><code>--with-advance-toolchain=<var>at</var></code></dt>
  <dd><p>On 64-bit PowerPC Linux systems, configure the compiler to use the
  header files, library files, and the dynamic linker from the Advance
! Toolchain release <var>at</var> instead of the default versions that are
  provided by the Linux distribution.  In general, this option is
  intended for the developers of GCC, and it is not intended for general
  use.
  </p>
  </dd>
! <dt><code>--enable-targets=all</code></dt>
! <dt><code>--enable-targets=<var>target_list</var></code></dt>
  <dd><p>Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers.
  These are compilers that are able to generate either 64-bit or 32-bit
  code.  Typically, the corresponding 32-bit target, e.g.
--- 1340,1579 ----
  build directory, which allows for the source to be in a readonly
  directory.
  </p>
! <p>If you configure with <samp class="option">--enable-generated-files-in-srcdir</samp> then those
  generated files will go into the source directory.  This is mainly intended
  for generating release or prerelease tarballs of the GCC sources, since it
  is not a requirement that the users of source releases to have flex, Bison,
  or makeinfo.
  </p>
  </dd>
! <dt><code class="code">--enable-version-specific-runtime-libs</code></dt>
  <dd><p>Specify
  that runtime libraries should be installed in the compiler specific
! subdirectory (<samp class="file"><var class="var">libdir</var>/gcc</samp>) rather than the usual places.  In
! addition, &lsquo;<samp class="samp">libstdc++</samp>&rsquo;&rsquo;s include files will be installed into
! <samp class="file"><var class="var">libdir</var></samp> unless you overruled it by using
! <samp class="option">--with-gxx-include-dir=<var class="var">dirname</var></samp>.  Using this option is
  particularly useful if you intend to use several versions of GCC in
! parallel.  The default is &lsquo;<samp class="samp">yes</samp>&rsquo; for &lsquo;<samp class="samp">libada</samp>&rsquo;, and &lsquo;<samp class="samp">no</samp>&rsquo; for
  the remaining libraries.
  </p>
  </dd>
! <dt><code class="code">--with-darwin-extra-rpath</code></dt>
  <dd><p>This is provided to allow distributions to add a single additional
  runpath on Darwin / macOS systems. This allows for cases where the
  installed GCC library directories are then symlinked to a common
  directory outside of the GCC installation.
  </p>
  </dd>
! <dt><code class="code"><a class="anchor" id="WithAixSoname"></a>--with-aix-soname=&lsquo;<samp class="samp">aix</samp>&rsquo;, &lsquo;<samp class="samp">svr4</samp>&rsquo; or &lsquo;<samp class="samp">both</samp>&rsquo;</code></dt>
! <dd><p>Traditional AIX shared library versioning (versioned <code class="code">Shared Object</code>
! files as members of unversioned <code class="code">Archive Library</code> files named
! &lsquo;<samp class="samp">lib.a</samp>&rsquo;) causes numerous headaches for package managers. However,
! <code class="code">Import Files</code> as members of <code class="code">Archive Library</code> files allow for
! <strong class="strong">filename-based versioning</strong> of shared libraries as seen on Linux/SVR4,
  where this is called the &quot;SONAME&quot;. But as they prevent static linking,
! <code class="code">Import Files</code> may be used with <code class="code">Runtime Linking</code> only, where the
! linker does search for &lsquo;<samp class="samp">libNAME.so</samp>&rsquo; before &lsquo;<samp class="samp">libNAME.a</samp>&rsquo; library
! filenames with the &lsquo;<samp class="samp">-lNAME</samp>&rsquo; linker flag.
  </p>
! <a class="anchor" id="AixLdCommand"></a><p>For detailed information please refer to the AIX
! <a class="uref" href="https://www.ibm.com/support/knowledgecenter/search/%22the%20ld%20command%2C%20also%20called%20the%20linkage%20editor%20or%20binder%22">ld
  Command</a> reference.
  </p>
  <p>As long as shared library creation is enabled, upon:
! </p><dl class="table">
! <dt><code class="code">--with-aix-soname=aix</code></dt>
! <dt><code class="code">--with-aix-soname=both</code></dt>
! <dd><p>A (traditional AIX) <code class="code">Shared Archive Library</code> file is created:
!  </p><ul class="itemize mark-bullet">
! <li>using the &lsquo;<samp class="samp">libNAME.a</samp>&rsquo; filename scheme
!   </li><li>with the <code class="code">Shared Object</code> file as archive member named
!   &lsquo;<samp class="samp">libNAME.so.V</samp>&rsquo; (except for &lsquo;<samp class="samp">libgcc_s</samp>&rsquo;, where the <code class="code">Shared
!   Object</code> file is named &lsquo;<samp class="samp">shr.o</samp>&rsquo; for backwards compatibility), which
!   <ul class="itemize mark-minus">
! <li>is used for runtime loading from inside the &lsquo;<samp class="samp">libNAME.a</samp>&rsquo; file
!    </li><li>is used for dynamic loading via
!    <code class="code">dlopen(&quot;libNAME.a(libNAME.so.V)&quot;, RTLD_MEMBER)</code>
!    </li><li>is used for shared linking
!    </li><li>is used for static linking, so no separate <code class="code">Static Archive
     Library</code> file is needed
    </li></ul>
  </li></ul>
  </dd>
! <dt><code class="code">--with-aix-soname=both</code></dt>
! <dt><code class="code">--with-aix-soname=svr4</code></dt>
! <dd><p>A (second) <code class="code">Shared Archive Library</code> file is created:
!  </p><ul class="itemize mark-bullet">
! <li>using the &lsquo;<samp class="samp">libNAME.so.V</samp>&rsquo; filename scheme
!  </li><li>with the <code class="code">Shared Object</code> file as archive member named
!  &lsquo;<samp class="samp">shr.o</samp>&rsquo;, which
!   <ul class="itemize mark-minus">
! <li>is created with the <code class="code">-G linker flag</code>
!    </li><li>has the <code class="code">F_LOADONLY</code> flag set
!    </li><li>is used for runtime loading from inside the &lsquo;<samp class="samp">libNAME.so.V</samp>&rsquo; file
!    </li><li>is used for dynamic loading via <code class="code">dlopen(&quot;libNAME.so.V(shr.o)&quot;,
     RTLD_MEMBER)</code>
    </li></ul>
! </li><li>with the <code class="code">Import File</code> as archive member named &lsquo;<samp class="samp">shr.imp</samp>&rsquo;,
   which
!   <ul class="itemize mark-minus">
! <li>refers to &lsquo;<samp class="samp">libNAME.so.V(shr.o)</samp>&rsquo; as the &quot;SONAME&quot;, to be recorded
!    in the <code class="code">Loader Section</code> of subsequent binaries
!    </li><li>indicates whether &lsquo;<samp class="samp">libNAME.so.V(shr.o)</samp>&rsquo; is 32 or 64 bit
!    </li><li>lists all the public symbols exported by &lsquo;<samp class="samp">lib.so.V(shr.o)</samp>&rsquo;,
!    eventually decorated with the <code class="code">&lsquo;<samp class="samp">weak</samp>&rsquo; Keyword</code>
!    </li><li>is necessary for shared linking against &lsquo;<samp class="samp">lib.so.V(shr.o)</samp>&rsquo;
     </li></ul>
  </li></ul>
! <p>A symbolic link using the &lsquo;<samp class="samp">libNAME.so</samp>&rsquo; filename scheme is created:
!   </p><ul class="itemize mark-bullet">
! <li>pointing to the &lsquo;<samp class="samp">libNAME.so.V</samp>&rsquo; <code class="code">Shared Archive Library</code> file
!   </li><li>to permit the <code class="code">ld Command</code> to find &lsquo;<samp class="samp">lib.so.V(shr.imp)</samp>&rsquo; via
!   the &lsquo;<samp class="samp">-lNAME</samp>&rsquo; argument (requires <code class="code">Runtime Linking</code> to be enabled)
!   </li><li>to permit dynamic loading of &lsquo;<samp class="samp">lib.so.V(shr.o)</samp>&rsquo; without the need
!   to specify the version number via <code class="code">dlopen(&quot;libNAME.so(shr.o)&quot;,
    RTLD_MEMBER)</code>
    </li></ul>
  </dd>
  </dl>
  
  <p>As long as static library creation is enabled, upon:
! </p><dl class="table">
! <dt><code class="code">--with-aix-soname=svr4</code></dt>
! <dd><p>A <code class="code">Static Archive Library</code> is created:
!  </p><ul class="itemize mark-bullet">
! <li>using the &lsquo;<samp class="samp">libNAME.a</samp>&rsquo; filename scheme
!  </li><li>with all the <code class="code">Static Object</code> files as archive members, which
!   <ul class="itemize mark-minus">
! <li>are used for static linking
    </li></ul>
  </li></ul>
  </dd>
  </dl>
  
! <p>While the aix-soname=&lsquo;<samp class="samp">svr4</samp>&rsquo; option does not create <code class="code">Shared Object</code>
! files as members of unversioned <code class="code">Archive Library</code> files any more, package
  managers still are responsible to
! <a class="uref" href="./specific.html#TransferAixShobj">transfer</a> <code class="code">Shared Object</code> files
! found as member of a previously installed unversioned <code class="code">Archive Library</code>
! file into the newly installed <code class="code">Archive Library</code> file with the same
  filename.
  </p>
! <p><em class="emph">WARNING:</em> Creating <code class="code">Shared Object</code> files with <code class="code">Runtime Linking</code>
! enabled may bloat the TOC, eventually leading to <code class="code">TOC overflow</code> errors,
! requiring the use of either the <samp class="option">-Wl,-bbigtoc</samp> linker flag (seen to
! break with the <code class="code">GDB</code> debugger) or some of the TOC-related compiler flags,
  see &ldquo;RS/6000 and PowerPC Options&rdquo; in the main manual.
  </p>
! <p><samp class="option">--with-aix-soname</samp> is currently supported by &lsquo;<samp class="samp">libgcc_s</samp>&rsquo; only, so
  this option is still experimental and not for normal use yet.
  </p>
! <p>Default is the traditional behavior <samp class="option">--with-aix-soname=&lsquo;<samp class="samp">aix</samp>&rsquo;</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-languages=<var class="var">lang1</var>,<var class="var">lang2</var>,&hellip;</code></dt>
  <dd><p>Specify that only a particular subset of compilers and
  their runtime libraries should be built.  For a list of valid values for
! <var class="var">langN</var> you can issue the following command in the
! <samp class="file">gcc</samp> directory of your GCC source tree:<br>
! </p><div class="example smallexample">
! <pre class="example-preformatted">grep ^language= */config-lang.in
  </pre></div>
  <p>Currently, you can use any of the following:
! <code class="code">all</code>, <code class="code">default</code>, <code class="code">ada</code>, <code class="code">c</code>, <code class="code">c++</code>, <code class="code">d</code>,
! <code class="code">fortran</code>, <code class="code">go</code>, <code class="code">jit</code>, <code class="code">lto</code>, <code class="code">m2</code>,
! <code class="code">objc</code>, <code class="code">obj-c++</code>.
  Building the Ada compiler has special requirements, see below.
! If you do not pass this flag, or specify the option <code class="code">default</code>, then the
! default languages available in the <samp class="file">gcc</samp> sub-tree will be configured.
  Ada, D, Go, Jit, Objective-C++ and Modula-2 are not default languages.
  LTO is not a
! default language, but is built by default because <samp class="option">--enable-lto</samp> is
  enabled by default.  The other languages are default languages.  If
! <code class="code">all</code> is specified, then all available languages are built.  An
! exception is <code class="code">jit</code> language, which requires
! <samp class="option">--enable-host-shared</samp> to be included with <code class="code">all</code>.
  </p>
  </dd>
! <dt><code class="code">--enable-stage1-languages=<var class="var">lang1</var>,<var class="var">lang2</var>,&hellip;</code></dt>
  <dd><p>Specify that a particular subset of compilers and their runtime
  libraries should be built with the system C compiler during stage 1 of
  the bootstrap process, rather than only in later stages with the
  bootstrapped C compiler.  The list of valid values is the same as for
! <samp class="option">--enable-languages</samp>, and the option <code class="code">all</code> will select all
! of the languages enabled by <samp class="option">--enable-languages</samp>.  This option is
  primarily useful for GCC development; for instance, when a development
  version of the compiler cannot bootstrap due to compiler bugs, or when
  one is debugging front ends other than the C front end.  When this
  option is used, one can then build the target libraries for the
! specified languages with the stage-1 compiler by using <code class="command">make
  stage1-bubble all-target</code>, or run the testsuite on the stage-1 compiler
! for the specified languages using <code class="command">make stage1-start check-gcc</code>.
  </p>
  </dd>
! <dt><code class="code">--disable-libada</code></dt>
  <dd><p>Specify that the run-time libraries and tools used by GNAT should not
  be built.  This can be useful for debugging, or for compatibility with
  previous Ada build procedures, when it was required to explicitly
! do a &lsquo;<samp class="samp">make -C gcc gnatlib_and_tools</samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--disable-libgm2</code></dt>
  <dd><p>Specify that the run-time libraries and tools used by Modula-2 should not
  be built.  This can be useful for debugging.
  </p>
  </dd>
! <dt><code class="code">--disable-libsanitizer</code></dt>
  <dd><p>Specify that the run-time libraries for the various sanitizers should
  not be built.
  </p>
  </dd>
! <dt><code class="code">--disable-libssp</code></dt>
  <dd><p>Specify that the run-time libraries for stack smashing protection
  should not be built or linked against.  On many targets library support
  is provided by the C library instead.
  </p>
  </dd>
! <dt><code class="code">--disable-libquadmath</code></dt>
  <dd><p>Specify that the GCC quad-precision math library should not be built.
  On some systems, the library is required to be linkable when building
! the Fortran front end, unless <samp class="option">--disable-libquadmath-support</samp>
  is used.
  </p>
  </dd>
! <dt><code class="code">--disable-libquadmath-support</code></dt>
! <dd><p>Specify that the Fortran front end and <code class="code">libgfortran</code> do not add
! support for <code class="code">libquadmath</code> on systems supporting it.
  </p>
  </dd>
! <dt><code class="code">--disable-libgomp</code></dt>
  <dd><p>Specify that the GNU Offloading and Multi Processing Runtime Library
  should not be built.
  </p>
  </dd>
! <dt><code class="code">--disable-libvtv</code></dt>
  <dd><p>Specify that the run-time libraries used by vtable verification
  should not be built.
  </p>
  </dd>
! <dt><code class="code">--with-dwarf2</code></dt>
  <dd><p>Specify that the compiler should
  use DWARF debugging information as the default; the exact
  DWARF version that is the default is target-specific.
  </p>
  </dd>
! <dt><code class="code">--with-advance-toolchain=<var class="var">at</var></code></dt>
  <dd><p>On 64-bit PowerPC Linux systems, configure the compiler to use the
  header files, library files, and the dynamic linker from the Advance
! Toolchain release <var class="var">at</var> instead of the default versions that are
  provided by the Linux distribution.  In general, this option is
  intended for the developers of GCC, and it is not intended for general
  use.
  </p>
  </dd>
! <dt><code class="code">--enable-targets=all</code></dt>
! <dt><code class="code">--enable-targets=<var class="var">target_list</var></code></dt>
  <dd><p>Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers.
  These are compilers that are able to generate either 64-bit or 32-bit
  code.  Typically, the corresponding 32-bit target, e.g.
*************** Currently, this option only affects spar
*** 1606,1780 ****
  mips-linux and s390-linux.
  </p>
  </dd>
! <dt><code>--enable-default-pie</code></dt>
! <dd><p>Turn on <samp>-fPIE</samp> and <samp>-pie</samp> by default.
  </p>
  </dd>
! <dt><code>--enable-secureplt</code></dt>
! <dd><p>This option enables <samp>-msecure-plt</samp> by default for powerpc-linux.
  See &ldquo;RS/6000 and PowerPC Options&rdquo; in the main manual
  </p>
  </dd>
! <dt><code>--enable-default-ssp</code></dt>
! <dd><p>Turn on <samp>-fstack-protector-strong</samp> by default.
  </p>
  </dd>
! <dt><code>--enable-cld</code></dt>
! <dd><p>This option enables <samp>-mcld</samp> by default for 32-bit x86 targets.
  See &ldquo;i386 and x86-64 Options&rdquo; in the main manual
  </p>
  </dd>
! <dt><code>--enable-large-address-aware</code></dt>
! <dd><p>The <samp>--enable-large-address-aware</samp> option arranges for MinGW
! executables to be linked using the <samp>--large-address-aware</samp>
  option, that enables the use of more than 2GB of memory.  If GCC is
  configured with this option, its effects can be reversed by passing the
! <samp>-Wl,--disable-large-address-aware</samp> option to the so-configured
  compiler driver.
  </p>
  </dd>
! <dt><code>--enable-win32-registry</code></dt>
! <dt><code>--enable-win32-registry=<var>key</var></code></dt>
! <dt><code>--disable-win32-registry</code></dt>
! <dd><p>The <samp>--enable-win32-registry</samp> option enables Microsoft Windows-hosted GCC
  to look up installations paths in the registry using the following key:
  </p>
! <div class="smallexample">
! <pre class="smallexample"><code>HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\<var>key</var></code>
  </pre></div>
  
! <p><var>key</var> defaults to GCC version number, and can be overridden by the
! <samp>--enable-win32-registry=<var>key</var></samp> option.  Vendors and distributors
  who use custom installers are encouraged to provide a different key,
  perhaps one comprised of vendor name and GCC version number, to
  avoid conflict with existing installations.  This feature is enabled
! by default, and can be disabled by <samp>--disable-win32-registry</samp>
  option.  This option has no effect on the other hosts.
  </p>
  </dd>
! <dt><code>--nfp</code></dt>
  <dd><p>Specify that the machine does not have a floating point unit.  This
! option only applies to &lsquo;<samp>m68k-sun-sunos<var>n</var></samp>&rsquo;.  On any other
! system, <samp>--nfp</samp> has no effect.
  </p>
  </dd>
! <dt><code>--enable-werror</code></dt>
! <dt><code>--disable-werror</code></dt>
! <dt><code>--enable-werror=yes</code></dt>
! <dt><code>--enable-werror=no</code></dt>
  <dd><p>When you specify this option, it controls whether certain files in the
! compiler are built with <samp>-Werror</samp> in bootstrap stage2 and later.
! If you don&rsquo;t specify it, <samp>-Werror</samp> is turned on for the main
  development trunk.  However it defaults to off for release branches and
! final releases.  The specific files which get <samp>-Werror</samp> are
  controlled by the Makefiles.
  </p>
  </dd>
! <dt><code>--enable-checking</code></dt>
! <dt><code>--disable-checking</code></dt>
! <dt><code>--enable-checking=<var>list</var></code></dt>
  <dd><p>This option controls performing internal consistency checks in the compiler.
  It does not change the generated code, but adds error checking of the
  requested complexity.  This slows down the compiler and may only work
  properly if you are building the compiler with GCC.
  </p>
  <p>When the option is not specified, the active set of checks depends on context.
! Namely, bootstrap stage 1 defaults to &lsquo;<samp>--enable-checking=yes</samp>&rsquo;, builds
  from release branches or release archives default to
! &lsquo;<samp>--enable-checking=release</samp>&rsquo;, and otherwise
! &lsquo;<samp>--enable-checking=yes,extra</samp>&rsquo; is used.  When the option is
! specified without a <var>list</var>, the result is the same as
! &lsquo;<samp>--enable-checking=yes</samp>&rsquo;.  Likewise, &lsquo;<samp>--disable-checking</samp>&rsquo; is
! equivalent to &lsquo;<samp>--enable-checking=no</samp>&rsquo;.
  </p>
! <p>The categories of checks available in <var>list</var> are &lsquo;<samp>yes</samp>&rsquo; (most common
! checks &lsquo;<samp>assert,misc,gc,gimple,rtlflag,runtime,tree,types</samp>&rsquo;), &lsquo;<samp>no</samp>&rsquo;
! (no checks at all), &lsquo;<samp>all</samp>&rsquo; (all but &lsquo;<samp>valgrind</samp>&rsquo;), &lsquo;<samp>release</samp>&rsquo;
! (cheapest checks &lsquo;<samp>assert,runtime</samp>&rsquo;) or &lsquo;<samp>none</samp>&rsquo; (same as &lsquo;<samp>no</samp>&rsquo;).
! &lsquo;<samp>release</samp>&rsquo; checks are always on and to disable them
! &lsquo;<samp>--disable-checking</samp>&rsquo; or &lsquo;<samp>--enable-checking=no[,&lt;other checks&gt;]</samp>&rsquo;
  must be explicitly requested.  Disabling assertions makes the compiler and
  runtime slightly faster but increases the risk of undetected internal errors
  causing wrong code to be generated.
  </p>
! <p>Individual checks can be enabled with these flags: &lsquo;<samp>assert</samp>&rsquo;, &lsquo;<samp>df</samp>&rsquo;,
! &lsquo;<samp>extra</samp>&rsquo;, &lsquo;<samp>fold</samp>&rsquo;, &lsquo;<samp>gc</samp>&rsquo;, &lsquo;<samp>gcac</samp>&rsquo;, &lsquo;<samp>gimple</samp>&rsquo;,
! &lsquo;<samp>misc</samp>&rsquo;, &lsquo;<samp>rtl</samp>&rsquo;, &lsquo;<samp>rtlflag</samp>&rsquo;, &lsquo;<samp>runtime</samp>&rsquo;, &lsquo;<samp>tree</samp>&rsquo;,
! &lsquo;<samp>types</samp>&rsquo; and &lsquo;<samp>valgrind</samp>&rsquo;.  &lsquo;<samp>extra</samp>&rsquo; extends &lsquo;<samp>misc</samp>&rsquo;
  checking with extra checks that might affect code generation and should
  therefore not differ between stage1 and later stages in bootstrap.
  </p>
! <p>The &lsquo;<samp>valgrind</samp>&rsquo; check requires the external <code>valgrind</code> simulator,
! available from <a href="https://valgrind.org">https://valgrind.org</a>.  The &lsquo;<samp>rtl</samp>&rsquo; checks are
! expensive and the &lsquo;<samp>df</samp>&rsquo;, &lsquo;<samp>gcac</samp>&rsquo; and &lsquo;<samp>valgrind</samp>&rsquo; checks are very
  expensive.
  </p>
  </dd>
! <dt><code>--disable-stage1-checking</code></dt>
! <dt><code>--enable-stage1-checking</code></dt>
! <dt><code>--enable-stage1-checking=<var>list</var></code></dt>
! <dd><p>This option affects only bootstrap build.  If no <samp>--enable-checking</samp>
! option is specified the stage1 compiler is built with &lsquo;<samp>yes</samp>&rsquo; checking
  enabled, otherwise the stage1 checking flags are the same as specified by
! <samp>--enable-checking</samp>.  To build the stage1 compiler with
! different checking options use <samp>--enable-stage1-checking</samp>.
! The list of checking options is the same as for <samp>--enable-checking</samp>.
  If your system is too slow or too small to bootstrap a released compiler
! with checking for stage1 enabled, you can use &lsquo;<samp>--disable-stage1-checking</samp>&rsquo;
  to disable checking for the stage1 compiler.
  </p>
  </dd>
! <dt><code>--enable-coverage</code></dt>
! <dt><code>--enable-coverage=<var>level</var></code></dt>
  <dd><p>With this option, the compiler is built to collect self coverage
  information, every time it is run.  This is for internal development
  purposes, and only works when the compiler is being built with gcc.  The
! <var>level</var> argument controls whether the compiler is built optimized or
! not, values are &lsquo;<samp>opt</samp>&rsquo; and &lsquo;<samp>noopt</samp>&rsquo;.  For coverage analysis you
  want to disable optimization, for performance analysis you want to
  enable optimization.  When coverage is enabled, the default level is
  without optimization.
  </p>
  </dd>
! <dt><code>--enable-gather-detailed-mem-stats</code></dt>
  <dd><p>When this option is specified more detailed information on memory
  allocation is gathered.  This information is printed when using
! <samp>-fmem-report</samp>.
  </p>
  </dd>
! <dt><code>--enable-valgrind-annotations</code></dt>
  <dd><p>Mark selected memory related operations in the compiler when run under
  valgrind to suppress false positives.
  </p>
  </dd>
! <dt><code>--enable-nls</code></dt>
! <dt><code>--disable-nls</code></dt>
! <dd><p>The <samp>--enable-nls</samp> option enables Native Language Support (NLS),
  which lets GCC output diagnostics in languages other than American
  English.  Native Language Support is enabled by default if not doing a
! canadian cross build.  The <samp>--disable-nls</samp> option disables NLS.
  </p>
  <p>Note that this functionality requires either libintl (provided by GNU
  gettext) or C standard library that contains support for gettext (such
  as the GNU C Library).
! See <a href="#with-included-gettext">&ndash;with-included-gettext</a> for more
  information on the conditions required to get gettext support.
  </p>
  </dd>
! <dt><code>--with-libintl-prefix=<var>dir</var></code></dt>
! <dt><code>--without-libintl-prefix</code></dt>
! <dd><p>Searches for libintl in <samp><var>dir</var>/include</samp> and
! <samp><var>dir</var>/lib</samp>, or disables manual searching for it, letting the
  linker handle it.
  </p>
  </dd>
! <dt><code>--with-libintl-type=<var>type</var></code></dt>
  <dd><p>Specifies the type of library to search for when looking for libintl.
! <var>type</var> can be one of <code>auto</code>, <code>static</code> or <code>shared</code>.
  </p>
! <a name="with-included-gettext"></a></dd>
! <dt><code>--with-included-gettext</code></dt>
! <dd><p>Only available if <samp>gettext</samp> is present in the source tree.
  </p>
  <p>Forces the gettext tree to be configured to build and use a new static
  libintl, overriding the system libintl.  Results in GCC being built
--- 1587,1761 ----
  mips-linux and s390-linux.
  </p>
  </dd>
! <dt><code class="code">--enable-default-pie</code></dt>
! <dd><p>Turn on <samp class="option">-fPIE</samp> and <samp class="option">-pie</samp> by default.
  </p>
  </dd>
! <dt><code class="code">--enable-secureplt</code></dt>
! <dd><p>This option enables <samp class="option">-msecure-plt</samp> by default for powerpc-linux.
  See &ldquo;RS/6000 and PowerPC Options&rdquo; in the main manual
  </p>
  </dd>
! <dt><code class="code">--enable-default-ssp</code></dt>
! <dd><p>Turn on <samp class="option">-fstack-protector-strong</samp> by default.
  </p>
  </dd>
! <dt><code class="code">--enable-cld</code></dt>
! <dd><p>This option enables <samp class="option">-mcld</samp> by default for 32-bit x86 targets.
  See &ldquo;i386 and x86-64 Options&rdquo; in the main manual
  </p>
  </dd>
! <dt><code class="code">--enable-large-address-aware</code></dt>
! <dd><p>The <samp class="option">--enable-large-address-aware</samp> option arranges for MinGW
! executables to be linked using the <samp class="option">--large-address-aware</samp>
  option, that enables the use of more than 2GB of memory.  If GCC is
  configured with this option, its effects can be reversed by passing the
! <samp class="option">-Wl,--disable-large-address-aware</samp> option to the so-configured
  compiler driver.
  </p>
  </dd>
! <dt><code class="code">--enable-win32-registry</code></dt>
! <dt><code class="code">--enable-win32-registry=<var class="var">key</var></code></dt>
! <dt><code class="code">--disable-win32-registry</code></dt>
! <dd><p>The <samp class="option">--enable-win32-registry</samp> option enables Microsoft Windows-hosted GCC
  to look up installations paths in the registry using the following key:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted"><code class="code">HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\<var class="var">key</var></code>
  </pre></div>
  
! <p><var class="var">key</var> defaults to GCC version number, and can be overridden by the
! <samp class="option">--enable-win32-registry=<var class="var">key</var></samp> option.  Vendors and distributors
  who use custom installers are encouraged to provide a different key,
  perhaps one comprised of vendor name and GCC version number, to
  avoid conflict with existing installations.  This feature is enabled
! by default, and can be disabled by <samp class="option">--disable-win32-registry</samp>
  option.  This option has no effect on the other hosts.
  </p>
  </dd>
! <dt><code class="code">--nfp</code></dt>
  <dd><p>Specify that the machine does not have a floating point unit.  This
! option only applies to &lsquo;<samp class="samp">m68k-sun-sunos<var class="var">n</var></samp>&rsquo;.  On any other
! system, <samp class="option">--nfp</samp> has no effect.
  </p>
  </dd>
! <dt><code class="code">--enable-werror</code></dt>
! <dt><code class="code">--disable-werror</code></dt>
! <dt><code class="code">--enable-werror=yes</code></dt>
! <dt><code class="code">--enable-werror=no</code></dt>
  <dd><p>When you specify this option, it controls whether certain files in the
! compiler are built with <samp class="option">-Werror</samp> in bootstrap stage2 and later.
! If you don&rsquo;t specify it, <samp class="option">-Werror</samp> is turned on for the main
  development trunk.  However it defaults to off for release branches and
! final releases.  The specific files which get <samp class="option">-Werror</samp> are
  controlled by the Makefiles.
  </p>
  </dd>
! <dt><code class="code">--enable-checking</code></dt>
! <dt><code class="code">--disable-checking</code></dt>
! <dt><code class="code">--enable-checking=<var class="var">list</var></code></dt>
  <dd><p>This option controls performing internal consistency checks in the compiler.
  It does not change the generated code, but adds error checking of the
  requested complexity.  This slows down the compiler and may only work
  properly if you are building the compiler with GCC.
  </p>
  <p>When the option is not specified, the active set of checks depends on context.
! Namely, bootstrap stage 1 defaults to &lsquo;<samp class="samp">--enable-checking=yes</samp>&rsquo;, builds
  from release branches or release archives default to
! &lsquo;<samp class="samp">--enable-checking=release</samp>&rsquo;, and otherwise
! &lsquo;<samp class="samp">--enable-checking=yes,extra</samp>&rsquo; is used.  When the option is
! specified without a <var class="var">list</var>, the result is the same as
! &lsquo;<samp class="samp">--enable-checking=yes</samp>&rsquo;.  Likewise, &lsquo;<samp class="samp">--disable-checking</samp>&rsquo; is
! equivalent to &lsquo;<samp class="samp">--enable-checking=no</samp>&rsquo;.
  </p>
! <p>The categories of checks available in <var class="var">list</var> are &lsquo;<samp class="samp">yes</samp>&rsquo; (most common
! checks &lsquo;<samp class="samp">assert,misc,gc,gimple,rtlflag,runtime,tree,types</samp>&rsquo;), &lsquo;<samp class="samp">no</samp>&rsquo;
! (no checks at all), &lsquo;<samp class="samp">all</samp>&rsquo; (all but &lsquo;<samp class="samp">valgrind</samp>&rsquo;), &lsquo;<samp class="samp">release</samp>&rsquo;
! (cheapest checks &lsquo;<samp class="samp">assert,runtime</samp>&rsquo;) or &lsquo;<samp class="samp">none</samp>&rsquo; (same as &lsquo;<samp class="samp">no</samp>&rsquo;).
! &lsquo;<samp class="samp">release</samp>&rsquo; checks are always on and to disable them
! &lsquo;<samp class="samp">--disable-checking</samp>&rsquo; or &lsquo;<samp class="samp">--enable-checking=no[,&lt;other checks&gt;]</samp>&rsquo;
  must be explicitly requested.  Disabling assertions makes the compiler and
  runtime slightly faster but increases the risk of undetected internal errors
  causing wrong code to be generated.
  </p>
! <p>Individual checks can be enabled with these flags: &lsquo;<samp class="samp">assert</samp>&rsquo;, &lsquo;<samp class="samp">df</samp>&rsquo;,
! &lsquo;<samp class="samp">extra</samp>&rsquo;, &lsquo;<samp class="samp">fold</samp>&rsquo;, &lsquo;<samp class="samp">gc</samp>&rsquo;, &lsquo;<samp class="samp">gcac</samp>&rsquo;, &lsquo;<samp class="samp">gimple</samp>&rsquo;,
! &lsquo;<samp class="samp">misc</samp>&rsquo;, &lsquo;<samp class="samp">rtl</samp>&rsquo;, &lsquo;<samp class="samp">rtlflag</samp>&rsquo;, &lsquo;<samp class="samp">runtime</samp>&rsquo;, &lsquo;<samp class="samp">tree</samp>&rsquo;,
! &lsquo;<samp class="samp">types</samp>&rsquo; and &lsquo;<samp class="samp">valgrind</samp>&rsquo;.  &lsquo;<samp class="samp">extra</samp>&rsquo; extends &lsquo;<samp class="samp">misc</samp>&rsquo;
  checking with extra checks that might affect code generation and should
  therefore not differ between stage1 and later stages in bootstrap.
  </p>
! <p>The &lsquo;<samp class="samp">valgrind</samp>&rsquo; check requires the external <code class="command">valgrind</code> simulator,
! available from <a class="uref" href="https://valgrind.org">https://valgrind.org</a>.  The &lsquo;<samp class="samp">rtl</samp>&rsquo; checks are
! expensive and the &lsquo;<samp class="samp">df</samp>&rsquo;, &lsquo;<samp class="samp">gcac</samp>&rsquo; and &lsquo;<samp class="samp">valgrind</samp>&rsquo; checks are very
  expensive.
  </p>
  </dd>
! <dt><code class="code">--disable-stage1-checking</code></dt>
! <dt><code class="code">--enable-stage1-checking</code></dt>
! <dt><code class="code">--enable-stage1-checking=<var class="var">list</var></code></dt>
! <dd><p>This option affects only bootstrap build.  If no <samp class="option">--enable-checking</samp>
! option is specified the stage1 compiler is built with &lsquo;<samp class="samp">yes</samp>&rsquo; checking
  enabled, otherwise the stage1 checking flags are the same as specified by
! <samp class="option">--enable-checking</samp>.  To build the stage1 compiler with
! different checking options use <samp class="option">--enable-stage1-checking</samp>.
! The list of checking options is the same as for <samp class="option">--enable-checking</samp>.
  If your system is too slow or too small to bootstrap a released compiler
! with checking for stage1 enabled, you can use &lsquo;<samp class="samp">--disable-stage1-checking</samp>&rsquo;
  to disable checking for the stage1 compiler.
  </p>
  </dd>
! <dt><code class="code">--enable-coverage</code></dt>
! <dt><code class="code">--enable-coverage=<var class="var">level</var></code></dt>
  <dd><p>With this option, the compiler is built to collect self coverage
  information, every time it is run.  This is for internal development
  purposes, and only works when the compiler is being built with gcc.  The
! <var class="var">level</var> argument controls whether the compiler is built optimized or
! not, values are &lsquo;<samp class="samp">opt</samp>&rsquo; and &lsquo;<samp class="samp">noopt</samp>&rsquo;.  For coverage analysis you
  want to disable optimization, for performance analysis you want to
  enable optimization.  When coverage is enabled, the default level is
  without optimization.
  </p>
  </dd>
! <dt><code class="code">--enable-gather-detailed-mem-stats</code></dt>
  <dd><p>When this option is specified more detailed information on memory
  allocation is gathered.  This information is printed when using
! <samp class="option">-fmem-report</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-valgrind-annotations</code></dt>
  <dd><p>Mark selected memory related operations in the compiler when run under
  valgrind to suppress false positives.
  </p>
  </dd>
! <dt><code class="code">--enable-nls</code></dt>
! <dt><code class="code">--disable-nls</code></dt>
! <dd><p>The <samp class="option">--enable-nls</samp> option enables Native Language Support (NLS),
  which lets GCC output diagnostics in languages other than American
  English.  Native Language Support is enabled by default if not doing a
! canadian cross build.  The <samp class="option">--disable-nls</samp> option disables NLS.
  </p>
  <p>Note that this functionality requires either libintl (provided by GNU
  gettext) or C standard library that contains support for gettext (such
  as the GNU C Library).
! See <a class="xref" href="#with-included-gettext">&ndash;with-included-gettext</a> for more
  information on the conditions required to get gettext support.
  </p>
  </dd>
! <dt><code class="code">--with-libintl-prefix=<var class="var">dir</var></code></dt>
! <dt><code class="code">--without-libintl-prefix</code></dt>
! <dd><p>Searches for libintl in <samp class="file"><var class="var">dir</var>/include</samp> and
! <samp class="file"><var class="var">dir</var>/lib</samp>, or disables manual searching for it, letting the
  linker handle it.
  </p>
  </dd>
! <dt><code class="code">--with-libintl-type=<var class="var">type</var></code></dt>
  <dd><p>Specifies the type of library to search for when looking for libintl.
! <var class="var">type</var> can be one of <code class="code">auto</code>, <code class="code">static</code> or <code class="code">shared</code>.
  </p>
! <a class="anchor" id="with-included-gettext"></a></dd>
! <dt><code class="code">--with-included-gettext</code></dt>
! <dd><p>Only available if <samp class="file">gettext</samp> is present in the source tree.
  </p>
  <p>Forces the gettext tree to be configured to build and use a new static
  libintl, overriding the system libintl.  Results in GCC being built
*************** against the newly built libintl rather t
*** 1784,1792 ****
  to get gettext routines from.  The following table is a summary of the
  possible options:
  </p>
! <table>
! <thead><tr><th width="12%">GNU gettext present in sources</th><th width="12%">libintl installed on the system</th><th width="12%"><code>gettext</code> present in libc</th><th width="20%"><code>--with-included-gettext</code></th><th width="44%">Effects on localization</th></tr></thead>
! <tr><td width="12%">No</td><td width="12%">No</td><td width="12%">No</td><td width="20%">(ignored)</td><td width="44%">No localization</td></tr>
  <tr><td width="12%">No</td><td width="12%">No</td><td width="12%">Yes</td><td width="20%">(ignored)</td><td width="44%">Localized, libc gettext</td></tr>
  <tr><td width="12%">No</td><td width="12%">Yes</td><td width="12%">No</td><td width="20%">(ignored)</td><td width="44%">Localized, libintl</td></tr>
  <tr><td width="12%">No</td><td width="12%">Yes</td><td width="12%">Yes</td><td width="20%">(ignored)</td><td width="44%">Localized, libintl</td></tr>
--- 1765,1773 ----
  to get gettext routines from.  The following table is a summary of the
  possible options:
  </p>
! <table class="multitable">
! <thead><tr><th width="12%">GNU gettext present in sources</th><th width="12%">libintl installed on the system</th><th width="12%"><code class="code">gettext</code> present in libc</th><th width="20%"><code class="code">--with-included-gettext</code></th><th width="44%">Effects on localization</th></tr></thead>
! <tbody><tr><td width="12%">No</td><td width="12%">No</td><td width="12%">No</td><td width="20%">(ignored)</td><td width="44%">No localization</td></tr>
  <tr><td width="12%">No</td><td width="12%">No</td><td width="12%">Yes</td><td width="20%">(ignored)</td><td width="44%">Localized, libc gettext</td></tr>
  <tr><td width="12%">No</td><td width="12%">Yes</td><td width="12%">No</td><td width="20%">(ignored)</td><td width="44%">Localized, libintl</td></tr>
  <tr><td width="12%">No</td><td width="12%">Yes</td><td width="12%">Yes</td><td width="20%">(ignored)</td><td width="44%">Localized, libintl</td></tr>
*************** possible options:
*** 1798,1820 ****
  <tr><td width="12%">Yes</td><td width="12%">Yes</td><td width="12%">No</td><td width="20%">Yes</td><td width="44%">Localized, new, static libintl</td></tr>
  <tr><td width="12%">Yes</td><td width="12%">Yes</td><td width="12%">Yes</td><td width="20%">No</td><td width="44%">Localized, libintl</td></tr>
  <tr><td width="12%">Yes</td><td width="12%">Yes</td><td width="12%">Yes</td><td width="20%">Yes</td><td width="44%">Localized, new, static libintl</td></tr>
  </table>
  
  </dd>
! <dt><code>--with-catgets</code></dt>
! <dd><p>If NLS is enabled, and if the host lacks <code>gettext</code> but has the
! inferior <code>catgets</code> interface, the GCC build procedure normally
! ignores <code>catgets</code> and instead uses GCC&rsquo;s copy of the GNU
! <code>gettext</code> library.  The <samp>--with-catgets</samp> option causes the
! build procedure to use the host&rsquo;s <code>catgets</code> in this situation.
  </p>
  </dd>
! <dt><code>--with-libiconv-prefix=<var>dir</var></code></dt>
! <dd><p>Search for libiconv header files in <samp><var>dir</var>/include</samp> and
! libiconv library files in <samp><var>dir</var>/lib</samp>.
  </p>
  </dd>
! <dt><code>--enable-obsolete</code></dt>
  <dd><p>Enable configuration for an obsoleted system.  If you attempt to
  configure GCC for a system (build, host, or target) which has been
  obsoleted, and you do not specify this flag, configure will halt with an
--- 1779,1802 ----
  <tr><td width="12%">Yes</td><td width="12%">Yes</td><td width="12%">No</td><td width="20%">Yes</td><td width="44%">Localized, new, static libintl</td></tr>
  <tr><td width="12%">Yes</td><td width="12%">Yes</td><td width="12%">Yes</td><td width="20%">No</td><td width="44%">Localized, libintl</td></tr>
  <tr><td width="12%">Yes</td><td width="12%">Yes</td><td width="12%">Yes</td><td width="20%">Yes</td><td width="44%">Localized, new, static libintl</td></tr>
+ </tbody>
  </table>
  
  </dd>
! <dt><code class="code">--with-catgets</code></dt>
! <dd><p>If NLS is enabled, and if the host lacks <code class="code">gettext</code> but has the
! inferior <code class="code">catgets</code> interface, the GCC build procedure normally
! ignores <code class="code">catgets</code> and instead uses GCC&rsquo;s copy of the GNU
! <code class="code">gettext</code> library.  The <samp class="option">--with-catgets</samp> option causes the
! build procedure to use the host&rsquo;s <code class="code">catgets</code> in this situation.
  </p>
  </dd>
! <dt><code class="code">--with-libiconv-prefix=<var class="var">dir</var></code></dt>
! <dd><p>Search for libiconv header files in <samp class="file"><var class="var">dir</var>/include</samp> and
! libiconv library files in <samp class="file"><var class="var">dir</var>/lib</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-obsolete</code></dt>
  <dd><p>Enable configuration for an obsoleted system.  If you attempt to
  configure GCC for a system (build, host, or target) which has been
  obsoleted, and you do not specify this flag, configure will halt with an
*************** is removed entirely in the next major re
*** 1825,1931 ****
  forward to maintain the port.
  </p>
  </dd>
! <dt><code>--enable-decimal-float</code></dt>
! <dt><code>--enable-decimal-float=yes</code></dt>
! <dt><code>--enable-decimal-float=no</code></dt>
! <dt><code>--enable-decimal-float=bid</code></dt>
! <dt><code>--enable-decimal-float=dpd</code></dt>
! <dt><code>--disable-decimal-float</code></dt>
  <dd><p>Enable (or disable) support for the C decimal floating point extension
  that is in the IEEE 754-2008 standard.  This is enabled by default
  only on AArch64, PowerPC, i386, and x86_64 GNU/Linux systems.  Other
  systems may also support it, but require the user to specifically
  enable it.  You can optionally control which decimal floating point
! format is used (either &lsquo;<samp>bid</samp>&rsquo; or &lsquo;<samp>dpd</samp>&rsquo;).  The &lsquo;<samp>bid</samp>&rsquo;
  (binary integer decimal) format is default on AArch64, i386 and x86_64
! systems, and the &lsquo;<samp>dpd</samp>&rsquo; (densely packed decimal) format is default
  on PowerPC systems.
  </p>
  </dd>
! <dt><code>--enable-fixed-point</code></dt>
! <dt><code>--disable-fixed-point</code></dt>
  <dd><p>Enable (or disable) support for C fixed-point arithmetic.
  This option is enabled by default for some targets (such as MIPS) which
  have hardware-support for fixed-point operations.  On other targets, you
  may enable this option manually.
  </p>
  </dd>
! <dt><code>--with-long-double-128</code></dt>
! <dd><p>Specify if <code>long double</code> type should be 128-bit by default on selected
! GNU/Linux architectures.  If using <code>--without-long-double-128</code>,
! <code>long double</code> will be by default 64-bit, the same as <code>double</code> type.
  When neither of these configure options are used, the default will be
! 128-bit <code>long double</code> when built against GNU C Library 2.4 and later,
! 64-bit <code>long double</code> otherwise.
  </p>
  </dd>
! <dt><code>--with-long-double-format=ibm</code></dt>
! <dt><code>--with-long-double-format=ieee</code></dt>
! <dd><p>Specify whether <code>long double</code> uses the IBM extended double format
  or the IEEE 128-bit floating point format on PowerPC Linux systems.
  This configuration switch will only work on little endian PowerPC
  Linux systems and on big endian 64-bit systems where the default cpu
! is at least power7 (i.e. <samp>--with-cpu=power7</samp>,
! <samp>--with-cpu=power8</samp>, or <samp>--with-cpu=power9</samp> is used).
  </p>
! <p>If you use the <samp>--with-long-double-64</samp> configuration option,
! the <samp>--with-long-double-format=ibm</samp> and
! <samp>--with-long-double-format=ieee</samp> options are ignored.
  </p>
! <p>The default <code>long double</code> format is to use IBM extended double.
  Until all of the libraries are converted to use IEEE 128-bit floating
  point, it is not recommended to use
! <samp>--with-long-double-format=ieee</samp>.
  </p>
  </dd>
! <dt><code>--enable-fdpic</code></dt>
  <dd><p>On SH Linux systems, generate ELF FDPIC code.
  </p>
  </dd>
! <dt><code>--with-gmp=<var>pathname</var></code></dt>
! <dt><code>--with-gmp-include=<var>pathname</var></code></dt>
! <dt><code>--with-gmp-lib=<var>pathname</var></code></dt>
! <dt><code>--with-mpfr=<var>pathname</var></code></dt>
! <dt><code>--with-mpfr-include=<var>pathname</var></code></dt>
! <dt><code>--with-mpfr-lib=<var>pathname</var></code></dt>
! <dt><code>--with-mpc=<var>pathname</var></code></dt>
! <dt><code>--with-mpc-include=<var>pathname</var></code></dt>
! <dt><code>--with-mpc-lib=<var>pathname</var></code></dt>
  <dd><p>If you want to build GCC but do not have the GMP library, the MPFR
  library and/or the MPC library installed in a standard location and
  do not have their sources present in the GCC source tree then you
  can explicitly specify the directory where they are installed
! (&lsquo;<samp>--with-gmp=<var>gmpinstalldir</var></samp>&rsquo;,
! &lsquo;<samp>--with-mpfr=<var>mpfrinstalldir</var></samp>&rsquo;,
! &lsquo;<samp>--with-mpc=<var>mpcinstalldir</var></samp>&rsquo;).  The
! <samp>--with-gmp=<var>gmpinstalldir</var></samp> option is shorthand for
! <samp>--with-gmp-lib=<var>gmpinstalldir</var>/lib</samp> and
! <samp>--with-gmp-include=<var>gmpinstalldir</var>/include</samp>.  Likewise the
! <samp>--with-mpfr=<var>mpfrinstalldir</var></samp> option is shorthand for
! <samp>--with-mpfr-lib=<var>mpfrinstalldir</var>/lib</samp> and
! <samp>--with-mpfr-include=<var>mpfrinstalldir</var>/include</samp>, also the
! <samp>--with-mpc=<var>mpcinstalldir</var></samp> option is shorthand for
! <samp>--with-mpc-lib=<var>mpcinstalldir</var>/lib</samp> and
! <samp>--with-mpc-include=<var>mpcinstalldir</var>/include</samp>.  If these
  shorthand assumptions are not correct, you can use the explicit
  include and lib options directly.  You might also need to ensure the
  shared libraries can be found by the dynamic linker when building and
  using GCC, for example by setting the runtime shared library path
! variable (<code>LD_LIBRARY_PATH</code> on GNU/Linux and Solaris systems).
  </p>
  <p>These flags are applicable to the host platform only.  When building
  a cross compiler, they will not be used to configure target libraries.
  </p>
  </dd>
! <dt><code>--with-isl=<var>pathname</var></code></dt>
! <dt><code>--with-isl-include=<var>pathname</var></code></dt>
! <dt><code>--with-isl-lib=<var>pathname</var></code></dt>
  <dd><p>If you do not have the isl library installed in a standard location and you
  want to build GCC, you can explicitly specify the directory where it is
! installed (&lsquo;<samp>--with-isl=<var>islinstalldir</var></samp>&rsquo;). The
! <samp>--with-isl=<var>islinstalldir</var></samp> option is shorthand for
! <samp>--with-isl-lib=<var>islinstalldir</var>/lib</samp> and
! <samp>--with-isl-include=<var>islinstalldir</var>/include</samp>. If this
  shorthand assumption is not correct, you can use the explicit
  include and lib options directly.
  </p>
--- 1807,1913 ----
  forward to maintain the port.
  </p>
  </dd>
! <dt><code class="code">--enable-decimal-float</code></dt>
! <dt><code class="code">--enable-decimal-float=yes</code></dt>
! <dt><code class="code">--enable-decimal-float=no</code></dt>
! <dt><code class="code">--enable-decimal-float=bid</code></dt>
! <dt><code class="code">--enable-decimal-float=dpd</code></dt>
! <dt><code class="code">--disable-decimal-float</code></dt>
  <dd><p>Enable (or disable) support for the C decimal floating point extension
  that is in the IEEE 754-2008 standard.  This is enabled by default
  only on AArch64, PowerPC, i386, and x86_64 GNU/Linux systems.  Other
  systems may also support it, but require the user to specifically
  enable it.  You can optionally control which decimal floating point
! format is used (either &lsquo;<samp class="samp">bid</samp>&rsquo; or &lsquo;<samp class="samp">dpd</samp>&rsquo;).  The &lsquo;<samp class="samp">bid</samp>&rsquo;
  (binary integer decimal) format is default on AArch64, i386 and x86_64
! systems, and the &lsquo;<samp class="samp">dpd</samp>&rsquo; (densely packed decimal) format is default
  on PowerPC systems.
  </p>
  </dd>
! <dt><code class="code">--enable-fixed-point</code></dt>
! <dt><code class="code">--disable-fixed-point</code></dt>
  <dd><p>Enable (or disable) support for C fixed-point arithmetic.
  This option is enabled by default for some targets (such as MIPS) which
  have hardware-support for fixed-point operations.  On other targets, you
  may enable this option manually.
  </p>
  </dd>
! <dt><code class="code">--with-long-double-128</code></dt>
! <dd><p>Specify if <code class="code">long double</code> type should be 128-bit by default on selected
! GNU/Linux architectures.  If using <code class="code">--without-long-double-128</code>,
! <code class="code">long double</code> will be by default 64-bit, the same as <code class="code">double</code> type.
  When neither of these configure options are used, the default will be
! 128-bit <code class="code">long double</code> when built against GNU C Library 2.4 and later,
! 64-bit <code class="code">long double</code> otherwise.
  </p>
  </dd>
! <dt><code class="code">--with-long-double-format=ibm</code></dt>
! <dt><code class="code">--with-long-double-format=ieee</code></dt>
! <dd><p>Specify whether <code class="code">long double</code> uses the IBM extended double format
  or the IEEE 128-bit floating point format on PowerPC Linux systems.
  This configuration switch will only work on little endian PowerPC
  Linux systems and on big endian 64-bit systems where the default cpu
! is at least power7 (i.e. <samp class="option">--with-cpu=power7</samp>,
! <samp class="option">--with-cpu=power8</samp>, or <samp class="option">--with-cpu=power9</samp> is used).
  </p>
! <p>If you use the <samp class="option">--with-long-double-64</samp> configuration option,
! the <samp class="option">--with-long-double-format=ibm</samp> and
! <samp class="option">--with-long-double-format=ieee</samp> options are ignored.
  </p>
! <p>The default <code class="code">long double</code> format is to use IBM extended double.
  Until all of the libraries are converted to use IEEE 128-bit floating
  point, it is not recommended to use
! <samp class="option">--with-long-double-format=ieee</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-fdpic</code></dt>
  <dd><p>On SH Linux systems, generate ELF FDPIC code.
  </p>
  </dd>
! <dt><code class="code">--with-gmp=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-gmp-include=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-gmp-lib=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-mpfr=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-mpfr-include=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-mpfr-lib=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-mpc=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-mpc-include=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-mpc-lib=<var class="var">pathname</var></code></dt>
  <dd><p>If you want to build GCC but do not have the GMP library, the MPFR
  library and/or the MPC library installed in a standard location and
  do not have their sources present in the GCC source tree then you
  can explicitly specify the directory where they are installed
! (&lsquo;<samp class="samp">--with-gmp=<var class="var">gmpinstalldir</var></samp>&rsquo;,
! &lsquo;<samp class="samp">--with-mpfr=<var class="var">mpfrinstalldir</var></samp>&rsquo;,
! &lsquo;<samp class="samp">--with-mpc=<var class="var">mpcinstalldir</var></samp>&rsquo;).  The
! <samp class="option">--with-gmp=<var class="var">gmpinstalldir</var></samp> option is shorthand for
! <samp class="option">--with-gmp-lib=<var class="var">gmpinstalldir</var>/lib</samp> and
! <samp class="option">--with-gmp-include=<var class="var">gmpinstalldir</var>/include</samp>.  Likewise the
! <samp class="option">--with-mpfr=<var class="var">mpfrinstalldir</var></samp> option is shorthand for
! <samp class="option">--with-mpfr-lib=<var class="var">mpfrinstalldir</var>/lib</samp> and
! <samp class="option">--with-mpfr-include=<var class="var">mpfrinstalldir</var>/include</samp>, also the
! <samp class="option">--with-mpc=<var class="var">mpcinstalldir</var></samp> option is shorthand for
! <samp class="option">--with-mpc-lib=<var class="var">mpcinstalldir</var>/lib</samp> and
! <samp class="option">--with-mpc-include=<var class="var">mpcinstalldir</var>/include</samp>.  If these
  shorthand assumptions are not correct, you can use the explicit
  include and lib options directly.  You might also need to ensure the
  shared libraries can be found by the dynamic linker when building and
  using GCC, for example by setting the runtime shared library path
! variable (<code class="env">LD_LIBRARY_PATH</code> on GNU/Linux and Solaris systems).
  </p>
  <p>These flags are applicable to the host platform only.  When building
  a cross compiler, they will not be used to configure target libraries.
  </p>
  </dd>
! <dt><code class="code">--with-isl=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-isl-include=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-isl-lib=<var class="var">pathname</var></code></dt>
  <dd><p>If you do not have the isl library installed in a standard location and you
  want to build GCC, you can explicitly specify the directory where it is
! installed (&lsquo;<samp class="samp">--with-isl=<var class="var">islinstalldir</var></samp>&rsquo;). The
! <samp class="option">--with-isl=<var class="var">islinstalldir</var></samp> option is shorthand for
! <samp class="option">--with-isl-lib=<var class="var">islinstalldir</var>/lib</samp> and
! <samp class="option">--with-isl-include=<var class="var">islinstalldir</var>/include</samp>. If this
  shorthand assumption is not correct, you can use the explicit
  include and lib options directly.
  </p>
*************** include and lib options directly.
*** 1933,2059 ****
  a cross compiler, they will not be used to configure target libraries.
  </p>
  </dd>
! <dt><code>--with-stage1-ldflags=<var>flags</var></code></dt>
  <dd><p>This option may be used to set linker flags to be used when linking
  stage 1 of GCC.  These are also used when linking GCC if configured with
! <samp>--disable-bootstrap</samp>.  If <samp>--with-stage1-libs</samp> is not set to a
! value, then the default is &lsquo;<samp>-static-libstdc++ -static-libgcc</samp>&rsquo;, if
  supported.
  </p>
  </dd>
! <dt><code>--with-stage1-libs=<var>libs</var></code></dt>
  <dd><p>This option may be used to set libraries to be used when linking stage 1
  of GCC.  These are also used when linking GCC if configured with
! <samp>--disable-bootstrap</samp>.
  </p>
  </dd>
! <dt><code>--with-boot-ldflags=<var>flags</var></code></dt>
  <dd><p>This option may be used to set linker flags to be used when linking
  stage 2 and later when bootstrapping GCC.  If &ndash;with-boot-libs
  is not is set to a value, then the default is
! &lsquo;<samp>-static-libstdc++ -static-libgcc</samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--with-boot-libs=<var>libs</var></code></dt>
  <dd><p>This option may be used to set libraries to be used when linking stage 2
  and later when bootstrapping GCC.
  </p>
  </dd>
! <dt><code>--with-debug-prefix-map=<var>map</var></code></dt>
! <dd><p>Convert source directory names using <samp>-fdebug-prefix-map</samp> when
! building runtime libraries.  &lsquo;<samp><var>map</var></samp>&rsquo; is a space-separated
! list of maps of the form &lsquo;<samp><var>old</var>=<var>new</var></samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--enable-linker-build-id</code></dt>
! <dd><p>Tells GCC to pass <samp>--build-id</samp> option to the linker for all final
! links (links performed without the <samp>-r</samp> or <samp>--relocatable</samp>
  option), if the linker supports it.  If you specify
! <samp>--enable-linker-build-id</samp>, but your linker does not
! support <samp>--build-id</samp> option, a warning is issued and the
! <samp>--enable-linker-build-id</samp> option is ignored.  The default is off.
  </p>
  </dd>
! <dt><code>--with-linker-hash-style=<var>choice</var></code></dt>
! <dd><p>Tells GCC to pass <samp>--hash-style=<var>choice</var></samp> option to the
! linker for all final links. <var>choice</var> can be one of
! &lsquo;<samp>sysv</samp>&rsquo;, &lsquo;<samp>gnu</samp>&rsquo;, and &lsquo;<samp>both</samp>&rsquo; where &lsquo;<samp>sysv</samp>&rsquo; is the default.
  </p>
  </dd>
! <dt><code>--enable-gnu-unique-object</code></dt>
! <dt><code>--disable-gnu-unique-object</code></dt>
  <dd><p>Tells GCC to use the gnu_unique_object relocation for C++ template
  static data members and inline function local statics.  Enabled by
  default for a toolchain with an assembler that accepts it and
  GLIBC 2.11 or above, otherwise disabled.
  </p>
  </dd>
! <dt><code>--with-diagnostics-color=<var>choice</var></code></dt>
! <dd><p>Tells GCC to use <var>choice</var> as the default for <samp>-fdiagnostics-color=</samp>
! option (if not used explicitly on the command line).  <var>choice</var>
! can be one of &lsquo;<samp>never</samp>&rsquo;, &lsquo;<samp>auto</samp>&rsquo;, &lsquo;<samp>always</samp>&rsquo;, and &lsquo;<samp>auto-if-env</samp>&rsquo;
! where &lsquo;<samp>auto</samp>&rsquo; is the default.  &lsquo;<samp>auto-if-env</samp>&rsquo; makes
! <samp>-fdiagnostics-color=auto</samp> the default if <code>GCC_COLORS</code>
  is present and non-empty in the environment of the compiler, and
! <samp>-fdiagnostics-color=never</samp> otherwise.
  </p>
  </dd>
! <dt><code>--with-diagnostics-urls=<var>choice</var></code></dt>
! <dd><p>Tells GCC to use <var>choice</var> as the default for <samp>-fdiagnostics-urls=</samp>
! option (if not used explicitly on the command line).  <var>choice</var>
! can be one of &lsquo;<samp>never</samp>&rsquo;, &lsquo;<samp>auto</samp>&rsquo;, &lsquo;<samp>always</samp>&rsquo;, and &lsquo;<samp>auto-if-env</samp>&rsquo;
! where &lsquo;<samp>auto</samp>&rsquo; is the default.  &lsquo;<samp>auto-if-env</samp>&rsquo; makes
! <samp>-fdiagnostics-urls=auto</samp> the default if <code>GCC_URLS</code>
! or <code>TERM_URLS</code> is present and non-empty in the environment of the
! compiler, and <samp>-fdiagnostics-urls=never</samp> otherwise.
  </p>
  </dd>
! <dt><code>--enable-lto</code></dt>
! <dt><code>--disable-lto</code></dt>
  <dd><p>Enable support for link-time optimization (LTO).  This is enabled by
! default, and may be disabled using <samp>--disable-lto</samp>.
  </p>
  </dd>
! <dt><code>--enable-linker-plugin-configure-flags=FLAGS</code></dt>
! <dt><code>--enable-linker-plugin-flags=FLAGS</code></dt>
  <dd><p>By default, linker plugins (such as the LTO plugin) are built for the
  host system architecture.  For the case that the linker has a
  different (but run-time compatible) architecture, these flags can be
  specified to build plugins that are compatible to the linker.  For
  example, if you are building GCC for a 64-bit x86_64
! (&lsquo;<samp>x86_64-pc-linux-gnu</samp>&rsquo;) host system, but have a 32-bit x86
! GNU/Linux (&lsquo;<samp>i686-pc-linux-gnu</samp>&rsquo;) linker executable (which is
  executable on the former system), you can configure GCC as follows for
  getting compatible linker plugins:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% <var>srcdir</var>/configure \
      --host=x86_64-pc-linux-gnu \
      --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
      --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
  </pre></div>
  
  </dd>
! <dt><code>--with-plugin-ld=<var>pathname</var></code></dt>
  <dd><p>Enable an alternate linker to be used at link-time optimization (LTO)
! link time when <samp>-fuse-linker-plugin</samp> is enabled.
  This linker should have plugin support such as gold starting with
  version 2.20 or GNU ld starting with version 2.21.
! See <samp>-fuse-linker-plugin</samp> for details.
  </p>
  </dd>
! <dt><code>--enable-canonical-system-headers</code></dt>
! <dt><code>--disable-canonical-system-headers</code></dt>
! <dd><p>Enable system header path canonicalization for <samp>libcpp</samp>.  This can
  produce shorter header file paths in diagnostics and dependency output
  files, but these changed header paths may conflict with some compilation
  environments.  Enabled by default, and may be disabled using
! <samp>--disable-canonical-system-headers</samp>.
  </p>
  </dd>
! <dt><code>--with-glibc-version=<var>major</var>.<var>minor</var></code></dt>
  <dd><p>Tell GCC that when the GNU C Library (glibc) is used on the target it
! will be version <var>major</var>.<var>minor</var> or later.  Normally this can
  be detected from the C library&rsquo;s header files, but this option may be
  needed when bootstrapping a cross toolchain without the header files
  available for building the initial bootstrap compiler.
--- 1915,2041 ----
  a cross compiler, they will not be used to configure target libraries.
  </p>
  </dd>
! <dt><code class="code">--with-stage1-ldflags=<var class="var">flags</var></code></dt>
  <dd><p>This option may be used to set linker flags to be used when linking
  stage 1 of GCC.  These are also used when linking GCC if configured with
! <samp class="option">--disable-bootstrap</samp>.  If <samp class="option">--with-stage1-libs</samp> is not set to a
! value, then the default is &lsquo;<samp class="samp">-static-libstdc++ -static-libgcc</samp>&rsquo;, if
  supported.
  </p>
  </dd>
! <dt><code class="code">--with-stage1-libs=<var class="var">libs</var></code></dt>
  <dd><p>This option may be used to set libraries to be used when linking stage 1
  of GCC.  These are also used when linking GCC if configured with
! <samp class="option">--disable-bootstrap</samp>.
  </p>
  </dd>
! <dt><code class="code">--with-boot-ldflags=<var class="var">flags</var></code></dt>
  <dd><p>This option may be used to set linker flags to be used when linking
  stage 2 and later when bootstrapping GCC.  If &ndash;with-boot-libs
  is not is set to a value, then the default is
! &lsquo;<samp class="samp">-static-libstdc++ -static-libgcc</samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--with-boot-libs=<var class="var">libs</var></code></dt>
  <dd><p>This option may be used to set libraries to be used when linking stage 2
  and later when bootstrapping GCC.
  </p>
  </dd>
! <dt><code class="code">--with-debug-prefix-map=<var class="var">map</var></code></dt>
! <dd><p>Convert source directory names using <samp class="option">-fdebug-prefix-map</samp> when
! building runtime libraries.  &lsquo;<samp class="samp"><var class="var">map</var></samp>&rsquo; is a space-separated
! list of maps of the form &lsquo;<samp class="samp"><var class="var">old</var>=<var class="var">new</var></samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--enable-linker-build-id</code></dt>
! <dd><p>Tells GCC to pass <samp class="option">--build-id</samp> option to the linker for all final
! links (links performed without the <samp class="option">-r</samp> or <samp class="option">--relocatable</samp>
  option), if the linker supports it.  If you specify
! <samp class="option">--enable-linker-build-id</samp>, but your linker does not
! support <samp class="option">--build-id</samp> option, a warning is issued and the
! <samp class="option">--enable-linker-build-id</samp> option is ignored.  The default is off.
  </p>
  </dd>
! <dt><code class="code">--with-linker-hash-style=<var class="var">choice</var></code></dt>
! <dd><p>Tells GCC to pass <samp class="option">--hash-style=<var class="var">choice</var></samp> option to the
! linker for all final links. <var class="var">choice</var> can be one of
! &lsquo;<samp class="samp">sysv</samp>&rsquo;, &lsquo;<samp class="samp">gnu</samp>&rsquo;, and &lsquo;<samp class="samp">both</samp>&rsquo; where &lsquo;<samp class="samp">sysv</samp>&rsquo; is the default.
  </p>
  </dd>
! <dt><code class="code">--enable-gnu-unique-object</code></dt>
! <dt><code class="code">--disable-gnu-unique-object</code></dt>
  <dd><p>Tells GCC to use the gnu_unique_object relocation for C++ template
  static data members and inline function local statics.  Enabled by
  default for a toolchain with an assembler that accepts it and
  GLIBC 2.11 or above, otherwise disabled.
  </p>
  </dd>
! <dt><code class="code">--with-diagnostics-color=<var class="var">choice</var></code></dt>
! <dd><p>Tells GCC to use <var class="var">choice</var> as the default for <samp class="option">-fdiagnostics-color=</samp>
! option (if not used explicitly on the command line).  <var class="var">choice</var>
! can be one of &lsquo;<samp class="samp">never</samp>&rsquo;, &lsquo;<samp class="samp">auto</samp>&rsquo;, &lsquo;<samp class="samp">always</samp>&rsquo;, and &lsquo;<samp class="samp">auto-if-env</samp>&rsquo;
! where &lsquo;<samp class="samp">auto</samp>&rsquo; is the default.  &lsquo;<samp class="samp">auto-if-env</samp>&rsquo; makes
! <samp class="option">-fdiagnostics-color=auto</samp> the default if <code class="env">GCC_COLORS</code>
  is present and non-empty in the environment of the compiler, and
! <samp class="option">-fdiagnostics-color=never</samp> otherwise.
  </p>
  </dd>
! <dt><code class="code">--with-diagnostics-urls=<var class="var">choice</var></code></dt>
! <dd><p>Tells GCC to use <var class="var">choice</var> as the default for <samp class="option">-fdiagnostics-urls=</samp>
! option (if not used explicitly on the command line).  <var class="var">choice</var>
! can be one of &lsquo;<samp class="samp">never</samp>&rsquo;, &lsquo;<samp class="samp">auto</samp>&rsquo;, &lsquo;<samp class="samp">always</samp>&rsquo;, and &lsquo;<samp class="samp">auto-if-env</samp>&rsquo;
! where &lsquo;<samp class="samp">auto</samp>&rsquo; is the default.  &lsquo;<samp class="samp">auto-if-env</samp>&rsquo; makes
! <samp class="option">-fdiagnostics-urls=auto</samp> the default if <code class="env">GCC_URLS</code>
! or <code class="env">TERM_URLS</code> is present and non-empty in the environment of the
! compiler, and <samp class="option">-fdiagnostics-urls=never</samp> otherwise.
  </p>
  </dd>
! <dt><code class="code">--enable-lto</code></dt>
! <dt><code class="code">--disable-lto</code></dt>
  <dd><p>Enable support for link-time optimization (LTO).  This is enabled by
! default, and may be disabled using <samp class="option">--disable-lto</samp>.
  </p>
  </dd>
! <dt><code class="code">--enable-linker-plugin-configure-flags=FLAGS</code></dt>
! <dt><code class="code">--enable-linker-plugin-flags=FLAGS</code></dt>
  <dd><p>By default, linker plugins (such as the LTO plugin) are built for the
  host system architecture.  For the case that the linker has a
  different (but run-time compatible) architecture, these flags can be
  specified to build plugins that are compatible to the linker.  For
  example, if you are building GCC for a 64-bit x86_64
! (&lsquo;<samp class="samp">x86_64-pc-linux-gnu</samp>&rsquo;) host system, but have a 32-bit x86
! GNU/Linux (&lsquo;<samp class="samp">i686-pc-linux-gnu</samp>&rsquo;) linker executable (which is
  executable on the former system), you can configure GCC as follows for
  getting compatible linker plugins:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% <var class="var">srcdir</var>/configure \
      --host=x86_64-pc-linux-gnu \
      --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
      --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
  </pre></div>
  
  </dd>
! <dt><code class="code">--with-plugin-ld=<var class="var">pathname</var></code></dt>
  <dd><p>Enable an alternate linker to be used at link-time optimization (LTO)
! link time when <samp class="option">-fuse-linker-plugin</samp> is enabled.
  This linker should have plugin support such as gold starting with
  version 2.20 or GNU ld starting with version 2.21.
! See <samp class="option">-fuse-linker-plugin</samp> for details.
  </p>
  </dd>
! <dt><code class="code">--enable-canonical-system-headers</code></dt>
! <dt><code class="code">--disable-canonical-system-headers</code></dt>
! <dd><p>Enable system header path canonicalization for <samp class="file">libcpp</samp>.  This can
  produce shorter header file paths in diagnostics and dependency output
  files, but these changed header paths may conflict with some compilation
  environments.  Enabled by default, and may be disabled using
! <samp class="option">--disable-canonical-system-headers</samp>.
  </p>
  </dd>
! <dt><code class="code">--with-glibc-version=<var class="var">major</var>.<var class="var">minor</var></code></dt>
  <dd><p>Tell GCC that when the GNU C Library (glibc) is used on the target it
! will be version <var class="var">major</var>.<var class="var">minor</var> or later.  Normally this can
  be detected from the C library&rsquo;s header files, but this option may be
  needed when bootstrapping a cross toolchain without the header files
  available for building the initial bootstrap compiler.
*************** However, such configurations may not wor
*** 2064,2086 ****
  configuration in GCC is on a per-multilib basis.
  </p>
  </dd>
! <dt><code>--enable-as-accelerator-for=<var>target</var></code></dt>
! <dd><p>Build as offload target compiler. Specify offload host triple by <var>target</var>.
  </p>
  </dd>
! <dt><code>--enable-offload-targets=<var>target1</var>[=<var>path1</var>],&hellip;,<var>targetN</var>[=<var>pathN</var>]</code></dt>
! <dd><p>Enable offloading to targets <var>target1</var>, &hellip;, <var>targetN</var>.
  Offload compilers are expected to be already installed.  Default search
! path for them is <samp><var>exec-prefix</var></samp>, but it can be changed by
! specifying paths <var>path1</var>, &hellip;, <var>pathN</var>.
  </p>
! <div class="smallexample">
! <pre class="smallexample">% <var>srcdir</var>/configure \
      --enable-offload-targets=amdgcn-amdhsa,nvptx-none
  </pre></div>
  
  </dd>
! <dt><code>--enable-offload-defaulted</code></dt>
  <dd>
  <p>Tell GCC that configured but not installed offload compilers and libgomp
  plugins are silently ignored.  Useful for distribution compilers where
--- 2046,2068 ----
  configuration in GCC is on a per-multilib basis.
  </p>
  </dd>
! <dt><code class="code">--enable-as-accelerator-for=<var class="var">target</var></code></dt>
! <dd><p>Build as offload target compiler. Specify offload host triple by <var class="var">target</var>.
  </p>
  </dd>
! <dt><code class="code">--enable-offload-targets=<var class="var">target1</var>[=<var class="var">path1</var>],&hellip;,<var class="var">targetN</var>[=<var class="var">pathN</var>]</code></dt>
! <dd><p>Enable offloading to targets <var class="var">target1</var>, &hellip;, <var class="var">targetN</var>.
  Offload compilers are expected to be already installed.  Default search
! path for them is <samp class="file"><var class="var">exec-prefix</var></samp>, but it can be changed by
! specifying paths <var class="var">path1</var>, &hellip;, <var class="var">pathN</var>.
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% <var class="var">srcdir</var>/configure \
      --enable-offload-targets=amdgcn-amdhsa,nvptx-none
  </pre></div>
  
  </dd>
! <dt><code class="code">--enable-offload-defaulted</code></dt>
  <dd>
  <p>Tell GCC that configured but not installed offload compilers and libgomp
  plugins are silently ignored.  Useful for distribution compilers where
*************** of those optional packages should determ
*** 2089,2109 ****
  target set rather than the GCC configure-time selection.
  </p>
  </dd>
! <dt><code>--enable-cet</code></dt>
! <dt><code>--disable-cet</code></dt>
  <dd><p>Enable building target run-time libraries with control-flow
! instrumentation, see <samp>-fcf-protection</samp> option.  When
! <code>--enable-cet</code> is specified target libraries are configured
! to add <samp>-fcf-protection</samp> and, if needed, other target
  specific options to a set of building options.
  </p>
! <p><code>--enable-cet=auto</code> is default.  CET is enabled on Linux/x86 if
! target binutils supports <code>Intel CET</code> instructions and disabled
  otherwise.  In this case, the target libraries are configured to get
! additional <samp>-fcf-protection</samp> option.
  </p>
  </dd>
! <dt><code>--with-riscv-attribute=&lsquo;<samp>yes</samp>&rsquo;, &lsquo;<samp>no</samp>&rsquo; or &lsquo;<samp>default</samp>&rsquo;</code></dt>
  <dd><p>Generate RISC-V attribute by default, in order to record extra build
  information in object.
  </p>
--- 2071,2091 ----
  target set rather than the GCC configure-time selection.
  </p>
  </dd>
! <dt><code class="code">--enable-cet</code></dt>
! <dt><code class="code">--disable-cet</code></dt>
  <dd><p>Enable building target run-time libraries with control-flow
! instrumentation, see <samp class="option">-fcf-protection</samp> option.  When
! <code class="code">--enable-cet</code> is specified target libraries are configured
! to add <samp class="option">-fcf-protection</samp> and, if needed, other target
  specific options to a set of building options.
  </p>
! <p><code class="code">--enable-cet=auto</code> is default.  CET is enabled on Linux/x86 if
! target binutils supports <code class="code">Intel CET</code> instructions and disabled
  otherwise.  In this case, the target libraries are configured to get
! additional <samp class="option">-fcf-protection</samp> option.
  </p>
  </dd>
! <dt><code class="code">--with-riscv-attribute=&lsquo;<samp class="samp">yes</samp>&rsquo;, &lsquo;<samp class="samp">no</samp>&rsquo; or &lsquo;<samp class="samp">default</samp>&rsquo;</code></dt>
  <dd><p>Generate RISC-V attribute by default, in order to record extra build
  information in object.
  </p>
*************** information in object.
*** 2111,2121 ****
  target if target binutils supported.
  </p>
  </dd>
! <dt><code>--enable-s390-excess-float-precision</code></dt>
! <dt><code>--disable-s390-excess-float-precision</code></dt>
  <dd><p>On s390(x) targets, enable treatment of float expressions with double precision
! when in standards-compliant mode (e.g., when <code>--std=c99</code> or
! <code>-fexcess-precision=standard</code> are given).
  </p>
  <p>For a native build and cross compiles that have target headers, the option&rsquo;s
  default is derived from glibc&rsquo;s behavior. When glibc clamps float_t to double,
--- 2093,2103 ----
  target if target binutils supported.
  </p>
  </dd>
! <dt><code class="code">--enable-s390-excess-float-precision</code></dt>
! <dt><code class="code">--disable-s390-excess-float-precision</code></dt>
  <dd><p>On s390(x) targets, enable treatment of float expressions with double precision
! when in standards-compliant mode (e.g., when <code class="code">--std=c99</code> or
! <code class="code">-fexcess-precision=standard</code> are given).
  </p>
  <p>For a native build and cross compiles that have target headers, the option&rsquo;s
  default is derived from glibc&rsquo;s behavior. When glibc clamps float_t to double,
*************** GCC follows and enables the option. For
*** 2123,2137 ****
  disabled.
  </p>
  </dd>
! <dt><code>--with-zstd=<var>pathname</var></code></dt>
! <dt><code>--with-zstd-include=<var>pathname</var></code></dt>
! <dt><code>--with-zstd-lib=<var>pathname</var></code></dt>
! <dd><p>If you do not have the <code>zstd</code> library installed in a standard
  location and you want to build GCC, you can explicitly specify the
! directory where it is installed (&lsquo;<samp>--with-zstd=<var>zstdinstalldir</var></samp>&rsquo;).
! The <samp>--with-zstd=<var>zstdinstalldir</var></samp> option is shorthand for
! <samp>--with-zstd-lib=<var>zstdinstalldir</var>/lib</samp> and
! <samp>--with-zstd-include=<var>zstdinstalldir</var>/include</samp>. If this
  shorthand assumption is not correct, you can use the explicit
  include and lib options directly.
  </p>
--- 2105,2119 ----
  disabled.
  </p>
  </dd>
! <dt><code class="code">--with-zstd=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-zstd-include=<var class="var">pathname</var></code></dt>
! <dt><code class="code">--with-zstd-lib=<var class="var">pathname</var></code></dt>
! <dd><p>If you do not have the <code class="code">zstd</code> library installed in a standard
  location and you want to build GCC, you can explicitly specify the
! directory where it is installed (&lsquo;<samp class="samp">--with-zstd=<var class="var">zstdinstalldir</var></samp>&rsquo;).
! The <samp class="option">--with-zstd=<var class="var">zstdinstalldir</var></samp> option is shorthand for
! <samp class="option">--with-zstd-lib=<var class="var">zstdinstalldir</var>/lib</samp> and
! <samp class="option">--with-zstd-include=<var class="var">zstdinstalldir</var>/include</samp>. If this
  shorthand assumption is not correct, you can use the explicit
  include and lib options directly.
  </p>
*************** a cross compiler, they will not be used
*** 2140,2445 ****
  </p></dd>
  </dl>
  
! <a name="Cross-Compiler-Specific-Options"></a>
! <h4 class="subheading">Cross-Compiler-Specific Options</h4>
  <p>The following options only apply to building cross compilers.
  </p>
! <dl compact="compact">
! <dt><code>--with-toolexeclibdir=<var>dir</var></code></dt>
  <dd><p>Specify the installation directory for libraries built with a cross compiler.
! The default is <samp>${gcc_tooldir}/lib</samp>.
  </p>
  </dd>
! <dt><code>--with-sysroot</code></dt>
! <dt><code>--with-sysroot=<var>dir</var></code></dt>
! <dd><p>Tells GCC to consider <var>dir</var> as the root of a tree that contains
  (a subset of) the root filesystem of the target operating system.
  Target system headers, libraries and run-time object files will be
  searched for in there.  More specifically, this acts as if
! <samp>--sysroot=<var>dir</var></samp> was added to the default options of the built
  compiler.  The specified directory is not copied into the
! install tree, unlike the options <samp>--with-headers</samp> and
! <samp>--with-libs</samp> that this option obsoletes.  The default value,
! in case <samp>--with-sysroot</samp> is not given an argument, is
! <samp>${gcc_tooldir}/sys-root</samp>.  If the specified directory is a
! subdirectory of <samp>${exec_prefix}</samp>, then it will be found relative to
  the GCC binaries if the installation tree is moved.
  </p>
  <p>This option affects the system root for the compiler used to build
  target libraries (which runs on the build system) and the compiler newly
! installed with <code>make install</code>; it does not affect the compiler which is
  used to build GCC itself.
  </p>
! <p>If you specify the <samp>--with-native-system-header-dir=<var>dirname</var></samp>
! option then the compiler will search that directory within <var>dirname</var> for
! native system headers rather than the default <samp>/usr/include</samp>.
  </p>
  </dd>
! <dt><code>--with-build-sysroot</code></dt>
! <dt><code>--with-build-sysroot=<var>dir</var></code></dt>
! <dd><p>Tells GCC to consider <var>dir</var> as the system root (see
! <samp>--with-sysroot</samp>) while building target libraries, instead of
! the directory specified with <samp>--with-sysroot</samp>.  This option is
! only useful when you are already using <samp>--with-sysroot</samp>.  You
! can use <samp>--with-build-sysroot</samp> when you are configuring with
! <samp>--prefix</samp> set to a directory that is different from the one in
  which you are installing GCC and your target libraries.
  </p>
  <p>This option affects the system root for the compiler used to build
  target libraries (which runs on the build system); it does not affect
  the compiler which is used to build GCC itself.
  </p>
! <p>If you specify the <samp>--with-native-system-header-dir=<var>dirname</var></samp>
! option then the compiler will search that directory within <var>dirname</var> for
! native system headers rather than the default <samp>/usr/include</samp>.
  </p>
  </dd>
! <dt><code>--with-headers</code></dt>
! <dt><code>--with-headers=<var>dir</var></code></dt>
! <dd><p>Deprecated in favor of <samp>--with-sysroot</samp>.
  Specifies that target headers are available when building a cross compiler.
! The <var>dir</var> argument specifies a directory which has the target include
! files.  These include files will be copied into the <samp>gcc</samp> install
! directory.  <em>This option with the <var>dir</var> argument is required</em> when
! building a cross compiler, if <samp><var>prefix</var>/<var>target</var>/sys-include</samp>
! doesn&rsquo;t pre-exist.  If <samp><var>prefix</var>/<var>target</var>/sys-include</samp> does
! pre-exist, the <var>dir</var> argument may be omitted.  <code>fixincludes</code>
  will be run on these files to make them compatible with GCC.
  </p>
  </dd>
! <dt><code>--without-headers</code></dt>
  <dd><p>Tells GCC not use any target headers from a libc when building a cross
  compiler.  When crossing to GNU/Linux, you need the headers so GCC
  can build the exception handling for libgcc.
  </p>
  </dd>
! <dt><code>--with-libs</code></dt>
! <dt><code>--with-libs=&quot;<var>dir1</var> <var>dir2</var> &hellip; <var>dirN</var>&quot;</code></dt>
! <dd><p>Deprecated in favor of <samp>--with-sysroot</samp>.
  Specifies a list of directories which contain the target runtime
! libraries.  These libraries will be copied into the <samp>gcc</samp> install
  directory.  If the directory list is omitted, this option has no
  effect.
  </p>
  </dd>
! <dt><code>--with-newlib</code></dt>
! <dd><p>Specifies that &lsquo;<samp>newlib</samp>&rsquo; is
! being used as the target C library.  This causes <code>__eprintf</code> to be
! omitted from <samp>libgcc.a</samp> on the assumption that it will be provided by
! &lsquo;<samp>newlib</samp>&rsquo;.
  </p>
  <a name="avr"></a>
  </dd>
! <dt><code>--with-avrlibc</code></dt>
! <dd><p>Only supported for the AVR target. Specifies that &lsquo;<samp>AVR-Libc</samp>&rsquo; is
  being used as the target C&nbsp; library.  This causes float support
! functions like <code>__addsf3</code> to be omitted from <samp>libgcc.a</samp> on
! the assumption that it will be provided by <samp>libm.a</samp>.  For more
! technical details, cf. <a href="https://gcc.gnu.org/PR54461">PR54461</a>.
  It is not supported for
  RTEMS configurations, which currently use newlib.  The option is
  supported since version 4.7.2 and is the default in 4.8.0 and newer.
  </p>
  </dd>
! <dt><code>--with-double={32|64|32,64|64,32}</code></dt>
! <dt><code>--with-long-double={32|64|32,64|64,32|double}</code></dt>
  <dd><p>Only supported for the AVR target since version&nbsp;10.
! Specify the default layout available for the C/C++ &lsquo;<samp>double</samp>&rsquo;
! and &lsquo;<samp>long double</samp>&rsquo; type, respectively. The following rules apply:
! </p><ul>
! <li> The first value after the &lsquo;<samp>=</samp>&rsquo; specifies the default layout (in bits)
! of the type and also the default for the <samp>-mdouble=</samp> resp.
! <samp>-mlong-double=</samp> compiler option.
! </li><li> If more than one value is specified, respective multilib variants are
! available, and  <samp>-mdouble=</samp> resp. <samp>-mlong-double=</samp> acts
  as a multilib option.
! </li><li> If <samp>--with-long-double=double</samp> is specified, &lsquo;<samp>double</samp>&rsquo; and
! &lsquo;<samp>long double</samp>&rsquo; will have the same layout.
! </li><li> The defaults are <samp>--with-long-double=64,32</samp> and
! <samp>--with-double=32,64</samp>.  The default &lsquo;<samp>double</samp>&rsquo; layout imposed by
  the latter is compatible with older versions of the compiler that implement
! &lsquo;<samp>double</samp>&rsquo; as a 32-bit type, which does not comply to the language standard.
  </li></ul>
! <p>Not all combinations of <samp>--with-double=</samp> and
! <samp>--with-long-double=</samp> are valid.  For example, the combination
! <samp>--with-double=32,64</samp> <samp>--with-long-double=32</samp> will be
  rejected because the first option specifies the availability of
! multilibs for &lsquo;<samp>double</samp>&rsquo;, whereas the second option implies
! that &lsquo;<samp>long double</samp>&rsquo; &mdash; and hence also &lsquo;<samp>double</samp>&rsquo; &mdash; is always
  32&nbsp;bits wide.
  </p>
  </dd>
! <dt><code>--with-double-comparison={tristate|bool|libf7}</code></dt>
  <dd><p>Only supported for the AVR target since version&nbsp;10.
  Specify what result format is returned by library functions that
! compare 64-bit floating point values (<code>DFmode</code>).
! The GCC default is &lsquo;<samp>tristate</samp>&rsquo;.  If the floating point
! implementation returns a boolean instead, set it to &lsquo;<samp>bool</samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--with-libf7={libgcc|math|math-symbols|no}</code></dt>
  <dd><p>Only supported for the AVR target since version&nbsp;10.
  Specify to which degree code from LibF7 is included in libgcc.
  LibF7 is an ad-hoc, AVR-specific, 64-bit floating point emulation
! written in C and (inline) assembly. &lsquo;<samp>libgcc</samp>&rsquo; adds support
  for functions that one would usually expect in libgcc like double addition,
! double comparisons and double conversions. &lsquo;<samp>math</samp>&rsquo; also adds routines
! that one would expect in <samp>libm.a</samp>, but with <code>__</code> (two underscores)
! prepended to the symbol names as specified by <samp>math.h</samp>.
! &lsquo;<samp>math-symbols</samp>&rsquo; also defines weak aliases for the functions
! declared in <samp>math.h</samp>.  However, <code>--with-libf7</code> won&rsquo;t
! install no <samp>math.h</samp> header file whatsoever, this file must come
! from elsewhere.  This option sets <samp>--with-double-comparison</samp>
! to &lsquo;<samp>bool</samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--with-nds32-lib=<var>library</var></code></dt>
! <dd><p>Specifies that <var>library</var> setting is used for building <samp>libgcc.a</samp>.
! Currently, the valid <var>library</var> is &lsquo;<samp>newlib</samp>&rsquo; or &lsquo;<samp>mculib</samp>&rsquo;.
  This option is only supported for the NDS32 target.
  </p>
  </dd>
! <dt><code>--with-build-time-tools=<var>dir</var></code></dt>
  <dd><p>Specifies where to find the set of target tools (assembler, linker, etc.)
  that will be used while building GCC itself.  This option can be useful
  if the directory layouts are different between the system you are building
  GCC on, and the system where you will deploy it.
  </p>
! <p>For example, on an &lsquo;<samp>ia64-hp-hpux</samp>&rsquo; system, you may have the GNU
! assembler and linker in <samp>/usr/bin</samp>, and the native tools in a
  different path, and build a toolchain that expects to find the
! native tools in <samp>/usr/bin</samp>.
  </p>
! <p>When you use this option, you should ensure that <var>dir</var> includes
! <code>ar</code>, <code>as</code>, <code>ld</code>, <code>nm</code>,
! <code>ranlib</code> and <code>strip</code> if necessary, and possibly
! <code>objdump</code>.  Otherwise, GCC may use an inconsistent set of
  tools.
  </p></dd>
  </dl>
  
! <a name="Overriding-configure-test-results"></a>
! <h4 class="subsubheading">Overriding <code>configure</code> test results</h4>
  
  <p>Sometimes, it might be necessary to override the result of some
! <code>configure</code> test, for example in order to ease porting to a new
! system or work around a bug in a test.  The toplevel <code>configure</code>
  script provides three variables for this:
  </p>
! <dl compact="compact">
! <dd>
! <a name="index-build_005fconfigargs"></a>
! </dd>
! <dt><code>build_configargs</code></dt>
! <dd><p>The contents of this variable is passed to all build <code>configure</code>
  scripts.
  </p>
- <a name="index-host_005fconfigargs"></a>
  </dd>
! <dt><code>host_configargs</code></dt>
! <dd><p>The contents of this variable is passed to all host <code>configure</code>
  scripts.
  </p>
- <a name="index-target_005fconfigargs"></a>
  </dd>
! <dt><code>target_configargs</code></dt>
! <dd><p>The contents of this variable is passed to all target <code>configure</code>
  scripts.
  </p>
  </dd>
  </dl>
  
! <p>In order to avoid shell and <code>make</code> quoting issues for complex
! overrides, you can pass a setting for <code>CONFIG_SITE</code> and set
  variables in the site file.
  </p>
! <a name="Objective-C-Specific-Options"></a>
! <h4 class="subheading">Objective-C-Specific Options</h4>
  
  <p>The following options apply to the build of the Objective-C runtime library.
  </p>
! <dl compact="compact">
! <dt><code>--enable-objc-gc</code></dt>
  <dd><p>Specify that an additional variant of the GNU Objective-C runtime library
  is built, using an external build of the Boehm-Demers-Weiser garbage
! collector (<a href="https://www.hboehm.info/gc/">https://www.hboehm.info/gc/</a>).  This library needs to be
  available for each multilib variant, unless configured with
! <samp>--enable-objc-gc=&lsquo;<samp>auto</samp>&rsquo;</samp> in which case the build of the
  additional runtime library is skipped when not available and the build
  continues.
  </p>
  </dd>
! <dt><code>--with-target-bdw-gc=<var>list</var></code></dt>
! <dt><code>--with-target-bdw-gc-include=<var>list</var></code></dt>
! <dt><code>--with-target-bdw-gc-lib=<var>list</var></code></dt>
  <dd><p>Specify search directories for the garbage collector header files and
! libraries. <var>list</var> is a comma separated list of key value pairs of the
! form &lsquo;<samp><var>multilibdir</var>=<var>path</var></samp>&rsquo;, where the default multilib key
! is named as &lsquo;<samp>.</samp>&rsquo; (dot), or is omitted (e.g.
! &lsquo;<samp>--with-target-bdw-gc=/opt/bdw-gc,32=/opt-bdw-gc32</samp>&rsquo;).
  </p>
! <p>The options <samp>--with-target-bdw-gc-include</samp> and
! <samp>--with-target-bdw-gc-lib</samp> must always be specified together
  for each multilib variant and they take precedence over
! <samp>--with-target-bdw-gc</samp>.  If <samp>--with-target-bdw-gc-include</samp>
  is missing values for a multilib, then the value for the default
! multilib is used (e.g. &lsquo;<samp>--with-target-bdw-gc-include=/opt/bdw-gc/include</samp>&rsquo;
! &lsquo;<samp>--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32</samp>&rsquo;).
  If none of these options are specified, the library is assumed in
  default locations.
  </p></dd>
  </dl>
  
! <a name="D-Specific-Options"></a>
! <h4 class="subheading">D-Specific Options</h4>
  
  <p>The following options apply to the build of the D runtime library.
  </p>
! <dl compact="compact">
! <dt><code>--enable-libphobos-checking</code></dt>
! <dt><code>--disable-libphobos-checking</code></dt>
! <dt><code>--enable-libphobos-checking=<var>list</var></code></dt>
  <dd><p>This option controls whether run-time checks and contracts are compiled into
  the D runtime library.  When the option is not specified, the library is built
! with &lsquo;<samp>release</samp>&rsquo; checking.  When the option is specified without a
! <var>list</var>, the result is the same as &lsquo;<samp>--enable-libphobos-checking=yes</samp>&rsquo;.
! Likewise, &lsquo;<samp>--disable-libphobos-checking</samp>&rsquo; is equivalent to
! &lsquo;<samp>--enable-libphobos-checking=no</samp>&rsquo;.
  </p>
! <p>The categories of checks available in <var>list</var> are &lsquo;<samp>yes</samp>&rsquo; (compiles
! libphobos with <samp>-fno-release</samp>), &lsquo;<samp>no</samp>&rsquo; (compiles libphobos with
! <samp>-frelease</samp>), &lsquo;<samp>all</samp>&rsquo; (same as &lsquo;<samp>yes</samp>&rsquo;), &lsquo;<samp>none</samp>&rsquo; or
! &lsquo;<samp>release</samp>&rsquo; (same as &lsquo;<samp>no</samp>&rsquo;).
  </p>
! <p>Individual checks available in <var>list</var> are &lsquo;<samp>assert</samp>&rsquo; (compiles libphobos
! with an extra option <samp>-fassert</samp>).
  </p>
  </dd>
! <dt><code>--with-libphobos-druntime-only</code></dt>
! <dt><code>--with-libphobos-druntime-only=<var>choice</var></code></dt>
  <dd><p>Specify whether to build only the core D runtime library (druntime), or both
  the core and standard library (phobos) into libphobos.  This is useful for
  targets that have full support in druntime, but no or incomplete support
! in phobos.  <var>choice</var> can be one of &lsquo;<samp>auto</samp>&rsquo;, &lsquo;<samp>yes</samp>&rsquo;, and &lsquo;<samp>no</samp>&rsquo;
! where &lsquo;<samp>auto</samp>&rsquo; is the default.
  </p>
! <p>When the option is not specified, the default choice &lsquo;<samp>auto</samp>&rsquo; means that it
  is inferred whether the target has support for the phobos standard library.
! When the option is specified without a <var>choice</var>,  the result is the same as
! &lsquo;<samp>--with-libphobos-druntime-only=yes</samp>&rsquo;.
  </p>
  </dd>
! <dt><code>--with-target-system-zlib</code></dt>
! <dd><p>Use installed &lsquo;<samp>zlib</samp>&rsquo; rather than that included with GCC.  This needs
  to be available for each multilib variant, unless configured with
! <samp>--with-target-system-zlib=&lsquo;<samp>auto</samp>&rsquo;</samp> in which case the GCC&nbsp;included
! &lsquo;<samp>zlib</samp>&rsquo; is only used when the system installed library is not available.
  </p></dd>
  </dl>
  
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 2122,2418 ----
  </p></dd>
  </dl>
  
! <h4 class="subheading" id="Cross-Compiler-Specific-Options"><span>Cross-Compiler-Specific Options<a class="copiable-link" href="#Cross-Compiler-Specific-Options"> &para;</a></span></h4>
  <p>The following options only apply to building cross compilers.
  </p>
! <dl class="table">
! <dt><code class="code">--with-toolexeclibdir=<var class="var">dir</var></code></dt>
  <dd><p>Specify the installation directory for libraries built with a cross compiler.
! The default is <samp class="option">${gcc_tooldir}/lib</samp>.
  </p>
  </dd>
! <dt><code class="code">--with-sysroot</code></dt>
! <dt><code class="code">--with-sysroot=<var class="var">dir</var></code></dt>
! <dd><p>Tells GCC to consider <var class="var">dir</var> as the root of a tree that contains
  (a subset of) the root filesystem of the target operating system.
  Target system headers, libraries and run-time object files will be
  searched for in there.  More specifically, this acts as if
! <samp class="option">--sysroot=<var class="var">dir</var></samp> was added to the default options of the built
  compiler.  The specified directory is not copied into the
! install tree, unlike the options <samp class="option">--with-headers</samp> and
! <samp class="option">--with-libs</samp> that this option obsoletes.  The default value,
! in case <samp class="option">--with-sysroot</samp> is not given an argument, is
! <samp class="option">${gcc_tooldir}/sys-root</samp>.  If the specified directory is a
! subdirectory of <samp class="option">${exec_prefix}</samp>, then it will be found relative to
  the GCC binaries if the installation tree is moved.
  </p>
  <p>This option affects the system root for the compiler used to build
  target libraries (which runs on the build system) and the compiler newly
! installed with <code class="code">make install</code>; it does not affect the compiler which is
  used to build GCC itself.
  </p>
! <p>If you specify the <samp class="option">--with-native-system-header-dir=<var class="var">dirname</var></samp>
! option then the compiler will search that directory within <var class="var">dirname</var> for
! native system headers rather than the default <samp class="file">/usr/include</samp>.
  </p>
  </dd>
! <dt><code class="code">--with-build-sysroot</code></dt>
! <dt><code class="code">--with-build-sysroot=<var class="var">dir</var></code></dt>
! <dd><p>Tells GCC to consider <var class="var">dir</var> as the system root (see
! <samp class="option">--with-sysroot</samp>) while building target libraries, instead of
! the directory specified with <samp class="option">--with-sysroot</samp>.  This option is
! only useful when you are already using <samp class="option">--with-sysroot</samp>.  You
! can use <samp class="option">--with-build-sysroot</samp> when you are configuring with
! <samp class="option">--prefix</samp> set to a directory that is different from the one in
  which you are installing GCC and your target libraries.
  </p>
  <p>This option affects the system root for the compiler used to build
  target libraries (which runs on the build system); it does not affect
  the compiler which is used to build GCC itself.
  </p>
! <p>If you specify the <samp class="option">--with-native-system-header-dir=<var class="var">dirname</var></samp>
! option then the compiler will search that directory within <var class="var">dirname</var> for
! native system headers rather than the default <samp class="file">/usr/include</samp>.
  </p>
  </dd>
! <dt><code class="code">--with-headers</code></dt>
! <dt><code class="code">--with-headers=<var class="var">dir</var></code></dt>
! <dd><p>Deprecated in favor of <samp class="option">--with-sysroot</samp>.
  Specifies that target headers are available when building a cross compiler.
! The <var class="var">dir</var> argument specifies a directory which has the target include
! files.  These include files will be copied into the <samp class="file">gcc</samp> install
! directory.  <em class="emph">This option with the <var class="var">dir</var> argument is required</em> when
! building a cross compiler, if <samp class="file"><var class="var">prefix</var>/<var class="var">target</var>/sys-include</samp>
! doesn&rsquo;t pre-exist.  If <samp class="file"><var class="var">prefix</var>/<var class="var">target</var>/sys-include</samp> does
! pre-exist, the <var class="var">dir</var> argument may be omitted.  <code class="command">fixincludes</code>
  will be run on these files to make them compatible with GCC.
  </p>
  </dd>
! <dt><code class="code">--without-headers</code></dt>
  <dd><p>Tells GCC not use any target headers from a libc when building a cross
  compiler.  When crossing to GNU/Linux, you need the headers so GCC
  can build the exception handling for libgcc.
  </p>
  </dd>
! <dt><code class="code">--with-libs</code></dt>
! <dt><code class="code">--with-libs=&quot;<var class="var">dir1</var> <var class="var">dir2</var> &hellip; <var class="var">dirN</var>&quot;</code></dt>
! <dd><p>Deprecated in favor of <samp class="option">--with-sysroot</samp>.
  Specifies a list of directories which contain the target runtime
! libraries.  These libraries will be copied into the <samp class="file">gcc</samp> install
  directory.  If the directory list is omitted, this option has no
  effect.
  </p>
  </dd>
! <dt><code class="code">--with-newlib</code></dt>
! <dd><p>Specifies that &lsquo;<samp class="samp">newlib</samp>&rsquo; is
! being used as the target C library.  This causes <code class="code">__eprintf</code> to be
! omitted from <samp class="file">libgcc.a</samp> on the assumption that it will be provided by
! &lsquo;<samp class="samp">newlib</samp>&rsquo;.
  </p>
  <a name="avr"></a>
  </dd>
! <dt><code class="code">--with-avrlibc</code></dt>
! <dd><p>Only supported for the AVR target. Specifies that &lsquo;<samp class="samp">AVR-Libc</samp>&rsquo; is
  being used as the target C&nbsp; library.  This causes float support
! functions like <code class="code">__addsf3</code> to be omitted from <samp class="file">libgcc.a</samp> on
! the assumption that it will be provided by <samp class="file">libm.a</samp>.  For more
! technical details, cf. <a class="uref" href="https://gcc.gnu.org/PR54461">PR54461</a>.
  It is not supported for
  RTEMS configurations, which currently use newlib.  The option is
  supported since version 4.7.2 and is the default in 4.8.0 and newer.
  </p>
  </dd>
! <dt><code class="code">--with-double={32|64|32,64|64,32}</code></dt>
! <dt><code class="code">--with-long-double={32|64|32,64|64,32|double}</code></dt>
  <dd><p>Only supported for the AVR target since version&nbsp;10.
! Specify the default layout available for the C/C++ &lsquo;<samp class="samp">double</samp>&rsquo;
! and &lsquo;<samp class="samp">long double</samp>&rsquo; type, respectively. The following rules apply:
! </p><ul class="itemize mark-bullet">
! <li>The first value after the &lsquo;<samp class="samp">=</samp>&rsquo; specifies the default layout (in bits)
! of the type and also the default for the <samp class="option">-mdouble=</samp> resp.
! <samp class="option">-mlong-double=</samp> compiler option.
! </li><li>If more than one value is specified, respective multilib variants are
! available, and  <samp class="option">-mdouble=</samp> resp. <samp class="option">-mlong-double=</samp> acts
  as a multilib option.
! </li><li>If <samp class="option">--with-long-double=double</samp> is specified, &lsquo;<samp class="samp">double</samp>&rsquo; and
! &lsquo;<samp class="samp">long double</samp>&rsquo; will have the same layout.
! </li><li>The defaults are <samp class="option">--with-long-double=64,32</samp> and
! <samp class="option">--with-double=32,64</samp>.  The default &lsquo;<samp class="samp">double</samp>&rsquo; layout imposed by
  the latter is compatible with older versions of the compiler that implement
! &lsquo;<samp class="samp">double</samp>&rsquo; as a 32-bit type, which does not comply to the language standard.
  </li></ul>
! <p>Not all combinations of <samp class="option">--with-double=</samp> and
! <samp class="option">--with-long-double=</samp> are valid.  For example, the combination
! <samp class="option">--with-double=32,64</samp> <samp class="option">--with-long-double=32</samp> will be
  rejected because the first option specifies the availability of
! multilibs for &lsquo;<samp class="samp">double</samp>&rsquo;, whereas the second option implies
! that &lsquo;<samp class="samp">long double</samp>&rsquo; &mdash; and hence also &lsquo;<samp class="samp">double</samp>&rsquo; &mdash; is always
  32&nbsp;bits wide.
  </p>
  </dd>
! <dt><code class="code">--with-double-comparison={tristate|bool|libf7}</code></dt>
  <dd><p>Only supported for the AVR target since version&nbsp;10.
  Specify what result format is returned by library functions that
! compare 64-bit floating point values (<code class="code">DFmode</code>).
! The GCC default is &lsquo;<samp class="samp">tristate</samp>&rsquo;.  If the floating point
! implementation returns a boolean instead, set it to &lsquo;<samp class="samp">bool</samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--with-libf7={libgcc|math|math-symbols|no}</code></dt>
  <dd><p>Only supported for the AVR target since version&nbsp;10.
  Specify to which degree code from LibF7 is included in libgcc.
  LibF7 is an ad-hoc, AVR-specific, 64-bit floating point emulation
! written in C and (inline) assembly. &lsquo;<samp class="samp">libgcc</samp>&rsquo; adds support
  for functions that one would usually expect in libgcc like double addition,
! double comparisons and double conversions. &lsquo;<samp class="samp">math</samp>&rsquo; also adds routines
! that one would expect in <samp class="file">libm.a</samp>, but with <code class="code">__</code> (two underscores)
! prepended to the symbol names as specified by <samp class="file">math.h</samp>.
! &lsquo;<samp class="samp">math-symbols</samp>&rsquo; also defines weak aliases for the functions
! declared in <samp class="file">math.h</samp>.  However, <code class="code">--with-libf7</code> won&rsquo;t
! install no <samp class="file">math.h</samp> header file whatsoever, this file must come
! from elsewhere.  This option sets <samp class="option">--with-double-comparison</samp>
! to &lsquo;<samp class="samp">bool</samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--with-nds32-lib=<var class="var">library</var></code></dt>
! <dd><p>Specifies that <var class="var">library</var> setting is used for building <samp class="file">libgcc.a</samp>.
! Currently, the valid <var class="var">library</var> is &lsquo;<samp class="samp">newlib</samp>&rsquo; or &lsquo;<samp class="samp">mculib</samp>&rsquo;.
  This option is only supported for the NDS32 target.
  </p>
  </dd>
! <dt><code class="code">--with-build-time-tools=<var class="var">dir</var></code></dt>
  <dd><p>Specifies where to find the set of target tools (assembler, linker, etc.)
  that will be used while building GCC itself.  This option can be useful
  if the directory layouts are different between the system you are building
  GCC on, and the system where you will deploy it.
  </p>
! <p>For example, on an &lsquo;<samp class="samp">ia64-hp-hpux</samp>&rsquo; system, you may have the GNU
! assembler and linker in <samp class="file">/usr/bin</samp>, and the native tools in a
  different path, and build a toolchain that expects to find the
! native tools in <samp class="file">/usr/bin</samp>.
  </p>
! <p>When you use this option, you should ensure that <var class="var">dir</var> includes
! <code class="command">ar</code>, <code class="command">as</code>, <code class="command">ld</code>, <code class="command">nm</code>,
! <code class="command">ranlib</code> and <code class="command">strip</code> if necessary, and possibly
! <code class="command">objdump</code>.  Otherwise, GCC may use an inconsistent set of
  tools.
  </p></dd>
  </dl>
  
! <h4 class="subsubheading" id="Overriding-configure-test-results"><span>Overriding <code class="command">configure</code> test results<a class="copiable-link" href="#Overriding-configure-test-results"> &para;</a></span></h4>
  
  <p>Sometimes, it might be necessary to override the result of some
! <code class="command">configure</code> test, for example in order to ease porting to a new
! system or work around a bug in a test.  The toplevel <code class="command">configure</code>
  script provides three variables for this:
  </p>
! <dl class="table">
! <dt><a id="index-build_005fconfigargs"></a><span><code class="code">build_configargs</code><a class="copiable-link" href="#index-build_005fconfigargs"> &para;</a></span></dt>
! <dd><p>The contents of this variable is passed to all build <code class="command">configure</code>
  scripts.
  </p>
  </dd>
! <dt><a id="index-host_005fconfigargs"></a><span><code class="code">host_configargs</code><a class="copiable-link" href="#index-host_005fconfigargs"> &para;</a></span></dt>
! <dd><p>The contents of this variable is passed to all host <code class="command">configure</code>
  scripts.
  </p>
  </dd>
! <dt><a id="index-target_005fconfigargs"></a><span><code class="code">target_configargs</code><a class="copiable-link" href="#index-target_005fconfigargs"> &para;</a></span></dt>
! <dd><p>The contents of this variable is passed to all target <code class="command">configure</code>
  scripts.
  </p>
  </dd>
  </dl>
  
! <p>In order to avoid shell and <code class="command">make</code> quoting issues for complex
! overrides, you can pass a setting for <code class="env">CONFIG_SITE</code> and set
  variables in the site file.
  </p>
! <h4 class="subheading" id="Objective-C-Specific-Options"><span>Objective-C-Specific Options<a class="copiable-link" href="#Objective-C-Specific-Options"> &para;</a></span></h4>
  
  <p>The following options apply to the build of the Objective-C runtime library.
  </p>
! <dl class="table">
! <dt><code class="code">--enable-objc-gc</code></dt>
  <dd><p>Specify that an additional variant of the GNU Objective-C runtime library
  is built, using an external build of the Boehm-Demers-Weiser garbage
! collector (<a class="uref" href="https://www.hboehm.info/gc/">https://www.hboehm.info/gc/</a>).  This library needs to be
  available for each multilib variant, unless configured with
! <samp class="option">--enable-objc-gc=&lsquo;<samp class="samp">auto</samp>&rsquo;</samp> in which case the build of the
  additional runtime library is skipped when not available and the build
  continues.
  </p>
  </dd>
! <dt><code class="code">--with-target-bdw-gc=<var class="var">list</var></code></dt>
! <dt><code class="code">--with-target-bdw-gc-include=<var class="var">list</var></code></dt>
! <dt><code class="code">--with-target-bdw-gc-lib=<var class="var">list</var></code></dt>
  <dd><p>Specify search directories for the garbage collector header files and
! libraries. <var class="var">list</var> is a comma separated list of key value pairs of the
! form &lsquo;<samp class="samp"><var class="var">multilibdir</var>=<var class="var">path</var></samp>&rsquo;, where the default multilib key
! is named as &lsquo;<samp class="samp">.</samp>&rsquo; (dot), or is omitted (e.g.
! &lsquo;<samp class="samp">--with-target-bdw-gc=/opt/bdw-gc,32=/opt-bdw-gc32</samp>&rsquo;).
  </p>
! <p>The options <samp class="option">--with-target-bdw-gc-include</samp> and
! <samp class="option">--with-target-bdw-gc-lib</samp> must always be specified together
  for each multilib variant and they take precedence over
! <samp class="option">--with-target-bdw-gc</samp>.  If <samp class="option">--with-target-bdw-gc-include</samp>
  is missing values for a multilib, then the value for the default
! multilib is used (e.g. &lsquo;<samp class="samp">--with-target-bdw-gc-include=/opt/bdw-gc/include</samp>&rsquo;
! &lsquo;<samp class="samp">--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32</samp>&rsquo;).
  If none of these options are specified, the library is assumed in
  default locations.
  </p></dd>
  </dl>
  
! <h4 class="subheading" id="D-Specific-Options"><span>D-Specific Options<a class="copiable-link" href="#D-Specific-Options"> &para;</a></span></h4>
  
  <p>The following options apply to the build of the D runtime library.
  </p>
! <dl class="table">
! <dt><code class="code">--enable-libphobos-checking</code></dt>
! <dt><code class="code">--disable-libphobos-checking</code></dt>
! <dt><code class="code">--enable-libphobos-checking=<var class="var">list</var></code></dt>
  <dd><p>This option controls whether run-time checks and contracts are compiled into
  the D runtime library.  When the option is not specified, the library is built
! with &lsquo;<samp class="samp">release</samp>&rsquo; checking.  When the option is specified without a
! <var class="var">list</var>, the result is the same as &lsquo;<samp class="samp">--enable-libphobos-checking=yes</samp>&rsquo;.
! Likewise, &lsquo;<samp class="samp">--disable-libphobos-checking</samp>&rsquo; is equivalent to
! &lsquo;<samp class="samp">--enable-libphobos-checking=no</samp>&rsquo;.
  </p>
! <p>The categories of checks available in <var class="var">list</var> are &lsquo;<samp class="samp">yes</samp>&rsquo; (compiles
! libphobos with <samp class="option">-fno-release</samp>), &lsquo;<samp class="samp">no</samp>&rsquo; (compiles libphobos with
! <samp class="option">-frelease</samp>), &lsquo;<samp class="samp">all</samp>&rsquo; (same as &lsquo;<samp class="samp">yes</samp>&rsquo;), &lsquo;<samp class="samp">none</samp>&rsquo; or
! &lsquo;<samp class="samp">release</samp>&rsquo; (same as &lsquo;<samp class="samp">no</samp>&rsquo;).
  </p>
! <p>Individual checks available in <var class="var">list</var> are &lsquo;<samp class="samp">assert</samp>&rsquo; (compiles libphobos
! with an extra option <samp class="option">-fassert</samp>).
  </p>
  </dd>
! <dt><code class="code">--with-libphobos-druntime-only</code></dt>
! <dt><code class="code">--with-libphobos-druntime-only=<var class="var">choice</var></code></dt>
  <dd><p>Specify whether to build only the core D runtime library (druntime), or both
  the core and standard library (phobos) into libphobos.  This is useful for
  targets that have full support in druntime, but no or incomplete support
! in phobos.  <var class="var">choice</var> can be one of &lsquo;<samp class="samp">auto</samp>&rsquo;, &lsquo;<samp class="samp">yes</samp>&rsquo;, and &lsquo;<samp class="samp">no</samp>&rsquo;
! where &lsquo;<samp class="samp">auto</samp>&rsquo; is the default.
  </p>
! <p>When the option is not specified, the default choice &lsquo;<samp class="samp">auto</samp>&rsquo; means that it
  is inferred whether the target has support for the phobos standard library.
! When the option is specified without a <var class="var">choice</var>,  the result is the same as
! &lsquo;<samp class="samp">--with-libphobos-druntime-only=yes</samp>&rsquo;.
  </p>
  </dd>
! <dt><code class="code">--with-target-system-zlib</code></dt>
! <dd><p>Use installed &lsquo;<samp class="samp">zlib</samp>&rsquo; rather than that included with GCC.  This needs
  to be available for each multilib variant, unless configured with
! <samp class="option">--with-target-system-zlib=&lsquo;<samp class="samp">auto</samp>&rsquo;</samp> in which case the GCC&nbsp;included
! &lsquo;<samp class="samp">zlib</samp>&rsquo; is only used when the system installed library is not available.
  </p></dd>
  </dl>
  
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/download.html gcc-14.3.0-RC-20260619/INSTALL/download.html
*** gcc-14.3.0/INSTALL/download.html	Fri May 23 11:03:17 2025
--- gcc-14.3.0-RC-20260619/INSTALL/download.html	Fri Jun 19 06:51:09 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Downloading GCC</title>
  
  <meta name="description" content="Downloading GCC">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,67 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
! <style type="text/css">
! <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
! div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
! -->
! </style>
  
  
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Downloading GCC</h1>
  
  
  
--- 29,41 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
! <meta name="viewport" content="width=device-width,initial-scale=1">
! 
  
  
  </head>
  
  <body lang="en">
  
  
  
*************** ul.no-bullet {list-style: none}
*** 83,95 ****
  
  
  
! <a name="index-Downloading-GCC"></a>
! <a name="index-Downloading-the-Source"></a>
  
! <p>GCC is distributed via <a href="https://gcc.gnu.org/git.html">git</a> and via
! HTTPS as tarballs compressed with <code>gzip</code> or <code>bzip2</code>.
  </p>
! <p>Please refer to the <a href="https://gcc.gnu.org/releases.html">releases web page</a>
  for information on how to obtain GCC.
  </p>
  <p>The source distribution includes the Ada, C, C++, Objective-C, D (GCC 9
--- 57,69 ----
  
  
  
! <a class="index-entry-id" id="index-Downloading-GCC"></a>
! <a class="index-entry-id" id="index-Downloading-the-Source"></a>
  
! <p>GCC is distributed via <a class="uref" href="https://gcc.gnu.org/git.html">git</a> and via
! HTTPS as tarballs compressed with <code class="command">gzip</code> or <code class="command">bzip2</code>.
  </p>
! <p>Please refer to the <a class="uref" href="https://gcc.gnu.org/releases.html">releases web page</a>
  for information on how to obtain GCC.
  </p>
  <p>The source distribution includes the Ada, C, C++, Objective-C, D (GCC 9
*************** installation or for use in place of the
*** 105,125 ****
  OS), unpack the binutils distribution either in the same directory or
  a separate one.  In the latter case, add symbolic links to any
  components of the binutils you intend to build alongside the compiler
! (<samp>bfd</samp>, <samp>binutils</samp>, <samp>gas</samp>, <samp>gprof</samp>, <samp>ld</samp>,
! <samp>opcodes</samp>, &hellip;) to the directory containing the GCC sources.
  </p>
  <p>Likewise the GMP, MPFR, MPC and Gettext libraries can be automatically
  built together with GCC.  You may simply run the
! <code>contrib/download_prerequisites</code> script in the GCC source directory
  to set up everything.
  Otherwise unpack the GMP, MPFR, MPC and/or Gettext source
  distributions in the directory containing the GCC sources and rename
! their directories to <samp>gmp</samp>, <samp>mpfr</samp>, <samp>mpc</samp> and
! <samp>gettext</samp>, respectively (or use symbolic links with the same name).
  </p>
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 79,99 ----
  OS), unpack the binutils distribution either in the same directory or
  a separate one.  In the latter case, add symbolic links to any
  components of the binutils you intend to build alongside the compiler
! (<samp class="file">bfd</samp>, <samp class="file">binutils</samp>, <samp class="file">gas</samp>, <samp class="file">gprof</samp>, <samp class="file">ld</samp>,
! <samp class="file">opcodes</samp>, &hellip;) to the directory containing the GCC sources.
  </p>
  <p>Likewise the GMP, MPFR, MPC and Gettext libraries can be automatically
  built together with GCC.  You may simply run the
! <code class="command">contrib/download_prerequisites</code> script in the GCC source directory
  to set up everything.
  Otherwise unpack the GMP, MPFR, MPC and/or Gettext source
  distributions in the directory containing the GCC sources and rename
! their directories to <samp class="file">gmp</samp>, <samp class="file">mpfr</samp>, <samp class="file">mpc</samp> and
! <samp class="file">gettext</samp>, respectively (or use symbolic links with the same name).
  </p>
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/finalinstall.html gcc-14.3.0-RC-20260619/INSTALL/finalinstall.html
*** gcc-14.3.0/INSTALL/finalinstall.html	Fri May 23 11:03:17 2025
--- gcc-14.3.0-RC-20260619/INSTALL/finalinstall.html	Fri Jun 19 06:51:10 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Final installation</title>
  
  <meta name="description" content="Installing GCC: Final installation">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
- a.summary-letter {text-decoration: none}
- blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
- div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
- div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
- kbd {font-style: oblique}
- pre.display {font-family: inherit}
- pre.format {font-family: inherit}
- pre.menu-comment {font-family: serif}
- pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
- span.nolinebreak {white-space: nowrap}
- span.roman {font-family: initial; font-weight: normal}
- span.sansserif {font-family: sans-serif; font-weight: normal}
- ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,39 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
  div.example {margin-left: 3.2em}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: Final installation</h1>
  
  
  
--- 41,46 ----
*************** ul.no-bullet {list-style: none}
*** 89,96 ****
  
  
  <p>Now that GCC has been built (and optionally tested), you can install it with
! </p><div class="smallexample">
! <pre class="smallexample">cd <var>objdir</var> &amp;&amp; make install
  </pre></div>
  
  <p>We strongly recommend to install into a target directory where there is
--- 68,75 ----
  
  
  <p>Now that GCC has been built (and optionally tested), you can install it with
! </p><div class="example smallexample">
! <pre class="example-preformatted">cd <var class="var">objdir</var> &amp;&amp; make install
  </pre></div>
  
  <p>We strongly recommend to install into a target directory where there is
*************** depend on this debugging information (ca
*** 100,165 ****
  instance).
  </p>
  <p>That step completes the installation of GCC; user level binaries can
! be found in <samp><var>prefix</var>/bin</samp> where <var>prefix</var> is the value
! you specified with the <samp>--prefix</samp> to configure (or
! <samp>/usr/local</samp> by default).  (If you specified <samp>--bindir</samp>,
  that directory will be used instead; otherwise, if you specified
! <samp>--exec-prefix</samp>, <samp><var>exec-prefix</var>/bin</samp> will be used.)
  Headers for the C++ library are installed in
! <samp><var>prefix</var>/include</samp>; libraries in <samp><var>libdir</var></samp>
! (normally <samp><var>prefix</var>/lib</samp>); internal parts of the compiler in
! <samp><var>libdir</var>/gcc</samp> and <samp><var>libexecdir</var>/gcc</samp>; documentation
! in info format in <samp><var>infodir</var></samp> (normally
! <samp><var>prefix</var>/info</samp>).
  </p>
  <p>When installing cross-compilers, GCC&rsquo;s executables
! are not only installed into <samp><var>bindir</var></samp>, that
! is, <samp><var>exec-prefix</var>/bin</samp>, but additionally into
! <samp><var>exec-prefix</var>/<var>target-alias</var>/bin</samp>, if that directory
! exists.  Typically, such <em>tooldirs</em> hold target-specific
  binutils, including assembler and linker.
  </p>
! <p>Installation into a temporary staging area or into a <code>chroot</code>
  jail can be achieved with the command
  </p>
! <div class="smallexample">
! <pre class="smallexample">make DESTDIR=<var>path-to-rootdir</var> install
  </pre></div>
  
! <p>where <var>path-to-rootdir</var> is the absolute path of
  a directory relative to which all installation paths will be
! interpreted.  Note that the directory specified by <code>DESTDIR</code>
  need not exist yet; it will be created if necessary.
  </p>
! <p>There is a subtle point with tooldirs and <code>DESTDIR</code>:
  If you relocate a cross-compiler installation with
! e.g. &lsquo;<samp>DESTDIR=<var>rootdir</var></samp>&rsquo;, then the directory
! <samp><var>rootdir</var>/<var>exec-prefix</var>/<var>target-alias</var>/bin</samp> will
  be filled with duplicated GCC executables only if it already exists,
  it will not be created otherwise.  This is regarded as a feature,
  not as a bug, because it gives slightly more control to the packagers
! using the <code>DESTDIR</code> feature.
  </p>
  <p>You can install stripped programs and libraries with
  </p>
! <div class="smallexample">
! <pre class="smallexample">make install-strip
  </pre></div>
  
  <p>By default, only the man pages and info-format GCC documentation
  are built and installed.  If you want to generate the GCC manuals in
  other formats, use commands like
  </p>
! <div class="smallexample">
! <pre class="smallexample">make dvi
  make pdf
  make html
  </pre></div>
  
  <p>to build the manuals in the corresponding formats, and
  </p>
! <div class="smallexample">
! <pre class="smallexample">make install-dvi
  make install-pdf
  make install-html
  </pre></div>
--- 79,144 ----
  instance).
  </p>
  <p>That step completes the installation of GCC; user level binaries can
! be found in <samp class="file"><var class="var">prefix</var>/bin</samp> where <var class="var">prefix</var> is the value
! you specified with the <samp class="option">--prefix</samp> to configure (or
! <samp class="file">/usr/local</samp> by default).  (If you specified <samp class="option">--bindir</samp>,
  that directory will be used instead; otherwise, if you specified
! <samp class="option">--exec-prefix</samp>, <samp class="file"><var class="var">exec-prefix</var>/bin</samp> will be used.)
  Headers for the C++ library are installed in
! <samp class="file"><var class="var">prefix</var>/include</samp>; libraries in <samp class="file"><var class="var">libdir</var></samp>
! (normally <samp class="file"><var class="var">prefix</var>/lib</samp>); internal parts of the compiler in
! <samp class="file"><var class="var">libdir</var>/gcc</samp> and <samp class="file"><var class="var">libexecdir</var>/gcc</samp>; documentation
! in info format in <samp class="file"><var class="var">infodir</var></samp> (normally
! <samp class="file"><var class="var">prefix</var>/info</samp>).
  </p>
  <p>When installing cross-compilers, GCC&rsquo;s executables
! are not only installed into <samp class="file"><var class="var">bindir</var></samp>, that
! is, <samp class="file"><var class="var">exec-prefix</var>/bin</samp>, but additionally into
! <samp class="file"><var class="var">exec-prefix</var>/<var class="var">target-alias</var>/bin</samp>, if that directory
! exists.  Typically, such <em class="dfn">tooldirs</em> hold target-specific
  binutils, including assembler and linker.
  </p>
! <p>Installation into a temporary staging area or into a <code class="command">chroot</code>
  jail can be achieved with the command
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make DESTDIR=<var class="var">path-to-rootdir</var> install
  </pre></div>
  
! <p>where <var class="var">path-to-rootdir</var> is the absolute path of
  a directory relative to which all installation paths will be
! interpreted.  Note that the directory specified by <code class="code">DESTDIR</code>
  need not exist yet; it will be created if necessary.
  </p>
! <p>There is a subtle point with tooldirs and <code class="code">DESTDIR</code>:
  If you relocate a cross-compiler installation with
! e.g. &lsquo;<samp class="samp">DESTDIR=<var class="var">rootdir</var></samp>&rsquo;, then the directory
! <samp class="file"><var class="var">rootdir</var>/<var class="var">exec-prefix</var>/<var class="var">target-alias</var>/bin</samp> will
  be filled with duplicated GCC executables only if it already exists,
  it will not be created otherwise.  This is regarded as a feature,
  not as a bug, because it gives slightly more control to the packagers
! using the <code class="code">DESTDIR</code> feature.
  </p>
  <p>You can install stripped programs and libraries with
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make install-strip
  </pre></div>
  
  <p>By default, only the man pages and info-format GCC documentation
  are built and installed.  If you want to generate the GCC manuals in
  other formats, use commands like
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make dvi
  make pdf
  make html
  </pre></div>
  
  <p>to build the manuals in the corresponding formats, and
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make install-dvi
  make install-pdf
  make install-html
  </pre></div>
*************** make install-html
*** 167,186 ****
  <p>to install them.
  Alternatively, there are prebuilt online versions of the manuals for
  released versions of GCC on
! <a href="https://gcc.gnu.org/onlinedocs/">the GCC web site</a>.
  </p>
  <p>If you built GCC yourself we would like to know if the
! <a href="specific.html">host/target specific installation notes</a>
  didn&rsquo;t include your host/target information or if that information is
  incomplete or out of date.  Send a note to
! <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a> detailing how the information should be changed.
  </p>
  <p>If you find a bug, please report it following the
! <a href="../bugs/">bug reporting guidelines</a>.
  </p>
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 146,165 ----
  <p>to install them.
  Alternatively, there are prebuilt online versions of the manuals for
  released versions of GCC on
! <a class="uref" href="https://gcc.gnu.org/onlinedocs/">the GCC web site</a>.
  </p>
  <p>If you built GCC yourself we would like to know if the
! <a class="uref" href="specific.html">host/target specific installation notes</a>
  didn&rsquo;t include your host/target information or if that information is
  incomplete or out of date.  Send a note to
! <a class="email" href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a> detailing how the information should be changed.
  </p>
  <p>If you find a bug, please report it following the
! <a class="uref" href="../bugs/">bug reporting guidelines</a>.
  </p>
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/gfdl.html gcc-14.3.0-RC-20260619/INSTALL/gfdl.html
*** gcc-14.3.0/INSTALL/gfdl.html	Fri May 23 11:03:18 2025
--- gcc-14.3.0-RC-20260619/INSTALL/gfdl.html	Fri Jun 19 06:51:10 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: GNU Free Documentation License</title>
  
  <meta name="description" content="Installing GCC: GNU Free Documentation License">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,44 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
! div.center {text-align:center}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
! pre.display-preformatted {font-family: inherit}
! span:hover a.copiable-link {visibility: visible}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: GNU Free Documentation License</h1>
  
  
  
--- 46,51 ----
*************** ul.no-bullet {list-style: none}
*** 92,113 ****
  
  <h1 align="center">Installing GCC: GNU Free Documentation License</h1>
  
! <a name="index-FDL_002c-GNU-Free-Documentation-License"></a>
! <div align="center">Version 1.3, 3 November 2008
  </div>
  <div class="display">
! <pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
! <a href="https://www.fsf.org">https://www.fsf.org</a>
  
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
  </pre></div>
  
! <ol start="0">
  <li> PREAMBLE
  
  <p>The purpose of this License is to make a manual, textbook, or other
! functional and useful document <em>free</em> in the sense of freedom: to
  assure everyone the effective freedom to copy and redistribute it,
  with or without modifying it, either commercially or noncommercially.
  Secondarily, this License preserves for the author and publisher a way
--- 76,97 ----
  
  <h1 align="center">Installing GCC: GNU Free Documentation License</h1>
  
! <a class="index-entry-id" id="index-FDL_002c-GNU-Free-Documentation-License"></a>
! <div class="center">Version 1.3, 3 November 2008
  </div>
  <div class="display">
! <pre class="display-preformatted">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
! <a class="uref" href="https://www.fsf.org">https://www.fsf.org</a>
  
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
  </pre></div>
  
! <ol class="enumerate" start="0">
  <li> PREAMBLE
  
  <p>The purpose of this License is to make a manual, textbook, or other
! functional and useful document <em class="dfn">free</em> in the sense of freedom: to
  assure everyone the effective freedom to copy and redistribute it,
  with or without modifying it, either commercially or noncommercially.
  Secondarily, this License preserves for the author and publisher a way
*************** An image format is not Transparent if us
*** 181,196 ****
  of text.  A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
  </p>
  <p>Examples of suitable formats for Transparent copies include plain
! <small>ASCII</small> without markup, Texinfo input format, LaTeX input
! format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
! <acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
! PostScript or <acronym>PDF</acronym> designed for human modification.  Examples
! of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
! <acronym>JPG</acronym>.  Opaque formats include proprietary formats that can be
! read and edited only by proprietary word processors, <acronym>SGML</acronym> or
! <acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
! not generally available, and the machine-generated <acronym>HTML</acronym>,
! PostScript or <acronym>PDF</acronym> produced by some word processors for
  output purposes only.
  </p>
  <p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself,
--- 165,180 ----
  of text.  A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
  </p>
  <p>Examples of suitable formats for Transparent copies include plain
! <small class="sc">ASCII</small> without markup, Texinfo input format, LaTeX input
! format, <abbr class="acronym">SGML</abbr> or <abbr class="acronym">XML</abbr> using a publicly available
! <abbr class="acronym">DTD</abbr>, and standard-conforming simple <abbr class="acronym">HTML</abbr>,
! PostScript or <abbr class="acronym">PDF</abbr> designed for human modification.  Examples
! of transparent image formats include <abbr class="acronym">PNG</abbr>, <abbr class="acronym">XCF</abbr> and
! <abbr class="acronym">JPG</abbr>.  Opaque formats include proprietary formats that can be
! read and edited only by proprietary word processors, <abbr class="acronym">SGML</abbr> or
! <abbr class="acronym">XML</abbr> for which the <abbr class="acronym">DTD</abbr> and/or processing tools are
! not generally available, and the machine-generated <abbr class="acronym">HTML</abbr>,
! PostScript or <abbr class="acronym">PDF</abbr> produced by some word processors for
  output purposes only.
  </p>
  <p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself,
*************** Version filling the role of the Document
*** 279,285 ****
  and modification of the Modified Version to whoever possesses a copy
  of it.  In addition, you must do these things in the Modified Version:
  </p>
! <ol type="A" start="1">
  <li> Use in the Title Page (and on the covers, if any) a title distinct
  from that of the Document, and from those of previous versions
  (which should, if there were any, be listed in the History section
--- 263,269 ----
  and modification of the Modified Version to whoever possesses a copy
  of it.  In addition, you must do these things in the Modified Version:
  </p>
! <ol class="enumerate" type="A" start="1">
  <li> Use in the Title Page (and on the covers, if any) a title distinct
  from that of the Document, and from those of previous versions
  (which should, if there were any, be listed in the History section
*************** not give you any rights to use it.
*** 479,485 ****
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! <a href="https://www.gnu.org/copyleft/">https://www.gnu.org/copyleft/</a>.
  </p>
  <p>Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
--- 463,469 ----
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! <a class="uref" href="https://www.gnu.org/copyleft/">https://www.gnu.org/copyleft/</a>.
  </p>
  <p>Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
*************** provided the MMC is eligible for relicen
*** 525,555 ****
  </p>
  </li></ol>
  
! <a name="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></a>
! <h3 class="unnumberedsec">ADDENDUM: How to use this License for your documents</h3>
  
  <p>To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and
  license notices just after the title page:
  </p>
! <div class="smallexample">
! <pre class="smallexample">  Copyright (C)  <var>year</var>  <var>your name</var>.
    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 section entitled ``GNU
    Free Documentation License''.
! </pre></div>
  
  <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
  replace the &ldquo;with...Texts.&rdquo; line with this:
  </p>
! <div class="smallexample">
! <pre class="smallexample">    with the Invariant Sections being <var>list their titles</var>, with
!     the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
!     being <var>list</var>.
! </pre></div>
  
  <p>If you have Invariant Sections without Cover Texts, or some other
  combination of the three, merge those two alternatives to suit the
--- 509,539 ----
  </p>
  </li></ol>
  
! <div class="unnumberedsec-level-extent" id="ADDENDUM_003a-How-to-use-this-License-for-your-documents">
! <h3 class="unnumberedsec"><span>ADDENDUM: How to use this License for your documents<a class="copiable-link" href="#ADDENDUM_003a-How-to-use-this-License-for-your-documents"> &para;</a></span></h3>
  
  <p>To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and
  license notices just after the title page:
  </p>
! <div class="example smallexample">
! <div class="group"><pre class="example-preformatted">  Copyright (C)  <var class="var">year</var>  <var class="var">your name</var>.
    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 section entitled ``GNU
    Free Documentation License''.
! </pre></div></div>
  
  <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
  replace the &ldquo;with...Texts.&rdquo; line with this:
  </p>
! <div class="example smallexample">
! <div class="group"><pre class="example-preformatted">    with the Invariant Sections being <var class="var">list their titles</var>, with
!     the Front-Cover Texts being <var class="var">list</var>, and with the Back-Cover Texts
!     being <var class="var">list</var>.
! </pre></div></div>
  
  <p>If you have Invariant Sections without Cover Texts, or some other
  combination of the three, merge those two alternatives to suit the
*************** to permit their use in free software.
*** 563,572 ****
  
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
! <hr>
  
  
  
--- 547,556 ----
  
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
! </div>
  
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/index.html gcc-14.3.0-RC-20260619/INSTALL/index.html
*** gcc-14.3.0/INSTALL/index.html	Fri May 23 11:03:16 2025
--- gcc-14.3.0-RC-20260619/INSTALL/index.html	Fri Jun 19 06:51:09 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC</title>
  
  <meta name="description" content="Installing GCC">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,67 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
! <style type="text/css">
! <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
! div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
! -->
! </style>
  
  
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC</h1>
  
  
  
--- 29,41 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
! <meta name="viewport" content="width=device-width,initial-scale=1">
! 
  
  
  </head>
  
  <body lang="en">
  
  
  
*************** ul.no-bullet {list-style: none}
*** 83,89 ****
  
  
  <p>The latest version of this document is always available at
! <a href="https://gcc.gnu.org/install/">https://gcc.gnu.org/install/</a>.
  It refers to the current development sources, instructions for
  specific released versions are included with the sources.
  </p>
--- 57,63 ----
  
  
  <p>The latest version of this document is always available at
! <a class="uref" href="https://gcc.gnu.org/install/">https://gcc.gnu.org/install/</a>.
  It refers to the current development sources, instructions for
  specific released versions are included with the sources.
  </p>
*************** as detailing some target specific instal
*** 94,116 ****
  with their own installation instructions.  This document supersedes all
  package-specific installation instructions.
  </p>
! <p><em>Before</em> starting the build/install procedure please check the
! <a href="specific.html">host/target specific installation notes</a>.
  We recommend you browse the entire generic installation instructions before
  you proceed.
  </p>
  <p>The installation procedure itself is broken into five steps.
  </p>
! <ol>
! <li> <a href="prerequisites.html">Prerequisites</a>
! </li><li> <a href="download.html">Downloading the source</a>
! </li><li> <a href="configure.html">Configuration</a>
! </li><li> <a href="build.html">Building</a>
! </li><li> <a href="test.html">Testing</a> (optional)
! </li><li> <a href="finalinstall.html">Final install</a>
  </li></ol>
  
! <p>Please note that GCC does not support &lsquo;<samp>make uninstall</samp>&rsquo; and probably
  won&rsquo;t do so in the near future as this would open a can of worms.  Instead,
  we suggest that you install GCC into a directory of its own and simply
  remove that directory when you do not need that specific version of GCC
--- 68,90 ----
  with their own installation instructions.  This document supersedes all
  package-specific installation instructions.
  </p>
! <p><em class="emph">Before</em> starting the build/install procedure please check the
! <a class="uref" href="specific.html">host/target specific installation notes</a>.
  We recommend you browse the entire generic installation instructions before
  you proceed.
  </p>
  <p>The installation procedure itself is broken into five steps.
  </p>
! <ol class="enumerate">
! <li> <a class="uref" href="prerequisites.html">Prerequisites</a>
! </li><li> <a class="uref" href="download.html">Downloading the source</a>
! </li><li> <a class="uref" href="configure.html">Configuration</a>
! </li><li> <a class="uref" href="build.html">Building</a>
! </li><li> <a class="uref" href="test.html">Testing</a> (optional)
! </li><li> <a class="uref" href="finalinstall.html">Final install</a>
  </li></ol>
  
! <p>Please note that GCC does not support &lsquo;<samp class="samp">make uninstall</samp>&rsquo; and probably
  won&rsquo;t do so in the near future as this would open a can of worms.  Instead,
  we suggest that you install GCC into a directory of its own and simply
  remove that directory when you do not need that specific version of GCC
*************** more binaries exist that use them.
*** 119,125 ****
  </p>
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  <p>Copyright &copy; 1988-2024 Free Software Foundation, Inc.
  </p><br>
--- 93,99 ----
  </p>
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  <p>Copyright &copy; 1988-2024 Free Software Foundation, Inc.
  </p><br>
*************** under the terms of the GNU Free Document
*** 128,134 ****
  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 section entitled &ldquo;<a href="./gfdl.html">GNU
  Free Documentation License</a>&rdquo;.
  </p>
  <p>(a) The FSF&rsquo;s Front-Cover Text is:
--- 102,108 ----
  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 section entitled &ldquo;<a class="uref" href="./gfdl.html">GNU
  Free Documentation License</a>&rdquo;.
  </p>
  <p>(a) The FSF&rsquo;s Front-Cover Text is:
*************** Free Documentation License</a>&rdquo;.
*** 144,150 ****
  
  
  
- 
  
  
  
--- 118,123 ----
diff -Nrcpad gcc-14.3.0/INSTALL/prerequisites.html gcc-14.3.0-RC-20260619/INSTALL/prerequisites.html
*** gcc-14.3.0/INSTALL/prerequisites.html	Fri May 23 11:03:17 2025
--- gcc-14.3.0-RC-20260619/INSTALL/prerequisites.html	Fri Jun 19 06:51:09 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Prerequisites for GCC</title>
  
  <meta name="description" content="Prerequisites for GCC">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
! div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,40 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
! span:hover a.copiable-link {visibility: visible}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Prerequisites for GCC</h1>
  
  
  
--- 42,47 ----
*************** ul.no-bullet {list-style: none}
*** 82,96 ****
  
  
  
! <a name="index-Prerequisites"></a>
  
  <p>GCC requires that various tools and packages be available for use in the
  build procedure.  Modifying GCC sources requires additional tools
  described below.
  </p>
! <a name="Tools_002fpackages-necessary-for-building-GCC"></a>
! <h3 class="heading">Tools/packages necessary for building GCC</h3>
! <dl compact="compact">
  <dt>ISO C++11 compiler</dt>
  <dd><p>Necessary to bootstrap GCC.  GCC 4.8.3 or newer has sufficient
  support for used C++11 features, with earlier GCC versions you
--- 62,75 ----
  
  
  
! <a class="index-entry-id" id="index-Prerequisites"></a>
  
  <p>GCC requires that various tools and packages be available for use in the
  build procedure.  Modifying GCC sources requires additional tools
  described below.
  </p>
! <h3 class="heading" id="Tools_002fpackages-necessary-for-building-GCC"><span>Tools/packages necessary for building GCC<a class="copiable-link" href="#Tools_002fpackages-necessary-for-building-GCC"> &para;</a></span></h3>
! <dl class="table">
  <dt>ISO C++11 compiler</dt>
  <dd><p>Necessary to bootstrap GCC.  GCC 4.8.3 or newer has sufficient
  support for used C++11 features, with earlier GCC versions you
*************** frontends other than C might use GCC ext
*** 113,142 ****
  for all target variants for which target libraries will be built (and not
  only the variant of the host C++ compiler).
  </p>
! <p>This affects the popular &lsquo;<samp>x86_64-pc-linux-gnu</samp>&rsquo; platform (among
! other multilib targets), for which 64-bit (&lsquo;<samp>x86_64</samp>&rsquo;) and 32-bit
! (&lsquo;<samp>i386</samp>&rsquo;) libc headers are usually packaged separately. If you do a
! build of a native compiler on &lsquo;<samp>x86_64-pc-linux-gnu</samp>&rsquo;, make sure you
  either have the 32-bit libc developer package properly installed (the exact
  name of the package depends on your distro) or you must build GCC as a
  64-bit only compiler by configuring with the option
! <samp>--disable-multilib</samp>.  Otherwise, you may encounter an error such as
! &lsquo;<samp>fatal error: gnu/stubs-32.h: No such file</samp>&rsquo;
  </p>
  </dd>
  <dt>Python</dt>
! <dd><p>If you configure a RISC-V compiler with the option <samp>--with-arch</samp> and
  the specified architecture string is non-canonical, then you will need
! <code>python</code> installed on the build system.
  </p>
  </dd>
! <dt><a name="GNAT-prerequisite"></a>GNAT</dt>
  <dd>
  <p>In order to build GNAT, the Ada compiler, you need a working GNAT
  compiler (GCC version 5.1 or later).
  </p>
! <p>This includes GNAT tools such as <code>gnatmake</code> and
! <code>gnatlink</code>, since the Ada front end is written in Ada and
  uses some GNAT-specific extensions.
  </p>
  <p>In order to build a cross compiler, it is strongly recommended to install
--- 92,121 ----
  for all target variants for which target libraries will be built (and not
  only the variant of the host C++ compiler).
  </p>
! <p>This affects the popular &lsquo;<samp class="samp">x86_64-pc-linux-gnu</samp>&rsquo; platform (among
! other multilib targets), for which 64-bit (&lsquo;<samp class="samp">x86_64</samp>&rsquo;) and 32-bit
! (&lsquo;<samp class="samp">i386</samp>&rsquo;) libc headers are usually packaged separately. If you do a
! build of a native compiler on &lsquo;<samp class="samp">x86_64-pc-linux-gnu</samp>&rsquo;, make sure you
  either have the 32-bit libc developer package properly installed (the exact
  name of the package depends on your distro) or you must build GCC as a
  64-bit only compiler by configuring with the option
! <samp class="option">--disable-multilib</samp>.  Otherwise, you may encounter an error such as
! &lsquo;<samp class="samp">fatal error: gnu/stubs-32.h: No such file</samp>&rsquo;
  </p>
  </dd>
  <dt>Python</dt>
! <dd><p>If you configure a RISC-V compiler with the option <samp class="option">--with-arch</samp> and
  the specified architecture string is non-canonical, then you will need
! <code class="command">python</code> installed on the build system.
  </p>
  </dd>
! <dt><a class="anchor" id="GNAT-prerequisite"></a>GNAT</dt>
  <dd>
  <p>In order to build GNAT, the Ada compiler, you need a working GNAT
  compiler (GCC version 5.1 or later).
  </p>
! <p>This includes GNAT tools such as <code class="command">gnatmake</code> and
! <code class="command">gnatlink</code>, since the Ada front end is written in Ada and
  uses some GNAT-specific extensions.
  </p>
  <p>In order to build a cross compiler, it is strongly recommended to install
*************** build.
*** 149,170 ****
  GNAT. More recent versions of GNAT than the version built are not guaranteed
  to work and will often fail during the build with compilation errors.
  </p>
! <p>Note that <code>configure</code> does not test whether the GNAT installation works
  and has a sufficiently recent version; if too old a GNAT version is
! installed and <samp>--enable-languages=ada</samp> is used, the build will fail.
  </p>
! <p><code>ADA_INCLUDE_PATH</code> and <code>ADA_OBJECT_PATH</code> environment variables
  must not be set when building the Ada compiler, the Ada tools, or the
  Ada runtime libraries. You can check that your build environment is clean
! by verifying that &lsquo;<samp>gnatls -v</samp>&rsquo; lists only one explicit path in each
  section.
  </p>
  </dd>
! <dt><a name="GDC-prerequisite"></a>GDC</dt>
  <dd>
  <p>In order to build GDC, the D compiler, you need a working GDC
  compiler (GCC version 9.4 or later) and D runtime library,
! &lsquo;<samp>libphobos</samp>&rsquo;, as the D front end is written in D.
  </p>
  <p>Versions of GDC prior to 12 can be built with an ISO C++11 compiler, which can
  then be installed and used to bootstrap newer versions of the D front end.
--- 128,149 ----
  GNAT. More recent versions of GNAT than the version built are not guaranteed
  to work and will often fail during the build with compilation errors.
  </p>
! <p>Note that <code class="command">configure</code> does not test whether the GNAT installation works
  and has a sufficiently recent version; if too old a GNAT version is
! installed and <samp class="option">--enable-languages=ada</samp> is used, the build will fail.
  </p>
! <p><code class="env">ADA_INCLUDE_PATH</code> and <code class="env">ADA_OBJECT_PATH</code> environment variables
  must not be set when building the Ada compiler, the Ada tools, or the
  Ada runtime libraries. You can check that your build environment is clean
! by verifying that &lsquo;<samp class="samp">gnatls -v</samp>&rsquo; lists only one explicit path in each
  section.
  </p>
  </dd>
! <dt><a class="anchor" id="GDC-prerequisite"></a>GDC</dt>
  <dd>
  <p>In order to build GDC, the D compiler, you need a working GDC
  compiler (GCC version 9.4 or later) and D runtime library,
! &lsquo;<samp class="samp">libphobos</samp>&rsquo;, as the D front end is written in D.
  </p>
  <p>Versions of GDC prior to 12 can be built with an ISO C++11 compiler, which can
  then be installed and used to bootstrap newer versions of the D front end.
*************** recent versions of GDC than the version
*** 174,214 ****
  will often fail during the build with compilation errors relating to
  deprecations or removed features.
  </p>
! <p>Note that <code>configure</code> does not test whether the GDC installation works
  and has a sufficiently recent version.  Though the implementation of the D
  front end does not make use of any GDC-specific extensions, or novel features
  of the D language, if too old a GDC version is installed and
! <samp>--enable-languages=d</samp> is used, the build will fail.
  </p>
! <p>On some targets, &lsquo;<samp>libphobos</samp>&rsquo; isn&rsquo;t enabled by default, but compiles
! and works if <samp>--enable-libphobos</samp> is used.  Specifics are
  documented for affected targets.
  </p>
  </dd>
! <dt><a name="GM2-prerequisite"></a>GM2</dt>
  <dd>
  <p>Python3 is required if you want to build the complete Modula-2
! documentation including the target <code>SYSTEM</code> definition module.
  If Python3 is unavailable Modula-2 documentation will include a target
  independent version of the SYSTEM modules.
  </p>
  </dd>
  <dt>A &ldquo;working&rdquo; POSIX compatible shell, or GNU bash</dt>
  <dd>
! <p>Necessary when running <code>configure</code> because some
! <code>/bin/sh</code> shells have bugs and may crash when configuring the
! target libraries.  In other cases, <code>/bin/sh</code> or <code>ksh</code>
  have disastrous corner-case performance problems.  This
! can cause target <code>configure</code> runs to literally take days to
  complete in some cases.
  </p>
! <p>So on some platforms <code>/bin/ksh</code> is sufficient, on others it
  isn&rsquo;t.  See the host/target specific instructions for your platform, or
! use <code>bash</code> to be sure.  Then set <code>CONFIG_SHELL</code> in your
  environment to your &ldquo;good&rdquo; shell prior to running
! <code>configure</code>/<code>make</code>.
  </p>
! <p><code>zsh</code> is not a fully compliant POSIX shell and will not
  work when configuring GCC.
  </p>
  </dd>
--- 153,193 ----
  will often fail during the build with compilation errors relating to
  deprecations or removed features.
  </p>
! <p>Note that <code class="command">configure</code> does not test whether the GDC installation works
  and has a sufficiently recent version.  Though the implementation of the D
  front end does not make use of any GDC-specific extensions, or novel features
  of the D language, if too old a GDC version is installed and
! <samp class="option">--enable-languages=d</samp> is used, the build will fail.
  </p>
! <p>On some targets, &lsquo;<samp class="samp">libphobos</samp>&rsquo; isn&rsquo;t enabled by default, but compiles
! and works if <samp class="option">--enable-libphobos</samp> is used.  Specifics are
  documented for affected targets.
  </p>
  </dd>
! <dt><a class="anchor" id="GM2-prerequisite"></a>GM2</dt>
  <dd>
  <p>Python3 is required if you want to build the complete Modula-2
! documentation including the target <code class="code">SYSTEM</code> definition module.
  If Python3 is unavailable Modula-2 documentation will include a target
  independent version of the SYSTEM modules.
  </p>
  </dd>
  <dt>A &ldquo;working&rdquo; POSIX compatible shell, or GNU bash</dt>
  <dd>
! <p>Necessary when running <code class="command">configure</code> because some
! <code class="command">/bin/sh</code> shells have bugs and may crash when configuring the
! target libraries.  In other cases, <code class="command">/bin/sh</code> or <code class="command">ksh</code>
  have disastrous corner-case performance problems.  This
! can cause target <code class="command">configure</code> runs to literally take days to
  complete in some cases.
  </p>
! <p>So on some platforms <code class="command">/bin/ksh</code> is sufficient, on others it
  isn&rsquo;t.  See the host/target specific instructions for your platform, or
! use <code class="command">bash</code> to be sure.  Then set <code class="env">CONFIG_SHELL</code> in your
  environment to your &ldquo;good&rdquo; shell prior to running
! <code class="command">configure</code>/<code class="command">make</code>.
  </p>
! <p><code class="command">zsh</code> is not a fully compliant POSIX shell and will not
  work when configuring GCC.
  </p>
  </dd>
*************** with GNU libtool that includes doing a b
*** 237,243 ****
  <dt>gzip version 1.2.4 (or later) or</dt>
  <dt>bzip2 version 1.0.2 (or later)</dt>
  <dd>
! <p>Necessary to uncompress GCC <code>tar</code> files when source code is
  obtained via HTTPS mirror sites.
  </p>
  </dd>
--- 216,222 ----
  <dt>gzip version 1.2.4 (or later) or</dt>
  <dt>bzip2 version 1.0.2 (or later)</dt>
  <dd>
! <p>Necessary to uncompress GCC <code class="command">tar</code> files when source code is
  obtained via HTTPS mirror sites.
  </p>
  </dd>
*************** obtained via HTTPS mirror sites.
*** 249,276 ****
  <dt>GNU tar version 1.14 (or later)</dt>
  <dd>
  <p>Necessary (only on some platforms) to untar the source code.  Many
! systems&rsquo; <code>tar</code> programs will also work, only try GNU
! <code>tar</code> if you have problems.
  </p>
  </dd>
  <dt>Perl version 5.6.1 (or later)</dt>
  <dd>
! <p>Necessary when targeting Darwin, building &lsquo;<samp>libstdc++</samp>&rsquo;,
! and not using <samp>--disable-symvers</samp>.
! Necessary when targeting Solaris with Solaris <code>ld</code> and not using
! <samp>--disable-symvers</samp>.
  </p>
! <p>Necessary when regenerating <samp>Makefile</samp> dependencies in libiberty.
! Necessary when regenerating <samp>libiberty/functions.texi</samp>.
  Necessary when generating manpages from Texinfo manuals.
  Used by various scripts to generate some files included in the source
  repository (mainly Unicode-related and rarely changing) from source
  tables.
  </p>
! <p>Used by <code>automake</code>.
  </p>
! <p>If available, enables parallel testing of &lsquo;<samp>libgomp</samp>&rsquo; in case that
! <code>flock</code> is not available.
  </p>
  </dd>
  </dl>
--- 228,255 ----
  <dt>GNU tar version 1.14 (or later)</dt>
  <dd>
  <p>Necessary (only on some platforms) to untar the source code.  Many
! systems&rsquo; <code class="command">tar</code> programs will also work, only try GNU
! <code class="command">tar</code> if you have problems.
  </p>
  </dd>
  <dt>Perl version 5.6.1 (or later)</dt>
  <dd>
! <p>Necessary when targeting Darwin, building &lsquo;<samp class="samp">libstdc++</samp>&rsquo;,
! and not using <samp class="option">--disable-symvers</samp>.
! Necessary when targeting Solaris with Solaris <code class="command">ld</code> and not using
! <samp class="option">--disable-symvers</samp>.
  </p>
! <p>Necessary when regenerating <samp class="file">Makefile</samp> dependencies in libiberty.
! Necessary when regenerating <samp class="file">libiberty/functions.texi</samp>.
  Necessary when generating manpages from Texinfo manuals.
  Used by various scripts to generate some files included in the source
  repository (mainly Unicode-related and rarely changing) from source
  tables.
  </p>
! <p>Used by <code class="command">automake</code>.
  </p>
! <p>If available, enables parallel testing of &lsquo;<samp class="samp">libgomp</samp>&rsquo; in case that
! <code class="command">flock</code> is not available.
  </p>
  </dd>
  </dl>
*************** newer versions, though.  If your OS vend
*** 284,299 ****
  support libraries then using those packages may be the simplest way to
  install the libraries.
  </p>
! <dl compact="compact">
  <dt>GNU Multiple Precision Library (GMP) version 4.3.2 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a href="https://gmplib.org/">https://gmplib.org/</a>.  If a GMP source distribution is found in a
! subdirectory of your GCC sources named <samp>gmp</samp>, it will be built
  together with GCC.  Alternatively, if GMP is already installed but it
  is not in your library search path, you will have to configure with the
! <samp>--with-gmp</samp> configure option.  See also <samp>--with-gmp-lib</samp>
! and <samp>--with-gmp-include</samp>.
  The in-tree build is only supported with the GMP version that
  download_prerequisites installs.
  </p>
--- 263,278 ----
  support libraries then using those packages may be the simplest way to
  install the libraries.
  </p>
! <dl class="table">
  <dt>GNU Multiple Precision Library (GMP) version 4.3.2 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a class="uref" href="https://gmplib.org/">https://gmplib.org/</a>.  If a GMP source distribution is found in a
! subdirectory of your GCC sources named <samp class="file">gmp</samp>, it will be built
  together with GCC.  Alternatively, if GMP is already installed but it
  is not in your library search path, you will have to configure with the
! <samp class="option">--with-gmp</samp> configure option.  See also <samp class="option">--with-gmp-lib</samp>
! and <samp class="option">--with-gmp-include</samp>.
  The in-tree build is only supported with the GMP version that
  download_prerequisites installs.
  </p>
*************** download_prerequisites installs.
*** 301,312 ****
  <dt>MPFR Library version 3.1.0 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a href="https://www.mpfr.org">https://www.mpfr.org</a>.  If an MPFR source distribution is found
! in a subdirectory of your GCC sources named <samp>mpfr</samp>, it will be
  built together with GCC.  Alternatively, if MPFR is already installed
  but it is not in your default library search path, the
! <samp>--with-mpfr</samp> configure option should be used.  See also
! <samp>--with-mpfr-lib</samp> and <samp>--with-mpfr-include</samp>.
  The in-tree build is only supported with the MPFR version that
  download_prerequisites installs.
  </p>
--- 280,291 ----
  <dt>MPFR Library version 3.1.0 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a class="uref" href="https://www.mpfr.org">https://www.mpfr.org</a>.  If an MPFR source distribution is found
! in a subdirectory of your GCC sources named <samp class="file">mpfr</samp>, it will be
  built together with GCC.  Alternatively, if MPFR is already installed
  but it is not in your default library search path, the
! <samp class="option">--with-mpfr</samp> configure option should be used.  See also
! <samp class="option">--with-mpfr-lib</samp> and <samp class="option">--with-mpfr-include</samp>.
  The in-tree build is only supported with the MPFR version that
  download_prerequisites installs.
  </p>
*************** download_prerequisites installs.
*** 314,325 ****
  <dt>MPC Library version 1.0.1 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a href="https://www.multiprecision.org/mpc/">https://www.multiprecision.org/mpc/</a>.  If an MPC source distribution
! is found in a subdirectory of your GCC sources named <samp>mpc</samp>, it
  will be built together with GCC.  Alternatively, if MPC is already
  installed but it is not in your default library search path, the
! <samp>--with-mpc</samp> configure option should be used.  See also
! <samp>--with-mpc-lib</samp> and <samp>--with-mpc-include</samp>.
  The in-tree build is only supported with the MPC version that
  download_prerequisites installs.
  </p>
--- 293,304 ----
  <dt>MPC Library version 1.0.1 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a class="uref" href="https://www.multiprecision.org/mpc/">https://www.multiprecision.org/mpc/</a>.  If an MPC source distribution
! is found in a subdirectory of your GCC sources named <samp class="file">mpc</samp>, it
  will be built together with GCC.  Alternatively, if MPC is already
  installed but it is not in your default library search path, the
! <samp class="option">--with-mpc</samp> configure option should be used.  See also
! <samp class="option">--with-mpc-lib</samp> and <samp class="option">--with-mpc-include</samp>.
  The in-tree build is only supported with the MPC version that
  download_prerequisites installs.
  </p>
*************** download_prerequisites installs.
*** 327,336 ****
  <dt>isl Library version 0.15 or later.</dt>
  <dd>
  <p>Necessary to build GCC with the Graphite loop optimizations.
! It can be downloaded from <a href="https://gcc.gnu.org/pub/gcc/infrastructure/">https://gcc.gnu.org/pub/gcc/infrastructure/</a>.
  If an isl source distribution is found
! in a subdirectory of your GCC sources named <samp>isl</samp>, it will be
! built together with GCC.  Alternatively, the <samp>--with-isl</samp> configure
  option should be used if isl is not installed in your default library
  search path.
  </p>
--- 306,315 ----
  <dt>isl Library version 0.15 or later.</dt>
  <dd>
  <p>Necessary to build GCC with the Graphite loop optimizations.
! It can be downloaded from <a class="uref" href="https://gcc.gnu.org/pub/gcc/infrastructure/">https://gcc.gnu.org/pub/gcc/infrastructure/</a>.
  If an isl source distribution is found
! in a subdirectory of your GCC sources named <samp class="file">isl</samp>, it will be
! built together with GCC.  Alternatively, the <samp class="option">--with-isl</samp> configure
  option should be used if isl is not installed in your default library
  search path.
  </p>
*************** search path.
*** 339,345 ****
  <dd>
  <p>Necessary to build GCC with zstd compression used for LTO bytecode.
  The library is searched in your default library patch search.
! Alternatively, the <samp>--with-zstd</samp> configure option should be used.
  </p>
  </dd>
  <dt>Python3 modules</dt>
--- 318,324 ----
  <dd>
  <p>Necessary to build GCC with zstd compression used for LTO bytecode.
  The library is searched in your default library patch search.
! Alternatively, the <samp class="option">--with-zstd</samp> configure option should be used.
  </p>
  </dd>
  <dt>Python3 modules</dt>
*************** Alternatively, the <samp>--with-zstd</sa
*** 347,385 ****
  <p>The complete list of Python3 modules broken down by GCC subcomponent
  is shown below:
  </p>
! <dl compact="compact">
  <dt>internal debugging in gdbhooks</dt>
! <dd><p><code>gdb</code>, <code>gdb.printing</code>, <code>gdb.types</code>,
! <code>os.path</code>, <code>re</code>, <code>sys</code> and <code>tempfile</code>,
  </p>
  </dd>
  <dt>g++ testsuite</dt>
! <dd><p><code>gcov</code>, <code>gzip</code>, <code>json</code>, <code>os</code> and <code>pytest</code>.
  </p>
  </dd>
  <dt>SARIF testsuite</dt>
! <dd><p>Tests of SARIF output will use the <code>check-jsonschema</code> program from
! the <code>check-jsonschema</code> module (if available) to validate generated
  .sarif files.  If this tool is not found, the validation parts of those
  tests are skipped.
  </p>
  </dd>
  <dt>c++ cxx api generation</dt>
! <dd><p><code>csv</code>, <code>os</code>, <code>sys</code> and <code>time</code>.
  </p>
  </dd>
  <dt>modula-2 documentation</dt>
! <dd><p><code>argparse</code>, <code>os</code>, <code>pathlib</code>, <code>shutil</code> and
! <code>sys</code>.
  </p>
  </dd>
  <dt>git developer tools</dt>
! <dd><p><code>os</code> and <code>sys</code>.
  </p>
  </dd>
  <dt>ada documentation</dt>
! <dd><p><code>latex_elements</code>, <code>os</code>, <code>pygments</code>, <code>re</code>,
! <code>sys</code> and <code>time</code>.
  </p></dd>
  </dl>
  
--- 326,364 ----
  <p>The complete list of Python3 modules broken down by GCC subcomponent
  is shown below:
  </p>
! <dl class="table">
  <dt>internal debugging in gdbhooks</dt>
! <dd><p><code class="code">gdb</code>, <code class="code">gdb.printing</code>, <code class="code">gdb.types</code>,
! <code class="code">os.path</code>, <code class="code">re</code>, <code class="code">sys</code> and <code class="code">tempfile</code>,
  </p>
  </dd>
  <dt>g++ testsuite</dt>
! <dd><p><code class="code">gcov</code>, <code class="code">gzip</code>, <code class="code">json</code>, <code class="code">os</code> and <code class="code">pytest</code>.
  </p>
  </dd>
  <dt>SARIF testsuite</dt>
! <dd><p>Tests of SARIF output will use the <code class="code">check-jsonschema</code> program from
! the <code class="code">check-jsonschema</code> module (if available) to validate generated
  .sarif files.  If this tool is not found, the validation parts of those
  tests are skipped.
  </p>
  </dd>
  <dt>c++ cxx api generation</dt>
! <dd><p><code class="code">csv</code>, <code class="code">os</code>, <code class="code">sys</code> and <code class="code">time</code>.
  </p>
  </dd>
  <dt>modula-2 documentation</dt>
! <dd><p><code class="code">argparse</code>, <code class="code">os</code>, <code class="code">pathlib</code>, <code class="code">shutil</code> and
! <code class="code">sys</code>.
  </p>
  </dd>
  <dt>git developer tools</dt>
! <dd><p><code class="code">os</code> and <code class="code">sys</code>.
  </p>
  </dd>
  <dt>ada documentation</dt>
! <dd><p><code class="code">latex_elements</code>, <code class="code">os</code>, <code class="code">pygments</code>, <code class="code">re</code>,
! <code class="code">sys</code> and <code class="code">time</code>.
  </p></dd>
  </dl>
  
*************** tests are skipped.
*** 387,395 ****
  <dt>GNU gettext</dt>
  <dd>
  <p>Necessary to build GCC with internationalization support via
! <samp>--enable-nls</samp>.  It can be downloaded from
! <a href="https://www.gnu.org/software/gettext/">https://www.gnu.org/software/gettext/</a>. If a GNU gettext distribution
! is found in a subdirectory of your GCC sources named <samp>gettext</samp>, it
  will be built together with GCC, unless present in the system (either in
  libc or as a stand-alone library).
  </p>
--- 366,374 ----
  <dt>GNU gettext</dt>
  <dd>
  <p>Necessary to build GCC with internationalization support via
! <samp class="option">--enable-nls</samp>.  It can be downloaded from
! <a class="uref" href="https://www.gnu.org/software/gettext/">https://www.gnu.org/software/gettext/</a>. If a GNU gettext distribution
! is found in a subdirectory of your GCC sources named <samp class="file">gettext</samp>, it
  will be built together with GCC, unless present in the system (either in
  libc or as a stand-alone library).
  </p>
*************** libc or as a stand-alone library).
*** 398,421 ****
  </dd>
  </dl>
  
! <a name="Tools_002fpackages-necessary-for-modifying-GCC"></a>
! <h3 class="heading">Tools/packages necessary for modifying GCC</h3>
! <dl compact="compact">
  <dt>autoconf version 2.69</dt>
  <dt>GNU m4 version 1.4.6 (or later)</dt>
  <dd>
! <p>Necessary when modifying <samp>configure.ac</samp>, <samp>aclocal.m4</samp>, etc.
! to regenerate <samp>configure</samp> and <samp>config.in</samp> files.
  </p>
  </dd>
  <dt>automake version 1.15.1</dt>
  <dd>
! <p>Necessary when modifying a <samp>Makefile.am</samp> file to regenerate its
! associated <samp>Makefile.in</samp>.
  </p>
! <p>Much of GCC does not use automake, so directly edit the <samp>Makefile.in</samp>
! file.  Specifically this applies to the <samp>gcc</samp>, <samp>intl</samp>,
! <samp>libcpp</samp>, <samp>libiberty</samp>, <samp>libobjc</samp> directories as well
  as any of their subdirectories.
  </p>
  <p>For directories that use automake, GCC requires the latest release in
--- 377,399 ----
  </dd>
  </dl>
  
! <h3 class="heading" id="Tools_002fpackages-necessary-for-modifying-GCC"><span>Tools/packages necessary for modifying GCC<a class="copiable-link" href="#Tools_002fpackages-necessary-for-modifying-GCC"> &para;</a></span></h3>
! <dl class="table">
  <dt>autoconf version 2.69</dt>
  <dt>GNU m4 version 1.4.6 (or later)</dt>
  <dd>
! <p>Necessary when modifying <samp class="file">configure.ac</samp>, <samp class="file">aclocal.m4</samp>, etc.
! to regenerate <samp class="file">configure</samp> and <samp class="file">config.in</samp> files.
  </p>
  </dd>
  <dt>automake version 1.15.1</dt>
  <dd>
! <p>Necessary when modifying a <samp class="file">Makefile.am</samp> file to regenerate its
! associated <samp class="file">Makefile.in</samp>.
  </p>
! <p>Much of GCC does not use automake, so directly edit the <samp class="file">Makefile.in</samp>
! file.  Specifically this applies to the <samp class="file">gcc</samp>, <samp class="file">intl</samp>,
! <samp class="file">libcpp</samp>, <samp class="file">libiberty</samp>, <samp class="file">libobjc</samp> directories as well
  as any of their subdirectories.
  </p>
  <p>For directories that use automake, GCC requires the latest release in
*************** to the latest released version.
*** 426,439 ****
  </dd>
  <dt>gettext version 0.14.5 (or later)</dt>
  <dd>
! <p>Needed to regenerate <samp>gcc.pot</samp>.
  </p>
  </dd>
  <dt>gperf version 2.7.2 (or later)</dt>
  <dd>
! <p>Necessary when modifying <code>gperf</code> input files, e.g.
! <samp>gcc/cp/cfns.gperf</samp> to regenerate its associated header file, e.g.
! <samp>gcc/cp/cfns.h</samp>.
  </p>
  </dd>
  <dt>DejaGnu version 1.5.3 (or later)</dt>
--- 404,417 ----
  </dd>
  <dt>gettext version 0.14.5 (or later)</dt>
  <dd>
! <p>Needed to regenerate <samp class="file">gcc.pot</samp>.
  </p>
  </dd>
  <dt>gperf version 2.7.2 (or later)</dt>
  <dd>
! <p>Necessary when modifying <code class="command">gperf</code> input files, e.g.
! <samp class="file">gcc/cp/cfns.gperf</samp> to regenerate its associated header file, e.g.
! <samp class="file">gcc/cp/cfns.h</samp>.
  </p>
  </dd>
  <dt>DejaGnu version 1.5.3 (or later)</dt>
*************** details.
*** 447,466 ****
  <dt>autogen version 5.5.4 (or later) and</dt>
  <dt>guile version 1.4.1 (or later)</dt>
  <dd>
! <p>Necessary to regenerate <samp>fixinc/fixincl.x</samp> from
! <samp>fixinc/inclhack.def</samp> and <samp>fixinc/*.tpl</samp>.
  </p>
! <p>Necessary to run &lsquo;<samp>make check</samp>&rsquo; for <samp>fixinc</samp>.
  </p>
! <p>Necessary to regenerate the top level <samp>Makefile.in</samp> file from
! <samp>Makefile.tpl</samp> and <samp>Makefile.def</samp>.
  </p>
! <p>Necessary to regenerate the <samp>bits/version.h</samp> header for libstdc++.
  </p>
  </dd>
  <dt>Flex version 2.5.4 (or later)</dt>
  <dd>
! <p>Necessary when modifying <samp>*.l</samp> files.
  </p>
  <p>Necessary to build GCC during development because the generated output
  files are not included in the version-controlled source repository.
--- 425,444 ----
  <dt>autogen version 5.5.4 (or later) and</dt>
  <dt>guile version 1.4.1 (or later)</dt>
  <dd>
! <p>Necessary to regenerate <samp class="file">fixinc/fixincl.x</samp> from
! <samp class="file">fixinc/inclhack.def</samp> and <samp class="file">fixinc/*.tpl</samp>.
  </p>
! <p>Necessary to run &lsquo;<samp class="samp">make check</samp>&rsquo; for <samp class="file">fixinc</samp>.
  </p>
! <p>Necessary to regenerate the top level <samp class="file">Makefile.in</samp> file from
! <samp class="file">Makefile.tpl</samp> and <samp class="file">Makefile.def</samp>.
  </p>
! <p>Necessary to regenerate the <samp class="file">bits/version.h</samp> header for libstdc++.
  </p>
  </dd>
  <dt>Flex version 2.5.4 (or later)</dt>
  <dd>
! <p>Necessary when modifying <samp class="file">*.l</samp> files.
  </p>
  <p>Necessary to build GCC during development because the generated output
  files are not included in the version-controlled source repository.
*************** They are included in releases.
*** 469,480 ****
  </dd>
  <dt>Texinfo version 4.7 (or later)</dt>
  <dd>
! <p>Necessary for running <code>makeinfo</code> when modifying <samp>*.texi</samp>
  files to test your changes.
  </p>
! <p>Necessary for running <code>make dvi</code>, <code>make pdf</code>,
! or <code>make html</code> to create formatted documentation.  Texinfo version
! 4.8 or later is required for <code>make pdf</code>.
  </p>
  <p>Necessary to build GCC documentation in info format during development
  because the generated output files are not included in the repository.
--- 447,458 ----
  </dd>
  <dt>Texinfo version 4.7 (or later)</dt>
  <dd>
! <p>Necessary for running <code class="command">makeinfo</code> when modifying <samp class="file">*.texi</samp>
  files to test your changes.
  </p>
! <p>Necessary for running <code class="command">make dvi</code>, <code class="command">make pdf</code>,
! or <code class="command">make html</code> to create formatted documentation.  Texinfo version
! 4.8 or later is required for <code class="command">make pdf</code>.
  </p>
  <p>Necessary to build GCC documentation in info format during development
  because the generated output files are not included in the repository.
*************** the generated manuals.
*** 491,505 ****
  </dd>
  <dt>TeX (any working version)</dt>
  <dd>
! <p>Necessary for running <code>texi2dvi</code> and <code>texi2pdf</code>, which
! are used when running <code>make dvi</code> or <code>make pdf</code> to create
  DVI or PDF files, respectively.
  </p>
  </dd>
  <dt>Sphinx version 1.0 (or later)</dt>
  <dd>
! <p>Necessary to regenerate <samp>jit/docs/_build/texinfo</samp> from the <samp>.rst</samp>
! files in the directories below <samp>jit/docs</samp>.
  </p>
  </dd>
  <dt>git (any version)</dt>
--- 469,483 ----
  </dd>
  <dt>TeX (any working version)</dt>
  <dd>
! <p>Necessary for running <code class="command">texi2dvi</code> and <code class="command">texi2pdf</code>, which
! are used when running <code class="command">make dvi</code> or <code class="command">make pdf</code> to create
  DVI or PDF files, respectively.
  </p>
  </dd>
  <dt>Sphinx version 1.0 (or later)</dt>
  <dd>
! <p>Necessary to regenerate <samp class="file">jit/docs/_build/texinfo</samp> from the <samp class="file">.rst</samp>
! files in the directories below <samp class="file">jit/docs</samp>.
  </p>
  </dd>
  <dt>git (any version)</dt>
*************** snapshots of the development sources are
*** 516,522 ****
  </dd>
  <dt>patch version 2.5.4 (or later)</dt>
  <dd>
! <p>Necessary when applying patches, created with <code>diff</code>, to one&rsquo;s
  own sources.
  </p>
  </dd>
--- 494,500 ----
  </dd>
  <dt>patch version 2.5.4 (or later)</dt>
  <dd>
! <p>Necessary when applying patches, created with <code class="command">diff</code>, to one&rsquo;s
  own sources.
  </p>
  </dd>
*************** own sources.
*** 524,530 ****
  
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 502,508 ----
  
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/specific.html gcc-14.3.0-RC-20260619/INSTALL/specific.html
*** gcc-14.3.0/INSTALL/specific.html	Fri May 23 11:03:16 2025
--- gcc-14.3.0-RC-20260619/INSTALL/specific.html	Fri Jun 19 06:51:09 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Host/Target specific installation notes for GCC</title>
  
  <meta name="description" content="Host/Target specific installation notes for GCC">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,42 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
  div.example {margin-left: 3.2em}
! span:hover a.copiable-link {visibility: visible}
! ul.mark-bullet {list-style-type: disc}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Host/Target specific installation notes for GCC</h1>
  
  
  
--- 44,49 ----
*************** ul.no-bullet {list-style: none}
*** 89,337 ****
  
  
  
! <a name="index-Specific"></a>
! <a name="index-Specific-installation-notes"></a>
! <a name="index-Target-specific-installation"></a>
! <a name="index-Host-specific-installation"></a>
! <a name="index-Target-specific-installation-notes"></a>
  
! <p>Please read this document carefully <em>before</em> installing the
  GNU Compiler Collection on your machine.
  </p>
! <p>Note that this list of install notes is <em>not</em> a list of supported
  hosts or targets.  Not all supported hosts and targets are listed
  here, only the ones that require host-specific or target-specific
  information have to. 
  </p>
! <ul>
! <li> <a href="#aarch64-x-x">aarch64*-*-*</a>
! </li><li> <a href="#amdgcn-x-amdhsa">amdgcn-*-amdhsa</a>
! </li><li> <a href="#amd64-x-solaris2">amd64-*-solaris2*</a>
! </li><li> <a href="#arc-x-elf32">arc-*-elf32</a>
! </li><li> <a href="#arc-linux-uclibc">arc-linux-uclibc</a>
! </li><li> <a href="#arm-x-eabi">arm-*-eabi</a>
! </li><li> <a href="#avr">avr</a>
! </li><li> <a href="#bfin">Blackfin</a>
! </li><li> <a href="#cris">cris</a>
! </li><li> <a href="#dos">DOS</a>
! </li><li> <a href="#epiphany-x-elf">epiphany-*-elf</a>
! </li><li> <a href="#ft32-x-elf">ft32-*-elf</a>
! </li><li> <a href="#x-x-freebsd">*-*-freebsd*</a>
! </li><li> <a href="#h8300-hms">h8300-hms</a>
! </li><li> <a href="#hppa-hp-hpux">hppa*-hp-hpux*</a>
! </li><li> <a href="#hppa-hp-hpux11">hppa*-hp-hpux11</a>
! </li><li> <a href="#x-x-linux-gnu">*-*-linux-gnu</a>
! </li><li> <a href="#ix86-x-linux">i?86-*-linux*</a>
! </li><li> <a href="#ix86-x-solaris2">i?86-*-solaris2*</a>
! </li><li> <a href="#ia64-x-linux">ia64-*-linux</a>
! </li><li> <a href="#ia64-x-hpux">ia64-*-hpux*</a>
! </li><li> <a href="#x-ibm-aix">*-ibm-aix*</a>
! </li><li> <a href="#iq2000-x-elf">iq2000-*-elf</a>
! </li><li> <a href="#loongarch">loongarch</a>
! </li><li> <a href="#lm32-x-elf">lm32-*-elf</a>
! </li><li> <a href="#lm32-x-uclinux">lm32-*-uclinux</a>
! </li><li> <a href="#m32c-x-elf">m32c-*-elf</a>
! </li><li> <a href="#m32r-x-elf">m32r-*-elf</a>
! </li><li> <a href="#m68k-x-x">m68k-*-*</a>
! </li><li> <a href="#m68k-x-uclinux">m68k-*-uclinux</a>
! </li><li> <a href="#microblaze-x-elf">microblaze-*-elf</a>
! </li><li> <a href="#mips-x-x">mips-*-*</a>
! </li><li> <a href="#moxie-x-elf">moxie-*-elf</a>
! </li><li> <a href="#msp430-x-elf">msp430-*-elf</a>
! </li><li> <a href="#nds32le-x-elf">nds32le-*-elf</a>
! </li><li> <a href="#nds32be-x-elf">nds32be-*-elf</a>
! </li><li> <a href="#nvptx-x-none">nvptx-*-none</a>
! </li><li> <a href="#or1k-x-elf">or1k-*-elf</a>
! </li><li> <a href="#or1k-x-linux">or1k-*-linux</a>
! </li><li> <a href="#powerpc-x-x">powerpc*-*-*</a>
! </li><li> <a href="#powerpc-x-darwin">powerpc-*-darwin*</a>
! </li><li> <a href="#powerpc-x-elf">powerpc-*-elf</a>
! </li><li> <a href="#powerpc-x-linux-gnu">powerpc*-*-linux-gnu*</a>
! </li><li> <a href="#powerpc-x-netbsd">powerpc-*-netbsd*</a>
! </li><li> <a href="#powerpc-x-eabisim">powerpc-*-eabisim</a>
! </li><li> <a href="#powerpc-x-eabi">powerpc-*-eabi</a>
! </li><li> <a href="#powerpcle-x-elf">powerpcle-*-elf</a>
! </li><li> <a href="#powerpcle-x-eabisim">powerpcle-*-eabisim</a>
! </li><li> <a href="#powerpcle-x-eabi">powerpcle-*-eabi</a>
! </li><li> <a href="#riscv32-x-elf">riscv32-*-elf</a>
! </li><li> <a href="#riscv32-x-linux">riscv32-*-linux</a>
! </li><li> <a href="#riscv64-x-elf">riscv64-*-elf</a>
! </li><li> <a href="#riscv64-x-linux">riscv64-*-linux</a>
! </li><li> <a href="#rl78-x-elf">rl78-*-elf</a>
! </li><li> <a href="#rx-x-elf">rx-*-elf</a>
! </li><li> <a href="#s390-x-linux">s390-*-linux*</a>
! </li><li> <a href="#s390x-x-linux">s390x-*-linux*</a>
! </li><li> <a href="#s390x-ibm-tpf">s390x-ibm-tpf*</a>
! </li><li> <a href="#x-x-solaris2">*-*-solaris2*</a>
! </li><li> <a href="#sparc-x-x">sparc*-*-*</a>
! </li><li> <a href="#sparc-sun-solaris2">sparc-sun-solaris2*</a>
! </li><li> <a href="#sparc-x-linux">sparc-*-linux*</a>
! </li><li> <a href="#sparc64-x-solaris2">sparc64-*-solaris2*</a>
! </li><li> <a href="#sparcv9-x-solaris2">sparcv9-*-solaris2*</a>
! </li><li> <a href="#c6x-x-x">c6x-*-*</a>
! </li><li> <a href="#visium-x-elf">visium-*-elf</a>
! </li><li> <a href="#x-x-vxworks">*-*-vxworks*</a>
! </li><li> <a href="#x86-64-x-x">x86_64-*-*, amd64-*-*</a>
! </li><li> <a href="#x86-64-x-solaris2">x86_64-*-solaris2*</a>
! </li><li> <a href="#xtensa-x-elf">xtensa*-*-elf</a>
! </li><li> <a href="#xtensa-x-linux">xtensa*-*-linux*</a>
! </li><li> <a href="#windows">Microsoft Windows</a>
! </li><li> <a href="#x-x-cygwin">*-*-cygwin</a>
! </li><li> <a href="#x-x-mingw32">*-*-mingw32</a>
! </li><li> <a href="#os2">OS/2</a>
! </li><li> <a href="#older">Older systems</a>
  </li></ul>
  
! <ul>
! <li> <a href="#elf">all ELF targets</a> (SVR4, Solaris, etc.)
  </li></ul>
  
  
  <!-- -------- host/target specific issues start here ---------------- -->
  <hr />
! <a name="aarch64-x-x"></a><a name="aarch64*-*-*"></a>
! <h3 class="heading">aarch64*-*-*</h3>
! <p>Binutils pre 2.24 does not have support for selecting <samp>-mabi</samp> and
  does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
! not support option <samp>-mabi=ilp32</samp>.
  </p>
  <p>To enable a workaround for the Cortex-A53 erratum number 835769 by default
  (for all CPUs regardless of -mcpu option given) at configure time use the
! <samp>--enable-fix-cortex-a53-835769</samp> option.  This will enable the fix by
  default and can be explicitly disabled during compilation by passing the
! <samp>-mno-fix-cortex-a53-835769</samp> option.  Conversely,
! <samp>--disable-fix-cortex-a53-835769</samp> will disable the workaround by
  default.  The workaround is disabled by default if neither of
! <samp>--enable-fix-cortex-a53-835769</samp> or
! <samp>--disable-fix-cortex-a53-835769</samp> is given at configure time.
  </p>
  <p>To enable a workaround for the Cortex-A53 erratum number 843419 by default
  (for all CPUs regardless of -mcpu option given) at configure time use the
! <samp>--enable-fix-cortex-a53-843419</samp> option.  This workaround is applied at
  link time.  Enabling the workaround will cause GCC to pass the relevant option
  to the linker.  It can be explicitly disabled during compilation by passing the
! <samp>-mno-fix-cortex-a53-843419</samp> option.  Conversely,
! <samp>--disable-fix-cortex-a53-843419</samp> will disable the workaround by default.
  The workaround is disabled by default if neither of
! <samp>--enable-fix-cortex-a53-843419</samp> or
! <samp>--disable-fix-cortex-a53-843419</samp> is given at configure time.
  </p>
  <p>To enable Branch Target Identification Mechanism and Return Address Signing by
! default at configure time use the <samp>--enable-standard-branch-protection</samp>
! option.  This is equivalent to having <samp>-mbranch-protection=standard</samp>
  during compilation.  This can be explicitly disabled during compilation by
! passing the <samp>-mbranch-protection=none</samp> option which turns off all
  types of branch protections.  Conversely,
! <samp>--disable-standard-branch-protection</samp> will disable both the
  protections by default.  This mechanism is turned off by default if neither
  of the options are given at configure time.
  </p>
  <hr />
! <a name="amd64-x-solaris2"></a><a name="amd64-*-solaris2*"></a>
! <h3 class="heading">amd64-*-solaris2*</h3>
! <p>This is a synonym for &lsquo;<samp>x86_64-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a name="amdgcn-x-amdhsa"></a><a name="amdgcn-*-amdhsa"></a>
! <h3 class="heading">amdgcn-*-amdhsa</h3>
  <p>AMD GCN GPU target.
  </p>
  <p>Instead of GNU Binutils, you will need to install LLVM 15, or later, and copy
! <samp>bin/llvm-mc</samp> to <samp>amdgcn-amdhsa/bin/as</samp>,
! <samp>bin/lld</samp> to <samp>amdgcn-amdhsa/bin/ld</samp>,
! <samp>bin/llvm-nm</samp> to <samp>amdgcn-amdhsa/bin/nm</samp>, and
! <samp>bin/llvm-ar</samp> to both <samp>bin/amdgcn-amdhsa-ar</samp> and
! <samp>bin/amdgcn-amdhsa-ranlib</samp>.  Note that LLVM 13.0.1 or LLVM 14 can be used
! by specifying a <code>--with-multilib-list=</code> that does not list <code>gfx1100</code>
! and <code>gfx1103</code>.
  </p>
  <p>Use Newlib (4.3.0 or newer; 4.4.0 contains some improvements and git commit
  7dd4eb1db (2025-03-25, post-4.4.0) fixes device console output for GFX10 and
  GFX11 devices).
  </p>
  <p>To run the binaries, install the HSA Runtime from the
! <a href="https://rocm.docs.amd.com/">ROCm Platform</a>, and use
! <samp>libexec/gcc/amdhsa-amdhsa/<var>version</var>/gcn-run</samp> to launch them
  on the GPU.
  </p>
  <p>To enable support for GCN3 Fiji devices (gfx803), GCC has to be configured with
! <samp>--with-arch=<code>fiji</code></samp> or
! <samp>--with-multilib-list=<code>fiji</code>,...</samp>.  Note that support for Fiji
  devices has been removed in ROCm 4.0 and support in LLVM was deprecated and has
  been removed in LLVM 18.
  </p>
  <hr />
! <a name="arc-x-elf32"></a><a name="arc-*-elf32"></a>
! <h3 class="heading">arc-*-elf32</h3>
  
! <p>Use &lsquo;<samp>configure --target=arc-elf32 --with-cpu=<var>cpu</var> --enable-languages=&quot;c,c++&quot;</samp>&rsquo;
! to configure GCC, with <var>cpu</var> being one of &lsquo;<samp>arc600</samp>&rsquo;, &lsquo;<samp>arc601</samp>&rsquo;,
! or &lsquo;<samp>arc700</samp>&rsquo;.
  </p>
  <hr />
! <a name="arc-linux-uclibc"></a><a name="arc-linux-uclibc-1"></a>
! <h3 class="heading">arc-linux-uclibc</h3>
  
! <p>Use &lsquo;<samp>configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages=&quot;c,c++&quot;</samp>&rsquo; to configure GCC.
  </p>
  <hr />
! <a name="arm-x-eabi"></a><a name="arm-*-eabi"></a>
! <h3 class="heading">arm-*-eabi</h3>
  <p>ARM-family processors.
  </p>
  <p>Building the Ada frontend commonly fails (an infinite loop executing
! <code>xsinfo</code>) if the host compiler is GNAT 4.8.  Host compilers built from the
  GNAT 4.6, 4.9 or 5 release branches are known to succeed.
  </p>
  <hr />
! <a name="avr"></a><a name="avr-1"></a>
! <h3 class="heading">avr</h3>
  <p>ATMEL AVR-family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  See &ldquo;AVR Options&rdquo; in the main manual
  for the list of supported MCU types.
  </p>
! <p>Use &lsquo;<samp>configure --target=avr --enable-languages=&quot;c&quot;</samp>&rsquo; to configure GCC.
  </p>
  <p>Further installation notes and other useful information about AVR tools
  can also be obtained from:
  </p>
! <ul>
! <li> <a href="http://www.nongnu.org/avr/">http://www.nongnu.org/avr/</a>
! </li><li> <a href="http://www.amelek.gda.pl/avr/">http://www.amelek.gda.pl/avr/</a>
  </li></ul>
  
  <p>The following error:
! </p><div class="smallexample">
! <pre class="smallexample">Error: register required
  </pre></div>
  
  <p>indicates that you should upgrade to a newer version of the binutils.
  </p>
  <hr />
! <a name="bfin"></a><a name="Blackfin"></a>
! <h3 class="heading">Blackfin</h3>
  <p>The Blackfin processor, an Analog Devices DSP.
  See &ldquo;Blackfin Options&rdquo; in the main manual
  </p>
  <p>More information, and a version of binutils with support for this processor,
! are available at <a href="https://sourceforge.net/projects/adi-toolchain/">https://sourceforge.net/projects/adi-toolchain/</a>.
  </p>
  <hr />
! <a name="cris"></a><a name="CRIS"></a>
! <h3 class="heading">CRIS</h3>
  <p>CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for
  example the ETRAX series.  These are used in embedded applications.
  </p>
  <p>See &ldquo;CRIS Options&rdquo; in the main manual
  for a list of CRIS-specific options.
  </p>
! <p>Use &lsquo;<samp>configure --target=cris-elf</samp>&rsquo; to configure GCC&nbsp;for building
  a cross-compiler for CRIS.
  <hr />
! <a name="dos"></a></p><a name="DOS"></a>
! <h3 class="heading">DOS</h3>
! <p>Please have a look at the <a href="binaries.html">binaries page</a>.
  </p>
  <p>You cannot install GCC by itself on MSDOS; it will not compile under
  any MSDOS compiler except itself.  You need to get the complete
--- 71,309 ----
  
  
  
! <a class="index-entry-id" id="index-Specific"></a>
! <a class="index-entry-id" id="index-Specific-installation-notes"></a>
! <a class="index-entry-id" id="index-Target-specific-installation"></a>
! <a class="index-entry-id" id="index-Host-specific-installation"></a>
! <a class="index-entry-id" id="index-Target-specific-installation-notes"></a>
  
! <p>Please read this document carefully <em class="emph">before</em> installing the
  GNU Compiler Collection on your machine.
  </p>
! <p>Note that this list of install notes is <em class="emph">not</em> a list of supported
  hosts or targets.  Not all supported hosts and targets are listed
  here, only the ones that require host-specific or target-specific
  information have to. 
  </p>
! <ul class="itemize mark-bullet">
! <li><a class="uref" href="#aarch64-x-x">aarch64*-*-*</a>
! </li><li><a class="uref" href="#amdgcn-x-amdhsa">amdgcn-*-amdhsa</a>
! </li><li><a class="uref" href="#amd64-x-solaris2">amd64-*-solaris2*</a>
! </li><li><a class="uref" href="#arc-x-elf32">arc-*-elf32</a>
! </li><li><a class="uref" href="#arc-linux-uclibc">arc-linux-uclibc</a>
! </li><li><a class="uref" href="#arm-x-eabi">arm-*-eabi</a>
! </li><li><a class="uref" href="#avr">avr</a>
! </li><li><a class="uref" href="#bfin">Blackfin</a>
! </li><li><a class="uref" href="#cris">cris</a>
! </li><li><a class="uref" href="#dos">DOS</a>
! </li><li><a class="uref" href="#epiphany-x-elf">epiphany-*-elf</a>
! </li><li><a class="uref" href="#ft32-x-elf">ft32-*-elf</a>
! </li><li><a class="uref" href="#x-x-freebsd">*-*-freebsd*</a>
! </li><li><a class="uref" href="#h8300-hms">h8300-hms</a>
! </li><li><a class="uref" href="#hppa-hp-hpux">hppa*-hp-hpux*</a>
! </li><li><a class="uref" href="#hppa-hp-hpux11">hppa*-hp-hpux11</a>
! </li><li><a class="uref" href="#x-x-linux-gnu">*-*-linux-gnu</a>
! </li><li><a class="uref" href="#ix86-x-linux">i?86-*-linux*</a>
! </li><li><a class="uref" href="#ix86-x-solaris2">i?86-*-solaris2*</a>
! </li><li><a class="uref" href="#ia64-x-linux">ia64-*-linux</a>
! </li><li><a class="uref" href="#ia64-x-hpux">ia64-*-hpux*</a>
! </li><li><a class="uref" href="#x-ibm-aix">*-ibm-aix*</a>
! </li><li><a class="uref" href="#iq2000-x-elf">iq2000-*-elf</a>
! </li><li><a class="uref" href="#loongarch">loongarch</a>
! </li><li><a class="uref" href="#lm32-x-elf">lm32-*-elf</a>
! </li><li><a class="uref" href="#lm32-x-uclinux">lm32-*-uclinux</a>
! </li><li><a class="uref" href="#m32c-x-elf">m32c-*-elf</a>
! </li><li><a class="uref" href="#m32r-x-elf">m32r-*-elf</a>
! </li><li><a class="uref" href="#m68k-x-x">m68k-*-*</a>
! </li><li><a class="uref" href="#m68k-x-uclinux">m68k-*-uclinux</a>
! </li><li><a class="uref" href="#microblaze-x-elf">microblaze-*-elf</a>
! </li><li><a class="uref" href="#mips-x-x">mips-*-*</a>
! </li><li><a class="uref" href="#moxie-x-elf">moxie-*-elf</a>
! </li><li><a class="uref" href="#msp430-x-elf">msp430-*-elf</a>
! </li><li><a class="uref" href="#nds32le-x-elf">nds32le-*-elf</a>
! </li><li><a class="uref" href="#nds32be-x-elf">nds32be-*-elf</a>
! </li><li><a class="uref" href="#nvptx-x-none">nvptx-*-none</a>
! </li><li><a class="uref" href="#or1k-x-elf">or1k-*-elf</a>
! </li><li><a class="uref" href="#or1k-x-linux">or1k-*-linux</a>
! </li><li><a class="uref" href="#powerpc-x-x">powerpc*-*-*</a>
! </li><li><a class="uref" href="#powerpc-x-darwin">powerpc-*-darwin*</a>
! </li><li><a class="uref" href="#powerpc-x-elf">powerpc-*-elf</a>
! </li><li><a class="uref" href="#powerpc-x-linux-gnu">powerpc*-*-linux-gnu*</a>
! </li><li><a class="uref" href="#powerpc-x-netbsd">powerpc-*-netbsd*</a>
! </li><li><a class="uref" href="#powerpc-x-eabisim">powerpc-*-eabisim</a>
! </li><li><a class="uref" href="#powerpc-x-eabi">powerpc-*-eabi</a>
! </li><li><a class="uref" href="#powerpcle-x-elf">powerpcle-*-elf</a>
! </li><li><a class="uref" href="#powerpcle-x-eabisim">powerpcle-*-eabisim</a>
! </li><li><a class="uref" href="#powerpcle-x-eabi">powerpcle-*-eabi</a>
! </li><li><a class="uref" href="#riscv32-x-elf">riscv32-*-elf</a>
! </li><li><a class="uref" href="#riscv32-x-linux">riscv32-*-linux</a>
! </li><li><a class="uref" href="#riscv64-x-elf">riscv64-*-elf</a>
! </li><li><a class="uref" href="#riscv64-x-linux">riscv64-*-linux</a>
! </li><li><a class="uref" href="#rl78-x-elf">rl78-*-elf</a>
! </li><li><a class="uref" href="#rx-x-elf">rx-*-elf</a>
! </li><li><a class="uref" href="#s390-x-linux">s390-*-linux*</a>
! </li><li><a class="uref" href="#s390x-x-linux">s390x-*-linux*</a>
! </li><li><a class="uref" href="#s390x-ibm-tpf">s390x-ibm-tpf*</a>
! </li><li><a class="uref" href="#x-x-solaris2">*-*-solaris2*</a>
! </li><li><a class="uref" href="#sparc-x-x">sparc*-*-*</a>
! </li><li><a class="uref" href="#sparc-sun-solaris2">sparc-sun-solaris2*</a>
! </li><li><a class="uref" href="#sparc-x-linux">sparc-*-linux*</a>
! </li><li><a class="uref" href="#sparc64-x-solaris2">sparc64-*-solaris2*</a>
! </li><li><a class="uref" href="#sparcv9-x-solaris2">sparcv9-*-solaris2*</a>
! </li><li><a class="uref" href="#c6x-x-x">c6x-*-*</a>
! </li><li><a class="uref" href="#visium-x-elf">visium-*-elf</a>
! </li><li><a class="uref" href="#x-x-vxworks">*-*-vxworks*</a>
! </li><li><a class="uref" href="#x86-64-x-x">x86_64-*-*, amd64-*-*</a>
! </li><li><a class="uref" href="#x86-64-x-solaris2">x86_64-*-solaris2*</a>
! </li><li><a class="uref" href="#xtensa-x-elf">xtensa*-*-elf</a>
! </li><li><a class="uref" href="#xtensa-x-linux">xtensa*-*-linux*</a>
! </li><li><a class="uref" href="#windows">Microsoft Windows</a>
! </li><li><a class="uref" href="#x-x-cygwin">*-*-cygwin</a>
! </li><li><a class="uref" href="#x-x-mingw32">*-*-mingw32</a>
! </li><li><a class="uref" href="#os2">OS/2</a>
! </li><li><a class="uref" href="#older">Older systems</a>
  </li></ul>
  
! <ul class="itemize mark-bullet">
! <li><a class="uref" href="#elf">all ELF targets</a> (SVR4, Solaris, etc.)
  </li></ul>
  
  
  <!-- -------- host/target specific issues start here ---------------- -->
  <hr />
! <a class="anchor" id="aarch64-x-x"></a><h3 class="heading" id="aarch64*-*-*"><span>aarch64*-*-*<a class="copiable-link" href="#aarch64*-*-*"> &para;</a></span></h3>
! <p>Binutils pre 2.24 does not have support for selecting <samp class="option">-mabi</samp> and
  does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
! not support option <samp class="option">-mabi=ilp32</samp>.
  </p>
  <p>To enable a workaround for the Cortex-A53 erratum number 835769 by default
  (for all CPUs regardless of -mcpu option given) at configure time use the
! <samp class="option">--enable-fix-cortex-a53-835769</samp> option.  This will enable the fix by
  default and can be explicitly disabled during compilation by passing the
! <samp class="option">-mno-fix-cortex-a53-835769</samp> option.  Conversely,
! <samp class="option">--disable-fix-cortex-a53-835769</samp> will disable the workaround by
  default.  The workaround is disabled by default if neither of
! <samp class="option">--enable-fix-cortex-a53-835769</samp> or
! <samp class="option">--disable-fix-cortex-a53-835769</samp> is given at configure time.
  </p>
  <p>To enable a workaround for the Cortex-A53 erratum number 843419 by default
  (for all CPUs regardless of -mcpu option given) at configure time use the
! <samp class="option">--enable-fix-cortex-a53-843419</samp> option.  This workaround is applied at
  link time.  Enabling the workaround will cause GCC to pass the relevant option
  to the linker.  It can be explicitly disabled during compilation by passing the
! <samp class="option">-mno-fix-cortex-a53-843419</samp> option.  Conversely,
! <samp class="option">--disable-fix-cortex-a53-843419</samp> will disable the workaround by default.
  The workaround is disabled by default if neither of
! <samp class="option">--enable-fix-cortex-a53-843419</samp> or
! <samp class="option">--disable-fix-cortex-a53-843419</samp> is given at configure time.
  </p>
  <p>To enable Branch Target Identification Mechanism and Return Address Signing by
! default at configure time use the <samp class="option">--enable-standard-branch-protection</samp>
! option.  This is equivalent to having <samp class="option">-mbranch-protection=standard</samp>
  during compilation.  This can be explicitly disabled during compilation by
! passing the <samp class="option">-mbranch-protection=none</samp> option which turns off all
  types of branch protections.  Conversely,
! <samp class="option">--disable-standard-branch-protection</samp> will disable both the
  protections by default.  This mechanism is turned off by default if neither
  of the options are given at configure time.
  </p>
  <hr />
! <a class="anchor" id="amd64-x-solaris2"></a><h3 class="heading" id="amd64-*-solaris2*"><span>amd64-*-solaris2*<a class="copiable-link" href="#amd64-*-solaris2*"> &para;</a></span></h3>
! <p>This is a synonym for &lsquo;<samp class="samp">x86_64-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a class="anchor" id="amdgcn-x-amdhsa"></a><h3 class="heading" id="amdgcn-*-amdhsa"><span>amdgcn-*-amdhsa<a class="copiable-link" href="#amdgcn-*-amdhsa"> &para;</a></span></h3>
  <p>AMD GCN GPU target.
  </p>
  <p>Instead of GNU Binutils, you will need to install LLVM 15, or later, and copy
! <samp class="file">bin/llvm-mc</samp> to <samp class="file">amdgcn-amdhsa/bin/as</samp>,
! <samp class="file">bin/lld</samp> to <samp class="file">amdgcn-amdhsa/bin/ld</samp>,
! <samp class="file">bin/llvm-nm</samp> to <samp class="file">amdgcn-amdhsa/bin/nm</samp>, and
! <samp class="file">bin/llvm-ar</samp> to both <samp class="file">bin/amdgcn-amdhsa-ar</samp> and
! <samp class="file">bin/amdgcn-amdhsa-ranlib</samp>.  Note that LLVM 13.0.1 or LLVM 14 can be used
! by specifying a <code class="code">--with-multilib-list=</code> that does not list <code class="code">gfx1100</code>
! and <code class="code">gfx1103</code>.
  </p>
  <p>Use Newlib (4.3.0 or newer; 4.4.0 contains some improvements and git commit
  7dd4eb1db (2025-03-25, post-4.4.0) fixes device console output for GFX10 and
  GFX11 devices).
  </p>
  <p>To run the binaries, install the HSA Runtime from the
! <a class="uref" href="https://rocm.docs.amd.com/">ROCm Platform</a>, and use
! <samp class="file">libexec/gcc/amdhsa-amdhsa/<var class="var">version</var>/gcn-run</samp> to launch them
  on the GPU.
  </p>
  <p>To enable support for GCN3 Fiji devices (gfx803), GCC has to be configured with
! <samp class="option">--with-arch=<code class="code">fiji</code></samp> or
! <samp class="option">--with-multilib-list=<code class="code">fiji</code>,...</samp>.  Note that support for Fiji
  devices has been removed in ROCm 4.0 and support in LLVM was deprecated and has
  been removed in LLVM 18.
  </p>
  <hr />
! <a class="anchor" id="arc-x-elf32"></a><h3 class="heading" id="arc-*-elf32"><span>arc-*-elf32<a class="copiable-link" href="#arc-*-elf32"> &para;</a></span></h3>
  
! <p>Use &lsquo;<samp class="samp">configure --target=arc-elf32 --with-cpu=<var class="var">cpu</var> --enable-languages=&quot;c,c++&quot;</samp>&rsquo;
! to configure GCC, with <var class="var">cpu</var> being one of &lsquo;<samp class="samp">arc600</samp>&rsquo;, &lsquo;<samp class="samp">arc601</samp>&rsquo;,
! or &lsquo;<samp class="samp">arc700</samp>&rsquo;.
  </p>
  <hr />
! <a class="anchor" id="arc-linux-uclibc"></a><h3 class="heading" id="arc-linux-uclibc-1"><span>arc-linux-uclibc<a class="copiable-link" href="#arc-linux-uclibc-1"> &para;</a></span></h3>
  
! <p>Use &lsquo;<samp class="samp">configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages=&quot;c,c++&quot;</samp>&rsquo; to configure GCC.
  </p>
  <hr />
! <a class="anchor" id="arm-x-eabi"></a><h3 class="heading" id="arm-*-eabi"><span>arm-*-eabi<a class="copiable-link" href="#arm-*-eabi"> &para;</a></span></h3>
  <p>ARM-family processors.
  </p>
  <p>Building the Ada frontend commonly fails (an infinite loop executing
! <code class="code">xsinfo</code>) if the host compiler is GNAT 4.8.  Host compilers built from the
  GNAT 4.6, 4.9 or 5 release branches are known to succeed.
  </p>
  <hr />
! <a class="anchor" id="avr"></a><h3 class="heading" id="avr-1"><span>avr<a class="copiable-link" href="#avr-1"> &para;</a></span></h3>
  <p>ATMEL AVR-family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  See &ldquo;AVR Options&rdquo; in the main manual
  for the list of supported MCU types.
  </p>
! <p>Use &lsquo;<samp class="samp">configure --target=avr --enable-languages=&quot;c&quot;</samp>&rsquo; to configure GCC.
  </p>
  <p>Further installation notes and other useful information about AVR tools
  can also be obtained from:
  </p>
! <ul class="itemize mark-bullet">
! <li><a class="uref" href="http://www.nongnu.org/avr/">http://www.nongnu.org/avr/</a>
! </li><li><a class="uref" href="http://www.amelek.gda.pl/avr/">http://www.amelek.gda.pl/avr/</a>
  </li></ul>
  
  <p>The following error:
! </p><div class="example smallexample">
! <pre class="example-preformatted">Error: register required
  </pre></div>
  
  <p>indicates that you should upgrade to a newer version of the binutils.
  </p>
  <hr />
! <a class="anchor" id="bfin"></a><h3 class="heading" id="Blackfin"><span>Blackfin<a class="copiable-link" href="#Blackfin"> &para;</a></span></h3>
  <p>The Blackfin processor, an Analog Devices DSP.
  See &ldquo;Blackfin Options&rdquo; in the main manual
  </p>
  <p>More information, and a version of binutils with support for this processor,
! are available at <a class="uref" href="https://sourceforge.net/projects/adi-toolchain/">https://sourceforge.net/projects/adi-toolchain/</a>.
  </p>
  <hr />
! <a class="anchor" id="cris"></a><h3 class="heading" id="CRIS"><span>CRIS<a class="copiable-link" href="#CRIS"> &para;</a></span></h3>
  <p>CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for
  example the ETRAX series.  These are used in embedded applications.
  </p>
  <p>See &ldquo;CRIS Options&rdquo; in the main manual
  for a list of CRIS-specific options.
  </p>
! <p>Use &lsquo;<samp class="samp">configure --target=cris-elf</samp>&rsquo; to configure GCC&nbsp;for building
  a cross-compiler for CRIS.
  <hr />
! <a class="anchor" id="dos"></a></p><h3 class="heading" id="DOS"><span>DOS<a class="copiable-link" href="#DOS"> &para;</a></span></h3>
! <p>Please have a look at the <a class="uref" href="binaries.html">binaries page</a>.
  </p>
  <p>You cannot install GCC by itself on MSDOS; it will not compile under
  any MSDOS compiler except itself.  You need to get the complete
*************** compilation package DJGPP, which include
*** 339,381 ****
  and includes all the necessary compilation tools and libraries.
  </p>
  <hr />
! <a name="epiphany-x-elf"></a><a name="epiphany-*-elf"></a>
! <h3 class="heading">epiphany-*-elf</h3>
  <p>Adapteva Epiphany.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="x-x-freebsd"></a><a name="g_t*-*-freebsd*"></a>
! <h3 class="heading">*-*-freebsd*</h3>
  <p>We support FreeBSD using the ELF file format with DWARF 2 debugging
  for all CPU architectures.  There are
  no known issues with mixing object files and libraries with different
  debugging formats.
  </p>
  <p>We recommend bootstrapping against the latest GNU binutils or the
! version found in the <samp>devel/binutils</samp> port. This also has been
  known to enable additional features and improve overall testsuite
  results.
  </p>
  <p>Ada and D (or rather their respective libraries) are broken on
  FreeBSD/i386. This also affects building 32-bit libraries on
! FreeBSD/amd64, so configure with <samp>--disable-multilib</samp>
  there in case you are building one of these front ends.
  </p>
  <p>Go (or rather libgo) is generally broken on FreeBSD.
  </p>
  <hr />
! <a name="ft32-x-elf"></a><a name="ft32-*-elf"></a>
! <h3 class="heading">ft32-*-elf</h3>
  <p>The FT32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="h8300-hms"></a><a name="h8300-hms-1"></a>
! <h3 class="heading">h8300-hms</h3>
  <p>Renesas H8/300 series of processors.
  </p>
! <p>Please have a look at the <a href="binaries.html">binaries page</a>.
  </p>
  <p>The calling convention and structure layout has changed in release 2.6.
  All code must be recompiled.  The calling convention now passes the
--- 311,349 ----
  and includes all the necessary compilation tools and libraries.
  </p>
  <hr />
! <a class="anchor" id="epiphany-x-elf"></a><h3 class="heading" id="epiphany-*-elf"><span>epiphany-*-elf<a class="copiable-link" href="#epiphany-*-elf"> &para;</a></span></h3>
  <p>Adapteva Epiphany.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="x-x-freebsd"></a><h3 class="heading" id="g_t*-*-freebsd*"><span>*-*-freebsd*<a class="copiable-link" href="#g_t*-*-freebsd*"> &para;</a></span></h3>
  <p>We support FreeBSD using the ELF file format with DWARF 2 debugging
  for all CPU architectures.  There are
  no known issues with mixing object files and libraries with different
  debugging formats.
  </p>
  <p>We recommend bootstrapping against the latest GNU binutils or the
! version found in the <samp class="file">devel/binutils</samp> port. This also has been
  known to enable additional features and improve overall testsuite
  results.
  </p>
  <p>Ada and D (or rather their respective libraries) are broken on
  FreeBSD/i386. This also affects building 32-bit libraries on
! FreeBSD/amd64, so configure with <samp class="option">--disable-multilib</samp>
  there in case you are building one of these front ends.
  </p>
  <p>Go (or rather libgo) is generally broken on FreeBSD.
  </p>
  <hr />
! <a class="anchor" id="ft32-x-elf"></a><h3 class="heading" id="ft32-*-elf"><span>ft32-*-elf<a class="copiable-link" href="#ft32-*-elf"> &para;</a></span></h3>
  <p>The FT32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="h8300-hms"></a><h3 class="heading" id="h8300-hms-1"><span>h8300-hms<a class="copiable-link" href="#h8300-hms-1"> &para;</a></span></h3>
  <p>Renesas H8/300 series of processors.
  </p>
! <p>Please have a look at the <a class="uref" href="binaries.html">binaries page</a>.
  </p>
  <p>The calling convention and structure layout has changed in release 2.6.
  All code must be recompiled.  The calling convention now passes the
*************** first three arguments in function calls
*** 383,402 ****
  longer a multiple of 2 bytes.
  </p>
  <hr />
! <a name="hppa-hp-hpux"></a><a name="hppa*-hp-hpux*"></a>
! <h3 class="heading">hppa*-hp-hpux*</h3>
  <p>We require using gas on all hppa platforms.  Version 2.19 or
  later is recommended.
  </p>
  <p>It may be helpful to configure GCC with the
! <a href="./configure.html#with-gnu-as"><samp>--with-gnu-as</samp></a> and
! <samp>--with-as=&hellip;</samp> options to ensure that GCC can find GAS.
  </p>
  <p>There are two default scheduling models for instructions.  These are
  PROCESSOR_7100LC and PROCESSOR_8000.  They are selected from the pa-risc
  architecture specified for the target machine when configuring.
  PROCESSOR_8000 is the default.  PROCESSOR_7100LC is selected when
! the target is a &lsquo;<samp>hppa1*</samp>&rsquo; machine.
  </p>
  <p>The PROCESSOR_8000 model is not well suited to older processors.  Thus,
  it is important to completely specify the machine architecture when
--- 351,369 ----
  longer a multiple of 2 bytes.
  </p>
  <hr />
! <a class="anchor" id="hppa-hp-hpux"></a><h3 class="heading" id="hppa*-hp-hpux*"><span>hppa*-hp-hpux*<a class="copiable-link" href="#hppa*-hp-hpux*"> &para;</a></span></h3>
  <p>We require using gas on all hppa platforms.  Version 2.19 or
  later is recommended.
  </p>
  <p>It may be helpful to configure GCC with the
! <a class="uref" href="./configure.html#with-gnu-as"><samp class="option">--with-gnu-as</samp></a> and
! <samp class="option">--with-as=&hellip;</samp> options to ensure that GCC can find GAS.
  </p>
  <p>There are two default scheduling models for instructions.  These are
  PROCESSOR_7100LC and PROCESSOR_8000.  They are selected from the pa-risc
  architecture specified for the target machine when configuring.
  PROCESSOR_8000 is the default.  PROCESSOR_7100LC is selected when
! the target is a &lsquo;<samp class="samp">hppa1*</samp>&rsquo; machine.
  </p>
  <p>The PROCESSOR_8000 model is not well suited to older processors.  Thus,
  it is important to completely specify the machine architecture when
*************** through 11.00, and the UNIX 98 namespace
*** 409,425 ****
  This namespace change might cause problems when bootstrapping with
  an earlier version of GCC or the HP compiler as essentially the same
  namespace is required for an entire build.  This problem can be avoided
! in a number of ways.  With HP cc, <code>UNIX_STD</code> can be set to &lsquo;<samp>95</samp>&rsquo;
! or &lsquo;<samp>98</samp>&rsquo;.  Another way is to add an appropriate set of predefines
! to <code>CC</code>.  The description for the <samp>munix=</samp> option contains
  a list of the predefines used with each standard.
  </p>
! <p>More specific information to &lsquo;<samp>hppa*-hp-hpux*</samp>&rsquo; targets follows.
  </p>
  <hr />
! <a name="hppa-hp-hpux11"></a><a name="hppa*-hp-hpux11"></a>
! <h3 class="heading">hppa*-hp-hpux11</h3>
! <p>Refer to <a href="binaries.html">binaries</a> for information about obtaining
  precompiled GCC binaries for HP-UX.  Precompiled binaries must be obtained
  to build the Ada language as it cannot be bootstrapped using C.  Ada is
  only available for the 32-bit PA-RISC runtime.
--- 376,391 ----
  This namespace change might cause problems when bootstrapping with
  an earlier version of GCC or the HP compiler as essentially the same
  namespace is required for an entire build.  This problem can be avoided
! in a number of ways.  With HP cc, <code class="env">UNIX_STD</code> can be set to &lsquo;<samp class="samp">95</samp>&rsquo;
! or &lsquo;<samp class="samp">98</samp>&rsquo;.  Another way is to add an appropriate set of predefines
! to <code class="env">CC</code>.  The description for the <samp class="option">munix=</samp> option contains
  a list of the predefines used with each standard.
  </p>
! <p>More specific information to &lsquo;<samp class="samp">hppa*-hp-hpux*</samp>&rsquo; targets follows.
  </p>
  <hr />
! <a class="anchor" id="hppa-hp-hpux11"></a><h3 class="heading" id="hppa*-hp-hpux11"><span>hppa*-hp-hpux11<a class="copiable-link" href="#hppa*-hp-hpux11"> &para;</a></span></h3>
! <p>Refer to <a class="uref" href="binaries.html">binaries</a> for information about obtaining
  precompiled GCC binaries for HP-UX.  Precompiled binaries must be obtained
  to build the Ada language as it cannot be bootstrapped using C.  Ada is
  only available for the 32-bit PA-RISC runtime.
*************** is best not to start from a binary distr
*** 441,471 ****
  </p>
  <p>On 64-bit capable systems, there are two distinct targets.  Different
  installation prefixes must be used if both are to be installed on
! the same system.  The &lsquo;<samp>hppa[1-2]*-hp-hpux11*</samp>&rsquo; target generates code
  for the 32-bit PA-RISC runtime architecture and uses the HP linker.
! The &lsquo;<samp>hppa64-hp-hpux11*</samp>&rsquo; target generates 64-bit code for the
  PA-RISC 2.0 architecture.
  </p>
  <p>The script config.guess now selects the target type based on the compiler
! detected during configuration.  You must define <code>PATH</code> or <code>CC</code> so
  that configure finds an appropriate compiler for the initial bootstrap.
! When <code>CC</code> is used, the definition should contain the options that are
! needed whenever <code>CC</code> is used.
  </p>
  <p>Specifically, options that determine the runtime architecture must be
! in <code>CC</code> to correctly select the target for the build.  It is also
! convenient to place many other compiler options in <code>CC</code>.  For example,
! <code>CC=&quot;cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE&quot;</code>
  can be used to bootstrap the GCC 3.3 branch with the HP compiler in
! 64-bit K&amp;R/bundled mode.  The <samp>+DA2.0W</samp> option will result in
! the automatic selection of the &lsquo;<samp>hppa64-hp-hpux11*</samp>&rsquo; target.  The
  macro definition table of cpp needs to be increased for a successful
  build with the HP compiler.  _CLASSIC_TYPES and _HPUX_SOURCE need to
  be defined when building with the bundled compiler, or when using the
! <samp>-Ac</samp> option.  These defines aren&rsquo;t necessary with <samp>-Ae</samp>.
  </p>
! <p>It is best to explicitly configure the &lsquo;<samp>hppa64-hp-hpux11*</samp>&rsquo; target
! with the <samp>--with-ld=&hellip;</samp> option.  This overrides the standard
  search for ld.  The two linkers supported on this target require different
  commands.  The default linker is determined during configuration.  As a
  result, it&rsquo;s not possible to switch linkers in the middle of a GCC build.
--- 407,437 ----
  </p>
  <p>On 64-bit capable systems, there are two distinct targets.  Different
  installation prefixes must be used if both are to be installed on
! the same system.  The &lsquo;<samp class="samp">hppa[1-2]*-hp-hpux11*</samp>&rsquo; target generates code
  for the 32-bit PA-RISC runtime architecture and uses the HP linker.
! The &lsquo;<samp class="samp">hppa64-hp-hpux11*</samp>&rsquo; target generates 64-bit code for the
  PA-RISC 2.0 architecture.
  </p>
  <p>The script config.guess now selects the target type based on the compiler
! detected during configuration.  You must define <code class="env">PATH</code> or <code class="env">CC</code> so
  that configure finds an appropriate compiler for the initial bootstrap.
! When <code class="env">CC</code> is used, the definition should contain the options that are
! needed whenever <code class="env">CC</code> is used.
  </p>
  <p>Specifically, options that determine the runtime architecture must be
! in <code class="env">CC</code> to correctly select the target for the build.  It is also
! convenient to place many other compiler options in <code class="env">CC</code>.  For example,
! <code class="env">CC=&quot;cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE&quot;</code>
  can be used to bootstrap the GCC 3.3 branch with the HP compiler in
! 64-bit K&amp;R/bundled mode.  The <samp class="option">+DA2.0W</samp> option will result in
! the automatic selection of the &lsquo;<samp class="samp">hppa64-hp-hpux11*</samp>&rsquo; target.  The
  macro definition table of cpp needs to be increased for a successful
  build with the HP compiler.  _CLASSIC_TYPES and _HPUX_SOURCE need to
  be defined when building with the bundled compiler, or when using the
! <samp class="option">-Ac</samp> option.  These defines aren&rsquo;t necessary with <samp class="option">-Ae</samp>.
  </p>
! <p>It is best to explicitly configure the &lsquo;<samp class="samp">hppa64-hp-hpux11*</samp>&rsquo; target
! with the <samp class="option">--with-ld=&hellip;</samp> option.  This overrides the standard
  search for ld.  The two linkers supported on this target require different
  commands.  The default linker is determined during configuration.  As a
  result, it&rsquo;s not possible to switch linkers in the middle of a GCC build.
*************** This has been reported to sometimes occu
*** 473,482 ****
  and GCC.
  </p>
  <p>A recent linker patch must be installed for the correct operation of
! GCC 3.3 and later.  <code>PHSS_26559</code> and <code>PHSS_24304</code> are the
  oldest linker patches that are known to work.  They are for HP-UX
! 11.00 and 11.11, respectively.  <code>PHSS_24303</code>, the companion to
! <code>PHSS_24304</code>, might be usable but it hasn&rsquo;t been tested.  These
  patches have been superseded.  Consult the HP patch database to obtain
  the currently recommended linker patch for your system.
  </p>
--- 439,448 ----
  and GCC.
  </p>
  <p>A recent linker patch must be installed for the correct operation of
! GCC 3.3 and later.  <code class="code">PHSS_26559</code> and <code class="code">PHSS_24304</code> are the
  oldest linker patches that are known to work.  They are for HP-UX
! 11.00 and 11.11, respectively.  <code class="code">PHSS_24303</code>, the companion to
! <code class="code">PHSS_24304</code>, might be usable but it hasn&rsquo;t been tested.  These
  patches have been superseded.  Consult the HP patch database to obtain
  the currently recommended linker patch for your system.
  </p>
*************** linking issues involving secondary symbo
*** 490,522 ****
  </p>
  <p>GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to
  run initializers and finalizers on the 64-bit port.  The 32-bit port
! uses the linker <samp>+init</samp> and <samp>+fini</samp> options for the same
  purpose.  The patches correct various problems with the +init/+fini
  options, including program core dumps.  Binutils 2.14 corrects a
  problem on the 64-bit port resulting from HP&rsquo;s non-standard use of
  the .init and .fini sections for array initializers and finalizers.
  </p>
! <p>Only the HP linker is supported for the &lsquo;<samp>hppa64-hp-hpux11*</samp>&rsquo; target.
  </p>
  <p>At this time, the GNU linker does not support the creation of long
  branch stubs.  As a result, it cannot successfully link binaries
  containing branch offsets larger than 8 megabytes.  In addition,
  there are problems linking shared libraries, linking executables
! with <samp>-static</samp>, and with dwarf2 unwind and exception support.
  It also doesn&rsquo;t provide stubs for internal calls to global functions
  in shared libraries, so these calls cannot be overloaded.
  </p>
  <p>The HP dynamic loader does not support GNU symbol versioning, so symbol
  versioning is not supported.  It may be necessary to disable symbol
! versioning with <samp>--disable-symvers</samp> when using GNU ld.
  </p>
  <p>POSIX threads are the default.  The optional DCE thread library is not
! supported, so <samp>--enable-threads=dce</samp> does not work.
  </p>
  <hr />
! <a name="x-x-linux-gnu"></a><a name="g_t*-*-linux-gnu"></a>
! <h3 class="heading">*-*-linux-gnu</h3>
! <p>The <code>.init_array</code> and <code>.fini_array</code> sections are enabled
  unconditionally which requires at least glibc 2.1 and binutils 2.12.
  </p>
  <p>Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present
--- 456,487 ----
  </p>
  <p>GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to
  run initializers and finalizers on the 64-bit port.  The 32-bit port
! uses the linker <samp class="option">+init</samp> and <samp class="option">+fini</samp> options for the same
  purpose.  The patches correct various problems with the +init/+fini
  options, including program core dumps.  Binutils 2.14 corrects a
  problem on the 64-bit port resulting from HP&rsquo;s non-standard use of
  the .init and .fini sections for array initializers and finalizers.
  </p>
! <p>Only the HP linker is supported for the &lsquo;<samp class="samp">hppa64-hp-hpux11*</samp>&rsquo; target.
  </p>
  <p>At this time, the GNU linker does not support the creation of long
  branch stubs.  As a result, it cannot successfully link binaries
  containing branch offsets larger than 8 megabytes.  In addition,
  there are problems linking shared libraries, linking executables
! with <samp class="option">-static</samp>, and with dwarf2 unwind and exception support.
  It also doesn&rsquo;t provide stubs for internal calls to global functions
  in shared libraries, so these calls cannot be overloaded.
  </p>
  <p>The HP dynamic loader does not support GNU symbol versioning, so symbol
  versioning is not supported.  It may be necessary to disable symbol
! versioning with <samp class="option">--disable-symvers</samp> when using GNU ld.
  </p>
  <p>POSIX threads are the default.  The optional DCE thread library is not
! supported, so <samp class="option">--enable-threads=dce</samp> does not work.
  </p>
  <hr />
! <a class="anchor" id="x-x-linux-gnu"></a><h3 class="heading" id="g_t*-*-linux-gnu"><span>*-*-linux-gnu<a class="copiable-link" href="#g_t*-*-linux-gnu"> &para;</a></span></h3>
! <p>The <code class="code">.init_array</code> and <code class="code">.fini_array</code> sections are enabled
  unconditionally which requires at least glibc 2.1 and binutils 2.12.
  </p>
  <p>Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present
*************** in glibc 2.2.5 and later.  More informat
*** 524,573 ****
  libstdc++-v3 documentation.
  </p>
  <hr />
! <a name="ix86-x-linux"></a><a name="i_003f86-*-linux*"></a>
! <h3 class="heading">i?86-*-linux*</h3>
  <p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
! See <a href="https://gcc.gnu.org/PR10877">bug 10877</a> for more information.
  </p>
  <p>If you receive Signal 11 errors when building on GNU/Linux, then it is
  possible you have a hardware problem.  Further information on this can be
! found on <a href="https://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
  </p>
  <hr />
! <a name="ix86-x-solaris2"></a><a name="i_003f86-*-solaris2*"></a>
! <h3 class="heading">i?86-*-solaris2*</h3>
  <p>Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
! with GCC 4.7, there is also a 64-bit &lsquo;<samp>amd64-*-solaris2*</samp>&rsquo; or
! &lsquo;<samp>x86_64-*-solaris2*</samp>&rsquo; configuration that corresponds to
! &lsquo;<samp>sparcv9-sun-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a name="ia64-x-linux"></a><a name="ia64-*-linux"></a>
! <h3 class="heading">ia64-*-linux</h3>
  <p>IA-64 processor (also known as IPF, or Itanium Processor Family)
  running GNU/Linux.
  </p>
  <p>If you are using the installed system libunwind library with
! <samp>--with-system-libunwind</samp>, then you must use libunwind 0.98 or
  later.
  </p>
  <hr />
! <a name="ia64-x-hpux"></a><a name="ia64-*-hpux*"></a>
! <h3 class="heading">ia64-*-hpux*</h3>
  <p>Building GCC on this target requires the GNU Assembler.  The bundled HP
  assembler will not work.  To prevent GCC from using the wrong assembler,
! the option <samp>--with-gnu-as</samp> may be necessary.
  </p>
  <hr />
  <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
! <a name="x-ibm-aix"></a><a name="g_t*-ibm-aix*"></a>
! <h3 class="heading">*-ibm-aix*</h3>
  <p>Support for AIX version 3 and older was discontinued in GCC 3.4.
  Support for AIX version 4.2 and older was discontinued in GCC 4.5.
  </p>
  <p>&ldquo;out of memory&rdquo; bootstrap failures may indicate a problem with
  process resource limits (ulimit).  Hard limits are configured in the
! <samp>/etc/security/limits</samp> system configuration file.
  </p>
  <p>GCC 4.9 and above require a C++ compiler for bootstrap.  IBM VAC++ / xlC
  cannot bootstrap GCC.  xlc can bootstrap an older version of GCC and
--- 489,533 ----
  libstdc++-v3 documentation.
  </p>
  <hr />
! <a class="anchor" id="ix86-x-linux"></a><h3 class="heading" id="i_003f86-*-linux*"><span>i?86-*-linux*<a class="copiable-link" href="#i_003f86-*-linux*"> &para;</a></span></h3>
  <p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
! See <a class="uref" href="https://gcc.gnu.org/PR10877">bug 10877</a> for more information.
  </p>
  <p>If you receive Signal 11 errors when building on GNU/Linux, then it is
  possible you have a hardware problem.  Further information on this can be
! found on <a class="uref" href="https://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
  </p>
  <hr />
! <a class="anchor" id="ix86-x-solaris2"></a><h3 class="heading" id="i_003f86-*-solaris2*"><span>i?86-*-solaris2*<a class="copiable-link" href="#i_003f86-*-solaris2*"> &para;</a></span></h3>
  <p>Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
! with GCC 4.7, there is also a 64-bit &lsquo;<samp class="samp">amd64-*-solaris2*</samp>&rsquo; or
! &lsquo;<samp class="samp">x86_64-*-solaris2*</samp>&rsquo; configuration that corresponds to
! &lsquo;<samp class="samp">sparcv9-sun-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a class="anchor" id="ia64-x-linux"></a><h3 class="heading" id="ia64-*-linux"><span>ia64-*-linux<a class="copiable-link" href="#ia64-*-linux"> &para;</a></span></h3>
  <p>IA-64 processor (also known as IPF, or Itanium Processor Family)
  running GNU/Linux.
  </p>
  <p>If you are using the installed system libunwind library with
! <samp class="option">--with-system-libunwind</samp>, then you must use libunwind 0.98 or
  later.
  </p>
  <hr />
! <a class="anchor" id="ia64-x-hpux"></a><h3 class="heading" id="ia64-*-hpux*"><span>ia64-*-hpux*<a class="copiable-link" href="#ia64-*-hpux*"> &para;</a></span></h3>
  <p>Building GCC on this target requires the GNU Assembler.  The bundled HP
  assembler will not work.  To prevent GCC from using the wrong assembler,
! the option <samp class="option">--with-gnu-as</samp> may be necessary.
  </p>
  <hr />
  <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
! <a class="anchor" id="x-ibm-aix"></a><h3 class="heading" id="g_t*-ibm-aix*"><span>*-ibm-aix*<a class="copiable-link" href="#g_t*-ibm-aix*"> &para;</a></span></h3>
  <p>Support for AIX version 3 and older was discontinued in GCC 3.4.
  Support for AIX version 4.2 and older was discontinued in GCC 4.5.
  </p>
  <p>&ldquo;out of memory&rdquo; bootstrap failures may indicate a problem with
  process resource limits (ulimit).  Hard limits are configured in the
! <samp class="file">/etc/security/limits</samp> system configuration file.
  </p>
  <p>GCC 4.9 and above require a C++ compiler for bootstrap.  IBM VAC++ / xlC
  cannot bootstrap GCC.  xlc can bootstrap an older version of GCC and
*************** G++ can bootstrap recent releases of GCC
*** 576,585 ****
  <p>GCC can bootstrap with recent versions of IBM XLC, but bootstrapping
  with an earlier release of GCC is recommended.  Bootstrapping with XLC
  requires a larger data segment, which can be enabled through the
! <var>LDR_CNTRL</var> environment variable, e.g.,
  </p>
! <div class="smallexample">
! <pre class="smallexample">% LDR_CNTRL=MAXDATA=0x50000000
  % export LDR_CNTRL
  </pre></div>
  
--- 536,545 ----
  <p>GCC can bootstrap with recent versions of IBM XLC, but bootstrapping
  with an earlier release of GCC is recommended.  Bootstrapping with XLC
  requires a larger data segment, which can be enabled through the
! <var class="var">LDR_CNTRL</var> environment variable, e.g.,
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% LDR_CNTRL=MAXDATA=0x50000000
  % export LDR_CNTRL
  </pre></div>
  
*************** sources.  One may delete GCC&rsquo;s &ld
*** 588,621 ****
  with a version of GCC built for an earlier release of AIX.
  </p>
  <p>To speed up the configuration phases of bootstrapping and installing GCC,
! one may use GNU Bash instead of AIX <code>/bin/sh</code>, e.g.,
  </p>
! <div class="smallexample">
! <pre class="smallexample">% CONFIG_SHELL=/opt/freeware/bin/bash
  % export CONFIG_SHELL
  </pre></div>
  
! <p>and then proceed as described in <a href="build.html">the build
  instructions</a>, where we strongly recommend specifying an absolute path
! to invoke <var>srcdir</var>/configure.
  </p>
  <p>Because GCC on AIX is built as a 32-bit executable by default,
  (although it can generate 64-bit programs) the GMP and MPFR libraries
  required by gfortran must be 32-bit libraries.  Building GMP and MPFR
  as static archive libraries works better than shared libraries.
  </p>
! <p>Errors involving <code>alloca</code> when building GCC generally are due
! to an incorrect definition of <code>CC</code> in the Makefile or mixing files
  compiled with the native C compiler and GCC.  During the stage1 phase of
! the build, the native AIX compiler <strong>must</strong> be invoked as <code>cc</code>
! (not <code>xlc</code>).  Once <code>configure</code> has been informed of
! <code>xlc</code>, one needs to use &lsquo;<samp>make distclean</samp>&rsquo; to remove the
! configure cache files and ensure that <code>CC</code> environment variable
! does not provide a definition that will confuse <code>configure</code>.
  If this error occurs during stage2 or later, then the problem most likely
  is the version of Make (see above).
  </p>
! <p>The native <code>as</code> and <code>ld</code> are recommended for
  bootstrapping on AIX.  The GNU Assembler, GNU Linker, and GNU
  Binutils version 2.20 is the minimum level that supports bootstrap on
  AIX 5.  The GNU Assembler has not been updated to support AIX 6&nbsp;or
--- 548,581 ----
  with a version of GCC built for an earlier release of AIX.
  </p>
  <p>To speed up the configuration phases of bootstrapping and installing GCC,
! one may use GNU Bash instead of AIX <code class="command">/bin/sh</code>, e.g.,
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% CONFIG_SHELL=/opt/freeware/bin/bash
  % export CONFIG_SHELL
  </pre></div>
  
! <p>and then proceed as described in <a class="uref" href="build.html">the build
  instructions</a>, where we strongly recommend specifying an absolute path
! to invoke <var class="var">srcdir</var>/configure.
  </p>
  <p>Because GCC on AIX is built as a 32-bit executable by default,
  (although it can generate 64-bit programs) the GMP and MPFR libraries
  required by gfortran must be 32-bit libraries.  Building GMP and MPFR
  as static archive libraries works better than shared libraries.
  </p>
! <p>Errors involving <code class="code">alloca</code> when building GCC generally are due
! to an incorrect definition of <code class="code">CC</code> in the Makefile or mixing files
  compiled with the native C compiler and GCC.  During the stage1 phase of
! the build, the native AIX compiler <strong class="strong">must</strong> be invoked as <code class="command">cc</code>
! (not <code class="command">xlc</code>).  Once <code class="command">configure</code> has been informed of
! <code class="command">xlc</code>, one needs to use &lsquo;<samp class="samp">make distclean</samp>&rsquo; to remove the
! configure cache files and ensure that <code class="env">CC</code> environment variable
! does not provide a definition that will confuse <code class="command">configure</code>.
  If this error occurs during stage2 or later, then the problem most likely
  is the version of Make (see above).
  </p>
! <p>The native <code class="command">as</code> and <code class="command">ld</code> are recommended for
  bootstrapping on AIX.  The GNU Assembler, GNU Linker, and GNU
  Binutils version 2.20 is the minimum level that supports bootstrap on
  AIX 5.  The GNU Assembler has not been updated to support AIX 6&nbsp;or
*************** IZ98477 for AIX 5.3 TL11 and IZ98134 for
*** 636,678 ****
  AIX 5.3 TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6,
  AIX 6.1 TL07 and AIX 7.1 TL01 should include the fix.
  </p>
! <p>Building <samp>libstdc++.a</samp> requires a fix for an AIX Assembler bug
  APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).  It also requires a
  fix for another AIX Assembler bug and a co-dependent AIX Archiver fix
  referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
  </p>
! <a name="TransferAixShobj"></a><p>&lsquo;<samp>libstdc++</samp>&rsquo; in GCC 3.4 increments the major version number of the
! shared object and GCC installation places the <samp>libstdc++.a</samp>
  shared library in a common location which will overwrite the and GCC
  3.3 version of the shared library.  Applications either need to be
  re-linked against the new shared library or the GCC 3.1 and GCC 3.3
! versions of the &lsquo;<samp>libstdc++</samp>&rsquo; shared object needs to be available
! to the AIX runtime loader.  The GCC 3.1 &lsquo;<samp>libstdc++.so.4</samp>&rsquo;, if
! present, and GCC 3.3 &lsquo;<samp>libstdc++.so.5</samp>&rsquo; shared objects can be
  installed for runtime dynamic loading using the following steps to set
! the &lsquo;<samp>F_LOADONLY</samp>&rsquo; flag in the shared object for <em>each</em>
! multilib <samp>libstdc++.a</samp> installed:
  </p>
  <p>Extract the shared objects from the currently installed
! <samp>libstdc++.a</samp> archive:
! </p><div class="smallexample">
! <pre class="smallexample">% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
! <p>Enable the &lsquo;<samp>F_LOADONLY</samp>&rsquo; flag so that the shared object will be
  available for runtime dynamic loading, but not linking:
! </p><div class="smallexample">
! <pre class="smallexample">% strip -e libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Archive the runtime-only shared object in the GCC 3.4
! <samp>libstdc++.a</samp> archive:
! </p><div class="smallexample">
! <pre class="smallexample">% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Eventually, the
! <a href="./configure.html#WithAixSoname"><samp>--with-aix-soname=svr4</samp></a>
  configure option may drop the need for this procedure for libraries that
  support it.
  </p>
--- 596,638 ----
  AIX 5.3 TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6,
  AIX 6.1 TL07 and AIX 7.1 TL01 should include the fix.
  </p>
! <p>Building <samp class="file">libstdc++.a</samp> requires a fix for an AIX Assembler bug
  APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).  It also requires a
  fix for another AIX Assembler bug and a co-dependent AIX Archiver fix
  referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
  </p>
! <a class="anchor" id="TransferAixShobj"></a><p>&lsquo;<samp class="samp">libstdc++</samp>&rsquo; in GCC 3.4 increments the major version number of the
! shared object and GCC installation places the <samp class="file">libstdc++.a</samp>
  shared library in a common location which will overwrite the and GCC
  3.3 version of the shared library.  Applications either need to be
  re-linked against the new shared library or the GCC 3.1 and GCC 3.3
! versions of the &lsquo;<samp class="samp">libstdc++</samp>&rsquo; shared object needs to be available
! to the AIX runtime loader.  The GCC 3.1 &lsquo;<samp class="samp">libstdc++.so.4</samp>&rsquo;, if
! present, and GCC 3.3 &lsquo;<samp class="samp">libstdc++.so.5</samp>&rsquo; shared objects can be
  installed for runtime dynamic loading using the following steps to set
! the &lsquo;<samp class="samp">F_LOADONLY</samp>&rsquo; flag in the shared object for <em class="emph">each</em>
! multilib <samp class="file">libstdc++.a</samp> installed:
  </p>
  <p>Extract the shared objects from the currently installed
! <samp class="file">libstdc++.a</samp> archive:
! </p><div class="example smallexample">
! <pre class="example-preformatted">% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
! <p>Enable the &lsquo;<samp class="samp">F_LOADONLY</samp>&rsquo; flag so that the shared object will be
  available for runtime dynamic loading, but not linking:
! </p><div class="example smallexample">
! <pre class="example-preformatted">% strip -e libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Archive the runtime-only shared object in the GCC 3.4
! <samp class="file">libstdc++.a</samp> archive:
! </p><div class="example smallexample">
! <pre class="example-preformatted">% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Eventually, the
! <a class="uref" href="./configure.html#WithAixSoname"><samp class="option">--with-aix-soname=svr4</samp></a>
  configure option may drop the need for this procedure for libraries that
  support it.
  </p>
*************** executable.
*** 688,833 ****
  to parse archive libraries did not handle the new format correctly.
  These routines are used by GCC and result in error messages during
  linking such as &ldquo;not a COFF file&rdquo;.  The version of the routines shipped
! with AIX 4.3.1 should work for a 32-bit environment.  The <samp>-g</samp>
  option of the archive command may be used to create archives of 32-bit
  objects using the original &ldquo;small format&rdquo;.  A correct version of the
  routines is shipped with AIX 4.3.2 and above.
  </p>
  <p>Some versions of the AIX binder (linker) can fail with a relocation
! overflow severe error when the <samp>-bbigtoc</samp> option is used to link
  GCC-produced object files into an executable that overflows the TOC.  A fix
  for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
  available from IBM Customer Support and from its
! <a href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U455193.
  </p>
  <p>The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
  with a segmentation fault when invoked by any version of GCC.  A fix for
  APAR IX87327 is available from IBM Customer Support and from its
! <a href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U461879.  This fix is incorporated in AIX 4.3.3 and above.
  </p>
  <p>The initial assembler shipped with AIX 4.3.0 generates incorrect object
  files.  A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
  TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
! <a href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U453956.  This fix is incorporated in AIX 4.3.1 and above.
  </p>
  <p>AIX provides National Language Support (NLS).  Compilers and assemblers
  use NLS to support locale-specific representations of various data
! formats including floating-point numbers (e.g., &lsquo;<samp>.</samp>&rsquo;  vs &lsquo;<samp>,</samp>&rsquo; for
  separating decimal fractions).  There have been problems reported where
  GCC does not produce the same floating-point formats that the assembler
! expects.  If one encounters this problem, set the <code>LANG</code>
! environment variable to &lsquo;<samp>C</samp>&rsquo; or &lsquo;<samp>En_US</samp>&rsquo;.
  </p>
! <p>A default can be specified with the <samp>-mcpu=<var>cpu_type</var></samp>
! switch and using the configure option <samp>--with-cpu-<var>cpu_type</var></samp>.
  </p>
  <hr />
! <a name="iq2000-x-elf"></a><a name="iq2000-*-elf"></a>
! <h3 class="heading">iq2000-*-elf</h3>
  <p>Vitesse IQ2000 processors.  These are used in embedded
  applications.  There are no standard Unix configurations.
  </p>
  <hr />
! <a name="lm32-x-elf"></a><a name="lm32-*-elf"></a>
! <h3 class="heading">lm32-*-elf</h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="lm32-x-uclinux"></a><a name="lm32-*-uclinux"></a>
! <h3 class="heading">lm32-*-uclinux</h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems running uClinux.
  </p>
  <hr />
! <a name="loongarch"></a><a name="LoongArch"></a>
! <h3 class="heading">LoongArch</h3>
  <p>LoongArch processor.
  The following LoongArch targets are available:
! </p><dl compact="compact">
! <dt><code>loongarch64-linux-gnu*</code></dt>
  <dd><p>LoongArch processor running GNU/Linux.  This target triplet may be coupled
  with a small set of possible suffixes to identify their default ABI type:
! </p><dl compact="compact">
! <dt><code>f64</code></dt>
! <dd><p>Uses <code>lp64d/base</code> ABI by default.
  </p></dd>
! <dt><code>f32</code></dt>
! <dd><p>Uses <code>lp64f/base</code> ABI by default.
  </p></dd>
! <dt><code>sf</code></dt>
! <dd><p>Uses <code>lp64s/base</code> ABI by default.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code>loongarch64-linux-gnu</code></dt>
! <dd><p>Same as <code>loongarch64-linux-gnuf64</code> for legacy support.
  </p></dd>
  </dl>
  
  <p>More information about LoongArch can be found at
! <a href="https://github.com/loongson/LoongArch-Documentation">https://github.com/loongson/LoongArch-Documentation</a>.
  </p>
  <hr />
! <a name="m32c-x-elf"></a><a name="m32c-*-elf"></a>
! <h3 class="heading">m32c-*-elf</h3>
  <p>Renesas M32C processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="m32r-x-elf"></a><a name="m32r-*-elf"></a>
! <h3 class="heading">m32r-*-elf</h3>
  <p>Renesas M32R processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="m68k-x-x"></a><a name="m68k-*-*"></a>
! <h3 class="heading">m68k-*-*</h3>
  <p>By default,
! &lsquo;<samp>m68k-*-elf*</samp>&rsquo;, &lsquo;<samp>m68k-*-rtems</samp>&rsquo;,  &lsquo;<samp>m68k-*-uclinux</samp>&rsquo; and
! &lsquo;<samp>m68k-*-linux</samp>&rsquo;
  build libraries for both M680x0 and ColdFire processors.  If you only
  need the M680x0 libraries, you can omit the ColdFire ones by passing
! <samp>--with-arch=m68k</samp> to <code>configure</code>.  Alternatively, you
! can omit the M680x0 libraries by passing <samp>--with-arch=cf</samp> to
! <code>configure</code>.  These targets default to 5206 or 5475 code as
  appropriate for the target system when
! configured with <samp>--with-arch=cf</samp> and 68020 code otherwise.
  </p>
! <p>The &lsquo;<samp>m68k-*-netbsd</samp>&rsquo; and
! &lsquo;<samp>m68k-*-openbsd</samp>&rsquo; targets also support the <samp>--with-arch</samp>
  option.  They will generate ColdFire CFV4e code when configured with
! <samp>--with-arch=cf</samp> and 68020 code otherwise.
  </p>
  <p>You can override the default processors listed above by configuring
! with <samp>--with-cpu=<var>target</var></samp>.  This <var>target</var> can either
! be a <samp>-mcpu</samp> argument or one of the following values:
! &lsquo;<samp>m68000</samp>&rsquo;, &lsquo;<samp>m68010</samp>&rsquo;, &lsquo;<samp>m68020</samp>&rsquo;, &lsquo;<samp>m68030</samp>&rsquo;,
! &lsquo;<samp>m68040</samp>&rsquo;, &lsquo;<samp>m68060</samp>&rsquo;, &lsquo;<samp>m68020-40</samp>&rsquo; and &lsquo;<samp>m68020-60</samp>&rsquo;.
  </p>
  <p>GCC requires at least binutils version 2.17 on these targets.
  </p>
  <hr />
! <a name="m68k-x-uclinux"></a><a name="m68k-*-uclinux"></a>
! <h3 class="heading">m68k-*-uclinux</h3>
  <p>GCC 4.3 changed the uClinux configuration so that it uses the
! &lsquo;<samp>m68k-linux-gnu</samp>&rsquo; ABI rather than the &lsquo;<samp>m68k-elf</samp>&rsquo; ABI.
  It also added improved support for C++ and flat shared libraries,
  both of which were ABI changes.
  </p>
  <hr />
! <a name="microblaze-x-elf"></a><a name="microblaze-*-elf"></a>
! <h3 class="heading">microblaze-*-elf</h3>
  <p>Xilinx MicroBlaze processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="mips-x-x"></a><a name="mips-*-*"></a>
! <h3 class="heading">mips-*-*</h3>
  <p>If on a MIPS system you get an error message saying &ldquo;does not have gp
  sections for all it&rsquo;s [sic] sectons [sic]&rdquo;, don&rsquo;t worry about it.  This
  happens whenever you use GAS with the MIPS linker, but there is not
--- 648,783 ----
  to parse archive libraries did not handle the new format correctly.
  These routines are used by GCC and result in error messages during
  linking such as &ldquo;not a COFF file&rdquo;.  The version of the routines shipped
! with AIX 4.3.1 should work for a 32-bit environment.  The <samp class="option">-g</samp>
  option of the archive command may be used to create archives of 32-bit
  objects using the original &ldquo;small format&rdquo;.  A correct version of the
  routines is shipped with AIX 4.3.2 and above.
  </p>
  <p>Some versions of the AIX binder (linker) can fail with a relocation
! overflow severe error when the <samp class="option">-bbigtoc</samp> option is used to link
  GCC-produced object files into an executable that overflows the TOC.  A fix
  for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
  available from IBM Customer Support and from its
! <a class="uref" href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U455193.
  </p>
  <p>The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
  with a segmentation fault when invoked by any version of GCC.  A fix for
  APAR IX87327 is available from IBM Customer Support and from its
! <a class="uref" href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U461879.  This fix is incorporated in AIX 4.3.3 and above.
  </p>
  <p>The initial assembler shipped with AIX 4.3.0 generates incorrect object
  files.  A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
  TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
! <a class="uref" href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U453956.  This fix is incorporated in AIX 4.3.1 and above.
  </p>
  <p>AIX provides National Language Support (NLS).  Compilers and assemblers
  use NLS to support locale-specific representations of various data
! formats including floating-point numbers (e.g., &lsquo;<samp class="samp">.</samp>&rsquo;  vs &lsquo;<samp class="samp">,</samp>&rsquo; for
  separating decimal fractions).  There have been problems reported where
  GCC does not produce the same floating-point formats that the assembler
! expects.  If one encounters this problem, set the <code class="env">LANG</code>
! environment variable to &lsquo;<samp class="samp">C</samp>&rsquo; or &lsquo;<samp class="samp">En_US</samp>&rsquo;.
  </p>
! <p>A default can be specified with the <samp class="option">-mcpu=<var class="var">cpu_type</var></samp>
! switch and using the configure option <samp class="option">--with-cpu-<var class="var">cpu_type</var></samp>.
  </p>
  <hr />
! <a class="anchor" id="iq2000-x-elf"></a><h3 class="heading" id="iq2000-*-elf"><span>iq2000-*-elf<a class="copiable-link" href="#iq2000-*-elf"> &para;</a></span></h3>
  <p>Vitesse IQ2000 processors.  These are used in embedded
  applications.  There are no standard Unix configurations.
  </p>
  <hr />
! <a class="anchor" id="lm32-x-elf"></a><h3 class="heading" id="lm32-*-elf"><span>lm32-*-elf<a class="copiable-link" href="#lm32-*-elf"> &para;</a></span></h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="lm32-x-uclinux"></a><h3 class="heading" id="lm32-*-uclinux"><span>lm32-*-uclinux<a class="copiable-link" href="#lm32-*-uclinux"> &para;</a></span></h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems running uClinux.
  </p>
  <hr />
! <a class="anchor" id="loongarch"></a><h3 class="heading" id="LoongArch"><span>LoongArch<a class="copiable-link" href="#LoongArch"> &para;</a></span></h3>
  <p>LoongArch processor.
  The following LoongArch targets are available:
! </p><dl class="table">
! <dt><code class="code">loongarch64-linux-gnu*</code></dt>
  <dd><p>LoongArch processor running GNU/Linux.  This target triplet may be coupled
  with a small set of possible suffixes to identify their default ABI type:
! </p><dl class="table">
! <dt><code class="code">f64</code></dt>
! <dd><p>Uses <code class="code">lp64d/base</code> ABI by default.
  </p></dd>
! <dt><code class="code">f32</code></dt>
! <dd><p>Uses <code class="code">lp64f/base</code> ABI by default.
  </p></dd>
! <dt><code class="code">sf</code></dt>
! <dd><p>Uses <code class="code">lp64s/base</code> ABI by default.
  </p></dd>
  </dl>
  
  </dd>
! <dt><code class="code">loongarch64-linux-gnu</code></dt>
! <dd><p>Same as <code class="code">loongarch64-linux-gnuf64</code> for legacy support.
  </p></dd>
  </dl>
  
  <p>More information about LoongArch can be found at
! <a class="uref" href="https://github.com/loongson/LoongArch-Documentation">https://github.com/loongson/LoongArch-Documentation</a>.
  </p>
  <hr />
! <a class="anchor" id="m32c-x-elf"></a><h3 class="heading" id="m32c-*-elf"><span>m32c-*-elf<a class="copiable-link" href="#m32c-*-elf"> &para;</a></span></h3>
  <p>Renesas M32C processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="m32r-x-elf"></a><h3 class="heading" id="m32r-*-elf"><span>m32r-*-elf<a class="copiable-link" href="#m32r-*-elf"> &para;</a></span></h3>
  <p>Renesas M32R processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="m68k-x-x"></a><h3 class="heading" id="m68k-*-*"><span>m68k-*-*<a class="copiable-link" href="#m68k-*-*"> &para;</a></span></h3>
  <p>By default,
! &lsquo;<samp class="samp">m68k-*-elf*</samp>&rsquo;, &lsquo;<samp class="samp">m68k-*-rtems</samp>&rsquo;,  &lsquo;<samp class="samp">m68k-*-uclinux</samp>&rsquo; and
! &lsquo;<samp class="samp">m68k-*-linux</samp>&rsquo;
  build libraries for both M680x0 and ColdFire processors.  If you only
  need the M680x0 libraries, you can omit the ColdFire ones by passing
! <samp class="option">--with-arch=m68k</samp> to <code class="command">configure</code>.  Alternatively, you
! can omit the M680x0 libraries by passing <samp class="option">--with-arch=cf</samp> to
! <code class="command">configure</code>.  These targets default to 5206 or 5475 code as
  appropriate for the target system when
! configured with <samp class="option">--with-arch=cf</samp> and 68020 code otherwise.
  </p>
! <p>The &lsquo;<samp class="samp">m68k-*-netbsd</samp>&rsquo; and
! &lsquo;<samp class="samp">m68k-*-openbsd</samp>&rsquo; targets also support the <samp class="option">--with-arch</samp>
  option.  They will generate ColdFire CFV4e code when configured with
! <samp class="option">--with-arch=cf</samp> and 68020 code otherwise.
  </p>
  <p>You can override the default processors listed above by configuring
! with <samp class="option">--with-cpu=<var class="var">target</var></samp>.  This <var class="var">target</var> can either
! be a <samp class="option">-mcpu</samp> argument or one of the following values:
! &lsquo;<samp class="samp">m68000</samp>&rsquo;, &lsquo;<samp class="samp">m68010</samp>&rsquo;, &lsquo;<samp class="samp">m68020</samp>&rsquo;, &lsquo;<samp class="samp">m68030</samp>&rsquo;,
! &lsquo;<samp class="samp">m68040</samp>&rsquo;, &lsquo;<samp class="samp">m68060</samp>&rsquo;, &lsquo;<samp class="samp">m68020-40</samp>&rsquo; and &lsquo;<samp class="samp">m68020-60</samp>&rsquo;.
  </p>
  <p>GCC requires at least binutils version 2.17 on these targets.
  </p>
  <hr />
! <a class="anchor" id="m68k-x-uclinux"></a><h3 class="heading" id="m68k-*-uclinux"><span>m68k-*-uclinux<a class="copiable-link" href="#m68k-*-uclinux"> &para;</a></span></h3>
  <p>GCC 4.3 changed the uClinux configuration so that it uses the
! &lsquo;<samp class="samp">m68k-linux-gnu</samp>&rsquo; ABI rather than the &lsquo;<samp class="samp">m68k-elf</samp>&rsquo; ABI.
  It also added improved support for C++ and flat shared libraries,
  both of which were ABI changes.
  </p>
  <hr />
! <a class="anchor" id="microblaze-x-elf"></a><h3 class="heading" id="microblaze-*-elf"><span>microblaze-*-elf<a class="copiable-link" href="#microblaze-*-elf"> &para;</a></span></h3>
  <p>Xilinx MicroBlaze processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="mips-x-x"></a><h3 class="heading" id="mips-*-*"><span>mips-*-*<a class="copiable-link" href="#mips-*-*"> &para;</a></span></h3>
  <p>If on a MIPS system you get an error message saying &ldquo;does not have gp
  sections for all it&rsquo;s [sic] sectons [sic]&rdquo;, don&rsquo;t worry about it.  This
  happens whenever you use GAS with the MIPS linker, but there is not
*************** optional, and there should not be a warn
*** 839,1132 ****
  </p>
  <p>The libstdc++ atomic locking routines for MIPS targets requires MIPS II
  and later.  A patch went in just after the GCC 3.3 release to
! make &lsquo;<samp>mips*-*-*</samp>&rsquo; use the generic implementation instead.  You can also
! configure for &lsquo;<samp>mipsel-elf</samp>&rsquo; as a workaround.  The
! &lsquo;<samp>mips*-*-linux*</samp>&rsquo; target continues to use the MIPS II routines.  More
  work on this is expected in future releases.
  </p>
  
! <p>The built-in <code>__sync_*</code> functions are available on MIPS II and
! later systems and others that support the &lsquo;<samp>ll</samp>&rsquo;, &lsquo;<samp>sc</samp>&rsquo; and
! &lsquo;<samp>sync</samp>&rsquo; instructions.  This can be overridden by passing
! <samp>--with-llsc</samp> or <samp>--without-llsc</samp> when configuring GCC.
  Since the Linux kernel emulates these instructions if they are
! missing, the default for &lsquo;<samp>mips*-*-linux*</samp>&rsquo; targets is
! <samp>--with-llsc</samp>.  The <samp>--with-llsc</samp> and
! <samp>--without-llsc</samp> configure options may be overridden at compile
! time by passing the <samp>-mllsc</samp> or <samp>-mno-llsc</samp> options to
  the compiler.
  </p>
  <p>MIPS systems check for division by zero (unless
! <samp>-mno-check-zero-division</samp> is passed to the compiler) by
  generating either a conditional trap or a break instruction.  Using
  trap results in smaller code, but is only supported on MIPS II and
  later.  Also, some versions of the Linux kernel have a bug that
! prevents trap from generating the proper signal (<code>SIGFPE</code>).  To enable
! the use of break, use the <samp>--with-divide=breaks</samp>
! <code>configure</code> option when configuring GCC.  The default is to
  use traps on systems that support them.
  </p>
  <hr />
! <a name="moxie-x-elf"></a><a name="moxie-*-elf"></a>
! <h3 class="heading">moxie-*-elf</h3>
  <p>The moxie processor.
  </p>
  <hr />
! <a name="msp430-x-elf"></a><a name="msp430-*-elf*"></a>
! <h3 class="heading">msp430-*-elf*</h3>
  <p>TI MSP430 processor.
  This configuration is intended for embedded systems.
  </p>
! <p>&lsquo;<samp>msp430-*-elf</samp>&rsquo; is the standard configuration with most GCC
  features enabled by default.
  </p>
! <p>&lsquo;<samp>msp430-*-elfbare</samp>&rsquo; is tuned for a bare-metal environment, and disables
  features related to shared libraries and other functionality not used for
  this device.  This reduces code and data usage of the GCC libraries, resulting
  in a minimal run-time environment by default.
  </p>
  <p>Features disabled by default include:
! </p><ul>
! <li> transactional memory
! </li><li> __cxa_atexit
  </li></ul>
  
  <hr />
! <a name="nds32le-x-elf"></a><a name="nds32le-*-elf"></a>
! <h3 class="heading">nds32le-*-elf</h3>
  <p>Andes NDS32 target in little endian mode.
  </p>
  <hr />
! <a name="nds32be-x-elf"></a><a name="nds32be-*-elf"></a>
! <h3 class="heading">nds32be-*-elf</h3>
  <p>Andes NDS32 target in big endian mode.
  </p>
  <hr />
! <a name="nvptx-x-none"></a><a name="nvptx-*-none"></a>
! <h3 class="heading">nvptx-*-none</h3>
  <p>Nvidia PTX target.
  </p>
  <p>Instead of GNU binutils, you will need to install
! <a href="https://github.com/SourceryTools/nvptx-tools">nvptx-tools</a>.
  Tell GCC where to find it:
! <samp>--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin</samp>.
  </p>
  <p>You will need newlib 4.3.0 or later.  It can be
  automatically built together with GCC.  For this, add a symbolic link
! to nvptx-newlib&rsquo;s <samp>newlib</samp> directory to the directory containing
  the GCC sources.
  </p>
! <p>Use the <samp>--disable-sjlj-exceptions</samp> and
! <samp>--enable-newlib-io-long-long</samp> options when configuring.
  </p>
! <p>The <samp>--with-arch</samp> option may be specified to override the
! default value for the <samp>-march</samp> option, and to also build
  corresponding target libraries.
! The default is <samp>--with-arch=sm_30</samp>.
  </p>
! <p>For example, if <samp>--with-arch=sm_70</samp> is specified,
! <samp>-march=sm_30</samp> and <samp>-march=sm_70</samp> target libraries are
! built, and code generation defaults to <samp>-march=sm_70</samp>.
  </p>
  <hr />
! <a name="or1k-x-elf"></a><a name="or1k-*-elf"></a>
! <h3 class="heading">or1k-*-elf</h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="or1k-x-linux"></a><a name="or1k-*-linux"></a>
! <h3 class="heading">or1k-*-linux</h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  </p>
  <hr />
! <a name="powerpc-x-x"></a><a name="powerpc-*-*"></a>
! <h3 class="heading">powerpc-*-*</h3>
! <p>You can specify a default version for the <samp>-mcpu=<var>cpu_type</var></samp>
! switch by using the configure option <samp>--with-cpu-<var>cpu_type</var></samp>.
  </p>
  <p>You will need GNU binutils 2.20 or newer.
  </p>
  <hr />
! <a name="powerpc-x-darwin"></a><a name="powerpc-*-darwin*"></a>
! <h3 class="heading">powerpc-*-darwin*</h3>
  <p>PowerPC running Darwin (Mac OS X kernel).
  </p>
  <p>Pre-installed versions of Mac OS X may not include any developer tools,
  meaning that you will not be able to build GCC from source.  Tool
  binaries are available at
! <a href="https://opensource.apple.com">https://opensource.apple.com</a>.
  </p>
  <p>This version of GCC requires at least cctools-590.36.  The
  cctools-590.36 package referenced from
! <a href="https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html">https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html</a> will not work
  on systems older than 10.3.9 (aka darwin7.9.0).
  </p>
  <hr />
! <a name="powerpc-x-elf"></a><a name="powerpc-*-elf"></a>
! <h3 class="heading">powerpc-*-elf</h3>
  <p>PowerPC system in big endian mode, running System V.4.
  </p>
  <hr />
! <a name="powerpc-x-linux-gnu"></a><a name="powerpc*-*-linux-gnu*"></a>
! <h3 class="heading">powerpc*-*-linux-gnu*</h3>
  <p>PowerPC system in big endian mode running Linux.
  </p>
  <hr />
! <a name="powerpc-x-netbsd"></a><a name="powerpc-*-netbsd*"></a>
! <h3 class="heading">powerpc-*-netbsd*</h3>
  <p>PowerPC system in big endian mode running NetBSD.
  </p>
  <hr />
! <a name="powerpc-x-eabisim"></a><a name="powerpc-*-eabisim"></a>
! <h3 class="heading">powerpc-*-eabisim</h3>
  <p>Embedded PowerPC system in big endian mode for use in running under the
  PSIM simulator.
  </p>
  <hr />
! <a name="powerpc-x-eabi"></a><a name="powerpc-*-eabi"></a>
! <h3 class="heading">powerpc-*-eabi</h3>
  <p>Embedded PowerPC system in big endian mode.
  </p>
  <hr />
! <a name="powerpcle-x-elf"></a><a name="powerpcle-*-elf"></a>
! <h3 class="heading">powerpcle-*-elf</h3>
  <p>PowerPC system in little endian mode, running System V.4.
  </p>
  <hr />
! <a name="powerpcle-x-eabisim"></a><a name="powerpcle-*-eabisim"></a>
! <h3 class="heading">powerpcle-*-eabisim</h3>
  <p>Embedded PowerPC system in little endian mode for use in running under
  the PSIM simulator.
  </p>
  <hr />
! <a name="powerpcle-x-eabi"></a><a name="powerpcle-*-eabi"></a>
! <h3 class="heading">powerpcle-*-eabi</h3>
  <p>Embedded PowerPC system in little endian mode.
  </p>
  <hr />
! <a name="rl78-x-elf"></a><a name="rl78-*-elf"></a>
! <h3 class="heading">rl78-*-elf</h3>
  <p>The Renesas RL78 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="riscv32-x-elf"></a><a name="riscv32-*-elf"></a>
! <h3 class="heading">riscv32-*-elf</h3>
  <p>The RISC-V RV32 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="riscv32-x-linux"></a><a name="riscv32-*-linux"></a>
! <h3 class="heading">riscv32-*-linux</h3>
  <p>The RISC-V RV32 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="riscv64-x-elf"></a><a name="riscv64-*-elf"></a>
! <h3 class="heading">riscv64-*-elf</h3>
  <p>The RISC-V RV64 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="riscv64-x-linux"></a><a name="riscv64-*-linux"></a>
! <h3 class="heading">riscv64-*-linux</h3>
  <p>The RISC-V RV64 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="rx-x-elf"></a><a name="rx-*-elf"></a>
! <h3 class="heading">rx-*-elf</h3>
  <p>The Renesas RX processor.
  </p>
  <hr />
! <a name="s390-x-linux"></a><a name="s390-*-linux*"></a>
! <h3 class="heading">s390-*-linux*</h3>
  <p>S/390 system running GNU/Linux for S/390.
  </p>
  <hr />
! <a name="s390x-x-linux"></a><a name="s390x-*-linux*"></a>
! <h3 class="heading">s390x-*-linux*</h3>
  <p>zSeries system (64-bit) running GNU/Linux for zSeries.
  </p>
  <hr />
! <a name="s390x-ibm-tpf"></a><a name="s390x-ibm-tpf*"></a>
! <h3 class="heading">s390x-ibm-tpf*</h3>
  <p>zSeries system (64-bit) running TPF.  This platform is
  supported as cross-compilation target only.
  </p>
  <hr />
! <a name="x-x-solaris2"></a><a name="g_t*-*-solaris2*"></a>
! <h3 class="heading">*-*-solaris2*</h3>
  <p>Support for Solaris 11.3 and earlier has been obsoleted in GCC 13, but
! can still be enabled by configuring with <samp>--enable-obsolete</samp>.
  Support for Solaris 10 has been removed in GCC 10.  Support for Solaris
  9 has been removed in GCC 5.  Support for Solaris 8 has been removed in
  GCC 4.8.  Support for Solaris 7 has been removed in GCC 4.6.
  </p>
  <p>Solaris 11.3 provides GCC 4.5.2, 4.7.3, and 4.8.2 as
! <code>/usr/gcc/4.5/bin/gcc</code> or similar.  Solaris 11.4
  provides one or more of GCC 5, 7, 9, 10, 11, and 12.
  </p>
! <p>You need to install the <code>system/header</code>, <code>system/linker</code>, and
! <code>developer/assembler</code> packages.
  </p>
! <p>Trying to use the compatibility tools in <samp>/usr/ucb</samp>, from the
! <code>compatibility/ucb</code> package, to install GCC has been observed to
! cause trouble.  The fix is to remove <samp>/usr/ucb</samp> from your
! <code>PATH</code>.
  </p>
  <p>The build process works more smoothly with the legacy Solaris tools so,
! if you have <samp>/usr/xpg4/bin</samp> in your <code>PATH</code>, we recommend that
! you place <samp>/usr/bin</samp> before <samp>/usr/xpg4/bin</samp> for the duration
  of the build.
  </p>
  <p>We recommend the use of the Solaris assembler or the GNU assembler, in
  conjunction with the Solaris linker.
  </p>
! <p>The GNU <code>as</code> versions included in Solaris 11.3, from GNU
! binutils 2.23.1 or newer (in <samp>/usr/bin/gas</samp> and
! <samp>/usr/gnu/bin/as</samp>), are known to work.  The version from GNU
  binutils 2.40 is known to work as well.  Recent versions of the Solaris
! assembler in <samp>/usr/bin/as</samp> work almost as well, though.  To use GNU
! <code>as</code>, configure with the options <samp>--with-gnu-as
  --with-as=/usr/gnu/bin/as</samp>.
  </p>
  <p>For linking, the Solaris linker is preferred.  If you want to use the
  GNU linker instead, the version in Solaris 11.3, from GNU binutils
! 2.23.1 or newer (in <samp>/usr/gnu/bin/ld</samp> and <samp>/usr/bin/gld</samp>),
  works, as does the version from GNU binutils 2.40.  However, it
  generally lacks platform specific features, so better stay with Solaris
! <code>ld</code>.  To use the LTO linker plugin
! (<samp>-fuse-linker-plugin</samp>) with GNU <code>ld</code>, GNU binutils
! <em>must</em> be configured with <samp>--enable-largefile</samp>.  To use
! Solaris <code>ld</code>, we recommend to configure with
! <samp>--without-gnu-ld --with-ld=/usr/bin/ld</samp> to guarantee the
! right linker is found irrespective of the user&rsquo;s <code>PATH</code>.
  </p>
  <p>Note that your mileage may vary if you use a combination of the GNU
! tools and the Solaris tools: while the combination GNU <code>as</code> and
! Solaris <code>ld</code> works well, the reverse combination Solaris
! <code>as</code> with GNU <code>ld</code> may fail to build or cause memory
  corruption at runtime in some cases for C++ programs.
  </p>
! <p>To enable symbol versioning in &lsquo;<samp>libstdc++</samp>&rsquo; and other runtime
  libraries with the Solaris linker, you need to have any version of GNU
! <code>c++filt</code>, which is part of GNU binutils.  Symbol versioning
  will be disabled if no appropriate version is found.  Solaris
! <code>c++filt</code> from the Solaris Studio compilers does <em>not</em>
  work.
  </p>
  <p>In order to build the GNU Ada compiler, GNAT, a working GNAT is needed.
  Since Solaris 11.4 SRU 39, GNAT 11 or 12 is bundled in the
! <code>developer/gcc/gcc-gnat</code> package.
  </p>
! <p>In order to build the GNU D compiler, GDC, a working &lsquo;<samp>libphobos</samp>&rsquo; is
  needed.  That library wasn&rsquo;t built by default in GCC 9&ndash;11 on SPARC, or
  on x86 when the Solaris assembler is used, but can be enabled by
! configuring with <samp>--enable-libphobos</samp>.  Also, GDC 9.4.0 is
  required on x86, while GDC 9.3.0 is known to work on SPARC.
  </p>
  <p>The versions of the GNU Multiple Precision Library (GMP), the MPFR
--- 789,1055 ----
  </p>
  <p>The libstdc++ atomic locking routines for MIPS targets requires MIPS II
  and later.  A patch went in just after the GCC 3.3 release to
! make &lsquo;<samp class="samp">mips*-*-*</samp>&rsquo; use the generic implementation instead.  You can also
! configure for &lsquo;<samp class="samp">mipsel-elf</samp>&rsquo; as a workaround.  The
! &lsquo;<samp class="samp">mips*-*-linux*</samp>&rsquo; target continues to use the MIPS II routines.  More
  work on this is expected in future releases.
  </p>
  
! <p>The built-in <code class="code">__sync_*</code> functions are available on MIPS II and
! later systems and others that support the &lsquo;<samp class="samp">ll</samp>&rsquo;, &lsquo;<samp class="samp">sc</samp>&rsquo; and
! &lsquo;<samp class="samp">sync</samp>&rsquo; instructions.  This can be overridden by passing
! <samp class="option">--with-llsc</samp> or <samp class="option">--without-llsc</samp> when configuring GCC.
  Since the Linux kernel emulates these instructions if they are
! missing, the default for &lsquo;<samp class="samp">mips*-*-linux*</samp>&rsquo; targets is
! <samp class="option">--with-llsc</samp>.  The <samp class="option">--with-llsc</samp> and
! <samp class="option">--without-llsc</samp> configure options may be overridden at compile
! time by passing the <samp class="option">-mllsc</samp> or <samp class="option">-mno-llsc</samp> options to
  the compiler.
  </p>
  <p>MIPS systems check for division by zero (unless
! <samp class="option">-mno-check-zero-division</samp> is passed to the compiler) by
  generating either a conditional trap or a break instruction.  Using
  trap results in smaller code, but is only supported on MIPS II and
  later.  Also, some versions of the Linux kernel have a bug that
! prevents trap from generating the proper signal (<code class="code">SIGFPE</code>).  To enable
! the use of break, use the <samp class="option">--with-divide=breaks</samp>
! <code class="command">configure</code> option when configuring GCC.  The default is to
  use traps on systems that support them.
  </p>
  <hr />
! <a class="anchor" id="moxie-x-elf"></a><h3 class="heading" id="moxie-*-elf"><span>moxie-*-elf<a class="copiable-link" href="#moxie-*-elf"> &para;</a></span></h3>
  <p>The moxie processor.
  </p>
  <hr />
! <a class="anchor" id="msp430-x-elf"></a><h3 class="heading" id="msp430-*-elf*"><span>msp430-*-elf*<a class="copiable-link" href="#msp430-*-elf*"> &para;</a></span></h3>
  <p>TI MSP430 processor.
  This configuration is intended for embedded systems.
  </p>
! <p>&lsquo;<samp class="samp">msp430-*-elf</samp>&rsquo; is the standard configuration with most GCC
  features enabled by default.
  </p>
! <p>&lsquo;<samp class="samp">msp430-*-elfbare</samp>&rsquo; is tuned for a bare-metal environment, and disables
  features related to shared libraries and other functionality not used for
  this device.  This reduces code and data usage of the GCC libraries, resulting
  in a minimal run-time environment by default.
  </p>
  <p>Features disabled by default include:
! </p><ul class="itemize mark-bullet">
! <li>transactional memory
! </li><li>__cxa_atexit
  </li></ul>
  
  <hr />
! <a class="anchor" id="nds32le-x-elf"></a><h3 class="heading" id="nds32le-*-elf"><span>nds32le-*-elf<a class="copiable-link" href="#nds32le-*-elf"> &para;</a></span></h3>
  <p>Andes NDS32 target in little endian mode.
  </p>
  <hr />
! <a class="anchor" id="nds32be-x-elf"></a><h3 class="heading" id="nds32be-*-elf"><span>nds32be-*-elf<a class="copiable-link" href="#nds32be-*-elf"> &para;</a></span></h3>
  <p>Andes NDS32 target in big endian mode.
  </p>
  <hr />
! <a class="anchor" id="nvptx-x-none"></a><h3 class="heading" id="nvptx-*-none"><span>nvptx-*-none<a class="copiable-link" href="#nvptx-*-none"> &para;</a></span></h3>
  <p>Nvidia PTX target.
  </p>
  <p>Instead of GNU binutils, you will need to install
! <a class="uref" href="https://github.com/SourceryTools/nvptx-tools">nvptx-tools</a>.
  Tell GCC where to find it:
! <samp class="option">--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin</samp>.
  </p>
  <p>You will need newlib 4.3.0 or later.  It can be
  automatically built together with GCC.  For this, add a symbolic link
! to nvptx-newlib&rsquo;s <samp class="file">newlib</samp> directory to the directory containing
  the GCC sources.
  </p>
! <p>Use the <samp class="option">--disable-sjlj-exceptions</samp> and
! <samp class="option">--enable-newlib-io-long-long</samp> options when configuring.
  </p>
! <p>The <samp class="option">--with-arch</samp> option may be specified to override the
! default value for the <samp class="option">-march</samp> option, and to also build
  corresponding target libraries.
! The default is <samp class="option">--with-arch=sm_30</samp>.
  </p>
! <p>For example, if <samp class="option">--with-arch=sm_70</samp> is specified,
! <samp class="option">-march=sm_30</samp> and <samp class="option">-march=sm_70</samp> target libraries are
! built, and code generation defaults to <samp class="option">-march=sm_70</samp>.
  </p>
  <hr />
! <a class="anchor" id="or1k-x-elf"></a><h3 class="heading" id="or1k-*-elf"><span>or1k-*-elf<a class="copiable-link" href="#or1k-*-elf"> &para;</a></span></h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="or1k-x-linux"></a><h3 class="heading" id="or1k-*-linux"><span>or1k-*-linux<a class="copiable-link" href="#or1k-*-linux"> &para;</a></span></h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-x"></a><h3 class="heading" id="powerpc-*-*"><span>powerpc-*-*<a class="copiable-link" href="#powerpc-*-*"> &para;</a></span></h3>
! <p>You can specify a default version for the <samp class="option">-mcpu=<var class="var">cpu_type</var></samp>
! switch by using the configure option <samp class="option">--with-cpu-<var class="var">cpu_type</var></samp>.
  </p>
  <p>You will need GNU binutils 2.20 or newer.
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-darwin"></a><h3 class="heading" id="powerpc-*-darwin*"><span>powerpc-*-darwin*<a class="copiable-link" href="#powerpc-*-darwin*"> &para;</a></span></h3>
  <p>PowerPC running Darwin (Mac OS X kernel).
  </p>
  <p>Pre-installed versions of Mac OS X may not include any developer tools,
  meaning that you will not be able to build GCC from source.  Tool
  binaries are available at
! <a class="uref" href="https://opensource.apple.com">https://opensource.apple.com</a>.
  </p>
  <p>This version of GCC requires at least cctools-590.36.  The
  cctools-590.36 package referenced from
! <a class="uref" href="https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html">https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html</a> will not work
  on systems older than 10.3.9 (aka darwin7.9.0).
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-elf"></a><h3 class="heading" id="powerpc-*-elf"><span>powerpc-*-elf<a class="copiable-link" href="#powerpc-*-elf"> &para;</a></span></h3>
  <p>PowerPC system in big endian mode, running System V.4.
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-linux-gnu"></a><h3 class="heading" id="powerpc*-*-linux-gnu*"><span>powerpc*-*-linux-gnu*<a class="copiable-link" href="#powerpc*-*-linux-gnu*"> &para;</a></span></h3>
  <p>PowerPC system in big endian mode running Linux.
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-netbsd"></a><h3 class="heading" id="powerpc-*-netbsd*"><span>powerpc-*-netbsd*<a class="copiable-link" href="#powerpc-*-netbsd*"> &para;</a></span></h3>
  <p>PowerPC system in big endian mode running NetBSD.
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-eabisim"></a><h3 class="heading" id="powerpc-*-eabisim"><span>powerpc-*-eabisim<a class="copiable-link" href="#powerpc-*-eabisim"> &para;</a></span></h3>
  <p>Embedded PowerPC system in big endian mode for use in running under the
  PSIM simulator.
  </p>
  <hr />
! <a class="anchor" id="powerpc-x-eabi"></a><h3 class="heading" id="powerpc-*-eabi"><span>powerpc-*-eabi<a class="copiable-link" href="#powerpc-*-eabi"> &para;</a></span></h3>
  <p>Embedded PowerPC system in big endian mode.
  </p>
  <hr />
! <a class="anchor" id="powerpcle-x-elf"></a><h3 class="heading" id="powerpcle-*-elf"><span>powerpcle-*-elf<a class="copiable-link" href="#powerpcle-*-elf"> &para;</a></span></h3>
  <p>PowerPC system in little endian mode, running System V.4.
  </p>
  <hr />
! <a class="anchor" id="powerpcle-x-eabisim"></a><h3 class="heading" id="powerpcle-*-eabisim"><span>powerpcle-*-eabisim<a class="copiable-link" href="#powerpcle-*-eabisim"> &para;</a></span></h3>
  <p>Embedded PowerPC system in little endian mode for use in running under
  the PSIM simulator.
  </p>
  <hr />
! <a class="anchor" id="powerpcle-x-eabi"></a><h3 class="heading" id="powerpcle-*-eabi"><span>powerpcle-*-eabi<a class="copiable-link" href="#powerpcle-*-eabi"> &para;</a></span></h3>
  <p>Embedded PowerPC system in little endian mode.
  </p>
  <hr />
! <a class="anchor" id="rl78-x-elf"></a><h3 class="heading" id="rl78-*-elf"><span>rl78-*-elf<a class="copiable-link" href="#rl78-*-elf"> &para;</a></span></h3>
  <p>The Renesas RL78 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="riscv32-x-elf"></a><h3 class="heading" id="riscv32-*-elf"><span>riscv32-*-elf<a class="copiable-link" href="#riscv32-*-elf"> &para;</a></span></h3>
  <p>The RISC-V RV32 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a class="anchor" id="riscv32-x-linux"></a><h3 class="heading" id="riscv32-*-linux"><span>riscv32-*-linux<a class="copiable-link" href="#riscv32-*-linux"> &para;</a></span></h3>
  <p>The RISC-V RV32 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a class="anchor" id="riscv64-x-elf"></a><h3 class="heading" id="riscv64-*-elf"><span>riscv64-*-elf<a class="copiable-link" href="#riscv64-*-elf"> &para;</a></span></h3>
  <p>The RISC-V RV64 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a class="anchor" id="riscv64-x-linux"></a><h3 class="heading" id="riscv64-*-linux"><span>riscv64-*-linux<a class="copiable-link" href="#riscv64-*-linux"> &para;</a></span></h3>
  <p>The RISC-V RV64 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a class="anchor" id="rx-x-elf"></a><h3 class="heading" id="rx-*-elf"><span>rx-*-elf<a class="copiable-link" href="#rx-*-elf"> &para;</a></span></h3>
  <p>The Renesas RX processor.
  </p>
  <hr />
! <a class="anchor" id="s390-x-linux"></a><h3 class="heading" id="s390-*-linux*"><span>s390-*-linux*<a class="copiable-link" href="#s390-*-linux*"> &para;</a></span></h3>
  <p>S/390 system running GNU/Linux for S/390.
  </p>
  <hr />
! <a class="anchor" id="s390x-x-linux"></a><h3 class="heading" id="s390x-*-linux*"><span>s390x-*-linux*<a class="copiable-link" href="#s390x-*-linux*"> &para;</a></span></h3>
  <p>zSeries system (64-bit) running GNU/Linux for zSeries.
  </p>
  <hr />
! <a class="anchor" id="s390x-ibm-tpf"></a><h3 class="heading" id="s390x-ibm-tpf*"><span>s390x-ibm-tpf*<a class="copiable-link" href="#s390x-ibm-tpf*"> &para;</a></span></h3>
  <p>zSeries system (64-bit) running TPF.  This platform is
  supported as cross-compilation target only.
  </p>
  <hr />
! <a class="anchor" id="x-x-solaris2"></a><h3 class="heading" id="g_t*-*-solaris2*"><span>*-*-solaris2*<a class="copiable-link" href="#g_t*-*-solaris2*"> &para;</a></span></h3>
  <p>Support for Solaris 11.3 and earlier has been obsoleted in GCC 13, but
! can still be enabled by configuring with <samp class="option">--enable-obsolete</samp>.
  Support for Solaris 10 has been removed in GCC 10.  Support for Solaris
  9 has been removed in GCC 5.  Support for Solaris 8 has been removed in
  GCC 4.8.  Support for Solaris 7 has been removed in GCC 4.6.
  </p>
  <p>Solaris 11.3 provides GCC 4.5.2, 4.7.3, and 4.8.2 as
! <code class="command">/usr/gcc/4.5/bin/gcc</code> or similar.  Solaris 11.4
  provides one or more of GCC 5, 7, 9, 10, 11, and 12.
  </p>
! <p>You need to install the <code class="code">system/header</code>, <code class="code">system/linker</code>, and
! <code class="code">developer/assembler</code> packages.
  </p>
! <p>Trying to use the compatibility tools in <samp class="file">/usr/ucb</samp>, from the
! <code class="code">compatibility/ucb</code> package, to install GCC has been observed to
! cause trouble.  The fix is to remove <samp class="file">/usr/ucb</samp> from your
! <code class="env">PATH</code>.
  </p>
  <p>The build process works more smoothly with the legacy Solaris tools so,
! if you have <samp class="file">/usr/xpg4/bin</samp> in your <code class="env">PATH</code>, we recommend that
! you place <samp class="file">/usr/bin</samp> before <samp class="file">/usr/xpg4/bin</samp> for the duration
  of the build.
  </p>
  <p>We recommend the use of the Solaris assembler or the GNU assembler, in
  conjunction with the Solaris linker.
  </p>
! <p>The GNU <code class="command">as</code> versions included in Solaris 11.3, from GNU
! binutils 2.23.1 or newer (in <samp class="file">/usr/bin/gas</samp> and
! <samp class="file">/usr/gnu/bin/as</samp>), are known to work.  The version from GNU
  binutils 2.40 is known to work as well.  Recent versions of the Solaris
! assembler in <samp class="file">/usr/bin/as</samp> work almost as well, though.  To use GNU
! <code class="command">as</code>, configure with the options <samp class="option">--with-gnu-as
  --with-as=/usr/gnu/bin/as</samp>.
  </p>
  <p>For linking, the Solaris linker is preferred.  If you want to use the
  GNU linker instead, the version in Solaris 11.3, from GNU binutils
! 2.23.1 or newer (in <samp class="file">/usr/gnu/bin/ld</samp> and <samp class="file">/usr/bin/gld</samp>),
  works, as does the version from GNU binutils 2.40.  However, it
  generally lacks platform specific features, so better stay with Solaris
! <code class="command">ld</code>.  To use the LTO linker plugin
! (<samp class="option">-fuse-linker-plugin</samp>) with GNU <code class="command">ld</code>, GNU binutils
! <em class="emph">must</em> be configured with <samp class="option">--enable-largefile</samp>.  To use
! Solaris <code class="command">ld</code>, we recommend to configure with
! <samp class="option">--without-gnu-ld --with-ld=/usr/bin/ld</samp> to guarantee the
! right linker is found irrespective of the user&rsquo;s <code class="env">PATH</code>.
  </p>
  <p>Note that your mileage may vary if you use a combination of the GNU
! tools and the Solaris tools: while the combination GNU <code class="command">as</code> and
! Solaris <code class="command">ld</code> works well, the reverse combination Solaris
! <code class="command">as</code> with GNU <code class="command">ld</code> may fail to build or cause memory
  corruption at runtime in some cases for C++ programs.
  </p>
! <p>To enable symbol versioning in &lsquo;<samp class="samp">libstdc++</samp>&rsquo; and other runtime
  libraries with the Solaris linker, you need to have any version of GNU
! <code class="command">c++filt</code>, which is part of GNU binutils.  Symbol versioning
  will be disabled if no appropriate version is found.  Solaris
! <code class="command">c++filt</code> from the Solaris Studio compilers does <em class="emph">not</em>
  work.
  </p>
  <p>In order to build the GNU Ada compiler, GNAT, a working GNAT is needed.
  Since Solaris 11.4 SRU 39, GNAT 11 or 12 is bundled in the
! <code class="code">developer/gcc/gcc-gnat</code> package.
  </p>
! <p>In order to build the GNU D compiler, GDC, a working &lsquo;<samp class="samp">libphobos</samp>&rsquo; is
  needed.  That library wasn&rsquo;t built by default in GCC 9&ndash;11 on SPARC, or
  on x86 when the Solaris assembler is used, but can be enabled by
! configuring with <samp class="option">--enable-libphobos</samp>.  Also, GDC 9.4.0 is
  required on x86, while GDC 9.3.0 is known to work on SPARC.
  </p>
  <p>The versions of the GNU Multiple Precision Library (GMP), the MPFR
*************** library and the MPC library bundled with
*** 1134,1151 ****
  usually recent enough to match GCC&rsquo;s requirements.  There are two
  caveats:
  </p>
! <ul>
! <li> While the version of the GMP library in Solaris 11.3 works with GCC, you
! need to configure with <samp>--with-gmp-include=/usr/include/gmp</samp>.
  
! </li><li> The version of the MPFR libary included in Solaris 11.3 is too old; you
  need to provide a more recent one.
  
  </li></ul>
  
  <hr />
! <a name="sparc-x-x"></a><a name="sparc*-*-*"></a>
! <h3 class="heading">sparc*-*-*</h3>
  <p>This section contains general configuration information for all
  SPARC-based platforms.  In addition to reading this section, please
  read all other sections that match your target.
--- 1057,1073 ----
  usually recent enough to match GCC&rsquo;s requirements.  There are two
  caveats:
  </p>
! <ul class="itemize mark-bullet">
! <li>While the version of the GMP library in Solaris 11.3 works with GCC, you
! need to configure with <samp class="option">--with-gmp-include=/usr/include/gmp</samp>.
  
! </li><li>The version of the MPFR libary included in Solaris 11.3 is too old; you
  need to provide a more recent one.
  
  </li></ul>
  
  <hr />
! <a class="anchor" id="sparc-x-x"></a><h3 class="heading" id="sparc*-*-*"><span>sparc*-*-*<a class="copiable-link" href="#sparc*-*-*"> &para;</a></span></h3>
  <p>This section contains general configuration information for all
  SPARC-based platforms.  In addition to reading this section, please
  read all other sections that match your target.
*************** read all other sections that match your
*** 1154,1164 ****
  library and the MPC library are known to be miscompiled by earlier
  versions of GCC on these platforms.  We therefore recommend the use
  of the exact versions of these libraries listed as minimal versions
! in <a href="prerequisites.html">the prerequisites</a>.
  </p>
  <hr />
! <a name="sparc-sun-solaris2"></a><a name="sparc-sun-solaris2*"></a>
! <h3 class="heading">sparc-sun-solaris2*</h3>
  <p>When GCC is configured to use GNU binutils 2.14 or later, the binaries
  produced are smaller than the ones produced using Solaris native tools;
  this difference is quite significant for binaries containing debugging
--- 1076,1085 ----
  library and the MPC library are known to be miscompiled by earlier
  versions of GCC on these platforms.  We therefore recommend the use
  of the exact versions of these libraries listed as minimal versions
! in <a class="uref" href="prerequisites.html">the prerequisites</a>.
  </p>
  <hr />
! <a class="anchor" id="sparc-sun-solaris2"></a><h3 class="heading" id="sparc-sun-solaris2*"><span>sparc-sun-solaris2*<a class="copiable-link" href="#sparc-sun-solaris2*"> &para;</a></span></h3>
  <p>When GCC is configured to use GNU binutils 2.14 or later, the binaries
  produced are smaller than the ones produced using Solaris native tools;
  this difference is quite significant for binaries containing debugging
*************** information.
*** 1166,1227 ****
  </p>
  <p>Starting with Solaris 7, the operating system is capable of executing
  64-bit SPARC V9 binaries.  GCC 3.1 and later properly supports
! this; the <samp>-m64</samp> option enables 64-bit code generation.
  </p>
  <p>When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library on Solaris, the canonical target triplet must
! be specified as the <code>build</code> parameter on the <code>configure</code>
  line.  This target triplet can be obtained by invoking
! <code>./config.guess</code> in the toplevel source directory of GCC (and
  not that of GMP or MPFR or MPC).  For example:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% <var>srcdir</var>/configure --build=sparc-sun-solaris2.11 --prefix=<var>dirname</var>
  </pre></div>
  
  <hr />
! <a name="sparc-x-linux"></a><a name="sparc-*-linux*"></a>
! <h3 class="heading">sparc-*-linux*</h3>
  
  <hr />
! <a name="sparc64-x-solaris2"></a><a name="sparc64-*-solaris2*"></a>
! <h3 class="heading">sparc64-*-solaris2*</h3>
! <p>This is a synonym for &lsquo;<samp>sparcv9-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a name="sparcv9-x-solaris2"></a><a name="sparcv9-*-solaris2*"></a>
! <h3 class="heading">sparcv9-*-solaris2*</h3>
  
  <p>When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
  build compiler that generates 64-bit code, either by default or by
! specifying &lsquo;<samp>CC='gcc -m64' CXX='g++ -m64' GDC='gdc -m64'</samp>&rsquo; to <code>configure</code>.
! Additionally, you <em>must</em> pass <samp>--build=sparcv9-sun-solaris2.11</samp>
! or <samp>--build=sparc64-sun-solaris2.11</samp> because <samp>config.guess</samp>
  misdetects this situation, which can cause build failures.
  </p>
  <p>When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library, the canonical target triplet must be specified
! as the <code>build</code> parameter on the <code>configure</code> line.  For example:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% <var>srcdir</var>/configure --build=sparcv9-sun-solaris2.11 --prefix=<var>dirname</var>
  </pre></div>
  
  <hr />
! <a name="c6x-x-x"></a><a name="c6x-*-*"></a>
! <h3 class="heading">c6x-*-*</h3>
  <p>The C6X family of processors. This port requires binutils-2.22 or newer.
  </p>
  <hr />
! <a name="visium-x-elf"></a><a name="visium-*-elf"></a>
! <h3 class="heading">visium-*-elf</h3>
  <p>CDS VISIUMcore processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="x-x-vxworks"></a><a name="g_t*-*-vxworks*"></a>
! <h3 class="heading">*-*-vxworks*</h3>
! <p>Support for VxWorks is in flux.  At present GCC supports <em>only</em> the
  very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.
  We welcome patches for other architectures supported by VxWorks 5.5.
  Support for VxWorks AE would also be welcome; we believe this is merely
--- 1087,1142 ----
  </p>
  <p>Starting with Solaris 7, the operating system is capable of executing
  64-bit SPARC V9 binaries.  GCC 3.1 and later properly supports
! this; the <samp class="option">-m64</samp> option enables 64-bit code generation.
  </p>
  <p>When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library on Solaris, the canonical target triplet must
! be specified as the <code class="command">build</code> parameter on the <code class="command">configure</code>
  line.  This target triplet can be obtained by invoking
! <code class="command">./config.guess</code> in the toplevel source directory of GCC (and
  not that of GMP or MPFR or MPC).  For example:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% <var class="var">srcdir</var>/configure --build=sparc-sun-solaris2.11 --prefix=<var class="var">dirname</var>
  </pre></div>
  
  <hr />
! <a class="anchor" id="sparc-x-linux"></a><h3 class="heading" id="sparc-*-linux*"><span>sparc-*-linux*<a class="copiable-link" href="#sparc-*-linux*"> &para;</a></span></h3>
  
  <hr />
! <a class="anchor" id="sparc64-x-solaris2"></a><h3 class="heading" id="sparc64-*-solaris2*"><span>sparc64-*-solaris2*<a class="copiable-link" href="#sparc64-*-solaris2*"> &para;</a></span></h3>
! <p>This is a synonym for &lsquo;<samp class="samp">sparcv9-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a class="anchor" id="sparcv9-x-solaris2"></a><h3 class="heading" id="sparcv9-*-solaris2*"><span>sparcv9-*-solaris2*<a class="copiable-link" href="#sparcv9-*-solaris2*"> &para;</a></span></h3>
  
  <p>When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
  build compiler that generates 64-bit code, either by default or by
! specifying &lsquo;<samp class="samp">CC='gcc -m64' CXX='g++ -m64' GDC='gdc -m64'</samp>&rsquo; to <code class="command">configure</code>.
! Additionally, you <em class="emph">must</em> pass <samp class="option">--build=sparcv9-sun-solaris2.11</samp>
! or <samp class="option">--build=sparc64-sun-solaris2.11</samp> because <samp class="file">config.guess</samp>
  misdetects this situation, which can cause build failures.
  </p>
  <p>When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library, the canonical target triplet must be specified
! as the <code class="command">build</code> parameter on the <code class="command">configure</code> line.  For example:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">% <var class="var">srcdir</var>/configure --build=sparcv9-sun-solaris2.11 --prefix=<var class="var">dirname</var>
  </pre></div>
  
  <hr />
! <a class="anchor" id="c6x-x-x"></a><h3 class="heading" id="c6x-*-*"><span>c6x-*-*<a class="copiable-link" href="#c6x-*-*"> &para;</a></span></h3>
  <p>The C6X family of processors. This port requires binutils-2.22 or newer.
  </p>
  <hr />
! <a class="anchor" id="visium-x-elf"></a><h3 class="heading" id="visium-*-elf"><span>visium-*-elf<a class="copiable-link" href="#visium-*-elf"> &para;</a></span></h3>
  <p>CDS VISIUMcore processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a class="anchor" id="x-x-vxworks"></a><h3 class="heading" id="g_t*-*-vxworks*"><span>*-*-vxworks*<a class="copiable-link" href="#g_t*-*-vxworks*"> &para;</a></span></h3>
! <p>Support for VxWorks is in flux.  At present GCC supports <em class="emph">only</em> the
  very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.
  We welcome patches for other architectures supported by VxWorks 5.5.
  Support for VxWorks AE would also be welcome; we believe this is merely
*************** not interested in supporting older, a.ou
*** 1230,1346 ****
  VxWorks in GCC 3.
  </p>
  <p>VxWorks comes with an older version of GCC installed in
! <samp><var>$WIND_BASE</var>/host</samp>; we recommend you do not overwrite it.
! Choose an installation <var>prefix</var> entirely outside <var>$WIND_BASE</var>.
! Before running <code>configure</code>, create the directories <samp><var>prefix</var></samp>
! and <samp><var>prefix</var>/bin</samp>.  Link or copy the appropriate assembler,
! linker, etc. into <samp><var>prefix</var>/bin</samp>, and set your <var>PATH</var> to
! include that directory while running both <code>configure</code> and
! <code>make</code>.
  </p>
! <p>You must give <code>configure</code> the
! <samp>--with-headers=<var>$WIND_BASE</var>/target/h</samp> switch so that it can
  find the VxWorks system headers.  Since VxWorks is a cross compilation
! target only, you must also specify <samp>--target=<var>target</var></samp>.
! <code>configure</code> will attempt to create the directory
! <samp><var>prefix</var>/<var>target</var>/sys-include</samp> and copy files into it;
! make sure the user running <code>configure</code> has sufficient privilege
  to do so.
  </p>
  <p>GCC&rsquo;s exception handling runtime requires a special &ldquo;configlette&rdquo;
! module, <samp>contrib/gthr_supp_vxw_5x.c</samp>.  Follow the instructions in
  that file to add the module to your kernel build.  (Future versions of
  VxWorks will incorporate this module.)
  </p>
  <hr />
! <a name="x86-64-x-x"></a><a name="x86_005f64-*-*_002c-amd64-*-*"></a>
! <h3 class="heading">x86_64-*-*, amd64-*-*</h3>
  <p>GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
  On GNU/Linux the default is a bi-arch compiler which is able to generate
! both 64-bit x86-64 and 32-bit x86 code (via the <samp>-m32</samp> switch).
  </p>
  <hr />
! <a name="x86-64-x-solaris2"></a><a name="x86_005f64-*-solaris2*"></a>
! <h3 class="heading">x86_64-*-solaris2*</h3>
  <p>GCC also supports the x86-64 architecture implemented by the AMD64
! processor (&lsquo;<samp>amd64-*-*</samp>&rsquo; is an alias for &lsquo;<samp>x86_64-*-*</samp>&rsquo;).
  Unlike other systems, without special options a
  bi-arch compiler is built which generates 32-bit code by default, but
! can generate 64-bit x86-64 code with the <samp>-m64</samp> switch.  Since
  GCC 4.7, there is also a configuration that defaults to 64-bit code, but
! can generate 32-bit code with <samp>-m32</samp>.  To configure and build
! this way, you have to provide all support libraries like <samp>libgmp</samp>
! as 64-bit code, configure with <samp>--target=x86_64-pc-solaris2.11</samp>
! and &lsquo;<samp>CC=gcc -m64</samp>&rsquo;.
  </p>
  <hr />
! <a name="xtensa-x-elf"></a><a name="xtensa*-*-elf"></a>
! <h3 class="heading">xtensa*-*-elf</h3>
  <p>This target is intended for embedded Xtensa systems using the
! &lsquo;<samp>newlib</samp>&rsquo; C library.  It uses ELF but does not support shared
  objects.  Designed-defined instructions specified via the
  Tensilica Instruction Extension (TIE) language are only supported
  through inline assembly.
  </p>
  <p>The Xtensa configuration information must be specified prior to
! building GCC.  The <samp>include/xtensa-config.h</samp> header
  file contains the configuration information.  If you created your
  own Xtensa configuration with the Xtensa Processor Generator, the
  downloaded files include a customized copy of this header file,
  which you can use to replace the default header file.
  </p>
  <hr />
! <a name="xtensa-x-linux"></a><a name="xtensa*-*-linux*"></a>
! <h3 class="heading">xtensa*-*-linux*</h3>
  <p>This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
  position-independent code (PIC) regardless of whether the
! <samp>-fpic</samp> or <samp>-fPIC</samp> options are used.  In other
  respects, this target is the same as the
! <a href="#xtensa*-*-elf">&lsquo;<samp>xtensa*-*-elf</samp>&rsquo;</a> target.
  </p>
  <hr />
! <a name="windows"></a><a name="Microsoft-Windows"></a>
! <h3 class="heading">Microsoft Windows</h3>
  
! <a name="Intel-16-bit-versions"></a>
! <h4 class="subheading">Intel 16-bit versions</h4>
  <p>The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not
  supported.
  </p>
  <p>However, the 32-bit port has limited support for Microsoft
  Windows 3.11 in the Win32s environment, as a target only.  See below.
  </p>
! <a name="Intel-32-bit-versions"></a>
! <h4 class="subheading">Intel 32-bit versions</h4>
  <p>The 32-bit versions of Windows, including Windows 95, Windows NT, Windows
  XP, and Windows Vista, are supported by several different target
  platforms.  These targets differ in which Windows subsystem they target
  and which C libraries are used.
  </p>
! <ul>
! <li> Cygwin <a href="#x-x-cygwin">*-*-cygwin</a>: Cygwin provides a user-space
  Linux API emulation layer in the Win32 subsystem.
! </li><li> MinGW <a href="#x-x-mingw32">*-*-mingw32</a>: MinGW is a native GCC port for
  the Win32 subsystem that provides a subset of POSIX.
! </li><li> MKS i386-pc-mks: NuTCracker from MKS.  See
! <a href="https://www.mkssoftware.com">https://www.mkssoftware.com</a> for more information.
  </li></ul>
  
! <a name="Intel-64-bit-versions"></a>
! <h4 class="subheading">Intel 64-bit versions</h4>
  <p>GCC contains support for x86-64 using the mingw-w64
! runtime library, available from <a href="https://www.mingw-w64.org/downloads/">https://www.mingw-w64.org/downloads/</a>.
  This library should be used with the target triple x86_64-pc-mingw32.
  </p>
! <a name="Windows-CE"></a>
! <h4 class="subheading">Windows CE</h4>
  <p>Windows CE is supported as a target only on Hitachi
  SuperH (sh-wince-pe), and MIPS (mips-wince-pe).
  </p>
! <a name="Other-Windows-Platforms"></a>
! <h4 class="subheading">Other Windows Platforms</h4>
  <p>GCC no longer supports Windows NT on the Alpha or PowerPC.
  </p>
  <p>GCC no longer supports the Windows POSIX subsystem.  However, it does
--- 1145,1251 ----
  VxWorks in GCC 3.
  </p>
  <p>VxWorks comes with an older version of GCC installed in
! <samp class="file"><var class="var">$WIND_BASE</var>/host</samp>; we recommend you do not overwrite it.
! Choose an installation <var class="var">prefix</var> entirely outside <var class="var">$WIND_BASE</var>.
! Before running <code class="command">configure</code>, create the directories <samp class="file"><var class="var">prefix</var></samp>
! and <samp class="file"><var class="var">prefix</var>/bin</samp>.  Link or copy the appropriate assembler,
! linker, etc. into <samp class="file"><var class="var">prefix</var>/bin</samp>, and set your <var class="var">PATH</var> to
! include that directory while running both <code class="command">configure</code> and
! <code class="command">make</code>.
  </p>
! <p>You must give <code class="command">configure</code> the
! <samp class="option">--with-headers=<var class="var">$WIND_BASE</var>/target/h</samp> switch so that it can
  find the VxWorks system headers.  Since VxWorks is a cross compilation
! target only, you must also specify <samp class="option">--target=<var class="var">target</var></samp>.
! <code class="command">configure</code> will attempt to create the directory
! <samp class="file"><var class="var">prefix</var>/<var class="var">target</var>/sys-include</samp> and copy files into it;
! make sure the user running <code class="command">configure</code> has sufficient privilege
  to do so.
  </p>
  <p>GCC&rsquo;s exception handling runtime requires a special &ldquo;configlette&rdquo;
! module, <samp class="file">contrib/gthr_supp_vxw_5x.c</samp>.  Follow the instructions in
  that file to add the module to your kernel build.  (Future versions of
  VxWorks will incorporate this module.)
  </p>
  <hr />
! <a class="anchor" id="x86-64-x-x"></a><h3 class="heading" id="x86_005f64-*-*_002c-amd64-*-*"><span>x86_64-*-*, amd64-*-*<a class="copiable-link" href="#x86_005f64-*-*_002c-amd64-*-*"> &para;</a></span></h3>
  <p>GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
  On GNU/Linux the default is a bi-arch compiler which is able to generate
! both 64-bit x86-64 and 32-bit x86 code (via the <samp class="option">-m32</samp> switch).
  </p>
  <hr />
! <a class="anchor" id="x86-64-x-solaris2"></a><h3 class="heading" id="x86_005f64-*-solaris2*"><span>x86_64-*-solaris2*<a class="copiable-link" href="#x86_005f64-*-solaris2*"> &para;</a></span></h3>
  <p>GCC also supports the x86-64 architecture implemented by the AMD64
! processor (&lsquo;<samp class="samp">amd64-*-*</samp>&rsquo; is an alias for &lsquo;<samp class="samp">x86_64-*-*</samp>&rsquo;).
  Unlike other systems, without special options a
  bi-arch compiler is built which generates 32-bit code by default, but
! can generate 64-bit x86-64 code with the <samp class="option">-m64</samp> switch.  Since
  GCC 4.7, there is also a configuration that defaults to 64-bit code, but
! can generate 32-bit code with <samp class="option">-m32</samp>.  To configure and build
! this way, you have to provide all support libraries like <samp class="file">libgmp</samp>
! as 64-bit code, configure with <samp class="option">--target=x86_64-pc-solaris2.11</samp>
! and &lsquo;<samp class="samp">CC=gcc -m64</samp>&rsquo;.
  </p>
  <hr />
! <a class="anchor" id="xtensa-x-elf"></a><h3 class="heading" id="xtensa*-*-elf"><span>xtensa*-*-elf<a class="copiable-link" href="#xtensa*-*-elf"> &para;</a></span></h3>
  <p>This target is intended for embedded Xtensa systems using the
! &lsquo;<samp class="samp">newlib</samp>&rsquo; C library.  It uses ELF but does not support shared
  objects.  Designed-defined instructions specified via the
  Tensilica Instruction Extension (TIE) language are only supported
  through inline assembly.
  </p>
  <p>The Xtensa configuration information must be specified prior to
! building GCC.  The <samp class="file">include/xtensa-config.h</samp> header
  file contains the configuration information.  If you created your
  own Xtensa configuration with the Xtensa Processor Generator, the
  downloaded files include a customized copy of this header file,
  which you can use to replace the default header file.
  </p>
  <hr />
! <a class="anchor" id="xtensa-x-linux"></a><h3 class="heading" id="xtensa*-*-linux*"><span>xtensa*-*-linux*<a class="copiable-link" href="#xtensa*-*-linux*"> &para;</a></span></h3>
  <p>This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
  position-independent code (PIC) regardless of whether the
! <samp class="option">-fpic</samp> or <samp class="option">-fPIC</samp> options are used.  In other
  respects, this target is the same as the
! <a class="uref" href="#xtensa*-*-elf">&lsquo;<samp class="samp">xtensa*-*-elf</samp>&rsquo;</a> target.
  </p>
  <hr />
! <a class="anchor" id="windows"></a><h3 class="heading" id="Microsoft-Windows"><span>Microsoft Windows<a class="copiable-link" href="#Microsoft-Windows"> &para;</a></span></h3>
  
! <h4 class="subheading" id="Intel-16-bit-versions"><span>Intel 16-bit versions<a class="copiable-link" href="#Intel-16-bit-versions"> &para;</a></span></h4>
  <p>The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not
  supported.
  </p>
  <p>However, the 32-bit port has limited support for Microsoft
  Windows 3.11 in the Win32s environment, as a target only.  See below.
  </p>
! <h4 class="subheading" id="Intel-32-bit-versions"><span>Intel 32-bit versions<a class="copiable-link" href="#Intel-32-bit-versions"> &para;</a></span></h4>
  <p>The 32-bit versions of Windows, including Windows 95, Windows NT, Windows
  XP, and Windows Vista, are supported by several different target
  platforms.  These targets differ in which Windows subsystem they target
  and which C libraries are used.
  </p>
! <ul class="itemize mark-bullet">
! <li>Cygwin <a class="uref" href="#x-x-cygwin">*-*-cygwin</a>: Cygwin provides a user-space
  Linux API emulation layer in the Win32 subsystem.
! </li><li>MinGW <a class="uref" href="#x-x-mingw32">*-*-mingw32</a>: MinGW is a native GCC port for
  the Win32 subsystem that provides a subset of POSIX.
! </li><li>MKS i386-pc-mks: NuTCracker from MKS.  See
! <a class="uref" href="https://www.mkssoftware.com">https://www.mkssoftware.com</a> for more information.
  </li></ul>
  
! <h4 class="subheading" id="Intel-64-bit-versions"><span>Intel 64-bit versions<a class="copiable-link" href="#Intel-64-bit-versions"> &para;</a></span></h4>
  <p>GCC contains support for x86-64 using the mingw-w64
! runtime library, available from <a class="uref" href="https://www.mingw-w64.org/downloads/">https://www.mingw-w64.org/downloads/</a>.
  This library should be used with the target triple x86_64-pc-mingw32.
  </p>
! <h4 class="subheading" id="Windows-CE"><span>Windows CE<a class="copiable-link" href="#Windows-CE"> &para;</a></span></h4>
  <p>Windows CE is supported as a target only on Hitachi
  SuperH (sh-wince-pe), and MIPS (mips-wince-pe).
  </p>
! <h4 class="subheading" id="Other-Windows-Platforms"><span>Other Windows Platforms<a class="copiable-link" href="#Other-Windows-Platforms"> &para;</a></span></h4>
  <p>GCC no longer supports Windows NT on the Alpha or PowerPC.
  </p>
  <p>GCC no longer supports the Windows POSIX subsystem.  However, it does
*************** support the Interix subsystem.  See abov
*** 1351,1360 ****
  <p>UWIN support has been removed due to a lack of maintenance.
  </p>
  <hr />
! <a name="x-x-cygwin"></a><a name="g_t*-*-cygwin"></a>
! <h3 class="heading">*-*-cygwin</h3>
  <p>Ports of GCC are included with the
! <a href="http://www.cygwin.com/">Cygwin environment</a>.
  </p>
  <p>GCC will build under Cygwin without modification; it does not build
  with Microsoft&rsquo;s C++ compiler and there are no plans to make it do so.
--- 1256,1264 ----
  <p>UWIN support has been removed due to a lack of maintenance.
  </p>
  <hr />
! <a class="anchor" id="x-x-cygwin"></a><h3 class="heading" id="g_t*-*-cygwin"><span>*-*-cygwin<a class="copiable-link" href="#g_t*-*-cygwin"> &para;</a></span></h3>
  <p>Ports of GCC are included with the
! <a class="uref" href="http://www.cygwin.com/">Cygwin environment</a>.
  </p>
  <p>GCC will build under Cygwin without modification; it does not build
  with Microsoft&rsquo;s C++ compiler and there are no plans to make it do so.
*************** the latest official GNU binutils release
*** 1366,1384 ****
  or version 2.20 or above if building your own.
  </p>
  <hr />
! <a name="x-x-mingw32"></a><a name="g_t*-*-mingw32"></a>
! <h3 class="heading">*-*-mingw32</h3>
  <p>GCC will build with and support only MinGW runtime 3.12 and later.
  Earlier versions of headers are incompatible with the new default semantics
! of <code>extern inline</code> in <code>-std=c99</code> and <code>-std=gnu99</code> modes.
  </p>
  <p>To support emitting DWARF debugging info you need to use GNU binutils
! version 2.16 or above containing support for the <code>.secrel32</code>
  assembler pseudo-op.
  </p>
  <hr />
! <a name="older"></a><a name="Older-systems"></a>
! <h3 class="heading">Older systems</h3>
  <p>GCC contains support files for many older (1980s and early
  1990s) Unix variants.  For the most part, support for these systems
  has not been deliberately removed, but it has not been maintained for
--- 1270,1286 ----
  or version 2.20 or above if building your own.
  </p>
  <hr />
! <a class="anchor" id="x-x-mingw32"></a><h3 class="heading" id="g_t*-*-mingw32"><span>*-*-mingw32<a class="copiable-link" href="#g_t*-*-mingw32"> &para;</a></span></h3>
  <p>GCC will build with and support only MinGW runtime 3.12 and later.
  Earlier versions of headers are incompatible with the new default semantics
! of <code class="code">extern inline</code> in <code class="code">-std=c99</code> and <code class="code">-std=gnu99</code> modes.
  </p>
  <p>To support emitting DWARF debugging info you need to use GNU binutils
! version 2.16 or above containing support for the <code class="code">.secrel32</code>
  assembler pseudo-op.
  </p>
  <hr />
! <a class="anchor" id="older"></a><h3 class="heading" id="Older-systems"><span>Older systems<a class="copiable-link" href="#Older-systems"> &para;</a></span></h3>
  <p>GCC contains support files for many older (1980s and early
  1990s) Unix variants.  For the most part, support for these systems
  has not been deliberately removed, but it has not been maintained for
*************** several years and may suffer from bitrot
*** 1386,1392 ****
  </p>
  <p>Starting with GCC 3.1, each release has a list of &ldquo;obsoleted&rdquo; systems.
  Support for these systems is still present in that release, but
! <code>configure</code> will fail unless the <samp>--enable-obsolete</samp>
  option is given.  Unless a maintainer steps forward, support for these
  systems will be removed from the next release of GCC.
  </p>
--- 1288,1294 ----
  </p>
  <p>Starting with GCC 3.1, each release has a list of &ldquo;obsoleted&rdquo; systems.
  Support for these systems is still present in that release, but
! <code class="command">configure</code> will fail unless the <samp class="option">--enable-obsolete</samp>
  option is given.  Unless a maintainer steps forward, support for these
  systems will be removed from the next release of GCC.
  </p>
*************** bring GCC up on such a system, if still
*** 1397,1405 ****
  require first installing an old version of GCC which did work on that
  system, and using it to compile a more recent GCC, to avoid bugs in the
  vendor compiler.  Old releases of GCC 1 and GCC 2 are available in the
! <samp>old-releases</samp> directory on the <a href="../mirrors.html">GCC mirror
  sites</a>.  Header bugs may generally be avoided using
! <code>fixincludes</code>, but bugs or deficiencies in libraries and the
  operating system may still cause problems.
  </p>
  <p>Support for older systems as targets for cross-compilation is less
--- 1299,1307 ----
  require first installing an old version of GCC which did work on that
  system, and using it to compile a more recent GCC, to avoid bugs in the
  vendor compiler.  Old releases of GCC 1 and GCC 2 are available in the
! <samp class="file">old-releases</samp> directory on the <a class="uref" href="../mirrors.html">GCC mirror
  sites</a>.  Header bugs may generally be avoided using
! <code class="command">fixincludes</code>, but bugs or deficiencies in libraries and the
  operating system may still cause problems.
  </p>
  <p>Support for older systems as targets for cross-compilation is less
*************** problematic than support for them as hos
*** 1407,1419 ****
  wishes to make such a target work again (including resurrecting any of
  the targets that never worked with GCC 2, starting from the last
  version before they were removed), patches
! <a href="../contribute.html">following the usual requirements</a> would be
  likely to be accepted, since they should not affect the support for more
  modern targets.
  </p>
  <p>For some systems, old versions of GNU binutils may also be useful,
! and are available from <samp>pub/binutils/old-releases</samp> on
! <a href="https://sourceware.org/mirrors.html">sourceware.org mirror sites</a>.
  </p>
  <p>Some of the information on specific systems above relates to
  such older systems, but much of the information
--- 1309,1321 ----
  wishes to make such a target work again (including resurrecting any of
  the targets that never worked with GCC 2, starting from the last
  version before they were removed), patches
! <a class="uref" href="../contribute.html">following the usual requirements</a> would be
  likely to be accepted, since they should not affect the support for more
  modern targets.
  </p>
  <p>For some systems, old versions of GNU binutils may also be useful,
! and are available from <samp class="file">pub/binutils/old-releases</samp> on
! <a class="uref" href="https://sourceware.org/mirrors.html">sourceware.org mirror sites</a>.
  </p>
  <p>Some of the information on specific systems above relates to
  such older systems, but much of the information
*************** about GCC on such systems (which may no
*** 1421,1437 ****
  current GCC) is to be found in the GCC texinfo manual.
  </p>
  <hr />
! <a name="elf"></a><a name="all-ELF-targets-_0028SVR4_002c-Solaris_002c-etc_002e_0029"></a>
! <h3 class="heading">all ELF targets (SVR4, Solaris, etc.)</h3>
  <p>C++ support is significantly better on ELF targets if you use the
! <a href="./configure.html#with-gnu-ld">GNU linker</a>; duplicate copies of
  inlines, vtables and template instantiations will be discarded
  automatically.
  </p>
  
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
--- 1323,1338 ----
  current GCC) is to be found in the GCC texinfo manual.
  </p>
  <hr />
! <a class="anchor" id="elf"></a><h3 class="heading" id="all-ELF-targets-_0028SVR4_002c-Solaris_002c-etc_002e_0029"><span>all ELF targets (SVR4, Solaris, etc.)<a class="copiable-link" href="#all-ELF-targets-_0028SVR4_002c-Solaris_002c-etc_002e_0029"> &para;</a></span></h3>
  <p>C++ support is significantly better on ELF targets if you use the
! <a class="uref" href="./configure.html#with-gnu-ld">GNU linker</a>; duplicate copies of
  inlines, vtables and template instantiations will be discarded
  automatically.
  </p>
  
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
diff -Nrcpad gcc-14.3.0/INSTALL/test.html gcc-14.3.0-RC-20260619/INSTALL/test.html
*** gcc-14.3.0/INSTALL/test.html	Fri May 23 11:03:17 2025
--- gcc-14.3.0-RC-20260619/INSTALL/test.html	Fri Jun 19 06:51:10 2026
***************
*** 1,6 ****
! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2024 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
--- 1,9 ----
! <!DOCTYPE html>
  <html>
! <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
! <head>
! <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
! <!-- Copyright © 1988-2024 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
*************** A GNU Manual
*** 19,27 ****
  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. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Testing</title>
  
  <meta name="description" content="Installing GCC: Testing">
--- 22,27 ----
*************** You have freedom to copy and modify this
*** 29,59 ****
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
  <style type="text/css">
  <!--
! a.summary-letter {text-decoration: none}
! blockquote.indentedblock {margin-right: 0em}
! blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
! blockquote.smallquotation {font-size: smaller}
! div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
! div.lisp {margin-left: 3.2em}
! div.smalldisplay {margin-left: 3.2em}
! div.smallexample {margin-left: 3.2em}
! div.smalllisp {margin-left: 3.2em}
! kbd {font-style: oblique}
! pre.display {font-family: inherit}
! pre.format {font-family: inherit}
! pre.menu-comment {font-family: serif}
! pre.menu-preformatted {font-family: serif}
! pre.smalldisplay {font-family: inherit; font-size: smaller}
! pre.smallexample {font-size: smaller}
! pre.smallformat {font-family: inherit; font-size: smaller}
! pre.smalllisp {font-size: smaller}
! span.nolinebreak {white-space: nowrap}
! span.roman {font-family: initial; font-weight: normal}
! span.sansserif {font-family: sans-serif; font-weight: normal}
! ul.no-bullet {list-style: none}
  -->
  </style>
  
--- 29,42 ----
  <meta name="resource-type" content="document">
  <meta name="distribution" content="global">
  <meta name="Generator" content="makeinfo">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ 
  <style type="text/css">
  <!--
! a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
  div.example {margin-left: 3.2em}
! span:hover a.copiable-link {visibility: visible}
! ul.mark-bullet {list-style-type: disc}
  -->
  </style>
  
*************** ul.no-bullet {list-style: none}
*** 61,67 ****
  </head>
  
  <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: Testing</h1>
  
  
  
--- 44,49 ----
*************** ul.no-bullet {list-style: none}
*** 86,118 ****
  
  
  
! <a name="index-Testing"></a>
! <a name="index-Installing-GCC_003a-Testing"></a>
! <a name="index-Testsuite"></a>
  
  <p>Before you install GCC, we encourage you to run the testsuites and to
  compare your results with results from a similar configuration that have
  been submitted to the
! <a href="https://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>.
  This step is optional and may require you to download additional software,
  but it can give you confidence in your new GCC installation or point out
  problems before you install and start using your new GCC.
  </p>
! <p>First, you must have <a href="download.html">downloaded the testsuites</a>.
  These are included in the source tarball.
  </p>
  <p>Second, you must have the testing tools installed.  This includes
! <a href="https://www.gnu.org/software/dejagnu/">DejaGnu</a>, Tcl, and Expect;
  the DejaGnu site has links to these.
  Some optional tests also require Python3 and pytest module.
  </p>
! <p>If the directories where <code>runtest</code> and <code>expect</code> were
! installed are not in the <code>PATH</code>, you may need to set the following
  environment variables appropriately, as in the following example (which
! assumes that DejaGnu has been installed under <samp>/usr/local</samp>):
  </p>
! <div class="smallexample">
! <pre class="smallexample">TCL_LIBRARY = /usr/local/share/tcl8.0
  DEJAGNULIBS = /usr/local/share/dejagnu
  </pre></div>
  
--- 68,100 ----
  
  
  
! <a class="index-entry-id" id="index-Testing"></a>
! <a class="index-entry-id" id="index-Installing-GCC_003a-Testing"></a>
! <a class="index-entry-id" id="index-Testsuite"></a>
  
  <p>Before you install GCC, we encourage you to run the testsuites and to
  compare your results with results from a similar configuration that have
  been submitted to the
! <a class="uref" href="https://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>.
  This step is optional and may require you to download additional software,
  but it can give you confidence in your new GCC installation or point out
  problems before you install and start using your new GCC.
  </p>
! <p>First, you must have <a class="uref" href="download.html">downloaded the testsuites</a>.
  These are included in the source tarball.
  </p>
  <p>Second, you must have the testing tools installed.  This includes
! <a class="uref" href="https://www.gnu.org/software/dejagnu/">DejaGnu</a>, Tcl, and Expect;
  the DejaGnu site has links to these.
  Some optional tests also require Python3 and pytest module.
  </p>
! <p>If the directories where <code class="command">runtest</code> and <code class="command">expect</code> were
! installed are not in the <code class="env">PATH</code>, you may need to set the following
  environment variables appropriately, as in the following example (which
! assumes that DejaGnu has been installed under <samp class="file">/usr/local</samp>):
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">TCL_LIBRARY = /usr/local/share/tcl8.0
  DEJAGNULIBS = /usr/local/share/dejagnu
  </pre></div>
  
*************** portability in the DejaGnu code.)
*** 122,213 ****
  </p>
  
  <p>Finally, you can run the testsuite (which may take a long time):
! </p><div class="smallexample">
! <pre class="smallexample">cd <var>objdir</var>; make -k check
  </pre></div>
  
  <p>This will test various components of GCC, such as compiler
  front ends and runtime libraries.  While running the testsuite, DejaGnu
  might emit some harmless messages resembling
! &lsquo;<samp>WARNING: Couldn't find the global config file.</samp>&rsquo; or
! &lsquo;<samp>WARNING: Couldn't find tool init file</samp>&rsquo; that can be ignored.
  </p>
  <p>If you are testing a cross-compiler, you may want to run the testsuite
! on a simulator as described at <a href="https://gcc.gnu.org/simtest-howto.html">https://gcc.gnu.org/simtest-howto.html</a>.
  </p>
! <a name="How-can-you-run-the-testsuite-on-selected-tests_003f"></a>
! <h3 class="section">How can you run the testsuite on selected tests?</h3>
  
  <p>In order to run sets of tests selectively, there are targets
! &lsquo;<samp>make check-gcc</samp>&rsquo; and language specific &lsquo;<samp>make check-c</samp>&rsquo;,
! &lsquo;<samp>make check-c++</samp>&rsquo;, &lsquo;<samp>make check-d</samp>&rsquo; &lsquo;<samp>make check-fortran</samp>&rsquo;,
! &lsquo;<samp>make check-ada</samp>&rsquo;, &lsquo;<samp>make check-m2</samp>&rsquo;, &lsquo;<samp>make check-objc</samp>&rsquo;,
! &lsquo;<samp>make check-obj-c++</samp>&rsquo;, &lsquo;<samp>make check-lto</samp>&rsquo; in the <samp>gcc</samp>
  subdirectory of the object directory.  You can also just run
! &lsquo;<samp>make check</samp>&rsquo; in a subdirectory of the object directory.
  </p>
  
! <p>A more selective way to just run all <code>gcc</code> execute tests in the
  testsuite is to use
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-gcc RUNTESTFLAGS=&quot;execute.exp <var>other-options</var>&quot;
  </pre></div>
  
! <p>Likewise, in order to run only the <code>g++</code> &ldquo;old-deja&rdquo; tests in
! the testsuite with filenames matching &lsquo;<samp>9805*</samp>&rsquo;, you would use
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805* <var>other-options</var>&quot;
  </pre></div>
  
! <p>The file-matching expression following <var>filename</var><code>.exp=</code> is treated
  as a series of whitespace-delimited glob expressions so that multiple patterns
  may be passed, although any whitespace must either be escaped or surrounded by
  single quotes if multiple expressions are desired. For example,
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805*\ virtual2.c <var>other-options</var>&quot;
! make check-g++ RUNTESTFLAGS=&quot;'old-deja.exp=9805* virtual2.c' <var>other-options</var>&quot;
  </pre></div>
  
! <p>The <samp>*.exp</samp> files are located in the testsuite directories of the GCC
! source, the most important ones being <samp>compile.exp</samp>,
! <samp>execute.exp</samp>, <samp>dg.exp</samp> and <samp>old-deja.exp</samp>.
! To get a list of the possible <samp>*.exp</samp> files, pipe the
! output of &lsquo;<samp>make check</samp>&rsquo; into a file and look at the
! &lsquo;<samp>Running &hellip;  .exp</samp>&rsquo; lines.
  </p>
! <a name="Passing-options-and-running-multiple-testsuites"></a>
! <h3 class="section">Passing options and running multiple testsuites</h3>
  
  <p>You can pass multiple options to the testsuite using the
! &lsquo;<samp>--target_board</samp>&rsquo; option of DejaGNU, either passed as part of
! &lsquo;<samp>RUNTESTFLAGS</samp>&rsquo;, or directly to <code>runtest</code> if you prefer to
  work outside the makefiles.  For example,
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-g++ RUNTESTFLAGS=&quot;--target_board=unix/-O3/-fmerge-constants&quot;
  </pre></div>
  
! <p>will run the standard <code>g++</code> testsuites (&ldquo;unix&rdquo; is the target name
  for a standard native testsuite situation), passing
! &lsquo;<samp>-O3 -fmerge-constants</samp>&rsquo; to the compiler on every test, i.e.,
  slashes separate options.
  </p>
  <p>You can run the testsuites multiple times using combinations of options
  with a syntax similar to the brace expansion of popular shells:
  </p>
! <div class="smallexample">
! <pre class="smallexample">&hellip;&quot;--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}&quot;
  </pre></div>
  
  <p>(Note the empty option caused by the trailing comma in the final group.)
! The following will run each testsuite eight times using the &lsquo;<samp>arm-sim</samp>&rsquo;
  target, as if you had specified all possible combinations yourself:
  </p>
! <div class="smallexample">
! <pre class="smallexample">--target_board='arm-sim/-mhard-float/-O1 \
                  arm-sim/-mhard-float/-O2 \
                  arm-sim/-mhard-float/-O3 \
                  arm-sim/-mhard-float \
--- 104,196 ----
  </p>
  
  <p>Finally, you can run the testsuite (which may take a long time):
! </p><div class="example smallexample">
! <pre class="example-preformatted">cd <var class="var">objdir</var>; make -k check
  </pre></div>
  
  <p>This will test various components of GCC, such as compiler
  front ends and runtime libraries.  While running the testsuite, DejaGnu
  might emit some harmless messages resembling
! &lsquo;<samp class="samp">WARNING: Couldn't find the global config file.</samp>&rsquo; or
! &lsquo;<samp class="samp">WARNING: Couldn't find tool init file</samp>&rsquo; that can be ignored.
  </p>
  <p>If you are testing a cross-compiler, you may want to run the testsuite
! on a simulator as described at <a class="uref" href="https://gcc.gnu.org/simtest-howto.html">https://gcc.gnu.org/simtest-howto.html</a>.
  </p>
! <div class="section-level-extent" id="How-can-you-run-the-testsuite-on-selected-tests_003f">
! <h3 class="section"><span>How can you run the testsuite on selected tests?<a class="copiable-link" href="#How-can-you-run-the-testsuite-on-selected-tests_003f"> &para;</a></span></h3>
  
  <p>In order to run sets of tests selectively, there are targets
! &lsquo;<samp class="samp">make check-gcc</samp>&rsquo; and language specific &lsquo;<samp class="samp">make check-c</samp>&rsquo;,
! &lsquo;<samp class="samp">make check-c++</samp>&rsquo;, &lsquo;<samp class="samp">make check-d</samp>&rsquo; &lsquo;<samp class="samp">make check-fortran</samp>&rsquo;,
! &lsquo;<samp class="samp">make check-ada</samp>&rsquo;, &lsquo;<samp class="samp">make check-m2</samp>&rsquo;, &lsquo;<samp class="samp">make check-objc</samp>&rsquo;,
! &lsquo;<samp class="samp">make check-obj-c++</samp>&rsquo;, &lsquo;<samp class="samp">make check-lto</samp>&rsquo; in the <samp class="file">gcc</samp>
  subdirectory of the object directory.  You can also just run
! &lsquo;<samp class="samp">make check</samp>&rsquo; in a subdirectory of the object directory.
  </p>
  
! <p>A more selective way to just run all <code class="command">gcc</code> execute tests in the
  testsuite is to use
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make check-gcc RUNTESTFLAGS=&quot;execute.exp <var class="var">other-options</var>&quot;
  </pre></div>
  
! <p>Likewise, in order to run only the <code class="command">g++</code> &ldquo;old-deja&rdquo; tests in
! the testsuite with filenames matching &lsquo;<samp class="samp">9805*</samp>&rsquo;, you would use
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805* <var class="var">other-options</var>&quot;
  </pre></div>
  
! <p>The file-matching expression following <var class="var">filename</var><code class="command">.exp=</code> is treated
  as a series of whitespace-delimited glob expressions so that multiple patterns
  may be passed, although any whitespace must either be escaped or surrounded by
  single quotes if multiple expressions are desired. For example,
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805*\ virtual2.c <var class="var">other-options</var>&quot;
! make check-g++ RUNTESTFLAGS=&quot;'old-deja.exp=9805* virtual2.c' <var class="var">other-options</var>&quot;
  </pre></div>
  
! <p>The <samp class="file">*.exp</samp> files are located in the testsuite directories of the GCC
! source, the most important ones being <samp class="file">compile.exp</samp>,
! <samp class="file">execute.exp</samp>, <samp class="file">dg.exp</samp> and <samp class="file">old-deja.exp</samp>.
! To get a list of the possible <samp class="file">*.exp</samp> files, pipe the
! output of &lsquo;<samp class="samp">make check</samp>&rsquo; into a file and look at the
! &lsquo;<samp class="samp">Running &hellip;  .exp</samp>&rsquo; lines.
  </p>
! </div>
! <div class="section-level-extent" id="Passing-options-and-running-multiple-testsuites">
! <h3 class="section"><span>Passing options and running multiple testsuites<a class="copiable-link" href="#Passing-options-and-running-multiple-testsuites"> &para;</a></span></h3>
  
  <p>You can pass multiple options to the testsuite using the
! &lsquo;<samp class="samp">--target_board</samp>&rsquo; option of DejaGNU, either passed as part of
! &lsquo;<samp class="samp">RUNTESTFLAGS</samp>&rsquo;, or directly to <code class="command">runtest</code> if you prefer to
  work outside the makefiles.  For example,
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make check-g++ RUNTESTFLAGS=&quot;--target_board=unix/-O3/-fmerge-constants&quot;
  </pre></div>
  
! <p>will run the standard <code class="command">g++</code> testsuites (&ldquo;unix&rdquo; is the target name
  for a standard native testsuite situation), passing
! &lsquo;<samp class="samp">-O3 -fmerge-constants</samp>&rsquo; to the compiler on every test, i.e.,
  slashes separate options.
  </p>
  <p>You can run the testsuites multiple times using combinations of options
  with a syntax similar to the brace expansion of popular shells:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">...&quot;--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}&quot;
  </pre></div>
  
  <p>(Note the empty option caused by the trailing comma in the final group.)
! The following will run each testsuite eight times using the &lsquo;<samp class="samp">arm-sim</samp>&rsquo;
  target, as if you had specified all possible combinations yourself:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">--target_board='arm-sim/-mhard-float/-O1 \
                  arm-sim/-mhard-float/-O2 \
                  arm-sim/-mhard-float/-O3 \
                  arm-sim/-mhard-float \
*************** target, as if you had specified all poss
*** 220,271 ****
  <p>They can be combined as many times as you wish, in arbitrary ways.  This
  list:
  </p>
! <div class="smallexample">
! <pre class="smallexample">&hellip;&quot;--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}&quot;
  </pre></div>
  
! <p>will generate four combinations, all involving &lsquo;<samp>-Wextra</samp>&rsquo;.
  </p>
  <p>The disadvantage to this method is that the testsuites are run in serial,
  which is a waste on multiprocessor systems.  For users with GNU Make and
  a shell which performs brace expansion, you can run the testsuites in
! parallel by having the shell perform the combinations and <code>make</code>
! do the parallel runs.  Instead of using &lsquo;<samp>--target_board</samp>&rsquo;, use a
  special makefile target:
  </p>
! <div class="smallexample">
! <pre class="smallexample">make -j<var>N</var> check-<var>testsuite</var>//<var>test-target</var>/<var>option1</var>/<var>option2</var>/&hellip;
  </pre></div>
  
  <p>For example,
  </p>
! <div class="smallexample">
! <pre class="smallexample">make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
  </pre></div>
  
  <p>will run three concurrent &ldquo;make-gcc&rdquo; testsuites, eventually testing all
  ten combinations as described above.  Note that this is currently only
! supported in the <samp>gcc</samp> subdirectory.  (To see how this works, try
! typing <code>echo</code> before the example given here.)
  </p>
  
! <a name="How-to-interpret-test-results"></a>
! <h3 class="section">How to interpret test results</h3>
  
! <p>The result of running the testsuite are various <samp>*.sum</samp> and <samp>*.log</samp>
! files in the testsuite subdirectories.  The <samp>*.log</samp> files contain a
  detailed log of the compiler invocations and the corresponding
! results, the <samp>*.sum</samp> files summarize the results.  These summaries
  contain status codes for all tests:
  </p>
! <ul>
! <li> PASS: the test passed as expected
! </li><li> XPASS: the test unexpectedly passed
! </li><li> FAIL: the test unexpectedly failed
! </li><li> XFAIL: the test failed as expected
! </li><li> UNSUPPORTED: the test is not supported on this platform
! </li><li> ERROR: the testsuite detected an error
! </li><li> WARNING: the testsuite detected a possible problem
  </li></ul>
  
  <p>It is normal for some tests to report unexpected failures.  At the
--- 203,255 ----
  <p>They can be combined as many times as you wish, in arbitrary ways.  This
  list:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">...&quot;--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}&quot;
  </pre></div>
  
! <p>will generate four combinations, all involving &lsquo;<samp class="samp">-Wextra</samp>&rsquo;.
  </p>
  <p>The disadvantage to this method is that the testsuites are run in serial,
  which is a waste on multiprocessor systems.  For users with GNU Make and
  a shell which performs brace expansion, you can run the testsuites in
! parallel by having the shell perform the combinations and <code class="command">make</code>
! do the parallel runs.  Instead of using &lsquo;<samp class="samp">--target_board</samp>&rsquo;, use a
  special makefile target:
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make -j<var class="var">N</var> check-<var class="var">testsuite</var>//<var class="var">test-target</var>/<var class="var">option1</var>/<var class="var">option2</var>/...
  </pre></div>
  
  <p>For example,
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted">make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
  </pre></div>
  
  <p>will run three concurrent &ldquo;make-gcc&rdquo; testsuites, eventually testing all
  ten combinations as described above.  Note that this is currently only
! supported in the <samp class="file">gcc</samp> subdirectory.  (To see how this works, try
! typing <code class="command">echo</code> before the example given here.)
  </p>
  
! </div>
! <div class="section-level-extent" id="How-to-interpret-test-results">
! <h3 class="section"><span>How to interpret test results<a class="copiable-link" href="#How-to-interpret-test-results"> &para;</a></span></h3>
  
! <p>The result of running the testsuite are various <samp class="file">*.sum</samp> and <samp class="file">*.log</samp>
! files in the testsuite subdirectories.  The <samp class="file">*.log</samp> files contain a
  detailed log of the compiler invocations and the corresponding
! results, the <samp class="file">*.sum</samp> files summarize the results.  These summaries
  contain status codes for all tests:
  </p>
! <ul class="itemize mark-bullet">
! <li>PASS: the test passed as expected
! </li><li>XPASS: the test unexpectedly passed
! </li><li>FAIL: the test unexpectedly failed
! </li><li>XFAIL: the test failed as expected
! </li><li>UNSUPPORTED: the test is not supported on this platform
! </li><li>ERROR: the testsuite detected an error
! </li><li>WARNING: the testsuite detected a possible problem
  </li></ul>
  
  <p>It is normal for some tests to report unexpected failures.  At the
*************** over whether or not a test is expected t
*** 274,292 ****
  be fixed in future releases.
  </p>
  
! <a name="Submitting-test-results"></a>
! <h3 class="section">Submitting test results</h3>
  
  <p>If you want to report the results to the GCC project, use the
! <samp>contrib/test_summary</samp> shell script.  Start it in the <var>objdir</var> with
  </p>
! <div class="smallexample">
! <pre class="smallexample"><var>srcdir</var>/contrib/test_summary -p your_commentary.txt \
      -m gcc-testresults@gcc.gnu.org |sh
  </pre></div>
  
! <p>This script uses the <code>Mail</code> program to send the results, so
! make sure it is in your <code>PATH</code>.  The file <samp>your_commentary.txt</samp> is
  prepended to the testsuite summary and should contain any special
  remarks you have on your results or your build environment.  Please
  do not edit the testsuite result block or the subject line, as these
--- 258,277 ----
  be fixed in future releases.
  </p>
  
! </div>
! <div class="section-level-extent" id="Submitting-test-results">
! <h3 class="section"><span>Submitting test results<a class="copiable-link" href="#Submitting-test-results"> &para;</a></span></h3>
  
  <p>If you want to report the results to the GCC project, use the
! <samp class="file">contrib/test_summary</samp> shell script.  Start it in the <var class="var">objdir</var> with
  </p>
! <div class="example smallexample">
! <pre class="example-preformatted"><var class="var">srcdir</var>/contrib/test_summary -p your_commentary.txt \
      -m gcc-testresults@gcc.gnu.org |sh
  </pre></div>
  
! <p>This script uses the <code class="command">Mail</code> program to send the results, so
! make sure it is in your <code class="env">PATH</code>.  The file <samp class="file">your_commentary.txt</samp> is
  prepended to the testsuite summary and should contain any special
  remarks you have on your results or your build environment.  Please
  do not edit the testsuite result block or the subject line, as these
*************** messages may be automatically processed.
*** 294,307 ****
  </p>
  <hr />
  <p>
! <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
  
  
  
! <hr>
  
  
  
--- 279,292 ----
  </p>
  <hr />
  <p>
! <p><a class="uref" href="./index.html">Return to the GCC Installation page</a>
  </p>
  
  
  
  
  
! </div>
  
  
  
diff -Nrcpad gcc-14.3.0/LAST_UPDATED gcc-14.3.0-RC-20260619/LAST_UPDATED
*** gcc-14.3.0/LAST_UPDATED	Fri May 23 11:03:16 2025
--- gcc-14.3.0-RC-20260619/LAST_UPDATED	Fri Jun 19 06:51:09 2026
***************
*** 1 ****
! Obtained from git: releases/gcc-14.3.0 revision c9cd41fba9ebd288c4f101e4b99da934bcb96a11
--- 1 ----
! Obtained from git: releases/gcc-14 revision 0c553ee07b1aac30b53ce0d72702f744565f64f2
diff -Nrcpad gcc-14.3.0/MD5SUMS gcc-14.3.0-RC-20260619/MD5SUMS
*** gcc-14.3.0/MD5SUMS	Fri May 23 11:28:19 2025
--- gcc-14.3.0-RC-20260619/MD5SUMS	Fri Jun 19 07:15:03 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-14.3.0.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-14.3.0-RC-20260619.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
*************** fc9280b02bc68e4fb1ef8d51ccc25061  Change
*** 23,44 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 9ab6daa89fc92a2e485ce8f6e9ca9f98  INSTALL/binaries.html
! f18639690f7408ca75fa0504a032922d  INSTALL/build.html
! ce83147bc7ea951fd3300842379a42a1  INSTALL/configure.html
! df8c8c0f82c01726f0704bde5383cc61  INSTALL/download.html
! 485def61831ea43d0204b43a04d71bb3  INSTALL/finalinstall.html
! 90ab5add2096a0cd350292c2ced2a20e  INSTALL/gfdl.html
! 7023e54601309b5ab632a89776eed5d4  INSTALL/index.html
! 08411cac0ac392acdd84b085f6f37392  INSTALL/prerequisites.html
! 3067e92027f876fed112a97c2fdafa5e  INSTALL/specific.html
! be016d38762a1f4c45d7eec3035752da  INSTALL/test.html
! ab44c7d5b8ec79a54c29896ee19c0529  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
  04e7c3cf75f7111c005a8c0dee7adc5c  Makefile.tpl
! 217c4271a2128f206ef677ae89b2367c  NEWS
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  9379732cf9aa74b691cf12d440536a33  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
--- 23,44 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! c5a042a2d6a343e282f3a5364cb9a026  INSTALL/binaries.html
! 47799881875056cccecae2f974cd2438  INSTALL/build.html
! 9bd759f3106336ee36f61f24820340ac  INSTALL/configure.html
! 554d7da2687d0a9379c8d4a5aa18854a  INSTALL/download.html
! d6d1dc94855cb74db19f662a8e0a30cb  INSTALL/finalinstall.html
! 96c856a35ad9e6322afd60364eca8588  INSTALL/gfdl.html
! d6cd1380bd71515d594344d78c3187c2  INSTALL/index.html
! aab013f2e01e5455b57ce6a4fd5ad9a5  INSTALL/prerequisites.html
! 22d543389440da4922242e111d324945  INSTALL/specific.html
! 7febcdc528482e3e85359df805bdaa65  INSTALL/test.html
! 9ab757f821567f40f10dabeac0022d9e  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
  04e7c3cf75f7111c005a8c0dee7adc5c  Makefile.tpl
! 5490a2c2416480348f9d8e5ebe4e69aa  NEWS
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  9379732cf9aa74b691cf12d440536a33  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 511,522 ****
  8baab8698bb83c6b90ef4091c00ddc1e  fixincludes/tests/base/unistd.h
  75d75572793b62bdd8ff4d1504e0cb4c  fixincludes/tests/base/yvals.h
  baf9b6e2583cff7f3b9de94370dd739e  gcc/ABOUT-GCC-NLS
! 63943dd317754bd41a235d8a6f8c76cd  gcc/BASE-VER
  59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! c57294eec6d28c2be6e8b91b8cac0118  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
--- 511,522 ----
  8baab8698bb83c6b90ef4091c00ddc1e  fixincludes/tests/base/unistd.h
  75d75572793b62bdd8ff4d1504e0cb4c  fixincludes/tests/base/yvals.h
  baf9b6e2583cff7f3b9de94370dd739e  gcc/ABOUT-GCC-NLS
! bc7394806417778d77541ba1ec0e4a70  gcc/BASE-VER
  59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! a195fe82cdaa8a19087004a9eec73403  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 552,558 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 3772f2ca36f694559e5d6e1f64c13543  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 552,558 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! b418561f47d35cf242e81abb0be23894  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 564,570 ****
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 32b626b14f731548c503f6e57ca669c3  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
--- 564,570 ----
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! aaf72e77bf4616393553dfbec0996623  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
*************** c81efe8ccbd5f5b8399a3496f5015859  gcc/ad
*** 592,598 ****
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  711afb6f8ec14edf7425445a669e85ed  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! ebd465b2e3467e1e5c6df06be9255707  gcc/ada/Makefile.rtl
  8fc60e49303a639f7ec7c61a44f3f460  gcc/ada/accessibility.adb
  d19afffa65b63be4a8fd705f4b3f891f  gcc/ada/accessibility.ads
  14559d7d76c0ae16e72bf37828ab86a6  gcc/ada/ada_get_targ.adb
--- 592,598 ----
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  711afb6f8ec14edf7425445a669e85ed  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 9b2639d605f95c45ccfbcdab9a1c4e69  gcc/ada/Makefile.rtl
  8fc60e49303a639f7ec7c61a44f3f460  gcc/ada/accessibility.adb
  d19afffa65b63be4a8fd705f4b3f891f  gcc/ada/accessibility.ads
  14559d7d76c0ae16e72bf37828ab86a6  gcc/ada/ada_get_targ.adb
*************** d7e80ed6dc120d292c92120a7d566b74  gcc/ad
*** 600,606 ****
  dacffa0d5abeed22123335e3f6b8e61f  gcc/ada/adabkend.ads
  0ae00ad41c876f51ffa36e7e0c47f014  gcc/ada/adadecode.c
  0393ceca2b2879e7848e5b1cf7ad3016  gcc/ada/adadecode.h
! a437dcd18577a150213a4cb353eb578b  gcc/ada/adaint.c
  8ed92ebba3a19283274f9d3a536e9b7f  gcc/ada/adaint.h
  53e1b8b954d1909dd54d42f601b58306  gcc/ada/affinity.c
  23b2f7a3d261df5e4175f459ac3b7fc5  gcc/ada/ali-util.adb
--- 600,606 ----
  dacffa0d5abeed22123335e3f6b8e61f  gcc/ada/adabkend.ads
  0ae00ad41c876f51ffa36e7e0c47f014  gcc/ada/adadecode.c
  0393ceca2b2879e7848e5b1cf7ad3016  gcc/ada/adadecode.h
! 86aa6c5a7a2ab64d032f02448359063b  gcc/ada/adaint.c
  8ed92ebba3a19283274f9d3a536e9b7f  gcc/ada/adaint.h
  53e1b8b954d1909dd54d42f601b58306  gcc/ada/affinity.c
  23b2f7a3d261df5e4175f459ac3b7fc5  gcc/ada/ali-util.adb
*************** bb1ac51d891c2c88e66b325ec4ba37b6  gcc/ad
*** 739,745 ****
  c36c56653344092753d38d009f78b7d3  gcc/ada/exp_aggr.ads
  505062d76424b26ea35495f992e978ec  gcc/ada/exp_atag.adb
  f9d94a939aaa986fb1957454afcc5783  gcc/ada/exp_atag.ads
! a1e4480e82cd509ee409e3cb2a1b283d  gcc/ada/exp_attr.adb
  1f0d00e4f924cd79fcb70a729dcad92f  gcc/ada/exp_attr.ads
  33fd3e67f2d31ec03f6c604e5824bdfd  gcc/ada/exp_cg.adb
  ac19bd8c659aa1e17cfa0e35d7b09495  gcc/ada/exp_cg.ads
--- 739,745 ----
  c36c56653344092753d38d009f78b7d3  gcc/ada/exp_aggr.ads
  505062d76424b26ea35495f992e978ec  gcc/ada/exp_atag.adb
  f9d94a939aaa986fb1957454afcc5783  gcc/ada/exp_atag.ads
! e6b0e78a23cc304372059f922142c8a2  gcc/ada/exp_attr.adb
  1f0d00e4f924cd79fcb70a729dcad92f  gcc/ada/exp_attr.ads
  33fd3e67f2d31ec03f6c604e5824bdfd  gcc/ada/exp_cg.adb
  ac19bd8c659aa1e17cfa0e35d7b09495  gcc/ada/exp_cg.ads
*************** ac19bd8c659aa1e17cfa0e35d7b09495  gcc/ad
*** 750,765 ****
  5c04b41f9e620809675530141c3f64d8  gcc/ada/exp_ch12.ads
  f1bfa2648500a71b4c4c0d24081c9662  gcc/ada/exp_ch13.adb
  193e648141a05608c24771d4ce12cf91  gcc/ada/exp_ch13.ads
! 9fd3a98ae8c86e7f77cb0056423df3fe  gcc/ada/exp_ch2.adb
  12ef8e19cc84af2f3c87be58df3f410e  gcc/ada/exp_ch2.ads
  b4b613cbffeeb865a152328485047a0d  gcc/ada/exp_ch3.adb
  ecce68e20f7bfd0dacc18bbc60e5fd89  gcc/ada/exp_ch3.ads
! a99675e2905f1fcc975075e8d4d99655  gcc/ada/exp_ch4.adb
  bd7720c5f01afd52050aaa1379d7c41e  gcc/ada/exp_ch4.ads
  07415781357054497531ab80a03e3e2e  gcc/ada/exp_ch5.adb
  12989fbdd0324ccca43790feab509aca  gcc/ada/exp_ch5.ads
! ad7056e6b552c5a435d8f718db6cc93d  gcc/ada/exp_ch6.adb
! cd643f66385153e405f6ede55f10df5d  gcc/ada/exp_ch6.ads
  ed117df3c3000174fd1691b77ceaaaec  gcc/ada/exp_ch7.adb
  12c7919095c97ce108181b2f43d11e7e  gcc/ada/exp_ch7.ads
  aef4f29eb0abe39c14db4193d48cfd55  gcc/ada/exp_ch8.adb
--- 750,765 ----
  5c04b41f9e620809675530141c3f64d8  gcc/ada/exp_ch12.ads
  f1bfa2648500a71b4c4c0d24081c9662  gcc/ada/exp_ch13.adb
  193e648141a05608c24771d4ce12cf91  gcc/ada/exp_ch13.ads
! cd1cbad13fa3c5e056ffe08aa82a28de  gcc/ada/exp_ch2.adb
  12ef8e19cc84af2f3c87be58df3f410e  gcc/ada/exp_ch2.ads
  b4b613cbffeeb865a152328485047a0d  gcc/ada/exp_ch3.adb
  ecce68e20f7bfd0dacc18bbc60e5fd89  gcc/ada/exp_ch3.ads
! a11415c08743579770ffcc6a2a101958  gcc/ada/exp_ch4.adb
  bd7720c5f01afd52050aaa1379d7c41e  gcc/ada/exp_ch4.ads
  07415781357054497531ab80a03e3e2e  gcc/ada/exp_ch5.adb
  12989fbdd0324ccca43790feab509aca  gcc/ada/exp_ch5.ads
! fad0f20027144371a4b14e851f5e8786  gcc/ada/exp_ch6.adb
! cf3c1390e15217195ce2e5a31c7f435d  gcc/ada/exp_ch6.ads
  ed117df3c3000174fd1691b77ceaaaec  gcc/ada/exp_ch7.adb
  12c7919095c97ce108181b2f43d11e7e  gcc/ada/exp_ch7.ads
  aef4f29eb0abe39c14db4193d48cfd55  gcc/ada/exp_ch8.adb
*************** c3f0e2c172bb60f503a35585c1009a94  gcc/ad
*** 818,824 ****
  17437eda84b99bfdd095c5860feeedcb  gcc/ada/frontend.adb
  6e0674dd153e4a2f5f47855c9c4db95c  gcc/ada/frontend.ads
  65e08c7882cf1efd1525ad29e13c0580  gcc/ada/gcc-interface/Make-lang.in
! e6dedec5b5403c4846bd368c54124a85  gcc/ada/gcc-interface/Makefile.in
  31af75105a7e50a05c0dd45b031da217  gcc/ada/gcc-interface/ada-builtin-types.def
  eece73bb8df5d8e966ff30b18bc77b4f  gcc/ada/gcc-interface/ada-builtins.def
  669f7df0837a527e705df1b02478cc32  gcc/ada/gcc-interface/ada-tree.def
--- 818,824 ----
  17437eda84b99bfdd095c5860feeedcb  gcc/ada/frontend.adb
  6e0674dd153e4a2f5f47855c9c4db95c  gcc/ada/frontend.ads
  65e08c7882cf1efd1525ad29e13c0580  gcc/ada/gcc-interface/Make-lang.in
! 69426ebe57dc4a83cb8d8f882a4707af  gcc/ada/gcc-interface/Makefile.in
  31af75105a7e50a05c0dd45b031da217  gcc/ada/gcc-interface/ada-builtin-types.def
  eece73bb8df5d8e966ff30b18bc77b4f  gcc/ada/gcc-interface/ada-builtins.def
  669f7df0837a527e705df1b02478cc32  gcc/ada/gcc-interface/ada-tree.def
*************** e76788ae5fdae399904afcee294d994e  gcc/ad
*** 826,832 ****
  2d59d22647c9cc2b47b4898c4dd4cb21  gcc/ada/gcc-interface/ada.h
  ace55b710e2eba0e33421198b158de00  gcc/ada/gcc-interface/config-lang.in
  52ac0b9aec1b1a53cb183788c4a36595  gcc/ada/gcc-interface/cuintp.cc
! 42f91c41ceffd7fae6d925206d53de0f  gcc/ada/gcc-interface/decl.cc
  e95c0feeaced6a36656b245efe836c63  gcc/ada/gcc-interface/gadaint.h
  f61a98e52a715a073f777f982f1394b7  gcc/ada/gcc-interface/gigi.h
  0609d8dffb6cdfbd0d07912a8da3038d  gcc/ada/gcc-interface/lang-specs.h
--- 826,832 ----
  2d59d22647c9cc2b47b4898c4dd4cb21  gcc/ada/gcc-interface/ada.h
  ace55b710e2eba0e33421198b158de00  gcc/ada/gcc-interface/config-lang.in
  52ac0b9aec1b1a53cb183788c4a36595  gcc/ada/gcc-interface/cuintp.cc
! 71f567593230fd03b831b2955067d038  gcc/ada/gcc-interface/decl.cc
  e95c0feeaced6a36656b245efe836c63  gcc/ada/gcc-interface/gadaint.h
  f61a98e52a715a073f777f982f1394b7  gcc/ada/gcc-interface/gigi.h
  0609d8dffb6cdfbd0d07912a8da3038d  gcc/ada/gcc-interface/lang-specs.h
*************** f61a98e52a715a073f777f982f1394b7  gcc/ad
*** 836,842 ****
  c04f30ccd26df7b20a118015913dc8d1  gcc/ada/gcc-interface/system.ads
  8abd80bc601182d50d4f835dcfb9350c  gcc/ada/gcc-interface/targtyps.cc
  9e3e5deb5e0b5742538534e1e5fbc6c6  gcc/ada/gcc-interface/trans.cc
! afc89bcf5977d8ddc4aedf635d18a82d  gcc/ada/gcc-interface/utils.cc
  24d282dce1b4ea4028f6526a978c21a0  gcc/ada/gcc-interface/utils2.cc
  436eced51949ed1ca279a6a8745fdc85  gcc/ada/gen_il-fields.ads
  fa8c0b5e369960e72685e36f3adce798  gcc/ada/gen_il-gen-gen_entities.adb
--- 836,842 ----
  c04f30ccd26df7b20a118015913dc8d1  gcc/ada/gcc-interface/system.ads
  8abd80bc601182d50d4f835dcfb9350c  gcc/ada/gcc-interface/targtyps.cc
  9e3e5deb5e0b5742538534e1e5fbc6c6  gcc/ada/gcc-interface/trans.cc
! 8b1671dbf899b300d7b95724d9cd2f46  gcc/ada/gcc-interface/utils.cc
  24d282dce1b4ea4028f6526a978c21a0  gcc/ada/gcc-interface/utils2.cc
  436eced51949ed1ca279a6a8745fdc85  gcc/ada/gen_il-fields.ads
  fa8c0b5e369960e72685e36f3adce798  gcc/ada/gen_il-gen-gen_entities.adb
*************** e3278151cbffbda15622ee6e514feb12  gcc/ad
*** 2171,2177 ****
  b657b4be2fa53ecca6ecf74fb822c581  gcc/ada/libgnat/s-forrea.ads
  e202b72f4e41473077da605938fb7d8c  gcc/ada/libgnat/s-gearop.adb
  955feca07ad547b58b5ea56690826684  gcc/ada/libgnat/s-gearop.ads
! 1a35da100fe688a08f9ed6fff19613be  gcc/ada/libgnat/s-genbig.adb
  c90046860d2f4f880a33b25e10f79245  gcc/ada/libgnat/s-genbig.ads
  daf36f04dced8b04cfe641e1ebfd7fb0  gcc/ada/libgnat/s-geveop.adb
  c9f67439e38700a3542acfbbf92e5cee  gcc/ada/libgnat/s-geveop.ads
--- 2171,2177 ----
  b657b4be2fa53ecca6ecf74fb822c581  gcc/ada/libgnat/s-forrea.ads
  e202b72f4e41473077da605938fb7d8c  gcc/ada/libgnat/s-gearop.adb
  955feca07ad547b58b5ea56690826684  gcc/ada/libgnat/s-gearop.ads
! eb8ad38c60bc35772d8b868fd98357a7  gcc/ada/libgnat/s-genbig.adb
  c90046860d2f4f880a33b25e10f79245  gcc/ada/libgnat/s-genbig.ads
  daf36f04dced8b04cfe641e1ebfd7fb0  gcc/ada/libgnat/s-geveop.adb
  c9f67439e38700a3542acfbbf92e5cee  gcc/ada/libgnat/s-geveop.ads
*************** f8ed5d7de1805f88c616da1fc6db296f  gcc/ad
*** 2589,2595 ****
  216cb40a8c5e7320eabd8152c93fe765  gcc/ada/libgnat/s-stoele.ads
  f5282c29a72e62145ea1c266dea51032  gcc/ada/libgnat/s-stopoo.adb
  1713c674a5ff1626e0cfbf2437051261  gcc/ada/libgnat/s-stopoo.ads
! 04ecd4e8f101e346d98861663bf191bf  gcc/ada/libgnat/s-stposu.adb
  5058409e38dd0596ecf8ce6aa6b37549  gcc/ada/libgnat/s-stposu.ads
  5a2a368cfceee81555b6a6fd198d2bcd  gcc/ada/libgnat/s-stratt.adb
  33547a946aa759d0c95317ff08ede32c  gcc/ada/libgnat/s-stratt.ads
--- 2589,2595 ----
  216cb40a8c5e7320eabd8152c93fe765  gcc/ada/libgnat/s-stoele.ads
  f5282c29a72e62145ea1c266dea51032  gcc/ada/libgnat/s-stopoo.adb
  1713c674a5ff1626e0cfbf2437051261  gcc/ada/libgnat/s-stopoo.ads
! fb8696fdd5a8bb733752bcc187b2aed2  gcc/ada/libgnat/s-stposu.adb
  5058409e38dd0596ecf8ce6aa6b37549  gcc/ada/libgnat/s-stposu.ads
  5a2a368cfceee81555b6a6fd198d2bcd  gcc/ada/libgnat/s-stratt.adb
  33547a946aa759d0c95317ff08ede32c  gcc/ada/libgnat/s-stratt.ads
*************** c3e105b8e4ef476f9504c4bd95b16fc4  gcc/ad
*** 2732,2738 ****
  61438b257972c479df398813ba92da55  gcc/ada/libgnat/system-linux-arm.ads
  1992f7b8b5a3020137d048d227d492a7  gcc/ada/libgnat/system-linux-hppa.ads
  452b711e5e523a65b5d694b48cf8de4a  gcc/ada/libgnat/system-linux-ia64.ads
! 7bd9df64099aebfcaba4cc40c9c0ff66  gcc/ada/libgnat/system-linux-loongarch.ads
  480a61d83eed366cd531010ef5577d62  gcc/ada/libgnat/system-linux-m68k.ads
  61156ab81207df6fb164a6015040b983  gcc/ada/libgnat/system-linux-mips.ads
  0654f6fcc824e196149d3a4024203b15  gcc/ada/libgnat/system-linux-ppc.ads
--- 2732,2738 ----
  61438b257972c479df398813ba92da55  gcc/ada/libgnat/system-linux-arm.ads
  1992f7b8b5a3020137d048d227d492a7  gcc/ada/libgnat/system-linux-hppa.ads
  452b711e5e523a65b5d694b48cf8de4a  gcc/ada/libgnat/system-linux-ia64.ads
! a1612362970a7cadb3e63d149a188313  gcc/ada/libgnat/system-linux-loongarch.ads
  480a61d83eed366cd531010ef5577d62  gcc/ada/libgnat/system-linux-m68k.ads
  61156ab81207df6fb164a6015040b983  gcc/ada/libgnat/system-linux-mips.ads
  0654f6fcc824e196149d3a4024203b15  gcc/ada/libgnat/system-linux-ppc.ads
*************** b933d50718bbf8c37af06c1cabbf8ad7  gcc/ad
*** 2873,2879 ****
  eb5b758ba3e85b8f175dc116b6db80fb  gcc/ada/sem.ads
  ea95f379311ce24cb1270c0f9fd6928e  gcc/ada/sem_aggr.adb
  436d93842434a4c75c4c10d1c61ecff6  gcc/ada/sem_aggr.ads
! 32d9baf07ef34e059861e3dadfe14678  gcc/ada/sem_attr.adb
  74003bfd4a4ddc226d22ff250b7311da  gcc/ada/sem_attr.ads
  8c1e03cef41e17303ae7283fc83878c3  gcc/ada/sem_aux.adb
  9e1f7aa41949f281c2a8571972eebd97  gcc/ada/sem_aux.ads
--- 2873,2879 ----
  eb5b758ba3e85b8f175dc116b6db80fb  gcc/ada/sem.ads
  ea95f379311ce24cb1270c0f9fd6928e  gcc/ada/sem_aggr.adb
  436d93842434a4c75c4c10d1c61ecff6  gcc/ada/sem_aggr.ads
! 5d32d6c85324eb7c65762928c1a1039e  gcc/ada/sem_attr.adb
  74003bfd4a4ddc226d22ff250b7311da  gcc/ada/sem_attr.ads
  8c1e03cef41e17303ae7283fc83878c3  gcc/ada/sem_aux.adb
  9e1f7aa41949f281c2a8571972eebd97  gcc/ada/sem_aux.ads
*************** ea95f379311ce24cb1270c0f9fd6928e  gcc/ad
*** 2881,2893 ****
  4720d3b624b67eb8b0bd3ecf72e5036e  gcc/ada/sem_case.ads
  20e1377be7c164bfe42091d5a2818b12  gcc/ada/sem_cat.adb
  b0afafbff8da051dd403a4a6f0a248ea  gcc/ada/sem_cat.ads
! 71641fe62a5d2820fe4a164acbbd3ab9  gcc/ada/sem_ch10.adb
  bf74f6e2c62b4e2464758bb57dc318f1  gcc/ada/sem_ch10.ads
  674123905ccf9e89912ba95a9b85b587  gcc/ada/sem_ch11.adb
  a42d1434a6e8051360f7eac7ca8b8621  gcc/ada/sem_ch11.ads
  ea7dc7e9dd9e49ac40842d1870c7901f  gcc/ada/sem_ch12.adb
  896f5b203b3fb877f57c4eaf1e9b3c4f  gcc/ada/sem_ch12.ads
! dbd738800bd8d52cac7c0cb6c761558c  gcc/ada/sem_ch13.adb
  d4c2fa9c2e05bd04b3cf5bb65c4bc03c  gcc/ada/sem_ch13.ads
  2f9b939583011a4cabb6b7a882b61f05  gcc/ada/sem_ch2.adb
  5d2d57f3675319ba7ce63149ee068264  gcc/ada/sem_ch2.ads
--- 2881,2893 ----
  4720d3b624b67eb8b0bd3ecf72e5036e  gcc/ada/sem_case.ads
  20e1377be7c164bfe42091d5a2818b12  gcc/ada/sem_cat.adb
  b0afafbff8da051dd403a4a6f0a248ea  gcc/ada/sem_cat.ads
! 08bfe0abce7627958378b99bb364b08c  gcc/ada/sem_ch10.adb
  bf74f6e2c62b4e2464758bb57dc318f1  gcc/ada/sem_ch10.ads
  674123905ccf9e89912ba95a9b85b587  gcc/ada/sem_ch11.adb
  a42d1434a6e8051360f7eac7ca8b8621  gcc/ada/sem_ch11.ads
  ea7dc7e9dd9e49ac40842d1870c7901f  gcc/ada/sem_ch12.adb
  896f5b203b3fb877f57c4eaf1e9b3c4f  gcc/ada/sem_ch12.ads
! b1af0d85b8692052e12ebbe95a3c2da2  gcc/ada/sem_ch13.adb
  d4c2fa9c2e05bd04b3cf5bb65c4bc03c  gcc/ada/sem_ch13.ads
  2f9b939583011a4cabb6b7a882b61f05  gcc/ada/sem_ch2.adb
  5d2d57f3675319ba7ce63149ee068264  gcc/ada/sem_ch2.ads
*************** ab048777605cd1eaf9e72d7870a2f0b0  gcc/ad
*** 2907,2917 ****
  5312c92c9cf432c51de28985511eabb4  gcc/ada/sem_ch9.ads
  ae5a773c940f7d18496faa6dea15ae3a  gcc/ada/sem_dim.adb
  a2d500c96e386078290596a7c11fc749  gcc/ada/sem_dim.ads
! aecb842d76fc399f8fc370849a9d9129  gcc/ada/sem_disp.adb
  fde7a59c931876f5221d8c088f4e9cb9  gcc/ada/sem_disp.ads
  3ed683f4141f83ceb764aef056e360ac  gcc/ada/sem_dist.adb
  744cc764c9e676171c6c9c2a7b7540e6  gcc/ada/sem_dist.ads
! a5f55e174ef43a753e3e9e06ea83a917  gcc/ada/sem_elab.adb
  2b5599a6b9e36d4947b2cc6f89c3aa2c  gcc/ada/sem_elab.ads
  456bc69903dc6e1c39ca009d24433f2f  gcc/ada/sem_elim.adb
  75977e6ca2d3fa68e4c675ddb42ddcf2  gcc/ada/sem_elim.ads
--- 2907,2917 ----
  5312c92c9cf432c51de28985511eabb4  gcc/ada/sem_ch9.ads
  ae5a773c940f7d18496faa6dea15ae3a  gcc/ada/sem_dim.adb
  a2d500c96e386078290596a7c11fc749  gcc/ada/sem_dim.ads
! 20fdc60507e4ce5002b1bc493dd9753b  gcc/ada/sem_disp.adb
  fde7a59c931876f5221d8c088f4e9cb9  gcc/ada/sem_disp.ads
  3ed683f4141f83ceb764aef056e360ac  gcc/ada/sem_dist.adb
  744cc764c9e676171c6c9c2a7b7540e6  gcc/ada/sem_dist.ads
! e654e57c26c32d3464c4ffb7e9ec71f7  gcc/ada/sem_elab.adb
  2b5599a6b9e36d4947b2cc6f89c3aa2c  gcc/ada/sem_elab.ads
  456bc69903dc6e1c39ca009d24433f2f  gcc/ada/sem_elim.adb
  75977e6ca2d3fa68e4c675ddb42ddcf2  gcc/ada/sem_elim.ads
*************** c41ea1eec3b0830963f79c14d063d22f  gcc/ad
*** 2923,2930 ****
  7f1041dd5ba5109f1e6025c630b63adb  gcc/ada/sem_mech.ads
  b3a39b8394fc84cd37d3e086c70d3b2c  gcc/ada/sem_prag.adb
  63a8f08f2cccf6ee8accd90898431e27  gcc/ada/sem_prag.ads
! ba516bb53a359104237876fb07902dec  gcc/ada/sem_res.adb
! eaeb267a8aaf6d54e425b8635c939aa7  gcc/ada/sem_res.ads
  ca7ac9d028d99b2476761193d5918cd2  gcc/ada/sem_scil.adb
  b50105a263aa360fa58f319f08d1922f  gcc/ada/sem_scil.ads
  0ad5427163863a084e7411c4ab9cc101  gcc/ada/sem_smem.adb
--- 2923,2930 ----
  7f1041dd5ba5109f1e6025c630b63adb  gcc/ada/sem_mech.ads
  b3a39b8394fc84cd37d3e086c70d3b2c  gcc/ada/sem_prag.adb
  63a8f08f2cccf6ee8accd90898431e27  gcc/ada/sem_prag.ads
! 8fdc43ae0424f7d39f6c0680b1ed2830  gcc/ada/sem_res.adb
! 9bddd7a81af4ff943a1b504e95437720  gcc/ada/sem_res.ads
  ca7ac9d028d99b2476761193d5918cd2  gcc/ada/sem_scil.adb
  b50105a263aa360fa58f319f08d1922f  gcc/ada/sem_scil.ads
  0ad5427163863a084e7411c4ab9cc101  gcc/ada/sem_smem.adb
*************** d833b4b6e2dc4e170cf059f5286d55d8  gcc/ad
*** 3036,3047 ****
  24eade18dfea4858d18e0befd8b97a7e  gcc/ada/xutil.ads
  6b61c248d8d365e41e3056a6b692cc1d  gcc/addresses.h
  85955146c0cd00b4541afc4076fa17b9  gcc/adjust-alignment.cc
! d26f49a857a199a0971344812eeb04c3  gcc/alias.cc
  0f4702138fd7573d96ae2c8135b41255  gcc/alias.h
  1cd09d1b18b5ce7d249387ae22ccfaec  gcc/align.h
  1810c60b7a3a20ff5222ab395bfcb9b8  gcc/alloc-pool.cc
  70fcb458fbb566795a112c1c4acc6ba3  gcc/alloc-pool.h
! da0726e11f53234d1e11f3ed6bc99f29  gcc/analyzer/ChangeLog
  40aeba69eba0bc4d03bc49ec82be5dfe  gcc/analyzer/access-diagram.cc
  288c2e0f18804938ea90737b356795a7  gcc/analyzer/access-diagram.h
  a805619319bbeaf2dfb10570535cc2cf  gcc/analyzer/analysis-plan.cc
--- 3036,3047 ----
  24eade18dfea4858d18e0befd8b97a7e  gcc/ada/xutil.ads
  6b61c248d8d365e41e3056a6b692cc1d  gcc/addresses.h
  85955146c0cd00b4541afc4076fa17b9  gcc/adjust-alignment.cc
! 8db551114142b02bb48b0ea1098635c1  gcc/alias.cc
  0f4702138fd7573d96ae2c8135b41255  gcc/alias.h
  1cd09d1b18b5ce7d249387ae22ccfaec  gcc/align.h
  1810c60b7a3a20ff5222ab395bfcb9b8  gcc/alloc-pool.cc
  70fcb458fbb566795a112c1c4acc6ba3  gcc/alloc-pool.h
! 8fb85d7eb1dda2275b309397ff64262e  gcc/analyzer/ChangeLog
  40aeba69eba0bc4d03bc49ec82be5dfe  gcc/analyzer/access-diagram.cc
  288c2e0f18804938ea90737b356795a7  gcc/analyzer/access-diagram.h
  a805619319bbeaf2dfb10570535cc2cf  gcc/analyzer/analysis-plan.cc
*************** df30d947215871a127fd15890f273eb5  gcc/an
*** 3090,3096 ****
  68ce3e0366fdefd98d9d3cefc83a2d67  gcc/analyzer/inlining-iterator.h
  6362d54873dfb84284862eddd2149e63  gcc/analyzer/kf-analyzer.cc
  c2dec447021e97891a647eb424018425  gcc/analyzer/kf-lang-cp.cc
! c8132febd011dadcf5e2bd417ba9ba91  gcc/analyzer/kf.cc
  0c3697fc1f675e773c7f5b9c011b4385  gcc/analyzer/known-function-manager.cc
  c38709f405f6d3ed16bfc16d3e6a21ab  gcc/analyzer/known-function-manager.h
  efa0614f169859c88233e35d4f69e1ea  gcc/analyzer/pending-diagnostic.cc
--- 3090,3096 ----
  68ce3e0366fdefd98d9d3cefc83a2d67  gcc/analyzer/inlining-iterator.h
  6362d54873dfb84284862eddd2149e63  gcc/analyzer/kf-analyzer.cc
  c2dec447021e97891a647eb424018425  gcc/analyzer/kf-lang-cp.cc
! 05750f55e10df77e2b10e6b4a3e574a1  gcc/analyzer/kf.cc
  0c3697fc1f675e773c7f5b9c011b4385  gcc/analyzer/known-function-manager.cc
  c38709f405f6d3ed16bfc16d3e6a21ab  gcc/analyzer/known-function-manager.h
  efa0614f169859c88233e35d4f69e1ea  gcc/analyzer/pending-diagnostic.cc
*************** fdca8fc9a6bbdade1a8aeceee3e00285  gcc/bi
*** 3157,3178 ****
  46dfb234fa66d9bd9a5e085b662b7c5a  gcc/btfout.cc
  bceab672982ecb211cc6c6ed241b9758  gcc/builtin-attrs.def
  fb5f673cea6166ff90878e05bfa7dfe0  gcc/builtin-types.def
! ede17f9d46608ba7640863fbff3efc74  gcc/builtins.cc
  7bc731b65a1287130883ea830f32b347  gcc/builtins.def
  7fad42491d4a625f93bf21a7e2fb37de  gcc/builtins.h
! db84c7becfd46d80cb57ec7822215ed9  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  5c99106819e8051c3581d5098616d0dd  gcc/c-family/c-ada-spec.cc
  ba22e0144578c7dbcaa1887e6fd6046c  gcc/c-family/c-ada-spec.h
  d8e1cd0b904797f173e2493caaa19e03  gcc/c-family/c-attribs.cc
! e30283cc72b82ecd4f038fd07b956cd8  gcc/c-family/c-common.cc
  51998f9e7aec6e99e0428f2b836629c1  gcc/c-family/c-common.def
  b1e23baecab2464ead1618cb2d50a6ef  gcc/c-family/c-common.h
! 7e6740fc9833147bce7ec636f8223256  gcc/c-family/c-cppbuiltin.cc
  3c51c8a1bf9841ca850a743c9335be7b  gcc/c-family/c-dump.cc
  ed5e4fdaaa3c0c77618731dc0294dbc4  gcc/c-family/c-format.cc
  4b9c119ce2a0502632ac9f26fe560055  gcc/c-family/c-format.h
! 4ea9854482514f213c456ae2568962c3  gcc/c-family/c-gimplify.cc
  a6e23bc5770570ef1db57c75a2b60194  gcc/c-family/c-indentation.cc
  b6f81fd23a6e9c02b80c995f6f92273a  gcc/c-family/c-indentation.h
  0bc0e96f91611812a0952337bf4c84e7  gcc/c-family/c-lex.cc
--- 3157,3178 ----
  46dfb234fa66d9bd9a5e085b662b7c5a  gcc/btfout.cc
  bceab672982ecb211cc6c6ed241b9758  gcc/builtin-attrs.def
  fb5f673cea6166ff90878e05bfa7dfe0  gcc/builtin-types.def
! c3a52074158c4bcb100e638fcd471649  gcc/builtins.cc
  7bc731b65a1287130883ea830f32b347  gcc/builtins.def
  7fad42491d4a625f93bf21a7e2fb37de  gcc/builtins.h
! b5d1f3208e24d17936606a2172955b0a  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  5c99106819e8051c3581d5098616d0dd  gcc/c-family/c-ada-spec.cc
  ba22e0144578c7dbcaa1887e6fd6046c  gcc/c-family/c-ada-spec.h
  d8e1cd0b904797f173e2493caaa19e03  gcc/c-family/c-attribs.cc
! a9bb7bbf89706e206a593a31d7c52261  gcc/c-family/c-common.cc
  51998f9e7aec6e99e0428f2b836629c1  gcc/c-family/c-common.def
  b1e23baecab2464ead1618cb2d50a6ef  gcc/c-family/c-common.h
! f956d1fa8d26698610c709c58b4b695b  gcc/c-family/c-cppbuiltin.cc
  3c51c8a1bf9841ca850a743c9335be7b  gcc/c-family/c-dump.cc
  ed5e4fdaaa3c0c77618731dc0294dbc4  gcc/c-family/c-format.cc
  4b9c119ce2a0502632ac9f26fe560055  gcc/c-family/c-format.h
! 450dd73c2e668fe63652758ff0805660  gcc/c-family/c-gimplify.cc
  a6e23bc5770570ef1db57c75a2b60194  gcc/c-family/c-indentation.cc
  b6f81fd23a6e9c02b80c995f6f92273a  gcc/c-family/c-indentation.h
  0bc0e96f91611812a0952337bf4c84e7  gcc/c-family/c-lex.cc
*************** b09d9d6aee1af92f8929b0c5b6995d7b  gcc/c-
*** 3191,3197 ****
  2457327527de3def5270e6006c2a32d8  gcc/c-family/c-target-def.h
  085724efec485fdc227d010c8a971176  gcc/c-family/c-target.def
  20902ff635a8cf1f9e1d09ed5b2cf670  gcc/c-family/c-target.h
! bcdb4469cbe287703b77ab4cf0d78130  gcc/c-family/c-ubsan.cc
  b3ac1850d65a4a98a5f313d9b56a64a9  gcc/c-family/c-ubsan.h
  35cf572da85f0631e0efa0c62dfa5e48  gcc/c-family/c-warn.cc
  464846e76fe6978c8c3bc9197893af8a  gcc/c-family/c.opt
--- 3191,3197 ----
  2457327527de3def5270e6006c2a32d8  gcc/c-family/c-target-def.h
  085724efec485fdc227d010c8a971176  gcc/c-family/c-target.def
  20902ff635a8cf1f9e1d09ed5b2cf670  gcc/c-family/c-target.h
! 06ab29998a9772b66548bb3475567f82  gcc/c-family/c-ubsan.cc
  b3ac1850d65a4a98a5f313d9b56a64a9  gcc/c-family/c-ubsan.h
  35cf572da85f0631e0efa0c62dfa5e48  gcc/c-family/c-warn.cc
  464846e76fe6978c8c3bc9197893af8a  gcc/c-family/c.opt
*************** b3ac1850d65a4a98a5f313d9b56a64a9  gcc/c-
*** 3201,3211 ****
  083198bbb0e08402af9e32302cfb13f4  gcc/c-family/known-headers.h
  889dd6dda61d7bfa71bdc10ce6b98b06  gcc/c-family/name-hint.h
  65a88820b5866ee19cd29ed45ef95c5c  gcc/c-family/stub-objc.cc
! e0df811a62d0104b36f52a59106aff22  gcc/c/ChangeLog
  fb28ab1a3ac7e093beffa6875b5b921b  gcc/c/Make-lang.in
  6c28a645fc3125bc8a52d498324306de  gcc/c/c-aux-info.cc
  22456b24e2c3a46534e7f1e7516dae5f  gcc/c/c-convert.cc
! fb0dc88ab8a20629d33392ecbe5c6d10  gcc/c/c-decl.cc
  d5abc77cf8004e86fb7798f7912b35da  gcc/c/c-errors.cc
  3408879c9715f96eff9f06865f32349d  gcc/c/c-fold.cc
  7e4a9e386e03d8359d4acd839dac46fe  gcc/c/c-lang.cc
--- 3201,3211 ----
  083198bbb0e08402af9e32302cfb13f4  gcc/c-family/known-headers.h
  889dd6dda61d7bfa71bdc10ce6b98b06  gcc/c-family/name-hint.h
  65a88820b5866ee19cd29ed45ef95c5c  gcc/c-family/stub-objc.cc
! 0457917195b7a23e42c672dab075dcec  gcc/c/ChangeLog
  fb28ab1a3ac7e093beffa6875b5b921b  gcc/c/Make-lang.in
  6c28a645fc3125bc8a52d498324306de  gcc/c/c-aux-info.cc
  22456b24e2c3a46534e7f1e7516dae5f  gcc/c/c-convert.cc
! 7a89ab0f300bdd4a6ddebc65118ae49b  gcc/c/c-decl.cc
  d5abc77cf8004e86fb7798f7912b35da  gcc/c/c-errors.cc
  3408879c9715f96eff9f06865f32349d  gcc/c/c-fold.cc
  7e4a9e386e03d8359d4acd839dac46fe  gcc/c/c-lang.cc
*************** f1dd9f1e7ed0fc3ac58021d0ad6463d4  gcc/cf
*** 3235,3241 ****
  77b93f18c80b59bdd503ef437d9dcb07  gcc/cfgbuild.h
  a32902aba7ecfc0e993a63acb83b85fa  gcc/cfgcleanup.cc
  adc4224754a28694047a40d09b2406d9  gcc/cfgcleanup.h
! 0cf9f8b95498f04c0af0cf5a89366332  gcc/cfgexpand.cc
  0c5481b392d18841208d50dbc003d34c  gcc/cfgexpand.h
  07458bdd829e0db278bfd80486dc882e  gcc/cfghooks.cc
  8b8be944d5a2bf93159ccbc273ecc32c  gcc/cfghooks.h
--- 3235,3241 ----
  77b93f18c80b59bdd503ef437d9dcb07  gcc/cfgbuild.h
  a32902aba7ecfc0e993a63acb83b85fa  gcc/cfgcleanup.cc
  adc4224754a28694047a40d09b2406d9  gcc/cfgcleanup.h
! 986913b02e547bca3e7de33eefb0dd5f  gcc/cfgexpand.cc
  0c5481b392d18841208d50dbc003d34c  gcc/cfgexpand.h
  07458bdd829e0db278bfd80486dc882e  gcc/cfghooks.cc
  8b8be944d5a2bf93159ccbc273ecc32c  gcc/cfghooks.h
*************** d2e2dbc63c0154344dea94259ba7515b  gcc/cf
*** 3244,3252 ****
  749499045fcab71473fa7045412d9fec  gcc/cfgloopanal.cc
  469ed8437e5347547dcc428662491ec7  gcc/cfgloopmanip.cc
  85d2f4cd89ca64ed13cf1784d099c7ef  gcc/cfgloopmanip.h
! 55ff3fae3774d7d1f4cf793cdc85d36a  gcc/cfgrtl.cc
  621be2da689efc912f68e163b182acac  gcc/cfgrtl.h
! e96b4639e7fcc608fe111ec89b70504c  gcc/cgraph.cc
  18fbe7f9e2b6016552d7ceefd5509ed3  gcc/cgraph.h
  48d1e1b2c184a043a04232867cbbf4ee  gcc/cgraphbuild.cc
  a9521e7e3672b0a6bdeca1a495ba3627  gcc/cgraphclones.cc
--- 3244,3252 ----
  749499045fcab71473fa7045412d9fec  gcc/cfgloopanal.cc
  469ed8437e5347547dcc428662491ec7  gcc/cfgloopmanip.cc
  85d2f4cd89ca64ed13cf1784d099c7ef  gcc/cfgloopmanip.h
! a5a13e03513caa40b6e2e78a29c3f9ce  gcc/cfgrtl.cc
  621be2da689efc912f68e163b182acac  gcc/cfgrtl.h
! 2ffb11c899183c64ce1c764a40c8d083  gcc/cgraph.cc
  18fbe7f9e2b6016552d7ceefd5509ed3  gcc/cgraph.h
  48d1e1b2c184a043a04232867cbbf4ee  gcc/cgraphbuild.cc
  a9521e7e3672b0a6bdeca1a495ba3627  gcc/cgraphclones.cc
*************** cbd6d8995cfcad18b2f5ae1153282276  gcc/co
*** 3260,3266 ****
  607393ed0e257b432264a6620e2a13f1  gcc/collect2.h
  e2a09d84946e20cd6e720937153c454d  gcc/color-macros.h
  b2acfb49d4e75a712a34942113c2d747  gcc/combine-stack-adj.cc
! 633980892750fe25a3427d0525121022  gcc/combine.cc
  cc2f48cb176b5b4703617fb5dfc1acf0  gcc/common.md
  322473405a30de3627ba85a314faac7d  gcc/common.opt
  6b452769b5c1240c33daf177e1f3f847  gcc/common.opt.urls
--- 3260,3266 ----
  607393ed0e257b432264a6620e2a13f1  gcc/collect2.h
  e2a09d84946e20cd6e720937153c454d  gcc/color-macros.h
  b2acfb49d4e75a712a34942113c2d747  gcc/combine-stack-adj.cc
! 8092274370e60c5525c9c3f83792fa26  gcc/combine.cc
  cc2f48cb176b5b4703617fb5dfc1acf0  gcc/common.md
  322473405a30de3627ba85a314faac7d  gcc/common.opt
  6b452769b5c1240c33daf177e1f3f847  gcc/common.opt.urls
*************** e001b81d6c5692e6af812c4fce2bf76a  gcc/co
*** 3274,3280 ****
  06619ee1718f18e3f29b4d07cb640b2c  gcc/common/config/alpha/alpha-common.cc
  a8c00733608fe1011f08dac2c20a9a1a  gcc/common/config/arc/arc-common.cc
  1f03e90667938ec56879a963c84fbe92  gcc/common/config/arm/arm-common.cc
! 38421b8fbe371e0bf572fb4d3ec9e7fe  gcc/common/config/avr/avr-common.cc
  53b34db3ddff4a58abaad22147861801  gcc/common/config/bfin/bfin-common.cc
  ba829c2da1bd58a1a225c367d208474f  gcc/common/config/bpf/bpf-common.cc
  7e9ee0784a0b7530b09942de3a602e35  gcc/common/config/c6x/c6x-common.cc
--- 3274,3280 ----
  06619ee1718f18e3f29b4d07cb640b2c  gcc/common/config/alpha/alpha-common.cc
  a8c00733608fe1011f08dac2c20a9a1a  gcc/common/config/arc/arc-common.cc
  1f03e90667938ec56879a963c84fbe92  gcc/common/config/arm/arm-common.cc
! 8cee42a008be41ee97df35e34a935229  gcc/common/config/avr/avr-common.cc
  53b34db3ddff4a58abaad22147861801  gcc/common/config/bfin/bfin-common.cc
  ba829c2da1bd58a1a225c367d208474f  gcc/common/config/bpf/bpf-common.cc
  7e9ee0784a0b7530b09942de3a602e35  gcc/common/config/c6x/c6x-common.cc
*************** be688e434793ea02a7f9ee52992ea34d  gcc/co
*** 3323,3342 ****
  32188ac2131c770df03339725367ae4e  gcc/compare-elim.cc
  d7b7be0853c1adedc2ef4b171f9d8522  gcc/conditions.h
  ce915e557866ffa3df9a5b35ed401ce0  gcc/config.build
! 19db7b0adf834602d18c4baffe9e6e0d  gcc/config.gcc
  a838f308e3dcdd63685c24e6ff2586be  gcc/config.host
  3b202d5bab614e2275378bef1f708574  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  9cdb6f241c973fd5ce4c0b36c5a282c6  gcc/config/aarch64/aarch64-arches.def
! bdcc560c68a31540ed1be0895b491d16  gcc/config/aarch64/aarch64-builtins.cc
  0bb8e93654406d5816462dc1f8842769  gcc/config/aarch64/aarch64-builtins.h
  494ddd3c679bcdc80a1da0c474a5fcb8  gcc/config/aarch64/aarch64-c.cc
  d3b3f877b2f7ba7842ef909af5fc5c7b  gcc/config/aarch64/aarch64-cc-fusion.cc
! a17b67b85b4cff672d995ab11eef3784  gcc/config/aarch64/aarch64-cores.def
! d925338e5d17fde6b5de263fd751e66a  gcc/config/aarch64/aarch64-cost-tables.h
  19827f863b9abd957d663a067d5b2db2  gcc/config/aarch64/aarch64-d.cc
  4ddea453344c4e39481f379718aed12e  gcc/config/aarch64/aarch64-d.h
! 384a4c1df14dc707c40334bccccab61d  gcc/config/aarch64/aarch64-early-ra.cc
  4d5e3969a5f34509454d8ae9fb320737  gcc/config/aarch64/aarch64-elf-raw.h
  216353ccada5a78e01754365c3eb2d77  gcc/config/aarch64/aarch64-elf.h
  a289174b82942eb716cb2570624a336a  gcc/config/aarch64/aarch64-errata.h
--- 3323,3342 ----
  32188ac2131c770df03339725367ae4e  gcc/compare-elim.cc
  d7b7be0853c1adedc2ef4b171f9d8522  gcc/conditions.h
  ce915e557866ffa3df9a5b35ed401ce0  gcc/config.build
! 99ab9e3a07eb91876e573c783cc1abb3  gcc/config.gcc
  a838f308e3dcdd63685c24e6ff2586be  gcc/config.host
  3b202d5bab614e2275378bef1f708574  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  9cdb6f241c973fd5ce4c0b36c5a282c6  gcc/config/aarch64/aarch64-arches.def
! dca444af4c0fc52faf33fee1d848fe60  gcc/config/aarch64/aarch64-builtins.cc
  0bb8e93654406d5816462dc1f8842769  gcc/config/aarch64/aarch64-builtins.h
  494ddd3c679bcdc80a1da0c474a5fcb8  gcc/config/aarch64/aarch64-c.cc
  d3b3f877b2f7ba7842ef909af5fc5c7b  gcc/config/aarch64/aarch64-cc-fusion.cc
! 48a393d4f3ccf0b9d361930273ccf71d  gcc/config/aarch64/aarch64-cores.def
! 8710ba7e69e4eb0fe531cacce5ac0ef7  gcc/config/aarch64/aarch64-cost-tables.h
  19827f863b9abd957d663a067d5b2db2  gcc/config/aarch64/aarch64-d.cc
  4ddea453344c4e39481f379718aed12e  gcc/config/aarch64/aarch64-d.h
! f49618f0e3522fd9f35b3cc0f42ec005  gcc/config/aarch64/aarch64-early-ra.cc
  4d5e3969a5f34509454d8ae9fb320737  gcc/config/aarch64/aarch64-elf-raw.h
  216353ccada5a78e01754365c3eb2d77  gcc/config/aarch64/aarch64-elf.h
  a289174b82942eb716cb2570624a336a  gcc/config/aarch64/aarch64-errata.h
*************** e3e9b5f54d74124ed2134ed9adb9cfa2  gcc/co
*** 3354,3369 ****
  d1a1d7693a94b8604a3ba47c735ba2ac  gcc/config/aarch64/aarch64-option-extensions.def
  79e4ec77882101517b089ed6a907d0ae  gcc/config/aarch64/aarch64-opts.h
  d9397260c45e57a1d9da554ae2e2a646  gcc/config/aarch64/aarch64-passes.def
! 7cf7ae7cf4eb830d35e3ff4ba9be045d  gcc/config/aarch64/aarch64-protos.h
  7c179f0d23167a6411dadbbe19b1adcf  gcc/config/aarch64/aarch64-simd-builtin-types.def
  7235658ecb695c8e01083f68a4dd0b61  gcc/config/aarch64/aarch64-simd-builtins.def
! 716da804270a736dde5e6b0b00965830  gcc/config/aarch64/aarch64-simd.md
! 54435c62211d08bd572b8a19fc35dcfc  gcc/config/aarch64/aarch64-sme.md
  35478e154309fb549cd6bae4d905e2e9  gcc/config/aarch64/aarch64-speculation.cc
! 09cfcb842c6494b3ccff63b9dc54982b  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  3bc81aa2e94c0407eaf9de127a9e6d3a  gcc/config/aarch64/aarch64-sve-builtins-base.def
  2b738432736edd4eddd5722e5a062dce  gcc/config/aarch64/aarch64-sve-builtins-base.h
! 6aafb313053814ce802da580b6e77c75  gcc/config/aarch64/aarch64-sve-builtins-functions.h
  029141cce3292cf34c2d8422c733d6f4  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  7588702da59d40548d6c91889a877747  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
  232272deb157f5db86fe218568b3be08  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
--- 3354,3369 ----
  d1a1d7693a94b8604a3ba47c735ba2ac  gcc/config/aarch64/aarch64-option-extensions.def
  79e4ec77882101517b089ed6a907d0ae  gcc/config/aarch64/aarch64-opts.h
  d9397260c45e57a1d9da554ae2e2a646  gcc/config/aarch64/aarch64-passes.def
! 7ff198a5ccefefadf0e7e386637612f3  gcc/config/aarch64/aarch64-protos.h
  7c179f0d23167a6411dadbbe19b1adcf  gcc/config/aarch64/aarch64-simd-builtin-types.def
  7235658ecb695c8e01083f68a4dd0b61  gcc/config/aarch64/aarch64-simd-builtins.def
! abcd6dd3c7350930009da68b12c04bf9  gcc/config/aarch64/aarch64-simd.md
! 286d634914066cc77f8337ccccdc021c  gcc/config/aarch64/aarch64-sme.md
  35478e154309fb549cd6bae4d905e2e9  gcc/config/aarch64/aarch64-speculation.cc
! d61781a8107fcde97b92df6c8e0d1c46  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  3bc81aa2e94c0407eaf9de127a9e6d3a  gcc/config/aarch64/aarch64-sve-builtins-base.def
  2b738432736edd4eddd5722e5a062dce  gcc/config/aarch64/aarch64-sve-builtins-base.h
! 861a261dcbfb3cc01353e445191c1ba5  gcc/config/aarch64/aarch64-sve-builtins-functions.h
  029141cce3292cf34c2d8422c733d6f4  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  7588702da59d40548d6c91889a877747  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
  232272deb157f5db86fe218568b3be08  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
*************** d9397260c45e57a1d9da554ae2e2a646  gcc/co
*** 3372,3392 ****
  4055cb836892ac8d508fa1a8e20a37fa  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  ade931c980a35e627e0dc3fc91ee172e  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  d3d0a9db4cb45433208c51520e54f3bb  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! cb8fefd56454cff072785c6cee7b4664  gcc/config/aarch64/aarch64-sve-builtins.cc
  b9d38b6180a44e1f8f6103870af5dba2  gcc/config/aarch64/aarch64-sve-builtins.def
  ef06d72bc9e60ff08580d377b7f8883a  gcc/config/aarch64/aarch64-sve-builtins.h
! 9ee135da8b8ddff1cfee2600c36a8f1a  gcc/config/aarch64/aarch64-sve.md
! a39737ff1f5e6f846bf63d31e70b6410  gcc/config/aarch64/aarch64-sve2.md
! b8ea4d0fbacd00d61908ce1633d440fb  gcc/config/aarch64/aarch64-sys-regs.def
! e74b8aa51ed0a0fd74ec97bb4009c55f  gcc/config/aarch64/aarch64-tune.md
  6ede31fb52cae2cf590b667c55706637  gcc/config/aarch64/aarch64-tuning-flags.def
  93d2ce2396c397f594f146a9d7d80c52  gcc/config/aarch64/aarch64-vxworks.h
! 880e7b0625115361a29305a84304ccdf  gcc/config/aarch64/aarch64.cc
  be8a897650902ba46d1df7cb3a50ca2c  gcc/config/aarch64/aarch64.h
! 356f40f57c28daebc2895871909cc2f6  gcc/config/aarch64/aarch64.md
  3948f2f1b7b27ca528cac06ae5fe36ff  gcc/config/aarch64/aarch64.opt
  1277617373f7bad91a5af74470db72b3  gcc/config/aarch64/aarch64.opt.urls
! 50444b4cc17d01769c6e4fe9b5ba9a04  gcc/config/aarch64/arm_acle.h
  c55b48fec74c65f795a066248defd73c  gcc/config/aarch64/arm_bf16.h
  bc7f4369a16c4662b3bddb54d086bbf7  gcc/config/aarch64/arm_fp16.h
  cdbd4445c7cfe7382e25c6b15ce3a42a  gcc/config/aarch64/arm_neon.h
--- 3372,3392 ----
  4055cb836892ac8d508fa1a8e20a37fa  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  ade931c980a35e627e0dc3fc91ee172e  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  d3d0a9db4cb45433208c51520e54f3bb  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! 313541167a6434eefe5be6f5a5f320cb  gcc/config/aarch64/aarch64-sve-builtins.cc
  b9d38b6180a44e1f8f6103870af5dba2  gcc/config/aarch64/aarch64-sve-builtins.def
  ef06d72bc9e60ff08580d377b7f8883a  gcc/config/aarch64/aarch64-sve-builtins.h
! dab9f216d0b1b73156c675fe6b4d3460  gcc/config/aarch64/aarch64-sve.md
! 1971fb10253ba02f9396bee8a8701a31  gcc/config/aarch64/aarch64-sve2.md
! 83dd7ccda19ffdca5c763ae0357b3a40  gcc/config/aarch64/aarch64-sys-regs.def
! 33a4960a659d71bba22c1a55c94c828a  gcc/config/aarch64/aarch64-tune.md
  6ede31fb52cae2cf590b667c55706637  gcc/config/aarch64/aarch64-tuning-flags.def
  93d2ce2396c397f594f146a9d7d80c52  gcc/config/aarch64/aarch64-vxworks.h
! 58004a0f1f205ba3a9248459f7a9df65  gcc/config/aarch64/aarch64.cc
  be8a897650902ba46d1df7cb3a50ca2c  gcc/config/aarch64/aarch64.h
! f543204c7e7054be7c1c99c5deb03061  gcc/config/aarch64/aarch64.md
  3948f2f1b7b27ca528cac06ae5fe36ff  gcc/config/aarch64/aarch64.opt
  1277617373f7bad91a5af74470db72b3  gcc/config/aarch64/aarch64.opt.urls
! f61efd6d307f4c9a5ce32b1a5ff63083  gcc/config/aarch64/arm_acle.h
  c55b48fec74c65f795a066248defd73c  gcc/config/aarch64/arm_bf16.h
  bc7f4369a16c4662b3bddb54d086bbf7  gcc/config/aarch64/arm_fp16.h
  cdbd4445c7cfe7382e25c6b15ce3a42a  gcc/config/aarch64/arm_neon.h
*************** d0eb4ba200acb78424e4f81fef87ed74  gcc/co
*** 3406,3412 ****
  1e10a63f5542acfb7d0e13c5500255fb  gcc/config/aarch64/geniterators.sh
  6f921f57310ac8daa6901b15863863df  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 4836f19222184068a1026cb2dfc66372  gcc/config/aarch64/iterators.md
  2f7e5ada6f28833a37f9956a0de121a1  gcc/config/aarch64/predicates.md
  e721d5af96cbf8d649cdded53033e622  gcc/config/aarch64/rtems.h
  da189dac438d6c01da7266b02ddb1d2f  gcc/config/aarch64/saphira.md
--- 3406,3412 ----
  1e10a63f5542acfb7d0e13c5500255fb  gcc/config/aarch64/geniterators.sh
  6f921f57310ac8daa6901b15863863df  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 7aa6f35d4a34a56efec0051871c473bf  gcc/config/aarch64/iterators.md
  2f7e5ada6f28833a37f9956a0de121a1  gcc/config/aarch64/predicates.md
  e721d5af96cbf8d649cdded53033e622  gcc/config/aarch64/rtems.h
  da189dac438d6c01da7266b02ddb1d2f  gcc/config/aarch64/saphira.md
*************** c49f8b96d615307400f980e58ffd7cf8  gcc/co
*** 3435,3440 ****
--- 3435,3441 ----
  d35355ab4d0ccdea4076688532d48a05  gcc/config/aarch64/tuning_models/generic.h
  7a9a276714666f9890a3a5d6a980112c  gcc/config/aarch64/tuning_models/generic_armv8_a.h
  5508125b75bb109851c1d396c106f943  gcc/config/aarch64/tuning_models/generic_armv9_a.h
+ 4ea2c74c1aeb3cdbec7dc753540abde8  gcc/config/aarch64/tuning_models/hip12.h
  d068cb56d5712ac565cc516fc88dba6c  gcc/config/aarch64/tuning_models/neoverse512tvb.h
  202265af3c034cfb711d38ec66a8be25  gcc/config/aarch64/tuning_models/neoversen1.h
  3a9dd309e6e618ae56d5a65241605bbd  gcc/config/aarch64/tuning_models/neoversen2.h
*************** a32e244dd629c43a93ec8aadecdbeb14  gcc/co
*** 3551,3559 ****
  1795b7bf4992d29ce0f407ca9b90a7c3  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  f68c4ef34df906d99e11d3cda55c8375  gcc/config/arm/arm-tune.md
! a64401ed507cafc98f8734bf8b3b9d7c  gcc/config/arm/arm.cc
  d627c9b9062533642a559523336390dc  gcc/config/arm/arm.h
! cacbb60deff2d37bf8d70ad3f494353e  gcc/config/arm/arm.md
  aafba6eef2fa39161c820beb71e74b41  gcc/config/arm/arm.opt
  d96083967a30e6eb0f75d624af2d831a  gcc/config/arm/arm.opt.urls
  6fdbac79ee439703b0df3733036e4839  gcc/config/arm/arm1020e.md
--- 3552,3560 ----
  1795b7bf4992d29ce0f407ca9b90a7c3  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  f68c4ef34df906d99e11d3cda55c8375  gcc/config/arm/arm-tune.md
! 718f4f1564d9199b9553b77b6f25bbe4  gcc/config/arm/arm.cc
  d627c9b9062533642a559523336390dc  gcc/config/arm/arm.h
! bd111e7f974f27bb5a1f63b05bad1dd6  gcc/config/arm/arm.md
  aafba6eef2fa39161c820beb71e74b41  gcc/config/arm/arm.opt
  d96083967a30e6eb0f75d624af2d831a  gcc/config/arm/arm.opt.urls
  6fdbac79ee439703b0df3733036e4839  gcc/config/arm/arm1020e.md
*************** d3a23e380b7e99d29fe507d5a583e69a  gcc/co
*** 3575,3581 ****
  79b208f586b8b79a87d0e0d183a9859b  gcc/config/arm/arm_vfp_builtins.def
  44aabc3fd5a327f292ac676c9f8d4e0f  gcc/config/arm/bpabi.h
  ad6e059da4221423e47cd82a275f8334  gcc/config/arm/common.md
! c49b9146cf22c71d29acf0f62892637c  gcc/config/arm/constraints.md
  b7fc6c4cf02e42b67011a38656264b4d  gcc/config/arm/cortex-a15-neon.md
  95acd1f05e4d798ed609c28a7b3ebd2d  gcc/config/arm/cortex-a15.md
  02d2088e0a2904b232a292e7102ba647  gcc/config/arm/cortex-a17-neon.md
--- 3576,3582 ----
  79b208f586b8b79a87d0e0d183a9859b  gcc/config/arm/arm_vfp_builtins.def
  44aabc3fd5a327f292ac676c9f8d4e0f  gcc/config/arm/bpabi.h
  ad6e059da4221423e47cd82a275f8334  gcc/config/arm/common.md
! b382ae68ae3f155921129ca982bd5b13  gcc/config/arm/constraints.md
  b7fc6c4cf02e42b67011a38656264b4d  gcc/config/arm/cortex-a15-neon.md
  95acd1f05e4d798ed609c28a7b3ebd2d  gcc/config/arm/cortex-a15.md
  02d2088e0a2904b232a292e7102ba647  gcc/config/arm/cortex-a17-neon.md
*************** d64263b134031262a36428a26496f75e  gcc/co
*** 3616,3623 ****
  b69614df1cd4256f58e75a572fbda03a  gcc/config/arm/marvell-f-iwmmxt.md
  e8affac9772d93f38b77832072baa1de  gcc/config/arm/marvell-pj4.md
  f95aae25737fa2b67f658ae27a55bf24  gcc/config/arm/mmintrin.h
! 53da1c2f428f37c646ba59bf6c8e0f5b  gcc/config/arm/mve.md
! 90755fdf5049c51974a29f7443aad437  gcc/config/arm/neon.md
  99dedecb099a6f7fef75514f6cfb51f6  gcc/config/arm/netbsd-eabi.h
  49dc7f194a7a56dbfa95c9d614987485  gcc/config/arm/netbsd-elf.h
  07d12636c252e170d71bcadfca2c2538  gcc/config/arm/parsecpu.awk
--- 3617,3624 ----
  b69614df1cd4256f58e75a572fbda03a  gcc/config/arm/marvell-f-iwmmxt.md
  e8affac9772d93f38b77832072baa1de  gcc/config/arm/marvell-pj4.md
  f95aae25737fa2b67f658ae27a55bf24  gcc/config/arm/mmintrin.h
! 6983354a154e7c27b1af4bdda22843d9  gcc/config/arm/mve.md
! 222258d1faf3200ce999a3c0c1995e80  gcc/config/arm/neon.md
  99dedecb099a6f7fef75514f6cfb51f6  gcc/config/arm/netbsd-eabi.h
  49dc7f194a7a56dbfa95c9d614987485  gcc/config/arm/netbsd-elf.h
  07d12636c252e170d71bcadfca2c2538  gcc/config/arm/parsecpu.awk
*************** dc8e1ff924dd1f2699f60837b792825a  gcc/co
*** 3640,3646 ****
  8c0b4a60653a17f203a5cfb1a8fc002a  gcc/config/arm/t-symbian
  39be57a549825d2444946fe5f693a90e  gcc/config/arm/t-vxworks
  87896a997e36e53ebdce8c63842d9282  gcc/config/arm/thumb1.md
! d365e30d51e84eee3d4c690431b36a5b  gcc/config/arm/thumb2.md
  04f108386512544ce1d6596ad6e66db1  gcc/config/arm/types.md
  734d555ff2653ad7065e13ddce683abf  gcc/config/arm/uclinux-eabi.h
  62ee64e5a550f39e265007bb0bbcdd7c  gcc/config/arm/uclinux-elf.h
--- 3641,3647 ----
  8c0b4a60653a17f203a5cfb1a8fc002a  gcc/config/arm/t-symbian
  39be57a549825d2444946fe5f693a90e  gcc/config/arm/t-vxworks
  87896a997e36e53ebdce8c63842d9282  gcc/config/arm/thumb1.md
! f962d4dc02fe6670fc9ae9ee9d71d55b  gcc/config/arm/thumb2.md
  04f108386512544ce1d6596ad6e66db1  gcc/config/arm/types.md
  734d555ff2653ad7065e13ddce683abf  gcc/config/arm/uclinux-eabi.h
  62ee64e5a550f39e265007bb0bbcdd7c  gcc/config/arm/uclinux-elf.h
*************** d365e30d51e84eee3d4c690431b36a5b  gcc/co
*** 3648,3654 ****
  89fac906bcc09977ddb7f431282695ae  gcc/config/arm/unknown-elf.h
  cbf753ccacebb14f1ea069d00bd48785  gcc/config/arm/unspecs.md
  03d75586d505d936b481025195452fcc  gcc/config/arm/vec-common.md
! 0ecf35b93594826345444b0a0d454df4  gcc/config/arm/vfp.md
  37331c99c09350c25917558f4d26ecee  gcc/config/arm/vfp11.md
  7ad219ccd35d0a98f29c2f2a4552334c  gcc/config/arm/vxworks.h
  0d3ded2f97981b036dd0ae73cfa93a0c  gcc/config/arm/vxworks.opt
--- 3649,3655 ----
  89fac906bcc09977ddb7f431282695ae  gcc/config/arm/unknown-elf.h
  cbf753ccacebb14f1ea069d00bd48785  gcc/config/arm/unspecs.md
  03d75586d505d936b481025195452fcc  gcc/config/arm/vec-common.md
! d237e72422cceeac3321fa360f244887  gcc/config/arm/vfp.md
  37331c99c09350c25917558f4d26ecee  gcc/config/arm/vfp11.md
  7ad219ccd35d0a98f29c2f2a4552334c  gcc/config/arm/vxworks.h
  0d3ded2f97981b036dd0ae73cfa93a0c  gcc/config/arm/vxworks.opt
*************** e219596493ffcd798a48b24b22b5e077  gcc/co
*** 3659,3672 ****
  979d316e0a30598a6a3d7716a48307bb  gcc/config/avr/avr-c.cc
  bfe56ce9bd6fa014dfb8ec10b0e220e7  gcc/config/avr/avr-devices.cc
  aacc6ecb9694d2f6283dbdfd61c9d0d7  gcc/config/avr/avr-dimode.md
! 7ae67bca77c9ea131be5692c358dda69  gcc/config/avr/avr-fixed.md
  5ca3add3bb846b864908fa520718a481  gcc/config/avr/avr-log.cc
! 821fecc08db3a958d1cdf8df88b40394  gcc/config/avr/avr-mcus.def
  c57f11c8377690ba9023949f07b9355d  gcc/config/avr/avr-modes.def
  e463aeaf15d36b313935a1486e19fe50  gcc/config/avr/avr-passes.def
  b812676480e10c55ca64c09cae522a6a  gcc/config/avr/avr-protos.h
  f6bd61a4d455db58f9425812a337b890  gcc/config/avr/avr-stdint.h
! 7c55f9227a7765e262484b93f6858d24  gcc/config/avr/avr.cc
  7cc3c5e2451b04c38f10f0bd06790ba0  gcc/config/avr/avr.h
  90199e05652dd3c55b8064a234c53d28  gcc/config/avr/avr.md
  d966b0c41bfba722c0e38c55d7256e8b  gcc/config/avr/avr.opt
--- 3660,3673 ----
  979d316e0a30598a6a3d7716a48307bb  gcc/config/avr/avr-c.cc
  bfe56ce9bd6fa014dfb8ec10b0e220e7  gcc/config/avr/avr-devices.cc
  aacc6ecb9694d2f6283dbdfd61c9d0d7  gcc/config/avr/avr-dimode.md
! f3b078af4614330b8ef32be10a500bd0  gcc/config/avr/avr-fixed.md
  5ca3add3bb846b864908fa520718a481  gcc/config/avr/avr-log.cc
! 26ce65013036461cc14f6947f2825a4a  gcc/config/avr/avr-mcus.def
  c57f11c8377690ba9023949f07b9355d  gcc/config/avr/avr-modes.def
  e463aeaf15d36b313935a1486e19fe50  gcc/config/avr/avr-passes.def
  b812676480e10c55ca64c09cae522a6a  gcc/config/avr/avr-protos.h
  f6bd61a4d455db58f9425812a337b890  gcc/config/avr/avr-stdint.h
! 0ab50ed668fee6448148b83f963f7ca8  gcc/config/avr/avr.cc
  7cc3c5e2451b04c38f10f0bd06790ba0  gcc/config/avr/avr.h
  90199e05652dd3c55b8064a234c53d28  gcc/config/avr/avr.md
  d966b0c41bfba722c0e38c55d7256e8b  gcc/config/avr/avr.opt
*************** c303762800db2d03566efcca0c473770  gcc/co
*** 3675,3686 ****
  5f50128af85c97f8a945289b214c6796  gcc/config/avr/builtins.def
  c81342d62b7c673dddb01c2fe022e31c  gcc/config/avr/constraints.md
  6f86a74aad4c6d406125533121fac7c8  gcc/config/avr/driver-avr.cc
! 1008ab86977d8a828903d64e60330ac1  gcc/config/avr/elf.h
  ca321a5148953102f755e05b59b7bb1a  gcc/config/avr/gen-avr-mmcu-specs.cc
  18da6b098212aae9f6f9b0200eeb9134  gcc/config/avr/gen-avr-mmcu-texi.cc
  b3573dd42f78369fa82623b922370aa4  gcc/config/avr/genmultilib.awk
  28e6f4462ed42a18b0270e5755e73dc4  gcc/config/avr/predicates.md
! edcd8c674a9d3952a4c3d848649efd56  gcc/config/avr/specs.h
  b676cbf410071d39adf1d2dbab2defe3  gcc/config/avr/stdfix.h
  3b770b008cc51d652a8983a5dd8c2597  gcc/config/avr/t-avr
  8bf2f66c0bc639581bb4cbe96a90c238  gcc/config/bfin/bfin-modes.def
--- 3676,3687 ----
  5f50128af85c97f8a945289b214c6796  gcc/config/avr/builtins.def
  c81342d62b7c673dddb01c2fe022e31c  gcc/config/avr/constraints.md
  6f86a74aad4c6d406125533121fac7c8  gcc/config/avr/driver-avr.cc
! 57ea28d3d73dd13f408b1bd56d829b03  gcc/config/avr/elf.h
  ca321a5148953102f755e05b59b7bb1a  gcc/config/avr/gen-avr-mmcu-specs.cc
  18da6b098212aae9f6f9b0200eeb9134  gcc/config/avr/gen-avr-mmcu-texi.cc
  b3573dd42f78369fa82623b922370aa4  gcc/config/avr/genmultilib.awk
  28e6f4462ed42a18b0270e5755e73dc4  gcc/config/avr/predicates.md
! 29e935f7e5df174e2e2bb5827c990c24  gcc/config/avr/specs.h
  b676cbf410071d39adf1d2dbab2defe3  gcc/config/avr/stdfix.h
  3b770b008cc51d652a8983a5dd8c2597  gcc/config/avr/t-avr
  8bf2f66c0bc639581bb4cbe96a90c238  gcc/config/bfin/bfin-modes.def
*************** b278c721aa8368b642ae5cb9a65245e0  gcc/co
*** 3900,3906 ****
  6a696cae7a44d868d78e9cda14336b34  gcc/config/gnu-user.h
  a2273f1834933e181d0f704e3beccddc  gcc/config/gnu-user.opt
  6b439d9b69b8df92af49c7024df0d474  gcc/config/gnu-user.opt.urls
! 71358d5d16455cafedfe6d4610bf04a4  gcc/config/gnu.h
  d0a6e969946f8dfa6f2a114d426de2d5  gcc/config/h8300/addsub.md
  cddc64825ce6e6e92692684251745f9e  gcc/config/h8300/bitfield.md
  e0f182e6b6c3f56eae0c152e463235ef  gcc/config/h8300/combiner.md
--- 3901,3907 ----
  6a696cae7a44d868d78e9cda14336b34  gcc/config/gnu-user.h
  a2273f1834933e181d0f704e3beccddc  gcc/config/gnu-user.opt
  6b439d9b69b8df92af49c7024df0d474  gcc/config/gnu-user.opt.urls
! d35149e4fcca16fd117582976b0b5856  gcc/config/gnu.h
  d0a6e969946f8dfa6f2a114d426de2d5  gcc/config/h8300/addsub.md
  cddc64825ce6e6e92692684251745f9e  gcc/config/h8300/bitfield.md
  e0f182e6b6c3f56eae0c152e463235ef  gcc/config/h8300/combiner.md
*************** c2a5ce1ee84615aa52b4f799a2145596  gcc/co
*** 3942,3952 ****
  6fb8f575d2ba05a77e86b2a4670259bb  gcc/config/hpux11.opt.urls
  ae17e86c8fe5840b6a46050b1cfcfe1e  gcc/config/i386/adxintrin.h
  cec853bfbc05465372e2d9209db77190  gcc/config/i386/ammintrin.h
! 1bec839682bc45593f2151042e170b96  gcc/config/i386/amxbf16intrin.h
! ec029ca822a74239a707f2af46e6fdd8  gcc/config/i386/amxcomplexintrin.h
! 161f86283fe6c5f1fbc3b31b18b55e6c  gcc/config/i386/amxfp16intrin.h
! 75a05cb93c9574d532bd22516622b6b8  gcc/config/i386/amxint8intrin.h
! 93230e68087adc86d3522722f61691de  gcc/config/i386/amxtileintrin.h
  71924dc46e17c794c14a1714c186e882  gcc/config/i386/athlon.md
  1137d7b41f29f9980a579371eaf574bf  gcc/config/i386/atom.md
  7bcdf33d98d5875d2591173680db353e  gcc/config/i386/att.h
--- 3943,3953 ----
  6fb8f575d2ba05a77e86b2a4670259bb  gcc/config/hpux11.opt.urls
  ae17e86c8fe5840b6a46050b1cfcfe1e  gcc/config/i386/adxintrin.h
  cec853bfbc05465372e2d9209db77190  gcc/config/i386/ammintrin.h
! 22afc82e28615d95a70de530000c6d97  gcc/config/i386/amxbf16intrin.h
! 34982f3254c952a935aa1207ea8333ed  gcc/config/i386/amxcomplexintrin.h
! 009389a0d3a2b13609939b4d5a5025c2  gcc/config/i386/amxfp16intrin.h
! ecb39ba788db4b1915f897f9897c5d36  gcc/config/i386/amxint8intrin.h
! c1711c0d4b953463ee0cb2f9c0baf478  gcc/config/i386/amxtileintrin.h
  71924dc46e17c794c14a1714c186e882  gcc/config/i386/athlon.md
  1137d7b41f29f9980a579371eaf574bf  gcc/config/i386/atom.md
  7bcdf33d98d5875d2591173680db353e  gcc/config/i386/att.h
*************** d8489b835ee31bead8a6e6d69e91f7c3  gcc/co
*** 4026,4032 ****
  45b973eff75adfbcf46eafe622d51111  gcc/config/i386/djgpp.opt
  1b346c8cab1daa697ecd6c31e8e0e1d5  gcc/config/i386/djgpp.opt.urls
  bec83a086bf337dbd2e154506b2602d2  gcc/config/i386/dragonfly.h
! e16fd93f553abeee55010d6aadfbeaf7  gcc/config/i386/driver-i386.cc
  0eb383b96b421d47115ebf3f8ba6ee3a  gcc/config/i386/driver-mingw32.cc
  e8a9784f37380c5b3dd741023389d394  gcc/config/i386/emmintrin.h
  a25cb50167eb66bf3228ad4aebd5dabf  gcc/config/i386/enqcmdintrin.h
--- 4027,4033 ----
  45b973eff75adfbcf46eafe622d51111  gcc/config/i386/djgpp.opt
  1b346c8cab1daa697ecd6c31e8e0e1d5  gcc/config/i386/djgpp.opt.urls
  bec83a086bf337dbd2e154506b2602d2  gcc/config/i386/dragonfly.h
! 77a8dcc14f78a83ea4289d61a9b5bb24  gcc/config/i386/driver-i386.cc
  0eb383b96b421d47115ebf3f8ba6ee3a  gcc/config/i386/driver-mingw32.cc
  e8a9784f37380c5b3dd741023389d394  gcc/config/i386/emmintrin.h
  a25cb50167eb66bf3228ad4aebd5dabf  gcc/config/i386/enqcmdintrin.h
*************** cb343fc92a4017dd72ecf925e609e5b3  gcc/co
*** 4051,4057 ****
  99fea335b0d0e75274fb0d332965e1ee  gcc/config/i386/haswell.md
  9e0c1a273f1b48297e027d2b57fe6a5b  gcc/config/i386/host-cygwin.cc
  8aa8340199913a36316957cfca64c183  gcc/config/i386/host-i386-darwin.cc
! 9511f2cacd4e3753bbcef34478635941  gcc/config/i386/host-mingw32.cc
  4e2bbdb4e2a8e4ff852b573efffc33e4  gcc/config/i386/hresetintrin.h
  2ea007891ddab468cc4699c13996a23c  gcc/config/i386/i386-builtin-types.awk
  c1088807627bcbd8c85a659852f57ce9  gcc/config/i386/i386-builtin-types.def
--- 4052,4058 ----
  99fea335b0d0e75274fb0d332965e1ee  gcc/config/i386/haswell.md
  9e0c1a273f1b48297e027d2b57fe6a5b  gcc/config/i386/host-cygwin.cc
  8aa8340199913a36316957cfca64c183  gcc/config/i386/host-i386-darwin.cc
! 25dbbd0b4035da40caf49673abd987f4  gcc/config/i386/host-mingw32.cc
  4e2bbdb4e2a8e4ff852b573efffc33e4  gcc/config/i386/hresetintrin.h
  2ea007891ddab468cc4699c13996a23c  gcc/config/i386/i386-builtin-types.awk
  c1088807627bcbd8c85a659852f57ce9  gcc/config/i386/i386-builtin-types.def
*************** a4714f98b53e073b615a5d93fe6fdba9  gcc/co
*** 4061,4067 ****
  897e293401e4dea789e26918f76f414d  gcc/config/i386/i386-c.cc
  fbc24076c7e09cff381fd3713e0e35b8  gcc/config/i386/i386-d.cc
  bc57c8d6121c70b7f671f4551d518806  gcc/config/i386/i386-d.h
! 48c2464f07e5d8465d0f64cbb5d1b684  gcc/config/i386/i386-expand.cc
  aad6a1409988666a85b150e3fe82bb3e  gcc/config/i386/i386-expand.h
  5580cf7a1c9325867e3e62112532e650  gcc/config/i386/i386-features.cc
  fccc6d65638a2ce66ebc6b06766912c2  gcc/config/i386/i386-features.h
--- 4062,4068 ----
  897e293401e4dea789e26918f76f414d  gcc/config/i386/i386-c.cc
  fbc24076c7e09cff381fd3713e0e35b8  gcc/config/i386/i386-d.cc
  bc57c8d6121c70b7f671f4551d518806  gcc/config/i386/i386-d.h
! ff2f7e233732dce4a79fa7ad9685cde1  gcc/config/i386/i386-expand.cc
  aad6a1409988666a85b150e3fe82bb3e  gcc/config/i386/i386-expand.h
  5580cf7a1c9325867e3e62112532e650  gcc/config/i386/i386-features.cc
  fccc6d65638a2ce66ebc6b06766912c2  gcc/config/i386/i386-features.h
*************** fccc6d65638a2ce66ebc6b06766912c2  gcc/co
*** 4074,4082 ****
  003684e9baa146f7b92f23ca01368094  gcc/config/i386/i386-protos.h
  89067df9b8c57e29603ffaca8dcc692b  gcc/config/i386/i386-rust.cc
  4f7ab8c57b3148a31d24838528313ef2  gcc/config/i386/i386-rust.h
! 3c0ce201253936cd590e6ebe94b5e2fd  gcc/config/i386/i386.cc
! 7f4ed5a47861156413fe67f244f01a33  gcc/config/i386/i386.h
! 85951c0188bf68d8d09c05f13999a98b  gcc/config/i386/i386.md
  85b5302c87709e4b2325868fe370b441  gcc/config/i386/i386.opt
  fb32c950c45e643174eb7c58d7f4218f  gcc/config/i386/i386.opt.urls
  95e430a8a19e9226167376a9a7ca34d9  gcc/config/i386/i386elf.h
--- 4075,4083 ----
  003684e9baa146f7b92f23ca01368094  gcc/config/i386/i386-protos.h
  89067df9b8c57e29603ffaca8dcc692b  gcc/config/i386/i386-rust.cc
  4f7ab8c57b3148a31d24838528313ef2  gcc/config/i386/i386-rust.h
! 0b364691ba7ec8239d70f50a091cf271  gcc/config/i386/i386.cc
! 050a9384b955805718fbe5df50684b1c  gcc/config/i386/i386.h
! d509d8af339374bf45fa7b06d5573361  gcc/config/i386/i386.md
  85b5302c87709e4b2325868fe370b441  gcc/config/i386/i386.opt
  fb32c950c45e643174eb7c58d7f4218f  gcc/config/i386/i386.opt.urls
  95e430a8a19e9226167376a9a7ca34d9  gcc/config/i386/i386elf.h
*************** ba58451441e23c01b6eba20ce3c8eb9b  gcc/co
*** 4106,4112 ****
  e825582ef5d3d436130e77c41d8d9ff4  gcc/config/i386/mingw32.h
  cc9849ddfde01b94df2eeb13ec5bab0a  gcc/config/i386/mm3dnow.h
  90b9e7122f60a899bf229dc11f24000d  gcc/config/i386/mmintrin.h
! aa5b9b3bb27f19ff3832c9960dd9312f  gcc/config/i386/mmx.md
  ea7d7799efdd0d920495d7aaa4e3b7a2  gcc/config/i386/movdirintrin.h
  e576d2eed73a4571de7093a92f6dd156  gcc/config/i386/msformat-c.cc
  a0576d502ba7007ac2cebdc16b79ea32  gcc/config/i386/mwaitintrin.h
--- 4107,4113 ----
  e825582ef5d3d436130e77c41d8d9ff4  gcc/config/i386/mingw32.h
  cc9849ddfde01b94df2eeb13ec5bab0a  gcc/config/i386/mm3dnow.h
  90b9e7122f60a899bf229dc11f24000d  gcc/config/i386/mmintrin.h
! 80dcb047bf1ef9a18a0bda318fad8105  gcc/config/i386/mmx.md
  ea7d7799efdd0d920495d7aaa4e3b7a2  gcc/config/i386/movdirintrin.h
  e576d2eed73a4571de7093a92f6dd156  gcc/config/i386/msformat-c.cc
  a0576d502ba7007ac2cebdc16b79ea32  gcc/config/i386/mwaitintrin.h
*************** e82f2dd2df5fd204d1c7102be6f29c11  gcc/co
*** 4143,4149 ****
  70a56f513b7336a41d2b3a23877154f8  gcc/config/i386/sm4intrin.h
  8fce480b063b9abc4081b814b0fc7e01  gcc/config/i386/smmintrin.h
  fe9eadd749e61a2279304a5617888723  gcc/config/i386/sol2.h
! c2ca08127421c39cd57903e9c76c6af3  gcc/config/i386/sse.md
  b415a4e3e2cdd58a97ae395bffcb7e09  gcc/config/i386/ssemath.h
  618acc597863bc9b3c097b7b7669aed0  gcc/config/i386/stringop.def
  8fdfd8196f3dd509d9f9806774c453e0  gcc/config/i386/subst.md
--- 4144,4150 ----
  70a56f513b7336a41d2b3a23877154f8  gcc/config/i386/sm4intrin.h
  8fce480b063b9abc4081b814b0fc7e01  gcc/config/i386/smmintrin.h
  fe9eadd749e61a2279304a5617888723  gcc/config/i386/sol2.h
! 77736b5fbc74d24e7dfb866fa67415b9  gcc/config/i386/sse.md
  b415a4e3e2cdd58a97ae395bffcb7e09  gcc/config/i386/ssemath.h
  618acc597863bc9b3c097b7b7669aed0  gcc/config/i386/stringop.def
  8fdfd8196f3dd509d9f9806774c453e0  gcc/config/i386/subst.md
*************** e5595c37dd7b9ea4344a7be0dc5d9d5a  gcc/co
*** 4201,4213 ****
  30b9c6f1a4b0b23de02c33b969a71348  gcc/config/i386/x86-tune-sched-bd.cc
  3a8550d487a86d6a596183d13fdca950  gcc/config/i386/x86-tune-sched-core.cc
  7f7cccfabb6c1a59b854f87166ebcfa6  gcc/config/i386/x86-tune-sched.cc
! 2625bb27f5de034b4bd71b73a7adacac  gcc/config/i386/x86-tune.def
  53eb359a7a4854a587b6cf5ddde9a9b2  gcc/config/i386/x86gprintrin.h
  a1d442d51dcc0044d7b3e109d2bff5c2  gcc/config/i386/x86intrin.h
  a616ea353ccf63fc1b6f2254a35ee131  gcc/config/i386/xm-cygwin.h
  71654b3cde734ebd7421186658d4c1b2  gcc/config/i386/xm-djgpp.h
  f9dfe535e493d0e00708e43ec0926e85  gcc/config/i386/xm-mingw32.h
! e94ce974a9c58f32e2d62503f864c719  gcc/config/i386/xmmintrin.h
  97ed6bb079056c473a7db3d9dabeefa5  gcc/config/i386/xopintrin.h
  503dc664e04c155fc074847b20d88e3b  gcc/config/i386/xsavecintrin.h
  57b8326804a45d16090b1f02f05c36db  gcc/config/i386/xsaveintrin.h
--- 4202,4214 ----
  30b9c6f1a4b0b23de02c33b969a71348  gcc/config/i386/x86-tune-sched-bd.cc
  3a8550d487a86d6a596183d13fdca950  gcc/config/i386/x86-tune-sched-core.cc
  7f7cccfabb6c1a59b854f87166ebcfa6  gcc/config/i386/x86-tune-sched.cc
! e857affede5004f858332e65d37dab30  gcc/config/i386/x86-tune.def
  53eb359a7a4854a587b6cf5ddde9a9b2  gcc/config/i386/x86gprintrin.h
  a1d442d51dcc0044d7b3e109d2bff5c2  gcc/config/i386/x86intrin.h
  a616ea353ccf63fc1b6f2254a35ee131  gcc/config/i386/xm-cygwin.h
  71654b3cde734ebd7421186658d4c1b2  gcc/config/i386/xm-djgpp.h
  f9dfe535e493d0e00708e43ec0926e85  gcc/config/i386/xm-mingw32.h
! 8d1a0b925101c915a834766aa2a4905c  gcc/config/i386/xmmintrin.h
  97ed6bb079056c473a7db3d9dabeefa5  gcc/config/i386/xopintrin.h
  503dc664e04c155fc074847b20d88e3b  gcc/config/i386/xsavecintrin.h
  57b8326804a45d16090b1f02f05c36db  gcc/config/i386/xsaveintrin.h
*************** cc68db36c7e26368cce1af309ad2308d  gcc/co
*** 4284,4290 ****
  a9d1d80c40cc6eb8e9a32d54f82dae43  gcc/config/lm32/t-lm32
  660559cdac2b08e91486a9db7b4a2872  gcc/config/lm32/t-rtems
  ddefbf04240463de3ebe735c18bd3da8  gcc/config/lm32/uclinux-elf.h
! 8ed53c8d6e2ffd1c4348b1509c392da9  gcc/config/loongarch/constraints.md
  d4a731bdf01a61d063fe5c12e0ae15a3  gcc/config/loongarch/elf.h
  17e35e205e8d128d6658e239c7abcee0  gcc/config/loongarch/generic.md
  287b403c9c4fcd7872ffc302707dd8e0  gcc/config/loongarch/genopts/gen-evolution.awk
--- 4285,4291 ----
  a9d1d80c40cc6eb8e9a32d54f82dae43  gcc/config/lm32/t-lm32
  660559cdac2b08e91486a9db7b4a2872  gcc/config/lm32/t-rtems
  ddefbf04240463de3ebe735c18bd3da8  gcc/config/lm32/uclinux-elf.h
! c940b279543e17d86f4d1fad1fead150  gcc/config/loongarch/constraints.md
  d4a731bdf01a61d063fe5c12e0ae15a3  gcc/config/loongarch/elf.h
  17e35e205e8d128d6658e239c7abcee0  gcc/config/loongarch/generic.md
  287b403c9c4fcd7872ffc302707dd8e0  gcc/config/loongarch/genopts/gen-evolution.awk
*************** ba884745a15d4b194d0ad2e286b0c617  gcc/co
*** 4295,4304 ****
  33ffb3b80383744cc4872c3213e50ac5  gcc/config/loongarch/gnu-user.h
  73cc35d0159715accf631cf5373b9fcf  gcc/config/loongarch/la464.md
  56be38a805f1110cf87ba4a7105324a5  gcc/config/loongarch/larchintrin.h
! 5d0b2211d38904cbcfdc410ab0025bba  gcc/config/loongarch/lasx.md
  4bf4ab82622674f6e0397a7f88fe5723  gcc/config/loongarch/lasxintrin.h
  82679ddaca16efc485abf4e3b347a3c9  gcc/config/loongarch/linux.h
! fe166d2fd30d3bf70487dde04e5ba257  gcc/config/loongarch/loongarch-builtins.cc
  d7f60057bcb08d31f27708510cf69071  gcc/config/loongarch/loongarch-c.cc
  fda2bfdc2de3eafec6a40c91767e52d7  gcc/config/loongarch/loongarch-cpu.cc
  28b82a3dc53ed6429b995a5f0d0c7c4a  gcc/config/loongarch/loongarch-cpu.h
--- 4296,4305 ----
  33ffb3b80383744cc4872c3213e50ac5  gcc/config/loongarch/gnu-user.h
  73cc35d0159715accf631cf5373b9fcf  gcc/config/loongarch/la464.md
  56be38a805f1110cf87ba4a7105324a5  gcc/config/loongarch/larchintrin.h
! ec664b4c120ffcd7f18303c300163e7b  gcc/config/loongarch/lasx.md
  4bf4ab82622674f6e0397a7f88fe5723  gcc/config/loongarch/lasxintrin.h
  82679ddaca16efc485abf4e3b347a3c9  gcc/config/loongarch/linux.h
! 485815af3d4b3e671155ed4a40a43ad8  gcc/config/loongarch/loongarch-builtins.cc
  d7f60057bcb08d31f27708510cf69071  gcc/config/loongarch/loongarch-c.cc
  fda2bfdc2de3eafec6a40c91767e52d7  gcc/config/loongarch/loongarch-cpu.cc
  28b82a3dc53ed6429b995a5f0d0c7c4a  gcc/config/loongarch/loongarch-cpu.h
*************** fda2bfdc2de3eafec6a40c91767e52d7  gcc/co
*** 4306,4333 ****
  2d3afabbc0f7ba9387da15e529bdb4dd  gcc/config/loongarch/loongarch-d.h
  34ceb522909aece43cfb18de874e0862  gcc/config/loongarch/loongarch-def-array.h
  4f6e1d94a7da4cda9a95e36b76ad0980  gcc/config/loongarch/loongarch-def.cc
! fcb261ab8415277a573edfcf4c726d7a  gcc/config/loongarch/loongarch-def.h
  fc08ad18c12daeb6c459e9a5da085d02  gcc/config/loongarch/loongarch-driver.cc
  812e559b949ba7a34e3a56087a6eaa21  gcc/config/loongarch/loongarch-driver.h
  98c48e68e1e9c13958b3b218c3d3a47f  gcc/config/loongarch/loongarch-evolution.cc
  8bd09542013a17e1ffcdc2ccc1fc3a5c  gcc/config/loongarch/loongarch-evolution.h
! 70eb5ed91f67ab6f78dc1e60a869583b  gcc/config/loongarch/loongarch-ftypes.def
  e79a168e4a8c0322a884b11ed18cf218  gcc/config/loongarch/loongarch-modes.def
  ea6cc43b3fa3313db4228947eed2152e  gcc/config/loongarch/loongarch-opts.cc
  8869aeb1ace55d4ee67306c723b6069c  gcc/config/loongarch/loongarch-opts.h
! 3ce5af4b5c069929ba519548d5342e90  gcc/config/loongarch/loongarch-protos.h
  3b7b410fd2ede1c56c692fa390a8d415  gcc/config/loongarch/loongarch-str.h
  2088d1b3164d3464806a7627d2fd6e52  gcc/config/loongarch/loongarch-tune.h
! 0ff0ab7a652b7eb1f9c4a0a2952e37ed  gcc/config/loongarch/loongarch.cc
  39c8662694bff1c4d52f90cba43e5048  gcc/config/loongarch/loongarch.h
! 979b7bb4986f91fe92c3ac05a83f249c  gcc/config/loongarch/loongarch.md
  b62396c60e7bd1b4de8956c5869d45f2  gcc/config/loongarch/loongarch.opt
  93b3f21362e888da73ecb40a067439a3  gcc/config/loongarch/loongarch.opt.urls
! b086127da5a93a2566e2fae572fe76f3  gcc/config/loongarch/lsx.md
  936e07cd1770c2a1e09db72cf3dc7e24  gcc/config/loongarch/lsxintrin.h
  42270d3318bceb069807243f3475a89f  gcc/config/loongarch/musl.h
! f6fd546f0f47cd5d43b7f1082da4ede6  gcc/config/loongarch/predicates.md
! 0a4a99a6247644fd821658f9d410b52c  gcc/config/loongarch/simd.md
  f4de53ee085303195a3c4eb57c3663c6  gcc/config/loongarch/sync.md
  49279b28d5c2ec9c67b9f93840713af2  gcc/config/loongarch/t-linux
  88690e1c28b92ae6052572c149de682f  gcc/config/loongarch/t-loongarch
--- 4307,4334 ----
  2d3afabbc0f7ba9387da15e529bdb4dd  gcc/config/loongarch/loongarch-d.h
  34ceb522909aece43cfb18de874e0862  gcc/config/loongarch/loongarch-def-array.h
  4f6e1d94a7da4cda9a95e36b76ad0980  gcc/config/loongarch/loongarch-def.cc
! 0bd0b3cf2cb1ab6a2b51c5ffbb78586c  gcc/config/loongarch/loongarch-def.h
  fc08ad18c12daeb6c459e9a5da085d02  gcc/config/loongarch/loongarch-driver.cc
  812e559b949ba7a34e3a56087a6eaa21  gcc/config/loongarch/loongarch-driver.h
  98c48e68e1e9c13958b3b218c3d3a47f  gcc/config/loongarch/loongarch-evolution.cc
  8bd09542013a17e1ffcdc2ccc1fc3a5c  gcc/config/loongarch/loongarch-evolution.h
! 828f6ad59d580685c7790eacefa9d8fb  gcc/config/loongarch/loongarch-ftypes.def
  e79a168e4a8c0322a884b11ed18cf218  gcc/config/loongarch/loongarch-modes.def
  ea6cc43b3fa3313db4228947eed2152e  gcc/config/loongarch/loongarch-opts.cc
  8869aeb1ace55d4ee67306c723b6069c  gcc/config/loongarch/loongarch-opts.h
! 00ec93cdb09ba7cbb6eeed05ad292f03  gcc/config/loongarch/loongarch-protos.h
  3b7b410fd2ede1c56c692fa390a8d415  gcc/config/loongarch/loongarch-str.h
  2088d1b3164d3464806a7627d2fd6e52  gcc/config/loongarch/loongarch-tune.h
! 93afbeb9657e1e644e672b25f99dcdd0  gcc/config/loongarch/loongarch.cc
  39c8662694bff1c4d52f90cba43e5048  gcc/config/loongarch/loongarch.h
! 9b56672053666990c82dd3985546af27  gcc/config/loongarch/loongarch.md
  b62396c60e7bd1b4de8956c5869d45f2  gcc/config/loongarch/loongarch.opt
  93b3f21362e888da73ecb40a067439a3  gcc/config/loongarch/loongarch.opt.urls
! f3b13e309145e71b5771549c999f0df8  gcc/config/loongarch/lsx.md
  936e07cd1770c2a1e09db72cf3dc7e24  gcc/config/loongarch/lsxintrin.h
  42270d3318bceb069807243f3475a89f  gcc/config/loongarch/musl.h
! 2310092ffd3bc6f9c3f464550955a217  gcc/config/loongarch/predicates.md
! 364fcf413b94f515b05526691d52c093  gcc/config/loongarch/simd.md
  f4de53ee085303195a3c4eb57c3663c6  gcc/config/loongarch/sync.md
  49279b28d5c2ec9c67b9f93840713af2  gcc/config/loongarch/t-linux
  88690e1c28b92ae6052572c149de682f  gcc/config/loongarch/t-loongarch
*************** cb26f6c0709fd9533aec72a07a36bf8b  gcc/co
*** 4421,4437 ****
  225dc655e791eb82bc0cd5477d84046f  gcc/config/mcore/predicates.md
  1dd06ef15dd426381100de36055c51d7  gcc/config/mcore/t-mcore
  82487fb2fbd50cb690ac1b406b085737  gcc/config/microblaze/constraints.md
  9b8779320526aa5f273de983bdc206ce  gcc/config/microblaze/linux.h
  ef3714e630d226fc9f9a52d072ae6d49  gcc/config/microblaze/microblaze-c.cc
! 5b4dece5790de432c81f12521dc1c3f8  gcc/config/microblaze/microblaze-protos.h
! fe73a15d0d3e7f53d281ee102dfe15fa  gcc/config/microblaze/microblaze.cc
  15444436357947286ccf30f90e3a28c8  gcc/config/microblaze/microblaze.h
! c16b6c77f514fb5e2247d16dcfcc5b22  gcc/config/microblaze/microblaze.md
  38180380f0c251974ab87d52c6680c1f  gcc/config/microblaze/microblaze.opt
  ab7ecb87ef3b7a388cab0e4d0d2eb0db  gcc/config/microblaze/microblaze.opt.urls
  6122aa8145720d14b86bdf0e7a6171f5  gcc/config/microblaze/predicates.md
  24cc98144fc2514eb9d0a4959efcba46  gcc/config/microblaze/rtems.h
! 8abeae4e9debaaeb4950f5fdff621fbc  gcc/config/microblaze/sync.md
  df031372af9c825d21d2058d266247a0  gcc/config/microblaze/t-microblaze
  63ccba4e7f745d36609d7c129bac6288  gcc/config/microblaze/t-microblaze-linux
  a8b08640136e3e7712d2278eb84c21d9  gcc/config/microblaze/t-rtems
--- 4422,4439 ----
  225dc655e791eb82bc0cd5477d84046f  gcc/config/mcore/predicates.md
  1dd06ef15dd426381100de36055c51d7  gcc/config/mcore/t-mcore
  82487fb2fbd50cb690ac1b406b085737  gcc/config/microblaze/constraints.md
+ 1ac49ffd4d6e30329a7a425da3ce8eaa  gcc/config/microblaze/iterators.md
  9b8779320526aa5f273de983bdc206ce  gcc/config/microblaze/linux.h
  ef3714e630d226fc9f9a52d072ae6d49  gcc/config/microblaze/microblaze-c.cc
! b0b66bee3fc32ec734dbbba003615857  gcc/config/microblaze/microblaze-protos.h
! a89f9732934dd5c153ba3abb3d72f182  gcc/config/microblaze/microblaze.cc
  15444436357947286ccf30f90e3a28c8  gcc/config/microblaze/microblaze.h
! 9be6b5fdaac09c5ef72078e45f238e8b  gcc/config/microblaze/microblaze.md
  38180380f0c251974ab87d52c6680c1f  gcc/config/microblaze/microblaze.opt
  ab7ecb87ef3b7a388cab0e4d0d2eb0db  gcc/config/microblaze/microblaze.opt.urls
  6122aa8145720d14b86bdf0e7a6171f5  gcc/config/microblaze/predicates.md
  24cc98144fc2514eb9d0a4959efcba46  gcc/config/microblaze/rtems.h
! 57680319f185e67ab8f12c85e635430f  gcc/config/microblaze/sync.md
  df031372af9c825d21d2058d266247a0  gcc/config/microblaze/t-microblaze
  63ccba4e7f745d36609d7c129bac6288  gcc/config/microblaze/t-microblaze-linux
  a8b08640136e3e7712d2278eb84c21d9  gcc/config/microblaze/t-rtems
*************** b7669cc185ce4e8fa5543db9fc552fad  gcc/co
*** 4735,4743 ****
  961575276a4c92065805fa132d6f96a1  gcc/config/pa/pa-openbsd.h
  9a661bb63af8309862f216a5145b35ff  gcc/config/pa/pa-opts.h
  1ab2b014b27f77e96f50795bfab8fcbd  gcc/config/pa/pa-protos.h
! 01111c68d97e57d1049b7ce4fefaca05  gcc/config/pa/pa.cc
  3508830133b8a3222d8b89317c41049e  gcc/config/pa/pa.h
! ca71709340d554f30a50c48b53a9aecd  gcc/config/pa/pa.md
  99a0932bde9ea4de72d6b9b3cb2b2d99  gcc/config/pa/pa.opt
  8cc2f0b358c76ec2ce7a16d18a9ecdab  gcc/config/pa/pa.opt.urls
  2a4bf2e386b22bab714abdf5f5712158  gcc/config/pa/pa32-linux.h
--- 4737,4745 ----
  961575276a4c92065805fa132d6f96a1  gcc/config/pa/pa-openbsd.h
  9a661bb63af8309862f216a5145b35ff  gcc/config/pa/pa-opts.h
  1ab2b014b27f77e96f50795bfab8fcbd  gcc/config/pa/pa-protos.h
! 57578a85112a6e0776ce46118490e479  gcc/config/pa/pa.cc
  3508830133b8a3222d8b89317c41049e  gcc/config/pa/pa.h
! fa6810d2de88cd926ba35e2e5954565d  gcc/config/pa/pa.md
  99a0932bde9ea4de72d6b9b3cb2b2d99  gcc/config/pa/pa.opt
  8cc2f0b358c76ec2ce7a16d18a9ecdab  gcc/config/pa/pa.opt.urls
  2a4bf2e386b22bab714abdf5f5712158  gcc/config/pa/pa32-linux.h
*************** ca2b2d3742c347b81fe1aec30d830735  gcc/co
*** 4898,4911 ****
  88bace7f271c41d15e1776ce901c81d4  gcc/config/rs6000/8540.md
  ace447911502244415407168b2b26546  gcc/config/rs6000/a2.md
  07856219672480d75398d24a15048832  gcc/config/rs6000/aix-stdint.h
! c64df3316d3e58a27e1ab2161d16ba84  gcc/config/rs6000/aix.h
  715344e1ef4fbd3e74d831e493df765a  gcc/config/rs6000/aix64.opt
  7ed2003156dc5875ca3b657a11836729  gcc/config/rs6000/aix64.opt.urls
  749787481049a867ea4d14e13c8be0a7  gcc/config/rs6000/aix71.h
  8ba01aec1ab8414732da6ba64bdac310  gcc/config/rs6000/aix72.h
  78467c9fa1ce8db5157960bd0bfe249f  gcc/config/rs6000/aix73.h
  5e39c7d6e3640a3400fe9e5bb2a2f131  gcc/config/rs6000/altivec.h
! 666760cb38b8e34ffba833b842c78659  gcc/config/rs6000/altivec.md
  81e54bdb16eb8684a6f55d8aee11c559  gcc/config/rs6000/amo.h
  4ceef8d1de734345cc9e53fddee7b98b  gcc/config/rs6000/biarch64.h
  13c13869e4dd869e54cf393e1c6541c6  gcc/config/rs6000/bmi2intrin.h
--- 4900,4913 ----
  88bace7f271c41d15e1776ce901c81d4  gcc/config/rs6000/8540.md
  ace447911502244415407168b2b26546  gcc/config/rs6000/a2.md
  07856219672480d75398d24a15048832  gcc/config/rs6000/aix-stdint.h
! eef38d2b8924aacc805f366066822538  gcc/config/rs6000/aix.h
  715344e1ef4fbd3e74d831e493df765a  gcc/config/rs6000/aix64.opt
  7ed2003156dc5875ca3b657a11836729  gcc/config/rs6000/aix64.opt.urls
  749787481049a867ea4d14e13c8be0a7  gcc/config/rs6000/aix71.h
  8ba01aec1ab8414732da6ba64bdac310  gcc/config/rs6000/aix72.h
  78467c9fa1ce8db5157960bd0bfe249f  gcc/config/rs6000/aix73.h
  5e39c7d6e3640a3400fe9e5bb2a2f131  gcc/config/rs6000/altivec.h
! c78c303217321a4538b2cefab72e9c44  gcc/config/rs6000/altivec.md
  81e54bdb16eb8684a6f55d8aee11c559  gcc/config/rs6000/amo.h
  4ceef8d1de734345cc9e53fddee7b98b  gcc/config/rs6000/biarch64.h
  13c13869e4dd869e54cf393e1c6541c6  gcc/config/rs6000/bmi2intrin.h
*************** ddc27d9ceea8191a7cbfb42159a56be4  gcc/co
*** 4974,4980 ****
  200b6eccb63040bee4a9133bab14bb26  gcc/config/rs6000/rbtree.h
  599c30bc22167b0f0831b1b7af7cf9d4  gcc/config/rs6000/rs6000-builtin.cc
  029e127e75ac9b0a5947828b933ae6ef  gcc/config/rs6000/rs6000-builtins.def
! 7cd856e83c8494270a47ca01622fc669  gcc/config/rs6000/rs6000-c.cc
  8119e87823cbb6f1761f91aeb4d3c6ea  gcc/config/rs6000/rs6000-call.cc
  187d4407a0b49c77c35fa116a0157373  gcc/config/rs6000/rs6000-cpus.def
  814d95cd094abacbcf3e466bfdc3646f  gcc/config/rs6000/rs6000-d.cc
--- 4976,4982 ----
  200b6eccb63040bee4a9133bab14bb26  gcc/config/rs6000/rbtree.h
  599c30bc22167b0f0831b1b7af7cf9d4  gcc/config/rs6000/rs6000-builtin.cc
  029e127e75ac9b0a5947828b933ae6ef  gcc/config/rs6000/rs6000-builtins.def
! 102fb0ee0ead962fe8a6a5f9d8617c01  gcc/config/rs6000/rs6000-c.cc
  8119e87823cbb6f1761f91aeb4d3c6ea  gcc/config/rs6000/rs6000-call.cc
  187d4407a0b49c77c35fa116a0157373  gcc/config/rs6000/rs6000-cpus.def
  814d95cd094abacbcf3e466bfdc3646f  gcc/config/rs6000/rs6000-d.cc
*************** ed1a47904e657788396f5063d85c91dd  gcc/co
*** 4996,5002 ****
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
  2bd3d18abb554a6b4b893d27c32b96d2  gcc/config/rs6000/rs6000.cc
  a01586ff71e4e5e6d8cecf0f75ba68ff  gcc/config/rs6000/rs6000.h
! 9bb3221c240ad646eef47bf57e389d92  gcc/config/rs6000/rs6000.md
  3a2092e316055a319aafca915be949d0  gcc/config/rs6000/rs6000.opt
  f041ba7cede4ca8e4e8a9e987adbe629  gcc/config/rs6000/rs6000.opt.urls
  29600bfcf064db2d3bccf3470cb14924  gcc/config/rs6000/rs64.md
--- 4998,5004 ----
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
  2bd3d18abb554a6b4b893d27c32b96d2  gcc/config/rs6000/rs6000.cc
  a01586ff71e4e5e6d8cecf0f75ba68ff  gcc/config/rs6000/rs6000.h
! 05f4a38549e4f7c4cbc83597c91bcd6a  gcc/config/rs6000/rs6000.md
  3a2092e316055a319aafca915be949d0  gcc/config/rs6000/rs6000.opt
  f041ba7cede4ca8e4e8a9e987adbe629  gcc/config/rs6000/rs6000.opt.urls
  29600bfcf064db2d3bccf3470cb14924  gcc/config/rs6000/rs64.md
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 5036,5042 ****
  0a88b1fc4b596cd84e7825b3a5f3b524  gcc/config/rs6000/tmmintrin.h
  869601137999c1447aaab0b73104dcdb  gcc/config/rs6000/vec_types.h
  205bbf4f9ece545c1eff934c146a75b2  gcc/config/rs6000/vector.md
! 89c99fdf4bdb74fc0e680b01095eb9d1  gcc/config/rs6000/vsx.md
  62cd6bf777af9270cbc8947ee14941f1  gcc/config/rs6000/vxworks.h
  6400c28de85928df70c96f8795d988a1  gcc/config/rs6000/vxworksae.h
  a8c4ccdf64c535c04aea49b25e2edd70  gcc/config/rs6000/vxworksmils.h
--- 5038,5044 ----
  0a88b1fc4b596cd84e7825b3a5f3b524  gcc/config/rs6000/tmmintrin.h
  869601137999c1447aaab0b73104dcdb  gcc/config/rs6000/vec_types.h
  205bbf4f9ece545c1eff934c146a75b2  gcc/config/rs6000/vector.md
! 805a47e8c256e7298f6b4e8a7644476a  gcc/config/rs6000/vsx.md
  62cd6bf777af9270cbc8947ee14941f1  gcc/config/rs6000/vxworks.h
  6400c28de85928df70c96f8795d988a1  gcc/config/rs6000/vxworksae.h
  a8c4ccdf64c535c04aea49b25e2edd70  gcc/config/rs6000/vxworksmils.h
*************** a5a54c7c2bc12aee90c87a116610c28e  gcc/co
*** 5094,5100 ****
  d04ec298ee3e87b2b5e6a05a5e8fab7f  gcc/config/s390/s390-protos.h
  7e68f718fd24a643d9674af42fd5c99a  gcc/config/s390/s390.cc
  147006e730fe3e106809eac19cfd90dc  gcc/config/s390/s390.h
! a18271cac23c5586f969ae8bdba53855  gcc/config/s390/s390.md
  cb0b2736d73615065dbf9dd10eb64d5a  gcc/config/s390/s390.opt
  4afe70778cb47f5ab74798a74ebe0ee2  gcc/config/s390/s390.opt.urls
  2c3dc8c98bc81eca16182e930c08db3b  gcc/config/s390/s390intrin.h
--- 5096,5102 ----
  d04ec298ee3e87b2b5e6a05a5e8fab7f  gcc/config/s390/s390-protos.h
  7e68f718fd24a643d9674af42fd5c99a  gcc/config/s390/s390.cc
  147006e730fe3e106809eac19cfd90dc  gcc/config/s390/s390.h
! b20eb234c5efa5c06e2d779d624b0457  gcc/config/s390/s390.md
  cb0b2736d73615065dbf9dd10eb64d5a  gcc/config/s390/s390.opt
  4afe70778cb47f5ab74798a74ebe0ee2  gcc/config/s390/s390.opt.urls
  2c3dc8c98bc81eca16182e930c08db3b  gcc/config/s390/s390intrin.h
*************** e2e50c477f234875fd9fc66727097083  gcc/co
*** 5107,5113 ****
  9eb7894e650772c40cbdb9e6ed254142  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  6fcb92a14c96feb4d689ed578348c642  gcc/config/s390/vecintrin.h
! 456c74f339daf88596753216ea278b0f  gcc/config/s390/vector.md
  634c4f8cae42dd7a7d29a223437ff660  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  481e371a2719a54e96d2efd0b7ceb35b  gcc/config/sh/constraints.md
--- 5109,5115 ----
  9eb7894e650772c40cbdb9e6ed254142  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  6fcb92a14c96feb4d689ed578348c642  gcc/config/s390/vecintrin.h
! 2f9f003dc6b052379a6e4f128cee738a  gcc/config/s390/vector.md
  634c4f8cae42dd7a7d29a223437ff660  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  481e371a2719a54e96d2efd0b7ceb35b  gcc/config/sh/constraints.md
*************** ae7d512c89d68a199632c8e4833ec548  gcc/co
*** 5278,5284 ****
  a3620453ae83ae76c8d836eb96587391  gcc/config/vax/vax-protos.h
  ae82ae0b00b4637a81eb63fc44c4b4b1  gcc/config/vax/vax.cc
  229199e643644f927b9e9faee465a1c3  gcc/config/vax/vax.h
! 07c4dbabb21183633592e7b919bba44a  gcc/config/vax/vax.md
  b47cdf79a98e21dfe43144453a5d8ea5  gcc/config/vax/vax.opt
  bf49e906bab688af364c5f48f69324f6  gcc/config/vax/vax.opt.urls
  3a1e13187cbe98f04b0b80554d1b73f7  gcc/config/visium/constraints.md
--- 5280,5286 ----
  a3620453ae83ae76c8d836eb96587391  gcc/config/vax/vax-protos.h
  ae82ae0b00b4637a81eb63fc44c4b4b1  gcc/config/vax/vax.cc
  229199e643644f927b9e9faee465a1c3  gcc/config/vax/vax.h
! 021e60659262c497ba0a6e982de18dc3  gcc/config/vax/vax.md
  b47cdf79a98e21dfe43144453a5d8ea5  gcc/config/vax/vax.opt
  bf49e906bab688af364c5f48f69324f6  gcc/config/vax/vax.opt.urls
  3a1e13187cbe98f04b0b80554d1b73f7  gcc/config/visium/constraints.md
*************** d36a2aabdf8da39363d9be0efef739b0  gcc/co
*** 5372,5378 ****
  11daa3f7f65177eb32e2dad6fd437637  gcc/coroutine-passes.cc
  f1ae4baa11bd5b6dd111907d100e7c0c  gcc/coverage.cc
  bf1a3b3570d1b69e07f60f5150f38a93  gcc/coverage.h
! 50a671acc4b9410c92e51a0e80eae342  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
--- 5374,5380 ----
  11daa3f7f65177eb32e2dad6fd437637  gcc/coroutine-passes.cc
  f1ae4baa11bd5b6dd111907d100e7c0c  gcc/coverage.cc
  bf1a3b3570d1b69e07f60f5150f38a93  gcc/coverage.h
! 85b12fce9466cac8f4caf268913f4b26  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
*************** cb06dcbb3232403bb30ebd0d7d1feae1  gcc/cp
*** 5407,5422 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  458dd30ec01e1ab016feef4141e9cd70  gcc/cp/Make-lang.in
! 9540915fc5b11ee5890f1d5562c611e5  gcc/cp/call.cc
  eb0e2e62caf98260cc2641216d140ae9  gcc/cp/cfns.gperf
  dee1bc8866869d1becc1c1459cf3853d  gcc/cp/cfns.h
  cece9d48fd49b2e27c93c08c799d3a43  gcc/cp/class.cc
  c2cee7941d7a9d85eb87f70b7f8495ac  gcc/cp/config-lang.in
! 2be592ffbbec6e23f2a515bccb32f835  gcc/cp/constexpr.cc
  e2342416928d82aea826d50f04c9f56c  gcc/cp/constraint.cc
  7f4cf1f0f93d7aa0443c94e023845d1c  gcc/cp/contracts.cc
  5b547c5fd539f8a214ed271c5a475a85  gcc/cp/contracts.h
! dc474088c982391206e9d6a529937f19  gcc/cp/coroutines.cc
  fbb64a63ff9ac5740b8339f18f4d0644  gcc/cp/cp-gimplify.cc
  d3243151c2dc95476f1ffe37daeac128  gcc/cp/cp-lang.cc
  7c2a3efea776c90aa874253dbc0d63d5  gcc/cp/cp-name-hint.h
--- 5409,5424 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  458dd30ec01e1ab016feef4141e9cd70  gcc/cp/Make-lang.in
! e0effa7d82a567f1047f047eab0fcbfe  gcc/cp/call.cc
  eb0e2e62caf98260cc2641216d140ae9  gcc/cp/cfns.gperf
  dee1bc8866869d1becc1c1459cf3853d  gcc/cp/cfns.h
  cece9d48fd49b2e27c93c08c799d3a43  gcc/cp/class.cc
  c2cee7941d7a9d85eb87f70b7f8495ac  gcc/cp/config-lang.in
! 7d146092407a3c00d989a558a3424cd3  gcc/cp/constexpr.cc
  e2342416928d82aea826d50f04c9f56c  gcc/cp/constraint.cc
  7f4cf1f0f93d7aa0443c94e023845d1c  gcc/cp/contracts.cc
  5b547c5fd539f8a214ed271c5a475a85  gcc/cp/contracts.h
! 2dbdcea3676fe880db2ae645fa5819cc  gcc/cp/coroutines.cc
  fbb64a63ff9ac5740b8339f18f4d0644  gcc/cp/cp-gimplify.cc
  d3243151c2dc95476f1ffe37daeac128  gcc/cp/cp-lang.cc
  7c2a3efea776c90aa874253dbc0d63d5  gcc/cp/cp-name-hint.h
*************** e1f1e00efaa3ab325dcde6256bd453ea  gcc/cp
*** 5430,5473 ****
  56f39bfaef18eed52575804302d7f065  gcc/cp/cxx-pretty-print.cc
  08e116dfeec3d3e6814661d5e4274639  gcc/cp/cxx-pretty-print.h
  8947390d58d06707b7fc5112da286233  gcc/cp/cxxapi-data.csv
! c6f67dc5986c092e1ada72c268f60ce5  gcc/cp/decl.cc
  1abb8e5bf838320c47bbb41c28ac53c8  gcc/cp/decl.h
  1cb099a7980289f4fcdda85452c6a3e4  gcc/cp/decl2.cc
  db1260dd767707d8dcbdbdcd7982bfad  gcc/cp/dump.cc
! 59bf1da855227c5935dc3e19aae2d725  gcc/cp/error.cc
  2bd7d5984b70c2c7549c4af9201f8d2d  gcc/cp/except.cc
  7dc09b1b70064fa190fd9060df614538  gcc/cp/expr.cc
  a067c19b95bfc08094e338eb152ec647  gcc/cp/friend.cc
  e459328dad760653a7ba4c5c6a0e07b1  gcc/cp/g++spec.cc
  36027d22493b558f5a557dac9993fd54  gcc/cp/gen-cxxapi-file.py
  d3c17c84efdf6a50d26f287b397fc85f  gcc/cp/init.cc
! c03a17603eb96c3422afd4c668842aa1  gcc/cp/lambda.cc
  66bc6ee758a433ad34ad94d5b839154b  gcc/cp/lang-specs.h
  d12efe90a1bc48c1279579e51d07c2f6  gcc/cp/lex.cc
  c9f1276984f27647e3aac405d236a360  gcc/cp/logic.cc
! c55e688f48e62af58edfcade9876bb17  gcc/cp/mangle.cc
  7add7f50dbf2cd5e7154942a14edba9e  gcc/cp/mapper-client.cc
  7f5ee917afe43784e616d41f8008c5f7  gcc/cp/mapper-client.h
  a5b251983ab6036fe6739433864419c7  gcc/cp/mapper-resolver.cc
  5f69d7aa3499e15103e647683d2a92b0  gcc/cp/method.cc
  e5de0a6c0e25db99122b38cfbd158f92  gcc/cp/module.cc
! 11d4b2dad811e7167eda68313cf80ac5  gcc/cp/name-lookup.cc
  4c2302075ee88f154fe1d9d5bc880b38  gcc/cp/name-lookup.h
  9071e61b746a07f7ae419836317ea8d4  gcc/cp/operators.def
  b4ea7976f776ee37fce22b16756ad0e0  gcc/cp/optimize.cc
! 3005c54da5bb91ee03256ad352be3db5  gcc/cp/parser.cc
  64953966b085a9e770be93c5d1bdca4e  gcc/cp/parser.h
! b21cb4ca763e2f9f0e4e87c4f31976f7  gcc/cp/pt.cc
  c59b967f38f4705696e11724814e2a06  gcc/cp/ptree.cc
  5e3e9c87ee323734a11e7081aaa64fa5  gcc/cp/rtti.cc
  7764edeba26dbb6b15962e6395cba9d2  gcc/cp/search.cc
! 904618015813b4e7f5019d3572241aa9  gcc/cp/semantics.cc
  ca8df8ebc275aae3373b59e34155cc57  gcc/cp/std-name-hint.gperf
  94fae0d321122a3989a40631ba86d13b  gcc/cp/std-name-hint.h
! 41e87ed4f19ff0138f84bf27e143fc65  gcc/cp/tree.cc
  ade60cf10e86c87a2d3960a453e78059  gcc/cp/type-utils.h
! 4ebb55c4c22d34bf9c9d1bc43b29b288  gcc/cp/typeck.cc
! e8b7fc59f86c5a7c4e08ae88222ebbeb  gcc/cp/typeck2.cc
  b04e03a3822d8b9ab15575d78d4309f1  gcc/cp/vtable-class-hierarchy.cc
  d9039dac3f86bf082870bf78b964568b  gcc/cppbuiltin.cc
  c2ff7817297154695270be6f932730a6  gcc/cppbuiltin.h
--- 5432,5475 ----
  56f39bfaef18eed52575804302d7f065  gcc/cp/cxx-pretty-print.cc
  08e116dfeec3d3e6814661d5e4274639  gcc/cp/cxx-pretty-print.h
  8947390d58d06707b7fc5112da286233  gcc/cp/cxxapi-data.csv
! a4f5a2995bad124b53344d0bcad1da36  gcc/cp/decl.cc
  1abb8e5bf838320c47bbb41c28ac53c8  gcc/cp/decl.h
  1cb099a7980289f4fcdda85452c6a3e4  gcc/cp/decl2.cc
  db1260dd767707d8dcbdbdcd7982bfad  gcc/cp/dump.cc
! 15c89a7bb542fb892be5e9a4db5ec8d6  gcc/cp/error.cc
  2bd7d5984b70c2c7549c4af9201f8d2d  gcc/cp/except.cc
  7dc09b1b70064fa190fd9060df614538  gcc/cp/expr.cc
  a067c19b95bfc08094e338eb152ec647  gcc/cp/friend.cc
  e459328dad760653a7ba4c5c6a0e07b1  gcc/cp/g++spec.cc
  36027d22493b558f5a557dac9993fd54  gcc/cp/gen-cxxapi-file.py
  d3c17c84efdf6a50d26f287b397fc85f  gcc/cp/init.cc
! 06325c7371178290451443418bff21f3  gcc/cp/lambda.cc
  66bc6ee758a433ad34ad94d5b839154b  gcc/cp/lang-specs.h
  d12efe90a1bc48c1279579e51d07c2f6  gcc/cp/lex.cc
  c9f1276984f27647e3aac405d236a360  gcc/cp/logic.cc
! 20774474eca176ab746a0e590de3bcc2  gcc/cp/mangle.cc
  7add7f50dbf2cd5e7154942a14edba9e  gcc/cp/mapper-client.cc
  7f5ee917afe43784e616d41f8008c5f7  gcc/cp/mapper-client.h
  a5b251983ab6036fe6739433864419c7  gcc/cp/mapper-resolver.cc
  5f69d7aa3499e15103e647683d2a92b0  gcc/cp/method.cc
  e5de0a6c0e25db99122b38cfbd158f92  gcc/cp/module.cc
! 188fdc84725eb2b79edaad5d46a317ae  gcc/cp/name-lookup.cc
  4c2302075ee88f154fe1d9d5bc880b38  gcc/cp/name-lookup.h
  9071e61b746a07f7ae419836317ea8d4  gcc/cp/operators.def
  b4ea7976f776ee37fce22b16756ad0e0  gcc/cp/optimize.cc
! d1521f58fb9f44240c194e11ce856553  gcc/cp/parser.cc
  64953966b085a9e770be93c5d1bdca4e  gcc/cp/parser.h
! 448339060118bbddc256f35c182e5f15  gcc/cp/pt.cc
  c59b967f38f4705696e11724814e2a06  gcc/cp/ptree.cc
  5e3e9c87ee323734a11e7081aaa64fa5  gcc/cp/rtti.cc
  7764edeba26dbb6b15962e6395cba9d2  gcc/cp/search.cc
! 4f226c54fa19f6430937375d72c1543f  gcc/cp/semantics.cc
  ca8df8ebc275aae3373b59e34155cc57  gcc/cp/std-name-hint.gperf
  94fae0d321122a3989a40631ba86d13b  gcc/cp/std-name-hint.h
! 9b0c363a7a66e224140a1bbeb683c19d  gcc/cp/tree.cc
  ade60cf10e86c87a2d3960a453e78059  gcc/cp/type-utils.h
! f8b30eee4b81b9f72028f73719e52c8c  gcc/cp/typeck.cc
! 26beb8b24c68c6e55a89ba1d61b97b17  gcc/cp/typeck2.cc
  b04e03a3822d8b9ab15575d78d4309f1  gcc/cp/vtable-class-hierarchy.cc
  d9039dac3f86bf082870bf78b964568b  gcc/cppbuiltin.cc
  c2ff7817297154695270be6f932730a6  gcc/cppbuiltin.h
*************** c2ff7817297154695270be6f932730a6  gcc/cp
*** 5475,5487 ****
  dba9a9584db67bce81cb489ca8b13396  gcc/cppdefault.h
  e507d631984ba5c424cfa8c5586bd54c  gcc/cprop.cc
  455b3e5012e2a894aeae048cfc2d43a0  gcc/cse.cc
! 0486f1a8e4d2a697c45e648d89c99a3d  gcc/cselib.cc
  7cb7858299cde7776c4d453abc8d968b  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  aba39deaa8ad2ad555dc0798497a6c58  gcc/ctfc.cc
  94a425b811af1e25020f3a86ae78ee7c  gcc/ctfc.h
  7f33e05a76e2406be70d93293850b281  gcc/ctfout.cc
! 7e3a65d98f59aa2d096116cc3eada88a  gcc/d/ChangeLog
  86f687c485111eedca2eb048294f957e  gcc/d/ChangeLog-2006
  70ed1c47fd9b3f5dd95055642ed79265  gcc/d/ChangeLog-2007
  a7090ab2dd83aa4f44823c17566b83ef  gcc/d/ChangeLog-2008
--- 5477,5489 ----
  dba9a9584db67bce81cb489ca8b13396  gcc/cppdefault.h
  e507d631984ba5c424cfa8c5586bd54c  gcc/cprop.cc
  455b3e5012e2a894aeae048cfc2d43a0  gcc/cse.cc
! bf32c438eaeb9f5ef0b840bddc108fc7  gcc/cselib.cc
  7cb7858299cde7776c4d453abc8d968b  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  aba39deaa8ad2ad555dc0798497a6c58  gcc/ctfc.cc
  94a425b811af1e25020f3a86ae78ee7c  gcc/ctfc.h
  7f33e05a76e2406be70d93293850b281  gcc/ctfout.cc
! 3981620ecdffa2c916b336673076d302  gcc/d/ChangeLog
  86f687c485111eedca2eb048294f957e  gcc/d/ChangeLog-2006
  70ed1c47fd9b3f5dd95055642ed79265  gcc/d/ChangeLog-2007
  a7090ab2dd83aa4f44823c17566b83ef  gcc/d/ChangeLog-2008
*************** fac7c65f8a08ca939eb5628173812214  gcc/d/
*** 5505,5511 ****
  f73e07ffa2fced196f38346c405549cb  gcc/d/config-lang.in
  3ae19f975d50889b5f03df6c38bc0c61  gcc/d/d-attribs.cc
  15411c6b54ea91d24785d34b3d1671eb  gcc/d/d-builtins.cc
! 298a66dc3a7ec1d31d62f07cbd876335  gcc/d/d-codegen.cc
  5a1fb9f5b78bb830327c58023e0a8115  gcc/d/d-compiler.cc
  b61a881ef449869906f48f9dd6b9c591  gcc/d/d-convert.cc
  d21bbe7f95de57db6f9fbad0fe1f62ab  gcc/d/d-ctfloat.cc
--- 5507,5513 ----
  f73e07ffa2fced196f38346c405549cb  gcc/d/config-lang.in
  3ae19f975d50889b5f03df6c38bc0c61  gcc/d/d-attribs.cc
  15411c6b54ea91d24785d34b3d1671eb  gcc/d/d-builtins.cc
! 2bda3794c5d8a36064c4ff8806f0acd4  gcc/d/d-codegen.cc
  5a1fb9f5b78bb830327c58023e0a8115  gcc/d/d-compiler.cc
  b61a881ef449869906f48f9dd6b9c591  gcc/d/d-convert.cc
  d21bbe7f95de57db6f9fbad0fe1f62ab  gcc/d/d-ctfloat.cc
*************** d21bbe7f95de57db6f9fbad0fe1f62ab  gcc/d/
*** 5517,5523 ****
  933fad50b502c1073de1af4c28d29235  gcc/d/d-lang.cc
  38c4969cf0690ec87d68618a59f68a42  gcc/d/d-longdouble.cc
  59fbcae5676422cf5141f5356cec90d5  gcc/d/d-port.cc
! f74323ae44ea5fdd0a663d81deb67553  gcc/d/d-spec.cc
  b9c48c809f8cf9c3ab7ae114509d3d1a  gcc/d/d-system.h
  9aa179202bbb20ad5fdab16cefd7103a  gcc/d/d-target-def.h
  0f91af6df397b8a405e1868d0435e209  gcc/d/d-target.cc
--- 5519,5525 ----
  933fad50b502c1073de1af4c28d29235  gcc/d/d-lang.cc
  38c4969cf0690ec87d68618a59f68a42  gcc/d/d-longdouble.cc
  59fbcae5676422cf5141f5356cec90d5  gcc/d/d-port.cc
! ebcaa46f15a76bdcff0332b3b69a9343  gcc/d/d-spec.cc
  b9c48c809f8cf9c3ab7ae114509d3d1a  gcc/d/d-system.h
  9aa179202bbb20ad5fdab16cefd7103a  gcc/d/d-target-def.h
  0f91af6df397b8a405e1868d0435e209  gcc/d/d-target.cc
*************** b9c48c809f8cf9c3ab7ae114509d3d1a  gcc/d/
*** 5525,5531 ****
  b19c1c032d04a6e603d0ec0be5eaf210  gcc/d/d-target.h
  b1ac7d5abaf19efc889f97c469081fed  gcc/d/d-tree.def
  b4ed30104da1ee3c62f919545e369805  gcc/d/d-tree.h
! aea031f02549b034803352d6bc5498c7  gcc/d/decl.cc
  fba21123f05d88982639a8a0ccea59a5  gcc/d/dmd/MERGE
  123db03ec877052aff84a8926416b377  gcc/d/dmd/README.md
  2a63c683aced1bcdc3b0dc1c174f9694  gcc/d/dmd/VERSION
--- 5527,5533 ----
  b19c1c032d04a6e603d0ec0be5eaf210  gcc/d/d-target.h
  b1ac7d5abaf19efc889f97c469081fed  gcc/d/d-tree.def
  b4ed30104da1ee3c62f919545e369805  gcc/d/d-tree.h
! ac87b1ef692c914356d10c28a49ef8f3  gcc/d/decl.cc
  fba21123f05d88982639a8a0ccea59a5  gcc/d/dmd/MERGE
  123db03ec877052aff84a8926416b377  gcc/d/dmd/README.md
  2a63c683aced1bcdc3b0dc1c174f9694  gcc/d/dmd/VERSION
*************** ad0f78ba8b0701a44bdecc5faa124807  gcc/d/
*** 5707,5713 ****
  44c7f391ce2df261118780dad2e204ef  gcc/d/dmd/version.h
  39f4362c93869c60a676f338ba6aafa1  gcc/d/dmd/visitor.d
  28ad876b926e1a11eef92fa93a0c76d8  gcc/d/dmd/visitor.h
! febf22f2cc8904f8d5832c13aa56ac89  gcc/d/expr.cc
  31c6c893c7016bba33894d4ecb870186  gcc/d/gdc.texi
  b2292b1eddab0999ca356e893894aef3  gcc/d/implement-d.texi
  a09fb081bd2127bf8eb758662b188c8a  gcc/d/imports.cc
--- 5709,5715 ----
  44c7f391ce2df261118780dad2e204ef  gcc/d/dmd/version.h
  39f4362c93869c60a676f338ba6aafa1  gcc/d/dmd/visitor.d
  28ad876b926e1a11eef92fa93a0c76d8  gcc/d/dmd/visitor.h
! d146f5d532aa40e193e4df056a9ab396  gcc/d/expr.cc
  31c6c893c7016bba33894d4ecb870186  gcc/d/gdc.texi
  b2292b1eddab0999ca356e893894aef3  gcc/d/implement-d.texi
  a09fb081bd2127bf8eb758662b188c8a  gcc/d/imports.cc
*************** e92dc5999fefa8bcaa6c0bb0c9e9a040  gcc/d/
*** 5720,5728 ****
  9c92a93829f9256fe7edb9079338ad16  gcc/d/modules.cc
  918b9b087e54573309c3a81fe5289d2a  gcc/d/runtime.cc
  fdd878f60fc02f2c1628ec0b9fc264f0  gcc/d/runtime.def
! d0f4c3717ad53298ccc90fc2ad69bd2d  gcc/d/toir.cc
  13456edfabde185692a338bee646d1c4  gcc/d/typeinfo.cc
! 26da26ce44edce5d7acad17e4be1dcbb  gcc/d/types.cc
  9b691c3fc5f14ea13cd63d6d15b9ea63  gcc/data-streamer-in.cc
  22fb7e3959d063cf127ad7941fa4f134  gcc/data-streamer-out.cc
  331b9caf0050578236302ddc6adbad7b  gcc/data-streamer.cc
--- 5722,5730 ----
  9c92a93829f9256fe7edb9079338ad16  gcc/d/modules.cc
  918b9b087e54573309c3a81fe5289d2a  gcc/d/runtime.cc
  fdd878f60fc02f2c1628ec0b9fc264f0  gcc/d/runtime.def
! a9cfa054c92d1b9d190b6cd69f3754ce  gcc/d/toir.cc
  13456edfabde185692a338bee646d1c4  gcc/d/typeinfo.cc
! 5ff76135fa801e1b2f515f524190416f  gcc/d/types.cc
  9b691c3fc5f14ea13cd63d6d15b9ea63  gcc/data-streamer-in.cc
  22fb7e3959d063cf127ad7941fa4f134  gcc/data-streamer-out.cc
  331b9caf0050578236302ddc6adbad7b  gcc/data-streamer.cc
*************** ad6e5a1af15939d1bb32f846f3eae833  gcc/dd
*** 5741,5747 ****
  70f86027c9e6dfe454e07b25a3f096ad  gcc/df-problems.cc
  6c79a717822b0e865b1d98d9c6f60af9  gcc/df-scan.cc
  e2e02f995d0e8f5573556099f90400eb  gcc/df.h
! 22e6e87c0306a9bbb45eb3924abd96bb  gcc/dfp.cc
  6639e6fa393d4d695230c8249f7f9cdb  gcc/dfp.h
  8c7157e2630f68b08b1016a55fbf28a6  gcc/diagnostic-client-data-hooks.h
  1b2c0bddc4abec6876ffe0c377add384  gcc/diagnostic-color.cc
--- 5743,5749 ----
  70f86027c9e6dfe454e07b25a3f096ad  gcc/df-problems.cc
  6c79a717822b0e865b1d98d9c6f60af9  gcc/df-scan.cc
  e2e02f995d0e8f5573556099f90400eb  gcc/df.h
! 34beb41c88a9abb54f18efe552f239c7  gcc/dfp.cc
  6639e6fa393d4d695230c8249f7f9cdb  gcc/dfp.h
  8c7157e2630f68b08b1016a55fbf28a6  gcc/diagnostic-client-data-hooks.h
  1b2c0bddc4abec6876ffe0c377add384  gcc/diagnostic-color.cc
*************** aa1c9493107eefcfd7a64479fccc57e8  gcc/di
*** 5764,5770 ****
  1d5406c2c00778685af4d54cedf49ae6  gcc/digraph.cc
  84e9d01f2dbadb091f992b9902508cb6  gcc/digraph.h
  a84ff6fc2f7744beef98a11d4d3c1c6c  gcc/doc/analyzer.texi
! 8079ac62515f8e7113c6211bf3b3ea9c  gcc/doc/avr-mmcu.texi
  b44c0e4fd6840dc6fd667f8f678ef28e  gcc/doc/bugreport.texi
  40403afec90bef8912a33c829ef123d4  gcc/doc/cfg.texi
  7c0efad1ccaaaafbfb1dd4b2c3fecaa5  gcc/doc/collect2.texi
--- 5766,5772 ----
  1d5406c2c00778685af4d54cedf49ae6  gcc/digraph.cc
  84e9d01f2dbadb091f992b9902508cb6  gcc/digraph.h
  a84ff6fc2f7744beef98a11d4d3c1c6c  gcc/doc/analyzer.texi
! 8a085b8bf37c53e2d8b0866a196d9000  gcc/doc/avr-mmcu.texi
  b44c0e4fd6840dc6fd667f8f678ef28e  gcc/doc/bugreport.texi
  40403afec90bef8912a33c829ef123d4  gcc/doc/cfg.texi
  7c0efad1ccaaaafbfb1dd4b2c3fecaa5  gcc/doc/collect2.texi
*************** ed484c80158c26981aa92eb9db02bca1  gcc/do
*** 5773,5819 ****
  8500f86c6eeecad392959c7e0cff5e6e  gcc/doc/configterms.texi
  4d2454c26871b7e16f203fafd8a16eff  gcc/doc/contrib.texi
  bcb568abf327b00f131bad9c9f7e7bb3  gcc/doc/contribute.texi
! 6a7bf835e47ca795fc27cf4e48749352  gcc/doc/cpp.1
! 1d830f2068a4d56004ec2080bfd9407f  gcc/doc/cpp.info
  7c3c7195b63f7ab74b3b458c0b660bea  gcc/doc/cpp.texi
  93589248ae7c20fb580e9f207c4144fc  gcc/doc/cppdiropts.texi
  0a2477e1c71642a6f431e44b14622752  gcc/doc/cppenv.texi
! 6aab175c62abf866554dedbc50e40caf  gcc/doc/cppinternals.info
  0d7cad95038d3ab60de21c0b6bf9d5f4  gcc/doc/cppinternals.texi
  2d634d06b732b28d386a9095438628af  gcc/doc/cppopts.texi
  ac6062ca0cac2513de84bff3633d1352  gcc/doc/cppwarnopts.texi
! d1c2589a50ae1fa35028b6b9eb3ebc21  gcc/doc/extend.texi
  36d2f8d35ab67c1ac73a3efd75a38aac  gcc/doc/fragments.texi
  b5f11d19f8c6228987f197fa8d65a9a3  gcc/doc/frontends.texi
! 2e5961a499559a179d572e2d3a8806e2  gcc/doc/fsf-funding.7
! af7374d6f14d7b7da48ed5e0e2bc0b67  gcc/doc/g++.1
! af7374d6f14d7b7da48ed5e0e2bc0b67  gcc/doc/gcc.1
! b57f1fb5a260c7367a4051b8a2a9ef4e  gcc/doc/gcc.info
  7040b312fc54f9359916634c463730b1  gcc/doc/gcc.texi
! c1554c3f6e1ecc958d7288c5265e610e  gcc/doc/gccgo.1
! 6134d6a93f421801d7cd7f54a94cb553  gcc/doc/gccgo.info
! 07e3478262e8d3f3b9c4893eecd30af8  gcc/doc/gccinstall.info
! dae0108f97958146ba427bdfdae984de  gcc/doc/gccint.info
  d2a951eb3484c8af7edaccda1a4be08b  gcc/doc/gccint.texi
! 907140aaf58446a69ae3132ecacb1840  gcc/doc/gcov-dump.1
  5a424a8818a97ec6666383758d38ebab  gcc/doc/gcov-dump.texi
! e1a81bfb9c90b6514ba1fe68f146d3df  gcc/doc/gcov-tool.1
  add92879a4857f715951ddaa6e770058  gcc/doc/gcov-tool.texi
! a5ab8a148a16f9203cbb29bad970c330  gcc/doc/gcov.1
  4aab84b1792e1157b40a77e359cbe32a  gcc/doc/gcov.texi
! c1dad29a0beb496eaab2af57f858946d  gcc/doc/gdc.1
! 271f1f56996312c8f4b146a174086387  gcc/doc/gdc.info
  7f660598e1931c414df299ccfd785529  gcc/doc/generic.texi
! 986cbac9589185c650b2804139047a1e  gcc/doc/gfdl.7
! c52bf7e06783f2339cd698cf11cc5ea2  gcc/doc/gfortran.1
  48a379c2e4ebafac8675d80865f16aaf  gcc/doc/gimple.texi
! e94572b863a78fa68a161dbfc9943f93  gcc/doc/gm2.1
  41c940a7119b35d9b4c03dd8fa2e0684  gcc/doc/gm2.texi
! 0443c35201f3ba840521e0551a991c5b  gcc/doc/gnat-style.info
! d957e9d5824856670a245384b11a431f  gcc/doc/gnat_rm.info
! 85e4b99722fc095eea8bba905db36e3d  gcc/doc/gnat_ugn.info
  dc4ccd9843d88bc01c909438dabfd6ab  gcc/doc/gnu.texi
! 0cdb3c072bdac4361aafa1846010d090  gcc/doc/gpl.7
  008636cf6a73b2a679e8c8259aec3d79  gcc/doc/gty.texi
  a05b7ba0afedc246e50b186f08721687  gcc/doc/headerdirs.texi
  7f0c07d5823270acc42cb62767eb4fc1  gcc/doc/hostconfig.texi
--- 5775,5821 ----
  8500f86c6eeecad392959c7e0cff5e6e  gcc/doc/configterms.texi
  4d2454c26871b7e16f203fafd8a16eff  gcc/doc/contrib.texi
  bcb568abf327b00f131bad9c9f7e7bb3  gcc/doc/contribute.texi
! 64cd921d249179896b3a10185297e7d8  gcc/doc/cpp.1
! db122eea7166d42834511fd12d221a71  gcc/doc/cpp.info
  7c3c7195b63f7ab74b3b458c0b660bea  gcc/doc/cpp.texi
  93589248ae7c20fb580e9f207c4144fc  gcc/doc/cppdiropts.texi
  0a2477e1c71642a6f431e44b14622752  gcc/doc/cppenv.texi
! 7e0cca25b80fc30e70486737b93f30b6  gcc/doc/cppinternals.info
  0d7cad95038d3ab60de21c0b6bf9d5f4  gcc/doc/cppinternals.texi
  2d634d06b732b28d386a9095438628af  gcc/doc/cppopts.texi
  ac6062ca0cac2513de84bff3633d1352  gcc/doc/cppwarnopts.texi
! 35f3f8ea97985d5057fd6e39a07d13f0  gcc/doc/extend.texi
  36d2f8d35ab67c1ac73a3efd75a38aac  gcc/doc/fragments.texi
  b5f11d19f8c6228987f197fa8d65a9a3  gcc/doc/frontends.texi
! 744dc2834b297857ac89086d07a36a06  gcc/doc/fsf-funding.7
! 1e193a8c99d68d2cfc9b57dced65c5db  gcc/doc/g++.1
! 1e193a8c99d68d2cfc9b57dced65c5db  gcc/doc/gcc.1
! 0ffc55251986ef67db46d38ab045c831  gcc/doc/gcc.info
  7040b312fc54f9359916634c463730b1  gcc/doc/gcc.texi
! 77676f2aca4f72faaa5eff931ba30a4c  gcc/doc/gccgo.1
! 49689c88c247c6bf606fdd985415922b  gcc/doc/gccgo.info
! 173b517dc7376ce96e715be733b2f7f0  gcc/doc/gccinstall.info
! 7fc03b0cac15dfba8cab96ccab08b136  gcc/doc/gccint.info
  d2a951eb3484c8af7edaccda1a4be08b  gcc/doc/gccint.texi
! 378439aec03339fda21d49108d912ddc  gcc/doc/gcov-dump.1
  5a424a8818a97ec6666383758d38ebab  gcc/doc/gcov-dump.texi
! a5f2e1de1769f0862877ad62fe3ec59c  gcc/doc/gcov-tool.1
  add92879a4857f715951ddaa6e770058  gcc/doc/gcov-tool.texi
! f54c3484e3ccfae14f7404948ee9ec07  gcc/doc/gcov.1
  4aab84b1792e1157b40a77e359cbe32a  gcc/doc/gcov.texi
! 4b968ad676e63e02c762292c8472f46f  gcc/doc/gdc.1
! 0161530fa4d21e126a3bd8077a5a17d0  gcc/doc/gdc.info
  7f660598e1931c414df299ccfd785529  gcc/doc/generic.texi
! dcc27ec7f44d67ace4185cb616f32a16  gcc/doc/gfdl.7
! 7f69bbb40b647e61aeeadfa54c48c612  gcc/doc/gfortran.1
  48a379c2e4ebafac8675d80865f16aaf  gcc/doc/gimple.texi
! 8d259b0aec18d6e8dfc0fbeea3d1a7c2  gcc/doc/gm2.1
  41c940a7119b35d9b4c03dd8fa2e0684  gcc/doc/gm2.texi
! cf08495b27c3f7ca63e12f73a8229ccb  gcc/doc/gnat-style.info
! 89c2066875569e2d232ba96f29df5190  gcc/doc/gnat_rm.info
! 4d6394a1341ecfc4d48012d0654b0972  gcc/doc/gnat_ugn.info
  dc4ccd9843d88bc01c909438dabfd6ab  gcc/doc/gnu.texi
! c66d985ba001ec4965c33d79882d2412  gcc/doc/gpl.7
  008636cf6a73b2a679e8c8259aec3d79  gcc/doc/gty.texi
  a05b7ba0afedc246e50b186f08721687  gcc/doc/headerdirs.texi
  7f0c07d5823270acc42cb62767eb4fc1  gcc/doc/hostconfig.texi
*************** bb6c0501956266c8d43a2c2ecd36941c  gcc/do
*** 5824,5840 ****
  ef644ebebe5d8bca5dd86653f2a242b7  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! aa4d93313f9b7a5aec5b09041fd796a0  gcc/doc/install.texi
  2ef5aff8fc8a7cedf6236f86835e2608  gcc/doc/install.texi2html
  26c53e1edece23eebf72e40881f20e46  gcc/doc/interface.texi
! e89b8aad38e5d384f3f15b45de16bf53  gcc/doc/invoke.texi
  4eb965d8ead78f1e3757415ae4d7872f  gcc/doc/languages.texi
  d2687b47a74c0bb7a227308dc1e7ba84  gcc/doc/libgcc.texi
  1e7dce602334edeb2ec545b9da6e4206  gcc/doc/loop.texi
! 97f9c93599e9be8119d551a8194a962b  gcc/doc/lto-dump.1
  c4c96046878c6a7d1cec0d55bdc1d3c0  gcc/doc/lto-dump.texi
  f7e393ecf55da7875ffe48cf97d93113  gcc/doc/lto.texi
! 450b93f3c5f6b431414c2b030d37eff3  gcc/doc/m2.info
  3805b40075ad0234e5c1094fb3685065  gcc/doc/makefile.texi
  af3fd517733d45195dea5652ca52345b  gcc/doc/match-and-simplify.texi
  7e5385442503aff6253445d0dda0eb2a  gcc/doc/md.texi
--- 5826,5842 ----
  ef644ebebe5d8bca5dd86653f2a242b7  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! e309f1a8be1f28df4970e0cc9d5f7d27  gcc/doc/install.texi
  2ef5aff8fc8a7cedf6236f86835e2608  gcc/doc/install.texi2html
  26c53e1edece23eebf72e40881f20e46  gcc/doc/interface.texi
! 246b4d78eade146217e19ce37be814f2  gcc/doc/invoke.texi
  4eb965d8ead78f1e3757415ae4d7872f  gcc/doc/languages.texi
  d2687b47a74c0bb7a227308dc1e7ba84  gcc/doc/libgcc.texi
  1e7dce602334edeb2ec545b9da6e4206  gcc/doc/loop.texi
! f94c073042fb0d2e398c0c3c635c8671  gcc/doc/lto-dump.1
  c4c96046878c6a7d1cec0d55bdc1d3c0  gcc/doc/lto-dump.texi
  f7e393ecf55da7875ffe48cf97d93113  gcc/doc/lto.texi
! 38149289b80ecc004d53932d50906d9b  gcc/doc/m2.info
  3805b40075ad0234e5c1094fb3685065  gcc/doc/makefile.texi
  af3fd517733d45195dea5652ca52345b  gcc/doc/match-and-simplify.texi
  7e5385442503aff6253445d0dda0eb2a  gcc/doc/md.texi
*************** c8f7d73c0019711303d537b68567d9c3  gcc/do
*** 5847,5853 ****
  ccd9b82bd3e39bc1102ae6658779b9fa  gcc/doc/portability.texi
  b54aca370d7104c8f824313f42db5d88  gcc/doc/rtl.texi
  1b7d041bff2f4a6d961caaddaaa68e68  gcc/doc/service.texi
! 337b9be746100383169ea8f1c6de889a  gcc/doc/sourcebuild.texi
  148dbf041706b95032dd58b402f407b1  gcc/doc/standards.texi
  038a30ce651e170de4f7b22accfbe968  gcc/doc/tm.texi
  4d9d7c9f4dbdca0202cedd85a4304c0e  gcc/doc/tm.texi.in
--- 5849,5855 ----
  ccd9b82bd3e39bc1102ae6658779b9fa  gcc/doc/portability.texi
  b54aca370d7104c8f824313f42db5d88  gcc/doc/rtl.texi
  1b7d041bff2f4a6d961caaddaaa68e68  gcc/doc/service.texi
! 9b3ff0dc88906d2d0ccffd8cac382d2d  gcc/doc/sourcebuild.texi
  148dbf041706b95032dd58b402f407b1  gcc/doc/standards.texi
  038a30ce651e170de4f7b22accfbe968  gcc/doc/tm.texi
  4d9d7c9f4dbdca0202cedd85a4304c0e  gcc/doc/tm.texi.in
*************** c1dcd6f3a738eed32cfd895aa1d7c8a6  gcc/do
*** 5862,5868 ****
  335a5919c5f3951441bdb1c23a4aec9f  gcc/domwalk.h
  daff71b08321afe3ee27afca24431814  gcc/double-int.cc
  20c1bf25156bf31a0cc993c6c4f3c197  gcc/double-int.h
! 2b84bf179a889e94b9efbcd87c0fb2d6  gcc/dse.cc
  4b55186c3cb7afeeef3ef595c7712646  gcc/dump-context.h
  de190af17b56f025e38cc7b80eb99c8b  gcc/dumpfile.cc
  8d72acdb05890d8e08bdff52e2110299  gcc/dumpfile.h
--- 5864,5870 ----
  335a5919c5f3951441bdb1c23a4aec9f  gcc/domwalk.h
  daff71b08321afe3ee27afca24431814  gcc/double-int.cc
  20c1bf25156bf31a0cc993c6c4f3c197  gcc/double-int.h
! 4080eca402eccd48b639e547d23333c1  gcc/dse.cc
  4b55186c3cb7afeeef3ef595c7712646  gcc/dump-context.h
  de190af17b56f025e38cc7b80eb99c8b  gcc/dumpfile.cc
  8d72acdb05890d8e08bdff52e2110299  gcc/dumpfile.h
*************** ca9033ff37a39734edcb55c478a3a1fa  gcc/dw
*** 5871,5877 ****
  40224310d2b6e68a058c4c1079917a1f  gcc/dwarf2cfi.cc
  163e5e9e8282834ce39f40a4696495a8  gcc/dwarf2ctf.cc
  be8084cbe55394042e43e039c8ed9452  gcc/dwarf2ctf.h
! 312c32d82cc1de564d5c2ea1a759c512  gcc/dwarf2out.cc
  15ac2573846d37a9fc761ca237cfcbb3  gcc/dwarf2out.h
  949b4f69bfb006cfb1da508bd737e550  gcc/early-remat.cc
  764b36482faefc5dac455631acf458cb  gcc/edit-context.cc
--- 5873,5879 ----
  40224310d2b6e68a058c4c1079917a1f  gcc/dwarf2cfi.cc
  163e5e9e8282834ce39f40a4696495a8  gcc/dwarf2ctf.cc
  be8084cbe55394042e43e039c8ed9452  gcc/dwarf2ctf.h
! 341097de09b02d20825ec6f395cb5f88  gcc/dwarf2out.cc
  15ac2573846d37a9fc761ca237cfcbb3  gcc/dwarf2out.h
  949b4f69bfb006cfb1da508bd737e550  gcc/early-remat.cc
  764b36482faefc5dac455631acf458cb  gcc/edit-context.cc
*************** a5fc41cc98ae6fa01564177547cd44a6  gcc/et
*** 5888,5894 ****
  2372f40e0b8d7fea3f7a324caf3414f6  gcc/exec-tool.in
  4dd3474c92b4c4f8d54f09023a02eb47  gcc/explow.cc
  57812da28f5183635747d35e64be7fa3  gcc/explow.h
! ce818138311d538d3f0efed2fc6a6543  gcc/expmed.cc
  698a745f400cd248d2a1c1b1bb392dba  gcc/expmed.h
  4c13fbe5fe5a7ee76bdb66a10f238b15  gcc/expr.cc
  b94536f82db12f3d8eb00942b9d6336c  gcc/expr.h
--- 5890,5896 ----
  2372f40e0b8d7fea3f7a324caf3414f6  gcc/exec-tool.in
  4dd3474c92b4c4f8d54f09023a02eb47  gcc/explow.cc
  57812da28f5183635747d35e64be7fa3  gcc/explow.h
! dfec957c408bdb2d495eb70d441b4dff  gcc/expmed.cc
  698a745f400cd248d2a1c1b1bb392dba  gcc/expmed.h
  4c13fbe5fe5a7ee76bdb66a10f238b15  gcc/expr.cc
  b94536f82db12f3d8eb00942b9d6336c  gcc/expr.h
*************** f509ae019760fb711e40cefd2283fb1a  gcc/fi
*** 5905,5914 ****
  4832215f7646ad49b3833ee7b2e3a035  gcc/flags.h
  f6cf52e81c3175f2874b197050a59478  gcc/fold-const-call.cc
  dce7dac7e905ada28c6563d930b531eb  gcc/fold-const-call.h
! 090850db6c719557b18e35fafc041a4c  gcc/fold-const.cc
  62f9c541bc34eb653f289ecd29c7848a  gcc/fold-const.h
  5cce8057cb6a40c0ce23fcd6497d35c0  gcc/fold-mem-offsets.cc
! 9a5250e39235e1f8cdbb0370fc417778  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
--- 5907,5916 ----
  4832215f7646ad49b3833ee7b2e3a035  gcc/flags.h
  f6cf52e81c3175f2874b197050a59478  gcc/fold-const-call.cc
  dce7dac7e905ada28c6563d930b531eb  gcc/fold-const-call.h
! b954a317257afa3149e46a5bce58d9c2  gcc/fold-const.cc
  62f9c541bc34eb653f289ecd29c7848a  gcc/fold-const.h
  5cce8057cb6a40c0ce23fcd6497d35c0  gcc/fold-mem-offsets.cc
! 67b6f368918dacdef8dd88207602416f  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
*************** fbb872b566e2ec4cfaf854a2bc7b0670  gcc/fo
*** 5935,5941 ****
  d2b5e19b5750919b1dc193e2846090e8  gcc/fortran/Make-lang.in
  628502163ecbbf74cc0f64c524199ed0  gcc/fortran/arith.cc
  2cc199a14e3d9dcce43322fc86fc1263  gcc/fortran/arith.h
! 52732cfaa58afb755f57e871203c6280  gcc/fortran/array.cc
  c6240012d4d50e01e012119cb17ff776  gcc/fortran/bbt.cc
  6a6916e85a5a32415c36443edbd50feb  gcc/fortran/check.cc
  60518e7636bd17a7ea38f743f2cd2c6f  gcc/fortran/class.cc
--- 5937,5943 ----
  d2b5e19b5750919b1dc193e2846090e8  gcc/fortran/Make-lang.in
  628502163ecbbf74cc0f64c524199ed0  gcc/fortran/arith.cc
  2cc199a14e3d9dcce43322fc86fc1263  gcc/fortran/arith.h
! 95937ab0db2312f4c4043e43862b1e04  gcc/fortran/array.cc
  c6240012d4d50e01e012119cb17ff776  gcc/fortran/bbt.cc
  6a6916e85a5a32415c36443edbd50feb  gcc/fortran/check.cc
  60518e7636bd17a7ea38f743f2cd2c6f  gcc/fortran/class.cc
*************** af0d7f72f88d0810924a6a579045eeab  gcc/fo
*** 5947,6015 ****
  2df1006a61dabc70f90426595056788a  gcc/fortran/cpp.h
  aa3e28e6adf564765577a4f376bb9d05  gcc/fortran/data.cc
  2a77523a8c759e7a5e480175dfce3e06  gcc/fortran/data.h
! 4e1e3b2df4aaace206aa19c1e365e520  gcc/fortran/decl.cc
! dbbc0770ad9027571c63b5d0533e40ec  gcc/fortran/dependency.cc
! 5a69241d57d8b6127ecb02e0a22bee6e  gcc/fortran/dependency.h
  af59533c4bfc13e7b07e6ec1c164832c  gcc/fortran/dump-parse-tree.cc
! eaa509e23c681b4615a43afdbfe3cb0d  gcc/fortran/error.cc
  e3557d087bbbdf3b8f63250a32e95b5c  gcc/fortran/expr.cc
  5790e4e2fb5a21288fcb647a0dca23c4  gcc/fortran/f95-lang.cc
! 7e5624e7daaba902f7b3b3ee4abd8bcd  gcc/fortran/frontend-passes.cc
  f12471f71a85ea43d5295d1190faf890  gcc/fortran/gfc-diagnostic.def
  21286a817891898ac50a2b843007652d  gcc/fortran/gfc-internals.texi
! 6cecb2157794589b129027cac8e94684  gcc/fortran/gfortran.h
! 68cf4acf0079224c862677a06b03d2b9  gcc/fortran/gfortran.info
  57ff50b64741422eb357b86659a8afc8  gcc/fortran/gfortran.texi
  cc84451cbcaa91ddd59babe04bda0b1a  gcc/fortran/gfortranspec.cc
! 9c8c57b6192579ff44b99b76811fe26b  gcc/fortran/interface.cc
  df46b68ac2bc3086485916347795a6e2  gcc/fortran/intrinsic.cc
  7c5c308109e781e905a4606be634b46f  gcc/fortran/intrinsic.h
  3f7081a11cbca781ba26400c16f44044  gcc/fortran/intrinsic.texi
  d02a37f560d24e6c93ca58015c439402  gcc/fortran/invoke.texi
  0bab6e26e07b4784cc43cb3dc20010dc  gcc/fortran/io.cc
  93612186f78a67603a9b0339261c2469  gcc/fortran/ioparm.def
! 1600371076a7f3f8d7d872a4a8a6da45  gcc/fortran/iresolve.cc
  196ec628fe20afcf9090d2f773750a95  gcc/fortran/iso-c-binding.def
  fe42cd7b44c39f11d30fbe2708744a2d  gcc/fortran/iso-fortran-env.def
  f731d32ce05d070f1df4967c2ba8c9c2  gcc/fortran/lang-specs.h
  9842051e2822d8130f578344e561d394  gcc/fortran/lang.opt
  c90ca625190445c2f9e5014f2643e5f1  gcc/fortran/lang.opt.urls
  8f70b6af9bb7b493f688d2387ae11bd8  gcc/fortran/libgfortran.h
! d5921591f5cceed6247945a7f1793ef8  gcc/fortran/match.cc
  61d211909807d100996092bd61b7148b  gcc/fortran/match.h
  5796e2abb1ed0b90aafbca3796a9e5b8  gcc/fortran/matchexp.cc
  610d97669425c033f4edb591e02b22d3  gcc/fortran/mathbuiltins.def
  982581c25caf363e8ff4933ece911983  gcc/fortran/misc.cc
  e85c32445c6de7c1d06b379a0d1f12ad  gcc/fortran/module.cc
! 2788da2a93ded20d578d7ac14a5c9d61  gcc/fortran/openmp.cc
  ba11ab9ac11e6a78fa7706263e42f1fc  gcc/fortran/options.cc
! 56af741644ab30aa09221a750079e265  gcc/fortran/parse.cc
  6afe26dd3f7a33ff8c524687d1958f05  gcc/fortran/parse.h
! a0e2907182a3f4a299681840e8f5be43  gcc/fortran/primary.cc
! e8c15377bf31a221c1961801acf6b0be  gcc/fortran/resolve.cc
! bf73188a78ecc3c99bc6915db827d75f  gcc/fortran/scanner.cc
  1cfffbabece85f419a6ca2676917e619  gcc/fortran/scanner.h
  be0b83b5f771bbe50926a1109ebd9e09  gcc/fortran/simplify.cc
  a0bad1c11baa50813a82d72f738f0872  gcc/fortran/st.cc
! cbbcb9b103e6c3a223ed6521022f0b0c  gcc/fortran/symbol.cc
  74785cb703ffef31c77a2efb99685bb4  gcc/fortran/target-memory.cc
  d418319a23a87a1e1e8054eaeb5d527b  gcc/fortran/target-memory.h
! 3a2932a73962feb8fc16c9635ac928a6  gcc/fortran/trans-array.cc
  c0fda053eecaf4f55c32d4fe8c8db3e5  gcc/fortran/trans-array.h
  700878379c55cdec457b83a922d93699  gcc/fortran/trans-common.cc
  c420f80da3e0e794311a9b90c49abce5  gcc/fortran/trans-const.cc
  5644e20cd4aa0324875834a377cf89a4  gcc/fortran/trans-const.h
! a13796bc19ee899957fa78d9652f5ff5  gcc/fortran/trans-decl.cc
! dcabcc3c45d48b48a898b1ae88dd1fd5  gcc/fortran/trans-expr.cc
! 7376d3754fcb67bb3d440eedfce78b31  gcc/fortran/trans-intrinsic.cc
! cd62c1c77bf122047b8b1222354a9b5b  gcc/fortran/trans-io.cc
! be2abe61b914863c8dce5e37cb7f1491  gcc/fortran/trans-openmp.cc
  0a23775591d7d3e4fdb603d7bd9febb1  gcc/fortran/trans-stmt.cc
  1b5e4247678ad0441b5b0f26de2ebd4f  gcc/fortran/trans-stmt.h
! 79193e25cb2d902ca9eeb88b180288bd  gcc/fortran/trans-types.cc
  99093042b01c6c4c1ee2c064808bdaa0  gcc/fortran/trans-types.h
! d9d274d783642f6e1749266ab7178b64  gcc/fortran/trans.cc
! 29a1230eb3bca55231d07eb0a5c33e86  gcc/fortran/trans.h
  a5dcb5f38620ab51c2408b1d0fade263  gcc/fortran/trigd_fe.inc
  14d5ef9c0a16145fc4d821f1a1eaecbb  gcc/fortran/types.def
  2c61c6deb62c5b2a8f5eb059ac90ed17  gcc/fp-test.cc
--- 5949,6017 ----
  2df1006a61dabc70f90426595056788a  gcc/fortran/cpp.h
  aa3e28e6adf564765577a4f376bb9d05  gcc/fortran/data.cc
  2a77523a8c759e7a5e480175dfce3e06  gcc/fortran/data.h
! b300ba7667c841f599e5fa5d695f7f6c  gcc/fortran/decl.cc
! c4bd3bd07738a9a85beae142aa8054e3  gcc/fortran/dependency.cc
! fb3b0f1414056b23597f5e270a953409  gcc/fortran/dependency.h
  af59533c4bfc13e7b07e6ec1c164832c  gcc/fortran/dump-parse-tree.cc
! 8e370801f4b220b49e7bc0024382e8b7  gcc/fortran/error.cc
  e3557d087bbbdf3b8f63250a32e95b5c  gcc/fortran/expr.cc
  5790e4e2fb5a21288fcb647a0dca23c4  gcc/fortran/f95-lang.cc
! da0911555c2867fd5d1f6899cd24cbab  gcc/fortran/frontend-passes.cc
  f12471f71a85ea43d5295d1190faf890  gcc/fortran/gfc-diagnostic.def
  21286a817891898ac50a2b843007652d  gcc/fortran/gfc-internals.texi
! c4a213d76d236acb33bf86ba3c71e93d  gcc/fortran/gfortran.h
! e91b8b3582fb25077902e245740a0eff  gcc/fortran/gfortran.info
  57ff50b64741422eb357b86659a8afc8  gcc/fortran/gfortran.texi
  cc84451cbcaa91ddd59babe04bda0b1a  gcc/fortran/gfortranspec.cc
! e8869e5dae32915cb590df6cff07ab46  gcc/fortran/interface.cc
  df46b68ac2bc3086485916347795a6e2  gcc/fortran/intrinsic.cc
  7c5c308109e781e905a4606be634b46f  gcc/fortran/intrinsic.h
  3f7081a11cbca781ba26400c16f44044  gcc/fortran/intrinsic.texi
  d02a37f560d24e6c93ca58015c439402  gcc/fortran/invoke.texi
  0bab6e26e07b4784cc43cb3dc20010dc  gcc/fortran/io.cc
  93612186f78a67603a9b0339261c2469  gcc/fortran/ioparm.def
! ca4ba51d4b7054e091d60eddcb5f9680  gcc/fortran/iresolve.cc
  196ec628fe20afcf9090d2f773750a95  gcc/fortran/iso-c-binding.def
  fe42cd7b44c39f11d30fbe2708744a2d  gcc/fortran/iso-fortran-env.def
  f731d32ce05d070f1df4967c2ba8c9c2  gcc/fortran/lang-specs.h
  9842051e2822d8130f578344e561d394  gcc/fortran/lang.opt
  c90ca625190445c2f9e5014f2643e5f1  gcc/fortran/lang.opt.urls
  8f70b6af9bb7b493f688d2387ae11bd8  gcc/fortran/libgfortran.h
! ed7c9cd3a6d06ebdc33c533895c02089  gcc/fortran/match.cc
  61d211909807d100996092bd61b7148b  gcc/fortran/match.h
  5796e2abb1ed0b90aafbca3796a9e5b8  gcc/fortran/matchexp.cc
  610d97669425c033f4edb591e02b22d3  gcc/fortran/mathbuiltins.def
  982581c25caf363e8ff4933ece911983  gcc/fortran/misc.cc
  e85c32445c6de7c1d06b379a0d1f12ad  gcc/fortran/module.cc
! 1674956edca646431031ff17c7025863  gcc/fortran/openmp.cc
  ba11ab9ac11e6a78fa7706263e42f1fc  gcc/fortran/options.cc
! b39625edcc7118caa07695e1e5e22e50  gcc/fortran/parse.cc
  6afe26dd3f7a33ff8c524687d1958f05  gcc/fortran/parse.h
! b0f71d6c6b0789fdfbad3ae3d91d033a  gcc/fortran/primary.cc
! 91c5e1c5707705dd1142c4f8076d77f2  gcc/fortran/resolve.cc
! 9b448d9bb5190ad6da14b055dc7eeba0  gcc/fortran/scanner.cc
  1cfffbabece85f419a6ca2676917e619  gcc/fortran/scanner.h
  be0b83b5f771bbe50926a1109ebd9e09  gcc/fortran/simplify.cc
  a0bad1c11baa50813a82d72f738f0872  gcc/fortran/st.cc
! 00ba19297716e9491650d4ffa405d16d  gcc/fortran/symbol.cc
  74785cb703ffef31c77a2efb99685bb4  gcc/fortran/target-memory.cc
  d418319a23a87a1e1e8054eaeb5d527b  gcc/fortran/target-memory.h
! af90959864611199812e3a28a1909e92  gcc/fortran/trans-array.cc
  c0fda053eecaf4f55c32d4fe8c8db3e5  gcc/fortran/trans-array.h
  700878379c55cdec457b83a922d93699  gcc/fortran/trans-common.cc
  c420f80da3e0e794311a9b90c49abce5  gcc/fortran/trans-const.cc
  5644e20cd4aa0324875834a377cf89a4  gcc/fortran/trans-const.h
! c49d475a70d43717d33bdc077b48252b  gcc/fortran/trans-decl.cc
! 03c8f4d1ff7974d6b03cf1f047be7de4  gcc/fortran/trans-expr.cc
! 50146a04d803fafbc56c31ef04c375c3  gcc/fortran/trans-intrinsic.cc
! 9bfdb89867309e2ece2578749f55ece8  gcc/fortran/trans-io.cc
! cbc674d013227615460f385a31608c98  gcc/fortran/trans-openmp.cc
  0a23775591d7d3e4fdb603d7bd9febb1  gcc/fortran/trans-stmt.cc
  1b5e4247678ad0441b5b0f26de2ebd4f  gcc/fortran/trans-stmt.h
! e6081de6c57d50b44beba6f37c54a0fe  gcc/fortran/trans-types.cc
  99093042b01c6c4c1ee2c064808bdaa0  gcc/fortran/trans-types.h
! 95df6c59313fb15547f9a47f91c98273  gcc/fortran/trans.cc
! 511654c3bc23a242dc41010c4065dfae  gcc/fortran/trans.h
  a5dcb5f38620ab51c2408b1d0fade263  gcc/fortran/trigd_fe.inc
  14d5ef9c0a16145fc4d821f1a1eaecbb  gcc/fortran/types.def
  2c61c6deb62c5b2a8f5eb059ac90ed17  gcc/fp-test.cc
*************** a5dcb5f38620ab51c2408b1d0fade263  gcc/fo
*** 6018,6024 ****
  b21ae9e84969c22c844658e40c64cc2d  gcc/function-tests.cc
  53d7bf0daedf2047decf7f8253796bf5  gcc/function.cc
  2c579d1fa729263df07005d4f111c7c1  gcc/function.h
! 848d42ef9bcae535474b0754f93e4266  gcc/fwprop.cc
  4cf32700135520df98871f3d7552f316  gcc/gcc-ar.cc
  53e961fe521d8feb57a1b0245faf9e5b  gcc/gcc-main.cc
  1c6e5ddd7e0f700d52d0d9a865b7ad0f  gcc/gcc-plugin.h
--- 6020,6026 ----
  b21ae9e84969c22c844658e40c64cc2d  gcc/function-tests.cc
  53d7bf0daedf2047decf7f8253796bf5  gcc/function.cc
  2c579d1fa729263df07005d4f111c7c1  gcc/function.h
! f1ceef1bb1097329f87a008a69f0f147  gcc/fwprop.cc
  4cf32700135520df98871f3d7552f316  gcc/gcc-ar.cc
  53e961fe521d8feb57a1b0245faf9e5b  gcc/gcc-main.cc
  1c6e5ddd7e0f700d52d0d9a865b7ad0f  gcc/gcc-plugin.h
*************** bb7378727cbc8346ebdf8cd0176af412  gcc/ge
*** 6057,6068 ****
  9fbc939eb3de1b24e44fe11079188734  gcc/genconstants.cc
  943979b69fdc9944eca15baf362f98e4  gcc/genemit.cc
  f3a7764a7c793e3d3df9b9acec2f48d0  gcc/genenums.cc
! 2eeedeeeb51c596de137156b7537bbe9  gcc/generic-match-head.cc
  0c416ac0631bf27d14efb4448314ae77  gcc/generic-match.h
  1390ddecf16e4f6bd2726bedbabe9efc  gcc/genextract.cc
  b888eb75bc8713a70f6e9c5d97c71dc3  gcc/genflags.cc
  25d950e53b1556c41c6e8bc0104c131e  gcc/gengenrtl.cc
! b8718e6bf2fed9f5cbc2c3d49eec60d2  gcc/gengtype-lex.cc
  7fa5283075bec5085d8defb3fb49a887  gcc/gengtype-lex.l
  c05467763def60f5f6de8496dc73733d  gcc/gengtype-parse.cc
  f5c84ac923e5a487eff1fc34c4e2a98f  gcc/gengtype-state.cc
--- 6059,6070 ----
  9fbc939eb3de1b24e44fe11079188734  gcc/genconstants.cc
  943979b69fdc9944eca15baf362f98e4  gcc/genemit.cc
  f3a7764a7c793e3d3df9b9acec2f48d0  gcc/genenums.cc
! aa611ee3448c2c81eff3cb419ebff5d5  gcc/generic-match-head.cc
  0c416ac0631bf27d14efb4448314ae77  gcc/generic-match.h
  1390ddecf16e4f6bd2726bedbabe9efc  gcc/genextract.cc
  b888eb75bc8713a70f6e9c5d97c71dc3  gcc/genflags.cc
  25d950e53b1556c41c6e8bc0104c131e  gcc/gengenrtl.cc
! 081f7b177c134ea0ab4d239b85728cbd  gcc/gengtype-lex.cc
  7fa5283075bec5085d8defb3fb49a887  gcc/gengtype-lex.l
  c05467763def60f5f6de8496dc73733d  gcc/gengtype-parse.cc
  f5c84ac923e5a487eff1fc34c4e2a98f  gcc/gengtype-state.cc
*************** c234572876f75890cc99027aed682b90  gcc/gi
*** 6095,6106 ****
  422023fc20fa277895b77d52f2183524  gcc/gimple-builder.h
  1ece622a98fd5bd127baa4493d2fb983  gcc/gimple-expr.cc
  0f70f2b47fe0c3ba8e84cdc0d8635964  gcc/gimple-expr.h
! a94566c6e62ecc281fa71bc2e2a44d07  gcc/gimple-fold.cc
  0d56f593f441abaac17b0e32d153edde  gcc/gimple-fold.h
  2c9bf44778a0d4078822e0867f454d35  gcc/gimple-harden-conditionals.cc
  c7112787b043c022d8874ce63d5b7a10  gcc/gimple-harden-control-flow.cc
  7b9c652a539854b936cc26f338cbb75d  gcc/gimple-if-to-switch.cc
! 43f8b8bf6a49590155c84b07b89f0c6f  gcc/gimple-isel.cc
  a81f7f0172ce4eb3ca285e0cc9ddbd68  gcc/gimple-iterator.cc
  1a7fa33c9fca25ddfbd2d1424ee5a53a  gcc/gimple-iterator.h
  15643e1e01d585f6452ec246a61a2053  gcc/gimple-laddress.cc
--- 6097,6108 ----
  422023fc20fa277895b77d52f2183524  gcc/gimple-builder.h
  1ece622a98fd5bd127baa4493d2fb983  gcc/gimple-expr.cc
  0f70f2b47fe0c3ba8e84cdc0d8635964  gcc/gimple-expr.h
! e11d0a72564cc6ee2349354a27e269ac  gcc/gimple-fold.cc
  0d56f593f441abaac17b0e32d153edde  gcc/gimple-fold.h
  2c9bf44778a0d4078822e0867f454d35  gcc/gimple-harden-conditionals.cc
  c7112787b043c022d8874ce63d5b7a10  gcc/gimple-harden-control-flow.cc
  7b9c652a539854b936cc26f338cbb75d  gcc/gimple-if-to-switch.cc
! 224b3669ba4bbfa6c9493f47603df324  gcc/gimple-isel.cc
  a81f7f0172ce4eb3ca285e0cc9ddbd68  gcc/gimple-iterator.cc
  1a7fa33c9fca25ddfbd2d1424ee5a53a  gcc/gimple-iterator.h
  15643e1e01d585f6452ec246a61a2053  gcc/gimple-laddress.cc
*************** f3cd4a37afdd5c50fd88f8bea73656f2  gcc/gi
*** 6109,6118 ****
  9061d044f3fa87c56e4207cfed15dbd4  gcc/gimple-loop-versioning.cc
  5aa7e08e0bae2dfcbc188dcbbf48e035  gcc/gimple-low.cc
  1011dfdbac8762024379fe999e10572d  gcc/gimple-low.h
! 557c7c8d1074bd0ac26035b6742d2578  gcc/gimple-lower-bitint.cc
  0da9234d337390e5ca66679b3e055deb  gcc/gimple-lower-bitint.h
  77bf05ef21f77c3ea4b0b145cd57240b  gcc/gimple-match-exports.cc
! 52905dc6829d45f26f8fbd85e434b469  gcc/gimple-match-head.cc
  31611e4e0bafcf373d9ef16549d2068d  gcc/gimple-match.h
  a2774d6e6bb2338986570646e859eda0  gcc/gimple-predicate-analysis.cc
  8f1e804189ae411c585fe95b40c35b4c  gcc/gimple-predicate-analysis.h
--- 6111,6120 ----
  9061d044f3fa87c56e4207cfed15dbd4  gcc/gimple-loop-versioning.cc
  5aa7e08e0bae2dfcbc188dcbbf48e035  gcc/gimple-low.cc
  1011dfdbac8762024379fe999e10572d  gcc/gimple-low.h
! 16c200797cbd92b1d34d61defafd4855  gcc/gimple-lower-bitint.cc
  0da9234d337390e5ca66679b3e055deb  gcc/gimple-lower-bitint.h
  77bf05ef21f77c3ea4b0b145cd57240b  gcc/gimple-match-exports.cc
! 9abca7865ad0fa60c0d19e6acebba08e  gcc/gimple-match-head.cc
  31611e4e0bafcf373d9ef16549d2068d  gcc/gimple-match.h
  a2774d6e6bb2338986570646e859eda0  gcc/gimple-predicate-analysis.cc
  8f1e804189ae411c585fe95b40c35b4c  gcc/gimple-predicate-analysis.h
*************** fe2179d73ec08d75380b77cd96ef730f  gcc/gi
*** 6123,6135 ****
  14d0498976dc3cac161a8fd059e73540  gcc/gimple-range-cache.h
  c30ab99edc39750d88872cd2cf4bda14  gcc/gimple-range-edge.cc
  b8854cd80bb187319a41cc07e71d2cd4  gcc/gimple-range-edge.h
! 9ebde70f49d9ee959748f601372d3421  gcc/gimple-range-fold.cc
  b4fac90ec25f720d30ee5890677475fd  gcc/gimple-range-fold.h
! 85e4bf91e0170553e3dea12ba3c47fb6  gcc/gimple-range-gori.cc
! 49512dcbe7855a1ca5ed1aa17a3af656  gcc/gimple-range-gori.h
  f94d5d9d416368499396b5af95c640a1  gcc/gimple-range-infer.cc
  59a4e75211652f0f0985dde451461c62  gcc/gimple-range-infer.h
! 1bdc02d72c591ed0e1c733aea008bf3d  gcc/gimple-range-op.cc
  bf7905528673c9d4ef520313c8ac3341  gcc/gimple-range-op.h
  87b78f5fbf377f08c8f3c4c1090d85d3  gcc/gimple-range-path.cc
  8bae8ef4fc63b92a166177f469f16f2f  gcc/gimple-range-path.h
--- 6125,6137 ----
  14d0498976dc3cac161a8fd059e73540  gcc/gimple-range-cache.h
  c30ab99edc39750d88872cd2cf4bda14  gcc/gimple-range-edge.cc
  b8854cd80bb187319a41cc07e71d2cd4  gcc/gimple-range-edge.h
! b869312ce401a54989cd5d2aaf297506  gcc/gimple-range-fold.cc
  b4fac90ec25f720d30ee5890677475fd  gcc/gimple-range-fold.h
! 68a5b050418b8f44c335239368452be8  gcc/gimple-range-gori.cc
! 9b1df29c360a25800cf1f12713f12357  gcc/gimple-range-gori.h
  f94d5d9d416368499396b5af95c640a1  gcc/gimple-range-infer.cc
  59a4e75211652f0f0985dde451461c62  gcc/gimple-range-infer.h
! 8042fe5416c23267943fc16fbc2cf7ec  gcc/gimple-range-op.cc
  bf7905528673c9d4ef520313c8ac3341  gcc/gimple-range-op.h
  87b78f5fbf377f08c8f3c4c1090d85d3  gcc/gimple-range-path.cc
  8bae8ef4fc63b92a166177f469f16f2f  gcc/gimple-range-path.h
*************** a8b5cd5c218902eae6bbccc1d0be5b80  gcc/gi
*** 6141,6152 ****
  081816f563209fc8aebe9184dd513969  gcc/gimple-range.cc
  edd45cc78795113879b5ce152a700abc  gcc/gimple-range.h
  193026f77efda4460f36b4a315d31678  gcc/gimple-ssa-backprop.cc
! a0fa65b26e495830df197a8490a2fb49  gcc/gimple-ssa-isolate-paths.cc
  2fc6c230ffcb053416f70f12a4b75355  gcc/gimple-ssa-nonnull-compare.cc
  b23005df27991a89a55c9670c9293f53  gcc/gimple-ssa-sccopy.cc
  40a9709570d315119e4151e29a6e5235  gcc/gimple-ssa-split-paths.cc
  eed653cc89b2d50ae8546390d2926e4c  gcc/gimple-ssa-sprintf.cc
! 599f3cc82024b9955e1ee9c02cdb0822  gcc/gimple-ssa-store-merging.cc
  3c3902ae746a3d7ccb9ae378b53f1c8a  gcc/gimple-ssa-strength-reduction.cc
  b1a13207e2b21166386884cd2c732512  gcc/gimple-ssa-warn-access.cc
  972380becf9146f7df932ff8948f87c1  gcc/gimple-ssa-warn-access.h
--- 6143,6154 ----
  081816f563209fc8aebe9184dd513969  gcc/gimple-range.cc
  edd45cc78795113879b5ce152a700abc  gcc/gimple-range.h
  193026f77efda4460f36b4a315d31678  gcc/gimple-ssa-backprop.cc
! 6f62aaac1fe859981f6558377be01513  gcc/gimple-ssa-isolate-paths.cc
  2fc6c230ffcb053416f70f12a4b75355  gcc/gimple-ssa-nonnull-compare.cc
  b23005df27991a89a55c9670c9293f53  gcc/gimple-ssa-sccopy.cc
  40a9709570d315119e4151e29a6e5235  gcc/gimple-ssa-split-paths.cc
  eed653cc89b2d50ae8546390d2926e4c  gcc/gimple-ssa-sprintf.cc
! ecaaf97bc27ae0cf8f6d9015fd66e774  gcc/gimple-ssa-store-merging.cc
  3c3902ae746a3d7ccb9ae378b53f1c8a  gcc/gimple-ssa-strength-reduction.cc
  b1a13207e2b21166386884cd2c732512  gcc/gimple-ssa-warn-access.cc
  972380becf9146f7df932ff8948f87c1  gcc/gimple-ssa-warn-access.h
*************** b13ef89fa355900b2c561e2d521a5b36  gcc/gi
*** 6162,6171 ****
  6e42f92c5b3058251524074700ae9ef5  gcc/gimple-warn-recursion.cc
  c4e1e930218f4dce5ef2a3a3a6b23b3b  gcc/gimple.cc
  c4df74d81805c4bd5129d36bb2a68562  gcc/gimple.def
! 111dff63f363b5601fa6ea70225f869c  gcc/gimple.h
! 38023efd45885e11111aa624febf5783  gcc/gimplify-me.cc
  85e953ee7730a9690d8c9449d974b5c9  gcc/gimplify-me.h
! b095d84eaceeaa85a2eb95e90a0bd6f2  gcc/gimplify.cc
  8f261c08379d1ad7b5ca607ff26ae1fb  gcc/gimplify.h
  82fc433faa62fad9f37c79e38dc2bf1c  gcc/ginclude/float.h
  f792d34f340e2e7a7655cf10325a519d  gcc/ginclude/iso646.h
--- 6164,6173 ----
  6e42f92c5b3058251524074700ae9ef5  gcc/gimple-warn-recursion.cc
  c4e1e930218f4dce5ef2a3a3a6b23b3b  gcc/gimple.cc
  c4df74d81805c4bd5129d36bb2a68562  gcc/gimple.def
! a258d10df4637ff8630240180753d325  gcc/gimple.h
! b3e54b7b3aedffdb3afbd50b4f98e51b  gcc/gimplify-me.cc
  85e953ee7730a9690d8c9449d974b5c9  gcc/gimplify-me.h
! 3b5b3871fb0ce233eecb0abc50fdeb52  gcc/gimplify.cc
  8f261c08379d1ad7b5ca607ff26ae1fb  gcc/gimplify.h
  82fc433faa62fad9f37c79e38dc2bf1c  gcc/ginclude/float.h
  f792d34f340e2e7a7655cf10325a519d  gcc/ginclude/iso646.h
*************** f29bc8223d79e79c24df8633419aedc0  gcc/gi
*** 6182,6188 ****
  a1de12677e091d55cc4f2cd872cdf135  gcc/ginclude/tgmath.h
  d58161aa8eee5f48836d1bd9f6c6c161  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
! 3909afbb81b3a1e02d67d89aaf6c0c11  gcc/glimits.h
  4bb9e13eca18a1cde2e2e421f6e2e1f3  gcc/go/ChangeLog
  1c0876aed1113bbf60fd04709c1af5de  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
--- 6184,6190 ----
  a1de12677e091d55cc4f2cd872cdf135  gcc/ginclude/tgmath.h
  d58161aa8eee5f48836d1bd9f6c6c161  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
! 1048ef98717b6bd1305e55832ab661e7  gcc/glimits.h
  4bb9e13eca18a1cde2e2e421f6e2e1f3  gcc/go/ChangeLog
  1c0876aed1113bbf60fd04709c1af5de  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
*************** b55e1edcda305f1f415ac47b8b849f10  gcc/hw
*** 6287,6300 ****
  954d5781f30be200430a90abd354007b  gcc/hw-doloop.h
  54a3072f556cc43c511f0b254db57f06  gcc/hwint.cc
  b57b0cb8f2b88b817d10da3c96096205  gcc/hwint.h
! 135f1f518d1db915efff619873d97e0e  gcc/ifcvt.cc
  63147290b491f66fe0c4c2a417c32997  gcc/ifcvt.h
  5c457f2c6fae9c201fd0f2a86f1f0307  gcc/inchash.cc
  3722e0f8d58fa8c01a90bf5e51d09c1f  gcc/inchash.h
  a073c4a690942522ba0debda8658e726  gcc/incpath.cc
  d4814465ac14d7688e5370986421b03f  gcc/incpath.h
  92f6f0b7ead32feeec7df55cdff81096  gcc/init-regs.cc
! f796fb99601d560c4a882b6ecfb1409c  gcc/input.cc
  944a1d89c513fe3558253d1654d501e0  gcc/input.h
  740305a2a1342aa8a719f477b11106b3  gcc/insn-addr.h
  fcd61155f90da565ae9b576ee28ece0d  gcc/insn-notes.def
--- 6289,6302 ----
  954d5781f30be200430a90abd354007b  gcc/hw-doloop.h
  54a3072f556cc43c511f0b254db57f06  gcc/hwint.cc
  b57b0cb8f2b88b817d10da3c96096205  gcc/hwint.h
! 9db73ad2ddacbd55cda5f175f5dfb70c  gcc/ifcvt.cc
  63147290b491f66fe0c4c2a417c32997  gcc/ifcvt.h
  5c457f2c6fae9c201fd0f2a86f1f0307  gcc/inchash.cc
  3722e0f8d58fa8c01a90bf5e51d09c1f  gcc/inchash.h
  a073c4a690942522ba0debda8658e726  gcc/incpath.cc
  d4814465ac14d7688e5370986421b03f  gcc/incpath.h
  92f6f0b7ead32feeec7df55cdff81096  gcc/init-regs.cc
! 0bd4f9a83f8d7d12923f1e971670fc43  gcc/input.cc
  944a1d89c513fe3558253d1654d501e0  gcc/input.h
  740305a2a1342aa8a719f477b11106b3  gcc/insn-addr.h
  fcd61155f90da565ae9b576ee28ece0d  gcc/insn-notes.def
*************** fcd61155f90da565ae9b576ee28ece0d  gcc/in
*** 6305,6311 ****
  5e2086cfd6bea225be01b38fb20580c1  gcc/intl.cc
  228428e1fe66a4b0575040e005f4176b  gcc/intl.h
  6fd24145bd08ca12fe502d97a9f5a8e9  gcc/ipa-comdats.cc
! f479085872ad2e2e6091ac7376784cc9  gcc/ipa-cp.cc
  4dcb4dc14308e9d673b88c990eda3bd6  gcc/ipa-cp.h
  ddaf3689bf5ee9cd7a26ab4ad95f31f4  gcc/ipa-devirt.cc
  8210f1d996629cd5789d47de6f419385  gcc/ipa-fnsummary.cc
--- 6307,6313 ----
  5e2086cfd6bea225be01b38fb20580c1  gcc/intl.cc
  228428e1fe66a4b0575040e005f4176b  gcc/intl.h
  6fd24145bd08ca12fe502d97a9f5a8e9  gcc/ipa-comdats.cc
! 46e2b9e113b99fc720b6515e5162585a  gcc/ipa-cp.cc
  4dcb4dc14308e9d673b88c990eda3bd6  gcc/ipa-cp.h
  ddaf3689bf5ee9cd7a26ab4ad95f31f4  gcc/ipa-devirt.cc
  8210f1d996629cd5789d47de6f419385  gcc/ipa-fnsummary.cc
*************** f261bcac4b8cf37d6506afca3539d2ef  gcc/ip
*** 6319,6329 ****
  440986ed37d72e7c0b83b6ff158daea8  gcc/ipa-inline-transform.cc
  7e839777a9da3c11f968fdfc9d25e2f3  gcc/ipa-inline.cc
  e40310b8dee85f5c92031ddd41ba5409  gcc/ipa-inline.h
! 24222cc83624e3969f2fdf1d33d42339  gcc/ipa-modref-tree.cc
  903cac1b9a72c89d66ebdaace79c5bbf  gcc/ipa-modref-tree.h
! 6ce7058e415254e6835b7dd869835f96  gcc/ipa-modref.cc
  b04d793fd14925e2ee9fadff3fdb4778  gcc/ipa-modref.h
! 4c04dbefd668da9c0f1cd206fbd6e755  gcc/ipa-param-manipulation.cc
  c0af2050309ae9c2d64886ab2cc82f36  gcc/ipa-param-manipulation.h
  88cd4aec0f60db7b8e89075516093659  gcc/ipa-polymorphic-call.cc
  dffeb86886059ee4946f5ae58ddc8795  gcc/ipa-predicate.cc
--- 6321,6331 ----
  440986ed37d72e7c0b83b6ff158daea8  gcc/ipa-inline-transform.cc
  7e839777a9da3c11f968fdfc9d25e2f3  gcc/ipa-inline.cc
  e40310b8dee85f5c92031ddd41ba5409  gcc/ipa-inline.h
! 2850ab5bd1eea7c87c76164d1170dd17  gcc/ipa-modref-tree.cc
  903cac1b9a72c89d66ebdaace79c5bbf  gcc/ipa-modref-tree.h
! 368637ab8d1b7d99fea4dc5822d81a68  gcc/ipa-modref.cc
  b04d793fd14925e2ee9fadff3fdb4778  gcc/ipa-modref.h
! bc942c47d9bd8283a526591ef70b4d82  gcc/ipa-param-manipulation.cc
  c0af2050309ae9c2d64886ab2cc82f36  gcc/ipa-param-manipulation.h
  88cd4aec0f60db7b8e89075516093659  gcc/ipa-polymorphic-call.cc
  dffeb86886059ee4946f5ae58ddc8795  gcc/ipa-predicate.cc
*************** ac94760a96824c2abcdafd7b64cc5dbe  gcc/ip
*** 6345,6351 ****
  67b754989a50c766c45ec3c85deab961  gcc/ipa-visibility.cc
  031cc0b31d16c0f3d23bd6397d93f926  gcc/ipa.cc
  d2e531da51c3e38dbe8f74af7cbe6b3e  gcc/ira-build.cc
! 9eda69537fecc0407ce4251faa62c6c7  gcc/ira-color.cc
  18222a9a1caeaa037275da01ec6ee43e  gcc/ira-conflicts.cc
  f54fe1284d8900294436e60d3fd31625  gcc/ira-costs.cc
  5aac65f304aaaf08d39922717bc7e6fc  gcc/ira-emit.cc
--- 6347,6353 ----
  67b754989a50c766c45ec3c85deab961  gcc/ipa-visibility.cc
  031cc0b31d16c0f3d23bd6397d93f926  gcc/ipa.cc
  d2e531da51c3e38dbe8f74af7cbe6b3e  gcc/ira-build.cc
! d4b23d18d678953a609d01aaaae8b6ef  gcc/ira-color.cc
  18222a9a1caeaa037275da01ec6ee43e  gcc/ira-conflicts.cc
  f54fe1284d8900294436e60d3fd31625  gcc/ira-costs.cc
  5aac65f304aaaf08d39922717bc7e6fc  gcc/ira-emit.cc
*************** a22c6a2b44962887016aec34f8a38d4a  gcc/lo
*** 6467,6477 ****
  14dd7339d4d9c29f7462a093e4881147  gcc/lower-subreg.h
  de69ffd666d467def1646c24270ea2c9  gcc/lra-assigns.cc
  a62046a3f62b3ccf836000569a375ade  gcc/lra-coalesce.cc
! 77101f6567a97dcf6cb64484f5c2e8c2  gcc/lra-constraints.cc
  70a8abdd45bcea7a12630d9341f827e4  gcc/lra-eliminations.cc
  5534388e8801fd9d3f82413c23fdc5f4  gcc/lra-int.h
  642aa6eb2e4f0f3bddc8b0c181835618  gcc/lra-lives.cc
! eb3641a7ce74f604269685133e3394fe  gcc/lra-remat.cc
  f82e226fe4d03cd57487f05c70be1ebd  gcc/lra-spills.cc
  1548c4418fa356fa5b47b356107dbcbf  gcc/lra.cc
  fa24e9dabcdec01373321b3a591203db  gcc/lra.h
--- 6469,6479 ----
  14dd7339d4d9c29f7462a093e4881147  gcc/lower-subreg.h
  de69ffd666d467def1646c24270ea2c9  gcc/lra-assigns.cc
  a62046a3f62b3ccf836000569a375ade  gcc/lra-coalesce.cc
! e8d0df13d424467daa46e40c39a8362f  gcc/lra-constraints.cc
  70a8abdd45bcea7a12630d9341f827e4  gcc/lra-eliminations.cc
  5534388e8801fd9d3f82413c23fdc5f4  gcc/lra-int.h
  642aa6eb2e4f0f3bddc8b0c181835618  gcc/lra-lives.cc
! 1ccd56402dc4bcc562ca99b1265060ad  gcc/lra-remat.cc
  f82e226fe4d03cd57487f05c70be1ebd  gcc/lra-spills.cc
  1548c4418fa356fa5b47b356107dbcbf  gcc/lra.cc
  fa24e9dabcdec01373321b3a591203db  gcc/lra.h
*************** a07c89837c969ab21785ed67be67ad49  gcc/lt
*** 6486,6493 ****
  f41f3240af59c920785f7ad7373f06c9  gcc/lto-streamer-out.cc
  2916ac789715a6c1398f1322b6b937db  gcc/lto-streamer.cc
  5c0abe5215dcb405391bf4047b52d8c5  gcc/lto-streamer.h
! 3c7b65559567afcec05f5a93a399e84f  gcc/lto-wrapper.cc
! b81151efdc86c94471d85d68fe1b7ba8  gcc/lto/ChangeLog
  b32abe0dfb9c9271f0bda635d92fa0d1  gcc/lto/Make-lang.in
  9f59490a66de9aa5822b069eef35b0ec  gcc/lto/common.cc
  770a74217f81f6124a1081aad362ee00  gcc/lto/common.h
--- 6488,6495 ----
  f41f3240af59c920785f7ad7373f06c9  gcc/lto-streamer-out.cc
  2916ac789715a6c1398f1322b6b937db  gcc/lto-streamer.cc
  5c0abe5215dcb405391bf4047b52d8c5  gcc/lto-streamer.h
! dfc5bd8804cb8c3a60dee7d8eeafccdb  gcc/lto-wrapper.cc
! a64177242f1370ca74f17250253ad926  gcc/lto/ChangeLog
  b32abe0dfb9c9271f0bda635d92fa0d1  gcc/lto/Make-lang.in
  9f59490a66de9aa5822b069eef35b0ec  gcc/lto/common.cc
  770a74217f81f6124a1081aad362ee00  gcc/lto/common.h
*************** ae0dba9d0013e4c8cedcdd03afa46f86  gcc/lt
*** 6495,6512 ****
  ca7eb1cb6f46e46d89b0bd2d24fa7224  gcc/lto/lang-specs.h
  3d17fd327034a3b2340ce163e802bbfc  gcc/lto/lang.opt
  e09c982f34fcc53d88fb9b974a77d569  gcc/lto/lang.opt.urls
! a24f36ddd07ecc2f8d99fe518f7f69c7  gcc/lto/lto-common.cc
  cae920ee0ecb9f75f85298db508074be  gcc/lto/lto-common.h
  2ff531281d36cf4cb5ebf9d9bfa44d83  gcc/lto/lto-dump.cc
  9371b719ce0fc231f11fc9f406670e0d  gcc/lto/lto-lang.cc
! 7e0d46f2934717756ee9c73aeb0e9c32  gcc/lto/lto-object.cc
  139ffa7af7bcb2725f13712054826d61  gcc/lto/lto-partition.cc
  bc2082d166bc49e5fde949d6a3b20250  gcc/lto/lto-partition.h
! fc34da8b400831ec19b6560f82197128  gcc/lto/lto-symtab.cc
  1027da9d97d59eb02c9380864aa7f88f  gcc/lto/lto-symtab.h
  b6f8f59d247cdb7bbe7ca9c4e3d5aed5  gcc/lto/lto-tree.h
  45c9f57e8b2385b28db0bf87f25f8ffb  gcc/lto/lto.cc
! b87a73403ed413be57acb8b88a00edbf  gcc/lto/lto.h
  a12e66ceee57af9bf581b69a6bc80391  gcc/m2/COPYING.FDL
  ddf5e06ee9ecc65f914a821be9c5d30a  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
--- 6497,6514 ----
  ca7eb1cb6f46e46d89b0bd2d24fa7224  gcc/lto/lang-specs.h
  3d17fd327034a3b2340ce163e802bbfc  gcc/lto/lang.opt
  e09c982f34fcc53d88fb9b974a77d569  gcc/lto/lang.opt.urls
! 8bafa1eea5f8bac7b3b5ad9fd5437a74  gcc/lto/lto-common.cc
  cae920ee0ecb9f75f85298db508074be  gcc/lto/lto-common.h
  2ff531281d36cf4cb5ebf9d9bfa44d83  gcc/lto/lto-dump.cc
  9371b719ce0fc231f11fc9f406670e0d  gcc/lto/lto-lang.cc
! dbee5317908b4a76bfee54df4fd004cb  gcc/lto/lto-object.cc
  139ffa7af7bcb2725f13712054826d61  gcc/lto/lto-partition.cc
  bc2082d166bc49e5fde949d6a3b20250  gcc/lto/lto-partition.h
! e960b3f8dbc3c251cb57cc602757f297  gcc/lto/lto-symtab.cc
  1027da9d97d59eb02c9380864aa7f88f  gcc/lto/lto-symtab.h
  b6f8f59d247cdb7bbe7ca9c4e3d5aed5  gcc/lto/lto-tree.h
  45c9f57e8b2385b28db0bf87f25f8ffb  gcc/lto/lto.cc
! bb855e29ca2e48b2775ddf10578600ab  gcc/lto/lto.h
  a12e66ceee57af9bf581b69a6bc80391  gcc/m2/COPYING.FDL
  ddf5e06ee9ecc65f914a821be9c5d30a  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
*************** ae6ba434f4ad2448c0f14d06f020a8e8  gcc/m2
*** 7451,7461 ****
  159038cfb96e584e4f21d13d650923f9  gcc/m2/tools-src/mklink.c
  d6aac0f23493e0ce7e6705ac01477a07  gcc/m2/tools-src/tidydates.py
  f9608e9005487c369e6c38949ab36fa1  gcc/m2/version.c
! ff057624034b9a3f61aa8a7949da456e  gcc/machmode.def
  d24a84209a835c9cd933ec6c0cd756a2  gcc/machmode.h
  db4aa18553273d5e513c430bdea3d79a  gcc/main.cc
  a209940893eb5d9d9edc9f1e0fa3a88d  gcc/make-unique.h
! 8c166fbb159e51c0e3599f7f29b05b4b  gcc/match.pd
  3eb7fce4670eed35821ef049a1488347  gcc/mcf.cc
  258cf9819c6a00e19b88c5a07c9b8991  gcc/mem-stats-traits.h
  b9810957b2a5920aa47c04774895c26b  gcc/mem-stats.h
--- 7453,7463 ----
  159038cfb96e584e4f21d13d650923f9  gcc/m2/tools-src/mklink.c
  d6aac0f23493e0ce7e6705ac01477a07  gcc/m2/tools-src/tidydates.py
  f9608e9005487c369e6c38949ab36fa1  gcc/m2/version.c
! 5a710e63ee8c394af38ccb8f7b3a65f9  gcc/machmode.def
  d24a84209a835c9cd933ec6c0cd756a2  gcc/machmode.h
  db4aa18553273d5e513c430bdea3d79a  gcc/main.cc
  a209940893eb5d9d9edc9f1e0fa3a88d  gcc/make-unique.h
! 0223cc049db597de397e6b0b756b7c37  gcc/match.pd
  3eb7fce4670eed35821ef049a1488347  gcc/mcf.cc
  258cf9819c6a00e19b88c5a07c9b8991  gcc/mem-stats-traits.h
  b9810957b2a5920aa47c04774895c26b  gcc/mem-stats.h
*************** e6f56cf368ed56c2711af5ea822a328a  gcc/ob
*** 7497,7507 ****
  68792ecd109c4276bac03d7aa1445ac9  gcc/obstack-utils.h
  0224aa3be73c07c277f42313228c9cfe  gcc/omp-api.h
  555473cca6d8dacbe73507cd56b703d4  gcc/omp-builtins.def
! 4505a221f9795254bb65e23ae54d7d38  gcc/omp-expand.cc
  09db560da111d9a47704f24d99d44b8f  gcc/omp-expand.h
  6dc86983ab780e52417a5b288e2116d2  gcc/omp-general.cc
  c1ddb0c6305e45221acab4445de3ef3b  gcc/omp-general.h
! 0c08b1d0f299580f571d556e2aee1967  gcc/omp-low.cc
  e3224969a5ed6b10763e81875242df90  gcc/omp-low.h
  c253e58a61787441cc6f3b8bd2362916  gcc/omp-oacc-kernels-decompose.cc
  76a4931edcf0949a84b213b9f3bebcdc  gcc/omp-oacc-neuter-broadcast.cc
--- 7499,7509 ----
  68792ecd109c4276bac03d7aa1445ac9  gcc/obstack-utils.h
  0224aa3be73c07c277f42313228c9cfe  gcc/omp-api.h
  555473cca6d8dacbe73507cd56b703d4  gcc/omp-builtins.def
! f1dc1dbecb27a496195a2d874727eb0a  gcc/omp-expand.cc
  09db560da111d9a47704f24d99d44b8f  gcc/omp-expand.h
  6dc86983ab780e52417a5b288e2116d2  gcc/omp-general.cc
  c1ddb0c6305e45221acab4445de3ef3b  gcc/omp-general.h
! 483e143117c28500edbd12fcde0bc90a  gcc/omp-low.cc
  e3224969a5ed6b10763e81875242df90  gcc/omp-low.h
  c253e58a61787441cc6f3b8bd2362916  gcc/omp-oacc-kernels-decompose.cc
  76a4931edcf0949a84b213b9f3bebcdc  gcc/omp-oacc-neuter-broadcast.cc
*************** f90689370e66cea8434860b5a2b4ce6d  gcc/op
*** 7524,7530 ****
  45ddcc72ac7b1afaa7af97d8bc82c631  gcc/optabs-query.h
  2621e9c7af560a2b8e74cf60d4b9ad19  gcc/optabs-tree.cc
  13ecee26d0eed80122b7cdd5558365c0  gcc/optabs-tree.h
! 3c56647b5693fde7662ff144289710ca  gcc/optabs.cc
  1524c898bb70671cfa4ccd9cda136f8b  gcc/optabs.def
  043f510a745f66b5001f887999834c82  gcc/optabs.h
  460fed94230230ee1afb607142c60ed7  gcc/optc-gen.awk
--- 7526,7532 ----
  45ddcc72ac7b1afaa7af97d8bc82c631  gcc/optabs-query.h
  2621e9c7af560a2b8e74cf60d4b9ad19  gcc/optabs-tree.cc
  13ecee26d0eed80122b7cdd5558365c0  gcc/optabs-tree.h
! b889cc728a93ee38fbea04c6cc22d460  gcc/optabs.cc
  1524c898bb70671cfa4ccd9cda136f8b  gcc/optabs.def
  043f510a745f66b5001f887999834c82  gcc/optabs.h
  460fed94230230ee1afb607142c60ed7  gcc/optc-gen.awk
*************** b9b4ad58a0ba0883f7987a0730ba2958  gcc/pl
*** 7554,7566 ****
  ff1730806732d68f86a6d695005d5d90  gcc/plugin.h
  12d32b585fcd4cc80752399926e0770f  gcc/po/ChangeLog
  7bee4123f0d4890b31ea8560606b4030  gcc/po/EXCLUDES
! e4e35545a1fab9b9decbe9b06b468f72  gcc/po/be.gmo
  f92815dce67d0af13fac305d7dc80572  gcc/po/be.po
  6103dd2da516f605b1702dea8a4f3732  gcc/po/da.gmo
  ae5697bba04c418c4948e3cdc9a21798  gcc/po/da.po
  3e1cfa9990d7b8c81689e38f869574f5  gcc/po/de.gmo
  df01493ae2fc0fab8d6a879f2b0c9342  gcc/po/de.po
! 189b9d1af87594807b0d0e10036a64c3  gcc/po/el.gmo
  5a042d7b6c6bfcf177760da99f6a5d49  gcc/po/el.po
  aa627d9ebcf746f0f847122b3000960e  gcc/po/es.gmo
  61963b53ea88e22d870ae8c509c17b5c  gcc/po/es.po
--- 7556,7568 ----
  ff1730806732d68f86a6d695005d5d90  gcc/plugin.h
  12d32b585fcd4cc80752399926e0770f  gcc/po/ChangeLog
  7bee4123f0d4890b31ea8560606b4030  gcc/po/EXCLUDES
! e832b89b6dbf9df838167843217e810d  gcc/po/be.gmo
  f92815dce67d0af13fac305d7dc80572  gcc/po/be.po
  6103dd2da516f605b1702dea8a4f3732  gcc/po/da.gmo
  ae5697bba04c418c4948e3cdc9a21798  gcc/po/da.po
  3e1cfa9990d7b8c81689e38f869574f5  gcc/po/de.gmo
  df01493ae2fc0fab8d6a879f2b0c9342  gcc/po/de.po
! 17988b99399797e62f94326e0f42bdc1  gcc/po/el.gmo
  5a042d7b6c6bfcf177760da99f6a5d49  gcc/po/el.po
  aa627d9ebcf746f0f847122b3000960e  gcc/po/es.gmo
  61963b53ea88e22d870ae8c509c17b5c  gcc/po/es.po
*************** b7e676ff8ab5333b61d644fa94464288  gcc/po
*** 7572,7578 ****
  ff96200c7524901b13e7f583b756bbd0  gcc/po/gcc.pot
  46e3cf66408aa29968f47e38d2f63158  gcc/po/hr.gmo
  065ccaf73223817ae898a3b9071c5459  gcc/po/hr.po
! 4fcc507acb1732dfcdfd27f5c6bdb5a9  gcc/po/id.gmo
  e3c064c8b75dc62088b91ff6b0adf693  gcc/po/id.po
  c293745c802e3ecf31bf9a0b7c20cc54  gcc/po/ja.gmo
  ede3f4e0e2b7f71da316a9735ce0cd5c  gcc/po/ja.po
--- 7574,7580 ----
  ff96200c7524901b13e7f583b756bbd0  gcc/po/gcc.pot
  46e3cf66408aa29968f47e38d2f63158  gcc/po/hr.gmo
  065ccaf73223817ae898a3b9071c5459  gcc/po/hr.po
! 70b4810420fd0de7866ced79f56e6993  gcc/po/id.gmo
  e3c064c8b75dc62088b91ff6b0adf693  gcc/po/id.po
  c293745c802e3ecf31bf9a0b7c20cc54  gcc/po/ja.gmo
  ede3f4e0e2b7f71da316a9735ce0cd5c  gcc/po/ja.po
*************** b235ba2d5b3a4ee20381cbf6a16207b7  gcc/po
*** 7596,7602 ****
  c074a129eaadc9ece59a9a06b14a6af0  gcc/po/zh_CN.po
  6af1eb1cf8849686544835d0594082d2  gcc/po/zh_TW.gmo
  6628233796501388db647c3b9ddcea11  gcc/po/zh_TW.po
! d52ad4191e392663454b6b3f44104c23  gcc/pointer-query.cc
  42e14dd49b1893b63eedc00d3fc29b3a  gcc/pointer-query.h
  1541cce778a3856ff5eb841d6d47ed26  gcc/poly-int-types.h
  e64a8ab864db636576c62983a00f800a  gcc/poly-int.h
--- 7598,7604 ----
  c074a129eaadc9ece59a9a06b14a6af0  gcc/po/zh_CN.po
  6af1eb1cf8849686544835d0594082d2  gcc/po/zh_TW.gmo
  6628233796501388db647c3b9ddcea11  gcc/po/zh_TW.po
! 8e4147d9303d5e2c28a5e908ccb4c2ac  gcc/pointer-query.cc
  42e14dd49b1893b63eedc00d3fc29b3a  gcc/pointer-query.h
  1541cce778a3856ff5eb841d6d47ed26  gcc/poly-int-types.h
  e64a8ab864db636576c62983a00f800a  gcc/poly-int.h
*************** f6a5b259097198d66b14186f87695b46  gcc/pr
*** 7619,7629 ****
  15c1fef5c89feec6af5f61c909e35410  gcc/profile-count.h
  c65c577b485a33a088eeda9f4269a0de  gcc/profile.cc
  d9deb5fb04bc9bc87a486a5ccfbba806  gcc/profile.h
! f29e4c9efdf2dc0f1c85d48990e74081  gcc/range-op-float.cc
  997ac266d2595ff4eebf8329161f81d8  gcc/range-op-mixed.h
  8ba824feefe86c2918eab3ecee628a5d  gcc/range-op-ptr.cc
! 266752af9570f21acfa29cfc5227e5d5  gcc/range-op.cc
! c27c1c39a9e7582f117a496eb1f6801e  gcc/range-op.h
  db3562fdc44d2731a5d6f79322e63e49  gcc/range.cc
  ab6530a7aba31b6045d649bad558bdd4  gcc/range.h
  d62f21136aedb5de39f00da2ce438022  gcc/read-md.cc
--- 7621,7631 ----
  15c1fef5c89feec6af5f61c909e35410  gcc/profile-count.h
  c65c577b485a33a088eeda9f4269a0de  gcc/profile.cc
  d9deb5fb04bc9bc87a486a5ccfbba806  gcc/profile.h
! d7e60ea24629e0e9a2be715e1da6d224  gcc/range-op-float.cc
  997ac266d2595ff4eebf8329161f81d8  gcc/range-op-mixed.h
  8ba824feefe86c2918eab3ecee628a5d  gcc/range-op-ptr.cc
! 67ce46df5da5afd1294d814e8330c2e2  gcc/range-op.cc
! 42efabbb4e27a40d25fe2f9bce428fd4  gcc/range-op.h
  db3562fdc44d2731a5d6f79322e63e49  gcc/range.cc
  ab6530a7aba31b6045d649bad558bdd4  gcc/range.h
  d62f21136aedb5de39f00da2ce438022  gcc/read-md.cc
*************** d62f21136aedb5de39f00da2ce438022  gcc/re
*** 7631,7637 ****
  ab6d7ad46c79c6922e06b47e127ac0e3  gcc/read-rtl-function.cc
  05769e0c1dad9db0ecf442e1a710384e  gcc/read-rtl-function.h
  d0e0240ab5898db8d64694626b7a8a98  gcc/read-rtl.cc
! a7bef29c4a142f36a050b5f81b1263ed  gcc/real.cc
  9d2922bb55531074a578f60e3963a796  gcc/real.h
  411b413e1c87bce6c78f6243d9e662b9  gcc/realmpfr.cc
  2b4c19944566bf27cd500fc1e804e8c1  gcc/realmpfr.h
--- 7633,7639 ----
  ab6d7ad46c79c6922e06b47e127ac0e3  gcc/read-rtl-function.cc
  05769e0c1dad9db0ecf442e1a710384e  gcc/read-rtl-function.h
  d0e0240ab5898db8d64694626b7a8a98  gcc/read-rtl.cc
! f10bbd315e3f7d5cf8f33c6e10277944  gcc/real.cc
  9d2922bb55531074a578f60e3963a796  gcc/real.h
  411b413e1c87bce6c78f6243d9e662b9  gcc/realmpfr.cc
  2b4c19944566bf27cd500fc1e804e8c1  gcc/realmpfr.h
*************** a7bef29c4a142f36a050b5f81b1263ed  gcc/re
*** 7640,7646 ****
  78f7bb4149a60eafba8a5dda7bd80729  gcc/ree.cc
  e3d83ae4baa1d776cf5951923617ec90  gcc/reg-notes.def
  35723f09766711c71ebef9ec4f7c41fc  gcc/reg-stack.cc
! e95738a65e09b7bd3bbcbbb5467f543c  gcc/regcprop.cc
  a97922db0f92509d800d3f1768f20b7d  gcc/regcprop.h
  8127bcf927a8c046fe7c9c8746589d49  gcc/regenerate-opt-urls.py
  a7d5787d583f54d43ff6842cf943d3ab  gcc/reginfo.cc
--- 7642,7648 ----
  78f7bb4149a60eafba8a5dda7bd80729  gcc/ree.cc
  e3d83ae4baa1d776cf5951923617ec90  gcc/reg-notes.def
  35723f09766711c71ebef9ec4f7c41fc  gcc/reg-stack.cc
! 549e391e0147f25cc68452de9aa20b44  gcc/regcprop.cc
  a97922db0f92509d800d3f1768f20b7d  gcc/regcprop.h
  8127bcf927a8c046fe7c9c8746589d49  gcc/regenerate-opt-urls.py
  a7d5787d583f54d43ff6842cf943d3ab  gcc/reginfo.cc
*************** a50f455a4da1c5681d83ded216699df8  gcc/ss
*** 8089,8095 ****
  d93510bb251b5f9a6a50b05ec4b9ccc2  gcc/stack-ptr-mod.cc
  37623f9bd5f167d8d4307ef37a646283  gcc/statistics.cc
  8fa28fa606e2b8ccfa3f6ba31b5988d4  gcc/statistics.h
! b3e3eceb17c661e649bfbf7f2b490888  gcc/stmt.cc
  e7705887682ab75001cd90109f3c1995  gcc/stmt.h
  b5d2f1b4038d7c848bc885f2ca01c733  gcc/stor-layout.cc
  1320e37c3710789c2f18d411226afad1  gcc/stor-layout.h
--- 8091,8097 ----
  d93510bb251b5f9a6a50b05ec4b9ccc2  gcc/stack-ptr-mod.cc
  37623f9bd5f167d8d4307ef37a646283  gcc/statistics.cc
  8fa28fa606e2b8ccfa3f6ba31b5988d4  gcc/statistics.h
! cded5343bb6c992fda9fb146aa63fa05  gcc/stmt.cc
  e7705887682ab75001cd90109f3c1995  gcc/stmt.h
  b5d2f1b4038d7c848bc885f2ca01c733  gcc/stor-layout.cc
  1320e37c3710789c2f18d411226afad1  gcc/stor-layout.h
*************** ee08df7cdb543dd77698b88c264cf150  gcc/sy
*** 8107,8113 ****
  0ac86f977a6c301d54512f20e93fcbbe  gcc/symtab-thunks.h
  b4bd28274347fdac8fdf9c6568e69c87  gcc/symtab.cc
  0a5032f258c19c46838a1448b977d799  gcc/sync-builtins.def
! ca3812f34264880529e187befc3db03a  gcc/system.h
  978099dcb9d85382343c1a58af7eb62a  gcc/target-def.h
  1abe78cf4406a18083c6c29c5432e16d  gcc/target-globals.cc
  0745369d6e711f2978854379f04976ae  gcc/target-globals.h
--- 8109,8115 ----
  0ac86f977a6c301d54512f20e93fcbbe  gcc/symtab-thunks.h
  b4bd28274347fdac8fdf9c6568e69c87  gcc/symtab.cc
  0a5032f258c19c46838a1448b977d799  gcc/sync-builtins.def
! 45b0127251aa185b905d2843bdbff55e  gcc/system.h
  978099dcb9d85382343c1a58af7eb62a  gcc/target-def.h
  1abe78cf4406a18083c6c29c5432e16d  gcc/target-globals.cc
  0745369d6e711f2978854379f04976ae  gcc/target-globals.h
*************** e8a9eb01b9451a357155e7152df1c669  gcc/ta
*** 8118,8124 ****
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 94ec51a650289142168fc7ddc1819997  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
--- 8120,8126 ----
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! c5481d57c522ab9e7c821f607d514641  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
*************** e758e9f4f3e6f53d756360fda966fadd  gcc/te
*** 10758,10763 ****
--- 10760,10766 ----
  76fa33c917471922e94d50763fda451c  gcc/testsuite/c-c++-common/Waddress-of-packed-member-2.c
  273f580aad8918060378ff0f64998aa7  gcc/testsuite/c-c++-common/Walloca-larger-than.c
  afef2f2a384ff98fc41df320bb6a2419  gcc/testsuite/c-c++-common/Warray-bounds-10.c
+ a1f750193e9b002ef72772e807bd3a32  gcc/testsuite/c-c++-common/Warray-bounds-11.c
  26f47ca8f4d16158af229f5e0181ba58  gcc/testsuite/c-c++-common/Warray-bounds-2.c
  735f67562fd278388dfba29a23faba55  gcc/testsuite/c-c++-common/Warray-bounds-3.c
  bd8f64abbcab43dedc51e54273763e0c  gcc/testsuite/c-c++-common/Warray-bounds-4.c
*************** da5e564f6cffb4d2f63384ba5d7351b1  gcc/te
*** 11857,11862 ****
--- 11860,11867 ----
  8135260e5e210166919ed6d24752ad37  gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-3.c
  7e07a117bfa1cbd4313441da514b62a7  gcc/testsuite/c-c++-common/cpp/dir-only-1.c
  94f40e67e3617fd463bd2b73d2f6d54c  gcc/testsuite/c-c++-common/cpp/dir-only-1.h
+ 3ddedbc00d4ff771f66edefc8d70881f  gcc/testsuite/c-c++-common/cpp/dir-only-10.c
+ 948247aa95702e920da7ab25ee7cf601  gcc/testsuite/c-c++-common/cpp/dir-only-11.c
  92a3350e430f3da6be21354b2cc4eb5d  gcc/testsuite/c-c++-common/cpp/dir-only-2.c
  d17c82849bf7f540adedf0e80d9b41df  gcc/testsuite/c-c++-common/cpp/dir-only-3.c
  f120018b9734950cca9c0e7ba0e9a33a  gcc/testsuite/c-c++-common/cpp/dir-only-3a.h
*************** ef8ec3320ae234be32fcdfc5379eaca2  gcc/te
*** 12589,12594 ****
--- 12594,12601 ----
  8f995161beda01326e712ba172a760f8  gcc/testsuite/c-c++-common/gomp/pr107001.c
  9b182f81cba9d60fb2cbbde45ceae582  gcc/testsuite/c-c++-common/gomp/pr108244-3.c
  c83ce004951a9a0719e190f7457302c7  gcc/testsuite/c-c++-common/gomp/pr119000.c
+ 250f54e2a193f434f875e2caf2868bc6  gcc/testsuite/c-c++-common/gomp/pr120052.c
+ c315375dde6dfd35915ac372415190a8  gcc/testsuite/c-c++-common/gomp/pr120564.c
  e16ef156ad193ef1f3cba60ad16e57ab  gcc/testsuite/c-c++-common/gomp/pr51360.c
  84c977571aeb43c0224137efe7f5b213  gcc/testsuite/c-c++-common/gomp/pr53580.c
  28bfd873981083756a16f70fdb0b86db  gcc/testsuite/c-c++-common/gomp/pr54017.c
*************** e1ef9c58498f72552b0ec84751024b54  gcc/te
*** 12885,12890 ****
--- 12892,12899 ----
  7e6323dd9b11ca893c79859f430b53ed  gcc/testsuite/c-c++-common/pr109884.c
  087cac8a02deb9e6057b84df8a4b50c5  gcc/testsuite/c-c++-common/pr111309-1.c
  eaa6db1ea7ec94af6a5743a71b3c75b4  gcc/testsuite/c-c++-common/pr111309-2.c
+ b27edfb18a0a46230f08ed022faced81  gcc/testsuite/c-c++-common/pr111817.c
+ f938d650e5405e1ae04ff131a9239d66  gcc/testsuite/c-c++-common/pr122188.c
  f5dce8e27cfb8a6bfffe57596fecb796  gcc/testsuite/c-c++-common/pr19807-1.c
  8a7d9a8dd4af1ada80ca6a4b3201e073  gcc/testsuite/c-c++-common/pr19807-2.c
  39c0873a2c1c7f951e8b2f90ebc9e12d  gcc/testsuite/c-c++-common/pr19807-3.c
*************** b1579268264426b91fb29ca4a7ae6672  gcc/te
*** 14076,14081 ****
--- 14085,14091 ----
  ed79cf5bf3c45230ee9187c4cf51338e  gcc/testsuite/g++.dg/abi/packed1.C
  a6094bf319c105760bebe41768865b66  gcc/testsuite/g++.dg/abi/param1.C
  dc8d04461395fe21c8df3c3ddc0eaefb  gcc/testsuite/g++.dg/abi/param2.C
+ c6ee91a6fae5891b271cf08faea94bc7  gcc/testsuite/g++.dg/abi/pr121801.C
  4f8a99ff3fb06bd92fa2824ba0222b0d  gcc/testsuite/g++.dg/abi/pr39188-1.h
  0b334e68ad96b9b585797769690bad26  gcc/testsuite/g++.dg/abi/pr39188-1a.C
  c96cb62975d4855a114a03ac254e17ce  gcc/testsuite/g++.dg/abi/pr39188-1b.C
*************** c88701df415b47ac9bf5cba84cf379ab  gcc/te
*** 14141,14146 ****
--- 14151,14157 ----
  a3ef49aa5fa035e0eaa1fb23c589fe61  gcc/testsuite/g++.dg/abi/vthunk2.C
  6881f6a907aed22e3604db9a81d71753  gcc/testsuite/g++.dg/abi/vthunk3.C
  59cdef1c2f5ac26231205b723cb9ea52  gcc/testsuite/g++.dg/abi/vtt1.C
+ 53e31dbb580c47605f7e76bc6cfd7704  gcc/testsuite/g++.dg/absvect.C
  cb66889e261971e64a6568617bffaeaa  gcc/testsuite/g++.dg/addr_builtin-1.C
  8912b54490e20101a190287fddb390f8  gcc/testsuite/g++.dg/analyzer/analyzer.exp
  0918dccee8951925f7bc4640874a6cd3  gcc/testsuite/g++.dg/analyzer/cstdlib-2.C
*************** b75b654187426934820f1e2a8a63aaad  gcc/te
*** 14911,14916 ****
--- 14922,14928 ----
  99fb6f2e5c0e7bc8a3c78cbf8090a91f  gcc/testsuite/g++.dg/coroutines/pr116506.C
  59d8e6cfa9a450642b4a378751f44e8a  gcc/testsuite/g++.dg/coroutines/pr116793-1.C
  16df01e113e50e8969f23cb32c1ab8fd  gcc/testsuite/g++.dg/coroutines/pr116880.C
+ 0ca0846ef4e8c067a077207372df0fa3  gcc/testsuite/g++.dg/coroutines/pr125376.C
  cbb42d13b1660a8eb1d40a3d88308140  gcc/testsuite/g++.dg/coroutines/pr93458-1-missing-traits.C
  d9151fc224e4913ed7ffacd748769917  gcc/testsuite/g++.dg/coroutines/pr93458-2-bad-traits.C
  e9b715cb41c54f5b179b4725b788e338  gcc/testsuite/g++.dg/coroutines/pr93458-3-missing-handle.C
*************** b8cd89a7510ad4bbf02ec052d02d2ee0  gcc/te
*** 15439,15444 ****
--- 15451,15457 ----
  eeac975a1b841cef4d5a4c468314ed8c  gcc/testsuite/g++.dg/cpp0x/constexpr-104472.C
  6ef86dfa8bcd129320f2714974f8ad93  gcc/testsuite/g++.dg/cpp0x/constexpr-105321.C
  24bbf6c5e0f31296c48440d4dae33447  gcc/testsuite/g++.dg/cpp0x/constexpr-113083.C
+ cf48bd83fff3e69e5f82d30185ef08d0  gcc/testsuite/g++.dg/cpp0x/constexpr-123889.C
  3e4cac522763806230540d3da6cc5ee1  gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
  d079e67f3b2be485ac7aed93b70984d2  gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C
  329a82a822423273c0c0256fd27a6d52  gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C
*************** b9007290e56f8c058df6fc2174bc755b  gcc/te
*** 15511,15516 ****
--- 15524,15531 ----
  b2e8cc3ca2686458232f6ab8399d9dda  gcc/testsuite/g++.dg/cpp0x/constexpr-93169.C
  bc7ccf4287a38e8f82df800db6150879  gcc/testsuite/g++.dg/cpp0x/constexpr-95307.C
  32c39fce8b20cb104d6da1cffca8a530  gcc/testsuite/g++.dg/cpp0x/constexpr-96241.C
+ 629f0389a900c8203177e0396b4ac416  gcc/testsuite/g++.dg/cpp0x/constexpr-97740a.C
+ eb45e434ffc94954a98ab41dfca4430c  gcc/testsuite/g++.dg/cpp0x/constexpr-97740b.C
  6aa74413b4ef74580a0a5da7abf23914  gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
  5f550fa68a208c2d1f3f6d02dca0b709  gcc/testsuite/g++.dg/cpp0x/constexpr-98295.C
  d08d3bdb37be475451a39fd6f72486e9  gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
*************** f4f262de9adf968192a3da56a3c4adc1  gcc/te
*** 15555,15561 ****
--- 15570,15578 ----
  0a27a7a45bdad25c5a48b1f4e3bfcb8b  gcc/testsuite/g++.dg/cpp0x/constexpr-array26.C
  3100c3b4b2ec90a6762a56edc16076a1  gcc/testsuite/g++.dg/cpp0x/constexpr-array27.C
  216c8de64dd9752d2d84eb202e80c708  gcc/testsuite/g++.dg/cpp0x/constexpr-array28.C
+ 1c4a44e298a16b855d3f955b665c3dc6  gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C
  8b7c8e7c1b64cfa0626f7f2311c9fef5  gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
+ 6a5432548c6c9078379174727c5c44ec  gcc/testsuite/g++.dg/cpp0x/constexpr-array30.C
  6451aa5bb5fa736dda3ebad1dc2e8336  gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
  1d46f32449f9e0292d662928246ec784  gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
  be6358dd3b71be0a5561e5437089998e  gcc/testsuite/g++.dg/cpp0x/constexpr-array6.C
*************** dfc43f4a6c6619f77e2370dc3ac7c5bd  gcc/te
*** 15618,15623 ****
--- 15635,15641 ----
  df7772e8bce1917bb8d1e66fcbe1ce31  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor2.C
  50c4fa620f7ec653b83dbc313350ac22  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor20.C
  75570067f1748bbf63ecff0edf089f3f  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor21.C
+ c3ffed418366431e337c777209f796c0  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor23.C
  6149d79aef3c5dc04bce76d97b8072e3  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor3.C
  fe03ae0923ec0f159b32d4c95a97afbb  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor4.C
  a15ac39628455598191a6c7526c0ea4b  gcc/testsuite/g++.dg/cpp0x/constexpr-ctor5.C
*************** cf5dbf6e27520dc069362029f5cb0540  gcc/te
*** 15674,15680 ****
  0639a526e3e93a7d7ddd53722d0d65a4  gcc/testsuite/g++.dg/cpp0x/constexpr-empty9.C
  eebd11cc85b798aa6a7a34d54749b1fd  gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
  4e6fff7f5e83663f75c94efbf299525b  gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C
! c42ce017f72e0ac9bc977500bc2d096c  gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
  ce75146a9a51521a3b4ff82cc14225c3  gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C
  19eb610e0af0918f7473197af97c60d4  gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C
  54953d2c31360e2eeefa3305044bd360  gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C
--- 15692,15698 ----
  0639a526e3e93a7d7ddd53722d0d65a4  gcc/testsuite/g++.dg/cpp0x/constexpr-empty9.C
  eebd11cc85b798aa6a7a34d54749b1fd  gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
  4e6fff7f5e83663f75c94efbf299525b  gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C
! ee1630d30fdca78fd9a901d17054b392  gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
  ce75146a9a51521a3b4ff82cc14225c3  gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C
  19eb610e0af0918f7473197af97c60d4  gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C
  54953d2c31360e2eeefa3305044bd360  gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C
*************** e38875ddde2687b4139330d97e0edf9f  gcc/te
*** 16350,16355 ****
--- 16368,16374 ----
  46b8282b71afcc8c97c1b1c6c4666202  gcc/testsuite/g++.dg/cpp0x/gen-attrs-79.C
  29ab98a7b8d445bb51e5069dd98f7cca  gcc/testsuite/g++.dg/cpp0x/gen-attrs-8.C
  5dd92815927177080853d47a890f5439  gcc/testsuite/g++.dg/cpp0x/gen-attrs-9.C
+ 3b01eb9296987e59c3e91a9998259d9b  gcc/testsuite/g++.dg/cpp0x/gen-attrs-90.C
  40caf35e131e99903b76e36f0e04b2a9  gcc/testsuite/g++.dg/cpp0x/gnu_fext-numeric-literals.C
  2e2788f974b88f56ceecc2b764d701db  gcc/testsuite/g++.dg/cpp0x/gnu_fno-ext-numeric-literals.C
  3e88c6e173fd3bd44055c2202907f7e1  gcc/testsuite/g++.dg/cpp0x/hog1.C
*************** fa773bb98628f5c9f0fa9d8d8b29beda  gcc/te
*** 17210,17215 ****
--- 17229,17236 ----
  c25430a477686ad18eb61c047059d523  gcc/testsuite/g++.dg/cpp0x/pr112365.C
  d1bd358aeacbea8bb4acd229e4efd99e  gcc/testsuite/g++.dg/cpp0x/pr113031.C
  c6b0d9f964bf85f5f703f5dfa5e809e9  gcc/testsuite/g++.dg/cpp0x/pr119123.C
+ b2f7d7cab4ef6e12f25f82545d59869a  gcc/testsuite/g++.dg/cpp0x/pr123818.C
+ 823666b75dc5cb540393daba4df2d5df  gcc/testsuite/g++.dg/cpp0x/pr124489.C
  26dea799d49ce223a0c4130a3c955271  gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
  4d1da29b669bf3178b3987abce4d58b1  gcc/testsuite/g++.dg/cpp0x/pr31431.C
  d65e06a3830e2b511cc25692b94615a1  gcc/testsuite/g++.dg/cpp0x/pr31432.C
*************** ccba3040ed86b5ffae7d72b18f556d1c  gcc/te
*** 17542,17547 ****
--- 17563,17569 ----
  be2e2da855b83583283092ca0bb72265  gcc/testsuite/g++.dg/cpp0x/rv-conv4.C
  1cf65d6b3d6f2efdc39e97cc285cfb7c  gcc/testsuite/g++.dg/cpp0x/rv-conv5.C
  889a7002f4d78b4abd44856da792f8dc  gcc/testsuite/g++.dg/cpp0x/rv-copy1.C
+ fa930410478009be16ff5c21544f405c  gcc/testsuite/g++.dg/cpp0x/rv-decl1.C
  de88aaa56b0d394bd02f079bb0f4dddf  gcc/testsuite/g++.dg/cpp0x/rv-deduce.C
  f213598004dcfd0117fecc9593637790  gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C
  589e28fb5e0fffb1d369fc47ca52bcfd  gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
*************** e791b94844e59093ad5ec4175c3b673a  gcc/te
*** 18193,18198 ****
--- 18215,18221 ----
  86dff67be95912f694daebdd0aee911b  gcc/testsuite/g++.dg/cpp1y/auto-fn63.C
  f97d20d3d680128b6e125d1793e29b87  gcc/testsuite/g++.dg/cpp1y/auto-fn64.C
  a5fbd625e8b645b90b2755400e929e2b  gcc/testsuite/g++.dg/cpp1y/auto-fn65.C
+ 88309773bbf1feef7121ba73e86cc151  gcc/testsuite/g++.dg/cpp1y/auto-fn66.C
  03b6f2674c38c8f6ed9f7fc03583b1dc  gcc/testsuite/g++.dg/cpp1y/auto-fn7.C
  e9a317fa32e36cef4553b50965e48550  gcc/testsuite/g++.dg/cpp1y/auto-fn8.C
  d67958b896eb1dae6f8862fd59b01c62  gcc/testsuite/g++.dg/cpp1y/auto-fn9.C
*************** afbdcf440b8da95f919e745c0f3a85d1  gcc/te
*** 18217,18222 ****
--- 18240,18246 ----
  bff4672a992bc57b0432abbc32b3c2c9  gcc/testsuite/g++.dg/cpp1y/constexpr-108158.C
  1d40cabd787f31f0fad7fcf842281e0d  gcc/testsuite/g++.dg/cpp1y/constexpr-110382.C
  c0c4053e9d0ac3fdafa8e18c09182922  gcc/testsuite/g++.dg/cpp1y/constexpr-110619.C
+ 99784bf84926c6a7d522ec738bd5f9aa  gcc/testsuite/g++.dg/cpp1y/constexpr-121445.C
  2d72668eefa5659edd32ef8dabc1c48e  gcc/testsuite/g++.dg/cpp1y/constexpr-50060.C
  9b2030f5f70b0e913feb1b957c799f4f  gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C
  9ecc58eab147adafbf3780c51ed706fc  gcc/testsuite/g++.dg/cpp1y/constexpr-70265-1.C
*************** b2c624c1eaea788d603bfc8204fdaee7  gcc/te
*** 19140,19145 ****
--- 19164,19171 ----
  dfd54cc6e7ae91a6a51dbda233f20174  gcc/testsuite/g++.dg/cpp1z/decomp59.C
  1bdca83f97c5e15ddd3eda87ca5353f2  gcc/testsuite/g++.dg/cpp1z/decomp6.C
  37c39f932f33f540d51f60eb06411c2f  gcc/testsuite/g++.dg/cpp1z/decomp61.C
+ 4267cc2db929f2666c1c5449e017a94a  gcc/testsuite/g++.dg/cpp1z/decomp66.C
+ d87e0f686f9f58fa2c8ea0990e82c1b3  gcc/testsuite/g++.dg/cpp1z/decomp67.C
  09468d9aa8e4fe8ac0677b17a3c509a2  gcc/testsuite/g++.dg/cpp1z/decomp7.C
  0d7ba62c8322f4f98a085026e3ac529a  gcc/testsuite/g++.dg/cpp1z/decomp8.C
  20aa008483ed89882491910be20354b8  gcc/testsuite/g++.dg/cpp1z/decomp9.C
*************** e3a88ae9ca562b3c9a47ee98c06e6ded  gcc/te
*** 19157,19162 ****
--- 19183,19189 ----
  63be3b6d75aa3c2c8088552683d5245e  gcc/testsuite/g++.dg/cpp1z/eval-order10.C
  3abc6084e572264410718d38beb290bb  gcc/testsuite/g++.dg/cpp1z/eval-order11.C
  2a2d4866a044c20823b5f37f629ac147  gcc/testsuite/g++.dg/cpp1z/eval-order13.C
+ 612e7cfe92accd2bee31cd13a0976f33  gcc/testsuite/g++.dg/cpp1z/eval-order14.C
  bb194d9ce590c9e5e69935ebac0f25e4  gcc/testsuite/g++.dg/cpp1z/eval-order2.C
  8b89dee7164b6f4d992706e5b85433f4  gcc/testsuite/g++.dg/cpp1z/eval-order3.C
  6d8d378fedaf65b4cb89952060799280  gcc/testsuite/g++.dg/cpp1z/eval-order4.C
*************** f35c40f9359deda380357490b21bcf4f  gcc/te
*** 19365,19370 ****
--- 19392,19398 ----
  1cec7e8e1ac5999209a00a7fd3e2dbab  gcc/testsuite/g++.dg/cpp1z/static1.C
  41cdf88b4e2dc9ba29ab954fd0f3d05c  gcc/testsuite/g++.dg/cpp1z/static2.C
  491588e8dd93d83d5049e3c332e8755f  gcc/testsuite/g++.dg/cpp1z/static_assert-nomsg.C
+ d123582c5d5cdc2e4fdc925fa563f023  gcc/testsuite/g++.dg/cpp1z/static_assert1.C
  7dd3448d4722a9ee0446db6aa3c7a0b0  gcc/testsuite/g++.dg/cpp1z/ttp1.C
  0cd62ffa5ae2d02bd665e02895b12f01  gcc/testsuite/g++.dg/cpp1z/ttp2.C
  64b3f9e4e9d3f04ac339e1f86e353e9b  gcc/testsuite/g++.dg/cpp1z/typename-tmpl-tmpl-parm-neg.C
*************** c6ad3dc1af7ae5c57b2194ad705be2a4  gcc/te
*** 19431,19436 ****
--- 19459,19465 ----
  cbc1aae360c38b8d5aba44cc0adb1d1a  gcc/testsuite/g++.dg/cpp23/auto-fncast16.C
  0d6c0765aa6e381e901ea54f31098f7d  gcc/testsuite/g++.dg/cpp23/auto-fncast17.C
  607b1507f1af352b3b8d73c0b0042af0  gcc/testsuite/g++.dg/cpp23/auto-fncast18.C
+ 7538b8341492d3e37f991c7d882723b9  gcc/testsuite/g++.dg/cpp23/auto-fncast19.C
  76d2964f5d2d58ccec6afc73c59f1b53  gcc/testsuite/g++.dg/cpp23/auto-fncast2.C
  dda23dff758a778a7ead9dd8b58268fc  gcc/testsuite/g++.dg/cpp23/auto-fncast3.C
  7f7896e62e131143c799cd8b4ac52168  gcc/testsuite/g++.dg/cpp23/auto-fncast4.C
*************** ee32c4ffc3127b060ad7d2d7978d4c00  gcc/te
*** 19442,19447 ****
--- 19471,19477 ----
  436f3521c73eff29eb95a9935488f619  gcc/testsuite/g++.dg/cpp23/charlit-encoding1.C
  bbd34d70bffdb5659d43e105cc5654f0  gcc/testsuite/g++.dg/cpp23/charset1.C
  fc95968ef690ef967f99e7fc9cf9bb22  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited1.C
+ 289c2847fb294b33f74d735aba8d2b44  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited10.C
  0bfba7997142477c825e6eac0de01c78  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited2.C
  4d439f6f5585d12bf5b651068b33af79  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited3.C
  726edadc3f3d862f8f9d5cdbffdc3430  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited4.C
*************** d1816c76dd387be6d07b1763c88d7e12  gcc/te
*** 19449,19454 ****
--- 19479,19485 ----
  7102bd9f78d9dd5baf868b5867fd00fb  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited6.C
  1eb71fc21e8ad1d9fc8b9177ae3ff8bd  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited7.C
  b70c43fcf5e919517d07b52eba057f7e  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
+ c281d9c48ed1e62c15bb0a8e9a361e9a  gcc/testsuite/g++.dg/cpp23/class-deduction-inherited9.C
  a5e6981af3e3d461e280ff24cd289402  gcc/testsuite/g++.dg/cpp23/concepts-err1.C
  636155e5662c48788ae52677e22b5249  gcc/testsuite/g++.dg/cpp23/consteval-if1.C
  821ea836b45f7af0a628e6eb278e28f9  gcc/testsuite/g++.dg/cpp23/consteval-if10.C
*************** f7798123f560a2563579e7610c9e701c  gcc/te
*** 19530,19536 ****
  d74bbc201fde13d804d767363c281130  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda13.C
  ad90458ad42ff08d4a1c948d0770dd89  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C
  51978f30a781d2e3a3434b8d371737b6  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda15.C
! 87abca8eb660254fbf201e771eef3751  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C
  e8adbb443f8b231b244ffbcd64ee7da2  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda3.C
  0a50eb80a181d4196ff68849d37d2615  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda4.C
  cb8eabd8ed2aec8d2d6ba1aa825f9307  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda5.C
--- 19561,19567 ----
  d74bbc201fde13d804d767363c281130  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda13.C
  ad90458ad42ff08d4a1c948d0770dd89  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C
  51978f30a781d2e3a3434b8d371737b6  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda15.C
! 0221584b2593a7b483e89830bc37b1d7  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C
  e8adbb443f8b231b244ffbcd64ee7da2  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda3.C
  0a50eb80a181d4196ff68849d37d2615  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda4.C
  cb8eabd8ed2aec8d2d6ba1aa825f9307  gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda5.C
*************** e4eef3325d652767c4b83b6aed8c24b5  gcc/te
*** 19571,19577 ****
  54f4344e911f644cb2cc34417b933914  gcc/testsuite/g++.dg/cpp23/ext-floating7.C
  bc34c96001d8dfdc3193f88b494b97a1  gcc/testsuite/g++.dg/cpp23/ext-floating8.C
  235a8f3c94e9cc7e9180fe31a3d8352b  gcc/testsuite/g++.dg/cpp23/ext-floating9.C
! 2ea4fd210965e816b517050bf433f476  gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
  b2919427c96be25ae3a72933323c8de1  gcc/testsuite/g++.dg/cpp23/init-stmt1.C
  368308646b02bb36cf22014a0d5bbbdb  gcc/testsuite/g++.dg/cpp23/init-stmt2.C
  906bfd9572fea8013b12e8c215392381  gcc/testsuite/g++.dg/cpp23/label1.C
--- 19602,19608 ----
  54f4344e911f644cb2cc34417b933914  gcc/testsuite/g++.dg/cpp23/ext-floating7.C
  bc34c96001d8dfdc3193f88b494b97a1  gcc/testsuite/g++.dg/cpp23/ext-floating8.C
  235a8f3c94e9cc7e9180fe31a3d8352b  gcc/testsuite/g++.dg/cpp23/ext-floating9.C
! b28d7e361099a6236d154897d0b79dde  gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
  b2919427c96be25ae3a72933323c8de1  gcc/testsuite/g++.dg/cpp23/init-stmt1.C
  368308646b02bb36cf22014a0d5bbbdb  gcc/testsuite/g++.dg/cpp23/init-stmt2.C
  906bfd9572fea8013b12e8c215392381  gcc/testsuite/g++.dg/cpp23/label1.C
*************** d249caf403715041728592d4a4163da2  gcc/te
*** 19624,19630 ****
  33afee43a2089a3e2bccd50e52d8faa6  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr2.C
  54cc8d4706b3ab357055a709b5800258  gcc/testsuite/g++.dg/cpp26/cplusplus.C
  b835b9bb00c8b448e2ac56df5e6cae60  gcc/testsuite/g++.dg/cpp26/enum-conv1.C
! 2cce13f27ba62ba07a652f3231d22f92  gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
  e439504634b8fdea668e10d9fc930c63  gcc/testsuite/g++.dg/cpp26/literals1.C
  24ebebb3be412c0e507595cb8c7458f5  gcc/testsuite/g++.dg/cpp26/literals2.C
  1eebd6cbce6cabc0490fdd8bf706934d  gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
--- 19655,19661 ----
  33afee43a2089a3e2bccd50e52d8faa6  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr2.C
  54cc8d4706b3ab357055a709b5800258  gcc/testsuite/g++.dg/cpp26/cplusplus.C
  b835b9bb00c8b448e2ac56df5e6cae60  gcc/testsuite/g++.dg/cpp26/enum-conv1.C
! 2f1af7e662c1461f61119390cbb262d3  gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
  e439504634b8fdea668e10d9fc930c63  gcc/testsuite/g++.dg/cpp26/literals1.C
  24ebebb3be412c0e507595cb8c7458f5  gcc/testsuite/g++.dg/cpp26/literals2.C
  1eebd6cbce6cabc0490fdd8bf706934d  gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
*************** edb46bdf72eaeb378f5f0d557153ad9d  gcc/te
*** 19777,19782 ****
--- 19808,19814 ----
  ce0107015099b9bc8bbb6308d69d1335  gcc/testsuite/g++.dg/cpp2a/concepts-decltype2.C
  20942197b42aecb2031c455e6c7139db  gcc/testsuite/g++.dg/cpp2a/concepts-decltype3.C
  bd5315a1ae1bb7ab6b080320eca4e7cc  gcc/testsuite/g++.dg/cpp2a/concepts-decltype4.C
+ 22508583fabe144a053070d600a2f4ff  gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C
  2ff1559b74cd8147b9de258edac783b1  gcc/testsuite/g++.dg/cpp2a/concepts-defarg1.C
  8b450b687a58857141c45425bdbf8e80  gcc/testsuite/g++.dg/cpp2a/concepts-defarg2.C
  e0a60fccd4fe206005be1e84cfb2682d  gcc/testsuite/g++.dg/cpp2a/concepts-defarg3.C
*************** f48f8abadf7267488e7fc07300b15321  gcc/te
*** 19822,19827 ****
--- 19854,19861 ----
  f2bb90a7b95f5ca56f19993dc668ce44  gcc/testsuite/g++.dg/cpp2a/concepts-friend15.C
  78691a3f17811dcdecf47f6df427a97c  gcc/testsuite/g++.dg/cpp2a/concepts-friend16.C
  7ecb03f5905c0460a20f5edf81561f98  gcc/testsuite/g++.dg/cpp2a/concepts-friend17.C
+ b192de319a3668a8a3539d1c8be790c9  gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C
+ 451bfd68952d37940a8f8c9efdf8011b  gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C
  2fdb3d1a7c3f6a1361b9e8a0700d78f5  gcc/testsuite/g++.dg/cpp2a/concepts-friend2.C
  3f315ba7ac021707fcaa518bf77b73e4  gcc/testsuite/g++.dg/cpp2a/concepts-friend3.C
  ac59cd12de1286d61d74c57276a780ba  gcc/testsuite/g++.dg/cpp2a/concepts-friend4.C
*************** c61f89754bf19eb066c90223050eb1d6  gcc/te
*** 19856,19861 ****
--- 19890,19896 ----
  2cdd3df6d70a6187c69e0b2e31916579  gcc/testsuite/g++.dg/cpp2a/concepts-lambda20.C
  4ca9ff6f446b7952827edf777db0b0ea  gcc/testsuite/g++.dg/cpp2a/concepts-lambda21.C
  a33c273c880831d4ae8354f3eae13e25  gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C
+ c5f62ec8bee71a828d47886f4bfb04dc  gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
  c1dc95530d3c5579fce346628c40061a  gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C
  6f185f0a7016ab67c7f0d4ffa7012182  gcc/testsuite/g++.dg/cpp2a/concepts-lambda4.C
  86976d8466300862e381a2182c187b35  gcc/testsuite/g++.dg/cpp2a/concepts-lambda5.C
*************** b48de652a269ba0411d9c971e6b06869  gcc/te
*** 19915,19920 ****
--- 19950,19956 ----
  966bf7435554a7a150aa0fb09697b04c  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder11.C
  f57d40e8c8a062ab42228a604dc8b336  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder12.C
  3d20f95d326918d497b3b309b9eda0d9  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder13.C
+ 10165b900c5003d3691cd5cf5fae858b  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C
  9a1776b1d9b3c080e847b78507e8c1c6  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder2.C
  d4ce4a5306e35eff2b78390b50d6c95b  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder3.C
  e428d578c8a0c5a61ab85eddccb24071  gcc/testsuite/g++.dg/cpp2a/concepts-placeholder4.C
*************** ca94fb35340cd618ed01f462ef62f3d9  gcc/te
*** 19929,19934 ****
--- 19965,19972 ----
  d730bf14b7c6a0ff4579eb13739f7d2f  gcc/testsuite/g++.dg/cpp2a/concepts-pr108579.C
  10c26b1079f1b79e271e63ca28b96ecd  gcc/testsuite/g++.dg/cpp2a/concepts-pr112436.C
  4b3fe1ba64fb6a81fe92d55b090adf3a  gcc/testsuite/g++.dg/cpp2a/concepts-pr116681.C
+ 24814124a2638795704cea1177c1d93c  gcc/testsuite/g++.dg/cpp2a/concepts-pr122494.C
+ c3a5a8ffeaedc47bb7c475c240bce1c2  gcc/testsuite/g++.dg/cpp2a/concepts-pr123814.C
  2e23f19968091d773a47c43a32a784ae  gcc/testsuite/g++.dg/cpp2a/concepts-pr58500.C
  07c6a4dff1357ef61c0d30b12db5c948  gcc/testsuite/g++.dg/cpp2a/concepts-pr58534.C
  b6ba42db630bfd3259d65662fc03aaa0  gcc/testsuite/g++.dg/cpp2a/concepts-pr58535.C
*************** defefd8dd547fd66cedc41bb14383765  gcc/te
*** 20197,20202 ****
--- 20235,20241 ----
  2d6205fea644048201c44086df527c3a  gcc/testsuite/g++.dg/cpp2a/consteval4.C
  34ecadb8994bf3d4c005295e95f6f53d  gcc/testsuite/g++.dg/cpp2a/consteval40.C
  09d61acf831f6fd33b3695f66ce79b1e  gcc/testsuite/g++.dg/cpp2a/consteval41.C
+ 25cda58432ffe21cd15da667f5edfb8d  gcc/testsuite/g++.dg/cpp2a/consteval42.C
  e71633ec506016932dc09c057d98c36c  gcc/testsuite/g++.dg/cpp2a/consteval5.C
  f8b2a0016c59d132f059d57a7638806f  gcc/testsuite/g++.dg/cpp2a/consteval6.C
  6517514915e5a24d0ee38257c46994cc  gcc/testsuite/g++.dg/cpp2a/consteval7.C
*************** b5f4f9a8f5933754f321648f67e54dac  gcc/te
*** 20234,20239 ****
--- 20273,20280 ----
  1a30baf82f09866d37d6e96a76379f47  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic16.C
  b64753c380df7428569f8befeb1510e8  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic17.C
  8fe226b0e900985b1f76643e8aaf737b  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic18.C
+ ba2b3d3cd6f23028bc237ee7025256fb  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic19.C
+ dd98bfd651ed53723db105ea6def894e  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic1a.C
  6a856dd4720aaf5ca7ba6e7422f849a9  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic2.C
  6ddf97a1878f89c02ca0c76de5f0f08f  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic3.C
  28c0eaf9ba35a479b5d50ddb90e7dc07  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic4.C
*************** d29f558af48deff313645aecd90adb8d  gcc/te
*** 20296,20304 ****
  89741a348551bf62e5198e689a2cb9eb  gcc/testsuite/g++.dg/cpp2a/constexpr-new9.C
  081a94c39fa972dab2d9f8590e087bc6  gcc/testsuite/g++.dg/cpp2a/constexpr-ref1.C
  fe2e298a3cf2e9094a79a25a4ffd8fc2  gcc/testsuite/g++.dg/cpp2a/constexpr-shift1.C
! 1d1e610556de3295af12cf17177f42b7  gcc/testsuite/g++.dg/cpp2a/constexpr-try1.C
! 27ac7e1957f04ea6ee6160a7f7c14ecc  gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C
! c169c0f663257a769b1da0d94c0c7307  gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C
  d74e93a21b21eb22ce0742e9b6bbb923  gcc/testsuite/g++.dg/cpp2a/constexpr-try4.C
  02c2a396d7fac0a627ada9a52c486da3  gcc/testsuite/g++.dg/cpp2a/constexpr-try5.C
  e8575fbcf5a3e212ea28a4b89fbf8253  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid1.C
--- 20337,20345 ----
  89741a348551bf62e5198e689a2cb9eb  gcc/testsuite/g++.dg/cpp2a/constexpr-new9.C
  081a94c39fa972dab2d9f8590e087bc6  gcc/testsuite/g++.dg/cpp2a/constexpr-ref1.C
  fe2e298a3cf2e9094a79a25a4ffd8fc2  gcc/testsuite/g++.dg/cpp2a/constexpr-shift1.C
! 1f5b8000b29315ba3af28b7bd9f18540  gcc/testsuite/g++.dg/cpp2a/constexpr-try1.C
! 998420d0a57cce98957e79abdb9865d3  gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C
! 7735fb04b9642ba24ab00207340cff41  gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C
  d74e93a21b21eb22ce0742e9b6bbb923  gcc/testsuite/g++.dg/cpp2a/constexpr-try4.C
  02c2a396d7fac0a627ada9a52c486da3  gcc/testsuite/g++.dg/cpp2a/constexpr-try5.C
  e8575fbcf5a3e212ea28a4b89fbf8253  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid1.C
*************** c0b015cd02e07242444c2700f64e070a  gcc/te
*** 20313,20318 ****
--- 20354,20360 ----
  5fd97c22b2996faaa87a3aa20de08243  gcc/testsuite/g++.dg/cpp2a/constexpr-union6.C
  22d0d1f2f3c677d12d0e844ae12fd688  gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C
  e94cea4fa4255420603d88768e70b36c  gcc/testsuite/g++.dg/cpp2a/constexpr-union8.C
+ b00a4635a4c11366be17b4b6a45910f7  gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C
  4e80378ab3af70b20b34dcf87e46941d  gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C
  6d84a7bd78f9867ce0a07e6b0d26241b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual1.C
  974c3f89c0f3ffa8993db35751b7f993  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual10.C
*************** fc8ccbfe7f14dd4a41ff708c5a05b226  gcc/te
*** 20718,20723 ****
--- 20760,20766 ----
  475c14632e683c843d48238b8c5514f2  gcc/testsuite/g++.dg/cpp2a/pr114426.C
  9d5c0df7ab0b6e3e5ab03bc8eb135452  gcc/testsuite/g++.dg/cpp2a/pr117317-1.C
  4b52a1949fed25dc03d5cfb83047e7c5  gcc/testsuite/g++.dg/cpp2a/pr117317-2.C
+ 938acbb8068f7a8fc2c3f43271324ef4  gcc/testsuite/g++.dg/cpp2a/pr123578.C
  7d1c1719a1c3e44cf69662819769f8a5  gcc/testsuite/g++.dg/cpp2a/pr88534.C
  3a4139bbe15eef2dce96cb020b2681f7  gcc/testsuite/g++.dg/cpp2a/pr88537.C
  b94ce4741edeca1190c4590e425522dc  gcc/testsuite/g++.dg/cpp2a/pr89913.C
*************** becc0e6f064af285a504ff10eaffc525  gcc/te
*** 21155,21160 ****
--- 21198,21205 ----
  204f6d67816240aa15bfa5d9320862f5  gcc/testsuite/g++.dg/dfp/mangle-6.C
  8b4d16a77a1edab85ee4c99fda03eb79  gcc/testsuite/g++.dg/dfp/mangle-mode.C
  3a865b01c504023d0b90b1f055163c6a  gcc/testsuite/g++.dg/dfp/nofields.C
+ fd0549fb3825f83ce2ac884838fe2187  gcc/testsuite/g++.dg/dfp/pr122834-1.C
+ 87b1932d8497bd7b8b41f36fb0c23208  gcc/testsuite/g++.dg/dfp/pr122834-2.C
  919ff80bde2b401e1cf10423071bab16  gcc/testsuite/g++.dg/dfp/pr92744.C
  cd0133a632a541db051ef84d53754ac6  gcc/testsuite/g++.dg/dfp/typeid1.C
  ac1525692e246b268a3c3c5dc12f93bd  gcc/testsuite/g++.dg/dg.exp
*************** e1073bec80cbc48fb15e02126aebb2b0  gcc/te
*** 22865,22870 ****
--- 22910,22917 ----
  641b551c65455ce91907afab3c572a40  gcc/testsuite/g++.dg/gomp/pr108503.C
  e6195ed8251ecef3da90dc8d0e37ed89  gcc/testsuite/g++.dg/gomp/pr108607.C
  ed2fe9b487c91fe33d6cccf142fa243c  gcc/testsuite/g++.dg/gomp/pr111274.C
+ 996def323ebaae8304a543404625c64a  gcc/testsuite/g++.dg/gomp/pr121977.C
+ b30c571b03f08db4a17f3299d04b20fa  gcc/testsuite/g++.dg/gomp/pr123597.C
  539bba6df5330b7a6631eca5665a0899  gcc/testsuite/g++.dg/gomp/pr24849.C
  78ea34fd7a1a2767f61a703271e7070a  gcc/testsuite/g++.dg/gomp/pr25874.C
  93a85a09acfdf011a86ff95fc9184a94  gcc/testsuite/g++.dg/gomp/pr25996.C
*************** ecfa94e705bc436ad699767b1e4c929e  gcc/te
*** 23676,23681 ****
--- 23723,23729 ----
  55ee7bff7cc115f42266bd1d62dda46b  gcc/testsuite/g++.dg/ipa/pr100413.C
  901698e6dabf29dd6ced031811fcf59e  gcc/testsuite/g++.dg/ipa/pr103099.C
  f2ff4523ab9758b8e447b088ac708879  gcc/testsuite/g++.dg/ipa/pr106258.C
+ 4b93844d472e68bdcc050f5ef8ce7079  gcc/testsuite/g++.dg/ipa/pr106260.C
  c43cd4a90674d630795e0323738e0460  gcc/testsuite/g++.dg/ipa/pr107661.C
  7d63c0342d026b9ee4f2ecb03364cefe  gcc/testsuite/g++.dg/ipa/pr108110.C
  9a257f3564fd42fe9d7e00c5567f89d2  gcc/testsuite/g++.dg/ipa/pr108509.C
*************** c4e9e836f72626730cc2876443c9d998  gcc/te
*** 23685,23690 ****
--- 23733,23739 ----
  e66c84f48f938ed2bb548ce51957afce  gcc/testsuite/g++.dg/ipa/pr113757.C
  d248bf5deb963f7dfbec9babb6fb70df  gcc/testsuite/g++.dg/ipa/pr116572.C
  9183db2978d574bc26d43a0d942ec920  gcc/testsuite/g++.dg/ipa/pr118243.C
+ 2e880749089a9c6febba9ae1fa0de490  gcc/testsuite/g++.dg/ipa/pr122856.C
  02f3704c0511b2d171c55dbf09c64325  gcc/testsuite/g++.dg/ipa/pr43695.C
  5345293723ad062b59b168c319738e1e  gcc/testsuite/g++.dg/ipa/pr43812.C
  b001cbe3dfdeb7d2a1061f024aa08ea4  gcc/testsuite/g++.dg/ipa/pr44372.C
*************** ac5555b4df88275d04e41aa95b0aca9a  gcc/te
*** 24333,24338 ****
--- 24382,24389 ----
  f1d9eed0025353353019a54838c87ed9  gcc/testsuite/g++.dg/lto/pr113208.h
  22230575f68a36106d16454407701753  gcc/testsuite/g++.dg/lto/pr113208_0.C
  36a6b4f47dbbdcca4469926f1398a598  gcc/testsuite/g++.dg/lto/pr113208_1.C
+ 56055cfb3b55c9e36f0d7e5af4adee7f  gcc/testsuite/g++.dg/lto/pr114790_0.C
+ 944a89dbdddf4ca4f396efb802bbd896  gcc/testsuite/g++.dg/lto/pr114790_1.C
  170fab8219ca5d2db78f5026f9bf82c8  gcc/testsuite/g++.dg/lto/pr119067_0.C
  c2fbc4281a4940f3ba50c956b391e55a  gcc/testsuite/g++.dg/lto/pr119067_1.C
  ba9b686c163762488051ec4094a838b2  gcc/testsuite/g++.dg/lto/pr40818_0.C
*************** ee83980c52efcd311fdf334e2fd23f42  gcc/te
*** 26011,26016 ****
--- 26062,26068 ----
  825c715cc564416b76db4cdff16d60ca  gcc/testsuite/g++.dg/opt/pr113705.C
  0324d31ab64ecdfb74347e2e96dd74d2  gcc/testsuite/g++.dg/opt/pr117439.C
  149c3b47d16cfa08669bf79341552440  gcc/testsuite/g++.dg/opt/pr119327.C
+ 46bab0272c3e399fa4db680833cb9a89  gcc/testsuite/g++.dg/opt/pr122394.C
  2896f5b1a96dd9fabb1dbb65cb4c5921  gcc/testsuite/g++.dg/opt/pr13066-1.C
  4f87f86b9f018cae74888e97468b2fe0  gcc/testsuite/g++.dg/opt/pr14029.C
  8fb7e68e9e9b5eb02628e03f5333e645  gcc/testsuite/g++.dg/opt/pr14888.C
*************** a0196ebfddfdcb265613530b34c75302  gcc/te
*** 26328,26333 ****
--- 26380,26386 ----
  d0b5965b4982fc2453056380914a719f  gcc/testsuite/g++.dg/other/anon-union5.C
  498c728995604cce6cd6fb0603cfbad8  gcc/testsuite/g++.dg/other/anon-union6.C
  4f90ececca3ff47581ca71749fda9c86  gcc/testsuite/g++.dg/other/anon-union7.C
+ fe4ccc701c313926fdf04eb36eca6435  gcc/testsuite/g++.dg/other/anon-union8.C
  25bec11b40119085408d52eaa5b86f6e  gcc/testsuite/g++.dg/other/anon2.C
  ac03cab67f2c4f5731d36b19f2ee4f42  gcc/testsuite/g++.dg/other/anon3.C
  735bc52cab8eca56a711c2c10845c981  gcc/testsuite/g++.dg/other/anon4.C
*************** bb6ac4a17ab02af350881f64213ce26e  gcc/te
*** 26959,26964 ****
--- 27012,27018 ----
  73b1cabb6ebba6515fc142024f664fa3  gcc/testsuite/g++.dg/parse/crash70.C
  78546442b1a4a93b74bc9a74697998e4  gcc/testsuite/g++.dg/parse/crash71.C
  c3945b36146c7d629c7336eb3f9329fe  gcc/testsuite/g++.dg/parse/crash77.C
+ 23b7108a88804e5cf4c0a9d029afae56  gcc/testsuite/g++.dg/parse/crash81.C
  5818f331167c496db06ad694932a1beb  gcc/testsuite/g++.dg/parse/crash9.C
  5940e29a523673e2c47048c21c11d678  gcc/testsuite/g++.dg/parse/ctor1.C
  6a4d22d64949d622a19d9e79684aad65  gcc/testsuite/g++.dg/parse/ctor10.C
*************** a0fee4f3ee4678b54afd993b619baa05  gcc/te
*** 27221,27226 ****
--- 27275,27282 ----
  45c8a98fb67b502b90968b85f37350fd  gcc/testsuite/g++.dg/parse/pr113788.C
  4f1090730a2c9b918d79fed001575a31  gcc/testsuite/g++.dg/parse/pr113929.C
  dfa745316c10162491bb418266c2b932  gcc/testsuite/g++.dg/parse/pr116071.C
+ 732ccde523003692267913067f6a0ccd  gcc/testsuite/g++.dg/parse/pr120471.C
+ 225e1d7f8cf80186eac35ff37acc9379  gcc/testsuite/g++.dg/parse/pr120940.C
  2dde7d845edb3fc1b6b06c1f7c1d71f6  gcc/testsuite/g++.dg/parse/pr16696-permissive.C
  f8326578679fecd658e1bec2d3ed7654  gcc/testsuite/g++.dg/parse/pr16696.C
  29f6ba15da1283765b5179abe6707d09  gcc/testsuite/g++.dg/parse/pr18770.C
*************** adfc90a4ec5f7e6acacbdafc592a2862  gcc/te
*** 27504,27509 ****
--- 27560,27566 ----
  6431e5522e8138d482199836afdeb823  gcc/testsuite/g++.dg/pr114501_0.C
  ad9259e6bdf3bdde202871cc62bd27bb  gcc/testsuite/g++.dg/pr115232.C
  907af190ec2f3efd086d2b352c9934cd  gcc/testsuite/g++.dg/pr117919.C
+ 9b72294c06cceb517f37832e017f79c1  gcc/testsuite/g++.dg/pr123575.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
*************** a991f3b843fb36ef428fd3261f7cd8d6  gcc/te
*** 29321,29326 ****
--- 29378,29384 ----
  450c0b9e346d4201c85d9055f20ebf1a  gcc/testsuite/g++.dg/template/unify1.C
  c0294c255af8599c061bc4b5b4fc75ca  gcc/testsuite/g++.dg/template/unify10.C
  09af30adee47658569e7245f1283085e  gcc/testsuite/g++.dg/template/unify11.C
+ 92da0b63f24f1d3a4d4bde6739afa3e2  gcc/testsuite/g++.dg/template/unify13.C
  4559d27962ac65b887c6f4a3a42dc70f  gcc/testsuite/g++.dg/template/unify2.C
  16808e8b62429d390bc5719fd2009b5c  gcc/testsuite/g++.dg/template/unify3.C
  314446f36deb8f9d24cf095763c83315  gcc/testsuite/g++.dg/template/unify4.C
*************** c2a0cf3df84b0f5f4df65937e3fa4da2  gcc/te
*** 29631,29636 ****
--- 29689,29695 ----
  6766aa21b009a63d71d22aa6baba228d  gcc/testsuite/g++.dg/torture/pr111245.C
  25af1620df0107cd03f275ddc7fd98b6  gcc/testsuite/g++.dg/torture/pr111465.C
  fd7e86518ea2a69054ff33aa0689c56b  gcc/testsuite/g++.dg/torture/pr111773.C
+ 5c620542544d327d513aa9525aba2286  gcc/testsuite/g++.dg/torture/pr112400.C
  f5cb8caa482838045861d5ee18445814  gcc/testsuite/g++.dg/torture/pr113896.C
  6c3c5585841ff28b7c4ab8a61978f689  gcc/testsuite/g++.dg/torture/pr113994.C
  ef666186552a9562e70783bbdf98ac33  gcc/testsuite/g++.dg/torture/pr115694.C
*************** ef666186552a9562e70783bbdf98ac33  gcc/te
*** 29638,29647 ****
--- 29697,29716 ----
  fd07ffe5c1e039cfac5f0e7fcc3190eb  gcc/testsuite/g++.dg/torture/pr116460.C
  ea93675f26568f57c77e075dbc9a1f3b  gcc/testsuite/g++.dg/torture/pr116783.C
  f052d3af1586cf42bf5ec8d92e1621ac  gcc/testsuite/g++.dg/torture/pr116927-1.C
+ 433f2d5d832623625319b4192fc7b69c  gcc/testsuite/g++.dg/torture/pr117217-1.C
+ 370446845d836416f63d6f4ab2dbab30  gcc/testsuite/g++.dg/torture/pr117217-2.C
  372a5372bc2611240b35fde2512f27e9  gcc/testsuite/g++.dg/torture/pr118320.C
  f298eddbaaad3dfdc15f6cf9683ff08a  gcc/testsuite/g++.dg/torture/pr11911.C
  9df51f0b5a7e716286f2e97dfd28d477  gcc/testsuite/g++.dg/torture/pr119610.C
  9cede7e8b587157ccdf0f9f6667d6cc8  gcc/testsuite/g++.dg/torture/pr119778.C
+ 0d979e637ca747e39d8182a541458797  gcc/testsuite/g++.dg/torture/pr120987-1.C
+ 75b55c517ba9c0f47c83851f084cb294  gcc/testsuite/g++.dg/torture/pr121870.C
+ 2fa3f60c4a0ae3a4528024698d6d2c3c  gcc/testsuite/g++.dg/torture/pr123596.C
+ fd8e483532e07909315ca8711ef4503b  gcc/testsuite/g++.dg/torture/pr123603.C
+ ca7ea9ef86090651fbec9289f32896ab  gcc/testsuite/g++.dg/torture/pr123729.C
+ 947406bbc75c3117568a96cd4a4cc34b  gcc/testsuite/g++.dg/torture/pr124130.C
+ 61fcf1bc001bfcf25117da95aaa8edd8  gcc/testsuite/g++.dg/torture/pr124135-1.C
+ 101facde39ac59f9b142786ef251d0ca  gcc/testsuite/g++.dg/torture/pr124135-2.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
  e980bf95890544d46879b89f7aa98df6  gcc/testsuite/g++.dg/torture/pr30567.C
*************** ad6c0b4132032f21f64bfdd4836d3313  gcc/te
*** 30448,30453 ****
--- 30517,30523 ----
  59f2687e6719ef7d3d19b4de0e99a075  gcc/testsuite/g++.dg/ubsan/pr105729.C
  06fb5e3c91f4d1b4f58ee978dd2b4b30  gcc/testsuite/g++.dg/ubsan/pr116449.C
  a9c7210a5fb28a26cd54ad5ce0872a53  gcc/testsuite/g++.dg/ubsan/pr117259.C
+ a4c08c025f777efea858788766890b26  gcc/testsuite/g++.dg/ubsan/pr120471.C
  a654df71119821a4303cc9fe0501191b  gcc/testsuite/g++.dg/ubsan/pr59250.C
  420a6623146bb014dc1310134356d81f  gcc/testsuite/g++.dg/ubsan/pr59306.C
  79755a51c3cbb97ff48bd411272f6b08  gcc/testsuite/g++.dg/ubsan/pr59331.C
*************** a774f9ba94df372c6d30a93f182668b8  gcc/te
*** 30582,30587 ****
--- 30652,30658 ----
  917d9d7e1f7b3dec4bc3be8a0e121df9  gcc/testsuite/g++.dg/vect/pr112961.cc
  856046a2a1b7cbd5bfc1768e434b4a1d  gcc/testsuite/g++.dg/vect/pr114464.cc
  53f2f1665d0bd22cbc1735b16ee8dc34  gcc/testsuite/g++.dg/vect/pr115278.cc
+ 1e03af311dcaa23b477b4a5718d84d03  gcc/testsuite/g++.dg/vect/pr116674.cc
  02ab0e7dea4c30ddeaecb971c0b8241e  gcc/testsuite/g++.dg/vect/pr19951.cc
  e7c5a636a280962b70166d1494223f9c  gcc/testsuite/g++.dg/vect/pr21218.cc
  9a0a6f56bdb2cc697abc78c901418a19  gcc/testsuite/g++.dg/vect/pr21734_1.cc
*************** c32e2d9c26f73ceab75448129f154a62  gcc/te
*** 30829,30834 ****
--- 30900,30906 ----
  c1c94fbed68712c556c47675075fab08  gcc/testsuite/g++.dg/warn/Wduplicated-branches6.C
  df34a3119747a72018c056305c89abd6  gcc/testsuite/g++.dg/warn/Wduplicated-branches7.C
  b9cda5e4dff795d15eaf9fe9108df523  gcc/testsuite/g++.dg/warn/Wduplicated-branches8.C
+ b78135999b9fbdc92326bfae8b355202  gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C
  53e8ba692e810326b135e28115da516a  gcc/testsuite/g++.dg/warn/Wduplicated-cond1.C
  aee46bcb7031162dcee9c8ebe1228c6f  gcc/testsuite/g++.dg/warn/Wduplicated-cond2.C
  3fd71ef4467ff2d96bedfb8624c9f6c9  gcc/testsuite/g++.dg/warn/Wduplicated-cond3.C
*************** f1360330e2c03adfb9e1efd9136d3f31  gcc/te
*** 30904,30909 ****
--- 30976,30982 ----
  1184b1df4ae243b5ab6917e0e3b219b6  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc-2.C
  beb0dbeb6a47cd7fb34d04b431670905  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc-3.C
  d183cd43f2c2caf1b71024ba3762ff44  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc.C
+ c64dfbca6c8c86f3fd65230eca021a72  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-10.C
  74decc16b8ca63b12db874b7dde868cf  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C
  5c4cad449e21fe0fade92c9c0d19fb5f  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-3.C
  da3dbc8526151b41f4a741a5d5e51eae  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C
*************** cbb30a4d3c73f183db77e6da8a13e3a9  gcc/te
*** 34869,34874 ****
--- 34942,34950 ----
  f7378d596bb7308498db40ad34fd8dab  gcc/testsuite/g++.target/aarch64/bitfield-abi-warning.h
  64610704e2fb7b814ffc84b6b28714a0  gcc/testsuite/g++.target/aarch64/complex-init.C
  c11e5f97e7a5971cc5c5017024f54496  gcc/testsuite/g++.target/aarch64/diag_aka_1.C
+ 5c7d9c457935aed97ec5411da8248b77  gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C
+ a374ccd68e050f2f5a99a70ed6099adf  gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C
+ 6ae7e639f92550ad23b9ec3fe950fa14  gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C
  4320de0414b96b162e7734443992dd38  gcc/testsuite/g++.target/aarch64/interference.C
  1523e6ba24b79e403ea7663afe5c1dfa  gcc/testsuite/g++.target/aarch64/mv-1.C
  48d1f2ca95056b77c6d78e74ad9b692f  gcc/testsuite/g++.target/aarch64/mv-pragma.C
*************** b3f9da722f5270cda4a26396283bbbe9  gcc/te
*** 34898,34903 ****
--- 34974,34980 ----
  3dce24cbf6e8a9d6b104a5174b42ccf6  gcc/testsuite/g++.target/aarch64/pr109661-2.C
  af15d8508e94dffd343c693011e63fd4  gcc/testsuite/g++.target/aarch64/pr109661-3.C
  9b78f2399b3493ce846b6fb03c77ee6c  gcc/testsuite/g++.target/aarch64/pr109661-4.C
+ cee7440840fa58ea5280af197f3054eb  gcc/testsuite/g++.target/aarch64/pr124126-1.C
  1755134bcb84bdbcfd658df7150649e0  gcc/testsuite/g++.target/aarch64/pr89752.C
  ba9d23bf9864be2b6061429c3faa49b7  gcc/testsuite/g++.target/aarch64/pr94052.C
  376b3a47b3ddd89e448a765321d0e622  gcc/testsuite/g++.target/aarch64/pr94514.C
*************** af40dade74feb71f52277a623af87930  gcc/te
*** 34912,34917 ****
--- 34989,34996 ----
  3de0947a17512aedda9a0acc7bcb39ed  gcc/testsuite/g++.target/aarch64/sme/exceptions_1.C
  79243c6f16baddd2d73325ca3aa928e2  gcc/testsuite/g++.target/aarch64/sme/exceptions_2.C
  6617c08f1c35a7b00949b2a7c76d1e15  gcc/testsuite/g++.target/aarch64/sme/keyword_macros_1.C
+ f67e60297ad5bbcc8d7e658371a440ca  gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C
+ 4b5582bfc7d149b0e0f3bb9c45b01b23  gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C
  7c9f331f9af372aa80eabfedf84ae4d1  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_1.C
  7fce27ec45311cf4d170ad324de8da10  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_2.C
  c5a724ac5d50e2883deaaee052d9855e  gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
*************** cdabe3aee66dacd2306a52f295e6ad65  gcc/te
*** 35044,35055 ****
--- 35123,35136 ----
  f3ce91773bd0b4a3127c481ccd50f20e  gcc/testsuite/g++.target/aarch64/sve/dup_sel_4.C
  88995b2addb79f14a72ba650d83a3920  gcc/testsuite/g++.target/aarch64/sve/dup_sel_5.C
  9e6f261244b524db00958d47111eef62  gcc/testsuite/g++.target/aarch64/sve/dup_sel_6.C
+ ed268bb0c6479d4c5a1aa2efea8c023a  gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C
  57a0aa7896383cbb0273342d58a4a7b5  gcc/testsuite/g++.target/aarch64/sve/max_1.C
  ab6c5e333d0a740ae5ecff69966813a2  gcc/testsuite/g++.target/aarch64/sve/min_1.C
  6bb662ee32d75fad86cbbcc07aab9998  gcc/testsuite/g++.target/aarch64/sve/pr102252.C
  0dc60096927b240a4fb696311ad6b402  gcc/testsuite/g++.target/aarch64/sve/pr107920.C
  a36c6629cdaa92f5a41aa0c862cf5a54  gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C
  a99137b765de9aa71ce57dc37592e682  gcc/testsuite/g++.target/aarch64/sve/pr119706.C
+ 81119ead1d39599a647b5c79f9d21a85  gcc/testsuite/g++.target/aarch64/sve/pr121449.C
  29fcc7f7695fcab2e4779698100f3053  gcc/testsuite/g++.target/aarch64/sve/pr96974.C
  6c0e94c363caf9e62df35ea98b4918ed  gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C
  e64000c150bb204c31dca884ee33dd4f  gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C
*************** bb1656a836158ee012bbed4bc10d85f0  gcc/te
*** 35092,35097 ****
--- 35173,35179 ----
  4a44f470ea24c20123902146bd5273ad  gcc/testsuite/g++.target/i386/avx512bw-pr98537-1.C
  3ec2a7fddbb432f8b259b0ada49c99a8  gcc/testsuite/g++.target/i386/avx512f-helper.h
  cbe0c3947d51802a4bf66ce01377fb64  gcc/testsuite/g++.target/i386/avx512f-pr96891-1.C
+ 8763b4590fa0e7aa581be6701962a55f  gcc/testsuite/g++.target/i386/avx512fp16-pr123607.C
  c89ba9cfe468937652adb223c2fe88f9  gcc/testsuite/g++.target/i386/avx512fp16-vcondmn-minmax.C
  d5287c6ed2bebf01314526c64e9b26ba  gcc/testsuite/g++.target/i386/avx512fp16-vcondmn-vec.C
  5df96b365d4dc9fff3b4d57ee1d9f8e5  gcc/testsuite/g++.target/i386/avx512vl-pr100738-1.C
*************** aa1fa5c91fdecbdc2a47df1fff1bf867  gcc/te
*** 35237,35242 ****
--- 35319,35331 ----
  c0a91cb95c28284467d6172e3d18f9a2  gcc/testsuite/g++.target/i386/pr114810.C
  3ccb97fa4243cd6093fd83a5bf2d35fb  gcc/testsuite/g++.target/i386/pr115351.C
  309d3ebda65ef0d79e21d0a9c0310055  gcc/testsuite/g++.target/i386/pr119689.C
+ 8881751e1efd14bcab3460abca01e627  gcc/testsuite/g++.target/i386/pr122446-1.C
+ e7e909b0858a352117bc6ee5a8fcafc7  gcc/testsuite/g++.target/i386/pr122446-amxbf16.C
+ b48e2095b969e9e4d541b80007eaed1f  gcc/testsuite/g++.target/i386/pr122446-amxcomplex.C
+ ea015573ee8ddabae38c2a615f8228fb  gcc/testsuite/g++.target/i386/pr122446-amxfp16.C
+ 59ffb1a0656cc43a87c4b7e240fb28c6  gcc/testsuite/g++.target/i386/pr122446-amxint8.C
+ ffbb5e0bd5668625c6d5cef769228118  gcc/testsuite/g++.target/i386/pr122446-amxtile.C
+ fe98d8bd643079ebf7d12496d3189d03  gcc/testsuite/g++.target/i386/pr123779.C
  55fb67abf6517f92b1a0240d2c06b5c5  gcc/testsuite/g++.target/i386/pr35513-1.C
  14dde546e4eefec7aa6d1ac41261cb16  gcc/testsuite/g++.target/i386/pr35513-2.C
  1c706f97b6d93c0124dc4a203c98f6d2  gcc/testsuite/g++.target/i386/pr57362.C
*************** dfaa547e8fb7df38c4d964cefef4b708  gcc/te
*** 35301,35306 ****
--- 35390,35396 ----
  73c620e4381452d87e16e3a0110f4413  gcc/testsuite/g++.target/loongarch/loongarch.exp
  3e379ce66f2b5fd83481c50aad661033  gcc/testsuite/g++.target/loongarch/pr106096.C
  93be464703e23aa90bcb86e5faf6250d  gcc/testsuite/g++.target/loongarch/pr106828.C
+ beefcfa1d7ebe27a8c765de46d63bba5  gcc/testsuite/g++.target/loongarch/pr117575.C
  f13d97450413e73ef42096f6d86f33b9  gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C
  20d9436c682a4415acafb5c98046ba99  gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C
  0326a0afb833c5dbd49b5d623c8dd93b  gcc/testsuite/g++.target/mips/cxx17_empty_base.C
*************** ea50428d09d0e781698b21023398bfee  gcc/te
*** 35356,35361 ****
--- 35446,35453 ----
  92cbd869a66e265db57a505d568038a0  gcc/testsuite/g++.target/powerpc/pr111367.C
  d2c732bc509e2385a06f111c954c2700  gcc/testsuite/g++.target/powerpc/pr111828-1.C
  d573b767c2de9d8c280bc5d867cf8c50  gcc/testsuite/g++.target/powerpc/pr111828-2.C
+ 30ee59b9e5c6ade87b3a5e9da350db58  gcc/testsuite/g++.target/powerpc/pr124133-1.C
+ 4a6ef2f6eb32a0a571721b0181a6bd02  gcc/testsuite/g++.target/powerpc/pr124133-2.C
  9c74007c234a12d4c947bb4d6e55c63b  gcc/testsuite/g++.target/powerpc/pr65240-1.C
  436918461ef83adf9e3f0a761f3eab86  gcc/testsuite/g++.target/powerpc/pr65240-2.C
  1e1aa0282e8b112947082f2503881b91  gcc/testsuite/g++.target/powerpc/pr65240-3.C
*************** c7172cd9252e12b67637bd9c4179611f  gcc/te
*** 35442,35447 ****
--- 35534,35540 ----
  1f98b1d1757ebed2e4df3c91f91846f5  gcc/testsuite/g++.target/s390/pr102024-4.C
  f0a679d402cd83e81a6efa4bbb02d02b  gcc/testsuite/g++.target/s390/pr102024-5.C
  f65e23ee2638d7bc7c063a2f41350d9c  gcc/testsuite/g++.target/s390/pr102024-6.C
+ 377180e93d364db46b93992e870cdab7  gcc/testsuite/g++.target/s390/pr119834.C
  63c9cacf807bdee09a1606a202373f30  gcc/testsuite/g++.target/s390/pr94704-1.C
  f536562eba9a9954ace3a616ac52f438  gcc/testsuite/g++.target/s390/pr94704-2.C
  673a3b45283bd1b872f1b198781a14a3  gcc/testsuite/g++.target/s390/pr94704-3.C
*************** a2656a59d00f50e3a24dc4e71bfb3973  gcc/te
*** 36489,36494 ****
--- 36582,36588 ----
  9b56cc2b8b8b471730e0b14ce4b78300  gcc/testsuite/gcc.c-torture/compile/pr103813.c
  4a6f867d2a09bace8b7a324f6a4f5237  gcc/testsuite/gcc.c-torture/compile/pr104327.c
  43abe0671a6ea621a4ca89fda41e49b8  gcc/testsuite/gcc.c-torture/compile/pr104499.c
+ acee4f72cc5b1f29df02485de18a69c0  gcc/testsuite/gcc.c-torture/compile/pr105192.c
  b8c09513cab59ca8f22d38e515f50fa8  gcc/testsuite/gcc.c-torture/compile/pr105234.c
  112c17f5638bc2cf5c04c9e917943218  gcc/testsuite/gcc.c-torture/compile/pr105247.c
  9477024f0d6e7d41ab0ee7d8ab3d3e58  gcc/testsuite/gcc.c-torture/compile/pr106030.c
*************** cddb5f327c3c1dc3f843d95d86f7f6a9  gcc/te
*** 36560,36566 ****
--- 36654,36668 ----
  ece87744c4e664bf39922d9937465df1  gcc/testsuite/gcc.c-torture/compile/pr115143-2.c
  14405634ff4726e79f727af592887eec  gcc/testsuite/gcc.c-torture/compile/pr115143-3.c
  a374b3675317752237cc478b2e662a04  gcc/testsuite/gcc.c-torture/compile/pr115277.c
+ 4b342b76caa9e8e213c9b81ca64d1333  gcc/testsuite/gcc.c-torture/compile/pr116600.c
+ 0385d5805cb6d90dc8a17f2f44d3450e  gcc/testsuite/gcc.c-torture/compile/pr117358.c
  6d7416e999725c0f023c4322893b1214  gcc/testsuite/gcc.c-torture/compile/pr118501.c
+ ab667119ae39828bcd103bb5c5434cdc  gcc/testsuite/gcc.c-torture/compile/pr120250.c
+ 9f275c2b6e96b2a9fdee0b1a4aee96e9  gcc/testsuite/gcc.c-torture/compile/pr123365.c
+ 8c484e5df297a43329f4182432f35fda  gcc/testsuite/gcc.c-torture/compile/pr123386.c
+ ffc2d0352a16ed7c76c12152bde69753  gcc/testsuite/gcc.c-torture/compile/pr123703.c
+ b8b52e8f02c4a8a36a13b5243b69bbe6  gcc/testsuite/gcc.c-torture/compile/pr124250.c
+ 5ac4ade7a6a5945ebcf534694df7f5fc  gcc/testsuite/gcc.c-torture/compile/pr125039.c
  33c7141fcf5b1add3ddd2be0100f1f0d  gcc/testsuite/gcc.c-torture/compile/pr12517.c
  ec16b12ab11c499bf321be18ea59da33  gcc/testsuite/gcc.c-torture/compile/pr12578.c
  86f3d5cf87d24e97aa663b79f2d0ac5d  gcc/testsuite/gcc.c-torture/compile/pr12899.c
*************** a1b7f9f7cdc342ff771a30f551e3bc3b  gcc/te
*** 38693,38698 ****
--- 38795,38805 ----
  5802f1a3b7f07033d3e5c9e6bc333779  gcc/testsuite/gcc.c-torture/execute/pr118915.c
  fd7185346c3b94c0a7f7afba7b6bc241  gcc/testsuite/gcc.c-torture/execute/pr119071.c
  b7150a91a8e64c0a2f8d47a9f857fd6e  gcc/testsuite/gcc.c-torture/execute/pr119291.c
+ d41fd1ea09327fdf9b68f657aea5661c  gcc/testsuite/gcc.c-torture/execute/pr122000.c
+ 529fc2a1e92dc790d3766cd8554fc89c  gcc/testsuite/gcc.c-torture/execute/pr122943.c
+ cb4c82184137c0933c1bae60a7df15bc  gcc/testsuite/gcc.c-torture/execute/pr123864.c
+ 95b7f2d687a5a5e2df1e09fad845a195  gcc/testsuite/gcc.c-torture/execute/pr123978.c
+ 256e8d04f36f265861609fbe23468388  gcc/testsuite/gcc.c-torture/execute/pr124358.c
  80c02c70a0b6b91b06942e395c34960f  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
  987c511633ad57d9f08d352eb9512819  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
  f7f514cfbd791b0c828e0710493b0910  gcc/testsuite/gcc.c-torture/execute/pr15262.c
*************** d05a3955306cf8591941d3856debd78b  gcc/te
*** 40673,40678 ****
--- 40780,40786 ----
  4b038f337620ba8e85c0752005cb1818  gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-uninitialized.c
  cc641b4453a1b743c66c43ea1c92e357  gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-zero.c
  0305098634ca2cb3c30ead28e44c8416  gcc/testsuite/gcc.dg/analyzer/torture/vector-extract-1.c
+ 7cbf5c3e60e6e7d2f24e687830ae53de  gcc/testsuite/gcc.dg/analyzer/ubsan-pr118300.c
  547ceffa8e845c31d902790c7e0e3057  gcc/testsuite/gcc.dg/analyzer/uninit-4.c
  8c87a229f0dd190ba422467801b8229b  gcc/testsuite/gcc.dg/analyzer/uninit-7.c
  541b34b1ad44afd6ca6d0a768db2946a  gcc/testsuite/gcc.dg/analyzer/uninit-CWE-457-examples.c
*************** bb7d4e0bf6a65f0461a509285654b4ec  gcc/te
*** 41223,41228 ****
--- 41331,41342 ----
  be147aec3abbd5b08f579a216734b619  gcc/testsuite/gcc.dg/bitint-118.c
  c18469175af3ebdf263d34347ebe2d40  gcc/testsuite/gcc.dg/bitint-12.c
  d217543f954eb3f31e246355824f653a  gcc/testsuite/gcc.dg/bitint-120.c
+ 7d02ff9539e664bbbcfc85b464d916c1  gcc/testsuite/gcc.dg/bitint-123.c
+ 11e6d8eaf7b16f3f8aeaf1c2e626996f  gcc/testsuite/gcc.dg/bitint-124.c
+ c446cf331d60d19eea3950d7f444f8b3  gcc/testsuite/gcc.dg/bitint-125.c
+ 240ade406c4daf5c641e5c4f0bdd5ef5  gcc/testsuite/gcc.dg/bitint-126.c
+ 3fa6e340272f61c5b425b6a54732c94f  gcc/testsuite/gcc.dg/bitint-127.c
+ a7f36d213cef759e44b1ea369391b70d  gcc/testsuite/gcc.dg/bitint-128.c
  aa6e262f1d508ec048e76ac4af6675a4  gcc/testsuite/gcc.dg/bitint-13.c
  e6db29256563268a3c327706e78c79a4  gcc/testsuite/gcc.dg/bitint-14.c
  c748706240385773f27caba61cbbcbd8  gcc/testsuite/gcc.dg/bitint-15.c
*************** d05bdce55447fc39d09a1133e04e88b4  gcc/te
*** 42381,42386 ****
--- 42495,42501 ----
  45e735b0d33fac192a119347115d5b0c  gcc/testsuite/gcc.dg/completion-4.c
  649ce6d53eeda31c7cb4947fab7ac38f  gcc/testsuite/gcc.dg/completion-5.c
  a86556f4f0c72c0bee2f104440830505  gcc/testsuite/gcc.dg/complex-1.c
+ 79e8cd8a2d1264875feb64c5169b21d2  gcc/testsuite/gcc.dg/complex-10.c
  ec2d607c705e532267dc3c09849c554f  gcc/testsuite/gcc.dg/complex-2.c
  da2226add6799fd192e2b367404d1b0b  gcc/testsuite/gcc.dg/complex-2.h
  7cbd734da9d8330b57f4e78af353b9f2  gcc/testsuite/gcc.dg/complex-3.c
*************** c468bc46d49a90772b63f81541d1cdf0  gcc/te
*** 43439,43444 ****
--- 43554,43560 ----
  707a475740543f28e7d4a1a1c6dd5e2a  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-1.c
  e9e3452e14dfbc6213d63bbc19163128  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-2.c
  0d635b8ca4b67cf7e028abe96d7d8040  gcc/testsuite/gcc.dg/dfp/bitint-1.c
+ 143efb0e67af1d841185aad9485eab11  gcc/testsuite/gcc.dg/dfp/bitint-10.c
  414a321d64714fe3be448102cb005e09  gcc/testsuite/gcc.dg/dfp/bitint-2.c
  ad33d2cf22fb59092bf9e1c000ea0030  gcc/testsuite/gcc.dg/dfp/bitint-3.c
  0c1d838b29aab0ee3c50e46966b6c652  gcc/testsuite/gcc.dg/dfp/bitint-4.c
*************** c55b156c142f8f4672565244e7c0895f  gcc/te
*** 43446,43451 ****
--- 43562,43568 ----
  563460c01a4dd08dcda56d615b1cbd80  gcc/testsuite/gcc.dg/dfp/bitint-6.c
  b08dab0e4e62a437ff7739271c7154ba  gcc/testsuite/gcc.dg/dfp/bitint-7.c
  f892b84adc78d9841b4c69a387a90a88  gcc/testsuite/gcc.dg/dfp/bitint-8.c
+ 5aad3660822951a77e1e44e866886f80  gcc/testsuite/gcc.dg/dfp/bitint-9.c
  2d5128bddc0d69a547254935ce84b555  gcc/testsuite/gcc.dg/dfp/builtin-complex.c
  bbb3a4b9649cd82ff38969cb002504a5  gcc/testsuite/gcc.dg/dfp/builtin-snan-1.c
  d52de125edb1b6785a1995c8d138b9f0  gcc/testsuite/gcc.dg/dfp/builtin-snan-2.c
*************** cc8c86a30d71d6b435bb74d46a9ec3e3  gcc/te
*** 43509,43514 ****
--- 43626,43632 ----
  b6f9108cd4878577de83d43be75185ce  gcc/testsuite/gcc.dg/dfp/pr104510.c
  440b561ad1d9037d4559c7011d636b7a  gcc/testsuite/gcc.dg/dfp/pr104557.c
  82ea312c34b2d7bbfe3d7dc309a1831f  gcc/testsuite/gcc.dg/dfp/pr108068.c
+ 59bca99093471aec4689a575eb6354c1  gcc/testsuite/gcc.dg/dfp/pr120631.c
  d8629eb8e0c765b5a7daa583cb8eedad  gcc/testsuite/gcc.dg/dfp/pr31344.c
  b59fd600db434af135f39c38e21e2d74  gcc/testsuite/gcc.dg/dfp/pr37435.c
  17353eaf91a4f3959fa168324f86f6f5  gcc/testsuite/gcc.dg/dfp/pr41049.c
*************** cd38ec3195ea21395e6d6950ff620410  gcc/te
*** 44424,44429 ****
--- 44542,44549 ----
  a633f425b4fdde0a7b6f0aa6aa2f2754  gcc/testsuite/gcc.dg/gomp/pr108435.c
  20a3ca0acce7dbf1520d374c9470fc34  gcc/testsuite/gcc.dg/gomp/pr110485.c
  7d1b62adb42c340855e993cf480a19ec  gcc/testsuite/gcc.dg/gomp/pr114075.c
+ ec1d4016ba60492b723014b99d2804e6  gcc/testsuite/gcc.dg/gomp/pr121453.c
+ c80489ac8415077c5335cf251371d6e9  gcc/testsuite/gcc.dg/gomp/pr123876.c
  7a163e65fe52b23fc85f2daa18c442ee  gcc/testsuite/gcc.dg/gomp/pr25874.c
  597de3ed24e1bc1c650af918589d83c3  gcc/testsuite/gcc.dg/gomp/pr25989.c
  0bd3e8dc860de61dd8e09229c090e1f5  gcc/testsuite/gcc.dg/gomp/pr25990.c
*************** a7add68c69c48bffecd543855bc97366  gcc/te
*** 45702,45707 ****
--- 45822,45829 ----
  313b5ef23d14915b2a6f61b519f95205  gcc/testsuite/gcc.dg/lto/attr-weakref-1_0.c
  8c3a2c4fa0f190c6d2749b5524ab98c4  gcc/testsuite/gcc.dg/lto/attr-weakref-1_1.c
  5a674e54883d5de8ea06860e38b0cd2e  gcc/testsuite/gcc.dg/lto/attr-weakref-1_2.c
+ 18e88a9f17f78b46c1ce166e48f8d785  gcc/testsuite/gcc.dg/lto/attr-weakref-2_0.c
+ 7e33f6cf523487191171fa66361dc197  gcc/testsuite/gcc.dg/lto/attr-weakref-2_1.c
  77a8ef1bedade751008154d0c1ea49c8  gcc/testsuite/gcc.dg/lto/c-compatible-types-1_0.c
  2efe9845bc7f2a94bdb6da1ddfe698fc  gcc/testsuite/gcc.dg/lto/c-compatible-types-1_1.c
  fd5005c6fbb07e4f27713809ef1f5759  gcc/testsuite/gcc.dg/lto/chkp-privatize-1_1.c
*************** a1748e20d9862396a285906364208f44  gcc/te
*** 45766,45771 ****
--- 45888,45903 ----
  9f07bf819862bc85bb8767d97947d837  gcc/testsuite/gcc.dg/lto/pr113907_1.c
  4d872eeace42ef5001147db36f0eb548  gcc/testsuite/gcc.dg/lto/pr113907_2.c
  d043bebe314f4799a1f686632b791cca  gcc/testsuite/gcc.dg/lto/pr115815_0.c
+ f5f860d71dee47b53b433d6f33223758  gcc/testsuite/gcc.dg/lto/pr122515_0.c
+ 42ad058eb75d3c988533e8f8eecd45c5  gcc/testsuite/gcc.dg/lto/pr122515_1.c
+ c8348d97dcd57b983e2c4c696a5e8450  gcc/testsuite/gcc.dg/lto/pr122515_2.c
+ bc6aab4d748ab26c406bcfcfd94e43f4  gcc/testsuite/gcc.dg/lto/pr122515_3.c
+ b58dd1aaa3132751d46233b1e6a00a3e  gcc/testsuite/gcc.dg/lto/pr122515_4.c
+ e93496b3dab62466b11fccc4eb64033f  gcc/testsuite/gcc.dg/lto/pr122515_5.c
+ ce39b21091008775415dbe099db0aaf5  gcc/testsuite/gcc.dg/lto/pr122515_6.c
+ 7f03e9f210325e44859aafac7ad2f239  gcc/testsuite/gcc.dg/lto/pr122515_7.c
+ 6028a2dec4dfcb2bf14d8b228fb95959  gcc/testsuite/gcc.dg/lto/pr122515_8.c
+ ba260514a6f9ba02270018e5ccb3fc9c  gcc/testsuite/gcc.dg/lto/pr122515_9.c
  5192817b2492ca93ffadce3b4a5e4794  gcc/testsuite/gcc.dg/lto/pr27898_0.c
  c5f48897247dfaec60df4e32beffcd8e  gcc/testsuite/gcc.dg/lto/pr27898_1.c
  2ad724786bc4b555a7f31e8b3bf164b6  gcc/testsuite/gcc.dg/lto/pr28706_0.c
*************** d98596956367fc29b9341da6c0f03f55  gcc/te
*** 46543,46548 ****
--- 46675,46682 ----
  2eebdeb5aef44432de1498de14cbf4e6  gcc/testsuite/gcc.dg/pr101266.c
  a7ea71615239b0d5a09bdb20e483a02f  gcc/testsuite/gcc.dg/pr101285-1.c
  cbe7e390158f186ae3fd0f808bea7563  gcc/testsuite/gcc.dg/pr101294.c
+ 280ab2738fa9f4a59440b24de22faee0  gcc/testsuite/gcc.dg/pr101312-1.c
+ 1e4a8d2edc5aa23b12908e90b5487800  gcc/testsuite/gcc.dg/pr101312-2.c
  a03b0a2a9da12c5aa5f258d44f7cba03  gcc/testsuite/gcc.dg/pr101364-1.c
  70303171ed7f5b2cba05e6b98daad2ab  gcc/testsuite/gcc.dg/pr101384.c
  566100ed369cb8ddbb77ca59ac7f4416  gcc/testsuite/gcc.dg/pr101403.c
*************** b4bb8ae97fc12f1c66b22b9149ca7a2b  gcc/te
*** 46817,46822 ****
--- 46951,46957 ----
  26cb03e00d88f4257622852ed3e5369b  gcc/testsuite/gcc.dg/pr109327.c
  45f9003776530da05643fd2fcd9640b8  gcc/testsuite/gcc.dg/pr109392.c
  c84c4385dc7b913c1ab044bf620d7696  gcc/testsuite/gcc.dg/pr109409.c
+ e3305bd5445d5fff018b1f9ab0c905d3  gcc/testsuite/gcc.dg/pr109410-2.c
  8c5ddd68de1ed874eb52f91b7136909e  gcc/testsuite/gcc.dg/pr109410.c
  3399ef12e5625e30f72a928ee7afca74  gcc/testsuite/gcc.dg/pr109412.c
  86a351ab8a6255c1c7e39f673dcac916  gcc/testsuite/gcc.dg/pr109417.c
*************** c8dd934a48d7e3b1838eba0a9b59da95  gcc/te
*** 46958,46963 ****
--- 47093,47099 ----
  915d1c3bdd1ce10f8b739772e4406bf6  gcc/testsuite/gcc.dg/pr115502.c
  6ba8ec161f815bc3e024b67bfffd9530  gcc/testsuite/gcc.dg/pr115646.c
  8a0ca2cbf65dafe6cccb9a0465069fcc  gcc/testsuite/gcc.dg/pr116034.c
+ 6adb8da8e1b0e69504276878042cf1d4  gcc/testsuite/gcc.dg/pr116053-1.c
  c44ac8a093cda751002f1697cad3bee4  gcc/testsuite/gcc.dg/pr116284.c
  7820d64b46e8082950940bc4a0bfba8c  gcc/testsuite/gcc.dg/pr116290.c
  298938472467086a22ec44a01fb0ee8f  gcc/testsuite/gcc.dg/pr116481.c
*************** cca17c29951566d10372eb936be3afeb  gcc/te
*** 46970,46975 ****
--- 47106,47112 ----
  4de2a7a2ac95300f89928764d873895d  gcc/testsuite/gcc.dg/pr117104.c
  39da48ce24fb558efbc78d75a88467b5  gcc/testsuite/gcc.dg/pr117145-1.c
  63803de207f2916bad86717cde438311  gcc/testsuite/gcc.dg/pr117145-2.c
+ 809d1e4fe382fd35194849af2413cb9f  gcc/testsuite/gcc.dg/pr117239.c
  e141af51e94bbc37f37d1c4c3ea2f9bf  gcc/testsuite/gcc.dg/pr117245.c
  22c935f2bff095783388f4e05eabe99b  gcc/testsuite/gcc.dg/pr117254.c
  2fdaaf6f7a5cac0bc0536de3a8e9cc31  gcc/testsuite/gcc.dg/pr117391.c
*************** a3d075dd1b96232581aa40c9e02294e1  gcc/te
*** 46985,46990 ****
--- 47122,47144 ----
  23b8c99f9e2dfda91a95f1195ab38bfd  gcc/testsuite/gcc.dg/pr119183.c
  5b4015cb994569a43c505c35b96cda44  gcc/testsuite/gcc.dg/pr119204.c
  212cef6b05e312dbd1f377cf4e35ab99  gcc/testsuite/gcc.dg/pr120048.c
+ 9444444b4f048eadd4b6a2d7592f5fca  gcc/testsuite/gcc.dg/pr120480.c
+ fb8a0a60fb2754e29f845aad904922d4  gcc/testsuite/gcc.dg/pr120560.c
+ 4a9d9632d82cf6c4f4f4acbad8ab018d  gcc/testsuite/gcc.dg/pr120638.c
+ f67888cb77a175aca5793c68c576187f  gcc/testsuite/gcc.dg/pr121104.c
+ 7032b52dc2dd1e6cab514293c2d0b276  gcc/testsuite/gcc.dg/pr121322.c
+ 3675df2622072bf0e5cccbf94e93a50f  gcc/testsuite/gcc.dg/pr122126_vextr.c
+ b975ebfa27ac446e553bacbb75421590  gcc/testsuite/gcc.dg/pr122126_vset.c
+ 9fcb8913b9a18055b2a811284d59780e  gcc/testsuite/gcc.dg/pr123018.c
+ 3190514d319cec9f570a97df97be613b  gcc/testsuite/gcc.dg/pr123294-1.c
+ 5653206b785e83314fab2ad87cd4c262  gcc/testsuite/gcc.dg/pr123300.c
+ 3e218010f127737b8ec6efbf8cb00273  gcc/testsuite/gcc.dg/pr123431.c
+ 2e58c4d553f61913c629f0f4e16cef6c  gcc/testsuite/gcc.dg/pr123537.c
+ 5cd501fa005281d9c622810307478c79  gcc/testsuite/gcc.dg/pr123882.c
+ f402be89e4891c76c691c8144fe168f7  gcc/testsuite/gcc.dg/pr124138.c
+ 32cf8bc03bc1ee1694db58a529d26406  gcc/testsuite/gcc.dg/pr124454-1.c
+ 4ac96a747a32d5c51b5be5c05cdd21c5  gcc/testsuite/gcc.dg/pr125019.c
+ ab60b475998ea1ed92a9002d6336bfd6  gcc/testsuite/gcc.dg/pr125501.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** b36a66c501ef03ad7cedb1c40484affd  gcc/te
*** 49627,49632 ****
--- 49781,49787 ----
  359473db5cdd37f1bf6095e84675f821  gcc/testsuite/gcc.dg/strlenopt-93.c
  088575aea180cd1ef854fcc43bef2769  gcc/testsuite/gcc.dg/strlenopt-94.c
  92d0e4eba5d71d4f20fc6e1a8575d10f  gcc/testsuite/gcc.dg/strlenopt-95.c
+ 7acdb4df3aa6d4d3b2a024a99bbaa231  gcc/testsuite/gcc.dg/strlenopt-97.c
  b5f70e58553a0938c1120805bb7995ab  gcc/testsuite/gcc.dg/strlenopt.h
  984ef97553c0d059b2563ed51439cb62  gcc/testsuite/gcc.dg/strncmp-1.c
  f58f592113e43197dadf58bbb685b20d  gcc/testsuite/gcc.dg/strncmp-2.c
*************** e84ed2b9613e7dc3e0944e6f8c30bd59  gcc/te
*** 49984,49989 ****
--- 50139,50145 ----
  d74952b1e73d78295fc0ccb16c0a8b6f  gcc/testsuite/gcc.dg/torture/bitint-74.c
  896ba6298bac21304239e8c0dcbadbd9  gcc/testsuite/gcc.dg/torture/bitint-76.c
  cf2a2337cf009457d836bd48e49c0af3  gcc/testsuite/gcc.dg/torture/bitint-8.c
+ 368a2f51dfadfa4e9fbd0017065b6a83  gcc/testsuite/gcc.dg/torture/bitint-85.c
  4d03bd57dac0507a44cc15b9afacd8a3  gcc/testsuite/gcc.dg/torture/bitint-9.c
  cf9904d4026e69bddaf745011bbaaab3  gcc/testsuite/gcc.dg/torture/builtin-attr-1.c
  c3c39411545c83e500562780b71883b6  gcc/testsuite/gcc.dg/torture/builtin-complex-1.c
*************** b04080329963def55af4aa7a95268fbe  gcc/te
*** 50014,50020 ****
  fa7bdb79eb170773050b26a5ed2ae1ec  gcc/testsuite/gcc.dg/torture/builtin-math-3.c
  86c9312908e71a32a216fd720343d58f  gcc/testsuite/gcc.dg/torture/builtin-math-4.c
  091ba46b9b5948f7b1173f21c6c558b6  gcc/testsuite/gcc.dg/torture/builtin-math-5.c
! 35aafd27620207da2f66dd0e44ff780f  gcc/testsuite/gcc.dg/torture/builtin-math-6.c
  6f699b99531328babffd4ec110ba2fd7  gcc/testsuite/gcc.dg/torture/builtin-math-7.c
  c77f4d57bad6850b166ed11f47ce8a4e  gcc/testsuite/gcc.dg/torture/builtin-math-8.c
  d7925eb09751128af786d99274bd0ab7  gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c
--- 50170,50176 ----
  fa7bdb79eb170773050b26a5ed2ae1ec  gcc/testsuite/gcc.dg/torture/builtin-math-3.c
  86c9312908e71a32a216fd720343d58f  gcc/testsuite/gcc.dg/torture/builtin-math-4.c
  091ba46b9b5948f7b1173f21c6c558b6  gcc/testsuite/gcc.dg/torture/builtin-math-5.c
! 2a86d2b8d17f5c82a3b1eac7e071ce50  gcc/testsuite/gcc.dg/torture/builtin-math-6.c
  6f699b99531328babffd4ec110ba2fd7  gcc/testsuite/gcc.dg/torture/builtin-math-7.c
  c77f4d57bad6850b166ed11f47ce8a4e  gcc/testsuite/gcc.dg/torture/builtin-math-8.c
  d7925eb09751128af786d99274bd0ab7  gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c
*************** b465b03e50a5f0e6eb3f4fc778cae87c  gcc/te
*** 50028,50033 ****
--- 50184,50190 ----
  c1b87db2a9e9bd9b79aeb89e694fd159  gcc/testsuite/gcc.dg/torture/builtin-round-roundevenf128.c
  9e1b5d427790f2b01d5620a8b551a56a  gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c
  e09f1e946db0ab1dc4d3acd77ea2b116  gcc/testsuite/gcc.dg/torture/builtin-self.c
+ c2dc4a738c80577d7e4b917e325e63aa  gcc/testsuite/gcc.dg/torture/builtin-shufflevector-pr123156.c
  fe01d458fb1e7b307aca4d27de62eff0  gcc/testsuite/gcc.dg/torture/builtin-sin-mpfr-1.c
  8d42dae4813a5c391a3481a72ac9c577  gcc/testsuite/gcc.dg/torture/builtin-sprintf.c
  23e1ea0bdd97005c1b4f8564d23f2b6a  gcc/testsuite/gcc.dg/torture/builtin-sqrt-cmp-1.c
*************** f5aad1409cbbb9e3039cb7da55080bc6  gcc/te
*** 50389,50394 ****
--- 50546,50552 ----
  0e0f17c50e8911b22c5b47e78696aba5  gcc/testsuite/gcc.dg/torture/pr109652.c
  2187f595796e8269bf267180b56e18a8  gcc/testsuite/gcc.dg/torture/pr109689.c
  c1a87948bd38764af99342569982d720  gcc/testsuite/gcc.dg/torture/pr109940.c
+ cfb24796cf777565d6ee8e3cc9faa0c1  gcc/testsuite/gcc.dg/torture/pr110043.c
  c68e0fca588779377278aa9e84380d07  gcc/testsuite/gcc.dg/torture/pr110176.c
  0c0edd5cb473e3baec880eabda166963  gcc/testsuite/gcc.dg/torture/pr110228.c
  37a4a130bd302ce957ac9e65b5949c60  gcc/testsuite/gcc.dg/torture/pr110243.c
*************** fd4292c0fcabd728ea0a1a6dbef87843  gcc/te
*** 50409,50414 ****
--- 50567,50573 ----
  b6cc54f5d02a9045680d8ba8b767f7b8  gcc/testsuite/gcc.dg/torture/pr110924.c
  4dd66a9e59fc17c29835a93cd50deb03  gcc/testsuite/gcc.dg/torture/pr110979.c
  fa1cc5eb743efae6b534499912897d96  gcc/testsuite/gcc.dg/torture/pr111000.c
+ 7423e38f878a6e56fb7be82847619a5b  gcc/testsuite/gcc.dg/torture/pr111036.c
  1dd35b4e28b7f72f0b12fbe3e5efb60a  gcc/testsuite/gcc.dg/torture/pr111048.c
  b3155d2832f93397879a73cc5d6f43b5  gcc/testsuite/gcc.dg/torture/pr111128.c
  a5aabe56aa9f2db146fb1185eabbfacb  gcc/testsuite/gcc.dg/torture/pr111137.c
*************** b9fe62163204f0f9de8d47547473ce6c  gcc/te
*** 50484,50495 ****
--- 50643,50656 ----
  55696235dc27ddb3d877bca135cf0b3e  gcc/testsuite/gcc.dg/torture/pr115641.c
  390c74e1cc81bd0e33c375ee049fb18b  gcc/testsuite/gcc.dg/torture/pr115701.c
  b9f75d112b5891dd319ae19e3779967f  gcc/testsuite/gcc.dg/torture/pr116057.c
+ d55420193b502affe4f12bc50e33bc30  gcc/testsuite/gcc.dg/torture/pr116296.c
  99a6c1e6285db8d08064cd8aaa300ddd  gcc/testsuite/gcc.dg/torture/pr116380.c
  78733925c03c093a5b9fb429087338ac  gcc/testsuite/gcc.dg/torture/pr116412-1.c
  798adbb1647443200e77c0fd667ada2f  gcc/testsuite/gcc.dg/torture/pr116454-1.c
  8059636329da8ba84cf6fc4ecf02e524  gcc/testsuite/gcc.dg/torture/pr116454-2.c
  26feb828f8efabc996ee22e90cd17fc1  gcc/testsuite/gcc.dg/torture/pr116585.c
  59484ae831cab97471a148691d17d840  gcc/testsuite/gcc.dg/torture/pr116768.c
+ bf21c0311a6a3c46ee997e03811677f0  gcc/testsuite/gcc.dg/torture/pr116772-1.c
  7ff97033e93d5c0fd815ba8a91fcd00e  gcc/testsuite/gcc.dg/torture/pr116922.c
  0ab0973399fe5f1ad629cde162d7febd  gcc/testsuite/gcc.dg/torture/pr117041.c
  717e28a7c3f736d4be6dffbb456735cc  gcc/testsuite/gcc.dg/torture/pr117086.c
*************** eed87995921a41d6f215168315f20d67  gcc/te
*** 50501,50506 ****
--- 50662,50668 ----
  0f6fc6ed111e2e5782be3518bfe6e1eb  gcc/testsuite/gcc.dg/torture/pr117333.c
  6ae50575ec63bfcc997168ba66e3cd75  gcc/testsuite/gcc.dg/torture/pr117417.c
  211f874eb690213e110852d5efe7da32  gcc/testsuite/gcc.dg/torture/pr117574-1.c
+ fbc66d37323062d4dfeea9f5f179a29e  gcc/testsuite/gcc.dg/torture/pr117811.c
  66b62cd3c17e663e000967aafbe81bc7  gcc/testsuite/gcc.dg/torture/pr117979.c
  978db543837a14f17f7314fb0bc7ecad  gcc/testsuite/gcc.dg/torture/pr118184.c
  673535a31d0d70358a6475962b4d71c2  gcc/testsuite/gcc.dg/torture/pr118476-1.c
*************** d29f5dbd5ce72ebe101793547b043347  gcc/te
*** 50510,50515 ****
--- 50672,50700 ----
  1336e40e86c7e304aee9bfcb04c162c0  gcc/testsuite/gcc.dg/torture/pr118953.c
  36f48d63adf7bb938767e81b1f86fcfa  gcc/testsuite/gcc.dg/torture/pr119133.c
  9c991c1fac1df6e51a434cc28f3d3d0d  gcc/testsuite/gcc.dg/torture/pr119417.c
+ 6286b6d7f9b6777b4b6d41fea79f96cb  gcc/testsuite/gcc.dg/torture/pr119532.c
+ e1b9ad351c56aebfaff790ff4002bf6e  gcc/testsuite/gcc.dg/torture/pr120182.c
+ e9469d38b4234580f9b2284233404b3c  gcc/testsuite/gcc.dg/torture/pr120341-1.c
+ aef01c040da8abd2a1e547ed6a07eb5a  gcc/testsuite/gcc.dg/torture/pr120341-2.c
+ e6e17b2280f19928b738f46328c5dcf7  gcc/testsuite/gcc.dg/torture/pr120654.c
+ e23df6b1422011499b9a500d2bf25add  gcc/testsuite/gcc.dg/torture/pr120944.c
+ d41266e6594db1994e416e7a7353751e  gcc/testsuite/gcc.dg/torture/pr121370.c
+ 949a4a95ad545289488a204b883b05d6  gcc/testsuite/gcc.dg/torture/pr121844.c
+ d4560440fd7b3647f8780537a59e4716  gcc/testsuite/gcc.dg/torture/pr122188.c
+ 3142210a35bdb6d31b5c4bb65cf8e9e4  gcc/testsuite/gcc.dg/torture/pr123061.c
+ 555e199e2c16f6c135742459dd2921b3  gcc/testsuite/gcc.dg/torture/pr123175-1.c
+ a57694d59f86b331962949b865331a14  gcc/testsuite/gcc.dg/torture/pr123175-2.c
+ 0cd9b5f403d655ca4804a15fc23543fd  gcc/testsuite/gcc.dg/torture/pr123416.c
+ 7d1a217129f5166f7cde3b004649bea9  gcc/testsuite/gcc.dg/torture/pr123636.c
+ ea90221ab80b5c3561ffc7665d2a343a  gcc/testsuite/gcc.dg/torture/pr123645-1.c
+ c6c07c813f67e0f94f1352f2810dfcff  gcc/testsuite/gcc.dg/torture/pr123645-2.c
+ 50838f4736657229a26dc1b011faf8d3  gcc/testsuite/gcc.dg/torture/pr123864.c
+ 406979b51eba3578f721938e7d4189da  gcc/testsuite/gcc.dg/torture/pr123887.c
+ d4f9bc1a728b13f9940b71ab03cc40fd  gcc/testsuite/gcc.dg/torture/pr124132.c
+ e394027559c72da3f714e1f0bce86a7c  gcc/testsuite/gcc.dg/torture/pr124555.c
+ 16b777622562135656ac0ab96375cfb5  gcc/testsuite/gcc.dg/torture/pr124868.c
+ fbe779467ae6f7cb7ee578922f1e8686  gcc/testsuite/gcc.dg/torture/pr125025.c
+ 13a26b482c0abe9bba6de7ad78d38472  gcc/testsuite/gcc.dg/torture/pr125774-1.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
*************** d2e1860fa8199fa9cae01ffe45caa0c0  gcc/te
*** 51618,51624 ****
  d870c565ecc3624fb4fbcb1510c36484  gcc/testsuite/gcc.dg/torture/tree-loop-1.c
  6970cdcc7bdfd578411b169b161f82cf  gcc/testsuite/gcc.dg/torture/type-generic-1.c
  bd588e9316f28797985023db337c730b  gcc/testsuite/gcc.dg/torture/va-arg-25.c
! 5c82e599e9517c158609d3871bb6ab3f  gcc/testsuite/gcc.dg/torture/vec-cvt-1.c
  70a7b1e7d786a67e8b07f4d2d0baba21  gcc/testsuite/gcc.dg/torture/vect-bool-1.c
  deba47b8439d01c869eba7f288c1e8d7  gcc/testsuite/gcc.dg/torture/vector-1.c
  976d72752026efa82ba29f7e5ec18661  gcc/testsuite/gcc.dg/torture/vector-2.c
--- 51803,51809 ----
  d870c565ecc3624fb4fbcb1510c36484  gcc/testsuite/gcc.dg/torture/tree-loop-1.c
  6970cdcc7bdfd578411b169b161f82cf  gcc/testsuite/gcc.dg/torture/type-generic-1.c
  bd588e9316f28797985023db337c730b  gcc/testsuite/gcc.dg/torture/va-arg-25.c
! a2fa4a55ce8fbbb549f006c693524abb  gcc/testsuite/gcc.dg/torture/vec-cvt-1.c
  70a7b1e7d786a67e8b07f4d2d0baba21  gcc/testsuite/gcc.dg/torture/vect-bool-1.c
  deba47b8439d01c869eba7f288c1e8d7  gcc/testsuite/gcc.dg/torture/vector-1.c
  976d72752026efa82ba29f7e5ec18661  gcc/testsuite/gcc.dg/torture/vector-2.c
*************** c4778a5d167ea622bf99df287c4bd701  gcc/te
*** 52238,52245 ****
  c177f823491b23ed671dd72cae6bdd38  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11c.c
  cedf03bd0bae65b47e8d533ec043d85b  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
  8c08bb59d159cc1850160224edbb70fd  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
! 90512bbeacddcca66fd3984243eb5137  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c
! d637cf73f6c38b75ddfb9687a20f1ec6  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
  e04b32c6114139e6a8e522e17e1b449b  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c
  c700544c3e68a401546cefbdad359728  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-33.c
  955e41ee303f67ec226ec41283fd05af  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c
--- 52423,52430 ----
  c177f823491b23ed671dd72cae6bdd38  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11c.c
  cedf03bd0bae65b47e8d533ec043d85b  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
  8c08bb59d159cc1850160224edbb70fd  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
! acf55a2a50daef94fee7e4893c59907f  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c
! 5d637cf26e6d8c5497804c69b1efa111  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
  e04b32c6114139e6a8e522e17e1b449b  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c
  c700544c3e68a401546cefbdad359728  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-33.c
  955e41ee303f67ec226ec41283fd05af  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c
*************** beccfabbbe0e25820c8a0bf1789cad24  gcc/te
*** 52723,52728 ****
--- 52908,52917 ----
  d044056d4248cb78637686f3d28272bb  gcc/testsuite/gcc.dg/tree-ssa/pr114009.c
  8710d339fbc689e052900f47a175994e  gcc/testsuite/gcc.dg/tree-ssa/pr114864.c
  5dd2285e0a64c83e08b6d68b6cd36eba  gcc/testsuite/gcc.dg/tree-ssa/pr117142.c
+ 5f36d3d6eda4211f506ed2e65fc779c4  gcc/testsuite/gcc.dg/tree-ssa/pr117423.c
+ b0891b1dddf226da47f4f976abdd7cb0  gcc/testsuite/gcc.dg/tree-ssa/pr119085.c
+ 71eb14b3ae5faf81c5226dc766d48edd  gcc/testsuite/gcc.dg/tree-ssa/pr122976.c
+ d87a1ad6187c06f07e6ee3b7c6352e9e  gcc/testsuite/gcc.dg/tree-ssa/pr124151.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
*************** bc1b0eb9d58483a9f609b164efd64d18  gcc/te
*** 53765,53770 ****
--- 53954,53960 ----
  6a109e21502e5353e985b8e9180f3c79  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-23.c
  99cacb357948a00b34aa1d255c66558b  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-24.c
  a3fc09fc73db236301044a5b2f7e7fea  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c
+ 982d2d128f70750a32db6150ef8991ef  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-26.c
  c0ab69fe1a4b916817bbafe5e5048c34  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-3.c
  d00d2a078458d4fc876af7d2a29c241a  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-5.c
  769aa5eb478537be389d55c410c46887  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-6.c
*************** cefdc2a9eb13f2095c81dff3665fcbe2  gcc/te
*** 54147,54152 ****
--- 54337,54343 ----
  f7352e346071f20c88b4cda3aefaf007  gcc/testsuite/gcc.dg/ubsan/pr112709-2.c
  07fea3b40997114ec3071642a71f05f0  gcc/testsuite/gcc.dg/ubsan/pr112741.c
  9d35f4aafed7065254d5bcbd8e4b3469  gcc/testsuite/gcc.dg/ubsan/pr113012.c
+ cae65f7755e556ca92edd7478099c942  gcc/testsuite/gcc.dg/ubsan/pr120837.c
  8b53119c2975ba4eb7e0a8a3f21049bc  gcc/testsuite/gcc.dg/ubsan/pr63690.c
  7a3b89a11b570c0d6817707c745a9fba  gcc/testsuite/gcc.dg/ubsan/pr67279.c
  c9a455b03d901e306e1836d50e9e37d6  gcc/testsuite/gcc.dg/ubsan/pr67662.c
*************** c89f320f0f14a7fa8638f6b38a20ed26  gcc/te
*** 54431,54436 ****
--- 54622,54628 ----
  69a1c3531ab884c6c7e1fbc875e956bc  gcc/testsuite/gcc.dg/variable-sized-type-flex-array.c
  7f29aa4616378fb72f7fab614907128d  gcc/testsuite/gcc.dg/varpool-1.c
  d8ef65c736eef2f4a9994c6a87ebda95  gcc/testsuite/gcc.dg/vec-andxor1.c
+ 676e89c6b3d0e18d0a9ec4b5f95072e9  gcc/testsuite/gcc.dg/vec-perm-lower.c
  f15a087d2d1b7f1cc41a5b0473154ebc  gcc/testsuite/gcc.dg/vect/O-pr46167.c
  6830ebc59ec37676c0ffa608cbbf0dbf  gcc/testsuite/gcc.dg/vect/O1-pr33854.c
  7f512dc347a6a290aad93ca27e40d3cf  gcc/testsuite/gcc.dg/vect/O1-pr41008.c
*************** d26c1450e737c9198e3e413deb96e2b3  gcc/te
*** 55026,55031 ****
--- 55218,55225 ----
  b8e70a728432436afa060e498411cc94  gcc/testsuite/gcc.dg/vect/pr119145.c
  8312a9b4f3649f0390632c660109eb1d  gcc/testsuite/gcc.dg/vect/pr119399.c
  f5749a6330ea4377b859350a23760b4a  gcc/testsuite/gcc.dg/vect/pr119534.c
+ 7df91aea22a8a2dc08bd0d355fa30fae  gcc/testsuite/gcc.dg/vect/pr120817.c
+ 3ccd618a730abdb13ec305c26f14ac22  gcc/testsuite/gcc.dg/vect/pr121059.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  915cf38408eaa7fee5013d90ec1c3251  gcc/testsuite/gcc.dg/vect/pr18400.c
*************** c317cb696a26bea6d51beb4b38e72094  gcc/te
*** 55640,55646 ****
  226f54e6f293495fd6c000a73ed8b7a3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s323.c
  61d0197203c46e31e39c8c4f8ad9e853  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3251.c
  5c71ac7653e5a2836d2465a9f13c6ede  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s331.c
! bf0687fd782a94fee64bb5a6231b7710  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c
  1fa698b706ad7a329bb8f12d8c9de007  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s341.c
  a574c6728b7b30ed7cb79cad1aca2a5b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s342.c
  e54027ff8457ca286ef1dc9996df732c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s343.c
--- 55834,55840 ----
  226f54e6f293495fd6c000a73ed8b7a3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s323.c
  61d0197203c46e31e39c8c4f8ad9e853  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3251.c
  5c71ac7653e5a2836d2465a9f13c6ede  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s331.c
! 53a5d5cd29c902bc0475399ff4b0f9e6  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c
  1fa698b706ad7a329bb8f12d8c9de007  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s341.c
  a574c6728b7b30ed7cb79cad1aca2a5b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s342.c
  e54027ff8457ca286ef1dc9996df732c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s343.c
*************** da2e0ca1db6e6911aecfa27990b0f4e7  gcc/te
*** 55666,55673 ****
  71c7e2710eb0d787abf80641134c8464  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s452.c
  0a53ab45e8069125854b0ad478690528  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s453.c
  8840c708a7f2798298113799bfaaea0b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s471.c
! 7d9d5fc521d92219b5cd950f9bf40394  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c
! 6d1198c692415eb73b7ee5001abac6ec  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c
  ab963c718fe086a0fc72501588ceb52f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s491.c
  69786ca5ac25ed37637f1c1fc9a0ea8f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-va.c
  e66f09a7a57dbc6fd0a0e6f0ae175ceb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vag.c
--- 55860,55867 ----
  71c7e2710eb0d787abf80641134c8464  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s452.c
  0a53ab45e8069125854b0ad478690528  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s453.c
  8840c708a7f2798298113799bfaaea0b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s471.c
! 18638a696cc1001bf4359e5dad5abf55  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c
! 6c5035d692f7ead08fd0b1f21b1b6828  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c
  ab963c718fe086a0fc72501588ceb52f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s491.c
  69786ca5ac25ed37637f1c1fc9a0ea8f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-va.c
  e66f09a7a57dbc6fd0a0e6f0ae175ceb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vag.c
*************** d5d9976efc22ed1298b4dc18d8f9369d  gcc/te
*** 55996,56001 ****
--- 56190,56196 ----
  3bc525ac3a0c692e58024ee1f6dfad8d  gcc/testsuite/gcc.dg/vect/vect-early-break_124-pr114403.c
  31652e7c628ce651ee20a71bc455f9ea  gcc/testsuite/gcc.dg/vect/vect-early-break_125-pr114403.c
  e664ac062bb0e564d2a811a548b6923f  gcc/testsuite/gcc.dg/vect/vect-early-break_13.c
+ b14a7c563931d32378d5a7c177b4a9c9  gcc/testsuite/gcc.dg/vect/vect-early-break_136-pr120357.c
  73bc7475d6af2bd77455abec5df316e4  gcc/testsuite/gcc.dg/vect/vect-early-break_14.c
  e90473e2ecf7c08db9278bdca5060773  gcc/testsuite/gcc.dg/vect/vect-early-break_15.c
  2232d395ceff11af9b28f269e86162c9  gcc/testsuite/gcc.dg/vect/vect-early-break_16.c
*************** f85ef0b99140422d78068ad18a39e03b  gcc/te
*** 56100,56110 ****
  b10686cc9cc745d9a4e579ee285eae2d  gcc/testsuite/gcc.dg/vect/vect-fma-2.c
  f26bda59075ce8ddcb0291dc86a118b3  gcc/testsuite/gcc.dg/vect/vect-fma-3.c
  609ec8572941506ac02bdead3631cf1a  gcc/testsuite/gcc.dg/vect/vect-fmax-1.c
! 8dd709fc543f80ce70588b05e38be7ae  gcc/testsuite/gcc.dg/vect/vect-fmax-2.c
! b913a0ce97e1075ed9731f6e62b860bf  gcc/testsuite/gcc.dg/vect/vect-fmax-3.c
  f7641c61bbf333053e42be5bfa67d8e4  gcc/testsuite/gcc.dg/vect/vect-fmin-1.c
! 33e9990b22cd49f97ec590b283e99e41  gcc/testsuite/gcc.dg/vect/vect-fmin-2.c
! 92e4333ba4e6a6e7852441677e9dd7e1  gcc/testsuite/gcc.dg/vect/vect-fmin-3.c
  ddb5b38696ce380776208fd63305431f  gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c
  e41338bfbaaf9c5f7d3e7394fd0720c0  gcc/testsuite/gcc.dg/vect/vect-fold-1.c
  d19ffdb745a89b901fd8e4ee54b8e7fe  gcc/testsuite/gcc.dg/vect/vect-gather-1.c
--- 56295,56305 ----
  b10686cc9cc745d9a4e579ee285eae2d  gcc/testsuite/gcc.dg/vect/vect-fma-2.c
  f26bda59075ce8ddcb0291dc86a118b3  gcc/testsuite/gcc.dg/vect/vect-fma-3.c
  609ec8572941506ac02bdead3631cf1a  gcc/testsuite/gcc.dg/vect/vect-fmax-1.c
! ff69a9e19928b3a1de48ce1b898d4a45  gcc/testsuite/gcc.dg/vect/vect-fmax-2.c
! d6b11f32049737083a9d8a816c7de6db  gcc/testsuite/gcc.dg/vect/vect-fmax-3.c
  f7641c61bbf333053e42be5bfa67d8e4  gcc/testsuite/gcc.dg/vect/vect-fmin-1.c
! 0cde09c690b3ca2b483cb6ce9cc4115e  gcc/testsuite/gcc.dg/vect/vect-fmin-2.c
! c8add09e1cb63057bdcddaad5063ed57  gcc/testsuite/gcc.dg/vect/vect-fmin-3.c
  ddb5b38696ce380776208fd63305431f  gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c
  e41338bfbaaf9c5f7d3e7394fd0720c0  gcc/testsuite/gcc.dg/vect/vect-fold-1.c
  d19ffdb745a89b901fd8e4ee54b8e7fe  gcc/testsuite/gcc.dg/vect/vect-gather-1.c
*************** e8a9b3f3f510ee57f71acab27a6b2cb0  gcc/te
*** 56294,56299 ****
--- 56489,56496 ----
  39723945c19c26c57adf66d889eabb98  gcc/testsuite/gcc.dg/vect/vect-peel-4.c
  e7cd5788f09670057ebf36ffc7961d4b  gcc/testsuite/gcc.dg/vect/vect-pr111779.c
  94bda84899e2683692deba382167aa8e  gcc/testsuite/gcc.dg/vect/vect-pr114375.c
+ f4b106f1a647b041f524318378f476f5  gcc/testsuite/gcc.dg/vect/vect-pr122793.c
+ da160a8349fe2e0daa932c3bd967f635  gcc/testsuite/gcc.dg/vect/vect-pr124677.c
  4d57df9e3b3522c9f1a6707c05f1da45  gcc/testsuite/gcc.dg/vect/vect-pr69848.c
  3a3a316ff2f2496494ecb0bd77d61aad  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
  bcf8d4d938304b75cfe5af73ef6b191b  gcc/testsuite/gcc.dg/vect/vect-profile-1.c
*************** cb231639cf786430567a587f38a8ff9f  gcc/te
*** 56304,56309 ****
--- 56501,56508 ----
  4a8dea4dc7d611321a7a1df3ee9fa8ca  gcc/testsuite/gcc.dg/vect/vect-recurr-4.c
  9f9e3510ab63ced839b8ee9b73968135  gcc/testsuite/gcc.dg/vect/vect-recurr-5.c
  1260c41ed0bc0989cd1bae4b33c037b5  gcc/testsuite/gcc.dg/vect/vect-recurr-6.c
+ 7871d15555bf4ec0abcd6a88f3433086  gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256-2.c
+ 39b82075f86d610ada0f9574ce45d00a  gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256.c
  14379418c35bd92a759c557ae5c861c6  gcc/testsuite/gcc.dg/vect/vect-reduc-1.c
  22a0d53785f7d6c47cd23f6847097e73  gcc/testsuite/gcc.dg/vect/vect-reduc-10.c
  5e2267c9823c709c9186c2bae29c4b9e  gcc/testsuite/gcc.dg/vect/vect-reduc-11.c
*************** cb84d7d74821259d1a47775dd18c13c8  gcc/te
*** 57121,57127 ****
  a204aadb3f5fc384dd117c7c09175029  gcc/testsuite/gcc.target/aarch64/acle/rwsr-1.c
  d5b77d8e1a21321e649e6b77802e64c8  gcc/testsuite/gcc.target/aarch64/acle/rwsr-2.c
  90a044b6489e0d51268ae3d5ce15dead  gcc/testsuite/gcc.target/aarch64/acle/rwsr-3.c
! 37f8720622531f40d94c6e3f7f2b1050  gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c
  b478e4234b2713f0df0d417dd9d13425  gcc/testsuite/gcc.target/aarch64/acle/rwsr-ungated.c
  c41c68503dfa6ef4c72faaf77fd40cb2  gcc/testsuite/gcc.target/aarch64/acle/rwsr.c
  10ce3b5edee8a787906dd58121496c70  gcc/testsuite/gcc.target/aarch64/acle/tme.c
--- 57320,57326 ----
  a204aadb3f5fc384dd117c7c09175029  gcc/testsuite/gcc.target/aarch64/acle/rwsr-1.c
  d5b77d8e1a21321e649e6b77802e64c8  gcc/testsuite/gcc.target/aarch64/acle/rwsr-2.c
  90a044b6489e0d51268ae3d5ce15dead  gcc/testsuite/gcc.target/aarch64/acle/rwsr-3.c
! c76ddd712be0db888e9fc3f08f4e0362  gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c
  b478e4234b2713f0df0d417dd9d13425  gcc/testsuite/gcc.target/aarch64/acle/rwsr-ungated.c
  c41c68503dfa6ef4c72faaf77fd40cb2  gcc/testsuite/gcc.target/aarch64/acle/rwsr.c
  10ce3b5edee8a787906dd58121496c70  gcc/testsuite/gcc.target/aarch64/acle/tme.c
*************** a95c8779f3b9cc5c91774eab2c3b9b8d  gcc/te
*** 57973,57978 ****
--- 58172,58180 ----
  41703958f685e80bf77bb344c18b67fc  gcc/testsuite/gcc.target/aarch64/declare-simd-2.c
  063fb3cb3ef8c03670a39beb490eee85  gcc/testsuite/gcc.target/aarch64/diag_aka_1.c
  99d13b07988399a087cb53856c728972  gcc/testsuite/gcc.target/aarch64/div-by-bitmask.c
+ 3488e2eafe407d3b6120c7194ed905bb  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c
+ eb63180d3203534427d2f43f02dd0ad5  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c
+ 44e0ea6a8b4b6be2787d845af653ac9a  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c
  5a0fb82365f402f7b5e039bc723a3020  gcc/testsuite/gcc.target/aarch64/dwarf-cfa-reg.c
  a9ccf8cef71e90daa83ae00204fd983c  gcc/testsuite/gcc.target/aarch64/dwarf_reg_size_1.c
  5fdc01fccf89920c24ce6dadea7114d3  gcc/testsuite/gcc.target/aarch64/dwarf_reg_size_2.c
*************** e721f980e1e7a9648d77300c2f6ea0e5  gcc/te
*** 58327,58332 ****
--- 58529,58559 ----
  d28ce23985b773a211ff26743e9e661d  gcc/testsuite/gcc.target/aarch64/options_set_8.c
  55ae452185bb0bb101f614fc4fa21cd9  gcc/testsuite/gcc.target/aarch64/options_set_9.c
  2ba9e0951fadcf5ce5f2eab080c09a68  gcc/testsuite/gcc.target/aarch64/orr_imm_1.c
+ 5e0097785f095780e3c0a7ce682ddc69  gcc/testsuite/gcc.target/aarch64/pch/aarch64-pch.exp
+ a6744e260d36942daafb6b2fcf3e4e19  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.c
+ 7b90a6e9d561b2c19e6c612960e8ef70  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.hs
+ 5a5b4234700c182421280262006aff02  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.c
+ 7b90a6e9d561b2c19e6c612960e8ef70  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.hs
+ 4478fcdd1aefee96e33faf1c4b60215d  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.c
+ 97e98018fd0a42839432bb5716c601bb  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.hs
+ 4775f635f85fab86b3e43edddb4d3731  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.c
+ 97e98018fd0a42839432bb5716c601bb  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.hs
+ c1cc84ca237825286acc5b291c488ad3  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.c
+ eea843b45fced370cf40e4fd8434b286  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.hs
+ 66efb2495a5e78783e0592acaf913f90  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.c
+ eea843b45fced370cf40e4fd8434b286  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.hs
+ 0b52c4a1f6b3f91ec85ce6e2ce5d7f99  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.c
+ c0b11c30b275c5fd2113fe2a4ecac4af  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.hs
+ 48d3f71076eb2c9a167ad14ae32a23de  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.c
+ c0b11c30b275c5fd2113fe2a4ecac4af  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.hs
+ b2bd58eb682ff2375e24885036453e0e  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.c
+ 408bbbd938ffecc7c0bf0e2b87b2864b  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.hs
+ 6b00da17b87978f4062502ae983d70b2  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.c
+ 408bbbd938ffecc7c0bf0e2b87b2864b  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.hs
+ 957c9a141aeddbfd748594553077d14e  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.c
+ 58d8436df4c6af25396ff8f2e09b91c2  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.hs
+ 8e6da171896c5c3446074fa59d4c2cd4  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.c
+ 58d8436df4c6af25396ff8f2e09b91c2  gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.hs
  2affd5586d9d9534731788d83a2a3904  gcc/testsuite/gcc.target/aarch64/pcs_attribute-2.c
  b0a892934f70ddbece003356d1462148  gcc/testsuite/gcc.target/aarch64/pcs_attribute-3.c
  9fe8a7ffd0c54ed06b5690a31efb7b70  gcc/testsuite/gcc.target/aarch64/pcs_attribute.c
*************** e95d7302a79bebe0c38e93d641a753d8  gcc/te
*** 58414,58419 ****
--- 58641,58651 ----
  66fd5df571798b50c635d6e8c98d2a43  gcc/testsuite/gcc.target/aarch64/pr115258_2.c
  aad77ff8d57a3f0e3712d2f32526716c  gcc/testsuite/gcc.target/aarch64/pr116258.c
  b9ca6f13a261db1602a13a0c96147059  gcc/testsuite/gcc.target/aarch64/pr117186.c
+ 83ac293146b05a62ec4a19e52751ebd1  gcc/testsuite/gcc.target/aarch64/pr121253.c
+ 95306727ea8db0e2fdb8e199f754c587  gcc/testsuite/gcc.target/aarch64/pr123285-1.c
+ 3525a5777032197cdd1e39b2aad94c29  gcc/testsuite/gcc.target/aarch64/pr123294-1.c
+ 085f7e2087fb0cf8d5d9a44259bb616c  gcc/testsuite/gcc.target/aarch64/pr123548.c
+ b925908f19e4f112a6a854e9b34023c4  gcc/testsuite/gcc.target/aarch64/pr125795.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
  e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
  9023f817c07ddec673c5b546525fc184  gcc/testsuite/gcc.target/aarch64/pr60034.c
*************** bb692e50ab2bed2943d200f6f0097d3a  gcc/te
*** 58645,58650 ****
--- 58877,58883 ----
  f1c9e2aa3c435c9efdc1ea83da4e1eeb  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_2.c
  df08a7f1b91a8c0f914aab7f291c95e7  gcc/testsuite/gcc.target/aarch64/simd/low-high-combine_1.c
  99a09108bd01d3ee4865fd98b8b302bb  gcc/testsuite/gcc.target/aarch64/simd/lowering_tbaa.c
+ 67e9f00dffaa6f894241ef054cf29a1e  gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
  f2791d55a2c9ed7182a54a406810cf47  gcc/testsuite/gcc.target/aarch64/simd/pr67896.c
  c4b08114012e09e0f47a84f5e5311441  gcc/testsuite/gcc.target/aarch64/simd/pr97349.c
  46d08ecc25480336a5b22ec204104ec5  gcc/testsuite/gcc.target/aarch64/simd/pr99195_1.c
*************** db7ec863bbc5f42e3eaaf7d41c078f60  gcc/te
*** 59130,59147 ****
  954127f6d3b08028a0dbbecea8abaea4  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za32.c
  6c42cd7108db85285989b01cdfe0ceab  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za64.c
  f73c190603e33d11562ee018328fb06d  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c
! 51fe1ff100a97529ff50e1cdfa4f4df5  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c
! 05f8708c4c12f406de2089cf37bf90af  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c
! 4cfb225b1d4aa772e7e240fc0752a577  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c
! 6158db047e21dfef0f794eaaa1d81934  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c
! f8dada53e59219879e1222d2fe3ab1ae  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c
! 996bbb92a143273e76c7e00eb7af251b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c
! d7f554a5c062ed5854bee2de13199617  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c
! 7f47048704253b30608855f28c703ff5  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s8.c
! ea46a7175ec34a07eae85e2422bb2782  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u16.c
! 7e0d11228c3bd92d57df156977acba45  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u32.c
! 9c1e58d46a866546b3444e3a8caca5f3  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u64.c
! 6c9a91485037b596556ccd3de1fdf852  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u8.c
  92f3366342aae6b2ec7f6d53be3fe1a1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za128.c
  4a2c37b58b46cda8f18baebab50b1238  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za16.c
  af7a839b3b15a2c2cfbbc10272a15951  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za32.c
--- 59363,59380 ----
  954127f6d3b08028a0dbbecea8abaea4  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za32.c
  6c42cd7108db85285989b01cdfe0ceab  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za64.c
  f73c190603e33d11562ee018328fb06d  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c
! cab14647799c145eb877d86becdbacfc  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c
! 30ed932fb9d9a687e7e2b65a998e9de8  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c
! 50c1f6d858b586e8791a0dee82043b43  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c
! bfbee9fc67839d48df53bde1401a75f8  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c
! 320167fd7536193dc674e389b27bbc9b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c
! 72a3aa6262fe5d90fb1675b40ce99776  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c
! d822eca59a0d64cccefb1d3486c36ef5  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c
! 54a1ebcd3bcf46d8a41ad5b4763c2a62  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s8.c
! 9aa206ccedf54b882540d7b571892a1d  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u16.c
! 850baad12706cd78cc9f4f60ad6ed7b6  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u32.c
! 91a5c10676d07246df2e9833d992bba6  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u64.c
! 07a75458fb6f434428bfc72b8a80f1ac  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u8.c
  92f3366342aae6b2ec7f6d53be3fe1a1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za128.c
  4a2c37b58b46cda8f18baebab50b1238  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za16.c
  af7a839b3b15a2c2cfbbc10272a15951  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za32.c
*************** afe62fa89b5483576738572de037298b  gcc/te
*** 59191,59199 ****
  d6f0c95fd7a6f5179274aac3f6cc20c4  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_1.c
  dadcd855a787ed42d61441acfdf07035  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_2.c
  ee7a30eb13293817fbc0761ba471e1dc  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_3.c
! eb580446b9c202515566ebe3c407f886  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c
  84feb7d27fbd53171100e87b74c92cb0  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_10.c
! 89058a2808c1b72afc62d38caf8a3e03  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c
  11e2ce1b161d5c2f033e70deb98ef99d  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_2.c
  484b7eb2527c452159f353eabdaf3c5a  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_3.c
  c383c91adda41f85554329e5922e2985  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_4.c
--- 59424,59432 ----
  d6f0c95fd7a6f5179274aac3f6cc20c4  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_1.c
  dadcd855a787ed42d61441acfdf07035  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_2.c
  ee7a30eb13293817fbc0761ba471e1dc  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_3.c
! 20f0fd449cd7c00774afe0e41e6b997a  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c
  84feb7d27fbd53171100e87b74c92cb0  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_10.c
! d97792582b32991bd0603548569a5a10  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c
  11e2ce1b161d5c2f033e70deb98ef99d  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_2.c
  484b7eb2527c452159f353eabdaf3c5a  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_3.c
  c383c91adda41f85554329e5922e2985  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_4.c
*************** df9a1b5d24aec3bc8a0ef502ec0a64b9  gcc/te
*** 59237,59242 ****
--- 59470,59477 ----
  93bae5f8e7e98d08018a7b8c114d3d6c  gcc/testsuite/gcc.target/aarch64/sme/nonlocal_goto_5.c
  14e8f4e8dfc80d7bf98c1533e6c560ff  gcc/testsuite/gcc.target/aarch64/sme/nonlocal_goto_6.c
  cea477cbfc0138870da19d13a6f78a5c  gcc/testsuite/gcc.target/aarch64/sme/nonlocal_goto_7.c
+ adb1015c9aa632296ceca120cacf20e3  gcc/testsuite/gcc.target/aarch64/sme/pr121028.c
+ 7d97d6a94b7d56da78720f808e65bcff  gcc/testsuite/gcc.target/aarch64/sme/pr121414_1.c
  b4e79a733b5f7121eaeed1af03f9454b  gcc/testsuite/gcc.target/aarch64/sme/sibcall_1.c
  e1bebbe2531d4c2ec4fb9cfa4437f1cb  gcc/testsuite/gcc.target/aarch64/sme/sibcall_2.c
  fab5f8d90e717b628f306df26d55a4c6  gcc/testsuite/gcc.target/aarch64/sme/sibcall_3.c
*************** fdf31615d4c23a6cda30ff2ff1493fcd  gcc/te
*** 59248,59253 ****
--- 59483,59489 ----
  5a4e5012170fd731aad53e8a5e8ca2b0  gcc/testsuite/gcc.target/aarch64/sme/sibcall_7_ts.c
  c24e7b6e6657e7a0bc6f6c3324ca0e55  gcc/testsuite/gcc.target/aarch64/sme/sibcall_8.c
  b7e9ea35db65f1f9ab0129b6787b4aa1  gcc/testsuite/gcc.target/aarch64/sme/sibcall_9.c
+ 4d9577c81fc117dbb22c930c6def7e07  gcc/testsuite/gcc.target/aarch64/sme/sme-shrinkwrap.c
  197d088cac6259805e5e00b6ddfcd879  gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_1.c
  9ce9b56fcc81eccd70d155b7ba6b7628  gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_2.c
  fcf99b5d14963d6dc0b0c9a728fc8ac4  gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_3.c
*************** a5610f22b8f865667ffebce563c88521  gcc/te
*** 59262,59267 ****
--- 59498,59504 ----
  ff37df956d90b080a15eee27baf83cf8  gcc/testsuite/gcc.target/aarch64/sme/za_state_5.c
  a9421cc74fddeb0b2e03c60e20410ede  gcc/testsuite/gcc.target/aarch64/sme/za_state_5_scp.c
  031a04851bc92dab81da666022b43d00  gcc/testsuite/gcc.target/aarch64/sme/za_state_6.c
+ d002a1f4df9b5c96addef824d09dfbd1  gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c
  bc8fa843cae0050c83a00ac2cd807a98  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_1.c
  f5392df0161b11a2eb084fecc3cb5f73  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_2.c
  3ff747add1e9dfb996292dd5bf39ad0e  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_3.c
*************** ae44d68f203e7d5a17d19738cfbc53a0  gcc/te
*** 62077,62082 ****
--- 62314,62326 ----
  23037c19fa0b1b3f5bcac32c8d73393c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/nrv_1.c
  618eed08c799209fcc7e876e7bc1f5a9  gcc/testsuite/gcc.target/aarch64/sve/acle/general/orn_1.c
  c43619dc0345cb75df63193d4ecf32a5  gcc/testsuite/gcc.target/aarch64/sve/acle/general/orr_1.c
+ f467f9ddc87398511c12147760e80eb4  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_1.c
+ 0a35f14f6f82735e897ca461fd10bd66  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_2.c
+ acdd75031b126bdb8ede449a87a8b4c8  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_3.c
+ eb5400f39cf4b8034ce9bf768b42f01e  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_4.c
+ dc5cc4bd54f699543e29d49d190cf7f3  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_5.c
+ 4505bd757cf0718372154e481c4a2da0  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_6.c
+ 453c5ef83bc5137397e38e9f3c9d6da9  gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_7.c
  bb3a7f2587d8584d185738649f93a6f6  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pfirst_1.c
  4a5457bf98a3061b6c949b777ceca410  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pnext_1.c
  6d3b0cbb6b0b88e0030fbf0003faa4c9  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pnext_2.c
*************** bbf236bb282c245918ff1bae0a9bdf3f  gcc/te
*** 62089,62094 ****
--- 62333,62339 ----
  b47de1519a1ea6d899c2a6cd56b65cba  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c
  4be435ec882c5745457b0a6378296096  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr115464.c
  a37d20c2585b9553233fb42e281e9b03  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr115464_2.c
+ c1f0d92266055a62f8c3a0b32cffca32  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr121118_1.c
  cd84e485b3fa7a0d50f2ee5113eca33d  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr94683.c
  111a35b5bdbe877086a99d29b13dc65b  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr94700.c
  dd9873ff910539b000561a51ccc3a52f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr96146.c
*************** bf328a0ed3cadaf01cdcd516cb16a2eb  gcc/te
*** 62104,62109 ****
--- 62349,62355 ----
  21cf8f26265cb4080b1703c09d296dc5  gcc/testsuite/gcc.target/aarch64/sve/acle/general/ptrue_pat_5.c
  ef386f442776c7325a9c4120d5f0f1cd  gcc/testsuite/gcc.target/aarch64/sve/acle/general/qincb_1.c
  884f0309ada7f457179926eca68ecf14  gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev-1.c
+ 52959d72e6279c53e3e28e80ecb896fe  gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev_2.c
  b73d2b4b9aeaceb7898b89f8e147cc04  gcc/testsuite/gcc.target/aarch64/sve/acle/general/stack_vars_1.c
  a60971180940fb9126dc3f2440073c3a  gcc/testsuite/gcc.target/aarch64/sve/acle/general/struct_1.c
  9404c4e4b822b81b48891a1fe0625266  gcc/testsuite/gcc.target/aarch64/sve/acle/general/temporaries_1.c
*************** b756b55bf45e469c93050878d9bef905  gcc/te
*** 62404,62409 ****
--- 62650,62656 ----
  79f15d195cc9087e1d6665345a3f5123  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_1.c
  7b29bcc5f4568a218b087ab7a6207177  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_2.c
  f75cd152d1ea63349f09ef48040ff809  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_3.c
+ dc3237178be6599bbf6062f3731243ef  gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c
  f8aebeb8f0a738c291cd7acbf0c1cd2e  gcc/testsuite/gcc.target/aarch64/sve/ext_1.c
  5a6168e8f8698cd82ef986d8c867fcc0  gcc/testsuite/gcc.target/aarch64/sve/ext_2.c
  d0e1d8fee3d430dd78f1f6b60a9c0f79  gcc/testsuite/gcc.target/aarch64/sve/ext_3.c
*************** f247489d5a83c25a52bba3f69ccf6256  gcc/te
*** 62821,62826 ****
--- 63068,63074 ----
  12e45901cb5e8fffa6c192620053ac14  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3_run.c
  3d1ef9d163c4f589cacb3489dbd67eab  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_4.c
  9488251a23018049b302e2b299d999ba  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_4_run.c
+ ff1d2ab6ed17740cc59f1590798ec48d  gcc/testsuite/gcc.target/aarch64/sve/permute_5.c
  58779ff2ec8df7f5f3f3b93f444f0617  gcc/testsuite/gcc.target/aarch64/sve/popcount_1.c
  43e7bc10a42a3debf5d1ccecc4464720  gcc/testsuite/gcc.target/aarch64/sve/popcount_1_run.c
  12ecad870dc3cdd512c314f6e0ba3c08  gcc/testsuite/gcc.target/aarch64/sve/pr100048.c
*************** f6df41d6d0c00a657a60617993e7fd37  gcc/te
*** 64086,64091 ****
--- 64334,64341 ----
  10614e0cbb3e88c95f34ea133bf8898e  gcc/testsuite/gcc.target/aarch64/sve2/pr107830-1.c
  f5f6f291e9c1c848a46c8ef91ca99f58  gcc/testsuite/gcc.target/aarch64/sve2/pr107830-2.c
  429b387819fe31e459436020f966ae50  gcc/testsuite/gcc.target/aarch64/sve2/pr109636_1.c
+ b2d92d06e51698908b628bbf67a8336b  gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c
+ a1e717c0cbeba75388ce3e7b3922fe64  gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c
  3ddfd16fcbf89890fd9785fec8f0c081  gcc/testsuite/gcc.target/aarch64/sve2/shracc_1.c
  8cd4d6e010de57b57d5d8fb325fa79bb  gcc/testsuite/gcc.target/aarch64/sve2/unpred_mul_1.c
  253ea1793d85a6047e9fc6e69f5a62af  gcc/testsuite/gcc.target/aarch64/sve2/whilerw_1.c
*************** fc2eb8ac52faed5fba0a017b858d4ae4  gcc/te
*** 64174,64179 ****
--- 64424,64432 ----
  0afb99fcdb9951f648c24b7cbbef6b69  gcc/testsuite/gcc.target/aarch64/torture/aarch64-torture.exp
  4036d83a59b4adcf9e8a4cf5a291d22e  gcc/testsuite/gcc.target/aarch64/torture/pr111677.c
  8ba6cf5317762b2b89350d4f652efa53  gcc/testsuite/gcc.target/aarch64/torture/pr116564.c
+ d03b2f46140f14ae9b2101813aec3525  gcc/testsuite/gcc.target/aarch64/torture/pr121772.c
+ 164477999ab21aa17183a55d49bb0d71  gcc/testsuite/gcc.target/aarch64/torture/pr124491.c
+ a9e9dc89b86dea48cebffdbd8459e3a1  gcc/testsuite/gcc.target/aarch64/torture/pr125621.c
  5266ac107a73e3ee1d1f44e1cda7d9f2  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-1.c
  9c3416db2fc04c3f91b03ecae15e943e  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-10.c
  df55bfe2c1ce46074b19b4566cedeef4  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-11.c
*************** c6c1c759a610556eca59987a77084f45  gcc/te
*** 64791,64797 ****
  53e11cdab71cca17d6fdaf4ed9224a30  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
  5790d3efd74c1ddf5aeb2e8743385c60  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c
  e760d8a00f0e4b4ceedce756dc61f6c1  gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
! 2f54b8d253156a2be1577d30ce773f07  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
  8411d0e77a0611b1b9aef23030254fbe  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
  43365e7220d0c89c221983b0088e64ec  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c
  dc2445fc2ce3b9779058431b1cfb377b  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c
--- 65044,65050 ----
  53e11cdab71cca17d6fdaf4ed9224a30  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
  5790d3efd74c1ddf5aeb2e8743385c60  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c
  e760d8a00f0e4b4ceedce756dc61f6c1  gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
! 1e4a9e637ba2067c00eb31092a65dfb4  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
  8411d0e77a0611b1b9aef23030254fbe  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
  43365e7220d0c89c221983b0088e64ec  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c
  dc2445fc2ce3b9779058431b1cfb377b  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c
*************** e5306c98e7af9542607cef498d9d4cab  gcc/te
*** 64907,64912 ****
--- 65160,65166 ----
  bf06244dec6dc49e0817b03e4494a90f  gcc/testsuite/gcc.target/arm/builtin_uaddll.c
  f842ae48d03fd71d6c4251ee6b88d526  gcc/testsuite/gcc.target/arm/builtin_usubl.c
  33305e972aaa5cd2660665305329c212  gcc/testsuite/gcc.target/arm/builtin_usubll.c
+ 00d46b35880659bc8001ea4047b5bb1c  gcc/testsuite/gcc.target/arm/cbz-range.c
  528a1cc7ada5bc63c0c59152d86b8557  gcc/testsuite/gcc.target/arm/cbz.c
  78f9bef0e50a143219120e7b5b4af7b9  gcc/testsuite/gcc.target/arm/cmp-1.c
  97376f46024c436de8ce633177de6e0b  gcc/testsuite/gcc.target/arm/cmp-2.c
*************** e95ad2780e346935674e8e065a322d1d  gcc/te
*** 65085,65094 ****
  80ad1d4eaf61d16f656cb80332dc22f4  gcc/testsuite/gcc.target/arm/fma.h
  220c0d4f4cad22e6687747e0fe55f267  gcc/testsuite/gcc.target/arm/fmaxmin.c
  a1182e17a398d2114e6f9d6156618a24  gcc/testsuite/gcc.target/arm/fmaxmin.x
! acd3e91a7d28ee5546286c4936d86e11  gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
! 9e99c9ae7465a5459e190cb5d75fe5f7  gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
! 76aa061fcf894a1336f2f8d07bcd7524  gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
! 45400d3cc5277c10b804897e439d5ea8  gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
  f7e509420aab463592a3e5d54b6c6b8c  gcc/testsuite/gcc.target/arm/fp16-builtins-1.c
  237aa223257ca24bfddebcc43dd387a2  gcc/testsuite/gcc.target/arm/fp16-compile-alt-1.c
  85be9f1d24d495b2882fc58bb89a96d2  gcc/testsuite/gcc.target/arm/fp16-compile-alt-10.c
--- 65339,65345 ----
  80ad1d4eaf61d16f656cb80332dc22f4  gcc/testsuite/gcc.target/arm/fma.h
  220c0d4f4cad22e6687747e0fe55f267  gcc/testsuite/gcc.target/arm/fmaxmin.c
  a1182e17a398d2114e6f9d6156618a24  gcc/testsuite/gcc.target/arm/fmaxmin.x
! d8203dd017181ab133e278b2250a10d4  gcc/testsuite/gcc.target/arm/fp16-aapcs.c
  f7e509420aab463592a3e5d54b6c6b8c  gcc/testsuite/gcc.target/arm/fp16-builtins-1.c
  237aa223257ca24bfddebcc43dd387a2  gcc/testsuite/gcc.target/arm/fp16-compile-alt-1.c
  85be9f1d24d495b2882fc58bb89a96d2  gcc/testsuite/gcc.target/arm/fp16-compile-alt-10.c
*************** ab72cfcef8400549b3b4d4d318e4955e  gcc/te
*** 65284,65289 ****
--- 65535,65541 ----
  08cf164f5014eeb82272fbef22e3878f  gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_vstr.c
  4211e73819bb661ddd18271cf8dab0e5  gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_vstr_p.c
  cfb4125c4550d5cf153bac3dcd2886ad  gcc/testsuite/gcc.target/arm/mve/intrinsics/pr101016.c
+ 0584832f92d1fa9172d7b5f0af9daf91  gcc/testsuite/gcc.target/arm/mve/intrinsics/pr122223.c
  a8d3fa3695fbd309660950fb5598ecaf  gcc/testsuite/gcc.target/arm/mve/intrinsics/pr97327.c
  f1860ef4320f7f2a6a4791bdb0c063ba  gcc/testsuite/gcc.target/arm/mve/intrinsics/sqrshr.c
  5d7653e2d5007d0c5a0f2368f9b07c02  gcc/testsuite/gcc.target/arm/mve/intrinsics/sqrshrl_sat48.c
*************** bce9be46a9e956c5fcc66bfb68691f0f  gcc/te
*** 67735,67740 ****
--- 67987,67994 ----
  7783093cce901b3a47068de662227a6b  gcc/testsuite/gcc.target/arm/neon-offset-1.c
  2f0d808ded25a27c867026ac6296d1b9  gcc/testsuite/gcc.target/arm/neon-recip-div-1.c
  1f48b8fad239c5f29804610f9f08ce99  gcc/testsuite/gcc.target/arm/neon-reload-class.c
+ ac20adafaa278263e92b9a745a6cb0da  gcc/testsuite/gcc.target/arm/neon-smax16.c
+ 329671596e7c24a6fcb5c9d102bf7c37  gcc/testsuite/gcc.target/arm/neon-smin16.c
  79e2b86f1be68bc1014fb6b480d5322f  gcc/testsuite/gcc.target/arm/neon-thumb2-move.c
  add75049520bb3c0c677317469ccb57e  gcc/testsuite/gcc.target/arm/neon-vadds64.c
  323bfa59651e6ef8beef2767edd16ddf  gcc/testsuite/gcc.target/arm/neon-vaddu64.c
*************** a1fe9428938050a47df83f9ccfccf156  gcc/te
*** 67850,67855 ****
--- 68104,68111 ----
  95b83592cd208bcb180064639fd1558f  gcc/testsuite/gcc.target/arm/pr115153.c
  39327fb26a438561d0617a9bfe99c59f  gcc/testsuite/gcc.target/arm/pr115188.c
  01f3623877a32b45af0d229eab49f4cf  gcc/testsuite/gcc.target/arm/pr117675.c
+ 82da20b2c4061a368f405dbeb1cdb341  gcc/testsuite/gcc.target/arm/pr123271.c
+ 236563c6007691d6571ab9e909e2c81e  gcc/testsuite/gcc.target/arm/pr124933.c
  3ce2c6a399da67ae36390d522e1f1296  gcc/testsuite/gcc.target/arm/pr19599.c
  3425143e88f989a8f52f345e6237106a  gcc/testsuite/gcc.target/arm/pr26702.c
  fc0dd660f56108005b4f0b142e94d10d  gcc/testsuite/gcc.target/arm/pr37780_1.c
*************** a1131491d67160098e775860b91e3021  gcc/te
*** 68477,68484 ****
--- 68733,68744 ----
  79a594a642e89de4c3a753867b50cf54  gcc/testsuite/gcc.target/arm/xordi3-opt.c
  c80b20e750ebef437da2bce443dea236  gcc/testsuite/gcc.target/avr/attribute-io.h
  ccbfc33e8dfbece89b515e3a31919e02  gcc/testsuite/gcc.target/avr/avr.exp
+ 5c31309787a1c63d40dce18c252c37a1  gcc/testsuite/gcc.target/avr/cmpdi-1.c
  a6701935d18c8ed062555c8a48454bc9  gcc/testsuite/gcc.target/avr/dev-specific-rmw.c
+ 14ec7b85b2ab003574d858aa229c3112  gcc/testsuite/gcc.target/avr/dtofx.c
  2028ceccf9f97e5e84e9adf6beb7597e  gcc/testsuite/gcc.target/avr/exit-abort.h
+ 6c83d167de5a523cffe112594bd1cd56  gcc/testsuite/gcc.target/avr/fminfmax-1.c
+ f99b6b374e8532e344331366048bd0b9  gcc/testsuite/gcc.target/avr/fxtod.c
  01c5f01bf5db7494c293de76bfa7ad3f  gcc/testsuite/gcc.target/avr/isr-test.h
  d258157b4a9f2a166772579aaadca0be  gcc/testsuite/gcc.target/avr/lra-cpymem_qi.c
  c1c7be0795b89f4d537c95e15050d230  gcc/testsuite/gcc.target/avr/lra-elim.c
*************** e6cd0765dea3fde235455229d90597c7  gcc/te
*** 68501,68506 ****
--- 68761,68768 ----
  539ce3aab7106b8babfeb6e60c71880b  gcc/testsuite/gcc.target/avr/pr114975-popcount.c
  33de71bb615aba171af02ad7f1fc8faa  gcc/testsuite/gcc.target/avr/pr114981-powif.c
  b336e6f4d1af14f79b0e9e2451c8046e  gcc/testsuite/gcc.target/avr/pr114981-powil.c
+ c8dee67a2567af17cd08c345a4ef3aea  gcc/testsuite/gcc.target/avr/pr122220.c
+ abbae4b0f7390ccdb0c5394f5172173a  gcc/testsuite/gcc.target/avr/pr122222-sitod.c
  8d351de18b6ca99f76c43eaa14213d53  gcc/testsuite/gcc.target/avr/pr46779-1.c
  2887bd8c777e4696616590f0d60653b6  gcc/testsuite/gcc.target/avr/pr46779-2.c
  d92831f37e30237d1dc568f585e4c2c9  gcc/testsuite/gcc.target/avr/pr50739.c
*************** cbd676b663043514bbc26a8a6c3b7a9d  gcc/te
*** 68538,68543 ****
--- 68800,68806 ----
  57cf0cd622a50ae70434f57249214c0a  gcc/testsuite/gcc.target/avr/progmem-error-1.cpp
  56de611fd29076ce9da389a853476819  gcc/testsuite/gcc.target/avr/progmem-warning-1.c
  06a40c47b5a1c6fd69f69a33ab43a52e  gcc/testsuite/gcc.target/avr/progmem.h
+ d0517d381fce8d1c143604ebcf5f58cc  gcc/testsuite/gcc.target/avr/sincos-1.c
  2b06671686db85920f5618751e2f29b6  gcc/testsuite/gcc.target/avr/torture/addr-space-1-0.c
  74d75d6b9b2f092a0eaf81b8ffe81ced  gcc/testsuite/gcc.target/avr/torture/addr-space-1-1.c
  e1c7151f17ec114f6529f690e6145cb6  gcc/testsuite/gcc.target/avr/torture/addr-space-1-g.c
*************** e1b2eb478168430cebc92bdd9d62b8c1  gcc/te
*** 68559,68564 ****
--- 68822,68828 ----
  0d57054a27e8f45b06571358f92c481b  gcc/testsuite/gcc.target/avr/torture/builtins-5-countlsfx.c
  0628f66d299ecca3619e823e3cc62896  gcc/testsuite/gcc.target/avr/torture/builtins-error.c
  c458c2462e23a4c58a7e4d05b6200907  gcc/testsuite/gcc.target/avr/torture/fix-types.h
+ d6efd3669f0c09d708be294666e58d98  gcc/testsuite/gcc.target/avr/torture/fx-to-double.c
  7859ec67a3dd2a6736649029fb384a2b  gcc/testsuite/gcc.target/avr/torture/get-mem.c
  80f19a686eb7d8fa81e0ee3daf68fc5c  gcc/testsuite/gcc.target/avr/torture/insv-anyshift-hi.c
  ae0e4639aab784faf6d9790cd216e5af  gcc/testsuite/gcc.target/avr/torture/insv-anyshift-si.c
*************** c02c9b09a64e3c14adfe954730cf8f3c  gcc/te
*** 68586,68591 ****
--- 68850,68865 ----
  caa7b81fc83f2373b987ae3dec63aa32  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c
  9d65901f178212417bd03274e7a0ff1d  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c
  51d04706ca0c4216d8d453fbe55f52ca  gcc/testsuite/gcc.target/avr/torture/pr119989.h
+ d0438290469e79373f6dd3933d324608  gcc/testsuite/gcc.target/avr/torture/pr122187.c
+ 29f4c964db7ef564a3a000cb063b157c  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssk.c
+ 67193b81ec722633cd4a96c262f212b7  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssr.c
+ 74bee38deb2c7a93221837e40bbfadc7  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-suk.c
+ cfa6dc119f8aecd5a863526026a0b850  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-sur.c
+ ebbf958a9ec613b0e83f39734d21b008  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usk.c
+ 61f30bb6c17362860da7175576769d9c  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usr.c
+ b5f3dac0a4aa3e456482d4b3162d64b6  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uuk.c
+ f5a1361523de0e3faf7dfdd815bbaedf  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uur.c
+ 33205c0601ab01f0a0bb4fcfdc9bd796  gcc/testsuite/gcc.target/avr/torture/pr125409.h
  0844a939ea2464d30cc8892c85b4aecc  gcc/testsuite/gcc.target/avr/torture/pr39633.c
  8fb17af722ee890b7fa08b5610cdb80e  gcc/testsuite/gcc.target/avr/torture/pr41885.c
  70b849f57ecf42299230b99b7734dd2d  gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
*************** d3f15f077bac4fdd98e262ff70319e29  gcc/te
*** 69491,69507 ****
  ab183c688cdb4a97e3f15f79a1c2e13f  gcc/testsuite/gcc.target/i386/amx-check.h
  e41de94d793974394641e42ed7370a65  gcc/testsuite/gcc.target/i386/amx-helper.h
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
! 215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
  c4406ef230e7a6bb0e7b45b2f94958e9  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
  0787eb1011631a123144aa2e9fe5b9f2  gcc/testsuite/gcc.target/i386/amxcomplex-asmatt-1.c
! 971dbba18c823297793b59421738511a  gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
  88abb806331f7455dfc053e7bfa9993d  gcc/testsuite/gcc.target/i386/amxcomplex-cmmimfp16ps-2.c
  5029635b15d7dd713761d53e4630a666  gcc/testsuite/gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c
  0a13ebe83385a9aedb0a82cf5504a96b  gcc/testsuite/gcc.target/i386/amxfp16-asmatt-1.c
! eefaf66ff1c174b18d152560427620f0  gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c
  26723806e86b2502f2d6b3c39febf8ce  gcc/testsuite/gcc.target/i386/amxfp16-dpfp16ps-2.c
  9c0241aa040bd07b656b878c62a423b9  gcc/testsuite/gcc.target/i386/amxint8-asmatt-1.c
! 2622cfbb5e38bb55e4751132b8d85ea3  gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c
  06751f31b3086f1ff040533de854e994  gcc/testsuite/gcc.target/i386/amxint8-dpbssd-2.c
  e3f6b37649c7f1fa4d20b6327cdcdb27  gcc/testsuite/gcc.target/i386/amxint8-dpbsud-2.c
  a8ab966558faa138830cc3e75dbe4464  gcc/testsuite/gcc.target/i386/amxint8-dpbusd-2.c
--- 69765,69781 ----
  ab183c688cdb4a97e3f15f79a1c2e13f  gcc/testsuite/gcc.target/i386/amx-check.h
  e41de94d793974394641e42ed7370a65  gcc/testsuite/gcc.target/i386/amx-helper.h
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
! 56eacc542ab2a1453a34424301380e68  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
  c4406ef230e7a6bb0e7b45b2f94958e9  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
  0787eb1011631a123144aa2e9fe5b9f2  gcc/testsuite/gcc.target/i386/amxcomplex-asmatt-1.c
! 4a8b5d514b0a549de6d01da6a871cace  gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
  88abb806331f7455dfc053e7bfa9993d  gcc/testsuite/gcc.target/i386/amxcomplex-cmmimfp16ps-2.c
  5029635b15d7dd713761d53e4630a666  gcc/testsuite/gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c
  0a13ebe83385a9aedb0a82cf5504a96b  gcc/testsuite/gcc.target/i386/amxfp16-asmatt-1.c
! 6367ac8d32cb21d49cfff80aef3427bd  gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c
  26723806e86b2502f2d6b3c39febf8ce  gcc/testsuite/gcc.target/i386/amxfp16-dpfp16ps-2.c
  9c0241aa040bd07b656b878c62a423b9  gcc/testsuite/gcc.target/i386/amxint8-asmatt-1.c
! 2a1a600bd028c3c6663894e5e2dbe1ac  gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c
  06751f31b3086f1ff040533de854e994  gcc/testsuite/gcc.target/i386/amxint8-dpbssd-2.c
  e3f6b37649c7f1fa4d20b6327cdcdb27  gcc/testsuite/gcc.target/i386/amxint8-dpbsud-2.c
  a8ab966558faa138830cc3e75dbe4464  gcc/testsuite/gcc.target/i386/amxint8-dpbusd-2.c
*************** fc50af06e61cf9d13887f2fe515b0e27  gcc/te
*** 69510,69522 ****
  a455baf8f9990eb7494164842dce7c91  gcc/testsuite/gcc.target/i386/amxtile-3.c
  84fc02cc52ddc8bdd53d77902c0176fb  gcc/testsuite/gcc.target/i386/amxtile-4.c
  8e7fab1b3f5c89155f09aabb59da8382  gcc/testsuite/gcc.target/i386/amxtile-asmatt-1.c
! 2629a435840ab211444b4a2af4563d8d  gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c
  000edc038d71c16eb844c26f6d7f2f53  gcc/testsuite/gcc.target/i386/and-1.c
  c5cfc6b01e748536e4ac5d65b3528952  gcc/testsuite/gcc.target/i386/andor-1.c
  c052d916aa90fa5343dac48ba370180f  gcc/testsuite/gcc.target/i386/andor-2.c
  745e29c9e0b19c2b93d7ae9d0de30df9  gcc/testsuite/gcc.target/i386/apx-1.c
  64d9611d397e2c1046819d723f4b3641  gcc/testsuite/gcc.target/i386/apx-2.c
  c608f84b293f51940f3c9578d19c6aa6  gcc/testsuite/gcc.target/i386/apx-3.c
  564fa992780ab2d8d650d966ad8dc7b2  gcc/testsuite/gcc.target/i386/apx-egprs-names.c
  df2002d51980a8fe3227dd410dccc984  gcc/testsuite/gcc.target/i386/apx-inline-gpr-norex2.c
  a1942f841fd2f6a8c62ff45bb98c8346  gcc/testsuite/gcc.target/i386/apx-interrupt-1.c
--- 69784,69797 ----
  a455baf8f9990eb7494164842dce7c91  gcc/testsuite/gcc.target/i386/amxtile-3.c
  84fc02cc52ddc8bdd53d77902c0176fb  gcc/testsuite/gcc.target/i386/amxtile-4.c
  8e7fab1b3f5c89155f09aabb59da8382  gcc/testsuite/gcc.target/i386/amxtile-asmatt-1.c
! fd1b7cbd5c658f65380f068fc3718869  gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c
  000edc038d71c16eb844c26f6d7f2f53  gcc/testsuite/gcc.target/i386/and-1.c
  c5cfc6b01e748536e4ac5d65b3528952  gcc/testsuite/gcc.target/i386/andor-1.c
  c052d916aa90fa5343dac48ba370180f  gcc/testsuite/gcc.target/i386/andor-2.c
  745e29c9e0b19c2b93d7ae9d0de30df9  gcc/testsuite/gcc.target/i386/apx-1.c
  64d9611d397e2c1046819d723f4b3641  gcc/testsuite/gcc.target/i386/apx-2.c
  c608f84b293f51940f3c9578d19c6aa6  gcc/testsuite/gcc.target/i386/apx-3.c
+ 08bbfd375d8c3815f761d62ed480569e  gcc/testsuite/gcc.target/i386/apx-broadcast.c
  564fa992780ab2d8d650d966ad8dc7b2  gcc/testsuite/gcc.target/i386/apx-egprs-names.c
  df2002d51980a8fe3227dd410dccc984  gcc/testsuite/gcc.target/i386/apx-inline-gpr-norex2.c
  a1942f841fd2f6a8c62ff45bb98c8346  gcc/testsuite/gcc.target/i386/apx-interrupt-1.c
*************** ce0cad9f4c5da96b0d07d2029604250c  gcc/te
*** 71468,71473 ****
--- 71743,71751 ----
  1d9114b974ef8241068b2ece25e00b2e  gcc/testsuite/gcc.target/i386/avx512f-pr103750-2.c
  fa2c17673f6ee0e3a3910298a93d723d  gcc/testsuite/gcc.target/i386/avx512f-pr114157.c
  9a6936f1815277f15801196159007f44  gcc/testsuite/gcc.target/i386/avx512f-pr114566.c
+ f20f5c3dc20ef0309b2a3dc9fdde483e  gcc/testsuite/gcc.target/i386/avx512f-pr124138-1.c
+ efe0a21951178063e3b3f10cf90f0adb  gcc/testsuite/gcc.target/i386/avx512f-pr124138-2.c
+ 1f47d4671c0dd3d13b733838385048ed  gcc/testsuite/gcc.target/i386/avx512f-pr124315.c
  88877c518076ecdec1dba128743ad627  gcc/testsuite/gcc.target/i386/avx512f-pr57233.c
  0272e0fc54cb34ee03db4b0027dbec3d  gcc/testsuite/gcc.target/i386/avx512f-pr63594-1.c
  381f53de01f1e9893e6903d9fac40b87  gcc/testsuite/gcc.target/i386/avx512f-pr63594-2.c
*************** b27abeb08b864284971b1aba8ced6b22  gcc/te
*** 72343,72348 ****
--- 72621,72627 ----
  a0059c72ee5f8a3b553da9a85e2e8686  gcc/testsuite/gcc.target/i386/avx512fp16-pr101846.c
  2e40da5c6cc066c5c3fc6534287c3bb1  gcc/testsuite/gcc.target/i386/avx512fp16-pr103750-1.c
  ddf42476c9bd487716414f58d3c10527  gcc/testsuite/gcc.target/i386/avx512fp16-pr103750-2.c
+ c0aba89383e573771d0b9ccacbca61eb  gcc/testsuite/gcc.target/i386/avx512fp16-pr124335.c
  b5d5082a6d865b8b24dbefc908fafb2d  gcc/testsuite/gcc.target/i386/avx512fp16-pr94680.c
  0be682c7ab6c675fa46f84d592d76785  gcc/testsuite/gcc.target/i386/avx512fp16-recip-1.c
  38a807ac8fade227ea34604df002fb5f  gcc/testsuite/gcc.target/i386/avx512fp16-recip-2.c
*************** a9b1dee6ec200856939709d32118cf4d  gcc/te
*** 73672,73678 ****
--- 73951,73967 ----
  98071546dc47914bb36a912c7912aca2  gcc/testsuite/gcc.target/i386/builtin-bswap-3.c
  3605b461ca62ccb4a3f70ccc13695ed5  gcc/testsuite/gcc.target/i386/builtin-bswap-4.c
  aa862ceda0d7a76c1857d703604c7cf7  gcc/testsuite/gcc.target/i386/builtin-bswap-5.c
+ 654b3662e0d1c66895af4e0b4c302291  gcc/testsuite/gcc.target/i386/builtin-copysign-2.c
+ c77edd4d8dc9ee85bf93b6e2c114d962  gcc/testsuite/gcc.target/i386/builtin-copysign-3.c
+ fa6ebeb8a38629b307b197117b388ef7  gcc/testsuite/gcc.target/i386/builtin-copysign-4.c
+ 183539c22965737f5ebca3d3e47d261b  gcc/testsuite/gcc.target/i386/builtin-copysign-5.c
+ 28a4a0d6bd0e09a7f1da7f5515db9c70  gcc/testsuite/gcc.target/i386/builtin-copysign-6.c
+ eeb2c795579e4b693eed6b471e041925  gcc/testsuite/gcc.target/i386/builtin-copysign-7.c
+ 4dde22c7279c7c8e684af5f718431d7d  gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c
+ 19fe0cd1992bc2d71db601dda2c2bd34  gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c
  04d6147486a507d49f5d165aac499b5d  gcc/testsuite/gcc.target/i386/builtin-copysign.c
+ 7c1badccd4856954ccba2139093860d2  gcc/testsuite/gcc.target/i386/builtin-fabs-1.c
+ d0d68d3b60ec7e31cbccbfd63299fac2  gcc/testsuite/gcc.target/i386/builtin-fabs-2.c
  83540904d3592a74a85860a8850ad325  gcc/testsuite/gcc.target/i386/builtin-has-attribute.c
  c9f542098c7044c5b8ac4b18be20d199  gcc/testsuite/gcc.target/i386/builtin-issignaling-1.c
  07c7b1b786ccb4b67484b353aa40d9c7  gcc/testsuite/gcc.target/i386/builtin-ucmp.c
*************** dfd6d048c4cc790cbf85d5080d1b5a6e  gcc/te
*** 73712,73717 ****
--- 74001,74007 ----
  e420c76b5d51167be532aea06e242b7d  gcc/testsuite/gcc.target/i386/cet-notrack-icf-2.c
  ecf5960debbf0be72bff47ede8c8800e  gcc/testsuite/gcc.target/i386/cet-notrack-icf-3.c
  8f1538b43a15c0827f66b6f4352ef5fb  gcc/testsuite/gcc.target/i386/cet-notrack-icf-4.c
+ c62171467fd6ad70fac732b022943ed4  gcc/testsuite/gcc.target/i386/cet-pr124366.c
  b8e1eda2f252f129a90e54617fa39500  gcc/testsuite/gcc.target/i386/cet-property-1.c
  f03688bba56369ec92f324db56599b3d  gcc/testsuite/gcc.target/i386/cet-property-2.c
  a4dff4664eff59fc1d1d6ac49e52a6b6  gcc/testsuite/gcc.target/i386/cet-rdssp-1.c
*************** eea712e5edcebcf47419b6442fd41bd4  gcc/te
*** 73760,73766 ****
  b72099cd966e9c576a224799821d5d28  gcc/testsuite/gcc.target/i386/cold-attribute-1.c
  0167fa6749ad93cf0251a4b9260fbccd  gcc/testsuite/gcc.target/i386/cold-attribute-2.c
  c1eab7ffc4e6134b9c680fe0c2920314  gcc/testsuite/gcc.target/i386/cold-attribute-3.c
! dcc5b76590328fd9f7c421fcb66d52d6  gcc/testsuite/gcc.target/i386/cold-attribute-4.c
  6475e870c428b4aeb9a5a7ed5149bb30  gcc/testsuite/gcc.target/i386/combine-mul.c
  51ddf79878f8a3a62bc3a456a718ddb8  gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
  f5b6283707f17b1db37120fd03d9ecf7  gcc/testsuite/gcc.target/i386/compress-float-387.c
--- 74050,74056 ----
  b72099cd966e9c576a224799821d5d28  gcc/testsuite/gcc.target/i386/cold-attribute-1.c
  0167fa6749ad93cf0251a4b9260fbccd  gcc/testsuite/gcc.target/i386/cold-attribute-2.c
  c1eab7ffc4e6134b9c680fe0c2920314  gcc/testsuite/gcc.target/i386/cold-attribute-3.c
! fb80b8e91abc0725f03bd2c87f0692c9  gcc/testsuite/gcc.target/i386/cold-attribute-4.c
  6475e870c428b4aeb9a5a7ed5149bb30  gcc/testsuite/gcc.target/i386/combine-mul.c
  51ddf79878f8a3a62bc3a456a718ddb8  gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
  f5b6283707f17b1db37120fd03d9ecf7  gcc/testsuite/gcc.target/i386/compress-float-387.c
*************** f1728b5e83b3ce3c8eaebf907d52fe30  gcc/te
*** 74227,74232 ****
--- 74517,74523 ----
  c6f6aaff47d064fbceed4cfbcb5b9279  gcc/testsuite/gcc.target/i386/keylocker-encodekey128.c
  a468c392fd8838d0198cfb8b367d4b6d  gcc/testsuite/gcc.target/i386/keylocker-encodekey256.c
  78393ec91600382e98db57e560deaea9  gcc/testsuite/gcc.target/i386/keylocker-loadiwkey.c
+ 75eec9ddfedd16dad1c34342d4bb3a1a  gcc/testsuite/gcc.target/i386/keylocker-pr123217.c
  6a61f297f5746de86187140f048ab655  gcc/testsuite/gcc.target/i386/l_fma_1.h
  c598c1d2a127be1189b3dfe020919429  gcc/testsuite/gcc.target/i386/l_fma_2.h
  8aa60b44b83369f838965e6e8e99c4e7  gcc/testsuite/gcc.target/i386/l_fma_3.h
*************** cbaafd43310e10a7ba4ce687bafe06da  gcc/te
*** 74532,74542 ****
  89d909d7d758041e829631ac800bf196  gcc/testsuite/gcc.target/i386/pieces-memcpy-15.c
  437a6c001b5f504cb8a978424f9f229c  gcc/testsuite/gcc.target/i386/pieces-memcpy-16.c
  a0fc0b89838032f850b17823a354b986  gcc/testsuite/gcc.target/i386/pieces-memcpy-17.c
! ce99ca62859e3b5ee0e5695b59309237  gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c
  b5f6fb3aaac27e15ae52d9111e60d98d  gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c
  279c04d20615905ca5bf2f44eb5a231d  gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c
  7e2d486487e1f536c226d8bc290fd8ad  gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c
! 2f4b551b9d6addea576cff08a8831f3f  gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c
  483ed3c0a5b3efe685343cb5dc87d54d  gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c
  2820c9b91ec98c38843764eea07d4b75  gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c
  698986063dd5ba005476ca849de14359  gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c
--- 74823,74833 ----
  89d909d7d758041e829631ac800bf196  gcc/testsuite/gcc.target/i386/pieces-memcpy-15.c
  437a6c001b5f504cb8a978424f9f229c  gcc/testsuite/gcc.target/i386/pieces-memcpy-16.c
  a0fc0b89838032f850b17823a354b986  gcc/testsuite/gcc.target/i386/pieces-memcpy-17.c
! 7a34703054f1d16fc3e3de2cc1b87012  gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c
  b5f6fb3aaac27e15ae52d9111e60d98d  gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c
  279c04d20615905ca5bf2f44eb5a231d  gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c
  7e2d486487e1f536c226d8bc290fd8ad  gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c
! 9d90237b50551a44a67d354724502ebb  gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c
  483ed3c0a5b3efe685343cb5dc87d54d  gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c
  2820c9b91ec98c38843764eea07d4b75  gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c
  698986063dd5ba005476ca849de14359  gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c
*************** ab6fa2bfe98c867fab182d157d457706  gcc/te
*** 74585,74594 ****
  d98f40e3e5aa8e8b9f5499569f688965  gcc/testsuite/gcc.target/i386/pieces-memset-43.c
  2b47b7f82aeabc7a238642520819b3f0  gcc/testsuite/gcc.target/i386/pieces-memset-44.c
  86947bff2a1eb3faba119670600994db  gcc/testsuite/gcc.target/i386/pieces-memset-45.c
! f29f6d2af05e1f08f148f0eed162d860  gcc/testsuite/gcc.target/i386/pieces-memset-46.c
  8f0614f1d8cbc09d9e6e515b9c85586c  gcc/testsuite/gcc.target/i386/pieces-memset-47.c
  fab4224ceed336ed6902793909c0c6c2  gcc/testsuite/gcc.target/i386/pieces-memset-48.c
! b6a5763cac2b72e43f0900c7fbca0740  gcc/testsuite/gcc.target/i386/pieces-memset-49.c
  e59e962761850423b307c01f720c8e84  gcc/testsuite/gcc.target/i386/pieces-memset-5.c
  f6afe5571570af54d1d2e02c0e28d3f6  gcc/testsuite/gcc.target/i386/pieces-memset-50.c
  587ca57e48d1c64f4cb91b6203512c99  gcc/testsuite/gcc.target/i386/pieces-memset-51.c
--- 74876,74885 ----
  d98f40e3e5aa8e8b9f5499569f688965  gcc/testsuite/gcc.target/i386/pieces-memset-43.c
  2b47b7f82aeabc7a238642520819b3f0  gcc/testsuite/gcc.target/i386/pieces-memset-44.c
  86947bff2a1eb3faba119670600994db  gcc/testsuite/gcc.target/i386/pieces-memset-45.c
! 3647374ee718421444609e296cfa0ad2  gcc/testsuite/gcc.target/i386/pieces-memset-46.c
  8f0614f1d8cbc09d9e6e515b9c85586c  gcc/testsuite/gcc.target/i386/pieces-memset-47.c
  fab4224ceed336ed6902793909c0c6c2  gcc/testsuite/gcc.target/i386/pieces-memset-48.c
! 9f2ed79a200ad2a71bf00d1e582aae79  gcc/testsuite/gcc.target/i386/pieces-memset-49.c
  e59e962761850423b307c01f720c8e84  gcc/testsuite/gcc.target/i386/pieces-memset-5.c
  f6afe5571570af54d1d2e02c0e28d3f6  gcc/testsuite/gcc.target/i386/pieces-memset-50.c
  587ca57e48d1c64f4cb91b6203512c99  gcc/testsuite/gcc.target/i386/pieces-memset-51.c
*************** ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/te
*** 75238,75245 ****
--- 75529,75555 ----
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
  bb420ee68e25b3f2c223a9b99a8e7c79  gcc/testsuite/gcc.target/i386/pr119784a.c
  038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
+ 1404641b6882eb8151341efedd467313  gcc/testsuite/gcc.target/i386/pr120427-1.c
+ b912addc770944f54b5baa8db2467d9d  gcc/testsuite/gcc.target/i386/pr120427-2.c
+ c87152a8a84d546309327b3da89eb566  gcc/testsuite/gcc.target/i386/pr120427-3.c
+ f5a1252b1fe24ea2b97ff3762c399ed9  gcc/testsuite/gcc.target/i386/pr120427-4.c
+ 16984aa55364473d08d90334f60bf59e  gcc/testsuite/gcc.target/i386/pr120427-5.c
+ e33b63cd8f6d60b286b2286424f25714  gcc/testsuite/gcc.target/i386/pr120908.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
+ 06cf62e068f23c847b4e4ce15a37d992  gcc/testsuite/gcc.target/i386/pr121208-1a.c
+ d7bb5368ed41a3ee6fb312a80c99d313  gcc/testsuite/gcc.target/i386/pr121208-1b.c
+ 4bc0f0b5cb9d3cd77907d3b642e0f8db  gcc/testsuite/gcc.target/i386/pr121208-2a.c
+ 26d68c5cba57817989670af4634fe936  gcc/testsuite/gcc.target/i386/pr121208-2b.c
+ d4ebe08b4cb963582547d8bb5712e712  gcc/testsuite/gcc.target/i386/pr121208-3a.c
+ 5064c3ab2b92e2f20dcd604d557d738c  gcc/testsuite/gcc.target/i386/pr121208-3b.c
+ 12e796120a8d76792772ddd159f57f3f  gcc/testsuite/gcc.target/i386/pr121274.c
+ 600ff3c5da35f468b87a23e0d1678a3e  gcc/testsuite/gcc.target/i386/pr122104.c
+ dc0ac30205a49a37f80c833e996ed4d2  gcc/testsuite/gcc.target/i386/pr123121.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
+ fd0c95fcad577a49c3553f21604c3b61  gcc/testsuite/gcc.target/i386/pr123484.c
+ 0871390dda9d3f14f2d642eb1d5aa640  gcc/testsuite/gcc.target/i386/pr124056.c
+ d9ed650f309dc0e24daeb25d90c34fa0  gcc/testsuite/gcc.target/i386/pr124316.c
+ dc1ca8471081be67fdad4d340997d425  gcc/testsuite/gcc.target/i386/pr125351.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
  31ead0ee84b382ba03e3561931bc6e40  gcc/testsuite/gcc.target/i386/pr14289-1.c
*************** b3482aa074e044edfb2a4c72e5c1d085  gcc/te
*** 78012,78017 ****
--- 78322,78328 ----
  133d7eb15ead287c2ef11a8162780801  gcc/testsuite/gcc.target/i386/unroll-1.c
  c30812b4c7eb367ec8e5f4aba349d66b  gcc/testsuite/gcc.target/i386/user_msr-1.c
  d817f6a5d58eae58bff8e4083f7945db  gcc/testsuite/gcc.target/i386/user_msr-2.c
+ aa50202a413f80a35396415eec316d08  gcc/testsuite/gcc.target/i386/user_msr-pr123217.c
  aafb0010ebceff249236af3aa1f22e2b  gcc/testsuite/gcc.target/i386/vararg-1.c
  3b8acabb2f18b3fd13f3871729bac23f  gcc/testsuite/gcc.target/i386/vararg-10.c
  2869209769b52916ee551938b0c572f1  gcc/testsuite/gcc.target/i386/vararg-2.c
*************** a6d76184ab8ab5eabc181a864d04aac5  gcc/te
*** 78338,78343 ****
--- 78649,78655 ----
  a7210513dd89b8e683a00184ee4478a4  gcc/testsuite/gcc.target/loongarch/attr-model-3.c
  9d4f972a3175f736a746ae031fb25e7a  gcc/testsuite/gcc.target/loongarch/attr-model-4.c
  02f1973aec4f57a84c09f2b6bc6eaf79  gcc/testsuite/gcc.target/loongarch/attr-model-5.c
+ eaedeb33f4a944f6ddcb113a7cd3ed14  gcc/testsuite/gcc.target/loongarch/attr-model-6.c
  f9bd26f98b04e99789925370214a2a06  gcc/testsuite/gcc.target/loongarch/attr-model-diag.c
  b0da33fc443024e77c7b605056bff4ae  gcc/testsuite/gcc.target/loongarch/attr-model-test.c
  10a58b0c68aafdaa8704cc0ab8a37e3c  gcc/testsuite/gcc.target/loongarch/avg-ceil-lasx.c
*************** c9d08bb72896d9b4861ce4073ec5e57f  gcc/te
*** 78383,78388 ****
--- 78695,78701 ----
  f72ce6aeb8beb0eff27354c07ef71cd1  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c
  ab6db876a44193a92b0a1625c65eb4e7  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c
  aaaf53a882a8a0ae0583d851021e03cc  gcc/testsuite/gcc.target/loongarch/fmax-fmin.c
+ ba1f9cd7776de398eabc15fb6f7d523b  gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c
  fee1bedd25e7db9b4e91f3ede9e05608  gcc/testsuite/gcc.target/loongarch/frint.c
  2f79a7482d38a9632f39b484c09a8f2f  gcc/testsuite/gcc.target/loongarch/fscaleb.c
  40d69683116e216d2295e4600c830736  gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c
*************** b4671c279162dd2c1fd844929bdbbc6b  gcc/te
*** 78450,78455 ****
--- 78763,78774 ----
  31e639d66ad61d9aa6ddaa05d8baeb5d  gcc/testsuite/gcc.target/loongarch/pr118843.c
  dbfbd76701c5c3e6c8ed37ced1ba9cc7  gcc/testsuite/gcc.target/loongarch/pr119084.c
  dde2cba27bc4292492e4c0dd492a70e0  gcc/testsuite/gcc.target/loongarch/pr119408.c
+ 359760e5160f4b52d2fa349806589a0d  gcc/testsuite/gcc.target/loongarch/pr121064.c
+ acf1fac916847c2064b8d2bbb6535828  gcc/testsuite/gcc.target/loongarch/pr121542.c
+ 51927631f78916e06162754b5c3d24fd  gcc/testsuite/gcc.target/loongarch/pr122097.c
+ 0626ac54385b7d00394be7a0b09850a1  gcc/testsuite/gcc.target/loongarch/pr122695-1.c
+ fb640df1e5eb969859e5c360f608dec4  gcc/testsuite/gcc.target/loongarch/pr122695-2.c
+ 8784ee3164375854ef7b1ffc0c536b5e  gcc/testsuite/gcc.target/loongarch/pr125049.c
  3adba2a8ae6f671eb22ec8228777c1ac  gcc/testsuite/gcc.target/loongarch/prolog-opt.c
  1bfa30f99dc5f04f569fbff68640ab19  gcc/testsuite/gcc.target/loongarch/recip-divf.c
  dfa82d46bae04856dd91309f03684574  gcc/testsuite/gcc.target/loongarch/recip-sqrtf.c
*************** eb7720d1ee0f7dde86471e1b8ad3b82f  gcc/te
*** 78733,78738 ****
--- 79052,79059 ----
  41959494be952fe2706930c383d4bb72  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvsubwod-2.c
  601d1dad0996e42f64abfcea74b57e97  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvxor.c
  2b866f80af5cafa566ed2bbd75936c79  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvxori.c
+ 970835a22a2eef8dad1be6ea6edc6402  gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123521.c
+ 91b4f4f5d2c5b786b45fad8edab6e2a3  gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123766.c
  26a64124f8d3c5fe928c05f610a5de04  gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp
  5d55305c4d66b32dd004f424d4a0a0fb  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c
  e9f9a02f0c23d753d9f3a17d45f85db1  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-builtin.c
*************** d9ab49aa7d7730596242bed46b4c7bed  gcc/te
*** 78942,78947 ****
--- 79263,79270 ----
  87366d24b56b7a97edbfcb4983a57a52  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vxori.c
  5c8f61426f6c4882be1e61b33f277961  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-xorsign-run.c
  ee9aafb340a5c2597a6f656ccbd8a374  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-xorsign.c
+ 559fe74ad49c6f3f986d68a4822b9041  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123766.c
+ c09c273ba4acff5a9b6ac824b23ab663  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123807.c
  70005d5f6a26c8e3f8e5afe7cdc53bbf  gcc/testsuite/gcc.target/loongarch/vector/simd_correctness_check.h
  32fede0d9373ef10c92cbfd15cda3c85  gcc/testsuite/gcc.target/loongarch/vfcmp-d.c
  c08e307370de6dd5122f517ca9b88bd3  gcc/testsuite/gcc.target/loongarch/vfcmp-f.c
*************** f1ea877f35ca466bb967858a715d4f6c  gcc/te
*** 80345,80355 ****
  c02928696f09c7fc9c99174083ecb49c  gcc/testsuite/gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c
  04b3fc34bfccb1856530015004e53b0f  gcc/testsuite/gcc.target/powerpc/builtin-fegetround.c
  660ec5b28bd11c4d01e9d4d45e4670fa  gcc/testsuite/gcc.target/powerpc/builtin-vec-sums-be-int.c
! ac5fc8abef0ee25e3006e84d9ec6e994  gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
  a8f9adaf01b9c4605ccf3a2b91395d9a  gcc/testsuite/gcc.target/powerpc/builtins-1-be-folded.c
  d7a191d70b9b9996b4b19f79964cf6c2  gcc/testsuite/gcc.target/powerpc/builtins-1-le-folded.c
  3630b13056a134afac9072861304e1b7  gcc/testsuite/gcc.target/powerpc/builtins-1-p10-runnable.c
! f2df3bae9f5a0120e073ffd853edc95d  gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c
  567fac0020932c494ce7231e1a6fa753  gcc/testsuite/gcc.target/powerpc/builtins-1.c
  ec989a2f75efdf3d6a18fdd8ae6ce35b  gcc/testsuite/gcc.target/powerpc/builtins-1.fold.h
  8e9c179d065241f1abc6396d9fe644c2  gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
--- 80668,80678 ----
  c02928696f09c7fc9c99174083ecb49c  gcc/testsuite/gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c
  04b3fc34bfccb1856530015004e53b0f  gcc/testsuite/gcc.target/powerpc/builtin-fegetround.c
  660ec5b28bd11c4d01e9d4d45e4670fa  gcc/testsuite/gcc.target/powerpc/builtin-vec-sums-be-int.c
! 0a0b275d0be04b242c475f65eea6a60a  gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
  a8f9adaf01b9c4605ccf3a2b91395d9a  gcc/testsuite/gcc.target/powerpc/builtins-1-be-folded.c
  d7a191d70b9b9996b4b19f79964cf6c2  gcc/testsuite/gcc.target/powerpc/builtins-1-le-folded.c
  3630b13056a134afac9072861304e1b7  gcc/testsuite/gcc.target/powerpc/builtins-1-p10-runnable.c
! dc57c7d2d3ef6cbd9f55a24e38ba3fca  gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c
  567fac0020932c494ce7231e1a6fa753  gcc/testsuite/gcc.target/powerpc/builtins-1.c
  ec989a2f75efdf3d6a18fdd8ae6ce35b  gcc/testsuite/gcc.target/powerpc/builtins-1.fold.h
  8e9c179d065241f1abc6396d9fe644c2  gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
*************** b2276d66af2be03cec5596af82315b7f  gcc/te
*** 80601,80607 ****
  0b6c17e72390bfb9052600f21ba0c89a  gcc/testsuite/gcc.target/powerpc/float128-call.c
  5dc8dae5e463cb191053a5df48a57e79  gcc/testsuite/gcc.target/powerpc/float128-cmove.c
  d2e66a0adae820881b99ec45ffe24c78  gcc/testsuite/gcc.target/powerpc/float128-cmp.c
! 5a85c91ce9fcc3b73b638295db4d02b2  gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c
  c30565a907667e990dd7f92247003742  gcc/testsuite/gcc.target/powerpc/float128-complex-1.c
  77d0f44077c974643c0f632095a7df55  gcc/testsuite/gcc.target/powerpc/float128-complex-2.c
  fd25bebf75e74cfe87389db792a9d7e6  gcc/testsuite/gcc.target/powerpc/float128-constant.c
--- 80924,80930 ----
  0b6c17e72390bfb9052600f21ba0c89a  gcc/testsuite/gcc.target/powerpc/float128-call.c
  5dc8dae5e463cb191053a5df48a57e79  gcc/testsuite/gcc.target/powerpc/float128-cmove.c
  d2e66a0adae820881b99ec45ffe24c78  gcc/testsuite/gcc.target/powerpc/float128-cmp.c
! c92e8bba2bb1e5bee2f6953c558e511c  gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c
  c30565a907667e990dd7f92247003742  gcc/testsuite/gcc.target/powerpc/float128-complex-1.c
  77d0f44077c974643c0f632095a7df55  gcc/testsuite/gcc.target/powerpc/float128-complex-2.c
  fd25bebf75e74cfe87389db792a9d7e6  gcc/testsuite/gcc.target/powerpc/float128-constant.c
*************** d128b18a20f2a55978e519508f48f1ae  gcc/te
*** 82592,82598 ****
  cdde8569ebb2ca104f942dd183c12fa2  gcc/testsuite/gcc.target/powerpc/vsx-builtin-4.c
  9bacca313420b00c643d89ba549c4c57  gcc/testsuite/gcc.target/powerpc/vsx-builtin-5.c
  34d5d7bd0a57589cc1249d19cac92fbf  gcc/testsuite/gcc.target/powerpc/vsx-builtin-6.c
! b85a4370874d0558ca845f7c6e5f0a6d  gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
  6c165a9a07d4fa8f16289c23ae6a58fd  gcc/testsuite/gcc.target/powerpc/vsx-builtin-8.c
  33633751eb0bfabbb2951a0070770508  gcc/testsuite/gcc.target/powerpc/vsx-builtin-9a.c
  2e9c4b2355be46611bfe42e4a9f8d1f3  gcc/testsuite/gcc.target/powerpc/vsx-builtin-9b.c
--- 82915,82921 ----
  cdde8569ebb2ca104f942dd183c12fa2  gcc/testsuite/gcc.target/powerpc/vsx-builtin-4.c
  9bacca313420b00c643d89ba549c4c57  gcc/testsuite/gcc.target/powerpc/vsx-builtin-5.c
  34d5d7bd0a57589cc1249d19cac92fbf  gcc/testsuite/gcc.target/powerpc/vsx-builtin-6.c
! a3ba74a674fd49b3c22b51c6c608e158  gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
  6c165a9a07d4fa8f16289c23ae6a58fd  gcc/testsuite/gcc.target/powerpc/vsx-builtin-8.c
  33633751eb0bfabbb2951a0070770508  gcc/testsuite/gcc.target/powerpc/vsx-builtin-9a.c
  2e9c4b2355be46611bfe42e4a9f8d1f3  gcc/testsuite/gcc.target/powerpc/vsx-builtin-9b.c
*************** d4ffaed09552423ead8859494c462c3b  gcc/te
*** 82651,82664 ****
  a8776213e94c56a3260e8eeeb1d3a2ff  gcc/testsuite/gcc.target/powerpc/vsx-vector-6-func-cmp.h
  3ebe8f0d460649b370313955c9827479  gcc/testsuite/gcc.target/powerpc/vsx-vector-7.c
  ebd3e2644f3e43135e2172b26fafd1bf  gcc/testsuite/gcc.target/powerpc/vsx-vector-abss.c
! 35d7bcc6cf69574c463501a1e76e510d  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c
! 84cfc07d80810cb3573b9b1f672ac915  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c
! f594dbaf22d3e98eb44318a87d87b445  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c
! dfed3e0b27e36cef4c1b5ca379a587cd  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c
! 90b06f6dd3084d0a0463758c56860af8  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c
! 66401779cf7819a1c89fe27214fee960  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c
! 83dfe066840d622625d47fb5a0b0a7e6  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
! 909fbf2c73af98a99b3970443e100b03  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
  c64a5cc2ce1d0b7ac9d881b4585a9313  gcc/testsuite/gcc.target/powerpc/vsx_mask-count-runnable.c
  37a4787409404cc5944ae67ed64e5513  gcc/testsuite/gcc.target/powerpc/vsx_mask-expand-runnable.c
  829a2621c1495feaccfe06f5b735d1db  gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c
--- 82974,82995 ----
  a8776213e94c56a3260e8eeeb1d3a2ff  gcc/testsuite/gcc.target/powerpc/vsx-vector-6-func-cmp.h
  3ebe8f0d460649b370313955c9827479  gcc/testsuite/gcc.target/powerpc/vsx-vector-7.c
  ebd3e2644f3e43135e2172b26fafd1bf  gcc/testsuite/gcc.target/powerpc/vsx-vector-abss.c
! ab8e1bcaca06d2ade6381bc84c1c416b  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c
! 48ee9cd54a5b90dfbb5863a2e48a09c8  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-10.c
! 57c9502895b5ef5cc036b4a24bc9dae2  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-11.c
! 85dab13ddf2c377ae5582da8786f518a  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-12.c
! 7e81559fd15bfe837065dcaf03ed5979  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-13.c
! 7c6cffdf3e1f05d2dec66c7d197e7517  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-14.c
! f4f27e95eeb7fb1d9c950a2108741642  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-15.c
! 8b8ea43be20a8eef8443ed25138feb09  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-16.c
! 71874a8c00aca849836510519349f098  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c
! 29a0c4df2c499616fd17e0c500878f2a  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c
! 8f01c5c01ee100d414706c6b8f14dc39  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c
! 1d534745164dd9ed3170573f14e704c9  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c
! 88516a15016b0ed6d4199e01a383834c  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c
! b2e1150d55fe0e18ac0dc545afe43181  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
! c66a4fab0f17dd4813aec6e80e6042dc  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
! a9b38e5a37de52ced500d53d1d518b95  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c
  c64a5cc2ce1d0b7ac9d881b4585a9313  gcc/testsuite/gcc.target/powerpc/vsx_mask-count-runnable.c
  37a4787409404cc5944ae67ed64e5513  gcc/testsuite/gcc.target/powerpc/vsx_mask-expand-runnable.c
  829a2621c1495feaccfe06f5b735d1db  gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c
*************** dd0d54001d5c0c89de9ecbfeca7d9163  gcc/te
*** 87426,87431 ****
--- 87757,87765 ----
  18a30b21905501cfe3b583c13b3c756a  gcc/testsuite/gcc.target/s390/vector/vec-clobber-1.c
  f4f003702feb568dbc88ed411b2783e9  gcc/testsuite/gcc.target/s390/vector/vec-cmp-1.c
  6ad5106106095fa0defa7e045850f1a6  gcc/testsuite/gcc.target/s390/vector/vec-cmp-2.c
+ 43da7697d65673c784c720bf722bedd0  gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-1.c
+ ae9432c5505fa00769af44de635efdd0  gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-2.c
+ 84259de43489373910ab6e819d3c5f9d  gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-3.c
  3dea3f0d6272507210edfbf3ebbcbaee  gcc/testsuite/gcc.target/s390/vector/vec-cmpge.c
  836ebd984394712bf83085d3675ab39b  gcc/testsuite/gcc.target/s390/vector/vec-copysign-execute.c
  b2d0a0fe9bc2bcd1f0cf523b66f2c66f  gcc/testsuite/gcc.target/s390/vector/vec-copysign.c
*************** bcf389e3992a960c831b1dafe53a539c  gcc/te
*** 88768,88773 ****
--- 89102,89109 ----
  511a4b96302498f658f208676182a550  gcc/testsuite/gdc.dg/debug/pr119826.d
  0121ae6408f107a6bf6f915c24102bd3  gcc/testsuite/gdc.dg/debug/trivial.d
  1de9230a55fd28a909c2928d5b9e227d  gcc/testsuite/gdc.dg/dg.exp
+ 1f25f7140ea236c33498050fa3d25fc3  gcc/testsuite/gdc.dg/driver_debuglib.d
+ bfb9dc003b6110d37dc4b62c222afe7d  gcc/testsuite/gdc.dg/driver_defaultlib.d
  d3b168d9c2ed0fe5ba9b297bd8b4a1a3  gcc/testsuite/gdc.dg/extern-c++/extern-c++.exp
  61180002f0f17ca7ed75def599d123f0  gcc/testsuite/gdc.dg/extern-c++/pr101664.d
  68936fbe708c1d13dcaca6e4a4a06f77  gcc/testsuite/gdc.dg/extern-c++/pr101664_1.cc
*************** a2d402e0596a4abb1dc6e25b11e9aa9c  gcc/te
*** 88891,88896 ****
--- 89227,89241 ----
  72d81c5bd5b1ad40ec304fe72a725695  gcc/testsuite/gdc.dg/pr117115.d
  a81f29fc44be5cd208351e9e8b4a742b  gcc/testsuite/gdc.dg/pr117621.d
  0b4ca5d336606fc94e656b8731b0a78e  gcc/testsuite/gdc.dg/pr119139.d
+ ad51c6065b49988f50a3f799a0e5f9a3  gcc/testsuite/gdc.dg/pr121477.d
+ e4d8064a02951cfe69cf639a94128dd0  gcc/testsuite/gdc.dg/pr123046.d
+ 9ce0fee5b0fbb84c1de9a43ef50b9462  gcc/testsuite/gdc.dg/pr123264.d
+ e89ebd75d9b162289c929675222e8501  gcc/testsuite/gdc.dg/pr123407a.d
+ a45efe7a1d6f8b7f15f7befa3e7b1768  gcc/testsuite/gdc.dg/pr123407b.d
+ 4e7020df6ad139d4b43104ca5b97d142  gcc/testsuite/gdc.dg/pr123419.d
+ 56c2a0939424aafd465f15ffdd08847b  gcc/testsuite/gdc.dg/pr123798.d
+ 8121b336beaee98841d3fb15f1ac0198  gcc/testsuite/gdc.dg/pr124026.d
+ 0510f96a422a0543d9382a0700a9b0fb  gcc/testsuite/gdc.dg/pr125089.d
  d32aa8ed5ea10931be4ddb5bb9e863d8  gcc/testsuite/gdc.dg/pr89017.d
  53fa8db94d4ca3fc9ba83769733dc0e7  gcc/testsuite/gdc.dg/pr89041.d
  6c316b13f71ea31fcada56b58a41ebd1  gcc/testsuite/gdc.dg/pr89042a.d
*************** eebe0b1a8ecf5f5162d0d07addd22be4  gcc/te
*** 89006,89011 ****
--- 89351,89357 ----
  11af6bc37407477e6b53012a5574c0a9  gcc/testsuite/gdc.dg/torture/imports/pr108055spec.d
  e253515f214e7f5bb8a972ce8348282f  gcc/testsuite/gdc.dg/torture/imports/pr108055write.d
  50c9072e0ffdfc079790d637e1a5c72a  gcc/testsuite/gdc.dg/torture/imports/pr109108.d
+ 1759a92fda4dd14f25ea525b1ce3d479  gcc/testsuite/gdc.dg/torture/imports/pr119799c.c
  646170aa418a99d37c59a7bb02130400  gcc/testsuite/gdc.dg/torture/init1.d
  1ae8edb9b2cd9747efb9868621aec4e8  gcc/testsuite/gdc.dg/torture/pr100882.d
  cede80748e43884ad3613a2a7e4b6ff3  gcc/testsuite/gdc.dg/torture/pr101273.d
*************** de9193ce38f7ef3ee1cc3a94fc8a92dc  gcc/te
*** 89021,89026 ****
--- 89367,89375 ----
  ad67c2aef0ecf01677e58695b0cc5d36  gcc/testsuite/gdc.dg/torture/pr113758.d
  c3a3fcac804266bf984aad50e1f84157  gcc/testsuite/gdc.dg/torture/pr114171.d
  a1ef8a304026fe097c3f6356f2dd2b2a  gcc/testsuite/gdc.dg/torture/pr117002.d
+ afca27995d2dc34f26a56b5ac812a53a  gcc/testsuite/gdc.dg/torture/pr119799.d
+ 07b590affdb88374b53601052d66c8a8  gcc/testsuite/gdc.dg/torture/pr120096.d
+ 18190856d5dece191ecd40c185c2b684  gcc/testsuite/gdc.dg/torture/pr123422.d
  580aadb24b666799e25f1f02ef3b7bbb  gcc/testsuite/gdc.dg/torture/pr92309.d
  d5626e21f8cdc22799175cb6adfddfd6  gcc/testsuite/gdc.dg/torture/pr94424.d
  ae5b279461655f243d767b80a6d0bc1b  gcc/testsuite/gdc.dg/torture/pr94777b.d
*************** d922e822af6878c17645657a31f3a9ee  gcc/te
*** 93029,93034 ****
--- 93378,93384 ----
  f082841753f64949d8329e00653460ec  gcc/testsuite/gfortran.dg/alloc_comp_assign_14.f08
  85b8ed4293af5c7bd2103a9d510c2d38  gcc/testsuite/gfortran.dg/alloc_comp_assign_15.f03
  ae9a8153879a562e6eaad8b096b2f86b  gcc/testsuite/gfortran.dg/alloc_comp_assign_16.f03
+ 24801c6979936a4bda1ff676ac369104  gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90
  552851693306221f925e1819ce51de3f  gcc/testsuite/gfortran.dg/alloc_comp_assign_2.f90
  42f08bf1aab342b9e46a1eca61a4eba8  gcc/testsuite/gfortran.dg/alloc_comp_assign_3.f90
  46cc93b771f780be474234fcd524c4e6  gcc/testsuite/gfortran.dg/alloc_comp_assign_4.f90
*************** ca8eb6db97f18fddd890561a22a8cfbb  gcc/te
*** 93039,93045 ****
  b199d329559fc3f1b7e43203cdc460a8  gcc/testsuite/gfortran.dg/alloc_comp_assign_9.f90
  f3e77fcc01f3018d64a5ab3fb3368fd1  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_1.f90
  948fbff88548392e63b67e446403f2b3  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90
! 5570a1ba5f39729a7f7334e3e99b7262  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
  01702b87b457a827628539076733715b  gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
  c161df8775b21819cda81ffa8bd1b23f  gcc/testsuite/gfortran.dg/alloc_comp_basics_2.f90
  8b7900064da86d65153abf5f6284186c  gcc/testsuite/gfortran.dg/alloc_comp_basics_3.f90
--- 93389,93395 ----
  b199d329559fc3f1b7e43203cdc460a8  gcc/testsuite/gfortran.dg/alloc_comp_assign_9.f90
  f3e77fcc01f3018d64a5ab3fb3368fd1  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_1.f90
  948fbff88548392e63b67e446403f2b3  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90
! 2ff38561a2a894668fd17d66604b6953  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
  01702b87b457a827628539076733715b  gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
  c161df8775b21819cda81ffa8bd1b23f  gcc/testsuite/gfortran.dg/alloc_comp_basics_2.f90
  8b7900064da86d65153abf5f6284186c  gcc/testsuite/gfortran.dg/alloc_comp_basics_3.f90
*************** d863a7b7baeff902abcb73f750294f4b  gcc/te
*** 93050,93057 ****
  01ce8d13f86e2c85f83ca4efb7539502  gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90
  ae1746e87e5762c6b68826278ee28628  gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90
  dfee92253f572cefadfc9896e31aa911  gcc/testsuite/gfortran.dg/alloc_comp_class_2.f90
! 52d1ff97d60e0604c88137e39d6ee817  gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03
! ea89ea8f65090a4151fb0cc736157f55  gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03
  344f8d4e949089ff45b60afe587aec49  gcc/testsuite/gfortran.dg/alloc_comp_class_5.f03
  f87a2c3e25c614f7c7331df1491f1a03  gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90
  3c67ddbdd5451204f415b2315005e09e  gcc/testsuite/gfortran.dg/alloc_comp_constraint_2.f90
--- 93400,93407 ----
  01ce8d13f86e2c85f83ca4efb7539502  gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90
  ae1746e87e5762c6b68826278ee28628  gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90
  dfee92253f572cefadfc9896e31aa911  gcc/testsuite/gfortran.dg/alloc_comp_class_2.f90
! b387c0f145b4b44ea83d2265782d7be3  gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03
! a3de047b4026c722974a4a412344860d  gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03
  344f8d4e949089ff45b60afe587aec49  gcc/testsuite/gfortran.dg/alloc_comp_class_5.f03
  f87a2c3e25c614f7c7331df1491f1a03  gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90
  3c67ddbdd5451204f415b2315005e09e  gcc/testsuite/gfortran.dg/alloc_comp_constraint_2.f90
*************** f4cacbb7fc7a73c4dc452abb4169a708  gcc/te
*** 93171,93177 ****
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
  d76b12105ec17a95100b1c0109eba21e  gcc/testsuite/gfortran.dg/allocate_with_source_12.f03
  7eb26a0ecf38b62a277060acb6ecd19a  gcc/testsuite/gfortran.dg/allocate_with_source_13.f03
! e983e31f5907aa7a18c2e0f43cdf3d9a  gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
  7750d599d9ba89b3f5a9b83001a920ef  gcc/testsuite/gfortran.dg/allocate_with_source_15.f03
  f68a5464b779f75e7ff8e50d9d8b199e  gcc/testsuite/gfortran.dg/allocate_with_source_16.f90
  bd4118fd768f3467307efc9602103e4c  gcc/testsuite/gfortran.dg/allocate_with_source_17.f03
--- 93521,93527 ----
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
  d76b12105ec17a95100b1c0109eba21e  gcc/testsuite/gfortran.dg/allocate_with_source_12.f03
  7eb26a0ecf38b62a277060acb6ecd19a  gcc/testsuite/gfortran.dg/allocate_with_source_13.f03
! aa0e2acc5bfe4a7ddc3c5e96cc91be7e  gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
  7750d599d9ba89b3f5a9b83001a920ef  gcc/testsuite/gfortran.dg/allocate_with_source_15.f03
  f68a5464b779f75e7ff8e50d9d8b199e  gcc/testsuite/gfortran.dg/allocate_with_source_16.f90
  bd4118fd768f3467307efc9602103e4c  gcc/testsuite/gfortran.dg/allocate_with_source_17.f03
*************** aa770fb17af427bac4bab1f165ac2792  gcc/te
*** 93520,93525 ****
--- 93870,93876 ----
  ac2154aefe0a4ce981b3fa252235e2dd  gcc/testsuite/gfortran.dg/associate_7.f03
  cbd20a2196505f5c05eaf4a0b2deb506  gcc/testsuite/gfortran.dg/associate_70.f90
  654126432f7002148884d08affd35699  gcc/testsuite/gfortran.dg/associate_72.f90
+ 9324e6abeab7018b1551e0a075cd2085  gcc/testsuite/gfortran.dg/associate_75.f90
  3c2206420bb8717914aa447789b5f079  gcc/testsuite/gfortran.dg/associate_8.f03
  0406413659a92c10d44ed1f1576987b9  gcc/testsuite/gfortran.dg/associate_9.f03
  51f82584276ab8f411b8d9d7e84fadc8  gcc/testsuite/gfortran.dg/associated_1.f90
*************** d8731c4a7857584ae6a224900773f967  gcc/te
*** 95250,95255 ****
--- 95601,95608 ----
  89a3206dfabae1e31ea62ec7fa264ee6  gcc/testsuite/gfortran.dg/dependency_8.f90
  bed947f18e24a0489e41529f588cfef4  gcc/testsuite/gfortran.dg/dependency_9.f90
  67277aa32b5b5873080f3f4293a6ae8c  gcc/testsuite/gfortran.dg/dependent_decls_1.f90
+ 5c97b1e6df5e623a008d4043400e5a38  gcc/testsuite/gfortran.dg/dependent_decls_2.f90
+ f9b07f25fc6afc502b47a3f76ffca486  gcc/testsuite/gfortran.dg/dependent_decls_3.f90
  f83ad6bd054390e6c1c83e3617a0ca54  gcc/testsuite/gfortran.dg/der_array_1.f90
  4eb23dea6239510ff3d0398ca1d0c6db  gcc/testsuite/gfortran.dg/der_array_io_1.f90
  35332f10121eeab34a37f9cff36e5e29  gcc/testsuite/gfortran.dg/der_array_io_2.f90
*************** f024936b2bb3be33b204bc283db65a94  gcc/te
*** 95283,95289 ****
  cb44893d94f03877d3d146a8c1da8bd8  gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
  1985d33efa2fb91552f8a4d90653edd7  gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
  b90644647498c9ab9c17c0d5ea8d1b82  gcc/testsuite/gfortran.dg/derived_constructor_comps_5.f90
! b2ca02520bfaffc03c538a5319e61893  gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
  a4520e3938bf347c0b9e1003348fd3b6  gcc/testsuite/gfortran.dg/derived_constructor_comps_7.f90
  cff987fa6f89201aa37245231d20c023  gcc/testsuite/gfortran.dg/derived_external_function_1.f90
  9ec4e99aea8dbcc56d952be32f63911c  gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
--- 95636,95642 ----
  cb44893d94f03877d3d146a8c1da8bd8  gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
  1985d33efa2fb91552f8a4d90653edd7  gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
  b90644647498c9ab9c17c0d5ea8d1b82  gcc/testsuite/gfortran.dg/derived_constructor_comps_5.f90
! b82bb411ffe2afd1f983103a913048ea  gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
  a4520e3938bf347c0b9e1003348fd3b6  gcc/testsuite/gfortran.dg/derived_constructor_comps_7.f90
  cff987fa6f89201aa37245231d20c023  gcc/testsuite/gfortran.dg/derived_external_function_1.f90
  9ec4e99aea8dbcc56d952be32f63911c  gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
*************** fdf6add00f0bd7ce436abe942eb65cf3  gcc/te
*** 95293,95298 ****
--- 95646,95652 ----
  07fab892951fdbb2c35b3e8978ea647a  gcc/testsuite/gfortran.dg/derived_init_4.f90
  a19ffb5a22d6663608efe30bfaaa6c3e  gcc/testsuite/gfortran.dg/derived_init_5.f90
  97a57d72c5ce6be81502a605595f8ac8  gcc/testsuite/gfortran.dg/derived_init_6.f90
+ b0072b5367ee04e1e8e87a1d5a079806  gcc/testsuite/gfortran.dg/derived_init_7.f90
  266cbacba031d7de4ed0c83cd0d6ce49  gcc/testsuite/gfortran.dg/derived_name_1.f90
  83e722dbb79574dcea48de4b591f9764  gcc/testsuite/gfortran.dg/derived_name_2.f
  1437ef5bc0341f947a22ccc26daa8e22  gcc/testsuite/gfortran.dg/derived_pointer_null_1.f90
*************** a19ffb5a22d6663608efe30bfaaa6c3e  gcc/te
*** 95301,95306 ****
--- 95655,95662 ----
  21dd790eb5de9f5842955d3e4168f143  gcc/testsuite/gfortran.dg/derived_recursion.f90
  e9e8f279200f5692fad235f157925873  gcc/testsuite/gfortran.dg/derived_result.f90
  cf5153f1f09bb80f5a964ce90c83a5dc  gcc/testsuite/gfortran.dg/derived_result_2.f90
+ 9568da62ebf5982dd0feeb2af336d4be  gcc/testsuite/gfortran.dg/derived_result_3.f90
+ 489e76e1c9546ac43f028e88ed875909  gcc/testsuite/gfortran.dg/derived_result_5.f90
  b522fadd1464db48d2fe8165d2a66e70  gcc/testsuite/gfortran.dg/derived_sub.f90
  652fa12d630d17b29894c33b10c6b1b8  gcc/testsuite/gfortran.dg/dev_null.F90
  94ce3208dac145ea14fc3f821f662788  gcc/testsuite/gfortran.dg/dfloat_1.f90
*************** c03d85028dd31582bfd3d1f8ca418aa3  gcc/te
*** 96250,96255 ****
--- 96606,96612 ----
  a003f13028702fcf73483db6234e657a  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
  dc0ed8100589e01d391b4954bad7b048  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
  f8fe06410fd4ca50e585e681d35f4482  gcc/testsuite/gfortran.dg/goacc/note-parallelism.f90
+ 8f7b26e930f121be0c4ee68193d7adf3  gcc/testsuite/gfortran.dg/goacc/omp-108382.f90
  44c6212e07bf6b44bd6d26e3224f93d7  gcc/testsuite/gfortran.dg/goacc/omp-fixed.f
  0d004a9c292993dcae37ce3958b7e212  gcc/testsuite/gfortran.dg/goacc/omp.f95
  30617b4201e681ce9fc02f97597b907d  gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90
*************** fd7a6f50862314c373f5800561f028a5  gcc/te
*** 96263,96268 ****
--- 96620,96626 ----
  09ea63acb5c4c7a47cc2d19532460132  gcc/testsuite/gfortran.dg/goacc/pr104717.f90
  7e7fc3d088115060da170794a58be703  gcc/testsuite/gfortran.dg/goacc/pr109622-5.f90
  1455640e85064b6a149025dca753e059  gcc/testsuite/gfortran.dg/goacc/pr109622-6.f90
+ 25e0ac1a3686ba9ae8a974d05f23ebf5  gcc/testsuite/gfortran.dg/goacc/pr120723.f90
  67b49525675aca8145873031e39ee7ec  gcc/testsuite/gfortran.dg/goacc/pr71704.f90
  2ff86b408ebb7a6e4fa041f1ea4a5204  gcc/testsuite/gfortran.dg/goacc/pr72715.f90
  dff0c4a3dcd2aac51063c6e05c6d4665  gcc/testsuite/gfortran.dg/goacc/pr72743.f90
*************** eb835cbff61dc3a5d2c957d0e87c6ab0  gcc/te
*** 96662,96667 ****
--- 97020,97028 ----
  905750ad1d8a5ad625ad891d24861b35  gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90
  141c35f9d62b46a7e1b14aa4806260cb  gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90
  dd42ad4341c4916a5494d5d3c6a52b40  gcc/testsuite/gfortran.dg/gomp/pr100965.f90
+ 390de4d65a27e4b7a8643dbffb713189  gcc/testsuite/gfortran.dg/gomp/pr101760.f90
+ 8b20a4cfa3b2f8bd56fdd2e034a5a32a  gcc/testsuite/gfortran.dg/gomp/pr102314.f90
+ e32d4057d47aefb786a7e251839952e3  gcc/testsuite/gfortran.dg/gomp/pr102430.f90
  8c46c1ee06eca3c9ecb211ced2a97c89  gcc/testsuite/gfortran.dg/gomp/pr102431.f90
  a1a9be8c9080ba2ba338bc6f63b406e3  gcc/testsuite/gfortran.dg/gomp/pr102621.f90
  f523f11e31c8d7a378a90e54f4cc9a88  gcc/testsuite/gfortran.dg/gomp/pr103643.f90
*************** edeec1fe2488c7117f56e10734af03dc  gcc/te
*** 96676,96681 ****
--- 97037,97043 ----
  697c52a53eea166cade44a3f935b8caf  gcc/testsuite/gfortran.dg/gomp/pr107214-7.f90
  1474c5a5881d7047f1212bc8cfb8ef92  gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90
  3beded12a494129bebcc732d85089896  gcc/testsuite/gfortran.dg/gomp/pr107214.f90
+ 9413acb66d424e7e859e5b387d479808  gcc/testsuite/gfortran.dg/gomp/pr107425.f90
  616305573acc701769497c1eee637edc  gcc/testsuite/gfortran.dg/gomp/pr114825.f90
  9a6817790a272cd8153d4303d324c00f  gcc/testsuite/gfortran.dg/gomp/pr26224.f
  d2c74a71f2bea0005d853821e6f0142c  gcc/testsuite/gfortran.dg/gomp/pr27573.f90
*************** c2c9b1a1db79eedb25331d3565231b66  gcc/te
*** 96762,96767 ****
--- 97124,97130 ----
  6db6e7072dccd0be789b6dc9bd2a586c  gcc/testsuite/gfortran.dg/gomp/pr93555.f90
  a921eeb5697bd066712d41d66d374930  gcc/testsuite/gfortran.dg/gomp/pr94672.f90
  8a04653b9aa2543e13a3136934e00444  gcc/testsuite/gfortran.dg/gomp/pr95869.f90
+ 8512ba21f2d6bfcb3e878c6c91c4dc17  gcc/testsuite/gfortran.dg/gomp/pr98203.f90
  f832e5b53ac5754d0490d912e4da9ec6  gcc/testsuite/gfortran.dg/gomp/pr99226.f90
  bcd0369b2e799c3808032efd4c583295  gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90
  5a122e0df6f86c9b8f25e3ef0a8de595  gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90
*************** b75cb93f87f099ad715aceb9cb7b1bf2  gcc/te
*** 97184,97189 ****
--- 97547,97553 ----
  1f7a9307002a1f0f2a5f8eb76998dcda  gcc/testsuite/gfortran.dg/implied_do_io_6.f90
  2b548a8a46da28ac4ce23e2509a886fc  gcc/testsuite/gfortran.dg/implied_do_io_7.f90
  1b11291348a686162c0e48c6b1b5cd66  gcc/testsuite/gfortran.dg/implied_do_io_8.f90
+ f9c9e0932087ab8751e466c8efd22612  gcc/testsuite/gfortran.dg/implied_do_io_9.f90
  a8761a2aaffb7680e80dcad5eceada12  gcc/testsuite/gfortran.dg/implied_shape_1.f08
  f9528d7042bf84bf037d6e2b109272ec  gcc/testsuite/gfortran.dg/implied_shape_2.f90
  1b2b68c816459c1a9395771e9851de87  gcc/testsuite/gfortran.dg/implied_shape_3.f08
*************** e5a418513e079e50ea576e021cf5ad8e  gcc/te
*** 97311,97316 ****
--- 97675,97681 ----
  1545bc137f7bcb397e7986a3324b63be  gcc/testsuite/gfortran.dg/inline_matmul_23.f90
  89a35f94060b171becdc54771a02040b  gcc/testsuite/gfortran.dg/inline_matmul_24.f90
  d5dddad98efc37928795b446cb8d6501  gcc/testsuite/gfortran.dg/inline_matmul_25.f90
+ f500cc59ecbd3442513dea98e8f73719  gcc/testsuite/gfortran.dg/inline_matmul_27.f90
  ffdb4ca68f61f3bd618415335c9c7c21  gcc/testsuite/gfortran.dg/inline_matmul_3.f90
  f95e5fd479c839cfa9cb3ac127ee7584  gcc/testsuite/gfortran.dg/inline_matmul_4.f90
  6cb787ca0dac6ea814c8af4ac7cb8022  gcc/testsuite/gfortran.dg/inline_matmul_5.f90
*************** f33dc60c1fb7c60416c98e3b6fca20cc  gcc/te
*** 97450,97455 ****
--- 97815,97821 ----
  a954172d62f645dc77c1c91e1be92316  gcc/testsuite/gfortran.dg/interface_5.f90
  36309090fca9f4524f3ffaaa789fa173  gcc/testsuite/gfortran.dg/interface_50.f90
  a63ff5460cdc25350f43a09d899581db  gcc/testsuite/gfortran.dg/interface_6.f90
+ 76682e1bef00b9b6f7bd74baac09b7f4  gcc/testsuite/gfortran.dg/interface_63.f90
  b4d472d28fc0ac004218dc87eb241306  gcc/testsuite/gfortran.dg/interface_7.f90
  9b6e2c6769e8d31142faefbb1e2b8fa0  gcc/testsuite/gfortran.dg/interface_8.f90
  741aacf0bd439f6874a87ea56712aadc  gcc/testsuite/gfortran.dg/interface_9.f90
*************** b3de2cdb7dfd995e8d4a97fabcc29a38  gcc/te
*** 97458,97463 ****
--- 97824,97830 ----
  e797a26594e33f4316a85af1fe223cbc  gcc/testsuite/gfortran.dg/interface_abstract_3.f90
  a30d85d2601e16438a18162122cbc190  gcc/testsuite/gfortran.dg/interface_abstract_4.f90
  bb1e6a032a10a9e1ff7d9a5d79c13aa6  gcc/testsuite/gfortran.dg/interface_abstract_5.f90
+ a584146c98b61024b29fba4d0cf9aa8c  gcc/testsuite/gfortran.dg/interface_abstract_6.f90
  33a2f608c30f217c3799ca2ecec2ffec  gcc/testsuite/gfortran.dg/interface_assignment_1.f90
  4f0c646f0732570a97ff9a9dc8755be6  gcc/testsuite/gfortran.dg/interface_assignment_2.f90
  91f77567fb0079c826db40c2ce9296c0  gcc/testsuite/gfortran.dg/interface_assignment_3.f90
*************** be693b3847d0256fa77c5e6d96396c97  gcc/te
*** 98379,98385 ****
  d17e376a8cc641dbedaeffcce81d5297  gcc/testsuite/gfortran.dg/pdt_23.f03
  74618f98f612c4722b0e366283ec8ca8  gcc/testsuite/gfortran.dg/pdt_24.f03
  7c4f6f585a57e25f1c6f31ac89e87d40  gcc/testsuite/gfortran.dg/pdt_25.f03
! 7182317a2e9d6c03d247c9fb2b50ab74  gcc/testsuite/gfortran.dg/pdt_26.f03
  f67cfd0ae4d38f1ca5dc8d7f6e954087  gcc/testsuite/gfortran.dg/pdt_27.f03
  7efa911fe665f45456e6943844302ac0  gcc/testsuite/gfortran.dg/pdt_28.f03
  68b10a194ff6797eee8ecb042129b08f  gcc/testsuite/gfortran.dg/pdt_29.f03
--- 98746,98752 ----
  d17e376a8cc641dbedaeffcce81d5297  gcc/testsuite/gfortran.dg/pdt_23.f03
  74618f98f612c4722b0e366283ec8ca8  gcc/testsuite/gfortran.dg/pdt_24.f03
  7c4f6f585a57e25f1c6f31ac89e87d40  gcc/testsuite/gfortran.dg/pdt_25.f03
! 0104b02a8045f96f71bb79804308cd3b  gcc/testsuite/gfortran.dg/pdt_26.f03
  f67cfd0ae4d38f1ca5dc8d7f6e954087  gcc/testsuite/gfortran.dg/pdt_27.f03
  7efa911fe665f45456e6943844302ac0  gcc/testsuite/gfortran.dg/pdt_28.f03
  68b10a194ff6797eee8ecb042129b08f  gcc/testsuite/gfortran.dg/pdt_29.f03
*************** eb194938d2c2fe84d215ede719f501c0  gcc/te
*** 98434,98439 ****
--- 98801,98807 ----
  4db68e1eec67942dd893a17d7e547d6e  gcc/testsuite/gfortran.dg/pointer_check_12.f90
  ccf9944fa34b0e93e5415a91ad21e966  gcc/testsuite/gfortran.dg/pointer_check_13.f90
  1c6366ef774f50102935b627497ffda0  gcc/testsuite/gfortran.dg/pointer_check_14.f90
+ 95c3fc2b08b12abf7b0b8eede20fee74  gcc/testsuite/gfortran.dg/pointer_check_15.f90
  7fd59810205e453c2a75b8a7f1ed13b0  gcc/testsuite/gfortran.dg/pointer_check_2.f90
  9e0a1ed208d6678d1a32750be9c66ce8  gcc/testsuite/gfortran.dg/pointer_check_3.f90
  24e0ade37dff0f1eb6006ee3395e17a6  gcc/testsuite/gfortran.dg/pointer_check_4.f90
*************** a3ab8fbef738997039cfd45f350461a3  gcc/te
*** 98495,98501 ****
--- 98863,98871 ----
  77eca811eac1f80edb0f33c68ac0c4d3  gcc/testsuite/gfortran.dg/power_7.f90
  457d6bb30d331f4d3250628bdae53dc3  gcc/testsuite/gfortran.dg/power_8.f90
  e13b5dd50c332ea865cb6fabb5f79f29  gcc/testsuite/gfortran.dg/pr100154.f90
+ d7642fe0f50bb28f873042d6721e3ffb  gcc/testsuite/gfortran.dg/pr100155.f90
  c9e427811a6c55713cbb096365eec807  gcc/testsuite/gfortran.dg/pr100193.f90
+ a7f1c1fb2de0acfdd19303c2a0d29d73  gcc/testsuite/gfortran.dg/pr100194.f90
  e08828a7d864f8531a58aa25e1b58894  gcc/testsuite/gfortran.dg/pr100273.f90
  fc0ae38e4fdc2d7761aba57181c97b51  gcc/testsuite/gfortran.dg/pr100551.f90
  17f130e627232745d6279696b6984514  gcc/testsuite/gfortran.dg/pr100949.f90
*************** afe21b866be9162c6b654dc6771e6ead  gcc/te
*** 98519,98527 ****
--- 98889,98900 ----
  1dd53d463caf1e16e47d0fe9cbf2309f  gcc/testsuite/gfortran.dg/pr102366.f90
  fc5031b16be6a0dc4152f151793f4acb  gcc/testsuite/gfortran.dg/pr102458.f90
  cbd40bc334c217d37c198b1f27373810  gcc/testsuite/gfortran.dg/pr102458b.f90
+ 44bc627bf6c28a64567fdb75fe688fdc  gcc/testsuite/gfortran.dg/pr102459.f90
  09759ba73ae30c3a54be532d97b7f526  gcc/testsuite/gfortran.dg/pr102520.f90
  107263fe1c86ee042c855774a2b8e242  gcc/testsuite/gfortran.dg/pr102532.f90
+ 4efde3b7d107b33c9c8792e23b683d17  gcc/testsuite/gfortran.dg/pr102596.f90
  c0ae1c78c693e1256c471360998b7568  gcc/testsuite/gfortran.dg/pr102597.f90
+ 322a54b0e735415005b9446efbfd32f0  gcc/testsuite/gfortran.dg/pr102619.f90
  c081e1f510a2d68ec176356111dab188  gcc/testsuite/gfortran.dg/pr102685.f90
  d99cea26823109c0bb853b42df152999  gcc/testsuite/gfortran.dg/pr102715.f90
  f28998ba16e7a78633a9de3d5eaf0667  gcc/testsuite/gfortran.dg/pr102816.f90
*************** aadce1b09e2a4d220805726af0c7f109  gcc/te
*** 98571,98576 ****
--- 98944,98950 ----
  7a5b7a18d621b5e1b9d04b73e259ddd4  gcc/testsuite/gfortran.dg/pr104849.f90
  35a7804825dacf412e34e3f973b467f1  gcc/testsuite/gfortran.dg/pr104908.f90
  a5bb6d9b844f014490dab5e87b60244c  gcc/testsuite/gfortran.dg/pr105152.f90
+ 472e7c3181a65bf922fc24aa4a286685  gcc/testsuite/gfortran.dg/pr105168.f90
  ff052278fd65d5823600af4550f5eae7  gcc/testsuite/gfortran.dg/pr105205.f90
  22283af469347d85bd1fe4dae42939a3  gcc/testsuite/gfortran.dg/pr105230.f90
  378daada767aa1db75aafa59274616a9  gcc/testsuite/gfortran.dg/pr105456-nmlr.f90
*************** d4b65efea892e3a54acdb92a298fc582  gcc/te
*** 98595,98600 ****
--- 98969,98975 ----
  0677f2dac82b1b95cde8edf69efd60a9  gcc/testsuite/gfortran.dg/pr106918.f90
  09719e2d59fe58682ef7a737cdf01620  gcc/testsuite/gfortran.dg/pr106934.f90
  e1ccca85dc432ca649742c05520157d9  gcc/testsuite/gfortran.dg/pr106945.f90
+ 1b7098a64b99eb214b607f599b3eb32f  gcc/testsuite/gfortran.dg/pr106946.f90
  a9c6ba4d14cec93cd2edec54fda6a916  gcc/testsuite/gfortran.dg/pr106985.f90
  eb96b826eeaf84f157c8635706721d40  gcc/testsuite/gfortran.dg/pr106986.f90
  054c58cb24c0bee4ea0b5fcf3cdbf86d  gcc/testsuite/gfortran.dg/pr106999.f90
*************** b7b6edb61862ad55069c70c4744ad157  gcc/te
*** 98638,98643 ****
--- 99013,99019 ----
  05aad7d3d7d82955070028e39fdf28af  gcc/testsuite/gfortran.dg/pr109358.f90
  f309d722fd5c0108897e848739b09dbb  gcc/testsuite/gfortran.dg/pr109662-a.f90
  87aa7841fecf66956c29baf129e68fb9  gcc/testsuite/gfortran.dg/pr109662.f90
+ 8d235bb163056c04ca2b4c16a3221c29  gcc/testsuite/gfortran.dg/pr109788.f90
  f2965c649a5f8dcb271f4f49f656cfff  gcc/testsuite/gfortran.dg/pr109948.f90
  898c3ea8360d1452c5f815b15dc6f6f8  gcc/testsuite/gfortran.dg/pr110221.f
  7e8f4bd708c5e8d2c848ebda68cfa3e5  gcc/testsuite/gfortran.dg/pr110224.f90
*************** f62b2fa65f325ecd9897d1210ea1dd59  gcc/te
*** 98667,98672 ****
--- 99043,99049 ----
  c2c29ab4a03f3fce7c592346c758df55  gcc/testsuite/gfortran.dg/pr114874_2.f90
  4b273604e577c17fd50a80fc5e61fbc9  gcc/testsuite/gfortran.dg/pr114883.f90
  114f9ad97017aeb38f9ec22adfdc15e9  gcc/testsuite/gfortran.dg/pr114959.f90
+ dcc85737c1fe827eb6a63f372dd52f3e  gcc/testsuite/gfortran.dg/pr115260.f90
  2cdd9da41524094c8df35fef567a26c5  gcc/testsuite/gfortran.dg/pr115281.f90
  862aedc97da38fe9b3319406b768d9c0  gcc/testsuite/gfortran.dg/pr115348.f90
  6c3af77c51cf7ae784cf117509d09064  gcc/testsuite/gfortran.dg/pr117730_a.f90
*************** c409953e60b511d0f73cda8df16bc1dc  gcc/te
*** 98676,98685 ****
--- 99053,99065 ----
  02812eb85d61bb134c890f0a34cc8511  gcc/testsuite/gfortran.dg/pr117819.f90
  d8b2b1281d8bcf0eb181e2643ffb6265  gcc/testsuite/gfortran.dg/pr117820.f90
  dcb4fe6d926f672dd118a4a8ec9b6625  gcc/testsuite/gfortran.dg/pr118640.f90
+ 86ed735b34078d76c3e00aee11815c32  gcc/testsuite/gfortran.dg/pr119273.f90
  8f53cbad5581d72a5d0420f900cee217  gcc/testsuite/gfortran.dg/pr120191_1.f90
  4787146fc7e8109511f0d22d056e2127  gcc/testsuite/gfortran.dg/pr120191_2.f90
  05457962d41eef6a41a3de889144d78a  gcc/testsuite/gfortran.dg/pr120191_3.f90
  b1cb2c9a52574c2df5df49bd13ee7e5d  gcc/testsuite/gfortran.dg/pr120196.f90
+ 9aa1b21c93a3838e52245be748b9b301  gcc/testsuite/gfortran.dg/pr124161.f90
+ 5bfaeea8d13a5035cf46aaab485c2803  gcc/testsuite/gfortran.dg/pr124450.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
*************** f166fdd0a6158ee4997aa03d50735f03  gcc/te
*** 99110,99115 ****
--- 99490,99496 ----
  5b2aa5e5d8aa97b69f0cc98bc9709f3f  gcc/testsuite/gfortran.dg/pr78741.f90
  18ef55c7791c30ff0793ca246df65036  gcc/testsuite/gfortran.dg/pr78758.f90
  c7abc49e43c3b6377a0e019f9f4292ac  gcc/testsuite/gfortran.dg/pr79315.f90
+ 76b2c561e2cc2dffb48457fae519ab01  gcc/testsuite/gfortran.dg/pr79524.f90
  7dde52ec5dffa2ae8586c577cf97f742  gcc/testsuite/gfortran.dg/pr79886.f90
  c0b10ae015725070f4297a1ba8927463  gcc/testsuite/gfortran.dg/pr79966.f90
  21b5f06229f04696cc787b63748c5de0  gcc/testsuite/gfortran.dg/pr80494.f90
*************** e338cfba2f466abedf9af92b52cd6fb3  gcc/te
*** 99131,99136 ****
--- 99512,99518 ----
  b6ff04901e3aee18765a74bf65804e38  gcc/testsuite/gfortran.dg/pr82253.f90
  344be7c0602202457870166d368441e0  gcc/testsuite/gfortran.dg/pr82314.f90
  7f04eca318ca64e1442ceabc31fab9fb  gcc/testsuite/gfortran.dg/pr82397.f
+ 9f2daedbf44298499832b2b6d72eb79f  gcc/testsuite/gfortran.dg/pr82721.f90
  5e9eb92684de357b4c23a7f04959db82  gcc/testsuite/gfortran.dg/pr82774.f90
  616772c135ee9b14c410dcd23fdbc3e4  gcc/testsuite/gfortran.dg/pr82973.f90
  0a918cecf6f52a31004b77728cb30038  gcc/testsuite/gfortran.dg/pr83113.f90
*************** fd7937a762c5733d3533bba0d9b05a6e  gcc/te
*** 99145,99150 ****
--- 99527,99533 ----
  95b2ba5b10167fedc1a075877a7a103b  gcc/testsuite/gfortran.dg/pr84088.f90
  ee7b5aa850a8be8a1ed15f2fcdca347a  gcc/testsuite/gfortran.dg/pr84117.f90
  c41bc69547a048a19ccb1adc57ce3bca  gcc/testsuite/gfortran.dg/pr84155.f90
+ e6d08fa65e9eb602b71f0e6a8b44a739  gcc/testsuite/gfortran.dg/pr84245.f90
  12af81a97aa86950b63e458f115e45c9  gcc/testsuite/gfortran.dg/pr84523.f90
  6d593814cbde3b81eb21e9501a48bac2  gcc/testsuite/gfortran.dg/pr84565.f90
  4cf62650961664b3e4bce16d177b5929  gcc/testsuite/gfortran.dg/pr84674.f90
*************** cc82665e1d54c6a2d5a100788c474853  gcc/te
*** 99156,99161 ****
--- 99539,99545 ----
  42d21294436ebefdc995a697f0266fd9  gcc/testsuite/gfortran.dg/pr85082.f90
  4355c9f07079d67c1134f6106f8fcb0b  gcc/testsuite/gfortran.dg/pr85138_1.f90
  024b55ef8c68dc11bd1d65bbc8cf1b13  gcc/testsuite/gfortran.dg/pr85138_2.f90
+ 9c97d6fc9b5f00f49d5a36517bc8222d  gcc/testsuite/gfortran.dg/pr85352.f90
  bf416564a457b9444387855732e4d265  gcc/testsuite/gfortran.dg/pr85357.f90
  286fa2d8f5b3fa55fd3173261d6b4eea  gcc/testsuite/gfortran.dg/pr85520.f90
  3daad136d0cfc95d8964dc923c7cc4ac  gcc/testsuite/gfortran.dg/pr85521_1.f90
*************** c6d3d1ffedb5b952a8712db0cf31c809  gcc/te
*** 99237,99242 ****
--- 99621,99627 ----
  45bdaaba50a371d379854f3b6895d276  gcc/testsuite/gfortran.dg/pr88964.f90
  d0e021239a321dbde0c39d7f370068c8  gcc/testsuite/gfortran.dg/pr89077.f90
  a2461a16a54c67eb1031deda70d3c512  gcc/testsuite/gfortran.dg/pr89084.f90
+ f3fbf1380652a88bf0a5d643b52e4a3d  gcc/testsuite/gfortran.dg/pr89092.f90
  be4f5532cbaa58d083d822b627ffe5de  gcc/testsuite/gfortran.dg/pr89253.f
  eb191e16157f03cba56fb00422bb2852  gcc/testsuite/gfortran.dg/pr89266.f90
  2726f9a132f249a727072d95e5f0aee3  gcc/testsuite/gfortran.dg/pr89344.f90
*************** f9cd7fe0c8cb7be5b0846aa6c3eb0b93  gcc/te
*** 99355,99361 ****
--- 99740,99749 ----
  9a2df63b77cda57168f292b09bde71b3  gcc/testsuite/gfortran.dg/pr93686_4.f90
  0636d4a049257c8e3f6c32b4b7309697  gcc/testsuite/gfortran.dg/pr93714_1.f90
  93b8b244bce4583a43c29d892e177744  gcc/testsuite/gfortran.dg/pr93714_2.f90
+ 9a8647e0b1ef01e06d45cc2715ae05e8  gcc/testsuite/gfortran.dg/pr93715.f90
  4d2e245917c39b1bcaeea6010bcb6284  gcc/testsuite/gfortran.dg/pr93792.f90
+ 1c1c17dce5c14eb846c34e6f6eba3b12  gcc/testsuite/gfortran.dg/pr93814.f90
+ 5494bfcb0d61c11d34ea0b6e4e610c45  gcc/testsuite/gfortran.dg/pr93832.f90
  8b7bf068692a6a31b63dd4963c050e98  gcc/testsuite/gfortran.dg/pr93835.f08
  6736173bcc319bca35f5453a7bca947b  gcc/testsuite/gfortran.dg/pr94030_1.f90
  b0f8acfae3746c459e5af7bcca222814  gcc/testsuite/gfortran.dg/pr94030_2.f90
*************** f17ab40b1ca95ac01da77049baa72103  gcc/te
*** 99364,99369 ****
--- 99752,99758 ----
  bf6d4fa9d116ccede014485a892d0d71  gcc/testsuite/gfortran.dg/pr94380.f90
  b9faba8aac0e0dd38443caeb527db93d  gcc/testsuite/gfortran.dg/pr94397.F90
  16d161f7900dd36eabcbaea6cd9c1b6e  gcc/testsuite/gfortran.dg/pr94708.f90
+ e49db1fd07a952483324884a3682a4e8  gcc/testsuite/gfortran.dg/pr94978.f90
  b3aa92652c768e489db71c4bdec58492  gcc/testsuite/gfortran.dg/pr95053.f
  4643a453de4a8df5432d833cf8bfa122  gcc/testsuite/gfortran.dg/pr95053_2.f90
  9a887ac1c462736f729ec4ec967c8be2  gcc/testsuite/gfortran.dg/pr95053_3.f90
*************** a6b1d851f4c5b6cfffa8f56c8f9cd150  gcc/te
*** 99372,99377 ****
--- 99761,99767 ----
  81355955ad98611710451ef6e76d9dbe  gcc/testsuite/gfortran.dg/pr95090.f90
  10a1157f7a9fa8f2042a563c98a25914  gcc/testsuite/gfortran.dg/pr95091.f90
  7d3e3457f90590b31740ffdd3a4866a3  gcc/testsuite/gfortran.dg/pr95104.f90
+ e11cb19990efd60513bbac52ee105f02  gcc/testsuite/gfortran.dg/pr95338.f90
  66c58770643ed3f1944820fa6790cc27  gcc/testsuite/gfortran.dg/pr95340.f90
  395135621c98fea610c5f2b17feb7637  gcc/testsuite/gfortran.dg/pr95342.f90
  b9d5894d240b89777d50d53e0cd60929  gcc/testsuite/gfortran.dg/pr95373_1.f90
*************** a5234963084d71f3cbff36fdddbc2a39  gcc/te
*** 99405,99410 ****
--- 99795,99801 ----
  662210e69dcf405442181d9c4c2a91ec  gcc/testsuite/gfortran.dg/pr95827.f90
  62cd2c3c38efcf3442a00b172c23a0f1  gcc/testsuite/gfortran.dg/pr95828.f90
  f2cfdbd57b646ea77c8d2d572b0b4a79  gcc/testsuite/gfortran.dg/pr95829.f90
+ 153dd2ab3bb579bad81f3ed62e079ff2  gcc/testsuite/gfortran.dg/pr95879.f90
  4624ef21d27373ca19abedc766bf24c8  gcc/testsuite/gfortran.dg/pr95880.f90
  5f79fc5c2f7a030ad1b82b4793b0c8a7  gcc/testsuite/gfortran.dg/pr95881.f90
  5f9a08444201a18392648013e972a14a  gcc/testsuite/gfortran.dg/pr95882_1.f90
*************** ac524c67dbf5c0b6588328a02f46a124  gcc/te
*** 99421,99426 ****
--- 99812,99818 ----
  4cd7e1edd1f016be3c9016b1817d703e  gcc/testsuite/gfortran.dg/pr96038.f90
  e6acc3eb976952fc47981d6ab4ed7205  gcc/testsuite/gfortran.dg/pr96085.f90
  45d800261f64da91bf2398a00691d7c4  gcc/testsuite/gfortran.dg/pr96086.f90
+ 0e95668039fa9312c394dbe702dc78a0  gcc/testsuite/gfortran.dg/pr96087.f90
  07cb4ed26cdce5312951d4e23c0ede15  gcc/testsuite/gfortran.dg/pr96099_1.f90
  6ed2b45ec17b4aeb641142e2799cfd89  gcc/testsuite/gfortran.dg/pr96099_2.f90
  43b9b0a65aabf3911bc6a2d49e46f640  gcc/testsuite/gfortran.dg/pr96102.f90
*************** c8c260dea52e24ac6be6641b8f123d9a  gcc/te
*** 99443,99448 ****
--- 99835,99841 ----
  a056a75dc3c7830d385da1c0b9d587bc  gcc/testsuite/gfortran.dg/pr96711.f90
  a94ae73a3b6b9628990c54fb08f2950c  gcc/testsuite/gfortran.dg/pr96737.f90
  74a709306836d044b8cd43d035aecdf2  gcc/testsuite/gfortran.dg/pr96859.f90
+ 3b72f7e6589a60bc5e040e31c77484b8  gcc/testsuite/gfortran.dg/pr96986.f90
  76f063a5164cc2eff42c50fc9b9989a1  gcc/testsuite/gfortran.dg/pr97036.f90
  70cac68f93e5398eb60f3aa67f709e6a  gcc/testsuite/gfortran.dg/pr97095.f
  f219dfba008fc41e9e809107b3498d57  gcc/testsuite/gfortran.dg/pr97272.f90
*************** aa943f2bec85bb461999d2cb2adfc73a  gcc/te
*** 100265,100270 ****
--- 100658,100664 ----
  701cab3628ee98dbcccc1d64e72d4ed6  gcc/testsuite/gfortran.dg/submodule_31.f08
  2d0d1435c8fc29f13f4d8d923dcdddc5  gcc/testsuite/gfortran.dg/submodule_32.f08
  e87560f12976c9545d8b7ae479b2618c  gcc/testsuite/gfortran.dg/submodule_33.f08
+ ce6def9eadc42b1a4cd9adf6d9fe55ee  gcc/testsuite/gfortran.dg/submodule_34.f90
  68f9f70d888318a31160ba732171726f  gcc/testsuite/gfortran.dg/submodule_4.f08
  d470cf2de70b478f82f67f0729c09b76  gcc/testsuite/gfortran.dg/submodule_5.f08
  125419a41557152ac79de8af903ef20a  gcc/testsuite/gfortran.dg/submodule_6.f08
*************** ad625f0340741a09e4be8d42e070139e  gcc/te
*** 100338,100343 ****
--- 100732,100738 ----
  7f1199fe5fa90085dcbb4f81cbcf7062  gcc/testsuite/gfortran.dg/transfer_class_2.f90
  4003da30901edcfc6adf19924dc746a2  gcc/testsuite/gfortran.dg/transfer_class_3.f90
  d9a1040ed4fe93e5d91936d8b26af4cc  gcc/testsuite/gfortran.dg/transfer_class_4.f90
+ d265a0bb0e3067107f69caac520518ea  gcc/testsuite/gfortran.dg/transfer_class_5.f90
  dc67674921059cc6c14a48ba9f6e8515  gcc/testsuite/gfortran.dg/transfer_hollerith_1.f90
  adc172acf631bf550ac06d92fba37d99  gcc/testsuite/gfortran.dg/transfer_intrinsic_1.f90
  e26ab1b7e21f778b1135b8600958bcd1  gcc/testsuite/gfortran.dg/transfer_intrinsic_2.f90
*************** ca55d89300492a406b4293654a75c058  gcc/te
*** 100735,100740 ****
--- 101130,101136 ----
  777b852dc009b4634413ed078253b5e8  gcc/testsuite/gfortran.dg/vect/pr108979.f90
  ed99007df506ce091870da0cdbff417d  gcc/testsuite/gfortran.dg/vect/pr110451.f
  7e36b2b10502091bcb389f5834b42c96  gcc/testsuite/gfortran.dg/vect/pr114736.f90
+ 586131e6c904729b8febde3dbc667a68  gcc/testsuite/gfortran.dg/vect/pr125431.f90
  a17cb1ab891a5af3471298da97331dda  gcc/testsuite/gfortran.dg/vect/pr19049.f90
  fdb4a5f5d5eff2fd75822f14875bd776  gcc/testsuite/gfortran.dg/vect/pr32377.f90
  bbb6998ea100c6c2039976c6446a0c10  gcc/testsuite/gfortran.dg/vect/pr32380.f
*************** e3172873ebcacc53ed7031ec75e9c916  gcc/te
*** 100792,100797 ****
--- 101188,101194 ----
  943be5f26b034cab4a8d80ed72f35e29  gcc/testsuite/gfortran.dg/vect/vect-do-concurrent-1.f90
  f153623f2b5e969448f7c1a751dd783d  gcc/testsuite/gfortran.dg/vect/vect-early-break_1-pr113808.f90
  51d61a0ffbe2e176d92badb55eaf6889  gcc/testsuite/gfortran.dg/vect/vect-gems.f90
+ a28c6b7265042047039bb29c34ef4fcd  gcc/testsuite/gfortran.dg/vect/vect-pr123741.f90
  3c3819470222c6ceaf097c5083095c91  gcc/testsuite/gfortran.dg/vect/vect.exp
  5020f9773f3c21b86ac1fe3e513943a0  gcc/testsuite/gfortran.dg/vector_subscript_1.f90
  0833fb55cdacc085a113140aa1d94458  gcc/testsuite/gfortran.dg/vector_subscript_2.f90
*************** b7777c6604106297693e31038efb5ae1  gcc/te
*** 101314,101319 ****
--- 101711,101719 ----
  adc7e9976dd3bb424c92c2d7d3df32ed  gcc/testsuite/gfortran.fortran-torture/execute/where_8.f90
  bc764eca2f460bc6fb657fb675420237  gcc/testsuite/gfortran.fortran-torture/execute/write_a_1.f90
  eabee42e1a561616023ffd1f4d1a64e2  gcc/testsuite/gfortran.fortran-torture/execute/write_logical.f90
+ e37afcf68e701a2324e777ab5f6054bf  gcc/testsuite/gfortran.target/aarch64/aarch64.exp
+ f49a9e5ed9144077a6174c71610d8918  gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90
+ 6890252516b3245a15477e317869c38e  gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90
  ae00a4e2372b755ec611b96aaff6a49b  gcc/testsuite/gfortran.target/riscv/rvv/pr111395.f90
  284fdebd0dafabcd770080ec38c8109a  gcc/testsuite/gfortran.target/riscv/rvv/pr111566.f90
  803fa495544cb97b2d47fa3c10b273ce  gcc/testsuite/gfortran.target/riscv/rvv/pr118182.f
*************** dc0d018c7ef4988da05274a87a491db9  gcc/te
*** 103647,103652 ****
--- 104047,104053 ----
  f1da017e79e481af350005333250268b  gcc/testsuite/gnat.dg/bias2.adb
  aae39b549f5bb7a2b837495c637aaa94  gcc/testsuite/gnat.dg/biased_subtype.adb
  9bbc182ee19d36c4abbd7d6046ac5664  gcc/testsuite/gnat.dg/biased_uc.adb
+ e075dee38216366d67c6249860794304  gcc/testsuite/gnat.dg/bigint1.adb
  faf4a0c852ea85d2eab4ec4413be5fba  gcc/testsuite/gnat.dg/bip_aggregate_bug.adb
  8207ec6dfb08b203e67809b4591cc486  gcc/testsuite/gnat.dg/bip_case_expr.adb
  0dd427e9ad2957343c4c86027593a8a0  gcc/testsuite/gnat.dg/bip_case_expr_pkg.ads
*************** da22f29f94ebe295441ccc41597913b0  gcc/te
*** 104165,104170 ****
--- 104566,104574 ----
  29969c1ad7978ac871e75cd3b2d99efd  gcc/testsuite/gnat.dg/generic_inst14_pkg.ads
  bfa8ba450e641250f8eccf95997dd260  gcc/testsuite/gnat.dg/generic_inst2.adb
  063cf5c93b1a85bf617a62be0da63bdb  gcc/testsuite/gnat.dg/generic_inst2.ads
+ 9754b7078322105e191275ecef261619  gcc/testsuite/gnat.dg/generic_inst20-sub.adb
+ 0681c30c9efac88d67f6a19fb0a024db  gcc/testsuite/gnat.dg/generic_inst20.adb
+ c840150e814260285b976366030a3845  gcc/testsuite/gnat.dg/generic_inst20.ads
  2faefd507420ceafdccad8d472e66202  gcc/testsuite/gnat.dg/generic_inst2_c.ads
  1997a63f7761d0c3157019f91d059346  gcc/testsuite/gnat.dg/generic_inst3.adb
  ec082cac4cc6410759efb287bf918b11  gcc/testsuite/gnat.dg/generic_inst3_kafka_lib-topic.ads
*************** ed33690892e43011718347ecca58daff  gcc/te
*** 104565,104570 ****
--- 104969,104976 ----
  5f287af670c9bdcf463957cb04a9cd11  gcc/testsuite/gnat.dg/lto26_pkg2.ads
  d38a63c50972ebf0d60bc6959e5d130f  gcc/testsuite/gnat.dg/lto29.adb
  92924880135ec84fd65e4fecf6055807  gcc/testsuite/gnat.dg/lto29_pkg.ads
+ 0bb4f053befcf73a4d457f035ee97b6a  gcc/testsuite/gnat.dg/lto30.adb
+ 5889bf52461acb4efaa37c6ba94a8f31  gcc/testsuite/gnat.dg/lto30.ads
  2acb4cc31994f1569a3db6ac6613928d  gcc/testsuite/gnat.dg/lto4.adb
  9b38247c8e825c514f87e2965d931dad  gcc/testsuite/gnat.dg/lto4.ads
  959fb8bdf4cd1c34347ecfbab19ea60b  gcc/testsuite/gnat.dg/lto5.adb
*************** f8a43d7dd54caabde100374f7144dfc3  gcc/te
*** 104700,104705 ****
--- 105106,105113 ----
  ab899fc6f72925f8084209d5187582d5  gcc/testsuite/gnat.dg/opt106_pkg1.ads
  acc696967fd0d2302cfab5304ee3a970  gcc/testsuite/gnat.dg/opt106_pkg2.adb
  e4a127b46129811de1774562e29fb8fc  gcc/testsuite/gnat.dg/opt106_pkg2.ads
+ 9d150b19ff3791d45b239fbe539ca3ec  gcc/testsuite/gnat.dg/opt107.adb
+ b639e95e2056957733aa779c0c757061  gcc/testsuite/gnat.dg/opt107_pkg.ads
  5d50fb38b1ab84c39760906cb103c522  gcc/testsuite/gnat.dg/opt10_pkg.ads
  603264d4afdd2fd2174ea9c4cf4653ed  gcc/testsuite/gnat.dg/opt11.adb
  53160585b3a5d820b653e1e0d5f14c75  gcc/testsuite/gnat.dg/opt11.ads
*************** a4f83930fb87bd91e5bb42db50c8d318  gcc/te
*** 105071,105076 ****
--- 105479,105485 ----
  c0f68295e348ad36a641d8edeff2cfc6  gcc/testsuite/gnat.dg/prot9_pkg1.ads
  4cd15245a3399652865b3c6a9daf87ad  gcc/testsuite/gnat.dg/prot9_pkg2.ads
  8b9d81034e4a3268cbc4aae764775fd9  gcc/testsuite/gnat.dg/prot_def.adb
+ 00f160c0176ca352cbe49cfb9735cb39  gcc/testsuite/gnat.dg/protected_deref1.adb
  ca3a0803b3696ed0b41f6d8cbb5b962b  gcc/testsuite/gnat.dg/protected_func.adb
  f010d95f371dbccc1be8c51d48eb4db5  gcc/testsuite/gnat.dg/protected_func.ads
  ce1ec39ed99de56ced45d8b9f86bc85a  gcc/testsuite/gnat.dg/protected_null.adb
*************** d470ada2b4a8aa6d586007ab8f6e7e5f  gcc/te
*** 105102,105107 ****
--- 105511,105519 ----
  fde5d5ed0c271572ac7da0e31e22bc5c  gcc/testsuite/gnat.dg/range_check7.adb
  25b5534a4bc4502074ce6463c2f5e96b  gcc/testsuite/gnat.dg/rational_arithmetic.ads
  46cc8f530fa18a6afd30b9d241f7967e  gcc/testsuite/gnat.dg/recursive_call.adb
+ 0b27bcc5788ce003bc049b34d20d5c88  gcc/testsuite/gnat.dg/reduce2.adb
+ 5870b8cebdd6ce91693a485c5a6854d5  gcc/testsuite/gnat.dg/reduce4.adb
+ 001425eca43e1ece9e65dd7929459079  gcc/testsuite/gnat.dg/reduce5.adb
  50be8d98f4f9ac99d64926a10596a2df  gcc/testsuite/gnat.dg/ref_type.adb
  5457827e708b7bfc92ffe5610655a443  gcc/testsuite/gnat.dg/ref_type.ads
  222b5d10f23a2e8e8a5e4d41e86e66ed  gcc/testsuite/gnat.dg/regpat1.adb
*************** e51121d34de5e0d22067137864528c8a  gcc/te
*** 105123,105128 ****
--- 105535,105541 ----
  72d48cda9550a7251bbd90fa56eff48e  gcc/testsuite/gnat.dg/renaming15.adb
  b08ade850be1a0a80325c1a93e9c9043  gcc/testsuite/gnat.dg/renaming16.adb
  0278c64b189f758651064d6a8aeac4db  gcc/testsuite/gnat.dg/renaming16_pkg.ads
+ b500c932c841816b5021e1c75ea367c9  gcc/testsuite/gnat.dg/renaming18.adb
  3afb13f37cfc3455f0f0be64d053892f  gcc/testsuite/gnat.dg/renaming2.adb
  1a954da0b1e7e11673319b058eb82146  gcc/testsuite/gnat.dg/renaming3.adb
  9c415422ce59266c9af89e8d3fd1df74  gcc/testsuite/gnat.dg/renaming4.ads
*************** bc5d484f0195c40f96573375913aad6a  gcc/te
*** 105240,105245 ****
--- 105653,105659 ----
  899dd011c869ddd3d306efe8a8ba47c9  gcc/testsuite/gnat.dg/specs/aggr4_pkg.ads
  b028802f236df04a9a038de337a5c2dc  gcc/testsuite/gnat.dg/specs/aggr5.ads
  8317714735f6bcf3820730db670ecec1  gcc/testsuite/gnat.dg/specs/aggr6.ads
+ 8d9f49d860ee6a20314b8b77bfff71c6  gcc/testsuite/gnat.dg/specs/aggr9.ads
  03d5230a50a20391e0238f6841dcaf91  gcc/testsuite/gnat.dg/specs/ai_116.ads
  7d85593bd2feb29192cd8b150c52dde2  gcc/testsuite/gnat.dg/specs/alignment1.ads
  db9002fdffbd11c6e835ef0c4498b353  gcc/testsuite/gnat.dg/specs/alignment2.ads
*************** e79713b5757a3f8a05926964d5c26b04  gcc/te
*** 105317,105322 ****
--- 105731,105740 ----
  bb0e77998b46620c791eef69edc120e4  gcc/testsuite/gnat.dg/specs/interface5.ads
  2964ca5392547150aa2109dc092cc2e2  gcc/testsuite/gnat.dg/specs/last_bit.ads
  843de13b4d5cc30db54743bb74dedbf4  gcc/testsuite/gnat.dg/specs/limited1.ads
+ fbedcb4ad7f2c4e1005641325af96acb  gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild-grandgrandchild.ads
+ 4825dd5c9d78470959a4f658e124ed25  gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild.ads
+ 17aae2f71cf406a1e253530584097a2d  gcc/testsuite/gnat.dg/specs/limited_with3-child.ads
+ 2c85f81ae35fa72b5f14adce251e570b  gcc/testsuite/gnat.dg/specs/limited_with3.ads
  f1e4623f01bee0dbc4135d608ad4e311  gcc/testsuite/gnat.dg/specs/limited_with4.ads
  f8ce8abd47440a8ef0caa15042246467  gcc/testsuite/gnat.dg/specs/limited_with4_pkg.ads
  5ca7e9884e00c38a3fcb9117d299b396  gcc/testsuite/gnat.dg/specs/linker_alias.ads
*************** d2c31258feee390ed4af80cdc8eacf9e  gcc/te
*** 105349,105354 ****
--- 105767,105775 ----
  4f688dab65d3a3dce65837fb7dc54961  gcc/testsuite/gnat.dg/specs/opt5.ads
  f156038848774963622d503fe89a172b  gcc/testsuite/gnat.dg/specs/opt5_pkg.ads
  3ea255ec02895b0a6def7cabd8242168  gcc/testsuite/gnat.dg/specs/opt6.ads
+ 28f117df0f784b2fc789be52a8363bc4  gcc/testsuite/gnat.dg/specs/opt7.ads
+ 9076cc8edf48925166dff1f53e624108  gcc/testsuite/gnat.dg/specs/opt7_pkg.adb
+ ab4d470a175348305442c782df20dc08  gcc/testsuite/gnat.dg/specs/opt7_pkg.ads
  a33d565d33da0c1fd4225f3e0005c81e  gcc/testsuite/gnat.dg/specs/oversize.ads
  c177b376a4a8546663a7caa87b66abb4  gcc/testsuite/gnat.dg/specs/pack10.ads
  aca39671a4d090d6d3c7a2abf4ee74a6  gcc/testsuite/gnat.dg/specs/pack10_pkg.adb
*************** de366240409b1c3413cd274333487fb7  gcc/te
*** 105424,105429 ****
--- 105845,105851 ----
  67001591d13a2654ac5b7435e121cb10  gcc/testsuite/gnat.dg/specs/unchecked_convert2.ads
  a013922e8c147a09784a5aca21aa3a65  gcc/testsuite/gnat.dg/specs/unchecked_union1.ads
  fbc11dba24887c4af40c8660f7168a67  gcc/testsuite/gnat.dg/specs/unchecked_union2.ads
+ bc8a00cafe93a77626f7d163fb369bcf  gcc/testsuite/gnat.dg/specs/unchecked_union3.ads
  c8cf8a4c8db78f809bd3550ca820e6a5  gcc/testsuite/gnat.dg/specs/universal_fixed.ads
  956da2e940d0e7706607f91ce39d70ad  gcc/testsuite/gnat.dg/specs/variant_part.ads
  12e2e0159b45a86a40c49bc020048d43  gcc/testsuite/gnat.dg/specs/varsize_return.ads
*************** fd304d08c4ca43544588bd14358a9c0a  gcc/te
*** 105529,105534 ****
--- 105951,105957 ----
  6c87692ce5565e68f354b3b1cb842c39  gcc/testsuite/gnat.dg/sso18.adb
  ff784f7bca69d0717e740273960b0387  gcc/testsuite/gnat.dg/sso2.adb
  ccf43eb5df39869bb23ff9110d3b93cb  gcc/testsuite/gnat.dg/sso2.ads
+ 2ba1a49876e7f91ccde7f7d0288debb0  gcc/testsuite/gnat.dg/sso20.adb
  6fe64945c0d0238672cdece04341c316  gcc/testsuite/gnat.dg/sso3.adb
  cce4578d630a50acb2e3a4f2535af90b  gcc/testsuite/gnat.dg/sso4.adb
  6547028813699cf5a1bebf9380db3b22  gcc/testsuite/gnat.dg/sso5.adb
*************** b2c755599d8ed47e117bbf82c6a6b12f  gcc/te
*** 105662,105667 ****
--- 106085,106092 ----
  35dc80c5b5ed756d2cc1c930f85a4456  gcc/testsuite/gnat.dg/task3_pkg2.ads
  c32b560114a348976d0298262741b6ea  gcc/testsuite/gnat.dg/task4.adb
  70bd634f46004ffa96eb4070f11592ef  gcc/testsuite/gnat.dg/task5.adb
+ 2eaa9f1d0d240e9dd1698e9211bd233e  gcc/testsuite/gnat.dg/task6.adb
+ b348428ccd472508457f80ed401511e5  gcc/testsuite/gnat.dg/task6.ads
  029ef2213e407fd423e0ce3d19a60a80  gcc/testsuite/gnat.dg/task_name.adb
  2d192de9da9a98892aa2c605de044591  gcc/testsuite/gnat.dg/task_name.ads
  91463323d692d06c9031a056ff412414  gcc/testsuite/gnat.dg/task_stack_align.adb
*************** f37d4791cfa22e9a20848922ea5de498  gcc/te
*** 105975,105981 ****
  b760f8c4f0593565426879b84ab6787b  gcc/testsuite/go.go-torture/execute/var-1.go
  55c3fdb5eab9130c79b8548c994aa8d9  gcc/testsuite/go.go-torture/execute/var-2.go
  ac0017eb534302ec5987291f615d13ca  gcc/testsuite/go.go-torture/execute/var-3.go
! e3794309b5080518186c09c15068e470  gcc/testsuite/go.test/go-test.exp
  88c59e0bc9f2a79ed3a3e8f1409ed1d8  gcc/testsuite/go.test/test/235.go
  1a94dd86d2262280f883261800a13104  gcc/testsuite/go.test/test/64bit.go
  43e15a8d565d16ab908b7cf6db8e0bf9  gcc/testsuite/go.test/test/README.gcc
--- 106400,106406 ----
  b760f8c4f0593565426879b84ab6787b  gcc/testsuite/go.go-torture/execute/var-1.go
  55c3fdb5eab9130c79b8548c994aa8d9  gcc/testsuite/go.go-torture/execute/var-2.go
  ac0017eb534302ec5987291f615d13ca  gcc/testsuite/go.go-torture/execute/var-3.go
! 14430fc68a3e1dcc77761b38e45a50e3  gcc/testsuite/go.test/go-test.exp
  88c59e0bc9f2a79ed3a3e8f1409ed1d8  gcc/testsuite/go.test/test/235.go
  1a94dd86d2262280f883261800a13104  gcc/testsuite/go.test/test/64bit.go
  43e15a8d565d16ab908b7cf6db8e0bf9  gcc/testsuite/go.test/test/README.gcc
*************** d19a0449bac1fb497429a88904f3d658  gcc/te
*** 107920,107926 ****
  50c0f03762d429c13fd0302c79d90157  gcc/testsuite/go.test/test/varinit.go
  6447a99ae1e2eec266af1ceab6a7343c  gcc/testsuite/go.test/test/zerodivide.go
  340e08c9aef97a2da8f4cd4568d52675  gcc/testsuite/jit.dg/add-driver-options-testlib.c
! ced1e82a057a3545ee32a58098f87b0f  gcc/testsuite/jit.dg/all-non-failing-tests.h
  7bc42e89ae77872c8fc581b4babf1832  gcc/testsuite/jit.dg/create-code-for-hello-world-executable.h
  6599d673695ac45c69f897e7b9643cdb  gcc/testsuite/jit.dg/harness.h
  bcc659c5c8ad01904087579142d235cb  gcc/testsuite/jit.dg/jit.exp
--- 108345,108351 ----
  50c0f03762d429c13fd0302c79d90157  gcc/testsuite/go.test/test/varinit.go
  6447a99ae1e2eec266af1ceab6a7343c  gcc/testsuite/go.test/test/zerodivide.go
  340e08c9aef97a2da8f4cd4568d52675  gcc/testsuite/jit.dg/add-driver-options-testlib.c
! ceeca3928e21738514d1a400ecbf1189  gcc/testsuite/jit.dg/all-non-failing-tests.h
  7bc42e89ae77872c8fc581b4babf1832  gcc/testsuite/jit.dg/create-code-for-hello-world-executable.h
  6599d673695ac45c69f897e7b9643cdb  gcc/testsuite/jit.dg/harness.h
  bcc659c5c8ad01904087579142d235cb  gcc/testsuite/jit.dg/jit.exp
*************** c1c4ffe41bbf76d4a61fec8d9b42486c  gcc/te
*** 107946,107952 ****
  af0a18ef8912906bb36ca88219c06667  gcc/testsuite/jit.dg/test-calling-external-function.c
  fcf20b943f3e9affe23adec9277064a7  gcc/testsuite/jit.dg/test-calling-function-ptr.c
  e3bf5c17797aeaea60953345b0ec836b  gcc/testsuite/jit.dg/test-cast.c
! 1abc657df5f9cfb2b57bf23048e54d17  gcc/testsuite/jit.dg/test-cold-attribute.c
  dc3f5924516f317d0e822022186a89d9  gcc/testsuite/jit.dg/test-combination.c
  2e035396a65d6176ba9798f667c5621a  gcc/testsuite/jit.dg/test-compile-to-assembler.c
  897c5ab27b1fd560e0e9f30525797a81  gcc/testsuite/jit.dg/test-compile-to-dynamic-library.c
--- 108371,108377 ----
  af0a18ef8912906bb36ca88219c06667  gcc/testsuite/jit.dg/test-calling-external-function.c
  fcf20b943f3e9affe23adec9277064a7  gcc/testsuite/jit.dg/test-calling-function-ptr.c
  e3bf5c17797aeaea60953345b0ec836b  gcc/testsuite/jit.dg/test-cast.c
! 6bfe3202df4a59189a757d8df0af0d9d  gcc/testsuite/jit.dg/test-cold-attribute.c
  dc3f5924516f317d0e822022186a89d9  gcc/testsuite/jit.dg/test-combination.c
  2e035396a65d6176ba9798f667c5621a  gcc/testsuite/jit.dg/test-compile-to-assembler.c
  897c5ab27b1fd560e0e9f30525797a81  gcc/testsuite/jit.dg/test-compile-to-dynamic-library.c
*************** ea1a8984df21eb7b429a00bc3d0a99c7  gcc/te
*** 108133,108143 ****
  c4d8ec89484f8330ae0008d131fedf28  gcc/testsuite/lib/go-torture.exp
  192f15a6eb39416f8b8e16eb34ed9a7e  gcc/testsuite/lib/go.exp
  4818c4d4e4a63feda289f71aa5a2d3db  gcc/testsuite/lib/hwasan-dg.exp
! 484d239d5c61861001373c287746fbce  gcc/testsuite/lib/lto.exp
! d5c788891580183c0162d61bee2606c9  gcc/testsuite/lib/mike-g++.exp
! 7b1a3e5d995ace232fab35f5c2bc144d  gcc/testsuite/lib/mike-gcc.exp
  8d644e83696b168db4e275e7aae92821  gcc/testsuite/lib/modules.exp
! f89b045f2842e5ff03497a49f6252c55  gcc/testsuite/lib/multiline.exp
  e7dfc093129242634d55f5be6acfaf2f  gcc/testsuite/lib/obj-c++-dg.exp
  2aebb5337b46130df1565434bf0b195b  gcc/testsuite/lib/obj-c++.exp
  4b367ff2ecab820f990c8f946bd89e93  gcc/testsuite/lib/objc-dg.exp
--- 108558,108568 ----
  c4d8ec89484f8330ae0008d131fedf28  gcc/testsuite/lib/go-torture.exp
  192f15a6eb39416f8b8e16eb34ed9a7e  gcc/testsuite/lib/go.exp
  4818c4d4e4a63feda289f71aa5a2d3db  gcc/testsuite/lib/hwasan-dg.exp
! 9475e0aa30a10d97a49791330297036d  gcc/testsuite/lib/lto.exp
! a4a6992257395e3afa42884111a95f18  gcc/testsuite/lib/mike-g++.exp
! fe1a6ab4bb07f8c408ef8ab7e4884300  gcc/testsuite/lib/mike-gcc.exp
  8d644e83696b168db4e275e7aae92821  gcc/testsuite/lib/modules.exp
! 92df4f87906c4d71538784825bd16300  gcc/testsuite/lib/multiline.exp
  e7dfc093129242634d55f5be6acfaf2f  gcc/testsuite/lib/obj-c++-dg.exp
  2aebb5337b46130df1565434bf0b195b  gcc/testsuite/lib/obj-c++.exp
  4b367ff2ecab820f990c8f946bd89e93  gcc/testsuite/lib/objc-dg.exp
*************** a418f2a12bc2c1ec76cd9ee5444af0f5  gcc/te
*** 108165,108171 ****
  a27ad08178b52070e08d7c22e2387cef  gcc/testsuite/lib/scanwpaipa.exp
  dbc2129f79274a41f1128a281f81019b  gcc/testsuite/lib/target-libpath.exp
  c103f8a73343128b0e916a2296fc1ac1  gcc/testsuite/lib/target-supports-dg.exp
! 0c56c9a66c5c003d0e7bdeb6233332fa  gcc/testsuite/lib/target-supports.exp
  d84983886d0708605af864226f6beac0  gcc/testsuite/lib/target-utils.exp
  64f7537fc29d3ab37e44b5aaf37c5fb4  gcc/testsuite/lib/timeout-dg.exp
  75cfa45901d445df376345935b79fa37  gcc/testsuite/lib/timeout.exp
--- 108590,108596 ----
  a27ad08178b52070e08d7c22e2387cef  gcc/testsuite/lib/scanwpaipa.exp
  dbc2129f79274a41f1128a281f81019b  gcc/testsuite/lib/target-libpath.exp
  c103f8a73343128b0e916a2296fc1ac1  gcc/testsuite/lib/target-supports-dg.exp
! 7119942b0d94ac26de9a25bbdfd186e1  gcc/testsuite/lib/target-supports.exp
  d84983886d0708605af864226f6beac0  gcc/testsuite/lib/target-utils.exp
  64f7537fc29d3ab37e44b5aaf37c5fb4  gcc/testsuite/lib/timeout-dg.exp
  75cfa45901d445df376345935b79fa37  gcc/testsuite/lib/timeout.exp
*************** c0b991692c06f34bf7f8673802e7b155  gcc/te
*** 110249,110254 ****
--- 110674,110680 ----
  5fb2390505ce446a223d21f02b332874  gcc/testsuite/selftests/x86_64/copy-hard-reg-into-frame.rtl
  e42076aeff1c5ac155a88db5b1993d38  gcc/testsuite/selftests/x86_64/times-two.rtl
  195d431640249dac1928ced4d93ecb76  gcc/testsuite/selftests/x86_64/unspec.rtl
+ 5bf662844191f6cef3adde64d58741b4  gcc/testsuite/sparseset.supp
  4f2cac6fe70242fd7fe19fc4905f4d47  gcc/text-art/box-drawing-chars.inc
  d934b555c64ffa8648afd6011c95aa49  gcc/text-art/box-drawing.cc
  41412371b971dedaf42ceab028c659d8  gcc/text-art/box-drawing.h
*************** bb2d0be00429a0759ac29d939a153bfd  gcc/tr
*** 110284,110290 ****
  4033e031a74b8591e4e99c6d0b936e95  gcc/tree-cfg.h
  d1d7e848234190caa5f2bf2e83aeb2d2  gcc/tree-cfgcleanup.cc
  33f85bca44e9b9e703bdf0cbdbaa732a  gcc/tree-cfgcleanup.h
! 17728251c02cecb3d9437862e6b9cef6  gcc/tree-chrec.cc
  56d59272a3fae6c32537f707febf66eb  gcc/tree-chrec.h
  628036cdbf2db5837b03e08a445438d9  gcc/tree-complex.cc
  ea5a0250e9186f164f0843e79aacedad  gcc/tree-core.h
--- 110710,110716 ----
  4033e031a74b8591e4e99c6d0b936e95  gcc/tree-cfg.h
  d1d7e848234190caa5f2bf2e83aeb2d2  gcc/tree-cfgcleanup.cc
  33f85bca44e9b9e703bdf0cbdbaa732a  gcc/tree-cfgcleanup.h
! 605fd454e8ce05f8f78d62001f72439b  gcc/tree-chrec.cc
  56d59272a3fae6c32537f707febf66eb  gcc/tree-chrec.h
  628036cdbf2db5837b03e08a445438d9  gcc/tree-complex.cc
  ea5a0250e9186f164f0843e79aacedad  gcc/tree-core.h
*************** a42cfecde2bde84e8caf09636b68c9b2  gcc/tr
*** 110298,110311 ****
  debb27964e157c88b76b5e2a00cbd4c1  gcc/tree-diagnostic.h
  8cd37203c422b0d03a76db07974de7a0  gcc/tree-dump.cc
  5aeed18b459de9d2e00f46c9e11d231d  gcc/tree-dump.h
! f7a313000b5713e225cfe8ef9a1580f4  gcc/tree-eh.cc
  1f2b40921cf81768c6ef9a444bb90cbe  gcc/tree-eh.h
  d090daa844578953fae325419d401322  gcc/tree-emutls.cc
  9fff164e638f2e33d35d0e021f67fc5b  gcc/tree-hash-traits.h
  de9026b3ddfb63f45eb7de90c07c152a  gcc/tree-hasher.h
  b53b0e038a499606b2d119c62b6fc3c8  gcc/tree-if-conv.cc
  5d6eb83f64960ba3d0dc2c1253389f3b  gcc/tree-if-conv.h
! 58ad25727ddfa69ee0a77ad38a2ec95f  gcc/tree-inline.cc
  93e3a89424169fea13caf4b3f341effe  gcc/tree-inline.h
  14fbc08d8db9b07d391efa6716aea4d8  gcc/tree-into-ssa.cc
  75ead7abe52cb77f14845ac9c55bbc29  gcc/tree-into-ssa.h
--- 110724,110737 ----
  debb27964e157c88b76b5e2a00cbd4c1  gcc/tree-diagnostic.h
  8cd37203c422b0d03a76db07974de7a0  gcc/tree-dump.cc
  5aeed18b459de9d2e00f46c9e11d231d  gcc/tree-dump.h
! d99f5f623c56cb3f5c97d7d40a96c324  gcc/tree-eh.cc
  1f2b40921cf81768c6ef9a444bb90cbe  gcc/tree-eh.h
  d090daa844578953fae325419d401322  gcc/tree-emutls.cc
  9fff164e638f2e33d35d0e021f67fc5b  gcc/tree-hash-traits.h
  de9026b3ddfb63f45eb7de90c07c152a  gcc/tree-hasher.h
  b53b0e038a499606b2d119c62b6fc3c8  gcc/tree-if-conv.cc
  5d6eb83f64960ba3d0dc2c1253389f3b  gcc/tree-if-conv.h
! b23de6b97304d88f5eaae5313b2467f7  gcc/tree-inline.cc
  93e3a89424169fea13caf4b3f341effe  gcc/tree-inline.h
  14fbc08d8db9b07d391efa6716aea4d8  gcc/tree-into-ssa.cc
  75ead7abe52cb77f14845ac9c55bbc29  gcc/tree-into-ssa.h
*************** f22bed82b0f681104f231aef4c6512db  gcc/tr
*** 110317,110323 ****
  538752b75f76de52491ebec1ec0878a9  gcc/tree-nested.cc
  d4019e9903f5660319d05b837b0b8f24  gcc/tree-nested.h
  1fd1f70cb44dc7cff617b5352e49d272  gcc/tree-nrv.cc
! 4e1a834692fbc4d0884ad527115f793b  gcc/tree-object-size.cc
  c2992dcc01282d89c18bbe448c0a5572  gcc/tree-object-size.h
  06cc5db04462c5845bcd144eee6cd921  gcc/tree-outof-ssa.cc
  7fae35e1bf1391a4ae03d9bed84ef456  gcc/tree-outof-ssa.h
--- 110743,110749 ----
  538752b75f76de52491ebec1ec0878a9  gcc/tree-nested.cc
  d4019e9903f5660319d05b837b0b8f24  gcc/tree-nested.h
  1fd1f70cb44dc7cff617b5352e49d272  gcc/tree-nrv.cc
! 7e4c38884453b292e04e9eb0460ad570  gcc/tree-object-size.cc
  c2992dcc01282d89c18bbe448c0a5572  gcc/tree-object-size.h
  06cc5db04462c5845bcd144eee6cd921  gcc/tree-outof-ssa.cc
  7fae35e1bf1391a4ae03d9bed84ef456  gcc/tree-outof-ssa.h
*************** edb2001f6e21bdaecd29fcf77bb1fd0d  gcc/tr
*** 110325,110338 ****
  b7cafcfc01cd27516d5788a64e7dc058  gcc/tree-parloops.h
  ac7a115cd070672d90d6479104a15e65  gcc/tree-pass.h
  789c6299f2f8d026710802845f17d9d2  gcc/tree-phinodes.cc
! 2bdb8225bb6265ab9bd1b0018b497447  gcc/tree-phinodes.h
  91340bc20d54ccebd0ab72770a2657c1  gcc/tree-predcom.cc
  1dd8519646252527916595bce0833af2  gcc/tree-pretty-print.cc
  0f63e75929b34bde93e034c9b1e1430f  gcc/tree-pretty-print.h
  fa283611866c6ad433cfe860538eb2b3  gcc/tree-profile.cc
! d3a97bac3f5a8af3b12be65f79b18c9d  gcc/tree-scalar-evolution.cc
  fe964e6bef89af1a79d00c19713660bd  gcc/tree-scalar-evolution.h
! 0a6856abf36462eaef49525e6047524e  gcc/tree-sra.cc
  1e9cd044620373c14038fbd39740fd14  gcc/tree-sra.h
  76ef7a403eba76cb39fe06d695ab266a  gcc/tree-ssa-address.cc
  a35227be3c2b85c69d7e31275f1f7092  gcc/tree-ssa-address.h
--- 110751,110764 ----
  b7cafcfc01cd27516d5788a64e7dc058  gcc/tree-parloops.h
  ac7a115cd070672d90d6479104a15e65  gcc/tree-pass.h
  789c6299f2f8d026710802845f17d9d2  gcc/tree-phinodes.cc
! 8c8f7252232dc7a1e7924aae8e6851de  gcc/tree-phinodes.h
  91340bc20d54ccebd0ab72770a2657c1  gcc/tree-predcom.cc
  1dd8519646252527916595bce0833af2  gcc/tree-pretty-print.cc
  0f63e75929b34bde93e034c9b1e1430f  gcc/tree-pretty-print.h
  fa283611866c6ad433cfe860538eb2b3  gcc/tree-profile.cc
! bdc9bab14ae5624d86bc275c54f2c859  gcc/tree-scalar-evolution.cc
  fe964e6bef89af1a79d00c19713660bd  gcc/tree-scalar-evolution.h
! c2d94790ae19c335fa7724e93adec068  gcc/tree-sra.cc
  1e9cd044620373c14038fbd39740fd14  gcc/tree-sra.h
  76ef7a403eba76cb39fe06d695ab266a  gcc/tree-ssa-address.cc
  a35227be3c2b85c69d7e31275f1f7092  gcc/tree-ssa-address.h
*************** be2ddd67b1fc2c7baf9c618d285adce3  gcc/tr
*** 110346,110392 ****
  c4fb95e78992e4ae89759e9c2fda21c4  gcc/tree-ssa-copy.cc
  a9a57c1e6ef21dcf260929f34c5c8aac  gcc/tree-ssa-dce.cc
  394662362ab7d17b000ab838d7bda85c  gcc/tree-ssa-dce.h
! 5fb557e8777afa7cdad5a08a17b37cdc  gcc/tree-ssa-dom.cc
  c9368eed42c8261bad4b65accae4859c  gcc/tree-ssa-dom.h
! 0270f4ecd595e57cb5435566f9639005  gcc/tree-ssa-dse.cc
  310f6675fc42485a28214ba25f193e4c  gcc/tree-ssa-dse.h
  eb50801cc8f65531f98214d98abdf0f7  gcc/tree-ssa-forwprop.cc
  48767dda496173441bc33fb424a8582a  gcc/tree-ssa-ifcombine.cc
  c3b1a9515666618e9d55c8fd53f67e36  gcc/tree-ssa-live.cc
  bc4d2e809f144d9e2d71f49c6ac1005c  gcc/tree-ssa-live.h
  62caed8ee6b65f064d889ab923fa4b37  gcc/tree-ssa-loop-ch.cc
! 55ebb785bb6539266182eec301fd8a88  gcc/tree-ssa-loop-im.cc
  d13427e991e77725e732629fb007437a  gcc/tree-ssa-loop-ivcanon.cc
! 2aeb02dac76877eb80c3263b6ffb1b93  gcc/tree-ssa-loop-ivopts.cc
  66d2704d1626bcfc35f8aa458ee6a1a1  gcc/tree-ssa-loop-ivopts.h
  468cc85e2332333521f69f26b7dd5b27  gcc/tree-ssa-loop-manip.cc
  66557039c7e4f18ad92b155b29c79d30  gcc/tree-ssa-loop-manip.h
! cdc0524cbed8b79b9fa33724590ce9c1  gcc/tree-ssa-loop-niter.cc
  ec5f7abc3695bde1fbe2a8b2a7e53167  gcc/tree-ssa-loop-niter.h
  1227f24f2f18334f57649a99ceeda666  gcc/tree-ssa-loop-prefetch.cc
! acc4aff264e3f0e53b0b258a37163e6d  gcc/tree-ssa-loop-split.cc
! 5b01b125f53e8b950350c0cd3cb6efd2  gcc/tree-ssa-loop-unswitch.cc
  55ae2e77440663854644a5c55e444332  gcc/tree-ssa-loop.cc
  ee1eafa40cd3c1d5777881a232cc123a  gcc/tree-ssa-loop.h
! 9d04d6f03a64fb639761342c8e4e7dce  gcc/tree-ssa-math-opts.cc
  a2aa940aaf235d855f0a29cd853cd161  gcc/tree-ssa-math-opts.h
  09cc12675477c15773525c18f05c8887  gcc/tree-ssa-operands.cc
  dec9c71d0caf6496e2b48ee295c14dd8  gcc/tree-ssa-operands.h
! f813b293443b3e09f359ff45c3db38d8  gcc/tree-ssa-phiopt.cc
  a5f34e36dee1bef8e82d05d782b00345  gcc/tree-ssa-phiprop.cc
! 964a11d26bf8f0919a9091af08106449  gcc/tree-ssa-pre.cc
! 8c4cb601d98c97971af9d097d48b5ae0  gcc/tree-ssa-propagate.cc
  de3b298cc003003bf8914ebfcdf63f2b  gcc/tree-ssa-propagate.h
! eaa57a5dab2e797feeaaf1676a886185  gcc/tree-ssa-reassoc.cc
  ea6d5ea2f3442b7c3f3a8b3356e827ca  gcc/tree-ssa-reassoc.h
! 009fec0008b91d8425ac246d68e9e62e  gcc/tree-ssa-sccvn.cc
  545f646c7c717bb603b5eb8e283f414d  gcc/tree-ssa-sccvn.h
  46d17810ce8ff6e8a1eebf89645eb941  gcc/tree-ssa-scopedtables.cc
  1da39bc41633a7721b894ea76af3f6ca  gcc/tree-ssa-scopedtables.h
  5fd4dbd0469a4e81b1036fc3449f791d  gcc/tree-ssa-sink.cc
! b0c107ee22f3f20de79434e3ca50cf00  gcc/tree-ssa-strlen.cc
  99d54f633ea0ea6b7eb29b8647a88ae6  gcc/tree-ssa-strlen.h
! e4c6854d84c9ed934e02630e024595c1  gcc/tree-ssa-structalias.cc
  1a410ed280c0cf57c44dd25b73c91998  gcc/tree-ssa-tail-merge.cc
  7d4eaa3828d8666a6bd7e6af8f65adc4  gcc/tree-ssa-ter.cc
  b10f3dee35565bc7bd7b5888c46bdecf  gcc/tree-ssa-ter.h
--- 110772,110818 ----
  c4fb95e78992e4ae89759e9c2fda21c4  gcc/tree-ssa-copy.cc
  a9a57c1e6ef21dcf260929f34c5c8aac  gcc/tree-ssa-dce.cc
  394662362ab7d17b000ab838d7bda85c  gcc/tree-ssa-dce.h
! 480d852759cf436a575bb110ccb3f0cf  gcc/tree-ssa-dom.cc
  c9368eed42c8261bad4b65accae4859c  gcc/tree-ssa-dom.h
! c369eacbed5c4c55970cbab9e45becba  gcc/tree-ssa-dse.cc
  310f6675fc42485a28214ba25f193e4c  gcc/tree-ssa-dse.h
  eb50801cc8f65531f98214d98abdf0f7  gcc/tree-ssa-forwprop.cc
  48767dda496173441bc33fb424a8582a  gcc/tree-ssa-ifcombine.cc
  c3b1a9515666618e9d55c8fd53f67e36  gcc/tree-ssa-live.cc
  bc4d2e809f144d9e2d71f49c6ac1005c  gcc/tree-ssa-live.h
  62caed8ee6b65f064d889ab923fa4b37  gcc/tree-ssa-loop-ch.cc
! 2f831dac51398f2a06c06990f0d6ef53  gcc/tree-ssa-loop-im.cc
  d13427e991e77725e732629fb007437a  gcc/tree-ssa-loop-ivcanon.cc
! 92cb1dbf4e717a357529b226854a825d  gcc/tree-ssa-loop-ivopts.cc
  66d2704d1626bcfc35f8aa458ee6a1a1  gcc/tree-ssa-loop-ivopts.h
  468cc85e2332333521f69f26b7dd5b27  gcc/tree-ssa-loop-manip.cc
  66557039c7e4f18ad92b155b29c79d30  gcc/tree-ssa-loop-manip.h
! 79b628aa8eeadfd4c6edd17fbc42a4c3  gcc/tree-ssa-loop-niter.cc
  ec5f7abc3695bde1fbe2a8b2a7e53167  gcc/tree-ssa-loop-niter.h
  1227f24f2f18334f57649a99ceeda666  gcc/tree-ssa-loop-prefetch.cc
! e9f452126b26b0f6c9e13fe86093c977  gcc/tree-ssa-loop-split.cc
! bee79c7c759cbbdc165ca0c368472bf4  gcc/tree-ssa-loop-unswitch.cc
  55ae2e77440663854644a5c55e444332  gcc/tree-ssa-loop.cc
  ee1eafa40cd3c1d5777881a232cc123a  gcc/tree-ssa-loop.h
! 61408a53e36f6162f8a7573fcd2cc6d6  gcc/tree-ssa-math-opts.cc
  a2aa940aaf235d855f0a29cd853cd161  gcc/tree-ssa-math-opts.h
  09cc12675477c15773525c18f05c8887  gcc/tree-ssa-operands.cc
  dec9c71d0caf6496e2b48ee295c14dd8  gcc/tree-ssa-operands.h
! 75d27eb3c390f876dcee8b973228dd74  gcc/tree-ssa-phiopt.cc
  a5f34e36dee1bef8e82d05d782b00345  gcc/tree-ssa-phiprop.cc
! 712bdf5b6accda01db046bba03b8542b  gcc/tree-ssa-pre.cc
! e4c8316aff1b14ad8dee560bf8b76a15  gcc/tree-ssa-propagate.cc
  de3b298cc003003bf8914ebfcdf63f2b  gcc/tree-ssa-propagate.h
! 712f55d4f6e09cb7839ec9cc689b46bb  gcc/tree-ssa-reassoc.cc
  ea6d5ea2f3442b7c3f3a8b3356e827ca  gcc/tree-ssa-reassoc.h
! bc9dfcfd3ace745977bff39c9f652d8b  gcc/tree-ssa-sccvn.cc
  545f646c7c717bb603b5eb8e283f414d  gcc/tree-ssa-sccvn.h
  46d17810ce8ff6e8a1eebf89645eb941  gcc/tree-ssa-scopedtables.cc
  1da39bc41633a7721b894ea76af3f6ca  gcc/tree-ssa-scopedtables.h
  5fd4dbd0469a4e81b1036fc3449f791d  gcc/tree-ssa-sink.cc
! 160e95c3020657872540ea37e9ec2733  gcc/tree-ssa-strlen.cc
  99d54f633ea0ea6b7eb29b8647a88ae6  gcc/tree-ssa-strlen.h
! 6246519dfe31c0aa958072ba15762528  gcc/tree-ssa-structalias.cc
  1a410ed280c0cf57c44dd25b73c91998  gcc/tree-ssa-tail-merge.cc
  7d4eaa3828d8666a6bd7e6af8f65adc4  gcc/tree-ssa-ter.cc
  b10f3dee35565bc7bd7b5888c46bdecf  gcc/tree-ssa-ter.h
*************** c46ee145b917a2cc00062d238597ff66  gcc/tr
*** 110407,110430 ****
  5131cc364eb717c3d0a755443d198f1b  gcc/tree-streamer-out.cc
  7cda0dde16b638ec52a280efc5c4eb85  gcc/tree-streamer.cc
  6b542393d2cc1446541757996166c746  gcc/tree-streamer.h
! 7c14f981c2baa34566ab0be620ac617a  gcc/tree-switch-conversion.cc
  e52dd1666766e097473010a395e05b72  gcc/tree-switch-conversion.h
! ff0ac55bde82f5e21ae65ccdbf2e13f2  gcc/tree-tailcall.cc
! 6e14d7823ddd7f9dfaf2e2b64089c7e3  gcc/tree-vect-data-refs.cc
! baa0d7c2a79888b8d490ef9ea9bf876b  gcc/tree-vect-generic.cc
  a5c65c0281a1b6faf6652682936ae74e  gcc/tree-vect-loop-manip.cc
! b007b2d97ecc0ea9c1d6d6f84e9ebbeb  gcc/tree-vect-loop.cc
  43f6f3fee20eb715fd451bf19e9bfd4c  gcc/tree-vect-patterns.cc
! 7d8505e37be0d60874402ed24f0b78ff  gcc/tree-vect-slp-patterns.cc
! 62afed2a3920f38b0d29565df04b36c8  gcc/tree-vect-slp.cc
! fdda4ebc0219dbf056f89bcd39de70d3  gcc/tree-vect-stmts.cc
  795c5280c71f566f4b3e8c7fdcc3b609  gcc/tree-vector-builder.cc
  250ce9e7ca93bb776afda377af2c190d  gcc/tree-vector-builder.h
  c5a03f7f18d4c4b5f0a74529e044ddfe  gcc/tree-vectorizer.cc
  e96b2bb5c70a7f94b0863d7050f1677b  gcc/tree-vectorizer.h
! b770086f834d7fe1bbdf334f1907c7a4  gcc/tree-vrp.cc
  01b6633a647a8aeca196fc6d0021e4cf  gcc/tree-vrp.h
! 4f0447483aae0976f2fd51d889e2ff25  gcc/tree.cc
  110668da7614fc11045af4d047706a7a  gcc/tree.def
  bd976d539f03b9f6fd9501087f38cbec  gcc/tree.h
  b157222cc904eb63d41484795109c2ca  gcc/treestruct.def
--- 110833,110856 ----
  5131cc364eb717c3d0a755443d198f1b  gcc/tree-streamer-out.cc
  7cda0dde16b638ec52a280efc5c4eb85  gcc/tree-streamer.cc
  6b542393d2cc1446541757996166c746  gcc/tree-streamer.h
! 59a4ad03a3fb274d649776496011db0d  gcc/tree-switch-conversion.cc
  e52dd1666766e097473010a395e05b72  gcc/tree-switch-conversion.h
! 03789f646e5ebafcb6d1b5d6976fb0db  gcc/tree-tailcall.cc
! 7c2d603160e6cc66d6f331c03cbd63e4  gcc/tree-vect-data-refs.cc
! d118b2d044875c26f314d37ff24df105  gcc/tree-vect-generic.cc
  a5c65c0281a1b6faf6652682936ae74e  gcc/tree-vect-loop-manip.cc
! 8f57ce2752bafb1f8f0aa27f7b76b83c  gcc/tree-vect-loop.cc
  43f6f3fee20eb715fd451bf19e9bfd4c  gcc/tree-vect-patterns.cc
! a9afe9e3b431b84394a7e69f8cfb3b8d  gcc/tree-vect-slp-patterns.cc
! ae55d259a8015d98d10ea9b66379ac0c  gcc/tree-vect-slp.cc
! d5e6103371171054496e94bbda06f520  gcc/tree-vect-stmts.cc
  795c5280c71f566f4b3e8c7fdcc3b609  gcc/tree-vector-builder.cc
  250ce9e7ca93bb776afda377af2c190d  gcc/tree-vector-builder.h
  c5a03f7f18d4c4b5f0a74529e044ddfe  gcc/tree-vectorizer.cc
  e96b2bb5c70a7f94b0863d7050f1677b  gcc/tree-vectorizer.h
! e9db72a7b615c73d68d28097a0696ef0  gcc/tree-vrp.cc
  01b6633a647a8aeca196fc6d0021e4cf  gcc/tree-vrp.h
! 3186aa0901890a8f1ad50ae50781d4a1  gcc/tree.cc
  110668da7614fc11045af4d047706a7a  gcc/tree.def
  bd976d539f03b9f6fd9501087f38cbec  gcc/tree.h
  b157222cc904eb63d41484795109c2ca  gcc/treestruct.def
*************** aa1c6012dd4232e0d369debb9ec3baaf  gcc/va
*** 110454,110460 ****
  fd8293057f64c6f22290d588535d3260  gcc/value-range.h
  6bd9f193e6f88cb950105bff4c176f41  gcc/value-relation.cc
  469a7a97b1112ecfe2c1b5be79fbb00f  gcc/value-relation.h
! aef2f0cae53c5edfd778280219b466a3  gcc/var-tracking.cc
  6b7fefec7082acd9479f9e89b72bd0d3  gcc/varasm.cc
  a251436cc5047a9bd00cf2c9f3d0a170  gcc/varasm.h
  7d462024f7c2b3043e80201d7e1edd3e  gcc/varpool.cc
--- 110880,110886 ----
  fd8293057f64c6f22290d588535d3260  gcc/value-range.h
  6bd9f193e6f88cb950105bff4c176f41  gcc/value-relation.cc
  469a7a97b1112ecfe2c1b5be79fbb00f  gcc/value-relation.h
! a569c965108d0ca43bacdfeb44ecbc1b  gcc/var-tracking.cc
  6b7fefec7082acd9479f9e89b72bd0d3  gcc/varasm.cc
  a251436cc5047a9bd00cf2c9f3d0a170  gcc/varasm.h
  7d462024f7c2b3043e80201d7e1edd3e  gcc/varpool.cc
*************** bb8d04c4e68c6b4518199de46e56faeb  gcc/ve
*** 110465,110471 ****
  ad835c61b5aa28c3f501e0b335cfd8b7  gcc/vector-builder.h
  e9e81f6468a4d8def6380d5c73383508  gcc/vmsdbg.h
  46441fdd05b5cf12c9c2b11ce1a04f46  gcc/vmsdbgout.cc
! db1117500a0d39905f6f00accd6e0282  gcc/vr-values.cc
  e460830a86e9a9a754fcdc3352b86ed6  gcc/vr-values.h
  ff26c41ea07360558ce5b1efed5c5d8a  gcc/vtable-verify.cc
  531ee320a86188a0112184274dc1b80b  gcc/vtable-verify.h
--- 110891,110897 ----
  ad835c61b5aa28c3f501e0b335cfd8b7  gcc/vector-builder.h
  e9e81f6468a4d8def6380d5c73383508  gcc/vmsdbg.h
  46441fdd05b5cf12c9c2b11ce1a04f46  gcc/vmsdbgout.cc
! 32cfc3af066d4cdc39c9197e0493544e  gcc/vr-values.cc
  e460830a86e9a9a754fcdc3352b86ed6  gcc/vr-values.h
  ff26c41ea07360558ce5b1efed5c5d8a  gcc/vtable-verify.cc
  531ee320a86188a0112184274dc1b80b  gcc/vtable-verify.h
*************** ab877905b68606a953bd5a29b5300dad  libcc1
*** 110734,110747 ****
  8e32b4f309146e8842db7a077d77be28  libcody/CMakeLists.txt
  c96a56ec7f0400e30e99a9aa445e0425  libcody/CODING.md
  b5243c8c76fc965a409394a30679e613  libcody/CONTRIB.md
! 9728b4f97dd68bf3894f10ba71f6cbb8  libcody/ChangeLog
  86d3f3a95c324c9479bd8986968f4327  libcody/LICENSE
  55625eec19bfdb5cee37f8c7ae4b796b  libcody/Makefile.in
  ca1c6fe3df5427016005ce753c73d454  libcody/README.md
  99ad81d536fef63b80b7f776f0dec53c  libcody/buffer.cc
! 69dd1db758b0ea369d20d7331d889ef5  libcody/client.cc
  40072537e3589ff033129e9d5aa10660  libcody/cmake/libcody-config-ix.cmake
! 521e6cc4ebd40d0fbc4ad2fbd8c8063b  libcody/cody.hh
  b7630b2f7e3997152972e0d3f86af193  libcody/config.h.in
  a003d1057213ab79099f7bdbea631d9e  libcody/config.m4
  b1c5b142e9fe28fd473595d745695db1  libcody/configure
--- 111160,111173 ----
  8e32b4f309146e8842db7a077d77be28  libcody/CMakeLists.txt
  c96a56ec7f0400e30e99a9aa445e0425  libcody/CODING.md
  b5243c8c76fc965a409394a30679e613  libcody/CONTRIB.md
! 014102ecd05c7bddee40894ceec8ba41  libcody/ChangeLog
  86d3f3a95c324c9479bd8986968f4327  libcody/LICENSE
  55625eec19bfdb5cee37f8c7ae4b796b  libcody/Makefile.in
  ca1c6fe3df5427016005ce753c73d454  libcody/README.md
  99ad81d536fef63b80b7f776f0dec53c  libcody/buffer.cc
! 6085d20f25e5c2f4809b76fc28261fb5  libcody/client.cc
  40072537e3589ff033129e9d5aa10660  libcody/cmake/libcody-config-ix.cmake
! fbd197f7a8c4380bf81aa2ca35950438  libcody/cody.hh
  b7630b2f7e3997152972e0d3f86af193  libcody/config.h.in
  a003d1057213ab79099f7bdbea631d9e  libcody/config.m4
  b1c5b142e9fe28fd473595d745695db1  libcody/configure
*************** b7f8907c165e46ed56efaa23a2c2a570  libcod
*** 110752,110759 ****
  cffdeae41b78da05839b193e90188f55  libcody/netserver.cc
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
! b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! 12b96fc38e7ffc0d2eac954b338c995b  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  1acbb917a57e9be62e9a35a2b8843ec3  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
--- 111178,111185 ----
  cffdeae41b78da05839b193e90188f55  libcody/netserver.cc
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
! c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 3f8087152a1bddd19f19aee1f037841e  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  1acbb917a57e9be62e9a35a2b8843ec3  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
*************** b07c7863f0e7ad4e6a0915d66fc9e582  libcpp
*** 110765,110771 ****
  ff89722b7f828d03d9b7e6604b48f705  libcpp/directives.cc
  4a17617515d4961fd96609af51d900fe  libcpp/errors.cc
  d7920f5045b616b678bf06a6b0ca888e  libcpp/expr.cc
! 3c84272668a840aca2af8488e3667a5a  libcpp/files.cc
  4c23b9e82ca01448b18f7ac4c9e8058c  libcpp/generated_cpp_wcwidth.h
  7fc584598464f2c3aa397e7fec90dccf  libcpp/identifiers.cc
  288c3178bd1e0b81deb8cc4c93fbf099  libcpp/include/cpplib.h
--- 111191,111197 ----
  ff89722b7f828d03d9b7e6604b48f705  libcpp/directives.cc
  4a17617515d4961fd96609af51d900fe  libcpp/errors.cc
  d7920f5045b616b678bf06a6b0ca888e  libcpp/expr.cc
! 8ba1a529822229d78991f17aab8dc6ca  libcpp/files.cc
  4c23b9e82ca01448b18f7ac4c9e8058c  libcpp/generated_cpp_wcwidth.h
  7fc584598464f2c3aa397e7fec90dccf  libcpp/identifiers.cc
  288c3178bd1e0b81deb8cc4c93fbf099  libcpp/include/cpplib.h
*************** df3352a1bd6c274ed82b2a758bc3c4d1  libcpp
*** 110775,110801 ****
  f6265ed339cae65c8b044bbb21d283b4  libcpp/include/symtab.h
  1fd31f0e6458a730ee43a6f6c7f06571  libcpp/init.cc
  cc012cd95bd1c909ce999456a16ab01c  libcpp/internal.h
! 24606cb643c2f881e28b32f45c3d07d1  libcpp/lex.cc
  32d9ae16ae2d390a3a20be3480f9cdbc  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  01c3a45d6e866221d817655f5a80e227  libcpp/macro.cc
  3edc80e88fde4a216d7436d2ecb158af  libcpp/makeucnid.cc
  4219a952c846be5ce392d7627a8ea628  libcpp/makeuname2c.cc
! 246ba746bd12b8496cc531ad9c32ba44  libcpp/mkdeps.cc
  034ec4022e3e960cc381be0a992ed9ef  libcpp/pch.cc
  b46fdf9677dc2fe7f930ade238a7c2e0  libcpp/po/ChangeLog
! 768453cca0d8c0e2666a269e0aff862b  libcpp/po/be.gmo
  ec1c6812b4474e46e48d5c4a7346bf9e  libcpp/po/be.po
! b95a2047eceb40c924d516a013d9d435  libcpp/po/ca.gmo
  dc6f6a772bb26509dd384d9083ad02fd  libcpp/po/ca.po
  1d8027e10cd5342d647536e4ee85e965  libcpp/po/cpplib.pot
  d7d11060d596d361ba4f41d7eb01613c  libcpp/po/da.gmo
  09ec9465414c4dd1b00feebf028f6d24  libcpp/po/da.po
  c4f8ed18ef919f4b0160da81e6f6f502  libcpp/po/de.gmo
  4cca8f92645ad307877dd3218b2ef403  libcpp/po/de.po
! 9d8037a85a1603875c62ac38b52bfe1d  libcpp/po/el.gmo
  0ac71397d2e76413636c141c7d43ec91  libcpp/po/el.po
! 04e2c8bccc8120d5304d56597258ebd1  libcpp/po/eo.gmo
  bafe6909bb292c24eed07863fdaeeff2  libcpp/po/eo.po
  ad6d5012d306bb7dc2122e9b803f3222  libcpp/po/es.gmo
  7db905d4e5d526df987cc551cb9922bc  libcpp/po/es.po
--- 111201,111227 ----
  f6265ed339cae65c8b044bbb21d283b4  libcpp/include/symtab.h
  1fd31f0e6458a730ee43a6f6c7f06571  libcpp/init.cc
  cc012cd95bd1c909ce999456a16ab01c  libcpp/internal.h
! ce321ca934843a2fdf6d8cea9653dfa2  libcpp/lex.cc
  32d9ae16ae2d390a3a20be3480f9cdbc  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  01c3a45d6e866221d817655f5a80e227  libcpp/macro.cc
  3edc80e88fde4a216d7436d2ecb158af  libcpp/makeucnid.cc
  4219a952c846be5ce392d7627a8ea628  libcpp/makeuname2c.cc
! b487f4c8650cfef72567648222fb2262  libcpp/mkdeps.cc
  034ec4022e3e960cc381be0a992ed9ef  libcpp/pch.cc
  b46fdf9677dc2fe7f930ade238a7c2e0  libcpp/po/ChangeLog
! f8911d7159af7a85a3b79336f7013869  libcpp/po/be.gmo
  ec1c6812b4474e46e48d5c4a7346bf9e  libcpp/po/be.po
! d714b2dd27ad5e9d7f42b05e13c9d904  libcpp/po/ca.gmo
  dc6f6a772bb26509dd384d9083ad02fd  libcpp/po/ca.po
  1d8027e10cd5342d647536e4ee85e965  libcpp/po/cpplib.pot
  d7d11060d596d361ba4f41d7eb01613c  libcpp/po/da.gmo
  09ec9465414c4dd1b00feebf028f6d24  libcpp/po/da.po
  c4f8ed18ef919f4b0160da81e6f6f502  libcpp/po/de.gmo
  4cca8f92645ad307877dd3218b2ef403  libcpp/po/de.po
! 0c935c2376e3b53208861ce3f86449da  libcpp/po/el.gmo
  0ac71397d2e76413636c141c7d43ec91  libcpp/po/el.po
! 0e9e2b585e3ab306133917d74272aa6e  libcpp/po/eo.gmo
  bafe6909bb292c24eed07863fdaeeff2  libcpp/po/eo.po
  ad6d5012d306bb7dc2122e9b803f3222  libcpp/po/es.gmo
  7db905d4e5d526df987cc551cb9922bc  libcpp/po/es.po
*************** b7b73e3d845fb49ce7097745715c3be1  libcpp
*** 110803,110809 ****
  3727d4cc33ef0717cf9879ffadacf0f7  libcpp/po/fi.po
  060fe24272f1973d5571eb8652250229  libcpp/po/fr.gmo
  45ce98c5aa64d7915d43c2cf5ff0bf6a  libcpp/po/fr.po
! eac8cfe94da22d65c9666b563d356547  libcpp/po/id.gmo
  e147ba5e1a24e2d84fcab7869e061538  libcpp/po/id.po
  49dc0a045355eeb7c31d69c421d351f8  libcpp/po/ja.gmo
  ebac068b02a8b31d7b68e80ece57d2bf  libcpp/po/ja.po
--- 111229,111235 ----
  3727d4cc33ef0717cf9879ffadacf0f7  libcpp/po/fi.po
  060fe24272f1973d5571eb8652250229  libcpp/po/fr.gmo
  45ce98c5aa64d7915d43c2cf5ff0bf6a  libcpp/po/fr.po
! 406f3ab5461b48f45f50c2798f225cdb  libcpp/po/id.gmo
  e147ba5e1a24e2d84fcab7869e061538  libcpp/po/id.po
  49dc0a045355eeb7c31d69c421d351f8  libcpp/po/ja.gmo
  ebac068b02a8b31d7b68e80ece57d2bf  libcpp/po/ja.po
*************** b5629a48c0c8169fbcde3da520bfc982  libcpp
*** 110827,110833 ****
  4bd22ba982bb42020e1736419e9616f0  libcpp/po/uk.po
  a08034d17583f15309af58221eb06215  libcpp/po/vi.gmo
  86c6f9e79c83f6f3a5e9c7cabc715e4c  libcpp/po/vi.po
! ceb206e2a5366cf16395a4b938cbf2fc  libcpp/po/zh_CN.gmo
  1e71298fd96931534df8eb51d20a9fb1  libcpp/po/zh_CN.po
  50de9f5f60b4ce3e6fbd37a0a82737e4  libcpp/po/zh_TW.gmo
  ae57d3ffcdbea8d31a95b0f83cee8a62  libcpp/po/zh_TW.po
--- 111253,111259 ----
  4bd22ba982bb42020e1736419e9616f0  libcpp/po/uk.po
  a08034d17583f15309af58221eb06215  libcpp/po/vi.gmo
  86c6f9e79c83f6f3a5e9c7cabc715e4c  libcpp/po/vi.po
! ba92c960c192009735299f2dcddeb24d  libcpp/po/zh_CN.gmo
  1e71298fd96931534df8eb51d20a9fb1  libcpp/po/zh_CN.po
  50de9f5f60b4ce3e6fbd37a0a82737e4  libcpp/po/zh_TW.gmo
  ae57d3ffcdbea8d31a95b0f83cee8a62  libcpp/po/zh_TW.po
*************** b129629db06d710e4bc7ff5b8719756a  libffi
*** 110922,110928 ****
  0c9310ab4da9ff4d0d8aa37fa8fcb0be  libffi/configure.ac
  54389f155bf929aa9429f225f0dbbaab  libffi/configure.host
  bad91ff01547ce79fe537211f4763ac0  libffi/doc/Makefile.am
! aa80c390acbb9137366229096a1c3845  libffi/doc/libffi.info
  db28be3951c18d6db6e90f7e612bc67b  libffi/doc/libffi.texi
  5919fb480c65fe4ba9e8d97536e528b2  libffi/doc/version.texi
  ea125d6ff0b3d20372a1556f82ca6a05  libffi/fficonfig.h.in
--- 111348,111354 ----
  0c9310ab4da9ff4d0d8aa37fa8fcb0be  libffi/configure.ac
  54389f155bf929aa9429f225f0dbbaab  libffi/configure.host
  bad91ff01547ce79fe537211f4763ac0  libffi/doc/Makefile.am
! c9f5f3eb2deb219f7587d6d862f6fd3e  libffi/doc/libffi.info
  db28be3951c18d6db6e90f7e612bc67b  libffi/doc/libffi.texi
  5919fb480c65fe4ba9e8d97536e528b2  libffi/doc/version.texi
  ea125d6ff0b3d20372a1556f82ca6a05  libffi/fficonfig.h.in
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 111300,111306 ****
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! d63f6cd29b0f56223387f13eb9b34f29  libgcc/ChangeLog
  3320df74831ba5bd1c34f226b49cc935  libgcc/Makefile.in
  23fc6c0b801b3b6af6581c2a632dc732  libgcc/c++-minimal/README
  90a82b364e40fe9eb1972d8000451364  libgcc/c++-minimal/guard.c
--- 111726,111732 ----
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! e0f3bd1759e015b4ba10e28ccb86dd47  libgcc/ChangeLog
  3320df74831ba5bd1c34f226b49cc935  libgcc/Makefile.in
  23fc6c0b801b3b6af6581c2a632dc732  libgcc/c++-minimal/README
  90a82b364e40fe9eb1972d8000451364  libgcc/c++-minimal/guard.c
*************** b8c85c8c8e7d96bdee3b36f360d85909  libgcc
*** 111322,111328 ****
  a077f95c64de11e67e5d9d909ec45b8c  libgcc/config/aarch64/heap-trampoline.c
  2f4f1a66016e8441301c8e14f69983cf  libgcc/config/aarch64/libgcc-sme.ver
  3b6e3550bfe5c4e5ec25b99108f46513  libgcc/config/aarch64/libgcc-softfp.ver
! 56a1f2d9dfab63cbe5956843fabf7d30  libgcc/config/aarch64/linux-unwind.h
  04307fc9daa7af7f2d0ca9ba5bc55e33  libgcc/config/aarch64/lse-init.c
  2c6803770e388ebace8cd426f33ffec6  libgcc/config/aarch64/lse.S
  e271966ce38209c96e6f569a9f952283  libgcc/config/aarch64/sfp-exceptions.c
--- 111748,111754 ----
  a077f95c64de11e67e5d9d909ec45b8c  libgcc/config/aarch64/heap-trampoline.c
  2f4f1a66016e8441301c8e14f69983cf  libgcc/config/aarch64/libgcc-sme.ver
  3b6e3550bfe5c4e5ec25b99108f46513  libgcc/config/aarch64/libgcc-softfp.ver
! 5bacf834d1391e577c694cf4a7e46c11  libgcc/config/aarch64/linux-unwind.h
  04307fc9daa7af7f2d0ca9ba5bc55e33  libgcc/config/aarch64/lse-init.c
  2c6803770e388ebace8cd426f33ffec6  libgcc/config/aarch64/lse.S
  e271966ce38209c96e6f569a9f952283  libgcc/config/aarch64/sfp-exceptions.c
*************** c12365a0fd0bfbb153c9b75f558feba5  libgcc
*** 111445,111466 ****
  c7b2e09c1a819d37ab91db3294159732  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  b7792b93ec270f682ce38eb52297254e  libgcc/config/avr/lib2funcs.c
! 4d75935fb870e6efd9653abf822c8c81  libgcc/config/avr/libf7/ChangeLog
  159c564e8ed539925b0a82879e077648  libgcc/config/avr/libf7/asm-defs.h
! 434f68c401e93814081ae499ba72ffaf  libgcc/config/avr/libf7/f7-renames.h
! f65ef9e7ada883e17a2dd60b931ad23b  libgcc/config/avr/libf7/f7-wraps.h
! c0d4a5a9b2844505ec941ff60cae008f  libgcc/config/avr/libf7/f7renames.sh
  4026813a3a56ecdf28b1fe38fc63cdec  libgcc/config/avr/libf7/f7wraps.sh
  b6e24d20e3f00cbfe5078999558011c5  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 1803ab20d43890ba103d196f4e55b924  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
! 47dccabf16372b55fb7154bd70ce141f  libgcc/config/avr/libf7/libf7-common.mk
  c29107694f22e1434011033331235b51  libgcc/config/avr/libf7/libf7-const.def
  e55ce8934ace33b814bf03fbbfd9ba5f  libgcc/config/avr/libf7/libf7-constdef.h
! 70d9926ceec1e5a18355f5e64c776b86  libgcc/config/avr/libf7/libf7.c
! c242f404ef73dc81c1dc9b99ffa63920  libgcc/config/avr/libf7/libf7.h
! 606c568e8f2d692bc5762eaba8d8e7b0  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  80fc1df82f5ed30353db097c723cccd7  libgcc/config/avr/t-avr
--- 111871,111892 ----
  c7b2e09c1a819d37ab91db3294159732  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  b7792b93ec270f682ce38eb52297254e  libgcc/config/avr/lib2funcs.c
! bb482b4a7e3437a95340c18b67c27382  libgcc/config/avr/libf7/ChangeLog
  159c564e8ed539925b0a82879e077648  libgcc/config/avr/libf7/asm-defs.h
! 17424a1d9a928496654a70920fd02bc1  libgcc/config/avr/libf7/f7-renames.h
! 242b56b2def38ab8671130aa24953e46  libgcc/config/avr/libf7/f7-wraps.h
! b9901623ec29c1c4dd98d6fae040518c  libgcc/config/avr/libf7/f7renames.sh
  4026813a3a56ecdf28b1fe38fc63cdec  libgcc/config/avr/libf7/f7wraps.sh
  b6e24d20e3f00cbfe5078999558011c5  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 6efa2c3b6b255fc1f0371e5e9efc172f  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
! 7b524c1023cb08a1135fc21df268afcc  libgcc/config/avr/libf7/libf7-common.mk
  c29107694f22e1434011033331235b51  libgcc/config/avr/libf7/libf7-const.def
  e55ce8934ace33b814bf03fbbfd9ba5f  libgcc/config/avr/libf7/libf7-constdef.h
! 64a8893c324757d90dc66b40b42ce596  libgcc/config/avr/libf7/libf7.c
! ed6f3fd8579fc38947541f372f4f21b4  libgcc/config/avr/libf7/libf7.h
! a60f4b9ec013d4cb81e74678015675e2  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  80fc1df82f5ed30353db097c723cccd7  libgcc/config/avr/t-avr
*************** bbd02bc575b39b813abb3651cde980d7  libgcc
*** 111744,111750 ****
  867c89ef316cd7cb05511f42e5b62500  libgcc/config/ia64/vms-unwind.h
  ed33843cb7d615866bc3fb669b8efff7  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! 2ed18a3d3eea0b933b9f2417d9284f34  libgcc/config/libbid/ChangeLog
  5cd3e427016c3a5e21b5fc45a6d0c42c  libgcc/config/libbid/_addsub_dd.c
  e36dad1ba6d303d24d5fadbe7e922379  libgcc/config/libbid/_addsub_sd.c
  c44095a32e8f3d04293d78477872c817  libgcc/config/libbid/_addsub_td.c
--- 112170,112176 ----
  867c89ef316cd7cb05511f42e5b62500  libgcc/config/ia64/vms-unwind.h
  ed33843cb7d615866bc3fb669b8efff7  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! 5cd2094db90507e1720676c5a78dd01c  libgcc/config/libbid/ChangeLog
  5cd3e427016c3a5e21b5fc45a6d0c42c  libgcc/config/libbid/_addsub_dd.c
  e36dad1ba6d303d24d5fadbe7e922379  libgcc/config/libbid/_addsub_sd.c
  c44095a32e8f3d04293d78477872c817  libgcc/config/libbid/_addsub_td.c
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 119336,119349 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! bca6040cc82d028ec8957c824941a481  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  ea86ef6e739ee81b963e6f1f456ec887  libgomp/Makefile.am
  175cf5d896d110ed86d9cd72e1565b83  libgomp/Makefile.in
  61fe8e644000727dc3e4c6a40c02ed83  libgomp/acc_prof.h
  d45f3b20f1be5d95a6c06fb81bedafe9  libgomp/acinclude.m4
  30a64ccfecfa60e8b5098e9fe26ea707  libgomp/aclocal.m4
! 94684a0e1ce8bde5aaa266c86fffe4a2  libgomp/affinity-fmt.c
  c840b066d8a98a896bc6668a93ac9e31  libgomp/affinity.c
  8321390299a0d343737578485bdb863e  libgomp/alloc.c
  aede47e38a9c413d8b14350a1a803f03  libgomp/allocator.c
--- 119762,119775 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 45fade51401c3d5800128b574ff3fe3f  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  ea86ef6e739ee81b963e6f1f456ec887  libgomp/Makefile.am
  175cf5d896d110ed86d9cd72e1565b83  libgomp/Makefile.in
  61fe8e644000727dc3e4c6a40c02ed83  libgomp/acc_prof.h
  d45f3b20f1be5d95a6c06fb81bedafe9  libgomp/acinclude.m4
  30a64ccfecfa60e8b5098e9fe26ea707  libgomp/aclocal.m4
! d56483d133ea6f856429b626780e6d0c  libgomp/affinity-fmt.c
  c840b066d8a98a896bc6668a93ac9e31  libgomp/affinity.c
  8321390299a0d343737578485bdb863e  libgomp/alloc.c
  aede47e38a9c413d8b14350a1a803f03  libgomp/allocator.c
*************** c3d3e689f97a6a1ac096a8fc893c93bb  libgom
*** 119476,119482 ****
  29ffc2d98897ade67adb2a0f60c4278a  libgomp/libgomp-plugin.c
  70c0a3c82cb60714632903474553ec70  libgomp/libgomp-plugin.h
  b888c42439320a17a69b075cd32e0c30  libgomp/libgomp.h
! 9691db18198fd714ff82eba046efbf32  libgomp/libgomp.info
  e609d01257168984c31c75e8132e785d  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
  b1b5c1758cb28db35eda3734919df43f  libgomp/libgomp.texi
--- 119902,119908 ----
  29ffc2d98897ade67adb2a0f60c4278a  libgomp/libgomp-plugin.c
  70c0a3c82cb60714632903474553ec70  libgomp/libgomp-plugin.h
  b888c42439320a17a69b075cd32e0c30  libgomp/libgomp.h
! 1dbe7409ba8b3930fd9cae9302140ecb  libgomp/libgomp.info
  e609d01257168984c31c75e8132e785d  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
  b1b5c1758cb28db35eda3734919df43f  libgomp/libgomp.texi
*************** b018601a4e35da4037b1e04dfdb00b98  libgom
*** 120873,120878 ****
--- 121299,121305 ----
  10f51539240fd456f44686f1368a9ebb  libgomp/testsuite/libgomp.fortran/pointer1.f90
  ea1e8a0a21d27e85d504f82d979196a3  libgomp/testsuite/libgomp.fortran/pointer2.f90
  5a38dd4751898fd9556aa9ed131fad76  libgomp/testsuite/libgomp.fortran/pr100981-2.f90
+ bd4d373b7453a268a0da695bf8bf8f52  libgomp/testsuite/libgomp.fortran/pr120286.f90
  1e7de6c9f1376e7662fc088ab6ec5e64  libgomp/testsuite/libgomp.fortran/pr25162.f
  150790c35955da1ca1b74284c2553f34  libgomp/testsuite/libgomp.fortran/pr25219.f90
  a83bd562c0d1b609f2a71de244b3a1a0  libgomp/testsuite/libgomp.fortran/pr27395-1.f90
*************** d310c3612a920f243d62620f007dec94  libgru
*** 121822,121828 ****
  4d27195db5805ea05b982a2971711c94  libgrust/libproc_macro_internal/tokentree.h
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 6eb94e67d9ee8bcf01f3aca6126412a8  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  4ec52efbaf3e8230220b57e77177d128  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
--- 122249,122255 ----
  4d27195db5805ea05b982a2971711c94  libgrust/libproc_macro_internal/tokentree.h
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 4e1a2fd5d7c4b583a83c008df0af0710  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  4ec52efbaf3e8230220b57e77177d128  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
*************** f8c4ea91a815e826a2bb98c1d9f770f8  libibe
*** 121933,121939 ****
  03f208e23e4d234a55d922700c9db9dd  libiberty/simple-object-elf.c
  6bd7fd61811d90dd9ddc454c724d0c51  libiberty/simple-object-mach-o.c
  c46b918305ab9e7d9644bdc4fd8ae094  libiberty/simple-object-xcoff.c
! 30c5ede9248a062a27b96e47a22c2755  libiberty/simple-object.c
  4863a11e04a2021af582edf86f156954  libiberty/simple-object.txh
  3e5decc7d70885db43efc2edadd3f8b8  libiberty/snprintf.c
  6a91dcba8ac7e873c8541304e552106a  libiberty/sort.c
--- 122360,122366 ----
  03f208e23e4d234a55d922700c9db9dd  libiberty/simple-object-elf.c
  6bd7fd61811d90dd9ddc454c724d0c51  libiberty/simple-object-mach-o.c
  c46b918305ab9e7d9644bdc4fd8ae094  libiberty/simple-object-xcoff.c
! 91abacdcdcca987107ba3c1c30112e93  libiberty/simple-object.c
  4863a11e04a2021af582edf86f156954  libiberty/simple-object.txh
  3e5decc7d70885db43efc2edadd3f8b8  libiberty/snprintf.c
  6a91dcba8ac7e873c8541304e552106a  libiberty/sort.c
*************** c75b863b293812486f3bc46d69871efc  libitm
*** 122053,122059 ****
  bd9c76a7c7124230d7cf426a2c0c2a31  libitm/dispatch.h
  ee07e0ba06bdb4d1ef3ab2ce45738cbd  libitm/eh_cpp.cc
  aeb355ee296325876b2b4c6cff101d0a  libitm/libitm.h
! a9538111cecf6251716fc486b46fce3f  libitm/libitm.info
  0c43820b921ecdbe9d98f068100e716a  libitm/libitm.map
  ea467d7117853d139bb288ab75261139  libitm/libitm.spec.in
  632e609fed1811c7546f67e986bc1c26  libitm/libitm.texi
--- 122480,122486 ----
  bd9c76a7c7124230d7cf426a2c0c2a31  libitm/dispatch.h
  ee07e0ba06bdb4d1ef3ab2ce45738cbd  libitm/eh_cpp.cc
  aeb355ee296325876b2b4c6cff101d0a  libitm/libitm.h
! 2c52de876397a9aec241160b5ab6f997  libitm/libitm.info
  0c43820b921ecdbe9d98f068100e716a  libitm/libitm.map
  ea467d7117853d139bb288ab75261139  libitm/libitm.spec.in
  632e609fed1811c7546f67e986bc1c26  libitm/libitm.texi
*************** f83e2785f73af08f15120d3452c517b3  libobj
*** 122156,122162 ****
  1342bdc4c975033299dcf770cb6db3b8  libobjc/selector.c
  0831a1b1e34ad2ca26cdb0bdf2af08c8  libobjc/sendmsg.c
  4eb8a2e0c7b96a7c72c3693f47580e5f  libobjc/thr.c
! 167502e792211209da3b9808eb981a84  libphobos/ChangeLog
  8c232dd08160212c999236421a5c30cf  libphobos/Makefile.am
  45e0b5a1db9a9605b698b5db9ecbf039  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
--- 122583,122589 ----
  1342bdc4c975033299dcf770cb6db3b8  libobjc/selector.c
  0831a1b1e34ad2ca26cdb0bdf2af08c8  libobjc/sendmsg.c
  4eb8a2e0c7b96a7c72c3693f47580e5f  libobjc/thr.c
! a7338c899b2e45e97ba22e2765ab99b6  libphobos/ChangeLog
  8c232dd08160212c999236421a5c30cf  libphobos/Makefile.am
  45e0b5a1db9a9605b698b5db9ecbf039  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
*************** fbb3c30724cb241010afacb0505c53e7  libpho
*** 122165,122171 ****
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
  ba8b47ae187f9bd2368a1ecc702baa9e  libphobos/configure
  56e7ee603571d143c7dfdc3ae487c4e8  libphobos/configure.ac
! 92053a3816debf9c1a547e84d8aebffc  libphobos/configure.tgt
  1800f195374bf35719e80242f80e953a  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
  fba21123f05d88982639a8a0ccea59a5  libphobos/libdruntime/MERGE
--- 122592,122598 ----
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
  ba8b47ae187f9bd2368a1ecc702baa9e  libphobos/configure
  56e7ee603571d143c7dfdc3ae487c4e8  libphobos/configure.ac
! 692a64af39e84b428222e789bffe7bc3  libphobos/configure.tgt
  1800f195374bf35719e80242f80e953a  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
  fba21123f05d88982639a8a0ccea59a5  libphobos/libdruntime/MERGE
*************** d9afbc1f1e04c7e461265ff9323cc6f4  libqua
*** 123031,123037 ****
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
  724e7207c7bb5491c48ddf95aa824c04  libquadmath/configure
  c16d6073d91cefda754d990ede4d9e9f  libquadmath/configure.ac
! 9227d6adcef344609285517ae9482325  libquadmath/libquadmath.info
  f22088f045dba6416a9a844acf7238b0  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
  452fee0ef153d65eb7413a5103c63a23  libquadmath/math/acoshq.c
--- 123458,123464 ----
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
  724e7207c7bb5491c48ddf95aa824c04  libquadmath/configure
  c16d6073d91cefda754d990ede4d9e9f  libquadmath/configure.ac
! 1066653746ceb23f6bfaffa33a0a312d  libquadmath/libquadmath.info
  f22088f045dba6416a9a844acf7238b0  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
  452fee0ef153d65eb7413a5103c63a23  libquadmath/math/acoshq.c
*************** e0bd9b8669e44ec6010f92da1d5188ad  libqua
*** 123164,123170 ****
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! f7cc0c2fc27f790ab3c616f5a12dcec3  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  894b596d6d81ab8f2fb0708e8bc83e83  libsanitizer/LOCAL_PATCHES
--- 123591,123597 ----
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 6657c7c37d7d5b862fc30fb641040618  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  894b596d6d81ab8f2fb0708e8bc83e83  libsanitizer/LOCAL_PATCHES
*************** a32b38d2eae806bfe95f3e089a711f7a  libsan
*** 123387,123393 ****
  8d31e033038441d83d7dac7241fa7288  libsanitizer/sanitizer_common/sanitizer_common.h
  0efb1be2c27a1a3b31edbde3b5472fc4  libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc
  0a68626fb68e0f53b782fec8d795f632  libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc
! aa961fb0d47d9369601c5aa4bd24ea02  libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
  92d324a2c8f8e44cf13d5f7c545d6c1d  libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc
  c664d5fb1514c978d28a6a62b2040b53  libsanitizer/sanitizer_common/sanitizer_common_interceptors_netbsd_compat.inc
  e19e7b0a6d9409a4b3a5c277ebba0b9a  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S
--- 123814,123820 ----
  8d31e033038441d83d7dac7241fa7288  libsanitizer/sanitizer_common/sanitizer_common.h
  0efb1be2c27a1a3b31edbde3b5472fc4  libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc
  0a68626fb68e0f53b782fec8d795f632  libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc
! f7ca723d15d4d448c700727f05b86537  libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
  92d324a2c8f8e44cf13d5f7c545d6c1d  libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc
  c664d5fb1514c978d28a6a62b2040b53  libsanitizer/sanitizer_common/sanitizer_common_interceptors_netbsd_compat.inc
  e19e7b0a6d9409a4b3a5c277ebba0b9a  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S
*************** a4d7b3990585330fb0fbc99e5afaf019  libsan
*** 123468,123475 ****
  0865bdc585846a1c9cfa5d1df0517d02  libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.h
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.h
! de3519edf4a524cdab4336d4eeed94e0  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
! 1c6ecd7b7fd7b299a11f160ad0de1043  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
  711b54008ada7faff939a95e325b185b  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.cpp
  ab1ad414331f77e459da9a32b756cbac  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.h
  e3606cc19e7b02bfba7878ba5d6ce75a  libsanitizer/sanitizer_common/sanitizer_posix.cpp
--- 123895,123902 ----
  0865bdc585846a1c9cfa5d1df0517d02  libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.h
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.h
! 724970b4f29581a62f244e93bd147d1e  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
! 621396f7d74ae5075a70cd01f5daac83  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
  711b54008ada7faff939a95e325b185b  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.cpp
  ab1ad414331f77e459da9a32b756cbac  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.h
  e3606cc19e7b02bfba7878ba5d6ce75a  libsanitizer/sanitizer_common/sanitizer_posix.cpp
*************** d828e38384c506bf5e7d5a3c02725a37  libssp
*** 123690,123696 ****
  7bb3c32ba0a48d1cf785305e1b783eb6  libssp/strncpy-chk.c
  a19c79c1d86436e86b0fee41e6cf6b15  libssp/vsnprintf-chk.c
  145156e880b03115b393070d0ed37be3  libssp/vsprintf-chk.c
! 5a5d6f5e57b2a2d2769a11112df3612d  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 124117,124123 ----
  7bb3c32ba0a48d1cf785305e1b783eb6  libssp/strncpy-chk.c
  a19c79c1d86436e86b0fee41e6cf6b15  libssp/vsnprintf-chk.c
  145156e880b03115b393070d0ed37be3  libssp/vsprintf-chk.c
! 824ecf2c35bb36b3b456b5b0af0cbfbe  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** c3ccd07160a9bea2e0993c0c8a7d7693  libstd
*** 123784,123796 ****
  2125d10b9efc27578fdc1bd1b2298706  libstdc++-v3/config/cpu/sh/atomicity.h
  eeb172443402d009e2791dabc328b0b0  libstdc++-v3/config/cpu/sparc/atomic_word.h
  52cd5ecd93103febc0f09c9b88cce85c  libstdc++-v3/config/cpu/sparc/atomicity.h
! c09efc996de5e464e95c5d8321c9a71d  libstdc++-v3/config/io/basic_file_stdio.cc
  b3a8d294ffed3fe630224835ecb5387b  libstdc++-v3/config/io/basic_file_stdio.h
  c582707e4e9d2bf26bb0e80fb1d53b37  libstdc++-v3/config/io/c_io_stdio.h
  13ad2dfe48847bf3980a6d745cbc75e1  libstdc++-v3/config/locale/darwin/ctype_members.cc
  e53b206e392537d760a00767558c1ff9  libstdc++-v3/config/locale/dragonfly/c_locale.cc
  0adb1057e008fd5f013ab616ee1061a9  libstdc++-v3/config/locale/dragonfly/c_locale.h
! 1d186bb17bb5ce5a622fb15fbc79ae3d  libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
  b0881a7372e03c96c3ea213f690ebd14  libstdc++-v3/config/locale/dragonfly/collate_members.cc
  6113408f73996f73c99241e946917f56  libstdc++-v3/config/locale/dragonfly/ctype_members.cc
  92f6508a276d0a9d159c0678d1c654bb  libstdc++-v3/config/locale/dragonfly/monetary_members.cc
--- 124211,124223 ----
  2125d10b9efc27578fdc1bd1b2298706  libstdc++-v3/config/cpu/sh/atomicity.h
  eeb172443402d009e2791dabc328b0b0  libstdc++-v3/config/cpu/sparc/atomic_word.h
  52cd5ecd93103febc0f09c9b88cce85c  libstdc++-v3/config/cpu/sparc/atomicity.h
! 06aa47bd91e3e34c1961d79233986030  libstdc++-v3/config/io/basic_file_stdio.cc
  b3a8d294ffed3fe630224835ecb5387b  libstdc++-v3/config/io/basic_file_stdio.h
  c582707e4e9d2bf26bb0e80fb1d53b37  libstdc++-v3/config/io/c_io_stdio.h
  13ad2dfe48847bf3980a6d745cbc75e1  libstdc++-v3/config/locale/darwin/ctype_members.cc
  e53b206e392537d760a00767558c1ff9  libstdc++-v3/config/locale/dragonfly/c_locale.cc
  0adb1057e008fd5f013ab616ee1061a9  libstdc++-v3/config/locale/dragonfly/c_locale.h
! 39bd883a4ae047fb937e1d35fbc1a119  libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
  b0881a7372e03c96c3ea213f690ebd14  libstdc++-v3/config/locale/dragonfly/collate_members.cc
  6113408f73996f73c99241e946917f56  libstdc++-v3/config/locale/dragonfly/ctype_members.cc
  92f6508a276d0a9d159c0678d1c654bb  libstdc++-v3/config/locale/dragonfly/monetary_members.cc
*************** d588967133def576ecbdc4d9ed421478  libstd
*** 123812,123818 ****
  df061879108e80be88e96057b7b26d6b  libstdc++-v3/config/locale/gnu/c++locale_internal.h
  f827200593ca85a41d3feae35dbd3928  libstdc++-v3/config/locale/gnu/c_locale.cc
  4108fd77e3e97184dc6e52e28017410a  libstdc++-v3/config/locale/gnu/c_locale.h
! 2e059647092ed1cc2ab4f637e330a0cc  libstdc++-v3/config/locale/gnu/codecvt_members.cc
  eeb967fe13307d9b093daebb51717a49  libstdc++-v3/config/locale/gnu/collate_members.cc
  010485948df26bb145ef467f2ebe5a90  libstdc++-v3/config/locale/gnu/ctype_members.cc
  8dc72a159ed04c00cc58e7240a5f1005  libstdc++-v3/config/locale/gnu/messages_members.cc
--- 124239,124245 ----
  df061879108e80be88e96057b7b26d6b  libstdc++-v3/config/locale/gnu/c++locale_internal.h
  f827200593ca85a41d3feae35dbd3928  libstdc++-v3/config/locale/gnu/c_locale.cc
  4108fd77e3e97184dc6e52e28017410a  libstdc++-v3/config/locale/gnu/c_locale.h
! 0f05d2f61b1680617b6a711eb0c0ab8f  libstdc++-v3/config/locale/gnu/codecvt_members.cc
  eeb967fe13307d9b093daebb51717a49  libstdc++-v3/config/locale/gnu/collate_members.cc
  010485948df26bb145ef467f2ebe5a90  libstdc++-v3/config/locale/gnu/ctype_members.cc
  8dc72a159ed04c00cc58e7240a5f1005  libstdc++-v3/config/locale/gnu/messages_members.cc
*************** a1bd8822ec35d463c058a8af51bed685  libstd
*** 123839,123845 ****
  1d5d357556d430f0638b33befc73aeac  libstdc++-v3/config/os/bsd/darwin/ctype_base.h
  ab68656c8c4b1603af9e0b5ff12988d8  libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc
  47c702f417ba236bf6d6ca7c1b19c7ba  libstdc++-v3/config/os/bsd/darwin/ctype_inline.h
! 6c77ec588eb9291ea3403c24ed37310d  libstdc++-v3/config/os/bsd/darwin/os_defines.h
  9e91dfcb11e4c78744df0e1e0cf69b5b  libstdc++-v3/config/os/bsd/darwin/ppc-extra.ver
  df41d5e227c08bc35c33e096800b3c6a  libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
  721aa5e60a5fb4b0605b6d4aa22139fa  libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc
--- 124266,124272 ----
  1d5d357556d430f0638b33befc73aeac  libstdc++-v3/config/os/bsd/darwin/ctype_base.h
  ab68656c8c4b1603af9e0b5ff12988d8  libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc
  47c702f417ba236bf6d6ca7c1b19c7ba  libstdc++-v3/config/os/bsd/darwin/ctype_inline.h
! 2697d2e83a232a955e077a12a6844ecc  libstdc++-v3/config/os/bsd/darwin/os_defines.h
  9e91dfcb11e4c78744df0e1e0cf69b5b  libstdc++-v3/config/os/bsd/darwin/ppc-extra.ver
  df41d5e227c08bc35c33e096800b3c6a  libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
  721aa5e60a5fb4b0605b6d4aa22139fa  libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc
*************** e7438a4bf7383459b5993ae739e430e8  libstd
*** 123848,123854 ****
  bfb3dd275dda6d404949711f0c5f2150  libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
  721aa5e60a5fb4b0605b6d4aa22139fa  libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc
  47c702f417ba236bf6d6ca7c1b19c7ba  libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
! 53fd4a78322a664b8c31bc608ef31c2e  libstdc++-v3/config/os/bsd/freebsd/os_defines.h
  0f421f2ece494b1918ba1bfa718f339f  libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
  d3e30350bc6d2476b9b3183ae7030144  libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc
  bc1000065b5a226b93bc602a72b93061  libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h
--- 124275,124281 ----
  bfb3dd275dda6d404949711f0c5f2150  libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
  721aa5e60a5fb4b0605b6d4aa22139fa  libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc
  47c702f417ba236bf6d6ca7c1b19c7ba  libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
! bd0e5156d3a91e84842bfb8f3ab5c225  libstdc++-v3/config/os/bsd/freebsd/os_defines.h
  0f421f2ece494b1918ba1bfa718f339f  libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
  d3e30350bc6d2476b9b3183ae7030144  libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc
  bc1000065b5a226b93bc602a72b93061  libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h
*************** bd8c15c9efad8290c2830b5f862c5dac  libstd
*** 123912,123926 ****
  d849abea519d28ba158a4dfbffa9c4d5  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  4865c9788d97189c7e5ca49ebf800a8e  libstdc++-v3/config/os/vxworks/ctype_inline.h
  bbdb4b03bbbcb116aaaf242952a3bb3a  libstdc++-v3/config/os/vxworks/os_defines.h
! a3bbb9c832ecb2535feb477ec01aaffb  libstdc++-v3/configure
! 14f69aaace9241dea5708c5453849a7d  libstdc++-v3/configure.ac
  32bd1d9563a5eddd6de993e64a56a7ea  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  a49c1f48702d35a11b6493d099cee092  libstdc++-v3/doc/Makefile.am
  d66f986053e4755f0517ff5cfe90b2b5  libstdc++-v3/doc/Makefile.in
  3f7ff07f68cc7610addc1921bc125548  libstdc++-v3/doc/doxygen/Intro.3
  d9b077b82911753368f65f3014d3311d  libstdc++-v3/doc/doxygen/doxygroups.cc
! 520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
  92f5430d44f06426f0d19bffc186ad05  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
  0417f3646df4b35e1e898c85ad0b6e3f  libstdc++-v3/doc/doxygen/user.cfg.in
--- 124339,124353 ----
  d849abea519d28ba158a4dfbffa9c4d5  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  4865c9788d97189c7e5ca49ebf800a8e  libstdc++-v3/config/os/vxworks/ctype_inline.h
  bbdb4b03bbbcb116aaaf242952a3bb3a  libstdc++-v3/config/os/vxworks/os_defines.h
! 433570ab3974e05c3b537a7d092c1015  libstdc++-v3/configure
! 7fa579426ed84440adf028e56bd693e3  libstdc++-v3/configure.ac
  32bd1d9563a5eddd6de993e64a56a7ea  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  a49c1f48702d35a11b6493d099cee092  libstdc++-v3/doc/Makefile.am
  d66f986053e4755f0517ff5cfe90b2b5  libstdc++-v3/doc/Makefile.in
  3f7ff07f68cc7610addc1921bc125548  libstdc++-v3/doc/doxygen/Intro.3
  d9b077b82911753368f65f3014d3311d  libstdc++-v3/doc/doxygen/doxygroups.cc
! 0afaede288e1533644cb1445cf4ff813  libstdc++-v3/doc/doxygen/mainpage.html
  92f5430d44f06426f0d19bffc186ad05  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
  0417f3646df4b35e1e898c85ad0b6e3f  libstdc++-v3/doc/doxygen/user.cfg.in
*************** d9b077b82911753368f65f3014d3311d  libstd
*** 123928,123934 ****
  c68ff21babfa14f20b98e36a2c808418  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
  47886ba7da131bf3cbf81a27cada5f6f  libstdc++-v3/doc/html/bk03.html
! 4ad77cb0a65c93dd0294a64b4bfb3230  libstdc++-v3/doc/html/faq.html
  1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
  d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
  22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
--- 124355,124361 ----
  c68ff21babfa14f20b98e36a2c808418  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
  47886ba7da131bf3cbf81a27cada5f6f  libstdc++-v3/doc/html/bk03.html
! f8b26e04c810a70ae898ae5dc98c8b2e  libstdc++-v3/doc/html/faq.html
  1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
  d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
  22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
*************** c60c6ae778d5dedae24ac21abf948bdb  libstd
*** 124026,124033 ****
  6095fbb12cc581b2614870b42ad0e8b0  libstdc++-v3/doc/html/manual/bugs.html
  cc3700f2fde50987f186f23abf98a7b1  libstdc++-v3/doc/html/manual/concept_checking.html
  f3a54a6315d716742603d33f454f2c19  libstdc++-v3/doc/html/manual/concurrency.html
! e4aaeef0b98cb4c49ee46b83c543ca34  libstdc++-v3/doc/html/manual/configure.html
! af4e79b9e55fd023eeb0459df34a4a82  libstdc++-v3/doc/html/manual/containers.html
  c7e40c1085e414b3b4d5896db4013205  libstdc++-v3/doc/html/manual/containers_and_c.html
  1a937490b245964deeb0497dfdbfa840  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
--- 124453,124460 ----
  6095fbb12cc581b2614870b42ad0e8b0  libstdc++-v3/doc/html/manual/bugs.html
  cc3700f2fde50987f186f23abf98a7b1  libstdc++-v3/doc/html/manual/concept_checking.html
  f3a54a6315d716742603d33f454f2c19  libstdc++-v3/doc/html/manual/concurrency.html
! 5947575728a455bd84faee21330f2ab0  libstdc++-v3/doc/html/manual/configure.html
! 5328918ec42768cddb06c3e97ef4530c  libstdc++-v3/doc/html/manual/containers.html
  c7e40c1085e414b3b4d5896db4013205  libstdc++-v3/doc/html/manual/containers_and_c.html
  1a937490b245964deeb0497dfdbfa840  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
*************** afcc2751dae09e088abc1e3175cb94cc  libstd
*** 124047,124055 ****
  561a364254927bdc578ac31f1b66747f  libstdc++-v3/doc/html/manual/ext_demangling.html
  05003e71d54cfdfd4c8291489f8ffa07  libstdc++-v3/doc/html/manual/ext_io.html
  44f8ef8b093904d418755d0e32d700b7  libstdc++-v3/doc/html/manual/ext_iterators.html
! 8f3bd86e04d263ad87cc258c289aae6d  libstdc++-v3/doc/html/manual/ext_numerics.html
  6d380acac52eb8c888a54068e44b16ac  libstdc++-v3/doc/html/manual/ext_preface.html
! 5632eb8ef681cd35b41be7eb7a3d7a98  libstdc++-v3/doc/html/manual/ext_sgi.html
  9b34310c7cb7faa4373ee6683678c457  libstdc++-v3/doc/html/manual/ext_utilities.html
  9e255046a8ef2903114374ed06403045  libstdc++-v3/doc/html/manual/extensions.html
  76cac108e21e304b7607196fb5245e00  libstdc++-v3/doc/html/manual/facets.html
--- 124474,124482 ----
  561a364254927bdc578ac31f1b66747f  libstdc++-v3/doc/html/manual/ext_demangling.html
  05003e71d54cfdfd4c8291489f8ffa07  libstdc++-v3/doc/html/manual/ext_io.html
  44f8ef8b093904d418755d0e32d700b7  libstdc++-v3/doc/html/manual/ext_iterators.html
! ffd5e74a40bbf6623b8ccf687eb584d8  libstdc++-v3/doc/html/manual/ext_numerics.html
  6d380acac52eb8c888a54068e44b16ac  libstdc++-v3/doc/html/manual/ext_preface.html
! 6889f243ab6934ae5f80ea7fa9c69dbf  libstdc++-v3/doc/html/manual/ext_sgi.html
  9b34310c7cb7faa4373ee6683678c457  libstdc++-v3/doc/html/manual/ext_utilities.html
  9e255046a8ef2903114374ed06403045  libstdc++-v3/doc/html/manual/extensions.html
  76cac108e21e304b7607196fb5245e00  libstdc++-v3/doc/html/manual/facets.html
*************** d55e182adbf08772ec85b18d390b0dbb  libstd
*** 124094,124100 ****
  05fe12a35eeac73538be455d4b27f923  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! e929157449f6375ef20f4b9e215739cd  libstdc++-v3/doc/html/manual/status.html
  ea0c531c09fa230f346f8ba700961e4a  libstdc++-v3/doc/html/manual/std_contents.html
  dbb5f81a9e8864374fbb835eaa4e8b0d  libstdc++-v3/doc/html/manual/streambufs.html
  ae6c18dfed9687f9a8c9d622435fda72  libstdc++-v3/doc/html/manual/strings.html
--- 124521,124527 ----
  05fe12a35eeac73538be455d4b27f923  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 965b2bd32fc0c4c2cc398fb0c9f69ee0  libstdc++-v3/doc/html/manual/status.html
  ea0c531c09fa230f346f8ba700961e4a  libstdc++-v3/doc/html/manual/std_contents.html
  dbb5f81a9e8864374fbb835eaa4e8b0d  libstdc++-v3/doc/html/manual/streambufs.html
  ae6c18dfed9687f9a8c9d622435fda72  libstdc++-v3/doc/html/manual/strings.html
*************** fcdceeabf3a95117ea22e93a0354e564  libstd
*** 124105,124124 ****
  c39b927efcec5ac84139c1490c8ef320  libstdc++-v3/doc/html/manual/traits.html
  530b96535baacfe35df2e65f9dfe7efc  libstdc++-v3/doc/html/manual/unordered_associative.html
  ae44a39d1ac906098dd3e9fc8acd917e  libstdc++-v3/doc/html/manual/using.html
! ea78c1e7e98f6458923056e2b869969d  libstdc++-v3/doc/html/manual/using_concurrency.html
  f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  a372b01a93ca1beeb843a1440bd25cdd  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  09eeb2fa79fb240e032461adcbe2cb4a  libstdc++-v3/doc/html/manual/using_exceptions.html
  6046d265a9d1a3d954dec8c82317fbff  libstdc++-v3/doc/html/manual/using_headers.html
  c8ee0e07a78cdcb3ed7cd3ed7ac16cc0  libstdc++-v3/doc/html/manual/using_macros.html
  ccc3b1a320ccc49a977c80546610195b  libstdc++-v3/doc/html/manual/using_namespaces.html
! d881fcffb799c09a28d8174ccb1326a2  libstdc++-v3/doc/html/manual/utilities.html
  ccbc0492a648982f2dc225595bdbc567  libstdc++-v3/doc/xml/api.xml
  8059eb81f5540dc3ae678ac09e1f3159  libstdc++-v3/doc/xml/authors.xml
  5906074c27c57c65b220c35bbcb2c5ec  libstdc++-v3/doc/xml/book.txml
  44d3a92b83abfb18efac80519c79b44c  libstdc++-v3/doc/xml/chapter.txml
  011b8e6a5442e4dc08f02e7295b644a3  libstdc++-v3/doc/xml/class.txml
! 2e681cceb238178e7b9da9cd744cdbdc  libstdc++-v3/doc/xml/faq.xml
  ea77580f7e81e2c49aea3f425c01ee2b  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
  56bb32e9ab9358834c5f8eca2cd0e969  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
  18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
--- 124532,124551 ----
  c39b927efcec5ac84139c1490c8ef320  libstdc++-v3/doc/html/manual/traits.html
  530b96535baacfe35df2e65f9dfe7efc  libstdc++-v3/doc/html/manual/unordered_associative.html
  ae44a39d1ac906098dd3e9fc8acd917e  libstdc++-v3/doc/html/manual/using.html
! 08121b7fa3846487302afa82afc9d571  libstdc++-v3/doc/html/manual/using_concurrency.html
  f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  a372b01a93ca1beeb843a1440bd25cdd  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  09eeb2fa79fb240e032461adcbe2cb4a  libstdc++-v3/doc/html/manual/using_exceptions.html
  6046d265a9d1a3d954dec8c82317fbff  libstdc++-v3/doc/html/manual/using_headers.html
  c8ee0e07a78cdcb3ed7cd3ed7ac16cc0  libstdc++-v3/doc/html/manual/using_macros.html
  ccc3b1a320ccc49a977c80546610195b  libstdc++-v3/doc/html/manual/using_namespaces.html
! 13c8dfb643338ee235bfc84a29e5d3f2  libstdc++-v3/doc/html/manual/utilities.html
  ccbc0492a648982f2dc225595bdbc567  libstdc++-v3/doc/xml/api.xml
  8059eb81f5540dc3ae678ac09e1f3159  libstdc++-v3/doc/xml/authors.xml
  5906074c27c57c65b220c35bbcb2c5ec  libstdc++-v3/doc/xml/book.txml
  44d3a92b83abfb18efac80519c79b44c  libstdc++-v3/doc/xml/chapter.txml
  011b8e6a5442e4dc08f02e7295b644a3  libstdc++-v3/doc/xml/class.txml
! ceb9ac8b1034d6c14b209dc0d11ef270  libstdc++-v3/doc/xml/faq.xml
  ea77580f7e81e2c49aea3f425c01ee2b  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
  56bb32e9ab9358834c5f8eca2cd0e969  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
  18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
*************** b3f117e4c677e60cf6035cf76714b185  libstd
*** 124312,124326 ****
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
! c814233bae2af79cc1273d72145d497c  libstdc++-v3/doc/xml/manual/configure.xml
! 0af07cc2460e288292186ea8149169ee  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
  73da07ff0c1a31e349529a066ddefd62  libstdc++-v3/doc/xml/manual/debug.xml
  a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  c7467f13981c47fc740c948b16a42a53  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
  7913cf2fde8b99dad6a9926be9cae3d9  libstdc++-v3/doc/xml/manual/evolution.xml
! f9b28126e916ad19bb8350c6cb6bff95  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  51fce4cf657917cd7bc102d522b7c9ab  libstdc++-v3/doc/xml/manual/intro.xml
  93c3158fe28bdfbbf03dd039cc4e79a2  libstdc++-v3/doc/xml/manual/io.xml
--- 124739,124753 ----
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
! c41c4c9fa14f2b606c7f84c03138db8f  libstdc++-v3/doc/xml/manual/configure.xml
! d7100469dfefd97836f3007f2682087d  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
  73da07ff0c1a31e349529a066ddefd62  libstdc++-v3/doc/xml/manual/debug.xml
  a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  c7467f13981c47fc740c948b16a42a53  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
  7913cf2fde8b99dad6a9926be9cae3d9  libstdc++-v3/doc/xml/manual/evolution.xml
! 250fbd9ce8e61158b22da9b231426c24  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  51fce4cf657917cd7bc102d522b7c9ab  libstdc++-v3/doc/xml/manual/intro.xml
  93c3158fe28bdfbbf03dd039cc4e79a2  libstdc++-v3/doc/xml/manual/io.xml
*************** f934009b05c708b87c8e0a2b194ea477  libstd
*** 124337,124345 ****
  adadeaccd7e3be18b69dcc095e96f3af  libstdc++-v3/doc/xml/manual/shared_ptr.xml
  d7f222c42325cd44eadad2c59eef7e6f  libstdc++-v3/doc/xml/manual/spine.xml
  f5e5c164b379543f33fa58c890568600  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
! 3ef7bfd292118d8bd2bdbd09564ab5dc  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
  76fe5dbda49c296862d18751dba25d48  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! 356386c3ca52162ea521f80496d0163d  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
  61a0688e4d261cfe30d6f43067137d49  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
  ed98cae6a6568a0cd046979948e057ba  libstdc++-v3/doc/xml/manual/status_cxx2023.xml
  e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
--- 124764,124772 ----
  adadeaccd7e3be18b69dcc095e96f3af  libstdc++-v3/doc/xml/manual/shared_ptr.xml
  d7f222c42325cd44eadad2c59eef7e6f  libstdc++-v3/doc/xml/manual/spine.xml
  f5e5c164b379543f33fa58c890568600  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
! 1907fd2d6a72e488c4eaa5f71a2ec3a3  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
  76fe5dbda49c296862d18751dba25d48  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! be3724a3f12d69c2a07c0f7c62c80bab  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
  61a0688e4d261cfe30d6f43067137d49  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
  ed98cae6a6568a0cd046979948e057ba  libstdc++-v3/doc/xml/manual/status_cxx2023.xml
  e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
*************** e12241b98a6c1e835b7b1d1bb31761ca  libstd
*** 124349,124362 ****
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
  9b6e9edb319fa7d5d378de90a27f4f49  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 663588c0324e0275daed903a7183244b  libstdc++-v3/doc/xml/manual/using.xml
  257e301935b13b4b045e571fa248a4d8  libstdc++-v3/doc/xml/manual/using_exceptions.xml
! 74a5acaa32b3d223bd413c1bb5b69ac6  libstdc++-v3/doc/xml/manual/utilities.xml
  e6f2e1ff035b9b144ac628a016da524a  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 0f80efcc13cbac62693edf0941b78978  libstdc++-v3/include/Makefile.am
! 74347629583baab2a09d4bc755121b78  libstdc++-v3/include/Makefile.in
  e80aa1cdcf7213d9b1735c8779502146  libstdc++-v3/include/backward/auto_ptr.h
  0a5df32cdd2ccea6d7b2bccc32264c11  libstdc++-v3/include/backward/backward_warning.h
  1685c415463ebd7e7ece8bc9fcd32ea2  libstdc++-v3/include/backward/binders.h
--- 124776,124789 ----
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
  9b6e9edb319fa7d5d378de90a27f4f49  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 42f2dd529d430f80557927921d991fc8  libstdc++-v3/doc/xml/manual/using.xml
  257e301935b13b4b045e571fa248a4d8  libstdc++-v3/doc/xml/manual/using_exceptions.xml
! b820e3490221bb85cbf6bcdde0aa8150  libstdc++-v3/doc/xml/manual/utilities.xml
  e6f2e1ff035b9b144ac628a016da524a  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 1ec4df228ad1388aed7aae271b20f9a7  libstdc++-v3/include/Makefile.am
! 4d6a169b0cd2f0589a12e9bc82338c26  libstdc++-v3/include/Makefile.in
  e80aa1cdcf7213d9b1735c8779502146  libstdc++-v3/include/backward/auto_ptr.h
  0a5df32cdd2ccea6d7b2bccc32264c11  libstdc++-v3/include/backward/backward_warning.h
  1685c415463ebd7e7ece8bc9fcd32ea2  libstdc++-v3/include/backward/binders.h
*************** c6b3be3f7c9e66db91c556f5614ccd86  libstd
*** 124370,124399 ****
  727aabeecf8dea4131488fc7651a947c  libstdc++-v3/include/bits/alloc_traits.h
  0130a22c73e6916ce695d7a65b55e136  libstdc++-v3/include/bits/allocated_ptr.h
  4303dd43fc7d56b49442b413b25dc805  libstdc++-v3/include/bits/allocator.h
! 9feea67e4c4a673083750197f672c3c6  libstdc++-v3/include/bits/atomic_base.h
  31881a266f280e51758541ba9f12f2c3  libstdc++-v3/include/bits/atomic_futex.h
  670239be1d02c64eb81eb20244729696  libstdc++-v3/include/bits/atomic_timed_wait.h
! 86a7c6dd9198cedb31603235e5a08375  libstdc++-v3/include/bits/atomic_wait.h
  7e4c44e3709a39e69e5926b8943aaeaa  libstdc++-v3/include/bits/basic_ios.h
  c5f0b0cf12a20c25f0e41914429011a4  libstdc++-v3/include/bits/basic_ios.tcc
! 50022ba6baf116415f0c60491f1837ef  libstdc++-v3/include/bits/basic_string.h
  2103f7f0b7675f2dbef787a9dfe5cab1  libstdc++-v3/include/bits/basic_string.tcc
  c7a6720fba64940d0fa26db8b1690df2  libstdc++-v3/include/bits/boost_concept_check.h
  40bbfd82087a88af5f846b2166bbb898  libstdc++-v3/include/bits/c++0x_warning.h
  c72b1c964202f34f94adedd186dee7ec  libstdc++-v3/include/bits/c++config
  28aee543f6c9d197b0af864e888f0122  libstdc++-v3/include/bits/char_traits.h
  6859feb7dcc6695a2c6234641b888038  libstdc++-v3/include/bits/charconv.h
! b3ba0378f24b45c0114b4c8f4c94bcc6  libstdc++-v3/include/bits/chrono.h
! bb5e298ce560b9837ad2d0c798d3f51c  libstdc++-v3/include/bits/chrono_io.h
  88b76f5a51860ba832b9dc12ecb77d11  libstdc++-v3/include/bits/codecvt.h
  51b1ac432b9720acddaea7defbbb9885  libstdc++-v3/include/bits/concept_check.h
! 9f6becff2cdcd091bfe82c8c2a145148  libstdc++-v3/include/bits/cow_string.h
  d68615791f87e5f4b1ab7e55dbbdf7d8  libstdc++-v3/include/bits/cpp_type_traits.h
  6925481fe4621a431555a4cc65a190ee  libstdc++-v3/include/bits/deque.tcc
  769cf52788a336b71f976155bb6f43bd  libstdc++-v3/include/bits/elements_of.h
  afd1789a41d6c832f583d0a86e85d7b0  libstdc++-v3/include/bits/enable_special_members.h
  bfd9dcd277a4e1fc8264d9778a51a1fc  libstdc++-v3/include/bits/erase_if.h
! 332ad6d309050f58245411a2b865705d  libstdc++-v3/include/bits/forward_list.h
  54988ffbb55b7b28d8e742246eeb7e7a  libstdc++-v3/include/bits/forward_list.tcc
  02d3e4901467aed8b1630886a362249b  libstdc++-v3/include/bits/fs_dir.h
  2b5018cc2b1ec4f77c1063ee9f2bd1b9  libstdc++-v3/include/bits/fs_fwd.h
--- 124797,124826 ----
  727aabeecf8dea4131488fc7651a947c  libstdc++-v3/include/bits/alloc_traits.h
  0130a22c73e6916ce695d7a65b55e136  libstdc++-v3/include/bits/allocated_ptr.h
  4303dd43fc7d56b49442b413b25dc805  libstdc++-v3/include/bits/allocator.h
! bfbaebc632ef7934f036a51449baf447  libstdc++-v3/include/bits/atomic_base.h
  31881a266f280e51758541ba9f12f2c3  libstdc++-v3/include/bits/atomic_futex.h
  670239be1d02c64eb81eb20244729696  libstdc++-v3/include/bits/atomic_timed_wait.h
! 9529790962fcc36aa3e8749da4844883  libstdc++-v3/include/bits/atomic_wait.h
  7e4c44e3709a39e69e5926b8943aaeaa  libstdc++-v3/include/bits/basic_ios.h
  c5f0b0cf12a20c25f0e41914429011a4  libstdc++-v3/include/bits/basic_ios.tcc
! b4ba452f9aefccd503b0b3aff37ea147  libstdc++-v3/include/bits/basic_string.h
  2103f7f0b7675f2dbef787a9dfe5cab1  libstdc++-v3/include/bits/basic_string.tcc
  c7a6720fba64940d0fa26db8b1690df2  libstdc++-v3/include/bits/boost_concept_check.h
  40bbfd82087a88af5f846b2166bbb898  libstdc++-v3/include/bits/c++0x_warning.h
  c72b1c964202f34f94adedd186dee7ec  libstdc++-v3/include/bits/c++config
  28aee543f6c9d197b0af864e888f0122  libstdc++-v3/include/bits/char_traits.h
  6859feb7dcc6695a2c6234641b888038  libstdc++-v3/include/bits/charconv.h
! a2af06290cb60d50293e7486d3c7cd47  libstdc++-v3/include/bits/chrono.h
! 69cc775c4b507b1d2b333d1db6534a63  libstdc++-v3/include/bits/chrono_io.h
  88b76f5a51860ba832b9dc12ecb77d11  libstdc++-v3/include/bits/codecvt.h
  51b1ac432b9720acddaea7defbbb9885  libstdc++-v3/include/bits/concept_check.h
! 8a0280a1d69fd047e88fcd22a0723686  libstdc++-v3/include/bits/cow_string.h
  d68615791f87e5f4b1ab7e55dbbdf7d8  libstdc++-v3/include/bits/cpp_type_traits.h
  6925481fe4621a431555a4cc65a190ee  libstdc++-v3/include/bits/deque.tcc
  769cf52788a336b71f976155bb6f43bd  libstdc++-v3/include/bits/elements_of.h
  afd1789a41d6c832f583d0a86e85d7b0  libstdc++-v3/include/bits/enable_special_members.h
  bfd9dcd277a4e1fc8264d9778a51a1fc  libstdc++-v3/include/bits/erase_if.h
! 834802f30884d0f0a7cc18c80a7ca90c  libstdc++-v3/include/bits/forward_list.h
  54988ffbb55b7b28d8e742246eeb7e7a  libstdc++-v3/include/bits/forward_list.tcc
  02d3e4901467aed8b1630886a362249b  libstdc++-v3/include/bits/fs_dir.h
  2b5018cc2b1ec4f77c1063ee9f2bd1b9  libstdc++-v3/include/bits/fs_fwd.h
*************** ba6fdb35c83864ee024b67957ec5139e  libstd
*** 124431,124449 ****
  34f4e090534a50eb37116b0383cd19b9  libstdc++-v3/include/bits/node_handle.h
  e550e635e1f42bf8467d788380ccd250  libstdc++-v3/include/bits/ostream.tcc
  b3cc417d9bf80b45297f5caccd8e79c6  libstdc++-v3/include/bits/ostream_insert.h
! d99f9625098f07a9525cf5f41ad18321  libstdc++-v3/include/bits/out_ptr.h
  23a6fd8c321e54ff587d296e0fd069cf  libstdc++-v3/include/bits/parse_numbers.h
  eb435bab187a1573a8b7d3ca8297ded1  libstdc++-v3/include/bits/postypes.h
  6e5715ba617a5f0246f059bf9a9a7309  libstdc++-v3/include/bits/predefined_ops.h
  c005f46850d3b5df0f57a8470f409ff8  libstdc++-v3/include/bits/ptr_traits.h
  c1d468a0ee886f88b70ef47855bb5a42  libstdc++-v3/include/bits/quoted_string.h
  9fecc04de83e464036e805070a7d633e  libstdc++-v3/include/bits/random.h
! afef6bb168d2a386d2dc4aaf2937c1d1  libstdc++-v3/include/bits/random.tcc
  59fb2d3661995c86a3996a5d1af055af  libstdc++-v3/include/bits/range_access.h
  b320b8e354287c4e241d67f2b75eff17  libstdc++-v3/include/bits/ranges_algo.h
  6cb193dd721dcfc25fcaee8dfea5e5fe  libstdc++-v3/include/bits/ranges_algobase.h
! 8acf5ee995f9787021a67b3f8d9c591b  libstdc++-v3/include/bits/ranges_base.h
! 2b75fae9285c2ca3120c6d7191768285  libstdc++-v3/include/bits/ranges_cmp.h
  66406b0b277e3b6df527a052145d6990  libstdc++-v3/include/bits/ranges_uninitialized.h
  6b723b82f7c41537c2bba4766e5d0639  libstdc++-v3/include/bits/ranges_util.h
  a7e081671330fd3d6d40ef990c3a9db5  libstdc++-v3/include/bits/refwrap.h
--- 124858,124876 ----
  34f4e090534a50eb37116b0383cd19b9  libstdc++-v3/include/bits/node_handle.h
  e550e635e1f42bf8467d788380ccd250  libstdc++-v3/include/bits/ostream.tcc
  b3cc417d9bf80b45297f5caccd8e79c6  libstdc++-v3/include/bits/ostream_insert.h
! 7ff51e7a483463b8a5d93ea2d31841b9  libstdc++-v3/include/bits/out_ptr.h
  23a6fd8c321e54ff587d296e0fd069cf  libstdc++-v3/include/bits/parse_numbers.h
  eb435bab187a1573a8b7d3ca8297ded1  libstdc++-v3/include/bits/postypes.h
  6e5715ba617a5f0246f059bf9a9a7309  libstdc++-v3/include/bits/predefined_ops.h
  c005f46850d3b5df0f57a8470f409ff8  libstdc++-v3/include/bits/ptr_traits.h
  c1d468a0ee886f88b70ef47855bb5a42  libstdc++-v3/include/bits/quoted_string.h
  9fecc04de83e464036e805070a7d633e  libstdc++-v3/include/bits/random.h
! 505537d4838d0c30064330a69a63fbae  libstdc++-v3/include/bits/random.tcc
  59fb2d3661995c86a3996a5d1af055af  libstdc++-v3/include/bits/range_access.h
  b320b8e354287c4e241d67f2b75eff17  libstdc++-v3/include/bits/ranges_algo.h
  6cb193dd721dcfc25fcaee8dfea5e5fe  libstdc++-v3/include/bits/ranges_algobase.h
! 0a9e74273ab544cc58ee11a1367150d2  libstdc++-v3/include/bits/ranges_base.h
! 2d8db914447b3a437d4c8f60de452767  libstdc++-v3/include/bits/ranges_cmp.h
  66406b0b277e3b6df527a052145d6990  libstdc++-v3/include/bits/ranges_uninitialized.h
  6b723b82f7c41537c2bba4766e5d0639  libstdc++-v3/include/bits/ranges_util.h
  a7e081671330fd3d6d40ef990c3a9db5  libstdc++-v3/include/bits/refwrap.h
*************** a7e081671330fd3d6d40ef990c3a9db5  libstd
*** 124451,124457 ****
  033b17331af0c0e562ea71bc3e994022  libstdc++-v3/include/bits/regex.tcc
  c65f82851918475e6746a168a05feebc  libstdc++-v3/include/bits/regex_automaton.h
  9cee0eb35fa466590222459a3d2f6822  libstdc++-v3/include/bits/regex_automaton.tcc
! 14e00d3a19a80946ac410cc1e3f9992a  libstdc++-v3/include/bits/regex_compiler.h
  f64f26ffe7d3c4e14c3fc9498ff3ac07  libstdc++-v3/include/bits/regex_compiler.tcc
  9f5e9a67270f2372eb2a6c027d50d2c3  libstdc++-v3/include/bits/regex_constants.h
  ae4e407ef9be06b744708e5b1513d43f  libstdc++-v3/include/bits/regex_error.h
--- 124878,124884 ----
  033b17331af0c0e562ea71bc3e994022  libstdc++-v3/include/bits/regex.tcc
  c65f82851918475e6746a168a05feebc  libstdc++-v3/include/bits/regex_automaton.h
  9cee0eb35fa466590222459a3d2f6822  libstdc++-v3/include/bits/regex_automaton.tcc
! 0aef1b434b146f4615b143df20bb7da0  libstdc++-v3/include/bits/regex_compiler.h
  f64f26ffe7d3c4e14c3fc9498ff3ac07  libstdc++-v3/include/bits/regex_compiler.tcc
  9f5e9a67270f2372eb2a6c027d50d2c3  libstdc++-v3/include/bits/regex_constants.h
  ae4e407ef9be06b744708e5b1513d43f  libstdc++-v3/include/bits/regex_error.h
*************** ffc7507a47e4f46142f0884585cdc4bb  libstd
*** 124464,124470 ****
  8e3a4aba69b57bbf801c0231fc5c257b  libstdc++-v3/include/bits/semaphore_base.h
  48fe8952d8a396bf02bfe3357d15cdeb  libstdc++-v3/include/bits/shared_ptr.h
  99a5df256c93ebb2a209690f3a69038a  libstdc++-v3/include/bits/shared_ptr_atomic.h
! 5db7072fca6e80f99c23359a988ac52d  libstdc++-v3/include/bits/shared_ptr_base.h
  3aa5cb4e1e4ba05b6b9f2a06325df1f7  libstdc++-v3/include/bits/slice_array.h
  8b95c6e1a7676878090a6c78eaed8631  libstdc++-v3/include/bits/specfun.h
  566c72d79d1a38ec59d61d0ea6387356  libstdc++-v3/include/bits/sstream.tcc
--- 124891,124897 ----
  8e3a4aba69b57bbf801c0231fc5c257b  libstdc++-v3/include/bits/semaphore_base.h
  48fe8952d8a396bf02bfe3357d15cdeb  libstdc++-v3/include/bits/shared_ptr.h
  99a5df256c93ebb2a209690f3a69038a  libstdc++-v3/include/bits/shared_ptr_atomic.h
! 106eba0b5cb0e3da977718fadadee076  libstdc++-v3/include/bits/shared_ptr_base.h
  3aa5cb4e1e4ba05b6b9f2a06325df1f7  libstdc++-v3/include/bits/slice_array.h
  8b95c6e1a7676878090a6c78eaed8631  libstdc++-v3/include/bits/specfun.h
  566c72d79d1a38ec59d61d0ea6387356  libstdc++-v3/include/bits/sstream.tcc
*************** cc051c68674baf68361ca6695a77f7e6  libstd
*** 124475,124483 ****
  907c7d176657af94b77491ce0f265e60  libstdc++-v3/include/bits/stl_algo.h
  95200a3c8308380b76dad0e566b0eb67  libstdc++-v3/include/bits/stl_algobase.h
  1c3aabbb99d2602f69668b80beb790ae  libstdc++-v3/include/bits/stl_bvector.h
! 6768219e2c3fc30ed6027137aafb710c  libstdc++-v3/include/bits/stl_construct.h
  1be5734c1db6c9de0fedf7fa1d5e102a  libstdc++-v3/include/bits/stl_deque.h
! ef1b6b4ad02b6462ce918aef51a943c0  libstdc++-v3/include/bits/stl_function.h
  75cf6d6cb1c1d44bd3a905a9544df4bc  libstdc++-v3/include/bits/stl_heap.h
  339b5390cddf138a3a7fc3f3cd6545cf  libstdc++-v3/include/bits/stl_iterator.h
  347505b7f4c350b156cf3d2bb3093b9e  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
--- 124902,124910 ----
  907c7d176657af94b77491ce0f265e60  libstdc++-v3/include/bits/stl_algo.h
  95200a3c8308380b76dad0e566b0eb67  libstdc++-v3/include/bits/stl_algobase.h
  1c3aabbb99d2602f69668b80beb790ae  libstdc++-v3/include/bits/stl_bvector.h
! 4b245adc74fa1b780288d189dc03fd95  libstdc++-v3/include/bits/stl_construct.h
  1be5734c1db6c9de0fedf7fa1d5e102a  libstdc++-v3/include/bits/stl_deque.h
! 294c786967cfe73187d740c03e84a825  libstdc++-v3/include/bits/stl_function.h
  75cf6d6cb1c1d44bd3a905a9544df4bc  libstdc++-v3/include/bits/stl_heap.h
  339b5390cddf138a3a7fc3f3cd6545cf  libstdc++-v3/include/bits/stl_iterator.h
  347505b7f4c350b156cf3d2bb3093b9e  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
*************** c6032f2d838adebc4bc1d0950adc8b46  libstd
*** 124487,124494 ****
  36271e3f20bc16f50c53aec1236b4482  libstdc++-v3/include/bits/stl_multimap.h
  f5e8c41953cb4347962897fc765d5458  libstdc++-v3/include/bits/stl_multiset.h
  669eaba4823456e8a1e6a9e197c42f3b  libstdc++-v3/include/bits/stl_numeric.h
! c785de8b61fb2bf94f8d6382c08f962b  libstdc++-v3/include/bits/stl_pair.h
! 8485f57bded7cb8f9b8b2e0fb2800e3a  libstdc++-v3/include/bits/stl_queue.h
  a3c6aa8aebb44198e86d15d59d6f59f8  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  3d31700ac326c163f7b606ab559287ed  libstdc++-v3/include/bits/stl_relops.h
  6bb1f0ee3fc6dd015f3f5a78e64f42ac  libstdc++-v3/include/bits/stl_set.h
--- 124914,124921 ----
  36271e3f20bc16f50c53aec1236b4482  libstdc++-v3/include/bits/stl_multimap.h
  f5e8c41953cb4347962897fc765d5458  libstdc++-v3/include/bits/stl_multiset.h
  669eaba4823456e8a1e6a9e197c42f3b  libstdc++-v3/include/bits/stl_numeric.h
! 374756112e988839d875892a66893a3f  libstdc++-v3/include/bits/stl_pair.h
! 726e81b14d0fa8940bdb370956ae84de  libstdc++-v3/include/bits/stl_queue.h
  a3c6aa8aebb44198e86d15d59d6f59f8  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  3d31700ac326c163f7b606ab559287ed  libstdc++-v3/include/bits/stl_relops.h
  6bb1f0ee3fc6dd015f3f5a78e64f42ac  libstdc++-v3/include/bits/stl_set.h
*************** dd78226efec632a1bf11d226184d7549  libstd
*** 124496,124502 ****
  a57c2eea3d91c8f1a29fa4b9ace4ea63  libstdc++-v3/include/bits/stl_tempbuf.h
  5cf28485e3f264d431272d51f07c5c04  libstdc++-v3/include/bits/stl_tree.h
  3edc9af91c97f67be21f622537b06558  libstdc++-v3/include/bits/stl_uninitialized.h
! 49e91c31cb1c8d8699400b543aa62a5b  libstdc++-v3/include/bits/stl_vector.h
  efd6795d1859818275b215954d81b08a  libstdc++-v3/include/bits/stream_iterator.h
  418d6c0a63477cd40da6d48bda8fdaa2  libstdc++-v3/include/bits/streambuf.tcc
  44762e12d54d406bf2cc6315533a8b09  libstdc++-v3/include/bits/streambuf_iterator.h
--- 124923,124929 ----
  a57c2eea3d91c8f1a29fa4b9ace4ea63  libstdc++-v3/include/bits/stl_tempbuf.h
  5cf28485e3f264d431272d51f07c5c04  libstdc++-v3/include/bits/stl_tree.h
  3edc9af91c97f67be21f622537b06558  libstdc++-v3/include/bits/stl_uninitialized.h
! 26ec29a60b502126921878d5144d621e  libstdc++-v3/include/bits/stl_vector.h
  efd6795d1859818275b215954d81b08a  libstdc++-v3/include/bits/stream_iterator.h
  418d6c0a63477cd40da6d48bda8fdaa2  libstdc++-v3/include/bits/streambuf.tcc
  44762e12d54d406bf2cc6315533a8b09  libstdc++-v3/include/bits/streambuf_iterator.h
*************** e44faa2816a5abc669c4063837761dc4  libstd
*** 124508,124514 ****
  599296af3dc0d5011fd39fb803fbccd2  libstdc++-v3/include/bits/unicode.h
  2a07c5fd938c277d16917fa79db295da  libstdc++-v3/include/bits/uniform_int_dist.h
  4c0ff2b76d8499d565fe166dc5782d62  libstdc++-v3/include/bits/unique_lock.h
! bf0cf7215202e6f8b50bf2bc32902f37  libstdc++-v3/include/bits/unique_ptr.h
  b9acb3112a876e3d1b56d44802b27c56  libstdc++-v3/include/bits/unordered_map.h
  ae02656017359d0b5f1cb3253d2058bb  libstdc++-v3/include/bits/unordered_set.h
  c4eaa17487280545ea73bc9386afcd4b  libstdc++-v3/include/bits/uses_allocator.h
--- 124935,124941 ----
  599296af3dc0d5011fd39fb803fbccd2  libstdc++-v3/include/bits/unicode.h
  2a07c5fd938c277d16917fa79db295da  libstdc++-v3/include/bits/uniform_int_dist.h
  4c0ff2b76d8499d565fe166dc5782d62  libstdc++-v3/include/bits/unique_lock.h
! 519fb186198f4055e56d3f86a3c1dee9  libstdc++-v3/include/bits/unique_ptr.h
  b9acb3112a876e3d1b56d44802b27c56  libstdc++-v3/include/bits/unordered_map.h
  ae02656017359d0b5f1cb3253d2058bb  libstdc++-v3/include/bits/unordered_set.h
  c4eaa17487280545ea73bc9386afcd4b  libstdc++-v3/include/bits/uses_allocator.h
*************** b051e1657f96388a3e7d5d0d670145e5  libstd
*** 124518,124526 ****
  82dcb52b808193fbc7db29b11ae3736e  libstdc++-v3/include/bits/valarray_array.h
  d2c6eb67d615d7d096f492b22eea4b6f  libstdc++-v3/include/bits/valarray_array.tcc
  296f16b1a6f6cf57ecd784ec331fc19e  libstdc++-v3/include/bits/valarray_before.h
! 7bbbc93ff2717eacbdebe7603b9cd709  libstdc++-v3/include/bits/vector.tcc
! 432f9805e57f028de277d620c0bd955c  libstdc++-v3/include/bits/version.def
! 79dffe9ba62dab2f07ab10564feb1c43  libstdc++-v3/include/bits/version.h
  f6488e249fd41122a0aa656a7b88f669  libstdc++-v3/include/bits/version.tpl
  23670bf0ed7006b56169654e79313316  libstdc++-v3/include/c/cassert
  54f4af5417eacea0760d6a9554d593bc  libstdc++-v3/include/c/cctype
--- 124945,124953 ----
  82dcb52b808193fbc7db29b11ae3736e  libstdc++-v3/include/bits/valarray_array.h
  d2c6eb67d615d7d096f492b22eea4b6f  libstdc++-v3/include/bits/valarray_array.tcc
  296f16b1a6f6cf57ecd784ec331fc19e  libstdc++-v3/include/bits/valarray_before.h
! 02d959bb068e1a0eb79cc9802e39be3a  libstdc++-v3/include/bits/vector.tcc
! 9109cb1f409b48f58c30ccbacbe28d36  libstdc++-v3/include/bits/version.def
! 05c691b01b8d0ea8722d10398e1f99e9  libstdc++-v3/include/bits/version.h
  f6488e249fd41122a0aa656a7b88f669  libstdc++-v3/include/bits/version.tpl
  23670bf0ed7006b56169654e79313316  libstdc++-v3/include/c/cassert
  54f4af5417eacea0760d6a9554d593bc  libstdc++-v3/include/c/cctype
*************** abd11dd3947209f696f94d932cc332bd  libstd
*** 124556,124562 ****
--- 124983,124991 ----
  072501af1fb92f6c61d905a889e23d55  libstdc++-v3/include/c_compatibility/signal.h
  3ae16230a91e5f8f915c4572dd2de92d  libstdc++-v3/include/c_compatibility/stdarg.h
  a4ef565ae0e9463b4f7a9188f263b140  libstdc++-v3/include/c_compatibility/stdatomic.h
+ c2f557a28c1227cff940c6918cba6832  libstdc++-v3/include/c_compatibility/stdbit.h
  b7d1a1feade359b17536b80612f1a5ad  libstdc++-v3/include/c_compatibility/stdbool.h
+ 20542d5b060306ef86fcc79ec742c748  libstdc++-v3/include/c_compatibility/stdckdint.h
  4779b1da6436870feccffd045fb554ce  libstdc++-v3/include/c_compatibility/stddef.h
  7242a83084ab38257ea91cd3ff50b5af  libstdc++-v3/include/c_compatibility/stdint.h
  427dd11a3c37411d439ac8c467768e3c  libstdc++-v3/include/c_compatibility/stdio.h
*************** c80d9a347ff1313df6f1fdcd6738adee  libstd
*** 124577,124583 ****
  cab8280692b763d2480d948d43977c57  libstdc++-v3/include/c_global/ciso646
  f010c5f8d1a591217c31fc2e8c98364a  libstdc++-v3/include/c_global/climits
  11ae858532969bfcfdbf40b0ea36cdbd  libstdc++-v3/include/c_global/clocale
! ea092e05f18094300888b3a746f04ea3  libstdc++-v3/include/c_global/cmath
  781951ffe444c3ebf3292bdd1385308d  libstdc++-v3/include/c_global/csetjmp
  d96a9a65818e7398cbd8731a87c642c8  libstdc++-v3/include/c_global/csignal
  48b7524df7011e4d38f9ee556a9cc265  libstdc++-v3/include/c_global/cstdalign
--- 125006,125012 ----
  cab8280692b763d2480d948d43977c57  libstdc++-v3/include/c_global/ciso646
  f010c5f8d1a591217c31fc2e8c98364a  libstdc++-v3/include/c_global/climits
  11ae858532969bfcfdbf40b0ea36cdbd  libstdc++-v3/include/c_global/clocale
! f417ee8e13e78e53a9dcb3b9887e3750  libstdc++-v3/include/c_global/cmath
  781951ffe444c3ebf3292bdd1385308d  libstdc++-v3/include/c_global/csetjmp
  d96a9a65818e7398cbd8731a87c642c8  libstdc++-v3/include/c_global/csignal
  48b7524df7011e4d38f9ee556a9cc265  libstdc++-v3/include/c_global/cstdalign
*************** fb72314aa6a3a9bd92efa9e03a1dddef  libstd
*** 124974,124980 ****
  f56df8d1708688a3d7e2478c6057aac2  libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
  810a127158dc856366b1bb42a3c18fe3  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
  18277d3309cc02eaf7fed681cf6b4c43  libstdc++-v3/include/ext/pod_char_traits.h
! 280f71071cd0dc43683493adcd0e2b76  libstdc++-v3/include/ext/pointer.h
  09401336a3b51a0c254245e1540e3fad  libstdc++-v3/include/ext/pool_allocator.h
  34f82f4e89943de068471ad042ca5eee  libstdc++-v3/include/ext/random
  e424c2c65ced2ab29333a48fd89af9ca  libstdc++-v3/include/ext/random.tcc
--- 125403,125409 ----
  f56df8d1708688a3d7e2478c6057aac2  libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
  810a127158dc856366b1bb42a3c18fe3  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
  18277d3309cc02eaf7fed681cf6b4c43  libstdc++-v3/include/ext/pod_char_traits.h
! 177fb3287afaa57d7320a4e1a1a48f24  libstdc++-v3/include/ext/pointer.h
  09401336a3b51a0c254245e1540e3fad  libstdc++-v3/include/ext/pool_allocator.h
  34f82f4e89943de068471ad042ca5eee  libstdc++-v3/include/ext/random
  e424c2c65ced2ab29333a48fd89af9ca  libstdc++-v3/include/ext/random.tcc
*************** af620567c2dac8528b96639948651a40  libstd
*** 125037,125043 ****
  5428e092dfc583417193d4bf8c693fd4  libstdc++-v3/include/parallel/types.h
  d7c4ef5d00868daddbb1475ae32af911  libstdc++-v3/include/parallel/unique_copy.h
  08adac66ffceae82ac2661b0241db99c  libstdc++-v3/include/parallel/workstealing.h
! 874daab6f0a0caff5ae471708e7d7f6d  libstdc++-v3/include/precompiled/extc++.h
  a560921b58eff98f384a4419173da8ff  libstdc++-v3/include/precompiled/stdc++.h
  8bc241eda992e14e9d417167e4a74289  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
--- 125466,125472 ----
  5428e092dfc583417193d4bf8c693fd4  libstdc++-v3/include/parallel/types.h
  d7c4ef5d00868daddbb1475ae32af911  libstdc++-v3/include/parallel/unique_copy.h
  08adac66ffceae82ac2661b0241db99c  libstdc++-v3/include/parallel/workstealing.h
! eb7a07cb59cf0f2c8403c1f196b40280  libstdc++-v3/include/precompiled/extc++.h
  a560921b58eff98f384a4419173da8ff  libstdc++-v3/include/precompiled/stdc++.h
  8bc241eda992e14e9d417167e4a74289  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
*************** f9819c3fbab884d0ff4d0150023c3826  libstd
*** 125057,125087 ****
  132bbb9d90975f7f11e2ba4b77bc3bbf  libstdc++-v3/include/pstl/numeric_impl.h
  531b6552c2b0ded549ed9bc9b03bebf4  libstdc++-v3/include/pstl/parallel_backend.h
  c6ea5607259b8e63bb887db39136b942  libstdc++-v3/include/pstl/parallel_backend_serial.h
! f440b4cc9ed25dc734c39310ac196140  libstdc++-v3/include/pstl/parallel_backend_tbb.h
  e128e525f970f3948feec2f4750919a8  libstdc++-v3/include/pstl/parallel_backend_utils.h
  688f2289e52048ec70461174eadd2efe  libstdc++-v3/include/pstl/parallel_impl.h
  fc443edc98096342d5fc5be5a9455d4b  libstdc++-v3/include/pstl/pstl_config.h
  429c7831b6f1369c536eaa83e27cd111  libstdc++-v3/include/pstl/unseq_backend_simd.h
  6e7da3aed3b413aec47ea7457e6ea726  libstdc++-v3/include/pstl/utils.h
  ad2a7e573743a8dab1111b977e4a80fd  libstdc++-v3/include/std/algorithm
! eed1f4acd784dbf7153d5dc2b56e2c4d  libstdc++-v3/include/std/any
  aab042909edbf7113490e15fccf5b560  libstdc++-v3/include/std/array
! 40ce4527ff101adaa1eb3e248f7e7790  libstdc++-v3/include/std/atomic
  01cf19d843a4461de3522fe15a305313  libstdc++-v3/include/std/barrier
  b6af1bbc3368d9c5b5a8c7182f8272ec  libstdc++-v3/include/std/bit
  6c83353fc8d46581132ab76a4ff6552a  libstdc++-v3/include/std/bitset
  ac89056b371085656f9349b818aa8656  libstdc++-v3/include/std/charconv
! c858ae1b237dd656e75aa2b8f7c38210  libstdc++-v3/include/std/chrono
  e43c8d137c20c10ac051954a254c532c  libstdc++-v3/include/std/codecvt
  650adbddee3c473863f9d814c33e8ea3  libstdc++-v3/include/std/complex
! 029c042214e60b24aae61965e2ba2f9a  libstdc++-v3/include/std/concepts
  4c3e3b91f288c0a91fdf89dca455559c  libstdc++-v3/include/std/condition_variable
  249c5b284bdb3604f610bc79d1337856  libstdc++-v3/include/std/coroutine
  fda97f7d0f416dde1ab9178ea99e5455  libstdc++-v3/include/std/deque
  ae64ad244c17b2990bf7800baac14798  libstdc++-v3/include/std/execution
! 9bfd85bc53277978862f2c4840fe93fa  libstdc++-v3/include/std/expected
  cff63c5eb4adb15a28919e1ffaaaa7be  libstdc++-v3/include/std/filesystem
! c2269b240ccc4b7a14638a3792b9cef3  libstdc++-v3/include/std/format
  e529270e2d060c63cc3ae4dd24c06e2a  libstdc++-v3/include/std/forward_list
  4183b8200ed6ff28ecd64696007af811  libstdc++-v3/include/std/fstream
  978a77434b110187a7e9c7b56843ce4b  libstdc++-v3/include/std/functional
--- 125486,125516 ----
  132bbb9d90975f7f11e2ba4b77bc3bbf  libstdc++-v3/include/pstl/numeric_impl.h
  531b6552c2b0ded549ed9bc9b03bebf4  libstdc++-v3/include/pstl/parallel_backend.h
  c6ea5607259b8e63bb887db39136b942  libstdc++-v3/include/pstl/parallel_backend_serial.h
! 2d644ccc23c0dc8e402d7080e69ef350  libstdc++-v3/include/pstl/parallel_backend_tbb.h
  e128e525f970f3948feec2f4750919a8  libstdc++-v3/include/pstl/parallel_backend_utils.h
  688f2289e52048ec70461174eadd2efe  libstdc++-v3/include/pstl/parallel_impl.h
  fc443edc98096342d5fc5be5a9455d4b  libstdc++-v3/include/pstl/pstl_config.h
  429c7831b6f1369c536eaa83e27cd111  libstdc++-v3/include/pstl/unseq_backend_simd.h
  6e7da3aed3b413aec47ea7457e6ea726  libstdc++-v3/include/pstl/utils.h
  ad2a7e573743a8dab1111b977e4a80fd  libstdc++-v3/include/std/algorithm
! 873395466399e2601facce0f1d3514df  libstdc++-v3/include/std/any
  aab042909edbf7113490e15fccf5b560  libstdc++-v3/include/std/array
! d62b6536665a7c5121695fb1c49c5eef  libstdc++-v3/include/std/atomic
  01cf19d843a4461de3522fe15a305313  libstdc++-v3/include/std/barrier
  b6af1bbc3368d9c5b5a8c7182f8272ec  libstdc++-v3/include/std/bit
  6c83353fc8d46581132ab76a4ff6552a  libstdc++-v3/include/std/bitset
  ac89056b371085656f9349b818aa8656  libstdc++-v3/include/std/charconv
! 7e8bb6bce5ceb37682d2e18968d54f92  libstdc++-v3/include/std/chrono
  e43c8d137c20c10ac051954a254c532c  libstdc++-v3/include/std/codecvt
  650adbddee3c473863f9d814c33e8ea3  libstdc++-v3/include/std/complex
! c63a0eb6ee6b9b0e85f677d7da244361  libstdc++-v3/include/std/concepts
  4c3e3b91f288c0a91fdf89dca455559c  libstdc++-v3/include/std/condition_variable
  249c5b284bdb3604f610bc79d1337856  libstdc++-v3/include/std/coroutine
  fda97f7d0f416dde1ab9178ea99e5455  libstdc++-v3/include/std/deque
  ae64ad244c17b2990bf7800baac14798  libstdc++-v3/include/std/execution
! d5e48180174990fff2552cd696c9e6e1  libstdc++-v3/include/std/expected
  cff63c5eb4adb15a28919e1ffaaaa7be  libstdc++-v3/include/std/filesystem
! 8a3b79b607b896a3c97a91f3071e063c  libstdc++-v3/include/std/format
  e529270e2d060c63cc3ae4dd24c06e2a  libstdc++-v3/include/std/forward_list
  4183b8200ed6ff28ecd64696007af811  libstdc++-v3/include/std/fstream
  978a77434b110187a7e9c7b56843ce4b  libstdc++-v3/include/std/functional
*************** b0319ecb776f20bfc1b81173461f688d  libstd
*** 125094,125106 ****
  9b56c5b90a017cc2a126551287c6e7d0  libstdc++-v3/include/std/istream
  ab071c7c019b51dde910e875fd3981aa  libstdc++-v3/include/std/iterator
  de9d16c58c0525a3af601dd8a558357a  libstdc++-v3/include/std/latch
! 99a421f78b6fc19e7a8f953c32ab3ee9  libstdc++-v3/include/std/limits
  d2516f1592a95141d667a726c219a5b8  libstdc++-v3/include/std/list
  49f6e0e6000077ee2b3f2633f47e4925  libstdc++-v3/include/std/locale
  2d8375c801ecdd87116fe153d972e927  libstdc++-v3/include/std/map
  7d840f2456c0d2a16866065760922b47  libstdc++-v3/include/std/memory
  b95756c8b75f0ba0696fe0d53e25c2c8  libstdc++-v3/include/std/memory_resource
! b00cd66a2e29d16a92d1bba2dd0ac61a  libstdc++-v3/include/std/mutex
  b162db38fed9250df89cd38bf8a9f2a9  libstdc++-v3/include/std/numbers
  bdc0f4ffef7dc0e791075f89161516f2  libstdc++-v3/include/std/numeric
  d7b2e090e45e539512d63eec607efb27  libstdc++-v3/include/std/optional
--- 125523,125535 ----
  9b56c5b90a017cc2a126551287c6e7d0  libstdc++-v3/include/std/istream
  ab071c7c019b51dde910e875fd3981aa  libstdc++-v3/include/std/iterator
  de9d16c58c0525a3af601dd8a558357a  libstdc++-v3/include/std/latch
! 142818adeaa59c1cd072bb3ba5e9666b  libstdc++-v3/include/std/limits
  d2516f1592a95141d667a726c219a5b8  libstdc++-v3/include/std/list
  49f6e0e6000077ee2b3f2633f47e4925  libstdc++-v3/include/std/locale
  2d8375c801ecdd87116fe153d972e927  libstdc++-v3/include/std/map
  7d840f2456c0d2a16866065760922b47  libstdc++-v3/include/std/memory
  b95756c8b75f0ba0696fe0d53e25c2c8  libstdc++-v3/include/std/memory_resource
! 415a88ccbda1ed2a00dfb8d6bf021232  libstdc++-v3/include/std/mutex
  b162db38fed9250df89cd38bf8a9f2a9  libstdc++-v3/include/std/numbers
  bdc0f4ffef7dc0e791075f89161516f2  libstdc++-v3/include/std/numeric
  d7b2e090e45e539512d63eec607efb27  libstdc++-v3/include/std/optional
*************** dcfcd93b1470ad7b25a150c5ab816dc8  libstd
*** 125118,125137 ****
  dfaa6ea502378573b76189598bfc35a9  libstdc++-v3/include/std/source_location
  a4bf4110ab3c9203418e54ab2fad45eb  libstdc++-v3/include/std/span
  150494e3c4d2c69af905516415888605  libstdc++-v3/include/std/spanstream
! f099bc998c2758cb164c891167ce8c5d  libstdc++-v3/include/std/sstream
  b8320e4989287bb5b75ee2f3a6a9cc1c  libstdc++-v3/include/std/stack
  e2180104cb451cf0f541fa955a037698  libstdc++-v3/include/std/stacktrace
  a0df6d15b0b61f28637877eac9b32416  libstdc++-v3/include/std/stdexcept
  61ee2f87017fb12a433b912711616843  libstdc++-v3/include/std/stdfloat
  406d5b03cbe8429f45aec26c93455b4d  libstdc++-v3/include/std/stop_token
! a638d14f025bfe69de610cd67bd7be1c  libstdc++-v3/include/std/streambuf
  e656fe3f99236050e70b771efe8cdbb3  libstdc++-v3/include/std/string
! f057f3e7d23b182c23975269002a6874  libstdc++-v3/include/std/string_view
  9320934590547a708c259f9365f20d69  libstdc++-v3/include/std/syncstream
  ea3475b6634d2e3d92998c1122691d82  libstdc++-v3/include/std/system_error
  d5da6c002707c25c3a0b22aa5845de07  libstdc++-v3/include/std/text_encoding
  4d1e7ccb1f7585f38eaa965dd767a630  libstdc++-v3/include/std/thread
! 785909b510b6bb356faba5abd45a6593  libstdc++-v3/include/std/tuple
  1af43cc9821b85474ef33eaedfb68531  libstdc++-v3/include/std/type_traits
  91fe9927d579813b014eed3896aafbcd  libstdc++-v3/include/std/typeindex
  c87dc9131494e6b9211a14f41b1817d9  libstdc++-v3/include/std/unordered_map
--- 125547,125566 ----
  dfaa6ea502378573b76189598bfc35a9  libstdc++-v3/include/std/source_location
  a4bf4110ab3c9203418e54ab2fad45eb  libstdc++-v3/include/std/span
  150494e3c4d2c69af905516415888605  libstdc++-v3/include/std/spanstream
! 4dd158ea6d8f1f0e80431f6a8dc90f32  libstdc++-v3/include/std/sstream
  b8320e4989287bb5b75ee2f3a6a9cc1c  libstdc++-v3/include/std/stack
  e2180104cb451cf0f541fa955a037698  libstdc++-v3/include/std/stacktrace
  a0df6d15b0b61f28637877eac9b32416  libstdc++-v3/include/std/stdexcept
  61ee2f87017fb12a433b912711616843  libstdc++-v3/include/std/stdfloat
  406d5b03cbe8429f45aec26c93455b4d  libstdc++-v3/include/std/stop_token
! fe376b3de86a82fab8f936190ff1496d  libstdc++-v3/include/std/streambuf
  e656fe3f99236050e70b771efe8cdbb3  libstdc++-v3/include/std/string
! 40afcc5770400c2aa183a2e3a0c244a9  libstdc++-v3/include/std/string_view
  9320934590547a708c259f9365f20d69  libstdc++-v3/include/std/syncstream
  ea3475b6634d2e3d92998c1122691d82  libstdc++-v3/include/std/system_error
  d5da6c002707c25c3a0b22aa5845de07  libstdc++-v3/include/std/text_encoding
  4d1e7ccb1f7585f38eaa965dd767a630  libstdc++-v3/include/std/thread
! bcbfbf2cd32183607c57aaf14b1f52b0  libstdc++-v3/include/std/tuple
  1af43cc9821b85474ef33eaedfb68531  libstdc++-v3/include/std/type_traits
  91fe9927d579813b014eed3896aafbcd  libstdc++-v3/include/std/typeindex
  c87dc9131494e6b9211a14f41b1817d9  libstdc++-v3/include/std/unordered_map
*************** a4bfe8e7b7e1fcdb233d250f34d48b3c  libstd
*** 125221,125227 ****
  99bee300f6b2032bc884d190f8793068  libstdc++-v3/libsupc++/bad_cast.cc
  b5431c45ca63a8c33a822270b63ef91a  libstdc++-v3/libsupc++/bad_typeid.cc
  e4fce400a30b3c373310af56ffda6bb9  libstdc++-v3/libsupc++/class_type_info.cc
! 09e8468a6af8bd9856b984eaf6567691  libstdc++-v3/libsupc++/compare
  3471d9112038dca877667a79bd8cee85  libstdc++-v3/libsupc++/cxxabi.h
  9bcec4f6a2e90107b8caa460dc1787f0  libstdc++-v3/libsupc++/cxxabi_forced.h
  3e0c1597f198c4ce7e4a75fbf6b6186d  libstdc++-v3/libsupc++/cxxabi_init_exception.h
--- 125650,125656 ----
  99bee300f6b2032bc884d190f8793068  libstdc++-v3/libsupc++/bad_cast.cc
  b5431c45ca63a8c33a822270b63ef91a  libstdc++-v3/libsupc++/bad_typeid.cc
  e4fce400a30b3c373310af56ffda6bb9  libstdc++-v3/libsupc++/class_type_info.cc
! 7f3f124a2793c13e237a5fceec71184a  libstdc++-v3/libsupc++/compare
  3471d9112038dca877667a79bd8cee85  libstdc++-v3/libsupc++/cxxabi.h
  9bcec4f6a2e90107b8caa460dc1787f0  libstdc++-v3/libsupc++/cxxabi_forced.h
  3e0c1597f198c4ce7e4a75fbf6b6186d  libstdc++-v3/libsupc++/cxxabi_init_exception.h
*************** c94ad903b4e7baf364cdc3ef5e9f58a8  libstd
*** 125307,125313 ****
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
  9873f3513a8a40453d41552eedca2d27  libstdc++-v3/python/libstdcxx/v6/__init__.py
  2d0ea232c01eeaba30585cc7f3107d31  libstdc++-v3/python/libstdcxx/v6/printers.py
! b5a48bab2103d59dab15b85159d77520  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  a4c1d51bba293cee2307fc7f9dd090f7  libstdc++-v3/scripts/check_performance
  128d0fbc24e1d43d9ff93d14bd521aa6  libstdc++-v3/scripts/check_simd
--- 125736,125742 ----
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
  9873f3513a8a40453d41552eedca2d27  libstdc++-v3/python/libstdcxx/v6/__init__.py
  2d0ea232c01eeaba30585cc7f3107d31  libstdc++-v3/python/libstdcxx/v6/printers.py
! 0f9ff331bf0b5a08a262da59733bc549  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  a4c1d51bba293cee2307fc7f9dd090f7  libstdc++-v3/scripts/check_performance
  128d0fbc24e1d43d9ff93d14bd521aa6  libstdc++-v3/scripts/check_simd
*************** ff4c3259e7fb7e81a673dc2938ec81ea  libstd
*** 125388,125394 ****
  e4c0cb19929c76a2045e33511d984d87  libstdc++-v3/src/c++11/streambuf-inst.cc
  bd1158111c9965fec151a80c651f1c18  libstdc++-v3/src/c++11/string-inst.cc
  0ae2559f93b38cc2e8036ba74c58989a  libstdc++-v3/src/c++11/string-io-inst.cc
! 4132b83e77af1e0ae43a3dd197254060  libstdc++-v3/src/c++11/system_error.cc
  58d682cf374e162a32211794bfae1d2d  libstdc++-v3/src/c++11/thread.cc
  7d28667c7249373f11cc00a0e6eee313  libstdc++-v3/src/c++11/wlocale-inst.cc
  d118e7a266b9fcb368d1de732018c51c  libstdc++-v3/src/c++11/wstring-inst.cc
--- 125817,125823 ----
  e4c0cb19929c76a2045e33511d984d87  libstdc++-v3/src/c++11/streambuf-inst.cc
  bd1158111c9965fec151a80c651f1c18  libstdc++-v3/src/c++11/string-inst.cc
  0ae2559f93b38cc2e8036ba74c58989a  libstdc++-v3/src/c++11/string-io-inst.cc
! 6173294cde6ced9a7fd3b53ad7203318  libstdc++-v3/src/c++11/system_error.cc
  58d682cf374e162a32211794bfae1d2d  libstdc++-v3/src/c++11/thread.cc
  7d28667c7249373f11cc00a0e6eee313  libstdc++-v3/src/c++11/wlocale-inst.cc
  d118e7a266b9fcb368d1de732018c51c  libstdc++-v3/src/c++11/wstring-inst.cc
*************** eb207810586ea846576007018322c6e1  libstd
*** 125408,125415 ****
  6310bd84805ba8da0ba88ee4704b7289  libstdc++-v3/src/c++17/floating_to_chars.cc
  592a23526d9d99eb397853d1e41dc3af  libstdc++-v3/src/c++17/fs_dir.cc
  f2cf236e640646a50b7abadbdae9a13b  libstdc++-v3/src/c++17/fs_ops.cc
! 4caf7cdad3b78037fc52bfcf6fcb19b7  libstdc++-v3/src/c++17/fs_path.cc
! e7ee94a1031a3b8d2c9f0fabc8511938  libstdc++-v3/src/c++17/memory_resource.cc
  7d6a7293171f60a9406995fb4ddab5bd  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
  e225c39ccc4c6adc72a744687977d59d  libstdc++-v3/src/c++17/ryu/MERGE
--- 125837,125844 ----
  6310bd84805ba8da0ba88ee4704b7289  libstdc++-v3/src/c++17/floating_to_chars.cc
  592a23526d9d99eb397853d1e41dc3af  libstdc++-v3/src/c++17/fs_dir.cc
  f2cf236e640646a50b7abadbdae9a13b  libstdc++-v3/src/c++17/fs_ops.cc
! d6b8a7f042b82185ff2f6dbbd00ea3b5  libstdc++-v3/src/c++17/fs_path.cc
! 61f48e97e9a36854804ce85d6f144e1d  libstdc++-v3/src/c++17/memory_resource.cc
  7d6a7293171f60a9406995fb4ddab5bd  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
  e225c39ccc4c6adc72a744687977d59d  libstdc++-v3/src/c++17/ryu/MERGE
*************** edfaeb1bc759bccb53b3d9624f21c2be  libstd
*** 125430,125437 ****
  d3813c41a1a392d3bd3fc819324240d4  libstdc++-v3/src/c++20/Makefile.am
  1a78ce3875810d2fbde4c0259e6da49c  libstdc++-v3/src/c++20/Makefile.in
  bc750f6d75cc3d48552863c2403f8857  libstdc++-v3/src/c++20/sstream-inst.cc
! e9e89f4578e59d252e4caaf0b63d6dfb  libstdc++-v3/src/c++20/tzdata.zi
! fff54701f9e561f92c920438dd86fd45  libstdc++-v3/src/c++20/tzdb.cc
  5cda0f038c8a42d9ac9d35d23cac6c57  libstdc++-v3/src/c++20/tzdb_globals.h
  b65cec48a384351b09d3d7d12ee37660  libstdc++-v3/src/c++23/Makefile.am
  5405bc5d3053e91ab5f6209a6e20a377  libstdc++-v3/src/c++23/Makefile.in
--- 125859,125866 ----
  d3813c41a1a392d3bd3fc819324240d4  libstdc++-v3/src/c++20/Makefile.am
  1a78ce3875810d2fbde4c0259e6da49c  libstdc++-v3/src/c++20/Makefile.in
  bc750f6d75cc3d48552863c2403f8857  libstdc++-v3/src/c++20/sstream-inst.cc
! 0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
! 59c47c266be6acb340eebc5d5a52ea78  libstdc++-v3/src/c++20/tzdb.cc
  5cda0f038c8a42d9ac9d35d23cac6c57  libstdc++-v3/src/c++20/tzdb_globals.h
  b65cec48a384351b09d3d7d12ee37660  libstdc++-v3/src/c++23/Makefile.am
  5405bc5d3053e91ab5f6209a6e20a377  libstdc++-v3/src/c++23/Makefile.in
*************** e76a68102b94e67b78e5373bb89fba15  libstd
*** 125491,125497 ****
  54ec2d5b20f9b937e2229987d22c5721  libstdc++-v3/src/filesystem/cow-path.cc
  c2201a7e547eb182262da97e2030eca2  libstdc++-v3/src/filesystem/dir-common.h
  341e56d4ba937b489ee52675959f94a5  libstdc++-v3/src/filesystem/dir.cc
! f3e6c6a14976534604a5e5999b6d4e60  libstdc++-v3/src/filesystem/ops-common.h
  31201d2814b587e016161cc37c048c05  libstdc++-v3/src/filesystem/ops.cc
  a54d16a61a8c25de06cdb983ca85e293  libstdc++-v3/src/filesystem/path.cc
  ad6b84b402cc8df4fe7a1e81235f3ea4  libstdc++-v3/src/libbacktrace/Makefile.am
--- 125920,125926 ----
  54ec2d5b20f9b937e2229987d22c5721  libstdc++-v3/src/filesystem/cow-path.cc
  c2201a7e547eb182262da97e2030eca2  libstdc++-v3/src/filesystem/dir-common.h
  341e56d4ba937b489ee52675959f94a5  libstdc++-v3/src/filesystem/dir.cc
! f8e49163f78596ff0ee236eee21299d5  libstdc++-v3/src/filesystem/ops-common.h
  31201d2814b587e016161cc37c048c05  libstdc++-v3/src/filesystem/ops.cc
  a54d16a61a8c25de06cdb983ca85e293  libstdc++-v3/src/filesystem/path.cc
  ad6b84b402cc8df4fe7a1e81235f3ea4  libstdc++-v3/src/libbacktrace/Makefile.am
*************** ad7d8ce6072a5a6ebe5a27824b57cb45  libstd
*** 125500,125506 ****
  24de78ee16ffbf8b1588259e274f9c00  libstdc++-v3/src/libbacktrace/backtrace-supported.h.in
  d80381bdd74336b121a4f087efc21dbb  libstdc++-v3/src/libbacktrace/config.h.in
  b2c964e43bfef1597e6dd0dd2f806fb3  libstdc++-v3/src/shared/hashtable-aux.cc
! 7773a6010acf0449d4010c420cf491cb  libstdc++-v3/testsuite/17_intro/badnames.cc
  681efa6b4fde6fc5d4dfaf426f7ef5ef  libstdc++-v3/testsuite/17_intro/freestanding.cc
  d5df5ddc3b7c5dba2e687798eaa28551  libstdc++-v3/testsuite/17_intro/headers/c++1998/103650.cc
  be3b9af9ac9518b325b136215b688753  libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc
--- 125929,125935 ----
  24de78ee16ffbf8b1588259e274f9c00  libstdc++-v3/src/libbacktrace/backtrace-supported.h.in
  d80381bdd74336b121a4f087efc21dbb  libstdc++-v3/src/libbacktrace/config.h.in
  b2c964e43bfef1597e6dd0dd2f806fb3  libstdc++-v3/src/shared/hashtable-aux.cc
! 96f96ae4521abc72c37e61cda78b55ff  libstdc++-v3/testsuite/17_intro/badnames.cc
  681efa6b4fde6fc5d4dfaf426f7ef5ef  libstdc++-v3/testsuite/17_intro/freestanding.cc
  d5df5ddc3b7c5dba2e687798eaa28551  libstdc++-v3/testsuite/17_intro/headers/c++1998/103650.cc
  be3b9af9ac9518b325b136215b688753  libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc
*************** b8a53b2b8da32d102d69cbedea3d2216  libstd
*** 125556,125562 ****
  5443708c0d6c9abdb53500f0fd4db206  libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc
  9da657dc332cf768b764e1784ec584c1  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc
  7654b88e3e7e4269beb1402cdeed0551  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc
! c53d8a2ec1fc797339120fc4ad8ec9e9  libstdc++-v3/testsuite/17_intro/names.cc
  047ad714f0a1ac010ab86a084dfbeee7  libstdc++-v3/testsuite/17_intro/names_pstl.cc
  441838fc5a4a7a22a784014872e61926  libstdc++-v3/testsuite/17_intro/no_library_allocation.cc
  aa39cebbb59168b36715cd6de8b65935  libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
--- 125985,125991 ----
  5443708c0d6c9abdb53500f0fd4db206  libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc
  9da657dc332cf768b764e1784ec584c1  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc
  7654b88e3e7e4269beb1402cdeed0551  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc
! 90b297912d73a4264a67b7700cc26199  libstdc++-v3/testsuite/17_intro/names.cc
  047ad714f0a1ac010ab86a084dfbeee7  libstdc++-v3/testsuite/17_intro/names_pstl.cc
  441838fc5a4a7a22a784014872e61926  libstdc++-v3/testsuite/17_intro/no_library_allocation.cc
  aa39cebbb59168b36715cd6de8b65935  libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
*************** e4f03d5dfa57d5a8255b0c8bdce62fb6  libstd
*** 125682,125688 ****
  fc0331b89589bcce1bc38b869d815949  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
  8f60ad51c166f69fbdabbc0b8c7dd6ff  libstdc++-v3/testsuite/18_support/new_handler.cc
  03fdd09683bed8c302f360f37cd7a031  libstdc++-v3/testsuite/18_support/new_nothrow.cc
! 49e7685f2fc05cdd1dd5d2a404340058  libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
  e9bcf06133e787fb3b5f8ccd563a2205  libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc
  384ab89ec86da4c7dc85e5d057ed494e  libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
  1addfb90d0a3b060232a565d5cc95488  libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
--- 126111,126117 ----
  fc0331b89589bcce1bc38b869d815949  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
  8f60ad51c166f69fbdabbc0b8c7dd6ff  libstdc++-v3/testsuite/18_support/new_handler.cc
  03fdd09683bed8c302f360f37cd7a031  libstdc++-v3/testsuite/18_support/new_nothrow.cc
! 457817958c82b8b3f75ec9e7b60e2627  libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
  e9bcf06133e787fb3b5f8ccd563a2205  libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc
  384ab89ec86da4c7dc85e5d057ed494e  libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
  1addfb90d0a3b060232a565d5cc95488  libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
*************** eee24201b9bca26bf17bf49d625c488d  libstd
*** 125732,125738 ****
  34f9c0495bb1c5ae9006c62898cf569e  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/less.cc
  d594431ab14b462d038e2d55126aa9ea  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/not_equal.cc
  7f0065bf8c56ee048f898bb64109ad4f  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/three_way.cc
! ae1b5531d326071167608e61bcaa41f8  libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc
  8288f173799e1b689774eec2839094e4  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc
  33fe1ee105826a40559f7d027c4e6264  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
  81f9725b7658563bbe88b3ba6c3c1852  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/lwg3629.cc
--- 126161,126167 ----
  34f9c0495bb1c5ae9006c62898cf569e  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/less.cc
  d594431ab14b462d038e2d55126aa9ea  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/not_equal.cc
  7f0065bf8c56ee048f898bb64109ad4f  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/three_way.cc
! ae891768ad9e2ea227fc492d8a9e8c1c  libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc
  8288f173799e1b689774eec2839094e4  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc
  33fe1ee105826a40559f7d027c4e6264  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
  81f9725b7658563bbe88b3ba6c3c1852  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/lwg3629.cc
*************** e2f76b5206e29df12dc615016b3ce75f  libstd
*** 125926,125932 ****
  a9df38b43b35b5e6e710883eaec01151  libstdc++-v3/testsuite/20_util/bind/cv_quals.cc
  159208c87f95c04af74e7011324d327c  libstdc++-v3/testsuite/20_util/bind/cv_quals_2.cc
  11113e2f480d7394c770e9a09ee0d46f  libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc
! ac8e93d4882e1ff9282d9a8a2b291031  libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc
  2ecc665ef3b257e9162bbc21854e3946  libstdc++-v3/testsuite/20_util/bind/is_placeholder_v.cc
  5288d661707245b5f49b1d182c5efc3b  libstdc++-v3/testsuite/20_util/bind/move.cc
  be3a9da6ea678098c6798ffbca60906b  libstdc++-v3/testsuite/20_util/bind/nested.cc
--- 126355,126361 ----
  a9df38b43b35b5e6e710883eaec01151  libstdc++-v3/testsuite/20_util/bind/cv_quals.cc
  159208c87f95c04af74e7011324d327c  libstdc++-v3/testsuite/20_util/bind/cv_quals_2.cc
  11113e2f480d7394c770e9a09ee0d46f  libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc
! 9e20c0553ba5c2a0e7032207ebaef1c2  libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc
  2ecc665ef3b257e9162bbc21854e3946  libstdc++-v3/testsuite/20_util/bind/is_placeholder_v.cc
  5288d661707245b5f49b1d182c5efc3b  libstdc++-v3/testsuite/20_util/bind/move.cc
  be3a9da6ea678098c6798ffbca60906b  libstdc++-v3/testsuite/20_util/bind/nested.cc
*************** dc3a2cd47507d6f21e801bd45dbfd97b  libstd
*** 126062,126069 ****
--- 126491,126500 ----
  e860269ac09079a27b177fc3da2839e7  libstdc++-v3/testsuite/20_util/expected/cons.cc
  56411bbfdf1df328a5b305222e4527ed  libstdc++-v3/testsuite/20_util/expected/equality.cc
  f56847054b7eea85a598a3299216a456  libstdc++-v3/testsuite/20_util/expected/illformed_neg.cc
+ b6846002a3a56bb10b1621e1792c246a  libstdc++-v3/testsuite/20_util/expected/lwg3836.cc
  2fe263333a538ddd2a8cd7953725ff52  libstdc++-v3/testsuite/20_util/expected/lwg3877.cc
  8717f284befd8d0ee8fe1e50dcc6a7a7  libstdc++-v3/testsuite/20_util/expected/lwg3938.cc
+ 97aac511f36cb21427676e071c189c5a  libstdc++-v3/testsuite/20_util/expected/lwg4222.cc
  4824cecd15088232e3348b8bad95b2ce  libstdc++-v3/testsuite/20_util/expected/monadic.cc
  4bfafe03465669c57c9cf2717bc9b00e  libstdc++-v3/testsuite/20_util/expected/observers.cc
  8854ae6d49bfd2df3b2f3a9095f61fc4  libstdc++-v3/testsuite/20_util/expected/requirements.cc
*************** c56355cb5e2de33f96c86bf4db6c6be2  libstd
*** 126158,126163 ****
--- 126589,126595 ----
  863de17aa7ae07d75a900ee12560d23a  libstdc++-v3/testsuite/20_util/function_objects/binders/3113.cc
  5926b29b8b7edffe0168ef1f8cb5e292  libstdc++-v3/testsuite/20_util/function_objects/comparisons.cc
  1dfa8ecea1f9f2d79177cc6bcdd7be2b  libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer.cc
+ ecfb8c4b535e0bf09b4b70c183321205  libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer_spaceship.cc
  a653a483d30999c2e7af07fe033af406  libstdc++-v3/testsuite/20_util/function_objects/comparisons_void.cc
  72c5169eb585d2cd1cdd098c058f58b8  libstdc++-v3/testsuite/20_util/function_objects/constexpr.cc
  0c0d37c2d6ac0fbb6d95ee39fe0d57c0  libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc
*************** aeceb7ed4a37e0d5069368b492298fd2  libstd
*** 126681,126692 ****
  569d4f537539699020228db3183ae301  libstdc++-v3/testsuite/20_util/pair/astuple/constexpr_get_by_type.cc
  f2f2b91309730f195c55679493733944  libstdc++-v3/testsuite/20_util/pair/astuple/get-2.cc
  615717268a9494269a748b818516a857  libstdc++-v3/testsuite/20_util/pair/astuple/get.cc
! 5c2898a94510144572f642d26387084a  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc
  3e35724c208766af1ed84086f2284e05  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type_neg.cc
  0441756220779ea66d01fd82ab2fcbb0  libstdc++-v3/testsuite/20_util/pair/astuple/get_neg.cc
  5f0d03c78883f0d5388117a60da7ebfa  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr.cc
  4e56b4719b84bc0f400050717f12c07d  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr_c++20.cc
  04fed045318edda260e590d9ad1630a6  libstdc++-v3/testsuite/20_util/pair/comparison_operators/lwg3865.cc
  0bfa2a6f102c47434fccf1cd29449891  libstdc++-v3/testsuite/20_util/pair/cons/92878_92947.cc
  c5964cf74c99c86ce570bfdb15835bb8  libstdc++-v3/testsuite/20_util/pair/cons/99957.cc
  a5671a9536df9d6651ad08288b3776b1  libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
--- 127113,127125 ----
  569d4f537539699020228db3183ae301  libstdc++-v3/testsuite/20_util/pair/astuple/constexpr_get_by_type.cc
  f2f2b91309730f195c55679493733944  libstdc++-v3/testsuite/20_util/pair/astuple/get-2.cc
  615717268a9494269a748b818516a857  libstdc++-v3/testsuite/20_util/pair/astuple/get.cc
! c9c2091374ad00c54e83bf04b19d2115  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc
  3e35724c208766af1ed84086f2284e05  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type_neg.cc
  0441756220779ea66d01fd82ab2fcbb0  libstdc++-v3/testsuite/20_util/pair/astuple/get_neg.cc
  5f0d03c78883f0d5388117a60da7ebfa  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr.cc
  4e56b4719b84bc0f400050717f12c07d  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr_c++20.cc
  04fed045318edda260e590d9ad1630a6  libstdc++-v3/testsuite/20_util/pair/comparison_operators/lwg3865.cc
+ de22916c6d33b4376c80895f09fe7345  libstdc++-v3/testsuite/20_util/pair/cons/110853.cc
  0bfa2a6f102c47434fccf1cd29449891  libstdc++-v3/testsuite/20_util/pair/cons/92878_92947.cc
  c5964cf74c99c86ce570bfdb15835bb8  libstdc++-v3/testsuite/20_util/pair/cons/99957.cc
  a5671a9536df9d6651ad08288b3776b1  libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
*************** eca6ccbf51d82ff5b987cd9aaced3795  libstd
*** 126744,126750 ****
  5e7b70871875efa66006547f45751b27  libstdc++-v3/testsuite/20_util/ratio/operations/ops1.cc
  35e3f31c6c42678d93aeefed4ebccd02  libstdc++-v3/testsuite/20_util/ratio/operations/ops2.cc
  1d65030d6917c2356c86c0e586da9a0f  libstdc++-v3/testsuite/20_util/ratio/operations/ops3.cc
! a9a24b19d5092c0313862ae3b1c732f0  libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
  0214e01b9866348ef658b509210a5c3e  libstdc++-v3/testsuite/20_util/ratio/requirements/constexpr_data.cc
  a33853183d3467306152eb66eea86f42  libstdc++-v3/testsuite/20_util/ratio/requirements/ratio_equal_v.cc
  d8bbe2c17046f08594a91f5a8e216ba7  libstdc++-v3/testsuite/20_util/ratio/requirements/type_constraints.cc
--- 127177,127183 ----
  5e7b70871875efa66006547f45751b27  libstdc++-v3/testsuite/20_util/ratio/operations/ops1.cc
  35e3f31c6c42678d93aeefed4ebccd02  libstdc++-v3/testsuite/20_util/ratio/operations/ops2.cc
  1d65030d6917c2356c86c0e586da9a0f  libstdc++-v3/testsuite/20_util/ratio/operations/ops3.cc
! 1bc18b458101f724d60332748dfff23f  libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
  0214e01b9866348ef658b509210a5c3e  libstdc++-v3/testsuite/20_util/ratio/requirements/constexpr_data.cc
  a33853183d3467306152eb66eea86f42  libstdc++-v3/testsuite/20_util/ratio/requirements/ratio_equal_v.cc
  d8bbe2c17046f08594a91f5a8e216ba7  libstdc++-v3/testsuite/20_util/ratio/requirements/type_constraints.cc
*************** c4040ddafb4996fabd1901d7d8e72765  libstd
*** 126921,126927 ****
  6ff8d87d5d3d085604975998a212f74f  libstdc++-v3/testsuite/20_util/shared_ptr/observers/owner_before.cc
  ea203dcee9ac7166ecba4c58a326cc7c  libstdc++-v3/testsuite/20_util/shared_ptr/observers/unique.cc
  5594e19e9b158e97426d6089840fa1cc  libstdc++-v3/testsuite/20_util/shared_ptr/observers/use_count.cc
! 4bf456010b41da55e3097acd3283eca6  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
  139de8c288b3d1231ea2273f5d6ab169  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/2.cc
  f29912cc6495bc9bb56ab937962df84b  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/weak_type.cc
  4754d67920d7fbb9d5a6ba6a9605e8fb  libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc
--- 127354,127361 ----
  6ff8d87d5d3d085604975998a212f74f  libstdc++-v3/testsuite/20_util/shared_ptr/observers/owner_before.cc
  ea203dcee9ac7166ecba4c58a326cc7c  libstdc++-v3/testsuite/20_util/shared_ptr/observers/unique.cc
  5594e19e9b158e97426d6089840fa1cc  libstdc++-v3/testsuite/20_util/shared_ptr/observers/use_count.cc
! 549b70e5de4de4416498a203f84f2f0c  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc
! 8b883711f75db54ac0766703a6fe7a70  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
  139de8c288b3d1231ea2273f5d6ab169  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/2.cc
  f29912cc6495bc9bb56ab937962df84b  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/weak_type.cc
  4754d67920d7fbb9d5a6ba6a9605e8fb  libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc
*************** e3f61f582ecf58daf9067b80d518c249  libstd
*** 126940,126946 ****
  0fec65974cb6f5812af2edc743e20e00  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/95788.cc
  de351e8d21347f48b3c1745ab1d1164d  libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/constrained.cc
  122fcdc0346fb41ec738602d721a1126  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
! 44738eac1a7caa467741f819e5770e42  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc
  c4cb80eeb9e22fd9ca3df8d210abb00b  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc
  806a4d85a82c14d68ce64ea6a7245ab7  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc
  50a11c290676b6f106cb647a502e64ac  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc
--- 127374,127381 ----
  0fec65974cb6f5812af2edc743e20e00  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/95788.cc
  de351e8d21347f48b3c1745ab1d1164d  libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/constrained.cc
  122fcdc0346fb41ec738602d721a1126  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
! 3d215c86194df15b75fdf87c57f36962  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_n_neg.cc
! b4d18cf9ee1aac3b114e2840f50538f9  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc
  c4cb80eeb9e22fd9ca3df8d210abb00b  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc
  806a4d85a82c14d68ce64ea6a7245ab7  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc
  50a11c290676b6f106cb647a502e64ac  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc
*************** af272d624589bd0cea4be7993057018e  libstd
*** 126980,126986 ****
--- 127415,127424 ----
  1db0d2b929cddb30cbf502122f80ede6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/constrained.cc
  74d5a6acdfccbcb7ae9ef6668edf9505  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/94540.cc
  f6bd7c6a0c64d34b4e17ebe0a952a3fb  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/sizes.cc
+ 539b8e72f094c1dd4b2ed0f4e2c9911f  libstdc++-v3/testsuite/20_util/stdbit/1.cc
+ 6bc85c1a8428fb1dca9eb3dd36c44157  libstdc++-v3/testsuite/20_util/stdbit/2_neg.cc
  c76dd58eb12d4adce24d74cfb072fc19  libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc
+ 309b7ad3662d6e3be2a1afeaaef39c0e  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/118681.cc
  e24c511998a94418031de4297b1760d0  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/allocate.cc
  dc6c6bff46ec2e1289afb29019038359  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/allocate_single.cc
  53f638a23baba221761db8a79d46a114  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/cons.cc
*************** dc6c6bff46ec2e1289afb29019038359  libstd
*** 126991,126996 ****
--- 127429,127435 ----
  7ce526c9a6256391f9ec83573d350595  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release.cc
  6ff439348720463d3ddb23e39d28f26b  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release_single.cc
  35fae0105c98e525d2fe63303daabde9  libstdc++-v3/testsuite/20_util/system_clock/1.cc
+ 3df5d35bbcbd9760389b0f913b3844dc  libstdc++-v3/testsuite/20_util/system_clock/99832.cc
  a8b7dcc1b90032b42d3873d82d9de20e  libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc
  b4f2bb383a977e0574c9225115c2e9d8  libstdc++-v3/testsuite/20_util/temporary_buffer.cc
  0026f2cc7274967cf0c76d743235a395  libstdc++-v3/testsuite/20_util/time_point/1.cc
*************** a4d8ad071879c6906f7fce75376fd7f9  libstd
*** 127056,127061 ****
--- 127495,127501 ----
  d23b1a747046dfeaadefce18d2c02b12  libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc
  187ef5eb9d79f3cb6e7970796ffabd33  libstdc++-v3/testsuite/20_util/tuple/cons/102270.cc
  9a6dc1f9548e126de2581231c632a19f  libstdc++-v3/testsuite/20_util/tuple/cons/114147.cc
+ acc813dd1edb9480437149d28cd4faf0  libstdc++-v3/testsuite/20_util/tuple/cons/121771.cc
  663ba20c45ee2bbf63a3146a5cac0f23  libstdc++-v3/testsuite/20_util/tuple/cons/41530.cc
  783384ae9c6ca19657a9c90778e7fc96  libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc
  034dacfd01ba7e63192ee47bc865c854  libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc
*************** c8a7e1418906450a87ab25022a8ce3a4  libstd
*** 127203,127208 ****
--- 127643,127649 ----
  f8f82d94f3bba2535a3585beac627154  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/swap_cxx17.cc
  b752f343c2b8407affea1923b7fdbc6b  libstdc++-v3/testsuite/20_util/unreachable/1.cc
  f47805823c079035961580cdb36d1e63  libstdc++-v3/testsuite/20_util/unreachable/version.cc
+ e71310aab27f8280547a5f500ddfc531  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/118681.cc
  d283339a007e8306689113b6a5c93fad  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate-max-chunks.cc
  ef0994168e310cd0acc3cd45c7502d36  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate.cc
  68e6068da6f699dde076e3143dad3821  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/cons.cc
*************** b35834c4a9da455585d4f464c3ee1034  libstd
*** 127264,127270 ****
  6b897d033cb55ff130e351833c656265  libstdc++-v3/testsuite/20_util/weak_ptr/cons/self_move.cc
  3e5f4fd7115282166271cb4cf0d1416f  libstdc++-v3/testsuite/20_util/weak_ptr/lock/1.cc
  188d587f6435fead910a6d57289108ca  libstdc++-v3/testsuite/20_util/weak_ptr/observers/owner_before.cc
! 5717b53c16c4f11f4ec5f7cbd4b8f680  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
  7bf497ba385011f9bbb1d6961bfce3bc  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/2.cc
  cafbe413de74a53bbf9c5ba4c1534383  libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
  f4e5079b1eb55de552c9dd9629b3ad1e  libstdc++-v3/testsuite/21_strings/basic_string/56166.cc
--- 127705,127712 ----
  6b897d033cb55ff130e351833c656265  libstdc++-v3/testsuite/20_util/weak_ptr/cons/self_move.cc
  3e5f4fd7115282166271cb4cf0d1416f  libstdc++-v3/testsuite/20_util/weak_ptr/lock/1.cc
  188d587f6435fead910a6d57289108ca  libstdc++-v3/testsuite/20_util/weak_ptr/observers/owner_before.cc
! 5932ad1030d5abe0125342125560f5b2  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc
! 075434ad76688d9e68807142e9a84ef5  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
  7bf497ba385011f9bbb1d6961bfce3bc  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/2.cc
  cafbe413de74a53bbf9c5ba4c1534383  libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
  f4e5079b1eb55de552c9dd9629b3ad1e  libstdc++-v3/testsuite/21_strings/basic_string/56166.cc
*************** b556aac21d41332929350cfa43c2d400  libstd
*** 127479,127488 ****
--- 127921,127932 ----
  37a3fe8449f7948f044f2900e75f7ebb  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
  fecb5f76794dcb7b16941f3d83836e9e  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring_float.cc
  182461449a4aca8037e8e00cc0ec7c97  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
+ c24c0e6f49ab658726699f1007f123b4  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/123991.cc
  1825123cdc2a89da27c870140d19f6df  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
  341f66319a26204336b01dcd1f1b1565  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
  bd5d27b6c1da7f4be96a036ee98cfdc7  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/3.cc
  d892172578ee0d5468b089850bdcf92b  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
+ ec53bc1685fb080b40ba203340985256  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/123991.cc
  5d726f732ddc53dbbef5e882e4bf47a4  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
  397affbca97b3f41c20f5554e14b7cfb  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
  3f4df1904984cdc6acf7f07255d1cf87  libstdc++-v3/testsuite/21_strings/basic_string/operations/contains/char.cc
*************** f18281840a451d19d122f7b3e687a5b1  libstd
*** 127792,127797 ****
--- 128236,128242 ----
  66365d2cfdf6fc420153ab1706d3f4ed  libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc
  f18281840a451d19d122f7b3e687a5b1  libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
  fdd042665b212ba396b5b348a054e403  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/1.cc
+ d1962df70f021ebd3de8499b1b388c4e  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/105857.cc
  bf06c594254abfd04cc001e62c0328a2  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
  313bfc6e230795e49ca28d046fb29d2b  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
  681c6a1806913e4a8e8276b7f3cc60e8  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
*************** fb018d57f6cc2e240c170397a8ed4059  libstd
*** 128601,128606 ****
--- 129046,129052 ----
  542d7d58f0b3b0cd721a5a5958f136a2  libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
  8a841f192d21f6350ae94d01b6b85682  libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
  299edaedac65cc73f80f2a1de6b711ae  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
+ 6bcb325735429aba259858615ce5626d  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc
  00369c0e4f1e049991ce5a760c783849  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
  83a7645be508f9301d9c0920e26111ea  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
  3abf44e18dda8a51140c71919cb1f07c  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
*************** f36240251845dcaf230295841eba7646  libstd
*** 129045,129050 ****
--- 129491,129497 ----
  a70e420831c858a101440ad9ee1c8cf4  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc
  cfdc458b3774704d0d63dc4d8f1d92e9  libstdc++-v3/testsuite/23_containers/multiset/requirements/partial_specialization/1.cc
  77b71a9f5e9d611e3cc7b879e78658ac  libstdc++-v3/testsuite/23_containers/multiset/requirements/typedefs.cc
+ c2def03f80594fdacabf96a3fe28473a  libstdc++-v3/testsuite/23_containers/priority_queue/118088.cc
  7f0e30f8df9b60251d6205e919b8e00f  libstdc++-v3/testsuite/23_containers/priority_queue/67085.cc
  9f8fd4de0112a6c04d13168021e79ed1  libstdc++-v3/testsuite/23_containers/priority_queue/77528.cc
  c293382ebc0258702f13f7b675577d1f  libstdc++-v3/testsuite/23_containers/priority_queue/92878_92947.cc
*************** a05013dbea532a0e8adf37f8ae5e2e0d  libstd
*** 129616,129622 ****
  8a2444c44f89f5d64af1acb9a7f80aba  libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc
  53ad944f0b913c8294652175fb3cf323  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs.cc
  781331541b6ee6fa95c2c158853d3883  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc
! a93be04d5db06236670af5ee62d5c507  libstdc++-v3/testsuite/23_containers/unordered_set/pr115285.cc
  fade91ee94f454b455d87044a7b42dea  libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
  c21131c685279060f173de7532d7984c  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
  673c6fdd5e0635b7ca9e7706300d4270  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
--- 130063,130069 ----
  8a2444c44f89f5d64af1acb9a7f80aba  libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc
  53ad944f0b913c8294652175fb3cf323  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs.cc
  781331541b6ee6fa95c2c158853d3883  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc
! 4a1a079c582e7959c6ee5f2cb8255a10  libstdc++-v3/testsuite/23_containers/unordered_set/pr115285.cc
  fade91ee94f454b455d87044a7b42dea  libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
  c21131c685279060f173de7532d7984c  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
  673c6fdd5e0635b7ca9e7706300d4270  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
*************** ccf234c11b313b8cf8ae976eba6a599c  libstd
*** 129753,129760 ****
  fb48eef9819fb9b9420c789b10345994  libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc
  49e7077b6d0fc87fecd23a8bda909ccd  libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc
  7a66bf7f5aca27ddc8ca203f2f55a9b6  libstdc++-v3/testsuite/23_containers/vector/cons/destroy-adl.cc
! 006fc011a43ddbf758237846b0e783c2  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
! 4620aebd78f00de979bb2e05d7655e23  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc
  3c482a502f4b14275ffc4a8bdb723de3  libstdc++-v3/testsuite/23_containers/vector/cons/moveable.cc
  030430e7c08653a216e024bffde111c8  libstdc++-v3/testsuite/23_containers/vector/cons/moveable2.cc
  98f7d0a5529604ca7db7ae3c26222e15  libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc
--- 130200,130207 ----
  fb48eef9819fb9b9420c789b10345994  libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc
  49e7077b6d0fc87fecd23a8bda909ccd  libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc
  7a66bf7f5aca27ddc8ca203f2f55a9b6  libstdc++-v3/testsuite/23_containers/vector/cons/destroy-adl.cc
! 74c9b0a429566c7484dbad3f54540dda  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
! 4c25cef9d3f8f62e7314ff11dc52fd71  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc
  3c482a502f4b14275ffc4a8bdb723de3  libstdc++-v3/testsuite/23_containers/vector/cons/moveable.cc
  030430e7c08653a216e024bffde111c8  libstdc++-v3/testsuite/23_containers/vector/cons/moveable2.cc
  98f7d0a5529604ca7db7ae3c26222e15  libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc
*************** d89a9720f07a14c9e86e6f07e4c83bf5  libstd
*** 129834,129845 ****
  005243a58b67a49326d93516edecb628  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
  404a093d2a58fb8971363e6a1fa02a56  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/self_insert.cc
  8fb5c601f412e71f5977219b7d89f18d  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc
! b592190b0f316200dd18d0acfdf59ac8  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
  7ad68b2965cffcacc1bfb6bcc694f371  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc
  d3441c48a102fc3c48ef330b6d906b55  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc
  5e891b22a8f3333fe993e9f8ab6c121e  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89130.cc
  13446821e8cabbd255d7581ffa01bc9e  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89416.cc
  4b4815c96f7f7bd01cecb6bd6c8b7e4e  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/strong_guarantee.cc
  1cbe0435d6c258bbf5c62cb499c8dd17  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/1.cc
  94ae253a6ed1499fca9623d71c0008de  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/2.cc
  2ce333567224f761a6833356d4cc3a02  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/3.cc
--- 130281,130293 ----
  005243a58b67a49326d93516edecb628  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
  404a093d2a58fb8971363e6a1fa02a56  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/self_insert.cc
  8fb5c601f412e71f5977219b7d89f18d  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc
! 68d2c422a1142a58b29041e395bd9016  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
  7ad68b2965cffcacc1bfb6bcc694f371  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc
  d3441c48a102fc3c48ef330b6d906b55  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc
  5e891b22a8f3333fe993e9f8ab6c121e  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89130.cc
  13446821e8cabbd255d7581ffa01bc9e  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89416.cc
  4b4815c96f7f7bd01cecb6bd6c8b7e4e  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/strong_guarantee.cc
+ 4a2f9f9e84018ea58dae284a14d839cd  libstdc++-v3/testsuite/23_containers/vector/modifiers/resize.cc
  1cbe0435d6c258bbf5c62cb499c8dd17  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/1.cc
  94ae253a6ed1499fca9623d71c0008de  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/2.cc
  2ce333567224f761a6833356d4cc3a02  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/3.cc
*************** c546cc775c2f4aacb2ab246105d49be4  libstd
*** 129888,129894 ****
  9f4e16d24466d0905c256e141d9b7e91  libstdc++-v3/testsuite/24_iterators/common_iterator/100823.cc
  2c61f978dca854377a1f045080bfc407  libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc
  de5e3bacb355ac6331ac4ae3d0d7e069  libstdc++-v3/testsuite/24_iterators/common_iterator/2.cc
! c78691d1ff6bc1b3ae254334b058b5ca  libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
  3fcc24ac9868ef19598ff1bf296928bb  libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc
  514f5f79e39424bc555c834fdf742bab  libstdc++-v3/testsuite/24_iterators/container_access.cc
  0783d01d06994d30f114de931fab9034  libstdc++-v3/testsuite/24_iterators/contiguous/concept.cc
--- 130336,130342 ----
  9f4e16d24466d0905c256e141d9b7e91  libstdc++-v3/testsuite/24_iterators/common_iterator/100823.cc
  2c61f978dca854377a1f045080bfc407  libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc
  de5e3bacb355ac6331ac4ae3d0d7e069  libstdc++-v3/testsuite/24_iterators/common_iterator/2.cc
! 2f1514de9134e83dc1048a4c719c67f2  libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
  3fcc24ac9868ef19598ff1bf296928bb  libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc
  514f5f79e39424bc555c834fdf742bab  libstdc++-v3/testsuite/24_iterators/container_access.cc
  0783d01d06994d30f114de931fab9034  libstdc++-v3/testsuite/24_iterators/contiguous/concept.cc
*************** d37c4e49eb4480c26dc88261b44d7e2a  libstd
*** 129942,129947 ****
--- 130390,130396 ----
  bace6ef2912a30047b09a18d919361fc  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/explicit_instantiation.cc
  5ad66aa35e8f7dbb83dbcc33355e384d  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/typedefs.cc
  98d49deb4bbcb615dd24659838d78d0f  libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc
+ 486fa49e6e6487aad2e12a66d481a54c  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc
  1713c306a8a41af2ca9052c8c8e72eb4  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2.cc
  d3cd71a28bbc84054ec728f34461d270  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2627.cc
  5561389ef10093963146739453d3922f  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/92285.cc
*************** e8bf0379af76e52e3d3ec9cf31ad2d95  libstd
*** 131204,131209 ****
--- 131653,131659 ----
  755de65cfdfdc0ea1d3a709a41c0c712  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/serialize.cc
  e63eaf3980053a8838a7515a9e776e0b  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc
  05822bfb9a7e707b9a25b9a4077a235a  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
+ c6b9a866c77dbfde316664357479e98d  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc
  cfc2b16ef743f23a4b2b081c52aee933  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc
  2a089c33c99162d42501f51796316051  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/initlist_fun.cc
  98356b0dac11f02a9501aa282eafea76  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/num_xbound_fun.cc
*************** ac2c2e993d2f52b33ebc1bca88500eeb  libstd
*** 131316,131321 ****
--- 131766,131773 ----
  06d08fc72dca5267716b538e28d586c0  libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc
  74ae82fe433da6ef83fb71cae20c5cf0  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/explicit_instantiation.cc
  61f053ddfa648c8008f186f556bbfccd  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/typedefs.cc
+ 3c2e739337d1d66a837ee9dff70bfa34  libstdc++-v3/testsuite/26_numerics/stdckdint/1.cc
+ b751aceaf1e04e945c13e67131969e4d  libstdc++-v3/testsuite/26_numerics/stdckdint/2_neg.cc
  3f792c54287a955c10b0ce10e9b13a40  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc
  02dc1b1b9ab240870cc09a96dae03422  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/constexpr.cc
  e2ef1b16c022e7d6a5c3f0c482cbbcc5  libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc
*************** d02768a383f43d2bdb10cada8328b159  libstd
*** 132147,132152 ****
--- 132599,132605 ----
  56eb8885b97731c8e480469c9fca4246  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
  cca2d2ccbbea4dda9fb5c4f3c39267d6  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/9404-2.cc
  b3ae8704753579a0002195a186322a0d  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc
+ 977a013f60bef4a12b598777d9f03bd4  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/123100.cc
  6096791a50e73fccc36caa94a9c87920  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/2.cc
  161ab5a9afddbade1f0f4cc148e37a14  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3.cc
  5b154da1ad402e6b2ae093911748ac19  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3955.cc
*************** cecb46fce2cba2e40d35bdb10f5f2047  libstd
*** 132236,132242 ****
  3758fee1ba06fba8ecf9ea5789a4f69d  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
  40ddc534166b73723cb3cf2f17775536  libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
  18abd8c8f676eee660331074eeb24b46  libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
! c562c13d312277dd683218b9c8293552  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
  3ffca5f28a466d05823facdae80f605d  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
  8328a09db3e4efe031a6a2ba359d1c7b  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
  641661017a1404a9d3867cbb09e3b531  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
--- 132689,132695 ----
  3758fee1ba06fba8ecf9ea5789a4f69d  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
  40ddc534166b73723cb3cf2f17775536  libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
  18abd8c8f676eee660331074eeb24b46  libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
! 6bbdb113c29cfcb14ce7e4ef8624dbe0  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
  3ffca5f28a466d05823facdae80f605d  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
  8328a09db3e4efe031a6a2ba359d1c7b  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
  641661017a1404a9d3867cbb09e3b531  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
*************** bd0b3ffbf0b5d42a3102341682967b7f  libstd
*** 132252,132257 ****
--- 132705,132711 ----
  69a1e1cd94571e915ecad1418d14dbef  libstdc++-v3/testsuite/27_io/filesystem/path/compare/lwg2936.cc
  d9c79dd452a58cfd063e49ff476fe370  libstdc++-v3/testsuite/27_io/filesystem/path/compare/path.cc
  841597b8188f1acb8cd097ab51e19134  libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
+ 9b500ed50c013cdbd0290f1d06786f83  libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc
  0bab77a18fa3ca7723e4133a41f95bbf  libstdc++-v3/testsuite/27_io/filesystem/path/concat/92853.cc
  a2763ee4993b7a1eb74183a35b05454b  libstdc++-v3/testsuite/27_io/filesystem/path/concat/94063.cc
  d6cf66594b90a2255355df35b0276d5f  libstdc++-v3/testsuite/27_io/filesystem/path/concat/path.cc
*************** f34c13e0eef44f80fc10f6cc39105956  libstd
*** 132698,132704 ****
  7de4e52d03fe19c0a05d5a8cd6bc8267  libstdc++-v3/testsuite/29_atomics/atomic/69769.cc
  5e2e08488f2a545f948bd16834cf8ee5  libstdc++-v3/testsuite/29_atomics/atomic/70766.cc
  63350a1cbb29ab67e43b7f49d0ce503d  libstdc++-v3/testsuite/29_atomics/atomic/89624.cc
! ce997c946b9d815d3b58c18b6822f7d2  libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc
  c7cee233a1d080b1dffc7cd5311d27c3  libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
  8a3545374cb8fbbd33dd2b2906c3cbf8  libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
  b27d4e8f6e45d96e8ec5c36abd854471  libstdc++-v3/testsuite/29_atomics/atomic/cons/constexpr.cc
--- 133152,133158 ----
  7de4e52d03fe19c0a05d5a8cd6bc8267  libstdc++-v3/testsuite/29_atomics/atomic/69769.cc
  5e2e08488f2a545f948bd16834cf8ee5  libstdc++-v3/testsuite/29_atomics/atomic/70766.cc
  63350a1cbb29ab67e43b7f49d0ce503d  libstdc++-v3/testsuite/29_atomics/atomic/89624.cc
! e20db8e4b74cd8cd87b26cf643e05738  libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc
  c7cee233a1d080b1dffc7cd5311d27c3  libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
  8a3545374cb8fbbd33dd2b2906c3cbf8  libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
  b27d4e8f6e45d96e8ec5c36abd854471  libstdc++-v3/testsuite/29_atomics/atomic/cons/constexpr.cc
*************** c0881d1e2eb764c023ab5b7d8a6c85b7  libstd
*** 132709,132714 ****
--- 133163,133169 ----
  66bdc51662fd70d30902211a53dedff4  libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc
  9e2a8388686f3e26628f06d374c98d11  libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
  6eaa7fecae6788d01a20ae43260848b9  libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc
+ 822ec88a7f5dfe8ce7d354c55824d6bb  libstdc++-v3/testsuite/29_atomics/atomic/cons/zero_padding.cc
  4c8038b479383b8690e30cb9dd1b7a3a  libstdc++-v3/testsuite/29_atomics/atomic/is_always_lock_free.cc
  f9b2d6d78dc44c7b8285a07ef1cd9521  libstdc++-v3/testsuite/29_atomics/atomic/lock_free_aliases.cc
  467103d8d6f668882b30ac0653e0cd90  libstdc++-v3/testsuite/29_atomics/atomic/lwg3220.cc
*************** e60e491db955c40476864016c325c635  libstd
*** 132717,132723 ****
  4e5e9095b57fccee6acb88d48375653e  libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc
  6b80e06d1316952c42182ee6870618d4  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
  a6d61ece14a2ac1cb88f202e320d2678  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
! 5077e2998a3075360a362dda91ad489c  libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
  88cb63e8f111a7a3c727598a518674a1  libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
  177ade384daee9305258f2accf7ea158  libstdc++-v3/testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc
  1a12382ca32ebb7250ad7d1e14ef6c1c  libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
--- 133172,133178 ----
  4e5e9095b57fccee6acb88d48375653e  libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc
  6b80e06d1316952c42182ee6870618d4  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
  a6d61ece14a2ac1cb88f202e320d2678  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
! 4cd4b493579e1bc3a440dd23249636cb  libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
  88cb63e8f111a7a3c727598a518674a1  libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
  177ade384daee9305258f2accf7ea158  libstdc++-v3/testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc
  1a12382ca32ebb7250ad7d1e14ef6c1c  libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
*************** d0fa9f13b49567ec79d8ace05baf270b  libstd
*** 132754,132759 ****
--- 133209,133215 ----
  e9c3082d95bdcf75d84e17829bbbce4f  libstdc++-v3/testsuite/29_atomics/atomic_float/requirements_cxx23.cc
  01b9626b2a289a1c31a5803746520cf9  libstdc++-v3/testsuite/29_atomics/atomic_float/value_init.cc
  4f98204db054b6051e78a00723ddf115  libstdc++-v3/testsuite/29_atomics/atomic_float/wait_notify.cc
+ 25faa0b8cab947a81054c74813773331  libstdc++-v3/testsuite/29_atomics/atomic_float/zero_padding.cc
  280689977a79a773378a128fd3d6cbf0  libstdc++-v3/testsuite/29_atomics/atomic_integral/60940.cc
  9367b35ad862e3e55260981438b3b938  libstdc++-v3/testsuite/29_atomics/atomic_integral/65147.cc
  d673595a1a9a4a12208c70e0c4f4b145  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
*************** c0b583c748f7e9df1b6ba57eef003a5b  libstd
*** 132923,132929 ****
  0f43f445c9cf91ce838cd370e936cd3c  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc
  b0a3fa6c14115f4485e5f5fa4d3e5208  libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
  d76d953b956682a1e65caf48cfd059be  libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
! 003c3f1bdcb9989a58198da5a9c4113b  libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc
  bf572723301e0723551ea63a282f2671  libstdc++-v3/testsuite/30_threads/packaged_task/cons/deduction.cc
  ba4413ab6f8707eecf7439c419b333f6  libstdc++-v3/testsuite/30_threads/packaged_task/cons/deduction_c++23.cc
  a7699861951a48bd37d8f9e4d7d4d6ef  libstdc++-v3/testsuite/30_threads/packaged_task/cons/lwg4154_neg.cc
--- 133379,133385 ----
  0f43f445c9cf91ce838cd370e936cd3c  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc
  b0a3fa6c14115f4485e5f5fa4d3e5208  libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
  d76d953b956682a1e65caf48cfd059be  libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
! 1819879d3dc2788c98e2b8836daf3ddd  libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc
  bf572723301e0723551ea63a282f2671  libstdc++-v3/testsuite/30_threads/packaged_task/cons/deduction.cc
  ba4413ab6f8707eecf7439c419b333f6  libstdc++-v3/testsuite/30_threads/packaged_task/cons/deduction_c++23.cc
  a7699861951a48bd37d8f9e4d7d4d6ef  libstdc++-v3/testsuite/30_threads/packaged_task/cons/lwg4154_neg.cc
*************** a9371eca1def310151c76a30b432f8f4  libstd
*** 133124,133129 ****
--- 133580,133586 ----
  6edcba06b4872175448a92ca927140ee  libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
  5da0087b1f4c4a37321692aea903ee72  libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
  85650ea69acc8067542b3ba070aafbab  libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
+ ec30d5440c1422ca4216d48631bf8250  libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc
  b30217126b0de99c06b6b3f01a010427  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
  3ac0b06cbdce363a1e834490f371a3ee  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
  e5da47bb4a87780f44f63cce05d2c93c  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
*************** efd4c67d637b221742fe4248d47fed66  libstd
*** 133257,133263 ****
  cdf3ccdd510207748f101f6478638db9  libstdc++-v3/testsuite/backward/hash_set/1.cc
  a7b8c9fe054fcdca3d423c045c72171c  libstdc++-v3/testsuite/backward/hash_set/25896.cc
  2c091597008357e678007f407f299a24  libstdc++-v3/testsuite/backward/hash_set/49060.cc
! 879596921400555f43b6a4ba0ff7ec36  libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc
  c92b9786603b94690d2cf39f66fb11e4  libstdc++-v3/testsuite/backward/hash_set/requirements/explicit_instantiation.cc
  f3d7a910f0170b61f3a70077acd25f65  libstdc++-v3/testsuite/backward/strstream_members.cc
  d96a1e87bb7bfbfcead85c1d0166038b  libstdc++-v3/testsuite/backward/strstream_move.cc
--- 133714,133720 ----
  cdf3ccdd510207748f101f6478638db9  libstdc++-v3/testsuite/backward/hash_set/1.cc
  a7b8c9fe054fcdca3d423c045c72171c  libstdc++-v3/testsuite/backward/hash_set/25896.cc
  2c091597008357e678007f407f299a24  libstdc++-v3/testsuite/backward/hash_set/49060.cc
! 952d49aa043061c37f8603091b8e9bde  libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc
  c92b9786603b94690d2cf39f66fb11e4  libstdc++-v3/testsuite/backward/hash_set/requirements/explicit_instantiation.cc
  f3d7a910f0170b61f3a70077acd25f65  libstdc++-v3/testsuite/backward/strstream_members.cc
  d96a1e87bb7bfbfcead85c1d0166038b  libstdc++-v3/testsuite/backward/strstream_move.cc
*************** cc7125bc60e34f68540efd871dda5640  libstd
*** 133396,133401 ****
--- 133853,133859 ----
  ba96c96e39c464f5314b33a61dfdefd1  libstdc++-v3/testsuite/experimental/filesystem/path/compare/compare.cc
  1091b8690897ed9ab62fbefdcf505667  libstdc++-v3/testsuite/experimental/filesystem/path/compare/path.cc
  ba07232a1772681c7223e5d244165c9b  libstdc++-v3/testsuite/experimental/filesystem/path/compare/strings.cc
+ 83f8a63ee6afbdafe75f08d3ab59ded7  libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc
  8cc01c2bd70482e4228fdd50255efa6f  libstdc++-v3/testsuite/experimental/filesystem/path/concat/path.cc
  dfe8fa5ece3b1045a958f3f2744f6537  libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
  c06b01e19066f0d4ffa4faa5202f4e3e  libstdc++-v3/testsuite/experimental/filesystem/path/construct/100630.cc
*************** aff20c8c5cf69b2711343c5d3b008187  libstd
*** 134385,134391 ****
  742ac64fdc39fb1c49c3b80a89e939f1  libstdc++-v3/testsuite/std/format/formatter/requirements.cc
  a1d452e66d840a306985b18ad9ae0a8e  libstdc++-v3/testsuite/std/format/functions/107871.cc
  a7244ffd437f4addc853cfdd012c5cba  libstdc++-v3/testsuite/std/format/functions/114519.cc
! ff7c8c27163de662de00784af2661775  libstdc++-v3/testsuite/std/format/functions/format.cc
  8ee425f04d2e4782e67ab2eb62208b7f  libstdc++-v3/testsuite/std/format/functions/format_to.cc
  c5e2b63672ec2df6fdcba9b4e1ba3ba0  libstdc++-v3/testsuite/std/format/functions/format_to_n.cc
  f859e29ec6cd7017c9d0abc60ed4b8ce  libstdc++-v3/testsuite/std/format/functions/size.cc
--- 134843,134849 ----
  742ac64fdc39fb1c49c3b80a89e939f1  libstdc++-v3/testsuite/std/format/formatter/requirements.cc
  a1d452e66d840a306985b18ad9ae0a8e  libstdc++-v3/testsuite/std/format/functions/107871.cc
  a7244ffd437f4addc853cfdd012c5cba  libstdc++-v3/testsuite/std/format/functions/114519.cc
! e03d21d9a6a12566cd87cd0c1c22e55d  libstdc++-v3/testsuite/std/format/functions/format.cc
  8ee425f04d2e4782e67ab2eb62208b7f  libstdc++-v3/testsuite/std/format/functions/format_to.cc
  c5e2b63672ec2df6fdcba9b4e1ba3ba0  libstdc++-v3/testsuite/std/format/functions/format_to_n.cc
  f859e29ec6cd7017c9d0abc60ed4b8ce  libstdc++-v3/testsuite/std/format/functions/size.cc
*************** e9dd29c8ada0e4f7673523df4dc8c5e7  libstd
*** 134501,134517 ****
  a0efc42f3d3e1e881d69063fe7f2c586  libstdc++-v3/testsuite/std/text_encoding/cons.cc
  bfa6a93e5c5cd2d11c1eddd5572fd5de  libstdc++-v3/testsuite/std/text_encoding/members.cc
  e9ef3f2b572f799b265913487f27690b  libstdc++-v3/testsuite/std/text_encoding/requirements.cc
! 829f62feba3a8d88bdba61776f8980da  libstdc++-v3/testsuite/std/time/clock/file/io.cc
  80a2961c5977de8c0d12064222e4427c  libstdc++-v3/testsuite/std/time/clock/file/members.cc
  bb27fc01a394046e2e420e57a1e6925f  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
  811bf06fb6123b7a4dc922fa36ba8a06  libstdc++-v3/testsuite/std/time/clock/gps/1.cc
! 0a79f149c67bc35f2c5afa5f6504446d  libstdc++-v3/testsuite/std/time/clock/gps/io.cc
! 35bb731208c0d393e6eb642440f3a663  libstdc++-v3/testsuite/std/time/clock/local/io.cc
! 423a8d821e5306daefaa2d142a56c137  libstdc++-v3/testsuite/std/time/clock/system/io.cc
  b3cda48993495a5d2ff69f7f1ad2c695  libstdc++-v3/testsuite/std/time/clock/tai/1.cc
! 0f2ad290eb91c08f3de238b60ddafc29  libstdc++-v3/testsuite/std/time/clock/tai/io.cc
  33b0f61f2113641c61ba5cd53d9a52a3  libstdc++-v3/testsuite/std/time/clock/utc/1.cc
! 0d059ebbdaaad044ee1ede6c816c555f  libstdc++-v3/testsuite/std/time/clock/utc/io.cc
  01f8f5b7e0644716179c7a0f95af5d9d  libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc
  2bf53d186ffb828ec6dc3552076ba23e  libstdc++-v3/testsuite/std/time/day/1.cc
  9b5b79c912b11d4f48e1fb35fb111742  libstdc++-v3/testsuite/std/time/day/io.cc
--- 134959,134975 ----
  a0efc42f3d3e1e881d69063fe7f2c586  libstdc++-v3/testsuite/std/text_encoding/cons.cc
  bfa6a93e5c5cd2d11c1eddd5572fd5de  libstdc++-v3/testsuite/std/text_encoding/members.cc
  e9ef3f2b572f799b265913487f27690b  libstdc++-v3/testsuite/std/text_encoding/requirements.cc
! 4d6ff64285bb8a204046c3acb8b3c72f  libstdc++-v3/testsuite/std/time/clock/file/io.cc
  80a2961c5977de8c0d12064222e4427c  libstdc++-v3/testsuite/std/time/clock/file/members.cc
  bb27fc01a394046e2e420e57a1e6925f  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
  811bf06fb6123b7a4dc922fa36ba8a06  libstdc++-v3/testsuite/std/time/clock/gps/1.cc
! a85dcd18b61b95e1c5a533b8aacdd488  libstdc++-v3/testsuite/std/time/clock/gps/io.cc
! 8acd6f904e5c685807dd2f220313bd5b  libstdc++-v3/testsuite/std/time/clock/local/io.cc
! 13ae31163906c8eda2c2021c882bdc89  libstdc++-v3/testsuite/std/time/clock/system/io.cc
  b3cda48993495a5d2ff69f7f1ad2c695  libstdc++-v3/testsuite/std/time/clock/tai/1.cc
! a87e1152f6bc2804b93ce070a51eeb54  libstdc++-v3/testsuite/std/time/clock/tai/io.cc
  33b0f61f2113641c61ba5cd53d9a52a3  libstdc++-v3/testsuite/std/time/clock/utc/1.cc
! 91c1a13a9f62d24541dc87bd44c15db4  libstdc++-v3/testsuite/std/time/clock/utc/io.cc
  01f8f5b7e0644716179c7a0f95af5d9d  libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc
  2bf53d186ffb828ec6dc3552076ba23e  libstdc++-v3/testsuite/std/time/day/1.cc
  9b5b79c912b11d4f48e1fb35fb111742  libstdc++-v3/testsuite/std/time/day/io.cc
*************** f954da011c6ea0feb7c2873b94f28bf2  libstd
*** 134538,134544 ****
  54378d7890a365088cc6292493caf83d  libstdc++-v3/testsuite/std/time/month_weekday_last/io.cc
  60231b6bb71cc9175500ebf6d9f92ceb  libstdc++-v3/testsuite/std/time/parse/114240.cc
  a0be85b8053be995a48a4cfec6a5b675  libstdc++-v3/testsuite/std/time/parse/114279.cc
! a62052228d6df7ad716017e0526fa955  libstdc++-v3/testsuite/std/time/parse/parse.cc
  f6f08359417bfbb402eb9bddff78a6c1  libstdc++-v3/testsuite/std/time/syn_c++20.cc
  f9d9d1cb483f1731762a8e5787c8020b  libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc
  d041367e20c424ad627fce102335edd0  libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc
--- 134996,135003 ----
  54378d7890a365088cc6292493caf83d  libstdc++-v3/testsuite/std/time/month_weekday_last/io.cc
  60231b6bb71cc9175500ebf6d9f92ceb  libstdc++-v3/testsuite/std/time/parse/114240.cc
  a0be85b8053be995a48a4cfec6a5b675  libstdc++-v3/testsuite/std/time/parse/114279.cc
! 4547b0badce5668333f08490264f6870  libstdc++-v3/testsuite/std/time/parse/125369.cc
! 4650244d174eff0342f84405e248bbfe  libstdc++-v3/testsuite/std/time/parse/parse.cc
  f6f08359417bfbb402eb9bddff78a6c1  libstdc++-v3/testsuite/std/time/syn_c++20.cc
  f9d9d1cb483f1731762a8e5787c8020b  libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc
  d041367e20c424ad627fce102335edd0  libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc
*************** e794c3c683b129a1bc27715ff3ee3b37  libstd
*** 134582,134588 ****
  728832c3eb4e89e18aaf1a2ed1be2271  libstdc++-v3/testsuite/std/time/zoned_time/1.cc
  6e26d84ca6efe0ea496ba2fcc8ee280b  libstdc++-v3/testsuite/std/time/zoned_time/custom.cc
  6abf80ca9a7f01e8d061066eecdd2022  libstdc++-v3/testsuite/std/time/zoned_time/deduction.cc
! 2af126843677c397f37d0ec04aab8ffe  libstdc++-v3/testsuite/std/time/zoned_time/io.cc
  1ffbda059634e8047ba1c3ed8ea40cdf  libstdc++-v3/testsuite/std/time/zoned_time/req_neg.cc
  46d6b45f45908ebc179f768a8757f7de  libstdc++-v3/testsuite/std/time/zoned_time/requirements.cc
  a666cbbccdbd1212e56956d4d552eceb  libstdc++-v3/testsuite/std/time/zoned_traits.cc
--- 135041,135047 ----
  728832c3eb4e89e18aaf1a2ed1be2271  libstdc++-v3/testsuite/std/time/zoned_time/1.cc
  6e26d84ca6efe0ea496ba2fcc8ee280b  libstdc++-v3/testsuite/std/time/zoned_time/custom.cc
  6abf80ca9a7f01e8d061066eecdd2022  libstdc++-v3/testsuite/std/time/zoned_time/deduction.cc
! d959748416b21daaf2d235599ad8a5f4  libstdc++-v3/testsuite/std/time/zoned_time/io.cc
  1ffbda059634e8047ba1c3ed8ea40cdf  libstdc++-v3/testsuite/std/time/zoned_time/req_neg.cc
  46d6b45f45908ebc179f768a8757f7de  libstdc++-v3/testsuite/std/time/zoned_time/requirements.cc
  a666cbbccdbd1212e56956d4d552eceb  libstdc++-v3/testsuite/std/time/zoned_traits.cc
diff -Nrcpad gcc-14.3.0/NEWS gcc-14.3.0-RC-20260619/NEWS
*** gcc-14.3.0/NEWS	Fri May 23 11:04:06 2025
--- gcc-14.3.0-RC-20260619/NEWS	Fri Jun 19 06:52:05 2026
*************** Caveats
*** 260,266 ****
         parts of the Ada runtime library, which has been subsequently
         proven to be correct with SPARK 2014.
       * Support for the LoongArch architecture.
!      * Support for vxWorks 7 Cert RTP has been removed.
       * Additional hardening improvements. For more information related to
         hardening options, refer to the [33]GCC Instrumentation Options and
         the [34]GNAT Reference Manual, Security and Hardening Features.
--- 260,266 ----
         parts of the Ada runtime library, which has been subsequently
         proven to be correct with SPARK 2014.
       * Support for the LoongArch architecture.
!      * Support for VxWorks 7 Cert RTP has been removed.
       * Additional hardening improvements. For more information related to
         hardening options, refer to the [33]GCC Instrumentation Options and
         the [34]GNAT Reference Manual, Security and Hardening Features.
*************** Caveats
*** 272,287 ****
              higher performance and easier integration with low footprint
              embedded runtimes.
            + [38]String Interpolation: allows for easier string formatting.
       * Further clean up and improvements to the GNAT code.
  
!   [39]C family
  
       * The Clang language extensions __has_feature and __has_extension
         have been implemented in GCC. These are available from C, C++, and
         Objective-C(++). This is primarily intended to aid the portability
         of code written against Clang.
  
!   [40]C
  
       * Some more C23 features have been implemented:
            + Bit-precise integer types (_BitInt (N) and unsigned _BitInt
--- 272,294 ----
              higher performance and easier integration with low footprint
              embedded runtimes.
            + [38]String Interpolation: allows for easier string formatting.
+      * [39]Fixed lower bound [40][RFC] : Unconstrained array types and
+        subtypes can be specified with a lower bound that is fixed to a
+        certain value, by writing an index range that uses the syntax
+        <lower-bound-expression> .. <>. This guarantees that all objects of
+        the type or subtype will have the specified lower bound.
       * Further clean up and improvements to the GNAT code.
  
!   [41]C family
  
       * The Clang language extensions __has_feature and __has_extension
         have been implemented in GCC. These are available from C, C++, and
         Objective-C(++). This is primarily intended to aid the portability
         of code written against Clang.
+      * GCC supports a new pragma #pragma GCC novector to indicate to the
+        vectorizer not to vectorize the loop annotated with the pragma.
  
!   [42]C
  
       * Some more C23 features have been implemented:
            + Bit-precise integer types (_BitInt (N) and unsigned _BitInt
*************** Caveats
*** 297,415 ****
         options -std=c23, -std=gnu23 and -Wc11-c23-compat. These are
         equivalent to the previous options -std=c2x, -std=gnu2x and
         -Wc11-c2x-compat, which are deprecated but remain supported.
-      * GCC supports a new pragma #pragma GCC novector to indicate to the
-        vectorizer not to vectorize the loop annotated with the pragma.
  
!   [41]C++
  
       * Several C++26 features have been implemented:
!           + [42]P1854R4, Making non-encodable string literals ill-formed
!             ([43]PR110341)
!           + [44]P2752R3, Static storage for braced initializers
!             ([45]PR110346)
!           + [46]P2361R6, Unevaluated strings ([47]PR110342)
!           + [48]P2738R1, constexpr cast from void* ([49]PR110344)
!           + [50]P2741R3, User-generated static_assert messages
!             ([51]PR110348)
!           + [52]P2169R4, Placeholder variables with no name ([53]PR110349)
!           + [54]P2864R2, Removing deprecated arithmetic conversion on
              enumerations
!           + [55]P2748R5, Disallow binding a returned reference to a
!             temporary ([56]PR114455)
!           + [57]P2809R3, Trivial infinite loops are not undefined behavior
!             ([58]PR114462)
       * Several C++23 features have been implemented:
!           + [59]P0847R7, Deducing this ([60]PR102609)
!           + [61]P2280R4, Using unknown references in constant expressions
!             ([62]PR106650)
!           + [63]P2564R3, consteval needs to propagate up ([64]PR107687)
!           + [65]P2582R1, Class template argument deduction from inherited
!             constructors ([66]PR106653)
       * Several C++ Defect Reports have been resolved, e.g.:
!           + [67]DR 532, Member/nonmember operator template partial
              ordering
!           + [68]DR 976, Deduction for const T& conversion operators
!           + [69]DR 2262, Attributes for asm-definition
!           + [70]DR 2359, Unintended copy initialization with designated
              initializers
!           + [71]DR 2386, tuple_size requirements for structured binding
!           + [72]DR 2406, [[fallthrough]] attribute and iteration
              statements
!           + [73]DR 2543, constinit and optimized dynamic initialization
!           + [74]DR 2586, Explicit object parameter for assignment and
              comparison
!           + [75]DR 2735, List-initialization and conversions in overload
              resolution
!           + [76]DR 2799, Inheriting default constructors
       * When a diagnostic occurs involving a C++ template, GCC will now
         quote the source code of the context at which the template is
         instantiated ("required from here"), rather than just print
         filename and line/column numbers.
       * New built-in __type_pack_element to speed up traits such as
!        std::tuple_element ([77]PR100157)
       * goto can cross the initialization of a trivially initialized object
!        with a non-trivial destructor ([78]DR 2256)
       * -Wdangling-reference false positives have been reduced. The warning
         does not warn about std::span-like classes; there is also a new
!        attribute gnu::no_dangling to suppress the warning. See [79]the
         manual for more info.
       * noexcept(expr) is now mangled as per the Itanium ABI
       * the named return value optimization can now be performed even for
         variables declared in an inner block of a function, see the
!        [80]test
       * New -Wnrvo warning, to warn if the named return value optimization
         is not performed although it is allowed by [class.copy.elision].
!        See [81]the manual for more info.
       * The backing array for std::initializer_list has been made static,
!        allowing combining multiple equivalent initializer-lists ([82]git)
       * New -Welaborated-enum-base warning, to warn if an additional
         enum-base is used in an elaborated-type-specifier
!      * Better #include hints for missing headers ([83]PR110164)
       * The arguments of a variable template-id are coerced earlier than
!        before, so various problems are detected earlier ([84]PR89442)
       * -Wmissing-field-initializers is no longer emitted for empty classes
!        ([85]PR110064)
       * The constexpr code now tracks lifetimes in constant evaluation;
         this change helps to detect bugs such as accessing a variable whose
!        lifetime has ended ([86]PR70331, [87]PR96630, [88]PR98675)
       * Array destruction can now be devirtualized
       * In-class member variable template partial specializations are now
!        accepted ([89]PR71954)
       * Improved diagnostic for explicit conversion functions: when a
         conversion doesn't work out only because the conversion function
         necessary to do the conversion couldn't be used because it was
!        marked explicit, explain that to the user ([90]git)
       * Corrected mangling of static/thread_local structured bindings at
!        function/block scope ([91]PR111069)
       * [basic.scope.block]/2 violations are detected even in compound-stmt
         of function-try-block and for block-scope external variables
!        ([92]PR52953)
       * Improved "not a constant expression" diagnostic when taking the
!        address of a non-static constexpr variable ([93]PR91483)
       * Non-dependent simple assignments are checked even in templates
!        ([94]PR18474)
       * Attributes hot and cold can be applied to classes as well. See
!        [95]the manual for more info.
       * Function template constraints, as well as CTAD placeholders, are
         now mangled
!      * Various decltype fixes: [96]PR79620, [97]PR79378, [98]PR83167,
!        [99]PR96917
       * New option -fdiagnostics-all-candidates to note all candidates
         during overload resolution failure
       * -Walloc-size and -Wcalloc-transposed-args warnings are enabled for
         C++ as well
       * The DR 2237 code no longer gives an error, it emits a
         -Wtemplate-id-cdtor warning instead
-      * GCC supports a new pragma #pragma GCC novector to indicate to the
-        vectorizer not to vectorize the loop annotated with the pragma.
       * C++ module scanning for named modules is now available, based on
!        the format described in [100]P1689R5, Format for describing
         dependencies of source files. The -fdeps-format=, -fdeps-file=, and
         -fdeps-target= flags may be used to generate dependency
         information. In GCC 14 p1689r5 is the only valid argument for
         -fdeps-format=.
  
!     [101]Runtime Library (libstdc++)
  
       * The libstdc++exp.a library now includes all the Filesystem TS
         symbols from the libstdc++fs.a library. The experimental symbols
--- 304,418 ----
         options -std=c23, -std=gnu23 and -Wc11-c23-compat. These are
         equivalent to the previous options -std=c2x, -std=gnu2x and
         -Wc11-c2x-compat, which are deprecated but remain supported.
  
!   [43]C++
  
       * Several C++26 features have been implemented:
!           + [44]P1854R4, Making non-encodable string literals ill-formed
!             ([45]PR110341)
!           + [46]P2752R3, Static storage for braced initializers
!             ([47]PR110346)
!           + [48]P2361R6, Unevaluated strings ([49]PR110342)
!           + [50]P2738R1, constexpr cast from void* ([51]PR110344)
!           + [52]P2741R3, User-generated static_assert messages
!             ([53]PR110348)
!           + [54]P2169R4, Placeholder variables with no name ([55]PR110349)
!           + [56]P2864R2, Removing deprecated arithmetic conversion on
              enumerations
!           + [57]P2748R5, Disallow binding a returned reference to a
!             temporary ([58]PR114455)
!           + [59]P2809R3, Trivial infinite loops are not undefined behavior
!             ([60]PR114462)
       * Several C++23 features have been implemented:
!           + [61]P0847R7, Deducing this ([62]PR102609)
!           + [63]P2280R4, Using unknown references in constant expressions
!             ([64]PR106650)
!           + [65]P2564R3, consteval needs to propagate up ([66]PR107687)
!           + [67]P2582R1, Class template argument deduction from inherited
!             constructors ([68]PR106653)
       * Several C++ Defect Reports have been resolved, e.g.:
!           + [69]DR 532, Member/nonmember operator template partial
              ordering
!           + [70]DR 976, Deduction for const T& conversion operators
!           + [71]DR 2262, Attributes for asm-definition
!           + [72]DR 2359, Unintended copy initialization with designated
              initializers
!           + [73]DR 2386, tuple_size requirements for structured binding
!           + [74]DR 2406, [[fallthrough]] attribute and iteration
              statements
!           + [75]DR 2543, constinit and optimized dynamic initialization
!           + [76]DR 2586, Explicit object parameter for assignment and
              comparison
!           + [77]DR 2735, List-initialization and conversions in overload
              resolution
!           + [78]DR 2799, Inheriting default constructors
       * When a diagnostic occurs involving a C++ template, GCC will now
         quote the source code of the context at which the template is
         instantiated ("required from here"), rather than just print
         filename and line/column numbers.
       * New built-in __type_pack_element to speed up traits such as
!        std::tuple_element ([79]PR100157)
       * goto can cross the initialization of a trivially initialized object
!        with a non-trivial destructor ([80]DR 2256)
       * -Wdangling-reference false positives have been reduced. The warning
         does not warn about std::span-like classes; there is also a new
!        attribute gnu::no_dangling to suppress the warning. See [81]the
         manual for more info.
       * noexcept(expr) is now mangled as per the Itanium ABI
       * the named return value optimization can now be performed even for
         variables declared in an inner block of a function, see the
!        [82]test
       * New -Wnrvo warning, to warn if the named return value optimization
         is not performed although it is allowed by [class.copy.elision].
!        See [83]the manual for more info.
       * The backing array for std::initializer_list has been made static,
!        allowing combining multiple equivalent initializer-lists ([84]git)
       * New -Welaborated-enum-base warning, to warn if an additional
         enum-base is used in an elaborated-type-specifier
!      * Better #include hints for missing headers ([85]PR110164)
       * The arguments of a variable template-id are coerced earlier than
!        before, so various problems are detected earlier ([86]PR89442)
       * -Wmissing-field-initializers is no longer emitted for empty classes
!        ([87]PR110064)
       * The constexpr code now tracks lifetimes in constant evaluation;
         this change helps to detect bugs such as accessing a variable whose
!        lifetime has ended ([88]PR70331, [89]PR96630, [90]PR98675)
       * Array destruction can now be devirtualized
       * In-class member variable template partial specializations are now
!        accepted ([91]PR71954)
       * Improved diagnostic for explicit conversion functions: when a
         conversion doesn't work out only because the conversion function
         necessary to do the conversion couldn't be used because it was
!        marked explicit, explain that to the user ([92]git)
       * Corrected mangling of static/thread_local structured bindings at
!        function/block scope ([93]PR111069)
       * [basic.scope.block]/2 violations are detected even in compound-stmt
         of function-try-block and for block-scope external variables
!        ([94]PR52953)
       * Improved "not a constant expression" diagnostic when taking the
!        address of a non-static constexpr variable ([95]PR91483)
       * Non-dependent simple assignments are checked even in templates
!        ([96]PR18474)
       * Attributes hot and cold can be applied to classes as well. See
!        [97]the manual for more info.
       * Function template constraints, as well as CTAD placeholders, are
         now mangled
!      * Various decltype fixes: [98]PR79620, [99]PR79378, [100]PR83167,
!        [101]PR96917
       * New option -fdiagnostics-all-candidates to note all candidates
         during overload resolution failure
       * -Walloc-size and -Wcalloc-transposed-args warnings are enabled for
         C++ as well
       * The DR 2237 code no longer gives an error, it emits a
         -Wtemplate-id-cdtor warning instead
       * C++ module scanning for named modules is now available, based on
!        the format described in [102]P1689R5, Format for describing
         dependencies of source files. The -fdeps-format=, -fdeps-file=, and
         -fdeps-target= flags may be used to generate dependency
         information. In GCC 14 p1689r5 is the only valid argument for
         -fdeps-format=.
  
!     [103]Runtime Library (libstdc++)
  
       * The libstdc++exp.a library now includes all the Filesystem TS
         symbols from the libstdc++fs.a library. The experimental symbols
*************** Caveats
*** 448,461 ****
       * Added missing functions for float and long double to <cmath>.
       * Using the std::setfill manipulator with std::istream is deprecated.
  
!   [102]D
  
       * Support for the D programming language has been updated to version
         2.108.1 of the language and run-time library. Full changelog for
         this release and previous releases can be found on the
!        [103]dlang.org website.
  
!   [104]Fortran
  
       * The compiler now accepts the -std=f2023 option, which has been
         added in preparation of support of Fortran 2023. This option
--- 451,464 ----
       * Added missing functions for float and long double to <cmath>.
       * Using the std::setfill manipulator with std::istream is deprecated.
  
!   [104]D
  
       * Support for the D programming language has been updated to version
         2.108.1 of the language and run-time library. Full changelog for
         this release and previous releases can be found on the
!        [105]dlang.org website.
  
!   [106]Fortran
  
       * The compiler now accepts the -std=f2023 option, which has been
         added in preparation of support of Fortran 2023. This option
*************** Caveats
*** 465,471 ****
         extension will be generated from free-form source files such as
         .F90 and .fi from fixed-form files such as .F.
  
!   [105]Modula-2
  
       * The automatic dependency generation options: -M, -MD, -MF, -MMD,
         -MP, -MQ and -MT have been implemented in the compiler.
--- 468,474 ----
         extension will be generated from free-form source files such as
         .F90 and .fi from fixed-form files such as .F.
  
!   [107]Modula-2
  
       * The automatic dependency generation options: -M, -MD, -MF, -MMD,
         -MP, -MQ and -MT have been implemented in the compiler.
*************** Caveats
*** 473,479 ****
         implemented to provide compile-time warnings against missing case
         clauses and uninitialized variables respectively.
  
!   [106]Rust
  
       * Experimental support for the Rust programming language has been
         added. The compiler is incomplete, but already supports a subset of
--- 476,482 ----
         implemented to provide compile-time warnings against missing case
         clauses and uninitialized variables respectively.
  
!   [108]Rust
  
       * Experimental support for the Rust programming language has been
         added. The compiler is incomplete, but already supports a subset of
*************** Caveats
*** 482,504 ****
         real-world Rust code yet. However, you can experiment with the
         compiler to run Rust code on #[no_core] targets.
  
! [107]libgccjit
  
       * The libgccjit API gained 6 new entry points:
!           + [108]gcc_jit_type_get_restrict for adding restrict to types
!             ([109]LIBGCCJIT_ABI_25).
            + 4 functions for setting attributes on functions and variables
!             ([110]LIBGCCJIT_ABI_26):
                 o gcc_jit_function_add_attribute
                 o gcc_jit_function_add_string_attribute
                 o gcc_jit_function_add_integer_array_attribute
                 o gcc_jit_lvalue_add_string_attribute
!           + [111]gcc_jit_context_new_sizeof for accessing the size of a
!             type ([112]LIBGCCJIT_ABI_27).
  
! [113]New Targets and Target Specific Improvements
  
!   [114]AArch64
  
       * A number of new CPUs are supported through the -mcpu and -mtune
         options (GCC identifiers in parentheses).
--- 485,507 ----
         real-world Rust code yet. However, you can experiment with the
         compiler to run Rust code on #[no_core] targets.
  
! [109]libgccjit
  
       * The libgccjit API gained 6 new entry points:
!           + [110]gcc_jit_type_get_restrict for adding restrict to types
!             ([111]LIBGCCJIT_ABI_25).
            + 4 functions for setting attributes on functions and variables
!             ([112]LIBGCCJIT_ABI_26):
                 o gcc_jit_function_add_attribute
                 o gcc_jit_function_add_string_attribute
                 o gcc_jit_function_add_integer_array_attribute
                 o gcc_jit_lvalue_add_string_attribute
!           + [113]gcc_jit_context_new_sizeof for accessing the size of a
!             type ([114]LIBGCCJIT_ABI_27).
  
! [115]New Targets and Target Specific Improvements
  
!   [116]AArch64
  
       * A number of new CPUs are supported through the -mcpu and -mtune
         options (GCC identifiers in parentheses).
*************** Caveats
*** 518,524 ****
            + Support is added for the Arm Streaming Matrix Extensions SME
              and SME2 through the +sme and +sme2 extensions to -march=. In
              particular, this includes support for the Beta state of the
!             [115]SME ACLE in the form of a new intrinsics arm_sme.h
              intrinsics header and a number of new keyword attributes to
              manage use of the new Streaming SVE state. For more
              information please refer to the ACLE documentation.
--- 521,527 ----
            + Support is added for the Arm Streaming Matrix Extensions SME
              and SME2 through the +sme and +sme2 extensions to -march=. In
              particular, this includes support for the Beta state of the
!             [117]SME ACLE in the form of a new intrinsics arm_sme.h
              intrinsics header and a number of new keyword attributes to
              manage use of the new Streaming SVE state. For more
              information please refer to the ACLE documentation.
*************** Caveats
*** 546,552 ****
       * Conformance with the ACLE specification is improved and a number of
         features aimed at helping developers deploy Arm architecture
         features are added:
!           + Support for the Beta version of the [116]Function
              Multiversioning Specification. This feature provides
              facilities to annotate functions with attributes that allow
              the compiler to generate multiple versions of the function,
--- 549,555 ----
       * Conformance with the ACLE specification is improved and a number of
         features aimed at helping developers deploy Arm architecture
         features are added:
!           + Support for the Beta version of the [118]Function
              Multiversioning Specification. This feature provides
              facilities to annotate functions with attributes that allow
              the compiler to generate multiple versions of the function,
*************** Caveats
*** 554,561 ****
              available in the system. Please refer to the ACLE
              specification for more details.
            + Support for more ACLE intrinsics in the arm_acle.h header,
!             including the [117]Memory prefetch intrinsics and the
!             [118]Special register intrinsics. This also includes
              intrinsics for the extension to 128-bit system registers,
              enabled through the +d128 extension to -march=.
            + Intrinsics enabled by the +dotprod, +fp16, +fp16fml, +i8mm,
--- 557,564 ----
              available in the system. Please refer to the ACLE
              specification for more details.
            + Support for more ACLE intrinsics in the arm_acle.h header,
!             including the [119]Memory prefetch intrinsics and the
!             [120]Special register intrinsics. This also includes
              intrinsics for the extension to 128-bit system registers,
              enabled through the +d128 extension to -march=.
            + Intrinsics enabled by the +dotprod, +fp16, +fp16fml, +i8mm,
*************** Caveats
*** 563,581 ****
              -march=armv8.2-a or higher to be specified. Likewise, the
              intrinsics enabled by +memtag no longer require
              -march=armv8.5-a.
!           + Support for the [119]NEON-SVE Bridge intrinsics. These are
              intrinsics that allow conversions between NEON and SVE
              vectors, enabled through the inclusion of the
              arm_neon_sve_bridge.h header.
       * The option -mtp= is now supported for changing the TPIDR register
         used for TLS accesses. For more details please refer to the
!        [120]documentation.
  
!   [121]AMD Radeon (GCN)
  
       * Initial support for the AMD Radeon gfx90c (GCN5), gfx1030, gfx1036
         (RDNA2), gfx1100 and gfx1103 (RDNA3) devices has been added. LLVM
!        15+ (assembler and linker) is [122]required to support GFX11.
       * Improved register usage and performance on CDNA Instinct MI100 and
         MI200 series devices.
       * The default device architecture is now gfx900 (Vega).
--- 566,584 ----
              -march=armv8.2-a or higher to be specified. Likewise, the
              intrinsics enabled by +memtag no longer require
              -march=armv8.5-a.
!           + Support for the [121]NEON-SVE Bridge intrinsics. These are
              intrinsics that allow conversions between NEON and SVE
              vectors, enabled through the inclusion of the
              arm_neon_sve_bridge.h header.
       * The option -mtp= is now supported for changing the TPIDR register
         used for TLS accesses. For more details please refer to the
!        [122]documentation.
  
!   [123]AMD Radeon (GCN)
  
       * Initial support for the AMD Radeon gfx90c (GCN5), gfx1030, gfx1036
         (RDNA2), gfx1100 and gfx1103 (RDNA3) devices has been added. LLVM
!        15+ (assembler and linker) is [124]required to support GFX11.
       * Improved register usage and performance on CDNA Instinct MI100 and
         MI200 series devices.
       * The default device architecture is now gfx900 (Vega).
*************** Caveats
*** 583,596 ****
         from a future release. The default compiler configuration no longer
         uses Fiji as the default device, and no longer includes the Fiji
         libraries. Both can be restored by configuring with
!        [123]--with-arch=fiji .
  
!   [124]arm
  
       * The Cortex-M52 CPU is now supported through the cortex-m52 argument
         to the -mcpu and -mtune options.
  
!   [125]AVR
  
       * On AVR64* and AVR128* devices, read-only data is now located in
         program memory per default and no longer in RAM.
--- 586,599 ----
         from a future release. The default compiler configuration no longer
         uses Fiji as the default device, and no longer includes the Fiji
         libraries. Both can be restored by configuring with
!        [125]--with-arch=fiji .
  
!   [126]arm
  
       * The Cortex-M52 CPU is now supported through the cortex-m52 argument
         to the -mcpu and -mtune options.
  
!   [127]AVR
  
       * On AVR64* and AVR128* devices, read-only data is now located in
         program memory per default and no longer in RAM.
*************** Caveats
*** 606,612 ****
              hardware default for bit-field NVMCTRL_CTRLB.FLMAP.
            + When a non-default block is used, then NVMCTRL_CTRLB.FLMAP
              must be initialized accordingly by hand, or AVR-LibC v2.2 that
!             implements [126]#931 can be used. The latter initializes
              NVMCTRL_CTRLB.FLMAP in the startup code and according to the
              value of __flmap or __RODATA_FLASH_START__.
            + When AVR-LibC with #931 is used, then defining the symbol
--- 609,615 ----
              hardware default for bit-field NVMCTRL_CTRLB.FLMAP.
            + When a non-default block is used, then NVMCTRL_CTRLB.FLMAP
              must be initialized accordingly by hand, or AVR-LibC v2.2 that
!             implements [128]#931 can be used. The latter initializes
              NVMCTRL_CTRLB.FLMAP in the startup code and according to the
              value of __flmap or __RODATA_FLASH_START__.
            + When AVR-LibC with #931 is used, then defining the symbol
*************** __asm (".global __flmap_lock"  "\n\t"
*** 627,633 ****
            + Read-only data is located in output section .rodata, whereas
              it is part of .text when located in RAM.
            + The feature is only available when the compiler is configured
!             with a version of Binutils that implements [127]PR31124, which
              is the case for Binutils v2.42 and up.
            + The implementation consists of two parts:
                1. Binutils supports new emulations avrxmega2_flmap and
--- 630,636 ----
            + Read-only data is located in output section .rodata, whereas
              it is part of .text when located in RAM.
            + The feature is only available when the compiler is configured
!             with a version of Binutils that implements [129]PR31124, which
              is the case for Binutils v2.42 and up.
            + The implementation consists of two parts:
                1. Binutils supports new emulations avrxmega2_flmap and
*************** __asm (".global __flmap_lock"  "\n\t"
*** 635,641 ****
                   to provide adjusted default linker description files.
                   Apart from that, these emulations behave exactly the same
                   like avrxmega2 resp. avrxmega4.
!               2. The compiler uses a [128]device-specs file which links
                   the program with -mavrxmega2_flmap or -mavrxmega2
                   depending on -m[no-]rodata-in-ram; and similar for
                   -mavrxmega4[_flmap].
--- 638,644 ----
                   to provide adjusted default linker description files.
                   Apart from that, these emulations behave exactly the same
                   like avrxmega2 resp. avrxmega4.
!               2. The compiler uses a [130]device-specs file which links
                   the program with -mavrxmega2_flmap or -mavrxmega2
                   depending on -m[no-]rodata-in-ram; and similar for
                   -mavrxmega4[_flmap].
*************** __asm (".global __flmap_lock"  "\n\t"
*** 645,666 ****
       * A new compiler option -m[no-]rodata-in-ram has been added. The
         default is to locate read-only data in program memory for devices
         that support it, e.g. for AVR64* and AVR128* devices as explained
!        above, and for devices from the [129]avrxmega3 and [130]avrtiny
         families.
       * The new built-in macro __AVR_RODATA_IN_RAM__ is supported on all
         devices. It's defined to 0 or 1.
       * A new optimization tries to improve code generation for indirect
!        memory accesses on [131]Reduced Tiny devices. It can be controlled
         by the new compiler option -mfuse-add=level where level may be 0, 1
         or 2.
       * On the Reduced Tiny devices, the meaning of register constraint "w"
         has been changed. It now constrains the registers R24...R31 as is
         the case for all the other devices.
!      * Support for the following devices has been added in v14.3:
            + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
              AVR64SD48.
  
!   [132]IA-32/x86-64
  
       * New compiler option -m[no-]evex512 was added. The compiler switch
         enables/disables 512-bit vector. It will be default on if AVX512F
--- 648,675 ----
       * A new compiler option -m[no-]rodata-in-ram has been added. The
         default is to locate read-only data in program memory for devices
         that support it, e.g. for AVR64* and AVR128* devices as explained
!        above, and for devices from the [131]avrxmega3 and [132]avrtiny
         families.
       * The new built-in macro __AVR_RODATA_IN_RAM__ is supported on all
         devices. It's defined to 0 or 1.
       * A new optimization tries to improve code generation for indirect
!        memory accesses on [133]Reduced Tiny devices. It can be controlled
         by the new compiler option -mfuse-add=level where level may be 0, 1
         or 2.
       * On the Reduced Tiny devices, the meaning of register constraint "w"
         has been changed. It now constrains the registers R24...R31 as is
         the case for all the other devices.
!      * Support for the following devices has been added in GCC 14.3:
            + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
              AVR64SD48.
+      * Support for the following devices has been added in GCC 14.4:
+           + AVR32DA28S, AVR32DA32S, AVR32DA48S, AVR64DA28S, AVR64DA32S,
+             AVR64DA48S AVR64DA64S, AVR128DA28S, AVR128DA32S, AVR128DA48S,
+             AVR128DA64S, AVR32EB14, AVR32EB20, AVR32EB28, AVR32EB32,
+             AVR16LA14, AVR16LA20, AVR16LA28, AVR16LA32, AVR32LA14,
+             AVR32LA20, AVR32LA28, AVR32LA32.
  
!   [134]IA-32/x86-64
  
       * New compiler option -m[no-]evex512 was added. The compiler switch
         enables/disables 512-bit vector. It will be default on if AVX512F
*************** __asm (".global __flmap_lock"  "\n\t"
*** 693,721 ****
       * New ISA extension support for Intel USER_MSR was added. USER_MSR
         intrinsics are available via the -muser_msr compiler switch.
       * GCC now supports the Intel CPU named Clearwater Forest through
!        -march=clearwaterforest. Based on Sierra Forest, the switch further
!        enables the AVX-VNNI-INT16, PREFETCHI, SHA512, SM3, SM4 and
!        USER_MSR ISA extensions.
       * GCC now supports the Intel CPU named Gracemont through
!        -march=gracemont. Gracemont is based on Alder Lake.
       * GCC now supports the Intel CPU named Arrow Lake through
!        -march=arrowlake. Based on Alder Lake, the switch further enables
!        the AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT8 and CMPccXADD ISA
!        extensions.
       * GCC now supports the Intel CPU named Arrow Lake S through
!        -march=arrowlake-s. Based on Arrow Lake, the switch further enables
!        the AVX-VNNI-INT16, SHA512, SM3 and SM4 ISA extensions.
       * GCC now supports the Intel CPU named Lunar Lake through
!        -march=lunarlake. Lunar Lake is based on Arrow Lake S.
       * GCC now supports the Intel CPU named Panther Lake through
!        -march=pantherlake. Based on Arrow Lake S, the switch further
!        enables the PREFETCHI ISA extensions.
       * Xeon Phi CPUs support (a.k.a. Knight Landing and Knight Mill) are
         marked as deprecated. GCC will emit a warning when using the
         -mavx5124fmaps, -mavx5124vnniw, -mavx512er, -mavx512pf,
         -mprefetchwt1, -march=knl, -march=knm, -mtune=knl or -mtune=knm
         compiler switches. Support will be removed in GCC 15.
!      * [133]Hardware-assisted AddressSanitizer now works for the x86-64
         target with LAM_U57. -fsanitize=hwaddress will enable -mlam=u57 by
         default.
       * GCC now supports AMD CPUs based on the znver5 core via
--- 702,738 ----
       * New ISA extension support for Intel USER_MSR was added. USER_MSR
         intrinsics are available via the -muser_msr compiler switch.
       * GCC now supports the Intel CPU named Clearwater Forest through
!        -march=clearwaterforest. Based on Sierra Forest, the switch in
!        addition enables the AVX-VNNI-INT16, PREFETCHI, SHA512, SM3, SM4
!        and USER_MSR ISA extensions. Since GCC 14.4, KL and WIDEKL are not
!        enabled any longer.
       * GCC now supports the Intel CPU named Gracemont through
!        -march=gracemont. Gracemont is based on Alder Lake. Since GCC 14.4,
!        CLDEMOTE is not enabled any longer.
       * GCC now supports the Intel CPU named Arrow Lake through
!        -march=arrowlake. Based on Alder Lake, the switch in addition
!        enables the AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT8 and CMPccXADD
!        ISA extensions. Since GCC 14.4, CLDEMOTE is not enabled any longer.
       * GCC now supports the Intel CPU named Arrow Lake S through
!        -march=arrowlake-s. Based on Arrow Lake, the switch in addition
!        enables the AVX-VNNI-INT16, SHA512, SM3 and SM4 ISA extensions.
!        Since GCC 14.4, CLDEMOTE is not enabled any longer.
       * GCC now supports the Intel CPU named Lunar Lake through
!        -march=lunarlake. Lunar Lake is based on Arrow Lake S. Since GCC
!        14.4, CLDEMOTE is not enabled any longer.
       * GCC now supports the Intel CPU named Panther Lake through
!        -march=pantherlake. Based on Arrow Lake S, the switch in addition
!        further enables the PREFETCHI ISA extensions. Since GCC 14.4,
!        CLDEMOTE, KL, PREFETCHI and WIDEKL are not enabled any longer.
!      * Since GCC 14.4, CLDEMOTE is not enabled through the compiler
!        switches -march=alderlake, -march=meteorlake and -march=raptorlake
!        any longer.
       * Xeon Phi CPUs support (a.k.a. Knight Landing and Knight Mill) are
         marked as deprecated. GCC will emit a warning when using the
         -mavx5124fmaps, -mavx5124vnniw, -mavx512er, -mavx512pf,
         -mprefetchwt1, -march=knl, -march=knm, -mtune=knl or -mtune=knm
         compiler switches. Support will be removed in GCC 15.
!      * [135]Hardware-assisted AddressSanitizer now works for the x86-64
         target with LAM_U57. -fsanitize=hwaddress will enable -mlam=u57 by
         default.
       * GCC now supports AMD CPUs based on the znver5 core via
*************** __asm (".global __flmap_lock"  "\n\t"
*** 729,750 ****
         arithmetic support of these types instead of __FLT16_MAX__(or other
         similar Macros).
  
!   [134]MCore
  
       * Bitfields are now signed by default per GCC policy. If you need
         bitfields to be unsigned, use -funsigned-bitfields.
  
!   [135]LoongArch
  
!      * Support for the following [136]-march parameters has been added:
            + la64v1.0
            + la64v1.1
            + la664
         It is now recommended to use -march=la64v1.0 as the only compiler
         option to describe the target ISA when building binaries for
         distribution. For more information on LoongArch ISA versions, see
!        [137]Toolchain Conventions of the LoongArch(TM) Architecture.
!      * Support for the following [138]-mtune parameters has been added:
            + generic
            + la664
       * New ISA Extension
--- 746,767 ----
         arithmetic support of these types instead of __FLT16_MAX__(or other
         similar Macros).
  
!   [136]MCore
  
       * Bitfields are now signed by default per GCC policy. If you need
         bitfields to be unsigned, use -funsigned-bitfields.
  
!   [137]LoongArch
  
!      * Support for the following [138]-march parameters has been added:
            + la64v1.0
            + la64v1.1
            + la664
         It is now recommended to use -march=la64v1.0 as the only compiler
         option to describe the target ISA when building binaries for
         distribution. For more information on LoongArch ISA versions, see
!        [139]Toolchain Conventions of the LoongArch(TM) Architecture.
!      * Support for the following [140]-mtune parameters has been added:
            + generic
            + la664
       * New ISA Extension
*************** __asm (".global __flmap_lock"  "\n\t"
*** 781,804 ****
              1 or undefined (iff __loongarch_version_major is undefined).
            + __FLOAT128_TYPE: It's defined to 1.
       * New Intrinsics
!           + [139]__builtin_thread_pointer
!           + [140]__lsx_*
!           + [141]__lasx_*
!           + [142]__frecipe_{s/d} and __frsqrte_{s/d}
       * New Compiler Option
!           + [143]-m[no-]lsx
!           + [144]-m[no-]lasx
!           + [145]-m[no-]frecipe
!           + [146]-m[no-]div32
!           + [147]-m[no-]lam-bh
!           + [148]-m[no-]lamcas
!           + [149]-m[no-]ld-seq-sa
!           + [150]-mrecip=
!           + [151]-m[no-]recip
!           + [152]-mexplicit-relocs={none,always,auto}
!           + [153]-m[no-]relax
!           + [154]-m[no-]pass-mrelax-to-as
!           + [155]-mtls-dialect={trad,desc}
       * Support for Ada and D.
       * Support for libffi.
       * Enable -free by default at -O2 or higher.
--- 798,821 ----
              1 or undefined (iff __loongarch_version_major is undefined).
            + __FLOAT128_TYPE: It's defined to 1.
       * New Intrinsics
!           + [141]__builtin_thread_pointer
!           + [142]__lsx_*
!           + [143]__lasx_*
!           + [144]__frecipe_{s/d} and __frsqrte_{s/d}
       * New Compiler Option
!           + [145]-m[no-]lsx
!           + [146]-m[no-]lasx
!           + [147]-m[no-]frecipe
!           + [148]-m[no-]div32
!           + [149]-m[no-]lam-bh
!           + [150]-m[no-]lamcas
!           + [151]-m[no-]ld-seq-sa
!           + [152]-mrecip=
!           + [153]-m[no-]recip
!           + [154]-mexplicit-relocs={none,always,auto}
!           + [155]-m[no-]relax
!           + [156]-m[no-]pass-mrelax-to-as
!           + [157]-mtls-dialect={trad,desc}
       * Support for Ada and D.
       * Support for libffi.
       * Enable -free by default at -O2 or higher.
*************** __asm (".global __flmap_lock"  "\n\t"
*** 809,823 ****
       * Optimizing built-in functions for memory-model-aware atomic
         operations using hierarchical dbar instructions.
       * TLS descriptors support. It is not enabled by default, and can be
!        enabled with [156]-mtls-dialect=desc. The default behavior can be
         configured with --with-tls=[trad|desc].
  
!   [157]RISC-V
  
       * The SLP and loop vectorizer are now enabled for RISC-V when the
         vector extension is enabled, thanks to Ju-Zhe Zhong from
!        [158]RiVAI, Pan Li from [159]Intel, and Robin Dapp from
!        [160]Ventana Micro for contributing most of the implementation!
       * The -mrvv-max-lmul= option has been introduced for performance
         tuning of the loop vectorizer. The default value is
         -mrvv-max-lmul=m1, which limits the maximum LMUL to 1. The
--- 826,840 ----
       * Optimizing built-in functions for memory-model-aware atomic
         operations using hierarchical dbar instructions.
       * TLS descriptors support. It is not enabled by default, and can be
!        enabled with [158]-mtls-dialect=desc. The default behavior can be
         configured with --with-tls=[trad|desc].
  
!   [159]RISC-V
  
       * The SLP and loop vectorizer are now enabled for RISC-V when the
         vector extension is enabled, thanks to Ju-Zhe Zhong from
!        [160]RiVAI, Pan Li from Intel, and Robin Dapp from [161]Ventana
!        Micro for contributing most of the implementation.
       * The -mrvv-max-lmul= option has been introduced for performance
         tuning of the loop vectorizer. The default value is
         -mrvv-max-lmul=m1, which limits the maximum LMUL to 1. The
*************** __asm (".global __flmap_lock"  "\n\t"
*** 825,864 ****
         LMUL value based on register pressure.
       * Atomic code generation has been improved and is now in conformance
         with the latest psABI specification, thanks to Patrick O'Neill from
!        [161]Rivos.
!      * Support for the vector intrinsics as specified in [162]version 1.0
         of the RISC-V vector intrinsic specification.
       * Support for the experimental vector crypto intrinsics as specified
!        in [163]RISC-V vector intrinsic specification, thanks to Feng Wang
!        et al. from [164]ESWIN Computing
       * Support for the T-head vector intrinsics.
       * Support for the scalar bitmanip and scalar crypto intrinsics,
!        thanks to Liao Shihua from [165]PLCT.
       * Support for the large code model via option -mcmodel=large, thanks
!        to Kuan-Lin Chen from [166]Andes Technology.
       * Support for the standard vector calling convention variant, thanks
!        to Lehua Ding from [167]RiVAI.
       * Supports the target attribute, which allows users to compile a
         function with specific extensions.
!      * -march= option no longer requires the architecture string to be in
!        canonical order, with only a few constraints remaining: the
         architecture string must start with rv[32|64][i|g|e], and must use
         an underscore as the separator after a multi-letter extension.
!      * -march=help option has been introduced to dump all supported
!        extensions.
       * Added experimental support for the -mrvv-vector-bits=zvl option and
         the riscv_rvv_vector_bits attribute, which specify a fixed length
         for scalable vector types. This option is optimized for specific
         vector core implementations; however, the code generated with this
         option is NOT portable between the core with different VLEN, thanks
!        to Pan Li from [168]Intel.
!      * Support for TLS descriptors has been introduced, which can be
!        enabled by the -mtls-dialect=desc option. The default behavior can
!        be configured with --with-tls=[trad|desc].
!      * Support for the TLS descriptors, this can be enabled by
!        -mtls-dialect=desc and the default behavior can be configure by
!        --with-tls=[trad|desc], and this feature require glibc 2.40, thanks
!        to Tatsuyuki Ishi from [169]Blue Whale Systems.
       * Support for the following standard extensions has been added:
            + Vector crypto extensions:
                 o Zvbb
--- 842,877 ----
         LMUL value based on register pressure.
       * Atomic code generation has been improved and is now in conformance
         with the latest psABI specification, thanks to Patrick O'Neill from
!        [162]Rivos.
!      * Support for the vector intrinsics as specified in [163]version 1.0
         of the RISC-V vector intrinsic specification.
       * Support for the experimental vector crypto intrinsics as specified
!        in [164]RISC-V vector intrinsic specification, thanks to Feng Wang
!        et al. from [165]ESWIN Computing
       * Support for the T-head vector intrinsics.
       * Support for the scalar bitmanip and scalar crypto intrinsics,
!        thanks to Liao Shihua from [166]PLCT.
       * Support for the large code model via option -mcmodel=large, thanks
!        to Kuan-Lin Chen from [167]Andes Technology.
       * Support for the standard vector calling convention variant, thanks
!        to Lehua Ding from [168]RiVAI.
       * Supports the target attribute, which allows users to compile a
         function with specific extensions.
!      * The -march= option no longer requires the architecture string to be
!        in canonical order, with only a few constraints remaining: the
         architecture string must start with rv[32|64][i|g|e], and must use
         an underscore as the separator after a multi-letter extension.
!      * -march=help has been introduced to list all supported extensions.
       * Added experimental support for the -mrvv-vector-bits=zvl option and
         the riscv_rvv_vector_bits attribute, which specify a fixed length
         for scalable vector types. This option is optimized for specific
         vector core implementations; however, the code generated with this
         option is NOT portable between the core with different VLEN, thanks
!        to Pan Li from Intel.
!      * Support for TLS descriptors has been introduced. It can be enabled
!        by the -mtls-dialect=desc option. The default behavior can be
!        configured with --with-tls=[trad|desc]. This feature requires glibc
!        2.40. Thanks to Tatsuyuki Ishi from [169]Blue Whale Systems.
       * Support for the following standard extensions has been added:
            + Vector crypto extensions:
                 o Zvbb
*************** void test (void)
*** 1098,1104 ****
     provided this notice is preserved.
  
     These pages are [211]maintained by the GCC team. Last modified
!    2025-05-23.
  
  References
  
--- 1111,1117 ----
     provided this notice is preserved.
  
     These pages are [211]maintained by the GCC team. Last modified
!    2026-04-30.
  
  References
  
*************** References
*** 1140,1275 ****
    36. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_ugn/Alphabetical-List-of-All-Switches.html#index--gnateH-_0028gcc_0029
    37. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Pragma-Storage_005fModel.html
    38. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/String-interpolation.html
!   39. https://gcc.gnu.org/gcc-14/changes.html#c-family
!   40. https://gcc.gnu.org/gcc-14/changes.html#c
!   41. https://gcc.gnu.org/gcc-14/changes.html#cxx
!   42. https://wg21.link/P1854R4
!   43. https://gcc.gnu.org/PR110341
!   44. https://wg21.link/P2752R3
!   45. https://gcc.gnu.org/PR110346
!   46. https://wg21.link/P2361R6
!   47. https://gcc.gnu.org/PR110342
!   48. https://wg21.link/P2738R1
!   49. https://gcc.gnu.org/PR110344
!   50. https://wg21.link/P2741R3
!   51. https://gcc.gnu.org/PR110348
!   52. https://wg21.link/P2169R4
!   53. https://gcc.gnu.org/PR110349
!   54. https://wg21.link/P2864R2
!   55. https://wg21.link/P2748R5
!   56. https://gcc.gnu.org/PR114455
!   57. https://wg21.link/P2809R3
!   58. https://gcc.gnu.org/PR114462
!   59. https://wg21.link/P0847R7
!   60. https://gcc.gnu.org/PR102609
!   61. https://wg21.link/P2280R4
!   62. https://gcc.gnu.org/PR106650
!   63. https://wg21.link/P2564R3
!   64. https://gcc.gnu.org/PR107687
!   65. https://wg21.link/P2582R1
!   66. https://gcc.gnu.org/PR106653
!   67. https://wg21.link/cwg532
!   68. https://wg21.link/cwg976
!   69. https://wg21.link/cwg2262
!   70. https://wg21.link/cwg2359
!   71. https://wg21.link/cwg2386
!   72. https://wg21.link/cwg2406
!   73. https://wg21.link/cwg2543
!   74. https://wg21.link/cwg2586
!   75. https://wg21.link/cwg2735
!   76. https://wg21.link/cwg2799
!   77. https://gcc.gnu.org/PR100157
!   78. https://cplusplus.github.io/CWG/issues/2256.html
!   79. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
!   80. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/testsuite/g%2B%2B.dg/opt/nrv23.C;h=9e1253cd830a84ad4de5ff3076a07c543afe344f;hb=7e0b65b239c3a0d68ce94896b236b03de666ffd6
!   81. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Warning-Options.html#index-Wnrvo
!   82. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=4d935f52b0d5c00fcc154461b87415ebd8791a94
!   83. https://gcc.gnu.org/PR110164
!   84. https://gcc.gnu.org/PR89442
!   85. https://gcc.gnu.org/PR110064
!   86. https://gcc.gnu.org/PR70331
!   87. https://gcc.gnu.org/PR96630
!   88. https://gcc.gnu.org/PR98675
!   89. https://gcc.gnu.org/PR71954
!   90. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=85ad41a494e31311f8a6b2dbe930a128c5e85840
!   91. https://gcc.gnu.org/PR111069
!   92. https://gcc.gnu.org/PR52953
!   93. https://gcc.gnu.org/PR91483
!   94. https://gcc.gnu.org/PR18474
!   95. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Attributes.html#index-cold-type-attribute
!   96. https://gcc.gnu.org/PR79620
!   97. https://gcc.gnu.org/PR79378
!   98. https://gcc.gnu.org/PR83167
!   99. https://gcc.gnu.org/PR96917
!  100. https://wg21.link/P1689R5
!  101. https://gcc.gnu.org/gcc-14/changes.html#libstdcxx
!  102. https://gcc.gnu.org/gcc-14/changes.html#d
!  103. https://dlang.org/changelog/2.108.1.html
!  104. https://gcc.gnu.org/gcc-14/changes.html#fortran
!  105. https://gcc.gnu.org/gcc-14/changes.html#modula2
!  106. https://gcc.gnu.org/gcc-14/changes.html#rust
!  107. https://gcc.gnu.org/gcc-14/changes.html#jit
!  108. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/types.html#c.gcc_jit_type_get_restrict
!  109. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-25
!  110. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-26
!  111. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_sizeof
!  112. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-27
!  113. https://gcc.gnu.org/gcc-14/changes.html#targets
!  114. https://gcc.gnu.org/gcc-14/changes.html#aarch64
!  115. https://github.com/ARM-software/acle/blob/main/main/acle.md#sme-language-extensions-and-intrinsics
!  116. https://github.com/ARM-software/acle/blob/main/main/acle.md#function-multi-versioning
!  117. https://github.com/ARM-software/acle/blob/main/main/acle.md#memory-prefetch-intrinsics
!  118. https://github.com/ARM-software/acle/blob/main/main/acle.md#special-register-intrinsics
!  119. https://github.com/ARM-software/acle/blob/main/main/acle.md#neon-sve-bridge
!  120. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AArch64-Options.html
!  121. https://gcc.gnu.org/gcc-14/changes.html#amdgcn
!  122. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
!  123. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
!  124. https://gcc.gnu.org/gcc-14/changes.html#arm
!  125. https://gcc.gnu.org/gcc-14/changes.html#avr
!  126. https://github.com/avrdudes/avr-libc/issues/931
!  127. https://sourceware.org/PR31124
!  128. https://gcc.gnu.org/wiki/avr-gcc#spec-files
!  129. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrxmega3
!  130. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
!  131. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
!  132. https://gcc.gnu.org/gcc-14/changes.html#x86
!  133. https://gcc.gnu.org/gcc-11/changes.html
!  134. https://gcc.gnu.org/gcc-14/changes.html#mcore
!  135. https://gcc.gnu.org/gcc-14/changes.html#loongarch
!  136. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-march-7
!  137. https://github.com/loongson/la-toolchain-conventions/
!  138. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtune-8
!  139. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
!  140. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-SX-Vector-Intrinsics.html
!  141. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-ASX-Vector-Intrinsics.html
!  142. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
!  143. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
!  144. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
!  145. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mfrecipe
!  146. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mdiv32
!  147. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlam-bh
!  148. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlamcas
!  149. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mld-seq-sa
!  150. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip_003dopt
!  151. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip
!  152. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mexplicit-relocs-1
!  153. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrelax-2
!  154. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mpass-mrelax-to-as
!  155. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
!  156. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
!  157. https://gcc.gnu.org/gcc-14/changes.html#riscv
!  158. https://rivai-ic.com.cn/
!  159. https://www.intel.com/
!  160. https://www.ventanamicro.com/
!  161. https://www.rivosinc.com/
!  162. https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v1.0.x
!  163. https://github.com/riscv-non-isa/rvv-intrinsic-doc/pull/234
!  164. https://eswincomputing.com/
!  165. https://plctlab.org/
!  166. https://www.andestech.com/
!  167. https://rivai-ic.com.cn/
!  168. https://www.intel.com/
   169. https://bluewhale.systems/
   170. https://gcc.gnu.org/gcc-14/changes.html#sparc
   171. https://gcc.gnu.org/gcc-14/changes.html#analyzer
--- 1153,1288 ----
    36. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_ugn/Alphabetical-List-of-All-Switches.html#index--gnateH-_0028gcc_0029
    37. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Pragma-Storage_005fModel.html
    38. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/String-interpolation.html
!   39. https://gcc.gnu.org/onlinedocs/gnat_rm/Fixed-lower-bounds-for-array-types-and-subtypes.html
!   40. https://github.com/AdaCore/ada-spark-rfcs/blob/master/features/rfc-fixed-lower-bound.rst
!   41. https://gcc.gnu.org/gcc-14/changes.html#c-family
!   42. https://gcc.gnu.org/gcc-14/changes.html#c
!   43. https://gcc.gnu.org/gcc-14/changes.html#cxx
!   44. https://wg21.link/P1854R4
!   45. https://gcc.gnu.org/PR110341
!   46. https://wg21.link/P2752R3
!   47. https://gcc.gnu.org/PR110346
!   48. https://wg21.link/P2361R6
!   49. https://gcc.gnu.org/PR110342
!   50. https://wg21.link/P2738R1
!   51. https://gcc.gnu.org/PR110344
!   52. https://wg21.link/P2741R3
!   53. https://gcc.gnu.org/PR110348
!   54. https://wg21.link/P2169R4
!   55. https://gcc.gnu.org/PR110349
!   56. https://wg21.link/P2864R2
!   57. https://wg21.link/P2748R5
!   58. https://gcc.gnu.org/PR114455
!   59. https://wg21.link/P2809R3
!   60. https://gcc.gnu.org/PR114462
!   61. https://wg21.link/P0847R7
!   62. https://gcc.gnu.org/PR102609
!   63. https://wg21.link/P2280R4
!   64. https://gcc.gnu.org/PR106650
!   65. https://wg21.link/P2564R3
!   66. https://gcc.gnu.org/PR107687
!   67. https://wg21.link/P2582R1
!   68. https://gcc.gnu.org/PR106653
!   69. https://wg21.link/cwg532
!   70. https://wg21.link/cwg976
!   71. https://wg21.link/cwg2262
!   72. https://wg21.link/cwg2359
!   73. https://wg21.link/cwg2386
!   74. https://wg21.link/cwg2406
!   75. https://wg21.link/cwg2543
!   76. https://wg21.link/cwg2586
!   77. https://wg21.link/cwg2735
!   78. https://wg21.link/cwg2799
!   79. https://gcc.gnu.org/PR100157
!   80. https://cplusplus.github.io/CWG/issues/2256.html
!   81. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
!   82. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/testsuite/g%2B%2B.dg/opt/nrv23.C;h=9e1253cd830a84ad4de5ff3076a07c543afe344f;hb=7e0b65b239c3a0d68ce94896b236b03de666ffd6
!   83. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Warning-Options.html#index-Wnrvo
!   84. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=4d935f52b0d5c00fcc154461b87415ebd8791a94
!   85. https://gcc.gnu.org/PR110164
!   86. https://gcc.gnu.org/PR89442
!   87. https://gcc.gnu.org/PR110064
!   88. https://gcc.gnu.org/PR70331
!   89. https://gcc.gnu.org/PR96630
!   90. https://gcc.gnu.org/PR98675
!   91. https://gcc.gnu.org/PR71954
!   92. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=85ad41a494e31311f8a6b2dbe930a128c5e85840
!   93. https://gcc.gnu.org/PR111069
!   94. https://gcc.gnu.org/PR52953
!   95. https://gcc.gnu.org/PR91483
!   96. https://gcc.gnu.org/PR18474
!   97. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Attributes.html#index-cold-type-attribute
!   98. https://gcc.gnu.org/PR79620
!   99. https://gcc.gnu.org/PR79378
!  100. https://gcc.gnu.org/PR83167
!  101. https://gcc.gnu.org/PR96917
!  102. https://wg21.link/P1689R5
!  103. https://gcc.gnu.org/gcc-14/changes.html#libstdcxx
!  104. https://gcc.gnu.org/gcc-14/changes.html#d
!  105. https://dlang.org/changelog/2.108.1.html
!  106. https://gcc.gnu.org/gcc-14/changes.html#fortran
!  107. https://gcc.gnu.org/gcc-14/changes.html#modula2
!  108. https://gcc.gnu.org/gcc-14/changes.html#rust
!  109. https://gcc.gnu.org/gcc-14/changes.html#jit
!  110. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/types.html#c.gcc_jit_type_get_restrict
!  111. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-25
!  112. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-26
!  113. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_sizeof
!  114. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-27
!  115. https://gcc.gnu.org/gcc-14/changes.html#targets
!  116. https://gcc.gnu.org/gcc-14/changes.html#aarch64
!  117. https://github.com/ARM-software/acle/blob/main/main/acle.md#sme-language-extensions-and-intrinsics
!  118. https://github.com/ARM-software/acle/blob/main/main/acle.md#function-multi-versioning
!  119. https://github.com/ARM-software/acle/blob/main/main/acle.md#memory-prefetch-intrinsics
!  120. https://github.com/ARM-software/acle/blob/main/main/acle.md#special-register-intrinsics
!  121. https://github.com/ARM-software/acle/blob/main/main/acle.md#neon-sve-bridge
!  122. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AArch64-Options.html
!  123. https://gcc.gnu.org/gcc-14/changes.html#amdgcn
!  124. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
!  125. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
!  126. https://gcc.gnu.org/gcc-14/changes.html#arm
!  127. https://gcc.gnu.org/gcc-14/changes.html#avr
!  128. https://github.com/avrdudes/avr-libc/issues/931
!  129. https://sourceware.org/PR31124
!  130. https://gcc.gnu.org/wiki/avr-gcc#spec-files
!  131. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrxmega3
!  132. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
!  133. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
!  134. https://gcc.gnu.org/gcc-14/changes.html#x86
!  135. https://gcc.gnu.org/gcc-11/changes.html
!  136. https://gcc.gnu.org/gcc-14/changes.html#mcore
!  137. https://gcc.gnu.org/gcc-14/changes.html#loongarch
!  138. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-march-7
!  139. https://github.com/loongson/la-toolchain-conventions/
!  140. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtune-8
!  141. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
!  142. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-SX-Vector-Intrinsics.html
!  143. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-ASX-Vector-Intrinsics.html
!  144. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
!  145. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
!  146. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
!  147. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mfrecipe
!  148. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mdiv32
!  149. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlam-bh
!  150. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlamcas
!  151. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mld-seq-sa
!  152. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip_003dopt
!  153. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip
!  154. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mexplicit-relocs-1
!  155. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrelax-2
!  156. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mpass-mrelax-to-as
!  157. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
!  158. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
!  159. https://gcc.gnu.org/gcc-14/changes.html#riscv
!  160. https://rivai-ic.com.cn/
!  161. https://www.ventanamicro.com/
!  162. https://www.rivosinc.com/
!  163. https://github.com/riscv-non-isa/riscv-rvv-intrinsic-doc/tree/v0.11.x
!  164. https://github.com/riscv-non-isa/riscv-rvv-intrinsic-doc/pull/234
!  165. https://eswincomputing.com/
!  166. https://plctlab.org/
!  167. https://www.andestech.com/
!  168. https://rivai-ic.com.cn/
   169. https://bluewhale.systems/
   170. https://gcc.gnu.org/gcc-14/changes.html#sparc
   171. https://gcc.gnu.org/gcc-14/changes.html#analyzer
*************** http://gcc.gnu.org/gcc-13/index.html
*** 1318,1340 ****
  
                               GCC 13 Release Series
  
!    May 21, 2024
  
!    The GCC developers are pleased to announce the release of GCC 13.3.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 13.2 relative to previous releases of GCC.
  
  Release History
  
     GCC 13.3
!           May 21, 2024 ([1]changes, [2]documentation)
  
     GCC 13.2
!           July 27, 2023 ([3]changes, [4]documentation)
  
     GCC 13.1
!           April 26, 2023 ([5]changes, [6]documentation)
  
  References and Acknowledgements
  
--- 1331,1356 ----
  
                               GCC 13 Release Series
  
!    June 5, 2025
  
!    The GCC developers are pleased to announce the release of GCC 13.4.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 13.3 relative to previous releases of GCC.
  
  Release History
  
+    GCC 13.4
+           June 5, 2025 ([1]changes, [2]documentation)
+ 
     GCC 13.3
!           May 21, 2024 ([3]changes, [4]documentation)
  
     GCC 13.2
!           July 27, 2023 ([5]changes, [6]documentation)
  
     GCC 13.1
!           April 26, 2023 ([7]changes, [8]documentation)
  
  References and Acknowledgements
  
*************** References and Acknowledgements
*** 1344,1392 ****
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [7]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [8]GCC project
!    web site or contact the [9]GCC development mailing list.
  
!    To obtain GCC please use [10]our mirror sites or [11]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [12]GCC manuals. If that fails, the
!     [13]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [14]gcc@gcc.gnu.org. All of [15]our lists have public
      archives.
  
!    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [17]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. https://gcc.gnu.org/gcc-13/changes.html
!    2. https://gcc.gnu.org/onlinedocs/13.3.0/
     3. https://gcc.gnu.org/gcc-13/changes.html
!    4. https://gcc.gnu.org/onlinedocs/13.2.0/
     5. https://gcc.gnu.org/gcc-13/changes.html
!    6. https://gcc.gnu.org/onlinedocs/13.1.0/
!    7. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Contributors.html
!    8. https://gcc.gnu.org/index.html
!    9. mailto:gcc@gcc.gnu.org
!   10. https://gcc.gnu.org/mirrors.html
!   11. https://gcc.gnu.org/git.html
!   12. https://gcc.gnu.org/onlinedocs/
!   13. mailto:gcc-help@gcc.gnu.org
!   14. mailto:gcc@gcc.gnu.org
!   15. https://gcc.gnu.org/lists.html
!   16. https://www.fsf.org/
!   17. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-13/changes.html
  
--- 1360,1410 ----
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [9]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [10]GCC
!    project web site or contact the [11]GCC development mailing list.
  
!    To obtain GCC please use [12]our mirror sites or [13]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [14]GCC manuals. If that fails, the
!     [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
      archives.
  
!    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [19]maintained by the GCC team. Last modified
!    2025-06-05.
  
  References
  
     1. https://gcc.gnu.org/gcc-13/changes.html
!    2. https://gcc.gnu.org/onlinedocs/13.4.0/
     3. https://gcc.gnu.org/gcc-13/changes.html
!    4. https://gcc.gnu.org/onlinedocs/13.3.0/
     5. https://gcc.gnu.org/gcc-13/changes.html
!    6. https://gcc.gnu.org/onlinedocs/13.2.0/
!    7. https://gcc.gnu.org/gcc-13/changes.html
!    8. https://gcc.gnu.org/onlinedocs/13.1.0/
!    9. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Contributors.html
!   10. https://gcc.gnu.org/index.html
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/mirrors.html
!   13. https://gcc.gnu.org/git.html
!   14. https://gcc.gnu.org/onlinedocs/
!   15. mailto:gcc-help@gcc.gnu.org
!   16. mailto:gcc@gcc.gnu.org
!   17. https://gcc.gnu.org/lists.html
!   18. https://www.fsf.org/
!   19. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-13/changes.html
  
*************** Caveats
*** 1595,1610 ****
            + [56]P2266R3, Simpler implicit move ([57]PR101165)
            + [58]P2468R2, The Equality Operator You Are Looking For
              ([59]PR106644)
!           + [60]P2362R3, Remove non-encodable
!             wide character literals and multicharacter wide character lite
!             rals ([61]PR106647)
            + [62]P2448R2, Relaxing some constexpr restrictions
              ([63]PR106649)
            + [64]P1467R9, Extended floating-point types and standard names
              ([65]PR106652)
            + [66]P1774R8, Portable assumptions ([67]PR106654)
!           + [68]P2295R6, Support for
!             UTF-8 as a portable source file encoding ([69]PR106655)
            + [70]P2589R1, static operator[] ([71]PR107684)
       * New warnings:
            + [72]-Wself-move warns when a value is moved to itself with
--- 1613,1627 ----
            + [56]P2266R3, Simpler implicit move ([57]PR101165)
            + [58]P2468R2, The Equality Operator You Are Looking For
              ([59]PR106644)
!           + [60]P2362R3, Remove non-encodable wide character literals and
!             multicharacter wide character literals ([61]PR106647)
            + [62]P2448R2, Relaxing some constexpr restrictions
              ([63]PR106649)
            + [64]P1467R9, Extended floating-point types and standard names
              ([65]PR106652)
            + [66]P1774R8, Portable assumptions ([67]PR106654)
!           + [68]P2295R6, Support for UTF-8 as a portable source file
!             encoding ([69]PR106655)
            + [70]P2589R1, static operator[] ([71]PR107684)
       * New warnings:
            + [72]-Wself-move warns when a value is moved to itself with
*************** Caveats
*** 1760,1766 ****
  
    [95]AVR
  
!      * Support for the following devices has been added in v13.3:
            + ATtiny102, ATtiny104, ATtiny424, ATtiny426, ATtiny427,
              ATtiny824, ATtiny826, ATtiny827, ATtiny1624, ATtiny1626,
              ATtiny1627, ATtiny3224, ATtiny3226, ATtiny3227, AVR32DD14,
--- 1777,1783 ----
  
    [95]AVR
  
!      * Support for the following devices has been added in GCC 13.3:
            + ATtiny102, ATtiny104, ATtiny424, ATtiny426, ATtiny427,
              ATtiny824, ATtiny826, ATtiny827, ATtiny1624, ATtiny1626,
              ATtiny1627, ATtiny3224, ATtiny3226, ATtiny3227, AVR32DD14,
*************** Caveats
*** 1769,1777 ****
              AVR64DD14, AVR64DD20, AVR64DD28, AVR64DD32, AVR64DU28,
              AVR64DU32, AVR64EA28, AVR64EA32, AVR64EA48, ATA5787, ATA5835,
              ATA5700M322.
!      * Support for the following devices has been added in v13.4:
            + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
              AVR64SD48.
  
    [96]IA-32/x86-64
  
--- 1786,1800 ----
              AVR64DD14, AVR64DD20, AVR64DD28, AVR64DD32, AVR64DU28,
              AVR64DU32, AVR64EA28, AVR64EA32, AVR64EA48, ATA5787, ATA5835,
              ATA5700M322.
!      * Support for the following devices has been added in GCC 13.4:
            + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
              AVR64SD48.
+      * Support for the following devices has been added in GCC 13.5:
+           + AVR32DA28S, AVR32DA32S, AVR32DA48S, AVR64DA28S, AVR64DA32S,
+             AVR64DA48S AVR64DA64S, AVR128DA28S, AVR128DA32S, AVR128DA48S,
+             AVR128DA64S, AVR32EB14, AVR32EB20, AVR32EB28, AVR32EB32,
+             AVR16LA14, AVR16LA20, AVR16LA28, AVR16LA32, AVR32LA14,
+             AVR32LA20, AVR32LA28, AVR32LA32.
  
    [96]IA-32/x86-64
  
*************** Caveats
*** 1801,1823 ****
       * New ISA extension support for Intel RAO-INT was added. RAO-INT
         intrinsics are available via the -mraoint compiler switch.
       * GCC now supports the Intel CPU named Raptor Lake through
!        -march=raptorlake. Raptor Lake is based on Alder Lake.
       * GCC now supports the Intel CPU named Meteor Lake through
!        -march=meteorlake. Meteor Lake is based on Alder Lake.
       * GCC now supports the Intel CPU named Sierra Forest through
         -march=sierraforest. Based on ISA extensions enabled on Alder Lake,
!        the switch further enables the AVX-IFMA, AVX-NE-CONVERT,
!        AVX-VNNI-INT8, CMPccXADD, ENQCMD and UINTR ISA extensions.
       * GCC now supports the Intel CPU named Grand Ridge through
!        -march=grandridge. Grand Ridge is based on Sierra Forest.
       * GCC now supports the Intel CPU named Emerald Rapids through
         -march=emeraldrapids. Emerald Rapids is based on Sapphire Rapids.
       * GCC now supports the Intel CPU named Granite Rapids through
!        -march=graniterapids. Based on Sapphire Rapids, the switch further
!        enables the AMX-FP16 and PREFETCHI ISA extensions.
       * GCC now supports the Intel CPU named Granite Rapids D through
!        -march=graniterapids-d. Based on Granite Rapids, the switch further
!        enables the AMX-COMPLEX ISA extensions.
       * GCC now supports AMD CPUs based on the znver4 core via
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
--- 1824,1854 ----
       * New ISA extension support for Intel RAO-INT was added. RAO-INT
         intrinsics are available via the -mraoint compiler switch.
       * GCC now supports the Intel CPU named Raptor Lake through
!        -march=raptorlake. Raptor Lake is based on Alder Lake. Since GCC
!        13.5, CLDEMOTE is not enabled any longer.
       * GCC now supports the Intel CPU named Meteor Lake through
!        -march=meteorlake. Meteor Lake is based on Alder Lake. Since GCC
!        13.5, CLDEMOTE is not enabled any longer.
       * GCC now supports the Intel CPU named Sierra Forest through
         -march=sierraforest. Based on ISA extensions enabled on Alder Lake,
!        the switch in addition enables the AVX-IFMA, AVX-NE-CONVERT,
!        AVX-VNNI-INT8 and CMPccXADD ISA extensions. Since GCC 13.2, ENQCMD
!        and UINTR are further enabled.
       * GCC now supports the Intel CPU named Grand Ridge through
!        -march=grandridge. Based on Sierra Forest, the switch in addition
!        enables the RAO-INT ISA extensions. Since GCC 13.2, ENQCMD and
!        UINTR are further enabled. Since GCC 13.3, RAO-INT is not enabled
!        any longer.
       * GCC now supports the Intel CPU named Emerald Rapids through
         -march=emeraldrapids. Emerald Rapids is based on Sapphire Rapids.
       * GCC now supports the Intel CPU named Granite Rapids through
!        -march=graniterapids. Based on Sapphire Rapids, the switch in
!        addition enables the AMX-FP16 and PREFETCHI ISA extensions.
       * GCC now supports the Intel CPU named Granite Rapids D through
!        -march=graniterapids-d. Based on Granite Rapids, the switch in
!        addition enables the AMX-COMPLEX ISA extensions.
!      * Since GCC 13.5, CLDEMOTE is not enabled through the compiler switch
!        -march=alderlake any longer.
       * GCC now supports AMD CPUs based on the znver4 core via
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
*************** Other significant improvements
*** 1993,2012 ****
         libstdc++_libbacktrace.a library. This means that -lstdc++exp is
         the only library needed for all experimental libstdc++ features.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [138]GCC manuals. If that fails, the
!     [139]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [140]gcc@gcc.gnu.org. All of [141]our lists have public
      archives.
  
!    Copyright (C) [142]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [143]maintained by the GCC team. Last modified
!    2025-04-16.
  
  References
  
--- 2024,2050 ----
         libstdc++_libbacktrace.a library. This means that -lstdc++exp is
         the only library needed for all experimental libstdc++ features.
  
+ [138]GCC 13.4
+ 
+    This is the [139]list of problem reports (PRs) from GCC's bug tracking
+    system that are known to be fixed in the 13.4 release. This list might
+    not be complete (that is, it is possible that some PRs that have been
+    fixed are not listed here).
+ 
  
      For questions related to the use of GCC, please consult these web
!     pages and the [140]GCC manuals. If that fails, the
!     [141]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [142]gcc@gcc.gnu.org. All of [143]our lists have public
      archives.
  
!    Copyright (C) [144]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [145]maintained by the GCC team. Last modified
!    2026-03-15.
  
  References
  
*************** References
*** 2113,2119 ****
   101. https://gcc.gnu.org/install/
   102. https://gcc.gnu.org/install/specific.html#nvptx-x-none
   103. https://gcc.gnu.org/gcc-13/changes.html#riscv
!  104. https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v0.11.x
   105. https://rivai-ic.com.cn/
   106. https://gcc.gnu.org/gcc-13/changes.html#os
   107. https://gcc.gnu.org/gcc-13/changes.html#windows
--- 2151,2157 ----
   101. https://gcc.gnu.org/install/
   102. https://gcc.gnu.org/install/specific.html#nvptx-x-none
   103. https://gcc.gnu.org/gcc-13/changes.html#riscv
!  104. https://github.com/riscv-non-isa/riscv-rvv-intrinsic-doc/tree/v0.11.x
   105. https://rivai-ic.com.cn/
   106. https://gcc.gnu.org/gcc-13/changes.html#os
   107. https://gcc.gnu.org/gcc-13/changes.html#windows
*************** References
*** 2147,2183 ****
   135. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.2
   136. https://gcc.gnu.org/gcc-13/changes.html#13.3
   137. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.3
!  138. https://gcc.gnu.org/onlinedocs/
!  139. mailto:gcc-help@gcc.gnu.org
!  140. mailto:gcc@gcc.gnu.org
!  141. https://gcc.gnu.org/lists.html
!  142. https://www.fsf.org/
!  143. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/index.html
  
                               GCC 12 Release Series
  
!    Jun 20, 2024
  
!    The GCC developers are pleased to announce the release of GCC 12.4.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 12.3 relative to previous releases of GCC.
  
  Release History
  
     GCC 12.4
!           Jun 20, 2024 ([1]changes, [2]documentation)
  
     GCC 12.3
!           May 8, 2023 ([3]changes, [4]documentation)
  
     GCC 12.2
!           Aug 19, 2022 ([5]changes, [6]documentation)
  
     GCC 12.1
!           May 6, 2022 ([7]changes, [8]documentation)
  
  References and Acknowledgements
  
--- 2185,2228 ----
   135. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.2
   136. https://gcc.gnu.org/gcc-13/changes.html#13.3
   137. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.3
!  138. https://gcc.gnu.org/gcc-13/changes.html#13.4
!  139. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.4
!  140. https://gcc.gnu.org/onlinedocs/
!  141. mailto:gcc-help@gcc.gnu.org
!  142. mailto:gcc@gcc.gnu.org
!  143. https://gcc.gnu.org/lists.html
!  144. https://www.fsf.org/
!  145. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/index.html
  
                               GCC 12 Release Series
  
!    (This release series is no longer supported.)
  
!    July 11, 2025
! 
!    The GCC developers are pleased to announce the release of GCC 12.5.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 12.4 relative to previous releases of GCC.
  
  Release History
  
+    GCC 12.5
+           July 11, 2025 ([1]changes, [2]documentation)
+ 
     GCC 12.4
!           Jun 20, 2024 ([3]changes, [4]documentation)
  
     GCC 12.3
!           May 8, 2023 ([5]changes, [6]documentation)
  
     GCC 12.2
!           Aug 19, 2022 ([7]changes, [8]documentation)
  
     GCC 12.1
!           May 6, 2022 ([9]changes, [10]documentation)
  
  References and Acknowledgements
  
*************** References and Acknowledgements
*** 2187,2237 ****
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [9]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [10]GCC
!    project web site or contact the [11]GCC development mailing list.
  
!    To obtain GCC please use [12]our mirror sites or [13]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [14]GCC manuals. If that fails, the
!     [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
      archives.
  
!    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [19]maintained by the GCC team. Last modified
!    2024-06-20.
  
  References
  
     1. https://gcc.gnu.org/gcc-12/changes.html
!    2. https://gcc.gnu.org/onlinedocs/12.4.0/
     3. https://gcc.gnu.org/gcc-12/changes.html
!    4. https://gcc.gnu.org/onlinedocs/12.3.0/
     5. https://gcc.gnu.org/gcc-12/changes.html
!    6. https://gcc.gnu.org/onlinedocs/12.2.0/
     7. https://gcc.gnu.org/gcc-12/changes.html
!    8. https://gcc.gnu.org/onlinedocs/12.1.0/
!    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
!   10. https://gcc.gnu.org/index.html
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/mirrors.html
!   13. https://gcc.gnu.org/git.html
!   14. https://gcc.gnu.org/onlinedocs/
!   15. mailto:gcc-help@gcc.gnu.org
!   16. mailto:gcc@gcc.gnu.org
!   17. https://gcc.gnu.org/lists.html
!   18. https://www.fsf.org/
!   19. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/changes.html
  
--- 2232,2284 ----
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [11]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [12]GCC
!    project web site or contact the [13]GCC development mailing list.
  
!    To obtain GCC please use [14]our mirror sites or [15]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [16]GCC manuals. If that fails, the
!     [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
      archives.
  
!    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [21]maintained by the GCC team. Last modified
!    2025-08-04.
  
  References
  
     1. https://gcc.gnu.org/gcc-12/changes.html
!    2. https://gcc.gnu.org/onlinedocs/12.5.0/
     3. https://gcc.gnu.org/gcc-12/changes.html
!    4. https://gcc.gnu.org/onlinedocs/12.4.0/
     5. https://gcc.gnu.org/gcc-12/changes.html
!    6. https://gcc.gnu.org/onlinedocs/12.3.0/
     7. https://gcc.gnu.org/gcc-12/changes.html
!    8. https://gcc.gnu.org/onlinedocs/12.2.0/
!    9. https://gcc.gnu.org/gcc-12/changes.html
!   10. https://gcc.gnu.org/onlinedocs/12.1.0/
!   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
!   12. https://gcc.gnu.org/index.html
!   13. mailto:gcc@gcc.gnu.org
!   14. https://gcc.gnu.org/mirrors.html
!   15. https://gcc.gnu.org/git.html
!   16. https://gcc.gnu.org/onlinedocs/
!   17. mailto:gcc-help@gcc.gnu.org
!   18. mailto:gcc@gcc.gnu.org
!   19. https://gcc.gnu.org/lists.html
!   20. https://www.fsf.org/
!   21. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/changes.html
  
*************** function Multiply (S1, S2 : Sign) return
*** 2735,2740 ****
--- 2782,2789 ----
       * New ISA extension support for Intel AVX512-FP16 was added.
         AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
         switch.
+      * Since GCC 12.5, CLDEMOTE is not enabled through the compiler switch
+        -march=alderlake any longer.
       * For both C and C++ the _Float16 type is supported on x86 systems
         with SSE2 enabled. Without {-mavx512fp16}, all operations will be
         emulated in software and float instructions.
*************** Other significant improvements
*** 2933,2959 ****
  
    [165]Debugging formats
  
!      * GCC can now generate debugging information in [166]CTF, a
!        lightweight debugging format that provides information about C
!        types and the association between functions and data symbols and
!        types. This format is designed to be embedded in ELF files and to
!        be very compact and simple. A new command-line option -gctf enables
!        the generation of CTF.
       * GCC can now generate debugging information in BTF. This is a
         debugging format mainly used in BPF programs and the Linux kernel.
         The compiler can generate BTF for any target, when enabled with the
         command-line option -gbtf
  
! [167]GCC 12.1
  
!    This is the [168]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [169]GCC 12.2
  
!    This is the [170]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 2982,3008 ----
  
    [165]Debugging formats
  
!      * GCC can now generate debugging information in CTF, a lightweight
!        debugging format that provides information about C types and the
!        association between functions and data symbols and types. This
!        format is designed to be embedded in ELF files and to be very
!        compact and simple. A new command-line option -gctf enables the
!        generation of CTF.
       * GCC can now generate debugging information in BTF. This is a
         debugging format mainly used in BPF programs and the Linux kernel.
         The compiler can generate BTF for any target, when enabled with the
         command-line option -gbtf
  
! [166]GCC 12.1
  
!    This is the [167]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [168]GCC 12.2
  
!    This is the [169]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Other significant improvements
*** 2967,2973 ****
         all optimization levels but -O0 and -Og. The old behavior can be
         obtained by explicitly passing -mcheck-zero-division to GCC.
  
! [171]GCC 12.3
  
    Target Specific Changes
  
--- 3016,3022 ----
         all optimization levels but -O0 and -Og. The old behavior can be
         obtained by explicitly passing -mcheck-zero-division to GCC.
  
! [170]GCC 12.3
  
    Target Specific Changes
  
*************** Other significant improvements
*** 2977,3008 ****
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
  
!    This is the [172]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [173]GCC 12.4
  
!    This is the [174]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [175]GCC manuals. If that fails, the
!     [176]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [177]gcc@gcc.gnu.org. All of [178]our lists have public
      archives.
  
!    Copyright (C) [179]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [180]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 3026,3064 ----
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
  
!    This is the [171]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [172]GCC 12.4
  
!    This is the [173]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
+ [174]GCC 12.5
+ 
+    This is the [175]list of problem reports (PRs) from GCC's bug tracking
+    system that are known to be fixed in the 12.5 release. This list might
+    not be complete (that is, it is possible that some PRs that have been
+    fixed are not listed here).
+ 
  
      For questions related to the use of GCC, please consult these web
!     pages and the [176]GCC manuals. If that fails, the
!     [177]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [178]gcc@gcc.gnu.org. All of [179]our lists have public
      archives.
  
!    Copyright (C) [180]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [181]maintained by the GCC team. Last modified
!    2025-12-29.
  
  References
  
*************** References
*** 3122,3128 ****
   114. https://gcc.gnu.org/gcc-12/changes.html#targets
   115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets
   116. https://gcc.gnu.org/gcc-12/changes.html#aarch64
!  117. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
   118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
   119. https://gcc.gnu.org/gcc-12/changes.html#arm
   120. https://gcc.gnu.org/gcc-12/changes.html#bpf
--- 3178,3184 ----
   114. https://gcc.gnu.org/gcc-12/changes.html#targets
   115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets
   116. https://gcc.gnu.org/gcc-12/changes.html#aarch64
!  117. https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
   118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
   119. https://gcc.gnu.org/gcc-12/changes.html#arm
   120. https://gcc.gnu.org/gcc-12/changes.html#bpf
*************** References
*** 3171,3196 ****
   163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   165. https://gcc.gnu.org/gcc-12/changes.html#debug
!  166. https://ctfstd.org/
!  167. https://gcc.gnu.org/gcc-12/changes.html#12.1
!  168. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
!  169. https://gcc.gnu.org/gcc-12/changes.html#12.2
!  170. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
!  171. https://gcc.gnu.org/gcc-12/changes.html#12.3
!  172. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
!  173. https://gcc.gnu.org/gcc-12/changes.html#12.4
!  174. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
!  175. https://gcc.gnu.org/onlinedocs/
!  176. mailto:gcc-help@gcc.gnu.org
!  177. mailto:gcc@gcc.gnu.org
!  178. https://gcc.gnu.org/lists.html
!  179. https://www.fsf.org/
!  180. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-11/index.html
  
                               GCC 11 Release Series
  
     July 19, 2024
  
     The GCC developers are pleased to announce the release of GCC 11.5.
--- 3227,3255 ----
   163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   165. https://gcc.gnu.org/gcc-12/changes.html#debug
!  166. https://gcc.gnu.org/gcc-12/changes.html#12.1
!  167. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
!  168. https://gcc.gnu.org/gcc-12/changes.html#12.2
!  169. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
!  170. https://gcc.gnu.org/gcc-12/changes.html#12.3
!  171. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
!  172. https://gcc.gnu.org/gcc-12/changes.html#12.4
!  173. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
!  174. https://gcc.gnu.org/gcc-12/changes.html#12.5
!  175. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.5
!  176. https://gcc.gnu.org/onlinedocs/
!  177. mailto:gcc-help@gcc.gnu.org
!  178. mailto:gcc@gcc.gnu.org
!  179. https://gcc.gnu.org/lists.html
!  180. https://www.fsf.org/
!  181. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-11/index.html
  
                               GCC 11 Release Series
  
+    (This release series is no longer supported.)
+ 
     July 19, 2024
  
     The GCC developers are pleased to announce the release of GCC 11.5.
*************** References and Acknowledgements
*** 3245,3251 ****
     provided this notice is preserved.
  
     These pages are [21]maintained by the GCC team. Last modified
!    2024-07-19.
  
  References
  
--- 3304,3310 ----
     provided this notice is preserved.
  
     These pages are [21]maintained by the GCC team. Last modified
!    2025-08-04.
  
  References
  
*************** Caveats
*** 3302,3308 ****
       * The libstdc++ configure option --enable-cheaders=c_std is
         deprecated and will be removed in a future release. It should be
         possible to use --enable-cheaders=c_global (the default) with no
!        change in behaviour.
       * The front end for compiling BRIG format of Heterogeneous System
         Architecture Intermediate Language (HSAIL) has been deprecated and
         will likely be removed in a future release.
--- 3361,3367 ----
       * The libstdc++ configure option --enable-cheaders=c_std is
         deprecated and will be removed in a future release. It should be
         possible to use --enable-cheaders=c_global (the default) with no
!        change in behavior.
       * The front end for compiling BRIG format of Heterogeneous System
         Architecture Intermediate Language (HSAIL) has been deprecated and
         will likely be removed in a future release.
*************** Other significant improvements
*** 4024,4030 ****
     provided this notice is preserved.
  
     These pages are [107]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 4083,4089 ----
     provided this notice is preserved.
  
     These pages are [107]maintained by the GCC team. Last modified
!    2026-06-07.
  
  References
  
*************** References
*** 4093,4099 ****
    63. https://gcc.gnu.org/gcc-11/changes.html#targets
    64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets
    65. https://gcc.gnu.org/gcc-11/changes.html#aarch64
!   66. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions
    67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn
    68. https://gcc.gnu.org/gcc-11/changes.html#arm
    69. https://gcc.gnu.org/gcc-11/changes.html#x86
--- 4152,4158 ----
    63. https://gcc.gnu.org/gcc-11/changes.html#targets
    64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets
    65. https://gcc.gnu.org/gcc-11/changes.html#aarch64
!   66. https://developer.arm.com/documentation/110280/latest
    67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn
    68. https://gcc.gnu.org/gcc-11/changes.html#arm
    69. https://gcc.gnu.org/gcc-11/changes.html#x86
*************** typedef svbool_t pred512 __attribute__((
*** 4758,4764 ****
            + Arm Cortex-M55 (cortex-m55).
         The GCC identifiers can be used as arguments to the -mcpu or -mtune
         options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
!      * Support has been extended for the ACLE [57]data-processing
         intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
         multiplication and other related intrinsics aimed at DSP algorithm
         optimization.
--- 4817,4823 ----
            + Arm Cortex-M55 (cortex-m55).
         The GCC identifiers can be used as arguments to the -mcpu or -mtune
         options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
!      * Support has been extended for the [57]ACLE data-processing
         intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
         multiplication and other related intrinsics aimed at DSP algorithm
         optimization.
*************** typedef svbool_t pred512 __attribute__((
*** 4772,4791 ****
         intrinsics can be enabled by including the arm_mve.h header file
         and passing the +mve or +mve.fp option extensions (for example:
         -march=armv8.1-m.main+mve).
!      * Support for the Custom Datapath Extension beta ACLE [60]intrinsics
!        has been added.
       * Support for Armv8.1-M Mainline Security Extensions architecture has
         been added. The -mcmse option, when used in combination with an
         Armv8.1-M Mainline architecture (for example: -march=armv8.1-m.main
         -mcmse), now leads to the generation of improved code sequences
         when changing security states.
  
!   [61]AMD Radeon (GCN)
  
       * Code generation and in particular vectorization support have been
         much improved.
  
!   [62]ARC
  
       * The interrupt service routine functions save all used registers,
         including extension registers and auxiliary registers used by Zero
--- 4831,4850 ----
         intrinsics can be enabled by including the arm_mve.h header file
         and passing the +mve or +mve.fp option extensions (for example:
         -march=armv8.1-m.main+mve).
!      * Support for the Custom Datapath Extension beta ACLE intrinsics has
!        been added.
       * Support for Armv8.1-M Mainline Security Extensions architecture has
         been added. The -mcmse option, when used in combination with an
         Armv8.1-M Mainline architecture (for example: -march=armv8.1-m.main
         -mcmse), now leads to the generation of improved code sequences
         when changing security states.
  
!   [60]AMD Radeon (GCN)
  
       * Code generation and in particular vectorization support have been
         much improved.
  
!   [61]ARC
  
       * The interrupt service routine functions save all used registers,
         including extension registers and auxiliary registers used by Zero
*************** typedef svbool_t pred512 __attribute__((
*** 4798,4804 ****
       * Remove -mq-class option.
       * Improve 64-bit integer addition and subtraction operations.
  
!   [63]AVR
  
       * Support for the XMEGA-like devices
  
--- 4857,4863 ----
       * Remove -mq-class option.
       * Improve 64-bit integer addition and subtraction operations.
  
!   [62]AVR
  
       * Support for the XMEGA-like devices
  
*************** typedef svbool_t pred512 __attribute__((
*** 4811,4817 ****
         to provide a custom device-specs file by means of
  
       avr-gcc -nodevicespecs -specs=my-spec-file <options>
!        and without the need to provide options -B and -mmcu=. See [64]AVR
         command-line options for details. This feature is also available in
         GCC 9.3+ and GCC 8.4+.
       * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
--- 4870,4876 ----
         to provide a custom device-specs file by means of
  
       avr-gcc -nodevicespecs -specs=my-spec-file <options>
!        and without the need to provide options -B and -mmcu=. See [63]AVR
         command-line options for details. This feature is also available in
         GCC 9.3+ and GCC 8.4+.
       * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
*************** typedef svbool_t pred512 __attribute__((
*** 4819,4833 ****
         double and long double types, respectively. Whether or not the
         mentioned layouts are available, whether the options act as a
         multilib option, and the default for either option are controlled
!        by the new [65]AVR configure options --with-double= and
         --with-long-double=.
       * A new configure option --with-libf7= has been added. It controls to
         which level avr-libgcc provides 64-bit floating point support by
!        means of [66]Libf7.
       * A new configure option --with-double-comparison= has been added.
         It's unlikely you need to set this option by hand.
  
!   [67]IA-32/x86-64
  
       * Support to expand __builtin_roundeven into the appropriate SSE 4.1
         instruction has been added.
--- 4878,4892 ----
         double and long double types, respectively. Whether or not the
         mentioned layouts are available, whether the options act as a
         multilib option, and the default for either option are controlled
!        by the new [64]AVR configure options --with-double= and
         --with-long-double=.
       * A new configure option --with-libf7= has been added. It controls to
         which level avr-libgcc provides 64-bit floating point support by
!        means of [65]Libf7.
       * A new configure option --with-double-comparison= has been added.
         It's unlikely you need to set this option by hand.
  
!   [66]IA-32/x86-64
  
       * Support to expand __builtin_roundeven into the appropriate SSE 4.1
         instruction has been added.
*************** typedef svbool_t pred512 __attribute__((
*** 4840,4846 ****
         -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
         AVX512VP2INTERSECT ISA extensions.
  
!   [68]MIPS
  
       * The mips*-*-linux* targets now mark object files with appropriate
         GNU-stack note, facilitating use of non-executable stack hardening
--- 4899,4905 ----
         -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
         AVX512VP2INTERSECT ISA extensions.
  
!   [67]MIPS
  
       * The mips*-*-linux* targets now mark object files with appropriate
         GNU-stack note, facilitating use of non-executable stack hardening
*************** typedef svbool_t pred512 __attribute__((
*** 4849,4858 ****
         configured with --with-glibc-version=2.31 against glibc 2.31 or
         later.
  
!   [69]PowerPC / PowerPC64 / RS6000
  
       * Many vector builtins have been listed as deprecated in the
!        [70]64-Bit ELF V2 ABI Specification for quite a number of years.
         The vector builtins listed in Tables A.8 through A.10 are now
         deprecated for GCC 10, and will likely be removed from support in
         GCC 11. Note that this does not result in any loss of function.
--- 4908,4917 ----
         configured with --with-glibc-version=2.31 against glibc 2.31 or
         later.
  
!   [68]PowerPC / PowerPC64 / RS6000
  
       * Many vector builtins have been listed as deprecated in the
!        [69]64-Bit ELF V2 ABI Specification for quite a number of years.
         The vector builtins listed in Tables A.8 through A.10 are now
         deprecated for GCC 10, and will likely be removed from support in
         GCC 11. Note that this does not result in any loss of function.
*************** typedef svbool_t pred512 __attribute__((
*** 4863,4879 ****
         will be unlikely to affect much if any code, and any required code
         changes will be trivial.
  
!   [71]PRU
  
       * A new back end targeting TI PRU I/O processors has been contributed
         to GCC.
  
!   [72]RISC-V
  
       * The riscv*-*-* targets now require GNU binutils version 2.30 or
         later, to support new assembly instructions produced by GCC.
  
!   [73]V850
  
       * The ABI for V850 nested functions has been changed. Previously the
         V850 port used %r20 for the static chain pointer, now the port uses
--- 4922,4938 ----
         will be unlikely to affect much if any code, and any required code
         changes will be trivial.
  
!   [70]PRU
  
       * A new back end targeting TI PRU I/O processors has been contributed
         to GCC.
  
!   [71]RISC-V
  
       * The riscv*-*-* targets now require GNU binutils version 2.30 or
         later, to support new assembly instructions produced by GCC.
  
!   [72]V850
  
       * The ABI for V850 nested functions has been changed. Previously the
         V850 port used %r20 for the static chain pointer, now the port uses
*************** typedef svbool_t pred512 __attribute__((
*** 4881,4898 ****
         where a call to a nested function would unexpectedly change the
         value in %r20.
  
! [74]Operating Systems
  
! [75]Improvements for plugin authors
  
       * GCC diagnostics can now have a chain of events associated with
         them, describing a path through the code that triggers the problem.
         These can be printed by the diagnostics subsystem in various ways,
!        controlled by the [76]-fdiagnostics-path-format option, or captured
!        in JSON form via [77]-fdiagnostics-format=json.
!      * GCC diagnostics can now be associated with [78]CWE weakness
         identifiers, which will appear on the standard error stream, and in
!        the JSON output from [79]-fdiagnostics-format=json.
  
  Other significant improvements
  
--- 4940,4957 ----
         where a call to a nested function would unexpectedly change the
         value in %r20.
  
! [73]Operating Systems
  
! [74]Improvements for plugin authors
  
       * GCC diagnostics can now have a chain of events associated with
         them, describing a path through the code that triggers the problem.
         These can be printed by the diagnostics subsystem in various ways,
!        controlled by the [75]-fdiagnostics-path-format option, or captured
!        in JSON form via [76]-fdiagnostics-format=json.
!      * GCC diagnostics can now be associated with [77]CWE weakness
         identifiers, which will appear on the standard error stream, and in
!        the JSON output from [78]-fdiagnostics-format=json.
  
  Other significant improvements
  
*************** Other significant improvements
*** 4904,4931 ****
       * For many releases, when GCC emits a warning it prints the option
         controlling that warning. As of GCC 10, that option text is now a
         clickable hyperlink for the documentation of that option (assuming
!        a [80]sufficiently capable terminal). This behavior can be
!        controlled via a new [81]-fdiagnostics-urls option (along with
         various environment variables and heuristics documented with that
         option).
  
  GCC 10.1
  
!    This is the [82]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [83]GCC 10.2
  
!    This is the [84]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [85]GCC 10.3
  
!    This is the [86]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 4963,4990 ----
       * For many releases, when GCC emits a warning it prints the option
         controlling that warning. As of GCC 10, that option text is now a
         clickable hyperlink for the documentation of that option (assuming
!        a [79]sufficiently capable terminal). This behavior can be
!        controlled via a new [80]-fdiagnostics-urls option (along with
         various environment variables and heuristics documented with that
         option).
  
  GCC 10.1
  
!    This is the [81]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [82]GCC 10.2
  
!    This is the [83]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [84]GCC 10.3
  
!    This is the [85]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 10.1
*** 4950,4958 ****
       * GCC 10.3 supports AMD CPUs based on the znver3 core via
         -march=znver3.
  
! [87]GCC 10.4
  
!    This is the [88]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 5009,5017 ----
       * GCC 10.3 supports AMD CPUs based on the znver3 core via
         -march=znver3.
  
! [86]GCC 10.4
  
!    This is the [87]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 10.1
*** 4966,4992 ****
         MMX no longer changes how they are passed nor returned. This ABI
         change is now diagnosed with -Wpsabi.
  
! [89]GCC 10.5
  
!    This is the [90]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [91]GCC manuals. If that fails, the
!     [92]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [93]gcc@gcc.gnu.org. All of [94]our lists have public
      archives.
  
!    Copyright (C) [95]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [96]maintained by the GCC team. Last modified
!    2025-03-21.
  
  References
  
--- 5025,5051 ----
         MMX no longer changes how they are passed nor returned. This ABI
         change is now diagnosed with -Wpsabi.
  
! [88]GCC 10.5
  
!    This is the [89]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [90]GCC manuals. If that fails, the
!     [91]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [92]gcc@gcc.gnu.org. All of [93]our lists have public
      archives.
  
!    Copyright (C) [94]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [95]maintained by the GCC team. Last modified
!    2026-06-16.
  
  References
  
*************** References
*** 5046,5091 ****
    54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets
    55. https://gcc.gnu.org/gcc-10/changes.html#aarch64
    56. https://gcc.gnu.org/gcc-10/changes.html#arm
!   57. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics
    58. https://developer.arm.com/Architectures/M-Profile%20Architecture
    59. https://developer.arm.com/architectures/instruction-sets/intrinsics/
!   60. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension
!   61. https://gcc.gnu.org/gcc-10/changes.html#amdgcn
!   62. https://gcc.gnu.org/gcc-10/changes.html#arc
!   63. https://gcc.gnu.org/gcc-10/changes.html#avr
!   64. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
!   65. https://gcc.gnu.org/install/configure.html#avr
!   66. https://gcc.gnu.org/wiki/avr-gcc#Libf7
!   67. https://gcc.gnu.org/gcc-10/changes.html#x86
!   68. https://gcc.gnu.org/gcc-10/changes.html#mips
!   69. https://gcc.gnu.org/gcc-10/changes.html#powerpc
!   70. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
!   71. https://gcc.gnu.org/gcc-10/changes.html#pru
!   72. https://gcc.gnu.org/gcc-10/changes.html#riscv
!   73. https://gcc.gnu.org/gcc-10/changes.html#v850
!   74. https://gcc.gnu.org/gcc-10/changes.html#os
!   75. https://gcc.gnu.org/gcc-10/changes.html#plugins
!   76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
!   77. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   78. https://cwe.mitre.org/
!   79. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   80. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
!   81. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
!   82. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
!   83. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2
!   84. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
!   85. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3
!   86. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
!   87. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4
!   88. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
!   89. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5
!   90. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
!   91. https://gcc.gnu.org/onlinedocs/
!   92. mailto:gcc-help@gcc.gnu.org
!   93. mailto:gcc@gcc.gnu.org
!   94. https://gcc.gnu.org/lists.html
!   95. https://www.fsf.org/
!   96. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-9/index.html
  
--- 5105,5149 ----
    54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets
    55. https://gcc.gnu.org/gcc-10/changes.html#aarch64
    56. https://gcc.gnu.org/gcc-10/changes.html#arm
!   57. https://github.com/ARM-software/acle/releases
    58. https://developer.arm.com/Architectures/M-Profile%20Architecture
    59. https://developer.arm.com/architectures/instruction-sets/intrinsics/
!   60. https://gcc.gnu.org/gcc-10/changes.html#amdgcn
!   61. https://gcc.gnu.org/gcc-10/changes.html#arc
!   62. https://gcc.gnu.org/gcc-10/changes.html#avr
!   63. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
!   64. https://gcc.gnu.org/install/configure.html#avr
!   65. https://gcc.gnu.org/wiki/avr-gcc#Libf7
!   66. https://gcc.gnu.org/gcc-10/changes.html#x86
!   67. https://gcc.gnu.org/gcc-10/changes.html#mips
!   68. https://gcc.gnu.org/gcc-10/changes.html#powerpc
!   69. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
!   70. https://gcc.gnu.org/gcc-10/changes.html#pru
!   71. https://gcc.gnu.org/gcc-10/changes.html#riscv
!   72. https://gcc.gnu.org/gcc-10/changes.html#v850
!   73. https://gcc.gnu.org/gcc-10/changes.html#os
!   74. https://gcc.gnu.org/gcc-10/changes.html#plugins
!   75. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
!   76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   77. https://cwe.mitre.org/
!   78. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   79. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
!   80. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
!   81. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
!   82. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2
!   83. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
!   84. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3
!   85. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
!   86. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4
!   87. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
!   88. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5
!   89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
!   90. https://gcc.gnu.org/onlinedocs/
!   91. mailto:gcc-help@gcc.gnu.org
!   92. mailto:gcc@gcc.gnu.org
!   93. https://gcc.gnu.org/lists.html
!   94. https://www.fsf.org/
!   95. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-9/index.html
  
*************** Caveats
*** 5224,5232 ****
  
  [9]General Improvements
  
!    The following GCC command line options have been introduced or
     improved.
!      * All command line options that take a byte-size argument accept
         64-bit integers as well as standard SI and IEC suffixes such as kb
         and KiB, MB and MiB, or GB and GiB denoting the corresponding
         multiples of bytes. See [10]Invoking GCC for more.
--- 5282,5290 ----
  
  [9]General Improvements
  
!    The following GCC command-line options have been introduced or
     improved.
!      * All command-line options that take a byte-size argument accept
         64-bit integers as well as standard SI and IEC suffixes such as kb
         and KiB, MB and MiB, or GB and GiB denoting the corresponding
         multiples of bytes. See [10]Invoking GCC for more.
*************** _SIZE'?
*** 5740,5751 ****
              option for Arm and thus -march=armv8-a+ssbs is an
              AArch64-specific option.
  
!       AArch64 specific
  
       * Support has been added for the Arm Neoverse E1 processor
         (-mcpu=neoverse-e1).
       * The AArch64 port now has support for stack clash protection using
!        the [72]-fstack-clash-protection option. The probing interval/guard
         size can be set by using --param
         stack-clash-protection-guard-size=12|16. The value of this
         parameter must be in bytes represented as a power of two. The two
--- 5798,5809 ----
              option for Arm and thus -march=armv8-a+ssbs is an
              AArch64-specific option.
  
!     [72]AArch64 specific
  
       * Support has been added for the Arm Neoverse E1 processor
         (-mcpu=neoverse-e1).
       * The AArch64 port now has support for stack clash protection using
!        the [73]-fstack-clash-protection option. The probing interval/guard
         size can be set by using --param
         stack-clash-protection-guard-size=12|16. The value of this
         parameter must be in bytes represented as a power of two. The two
*************** _SIZE'?
*** 5758,5764 ****
         option can now be used to enable the return address signing as well
         as the new Branch Target Identification feature of Armv8.5-A
         architecture. For more information on the arguments accepted by
!        this option, please refer to [73]AArch64-Options.
       * The following optional extensions to Armv8.5-A architecture are now
         supported and only affect the assembler.
            + Random Number Generation instructions through the
--- 5816,5822 ----
         option can now be used to enable the return address signing as well
         as the new Branch Target Identification feature of Armv8.5-A
         architecture. For more information on the arguments accepted by
!        this option, please refer to [74]AArch64-Options.
       * The following optional extensions to Armv8.5-A architecture are now
         supported and only affect the assembler.
            + Random Number Generation instructions through the
*************** _SIZE'?
*** 5766,5772 ****
            + Memory Tagging Extension through the -march=armv8.5-a+memtag
              option.
  
!       Arm specific
  
       * Support for the deprecated Armv2 and Armv3 architectures and their
         variants has been removed. Their corresponding -march values and
--- 5824,5830 ----
            + Memory Tagging Extension through the -march=armv8.5-a+memtag
              option.
  
!     [75]Arm specific
  
       * Support for the deprecated Armv2 and Armv3 architectures and their
         variants has been removed. Their corresponding -march values and
*************** _SIZE'?
*** 5777,5783 ****
       * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
         their respective -mcpu options.
  
!   [74]AMD GCN
  
       * A new back end targeting AMD GCN GPUs has been contributed to GCC.
         The implementation is currently limited to compiling
--- 5835,5841 ----
       * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
         their respective -mcpu options.
  
!   [76]AMD GCN
  
       * A new back end targeting AMD GCN GPUs has been contributed to GCC.
         The implementation is currently limited to compiling
*************** _SIZE'?
*** 5788,5806 ****
            + Fiji (fiji).
            + Vega 10 (gfx900).
  
!   [75]ARC
  
       * LRA is now on by default for the ARC target. This can be controlled
         by -mlra.
       * Add support for frame code-density and branch-and-index
         instructions.
  
!   [76]C-SKY
  
       * A new back end targeting C-SKY V2 processors has been contributed
         to GCC.
  
!   [77]IA-32/x86-64
  
       * Support of Intel MPX (Memory Protection Extensions) has been
         removed.
--- 5846,5864 ----
            + Fiji (fiji).
            + Vega 10 (gfx900).
  
!   [77]ARC
  
       * LRA is now on by default for the ARC target. This can be controlled
         by -mlra.
       * Add support for frame code-density and branch-and-index
         instructions.
  
!   [78]C-SKY
  
       * A new back end targeting C-SKY V2 processors has been contributed
         to GCC.
  
!   [79]IA-32/x86-64
  
       * Support of Intel MPX (Memory Protection Extensions) has been
         removed.
*************** _SIZE'?
*** 5811,5817 ****
         following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
         AVX512DQ, AVX512VNNI.
  
!   [78]MIPS
  
       * The Loongson loongson-mmi and loongson-ext extensions have been
         split from loongson3a:
--- 5869,5875 ----
         following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
         AVX512DQ, AVX512VNNI.
  
!   [80]MIPS
  
       * The Loongson loongson-mmi and loongson-ext extensions have been
         split from loongson3a:
*************** _SIZE'?
*** 5835,5846 ****
         -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
         to the equivalent target attributes and pragmas.
  
!   [79]OpenRISC
  
       * A new back end targeting OpenRISC processors has been contributed
         to GCC.
  
!   [80]S/390, System z, IBM z Systems
  
       * Support for the arch13 architecture has been added. When using the
         -march=arch13 option, the compiler will generate code making use of
--- 5893,5904 ----
         -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
         to the equivalent target attributes and pragmas.
  
!   [81]OpenRISC
  
       * A new back end targeting OpenRISC processors has been contributed
         to GCC.
  
!   [82]S/390, System z, IBM z Systems
  
       * Support for the arch13 architecture has been added. When using the
         -march=arch13 option, the compiler will generate code making use of
*************** _SIZE'?
*** 5870,5878 ****
         containing pointers to each profiling call stub. This is useful for
         automatically patching in and out calls.
  
! [81]Operating Systems
  
!   [82]Solaris
  
       * g++ now unconditionally enables large file support when compiling
         32-bit code.
--- 5928,5936 ----
         containing pointers to each profiling call stub. This is useful for
         automatically patching in and out calls.
  
! [83]Operating Systems
  
!   [84]Solaris
  
       * g++ now unconditionally enables large file support when compiling
         32-bit code.
*************** _SIZE'?
*** 5883,5891 ****
         Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
         support is still work-in-progress.
  
!   [83]Windows
  
!      * A C++ Microsoft ABI bitfield layout bug, [84]PR87137 has been
         fixed. A non-field declaration could cause the current bitfield
         allocation unit to be completed, incorrectly placing a following
         bitfield into a new allocation unit. The Microsoft ABI is selected
--- 5941,5949 ----
         Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
         support is still work-in-progress.
  
!   [85]Windows
  
!      * A C++ Microsoft ABI bitfield layout bug, [86]PR87137 has been
         fixed. A non-field declaration could cause the current bitfield
         allocation unit to be completed, incorrectly placing a following
         bitfield into a new allocation unit. The Microsoft ABI is selected
*************** _SIZE'?
*** 5896,5908 ****
            + SuperH targets when the -mhitachi option is specified, or
              __attribute__((renesas)) is used
  
! [85]Improvements for plugin authors
  
       * GCC's diagnostic subsystem now has a way to logically group
         together related diagnostics, auto_diagnostic_group. Such
         diagnostics will be nested by the output of
!        [86]-fdiagnostics-format=json.
!      * GCC now has a set of [87]user experience guidelines for GCC, with
         information and advice on implementing new diagnostics.
  
  Other significant improvements
--- 5954,5966 ----
            + SuperH targets when the -mhitachi option is specified, or
              __attribute__((renesas)) is used
  
! [87]Improvements for plugin authors
  
       * GCC's diagnostic subsystem now has a way to logically group
         together related diagnostics, auto_diagnostic_group. Such
         diagnostics will be nested by the output of
!        [88]-fdiagnostics-format=json.
!      * GCC now has a set of [89]user experience guidelines for GCC, with
         information and advice on implementing new diagnostics.
  
  Other significant improvements
*************** Other significant improvements
*** 5910,5939 ****
       * GCC's internal "selftest" suite now runs for C++ as well as C (in
         debug builds of the compiler).
  
! [88]GCC 9.1
  
!    This is the [89]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [90]GCC 9.2
  
!    This is the [91]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [92]GCC 9.3
  
!    This is the [93]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [94]GCC 9.4
  
!    This is the [95]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 5968,5997 ----
       * GCC's internal "selftest" suite now runs for C++ as well as C (in
         debug builds of the compiler).
  
! [90]GCC 9.1
  
!    This is the [91]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [92]GCC 9.2
  
!    This is the [93]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [94]GCC 9.3
  
!    This is the [95]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [96]GCC 9.4
  
!    This is the [97]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Other significant improvements
*** 5956,5982 ****
         for all SVE implementations. Adding -msve-vector-bits=512 makes the
         code specific to 512-bit SVE.
  
! [96]GCC 9.5
  
!    This is the [97]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [98]GCC manuals. If that fails, the
!     [99]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [100]gcc@gcc.gnu.org. All of [101]our lists have public
      archives.
  
!    Copyright (C) [102]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [103]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 6014,6040 ----
         for all SVE implementations. Adding -msve-vector-bits=512 makes the
         code specific to 512-bit SVE.
  
! [98]GCC 9.5
  
!    This is the [99]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [100]GCC manuals. If that fails, the
!     [101]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [102]gcc@gcc.gnu.org. All of [103]our lists have public
      archives.
  
!    Copyright (C) [104]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [105]maintained by the GCC team. Last modified
!    2026-06-10.
  
  References
  
*************** References
*** 6051,6088 ****
    69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
    70. https://gcc.gnu.org/gcc-9/changes.html#targets
    71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets
!   72. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
!   73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
!   74. https://gcc.gnu.org/gcc-9/changes.html#amdgcn
!   75. https://gcc.gnu.org/gcc-9/changes.html#arc
!   76. https://gcc.gnu.org/gcc-9/changes.html#csky
!   77. https://gcc.gnu.org/gcc-9/changes.html#x86
!   78. https://gcc.gnu.org/gcc-9/changes.html#mips
!   79. https://gcc.gnu.org/gcc-9/changes.html#or1k
!   80. https://gcc.gnu.org/gcc-9/changes.html#s390
!   81. https://gcc.gnu.org/gcc-9/changes.html#os
!   82. https://gcc.gnu.org/gcc-9/changes.html#solaris
!   83. https://gcc.gnu.org/gcc-9/changes.html#windows
!   84. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
!   85. https://gcc.gnu.org/gcc-9/changes.html#plugins
!   86. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   87. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
!   88. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1
!   89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
!   90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2
!   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
!   92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3
!   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
!   94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4
!   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
!   96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5
!   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
!   98. https://gcc.gnu.org/onlinedocs/
!   99. mailto:gcc-help@gcc.gnu.org
!  100. mailto:gcc@gcc.gnu.org
!  101. https://gcc.gnu.org/lists.html
!  102. https://www.fsf.org/
!  103. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-8/index.html
  
--- 6109,6148 ----
    69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
    70. https://gcc.gnu.org/gcc-9/changes.html#targets
    71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets
!   72. https://gcc.gnu.org/gcc-9/changes.html#aarch64
!   73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
!   74. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
!   75. https://gcc.gnu.org/gcc-9/changes.html#arm
!   76. https://gcc.gnu.org/gcc-9/changes.html#amdgcn
!   77. https://gcc.gnu.org/gcc-9/changes.html#arc
!   78. https://gcc.gnu.org/gcc-9/changes.html#csky
!   79. https://gcc.gnu.org/gcc-9/changes.html#x86
!   80. https://gcc.gnu.org/gcc-9/changes.html#mips
!   81. https://gcc.gnu.org/gcc-9/changes.html#or1k
!   82. https://gcc.gnu.org/gcc-9/changes.html#s390
!   83. https://gcc.gnu.org/gcc-9/changes.html#os
!   84. https://gcc.gnu.org/gcc-9/changes.html#solaris
!   85. https://gcc.gnu.org/gcc-9/changes.html#windows
!   86. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
!   87. https://gcc.gnu.org/gcc-9/changes.html#plugins
!   88. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   89. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
!   90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1
!   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
!   92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2
!   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
!   94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3
!   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
!   96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4
!   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
!   98. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5
!   99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
!  100. https://gcc.gnu.org/onlinedocs/
!  101. mailto:gcc-help@gcc.gnu.org
!  102. mailto:gcc@gcc.gnu.org
!  103. https://gcc.gnu.org/lists.html
!  104. https://www.fsf.org/
!  105. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-8/index.html
  
*************** x-early-inliner-iterations'?
*** 8505,8511 ****
     provided this notice is preserved.
  
     These pages are [67]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 8565,8571 ----
     provided this notice is preserved.
  
     These pages are [67]maintained by the GCC team. Last modified
!    2026-06-13.
  
  References
  
*************** Target Specific Changes
*** 9343,9385 ****
  
    IA-32/x86-64
  
!      * Support for the [51]deprecated pcommit instruction has been
!        removed.
  
!                                   [52]GCC 6.4
  
!    This is the [53]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [54]Operating Systems
  
!   [55]RTEMS
  
       * The ABI changes on ARM so that no short enums are used by default.
  
!                                   [56]GCC 6.5
  
!    This is the [57]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [58]GCC manuals. If that fails, the
!     [59]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [60]gcc@gcc.gnu.org. All of [61]our lists have public
      archives.
  
!    Copyright (C) [62]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [63]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 9403,9444 ----
  
    IA-32/x86-64
  
!      * Support for the deprecated pcommit instruction has been removed.
  
!                                   [51]GCC 6.4
  
!    This is the [52]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [53]Operating Systems
  
!   [54]RTEMS
  
       * The ABI changes on ARM so that no short enums are used by default.
  
!                                   [55]GCC 6.5
  
!    This is the [56]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [57]GCC manuals. If that fails, the
!     [58]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [59]gcc@gcc.gnu.org. All of [60]our lists have public
      archives.
  
!    Copyright (C) [61]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [62]maintained by the GCC team. Last modified
!    2026-06-15.
  
  References
  
*************** References
*** 9395,9401 ****
    10. https://gcc.gnu.org/wiki/Offloading
    11. https://gcc.gnu.org/gcc-6/changes.html#c-family
    12. https://www.openmp.org/specifications/
!   13. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
    14. https://gcc.gnu.org/gcc-6/changes.html#c
    15. https://gcc.gnu.org/gcc-6/changes.html#cxx
    16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
--- 9454,9460 ----
    10. https://gcc.gnu.org/wiki/Offloading
    11. https://gcc.gnu.org/gcc-6/changes.html#c-family
    12. https://www.openmp.org/specifications/
!   13. https://www.cve.org/CVERecord?id=CVE-2014-1266
    14. https://gcc.gnu.org/gcc-6/changes.html#c
    15. https://gcc.gnu.org/gcc-6/changes.html#cxx
    16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
*************** References
*** 9425,9431 ****
    40. https://gcc.gnu.org/gcc-6/changes.html#os
    41. https://gcc.gnu.org/gcc-6/changes.html#aix
    42. https://gcc.gnu.org/gcc-6/changes.html#linux
!   43. http://www.musl-libc.org/
    44. https://gcc.gnu.org/gcc-6/changes.html#rtems
    45. https://gcc.gnu.org/gcc-6/changes.html#solaris
    46. https://gcc.gnu.org/gcc-6/changes.html#windows
--- 9484,9490 ----
    40. https://gcc.gnu.org/gcc-6/changes.html#os
    41. https://gcc.gnu.org/gcc-6/changes.html#aix
    42. https://gcc.gnu.org/gcc-6/changes.html#linux
!   43. https://musl.libc.org/
    44. https://gcc.gnu.org/gcc-6/changes.html#rtems
    45. https://gcc.gnu.org/gcc-6/changes.html#solaris
    46. https://gcc.gnu.org/gcc-6/changes.html#windows
*************** References
*** 9433,9451 ****
    48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
    49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3
    50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
!   51. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
!   52. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4
!   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
!   54. https://gcc.gnu.org/gcc-6/changes.html#os64
!   55. https://gcc.gnu.org/gcc-6/changes.html#rtems64
!   56. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5
!   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
!   58. https://gcc.gnu.org/onlinedocs/
!   59. mailto:gcc-help@gcc.gnu.org
!   60. mailto:gcc@gcc.gnu.org
!   61. https://gcc.gnu.org/lists.html
!   62. https://www.fsf.org/
!   63. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-5/index.html
  
--- 9492,9509 ----
    48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
    49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3
    50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
!   51. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4
!   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
!   53. https://gcc.gnu.org/gcc-6/changes.html#os64
!   54. https://gcc.gnu.org/gcc-6/changes.html#rtems64
!   55. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5
!   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
!   57. https://gcc.gnu.org/onlinedocs/
!   58. mailto:gcc-help@gcc.gnu.org
!   59. mailto:gcc@gcc.gnu.org
!   60. https://gcc.gnu.org/lists.html
!   61. https://www.fsf.org/
!   62. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-5/index.html
  
*************** void operator delete[] (void *, std::siz
*** 10251,10257 ****
  
    [56]RX
  
!      * A new command line option -mno-allow-string-insns can be used to
         disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
         SWHILE and RMPA instructions. An erratum released by Renesas shows
         that it is unsafe to use these instructions on addresses within the
--- 10309,10315 ----
  
    [56]RX
  
!      * A new command-line option -mno-allow-string-insns can be used to
         disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
         SWHILE and RMPA instructions. An erratum released by Renesas shows
         that it is unsafe to use these instructions on addresses within the
*************** Target Specific Changes
*** 10405,10427 ****
  
    IA-32/x86-64
  
!      * Support for the [71]deprecated pcommit instruction has been
!        removed.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [72]GCC manuals. If that fails, the
!     [73]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [74]gcc@gcc.gnu.org. All of [75]our lists have public
      archives.
  
!    Copyright (C) [76]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [77]maintained by the GCC team. Last modified
!    2025-02-28.
  
  References
  
--- 10463,10484 ----
  
    IA-32/x86-64
  
!      * Support for the pcommit instruction has been removed.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [71]GCC manuals. If that fails, the
!     [72]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [73]gcc@gcc.gnu.org. All of [74]our lists have public
      archives.
  
!    Copyright (C) [75]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [76]maintained by the GCC team. Last modified
!    2026-06-03.
  
  References
  
*************** References
*** 10495,10507 ****
    68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
    69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5
    70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
!   71. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
!   72. https://gcc.gnu.org/onlinedocs/
!   73. mailto:gcc-help@gcc.gnu.org
!   74. mailto:gcc@gcc.gnu.org
!   75. https://gcc.gnu.org/lists.html
!   76. https://www.fsf.org/
!   77. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.9/index.html
  
--- 10552,10563 ----
    68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
    69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5
    70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
!   71. https://gcc.gnu.org/onlinedocs/
!   72. mailto:gcc-help@gcc.gnu.org
!   73. mailto:gcc@gcc.gnu.org
!   74. https://gcc.gnu.org/lists.html
!   75. https://www.fsf.org/
!   76. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.9/index.html
  
*************** late struct X<1000>;
*** 10736,10742 ****
         implementation follows ABI version 1.2; all features but _Cilk_for
         have been implemented.
  
!   C
  
       * ISO C11 atomics (the _Atomic type specifier and qualifier and the
         <stdatomic.h> header) are now supported.
--- 10792,10798 ----
         implementation follows ABI version 1.2; all features but _Cilk_for
         have been implemented.
  
!   [11]C
  
       * ISO C11 atomics (the _Atomic type specifier and qualifier and the
         <stdatomic.h> header) are now supported.
*************** late struct X<1000>;
*** 10753,10762 ****
       * A new C extension __auto_type provides a subset of the
         functionality of C++11 auto in GNU C.
  
!   [11]C++
  
!      * The G++ implementation of [12]C++1y return type deduction for
!        normal functions has been updated to conform to [13]N3638, the
         proposal accepted into the working paper. Most notably, it adds
         decltype(auto) for getting decltype semantics rather than the
         template argument deduction semantics of plain auto:
--- 10809,10818 ----
       * A new C extension __auto_type provides a subset of the
         functionality of C++11 auto in GNU C.
  
!   [12]C++
  
!      * The G++ implementation of [13]C++1y return type deduction for
!        normal functions has been updated to conform to [14]N3638, the
         proposal accepted into the working paper. Most notably, it adds
         decltype(auto) for getting decltype semantics rather than the
         template argument deduction semantics of plain auto:
*************** int& f();
*** 10765,10778 ****
           auto  i1 = f(); // int
  decltype(auto) i2 = f(); // int&
  
!      * G++ supports [14]C++1y lambda capture initializers:
  
  [x = 42]{ ... };
  
         Actually, they have been accepted since GCC 4.5, but now the
         compiler doesn't warn about them with -std=c++1y, and supports
         parenthesized and brace-enclosed initializers as well.
!      * G++ supports [15]C++1y variable length arrays. G++ has supported
         GNU/C99-style VLAs for a long time, but now additionally supports
         initializers and lambda capture by reference. In C++1y mode G++
         will complain about VLA uses that are not permitted by the draft
--- 10821,10834 ----
           auto  i1 = f(); // int
  decltype(auto) i2 = f(); // int&
  
!      * G++ supports [15]C++1y lambda capture initializers:
  
  [x = 42]{ ... };
  
         Actually, they have been accepted since GCC 4.5, but now the
         compiler doesn't warn about them with -std=c++1y, and supports
         parenthesized and brace-enclosed initializers as well.
!      * G++ supports [16]C++1y variable length arrays. G++ has supported
         GNU/C99-style VLAs for a long time, but now additionally supports
         initializers and lambda capture by reference. In C++1y mode G++
         will complain about VLA uses that are not permitted by the draft
*************** void f(int n) {
*** 10787,10793 ****
    &a; // error, taking address of VLA
  }
  
!      * G++ supports the [16]C++1y [[deprecated]] attribute modulo bugs in
         the underlying [[gnu::deprecated]] attribute. Classes and functions
         can be marked deprecated and a diagnostic message added:
  
--- 10843,10849 ----
    &a; // error, taking address of VLA
  }
  
!      * G++ supports the [17]C++1y [[deprecated]] attribute modulo bugs in
         the underlying [[gnu::deprecated]] attribute. Classes and functions
         can be marked deprecated and a diagnostic message added:
  
*************** A aa; // warning: 'A' is deprecated : A
*** 10805,10811 ****
  int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
  o() instead
  
!      * G++ supports [17]C++1y digit separators. Long numeric literals can
         be subdivided with a single quote ' to enhance readability:
  
  int i = 1048576;
--- 10861,10867 ----
  int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
  o() instead
  
!      * G++ supports [18]C++1y digit separators. Long numeric literals can
         be subdivided with a single quote ' to enhance readability:
  
  int i = 1048576;
*************** int n = 0b0001'0000'0000'0000'0000'0000;
*** 10817,10823 ****
  double x = 1.602'176'565e-19;
  double y = 1.602'176'565e-1'9;
  
!      * G++ supports [18]C++1y generic (polymorphic) lambdas.
  
  // a functional object that will increment any type
  auto incr = [](auto x) { return x++; };
--- 10873,10879 ----
  double x = 1.602'176'565e-19;
  double y = 1.602'176'565e-1'9;
  
!      * G++ supports [19]C++1y generic (polymorphic) lambdas.
  
  // a functional object that will increment any type
  auto incr = [](auto x) { return x++; };
*************** auto incr = [](auto x) { return x++; };
*** 10830,10836 ****
  auto add = [] <typename T> (T a, T b) { return a + b; };
  
       * G++ supports unconstrained generic functions as specified by �4.1.2
!        and �5.1.1 of [19]N3889: Concepts Lite Specification. Briefly, auto
         may be used as a type-specifier in a parameter declaration of any
         function declarator in order to introduce an implicit function
         template parameter, akin to generic lambdas.
--- 10886,10892 ----
  auto add = [] <typename T> (T a, T b) { return a + b; };
  
       * G++ supports unconstrained generic functions as specified by �4.1.2
!        and �5.1.1 of [20]N3889: Concepts Lite Specification. Briefly, auto
         may be used as a type-specifier in a parameter declaration of any
         function declarator in order to introduce an implicit function
         template parameter, akin to generic lambdas.
*************** auto incr(T x) { return x++; }
*** 10842,10854 ****
  
      Runtime Library (libstdc++)
  
!      * [20]Improved support for C++11, including:
            + support for <regex>;
            + The associative containers in <map> and <set> and the
              unordered associative containers in <unordered_map> and
              <unordered_set> meet the allocator-aware container
              requirements;
!      * [21]Improved experimental support for the upcoming ISO C++
         standard, C++14, including:
            + fixing constexpr member functions without const;
            + implementation of the std::exchange() utility function;
--- 10898,10910 ----
  
      Runtime Library (libstdc++)
  
!      * [21]Improved support for C++11, including:
            + support for <regex>;
            + The associative containers in <map> and <set> and the
              unordered associative containers in <unordered_map> and
              <unordered_set> meet the allocator-aware container
              requirements;
!      * [22]Improved experimental support for the upcoming ISO C++
         standard, C++14, including:
            + fixing constexpr member functions without const;
            + implementation of the std::exchange() utility function;
*************** auto incr(T x) { return x++; }
*** 10874,10880 ****
         and will be removed in a future version. std::make_exception_ptr
         should be used instead.
  
!   [22]Fortran
  
       * Compatibility notice:
            + Module files: The version of the module files (.mod) has been
--- 10930,10936 ----
         and will be removed in a future version. std::make_exception_ptr
         should be used instead.
  
!   [23]Fortran
  
       * Compatibility notice:
            + Module files: The version of the module files (.mod) has been
*************** auto incr(T x) { return x++; }
*** 10887,10893 ****
              object files and libraries are fully compatible with older
              versions (except as stated below).
            + ABI changes:
!                o The [23]argument passing ABI has changed for scalar dummy
                   arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
                   which have both the VALUE and the OPTIONAL attributes.
                 o To support finalization the virtual table associated with
--- 10943,10949 ----
              object files and libraries are fully compatible with older
              versions (except as stated below).
            + ABI changes:
!                o The [24]argument passing ABI has changed for scalar dummy
                   arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
                   which have both the VALUE and the OPTIONAL attributes.
                 o To support finalization the virtual table associated with
*************** auto incr(T x) { return x++; }
*** 10915,10921 ****
       * The compiler no longer unconditionally warns about DO loops with
         zero iterations. This warning is now controlled by the -Wzerotrip
         option, which is implied by -Wall.
!      * The new NO_ARG_CHECK attribute of the [24]!GCC$ directive can be
         used to disable the type-kind-rank (TKR) argument check for a dummy
         argument. The feature is similar to ISO/IEC TS 29133:2012's
         TYPE(*), except that it additionally also disables the rank check.
--- 10971,10977 ----
       * The compiler no longer unconditionally warns about DO loops with
         zero iterations. This warning is now controlled by the -Wzerotrip
         option, which is implied by -Wall.
!      * The new NO_ARG_CHECK attribute of the [25]!GCC$ directive can be
         used to disable the type-kind-rank (TKR) argument check for a dummy
         argument. The feature is similar to ISO/IEC TS 29133:2012's
         TYPE(*), except that it additionally also disables the rank check.
*************** auto incr(T x) { return x++; }
*** 10931,10948 ****
         contrary to NO_ARG_CHECK assumed-rank arguments pass an array
         descriptor which contains the array shape and stride of the
         argument.
!      * [25]Fortran 2003:
            + Finalization is now supported. It is currently only done for a
              subset of those situations in which it should occur.
            + Experimental support for scalar character components with
              deferred length (i.e. allocatable string length) in derived
              types has been added. (Deferred-length character variables are
              supported since GCC 4.6.)
!      * [26]Fortran 2008:
            + When STOP or ERROR STOP are used to terminate the execution
              and any exception (but inexact) is signaling, a warning is
              printed to ERROR_UNIT, indicating which exceptions are
!             signaling. The [27]-ffpe-summary= command-line option can be
              used to fine-tune for which exceptions the warning should be
              shown.
            + Rounding on input (READ) is now handled on systems where
--- 10987,11004 ----
         contrary to NO_ARG_CHECK assumed-rank arguments pass an array
         descriptor which contains the array shape and stride of the
         argument.
!      * [26]Fortran 2003:
            + Finalization is now supported. It is currently only done for a
              subset of those situations in which it should occur.
            + Experimental support for scalar character components with
              deferred length (i.e. allocatable string length) in derived
              types has been added. (Deferred-length character variables are
              supported since GCC 4.6.)
!      * [27]Fortran 2008:
            + When STOP or ERROR STOP are used to terminate the execution
              and any exception (but inexact) is signaling, a warning is
              printed to ERROR_UNIT, indicating which exceptions are
!             signaling. The [28]-ffpe-summary= command-line option can be
              used to fine-tune for which exceptions the warning should be
              shown.
            + Rounding on input (READ) is now handled on systems where
*************** auto incr(T x) { return x++; }
*** 10952,10964 ****
              least significant [cf. IEC 60559:1989] for a tie, while
              compatible rounds away from zero in that case).
  
!   [28]Go
  
       * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
  
! [29]New Targets and Target Specific Improvements
  
!   [30]AArch64
  
       * The ARMv8-A crypto and CRC instructions are now supported through
         intrinsics. These are enabled when the architecture supports these
--- 11008,11020 ----
              least significant [cf. IEC 60559:1989] for a tie, while
              compatible rounds away from zero in that case).
  
!   [29]Go
  
       * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
  
! [30]New Targets and Target Specific Improvements
  
!   [31]AArch64
  
       * The ARMv8-A crypto and CRC instructions are now supported through
         intrinsics. These are enabled when the architecture supports these
*************** auto incr(T x) { return x++; }
*** 10986,10997 ****
         default by configuring GCC with the --enable-fix-cortex-a53-835769
         option.
  
!   [31]ARC
  
       * A port for Synopsys Designware ARC has been contributed by Embecosm
         and Synopsys Inc.
  
!   [32]ARM
  
       * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
         disabled by default. This was found to generate better code in only
--- 11042,11053 ----
         default by configuring GCC with the --enable-fix-cortex-a53-835769
         option.
  
!   [32]ARC
  
       * A port for Synopsys Designware ARC has been contributed by Embecosm
         and Synopsys Inc.
  
!   [33]ARM
  
       * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
         disabled by default. This was found to generate better code in only
*************** auto incr(T x) { return x++; }
*** 11034,11046 ****
       * A number of code generation improvements for Thumb2 to reduce code
         size when compiling for the M-profile processors.
  
!   [33]AVR
  
       * A new command-line option -mfract-convert-truncate has been added.
         It allows compiler to use truncation instead of rounding towards
         zero for fractional fixed-point types.
  
!   [34]IA-32/x86-64
  
       * -mfpmath=sse is now implied by -ffast-math on all targets where
         SSE2 is supported.
--- 11090,11102 ----
       * A number of code generation improvements for Thumb2 to reduce code
         size when compiling for the M-profile processors.
  
!   [34]AVR
  
       * A new command-line option -mfract-convert-truncate has been added.
         It allows compiler to use truncation instead of rounding towards
         zero for fractional fixed-point types.
  
!   [35]IA-32/x86-64
  
       * -mfpmath=sse is now implied by -ffast-math on all targets where
         SSE2 is supported.
*************** auto incr(T x) { return x++; }
*** 11056,11062 ****
         a file that are tagged with the corresponding target attribute
         without having to compile the entire file with the -mxxx option.
         This improves the usability of x86 intrinsics and is particularly
!        useful when doing [35]Function Multiversioning.
       * GCC now supports the new Intel microarchitecture named Silvermont
         through -march=silvermont.
       * GCC now supports the new Intel microarchitecture named Broadwell
--- 11112,11118 ----
         a file that are tagged with the corresponding target attribute
         without having to compile the entire file with the -mxxx option.
         This improves the usability of x86 intrinsics and is particularly
!        useful when doing [36]Function Multiversioning.
       * GCC now supports the new Intel microarchitecture named Silvermont
         through -march=silvermont.
       * GCC now supports the new Intel microarchitecture named Broadwell
*************** auto incr(T x) { return x++; }
*** 11080,11086 ****
       * Support for new AMD family 15h processors (Excavator core) is now
         available through the -march=bdver4 and -mtune=bdver4 options.
  
!   [36]MSP430
  
       * A new command-line option -mcpu= has been added to the MSP430 back
         end. This option is used to specify the ISA to be used. Accepted
--- 11136,11142 ----
       * Support for new AMD family 15h processors (Excavator core) is now
         available through the -march=bdver4 and -mtune=bdver4 options.
  
!   [37]MSP430
  
       * A new command-line option -mcpu= has been added to the MSP430 back
         end. This option is used to specify the ISA to be used. Accepted
*************** auto incr(T x) { return x++; }
*** 11091,11109 ****
         preprocessor symbol that will be recognised by the msp430.h header
         file.
  
!   [37]NDS32
  
       * A new nds32 port supports the 32-bit architecture from Andes
         Technology Corporation.
       * The port provides initial support for the V2, V3, V3m instruction
         set architectures.
  
!   [38]Nios II
  
       * A port for the Altera Nios II has been contributed by Mentor
         Graphics.
  
!   [39]PowerPC / PowerPC64 / RS6000
  
       * GCC now supports Power ISA 2.07, which includes support for
         Hardware Transactional Memory (HTM), Quadword atomics and several
--- 11147,11165 ----
         preprocessor symbol that will be recognised by the msp430.h header
         file.
  
!   [38]NDS32
  
       * A new nds32 port supports the 32-bit architecture from Andes
         Technology Corporation.
       * The port provides initial support for the V2, V3, V3m instruction
         set architectures.
  
!   [39]Nios II
  
       * A port for the Altera Nios II has been contributed by Mentor
         Graphics.
  
!   [40]PowerPC / PowerPC64 / RS6000
  
       * GCC now supports Power ISA 2.07, which includes support for
         Hardware Transactional Memory (HTM), Quadword atomics and several
*************** auto incr(T x) { return x++; }
*** 11139,11151 ****
         certain leaf function with -march=z10 or higher.
       * The LRA rtl pass replaces reload by default on S/390.
  
!   [40]RX
  
       * The port now allows to specify the RX100, RX200, and RX600
         processors with the command-line options -mcpu=rx100, -mcpu=rx200
         and -mcpu=rx600.
  
!   [41]SH
  
       * Minor improvements to code generated for integer arithmetic and
         code that involves the T bit.
--- 11195,11207 ----
         certain leaf function with -march=z10 or higher.
       * The LRA rtl pass replaces reload by default on S/390.
  
!   [41]RX
  
       * The port now allows to specify the RX100, RX200, and RX600
         processors with the command-line options -mcpu=rx100, -mcpu=rx200
         and -mcpu=rx600.
  
!   [42]SH
  
       * Minor improvements to code generated for integer arithmetic and
         code that involves the T bit.
*************** auto incr(T x) { return x++; }
*** 11162,11170 ****
       * The option -mcmpeqdi has been deprecated. Specifying it will result
         in a warning and will not influence code generation.
  
! [42]GCC 4.9.1
  
!    This is the [43]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 11218,11226 ----
       * The option -mcmpeqdi has been deprecated. Specifying it will result
         in a warning and will not influence code generation.
  
! [43]GCC 4.9.1
  
!    This is the [44]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** auto incr(T x) { return x++; }
*** 11172,11212 ****
     Version 4.0 of the OpenMP specification is supported even in Fortran,
     not just C and C++.
  
! [44]GCC 4.9.2
  
!    This is the [45]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [46]GCC 4.9.3
  
!    This is the [47]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [48]GCC 4.9.4
  
!    This is the [49]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [50]GCC manuals. If that fails, the
!     [51]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [52]gcc@gcc.gnu.org. All of [53]our lists have public
      archives.
  
!    Copyright (C) [54]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [55]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 11228,11268 ----
     Version 4.0 of the OpenMP specification is supported even in Fortran,
     not just C and C++.
  
! [45]GCC 4.9.2
  
!    This is the [46]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [47]GCC 4.9.3
  
!    This is the [48]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [49]GCC 4.9.4
  
!    This is the [50]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [51]GCC manuals. If that fails, the
!     [52]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [53]gcc@gcc.gnu.org. All of [54]our lists have public
      archives.
  
!    Copyright (C) [55]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [56]maintained by the GCC team. Last modified
!    2026-06-01.
  
  References
  
*************** References
*** 11220,11270 ****
     8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family
     9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
    10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
!   11. https://gcc.gnu.org/gcc-4.9/changes.html#cxx
!   12. https://gcc.gnu.org/projects/cxx1y.html
!   13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
!   14. https://gcc.gnu.org/projects/cxx1y.html
    15. https://gcc.gnu.org/projects/cxx1y.html
    16. https://gcc.gnu.org/projects/cxx1y.html
    17. https://gcc.gnu.org/projects/cxx1y.html
    18. https://gcc.gnu.org/projects/cxx1y.html
!   19. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
!   20. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
!   21. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
!   22. https://gcc.gnu.org/gcc-4.9/changes.html#fortran
!   23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
!   24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
!   25. https://gcc.gnu.org/wiki/Fortran2003Status
!   26. https://gcc.gnu.org/wiki/Fortran2008Status
!   27. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
!   28. https://gcc.gnu.org/gcc-4.9/changes.html#go
!   29. https://gcc.gnu.org/gcc-4.9/changes.html#targets
!   30. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64
!   31. https://gcc.gnu.org/gcc-4.9/changes.html#arc
!   32. https://gcc.gnu.org/gcc-4.9/changes.html#arm
!   33. https://gcc.gnu.org/gcc-4.9/changes.html#avr
!   34. https://gcc.gnu.org/gcc-4.9/changes.html#x86
!   35. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
!   36. https://gcc.gnu.org/gcc-4.9/changes.html#msp430
!   37. https://gcc.gnu.org/gcc-4.9/changes.html#nds32
!   38. https://gcc.gnu.org/gcc-4.9/changes.html#nios2
!   39. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc
!   40. https://gcc.gnu.org/gcc-4.9/changes.html#rx
!   41. https://gcc.gnu.org/gcc-4.9/changes.html#sh
!   42. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1
!   43. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
!   44. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2
!   45. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
!   46. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3
!   47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
!   48. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4
!   49. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
!   50. https://gcc.gnu.org/onlinedocs/
!   51. mailto:gcc-help@gcc.gnu.org
!   52. mailto:gcc@gcc.gnu.org
!   53. https://gcc.gnu.org/lists.html
!   54. https://www.fsf.org/
!   55. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.8/index.html
  
--- 11276,11327 ----
     8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family
     9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
    10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
!   11. https://gcc.gnu.org/gcc-4.9/changes.html#c
!   12. https://gcc.gnu.org/gcc-4.9/changes.html#cxx
!   13. https://gcc.gnu.org/projects/cxx1y.html
!   14. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
    15. https://gcc.gnu.org/projects/cxx1y.html
    16. https://gcc.gnu.org/projects/cxx1y.html
    17. https://gcc.gnu.org/projects/cxx1y.html
    18. https://gcc.gnu.org/projects/cxx1y.html
!   19. https://gcc.gnu.org/projects/cxx1y.html
!   20. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
!   21. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
!   22. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
!   23. https://gcc.gnu.org/gcc-4.9/changes.html#fortran
!   24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
!   25. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
!   26. https://gcc.gnu.org/wiki/Fortran2003Status
!   27. https://gcc.gnu.org/wiki/Fortran2008Status
!   28. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
!   29. https://gcc.gnu.org/gcc-4.9/changes.html#go
!   30. https://gcc.gnu.org/gcc-4.9/changes.html#targets
!   31. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64
!   32. https://gcc.gnu.org/gcc-4.9/changes.html#arc
!   33. https://gcc.gnu.org/gcc-4.9/changes.html#arm
!   34. https://gcc.gnu.org/gcc-4.9/changes.html#avr
!   35. https://gcc.gnu.org/gcc-4.9/changes.html#x86
!   36. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
!   37. https://gcc.gnu.org/gcc-4.9/changes.html#msp430
!   38. https://gcc.gnu.org/gcc-4.9/changes.html#nds32
!   39. https://gcc.gnu.org/gcc-4.9/changes.html#nios2
!   40. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc
!   41. https://gcc.gnu.org/gcc-4.9/changes.html#rx
!   42. https://gcc.gnu.org/gcc-4.9/changes.html#sh
!   43. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1
!   44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
!   45. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2
!   46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
!   47. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3
!   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
!   49. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4
!   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
!   51. https://gcc.gnu.org/onlinedocs/
!   52. mailto:gcc-help@gcc.gnu.org
!   53. mailto:gcc@gcc.gnu.org
!   54. https://gcc.gnu.org/lists.html
!   55. https://www.fsf.org/
!   56. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.8/index.html
  
*************** int i = A().f();  // error, f() requires
*** 11686,11692 ****
         architecture from ARM. Note that this is a separate port from the
         existing 32-bit ARM port.
       * The port provides initial support for the Cortex-A53 and the
!        Cortex-A57 processors with the command line options
         -mcpu=cortex-a53 and -mcpu=cortex-a57.
       * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
         has been added and can be enabled by giving the
--- 11743,11749 ----
         architecture from ARM. Note that this is a separate port from the
         existing 32-bit ARM port.
       * The port provides initial support for the Cortex-A53 and the
!        Cortex-A57 processors with the command-line options
         -mcpu=cortex-a53 and -mcpu=cortex-a57.
       * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
         has been added and can be enabled by giving the
*************** int i = A().f();  // error, f() requires
*** 12086,12092 ****
     provided this notice is preserved.
  
     These pages are [67]maintained by the GCC team. Last modified
!    2025-02-28.
  
  References
  
--- 12143,12149 ----
     provided this notice is preserved.
  
     These pages are [67]maintained by the GCC team. Last modified
!    2026-06-08.
  
  References
  
*************** int x;
*** 12496,12502 ****
  res = 2 + a;  /* means {2,2,2,2} + a  */
  res = a - x;  /* means a - {x,x,x,x}  */
  
!   C
  
       * There is support for some more features from the C11 revision of
         the ISO C standard. GCC now accepts the options -std=c11 and
--- 12553,12559 ----
  res = 2 + a;  /* means {2,2,2,2} + a  */
  res = a - x;  /* means a - {x,x,x,x}  */
  
!   [5]C
  
       * There is support for some more features from the C11 revision of
         the ISO C standard. GCC now accepts the options -std=c11 and
*************** res = a - x;  /* means a - {x,x,x,x}  */
*** 12510,12521 ****
            + A built-in function __builtin_complex is provided to support C
              library implementation of the CMPLX family of macros.
  
!   [5]C++
  
       * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
         options, which are equivalent to -std=c++0x, -std=gnu++0x, and
         -Wc++0x-compat, respectively.
!      * G++ now implements [6]C++11 extended friend syntax:
  
  template<class W>
  class Q
--- 12567,12578 ----
            + A built-in function __builtin_complex is provided to support C
              library implementation of the CMPLX family of macros.
  
!   [6]C++
  
       * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
         options, which are equivalent to -std=c++0x, -std=gnu++0x, and
         -Wc++0x-compat, respectively.
!      * G++ now implements [7]C++11 extended friend syntax:
  
  template<class W>
  class Q
*************** struct B
*** 12530,12536 ****
    int ar[Q<B>::I];
  };
  
!      * Thanks to Ville Voutilainen, G++ now implements [7]C++11 explicit
         override control.
  
  struct B {
--- 12587,12593 ----
    int ar[Q<B>::I];
  };
  
!      * Thanks to Ville Voutilainen, G++ now implements [8]C++11 explicit
         override control.
  
  struct B {
*************** struct D : B {
*** 12547,12572 ****
  struct E final { };
  struct F: E { }; // error: deriving from final class
  
!      * G++ now implements [8]C++11 non-static data member initializers.
  
  struct A {
    int i = 42;
  } a; // initializes a.i to 42
  
!      * Thanks to Ed Smith-Rowland, G++ now implements [9]C++11
         user-defined literals.
  
  // Not actually a good approximation.  :)
  constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
  long double pi = 180.0_degrees;
  
!      * G++ now implements [10]C++11 alias-declarations.
  
  template <class T> using Ptr = T*;
  Ptr<int> ip;  // decltype(ip) is int*
  
       * Thanks to Ville Voutilainen and Pedro Lamar�o, G++ now implements
!        [11]C++11 delegating constructors.
  
  struct A {
    A(int);
--- 12604,12629 ----
  struct E final { };
  struct F: E { }; // error: deriving from final class
  
!      * G++ now implements [9]C++11 non-static data member initializers.
  
  struct A {
    int i = 42;
  } a; // initializes a.i to 42
  
!      * Thanks to Ed Smith-Rowland, G++ now implements [10]C++11
         user-defined literals.
  
  // Not actually a good approximation.  :)
  constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
  long double pi = 180.0_degrees;
  
!      * G++ now implements [11]C++11 alias-declarations.
  
  template <class T> using Ptr = T*;
  Ptr<int> ip;  // decltype(ip) is int*
  
       * Thanks to Ville Voutilainen and Pedro Lamar�o, G++ now implements
!        [12]C++11 delegating constructors.
  
  struct A {
    A(int);
*************** const int &y = f(2);
*** 12645,12658 ****
         Using-declarations are to be used instead. Furthermore, some
         efforts have been made to improve the support of class scope
         using-declarations. In particular, using-declarations referring to
!        a dependent type now work as expected ([12]bug c++/14258).
       * The ELF symbol visibility of a template instantiation is now
         properly constrained by the visibility of its template arguments
!        ([13]bug c++/35688).
  
      Runtime Library (libstdc++)
  
!      * [14]Improved experimental support for the new ISO C++ standard,
         C++11, including:
            + using noexcept in most of the library;
            + implementations of pointer_traits, allocator_traits and
--- 12702,12715 ----
         Using-declarations are to be used instead. Furthermore, some
         efforts have been made to improve the support of class scope
         using-declarations. In particular, using-declarations referring to
!        a dependent type now work as expected ([13]bug c++/14258).
       * The ELF symbol visibility of a template instantiation is now
         properly constrained by the visibility of its template arguments
!        ([14]bug c++/35688).
  
      Runtime Library (libstdc++)
  
!      * [15]Improved experimental support for the new ISO C++ standard,
         C++11, including:
            + using noexcept in most of the library;
            + implementations of pointer_traits, allocator_traits and
*************** const int &y = f(2);
*** 12666,12694 ****
       * Debug Mode iterators for unordered associative containers.
       * Avoid polluting the global namespace and do not include <unistd.h>.
  
!   [15]Fortran
  
!      * The compile flag [16]-fstack-arrays has been added, which causes
         all local arrays to be put on stack memory. For some programs this
         will improve the performance significantly. If your program uses
         very large local arrays, it is possible that you will have to
         extend your runtime limits for stack memory.
!      * The [17]-Ofast flag now also implies [18]-fno-protect-parens and
!        [19]-fstack-arrays.
       * Front-end optimizations can now be selected by the
!        [20]-ffrontend-optimize option and deselected by the
         -fno-frontend-optimize option.
       * When front-end optimization removes a function call,
!        [21]-Wfunction-elimination warns about that.
       * When performing front-end-optimization, the
!        [22]-faggressive-function-elimination option allows the removal of
         duplicate function calls even for impure functions.
!      * The flag [23]-Wreal-q-constant has been added, which warns if
         floating-point literals have been specified using q (such as
         1.0q0); the q marker is now supported as a vendor extension to
         denote quad precision (REAL(16) or, if not available, REAL(10)).
         Consider using a kind parameter (such as in 1.0_qp) instead, which
!        can be obtained via [24]SELECTED_REAL_KIND.
       * The GFORTRAN_USE_STDERR environment variable has been removed. GNU
         Fortran now always prints error messages to standard error. If you
         wish to redirect standard error, please consult the manual for your
--- 12723,12751 ----
       * Debug Mode iterators for unordered associative containers.
       * Avoid polluting the global namespace and do not include <unistd.h>.
  
!   [16]Fortran
  
!      * The compile flag [17]-fstack-arrays has been added, which causes
         all local arrays to be put on stack memory. For some programs this
         will improve the performance significantly. If your program uses
         very large local arrays, it is possible that you will have to
         extend your runtime limits for stack memory.
!      * The [18]-Ofast flag now also implies [19]-fno-protect-parens and
!        [20]-fstack-arrays.
       * Front-end optimizations can now be selected by the
!        [21]-ffrontend-optimize option and deselected by the
         -fno-frontend-optimize option.
       * When front-end optimization removes a function call,
!        [22]-Wfunction-elimination warns about that.
       * When performing front-end-optimization, the
!        [23]-faggressive-function-elimination option allows the removal of
         duplicate function calls even for impure functions.
!      * The flag [24]-Wreal-q-constant has been added, which warns if
         floating-point literals have been specified using q (such as
         1.0q0); the q marker is now supported as a vendor extension to
         denote quad precision (REAL(16) or, if not available, REAL(10)).
         Consider using a kind parameter (such as in 1.0_qp) instead, which
!        can be obtained via [25]SELECTED_REAL_KIND.
       * The GFORTRAN_USE_STDERR environment variable has been removed. GNU
         Fortran now always prints error messages to standard error. If you
         wish to redirect standard error, please consult the manual for your
*************** const int &y = f(2);
*** 12698,12729 ****
         gfortran will now always abort the program. Whether a core dump is
         generated depends on the user environment settings; see the ulimit
         -c setting for POSIX shells, limit coredumpsize for C shells, and
!        the [25]WER user-mode dumps settings on Windows.
!      * The [26]-fbacktrace option is now enabled by default. When
         encountering a fatal error, gfortran will attempt to print a
         backtrace to standard error before aborting. It can be disabled
         with -fno-backtrace. Note: On POSIX targets with the addr2line
         utility from GNU binutils, GNU Fortran can print a backtrace with
         function name, file name, line number information in addition to
         the addresses; otherwise only the addresses are printed.
!      * [27]Fortran 2003:
            + Generic interface names which have the same name as derived
              types are now supported, which allows to write constructor
              functions. Note that Fortran does not support static
              constructor functions; only default initialization or an
              explicit structure-constructor initialization are available.
!           + [28]Polymorphic (class) arrays are now supported.
!      * [29]Fortran 2008:
            + Support for the DO CONCURRENT construct has been added, which
              allows the user to specify that individual loop iterations
              have no interdependencies.
!           + [30]Coarrays: Full single-image support except for polymorphic
              coarrays. Additionally, preliminary support for multiple
!             images via an MPI-based [31]coarray communication library has
              been added. Note: The library version is not yet usable as
              remote coarray access is not yet possible.
!      * [32]TS 29113:
!           + New flag [33]-std=f2008ts permits programs that are expected
              to conform to the Fortran 2008 standard and the draft
              Technical Specification (TS) 29113 on Further Interoperability
              of Fortran with C.
--- 12755,12786 ----
         gfortran will now always abort the program. Whether a core dump is
         generated depends on the user environment settings; see the ulimit
         -c setting for POSIX shells, limit coredumpsize for C shells, and
!        the [26]WER user-mode dumps settings on Windows.
!      * The [27]-fbacktrace option is now enabled by default. When
         encountering a fatal error, gfortran will attempt to print a
         backtrace to standard error before aborting. It can be disabled
         with -fno-backtrace. Note: On POSIX targets with the addr2line
         utility from GNU binutils, GNU Fortran can print a backtrace with
         function name, file name, line number information in addition to
         the addresses; otherwise only the addresses are printed.
!      * [28]Fortran 2003:
            + Generic interface names which have the same name as derived
              types are now supported, which allows to write constructor
              functions. Note that Fortran does not support static
              constructor functions; only default initialization or an
              explicit structure-constructor initialization are available.
!           + [29]Polymorphic (class) arrays are now supported.
!      * [30]Fortran 2008:
            + Support for the DO CONCURRENT construct has been added, which
              allows the user to specify that individual loop iterations
              have no interdependencies.
!           + [31]Coarrays: Full single-image support except for polymorphic
              coarrays. Additionally, preliminary support for multiple
!             images via an MPI-based [32]coarray communication library has
              been added. Note: The library version is not yet usable as
              remote coarray access is not yet possible.
!      * [33]TS 29113:
!           + New flag [34]-std=f2008ts permits programs that are expected
              to conform to the Fortran 2008 standard and the draft
              Technical Specification (TS) 29113 on Further Interoperability
              of Fortran with C.
*************** const int &y = f(2);
*** 12734,12751 ****
              compatible with the candidate draft of TS 29113 (since GCC
              4.6).
  
!   [34]Go
  
!      * GCC 4.7 implements the [35]Go 1 language standard. The library
         support in 4.7.0 is not quite complete, due to release timing.
         Release 4.7.1 includes complete support for Go 1. The Go library is
         from the Go 1.0.1 release.
       * Go has been tested on GNU/Linux and Solaris platforms. It may work
         on other platforms as well.
  
! [36]New Targets and Target Specific Improvements
  
!   [37]ARM
  
       * GCC now supports the Cortex-A7 processor implementing the v7-a
         version of the architecture using the option -mcpu=cortex-a7.
--- 12791,12808 ----
              compatible with the candidate draft of TS 29113 (since GCC
              4.6).
  
!   [35]Go
  
!      * GCC 4.7 implements the [36]Go 1 language standard. The library
         support in 4.7.0 is not quite complete, due to release timing.
         Release 4.7.1 includes complete support for Go 1. The Go library is
         from the Go 1.0.1 release.
       * Go has been tested on GNU/Linux and Solaris platforms. It may work
         on other platforms as well.
  
! [37]New Targets and Target Specific Improvements
  
!   [38]ARM
  
       * GCC now supports the Cortex-A7 processor implementing the v7-a
         version of the architecture using the option -mcpu=cortex-a7.
*************** const int &y = f(2);
*** 12755,12781 ****
       * A new option -mvectorize-with-neon-double was added to allow users
         to change the vector size to 64 bits.
  
!   [38]AVR
  
       * The AVR port's libgcc has been improved and its multilib structure
         has been enhanced. As a result, all objects contributing to an
         application must either be compiled with GCC versions up to 4.6.x
         or with GCC versions 4.7.1 or later. If the compiler is used with
         AVR-LibC, you need a version that supports the new layout, i.e.
!        implements [39]#35407.
       * The -mshort-calls command-line option has been deprecated. It will
         be removed in the GCC 4.8 release. See -mrelax for a replacement.
       * The compiled code only references startup code that clears .bss and
         the common section resp. initializes the .data and .rodata section
         provided respective sections (or subsections thereof) are not
!        empty, see [40]PR18145. Applications that put all static storage
         objects into non-standard sections and / or define all static
         storage objects in assembler modules, must reference __do_clear_bss
         resp. __do_copy_data by hand or undefine the symbol(s) by means of
         -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
       * GCC now supports the XMEGA architecture. This requires GNU Binutils
         2.22 or later.
!      * Support for the [41]named address spaces __flash, __flash1, ...,
         __flash5 and __memx has been added. These address spaces locate
         read-only data in flash memory and allow reading from flash memory
         by means of ordinary C code, i.e. without the need of (inline)
--- 12812,12838 ----
       * A new option -mvectorize-with-neon-double was added to allow users
         to change the vector size to 64 bits.
  
!   [39]AVR
  
       * The AVR port's libgcc has been improved and its multilib structure
         has been enhanced. As a result, all objects contributing to an
         application must either be compiled with GCC versions up to 4.6.x
         or with GCC versions 4.7.1 or later. If the compiler is used with
         AVR-LibC, you need a version that supports the new layout, i.e.
!        implements [40]#35407.
       * The -mshort-calls command-line option has been deprecated. It will
         be removed in the GCC 4.8 release. See -mrelax for a replacement.
       * The compiled code only references startup code that clears .bss and
         the common section resp. initializes the .data and .rodata section
         provided respective sections (or subsections thereof) are not
!        empty, see [41]PR18145. Applications that put all static storage
         objects into non-standard sections and / or define all static
         storage objects in assembler modules, must reference __do_clear_bss
         resp. __do_copy_data by hand or undefine the symbol(s) by means of
         -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
       * GCC now supports the XMEGA architecture. This requires GNU Binutils
         2.22 or later.
!      * Support for the [42]named address spaces __flash, __flash1, ...,
         __flash5 and __memx has been added. These address spaces locate
         read-only data in flash memory and allow reading from flash memory
         by means of ordinary C code, i.e. without the need of (inline)
*************** int add_values (const __flash int *p, in
*** 12790,12801 ****
  
       * Support has been added for the AVR-specific configure option
         --with-avrlibc=yes in order to arrange for better integration of
!        [42]AVR-Libc. This configure option is supported in avr-gcc v4.7.2
         and newer and will only take effect in non-RTEMS configurations. If
         avr-gcc is configured for RTEMS, the option will be ignored which
!        is the same as specifying --with-avrlibc=no. See [43]PR54461 for
         more technical details.
!      * Support for AVR-specific [44]built-in functions has been added.
       * Support has been added for the signed and unsigned 24-bit scalar
         integer types __int24 and __uint24.
       * New command-line options -maccumulate-args, -mbranch-cost=cost and
--- 12847,12858 ----
  
       * Support has been added for the AVR-specific configure option
         --with-avrlibc=yes in order to arrange for better integration of
!        [43]AVR-Libc. This configure option is supported in avr-gcc v4.7.2
         and newer and will only take effect in non-RTEMS configurations. If
         avr-gcc is configured for RTEMS, the option will be ignored which
!        is the same as specifying --with-avrlibc=no. See [44]PR54461 for
         more technical details.
!      * Support for AVR-specific [45]built-in functions has been added.
       * Support has been added for the signed and unsigned 24-bit scalar
         integer types __int24 and __uint24.
       * New command-line options -maccumulate-args, -mbranch-cost=cost and
*************** void set_portb (uint8_t value)
*** 12877,12883 ****
         FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
       * Support for new AMD family 15h processors (Piledriver core) is now
         available through -march=bdver2 and -mtune=bdver2 options.
!      * Support for [45]the x32 psABI is now available through the -mx32
         option.
       * Windows mingw targets are using the -mms-bitfields option by
         default.
--- 12934,12940 ----
         FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
       * Support for new AMD family 15h processors (Piledriver core) is now
         available through -march=bdver2 and -mtune=bdver2 options.
!      * Support for [46]the x32 psABI is now available through the -mx32
         option.
       * Windows mingw targets are using the -mms-bitfields option by
         default.
*************** void set_portb (uint8_t value)
*** 12886,12892 ****
       * Support for the configure option --with-threads=posix for Windows
         mingw targets.
  
!   [46]MIPS
  
       * GCC now supports thread-local storage (TLS) for MIPS16. This
         requires GNU binutils 2.22 or later.
--- 12943,12949 ----
       * Support for the configure option --with-threads=posix for Windows
         mingw targets.
  
!   [47]MIPS
  
       * GCC now supports thread-local storage (TLS) for MIPS16. This
         requires GNU binutils 2.22 or later.
*************** Other significant improvements
*** 12992,13048 ****
         the DW_AT_producer attribute string in the DWARF debugging
         information.
       * GCC now supports various new GNU extensions to the DWARF debugging
!        information format, like [47]entry value and [48]call site
!        information, [49]typed DWARF stack or [50]a more compact macro
         representation. Support for these extensions has been added to GDB
         7.4. They can be disabled through the -gstrict-dwarf command-line
         option.
  
! [51]GCC 4.7.1
  
!    This is the [52]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
!    The Go front end in the 4.7.1 release fully supports the [53]Go 1
     language standard.
  
! [54]GCC 4.7.2
  
!    This is the [55]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [56]GCC 4.7.3
  
!    This is the [57]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [58]GCC 4.7.4
  
!    This is the [59]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [60]GCC manuals. If that fails, the
!     [61]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [62]gcc@gcc.gnu.org. All of [63]our lists have public
      archives.
  
!    Copyright (C) [64]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [65]maintained by the GCC team. Last modified
!    2025-02-28.
  
  References
  
--- 13049,13105 ----
         the DW_AT_producer attribute string in the DWARF debugging
         information.
       * GCC now supports various new GNU extensions to the DWARF debugging
!        information format, like [48]entry value and [49]call site
!        information, [50]typed DWARF stack or [51]a more compact macro
         representation. Support for these extensions has been added to GDB
         7.4. They can be disabled through the -gstrict-dwarf command-line
         option.
  
! [52]GCC 4.7.1
  
!    This is the [53]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
!    The Go front end in the 4.7.1 release fully supports the [54]Go 1
     language standard.
  
! [55]GCC 4.7.2
  
!    This is the [56]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [57]GCC 4.7.3
  
!    This is the [58]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [59]GCC 4.7.4
  
!    This is the [60]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [61]GCC manuals. If that fails, the
!     [62]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [63]gcc@gcc.gnu.org. All of [64]our lists have public
      archives.
  
!    Copyright (C) [65]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [66]maintained by the GCC team. Last modified
!    2026-04-30.
  
  References
  
*************** References
*** 13050,13116 ****
     2. https://gcc.gnu.org/gcc-4.7/porting_to.html
     3. https://gcc.gnu.org/wiki/TransactionalMemory
     4. https://gcc.gnu.org/wiki/Atomic/GCCMM
!    5. https://gcc.gnu.org/gcc-4.7/changes.html#cxx
!    6. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
!   12. https://gcc.gnu.org/PR14258
!   13. https://gcc.gnu.org/PR35688
!   14. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
!   15. https://gcc.gnu.org/gcc-4.7/changes.html#fortran
!   16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
!   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
!   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
!   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
!   20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
!   21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
!   22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
!   23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
!   24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
!   25. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
!   26. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
!   27. https://gcc.gnu.org/wiki/Fortran2003Status
!   28. https://gcc.gnu.org/wiki/OOP
!   29. https://gcc.gnu.org/wiki/Fortran2008Status
!   30. https://gcc.gnu.org/wiki/Coarray
!   31. https://gcc.gnu.org/wiki/CoarrayLib
!   32. https://gcc.gnu.org/wiki/TS29113Status
!   33. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
!   34. https://gcc.gnu.org/gcc-4.7/changes.html#go
!   35. https://go.dev/doc/go1
!   36. https://gcc.gnu.org/gcc-4.7/changes.html#targets
!   37. https://gcc.gnu.org/gcc-4.7/changes.html#arm
!   38. https://gcc.gnu.org/gcc-4.7/changes.html#avr
!   39. http://savannah.nongnu.org/bugs/?35407
!   40. https://gcc.gnu.org/PR18145
!   41. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
!   42. http://www.nongnu.org/avr-libc/
!   43. https://gcc.gnu.org/PR54461
!   44. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
!   45. https://sites.google.com/site/x32abi/
!   46. https://gcc.gnu.org/gcc-4.7/changes.html#mips
!   47. https://dwarfstd.org/issues/100909.1.html
!   48. https://dwarfstd.org/issues/100909.2.html
!   49. https://dwarfstd.org/issues/140425.1.html
!   50. https://dwarfstd.org/issues/110722.1.html
!   51. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1
!   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
!   53. https://go.dev/doc/go1
!   54. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2
!   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
!   56. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3
!   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
!   58. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4
!   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
!   60. https://gcc.gnu.org/onlinedocs/
!   61. mailto:gcc-help@gcc.gnu.org
!   62. mailto:gcc@gcc.gnu.org
!   63. https://gcc.gnu.org/lists.html
!   64. https://www.fsf.org/
!   65. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.6/index.html
  
--- 13107,13174 ----
     2. https://gcc.gnu.org/gcc-4.7/porting_to.html
     3. https://gcc.gnu.org/wiki/TransactionalMemory
     4. https://gcc.gnu.org/wiki/Atomic/GCCMM
!    5. https://gcc.gnu.org/gcc-4.7/changes.html#c
!    6. https://gcc.gnu.org/gcc-4.7/changes.html#cxx
     7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
!   12. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
!   13. https://gcc.gnu.org/PR14258
!   14. https://gcc.gnu.org/PR35688
!   15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
!   16. https://gcc.gnu.org/gcc-4.7/changes.html#fortran
!   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
!   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
!   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
!   20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
!   21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
!   22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
!   23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
!   24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
!   25. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
!   26. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
!   27. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
!   28. https://gcc.gnu.org/wiki/Fortran2003Status
!   29. https://gcc.gnu.org/wiki/OOP
!   30. https://gcc.gnu.org/wiki/Fortran2008Status
!   31. https://gcc.gnu.org/wiki/Coarray
!   32. https://gcc.gnu.org/wiki/CoarrayLib
!   33. https://gcc.gnu.org/wiki/TS29113Status
!   34. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
!   35. https://gcc.gnu.org/gcc-4.7/changes.html#go
!   36. https://go.dev/doc/go1
!   37. https://gcc.gnu.org/gcc-4.7/changes.html#targets
!   38. https://gcc.gnu.org/gcc-4.7/changes.html#arm
!   39. https://gcc.gnu.org/gcc-4.7/changes.html#avr
!   40. http://savannah.nongnu.org/bugs/?35407
!   41. https://gcc.gnu.org/PR18145
!   42. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
!   43. http://www.nongnu.org/avr-libc/
!   44. https://gcc.gnu.org/PR54461
!   45. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
!   46. https://sites.google.com/site/x32abi/
!   47. https://gcc.gnu.org/gcc-4.7/changes.html#mips
!   48. https://dwarfstd.org/issues/100909.1.html
!   49. https://dwarfstd.org/issues/100909.2.html
!   50. https://dwarfstd.org/issues/140425.1.html
!   51. https://dwarfstd.org/issues/110722.1.html
!   52. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1
!   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
!   54. https://go.dev/doc/go1
!   55. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2
!   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
!   57. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3
!   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
!   59. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4
!   60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
!   61. https://gcc.gnu.org/onlinedocs/
!   62. mailto:gcc-help@gcc.gnu.org
!   63. mailto:gcc@gcc.gnu.org
!   64. https://gcc.gnu.org/lists.html
!   65. https://www.fsf.org/
!   66. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.6/index.html
  
*************** New Languages and Language specific impr
*** 13521,13527 ****
       * G++ now issues clearer diagnostics when a colon is used in a place
         where a double-colon was intended.
       * G++ no longer accepts mutable on reference members ([12]c++/33558).
!        Use -fpermissive to allow the old, non-conforming behaviour.
       * A few mangling fixes have been made, to attribute const/volatile on
         function pointer types, decltype of a plain decl, and use of a
         function parameter in the declaration of another parameter. By
--- 13579,13585 ----
       * G++ now issues clearer diagnostics when a colon is used in a place
         where a double-colon was intended.
       * G++ no longer accepts mutable on reference members ([12]c++/33558).
!        Use -fpermissive to allow the old, non-conforming behavior.
       * A few mangling fixes have been made, to attribute const/volatile on
         function pointer types, decltype of a plain decl, and use of a
         function parameter in the declaration of another parameter. By
*************** New Languages and Language specific impr
*** 13539,13545 ****
      struct A { A(); };
      struct B : A { int i; };
      const B b = B();
!        Use -fpermissive to allow the old, non-conforming behaviour.
  
      Runtime Library (libstdc++)
  
--- 13597,13603 ----
      struct A { A(); };
      struct B : A { int i; };
      const B b = B();
!        Use -fpermissive to allow the old, non-conforming behavior.
  
      Runtime Library (libstdc++)
  
*************** Changes for GCC Developers
*** 14100,14106 ****
     provided this notice is preserved.
  
     These pages are [46]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 14158,14164 ----
     provided this notice is preserved.
  
     These pages are [46]maintained by the GCC team. Last modified
!    2026-06-07.
  
  References
  
*************** New Languages and Language specific impr
*** 14517,14523 ****
            + Existing facilities now exploit explicit operators and the
              newly implemented core C++0x features.
            + The header <cstdatomic> has been renamed to <atomic>.
!      * An experimental [15]profile mode has been added. This is an
         implementation of many C++ standard library constructs with an
         additional analysis layer that gives performance improvement advice
         based on recognition of suboptimal usage patterns. For example,
--- 14575,14581 ----
            + Existing facilities now exploit explicit operators and the
              newly implemented core C++0x features.
            + The header <cstdatomic> has been renamed to <atomic>.
!      * An experimental profile mode has been added. This is an
         implementation of many C++ standard library constructs with an
         additional analysis layer that gives performance improvement advice
         based on recognition of suboptimal usage patterns. For example,
*************** vector-size: improvement = 3: call stack
*** 14539,14545 ****
         These constructs can be substituted for the normal libstdc++
         constructs on a piecemeal basis, or all existing components can be
         transformed via the -D_GLIBCXX_PROFILE macro.
!      * [16]Support for decimal floating-point arithmetic (aka ISO C++ TR
         24733) has been added. This support is in header file
         <decimal/decimal>, uses namespace std::decimal, and includes
         classes decimal32, decimal64, and decimal128.
--- 14597,14603 ----
         These constructs can be substituted for the normal libstdc++
         constructs on a piecemeal basis, or all existing components can be
         transformed via the -D_GLIBCXX_PROFILE macro.
!      * [15]Support for decimal floating-point arithmetic (aka ISO C++ TR
         24733) has been added. This support is in header file
         <decimal/decimal>, uses namespace std::decimal, and includes
         classes decimal32, decimal64, and decimal128.
*************** vector-size: improvement = 3: call stack
*** 14549,14568 ****
         components that simplify the internal representation and present a
         more intuitive view of components when used with
         appropriately-advanced versions of GDB. For more information,
!        please consult the more [17]detailed description.
       * The default behavior for comparing typeinfo names has changed, so
         in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
       * The new -static-libstdc++ option directs g++ to link the C++
         library statically, even if the default would normally be to link
         it dynamically.
  
!   [18]Fortran
  
       * The COMMON default padding has been changed - instead of adding the
         padding before a variable it is now added afterwards, which
         increases the compatibility with other vendors and helps to obtain
         the correct output in some cases. Cf. also the -falign-commons
!        option ([19]added in 4.4).
       * The -finit-real= option now also supports the value snan for
         signaling not-a-number; to be effective, one additionally needs to
         enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
--- 14607,14626 ----
         components that simplify the internal representation and present a
         more intuitive view of components when used with
         appropriately-advanced versions of GDB. For more information,
!        please consult the more [16]detailed description.
       * The default behavior for comparing typeinfo names has changed, so
         in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
       * The new -static-libstdc++ option directs g++ to link the C++
         library statically, even if the default would normally be to link
         it dynamically.
  
!   [17]Fortran
  
       * The COMMON default padding has been changed - instead of adding the
         padding before a variable it is now added afterwards, which
         increases the compatibility with other vendors and helps to obtain
         the correct output in some cases. Cf. also the -falign-commons
!        option ([18]added in 4.4).
       * The -finit-real= option now also supports the value snan for
         signaling not-a-number; to be effective, one additionally needs to
         enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
*************** vector-size: improvement = 3: call stack
*** 14580,14586 ****
       * The run-time checking -fcheck=bounds now warns about invalid string
         lengths of character dummy arguments. Additionally, more
         compile-time checks have been added.
!      * The new option [20]-fno-protect-parens has been added; if set, the
         compiler may reorder REAL and COMPLEX expressions without regard to
         parentheses.
       * GNU Fortran no longer links against libgfortranbegin. As before,
--- 14638,14644 ----
       * The run-time checking -fcheck=bounds now warns about invalid string
         lengths of character dummy arguments. Additionally, more
         compile-time checks have been added.
!      * The new option [19]-fno-protect-parens has been added; if set, the
         compiler may reorder REAL and COMPLEX expressions without regard to
         parentheses.
       * GNU Fortran no longer links against libgfortranbegin. As before,
*************** vector-size: improvement = 3: call stack
*** 14588,14594 ****
         which is invoked by the main function. However, main is now
         generated and put in the same object file as MAIN__. For the time
         being, libgfortranbegin still exists for backward compatibility.
!        For details see the new [21]Mixed-Language Programming chapter in
         the manual.
       * The I/O library was restructured for performance and cleaner code.
       * Array assignments and WHERE are now run in parallel when OpenMP's
--- 14646,14652 ----
         which is invoked by the main function. However, main is now
         generated and put in the same object file as MAIN__. For the time
         being, libgfortranbegin still exists for backward compatibility.
!        For details see the new [20]Mixed-Language Programming chapter in
         the manual.
       * The I/O library was restructured for performance and cleaner code.
       * Array assignments and WHERE are now run in parallel when OpenMP's
*************** vector-size: improvement = 3: call stack
*** 14600,14606 ****
       * More Fortran 2003 and Fortran 2008 mathematical functions can now
         be used as initialization expressions.
       * Some extended attributes such as STDCALL are now supported via the
!        [22]GCC$ compiler directive.
       * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
         intrinsic behaves now as if zero were always positive.
       * For legacy compatibiliy: On Cygwin and MinGW, the special files
--- 14658,14664 ----
       * More Fortran 2003 and Fortran 2008 mathematical functions can now
         be used as initialization expressions.
       * Some extended attributes such as STDCALL are now supported via the
!        [21]GCC$ compiler directive.
       * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
         intrinsic behaves now as if zero were always positive.
       * For legacy compatibiliy: On Cygwin and MinGW, the special files
*************** vector-size: improvement = 3: call stack
*** 14626,14632 ****
              procedure pointer with PASS attribute now have to use CLASS in
              line with the Fortran 2003 standard; the workaround to use
              TYPE is no longer supported.
!           + [23]Experimental, incomplete support for polymorphism,
              including CLASS, SELECT TYPE and dynamic dispatch of
              type-bound procedure calls. Some features do not work yet such
              as unlimited polymorphism (CLASS(*)).
--- 14684,14690 ----
              procedure pointer with PASS attribute now have to use CLASS in
              line with the Fortran 2003 standard; the workaround to use
              TYPE is no longer supported.
!           + [22]Experimental, incomplete support for polymorphism,
              including CLASS, SELECT TYPE and dynamic dispatch of
              type-bound procedure calls. Some features do not work yet such
              as unlimited polymorphism (CLASS(*)).
*************** vector-size: improvement = 3: call stack
*** 14643,14649 ****
              ATAN(Y,X) is now an alias for ATAN2(Y,X).
            + The BLOCK construct has been implemented.
  
! [24]New Targets and Target Specific Improvements
  
    AIX
  
--- 14701,14707 ----
              ATAN(Y,X) is now an alias for ATAN2(Y,X).
            + The BLOCK construct has been implemented.
  
! [23]New Targets and Target Specific Improvements
  
    AIX
  
*************** vector-size: improvement = 3: call stack
*** 14674,14680 ****
            + ATmega16U2
            + ATmega32U2
  
!   [25]IA-32/x86-64
  
       * GCC now will set the default for -march= based on the configure
         target.
--- 14732,14738 ----
            + ATmega16U2
            + ATmega32U2
  
!   [24]IA-32/x86-64
  
       * GCC now will set the default for -march= based on the configure
         target.
*************** vector-size: improvement = 3: call stack
*** 14708,14714 ****
       * GCC now supports thread-local storage (TLS) on M68K and ColdFire
         processors.
  
!   [26]MeP
  
     Support has been added for the Toshiba Media embedded Processor (MeP,
     or mep-elf) embedded target.
--- 14766,14772 ----
       * GCC now supports thread-local storage (TLS) on M68K and ColdFire
         processors.
  
!   [25]MeP
  
     Support has been added for the Toshiba Media embedded Processor (MeP,
     or mep-elf) embedded target.
*************** vector-size: improvement = 3: call stack
*** 14746,14752 ****
         use_debug_exception_return. See the documentation for more details
         about these attributes.
  
!   [27]RS/6000 (POWER/PowerPC)
  
       * GCC now supports the Power ISA 2.06, which includes the VSX
         instructions that add vector 64-bit floating point support, new
--- 14804,14810 ----
         use_debug_exception_return. See the documentation for more details
         about these attributes.
  
!   [26]RS/6000 (POWER/PowerPC)
  
       * GCC now supports the Power ISA 2.06, which includes the VSX
         instructions that add vector 64-bit floating point support, new
*************** vector-size: improvement = 3: call stack
*** 14771,14783 ****
         adhere to the ABI for 128-bit vectors with 64-bit integer base
         types (PR 48857). This is also fixed in the GCC 4.6.1 release.
  
!   [28]RX
  
     Support has been added for the Renesas RX Processor (rx-elf) target.
  
! [29]Operating Systems
  
!   [30]Windows (Cygwin and MinGW)
  
       * GCC now installs all the major language runtime libraries as DLLs
         when configured with the --enable-shared option.
--- 14829,14841 ----
         adhere to the ABI for 128-bit vectors with 64-bit integer base
         types (PR 48857). This is also fixed in the GCC 4.6.1 release.
  
!   [27]RX
  
     Support has been added for the Renesas RX Processor (rx-elf) target.
  
! [28]Operating Systems
  
!   [29]Windows (Cygwin and MinGW)
  
       * GCC now installs all the major language runtime libraries as DLLs
         when configured with the --enable-shared option.
*************** Other significant improvements
*** 14826,14841 ****
         infodir info documentation [DATAROOTDIR/info]
         mandir  man documentation [DATAROOTDIR/man]
  
! [31]GCC 4.5.1
  
!    This is the [32]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
    All languages
  
!      * GCC's new link-time optimizer ([33]-flto) now also works on a few
         non-ELF targets:
            + Cygwin (*-cygwin*)
            + MinGW (*-mingw*)
--- 14884,14899 ----
         infodir info documentation [DATAROOTDIR/info]
         mandir  man documentation [DATAROOTDIR/man]
  
! [30]GCC 4.5.1
  
!    This is the [31]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
    All languages
  
!      * GCC's new link-time optimizer ([32]-flto) now also works on a few
         non-ELF targets:
            + Cygwin (*-cygwin*)
            + MinGW (*-mingw*)
*************** Other significant improvements
*** 14843,14858 ****
         LTO is not enabled by default for these targets. To enable LTO, you
         should configure with the --enable-lto option.
  
! [34]GCC 4.5.2
  
!    This is the [35]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [36]GCC 4.5.3
  
!    This is the [37]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 14901,14916 ----
         LTO is not enabled by default for these targets. To enable LTO, you
         should configure with the --enable-lto option.
  
! [33]GCC 4.5.2
  
!    This is the [34]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [35]GCC 4.5.3
  
!    This is the [36]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Other significant improvements
*** 14867,14893 ****
     vec_vsx_ld and vec_vsx_st which always generates the VSX memory
     instructions.
  
! [38]GCC 4.5.4
  
!    This is the [39]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [40]GCC manuals. If that fails, the
!     [41]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [42]gcc@gcc.gnu.org. All of [43]our lists have public
      archives.
  
!    Copyright (C) [44]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [45]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 14925,14951 ----
     vec_vsx_ld and vec_vsx_st which always generates the VSX memory
     instructions.
  
! [37]GCC 4.5.4
  
!    This is the [38]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [39]GCC manuals. If that fails, the
!     [40]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [41]gcc@gcc.gnu.org. All of [42]our lists have public
      archives.
  
!    Copyright (C) [43]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [44]maintained by the GCC team. Last modified
!    2025-09-29.
  
  References
  
*************** References
*** 14905,14941 ****
    12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
    13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
    14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
!   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
!   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
!   17. https://sourceware.org/gdb/wiki/STLSupport
!   18. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran
!   19. https://gcc.gnu.org/gcc-4.4/changes.html
!   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
!   21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
!   22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
!   23. https://gcc.gnu.org/wiki/OOP
!   24. https://gcc.gnu.org/gcc-4.5/changes.html#targets
!   25. https://gcc.gnu.org/gcc-4.5/changes.html#x86
!   26. https://gcc.gnu.org/gcc-4.5/changes.html#mep
!   27. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000
!   28. https://gcc.gnu.org/gcc-4.5/changes.html#rx
!   29. https://gcc.gnu.org/gcc-4.5/changes.html#os
!   30. https://gcc.gnu.org/gcc-4.5/changes.html#windows
!   31. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1
!   32. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
!   33. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
!   34. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2
!   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
!   36. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3
!   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
!   38. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4
!   39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
!   40. https://gcc.gnu.org/onlinedocs/
!   41. mailto:gcc-help@gcc.gnu.org
!   42. mailto:gcc@gcc.gnu.org
!   43. https://gcc.gnu.org/lists.html
!   44. https://www.fsf.org/
!   45. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.4/index.html
  
--- 14963,14998 ----
    12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
    13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
    14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
!   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
!   16. https://sourceware.org/gdb/wiki/STLSupport
!   17. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran
!   18. https://gcc.gnu.org/gcc-4.4/changes.html
!   19. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
!   20. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
!   21. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
!   22. https://gcc.gnu.org/wiki/OOP
!   23. https://gcc.gnu.org/gcc-4.5/changes.html#targets
!   24. https://gcc.gnu.org/gcc-4.5/changes.html#x86
!   25. https://gcc.gnu.org/gcc-4.5/changes.html#mep
!   26. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000
!   27. https://gcc.gnu.org/gcc-4.5/changes.html#rx
!   28. https://gcc.gnu.org/gcc-4.5/changes.html#os
!   29. https://gcc.gnu.org/gcc-4.5/changes.html#windows
!   30. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1
!   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
!   32. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
!   33. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2
!   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
!   35. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3
!   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
!   37. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4
!   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
!   39. https://gcc.gnu.org/onlinedocs/
!   40. mailto:gcc-help@gcc.gnu.org
!   41. mailto:gcc@gcc.gnu.org
!   42. https://gcc.gnu.org/lists.html
!   43. https://www.fsf.org/
!   44. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.4/index.html
  
*************** GCC 3.3
*** 22010,22016 ****
     provided this notice is preserved.
  
     These pages are [563]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
--- 22067,22073 ----
     provided this notice is preserved.
  
     These pages are [563]maintained by the GCC team. Last modified
!    2025-06-05.
  
  References
  
*************** References
*** 22019,22025 ****
     3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
     4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
     5. https://gcc.gnu.org/news/dfa.html
!    6. https://gcc.gnu.org/c99status.html
     7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
     8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
     9. https://gcc.gnu.org/PR10140
--- 22076,22082 ----
     3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
     4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
     5. https://gcc.gnu.org/news/dfa.html
!    6. https://gcc.gnu.org/projects/c-status.html
     7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
     8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
     9. https://gcc.gnu.org/PR10140
*************** General Optimizer Improvements
*** 23633,23639 ****
         for profile driven optimizations.
         Options -fprofile-arcs and -fbranch-probabilities can now be used
         to improve speed of the generated code by profiling the actual
!        program behaviour on typical runs. In the absence of profile info
         the compiler attempts to guess the profile statically.
       * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
         monitor performance of the generated code.
--- 23690,23696 ----
         for profile driven optimizations.
         Options -fprofile-arcs and -fbranch-probabilities can now be used
         to improve speed of the generated code by profiling the actual
!        program behavior on typical runs. In the absence of profile info
         the compiler attempts to guess the profile statically.
       * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
         monitor performance of the generated code.
*************** Documentation improvements
*** 23932,23945 ****
     provided this notice is preserved.
  
     These pages are [14]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
     1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
     2. https://gcc.gnu.org/news/profiledriven.html
     3. https://gcc.gnu.org/benchmarks/
!    4. https://gcc.gnu.org/c99status.html
     5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
     6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
     7. https://www.adacore.com/
--- 23989,24002 ----
     provided this notice is preserved.
  
     These pages are [14]maintained by the GCC team. Last modified
!    2026-06-07.
  
  References
  
     1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
     2. https://gcc.gnu.org/news/profiledriven.html
     3. https://gcc.gnu.org/benchmarks/
!    4. https://gcc.gnu.org/projects/c-status.html
     5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
     6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
     7. https://www.adacore.com/
*************** New Languages and Language specific impr
*** 24109,24117 ****
       * New C++ support library and many C++ bug fixes, vastly improving
         our conformance to the ISO C++ standard.
       * New [7]inliner for C++.
!      * Rewritten C preprocessor, integrated into the C, C++ and Objective
!        C compilers, with very many improvements including ISO C99 support
!        and [8]improvements to dependency generation.
       * Support for more [9]ISO C99 features.
       * Many improvements to support for checking calls to format functions
         such as printf and scanf, including support for ISO C99 format
--- 24166,24174 ----
       * New C++ support library and many C++ bug fixes, vastly improving
         our conformance to the ISO C++ standard.
       * New [7]inliner for C++.
!      * Rewritten C preprocessor, integrated into the C, C++ and
!        Objective-C compilers, with very many improvements including ISO
!        C99 support and [8]improvements to dependency generation.
       * Support for more [9]ISO C99 features.
       * Many improvements to support for checking calls to format functions
         such as printf and scanf, including support for ISO C99 format
*************** Other significant improvements
*** 24198,24204 ****
     provided this notice is preserved.
  
     These pages are [18]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 24255,24261 ----
     provided this notice is preserved.
  
     These pages are [18]maintained by the GCC team. Last modified
!    2026-01-02.
  
  References
  
*************** References
*** 24210,24216 ****
     6. https://gcc.gnu.org/gcc-3.0/c++features.html
     7. https://gcc.gnu.org/news/inlining.html
     8. https://gcc.gnu.org/news/dependencies.html
!    9. https://gcc.gnu.org/c99status.html
    10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
    11. https://gcc.gnu.org/gcc-3.0/libgcc.html
    12. https://gcc.gnu.org/gcc-2.95/features.html
--- 24267,24273 ----
     6. https://gcc.gnu.org/gcc-3.0/c++features.html
     7. https://gcc.gnu.org/news/inlining.html
     8. https://gcc.gnu.org/news/dependencies.html
!    9. https://gcc.gnu.org/projects/c-status.html
    10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
    11. https://gcc.gnu.org/gcc-3.0/libgcc.html
    12. https://gcc.gnu.org/gcc-2.95/features.html
*************** http://gcc.gnu.org/gcc-3.0/caveats.html
*** 24239,24245 ****
         about this may be fixed by adding a null statement (a single
         semicolon) after the label.
       * The poorly documented extension that allowed string constants in C,
!        C++ and Objective C to contain unescaped newlines has been
         deprecated and may be removed in a future version. Programs using
         this extension may be fixed in several ways: the bare newline may
         be replaced by \n, or preceded by \n\, or string concatenation may
--- 24296,24302 ----
         about this may be fixed by adding a null statement (a single
         semicolon) after the label.
       * The poorly documented extension that allowed string constants in C,
!        C++ and Objective-C to contain unescaped newlines has been
         deprecated and may be removed in a future version. Programs using
         this extension may be fixed in several ways: the bare newline may
         be replaced by \n, or preceded by \n\, or string concatenation may
*************** http://gcc.gnu.org/gcc-3.0/caveats.html
*** 24269,24275 ****
     provided this notice is preserved.
  
     These pages are [7]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 24326,24332 ----
     provided this notice is preserved.
  
     These pages are [7]maintained by the GCC team. Last modified
!    2026-01-02.
  
  References
  
*************** http://gcc.gnu.org/gcc-2.95/features.htm
*** 24419,24425 ****
            + sh4
            + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
              arm-linux)
!           + vxWorks targets include support for vxWorks threads
            + StrongARM 110 and ARM9 support added. ARM Scheduling
              parameters rewritten.
            + Various changes to the MIPS port to avoid assembler macros,
--- 24476,24482 ----
            + sh4
            + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
              arm-linux)
!           + VxWorks targets include support for VxWorks threads
            + StrongARM 110 and ARM9 support added. ARM Scheduling
              parameters rewritten.
            + Various changes to the MIPS port to avoid assembler macros,
*************** Additional Changes in GCC 2.95.1
*** 24475,24481 ****
            + Fix compiler abort in new cfg code exposed by x86 port.
            + Fix out of range array reference in code convert flat
              registers to the x87 stacked FP register file.
!           + Fix minor vxworks configuration bug.
            + Fix return type of bsearch for SunOS 4.x.
       * Language & Runtime specific fixes.
            + The G++ signature extension has been deprecated. It will be
--- 24532,24538 ----
            + Fix compiler abort in new cfg code exposed by x86 port.
            + Fix out of range array reference in code convert flat
              registers to the x87 stacked FP register file.
!           + Fix minor VxWorks configuration bug.
            + Fix return type of bsearch for SunOS 4.x.
       * Language & Runtime specific fixes.
            + The G++ signature extension has been deprecated. It will be
*************** Additional Changes in GCC 2.95.3
*** 24616,24622 ****
     provided this notice is preserved.
  
     These pages are [22]maintained by the GCC team. Last modified
!    2023-09-02.
  
  References
  
--- 24673,24679 ----
     provided this notice is preserved.
  
     These pages are [22]maintained by the GCC team. Last modified
!    2025-10-08.
  
  References
  
*************** References
*** 24631,24637 ****
     9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
    10. https://gcc.gnu.org/news/gcj-announce.txt
    11. https://gcc.gnu.org/news/javaannounce.html
!   12. https://gcc.gnu.org/c99status.html
    13. https://gcc.gnu.org/news/chill.html
    14. https://gcc.gnu.org/news/sparc.html
    15. https://gcc.gnu.org/news/egcs-vcg.html
--- 24688,24694 ----
     9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
    10. https://gcc.gnu.org/news/gcj-announce.txt
    11. https://gcc.gnu.org/news/javaannounce.html
!   12. https://gcc.gnu.org/projects/c-status.html
    13. https://gcc.gnu.org/news/chill.html
    14. https://gcc.gnu.org/news/sparc.html
    15. https://gcc.gnu.org/news/egcs-vcg.html
diff -Nrcpad gcc-14.3.0/gcc/BASE-VER gcc-14.3.0-RC-20260619/gcc/BASE-VER
*** gcc-14.3.0/gcc/BASE-VER	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/BASE-VER	Fri Jun 19 06:51:01 2026
***************
*** 1 ****
! 14.3.0
--- 1 ----
! 14.3.1
diff -Nrcpad gcc-14.3.0/gcc/ChangeLog gcc-14.3.0-RC-20260619/gcc/ChangeLog
*** gcc-14.3.0/gcc/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/ChangeLog	Fri Jun 19 06:51:01 2026
***************
*** 1,3 ****
--- 1,2382 ----
+ 2026-06-17  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2026-06-09  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR middle-end/125621
+ 	* expmed.cc (make_tree): Fix CONST_POLY_INT case to pass type
+ 	instead of t, move it to its own switch case.
+ 
+ 2026-06-17  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-05-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/124151
+ 	* tree-sra.cc (build_user_friendly_ref_for_offset): Added parameters
+ 	CUR_SIZE and EXP_SIZE.  Added code passing the correct CUR_SIZE and
+ 	checking it against EXP_SIZE.  Removed unused code for the case when
+ 	EXP_TYPE was NULL_TREE.
+ 	(create_artificial_child_access): Adjusted the call to
+ 	build_user_friendly_ref_for_offset.
+ 	(propagate_subaccesses_from_rhs): Likewise.
+ 	(propagate_subaccesses_from_rhs): Removed a check that the size of
+ 	lchild is a multiple of BITS_PER_UNIT.
+ 	(propagate_subaccesses_from_lhs): Likewise.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-06-10  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR ipa/125699
+ 	* ipa-param-manipulation.cc (ipa_param_body_adjustments::prepare_debug_expressions): Fix
+ 	lifetime issue with m_dead_ssa_debug_equiv usage.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-06-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125774
+ 	* gimple-range-fold.cc (fold_using_range::relation_fold_and_or): Use
+ 	relation_swap rather than relation_negate when the operands are exchanged.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-03-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/124454
+ 	* regcprop.cc (pass_cprop_hardreg::execute): If something
+ 	changed and non-call exceptions is on, call purge_all_dead_edges
+ 	and cleanup_cfg.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-02-18  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/116053
+ 	* regcprop.cc (copyprop_hardreg_forward_1): Use delete_insn_and_edges
+ 	instead of delete_insn.
+ 
+ 2026-06-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2026-06-03  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/125431
+ 	* tree-vect-slp-patterns.cc (complex_mul_pattern::matches,
+ 	complex_fms_pattern::matches): Gate on FP contraction.
+ 
+ 2026-06-17  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2026-06-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/125795
+ 	* config/aarch64/aarch64-early-ra.cc (early_ra::allocate_colors):
+ 	Compute the allocated-FPR mask as
+ 	((1ULL << color->group->size) - 1) << best.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125501
+ 	* tree-ssa-dom.cc (set_global_ranges_from_unreachable_edges): Abort
+ 	if there are 2 SSA_NAMES on the branch condition.
+ 
+ 2026-06-12  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120560
+ 	* vr-values.cc (range_from_loop_direction): Use wi::ge_p rather
+ 	than wi::gt_p.
+ 
+ 2026-06-12  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2025-07-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/114790
+ 	* cgraph.cc (cgraph_update_edges_for_call_stmt_node): Resolve devirtualization
+ 	if call statement was optimized out or turned to direct call.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-05-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/125146
+ 	* gimple-fold.cc (fold_stmt_1): Discard stmts in seq
+ 	after failed gimple_simplify as well.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125025
+ 	* tree-ssa-loop-niter.cc (number_of_iterations_ne): Avoid
+ 	negation of most negative signed integer.
+ 	(number_of_iterations_lt): Likewise.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125019
+ 	* tree-vect-loop.cc (vectorizable_recurr): Properly guard
+ 	against hitting last stmt when searching for the insertion
+ 	place.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-04-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124868
+ 	* gimple-ssa-isolate-paths.cc (handle_return_addr_local_phi_arg):
+ 	Do not diagnose returns in blocks not dominated by the PHI.
+ 	(find_implicit_erroneous_behavior): Do two sweeps over PHIs,
+ 	first for NULL dereferences and then for local address returns.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-03-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124555
+ 	* match.pd ((A - B) >=/> 0 ? (A - B) : (B - A) -> abs (A - B)):
+ 	Guard the vector case with target_supports_op_p checks.
+ 	((A - B) <=/< 0 ? (A - B) : (B - A) -> -abs (A - B)): Likewise.
+ 	((type)A >=/> 0 ? A : -A -> abs (A)): Likewise.
+ 	((type)A <=/< 0 ? A : -A -> -abs (A)): Likewise.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123596
+ 	* tree-eh.cc (sink_clobbers): Create a virtual PHI when
+ 	one is required but not present, queuing arguments
+ 	for renaming.
+ 
+ 2026-06-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2026-06-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125751
+ 	* config/avr/avr.cc (avr_out_fract): Fix too small sequence
+ 	lengths in avr_asm_len calls.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/125079
+ 	* tree-ssa-strlen.cc (get_string_length): Transform
+ 	__strcat_chk (x, y, z) when we need strlen (x) afterwards into
+ 	l1 = strlen (x); l = __stpcpy_chk (x + l1, y, z - l1) - x;
+ 	where l is the strlen (x), instead of using z as last __stpcpy_chk
+ 	argument.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/125039
+ 	* range-op-float.cc (operator_not_equal::fold_range): Call
+ 	empty_range_varying when not calling frelop_early_resolve.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124133
+ 	* config/rs6000/rs6000-c.cc (c_fold_convert): New function.
+ 	(c_fold_build2_loc): Likewise.
+ 	(fully_fold_convert): Use c_fold_convert instead of fold_convert.
+ 	(altivec_build_resolved_builtin): Likewise.  Use c_fold_build2_loc
+ 	instead of fold_build2.
+ 	(resolve_vec_mul, resolve_vec_adde_sube, resolve_vec_addec_subec):
+ 	Use c_fold_build2_loc instead of fold_build2_loc.
+ 	(resolve_vec_splats, resolve_vec_extract): Use c_fold_convert instead
+ 	of fold_convert.
+ 	(resolve_vec_insert): Use c_fold_build2_loc instead of fold_build2.
+ 	(altivec_resolve_overloaded_builtin): Use c_fold_convert instead
+ 	of fold_convert.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124826
+ 	* gimple-lower-bitint.cc (bitint_large_huge::handle_load): Look through
+ 	BIT_FIELD_REF with zero bit offset.
+ 
+ 2026-06-03  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-05-08  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125049
+ 	* config/loongarch/predicates.md (ssp_operand): New
+ 	define_predicate.
+ 	(ssp_normal_operand): New define_predicate.
+ 	* config/loongarch/constraints.md (ZE): New define_constraint.
+ 	(ZF): New define_constraint.
+ 	* config/loongarch/loongarch.md (UNSPEC_SSP): New unspec.
+ 	(cbranch4): Add "@" to create gen_cbranch4(machine_mode, ...).
+ 	(@stack_protect_combined_set_normal_<mode>): New define_insn.
+ 	(@stack_protect_combined_set_extreme_<mode>): New define_insn.
+ 	(@stack_protect_combined_test_internal_<mode>): New define_insn.
+ 	(stack_protect_combined_set): New define_expand.
+ 	(stack_protect_combined_test): New define_expand.
+ 	* config/loongarch/loongarch-protos.h
+ 	(loongarch_output_asm_load_canary): Declare.
+ 	* config/loongarch/loongarch.cc (loongarch_print_operand): Allow
+ 	'v' to print d/w for DImode/SImode.
+ 	(loongarch_output_asm_load_canary): Implement.
+ 
+ 2026-06-01  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.cc (pa_trampoline_init): Rework to use
+ 	clear_cache pattern.
+ 	* config/pa/pa.md (dcacheflush): Use "<<" condition instead
+ 	of "<<=".
+ 	(icacheflush): Remove.
+ 	(icacheflush1, icacheflush2, icacheflush3): New flush patterns
+ 	for PA 1.x targets, PA 2.0 targets, and PA 1.x no space
+ 	register targets.
+ 	(clear_cache): Rework to flush data and instruction caches.
+ 	Skip flush if the start address is greater than or equal to
+ 	the end address.  Don't align the end address to a cacheline
+ 	boundary.  Handle instruction flushes for PA 1.x targets,
+ 	PA 2.0 targets, and PA 1.x no space register targets.
+ 
+ 2026-05-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2026-05-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125409
+ 	* config/avr/avr-fixed.md (FIXED_A, FIXED_B): Add PSI to iterators.
+ 
+ 2026-05-19  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR target/125351
+ 	* config/i386/i386.md: Use alternative to handle masm ptwrite
+ 	syntax.
+ 
+ 2026-05-14  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR target/124316
+ 	* config/i386/i386.md (ptwrite): Add explicit mode to
+ 	instruction.
+ 
+ 2026-05-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-04-15  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/122976
+ 	* tree-sra.cc (path_comparable_for_same_access): Return false if the
+ 	base is a MEM_REF with a different underlying type.
+ 
+ 2026-05-03  Collin Funk  <collin.funk1@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-05-03  Collin Funk  <collin.funk1@gmail.com>
+ 
+ 	* glimits.h (__STDC_VERSION_LIMITS_H__): Only define the macro
+ 	if it was not already defined.
+ 
+ 2026-04-30  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-04-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123102
+ 	* config/arm/arm.md (*cmp_ite0): Apply stricter checks on the
+ 	comparison mode.
+ 	(*cmp_ite1, *cmp_and, *cmp_ior): Likewise.
+ 
+ 2026-04-30  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-04-22  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/124933
+ 	* config/arm/constraints.md (Uj): Allow offset addressing for
+ 	all targets, only allow Neon addressing when we have both Neon
+ 	and FP16INST.
+ 	* config/arm/vfp.md (mov<mode>_vfp_<mode>16): Only use vld1/vst1
+ 	when the pattern needs address write-back.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-03-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124627
+ 	* tree-inline.cc (copy_debug_stmts): Only copy debug
+ 	stmts that are still in the IL.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-02-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124130
+ 	* tree-inline.cc (copy_edges_for_bb): Fixup noreturn calls
+ 	with abnormal edge source.
+ 
+ 2026-04-22  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-03-10  Jan Hubicka  <jh@suse.cz>
+ 		    Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/120987
+ 	* ipa-modref.cc (ipa_merge_modref_summary_after_inlining): Mask
+ 	off non const/pure/novops related flags when combining of outer
+ 	functions.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/123416
+ 	* ipa-modref.cc (ipa_merge_modref_summary_after_inlining):
+ 	Fix typo in condtion for load merging when no callee summary.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123061
+ 	PR tree-optimization/123636
+ 	* tree-ssa-loop-im.cc (fill_always_executed_in_1): Change
+ 	outer-to-inner to inner-to-outer iteration.  Update inner
+ 	loop state only when always executed in an immediately
+ 	nested loop.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-03-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124677
+ 	* tree-vect-loop.cc (vectorizable_recurr): Skip vector
+ 	stmts for the def.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-02-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124132
+ 	* tree-ssa-loop-split.cc (compute_new_first_bound): Fix
+ 	bound difference computation.
+ 
+ 2026-04-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-03-11  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123271
+ 	* config/arm/arm.md (subvsi3_intmin): Renamed to ...
+ 	(sub_cmpVsi3_intmin): ... this.
+ 	(subvsi3): Renamed to ...
+ 	(sub_cmpVsi3): ... this.
+ 	(subvsi3_imm1): Renamed to ...
+ 	(sub_cmpVsi3_imm1): ... this.
+ 	(usubvsi3_borrow): Renamed to ...
+ 	(usub_cmpVsi3_borrow): ... this.
+ 	(usubvsi3_borrow_imm): Renamed to ...
+ 	(usub_cmpVsi3_borrow_imm): ... this.
+ 	(subvsi3_borrow): Renamed to ...
+ 	(sub_cmpVsi3_borrow): ... this.
+ 	(subvsi3_borrow_imm): Renamed to ...
+ 	(sub_cmpVsi3_borrow_imm): ... this.
+ 
+ 2026-04-09  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR target/117771
+ 	PR c/124830
+ 	* system.h: Move the include of sstream and memory above safe-ctype.h.
+ 
+ 2026-04-09  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-04-09  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/105192
+ 	* ifcvt.cc (find_if_header): Don't attempt to use ctrap expander
+ 	after reload.
+ 
+ 2026-04-01  Wu Haotian  <rigoligo03@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-03-31  Wu Haotian  <rigoligo03@gmail.com>
+ 
+ 	* config.gcc: removed linux.h and t-linux for loongarch*-*-elf* targets
+ 
+ 2026-03-31  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* tree-ssa-dse.cc (compute_trims): Bail out if ref->size is not
+ 	byte aligned either.
+ 
+ 2026-03-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123573
+ 	* fold-const.cc (fold_vec_perm): Actually check, not assert,
+ 	that input and output vector element numbers agree.
+ 	* match.pd (vec_perm @0 @1 @2): Make sure element numbers
+ 	are the same when folding to an input vector and wrap that
+ 	inside a VIEW_CONVERT_EXPR.
+ 
+ 2026-03-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123175
+ 	* match.pd (vec_perm @0 @1 @2): Fixup for inputs having a
+ 	different number of elements than the result.
+ 	* tree-vect-generic.cc (lower_vec_perm): Likewise.
+ 
+ 2026-03-25  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-generic.cc (lower_vec_perm): Use output vector size instead
+ 	of input vector when determining output nunits.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119532
+ 	* tree-tailcall.cc (process_assignment): FAIL for fixed-point
+ 	typed functions.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/120182
+ 	* dse.cc (canon_address): Constant addresses have no
+ 	separate store group.
+ 
+ 2026-03-17  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve2.md (@aarch64_pred_revd<mode>):
+ 	Remove movprfx alternative.
+ 	(@cond_revd<mode>): Likewise.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR debug/123886
+ 	* dwarf2out.cc (sym_off_pair::sym): Remove GTY((skip)).
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123775
+ 	* match.pd ((view_convert (vec_cond ...))): Make sure the
+ 	resulting vec_cond can be expanded.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123741
+ 	* tree-vect-stmts.cc (vectorizable_store): Add missing check
+ 	on loop vectorization.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123729
+ 	* tree-vect-loop.cc (vect_create_epilog_for_reduction): Set
+ 	SSA_NAME_OCCURS_IN_ABNORMAL_PHI if the reduction flows
+ 	across an abnomal edge.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-phinodes.h (phi_arg_index_from_use): Use gphi *.
+ 	(phi_arg_edge_from_use): New helper composing
+ 	phi_arg_index_from_use and gimple_phi_arg_edge.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123602
+ 	* tree-ssa-pre.cc (find_or_generate_expression): Do not
+ 	generate references to abnormal SSA names.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123575
+ 	* match.pd (abs ((T)x) -> absu (x)): For vector type
+ 	arguments require the resulting operation is supported.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123537
+ 	* match.pd (REDUC (@0 & @1) -> @0[I] & @1[I]): Restrict
+ 	allowed conversions.
+ 
+ 2026-03-16  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	Backported from master:
+ 	2026-01-08  Richard Sandiford  <rdsandiford@googlemail.com>
+ 		    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122793
+ 	* tree-vect-slp.cc (vect_add_slp_permutation): Document the existing
+ 	identity_offset parameter.  Handle identities that take from the
+ 	second input rather than the first.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-09-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/107997
+ 	PR tree-optimization/121844
+ 	* tree-ssa-loop-ivopts.cc (allow_ip_end_pos_p): Do not allow
+ 	IP_END for latches ending with a control stmt.
+ 	(create_new_iv): Do not split the latch edge, instead assert
+ 	that's not necessary.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-05-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120341
+ 	* tree-ssa-loop-im.cc (can_sm_ref_p): STRING_CSTs are readonly.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/116296
+ 	* ipa-modref-tree.cc (modref_access_node::contains): Use
+ 	poly_offset_int for the param offset difference and the
+ 	overlap computation.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/111036
+ 	* match.pd (__builtin_constant_p ((T)x)): Strip nop-conversions
+ 	from __builtin_constant_p arguments.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/110043
+ 	* pointer-query.cc (get_offset_range): Fail for integer
+ 	types with precision larger than ptrdiff_type_node.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/109410
+ 	* tree-ssa-reassoc.cc (build_and_add_sum): Use
+ 	gsi_start_nondebug_after_labels_bb to look for a possible
+ 	returns-twice call.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/106859
+ 	* var-tracking.cc (val_store): Dump -1 as UID if setting_insn
+ 	is NULL.
+ 
+ 2026-03-16  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR target/124126
+ 	* config/aarch64/aarch64-builtins.cc (aarch64_init_ls64_builtins_types): Copy
+ 	the array type before setting the mode.
+ 
+ 2026-03-16  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR target/123285
+ 	* config/aarch64/aarch64-early-ra.cc (early_ra::form_chains): Process clobbers
+ 	and ABI clobbers before starting to form the chain.
+ 
+ 2026-03-16  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR target/123457
+ 	* config/aarch64/aarch64-sve-builtins.cc (struct registered_function_hasher):
+ 	Change base class to ggc_ptr_hash.
+ 	(initial_indexes): Mark with GTY.
+ 	(function_table): Likewise.
+ 	(handle_arm_sve_h): Allocate function_table from ggc instead of heap.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124135
+ 	* tree-inline.cc (expand_call_inline): If both gimple_call_lhs (stmt)
+ 	and use_retvar aren't gimple regs but have gimple reg type, use
+ 	separate load of use_retva into SSA_NAME and then store of it
+ 	into gimple_call_lhs (stmt).
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124358
+ 	* match.pd ((ptr) (x p+ y) p+ z -> (ptr) (x p+ (y + z))): Simplify
+ 	into (ptr) x p+ (y + z) instead.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124366
+ 	* config/i386/i386.md (@wrss<mode>, @wruss<mode>): Swap operand
+ 	order for -masm=intel.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124315
+ 	* config/i386/sse.md (avx512f_vmfmadd_<mode>_mask3<round_name>,
+ 	avx512f_vmfmsub_<mode>_mask3<round_name>,
+ 	avx512f_vmfnmadd_<mode>_mask3<round_name>,
+ 	avx512f_vmfnmsub_<mode>_mask3<round_name>): Use %<iptr>1 instead of
+ 	%<iptr>3 in -masm=intel syntax.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124335
+ 	* config/i386/sse.md (*avx512f_load<mode>_mask): Use %{%3%} instead of
+ 	%{3%} for -masm=intel syntax.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124138
+ 	* config/i386/i386.cc (avx_vpermilp_parallel): Verify
+ 	ipar[2] and ipar[3] aren't larger than 3.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/124056
+ 	* cfgexpand.cc (expand_asm_stmt): If after_md_seq is non-NULL, emit
+ 	it at the start of after_rtl_seq instead of after fallthru_label.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/116600
+ 	PR middle-end/123386
+ 	* cfgrtl.cc (force_nonfallthru_and_redirect): Don't do any
+ 	asm goto adjustments early, only note in asm_goto_edge if
+ 	any labels point originally to e->dest head.  After jumpblock
+ 	creation don't add an extra edge for asm_goto_edge, instead
+ 	adjust those labels pointing to former e->dest head to point
+ 	to jumpblock instead.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* alias.cc (get_alias_set): Allow TYPE_CANONICAL (mv) to be
+ 	not its own TYPE_MAIN_VARIANT, as long as its TYPE_MAIN_VARIANT
+ 	has TYPE_CANONICAL equal to itself.
+ 	* tree.cc (verify_type): Likewise.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123978
+ 	* range-op.h (OP_WIDEN_MULT_SIGNED_UNSIGNED): Define.
+ 	(OP_WIDEN_PLUS_SIGNED, OP_WIDEN_PLUS_UNSIGNED,
+ 	RANGE_OP_TABLE_SIZE): Renumber.
+ 	* gimple-range-op.cc (imple_range_op_handler::maybe_non_standard):
+ 	Use 3 different classes instead of 2 for WIDEN_MULT_EXPR, one
+ 	for both operands signed, one for both operands unsigned and
+ 	one for operands with different signedness.  In the last case
+ 	canonicalize to first operand signed second unsigned.
+ 	* range-op.cc (operator_widen_mult_signed::wi_fold): Use
+ 	TYPE_PRECISION (type) rather than wi::get_precision (whatever) * 2,
+ 	use SIGNED for all wide_int::from calls.
+ 	(operator_widen_mult_unsigned::wi_fold): Similarly but use UNSIGNED
+ 	for all wide_int::from calls.
+ 	(class operator_widen_mult_signed_unsigned): New type.
+ 	(operator_widen_mult_signed_unsigned::wi_fold): Define.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123818
+ 	* tree.cc (simple_cst_equal) <case CONSTRUCTOR>: Return -1 if some
+ 	recursive call returns -1.  Also compare indexes.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/122689
+ 	* gimple-lower-bitint.cc (gimple_lower_bitint): For the PHI handling
+ 	if min_prec == prec, break after emitting assignment from c.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121104
+ 	* tree-ssa-math-opts.cc (match_uaddc_usubc): Punt if
+ 	lhs of ovf1 or ovf2 doesn't have element type compatible with type.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123864
+ 	* match.pd (__builtin_mul_overflow_p (x, cst, (stype) 0) ->
+ 	x > stype_max / cst || x < stype_min / cst): Only check
+ 	integer_minus_onep for signed types.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123876
+ 	* omp-low.cc (diagnose_sb_2): Handle GIMPLE_ASM.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123703
+ 	* builtins.cc (fold_builtin_abs): Return NULL_TREE if type is not
+ 	integral.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123736
+ 	* tree-ssa-loop-unswitch.cc (hoist_guard): Guard dump message
+ 	on dump_file && (dump_flags & TDF_DETAILS) condition.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123513
+ 	* tree.cc (valid_new_delete_pair_p): If new_name[3] or delete_name[3]
+ 	is 'I', return false with *pcertain set to false rather than true.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/123607
+ 	* config/i386/i386.md (movhf_mask): Change constraint on
+ 	match_operand 2's second alternative from 0C to 0.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/120250
+ 	* combine.cc (recog_for_combine): Don't try to put SET_SRC
+ 	into a constant pool if SET_DEST is pc_rtx.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123431
+ 	* gimple-range-op.cc (gimple_range_op_handler::maybe_builtin_call):
+ 	Punt if type-generic builtins with a single argument don't have
+ 	exactly one argument.  For returns_arg punt if call doesn't have
+ 	at least one argument.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/invoke.texi (-x): Add objc-cpp-output,
+ 	objc++-cpp-output, adascil, adawhy, modula-2, modula-2-cpp-output,
+ 	rust and lto as further possible option arguments.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/111817
+ 	* stmt.cc (parse_input_constraint): For matching construct, goto
+ 	before the loop without changing j instead of break.  Remove comment
+ 	about that problem.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/119291
+ 	PR rtl-optimization/121773
+ 	* combine.cc (try_combine): Check that SET_DEST (setN) is neither
+ 	modified_between_p nor reg_used_between_p instead of just not
+ 	reg_used_between_p or pc_rtx.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-06  Jakub Jelinek  <jakub@redhat.com>
+ 		    Marco Falke  <falke.marco@gmail.com>
+ 
+ 	PR tree-optimization/123351
+ 	* tree-object-size.cc (object_sizes_set_temp): Separate calls to
+ 	make_ssa_name to ensure deterministic execution order.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/123217
+ 	* config/i386/i386-expand.cc (ix86_expand_builtin)
+ 	<case IX86_BUILTIN_ENCODEKEY128U32, case IX86_BUILTIN_ENCODEKEY256U32,
+ 	case IX86_BUILTIN_URDMSR>: Set target to a new pseudo even if it is
+ 	non-NULL but doesn't satisfy register_operand predicate.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/install.texi (--with-tls=): Fix a typo, were -> where.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/123155
+ 	* config/i386/xmmintrin.h (_mm_maskmove_si64): Rename offset automatic
+ 	variable to __offset.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122943
+ 	* tree-switch-conversion.cc (switch_conversion::build_arrays):
+ 	Always gimplify subtraction in utype without cast to tidxtype
+ 	and set m_arr_ref_first to the last stmt of that.  Remove unneeded
+ 	update_stmt call.  If tidxtype is not utype, append after that stmt
+ 	cast to tidxtype and set tidx to the lhs of that cast.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120052
+ 	* gimplify.cc (gimplify_call_expr): For IFN_UBSAN_BOUNDS
+ 	call with integer_onep first argument, change that argument
+ 	to 0 and add TYPE_MAX_VALUE (TYPE_DOMAIN (arr_type)) to
+ 	3rd argument before gimplification.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120564
+ 	* omp-expand.cc (extract_omp_for_update_vars): Use build2 instead of
+ 	fold_build2 to build argument for gimple_build_cond_empty.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR lto/122620
+ 	* gimplify-me.cc (gimple_regimplify_operands): Don't try to regimplify
+ 	TREE_CLOBBER on rhs of gimple_clobber_p if it has gimple_reg_type.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122394
+ 	* tree-ssa-phiopt.cc (spaceship_replacement): Use
+ 	build_debug_expr_decl instead of manually building DEBUG_EXPR_DECL
+ 	and getting SET_DECL_MODE wrong.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-03-04  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/119568
+ 	* tree-ssa-math-opts.cc (convert_plusminus_to_widen): Reject different
+ 	mode classes.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-02-02  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123294
+ 	* ifcvt.cc (noce_emit_store_flag): Reject modes
+ 	greater than MAX_FIXED_MODE_SIZE.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-01-18  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/123645
+ 	* tree-ssa-phiopt.cc (cond_removal_in_builtin_zero_pattern): Rewrite
+ 	the canonicalization of the args code based on e1/e2 being edges into
+ 	the join block.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2025-09-02  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/121776
+ 	* tree-ssa-strlen.cc (strlen_pass::handle_builtin_memcmp): Create
+ 	unaligned types if the alignment of the pointers is less
+ 	than the alignment of the new type.
+ 
+ 2026-03-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-02-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/122856
+ 	* ipa-cp.cc (self_recursive_pass_through_p): Test jump function type first.
+ 	(self_recursive_ancestor_p): New function.
+ 	(find_scalar_values_for_callers_subset): Test also for self-recursive
+ 	ancestor jump functions.
+ 	(push_agg_values_for_index_from_edge): Likewise.
+ 
+ 2026-03-09  Kalvis Duckmanton  <kalvisd@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-02-14  Kalvis Duckmanton  <kalvisd@gmail.com>
+ 
+ 	PR target/112400
+ 	* config/vax/vax.md (casesi1): Wrap naked operand 1 with a USE
+ 	where used with the insn split to.
+ 	(*casesi1): Likewise naked incoming operand 1.
+ 
+ 2026-03-05  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-03-05  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/123807
+ 	PR middle-end/124250
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_expand_vector_init_same): Revert r16-7163 change.
+ 
+ 2026-03-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-02-26  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR middle-end/124250
+ 	PR target/123807
+ 	* optabs.cc (expand_binop): Extend the shift amount if it's
+ 	narrower than the element of the shifted vector.
+ 
+ 2026-02-26  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Revert:
+ 	2025-11-08  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122097
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_const_vector_same_bytes_p): Add processing for
+ 	floating-point vector data.
+ 
+ 2026-02-26  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-02-03  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/predicates.md (const_vector_neg_fp_operand):
+ 	New define_predicate.
+ 	(reg_or_vector_neg_fp_operand): New define_predicate.
+ 	* config/loongarch/lasx.md (copysign<mode>3): Remove.
+ 	(xorsign<mode>3): Remove.
+ 	* config/loongarch/lsx.md (copysign<mode>3): Remove.
+ 	(@xorsign<mode>3): Remove.
+ 	* config/loongarch/simd.md (copysign<mode>3): New define_expand.
+ 	(@xorsign<mode>3): New define_expand.
+ 	(and<mode>3): Only allow IVEC instead of ALLVEC.
+ 	(ior<mode>3): Likewise.
+ 	(xor<mode>3): Likewise.
+ 	* config/loongarch/loongarch.cc (loongarch_print_operand): No
+ 	longer allow floating-point vector constants for %V.
+ 	(loongarch_const_vector_bitimm_set_p): Always return false for
+ 	floating-point vector constants.
+ 	(loongarch_build_signbit_mask): Factor out force_reg.
+ 	(loongarch_emit_swrsqrtsf): Use integer vector mode instead of
+ 	floating-point vector mode when masking zero inputs.
+ 
+ 2026-02-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/106260
+ 	* ipa-cp.cc (initialize_node_lattices): Replace assert that there are
+ 	callers with handling that situation when -fno-toplevel_reorder.
+ 
+ 2026-02-17  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-02-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117217
+ 	* tree-sra.cc (propagate_subaccesses_from_rhs): Do not propagate
+ 	bit-field children.
+ 	(propagate_subaccesses_from_lhs): Likewise.
+ 
+ 2026-02-11  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	PR target/123624
+ 	* config/aarch64/aarch64-protos.h
+ 	(aarch64_use_simple_return_insn_p): New.
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_use_simple_return_insn_p): New, used...
+ 	* config/aarch64/aarch64.md (simple_return): ...here.
+ 
+ 2026-02-06  xiezhiheng  <xiezhiheng@huawei.com>
+ 
+ 	Backported from master:
+ 	2026-02-05  xiezhiheng  <xiezhiheng@huawei.com>
+ 		    liyunfei  <liyunfei33@huawei.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): Add hip12 core
+ 	* config/aarch64/aarch64-cost-tables.h: Add hip12_extra_costs
+ 	* config/aarch64/aarch64-tune.md: Regenerate
+ 	* config/aarch64/aarch64.cc: Include hip12 tuning model
+ 	* doc/invoke.texi: Document -mcpu=hip12
+ 	* config/aarch64/tuning_models/hip12.h: New file.
+ 
+ 2026-02-05  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	Backported from master:
+ 	2026-01-28  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/123779
+ 	* config/i386/sse.md (*sse4_1_<code>v8qiv8hi2<mask_name>_2):
+ 	Rename to ...
+ 	(*sse4_1_<code>v8qiv8hi2_2): ... this, and drop mask conditions.
+ 	(*avx2_<code>v8qiv8si2<mask_name>_2): Rename to ...
+ 	(*avx2_<code>v8qiv8si2_2): ... this, and likewise.
+ 	(*sse4_1_<code>v4qiv4si2<mask_name>_2): Rename to ...
+ 	(*sse4_1_<code>v4qiv4si2_2): ... this, and likewise.
+ 	(*sse4_1_<code>v4hiv4si2<mask_name>_2): Rename to ...
+ 	(*sse4_1_<code>v4hiv4si2_2): ... this, and likewise.
+ 	(*avx2_<code>v4qiv4di2<mask_name>_2): Rename to ...
+ 	(*avx2_<code>v4qiv4di2_2): ... this, and likewise.
+ 	(*avx2_<code>v4hiv4di2<mask_name>_2): Rename to ...
+ 	(*avx2_<code>v4hiv4di2_2): ... this, and likewise.
+ 	(*sse4_1_<code>v2hiv2di2<mask_name>_2): Rename to ...
+ 	(*sse4_1_<code>v2hiv2di2_2): ... this, and likewise.
+ 	(*sse4_1_<code>v2siv2di2<mask_name>_2): Rename to ...
+ 	(*sse4_1_<code>v2siv2di2_2): ... this, and likewise.
+ 	(*avx512f_<code>v8qiv8di2<mask_name>_2): Rename to ...
+ 	(*avx512f_<code>v8qiv8di2_2): ... this.
+ 	(*avx512vl_<code>v8qiv8hi2_mask_2): New define_insn_and_split.
+ 	(*avx512vl_<code>v8qiv8si2_mask_2): Likewise.
+ 	(*avx512vl_<code>v4qiv4si2_mask_2): Likewise.
+ 	(*avx512vl_<code>v4hiv4si2_mask_2): Likewise.
+ 	(*avx512f_<code>v8qiv8di2_mask_2): Likewise.
+ 	(*avx512vl_<code>v4qiv4di2_mask_2): Likewise.
+ 	(*avx512vl_<code>v4hiv4di2_mask_2): Likewise.
+ 	(*avx512vl_<code>v2hiv2di2_mask_2): Likewise.
+ 	(*avx512vl_<code>v2siv2di2_mask_2): Likewise.
+ 
+ 2026-02-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/123548
+ 	* config/aarch64/arm_acle.h (__plix): Change arguments to be
+ 	const.
+ 	(__pldx): Change arguments to be const.
+ 
+ 2026-02-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123887
+ 	* match.pd ((zero_one ==/!= 0) ? .. z <op> y .. -> zero_one * z ..):
+ 	Check evaluating z unconditionally has no side-effects, like
+ 	trapping.
+ 
+ 2026-02-02  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-09-25  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/116772
+ 	* generic-match-head.cc (expr_no_side_effects_p): New function
+ 	* gimple-match-head.cc (expr_no_side_effects_p): New function
+ 
+ 2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* config/loongarch/loongarch-ftypes.def: Remove unused type.
+ 
+ 2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/123766
+ 	* config/loongarch/loongarch-builtins.cc
+ 	(loongarch_build_vpointer_type): New function.  Return a type
+ 	for 'volatile void *'.
+ 	(LARCH_ATYPE_VPOINTER): New macro.
+ 	* config/loongarch/loongarch-ftypes.def: Change the pointer
+ 	type of the store class function from CVPOINTER to VPOINTER.
+ 
+ 2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/123807
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_expand_vector_init_same): When same is MEM and
+ 	GET_MODE(same) != imode, first load the data from memory
+ 	and then process it further.
+ 
+ 2026-01-23  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR target/119130
+ 	* config/rs6000/altivec.md (convert_4f32_8f16): Use same operand
+ 	order for both endian format.
+ 
+ 2026-01-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	Backported from master:
+ 	2026-01-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/sse.md (avx2_vbroadcasti128_<mode>): Constraint
+ 	alternative 0 with jm and add gpr16 attr to avoid egpr usage.
+ 
+ 2026-01-22  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-01-22  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123742
+ 	* config/arm/neon.md (*smin<mode>3_neon): Renamed to ...
+ 	(*smin<VDQWH:mode>3_neon): ... this.  Add HFmode support.
+ 	(*smax<mode>3_neon): Renamed to ...
+ 	(*smax<VDQWH:mode>3_neon): ... this.  Add HFmode support.
+ 
+ 2026-01-19  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-19  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/117575
+ 	* config/loongarch/lasx.md: Modify the range of operand1.
+ 
+ 2026-01-16  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	PR target/123460
+ 	* config.gcc: Accept hyphens in aarch64 --with-arch extensions.
+ 
+ 2026-01-16  LIU Hao  <lh_mouse@126.com>
+ 
+ 	Backported from master:
+ 	2025-05-06  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR pch/14940
+ 	* config/i386/host-mingw32.cc (mingw32_gt_pch_use_address):
+ 	Replace the loop that attempted to map the PCH only to its
+ 	original address with more adaptive operations
+ 
+ 2026-01-16  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/123121
+ 	* lra-remat.cc (bad_for_rematerialization_p): Consider div/mod ops.
+ 	(operand_to_remat): Exclude rematerialization of insns with
+ 	multiple sets.
+ 
+ 2026-01-16  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-16  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/123521
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_expand_vector_init_same): Fixed a bug in the
+ 	vector initialization section..
+ 
+ 2026-01-15  DengJianbo  <dengjianbo@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-15  DengJianbo  <dengjianbo@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.md: Remove condition in template
+ 	movdi_symbolic_off64.
+ 
+ 2026-01-14  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/123300
+ 	* gimple-range-gori.cc (gori_map::exports_and_deps): New.
+ 	* gimple-range-gori.h (exports_and_deps): New prototype.
+ 	(FOR_EACH_GORI_EXPORT_AND_DEP_NAME): New macro.
+ 	* tree-vrp.cc (remove_unreachable:remove_unreachable): Initialize
+ 	m_tmp bitmap.
+ 	(remove_unreachable:~remove_unreachable): Dispose of m_tmp bitmap.
+ 	(remove_unreachable:fully_replaceable): Move from static function
+ 	and check reachability of exports and dependencies.
+ 
+ 2026-01-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2026-01-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/123484
+ 	* config/i386/mmx.md (divv4hf3): Add TARGET_MMX_WITH_SSE to
+ 	the condition.
+ 	(cmlav4hf4): Ditto.
+ 	(cmla_conjv4hf4): Ditto.
+ 	(cmulv4hf3): Ditto.
+ 	(cmul_conjv4hf3): Ditto.
+ 
+ 2025-12-19  Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	PR debug/121964
+ 	* dwarf2out.cc (gen_array_type_die): Add DW_AT_bit_stride attribute
+ 	for array types based on element type bit precision for integer and
+ 	boolean element types.
+ 
+ 2025-12-19  Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* machmode.def (VECTOR_BOOL_MODE): Fix comment.
+ 
+ 2025-12-11  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/122215
+ 	* ira-color.cc (improve_allocation): Use register filter for all
+ 	loop on hard regs.
+ 
+ 2025-11-28  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/122126
+ 	* gimple-isel.cc (gimple_expand_vec_set_extract_expr): Add bound check.
+ 
+ 2025-11-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-11-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-mcus.def (AVR_MCUS): Add avr16la14, avr16la20,
+ 	avr16la28, avr16la32, avr32la14, avr32la20, avr32la28, avr32la32.
+ 	* doc/avr-mmcu.texi: Rebuild.
+ 
+ 2025-11-27  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2025-11-26  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/122867
+ 	* config/arm/arm.cc (arm_print_operand): Use %- to
+ 	emit LOCAL_LABEL_PREFIX.
+ 	(arm_print_operand_punct_valid_p): Allow %- for punct
+ 	and make %_ valid for all compilation variants.
+ 	* config/arm/thumb2.md (*thumb2_cbz): Handle very
+ 	large branch ranges that exceed the limit of b<cond>.
+ 	(*thumb2_cbnz): Likewise.
+ 
+ 2025-11-20  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2025-11-20  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/122695
+ 	* config/loongarch/loongarch.cc (loongarch_expand_vec_perm_1):
+ 	Simplify and fix the logic preventing the xvshuf.* unpredictable
+ 	behavior.
+ 
+ 2025-11-18  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	Backported from master:
+ 	2025-11-04  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lto-wrapper.cc (debug_objcopy): Set type of INOFF to int64_t.
+ 	(run_gcc): Set type of FILE_OFFSET to int64_t.
+ 
+ 2025-11-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122408
+ 	* tree-vect-slp-patterns.cc (vect_validate_multiplication): Cleanup and
+ 	document interface.
+ 	(complex_mul_pattern::matches, complex_fms_pattern::matches): Update to
+ 	new interface.
+ 
+ 2025-11-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2025-08-18  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/121581
+ 	* doc/extend.texi (__builtin_object_size): Fix example.
+ 
+ 2025-11-12  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-11-12  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	PR target/122446
+ 	* config/i386/amxbf16intrin.h (_tile_dpbf16ps_internal):
+ 	Input register name by inline asm %c[...], and remove %% before tmm
+ 	from intel side.
+ 	* config/i386/amxcomplexintrin.h (_tile_cmmimfp16ps_internal): Ditto
+ 	(_tile_cmmrlfp16ps_internal): Ditto
+ 	(_tile_cmmimfp16ps): Ditto
+ 	(_tile_cmmrlfp16ps): Ditto
+ 	* config/i386/amxfp16intrin.h (_tile_dpfp16ps_internal): Ditto
+ 	(_tile_dpfp16ps): Ditto
+ 	* config/i386/amxint8intrin.h (_tile_int8_dp_internal): Ditto
+ 	* config/i386/amxtileintrin.h (_tile_loadd): Ditto
+ 	(_tile_loadd_internal): Ditto
+ 	(_tile_stream_loadd): Ditto
+ 	(_tile_stream_loadd_internal): Ditto
+ 	(_tile_stored): Ditto
+ 	(_tile_stored_internal): Ditto
+ 	(_tile_zero): Ditto
+ 	(_tile_zero_internal): Ditto
+ 
+ 2025-11-11  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-11-08  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122097
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_const_vector_same_bytes_p): Add processing for
+ 	floating-point vector data.
+ 
+ 2025-11-11  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-29  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122097
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_const_vector_bitimm_set_p): Add support for vector float.
+ 	(loongarch_const_vector_bitimm_clr_p): Likewise.
+ 	(loongarch_print_operand): Likewise.
+ 	* config/loongarch/simd.md (and<mode>3): Likewise.
+ 
+ 2025-11-11  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-29  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* config/loongarch/lasx.md (xor<mode>3): Delete.
+ 	(ior<mode>3): Delete.
+ 	(and<mode>3): Delete.
+ 	* config/loongarch/lsx.md (xor<mode>3): Delete.
+ 	(ior<mode>3): Delete.
+ 	(and<mode>3): Delete.
+ 	* config/loongarch/simd.md (xor<mode>3): Define.
+ 	(ior<mode>3): Likewise.
+ 	(and<mode>3): Likewise.
+ 
+ 2025-11-07  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/122223
+ 	* config/arm/mve.md (@mve_vbicq_f<mode>): Fix operands order.
+ 
+ 2025-11-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-11-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122516
+ 	* config/avr/elf.h (SUPPORTS_SHF_GNU_RETAIN): Define if
+ 	HAVE_GAS_SHF_GNU_RETAIN.
+ 
+ 2025-11-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-11-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.cc (avr_output_addr_vec): Output
+ 	a valid opcode prior to the first gs() label provided:
+ 	- The code is compiled for an arch that has AVR-SD mcus, and
+ 	- the function has a "section" attribute, and
+ 	- the function has a gs() label addresses switch/case table.
+ 
+ 2025-11-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-11-02  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122527
+ 	* config/avr/avr.cc (avr_load_libgcc_p): Return false if
+ 	the address-space is not ADDR_SPACE_FLASH.
+ 	(avr_out_lpm_no_lpmx [addr=REG]): Handle sizes of 3 and 4 bytes.
+ 
+ 2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/lasx.md (fnma<mode>4): Remove.
+ 	* config/loongarch/lsx.md (fnma<mode>4): Remove.
+ 	* config/loongarch/simd.md (fnma<mode>4): Simplify and correct.
+ 
+ 2025-10-26  LIU Hao  <lh_mouse@126.com>
+ 
+ 	Backported from master:
+ 	2025-10-26  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR target/119079
+ 	* config/i386/i386.md: Use `movsxd` to perform SI-to-DI extension in Intel
+ 	syntax.
+ 
+ 2025-10-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99930
+ 	PR target/122323
+ 	* config/i386/i386-expand.cc (ix86_expand_copysign): Swap
+ 	operands[1] with operands[2].  Optimize copysign (x, const_double)
+ 	instead of copysign (const_double, x).
+ 	* config/i386/i386.md (copysign<mode>3): Swap constraints for
+ 	operands[1] and operands[2].
+ 
+ 2025-10-22  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/driver-i386.cc (host_detect_local_cpu): Correct
+ 	the logic for unknown model number cpu guess value.
+ 
+ 2025-10-21  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR target/121599
+ 	* config/aarch64/aarch64-sve-builtins.cc
+ 	(function_expander::use_cond_insn): Use add_fixed_operand if
+ 	fallback_arg == CONST0_RTX (mode).
+ 
+ 2025-10-21  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-19  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/118919
+ 	* input.cc (file_cache_slot::m_file_path): Make non-const.
+ 	(file_cache_slot::evict): Free m_file_path.
+ 	(file_cache_slot::create): Store a copy of file_path if non-null.
+ 	(file_cache_slot::~file_cache_slot): Free m_file_path.
+ 
+ 2025-10-20  Svante Signell  <svante.signell@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-20  Svante Signell  <svante.signell@gmail.com>
+ 
+ 	PR go/104290
+ 	* config/gnu.h (OPTION_GLIBC_P, OPTION_GLIBC): Define.
+ 
+ 2025-10-16  Ayappan Perumal  <ayappap2@in.ibm.com>
+ 
+ 	Backported from master:
+ 	2025-10-16  Ayappan Perumal  <ayappap2@in.ibm.com>
+ 
+ 	* config/rs6000/aix.h (SUBTARGET_DRIVER_SELF_SPECS):
+ 	Error out when stack-protector option is used in AIX
+ 	as it is not supported on AIX
+ 	Approved By: Segher Boessenkool <segher@kernel.crashing.org>
+ 
+ 2025-10-15  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	* config/aarch64/aarch64-sys-regs.def: Fix pmsdsfr_el1 encoding.
+ 
+ 2025-10-15  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.h
+ 	(PTA_PANTHERLAKE): Remove PREFETCHI.
+ 	* doc/invoke.texi: Correct documentation.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122104
+ 	* tree-ssa-math-opts.cc (maybe_optimize_guarding_check): Call
+ 	reset_flow_sensitive_info_in_bb on bb when optimizing out the
+ 	guarding condition.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/121977
+ 	* omp-low.cc (lower_omp_regimplify_operands_p): If maybe_lookup_decl
+ 	returns NULL, use maybe_lookup_decl_in_outer_ctx as fallback.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/121828
+ 	* gimple-lower-bitint.cc (gimple_lower_bitint): For REALPART_EXPR
+ 	consumed by store in the same bb and with REALPART_EXPR from
+ 	optimizable_arith_overflow, don't add REALPART_EXPR lhs to
+ 	the m_names bitmap only if the cast from IMAGPART_EXPR doesn't
+ 	appear in between the REALPART_EXPR and the store.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/121453
+ 	* omp-expand.cc (expand_omp_for_init_counts): Clear fd->loop.n2
+ 	before first zero count check if zero_iter1_bb is non-NULL upon
+ 	entry and fd->loop.n2 has not been written yet.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-09-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121870
+ 	* tree-ssa-propagate.cc
+ 	(substitute_and_fold_engine::substitute_and_fold): Skip
+ 	removed stmts from noreturn fixup.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-08-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121370
+ 	* tree-scalar-evolution.cc (scev_dfs::add_to_evolution_1):
+ 	Avoid UB integer overflow in accumulating CHREC_RIGHT.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121256
+ 	* tree-vect-loop.cc (vectorizable_recurr): Build a correct
+ 	initialization vector for SLP_TREE_LANES > 1.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-15  Richard Biener  <rguenther@suse.de>
+ 		    Richard Sandiford   <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/121059
+ 	* tree-vect-stmts.cc (vectorizable_operation): Query
+ 	scalar_cond_masked_set with the correct number of masks.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120944
+ 	* tree-ssa-sccvn.cc (vn_reference_lookup_3): Gate optimizations
+ 	invalid when volatile is involved.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120817
+ 	* tree-ssa-dse.cc (initialize_ao_ref_for_dse): Use
+ 	ao_ref_init_from_ptr_and_range with unknown size for
+ 	.MASK_STORE and .MASK_LEN_STORE.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-06-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120654
+ 	* vr-values.cc (range_fits_type_p): Check for undefined_p ()
+ 	before accessing type ().
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120358
+ 	* tree-ssa-structalias.cc (get_constraint_for_1): Adjust
+ 	pruning of sub-variables according to the imprecise
+ 	known start offset.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-05-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120357
+ 	* tree-vect-loop.cc (vect_create_epilog_for_reduction): Create
+ 	the conditional reduction induction IV increment before the
+ 	main IV exit.
+ 
+ 2025-10-07  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-07  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122187
+ 	* config/avr/avr.cc (avr_out_extr, avr_out_extr_not):
+ 	Make a local copy of the passed rtx[] operands.
+ 
+ 2025-10-03  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2025-09-15  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR tree-optimization/121772
+ 	* match.pd: Add type check to reduc(ctor) pattern.
+ 
+ 2025-09-20  Michael Eager  <eager@eagercon.com>
+ 
+ 	PR target/118280
+ 	* config/microblaze/iterators.md: New.
+ 	* config/microblaze/microblaze-protos.h: Add
+ 	microblaze_subword_address.
+ 	* config/microblaze/microblaze.cc: Ditto.
+ 	* config/microblaze/microblaze.md: constants: Add UNSPECV_CAS_BOOL,
+ 	UNSPECV_CAS_MEM, UNSPECV_CAS_VAL, UNSPECV_ATOMIC_FETCH_OP
+ 	type: add atomic
+ 	* config/microblaze/sync.md: Add atomic_fetch_<atomic_optab>si
+ 	atomic_test_and_set
+ 
+ 2025-09-18  hongtao.liu  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-09-18  hongtao.liu  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_AVX512_MOVE_BY_PIECES):
+ 	Remove SPR/GNR/DMR.
+ 	(X86_TUNE_AVX512_STORE_BY_PIECES): Ditto.
+ 
+ 2025-09-16  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-09-12  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* lra-constraints.cc (get_equiv): Bounds check before accessing
+ 	data in ira_reg_equiv.
+ 
+ 2025-09-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/121749
+ 	* config/aarch64/aarch64-simd.md (aarch64_<shrn_op>shrn_n<mode>):
+ 	Use aarch64_simd_shift_imm_offset_<vn_mode> instead of
+ 	aarch64_simd_shift_imm_offset_<ve_mode> predicate.
+ 	(aarch64_<shrn_op>shrn_n<mode> VQN define_expand): Likewise.
+ 	(*aarch64_<shrn_op>rshrn_n<mode>_insn): Likewise.
+ 	(aarch64_<shrn_op>rshrn_n<mode>): Likewise.
+ 	(aarch64_<shrn_op>rshrn_n<mode> VQN define_expand): Likewise.
+ 	(aarch64_sqshrun_n<mode>_insn): Likewise.
+ 	(aarch64_sqshrun_n<mode>): Likewise.
+ 	(aarch64_sqshrun_n<mode> VQN define_expand): Likewise.
+ 	(aarch64_sqrshrun_n<mode>_insn): Likewise.
+ 	(aarch64_sqrshrun_n<mode>): Likewise.
+ 	(aarch64_sqrshrun_n<mode>): Likewise.
+ 	* config/aarch64/iterators.md (vn_mode): Handle DI, SI, HI modes.
+ 
+ 2025-09-15  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-09-15  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-mcus.def: Add avr32eb14, avr32eb20,
+ 	avr32eb28, avr32eb32.
+ 	* doc/avr-mmcu.texi: Rebuild.
+ 
+ 2025-09-15  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-16  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/vector.md (V_HW): Enable V1TI unconditionally and
+ 	add TI.
+ 	(vec_cmpu<VIT_HW:mode><VIT_HW:mode>): Add 128-bit integer
+ 	variants.
+ 	(*vec_cmpeq<mode><mode>_nocc_emu): Emulate operation.
+ 	(*vec_cmpgt<mode><mode>_nocc_emu): Emulate operation.
+ 	(*vec_cmpgtu<mode><mode>_nocc_emu): Emulate operation.
+ 
+ 2025-09-10  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-09-10  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/81540
+ 	PR target/49857
+ 	* common/config/avr/avr-common.cc: Disable -ftree-switch-conversion.
+ 
+ 2025-09-03  Benjamin Wu  <bwu25@cs.washington.edu>
+ 
+ 	Backported from master:
+ 	2025-07-13  Benjamin Wu  <bwu25@cs.washington.edu>
+ 
+ 	* gimple.h (GTMA_DOES_GO_IRREVOCABLE): Fix typo.
+ 
+ 2025-08-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-07-23  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/119085
+ 	* tree-sra.cc (sort_and_splice_var_accesses): Prevent total
+ 	scalarization if two incompatible aggregates access the same place.
+ 
+ 2025-08-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-07-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117423
+ 	* tree-sra.cc (analyze_access_subtree): Fix computation of grp_covered
+ 	flag.
+ 
+ 2025-08-20  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-08-20  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/121608
+ 	* config/avr/specs.h (LINK_RELAX_SPEC): Wrap in %{!r...}.
+ 
+ 2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121118
+ 	* config/aarch64/aarch64.cc (aarch64_sve_move_pred_via_while):
+ 	Return a VNx16BI predicate.
+ 
+ 2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/121253
+ 	* fwprop.cc (forward_propagate_into): Don't propagate asm defs.
+ 
+ 2025-08-15  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	PR target/121449
+ 	* config/aarch64/aarch64-sve.md
+ 	(mask_gather_load<mode><v_int_container>): Use vg<Vesize>
+ 	constraints for alternatives with immediate offset.
+ 	(mask_scatter_store<mode><v_int_container>): Likewise.
+ 
+ 2025-08-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 		    Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* doc/sourcebuild.texi (aarch64_sme_hw): Document.
+ 
+ 2025-08-15  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-08-15  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/121542
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_vector_costs::add_stmt_cost): When using vectype,
+ 	first determine whether it is NULL.
+ 
+ 2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121414
+ 	* config/aarch64/aarch64.cc (aarch64_is_variant_pcs): New function,
+ 	split out from...
+ 	(aarch64_asm_output_variant_pcs): ...here.  Handle various types
+ 	of SME function type.
+ 
+ 2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121294
+ 	* config/aarch64/aarch64.md (UNSPEC_REV_PRED): New unspec.
+ 	* config/aarch64/aarch64-sve.md (@aarch64_sve_rev<mode>_acle)
+ 	(*aarch64_sve_rev<mode>_acle): New patterns.
+ 	* config/aarch64/aarch64-sve-builtins-base.cc
+ 	(svrev_impl::expand): Use the new patterns for boolean svrev.
+ 
+ 2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121294
+ 	* config/aarch64/iterators.md (UNSPEC_TRN1_CONV): Delete.
+ 	(UNSPEC_PERMUTE_PRED): New unspec.
+ 	* config/aarch64/aarch64-sve.md (@aarch64_sve_trn1_conv<mode>):
+ 	Replace with...
+ 	(@aarch64_sve_<perm_insn><mode>_acle)
+ 	(*aarch64_sve_<perm_insn><mode>_acle): ...these new patterns.
+ 	* config/aarch64/aarch64.cc (aarch64_expand_sve_const_pred_trn):
+ 	Update accordingly.
+ 	* config/aarch64/aarch64-sve-builtins-functions.h
+ 	(binary_permute::expand): Use the new _acle patterns for
+ 	predicate operations.
+ 
+ 2025-08-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-28  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121208
+ 	* config/i386/i386.cc (ix86_tls_get_addr): Issue an error for
+ 	-mtls-dialect=gnu with no_caller_saved_registers attribute and
+ 	suggest -mtls-dialect=gnu2.
+ 
+ 2025-08-13  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-08-13  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/120476
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_compute_pressure_classes): New function.
+ 	(TARGET_COMPUTE_PRESSURE_CLASSES): Define.
+ 
+ 2025-08-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-08-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* config/loongarch/loongarch-def.h (ABI_BASE_LP64D): New macro.
+ 	(ABI_BASE_LP64F): New macro.
+ 	(ABI_BASE_LP64S): New macro.
+ 	(N_ABI_BASE_TYPES): New macro.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121413
+ 	* gimple-lower-bitint.cc (abi_limb_prec): New variable
+ 	(bitint_precision_kind): Initialize it.
+ 	(gimple_lower_bitint): Clear it at the start.  For
+ 	min_prec > limb_prec descreased precision vars for
+ 	INTEGER_CST PHI arguments ensure min_prec is either
+ 	prec or multiple of abi_limb_prec.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121127
+ 	* gimple-lower-bitint.cc (bitint_large_huge::handle_operand_addr): For
+ 	uninitialized SSA_NAME, set *prec_stored to 0 rather than *prec.
+ 	Handle that case in narrowing casts.  If prec_stored is non-NULL,
+ 	set *prec_stored to prec_stored_val.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/121322
+ 	* gimple-ssa-store-merging.cc (find_bswap_or_nop): Return NULL if
+ 	count is 0.
+ 
+ 2025-07-31  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-31  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	PR target/121028
+ 	* config/aarch64/aarch64-sme.md (aarch64_smstart_sm): Use the .inst
+ 	directive if !TARGET_SME.
+ 	(aarch64_smstop_sm): Likewise.
+ 
+ 2025-07-31  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120427
+ 	* config/i386/i386.md (peephole2): Transform "movq $-1,reg" to
+ 	"pushq $-1; popq reg" for -Oz if reg is a legacy integer register.
+ 
+ 2025-07-31  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-07-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/121274
+ 	* config/i386/sse.md (*vec_concatv2di_0): Add a splitter
+ 	before it.
+ 
+ 2025-07-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120427
+ 	* config/i386/i386.md (*mov<mode>_and): Changed to
+ 	define_insn_and_split.  Split it to "mov $0,mem" if not -Oz.
+ 	(*mov<mode>_or): Changed to define_insn_and_split.  Split it
+ 	to "mov $-1,mem" if not -Oz.
+ 	(peephole2): Don't transform "mov $-1,reg" to "push $-1; pop reg"
+ 	for -Oz since it will be transformed to "or $-1,reg".
+ 
+ 2025-07-28  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2025-07-17  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/121064
+ 	* config/loongarch/lsx.md (lsx_vshuf_<lsxfmt_f>): Add '@' to
+ 	generate a mode-aware helper.  Use <VIMODE> as the mode of the
+ 	operand 1 (selector).
+ 	* config/loongarch/lasx.md (lasx_xvshuf_<lasxfmt_f>): Likewise.
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_try_expand_lsx_vshuf_const): Create a new pseudo for
+ 	the selector.  Use the mode-aware helper to simplify the code.
+ 	(loongarch_expand_vec_perm_const): Likewise.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121027
+ 	* config/aarch64/aarch64.cc (aarch64_evpc_sve_tbl): Punt on 2-input
+ 	operations that can be handled by vec_perm.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121027
+ 	* config/aarch64/iterators.md (SVE_I): Move further up file.
+ 	(SVE_F): New mode iterator.
+ 	(SVE_ALL): Redefine in terms of SVE_I and SVE_F.
+ 	* config/aarch64/aarch64-sve.md (*<LOGICALF:optab><mode>3): Extend
+ 	to all SVE_F.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/118891
+ 	* config/aarch64/aarch64.cc (aarch64_expand_vector_init): Fix the
+ 	ZIP1 operand order for big-endian targets.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (@aarch64_sve_set_neonq_<mode>):
+ 	Use %Z instead of lowpart_subreg.  Tweak formatting.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/118891
+ 	* tree-vect-stmts.cc (supportable_widening_operation): Swap the
+ 	hi and lo internal functions on big-endian targets.
+ 
+ 2025-07-22  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-08-15  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (floatti<mode>2, floatunsti<mode>2,
+ 	fix_trunc<mode>ti2): Add guard TARGET_FLOAT128_HW.
+ 	* config/rs6000/vsx.md (xsxexpqp_<IEEE128:mode>_<V2DI_DI:mode>,
+ 	xsxsigqp_<IEEE128:mode>_<VEC_TI:mode>, xsiexpqpf_<mode>,
+ 	xsiexpqp_<IEEE128:mode>_<V2DI_DI:mode>, xscmpexpqp_<code>_<mode>,
+ 	*xscmpexpqp, xststdcnegqp_<mode>): Replace guard TARGET_P9_VECTOR
+ 	with TARGET_FLOAT128_HW.
+ 
+ 2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121131
+ 	* gimple-fold.cc (fold_nonarray_ctor_reference): Use
+ 	TREE_INT_CST_LOW (TYPE_SIZE ()) instead of
+ 	GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE ()) for BLKmode BITINT_TYPEs.
+ 	Don't compute encoding_size at all for little endian targets.
+ 
+ 2025-07-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ 	gen_tls_local_dynamic_64.
+ 	* config/i386/i386.md (*tls_global_dynamic_64_largepic): Add
+ 	RDI clobber and use it to generate LEA.
+ 	(*tls_local_dynamic_64_<mode>): Likewise.
+ 	(*tls_local_dynamic_base_64_largepic): Likewise.
+ 	(@tls_local_dynamic_64_<mode>): Add a clobber.
+ 
+ 2025-07-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-02  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ 	gen_tls_global_dynamic_64.
+ 	* config/i386/i386.md (*tls_global_dynamic_64_<mode>): Add RDI
+ 	clobber and use it to generate LEA.
+ 	(@tls_global_dynamic_64_<mode>): Add a clobber.
+ 
+ 2025-07-14  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.h (PTA_PANTHERLAKE): Revmoe KL and WIDEKL.
+ 	(PTA_CLEARWATERFOREST): Ditto.
+ 	* doc/invoke.texi: Revise documentation.
+ 
+ 2025-07-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-mcus.def (avr32da28s, avr32da32s, avr32da48s)
+ 	(avr64da28s, avr64da32s, avr64da48s avr64da64s)
+ 	(avr128da28s, avr128da32s, avr128da48s, avr128da64s): Add devices.
+ 	* doc/avr-mmcu.texi: Rebuild.
+ 
+ 2025-07-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-06-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/120624
+ 	* config/aarch64/aarch64.md (SME_STATE_REGNUM): Expand on comments.
+ 	* config/aarch64/aarch64-sme.md (aarch64_restore_za): Also set
+ 	SME_STATE_REGNUM
+ 
+ 2025-06-27  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gimple-fold.cc (fold_const_aggregate_ref_1) <COMPONENT_REF>:
+ 	Bail out immediately if the reference has reverse storage order.
+ 	* tree-ssa-sccvn.cc (fully_constant_vn_reference_p): Likewise.
+ 
+ 2025-06-25  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.h (PTA_ALDERLAKE): Use PTA_GOLDMONT_PLUS
+ 	as base to remove PTA_CLDEMOTE.
+ 	(PTA_SIERRAFOREST): Add PTA_CLDEMOTE since PTA_ALDERLAKE
+ 	does not include that anymore.
+ 	* doc/invoke.texi: Update texi file.
+ 
+ 2025-06-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116674
+ 	* tree-vect-stmts.cc (vectorizable_simd_clone_call): Support
+ 	re-analysis.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* dfp.cc (decimal_real_to_integer): Use result multiplication not just
+ 	when precision > 128 and dn.exponent > 19, but when precision > 64
+ 	and dn.exponent > 0.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* real.cc (decimal_from_integer): Add digits argument, if larger than
+ 	256, use XALLOCAVEC allocated buffer.
+ 	(real_from_integer): Pass val_in's precision divided by 3 to
+ 	decimal_from_integer.
+ 	* dfp.cc (decimal_real_to_integer): For precision > 128 if finite
+ 	and exponent is large, decrease exponent and multiply resulting
+ 	wide_int by powers of 10^19.
+ 
+ 2025-06-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-25  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR middle-end/117811
+ 	* optabs.cc (expand_binop_directly): Remove LAST as an argument,
+ 	instead record the last insn on entry.  Only delete insns if
+ 	we need to restart and restart by calling ourself, not expand_binop.
+ 	(expand_binop): Update callers to expand_binop_directly.  If it
+ 	fails to expand the operation, delete back to LAST.
+ 
+ 2025-06-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/120638
+ 	* tree-ssa-math-opts.cc (pass_cse_reciprocals::execute): Call
+ 	reset_flow_sensitive_info on arg1.
+ 
+ 2025-06-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120547
+ 	* real.cc (real_from_integer): Remove maxbitlen variable, use
+ 	len instead of that.  When shifting right, or in 1 if any of the
+ 	shifted away bits are non-zero.  Formatting fix.
+ 
+ 2025-06-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-chrec.cc (convert_affine_scev): Use signed_type_for instead of
+ 	build_nonstandard_integer_type.
+ 
+ 2025-06-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* tree-vect-data-refs.cc (vect_can_force_dr_alignment_p): Return
+ 	false if the variable has no symtab node.
+ 
+ 2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/119834
+ 	* config/s390/s390.md (define_split after *cpymem_short): Use
+ 	(clobber (match_scratch N)) instead of (clobber (scratch)).  Use
+ 	(match_dup 4) and operands[4] instead of (match_dup 3) and operands[3]
+ 	in the last of those.
+ 	(define_split after *clrmem_short): Use (clobber (match_scratch N))
+ 	instead of (clobber (scratch)).
+ 	(define_split after *cmpmem_short): Likewise.
+ 
+ 2025-05-26  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-05-14  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/vector.md: Fix tf_to_fprx2 by using vlr instead of
+ 	ldr.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/118819
+ 	* alias.cc (memrefs_conflict_p): Perform arithmetics on c, xsize and
+ 	ysize in poly_offset_int and return -1 if it is not representable in
+ 	poly_int64.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117239
+ 	* cselib.cc (cselib_init): Remove spurious closing paren in
+ 	the #ifdef STACK_ADDRESS_OFFSET specific code.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117239
+ 	* cselib.cc: Include predict.h.
+ 	(callmem): Change type from rtx to rtx[2].
+ 	(cselib_preserve_only_values): Use callmem[0] rather than callmem.
+ 	(cselib_invalidate_mem): Optimize and don't try to invalidate
+ 	for the mem_rtx == callmem[1] case MEMs which clearly can't be
+ 	below the stack pointer.
+ 	(cselib_process_insn): Use callmem[0] rather than callmem.
+ 	For const/pure calls also call cselib_invalidate_mem (callmem[1])
+ 	in !ACCUMULATE_OUTGOING_ARGS or cfun->calls_alloca functions.
+ 	(cselib_init): Initialize callmem[0] rather than callmem and also
+ 	initialize callmem[1].
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/117358
+ 	* gimple-fold.cc (gimple_fold_builtin_memory_op): Punt if stmt has no
+ 	vdef in ssa form.
+ 	(gimple_fold_builtin_bcmp): Punt if stmt has no vuse in ssa form.
+ 	(gimple_fold_builtin_bcopy): Punt if stmt has no vdef in ssa form.
+ 	(gimple_fold_builtin_bzero): Likewise.
+ 	(gimple_fold_builtin_memset): Likewise.  Use return false instead of
+ 	return NULL_TREE.
+ 	(gimple_fold_builtin_strcpy): Punt if stmt has no vdef in ssa form.
+ 	(gimple_fold_builtin_strncpy): Likewise.
+ 	(gimple_fold_builtin_strchr): Punt if stmt has no vuse in ssa form.
+ 	(gimple_fold_builtin_strstr): Likewise.
+ 	(gimple_fold_builtin_strcat): Punt if stmt has no vdef in ssa form.
+ 	(gimple_fold_builtin_strcat_chk): Likewise.
+ 	(gimple_fold_builtin_strncat): Likewise.
+ 	(gimple_fold_builtin_strncat_chk): Likewise.
+ 	(gimple_fold_builtin_string_compare): Likewise.
+ 	(gimple_fold_builtin_fputs): Likewise.
+ 	(gimple_fold_builtin_memory_chk): Likewise.
+ 	(gimple_fold_builtin_stxcpy_chk): Likewise.
+ 	(gimple_fold_builtin_stxncpy_chk): Likewise.
+ 	(gimple_fold_builtin_stpcpy): Likewise.
+ 	(gimple_fold_builtin_snprintf_chk): Likewise.
+ 	(gimple_fold_builtin_sprintf_chk): Likewise.
+ 	(gimple_fold_builtin_sprintf): Likewise.
+ 	(gimple_fold_builtin_snprintf): Likewise.
+ 	(gimple_fold_builtin_fprintf): Likewise.
+ 	(gimple_fold_builtin_printf): Likewise.
+ 	(gimple_fold_builtin_realloc): Likewise.
+ 
+ 2025-05-25  Michael J. Eager  <eager@eagercon.com>
+ 
+ 	PR target/86772
+ 	Tracking CVE-2017-5753
+ 	* config/microblaze/microblaze.cc (TARGET_HAVE_SPECULATION_SAFE_VALUE):
+ 	Define to speculation_save_value_not_needed
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/DATESTAMP gcc-14.3.0-RC-20260619/gcc/DATESTAMP
*** gcc-14.3.0/gcc/DATESTAMP	Fri May 23 11:02:03 2025
--- gcc-14.3.0-RC-20260619/gcc/DATESTAMP	Fri Jun 19 06:51:01 2026
***************
*** 1 ****
! 20250523
--- 1 ----
! 20260619
diff -Nrcpad gcc-14.3.0/gcc/ada/ChangeLog gcc-14.3.0-RC-20260619/gcc/ada/ChangeLog
*** gcc-14.3.0/gcc/ada/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/ChangeLog	Fri Jun 19 06:51:01 2026
***************
*** 1,3 ****
--- 1,131 ----
+ 2026-06-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/125695
+ 	* libgnat/s-genbig.adb ("**"): Do not drop the sign on the floor.
+ 	(Big_Exp): Take into account the parity of the exponent for -2.
+ 
+ 2026-04-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/125044
+ 	* sem_disp.adb (Check_Controlling_Formals): Apply the same massaging
+ 	to the result subtype as to the parameter subtypes.
+ 
+ 2026-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/125044
+ 	* exp_ch6.ads (Needs_BIP_Task_Actuals): Adjust description.
+ 	* exp_ch6.adb (Expand_N_Extended_Return_Statement): Move activation
+ 	chain for every build-in-place function with task formal parameters
+ 	when the type of the return object might have tasks.
+ 
+ 2026-04-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/124836
+ 	* adaint.c [__MINGW32__]: Do not include mingw32.h twice, and also
+ 	include sys/param.h.
+ 
+ 2026-03-23  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/124607
+ 	* sem_elab.adb (Has_Body.Find_Body): Fix thinko.
+ 
+ 2026-03-14  Matthias Klose  <doko@gcc.gnu.org>
+ 
+ 	PR ada/107475
+ 	* Makefile.rtl (s390% linux%): Define MISCLIB.
+ 	(arm% linux-gnueabi%): Likewise.
+ 	(%x32 linux%): Likewise.
+ 
+ 2026-02-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/124285
+ 	* gcc-interface/decl.cc (components_to_record): Force a packed
+ 	layout for the innermost variant of an unchecked union type with
+ 	fixed part and full representation clause.
+ 
+ 2026-02-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/124226
+ 	* sem_res.adb (Resolve_Implicit_Dereference): Move declaration to...
+ 	* sem_res.ads (Resolve_Implicit_Dereference): ...here.
+ 	* sem_attr.adb (Resolve_Attribute) <Attribute_Access>: Also call
+ 	Resolve_Implicit_Dereference when resolving a protected operation.
+ 
+ 2026-02-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-stposu.adb (Finalize_Pool): Pass a local copy of the
+ 	handle in the call to Finalize_And_Deallocate.
+ 
+ 2026-01-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123867
+ 	* sem_ch10.adb (Analyze_Compilation_Unit): Output info message
+ 	when -gnatdi is specified.
+ 	(Install_Parents): Likewise.  Set the Is_Visible_Lib_Unit flag
+ 	on the unit.
+ 	(Install_Private_With_Clauses): Do not output info message here.
+ 	(Remove_Parents): Output info message when -gnatdi is specified
+ 	and clear the Is_Visible_Lib_Unit flag on the unit.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	PR ada/123289
+ 	* sem_ch13.adb (Resolve_Aspect_Aggregate.Resolve_Operation): Give
+ 	an error if the operation's name denotes more than one subprogram.
+ 
+ 2025-12-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123060
+ 	* gcc-interface/utils.cc (update_pointer_to): Streamline.
+ 
+ 2025-12-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123060
+ 	* gcc-interface/utils.cc (update_pointer_to): Preserve the alias
+ 	sets present on the old pointer and old reference, if any.
+ 
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123138
+ 	* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Reduce>:
+ 	Override a universal numeric type only if the prefix is not an
+ 	aggregate.
+ 
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123060
+ 	* gcc-interface/utils.cc (update_pointer_to): Synthesize a new
+ 	TYPE_CANONICAL for the old pointer type in the case where there
+ 	is no new pointer type.  Likewise for references.
+ 
+ 2025-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/107536
+ 	* exp_ch2.adb (Expand_Renaming): Mark the entity as referenced.
+ 
+ 2025-10-05  Steve Baird  <baird@adacore.com>
+ 
+ 	PR ada/113536
+ 	* exp_attr.adb:	Move computation of Accum_Typ entirely into the
+ 	function Build_Stat.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/Makefile.in (gnatlib-sjlj): Delete.
+ 	(gnatlib-zcx): Do not modify Frontend_Exceptions constant.
+ 	* libgnat/system-linux-loongarch.ads (Frontend_Exceptions): Delete.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_component_type): Validate the
+ 	Component_Size like the size of a type only if the component type
+ 	is actually packed.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch4.adb (Handle_Changed_Representation): Alphabetize local
+ 	variables.  Set the No_Finalize_Actions flag on the assignment.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/ada/Makefile.rtl gcc-14.3.0-RC-20260619/gcc/ada/Makefile.rtl
*** gcc-14.3.0/gcc/ada/Makefile.rtl	Fri May 23 11:02:03 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/Makefile.rtl	Fri Jun 19 06:51:02 2026
*************** ifeq ($(strip $(filter-out s390% linux%,
*** 1842,1847 ****
--- 1842,1848 ----
    EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
    EH_MECHANISM=-gcc
    THREADSLIB = -lpthread
+   MISCLIB = -ldl
    GNATLIB_SHARED = gnatlib-shared-dual
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
*************** ifeq ($(strip $(filter-out arm% linux-gn
*** 2293,2298 ****
--- 2294,2300 ----
    EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
    EH_MECHANISM=-arm
    THREADSLIB = -lpthread
+   MISCLIB = -ldl
    GNATLIB_SHARED = gnatlib-shared-dual
    GMEM_LIB = gmemlib
    LIBRARY_VERSION := $(LIB_VERSION)
*************** ifeq ($(strip $(filter-out %x32 linux%,$
*** 2653,2658 ****
--- 2655,2661 ----
    EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
    EH_MECHANISM=-gcc
    THREADSLIB=-lpthread -lrt
+   MISCLIB = -ldl
    GNATLIB_SHARED=gnatlib-shared-dual
    GMEM_LIB = gmemlib
    LIBRARY_VERSION := $(LIB_VERSION)
diff -Nrcpad gcc-14.3.0/gcc/ada/adaint.c gcc-14.3.0-RC-20260619/gcc/ada/adaint.c
*** gcc-14.3.0/gcc/ada/adaint.c	Fri May 23 11:02:03 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/adaint.c	Fri Jun 19 06:51:02 2026
*************** const char *__gnat_library_template = GN
*** 337,347 ****
  
  #else
  
- #if defined (__MINGW32__)
- #include "mingw32.h"
- #else
  #include <sys/param.h>
- #endif
  
  #ifdef MAXPATHLEN
  #define GNAT_MAX_PATH_LEN MAXPATHLEN
--- 337,343 ----
diff -Nrcpad gcc-14.3.0/gcc/ada/exp_attr.adb gcc-14.3.0-RC-20260619/gcc/ada/exp_attr.adb
*** gcc-14.3.0/gcc/ada/exp_attr.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/exp_attr.adb	Fri Jun 19 06:51:02 2026
***************
*** 24,30 ****
  ------------------------------------------------------------------------------
  
  with Accessibility;  use Accessibility;
- with Aspects;        use Aspects;
  with Atree;          use Atree;
  with Checks;         use Checks;
  with Debug;          use Debug;
--- 24,29 ----
*************** package body Exp_Attr is
*** 6058,6063 ****
--- 6057,6063 ----
  
              begin
                 if Nkind (E1) = N_Attribute_Reference then
+                   Accum_Typ := Base_Type (Entity (Prefix (E1)));
                    Stat := Make_Assignment_Statement (Loc,
                              Name => New_Occurrence_Of (Bnn, Loc),
                              Expression => Make_Attribute_Reference (Loc,
*************** package body Exp_Attr is
*** 6068,6079 ****
--- 6068,6082 ----
                                  Comp)));
  
                 elsif Ekind (Entity (E1)) = E_Procedure then
+                   Accum_Typ := Etype (First_Formal (Entity (E1)));
                    Stat := Make_Procedure_Call_Statement (Loc,
                              Name => New_Occurrence_Of (Entity (E1), Loc),
                                 Parameter_Associations => New_List (
                                   New_Occurrence_Of (Bnn, Loc),
                                   Comp));
+ 
                 else
+                   Accum_Typ := Etype (Entity (E1));
                    Stat := Make_Assignment_Statement (Loc,
                              Name => New_Occurrence_Of (Bnn, Loc),
                              Expression => Make_Function_Call (Loc,
*************** package body Exp_Attr is
*** 6083,6088 ****
--- 6086,6112 ----
                                  Comp)));
                 end if;
  
+                --  Try to cope if E1 is wrong because it is an overloaded
+                --  subprogram that happens to be the first candidate
+                --  on a homonym chain, but that resolution candidate turns
+                --  out to be the wrong one.
+                --  This workaround usually gets the right type, but it can
+                --  yield the wrong subtype of that type.
+ 
+                if Base_Type (Accum_Typ) /= Base_Type (Etype (N)) then
+                   Accum_Typ := Etype (N);
+                end if;
+ 
+                --  If Accum_Typ is a universal numeric type and the prefix
+                --  is not an aggregate, use its component type in order to
+                --  avoid resolution problems later on.
+ 
+                if Is_Universal_Numeric_Type (Accum_Typ) then
+                   if Nkind (Prefix (N)) /= N_Aggregate then
+                      Accum_Typ := Component_Type (Etype (Prefix (N)));
+                   end if;
+                end if;
+ 
                 return Stat;
              end Build_Stat;
  
*************** package body Exp_Attr is
*** 6133,6142 ****
                        End_Label => Empty,
                        Statements =>
                          New_List (Build_Stat (Relocate_Node (Expr))));
- 
-                   --  Look at the context to find the type.
- 
-                   Accum_Typ := Etype (N);
                 end;
  
              else
--- 6157,6162 ----
*************** package body Exp_Attr is
*** 6166,6205 ****
                        Statements => New_List (
                          Build_Stat (New_Occurrence_Of (Elem, Loc))));
  
-                   --  Look at the prefix to find the type. This is
-                   --  modeled on Analyze_Iterator_Specification in Sem_Ch5.
- 
-                   declare
-                      Ptyp : constant Entity_Id :=
-                               Base_Type (Etype (Prefix (N)));
- 
-                   begin
-                      if Is_Array_Type (Ptyp) then
-                         Accum_Typ := Component_Type (Ptyp);
- 
-                      elsif Has_Aspect (Ptyp, Aspect_Iterable) then
-                         declare
-                            Element : constant Entity_Id :=
-                                        Get_Iterable_Type_Primitive
-                                          (Ptyp, Name_Element);
-                         begin
-                            if Present (Element) then
-                               Accum_Typ := Etype (Element);
-                            end if;
-                         end;
- 
-                      else
-                         declare
-                            Element : constant Node_Id :=
-                                        Find_Value_Of_Aspect
-                                          (Ptyp, Aspect_Iterator_Element);
-                         begin
-                            if Present (Element) then
-                               Accum_Typ := Entity (Element);
-                            end if;
-                         end;
-                      end if;
-                   end;
                 end;
              end if;
  
--- 6186,6191 ----
diff -Nrcpad gcc-14.3.0/gcc/ada/exp_ch2.adb gcc-14.3.0-RC-20260619/gcc/ada/exp_ch2.adb
*** gcc-14.3.0/gcc/ada/exp_ch2.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/exp_ch2.adb	Fri Jun 19 06:51:02 2026
*************** package body Exp_Ch2 is
*** 704,712 ****
        T : constant Entity_Id := Etype (N);
  
     begin
        Rewrite (N, New_Copy_Tree (Renamed_Object (E)));
  
!       --  We mark the copy as unanalyzed, so that it is sure to be reanalyzed
        --  at the top level. This is needed in the packed case since we
        --  specifically avoided expanding packed array references when the
        --  renaming declaration was analyzed.
--- 704,718 ----
        T : constant Entity_Id := Etype (N);
  
     begin
+       --  Mark the entity as referenced since this reference is going away
+ 
+       Set_Referenced (E);
+ 
+       --  Now rewrite the reference as a copy of the renamed object
+ 
        Rewrite (N, New_Copy_Tree (Renamed_Object (E)));
  
!       --  Mark the copy as unanalyzed to make sure that it is reanalyzed
        --  at the top level. This is needed in the packed case since we
        --  specifically avoided expanding packed array references when the
        --  renaming declaration was analyzed.
diff -Nrcpad gcc-14.3.0/gcc/ada/exp_ch4.adb gcc-14.3.0-RC-20260619/gcc/ada/exp_ch4.adb
*** gcc-14.3.0/gcc/ada/exp_ch4.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/exp_ch4.adb	Fri Jun 19 06:51:02 2026
*************** package body Exp_Ch4 is
*** 11438,11448 ****
        -----------------------------------
  
        procedure Handle_Changed_Representation is
!          Temp : Entity_Id;
           Decl : Node_Id;
-          Odef : Node_Id;
           N_Ix : Node_Id;
!          Cons : List_Id;
  
        begin
           --  Nothing else to do if no change of representation
--- 11438,11449 ----
        -----------------------------------
  
        procedure Handle_Changed_Representation is
!          Cons : List_Id;
           Decl : Node_Id;
           N_Ix : Node_Id;
!          Odef : Node_Id;
!          Stmt : Node_Id;
!          Temp : Entity_Id;
  
        begin
           --  Nothing else to do if no change of representation
*************** package body Exp_Ch4 is
*** 11585,11603 ****
                  Defining_Identifier => Temp,
                  Object_Definition   => Odef);
  
!             Set_No_Initialization (Decl, True);
  
              --  Insert required actions. It is essential to suppress checks
              --  since we have suppressed default initialization, which means
              --  that the variable we create may have no discriminants.
  
!             Insert_Actions (N,
!               New_List (
!                 Decl,
!                 Make_Assignment_Statement (Loc,
!                   Name       => New_Occurrence_Of (Temp, Loc),
!                   Expression => Relocate_Node (N))),
!                 Suppress => All_Checks);
  
              Rewrite (N, New_Occurrence_Of (Temp, Loc));
              return;
--- 11586,11609 ----
                  Defining_Identifier => Temp,
                  Object_Definition   => Odef);
  
!             --  The temporary need not be initialized
! 
!             Set_No_Initialization (Decl);
! 
!             Stmt :=
!               Make_Assignment_Statement (Loc,
!                 Name       => New_Occurrence_Of (Temp, Loc),
!                 Expression => Relocate_Node (N));
! 
!             --  And, therefore, cannot be finalized
! 
!             Set_No_Finalize_Actions (Stmt);
  
              --  Insert required actions. It is essential to suppress checks
              --  since we have suppressed default initialization, which means
              --  that the variable we create may have no discriminants.
  
!             Insert_Actions (N, New_List (Decl, Stmt), Suppress => All_Checks);
  
              Rewrite (N, New_Occurrence_Of (Temp, Loc));
              return;
diff -Nrcpad gcc-14.3.0/gcc/ada/exp_ch6.adb gcc-14.3.0-RC-20260619/gcc/ada/exp_ch6.adb
*** gcc-14.3.0/gcc/ada/exp_ch6.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/exp_ch6.adb	Fri Jun 19 06:51:02 2026
*************** package body Exp_Ch6 is
*** 5541,5548 ****
        Loc          : constant Source_Ptr := Sloc (N);
        Func_Id      : constant Entity_Id :=
                         Return_Applies_To (Return_Statement_Entity (N));
-       Is_BIP_Func  : constant Boolean   :=
-                        Is_Build_In_Place_Function (Func_Id);
        Ret_Obj_Id   : constant Entity_Id :=
                         First_Entity (Return_Statement_Entity (N));
        Ret_Obj_Decl : constant Node_Id   := Parent (Ret_Obj_Id);
--- 5541,5546 ----
*************** package body Exp_Ch6 is
*** 5671,5682 ****
           --  master. But Move_Activation_Chain updates their master to be that
           --  of the caller, so they will not be terminated unless the return
           --  statement completes unsuccessfully due to exception, abort, goto,
!          --  or exit. As a formality, we test whether the function requires the
!          --  result to be built in place, though that's necessarily true for
!          --  the case of result types with task parts.
! 
!          if Is_BIP_Func and then Has_Task (Ret_Typ) then
  
              --  The return expression is an aggregate for a complex type which
              --  contains tasks. This particular case is left unexpanded since
              --  the regular expansion would insert all temporaries and
--- 5669,5681 ----
           --  master. But Move_Activation_Chain updates their master to be that
           --  of the caller, so they will not be terminated unless the return
           --  statement completes unsuccessfully due to exception, abort, goto,
!          --  or exit. Note that we test that the function is both BIP and has
!          --  implicit task formal parameters, because not all functions whose
!          --  result type contains tasks have them (see Needs_BIP_Task_Actuals).
  
+          if Is_Build_In_Place_Function (Func_Id)
+            and then Needs_BIP_Task_Actuals (Func_Id)
+          then
              --  The return expression is an aggregate for a complex type which
              --  contains tasks. This particular case is left unexpanded since
              --  the regular expansion would insert all temporaries and
*************** package body Exp_Ch6 is
*** 5689,5695 ****
              --  Do not move the activation chain if the return object does not
              --  contain tasks.
  
!             if Has_Task (Etype (Ret_Obj_Id)) then
                 Append_To (Stmts, Move_Activation_Chain (Func_Id));
              end if;
           end if;
--- 5688,5694 ----
              --  Do not move the activation chain if the return object does not
              --  contain tasks.
  
!             if Might_Have_Tasks (Etype (Ret_Obj_Id)) then
                 Append_To (Stmts, Move_Activation_Chain (Func_Id));
              end if;
           end if;
diff -Nrcpad gcc-14.3.0/gcc/ada/exp_ch6.ads gcc-14.3.0-RC-20260619/gcc/ada/exp_ch6.ads
*** gcc-14.3.0/gcc/ada/exp_ch6.ads	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/exp_ch6.ads	Fri Jun 19 06:51:02 2026
*************** package Exp_Ch6 is
*** 292,298 ****
     --  dispatching calls, and descendant types may require finalization.
  
     function Needs_BIP_Task_Actuals (Func_Id : Entity_Id) return Boolean;
!    --  Return True if the function returns an object of a type that has tasks.
  
     function Unqual_BIP_Iface_Function_Call (Expr : Node_Id) return Node_Id;
     --  Return the inner BIP function call removing any qualification from Expr
--- 292,299 ----
     --  dispatching calls, and descendant types may require finalization.
  
     function Needs_BIP_Task_Actuals (Func_Id : Entity_Id) return Boolean;
!    --  Ada 2005 (AI-318-02): Return True if the function needs implicit
!    --  BIP_Task_Master and BIP_Activation_Chain parameters.
  
     function Unqual_BIP_Iface_Function_Call (Expr : Node_Id) return Node_Id;
     --  Return the inner BIP function call removing any qualification from Expr
diff -Nrcpad gcc-14.3.0/gcc/ada/gcc-interface/Makefile.in gcc-14.3.0-RC-20260619/gcc/ada/gcc-interface/Makefile.in
*** gcc-14.3.0/gcc/ada/gcc-interface/Makefile.in	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/gcc-interface/Makefile.in	Fri Jun 19 06:51:02 2026
*************** gnatlib-shared:
*** 822,856 ****
  	     PICFLAG_FOR_TARGET="$(PICFLAG_FOR_TARGET)" \
  	     $(GNATLIB_SHARED)
  
- # When building a SJLJ runtime for VxWorks, we need to ensure that the extra
- # linker options needed for ZCX are not passed to prevent the inclusion of
- # useless objects and potential troubles from the presence of extra symbols
- # and references in some configurations.  The inhibition is performed by
- # commenting the pragma instead of deleting the line, as the latter might
- # result in getting multiple blank lines, hence possible style check errors.
- gnatlib-sjlj:
- 	$(MAKE) $(FLAGS_TO_PASS) \
- 	     EH_MECHANISM="" \
- 	     MULTISUBDIR="$(MULTISUBDIR)" \
- 	     THREAD_KIND="$(THREAD_KIND)" \
- 	     LN_S="$(LN_S)" \
- 	     ../stamp-gnatlib1-$(RTSDIR)
- 	sed \
- 	  -e 's/Frontend_Exceptions.*/Frontend_Exceptions       : constant Boolean := True;/' \
- 	  -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := False;/' \
- 	  $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
- 	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
- 	$(MAKE) $(FLAGS_TO_PASS) \
- 	     EH_MECHANISM="" \
- 	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- 	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
- 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- 	     FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
- 	     MULTISUBDIR="$(MULTISUBDIR)" \
- 	     THREAD_KIND="$(THREAD_KIND)" \
- 	     LN_S="$(LN_S)" \
- 	     gnatlib
- 
  gnatlib-zcx:
  	$(MAKE) $(FLAGS_TO_PASS) \
  	     EH_MECHANISM="-gcc" \
--- 822,827 ----
*************** gnatlib-zcx:
*** 859,865 ****
  	     LN_S="$(LN_S)" \
  	     ../stamp-gnatlib1-$(RTSDIR)
  	sed \
- 	  -e 's/Frontend_Exceptions.*/Frontend_Exceptions       : constant Boolean := False;/' \
  	  -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := True;/' \
  	  $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
  	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
--- 830,835 ----
diff -Nrcpad gcc-14.3.0/gcc/ada/gcc-interface/decl.cc gcc-14.3.0-RC-20260619/gcc/ada/gcc-interface/decl.cc
*** gcc-14.3.0/gcc/ada/gcc-interface/decl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/gcc-interface/decl.cc	Fri Jun 19 06:51:02 2026
*************** gnat_to_gnu_component_type (Entity_Id gn
*** 5328,5334 ****
    const bool is_bit_packed = Is_Bit_Packed_Array (gnat_array);
    tree gnu_type = gnat_to_gnu_type (gnat_type);
    tree gnu_comp_size;
!   bool has_packed_components;
    unsigned int max_align;
  
    /* If an alignment is specified, use it as a cap on the component type
--- 5328,5334 ----
    const bool is_bit_packed = Is_Bit_Packed_Array (gnat_array);
    tree gnu_type = gnat_to_gnu_type (gnat_type);
    tree gnu_comp_size;
!   bool has_packed_component;
    unsigned int max_align;
  
    /* If an alignment is specified, use it as a cap on the component type
*************** gnat_to_gnu_component_type (Entity_Id gn
*** 5349,5364 ****
        && !TYPE_FAT_POINTER_P (gnu_type)
        && tree_fits_uhwi_p (TYPE_SIZE (gnu_type)))
      {
!       gnu_type = make_packable_type (gnu_type, false, max_align);
!       has_packed_components = true;
      }
    else
!     has_packed_components = is_bit_packed;
  
    /* Get and validate any specified Component_Size.  */
    gnu_comp_size
      = validate_size (Component_Size (gnat_array), gnu_type, gnat_array,
! 		     has_packed_components ? TYPE_DECL : VAR_DECL, true,
  		     Has_Component_Size_Clause (gnat_array), NULL, NULL);
  
    /* If the component type is a RECORD_TYPE that has a self-referential size,
--- 5349,5370 ----
        && !TYPE_FAT_POINTER_P (gnu_type)
        && tree_fits_uhwi_p (TYPE_SIZE (gnu_type)))
      {
!       tree gnu_packable_type = make_packable_type (gnu_type, false, max_align);
!       if (gnu_packable_type != gnu_type)
! 	{
! 	  gnu_type = gnu_packable_type;
! 	  has_packed_component = true;
! 	}
!       else
! 	has_packed_component = false;
      }
    else
!     has_packed_component = is_bit_packed;
  
    /* Get and validate any specified Component_Size.  */
    gnu_comp_size
      = validate_size (Component_Size (gnat_array), gnu_type, gnat_array,
! 		     has_packed_component ? TYPE_DECL : VAR_DECL, true,
  		     Has_Component_Size_Clause (gnat_array), NULL, NULL);
  
    /* If the component type is a RECORD_TYPE that has a self-referential size,
*************** typedef struct vinfo
*** 8054,8060 ****
  
     DEBUG_INFO is true if we need to write debug information about the type.
  
!    IN_VARIANT is true if the componennt list is that of a variant.
  
     FIRST_FREE_POS, if nonzero, is the first (lowest) free field position in
     the outer record type down to this variant level.  It is nonzero only if
--- 8060,8066 ----
  
     DEBUG_INFO is true if we need to write debug information about the type.
  
!    IN_VARIANT is true if the component list is that of a variant.
  
     FIRST_FREE_POS, if nonzero, is the first (lowest) free field position in
     the outer record type down to this variant level.  It is nonzero only if
*************** components_to_record (Node_Id gnat_compo
*** 8171,8177 ****
        tree gnu_union_type;
        tree this_first_free_pos, gnu_variant_list = NULL_TREE;
        bool union_field_needs_strict_alignment = false;
!       bool innermost_variant_level = true;
        auto_vec <vinfo_t, 16> variant_types;
        vinfo_t *gnu_variant;
        unsigned int variants_align = 0;
--- 8177,8183 ----
        tree gnu_union_type;
        tree this_first_free_pos, gnu_variant_list = NULL_TREE;
        bool union_field_needs_strict_alignment = false;
!       bool innermost_of_unchecked_union = false;
        auto_vec <vinfo_t, 16> variant_types;
        vinfo_t *gnu_variant;
        unsigned int variants_align = 0;
*************** components_to_record (Node_Id gnat_compo
*** 8220,8234 ****
        /* For an unchecked union with a fixed part, we need to compute whether
  	 we are at the innermost level of the variant part.  */
        if (unchecked_union && gnu_field_list)
! 	for (variant = First_Non_Pragma (Variants (gnat_variant_part));
! 	     Present (variant);
! 	     variant = Next_Non_Pragma (variant))
! 	  if (Present (Component_List (variant))
! 	      && Present (Variant_Part (Component_List (variant))))
! 	    {
! 	      innermost_variant_level = false;
! 	      break;
! 	    }
  
        /* We build the variants in two passes.  The bulk of the work is done in
  	 the first pass, that is to say translating the GNAT nodes, building
--- 8226,8244 ----
        /* For an unchecked union with a fixed part, we need to compute whether
  	 we are at the innermost level of the variant part.  */
        if (unchecked_union && gnu_field_list)
! 	{
! 	  innermost_of_unchecked_union = true;
! 
! 	  for (variant = First_Non_Pragma (Variants (gnat_variant_part));
! 	       Present (variant);
! 	       variant = Next_Non_Pragma (variant))
! 	    if (Present (Component_List (variant))
! 		&& Present (Variant_Part (Component_List (variant))))
! 	      {
! 		innermost_of_unchecked_union = false;
! 		break;
! 	      }
! 	}
  
        /* We build the variants in two passes.  The bulk of the work is done in
  	 the first pass, that is to say translating the GNAT nodes, building
*************** components_to_record (Node_Id gnat_compo
*** 8275,8291 ****
  	     the outer variant, so as to flatten the rep-ed layout as much as
  	     possible, the reason being that we cannot do any flattening when
  	     a subtype statically selects a variant later on, for example for
! 	     an aggregate.  */
  	  has_rep
  	    = components_to_record (Component_List (variant), gnat_record_type,
! 				    NULL_TREE, gnu_variant_type, packed,
  				    definition, !all_rep_and_size, all_rep,
  				    unchecked_union, true, needs_xv_encodings,
  				    true, this_first_free_pos,
  				    (all_rep || this_first_free_pos)
! 				    && !(unchecked_union
! 				         && gnu_field_list
! 					 && innermost_variant_level)
  				    ? NULL : &gnu_rep_list);
  
  	  /* Translate the qualifier and annotate the GNAT node.  */
--- 8285,8301 ----
  	     the outer variant, so as to flatten the rep-ed layout as much as
  	     possible, the reason being that we cannot do any flattening when
  	     a subtype statically selects a variant later on, for example for
! 	     an aggregate; in that case, we force a packed layout because the
! 	     moved fields may overlap with packed bit-fields.  */
  	  has_rep
  	    = components_to_record (Component_List (variant), gnat_record_type,
! 				    NULL_TREE, gnu_variant_type, packed ||
! 				    (all_rep && innermost_of_unchecked_union),
  				    definition, !all_rep_and_size, all_rep,
  				    unchecked_union, true, needs_xv_encodings,
  				    true, this_first_free_pos,
  				    (all_rep || this_first_free_pos)
! 				    && !innermost_of_unchecked_union
  				    ? NULL : &gnu_rep_list);
  
  	  /* Translate the qualifier and annotate the GNAT node.  */
diff -Nrcpad gcc-14.3.0/gcc/ada/gcc-interface/utils.cc gcc-14.3.0-RC-20260619/gcc/ada/gcc-interface/utils.cc
*** gcc-14.3.0/gcc/ada/gcc-interface/utils.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/gcc-interface/utils.cc	Fri Jun 19 06:51:02 2026
*************** update_pointer_to (tree old_type, tree n
*** 4453,4460 ****
  	    new_ptr = TYPE_NEXT_PTR_TO (new_ptr);
  	  TYPE_NEXT_PTR_TO (new_ptr) = ptr;
  	}
!       else
! 	TYPE_POINTER_TO (new_type) = ptr;
  
        /* Now adjust them.  */
        for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
--- 4453,4483 ----
  	    new_ptr = TYPE_NEXT_PTR_TO (new_ptr);
  	  TYPE_NEXT_PTR_TO (new_ptr) = ptr;
  	}
!       else if (ptr)
! 	{
! 	  TYPE_POINTER_TO (new_type) = ptr;
! 
! 	  /* If there is no pointer pointing to NEW_TYPE yet, re-compute the
! 	     TYPE_CANONICAL of the old pointer but pointing to NEW_TYPE, like
! 	     build_pointer_type would have done for such a pointer, because we
! 	     will propagate it in the adjustment loop below.  But make sure to
! 	     preserve an alias set already present on the old pointer.  */
! 	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
! 	    SET_TYPE_STRUCTURAL_EQUALITY (ptr);
! 	  else if (TYPE_CANONICAL (new_type) != new_type
! 		   || (TYPE_REF_CAN_ALIAS_ALL (ptr)
! 		       && !lookup_attribute ("may_alias",
! 					     TYPE_ATTRIBUTES (new_type))))
! 	    {
! 	      const alias_set_type set
! 		= TYPE_STRUCTURAL_EQUALITY_P (ptr)
! 		  ? TYPE_ALIAS_SET (ptr)
! 		  : TYPE_ALIAS_SET (TYPE_CANONICAL (ptr));
! 	      TYPE_CANONICAL (ptr)
! 		= build_pointer_type (TYPE_CANONICAL (new_type));
! 	      TYPE_ALIAS_SET (TYPE_CANONICAL (ptr)) = set;
! 	    }
! 	}
  
        /* Now adjust them.  */
        for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
*************** update_pointer_to (tree old_type, tree n
*** 4474,4481 ****
  	    new_ref = TYPE_NEXT_REF_TO (new_ref);
  	  TYPE_NEXT_REF_TO (new_ref) = ref;
  	}
!       else
! 	TYPE_REFERENCE_TO (new_type) = ref;
  
        /* Now adjust them.  */
        for (; ref; ref = TYPE_NEXT_REF_TO (ref))
--- 4497,4527 ----
  	    new_ref = TYPE_NEXT_REF_TO (new_ref);
  	  TYPE_NEXT_REF_TO (new_ref) = ref;
  	}
!       else if (ref)
! 	{
! 	  TYPE_REFERENCE_TO (new_type) = ref;
! 
! 	  /* If there is no reference pointing to NEW_TYPE yet, re-compute the
! 	     TYPE_CANONICAL of the old reference but pointing to NEW_TYPE, like
! 	     build_reference_type would have done for such a reference, because
! 	     we will propagate it in the adjustment loop below.  But make sure
! 	     to preserve an alias set already present on the old reference.  */
! 	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
! 	    SET_TYPE_STRUCTURAL_EQUALITY (ref);
! 	  else if (TYPE_CANONICAL (new_type) != new_type
! 		   || (TYPE_REF_CAN_ALIAS_ALL (ref)
! 		       && !lookup_attribute ("may_alias",
! 					     TYPE_ATTRIBUTES (new_type))))
! 	    {
! 	      const alias_set_type set
! 		= TYPE_STRUCTURAL_EQUALITY_P (ref)
! 		  ? TYPE_ALIAS_SET (ref)
! 		  : TYPE_ALIAS_SET (TYPE_CANONICAL (ref));
! 	      TYPE_CANONICAL (ref)
! 		= build_reference_type (TYPE_CANONICAL (new_type));
! 	      TYPE_ALIAS_SET (TYPE_CANONICAL (ref)) = set;
! 	    }
! 	}
  
        /* Now adjust them.  */
        for (; ref; ref = TYPE_NEXT_REF_TO (ref))
diff -Nrcpad gcc-14.3.0/gcc/ada/libgnat/s-genbig.adb gcc-14.3.0-RC-20260619/gcc/ada/libgnat/s-genbig.adb
*** gcc-14.3.0/gcc/ada/libgnat/s-genbig.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/libgnat/s-genbig.adb	Fri Jun 19 06:51:02 2026
*************** package body System.Generic_Bignums is
*** 262,268 ****
           --  X ** 1 is X
  
           when 1 =>
!             return Normalize (X.D);
  
           --  X ** 2 is X * X
  
--- 262,268 ----
           --  X ** 1 is X
  
           when 1 =>
!             return Normalize (X.D, X.Neg);
  
           --  X ** 2 is X * X
  
*************** package body System.Generic_Bignums is
*** 331,344 ****
        elsif Y.Len > 1 then
           raise Storage_Error with "exponentiation result is too large";
  
!       --  Special case (+/-)2 ** K, where K is 1 .. 31 using a shift
  
        elsif X.Len = 1 and then X.D (1) = 2 and then Y.D (1) < 32 then
           declare
              D : constant Digit_Vector (1 .. 1) :=
                    [Shift_Left (SD'(1), Natural (Y.D (1)))];
           begin
!             return Normalize (D, X.Neg);
           end;
  
        --  Remaining cases have right operand of one word
--- 331,344 ----
        elsif Y.Len > 1 then
           raise Storage_Error with "exponentiation result is too large";
  
!       --  Special case (+/-)2 ** K, where K is in 1 .. 31, using a left shift
  
        elsif X.Len = 1 and then X.D (1) = 2 and then Y.D (1) < 32 then
           declare
              D : constant Digit_Vector (1 .. 1) :=
                    [Shift_Left (SD'(1), Natural (Y.D (1)))];
           begin
!             return Normalize (D, X.Neg and then (Y.D (1) and 1) = 1);
           end;
  
        --  Remaining cases have right operand of one word
diff -Nrcpad gcc-14.3.0/gcc/ada/libgnat/s-stposu.adb gcc-14.3.0-RC-20260619/gcc/ada/libgnat/s-stposu.adb
*** gcc-14.3.0/gcc/ada/libgnat/s-stposu.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/libgnat/s-stposu.adb	Fri Jun 19 06:51:02 2026
*************** package body System.Storage_Pools.Subpoo
*** 523,528 ****
--- 523,529 ----
     procedure Finalize_Pool (Pool : in out Root_Storage_Pool_With_Subpools) is
        Curr_Ptr : SP_Node_Ptr;
        Ex_Occur : Exception_Occurrence;
+       Handle   : Subpool_Handle;
        Raised   : Boolean := False;
  
        function Is_Empty_List (L : not null SP_Node_Ptr) return Boolean;
*************** package body System.Storage_Pools.Subpoo
*** 557,572 ****
        while not Is_Empty_List (Pool.Subpools'Unchecked_Access) loop
           Curr_Ptr := Pool.Subpools.Next;
  
!          --  Perform the following actions:
! 
!          --    1) Finalize all objects chained on the subpool's master
!          --    2) Remove the subpool from the owner's list of subpools
!          --    3) Deallocate the doubly linked list node associated with the
!          --       subpool.
!          --    4) Call Deallocate_Subpool
  
           begin
!             Finalize_And_Deallocate (Curr_Ptr.Subpool);
  
           exception
              when Fin_Occur : others =>
--- 558,570 ----
        while not Is_Empty_List (Pool.Subpools'Unchecked_Access) loop
           Curr_Ptr := Pool.Subpools.Next;
  
!          --  Finalize and deallocate the subpool. Beware that the node pointed
!          --  to by Curr_Ptr will be deallocated so may not be passed as actual
!          --  in the call, since the formal parameter is In Out.
  
           begin
!             Handle := Curr_Ptr.Subpool;
!             Finalize_And_Deallocate (Handle);
  
           exception
              when Fin_Occur : others =>
diff -Nrcpad gcc-14.3.0/gcc/ada/libgnat/system-linux-loongarch.ads gcc-14.3.0-RC-20260619/gcc/ada/libgnat/system-linux-loongarch.ads
*** gcc-14.3.0/gcc/ada/libgnat/system-linux-loongarch.ads	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/libgnat/system-linux-loongarch.ads	Fri Jun 19 06:51:02 2026
*************** private
*** 139,145 ****
     Always_Compatible_Rep     : constant Boolean := False;
     Suppress_Standard_Library : constant Boolean := False;
     Use_Ada_Main_Program_Name : constant Boolean := False;
-    Frontend_Exceptions       : constant Boolean := False;
     ZCX_By_Default            : constant Boolean := True;
  
  end System;
--- 139,144 ----
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_attr.adb gcc-14.3.0-RC-20260619/gcc/ada/sem_attr.adb
*** gcc-14.3.0/gcc/ada/sem_attr.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_attr.adb	Fri Jun 19 06:51:02 2026
*************** package body Sem_Attr is
*** 11458,11463 ****
--- 11458,11464 ----
                 end if;
  
                 Resolve (Prefix (P));
+                Resolve_Implicit_Dereference (Prefix (P));
  
                 if not Is_Overloaded (P) then
                    Generate_Reference (Entity (Selector_Name (P)), P);
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_ch10.adb gcc-14.3.0-RC-20260619/gcc/ada/sem_ch10.adb
*** gcc-14.3.0/gcc/ada/sem_ch10.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_ch10.adb	Fri Jun 19 06:51:02 2026
*************** package body Sem_Ch10 is
*** 936,941 ****
--- 936,955 ----
  
        --  Now analyze the unit (package, subprogram spec, body) itself
  
+       if Debug_Flag_I then
+          if Nkind (Unit_Node) in N_Package_Declaration
+                                | N_Package_Renaming_Declaration
+                                | N_Subprogram_Declaration
+                                | N_Generic_Declaration
+            or else (Nkind (Unit_Node) = N_Subprogram_Body
+                      and then Acts_As_Spec (Unit_Node))
+          then
+             Write_Str ("install unit ");
+             Write_Name (Chars (Defining_Entity (Unit_Node)));
+             Write_Eol;
+          end if;
+       end if;
+ 
        Analyze (Unit_Node);
  
        if Warn_On_Redundant_Constructs then
*************** package body Sem_Ch10 is
*** 4443,4448 ****
--- 4457,4474 ----
           end if;
        end if;
  
+       if Debug_Flag_I then
+          Write_Str ("install parent unit ");
+          Write_Name (Chars (P_Name));
+          Write_Eol;
+       end if;
+ 
+       --  Skip this for predefined units because of the rtsfind mechanism
+ 
+       if not In_Predefined_Unit (P_Name) then
+          Set_Is_Visible_Lib_Unit (P_Name);
+       end if;
+ 
        --  This is the recursive call that ensures all parents are loaded
  
        if Is_Child_Spec (P) then
*************** package body Sem_Ch10 is
*** 4515,4526 ****
        Item   : Node_Id;
  
     begin
-       if Debug_Flag_I then
-          Write_Str ("install private with clauses of ");
-          Write_Name (Chars (P));
-          Write_Eol;
-       end if;
- 
        if Nkind (Parent (Decl)) = N_Compilation_Unit then
           Item := First (Context_Items (Parent (Decl)));
           while Present (Item) loop
--- 4541,4546 ----
*************** package body Sem_Ch10 is
*** 7076,7081 ****
--- 7096,7113 ----
           --  in the reverse order of their installation.
  
           Remove_Parents (P);
+ 
+          if Debug_Flag_I then
+             Write_Str ("remove parent unit ");
+             Write_Name (Chars (P_Name));
+             Write_Eol;
+          end if;
+ 
+          --  Skip this for predefined units because of the rtsfind mechanism
+ 
+          if not In_Predefined_Unit (P_Name) then
+             Set_Is_Visible_Lib_Unit (P_Name, False);
+          end if;
        end if;
     end Remove_Parents;
  
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_ch13.adb gcc-14.3.0-RC-20260619/gcc/ada/sem_ch13.adb
*** gcc-14.3.0/gcc/ada/sem_ch13.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_ch13.adb	Fri Jun 19 06:51:02 2026
*************** package body Sem_Ch13 is
*** 16793,16807 ****
        -----------------------
  
        procedure Resolve_Operation (Subp_Id : Node_Id) is
-          Subp : Entity_Id;
- 
           I  : Interp_Index;
           It : Interp;
  
        begin
           if not Is_Overloaded (Subp_Id) then
!             Subp := Entity (Subp_Id);
!             if not Pred (Subp) then
                 Error_Msg_NE
                   ("improper aggregate operation for&", Subp_Id, Typ);
              end if;
--- 16793,16804 ----
        -----------------------
  
        procedure Resolve_Operation (Subp_Id : Node_Id) is
           I  : Interp_Index;
           It : Interp;
  
        begin
           if not Is_Overloaded (Subp_Id) then
!             if not Pred (Entity (Subp_Id)) then
                 Error_Msg_NE
                   ("improper aggregate operation for&", Subp_Id, Typ);
              end if;
*************** package body Sem_Ch13 is
*** 16811,16819 ****
              Get_First_Interp (Subp_Id, I, It);
              while Present (It.Nam) loop
                 if Pred (It.Nam) then
                    Set_Is_Overloaded (Subp_Id, False);
                    Set_Entity (Subp_Id, It.Nam);
-                   exit;
                 end if;
  
                 Get_Next_Interp (I, It);
--- 16808,16828 ----
              Get_First_Interp (Subp_Id, I, It);
              while Present (It.Nam) loop
                 if Pred (It.Nam) then
+                   if Present (Entity (Subp_Id)) then
+                      --  ??? Cope with the obsolete renaming of Append_Vector
+                      --  in Ada.Containers.Vectors retained for compatibility.
+ 
+                      if No (Alias (Entity (Subp_Id)))
+                        and then No (Alias (It.Nam))
+                      then
+                         Error_Msg_N
+                           ("& must denote exactly one subprogram", Subp_Id);
+                      end if;
+ 
+                      exit;
+                   end if;
                    Set_Is_Overloaded (Subp_Id, False);
                    Set_Entity (Subp_Id, It.Nam);
                 end if;
  
                 Get_Next_Interp (I, It);
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_disp.adb gcc-14.3.0-RC-20260619/gcc/ada/sem_disp.adb
*** gcc-14.3.0/gcc/ada/sem_disp.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_disp.adb	Fri Jun 19 06:51:02 2026
*************** package body Sem_Disp is
*** 306,314 ****
           Ctrl_Type := Check_Controlling_Type (Etype (Formal), Subp);
  
           if Present (Ctrl_Type) then
! 
!             --  Obtain the full type in case we are looking at an incomplete
!             --  view.
  
              if Ekind (Ctrl_Type) = E_Incomplete_Type
                and then Present (Full_View (Ctrl_Type))
--- 306,312 ----
           Ctrl_Type := Check_Controlling_Type (Etype (Formal), Subp);
  
           if Present (Ctrl_Type) then
!             --  Use the full view for an incomplete type
  
              if Ekind (Ctrl_Type) = E_Incomplete_Type
                and then Present (Full_View (Ctrl_Type))
*************** package body Sem_Disp is
*** 316,323 ****
                 Ctrl_Type := Full_View (Ctrl_Type);
              end if;
  
!             --  When controlling type is concurrent and declared within a
!             --  generic or inside an instance use corresponding record type.
  
              if Is_Concurrent_Type (Ctrl_Type)
                and then Present (Corresponding_Record_Type (Ctrl_Type))
--- 314,320 ----
                 Ctrl_Type := Full_View (Ctrl_Type);
              end if;
  
!             --  Use the corresponding record type for a concurrent type
  
              if Is_Concurrent_Type (Ctrl_Type)
                and then Present (Corresponding_Record_Type (Ctrl_Type))
*************** package body Sem_Disp is
*** 392,397 ****
--- 389,410 ----
           Ctrl_Type := Check_Controlling_Type (Etype (Subp), Subp);
  
           if Present (Ctrl_Type) then
+             --  Use the full view for an incomplete type
+ 
+             if Ekind (Ctrl_Type) = E_Incomplete_Type
+               and then Present (Full_View (Ctrl_Type))
+             then
+                Ctrl_Type := Full_View (Ctrl_Type);
+             end if;
+ 
+             --  Use the corresponding record type for a concurrent type
+ 
+             if Is_Concurrent_Type (Ctrl_Type)
+               and then Present (Corresponding_Record_Type (Ctrl_Type))
+             then
+                Ctrl_Type := Corresponding_Record_Type (Ctrl_Type);
+             end if;
+ 
              if Ctrl_Type = Typ then
                 Set_Has_Controlling_Result (Subp);
  
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_elab.adb gcc-14.3.0-RC-20260619/gcc/ada/sem_elab.adb
*** gcc-14.3.0/gcc/ada/sem_elab.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_elab.adb	Fri Jun 19 06:51:02 2026
*************** package body Sem_Elab is
*** 9903,9909 ****
                 --  The corresponding subunit was previously loaded
  
                 if Present (Lib_Unit) then
!                   return Lib_Unit;
  
                 --  Otherwise attempt to load the corresponding subunit
  
--- 9903,9909 ----
                 --  The corresponding subunit was previously loaded
  
                 if Present (Lib_Unit) then
!                   return Proper_Body (Unit (Lib_Unit));
  
                 --  Otherwise attempt to load the corresponding subunit
  
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_res.adb gcc-14.3.0-RC-20260619/gcc/ada/sem_res.adb
*** gcc-14.3.0/gcc/ada/sem_res.adb	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_res.adb	Fri Jun 19 06:51:02 2026
*************** package body Sem_Res is
*** 256,267 ****
     --  is the context type, which is used when the operation is a protected
     --  function with no arguments, and the return value is indexed.
  
-    procedure Resolve_Implicit_Dereference (P : Node_Id);
-    --  Called when P is the prefix of an indexed component, or of a selected
-    --  component, or of a slice. If P is of an access type, we unconditionally
-    --  rewrite it as an explicit dereference. This ensures that the expander
-    --  and the code generator have a fully explicit tree to work with.
- 
     procedure Resolve_Intrinsic_Operator (N : Node_Id; Typ : Entity_Id);
     --  A call to a user-defined intrinsic operator is rewritten as a call to
     --  the corresponding predefined operator, with suitable conversions. Note
--- 256,261 ----
diff -Nrcpad gcc-14.3.0/gcc/ada/sem_res.ads gcc-14.3.0-RC-20260619/gcc/ada/sem_res.ads
*** gcc-14.3.0/gcc/ada/sem_res.ads	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ada/sem_res.ads	Fri Jun 19 06:51:02 2026
*************** package Sem_Res is
*** 125,130 ****
--- 125,136 ----
     --  own type. For now we assume that the prefix cannot be overloaded and
     --  the name of the entry plays no role in the resolution.
  
+    procedure Resolve_Implicit_Dereference (P : Node_Id);
+    --  Called when P is the prefix of an indexed component, or of a selected
+    --  component, or of a slice. If P is of an access type, we unconditionally
+    --  rewrite it as an explicit dereference. This ensures that the expander
+    --  and the code generator have a fully explicit tree to work with.
+ 
     procedure Resolve_Membership_Equality (N : Node_Id; Typ : Entity_Id);
     --  Resolve the equality operator in an individual membership test
  
diff -Nrcpad gcc-14.3.0/gcc/alias.cc gcc-14.3.0-RC-20260619/gcc/alias.cc
*** gcc-14.3.0/gcc/alias.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/alias.cc	Fri Jun 19 06:51:02 2026
*************** get_alias_set (tree t)
*** 951,957 ****
    else
      {
        t = TYPE_CANONICAL (t);
!       gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
      }
  
    /* If this is a type with a known alias set, return it.  */
--- 951,962 ----
    else
      {
        t = TYPE_CANONICAL (t);
!       gcc_checking_assert (TYPE_CANONICAL (t) == t);
!       if (t != TYPE_MAIN_VARIANT (t))
! 	{
! 	  t = TYPE_MAIN_VARIANT (t);
! 	  gcc_checking_assert (TYPE_CANONICAL (t) == t);
! 	}
      }
  
    /* If this is a type with a known alias set, return it.  */
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2533,2551 ****
  	    return memrefs_conflict_p (xsize, x1, ysize, y1, c);
  	  if (poly_int_rtx_p (x1, &cx1))
  	    {
  	      if (poly_int_rtx_p (y1, &cy1))
! 		return memrefs_conflict_p (xsize, x0, ysize, y0,
! 					   c - cx1 + cy1);
  	      else
! 		return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
  	    }
  	  else if (poly_int_rtx_p (y1, &cy1))
! 	    return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
  
  	  return -1;
  	}
        else if (poly_int_rtx_p (x1, &cx1))
! 	return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
      }
    else if (GET_CODE (y) == PLUS)
      {
--- 2538,2576 ----
  	    return memrefs_conflict_p (xsize, x1, ysize, y1, c);
  	  if (poly_int_rtx_p (x1, &cx1))
  	    {
+ 	      poly_offset_int co = c;
+ 	      co -= cx1;
  	      if (poly_int_rtx_p (y1, &cy1))
! 		{
! 		  co += cy1;
! 		  if (!co.to_shwi (&c))
! 		    return -1;
! 		  return memrefs_conflict_p (xsize, x0, ysize, y0, c);
! 		}
! 	      else if (!co.to_shwi (&c))
! 		return -1;
  	      else
! 		return memrefs_conflict_p (xsize, x0, ysize, y, c);
  	    }
  	  else if (poly_int_rtx_p (y1, &cy1))
! 	    {
! 	      poly_offset_int co = c;
! 	      co += cy1;
! 	      if (!co.to_shwi (&c))
! 		return -1;
! 	      return memrefs_conflict_p (xsize, x, ysize, y0, c);
! 	    }
  
  	  return -1;
  	}
        else if (poly_int_rtx_p (x1, &cx1))
! 	{
! 	  poly_offset_int co = c;
! 	  co -= cx1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
! 	  return memrefs_conflict_p (xsize, x0, ysize, y, c);
! 	}
      }
    else if (GET_CODE (y) == PLUS)
      {
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2561,2567 ****
  
        poly_int64 cy1;
        if (poly_int_rtx_p (y1, &cy1))
! 	return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
        else
  	return -1;
      }
--- 2586,2598 ----
  
        poly_int64 cy1;
        if (poly_int_rtx_p (y1, &cy1))
! 	{
! 	  poly_offset_int co = c;
! 	  co += cy1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
! 	  return memrefs_conflict_p (xsize, x, ysize, y0, c);
! 	}
        else
  	return -1;
      }
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2614,2621 ****
  	  if (maybe_gt (xsize, 0))
  	    xsize = -xsize;
  	  if (maybe_ne (xsize, 0))
! 	    xsize += sc + 1;
! 	  c -= sc + 1;
  	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
  				     ysize, y, c);
  	}
--- 2645,2660 ----
  	  if (maybe_gt (xsize, 0))
  	    xsize = -xsize;
  	  if (maybe_ne (xsize, 0))
! 	    {
! 	      poly_offset_int xsizeo = xsize;
! 	      xsizeo += sc + 1;
! 	      if (!xsizeo.to_shwi (&xsize))
! 		return -1;
! 	    }
! 	  poly_offset_int co = c;
! 	  co -= sc + 1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
  	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
  				     ysize, y, c);
  	}
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2629,2636 ****
  	  if (maybe_gt (ysize, 0))
  	    ysize = -ysize;
  	  if (maybe_ne (ysize, 0))
! 	    ysize += sc + 1;
! 	  c += sc + 1;
  	  return memrefs_conflict_p (xsize, x,
  				     ysize, canon_rtx (XEXP (y, 0)), c);
  	}
--- 2668,2683 ----
  	  if (maybe_gt (ysize, 0))
  	    ysize = -ysize;
  	  if (maybe_ne (ysize, 0))
! 	    {
! 	      poly_offset_int ysizeo = ysize;
! 	      ysizeo += sc + 1;
! 	      if (!ysizeo.to_shwi (&ysize))
! 		return -1;
! 	    }
! 	  poly_offset_int co = c;
! 	  co += sc + 1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
  	  return memrefs_conflict_p (xsize, x,
  				     ysize, canon_rtx (XEXP (y, 0)), c);
  	}
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2641,2647 ****
        poly_int64 cx, cy;
        if (poly_int_rtx_p (x, &cx) && poly_int_rtx_p (y, &cy))
  	{
! 	  c += cy - cx;
  	  return offset_overlap_p (c, xsize, ysize);
  	}
  
--- 2688,2698 ----
        poly_int64 cx, cy;
        if (poly_int_rtx_p (x, &cx) && poly_int_rtx_p (y, &cy))
  	{
! 	  poly_offset_int co = c;
! 	  co += cy;
! 	  co -= cx;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
  	  return offset_overlap_p (c, xsize, ysize);
  	}
  
diff -Nrcpad gcc-14.3.0/gcc/analyzer/ChangeLog gcc-14.3.0-RC-20260619/gcc/analyzer/ChangeLog
*** gcc-14.3.0/gcc/analyzer/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/analyzer/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,16 ----
+ 2025-10-21  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-19  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/118300
+ 	* kf.cc (class kf_ubsan_bounds): Replace this with...
+ 	(class kf_ubsan_noop): ...this.
+ 	(register_sanitizer_builtins): Use it to handle IFN_UBSAN_NULL,
+ 	IFN_UBSAN_BOUNDS, and IFN_UBSAN_PTR as nop-ops.
+ 	(register_known_functions): Drop handling of IFN_UBSAN_BOUNDS
+ 	here, as it's now handled by register_sanitizer_builtins above.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/analyzer/kf.cc gcc-14.3.0-RC-20260619/gcc/analyzer/kf.cc
*** gcc-14.3.0/gcc/analyzer/kf.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/analyzer/kf.cc	Fri Jun 19 06:51:02 2026
*************** private:
*** 2057,2067 ****
    const private_region m_private_reg;
  };
  
- class kf_ubsan_bounds : public internal_known_function
- {
-   /* Empty.  */
- };
- 
  /* Handle calls to functions referenced by
     __attribute__((malloc(FOO))).  */
  
--- 2057,2062 ----
*************** register_atomic_builtins (known_function
*** 2198,2203 ****
--- 2193,2205 ----
  	   make_unique<kf_atomic_fetch_op> (BIT_IOR_EXPR));
  }
  
+ /* Handle calls to the various IFN_UBSAN_* with no return value.
+    For now, treat these as no-ops.  */
+ 
+ class kf_ubsan_noop : public internal_known_function
+ {
+ };
+ 
  /* Handle calls to the various __builtin___ubsan_handle_*.
     These can return, but continuing after such a return
     isn't likely to be interesting to the user of the analyzer.
*************** class kf_ubsan_handler : public internal
*** 2215,2220 ****
--- 2217,2231 ----
  static void
  register_sanitizer_builtins (known_function_manager &kfm)
  {
+   /* Handle calls to the various IFN_UBSAN_* with no return value.
+      For now, treat these as no-ops.  */
+   kfm.add (IFN_UBSAN_NULL,
+ 	   make_unique<kf_ubsan_noop> ());
+   kfm.add (IFN_UBSAN_BOUNDS,
+ 	   make_unique<kf_ubsan_noop> ());
+   kfm.add (IFN_UBSAN_PTR,
+ 	   make_unique<kf_ubsan_noop> ());
+ 
    kfm.add (BUILT_IN_UBSAN_HANDLE_NONNULL_ARG,
  	   make_unique<kf_ubsan_handler> ());
  }
*************** register_known_functions (known_function
*** 2232,2238 ****
    /* Internal fns the analyzer has known_functions for.  */
    {
      kfm.add (IFN_BUILTIN_EXPECT, make_unique<kf_expect> ());
-     kfm.add (IFN_UBSAN_BOUNDS, make_unique<kf_ubsan_bounds> ());
    }
  
    /* GCC built-ins that do not correspond to a function
--- 2243,2248 ----
diff -Nrcpad gcc-14.3.0/gcc/builtins.cc gcc-14.3.0-RC-20260619/gcc/builtins.cc
*** gcc-14.3.0/gcc/builtins.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/builtins.cc	Fri Jun 19 06:51:02 2026
*************** fold_builtin_fabs (location_t loc, tree
*** 9388,9394 ****
  static tree
  fold_builtin_abs (location_t loc, tree arg, tree type)
  {
!   if (!validate_arg (arg, INTEGER_TYPE))
      return NULL_TREE;
  
    arg = fold_convert_loc (loc, type, arg);
--- 9388,9394 ----
  static tree
  fold_builtin_abs (location_t loc, tree arg, tree type)
  {
!   if (!validate_arg (arg, INTEGER_TYPE) || !INTEGRAL_TYPE_P (type))
      return NULL_TREE;
  
    arg = fold_convert_loc (loc, type, arg);
diff -Nrcpad gcc-14.3.0/gcc/c/ChangeLog gcc-14.3.0-RC-20260619/gcc/c/ChangeLog
*** gcc-14.3.0/gcc/c/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/c/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,20 ----
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123365
+ 	* c-decl.cc (build_compound_literal): Call relayout_decl
+ 	after completing the type.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123018
+ 	* c-decl.cc (finish_struct): Diagnose bit-fields with vector type.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/c/c-decl.cc gcc-14.3.0-RC-20260619/gcc/c/c-decl.cc
*** gcc-14.3.0/gcc/c/c-decl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/c/c-decl.cc	Fri Jun 19 06:51:02 2026
*************** build_compound_literal (location_t loc,
*** 6453,6458 ****
--- 6453,6459 ----
  
        type = TREE_TYPE (decl);
        TREE_TYPE (DECL_INITIAL (decl)) = type;
+       relayout_decl (decl);
      }
  
    if (type == error_mark_node || !COMPLETE_TYPE_P (type))
*************** finish_struct (location_t loc, tree t, t
*** 9581,9586 ****
--- 9582,9594 ----
  	  unsigned HOST_WIDE_INT width
  	    = tree_to_uhwi (DECL_INITIAL (field));
  	  tree type = TREE_TYPE (field);
+ 	  if (VECTOR_TYPE_P (type))
+ 	    {
+ 	      error_at (DECL_SOURCE_LOCATION (field),
+ 			"bit-field %qD has invalid type", field);
+ 	      type = TREE_TYPE (type);
+ 	      TREE_TYPE (field) = type;
+ 	    }
  	  if (width != TYPE_PRECISION (type))
  	    {
  	      if (TREE_CODE (type) == BITINT_TYPE
diff -Nrcpad gcc-14.3.0/gcc/c-family/ChangeLog gcc-14.3.0-RC-20260619/gcc/c-family/ChangeLog
*** gcc-14.3.0/gcc/c-family/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/c-family/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,82 ----
+ 2026-03-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-02  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* c-cppbuiltin.cc (c_cpp_builtins): Bump __cpp_deduction_guides to
+ 	202207L for C++23 and later.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-12-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c/123156
+ 	* c-common.cc (c_build_shufflevector): Use ssizetype for the
+ 	permute vector element type.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120052
+ 	* c-ubsan.cc (ubsan_instrument_bounds): For VLAs use
+ 	1 instead of 0 as first IFN_UBSAN_BOUNDS argument and only
+ 	use the addend without TYPE_MAX_VALUE (TYPE_DOMAIN (type))
+ 	in the 3rd argument.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/122624
+ 	* c-common.cc (c_common_get_alias_set): Fix up handling of
+ 	BITINT_TYPEs.  For unsigned _BitInt(1) always return -1.  For other
+ 	unsigned types set TYPE_ALIAS_SET to get_alias_set of corresponding
+ 	signed type and return that.  For signed types check if corresponding
+ 	unsigned type has TYPE_ALIAS_SET_KNOWN_P and if so copy its
+ 	TYPE_ALIAS_SET and return that.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-02-12  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR c/105555
+ 	* c-common.cc (fold_offsetof): Handle REALPART_EXPR
+ 	and IMAGPART_EXPR.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/122188
+ 	* c-gimplify.cc (c_gimplify_expr): Also gimplify the second operand
+ 	before the COND_EXPR and use in COND_EXPR result of gimplification.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/122188
+ 	* c-gimplify.cc (c_gimplify_expr): Gimplify CALL_EXPR_ARG (*expr_p, 0)
+ 	instead of calling save_expr on it.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120837
+ 	* c-common.cc (pointer_int_sum): Rewrite the intop PLUS_EXPR or
+ 	MINUS_EXPR optimization into extension of both intop operands,
+ 	their separate multiplication and then addition/subtraction followed
+ 	by rest of pointer_int_sum handling after the multiplication.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/c-family/c-common.cc gcc-14.3.0-RC-20260619/gcc/c-family/c-common.cc
*** gcc-14.3.0/gcc/c-family/c-common.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/c-family/c-common.cc	Fri Jun 19 06:51:02 2026
*************** c_build_shufflevector (location_t loc, t
*** 1240,1248 ****
    vec_perm_indices indices (sel, 2, maskl);
  
    tree ret_type = build_vector_type (TREE_TYPE (TREE_TYPE (v0)), maskl);
!   tree mask_type = build_vector_type (build_nonstandard_integer_type
! 		(TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (ret_type))), 1),
! 		maskl);
    /* Pad out arguments to the common vector size.  */
    if (v0n < maskl)
      {
--- 1240,1246 ----
    vec_perm_indices indices (sel, 2, maskl);
  
    tree ret_type = build_vector_type (TREE_TYPE (TREE_TYPE (v0)), maskl);
!   tree mask_type = build_vector_type (ssizetype, maskl);
    /* Pad out arguments to the common vector size.  */
    if (v0n < maskl)
      {
*************** pointer_int_sum (location_t loc, enum tr
*** 3420,3439 ****
  	 an overflow error if the constant is negative but INTOP is not.  */
        && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))
  	  || (TYPE_PRECISION (TREE_TYPE (intop))
! 	      == TYPE_PRECISION (TREE_TYPE (ptrop)))))
      {
!       enum tree_code subcode = resultcode;
!       tree int_type = TREE_TYPE (intop);
!       if (TREE_CODE (intop) == MINUS_EXPR)
! 	subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
!       /* Convert both subexpression types to the type of intop,
! 	 because weird cases involving pointer arithmetic
! 	 can result in a sum or difference with different type args.  */
!       ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
! 			       subcode, ptrop,
! 			       convert (int_type, TREE_OPERAND (intop, 1)),
! 			       true);
!       intop = convert (int_type, TREE_OPERAND (intop, 0));
      }
  
    /* Convert the integer argument to a type the same size as sizetype
--- 3418,3458 ----
  	 an overflow error if the constant is negative but INTOP is not.  */
        && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))
  	  || (TYPE_PRECISION (TREE_TYPE (intop))
! 	      == TYPE_PRECISION (TREE_TYPE (ptrop))))
!       && TYPE_PRECISION (TREE_TYPE (intop)) <= TYPE_PRECISION (sizetype))
      {
!       tree intop0 = TREE_OPERAND (intop, 0);
!       tree intop1 = TREE_OPERAND (intop, 1);
!       if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
! 	  || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
! 	{
! 	  tree optype = c_common_type_for_size (TYPE_PRECISION (sizetype),
! 						TYPE_UNSIGNED (sizetype));
! 	  intop0 = convert (optype, intop0);
! 	  intop1 = convert (optype, intop1);
! 	}
!       tree t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop0), intop0,
! 				convert (TREE_TYPE (intop0), size_exp));
!       intop0 = convert (sizetype, t);
!       if (TREE_OVERFLOW_P (intop0) && !TREE_OVERFLOW (t))
! 	intop0 = wide_int_to_tree (TREE_TYPE (intop0), wi::to_wide (intop0));
!       t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop1), intop1,
! 			   convert (TREE_TYPE (intop1), size_exp));
!       intop1 = convert (sizetype, t);
!       if (TREE_OVERFLOW_P (intop1) && !TREE_OVERFLOW (t))
! 	intop1 = wide_int_to_tree (TREE_TYPE (intop1), wi::to_wide (intop1));
!       intop = build_binary_op (EXPR_LOCATION (intop), TREE_CODE (intop),
! 			       intop0, intop1, true);
! 
!       /* Create the sum or difference.  */
!       if (resultcode == MINUS_EXPR)
! 	intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
! 
!       ret = fold_build_pointer_plus_loc (loc, ptrop, intop);
! 
!       fold_undefer_and_ignore_overflow_warnings ();
! 
!       return ret;
      }
  
    /* Convert the integer argument to a type the same size as sizetype
*************** c_common_get_alias_set (tree t)
*** 3900,3907 ****
    /* The C standard specifically allows aliasing between signed and
       unsigned variants of the same type.  We treat the signed
       variant as canonical.  */
!   if ((TREE_CODE (t) == INTEGER_TYPE || TREE_CODE (t) == BITINT_TYPE)
!       && TYPE_UNSIGNED (t))
      {
        tree t1 = c_common_signed_type (t);
  
--- 3919,3925 ----
    /* The C standard specifically allows aliasing between signed and
       unsigned variants of the same type.  We treat the signed
       variant as canonical.  */
!   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
      {
        tree t1 = c_common_signed_type (t);
  
*************** c_common_get_alias_set (tree t)
*** 3909,3914 ****
--- 3927,3967 ----
        if (t1 != t)
  	return get_alias_set (t1);
      }
+   if (TREE_CODE (t) == BITINT_TYPE)
+     {
+       /* For normal INTEGER_TYPEs (except ones built by
+ 	 build_nonstandard_integer_type), both signed and unsigned variants
+ 	 of the type are always reachable from GTY roots, so just calling
+ 	 get_alias_set on the signed type is ok.  For BITINT_TYPE and
+ 	 non-standard INTEGER_TYPEs, only unsigned could be used and the
+ 	 corresponding signed type could be created on demand and garbage
+ 	 collected as unused, so the alias set of unsigned type could keep
+ 	 changing.
+ 	 Avoid that by remembering the signed type alias set in
+ 	 TYPE_ALIAS_SET and also when being asked about !TYPE_UNSIGNED
+ 	 check if there isn't a corresponding unsigned type with
+ 	 TYPE_ALIAS_SET_KNOWN_P.  */
+       if (TYPE_UNSIGNED (t))
+ 	{
+ 	  /* There is no signed _BitInt(1).  */
+ 	  if (TYPE_PRECISION (t) == 1)
+ 	    return -1;
+ 	  tree t1 = c_common_signed_type (t);
+ 	  gcc_checking_assert (t != t1);
+ 	  TYPE_ALIAS_SET (t) = get_alias_set (t1);
+ 	  return TYPE_ALIAS_SET (t);
+ 	}
+       else
+ 	{
+ 	  tree t1 = c_common_unsigned_type (t);
+ 	  gcc_checking_assert (t != t1);
+ 	  if (TYPE_ALIAS_SET_KNOWN_P (t1))
+ 	    {
+ 	      TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET (t1);
+ 	      return TYPE_ALIAS_SET (t);
+ 	    }
+ 	}
+     }
  
    return -1;
  }
*************** fold_offsetof (tree expr, tree type, enu
*** 6905,6910 ****
--- 6958,6973 ----
      case ERROR_MARK:
        return expr;
  
+     case REALPART_EXPR:
+      return fold_offsetof (TREE_OPERAND (expr, 0), type, code);
+ 
+     case IMAGPART_EXPR:
+      base = fold_offsetof (TREE_OPERAND (expr, 0), type, code);
+      if (base == error_mark_node)
+ 	return base;
+      off = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (TREE_OPERAND (expr, 0))));
+      break;
+ 
      case VAR_DECL:
        error ("cannot apply %<offsetof%> to static data member %qD", expr);
        return error_mark_node;
diff -Nrcpad gcc-14.3.0/gcc/c-family/c-cppbuiltin.cc gcc-14.3.0-RC-20260619/gcc/c-family/c-cppbuiltin.cc
*** gcc-14.3.0/gcc/c-family/c-cppbuiltin.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/c-family/c-cppbuiltin.cc	Fri Jun 19 06:51:02 2026
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1052,1058 ****
  	  cpp_define (pfile, "__cpp_conditional_explicit=201806L");
  	  cpp_define (pfile, "__cpp_consteval=202211L");
  	  cpp_define (pfile, "__cpp_constinit=201907L");
! 	  cpp_define (pfile, "__cpp_deduction_guides=201907L");
  	  cpp_define (pfile, "__cpp_nontype_template_args=201911L");
  	  cpp_define (pfile, "__cpp_nontype_template_parameter_class=201806L");
  	  cpp_define (pfile, "__cpp_impl_destroying_delete=201806L");
--- 1052,1059 ----
  	  cpp_define (pfile, "__cpp_conditional_explicit=201806L");
  	  cpp_define (pfile, "__cpp_consteval=202211L");
  	  cpp_define (pfile, "__cpp_constinit=201907L");
! 	  if (cxx_dialect <= cxx20)
! 	    cpp_define (pfile, "__cpp_deduction_guides=201907L");
  	  cpp_define (pfile, "__cpp_nontype_template_args=201911L");
  	  cpp_define (pfile, "__cpp_nontype_template_parameter_class=201806L");
  	  cpp_define (pfile, "__cpp_impl_destroying_delete=201806L");
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1069,1074 ****
--- 1070,1076 ----
  	  cpp_define (pfile, "__cpp_auto_cast=202110L");
  	  if (cxx_dialect <= cxx23)
  	    cpp_define (pfile, "__cpp_constexpr=202211L");
+ 	  cpp_define (pfile, "__cpp_deduction_guides=202207L");
  	  cpp_define (pfile, "__cpp_multidimensional_subscript=202211L");
  	  cpp_define (pfile, "__cpp_named_character_escapes=202207L");
  	  cpp_define (pfile, "__cpp_static_call_operator=202207L");
diff -Nrcpad gcc-14.3.0/gcc/c-family/c-gimplify.cc gcc-14.3.0-RC-20260619/gcc/c-family/c-gimplify.cc
*** gcc-14.3.0/gcc/c-family/c-gimplify.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/c-family/c-gimplify.cc	Fri Jun 19 06:51:02 2026
*************** c_gimplify_expr (tree *expr_p, gimple_se
*** 908,914 ****
  	    && call_expr_nargs (*expr_p) == 2
  	    && TREE_CODE (CALL_EXPR_ARG (*expr_p, 1)) != INTEGER_CST)
  	  {
! 	    tree a = save_expr (CALL_EXPR_ARG (*expr_p, 0));
  	    tree c = build_call_expr_loc (EXPR_LOCATION (*expr_p),
  					  fndecl, 1, a);
  	    *expr_p = build3_loc (EXPR_LOCATION (*expr_p), COND_EXPR,
--- 908,921 ----
  	    && call_expr_nargs (*expr_p) == 2
  	    && TREE_CODE (CALL_EXPR_ARG (*expr_p, 1)) != INTEGER_CST)
  	  {
! 	    tree a = CALL_EXPR_ARG (*expr_p, 0);
! 	    if (gimplify_expr (&a, pre_p, post_p, is_gimple_val, fb_rvalue)
! 		== GS_ERROR)
! 	      return GS_ERROR;
! 	    tree b = CALL_EXPR_ARG (*expr_p, 1);
! 	    if (gimplify_expr (&b, pre_p, post_p, is_gimple_val, fb_rvalue)
! 		== GS_ERROR)
! 	      return GS_ERROR;
  	    tree c = build_call_expr_loc (EXPR_LOCATION (*expr_p),
  					  fndecl, 1, a);
  	    *expr_p = build3_loc (EXPR_LOCATION (*expr_p), COND_EXPR,
*************** c_gimplify_expr (tree *expr_p, gimple_se
*** 916,922 ****
  				  build2_loc (EXPR_LOCATION (*expr_p),
  					      NE_EXPR, boolean_type_node, a,
  					      build_zero_cst (TREE_TYPE (a))),
! 				  c, CALL_EXPR_ARG (*expr_p, 1));
  	    return GS_OK;
  	  }
  	break;
--- 923,929 ----
  				  build2_loc (EXPR_LOCATION (*expr_p),
  					      NE_EXPR, boolean_type_node, a,
  					      build_zero_cst (TREE_TYPE (a))),
! 				  c, b);
  	    return GS_OK;
  	  }
  	break;
diff -Nrcpad gcc-14.3.0/gcc/c-family/c-ubsan.cc gcc-14.3.0-RC-20260619/gcc/c-family/c-ubsan.cc
*** gcc-14.3.0/gcc/c-family/c-ubsan.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/c-family/c-ubsan.cc	Fri Jun 19 06:51:02 2026
*************** ubsan_instrument_bounds (location_t loc,
*** 407,413 ****
  
    bound = fold_build2 (PLUS_EXPR, TREE_TYPE (bound), bound,
  		       build_int_cst (TREE_TYPE (bound),
! 		       1 + ignore_off_by_one));
  
    /* Detect flexible array members and suchlike, unless
       -fsanitize=bounds-strict.  */
--- 407,413 ----
  
    bound = fold_build2 (PLUS_EXPR, TREE_TYPE (bound), bound,
  		       build_int_cst (TREE_TYPE (bound),
! 				      1 + ignore_off_by_one));
  
    /* Detect flexible array members and suchlike, unless
       -fsanitize=bounds-strict.  */
*************** ubsan_instrument_bounds (location_t loc,
*** 494,501 ****
      return NULL_TREE;
  
    *index = save_expr (*index);
!   /* Create a "(T *) 0" tree node to describe the array type.  */
!   tree zero_with_type = build_int_cst (build_pointer_type (type), 0);
    return build_call_expr_internal_loc (loc, IFN_UBSAN_BOUNDS,
  				       void_type_node, 3, zero_with_type,
  				       *index, bound);
--- 494,509 ----
      return NULL_TREE;
  
    *index = save_expr (*index);
!   /* If TYPE is a VLA, use 1 instead of 0 as the first argument and
!      use just the addend to TYPE_MAX_VALUE (domain) as the third argument
!      temporarily, so that gimplification can use TYPE_MAX_VALUE (domain)
!      after gimplify_type_sizes.  See PR120052.  */
!   bool is_vla = (TYPE_MAX_VALUE (domain)
! 		 && TREE_CODE (TYPE_MAX_VALUE (domain)) != INTEGER_CST);
!   if (is_vla)
!     bound = build_int_cst (TREE_TYPE (bound), 1 + ignore_off_by_one);
!   /* Create a "(T *) 0" (or 1) tree node to describe the array type.  */
!   tree zero_with_type = build_int_cst (build_pointer_type (type), is_vla);
    return build_call_expr_internal_loc (loc, IFN_UBSAN_BOUNDS,
  				       void_type_node, 3, zero_with_type,
  				       *index, bound);
diff -Nrcpad gcc-14.3.0/gcc/cfgexpand.cc gcc-14.3.0-RC-20260619/gcc/cfgexpand.cc
*** gcc-14.3.0/gcc/cfgexpand.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cfgexpand.cc	Fri Jun 19 06:51:02 2026
*************** expand_asm_stmt (gasm *stmt)
*** 3481,3493 ****
       Case in point is when the i386 backend moved from cc0 to a hard reg --
       maintaining source-level compatibility means automatically clobbering
       the flags register.  */
-   rtx_insn *after_md_seq = NULL;
    auto_vec<rtx> use_rvec;
    if (targetm.md_asm_adjust)
!     after_md_seq
  	= targetm.md_asm_adjust (output_rvec, input_rvec, input_mode,
  				 constraints, use_rvec, clobber_rvec,
  				 clobbered_regs, locus);
  
    /* Do not allow the hook to change the output and input count,
       lest it mess up the operand numbering.  */
--- 3481,3502 ----
       Case in point is when the i386 backend moved from cc0 to a hard reg --
       maintaining source-level compatibility means automatically clobbering
       the flags register.  */
    auto_vec<rtx> use_rvec;
    if (targetm.md_asm_adjust)
!     {
!       rtx_insn *after_md_seq
  	= targetm.md_asm_adjust (output_rvec, input_rvec, input_mode,
  				 constraints, use_rvec, clobber_rvec,
  				 clobbered_regs, locus);
+       if (after_md_seq)
+ 	{
+ 	  push_to_sequence (after_md_seq);
+ 	  emit_insn (after_rtl_seq);
+ 	  after_rtl_seq = get_insns ();
+ 	  after_rtl_end = get_last_insn ();
+ 	  end_sequence ();
+ 	}
+     }
  
    /* Do not allow the hook to change the output and input count,
       lest it mess up the operand numbering.  */
*************** expand_asm_stmt (gasm *stmt)
*** 3662,3669 ****
    if (fallthru_label)
      emit_label (fallthru_label);
  
-   if (after_md_seq)
-     emit_insn (after_md_seq);
    if (after_rtl_seq)
      {
        if (nlabels == 0)
--- 3671,3676 ----
diff -Nrcpad gcc-14.3.0/gcc/cfgrtl.cc gcc-14.3.0-RC-20260619/gcc/cfgrtl.cc
*** gcc-14.3.0/gcc/cfgrtl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cfgrtl.cc	Fri Jun 19 06:51:02 2026
*************** force_nonfallthru_and_redirect (edge e,
*** 1595,1648 ****
      }
  
    /* If e->src ends with asm goto, see if any of the ASM_OPERANDS_LABELs
!      don't point to the target or fallthru label.  */
    if (JUMP_P (BB_END (e->src))
        && target != EXIT_BLOCK_PTR_FOR_FN (cfun)
        && (e->flags & EDGE_FALLTHRU)
        && (note = extract_asm_operands (PATTERN (BB_END (e->src)))))
      {
!       int i, n = ASM_OPERANDS_LABEL_LENGTH (note);
!       bool adjust_jump_target = false;
  
!       for (i = 0; i < n; ++i)
! 	{
! 	  if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (e->dest))
! 	    {
! 	      LABEL_NUSES (XEXP (ASM_OPERANDS_LABEL (note, i), 0))--;
! 	      XEXP (ASM_OPERANDS_LABEL (note, i), 0) = block_label (target);
! 	      LABEL_NUSES (XEXP (ASM_OPERANDS_LABEL (note, i), 0))++;
! 	      adjust_jump_target = true;
! 	    }
! 	  if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (target))
  	    asm_goto_edge = true;
! 	}
!       if (adjust_jump_target)
! 	{
! 	  rtx_insn *insn = BB_END (e->src);
! 	  rtx note;
! 	  rtx_insn *old_label = BB_HEAD (e->dest);
! 	  rtx_insn *new_label = BB_HEAD (target);
! 
! 	  if (JUMP_LABEL (insn) == old_label)
! 	    {
! 	      JUMP_LABEL (insn) = new_label;
! 	      note = find_reg_note (insn, REG_LABEL_TARGET, new_label);
! 	      if (note)
! 		remove_note (insn, note);
! 	    }
! 	  else
! 	    {
! 	      note = find_reg_note (insn, REG_LABEL_TARGET, old_label);
! 	      if (note)
! 		remove_note (insn, note);
! 	      if (JUMP_LABEL (insn) != new_label
! 		  && !find_reg_note (insn, REG_LABEL_TARGET, new_label))
! 		add_reg_note (insn, REG_LABEL_TARGET, new_label);
! 	    }
! 	  while ((note = find_reg_note (insn, REG_LABEL_OPERAND, old_label))
! 		 != NULL_RTX)
! 	    XEXP (note, 0) = new_label;
! 	}
      }
  
    if (EDGE_COUNT (e->src->succs) >= 2 || abnormal_edge_flags || asm_goto_edge)
--- 1595,1614 ----
      }
  
    /* If e->src ends with asm goto, see if any of the ASM_OPERANDS_LABELs
!      don't point to the fallthru label.  */
    if (JUMP_P (BB_END (e->src))
        && target != EXIT_BLOCK_PTR_FOR_FN (cfun)
        && (e->flags & EDGE_FALLTHRU)
        && (note = extract_asm_operands (PATTERN (BB_END (e->src)))))
      {
!       int n = ASM_OPERANDS_LABEL_LENGTH (note);
  
!       for (int i = 0; i < n; ++i)
! 	if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (e->dest))
! 	  {
  	    asm_goto_edge = true;
! 	    break;
! 	  }
      }
  
    if (EDGE_COUNT (e->src->succs) >= 2 || abnormal_edge_flags || asm_goto_edge)
*************** force_nonfallthru_and_redirect (edge e,
*** 1681,1695 ****
           and the reg crossing note should be removed.  */
        fixup_partition_crossing (new_edge);
  
!       /* If asm goto has any label refs to target's label,
! 	 add also edge from asm goto bb to target.  */
        if (asm_goto_edge)
  	{
! 	  new_edge->probability /= 2;
! 	  jump_block->count /= 2;
! 	  edge new_edge2 = make_edge (new_edge->src, target,
! 				      e->flags & ~EDGE_FALLTHRU);
! 	  new_edge2->probability = probability - new_edge->probability;
  	}
  
        new_bb = jump_block;
--- 1647,1691 ----
           and the reg crossing note should be removed.  */
        fixup_partition_crossing (new_edge);
  
!       /* If asm goto has any label refs to e->dest, change them to point
! 	 to jump_block instead.  */
        if (asm_goto_edge)
  	{
! 	  int n = ASM_OPERANDS_LABEL_LENGTH (note);
! 
! 	  for (int i = 0; i < n; ++i)
! 	    if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (e->dest))
! 	      {
! 		LABEL_NUSES (XEXP (ASM_OPERANDS_LABEL (note, i), 0))--;
! 		XEXP (ASM_OPERANDS_LABEL (note, i), 0)
! 		  = block_label (jump_block);
! 		LABEL_NUSES (XEXP (ASM_OPERANDS_LABEL (note, i), 0))++;
! 	      }
! 
! 	  rtx_insn *insn = BB_END (new_edge->src);
! 	  rtx note;
! 	  rtx_insn *old_label = BB_HEAD (e->dest);
! 	  rtx_insn *new_label = BB_HEAD (jump_block);
! 
! 	  if (JUMP_LABEL (insn) == old_label)
! 	    {
! 	      JUMP_LABEL (insn) = new_label;
! 	      note = find_reg_note (insn, REG_LABEL_TARGET, new_label);
! 	      if (note)
! 		remove_note (insn, note);
! 	    }
! 	  else
! 	    {
! 	      note = find_reg_note (insn, REG_LABEL_TARGET, old_label);
! 	      if (note)
! 		remove_note (insn, note);
! 	      if (JUMP_LABEL (insn) != new_label
! 		  && !find_reg_note (insn, REG_LABEL_TARGET, new_label))
! 		add_reg_note (insn, REG_LABEL_TARGET, new_label);
! 	    }
! 	  while ((note = find_reg_note (insn, REG_LABEL_OPERAND, old_label))
! 		 != NULL_RTX)
! 	    XEXP (note, 0) = new_label;
  	}
  
        new_bb = jump_block;
diff -Nrcpad gcc-14.3.0/gcc/cgraph.cc gcc-14.3.0-RC-20260619/gcc/cgraph.cc
*** gcc-14.3.0/gcc/cgraph.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cgraph.cc	Fri Jun 19 06:51:02 2026
*************** cgraph_update_edges_for_call_stmt_node (
*** 1642,1647 ****
--- 1642,1660 ----
  
        if (e)
  	{
+ 	  /* If call was devirtualized during cloning, mark edge
+ 	     as resolved.  */
+ 	  if (e->speculative)
+ 	    {
+ 	      if (new_stmt && is_gimple_call (new_stmt))
+ 		{
+ 		  tree decl = gimple_call_fndecl (new_stmt);
+ 		  if (decl)
+ 		    e = cgraph_edge::resolve_speculation (e, decl);
+ 		}
+ 	      else
+ 		e = cgraph_edge::resolve_speculation (e, NULL);
+ 	    }
  	  /* Keep calls marked as dead dead.  */
  	  if (new_stmt && is_gimple_call (new_stmt) && e->callee
  	      && fndecl_built_in_p (e->callee->decl, BUILT_IN_UNREACHABLE,
diff -Nrcpad gcc-14.3.0/gcc/combine.cc gcc-14.3.0-RC-20260619/gcc/combine.cc
*** gcc-14.3.0/gcc/combine.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/combine.cc	Fri Jun 19 06:51:02 2026
*************** try_combine (rtx_insn *i3, rtx_insn *i2,
*** 4016,4022 ****
  	  && !(GET_CODE (SET_DEST (set1)) == SUBREG
  	       && find_reg_note (i2, REG_DEAD,
  				 SUBREG_REG (SET_DEST (set1))))
! 	  && SET_DEST (set1) != pc_rtx
  	  && !reg_used_between_p (SET_DEST (set1), i2, i3)
  	  /* If I3 is a jump, ensure that set0 is a jump so that
  	     we do not create invalid RTL.  */
--- 4016,4022 ----
  	  && !(GET_CODE (SET_DEST (set1)) == SUBREG
  	       && find_reg_note (i2, REG_DEAD,
  				 SUBREG_REG (SET_DEST (set1))))
! 	  && !modified_between_p (SET_DEST (set1), i2, i3)
  	  && !reg_used_between_p (SET_DEST (set1), i2, i3)
  	  /* If I3 is a jump, ensure that set0 is a jump so that
  	     we do not create invalid RTL.  */
*************** try_combine (rtx_insn *i3, rtx_insn *i2,
*** 4032,4038 ****
  	       && !(GET_CODE (SET_DEST (set0)) == SUBREG
  		    && find_reg_note (i2, REG_DEAD,
  				      SUBREG_REG (SET_DEST (set0))))
! 	       && SET_DEST (set0) != pc_rtx
  	       && !reg_used_between_p (SET_DEST (set0), i2, i3)
  	       /* If I3 is a jump, ensure that set1 is a jump so that
  		  we do not create invalid RTL.  */
--- 4032,4038 ----
  	       && !(GET_CODE (SET_DEST (set0)) == SUBREG
  		    && find_reg_note (i2, REG_DEAD,
  				      SUBREG_REG (SET_DEST (set0))))
! 	       && !modified_between_p (SET_DEST (set0), i2, i3)
  	       && !reg_used_between_p (SET_DEST (set0), i2, i3)
  	       /* If I3 is a jump, ensure that set1 is a jump so that
  		  we do not create invalid RTL.  */
*************** recog_for_combine (rtx *pnewpat, rtx_ins
*** 11691,11697 ****
        rtx src = SET_SRC (pat);
        if (CONSTANT_P (src)
  	  && !CONST_INT_P (src)
! 	  && crtl->uses_const_pool)
  	{
  	  machine_mode mode = GET_MODE (src);
  	  if (mode == VOIDmode)
--- 11691,11698 ----
        rtx src = SET_SRC (pat);
        if (CONSTANT_P (src)
  	  && !CONST_INT_P (src)
! 	  && crtl->uses_const_pool
! 	  && SET_DEST (pat) != pc_rtx)
  	{
  	  machine_mode mode = GET_MODE (src);
  	  if (mode == VOIDmode)
diff -Nrcpad gcc-14.3.0/gcc/common/config/avr/avr-common.cc gcc-14.3.0-RC-20260619/gcc/common/config/avr/avr-common.cc
*** gcc-14.3.0/gcc/common/config/avr/avr-common.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/common/config/avr/avr-common.cc	Fri Jun 19 06:51:02 2026
***************
*** 29,34 ****
--- 29,41 ----
  /* Implement TARGET_OPTION_OPTIMIZATION_TABLE.  */
  static const struct default_options avr_option_optimization_table[] =
    {
+     // The lookup table from tree-swicth-conversion.cc lives in .rodata
+     // and hence consumes RAM on almost all devices.  As PR49857 has
+     // been rejected several times for non-technical reasons, just
+     // disable -ftree-switch-conversion by default.  But even with PR49857
+     // in place there remains PR81540, which cannot be filtered out since
+     // the pass has no way to hook in.
+     { OPT_LEVELS_ALL, OPT_ftree_switch_conversion, NULL, 0 },
      // The only effect of -fcaller-saves might be that it triggers
      // a frame without need when it tries to be smart around calls.
      { OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 },
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-builtins.cc gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-builtins.cc
*** gcc-14.3.0/gcc/config/aarch64/aarch64-builtins.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-builtins.cc	Fri Jun 19 06:51:02 2026
*************** aarch64_init_ls64_builtins_types (void)
*** 1903,1908 ****
--- 1903,1909 ----
    const char *tuple_type_name = "__arm_data512_t";
    tree node_type = get_typenode_from_name (UINT64_TYPE);
    tree array_type = build_array_type_nelts (node_type, 8);
+   array_type = build_distinct_type_copy (array_type);
    SET_TYPE_MODE (array_type, V8DImode);
  
    gcc_assert (TYPE_MODE_RAW (array_type) == TYPE_MODE (array_type));
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-cores.def gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-cores.def
*** gcc-14.3.0/gcc/config/aarch64/aarch64-cores.def	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-cores.def	Fri Jun 19 06:51:02 2026
*************** AARCH64_CORE("a64fx", a64fx, a64fx, V8_2
*** 135,140 ****
--- 135,141 ----
  AARCH64_CORE("fujitsu-monaka", fujitsu_monaka, cortexa57, V9_3A, (F16, LS64, RNG, CRYPTO, SVE2_AES, SVE2_BITPERM, SVE2_SHA3, SVE2_SM4), fujitsu_monaka, 0x46, 0x003, -1)
  
  /* HiSilicon ('H') cores. */
+ AARCH64_CORE("hip12", hip12, cortexa57, V8_7A, (F16, PROFILE, RNG, SVE2_BITPERM, SVE2_AES, SVE2_SM4, SVE2_SHA3, LS64, RCPC3), hip12, 0x48, 0xd06, -1)
  AARCH64_CORE("tsv110",  tsv110, tsv110, V8_2A,  (CRYPTO, F16), tsv110,   0x48, 0xd01, -1)
  
  /* ARMv8.3-A Architecture Processors.  */
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-cost-tables.h gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-cost-tables.h
*** gcc-14.3.0/gcc/config/aarch64/aarch64-cost-tables.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-cost-tables.h	Fri Jun 19 06:51:02 2026
*************** const struct cpu_cost_table tsv110_extra
*** 561,566 ****
--- 561,673 ----
    }
  };
  
+ const struct cpu_cost_table hip12_extra_costs =
+ {
+   /* ALU */
+   {
+     0,                 /* arith.  */
+     0,                 /* logical.  */
+     0,                 /* shift.  */
+     0,                 /* shift_reg.  */
+     COSTS_N_INSNS (1), /* arith_shift.  */
+     COSTS_N_INSNS (1), /* arith_shift_reg.  */
+     0,                 /* log_shift.  */
+     0,                 /* log_shift_reg.  */
+     0,                 /* extend.  */
+     COSTS_N_INSNS (1), /* extend_arith.  */
+     0,                 /* bfi.  */
+     0,                 /* bfx.  */
+     0,                 /* clz.  */
+     0,                 /* rev.  */
+     0,                 /* non_exec.  */
+     true               /* non_exec_costs_exec.  */
+   },
+   {
+     /* MULT SImode */
+     {
+       COSTS_N_INSNS (1),       /* simple.  */
+       COSTS_N_INSNS (1),       /* flag_setting.  */
+       COSTS_N_INSNS (1),       /* extend.  */
+       COSTS_N_INSNS (2),       /* add.  */
+       COSTS_N_INSNS (2),       /* extend_add.  */
+       COSTS_N_INSNS (5)        /* idiv.  */
+     },
+     /* MULT DImode */
+     {
+       COSTS_N_INSNS (2),       /* simple.  */
+       0,                       /* flag_setting (N/A).  */
+       COSTS_N_INSNS (2),       /* extend.  */
+       COSTS_N_INSNS (3),       /* add.  */
+       COSTS_N_INSNS (3),       /* extend_add.  */
+       COSTS_N_INSNS (7)        /* idiv.  */
+     }
+   },
+   /* LD/ST */
+   {
+     COSTS_N_INSNS (3),         /* load.  */
+     COSTS_N_INSNS (3),         /* load_sign_extend.  */
+     COSTS_N_INSNS (3),         /* ldrd.  */
+     0,                         /* ldm_1st.  */
+     0,                         /* ldm_regs_per_insn_1st.  */
+     0,                         /* ldm_regs_per_insn_subsequent.  */
+     COSTS_N_INSNS (5),         /* loadf.  */
+     COSTS_N_INSNS (5),         /* loadd.  */
+     COSTS_N_INSNS (4),         /* load_unaligned.  */
+     0,                         /* store.  */
+     0,                         /* strd.  */
+     0,                         /* stm_1st.  */
+     0,                         /* stm_regs_per_insn_1st.  */
+     0,                         /* stm_regs_per_insn_subsequent.  */
+     0,                         /* storef.  */
+     0,                         /* stored.  */
+     COSTS_N_INSNS (1),         /* store_unaligned.  */
+     COSTS_N_INSNS (5),         /* loadv.  */
+     COSTS_N_INSNS (1)          /* storev.  */
+   },
+   {
+     /* FP SFmode */
+     {
+       COSTS_N_INSNS (5),       /* div.  */
+       COSTS_N_INSNS (2),       /* mult.  */
+       COSTS_N_INSNS (4),       /* mult_addsub.  */
+       COSTS_N_INSNS (3),       /* fma.  */
+       COSTS_N_INSNS (1),       /* addsub.  */
+       COSTS_N_INSNS (1),       /* fpconst.  */
+       0,                       /* neg.  */
+       COSTS_N_INSNS (1),       /* compare.  */
+       COSTS_N_INSNS (2),       /* widen.  */
+       COSTS_N_INSNS (2),       /* narrow.  */
+       COSTS_N_INSNS (2),       /* toint.  */
+       COSTS_N_INSNS (3),       /* fromint.  */
+       COSTS_N_INSNS (2)        /* roundint.  */
+     },
+     /* FP DFmode */
+     {
+       COSTS_N_INSNS (7),       /* div.  */
+       COSTS_N_INSNS (2),       /* mult.  */
+       COSTS_N_INSNS (4),       /* mult_addsub.  */
+       COSTS_N_INSNS (3),       /* fma.  */
+       COSTS_N_INSNS (1),       /* addsub.  */
+       COSTS_N_INSNS (1),       /* fpconst.  */
+       0,                       /* neg.  */
+       COSTS_N_INSNS (1),       /* compare.  */
+       COSTS_N_INSNS (2),       /* widen.  */
+       COSTS_N_INSNS (2),       /* narrow.  */
+       COSTS_N_INSNS (2),       /* toint.  */
+       COSTS_N_INSNS (3),       /* fromint.  */
+       COSTS_N_INSNS (2)        /* roundint.  */
+     }
+   },
+   /* Vector */
+   {
+     COSTS_N_INSNS (1),  /* alu.  */
+     COSTS_N_INSNS (2),  /* mult.  */
+     COSTS_N_INSNS (1),  /* movi.  */
+     COSTS_N_INSNS (1),  /* dup.  */
+     COSTS_N_INSNS (1)   /* extract.  */
+   }
+ };
+ 
  const struct cpu_cost_table a64fx_extra_costs =
  {
    /* ALU */
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-early-ra.cc gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-early-ra.cc
*** gcc-14.3.0/gcc/config/aarch64/aarch64-early-ra.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-early-ra.cc	Fri Jun 19 06:51:02 2026
*************** early_ra::form_chains ()
*** 2624,2646 ****
    if (dump_file && (dump_flags & TDF_DETAILS))
      fprintf (dump_file, "\nChaining allocnos:\n");
  
!   // Perform (modified) interval graph coloring.  First sort by
!   // increasing start point.
!   m_sorted_allocnos.reserve (m_allocnos.length ());
!   m_sorted_allocnos.splice (m_allocnos);
!   m_sorted_allocnos.qsort (cmp_increasing<&allocno_info::start_point>);
! 
!   // During this phase, color representatives are only correct for
!   // unprocessed allocno groups (where the color representative is
!   // the group itself) and for groups that contain a current chain head.
!   unsigned int ti = 0;
!   auto_vec<chain_candidate_info> candidates;
!   for (unsigned int hi = 0; hi < m_sorted_allocnos.length (); ++hi)
      {
-       auto *allocno1 = m_sorted_allocnos[hi];
-       if (allocno1->chain_next != INVALID_ALLOCNO)
- 	continue;
- 
        // Record conflicts with direct uses for FPR hard registers.
        auto *group1 = allocno1->group ();
        for (unsigned int fpr = allocno1->offset; fpr < 32; ++fpr)
--- 2624,2633 ----
    if (dump_file && (dump_flags & TDF_DETAILS))
      fprintf (dump_file, "\nChaining allocnos:\n");
  
!   // Record conflicts of hard register and ABI conflicts before the
!   // forming of chains so chains have the updated candidates
!   for (auto *allocno1 : m_allocnos)
      {
        // Record conflicts with direct uses for FPR hard registers.
        auto *group1 = allocno1->group ();
        for (unsigned int fpr = allocno1->offset; fpr < 32; ++fpr)
*************** early_ra::form_chains ()
*** 2656,2661 ****
--- 2643,2671 ----
  	    auto fprs = partial_fpr_clobbers (abi_id, group1->fpr_size);
  	    group1->fpr_candidates &= ~fprs >> allocno1->offset;
  	  }
+       if (allocno1->is_shared ())
+ 	{
+ 	  auto *allocno2 = m_allocnos[allocno1->related_allocno];
+ 	  merge_fpr_info (allocno2->group (), group1, allocno2->offset);
+ 	}
+     }
+ 
+   // Perform (modified) interval graph coloring.  First sort by
+   // increasing start point.
+   m_sorted_allocnos.reserve (m_allocnos.length ());
+   m_sorted_allocnos.splice (m_allocnos);
+   m_sorted_allocnos.qsort (cmp_increasing<&allocno_info::start_point>);
+ 
+   // During this phase, color representatives are only correct for
+   // unprocessed allocno groups (where the color representative is
+   // the group itself) and for groups that contain a current chain head.
+   unsigned int ti = 0;
+   auto_vec<chain_candidate_info> candidates;
+   for (unsigned int hi = 0; hi < m_sorted_allocnos.length (); ++hi)
+     {
+       auto *allocno1 = m_sorted_allocnos[hi];
+       if (allocno1->chain_next != INVALID_ALLOCNO)
+ 	continue;
  
        if (allocno1->is_shared ())
  	{
*************** early_ra::form_chains ()
*** 2663,2670 ****
  	    fprintf (dump_file, "  Allocno %d shares the same hard register"
  		     " as allocno %d\n", allocno1->id,
  		     allocno1->related_allocno);
- 	  auto *allocno2 = m_allocnos[allocno1->related_allocno];
- 	  merge_fpr_info (allocno2->group (), group1, allocno2->offset);
  	  m_shared_allocnos.safe_push (allocno1);
  	  continue;
  	}
--- 2673,2678 ----
*************** early_ra::allocate_colors ()
*** 2911,2917 ****
        if (dump_file && (dump_flags & TDF_DETAILS))
  	fprintf (dump_file, "  Allocating [v%d:v%d] to color %d\n",
  		 best, best + color->group->size - 1, color->id);
!       m_allocated_fprs |= ((1U << color->group->size) - 1) << best;
      }
  }
  
--- 2919,2931 ----
        if (dump_file && (dump_flags & TDF_DETAILS))
  	fprintf (dump_file, "  Allocating [v%d:v%d] to color %d\n",
  		 best, best + color->group->size - 1, color->id);
!       // Mark the COLOR's FPRs as allocated.  A full-width color can have
!       // size == 32, so shift a wide enough value: "1U << 32" is undefined,
!       // as is "1UL << 32" on hosts with 32-bit long.  unsigned long long is
!       // at least 64 bits everywhere.  best + size <= 32 (from the candidate
!       // search) keeps the result within the 32-bit mask.
!       gcc_assert (best + color->group->size <= 32);
!       m_allocated_fprs |= ((1ULL << color->group->size) - 1) << best;
      }
  }
  
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-protos.h gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-protos.h
*** gcc-14.3.0/gcc/config/aarch64/aarch64-protos.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-protos.h	Fri Jun 19 06:51:02 2026
*************** bool aarch64_uimm12_shift (unsigned HOST
*** 860,865 ****
--- 860,866 ----
  int aarch64_movk_shift (const wide_int_ref &, const wide_int_ref &);
  bool aarch64_is_mov_xn_imm (unsigned HOST_WIDE_INT);
  bool aarch64_use_return_insn_p (void);
+ bool aarch64_use_simple_return_insn_p (void);
  const char *aarch64_output_casesi (rtx *);
  const char *aarch64_output_load_tp (rtx);
  const char *aarch64_output_sme_zero_za (rtx);
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-simd.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-simd.md
*** gcc-14.3.0/gcc/config/aarch64/aarch64-simd.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-simd.md	Fri Jun 19 06:51:02 2026
***************
*** 6514,6520 ****
  	(SAT_TRUNC:<VNARROWQ>
  	  (<TRUNC_SHIFT>:SD_HSDI
  	    (match_operand:SD_HSDI 1 "register_operand" "w")
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))))]
    "TARGET_SIMD"
    "<shrn_op>shrn\t%<vn2>0<Vmntype>, %<v>1<Vmtype>, %2"
    [(set_attr "type" "neon_shift_imm_narrow_q")]
--- 6514,6520 ----
  	(SAT_TRUNC:<VNARROWQ>
  	  (<TRUNC_SHIFT>:SD_HSDI
  	    (match_operand:SD_HSDI 1 "register_operand" "w")
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))))]
    "TARGET_SIMD"
    "<shrn_op>shrn\t%<vn2>0<Vmntype>, %<v>1<Vmtype>, %2"
    [(set_attr "type" "neon_shift_imm_narrow_q")]
***************
*** 6536,6542 ****
  	(ALL_TRUNC:<VNARROWQ>
  	  (<TRUNC_SHIFT>:VQN
  	    (match_operand:VQN 1 "register_operand")
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))))]
    "TARGET_SIMD"
    {
      operands[2] = aarch64_simd_gen_const_vector_dup (<MODE>mode,
--- 6536,6542 ----
  	(ALL_TRUNC:<VNARROWQ>
  	  (<TRUNC_SHIFT>:VQN
  	    (match_operand:VQN 1 "register_operand")
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))))]
    "TARGET_SIMD"
    {
      operands[2] = aarch64_simd_gen_const_vector_dup (<MODE>mode,
***************
*** 6567,6573 ****
  	      (<TRUNCEXTEND>:<DWI>
  	        (match_operand:SD_HSDI 1 "register_operand" "w"))
  	      (match_operand:<DWI> 3 "aarch64_int_rnd_operand"))
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))))]
    "TARGET_SIMD
     && aarch64_const_vec_rnd_cst_p (operands[3], operands[2])"
    "<shrn_op>rshrn\t%<vn2>0<Vmntype>, %<v>1<Vmtype>, %2"
--- 6567,6573 ----
  	      (<TRUNCEXTEND>:<DWI>
  	        (match_operand:SD_HSDI 1 "register_operand" "w"))
  	      (match_operand:<DWI> 3 "aarch64_int_rnd_operand"))
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))))]
    "TARGET_SIMD
     && aarch64_const_vec_rnd_cst_p (operands[3], operands[2])"
    "<shrn_op>rshrn\t%<vn2>0<Vmntype>, %<v>1<Vmtype>, %2"
***************
*** 6582,6588 ****
  	      (<TRUNCEXTEND>:<V2XWIDE>
  	        (match_operand:SD_HSDI 1 "register_operand"))
  	      (match_dup 3))
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))))]
    "TARGET_SIMD"
    {
      /* Use this expander to create the rounding constant vector, which is
--- 6582,6588 ----
  	      (<TRUNCEXTEND>:<V2XWIDE>
  	        (match_operand:SD_HSDI 1 "register_operand"))
  	      (match_dup 3))
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))))]
    "TARGET_SIMD"
    {
      /* Use this expander to create the rounding constant vector, which is
***************
*** 6602,6608 ****
  	      (<TRUNCEXTEND>:<V2XWIDE>
  	        (match_operand:VQN 1 "register_operand"))
  	      (match_dup 3))
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))))]
    "TARGET_SIMD"
    {
      if (<CODE> == TRUNCATE
--- 6602,6608 ----
  	      (<TRUNCEXTEND>:<V2XWIDE>
  	        (match_operand:VQN 1 "register_operand"))
  	      (match_dup 3))
! 	    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))))]
    "TARGET_SIMD"
    {
      if (<CODE> == TRUNCATE
***************
*** 6644,6650 ****
  	  (smax:SD_HSDI
  	    (ashiftrt:SD_HSDI
  	      (match_operand:SD_HSDI 1 "register_operand" "w")
! 	      (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))
  	    (const_int 0))
  	  (const_int <half_mask>)))]
    "TARGET_SIMD"
--- 6644,6650 ----
  	  (smax:SD_HSDI
  	    (ashiftrt:SD_HSDI
  	      (match_operand:SD_HSDI 1 "register_operand" "w")
! 	      (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))
  	    (const_int 0))
  	  (const_int <half_mask>)))]
    "TARGET_SIMD"
***************
*** 6655,6661 ****
  (define_expand "aarch64_sqshrun_n<mode>"
    [(match_operand:<VNARROWQ> 0 "register_operand")
     (match_operand:SD_HSDI 1 "register_operand")
!    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>")]
    "TARGET_SIMD"
    {
      rtx dst = gen_reg_rtx (<MODE>mode);
--- 6655,6661 ----
  (define_expand "aarch64_sqshrun_n<mode>"
    [(match_operand:<VNARROWQ> 0 "register_operand")
     (match_operand:SD_HSDI 1 "register_operand")
!    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>")]
    "TARGET_SIMD"
    {
      rtx dst = gen_reg_rtx (<MODE>mode);
***************
*** 6673,6679 ****
  	    (smax:VQN
  	      (ashiftrt:VQN
  		(match_operand:VQN 1 "register_operand")
! 		(match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))
  	      (match_dup 3))
  	    (match_dup 4))))]
    "TARGET_SIMD"
--- 6673,6679 ----
  	    (smax:VQN
  	      (ashiftrt:VQN
  		(match_operand:VQN 1 "register_operand")
! 		(match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))
  	      (match_dup 3))
  	    (match_dup 4))))]
    "TARGET_SIMD"
***************
*** 6715,6721 ****
  		(sign_extend:<DWI>
  		  (match_operand:SD_HSDI 1 "register_operand" "w"))
  		(match_operand:<DWI> 3 "aarch64_int_rnd_operand"))
! 	      (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))
  	    (const_int 0))
  	  (const_int <half_mask>)))]
    "TARGET_SIMD
--- 6715,6721 ----
  		(sign_extend:<DWI>
  		  (match_operand:SD_HSDI 1 "register_operand" "w"))
  		(match_operand:<DWI> 3 "aarch64_int_rnd_operand"))
! 	      (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))
  	    (const_int 0))
  	  (const_int <half_mask>)))]
    "TARGET_SIMD
***************
*** 6727,6733 ****
  (define_expand "aarch64_sqrshrun_n<mode>"
    [(match_operand:<VNARROWQ> 0 "register_operand")
     (match_operand:SD_HSDI 1 "register_operand")
!    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>")]
    "TARGET_SIMD"
    {
      int prec = GET_MODE_UNIT_PRECISION (<DWI>mode);
--- 6727,6733 ----
  (define_expand "aarch64_sqrshrun_n<mode>"
    [(match_operand:<VNARROWQ> 0 "register_operand")
     (match_operand:SD_HSDI 1 "register_operand")
!    (match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>")]
    "TARGET_SIMD"
    {
      int prec = GET_MODE_UNIT_PRECISION (<DWI>mode);
***************
*** 6750,6756 ****
  		  (sign_extend:<V2XWIDE>
  		    (match_operand:VQN 1 "register_operand"))
  		  (match_dup 3))
! 		(match_operand:SI 2 "aarch64_simd_shift_imm_offset_<ve_mode>"))
  	      (match_dup 4))
  	    (match_dup 5))))]
    "TARGET_SIMD"
--- 6750,6756 ----
  		  (sign_extend:<V2XWIDE>
  		    (match_operand:VQN 1 "register_operand"))
  		  (match_dup 3))
! 		(match_operand:SI 2 "aarch64_simd_shift_imm_offset_<vn_mode>"))
  	      (match_dup 4))
  	    (match_dup 5))))]
    "TARGET_SIMD"
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sme.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sme.md
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sme.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sme.md	Fri Jun 19 06:51:02 2026
***************
*** 61,66 ****
--- 61,70 ----
  ;; (b) they are sometimes used conditionally, particularly in streaming-
  ;; compatible code.
  ;;
+ ;; To prevent the latter from upsetting the assembler, we emit the literal
+ ;; encodings of "SMSTART SM" and "SMSTOP SM" when compiling without
+ ;; TARGET_SME.
+ ;;
  ;; =========================================================================
  
  ;; -------------------------------------------------------------------------
***************
*** 160,166 ****
     (clobber (reg:VNx16BI P14_REGNUM))
     (clobber (reg:VNx16BI P15_REGNUM))]
    ""
!   "smstart\tsm"
  )
  
  ;; Turn off streaming mode.  This clobbers all SVE state.
--- 164,172 ----
     (clobber (reg:VNx16BI P14_REGNUM))
     (clobber (reg:VNx16BI P15_REGNUM))]
    ""
!   {
!     return TARGET_SME ? "smstart\tsm" : ".inst 0xd503437f // smstart sm";
!   }
  )
  
  ;; Turn off streaming mode.  This clobbers all SVE state.
***************
*** 195,201 ****
     (clobber (reg:VNx16BI P14_REGNUM))
     (clobber (reg:VNx16BI P15_REGNUM))]
    ""
!   "smstop\tsm"
  )
  
  ;; -------------------------------------------------------------------------
--- 201,209 ----
     (clobber (reg:VNx16BI P14_REGNUM))
     (clobber (reg:VNx16BI P15_REGNUM))]
    ""
!   {
!     return TARGET_SME ? "smstop\tsm" : ".inst 0xd503427f // smstop sm";
!   }
  )
  
  ;; -------------------------------------------------------------------------
***************
*** 373,378 ****
--- 381,388 ----
  		    (reg:DI SME_STATE_REGNUM)
  		    (reg:DI TPIDR2_SETUP_REGNUM)
  		    (reg:DI ZA_SAVED_REGNUM)] UNSPEC_RESTORE_ZA))
+    (set (reg:DI SME_STATE_REGNUM)
+ 	(unspec:DI [(reg:DI SME_STATE_REGNUM)] UNSPEC_TPIDR2_RESTORE))
     (clobber (reg:DI R0_REGNUM))
     (clobber (reg:DI R14_REGNUM))
     (clobber (reg:DI R15_REGNUM))
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve-builtins-base.cc
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Fri Jun 19 06:51:02 2026
*************** public:
*** 2396,2402 ****
    rtx
    expand (function_expander &e) const override
    {
!     return e.use_exact_insn (code_for_aarch64_sve_rev (e.vector_mode (0)));
    }
  };
  
--- 2396,2405 ----
    rtx
    expand (function_expander &e) const override
    {
!     auto mode = e.vector_mode (0);
!     return e.use_exact_insn (e.type_suffix (0).bool_p
! 			     ? code_for_aarch64_sve_rev_acle (mode)
! 			     : code_for_aarch64_sve_rev (mode));
    }
  };
  
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sve-builtins-functions.h gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve-builtins-functions.h
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Fri Jun 19 06:51:02 2026
*************** public:
*** 615,621 ****
    rtx
    expand (function_expander &e) const override
    {
!     insn_code icode = code_for_aarch64_sve (m_unspec, e.vector_mode (0));
      return e.use_exact_insn (icode);
    }
  
--- 615,624 ----
    rtx
    expand (function_expander &e) const override
    {
!     auto mode = e.vector_mode (0);
!     insn_code icode = (e.type_suffix (0).bool_p
! 		       ? code_for_aarch64_sve_acle (m_unspec, mode)
! 		       : code_for_aarch64_sve (m_unspec, mode));
      return e.use_exact_insn (icode);
    }
  
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sve-builtins.cc gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve-builtins.cc
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sve-builtins.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve-builtins.cc	Fri Jun 19 06:51:02 2026
*************** public:
*** 92,98 ****
  };
  
  /* Hash traits for registered_function.  */
! struct registered_function_hasher : nofree_ptr_hash <registered_function>
  {
    typedef function_instance compare_type;
  
--- 92,98 ----
  };
  
  /* Hash traits for registered_function.  */
! struct registered_function_hasher : ggc_ptr_hash <registered_function>
  {
    typedef function_instance compare_type;
  
*************** tree acle_svprfop;
*** 934,945 ****
  static GTY(()) vec<registered_function *, va_gc> *registered_functions;
  
  /* Stores the starting function index for each pragma handler.  */
! static unsigned int initial_indexes[NUM_PRAGMA_HANDLERS];
  
  /* All registered function decls, hashed on the function_instance
     that they implement.  This is used for looking up implementations of
     overloaded functions.  */
! static hash_table<registered_function_hasher> *function_table;
  
  /* Index 0 maps all overloaded function names that we've registered so far to
     their associated function_instances.  Index 1 does the same for functions
--- 934,945 ----
  static GTY(()) vec<registered_function *, va_gc> *registered_functions;
  
  /* Stores the starting function index for each pragma handler.  */
! static  GTY(()) unsigned int initial_indexes[NUM_PRAGMA_HANDLERS];
  
  /* All registered function decls, hashed on the function_instance
     that they implement.  This is used for looking up implementations of
     overloaded functions.  */
! static GTY(()) hash_table<registered_function_hasher> *function_table;
  
  /* Index 0 maps all overloaded function names that we've registered so far to
     their associated function_instances.  Index 1 does the same for functions
*************** function_expander::use_cond_insn (insn_c
*** 4103,4109 ****
    add_input_operand (icode, pred);
    for (unsigned int i = 0; i < nops; ++i)
      add_input_operand (icode, args[opno + i]);
!   add_input_operand (icode, fallback_arg);
    return generate_insn (icode);
  }
  
--- 4103,4113 ----
    add_input_operand (icode, pred);
    for (unsigned int i = 0; i < nops; ++i)
      add_input_operand (icode, args[opno + i]);
!   if (fallback_arg == CONST0_RTX (mode)
!       && insn_operand_matches (icode, m_ops.length (), fallback_arg))
!     add_fixed_operand (fallback_arg);
!   else
!     add_input_operand (icode, fallback_arg);
    return generate_insn (icode);
  }
  
*************** handle_arm_sve_h (bool function_nulls_p)
*** 4581,4587 ****
    register_svprfop ();
  
    /* Define the functions.  */
!   function_table = new hash_table<registered_function_hasher> (1023);
    function_builder builder (arm_sve_handle, function_nulls_p);
    for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
      builder.register_function_group (function_groups[i]);
--- 4585,4591 ----
    register_svprfop ();
  
    /* Define the functions.  */
!   function_table = hash_table<registered_function_hasher>::create_ggc (1023);
    function_builder builder (arm_sve_handle, function_nulls_p);
    for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
      builder.register_function_group (function_groups[i]);
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sve.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve.md
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sve.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve.md	Fri Jun 19 06:51:02 2026
***************
*** 1458,1475 ****
  	  UNSPEC_LD1_GATHER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
    {@ [cons: =0, 1, 2, 3, 4, 5  ]
!      [&w, Z,   w, Ui1, Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%2.s]
!      [?w, Z,   0, Ui1, Ui1, Upl] ^
!      [&w, vgw, w, Ui1, Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%2.s, #%1]
!      [?w, vgw, 0, Ui1, Ui1, Upl] ^
!      [&w, rk,  w, Z,   Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, sxtw]
!      [?w, rk,  0, Z,   Ui1, Upl] ^
!      [&w, rk,  w, Ui1, Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, uxtw]
!      [?w, rk,  0, Ui1, Ui1, Upl] ^
!      [&w, rk,  w, Z,   i,   Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, sxtw %p4]
!      [?w, rk,  0, Z,   i,   Upl] ^
!      [&w, rk,  w, Ui1, i,   Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, uxtw %p4]
!      [?w, rk,  0, Ui1, i,   Upl] ^
    }
  )
  
--- 1458,1475 ----
  	  UNSPEC_LD1_GATHER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
    {@ [cons: =0, 1, 2, 3, 4, 5  ]
!      [&w, Z,          w, Ui1, Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%2.s]
!      [?w, Z,          0, Ui1, Ui1, Upl] ^
!      [&w, vg<Vesize>, w, Ui1, Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%2.s, #%1]
!      [?w, vg<Vesize>, 0, Ui1, Ui1, Upl] ^
!      [&w, rk,         w, Z,   Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, sxtw]
!      [?w, rk,         0, Z,   Ui1, Upl] ^
!      [&w, rk,         w, Ui1, Ui1, Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, uxtw]
!      [?w, rk,         0, Ui1, Ui1, Upl] ^
!      [&w, rk,         w, Z,   i,   Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, sxtw %p4]
!      [?w, rk,         0, Z,   i,   Upl] ^
!      [&w, rk,         w, Ui1, i,   Upl] ld1<Vesize>\t%0.s, %5/z, [%1, %2.s, uxtw %p4]
!      [?w, rk,         0, Ui1, i,   Upl] ^
    }
  )
  
***************
*** 1487,1500 ****
  	  UNSPEC_LD1_GATHER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
    {@ [cons: =0, 1, 2, 3, 4, 5]
!      [&w, Z,   w, i, Ui1, Upl] ld1<Vesize>\t%0.d, %5/z, [%2.d]
!      [?w, Z,   0, i, Ui1, Upl] ^
!      [&w, vgd, w, i, Ui1, Upl] ld1<Vesize>\t%0.d, %5/z, [%2.d, #%1]
!      [?w, vgd, 0, i, Ui1, Upl] ^
!      [&w, rk,  w, i, Ui1, Upl] ld1<Vesize>\t%0.d, %5/z, [%1, %2.d]
!      [?w, rk,  0, i, Ui1, Upl] ^
!      [&w, rk,  w, i, i,   Upl] ld1<Vesize>\t%0.d, %5/z, [%1, %2.d, lsl %p4]
!      [?w, rk,  0, i, i,   Upl] ^
    }
  )
  
--- 1487,1500 ----
  	  UNSPEC_LD1_GATHER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
    {@ [cons: =0, 1, 2, 3, 4, 5]
!      [&w, Z,          w, i, Ui1, Upl] ld1<Vesize>\t%0.d, %5/z, [%2.d]
!      [?w, Z,          0, i, Ui1, Upl] ^
!      [&w, vg<Vesize>, w, i, Ui1, Upl] ld1<Vesize>\t%0.d, %5/z, [%2.d, #%1]
!      [?w, vg<Vesize>, 0, i, Ui1, Upl] ^
!      [&w, rk,         w, i, Ui1, Upl] ld1<Vesize>\t%0.d, %5/z, [%1, %2.d]
!      [?w, rk,         0, i, Ui1, Upl] ^
!      [&w, rk,         w, i, i,   Upl] ld1<Vesize>\t%0.d, %5/z, [%1, %2.d, lsl %p4]
!      [?w, rk,         0, i, i,   Upl] ^
    }
  )
  
***************
*** 2378,2390 ****
  	   (match_operand:SVE_4 4 "register_operand")]
  	  UNSPEC_ST1_SCATTER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
!   {@ [ cons: 0 , 1 , 2   , 3   , 4 , 5    ]
!      [ Z       , w , Ui1 , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%1.s]
!      [ vgw     , w , Ui1 , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%1.s, #%0]
!      [ rk      , w , Z   , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, sxtw]
!      [ rk      , w , Ui1 , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, uxtw]
!      [ rk      , w , Z   , i   , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, sxtw %p3]
!      [ rk      , w , Ui1 , i   , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, uxtw %p3]
    }
  )
  
--- 2378,2390 ----
  	   (match_operand:SVE_4 4 "register_operand")]
  	  UNSPEC_ST1_SCATTER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
!   {@ [ cons: 0    , 1 , 2   , 3   , 4 , 5    ]
!      [ Z          , w , Ui1 , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%1.s]
!      [ vg<Vesize> , w , Ui1 , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%1.s, #%0]
!      [ rk         , w , Z   , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, sxtw]
!      [ rk         , w , Ui1 , Ui1 , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, uxtw]
!      [ rk         , w , Z   , i   , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, sxtw %p3]
!      [ rk         , w , Ui1 , i   , w , Upl  ] st1<Vesize>\t%4.s, %5, [%0, %1.s, uxtw %p3]
    }
  )
  
***************
*** 2401,2411 ****
  	   (match_operand:SVE_2 4 "register_operand")]
  	  UNSPEC_ST1_SCATTER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
!   {@ [ cons: 0 , 1 , 3   , 4 , 5    ]
!      [ Z       , w , Ui1 , w , Upl  ] st1<Vesize>\t%4.d, %5, [%1.d]
!      [ vgd     , w , Ui1 , w , Upl  ] st1<Vesize>\t%4.d, %5, [%1.d, #%0]
!      [ rk      , w , Ui1 , w , Upl  ] st1<Vesize>\t%4.d, %5, [%0, %1.d]
!      [ rk      , w , i   , w , Upl  ] st1<Vesize>\t%4.d, %5, [%0, %1.d, lsl %p3]
    }
  )
  
--- 2401,2411 ----
  	   (match_operand:SVE_2 4 "register_operand")]
  	  UNSPEC_ST1_SCATTER))]
    "TARGET_SVE && TARGET_NON_STREAMING"
!   {@ [ cons: 0    , 1 , 3   , 4 , 5    ]
!      [ Z          , w , Ui1 , w , Upl  ] st1<Vesize>\t%4.d, %5, [%1.d]
!      [ vg<Vesize> , w , Ui1 , w , Upl  ] st1<Vesize>\t%4.d, %5, [%1.d, #%0]
!      [ rk         , w , Ui1 , w , Upl  ] st1<Vesize>\t%4.d, %5, [%0, %1.d]
!      [ rk         , w , i   , w , Upl  ] st1<Vesize>\t%4.d, %5, [%0, %1.d, lsl %p3]
    }
  )
  
***************
*** 6422,6431 ****
  ;; by providing this, but we need to use UNSPECs since rtx logical ops
  ;; aren't defined for floating-point modes.
  (define_insn "*<optab><mode>3"
!   [(set (match_operand:SVE_FULL_F 0 "register_operand" "=w")
! 	(unspec:SVE_FULL_F
! 	  [(match_operand:SVE_FULL_F 1 "register_operand" "w")
! 	   (match_operand:SVE_FULL_F 2 "register_operand" "w")]
  	  LOGICALF))]
    "TARGET_SVE"
    "<logicalf_op>\t%0.d, %1.d, %2.d"
--- 6422,6431 ----
  ;; by providing this, but we need to use UNSPECs since rtx logical ops
  ;; aren't defined for floating-point modes.
  (define_insn "*<optab><mode>3"
!   [(set (match_operand:SVE_F 0 "register_operand" "=w")
! 	(unspec:SVE_F
! 	  [(match_operand:SVE_F 1 "register_operand" "w")
! 	   (match_operand:SVE_F 2 "register_operand" "w")]
  	  LOGICALF))]
    "TARGET_SVE"
    "<logicalf_op>\t%0.d, %1.d, %2.d"
***************
*** 9123,9129 ****
  	(unspec:PRED_ALL [(match_operand:PRED_ALL 1 "register_operand" "Upa")]
  			 UNSPEC_REV))]
    "TARGET_SVE"
!   "rev\t%0.<Vetype>, %1.<Vetype>")
  
  ;; -------------------------------------------------------------------------
  ;; ---- [PRED] Special-purpose binary permutes
--- 9123,9152 ----
  	(unspec:PRED_ALL [(match_operand:PRED_ALL 1 "register_operand" "Upa")]
  			 UNSPEC_REV))]
    "TARGET_SVE"
!   "rev\t%0.<Vetype>, %1.<Vetype>"
! )
! 
! (define_expand "@aarch64_sve_rev<mode>_acle"
!   [(set (match_operand:VNx16BI 0 "register_operand")
! 	(unspec:VNx16BI
! 	  [(match_operand:VNx16BI 1 "register_operand")
! 	   (match_dup:PRED_ALL 2)]
! 	  UNSPEC_REV_PRED))]
!   "TARGET_SVE"
!   {
!     operands[2] = CONST0_RTX (<MODE>mode);
!   }
! )
! 
! (define_insn "*aarch64_sve_rev<mode>_acle"
!   [(set (match_operand:VNx16BI 0 "register_operand" "=Upa")
! 	(unspec:VNx16BI
! 	  [(match_operand:VNx16BI 1 "register_operand" "Upa")
! 	   (match_operand:PRED_ALL 2 "aarch64_simd_imm_zero")]
! 	  UNSPEC_REV_PRED))]
!   "TARGET_SVE"
!   "rev\t%0.<Vetype>, %1.<Vetype>"
! )
  
  ;; -------------------------------------------------------------------------
  ;; ---- [PRED] Special-purpose binary permutes
***************
*** 9148,9165 ****
    "<perm_insn>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
  )
  
! ;; Special purpose permute used by the predicate generation instructions.
! ;; Unlike the normal permute patterns, these instructions operate on VNx16BI
! ;; regardless of the element size, so that all input and output bits are
! ;; well-defined.  Operand 3 then indicates the size of the permute.
! (define_insn "@aarch64_sve_trn1_conv<mode>"
    [(set (match_operand:VNx16BI 0 "register_operand" "=Upa")
  	(unspec:VNx16BI [(match_operand:VNx16BI 1 "register_operand" "Upa")
  			 (match_operand:VNx16BI 2 "register_operand" "Upa")
! 			 (match_operand:PRED_ALL 3 "aarch64_simd_imm_zero")]
! 			UNSPEC_TRN1_CONV))]
    "TARGET_SVE"
!   "trn1\t%0.<PRED_ALL:Vetype>, %1.<PRED_ALL:Vetype>, %2.<PRED_ALL:Vetype>"
  )
  
  ;; =========================================================================
--- 9171,9209 ----
    "<perm_insn>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
  )
  
! ;; Special-purpose permutes used by the ACLE intrinsics and predicate
! ;; generation instructions.  Unlike the normal permute patterns, these
! ;; instructions operate on VNx16BI regardless of the element size, so that
! ;; all input and output bits are well-defined.  Operand 3 then indicates
! ;; the size of the permute.
! ;;
! ;; To make generation easier, this pattern embeds the permute type as the
! ;; fourth operand to the unspec.  On the one hand, this avoids overloading
! ;; unspecs like UNSPEC_ZIP1 to represent two different operations.  On the
! ;; other hand, it avoids having a separate unspec for each variant, and
! ;; having to map from one kind of unspec to the other.
! (define_expand "@aarch64_sve_<perm_insn><mode>_acle"
!   [(set (match_operand:VNx16BI 0 "register_operand")
! 	(unspec:VNx16BI [(match_operand:VNx16BI 1 "register_operand")
! 			 (match_operand:VNx16BI 2 "register_operand")
! 			 (match_dup:PRED_ALL 3)
! 			 (const_int PERMUTE)]
! 			UNSPEC_PERMUTE_PRED))]
!   "TARGET_SVE"
!   {
!     operands[3] = CONST0_RTX (<MODE>mode);
!   }
! )
! 
! (define_insn "*aarch64_sve_<perm_insn><mode>_acle"
    [(set (match_operand:VNx16BI 0 "register_operand" "=Upa")
  	(unspec:VNx16BI [(match_operand:VNx16BI 1 "register_operand" "Upa")
  			 (match_operand:VNx16BI 2 "register_operand" "Upa")
! 			 (match_operand:PRED_ALL 3 "aarch64_simd_imm_zero")
! 			 (const_int PERMUTE)]
! 			UNSPEC_PERMUTE_PRED))]
    "TARGET_SVE"
!   "<perm_insn>\t%0.<PRED_ALL:Vetype>, %1.<PRED_ALL:Vetype>, %2.<PRED_ALL:Vetype>"
  )
  
  ;; =========================================================================
***************
*** 10989,11004 ****
  
  (define_insn "@aarch64_sve_set_neonq_<mode>"
    [(set (match_operand:SVE_FULL 0 "register_operand" "=w")
!       (unspec:SVE_FULL
! 	[(match_operand:SVE_FULL 1 "register_operand" "w")
! 	(match_operand:<V128> 2 "register_operand" "w")
! 	(match_operand:<VPRED> 3 "register_operand" "Upl")]
! 	UNSPEC_SET_NEONQ))]
    "TARGET_SVE
     && BYTES_BIG_ENDIAN"
!   {
!     operands[2] = lowpart_subreg (<MODE>mode, operands[2],
!                                   GET_MODE (operands[2]));
!     return "sel\t%0.<Vetype>, %3, %2.<Vetype>, %1.<Vetype>";
!   }
  )
--- 11033,11044 ----
  
  (define_insn "@aarch64_sve_set_neonq_<mode>"
    [(set (match_operand:SVE_FULL 0 "register_operand" "=w")
! 	(unspec:SVE_FULL
! 	  [(match_operand:SVE_FULL 1 "register_operand" "w")
! 	   (match_operand:<V128> 2 "register_operand" "w")
! 	   (match_operand:<VPRED> 3 "register_operand" "Upl")]
! 	  UNSPEC_SET_NEONQ))]
    "TARGET_SVE
     && BYTES_BIG_ENDIAN"
!   "sel\t%0.<Vetype>, %3, %Z2.<Vetype>, %1.<Vetype>"
  )
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sve2.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve2.md
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sve2.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sve2.md	Fri Jun 19 06:51:02 2026
***************
*** 3136,3144 ****
  	     UNSPEC_REVD_ONLY)]
  	  UNSPEC_PRED_X))]
    "TARGET_STREAMING_SME"
!   {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
!      [ w        , Upl , 0 ; *              ] revd\t%0.q, %1/m, %2.q
!      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;revd\t%0.q, %1/m, %2.q
    }
  )
  
--- 3136,3143 ----
  	     UNSPEC_REVD_ONLY)]
  	  UNSPEC_PRED_X))]
    "TARGET_STREAMING_SME"
!   {@ [ cons: =0 , 1   , 2 ]
!      [ w        , Upl , 0 ] revd\t%0.q, %1/m, %2.q
    }
  )
  
***************
*** 3152,3160 ****
  	   (match_operand:SVE_FULL 3 "register_operand")]
  	  UNSPEC_SEL))]
    "TARGET_STREAMING_SME"
!   {@ [ cons: =0 , 1   , 2 , 3  ; attrs: movprfx ]
!      [ w        , Upl , w , 0  ; *              ] revd\t%0.q, %1/m, %2.q
!      [ ?&w      , Upl , w , w  ; yes            ] movprfx\t%0, %3\;revd\t%0.q, %1/m, %2.q
    }
  )
  
--- 3151,3158 ----
  	   (match_operand:SVE_FULL 3 "register_operand")]
  	  UNSPEC_SEL))]
    "TARGET_STREAMING_SME"
!   {@ [ cons: =0 , 1   , 2 , 3 ]
!      [ w        , Upl , w , 0 ] revd\t%0.q, %1/m, %2.q
    }
  )
  
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-sys-regs.def gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sys-regs.def
*** gcc-14.3.0/gcc/config/aarch64/aarch64-sys-regs.def	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-sys-regs.def	Fri Jun 19 06:51:02 2026
***************
*** 740,746 ****
    SYSREG ("pmscr_el1",		CPENC (3,0,9,9,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
    SYSREG ("pmscr_el12",		CPENC (3,5,9,9,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
    SYSREG ("pmscr_el2",		CPENC (3,4,9,9,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
!   SYSREG ("pmsdsfr_el1",	CPENC (3,4,9,10,4),	F_ARCHEXT,		AARCH64_FEATURE (SPE_FDS))
    SYSREG ("pmselr_el0",		CPENC (3,3,9,12,5),	0,			AARCH64_NO_FEATURES)
    SYSREG ("pmsevfr_el1",	CPENC (3,0,9,9,5),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
    SYSREG ("pmsfcr_el1",		CPENC (3,0,9,9,4),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
--- 740,746 ----
    SYSREG ("pmscr_el1",		CPENC (3,0,9,9,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
    SYSREG ("pmscr_el12",		CPENC (3,5,9,9,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
    SYSREG ("pmscr_el2",		CPENC (3,4,9,9,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
!   SYSREG ("pmsdsfr_el1",	CPENC (3,0,9,10,4),	F_ARCHEXT,		AARCH64_FEATURE (SPE_FDS))
    SYSREG ("pmselr_el0",		CPENC (3,3,9,12,5),	0,			AARCH64_NO_FEATURES)
    SYSREG ("pmsevfr_el1",	CPENC (3,0,9,9,5),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
    SYSREG ("pmsfcr_el1",		CPENC (3,0,9,9,4),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64-tune.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-tune.md
*** gcc-14.3.0/gcc/config/aarch64/aarch64-tune.md	Fri May 23 11:03:15 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64-tune.md	Fri Jun 19 06:51:08 2026
***************
*** 1,5 ****
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa520,cortexa710,cortexa715,cortexa720,cortexa725,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,demeter,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- 1,5 ----
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,hip12,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa520,cortexa710,cortexa715,cortexa720,cortexa725,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,demeter,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64.cc gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64.cc
*** gcc-14.3.0/gcc/config/aarch64/aarch64.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64.cc	Fri Jun 19 06:51:02 2026
*************** static const struct aarch64_flag_desc aa
*** 395,400 ****
--- 395,401 ----
  #include "tuning_models/thunderxt88.h"
  #include "tuning_models/thunderx.h"
  #include "tuning_models/tsv110.h"
+ #include "tuning_models/hip12.h"
  #include "tuning_models/xgene1.h"
  #include "tuning_models/emag.h"
  #include "tuning_models/qdf24xx.h"
*************** aarch64_sve_move_pred_via_while (rtx tar
*** 5679,5685 ****
    target = aarch64_target_reg (target, mode);
    emit_insn (gen_while (UNSPEC_WHILELO, DImode, mode,
  			target, const0_rtx, limit));
!   return target;
  }
  
  static rtx
--- 5680,5686 ----
    target = aarch64_target_reg (target, mode);
    emit_insn (gen_while (UNSPEC_WHILELO, DImode, mode,
  			target, const0_rtx, limit));
!   return gen_lowpart (VNx16BImode, target);
  }
  
  static rtx
*************** aarch64_expand_sve_const_pred_trn (rtx t
*** 5824,5831 ****
       operands but permutes them as though they had mode MODE.  */
    machine_mode mode = aarch64_sve_pred_mode (permute_size).require ();
    target = aarch64_target_reg (target, GET_MODE (a));
!   rtx type_reg = CONST0_RTX (mode);
!   emit_insn (gen_aarch64_sve_trn1_conv (mode, target, a, b, type_reg));
    return target;
  }
  
--- 5825,5831 ----
       operands but permutes them as though they had mode MODE.  */
    machine_mode mode = aarch64_sve_pred_mode (permute_size).require ();
    target = aarch64_target_reg (target, GET_MODE (a));
!   emit_insn (gen_aarch64_sve_acle (UNSPEC_TRN1, mode, target, a, b));
    return target;
  }
  
*************** aarch64_use_return_insn_p (void)
*** 9818,9823 ****
--- 9818,9837 ----
    return known_eq (cfun->machine->frame.frame_size, 0);
  }
  
+ /* Return false for locally streaming functions in order to avoid
+    shrink-wrapping them.  Shrink-wrapping is unsafe when the function prologue
+    and epilogue contain streaming state change, because these implicitly change
+    the meaning of poly_int values.  */
+ 
+ bool
+ aarch64_use_simple_return_insn_p (void)
+ {
+   if (aarch64_cfun_enables_pstate_sm ())
+     return false;
+ 
+   return true;
+ }
+ 
  /* Generate the epilogue instructions for returning from a function.
     This is almost exactly the reverse of the prolog sequence, except
     that we need to insert barriers to avoid scheduling loads that read
*************** aarch64_expand_vector_init (rtx target,
*** 24019,24024 ****
--- 24033,24045 ----
        emit_insn (rec_seq);
      }
  
+   /* The two halves should (by induction) be individually endian-correct.
+      However, in the memory layout provided by VALS, the nth element of
+      HALVES[0] comes immediately before the nth element HALVES[1].
+      This means that, on big-endian targets, the nth element of HALVES[0]
+      is more significant than the nth element HALVES[1].  */
+   if (BYTES_BIG_ENDIAN)
+     std::swap (halves[0], halves[1]);
    rtvec v = gen_rtvec (2, halves[0], halves[1]);
    rtx_insn *zip1_insn
      = emit_set_insn (target, gen_rtx_UNSPEC (mode, v, UNSPEC_ZIP1));
*************** aarch64_asm_preferred_eh_data_format (in
*** 24432,24451 ****
     return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type;
  }
  
  /* Output .variant_pcs for aarch64_vector_pcs function symbols.  */
  
  static void
  aarch64_asm_output_variant_pcs (FILE *stream, const tree decl, const char* name)
  {
!   if (TREE_CODE (decl) == FUNCTION_DECL)
      {
!       arm_pcs pcs = (arm_pcs) fndecl_abi (decl).id ();
!       if (pcs == ARM_PCS_SIMD || pcs == ARM_PCS_SVE)
! 	{
! 	  fprintf (stream, "\t.variant_pcs\t");
! 	  assemble_name (stream, name);
! 	  fprintf (stream, "\n");
! 	}
      }
  }
  
--- 24453,24493 ----
     return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type;
  }
  
+ /* Return true if function declaration FNDECL needs to be marked as
+    having a variant PCS.  */
+ 
+ static bool
+ aarch64_is_variant_pcs (tree fndecl)
+ {
+   /* Check for ABIs that preserve more registers than usual.  */
+   arm_pcs pcs = (arm_pcs) fndecl_abi (fndecl).id ();
+   if (pcs == ARM_PCS_SIMD || pcs == ARM_PCS_SVE)
+     return true;
+ 
+   /* Check for ABIs that allow PSTATE.SM to be 1 on entry.  */
+   tree fntype = TREE_TYPE (fndecl);
+   if (aarch64_fntype_pstate_sm (fntype) != AARCH64_FL_SM_OFF)
+     return true;
+ 
+   /* Check for ABIs that require PSTATE.ZA to be 1 on entry, either because
+      of ZA or ZT0.  */
+   if (aarch64_fntype_pstate_za (fntype) != 0)
+     return true;
+ 
+   return false;
+ }
+ 
  /* Output .variant_pcs for aarch64_vector_pcs function symbols.  */
  
  static void
  aarch64_asm_output_variant_pcs (FILE *stream, const tree decl, const char* name)
  {
!   if (TREE_CODE (decl) == FUNCTION_DECL
!       && aarch64_is_variant_pcs (decl))
      {
!       fprintf (stream, "\t.variant_pcs\t");
!       assemble_name (stream, name);
!       fprintf (stream, "\n");
      }
  }
  
*************** aarch64_evpc_tbl (struct expand_vec_perm
*** 25934,25945 ****
  static bool
  aarch64_evpc_sve_tbl (struct expand_vec_perm_d *d)
  {
!   unsigned HOST_WIDE_INT nelt;
  
!   /* Permuting two variable-length vectors could overflow the
!      index range.  */
!   if (!d->one_vector_p && !d->perm.length ().is_constant (&nelt))
!     return false;
  
    if (d->testing_p)
      return true;
--- 25976,25998 ----
  static bool
  aarch64_evpc_sve_tbl (struct expand_vec_perm_d *d)
  {
!   if (!d->one_vector_p)
!     {
!       /* aarch64_expand_sve_vec_perm does not yet handle variable-length
! 	 vectors.  */
!       if (!d->perm.length ().is_constant ())
! 	return false;
  
!       /* This permutation reduces to the vec_perm optab if the elements are
! 	 large enough to hold all selector indices.  Do not handle that case
! 	 here, since the general TBL+SUB+TBL+ORR sequence is too expensive to
! 	 be considered a "native" constant permutation.
! 
! 	 Not doing this would undermine code that queries can_vec_perm_const_p
! 	 with allow_variable_p set to false.  See PR121027.  */
!       if (selector_fits_mode_p (d->vmode, d->perm))
! 	return false;
!     }
  
    if (d->testing_p)
      return true;
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/aarch64.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64.md
*** gcc-14.3.0/gcc/config/aarch64/aarch64.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/aarch64.md	Fri Jun 19 06:51:02 2026
***************
*** 132,137 ****
--- 132,145 ----
      ;; The actual value can sometimes vary, because it does not track
      ;; changes to PSTATE.ZA that happen during a lazy save and restore.
      ;; Those effects are instead tracked by ZA_SAVED_REGNUM.
+     ;;
+     ;; Sequences also write to this register if they synchronize the
+     ;; actual contents of ZA and PSTATE.ZA with the current function's
+     ;; ZA_REGNUM and SME_STATE_REGNUM.  Conceptually, these extra writes
+     ;; do not change the value of SME_STATE_REGNUM.  They simply act as
+     ;; sequencing points.  They means that all direct accesses to ZA can
+     ;; depend only on ZA_REGNUM and SME_STATE_REGNUM, rather than also
+     ;; depending on ZA_SAVED_REGNUM etc.
      (SME_STATE_REGNUM 88)
  
      ;; Instructions write to this register if they set TPIDR2_EL0 to a
***************
*** 259,264 ****
--- 267,273 ----
      UNSPEC_PACIBSP
      UNSPEC_PRLG_STK
      UNSPEC_REV
+     UNSPEC_REV_PRED
      UNSPEC_RBIT
      UNSPEC_SADALP
      UNSPEC_SCVTF
***************
*** 1049,1055 ****
  
  (define_insn "simple_return"
    [(simple_return)]
!   ""
    {
      output_asm_insn ("ret", operands);
      return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
--- 1058,1064 ----
  
  (define_insn "simple_return"
    [(simple_return)]
!   "aarch64_use_simple_return_insn_p ()"
    {
      output_asm_insn ("ret", operands);
      return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/arm_acle.h gcc-14.3.0-RC-20260619/gcc/config/aarch64/arm_acle.h
*** gcc-14.3.0/gcc/config/aarch64/arm_acle.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/arm_acle.h	Fri Jun 19 06:51:02 2026
*************** __pli (void const volatile *__addr)
*** 94,109 ****
  
  __extension__ extern __inline void
  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
! __plix (unsigned int __cache, unsigned int __rettn,
  	void const volatile *__addr)
  {
    return __builtin_aarch64_plix (__cache, __rettn, __addr);
  }
  
  __extension__ extern __inline void
! __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
! __pldx (unsigned int __access, unsigned int __cache, unsigned int __rettn,
! 	void const volatile *__addr)
  {
    return __builtin_aarch64_pldx (__access, __cache, __rettn, __addr);
  }
--- 94,109 ----
  
  __extension__ extern __inline void
  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
! __plix (const unsigned int __cache, const unsigned int __rettn,
  	void const volatile *__addr)
  {
    return __builtin_aarch64_plix (__cache, __rettn, __addr);
  }
  
  __extension__ extern __inline void
!   __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
!   __pldx (const unsigned int __access, const unsigned int __cache,
! 	  const unsigned int __rettn, void const volatile *__addr)
  {
    return __builtin_aarch64_pldx (__access, __cache, __rettn, __addr);
  }
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/iterators.md gcc-14.3.0-RC-20260619/gcc/config/aarch64/iterators.md
*** gcc-14.3.0/gcc/config/aarch64/iterators.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/iterators.md	Fri Jun 19 06:51:02 2026
***************
*** 519,533 ****
  				     VNx4HI VNx2HI
  				     VNx2SI])
  
  ;; All SVE vector modes.
! (define_mode_iterator SVE_ALL [VNx16QI VNx8QI VNx4QI VNx2QI
! 			       VNx8HI VNx4HI VNx2HI
! 			       VNx8HF VNx4HF VNx2HF
! 			       VNx8BF VNx4BF VNx2BF
! 			       VNx4SI VNx2SI
! 			       VNx4SF VNx2SF
! 			       VNx2DI
! 			       VNx2DF])
  
  ;; All SVE 2-vector modes.
  (define_mode_iterator SVE_FULLx2 [VNx32QI VNx16HI VNx8SI VNx4DI
--- 519,538 ----
  				     VNx4HI VNx2HI
  				     VNx2SI])
  
+ ;; All SVE integer vector modes.
+ (define_mode_iterator SVE_I [VNx16QI VNx8QI VNx4QI VNx2QI
+ 			     VNx8HI VNx4HI VNx2HI
+ 			     VNx4SI VNx2SI
+ 			     VNx2DI])
+ 
+ ;; All SVE floating-point vector modes.
+ (define_mode_iterator SVE_F [VNx8HF VNx4HF VNx2HF
+ 			     VNx8BF VNx4BF VNx2BF
+ 			     VNx4SF VNx2SF
+ 			     VNx2DF])
+ 
  ;; All SVE vector modes.
! (define_mode_iterator SVE_ALL [SVE_I SVE_F])
  
  ;; All SVE 2-vector modes.
  (define_mode_iterator SVE_FULLx2 [VNx32QI VNx16HI VNx8SI VNx4DI
***************
*** 549,560 ****
  ;; All SVE vector and structure modes.
  (define_mode_iterator SVE_ALL_STRUCT [SVE_ALL SVE_STRUCT])
  
- ;; All SVE integer vector modes.
- (define_mode_iterator SVE_I [VNx16QI VNx8QI VNx4QI VNx2QI
- 			     VNx8HI VNx4HI VNx2HI
- 			     VNx4SI VNx2SI
- 			     VNx2DI])
- 
  ;; All SVE integer vector modes and Advanced SIMD 64-bit vector
  ;; element modes
  (define_mode_iterator SVE_I_SIMD_DI [SVE_I V2DI])
--- 554,559 ----
***************
*** 824,830 ****
      UNSPEC_UZP2Q	; Used in aarch64-sve.md.
      UNSPEC_ZIP1Q	; Used in aarch64-sve.md.
      UNSPEC_ZIP2Q	; Used in aarch64-sve.md.
-     UNSPEC_TRN1_CONV	; Used in aarch64-sve.md.
      UNSPEC_COND_CMPEQ_WIDE ; Used in aarch64-sve.md.
      UNSPEC_COND_CMPGE_WIDE ; Used in aarch64-sve.md.
      UNSPEC_COND_CMPGT_WIDE ; Used in aarch64-sve.md.
--- 823,828 ----
***************
*** 1054,1059 ****
--- 1052,1060 ----
      UNSPEC_BFCVT       ; Used in aarch64-simd.md.
      UNSPEC_FCVTXN	; Used in aarch64-simd.md.
  
+     ;; All used in aarch64-sve.md
+     UNSPEC_PERMUTE_PRED
+ 
      ;; All used in aarch64-sve2.md
      UNSPEC_FCVTN
      UNSPEC_FDOT
***************
*** 1940,1946 ****
  			   (SI   "si")])
  
  ;; Like ve_mode but for the half-width modes.
! (define_mode_attr vn_mode [(V8HI  "qi") (V4SI  "hi") (V2DI  "si")])
  
  ;; Vm for lane instructions is restricted to FP_LO_REGS.
  (define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
--- 1941,1948 ----
  			   (SI   "si")])
  
  ;; Like ve_mode but for the half-width modes.
! (define_mode_attr vn_mode [(V8HI  "qi") (V4SI  "hi") (V2DI  "si") (DI "si")
! 			   (SI "hi") (HI "qi")])
  
  ;; Vm for lane instructions is restricted to FP_LO_REGS.
  (define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
diff -Nrcpad gcc-14.3.0/gcc/config/aarch64/tuning_models/hip12.h gcc-14.3.0-RC-20260619/gcc/config/aarch64/tuning_models/hip12.h
*** gcc-14.3.0/gcc/config/aarch64/tuning_models/hip12.h	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/config/aarch64/tuning_models/hip12.h	Fri Jun 19 06:51:02 2026
***************
*** 0 ****
--- 1,225 ----
+ /* Tuning model description for AArch64 architecture.
+    Copyright (C) 2009-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3, or (at your option)
+    any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AARCH64_H_HIP12
+ #define GCC_AARCH64_H_HIP12
+ 
+ #include "generic.h"
+ 
+ static const struct cpu_addrcost_table hip12_addrcost_table =
+ {
+     {
+       0, /* hi  */
+       0, /* si  */
+       0, /* di  */
+       2, /* ti  */
+     },
+   0, /* pre_modify  */
+   0, /* post_modify  */
+   2, /* post_modify_ld3_st3  */
+   2, /* post_modify_ld4_st4  */
+   0, /* register_offset  */
+   0, /* register_sextend  */
+   0, /* register_zextend  */
+   0, /* imm_offset  */
+ };
+ 
+ static const struct cpu_regmove_cost hip12_regmove_cost =
+ {
+   1, /* GP2GP  */
+   /* Spilling to int<->fp instead of memory is recommended so set
+      realistic costs compared to memmov_cost.  */
+   5, /* GP2FP  */
+   2, /* FP2GP  */
+   2  /* FP2FP  */
+ };
+ 
+ static const advsimd_vec_cost hip12_advsimd_vector_cost =
+ {
+   2, /* int_stmt_cost  */
+   2, /* fp_stmt_cost  */
+   2, /* ld2_st2_permute_cost  */
+   2, /* ld3_st3_permute_cost  */
+   3, /* ld4_st4_permute_cost  */
+   2, /* permute_cost  */
+   9, /* reduc_i8_cost  */
+   7, /* reduc_i16_cost  */
+   5, /* reduc_i32_cost  */
+   3, /* reduc_i64_cost  */
+   9, /* reduc_f16_cost  */
+   6, /* reduc_f32_cost  */
+   3, /* reduc_f64_cost  */
+   2, /* store_elt_extra_cost  */
+   2, /* vec_to_scalar_cost  */
+   4, /* scalar_to_vec_cost  */
+   6, /* align_load_cost  */
+   6, /* unalign_load_cost  */
+   1, /* unalign_store_cost  */
+   1  /* store_cost  */
+ };
+ 
+ static const sve_vec_cost hip12_sve_vector_cost =
+ {
+   {
+     2, /* int_stmt_cost  */
+     2, /* fp_stmt_cost  */
+     2, /* ld2_st2_permute_cost  */
+     3, /* ld3_st3_permute_cost  */
+     3, /* ld4_st4_permute_cost  */
+     2, /* permute_cost  */
+     /* Theoretically, a reduction involving 31 scalar ADDs could
+        complete in ~6 cycles and would have a cost of 31.  [SU]ADDV
+        completes in 13 cycles, so give it a cost of 31 + 7.  */
+     38, /* reduc_i8_cost  */
+     /* Likewise for 15 scalar ADDs (~3 cycles) vs. 10: 15 + 7.  */
+     22, /* reduc_i16_cost  */
+     /* Likewise for 7 scalar ADDs (~2 cycles) vs. 7: 7 + 5.  */
+     12, /* reduc_i32_cost  */
+     /* Likewise for 3 scalar ADDs (~1 cycles) vs. 4: 3 + 3.  */
+     6, /* reduc_i64_cost  */
+     /* Theoretically, a reduction involving 15 scalar FADDs could
+        complete in ~8 cycles and would have a cost of 30.  FADDV
+        completes in 15 cycles, so give it a cost of 30 + 7.  */
+     37, /* reduc_f16_cost  */
+     /* Likewise for 7 scalar FADDs (~4 cycles) vs. 12: 14 + 8.  */
+     22, /* reduc_f32_cost  */
+     /* Likewise for 3 scalar FADDs (~2 cycles) vs. 9: 6 + 7.  */
+     13, /* reduc_f64_cost  */
+     2, /* store_elt_extra_cost  */
+     2, /* vec_to_scalar_cost  */
+     4, /* scalar_to_vec_cost  */
+     6, /* align_load_cost  */
+     6, /* unalign_load_cost  */
+     1, /* unalign_store_cost  */
+     1  /* store_cost  */
+   },
+   3, /* clast_cost  */
+   42, /* fadda_f16_cost  */
+   26, /* fadda_f32_cost  */
+   20, /* fadda_f64_cost  */
+   32, /* gather_load_x32_cost  */
+   16, /* gather_load_x64_cost  */
+   3 /* scatter_store_elt_cost  */
+ };
+ 
+ static const aarch64_scalar_vec_issue_info hip12_scalar_issue_info =
+ {
+   5, /* loads_stores_per_cycle  */
+   2, /* stores_per_cycle  */
+   6, /* general_ops_per_cycle  */
+   0, /* fp_simd_load_general_ops  */
+   1 /* fp_simd_store_general_ops  */
+ };
+ 
+ static const aarch64_advsimd_vec_issue_info hip12_advsimd_issue_info =
+ {
+   {
+     5, /* loads_stores_per_cycle  */
+     2, /* stores_per_cycle  */
+     4, /* general_ops_per_cycle  */
+     0, /* fp_simd_load_general_ops  */
+     1 /* fp_simd_store_general_ops  */
+   },
+   2, /* ld2_st2_general_ops  */
+   2, /* ld3_st3_general_ops  */
+   3 /* ld4_st4_general_ops  */
+ };
+ 
+ static const aarch64_sve_vec_issue_info hip12_sve_issue_info =
+ {
+   {
+     {
+       5, /* loads_stores_per_cycle  */
+       2, /* stores_per_cycle  */
+       2, /* general_ops_per_cycle  */
+       0, /* fp_simd_load_general_ops  */
+       1 /* fp_simd_store_general_ops  */
+     },
+     2, /* ld2_st2_general_ops  */
+     2, /* ld3_st3_general_ops  */
+     3 /* ld4_st4_general_ops  */
+   },
+   2, /* pred_ops_per_cycle  */
+   2, /* while_pred_ops  */
+   2, /* int_cmp_pred_ops  */
+   1, /* fp_cmp_pred_ops  */
+   1, /* gather_scatter_pair_general_ops  */
+   1 /* gather_scatter_pair_pred_ops  */
+ };
+ 
+ static const aarch64_vec_issue_info hip12_vec_issue_info =
+ {
+   &hip12_scalar_issue_info,
+   &hip12_advsimd_issue_info,
+   &hip12_sve_issue_info
+ };
+ 
+ static const struct cpu_vector_cost hip12_vector_cost =
+ {
+   1, /* scalar_int_stmt_cost  */
+   2, /* scalar_fp_stmt_cost  */
+   4, /* scalar_load_cost  */
+   1, /* scalar_store_cost  */
+   1, /* cond_taken_branch_cost  */
+   1, /* cond_not_taken_branch_cost  */
+   &hip12_advsimd_vector_cost, /* advsimd  */
+   &hip12_sve_vector_cost, /* sve  */
+   &hip12_vec_issue_info /* issue_info  */
+ };
+ 
+ static const struct tune_params hip12_tunings =
+ {
+   &hip12_extra_costs,
+   &hip12_addrcost_table,
+   &hip12_regmove_cost,
+   &hip12_vector_cost,
+   &generic_branch_cost,
+   &generic_approx_modes,
+   SVE_256, /* sve_width  */
+   { 4, /* load_int.  */
+     1, /* store_int.  */
+     6, /* load_fp.  */
+     1, /* store_fp.  */
+     8, /* load_pred.  */
+     4 /* store_pred.  */
+   }, /* memmov_cost.  */
+   8,    /* issue_rate  */
+   (AARCH64_FUSE_CMP_BRANCH
+    | AARCH64_FUSE_AES_AESMC), /* fusible_ops  */
+   "16", /* function_align.  */
+   "4",  /* jump_align.  */
+   "8",  /* loop_align.  */
+   2,    /* int_reassoc_width.  */
+   4,    /* fp_reassoc_width.  */
+   2,    /* fma_reassoc_width.  */
+   2,    /* vec_reassoc_width.  */
+   2,    /* min_div_recip_mul_sf.  */
+   2,    /* min_div_recip_mul_df.  */
+   0,    /* max_case_values.  */
+   tune_params::AUTOPREFETCHER_WEAK,    /* autoprefetcher_model.  */
+   (AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND
+    | AARCH64_EXTRA_TUNE_FULLY_PIPELINED_FMA
+    | AARCH64_EXTRA_TUNE_USE_NEW_VECTOR_COSTS
+    | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT),    /* tune_flags.  */
+   &generic_armv8_a_prefetch_tune,
+   AARCH64_LDP_STP_POLICY_ALWAYS,    /* ldp_policy_model.  */
+   AARCH64_LDP_STP_POLICY_ALWAYS     /* stp_policy_model.  */
+ };
+ 
+ #endif /* GCC_AARCH64_H_HIP12.  */
diff -Nrcpad gcc-14.3.0/gcc/config/arm/arm.cc gcc-14.3.0-RC-20260619/gcc/config/arm/arm.cc
*** gcc-14.3.0/gcc/config/arm/arm.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/arm.cc	Fri Jun 19 06:51:02 2026
*************** arm_print_condition (FILE *stream)
*** 24153,24159 ****
  
  
  /* Globally reserved letters: acln
!    Puncutation letters currently used: @_|?().!#
     Lower case letters currently used: bcdefhimpqtvwxyz
     Upper case letters currently used: ABCDEFGHIJKLMNOPQRSTUV
     Letters previously used, but now deprecated/obsolete: sWXYZ.
--- 24153,24159 ----
  
  
  /* Globally reserved letters: acln
!    Puncutation letters currently used: @_-|?().!#
     Lower case letters currently used: bcdefhimpqtvwxyz
     Upper case letters currently used: ABCDEFGHIJKLMNOPQRSTUV
     Letters previously used, but now deprecated/obsolete: sWXYZ.
*************** arm_print_operand (FILE *stream, rtx x,
*** 24188,24193 ****
--- 24188,24198 ----
      case '_':
        fputs (user_label_prefix, stream);
        return;
+     case '-':
+ #ifdef LOCAL_LABEL_PREFIX
+       fputs (LOCAL_LABEL_PREFIX, stream);
+ #endif
+       return;
  
      case '|':
        fputs (REGISTER_PREFIX, stream);
*************** arm_print_operand_punct_valid_p (unsigne
*** 25038,25046 ****
  {
    return (code == '@' || code == '|' || code == '.'
  	  || code == '(' || code == ')' || code == '#'
  	  || (TARGET_32BIT && (code == '?'))
! 	  || (TARGET_THUMB2 && (code == '!'))
! 	  || (TARGET_THUMB && (code == '_')));
  }
  
  /* Target hook for assembling integer objects.  The ARM version needs to
--- 25043,25051 ----
  {
    return (code == '@' || code == '|' || code == '.'
  	  || code == '(' || code == ')' || code == '#'
+ 	  || code == '-' || code == '_'
  	  || (TARGET_32BIT && (code == '?'))
! 	  || (TARGET_THUMB2 && (code == '!')));
  }
  
  /* Target hook for assembling integer objects.  The ARM version needs to
diff -Nrcpad gcc-14.3.0/gcc/config/arm/arm.md gcc-14.3.0-RC-20260619/gcc/config/arm/arm.md
*** gcc-14.3.0/gcc/config/arm/arm.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/arm.md	Fri Jun 19 06:51:02 2026
***************
*** 1012,1018 ****
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "subvsi3_intmin"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	  (plus:DI
--- 1012,1018 ----
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "sub_cmpVsi3_intmin"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	  (plus:DI
***************
*** 1432,1446 ****
        operands[2] = GEN_INT (-INTVAL (operands[2]));
        /* Special case for INT_MIN.  */
        if (INTVAL (operands[2]) == 0x80000000)
! 	emit_insn (gen_subvsi3_intmin (operands[0], operands[1]));
        else
  	emit_insn (gen_addsi3_compareV_imm (operands[0], operands[1],
! 					  operands[2]));
      }
    else if (CONST_INT_P (operands[1]))
!     emit_insn (gen_subvsi3_imm1 (operands[0], operands[1], operands[2]));
    else
!     emit_insn (gen_subvsi3 (operands[0], operands[1], operands[2]));
  
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
    DONE;
--- 1432,1446 ----
        operands[2] = GEN_INT (-INTVAL (operands[2]));
        /* Special case for INT_MIN.  */
        if (INTVAL (operands[2]) == 0x80000000)
! 	emit_insn (gen_sub_cmpVsi3_intmin (operands[0], operands[1]));
        else
  	emit_insn (gen_addsi3_compareV_imm (operands[0], operands[1],
! 					    operands[2]));
      }
    else if (CONST_INT_P (operands[1]))
!     emit_insn (gen_sub_cmpVsi3_imm1 (operands[0], operands[1], operands[2]));
    else
!     emit_insn (gen_sub_cmpVsi3 (operands[0], operands[1], operands[2]));
  
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
    DONE;
***************
*** 1513,1526 ****
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_subvsi3_borrow_imm (hi_result, hi_op1, hi_op2,
  				       gen_rtx_LTU (SImode, ccreg, const0_rtx),
  				       gen_rtx_LTU (DImode, ccreg,
  						    const0_rtx)));
-   else
-     emit_insn (gen_subvsi3_borrow (hi_result, hi_op1, hi_op2,
- 				   gen_rtx_LTU (SImode, ccreg, const0_rtx),
- 				   gen_rtx_LTU (DImode, ccreg, const0_rtx)));
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
  
    DONE;
--- 1513,1528 ----
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_sub_cmpVsi3_borrow_imm (hi_result, hi_op1, hi_op2,
! 					   gen_rtx_LTU (SImode, ccreg,
! 							const0_rtx),
! 					   gen_rtx_LTU (DImode, ccreg,
! 							const0_rtx)));
!   else
!     emit_insn (gen_sub_cmpVsi3_borrow (hi_result, hi_op1, hi_op2,
  				       gen_rtx_LTU (SImode, ccreg, const0_rtx),
  				       gen_rtx_LTU (DImode, ccreg,
  						    const0_rtx)));
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
  
    DONE;
***************
*** 1630,1644 ****
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_usubvsi3_borrow_imm (hi_result, hi_op1, hi_op2,
! 					GEN_INT (UINTVAL (hi_op2) & 0xffffffff),
  					gen_rtx_LTU (SImode, ccreg, const0_rtx),
  					gen_rtx_LTU (DImode, ccreg,
  						     const0_rtx)));
-   else
-     emit_insn (gen_usubvsi3_borrow (hi_result, hi_op1, hi_op2,
- 				    gen_rtx_LTU (SImode, ccreg, const0_rtx),
- 				    gen_rtx_LTU (DImode, ccreg, const0_rtx)));
    arm_gen_unlikely_cbranch (LTU, CC_Bmode, operands[3]);
  
    DONE;
--- 1632,1649 ----
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_usub_cmpVsi3_borrow_imm (hi_result, hi_op1, hi_op2,
! 					    GEN_INT (UINTVAL (hi_op2)
! 						     & 0xffffffff),
! 					    gen_rtx_LTU (SImode, ccreg,
! 							 const0_rtx),
! 					    gen_rtx_LTU (DImode, ccreg,
! 							 const0_rtx)));
!   else
!     emit_insn (gen_usub_cmpVsi3_borrow (hi_result, hi_op1, hi_op2,
  					gen_rtx_LTU (SImode, ccreg, const0_rtx),
  					gen_rtx_LTU (DImode, ccreg,
  						     const0_rtx)));
    arm_gen_unlikely_cbranch (LTU, CC_Bmode, operands[3]);
  
    DONE;
***************
*** 1657,1663 ****
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "subvsi3"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 1662,1668 ----
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "sub_cmpVsi3"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 1674,1680 ****
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "subvsi3_imm1"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 1679,1685 ----
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "sub_cmpVsi3_imm1"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 2131,2137 ****
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "usubvsi3_borrow"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "0,r"))
--- 2136,2142 ----
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "usub_cmpVsi3_borrow"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "0,r"))
***************
*** 2149,2155 ****
     (set_attr "length" "2,4")]
  )
  
! (define_insn "usubvsi3_borrow_imm"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "r,r"))
--- 2154,2160 ----
     (set_attr "length" "2,4")]
  )
  
! (define_insn "usub_cmpVsi3_borrow_imm"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "r,r"))
***************
*** 2168,2174 ****
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "subvsi3_borrow"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 2173,2179 ----
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "sub_cmpVsi3_borrow"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 2189,2195 ****
     (set_attr "length" "2,4")]
  )
  
! (define_insn "subvsi3_borrow_imm"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 2194,2200 ----
     (set_attr "length" "2,4")]
  )
  
! (define_insn "sub_cmpVsi3_borrow_imm"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 10145,10150 ****
--- 10150,10156 ----
     (set_attr "type" "multiple")]
  )
  
+ ;; (pred4 && pred5) != 0
  (define_insn "*cmp_ite0"
    [(set (match_operand 6 "dominant_cc_register" "")
  	(compare
***************
*** 10161,10167 ****
  	        "lPy,rI,L,lPy,lPy,rI,rI,L,L")])
  	  (const_int 0))
  	 (const_int 0)))]
!   "TARGET_32BIT"
    "*
    {
      static const char * const cmp1[NUM_OF_COND_CMP][2] =
--- 10167,10177 ----
  	        "lPy,rI,L,lPy,lPy,rI,rI,L,L")])
  	  (const_int 0))
  	 (const_int 0)))]
!   "TARGET_32BIT
!    && GET_MODE (operands[6]) != CCmode
!    && (GET_MODE (operands[6])
!        == arm_select_dominance_cc_mode (operands[4], operands[5],
! 					DOM_CC_X_AND_Y))"
    "*
    {
      static const char * const cmp1[NUM_OF_COND_CMP][2] =
***************
*** 10228,10233 ****
--- 10238,10244 ----
             (const_int 10))])]
  )
  
+ ;; (!pred4 || pred5) != 0
  (define_insn "*cmp_ite1"
    [(set (match_operand 6 "dominant_cc_register" "")
  	(compare
***************
*** 10244,10250 ****
  	        "lPy,rI,L,lPy,lPy,rI,rI,L,L")])
  	  (const_int 1))
  	 (const_int 0)))]
!   "TARGET_32BIT"
    "*
    {
      static const char * const cmp1[NUM_OF_COND_CMP][2] =
--- 10255,10265 ----
  	        "lPy,rI,L,lPy,lPy,rI,rI,L,L")])
  	  (const_int 1))
  	 (const_int 0)))]
!   "TARGET_32BIT
!    && GET_MODE (operands[6]) != CCmode
!    && (GET_MODE (operands[6])
!        == arm_select_dominance_cc_mode (operands[4], operands[5],
! 					DOM_CC_NX_OR_Y))"
    "*
    {
      static const char * const cmp1[NUM_OF_COND_CMP][2] =
***************
*** 10327,10333 ****
  	    (match_operand:SI 3 "arm_add_operand"
  	        "lPy,rI,L,lPy,lPy,r,rI,rI,L,L")]))
  	 (const_int 0)))]
!   "TARGET_32BIT"
    "*
    {
      static const char *const cmp1[NUM_OF_COND_CMP][2] =
--- 10342,10352 ----
  	    (match_operand:SI 3 "arm_add_operand"
  	        "lPy,rI,L,lPy,lPy,r,rI,rI,L,L")]))
  	 (const_int 0)))]
!   "TARGET_32BIT
!    && GET_MODE (operands[6]) != CCmode
!    && (GET_MODE (operands[6])
!        == arm_select_dominance_cc_mode (operands[4], operands[5],
! 					DOM_CC_X_AND_Y))"
    "*
    {
      static const char *const cmp1[NUM_OF_COND_CMP][2] =
***************
*** 10412,10418 ****
  	    (match_operand:SI 3 "arm_add_operand"
  	        "lPy,rI,L,lPy,lPy,r,rI,rI,L,L")]))
  	 (const_int 0)))]
!   "TARGET_32BIT"
    "*
    {
      static const char *const cmp1[NUM_OF_COND_CMP][2] =
--- 10431,10441 ----
  	    (match_operand:SI 3 "arm_add_operand"
  	        "lPy,rI,L,lPy,lPy,r,rI,rI,L,L")]))
  	 (const_int 0)))]
!   "TARGET_32BIT
!    && GET_MODE (operands[6]) != CCmode
!    && (GET_MODE (operands[6])
!        == arm_select_dominance_cc_mode (operands[4], operands[5],
! 					DOM_CC_X_OR_Y))"
    "*
    {
      static const char *const cmp1[NUM_OF_COND_CMP][2] =
diff -Nrcpad gcc-14.3.0/gcc/config/arm/constraints.md gcc-14.3.0-RC-20260619/gcc/config/arm/constraints.md
*** gcc-14.3.0/gcc/config/arm/constraints.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/constraints.md	Fri Jun 19 06:51:02 2026
***************
*** 471,482 ****
  (define_memory_constraint "Uj"
   "@internal
    In ARM/Thumb-2 state a VFP load/store address that supports writeback
!   for Neon but not for MVE"
   (and (match_code "mem")
!       (match_test "TARGET_32BIT")
!       (match_test "TARGET_HAVE_MVE
!                    ? arm_coproc_mem_operand_no_writeback (op)
!                    : neon_vector_mem_operand (op, 2, true)")))
  
  (define_memory_constraint "Uy"
   "@internal
--- 471,482 ----
  (define_memory_constraint "Uj"
   "@internal
    In ARM/Thumb-2 state a VFP load/store address that supports writeback
!   for Neon but not for MVE or VFP_FP16INST"
   (and (match_code "mem")
!       (match_test "TARGET_32BIT
! 		   && (arm_coproc_mem_operand_no_writeback (op)
! 		       || (TARGET_NEON_FP16
! 			   && neon_vector_mem_operand (op, 2, true)))")))
  
  (define_memory_constraint "Uy"
   "@internal
diff -Nrcpad gcc-14.3.0/gcc/config/arm/mve.md gcc-14.3.0-RC-20260619/gcc/config/arm/mve.md
*** gcc-14.3.0/gcc/config/arm/mve.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/mve.md	Fri Jun 19 06:51:02 2026
***************
*** 1267,1274 ****
  (define_insn "mve_vbicq_f<mode>"
    [
     (set (match_operand:MVE_0 0 "s_register_operand" "=w")
! 	(and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
! 			      (match_operand:MVE_0 2 "s_register_operand" "w")))
    ]
    "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
    "vbic\t%q0, %q1, %q2"
--- 1267,1274 ----
  (define_insn "mve_vbicq_f<mode>"
    [
     (set (match_operand:MVE_0 0 "s_register_operand" "=w")
! 	(and:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w"))
! 			      (match_operand:MVE_0 1 "s_register_operand" "w")))
    ]
    "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
    "vbic\t%q0, %q1, %q2"
diff -Nrcpad gcc-14.3.0/gcc/config/arm/neon.md gcc-14.3.0-RC-20260619/gcc/config/arm/neon.md
*** gcc-14.3.0/gcc/config/arm/neon.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/neon.md	Fri Jun 19 06:51:02 2026
***************
*** 872,882 ****
    [(set_attr "type" "neon_minmax<q>")]
  )
  
! (define_insn "*smin<mode>3_neon"
!   [(set (match_operand:VDQW 0 "s_register_operand" "=w")
! 	(smin:VDQW (match_operand:VDQW 1 "s_register_operand" "w")
! 		   (match_operand:VDQW 2 "s_register_operand" "w")))]
!   "TARGET_NEON"
    "vmin.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
    [(set (attr "type")
        (if_then_else (match_test "<Is_float_mode>")
--- 872,882 ----
    [(set_attr "type" "neon_minmax<q>")]
  )
  
! (define_insn "*smin<VDQWH:mode>3_neon"
!   [(set (match_operand:VDQWH 0 "s_register_operand" "=w")
! 	(smin:VDQWH (match_operand:VDQWH 1 "s_register_operand" "w")
! 		    (match_operand:VDQWH 2 "s_register_operand" "w")))]
!   "ARM_HAVE_NEON_<MODE>_ARITH"
    "vmin.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
    [(set (attr "type")
        (if_then_else (match_test "<Is_float_mode>")
***************
*** 884,894 ****
                      (const_string "neon_minmax<q>")))]
  )
  
! (define_insn "*smax<mode>3_neon"
!   [(set (match_operand:VDQW 0 "s_register_operand" "=w")
! 	(smax:VDQW (match_operand:VDQW 1 "s_register_operand" "w")
! 		   (match_operand:VDQW 2 "s_register_operand" "w")))]
!   "TARGET_NEON"
    "vmax.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
    [(set (attr "type")
        (if_then_else (match_test "<Is_float_mode>")
--- 884,894 ----
                      (const_string "neon_minmax<q>")))]
  )
  
! (define_insn "*smax<VDQWH:mode>3_neon"
!   [(set (match_operand:VDQWH 0 "s_register_operand" "=w")
! 	(smax:VDQWH (match_operand:VDQWH 1 "s_register_operand" "w")
! 		    (match_operand:VDQWH 2 "s_register_operand" "w")))]
!   "ARM_HAVE_NEON_<MODE>_ARITH"
    "vmax.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
    [(set (attr "type")
        (if_then_else (match_test "<Is_float_mode>")
diff -Nrcpad gcc-14.3.0/gcc/config/arm/thumb2.md gcc-14.3.0-RC-20260619/gcc/config/arm/thumb2.md
*** gcc-14.3.0/gcc/config/arm/thumb2.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/thumb2.md	Fri Jun 19 06:51:02 2026
***************
*** 1465,1483 ****
  	      (pc)))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_THUMB2"
!   "*
!   if (get_attr_length (insn) == 2)
!     return \"cbz\\t%0, %l1\";
!   else
!     return \"cmp\\t%0, #0\;beq\\t%l1\";
!   "
    [(set (attr "length")
          (if_then_else
  	    (and (ge (minus (match_dup 1) (pc)) (const_int 2))
  	         (le (minus (match_dup 1) (pc)) (const_int 128))
  	         (not (match_test "which_alternative")))
  	    (const_int 2)
! 	    (const_int 8)))
     (set_attr "type" "branch,multiple")]
  )
  
--- 1465,1488 ----
  	      (pc)))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_THUMB2"
!   {
!     int offset = (INSN_ADDRESSES (INSN_UID (operands[1]))
! 		  - INSN_ADDRESSES (INSN_UID (insn)));
!     if (get_attr_length (insn) == 2)
!       return "cbz\t%0, %l1";
!     else if (offset >= -1048564 && offset <= 1048576)
!       return "cmp\t%0, #0\;beq\t%l1";
!     else if (which_alternative == 0)
!       return "cbnz\t%0, %-LCB%=\;b\t%l1\n%-LCB%=:";
!     return "cmp\t%0, #0\;bne\t%-LCB%=\;b\t%l1\n%-LCB%=:";
!   }
    [(set (attr "length")
          (if_then_else
  	    (and (ge (minus (match_dup 1) (pc)) (const_int 2))
  	         (le (minus (match_dup 1) (pc)) (const_int 128))
  	         (not (match_test "which_alternative")))
  	    (const_int 2)
! 	    (const_int 10)))
     (set_attr "type" "branch,multiple")]
  )
  
***************
*** 1489,1507 ****
  	      (pc)))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_THUMB2"
!   "*
!   if (get_attr_length (insn) == 2)
!     return \"cbnz\\t%0, %l1\";
!   else
!     return \"cmp\\t%0, #0\;bne\\t%l1\";
!   "
    [(set (attr "length")
          (if_then_else
  	    (and (ge (minus (match_dup 1) (pc)) (const_int 2))
  	         (le (minus (match_dup 1) (pc)) (const_int 128))
  	         (not (match_test "which_alternative")))
  	    (const_int 2)
! 	    (const_int 8)))
     (set_attr "type" "branch,multiple")]
  )
  
--- 1494,1517 ----
  	      (pc)))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_THUMB2"
!   {
!     int offset = (INSN_ADDRESSES (INSN_UID (operands[1]))
! 		  - INSN_ADDRESSES (INSN_UID (insn)));
!     if (get_attr_length (insn) == 2)
!       return "cbnz\t%0, %l1";
!     else if (offset >= -1048564 && offset <= 1048576)
!       return "cmp\t%0, #0\;bne\t%l1";
!     else if (which_alternative == 0)
!       return "cbz\t%0, %-LCB%=\;b\t%l1\n%-LCB%=:";
!     return "cmp\t%0, #0\;beq\t%-LCB%=\;b\t%l1\n%-LCB%=:";
!   }
    [(set (attr "length")
          (if_then_else
  	    (and (ge (minus (match_dup 1) (pc)) (const_int 2))
  	         (le (minus (match_dup 1) (pc)) (const_int 128))
  	         (not (match_test "which_alternative")))
  	    (const_int 2)
! 	    (const_int 10)))
     (set_attr "type" "branch,multiple")]
  )
  
diff -Nrcpad gcc-14.3.0/gcc/config/arm/vfp.md gcc-14.3.0-RC-20260619/gcc/config/arm/vfp.md
*** gcc-14.3.0/gcc/config/arm/vfp.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/arm/vfp.md	Fri Jun 19 06:51:02 2026
***************
*** 424,435 ****
      case 6: /* S register from immediate.  */
        return \"vmov.f16\\t%0, %1\t%@ __<fporbf>\";
      case 7: /* S register from memory.  */
!       if (TARGET_HAVE_MVE)
  	return \"vldr.16\\t%0, %1\";
        else
  	return \"vld1.16\\t{%z0}, %A1\";
      case 8: /* Memory from S register.  */
!       if (TARGET_HAVE_MVE)
  	return \"vstr.16\\t%1, %0\";
        else
  	return \"vst1.16\\t{%z1}, %A0\";
--- 424,435 ----
      case 6: /* S register from immediate.  */
        return \"vmov.f16\\t%0, %1\t%@ __<fporbf>\";
      case 7: /* S register from memory.  */
!       if (!auto_inc_p (XEXP (operands[1], 0)))
  	return \"vldr.16\\t%0, %1\";
        else
  	return \"vld1.16\\t{%z0}, %A1\";
      case 8: /* Memory from S register.  */
!       if (!auto_inc_p (XEXP (operands[0], 0)))
  	return \"vstr.16\\t%1, %0\";
        else
  	return \"vst1.16\\t{%z1}, %A0\";
diff -Nrcpad gcc-14.3.0/gcc/config/avr/avr-fixed.md gcc-14.3.0-RC-20260619/gcc/config/avr/avr-fixed.md
*** gcc-14.3.0/gcc/config/avr/avr-fixed.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/avr/avr-fixed.md	Fri Jun 19 06:51:02 2026
***************
*** 44,52 ****
     SQ USQ SA USA
     DQ UDQ DA UDA
     TA UTA
!    QI HI SI DI])
  
! ;; Same so that be can build cross products
  
  (define_mode_iterator FIXED_B
    [QQ UQQ
--- 44,52 ----
     SQ USQ SA USA
     DQ UDQ DA UDA
     TA UTA
!    QI HI PSI SI DI])
  
! ;; Same so that we can build cartesian products.
  
  (define_mode_iterator FIXED_B
    [QQ UQQ
***************
*** 54,60 ****
     SQ USQ SA USA
     DQ UDQ DA UDA
     TA UTA
!    QI HI SI DI])
  
  (define_insn_and_split "fract<FIXED_B:mode><FIXED_A:mode>2"
    [(set (match_operand:FIXED_A 0 "register_operand" "=r")
--- 54,60 ----
     SQ USQ SA USA
     DQ UDQ DA UDA
     TA UTA
!    QI HI PSI SI DI])
  
  (define_insn_and_split "fract<FIXED_B:mode><FIXED_A:mode>2"
    [(set (match_operand:FIXED_A 0 "register_operand" "=r")
diff -Nrcpad gcc-14.3.0/gcc/config/avr/avr-mcus.def gcc-14.3.0-RC-20260619/gcc/config/avr/avr-mcus.def
*** gcc-14.3.0/gcc/config/avr/avr-mcus.def	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/avr/avr-mcus.def	Fri Jun 19 06:51:02 2026
*************** AVR_MCU ("avr64da28",        ARCH_AVRXME
*** 313,318 ****
--- 313,322 ----
  AVR_MCU ("avr64da32",        ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA32__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64da48",        ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA48__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64da64",        ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA64__",   0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da28s",       ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA28S__",  0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da32s",       ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA32S__",  0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da48s",       ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA48S__",  0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da64s",       ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DA64S__",  0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64db28",        ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DB28__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64db32",        ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DB32__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64db48",        ARCH_AVRXMEGA2, AVR_ISA_FLMAP, "__AVR_AVR64DB48__",   0x6000, 0x0, 0x10000, 0)
*************** AVR_MCU ("avr16du32",        ARCH_AVRXME
*** 389,394 ****
--- 393,401 ----
  AVR_MCU ("avr32da28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DA28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32da32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DA32__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32da48",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DA48__",   0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32da28s",       ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DA28S__",  0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32da32s",       ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DA32S__",  0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32da48s",       ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DA48S__",  0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32db28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DB28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32db32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DB32__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32db48",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32DB48__",   0x7000, 0x0, 0x8000, 0x8000)
*************** AVR_MCU ("avr16eb14",        ARCH_AVRXME
*** 404,415 ****
--- 411,434 ----
  AVR_MCU ("avr16eb20",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16EB20__",   0x7800, 0x0, 0x4000, 0x8000)
  AVR_MCU ("avr16eb28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16EB28__",   0x7800, 0x0, 0x4000, 0x8000)
  AVR_MCU ("avr16eb32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16EB32__",   0x7800, 0x0, 0x4000, 0x8000)
+ AVR_MCU ("avr32eb14",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EB14__",   0x7400, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32eb20",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EB20__",   0x7400, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32eb28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EB28__",   0x7400, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32eb32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EB32__",   0x7400, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr16ea28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16EA28__",   0x7800, 0x0, 0x4000, 0x8000)
  AVR_MCU ("avr16ea32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16EA32__",   0x7800, 0x0, 0x4000, 0x8000)
  AVR_MCU ("avr16ea48",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16EA48__",   0x7800, 0x0, 0x4000, 0x8000)
  AVR_MCU ("avr32ea28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EA28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32ea32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EA32__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32ea48",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EA48__",   0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr16la14",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16LA14__",   0x7800, 0x0, 0x4000, 0x8000)
+ AVR_MCU ("avr16la20",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16LA20__",   0x7800, 0x0, 0x4000, 0x8000)
+ AVR_MCU ("avr16la28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16LA28__",   0x7800, 0x0, 0x4000, 0x8000)
+ AVR_MCU ("avr16la32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR16LA32__",   0x7800, 0x0, 0x4000, 0x8000)
+ AVR_MCU ("avr32la14",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32LA14__",   0x7800, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32la20",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32LA20__",   0x7800, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32la28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32LA28__",   0x7800, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32la32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32LA32__",   0x7800, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32sd20",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32SD20__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32sd28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32SD28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32sd32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32SD32__",   0x7000, 0x0, 0x8000, 0x8000)
*************** AVR_MCU ("avr128da28",       ARCH_AVRXME
*** 427,432 ****
--- 446,455 ----
  AVR_MCU ("avr128da32",       ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA32__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128da48",       ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA48__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128da64",       ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA64__",  0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da28s",      ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA28S__", 0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da32s",      ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA32S__", 0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da48s",      ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA48S__", 0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da64s",      ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DA64S__", 0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128db28",       ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DB28__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128db32",       ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DB32__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128db48",       ARCH_AVRXMEGA4, AVR_ISA_FLMAP, "__AVR_AVR128DB48__",  0x4000, 0x0, 0x20000, 0)
diff -Nrcpad gcc-14.3.0/gcc/config/avr/avr.cc gcc-14.3.0-RC-20260619/gcc/config/avr/avr.cc
*** gcc-14.3.0/gcc/config/avr/avr.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/avr/avr.cc	Fri Jun 19 06:51:02 2026
*************** avr_load_libgcc_p (rtx op)
*** 4368,4374 ****
  
    return (n_bytes > 2
  	  && !AVR_HAVE_LPMX
! 	  && avr_mem_flash_p (op));
  }
  
  /* Return true if a value of mode MODE is read by __xload_* function.  */
--- 4368,4375 ----
  
    return (n_bytes > 2
  	  && !AVR_HAVE_LPMX
! 	  && avr_mem_flash_p (op)
! 	  && MEM_ADDR_SPACE (op) == ADDR_SPACE_FLASH);
  }
  
  /* Return true if a value of mode MODE is read by __xload_* function.  */
*************** avr_out_lpm_no_lpmx (rtx_insn *insn, rtx
*** 4493,4498 ****
--- 4494,4539 ----
  	    avr_asm_len ("sbiw %2,1", xop, plen, 1);
  
  	  break; /* 2 */
+ 
+ 	/* cases 3 and 4 are only needed with ELPM but no ELPMx.  */
+ 
+ 	case 3:
+ 	  if (REGNO (dest) == REG_Z - 2
+ 	      && !reg_unused_after (insn, all_regs_rtx[REG_31]))
+ 	    avr_asm_len ("push r31", xop, plen, 1);
+ 
+ 	  avr_asm_len ("%4lpm $ mov %A0,%3 $ adiw %2,1", xop, plen, 3);
+ 	  avr_asm_len ("%4lpm $ mov %B0,%3 $ adiw %2,1", xop, plen, 3);
+ 	  avr_asm_len ("%4lpm $ mov %C0,%3", xop, plen, 2);
+ 
+ 	  if (REGNO (dest) == REG_Z - 2)
+ 	    {
+ 	      if (!reg_unused_after (insn, all_regs_rtx[REG_31]))
+ 		avr_asm_len ("pop r31", xop, plen, 1);
+ 	    }
+ 	  else if (!reg_unused_after (insn, addr))
+ 	    avr_asm_len ("sbiw %2,2", xop, plen, 1);
+ 
+ 	  break; /* 3 */
+ 
+ 	case 4:
+ 	  avr_asm_len ("%4lpm $ mov %A0,%3 $ adiw %2,1", xop, plen, 3);
+ 	  avr_asm_len ("%4lpm $ mov %B0,%3 $ adiw %2,1", xop, plen, 3);
+ 	  if (REGNO (dest) != REG_Z - 2)
+ 	    {
+ 	      avr_asm_len ("%4lpm $ mov %C0,%3 $ adiw %2,1", xop, plen, 3);
+ 	      avr_asm_len ("%4lpm $ mov %D0,%3", xop, plen, 2);
+ 	      if (!reg_unused_after (insn, addr))
+ 		avr_asm_len ("sbiw %2,3", xop, plen, 1);
+ 	    }
+ 	  else
+ 	    {
+ 	      avr_asm_len ("%4lpm $ push %3 $ adiw %2,1", xop, plen, 3);
+ 	      avr_asm_len ("%4lpm $ mov %D0,%3", xop, plen, 2);
+ 	      avr_asm_len ("pop $C0", xop, plen, 1);
+ 	    }
+ 
+ 	  break; /* 4 */
  	}
  
        break; /* REG */
*************** avr_out_insv (rtx_insn *insn, rtx xop[],
*** 10093,10108 ****
  }
  
  
! /* Output instructions to extract a bit to 8-bit register XOP[0].
!    The input XOP[1] is a register or an 8-bit MEM in the lower I/O range.
!    XOP[2] is the const_int bit position.  Return "".
  
     PLEN != 0: Set *PLEN to the code length in words.  Don't output anything.
     PLEN == 0: Output instructions.  */
  
  const char *
! avr_out_extr (rtx_insn *insn, rtx xop[], int *plen)
  {
    rtx dest = xop[0];
    rtx src = xop[1];
    int bit = INTVAL (xop[2]);
--- 10134,10150 ----
  }
  
  
! /* Output instructions to extract a bit to 8-bit register OP[0].
!    The input OP[1] is a register or an 8-bit MEM in the lower I/O range.
!    OP[2] is the const_int bit position.  Return "".
  
     PLEN != 0: Set *PLEN to the code length in words.  Don't output anything.
     PLEN == 0: Output instructions.  */
  
  const char *
! avr_out_extr (rtx_insn *insn, rtx op[], int *plen)
  {
+   rtx xop[] = { op[0], op[1], op[2] };
    rtx dest = xop[0];
    rtx src = xop[1];
    int bit = INTVAL (xop[2]);
*************** avr_out_extr (rtx_insn *insn, rtx xop[],
*** 10160,10175 ****
  }
  
  
! /* Output instructions to extract a negated bit to 8-bit register XOP[0].
!    The input XOP[1] is an 8-bit register or MEM in the lower I/O range.
!    XOP[2] is the const_int bit position.  Return "".
  
     PLEN != 0: Set *PLEN to the code length in words.  Don't output anything.
     PLEN == 0: Output instructions.  */
  
  const char *
! avr_out_extr_not (rtx_insn * /* insn */, rtx xop[], int *plen)
  {
    rtx dest = xop[0];
    rtx src = xop[1];
    int bit = INTVAL (xop[2]);
--- 10202,10218 ----
  }
  
  
! /* Output instructions to extract a negated bit to 8-bit register OP[0].
!    The input OP[1] is an 8-bit register or MEM in the lower I/O range.
!    OP[2] is the const_int bit position.  Return "".
  
     PLEN != 0: Set *PLEN to the code length in words.  Don't output anything.
     PLEN == 0: Output instructions.  */
  
  const char *
! avr_out_extr_not (rtx_insn * /* insn */, rtx op[], int *plen)
  {
+   rtx xop[] = { op[0], op[1], op[2] };
    rtx dest = xop[0];
    rtx src = xop[1];
    int bit = INTVAL (xop[2]);
*************** avr_out_fract (rtx_insn *insn, rtx opera
*** 10377,10383 ****
  	{
  	  avr_asm_len ("clr __tmp_reg__" CR_TAB
  		       "sbrc %1,0"       CR_TAB
! 		       "dec __tmp_reg__", xop, plen, 1);
  	  sn = src.regno;
  	  if (sn < s0)
  	    {
--- 10420,10426 ----
  	{
  	  avr_asm_len ("clr __tmp_reg__" CR_TAB
  		       "sbrc %1,0"       CR_TAB
! 		       "dec __tmp_reg__", xop, plen, 3);
  	  sn = src.regno;
  	  if (sn < s0)
  	    {
*************** avr_out_fract (rtx_insn *insn, rtx opera
*** 10392,10398 ****
  	    avr_asm_len ("clt"                CR_TAB
  			 "bld __tmp_reg__,7"  CR_TAB
  			 "adc %0,__tmp_reg__",
! 			 &all_regs_rtx[s0], plen, 1);
  	  else
  	    avr_asm_len ("lsr __tmp_reg" CR_TAB
  			 "add %0,__tmp_reg__",
--- 10435,10441 ----
  	    avr_asm_len ("clt"                CR_TAB
  			 "bld __tmp_reg__,7"  CR_TAB
  			 "adc %0,__tmp_reg__",
! 			 &all_regs_rtx[s0], plen, 3);
  	  else
  	    avr_asm_len ("lsr __tmp_reg" CR_TAB
  			 "add %0,__tmp_reg__",
*************** avr_out_fract (rtx_insn *insn, rtx opera
*** 10591,10598 ****
  	  xop[2] = all_regs_rtx[s0];
  	  if (!lsb_in_tmp_reg && !MAY_CLOBBER (s0))
  	    avr_asm_len ("mov __tmp_reg__,%2", xop, plen, 1);
! 	  avr_asm_len ("tst %0" CR_TAB "brpl 0f",
! 		       &all_regs_rtx[src.regno_msb], plen, 2);
  	  if (!lsb_in_tmp_reg)
  	    {
  	      unsigned sn = src.regno;
--- 10634,10641 ----
  	  xop[2] = all_regs_rtx[s0];
  	  if (!lsb_in_tmp_reg && !MAY_CLOBBER (s0))
  	    avr_asm_len ("mov __tmp_reg__,%2", xop, plen, 1);
! 	  avr_asm_len ("tst %0" CR_TAB
! 		       "brpl 0f", &all_regs_rtx[src.regno_msb], plen, 2);
  	  if (!lsb_in_tmp_reg)
  	    {
  	      unsigned sn = src.regno;
*************** avr_output_addr_vec (rtx_insn *labl, rtx
*** 14285,14290 ****
--- 14328,14343 ----
  
    app_disable();
  
+   // AVR-SD: On functional safety devices, each executed instruction must
+   // be followed by a valid opcode.  This is because instruction validation
+   // runs at fetch and decode for the next instruction and while the 2-stage
+   // pipeline is executing the current one.  There is no multilib option for
+   // these devices, so take all multilib variants that contain AVR-SD.
+   const bool maybe_sd = (AVR_HAVE_JMP_CALL
+ 			 && (avr_arch_index == ARCH_AVRXMEGA2
+ 			     || avr_arch_index == ARCH_AVRXMEGA3));
+   bool uses_subsection = false;
+ 
    // Switch to appropriate (sub)section.
  
    if (DECL_SECTION_NAME (current_function_decl)
*************** avr_output_addr_vec (rtx_insn *labl, rtx
*** 14296,14301 ****
--- 14349,14355 ----
  
        switch_to_section (current_function_section ());
        fprintf (stream, "\t.subsection\t1\n");
+       uses_subsection = true;
      }
    else
      {
*************** avr_output_addr_vec (rtx_insn *labl, rtx
*** 14318,14326 ****
  	       AVR_HAVE_JMP_CALL ? "a" : "ax");
      }
  
-   // Output the label that preceeds the table.
- 
    ASM_OUTPUT_ALIGN (stream, 1);
    targetm.asm_out.internal_label (stream, "L", CODE_LABEL_NUMBER (labl));
  
    // Output the table's content.
--- 14372,14392 ----
  	       AVR_HAVE_JMP_CALL ? "a" : "ax");
      }
  
    ASM_OUTPUT_ALIGN (stream, 1);
+ 
+   if (maybe_sd && uses_subsection)
+     {
+       // Insert a valid opcode prior to the first gs() label.
+       // Any valid opcode will do.  Use CLH since it disassembles
+       // more nicely than NOP = 0x0000.  This is all GCC can do.
+       // Other cases, like inserting CLH after the vector table and
+       // after the last instruction, are handled by other parts of
+       // the toolchain.
+       fprintf (stream, "\tclh\n");
+     }
+ 
+   // Output the label that precedes the table.
+ 
    targetm.asm_out.internal_label (stream, "L", CODE_LABEL_NUMBER (labl));
  
    // Output the table's content.
diff -Nrcpad gcc-14.3.0/gcc/config/avr/elf.h gcc-14.3.0-RC-20260619/gcc/config/avr/elf.h
*** gcc-14.3.0/gcc/config/avr/elf.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/avr/elf.h	Fri Jun 19 06:51:02 2026
***************
*** 17,22 ****
--- 17,35 ----
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
  
+ /* defaults.h requires HAVE_INITFINI_ARRAY_SUPPORT to be present
+    in order for attribute "retain" to be recognized.  This is due
+    to some quirks in crtstuff.h -- which isn't even used by avr.
+    All we need is that Binutils supports the "R"etain section flag.
+    If that's the case, define SUPPORTS_SHF_GNU_RETAIN so that
+    defaults.h doesn't define it to 0.  */
+ #if defined(IN_GCC) && !defined(USED_FOR_TARGET) && !defined(GENERATOR_FILE)
+ #include "auto-host.h" /* HAVE_GAS_SHF_GNU_RETAIN */
+ #if HAVE_GAS_SHF_GNU_RETAIN
+ #undef SUPPORTS_SHF_GNU_RETAIN
+ #define SUPPORTS_SHF_GNU_RETAIN 1
+ #endif
+ #endif
  
  /* Overriding some definitions from elfos.h for AVR.  */
  
diff -Nrcpad gcc-14.3.0/gcc/config/avr/specs.h gcc-14.3.0-RC-20260619/gcc/config/avr/specs.h
*** gcc-14.3.0/gcc/config/avr/specs.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/avr/specs.h	Fri Jun 19 06:51:02 2026
*************** along with GCC; see the file COPYING3.
*** 57,63 ****
    "%(asm_errata_skip) "
  
  #define LINK_RELAX_SPEC                         \
!   "%{mrelax:--relax} "
  
  #undef  LINK_SPEC
  #define LINK_SPEC                               \
--- 57,63 ----
    "%(asm_errata_skip) "
  
  #define LINK_RELAX_SPEC                         \
!   "%{!r:%{mrelax:--relax}} "
  
  #undef  LINK_SPEC
  #define LINK_SPEC                               \
diff -Nrcpad gcc-14.3.0/gcc/config/gnu.h gcc-14.3.0-RC-20260619/gcc/config/gnu.h
*** gcc-14.3.0/gcc/config/gnu.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/gnu.h	Fri Jun 19 06:51:02 2026
*************** You should have received a copy of the G
*** 19,24 ****
--- 19,28 ----
  along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  */
  
+ /* C libraries used on GNU/Hurd.  */
+ #define OPTION_GLIBC_P(opts)	(DEFAULT_LIBC == LIBC_GLIBC)
+ #define OPTION_GLIBC		OPTION_GLIBC_P (&global_options)
+ 
  #undef GNU_USER_TARGET_OS_CPP_BUILTINS
  #define GNU_USER_TARGET_OS_CPP_BUILTINS()		\
      do {					\
diff -Nrcpad gcc-14.3.0/gcc/config/i386/amxbf16intrin.h gcc-14.3.0-RC-20260619/gcc/config/i386/amxbf16intrin.h
*** gcc-14.3.0/gcc/config/i386/amxbf16intrin.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/amxbf16intrin.h	Fri Jun 19 06:51:02 2026
***************
*** 36,43 ****
  
  #if defined(__x86_64__)
  #define _tile_dpbf16ps_internal(dst,src1,src2)					\
!   __asm__ volatile\
!   ("{tdpbf16ps\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|tdpbf16ps\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::)
  
  #define _tile_dpbf16ps(dst,src1,src2)					\
    _tile_dpbf16ps_internal (dst, src1, src2)
--- 36,45 ----
  
  #if defined(__x86_64__)
  #define _tile_dpbf16ps_internal(dst,src1,src2)					\
!   __asm__ volatile								\
!   ("{tdpbf16ps\t%%tmm%c[_src2], %%tmm%c[_src1], %%tmm%c[_dst]			\
!     |tdpbf16ps\ttmm%c[_dst], tmm%c[_src1], tmm%c[_src2]}"			\
!     :: [_dst]"i"(dst), [_src1]"i"(src1), [_src2]"i"(src2))
  
  #define _tile_dpbf16ps(dst,src1,src2)					\
    _tile_dpbf16ps_internal (dst, src1, src2)
diff -Nrcpad gcc-14.3.0/gcc/config/i386/amxcomplexintrin.h gcc-14.3.0-RC-20260619/gcc/config/i386/amxcomplexintrin.h
*** gcc-14.3.0/gcc/config/i386/amxcomplexintrin.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/amxcomplexintrin.h	Fri Jun 19 06:51:02 2026
***************
*** 35,47 ****
  #endif /* __AMX_COMPLEX__ */
  
  #if defined(__x86_64__)
! #define _tile_cmmimfp16ps_internal(src1_dst,src2,src3)				\
!   __asm__ volatile\
!   ("{tcmmimfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmimfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::)
  
! #define _tile_cmmrlfp16ps_internal(src1_dst,src2,src3)				\
!   __asm__ volatile\
!   ("{tcmmrlfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmrlfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::)
  
  #define _tile_cmmimfp16ps(src1_dst,src2,src3)					\
    _tile_cmmimfp16ps_internal (src1_dst, src2, src3)
--- 35,51 ----
  #endif /* __AMX_COMPLEX__ */
  
  #if defined(__x86_64__)
! #define _tile_cmmimfp16ps_internal(src1_dst,src2,src3)			  \
!   __asm__ volatile							  \
!   ("{tcmmimfp16ps\t%%tmm%c[_src3], %%tmm%c[_src2], %%tmm%c[_src1_dst]	  \
!     |tcmmimfp16ps\ttmm%c[_src1_dst], tmm%c[_src2], tmm%c[_src3]}"	  \
!     :: [_src1_dst]"i"(src1_dst), [_src2]"i"(src2), [_src3]"i"(src3))
  
! #define _tile_cmmrlfp16ps_internal(src1_dst,src2,src3)			  \
!   __asm__ volatile							  \
!   ("{tcmmrlfp16ps\t%%tmm%c[_src3], %%tmm%c[_src2], %%tmm%c[_src1_dst]	  \
!     |tcmmrlfp16ps\ttmm%c[_src1_dst], tmm%c[_src2], tmm%c[_src3]}"	  \
!     :: [_src1_dst]"i"(src1_dst), [_src2]"i"(src2), [_src3]"i"(src3))
  
  #define _tile_cmmimfp16ps(src1_dst,src2,src3)					\
    _tile_cmmimfp16ps_internal (src1_dst, src2, src3)
diff -Nrcpad gcc-14.3.0/gcc/config/i386/amxfp16intrin.h gcc-14.3.0-RC-20260619/gcc/config/i386/amxfp16intrin.h
*** gcc-14.3.0/gcc/config/i386/amxfp16intrin.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/amxfp16intrin.h	Fri Jun 19 06:51:02 2026
***************
*** 29,37 ****
  #define _AMXFP16INTRIN_H_INCLUDED
  
  #if defined(__x86_64__)
! #define _tile_dpfp16ps_internal(dst,src1,src2)			\
!   __asm__ volatile \
!   ("{tdpfp16ps\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|tdpfp16ps\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::)
  
  #define _tile_dpfp16ps(dst,src1,src2)				\
    _tile_dpfp16ps_internal (dst,src1,src2)
--- 29,39 ----
  #define _AMXFP16INTRIN_H_INCLUDED
  
  #if defined(__x86_64__)
! #define _tile_dpfp16ps_internal(dst,src1,src2)				\
!   __asm__ volatile							\
!   ("{tdpfp16ps\t%%tmm%c[_src2], %%tmm%c[_src1], %%tmm%c[_dst]		\
!     |tdpfp16ps\ttmm%c[_dst], tmm%c[_src1], tmm%c[_src2]}"		\
!     :: [_dst]"i"(dst), [_src1]"i"(src1), [_src2]"i"(src2))
  
  #define _tile_dpfp16ps(dst,src1,src2)				\
    _tile_dpfp16ps_internal (dst,src1,src2)
diff -Nrcpad gcc-14.3.0/gcc/config/i386/amxint8intrin.h gcc-14.3.0-RC-20260619/gcc/config/i386/amxint8intrin.h
*** gcc-14.3.0/gcc/config/i386/amxint8intrin.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/amxint8intrin.h	Fri Jun 19 06:51:02 2026
***************
*** 37,43 ****
  #if defined(__x86_64__)
  #define _tile_int8_dp_internal(name,dst,src1,src2)					\
    __asm__ volatile							\
!   ("{"#name"\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|"#name"\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::)
  
  #define _tile_dpbssd(dst,src1,src2)					\
    _tile_int8_dp_internal (tdpbssd, dst, src1, src2)
--- 37,45 ----
  #if defined(__x86_64__)
  #define _tile_int8_dp_internal(name,dst,src1,src2)					\
    __asm__ volatile							\
!   ("{"#name"\t%%tmm%c[_src2], %%tmm%c[_src1], %%tmm%c[_dst]		\
!    |"#name"\ttmm%c[_dst], tmm%c[_src1], tmm%c[_src2]}"		\
!    ::[_dst]"i"(dst),[_src1]"i"(src1),[_src2]"i"(src2))
  
  #define _tile_dpbssd(dst,src1,src2)					\
    _tile_int8_dp_internal (tdpbssd, dst, src1, src2)
diff -Nrcpad gcc-14.3.0/gcc/config/i386/amxtileintrin.h gcc-14.3.0-RC-20260619/gcc/config/i386/amxtileintrin.h
*** gcc-14.3.0/gcc/config/i386/amxtileintrin.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/amxtileintrin.h	Fri Jun 19 06:51:02 2026
*************** _tile_release (void)
*** 61,92 ****
  
  #define _tile_loadd_internal(dst,base,stride)				\
    __asm__ volatile							\
!   ("{tileloadd\t(%0,%1,1), %%tmm"#dst"|tileloadd\t%%tmm"#dst", [%0+%1*1]}" \
!    :: "r" ((const void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)))
  
  #define _tile_stream_loadd(dst,base,stride)		\
    _tile_stream_loadd_internal (dst, base, stride)
  
  #define _tile_stream_loadd_internal(dst,base,stride)			\
    __asm__ volatile							\
!   ("{tileloaddt1\t(%0,%1,1), %%tmm"#dst"|tileloaddt1\t%%tmm"#dst", [%0+%1*1]}" \
!    :: "r" ((const void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)))
  
  #define _tile_stored(dst,base,stride)		\
    _tile_stored_internal (dst, base, stride)
  
  #define _tile_stored_internal(src,base,stride)				\
    __asm__ volatile							\
!   ("{tilestored\t%%tmm"#src", (%0,%1,1)|tilestored\t[%0+%1*1], %%tmm"#src"}" \
!    :: "r" ((void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)) \
!    : "memory")
  
  #define _tile_zero(dst)				\
    _tile_zero_internal (dst)
  
! #define _tile_zero_internal(dst)		\
!   __asm__ volatile				\
!   ("tilezero\t%%tmm"#dst ::)
  
  #endif
  
--- 61,92 ----
  
  #define _tile_loadd_internal(dst,base,stride)				\
    __asm__ volatile							\
!   ("{tileloadd\t(%0,%1,1), %%tmm%c[_dst]|tileloadd\ttmm%c[_dst], [%0+%1*1]}" \
!   :: "r" ((const void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)), [_dst]"i"(dst))
  
  #define _tile_stream_loadd(dst,base,stride)		\
    _tile_stream_loadd_internal (dst, base, stride)
  
  #define _tile_stream_loadd_internal(dst,base,stride)			\
    __asm__ volatile							\
!   ("{tileloaddt1\t(%0,%1,1), %%tmm%c[_dst]|tileloaddt1\ttmm%c[_dst], [%0+%1*1]}" \
!   :: "r" ((const void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)), [_dst]"i"(dst))
  
  #define _tile_stored(dst,base,stride)		\
    _tile_stored_internal (dst, base, stride)
  
  #define _tile_stored_internal(src,base,stride)				\
    __asm__ volatile							\
!   ("{tilestored\t%%tmm%c[_src], (%0,%1,1)|tilestored\t[%0+%1*1], tmm%c[_src]}" \
!   :: "r" ((void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)), [_src]"i"(src) \
!   : "memory")
  
  #define _tile_zero(dst)				\
    _tile_zero_internal (dst)
  
! #define _tile_zero_internal(dst)					\
!   __asm__ volatile							\
!   ("{tilezero\t%%tmm%c[_dst]|tilezero\ttmm%c[_dst]}" :: [_dst]"i"(dst))
  
  #endif
  
diff -Nrcpad gcc-14.3.0/gcc/config/i386/driver-i386.cc gcc-14.3.0-RC-20260619/gcc/config/i386/driver-i386.cc
*** gcc-14.3.0/gcc/config/i386/driver-i386.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/driver-i386.cc	Fri Jun 19 06:51:02 2026
*************** const char *host_detect_local_cpu (int a
*** 658,675 ****
  		}
  	      else if (has_feature (FEATURE_AVX))
  		{
- 		  /* Assume Panther Lake.  */
- 		  if (has_feature (FEATURE_PREFETCHI))
- 		    cpu = "pantherlake";
  		  /* Assume Clearwater Forest.  */
! 		  else if (has_feature (FEATURE_USER_MSR))
  		    cpu = "clearwaterforest";
- 		  /* Assume Arrow Lake S.  */
  		  else if (has_feature (FEATURE_SM3))
! 		    cpu = "arrowlake-s";
  		  /* Assume Sierra Forest.  */
! 		  else if (has_feature (FEATURE_AVXVNNIINT8))
  		    cpu = "sierraforest";
  		  /* Assume Alder Lake.  */
  		  else if (has_feature (FEATURE_SERIALIZE))
  		    cpu = "alderlake";
--- 658,681 ----
  		}
  	      else if (has_feature (FEATURE_AVX))
  		{
  		  /* Assume Clearwater Forest.  */
! 		  if (has_feature (FEATURE_USER_MSR))
  		    cpu = "clearwaterforest";
  		  else if (has_feature (FEATURE_SM3))
! 		    {
! 			if (has_feature (FEATURE_KL))
! 			  /* Assume Arrow Lake S.  */
! 			  cpu = "arrowlake-s";
! 			else
! 			  /* Assume Panther Lake.  */
! 			  cpu = "pantherlake";
! 		    }
  		  /* Assume Sierra Forest.  */
! 		  else if (has_feature (FEATURE_CLDEMOTE))
  		    cpu = "sierraforest";
+ 		  /* Assume Arrow Lake.  */
+ 		  else if (has_feature (FEATURE_AVXVNNIINT8))
+ 		    cpu = "arrowlake";
  		  /* Assume Alder Lake.  */
  		  else if (has_feature (FEATURE_SERIALIZE))
  		    cpu = "alderlake";
diff -Nrcpad gcc-14.3.0/gcc/config/i386/host-mingw32.cc gcc-14.3.0-RC-20260619/gcc/config/i386/host-mingw32.cc
*** gcc-14.3.0/gcc/config/i386/host-mingw32.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/host-mingw32.cc	Fri Jun 19 06:51:02 2026
*************** mingw32_gt_pch_use_address (void *&addr,
*** 135,141 ****
       and earlier, backslashes are invalid in object name.  So, we need
       to check if we are on Windows2000 or higher.  */
    OSVERSIONINFO version_info;
-   int r;
  
    version_info.dwOSVersionInfoSize = sizeof (version_info);
  
--- 135,140 ----
*************** mingw32_gt_pch_use_address (void *&addr,
*** 169,193 ****
        return -1; 
      }
  
!   /* Retry five times, as here might occure a race with multiple gcc's
!      instances at same time.  */
!   for (r = 0; r < 5; r++)
!    {
!       mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
! 				   size, addr);
!       if (mmap_addr == addr)
! 	break;
!       if (r != 4)
!         Sleep (500);
!    }
!       
!   if (mmap_addr != addr)
      {
!       w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
!       CloseHandle(mmap_handle);
!       return  -1;
      }
  
    return 1;
  }
  
--- 168,191 ----
        return -1; 
      }
  
!   /* Try mapping the file at `addr`.  */
!   mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
! 			       size, addr);
!   if (mmap_addr == NULL)
      {
!       /* We could not map the file at its original address, so let the
! 	 system choose a different one. The PCH can be relocated later.  */
!       mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
! 				   size, NULL);
!       if (mmap_addr == NULL)
! 	{
! 	  w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
! 	  CloseHandle(mmap_handle);
! 	  return  -1;
! 	}
      }
  
+   addr = mmap_addr;
    return 1;
  }
  
diff -Nrcpad gcc-14.3.0/gcc/config/i386/i386-expand.cc gcc-14.3.0-RC-20260619/gcc/config/i386/i386-expand.cc
*** gcc-14.3.0/gcc/config/i386/i386-expand.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/i386-expand.cc	Fri Jun 19 06:51:02 2026
*************** ix86_expand_copysign (rtx operands[])
*** 2344,2377 ****
      vdest = gen_reg_rtx (vmode);
    else
      dest = NULL_RTX;
!   op1 = lowpart_subreg (vmode, force_reg (mode, operands[2]), mode);
    mask = ix86_build_signbit_mask (vmode, TARGET_AVX512F && mode != HFmode, 0);
  
!   if (CONST_DOUBLE_P (operands[1]))
      {
!       op0 = simplify_unary_operation (ABS, mode, operands[1], mode);
!       /* Optimize for 0, simplify b = copy_signf (0.0f, a) to b = mask & a.  */
!       if (op0 == CONST0_RTX (mode))
  	{
! 	  emit_move_insn (vdest, gen_rtx_AND (vmode, mask, op1));
! 	  if (dest)
! 	    emit_move_insn (dest, lowpart_subreg (mode, vdest, vmode));
! 	  return;
  	}
! 
!       if (GET_MODE_SIZE (mode) < 16)
! 	op0 = ix86_build_const_vector (vmode, false, op0);
!       op0 = force_reg (vmode, op0);
      }
    else
!     op0 = lowpart_subreg (vmode, force_reg (mode, operands[1]), mode);
  
    op2 = gen_reg_rtx (vmode);
    op3 = gen_reg_rtx (vmode);
!   emit_move_insn (op2, gen_rtx_AND (vmode,
! 				    gen_rtx_NOT (vmode, mask),
! 				    op0));
!   emit_move_insn (op3, gen_rtx_AND (vmode, mask, op1));
    emit_move_insn (vdest, gen_rtx_IOR (vmode, op2, op3));
    if (dest)
      emit_move_insn (dest, lowpart_subreg (mode, vdest, vmode));
--- 2344,2387 ----
      vdest = gen_reg_rtx (vmode);
    else
      dest = NULL_RTX;
!   op1 = lowpart_subreg (vmode, force_reg (mode, operands[1]), mode);
    mask = ix86_build_signbit_mask (vmode, TARGET_AVX512F && mode != HFmode, 0);
  
!   if (CONST_DOUBLE_P (operands[2]))
      {
!       if (real_isneg (CONST_DOUBLE_REAL_VALUE (operands[2])))
! 	/* Simplify b = copysign (a, negative) to b = mask | a.  */
! 	op1 = gen_rtx_IOR (vmode, mask, op1);
!       else
  	{
! 	  /* Simplify b = copysign (a, positive) to b = invert_mask & a.  */
! 	  rtx invert_mask
! 	    = ix86_build_signbit_mask (vmode,
! 				       TARGET_AVX512F && mode != HFmode,
! 				       true);
! 	  op1 = gen_rtx_AND (vmode, invert_mask, op1);
  	}
!       emit_move_insn (vdest, op1);
!       if (dest)
! 	emit_move_insn (dest, lowpart_subreg (mode, vdest, vmode));
!       return;
      }
    else
!     op0 = lowpart_subreg (vmode, force_reg (mode, operands[2]), mode);
  
    op2 = gen_reg_rtx (vmode);
    op3 = gen_reg_rtx (vmode);
!   rtx invert_mask;
!   /* NB: Generate vmovdqa, vpandn, vpand, vpor for AVX and generate pand,
!      pand, por for SSE.  */
!   if (TARGET_AVX)
!     invert_mask = gen_rtx_NOT (vmode, mask);
!   else
!     invert_mask = ix86_build_signbit_mask (vmode,
! 					   TARGET_AVX512F && mode != HFmode,
! 					   true);
!   emit_move_insn (op2, gen_rtx_AND (vmode, invert_mask, op1));
!   emit_move_insn (op3, gen_rtx_AND (vmode, mask, op0));
    emit_move_insn (vdest, gen_rtx_IOR (vmode, op2, op3));
    if (dest)
      emit_move_insn (dest, lowpart_subreg (mode, vdest, vmode));
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13551,13557 ****
  	for (i = 0; i < 3; i++)
  	  xmm_regs[i] = gen_rtx_REG (V2DImode, GET_SSE_REGNO (i));
  
! 	if (target == 0)
  	  target = gen_reg_rtx (SImode);
  
  	emit_insn (gen_encodekey128u32 (target, op0));
--- 13561,13567 ----
  	for (i = 0; i < 3; i++)
  	  xmm_regs[i] = gen_rtx_REG (V2DImode, GET_SSE_REGNO (i));
  
! 	if (target == 0 || !register_operand (target, SImode))
  	  target = gen_reg_rtx (SImode);
  
  	emit_insn (gen_encodekey128u32 (target, op0));
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13594,13600 ****
  	for (i = 0; i < 4; i++)
  	  xmm_regs[i] = gen_rtx_REG (V2DImode, GET_SSE_REGNO (i));
  
! 	if (target == 0)
  	  target = gen_reg_rtx (SImode);
  
  	emit_insn (gen_encodekey256u32 (target, op0));
--- 13604,13610 ----
  	for (i = 0; i < 4; i++)
  	  xmm_regs[i] = gen_rtx_REG (V2DImode, GET_SSE_REGNO (i));
  
! 	if (target == 0 || !register_operand (target, SImode))
  	  target = gen_reg_rtx (SImode);
  
  	emit_insn (gen_encodekey256u32 (target, op0));
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13730,13736 ****
  	  }
  	else
  	  {
! 	    if (target == 0)
  	      target = gen_reg_rtx (DImode);
  	    icode = CODE_FOR_urdmsr;
  	    op1 = op0;
--- 13740,13746 ----
  	  }
  	else
  	  {
! 	    if (target == 0 || !register_operand (target, DImode))
  	      target = gen_reg_rtx (DImode);
  	    icode = CODE_FOR_urdmsr;
  	    op1 = op0;
diff -Nrcpad gcc-14.3.0/gcc/config/i386/i386.cc gcc-14.3.0-RC-20260619/gcc/config/i386/i386.cc
*** gcc-14.3.0/gcc/config/i386/i386.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/i386.cc	Fri Jun 19 06:51:02 2026
*************** static GTY(()) rtx ix86_tls_symbol;
*** 12119,12124 ****
--- 12119,12146 ----
  static rtx
  ix86_tls_get_addr (void)
  {
+   if (cfun->machine->call_saved_registers
+       == TYPE_NO_CALLER_SAVED_REGISTERS)
+     {
+       /* __tls_get_addr doesn't preserve vector registers.  When a
+ 	 function with no_caller_saved_registers attribute calls
+ 	 __tls_get_addr, YMM and ZMM registers will be clobbered.
+ 	 Issue an error and suggest -mtls-dialect=gnu2 in this case.  */
+       if (cfun->machine->func_type == TYPE_NORMAL)
+ 	error (G_("%<-mtls-dialect=gnu2%> must be used with a function"
+ 		  " with the %<no_caller_saved_registers%> attribute"));
+       else
+ 	error (cfun->machine->func_type == TYPE_EXCEPTION
+ 	       ? G_("%<-mtls-dialect=gnu2%> must be used with an"
+ 		    " exception service routine")
+ 	       : G_("%<-mtls-dialect=gnu2%> must be used with an"
+ 		    " interrupt service routine"));
+       /* Don't issue the same error twice.  */
+       cfun->machine->func_type = TYPE_NORMAL;
+       cfun->machine->call_saved_registers
+ 	= TYPE_DEFAULT_CALL_SAVED_REGISTERS;
+     }
+ 
    if (!ix86_tls_symbol)
      {
        const char *sym
*************** legitimize_tls_address (rtx x, enum tls_
*** 12218,12228 ****
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
  	      rtx_insn *insns;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr));
  	      insns = get_insns ();
  	      end_sequence ();
  
--- 12240,12251 ----
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ 	      rtx rdi = gen_rtx_REG (Pmode, DI_REG);
  	      rtx_insn *insns;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr, rdi));
  	      insns = get_insns ();
  	      end_sequence ();
  
*************** legitimize_tls_address (rtx x, enum tls_
*** 12272,12283 ****
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
  	      rtx_insn *insns;
  	      rtx eqv;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr));
  	      insns = get_insns ();
  	      end_sequence ();
  
--- 12295,12307 ----
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ 	      rtx rdi = gen_rtx_REG (Pmode, DI_REG);
  	      rtx_insn *insns;
  	      rtx eqv;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi));
  	      insns = get_insns ();
  	      end_sequence ();
  
*************** avx_vpermilp_parallel (rtx par, machine_
*** 19999,20005 ****
  	}
        for (i = 2; i < 4; ++i)
  	{
! 	  if (ipar[i] < 2)
  	    return 0;
  	  mask |= (ipar[i] - 2) << i;
  	}
--- 20023,20029 ----
  	}
        for (i = 2; i < 4; ++i)
  	{
! 	  if (ipar[i] < 2 || ipar[i] >= 4)
  	    return 0;
  	  mask |= (ipar[i] - 2) << i;
  	}
diff -Nrcpad gcc-14.3.0/gcc/config/i386/i386.h gcc-14.3.0-RC-20260619/gcc/config/i386/i386.h
*** gcc-14.3.0/gcc/config/i386/i386.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/i386.h	Fri Jun 19 06:51:02 2026
*************** constexpr wide_int_bitmask PTA_GOLDMONT_
*** 2415,2426 ****
    | PTA_SGX | PTA_PTWRITE;
  constexpr wide_int_bitmask PTA_TREMONT = PTA_GOLDMONT_PLUS | PTA_CLWB
    | PTA_GFNI | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_CLDEMOTE | PTA_WAITPKG;
! constexpr wide_int_bitmask PTA_ALDERLAKE = PTA_TREMONT | PTA_ADX | PTA_AVX
    | PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_LZCNT
    | PTA_PCONFIG | PTA_PKU | PTA_VAES | PTA_VPCLMULQDQ | PTA_SERIALIZE
    | PTA_HRESET | PTA_KL | PTA_WIDEKL | PTA_AVXVNNI;
! constexpr wide_int_bitmask PTA_SIERRAFOREST = PTA_ALDERLAKE | PTA_AVXIFMA
!   | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_ENQCMD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_GRANITERAPIDS = PTA_SAPPHIRERAPIDS | PTA_AMX_FP16
    | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_GRANITERAPIDS_D = PTA_GRANITERAPIDS
--- 2415,2428 ----
    | PTA_SGX | PTA_PTWRITE;
  constexpr wide_int_bitmask PTA_TREMONT = PTA_GOLDMONT_PLUS | PTA_CLWB
    | PTA_GFNI | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_CLDEMOTE | PTA_WAITPKG;
! constexpr wide_int_bitmask PTA_ALDERLAKE = PTA_GOLDMONT_PLUS | PTA_CLWB
!   | PTA_GFNI | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_WAITPKG | PTA_ADX | PTA_AVX
    | PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_LZCNT
    | PTA_PCONFIG | PTA_PKU | PTA_VAES | PTA_VPCLMULQDQ | PTA_SERIALIZE
    | PTA_HRESET | PTA_KL | PTA_WIDEKL | PTA_AVXVNNI;
! constexpr wide_int_bitmask PTA_SIERRAFOREST = PTA_ALDERLAKE | PTA_CLDEMOTE
!   | PTA_AVXIFMA | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD
!   | PTA_ENQCMD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_GRANITERAPIDS = PTA_SAPPHIRERAPIDS | PTA_AMX_FP16
    | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_GRANITERAPIDS_D = PTA_GRANITERAPIDS
*************** constexpr wide_int_bitmask PTA_ARROWLAKE
*** 2430,2439 ****
    | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_ARROWLAKE_S = PTA_ARROWLAKE | PTA_AVXVNNIINT16
    | PTA_SHA512 | PTA_SM3 | PTA_SM4;
! constexpr wide_int_bitmask PTA_CLEARWATERFOREST = PTA_SIERRAFOREST
!   | PTA_AVXVNNIINT16 | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_USER_MSR
!   | PTA_PREFETCHI;
! constexpr wide_int_bitmask PTA_PANTHERLAKE = PTA_ARROWLAKE_S | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_KNM = PTA_KNL | PTA_AVX5124VNNIW
    | PTA_AVX5124FMAPS | PTA_AVX512VPOPCNTDQ;
  
--- 2432,2442 ----
    | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_ARROWLAKE_S = PTA_ARROWLAKE | PTA_AVXVNNIINT16
    | PTA_SHA512 | PTA_SM3 | PTA_SM4;
! constexpr wide_int_bitmask PTA_CLEARWATERFOREST =
!   (PTA_SIERRAFOREST & (~(PTA_KL | PTA_WIDEKL))) | PTA_AVXVNNIINT16 | PTA_SHA512
!   | PTA_SM3 | PTA_SM4 | PTA_USER_MSR | PTA_PREFETCHI;
! constexpr wide_int_bitmask PTA_PANTHERLAKE =
!   (PTA_ARROWLAKE_S & (~(PTA_KL | PTA_WIDEKL)));
  constexpr wide_int_bitmask PTA_KNM = PTA_KNL | PTA_AVX5124VNNIW
    | PTA_AVX5124FMAPS | PTA_AVX512VPOPCNTDQ;
  
diff -Nrcpad gcc-14.3.0/gcc/config/i386/i386.md gcc-14.3.0-RC-20260619/gcc/config/i386/i386.md
*** gcc-14.3.0/gcc/config/i386/i386.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/i386.md	Fri Jun 19 06:51:02 2026
***************
*** 2332,2353 ****
     (set_attr "mode" "SI")
     (set_attr "length_immediate" "0")])
  
! (define_insn "*mov<mode>_and"
    [(set (match_operand:SWI248 0 "memory_operand" "=m")
  	(match_operand:SWI248 1 "const0_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "and{<imodesuffix>}\t{%1, %0|%0, %1}"
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
  
! (define_insn "*mov<mode>_or"
    [(set (match_operand:SWI248 0 "nonimmediate_operand" "=rm")
  	(match_operand:SWI248 1 "constm1_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "or{<imodesuffix>}\t{%1, %0|%0, %1}"
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
--- 2332,2363 ----
     (set_attr "mode" "SI")
     (set_attr "length_immediate" "0")])
  
! ;; Generate shorter "and $0,mem" for -Oz.  Split it to "mov $0,mem"
! ;; otherwise.
! (define_insn_and_split "*mov<mode>_and"
    [(set (match_operand:SWI248 0 "memory_operand" "=m")
  	(match_operand:SWI248 1 "const0_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "and{<imodesuffix>}\t{%1, %0|%0, %1}"
+   "&& !(optimize_insn_for_size_p () && optimize_size > 1)"
+   [(set (match_dup 0) (match_dup 1))]
+   ""
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
  
! ;; Generate shorter "or $-1,mem" for -Oz.  Split it to "mov $-1,mem"
! ;; otherwise.
! (define_insn_and_split "*mov<mode>_or"
    [(set (match_operand:SWI248 0 "nonimmediate_operand" "=rm")
  	(match_operand:SWI248 1 "constm1_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "or{<imodesuffix>}\t{%1, %0|%0, %1}"
+   "&& !(optimize_insn_for_size_p () && optimize_size > 1)"
+   [(set (match_dup 0) (match_dup 1))]
+   ""
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
***************
*** 2852,2857 ****
--- 2862,2869 ----
  	(match_operand:SWI248 1 "const_int_operand"))]
    "optimize_insn_for_size_p () && optimize_size > 1
     && operands[1] != const0_rtx
+    && (operands[1] != constm1_rtx
+        || (<MODE>mode == DImode && LEGACY_INT_REG_P (operands[0])))
     && IN_RANGE (INTVAL (operands[1]), -128, 127)
     && !ix86_red_zone_used
     && REGNO (operands[0]) != SP_REG"
***************
*** 4876,4882 ****
    "TARGET_64BIT"
    "@
     {cltq|cdqe}
!    movs{lq|x}\t{%1, %0|%0, %1}"
    [(set_attr "type" "imovx")
     (set_attr "mode" "DI")
     (set_attr "prefix_0f" "0")
--- 4888,4894 ----
    "TARGET_64BIT"
    "@
     {cltq|cdqe}
!    movs{lq|xd}\t{%1, %0|%0, %1}"
    [(set_attr "type" "imovx")
     (set_attr "mode" "DI")
     (set_attr "prefix_0f" "0")
***************
*** 14072,14079 ****
  
  (define_expand "copysign<mode>3"
    [(match_operand:SSEMODEF 0 "register_operand")
!    (match_operand:SSEMODEF 1 "nonmemory_operand")
!    (match_operand:SSEMODEF 2 "register_operand")]
    "(SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
     || (TARGET_SSE && (<MODE>mode == TFmode))
     || (TARGET_AVX512FP16 && (<MODE>mode ==HFmode))"
--- 14084,14091 ----
  
  (define_expand "copysign<mode>3"
    [(match_operand:SSEMODEF 0 "register_operand")
!    (match_operand:SSEMODEF 1 "register_operand")
!    (match_operand:SSEMODEF 2 "nonmemory_operand")]
    "(SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
     || (TARGET_SSE && (<MODE>mode == TFmode))
     || (TARGET_AVX512FP16 && (<MODE>mode ==HFmode))"
***************
*** 21114,21120 ****
  	 (match_operand 3)))
     (unspec:P [(match_operand 1 "tls_symbolic_operand")
  	      (reg:P SP_REG)]
! 	     UNSPEC_TLS_GD)]
    "TARGET_64BIT"
  {
    if (!TARGET_X32)
--- 21126,21133 ----
  	 (match_operand 3)))
     (unspec:P [(match_operand 1 "tls_symbolic_operand")
  	      (reg:P SP_REG)]
! 	     UNSPEC_TLS_GD)
!    (clobber (match_operand:P 4 "register_operand" "=D"))]
    "TARGET_64BIT"
  {
    if (!TARGET_X32)
***************
*** 21131,21137 ****
         Use data16 prefix instead, which doesn't have this problem.  */
      fputs ("\tdata16", asm_out_file);
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
    if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
      fputs (ASM_SHORT "0x6666\n", asm_out_file);
    else
--- 21144,21150 ----
         Use data16 prefix instead, which doesn't have this problem.  */
      fputs ("\tdata16", asm_out_file);
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %q4|%q4, %E1@tlsgd[rip]}", operands);
    if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
      fputs (ASM_SHORT "0x6666\n", asm_out_file);
    else
***************
*** 21155,21168 ****
  	 (match_operand 4)))
     (unspec:DI [(match_operand 1 "tls_symbolic_operand")
  	       (reg:DI SP_REG)]
! 	      UNSPEC_TLS_GD)]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[3]) == CONST
     && GET_CODE (XEXP (operands[3], 0)) == UNSPEC
     && XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
    output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
    return "call\t{*%%rax|rax}";
--- 21168,21182 ----
  	 (match_operand 4)))
     (unspec:DI [(match_operand 1 "tls_symbolic_operand")
  	       (reg:DI SP_REG)]
! 	      UNSPEC_TLS_GD)
!    (clobber (match_operand:DI 5 "register_operand" "=D"))]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[3]) == CONST
     && GET_CODE (XEXP (operands[3], 0)) == UNSPEC
     && XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %5|%5, %E1@tlsgd[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
    output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
    return "call\t{*%%rax|rax}";
***************
*** 21178,21184 ****
  	   (const_int 0)))
       (unspec:P [(match_operand 1 "tls_symbolic_operand")
  		(reg:P SP_REG)]
! 	       UNSPEC_TLS_GD)])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
--- 21192,21199 ----
  	   (const_int 0)))
       (unspec:P [(match_operand 1 "tls_symbolic_operand")
  		(reg:P SP_REG)]
! 	       UNSPEC_TLS_GD)
!      (clobber (match_operand:P 3 "register_operand"))])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
***************
*** 21229,21239 ****
  	(call:P
  	 (mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
  	 (match_operand 2)))
!    (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)]
    "TARGET_64BIT"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
    if (TARGET_SUN_TLS)
      return "call\t%p1@plt";
    if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
--- 21244,21255 ----
  	(call:P
  	 (mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
  	 (match_operand 2)))
!    (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
!    (clobber (match_operand:P 3 "register_operand" "=D"))]
    "TARGET_64BIT"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %q3|%q3, %&@tlsld[rip]}", operands);
    if (TARGET_SUN_TLS)
      return "call\t%p1@plt";
    if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
***************
*** 21249,21262 ****
  	 (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
  			  (match_operand:DI 2 "immediate_operand" "i")))
  	 (match_operand 3)))
!    (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[2]) == CONST
     && GET_CODE (XEXP (operands[2], 0)) == UNSPEC
     && XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
    output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
    return "call\t{*%%rax|rax}";
--- 21265,21279 ----
  	 (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
  			  (match_operand:DI 2 "immediate_operand" "i")))
  	 (match_operand 3)))
!    (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)
!    (clobber (match_operand:DI 4 "register_operand" "=D"))]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[2]) == CONST
     && GET_CODE (XEXP (operands[2], 0)) == UNSPEC
     && XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %4|%4, %&@tlsld[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
    output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
    return "call\t{*%%rax|rax}";
***************
*** 21270,21276 ****
  	   (call:P
  	    (mem:QI (match_operand 1))
  	    (const_int 0)))
!       (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
--- 21287,21294 ----
  	   (call:P
  	    (mem:QI (match_operand 1))
  	    (const_int 0)))
!       (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
!       (clobber (match_operand:P 2 "register_operand"))])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
***************
*** 24705,24711 ****
    [(set (match_operand:HF 0 "nonimmediate_operand" "=v,m,v")
  	(unspec:HF
  	  [(match_operand:HF 1 "nonimmediate_operand" "m,v,v")
! 	   (match_operand:HF 2 "nonimm_or_0_operand" "0C,0C,0C")
  	   (match_operand:QI 3 "register_operand" "Yk,Yk,Yk")]
  	  UNSPEC_MOVCC_MASK))]
    "TARGET_AVX512FP16"
--- 24723,24729 ----
    [(set (match_operand:HF 0 "nonimmediate_operand" "=v,m,v")
  	(unspec:HF
  	  [(match_operand:HF 1 "nonimmediate_operand" "m,v,v")
! 	   (match_operand:HF 2 "nonimm_or_0_operand" "0C,0,0C")
  	   (match_operand:QI 3 "register_operand" "Yk,Yk,Yk")]
  	  UNSPEC_MOVCC_MASK))]
    "TARGET_AVX512FP16"
***************
*** 25745,25751 ****
  {
    output_asm_insn ("mov{<imodesuffix>}\t{%3, %<k>1|%<k>1, %3}", operands);
    output_asm_insn ("mov{<imodesuffix>}\t{%<k>1, %0|%0, %<k>1}", operands);
!   return "movs{lq|x}\t{%2, %1|%1, %2}";
  }
    [(set_attr "type" "multi")
     (set_attr "length" "24")])
--- 25763,25769 ----
  {
    output_asm_insn ("mov{<imodesuffix>}\t{%3, %<k>1|%<k>1, %3}", operands);
    output_asm_insn ("mov{<imodesuffix>}\t{%<k>1, %0|%0, %<k>1}", operands);
!   return "movs{lq|xd}\t{%2, %1|%1, %2}";
  }
    [(set_attr "type" "multi")
     (set_attr "length" "24")])
***************
*** 27606,27612 ****
    [(unspec_volatile [(match_operand:SWI48 0 "nonimmediate_operand" "rm")]
  		    UNSPECV_PTWRITE)]
    "TARGET_PTWRITE"
!   "ptwrite\t%0"
    [(set_attr "type" "other")
     (set_attr "prefix_0f" "1")
     (set_attr "prefix_rep" "1")])
--- 27624,27630 ----
    [(unspec_volatile [(match_operand:SWI48 0 "nonimmediate_operand" "rm")]
  		    UNSPECV_PTWRITE)]
    "TARGET_PTWRITE"
!   "ptwrite{<imodesuffix>|}\t%0"
    [(set_attr "type" "other")
     (set_attr "prefix_0f" "1")
     (set_attr "prefix_rep" "1")])
***************
*** 27688,27694 ****
  		     (match_operand:SWI48 1 "memory_operand" "m")]
  		    UNSPECV_WRSS)]
    "TARGET_SHSTK"
!   "wrss<mskmodesuffix>\t%0, %1"
    [(set_attr "length" "3")
     (set_attr "type" "other")])
  
--- 27706,27712 ----
  		     (match_operand:SWI48 1 "memory_operand" "m")]
  		    UNSPECV_WRSS)]
    "TARGET_SHSTK"
!   "wrss<mskmodesuffix>\t{%0, %1|%1, %0}"
    [(set_attr "length" "3")
     (set_attr "type" "other")])
  
***************
*** 27697,27703 ****
  		     (match_operand:SWI48 1 "memory_operand" "m")]
  		    UNSPECV_WRUSS)]
    "TARGET_SHSTK"
!   "wruss<mskmodesuffix>\t%0, %1"
    [(set_attr "length" "4")
     (set_attr "type" "other")])
  
--- 27715,27721 ----
  		     (match_operand:SWI48 1 "memory_operand" "m")]
  		    UNSPECV_WRUSS)]
    "TARGET_SHSTK"
!   "wruss<mskmodesuffix>\t{%0, %1|%1, %0}"
    [(set_attr "length" "4")
     (set_attr "type" "other")])
  
diff -Nrcpad gcc-14.3.0/gcc/config/i386/mmx.md gcc-14.3.0-RC-20260619/gcc/config/i386/mmx.md
*** gcc-14.3.0/gcc/config/i386/mmx.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/mmx.md	Fri Jun 19 06:51:02 2026
***************
*** 1998,2004 ****
  	(div:V4HF
  	  (match_operand:V4HF 1 "nonimmediate_operand")
  	  (match_operand:V4HF 2 "register_operand")))]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
  {
    rtx op2 = gen_reg_rtx (V8HFmode);
    rtx op1 = gen_reg_rtx (V8HFmode);
--- 1998,2005 ----
  	(div:V4HF
  	  (match_operand:V4HF 1 "nonimmediate_operand")
  	  (match_operand:V4HF 2 "register_operand")))]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math
!   && TARGET_MMX_WITH_SSE"
  {
    rtx op2 = gen_reg_rtx (V8HFmode);
    rtx op1 = gen_reg_rtx (V8HFmode);
***************
*** 2678,2684 ****
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")
     (match_operand:V4HF 3 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL"
  {
    rtx op3 = gen_reg_rtx (V8HFmode);
    rtx op2 = gen_reg_rtx (V8HFmode);
--- 2679,2686 ----
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")
     (match_operand:V4HF 3 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL
!   && TARGET_MMX_WITH_SSE"
  {
    rtx op3 = gen_reg_rtx (V8HFmode);
    rtx op2 = gen_reg_rtx (V8HFmode);
***************
*** 2700,2706 ****
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")
     (match_operand:V4HF 3 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL"
  {
    rtx op3 = gen_reg_rtx (V8HFmode);
    rtx op2 = gen_reg_rtx (V8HFmode);
--- 2702,2709 ----
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")
     (match_operand:V4HF 3 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL
!   && TARGET_MMX_WITH_SSE"
  {
    rtx op3 = gen_reg_rtx (V8HFmode);
    rtx op2 = gen_reg_rtx (V8HFmode);
***************
*** 2721,2727 ****
    [(match_operand:V4HF 0 "register_operand")
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL"
  {
    rtx op2 = gen_reg_rtx (V8HFmode);
    rtx op1 = gen_reg_rtx (V8HFmode);
--- 2724,2731 ----
    [(match_operand:V4HF 0 "register_operand")
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL
!   && TARGET_MMX_WITH_SSE"
  {
    rtx op2 = gen_reg_rtx (V8HFmode);
    rtx op1 = gen_reg_rtx (V8HFmode);
***************
*** 2739,2745 ****
    [(match_operand:V4HF 0 "register_operand")
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL"
  {
    rtx op2 = gen_reg_rtx (V8HFmode);
    rtx op1 = gen_reg_rtx (V8HFmode);
--- 2743,2750 ----
    [(match_operand:V4HF 0 "register_operand")
     (match_operand:V4HF 1 "vector_operand")
     (match_operand:V4HF 2 "vector_operand")]
!   "TARGET_AVX512FP16 && TARGET_AVX512VL
!   && TARGET_MMX_WITH_SSE"
  {
    rtx op2 = gen_reg_rtx (V8HFmode);
    rtx op1 = gen_reg_rtx (V8HFmode);
diff -Nrcpad gcc-14.3.0/gcc/config/i386/sse.md gcc-14.3.0-RC-20260619/gcc/config/i386/sse.md
*** gcc-14.3.0/gcc/config/i386/sse.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/sse.md	Fri Jun 19 06:51:02 2026
***************
*** 1617,1623 ****
  	  (match_operand:<ssevecmode> 4 "const0_operand")
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vmov<ssescalarmodesuffix>\t{%1, %0%{%3%}%N2|%0%{3%}%N2, %1}"
    [(set_attr "type" "ssemov")
     (set_attr "prefix" "evex")
     (set_attr "memory" "load")
--- 1617,1623 ----
  	  (match_operand:<ssevecmode> 4 "const0_operand")
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vmov<ssescalarmodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    [(set_attr "type" "ssemov")
     (set_attr "prefix" "evex")
     (set_attr "memory" "load")
***************
*** 6291,6297 ****
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
--- 6291,6297 ----
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
***************
*** 6365,6371 ****
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
--- 6365,6371 ----
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
***************
*** 6426,6432 ****
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfnmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
--- 6426,6432 ----
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfnmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
***************
*** 6503,6509 ****
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfnmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
--- 6503,6509 ----
  	  (match_dup 3)
  	  (const_int 1)))]
    "TARGET_AVX512F"
!   "vfnmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
    [(set_attr "type" "ssemuladd")
     (set_attr "prefix" "evex")
     (set_attr "mode" "<MODE>")])
***************
*** 20793,20798 ****
--- 20793,20811 ----
  	   (const_string "orig")))
     (set_attr "mode" "TI,TI,TI,TI,TI,TI,V4SF,V2SF,V2SF")])
  
+ ;; Eliminate redundancy caused by
+ ;; /* Special case TImode to 128-bit vector conversions via V2DI.  */
+ ;; in ix86_expand_vector_move
+ 
+ (define_split
+   [(set (match_operand:V2DI 0 "register_operand")
+ 	(vec_concat:V2DI
+ 	  (subreg:DI (match_operand:TI 1 "register_operand") 0)
+ 	  (subreg:DI (match_dup 1) 8)))]
+   "TARGET_SSE2 && ix86_pre_reload_split ()"
+   [(set (match_dup 0)
+ 	(subreg:V2DI (match_dup 1) 0))])
+ 
  (define_insn "*vec_concatv2di_0"
    [(set (match_operand:V2DI 0 "register_operand"     "=v,v ,x")
  	(vec_concat:V2DI
***************
*** 22971,22977 ****
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v8qiv8hi2<mask_name>_2"
    [(set (match_operand:V8HI 0 "register_operand")
  	(any_extend:V8HI
  	  (vec_select:V8QI
--- 22984,22990 ----
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v8qiv8hi2_2"
    [(set (match_operand:V8HI 0 "register_operand")
  	(any_extend:V8HI
  	  (vec_select:V8QI
***************
*** 22983,22989 ****
  		       (const_int 2) (const_int 3)
  		       (const_int 4) (const_int 5)
  		       (const_int 6) (const_int 7)]))))]
!   "TARGET_SSE4_1 && <mask_avx512bw_condition> && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 22996,23002 ----
  		       (const_int 2) (const_int 3)
  		       (const_int 4) (const_int 5)
  		       (const_int 6) (const_int 7)]))))]
!   "TARGET_SSE4_1
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 22991,22996 ****
--- 23004,23035 ----
  	(any_extend:V8HI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V8QImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v8qiv8hi2_mask_2"
+   [(set (match_operand:V8HI 0 "register_operand")
+ 	(vec_merge:V8HI
+ 	  (any_extend:V8HI
+ 	    (vec_select:V8QI
+ 	      (subreg:V16QI
+ 		(vec_concat:V2DI
+ 		  (match_operand:DI 1 "memory_operand")
+ 		  (const_int 0)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 			 (const_int 2) (const_int 3)
+ 		         (const_int 4) (const_int 5)
+ 		         (const_int 6) (const_int 7)])))
+ 	  (match_operand:V8HI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL && TARGET_AVX512BW
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V8HI
+ 	  (any_extend:V8HI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V8QImode, 0);")
+ 
  (define_insn_and_split "*sse4_1_zero_extendv8qiv8hi2_3"
    [(set (match_operand:V16QI 0 "register_operand" "=Yr,*x,Yw")
  	(vec_select:V16QI
***************
*** 23123,23129 ****
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "OI")])
  
! (define_insn_and_split "*avx2_<code>v8qiv8si2<mask_name>_2"
    [(set (match_operand:V8SI 0 "register_operand")
  	(any_extend:V8SI
  	  (vec_select:V8QI
--- 23162,23168 ----
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "OI")])
  
! (define_insn_and_split "*avx2_<code>v8qiv8si2_2"
    [(set (match_operand:V8SI 0 "register_operand")
  	(any_extend:V8SI
  	  (vec_select:V8QI
***************
*** 23135,23141 ****
  		       (const_int 2) (const_int 3)
  		       (const_int 4) (const_int 5)
  		       (const_int 6) (const_int 7)]))))]
!   "TARGET_AVX2 && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 23174,23180 ----
  		       (const_int 2) (const_int 3)
  		       (const_int 4) (const_int 5)
  		       (const_int 6) (const_int 7)]))))]
!   "TARGET_AVX2
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 23143,23148 ****
--- 23182,23214 ----
  	(any_extend:V8SI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V8QImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v8qiv8si2_mask_2"
+   [(set (match_operand:V8SI 0 "register_operand")
+ 	(vec_merge:V8SI
+ 	  (any_extend:V8SI
+ 	    (vec_select:V8QI
+ 	      (subreg:V16QI
+ 		(vec_concat:V2DI
+ 		  (match_operand:DI 1 "memory_operand")
+ 		  (const_int 0)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 			 (const_int 2) (const_int 3)
+ 			 (const_int 4) (const_int 5)
+ 			 (const_int 6) (const_int 7)])))
+ 	  (match_operand:V8SI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V8SI
+ 	  (any_extend:V8SI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V8QImode, 0);")
+ 
+ 
  (define_expand "<insn>v8qiv8si2"
    [(set (match_operand:V8SI 0 "register_operand")
  	(any_extend:V8SI
***************
*** 23186,23192 ****
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v4qiv4si2<mask_name>_2"
    [(set (match_operand:V4SI 0 "register_operand")
  	(any_extend:V4SI
  	  (vec_select:V4QI
--- 23252,23258 ----
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v4qiv4si2_2"
    [(set (match_operand:V4SI 0 "register_operand")
  	(any_extend:V4SI
  	  (vec_select:V4QI
***************
*** 23208,23213 ****
--- 23274,23308 ----
  	(any_extend:V4SI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V4QImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v4qiv4si2_mask_2"
+   [(set (match_operand:V4SI 0 "register_operand")
+ 	(vec_merge:V4SI
+ 	  (any_extend:V4SI
+ 	    (vec_select:V4QI
+ 	      (subreg:V16QI
+ 		(vec_merge:V4SI
+ 		  (vec_duplicate:V4SI
+ 		    (match_operand:SI 1 "memory_operand"))
+ 		  (const_vector:V4SI
+ 		    [(const_int 0) (const_int 0)
+ 		     (const_int 0) (const_int 0)])
+ 		  (const_int 1)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 			 (const_int 2) (const_int 3)])))
+ 	  (match_operand:V4SI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V4SI
+ 	  (any_extend:V4SI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V4QImode, 0);")
+ 
+ 
  (define_expand "<insn>v4qiv4si2"
    [(set (match_operand:V4SI 0 "register_operand")
  	(any_extend:V4SI
***************
*** 23359,23365 ****
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v4hiv4si2<mask_name>_2"
    [(set (match_operand:V4SI 0 "register_operand")
  	(any_extend:V4SI
  	  (vec_select:V4HI
--- 23454,23460 ----
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v4hiv4si2_2"
    [(set (match_operand:V4SI 0 "register_operand")
  	(any_extend:V4SI
  	  (vec_select:V4HI
***************
*** 23369,23375 ****
  		(const_int 0)) 0)
  	    (parallel [(const_int 0) (const_int 1)
  		       (const_int 2) (const_int 3)]))))]
!   "TARGET_SSE4_1 && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 23464,23470 ----
  		(const_int 0)) 0)
  	    (parallel [(const_int 0) (const_int 1)
  		       (const_int 2) (const_int 3)]))))]
!   "TARGET_SSE4_1
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 23377,23382 ****
--- 23472,23502 ----
  	(any_extend:V4SI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V4HImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v4hiv4si2_mask_2"
+   [(set (match_operand:V4SI 0 "register_operand")
+ 	(vec_merge:V4SI
+ 	  (any_extend:V4SI
+ 	    (vec_select:V4HI
+ 	      (subreg:V8HI
+ 		(vec_concat:V2DI
+ 		  (match_operand:DI 1 "memory_operand")
+ 		  (const_int 0)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 			 (const_int 2) (const_int 3)])))
+ 	  (match_operand:V4SI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V4SI
+ 	  (any_extend:V4SI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V4HImode, 0);")
+ 
+ 
  (define_expand "<insn>v4hiv4si2"
    [(set (match_operand:V4SI 0 "register_operand")
  	(any_extend:V4SI
***************
*** 23487,23493 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "XI")])
  
! (define_insn_and_split "*avx512f_<code>v8qiv8di2<mask_name>_2"
    [(set (match_operand:V8DI 0 "register_operand")
  	(any_extend:V8DI
  	  (vec_select:V8QI
--- 23607,23613 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "XI")])
  
! (define_insn_and_split "*avx512f_<code>v8qiv8di2_2"
    [(set (match_operand:V8DI 0 "register_operand")
  	(any_extend:V8DI
  	  (vec_select:V8QI
***************
*** 23506,23511 ****
--- 23626,23657 ----
  	(any_extend:V8DI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V8QImode, 0);")
  
+ (define_insn_and_split "*avx512f_<code>v8qiv8di2_mask_2"
+   [(set (match_operand:V8DI 0 "register_operand")
+ 	(vec_merge:V8DI
+ 	  (any_extend:V8DI
+ 	    (vec_select:V8QI
+ 	      (subreg:V16QI
+ 		(vec_concat:V2DI
+ 		  (match_operand:DI 1 "memory_operand")
+ 		  (const_int 0)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 			 (const_int 2) (const_int 3)
+ 		         (const_int 4) (const_int 5)
+ 		         (const_int 6) (const_int 7)])))
+ 	  (match_operand:V8DI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512F && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V8DI
+ 	  (any_extend:V8DI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V8QImode, 0);")
+ 
+ 
  (define_expand "<insn>v8qiv8di2"
    [(set (match_operand:V8DI 0 "register_operand")
  	(any_extend:V8DI
***************
*** 23546,23552 ****
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "OI")])
  
! (define_insn_and_split "*avx2_<code>v4qiv4di2<mask_name>_2"
    [(set (match_operand:V4DI 0 "register_operand")
  	(any_extend:V4DI
  	  (vec_select:V4QI
--- 23692,23698 ----
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "OI")])
  
! (define_insn_and_split "*avx2_<code>v4qiv4di2_2"
    [(set (match_operand:V4DI 0 "register_operand")
  	(any_extend:V4DI
  	  (vec_select:V4QI
***************
*** 23560,23566 ****
  		(const_int 1)) 0)
  	    (parallel [(const_int 0) (const_int 1)
  		       (const_int 2) (const_int 3)]))))]
!   "TARGET_AVX2 && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 23706,23712 ----
  		(const_int 1)) 0)
  	    (parallel [(const_int 0) (const_int 1)
  		       (const_int 2) (const_int 3)]))))]
!   "TARGET_AVX2
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 23568,23573 ****
--- 23714,23748 ----
  	(any_extend:V4DI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V4QImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v4qiv4di2_mask_2"
+   [(set (match_operand:V4DI 0 "register_operand")
+ 	(vec_merge:V4DI
+ 	  (any_extend:V4DI
+ 	    (vec_select:V4QI
+ 	      (subreg:V16QI
+ 		(vec_merge:V4SI
+ 		  (vec_duplicate:V4SI
+ 		    (match_operand:SI 1 "memory_operand"))
+ 		  (const_vector:V4SI
+ 		    [(const_int 0) (const_int 0)
+ 		     (const_int 0) (const_int 0)])
+ 		  (const_int 1)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 			 (const_int 2) (const_int 3)])))
+ 	  (match_operand:V4DI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V4DI
+ 	  (any_extend:V4DI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V4QImode, 0);")
+ 
+ 
  (define_expand "<insn>v4qiv4di2"
    [(set (match_operand:V4DI 0 "register_operand")
  	(any_extend:V4DI
***************
*** 23689,23695 ****
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "OI")])
  
! (define_insn_and_split "*avx2_<code>v4hiv4di2<mask_name>_2"
    [(set (match_operand:V4DI 0 "register_operand")
  	(any_extend:V4DI
  	  (vec_select:V4HI
--- 23864,23870 ----
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "OI")])
  
! (define_insn_and_split "*avx2_<code>v4hiv4di2_2"
    [(set (match_operand:V4DI 0 "register_operand")
  	(any_extend:V4DI
  	  (vec_select:V4HI
***************
*** 23699,23705 ****
  		(const_int 0)) 0)
  	    (parallel [(const_int 0) (const_int 1)
  		       (const_int 2) (const_int 3)]))))]
!   "TARGET_AVX2 && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 23874,23880 ----
  		(const_int 0)) 0)
  	    (parallel [(const_int 0) (const_int 1)
  		       (const_int 2) (const_int 3)]))))]
!   "TARGET_AVX2
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 23707,23712 ****
--- 23882,23912 ----
  	(any_extend:V4DI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V4HImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v4hiv4di2_mask_2"
+   [(set (match_operand:V4DI 0 "register_operand")
+ 	(vec_merge:V4DI
+ 	  (any_extend:V4DI
+ 	    (vec_select:V4HI
+ 	      (subreg:V8HI
+ 		(vec_concat:V2DI
+ 		  (match_operand:DI 1 "memory_operand")
+ 		  (const_int 0)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)
+ 		         (const_int 2) (const_int 3)])))
+ 	  (match_operand:V4DI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V4DI
+ 	  (any_extend:V4DI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V4HImode, 0);")
+ 
+ 
  (define_expand "<insn>v4hiv4di2"
    [(set (match_operand:V4DI 0 "register_operand")
  	(any_extend:V4DI
***************
*** 23749,23755 ****
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v2hiv2di2<mask_name>_2"
    [(set (match_operand:V2DI 0 "register_operand")
  	(any_extend:V2DI
  	  (vec_select:V2HI
--- 23949,23955 ----
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v2hiv2di2_2"
    [(set (match_operand:V2DI 0 "register_operand")
  	(any_extend:V2DI
  	  (vec_select:V2HI
***************
*** 23762,23768 ****
  		    (const_int 0) (const_int 0)])
  		(const_int 1)) 0)
  	    (parallel [(const_int 0) (const_int 1)]))))]
!   "TARGET_SSE4_1 && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 23962,23968 ----
  		    (const_int 0) (const_int 0)])
  		(const_int 1)) 0)
  	    (parallel [(const_int 0) (const_int 1)]))))]
!   "TARGET_SSE4_1
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 23770,23775 ****
--- 23970,24003 ----
  	(any_extend:V2DI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V2HImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v2hiv2di2_mask_2"
+   [(set (match_operand:V2DI 0 "register_operand")
+ 	(vec_merge:V2DI
+ 	  (any_extend:V2DI
+ 	    (vec_select:V2HI
+ 	      (subreg:V8HI
+ 		(vec_merge:V4SI
+ 		  (vec_duplicate:V4SI
+ 		    (match_operand:SI 1 "memory_operand"))
+ 		  (const_vector:V4SI
+ 		    [(const_int 0) (const_int 0)
+ 		     (const_int 0) (const_int 0)])
+ 		  (const_int 1)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)])))
+ 	  (match_operand:V2DI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V2DI
+ 	  (any_extend:V2DI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V2HImode, 0);")
+ 
+ 
  (define_expand "<insn>v2hiv2di2"
    [(set (match_operand:V2DI 0 "register_operand")
  	(any_extend:V2DI
***************
*** 23915,23921 ****
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v2siv2di2<mask_name>_2"
    [(set (match_operand:V2DI 0 "register_operand")
  	(any_extend:V2DI
  	  (vec_select:V2SI
--- 24143,24149 ----
     (set_attr "prefix" "orig,orig,maybe_evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "*sse4_1_<code>v2siv2di2_2"
    [(set (match_operand:V2DI 0 "register_operand")
  	(any_extend:V2DI
  	  (vec_select:V2SI
***************
*** 23924,23930 ****
  		(match_operand:DI 1 "memory_operand")
  		(const_int 0)) 0)
  	    (parallel [(const_int 0) (const_int 1)]))))]
!   "TARGET_SSE4_1 && <mask_avx512vl_condition>
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
--- 24152,24158 ----
  		(match_operand:DI 1 "memory_operand")
  		(const_int 0)) 0)
  	    (parallel [(const_int 0) (const_int 1)]))))]
!   "TARGET_SSE4_1
     && ix86_pre_reload_split ()"
    "#"
    "&& 1"
***************
*** 23932,23937 ****
--- 24160,24188 ----
  	(any_extend:V2DI (match_dup 1)))]
    "operands[1] = adjust_address_nv (operands[1], V2SImode, 0);")
  
+ (define_insn_and_split "*avx512vl_<code>v2siv2di2_mask_2"
+   [(set (match_operand:V2DI 0 "register_operand")
+ 	(vec_merge:V2DI
+ 	  (any_extend:V2DI
+ 	    (vec_select:V2SI
+ 	      (subreg:V4SI
+ 		(vec_concat:V2DI
+ 		  (match_operand:DI 1 "memory_operand")
+ 		  (const_int 0)) 0)
+ 	      (parallel [(const_int 0) (const_int 1)])))
+ 	  (match_operand:V2DI 2 "nonimm_or_0_operand")
+ 	  (match_operand:QI 3 "register_operand")))]
+   "TARGET_AVX512VL
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(vec_merge:V2DI
+ 	  (any_extend:V2DI (match_dup 1))
+ 	  (match_dup 2)
+ 	  (match_dup 3)))]
+   "operands[1] = adjust_address_nv (operands[1], V2SImode, 0);")
+ 
  (define_insn_and_split "*sse4_1_zero_extendv2siv2di2_3"
    [(set (match_operand:V4SI 0 "register_operand" "=Yr,*x,v")
  	(vec_select:V4SI
***************
*** 27002,27018 ****
  (define_insn "avx2_vbroadcasti128_<mode>"
    [(set (match_operand:VI_256 0 "register_operand" "=x,v,v")
  	(vec_concat:VI_256
! 	  (match_operand:<ssehalfvecmode> 1 "memory_operand" "m,m,m")
  	  (match_dup 1)))]
    "TARGET_AVX2"
    "@
     vbroadcasti128\t{%1, %0|%0, %1}
     vbroadcast<i128vldq>\t{%1, %0|%0, %1}
     vbroadcast<shuffletype>32x4\t{%1, %0|%0, %1}"
!   [(set_attr "isa" "*,avx512dq,avx512vl")
     (set_attr "type" "ssemov")
     (set_attr "prefix_extra" "1")
     (set_attr "prefix" "vex,evex,evex")
     (set_attr "mode" "OI")])
  
  ;; optimize vlddqu + vinserti128 to vbroadcasti128, the former will use
--- 27253,27270 ----
  (define_insn "avx2_vbroadcasti128_<mode>"
    [(set (match_operand:VI_256 0 "register_operand" "=x,v,v")
  	(vec_concat:VI_256
! 	  (match_operand:<ssehalfvecmode> 1 "memory_operand" "jm,m,m")
  	  (match_dup 1)))]
    "TARGET_AVX2"
    "@
     vbroadcasti128\t{%1, %0|%0, %1}
     vbroadcast<i128vldq>\t{%1, %0|%0, %1}
     vbroadcast<shuffletype>32x4\t{%1, %0|%0, %1}"
!   [(set_attr "isa" "noavx512vl,avx512dq,avx512vl")
     (set_attr "type" "ssemov")
     (set_attr "prefix_extra" "1")
     (set_attr "prefix" "vex,evex,evex")
+    (set_attr "addr" "gpr16,*,*")
     (set_attr "mode" "OI")])
  
  ;; optimize vlddqu + vinserti128 to vbroadcasti128, the former will use
diff -Nrcpad gcc-14.3.0/gcc/config/i386/x86-tune.def gcc-14.3.0-RC-20260619/gcc/config/i386/x86-tune.def
*** gcc-14.3.0/gcc/config/i386/x86-tune.def	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/x86-tune.def	Fri Jun 19 06:51:02 2026
*************** DEF_TUNE (X86_TUNE_AVX256_AVOID_VEC_PERM
*** 583,588 ****
--- 583,590 ----
  /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX512 ops are split into two AVX256 ops.  */
  DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, "avx512_split_regs", m_ZNVER4)
  
+ /* It's better to align MOVE_MAX with prefer_vector_width to reduce
+    risk of STLF stalls(small store followed by big load.)  */
  /* X86_TUNE_AVX256_MOVE_BY_PIECES: Optimize move_by_pieces with 256-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX256_MOVE_BY_PIECES, "avx256_move_by_pieces",
*************** DEF_TUNE (X86_TUNE_AVX256_STORE_BY_PIECE
*** 596,609 ****
  /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces",
! 	  m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D
! 	  | m_ZNVER4 | m_ZNVER5)
  
  /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces",
! 	  m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D
! 	  | m_ZNVER4 | m_ZNVER5)
  
  /*****************************************************************************/
  /*****************************************************************************/
--- 598,609 ----
  /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces",
! 	   m_ZNVER4 | m_ZNVER5)
  
  /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces",
! 	  m_ZNVER4 | m_ZNVER5)
  
  /*****************************************************************************/
  /*****************************************************************************/
diff -Nrcpad gcc-14.3.0/gcc/config/i386/xmmintrin.h gcc-14.3.0-RC-20260619/gcc/config/i386/xmmintrin.h
*** gcc-14.3.0/gcc/config/i386/xmmintrin.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/i386/xmmintrin.h	Fri Jun 19 06:51:02 2026
*************** _mm_maskmove_si64 (__m64 __A, __m64 __N,
*** 1181,1197 ****
    __v2di __N128 = __extension__ (__v2di) { ((__v1di) __N)[0], 0 };
  
    /* Check the alignment of __P.  */
!   __SIZE_TYPE__ offset = ((__SIZE_TYPE__) __P) & 0xf;
!   if (offset)
      {
        /* If the misalignment of __P > 8, subtract __P by 8 bytes.
  	 Otherwise, subtract __P by the misalignment.  */
!       if (offset > 8)
! 	offset = 8;
!       __P = (char *) (((__SIZE_TYPE__) __P) - offset);
  
        /* Shift __A128 and __N128 to the left by the adjustment.  */
!       switch (offset)
  	{
  	case 1:
  	  __A128 = __builtin_ia32_pslldqi128 (__A128, 8);
--- 1181,1197 ----
    __v2di __N128 = __extension__ (__v2di) { ((__v1di) __N)[0], 0 };
  
    /* Check the alignment of __P.  */
!   __SIZE_TYPE__ __offset = ((__SIZE_TYPE__) __P) & 0xf;
!   if (__offset)
      {
        /* If the misalignment of __P > 8, subtract __P by 8 bytes.
  	 Otherwise, subtract __P by the misalignment.  */
!       if (__offset > 8)
! 	__offset = 8;
!       __P = (char *) (((__SIZE_TYPE__) __P) - __offset);
  
        /* Shift __A128 and __N128 to the left by the adjustment.  */
!       switch (__offset)
  	{
  	case 1:
  	  __A128 = __builtin_ia32_pslldqi128 (__A128, 8);
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/constraints.md gcc-14.3.0-RC-20260619/gcc/config/loongarch/constraints.md
*** gcc-14.3.0/gcc/config/loongarch/constraints.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/constraints.md	Fri Jun 19 06:51:02 2026
***************
*** 365,367 ****
--- 365,376 ----
     and offset that is suitable for use in instructions with the same
     addressing mode as @code{preld}."
     (match_test "loongarch_12bit_offset_address_p (op, mode)"))
+ 
+ (define_constraint "ZE"
+   "A symbolic suitable as stack canary in the normal/medium code model."
+   (match_operand 0 "ssp_normal_operand"))
+ 
+ (define_constraint "ZF"
+   "A symbolic suitable as stack canary, but in the extreme code model."
+   (and (match_operand 0 "ssp_operand")
+        (not (match_operand 0 "ssp_normal_operand"))))
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/lasx.md gcc-14.3.0-RC-20260619/gcc/config/loongarch/lasx.md
*** gcc-14.3.0/gcc/config/loongarch/lasx.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/lasx.md	Fri Jun 19 06:51:02 2026
***************
*** 983,1041 ****
    [(set_attr "type" "simd_div")
     (set_attr "mode" "<MODE>")])
  
- (define_insn "xor<mode>3"
-   [(set (match_operand:LASX 0 "register_operand" "=f,f,f")
- 	(xor:LASX
- 	  (match_operand:LASX 1 "register_operand" "f,f,f")
- 	  (match_operand:LASX 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
-   "ISA_HAS_LASX"
-   "@
-    xvxor.v\t%u0,%u1,%u2
-    xvbitrevi.%v0\t%u0,%u1,%V2
-    xvxori.b\t%u0,%u1,%B2"
-   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
-    (set_attr "mode" "<MODE>")])
- 
- (define_insn "ior<mode>3"
-   [(set (match_operand:LASX 0 "register_operand" "=f,f,f")
- 	(ior:LASX
- 	  (match_operand:LASX 1 "register_operand" "f,f,f")
- 	  (match_operand:LASX 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
-   "ISA_HAS_LASX"
-   "@
-    xvor.v\t%u0,%u1,%u2
-    xvbitseti.%v0\t%u0,%u1,%V2
-    xvori.b\t%u0,%u1,%B2"
-   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
-    (set_attr "mode" "<MODE>")])
- 
- (define_insn "and<mode>3"
-   [(set (match_operand:LASX 0 "register_operand" "=f,f,f")
- 	(and:LASX
- 	  (match_operand:LASX 1 "register_operand" "f,f,f")
- 	  (match_operand:LASX 2 "reg_or_vector_same_val_operand" "f,YZ,Urv8")))]
-   "ISA_HAS_LASX"
- {
-   switch (which_alternative)
-     {
-     case 0:
-       return "xvand.v\t%u0,%u1,%u2";
-     case 1:
-       {
- 	rtx elt0 = CONST_VECTOR_ELT (operands[2], 0);
- 	unsigned HOST_WIDE_INT val = ~UINTVAL (elt0);
- 	operands[2] = loongarch_gen_const_int_vector (<MODE>mode, val & (-val));
- 	return "xvbitclri.%v0\t%u0,%u1,%V2";
-       }
-     case 2:
-       return "xvandi.b\t%u0,%u1,%B2";
-     default:
-       gcc_unreachable ();
-     }
- }
-   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
-    (set_attr "mode" "<MODE>")])
- 
  (define_insn "one_cmpl<mode>2"
    [(set (match_operand:ILASX 0 "register_operand" "=f")
  	(not:ILASX (match_operand:ILASX 1 "register_operand" "f")))]
--- 983,988 ----
***************
*** 1148,1163 ****
    [(set_attr "type" "simd_fmadd")
     (set_attr "mode" "<MODE>")])
  
- (define_insn "fnma<mode>4"
-   [(set (match_operand:FLASX 0 "register_operand" "=f")
- 	(fma:FLASX (neg:FLASX (match_operand:FLASX 1 "register_operand" "f"))
- 		   (match_operand:FLASX 2 "register_operand" "f")
- 		   (match_operand:FLASX 3 "register_operand" "0")))]
-   "ISA_HAS_LASX"
-   "xvfnmsub.<flasxfmt>\t%u0,%u1,%u2,%u0"
-   [(set_attr "type" "simd_fmadd")
-    (set_attr "mode" "<MODE>")])
- 
  (define_expand "sqrt<mode>2"
    [(set (match_operand:FLASX 0 "register_operand")
      (sqrt:FLASX (match_operand:FLASX 1 "register_operand")))]
--- 1095,1100 ----
***************
*** 2337,2345 ****
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
! (define_insn "lasx_xvshuf_<lasxfmt_f>"
    [(set (match_operand:LASX_DWH 0 "register_operand" "=f")
! 	(unspec:LASX_DWH [(match_operand:LASX_DWH 1 "register_operand" "0")
  			  (match_operand:LASX_DWH 2 "register_operand" "f")
  			  (match_operand:LASX_DWH 3 "register_operand" "f")]
  			UNSPEC_LASX_XVSHUF))]
--- 2274,2282 ----
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
! (define_insn "@lasx_xvshuf_<lasxfmt_f>"
    [(set (match_operand:LASX_DWH 0 "register_operand" "=f")
! 	(unspec:LASX_DWH [(match_operand:<VIMODE> 1 "register_operand" "0")
  			  (match_operand:LASX_DWH 2 "register_operand" "f")
  			  (match_operand:LASX_DWH 3 "register_operand" "f")]
  			UNSPEC_LASX_XVSHUF))]
***************
*** 2943,3001 ****
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
- (define_expand "copysign<mode>3"
-   [(set (match_dup 4)
- 	(and:FLASX
- 	  (not:FLASX (match_dup 3))
- 	  (match_operand:FLASX 1 "register_operand")))
-    (set (match_dup 5)
- 	(and:FLASX (match_dup 3)
- 		   (match_operand:FLASX 2 "reg_or_vector_same_val_operand")))
-    (set (match_operand:FLASX 0 "register_operand")
- 	(ior:FLASX (match_dup 4) (match_dup 5)))]
-   "ISA_HAS_LASX"
- {
-   /* copysign (x, -1) should instead be expanded as setting the sign
-      bit.  */
-   if (!REG_P (operands[2]))
-     {
-       rtx op2_elt = unwrap_const_vec_duplicate (operands[2]);
-       if (GET_CODE (op2_elt) == CONST_DOUBLE
- 	  && real_isneg (CONST_DOUBLE_REAL_VALUE (op2_elt)))
- 	{
- 	  rtx n = GEN_INT (8 * GET_MODE_SIZE (<UNITMODE>mode) - 1);
- 	  operands[0] = lowpart_subreg (<VIMODE256>mode, operands[0],
- 					<MODE>mode);
- 	  operands[1] = lowpart_subreg (<VIMODE256>mode, operands[1],
- 					<MODE>mode);
- 	  emit_insn (gen_lasx_xvbitseti_<lasxfmt> (operands[0],
- 						   operands[1], n));
- 	  DONE;
- 	}
-     }
- 
-   operands[2] = force_reg (<MODE>mode, operands[2]);
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
-   operands[5] = gen_reg_rtx (<MODE>mode);
- })
- 
- (define_expand "xorsign<mode>3"
-   [(set (match_dup 4)
-     (and:FLASX (match_dup 3)
-         (match_operand:FLASX 2 "register_operand")))
-    (set (match_operand:FLASX 0 "register_operand")
-     (xor:FLASX (match_dup 4)
-          (match_operand:FLASX 1 "register_operand")))]
-   "ISA_HAS_LASX"
- {
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
- })
- 
- 
  (define_insn "absv4df2"
    [(set (match_operand:V4DF 0 "register_operand" "=f")
  	(abs:V4DF (match_operand:V4DF 1 "register_operand" "f")))]
--- 2880,2885 ----
***************
*** 4598,4604 ****
    [(set (match_operand:FLASX 0 "register_operand" "=f")
      (vec_merge:FLASX
        (vec_duplicate:FLASX
!         (match_operand:<UNITMODE> 1 "register_operand" "f"))
        (match_operand:FLASX 2 "register_operand" "0")
        (match_operand 3 "const_<bitmask256>_operand" "")))]
    "ISA_HAS_LASX"
--- 4482,4488 ----
    [(set (match_operand:FLASX 0 "register_operand" "=f")
      (vec_merge:FLASX
        (vec_duplicate:FLASX
!         (match_operand:<UNITMODE> 1 "reg_or_0_operand" "f"))
        (match_operand:FLASX 2 "register_operand" "0")
        (match_operand 3 "const_<bitmask256>_operand" "")))]
    "ISA_HAS_LASX"
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/loongarch-builtins.cc gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-builtins.cc
*** gcc-14.3.0/gcc/config/loongarch/loongarch-builtins.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-builtins.cc	Fri Jun 19 06:51:02 2026
*************** static const struct loongarch_builtin_de
*** 1388,1397 ****
    LSX_BUILTIN (vfrintrp_d, LARCH_V2DF_FTYPE_V2DF),
    LSX_BUILTIN (vfrintrm_s, LARCH_V4SF_FTYPE_V4SF),
    LSX_BUILTIN (vfrintrm_d, LARCH_V2DF_FTYPE_V2DF),
!   LSX_NO_TARGET_BUILTIN (vstelm_b, LARCH_VOID_FTYPE_V16QI_CVPOINTER_SI_UQI),
!   LSX_NO_TARGET_BUILTIN (vstelm_h, LARCH_VOID_FTYPE_V8HI_CVPOINTER_SI_UQI),
!   LSX_NO_TARGET_BUILTIN (vstelm_w, LARCH_VOID_FTYPE_V4SI_CVPOINTER_SI_UQI),
!   LSX_NO_TARGET_BUILTIN (vstelm_d, LARCH_VOID_FTYPE_V2DI_CVPOINTER_SI_UQI),
    LSX_BUILTIN (vaddwev_d_w, LARCH_V2DI_FTYPE_V4SI_V4SI),
    LSX_BUILTIN (vaddwev_w_h, LARCH_V4SI_FTYPE_V8HI_V8HI),
    LSX_BUILTIN (vaddwev_h_b, LARCH_V8HI_FTYPE_V16QI_V16QI),
--- 1388,1397 ----
    LSX_BUILTIN (vfrintrp_d, LARCH_V2DF_FTYPE_V2DF),
    LSX_BUILTIN (vfrintrm_s, LARCH_V4SF_FTYPE_V4SF),
    LSX_BUILTIN (vfrintrm_d, LARCH_V2DF_FTYPE_V2DF),
!   LSX_NO_TARGET_BUILTIN (vstelm_b, LARCH_VOID_FTYPE_V16QI_VPOINTER_SI_UQI),
!   LSX_NO_TARGET_BUILTIN (vstelm_h, LARCH_VOID_FTYPE_V8HI_VPOINTER_SI_UQI),
!   LSX_NO_TARGET_BUILTIN (vstelm_w, LARCH_VOID_FTYPE_V4SI_VPOINTER_SI_UQI),
!   LSX_NO_TARGET_BUILTIN (vstelm_d, LARCH_VOID_FTYPE_V2DI_VPOINTER_SI_UQI),
    LSX_BUILTIN (vaddwev_d_w, LARCH_V2DI_FTYPE_V4SI_V4SI),
    LSX_BUILTIN (vaddwev_w_h, LARCH_V4SI_FTYPE_V8HI_V8HI),
    LSX_BUILTIN (vaddwev_h_b, LARCH_V8HI_FTYPE_V16QI_V16QI),
*************** static const struct loongarch_builtin_de
*** 1561,1567 ****
    LSX_BUILTIN (vssrarni_du_q, LARCH_UV2DI_FTYPE_UV2DI_V2DI_USI),
    LSX_BUILTIN (vpermi_w, LARCH_V4SI_FTYPE_V4SI_V4SI_USI),
    LSX_BUILTIN (vld, LARCH_V16QI_FTYPE_CVPOINTER_SI),
!   LSX_NO_TARGET_BUILTIN (vst, LARCH_VOID_FTYPE_V16QI_CVPOINTER_SI),
    LSX_BUILTIN (vssrlrn_b_h, LARCH_V16QI_FTYPE_V8HI_V8HI),
    LSX_BUILTIN (vssrlrn_h_w, LARCH_V8HI_FTYPE_V4SI_V4SI),
    LSX_BUILTIN (vssrlrn_w_d, LARCH_V4SI_FTYPE_V2DI_V2DI),
--- 1561,1567 ----
    LSX_BUILTIN (vssrarni_du_q, LARCH_UV2DI_FTYPE_UV2DI_V2DI_USI),
    LSX_BUILTIN (vpermi_w, LARCH_V4SI_FTYPE_V4SI_V4SI_USI),
    LSX_BUILTIN (vld, LARCH_V16QI_FTYPE_CVPOINTER_SI),
!   LSX_NO_TARGET_BUILTIN (vst, LARCH_VOID_FTYPE_V16QI_VPOINTER_SI),
    LSX_BUILTIN (vssrlrn_b_h, LARCH_V16QI_FTYPE_V8HI_V8HI),
    LSX_BUILTIN (vssrlrn_h_w, LARCH_V8HI_FTYPE_V4SI_V4SI),
    LSX_BUILTIN (vssrlrn_w_d, LARCH_V4SI_FTYPE_V2DI_V2DI),
*************** static const struct loongarch_builtin_de
*** 1572,1578 ****
    LSX_BUILTIN (vldi, LARCH_V2DI_FTYPE_HI),
    LSX_BUILTIN (vshuf_b, LARCH_V16QI_FTYPE_V16QI_V16QI_V16QI),
    LSX_BUILTIN (vldx, LARCH_V16QI_FTYPE_CVPOINTER_DI),
!   LSX_NO_TARGET_BUILTIN (vstx, LARCH_VOID_FTYPE_V16QI_CVPOINTER_DI),
    LSX_BUILTIN (vextl_qu_du, LARCH_UV2DI_FTYPE_UV2DI),
  
    /* Built-in functions for LASX */
--- 1572,1578 ----
    LSX_BUILTIN (vldi, LARCH_V2DI_FTYPE_HI),
    LSX_BUILTIN (vshuf_b, LARCH_V16QI_FTYPE_V16QI_V16QI_V16QI),
    LSX_BUILTIN (vldx, LARCH_V16QI_FTYPE_CVPOINTER_DI),
!   LSX_NO_TARGET_BUILTIN (vstx, LARCH_VOID_FTYPE_V16QI_VPOINTER_DI),
    LSX_BUILTIN (vextl_qu_du, LARCH_UV2DI_FTYPE_UV2DI),
  
    /* Built-in functions for LASX */
*************** static const struct loongarch_builtin_de
*** 2101,2111 ****
    LASX_BUILTIN (xvfrintrm_s, LARCH_V8SF_FTYPE_V8SF),
    LASX_BUILTIN (xvfrintrm_d, LARCH_V4DF_FTYPE_V4DF),
    LASX_BUILTIN (xvld, LARCH_V32QI_FTYPE_CVPOINTER_SI),
!   LASX_NO_TARGET_BUILTIN (xvst, LARCH_VOID_FTYPE_V32QI_CVPOINTER_SI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_b, LARCH_VOID_FTYPE_V32QI_CVPOINTER_SI_UQI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_h, LARCH_VOID_FTYPE_V16HI_CVPOINTER_SI_UQI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_w, LARCH_VOID_FTYPE_V8SI_CVPOINTER_SI_UQI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_d, LARCH_VOID_FTYPE_V4DI_CVPOINTER_SI_UQI),
    LASX_BUILTIN (xvinsve0_w, LARCH_V8SI_FTYPE_V8SI_V8SI_UQI),
    LASX_BUILTIN (xvinsve0_d, LARCH_V4DI_FTYPE_V4DI_V4DI_UQI),
    LASX_BUILTIN (xvpickve_w, LARCH_V8SI_FTYPE_V8SI_UQI),
--- 2101,2111 ----
    LASX_BUILTIN (xvfrintrm_s, LARCH_V8SF_FTYPE_V8SF),
    LASX_BUILTIN (xvfrintrm_d, LARCH_V4DF_FTYPE_V4DF),
    LASX_BUILTIN (xvld, LARCH_V32QI_FTYPE_CVPOINTER_SI),
!   LASX_NO_TARGET_BUILTIN (xvst, LARCH_VOID_FTYPE_V32QI_VPOINTER_SI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_b, LARCH_VOID_FTYPE_V32QI_VPOINTER_SI_UQI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_h, LARCH_VOID_FTYPE_V16HI_VPOINTER_SI_UQI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_w, LARCH_VOID_FTYPE_V8SI_VPOINTER_SI_UQI),
!   LASX_NO_TARGET_BUILTIN (xvstelm_d, LARCH_VOID_FTYPE_V4DI_VPOINTER_SI_UQI),
    LASX_BUILTIN (xvinsve0_w, LARCH_V8SI_FTYPE_V8SI_V8SI_UQI),
    LASX_BUILTIN (xvinsve0_d, LARCH_V4DI_FTYPE_V4DI_V4DI_UQI),
    LASX_BUILTIN (xvpickve_w, LARCH_V8SI_FTYPE_V8SI_UQI),
*************** static const struct loongarch_builtin_de
*** 2121,2127 ****
    LASX_BUILTIN (xvorn_v, LARCH_UV32QI_FTYPE_UV32QI_UV32QI),
    LASX_BUILTIN (xvldi, LARCH_V4DI_FTYPE_HI),
    LASX_BUILTIN (xvldx, LARCH_V32QI_FTYPE_CVPOINTER_DI),
!   LASX_NO_TARGET_BUILTIN (xvstx, LARCH_VOID_FTYPE_V32QI_CVPOINTER_DI),
    LASX_BUILTIN (xvextl_qu_du, LARCH_UV4DI_FTYPE_UV4DI),
  
    /* LASX */
--- 2121,2127 ----
    LASX_BUILTIN (xvorn_v, LARCH_UV32QI_FTYPE_UV32QI_UV32QI),
    LASX_BUILTIN (xvldi, LARCH_V4DI_FTYPE_HI),
    LASX_BUILTIN (xvldx, LARCH_V32QI_FTYPE_CVPOINTER_DI),
!   LASX_NO_TARGET_BUILTIN (xvstx, LARCH_VOID_FTYPE_V32QI_VPOINTER_DI),
    LASX_BUILTIN (xvextl_qu_du, LARCH_UV4DI_FTYPE_UV4DI),
  
    /* LASX */
*************** loongarch_build_cvpointer_type (void)
*** 2371,2381 ****
--- 2371,2395 ----
    return cache;
  }
  
+ /* Return a type for 'volatile void *'.  */
+ 
+ static tree
+ loongarch_build_vpointer_type (void)
+ {
+   static tree cache;
+ 
+   if (cache == NULL_TREE)
+     cache = build_pointer_type (build_qualified_type (void_type_node,
+ 						      TYPE_QUAL_VOLATILE));
+   return cache;
+ }
+ 
  /* Source-level argument types.  */
  #define LARCH_ATYPE_VOID void_type_node
  #define LARCH_ATYPE_INT integer_type_node
  #define LARCH_ATYPE_POINTER ptr_type_node
  #define LARCH_ATYPE_CVPOINTER loongarch_build_cvpointer_type ()
+ #define LARCH_ATYPE_VPOINTER loongarch_build_vpointer_type ()
  #define LARCH_ATYPE_BOOLEAN boolean_type_node
  /* Standard mode-based argument types.  */
  #define LARCH_ATYPE_QI intQI_type_node
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/loongarch-def.h gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-def.h
*** gcc-14.3.0/gcc/config/loongarch/loongarch-def.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-def.h	Fri Jun 19 06:51:02 2026
*************** extern loongarch_def_array<const char *,
*** 78,89 ****
  
  
  /* Base ABI */
! enum {
!   ABI_BASE_LP64D	= 0,
!   ABI_BASE_LP64F	= 1,
!   ABI_BASE_LP64S	= 2,
!   N_ABI_BASE_TYPES	= 3
! };
  
  extern loongarch_def_array<const char *, N_ABI_BASE_TYPES>
    loongarch_abi_base_strings;
--- 78,87 ----
  
  
  /* Base ABI */
! #define ABI_BASE_LP64D	  0
! #define ABI_BASE_LP64F	  1
! #define ABI_BASE_LP64S	  2
! #define N_ABI_BASE_TYPES  3
  
  extern loongarch_def_array<const char *, N_ABI_BASE_TYPES>
    loongarch_abi_base_strings;
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/loongarch-ftypes.def gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-ftypes.def
*** gcc-14.3.0/gcc/config/loongarch/loongarch-ftypes.def	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-ftypes.def	Fri Jun 19 06:51:02 2026
*************** DEF_LARCH_FTYPE (2, (V8QI, V4HI, V4HI))
*** 492,518 ****
  DEF_LARCH_FTYPE (1, (V8QI, V8QI))
  DEF_LARCH_FTYPE (2, (V8QI, V8QI, V8QI))
  
- DEF_LARCH_FTYPE (2, (VOID, SI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (VOID, SI, SI))
  DEF_LARCH_FTYPE (2, (VOID, UQI, SI))
  DEF_LARCH_FTYPE (2, (VOID, USI, UQI))
  DEF_LARCH_FTYPE (1, (VOID, UHI))
! DEF_LARCH_FTYPE (3, (VOID, V16QI, CVPOINTER, SI))
! DEF_LARCH_FTYPE (3, (VOID, V16QI, CVPOINTER, DI))
! DEF_LARCH_FTYPE (3, (VOID, V32QI, CVPOINTER, SI))
! DEF_LARCH_FTYPE (3, (VOID, V32QI, CVPOINTER, DI))
  DEF_LARCH_FTYPE (3, (VOID, V4DF, POINTER, SI))
  DEF_LARCH_FTYPE (3, (VOID, V2DF, POINTER, SI))
- DEF_LARCH_FTYPE (3, (VOID, V2DI, CVPOINTER, SI))
- DEF_LARCH_FTYPE (3, (VOID, V4DI, CVPOINTER, SI))
  DEF_LARCH_FTYPE (2, (VOID, V2HI, V2HI))
  DEF_LARCH_FTYPE (2, (VOID, V4QI, V4QI))
  DEF_LARCH_FTYPE (3, (VOID, V4SF, POINTER, SI))
  DEF_LARCH_FTYPE (3, (VOID, V8SF, POINTER, SI))
- DEF_LARCH_FTYPE (3, (VOID, V4SI, CVPOINTER, SI))
- DEF_LARCH_FTYPE (3, (VOID, V8SI, CVPOINTER, SI))
- DEF_LARCH_FTYPE (3, (VOID, V8HI, CVPOINTER, SI))
- DEF_LARCH_FTYPE (3, (VOID, V16HI, CVPOINTER, SI))
  
  DEF_LARCH_FTYPE (1, (V16HI, V32QI))
  DEF_LARCH_FTYPE (1, (UV16HI, UV32QI))
--- 492,511 ----
  DEF_LARCH_FTYPE (1, (V8QI, V8QI))
  DEF_LARCH_FTYPE (2, (V8QI, V8QI, V8QI))
  
  DEF_LARCH_FTYPE (2, (VOID, SI, SI))
  DEF_LARCH_FTYPE (2, (VOID, UQI, SI))
  DEF_LARCH_FTYPE (2, (VOID, USI, UQI))
  DEF_LARCH_FTYPE (1, (VOID, UHI))
! DEF_LARCH_FTYPE (3, (VOID, V16QI, VPOINTER, SI))
! DEF_LARCH_FTYPE (3, (VOID, V16QI, VPOINTER, DI))
! DEF_LARCH_FTYPE (3, (VOID, V32QI, VPOINTER, SI))
! DEF_LARCH_FTYPE (3, (VOID, V32QI, VPOINTER, DI))
  DEF_LARCH_FTYPE (3, (VOID, V4DF, POINTER, SI))
  DEF_LARCH_FTYPE (3, (VOID, V2DF, POINTER, SI))
  DEF_LARCH_FTYPE (2, (VOID, V2HI, V2HI))
  DEF_LARCH_FTYPE (2, (VOID, V4QI, V4QI))
  DEF_LARCH_FTYPE (3, (VOID, V4SF, POINTER, SI))
  DEF_LARCH_FTYPE (3, (VOID, V8SF, POINTER, SI))
  
  DEF_LARCH_FTYPE (1, (V16HI, V32QI))
  DEF_LARCH_FTYPE (1, (UV16HI, UV32QI))
*************** DEF_LARCH_FTYPE (2, (V4DI, UQI, USI))
*** 607,625 ****
  DEF_LARCH_FTYPE (2, (V2DI, UQI, USI))
  DEF_LARCH_FTYPE (2, (V4DI, UQI, UQI))
  DEF_LARCH_FTYPE (2, (V2DI, UQI, UQI))
- DEF_LARCH_FTYPE (4, (VOID, SI, UQI, V16QI, CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, SI, UQI, V8HI, CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, SI, UQI, V4SI, CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, SI, UQI, V2DI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (V16QI, SI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (V8HI, SI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (V4SI, SI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (V2DI, SI, CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, V32QI, UQI, SI,  CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, V16HI, UQI, SI, CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, V8SI, UQI, SI, CVPOINTER))
- DEF_LARCH_FTYPE (4, (VOID, V4DI, UQI, SI, CVPOINTER))
- DEF_LARCH_FTYPE (3, (VOID, V32QI, SI,  CVPOINTER))
  DEF_LARCH_FTYPE (2, (V32QI, SI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (V16HI, SI, CVPOINTER))
  DEF_LARCH_FTYPE (2, (V8SI, SI, CVPOINTER))
--- 600,609 ----
*************** DEF_LARCH_FTYPE(3,(V4DI,V4DI,UV16HI,V16H
*** 682,691 ****
  DEF_LARCH_FTYPE(2,(UV8SI,UV32QI,UV32QI))
  DEF_LARCH_FTYPE(2,(V8SI,UV32QI,V32QI))
  
! DEF_LARCH_FTYPE(4,(VOID,V16QI,CVPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V8HI,CVPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V4SI,CVPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V2DI,CVPOINTER,SI,UQI))
  
  DEF_LARCH_FTYPE (2, (DI, V16QI, UQI))
  DEF_LARCH_FTYPE (2, (DI, V8HI, UQI))
--- 666,675 ----
  DEF_LARCH_FTYPE(2,(UV8SI,UV32QI,UV32QI))
  DEF_LARCH_FTYPE(2,(V8SI,UV32QI,V32QI))
  
! DEF_LARCH_FTYPE(4,(VOID,V16QI,VPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V8HI,VPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V4SI,VPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V2DI,VPOINTER,SI,UQI))
  
  DEF_LARCH_FTYPE (2, (DI, V16QI, UQI))
  DEF_LARCH_FTYPE (2, (DI, V8HI, UQI))
*************** DEF_LARCH_FTYPE (3, (UV16HI, UV16HI, V16
*** 707,716 ****
  DEF_LARCH_FTYPE (3, (UV8SI, UV8SI, V8SI, USI))
  DEF_LARCH_FTYPE (3, (UV4DI, UV4DI, V4DI, USI))
  
! DEF_LARCH_FTYPE(4,(VOID,V32QI,CVPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V16HI,CVPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V8SI,CVPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V4DI,CVPOINTER,SI,UQI))
  
  DEF_LARCH_FTYPE (1, (BOOLEAN,V16QI))
  DEF_LARCH_FTYPE(2,(V16QI,CVPOINTER,CVPOINTER))
--- 691,700 ----
  DEF_LARCH_FTYPE (3, (UV8SI, UV8SI, V8SI, USI))
  DEF_LARCH_FTYPE (3, (UV4DI, UV4DI, V4DI, USI))
  
! DEF_LARCH_FTYPE(4,(VOID,V32QI,VPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V16HI,VPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V8SI,VPOINTER,SI,UQI))
! DEF_LARCH_FTYPE(4,(VOID,V4DI,VPOINTER,SI,UQI))
  
  DEF_LARCH_FTYPE (1, (BOOLEAN,V16QI))
  DEF_LARCH_FTYPE(2,(V16QI,CVPOINTER,CVPOINTER))
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/loongarch-protos.h gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-protos.h
*** gcc-14.3.0/gcc/config/loongarch/loongarch-protos.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch-protos.h	Fri Jun 19 06:51:02 2026
*************** extern void loongarch_emit_swrsqrtsf (rt
*** 215,218 ****
--- 215,219 ----
  extern void loongarch_emit_swdivsf (rtx, rtx, rtx, machine_mode);
  extern bool loongarch_explicit_relocs_p (enum loongarch_symbol_type);
  extern bool loongarch_symbol_extreme_p (enum loongarch_symbol_type);
+ extern void loongarch_output_asm_load_canary (rtx reg, rtx canary, rtx tmp);
  #endif /* ! GCC_LOONGARCH_PROTOS_H */
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/loongarch.cc gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch.cc
*** gcc-14.3.0/gcc/config/loongarch/loongarch.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch.cc	Fri Jun 19 06:51:02 2026
*************** loongarch_symbol_binds_local_p (const_rt
*** 1718,1731 ****
  bool
  loongarch_const_vector_bitimm_set_p (rtx op, machine_mode mode)
  {
!   if (GET_CODE (op) == CONST_VECTOR && op != CONST0_RTX (mode))
      {
        unsigned HOST_WIDE_INT val = UINTVAL (CONST_VECTOR_ELT (op, 0));
        int vlog2 = exact_log2 (val & GET_MODE_MASK (GET_MODE_INNER (mode)));
  
        if (vlog2 != -1)
  	{
- 	  gcc_assert (GET_MODE_CLASS (mode) == MODE_VECTOR_INT);
  	  gcc_assert (vlog2 >= 0 && vlog2 <= GET_MODE_UNIT_BITSIZE (mode) - 1);
  	  return loongarch_const_vector_same_val_p (op, mode);
  	}
--- 1718,1732 ----
  bool
  loongarch_const_vector_bitimm_set_p (rtx op, machine_mode mode)
  {
!   if (GET_CODE (op) == CONST_VECTOR
!       && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT
! 	  || GET_MODE_CLASS (mode) == MODE_VECTOR_INT))
      {
        unsigned HOST_WIDE_INT val = UINTVAL (CONST_VECTOR_ELT (op, 0));
        int vlog2 = exact_log2 (val & GET_MODE_MASK (GET_MODE_INNER (mode)));
  
        if (vlog2 != -1)
  	{
  	  gcc_assert (vlog2 >= 0 && vlog2 <= GET_MODE_UNIT_BITSIZE (mode) - 1);
  	  return loongarch_const_vector_same_val_p (op, mode);
  	}
*************** loongarch_const_vector_bitimm_set_p (rtx
*** 1740,1753 ****
  bool
  loongarch_const_vector_bitimm_clr_p (rtx op, machine_mode mode)
  {
!   if (GET_CODE (op) == CONST_VECTOR && op != CONSTM1_RTX (mode))
      {
!       unsigned HOST_WIDE_INT val = ~UINTVAL (CONST_VECTOR_ELT (op, 0));
        int vlog2 = exact_log2 (val & GET_MODE_MASK (GET_MODE_INNER (mode)));
  
        if (vlog2 != -1)
  	{
- 	  gcc_assert (GET_MODE_CLASS (mode) == MODE_VECTOR_INT);
  	  gcc_assert (vlog2 >= 0 && vlog2 <= GET_MODE_UNIT_BITSIZE (mode) - 1);
  	  return loongarch_const_vector_same_val_p (op, mode);
  	}
--- 1741,1775 ----
  bool
  loongarch_const_vector_bitimm_clr_p (rtx op, machine_mode mode)
  {
!   if (GET_CODE (op) == CONST_VECTOR
!       && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT
! 	  || GET_MODE_CLASS (mode) == MODE_VECTOR_INT))
      {
!       unsigned HOST_WIDE_INT val;
!       if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
! 	{
! 	  rtx val_s = CONST_VECTOR_ELT (op, 0);
! 	  const REAL_VALUE_TYPE *x = CONST_DOUBLE_REAL_VALUE (val_s);
! 	  if (GET_MODE (val_s) == DFmode)
! 	    {
! 	      long tmp[2];
! 	      REAL_VALUE_TO_TARGET_DOUBLE (*x, tmp);
! 	      val = ~((unsigned HOST_WIDE_INT) tmp[1] << 32 | tmp[0]);
! 	    }
! 	  else
! 	    {
! 	      long tmp;
! 	      REAL_VALUE_TO_TARGET_SINGLE (*x, tmp);
! 	      val = ~((unsigned HOST_WIDE_INT) tmp);
! 	    }
! 	}
!       else
! 	val = ~UINTVAL (CONST_VECTOR_ELT (op, 0));
! 
        int vlog2 = exact_log2 (val & GET_MODE_MASK (GET_MODE_INNER (mode)));
  
        if (vlog2 != -1)
  	{
  	  gcc_assert (vlog2 >= 0 && vlog2 <= GET_MODE_UNIT_BITSIZE (mode) - 1);
  	  return loongarch_const_vector_same_val_p (op, mode);
  	}
*************** loongarch_vector_costs::add_stmt_cost (i
*** 4280,4285 ****
--- 4302,4308 ----
  	    break;
  	  }
        else if (TARGET_RECIP_VEC_DIV
+ 	       && vectype
  	       && gimple_code (stmt_info->stmt) == GIMPLE_ASSIGN)
  	{
  	  machine_mode mode = TYPE_MODE (vectype);
*************** loongarch_print_operand (FILE *file, rtx
*** 6259,6273 ****
        if (CONST_VECTOR_P (op))
  	{
  	  machine_mode mode = GET_MODE_INNER (GET_MODE (op));
! 	  unsigned HOST_WIDE_INT val = UINTVAL (CONST_VECTOR_ELT (op, 0));
! 	  int vlog2 = exact_log2 (val & GET_MODE_MASK (mode));
! 	  if (vlog2 != -1)
! 	    fprintf (file, "%d", vlog2);
! 	  else
! 	    output_operand_lossage ("invalid use of '%%%c'", letter);
  	}
!       else
! 	output_operand_lossage ("invalid use of '%%%c'", letter);
        break;
  
      case 'W':
--- 6282,6300 ----
        if (CONST_VECTOR_P (op))
  	{
  	  machine_mode mode = GET_MODE_INNER (GET_MODE (op));
! 	  rtx val_s = CONST_VECTOR_ELT (op, 0);
! 	  if (CONST_INT_P (val_s))
! 	    {
! 	      unsigned HOST_WIDE_INT val = UINTVAL (val_s);
! 	      int vlog2 = exact_log2 (val & GET_MODE_MASK (mode));
! 	      if (vlog2 != -1)
! 		{
! 		  fprintf (file, "%d", vlog2);
! 		  break;
! 		}
! 	    }
  	}
!       output_operand_lossage ("invalid use of '%%%c'", letter);
        break;
  
      case 'W':
*************** loongarch_print_operand (FILE *file, rtx
*** 6345,6356 ****
--- 6372,6385 ----
  	case E_V4SFmode:
  	case E_V8SImode:
  	case E_V8SFmode:
+ 	case E_SImode:
  	  fprintf (file, "w");
  	  break;
  	case E_V2DImode:
  	case E_V2DFmode:
  	case E_V4DImode:
  	case E_V4DFmode:
+ 	case E_DImode:
  	  fprintf (file, "d");
  	  break;
  	default:
*************** static bool
*** 8199,8205 ****
  loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
  {
    int i;
!   rtx target, op0, op1, sel, tmp;
    rtx rperm[MAX_VECT_LEN];
  
    if (GET_MODE_SIZE (d->vmode) == 16)
--- 8228,8234 ----
  loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
  {
    int i;
!   rtx target, op0, op1;
    rtx rperm[MAX_VECT_LEN];
  
    if (GET_MODE_SIZE (d->vmode) == 16)
*************** loongarch_try_expand_lsx_vshuf_const (st
*** 8218,8264 ****
        for (i = 0; i < d->nelt; i += 1)
  	  rperm[i] = GEN_INT (d->perm[i]);
  
!       if (d->vmode == E_V2DFmode)
! 	{
! 	  sel = gen_rtx_CONST_VECTOR (E_V2DImode, gen_rtvec_v (d->nelt, rperm));
! 	  tmp = simplify_gen_subreg (E_V2DImode, d->target, d->vmode, 0);
! 	  emit_move_insn (tmp, sel);
! 	}
!       else if (d->vmode == E_V4SFmode)
! 	{
! 	  sel = gen_rtx_CONST_VECTOR (E_V4SImode, gen_rtvec_v (d->nelt, rperm));
! 	  tmp = simplify_gen_subreg (E_V4SImode, d->target, d->vmode, 0);
! 	  emit_move_insn (tmp, sel);
! 	}
!       else
! 	{
! 	  sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt, rperm));
! 	  emit_move_insn (d->target, sel);
! 	}
  
!       switch (d->vmode)
! 	{
! 	case E_V2DFmode:
! 	  emit_insn (gen_lsx_vshuf_d_f (target, target, op1, op0));
! 	  break;
! 	case E_V2DImode:
! 	  emit_insn (gen_lsx_vshuf_d (target, target, op1, op0));
! 	  break;
! 	case E_V4SFmode:
! 	  emit_insn (gen_lsx_vshuf_w_f (target, target, op1, op0));
! 	  break;
! 	case E_V4SImode:
! 	  emit_insn (gen_lsx_vshuf_w (target, target, op1, op0));
! 	  break;
! 	case E_V8HImode:
! 	  emit_insn (gen_lsx_vshuf_h (target, target, op1, op0));
! 	  break;
! 	case E_V16QImode:
! 	  emit_insn (gen_lsx_vshuf_b (target, op1, op0, target));
! 	  break;
! 	default:
! 	  break;
! 	}
  
        return true;
      }
--- 8247,8269 ----
        for (i = 0; i < d->nelt; i += 1)
  	  rperm[i] = GEN_INT (d->perm[i]);
  
!       machine_mode sel_mode = related_int_vector_mode (d->vmode)
! 	.require ();
!       rtvec sel_v = gen_rtvec_v (d->nelt, rperm);
  
!       /* Despite vshuf.* (except vshuf.b) needs sel == target, we cannot
! 	 load sel into target right now: here we are dealing with
! 	 pseudo regs, and target may be the same pseudo as one of op0
! 	 or op1.  Then we'd clobber the input.  Instead, we use a new
! 	 pseudo reg here.  The reload pass will look at the constraint
! 	 of vshuf.* and move sel into target first if needed.  */
!       rtx sel = force_reg (sel_mode,
! 			   gen_rtx_CONST_VECTOR (sel_mode, sel_v));
! 
!       if (d->vmode == E_V16QImode)
! 	emit_insn (gen_lsx_vshuf_b (target, op1, op0, sel));
!       else
! 	emit_insn (gen_lsx_vshuf (d->vmode, target, sel, op1, op0));
  
        return true;
      }
*************** loongarch_expand_vec_perm_1 (rtx operand
*** 8724,8780 ****
    /* Number of elements in the vector.  */
    w = GET_MODE_NUNITS (mode);
  
!   rtx round_data[MAX_VECT_LEN];
!   rtx round_reg, round_data_rtx;
! 
!   if (mode != E_V32QImode)
      {
!       for (int i = 0; i < w; i += 1)
! 	{
! 	  round_data[i] = GEN_INT (0x1f);
! 	}
! 
!       if (mode == E_V4DFmode)
! 	{
! 	  round_data_rtx = gen_rtx_CONST_VECTOR (E_V4DImode,
! 						 gen_rtvec_v (w, round_data));
! 	  round_reg = gen_reg_rtx (E_V4DImode);
! 	}
!       else if (mode == E_V8SFmode)
! 	{
! 
! 	  round_data_rtx = gen_rtx_CONST_VECTOR (E_V8SImode,
! 						 gen_rtvec_v (w, round_data));
! 	  round_reg = gen_reg_rtx (E_V8SImode);
! 	}
!       else
! 	{
! 	  round_data_rtx = gen_rtx_CONST_VECTOR (mode,
! 						 gen_rtvec_v (w, round_data));
! 	  round_reg = gen_reg_rtx (mode);
! 	}
! 
!       emit_move_insn (round_reg, round_data_rtx);
!       switch (mode)
! 	{
! 	case E_V32QImode:
! 	  emit_insn (gen_andv32qi3 (mask, mask, round_reg));
! 	  break;
! 	case E_V16HImode:
! 	  emit_insn (gen_andv16hi3 (mask, mask, round_reg));
! 	  break;
! 	case E_V8SImode:
! 	case E_V8SFmode:
! 	  emit_insn (gen_andv8si3 (mask, mask, round_reg));
! 	  break;
! 	case E_V4DImode:
! 	case E_V4DFmode:
! 	  emit_insn (gen_andv4di3 (mask, mask, round_reg));
! 	  break;
! 	default:
! 	  gcc_unreachable ();
! 	  break;
! 	}
      }
  
    if (mode == V4DImode || mode == V4DFmode)
--- 8729,8741 ----
    /* Number of elements in the vector.  */
    w = GET_MODE_NUNITS (mode);
  
!   /* If we are using xvshuf.*, clamp the selector to avoid unpredictable
!      output.  */
!   if (maskmode != V8SImode && maskmode != V4DImode)
      {
!       rtx t = gen_const_vec_duplicate (maskmode, GEN_INT (0x1f));
!       mask = expand_binop (maskmode, and_optab, mask, t, NULL_RTX, false,
! 			   OPTAB_DIRECT);
      }
  
    if (mode == V4DImode || mode == V4DFmode)
*************** loongarch_expand_vec_perm_const (struct
*** 9254,9260 ****
    bool flag = false;
    unsigned int i;
    unsigned char idx;
!   rtx target, op0, op1, sel, tmp;
    rtx rperm[MAX_VECT_LEN];
    unsigned int remapped[MAX_VECT_LEN];
    unsigned char perm2[MAX_VECT_LEN];
--- 9215,9221 ----
    bool flag = false;
    unsigned int i;
    unsigned char idx;
!   rtx target, op0, op1;
    rtx rperm[MAX_VECT_LEN];
    unsigned int remapped[MAX_VECT_LEN];
    unsigned char perm2[MAX_VECT_LEN];
*************** loongarch_expand_vec_perm_const (struct
*** 9434,9496 ****
  expand_perm_const_end:
        if (flag)
  	{
- 	  /* Copy selector vector from memory to vector register for later insn
- 	     gen function.
- 	     If vector's element in floating point value, we cannot fit
- 	     selector argument into insn gen function directly, because of the
- 	     insn template definition.  As a solution, generate a integral mode
- 	     subreg of target, then copy selector vector (that is in integral
- 	     mode) to this subreg.  */
- 	  switch (d->vmode)
- 	    {
- 	    case E_V4DFmode:
- 	      sel = gen_rtx_CONST_VECTOR (E_V4DImode, gen_rtvec_v (d->nelt,
- 								   rperm));
- 	      tmp = simplify_gen_subreg (E_V4DImode, d->target, d->vmode, 0);
- 	      emit_move_insn (tmp, sel);
- 	      break;
- 	    case E_V8SFmode:
- 	      sel = gen_rtx_CONST_VECTOR (E_V8SImode, gen_rtvec_v (d->nelt,
- 								   rperm));
- 	      tmp = simplify_gen_subreg (E_V8SImode, d->target, d->vmode, 0);
- 	      emit_move_insn (tmp, sel);
- 	      break;
- 	    default:
- 	      sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt,
- 								 rperm));
- 	      emit_move_insn (d->target, sel);
- 	      break;
- 	    }
- 
  	  target = d->target;
  	  op0 = d->op0;
  	  op1 = d->one_vector_p ? d->op0 : d->op1;
  
! 	  /* We FINALLY can generate xvshuf.* insn.  */
! 	  switch (d->vmode)
! 	    {
! 	    case E_V4DFmode:
! 	      emit_insn (gen_lasx_xvshuf_d_f (target, target, op1, op0));
! 	      break;
! 	    case E_V4DImode:
! 	      emit_insn (gen_lasx_xvshuf_d (target, target, op1, op0));
! 	      break;
! 	    case E_V8SFmode:
! 	      emit_insn (gen_lasx_xvshuf_w_f (target, target, op1, op0));
! 	      break;
! 	    case E_V8SImode:
! 	      emit_insn (gen_lasx_xvshuf_w (target, target, op1, op0));
! 	      break;
! 	    case E_V16HImode:
! 	      emit_insn (gen_lasx_xvshuf_h (target, target, op1, op0));
! 	      break;
! 	    case E_V32QImode:
! 	      emit_insn (gen_lasx_xvshuf_b (target, op1, op0, target));
! 	      break;
! 	    default:
! 	      gcc_unreachable ();
! 	      break;
! 	    }
  
  	  return true;
  	}
--- 9395,9417 ----
  expand_perm_const_end:
        if (flag)
  	{
  	  target = d->target;
  	  op0 = d->op0;
  	  op1 = d->one_vector_p ? d->op0 : d->op1;
  
! 	  machine_mode sel_mode = related_int_vector_mode (d->vmode)
! 	    .require ();
! 	  rtvec sel_v = gen_rtvec_v (d->nelt, rperm);
! 
! 	  /* See the comment in loongarch_expand_lsx_shuffle for why
! 	     we don't simply use a SUBREG to pun target.  */
! 	  rtx sel = force_reg (sel_mode,
! 			       gen_rtx_CONST_VECTOR (sel_mode, sel_v));
! 
! 	  if (d->vmode == E_V32QImode)
! 	    emit_insn (gen_lasx_xvshuf_b (target, op1, op0, sel));
! 	  else
! 	    emit_insn (gen_lasx_xvshuf (d->vmode, target, sel, op1, op0));
  
  	  return true;
  	}
*************** loongarch_expand_vector_init_same (rtx t
*** 10044,10075 ****
  	}
      }
  
!   if (imode == GET_MODE (same))
!     temp = same;
!   else if (GET_MODE_SIZE (imode) >= UNITS_PER_WORD)
!     {
!       if (GET_CODE (same) == MEM)
! 	{
! 	  rtx reg_tmp = gen_reg_rtx (GET_MODE (same));
! 	  loongarch_emit_move (reg_tmp, same);
! 	  temp = simplify_gen_subreg (imode, reg_tmp, GET_MODE (reg_tmp), 0);
! 	}
!       else
! 	temp = simplify_gen_subreg (imode, same, GET_MODE (same), 0);
!     }
!   else
!     {
!       if (GET_CODE (same) == MEM)
! 	{
! 	  rtx reg_tmp = gen_reg_rtx (GET_MODE (same));
! 	  loongarch_emit_move (reg_tmp, same);
! 	  temp = lowpart_subreg (imode, reg_tmp, GET_MODE (reg_tmp));
! 	}
!       else
! 	temp = lowpart_subreg (imode, same, GET_MODE (same));
!     }
! 
!   temp = force_reg (imode, temp);
  
    switch (vmode)
      {
--- 9965,9971 ----
  	}
      }
  
!   temp = force_reg (imode, same);
  
    switch (vmode)
      {
*************** loongarch_build_signbit_mask (machine_mo
*** 10806,10812 ****
      return force_reg (inner_mode, mask);
  
    v = loongarch_build_const_vector (vec_mode, vect, mask);
!   return force_reg (vec_mode, v);
  }
  
  /* Use rsqrte instruction and Newton-Rhapson to compute the approximation of
--- 10702,10708 ----
      return force_reg (inner_mode, mask);
  
    v = loongarch_build_const_vector (vec_mode, vect, mask);
!   return v;
  }
  
  /* Use rsqrte instruction and Newton-Rhapson to compute the approximation of
*************** void loongarch_emit_swrsqrtsf (rtx res,
*** 10855,10864 ****
        if (VECTOR_MODE_P (mode))
  	{
  	  machine_mode imode = related_int_vector_mode (mode).require ();
! 	  rtx mask = gen_reg_rtx (imode);
! 	  emit_insn (gen_rtx_SET (mask, gen_rtx_NE (imode, a, zero)));
! 	  emit_insn (gen_rtx_SET (x0, gen_rtx_AND (mode, x0,
! 						   gen_lowpart (mode, mask))));
  	}
        else
  	{
--- 10751,10761 ----
        if (VECTOR_MODE_P (mode))
  	{
  	  machine_mode imode = related_int_vector_mode (mode).require ();
! 	  rtx mask = force_reg (imode, gen_rtx_NE (imode, a, zero));
! 	  emit_move_insn (gen_lowpart (imode, x0),
! 			  gen_rtx_AND (imode,
! 				       gen_lowpart (imode, x0),
! 				       mask));
  	}
        else
  	{
*************** loongarch_c_mode_for_suffix (char suffix
*** 11014,11019 ****
--- 10911,10977 ----
    return VOIDmode;
  }
  
+ /* Implement TARGET_COMPUTE_PRESSURE_CLASSES.  */
+ 
+ static int
+ loongarch_compute_pressure_classes (reg_class *classes)
+ {
+   int i = 0;
+   classes[i++] = GENERAL_REGS;
+   classes[i++] = FP_REGS;
+   classes[i++] = FCC_REGS;
+   return i;
+ }
+ 
+ /* Output assembly to materialize the address of the stack canary value
+    into reg.  The third argument, tmp, should be and should only be
+    non-NULL if the extreme code model is effective for the canary.  If
+    the fourth arugment, load, is true, the canary value is loaded into
+    the register.
+ 
+    The assembly cannot be splitted due to security reason.  */
+ void
+ loongarch_output_asm_load_canary (rtx reg, rtx canary, rtx tmp)
+ {
+   gcc_checking_assert (ssp_operand (canary, VOIDmode));
+   gcc_checking_assert ((!tmp) == ssp_normal_operand (canary, VOIDmode));
+   gcc_checking_assert (register_operand (reg, Pmode));
+ 
+   rtx op[] = {reg, canary, tmp};
+   bool got = (loongarch_classify_symbol (canary) == SYMBOL_GOT_DISP);
+   bool need_ld = false;
+ 
+   if (la_opt_explicit_relocs != EXPLICIT_RELOCS_ALWAYS)
+     {
+       if (got)
+ 	output_asm_insn (tmp ? "la.global\t%0,%2,%1" : "la.global\t%0,%1",
+ 			 op);
+       else
+ 	output_asm_insn (tmp ? "la.local\t%0,%2,%1" : "la.local\t%0,%1",
+ 			 op);
+ 
+       need_ld = true;
+     }
+   else
+     {
+       output_asm_insn ("pcalau12i\t%0,%r1", op);
+       if (!tmp)
+ 	output_asm_insn ("ld.%v0\t%0,%0,%L1", op);
+       else
+ 	{
+ 	  output_asm_insn ("addi.d\t%2,$r0,%L1", op);
+ 	  output_asm_insn ("lu32i.d\t%2,%R1", op);
+ 	  output_asm_insn ("lu52i.d\t%2,%2,%H1", op);
+ 	  output_asm_insn ("ldx.d\t%0,%0,%2", op);
+ 	}
+ 
+       need_ld = got;
+     }
+ 
+   if (need_ld)
+     output_asm_insn ("ld.%v0\t%0,%0,0", op);
+ }
+ 
  /* Initialize the GCC target structure.  */
  #undef TARGET_ASM_ALIGNED_HI_OP
  #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
*************** loongarch_c_mode_for_suffix (char suffix
*** 11276,11281 ****
--- 11234,11242 ----
  #undef TARGET_C_MODE_FOR_SUFFIX
  #define TARGET_C_MODE_FOR_SUFFIX loongarch_c_mode_for_suffix
  
+ #undef TARGET_COMPUTE_PRESSURE_CLASSES
+ #define TARGET_COMPUTE_PRESSURE_CLASSES loongarch_compute_pressure_classes
+ 
  struct gcc_target targetm = TARGET_INITIALIZER;
  
  #include "gt-loongarch.h"
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/loongarch.md gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch.md
*** gcc-14.3.0/gcc/config/loongarch/loongarch.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/loongarch.md	Fri Jun 19 06:51:02 2026
***************
*** 88,93 ****
--- 88,95 ----
    UNSPEC_LOAD_SYMBOL_OFFSET64
    UNSPEC_LA_PCREL_64_PART1
    UNSPEC_LA_PCREL_64_PART2
+ 
+   UNSPEC_SSP
  ])
  
  (define_c_enum "unspecv" [
***************
*** 2205,2211 ****
    (unspec:DI [(const_int 0)]
      UNSPEC_LOAD_SYMBOL_OFFSET64)
    (clobber (match_operand:DI 2 "register_operand" "=&r,r"))]
!  "TARGET_64BIT && TARGET_CMODEL_EXTREME"
  {
    if (which_alternative == 1)
      return "#";
--- 2207,2213 ----
    (unspec:DI [(const_int 0)]
      UNSPEC_LOAD_SYMBOL_OFFSET64)
    (clobber (match_operand:DI 2 "register_operand" "=&r,r"))]
!  "TARGET_64BIT"
  {
    if (which_alternative == 1)
      return "#";
***************
*** 3340,3346 ****
  ;; QImode values so we can force zero-extension.
  (define_mode_iterator BR [(QI "TARGET_64BIT") SI (DI "TARGET_64BIT")])
  
! (define_expand "cbranch<mode>4"
    [(set (pc)
  	(if_then_else (match_operator 0 "comparison_operator"
  			[(match_operand:BR 1 "register_operand")
--- 3342,3348 ----
  ;; QImode values so we can force zero-extension.
  (define_mode_iterator BR [(QI "TARGET_64BIT") SI (DI "TARGET_64BIT")])
  
! (define_expand "@cbranch<mode>4"
    [(set (pc)
  	(if_then_else (match_operator 0 "comparison_operator"
  			[(match_operand:BR 1 "register_operand")
***************
*** 4386,4391 ****
--- 4388,4477 ----
      operands[0] = loongarch_rewrite_mem_for_simple_ldst (operands[0]);
    })
  
+ ;; Set and check against stack canary without leaving it in a register.
+ ;; DO NOT ATTEMPT TO SPLIT THESE INSNS!  It's important for security reason
+ ;; that the canary value does not live beyond the life of this sequence.
+ 
+ (define_insn "@stack_protect_combined_set_normal_<mode>"
+   [(set (match_operand:P 0 "memory_operand" "=m,ZC")
+         (unspec:P [(mem:P (match_operand:P 1 "ssp_normal_operand"))]
+ 		  UNSPEC_SSP))
+    (set (match_scratch:P 2 "=&r,&r") (const_int 0))]
+   ""
+ {
+   loongarch_output_asm_load_canary (operands[2], operands[1], NULL_RTX);
+   output_asm_insn (which_alternative ? "stptr.d\t%2,%0" : "st.d\t%2,%0",
+ 		   operands);
+   return "ori\t%2,$r0,0";
+ }
+   [(set_attr "type" "store")
+    (set_attr "length" "20")])
+ 
+ (define_insn "@stack_protect_combined_set_extreme_<mode>"
+   [(set (match_operand:P 0 "memory_operand" "=m,ZC")
+         (unspec:P [(mem:P (match_operand:P 1 "ssp_operand"))] UNSPEC_SSP))
+    (set (match_scratch:P 2 "=&r,&r") (const_int 0))
+    (set (match_scratch:P 3 "=&r,&r") (const_int 0))]
+   ""
+ {
+   loongarch_output_asm_load_canary (operands[2], operands[1], operands[3]);
+   output_asm_insn (which_alternative ? "stptr.d\t%2,%0" : "st.d\t%2,%0",
+ 		   operands);
+   return "ori\t%2,$r0,0\n\tori\t%3,$r0,0";
+ }
+   [(set_attr "type" "store")
+    (set_attr "length" "36")])
+ 
+ (define_insn "@stack_protect_combined_test_internal_<mode>"
+   [(set (match_operand:P 0 "register_operand" "=r,r,&r,&r")
+ 	(xor:P
+ 	  (match_operand:P 1 "memory_operand" "=m,ZC,m,ZC")
+ 	    (unspec:P
+ 	      [(mem:P (match_operand:P 2 "ssp_operand" "ZE,ZE,ZF,ZF"))]
+ 	      UNSPEC_SSP)))
+    (set (match_scratch:P 3 "=&r,&r,&r,&r") (const_int 0))]
+   ""
+ {
+   rtx t = (which_alternative >= 2 ? operands[0] : NULL_RTX);
+   loongarch_output_asm_load_canary (operands[3], operands[2], t);
+   output_asm_insn ((which_alternative & 1) ? "ldptr.d\t%0,%1"
+ 					   : "ld.d\t%0,%1",
+ 		   operands);
+   return "xor\t%0,%0,%3\n\tori\t%3,$r0,0";
+ }
+   [(set_attr "type" "load,load,load,load")
+    (set_attr "length" "24,24,36,36")])
+ 
+ (define_expand "stack_protect_combined_set"
+   [(match_operand 0 "memory_operand")
+    (match_operand 1 "memory_operand")]
+   ""
+ {
+   rtx canary = XEXP (operands[1], 0);
+   auto fn = (ssp_normal_operand (canary, VOIDmode)
+ 	     ? gen_stack_protect_combined_set_normal
+ 	     : gen_stack_protect_combined_set_extreme);
+ 
+   emit_insn (fn (Pmode, operands[0], canary));
+   DONE;
+ })
+ 
+ (define_expand "stack_protect_combined_test"
+   [(match_operand 0 "memory_operand")
+    (match_operand 1 "memory_operand")
+    (match_operand 2 "")]
+   ""
+ {
+   rtx t = gen_reg_rtx (Pmode);
+   rtx canary = XEXP (operands[1], 0);
+   emit_insn (gen_stack_protect_combined_test_internal (Pmode, t,
+ 						       operands[0],
+ 						       canary));
+   rtx cond = gen_rtx_EQ (VOIDmode, t, const0_rtx);
+   emit_jump_insn (gen_cbranch4 (Pmode, cond, t, const0_rtx, operands[2]));
+   DONE;
+ })
+ 
  ;; Synchronization instructions.
  
  (include "sync.md")
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/lsx.md gcc-14.3.0-RC-20260619/gcc/config/loongarch/lsx.md
*** gcc-14.3.0/gcc/config/loongarch/lsx.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/lsx.md	Fri Jun 19 06:51:02 2026
***************
*** 689,697 ****
    DONE;
  })
  
! (define_insn "lsx_vshuf_<lsxfmt_f>"
    [(set (match_operand:LSX_DWH 0 "register_operand" "=f")
! 	(unspec:LSX_DWH [(match_operand:LSX_DWH 1 "register_operand" "0")
  			 (match_operand:LSX_DWH 2 "register_operand" "f")
  			 (match_operand:LSX_DWH 3 "register_operand" "f")]
  			UNSPEC_LSX_VSHUF))]
--- 689,697 ----
    DONE;
  })
  
! (define_insn "@lsx_vshuf_<lsxfmt_f>"
    [(set (match_operand:LSX_DWH 0 "register_operand" "=f")
! 	(unspec:LSX_DWH [(match_operand:<VIMODE> 1 "register_operand" "0")
  			 (match_operand:LSX_DWH 2 "register_operand" "f")
  			 (match_operand:LSX_DWH 3 "register_operand" "f")]
  			UNSPEC_LSX_VSHUF))]
***************
*** 844,902 ****
    [(set_attr "type" "simd_div")
     (set_attr "mode" "<MODE>")])
  
- (define_insn "xor<mode>3"
-   [(set (match_operand:LSX 0 "register_operand" "=f,f,f")
- 	(xor:LSX
- 	  (match_operand:LSX 1 "register_operand" "f,f,f")
- 	  (match_operand:LSX 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
-   "ISA_HAS_LSX"
-   "@
-    vxor.v\t%w0,%w1,%w2
-    vbitrevi.%v0\t%w0,%w1,%V2
-    vxori.b\t%w0,%w1,%B2"
-   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
-    (set_attr "mode" "<MODE>")])
- 
- (define_insn "ior<mode>3"
-   [(set (match_operand:LSX 0 "register_operand" "=f,f,f")
- 	(ior:LSX
- 	  (match_operand:LSX 1 "register_operand" "f,f,f")
- 	  (match_operand:LSX 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
-   "ISA_HAS_LSX"
-   "@
-    vor.v\t%w0,%w1,%w2
-    vbitseti.%v0\t%w0,%w1,%V2
-    vori.b\t%w0,%w1,%B2"
-   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
-    (set_attr "mode" "<MODE>")])
- 
- (define_insn "and<mode>3"
-   [(set (match_operand:LSX 0 "register_operand" "=f,f,f")
- 	(and:LSX
- 	  (match_operand:LSX 1 "register_operand" "f,f,f")
- 	  (match_operand:LSX 2 "reg_or_vector_same_val_operand" "f,YZ,Urv8")))]
-   "ISA_HAS_LSX"
- {
-   switch (which_alternative)
-     {
-     case 0:
-       return "vand.v\t%w0,%w1,%w2";
-     case 1:
-       {
- 	rtx elt0 = CONST_VECTOR_ELT (operands[2], 0);
- 	unsigned HOST_WIDE_INT val = ~UINTVAL (elt0);
- 	operands[2] = loongarch_gen_const_int_vector (<MODE>mode, val & (-val));
- 	return "vbitclri.%v0\t%w0,%w1,%V2";
-       }
-     case 2:
-       return "vandi.b\t%w0,%w1,%B2";
-     default:
-       gcc_unreachable ();
-     }
- }
-   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
-    (set_attr "mode" "<MODE>")])
- 
  (define_insn "one_cmpl<mode>2"
    [(set (match_operand:ILSX 0 "register_operand" "=f")
  	(not:ILSX (match_operand:ILSX 1 "register_operand" "f")))]
--- 844,849 ----
***************
*** 1006,1021 ****
    [(set_attr "type" "simd_fmadd")
     (set_attr "mode" "<MODE>")])
  
- (define_insn "fnma<mode>4"
-   [(set (match_operand:FLSX 0 "register_operand" "=f")
- 	(fma:FLSX (neg:FLSX (match_operand:FLSX 1 "register_operand" "f"))
- 		  (match_operand:FLSX 2 "register_operand" "f")
- 		  (match_operand:FLSX 3 "register_operand" "0")))]
-   "ISA_HAS_LSX"
-   "vfnmsub.<flsxfmt>\t%w0,%w1,%w2,%w0"
-   [(set_attr "type" "simd_fmadd")
-    (set_attr "mode" "<MODE>")])
- 
  (define_expand "sqrt<mode>2"
    [(set (match_operand:FLSX 0 "register_operand")
      (sqrt:FLSX (match_operand:FLSX 1 "register_operand")))]
--- 953,958 ----
***************
*** 2621,2679 ****
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
- (define_expand "copysign<mode>3"
-   [(set (match_dup 4)
- 	(and:FLSX
- 	  (not:FLSX (match_dup 3))
- 	  (match_operand:FLSX 1 "register_operand")))
-    (set (match_dup 5)
- 	(and:FLSX (match_dup 3)
- 		  (match_operand:FLSX 2 "reg_or_vector_same_val_operand")))
-    (set (match_operand:FLSX 0 "register_operand")
- 	(ior:FLSX (match_dup 4) (match_dup 5)))]
-   "ISA_HAS_LSX"
- {
-   /* copysign (x, -1) should instead be expanded as setting the sign
-      bit.  */
-   if (!REG_P (operands[2]))
-     {
-       rtx op2_elt = unwrap_const_vec_duplicate (operands[2]);
-       if (GET_CODE (op2_elt) == CONST_DOUBLE
- 	  && real_isneg (CONST_DOUBLE_REAL_VALUE (op2_elt)))
- 	{
- 	  rtx n = GEN_INT (8 * GET_MODE_SIZE (<UNITMODE>mode) - 1);
- 	  operands[0] = lowpart_subreg (<VIMODE>mode, operands[0],
- 					<MODE>mode);
- 	  operands[1] = lowpart_subreg (<VIMODE>mode, operands[1],
- 					<MODE>mode);
- 	  emit_insn (gen_lsx_vbitseti_<lsxfmt> (operands[0], operands[1],
- 						n));
- 	  DONE;
- 	}
-     }
- 
-   operands[2] = force_reg (<MODE>mode, operands[2]);
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
-   operands[5] = gen_reg_rtx (<MODE>mode);
- })
- 
- (define_expand "@xorsign<mode>3"
-   [(set (match_dup 4)
-     (and:FLSX (match_dup 3)
-         (match_operand:FLSX 2 "register_operand")))
-    (set (match_operand:FLSX 0 "register_operand")
-     (xor:FLSX (match_dup 4)
-          (match_operand:FLSX 1 "register_operand")))]
-   "ISA_HAS_LSX"
- {
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
- })
- 
- 
  (define_insn "absv2df2"
    [(set (match_operand:V2DF 0 "register_operand" "=f")
  	(abs:V2DF (match_operand:V2DF 1 "register_operand" "f")))]
--- 2558,2563 ----
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/predicates.md gcc-14.3.0-RC-20260619/gcc/config/loongarch/predicates.md
*** gcc-14.3.0/gcc/config/loongarch/predicates.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/predicates.md	Fri Jun 19 06:51:02 2026
***************
*** 588,593 ****
--- 588,601 ----
   (ior (match_operand 0 "register_operand")
        (match_operand 0 "symbolic_off64_operand")))
  
+ ;; Currently stack canary must be the global symbol __stack_chk_guard.
+ (define_predicate "ssp_operand" (match_code "symbol_ref"))
+ 
+ ;; If the stack canary is within the normal/medium code model.
+ (define_predicate "ssp_normal_operand"
+   (and (match_operand 0 "ssp_operand")
+        (not (match_operand 0 "symbolic_off64_operand"))))
+ 
  (define_predicate "equality_operator"
    (match_code "eq,ne"))
  
***************
*** 642,647 ****
--- 650,667 ----
    return loongarch_const_vector_same_int_p (op, mode, 0, 63);
  })
  
+ (define_predicate "const_vector_neg_fp_operand"
+   (match_code "const_vector")
+ {
+   machine_mode imode = related_int_vector_mode (mode).require ();
+   rtx mask = loongarch_build_signbit_mask (imode, 1, 0);
+ 
+   op = gen_lowpart (imode, op);
+   return rtx_equal_p (mask,
+ 		      simplify_const_binary_operation (AND, imode, mask,
+ 						       op));
+ })
+ 
  (define_predicate "par_const_vector_shf_set_operand"
    (match_code "parallel")
  {
***************
*** 667,669 ****
--- 687,693 ----
  (define_predicate "reg_or_vector_same_uimm6_operand"
    (ior (match_operand 0 "register_operand")
         (match_operand 0 "const_vector_same_uimm6_operand")))
+ 
+ (define_predicate "reg_or_vector_neg_fp_operand"
+   (ior (match_operand 0 "register_operand")
+        (match_operand 0 "const_vector_neg_fp_operand")))
diff -Nrcpad gcc-14.3.0/gcc/config/loongarch/simd.md gcc-14.3.0-RC-20260619/gcc/config/loongarch/simd.md
*** gcc-14.3.0/gcc/config/loongarch/simd.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/loongarch/simd.md	Fri Jun 19 06:51:02 2026
***************
*** 35,40 ****
--- 35,43 ----
  ;; All FP modes available
  (define_mode_iterator FVEC    [(FLSX "ISA_HAS_LSX") (FLASX "ISA_HAS_LASX")])
  
+ ;; All vector modes available
+ (define_mode_iterator ALLVEC  [IVEC FVEC])
+ 
  ;; Mnemonic prefix, "x" for LASX modes.
  (define_mode_attr x [(V2DI "") (V4SI "") (V8HI "") (V16QI "")
  		     (V2DF "") (V4SF "")
***************
*** 327,332 ****
--- 330,346 ----
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
+ ;; <x>vfnmsub.{s/d}
+ (define_insn "fnma<mode>4"
+   [(set (match_operand:FVEC 0 "register_operand" "=f")
+ 	(fma:FVEC (neg:FVEC (match_operand:FVEC 1 "register_operand" "f"))
+ 		  (match_operand:FVEC 2 "register_operand" "f")
+ 		  (match_operand:FVEC 3 "register_operand" "f")))]
+   "!HONOR_SIGNED_ZEROS (<MODE>mode)"
+   "<x>vfnmsub.<simdfmt>\t%<wu>0,%<wu>1,%<wu>2,%<wu>3"
+   [(set_attr "type" "simd_fmadd")
+    (set_attr "mode" "<MODE>")])
+ 
  ;; <x>vfcmp.*.{s/d} with defined RTX code
  ;; There are no fcmp.{sugt/suge/cgt/cge}.{s/d} menmonics in GAS, so we have
  ;; to reverse the operands ourselves :(.
***************
*** 485,490 ****
--- 499,603 ----
    [(set_attr "type" "simd_logic")
     (set_attr "mode" "<MODE>")])
  
+ (define_insn "xor<mode>3"
+   [(set (match_operand:IVEC 0 "register_operand" "=f,f,f")
+ 	(xor:IVEC
+ 	  (match_operand:IVEC 1 "register_operand" "f,f,f")
+ 	  (match_operand:IVEC 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
+   ""
+   "@
+    <x>vxor.v\t%<wu>0,%<wu>1,%<wu>2
+    <x>vbitrevi.%v0\t%<wu>0,%<wu>1,%V2
+    <x>vxori.b\t%<wu>0,%<wu>1,%B2"
+   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "ior<mode>3"
+   [(set (match_operand:IVEC 0 "register_operand" "=f,f,f")
+ 	(ior:IVEC
+ 	  (match_operand:IVEC 1 "register_operand" "f,f,f")
+ 	  (match_operand:IVEC 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
+   ""
+   "@
+    <x>vor.v\t%<wu>0,%<wu>1,%<wu>2
+    <x>vbitseti.%v0\t%<wu>0,%<wu>1,%V2
+    <x>vori.b\t%<wu>0,%<wu>1,%B2"
+   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "and<mode>3"
+   [(set (match_operand:IVEC 0 "register_operand" "=f,f,f")
+ 	(and:IVEC
+ 	  (match_operand:IVEC 1 "register_operand" "f,f,f")
+ 	  (match_operand:IVEC 2 "reg_or_vector_same_val_operand" "f,YZ,Urv8")))]
+   ""
+ {
+   switch (which_alternative)
+     {
+     case 0:
+       return "<x>vand.v\t%<wu>0,%<wu>1,%<wu>2";
+     case 1:
+       {
+ 	operands[2] = simplify_const_unary_operation (NOT, <MODE>mode,
+ 						      operands[2],
+ 						      <MODE>mode);
+ 	return "<x>vbitclri.%v0\t%<wu>0,%<wu>1,%V2";
+       }
+     case 2:
+       return "<x>vandi.b\t%<wu>0,%<wu>1,%B2";
+     default:
+       gcc_unreachable ();
+     }
+ }
+   [(set_attr "type" "simd_logic,simd_bit,simd_logic")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_expand "copysign<mode>3"
+   [(match_operand:FVEC 0 "register_operand")
+    (match_operand:FVEC 1 "register_operand")
+    (match_operand:FVEC 2 "reg_or_vector_neg_fp_operand")]
+   ""
+ {
+   machine_mode imode = <VIMODE>mode;
+   rtx op[3], mask = loongarch_build_signbit_mask (imode, 1, 0);
+ 
+   /* Pun the operation into fixed-point bitwise operations.  */
+   for (int i = 0; i < 3; i++)
+     op[i] = lowpart_subreg (imode, operands[i], <MODE>mode);
+ 
+   /* Copysign from a positive const should have been already simplified
+      to abs, ignore the case here.  Copysign from a negative const is
+      a simple vbitset which is an alternative of ior (see above).  */
+   if (const_vector_neg_fp_operand (operands[2], <MODE>mode))
+     emit_insn (gen_ior<vimode>3 (op[0], op[1], mask));
+   else
+     {
+       mask = force_reg (imode, mask);
+       emit_insn (gen_<simd_isa>_<x>vbitsel_<simdfmt_as_i> (op[0], op[1],
+ 							   op[2], mask));
+     }
+ 
+   DONE;
+ })
+ 
+ (define_expand "@xorsign<mode>3"
+   [(match_operand:FVEC 0 "register_operand")
+    (match_operand:FVEC 1 "register_operand")
+    (match_operand:FVEC 2 "register_operand")]
+   ""
+ {
+   machine_mode imode = <VIMODE>mode;
+   rtx op[3];
+ 
+   for (int i = 0; i < 3; i++)
+     op[i] = lowpart_subreg (imode, operands[i], <MODE>mode);
+ 
+   rtx t = loongarch_build_signbit_mask (imode, 1, 0);
+   t = force_reg (imode, simplify_gen_binary (AND, imode, op[2], t));
+   emit_move_insn (op[0], simplify_gen_binary (XOR, imode, op[1], t));
+   DONE;
+ })
+ 
  ; The LoongArch SX Instructions.
  (include "lsx.md")
  
diff -Nrcpad gcc-14.3.0/gcc/config/microblaze/iterators.md gcc-14.3.0-RC-20260619/gcc/config/microblaze/iterators.md
*** gcc-14.3.0/gcc/config/microblaze/iterators.md	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/config/microblaze/iterators.md	Fri Jun 19 06:51:02 2026
***************
*** 0 ****
--- 1,25 ----
+ ;; Iterator definitions for GCC MicroBlaze machine description files.
+ ;; Copyright (C) 2012-2024 Free Software Foundation, Inc.
+ ;;
+ ;; This file is part of GCC.
+ ;;
+ ;; GCC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 3, or (at your option)
+ ;; any later version.
+ ;;
+ ;; GCC is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ ;;
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GCC; see the file COPYING3.  If not see
+ ;; <http://www.gnu.org/licenses/>.
+ 
+ ; atomics code iterator
+ (define_code_iterator any_atomic [plus ior xor and])
+ 
+ ; atomics code attribute
+ (define_code_attr atomic_optab
+   [(plus "add") (ior "or") (xor "xor") (and "and")])
diff -Nrcpad gcc-14.3.0/gcc/config/microblaze/microblaze-protos.h gcc-14.3.0-RC-20260619/gcc/config/microblaze/microblaze-protos.h
*** gcc-14.3.0/gcc/config/microblaze/microblaze-protos.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/microblaze/microblaze-protos.h	Fri Jun 19 06:51:02 2026
*************** extern int symbol_mentioned_p (rtx);
*** 62,67 ****
--- 62,68 ----
  extern int label_mentioned_p (rtx);
  extern bool microblaze_cannot_force_const_mem (machine_mode, rtx);
  extern void microblaze_eh_return (rtx op0);
+ extern void microblaze_subword_address (rtx, rtx *, rtx *);
  #endif  /* RTX_CODE */
  
  /* Declare functions in microblaze-c.cc.  */
diff -Nrcpad gcc-14.3.0/gcc/config/microblaze/microblaze.cc gcc-14.3.0-RC-20260619/gcc/config/microblaze/microblaze.cc
*** gcc-14.3.0/gcc/config/microblaze/microblaze.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/microblaze/microblaze.cc	Fri Jun 19 06:51:02 2026
*************** section *sdata2_section;
*** 239,244 ****
--- 239,248 ----
  #define TARGET_HAVE_TLS true
  #endif
  
+ /* MicroBlaze does not do speculative execution.  */
+ #undef  TARGET_HAVE_SPECULATION_SAFE_VALUE
+ #define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
+ 
  /* Return truth value if a CONST_DOUBLE is ok to be a legitimate constant.  */
  static bool
  microblaze_const_double_ok (rtx op, machine_mode mode)
*************** microblaze_expand_block_move (rtx dest,
*** 1296,1301 ****
--- 1300,1333 ----
    return false;
  }
  
+ /* Compute memory address *aligned_mem and corresponding shift value (*shift)
+    from a QImode memory reference MEM */
+ void
+ microblaze_subword_address (rtx mem, rtx *aligned_mem, rtx *shift)
+ {
+   /* Align the memory address to a word.  */
+   rtx addr = force_reg (Pmode, XEXP (mem, 0));
+ 
+   rtx addr_mask = gen_int_mode (-4, Pmode);
+ 
+   rtx aligned_addr = gen_reg_rtx (Pmode);
+ 
+   emit_move_insn (aligned_addr,  gen_rtx_AND (Pmode, addr, addr_mask));
+ 
+   *aligned_mem = change_address (mem, SImode, aligned_addr);
+ 
+   /* Calculate the shift amount.  */
+   emit_move_insn (*shift, gen_rtx_AND (SImode, addr, gen_int_mode (3, SImode)));
+ 
+   if (TARGET_LITTLE_ENDIAN == 0) {
+     emit_move_insn (*shift,
+ 		    gen_rtx_MINUS (SImode, gen_int_mode (3, SImode), *shift));
+   }
+ 
+   emit_move_insn (*shift, gen_rtx_ASHIFT (SImode, *shift,
+ 					  gen_int_mode (3, SImode)));
+ }
+ 
  static bool
  microblaze_rtx_costs (rtx x, machine_mode mode, int outer_code ATTRIBUTE_UNUSED,
  		      int opno ATTRIBUTE_UNUSED, int *total,
diff -Nrcpad gcc-14.3.0/gcc/config/microblaze/microblaze.md gcc-14.3.0-RC-20260619/gcc/config/microblaze/microblaze.md
*** gcc-14.3.0/gcc/config/microblaze/microblaze.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/microblaze/microblaze.md	Fri Jun 19 06:51:02 2026
***************
*** 21,26 ****
--- 21,27 ----
  
  (include "constraints.md")
  (include "predicates.md")
+ (include "iterators.md")
  
  ;;----------------------------------------------------
  ;; Constants
***************
*** 43,48 ****
--- 44,53 ----
    (UNSPEC_TLS           106)    ;; jump table
    (UNSPEC_SET_TEXT      107)    ;; set text start
    (UNSPEC_TEXT          108)    ;; data text relative
+   (UNSPECV_CAS_BOOL     201)    ;; compare and swap (bool)
+   (UNSPECV_CAS_VAL      202)    ;; compare and swap (val)
+   (UNSPECV_CAS_MEM      203)    ;; compare and swap (mem)
+   (UNSPECV_ATOMIC_FETCH_OP     204)    ;; atomic fetch op
  ])
  
  (define_c_enum "unspec" [
***************
*** 79,85 ****
  ;; bshift 	Shift operations
  
  (define_attr "type"
!   "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap"
    (const_string "unknown"))
  
  ;; Main data type used by the insn
--- 84,90 ----
  ;; bshift 	Shift operations
  
  (define_attr "type"
!   "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap,atomic"
    (const_string "unknown"))
  
  ;; Main data type used by the insn
diff -Nrcpad gcc-14.3.0/gcc/config/microblaze/sync.md gcc-14.3.0-RC-20260619/gcc/config/microblaze/sync.md
*** gcc-14.3.0/gcc/config/microblaze/sync.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/microblaze/sync.md	Fri Jun 19 06:51:02 2026
***************
*** 18,43 ****
  ;; <http://www.gnu.org/licenses/>.
  
  (define_insn "atomic_compare_and_swapsi"
!   [(match_operand:SI 0 "register_operand" "=&d")	;; bool output
!    (match_operand:SI 1 "register_operand" "=&d")	;; val output
!    (match_operand:SI 2 "nonimmediate_operand" "+Q")	;; memory
!    (match_operand:SI 3 "register_operand" "d")		;; expected value
!    (match_operand:SI 4 "register_operand" "d")		;; desired value
!    (match_operand:SI 5 "const_int_operand" "")		;; is_weak
!    (match_operand:SI 6 "const_int_operand" "")		;; mod_s
!    (match_operand:SI 7 "const_int_operand" "")		;; mod_f
     (clobber (match_scratch:SI 8 "=&d"))]
    ""
    {
!     output_asm_insn ("addc \tr0,r0,r0", operands);
!     output_asm_insn ("lwx  \t%1,%y2,r0", operands);
!     output_asm_insn ("addic\t%8,r0,0", operands);
!     output_asm_insn ("bnei \t%8,.-8", operands);
!     output_asm_insn ("cmp  \t%0,%1,%3", operands);
!     output_asm_insn ("bnei \t%0,.+16", operands);
!     output_asm_insn ("swx  \t%4,%y2,r0", operands);
!     output_asm_insn ("addic\t%8,r0,0", operands);
!     output_asm_insn ("bnei \t%8,.-28", operands);
!     return "";
    }
  )
--- 18,114 ----
  ;; <http://www.gnu.org/licenses/>.
  
  (define_insn "atomic_compare_and_swapsi"
!   [(set (match_operand:SI 0 "register_operand" "=&d")		;; bool output
!         (unspec_volatile:SI
!           [(match_operand:SI 2 "nonimmediate_operand" "+Q")	;; memory
!            (match_operand:SI 3 "register_operand" "d")		;; expected value
!            (match_operand:SI 4 "register_operand" "d")]		;; desired value
!           UNSPECV_CAS_BOOL))
!    (set (match_operand:SI 1 "register_operand" "=&d")		;; val output
!         (unspec_volatile:SI [(const_int 0)] UNSPECV_CAS_VAL))
!    (set (match_dup 2)
!         (unspec_volatile:SI [(const_int 0)] UNSPECV_CAS_MEM))
!    (match_operand:SI 5 "const_int_operand" "")			;; is_weak
!    (match_operand:SI 6 "const_int_operand" "")			;; mod_s
!    (match_operand:SI 7 "const_int_operand" "")			;; mod_f
     (clobber (match_scratch:SI 8 "=&d"))]
    ""
    {
!     return "add  \t%0,r0,r0\n\t"
!       "lwx  \t%1,%y2,r0\n\t"
!       "addic\t%8,r0,0\n\t"
!       "bnei \t%8,.-8\n\t"
!       "cmp  \t%8,%1,%3\n\t"
!       "bnei \t%8,.+20\n\t"
!       "swx  \t%4,%y2,r0\n\t"
!       "addic\t%8,r0,0\n\t"
!       "bnei \t%8,.-28\n\t"
!       "addi \t%0,r0,1";
    }
+   [(set_attr "type"	"atomic")
+   (set_attr "mode"	"SI")
+   (set_attr "length"	"40")]
  )
+ 
+ ;;
+ ;;
+ ;;
+ ;;
+ (define_insn "atomic_fetch_<atomic_optab>si"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+ 	(match_operand:SI 1 "memory_operand" "+Q"))
+    (set (match_dup 1)
+ 	(unspec_volatile:SI
+ 	  [(any_atomic:SI (match_dup 1)
+ 		   (match_operand:SI 2 "register_operand" "d"))
+ 	   (match_operand:SI 3 "const_int_operand")] ;; model
+ 	 UNSPECV_ATOMIC_FETCH_OP))
+    (clobber (match_scratch:SI 4 "=&d"))]	  ;; tmp_1
+   ""
+   {
+     return
+       "lwx  \t%0,%y1,r0\n\t"
+       "addic\t%4,r0,0\n\t"
+       "bnei \t%4,.-8\n\t"
+       "<atomic_optab>\t%4,%0,%2\n\t"
+       "swx  \t%4,%y1,r0\n\t"
+       "addic\t%4,r0,0\n\t"
+       "bnei \t%4,.-24";
+   }
+   [(set_attr "type"	"atomic")
+   (set_attr "mode"	"SI")
+   (set_attr "length"	"28")])
+ 
+ ;;
+ ;; MicroBlaze only supports lx/sx instructions for word mode only
+ ;;
+ ;; Use shift|mask magic to implement atomic_test_and_set using lwx/swx
+ ;;
+ (define_expand "atomic_test_and_set"
+   [(match_operand:QI 0 "register_operand" "")    ;; bool output
+    (match_operand:QI 1 "memory_operand" "m")    ;; memory
+    (match_operand:SI 2 "const_int_operand" "")]  ;; model
+   ""
+ {
+   rtx old = gen_reg_rtx (SImode);
+   rtx mem = operands[1];
+   rtx model = operands[2];
+   rtx set = gen_reg_rtx (SImode);
+   rtx aligned_mem = gen_reg_rtx (SImode);
+   rtx shift = gen_reg_rtx (SImode);
+ 
+   microblaze_subword_address (mem, &aligned_mem, &shift);
+ 
+   emit_move_insn (set, GEN_INT (1));
+   rtx shifted_set = gen_reg_rtx (SImode);
+ 
+   emit_move_insn (shifted_set, gen_rtx_ASHIFT (SImode, set, shift));
+ 
+   emit_insn (gen_atomic_fetch_orsi (old, aligned_mem, shifted_set, model));
+ 
+   emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, shift));
+ 
+   emit_move_insn (operands[0], gen_lowpart (QImode, old));
+ 
+   DONE;
+ })
diff -Nrcpad gcc-14.3.0/gcc/config/pa/pa.cc gcc-14.3.0-RC-20260619/gcc/config/pa/pa.cc
*** gcc-14.3.0/gcc/config/pa/pa.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/pa/pa.cc	Fri Jun 19 06:51:02 2026
*************** static void
*** 10624,10633 ****
  pa_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
  {
    rtx fnaddr = XEXP (DECL_RTL (fndecl), 0);
!   rtx start_addr = gen_reg_rtx (Pmode);
!   rtx end_addr = gen_reg_rtx (Pmode);
!   rtx line_length = gen_reg_rtx (Pmode);
!   rtx r_tramp, tmp;
  
    emit_block_move (m_tramp, assemble_trampoline_template (),
  		   GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
--- 10624,10630 ----
  pa_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
  {
    rtx fnaddr = XEXP (DECL_RTL (fndecl), 0);
!   rtx start, end, r_tramp, tmp;
  
    emit_block_move (m_tramp, assemble_trampoline_template (),
  		   GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
*************** pa_trampoline_init (rtx m_tramp, tree fn
*** 10635,10640 ****
--- 10632,10640 ----
  
    if (!TARGET_64BIT)
      {
+       /* Start of trampoline code.  */
+       start = r_tramp;
+ 
        tmp = adjust_address (m_tramp, Pmode, 48);
        emit_move_insn (tmp, fnaddr);
        tmp = adjust_address (m_tramp, Pmode, 52);
*************** pa_trampoline_init (rtx m_tramp, tree fn
*** 10642,10669 ****
  
        /* Create a fat pointer for the trampoline.  */
        tmp = adjust_address (m_tramp, Pmode, 56);
!       emit_move_insn (tmp, r_tramp);
        tmp = adjust_address (m_tramp, Pmode, 60);
        emit_move_insn (tmp, gen_rtx_REG (Pmode, 19));
- 
-       /* fdc and fic only use registers for the address to flush,
- 	 they do not accept integer displacements.  We align the
- 	 start and end addresses to the beginning of their respective
- 	 cache lines to minimize the number of lines flushed.  */
-       emit_insn (gen_andsi3 (start_addr, r_tramp,
- 			     GEN_INT (-MIN_CACHELINE_SIZE)));
-       tmp = force_reg (Pmode, plus_constant (Pmode, r_tramp,
- 					     TRAMPOLINE_CODE_SIZE-1));
-       emit_insn (gen_andsi3 (end_addr, tmp,
- 			     GEN_INT (-MIN_CACHELINE_SIZE)));
-       emit_move_insn (line_length, GEN_INT (MIN_CACHELINE_SIZE));
-       emit_insn (gen_dcacheflushsi (start_addr, end_addr, line_length));
-       emit_insn (gen_icacheflushsi (start_addr, end_addr, line_length,
- 				    gen_reg_rtx (Pmode),
- 				    gen_reg_rtx (Pmode)));
      }
    else
      {
        tmp = adjust_address (m_tramp, Pmode, 56);
        emit_move_insn (tmp, fnaddr);
        tmp = adjust_address (m_tramp, Pmode, 64);
--- 10642,10656 ----
  
        /* Create a fat pointer for the trampoline.  */
        tmp = adjust_address (m_tramp, Pmode, 56);
!       emit_move_insn (tmp, start);
        tmp = adjust_address (m_tramp, Pmode, 60);
        emit_move_insn (tmp, gen_rtx_REG (Pmode, 19));
      }
    else
      {
+       /* Start of trampoline code.  */
+       start = force_reg (Pmode, plus_constant (Pmode, r_tramp, 32));
+ 
        tmp = adjust_address (m_tramp, Pmode, 56);
        emit_move_insn (tmp, fnaddr);
        tmp = adjust_address (m_tramp, Pmode, 64);
*************** pa_trampoline_init (rtx m_tramp, tree fn
*** 10671,10699 ****
  
        /* Create a fat pointer for the trampoline.  */
        tmp = adjust_address (m_tramp, Pmode, 16);
!       emit_move_insn (tmp, force_reg (Pmode, plus_constant (Pmode,
! 							    r_tramp, 32)));
        tmp = adjust_address (m_tramp, Pmode, 24);
        emit_move_insn (tmp, gen_rtx_REG (Pmode, 27));
- 
-       /* fdc and fic only use registers for the address to flush,
- 	 they do not accept integer displacements.  We align the
- 	 start and end addresses to the beginning of their respective
- 	 cache lines to minimize the number of lines flushed.  */
-       tmp = force_reg (Pmode, plus_constant (Pmode, r_tramp, 32));
-       emit_insn (gen_anddi3 (start_addr, tmp,
- 			     GEN_INT (-MIN_CACHELINE_SIZE)));
-       tmp = force_reg (Pmode, plus_constant (Pmode, tmp,
- 					     TRAMPOLINE_CODE_SIZE - 1));
-       emit_insn (gen_anddi3 (end_addr, tmp,
- 			     GEN_INT (-MIN_CACHELINE_SIZE)));
-       emit_move_insn (line_length, GEN_INT (MIN_CACHELINE_SIZE));
-       emit_insn (gen_dcacheflushdi (start_addr, end_addr, line_length));
-       emit_insn (gen_icacheflushdi (start_addr, end_addr, line_length,
- 				    gen_reg_rtx (Pmode),
- 				    gen_reg_rtx (Pmode)));
      }
  
  #ifdef HAVE_ENABLE_EXECUTE_STACK
    emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
  		     LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
--- 10658,10673 ----
  
        /* Create a fat pointer for the trampoline.  */
        tmp = adjust_address (m_tramp, Pmode, 16);
!       emit_move_insn (tmp, start);
        tmp = adjust_address (m_tramp, Pmode, 24);
        emit_move_insn (tmp, gen_rtx_REG (Pmode, 27));
      }
  
+   end = force_reg (Pmode, plus_constant (Pmode, start, TRAMPOLINE_CODE_SIZE));
+ 
+   /* Flush trampoline.  */
+   emit_insn (gen_clear_cache (start, end));
+ 
  #ifdef HAVE_ENABLE_EXECUTE_STACK
    emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
  		     LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
diff -Nrcpad gcc-14.3.0/gcc/config/pa/pa.md gcc-14.3.0-RC-20260619/gcc/config/pa/pa.md
*** gcc-14.3.0/gcc/config/pa/pa.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/pa/pa.md	Fri Jun 19 06:51:02 2026
*************** add,l %2,%3,%3\;bv,n %%r0(%3)"
*** 9991,10000 ****
    [(set_attr "type" "fpalu")
     (set_attr "length" "4")])
  
! ;; The following two patterns are used by the trampoline code for nested
  ;; functions.  They flush the I and D cache lines from the start address
! ;; (operand0) to the end address (operand1).  No lines are flushed if the
! ;; end address is less than the start address (unsigned).
  ;;
  ;; Because the range of memory flushed is variable and the size of a MEM
  ;; can only be a CONST_INT, the patterns specify that they perform an
--- 9991,9999 ----
    [(set_attr "type" "fpalu")
     (set_attr "length" "4")])
  
! ;; The following four patterns are used by the trampoline code for nested
  ;; functions.  They flush the I and D cache lines from the start address
! ;; (operand0) to the end address (operand1).
  ;;
  ;; Because the range of memory flushed is variable and the size of a MEM
  ;; can only be a CONST_INT, the patterns specify that they perform an
*************** add,l %2,%3,%3\;bv,n %%r0(%3)"
*** 10003,10011 ****
  ;; The address range for an icache flush must lie within a single
  ;; space on targets with non-equivalent space registers.
  ;;
! ;; Operand 0 contains the start address.
  ;; Operand 1 contains the end address.
! ;; Operand 2 contains the line length to use.
  (define_insn "dcacheflush<P:mode>"
    [(const_int 1)
     (unspec_volatile [(mem:BLK (scratch))] UNSPECV_DCACHE)
--- 10002,10010 ----
  ;; The address range for an icache flush must lie within a single
  ;; space on targets with non-equivalent space registers.
  ;;
! ;; Operand 0 contains the line aligned start address.
  ;; Operand 1 contains the end address.
! ;; Operand 2 contains the line size to use.
  (define_insn "dcacheflush<P:mode>"
    [(const_int 1)
     (unspec_volatile [(mem:BLK (scratch))] UNSPECV_DCACHE)
*************** add,l %2,%3,%3\;bv,n %%r0(%3)"
*** 10014,10024 ****
     (use (match_operand 2 "pmode_register_operand" "r"))
     (clobber (match_scratch:P 3 "=&0"))]
    ""
!   "cmpb,<dwc><<=,n %3,%1,.\;fdc,m %2(%3)\;sync"
    [(set_attr "type" "multi")
     (set_attr "length" "12")])
  
! (define_insn "icacheflush<P:mode>"
    [(const_int 2)
     (unspec_volatile [(mem:BLK (scratch))] UNSPECV_ICACHE)
     (use (match_operand 0 "pmode_register_operand" "r"))
--- 10013,10023 ----
     (use (match_operand 2 "pmode_register_operand" "r"))
     (clobber (match_scratch:P 3 "=&0"))]
    ""
!   "{comb|cmpb},<dwc><<,n %3,%1,.\;fdc,m %2(%3)\;sync"
    [(set_attr "type" "multi")
     (set_attr "length" "12")])
  
! (define_insn "icacheflush1<P:mode>"
    [(const_int 2)
     (unspec_volatile [(mem:BLK (scratch))] UNSPECV_ICACHE)
     (use (match_operand 0 "pmode_register_operand" "r"))
*************** add,l %2,%3,%3\;bv,n %%r0(%3)"
*** 10028,10051 ****
     (clobber (match_operand 4 "pmode_register_operand" "=&r"))
     (clobber (match_scratch:P 5 "=&0"))]
    ""
!   "mfsp %%sr0,%4\;ldsid (%5),%3\;mtsp %3,%%sr0\;cmpb,<dwc><<=,n %5,%1,.\;fic,m %2(%%sr0,%5)\;sync\;mtsp %4,%%sr0\;nop\;nop\;nop\;nop\;nop\;nop"
    [(set_attr "type" "multi")
     (set_attr "length" "52")])
  
  (define_expand "clear_cache"
    [(match_operand 0 "pmode_register_operand")
     (match_operand 1 "pmode_register_operand")]
    ""
  {
!   rtx line_length = gen_reg_rtx (Pmode);
  
-   emit_move_insn (line_length, GEN_INT (MIN_CACHELINE_SIZE));
    if (TARGET_64BIT)
!     emit_insn (gen_icacheflushdi (operands[0], operands[1], line_length,
! 				  gen_reg_rtx (Pmode), gen_reg_rtx (Pmode)));
    else
!     emit_insn (gen_icacheflushsi (operands[0], operands[1], line_length,
! 				  gen_reg_rtx (Pmode), gen_reg_rtx (Pmode)));
    DONE;
  })
  
--- 10027,10112 ----
     (clobber (match_operand 4 "pmode_register_operand" "=&r"))
     (clobber (match_scratch:P 5 "=&0"))]
    ""
!   "mfsp %%sr1,%4\;ldsid (%5),%3\;mtsp %3,%%sr1\;{comb|cmpb},<dwc><<,n %5,%1,.\;fic,m %2(%%sr1,%5)\;sync\;mtsp %4,%%sr1\;nop\;nop\;nop\;nop\;nop\;nop"
    [(set_attr "type" "multi")
     (set_attr "length" "52")])
  
+ (define_insn "icacheflush2<P:mode>"
+   [(const_int 2)
+    (unspec_volatile [(mem:BLK (scratch))] UNSPECV_ICACHE)
+    (use (match_operand 0 "pmode_register_operand" "r"))
+    (use (match_operand 1 "pmode_register_operand" "r"))
+    (use (match_operand 2 "pmode_register_operand" "r"))
+    (clobber (match_scratch:P 3 "=&0"))]
+   "TARGET_PA_20"
+   "cmpb,<dwc><<,n %3,%1,.\;fic,m %2(%3)\;sync\;nop\;nop\;nop\;nop\;nop\;nop\;nop"
+   [(set_attr "type" "multi")
+    (set_attr "length" "40")])
+ 
+ (define_insn "icacheflush3<P:mode>"
+   [(const_int 3)
+    (unspec_volatile [(mem:BLK (scratch))] UNSPECV_ICACHE)
+    (use (match_operand 0 "pmode_register_operand" "r"))
+    (use (match_operand 1 "pmode_register_operand" "r"))
+    (use (match_operand 2 "pmode_register_operand" "r"))
+    (clobber (match_scratch:P 3 "=&0"))]
+   "!TARGET_PA_20 && TARGET_NO_SPACE_REGS"
+   "comb,<dwc><<,n %3,%1,.\;fic,m %2(%%sr4,%3)\;sync\;nop\;nop\;nop\;nop\;nop\;nop\;nop"
+   [(set_attr "type" "multi")
+    (set_attr "length" "40")])
+ 
+ ;; clear_cache
+ ;;
+ ;; Note the data and instruction cache flushes need to be separated
+ ;; by a sync instruction (see page 7-151 in PA 2.0 architecture manual).
+ ;; Thus, we can't combine the flush operations in a single loop.
+ 
+ ;; Operand 0 contains the start address (inclusive).
+ ;; Operand 1 contains the end address (exclusive).
  (define_expand "clear_cache"
    [(match_operand 0 "pmode_register_operand")
     (match_operand 1 "pmode_register_operand")]
    ""
  {
!   rtx start = gen_reg_rtx (Pmode);
!   rtx line_size = gen_reg_rtx (Pmode);
!   rtx lab = gen_label_rtx ();
!   rtx op0 = operands[0];
!   rtx op1 = operands[1];
! 
!   /* Skip flush if op0 is greater than or equal to op1.  */
!   emit_cmp_and_jump_insns (op0, op1, GEU, NULL_RTX, Pmode, 0, lab);
! 
!   /* Load cache line size.  */
!   emit_move_insn (line_size, GEN_INT (MIN_CACHELINE_SIZE));
  
    if (TARGET_64BIT)
!     {
!       /* Align the start address.  */
!       emit_insn (gen_anddi3 (start, op0, GEN_INT (-MIN_CACHELINE_SIZE)));
! 
!       /* Flush the cache.  */
!       emit_insn (gen_dcacheflushdi (start, op1, line_size));
!       emit_insn (gen_icacheflush2di (start, op1, line_size));
!     }
    else
!     {
!       /* Align the start address.  */
!       emit_insn (gen_andsi3 (start, op0, GEN_INT (-MIN_CACHELINE_SIZE)));
! 
!       /* Flush the cache.  */
!       emit_insn (gen_dcacheflushsi (start, op1, line_size));
!       if (TARGET_PA_20)
! 	emit_insn (gen_icacheflush2si (start, op1, line_size));
!       else if (TARGET_NO_SPACE_REGS)
! 	emit_insn (gen_icacheflush3si (start, op1, line_size));
!       else
! 	emit_insn (gen_icacheflush1si (start, op1, line_size,
! 				       gen_reg_rtx (Pmode),
! 				       gen_reg_rtx (Pmode)));
!     }
! 
!   emit_label (lab);
    DONE;
  })
  
diff -Nrcpad gcc-14.3.0/gcc/config/rs6000/aix.h gcc-14.3.0-RC-20260619/gcc/config/rs6000/aix.h
*** gcc-14.3.0/gcc/config/rs6000/aix.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/rs6000/aix.h	Fri Jun 19 06:51:02 2026
***************
*** 281,284 ****
  #undef SUBTARGET_DRIVER_SELF_SPECS
  #define SUBTARGET_DRIVER_SELF_SPECS	\
  "%{m64:-maix64} %<m64",			\
! "%{m32:-maix32} %<m32"
--- 281,286 ----
  #undef SUBTARGET_DRIVER_SELF_SPECS
  #define SUBTARGET_DRIVER_SELF_SPECS	\
  "%{m64:-maix64} %<m64",			\
! "%{m32:-maix32} %<m32",			\
! "%{fstack-protector*: %<fstack-protector* \
!    %estack-protector not supported on AIX}"
diff -Nrcpad gcc-14.3.0/gcc/config/rs6000/altivec.md gcc-14.3.0-RC-20260619/gcc/config/rs6000/altivec.md
*** gcc-14.3.0/gcc/config/rs6000/altivec.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/rs6000/altivec.md	Fri Jun 19 06:51:02 2026
***************
*** 3576,3585 ****
  
    emit_insn (gen_vsx_xvcvsphp (rtx_tmp_hi, operands[1]));
    emit_insn (gen_vsx_xvcvsphp (rtx_tmp_lo, operands[2]));
!   if (!BYTES_BIG_ENDIAN)
!     emit_insn (gen_altivec_vpkuwum (operands[0], rtx_tmp_hi, rtx_tmp_lo));
!   else
!     emit_insn (gen_altivec_vpkuwum (operands[0], rtx_tmp_lo, rtx_tmp_hi));
    DONE;
  })
  
--- 3576,3582 ----
  
    emit_insn (gen_vsx_xvcvsphp (rtx_tmp_hi, operands[1]));
    emit_insn (gen_vsx_xvcvsphp (rtx_tmp_lo, operands[2]));
!   emit_insn (gen_altivec_vpkuwum (operands[0], rtx_tmp_hi, rtx_tmp_lo));
    DONE;
  })
  
diff -Nrcpad gcc-14.3.0/gcc/config/rs6000/rs6000-c.cc gcc-14.3.0-RC-20260619/gcc/config/rs6000/rs6000-c.cc
*** gcc-14.3.0/gcc/config/rs6000/rs6000-c.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/rs6000/rs6000-c.cc	Fri Jun 19 06:51:02 2026
*************** rs6000_builtin_type_compatible (tree par
*** 835,848 ****
    return lang_hooks.types_compatible_p (parmtype, argtype);
  }
  
! /* In addition to calling fold_convert for EXPR of type TYPE, also
     call c_fully_fold to remove any C_MAYBE_CONST_EXPRs that could be
     hiding there (PR47197).  */
  
  static tree
  fully_fold_convert (tree type, tree expr)
  {
!   tree result = fold_convert (type, expr);
    bool maybe_const = true;
  
    if (!c_dialect_cxx ())
--- 835,874 ----
    return lang_hooks.types_compatible_p (parmtype, argtype);
  }
  
! /* Return fold_convert (TYPE, EXPR) for C and convert (TYPE, EXPR)
!    for C++.  The latter is needed because resolve_overloaded_builtin
!    can be called when parsing templates too if they don't have type
!    dependent operands, but the nested trees might not be usable in
!    GENERIC folding.  */
! 
! static tree
! c_fold_convert (tree type, tree expr)
! {
!   return c_dialect_cxx () ? convert (type, expr) : fold_convert (type, expr);
! }
! 
! /* Similar wrapper for fold_build2_loc.  For C++ just call build2_loc.  */
! 
! static tree
! c_fold_build2_loc (location_t loc, enum tree_code code, tree type, tree arg0,
! 		   tree arg1)
! {
!   if (!c_dialect_cxx ())
!     return fold_build2_loc (loc, code, type, arg0, arg1);
!   else if (loc != UNKNOWN_LOCATION)
!     return build2_loc (loc, code, type, arg0, arg1);
!   else
!     return build2 (code, type, arg0, arg1);
! }
! 
! /* In addition to calling c_fold_convert for EXPR of type TYPE, also
     call c_fully_fold to remove any C_MAYBE_CONST_EXPRs that could be
     hiding there (PR47197).  */
  
  static tree
  fully_fold_convert (tree type, tree expr)
  {
!   tree result = c_fold_convert (type, expr);
    bool maybe_const = true;
  
    if (!c_dialect_cxx ())
*************** fully_fold_convert (tree type, tree expr
*** 855,861 ****
     The overloaded builtin that matched the types and args is described
     by DESC.  The N arguments are given in ARGS, respectively.
  
!    Actually the only thing it does is calling fold_convert on ARGS, with
     a small exception for vec_{all,any}_{ge,le} predicates. */
  
  static tree
--- 881,887 ----
     The overloaded builtin that matched the types and args is described
     by DESC.  The N arguments are given in ARGS, respectively.
  
!    Actually the only thing it does is calling c_fold_convert on ARGS, with
     a small exception for vec_{all,any}_{ge,le} predicates. */
  
  static tree
*************** altivec_build_resolved_builtin (tree *ar
*** 891,898 ****
        std::swap (args[1], args[2]);
        std::swap (arg_type[1], arg_type[2]);
  
!       args[0] = fold_build2 (BIT_XOR_EXPR, TREE_TYPE (args[0]), args[0],
! 			     build_int_cst (NULL_TREE, 2));
      }
  
    for (int j = 0; j < n; j++)
--- 917,925 ----
        std::swap (args[1], args[2]);
        std::swap (arg_type[1], arg_type[2]);
  
!       args[0] = c_fold_build2_loc (UNKNOWN_LOCATION, BIT_XOR_EXPR,
! 				   TREE_TYPE (args[0]), args[0],
! 				   build_int_cst (NULL_TREE, 2));
      }
  
    for (int j = 0; j < n; j++)
*************** altivec_build_resolved_builtin (tree *ar
*** 923,929 ****
      default:
        gcc_unreachable ();
      }
!   return fold_convert (ret_type, call);
  }
  
  /* Enumeration of possible results from attempted overload resolution.
--- 950,956 ----
      default:
        gcc_unreachable ();
      }
!   return c_fold_convert (ret_type, call);
  }
  
  /* Enumeration of possible results from attempted overload resolution.
*************** resolve_vec_mul (resolution *res, tree *
*** 964,971 ****
      case E_TImode:
        /* For scalar types just use a multiply expression.  */
        *res = resolved;
!       return fold_build2_loc (loc, MULT_EXPR, types[0], args[0],
! 			      fold_convert (types[0], args[1]));
      case E_SFmode:
        {
  	/* For floats use the xvmulsp instruction directly.  */
--- 991,998 ----
      case E_TImode:
        /* For scalar types just use a multiply expression.  */
        *res = resolved;
!       return c_fold_build2_loc (loc, MULT_EXPR, types[0], args[0],
! 				c_fold_convert (types[0], args[1]));
      case E_SFmode:
        {
  	/* For floats use the xvmulsp instruction directly.  */
*************** resolve_vec_adde_sube (resolution *res,
*** 1108,1115 ****
  							params);
  	tree const1 = build_int_cstu (TREE_TYPE (types[0]), 1);
  	tree ones_vector = build_vector_from_val (types[0], const1);
! 	tree and_expr = fold_build2_loc (loc, BIT_AND_EXPR, types[0],
! 					 args[2], ones_vector);
  	params = make_tree_vector ();
  	vec_safe_push (params, call);
  	vec_safe_push (params, and_expr);
--- 1135,1142 ----
  							params);
  	tree const1 = build_int_cstu (TREE_TYPE (types[0]), 1);
  	tree ones_vector = build_vector_from_val (types[0], const1);
! 	tree and_expr = c_fold_build2_loc (loc, BIT_AND_EXPR, types[0],
! 					   args[2], ones_vector);
  	params = make_tree_vector ();
  	vec_safe_push (params, call);
  	vec_safe_push (params, and_expr);
*************** resolve_vec_addec_subec (resolution *res
*** 1194,1201 ****
  							 params);
  	tree const1 = build_int_cstu (TREE_TYPE (types[0]), 1);
  	tree ones_vector = build_vector_from_val (types[0], const1);
! 	tree and_expr = fold_build2_loc (loc, BIT_AND_EXPR, types[0],
! 					 args[2], ones_vector);
  	params = make_tree_vector ();
  	vec_safe_push (params, call2);
  	vec_safe_push (params, and_expr);
--- 1221,1228 ----
  							 params);
  	tree const1 = build_int_cstu (TREE_TYPE (types[0]), 1);
  	tree ones_vector = build_vector_from_val (types[0], const1);
! 	tree and_expr = c_fold_build2_loc (loc, BIT_AND_EXPR, types[0],
! 					   args[2], ones_vector);
  	params = make_tree_vector ();
  	vec_safe_push (params, call2);
  	vec_safe_push (params, and_expr);
*************** resolve_vec_splats (resolution *res, rs6
*** 1303,1309 ****
        return error_mark_node;
      }
  
!   arg = save_expr (fold_convert (TREE_TYPE (type), arg));
    vec<constructor_elt, va_gc> *vec;
    vec_alloc (vec, size);
  
--- 1330,1336 ----
        return error_mark_node;
      }
  
!   arg = save_expr (c_fold_convert (TREE_TYPE (type), arg));
    vec<constructor_elt, va_gc> *vec;
    vec_alloc (vec, size);
  
*************** resolve_vec_extract (resolution *res, ve
*** 1442,1448 ****
  	  tree result = build_call_expr (call, 2, arg1, arg2);
  	  /* Coerce the result to vector element type.  May be no-op.  */
  	  arg1_inner_type = TREE_TYPE (arg1_type);
! 	  result = fold_convert (arg1_inner_type, result);
  	  *res = resolved;
  	  return result;
  	}
--- 1469,1475 ----
  	  tree result = build_call_expr (call, 2, arg1, arg2);
  	  /* Coerce the result to vector element type.  May be no-op.  */
  	  arg1_inner_type = TREE_TYPE (arg1_type);
! 	  result = c_fold_convert (arg1_inner_type, result);
  	  *res = resolved;
  	  return result;
  	}
*************** resolve_vec_insert (resolution *res, vec
*** 1606,1613 ****
    if (TARGET_VSX)
      {
        stmt = build_array_ref (loc, stmt, arg2);
!       stmt = fold_build2 (MODIFY_EXPR, TREE_TYPE (arg0), stmt,
! 			  convert (TREE_TYPE (stmt), arg0));
        stmt = build2 (COMPOUND_EXPR, arg1_type, stmt, decl);
      }
    else
--- 1633,1641 ----
    if (TARGET_VSX)
      {
        stmt = build_array_ref (loc, stmt, arg2);
!       stmt = c_fold_build2_loc (UNKNOWN_LOCATION, MODIFY_EXPR,
! 				TREE_TYPE (arg0), stmt,
! 				convert (TREE_TYPE (stmt), arg0));
        stmt = build2 (COMPOUND_EXPR, arg1_type, stmt, decl);
      }
    else
*************** altivec_resolve_overloaded_builtin (loca
*** 1831,1837 ****
  		     "const");
  	  type = build_qualified_type (TREE_TYPE (type), 0);
  	  type = build_pointer_type (type);
! 	  arg = fold_convert (type, arg);
  	}
  
        /* For RS6000_OVLD_VEC_LXVL, convert any const * to its non constant
--- 1859,1865 ----
  		     "const");
  	  type = build_qualified_type (TREE_TYPE (type), 0);
  	  type = build_pointer_type (type);
! 	  arg = c_fold_convert (type, arg);
  	}
  
        /* For RS6000_OVLD_VEC_LXVL, convert any const * to its non constant
*************** altivec_resolve_overloaded_builtin (loca
*** 1842,1848 ****
  	{
  	  type = build_qualified_type (TREE_TYPE (type), 0);
  	  type = build_pointer_type (type);
! 	  arg = fold_convert (type, arg);
  	}
  
        args[n] = arg;
--- 1870,1876 ----
  	{
  	  type = build_qualified_type (TREE_TYPE (type), 0);
  	  type = build_pointer_type (type);
! 	  arg = c_fold_convert (type, arg);
  	}
  
        args[n] = arg;
diff -Nrcpad gcc-14.3.0/gcc/config/rs6000/rs6000.md gcc-14.3.0-RC-20260619/gcc/config/rs6000/rs6000.md
*** gcc-14.3.0/gcc/config/rs6000/rs6000.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/rs6000/rs6000.md	Fri Jun 19 06:51:02 2026
***************
*** 6897,6903 ****
  (define_insn "floatti<mode>2"
    [(set (match_operand:IEEE128 0 "vsx_register_operand" "=v")
  	(float:IEEE128 (match_operand:TI 1 "vsx_register_operand" "v")))]
!   "TARGET_POWER10"
  {
    return  "xscvsqqp %0,%1";
  }
--- 6897,6903 ----
  (define_insn "floatti<mode>2"
    [(set (match_operand:IEEE128 0 "vsx_register_operand" "=v")
  	(float:IEEE128 (match_operand:TI 1 "vsx_register_operand" "v")))]
!   "TARGET_POWER10 && TARGET_FLOAT128_HW"
  {
    return  "xscvsqqp %0,%1";
  }
***************
*** 6906,6912 ****
  (define_insn "floatunsti<mode>2"
    [(set (match_operand:IEEE128 0 "vsx_register_operand" "=v")
  	(unsigned_float:IEEE128 (match_operand:TI 1 "vsx_register_operand" "v")))]
!   "TARGET_POWER10"
  {
    return  "xscvuqqp %0,%1";
  }
--- 6906,6912 ----
  (define_insn "floatunsti<mode>2"
    [(set (match_operand:IEEE128 0 "vsx_register_operand" "=v")
  	(unsigned_float:IEEE128 (match_operand:TI 1 "vsx_register_operand" "v")))]
!   "TARGET_POWER10 && TARGET_FLOAT128_HW"
  {
    return  "xscvuqqp %0,%1";
  }
***************
*** 6915,6921 ****
  (define_insn "fix_trunc<mode>ti2"
    [(set (match_operand:TI 0 "vsx_register_operand" "=v")
  	(fix:TI (match_operand:IEEE128 1 "vsx_register_operand" "v")))]
!   "TARGET_POWER10"
  {
    return  "xscvqpsqz %0,%1";
  }
--- 6915,6921 ----
  (define_insn "fix_trunc<mode>ti2"
    [(set (match_operand:TI 0 "vsx_register_operand" "=v")
  	(fix:TI (match_operand:IEEE128 1 "vsx_register_operand" "v")))]
!   "TARGET_POWER10 && TARGET_FLOAT128_HW"
  {
    return  "xscvqpsqz %0,%1";
  }
diff -Nrcpad gcc-14.3.0/gcc/config/rs6000/vsx.md gcc-14.3.0-RC-20260619/gcc/config/rs6000/vsx.md
*** gcc-14.3.0/gcc/config/rs6000/vsx.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/rs6000/vsx.md	Fri Jun 19 06:51:02 2026
***************
*** 5132,5138 ****
  	(unspec:V2DI_DI
  	  [(match_operand:IEEE128 1 "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SXEXPDP))]
!   "TARGET_P9_VECTOR"
    "xsxexpqp %0,%1"
    [(set_attr "type" "vecmove")])
  
--- 5132,5138 ----
  	(unspec:V2DI_DI
  	  [(match_operand:IEEE128 1 "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SXEXPDP))]
!   "TARGET_FLOAT128_HW"
    "xsxexpqp %0,%1"
    [(set_attr "type" "vecmove")])
  
***************
*** 5151,5157 ****
  	(unspec:VEC_TI [(match_operand:IEEE128 1
  			    "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SXSIG))]
!   "TARGET_P9_VECTOR"
    "xsxsigqp %0,%1"
    [(set_attr "type" "vecmove")])
  
--- 5151,5157 ----
  	(unspec:VEC_TI [(match_operand:IEEE128 1
  			    "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SXSIG))]
!   "TARGET_FLOAT128_HW"
    "xsxsigqp %0,%1"
    [(set_attr "type" "vecmove")])
  
***************
*** 5171,5177 ****
  	 [(match_operand:IEEE128 1 "altivec_register_operand" "v")
  	  (match_operand:DI 2 "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SIEXPQP))]
!   "TARGET_P9_VECTOR"
    "xsiexpqp %0,%1,%2"
    [(set_attr "type" "vecmove")])
  
--- 5171,5177 ----
  	 [(match_operand:IEEE128 1 "altivec_register_operand" "v")
  	  (match_operand:DI 2 "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SIEXPQP))]
!   "TARGET_FLOAT128_HW"
    "xsiexpqp %0,%1,%2"
    [(set_attr "type" "vecmove")])
  
***************
*** 5183,5189 ****
  			 (match_operand:V2DI_DI 2
  			  "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SIEXPQP))]
!   "TARGET_P9_VECTOR"
    "xsiexpqp %0,%1,%2"
    [(set_attr "type" "vecmove")])
  
--- 5183,5189 ----
  			 (match_operand:V2DI_DI 2
  			  "altivec_register_operand" "v")]
  	 UNSPEC_VSX_SIEXPQP))]
!   "TARGET_FLOAT128_HW"
    "xsiexpqp %0,%1,%2"
    [(set_attr "type" "vecmove")])
  
***************
*** 5253,5259 ****
     (set (match_operand:SI 0 "register_operand" "=r")
  	(CMP_TEST:SI (match_dup 3)
  		     (const_int 0)))]
!   "TARGET_P9_VECTOR"
  {
    if (<CODE> == UNORDERED && !HONOR_NANS (<MODE>mode))
      {
--- 5253,5259 ----
     (set (match_operand:SI 0 "register_operand" "=r")
  	(CMP_TEST:SI (match_dup 3)
  		     (const_int 0)))]
!   "TARGET_FLOAT128_HW"
  {
    if (<CODE> == UNORDERED && !HONOR_NANS (<MODE>mode))
      {
***************
*** 5271,5277 ****
  		          (match_operand:IEEE128 2 "altivec_register_operand" "v")]
  	  UNSPEC_VSX_SCMPEXPQP)
  	 (match_operand:SI 3 "zero_constant" "j")))]
!   "TARGET_P9_VECTOR"
    "xscmpexpqp %0,%1,%2"
    [(set_attr "type" "fpcompare")])
  
--- 5271,5277 ----
  		          (match_operand:IEEE128 2 "altivec_register_operand" "v")]
  	  UNSPEC_VSX_SCMPEXPQP)
  	 (match_operand:SI 3 "zero_constant" "j")))]
!   "TARGET_FLOAT128_HW"
    "xscmpexpqp %0,%1,%2"
    [(set_attr "type" "fpcompare")])
  
***************
*** 5329,5335 ****
     (set (match_operand:SI 0 "register_operand" "=r")
  	(lt:SI (match_dup 2)
  	       (const_int 0)))]
!   "TARGET_P9_VECTOR"
  {
    operands[2] = gen_reg_rtx (CCFPmode);
  })
--- 5329,5335 ----
     (set (match_operand:SI 0 "register_operand" "=r")
  	(lt:SI (match_dup 2)
  	       (const_int 0)))]
!   "TARGET_FLOAT128_HW"
  {
    operands[2] = gen_reg_rtx (CCFPmode);
  })
diff -Nrcpad gcc-14.3.0/gcc/config/s390/s390.md gcc-14.3.0-RC-20260619/gcc/config/s390/s390.md
*** gcc-14.3.0/gcc/config/s390/s390.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/s390/s390.md	Fri Jun 19 06:51:02 2026
***************
*** 3392,3398 ****
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(set (match_dup 0) (match_dup 1))
--- 3392,3398 ----
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(set (match_dup 0) (match_dup 1))
***************
*** 3404,3410 ****
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
--- 3404,3410 ----
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
***************
*** 3418,3431 ****
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (scratch))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
!               (label_ref (match_dup 3))] UNSPEC_EXECUTE)
       (set (match_dup 0) (match_dup 1))
       (use (const_int 1))])]
!   "operands[3] = gen_label_rtx ();")
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
--- 3418,3431 ----
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (match_scratch 3))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
! 	      (label_ref (match_dup 4))] UNSPEC_EXECUTE)
       (set (match_dup 0) (match_dup 1))
       (use (const_int 1))])]
!   "operands[4] = gen_label_rtx ();")
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
***************
*** 3644,3650 ****
          (const_int 0))
     (use (match_operand 1 "const_int_operand" ""))
     (use (match_operand 2 "immediate_operand" ""))
!    (clobber (scratch))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
--- 3644,3650 ----
          (const_int 0))
     (use (match_operand 1 "const_int_operand" ""))
     (use (match_operand 2 "immediate_operand" ""))
!    (clobber (match_scratch 3))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
***************
*** 3658,3664 ****
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (match_operand 2 "memory_operand" ""))
!    (clobber (scratch))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
--- 3658,3664 ----
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (match_operand 2 "memory_operand" ""))
!    (clobber (match_scratch 3))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
***************
*** 3674,3680 ****
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (scratch))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10 && reload_completed"
    [(parallel
--- 3674,3680 ----
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (match_scratch 2))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10 && reload_completed"
    [(parallel
***************
*** 3839,3845 ****
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1)))
--- 3839,3845 ----
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1)))
***************
*** 3852,3858 ****
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
--- 3852,3858 ----
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
***************
*** 3867,3873 ****
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (scratch))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
--- 3867,3873 ----
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (match_scratch 3))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
diff -Nrcpad gcc-14.3.0/gcc/config/s390/vector.md gcc-14.3.0-RC-20260619/gcc/config/s390/vector.md
*** gcc-14.3.0/gcc/config/s390/vector.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/s390/vector.md	Fri Jun 19 06:51:02 2026
***************
*** 30,36 ****
  ; V_HW2 is for having two iterators expanding independently e.g. vcond.
  ; It's similar to V_HW, but not fully identical: V1TI is not included, because
  ; there are no 128-bit compares.
! (define_mode_iterator V_HW  [V16QI V8HI V4SI V2DI (V1TI "TARGET_VXE") V2DF
  			     (V4SF "TARGET_VXE") (V1TF "TARGET_VXE")
  			     (TF "TARGET_VXE")])
  (define_mode_iterator V_HW2 [V16QI V8HI V4SI V2DI V2DF (V4SF "TARGET_VXE")
--- 30,36 ----
  ; V_HW2 is for having two iterators expanding independently e.g. vcond.
  ; It's similar to V_HW, but not fully identical: V1TI is not included, because
  ; there are no 128-bit compares.
! (define_mode_iterator V_HW  [V16QI V8HI V4SI V2DI V1TI TI V2DF
  			     (V4SF "TARGET_VXE") (V1TF "TARGET_VXE")
  			     (TF "TARGET_VXE")])
  (define_mode_iterator V_HW2 [V16QI V8HI V4SI V2DI V2DF (V4SF "TARGET_VXE")
***************
*** 50,55 ****
--- 50,56 ----
  (define_mode_iterator VI_HW_HSDT [V8HI V4SI V2DI V1TI TI])
  (define_mode_iterator VI_HW_HS  [V8HI  V4SI])
  (define_mode_iterator VI_HW_QH  [V16QI V8HI])
+ (define_mode_iterator VI_HW_T   [V1TI TI])
  
  ; Directly supported vector modes with a certain number of elements
  (define_mode_iterator V_HW_2   [V2DI V2DF])
***************
*** 149,155 ****
  			    (V1HI "V1HI") (V2HI "V2HI") (V4HI "V4HI") (V8HI "V8HI")
  			    (V1SI "V1SI") (V2SI "V2SI") (V4SI "V4SI")
  			    (V1DI "V1DI") (V2DI "V2DI")
! 			    (V1TI "V1TI")
  			    (V1SF "V1SI") (V2SF "V2SI") (V4SF "V4SI")
  			    (V1DF "V1DI") (V2DF "V2DI")
  			    (V1TF "V1TI") (TF "V1TI")])
--- 150,156 ----
  			    (V1HI "V1HI") (V2HI "V2HI") (V4HI "V4HI") (V8HI "V8HI")
  			    (V1SI "V1SI") (V2SI "V2SI") (V4SI "V4SI")
  			    (V1DI "V1DI") (V2DI "V2DI")
! 			    (V1TI "V1TI") (TI "V1TI")
  			    (V1SF "V1SI") (V2SF "V2SI") (V4SF "V4SI")
  			    (V1DF "V1DI") (V2DF "V2DI")
  			    (V1TF "V1TI") (TF "V1TI")])
***************
*** 158,164 ****
  			    (V1HI "v1hi") (V2HI "v2hi") (V4HI "v4hi") (V8HI "v8hi")
  			    (V1SI "v1si") (V2SI "v2si") (V4SI "v4si")
  			    (V1DI "v1di") (V2DI "v2di")
! 			    (V1TI "v1ti")
  			    (V1SF "v1si") (V2SF "v2si") (V4SF "v4si")
  			    (V1DF "v1di") (V2DF "v2di")
  			    (V1TF "v1ti") (TF   "v1ti")])
--- 159,165 ----
  			    (V1HI "v1hi") (V2HI "v2hi") (V4HI "v4hi") (V8HI "v8hi")
  			    (V1SI "v1si") (V2SI "v2si") (V4SI "v4si")
  			    (V1DI "v1di") (V2DI "v2di")
! 			    (V1TI "v1ti") (TI "v1ti")
  			    (V1SF "v1si") (V2SF "v2si") (V4SF "v4si")
  			    (V1DF "v1di") (V2DF "v2di")
  			    (V1TF "v1ti") (TF   "v1ti")])
***************
*** 938,944 ****
        else
  	{
  	  reg_pair += 2;  // get rid of prefix %f
! 	  snprintf (buf, sizeof (buf), "ldr\t%%f0,%%f1;vpdi\t%%%%v%s,%%v1,%%%%v%s,5", reg_pair, reg_pair);
  	  output_asm_insn (buf, operands);
  	  return "";
  	}
--- 939,945 ----
        else
  	{
  	  reg_pair += 2;  // get rid of prefix %f
! 	  snprintf (buf, sizeof (buf), "vlr\t%%v0,%%v1;vpdi\t%%%%v%s,%%v1,%%%%v%s,5", reg_pair, reg_pair);
  	  output_asm_insn (buf, operands);
  	  return "";
  	}
***************
*** 1945,1955 ****
    DONE;
  })
  
! (define_expand "vec_cmpu<VI_HW:mode><VI_HW:mode>"
!   [(set (match_operand:VI_HW    0 "register_operand" "")
! 	(match_operator:VI_HW   1 ""
! 	  [(match_operand:VI_HW 2 "register_operand" "")
! 	   (match_operand:VI_HW 3 "register_operand" "")]))]
    "TARGET_VX"
  {
    s390_expand_vec_compare (operands[0], GET_CODE(operands[1]), operands[2], operands[3]);
--- 1946,1956 ----
    DONE;
  })
  
! (define_expand "vec_cmpu<VIT_HW:mode><VIT_HW:mode>"
!   [(set (match_operand:VIT_HW    0 "register_operand" "")
! 	(match_operator:VIT_HW   1 ""
! 	  [(match_operand:VIT_HW 2 "register_operand" "")
! 	   (match_operand:VIT_HW 3 "register_operand" "")]))]
    "TARGET_VX"
  {
    s390_expand_vec_compare (operands[0], GET_CODE(operands[1]), operands[2], operands[3]);
***************
*** 1964,1969 ****
--- 1965,2058 ----
    "vc<VICMP_HW_OP:insn_cmp_op><VI:bhfgq>\t%v2,%v0,%v1"
    [(set_attr "op_type" "VRR")])
  
+ (define_insn_and_split "*vec_cmpeq<mode><mode>_nocc_emu"
+   [(set (match_operand:VI_HW_T             0 "register_operand" "=v")
+ 	(eq:VI_HW_T (match_operand:VI_HW_T 1 "register_operand"  "v")
+ 		    (match_operand:VI_HW_T 2 "register_operand"  "v")))]
+   "TARGET_VX"
+   "#"
+   "&& can_create_pseudo_p ()"
+   [(set (match_dup 3)
+ 	(eq:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(vec_select:V2DI (match_dup 3) (parallel [(const_int 1) (const_int 0)])))
+    (set (match_dup 3)
+ 	(and:V2DI (match_dup 3) (match_dup 4)))
+    (set (match_dup 0)
+ 	(subreg:<MODE> (match_dup 3) 0))]
+ {
+   operands[1] = simplify_gen_subreg (V2DImode, operands[1], <MODE>mode, 0);
+   operands[2] = simplify_gen_subreg (V2DImode, operands[2], <MODE>mode, 0);
+   operands[3] = gen_reg_rtx (V2DImode);
+   operands[4] = gen_reg_rtx (V2DImode);
+ })
+ 
+ (define_insn_and_split "*vec_cmpgt<mode><mode>_nocc_emu"
+   [(set (match_operand:VI_HW_T             0 "register_operand" "=v")
+ 	(gt:VI_HW_T (match_operand:VI_HW_T 1 "register_operand"  "v")
+ 		    (match_operand:VI_HW_T 2 "register_operand"  "v")))]
+   "TARGET_VX"
+   "#"
+   "&& can_create_pseudo_p ()"
+   [(set (match_dup 3)
+ 	(gt:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(eq:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_dup 5)
+ 	(gtu:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_dup 5)
+ 	(vec_select:V2DI (match_dup 5) (parallel [(const_int 1) (const_int 0)])))
+    (set (match_dup 4)
+ 	(and:V2DI (match_dup 4) (match_dup 5)))
+    (set (match_dup 4)
+ 	(ior:V2DI (match_dup 3) (match_dup 4)))
+    (set (match_dup 4)
+ 	(vec_duplicate:V2DI
+ 	 (vec_select:DI
+ 	  (match_dup 4)
+ 	  (parallel [(const_int 1)]))))
+    (set (match_dup 0)
+ 	(subreg:<MODE> (match_dup 4) 0))]
+ {
+   operands[1] = simplify_gen_subreg (V2DImode, operands[1], <MODE>mode, 0);
+   operands[2] = simplify_gen_subreg (V2DImode, operands[2], <MODE>mode, 0);
+   operands[3] = gen_reg_rtx (V2DImode);
+   operands[4] = gen_reg_rtx (V2DImode);
+   operands[5] = gen_reg_rtx (V2DImode);
+ })
+ 
+ (define_insn_and_split "*vec_cmpgtu<mode><mode>_nocc_emu"
+   [(set (match_operand:VI_HW_T              0 "register_operand" "=v")
+ 	(gtu:VI_HW_T (match_operand:VI_HW_T 1 "register_operand"  "v")
+ 		     (match_operand:VI_HW_T 2 "register_operand"  "v")))]
+   "TARGET_VX"
+   "#"
+   "&& can_create_pseudo_p ()"
+   [(set (match_dup 3)
+ 	(gtu:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(eq:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_dup 5)
+ 	(vec_select:V2DI (match_dup 3) (parallel [(const_int 1) (const_int 0)])))
+    (set (match_dup 4)
+ 	(and:V2DI (match_dup 4) (match_dup 5)))
+    (set (match_dup 4)
+ 	(ior:V2DI (match_dup 3) (match_dup 4)))
+    (set (match_dup 4)
+ 	(vec_duplicate:V2DI
+ 	 (vec_select:DI
+ 	  (match_dup 4)
+ 	  (parallel [(const_int 1)]))))
+    (set (match_dup 0)
+ 	(subreg:<MODE> (match_dup 4) 0))]
+ {
+   operands[1] = simplify_gen_subreg (V2DImode, operands[1], <MODE>mode, 0);
+   operands[2] = simplify_gen_subreg (V2DImode, operands[2], <MODE>mode, 0);
+   operands[3] = gen_reg_rtx (V2DImode);
+   operands[4] = gen_reg_rtx (V2DImode);
+   operands[5] = gen_reg_rtx (V2DImode);
+ })
+ 
  
  ;;
  ;; Floating point compares
***************
*** 2300,2311 ****
  
  ; op0 = op3 == 0 ? op1 : op2
  (define_insn "*vec_sel0<mode>"
!   [(set (match_operand:V 0 "register_operand" "=v")
! 	(if_then_else:V
  	 (eq (match_operand:<TOINTVEC> 3 "register_operand" "v")
  	     (match_operand:<TOINTVEC> 4 "const0_operand" ""))
! 	 (match_operand:V 1 "register_operand" "v")
! 	 (match_operand:V 2 "register_operand" "v")))]
    "TARGET_VX"
    "vsel\t%v0,%2,%1,%3"
    [(set_attr "op_type" "VRR")])
--- 2389,2400 ----
  
  ; op0 = op3 == 0 ? op1 : op2
  (define_insn "*vec_sel0<mode>"
!   [(set (match_operand:VT 0 "register_operand" "=v")
! 	(if_then_else:VT
  	 (eq (match_operand:<TOINTVEC> 3 "register_operand" "v")
  	     (match_operand:<TOINTVEC> 4 "const0_operand" ""))
! 	 (match_operand:VT 1 "register_operand" "v")
! 	 (match_operand:VT 2 "register_operand" "v")))]
    "TARGET_VX"
    "vsel\t%v0,%2,%1,%3"
    [(set_attr "op_type" "VRR")])
diff -Nrcpad gcc-14.3.0/gcc/config/vax/vax.md gcc-14.3.0-RC-20260619/gcc/config/vax/vax.md
*** gcc-14.3.0/gcc/config/vax/vax.md	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config/vax/vax.md	Fri Jun 19 06:51:02 2026
***************
*** 2909,2915 ****
    "#"
    "reload_completed"
    [(parallel
!      [(match_dup 1)
        (set (pc)
  	   (plus:SI (sign_extend:SI
  		      (mem:HI (plus:SI
--- 2909,2915 ----
    "#"
    "reload_completed"
    [(parallel
!      [(use (match_dup 1))
        (set (pc)
  	   (plus:SI (sign_extend:SI
  		      (mem:HI (plus:SI
***************
*** 2922,2928 ****
    "")
  
  (define_insn "*casesi1"
!   [(match_operand:SI 1 "const_int_operand" "n")
     (set (pc)
  	(plus:SI (sign_extend:SI
  		   (mem:HI (plus:SI
--- 2922,2928 ----
    "")
  
  (define_insn "*casesi1"
!   [(use (match_operand:SI 1 "const_int_operand" "n"))
     (set (pc)
  	(plus:SI (sign_extend:SI
  		   (mem:HI (plus:SI
diff -Nrcpad gcc-14.3.0/gcc/config.gcc gcc-14.3.0-RC-20260619/gcc/config.gcc
*** gcc-14.3.0/gcc/config.gcc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/config.gcc	Fri Jun 19 06:51:02 2026
*************** loongarch*-*-linux*)
*** 2566,2573 ****
  
  loongarch*-*-elf*)
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
! 	tm_file="${tm_file} loongarch/elf.h loongarch/linux.h loongarch/loongarch-driver.h"
! 	tmake_file="${tmake_file} loongarch/t-multilib loongarch/t-linux"
  	gnu_ld=yes
  	gas=yes
  
--- 2566,2573 ----
  
  loongarch*-*-elf*)
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
! 	tm_file="${tm_file} loongarch/elf.h loongarch/loongarch-driver.h"
! 	tmake_file="${tmake_file} loongarch/t-multilib"
  	gnu_ld=yes
  	gas=yes
  
*************** case "${target}" in
*** 4277,4283 ****
  				  echo "Unknown extension used in --with-$which=$val" 1>&2
  				  exit 1
  				fi
! 				ext_val=`echo $ext_val | sed -E -e 's/[a-z0-9]+//'`
  			  done
  
  			  true
--- 4277,4283 ----
  				  echo "Unknown extension used in --with-$which=$val" 1>&2
  				  exit 1
  				fi
! 				ext_val=`echo $ext_val | sed -E -e 's/[a-z0-9-]+//'`
  			  done
  
  			  true
diff -Nrcpad gcc-14.3.0/gcc/cp/ChangeLog gcc-14.3.0-RC-20260619/gcc/cp/ChangeLog
*** gcc-14.3.0/gcc/cp/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,372 ----
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-05-04  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR c++/65271
+ 	* parser.cc (cp_parser_class_specifier): Accept &&.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125376
+ 	* coroutines.cc (register_local_var_uses): Ignore DECL_NAME for
+ 	name independent decls.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/124850
+ 	* typeck.cc (cxx_mark_addressable): For DECL_ANON_UNION_VAR_P vars
+ 	also mark their DECL_VALUE_EXPR.
+ 
+ 2026-06-10  Yang Kun  <yangkun@disroot.org>
+ 
+ 	Backported from master:
+ 	2026-04-08  Yang Kun  <yangkun@disroot.org>
+ 
+ 	* parser.cc (cp_parser_omp_clause_proc_bind): Fix error message
+ 	(cp_parser_omp_clause_device_type): Likewise.
+ 
+ 2026-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	Revert:
+ 	2026-05-14  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 		    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/123346
+ 	* constexpr.cc (init_subob_ctx): Do initialize new_ctx.ctor
+ 	for an empty union member.
+ 
+ 2026-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	Revert:
+ 	2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125315
+ 	* constexpr.cc (init_subob_ctx): Allow both ctor and object
+ 	to be null for an empty subobject.
+ 
+ 2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125315
+ 	* constexpr.cc (init_subob_ctx): Allow both ctor and object
+ 	to be null for an empty subobject.
+ 
+ 2026-05-14  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-04-16  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 		    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/123346
+ 	* constexpr.cc (init_subob_ctx): Do initialize new_ctx.ctor
+ 	for an empty union member.
+ 
+ 2026-05-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/124632
+ 	* constexpr.cc (cxx_eval_call_expression): Unshare bindings
+ 	sooner.
+ 
+ 2026-03-30  Daniele Sahebi  <daniele@mkryss.me>
+ 
+ 	Backported from master:
+ 	2025-11-22  Daniele Sahebi  <daniele@mkryss.me>
+ 		    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/122658
+ 	* call.cc (build_over_call): Don't call build_cplus_new in
+ 	template declarations.
+ 
+ 2026-03-30  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-12-18  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 		    Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122070
+ 	* pt.cc (type_targs_deducible_from): Fall back to
+ 	TYPE_TEMPLATE_INFO when TYPE_TEMPLATE_INFO_MAYBE_ALIAS is NULL.
+ 
+ 2026-03-30  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/122550
+ 	* decl.cc (member_like_constrained_friend_p): Check that the
+ 	friend's enclosing class is an implicit instantiation.
+ 
+ 2026-03-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/97740
+ 	* pt.cc (tsubst_expr) <case COMPONENT_REF>: Don't check access
+ 	when the given member is already a FIELD_DECL.
+ 
+ 2026-03-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-16  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/124489
+ 	* error.cc (dump_type) <case NULLPTR_TYPE>: Use pp_cxx_ws_string
+ 	instead of pp_string.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* parser.cc (cp_parser_omp_taskwait): Set TREE_TYPE of OMP_TASK
+ 	to void_type_node rather than void_node.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120685
+ 	* typeck2.cc (build_functional_cast_1): For C++23 auto(x)
+ 	without tf_warning or tf_error return error_mark_node instead of
+ 	emitting pedwarn and handling it.
+ 	* semantics.cc (finish_compound_literal): Similarly for C++26
+ 	auto{x}.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123889
+ 	* constexpr.cc (explain_invalid_constexpr_fn): Diagnose
+ 	NULL or error_mark_node massaged on non-constructor.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123578
+ 	* tree.cc (cxx_printable_name_internal): Call lang_decl_name before
+ 	finding the slot to cache it in and repeat search in the cache
+ 	after the call.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123667
+ 	* semantics.cc (finish_decltype_type): Allow a structured binding
+ 	for ptds.saved to have DECL_HAS_VALUE_EXPR_P cleared, if it is
+ 	not within current_function_decl, but in that case assert that
+ 	lookup_decomp_type succeeded.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123684
+ 	* name-lookup.cc (handle_namespace_attrs): Only handle visibility and
+ 	abi_tag attributes in the gnu namespace and deprecated attribute in
+ 	the standard or gnu namespaces.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123597
+ 	* parser.cc (substitute_in_tree_walker, substitute_in_tree): Don't
+ 	consider BIND_EXPRs with !BIND_EXPR_VARS redundant if
+ 	processing_template_decl.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/91388
+ 	* semantics.cc (finish_static_assert): Suppress -Wreturn-type warnings
+ 	in functions with failed assertions.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/122772
+ 	* tree.cc (cp_stabilize_bitfield_reference): New function.
+ 	(cp_stabilize_reference): Use it for stabilization of
+ 	clk_bitfield or clk_packed lvalues.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/122834
+ 	* typeck.cc (cp_compare_floating_point_conversion_ranks): Return
+ 	3 if fmt2->b is 10 except for _Float16 vs. _Decimal128, in that
+ 	case return -2.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/121445
+ 	* constexpr.cc (build_data_member_initialization): Just return
+ 	false if member is COMPONENT_REF of COMPONENT_REF with
+ 	VAR_P get_base_address.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120876
+ 	* pt.cc (tsubst_baselink): Move maybe_incomplete handling after
+ 	!baselink handling.
+ 
+ 2026-03-13  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/123845
+ 	PR libstdc++/114865
+ 	* constexpr.cc (build_data_member_initialization): Remove
+ 	C++11-specific recognition of MODIFY_EXPR.
+ 	(check_constexpr_ctor_body): Relax error diagnostic to a
+ 	pedwarn and don't clear DECL_DECLARED_CONSTEXPR_P upon
+ 	error.  Return true if complaining.
+ 
+ 2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/123676
+ 	* pt.cc (tsubst_pack_expansion): Relax unsubsituted_packs
+ 	assert to allow !processing_template_decl when args is
+ 	NULL_TREE.
+ 
+ 2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122494
+ 	PR c++/123814
+ 	* constexpr.cc (cxx_eval_outermost_constant_expr): Clear
+ 	uid_sensitive_constexpr_evaluation_value when mce_true.
+ 
+ 2025-10-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120757
+ 	* pt.cc (tsubst_expr) [OFFSET_REF]: Don't tsubst the type.
+ 
+ 2025-10-07  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-20  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/121981
+ 	* pt.cc (any_template_parm_r) <case TEMPLATE_TYPE_PARM>:
+ 	Don't walk TREE_TYPE.
+ 
+ 2025-09-15  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2025-09-09  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR c++/121801
+ 	* mangle.cc (write_real_cst): Handle 16-bit real and assert
+ 	that reals have 16 bits or a multiple of 32 bits.
+ 
+ 2025-08-08  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-04  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/120620
+ 	* constexpr.cc (cxx_dynamic_cast_fn_p): Return true only
+ 	for synthesized __dynamic_cast.
+ 
+ 2025-08-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-31  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120800
+ 	* constexpr.cc (cxx_eval_vec_init_1): Suppress access control.
+ 
+ 2025-07-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120577
+ 	* constexpr.cc (cxx_eval_call_expression): Set
+ 	CONSTRUCTOR_NO_CLEARING on initial value for ctor.
+ 	(cxx_eval_component_reference): Make value-initialization
+ 	of an aggregate member explicit.
+ 
+ 2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120940
+ 	* typeck.cc (cp_build_array_ref): Fix a pasto.
+ 
+ 2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120471
+ 	* typeck.cc (cp_build_array_ref) <case COND_EXPR>: If idx is not
+ 	INTEGER_CST, don't optimize the case (but cp_default_conversion on
+ 	array early if it has ARRAY_TYPE) or use
+ 	SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0> as new op0 depending
+ 	on flag_strong_eval_order and whether op1 and op2 are arrays with
+ 	invariant address or tree invariant pointers.  Formatting fixes.
+ 
+ 2025-06-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120123
+ 	* lambda.cc (nonlambda_method_basetype): Look through lambdas
+ 	even when current_class_ref is null.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/120161
+ 	* pt.cc (unify) <case RECORD_TYPE>: When comparing specializations
+ 	of a non-primary template, still perform a type comparison.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/cp/call.cc gcc-14.3.0-RC-20260619/gcc/cp/call.cc
*** gcc-14.3.0/gcc/cp/call.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/call.cc	Fri Jun 19 06:51:02 2026
*************** build_over_call (struct z_candidate *can
*** 9940,9957 ****
  	current_function_returns_abnormally = 1;
        if (immediate_invocation_p (fn))
  	{
! 	  tree obj_arg = NULL_TREE, exprimm = expr;
  	  if (DECL_CONSTRUCTOR_P (fn))
  	    obj_arg = first_arg;
- 	  if (obj_arg
- 	      && is_dummy_object (obj_arg)
- 	      && !type_dependent_expression_p (obj_arg))
- 	    {
- 	      exprimm = build_cplus_new (DECL_CONTEXT (fn), expr, complain);
- 	      obj_arg = NULL_TREE;
- 	    }
  	  /* Look through *(const T *)&obj.  */
! 	  else if (obj_arg && INDIRECT_REF_P (obj_arg))
  	    {
  	      tree addr = TREE_OPERAND (obj_arg, 0);
  	      STRIP_NOPS (addr);
--- 9940,9950 ----
  	current_function_returns_abnormally = 1;
        if (immediate_invocation_p (fn))
  	{
! 	  tree obj_arg = NULL_TREE;
  	  if (DECL_CONSTRUCTOR_P (fn))
  	    obj_arg = first_arg;
  	  /* Look through *(const T *)&obj.  */
! 	  if (obj_arg && INDIRECT_REF_P (obj_arg))
  	    {
  	      tree addr = TREE_OPERAND (obj_arg, 0);
  	      STRIP_NOPS (addr);
*************** build_over_call (struct z_candidate *can
*** 9963,9969 ****
  		    obj_arg = TREE_OPERAND (addr, 0);
  		}
  	    }
! 	  fold_non_dependent_expr (exprimm, complain,
  				   /*manifestly_const_eval=*/true,
  				   obj_arg);
  	}
--- 9956,9962 ----
  		    obj_arg = TREE_OPERAND (addr, 0);
  		}
  	    }
! 	  fold_non_dependent_expr (expr, complain,
  				   /*manifestly_const_eval=*/true,
  				   obj_arg);
  	}
diff -Nrcpad gcc-14.3.0/gcc/cp/constexpr.cc gcc-14.3.0-RC-20260619/gcc/cp/constexpr.cc
*** gcc-14.3.0/gcc/cp/constexpr.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/constexpr.cc	Fri Jun 19 06:51:02 2026
*************** build_data_member_initialization (tree t
*** 399,409 ****
      }
    if (TREE_CODE (t) == CONVERT_EXPR)
      t = TREE_OPERAND (t, 0);
!   if (TREE_CODE (t) == INIT_EXPR
!       /* vptr initialization shows up as a MODIFY_EXPR.  In C++14 we only
! 	 use what this function builds for cx_check_missing_mem_inits, and
! 	 assignment in the ctor body doesn't count.  */
!       || (cxx_dialect < cxx14 && TREE_CODE (t) == MODIFY_EXPR))
      {
        member = TREE_OPERAND (t, 0);
        init = break_out_target_exprs (TREE_OPERAND (t, 1));
--- 399,405 ----
      }
    if (TREE_CODE (t) == CONVERT_EXPR)
      t = TREE_OPERAND (t, 0);
!   if (TREE_CODE (t) == INIT_EXPR)
      {
        member = TREE_OPERAND (t, 0);
        init = break_out_target_exprs (TREE_OPERAND (t, 1));
*************** build_data_member_initialization (tree t
*** 464,469 ****
--- 460,468 ----
        if (TREE_CODE (aggr) != COMPONENT_REF)
  	/* Normal member initialization.  */
  	member = TREE_OPERAND (member, 1);
+       else if (VAR_P (get_base_address (aggr)))
+ 	/* Initializing a local variable, don't add anything.  */
+ 	return true;
        else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
  	/* Initializing a member of an anonymous union.  */
  	return build_anon_member_initialization (member, init, vec);
*************** check_constexpr_ctor_body (tree last, tr
*** 562,572 ****
    else if (list != last
  	   && !check_constexpr_ctor_body_1 (last, list))
      ok = false;
!   if (!ok)
      {
!       if (complain)
! 	error ("%<constexpr%> constructor does not have empty body");
!       DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
      }
    return ok;
  }
--- 561,571 ----
    else if (list != last
  	   && !check_constexpr_ctor_body_1 (last, list))
      ok = false;
!   if (!ok && complain)
      {
!       pedwarn (input_location, OPT_Wc__14_extensions,
! 	       "%<constexpr%> constructor does not have empty body");
!       ok = true;
      }
    return ok;
  }
*************** explain_invalid_constexpr_fn (tree fun)
*** 1102,1107 ****
--- 1101,1109 ----
  		  require_potential_rvalue_constant_expression (body);
  		}
  	    }
+ 	  else if (body == NULL_TREE || body == error_mark_node)
+ 	    error ("body of %<constexpr%> function %qD not a return-statement",
+ 		   fun);
  	}
      }
  }
*************** cxx_dynamic_cast_fn_p (tree fndecl)
*** 2440,2446 ****
  {
    return (cxx_dialect >= cxx20
  	  && id_equal (DECL_NAME (fndecl), "__dynamic_cast")
! 	  && CP_DECL_CONTEXT (fndecl) == abi_node);
  }
  
  /* Often, we have an expression in the form of address + offset, e.g.
--- 2442,2452 ----
  {
    return (cxx_dialect >= cxx20
  	  && id_equal (DECL_NAME (fndecl), "__dynamic_cast")
! 	  && CP_DECL_CONTEXT (fndecl) == abi_node
! 	  /* Only consider implementation-detail __dynamic_cast calls that
! 	     correspond to a dynamic_cast, and ignore direct calls to
! 	     abi::__dynamic_cast.  */
! 	  && DECL_ARTIFICIAL (fndecl));
  }
  
  /* Often, we have an expression in the form of address + offset, e.g.
*************** cxx_eval_call_expression (const constexp
*** 3222,3227 ****
--- 3228,3243 ----
  	      *slot = entry = ggc_alloc<constexpr_call> ();
  	      *entry = new_call;
  	      fb.preserve ();
+ 
+ 	      /* Unshare args going into the hash table to separate them
+ 		 from the caller's context, for better GC and to avoid
+ 		 problems with verify_gimple.  */
+ 	      tree bound = new_call.bindings;
+ 	      for (int i = 0; i < TREE_VEC_LENGTH (bound); ++i)
+ 		{
+ 		  tree &arg = TREE_VEC_ELT (bound, i);
+ 		  arg = unshare_expr_without_location (arg);
+ 		}
  	    }
  	}
        /* Calls that are in progress have their result set to NULL, so that we
*************** cxx_eval_call_expression (const constexp
*** 3280,3292 ****
  	      tree arg = TREE_VEC_ELT (bound, i);
  	      if (entry)
  		{
! 		  /* Unshare args going into the hash table to separate them
! 		     from the caller's context, for better GC and to avoid
! 		     problems with verify_gimple.  */
! 		  arg = unshare_expr_without_location (arg);
! 		  TREE_VEC_ELT (bound, i) = arg;
! 
! 		  /* And then unshare again so the callee doesn't change the
  		     argument values in the hash table. XXX Could we unshare
  		     lazily in cxx_eval_store_expression?  */
  		  arg = unshare_constructor (arg);
--- 3296,3302 ----
  	      tree arg = TREE_VEC_ELT (bound, i);
  	      if (entry)
  		{
! 		  /* Unshare again so the callee doesn't change the
  		     argument values in the hash table. XXX Could we unshare
  		     lazily in cxx_eval_store_expression?  */
  		  arg = unshare_constructor (arg);
*************** cxx_eval_call_expression (const constexp
*** 3337,3346 ****
  	      && TREE_CODE (new_obj) == COMPONENT_REF
  	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (new_obj, 0))) == UNION_TYPE)
  	    {
  	      tree activate = build2 (INIT_EXPR, TREE_TYPE (new_obj),
! 				      new_obj,
! 				      build_constructor (TREE_TYPE (new_obj),
! 							 NULL));
  	      cxx_eval_constant_expression (ctx, activate,
  					    lval, non_constant_p, overflow_p);
  	      ggc_free (activate);
--- 3347,3356 ----
  	      && TREE_CODE (new_obj) == COMPONENT_REF
  	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (new_obj, 0))) == UNION_TYPE)
  	    {
+ 	      tree ctor = build_constructor (TREE_TYPE (new_obj), NULL);
+ 	      CONSTRUCTOR_NO_CLEARING (ctor) = true;
  	      tree activate = build2 (INIT_EXPR, TREE_TYPE (new_obj),
! 				      new_obj, ctor);
  	      cxx_eval_constant_expression (ctx, activate,
  					    lval, non_constant_p, overflow_p);
  	      ggc_free (activate);
*************** cxx_eval_component_reference (const cons
*** 4731,4736 ****
--- 4741,4756 ----
      }
  
    /* If there's no explicit init for this field, it's value-initialized.  */
+ 
+   if (AGGREGATE_TYPE_P (TREE_TYPE (t)))
+     {
+       /* As in cxx_eval_store_expression, insert an empty CONSTRUCTOR
+ 	 and copy the flags.  */
+       constructor_elt *e = get_or_insert_ctor_field (whole, part);
+       e->value = value = build_constructor (TREE_TYPE (part), NULL);
+       return value;
+     }
+ 
    value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
    return cxx_eval_constant_expression (ctx, value,
  				       lval,
*************** cxx_eval_vec_init_1 (const constexpr_ctx
*** 5497,5502 ****
--- 5517,5525 ----
      return cxx_eval_bare_aggregate (ctx, init, lval,
  				    non_constant_p, overflow_p);
  
+   /* We already checked access when building the VEC_INIT_EXPR.  */
+   deferring_access_check_sentinel acs (dk_deferred);
+ 
    /* For the default constructor, build up a call to the default
       constructor of the element type.  We only need to handle class types
       here, as for a constructor to be constexpr, all members must be
*************** cxx_eval_outermost_constant_expr (tree t
*** 9062,9067 ****
--- 9085,9101 ----
  	r = TARGET_EXPR_INITIAL (r);
      }
  
+   /* uid_sensitive_constexpr_evaluation_value restricts warning-dependent
+      constexpr evaluation to avoid unnecessary template instantiation, and is
+      always done with mce_unknown.  But due to gaps in the restriction logic
+      we may still end up taking an evaluation path that in turn requires
+      manifestly constant evaluation, and such evaluation must not be
+      restricted since it likely has semantic consequences.
+      TODO: Remove/replace the mechanism in GCC 17.  */
+   auto uids = make_temp_override (uid_sensitive_constexpr_evaluation_value);
+   if (ctx.manifestly_const_eval == mce_true)
+     uid_sensitive_constexpr_evaluation_value = false;
+ 
    auto_vec<tree, 16> cleanups;
    global_ctx.cleanups = &cleanups;
  
diff -Nrcpad gcc-14.3.0/gcc/cp/coroutines.cc gcc-14.3.0-RC-20260619/gcc/cp/coroutines.cc
*** gcc-14.3.0/gcc/cp/coroutines.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/coroutines.cc	Fri Jun 19 06:51:02 2026
*************** register_local_var_uses (tree *stmt, int
*** 4199,4204 ****
--- 4199,4206 ----
  	 identify them in the coroutine frame.  */
        tree lvname = DECL_NAME (lvar);
        char *buf = NULL;
+       if (name_independent_decl_p (lvar))
+ 	lvname = NULL_TREE;
  
        /* The outermost bind scope contains the artificial variables that
  	 we inject to implement the coro state machine.  We want to be able
diff -Nrcpad gcc-14.3.0/gcc/cp/decl.cc gcc-14.3.0-RC-20260619/gcc/cp/decl.cc
*** gcc-14.3.0/gcc/cp/decl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/decl.cc	Fri Jun 19 06:51:02 2026
*************** member_like_constrained_friend_p (tree d
*** 992,997 ****
--- 992,998 ----
  	  && DECL_UNIQUE_FRIEND_P (decl)
  	  && DECL_FRIEND_CONTEXT (decl)
  	  && get_constraints (decl)
+ 	  && CLASSTYPE_IMPLICIT_INSTANTIATION (DECL_FRIEND_CONTEXT (decl))
  	  && (!DECL_TEMPLATE_INFO (decl)
  	      || !PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
  	      || (uses_outer_template_parms_in_constraints
diff -Nrcpad gcc-14.3.0/gcc/cp/error.cc gcc-14.3.0-RC-20260619/gcc/cp/error.cc
*** gcc-14.3.0/gcc/cp/error.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/error.cc	Fri Jun 19 06:51:02 2026
*************** dump_type (cxx_pretty_printer *pp, tree
*** 724,730 ****
        break;
  
      case NULLPTR_TYPE:
!       pp_string (pp, "std::nullptr_t");
        break;
  
      default:
--- 724,730 ----
        break;
  
      case NULLPTR_TYPE:
!       pp_cxx_ws_string (pp, "std::nullptr_t");
        break;
  
      default:
diff -Nrcpad gcc-14.3.0/gcc/cp/lambda.cc gcc-14.3.0-RC-20260619/gcc/cp/lambda.cc
*** gcc-14.3.0/gcc/cp/lambda.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/lambda.cc	Fri Jun 19 06:51:02 2026
*************** current_nonlambda_function (void)
*** 1002,1013 ****
  tree
  nonlambda_method_basetype (void)
  {
-   if (!current_class_ref)
-     return NULL_TREE;
- 
    tree type = current_class_type;
    if (!type || !LAMBDA_TYPE_P (type))
!     return type;
  
    while (true)
      {
--- 1002,1010 ----
  tree
  nonlambda_method_basetype (void)
  {
    tree type = current_class_type;
    if (!type || !LAMBDA_TYPE_P (type))
!     return current_class_ref ? type : NULL_TREE;
  
    while (true)
      {
diff -Nrcpad gcc-14.3.0/gcc/cp/mangle.cc gcc-14.3.0-RC-20260619/gcc/cp/mangle.cc
*** gcc-14.3.0/gcc/cp/mangle.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/mangle.cc	Fri Jun 19 06:51:02 2026
*************** write_real_cst (const tree value)
*** 2160,2170 ****
    int i, limit, dir;
  
    tree type = TREE_TYPE (value);
!   int words = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 32;
  
    real_to_target (target_real, &TREE_REAL_CST (value),
  		  TYPE_MODE (type));
  
    /* The value in target_real is in the target word order,
       so we must write it out backward if that happens to be
       little-endian.  write_number cannot be used, it will
--- 2160,2183 ----
    int i, limit, dir;
  
    tree type = TREE_TYPE (value);
!   int bits = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type));
!   int words = bits / 32;
  
    real_to_target (target_real, &TREE_REAL_CST (value),
  		  TYPE_MODE (type));
  
+   if (words == 0)
+     {
+       /* _Float16 and std::bfloat16_t are the only supported types smaller than
+ 	 32 bits.  */
+       gcc_assert (bits == 16);
+       sprintf (buffer, "%04lx", (unsigned long) target_real[0]);
+       write_chars (buffer, 4);
+       return;
+     }
+ 
+   gcc_assert (bits % 32 == 0);
+ 
    /* The value in target_real is in the target word order,
       so we must write it out backward if that happens to be
       little-endian.  write_number cannot be used, it will
diff -Nrcpad gcc-14.3.0/gcc/cp/name-lookup.cc gcc-14.3.0-RC-20260619/gcc/cp/name-lookup.cc
*** gcc-14.3.0/gcc/cp/name-lookup.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/name-lookup.cc	Fri Jun 19 06:51:02 2026
*************** handle_namespace_attrs (tree ns, tree at
*** 6411,6417 ****
        tree name = get_attribute_name (d);
        tree args = TREE_VALUE (d);
  
!       if (is_attribute_p ("visibility", name))
  	{
  	  /* attribute visibility is a property of the syntactic block
  	     rather than the namespace as a whole, so we don't touch the
--- 6411,6418 ----
        tree name = get_attribute_name (d);
        tree args = TREE_VALUE (d);
  
!       if (is_attribute_p ("visibility", name)
! 	  && args != error_mark_node)
  	{
  	  /* attribute visibility is a property of the syntactic block
  	     rather than the namespace as a whole, so we don't touch the
*************** handle_namespace_attrs (tree ns, tree at
*** 6433,6439 ****
  	  push_visibility (TREE_STRING_POINTER (x), 1);
  	  saw_vis = true;
  	}
!       else if (is_attribute_p ("abi_tag", name))
  	{
  	  if (!DECL_NAME (ns))
  	    {
--- 6434,6441 ----
  	  push_visibility (TREE_STRING_POINTER (x), 1);
  	  saw_vis = true;
  	}
!       else if (is_attribute_p ("abi_tag", name)
! 	       && args != error_mark_node)
  	{
  	  if (!DECL_NAME (ns))
  	    {
*************** handle_namespace_attrs (tree ns, tree at
*** 6460,6466 ****
  	    DECL_ATTRIBUTES (ns) = tree_cons (name, args,
  					      DECL_ATTRIBUTES (ns));
  	}
!       else if (is_attribute_p ("deprecated", name))
  	{
  	  if (!DECL_NAME (ns))
  	    {
--- 6462,6469 ----
  	    DECL_ATTRIBUTES (ns) = tree_cons (name, args,
  					      DECL_ATTRIBUTES (ns));
  	}
!       else if (is_attribute_p ("deprecated", name)
! 	       && args != error_mark_node)
  	{
  	  if (!DECL_NAME (ns))
  	    {
diff -Nrcpad gcc-14.3.0/gcc/cp/parser.cc gcc-14.3.0-RC-20260619/gcc/cp/parser.cc
*** gcc-14.3.0/gcc/cp/parser.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/parser.cc	Fri Jun 19 06:51:02 2026
*************** cp_parser_class_specifier (cp_parser* pa
*** 26950,26955 ****
--- 26950,26956 ----
        case CPP_SEMICOLON:
        case CPP_MULT:
        case CPP_AND:
+       case CPP_AND_AND:
        case CPP_OPEN_PAREN:
        case CPP_CLOSE_PAREN:
        case CPP_COMMA:
*************** cp_parser_omp_clause_proc_bind (cp_parse
*** 41827,41833 ****
    return c;
  
   invalid_kind:
!   cp_parser_error (parser, "invalid depend kind");
   resync_fail:
    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
  					 /*or_comma=*/false,
--- 41828,41834 ----
    return c;
  
   invalid_kind:
!   cp_parser_error (parser, "invalid proc_bind kind");
   resync_fail:
    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
  					 /*or_comma=*/false,
*************** cp_parser_omp_clause_device_type (cp_par
*** 41877,41883 ****
    return c;
  
   invalid_kind:
!   cp_parser_error (parser, "invalid depend kind");
   resync_fail:
    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
  					 /*or_comma=*/false,
--- 41878,41884 ----
    return c;
  
   invalid_kind:
!   cp_parser_error (parser, "expected %<host%>, %<nohost%> or %<any%>");
   resync_fail:
    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
  					 /*or_comma=*/false,
*************** substitute_in_tree_walker (tree *tp, int
*** 45290,45295 ****
--- 45291,45299 ----
    else if (TREE_CODE (*tp) == BIND_EXPR
  	   && BIND_EXPR_BODY (*tp) == sit->orig
  	   && !BIND_EXPR_VARS (*tp)
+ 	   /* BIND_EXPRs in templates likely have NULL BIND_EXPR_VARS,
+ 	      are created by begin_compound_stmt and are not redundant.  */
+ 	   && !processing_template_decl
  	   && (sit->flatten || TREE_CODE (sit->repl) == BIND_EXPR))
      {
        *tp = sit->repl;
*************** substitute_in_tree (tree *context, tree
*** 45334,45340 ****
    struct sit_data data;
  
    gcc_assert (*context && orig && repl);
!   if (TREE_CODE (repl) == BIND_EXPR && !BIND_EXPR_VARS (repl))
      repl = BIND_EXPR_BODY (repl);
    data.orig = orig;
    data.repl = repl;
--- 45338,45349 ----
    struct sit_data data;
  
    gcc_assert (*context && orig && repl);
!   /* Look through redundant BIND_EXPR.  BIND_EXPRs in templates likely have
!      NULL BIND_EXPR_VARS, are created by begin_compound_stmt and are not
!      redundant.  */
!   if (TREE_CODE (repl) == BIND_EXPR
!       && !BIND_EXPR_VARS (repl)
!       && !processing_template_decl)
      repl = BIND_EXPR_BODY (repl);
    data.orig = orig;
    data.repl = repl;
*************** cp_parser_omp_taskwait (cp_parser *parse
*** 46383,46389 ****
    if (clauses)
      {
        tree stmt = make_node (OMP_TASK);
!       TREE_TYPE (stmt) = void_node;
        OMP_TASK_CLAUSES (stmt) = clauses;
        OMP_TASK_BODY (stmt) = NULL_TREE;
        SET_EXPR_LOCATION (stmt, pragma_tok->location);
--- 46392,46398 ----
    if (clauses)
      {
        tree stmt = make_node (OMP_TASK);
!       TREE_TYPE (stmt) = void_type_node;
        OMP_TASK_CLAUSES (stmt) = clauses;
        OMP_TASK_BODY (stmt) = NULL_TREE;
        SET_EXPR_LOCATION (stmt, pragma_tok->location);
diff -Nrcpad gcc-14.3.0/gcc/cp/pt.cc gcc-14.3.0-RC-20260619/gcc/cp/pt.cc
*** gcc-14.3.0/gcc/cp/pt.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/pt.cc	Fri Jun 19 06:51:02 2026
*************** any_template_parm_r (tree t, void *data)
*** 10990,10996 ****
        break;
  
      case TEMPLATE_PARM_INDEX:
!       WALK_SUBTREE (TREE_TYPE (t));
        break;
  
      case TEMPLATE_DECL:
--- 10990,10999 ----
        break;
  
      case TEMPLATE_PARM_INDEX:
!       /* No need to consider template parameters within the type of an NTTP:
! 	 substitution into an NTTP is done directly with the corresponding
! 	 template argument, and its type only comes into play earlier during
! 	 coercion.  */
        break;
  
      case TEMPLATE_DECL:
*************** tsubst_pack_expansion (tree t, tree args
*** 13701,13707 ****
  	  /* We can't substitute for this parameter pack.  We use a flag as
  	     well as the missing_level counter because function parameter
  	     packs don't have a level.  */
! 	  gcc_assert (processing_template_decl || is_auto (parm_pack));
  	  unsubstituted_packs = true;
  	}
      }
--- 13704,13711 ----
  	  /* We can't substitute for this parameter pack.  We use a flag as
  	     well as the missing_level counter because function parameter
  	     packs don't have a level.  */
! 	  gcc_assert (processing_template_decl || is_auto (parm_pack)
! 		      || args == NULL_TREE);
  	  unsubstituted_packs = true;
  	}
      }
*************** tsubst_baselink (tree baselink, tree obj
*** 17227,17232 ****
--- 17231,17245 ----
        bool maybe_incomplete = BASELINK_FUNCTIONS_MAYBE_INCOMPLETE_P (baselink);
        baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1,
  				  complain);
+       if (!baselink)
+ 	{
+ 	  if ((complain & tf_error)
+ 	      && constructor_name_p (name, qualifying_scope))
+ 	    error ("cannot call constructor %<%T::%D%> directly",
+ 		   qualifying_scope, name);
+ 	  return error_mark_node;
+ 	}
+ 
        if (maybe_incomplete)
  	{
  	  /* Filter out from the new lookup set those functions which didn't
*************** tsubst_baselink (tree baselink, tree obj
*** 17240,17254 ****
  	  BASELINK_FUNCTIONS_MAYBE_INCOMPLETE_P (baselink) = true;
  	}
  
-       if (!baselink)
- 	{
- 	  if ((complain & tf_error)
- 	      && constructor_name_p (name, qualifying_scope))
- 	    error ("cannot call constructor %<%T::%D%> directly",
- 		   qualifying_scope, name);
- 	  return error_mark_node;
- 	}
- 
        fns = BASELINK_FUNCTIONS (baselink);
      }
    else
--- 17253,17258 ----
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 21275,21282 ****
--- 21279,21292 ----
  	  }
  	else if (TREE_CODE (member) == FIELD_DECL)
  	  {
+ 	    /* Assume access of this FIELD_DECL has already been checked; we
+ 	       don't recheck it to avoid bogus access errors when substituting
+ 	       a reduced constant initializer (97740).  */
+ 	    gcc_checking_assert (TREE_CODE (TREE_OPERAND (t, 1)) == FIELD_DECL);
+ 	    push_deferring_access_checks (dk_deferred);
  	    r = finish_non_static_data_member (member, object, NULL_TREE,
  					       complain);
+ 	    pop_deferring_access_checks ();
  	    if (REF_PARENTHESIZED_P (t))
  	      r = force_paren_expr (r);
  	    RETURN (r);
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 21714,21725 ****
  
      case OFFSET_REF:
        {
! 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
  	tree op0 = RECUR (TREE_OPERAND (t, 0));
  	tree op1 = RECUR (TREE_OPERAND (t, 1));
  	r = build2 (OFFSET_REF, type, op0, op1);
  	PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
! 	if (!mark_used (TREE_OPERAND (r, 1), complain)
  	    && !(complain & tf_error))
  	  RETURN (error_mark_node);
  	RETURN (r);
--- 21724,21739 ----
  
      case OFFSET_REF:
        {
! 	/* We should only get here for an OFFSET_REF like A::m; a .* in a
! 	   template is represented as a DOTSTAR_EXPR.  */
! 	gcc_checking_assert
! 	  (same_type_p (TREE_TYPE (t), TREE_TYPE (TREE_OPERAND (t, 1))));
  	tree op0 = RECUR (TREE_OPERAND (t, 0));
  	tree op1 = RECUR (TREE_OPERAND (t, 1));
+ 	tree type = TREE_TYPE (op1);
  	r = build2 (OFFSET_REF, type, op0, op1);
  	PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
! 	if (!mark_used (op1, complain)
  	    && !(complain & tf_error))
  	  RETURN (error_mark_node);
  	RETURN (r);
*************** unify (tree tparms, tree targs, tree par
*** 25299,25308 ****
  			  INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (parm)),
  			  INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (t)),
  			  UNIFY_ALLOW_NONE, explain_p);
! 	  else
! 	    return unify_success (explain_p);
  	}
!       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
  	return unify_type_mismatch (explain_p, parm, arg);
        return unify_success (explain_p);
  
--- 25313,25322 ----
  			  INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (parm)),
  			  INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (t)),
  			  UNIFY_ALLOW_NONE, explain_p);
! 	  gcc_checking_assert (t == arg);
  	}
! 
!       if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
  	return unify_type_mismatch (explain_p, parm, arg);
        return unify_success (explain_p);
  
*************** type_targs_deducible_from (tree tmpl, tr
*** 30725,30731 ****
  	 per alias_ctad_tweaks.  */
        tparms = INNERMOST_TEMPLATE_PARMS (TREE_PURPOSE (tmpl));
        ttype = TREE_VALUE (tmpl);
!       tmpl = TI_TEMPLATE (TYPE_TEMPLATE_INFO_MAYBE_ALIAS (ttype));
      }
  
    int len = TREE_VEC_LENGTH (tparms);
--- 30739,30749 ----
  	 per alias_ctad_tweaks.  */
        tparms = INNERMOST_TEMPLATE_PARMS (TREE_PURPOSE (tmpl));
        ttype = TREE_VALUE (tmpl);
!       tree ti = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (ttype);
!       if (!ti)
! 	/* TTYPE is a typedef to a template-id.  */
! 	ti = TYPE_TEMPLATE_INFO (ttype);
!       tmpl = TI_TEMPLATE (ti);
      }
  
    int len = TREE_VEC_LENGTH (tparms);
diff -Nrcpad gcc-14.3.0/gcc/cp/semantics.cc gcc-14.3.0-RC-20260619/gcc/cp/semantics.cc
*** gcc-14.3.0/gcc/cp/semantics.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/semantics.cc	Fri Jun 19 06:51:02 2026
*************** finish_compound_literal (tree type, tree
*** 3562,3570 ****
  	  return error_mark_node;
  	}
        else if (cxx_dialect < cxx23)
! 	pedwarn (input_location, OPT_Wc__23_extensions,
! 		 "%<auto{x}%> only available with "
! 		 "%<-std=c++2b%> or %<-std=gnu++2b%>");
        type = do_auto_deduction (type, compound_literal, type, complain,
  				adc_variable_type);
        if (type == error_mark_node)
--- 3562,3573 ----
  	  return error_mark_node;
  	}
        else if (cxx_dialect < cxx23)
! 	{
! 	  if ((complain & tf_warning_or_error) != 0)
! 	    pedwarn (input_location, OPT_Wc__23_extensions,
! 		     "%<auto{x}%> only available with "
! 		     "%<-std=c++2b%> or %<-std=gnu++2b%>");
! 	}
        type = do_auto_deduction (type, compound_literal, type, complain,
  				adc_variable_type);
        if (type == error_mark_node)
*************** finish_static_assert (tree condition, tr
*** 11857,11862 ****
--- 11860,11875 ----
  	  XDELETEVEC (buf);
  
  	  diagnose_failing_condition (bad, cloc, show_expr_p);
+ 
+ 	  /* Suppress -Wreturn-type for functions with failed static_asserts.
+ 	     Otherwise templates like:
+ 	     if constexpr (whatever)
+ 	       return something (args);
+ 	     else
+ 	       static_assert (false, "explanation");
+ 	     get a useless extra -Wreturn-type warning.  */
+ 	  if (current_function_decl)
+ 	    suppress_warning (current_function_decl, OPT_Wreturn_type);
  	}
        else if (condition && condition != error_mark_node)
  	{
*************** finish_decltype_type (tree expr, bool id
*** 11974,11985 ****
  	{
  	  if (ptds.saved)
  	    {
! 	      gcc_checking_assert (DECL_HAS_VALUE_EXPR_P (expr));
  	      /* DECL_HAS_VALUE_EXPR_P is always set if
! 		 processing_template_decl.  If lookup_decomp_type
  		 returns non-NULL, it is the tuple case.  */
  	      if (tree ret = lookup_decomp_type (expr))
  		return ret;
  	    }
  	  if (DECL_HAS_VALUE_EXPR_P (expr))
  	    /* Expr is an array or struct subobject proxy, handle
--- 11987,12002 ----
  	{
  	  if (ptds.saved)
  	    {
! 	      gcc_checking_assert (DECL_HAS_VALUE_EXPR_P (expr)
! 				   || (DECL_CONTEXT (expr)
! 				       != current_function_decl));
  	      /* DECL_HAS_VALUE_EXPR_P is always set if
! 		 processing_template_decl at least for structured bindings
! 		 within the template.  If lookup_decomp_type
  		 returns non-NULL, it is the tuple case.  */
  	      if (tree ret = lookup_decomp_type (expr))
  		return ret;
+ 	      gcc_checking_assert (DECL_HAS_VALUE_EXPR_P (expr));
  	    }
  	  if (DECL_HAS_VALUE_EXPR_P (expr))
  	    /* Expr is an array or struct subobject proxy, handle
diff -Nrcpad gcc-14.3.0/gcc/cp/tree.cc gcc-14.3.0-RC-20260619/gcc/cp/tree.cc
*** gcc-14.3.0/gcc/cp/tree.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/tree.cc	Fri Jun 19 06:51:02 2026
*************** non_mergeable_glvalue_p (const_tree ref)
*** 424,429 ****
--- 424,506 ----
  	  && !(kind & (clk_class|clk_mergeable)));
  }
  
+ /* C++-specific version of stabilize_reference for bit-fields and
+    DECL_PACKED fields.  We can't bind a reference to those.  */
+ 
+ static tree
+ cp_stabilize_bitfield_reference (tree ref)
+ {
+   tree op1, op2, op3;
+   STRIP_ANY_LOCATION_WRAPPER (ref);
+   switch (TREE_CODE (ref))
+     {
+     case VAR_DECL:
+     case PARM_DECL:
+     case RESULT_DECL:
+     CASE_CONVERT:
+     case FLOAT_EXPR:
+     case FIX_TRUNC_EXPR:
+     case INDIRECT_REF:
+     case COMPONENT_REF:
+     case BIT_FIELD_REF:
+     case ARRAY_REF:
+     case ARRAY_RANGE_REF:
+     case ERROR_MARK:
+     case REALPART_EXPR:
+     case IMAGPART_EXPR:
+     default:
+       break;
+     case COMPOUND_EXPR:
+       op2 = cp_stabilize_bitfield_reference (TREE_OPERAND (ref, 1));
+       if (op2 == TREE_OPERAND (ref, 1))
+ 	return ref;
+       op1 = TREE_OPERAND (ref, 0);
+       if (TREE_SIDE_EFFECTS (op1))
+ 	{
+ 	  if (VOID_TYPE_P (TREE_TYPE (op1)))
+ 	    op1 = save_expr (op1);
+ 	  else
+ 	    {
+ 	      op1 = build2 (COMPOUND_EXPR, void_type_node, op1,
+ 			    void_node);
+ 	      op1 = save_expr (op1);
+ 	    }
+ 	}
+       return build2 (COMPOUND_EXPR, TREE_TYPE (op2), op1, op2);
+     case COND_EXPR:
+       op1 = TREE_OPERAND (ref, 0);
+       op2 = TREE_OPERAND (ref, 1);
+       op3 = TREE_OPERAND (ref, 2);
+       if (op2 && TREE_CODE (op2) != THROW_EXPR)
+ 	op2 = cp_stabilize_bitfield_reference (op2);
+       if (TREE_CODE (op3) != THROW_EXPR)
+ 	op3 = cp_stabilize_bitfield_reference (op3);
+       if (op2 == NULL_TREE)
+ 	op1 = cp_stabilize_bitfield_reference (op1);
+       if (op1 == TREE_OPERAND (ref, 0)
+ 	  && op2 == TREE_OPERAND (ref, 1)
+ 	  && op3 == TREE_OPERAND (ref, 2))
+ 	return ref;
+       if (op2 != NULL_TREE && TREE_SIDE_EFFECTS (op1))
+ 	op1 = save_expr (op1);
+       return build3 (COND_EXPR, TREE_TYPE (ref), op1, op2, op3);
+     case PREINCREMENT_EXPR:
+     case PREDECREMENT_EXPR:
+       op1 = cp_stabilize_bitfield_reference (TREE_OPERAND (ref, 0));
+       if (op1 == TREE_OPERAND (ref, 0))
+ 	return ref;
+       return build2 (COMPOUND_EXPR, TREE_TYPE (ref),
+ 		     build2 (TREE_CODE (ref), TREE_TYPE (ref), op1,
+ 			     TREE_OPERAND (ref, 0)), op1);
+     case PAREN_EXPR:
+       op1 = cp_stabilize_bitfield_reference (TREE_OPERAND (ref, 0));
+       if (op1 == TREE_OPERAND (ref, 0))
+ 	return ref;
+       return build1 (PAREN_EXPR, TREE_TYPE (ref), op1);
+     }
+   return stabilize_reference (ref);
+ }
+ 
  /* C++-specific version of stabilize_reference.  */
  
  tree
*************** cp_stabilize_reference (tree ref)
*** 455,460 ****
--- 532,539 ----
        cp_lvalue_kind kind = lvalue_kind (ref);
        if ((kind & ~clk_class) != clk_none)
  	{
+ 	  if (kind & (clk_bitfield | clk_packed))
+ 	    return cp_stabilize_bitfield_reference (ref);
  	  tree type = unlowered_expr_type (ref);
  	  bool rval = !!(kind & clk_rvalueref);
  	  type = cp_build_reference_type (type, rval);
*************** cxx_printable_name_internal (tree decl,
*** 2717,2722 ****
--- 2796,2810 ----
        /* yes, so return it.  */
        return print_ring[i];
  
+   const char *ret = lang_decl_name (decl, v, translate);
+ 
+   /* The lang_decl_name call could have called this function recursively,
+      so check again.  */
+   for (i = 0; i < PRINT_RING_SIZE; i++)
+     if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
+       /* yes, so return it.  */
+       return print_ring[i];
+ 
    if (++ring_counter == PRINT_RING_SIZE)
      ring_counter = 0;
  
*************** cxx_printable_name_internal (tree decl,
*** 2736,2742 ****
  
    free (print_ring[ring_counter]);
  
!   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
    uid_ring[ring_counter] = DECL_UID (decl);
    trans_ring[ring_counter] = translate;
    return print_ring[ring_counter];
--- 2824,2830 ----
  
    free (print_ring[ring_counter]);
  
!   print_ring[ring_counter] = xstrdup (ret);
    uid_ring[ring_counter] = DECL_UID (decl);
    trans_ring[ring_counter] = translate;
    return print_ring[ring_counter];
diff -Nrcpad gcc-14.3.0/gcc/cp/typeck.cc gcc-14.3.0-RC-20260619/gcc/cp/typeck.cc
*** gcc-14.3.0/gcc/cp/typeck.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/typeck.cc	Fri Jun 19 06:51:02 2026
*************** cp_compare_floating_point_conversion_ran
*** 305,311 ****
  
    const struct real_format *fmt1 = REAL_MODE_FORMAT (TYPE_MODE (t1));
    const struct real_format *fmt2 = REAL_MODE_FORMAT (TYPE_MODE (t2));
!   gcc_assert (fmt1->b == 2 && fmt2->b == 2);
    /* For {ibm,mips}_extended_format formats, the type has variable
       precision up to ~2150 bits when the first double is around maximum
       representable double and second double is subnormal minimum.
--- 305,334 ----
  
    const struct real_format *fmt1 = REAL_MODE_FORMAT (TYPE_MODE (t1));
    const struct real_format *fmt2 = REAL_MODE_FORMAT (TYPE_MODE (t2));
!   /* Currently, extended floating point types are only binary, and
!      they never have a proper subset or superset of values with
!      decimal floating point types except for the _Float16 vs. _Decimal128
!      pair, so return 3 for unordered conversion ranks.  */
!   gcc_assert (fmt1->b == 2);
!   if (fmt2->b == 10)
!     {
!       /* _Float16 needs at most 21 decimal digits (e.g.
! 	 0x1.a3cp-14f16 is exactly 0.000100076198577880859375DL),
! 	 so it is not a proper subset of _Decimal64 but is subset
! 	 of _Decimal128.  While std::bfloat16_t needs at most 96
! 	 decimal digits, so even _Decimal128 doesn't cover it.
! 	 _Float32 has at least one value which needs 112 decimal
! 	 digits, _Float64 at least 767 decimal digits.  */
!       if (fmt1->emin == -13
! 	  && fmt1->emax == 16
! 	  && fmt1->p == 11
! 	  && fmt2->emin == -6142
! 	  && fmt2->emax == 6145
! 	  && fmt2->p == 34)
! 	return -2;
!       return 3;
!     }
!   gcc_assert (fmt2->b == 2);
    /* For {ibm,mips}_extended_format formats, the type has variable
       precision up to ~2150 bits when the first double is around maximum
       representable double and second double is subnormal minimum.
*************** cp_build_array_ref (location_t loc, tree
*** 3967,3979 ****
        }
  
      case COND_EXPR:
!       ret = build_conditional_expr
! 	       (loc, TREE_OPERAND (array, 0),
! 	       cp_build_array_ref (loc, TREE_OPERAND (array, 1), idx,
! 				   complain),
! 	       cp_build_array_ref (loc, TREE_OPERAND (array, 2), idx,
! 				   complain),
! 	       complain);
        protected_set_expr_location (ret, loc);
        return ret;
  
--- 3990,4118 ----
        }
  
      case COND_EXPR:
!       tree op0, op1, op2;
!       op0 = TREE_OPERAND (array, 0);
!       op1 = TREE_OPERAND (array, 1);
!       op2 = TREE_OPERAND (array, 2);
!       if (TREE_SIDE_EFFECTS (idx) || !tree_invariant_p (idx))
! 	{
! 	  /* If idx could possibly have some SAVE_EXPRs, turning
! 	     (op0 ? op1 : op2)[idx] into
! 	     op0 ? op1[idx] : op2[idx] can lead into temporaries
! 	     initialized in one conditional path and uninitialized
! 	     uses of them in the other path.
! 	     And if idx is a really large expression, evaluating it
! 	     twice is also not optimal.
! 	     On the other side, op0 must be sequenced before evaluation
! 	     of op1 and op2 and for C++17 op0, op1 and op2 must be
! 	     sequenced before idx.
! 	     If idx is INTEGER_CST, we can just do the optimization
! 	     without any SAVE_EXPRs, if op1 and op2 are both ARRAY_TYPE
! 	     VAR_DECLs or COMPONENT_REFs thereof (so their address
! 	     is constant or relative to frame), optimize into
! 	     (SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0>)
! 	     ? op1[SAVE_EXPR <idx>] : op2[SAVE_EXPR <idx>]
! 	     Otherwise avoid this optimization.  */
! 	  if (flag_strong_eval_order == 2)
! 	    {
! 	      if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
! 		{
! 		  tree xop1 = op1;
! 		  tree xop2 = op2;
! 		  while (xop1 && handled_component_p (xop1))
! 		    {
! 		      switch (TREE_CODE (xop1))
! 			{
! 			case ARRAY_REF:
! 			case ARRAY_RANGE_REF:
! 			  if (!tree_invariant_p (TREE_OPERAND (xop1, 1))
! 			      || TREE_OPERAND (xop1, 2) != NULL_TREE
! 			      || TREE_OPERAND (xop1, 3) != NULL_TREE)
! 			    {
! 			      xop1 = NULL_TREE;
! 			      continue;
! 			    }
! 			  break;
! 
! 			case COMPONENT_REF:
! 			  if (TREE_OPERAND (xop1, 2) != NULL_TREE)
! 			    {
! 			      xop1 = NULL_TREE;
! 			      continue;
! 			    }
! 			  break;
! 
! 			default:
! 			  break;
! 			}
! 		      xop1 = TREE_OPERAND (xop1, 0);
! 		    }
! 		  if (xop1)
! 		    STRIP_ANY_LOCATION_WRAPPER (xop1);
! 		  while (xop2 && handled_component_p (xop2))
! 		    {
! 		      switch (TREE_CODE (xop2))
! 			{
! 			case ARRAY_REF:
! 			case ARRAY_RANGE_REF:
! 			  if (!tree_invariant_p (TREE_OPERAND (xop2, 1))
! 			      || TREE_OPERAND (xop2, 2) != NULL_TREE
! 			      || TREE_OPERAND (xop2, 3) != NULL_TREE)
! 			    {
! 			      xop2 = NULL_TREE;
! 			      continue;
! 			    }
! 			  break;
! 
! 			case COMPONENT_REF:
! 			  if (TREE_OPERAND (xop2, 2) != NULL_TREE)
! 			    {
! 			      xop2 = NULL_TREE;
! 			      continue;
! 			    }
! 			  break;
! 
! 			default:
! 			  break;
! 			}
! 		      xop2 = TREE_OPERAND (xop2, 0);
! 		    }
! 		  if (xop2)
! 		    STRIP_ANY_LOCATION_WRAPPER (xop2);
! 
! 		  if (!xop1
! 		      || !xop2
! 		      || !(CONSTANT_CLASS_P (xop1)
! 			   || decl_address_invariant_p (xop1))
! 		      || !(CONSTANT_CLASS_P (xop2)
! 			   || decl_address_invariant_p (xop2)))
! 		    {
! 		      /* Force default conversion on array if
! 			 we can't optimize this and array is ARRAY_TYPE
! 			 COND_EXPR, we can't leave COND_EXPRs with
! 			 ARRAY_TYPE in the IL.  */
! 		      array = cp_default_conversion (array, complain);
! 		      if (error_operand_p (array))
! 			return error_mark_node;
! 		      break;
! 		    }
! 		}
! 	      else if (!POINTER_TYPE_P (TREE_TYPE (array))
! 		       || !tree_invariant_p (op1)
! 		       || !tree_invariant_p (op2))
! 		break;
! 	    }
! 	  if (TREE_SIDE_EFFECTS (idx))
! 	    {
! 	      idx = save_expr (idx);
! 	      op0 = save_expr (op0);
! 	      tree tem = build_compound_expr (loc, op0, idx);
! 	      op0 = build_compound_expr (loc, tem, op0);
! 	    }
! 	}
!       op1 = cp_build_array_ref (loc, op1, idx, complain);
!       op2 = cp_build_array_ref (loc, op2, idx, complain);
!       ret = build_conditional_expr (loc, op0, op1, op2, complain);
        protected_set_expr_location (ret, loc);
        return ret;
  
*************** cxx_mark_addressable (tree exp, bool arr
*** 7937,7942 ****
--- 8076,8085 ----
  		    || DECL_IN_AGGR_P (x) == 0
  		    || TREE_STATIC (x)
  		    || DECL_EXTERNAL (x));
+ 	if (VAR_P (x)
+ 	    && DECL_ANON_UNION_VAR_P (x)
+ 	    && !TREE_ADDRESSABLE (x))
+ 	  cxx_mark_addressable (DECL_VALUE_EXPR (x));
  	/* Fall through.  */
  
        case RESULT_DECL:
diff -Nrcpad gcc-14.3.0/gcc/cp/typeck2.cc gcc-14.3.0-RC-20260619/gcc/cp/typeck2.cc
*** gcc-14.3.0/gcc/cp/typeck2.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cp/typeck2.cc	Fri Jun 19 06:51:02 2026
*************** build_functional_cast_1 (location_t loc,
*** 2469,2477 ****
  	      return error_mark_node;
  	    }
  	  else if (cxx_dialect < cxx23)
! 	    pedwarn (loc, OPT_Wc__23_extensions,
! 		     "%<auto(x)%> only available with "
! 		     "%<-std=c++2b%> or %<-std=gnu++2b%>");
  	}
        else
  	{
--- 2469,2480 ----
  	      return error_mark_node;
  	    }
  	  else if (cxx_dialect < cxx23)
! 	    {
! 	      if ((complain & tf_warning_or_error) != 0)
! 		pedwarn (loc, OPT_Wc__23_extensions,
! 			 "%<auto(x)%> only available with "
! 			 "%<-std=c++2b%> or %<-std=gnu++2b%>");
! 	    }
  	}
        else
  	{
diff -Nrcpad gcc-14.3.0/gcc/cselib.cc gcc-14.3.0-RC-20260619/gcc/cselib.cc
*** gcc-14.3.0/gcc/cselib.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/cselib.cc	Fri Jun 19 06:51:02 2026
*************** along with GCC; see the file COPYING3.
*** 33,38 ****
--- 33,39 ----
  #include "cselib.h"
  #include "function-abi.h"
  #include "alias.h"
+ #include "predict.h"
  
  /* A list of cselib_val structures.  */
  struct elt_list
*************** static unsigned int *used_regs;
*** 248,255 ****
  static unsigned int n_used_regs;
  
  /* We pass this to cselib_invalidate_mem to invalidate all of
!    memory for a non-const call instruction.  */
! static GTY(()) rtx callmem;
  
  /* Set by discard_useless_locs if it deleted the last location of any
     value.  */
--- 249,257 ----
  static unsigned int n_used_regs;
  
  /* We pass this to cselib_invalidate_mem to invalidate all of
!    memory for a non-const call instruction and memory below stack pointer
!    for const/pure calls.  */
! static GTY(()) rtx callmem[2];
  
  /* Set by discard_useless_locs if it deleted the last location of any
     value.  */
*************** cselib_preserve_only_values (void)
*** 808,814 ****
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
      cselib_invalidate_regno (i, reg_raw_mode[i]);
  
!   cselib_invalidate_mem (callmem);
  
    remove_useless_values ();
  
--- 810,816 ----
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
      cselib_invalidate_regno (i, reg_raw_mode[i]);
  
!   cselib_invalidate_mem (callmem[0]);
  
    remove_useless_values ();
  
*************** cselib_invalidate_mem (rtx mem_rtx)
*** 2600,2605 ****
--- 2602,2609 ----
        struct elt_loc_list **p = &v->locs;
        bool had_locs = v->locs != NULL;
        rtx_insn *setting_insn = v->locs ? v->locs->setting_insn : NULL;
+       rtx sp_base = NULL_RTX;
+       HOST_WIDE_INT sp_off = 0;
  
        while (*p)
  	{
*************** cselib_invalidate_mem (rtx mem_rtx)
*** 2614,2619 ****
--- 2618,2731 ----
  	      p = &(*p)->next;
  	      continue;
  	    }
+ 
+ 	  /* When invalidating memory below the stack pointer for const/pure
+ 	     calls and alloca/VLAs aren't used, attempt to optimize.  Values
+ 	     stored into area sometimes below the stack pointer shouldn't be
+ 	     addressable and should be stored just through stack pointer
+ 	     derived expressions, so don't invalidate MEMs not using stack
+ 	     derived addresses, or if the MEMs clearly aren't below the stack
+ 	     pointer.  This isn't a fully conservative approach, the hope is
+ 	     that invalidating more MEMs than this isn't actually needed.  */
+ 	  if (mem_rtx == callmem[1]
+ 	      && num_mems < param_max_cselib_memory_locations
+ 	      && GET_CODE (XEXP (x, 0)) == VALUE
+ 	      && !cfun->calls_alloca)
+ 	    {
+ 	      cselib_val *v2 = CSELIB_VAL_PTR (XEXP (x, 0));
+ 	      rtx x_base = NULL_RTX;
+ 	      HOST_WIDE_INT x_off = 0;
+ 	      if (SP_DERIVED_VALUE_P (v2->val_rtx))
+ 		x_base = v2->val_rtx;
+ 	      else
+ 		for (struct elt_loc_list *l = v2->locs; l; l = l->next)
+ 		  if (GET_CODE (l->loc) == PLUS
+ 		      && GET_CODE (XEXP (l->loc, 0)) == VALUE
+ 		      && SP_DERIVED_VALUE_P (XEXP (l->loc, 0))
+ 		      && CONST_INT_P (XEXP (l->loc, 1)))
+ 		    {
+ 		      x_base = XEXP (l->loc, 0);
+ 		      x_off = INTVAL (XEXP (l->loc, 1));
+ 		      break;
+ 		    }
+ 	      /* If x_base is NULL here, don't invalidate x as its address
+ 		 isn't derived from sp such that it could be in outgoing
+ 		 argument area of some call in !ACCUMULATE_OUTGOING_ARGS
+ 		 function.  */
+ 	      if (x_base)
+ 		{
+ 		  if (sp_base == NULL_RTX)
+ 		    {
+ 		      if (cselib_val *v3
+ 			  = cselib_lookup_1 (stack_pointer_rtx, Pmode, 0,
+ 					     VOIDmode))
+ 			{
+ 			  if (SP_DERIVED_VALUE_P (v3->val_rtx))
+ 			    sp_base = v3->val_rtx;
+ 			  else
+ 			    for (struct elt_loc_list *l = v3->locs;
+ 				 l; l = l->next)
+ 			      if (GET_CODE (l->loc) == PLUS
+ 				  && GET_CODE (XEXP (l->loc, 0)) == VALUE
+ 				  && SP_DERIVED_VALUE_P (XEXP (l->loc, 0))
+ 				  && CONST_INT_P (XEXP (l->loc, 1)))
+ 				{
+ 				  sp_base = XEXP (l->loc, 0);
+ 				  sp_off = INTVAL (XEXP (l->loc, 1));
+ 				  break;
+ 				}
+ 			}
+ 		      if (sp_base == NULL_RTX)
+ 			sp_base = pc_rtx;
+ 		    }
+ 		  /* Otherwise, if x_base and sp_base are the same,
+ 		     we know that x_base + x_off is the x's address and
+ 		     sp_base + sp_off is current value of stack pointer,
+ 		     so try to determine if x is certainly not below stack
+ 		     pointer.  */
+ 		  if (sp_base == x_base)
+ 		    {
+ 		      if (STACK_GROWS_DOWNWARD)
+ 			{
+ 			  HOST_WIDE_INT off = sp_off;
+ #ifdef STACK_ADDRESS_OFFSET
+ 			  /* On SPARC take stack pointer bias into account as
+ 			     well.  */
+ 			  off += (STACK_ADDRESS_OFFSET
+ 				  - FIRST_PARM_OFFSET (current_function_decl));
+ #endif
+ 			  if (x_off >= off)
+ 			    /* x is at or above the current stack pointer,
+ 			       no need to invalidate it.  */
+ 			    x_base = NULL_RTX;
+ 			}
+ 		      else
+ 			{
+ 			  HOST_WIDE_INT sz;
+ 			  enum machine_mode mode = GET_MODE (x);
+ 			  if ((MEM_SIZE_KNOWN_P (x)
+ 			       && MEM_SIZE (x).is_constant (&sz))
+ 			      || (mode != BLKmode
+ 				  && GET_MODE_SIZE (mode).is_constant (&sz)))
+ 			    if (x_off < sp_off
+ 				&& ((HOST_WIDE_INT) ((unsigned HOST_WIDE_INT)
+ 						     x_off + sz) <= sp_off))
+ 			      /* x's end is below or at the current stack
+ 				 pointer in !STACK_GROWS_DOWNWARD target,
+ 				 no need to invalidate it.  */
+ 			      x_base = NULL_RTX;
+ 			 }
+ 		    }
+ 		}
+ 	      if (x_base == NULL_RTX)
+ 		{
+ 		  has_mem = true;
+ 		  num_mems++;
+ 		  p = &(*p)->next;
+ 		  continue;
+ 		}
+ 	    }
+ 
  	  if (num_mems < param_max_cselib_memory_locations
  	      && ! canon_anti_dependence (x, false, mem_rtx,
  					  GET_MODE (mem_rtx), mem_addr))
*************** cselib_process_insn (rtx_insn *insn)
*** 3166,3179 ****
  	 as if they were regular functions.  */
        if (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
  	  || !(RTL_CONST_OR_PURE_CALL_P (insn)))
! 	cselib_invalidate_mem (callmem);
        else
! 	/* For const/pure calls, invalidate any argument slots because
! 	   they are owned by the callee.  */
! 	for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
! 	  if (GET_CODE (XEXP (x, 0)) == USE
! 	      && MEM_P (XEXP (XEXP (x, 0), 0)))
! 	    cselib_invalidate_mem (XEXP (XEXP (x, 0), 0));
      }
  
    cselib_record_sets (insn);
--- 3278,3301 ----
  	 as if they were regular functions.  */
        if (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
  	  || !(RTL_CONST_OR_PURE_CALL_P (insn)))
! 	cselib_invalidate_mem (callmem[0]);
        else
! 	{
! 	  /* For const/pure calls, invalidate any argument slots because
! 	     they are owned by the callee.  */
! 	  for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
! 	    if (GET_CODE (XEXP (x, 0)) == USE
! 		&& MEM_P (XEXP (XEXP (x, 0), 0)))
! 	      cselib_invalidate_mem (XEXP (XEXP (x, 0), 0));
! 	  /* And invalidate memory below the stack (or above for
! 	     !STACK_GROWS_DOWNWARD), as even const/pure call can invalidate
! 	     that.  Do this only if !ACCUMULATE_OUTGOING_ARGS or if
! 	     cfun->calls_alloca, otherwise the stack pointer shouldn't be
! 	     changing in the middle of the function and nothing should be
! 	     stored below the stack pointer.  */
! 	  if (!ACCUMULATE_OUTGOING_ARGS || cfun->calls_alloca)
! 	    cselib_invalidate_mem (callmem[1]);
! 	}
      }
  
    cselib_record_sets (insn);
*************** cselib_init (int record_what)
*** 3226,3233 ****
  
    /* (mem:BLK (scratch)) is a special mechanism to conflict with everything,
       see canon_true_dependence.  This is only created once.  */
!   if (! callmem)
!     callmem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
  
    cselib_nregs = max_reg_num ();
  
--- 3348,3378 ----
  
    /* (mem:BLK (scratch)) is a special mechanism to conflict with everything,
       see canon_true_dependence.  This is only created once.  */
!   if (! callmem[0])
!     callmem[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
!   /* Similarly create a MEM representing roughly everything below
!      the stack for STACK_GROWS_DOWNWARD targets or everything above
!      it otherwise.  Do this only when !ACCUMULATE_OUTGOING_ARGS or
!      if cfun->calls_alloca, otherwise the stack pointer shouldn't be
!      changing in the middle of the function and nothing should be stored
!      below the stack pointer.  */
!   if (!callmem[1] && (!ACCUMULATE_OUTGOING_ARGS || cfun->calls_alloca))
!     {
!       if (STACK_GROWS_DOWNWARD)
! 	{
! 	  unsigned HOST_WIDE_INT off = -(GET_MODE_MASK (Pmode) >> 1);
! #ifdef STACK_ADDRESS_OFFSET
! 	  /* On SPARC take stack pointer bias into account as well.  */
! 	  off += (STACK_ADDRESS_OFFSET
! 		  - FIRST_PARM_OFFSET (current_function_decl));
! #endif
! 	  callmem[1] = plus_constant (Pmode, stack_pointer_rtx, off);
! 	}
!       else
! 	callmem[1] = stack_pointer_rtx;
!       callmem[1] = gen_rtx_MEM (BLKmode, callmem[1]);
!       set_mem_size (callmem[1], GET_MODE_MASK (Pmode) >> 1);
!     }
  
    cselib_nregs = max_reg_num ();
  
diff -Nrcpad gcc-14.3.0/gcc/d/ChangeLog gcc-14.3.0-RC-20260619/gcc/d/ChangeLog
*** gcc-14.3.0/gcc/d/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/d/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,121 ----
+ 2026-05-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-05-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/125089
+ 	* types.cc (finish_aggregate_mode): Explicitly set TYPE_MODE of
+ 	non-POD types here.
+ 	(finish_aggregate_type): Propagate TREE_ADDRESSABLE to all variants.
+ 	(TypeVisitor::visit (TypeStruct *)): Set TREE_ADDRESSABLE before
+ 	visiting struct members.
+ 
+ 2026-02-08  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-02-08  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/124026
+ 	* expr.cc (ExprVisitor::visit (FuncExp *)): Always convert function
+ 	literal to a delegate if the expression expects one.
+ 
+ 2026-01-30  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-30  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123264
+ 	* types.cc (finish_aggregate_type): Propagate struct TYPE_NAME to all
+ 	TYPE_NEXT_VARIANT types.
+ 
+ 2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123407
+ 	* decl.cc (get_symbol_decl): Handle declarations with matching
+ 	assembler names, but different TREE_CODE.
+ 
+ 2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123046
+ 	* d-codegen.cc (build_address): Return `null' when generating the
+ 	address of a `noreturn' declaration.
+ 	(d_build_call): Compare TYPE_MAIN_VARIANT of type with `noreturn'.
+ 	* decl.cc (get_fndecl_arguments): Likewise.
+ 	* types.cc (finish_aggregate_mode): Likewise.
+ 	(TypeVisitor::visit (TypeFunction *)): Likewise.
+ 
+ 2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123349
+ 	* d-spec.cc (lang_specific_driver): Use xstrdup to copy -defaultlib
+ 	and -debuglib argument, and unconditionally free the old value.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119799
+ 	* decl.cc (DeclVisitor::visit (VarDeclaration *)): Check front-end
+ 	type size before building the VAR_DECL.  Allow C symbols to have a
+ 	size of `0'.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123419
+ 	* expr.cc (ExprVisitor::visit (VarExp *)): Adjust assertion.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123798
+ 	* types.cc (insert_aggregate_bitfield): Set DECL_NONADDRESSABLE_P and
+ 	DECL_PADDING_P on bit-field decls.
+ 	(finish_aggregate_type): Pass the aligned bit offset to layout_decl.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/121477
+ 	* d-codegen.cc (d_mark_addressable): Give an error if taking the
+ 	address of a DECL_BIT_FIELD.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123422
+ 	* expr.cc (ExprVisitor::visit (ArrayLiteralExp *)): Don't add
+ 	TARGET_EXPR around constructor.
+ 	* toir.cc (IRVisitor::visit (ReturnStatement *)): Recognize more
+ 	patterns for return value optimization.
+ 
+ 2026-01-27  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-27  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/120096
+ 	* expr.cc (ExprVisitor::visit (ArrayLiteralExp *)): Include saved side
+ 	effects in expression result.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/d/d-codegen.cc gcc-14.3.0-RC-20260619/gcc/d/d-codegen.cc
*** gcc-14.3.0/gcc/d/d-codegen.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/d/d-codegen.cc	Fri Jun 19 06:51:02 2026
*************** build_address (tree exp)
*** 665,670 ****
--- 665,675 ----
    if (TREE_CODE (exp) == CONST_DECL)
      exp = DECL_INITIAL (exp);
  
+   /* Type `noreturn' has no storage, return `null' for the expression.  */
+   if (DECL_P (exp) && TREE_CODE (exp) != FIELD_DECL
+       && TYPE_MAIN_VARIANT (TREE_TYPE (exp)) == noreturn_type_node)
+     return compound_expr (init, null_pointer_node);
+ 
    /* Some expression lowering may request an address of a compile-time constant,
       or other non-lvalue expression.  Make sure it is assigned to a location we
       can reference.  */
*************** d_mark_addressable (tree exp, bool compl
*** 704,711 ****
  {
    switch (TREE_CODE (exp))
      {
-     case ADDR_EXPR:
      case COMPONENT_REF:
      case ARRAY_REF:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
--- 709,720 ----
  {
    switch (TREE_CODE (exp))
      {
      case COMPONENT_REF:
+       if (complain && DECL_BIT_FIELD (TREE_OPERAND (exp, 1)))
+ 	error ("cannot take address of bit-field %qD", TREE_OPERAND (exp, 1));
+ 
+       /* Fall through.  */
+     case ADDR_EXPR:
      case ARRAY_REF:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
*************** d_build_call (TypeFunction *tf, tree cal
*** 2298,2304 ****
  
  	  /* Type `noreturn` is a terminator, as no other arguments can possibly
  	     be evaluated after it.  */
! 	  if (TREE_TYPE (targ) == noreturn_type_node)
  	    noreturn_call = true;
  
  	  vec_safe_push (args, targ);
--- 2307,2313 ----
  
  	  /* Type `noreturn` is a terminator, as no other arguments can possibly
  	     be evaluated after it.  */
! 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (targ)) == noreturn_type_node)
  	    noreturn_call = true;
  
  	  vec_safe_push (args, targ);
*************** d_build_call (TypeFunction *tf, tree cal
*** 2318,2324 ****
        unsigned int ix;
  
        FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
! 	saved_args = compound_expr (saved_args, arg);
  
        /* Add a stub result type for the expression.  */
        tree result = build_zero_cst (TREE_TYPE (ctype));
--- 2327,2338 ----
        unsigned int ix;
  
        FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
! 	{
! 	  saved_args = compound_expr (saved_args, arg);
! 
! 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (arg)) == noreturn_type_node)
! 	    break;
! 	}
  
        /* Add a stub result type for the expression.  */
        tree result = build_zero_cst (TREE_TYPE (ctype));
diff -Nrcpad gcc-14.3.0/gcc/d/d-spec.cc gcc-14.3.0-RC-20260619/gcc/d/d-spec.cc
*** gcc-14.3.0/gcc/d/d-spec.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/d/d-spec.cc	Fri Jun 19 06:51:02 2026
*************** lang_specific_driver (cl_decoded_option
*** 162,185 ****
  	  break;
  
  	case OPT_defaultlib_:
! 	  if (defaultlib != NULL)
! 	    free (CONST_CAST (char *, defaultlib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
! 	      defaultlib = XNEWVEC (char, strlen (arg));
! 	      strcpy (CONST_CAST (char *, defaultlib), arg);
  	    }
  	  break;
  
  	case OPT_debuglib_:
! 	  if (debuglib != NULL)
! 	    free (CONST_CAST (char *, debuglib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
! 	      debuglib = XNEWVEC (char, strlen (arg));
! 	      strcpy (CONST_CAST (char *, debuglib), arg);
  	    }
  	  break;
  
--- 162,181 ----
  	  break;
  
  	case OPT_defaultlib_:
! 	  free (CONST_CAST (char *, defaultlib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
! 	      defaultlib = xstrdup (arg);
  	    }
  	  break;
  
  	case OPT_debuglib_:
! 	  free (CONST_CAST (char *, debuglib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
! 	      debuglib = xstrdup (arg);
  	    }
  	  break;
  
diff -Nrcpad gcc-14.3.0/gcc/d/decl.cc gcc-14.3.0-RC-20260619/gcc/d/decl.cc
*** gcc-14.3.0/gcc/d/decl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/d/decl.cc	Fri Jun 19 06:51:02 2026
*************** get_fndecl_arguments (FuncDeclaration *d
*** 183,189 ****
  
  	  /* Type `noreturn` is a terminator, as no other arguments can possibly
  	     be evaluated after it.  */
! 	  if (TREE_TYPE (parm_decl) == noreturn_type_node)
  	    break;
  
  	  /* Chain them in the correct order.  */
--- 183,189 ----
  
  	  /* Type `noreturn` is a terminator, as no other arguments can possibly
  	     be evaluated after it.  */
! 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (parm_decl)) == noreturn_type_node)
  	    break;
  
  	  /* Chain them in the correct order.  */
*************** public:
*** 792,797 ****
--- 792,803 ----
        }
      else if (d->isDataseg ())
        {
+ 	/* When the front-end type size is invalid, an error has already been
+ 	   given for the declaration or type.  */
+ 	dinteger_t size = d->type->size (d->loc);
+ 	if (size == SIZE_INVALID)
+ 	  return;
+ 
  	tree decl = get_symbol_decl (d);
  
  	/* Only need to build the VAR_DECL for extern declarations.  */
*************** public:
*** 805,813 ****
  	  return;
  
  	/* How big a symbol can be should depend on back-end.  */
! 	tree size = build_integer_cst (d->type->size (d->loc),
! 				       build_ctype (Type::tsize_t));
! 	if (!valid_constant_size_p (size))
  	  {
  	    error_at (make_location_t (d->loc), "size is too large");
  	    return;
--- 811,817 ----
  	  return;
  
  	/* How big a symbol can be should depend on back-end.  */
! 	if (!valid_constant_size_p (build_integer_cst (size, size_type_node)))
  	  {
  	    error_at (make_location_t (d->loc), "size is too large");
  	    return;
*************** public:
*** 836,843 ****
  	  }
  
  	/* Frontend should have already caught this.  */
! 	gcc_assert (!integer_zerop (size)
! 		    || d->type->toBasetype ()->isTypeSArray ());
  
  	d_finish_decl (decl);
  
--- 840,848 ----
  	  }
  
  	/* Frontend should have already caught this.  */
! 	gcc_assert ((size != 0 && size != SIZE_INVALID)
! 		    || d->type->toBasetype ()->isTypeSArray ()
! 		    || d->isCsymbol ());
  
  	d_finish_decl (decl);
  
*************** get_symbol_decl (Declaration *decl)
*** 1209,1216 ****
  
    /* Deal with placeholder symbols immediately:
       SymbolDeclaration is used as a shell around an initializer symbol.  */
!   SymbolDeclaration *sd = decl->isSymbolDeclaration ();
!   if (sd)
      {
        decl->csym = aggregate_initializer_decl (sd->dsym);
        return decl->csym;
--- 1214,1220 ----
  
    /* Deal with placeholder symbols immediately:
       SymbolDeclaration is used as a shell around an initializer symbol.  */
!   if (SymbolDeclaration *sd = decl->isSymbolDeclaration ())
      {
        decl->csym = aggregate_initializer_decl (sd->dsym);
        return decl->csym;
*************** get_symbol_decl (Declaration *decl)
*** 1221,1228 ****
      return get_typeinfo_decl ((TypeInfoDeclaration *) decl);
  
    /* FuncAliasDeclaration is used to import functions from another scope.  */
!   FuncAliasDeclaration *fad = decl->isFuncAliasDeclaration ();
!   if (fad)
      {
        decl->csym = get_symbol_decl (fad->funcalias);
        return decl->csym;
--- 1225,1231 ----
      return get_typeinfo_decl ((TypeInfoDeclaration *) decl);
  
    /* FuncAliasDeclaration is used to import functions from another scope.  */
!   if (FuncAliasDeclaration *fad = decl->isFuncAliasDeclaration ())
      {
        decl->csym = get_symbol_decl (fad->funcalias);
        return decl->csym;
*************** get_symbol_decl (Declaration *decl)
*** 1257,1264 ****
      }
  
    /* Build the tree for the symbol.  */
!   FuncDeclaration *fd = decl->isFuncDeclaration ();
!   if (fd)
      {
        /* Run full semantic on functions we need to know about.  */
        if (!dmd::functionSemantic (fd))
--- 1260,1266 ----
      }
  
    /* Build the tree for the symbol.  */
!   if (FuncDeclaration *fd = decl->isFuncDeclaration ())
      {
        /* Run full semantic on functions we need to know about.  */
        if (!dmd::functionSemantic (fd))
*************** get_symbol_decl (Declaration *decl)
*** 1350,1378 ****
        if (IDENTIFIER_DSYMBOL (mangled_name))
  	{
  	  Declaration *other = IDENTIFIER_DSYMBOL (mangled_name);
! 	  tree olddecl = decl->csym;
! 	  decl->csym = get_symbol_decl (other);
! 
! 	  /* Update the symbol location to the current definition.  */
! 	  if (DECL_EXTERNAL (decl->csym) && !DECL_INITIAL (decl->csym))
! 	    DECL_SOURCE_LOCATION (decl->csym) = DECL_SOURCE_LOCATION (olddecl);
  
! 	  /* The current declaration is a prototype or marked extern, merge
! 	     applied user attributes and return.  */
! 	  if (DECL_EXTERNAL (olddecl) && !DECL_INITIAL (olddecl))
! 	    {
! 	      apply_user_attributes (decl, decl->csym);
! 	      return decl->csym;
! 	    }
! 	  /* The previous declaration is a prototype or marked extern, set the
! 	     current declaration as the main reference of the symbol.  */
! 	  else if (DECL_EXTERNAL (decl->csym) && !DECL_INITIAL (decl->csym))
  	    {
! 	      IDENTIFIER_DSYMBOL (mangled_name) = decl;
! 	      DECL_EXTERNAL (decl->csym) = 0;
  	    }
! 	  /* Non-extern, non-templated decls shouldn't be defined twice.  */
! 	  else if (!decl->isInstantiated ())
  	    ScopeDsymbol::multiplyDefined (decl->loc, decl, other);
  	}
        else
--- 1352,1389 ----
        if (IDENTIFIER_DSYMBOL (mangled_name))
  	{
  	  Declaration *other = IDENTIFIER_DSYMBOL (mangled_name);
! 	  tree newdecl = decl->csym;
! 	  tree olddecl = get_symbol_decl (other);
  
! 	  if (TREE_CODE (olddecl) == TREE_CODE (newdecl))
  	    {
! 	      /* Update the symbol location to the current definition.  */
! 	      if (DECL_EXTERNAL (olddecl) && !DECL_INITIAL (olddecl))
! 		DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
! 
! 	      /* The current declaration is a prototype or marked extern, merge
! 		 applied user attributes and return.  */
! 	      if (DECL_EXTERNAL (newdecl) && !DECL_INITIAL (newdecl))
! 		{
! 		  apply_user_attributes (decl, olddecl);
! 		  decl->csym = olddecl;
! 		  return decl->csym;
! 		}
! 	      /* The previous declaration is a prototype or marked extern, set
! 		 the current declaration as the main reference of the symbol.
! 	       */
! 	      else if (DECL_EXTERNAL (olddecl) && !DECL_INITIAL (olddecl))
! 		{
! 		  IDENTIFIER_DSYMBOL (mangled_name) = decl;
! 		  decl->csym = olddecl;
! 		  DECL_EXTERNAL (decl->csym) = 0;
! 		}
! 	      /* Non-extern, non-templated decls shouldn't be defined twice.  */
! 	      else if (!decl->isInstantiated ())
! 		ScopeDsymbol::multiplyDefined (decl->loc, decl, other);
  	    }
! 	  /* Declarations are for conflicting kinds of symbol.  */
! 	  else
  	    ScopeDsymbol::multiplyDefined (decl->loc, decl, other);
  	}
        else
*************** get_symbol_decl (Declaration *decl)
*** 1414,1419 ****
--- 1425,1433 ----
      }
    else if (TREE_CODE (decl->csym) == FUNCTION_DECL)
      {
+       FuncDeclaration *fd = decl->isFuncDeclaration ();
+       gcc_assert (fd != NULL);
+ 
        /* Dual-context functions require the code generation to build an array
  	 for the context pointer of the function, making the delicate task of
  	 tracking which context to follow when encountering a non-local symbol,
*************** get_symbol_decl (Declaration *decl)
*** 1567,1572 ****
--- 1581,1587 ----
    if (decl->isDataseg () || decl->isCodeseg () || decl->isThreadlocal ())
      {
        /* Set TREE_PUBLIC by default, but allow private template to override.  */
+       FuncDeclaration *fd = decl->isFuncDeclaration ();
        if (!fd || !fd->isNested ())
  	TREE_PUBLIC (decl->csym) = 1;
  
diff -Nrcpad gcc-14.3.0/gcc/d/expr.cc gcc-14.3.0-RC-20260619/gcc/d/expr.cc
*** gcc-14.3.0/gcc/d/expr.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/d/expr.cc	Fri Jun 19 06:51:02 2026
*************** public:
*** 2032,2058 ****
      /* Compile the declaration.  */
      build_lambda_tree (e->fd, e->type->toBasetype ());
  
!     /* If nested, this will be a trampoline.  */
!     if (e->fd->isNested ())
!       {
! 	tree func = build_address (get_symbol_decl (e->fd));
! 	tree object;
  
! 	if (this->constp_)
  	  {
! 	    /* Static delegate variables have no context pointer.  */
! 	    object = null_pointer_node;
! 	    this->result_ = build_method_call (func, object, e->fd->type);
  	    TREE_CONSTANT (this->result_) = 1;
  	  }
  	else
  	  {
! 	    object = get_frame_for_symbol (e->fd);
  	    this->result_ = build_method_call (func, object, e->fd->type);
  	  }
        }
      else
        {
  	this->result_ = build_nop (build_ctype (e->type),
  				   build_address (get_symbol_decl (e->fd)));
        }
--- 2032,2062 ----
      /* Compile the declaration.  */
      build_lambda_tree (e->fd, e->type->toBasetype ());
  
!     tree func = build_address (get_symbol_decl (e->fd));
!     Type *tb = e->type->toBasetype ();
  
!     /* If a delegate is expected, the literal will be inferred as a delegate
!        even if it accesses no variables from an enclosing function.  */
!     if (tb->ty == TY::Tdelegate)
!       {
! 	/* Static delegate variables have no context pointer.  */
! 	if (this->constp_ || !e->fd->isNested ())
  	  {
! 	    this->result_ = build_method_call (func, null_pointer_node,
! 					       e->fd->type);
  	    TREE_CONSTANT (this->result_) = 1;
  	  }
  	else
  	  {
! 	    gcc_assert (e->fd->isNested ());
! 	    tree object = get_frame_for_symbol (e->fd);
  	    this->result_ = build_method_call (func, object, e->fd->type);
  	  }
        }
      else
        {
+ 	/* The function literal is a function pointer.  */
+ 	gcc_assert (tb->ty == TY::Tpointer);
  	this->result_ = build_nop (build_ctype (e->type),
  				   build_address (get_symbol_decl (e->fd)));
        }
*************** public:
*** 2172,2178 ****
  	      {
  		/* Generate a slice for non-zero initialized aggregates,
  		   otherwise create an empty array.  */
! 		gcc_assert (e->type->isConst ()
  			    && e->type->nextOf ()->ty == TY::Tvoid);
  
  		tree type = build_ctype (e->type);
--- 2176,2182 ----
  	      {
  		/* Generate a slice for non-zero initialized aggregates,
  		   otherwise create an empty array.  */
! 		gcc_assert (e->type->nextOf ()->isConst ()
  			    && e->type->nextOf ()->ty == TY::Tvoid);
  
  		tree type = build_ctype (e->type);
*************** public:
*** 2680,2687 ****
  	/* Array literal for a `scope' dynamic array.  */
  	gcc_assert (tb->ty == TY::Tarray);
  	ctor = force_target_expr (ctor);
! 	this->result_ = d_array_value (type, size_int (e->elements->length),
! 				       build_address (ctor));
        }
      else
        {
--- 2684,2692 ----
  	/* Array literal for a `scope' dynamic array.  */
  	gcc_assert (tb->ty == TY::Tarray);
  	ctor = force_target_expr (ctor);
! 	ctor = d_array_value (type, size_int (e->elements->length),
! 			      build_address (ctor));
! 	this->result_ = compound_expr (saved_elems, ctor);
        }
      else
        {
diff -Nrcpad gcc-14.3.0/gcc/d/toir.cc gcc-14.3.0-RC-20260619/gcc/d/toir.cc
*** gcc-14.3.0/gcc/d/toir.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/d/toir.cc	Fri Jun 19 06:51:02 2026
*************** public:
*** 1022,1062 ****
  	/* Detect a call to a constructor function, or if returning a struct
  	   literal, write result directly into the return value.  */
  	StructLiteralExp *sle = NULL;
  	bool using_rvo_p = false;
  
  	if (DotVarExp *dve = (s->exp->isCallExp ()
  			      ? s->exp->isCallExp ()->e1->isDotVarExp ()
  			      : NULL))
  	  {
  	    if (dve->var->isCtorDeclaration ())
  	      {
  		if (CommaExp *ce = dve->e1->isCommaExp ())
  		  {
! 		    /* Temporary initialized inside a return expression, and
! 		       used as the return value.  Replace it with the hidden
! 			reference to allow RVO return.  */
! 		    DeclarationExp *de = ce->e1->isDeclarationExp ();
! 		    VarExp *ve = ce->e2->isVarExp ();
! 		    if (de != NULL && ve != NULL
! 			&& ve->var == de->declaration
! 			&& ve->var->storage_class & STCtemp)
! 		      {
! 			tree var = get_symbol_decl (ve->var);
! 			TREE_ADDRESSABLE (var) = 1;
! 			SET_DECL_VALUE_EXPR (var, decl);
! 			DECL_HAS_VALUE_EXPR_P (var) = 1;
! 			SET_DECL_LANG_NRVO (var, this->func_->shidden);
! 			using_rvo_p = true;
! 		      }
  		  }
  		else
  		  sle = dve->e1->isStructLiteralExp ();
  	      }
  	  }
  	else
  	  sle = s->exp->isStructLiteralExp ();
  
! 	if (sle != NULL)
  	  {
  	    StructDeclaration *sd = type->baseElemOf ()->isTypeStruct ()->sym;
  	    sle->sym = build_address (this->func_->shidden);
--- 1022,1085 ----
  	/* Detect a call to a constructor function, or if returning a struct
  	   literal, write result directly into the return value.  */
  	StructLiteralExp *sle = NULL;
+ 	DeclarationExp *de = NULL;
+ 	VarExp *ve = NULL;
  	bool using_rvo_p = false;
  
  	if (DotVarExp *dve = (s->exp->isCallExp ()
  			      ? s->exp->isCallExp ()->e1->isDotVarExp ()
  			      : NULL))
  	  {
+ 	    /* Look for `var.__ctor(copytmp = {}, &copytmp)'  */
  	    if (dve->var->isCtorDeclaration ())
  	      {
  		if (CommaExp *ce = dve->e1->isCommaExp ())
  		  {
! 		    de = ce->e1->isDeclarationExp ();
! 		    ve = ce->e2->isVarExp ();
  		  }
  		else
  		  sle = dve->e1->isStructLiteralExp ();
  	      }
  	  }
+ 	else if (CommaExp *ce1 = s->exp->isCommaExp ())
+ 	  {
+ 	    /* Look for `copytmp = {}, copytmp.__ctor(), copytmp'  */
+ 	    if (CommaExp *ce2 = ce1->e2->isCommaExp ())
+ 	      {
+ 		DotVarExp *dve = ce2->e1->isCallExp ()
+ 		  ? ce2->e1->isCallExp ()->e1->isDotVarExp () : NULL;
+ 
+ 		if (dve && dve->var->isCtorDeclaration ())
+ 		  {
+ 		    de = ce1->e1->isDeclarationExp ();
+ 		    ve = ce2->e2->isVarExp ();
+ 		  }
+ 	      }
+ 	    else
+ 	      {
+ 		de = ce1->e1->isDeclarationExp ();
+ 		ve = ce1->e2->isVarExp ();
+ 	      }
+ 	  }
  	else
  	  sle = s->exp->isStructLiteralExp ();
  
! 	if (de != NULL && ve != NULL
! 	    && ve->var == de->declaration
! 	    && ve->var->storage_class & STCtemp)
! 	  {
! 	    /* Temporary initialized inside a return expression, and
! 	       used as the return value.  Replace it with the hidden
! 	       reference to allow RVO return.  */
! 	    tree var = get_symbol_decl (ve->var);
! 	    TREE_ADDRESSABLE (var) = 1;
! 	    SET_DECL_VALUE_EXPR (var, decl);
! 	    DECL_HAS_VALUE_EXPR_P (var) = 1;
! 	    SET_DECL_LANG_NRVO (var, this->func_->shidden);
! 	    using_rvo_p = true;
! 	  }
! 	else if (sle != NULL)
  	  {
  	    StructDeclaration *sd = type->baseElemOf ()->isTypeStruct ()->sym;
  	    sle->sym = build_address (this->func_->shidden);
diff -Nrcpad gcc-14.3.0/gcc/d/types.cc gcc-14.3.0-RC-20260619/gcc/d/types.cc
*** gcc-14.3.0/gcc/d/types.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/d/types.cc	Fri Jun 19 06:51:02 2026
*************** insert_aggregate_bitfield (tree type, tr
*** 324,329 ****
--- 324,333 ----
    DECL_BIT_FIELD (bitfield) = 1;
    DECL_BIT_FIELD_TYPE (bitfield) = TREE_TYPE (bitfield);
  
+   DECL_NONADDRESSABLE_P (bitfield) = 1;
+   if (DECL_NAME (bitfield) == NULL_TREE)
+     DECL_PADDING_P (bitfield) = 1;
+ 
    TYPE_FIELDS (type) = chainon (TYPE_FIELDS (type), bitfield);
  }
  
*************** finish_aggregate_mode (tree type)
*** 589,595 ****
  	return;
      }
  
!   compute_record_mode (type);
  
    /* Propagate computed mode to all variants of this aggregate type.  */
    for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
--- 593,604 ----
  	return;
      }
  
!   /* Force mode of non-trivially copyable structs to be BLKmode, preventing it
!      from being returned in a register.  */
!   if (TREE_ADDRESSABLE (type))
!     SET_TYPE_MODE (type, BLKmode);
!   else
!     compute_record_mode (type);
  
    /* Propagate computed mode to all variants of this aggregate type.  */
    for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
*************** finish_aggregate_type (unsigned structsi
*** 671,677 ****
  	  continue;
  	}
  
!       layout_decl (field, 0);
  
        /* Give bit-field its proper type after layout_decl.  */
        if (DECL_BIT_FIELD (field))
--- 680,690 ----
  	  continue;
  	}
  
!       /* Layout the field decl using its known alignment.  */
!       unsigned int known_align =
! 	least_bit_hwi (tree_to_uhwi (DECL_FIELD_BIT_OFFSET (field)));
! 
!       layout_decl (field, known_align);
  
        /* Give bit-field its proper type after layout_decl.  */
        if (DECL_BIT_FIELD (field))
*************** finish_aggregate_type (unsigned structsi
*** 699,704 ****
--- 712,718 ----
        if (t == type)
  	continue;
  
+       TYPE_NAME (t) = TYPE_NAME (type);
        TYPE_FIELDS (t) = TYPE_FIELDS (type);
        TYPE_LANG_SPECIFIC (t) = TYPE_LANG_SPECIFIC (type);
        TYPE_SIZE (t) = TYPE_SIZE (type);
*************** finish_aggregate_type (unsigned structsi
*** 706,711 ****
--- 720,726 ----
        TYPE_PACKED (t) = TYPE_PACKED (type);
        SET_TYPE_ALIGN (t, TYPE_ALIGN (type));
        TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
+       TREE_ADDRESSABLE (t) = TREE_ADDRESSABLE (type);
      }
  
    /* Complete any other forward-referenced fields of this aggregate type.  */
*************** public:
*** 955,961 ****
  
  	/* Type `noreturn` is a terminator, as no other arguments can possibly
  	   be evaluated after it.  */
! 	if (type == noreturn_type_node)
  	  break;
  
  	fnparams = chainon (fnparams, build_tree_list (0, type));
--- 970,976 ----
  
  	/* Type `noreturn` is a terminator, as no other arguments can possibly
  	   be evaluated after it.  */
! 	if (TYPE_MAIN_VARIANT (type) == noreturn_type_node)
  	  break;
  
  	fnparams = chainon (fnparams, build_tree_list (0, type));
*************** public:
*** 981,987 ****
      d_keep (t->ctype);
  
      /* Qualify function types that have the type `noreturn` as volatile.  */
!     if (fntype == noreturn_type_node)
        t->ctype = build_qualified_type (t->ctype, TYPE_QUAL_VOLATILE);
  
      /* Handle any special support for calling conventions.  */
--- 996,1002 ----
      d_keep (t->ctype);
  
      /* Qualify function types that have the type `noreturn` as volatile.  */
!     if (TYPE_MAIN_VARIANT (fntype) == noreturn_type_node)
        t->ctype = build_qualified_type (t->ctype, TYPE_QUAL_VOLATILE);
  
      /* Handle any special support for calling conventions.  */
*************** public:
*** 1223,1228 ****
--- 1238,1249 ----
      TYPE_LANG_SPECIFIC (t->ctype) = build_lang_type (t);
      TYPE_CXX_ODR_P (t->ctype) = 1;
  
+     /* For structs with a user defined postblit, copy constructor, or a
+        destructor, also set TREE_ADDRESSABLE on the type and all variants.
+        This will make the struct be passed around by reference.  */
+     if (!t->sym->isPOD ())
+       TREE_ADDRESSABLE (t->ctype) = 1;
+ 
      if (t->sym->members)
        {
  	/* Must set up the overall size and alignment before determining
*************** public:
*** 1244,1261 ****
  	build_type_decl (t->ctype, t->sym);
  	apply_user_attributes (t->sym, t->ctype);
        }
- 
-     /* For structs with a user defined postblit, copy constructor, or a
-        destructor, also set TREE_ADDRESSABLE on the type and all variants.
-        This will make the struct be passed around by reference.  */
-     if (!t->sym->isPOD ())
-       {
- 	for (tree tv = t->ctype; tv != NULL_TREE; tv = TYPE_NEXT_VARIANT (tv))
- 	  {
- 	    TREE_ADDRESSABLE (tv) = 1;
- 	    SET_TYPE_MODE (tv, BLKmode);
- 	  }
-       }
    }
  
    /* Build a class type.  Whereas structs are value types, classes are
--- 1265,1270 ----
diff -Nrcpad gcc-14.3.0/gcc/dfp.cc gcc-14.3.0-RC-20260619/gcc/dfp.cc
*** gcc-14.3.0/gcc/dfp.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/dfp.cc	Fri Jun 19 06:51:02 2026
*************** decimal_real_to_integer (const REAL_VALU
*** 619,629 ****
--- 619,639 ----
    decNumber dn, dn2, dn3;
    REAL_VALUE_TYPE to;
    char string[256];
+   int scale = 0;
  
    decContextDefault (&set, DEC_INIT_DECIMAL128);
    set.traps = 0;
    set.round = DEC_ROUND_DOWN;
    decimal128ToNumber ((const decimal128 *) r->sig, &dn);
+   if (precision > 64 && decNumberIsFinite (&dn) && dn.exponent > 0)
+     {
+       /* libdecNumber doesn't really handle too large integers.
+ 	 So when precision is large and exponent as well, trim the
+ 	 exponent and adjust the resulting wide_int by multiplying
+ 	 it multiple times with powers of ten.  */
+       scale = dn.exponent;
+       dn.exponent = 0;
+     }
  
    decNumberToIntegralValue (&dn2, &dn, &set);
    decNumberZero (&dn3);
*************** decimal_real_to_integer (const REAL_VALU
*** 633,639 ****
       function.  */
    decNumberToString (&dn, string);
    real_from_string (&to, string);
!   return real_to_integer (&to, fail, precision);
  }
  
  /* Perform the decimal floating point operation described by CODE.
--- 643,716 ----
       function.  */
    decNumberToString (&dn, string);
    real_from_string (&to, string);
!   bool failp = false;
!   wide_int w = real_to_integer (&to, &failp, precision);
!   if (failp)
!     *fail = true;
!   if (scale && !failp)
!     {
!       bool isneg = wi::neg_p (w);
!       if (isneg)
! 	w = -w;
!       enum wi::overflow_type ovf = wi::OVF_NONE;
!       unsigned HOST_WIDE_INT pow10s[] = {
! 	HOST_WIDE_INT_UC (10),
! 	HOST_WIDE_INT_UC (100),
! 	HOST_WIDE_INT_UC (1000),
! 	HOST_WIDE_INT_UC (10000),
! 	HOST_WIDE_INT_UC (100000),
! 	HOST_WIDE_INT_UC (1000000),
! 	HOST_WIDE_INT_UC (10000000),
! 	HOST_WIDE_INT_UC (100000000),
! 	HOST_WIDE_INT_UC (1000000000),
! 	HOST_WIDE_INT_UC (10000000000),
! 	HOST_WIDE_INT_UC (100000000000),
! 	HOST_WIDE_INT_UC (1000000000000),
! 	HOST_WIDE_INT_UC (10000000000000),
! 	HOST_WIDE_INT_UC (100000000000000),
! 	HOST_WIDE_INT_UC (1000000000000000),
! 	HOST_WIDE_INT_UC (10000000000000000),
! 	HOST_WIDE_INT_UC (100000000000000000),
! 	HOST_WIDE_INT_UC (1000000000000000000),
! 	HOST_WIDE_INT_UC (10000000000000000000),
!       };
!       int s = scale % 19;
!       if (s)
! 	{
! 	  wide_int wm = wi::uhwi (pow10s[s - 1], w.get_precision ());
! 	  w = wi::umul (w, wm, &ovf);
! 	  if (ovf)
! 	    scale = 0;
! 	}
!       scale /= 19;
!       wide_int wm = wi::uhwi (pow10s[18], w.get_precision ());
!       while (scale)
! 	{
! 	  if (scale & 1)
! 	    {
! 	      w = wi::umul (w, wm, &ovf);
! 	      if (ovf)
! 		break;
! 	    }
! 	  scale >>= 1;
! 	  if (!scale)
! 	    break;
! 	  wm = wi::umul (wm, wm, &ovf);
! 	  if (ovf)
! 	    break;
! 	}
!       if (ovf)
! 	{
! 	  *fail = true;
! 	  if (isneg)
! 	    return wi::set_bit_in_zero (precision - 1, precision);
! 	  else
! 	    return ~wi::set_bit_in_zero (precision - 1, precision);
! 	}
!       if (isneg)
! 	w = -w;
!     }
!   return w;
  }
  
  /* Perform the decimal floating point operation described by CODE.
diff -Nrcpad gcc-14.3.0/gcc/doc/avr-mmcu.texi gcc-14.3.0-RC-20260619/gcc/doc/avr-mmcu.texi
*** gcc-14.3.0/gcc/doc/avr-mmcu.texi	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/avr-mmcu.texi	Fri Jun 19 06:51:02 2026
***************
*** 50,64 ****
  
  @item @anchor{avrxmega2}avrxmega2
  ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega8e5}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16e5}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c3}, @code{atxmega32c4}, @code{atxmega32d3}, @code{atxmega32d4}, @code{atxmega32e5}, @code{avr64da28}, @code{avr64da32}, @code{avr64da48}, @code{avr64da64}, @code{avr64db28}, @code{avr64db32}, @code{avr64db48}, @code{avr64db64}, @code{avr64dd14}, @code{avr64dd20}, @code{avr64dd28}, @code{avr64dd32}, @code{avr64du28}, @code{avr64du32}, @code{avr64ea28}, @code{avr64ea32}, @code{avr64ea48}, @code{avr64sd28}, @code{avr64sd32}, @code{avr64sd48}.
  
  @item @anchor{avrxmega3}avrxmega3
  ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! @*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da32}, @code{avr32da48}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}.
  
  @item @anchor{avrxmega4}avrxmega4
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64a3u}, @code{atxmega64a4u}, @code{atxmega64b1}, @code{atxmega64b3}, @code{atxmega64c3}, @code{atxmega64d3}, @code{atxmega64d4}, @code{avr128da28}, @code{avr128da32}, @code{avr128da48}, @code{avr128da64}, @code{avr128db28}, @code{avr128db32}, @code{avr128db48}, @code{avr128db64}.
  
  @item @anchor{avrxmega5}avrxmega5
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of RAM.
--- 50,64 ----
  
  @item @anchor{avrxmega2}avrxmega2
  ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega8e5}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16e5}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c3}, @code{atxmega32c4}, @code{atxmega32d3}, @code{atxmega32d4}, @code{atxmega32e5}, @code{avr64da28}, @code{avr64da28s}, @code{avr64da32}, @code{avr64da32s}, @code{avr64da48}, @code{avr64da48s}, @code{avr64da64}, @code{avr64da64s}, @code{avr64db28}, @code{avr64db32}, @code{avr64db48}, @code{avr64db64}, @code{avr64dd14}, @code{avr64dd20}, @code{avr64dd28}, @code{avr64dd32}, @code{avr64du28}, @code{avr64du32}, @code{avr64ea28}, @code{avr64ea32}, @code{avr64ea48}, @code{avr64sd28}, @code{avr64sd32}, @code{avr64sd48}.
  
  @item @anchor{avrxmega3}avrxmega3
  ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! @*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr16la14}, @code{avr16la20}, @code{avr16la28}, @code{avr16la32}, @code{avr32da28}, @code{avr32da28s}, @code{avr32da32}, @code{avr32da32s}, @code{avr32da48}, @code{avr32da48s}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32eb14}, @code{avr32eb20}, @code{avr32eb28}, @code{avr32eb32}, @code{avr32la14}, @code{avr32la20}, @code{avr32la28}, @code{avr32la32}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}.
  
  @item @anchor{avrxmega4}avrxmega4
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64a3u}, @code{atxmega64a4u}, @code{atxmega64b1}, @code{atxmega64b3}, @code{atxmega64c3}, @code{atxmega64d3}, @code{atxmega64d4}, @code{avr128da28}, @code{avr128da28s}, @code{avr128da32}, @code{avr128da32s}, @code{avr128da48}, @code{avr128da48s}, @code{avr128da64}, @code{avr128da64s}, @code{avr128db28}, @code{avr128db32}, @code{avr128db48}, @code{avr128db64}.
  
  @item @anchor{avrxmega5}avrxmega5
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of RAM.
diff -Nrcpad gcc-14.3.0/gcc/doc/cpp.1 gcc-14.3.0-RC-20260619/gcc/doc/cpp.1
*** gcc-14.3.0/gcc/doc/cpp.1	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/cpp.1	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,142 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "CPP 1"
! .TH CPP 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  cpp \- The C Preprocessor
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
      [\fB\-I\fR\fIdir\fR...] [\fB\-iquote\fR\fIdir\fR...]
--- 38,71 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "CPP 1"
! .TH CPP 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  cpp \- The C Preprocessor
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
      [\fB\-I\fR\fIdir\fR...] [\fB\-iquote\fR\fIdir\fR...]
*************** cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]..
*** 146,155 ****
      \fIinfile\fR [[\fB\-o\fR] \fIoutfile\fR]
  .PP
  Only the most useful options are given above; see below for a more
! complete list of preprocessor-specific options.  
  In addition, \fBcpp\fR accepts most \fBgcc\fR driver options, which
! are not listed here.  Refer to the \s-1GCC\s0 documentation for details.
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
  The C preprocessor, often known as \fIcpp\fR, is a \fImacro processor\fR
  that is used automatically by the C compiler to transform your program
--- 75,84 ----
      \fIinfile\fR [[\fB\-o\fR] \fIoutfile\fR]
  .PP
  Only the most useful options are given above; see below for a more
! complete list of preprocessor\-specific options.  
  In addition, \fBcpp\fR accepts most \fBgcc\fR driver options, which
! are not listed here.  Refer to the GCC documentation for details.
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
  The C preprocessor, often known as \fIcpp\fR, is a \fImacro processor\fR
  that is used automatically by the C compiler to transform your program
*************** before compilation.  It is called a macr
*** 157,165 ****
  you to define \fImacros\fR, which are brief abbreviations for longer
  constructs.
  .PP
! The C preprocessor is intended to be used only with C, \*(C+, and
! Objective-C source code.  In the past, it has been abused as a general
! text processor.  It will choke on input which does not obey C's lexical
  rules.  For example, apostrophes will be interpreted as the beginning of
  character constants, and cause errors.  Also, you cannot rely on it
  preserving characteristics of the input which are not significant to
--- 86,94 ----
  you to define \fImacros\fR, which are brief abbreviations for longer
  constructs.
  .PP
! The C preprocessor is intended to be used only with C, C++, and
! Objective\-C source code.  In the past, it has been abused as a general
! text processor.  It will choke on input which does not obey C\*(Aqs lexical
  rules.  For example, apostrophes will be interpreted as the beginning of
  character constants, and cause errors.  Also, you cannot rely on it
  preserving characteristics of the input which are not significant to
*************** C\-family languages.  If a Makefile is p
*** 167,205 ****
  will be removed, and the Makefile will not work.
  .PP
  Having said that, you can often get away with using cpp on things which
! are not C.  Other Algol-ish programming languages are often safe
  (Ada, etc.) So is assembly, with caution.  \fB\-traditional\-cpp\fR
  mode preserves more white space, and is otherwise more permissive.  Many
! of the problems can be avoided by writing C or \*(C+ style comments
  instead of native language comments, and keeping macros simple.
  .PP
  Wherever possible, you should use a preprocessor geared to the language
! you are writing in.  Modern versions of the \s-1GNU\s0 assembler have macro
  facilities.  Most high level programming languages have their own
  conditional compilation and inclusion mechanism.  If all else fails,
! try a true general text processor, such as \s-1GNU M4.\s0
  .PP
! C preprocessors vary in some details.  This manual discusses the \s-1GNU C\s0
! preprocessor, which provides a small superset of the features of \s-1ISO\s0
! Standard C.  In its default mode, the \s-1GNU C\s0 preprocessor does not do a
  few things required by the standard.  These are features which are
  rarely, if ever, used, and may cause surprising changes to the meaning
! of a program which does not expect them.  To get strict \s-1ISO\s0 Standard C,
  you should use the \fB\-std=c90\fR, \fB\-std=c99\fR,
  \&\fB\-std=c11\fR or \fB\-std=c17\fR options, depending
  on which version of the standard you want.  To get all the mandatory
  diagnostics, you must also use \fB\-pedantic\fR.
  .PP
! This manual describes the behavior of the \s-1ISO\s0 preprocessor.  To
! minimize gratuitous differences, where the \s-1ISO\s0 preprocessor's
  behavior does not conflict with traditional semantics, the
  traditional preprocessor should behave the same way.  The various
  differences that do exist are detailed in the section \fBTraditional
  Mode\fR.
  .PP
! For clarity, unless noted otherwise, references to \fB\s-1CPP\s0\fR in this
! manual refer to \s-1GNU CPP.\s0
! .SH "OPTIONS"
  .IX Header "OPTIONS"
  The \fBcpp\fR command expects two file names as arguments, \fIinfile\fR and
  \&\fIoutfile\fR.  The preprocessor reads \fIinfile\fR together with any
--- 96,134 ----
  will be removed, and the Makefile will not work.
  .PP
  Having said that, you can often get away with using cpp on things which
! are not C.  Other Algol\-ish programming languages are often safe
  (Ada, etc.) So is assembly, with caution.  \fB\-traditional\-cpp\fR
  mode preserves more white space, and is otherwise more permissive.  Many
! of the problems can be avoided by writing C or C++ style comments
  instead of native language comments, and keeping macros simple.
  .PP
  Wherever possible, you should use a preprocessor geared to the language
! you are writing in.  Modern versions of the GNU assembler have macro
  facilities.  Most high level programming languages have their own
  conditional compilation and inclusion mechanism.  If all else fails,
! try a true general text processor, such as GNU M4.
  .PP
! C preprocessors vary in some details.  This manual discusses the GNU C
! preprocessor, which provides a small superset of the features of ISO
! Standard C.  In its default mode, the GNU C preprocessor does not do a
  few things required by the standard.  These are features which are
  rarely, if ever, used, and may cause surprising changes to the meaning
! of a program which does not expect them.  To get strict ISO Standard C,
  you should use the \fB\-std=c90\fR, \fB\-std=c99\fR,
  \&\fB\-std=c11\fR or \fB\-std=c17\fR options, depending
  on which version of the standard you want.  To get all the mandatory
  diagnostics, you must also use \fB\-pedantic\fR.
  .PP
! This manual describes the behavior of the ISO preprocessor.  To
! minimize gratuitous differences, where the ISO preprocessor\*(Aqs
  behavior does not conflict with traditional semantics, the
  traditional preprocessor should behave the same way.  The various
  differences that do exist are detailed in the section \fBTraditional
  Mode\fR.
  .PP
! For clarity, unless noted otherwise, references to \fBCPP\fR in this
! manual refer to GNU CPP.
! .SH OPTIONS
  .IX Header "OPTIONS"
  The \fBcpp\fR command expects two file names as arguments, \fIinfile\fR and
  \&\fIoutfile\fR.  The preprocessor reads \fIinfile\fR together with any
*************** which take an argument may have that arg
*** 218,224 ****
  after the option, or with a space between option and argument:
  \&\fB\-Ifoo\fR and \fB\-I foo\fR have the same effect.
  .PP
! Many options have multi-letter names; therefore multiple single-letter
  options may \fInot\fR be grouped: \fB\-dM\fR is very different from
  \&\fB\-d\ \-M\fR.
  .IP "\fB\-D\fR \fIname\fR" 4
--- 147,153 ----
  after the option, or with a space between option and argument:
  \&\fB\-Ifoo\fR and \fB\-I foo\fR have the same effect.
  .PP
! Many options have multi\-letter names; therefore multiple single\-letter
  options may \fInot\fR be grouped: \fB\-dM\fR is very different from
  \&\fB\-d\ \-M\fR.
  .IP "\fB\-D\fR \fIname\fR" 4
*************** they appeared during translation phase t
*** 231,245 ****
  directive.  In particular, the definition is truncated by
  embedded newline characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell-like
! program you may need to use the shell's quoting syntax to protect
  characters such as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any).  Parentheses are meaningful to most shells, so you should
  quote the option.  With \fBsh\fR and \fBcsh\fR,
! \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
  .Sp
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
  are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
--- 160,174 ----
  directive.  In particular, the definition is truncated by
  embedded newline characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell\-like
! program you may need to use the shell\*(Aqs quoting syntax to protect
  characters such as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function\-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any).  Parentheses are meaningful to most shells, so you should
  quote the option.  With \fBsh\fR and \fBcsh\fR,
! \&\fB\-D\*(Aq\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB\*(Aq\fR works.
  .Sp
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
  are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
*************** provided with a \fB\-D\fR option.
*** 253,259 ****
  .IX Item "-include file"
  Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
  line of the primary source file.  However, the first directory searched
! for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
  the directory containing the main source file.  If not found there, it
  is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
  chain as normal.
--- 182,188 ----
  .IX Item "-include file"
  Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
  line of the primary source file.  However, the first directory searched
! for \fIfile\fR is the preprocessor\*(Aqs working directory \fIinstead of\fR
  the directory containing the main source file.  If not found there, it
  is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
  chain as normal.
*************** processing its declarations.
*** 269,292 ****
  .Sp
  All files specified by \fB\-imacros\fR are processed before all files
  specified by \fB\-include\fR.
! .IP "\fB\-undef\fR" 4
  .IX Item "-undef"
! Do not predefine any system-specific or GCC-specific macros.  The
  standard predefined macros remain defined.
! .IP "\fB\-pthread\fR" 4
  .IX Item "-pthread"
! Define additional macros required for using the \s-1POSIX\s0 threads library.
  You should use this option consistently for both compilation and linking.
  This option is supported on GNU/Linux targets, most other Unix derivatives,
  and also on x86 Cygwin and MinGW targets.
! .IP "\fB\-M\fR" 4
  .IX Item "-M"
  Instead of outputting the result of preprocessing, output a rule
  suitable for \fBmake\fR describing the dependencies of the main
  source file.  The preprocessor outputs one \fBmake\fR rule containing
  the object file name for that source file, a colon, and the names of all
  the included files, including those coming from \fB\-include\fR or
! \&\fB\-imacros\fR command-line options.
  .Sp
  Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
  object file name consists of the name of the source file with any
--- 198,221 ----
  .Sp
  All files specified by \fB\-imacros\fR are processed before all files
  specified by \fB\-include\fR.
! .IP \fB\-undef\fR 4
  .IX Item "-undef"
! Do not predefine any system\-specific or GCC\-specific macros.  The
  standard predefined macros remain defined.
! .IP \fB\-pthread\fR 4
  .IX Item "-pthread"
! Define additional macros required for using the POSIX threads library.
  You should use this option consistently for both compilation and linking.
  This option is supported on GNU/Linux targets, most other Unix derivatives,
  and also on x86 Cygwin and MinGW targets.
! .IP \fB\-M\fR 4
  .IX Item "-M"
  Instead of outputting the result of preprocessing, output a rule
  suitable for \fBmake\fR describing the dependencies of the main
  source file.  The preprocessor outputs one \fBmake\fR rule containing
  the object file name for that source file, a colon, and the names of all
  the included files, including those coming from \fB\-include\fR or
! \&\fB\-imacros\fR command\-line options.
  .Sp
  Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
  object file name consists of the name of the source file with any
*************** parts removed.  If there are many includ
*** 295,310 ****
  split into several lines using \fB\e\fR\-newline.  The rule has no
  commands.
  .Sp
! This option does not suppress the preprocessor's debug output, such as
  \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
  rules you should explicitly specify the dependency output file with
  \&\fB\-MF\fR, or use an environment variable like
! \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
  is still sent to the regular output stream as normal.
  .Sp
  Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
  warnings with an implicit \fB\-w\fR.
! .IP "\fB\-MM\fR" 4
  .IX Item "-MM"
  Like \fB\-M\fR but do not mention header files that are found in
  system header directories, nor header files that are included,
--- 224,239 ----
  split into several lines using \fB\e\fR\-newline.  The rule has no
  commands.
  .Sp
! This option does not suppress the preprocessor\*(Aqs debug output, such as
  \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
  rules you should explicitly specify the dependency output file with
  \&\fB\-MF\fR, or use an environment variable like
! \&\fBDEPENDENCIES_OUTPUT\fR.  Debug output
  is still sent to the regular output stream as normal.
  .Sp
  Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
  warnings with an implicit \fB\-w\fR.
! .IP \fB\-MM\fR 4
  .IX Item "-MM"
  Like \fB\-M\fR but do not mention header files that are found in
  system header directories, nor header files that are included,
*************** When used with the driver options \fB\-M
*** 324,330 ****
  \&\fB\-MF\fR overrides the default dependency output file.
  .Sp
  If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
! .IP "\fB\-MG\fR" 4
  .IX Item "-MG"
  In conjunction with an option such as \fB\-M\fR requesting
  dependency generation, \fB\-MG\fR assumes missing header files are
--- 253,259 ----
  \&\fB\-MF\fR overrides the default dependency output file.
  .Sp
  If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
! .IP \fB\-MG\fR 4
  .IX Item "-MG"
  In conjunction with an option such as \fB\-M\fR requesting
  dependency generation, \fB\-MG\fR assumes missing header files are
*************** also suppresses preprocessed output, as
*** 335,346 ****
  this useless.
  .Sp
  This feature is used in automatic updating of makefiles.
! .IP "\fB\-Mno\-modules\fR" 4
  .IX Item "-Mno-modules"
  Disable dependency generation for compiled module interfaces.
! .IP "\fB\-MP\fR" 4
  .IX Item "-MP"
! This option instructs \s-1CPP\s0 to add a phony target for each dependency
  other than the main file, causing each to depend on nothing.  These
  dummy rules work around errors \fBmake\fR gives if you remove header
  files without updating the \fIMakefile\fR to match.
--- 264,275 ----
  this useless.
  .Sp
  This feature is used in automatic updating of makefiles.
! .IP \fB\-Mno\-modules\fR 4
  .IX Item "-Mno-modules"
  Disable dependency generation for compiled module interfaces.
! .IP \fB\-MP\fR 4
  .IX Item "-MP"
! This option instructs CPP to add a phony target for each dependency
  other than the main file, causing each to depend on nothing.  These
  dummy rules work around errors \fBmake\fR gives if you remove header
  files without updating the \fIMakefile\fR to match.
*************** This is typical output:
*** 355,369 ****
  .IP "\fB\-MT\fR \fItarget\fR" 4
  .IX Item "-MT target"
  Change the target of the rule emitted by dependency generation.  By
! default \s-1CPP\s0 takes the name of the main input file, deletes any
  directory components and any file suffix such as \fB.c\fR, and
! appends the platform's usual object suffix.  The result is the target.
  .Sp
  An \fB\-MT\fR option sets the target to be exactly the string you
  specify.  If you want multiple targets, you can specify them as a single
  argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
  .Sp
! For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
  .Sp
  .Vb 1
  \&        $(objpfx)foo.o: foo.c
--- 284,298 ----
  .IP "\fB\-MT\fR \fItarget\fR" 4
  .IX Item "-MT target"
  Change the target of the rule emitted by dependency generation.  By
! default CPP takes the name of the main input file, deletes any
  directory components and any file suffix such as \fB.c\fR, and
! appends the platform\*(Aqs usual object suffix.  The result is the target.
  .Sp
  An \fB\-MT\fR option sets the target to be exactly the string you
  specify.  If you want multiple targets, you can specify them as a single
  argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
  .Sp
! For example, \fB\-MT\ \*(Aq$(objpfx)foo.o\*(Aq\fR might give
  .Sp
  .Vb 1
  \&        $(objpfx)foo.o: foo.c
*************** For example, \fB\-MT\ '$(objpfx)foo.o'\f
*** 371,377 ****
  .IP "\fB\-MQ\fR \fItarget\fR" 4
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
! Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
  .Sp
  .Vb 1
  \&        $$(objpfx)foo.o: foo.c
--- 300,306 ----
  .IP "\fB\-MQ\fR \fItarget\fR" 4
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
! Make.  \fB\-MQ\ \*(Aq$(objpfx)foo.o\*(Aq\fR gives
  .Sp
  .Vb 1
  \&        $$(objpfx)foo.o: foo.c
*************** Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR give
*** 379,385 ****
  .Sp
  The default target is automatically quoted, as if it were given with
  \&\fB\-MQ\fR.
! .IP "\fB\-MD\fR" 4
  .IX Item "-MD"
  \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
  \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
--- 308,314 ----
  .Sp
  The default target is automatically quoted, as if it were given with
  \&\fB\-MQ\fR.
! .IP \fB\-MD\fR 4
  .IX Item "-MD"
  \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
  \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
*************** is understood to specify a target object
*** 394,404 ****
  .Sp
  Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
  a dependency output file as a side effect of the compilation process.
! .IP "\fB\-MMD\fR" 4
  .IX Item "-MMD"
  Like \fB\-MD\fR except mention only user header files, not system
  header files.
! .IP "\fB\-fpreprocessed\fR" 4
  .IX Item "-fpreprocessed"
  Indicate to the preprocessor that the input file has already been
  preprocessed.  This suppresses things like macro expansion, trigraph
--- 323,333 ----
  .Sp
  Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
  a dependency output file as a side effect of the compilation process.
! .IP \fB\-MMD\fR 4
  .IX Item "-MMD"
  Like \fB\-MD\fR except mention only user header files, not system
  header files.
! .IP \fB\-fpreprocessed\fR 4
  .IX Item "-fpreprocessed"
  Indicate to the preprocessor that the input file has already been
  preprocessed.  This suppresses things like macro expansion, trigraph
*************** a tokenizer for the front ends.
*** 410,422 ****
  .Sp
  \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
  extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
! extensions that \s-1GCC\s0 uses for preprocessed files created by
  \&\fB\-save\-temps\fR.
! .IP "\fB\-fdirectives\-only\fR" 4
  .IX Item "-fdirectives-only"
  When preprocessing, handle directives, but do not expand macros.
  .Sp
! The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
  options.
  .Sp
  With \fB\-E\fR, preprocessing is limited to the handling of directives
--- 339,351 ----
  .Sp
  \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
  extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
! extensions that GCC uses for preprocessed files created by
  \&\fB\-save\-temps\fR.
! .IP \fB\-fdirectives\-only\fR 4
  .IX Item "-fdirectives-only"
  When preprocessing, handle directives, but do not expand macros.
  .Sp
! The option\*(Aqs behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
  options.
  .Sp
  With \fB\-E\fR, preprocessing is limited to the handling of directives
*************** files previously preprocessed with \f(CW
*** 433,459 ****
  With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
  \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
  files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
! .IP "\fB\-fdollars\-in\-identifiers\fR" 4
  .IX Item "-fdollars-in-identifiers"
  Accept \fB$\fR in identifiers.
! .IP "\fB\-fextended\-identifiers\fR" 4
  .IX Item "-fextended-identifiers"
  Accept universal character names and extended characters in
  identifiers.  This option is enabled by default for C99 (and later C
! standard versions) and \*(C+.
! .IP "\fB\-fno\-canonical\-system\-headers\fR" 4
  .IX Item "-fno-canonical-system-headers"
  When preprocessing, do not shorten system header paths with canonicalization.
! .IP "\fB\-fmax\-include\-depth=\fR\fIdepth\fR" 4
  .IX Item "-fmax-include-depth=depth"
  Set the maximum depth of the nested #include. The default is 200.
! .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
  .IX Item "-ftabstop=width"
  Set the distance between tab stops.  This helps the preprocessor report
  correct column numbers in warnings or errors, even if tabs appear on the
  line.  If the value is less than 1 or greater than 100, the option is
  ignored.  The default is 8.
! .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
  .IX Item "-ftrack-macro-expansion[=level]"
  Track locations of tokens across macro expansions. This allows the
  compiler to emit diagnostic about the current macro expansion stack
--- 362,388 ----
  With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
  \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
  files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
! .IP \fB\-fdollars\-in\-identifiers\fR 4
  .IX Item "-fdollars-in-identifiers"
  Accept \fB$\fR in identifiers.
! .IP \fB\-fextended\-identifiers\fR 4
  .IX Item "-fextended-identifiers"
  Accept universal character names and extended characters in
  identifiers.  This option is enabled by default for C99 (and later C
! standard versions) and C++.
! .IP \fB\-fno\-canonical\-system\-headers\fR 4
  .IX Item "-fno-canonical-system-headers"
  When preprocessing, do not shorten system header paths with canonicalization.
! .IP \fB\-fmax\-include\-depth=\fR\fIdepth\fR 4
  .IX Item "-fmax-include-depth=depth"
  Set the maximum depth of the nested #include. The default is 200.
! .IP \fB\-ftabstop=\fR\fIwidth\fR 4
  .IX Item "-ftabstop=width"
  Set the distance between tab stops.  This helps the preprocessor report
  correct column numbers in warnings or errors, even if tabs appear on the
  line.  If the value is less than 1 or greater than 100, the option is
  ignored.  The default is 8.
! .IP \fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR] 4
  .IX Item "-ftrack-macro-expansion[=level]"
  Track locations of tokens across macro expansions. This allows the
  compiler to emit diagnostic about the current macro expansion stack
*************** when a compilation error occurs in a mac
*** 461,517 ****
  option makes the preprocessor and the compiler consume more
  memory. The \fIlevel\fR parameter can be used to choose the level of
  precision of token location tracking thus decreasing the memory
! consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
  this option. Value \fB1\fR tracks tokens locations in a
  degraded mode for the sake of minimal memory overhead. In this mode
  all tokens resulting from the expansion of an argument of a
! function-like macro have the same location. Value \fB2\fR tracks
  tokens locations completely. This value is the most memory hungry.
  When this option is given no argument, the default parameter value is
  \&\fB2\fR.
  .Sp
  Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
! .IP "\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fmacro-prefix-map=old=new"
! When preprocessing files residing in directory \fI\fIold\fI\fR,
  expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
! files resided in directory \fI\fInew\fI\fR instead.  This can be used
  to change an absolute path to a relative path by using \fI.\fR for
  \&\fInew\fR which can result in more reproducible builds that are
  location independent.  This option also affects
  \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
  \&\fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
  .IX Item "-fexec-charset=charset"
  Set the execution character set, used for string and character
! constants.  The default is \s-1UTF\-8.\s0  \fIcharset\fR can be any encoding
! supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
  .IX Item "-fwide-exec-charset=charset"
  Set the wide execution character set, used for wide string and
! character constants.  The default is one of \s-1UTF\-32BE, UTF\-32LE, UTF\-16BE,\s0
! or \s-1UTF\-16LE,\s0 whichever corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR and the
! big-endian or little-endian byte order being used for code generation.  As
  with \fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
! by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
  problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
! .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
  .IX Item "-finput-charset=charset"
  Set the input character set, used for translation from the character
! set of the input file to the source character set used by \s-1GCC.\s0  If the
! locale does not specify, or \s-1GCC\s0 cannot get this information from the
! locale, the default is \s-1UTF\-8.\s0  This can be overridden by either the locale
! or this command-line option.  Currently the command-line option takes
! precedence if there's a conflict.  \fIcharset\fR can be any encoding
! supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP "\fB\-fworking\-directory\fR" 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that
  let the compiler know the current working directory at the time of
  preprocessing.  When this option is enabled, the preprocessor
  emits, after the initial linemarker, a second linemarker with the
! current working directory followed by two slashes.  \s-1GCC\s0 uses this
! directory, when it's present in the preprocessed input, as the
  directory emitted as the current working directory in some debugging
  information formats.  This option is implicitly enabled if debugging
  information is enabled, but this can be inhibited with the negated
--- 390,446 ----
  option makes the preprocessor and the compiler consume more
  memory. The \fIlevel\fR parameter can be used to choose the level of
  precision of token location tracking thus decreasing the memory
! consumption if necessary. Value \fB0\fR of \fIlevel\fR de\-activates
  this option. Value \fB1\fR tracks tokens locations in a
  degraded mode for the sake of minimal memory overhead. In this mode
  all tokens resulting from the expansion of an argument of a
! function\-like macro have the same location. Value \fB2\fR tracks
  tokens locations completely. This value is the most memory hungry.
  When this option is given no argument, the default parameter value is
  \&\fB2\fR.
  .Sp
  Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
! .IP \fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fmacro-prefix-map=old=new"
! When preprocessing files residing in directory \fIold\fR,
  expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
! files resided in directory \fInew\fR instead.  This can be used
  to change an absolute path to a relative path by using \fI.\fR for
  \&\fInew\fR which can result in more reproducible builds that are
  location independent.  This option also affects
  \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
  \&\fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fexec\-charset=\fR\fIcharset\fR 4
  .IX Item "-fexec-charset=charset"
  Set the execution character set, used for string and character
! constants.  The default is UTF\-8.  \fIcharset\fR can be any encoding
! supported by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP \fB\-fwide\-exec\-charset=\fR\fIcharset\fR 4
  .IX Item "-fwide-exec-charset=charset"
  Set the wide execution character set, used for wide string and
! character constants.  The default is one of UTF\-32BE, UTF\-32LE, UTF\-16BE,
! or UTF\-16LE, whichever corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR and the
! big\-endian or little\-endian byte order being used for code generation.  As
  with \fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
! by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
  problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
! .IP \fB\-finput\-charset=\fR\fIcharset\fR 4
  .IX Item "-finput-charset=charset"
  Set the input character set, used for translation from the character
! set of the input file to the source character set used by GCC.  If the
! locale does not specify, or GCC cannot get this information from the
! locale, the default is UTF\-8.  This can be overridden by either the locale
! or this command\-line option.  Currently the command\-line option takes
! precedence if there\*(Aqs a conflict.  \fIcharset\fR can be any encoding
! supported by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP \fB\-fworking\-directory\fR 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that
  let the compiler know the current working directory at the time of
  preprocessing.  When this option is enabled, the preprocessor
  emits, after the initial linemarker, a second linemarker with the
! current working directory followed by two slashes.  GCC uses this
! directory, when it\*(Aqs present in the preprocessed input, as the
  directory emitted as the current working directory in some debugging
  information formats.  This option is implicitly enabled if debugging
  information is enabled, but this can be inhibited with the negated
*************** it does not use shell special characters
*** 528,534 ****
  .IX Item "-A -predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer
  \&\fIanswer\fR.
! .IP "\fB\-C\fR" 4
  .IX Item "-C"
  Do not discard comments.  All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
--- 457,463 ----
  .IX Item "-A -predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer
  \&\fIanswer\fR.
! .IP \fB\-C\fR 4
  .IX Item "-C"
  Do not discard comments.  All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
*************** causes the preprocessor to treat comment
*** 539,607 ****
  For example, comments appearing at the start of what would be a
  directive line have the effect of turning that line into an ordinary
  source line, since the first token on the line is no longer a \fB#\fR.
! .IP "\fB\-CC\fR" 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion.  This is
  like \fB\-C\fR, except that comments contained within macros are
  also passed through to the output file where the macro is expanded.
  .Sp
  In addition to the side effects of the \fB\-C\fR option, the
! \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
  to be converted to C\-style comments.  This is to prevent later use
  of that macro from inadvertently commenting out the remainder of
  the source line.
  .Sp
  The \fB\-CC\fR option is generally used to support lint comments.
! .IP "\fB\-P\fR" 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that is
  not C code, and will be sent to a program which might be confused by the
  linemarkers.
! .IP "\fB\-traditional\fR" 4
  .IX Item "-traditional"
  .PD 0
! .IP "\fB\-traditional\-cpp\fR" 4
  .IX Item "-traditional-cpp"
  .PD
! Try to imitate the behavior of pre-standard C preprocessors, as
! opposed to \s-1ISO C\s0 preprocessors.
  .Sp
! Note that \s-1GCC\s0 does not otherwise attempt to emulate a pre-standard 
  C compiler, and these options are only supported with the \fB\-E\fR 
! switch, or when invoking \s-1CPP\s0 explicitly.
! .IP "\fB\-trigraphs\fR" 4
  .IX Item "-trigraphs"
! Support \s-1ISO C\s0 trigraphs.
! These are three-character sequences, all starting with \fB??\fR, that
! are defined by \s-1ISO C\s0 to stand for single characters.  For example,
! \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
  constant for a newline.
  .Sp
! By default, \s-1GCC\s0 ignores trigraphs, but in
! standard-conforming modes it converts them.  See the \fB\-std\fR and
  \&\fB\-ansi\fR options.
! .IP "\fB\-remap\fR" 4
  .IX Item "-remap"
  Enable special code to work around file systems which only permit very
! short file names, such as MS-DOS.
! .IP "\fB\-H\fR" 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities.  Each name is indented to show how deep in the
  \&\fB#include\fR stack it is.  Precompiled header files are also
  printed, even if they are found to be invalid; an invalid precompiled
  header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
! .IP "\fB\-d\fR\fIletters\fR" 4
  .IX Item "-dletters"
  Says to make debugging dumps during compilation as specified by
  \&\fIletters\fR.  The flags documented here are those relevant to the
  preprocessor.  Other \fIletters\fR are interpreted
! by the compiler proper, or reserved for future versions of \s-1GCC,\s0 and so
  are silently ignored.  If you specify \fIletters\fR whose behavior
  conflicts, the result is undefined.
  .RS 4
! .IP "\fB\-dM\fR" 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \fB#define\fR
  directives for all the macros defined during the execution of the
--- 468,536 ----
  For example, comments appearing at the start of what would be a
  directive line have the effect of turning that line into an ordinary
  source line, since the first token on the line is no longer a \fB#\fR.
! .IP \fB\-CC\fR 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion.  This is
  like \fB\-C\fR, except that comments contained within macros are
  also passed through to the output file where the macro is expanded.
  .Sp
  In addition to the side effects of the \fB\-C\fR option, the
! \&\fB\-CC\fR option causes all C++\-style comments inside a macro
  to be converted to C\-style comments.  This is to prevent later use
  of that macro from inadvertently commenting out the remainder of
  the source line.
  .Sp
  The \fB\-CC\fR option is generally used to support lint comments.
! .IP \fB\-P\fR 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that is
  not C code, and will be sent to a program which might be confused by the
  linemarkers.
! .IP \fB\-traditional\fR 4
  .IX Item "-traditional"
  .PD 0
! .IP \fB\-traditional\-cpp\fR 4
  .IX Item "-traditional-cpp"
  .PD
! Try to imitate the behavior of pre\-standard C preprocessors, as
! opposed to ISO C preprocessors.
  .Sp
! Note that GCC does not otherwise attempt to emulate a pre\-standard 
  C compiler, and these options are only supported with the \fB\-E\fR 
! switch, or when invoking CPP explicitly.
! .IP \fB\-trigraphs\fR 4
  .IX Item "-trigraphs"
! Support ISO C trigraphs.
! These are three\-character sequences, all starting with \fB??\fR, that
! are defined by ISO C to stand for single characters.  For example,
! \&\fB??/\fR stands for \fB\e\fR, so \fB\*(Aq??/n\*(Aq\fR is a character
  constant for a newline.
  .Sp
! By default, GCC ignores trigraphs, but in
! standard\-conforming modes it converts them.  See the \fB\-std\fR and
  \&\fB\-ansi\fR options.
! .IP \fB\-remap\fR 4
  .IX Item "-remap"
  Enable special code to work around file systems which only permit very
! short file names, such as MS\-DOS.
! .IP \fB\-H\fR 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities.  Each name is indented to show how deep in the
  \&\fB#include\fR stack it is.  Precompiled header files are also
  printed, even if they are found to be invalid; an invalid precompiled
  header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
! .IP \fB\-d\fR\fIletters\fR 4
  .IX Item "-dletters"
  Says to make debugging dumps during compilation as specified by
  \&\fIletters\fR.  The flags documented here are those relevant to the
  preprocessor.  Other \fIletters\fR are interpreted
! by the compiler proper, or reserved for future versions of GCC, and so
  are silently ignored.  If you specify \fIletters\fR whose behavior
  conflicts, the result is undefined.
  .RS 4
! .IP \fB\-dM\fR 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \fB#define\fR
  directives for all the macros defined during the execution of the
*************** Assuming you have no file \fIfoo.h\fR, t
*** 614,632 ****
  .Ve
  .Sp
  shows all the predefined macros.
! .IP "\fB\-dD\fR" 4
  .IX Item "-dD"
  Like \fB\-dM\fR except that it outputs \fIboth\fR the \fB#define\fR
  directives and the result of preprocessing.  Both kinds of output go to
  the standard output file.
! .IP "\fB\-dN\fR" 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP "\fB\-dI\fR" 4
  .IX Item "-dI"
  Output \fB#include\fR directives in addition to the result of
  preprocessing.
! .IP "\fB\-dU\fR" 4
  .IX Item "-dU"
  Like \fB\-dD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the
--- 543,561 ----
  .Ve
  .Sp
  shows all the predefined macros.
! .IP \fB\-dD\fR 4
  .IX Item "-dD"
  Like \fB\-dM\fR except that it outputs \fIboth\fR the \fB#define\fR
  directives and the result of preprocessing.  Both kinds of output go to
  the standard output file.
! .IP \fB\-dN\fR 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP \fB\-dI\fR 4
  .IX Item "-dI"
  Output \fB#include\fR directives in addition to the result of
  preprocessing.
! .IP \fB\-dU\fR 4
  .IX Item "-dU"
  Like \fB\-dD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the
*************** undefined at the time.
*** 636,649 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdebug\-cpp\fR" 4
  .IX Item "-fdebug-cpp"
! This option is only useful for debugging \s-1GCC.\s0  When used from \s-1CPP\s0 or with
  \&\fB\-E\fR, it dumps debugging information about location maps.  Every
  token in the output is preceded by the dump of the map its location
  belongs to.
  .Sp
! When used from \s-1GCC\s0 without \fB\-E\fR, this option has no effect.
  .IP "\fB\-I\fR \fIdir\fR" 4
  .IX Item "-I dir"
  .PD 0
--- 565,578 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fdebug\-cpp\fR 4
  .IX Item "-fdebug-cpp"
! This option is only useful for debugging GCC.  When used from CPP or with
  \&\fB\-E\fR, it dumps debugging information about location maps.  Every
  token in the output is preceded by the dump of the map its location
  belongs to.
  .Sp
! When used from GCC without \fB\-E\fR, this option has no effect.
  .IP "\fB\-I\fR \fIdir\fR" 4
  .IX Item "-I dir"
  .PD 0
*************** or \f(CW$SYSROOT\fR is replaced by the s
*** 662,701 ****
  \&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .Sp
  Directories specified with \fB\-iquote\fR apply only to the quote 
! form of the directive, \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
  Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
  or \fB\-idirafter\fR apply to lookup for both the
! \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR and
! \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR directives.
  .Sp
  You can specify any number or combination of these options on the 
  command line to search for header files in several directories.  
  The lookup order is as follows:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  For the quote form of the include directive, the directory of the current
  file is searched first.
! .IP "2." 4
  .IX Item "2."
  For the quote form of the include directive, the directories specified
! by \fB\-iquote\fR options are searched in left-to-right order,
  as they appear on the command line.
! .IP "3." 4
  .IX Item "3."
  Directories specified with \fB\-I\fR options are scanned in
! left-to-right order.
! .IP "4." 4
  .IX Item "4."
  Directories specified with \fB\-isystem\fR options are scanned in
! left-to-right order.
! .IP "5." 4
  .IX Item "5."
  Standard system directories are scanned.
! .IP "6." 4
  .IX Item "6."
  Directories specified with \fB\-idirafter\fR options are scanned in
! left-to-right order.
  .RE
  .RS 4
  .Sp
--- 591,630 ----
  \&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .Sp
  Directories specified with \fB\-iquote\fR apply only to the quote 
! form of the directive, \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR.
  Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
  or \fB\-idirafter\fR apply to lookup for both the
! \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR and
! \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR directives.
  .Sp
  You can specify any number or combination of these options on the 
  command line to search for header files in several directories.  
  The lookup order is as follows:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  For the quote form of the include directive, the directory of the current
  file is searched first.
! .IP 2. 4
  .IX Item "2."
  For the quote form of the include directive, the directories specified
! by \fB\-iquote\fR options are searched in left\-to\-right order,
  as they appear on the command line.
! .IP 3. 4
  .IX Item "3."
  Directories specified with \fB\-I\fR options are scanned in
! left\-to\-right order.
! .IP 4. 4
  .IX Item "4."
  Directories specified with \fB\-isystem\fR options are scanned in
! left\-to\-right order.
! .IP 5. 4
  .IX Item "5."
  Standard system directories are scanned.
! .IP 6. 4
  .IX Item "6."
  Directories specified with \fB\-idirafter\fR options are scanned in
! left\-to\-right order.
  .RE
  .RS 4
  .Sp
*************** You can use \fB\-I\fR to override a syst
*** 703,709 ****
  file, substituting your own version, since these directories are
  searched before the standard system header file directories.  
  However, you should
! not use this option to add directories that contain vendor-supplied
  system header files; use \fB\-isystem\fR for that.
  .Sp
  The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
--- 632,638 ----
  file, substituting your own version, since these directories are
  searched before the standard system header file directories.  
  However, you should
! not use this option to add directories that contain vendor\-supplied
  system header files; use \fB\-isystem\fR for that.
  .Sp
  The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
*************** If a standard system include directory,
*** 714,726 ****
  \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
  option is ignored.  The directory is still searched but as a
  system directory at its normal position in the system include chain.
! This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
  the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
  changed.
  If you really need to change the search order for system directories,
  use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
  .RE
! .IP "\fB\-I\-\fR" 4
  .IX Item "-I-"
  Split the include path.
  This option has been deprecated.  Please use \fB\-iquote\fR instead for
--- 643,655 ----
  \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
  option is ignored.  The directory is still searched but as a
  system directory at its normal position in the system include chain.
! This is to ensure that GCC\*(Aqs procedure to fix buggy system headers and
  the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
  changed.
  If you really need to change the search order for system directories,
  use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
  .RE
! .IP \fB\-I\-\fR 4
  .IX Item "-I-"
  Split the include path.
  This option has been deprecated.  Please use \fB\-iquote\fR instead for
*************** option.
*** 729,741 ****
  .Sp
  Any directories specified with \fB\-I\fR
  options before \fB\-I\-\fR are searched only for headers requested with
! \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
! \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
  specified with \fB\-I\fR options after the \fB\-I\-\fR, those
  directories are searched for all \fB#include\fR directives.
  .Sp
  In addition, \fB\-I\-\fR inhibits the use of the directory of the current
! file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
--- 658,670 ----
  .Sp
  Any directories specified with \fB\-I\fR
  options before \fB\-I\-\fR are searched only for headers requested with
! \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR; they are not searched for
! \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR.  If additional directories are
  specified with \fB\-I\fR options after the \fB\-I\-\fR, those
  directories are searched for all \fB#include\fR directives.
  .Sp
  In addition, \fB\-I\-\fR inhibits the use of the directory of the current
! file directory as the first search directory for \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
*************** information.
*** 760,788 ****
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the directory containing
! target-specific \*(C+ headers.
! .IP "\fB\-nostdinc\fR" 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files.
  Only the directories explicitly specified with \fB\-I\fR,
  \&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
  options (and the directory of the current file, if appropriate) 
  are searched.
! .IP "\fB\-nostdinc++\fR" 4
  .IX Item "-nostdinc++"
! Do not search for header files in the \*(C+\-specific standard directories,
  but do still search the other standard directories.  (This option is
! used when building the \*(C+ library.)
! .IP "\fB\-Wcomment\fR" 4
  .IX Item "-Wcomment"
  .PD 0
! .IP "\fB\-Wcomments\fR" 4
  .IX Item "-Wcomments"
  .PD
! Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
! comment, or whenever a backslash-newline appears in a \fB//\fR comment.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wtrigraphs\fR" 4
  .IX Item "-Wtrigraphs"
  Warn if any trigraphs are encountered that might change the meaning of
  the program.  Trigraphs within comments are not warned about,
--- 689,717 ----
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the directory containing
! target\-specific C++ headers.
! .IP \fB\-nostdinc\fR 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files.
  Only the directories explicitly specified with \fB\-I\fR,
  \&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
  options (and the directory of the current file, if appropriate) 
  are searched.
! .IP \fB\-nostdinc++\fR 4
  .IX Item "-nostdinc++"
! Do not search for header files in the C++\-specific standard directories,
  but do still search the other standard directories.  (This option is
! used when building the C++ library.)
! .IP \fB\-Wcomment\fR 4
  .IX Item "-Wcomment"
  .PD 0
! .IP \fB\-Wcomments\fR 4
  .IX Item "-Wcomments"
  .PD
! Warn whenever a comment\-start sequence \fB/*\fR appears in a \fB/*\fR
! comment, or whenever a backslash\-newline appears in a \fB//\fR comment.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wtrigraphs\fR 4
  .IX Item "-Wtrigraphs"
  Warn if any trigraphs are encountered that might change the meaning of
  the program.  Trigraphs within comments are not warned about,
*************** This option is implied by \fB\-Wall\fR.
*** 792,820 ****
  given, this option is still enabled unless trigraphs are enabled.  To
  get trigraph conversion without warnings, but get the other
  \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
! .IP "\fB\-Wundef\fR" 4
  .IX Item "-Wundef"
  Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
  Such identifiers are replaced with zero.
! .IP "\fB\-Wexpansion\-to\-defined\fR" 4
  .IX Item "-Wexpansion-to-defined"
  Warn whenever \fBdefined\fR is encountered in the expansion of a macro
  (including the case where the macro is expanded by an \fB#if\fR directive).
  Such usage is not portable.
  This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
! .IP "\fB\-Wunused\-macros\fR" 4
  .IX Item "-Wunused-macros"
  Warn about macros defined in the main file that are unused.  A macro
  is \fIused\fR if it is expanded or tested for existence at least once.
  The preprocessor also warns if the macro has not been used at the
  time it is redefined or undefined.
  .Sp
! Built-in macros, macros defined on the command line, and macros
  defined in include files are not warned about.
  .Sp
  \&\fINote:\fR If a macro is actually used, but only used in skipped
  conditional blocks, then the preprocessor reports it as unused.  To avoid the
! warning in such a case, you might improve the scope of the macro's
  definition by, for example, moving it into the first skipped block.
  Alternatively, you could provide a dummy use with something like:
  .Sp
--- 721,749 ----
  given, this option is still enabled unless trigraphs are enabled.  To
  get trigraph conversion without warnings, but get the other
  \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
! .IP \fB\-Wundef\fR 4
  .IX Item "-Wundef"
  Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
  Such identifiers are replaced with zero.
! .IP \fB\-Wexpansion\-to\-defined\fR 4
  .IX Item "-Wexpansion-to-defined"
  Warn whenever \fBdefined\fR is encountered in the expansion of a macro
  (including the case where the macro is expanded by an \fB#if\fR directive).
  Such usage is not portable.
  This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
! .IP \fB\-Wunused\-macros\fR 4
  .IX Item "-Wunused-macros"
  Warn about macros defined in the main file that are unused.  A macro
  is \fIused\fR if it is expanded or tested for existence at least once.
  The preprocessor also warns if the macro has not been used at the
  time it is redefined or undefined.
  .Sp
! Built\-in macros, macros defined on the command line, and macros
  defined in include files are not warned about.
  .Sp
  \&\fINote:\fR If a macro is actually used, but only used in skipped
  conditional blocks, then the preprocessor reports it as unused.  To avoid the
! warning in such a case, you might improve the scope of the macro\*(Aqs
  definition by, for example, moving it into the first skipped block.
  Alternatively, you could provide a dummy use with something like:
  .Sp
*************** Alternatively, you could provide a dummy
*** 822,828 ****
  \&        #if defined the_macro_causing_the_warning
  \&        #endif
  .Ve
! .IP "\fB\-Wno\-endif\-labels\fR" 4
  .IX Item "-Wno-endif-labels"
  Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
  This sometimes happens in older programs with code of the form
--- 751,757 ----
  \&        #if defined the_macro_causing_the_warning
  \&        #endif
  .Ve
! .IP \fB\-Wno\-endif\-labels\fR 4
  .IX Item "-Wno-endif-labels"
  Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
  This sometimes happens in older programs with code of the form
*************** This sometimes happens in older programs
*** 837,845 ****
  .Sp
  The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
  This warning is on by default.
! .SH "ENVIRONMENT"
  .IX Header "ENVIRONMENT"
! This section describes the environment variables that affect how \s-1CPP\s0
  operates.  You can use them to specify directories or prefixes to use
  when searching for include files, or to control dependency output.
  .PP
--- 766,774 ----
  .Sp
  The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
  This warning is on by default.
! .SH ENVIRONMENT
  .IX Header "ENVIRONMENT"
! This section describes the environment variables that affect how CPP
  operates.  You can use them to specify directories or prefixes to use
  when searching for include files, or to control dependency output.
  .PP
*************** Note that you can also specify places to
*** 847,870 ****
  \&\fB\-I\fR, and control dependency output with options like
  \&\fB\-M\fR.  These take precedence over
  environment variables, which in turn take precedence over the
! configuration of \s-1GCC.\s0
! .IP "\fB\s-1CPATH\s0\fR" 4
  .IX Item "CPATH"
  .PD 0
! .IP "\fBC_INCLUDE_PATH\fR" 4
  .IX Item "C_INCLUDE_PATH"
! .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
  .IX Item "CPLUS_INCLUDE_PATH"
! .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
  .IX Item "OBJC_INCLUDE_PATH"
  .PD
! Each variable's value is a list of directories separated by a special
! character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
! The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
! determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
  semicolon, and for almost all other targets it is a colon.
  .Sp
! \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
  specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
  options on the command line.  This environment variable is used
  regardless of which language is being preprocessed.
--- 776,799 ----
  \&\fB\-I\fR, and control dependency output with options like
  \&\fB\-M\fR.  These take precedence over
  environment variables, which in turn take precedence over the
! configuration of GCC.
! .IP \fBCPATH\fR 4
  .IX Item "CPATH"
  .PD 0
! .IP \fBC_INCLUDE_PATH\fR 4
  .IX Item "C_INCLUDE_PATH"
! .IP \fBCPLUS_INCLUDE_PATH\fR 4
  .IX Item "CPLUS_INCLUDE_PATH"
! .IP \fBOBJC_INCLUDE_PATH\fR 4
  .IX Item "OBJC_INCLUDE_PATH"
  .PD
! Each variable\*(Aqs value is a list of directories separated by a special
! character, much like \fBPATH\fR, in which to look for header files.
! The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target\-dependent and
! determined at GCC build time.  For Microsoft Windows\-based targets it is a
  semicolon, and for almost all other targets it is a colon.
  .Sp
! \&\fBCPATH\fR specifies a list of directories to be searched as if
  specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
  options on the command line.  This environment variable is used
  regardless of which language is being preprocessed.
*************** paths given with \fB\-isystem\fR options
*** 877,892 ****
  In all these variables, an empty element instructs the compiler to
  search its current working directory.  Empty elements can appear at the
  beginning or end of a path.  For instance, if the value of
! \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
  effect as \fB\-I.\ \-I/special/include\fR.
! .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
  .IX Item "DEPENDENCIES_OUTPUT"
  If this variable is set, its value specifies how to output
! dependencies for Make based on the non-system header files processed
  by the compiler.  System header files are ignored in the dependency
  output.
  .Sp
! The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
  which case the Make rules are written to that file, guessing the target
  name from the source file name.  Or the value can have the form
  \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
--- 806,821 ----
  In all these variables, an empty element instructs the compiler to
  search its current working directory.  Empty elements can appear at the
  beginning or end of a path.  For instance, if the value of
! \&\fBCPATH\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
  effect as \fB\-I.\ \-I/special/include\fR.
! .IP \fBDEPENDENCIES_OUTPUT\fR 4
  .IX Item "DEPENDENCIES_OUTPUT"
  If this variable is set, its value specifies how to output
! dependencies for Make based on the non\-system header files processed
  by the compiler.  System header files are ignored in the dependency
  output.
  .Sp
! The value of \fBDEPENDENCIES_OUTPUT\fR can be just a file name, in
  which case the Make rules are written to that file, guessing the target
  name from the source file name.  Or the value can have the form
  \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
*************** file \fIfile\fR using \fItarget\fR as th
*** 895,916 ****
  In other words, this environment variable is equivalent to combining
  the options \fB\-MM\fR and \fB\-MF\fR,
  with an optional \fB\-MT\fR switch too.
! .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
  .IX Item "SUNPRO_DEPENDENCIES"
! This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
  except that system header files are not ignored, so it implies
  \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
  main input file is omitted.
! .IP "\fB\s-1SOURCE_DATE_EPOCH\s0\fR" 4
  .IX Item "SOURCE_DATE_EPOCH"
! If this variable is set, its value specifies a \s-1UNIX\s0 timestamp to be
  used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
  and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
  reproducible.
  .Sp
! The value of \fB\s-1SOURCE_DATE_EPOCH\s0\fR must be a \s-1UNIX\s0 timestamp,
  defined as the number of seconds (excluding leap seconds) since
! 01 Jan 1970 00:00:00 represented in \s-1ASCII\s0; identical to the output of
  \&\f(CW\*(C`date +%s\*(C'\fR on GNU/Linux and other systems that support the
  \&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
  .Sp
--- 824,845 ----
  In other words, this environment variable is equivalent to combining
  the options \fB\-MM\fR and \fB\-MF\fR,
  with an optional \fB\-MT\fR switch too.
! .IP \fBSUNPRO_DEPENDENCIES\fR 4
  .IX Item "SUNPRO_DEPENDENCIES"
! This variable is the same as \fBDEPENDENCIES_OUTPUT\fR (see above),
  except that system header files are not ignored, so it implies
  \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
  main input file is omitted.
! .IP \fBSOURCE_DATE_EPOCH\fR 4
  .IX Item "SOURCE_DATE_EPOCH"
! If this variable is set, its value specifies a UNIX timestamp to be
  used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
  and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
  reproducible.
  .Sp
! The value of \fBSOURCE_DATE_EPOCH\fR must be a UNIX timestamp,
  defined as the number of seconds (excluding leap seconds) since
! 01 Jan 1970 00:00:00 represented in ASCII; identical to the output of
  \&\f(CW\*(C`date +%s\*(C'\fR on GNU/Linux and other systems that support the
  \&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
  .Sp
*************** time of the source or package and it sho
*** 919,945 ****
  process.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
! \&\fIgcc\fR\|(1), and the Info entries for \fIcpp\fR and \fIgcc\fR.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 1987\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 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
! man page \fIgfdl\fR\|(7).
! This manual contains no Invariant Sections.  The Front-Cover Texts are
! (a) (see below), and the Back-Cover Texts are (b) (see below).
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 848,874 ----
  process.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7),
! \&\fBgcc\fR\|(1), and the Info entries for \fIcpp\fR and \fIgcc\fR.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 1987\-2024 Free Software Foundation, Inc.
  .PP
  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
! man page \fBgfdl\fR\|(7).
! This manual contains no Invariant Sections.  The Front\-Cover Texts are
! (a) (see below), and the Back\-Cover Texts are (b) (see below).
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/cpp.info gcc-14.3.0-RC-20260619/gcc/doc/cpp.info
*** gcc-14.3.0/gcc/doc/cpp.info	Fri May 23 11:19:45 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/cpp.info	Fri Jun 19 07:07:44 2026
***************
*** 1,6 ****
! This is cpp.info, produced by makeinfo version 6.5 from cpp.texi.
  
! Copyright (C) 1987-2024 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
--- 1,6 ----
! This is cpp.info, produced by makeinfo version 7.1 from cpp.texi.
  
! Copyright © 1987-2024 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
*************** Obsolete Features
*** 130,136 ****
  * Obsolete Features::
  
  
!    Copyright (C) 1987-2024 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
--- 130,136 ----
  * Obsolete Features::
  
  
!    Copyright © 1987-2024 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
*************** File: cpp.info,  Node: Overview,  Next:
*** 157,166 ****
  1 Overview
  **********
  
! The C preprocessor, often known as "cpp", is a "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 you to
! define "macros", which are brief abbreviations for longer constructs.
  
     The C preprocessor is intended to be used only with C, C++, and
  Objective-C source code.  In the past, it has been abused as a general
--- 157,166 ----
  1 Overview
  **********
  
! The C preprocessor, often known as “cpp”, is a “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 you to
! define “macros”, which are brief abbreviations for longer constructs.
  
     The C preprocessor is intended to be used only with C, C++, and
  Objective-C source code.  In the past, it has been abused as a general
*************** will be removed, and the Makefile will n
*** 173,179 ****
  
     Having said that, you can often get away with using cpp on things
  which are not C.  Other Algol-ish programming languages are often safe
! (Ada, etc.)  So is assembly, with caution.  '-traditional-cpp' mode
  preserves more white space, and is otherwise more permissive.  Many of
  the problems can be avoided by writing C or C++ style comments instead
  of native language comments, and keeping macros simple.
--- 173,179 ----
  
     Having said that, you can often get away with using cpp on things
  which are not C.  Other Algol-ish programming languages are often safe
! (Ada, etc.)  So is assembly, with caution.  ‘-traditional-cpp’ mode
  preserves more white space, and is otherwise more permissive.  Many of
  the problems can be avoided by writing C or C++ style comments instead
  of native language comments, and keeping macros simple.
*************** Standard C.  In its default mode, the GN
*** 190,198 ****
  few things required by the standard.  These are features which are
  rarely, if ever, used, and may cause surprising changes to the meaning
  of a program which does not expect them.  To get strict ISO Standard C,
! you should use the '-std=c90', '-std=c99', '-std=c11' or '-std=c17'
  options, depending on which version of the standard you want.  To get
! all the mandatory diagnostics, you must also use '-pedantic'.  *Note
  Invocation::.
  
     This manual describes the behavior of the ISO preprocessor.  To
--- 190,198 ----
  few things required by the standard.  These are features which are
  rarely, if ever, used, and may cause surprising changes to the meaning
  of a program which does not expect them.  To get strict ISO Standard C,
! you should use the ‘-std=c90’, ‘-std=c99’, ‘-std=c11’ or ‘-std=c17’
  options, depending on which version of the standard you want.  To get
! all the mandatory diagnostics, you must also use ‘-pedantic’.  *Note
  Invocation::.
  
     This manual describes the behavior of the ISO preprocessor.  To
*************** does not conflict with traditional seman
*** 201,207 ****
  preprocessor should behave the same way.  The various differences that
  do exist are detailed in the section *note Traditional Mode::.
  
!    For clarity, unless noted otherwise, references to 'CPP' in this
  manual refer to GNU CPP.
  
  * Menu:
--- 201,207 ----
  preprocessor should behave the same way.  The various differences that
  do exist are detailed in the section *note Traditional Mode::.
  
!    For clarity, unless noted otherwise, references to ‘CPP’ in this
  manual refer to GNU CPP.
  
  * Menu:
*************** there are really at least four.
*** 224,247 ****
     The files input to CPP might be in any character set at all.  CPP's
  very first action, before it even looks for line boundaries, is to
  convert the file into the character set it uses for internal processing.
! That set is what the C standard calls the "source" character set.  It
  must be isomorphic with ISO 10646, also known as Unicode.  CPP uses the
  UTF-8 encoding of Unicode.
  
     The character sets of the input files are specified using the
! '-finput-charset=' option.
  
     All preprocessing work (the subject of the rest of this manual) is
  carried out in the source character set.  If you request textual output
! from the preprocessor with the '-E' option, it will be in UTF-8.
  
     After preprocessing is complete, string and character constants are
! converted again, into the "execution" character set.  This character set
  is under control of the user; the default is UTF-8, matching the source
  character set.  Wide string and character constants have their own
  character set, which is not called out specifically in the standard.
  Again, it is under control of the user.  The default is UTF-16 or
! UTF-32, whichever fits in the target's 'wchar_t' type, in the target
  machine's byte order.(1)  Octal and hexadecimal escape sequences do not
  undergo conversion; '\x12' has the value 0x12 regardless of the
  currently selected execution character set.  All other escapes are
--- 224,247 ----
     The files input to CPP might be in any character set at all.  CPP's
  very first action, before it even looks for line boundaries, is to
  convert the file into the character set it uses for internal processing.
! That set is what the C standard calls the “source” character set.  It
  must be isomorphic with ISO 10646, also known as Unicode.  CPP uses the
  UTF-8 encoding of Unicode.
  
     The character sets of the input files are specified using the
! ‘-finput-charset=’ option.
  
     All preprocessing work (the subject of the rest of this manual) is
  carried out in the source character set.  If you request textual output
! from the preprocessor with the ‘-E’ option, it will be in UTF-8.
  
     After preprocessing is complete, string and character constants are
! converted again, into the “execution” character set.  This character set
  is under control of the user; the default is UTF-8, matching the source
  character set.  Wide string and character constants have their own
  character set, which is not called out specifically in the standard.
  Again, it is under control of the user.  The default is UTF-16 or
! UTF-32, whichever fits in the target's ‘wchar_t’ type, in the target
  machine's byte order.(1)  Octal and hexadecimal escape sequences do not
  undergo conversion; '\x12' has the value 0x12 regardless of the
  currently selected execution character set.  All other escapes are
*************** represent, then converted to the executi
*** 250,264 ****
  unescaped characters.
  
     In identifiers, characters outside the ASCII range can be specified
! with the '\u' and '\U' escapes or used directly in the input encoding.
  If strict ISO C90 conformance is specified with an option such as
! '-std=c90', or '-fno-extended-identifiers' is used, then those
  constructs are not permitted in identifiers.
  
     ---------- Footnotes ----------
  
     (1) UTF-16 does not meet the requirements of the C standard for a
! wide character set, but the choice of 16-bit 'wchar_t' is enshrined in
  some system ABIs so we cannot fix this.
  
  
--- 250,264 ----
  unescaped characters.
  
     In identifiers, characters outside the ASCII range can be specified
! with the ‘\u’ and ‘\U’ escapes or used directly in the input encoding.
  If strict ISO C90 conformance is specified with an option such as
! ‘-std=c90’, or ‘-fno-extended-identifiers’ is used, then those
  constructs are not permitted in identifiers.
  
     ---------- Footnotes ----------
  
     (1) UTF-16 does not meet the requirements of the C standard for a
! wide character set, but the choice of 16-bit ‘wchar_t’ is enshrined in
  some system ABIs so we cannot fix this.
  
  
*************** standard.
*** 278,285 ****
    1. The input file is read into memory and broken into lines.
  
       Different systems use different conventions to indicate the end of
!      a line.  GCC accepts the ASCII control sequences 'LF', 'CR LF' and
!      'CR' as end-of-line markers.  These are the canonical sequences
       used by Unix, DOS and VMS, and the classic Mac OS (before OSX)
       respectively.  You may therefore safely copy source code written on
       any of those systems to a different one and use it without
--- 278,285 ----
    1. The input file is read into memory and broken into lines.
  
       Different systems use different conventions to indicate the end of
!      a line.  GCC accepts the ASCII control sequences ‘LF’, ‘CR LF’ and
!      ‘CR’ as end-of-line markers.  These are the canonical sequences
       used by Unix, DOS and VMS, and the classic Mac OS (before OSX)
       respectively.  You may therefore safely copy source code written on
       any of those systems to a different one and use it without
*************** standard.
*** 295,312 ****
  
    2. If trigraphs are enabled, they are replaced by their corresponding
       single characters.  By default GCC ignores trigraphs, but if you
!      request a strictly conforming mode with the '-std' option, or you
!      specify the '-trigraphs' option, then it converts them.
  
!      These are nine three-character sequences, all starting with '??',
       that are defined by ISO C to stand for single characters.  They
       permit obsolete systems that lack some of C's punctuation to use C.
!      For example, '??/' stands for '\', so '??/n' is a character
       constant for a newline.
  
       Trigraphs are not popular and many compilers implement them
       incorrectly.  Portable code should not rely on trigraphs being
!      either converted or ignored.  With '-Wtrigraphs' GCC will warn you
       when a trigraph may change the meaning of your program if it were
       converted.  *Note Wtrigraphs::.
  
--- 295,312 ----
  
    2. If trigraphs are enabled, they are replaced by their corresponding
       single characters.  By default GCC ignores trigraphs, but if you
!      request a strictly conforming mode with the ‘-std’ option, or you
!      specify the ‘-trigraphs’ option, then it converts them.
  
!      These are nine three-character sequences, all starting with ‘??’,
       that are defined by ISO C to stand for single characters.  They
       permit obsolete systems that lack some of C's punctuation to use C.
!      For example, ‘??/’ stands for ‘\’, so '??/n' is a character
       constant for a newline.
  
       Trigraphs are not popular and many compilers implement them
       incorrectly.  Portable code should not rely on trigraphs being
!      either converted or ignored.  With ‘-Wtrigraphs’ GCC will warn you
       when a trigraph may change the meaning of your program if it were
       converted.  *Note Wtrigraphs::.
  
*************** standard.
*** 314,320 ****
       from being confused with a trigraph by inserting a backslash
       between the question marks, or by separating the string literal at
       the trigraph and making use of string literal concatenation.
!      "(??\?)" is the string '(???)', not '(?]'.  Traditional C compilers
       do not recognize these idioms.
  
       The nine trigraphs and their replacements are
--- 314,320 ----
       from being confused with a trigraph by inserting a backslash
       between the question marks, or by separating the string literal at
       the trigraph and making use of string literal concatenation.
!      "(??\?)" is the string ‘(???)’, not ‘(?]’.  Traditional C compilers
       do not recognize these idioms.
  
       The nine trigraphs and their replacements are
*************** standard.
*** 324,337 ****
  
    3. Continued lines are merged into one long line.
  
!      A continued line is a line which ends with a backslash, '\'.  The
       backslash is removed and the following line is joined with the
       current one.  No space is inserted, so you may split a line
       anywhere, even in the middle of a word.  (It is generally more
       readable to split lines only at white space.)
  
       The trailing backslash on a continued line is commonly referred to
!      as a "backslash-newline".
  
       If there is white space between a backslash and the end of a line,
       that is still a continued line.  However, as this is usually the
--- 324,337 ----
  
    3. Continued lines are merged into one long line.
  
!      A continued line is a line which ends with a backslash, ‘\’.  The
       backslash is removed and the following line is joined with the
       current one.  No space is inserted, so you may split a line
       anywhere, even in the middle of a word.  (It is generally more
       readable to split lines only at white space.)
  
       The trailing backslash on a continued line is commonly referred to
!      as a “backslash-newline”.
  
       If there is white space between a backslash and the end of a line,
       that is still a continued line.  However, as this is usually the
*************** standard.
*** 340,351 ****
  
    4. All comments are replaced with single spaces.
  
!      There are two kinds of comments.  "Block comments" begin with '/*'
!      and continue until the next '*/'.  Block comments do not nest:
  
            /* this is /* one comment */ text outside comment
  
!      "Line comments" begin with '//' and continue to the end of the
       current line.  Line comments do not nest either, but it does not
       matter, because they would end in the same place anyway.
  
--- 340,351 ----
  
    4. All comments are replaced with single spaces.
  
!      There are two kinds of comments.  “Block comments” begin with ‘/*’
!      and continue until the next ‘*/’.  Block comments do not nest:
  
            /* this is /* one comment */ text outside comment
  
!      “Line comments” begin with ‘//’ and continue to the end of the
       current line.  Line comments do not nest either, but it does not
       matter, because they would end in the same place anyway.
  
*************** comment.
*** 368,374 ****
           oops! this isn't a comment anymore */
  
     Comments are not recognized within string literals.  "/* blah */" is
! the string constant '/* blah */', not an empty string.
  
     Line comments are not in the 1989 edition of the C standard, but they
  are recognized by GCC as an extension.  In C++ and in the 1999 edition
--- 368,374 ----
           oops! this isn't a comment anymore */
  
     Comments are not recognized within string literals.  "/* blah */" is
! the string constant ‘/* blah */’, not an empty string.
  
     Line comments are not in the 1989 edition of the C standard, but they
  are recognized by GCC as an extension.  In C++ and in the 1999 edition
*************** of the C standard, they are an official
*** 377,384 ****
     Since these transformations happen before all other processing, you
  can split a line mechanically with backslash-newline anywhere.  You can
  comment out the end of a line.  You can continue a line comment onto the
! next line with backslash-newline.  You can even split '/*', '*/', and
! '//' onto multiple lines with backslash-newline.  For example:
  
       /\
       *
--- 377,384 ----
     Since these transformations happen before all other processing, you
  can split a line mechanically with backslash-newline anywhere.  You can
  comment out the end of a line.  You can continue a line comment onto the
! next line with backslash-newline.  You can even split ‘/*’, ‘*/’, and
! ‘//’ onto multiple lines with backslash-newline.  For example:
  
       /\
       *
*************** next line with backslash-newline.  You c
*** 388,394 ****
       O 10\
       20
  
! is equivalent to '#define FOO 1020'.  All these tricks are extremely
  confusing and should not be used in code intended to be readable.
  
     There is no way to prevent a backslash at the end of a line from
--- 388,394 ----
       O 10\
       20
  
! is equivalent to ‘#define FOO 1020’.  All these tricks are extremely
  confusing and should not be used in code intended to be readable.
  
     There is no way to prevent a backslash at the end of a line from
*************** File: cpp.info,  Node: Tokenization,  Ne
*** 402,408 ****
  ================
  
  After the textual transformations are finished, the input file is
! converted into a sequence of "preprocessing tokens".  These mostly
  correspond to the syntactic tokens used by the C compiler, but there are
  a few differences.  White space separates tokens; it is not itself a
  token of any kind.  Tokens do not have to be separated by white space,
--- 402,408 ----
  ================
  
  After the textual transformations are finished, the input file is
! converted into a sequence of “preprocessing tokens”.  These mostly
  correspond to the syntactic tokens used by the C compiler, but there are
  a few differences.  White space separates tokens; it is not itself a
  token of any kind.  Tokens do not have to be separated by white space,
*************** but it is often necessary to avoid ambig
*** 411,441 ****
     When faced with a sequence of characters that has more than one
  possible tokenization, the preprocessor is greedy.  It always makes each
  token, starting from the left, as big as possible before moving on to
! the next token.  For instance, 'a+++++b' is interpreted as
! 'a ++ ++ + b', not as 'a ++ + ++ b', even though the latter tokenization
  could be part of a valid C program and the former could not.
  
     Once the input file is broken into tokens, the token boundaries never
! change, except when the '##' preprocessing operator is used to paste
  tokens together.  *Note Concatenation::.  For example,
  
       #define foo() bar
       foo()baz
!           ==> bar baz
       _not_
!           ==> barbaz
  
     The compiler does not re-tokenize the preprocessor's output.  Each
  preprocessing token becomes one compiler token.
  
     Preprocessing tokens fall into five broad classes: identifiers,
  preprocessing numbers, string literals, punctuators, and other.  An
! "identifier" is the same as an identifier in C: any sequence of letters,
  digits, or underscores, which begins with a letter or underscore.
  Keywords of C have no significance to the preprocessor; they are
  ordinary identifiers.  You can define a macro whose name is a keyword,
  for instance.  The only identifier which can be considered a
! preprocessing keyword is 'defined'.  *Note Defined::.
  
     This is mostly true of other languages which use the C preprocessor.
  However, a few of the keywords of C++ are significant even in the
--- 411,441 ----
     When faced with a sequence of characters that has more than one
  possible tokenization, the preprocessor is greedy.  It always makes each
  token, starting from the left, as big as possible before moving on to
! the next token.  For instance, ‘a+++++b’ is interpreted as
! ‘a ++ ++ + b’, not as ‘a ++ + ++ b’, even though the latter tokenization
  could be part of a valid C program and the former could not.
  
     Once the input file is broken into tokens, the token boundaries never
! change, except when the ‘##’ preprocessing operator is used to paste
  tokens together.  *Note Concatenation::.  For example,
  
       #define foo() bar
       foo()baz
!           ↦ bar baz
       _not_
!           ↦ barbaz
  
     The compiler does not re-tokenize the preprocessor's output.  Each
  preprocessing token becomes one compiler token.
  
     Preprocessing tokens fall into five broad classes: identifiers,
  preprocessing numbers, string literals, punctuators, and other.  An
! “identifier” is the same as an identifier in C: any sequence of letters,
  digits, or underscores, which begins with a letter or underscore.
  Keywords of C have no significance to the preprocessor; they are
  ordinary identifiers.  You can define a macro whose name is a keyword,
  for instance.  The only identifier which can be considered a
! preprocessing keyword is ‘defined’.  *Note Defined::.
  
     This is mostly true of other languages which use the C preprocessor.
  However, a few of the keywords of C++ are significant even in the
*************** preprocessor.  *Note C++ Named Operators
*** 445,486 ****
  part of the "basic source character set", at the implementation's
  discretion (such as accented Latin letters, Greek letters, or Chinese
  ideograms).  This may be done with an extended character set, or the
! '\u' and '\U' escape sequences.
  
!    As an extension, GCC treats '$' as a letter.  This is for
! compatibility with some systems, such as VMS, where '$' is commonly used
! in system-defined function and object names.  '$' is not a letter in
! strictly conforming mode, or if you specify the '-$' option.  *Note
  Invocation::.
  
!    A "preprocessing number" has a rather bizarre definition.  The
  category includes all the normal integer and floating point constants
  one expects of C, but also a number of other things one might not
  initially recognize as a number.  Formally, preprocessing numbers begin
  with an optional period, a required decimal digit, and then continue
  with any sequence of letters, digits, underscores, periods, and
! exponents.  Exponents are the two-character sequences 'e+', 'e-', 'E+',
! 'E-', 'p+', 'p-', 'P+', and 'P-'.  (The exponents that begin with 'p' or
! 'P' are used for hexadecimal floating-point constants.)
  
     The purpose of this unusual definition is to isolate the preprocessor
  from the full complexity of numeric constants.  It does not have to
  distinguish between lexically valid and invalid floating-point numbers,
  which is complicated.  The definition also permits you to split an
  identifier at any position and get exactly two tokens, which can then be
! pasted back together with the '##' operator.
  
     It's possible for preprocessing numbers to cause programs to be
! misinterpreted.  For example, '0xE+12' is a preprocessing number which
  does not translate to any valid numeric constant, therefore a syntax
! error.  It does not mean '0xE + 12', which is what you might have
  intended.
  
!    "String literals" are string constants, character constants, and
! header file names (the argument of '#include').(1)  String constants and
  character constants are straightforward: "..." or '...'.  In either case
  embedded quotes should be escaped with a backslash: '\'' is the
! character constant for '''.  There is no limit on the length of a
  character constant, but the value of a character constant that contains
  more than one character is implementation-defined.  *Note Implementation
  Details::.
--- 445,486 ----
  part of the "basic source character set", at the implementation's
  discretion (such as accented Latin letters, Greek letters, or Chinese
  ideograms).  This may be done with an extended character set, or the
! ‘\u’ and ‘\U’ escape sequences.
  
!    As an extension, GCC treats ‘$’ as a letter.  This is for
! compatibility with some systems, such as VMS, where ‘$’ is commonly used
! in system-defined function and object names.  ‘$’ is not a letter in
! strictly conforming mode, or if you specify the ‘-$’ option.  *Note
  Invocation::.
  
!    A “preprocessing number” has a rather bizarre definition.  The
  category includes all the normal integer and floating point constants
  one expects of C, but also a number of other things one might not
  initially recognize as a number.  Formally, preprocessing numbers begin
  with an optional period, a required decimal digit, and then continue
  with any sequence of letters, digits, underscores, periods, and
! exponents.  Exponents are the two-character sequences ‘e+’, ‘e-’, ‘E+’,
! ‘E-’, ‘p+’, ‘p-’, ‘P+’, and ‘P-’.  (The exponents that begin with ‘p’ or
! ‘P’ are used for hexadecimal floating-point constants.)
  
     The purpose of this unusual definition is to isolate the preprocessor
  from the full complexity of numeric constants.  It does not have to
  distinguish between lexically valid and invalid floating-point numbers,
  which is complicated.  The definition also permits you to split an
  identifier at any position and get exactly two tokens, which can then be
! pasted back together with the ‘##’ operator.
  
     It's possible for preprocessing numbers to cause programs to be
! misinterpreted.  For example, ‘0xE+12’ is a preprocessing number which
  does not translate to any valid numeric constant, therefore a syntax
! error.  It does not mean ‘0xE + 12’, which is what you might have
  intended.
  
!    “String literals” are string constants, character constants, and
! header file names (the argument of ‘#include’).(1)  String constants and
  character constants are straightforward: "..." or '...'.  In either case
  embedded quotes should be escaped with a backslash: '\'' is the
! character constant for ‘'’.  There is no limit on the length of a
  character constant, but the value of a character constant that contains
  more than one character is implementation-defined.  *Note Implementation
  Details::.
*************** Operation::.
*** 495,506 ****
     No string literal may extend past the end of a line.  You may use
  continued lines instead, or string constant concatenation.
  
!    "Punctuators" are all the usual bits of punctuation which are
  meaningful to C and C++.  All but three of the punctuation characters in
! ASCII are C punctuators.  The exceptions are '@', '$', and '`'.  In
  addition, all the two- and three-character operators are punctuators.
! There are also six "digraphs", which the C++ standard calls "alternative
! tokens", which are merely alternate ways to spell other punctuators.
  This is a second attempt to work around missing punctuation in obsolete
  systems.  It has no negative side effects, unlike trigraphs, but does
  not cover as much ground.  The digraphs and their corresponding normal
--- 495,506 ----
     No string literal may extend past the end of a line.  You may use
  continued lines instead, or string constant concatenation.
  
!    “Punctuators” are all the usual bits of punctuation which are
  meaningful to C and C++.  All but three of the punctuation characters in
! ASCII are C punctuators.  The exceptions are ‘@’, ‘$’, and ‘`’.  In
  addition, all the two- and three-character operators are punctuators.
! There are also six “digraphs”, which the C++ standard calls “alternative
! tokens”, which are merely alternate ways to spell other punctuators.
  This is a second attempt to work around missing punctuation in obsolete
  systems.  It has no negative side effects, unlike trigraphs, but does
  not cover as much ground.  The digraphs and their corresponding normal
*************** punctuators are:
*** 512,519 ****
     Any other single byte is considered "other" and passed on to the
  preprocessor's output unchanged.  The C compiler will almost certainly
  reject source code containing "other" tokens.  In ASCII, the only
! "other" characters are '@', '$', '`', and control characters other than
! NUL (all bits zero).  (Note that '$' is normally considered a letter.)
  All bytes with the high bit set (numeric range 0x7F-0xFF) that were not
  succesfully interpreted as part of an extended character in the input
  encoding are also "other" in the present implementation.
--- 512,519 ----
     Any other single byte is considered "other" and passed on to the
  preprocessor's output unchanged.  The C compiler will almost certainly
  reject source code containing "other" tokens.  In ASCII, the only
! "other" characters are ‘@’, ‘$’, ‘`’, and control characters other than
! NUL (all bits zero).  (Note that ‘$’ is normally considered a letter.)
  All bytes with the high bit set (numeric range 0x7F-0xFF) that were not
  succesfully interpreted as part of an extended character in the input
  encoding are also "other" in the present implementation.
*************** have the same meaning.
*** 528,541 ****
       #define X^@1
       #define X 1
  
! (where '^@' is ASCII NUL).  Within string or character constants, NULs
  are preserved.  In the latter two cases the preprocessor emits a warning
  message.
  
     ---------- Footnotes ----------
  
!    (1) The C standard uses the term "string literal" to refer only to
! what we are calling "string constants".
  
  
  File: cpp.info,  Node: The preprocessing language,  Prev: Tokenization,  Up: Overview
--- 528,541 ----
       #define X^@1
       #define X 1
  
! (where ‘^@’ is ASCII NUL).  Within string or character constants, NULs
  are preserved.  In the latter two cases the preprocessor emits a warning
  message.
  
     ---------- Footnotes ----------
  
!    (1) The C standard uses the term “string literal” to refer only to
! what we are calling “string constants”.
  
  
  File: cpp.info,  Node: The preprocessing language,  Prev: Tokenization,  Up: Overview
*************** File: cpp.info,  Node: The preprocessing
*** 545,589 ****
  
  After tokenization, the stream of tokens may simply be passed straight
  to the compiler's parser.  However, if it contains any operations in the
! "preprocessing language", it will be transformed first.  This stage
  corresponds roughly to the standard's "translation phase 4" and is what
  most people think of as the preprocessor's job.
  
!    The preprocessing language consists of "directives" to be executed
! and "macros" to be expanded.  Its primary capabilities are:
  
!    * Inclusion of header files.  These are files of declarations that
       can be substituted into your program.
  
!    * Macro expansion.  You can define "macros", which are abbreviations
       for arbitrary fragments of C code.  The preprocessor will replace
       the macros with their definitions throughout the program.  Some
       macros are automatically defined for you.
  
!    * Conditional compilation.  You can include or exclude parts of the
       program according to various conditions.
  
!    * Line control.  If you use a program to combine or rearrange source
       files into an intermediate file which is then compiled, you can use
       line control to inform the compiler where each source line
       originally came from.
  
!    * Diagnostics.  You can detect problems at compile time and issue
       errors or warnings.
  
     There are a few more, less useful, features.
  
     Except for expansion of predefined macros, all these operations are
! triggered with "preprocessing directives".  Preprocessing directives are
! lines in your program that start with '#'.  Whitespace is allowed before
! and after the '#'.  The '#' is followed by an identifier, the "directive
! name".  It specifies the operation to perform.  Directives are commonly
! referred to as '#NAME' where NAME is the directive name.  For example,
! '#define' is the directive that defines a macro.
  
!    The '#' which begins a directive cannot come from a macro expansion.
! Also, the directive name is not macro expanded.  Thus, if 'foo' is
! defined as a macro expanding to 'define', that does not make '#foo' a
  valid preprocessing directive.
  
     The set of valid directive names is fixed.  Programs cannot define
--- 545,589 ----
  
  After tokenization, the stream of tokens may simply be passed straight
  to the compiler's parser.  However, if it contains any operations in the
! “preprocessing language”, it will be transformed first.  This stage
  corresponds roughly to the standard's "translation phase 4" and is what
  most people think of as the preprocessor's job.
  
!    The preprocessing language consists of “directives” to be executed
! and “macros” to be expanded.  Its primary capabilities are:
  
!    • Inclusion of header files.  These are files of declarations that
       can be substituted into your program.
  
!    • Macro expansion.  You can define “macros”, which are abbreviations
       for arbitrary fragments of C code.  The preprocessor will replace
       the macros with their definitions throughout the program.  Some
       macros are automatically defined for you.
  
!    • Conditional compilation.  You can include or exclude parts of the
       program according to various conditions.
  
!    • Line control.  If you use a program to combine or rearrange source
       files into an intermediate file which is then compiled, you can use
       line control to inform the compiler where each source line
       originally came from.
  
!    • Diagnostics.  You can detect problems at compile time and issue
       errors or warnings.
  
     There are a few more, less useful, features.
  
     Except for expansion of predefined macros, all these operations are
! triggered with “preprocessing directives”.  Preprocessing directives are
! lines in your program that start with ‘#’.  Whitespace is allowed before
! and after the ‘#’.  The ‘#’ is followed by an identifier, the “directive
! name”.  It specifies the operation to perform.  Directives are commonly
! referred to as ‘#NAME’ where NAME is the directive name.  For example,
! ‘#define’ is the directive that defines a macro.
  
!    The ‘#’ which begins a directive cannot come from a macro expansion.
! Also, the directive name is not macro expanded.  Thus, if ‘foo’ is
! defined as a macro expanding to ‘define’, that does not make ‘#foo’ a
  valid preprocessing directive.
  
     The set of valid directive names is fixed.  Programs cannot define
*************** new preprocessing directives.
*** 591,597 ****
  
     Some directives require arguments; these make up the rest of the
  directive line and must be separated from the directive name by
! whitespace.  For example, '#define' must be followed by a macro name and
  the intended expansion of the macro.
  
     A preprocessing directive cannot cover more than one line.  The line
--- 591,597 ----
  
     Some directives require arguments; these make up the rest of the
  directive line and must be separated from the directive name by
! whitespace.  For example, ‘#define’ must be followed by a macro name and
  the intended expansion of the macro.
  
     A preprocessing directive cannot cover more than one line.  The line
*************** File: cpp.info,  Node: Header Files,  Ne
*** 608,624 ****
  
  A header file is a file containing C declarations and macro definitions
  (*note Macros::) to be shared between several source files.  You request
! the use of a header file in your program by "including" it, with the C
! preprocessing directive '#include'.
  
     Header files serve two purposes.
  
!    * System header files declare the interfaces to parts of the
       operating system.  You include them in your program to supply the
       definitions and declarations you need to invoke system calls and
       libraries.
  
!    * Your own header files contain declarations for interfaces between
       the source files of your program.  Each time you have a group of
       related declarations and macro definitions all or most of which are
       needed in several different source files, it is a good idea to
--- 608,624 ----
  
  A header file is a file containing C declarations and macro definitions
  (*note Macros::) to be shared between several source files.  You request
! the use of a header file in your program by “including” it, with the C
! preprocessing directive ‘#include’.
  
     Header files serve two purposes.
  
!    • System header files declare the interfaces to parts of the
       operating system.  You include them in your program to supply the
       definitions and declarations you need to invoke system calls and
       libraries.
  
!    • Your own header files contain declarations for interfaces between
       the source files of your program.  Each time you have a group of
       related declarations and macro definitions all or most of which are
       needed in several different source files, it is a good idea to
*************** as the risk that a failure to find one c
*** 635,641 ****
  inconsistencies within a program.
  
     In C, the usual convention is to give header files names that end
! with '.h'.  It is most portable to use only letters, digits, dashes, and
  underscores in header file names, and at most one dot.
  
  * Menu:
--- 635,641 ----
  inconsistencies within a program.
  
     In C, the usual convention is to give header files names that end
! with ‘.h’.  It is most portable to use only letters, digits, dashes, and
  underscores in header file names, and at most one dot.
  
  * Menu:
*************** File: cpp.info,  Node: Include Syntax,
*** 656,688 ****
  ==================
  
  Both user and system header files are included using the preprocessing
! directive '#include'.  It has two variants:
  
! '#include <FILE>'
       This variant is used for system header files.  It searches for a
       file named FILE in a standard list of system directories.  You can
!      prepend directories to this list with the '-I' option (*note
       Invocation::).
  
! '#include "FILE"'
       This variant is used for header files of your own program.  It
       searches for a file named FILE first in the directory containing
       the current file, then in the quote directories and then the same
!      directories used for '<FILE>'.  You can prepend directories to the
!      list of quote directories with the '-iquote' option.
  
!    The argument of '#include', whether delimited with quote marks or
  angle brackets, behaves like a string constant in that comments are not
! recognized, and macro names are not expanded.  Thus, '#include <x/*y>'
! specifies inclusion of a system header file named 'x/*y'.
  
     However, if backslashes occur within FILE, they are considered
  ordinary text characters, not escape characters.  None of the character
  escape sequences appropriate to string constants in C are processed.
! Thus, '#include "x\n\\y"' specifies a filename containing three
! backslashes.  (Some systems interpret '\' as a pathname separator.  All
! of these also interpret '/' the same way.  It is most portable to use
! only '/'.)
  
     It is an error if there is anything (other than comments) on the line
  after the file name.
--- 656,688 ----
  ==================
  
  Both user and system header files are included using the preprocessing
! directive ‘#include’.  It has two variants:
  
! ‘#include <FILE>’
       This variant is used for system header files.  It searches for a
       file named FILE in a standard list of system directories.  You can
!      prepend directories to this list with the ‘-I’ option (*note
       Invocation::).
  
! ‘#include "FILE"’
       This variant is used for header files of your own program.  It
       searches for a file named FILE first in the directory containing
       the current file, then in the quote directories and then the same
!      directories used for ‘<FILE>’.  You can prepend directories to the
!      list of quote directories with the ‘-iquote’ option.
  
!    The argument of ‘#include’, whether delimited with quote marks or
  angle brackets, behaves like a string constant in that comments are not
! recognized, and macro names are not expanded.  Thus, ‘#include <x/*y>’
! specifies inclusion of a system header file named ‘x/*y’.
  
     However, if backslashes occur within FILE, they are considered
  ordinary text characters, not escape characters.  None of the character
  escape sequences appropriate to string constants in C are processed.
! Thus, ‘#include "x\n\\y"’ specifies a filename containing three
! backslashes.  (Some systems interpret ‘\’ as a pathname separator.  All
! of these also interpret ‘/’ the same way.  It is most portable to use
! only ‘/’.)
  
     It is an error if there is anything (other than comments) on the line
  after the file name.
*************** File: cpp.info,  Node: Include Operation
*** 693,709 ****
  2.2 Include Operation
  =====================
  
! The '#include' directive works by directing the C preprocessor to scan
  the specified file as input before continuing with the rest of the
  current file.  The output from the preprocessor contains the output
  already generated, followed by the output resulting from the included
  file, followed by the output that comes from the text after the
! '#include' directive.  For example, if you have a header file 'header.h'
  as follows,
  
       char *test (void);
  
! and a main program called 'program.c' that uses the header file, like
  this,
  
       int x;
--- 693,709 ----
  2.2 Include Operation
  =====================
  
! The ‘#include’ directive works by directing the C preprocessor to scan
  the specified file as input before continuing with the rest of the
  current file.  The output from the preprocessor contains the output
  already generated, followed by the output resulting from the included
  file, followed by the output that comes from the text after the
! ‘#include’ directive.  For example, if you have a header file ‘header.h’
  as follows,
  
       char *test (void);
  
! and a main program called ‘program.c’ that uses the header file, like
  this,
  
       int x;
*************** this,
*** 715,721 ****
         puts (test ());
       }
  
! the compiler will see the same token stream as it would if 'program.c'
  read
  
       int x;
--- 715,721 ----
         puts (test ());
       }
  
! the compiler will see the same token stream as it would if ‘program.c’
  read
  
       int x;
*************** the file.
*** 741,747 ****
  syntactic units--function declarations or definitions, type
  declarations, etc.
  
!    The line following the '#include' directive is always treated as a
  separate line by the C preprocessor, even if the included file lacks a
  final newline.
  
--- 741,747 ----
  syntactic units--function declarations or definitions, type
  declarations, etc.
  
!    The line following the ‘#include’ directive is always treated as a
  separate line by the C preprocessor, even if the included file lacks a
  final newline.
  
*************** File: cpp.info,  Node: Search Path,  Nex
*** 752,793 ****
  ===============
  
  By default, the preprocessor looks for header files included by the
! quote form of the directive '#include "FILE"' first relative to the
  directory of the current file, and then in a preconfigured list of
! standard system directories.  For example, if '/usr/include/sys/stat.h'
! contains '#include "types.h"', GCC looks for 'types.h' first in
! '/usr/include/sys', then in its usual search path.
  
!    For the angle-bracket form '#include <FILE>', the preprocessor's
  default behavior is to look only in the standard system directories.
  The exact search directory list depends on the target system, how GCC is
  configured, and where it is installed.  You can find the default search
! directory list for your version of CPP by invoking it with the '-v'
  option.  For example,
  
       cpp -v /dev/null -o /dev/null
  
     There are a number of command-line options you can use to add
  additional directories to the search path.  The most commonly-used
! option is '-IDIR', which causes DIR to be searched after the current
  directory (for the quote form of the directive) and ahead of the
! standard system directories.  You can specify multiple '-I' options on
  the command line, in which case the directories are searched in
  left-to-right order.
  
     If you need separate control over the search paths for the quote and
! angle-bracket forms of the '#include' directive, you can use the
! '-iquote' and/or '-isystem' options instead of '-I'.  *Note
  Invocation::, for a detailed description of these options, as well as
  others that are less generally useful.
  
!    If you specify other options on the command line, such as '-I', that
  affect where the preprocessor searches for header files, the directory
! list printed by the '-v' option reflects the actual search path used by
  the preprocessor.
  
     Note that you can also prevent the preprocessor from searching any of
! the default system header directories with the '-nostdinc' option.  This
  is useful when you are compiling an operating system kernel or some
  other program that does not use the standard C library facilities, or
  the standard C library itself.
--- 752,793 ----
  ===============
  
  By default, the preprocessor looks for header files included by the
! quote form of the directive ‘#include "FILE"’ first relative to the
  directory of the current file, and then in a preconfigured list of
! standard system directories.  For example, if ‘/usr/include/sys/stat.h’
! contains ‘#include "types.h"’, GCC looks for ‘types.h’ first in
! ‘/usr/include/sys’, then in its usual search path.
  
!    For the angle-bracket form ‘#include <FILE>’, the preprocessor's
  default behavior is to look only in the standard system directories.
  The exact search directory list depends on the target system, how GCC is
  configured, and where it is installed.  You can find the default search
! directory list for your version of CPP by invoking it with the ‘-v’
  option.  For example,
  
       cpp -v /dev/null -o /dev/null
  
     There are a number of command-line options you can use to add
  additional directories to the search path.  The most commonly-used
! option is ‘-IDIR’, which causes DIR to be searched after the current
  directory (for the quote form of the directive) and ahead of the
! standard system directories.  You can specify multiple ‘-I’ options on
  the command line, in which case the directories are searched in
  left-to-right order.
  
     If you need separate control over the search paths for the quote and
! angle-bracket forms of the ‘#include’ directive, you can use the
! ‘-iquote’ and/or ‘-isystem’ options instead of ‘-I’.  *Note
  Invocation::, for a detailed description of these options, as well as
  others that are less generally useful.
  
!    If you specify other options on the command line, such as ‘-I’, that
  affect where the preprocessor searches for header files, the directory
! list printed by the ‘-v’ option reflects the actual search path used by
  the preprocessor.
  
     Note that you can also prevent the preprocessor from searching any of
! the default system header directories with the ‘-nostdinc’ option.  This
  is useful when you are compiling an operating system kernel or some
  other program that does not use the standard C library facilities, or
  the standard C library itself.
*************** contents of the file in a conditional, l
*** 814,835 ****
  
       #endif /* !FILE_FOO_SEEN */
  
!    This construct is commonly known as a "wrapper #ifndef".  When the
  header is included again, the conditional will be false, because
! 'FILE_FOO_SEEN' is defined.  The preprocessor will skip over the entire
  contents of the file, and the compiler will not see it twice.
  
     CPP optimizes even further.  It remembers when a header file has a
! wrapper '#ifndef'.  If a subsequent '#include' specifies that header,
! and the macro in the '#ifndef' is still defined, it does not bother to
  rescan the file at all.
  
     You can put comments outside the wrapper.  They will not interfere
  with this optimization.
  
!    The macro 'FILE_FOO_SEEN' is called the "controlling macro" or "guard
! macro".  In a user header file, the macro name should not begin with
! '_'.  In a system header file, it should begin with '__' to avoid
  conflicts with user programs.  In any kind of header file, the macro
  name should contain the name of the file and some additional text, to
  avoid conflicts with other header files.
--- 814,835 ----
  
       #endif /* !FILE_FOO_SEEN */
  
!    This construct is commonly known as a “wrapper #ifndef”.  When the
  header is included again, the conditional will be false, because
! ‘FILE_FOO_SEEN’ is defined.  The preprocessor will skip over the entire
  contents of the file, and the compiler will not see it twice.
  
     CPP optimizes even further.  It remembers when a header file has a
! wrapper ‘#ifndef’.  If a subsequent ‘#include’ specifies that header,
! and the macro in the ‘#ifndef’ is still defined, it does not bother to
  rescan the file at all.
  
     You can put comments outside the wrapper.  They will not interfere
  with this optimization.
  
!    The macro ‘FILE_FOO_SEEN’ is called the “controlling macro” or “guard
! macro”.  In a user header file, the macro name should not begin with
! ‘_’.  In a system header file, it should begin with ‘__’ to avoid
  conflicts with user programs.  In any kind of header file, the macro
  name should contain the name of the file and some additional text, to
  avoid conflicts with other header files.
*************** File: cpp.info,  Node: Alternatives to W
*** 841,870 ****
  ===================================
  
  CPP supports two more ways of indicating that a header file should be
! read only once.  Neither one is as portable as a wrapper '#ifndef' and
  we recommend you do not use them in new programs, with the caveat that
! '#import' is standard practice in Objective-C.
  
!    CPP supports a variant of '#include' called '#import' which includes
! a file, but does so at most once.  If you use '#import' instead of
! '#include', then you don't need the conditionals inside the header file
! to prevent multiple inclusion of the contents.  '#import' is standard in
  Objective-C, but is considered a deprecated extension in C and C++.
  
!    '#import' is not a well designed feature.  It requires the users of a
  header file to know that it should only be included once.  It is much
  better for the header file's implementor to write the file so that users
! don't need to know this.  Using a wrapper '#ifndef' accomplishes this
  goal.
  
!    In the present implementation, a single use of '#import' will prevent
! the file from ever being read again, by either '#import' or '#include'.
! You should not rely on this; do not use both '#import' and '#include' to
  refer to the same header file.
  
     Another way to prevent a header file from being included more than
! once is with the '#pragma once' directive (*note Pragmas::).  '#pragma
! once' does not have the problems that '#import' does, but it is not
  recognized by all preprocessors, so you cannot rely on it in a portable
  program.
  
--- 841,870 ----
  ===================================
  
  CPP supports two more ways of indicating that a header file should be
! read only once.  Neither one is as portable as a wrapper ‘#ifndef’ and
  we recommend you do not use them in new programs, with the caveat that
! ‘#import’ is standard practice in Objective-C.
  
!    CPP supports a variant of ‘#include’ called ‘#import’ which includes
! a file, but does so at most once.  If you use ‘#import’ instead of
! ‘#include’, then you don't need the conditionals inside the header file
! to prevent multiple inclusion of the contents.  ‘#import’ is standard in
  Objective-C, but is considered a deprecated extension in C and C++.
  
!    ‘#import’ is not a well designed feature.  It requires the users of a
  header file to know that it should only be included once.  It is much
  better for the header file's implementor to write the file so that users
! don't need to know this.  Using a wrapper ‘#ifndef’ accomplishes this
  goal.
  
!    In the present implementation, a single use of ‘#import’ will prevent
! the file from ever being read again, by either ‘#import’ or ‘#include’.
! You should not rely on this; do not use both ‘#import’ and ‘#include’ to
  refer to the same header file.
  
     Another way to prevent a header file from being included more than
! once is with the ‘#pragma once’ directive (*note Pragmas::).  ‘#pragma
! once’ does not have the problems that ‘#import’ does, but it is not
  recognized by all preprocessors, so you cannot rely on it in a portable
  program.
  
*************** systems, for instance.  You could do thi
*** 888,915 ****
       #endif
  
     That rapidly becomes tedious.  Instead, the preprocessor offers the
! ability to use a macro for the header name.  This is called a "computed
! include".  Instead of writing a header name as the direct argument of
! '#include', you simply put a macro name there instead:
  
       #define SYSTEM_H "system_1.h"
       ...
       #include SYSTEM_H
  
! 'SYSTEM_H' will be expanded, and the preprocessor will look for
! 'system_1.h' as if the '#include' had been written that way originally.
! 'SYSTEM_H' could be defined by your Makefile with a '-D' option.
  
!    You must be careful when you define the macro.  '#define' saves
  tokens, not text.  The preprocessor has no way of knowing that the macro
! will be used as the argument of '#include', so it generates ordinary
  tokens, not a header name.  This is unlikely to cause problems if you
  use double-quote includes, which are close enough to string constants.
  If you use angle brackets, however, you may have trouble.
  
     The syntax of a computed include is actually a bit more general than
! the above.  If the first non-whitespace character after '#include' is
! not '"' or '<', then the entire line is macro-expanded like running text
  would be.
  
     If the line expands to a single string constant, the contents of that
--- 888,915 ----
       #endif
  
     That rapidly becomes tedious.  Instead, the preprocessor offers the
! ability to use a macro for the header name.  This is called a “computed
! include”.  Instead of writing a header name as the direct argument of
! ‘#include’, you simply put a macro name there instead:
  
       #define SYSTEM_H "system_1.h"
       ...
       #include SYSTEM_H
  
! ‘SYSTEM_H’ will be expanded, and the preprocessor will look for
! ‘system_1.h’ as if the ‘#include’ had been written that way originally.
! ‘SYSTEM_H’ could be defined by your Makefile with a ‘-D’ option.
  
!    You must be careful when you define the macro.  ‘#define’ saves
  tokens, not text.  The preprocessor has no way of knowing that the macro
! will be used as the argument of ‘#include’, so it generates ordinary
  tokens, not a header name.  This is unlikely to cause problems if you
  use double-quote includes, which are close enough to string constants.
  If you use angle brackets, however, you may have trouble.
  
     The syntax of a computed include is actually a bit more general than
! the above.  If the first non-whitespace character after ‘#include’ is
! not ‘"’ or ‘<’, then the entire line is macro-expanded like running text
  would be.
  
     If the line expands to a single string constant, the contents of that
*************** escapes in the string.  Therefore
*** 920,933 ****
       #define HEADER "a\"b"
       #include HEADER
  
! looks for a file named 'a\"b'.  CPP searches for the file according to
  the rules for double-quoted includes.
  
!    If the line expands to a token stream beginning with a '<' token and
! including a '>' token, then the tokens between the '<' and the first '>'
  are combined to form the filename to be included.  Any whitespace
  between tokens is reduced to a single space; then any space after the
! initial '<' is retained, but a trailing space before the closing '>' is
  ignored.  CPP searches for the file according to the rules for
  angle-bracket includes.
  
--- 920,933 ----
       #define HEADER "a\"b"
       #include HEADER
  
! looks for a file named ‘a\"b’.  CPP searches for the file according to
  the rules for double-quoted includes.
  
!    If the line expands to a token stream beginning with a ‘<’ token and
! including a ‘>’ token, then the tokens between the ‘<’ and the first ‘>’
  are combined to form the filename to be included.  Any whitespace
  between tokens is reduced to a single space; then any space after the
! initial ‘<’ is retained, but a trailing space before the closing ‘>’ is
  ignored.  CPP searches for the file according to the rules for
  angle-bracket includes.
  
*************** File: cpp.info,  Node: Wrapper Headers,
*** 949,962 ****
  ===================
  
  Sometimes it is necessary to adjust the contents of a system-provided
! header file without editing it directly.  GCC's 'fixincludes' operation
  does this, for example.  One way to do that would be to create a new
  header file with the same name and insert it in the search path before
  the original header.  That works fine as long as you're willing to
  replace the old header entirely.  But what if you want to refer to the
  old header from the new one?
  
!    You cannot simply include the old header with '#include'.  That will
  start from the beginning, and find your new header again.  If your
  header is not protected from multiple inclusion (*note Once-Only
  Headers::), it will recurse infinitely and cause a fatal error.
--- 949,962 ----
  ===================
  
  Sometimes it is necessary to adjust the contents of a system-provided
! header file without editing it directly.  GCC's ‘fixincludes’ operation
  does this, for example.  One way to do that would be to create a new
  header file with the same name and insert it in the search path before
  the original header.  That works fine as long as you're willing to
  replace the old header entirely.  But what if you want to refer to the
  old header from the new one?
  
!    You cannot simply include the old header with ‘#include’.  That will
  start from the beginning, and find your new header again.  If your
  header is not protected from multiple inclusion (*note Once-Only
  Headers::), it will recurse infinitely and cause a fatal error.
*************** This works, but is not clean; should the
*** 967,996 ****
  would have to edit the new headers to match.
  
     There is no way to solve this problem within the C standard, but you
! can use the GNU extension '#include_next'.  It means, "Include the
! _next_ file with this name".  This directive works like '#include'
  except in searching for the specified file: it starts searching the list
  of header file directories _after_ the directory in which the current
  file was found.
  
!    Suppose you specify '-I /usr/local/include', and the list of
! directories to search also includes '/usr/include'; and suppose both
! directories contain 'signal.h'.  Ordinary '#include <signal.h>' finds
! the file under '/usr/local/include'.  If that file contains
! '#include_next <signal.h>', it starts searching after that directory,
! and finds the file in '/usr/include'.
  
!    '#include_next' does not distinguish between '<FILE>' and '"FILE"'
  inclusion, nor does it check that the file you specify has the same name
  as the current file.  It simply looks for the file named, starting with
  the directory in the search path after the one where the current file
  was found.
  
!    The use of '#include_next' can lead to great confusion.  We recommend
  it be used only when there is no other alternative.  In particular, it
  should not be used in the headers belonging to a specific program; it
  should be used only to make global corrections along the lines of
! 'fixincludes'.
  
  
  File: cpp.info,  Node: System Headers,  Prev: Wrapper Headers,  Up: Header Files
--- 967,996 ----
  would have to edit the new headers to match.
  
     There is no way to solve this problem within the C standard, but you
! can use the GNU extension ‘#include_next’.  It means, "Include the
! _next_ file with this name".  This directive works like ‘#include’
  except in searching for the specified file: it starts searching the list
  of header file directories _after_ the directory in which the current
  file was found.
  
!    Suppose you specify ‘-I /usr/local/include’, and the list of
! directories to search also includes ‘/usr/include’; and suppose both
! directories contain ‘signal.h’.  Ordinary ‘#include <signal.h>’ finds
! the file under ‘/usr/local/include’.  If that file contains
! ‘#include_next <signal.h>’, it starts searching after that directory,
! and finds the file in ‘/usr/include’.
  
!    ‘#include_next’ does not distinguish between ‘<FILE>’ and ‘"FILE"’
  inclusion, nor does it check that the file you specify has the same name
  as the current file.  It simply looks for the file named, starting with
  the directory in the search path after the one where the current file
  was found.
  
!    The use of ‘#include_next’ can lead to great confusion.  We recommend
  it be used only when there is no other alternative.  In particular, it
  should not be used in the headers belonging to a specific program; it
  should be used only to make global corrections along the lines of
! ‘fixincludes’.
  
  
  File: cpp.info,  Node: System Headers,  Prev: Wrapper Headers,  Up: Header Files
*************** File: cpp.info,  Node: System Headers,
*** 1000,1007 ****
  
  The header files declaring interfaces to the operating system and
  runtime libraries often cannot be written in strictly conforming C.
! Therefore, GCC gives code found in "system headers" special treatment.
! All warnings, other than those generated by '#warning' (*note
  Diagnostics::), are suppressed while GCC is processing a system header.
  Macros defined in a system header are immune to a few warnings wherever
  they are expanded.  This immunity is granted on an ad-hoc basis, when we
--- 1000,1007 ----
  
  The header files declaring interfaces to the operating system and
  runtime libraries often cannot be written in strictly conforming C.
! Therefore, GCC gives code found in “system headers” special treatment.
! All warnings, other than those generated by ‘#warning’ (*note
  Diagnostics::), are suppressed while GCC is processing a system header.
  Macros defined in a system header are immune to a few warnings wherever
  they are expanded.  This immunity is granted on an ad-hoc basis, when we
*************** considered system headers.  These direct
*** 1013,1030 ****
  compiled.  There are, however, two ways to make normal headers into
  system headers:
  
!    * Header files found in directories added to the search path with the
!      '-isystem' and '-idirafter' command-line options are treated as
       system headers for the purposes of diagnostics.
  
!    * There is also a directive, '#pragma GCC system_header', which tells
       GCC to consider the rest of the current include file a system
       header, no matter where it was found.  Code that comes before the
!      '#pragma' in the file is not affected.  '#pragma GCC system_header'
       has no effect in the primary source file.
  
     On some targets, such as RS/6000 AIX, GCC implicitly surrounds all
! system headers with an 'extern "C"' block when compiling as C++.
  
  
  File: cpp.info,  Node: Macros,  Next: Conditionals,  Prev: Header Files,  Up: Top
--- 1013,1030 ----
  compiled.  There are, however, two ways to make normal headers into
  system headers:
  
!    • Header files found in directories added to the search path with the
!      ‘-isystem’ and ‘-idirafter’ command-line options are treated as
       system headers for the purposes of diagnostics.
  
!    • There is also a directive, ‘#pragma GCC system_header’, which tells
       GCC to consider the rest of the current include file a system
       header, no matter where it was found.  Code that comes before the
!      ‘#pragma’ in the file is not affected.  ‘#pragma GCC system_header’
       has no effect in the primary source file.
  
     On some targets, such as RS/6000 AIX, GCC implicitly surrounds all
! system headers with an ‘extern "C"’ block when compiling as C++.
  
  
  File: cpp.info,  Node: Macros,  Next: Conditionals,  Prev: Header Files,  Up: Top
*************** File: cpp.info,  Node: Macros,  Next: Co
*** 1032,1048 ****
  3 Macros
  ********
  
! A "macro" is a fragment of code which has been given a name.  Whenever
  the name is used, it is replaced by the contents of the macro.  There
  are two kinds of macros.  They differ mostly in what they look like when
! they are used.  "Object-like" macros resemble data objects when used,
! "function-like" macros resemble function calls.
  
     You may define any valid identifier as a macro, even if it is a C
  keyword.  The preprocessor does not know anything about keywords.  This
! can be useful if you wish to hide a keyword such as 'const' from an
  older compiler that does not understand it.  However, the preprocessor
! operator 'defined' (*note Defined::) can never be defined as a macro,
  and C++'s named operators (*note C++ Named Operators::) cannot be macros
  when you are compiling C++.
  
--- 1032,1048 ----
  3 Macros
  ********
  
! A “macro” is a fragment of code which has been given a name.  Whenever
  the name is used, it is replaced by the contents of the macro.  There
  are two kinds of macros.  They differ mostly in what they look like when
! they are used.  “Object-like” macros resemble data objects when used,
! “function-like” macros resemble function calls.
  
     You may define any valid identifier as a macro, even if it is a C
  keyword.  The preprocessor does not know anything about keywords.  This
! can be useful if you wish to hide a keyword such as ‘const’ from an
  older compiler that does not understand it.  However, the preprocessor
! operator ‘defined’ (*note Defined::) can never be defined as a macro,
  and C++'s named operators (*note C++ Named Operators::) cannot be macros
  when you are compiling C++.
  
*************** File: cpp.info,  Node: Object-like Macro
*** 1065,1090 ****
  3.1 Object-like Macros
  ======================
  
! An "object-like macro" is a simple identifier which will be replaced by
  a code fragment.  It is called object-like because it looks like a data
  object in code that uses it.  They are most commonly used to give
  symbolic names to numeric constants.
  
!    You create macros with the '#define' directive.  '#define' is
  followed by the name of the macro and then the token sequence it should
  be an abbreviation for, which is variously referred to as the macro's
! "body", "expansion" or "replacement list".  For example,
  
       #define BUFFER_SIZE 1024
  
! defines a macro named 'BUFFER_SIZE' as an abbreviation for the token
! '1024'.  If somewhere after this '#define' directive there comes a C
  statement of the form
  
       foo = (char *) malloc (BUFFER_SIZE);
  
! then the C preprocessor will recognize and "expand" the macro
! 'BUFFER_SIZE'.  The C compiler will see the same tokens as it would if
  you had written
  
       foo = (char *) malloc (1024);
--- 1065,1090 ----
  3.1 Object-like Macros
  ======================
  
! An “object-like macro” is a simple identifier which will be replaced by
  a code fragment.  It is called object-like because it looks like a data
  object in code that uses it.  They are most commonly used to give
  symbolic names to numeric constants.
  
!    You create macros with the ‘#define’ directive.  ‘#define’ is
  followed by the name of the macro and then the token sequence it should
  be an abbreviation for, which is variously referred to as the macro's
! “body”, “expansion” or “replacement list”.  For example,
  
       #define BUFFER_SIZE 1024
  
! defines a macro named ‘BUFFER_SIZE’ as an abbreviation for the token
! ‘1024’.  If somewhere after this ‘#define’ directive there comes a C
  statement of the form
  
       foo = (char *) malloc (BUFFER_SIZE);
  
! then the C preprocessor will recognize and “expand” the macro
! ‘BUFFER_SIZE’.  The C compiler will see the same tokens as it would if
  you had written
  
       foo = (char *) malloc (1024);
*************** you had written
*** 1093,1099 ****
  easier to read when it is possible to tell at a glance which names are
  macros.
  
!    The macro's body ends at the end of the '#define' line.  You may
  continue the definition onto multiple lines, if necessary, using
  backslash-newline.  When the macro is expanded, however, it will all
  come out on one line.  For example,
--- 1093,1099 ----
  easier to read when it is possible to tell at a glance which names are
  macros.
  
!    The macro's body ends at the end of the ‘#define’ line.  You may
  continue the definition onto multiple lines, if necessary, using
  backslash-newline.  When the macro is expanded, however, it will all
  come out on one line.  For example,
*************** come out on one line.  For example,
*** 1102,1108 ****
                       2, \
                       3
       int x[] = { NUMBERS };
!           ==> int x[] = { 1, 2, 3 };
  
  The most common visible consequence of this is surprising line numbers
  in error messages.
--- 1102,1108 ----
                       2, \
                       3
       int x[] = { NUMBERS };
!           ↦ int x[] = { 1, 2, 3 };
  
  The most common visible consequence of this is surprising line numbers
  in error messages.
*************** macros to expand.  For example,
*** 1132,1152 ****
       #define TABLESIZE BUFSIZE
       #define BUFSIZE 1024
       TABLESIZE
!           ==> BUFSIZE
!           ==> 1024
  
! 'TABLESIZE' is expanded first to produce 'BUFSIZE', then that macro is
! expanded to produce the final result, '1024'.
  
!    Notice that 'BUFSIZE' was not defined when 'TABLESIZE' was defined.
! The '#define' for 'TABLESIZE' uses exactly the expansion you specify--in
! this case, 'BUFSIZE'--and does not check to see whether it too contains
! macro names.  Only when you _use_ 'TABLESIZE' is the result of its
  expansion scanned for more macro names.
  
!    This makes a difference if you change the definition of 'BUFSIZE' at
! some point in the source file.  'TABLESIZE', defined as shown, will
! always expand using the definition of 'BUFSIZE' that is currently in
  effect:
  
       #define BUFSIZE 1020
--- 1132,1152 ----
       #define TABLESIZE BUFSIZE
       #define BUFSIZE 1024
       TABLESIZE
!           ↦ BUFSIZE
!           ↦ 1024
  
! ‘TABLESIZE’ is expanded first to produce ‘BUFSIZE’, then that macro is
! expanded to produce the final result, ‘1024’.
  
!    Notice that ‘BUFSIZE’ was not defined when ‘TABLESIZE’ was defined.
! The ‘#define’ for ‘TABLESIZE’ uses exactly the expansion you specify--in
! this case, ‘BUFSIZE’--and does not check to see whether it too contains
! macro names.  Only when you _use_ ‘TABLESIZE’ is the result of its
  expansion scanned for more macro names.
  
!    This makes a difference if you change the definition of ‘BUFSIZE’ at
! some point in the source file.  ‘TABLESIZE’, defined as shown, will
! always expand using the definition of ‘BUFSIZE’ that is currently in
  effect:
  
       #define BUFSIZE 1020
*************** effect:
*** 1154,1160 ****
       #undef BUFSIZE
       #define BUFSIZE 37
  
! Now 'TABLESIZE' expands (in two stages) to '37'.
  
     If the expansion of a macro contains its own name, either directly or
  via intermediate macros, it is not expanded again when the expansion is
--- 1154,1160 ----
       #undef BUFSIZE
       #define BUFSIZE 37
  
! Now ‘TABLESIZE’ expands (in two stages) to ‘37’.
  
     If the expansion of a macro contains its own name, either directly or
  via intermediate macros, it is not expanded again when the expansion is
*************** File: cpp.info,  Node: Function-like Mac
*** 1168,1180 ****
  ========================
  
  You can also define macros whose use looks like a function call.  These
! are called "function-like macros".  To define a function-like macro, you
! use the same '#define' directive, but you put a pair of parentheses
  immediately after the macro name.  For example,
  
       #define lang_init()  c_init()
       lang_init()
!           ==> c_init()
  
     A function-like macro is only expanded if its name appears with a
  pair of parentheses after it.  If you write just the name, it is left
--- 1168,1180 ----
  ========================
  
  You can also define macros whose use looks like a function call.  These
! are called “function-like macros”.  To define a function-like macro, you
! use the same ‘#define’ directive, but you put a pair of parentheses
  immediately after the macro name.  For example,
  
       #define lang_init()  c_init()
       lang_init()
!           ↦ c_init()
  
     A function-like macro is only expanded if its name appears with a
  pair of parentheses after it.  If you write just the name, it is left
*************** same name, and you wish to use the funct
*** 1187,1193 ****
         foo();
         funcptr = foo;
  
!    Here the call to 'foo()' will use the macro, but the function pointer
  will get the address of the real function.  If the macro were to be
  expanded, it would cause a syntax error.
  
--- 1187,1193 ----
         foo();
         funcptr = foo;
  
!    Here the call to ‘foo()’ will use the macro, but the function pointer
  will get the address of the real function.  If the macro were to be
  expanded, it would cause a syntax error.
  
*************** parentheses.
*** 1198,1208 ****
  
       #define lang_init ()    c_init()
       lang_init()
!           ==> () c_init()()
  
     The first two pairs of parentheses in this expansion come from the
  macro.  The third is the pair that was originally after the macro
! invocation.  Since 'lang_init' is an object-like macro, it does not
  consume those parentheses.
  
  
--- 1198,1208 ----
  
       #define lang_init ()    c_init()
       lang_init()
!           ↦ () c_init()()
  
     The first two pairs of parentheses in this expansion come from the
  macro.  The third is the pair that was originally after the macro
! invocation.  Since ‘lang_init’ is an object-like macro, it does not
  consume those parentheses.
  
  
*************** File: cpp.info,  Node: Macro Arguments,
*** 1211,1224 ****
  3.3 Macro Arguments
  ===================
  
! Function-like macros can take "arguments", just like true functions.  To
! define a macro that uses arguments, you insert "parameters" between the
  pair of parentheses in the macro definition that make the macro
  function-like.  The parameters must be valid C identifiers, separated by
  commas and optionally whitespace.
  
     To invoke a macro that takes arguments, you write the name of the
! macro followed by a list of "actual arguments" in parentheses, separated
  by commas.  The invocation of the macro need not be restricted to a
  single logical line--it can cross as many lines in the source file as
  you wish.  The number of arguments you give must match the number of
--- 1211,1224 ----
  3.3 Macro Arguments
  ===================
  
! Function-like macros can take “arguments”, just like true functions.  To
! define a macro that uses arguments, you insert “parameters” between the
  pair of parentheses in the macro definition that make the macro
  function-like.  The parameters must be valid C identifiers, separated by
  commas and optionally whitespace.
  
     To invoke a macro that takes arguments, you write the name of the
! macro followed by a list of “actual arguments” in parentheses, separated
  by commas.  The invocation of the macro need not be restricted to a
  single logical line--it can cross as many lines in the source file as
  you wish.  The number of arguments you give must match the number of
*************** macro body.)
*** 1231,1239 ****
  numeric values, as it is defined in many C programs, and some uses.
  
       #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
!        x = min(a, b);          ==>  x = ((a) < (b) ? (a) : (b));
!        y = min(1, 2);          ==>  y = ((1) < (2) ? (1) : (2));
!        z = min(a + 28, *p);    ==>  z = ((a + 28) < (*p) ? (a + 28) : (*p));
  
  (In this small example you can already see several of the dangers of
  macro arguments.  *Note Macro Pitfalls::, for detailed explanations.)
--- 1231,1239 ----
  numeric values, as it is defined in many C programs, and some uses.
  
       #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
!        x = min(a, b);          ↦  x = ((a) < (b) ? (a) : (b));
!        y = min(1, 2);          ↦  y = ((1) < (2) ? (1) : (2));
!        z = min(a + 28, *p);    ↦  z = ((a + 28) < (*p) ? (a + 28) : (*p));
  
  (In this small example you can already see several of the dangers of
  macro arguments.  *Note Macro Pitfalls::, for detailed explanations.)
*************** prevent a comma from separating argument
*** 1247,1255 ****
  
       macro (array[x = y, x + 1])
  
! passes two arguments to 'macro': 'array[x = y' and 'x + 1]'.  If you
! want to supply 'array[x = y, x + 1]' as an argument, you can write it as
! 'array[(x = y, x + 1)]', which is equivalent C code.
  
     All arguments to a macro are completely macro-expanded before they
  are substituted into the macro body.  After substitution, the complete
--- 1247,1255 ----
  
       macro (array[x = y, x + 1])
  
! passes two arguments to ‘macro’: ‘array[x = y’ and ‘x + 1]’.  If you
! want to supply ‘array[x = y, x + 1]’ as an argument, you can write it as
! ‘array[(x = y, x + 1)]’, which is equivalent C code.
  
     All arguments to a macro are completely macro-expanded before they
  are substituted into the macro body.  After substitution, the complete
*************** worry about whether any function call is
*** 1259,1265 ****
  You can run into trouble if you try to be too clever, though.  *Note
  Argument Prescan::, for detailed discussion.
  
!    For example, 'min (min (a, b), c)' is first expanded to
  
         min (((a) < (b) ? (a) : (b)), (c))
  
--- 1259,1265 ----
  You can run into trouble if you try to be too clever, though.  *Note
  Argument Prescan::, for detailed discussion.
  
!    For example, ‘min (min (a, b), c)’ is first expanded to
  
         min (((a) < (b) ? (a) : (b)), (c))
  
*************** and then to
*** 1275,1292 ****
  preprocessor (but many macros will then expand to invalid code).  You
  cannot leave out arguments entirely; if a macro takes two arguments,
  there must be exactly one comma at the top level of its argument list.
! Here are some silly examples using 'min':
  
!      min(, b)        ==> ((   ) < (b) ? (   ) : (b))
!      min(a, )        ==> ((a  ) < ( ) ? (a  ) : ( ))
!      min(,)          ==> ((   ) < ( ) ? (   ) : ( ))
!      min((,),)       ==> (((,)) < ( ) ? ((,)) : ( ))
  
!      min()      error-> macro "min" requires 2 arguments, but only 1 given
!      min(,,)    error-> macro "min" passed 3 arguments, but takes just 2
  
!    Whitespace is not a preprocessing token, so if a macro 'foo' takes
! one argument, 'foo ()' and 'foo ( )' both supply it an empty argument.
  Previous GNU preprocessor implementations and documentation were
  incorrect on this point, insisting that a function-like macro that takes
  a single argument be passed a space if an empty argument was required.
--- 1275,1292 ----
  preprocessor (but many macros will then expand to invalid code).  You
  cannot leave out arguments entirely; if a macro takes two arguments,
  there must be exactly one comma at the top level of its argument list.
! Here are some silly examples using ‘min’:
  
!      min(, b)        ↦ ((   ) < (b) ? (   ) : (b))
!      min(a, )        ↦ ((a  ) < ( ) ? (a  ) : ( ))
!      min(,)          ↦ ((   ) < ( ) ? (   ) : ( ))
!      min((,),)       ↦ (((,)) < ( ) ? ((,)) : ( ))
  
!      min()      error→ macro "min" requires 2 arguments, but only 1 given
!      min(,,)    error→ macro "min" passed 3 arguments, but takes just 2
  
!    Whitespace is not a preprocessing token, so if a macro ‘foo’ takes
! one argument, ‘foo ()’ and ‘foo ( )’ both supply it an empty argument.
  Previous GNU preprocessor implementations and documentation were
  incorrect on this point, insisting that a function-like macro that takes
  a single argument be passed a space if an empty argument was required.
*************** a single argument be passed a space if a
*** 1295,1301 ****
  their corresponding actual arguments.
  
       #define foo(x) x, "x"
!      foo(bar)        ==> bar, "x"
  
  
  File: cpp.info,  Node: Stringizing,  Next: Concatenation,  Prev: Macro Arguments,  Up: Macros
--- 1295,1301 ----
  their corresponding actual arguments.
  
       #define foo(x) x, "x"
!      foo(bar)        ↦ bar, "x"
  
  
  File: cpp.info,  Node: Stringizing,  Next: Concatenation,  Prev: Macro Arguments,  Up: Macros
*************** File: cpp.info,  Node: Stringizing,  Nex
*** 1305,1315 ****
  
  Sometimes you may want to convert a macro argument into a string
  constant.  Parameters are not replaced inside string constants, but you
! can use the '#' preprocessing operator instead.  When a macro parameter
! is used with a leading '#', the preprocessor replaces it with the
  literal text of the actual argument, converted to a string constant.
  Unlike normal parameter replacement, the argument is not macro-expanded
! first.  This is called "stringizing".
  
     There is no way to combine an argument with surrounding text and
  stringize it all together.  Instead, you can write a series of adjacent
--- 1305,1315 ----
  
  Sometimes you may want to convert a macro argument into a string
  constant.  Parameters are not replaced inside string constants, but you
! can use the ‘#’ preprocessing operator instead.  When a macro parameter
! is used with a leading ‘#’, the preprocessor replaces it with the
  literal text of the actual argument, converted to a string constant.
  Unlike normal parameter replacement, the argument is not macro-expanded
! first.  This is called “stringizing”.
  
     There is no way to combine an argument with surrounding text and
  stringize it all together.  Instead, you can write a series of adjacent
*************** combines all the adjacent string constan
*** 1324,1348 ****
               fprintf (stderr, "Warning: " #EXP "\n"); } \
       while (0)
       WARN_IF (x == 0);
!           ==> do { if (x == 0)
                  fprintf (stderr, "Warning: " "x == 0" "\n"); } while (0);
  
! The argument for 'EXP' is substituted once, as-is, into the 'if'
! statement, and once, stringized, into the argument to 'fprintf'.  If 'x'
! were a macro, it would be expanded in the 'if' statement, but not in the
  string.
  
!    The 'do' and 'while (0)' are a kludge to make it possible to write
! 'WARN_IF (ARG);', which the resemblance of 'WARN_IF' to a function would
  make C programmers want to do; see *note Swallowing the Semicolon::.
  
     Stringizing in C involves more than putting double-quote characters
  around the fragment.  The preprocessor backslash-escapes the quotes
  surrounding embedded string constants, and all backslashes within string
  and character constants, in order to get a valid C string constant with
! the proper contents.  Thus, stringizing 'p = "foo\n";' results in
  "p = \"foo\\n\";".  However, backslashes that are not inside string or
! character constants are not duplicated: '\n' by itself stringizes to
  "\n".
  
     All leading and trailing whitespace in text being stringized is
--- 1324,1348 ----
               fprintf (stderr, "Warning: " #EXP "\n"); } \
       while (0)
       WARN_IF (x == 0);
!           ↦ do { if (x == 0)
                  fprintf (stderr, "Warning: " "x == 0" "\n"); } while (0);
  
! The argument for ‘EXP’ is substituted once, as-is, into the ‘if’
! statement, and once, stringized, into the argument to ‘fprintf’.  If ‘x’
! were a macro, it would be expanded in the ‘if’ statement, but not in the
  string.
  
!    The ‘do’ and ‘while (0)’ are a kludge to make it possible to write
! ‘WARN_IF (ARG);’, which the resemblance of ‘WARN_IF’ to a function would
  make C programmers want to do; see *note Swallowing the Semicolon::.
  
     Stringizing in C involves more than putting double-quote characters
  around the fragment.  The preprocessor backslash-escapes the quotes
  surrounding embedded string constants, and all backslashes within string
  and character constants, in order to get a valid C string constant with
! the proper contents.  Thus, stringizing ‘p = "foo\n";’ results in
  "p = \"foo\\n\";".  However, backslashes that are not inside string or
! character constants are not duplicated: ‘\n’ by itself stringizes to
  "\n".
  
     All leading and trailing whitespace in text being stringized is
*************** you have to use two levels of macros.
*** 1361,1376 ****
       #define str(s) #s
       #define foo 4
       str (foo)
!           ==> "foo"
       xstr (foo)
!           ==> xstr (4)
!           ==> str (4)
!           ==> "4"
  
!    's' is stringized when it is used in 'str', so it is not
! macro-expanded first.  But 's' is an ordinary argument to 'xstr', so it
! is completely macro-expanded before 'xstr' itself is expanded (*note
! Argument Prescan::).  Therefore, by the time 'str' gets to its argument,
  it has already been macro-expanded.
  
  
--- 1361,1376 ----
       #define str(s) #s
       #define foo 4
       str (foo)
!           ↦ "foo"
       xstr (foo)
!           ↦ xstr (4)
!           ↦ str (4)
!           ↦ "4"
  
!    ‘s’ is stringized when it is used in ‘str’, so it is not
! macro-expanded first.  But ‘s’ is an ordinary argument to ‘xstr’, so it
! is completely macro-expanded before ‘xstr’ itself is expanded (*note
! Argument Prescan::).  Therefore, by the time ‘str’ gets to its argument,
  it has already been macro-expanded.
  
  
*************** File: cpp.info,  Node: Concatenation,  N
*** 1380,1418 ****
  =================
  
  It is often useful to merge two tokens into one while expanding macros.
! This is called "token pasting" or "token concatenation".  The '##'
  preprocessing operator performs token pasting.  When a macro is
! expanded, the two tokens on either side of each '##' operator are
! combined into a single token, which then replaces the '##' and the two
  original tokens in the macro expansion.  Usually both will be
  identifiers, or one will be an identifier and the other a preprocessing
  number.  When pasted, they make a longer identifier.  This isn't the
  only valid case.  It is also possible to concatenate two numbers (or a
! number and a name, such as '1.5' and 'e3') into a number.  Also,
! multi-character operators such as '+=' can be formed by token pasting.
  
     However, two tokens that don't together form a valid token cannot be
! pasted together.  For example, you cannot concatenate 'x' with '+' in
  either order.  If you try, the preprocessor issues a warning and emits
  the two tokens.  Whether it puts white space between the tokens is
! undefined.  It is common to find unnecessary uses of '##' in complex
  macros.  If you get this warning, it is likely that you can simply
! remove the '##'.
  
!    Both the tokens combined by '##' could come from the macro body, but
  you could just as well write them as one token in the first place.
  Token pasting is most useful when one or both of the tokens comes from a
! macro argument.  If either of the tokens next to an '##' is a parameter
! name, it is replaced by its actual argument before '##' executes.  As
  with stringizing, the actual argument is not macro-expanded first.  If
! the argument is empty, that '##' has no effect.
  
     Keep in mind that the C preprocessor converts comments to whitespace
  before macros are even considered.  Therefore, you cannot create a
! comment by concatenating '/' and '*'.  You can put as much whitespace
! between '##' and its operands as you like, including comments, and you
  can put comments in arguments that will be concatenated.  However, it is
! an error if '##' appears at either end of a macro body.
  
     Consider a C program that interprets named commands.  There probably
  needs to be a table of commands, perhaps an array of structures declared
--- 1380,1418 ----
  =================
  
  It is often useful to merge two tokens into one while expanding macros.
! This is called “token pasting” or “token concatenation”.  The ‘##’
  preprocessing operator performs token pasting.  When a macro is
! expanded, the two tokens on either side of each ‘##’ operator are
! combined into a single token, which then replaces the ‘##’ and the two
  original tokens in the macro expansion.  Usually both will be
  identifiers, or one will be an identifier and the other a preprocessing
  number.  When pasted, they make a longer identifier.  This isn't the
  only valid case.  It is also possible to concatenate two numbers (or a
! number and a name, such as ‘1.5’ and ‘e3’) into a number.  Also,
! multi-character operators such as ‘+=’ can be formed by token pasting.
  
     However, two tokens that don't together form a valid token cannot be
! pasted together.  For example, you cannot concatenate ‘x’ with ‘+’ in
  either order.  If you try, the preprocessor issues a warning and emits
  the two tokens.  Whether it puts white space between the tokens is
! undefined.  It is common to find unnecessary uses of ‘##’ in complex
  macros.  If you get this warning, it is likely that you can simply
! remove the ‘##’.
  
!    Both the tokens combined by ‘##’ could come from the macro body, but
  you could just as well write them as one token in the first place.
  Token pasting is most useful when one or both of the tokens comes from a
! macro argument.  If either of the tokens next to an ‘##’ is a parameter
! name, it is replaced by its actual argument before ‘##’ executes.  As
  with stringizing, the actual argument is not macro-expanded first.  If
! the argument is empty, that ‘##’ has no effect.
  
     Keep in mind that the C preprocessor converts comments to whitespace
  before macros are even considered.  Therefore, you cannot create a
! comment by concatenating ‘/’ and ‘*’.  You can put as much whitespace
! between ‘##’ and its operands as you like, including comments, and you
  can put comments in arguments that will be concatenated.  However, it is
! an error if ‘##’ appears at either end of a macro body.
  
     Consider a C program that interprets named commands.  There probably
  needs to be a table of commands, perhaps an array of structures declared
*************** as follows:
*** 1435,1441 ****
  in the string constant and once in the function name.  A macro which
  takes the name of a command as an argument can make this unnecessary.
  The string constant can be created with stringizing, and the function
! name by concatenating the argument with '_command'.  Here is how it is
  done:
  
       #define COMMAND(NAME)  { #NAME, NAME ## _command }
--- 1435,1441 ----
  in the string constant and once in the function name.  A macro which
  takes the name of a command as an argument can make this unnecessary.
  The string constant can be created with stringizing, and the function
! name by concatenating the argument with ‘_command’.  Here is how it is
  done:
  
       #define COMMAND(NAME)  { #NAME, NAME ## _command }
*************** a function.  Here is an example:
*** 1459,1492 ****
  
       #define eprintf(...) fprintf (stderr, __VA_ARGS__)
  
!    This kind of macro is called "variadic".  When the macro is invoked,
  all the tokens in its argument list after the last named argument (this
! macro has none), including any commas, become the "variable argument".
! This sequence of tokens replaces the identifier '__VA_ARGS__' in the
  macro body wherever it appears.  Thus, we have this expansion:
  
       eprintf ("%s:%d: ", input_file, lineno)
!           ==>  fprintf (stderr, "%s:%d: ", input_file, lineno)
  
     The variable argument is completely macro-expanded before it is
  inserted into the macro expansion, just like an ordinary argument.  You
! may use the '#' and '##' operators to stringize the variable argument or
  to paste its leading or trailing token with another token.  (But see
! below for an important special case for '##'.)
  
     If your macro is complicated, you may want a more descriptive name
! for the variable argument than '__VA_ARGS__'.  CPP permits this, as an
! extension.  You may write an argument name immediately before the '...';
! that name is used for the variable argument.  The 'eprintf' macro above
  could be written
  
       #define eprintf(args...) fprintf (stderr, args)
  
! using this extension.  You cannot use '__VA_ARGS__' and this extension
  in the same macro.
  
     You can have named arguments as well as variable arguments in a
! variadic macro.  We could define 'eprintf' like this, instead:
  
       #define eprintf(format, ...) fprintf (stderr, format, __VA_ARGS__)
  
--- 1459,1492 ----
  
       #define eprintf(...) fprintf (stderr, __VA_ARGS__)
  
!    This kind of macro is called “variadic”.  When the macro is invoked,
  all the tokens in its argument list after the last named argument (this
! macro has none), including any commas, become the “variable argument”.
! This sequence of tokens replaces the identifier ‘__VA_ARGS__’ in the
  macro body wherever it appears.  Thus, we have this expansion:
  
       eprintf ("%s:%d: ", input_file, lineno)
!           ↦  fprintf (stderr, "%s:%d: ", input_file, lineno)
  
     The variable argument is completely macro-expanded before it is
  inserted into the macro expansion, just like an ordinary argument.  You
! may use the ‘#’ and ‘##’ operators to stringize the variable argument or
  to paste its leading or trailing token with another token.  (But see
! below for an important special case for ‘##’.)
  
     If your macro is complicated, you may want a more descriptive name
! for the variable argument than ‘__VA_ARGS__’.  CPP permits this, as an
! extension.  You may write an argument name immediately before the ‘...’;
! that name is used for the variable argument.  The ‘eprintf’ macro above
  could be written
  
       #define eprintf(args...) fprintf (stderr, args)
  
! using this extension.  You cannot use ‘__VA_ARGS__’ and this extension
  in the same macro.
  
     You can have named arguments as well as variable arguments in a
! variadic macro.  We could define ‘eprintf’ like this, instead:
  
       #define eprintf(format, ...) fprintf (stderr, format, __VA_ARGS__)
  
*************** gotten a syntax error, because there wou
*** 1501,1507 ****
  after the format string.
  
       eprintf("success!\n", );
!           ==> fprintf(stderr, "success!\n", );
  
     This has been fixed in C++20, and GNU CPP also has a pair of
  extensions which deal with this problem.
--- 1501,1507 ----
  after the format string.
  
       eprintf("success!\n", );
!           ↦ fprintf(stderr, "success!\n", );
  
     This has been fixed in C++20, and GNU CPP also has a pair of
  extensions which deal with this problem.
*************** extensions which deal with this problem.
*** 1510,1543 ****
  leave the variable argument out entirely:
  
       eprintf ("success!\n")
!           ==> fprintf(stderr, "success!\n", );
  
! Second, C++20 introduces the '__VA_OPT__' function macro.  This macro
  may only appear in the definition of a variadic macro.  If the variable
! argument has any tokens, then a '__VA_OPT__' invocation expands to its
  argument; but if the variable argument does not have any tokens, the
! '__VA_OPT__' expands to nothing:
  
       #define eprintf(format, ...) \
         fprintf (stderr, format __VA_OPT__(,) __VA_ARGS__)
  
!    '__VA_OPT__' is also available in GNU C and GNU C++.
  
     Historically, GNU CPP has also had another extension to handle the
! trailing comma: the '##' token paste operator has a special meaning when
  placed between a comma and a variable argument.  Despite the
! introduction of '__VA_OPT__', this extension remains supported in GNU
  CPP, for backward compatibility.  If you write
  
       #define eprintf(format, ...) fprintf (stderr, format, ##__VA_ARGS__)
  
! and the variable argument is left out when the 'eprintf' macro is used,
! then the comma before the '##' will be deleted.  This does _not_ happen
  if you pass an empty argument, nor does it happen if the token preceding
! '##' is anything other than a comma.
  
       eprintf ("success!\n")
!           ==> fprintf(stderr, "success!\n");
  
  The above explanation is ambiguous about the case where the only macro
  parameter is a variable arguments parameter, as it is meaningless to try
--- 1510,1543 ----
  leave the variable argument out entirely:
  
       eprintf ("success!\n")
!           ↦ fprintf(stderr, "success!\n", );
  
! Second, C++20 introduces the ‘__VA_OPT__’ function macro.  This macro
  may only appear in the definition of a variadic macro.  If the variable
! argument has any tokens, then a ‘__VA_OPT__’ invocation expands to its
  argument; but if the variable argument does not have any tokens, the
! ‘__VA_OPT__’ expands to nothing:
  
       #define eprintf(format, ...) \
         fprintf (stderr, format __VA_OPT__(,) __VA_ARGS__)
  
!    ‘__VA_OPT__’ is also available in GNU C and GNU C++.
  
     Historically, GNU CPP has also had another extension to handle the
! trailing comma: the ‘##’ token paste operator has a special meaning when
  placed between a comma and a variable argument.  Despite the
! introduction of ‘__VA_OPT__’, this extension remains supported in GNU
  CPP, for backward compatibility.  If you write
  
       #define eprintf(format, ...) fprintf (stderr, format, ##__VA_ARGS__)
  
! and the variable argument is left out when the ‘eprintf’ macro is used,
! then the comma before the ‘##’ will be deleted.  This does _not_ happen
  if you pass an empty argument, nor does it happen if the token preceding
! ‘##’ is anything other than a comma.
  
       eprintf ("success!\n")
!           ↦ fprintf(stderr, "success!\n");
  
  The above explanation is ambiguous about the case where the only macro
  parameter is a variable arguments parameter, as it is meaningless to try
*************** standard.  Otherwise the comma is droppe
*** 1547,1564 ****
  standard.
  
     The C standard mandates that the only place the identifier
! '__VA_ARGS__' can appear is in the replacement list of a variadic macro.
  It may not be used as a macro name, macro argument name, or within a
  different type of macro.  It may also be forbidden in open text; the
  standard is ambiguous.  We recommend you avoid using it except for its
  defined purpose.
  
!    Likewise, C++ forbids '__VA_OPT__' anywhere outside the replacement
  list of a variadic macro.
  
     Variadic macros became a standard part of the C language with C99.
  GNU CPP previously supported them with a named variable argument
! ('args...', not '...' and '__VA_ARGS__'), which is still supported for
  backward compatibility.
  
  
--- 1547,1564 ----
  standard.
  
     The C standard mandates that the only place the identifier
! ‘__VA_ARGS__’ can appear is in the replacement list of a variadic macro.
  It may not be used as a macro name, macro argument name, or within a
  different type of macro.  It may also be forbidden in open text; the
  standard is ambiguous.  We recommend you avoid using it except for its
  defined purpose.
  
!    Likewise, C++ forbids ‘__VA_OPT__’ anywhere outside the replacement
  list of a variadic macro.
  
     Variadic macros became a standard part of the C language with C99.
  GNU CPP previously supported them with a named variable argument
! (‘args...’, not ‘...’ and ‘__VA_ARGS__’), which is still supported for
  backward compatibility.
  
  
*************** standards, so they are available with al
*** 1592,1612 ****
  standards.  Older compilers may not provide all of them.  Their names
  all start with double underscores.
  
! '__FILE__'
       This macro expands to the name of the current input file, in the
       form of a C string constant.  This is the path by which the
       preprocessor opened the file, not the short name specified in
!      '#include' or as the input file name argument.  For example,
!      '"/usr/local/include/myheader.h"' is a possible expansion of this
       macro.
  
! '__LINE__'
       This macro expands to the current input line number, in the form of
       a decimal integer constant.  While we call it a predefined macro,
       it's a pretty strange macro, since its "definition" changes with
       each new line of source code.
  
!    '__FILE__' and '__LINE__' are useful in generating an error message
  to report an inconsistency detected by the program; the message can
  state the source line at which the inconsistency was detected.  For
  example,
--- 1592,1612 ----
  standards.  Older compilers may not provide all of them.  Their names
  all start with double underscores.
  
! ‘__FILE__’
       This macro expands to the name of the current input file, in the
       form of a C string constant.  This is the path by which the
       preprocessor opened the file, not the short name specified in
!      ‘#include’ or as the input file name argument.  For example,
!      ‘"/usr/local/include/myheader.h"’ is a possible expansion of this
       macro.
  
! ‘__LINE__’
       This macro expands to the current input line number, in the form of
       a decimal integer constant.  While we call it a predefined macro,
       it's a pretty strange macro, since its "definition" changes with
       each new line of source code.
  
!    ‘__FILE__’ and ‘__LINE__’ are useful in generating an error message
  to report an inconsistency detected by the program; the message can
  state the source line at which the inconsistency was detected.  For
  example,
*************** example,
*** 1616,1720 ****
                        "%d at %s, line %d.",
                length, __FILE__, __LINE__);
  
!    An '#include' directive changes the expansions of '__FILE__' and
! '__LINE__' to correspond to the included file.  At the end of that file,
! when processing resumes on the input file that contained the '#include'
! directive, the expansions of '__FILE__' and '__LINE__' revert to the
! values they had before the '#include' (but '__LINE__' is then
  incremented by one as processing moves to the line after the
! '#include').
  
!    A '#line' directive changes '__LINE__', and may change '__FILE__' as
  well.  *Note Line Control::.
  
!    C99 introduced '__func__', and GCC has provided '__FUNCTION__' for a
  long time.  Both of these are strings containing the name of the current
  function (there are slight semantic differences; see the GCC manual).
  Neither of them is a macro; the preprocessor does not know the name of
  the current function.  They tend to be useful in conjunction with
! '__FILE__' and '__LINE__', though.
  
! '__DATE__'
       This macro expands to a string constant that describes the date on
       which the preprocessor is being run.  The string constant contains
!      eleven characters and looks like '"Feb 12 1996"'.  If the day of
       the month is less than 10, it is padded with a space on the left.
  
       If GCC cannot determine the current date, it will emit a warning
!      message (once per compilation) and '__DATE__' will expand to
!      '"??? ?? ????"'.
  
! '__TIME__'
       This macro expands to a string constant that describes the time at
       which the preprocessor is being run.  The string constant contains
!      eight characters and looks like '"23:59:01"'.
  
       If GCC cannot determine the current time, it will emit a warning
!      message (once per compilation) and '__TIME__' will expand to
!      '"??:??:??"'.
  
! '__STDC__'
       In normal operation, this macro expands to the constant 1, to
       signify that this compiler conforms to ISO Standard C.  If GNU CPP
       is used with a compiler other than GCC, this is not necessarily
       true; however, the preprocessor always conforms to the standard
!      unless the '-traditional-cpp' option is used.
  
!      This macro is not defined if the '-traditional-cpp' option is used.
  
       On some hosts, the system compiler uses a different convention,
!      where '__STDC__' is normally 0, but is 1 if the user specifies
       strict conformance to the C Standard.  CPP follows the host
       convention when processing system header files, but when processing
!      user files '__STDC__' is always 1.  This has been reported to cause
       problems; for instance, some versions of Solaris provide X Windows
!      headers that expect '__STDC__' to be either undefined or 1.  *Note
       Invocation::.
  
! '__STDC_VERSION__'
       This macro expands to the C Standard's version number, a long
!      integer constant of the form 'YYYYMML' where YYYY and MM are the
       year and month of the Standard version.  This signifies which
       version of the C Standard the compiler conforms to.  Like
!      '__STDC__', this is not necessarily accurate for the entire
       implementation, unless GNU CPP is being used with GCC.
  
!      The value '199409L' signifies the 1989 C standard as amended in
!      1994, which is the current default; the value '199901L' signifies
!      the 1999 revision of the C standard; the value '201112L' signifies
!      the 2011 revision of the C standard; the value '201710L' signifies
       the 2017 revision of the C standard (which is otherwise identical
       to the 2011 version apart from correction of defects).  An
!      unspecified value larger than '201710L' is used for the
!      experimental '-std=c23' and '-std=gnu23' modes.
  
!      This macro is not defined if the '-traditional-cpp' option is used,
       nor when compiling C++ or Objective-C.
  
! '__STDC_HOSTED__'
       This macro is defined, with value 1, if the compiler's target is a
!      "hosted environment".  A hosted environment has the complete
       facilities of the standard C library available.
  
! '__cplusplus'
       This macro is defined when the C++ compiler is in use.  You can use
!      '__cplusplus' to test whether a header is compiled by a C compiler
!      or a C++ compiler.  This macro is similar to '__STDC_VERSION__', in
       that it expands to a version number.  Depending on the language
!      standard selected, the value of the macro is '199711L' for the 1998
!      C++ standard, '201103L' for the 2011 C++ standard, '201402L' for
!      the 2014 C++ standard, '201703L' for the 2017 C++ standard,
!      '202002L' for the 2020 C++ standard, '202302L' for the 2023 C++
!      standard, or an unspecified value strictly larger than '202302L'
!      for the experimental languages enabled by '-std=c++26' and
!      '-std=gnu++26'.
  
! '__OBJC__'
       This macro is defined, with value 1, when the Objective-C compiler
!      is in use.  You can use '__OBJC__' to test whether a header is
       compiled by a C compiler or an Objective-C compiler.
  
! '__ASSEMBLER__'
       This macro is defined with value 1 when preprocessing assembly
       language.
  
--- 1616,1720 ----
                        "%d at %s, line %d.",
                length, __FILE__, __LINE__);
  
!    An ‘#include’ directive changes the expansions of ‘__FILE__’ and
! ‘__LINE__’ to correspond to the included file.  At the end of that file,
! when processing resumes on the input file that contained the ‘#include’
! directive, the expansions of ‘__FILE__’ and ‘__LINE__’ revert to the
! values they had before the ‘#include’ (but ‘__LINE__’ is then
  incremented by one as processing moves to the line after the
! ‘#include’).
  
!    A ‘#line’ directive changes ‘__LINE__’, and may change ‘__FILE__’ as
  well.  *Note Line Control::.
  
!    C99 introduced ‘__func__’, and GCC has provided ‘__FUNCTION__’ for a
  long time.  Both of these are strings containing the name of the current
  function (there are slight semantic differences; see the GCC manual).
  Neither of them is a macro; the preprocessor does not know the name of
  the current function.  They tend to be useful in conjunction with
! ‘__FILE__’ and ‘__LINE__’, though.
  
! ‘__DATE__’
       This macro expands to a string constant that describes the date on
       which the preprocessor is being run.  The string constant contains
!      eleven characters and looks like ‘"Feb 12 1996"’.  If the day of
       the month is less than 10, it is padded with a space on the left.
  
       If GCC cannot determine the current date, it will emit a warning
!      message (once per compilation) and ‘__DATE__’ will expand to
!      ‘"??? ?? ????"’.
  
! ‘__TIME__’
       This macro expands to a string constant that describes the time at
       which the preprocessor is being run.  The string constant contains
!      eight characters and looks like ‘"23:59:01"’.
  
       If GCC cannot determine the current time, it will emit a warning
!      message (once per compilation) and ‘__TIME__’ will expand to
!      ‘"??:??:??"’.
  
! ‘__STDC__’
       In normal operation, this macro expands to the constant 1, to
       signify that this compiler conforms to ISO Standard C.  If GNU CPP
       is used with a compiler other than GCC, this is not necessarily
       true; however, the preprocessor always conforms to the standard
!      unless the ‘-traditional-cpp’ option is used.
  
!      This macro is not defined if the ‘-traditional-cpp’ option is used.
  
       On some hosts, the system compiler uses a different convention,
!      where ‘__STDC__’ is normally 0, but is 1 if the user specifies
       strict conformance to the C Standard.  CPP follows the host
       convention when processing system header files, but when processing
!      user files ‘__STDC__’ is always 1.  This has been reported to cause
       problems; for instance, some versions of Solaris provide X Windows
!      headers that expect ‘__STDC__’ to be either undefined or 1.  *Note
       Invocation::.
  
! ‘__STDC_VERSION__’
       This macro expands to the C Standard's version number, a long
!      integer constant of the form ‘YYYYMML’ where YYYY and MM are the
       year and month of the Standard version.  This signifies which
       version of the C Standard the compiler conforms to.  Like
!      ‘__STDC__’, this is not necessarily accurate for the entire
       implementation, unless GNU CPP is being used with GCC.
  
!      The value ‘199409L’ signifies the 1989 C standard as amended in
!      1994, which is the current default; the value ‘199901L’ signifies
!      the 1999 revision of the C standard; the value ‘201112L’ signifies
!      the 2011 revision of the C standard; the value ‘201710L’ signifies
       the 2017 revision of the C standard (which is otherwise identical
       to the 2011 version apart from correction of defects).  An
!      unspecified value larger than ‘201710L’ is used for the
!      experimental ‘-std=c23’ and ‘-std=gnu23’ modes.
  
!      This macro is not defined if the ‘-traditional-cpp’ option is used,
       nor when compiling C++ or Objective-C.
  
! ‘__STDC_HOSTED__’
       This macro is defined, with value 1, if the compiler's target is a
!      “hosted environment”.  A hosted environment has the complete
       facilities of the standard C library available.
  
! ‘__cplusplus’
       This macro is defined when the C++ compiler is in use.  You can use
!      ‘__cplusplus’ to test whether a header is compiled by a C compiler
!      or a C++ compiler.  This macro is similar to ‘__STDC_VERSION__’, in
       that it expands to a version number.  Depending on the language
!      standard selected, the value of the macro is ‘199711L’ for the 1998
!      C++ standard, ‘201103L’ for the 2011 C++ standard, ‘201402L’ for
!      the 2014 C++ standard, ‘201703L’ for the 2017 C++ standard,
!      ‘202002L’ for the 2020 C++ standard, ‘202302L’ for the 2023 C++
!      standard, or an unspecified value strictly larger than ‘202302L’
!      for the experimental languages enabled by ‘-std=c++26’ and
!      ‘-std=gnu++26’.
  
! ‘__OBJC__’
       This macro is defined, with value 1, when the Objective-C compiler
!      is in use.  You can use ‘__OBJC__’ to test whether a header is
       compiled by a C compiler or an Objective-C compiler.
  
! ‘__ASSEMBLER__’
       This macro is defined with value 1 when preprocessing assembly
       language.
  
*************** with the same meanings regardless of the
*** 1729,1759 ****
  which you are using GNU C or GNU Fortran.  Their names all start with
  double underscores.
  
! '__COUNTER__'
       This macro expands to sequential integral values starting from 0.
!      In conjunction with the '##' operator, this provides a convenient
       means to generate unique identifiers.  Care must be taken to ensure
!      that '__COUNTER__' is not expanded prior to inclusion of
       precompiled headers which use it.  Otherwise, the precompiled
       headers will not be used.
  
! '__GFORTRAN__'
       The GNU Fortran compiler defines this.
  
! '__GNUC__'
! '__GNUC_MINOR__'
! '__GNUC_PATCHLEVEL__'
       These macros are defined by all GNU compilers that use the C
       preprocessor: C, C++, Objective-C and Fortran.  Their values are
       the major version, minor version, and patch level of the compiler,
       as integer constants.  For example, GCC version X.Y.Z defines
!      '__GNUC__' to X, '__GNUC_MINOR__' to Y, and '__GNUC_PATCHLEVEL__'
       to Z.  These macros are also defined if you invoke the preprocessor
       directly.
  
       If all you need to know is whether or not your program is being
       compiled by GCC, or a non-GCC compiler that claims to accept the
!      GNU C dialects, you can simply test '__GNUC__'.  If you need to
       write code which depends on a specific version, you must be more
       careful.  Each time the minor version is increased, the patch level
       is reset to zero; each time the major version is increased, the
--- 1729,1759 ----
  which you are using GNU C or GNU Fortran.  Their names all start with
  double underscores.
  
! ‘__COUNTER__’
       This macro expands to sequential integral values starting from 0.
!      In conjunction with the ‘##’ operator, this provides a convenient
       means to generate unique identifiers.  Care must be taken to ensure
!      that ‘__COUNTER__’ is not expanded prior to inclusion of
       precompiled headers which use it.  Otherwise, the precompiled
       headers will not be used.
  
! ‘__GFORTRAN__’
       The GNU Fortran compiler defines this.
  
! ‘__GNUC__’
! ‘__GNUC_MINOR__’
! ‘__GNUC_PATCHLEVEL__’
       These macros are defined by all GNU compilers that use the C
       preprocessor: C, C++, Objective-C and Fortran.  Their values are
       the major version, minor version, and patch level of the compiler,
       as integer constants.  For example, GCC version X.Y.Z defines
!      ‘__GNUC__’ to X, ‘__GNUC_MINOR__’ to Y, and ‘__GNUC_PATCHLEVEL__’
       to Z.  These macros are also defined if you invoke the preprocessor
       directly.
  
       If all you need to know is whether or not your program is being
       compiled by GCC, or a non-GCC compiler that claims to accept the
!      GNU C dialects, you can simply test ‘__GNUC__’.  If you need to
       write code which depends on a specific version, you must be more
       careful.  Each time the minor version is increased, the patch level
       is reset to zero; each time the major version is increased, the
*************** double underscores.
*** 1779,1832 ****
  
       Many people find this form easier to understand.
  
! '__GNUG__'
       The GNU C++ compiler defines this.  Testing it is equivalent to
!      testing '(__GNUC__ && __cplusplus)'.
  
! '__STRICT_ANSI__'
!      GCC defines this macro if and only if the '-ansi' switch, or a
!      '-std' switch specifying strict conformance to some version of ISO
       C or ISO C++, was specified when GCC was invoked.  It is defined to
!      '1'.  This macro exists primarily to direct GNU libc's header files
       to use only definitions found in standard C.
  
! '__BASE_FILE__'
       This macro expands to the name of the main input file, in the form
       of a C string constant.  This is the source file that was specified
       on the command line of the preprocessor or C compiler.
  
! '__FILE_NAME__'
       This macro expands to the basename of the current input file, in
       the form of a C string constant.  This is the last path component
       by which the preprocessor opened the file.  For example, processing
!      '"/usr/local/include/myheader.h"' would set this macro to
!      '"myheader.h"'.
  
! '__INCLUDE_LEVEL__'
       This macro expands to a decimal integer constant that represents
       the depth of nesting in include files.  The value of this macro is
!      incremented on every '#include' directive and decremented at the
       end of every included file.  It starts out at 0, its value within
       the base file specified on the command line.
  
! '__ELF__'
       This macro is defined if the target uses the ELF object format.
  
! '__VERSION__'
       This macro expands to a string constant which describes the version
       of the compiler in use.  You should not rely on its contents having
       any particular form, but it can be counted on to contain at least
       the release number.
  
! '__OPTIMIZE__'
! '__OPTIMIZE_SIZE__'
! '__NO_INLINE__'
!      These macros describe the compilation mode.  '__OPTIMIZE__' is
!      defined in all optimizing compilations.  '__OPTIMIZE_SIZE__' is
       defined if the compiler is optimizing for size, not speed.
!      '__NO_INLINE__' is defined if no functions will be inlined into
       their callers (when not optimizing, or when inlining has been
!      specifically disabled by '-fno-inline').
  
       These macros cause certain GNU header files to provide optimized
       definitions, using macros or inline functions, of system library
--- 1779,1832 ----
  
       Many people find this form easier to understand.
  
! ‘__GNUG__’
       The GNU C++ compiler defines this.  Testing it is equivalent to
!      testing ‘(__GNUC__ && __cplusplus)’.
  
! ‘__STRICT_ANSI__’
!      GCC defines this macro if and only if the ‘-ansi’ switch, or a
!      ‘-std’ switch specifying strict conformance to some version of ISO
       C or ISO C++, was specified when GCC was invoked.  It is defined to
!      ‘1’.  This macro exists primarily to direct GNU libc's header files
       to use only definitions found in standard C.
  
! ‘__BASE_FILE__’
       This macro expands to the name of the main input file, in the form
       of a C string constant.  This is the source file that was specified
       on the command line of the preprocessor or C compiler.
  
! ‘__FILE_NAME__’
       This macro expands to the basename of the current input file, in
       the form of a C string constant.  This is the last path component
       by which the preprocessor opened the file.  For example, processing
!      ‘"/usr/local/include/myheader.h"’ would set this macro to
!      ‘"myheader.h"’.
  
! ‘__INCLUDE_LEVEL__’
       This macro expands to a decimal integer constant that represents
       the depth of nesting in include files.  The value of this macro is
!      incremented on every ‘#include’ directive and decremented at the
       end of every included file.  It starts out at 0, its value within
       the base file specified on the command line.
  
! ‘__ELF__’
       This macro is defined if the target uses the ELF object format.
  
! ‘__VERSION__’
       This macro expands to a string constant which describes the version
       of the compiler in use.  You should not rely on its contents having
       any particular form, but it can be counted on to contain at least
       the release number.
  
! ‘__OPTIMIZE__’
! ‘__OPTIMIZE_SIZE__’
! ‘__NO_INLINE__’
!      These macros describe the compilation mode.  ‘__OPTIMIZE__’ is
!      defined in all optimizing compilations.  ‘__OPTIMIZE_SIZE__’ is
       defined if the compiler is optimizing for size, not speed.
!      ‘__NO_INLINE__’ is defined if no functions will be inlined into
       their callers (when not optimizing, or when inlining has been
!      specifically disabled by ‘-fno-inline’).
  
       These macros cause certain GNU header files to provide optimized
       definitions, using macros or inline functions, of system library
*************** double underscores.
*** 1834,2072 ****
       make sure that programs will execute with the same effect whether
       or not they are defined.  If they are defined, their value is 1.
  
! '__GNUC_GNU_INLINE__'
!      GCC defines this macro if functions declared 'inline' will be
       handled in GCC's traditional gnu90 mode.  Object files will contain
!      externally visible definitions of all functions declared 'inline'
!      without 'extern' or 'static'.  They will not contain any
!      definitions of any functions declared 'extern inline'.
  
! '__GNUC_STDC_INLINE__'
!      GCC defines this macro if functions declared 'inline' will be
       handled according to the ISO C99 or later standards.  Object files
       will contain externally visible definitions of all functions
!      declared 'extern inline'.  They will not contain definitions of any
!      functions declared 'inline' without 'extern'.
  
!      If this macro is defined, GCC supports the 'gnu_inline' function
       attribute as a way to always get the gnu90 behavior.
  
! '__CHAR_UNSIGNED__'
!      GCC defines this macro if and only if the data type 'char' is
       unsigned on the target machine.  It exists to cause the standard
!      header file 'limits.h' to work correctly.  You should not use this
       macro yourself; instead, refer to the standard macros defined in
!      'limits.h'.
  
! '__WCHAR_UNSIGNED__'
!      Like '__CHAR_UNSIGNED__', this macro is defined if and only if the
!      data type 'wchar_t' is unsigned and the front-end is in C++ mode.
  
! '__REGISTER_PREFIX__'
       This macro expands to a single token (not a string constant) which
       is the prefix applied to CPU register names in assembly language
       for this target.  You can use it to write assembly that is usable
!      in multiple environments.  For example, in the 'm68k-aout'
!      environment it expands to nothing, but in the 'm68k-coff'
!      environment it expands to a single '%'.
  
! '__USER_LABEL_PREFIX__'
       This macro expands to a single token which is the prefix applied to
       user labels (symbols visible to C code) in assembly.  For example,
!      in the 'm68k-aout' environment it expands to an '_', but in the
!      'm68k-coff' environment it expands to nothing.
  
       This macro will have the correct definition even if
!      '-f(no-)underscores' is in use, but it will not be correct if
       target-specific options that adjust this prefix are used (e.g. the
!      OSF/rose '-mno-underscores' option).
  
! '__SIZE_TYPE__'
! '__PTRDIFF_TYPE__'
! '__WCHAR_TYPE__'
! '__WINT_TYPE__'
! '__INTMAX_TYPE__'
! '__UINTMAX_TYPE__'
! '__SIG_ATOMIC_TYPE__'
! '__INT8_TYPE__'
! '__INT16_TYPE__'
! '__INT32_TYPE__'
! '__INT64_TYPE__'
! '__UINT8_TYPE__'
! '__UINT16_TYPE__'
! '__UINT32_TYPE__'
! '__UINT64_TYPE__'
! '__INT_LEAST8_TYPE__'
! '__INT_LEAST16_TYPE__'
! '__INT_LEAST32_TYPE__'
! '__INT_LEAST64_TYPE__'
! '__UINT_LEAST8_TYPE__'
! '__UINT_LEAST16_TYPE__'
! '__UINT_LEAST32_TYPE__'
! '__UINT_LEAST64_TYPE__'
! '__INT_FAST8_TYPE__'
! '__INT_FAST16_TYPE__'
! '__INT_FAST32_TYPE__'
! '__INT_FAST64_TYPE__'
! '__UINT_FAST8_TYPE__'
! '__UINT_FAST16_TYPE__'
! '__UINT_FAST32_TYPE__'
! '__UINT_FAST64_TYPE__'
! '__INTPTR_TYPE__'
! '__UINTPTR_TYPE__'
       These macros are defined to the correct underlying types for the
!      'size_t', 'ptrdiff_t', 'wchar_t', 'wint_t', 'intmax_t',
!      'uintmax_t', 'sig_atomic_t', 'int8_t', 'int16_t', 'int32_t',
!      'int64_t', 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
!      'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
!      'uint_least8_t', 'uint_least16_t', 'uint_least32_t',
!      'uint_least64_t', 'int_fast8_t', 'int_fast16_t', 'int_fast32_t',
!      'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t',
!      'uint_fast64_t', 'intptr_t', and 'uintptr_t' typedefs,
       respectively.  They exist to make the standard header files
!      'stddef.h', 'stdint.h', and 'wchar.h' work correctly.  You should
       not use these macros directly; instead, include the appropriate
       headers and use the typedefs.  Some of these macros may not be
!      defined on particular systems if GCC does not provide a 'stdint.h'
       header on those systems.
  
! '__CHAR_BIT__'
       Defined to the number of bits used in the representation of the
!      'char' data type.  It exists to make the standard header given
       numerical limits work correctly.  You should not use this macro
       directly; instead, include the appropriate headers.
  
! '__SCHAR_MAX__'
! '__WCHAR_MAX__'
! '__SHRT_MAX__'
! '__INT_MAX__'
! '__LONG_MAX__'
! '__LONG_LONG_MAX__'
! '__WINT_MAX__'
! '__SIZE_MAX__'
! '__PTRDIFF_MAX__'
! '__INTMAX_MAX__'
! '__UINTMAX_MAX__'
! '__SIG_ATOMIC_MAX__'
! '__INT8_MAX__'
! '__INT16_MAX__'
! '__INT32_MAX__'
! '__INT64_MAX__'
! '__UINT8_MAX__'
! '__UINT16_MAX__'
! '__UINT32_MAX__'
! '__UINT64_MAX__'
! '__INT_LEAST8_MAX__'
! '__INT_LEAST16_MAX__'
! '__INT_LEAST32_MAX__'
! '__INT_LEAST64_MAX__'
! '__UINT_LEAST8_MAX__'
! '__UINT_LEAST16_MAX__'
! '__UINT_LEAST32_MAX__'
! '__UINT_LEAST64_MAX__'
! '__INT_FAST8_MAX__'
! '__INT_FAST16_MAX__'
! '__INT_FAST32_MAX__'
! '__INT_FAST64_MAX__'
! '__UINT_FAST8_MAX__'
! '__UINT_FAST16_MAX__'
! '__UINT_FAST32_MAX__'
! '__UINT_FAST64_MAX__'
! '__INTPTR_MAX__'
! '__UINTPTR_MAX__'
! '__WCHAR_MIN__'
! '__WINT_MIN__'
! '__SIG_ATOMIC_MIN__'
!      Defined to the maximum value of the 'signed char', 'wchar_t',
!      'signed short', 'signed int', 'signed long', 'signed long long',
!      'wint_t', 'size_t', 'ptrdiff_t', 'intmax_t', 'uintmax_t',
!      'sig_atomic_t', 'int8_t', 'int16_t', 'int32_t', 'int64_t',
!      'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t', 'int_least8_t',
!      'int_least16_t', 'int_least32_t', 'int_least64_t', 'uint_least8_t',
!      'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
!      'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
!      'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
!      'intptr_t', and 'uintptr_t' types and to the minimum value of the
!      'wchar_t', 'wint_t', and 'sig_atomic_t' types respectively.  They
       exist to make the standard header given numerical limits work
       correctly.  You should not use these macros directly; instead,
       include the appropriate headers.  Some of these macros may not be
!      defined on particular systems if GCC does not provide a 'stdint.h'
       header on those systems.
  
! '__INT8_C'
! '__INT16_C'
! '__INT32_C'
! '__INT64_C'
! '__UINT8_C'
! '__UINT16_C'
! '__UINT32_C'
! '__UINT64_C'
! '__INTMAX_C'
! '__UINTMAX_C'
!      Defined to implementations of the standard 'stdint.h' macros with
!      the same names without the leading '__'.  They exist the make the
       implementation of that header work correctly.  You should not use
       these macros directly; instead, include the appropriate headers.
       Some of these macros may not be defined on particular systems if
!      GCC does not provide a 'stdint.h' header on those systems.
  
! '__SCHAR_WIDTH__'
! '__SHRT_WIDTH__'
! '__INT_WIDTH__'
! '__LONG_WIDTH__'
! '__LONG_LONG_WIDTH__'
! '__PTRDIFF_WIDTH__'
! '__SIG_ATOMIC_WIDTH__'
! '__SIZE_WIDTH__'
! '__WCHAR_WIDTH__'
! '__WINT_WIDTH__'
! '__INT_LEAST8_WIDTH__'
! '__INT_LEAST16_WIDTH__'
! '__INT_LEAST32_WIDTH__'
! '__INT_LEAST64_WIDTH__'
! '__INT_FAST8_WIDTH__'
! '__INT_FAST16_WIDTH__'
! '__INT_FAST32_WIDTH__'
! '__INT_FAST64_WIDTH__'
! '__INTPTR_WIDTH__'
! '__INTMAX_WIDTH__'
       Defined to the bit widths of the corresponding types.  They exist
!      to make the implementations of 'limits.h' and 'stdint.h' behave
       correctly.  You should not use these macros directly; instead,
       include the appropriate headers.  Some of these macros may not be
!      defined on particular systems if GCC does not provide a 'stdint.h'
       header on those systems.
  
! '__SIZEOF_INT__'
! '__SIZEOF_LONG__'
! '__SIZEOF_LONG_LONG__'
! '__SIZEOF_SHORT__'
! '__SIZEOF_POINTER__'
! '__SIZEOF_FLOAT__'
! '__SIZEOF_DOUBLE__'
! '__SIZEOF_LONG_DOUBLE__'
! '__SIZEOF_SIZE_T__'
! '__SIZEOF_WCHAR_T__'
! '__SIZEOF_WINT_T__'
! '__SIZEOF_PTRDIFF_T__'
!      Defined to the number of bytes of the C standard data types: 'int',
!      'long', 'long long', 'short', 'void *', 'float', 'double', 'long
!      double', 'size_t', 'wchar_t', 'wint_t' and 'ptrdiff_t'.
  
! '__BYTE_ORDER__'
! '__ORDER_LITTLE_ENDIAN__'
! '__ORDER_BIG_ENDIAN__'
! '__ORDER_PDP_ENDIAN__'
!      '__BYTE_ORDER__' is defined to one of the values
!      '__ORDER_LITTLE_ENDIAN__', '__ORDER_BIG_ENDIAN__', or
!      '__ORDER_PDP_ENDIAN__' to reflect the layout of multi-byte and
!      multi-word quantities in memory.  If '__BYTE_ORDER__' is equal to
!      '__ORDER_LITTLE_ENDIAN__' or '__ORDER_BIG_ENDIAN__', then
       multi-byte and multi-word quantities are laid out identically: the
       byte (word) at the lowest address is the least significant or most
       significant byte (word) of the quantity, respectively.  If
!      '__BYTE_ORDER__' is equal to '__ORDER_PDP_ENDIAN__', then bytes in
       16-bit words are laid out in a little-endian fashion, whereas the
       16-bit subwords of a 32-bit quantity are laid out in big-endian
       fashion.
--- 1834,2072 ----
       make sure that programs will execute with the same effect whether
       or not they are defined.  If they are defined, their value is 1.
  
! ‘__GNUC_GNU_INLINE__’
!      GCC defines this macro if functions declared ‘inline’ will be
       handled in GCC's traditional gnu90 mode.  Object files will contain
!      externally visible definitions of all functions declared ‘inline’
!      without ‘extern’ or ‘static’.  They will not contain any
!      definitions of any functions declared ‘extern inline’.
  
! ‘__GNUC_STDC_INLINE__’
!      GCC defines this macro if functions declared ‘inline’ will be
       handled according to the ISO C99 or later standards.  Object files
       will contain externally visible definitions of all functions
!      declared ‘extern inline’.  They will not contain definitions of any
!      functions declared ‘inline’ without ‘extern’.
  
!      If this macro is defined, GCC supports the ‘gnu_inline’ function
       attribute as a way to always get the gnu90 behavior.
  
! ‘__CHAR_UNSIGNED__’
!      GCC defines this macro if and only if the data type ‘char’ is
       unsigned on the target machine.  It exists to cause the standard
!      header file ‘limits.h’ to work correctly.  You should not use this
       macro yourself; instead, refer to the standard macros defined in
!      ‘limits.h’.
  
! ‘__WCHAR_UNSIGNED__’
!      Like ‘__CHAR_UNSIGNED__’, this macro is defined if and only if the
!      data type ‘wchar_t’ is unsigned and the front-end is in C++ mode.
  
! ‘__REGISTER_PREFIX__’
       This macro expands to a single token (not a string constant) which
       is the prefix applied to CPU register names in assembly language
       for this target.  You can use it to write assembly that is usable
!      in multiple environments.  For example, in the ‘m68k-aout’
!      environment it expands to nothing, but in the ‘m68k-coff’
!      environment it expands to a single ‘%’.
  
! ‘__USER_LABEL_PREFIX__’
       This macro expands to a single token which is the prefix applied to
       user labels (symbols visible to C code) in assembly.  For example,
!      in the ‘m68k-aout’ environment it expands to an ‘_’, but in the
!      ‘m68k-coff’ environment it expands to nothing.
  
       This macro will have the correct definition even if
!      ‘-f(no-)underscores’ is in use, but it will not be correct if
       target-specific options that adjust this prefix are used (e.g. the
!      OSF/rose ‘-mno-underscores’ option).
  
! ‘__SIZE_TYPE__’
! ‘__PTRDIFF_TYPE__’
! ‘__WCHAR_TYPE__’
! ‘__WINT_TYPE__’
! ‘__INTMAX_TYPE__’
! ‘__UINTMAX_TYPE__’
! ‘__SIG_ATOMIC_TYPE__’
! ‘__INT8_TYPE__’
! ‘__INT16_TYPE__’
! ‘__INT32_TYPE__’
! ‘__INT64_TYPE__’
! ‘__UINT8_TYPE__’
! ‘__UINT16_TYPE__’
! ‘__UINT32_TYPE__’
! ‘__UINT64_TYPE__’
! ‘__INT_LEAST8_TYPE__’
! ‘__INT_LEAST16_TYPE__’
! ‘__INT_LEAST32_TYPE__’
! ‘__INT_LEAST64_TYPE__’
! ‘__UINT_LEAST8_TYPE__’
! ‘__UINT_LEAST16_TYPE__’
! ‘__UINT_LEAST32_TYPE__’
! ‘__UINT_LEAST64_TYPE__’
! ‘__INT_FAST8_TYPE__’
! ‘__INT_FAST16_TYPE__’
! ‘__INT_FAST32_TYPE__’
! ‘__INT_FAST64_TYPE__’
! ‘__UINT_FAST8_TYPE__’
! ‘__UINT_FAST16_TYPE__’
! ‘__UINT_FAST32_TYPE__’
! ‘__UINT_FAST64_TYPE__’
! ‘__INTPTR_TYPE__’
! ‘__UINTPTR_TYPE__’
       These macros are defined to the correct underlying types for the
!      ‘size_t’, ‘ptrdiff_t’, ‘wchar_t’, ‘wint_t’, ‘intmax_t’,
!      ‘uintmax_t’, ‘sig_atomic_t’, ‘int8_t’, ‘int16_t’, ‘int32_t’,
!      ‘int64_t’, ‘uint8_t’, ‘uint16_t’, ‘uint32_t’, ‘uint64_t’,
!      ‘int_least8_t’, ‘int_least16_t’, ‘int_least32_t’, ‘int_least64_t’,
!      ‘uint_least8_t’, ‘uint_least16_t’, ‘uint_least32_t’,
!      ‘uint_least64_t’, ‘int_fast8_t’, ‘int_fast16_t’, ‘int_fast32_t’,
!      ‘int_fast64_t’, ‘uint_fast8_t’, ‘uint_fast16_t’, ‘uint_fast32_t’,
!      ‘uint_fast64_t’, ‘intptr_t’, and ‘uintptr_t’ typedefs,
       respectively.  They exist to make the standard header files
!      ‘stddef.h’, ‘stdint.h’, and ‘wchar.h’ work correctly.  You should
       not use these macros directly; instead, include the appropriate
       headers and use the typedefs.  Some of these macros may not be
!      defined on particular systems if GCC does not provide a ‘stdint.h’
       header on those systems.
  
! ‘__CHAR_BIT__’
       Defined to the number of bits used in the representation of the
!      ‘char’ data type.  It exists to make the standard header given
       numerical limits work correctly.  You should not use this macro
       directly; instead, include the appropriate headers.
  
! ‘__SCHAR_MAX__’
! ‘__WCHAR_MAX__’
! ‘__SHRT_MAX__’
! ‘__INT_MAX__’
! ‘__LONG_MAX__’
! ‘__LONG_LONG_MAX__’
! ‘__WINT_MAX__’
! ‘__SIZE_MAX__’
! ‘__PTRDIFF_MAX__’
! ‘__INTMAX_MAX__’
! ‘__UINTMAX_MAX__’
! ‘__SIG_ATOMIC_MAX__’
! ‘__INT8_MAX__’
! ‘__INT16_MAX__’
! ‘__INT32_MAX__’
! ‘__INT64_MAX__’
! ‘__UINT8_MAX__’
! ‘__UINT16_MAX__’
! ‘__UINT32_MAX__’
! ‘__UINT64_MAX__’
! ‘__INT_LEAST8_MAX__’
! ‘__INT_LEAST16_MAX__’
! ‘__INT_LEAST32_MAX__’
! ‘__INT_LEAST64_MAX__’
! ‘__UINT_LEAST8_MAX__’
! ‘__UINT_LEAST16_MAX__’
! ‘__UINT_LEAST32_MAX__’
! ‘__UINT_LEAST64_MAX__’
! ‘__INT_FAST8_MAX__’
! ‘__INT_FAST16_MAX__’
! ‘__INT_FAST32_MAX__’
! ‘__INT_FAST64_MAX__’
! ‘__UINT_FAST8_MAX__’
! ‘__UINT_FAST16_MAX__’
! ‘__UINT_FAST32_MAX__’
! ‘__UINT_FAST64_MAX__’
! ‘__INTPTR_MAX__’
! ‘__UINTPTR_MAX__’
! ‘__WCHAR_MIN__’
! ‘__WINT_MIN__’
! ‘__SIG_ATOMIC_MIN__’
!      Defined to the maximum value of the ‘signed char’, ‘wchar_t’,
!      ‘signed short’, ‘signed int’, ‘signed long’, ‘signed long long’,
!      ‘wint_t’, ‘size_t’, ‘ptrdiff_t’, ‘intmax_t’, ‘uintmax_t’,
!      ‘sig_atomic_t’, ‘int8_t’, ‘int16_t’, ‘int32_t’, ‘int64_t’,
!      ‘uint8_t’, ‘uint16_t’, ‘uint32_t’, ‘uint64_t’, ‘int_least8_t’,
!      ‘int_least16_t’, ‘int_least32_t’, ‘int_least64_t’, ‘uint_least8_t’,
!      ‘uint_least16_t’, ‘uint_least32_t’, ‘uint_least64_t’,
!      ‘int_fast8_t’, ‘int_fast16_t’, ‘int_fast32_t’, ‘int_fast64_t’,
!      ‘uint_fast8_t’, ‘uint_fast16_t’, ‘uint_fast32_t’, ‘uint_fast64_t’,
!      ‘intptr_t’, and ‘uintptr_t’ types and to the minimum value of the
!      ‘wchar_t’, ‘wint_t’, and ‘sig_atomic_t’ types respectively.  They
       exist to make the standard header given numerical limits work
       correctly.  You should not use these macros directly; instead,
       include the appropriate headers.  Some of these macros may not be
!      defined on particular systems if GCC does not provide a ‘stdint.h’
       header on those systems.
  
! ‘__INT8_C’
! ‘__INT16_C’
! ‘__INT32_C’
! ‘__INT64_C’
! ‘__UINT8_C’
! ‘__UINT16_C’
! ‘__UINT32_C’
! ‘__UINT64_C’
! ‘__INTMAX_C’
! ‘__UINTMAX_C’
!      Defined to implementations of the standard ‘stdint.h’ macros with
!      the same names without the leading ‘__’.  They exist the make the
       implementation of that header work correctly.  You should not use
       these macros directly; instead, include the appropriate headers.
       Some of these macros may not be defined on particular systems if
!      GCC does not provide a ‘stdint.h’ header on those systems.
  
! ‘__SCHAR_WIDTH__’
! ‘__SHRT_WIDTH__’
! ‘__INT_WIDTH__’
! ‘__LONG_WIDTH__’
! ‘__LONG_LONG_WIDTH__’
! ‘__PTRDIFF_WIDTH__’
! ‘__SIG_ATOMIC_WIDTH__’
! ‘__SIZE_WIDTH__’
! ‘__WCHAR_WIDTH__’
! ‘__WINT_WIDTH__’
! ‘__INT_LEAST8_WIDTH__’
! ‘__INT_LEAST16_WIDTH__’
! ‘__INT_LEAST32_WIDTH__’
! ‘__INT_LEAST64_WIDTH__’
! ‘__INT_FAST8_WIDTH__’
! ‘__INT_FAST16_WIDTH__’
! ‘__INT_FAST32_WIDTH__’
! ‘__INT_FAST64_WIDTH__’
! ‘__INTPTR_WIDTH__’
! ‘__INTMAX_WIDTH__’
       Defined to the bit widths of the corresponding types.  They exist
!      to make the implementations of ‘limits.h’ and ‘stdint.h’ behave
       correctly.  You should not use these macros directly; instead,
       include the appropriate headers.  Some of these macros may not be
!      defined on particular systems if GCC does not provide a ‘stdint.h’
       header on those systems.
  
! ‘__SIZEOF_INT__’
! ‘__SIZEOF_LONG__’
! ‘__SIZEOF_LONG_LONG__’
! ‘__SIZEOF_SHORT__’
! ‘__SIZEOF_POINTER__’
! ‘__SIZEOF_FLOAT__’
! ‘__SIZEOF_DOUBLE__’
! ‘__SIZEOF_LONG_DOUBLE__’
! ‘__SIZEOF_SIZE_T__’
! ‘__SIZEOF_WCHAR_T__’
! ‘__SIZEOF_WINT_T__’
! ‘__SIZEOF_PTRDIFF_T__’
!      Defined to the number of bytes of the C standard data types: ‘int’,
!      ‘long’, ‘long long’, ‘short’, ‘void *’, ‘float’, ‘double’, ‘long
!      double’, ‘size_t’, ‘wchar_t’, ‘wint_t’ and ‘ptrdiff_t’.
  
! ‘__BYTE_ORDER__’
! ‘__ORDER_LITTLE_ENDIAN__’
! ‘__ORDER_BIG_ENDIAN__’
! ‘__ORDER_PDP_ENDIAN__’
!      ‘__BYTE_ORDER__’ is defined to one of the values
!      ‘__ORDER_LITTLE_ENDIAN__’, ‘__ORDER_BIG_ENDIAN__’, or
!      ‘__ORDER_PDP_ENDIAN__’ to reflect the layout of multi-byte and
!      multi-word quantities in memory.  If ‘__BYTE_ORDER__’ is equal to
!      ‘__ORDER_LITTLE_ENDIAN__’ or ‘__ORDER_BIG_ENDIAN__’, then
       multi-byte and multi-word quantities are laid out identically: the
       byte (word) at the lowest address is the least significant or most
       significant byte (word) of the quantity, respectively.  If
!      ‘__BYTE_ORDER__’ is equal to ‘__ORDER_PDP_ENDIAN__’, then bytes in
       16-bit words are laid out in a little-endian fashion, whereas the
       16-bit subwords of a 32-bit quantity are laid out in big-endian
       fashion.
*************** double underscores.
*** 2076,2116 ****
            /* Test for a little-endian machine */
            #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
  
! '__FLOAT_WORD_ORDER__'
!      '__FLOAT_WORD_ORDER__' is defined to one of the values
!      '__ORDER_LITTLE_ENDIAN__' or '__ORDER_BIG_ENDIAN__' to reflect the
       layout of the words of multi-word floating-point quantities.
  
! '__DEPRECATED'
       This macro is defined, with value 1, when compiling a C++ source
       file with warnings about deprecated constructs enabled.  These
       warnings are enabled by default, but can be disabled with
!      '-Wno-deprecated'.
  
! '__EXCEPTIONS'
       This macro is defined, with value 1, when compiling a C++ source
!      file with exceptions enabled.  If '-fno-exceptions' is used when
       compiling the file, then this macro is not defined.
  
! '__GXX_RTTI'
       This macro is defined, with value 1, when compiling a C++ source
!      file with runtime type identification enabled.  If '-fno-rtti' is
       used when compiling the file, then this macro is not defined.
  
! '__USING_SJLJ_EXCEPTIONS__'
       This macro is defined, with value 1, if the compiler uses the old
!      mechanism based on 'setjmp' and 'longjmp' for exception handling.
  
! '__GXX_EXPERIMENTAL_CXX0X__'
       This macro is defined when compiling a C++ source file with C++11
       features enabled, i.e., for all C++ language dialects except
!      '-std=c++98' and '-std=gnu++98'.  This macro is obsolete, but can
       be used to detect experimental C++0x features in very old versions
!      of GCC. Since GCC 4.7.0 the '__cplusplus' macro is defined
!      correctly, so most code should test '__cplusplus >= 201103L'
       instead of using this macro.
  
! '__GXX_WEAK__'
       This macro is defined when compiling a C++ source file.  It has the
       value 1 if the compiler will use weak symbols, COMDAT sections, or
       other similar techniques to collapse symbols with "vague linkage"
--- 2076,2116 ----
            /* Test for a little-endian machine */
            #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
  
! ‘__FLOAT_WORD_ORDER__’
!      ‘__FLOAT_WORD_ORDER__’ is defined to one of the values
!      ‘__ORDER_LITTLE_ENDIAN__’ or ‘__ORDER_BIG_ENDIAN__’ to reflect the
       layout of the words of multi-word floating-point quantities.
  
! ‘__DEPRECATED’
       This macro is defined, with value 1, when compiling a C++ source
       file with warnings about deprecated constructs enabled.  These
       warnings are enabled by default, but can be disabled with
!      ‘-Wno-deprecated’.
  
! ‘__EXCEPTIONS’
       This macro is defined, with value 1, when compiling a C++ source
!      file with exceptions enabled.  If ‘-fno-exceptions’ is used when
       compiling the file, then this macro is not defined.
  
! ‘__GXX_RTTI’
       This macro is defined, with value 1, when compiling a C++ source
!      file with runtime type identification enabled.  If ‘-fno-rtti’ is
       used when compiling the file, then this macro is not defined.
  
! ‘__USING_SJLJ_EXCEPTIONS__’
       This macro is defined, with value 1, if the compiler uses the old
!      mechanism based on ‘setjmp’ and ‘longjmp’ for exception handling.
  
! ‘__GXX_EXPERIMENTAL_CXX0X__’
       This macro is defined when compiling a C++ source file with C++11
       features enabled, i.e., for all C++ language dialects except
!      ‘-std=c++98’ and ‘-std=gnu++98’.  This macro is obsolete, but can
       be used to detect experimental C++0x features in very old versions
!      of GCC. Since GCC 4.7.0 the ‘__cplusplus’ macro is defined
!      correctly, so most code should test ‘__cplusplus >= 201103L’
       instead of using this macro.
  
! ‘__GXX_WEAK__’
       This macro is defined when compiling a C++ source file.  It has the
       value 1 if the compiler will use weak symbols, COMDAT sections, or
       other similar techniques to collapse symbols with "vague linkage"
*************** double underscores.
*** 2120,2219 ****
       the purpose of this macro is to ease implementation of the C++
       runtime library provided with G++.
  
! '__NEXT_RUNTIME__'
       This macro is defined, with value 1, if (and only if) the NeXT
!      runtime (as in '-fnext-runtime') is in use for Objective-C.  If the
       GNU runtime is used, this macro is not defined, so that you can use
       this macro to determine which runtime (NeXT or GNU) is being used.
  
! '__LP64__'
! '_LP64'
       These macros are defined, with value 1, if (and only if) the
!      compilation is for a target where 'long int' and pointer both use
!      64-bits and 'int' uses 32-bit.
  
! '__SSP__'
!      This macro is defined, with value 1, when '-fstack-protector' is in
       use.
  
! '__SSP_ALL__'
!      This macro is defined, with value 2, when '-fstack-protector-all'
       is in use.
  
! '__SSP_STRONG__'
       This macro is defined, with value 3, when
!      '-fstack-protector-strong' is in use.
  
! '__SSP_EXPLICIT__'
       This macro is defined, with value 4, when
!      '-fstack-protector-explicit' is in use.
  
! '__SANITIZE_ADDRESS__'
!      This macro is defined, with value 1, when '-fsanitize=address' or
!      '-fsanitize=kernel-address' are in use.
  
! '__SANITIZE_THREAD__'
!      This macro is defined, with value 1, when '-fsanitize=thread' is in
       use.
  
! '__TIMESTAMP__'
       This macro expands to a string constant that describes the date and
       time of the last modification of the current source file.  The
       string constant contains abbreviated day of the week, month, day of
       the month, time in hh:mm:ss form, year and looks like
!      '"Sun Sep 16 01:03:52 1973"'.  If the day of the month is less than
       10, it is padded with a space on the left.
  
       If GCC cannot determine the current date, it will emit a warning
!      message (once per compilation) and '__TIMESTAMP__' will expand to
!      '"??? ??? ?? ??:??:?? ????"'.
  
! '__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1'
! '__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2'
! '__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4'
! '__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8'
! '__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16'
       These macros are defined when the target processor supports atomic
       compare and swap operations on operands 1, 2, 4, 8 or 16 bytes in
       length, respectively.
  
! '__HAVE_SPECULATION_SAFE_VALUE'
       This macro is defined with the value 1 to show that this version of
!      GCC supports '__builtin_speculation_safe_value'.
  
! '__GCC_HAVE_DWARF2_CFI_ASM'
       This macro is defined when the compiler is emitting DWARF CFI
       directives to the assembler.  When this is defined, it is possible
       to emit those same directives in inline assembly.
  
! '__FP_FAST_FMA'
! '__FP_FAST_FMAF'
! '__FP_FAST_FMAL'
       These macros are defined with value 1 if the backend supports the
!      'fma', 'fmaf', and 'fmal' builtin functions, so that the include
!      file 'math.h' can define the macros 'FP_FAST_FMA', 'FP_FAST_FMAF',
!      and 'FP_FAST_FMAL' for compatibility with the 1999 C standard.
  
! '__FP_FAST_FMAF16'
! '__FP_FAST_FMAF32'
! '__FP_FAST_FMAF64'
! '__FP_FAST_FMAF128'
! '__FP_FAST_FMAF32X'
! '__FP_FAST_FMAF64X'
! '__FP_FAST_FMAF128X'
       These macros are defined with the value 1 if the backend supports
!      the 'fma' functions using the additional '_FloatN' and '_FloatNx'
       types that are defined in ISO/IEC TS 18661-3:2015.  The include
!      file 'math.h' can define the 'FP_FAST_FMAFN' and 'FP_FAST_FMAFNx'
!      macros if the user defined '__STDC_WANT_IEC_60559_TYPES_EXT__'
!      before including 'math.h'.
  
! '__GCC_IEC_559'
       This macro is defined to indicate the intended level of support for
       IEEE 754 (IEC 60559) floating-point arithmetic.  It expands to a
       nonnegative integer value.  If 0, it indicates that the combination
       of the compiler configuration and the command-line options is not
!      intended to support IEEE 754 arithmetic for 'float' and 'double' as
       defined in C99 and C11 Annex F (for example, that the standard
       rounding modes and exceptions are not supported, or that
       optimizations are enabled that conflict with IEEE 754 semantics).
--- 2120,2219 ----
       the purpose of this macro is to ease implementation of the C++
       runtime library provided with G++.
  
! ‘__NEXT_RUNTIME__’
       This macro is defined, with value 1, if (and only if) the NeXT
!      runtime (as in ‘-fnext-runtime’) is in use for Objective-C.  If the
       GNU runtime is used, this macro is not defined, so that you can use
       this macro to determine which runtime (NeXT or GNU) is being used.
  
! ‘__LP64__’
! ‘_LP64’
       These macros are defined, with value 1, if (and only if) the
!      compilation is for a target where ‘long int’ and pointer both use
!      64-bits and ‘int’ uses 32-bit.
  
! ‘__SSP__’
!      This macro is defined, with value 1, when ‘-fstack-protector’ is in
       use.
  
! ‘__SSP_ALL__’
!      This macro is defined, with value 2, when ‘-fstack-protector-all’
       is in use.
  
! ‘__SSP_STRONG__’
       This macro is defined, with value 3, when
!      ‘-fstack-protector-strong’ is in use.
  
! ‘__SSP_EXPLICIT__’
       This macro is defined, with value 4, when
!      ‘-fstack-protector-explicit’ is in use.
  
! ‘__SANITIZE_ADDRESS__’
!      This macro is defined, with value 1, when ‘-fsanitize=address’ or
!      ‘-fsanitize=kernel-address’ are in use.
  
! ‘__SANITIZE_THREAD__’
!      This macro is defined, with value 1, when ‘-fsanitize=thread’ is in
       use.
  
! ‘__TIMESTAMP__’
       This macro expands to a string constant that describes the date and
       time of the last modification of the current source file.  The
       string constant contains abbreviated day of the week, month, day of
       the month, time in hh:mm:ss form, year and looks like
!      ‘"Sun Sep 16 01:03:52 1973"’.  If the day of the month is less than
       10, it is padded with a space on the left.
  
       If GCC cannot determine the current date, it will emit a warning
!      message (once per compilation) and ‘__TIMESTAMP__’ will expand to
!      ‘"??? ??? ?? ??:??:?? ????"’.
  
! ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1’
! ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2’
! ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4’
! ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8’
! ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16’
       These macros are defined when the target processor supports atomic
       compare and swap operations on operands 1, 2, 4, 8 or 16 bytes in
       length, respectively.
  
! ‘__HAVE_SPECULATION_SAFE_VALUE’
       This macro is defined with the value 1 to show that this version of
!      GCC supports ‘__builtin_speculation_safe_value’.
  
! ‘__GCC_HAVE_DWARF2_CFI_ASM’
       This macro is defined when the compiler is emitting DWARF CFI
       directives to the assembler.  When this is defined, it is possible
       to emit those same directives in inline assembly.
  
! ‘__FP_FAST_FMA’
! ‘__FP_FAST_FMAF’
! ‘__FP_FAST_FMAL’
       These macros are defined with value 1 if the backend supports the
!      ‘fma’, ‘fmaf’, and ‘fmal’ builtin functions, so that the include
!      file ‘math.h’ can define the macros ‘FP_FAST_FMA’, ‘FP_FAST_FMAF’,
!      and ‘FP_FAST_FMAL’ for compatibility with the 1999 C standard.
  
! ‘__FP_FAST_FMAF16’
! ‘__FP_FAST_FMAF32’
! ‘__FP_FAST_FMAF64’
! ‘__FP_FAST_FMAF128’
! ‘__FP_FAST_FMAF32X’
! ‘__FP_FAST_FMAF64X’
! ‘__FP_FAST_FMAF128X’
       These macros are defined with the value 1 if the backend supports
!      the ‘fma’ functions using the additional ‘_FloatN’ and ‘_FloatNx’
       types that are defined in ISO/IEC TS 18661-3:2015.  The include
!      file ‘math.h’ can define the ‘FP_FAST_FMAFN’ and ‘FP_FAST_FMAFNx’
!      macros if the user defined ‘__STDC_WANT_IEC_60559_TYPES_EXT__’
!      before including ‘math.h’.
  
! ‘__GCC_IEC_559’
       This macro is defined to indicate the intended level of support for
       IEEE 754 (IEC 60559) floating-point arithmetic.  It expands to a
       nonnegative integer value.  If 0, it indicates that the combination
       of the compiler configuration and the command-line options is not
!      intended to support IEEE 754 arithmetic for ‘float’ and ‘double’ as
       defined in C99 and C11 Annex F (for example, that the standard
       rounding modes and exceptions are not supported, or that
       optimizations are enabled that conflict with IEEE 754 semantics).
*************** double underscores.
*** 2228,2277 ****
       controlled by standard pragmas, where those standards do not
       require a particular default state.  It does not indicate whether
       optimizations respect signaling NaN semantics (the macro for that
!      is '__SUPPORT_SNAN__').  It does not indicate support for decimal
       floating point or the IEEE 754 binary16 and binary128 types.
  
! '__GCC_IEC_559_COMPLEX'
       This macro is defined to indicate the intended level of support for
       IEEE 754 (IEC 60559) floating-point arithmetic for complex numbers,
       as defined in C99 and C11 Annex G. It expands to a nonnegative
       integer value.  If 0, it indicates that the combination of the
       compiler configuration and the command-line options is not intended
       to support Annex G requirements (for example, because
!      '-fcx-limited-range' was used).  If 1 or more, it indicates that it
       is intended to support those requirements; this does not mean that
       all relevant language features are supported by GCC.
  
! '__NO_MATH_ERRNO__'
!      This macro is defined if '-fno-math-errno' is used, or enabled by
!      another option such as '-ffast-math' or by default.
  
! '__RECIPROCAL_MATH__'
!      This macro is defined if '-freciprocal-math' is used, or enabled by
!      another option such as '-ffast-math' or by default.
  
! '__NO_SIGNED_ZEROS__'
!      This macro is defined if '-fno-signed-zeros' is used, or enabled by
!      another option such as '-ffast-math' or by default.
  
! '__NO_TRAPPING_MATH__'
!      This macro is defined if '-fno-trapping-math' is used.
  
! '__ASSOCIATIVE_MATH__'
!      This macro is defined if '-fassociative-math' is used, or enabled
!      by another option such as '-ffast-math' or by default.
  
! '__ROUNDING_MATH__'
!      This macro is defined if '-frounding-math' is used.
  
! '__GNUC_EXECUTION_CHARSET_NAME'
! '__GNUC_WIDE_EXECUTION_CHARSET_NAME'
       These macros are defined to expand to a narrow string literal of
       the name of the narrow and wide compile-time execution character
       set used.  It directly reflects the name passed to the options
!      '-fexec-charset' and '-fwide-exec-charset', or the defaults
       documented for those options (that is, it can expand to something
!      like '"UTF-8"').  *Note Invocation::.
  
  
  File: cpp.info,  Node: System-specific Predefined Macros,  Next: C++ Named Operators,  Prev: Common Predefined Macros,  Up: Predefined Macros
--- 2228,2277 ----
       controlled by standard pragmas, where those standards do not
       require a particular default state.  It does not indicate whether
       optimizations respect signaling NaN semantics (the macro for that
!      is ‘__SUPPORT_SNAN__’).  It does not indicate support for decimal
       floating point or the IEEE 754 binary16 and binary128 types.
  
! ‘__GCC_IEC_559_COMPLEX’
       This macro is defined to indicate the intended level of support for
       IEEE 754 (IEC 60559) floating-point arithmetic for complex numbers,
       as defined in C99 and C11 Annex G. It expands to a nonnegative
       integer value.  If 0, it indicates that the combination of the
       compiler configuration and the command-line options is not intended
       to support Annex G requirements (for example, because
!      ‘-fcx-limited-range’ was used).  If 1 or more, it indicates that it
       is intended to support those requirements; this does not mean that
       all relevant language features are supported by GCC.
  
! ‘__NO_MATH_ERRNO__’
!      This macro is defined if ‘-fno-math-errno’ is used, or enabled by
!      another option such as ‘-ffast-math’ or by default.
  
! ‘__RECIPROCAL_MATH__’
!      This macro is defined if ‘-freciprocal-math’ is used, or enabled by
!      another option such as ‘-ffast-math’ or by default.
  
! ‘__NO_SIGNED_ZEROS__’
!      This macro is defined if ‘-fno-signed-zeros’ is used, or enabled by
!      another option such as ‘-ffast-math’ or by default.
  
! ‘__NO_TRAPPING_MATH__’
!      This macro is defined if ‘-fno-trapping-math’ is used.
  
! ‘__ASSOCIATIVE_MATH__’
!      This macro is defined if ‘-fassociative-math’ is used, or enabled
!      by another option such as ‘-ffast-math’ or by default.
  
! ‘__ROUNDING_MATH__’
!      This macro is defined if ‘-frounding-math’ is used.
  
! ‘__GNUC_EXECUTION_CHARSET_NAME’
! ‘__GNUC_WIDE_EXECUTION_CHARSET_NAME’
       These macros are defined to expand to a narrow string literal of
       the name of the narrow and wide compile-time execution character
       set used.  It directly reflects the name passed to the options
!      ‘-fexec-charset’ and ‘-fwide-exec-charset’, or the defaults
       documented for those options (that is, it can expand to something
!      like ‘"UTF-8"’).  *Note Invocation::.
  
  
  File: cpp.info,  Node: System-specific Predefined Macros,  Next: C++ Named Operators,  Prev: Common Predefined Macros,  Up: Predefined Macros
*************** File: cpp.info,  Node: System-specific P
*** 2282,2304 ****
  The C preprocessor normally predefines several macros that indicate what
  type of system and machine is in use.  They are obviously different on
  each target supported by GCC.  This manual, being for all systems and
! machines, cannot tell you what their names are, but you can use 'cpp
! -dM' to see them all.  *Note Invocation::.  All system-specific
  predefined macros expand to a constant value, so you can test them with
! either '#ifdef' or '#if'.
  
     The C standard requires that all system-specific macros be part of
! the "reserved namespace".  All names which begin with two underscores,
  or an underscore and a capital letter, are reserved for the compiler and
  library to use as they wish.  However, historically system-specific
  macros have had names with no special prefix; for instance, it is common
! to find 'unix' defined on Unix systems.  For all such macros, GCC
  provides a parallel macro with two underscores added at the beginning
! and the end.  If 'unix' is defined, '__unix__' will be defined too.
! There will never be more than two underscores; the parallel of '_mips'
! is '__mips__'.
  
!    When the '-ansi' option, or any '-std' option that requests strict
  conformance, is given to the compiler, all the system-specific
  predefined macros outside the reserved namespace are suppressed.  The
  parallel macros, inside the reserved namespace, remain defined.
--- 2282,2304 ----
  The C preprocessor normally predefines several macros that indicate what
  type of system and machine is in use.  They are obviously different on
  each target supported by GCC.  This manual, being for all systems and
! machines, cannot tell you what their names are, but you can use ‘cpp
! -dM’ to see them all.  *Note Invocation::.  All system-specific
  predefined macros expand to a constant value, so you can test them with
! either ‘#ifdef’ or ‘#if’.
  
     The C standard requires that all system-specific macros be part of
! the “reserved namespace”.  All names which begin with two underscores,
  or an underscore and a capital letter, are reserved for the compiler and
  library to use as they wish.  However, historically system-specific
  macros have had names with no special prefix; for instance, it is common
! to find ‘unix’ defined on Unix systems.  For all such macros, GCC
  provides a parallel macro with two underscores added at the beginning
! and the end.  If ‘unix’ is defined, ‘__unix__’ will be defined too.
! There will never be more than two underscores; the parallel of ‘_mips’
! is ‘__mips__’.
  
!    When the ‘-ansi’ option, or any ‘-std’ option that requests strict
  conformance, is given to the compiler, all the system-specific
  predefined macros outside the reserved namespace are suppressed.  The
  parallel macros, inside the reserved namespace, remain defined.
*************** encourage you to correct older code to u
*** 2309,2315 ****
  you find it.  We don't recommend you use the system-specific macros that
  are in the reserved namespace, either.  It is better in the long run to
  check specifically for features you need, using a tool such as
! 'autoconf'.
  
  
  File: cpp.info,  Node: C++ Named Operators,  Prev: System-specific Predefined Macros,  Up: Predefined Macros
--- 2309,2315 ----
  you find it.  We don't recommend you use the system-specific macros that
  are in the reserved namespace, either.  It is better in the long run to
  check specifically for features you need, using a tool such as
! ‘autoconf’.
  
  
  File: cpp.info,  Node: C++ Named Operators,  Prev: System-specific Predefined Macros,  Up: Predefined Macros
*************** File: cpp.info,  Node: C++ Named Operato
*** 2320,2344 ****
  In C++, there are eleven keywords which are simply alternate spellings
  of operators normally written with punctuation.  These keywords are
  treated as such even in the preprocessor.  They function as operators in
! '#if', and they cannot be defined as macros or poisoned.  In C, you can
  request that those keywords take their C++ meaning by including
! 'iso646.h'.  That header defines each one as a normal object-like macro
  expanding to the appropriate punctuator.
  
     These are the named operators and their corresponding punctuators:
  
  Named Operator   Punctuator
! 'and'            '&&'
! 'and_eq'         '&='
! 'bitand'         '&'
! 'bitor'          '|'
! 'compl'          '~'
! 'not'            '!'
! 'not_eq'         '!='
! 'or'             '||'
! 'or_eq'          '|='
! 'xor'            '^'
! 'xor_eq'         '^='
  
  
  File: cpp.info,  Node: Undefining and Redefining Macros,  Next: Directives Within Macro Arguments,  Prev: Predefined Macros,  Up: Macros
--- 2320,2344 ----
  In C++, there are eleven keywords which are simply alternate spellings
  of operators normally written with punctuation.  These keywords are
  treated as such even in the preprocessor.  They function as operators in
! ‘#if’, and they cannot be defined as macros or poisoned.  In C, you can
  request that those keywords take their C++ meaning by including
! ‘iso646.h’.  That header defines each one as a normal object-like macro
  expanding to the appropriate punctuator.
  
     These are the named operators and their corresponding punctuators:
  
  Named Operator   Punctuator
! ‘and’            ‘&&’
! ‘and_eq’         ‘&=’
! ‘bitand’         ‘&’
! ‘bitor’          ‘|’
! ‘compl’          ‘~’
! ‘not’            ‘!’
! ‘not_eq’         ‘!=’
! ‘or’             ‘||’
! ‘or_eq’          ‘|=’
! ‘xor’            ‘^’
! ‘xor_eq’         ‘^=’
  
  
  File: cpp.info,  Node: Undefining and Redefining Macros,  Next: Directives Within Macro Arguments,  Prev: Predefined Macros,  Up: Macros
*************** File: cpp.info,  Node: Undefining and Re
*** 2346,2373 ****
  3.8 Undefining and Redefining Macros
  ====================================
  
! If a macro ceases to be useful, it may be "undefined" with the '#undef'
! directive.  '#undef' takes a single argument, the name of the macro to
  undefine.  You use the bare macro name, even if the macro is
  function-like.  It is an error if anything appears on the line after the
! macro name.  '#undef' has no effect if the name is not a macro.
  
       #define FOO 4
!      x = FOO;        ==> x = 4;
       #undef FOO
!      x = FOO;        ==> x = FOO;
  
!    Once a macro has been undefined, that identifier may be "redefined"
! as a macro by a subsequent '#define' directive.  The new definition need
  not have any resemblance to the old definition.
  
     However, if an identifier which is currently a macro is redefined,
! then the new definition must be "effectively the same" as the old one.
  Two macro definitions are effectively the same if:
!    * Both are the same type of macro (object- or function-like).
!    * All the tokens of the replacement list are the same.
!    * If there are any parameters, they are the same.
!    * Whitespace appears in the same places in both.  It need not be
       exactly the same amount of whitespace, though.  Remember that
       comments count as whitespace.
  
--- 2346,2373 ----
  3.8 Undefining and Redefining Macros
  ====================================
  
! If a macro ceases to be useful, it may be “undefined” with the ‘#undef’
! directive.  ‘#undef’ takes a single argument, the name of the macro to
  undefine.  You use the bare macro name, even if the macro is
  function-like.  It is an error if anything appears on the line after the
! macro name.  ‘#undef’ has no effect if the name is not a macro.
  
       #define FOO 4
!      x = FOO;        ↦ x = 4;
       #undef FOO
!      x = FOO;        ↦ x = FOO;
  
!    Once a macro has been undefined, that identifier may be “redefined”
! as a macro by a subsequent ‘#define’ directive.  The new definition need
  not have any resemblance to the old definition.
  
     However, if an identifier which is currently a macro is redefined,
! then the new definition must be “effectively the same” as the old one.
  Two macro definitions are effectively the same if:
!    • Both are the same type of macro (object- or function-like).
!    • All the tokens of the replacement list are the same.
!    • If there are any parameters, they are the same.
!    • Whitespace appears in the same places in both.  It need not be
       exactly the same amount of whitespace, though.  Remember that
       comments count as whitespace.
  
*************** arguments.  For example,
*** 2452,2459 ****
       #define twice(x) (2*(x))
       #define call_with_1(x) x(1)
       call_with_1 (twice)
!           ==> twice(1)
!           ==> (2*(1))
  
     Macro definitions do not have to have balanced parentheses.  By
  writing an unbalanced open parenthesis in a macro body, it is possible
--- 2452,2459 ----
       #define twice(x) (2*(x))
       #define call_with_1(x) x(1)
       call_with_1 (twice)
!           ↦ twice(1)
!           ↦ (2*(1))
  
     Macro definitions do not have to have balanced parentheses.  By
  writing an unbalanced open parenthesis in a macro body, it is possible
*************** outside of it.  For example,
*** 2463,2469 ****
       #define strange(file) fprintf (file, "%s %d",
       ...
       strange(stderr) p, 35)
!           ==> fprintf (stderr, "%s %d", p, 35)
  
     The ability to piece together a macro call can be useful, but the use
  of unbalanced open parentheses in a macro body is just confusing, and
--- 2463,2469 ----
       #define strange(file) fprintf (file, "%s %d",
       ...
       strange(stderr) p, 35)
!           ↦ fprintf (stderr, "%s %d", p, 35)
  
     The ability to piece together a macro call can be useful, but the use
  of unbalanced open parentheses in a macro body is just confusing, and
*************** way.
*** 2486,2496 ****
       #define ceil_div(x, y) (x + y - 1) / y
  
  whose purpose is to divide, rounding up.  (One use for this operation is
! to compute how many 'int' objects are needed to hold a certain number of
! 'char' objects.)  Then suppose it is used as follows:
  
       a = ceil_div (b & c, sizeof (int));
!           ==> a = (b & c + sizeof (int) - 1) / sizeof (int);
  
  This does not do what is intended.  The operator-precedence rules of C
  make it equivalent to this:
--- 2486,2496 ----
       #define ceil_div(x, y) (x + y - 1) / y
  
  whose purpose is to divide, rounding up.  (One use for this operation is
! to compute how many ‘int’ objects are needed to hold a certain number of
! ‘char’ objects.)  Then suppose it is used as follows:
  
       a = ceil_div (b & c, sizeof (int));
!           ↦ a = (b & c + sizeof (int) - 1) / sizeof (int);
  
  This does not do what is intended.  The operator-precedence rules of C
  make it equivalent to this:
*************** Defining the macro as
*** 2507,2525 ****
  
  provides the desired result.
  
!    Unintended grouping can result in another way.  Consider 'sizeof
! ceil_div(1, 2)'.  That has the appearance of a C expression that would
! compute the size of the type of 'ceil_div (1, 2)', but in fact it means
  something very different.  Here is what it expands to:
  
       sizeof ((1) + (2) - 1) / (2)
  
  This would take the size of an integer and divide it by two.  The
! precedence rules have put the division outside the 'sizeof' when it was
  intended to be inside.
  
     Parentheses around the entire macro definition prevent such problems.
! Here, then, is the recommended way to define 'ceil_div':
  
       #define ceil_div(x, y) (((x) + (y) - 1) / (y))
  
--- 2507,2525 ----
  
  provides the desired result.
  
!    Unintended grouping can result in another way.  Consider ‘sizeof
! ceil_div(1, 2)’.  That has the appearance of a C expression that would
! compute the size of the type of ‘ceil_div (1, 2)’, but in fact it means
  something very different.  Here is what it expands to:
  
       sizeof ((1) + (2) - 1) / (2)
  
  This would take the size of an integer and divide it by two.  The
! precedence rules have put the division outside the ‘sizeof’ when it was
  intended to be inside.
  
     Parentheses around the entire macro definition prevent such problems.
! Here, then, is the recommended way to define ‘ceil_div’:
  
       #define ceil_div(x, y) (((x) + (y) - 1) / (y))
  
*************** File: cpp.info,  Node: Swallowing the Se
*** 2531,2537 ****
  
  Often it is desirable to define a macro that expands into a compound
  statement.  Consider, for example, the following macro, that advances a
! pointer (the argument 'p' says where to find it) across whitespace
  characters:
  
       #define SKIP_SPACES(p, limit)  \
--- 2531,2537 ----
  
  Often it is desirable to define a macro that expands into a compound
  statement.  Consider, for example, the following macro, that advances a
! pointer (the argument ‘p’ says where to find it) across whitespace
  characters:
  
       #define SKIP_SPACES(p, limit)  \
*************** Here backslash-newline is used to split
*** 2544,2557 ****
  be a single logical line, so that it resembles the way such code would
  be laid out if not part of a macro definition.
  
!    A call to this macro might be 'SKIP_SPACES (p, lim)'.  Strictly
  speaking, the call expands to a compound statement, which is a complete
  statement with no need for a semicolon to end it.  However, since it
  looks like a function call, it minimizes confusion if you can use it
! like a function call, writing a semicolon afterward, as in 'SKIP_SPACES
! (p, lim);'
  
!    This can cause trouble before 'else' statements, because the
  semicolon is actually a null statement.  Suppose you write
  
       if (*p != 0)
--- 2544,2557 ----
  be a single logical line, so that it resembles the way such code would
  be laid out if not part of a macro definition.
  
!    A call to this macro might be ‘SKIP_SPACES (p, lim)’.  Strictly
  speaking, the call expands to a compound statement, which is a complete
  statement with no need for a semicolon to end it.  However, since it
  looks like a function call, it minimizes confusion if you can use it
! like a function call, writing a semicolon afterward, as in ‘SKIP_SPACES
! (p, lim);’
  
!    This can cause trouble before ‘else’ statements, because the
  semicolon is actually a null statement.  Suppose you write
  
       if (*p != 0)
*************** semicolon is actually a null statement.
*** 2559,2569 ****
       else ...
  
  The presence of two statements--the compound statement and a null
! statement--in between the 'if' condition and the 'else' makes invalid C
  code.
  
!    The definition of the macro 'SKIP_SPACES' can be altered to solve
! this problem, using a 'do ... while' statement.  Here is how:
  
       #define SKIP_SPACES(p, limit)     \
       do { char *lim = (limit);         \
--- 2559,2569 ----
       else ...
  
  The presence of two statements--the compound statement and a null
! statement--in between the ‘if’ condition and the ‘else’ makes invalid C
  code.
  
!    The definition of the macro ‘SKIP_SPACES’ can be altered to solve
! this problem, using a ‘do ... while’ statement.  Here is how:
  
       #define SKIP_SPACES(p, limit)     \
       do { char *lim = (limit);         \
*************** this problem, using a 'do ... while' sta
*** 2572,2578 ****
                p--; break; }}}          \
       while (0)
  
!    Now 'SKIP_SPACES (p, lim);' expands into
  
       do {...} while (0);
  
--- 2572,2578 ----
                p--; break; }}}          \
       while (0)
  
!    Now ‘SKIP_SPACES (p, lim);’ expands into
  
       do {...} while (0);
  
*************** File: cpp.info,  Node: Duplication of Si
*** 2585,2591 ****
  3.10.4 Duplication of Side Effects
  ----------------------------------
  
! Many C programs define a macro 'min', for "minimum", like this:
  
       #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
  
--- 2585,2591 ----
  3.10.4 Duplication of Side Effects
  ----------------------------------
  
! Many C programs define a macro ‘min’, for "minimum", like this:
  
       #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
  
*************** it expands as follows:
*** 2598,2614 ****
  
       next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
  
! where 'x + y' has been substituted for 'X' and 'foo (z)' for 'Y'.
  
!    The function 'foo' is used only once in the statement as it appears
! in the program, but the expression 'foo (z)' has been substituted twice
! into the macro expansion.  As a result, 'foo' might be called two times
  when the statement is executed.  If it has side effects or if it takes a
  long time to compute, the results might not be what you intended.  We
! say that 'min' is an "unsafe" macro.
  
!    The best solution to this problem is to define 'min' in a way that
! computes the value of 'foo (z)' only once.  The C language offers no
  standard way to do this, but it can be done with GNU extensions as
  follows:
  
--- 2598,2614 ----
  
       next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
  
! where ‘x + y’ has been substituted for ‘X’ and ‘foo (z)’ for ‘Y’.
  
!    The function ‘foo’ is used only once in the statement as it appears
! in the program, but the expression ‘foo (z)’ has been substituted twice
! into the macro expansion.  As a result, ‘foo’ might be called two times
  when the statement is executed.  If it has side effects or if it takes a
  long time to compute, the results might not be what you intended.  We
! say that ‘min’ is an “unsafe” macro.
  
!    The best solution to this problem is to define ‘min’ in a way that
! computes the value of ‘foo (z)’ only once.  The C language offers no
  standard way to do this, but it can be done with GNU extensions as
  follows:
  
*************** follows:
*** 2617,2623 ****
          typeof (Y) y_ = (Y);          \
          (x_ < y_) ? x_ : y_; })
  
!    The '({ ... })' notation produces a compound statement that acts as
  an expression.  Its value is the value of its last statement.  This
  permits us to define local variables and assign each argument to one.
  The local variables have underscores after their names to reduce the
--- 2617,2623 ----
          typeof (Y) y_ = (Y);          \
          (x_ < y_) ? x_ : y_; })
  
!    The ‘({ ... })’ notation produces a compound statement that acts as
  an expression.  Its value is the value of its last statement.  This
  permits us to define local variables and assign each argument to one.
  The local variables have underscores after their names to reduce the
*************** risk of conflict with an identifier of w
*** 2625,2633 ****
  avoid this entirely).  Now each argument is evaluated exactly once.
  
     If you do not wish to use GNU C extensions, the only solution is to
! be careful when _using_ the macro 'min'.  For example, you can calculate
! the value of 'foo (z)', save it in a variable, and use that variable in
! 'min':
  
       #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
       ...
--- 2625,2633 ----
  avoid this entirely).  Now each argument is evaluated exactly once.
  
     If you do not wish to use GNU C extensions, the only solution is to
! be careful when _using_ the macro ‘min’.  For example, you can calculate
! the value of ‘foo (z)’, save it in a variable, and use that variable in
! ‘min’:
  
       #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
       ...
*************** the value of 'foo (z)', save it in a var
*** 2636,2642 ****
         next = min (x + y, tem);
       }
  
! (where we assume that 'foo' returns type 'int').
  
  
  File: cpp.info,  Node: Self-Referential Macros,  Next: Argument Prescan,  Prev: Duplication of Side Effects,  Up: Macro Pitfalls
--- 2636,2642 ----
         next = min (x + y, tem);
       }
  
! (where we assume that ‘foo’ returns type ‘int’).
  
  
  File: cpp.info,  Node: Self-Referential Macros,  Next: Argument Prescan,  Prev: Duplication of Side Effects,  Up: Macro Pitfalls
*************** File: cpp.info,  Node: Self-Referential
*** 2644,2650 ****
  3.10.5 Self-Referential Macros
  ------------------------------
  
! A "self-referential" macro is one whose name appears in its definition.
  Recall that all macro definitions are rescanned for more macros to
  replace.  If the self-reference were considered a use of the macro, it
  would produce an infinitely large expansion.  To prevent this, the
--- 2644,2650 ----
  3.10.5 Self-Referential Macros
  ------------------------------
  
! A “self-referential” macro is one whose name appears in its definition.
  Recall that all macro definitions are rescanned for more macros to
  replace.  If the self-reference were considered a use of the macro, it
  would produce an infinitely large expansion.  To prevent this, the
*************** preprocessor output unchanged.  Consider
*** 2653,2700 ****
  
       #define foo (4 + foo)
  
! where 'foo' is also a variable in your program.
  
!    Following the ordinary rules, each reference to 'foo' will expand
! into '(4 + foo)'; then this will be rescanned and will expand into '(4 +
! (4 + foo))'; and so on until the computer runs out of memory.
  
     The self-reference rule cuts this process short after one step, at
! '(4 + foo)'.  Therefore, this macro definition has the possibly useful
! effect of causing the program to add 4 to the value of 'foo' wherever
! 'foo' is referred to.
  
     In most cases, it is a bad idea to take advantage of this feature.  A
! person reading the program who sees that 'foo' is a variable will not
  expect that it is a macro as well.  The reader will come across the
! identifier 'foo' in the program and think its value should be that of
! the variable 'foo', whereas in fact the value is four greater.
  
     One common, useful use of self-reference is to create a macro which
  expands to itself.  If you write
  
       #define EPERM EPERM
  
! then the macro 'EPERM' expands to 'EPERM'.  Effectively, it is left
  alone by the preprocessor whenever it's used in running text.  You can
! tell that it's a macro with '#ifdef'.  You might do this if you want to
! define numeric constants with an 'enum', but have '#ifdef' be true for
  each constant.
  
!    If a macro 'x' expands to use a macro 'y', and the expansion of 'y'
! refers to the macro 'x', that is an "indirect self-reference" of 'x'.
! 'x' is not expanded in this case either.  Thus, if we have
  
       #define x (4 + y)
       #define y (2 * x)
  
! then 'x' and 'y' expand as follows:
  
!      x    ==> (4 + y)
!           ==> (4 + (2 * x))
  
!      y    ==> (2 * x)
!           ==> (2 * (4 + y))
  
  Each macro is expanded when it appears in the definition of the other
  macro, but not when it indirectly appears in its own definition.
--- 2653,2700 ----
  
       #define foo (4 + foo)
  
! where ‘foo’ is also a variable in your program.
  
!    Following the ordinary rules, each reference to ‘foo’ will expand
! into ‘(4 + foo)’; then this will be rescanned and will expand into ‘(4 +
! (4 + foo))’; and so on until the computer runs out of memory.
  
     The self-reference rule cuts this process short after one step, at
! ‘(4 + foo)’.  Therefore, this macro definition has the possibly useful
! effect of causing the program to add 4 to the value of ‘foo’ wherever
! ‘foo’ is referred to.
  
     In most cases, it is a bad idea to take advantage of this feature.  A
! person reading the program who sees that ‘foo’ is a variable will not
  expect that it is a macro as well.  The reader will come across the
! identifier ‘foo’ in the program and think its value should be that of
! the variable ‘foo’, whereas in fact the value is four greater.
  
     One common, useful use of self-reference is to create a macro which
  expands to itself.  If you write
  
       #define EPERM EPERM
  
! then the macro ‘EPERM’ expands to ‘EPERM’.  Effectively, it is left
  alone by the preprocessor whenever it's used in running text.  You can
! tell that it's a macro with ‘#ifdef’.  You might do this if you want to
! define numeric constants with an ‘enum’, but have ‘#ifdef’ be true for
  each constant.
  
!    If a macro ‘x’ expands to use a macro ‘y’, and the expansion of ‘y’
! refers to the macro ‘x’, that is an “indirect self-reference” of ‘x’.
! ‘x’ is not expanded in this case either.  Thus, if we have
  
       #define x (4 + y)
       #define y (2 * x)
  
! then ‘x’ and ‘y’ expand as follows:
  
!      x    ↦ (4 + y)
!           ↦ (4 + (2 * x))
  
!      y    ↦ (2 * x)
!           ↦ (2 * (4 + y))
  
  Each macro is expanded when it appears in the definition of the other
  macro, but not when it indirectly appears in its own definition.
*************** difference?  And why not skip it and mak
*** 2732,2750 ****
  answer is that the prescan does make a difference in three special
  cases:
  
!    * Nested calls to a macro.
  
!      We say that "nested" calls to a macro occur when a macro's argument
!      contains a call to that very macro.  For example, if 'f' is a macro
!      that expects one argument, 'f (f (1))' is a nested pair of calls to
!      'f'.  The desired expansion is made by expanding 'f (1)' and
!      substituting that into the definition of 'f'.  The prescan causes
!      the expected result to happen.  Without the prescan, 'f (1)' itself
!      would be substituted as an argument, and the inner use of 'f' would
       appear during the main scan as an indirect self-reference and would
       not be expanded.
  
!    * Macros that call other macros that stringize or concatenate.
  
       If an argument is stringized or concatenated, the prescan does not
       occur.  If you _want_ to expand a macro, then stringize or
--- 2732,2750 ----
  answer is that the prescan does make a difference in three special
  cases:
  
!    • Nested calls to a macro.
  
!      We say that “nested” calls to a macro occur when a macro's argument
!      contains a call to that very macro.  For example, if ‘f’ is a macro
!      that expects one argument, ‘f (f (1))’ is a nested pair of calls to
!      ‘f’.  The desired expansion is made by expanding ‘f (1)’ and
!      substituting that into the definition of ‘f’.  The prescan causes
!      the expected result to happen.  Without the prescan, ‘f (1)’ itself
!      would be substituted as an argument, and the inner use of ‘f’ would
       appear during the main scan as an indirect self-reference and would
       not be expanded.
  
!    • Macros that call other macros that stringize or concatenate.
  
       If an argument is stringized or concatenated, the prescan does not
       occur.  If you _want_ to expand a macro, then stringize or
*************** cases:
*** 2757,2767 ****
            #define TABLESIZE 1024
            #define BUFSIZE TABLESIZE
  
!      then 'AFTERX(BUFSIZE)' expands to 'X_BUFSIZE', and
!      'XAFTERX(BUFSIZE)' expands to 'X_1024'.  (Not to 'X_TABLESIZE'.
       Prescan always does a complete expansion.)
  
!    * Macros used in arguments, whose expansions contain unshielded
       commas.
  
       This can cause a macro expanded on the second scan to be called
--- 2757,2767 ----
            #define TABLESIZE 1024
            #define BUFSIZE TABLESIZE
  
!      then ‘AFTERX(BUFSIZE)’ expands to ‘X_BUFSIZE’, and
!      ‘XAFTERX(BUFSIZE)’ expands to ‘X_1024’.  (Not to ‘X_TABLESIZE’.
       Prescan always does a complete expansion.)
  
!    • Macros used in arguments, whose expansions contain unshielded
       commas.
  
       This can cause a macro expanded on the second scan to be called
*************** cases:
*** 2771,2779 ****
            #define bar(x) lose(x)
            #define lose(x) (1 + (x))
  
!      We would like 'bar(foo)' to turn into '(1 + (foo))', which would
!      then turn into '(1 + (a,b))'.  Instead, 'bar(foo)' expands into
!      'lose(a,b)', and you get an error because 'lose' requires a single
       argument.  In this case, the problem is easily solved by the same
       parentheses that ought to be used to prevent misnesting of
       arithmetic operations:
--- 2771,2779 ----
            #define bar(x) lose(x)
            #define lose(x) (1 + (x))
  
!      We would like ‘bar(foo)’ to turn into ‘(1 + (foo))’, which would
!      then turn into ‘(1 + (a,b))’.  Instead, ‘bar(foo)’ expands into
!      ‘lose(a,b)’, and you get an error because ‘lose’ requires a single
       argument.  In this case, the problem is easily solved by the same
       parentheses that ought to be used to prevent misnesting of
       arithmetic operations:
*************** cases:
*** 2782,2788 ****
       or
            #define bar(x) lose((x))
  
!      The extra pair of parentheses prevents the comma in 'foo''s
       definition from being interpreted as an argument separator.
  
  
--- 2782,2788 ----
       or
            #define bar(x) lose((x))
  
!      The extra pair of parentheses prevents the comma in ‘foo’'s
       definition from being interpreted as an argument separator.
  
  
*************** different to the line containing the arg
*** 2805,2811 ****
                          ignored (),
                          syntax error);
  
! The syntax error triggered by the tokens 'syntax error' results in an
  error message citing line three--the line of ignore_second_arg-- even
  though the problematic code comes from line five.
  
--- 2805,2811 ----
                          ignored (),
                          syntax error);
  
! The syntax error triggered by the tokens ‘syntax error’ results in an
  error message citing line three--the line of ignore_second_arg-- even
  though the problematic code comes from line five.
  
*************** File: cpp.info,  Node: Conditionals,  Ne
*** 2817,2831 ****
  4 Conditionals
  **************
  
! A "conditional" is a directive that instructs the preprocessor to select
  whether or not to include a chunk of code in the final token stream
  passed to the compiler.  Preprocessor conditionals can test arithmetic
  expressions, or whether a name is defined as a macro, or both
! simultaneously using the special 'defined' operator.
  
!    A conditional in the C preprocessor resembles in some ways an 'if'
  statement in C, but it is important to understand the difference between
! them.  The condition in an 'if' statement is tested during the execution
  of your program.  Its purpose is to allow your program to behave
  differently from run to run, depending on the data it is operating on.
  The condition in a preprocessing conditional directive is tested when
--- 2817,2831 ----
  4 Conditionals
  **************
  
! A “conditional” is a directive that instructs the preprocessor to select
  whether or not to include a chunk of code in the final token stream
  passed to the compiler.  Preprocessor conditionals can test arithmetic
  expressions, or whether a name is defined as a macro, or both
! simultaneously using the special ‘defined’ operator.
  
!    A conditional in the C preprocessor resembles in some ways an ‘if’
  statement in C, but it is important to understand the difference between
! them.  The condition in an ‘if’ statement is tested during the execution
  of your program.  Its purpose is to allow your program to behave
  differently from run to run, depending on the data it is operating on.
  The condition in a preprocessing conditional directive is tested when
*************** included in the program depending on the
*** 2834,2843 ****
  compilation.
  
     However, the distinction is becoming less clear.  Modern compilers
! often do test 'if' statements when a program is compiled, if their
  conditions are known not to vary at run time, and eliminate code which
  can never be executed.  If you can count on your compiler to do this,
! you may find that your program is more readable if you use 'if'
  statements with constant conditions (perhaps determined by macros).  Of
  course, you can only use this to exclude code, not type definitions or
  other preprocessing directives, and you can only do it if the code
--- 2834,2843 ----
  compilation.
  
     However, the distinction is becoming less clear.  Modern compilers
! often do test ‘if’ statements when a program is compiled, if their
  conditions are known not to vary at run time, and eliminate code which
  can never be executed.  If you can count on your compiler to do this,
! you may find that your program is more readable if you use ‘if’
  statements with constant conditions (perhaps determined by macros).  Of
  course, you can only use this to exclude code, not type definitions or
  other preprocessing directives, and you can only do it if the code
*************** File: cpp.info,  Node: Conditional Uses,
*** 2857,2863 ****
  
  There are three general reasons to use a conditional.
  
!    * A program may need to use different code depending on the machine
       or operating system it is to run on.  In some cases the code for
       one operating system may be erroneous on another operating system;
       for example, it might refer to data types or constants that do not
--- 2857,2863 ----
  
  There are three general reasons to use a conditional.
  
!    • A program may need to use different code depending on the machine
       or operating system it is to run on.  In some cases the code for
       one operating system may be erroneous on another operating system;
       for example, it might refer to data types or constants that do not
*************** There are three general reasons to use a
*** 2867,2878 ****
       the offending code can be effectively excised from the program when
       it is not valid.
  
!    * You may want to be able to compile the same source file into two
       different programs.  One version might make frequent time-consuming
       consistency checks on its intermediate data, or print the values of
       those data for debugging, and the other not.
  
!    * A conditional whose condition is always false is one way to exclude
       code from the program but keep it as a sort of comment for future
       reference.
  
--- 2867,2878 ----
       the offending code can be effectively excised from the program when
       it is not valid.
  
!    • You may want to be able to compile the same source file into two
       different programs.  One version might make frequent time-consuming
       consistency checks on its intermediate data, or print the values of
       those data for debugging, and the other not.
  
!    • A conditional whose condition is always false is one way to exclude
       code from the program but keep it as a sort of comment for future
       reference.
  
*************** File: cpp.info,  Node: Conditional Synta
*** 2886,2893 ****
  4.2 Conditional Syntax
  ======================
  
! A conditional in the C preprocessor begins with a "conditional
! directive": '#if', '#ifdef' or '#ifndef'.
  
  * Menu:
  
--- 2886,2893 ----
  4.2 Conditional Syntax
  ======================
  
! A conditional in the C preprocessor begins with a “conditional
! directive”: ‘#if’, ‘#ifdef’ or ‘#ifndef’.
  
  * Menu:
  
*************** The simplest sort of conditional is
*** 2918,2933 ****
  
       #endif /* MACRO */
  
!    This block is called a "conditional group".  CONTROLLED TEXT will be
  included in the output of the preprocessor if and only if MACRO is
! defined.  We say that the conditional "succeeds" if MACRO is defined,
! "fails" if it is not.
  
     The CONTROLLED TEXT inside of a conditional can include preprocessing
  directives.  They are executed only if the conditional succeeds.  You
  can nest conditional groups inside other conditional groups, but they
! must be completely nested.  In other words, '#endif' always matches the
! nearest '#ifdef' (or '#ifndef', or '#if').  Also, you cannot start a
  conditional group in one file and end it in another.
  
     Even if a conditional fails, the CONTROLLED TEXT inside it is still
--- 2918,2933 ----
  
       #endif /* MACRO */
  
!    This block is called a “conditional group”.  CONTROLLED TEXT will be
  included in the output of the preprocessor if and only if MACRO is
! defined.  We say that the conditional “succeeds” if MACRO is defined,
! “fails” if it is not.
  
     The CONTROLLED TEXT inside of a conditional can include preprocessing
  directives.  They are executed only if the conditional succeeds.  You
  can nest conditional groups inside other conditional groups, but they
! must be completely nested.  In other words, ‘#endif’ always matches the
! nearest ‘#ifdef’ (or ‘#ifndef’, or ‘#if’).  Also, you cannot start a
  conditional group in one file and end it in another.
  
     Even if a conditional fails, the CONTROLLED TEXT inside it is still
*************** must all be lexically valid C.  Normally
*** 2936,2967 ****
  that all comments and string literals inside a failing conditional group
  must still be properly ended.
  
!    The comment following the '#endif' is not required, but it is a good
  practice if there is a lot of CONTROLLED TEXT, because it helps people
! match the '#endif' to the corresponding '#ifdef'.  Older programs
! sometimes put MACRO directly after the '#endif' without enclosing it in
  a comment.  This is invalid code according to the C standard.  CPP
! accepts it with a warning.  It never affects which '#ifndef' the
! '#endif' matches.
  
     Sometimes you wish to use some code if a macro is _not_ defined.  You
! can do this by writing '#ifndef' instead of '#ifdef'.  One common use of
! '#ifndef' is to include code only the first time a header file is
  included.  *Note Once-Only Headers::.
  
     Macro definitions can vary between compilations for several reasons.
  Here are some samples.
  
!    * Some macros are predefined on each kind of machine (*note
       System-specific Predefined Macros::).  This allows you to provide
       code specially tuned for a particular machine.
  
!    * System header files define more macros, associated with the
       features they implement.  You can test these macros with
       conditionals to avoid using a system feature on a machine where it
       is not implemented.
  
!    * Macros can be defined or undefined with the '-D' and '-U'
       command-line options when you compile the program.  You can arrange
       to compile the same source file into two different programs by
       choosing a macro name to specify which program you want, writing
--- 2936,2967 ----
  that all comments and string literals inside a failing conditional group
  must still be properly ended.
  
!    The comment following the ‘#endif’ is not required, but it is a good
  practice if there is a lot of CONTROLLED TEXT, because it helps people
! match the ‘#endif’ to the corresponding ‘#ifdef’.  Older programs
! sometimes put MACRO directly after the ‘#endif’ without enclosing it in
  a comment.  This is invalid code according to the C standard.  CPP
! accepts it with a warning.  It never affects which ‘#ifndef’ the
! ‘#endif’ matches.
  
     Sometimes you wish to use some code if a macro is _not_ defined.  You
! can do this by writing ‘#ifndef’ instead of ‘#ifdef’.  One common use of
! ‘#ifndef’ is to include code only the first time a header file is
  included.  *Note Once-Only Headers::.
  
     Macro definitions can vary between compilations for several reasons.
  Here are some samples.
  
!    • Some macros are predefined on each kind of machine (*note
       System-specific Predefined Macros::).  This allows you to provide
       code specially tuned for a particular machine.
  
!    • System header files define more macros, associated with the
       features they implement.  You can test these macros with
       conditionals to avoid using a system feature on a machine where it
       is not implemented.
  
!    • Macros can be defined or undefined with the ‘-D’ and ‘-U’
       command-line options when you compile the program.  You can arrange
       to compile the same source file into two different programs by
       choosing a macro name to specify which program you want, writing
*************** Here are some samples.
*** 2969,2979 ****
       controlling the state of the macro with command-line options,
       perhaps set in the Makefile.  *Note Invocation::.
  
!    * Your program might have a special header file (often called
!      'config.h') that is adjusted when the program is compiled.  It can
       define or not define macros depending on the features of the system
       and the desired capabilities of the program.  The adjustment can be
!      automated by a tool such as 'autoconf', or done by hand.
  
  
  File: cpp.info,  Node: If,  Next: Defined,  Prev: Ifdef,  Up: Conditional Syntax
--- 2969,2979 ----
       controlling the state of the macro with command-line options,
       perhaps set in the Makefile.  *Note Invocation::.
  
!    • Your program might have a special header file (often called
!      ‘config.h’) that is adjusted when the program is compiled.  It can
       define or not define macros depending on the features of the system
       and the desired capabilities of the program.  The adjustment can be
!      automated by a tool such as ‘autoconf’, or done by hand.
  
  
  File: cpp.info,  Node: If,  Next: Defined,  Prev: Ifdef,  Up: Conditional Syntax
*************** File: cpp.info,  Node: If,  Next: Define
*** 2981,2987 ****
  4.2.2 If
  --------
  
! The '#if' directive allows you to test the value of an arithmetic
  expression, rather than the mere existence of one macro.  Its syntax is
  
       #if EXPRESSION
--- 2981,2987 ----
  4.2.2 If
  --------
  
! The ‘#if’ directive allows you to test the value of an arithmetic
  expression, rather than the mere existence of one macro.  Its syntax is
  
       #if EXPRESSION
*************** expression, rather than the mere existen
*** 2993,3028 ****
     EXPRESSION is a C expression of integer type, subject to stringent
  restrictions.  It may contain
  
!    * Integer constants.
  
!    * Character constants, which are interpreted as they would be in
       normal code.
  
!    * Arithmetic operators for addition, subtraction, multiplication,
       division, bitwise operations, shifts, comparisons, and logical
!      operations ('&&' and '||').  The latter two obey the usual
       short-circuiting rules of standard C.
  
!    * Macros.  All macros in the expression are expanded before actual
       computation of the expression's value begins.
  
!    * Uses of the 'defined' operator, which lets you check whether macros
!      are defined in the middle of an '#if'.
  
!    * Identifiers that are not macros, which are all considered to be the
!      number zero.  This allows you to write '#if MACRO' instead of
!      '#ifdef MACRO', if you know that MACRO, when defined, will always
       have a nonzero value.  Function-like macros used without their
       function call parentheses are also treated as zero.
  
!      In some contexts this shortcut is undesirable.  The '-Wundef'
       option causes GCC to warn whenever it encounters an identifier
!      which is not a macro in an '#if'.
  
     The preprocessor does not know anything about types in the language.
! Therefore, 'sizeof' operators are not recognized in '#if', and neither
! are 'enum' constants.  They will be taken as identifiers which are not
! macros, and replaced by zero.  In the case of 'sizeof', this is likely
  to cause the expression to be invalid.
  
     The preprocessor calculates the value of EXPRESSION.  It carries out
--- 2993,3028 ----
     EXPRESSION is a C expression of integer type, subject to stringent
  restrictions.  It may contain
  
!    • Integer constants.
  
!    • Character constants, which are interpreted as they would be in
       normal code.
  
!    • Arithmetic operators for addition, subtraction, multiplication,
       division, bitwise operations, shifts, comparisons, and logical
!      operations (‘&&’ and ‘||’).  The latter two obey the usual
       short-circuiting rules of standard C.
  
!    • Macros.  All macros in the expression are expanded before actual
       computation of the expression's value begins.
  
!    • Uses of the ‘defined’ operator, which lets you check whether macros
!      are defined in the middle of an ‘#if’.
  
!    • Identifiers that are not macros, which are all considered to be the
!      number zero.  This allows you to write ‘#if MACRO’ instead of
!      ‘#ifdef MACRO’, if you know that MACRO, when defined, will always
       have a nonzero value.  Function-like macros used without their
       function call parentheses are also treated as zero.
  
!      In some contexts this shortcut is undesirable.  The ‘-Wundef’
       option causes GCC to warn whenever it encounters an identifier
!      which is not a macro in an ‘#if’.
  
     The preprocessor does not know anything about types in the language.
! Therefore, ‘sizeof’ operators are not recognized in ‘#if’, and neither
! are ‘enum’ constants.  They will be taken as identifiers which are not
! macros, and replaced by zero.  In the case of ‘sizeof’, this is likely
  to cause the expression to be invalid.
  
     The preprocessor calculates the value of EXPRESSION.  It carries out
*************** all calculations in the widest integer t
*** 3030,3036 ****
  most machines supported by GCC this is 64 bits.  This is not the same
  rule as the compiler uses to calculate the value of a constant
  expression, and may give different results in some cases.  If the value
! comes out to be nonzero, the '#if' succeeds and the CONTROLLED TEXT is
  included; otherwise it is skipped.
  
  
--- 3030,3036 ----
  most machines supported by GCC this is 64 bits.  This is not the same
  rule as the compiler uses to calculate the value of a constant
  expression, and may give different results in some cases.  If the value
! comes out to be nonzero, the ‘#if’ succeeds and the CONTROLLED TEXT is
  included; otherwise it is skipped.
  
  
*************** File: cpp.info,  Node: Defined,  Next: E
*** 3039,3073 ****
  4.2.3 Defined
  -------------
  
! The special operator 'defined' is used in '#if' and '#elif' expressions
! to test whether a certain name is defined as a macro.  'defined NAME'
! and 'defined (NAME)' are both expressions whose value is 1 if NAME is
  defined as a macro at the current point in the program, and 0 otherwise.
! Thus, '#if defined MACRO' is precisely equivalent to '#ifdef MACRO'.
  
!    'defined' is useful when you wish to test more than one macro for
  existence at once.  For example,
  
       #if defined (__vax__) || defined (__ns16000__)
  
! would succeed if either of the names '__vax__' or '__ns16000__' is
  defined as a macro.
  
     Conditionals written like this:
  
       #if defined BUFSIZE && BUFSIZE >= 1024
  
! can generally be simplified to just '#if BUFSIZE >= 1024', since if
! 'BUFSIZE' is not defined, it will be interpreted as having the value
  zero.
  
!    If the 'defined' operator appears as a result of a macro expansion,
  the C standard says the behavior is undefined.  GNU cpp treats it as a
! genuine 'defined' operator and evaluates it normally.  It will warn
  wherever your code uses this feature if you use the command-line option
! '-Wpedantic', since other compilers may handle it differently.  The
! warning is also enabled by '-Wextra', and can also be enabled
! individually with '-Wexpansion-to-defined'.
  
  
  File: cpp.info,  Node: Else,  Next: Elif,  Prev: Defined,  Up: Conditional Syntax
--- 3039,3073 ----
  4.2.3 Defined
  -------------
  
! The special operator ‘defined’ is used in ‘#if’ and ‘#elif’ expressions
! to test whether a certain name is defined as a macro.  ‘defined NAME’
! and ‘defined (NAME)’ are both expressions whose value is 1 if NAME is
  defined as a macro at the current point in the program, and 0 otherwise.
! Thus, ‘#if defined MACRO’ is precisely equivalent to ‘#ifdef MACRO’.
  
!    ‘defined’ is useful when you wish to test more than one macro for
  existence at once.  For example,
  
       #if defined (__vax__) || defined (__ns16000__)
  
! would succeed if either of the names ‘__vax__’ or ‘__ns16000__’ is
  defined as a macro.
  
     Conditionals written like this:
  
       #if defined BUFSIZE && BUFSIZE >= 1024
  
! can generally be simplified to just ‘#if BUFSIZE >= 1024’, since if
! ‘BUFSIZE’ is not defined, it will be interpreted as having the value
  zero.
  
!    If the ‘defined’ operator appears as a result of a macro expansion,
  the C standard says the behavior is undefined.  GNU cpp treats it as a
! genuine ‘defined’ operator and evaluates it normally.  It will warn
  wherever your code uses this feature if you use the command-line option
! ‘-Wpedantic’, since other compilers may handle it differently.  The
! warning is also enabled by ‘-Wextra’, and can also be enabled
! individually with ‘-Wexpansion-to-defined’.
  
  
  File: cpp.info,  Node: Else,  Next: Elif,  Prev: Defined,  Up: Conditional Syntax
*************** File: cpp.info,  Node: Else,  Next: Elif
*** 3075,3081 ****
  4.2.4 Else
  ----------
  
! The '#else' directive can be added to a conditional to provide
  alternative text to be used if the condition fails.  This is what it
  looks like:
  
--- 3075,3081 ----
  4.2.4 Else
  ----------
  
! The ‘#else’ directive can be added to a conditional to provide
  alternative text to be used if the condition fails.  This is what it
  looks like:
  
*************** looks like:
*** 3088,3094 ****
  If EXPRESSION is nonzero, the TEXT-IF-TRUE is included and the
  TEXT-IF-FALSE is skipped.  If EXPRESSION is zero, the opposite happens.
  
!    You can use '#else' with '#ifdef' and '#ifndef', too.
  
  
  File: cpp.info,  Node: Elif,  Next: __has_attribute,  Prev: Else,  Up: Conditional Syntax
--- 3088,3094 ----
  If EXPRESSION is nonzero, the TEXT-IF-TRUE is included and the
  TEXT-IF-FALSE is skipped.  If EXPRESSION is zero, the opposite happens.
  
!    You can use ‘#else’ with ‘#ifdef’ and ‘#ifndef’, too.
  
  
  File: cpp.info,  Node: Elif,  Next: __has_attribute,  Prev: Else,  Up: Conditional Syntax
*************** two possible alternatives.  For example,
*** 3109,3115 ****
       #endif /* X != 2 */
       #endif /* X != 1 */
  
!    Another conditional directive, '#elif', allows this to be abbreviated
  as follows:
  
       #if X == 1
--- 3109,3115 ----
       #endif /* X != 2 */
       #endif /* X != 1 */
  
!    Another conditional directive, ‘#elif’, allows this to be abbreviated
  as follows:
  
       #if X == 1
*************** as follows:
*** 3120,3155 ****
       ...
       #endif /* X != 2 and X != 1*/
  
!    '#elif' stands for "else if".  Like '#else', it goes in the middle of
  a conditional group and subdivides it; it does not require a matching
! '#endif' of its own.  Like '#if', the '#elif' directive includes an
! expression to be tested.  The text following the '#elif' is processed
! only if the original '#if'-condition failed and the '#elif' condition
  succeeds.
  
!    More than one '#elif' can go in the same conditional group.  Then the
! text after each '#elif' is processed only if the '#elif' condition
! succeeds after the original '#if' and all previous '#elif' directives
  within it have failed.
  
!    '#else' is allowed after any number of '#elif' directives, but
! '#elif' may not follow '#else'.
  
  
  File: cpp.info,  Node: __has_attribute,  Next: __has_cpp_attribute,  Prev: Elif,  Up: Conditional Syntax
  
! 4.2.6 '__has_attribute'
  -----------------------
  
! The special operator '__has_attribute (OPERAND)' may be used in '#if'
! and '#elif' expressions to test whether the attribute referenced by its
  OPERAND is recognized by GCC. Using the operator in other contexts is
  not valid.  In C code, if compiling for strict conformance to standards
  before C23, OPERAND must be a valid identifier.  Otherwise, OPERAND may
! be optionally introduced by the 'ATTRIBUTE-SCOPE::' prefix.  The
  ATTRIBUTE-SCOPE prefix identifies the "namespace" within which the
! attribute is recognized.  The scope of GCC attributes is 'gnu' or
! '__gnu__'.  The '__has_attribute' operator by itself, without any
  OPERAND or parentheses, acts as a predefined macro so that support for
  it can be tested in portable code.  Thus, the recommended use of the
  operator is as follows:
--- 3120,3155 ----
       ...
       #endif /* X != 2 and X != 1*/
  
!    ‘#elif’ stands for "else if".  Like ‘#else’, it goes in the middle of
  a conditional group and subdivides it; it does not require a matching
! ‘#endif’ of its own.  Like ‘#if’, the ‘#elif’ directive includes an
! expression to be tested.  The text following the ‘#elif’ is processed
! only if the original ‘#if’-condition failed and the ‘#elif’ condition
  succeeds.
  
!    More than one ‘#elif’ can go in the same conditional group.  Then the
! text after each ‘#elif’ is processed only if the ‘#elif’ condition
! succeeds after the original ‘#if’ and all previous ‘#elif’ directives
  within it have failed.
  
!    ‘#else’ is allowed after any number of ‘#elif’ directives, but
! ‘#elif’ may not follow ‘#else’.
  
  
  File: cpp.info,  Node: __has_attribute,  Next: __has_cpp_attribute,  Prev: Elif,  Up: Conditional Syntax
  
! 4.2.6 ‘__has_attribute’
  -----------------------
  
! The special operator ‘__has_attribute (OPERAND)’ may be used in ‘#if’
! and ‘#elif’ expressions to test whether the attribute referenced by its
  OPERAND is recognized by GCC. Using the operator in other contexts is
  not valid.  In C code, if compiling for strict conformance to standards
  before C23, OPERAND must be a valid identifier.  Otherwise, OPERAND may
! be optionally introduced by the ‘ATTRIBUTE-SCOPE::’ prefix.  The
  ATTRIBUTE-SCOPE prefix identifies the "namespace" within which the
! attribute is recognized.  The scope of GCC attributes is ‘gnu’ or
! ‘__gnu__’.  The ‘__has_attribute’ operator by itself, without any
  OPERAND or parentheses, acts as a predefined macro so that support for
  it can be tested in portable code.  Thus, the recommended use of the
  operator is as follows:
*************** operator is as follows:
*** 3160,3168 ****
       #  endif
       #endif
  
!    The first '#if' test succeeds only when the operator is supported by
  the version of GCC (or another compiler) being used.  Only when that
! test succeeds is it valid to use '__has_attribute' as a preprocessor
  operator.  As a result, combining the two tests into a single expression
  as shown below would only be valid with a compiler that supports the
  operator but not with others that don't.
--- 3160,3168 ----
       #  endif
       #endif
  
!    The first ‘#if’ test succeeds only when the operator is supported by
  the version of GCC (or another compiler) being used.  Only when that
! test succeeds is it valid to use ‘__has_attribute’ as a preprocessor
  operator.  As a result, combining the two tests into a single expression
  as shown below would only be valid with a compiler that supports the
  operator but not with others that don't.
*************** operator but not with others that don't.
*** 3174,3188 ****
  
  File: cpp.info,  Node: __has_cpp_attribute,  Next: __has_c_attribute,  Prev: __has_attribute,  Up: Conditional Syntax
  
! 4.2.7 '__has_cpp_attribute'
  ---------------------------
  
! The special operator '__has_cpp_attribute (OPERAND)' may be used in
! '#if' and '#elif' expressions in C++ code to test whether the attribute
! referenced by its OPERAND is recognized by GCC. '__has_cpp_attribute
! (OPERAND)' is equivalent to '__has_attribute (OPERAND)' except that when
  OPERAND designates a supported standard attribute it evaluates to an
! integer constant of the form 'YYYYMM' indicating the year and month when
  the attribute was first introduced into the C++ standard.  For
  additional information including the dates of the introduction of
  current standard attributes, see
--- 3174,3188 ----
  
  File: cpp.info,  Node: __has_cpp_attribute,  Next: __has_c_attribute,  Prev: __has_attribute,  Up: Conditional Syntax
  
! 4.2.7 ‘__has_cpp_attribute’
  ---------------------------
  
! The special operator ‘__has_cpp_attribute (OPERAND)’ may be used in
! ‘#if’ and ‘#elif’ expressions in C++ code to test whether the attribute
! referenced by its OPERAND is recognized by GCC. ‘__has_cpp_attribute
! (OPERAND)’ is equivalent to ‘__has_attribute (OPERAND)’ except that when
  OPERAND designates a supported standard attribute it evaluates to an
! integer constant of the form ‘YYYYMM’ indicating the year and month when
  the attribute was first introduced into the C++ standard.  For
  additional information including the dates of the introduction of
  current standard attributes, see
*************** SD-6: SG10 Feature Test Recommendations
*** 3191,3223 ****
  
  File: cpp.info,  Node: __has_c_attribute,  Next: __has_builtin,  Prev: __has_cpp_attribute,  Up: Conditional Syntax
  
! 4.2.8 '__has_c_attribute'
  -------------------------
  
! The special operator '__has_c_attribute (OPERAND)' may be used in '#if'
! and '#elif' expressions in C code to test whether the attribute
  referenced by its OPERAND is recognized by GCC in attributes using the
! '[[]]' syntax.  GNU attributes must be specified with the scope 'gnu' or
! '__gnu__' with '__has_c_attribute'.  When OPERAND designates a supported
  standard attribute it evaluates to an integer constant of the form
! 'YYYYMM' indicating the year and month when the attribute was first
  introduced into the C standard, or when the syntax of operands to the
  attribute was extended in the C standard.
  
  
  File: cpp.info,  Node: __has_builtin,  Next: __has_feature,  Prev: __has_c_attribute,  Up: Conditional Syntax
  
! 4.2.9 '__has_builtin'
  ---------------------
  
! The special operator '__has_builtin (OPERAND)' may be used in constant
! integer contexts and in preprocessor '#if' and '#elif' expressions to
  test whether the symbol named by its OPERAND is recognized as a built-in
  function by GCC in the current language and conformance mode.  It
  evaluates to a constant integer with a nonzero value if the argument
  refers to such a function, and to zero otherwise.  The operator may also
! be used in preprocessor '#if' and '#elif' expressions.  The
! '__has_builtin' operator by itself, without any OPERAND or parentheses,
  acts as a predefined macro so that support for it can be tested in
  portable code.  Thus, the recommended use of the operator is as follows:
  
--- 3191,3223 ----
  
  File: cpp.info,  Node: __has_c_attribute,  Next: __has_builtin,  Prev: __has_cpp_attribute,  Up: Conditional Syntax
  
! 4.2.8 ‘__has_c_attribute’
  -------------------------
  
! The special operator ‘__has_c_attribute (OPERAND)’ may be used in ‘#if’
! and ‘#elif’ expressions in C code to test whether the attribute
  referenced by its OPERAND is recognized by GCC in attributes using the
! ‘[[]]’ syntax.  GNU attributes must be specified with the scope ‘gnu’ or
! ‘__gnu__’ with ‘__has_c_attribute’.  When OPERAND designates a supported
  standard attribute it evaluates to an integer constant of the form
! ‘YYYYMM’ indicating the year and month when the attribute was first
  introduced into the C standard, or when the syntax of operands to the
  attribute was extended in the C standard.
  
  
  File: cpp.info,  Node: __has_builtin,  Next: __has_feature,  Prev: __has_c_attribute,  Up: Conditional Syntax
  
! 4.2.9 ‘__has_builtin’
  ---------------------
  
! The special operator ‘__has_builtin (OPERAND)’ may be used in constant
! integer contexts and in preprocessor ‘#if’ and ‘#elif’ expressions to
  test whether the symbol named by its OPERAND is recognized as a built-in
  function by GCC in the current language and conformance mode.  It
  evaluates to a constant integer with a nonzero value if the argument
  refers to such a function, and to zero otherwise.  The operator may also
! be used in preprocessor ‘#if’ and ‘#elif’ expressions.  The
! ‘__has_builtin’ operator by itself, without any OPERAND or parentheses,
  acts as a predefined macro so that support for it can be tested in
  portable code.  Thus, the recommended use of the operator is as follows:
  
*************** portable code.  Thus, the recommended us
*** 3233,3249 ****
  
  File: cpp.info,  Node: __has_feature,  Next: __has_extension,  Prev: __has_builtin,  Up: Conditional Syntax
  
! 4.2.10 '__has_feature'
  ----------------------
  
! The special operator '__has_feature (OPERAND)' may be used in constant
! integer contexts and in preprocessor '#if' and '#elif' expressions to
  test whether the identifier given in OPERAND is recognized as a feature
  supported by GCC given the current options and, in the case of standard
  language features, whether the feature is available in the chosen
  version of the language standard.
  
!    Note that '__has_feature' and '__has_extension' are not recommended
  for use in new code, and are only provided for compatibility with Clang.
  For details of which identifiers are accepted by these function-like
  macros, see
--- 3233,3249 ----
  
  File: cpp.info,  Node: __has_feature,  Next: __has_extension,  Prev: __has_builtin,  Up: Conditional Syntax
  
! 4.2.10 ‘__has_feature’
  ----------------------
  
! The special operator ‘__has_feature (OPERAND)’ may be used in constant
! integer contexts and in preprocessor ‘#if’ and ‘#elif’ expressions to
  test whether the identifier given in OPERAND is recognized as a feature
  supported by GCC given the current options and, in the case of standard
  language features, whether the feature is available in the chosen
  version of the language standard.
  
!    Note that ‘__has_feature’ and ‘__has_extension’ are not recommended
  for use in new code, and are only provided for compatibility with Clang.
  For details of which identifiers are accepted by these function-like
  macros, see
*************** the Clang documentation (https://clang.l
*** 3252,3273 ****
  
  File: cpp.info,  Node: __has_extension,  Next: __has_include,  Prev: __has_feature,  Up: Conditional Syntax
  
! 4.2.11 '__has_extension'
  ------------------------
  
! The special operator '__has_extension (OPERAND)' may be used in constant
! integer contexts and in preprocessor '#if' and '#elif' expressions to
  test whether the identifier given in OPERAND is recognized as an
  extension supported by GCC given the current options.  In any given
! context, the features accepted by '__has_extension' are a strict
! superset of those accepted by '__has_feature'.  Unlike '__has_feature',
! '__has_extension' tests whether a given feature is available regardless
  of strict language standards conformance.
  
!    If the '-pedantic-errors' flag is given, '__has_extension' is
! equivalent to '__has_feature'.
  
!    Note that '__has_feature' and '__has_extension' are not recommended
  for use in new code, and are only provided for compatibility with Clang.
  For details of which identifiers are accepted by these function-like
  macros, see
--- 3252,3273 ----
  
  File: cpp.info,  Node: __has_extension,  Next: __has_include,  Prev: __has_feature,  Up: Conditional Syntax
  
! 4.2.11 ‘__has_extension’
  ------------------------
  
! The special operator ‘__has_extension (OPERAND)’ may be used in constant
! integer contexts and in preprocessor ‘#if’ and ‘#elif’ expressions to
  test whether the identifier given in OPERAND is recognized as an
  extension supported by GCC given the current options.  In any given
! context, the features accepted by ‘__has_extension’ are a strict
! superset of those accepted by ‘__has_feature’.  Unlike ‘__has_feature’,
! ‘__has_extension’ tests whether a given feature is available regardless
  of strict language standards conformance.
  
!    If the ‘-pedantic-errors’ flag is given, ‘__has_extension’ is
! equivalent to ‘__has_feature’.
  
!    Note that ‘__has_feature’ and ‘__has_extension’ are not recommended
  for use in new code, and are only provided for compatibility with Clang.
  For details of which identifiers are accepted by these function-like
  macros, see
*************** the Clang documentation (https://clang.l
*** 3276,3295 ****
  
  File: cpp.info,  Node: __has_include,  Prev: __has_extension,  Up: Conditional Syntax
  
! 4.2.12 '__has_include'
  ----------------------
  
! The special operator '__has_include (OPERAND)' may be used in '#if' and
! '#elif' expressions to test whether the header referenced by its OPERAND
! can be included using the '#include' directive.  Using the operator in
  other contexts is not valid.  The OPERAND takes the same form as the
! file in the '#include' directive (*note Include Syntax::) and evaluates
  to a nonzero value if the header can be included and to zero otherwise.
  Note that that the ability to include a header doesn't imply that the
! header doesn't contain invalid constructs or '#error' directives that
  would cause the preprocessor to fail.
  
!    The '__has_include' operator by itself, without any OPERAND or
  parentheses, acts as a predefined macro so that support for it can be
  tested in portable code.  Thus, the recommended use of the operator is
  as follows:
--- 3276,3295 ----
  
  File: cpp.info,  Node: __has_include,  Prev: __has_extension,  Up: Conditional Syntax
  
! 4.2.12 ‘__has_include’
  ----------------------
  
! The special operator ‘__has_include (OPERAND)’ may be used in ‘#if’ and
! ‘#elif’ expressions to test whether the header referenced by its OPERAND
! can be included using the ‘#include’ directive.  Using the operator in
  other contexts is not valid.  The OPERAND takes the same form as the
! file in the ‘#include’ directive (*note Include Syntax::) and evaluates
  to a nonzero value if the header can be included and to zero otherwise.
  Note that that the ability to include a header doesn't imply that the
! header doesn't contain invalid constructs or ‘#error’ directives that
  would cause the preprocessor to fail.
  
!    The ‘__has_include’ operator by itself, without any OPERAND or
  parentheses, acts as a predefined macro so that support for it can be
  tested in portable code.  Thus, the recommended use of the operator is
  as follows:
*************** as follows:
*** 3300,3308 ****
       #  endif
       #endif
  
!    The first '#if' test succeeds only when the operator is supported by
  the version of GCC (or another compiler) being used.  Only when that
! test succeeds is it valid to use '__has_include' as a preprocessor
  operator.  As a result, combining the two tests into a single expression
  as shown below would only be valid with a compiler that supports the
  operator but not with others that don't.
--- 3300,3308 ----
       #  endif
       #endif
  
!    The first ‘#if’ test succeeds only when the operator is supported by
  the version of GCC (or another compiler) being used.  Only when that
! test succeeds is it valid to use ‘__has_include’ as a preprocessor
  operator.  As a result, combining the two tests into a single expression
  as shown below would only be valid with a compiler that supports the
  operator but not with others that don't.
*************** code will end the commenting-out.  The p
*** 3324,3343 ****
  syntax errors.
  
     One way to avoid this problem is to use an always-false conditional
! instead.  For instance, put '#if 0' before the deleted code and '#endif'
  after it.  This works even if the code being turned off contains
! conditionals, but they must be entire conditionals (balanced '#if' and
! '#endif').
  
!    Some people use '#ifdef notdef' instead.  This is risky, because
! 'notdef' might be accidentally defined as a macro, and then the
! conditional would succeed.  '#if 0' can be counted on to fail.
  
!    Do not use '#if 0' for comments which are not C code.  Use a real
! comment, instead.  The interior of '#if 0' must consist of complete
  tokens; in particular, single-quote characters must balance.  Comments
  often contain unbalanced single-quote characters (known in English as
! apostrophes).  These confuse '#if 0'.  They don't confuse '/*'.
  
  
  File: cpp.info,  Node: Diagnostics,  Next: Line Control,  Prev: Conditionals,  Up: Top
--- 3324,3343 ----
  syntax errors.
  
     One way to avoid this problem is to use an always-false conditional
! instead.  For instance, put ‘#if 0’ before the deleted code and ‘#endif’
  after it.  This works even if the code being turned off contains
! conditionals, but they must be entire conditionals (balanced ‘#if’ and
! ‘#endif’).
  
!    Some people use ‘#ifdef notdef’ instead.  This is risky, because
! ‘notdef’ might be accidentally defined as a macro, and then the
! conditional would succeed.  ‘#if 0’ can be counted on to fail.
  
!    Do not use ‘#if 0’ for comments which are not C code.  Use a real
! comment, instead.  The interior of ‘#if 0’ must consist of complete
  tokens; in particular, single-quote characters must balance.  Comments
  often contain unbalanced single-quote characters (known in English as
! apostrophes).  These confuse ‘#if 0’.  They don't confuse ‘/*’.
  
  
  File: cpp.info,  Node: Diagnostics,  Next: Line Control,  Prev: Conditionals,  Up: Top
*************** File: cpp.info,  Node: Diagnostics,  Nex
*** 3345,3355 ****
  5 Diagnostics
  *************
  
! The directive '#error' causes the preprocessor to report a fatal error.
! The tokens forming the rest of the line following '#error' are used as
  the error message.
  
!    You would use '#error' inside of a conditional that detects a
  combination of parameters which you know the program does not properly
  support.  For example, if you know that the program will not run
  properly on a VAX, you might write
--- 3345,3355 ----
  5 Diagnostics
  *************
  
! The directive ‘#error’ causes the preprocessor to report a fatal error.
! The tokens forming the rest of the line following ‘#error’ are used as
  the error message.
  
!    You would use ‘#error’ inside of a conditional that detects a
  combination of parameters which you know the program does not properly
  support.  For example, if you know that the program will not run
  properly on a VAX, you might write
*************** properly on a VAX, you might write
*** 3360,3379 ****
  
     If you have several configuration parameters that must be set up by
  the installation in a consistent way, you can use conditionals to detect
! an inconsistency and report it with '#error'.  For example,
  
       #if !defined(FOO) && defined(BAR)
       #error "BAR requires FOO."
       #endif
  
!    The directive '#warning' is like '#error', but causes the
  preprocessor to issue a warning and continue preprocessing.  The tokens
! following '#warning' are used as the warning message.
  
!    You might use '#warning' in obsolete header files, with a message
  directing the user to the header file which should be used instead.
  
!    Neither '#error' nor '#warning' macro-expands its argument.  Internal
  whitespace sequences are each replaced with a single space.  The line
  must consist of complete tokens.  It is wisest to make the argument of
  these directives be a single string constant; this avoids problems with
--- 3360,3379 ----
  
     If you have several configuration parameters that must be set up by
  the installation in a consistent way, you can use conditionals to detect
! an inconsistency and report it with ‘#error’.  For example,
  
       #if !defined(FOO) && defined(BAR)
       #error "BAR requires FOO."
       #endif
  
!    The directive ‘#warning’ is like ‘#error’, but causes the
  preprocessor to issue a warning and continue preprocessing.  The tokens
! following ‘#warning’ are used as the warning message.
  
!    You might use ‘#warning’ in obsolete header files, with a message
  directing the user to the header file which should be used instead.
  
!    Neither ‘#error’ nor ‘#warning’ macro-expands its argument.  Internal
  whitespace sequences are each replaced with a single space.  The line
  must consist of complete tokens.  It is wisest to make the argument of
  these directives be a single string constant; this avoids problems with
*************** reported as having appeared on the line
*** 3392,3430 ****
  outermost macro was used.  We intend to be more accurate in the future.
  
     If you write a program which generates source code, such as the
! 'bison' parser generator, you may want to adjust the preprocessor's
  notion of the current file name and line number by hand.  Parts of the
! output from 'bison' are generated from scratch, other parts come from a
! standard parser file.  The rest are copied verbatim from 'bison''s
  input.  You would like compiler error messages and symbolic debuggers to
! be able to refer to 'bison''s input file.
  
!    'bison' or any such program can arrange this by writing '#line'
! directives into the output file.  '#line' is a directive that specifies
  the original line number and source file name for subsequent input in
! the current preprocessor input file.  '#line' has three variants:
  
! '#line LINENUM'
       LINENUM is a non-negative decimal integer constant.  It specifies
       the line number which should be reported for the following line of
       input.  Subsequent lines are counted from LINENUM.
  
! '#line LINENUM FILENAME'
       LINENUM is the same as for the first form, and has the same effect.
       In addition, FILENAME is a string constant.  The following line and
       all subsequent lines are reported to come from the file it
       specifies, until something else happens to change that.  FILENAME
       is interpreted according to the normal rules for a string constant:
       backslash escapes are interpreted.  This is different from
!      '#include'.
  
! '#line ANYTHING ELSE'
       ANYTHING ELSE is checked for macro calls, which are expanded.  The
       result should match one of the above two forms.
  
!    '#line' directives alter the results of the '__FILE__' and '__LINE__'
  predefined macros from that point on.  *Note Standard Predefined
! Macros::.  They do not have any effect on '#include''s idea of the
  directory containing the current file.
  
  
--- 3392,3430 ----
  outermost macro was used.  We intend to be more accurate in the future.
  
     If you write a program which generates source code, such as the
! ‘bison’ parser generator, you may want to adjust the preprocessor's
  notion of the current file name and line number by hand.  Parts of the
! output from ‘bison’ are generated from scratch, other parts come from a
! standard parser file.  The rest are copied verbatim from ‘bison’'s
  input.  You would like compiler error messages and symbolic debuggers to
! be able to refer to ‘bison’'s input file.
  
!    ‘bison’ or any such program can arrange this by writing ‘#line’
! directives into the output file.  ‘#line’ is a directive that specifies
  the original line number and source file name for subsequent input in
! the current preprocessor input file.  ‘#line’ has three variants:
  
! ‘#line LINENUM’
       LINENUM is a non-negative decimal integer constant.  It specifies
       the line number which should be reported for the following line of
       input.  Subsequent lines are counted from LINENUM.
  
! ‘#line LINENUM FILENAME’
       LINENUM is the same as for the first form, and has the same effect.
       In addition, FILENAME is a string constant.  The following line and
       all subsequent lines are reported to come from the file it
       specifies, until something else happens to change that.  FILENAME
       is interpreted according to the normal rules for a string constant:
       backslash escapes are interpreted.  This is different from
!      ‘#include’.
  
! ‘#line ANYTHING ELSE’
       ANYTHING ELSE is checked for macro calls, which are expanded.  The
       result should match one of the above two forms.
  
!    ‘#line’ directives alter the results of the ‘__FILE__’ and ‘__LINE__’
  predefined macros from that point on.  *Note Standard Predefined
! Macros::.  They do not have any effect on ‘#include’'s idea of the
  directory containing the current file.
  
  
*************** File: cpp.info,  Node: Pragmas,  Next: O
*** 3433,3468 ****
  7 Pragmas
  *********
  
! The '#pragma' directive is the method specified by the C standard for
  providing additional information to the compiler, beyond what is
  conveyed in the language itself.  The forms of this directive (commonly
! known as "pragmas") specified by C standard are prefixed with 'STDC'.  A
  C compiler is free to attach any meaning it likes to other pragmas.
! Most GNU-defined, supported pragmas have been given a 'GCC' prefix.
  
!    C99 introduced the '_Pragma' operator.  This feature addresses a
! major problem with '#pragma': being a directive, it cannot be produced
! as the result of macro expansion.  '_Pragma' is an operator, much like
! 'sizeof' or 'defined', and can be embedded in a macro.
  
!    Its syntax is '_Pragma (STRING-LITERAL)', where STRING-LITERAL can be
  either a normal or wide-character string literal.  It is destringized,
! by replacing all '\\' with a single '\' and all '\"' with a '"'.  The
  result is then processed as if it had appeared as the right hand side of
! a '#pragma' directive.  For example,
  
       _Pragma ("GCC dependency \"parse.y\"")
  
! has the same effect as '#pragma GCC dependency "parse.y"'.  The same
  effect could be achieved using macros, for example
  
       #define DO_PRAGMA(x) _Pragma (#x)
       DO_PRAGMA (GCC dependency "parse.y")
  
!    The standard is unclear on where a '_Pragma' operator can appear.
  The preprocessor does not accept it within a preprocessing conditional
! directive like '#if'.  To be safe, you are probably best keeping it out
! of directives other than '#define', and putting it on a line of its own.
  
     This manual documents the pragmas which are meaningful to the
  preprocessor itself.  Other pragmas are meaningful to the C or C++
--- 3433,3468 ----
  7 Pragmas
  *********
  
! The ‘#pragma’ directive is the method specified by the C standard for
  providing additional information to the compiler, beyond what is
  conveyed in the language itself.  The forms of this directive (commonly
! known as “pragmas”) specified by C standard are prefixed with ‘STDC’.  A
  C compiler is free to attach any meaning it likes to other pragmas.
! Most GNU-defined, supported pragmas have been given a ‘GCC’ prefix.
  
!    C99 introduced the ‘_Pragma’ operator.  This feature addresses a
! major problem with ‘#pragma’: being a directive, it cannot be produced
! as the result of macro expansion.  ‘_Pragma’ is an operator, much like
! ‘sizeof’ or ‘defined’, and can be embedded in a macro.
  
!    Its syntax is ‘_Pragma (STRING-LITERAL)’, where STRING-LITERAL can be
  either a normal or wide-character string literal.  It is destringized,
! by replacing all ‘\\’ with a single ‘\’ and all ‘\"’ with a ‘"’.  The
  result is then processed as if it had appeared as the right hand side of
! a ‘#pragma’ directive.  For example,
  
       _Pragma ("GCC dependency \"parse.y\"")
  
! has the same effect as ‘#pragma GCC dependency "parse.y"’.  The same
  effect could be achieved using macros, for example
  
       #define DO_PRAGMA(x) _Pragma (#x)
       DO_PRAGMA (GCC dependency "parse.y")
  
!    The standard is unclear on where a ‘_Pragma’ operator can appear.
  The preprocessor does not accept it within a preprocessing conditional
! directive like ‘#if’.  To be safe, you are probably best keeping it out
! of directives other than ‘#define’, and putting it on a line of its own.
  
     This manual documents the pragmas which are meaningful to the
  preprocessor itself.  Other pragmas are meaningful to the C or C++
*************** compilers.  They are documented in the G
*** 3470,3477 ****
  
     GCC plugins may provide their own pragmas.
  
! '#pragma GCC dependency'
!      '#pragma GCC dependency' allows you to check the relative dates of
       the current file and another file.  If the other file is more
       recent than the current file, a warning is issued.  This is useful
       if the current file is derived from the other file, and should be
--- 3470,3477 ----
  
     GCC plugins may provide their own pragmas.
  
! ‘#pragma GCC dependency’
!      ‘#pragma GCC dependency’ allows you to check the relative dates of
       the current file and another file.  If the other file is more
       recent than the current file, a warning is issued.  This is useful
       if the current file is derived from the other file, and should be
*************** compilers.  They are documented in the G
*** 3482,3492 ****
            #pragma GCC dependency "parse.y"
            #pragma GCC dependency "/usr/include/time.h" rerun fixincludes
  
! '#pragma GCC poison'
       Sometimes, there is an identifier that you want to remove
       completely from your program, and make sure that it never creeps
!      back in.  To enforce this, you can "poison" the identifier with
!      this pragma.  '#pragma GCC poison' is followed by a list of
       identifiers to poison.  If any of those identifiers appears
       anywhere in the source after the directive, it is a hard error.
       For example,
--- 3482,3492 ----
            #pragma GCC dependency "parse.y"
            #pragma GCC dependency "/usr/include/time.h" rerun fixincludes
  
! ‘#pragma GCC poison’
       Sometimes, there is an identifier that you want to remove
       completely from your program, and make sure that it never creeps
!      back in.  To enforce this, you can “poison” the identifier with
!      this pragma.  ‘#pragma GCC poison’ is followed by a list of
       identifiers to poison.  If any of those identifiers appears
       anywhere in the source after the directive, it is a hard error.
       For example,
*************** compilers.  They are documented in the G
*** 3509,3536 ****
  
       will not produce an error.
  
! '#pragma GCC system_header'
       This pragma takes no arguments.  It causes the rest of the code in
       the current file to be treated as if it came from a system header.
       *Note System Headers::.
  
! '#pragma GCC warning'
! '#pragma GCC error'
!      '#pragma GCC warning "message"' causes the preprocessor to issue a
!      warning diagnostic with the text 'message'.  The message contained
!      in the pragma must be a single string literal.  Similarly, '#pragma
!      GCC error "message"' issues an error message.  Unlike the
!      '#warning' and '#error' directives, these pragmas can be embedded
!      in preprocessor macros using '_Pragma'.
  
! '#pragma once'
!      If '#pragma once' is seen when scanning a header file, that file
       will never be read again, no matter what.  It is a less-portable
!      alternative to using '#ifndef' to guard the contents of header
       files against multiple inclusions.
  
! '#pragma region {tokens}...'
! '#pragma endregion {tokens}...'
       These pragmas are accepted, but have no effect.
  
  
--- 3509,3536 ----
  
       will not produce an error.
  
! ‘#pragma GCC system_header’
       This pragma takes no arguments.  It causes the rest of the code in
       the current file to be treated as if it came from a system header.
       *Note System Headers::.
  
! ‘#pragma GCC warning’
! ‘#pragma GCC error’
!      ‘#pragma GCC warning "message"’ causes the preprocessor to issue a
!      warning diagnostic with the text ‘message’.  The message contained
!      in the pragma must be a single string literal.  Similarly, ‘#pragma
!      GCC error "message"’ issues an error message.  Unlike the
!      ‘#warning’ and ‘#error’ directives, these pragmas can be embedded
!      in preprocessor macros using ‘_Pragma’.
  
! ‘#pragma once’
!      If ‘#pragma once’ is seen when scanning a header file, that file
       will never be read again, no matter what.  It is a less-portable
!      alternative to using ‘#ifndef’ to guard the contents of header
       files against multiple inclusions.
  
! ‘#pragma region {tokens}...’
! ‘#pragma endregion {tokens}...’
       These pragmas are accepted, but have no effect.
  
  
*************** File: cpp.info,  Node: Other Directives,
*** 3539,3559 ****
  8 Other Directives
  ******************
  
! The '#ident' directive takes one argument, a string constant.  On some
  systems, that string constant is copied into a special segment of the
! object file.  On other systems, the directive is ignored.  The '#sccs'
! directive is a synonym for '#ident'.
  
     These directives are not part of the C standard, but they are not
  official GNU extensions either.  What historical information we have
  been able to find, suggests they originated with System V.
  
!    The "null directive" consists of a '#' followed by a newline, with
  only whitespace (including comments) in between.  A null directive is
  understood as a preprocessing directive but has no effect on the
  preprocessor output.  The primary significance of the existence of the
! null directive is that an input line consisting of just a '#' will
! produce no output, rather than a line of output containing just a '#'.
  Supposedly some old C programs contain such lines.
  
  
--- 3539,3559 ----
  8 Other Directives
  ******************
  
! The ‘#ident’ directive takes one argument, a string constant.  On some
  systems, that string constant is copied into a special segment of the
! object file.  On other systems, the directive is ignored.  The ‘#sccs’
! directive is a synonym for ‘#ident’.
  
     These directives are not part of the C standard, but they are not
  official GNU extensions either.  What historical information we have
  been able to find, suggests they originated with System V.
  
!    The “null directive” consists of a ‘#’ followed by a newline, with
  only whitespace (including comments) in between.  A null directive is
  understood as a preprocessing directive but has no effect on the
  preprocessor output.  The primary significance of the existence of the
! null directive is that an input line consisting of just a ‘#’ will
! produce no output, rather than a line of output containing just a ‘#’.
  Supposedly some old C programs contain such lines.
  
  
*************** the form
*** 3588,3629 ****
  
       # LINENUM FILENAME FLAGS
  
! These are called "linemarkers".  They are inserted as needed into the
  output (but never within a string or character constant).  They mean
  that the following line originated in file FILENAME at line LINENUM.
  FILENAME will never contain any non-printing characters; they are
  replaced with octal escape sequences.
  
!    After the file name comes zero or more flags, which are '1', '2',
! '3', or '4'.  If there are multiple flags, spaces separate them.  Here
  is what the flags mean:
  
! '1'
       This indicates the start of a new file.
! '2'
       This indicates returning to a file (after having included another
       file).
! '3'
       This indicates that the following text comes from a system header
       file, so certain warnings should be suppressed.
! '4'
       This indicates that the following text should be treated as being
!      wrapped in an implicit 'extern "C"' block.
  
     As an extension, the preprocessor accepts linemarkers in
  non-assembler input files.  They are treated like the corresponding
! '#line' directive, (*note Line Control::), except that trailing flags
  are permitted, and are interpreted with the meanings described above.
  If multiple flags are given, they must be in ascending order.
  
     Some directives may be duplicated in the output of the preprocessor.
! These are '#ident' (always), '#pragma' (only if the preprocessor does
! not handle the pragma itself), and '#define' and '#undef' (with certain
! debugging options).  If this happens, the '#' of the directive will
  always be in the first column, and there will be no space between the
! '#' and the directive name.  If macro expansion happens to generate
  tokens which might be mistaken for a duplicated directive, a space will
! be inserted between the '#' and the directive name.
  
  
  File: cpp.info,  Node: Traditional Mode,  Next: Implementation Details,  Prev: Preprocessor Output,  Up: Top
--- 3588,3629 ----
  
       # LINENUM FILENAME FLAGS
  
! These are called “linemarkers”.  They are inserted as needed into the
  output (but never within a string or character constant).  They mean
  that the following line originated in file FILENAME at line LINENUM.
  FILENAME will never contain any non-printing characters; they are
  replaced with octal escape sequences.
  
!    After the file name comes zero or more flags, which are ‘1’, ‘2’,
! ‘3’, or ‘4’.  If there are multiple flags, spaces separate them.  Here
  is what the flags mean:
  
! ‘1’
       This indicates the start of a new file.
! ‘2’
       This indicates returning to a file (after having included another
       file).
! ‘3’
       This indicates that the following text comes from a system header
       file, so certain warnings should be suppressed.
! ‘4’
       This indicates that the following text should be treated as being
!      wrapped in an implicit ‘extern "C"’ block.
  
     As an extension, the preprocessor accepts linemarkers in
  non-assembler input files.  They are treated like the corresponding
! ‘#line’ directive, (*note Line Control::), except that trailing flags
  are permitted, and are interpreted with the meanings described above.
  If multiple flags are given, they must be in ascending order.
  
     Some directives may be duplicated in the output of the preprocessor.
! These are ‘#ident’ (always), ‘#pragma’ (only if the preprocessor does
! not handle the pragma itself), and ‘#define’ and ‘#undef’ (with certain
! debugging options).  If this happens, the ‘#’ of the directive will
  always be in the first column, and there will be no space between the
! ‘#’ and the directive name.  If macro expansion happens to generate
  tokens which might be mistaken for a duplicated directive, a space will
! be inserted between the ‘#’ and the directive name.
  
  
  File: cpp.info,  Node: Traditional Mode,  Next: Implementation Details,  Prev: Preprocessor Output,  Up: Top
*************** File: cpp.info,  Node: Traditional Mode,
*** 3633,3639 ****
  
  Traditional (pre-standard) C preprocessing is rather different from the
  preprocessing specified by the standard.  When the preprocessor is
! invoked with the '-traditional-cpp' option, it attempts to emulate a
  traditional preprocessor.
  
     This mode is not useful for compiling C code with GCC, but is
--- 3633,3639 ----
  
  Traditional (pre-standard) C preprocessing is rather different from the
  preprocessing specified by the standard.  When the preprocessor is
! invoked with the ‘-traditional-cpp’ option, it attempts to emulate a
  traditional preprocessor.
  
     This mode is not useful for compiling C code with GCC, but is
*************** the output.  In particular, hard tabs re
*** 3676,3684 ****
  useful if, for example, you are preprocessing a Makefile.
  
     Traditional CPP only recognizes C-style block comments, and treats
! the '/*' sequence as introducing a comment only if it lies outside
  quoted text.  Quoted text is introduced by the usual single and double
! quotes, and also by an initial '<' in a '#include' directive.
  
     Traditionally, comments are completely removed and are not replaced
  with a space.  Since a traditional compiler does its own tokenization of
--- 3676,3684 ----
  useful if, for example, you are preprocessing a Makefile.
  
     Traditional CPP only recognizes C-style block comments, and treats
! the ‘/*’ sequence as introducing a comment only if it lies outside
  quoted text.  Quoted text is introduced by the usual single and double
! quotes, and also by an initial ‘<’ in a ‘#include’ directive.
  
     Traditionally, comments are completely removed and are not replaced
  with a space.  Since a traditional compiler does its own tokenization of
*************** re-lex its input.  For example, in
*** 3689,3695 ****
  
       #if foo/**/bar
  
! 'foo' and 'bar' are distinct identifiers and expanded separately if they
  happen to be macros.  In other words, this directive is equivalent to
  
       #if foo bar
--- 3689,3695 ----
  
       #if foo/**/bar
  
! ‘foo’ and ‘bar’ are distinct identifiers and expanded separately if they
  happen to be macros.  In other words, this directive is equivalent to
  
       #if foo bar
*************** with replacement text that contains an u
*** 3704,3710 ****
  you attempt to compile preprocessed output containing an unmatched quote
  you will get a syntax error.
  
!    However, all preprocessing directives other than '#define' require
  matching quotes.  For example:
  
       #define m This macro's fine and has an unmatched quote
--- 3704,3710 ----
  you attempt to compile preprocessed output containing an unmatched quote
  you will get a syntax error.
  
!    However, all preprocessing directives other than ‘#define’ require
  matching quotes.  For example:
  
       #define m This macro's fine and has an unmatched quote
*************** can run together with the text after the
*** 3735,3747 ****
  single token.
  
     Normally comments are removed from the replacement text after the
! macro is expanded, but if the '-CC' option is passed on the command-line
  comments are preserved.  (In fact, the current implementation removes
  comments even before saving the macro replacement text, but it careful
  to do it in such a way that the observed effect is identical even in the
  function-like macro case.)
  
!    The ISO stringizing operator '#' and token paste operator '##' have
  no special meaning.  As explained later, an effect similar to these
  operators can be obtained in a different way.  Macro names that are
  embedded in quotes, either from the main file or after macro
--- 3735,3747 ----
  single token.
  
     Normally comments are removed from the replacement text after the
! macro is expanded, but if the ‘-CC’ option is passed on the command-line
  comments are preserved.  (In fact, the current implementation removes
  comments even before saving the macro replacement text, but it careful
  to do it in such a way that the observed effect is identical even in the
  function-like macro case.)
  
!    The ISO stringizing operator ‘#’ and token paste operator ‘##’ have
  no special meaning.  As explained later, an effect similar to these
  operators can be obtained in a different way.  Macro names that are
  embedded in quotes, either from the main file or after macro
*************** invocation.
*** 3759,3765 ****
       #define PLUS +
       #define INC(x) PLUS+x
       INC(foo);
!           ==> ++foo;
  
     Function-like macros are similar in form but quite different in
  behavior to their ISO counterparts.  Their arguments are contained
--- 3759,3765 ----
       #define PLUS +
       #define INC(x) PLUS+x
       INC(foo);
!           ↦ ++foo;
  
     Function-like macros are similar in form but quite different in
  behavior to their ISO counterparts.  Their arguments are contained
*************** comma or parenthesis that comes before t
*** 3770,3782 ****
  any other character.  There is no facility for handling variadic macros.
  
     This implementation removes all comments from macro arguments, unless
! the '-C' option is given.  The form of all other horizontal whitespace
  in arguments is preserved, including leading and trailing whitespace.
  In particular
  
       f( )
  
! is treated as an invocation of the macro 'f' with a single argument
  consisting of a single space.  If you want to invoke a function-like
  macro that takes no arguments, you must not leave any whitespace between
  the parentheses.
--- 3770,3782 ----
  any other character.  There is no facility for handling variadic macros.
  
     This implementation removes all comments from macro arguments, unless
! the ‘-C’ option is given.  The form of all other horizontal whitespace
  in arguments is preserved, including leading and trailing whitespace.
  In particular
  
       f( )
  
! is treated as an invocation of the macro ‘f’ with a single argument
  consisting of a single space.  If you want to invoke a function-like
  macro that takes no arguments, you must not leave any whitespace between
  the parentheses.
*************** quotes or not.  This provides a way to s
*** 3791,3797 ****
  
       #define str(x) "x"
       str(/* A comment */some text )
!           ==> "some text "
  
  Note that the comment is removed, but that the trailing space is
  preserved.  Here is an example of using a comment to effect token
--- 3791,3797 ----
  
       #define str(x) "x"
       str(/* A comment */some text )
!           ↦ "some text "
  
  Note that the comment is removed, but that the trailing space is
  preserved.  Here is an example of using a comment to effect token
*************** pasting.
*** 3799,3805 ****
  
       #define suffix(x) foo_/**/x
       suffix(bar)
!           ==> foo_bar
  
  
  File: cpp.info,  Node: Traditional miscellany,  Next: Traditional warnings,  Prev: Traditional macros,  Up: Traditional Mode
--- 3799,3805 ----
  
       #define suffix(x) foo_/**/x
       suffix(bar)
!           ↦ foo_bar
  
  
  File: cpp.info,  Node: Traditional miscellany,  Next: Traditional warnings,  Prev: Traditional macros,  Up: Traditional Mode
*************** File: cpp.info,  Node: Traditional misce
*** 3810,3831 ****
  Here are some things to be aware of when using the traditional
  preprocessor.
  
!    * Preprocessing directives are recognized only when their leading '#'
       appears in the first column.  There can be no whitespace between
!      the beginning of the line and the '#', but whitespace can follow
!      the '#'.
  
!    * A true traditional C preprocessor does not recognize '#error' or
!      '#pragma', and may not recognize '#elif'.  CPP supports all the
       directives in traditional mode that it supports in ISO mode,
       including extensions, with the exception that the effects of
!      '#pragma GCC poison' are undefined.
  
!    * __STDC__ is not defined.
  
!    * If you use digraphs the behavior is undefined.
  
!    * If a line that looks like a directive appears within macro
       arguments, the behavior is undefined.
  
  
--- 3810,3831 ----
  Here are some things to be aware of when using the traditional
  preprocessor.
  
!    • Preprocessing directives are recognized only when their leading ‘#’
       appears in the first column.  There can be no whitespace between
!      the beginning of the line and the ‘#’, but whitespace can follow
!      the ‘#’.
  
!    • A true traditional C preprocessor does not recognize ‘#error’ or
!      ‘#pragma’, and may not recognize ‘#elif’.  CPP supports all the
       directives in traditional mode that it supports in ISO mode,
       including extensions, with the exception that the effects of
!      ‘#pragma GCC poison’ are undefined.
  
!    • __STDC__ is not defined.
  
!    • If you use digraphs the behavior is undefined.
  
!    • If a line that looks like a directive appears within macro
       arguments, the behavior is undefined.
  
  
*************** File: cpp.info,  Node: Traditional warni
*** 3835,3872 ****
  =========================
  
  You can request warnings about features that did not exist, or worked
! differently, in traditional C with the '-Wtraditional' option.  GCC does
  not warn about features of ISO C which you must use when you are using a
! conforming compiler, such as the '#' and '##' operators.
  
!    Presently '-Wtraditional' warns about:
  
!    * Macro parameters that appear within string literals in the macro
       body.  In traditional C macro replacement takes place within string
       literals, but does not in ISO C.
  
!    * In traditional C, some preprocessor directives did not exist.
       Traditional preprocessors would only consider a line to be a
!      directive if the '#' appeared in column 1 on the line.  Therefore
!      '-Wtraditional' warns about directives that traditional C
!      understands but would ignore because the '#' does not appear as the
       first character on the line.  It also suggests you hide directives
!      like '#pragma' not understood by traditional C by indenting them.
!      Some traditional implementations would not recognize '#elif', so it
       suggests avoiding it altogether.
  
!    * A function-like macro that appears without an argument list.  In
       some traditional preprocessors this was an error.  In ISO C it
       merely means that the macro is not expanded.
  
!    * The unary plus operator.  This did not exist in traditional C.
  
!    * The 'U' and 'LL' integer constant suffixes, which were not
!      available in traditional C.  (Traditional C does support the 'L'
       suffix for simple long integer constants.)  You are not warned
       about uses of these suffixes in macros defined in system headers.
!      For instance, 'UINT_MAX' may well be defined as '4294967295U', but
!      you will not be warned if you use 'UINT_MAX'.
  
       You can usually avoid the warning, and the related warning about
       constants which are so large that they are unsigned, by writing the
--- 3835,3872 ----
  =========================
  
  You can request warnings about features that did not exist, or worked
! differently, in traditional C with the ‘-Wtraditional’ option.  GCC does
  not warn about features of ISO C which you must use when you are using a
! conforming compiler, such as the ‘#’ and ‘##’ operators.
  
!    Presently ‘-Wtraditional’ warns about:
  
!    • Macro parameters that appear within string literals in the macro
       body.  In traditional C macro replacement takes place within string
       literals, but does not in ISO C.
  
!    • In traditional C, some preprocessor directives did not exist.
       Traditional preprocessors would only consider a line to be a
!      directive if the ‘#’ appeared in column 1 on the line.  Therefore
!      ‘-Wtraditional’ warns about directives that traditional C
!      understands but would ignore because the ‘#’ does not appear as the
       first character on the line.  It also suggests you hide directives
!      like ‘#pragma’ not understood by traditional C by indenting them.
!      Some traditional implementations would not recognize ‘#elif’, so it
       suggests avoiding it altogether.
  
!    • A function-like macro that appears without an argument list.  In
       some traditional preprocessors this was an error.  In ISO C it
       merely means that the macro is not expanded.
  
!    • The unary plus operator.  This did not exist in traditional C.
  
!    • The ‘U’ and ‘LL’ integer constant suffixes, which were not
!      available in traditional C.  (Traditional C does support the ‘L’
       suffix for simple long integer constants.)  You are not warned
       about uses of these suffixes in macros defined in system headers.
!      For instance, ‘UINT_MAX’ may well be defined as ‘4294967295U’, but
!      you will not be warned if you use ‘UINT_MAX’.
  
       You can usually avoid the warning, and the related warning about
       constants which are so large that they are unsigned, by writing the
*************** File: cpp.info,  Node: Implementation-de
*** 3900,3919 ****
  ====================================
  
  This is how CPP behaves in all the cases which the C standard describes
! as "implementation-defined".  This term means that the implementation is
  free to do what it likes, but must document its choice and stick to it.
  
!    * The mapping of physical source file multi-byte characters to the
       execution character set.
  
       The input character set can be specified using the
!      '-finput-charset' option, while the execution character set may be
!      controlled using the '-fexec-charset' and '-fwide-exec-charset'
       options.
  
!    * Identifier characters.
  
!      The C and C++ standards allow identifiers to be composed of '_' and
       the alphanumeric characters.  C++ also allows universal character
       names.  C99 and later C standards permit both universal character
       names and implementation-defined characters.  In both C and C++
--- 3900,3919 ----
  ====================================
  
  This is how CPP behaves in all the cases which the C standard describes
! as “implementation-defined”.  This term means that the implementation is
  free to do what it likes, but must document its choice and stick to it.
  
!    • The mapping of physical source file multi-byte characters to the
       execution character set.
  
       The input character set can be specified using the
!      ‘-finput-charset’ option, while the execution character set may be
!      controlled using the ‘-fexec-charset’ and ‘-fwide-exec-charset’
       options.
  
!    • Identifier characters.
  
!      The C and C++ standards allow identifiers to be composed of ‘_’ and
       the alphanumeric characters.  C++ also allows universal character
       names.  C99 and later C standards permit both universal character
       names and implementation-defined characters.  In both C and C++
*************** free to do what it likes, but must docum
*** 3921,3940 ****
       that correspond to universal character names permitted by the
       chosen standard.
  
!      GCC allows the '$' character in identifiers as an extension for
!      most targets.  This is true regardless of the 'std=' switch, since
       this extension cannot conflict with standards-conforming programs.
       When preprocessing assembler, however, dollars are not identifier
       characters by default.
  
!      Currently the targets that by default do not permit '$' are AVR,
       IP2K, MMIX, MIPS Irix 3, ARM aout, and PowerPC targets for the AIX
       operating system.
  
!      You can override the default with '-fdollars-in-identifiers' or
!      '-fno-dollars-in-identifiers'.  *Note fdollars-in-identifiers::.
  
!    * Non-empty sequences of whitespace characters.
  
       In textual output, each whitespace sequence is collapsed to a
       single space.  For aesthetic reasons, the first token on each
--- 3921,3940 ----
       that correspond to universal character names permitted by the
       chosen standard.
  
!      GCC allows the ‘$’ character in identifiers as an extension for
!      most targets.  This is true regardless of the ‘std=’ switch, since
       this extension cannot conflict with standards-conforming programs.
       When preprocessing assembler, however, dollars are not identifier
       characters by default.
  
!      Currently the targets that by default do not permit ‘$’ are AVR,
       IP2K, MMIX, MIPS Irix 3, ARM aout, and PowerPC targets for the AIX
       operating system.
  
!      You can override the default with ‘-fdollars-in-identifiers’ or
!      ‘-fno-dollars-in-identifiers’.  *Note fdollars-in-identifiers::.
  
!    • Non-empty sequences of whitespace characters.
  
       In textual output, each whitespace sequence is collapsed to a
       single space.  For aesthetic reasons, the first token on each
*************** free to do what it likes, but must docum
*** 3942,3984 ****
       that it appears in the same column as it did in the original source
       file.
  
!    * The numeric value of character constants in preprocessor
       expressions.
  
       The preprocessor and compiler interpret character constants in the
!      same way; i.e. escape sequences such as '\a' are given the values
       they would have on the target machine.
  
       The compiler evaluates a multi-character character constant a
       character at a time, shifting the previous value left by the number
       of bits per target character, and then or-ing in the bit-pattern of
       the new character truncated to the width of a target character.
!      The final bit-pattern is given type 'int', and is therefore signed,
       regardless of whether single characters are signed or not.  If
       there are more characters in the constant than would fit in the
!      target 'int' the compiler issues a warning, and the excess leading
       characters are ignored.
  
!      For example, ''ab'' for a target with an 8-bit 'char' would be
       interpreted as
!      '(int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')', and
!      ''\234a'' as
!      '(int) ((unsigned char) '\234' * 256 + (unsigned char) 'a')'.
  
!    * Source file inclusion.
  
       For a discussion on how the preprocessor locates header files,
       *note Include Operation::.
  
!    * Interpretation of the filename resulting from a macro-expanded
!      '#include' directive.
  
       *Note Computed Includes::.
  
!    * Treatment of a '#pragma' directive that after macro-expansion
       results in a standard pragma.
  
!      No macro expansion occurs on any '#pragma' directive line, so the
       question does not arise.
  
       Note that GCC does not yet implement any of the standard pragmas.
--- 3942,3984 ----
       that it appears in the same column as it did in the original source
       file.
  
!    • The numeric value of character constants in preprocessor
       expressions.
  
       The preprocessor and compiler interpret character constants in the
!      same way; i.e. escape sequences such as ‘\a’ are given the values
       they would have on the target machine.
  
       The compiler evaluates a multi-character character constant a
       character at a time, shifting the previous value left by the number
       of bits per target character, and then or-ing in the bit-pattern of
       the new character truncated to the width of a target character.
!      The final bit-pattern is given type ‘int’, and is therefore signed,
       regardless of whether single characters are signed or not.  If
       there are more characters in the constant than would fit in the
!      target ‘int’ the compiler issues a warning, and the excess leading
       characters are ignored.
  
!      For example, ‘'ab'’ for a target with an 8-bit ‘char’ would be
       interpreted as
!      ‘(int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')’, and
!      ‘'\234a'’ as
!      ‘(int) ((unsigned char) '\234' * 256 + (unsigned char) 'a')’.
  
!    • Source file inclusion.
  
       For a discussion on how the preprocessor locates header files,
       *note Include Operation::.
  
!    • Interpretation of the filename resulting from a macro-expanded
!      ‘#include’ directive.
  
       *Note Computed Includes::.
  
!    • Treatment of a ‘#pragma’ directive that after macro-expansion
       results in a standard pragma.
  
!      No macro expansion occurs on any ‘#pragma’ directive line, so the
       question does not arise.
  
       Note that GCC does not yet implement any of the standard pragmas.
*************** and all the others known.  It is intende
*** 3995,4046 ****
  limits as possible.  If you encounter an undocumented or inconvenient
  limit, please report that as a bug.  *Note Reporting Bugs: (gcc)Bugs.
  
!    Where we say something is limited "only by available memory", that
  means that internal data structures impose no intrinsic limit, and space
! is allocated with 'malloc' or equivalent.  The actual limit will
  therefore depend on many things, such as the size of other things
  allocated by the compiler at the same time, the amount of memory
  consumed by other processes on the same computer, etc.
  
!    * Nesting levels of '#include' files.
  
       We impose an arbitrary limit of 200 levels, to avoid runaway
       recursion.  The standard requires at least 15 levels.
  
!    * Nesting levels of conditional inclusion.
  
       The C standard mandates this be at least 63.  CPP is limited only
       by available memory.
  
!    * Levels of parenthesized expressions within a full expression.
  
       The C standard requires this to be at least 63.  In preprocessor
       conditional expressions, it is limited only by available memory.
  
!    * Significant initial characters in an identifier or macro name.
  
       The preprocessor treats all characters as significant.  The C
       standard requires only that the first 63 be significant.
  
!    * Number of macros simultaneously defined in a single translation
       unit.
  
       The standard requires at least 4095 be possible.  CPP is limited
       only by available memory.
  
!    * Number of parameters in a macro definition and arguments in a macro
       call.
  
!      We allow 'USHRT_MAX', which is no smaller than 65,535.  The minimum
       required by the standard is 127.
  
!    * Number of characters on a logical source line.
  
       The C standard requires a minimum of 4096 be permitted.  CPP places
       no limits on this, but you may get incorrect column numbers
       reported in diagnostics for lines longer than 65,535 characters.
  
!    * Maximum size of a source file.
  
       The standard does not specify any lower limit on the maximum size
       of a source file.  GNU cpp maps files into memory, so it is limited
--- 3995,4046 ----
  limits as possible.  If you encounter an undocumented or inconvenient
  limit, please report that as a bug.  *Note Reporting Bugs: (gcc)Bugs.
  
!    Where we say something is limited “only by available memory”, that
  means that internal data structures impose no intrinsic limit, and space
! is allocated with ‘malloc’ or equivalent.  The actual limit will
  therefore depend on many things, such as the size of other things
  allocated by the compiler at the same time, the amount of memory
  consumed by other processes on the same computer, etc.
  
!    • Nesting levels of ‘#include’ files.
  
       We impose an arbitrary limit of 200 levels, to avoid runaway
       recursion.  The standard requires at least 15 levels.
  
!    • Nesting levels of conditional inclusion.
  
       The C standard mandates this be at least 63.  CPP is limited only
       by available memory.
  
!    • Levels of parenthesized expressions within a full expression.
  
       The C standard requires this to be at least 63.  In preprocessor
       conditional expressions, it is limited only by available memory.
  
!    • Significant initial characters in an identifier or macro name.
  
       The preprocessor treats all characters as significant.  The C
       standard requires only that the first 63 be significant.
  
!    • Number of macros simultaneously defined in a single translation
       unit.
  
       The standard requires at least 4095 be possible.  CPP is limited
       only by available memory.
  
!    • Number of parameters in a macro definition and arguments in a macro
       call.
  
!      We allow ‘USHRT_MAX’, which is no smaller than 65,535.  The minimum
       required by the standard is 127.
  
!    • Number of characters on a logical source line.
  
       The C standard requires a minimum of 4096 be permitted.  CPP places
       no limits on this, but you may get incorrect column numbers
       reported in diagnostics for lines longer than 65,535 characters.
  
!    • Maximum size of a source file.
  
       The standard does not specify any lower limit on the maximum size
       of a source file.  GNU cpp maps files into memory, so it is limited
*************** plan to remove the feature in a future v
*** 4061,4067 ****
  11.3.1 Assertions
  -----------------
  
! "Assertions" are a deprecated alternative to macros in writing
  conditionals to test what sort of computer or system the compiled
  program will run on.  Assertions are usually predefined, but you can
  define them with preprocessing directives or command-line options.
--- 4061,4067 ----
  11.3.1 Assertions
  -----------------
  
! “Assertions” are a deprecated alternative to macros in writing
  conditionals to test what sort of computer or system the compiled
  program will run on.  Assertions are usually predefined, but you can
  define them with preprocessing directives or command-line options.
*************** PREDICATE must be a single identifier.
*** 4082,4093 ****
  tokens; all characters are significant except for leading and trailing
  whitespace, and differences in internal whitespace sequences are
  ignored.  (This is similar to the rules governing macro redefinition.)
! Thus, '(x + y)' is different from '(x+y)' but equivalent to '( x + y )'.
  Parentheses do not nest inside an answer.
  
!    To test an assertion, you write it in an '#if'.  For example, this
! conditional succeeds if either 'vax' or 'ns16000' has been asserted as
! an answer for 'machine'.
  
       #if #machine (vax) || #machine (ns16000)
  
--- 4082,4093 ----
  tokens; all characters are significant except for leading and trailing
  whitespace, and differences in internal whitespace sequences are
  ignored.  (This is similar to the rules governing macro redefinition.)
! Thus, ‘(x + y)’ is different from ‘(x+y)’ but equivalent to ‘( x + y )’.
  Parentheses do not nest inside an answer.
  
!    To test an assertion, you write it in an ‘#if’.  For example, this
! conditional succeeds if either ‘vax’ or ‘ns16000’ has been asserted as
! an answer for ‘machine’.
  
       #if #machine (vax) || #machine (ns16000)
  
*************** omitting the answer in the conditional:
*** 4096,4103 ****
  
       #if #machine
  
!    Assertions are made with the '#assert' directive.  Its sole argument
! is the assertion to make, without the leading '#' that identifies
  assertions in conditionals.
  
       #assert PREDICATE (ANSWER)
--- 4096,4103 ----
  
       #if #machine
  
!    Assertions are made with the ‘#assert’ directive.  Its sole argument
! is the assertion to make, without the leading ‘#’ that identifies
  assertions in conditionals.
  
       #assert PREDICATE (ANSWER)
*************** answers.  Subsequent assertions do not o
*** 4107,4121 ****
  same predicate.  All the answers for any given predicate are
  simultaneously true.
  
!    Assertions can be canceled with the '#unassert' directive.  It has
! the same syntax as '#assert'.  In that form it cancels only the answer
! which was specified on the '#unassert' line; other answers for that
  predicate remain true.  You can cancel an entire predicate by leaving
  out the answer:
  
       #unassert PREDICATE
  
! In either form, if no such assertion has been made, '#unassert' has no
  effect.
  
     You can also make or cancel assertions using command-line options.
--- 4107,4121 ----
  same predicate.  All the answers for any given predicate are
  simultaneously true.
  
!    Assertions can be canceled with the ‘#unassert’ directive.  It has
! the same syntax as ‘#assert’.  In that form it cancels only the answer
! which was specified on the ‘#unassert’ line; other answers for that
  predicate remain true.  You can cancel an entire predicate by leaving
  out the answer:
  
       #unassert PREDICATE
  
! In either form, if no such assertion has been made, ‘#unassert’ has no
  effect.
  
     You can also make or cancel assertions using command-line options.
*************** File: cpp.info,  Node: Invocation,  Next
*** 4130,4174 ****
  Most often when you use the C preprocessor you do not have to invoke it
  explicitly: the C compiler does so automatically.  However, the
  preprocessor is sometimes useful on its own.  You can invoke the
! preprocessor either with the 'cpp' command, or via 'gcc -E'.  In GCC,
  the preprocessor is actually integrated with the compiler rather than a
  separate program, and both of these commands invoke GCC and tell it to
  stop after the preprocessing phase.
  
!    The 'cpp' options listed here are also accepted by 'gcc' and have the
! same meaning.  Likewise the 'cpp' command accepts all the usual 'gcc'
  driver options, although those 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.
  
!    The 'cpp' command expects two file names as arguments, INFILE and
  OUTFILE.  The preprocessor reads INFILE together with any other files it
! specifies with '#include'.  All the output generated by the combined
  input files is written in OUTFILE.
  
!    Either INFILE or OUTFILE may be '-', which as INFILE means to read
  from standard input and as OUTFILE means to write to standard output.
! If either file is omitted, it means the same as if '-' had been
! specified for that file.  You can also use the '-o OUTFILE' option to
  specify the output file.
  
!    Unless otherwise noted, or the option ends in '=', all options which
  take an argument may have that argument appear either immediately after
! the option, or with a space between option and argument: '-Ifoo' and '-I
! foo' have the same effect.
  
     Many options have multi-letter names; therefore multiple
! single-letter options may _not_ be grouped: '-dM' is very different from
! '-d -M'.
  
! '-D NAME'
!      Predefine NAME as a macro, with definition '1'.
  
! '-D NAME=DEFINITION'
       The contents of DEFINITION are tokenized and processed as if they
!      appeared during translation phase three in a '#define' directive.
       In particular, the definition is truncated by embedded newline
       characters.
  
--- 4130,4174 ----
  Most often when you use the C preprocessor you do not have to invoke it
  explicitly: the C compiler does so automatically.  However, the
  preprocessor is sometimes useful on its own.  You can invoke the
! preprocessor either with the ‘cpp’ command, or via ‘gcc -E’.  In GCC,
  the preprocessor is actually integrated with the compiler rather than a
  separate program, and both of these commands invoke GCC and tell it to
  stop after the preprocessing phase.
  
!    The ‘cpp’ options listed here are also accepted by ‘gcc’ and have the
! same meaning.  Likewise the ‘cpp’ command accepts all the usual ‘gcc’
  driver options, although those 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.
  
!    The ‘cpp’ command expects two file names as arguments, INFILE and
  OUTFILE.  The preprocessor reads INFILE together with any other files it
! specifies with ‘#include’.  All the output generated by the combined
  input files is written in OUTFILE.
  
!    Either INFILE or OUTFILE may be ‘-’, which as INFILE means to read
  from standard input and as OUTFILE means to write to standard output.
! If either file is omitted, it means the same as if ‘-’ had been
! specified for that file.  You can also use the ‘-o OUTFILE’ option to
  specify the output file.
  
!    Unless otherwise noted, or the option ends in ‘=’, all options which
  take an argument may have that argument appear either immediately after
! the option, or with a space between option and argument: ‘-Ifoo’ and ‘-I
! foo’ have the same effect.
  
     Many options have multi-letter names; therefore multiple
! single-letter options may _not_ be grouped: ‘-dM’ is very different from
! ‘-d -M’.
  
! ‘-D NAME’
!      Predefine NAME as a macro, with definition ‘1’.
  
! ‘-D NAME=DEFINITION’
       The contents of DEFINITION are tokenized and processed as if they
!      appeared during translation phase three in a ‘#define’ directive.
       In particular, the definition is truncated by embedded newline
       characters.
  
*************** single-letter options may _not_ be group
*** 4179,4290 ****
       If you wish to define a function-like macro on the command line,
       write its argument list with surrounding parentheses before the
       equals sign (if any).  Parentheses are meaningful to most shells,
!      so you should quote the option.  With 'sh' and 'csh',
!      '-D'NAME(ARGS...)=DEFINITION'' works.
  
!      '-D' and '-U' options are processed in the order they are given on
!      the command line.  All '-imacros FILE' and '-include FILE' options
!      are processed after all '-D' and '-U' options.
  
! '-U NAME'
       Cancel any previous definition of NAME, either built in or provided
!      with a '-D' option.
  
! '-include FILE'
!      Process FILE as if '#include "file"' appeared as the first line of
       the primary source file.  However, the first directory searched for
       FILE is the preprocessor's working directory _instead of_ the
       directory containing the main source file.  If not found there, it
!      is searched for in the remainder of the '#include "..."' search
       chain as normal.
  
!      If multiple '-include' options are given, the files are included in
       the order they appear on the command line.
  
! '-imacros FILE'
!      Exactly like '-include', except that any output produced by
       scanning FILE is thrown away.  Macros it defines remain defined.
       This allows you to acquire all the macros from a header without
       also processing its declarations.
  
!      All files specified by '-imacros' are processed before all files
!      specified by '-include'.
  
! '-undef'
       Do not predefine any system-specific or GCC-specific macros.  The
       standard predefined macros remain defined.  *Note Standard
       Predefined Macros::.
  
! '-pthread'
       Define additional macros required for using the POSIX threads
       library.  You should use this option consistently for both
       compilation and linking.  This option is supported on GNU/Linux
       targets, most other Unix derivatives, and also on x86 Cygwin and
       MinGW targets.
  
! '-M'
       Instead of outputting the result of preprocessing, output a rule
!      suitable for 'make' describing the dependencies of the main source
!      file.  The preprocessor outputs one 'make' rule containing the
       object file name for that source file, a colon, and the names of
!      all the included files, including those coming from '-include' or
!      '-imacros' command-line options.
  
!      Unless specified explicitly (with '-MT' or '-MQ'), the object file
       name consists of the name of the source file with any suffix
       replaced with object file suffix and with any leading directory
       parts removed.  If there are many included files then the rule is
!      split into several lines using '\'-newline.  The rule has no
       commands.
  
       This option does not suppress the preprocessor's debug output, such
!      as '-dM'.  To avoid mixing such debug output with the dependency
       rules you should explicitly specify the dependency output file with
!      '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
       (*note Environment Variables::).  Debug output is still sent to the
       regular output stream as normal.
  
!      Passing '-M' to the driver implies '-E', and suppresses warnings
!      with an implicit '-w'.
  
! '-MM'
!      Like '-M' but do not mention header files that are found in system
       header directories, nor header files that are included, directly or
       indirectly, from such a header.
  
       This implies that the choice of angle brackets or double quotes in
!      an '#include' directive does not in itself determine whether that
!      header appears in '-MM' dependency output.
  
! '-MF FILE'
!      When used with '-M' or '-MM', specifies a file to write the
!      dependencies to.  If no '-MF' switch is given the preprocessor
       sends the rules to the same place it would send preprocessed
       output.
  
!      When used with the driver options '-MD' or '-MMD', '-MF' overrides
       the default dependency output file.
  
!      If FILE is '-', then the dependencies are written to 'stdout'.
  
! '-MG'
!      In conjunction with an option such as '-M' requesting dependency
!      generation, '-MG' assumes missing header files are generated files
       and adds them to the dependency list without raising an error.  The
!      dependency filename is taken directly from the '#include' directive
!      without prepending any path.  '-MG' also suppresses preprocessed
       output, as a missing header file renders this useless.
  
       This feature is used in automatic updating of makefiles.
  
! '-Mno-modules'
       Disable dependency generation for compiled module interfaces.
  
! '-MP'
       This option instructs CPP to add a phony target for each dependency
       other than the main file, causing each to depend on nothing.  These
!      dummy rules work around errors 'make' gives if you remove header
!      files without updating the 'Makefile' to match.
  
       This is typical output:
  
--- 4179,4290 ----
       If you wish to define a function-like macro on the command line,
       write its argument list with surrounding parentheses before the
       equals sign (if any).  Parentheses are meaningful to most shells,
!      so you should quote the option.  With ‘sh’ and ‘csh’,
!      ‘-D'NAME(ARGS...)=DEFINITION'’ works.
  
!      ‘-D’ and ‘-U’ options are processed in the order they are given on
!      the command line.  All ‘-imacros FILE’ and ‘-include FILE’ options
!      are processed after all ‘-D’ and ‘-U’ options.
  
! ‘-U NAME’
       Cancel any previous definition of NAME, either built in or provided
!      with a ‘-D’ option.
  
! ‘-include FILE’
!      Process FILE as if ‘#include "file"’ appeared as the first line of
       the primary source file.  However, the first directory searched for
       FILE is the preprocessor's working directory _instead of_ the
       directory containing the main source file.  If not found there, it
!      is searched for in the remainder of the ‘#include "..."’ search
       chain as normal.
  
!      If multiple ‘-include’ options are given, the files are included in
       the order they appear on the command line.
  
! ‘-imacros FILE’
!      Exactly like ‘-include’, except that any output produced by
       scanning FILE is thrown away.  Macros it defines remain defined.
       This allows you to acquire all the macros from a header without
       also processing its declarations.
  
!      All files specified by ‘-imacros’ are processed before all files
!      specified by ‘-include’.
  
! ‘-undef’
       Do not predefine any system-specific or GCC-specific macros.  The
       standard predefined macros remain defined.  *Note Standard
       Predefined Macros::.
  
! ‘-pthread’
       Define additional macros required for using the POSIX threads
       library.  You should use this option consistently for both
       compilation and linking.  This option is supported on GNU/Linux
       targets, most other Unix derivatives, and also on x86 Cygwin and
       MinGW targets.
  
! ‘-M’
       Instead of outputting the result of preprocessing, output a rule
!      suitable for ‘make’ describing the dependencies of the main source
!      file.  The preprocessor outputs one ‘make’ rule containing the
       object file name for that source file, a colon, and the names of
!      all the included files, including those coming from ‘-include’ or
!      ‘-imacros’ command-line options.
  
!      Unless specified explicitly (with ‘-MT’ or ‘-MQ’), the object file
       name consists of the name of the source file with any suffix
       replaced with object file suffix and with any leading directory
       parts removed.  If there are many included files then the rule is
!      split into several lines using ‘\’-newline.  The rule has no
       commands.
  
       This option does not suppress the preprocessor's debug output, such
!      as ‘-dM’.  To avoid mixing such debug output with the dependency
       rules you should explicitly specify the dependency output file with
!      ‘-MF’, or use an environment variable like ‘DEPENDENCIES_OUTPUT’
       (*note Environment Variables::).  Debug output is still sent to the
       regular output stream as normal.
  
!      Passing ‘-M’ to the driver implies ‘-E’, and suppresses warnings
!      with an implicit ‘-w’.
  
! ‘-MM’
!      Like ‘-M’ but do not mention header files that are found in system
       header directories, nor header files that are included, directly or
       indirectly, from such a header.
  
       This implies that the choice of angle brackets or double quotes in
!      an ‘#include’ directive does not in itself determine whether that
!      header appears in ‘-MM’ dependency output.
  
! ‘-MF FILE’
!      When used with ‘-M’ or ‘-MM’, specifies a file to write the
!      dependencies to.  If no ‘-MF’ switch is given the preprocessor
       sends the rules to the same place it would send preprocessed
       output.
  
!      When used with the driver options ‘-MD’ or ‘-MMD’, ‘-MF’ overrides
       the default dependency output file.
  
!      If FILE is ‘-’, then the dependencies are written to ‘stdout’.
  
! ‘-MG’
!      In conjunction with an option such as ‘-M’ requesting dependency
!      generation, ‘-MG’ assumes missing header files are generated files
       and adds them to the dependency list without raising an error.  The
!      dependency filename is taken directly from the ‘#include’ directive
!      without prepending any path.  ‘-MG’ also suppresses preprocessed
       output, as a missing header file renders this useless.
  
       This feature is used in automatic updating of makefiles.
  
! ‘-Mno-modules’
       Disable dependency generation for compiled module interfaces.
  
! ‘-MP’
       This option instructs CPP to add a phony target for each dependency
       other than the main file, causing each to depend on nothing.  These
!      dummy rules work around errors ‘make’ gives if you remove header
!      files without updating the ‘Makefile’ to match.
  
       This is typical output:
  
*************** single-letter options may _not_ be group
*** 4292,4439 ****
  
            test.h:
  
! '-MT TARGET'
  
       Change the target of the rule emitted by dependency generation.  By
       default CPP takes the name of the main input file, deletes any
!      directory components and any file suffix such as '.c', and appends
       the platform's usual object suffix.  The result is the target.
  
!      An '-MT' option sets the target to be exactly the string you
       specify.  If you want multiple targets, you can specify them as a
!      single argument to '-MT', or use multiple '-MT' options.
  
!      For example, '-MT '$(objpfx)foo.o'' might give
  
            $(objpfx)foo.o: foo.c
  
! '-MQ TARGET'
  
!      Same as '-MT', but it quotes any characters which are special to
!      Make.  '-MQ '$(objpfx)foo.o'' gives
  
            $$(objpfx)foo.o: foo.c
  
       The default target is automatically quoted, as if it were given
!      with '-MQ'.
  
! '-MD'
!      '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
!      implied.  The driver determines FILE based on whether an '-o'
       option is given.  If it is, the driver uses its argument but with a
!      suffix of '.d', otherwise it takes the name of the input file,
!      removes any directory components and suffix, and applies a '.d'
       suffix.
  
!      If '-MD' is used in conjunction with '-E', any '-o' switch is
       understood to specify the dependency output file (*note -MF:
!      dashMF.), but if used without '-E', each '-o' is understood to
       specify a target object file.
  
!      Since '-E' is not implied, '-MD' can be used to generate a
       dependency output file as a side effect of the compilation process.
  
! '-MMD'
!      Like '-MD' except mention only user header files, not system header
       files.
  
! '-fpreprocessed'
       Indicate to the preprocessor that the input file has already been
       preprocessed.  This suppresses things like macro expansion,
       trigraph conversion, escaped newline splicing, and processing of
       most directives.  The preprocessor still recognizes and removes
!      comments, so that you can pass a file preprocessed with '-C' to the
       compiler without problems.  In this mode the integrated
       preprocessor is little more than a tokenizer for the front ends.
  
!      '-fpreprocessed' is implicit if the input file has one of the
!      extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
!      uses for preprocessed files created by '-save-temps'.
  
! '-fdirectives-only'
       When preprocessing, handle directives, but do not expand macros.
  
!      The option's behavior depends on the '-E' and '-fpreprocessed'
       options.
  
!      With '-E', preprocessing is limited to the handling of directives
!      such as '#define', '#ifdef', and '#error'.  Other preprocessor
       operations, such as macro expansion and trigraph conversion are not
!      performed.  In addition, the '-dD' option is implicitly enabled.
  
!      With '-fpreprocessed', predefinition of command line and most
!      builtin macros is disabled.  Macros such as '__LINE__', which are
       contextually dependent, are handled normally.  This enables
!      compilation of files previously preprocessed with '-E
!      -fdirectives-only'.
  
!      With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
       take precedence.  This enables full preprocessing of files
!      previously preprocessed with '-E -fdirectives-only'.
  
! '-fdollars-in-identifiers'
!      Accept '$' in identifiers.  *Note Identifier characters::.
  
! '-fextended-identifiers'
       Accept universal character names and extended characters in
       identifiers.  This option is enabled by default for C99 (and later
       C standard versions) and C++.
  
! '-fno-canonical-system-headers'
       When preprocessing, do not shorten system header paths with
       canonicalization.
  
! '-fmax-include-depth=DEPTH'
       Set the maximum depth of the nested #include.  The default is 200.
  
! '-ftabstop=WIDTH'
       Set the distance between tab stops.  This helps the preprocessor
       report correct column numbers in warnings or errors, even if tabs
       appear on the line.  If the value is less than 1 or greater than
       100, the option is ignored.  The default is 8.
  
! '-ftrack-macro-expansion[=LEVEL]'
       Track locations of tokens across macro expansions.  This allows the
       compiler to emit diagnostic about the current macro expansion stack
       when a compilation error occurs in a macro expansion.  Using this
       option makes the preprocessor and the compiler consume more memory.
       The LEVEL parameter can be used to choose the level of precision of
       token location tracking thus decreasing the memory consumption if
!      necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
       tracks tokens locations in a degraded mode for the sake of minimal
       memory overhead.  In this mode all tokens resulting from the
       expansion of an argument of a function-like macro have the same
!      location.  Value '2' tracks tokens locations completely.  This
       value is the most memory hungry.  When this option is given no
!      argument, the default parameter value is '2'.
  
!      Note that '-ftrack-macro-expansion=2' is activated by default.
  
! '-fmacro-prefix-map=OLD=NEW'
!      When preprocessing files residing in directory 'OLD', expand the
!      '__FILE__' and '__BASE_FILE__' macros as if the files resided in
!      directory 'NEW' instead.  This can be used to change an absolute
!      path to a relative path by using '.' for NEW which can result in
       more reproducible builds that are location independent.  This
!      option also affects '__builtin_FILE()' during compilation.  See
!      also '-ffile-prefix-map' and '-fcanon-prefix-map'.
  
! '-fexec-charset=CHARSET'
       Set the execution character set, used for string and character
       constants.  The default is UTF-8.  CHARSET can be any encoding
!      supported by the system's 'iconv' library routine.
  
! '-fwide-exec-charset=CHARSET'
       Set the wide execution character set, used for wide string and
       character constants.  The default is one of UTF-32BE, UTF-32LE,
       UTF-16BE, or UTF-16LE, whichever corresponds to the width of
!      'wchar_t' and the big-endian or little-endian byte order being used
!      for code generation.  As with '-fexec-charset', CHARSET can be any
!      encoding supported by the system's 'iconv' library routine;
       however, you will have problems with encodings that do not fit
!      exactly in 'wchar_t'.
  
! '-finput-charset=CHARSET'
       Set the input character set, used for translation from the
       character set of the input file to the source character set used by
       GCC.  If the locale does not specify, or GCC cannot get this
--- 4292,4439 ----
  
            test.h:
  
! ‘-MT TARGET’
  
       Change the target of the rule emitted by dependency generation.  By
       default CPP takes the name of the main input file, deletes any
!      directory components and any file suffix such as ‘.c’, and appends
       the platform's usual object suffix.  The result is the target.
  
!      An ‘-MT’ option sets the target to be exactly the string you
       specify.  If you want multiple targets, you can specify them as a
!      single argument to ‘-MT’, or use multiple ‘-MT’ options.
  
!      For example, ‘-MT '$(objpfx)foo.o'’ might give
  
            $(objpfx)foo.o: foo.c
  
! ‘-MQ TARGET’
  
!      Same as ‘-MT’, but it quotes any characters which are special to
!      Make.  ‘-MQ '$(objpfx)foo.o'’ gives
  
            $$(objpfx)foo.o: foo.c
  
       The default target is automatically quoted, as if it were given
!      with ‘-MQ’.
  
! ‘-MD’
!      ‘-MD’ is equivalent to ‘-M -MF FILE’, except that ‘-E’ is not
!      implied.  The driver determines FILE based on whether an ‘-o’
       option is given.  If it is, the driver uses its argument but with a
!      suffix of ‘.d’, otherwise it takes the name of the input file,
!      removes any directory components and suffix, and applies a ‘.d’
       suffix.
  
!      If ‘-MD’ is used in conjunction with ‘-E’, any ‘-o’ switch is
       understood to specify the dependency output file (*note -MF:
!      dashMF.), but if used without ‘-E’, each ‘-o’ is understood to
       specify a target object file.
  
!      Since ‘-E’ is not implied, ‘-MD’ can be used to generate a
       dependency output file as a side effect of the compilation process.
  
! ‘-MMD’
!      Like ‘-MD’ except mention only user header files, not system header
       files.
  
! ‘-fpreprocessed’
       Indicate to the preprocessor that the input file has already been
       preprocessed.  This suppresses things like macro expansion,
       trigraph conversion, escaped newline splicing, and processing of
       most directives.  The preprocessor still recognizes and removes
!      comments, so that you can pass a file preprocessed with ‘-C’ to the
       compiler without problems.  In this mode the integrated
       preprocessor is little more than a tokenizer for the front ends.
  
!      ‘-fpreprocessed’ is implicit if the input file has one of the
!      extensions ‘.i’, ‘.ii’ or ‘.mi’.  These are the extensions that GCC
!      uses for preprocessed files created by ‘-save-temps’.
  
! ‘-fdirectives-only’
       When preprocessing, handle directives, but do not expand macros.
  
!      The option's behavior depends on the ‘-E’ and ‘-fpreprocessed’
       options.
  
!      With ‘-E’, preprocessing is limited to the handling of directives
!      such as ‘#define’, ‘#ifdef’, and ‘#error’.  Other preprocessor
       operations, such as macro expansion and trigraph conversion are not
!      performed.  In addition, the ‘-dD’ option is implicitly enabled.
  
!      With ‘-fpreprocessed’, predefinition of command line and most
!      builtin macros is disabled.  Macros such as ‘__LINE__’, which are
       contextually dependent, are handled normally.  This enables
!      compilation of files previously preprocessed with ‘-E
!      -fdirectives-only’.
  
!      With both ‘-E’ and ‘-fpreprocessed’, the rules for ‘-fpreprocessed’
       take precedence.  This enables full preprocessing of files
!      previously preprocessed with ‘-E -fdirectives-only’.
  
! ‘-fdollars-in-identifiers’
!      Accept ‘$’ in identifiers.  *Note Identifier characters::.
  
! ‘-fextended-identifiers’
       Accept universal character names and extended characters in
       identifiers.  This option is enabled by default for C99 (and later
       C standard versions) and C++.
  
! ‘-fno-canonical-system-headers’
       When preprocessing, do not shorten system header paths with
       canonicalization.
  
! ‘-fmax-include-depth=DEPTH’
       Set the maximum depth of the nested #include.  The default is 200.
  
! ‘-ftabstop=WIDTH’
       Set the distance between tab stops.  This helps the preprocessor
       report correct column numbers in warnings or errors, even if tabs
       appear on the line.  If the value is less than 1 or greater than
       100, the option is ignored.  The default is 8.
  
! ‘-ftrack-macro-expansion[=LEVEL]’
       Track locations of tokens across macro expansions.  This allows the
       compiler to emit diagnostic about the current macro expansion stack
       when a compilation error occurs in a macro expansion.  Using this
       option makes the preprocessor and the compiler consume more memory.
       The LEVEL parameter can be used to choose the level of precision of
       token location tracking thus decreasing the memory consumption if
!      necessary.  Value ‘0’ of LEVEL de-activates this option.  Value ‘1’
       tracks tokens locations in a degraded mode for the sake of minimal
       memory overhead.  In this mode all tokens resulting from the
       expansion of an argument of a function-like macro have the same
!      location.  Value ‘2’ tracks tokens locations completely.  This
       value is the most memory hungry.  When this option is given no
!      argument, the default parameter value is ‘2’.
  
!      Note that ‘-ftrack-macro-expansion=2’ is activated by default.
  
! ‘-fmacro-prefix-map=OLD=NEW’
!      When preprocessing files residing in directory ‘OLD’, expand the
!      ‘__FILE__’ and ‘__BASE_FILE__’ macros as if the files resided in
!      directory ‘NEW’ instead.  This can be used to change an absolute
!      path to a relative path by using ‘.’ for NEW which can result in
       more reproducible builds that are location independent.  This
!      option also affects ‘__builtin_FILE()’ during compilation.  See
!      also ‘-ffile-prefix-map’ and ‘-fcanon-prefix-map’.
  
! ‘-fexec-charset=CHARSET’
       Set the execution character set, used for string and character
       constants.  The default is UTF-8.  CHARSET can be any encoding
!      supported by the system's ‘iconv’ library routine.
  
! ‘-fwide-exec-charset=CHARSET’
       Set the wide execution character set, used for wide string and
       character constants.  The default is one of UTF-32BE, UTF-32LE,
       UTF-16BE, or UTF-16LE, whichever corresponds to the width of
!      ‘wchar_t’ and the big-endian or little-endian byte order being used
!      for code generation.  As with ‘-fexec-charset’, CHARSET can be any
!      encoding supported by the system's ‘iconv’ library routine;
       however, you will have problems with encodings that do not fit
!      exactly in ‘wchar_t’.
  
! ‘-finput-charset=CHARSET’
       Set the input character set, used for translation from the
       character set of the input file to the source character set used by
       GCC.  If the locale does not specify, or GCC cannot get this
*************** single-letter options may _not_ be group
*** 4441,4449 ****
       overridden by either the locale or this command-line option.
       Currently the command-line option takes precedence if there's a
       conflict.  CHARSET can be any encoding supported by the system's
!      'iconv' library routine.
  
! '-fworking-directory'
       Enable generation of linemarkers in the preprocessor output that
       let the compiler know the current working directory at the time of
       preprocessing.  When this option is enabled, the preprocessor
--- 4441,4449 ----
       overridden by either the locale or this command-line option.
       Currently the command-line option takes precedence if there's a
       conflict.  CHARSET can be any encoding supported by the system's
!      ‘iconv’ library routine.
  
! ‘-fworking-directory’
       Enable generation of linemarkers in the preprocessor output that
       let the compiler know the current working directory at the time of
       preprocessing.  When this option is enabled, the preprocessor
*************** single-letter options may _not_ be group
*** 4453,4533 ****
       directory emitted as the current working directory in some
       debugging information formats.  This option is implicitly enabled
       if debugging information is enabled, but this can be inhibited with
!      the negated form '-fno-working-directory'.  If the '-P' flag is
       present in the command line, this option has no effect, since no
!      '#line' directives are emitted whatsoever.
  
! '-A PREDICATE=ANSWER'
       Make an assertion with the predicate PREDICATE and answer ANSWER.
!      This form is preferred to the older form '-A PREDICATE(ANSWER)',
       which is still supported, because it does not use shell special
       characters.  *Note Obsolete Features::.
  
! '-A -PREDICATE=ANSWER'
       Cancel an assertion with the predicate PREDICATE and answer ANSWER.
  
! '-C'
       Do not discard comments.  All comments are passed through to the
       output file, except for comments in processed directives, which are
       deleted along with the directive.
  
!      You should be prepared for side effects when using '-C'; it causes
       the preprocessor to treat comments as tokens in their own right.
       For example, comments appearing at the start of what would be a
       directive line have the effect of turning that line into an
       ordinary source line, since the first token on the line is no
!      longer a '#'.
  
! '-CC'
       Do not discard comments, including during macro expansion.  This is
!      like '-C', except that comments contained within macros are also
       passed through to the output file where the macro is expanded.
  
!      In addition to the side effects of the '-C' option, the '-CC'
       option causes all C++-style comments inside a macro to be converted
       to C-style comments.  This is to prevent later use of that macro
       from inadvertently commenting out the remainder of the source line.
  
!      The '-CC' option is generally used to support lint comments.
  
! '-P'
       Inhibit generation of linemarkers in the output from the
       preprocessor.  This might be useful when running the preprocessor
       on something that is not C code, and will be sent to a program
       which might be confused by the linemarkers.  *Note Preprocessor
       Output::.
  
! '-traditional'
! '-traditional-cpp'
  
       Try to imitate the behavior of pre-standard C preprocessors, as
       opposed to ISO C preprocessors.  *Note Traditional Mode::.
  
       Note that GCC does not otherwise attempt to emulate a pre-standard
!      C compiler, and these options are only supported with the '-E'
       switch, or when invoking CPP explicitly.
  
! '-trigraphs'
       Support ISO C trigraphs.  These are three-character sequences, all
!      starting with '??', that are defined by ISO C to stand for single
!      characters.  For example, '??/' stands for '\', so ''??/n'' is a
       character constant for a newline.  *Note Initial processing::.
  
       By default, GCC ignores trigraphs, but in standard-conforming modes
!      it converts them.  See the '-std' and '-ansi' options.
  
! '-remap'
       Enable special code to work around file systems which only permit
       very short file names, such as MS-DOS.
  
! '-H'
       Print the name of each header file used, in addition to other
       normal activities.  Each name is indented to show how deep in the
!      '#include' stack it is.  Precompiled header files are also printed,
       even if they are found to be invalid; an invalid precompiled header
!      file is printed with '...x' and a valid one with '...!' .
  
! '-dLETTERS'
       Says to make debugging dumps during compilation as specified by
       LETTERS.  The flags documented here are those relevant to the
       preprocessor.  Other LETTERS are interpreted by the compiler
--- 4453,4533 ----
       directory emitted as the current working directory in some
       debugging information formats.  This option is implicitly enabled
       if debugging information is enabled, but this can be inhibited with
!      the negated form ‘-fno-working-directory’.  If the ‘-P’ flag is
       present in the command line, this option has no effect, since no
!      ‘#line’ directives are emitted whatsoever.
  
! ‘-A PREDICATE=ANSWER’
       Make an assertion with the predicate PREDICATE and answer ANSWER.
!      This form is preferred to the older form ‘-A PREDICATE(ANSWER)’,
       which is still supported, because it does not use shell special
       characters.  *Note Obsolete Features::.
  
! ‘-A -PREDICATE=ANSWER’
       Cancel an assertion with the predicate PREDICATE and answer ANSWER.
  
! ‘-C’
       Do not discard comments.  All comments are passed through to the
       output file, except for comments in processed directives, which are
       deleted along with the directive.
  
!      You should be prepared for side effects when using ‘-C’; it causes
       the preprocessor to treat comments as tokens in their own right.
       For example, comments appearing at the start of what would be a
       directive line have the effect of turning that line into an
       ordinary source line, since the first token on the line is no
!      longer a ‘#’.
  
! ‘-CC’
       Do not discard comments, including during macro expansion.  This is
!      like ‘-C’, except that comments contained within macros are also
       passed through to the output file where the macro is expanded.
  
!      In addition to the side effects of the ‘-C’ option, the ‘-CC’
       option causes all C++-style comments inside a macro to be converted
       to C-style comments.  This is to prevent later use of that macro
       from inadvertently commenting out the remainder of the source line.
  
!      The ‘-CC’ option is generally used to support lint comments.
  
! ‘-P’
       Inhibit generation of linemarkers in the output from the
       preprocessor.  This might be useful when running the preprocessor
       on something that is not C code, and will be sent to a program
       which might be confused by the linemarkers.  *Note Preprocessor
       Output::.
  
! ‘-traditional’
! ‘-traditional-cpp’
  
       Try to imitate the behavior of pre-standard C preprocessors, as
       opposed to ISO C preprocessors.  *Note Traditional Mode::.
  
       Note that GCC does not otherwise attempt to emulate a pre-standard
!      C compiler, and these options are only supported with the ‘-E’
       switch, or when invoking CPP explicitly.
  
! ‘-trigraphs’
       Support ISO C trigraphs.  These are three-character sequences, all
!      starting with ‘??’, that are defined by ISO C to stand for single
!      characters.  For example, ‘??/’ stands for ‘\’, so ‘'??/n'’ is a
       character constant for a newline.  *Note Initial processing::.
  
       By default, GCC ignores trigraphs, but in standard-conforming modes
!      it converts them.  See the ‘-std’ and ‘-ansi’ options.
  
! ‘-remap’
       Enable special code to work around file systems which only permit
       very short file names, such as MS-DOS.
  
! ‘-H’
       Print the name of each header file used, in addition to other
       normal activities.  Each name is indented to show how deep in the
!      ‘#include’ stack it is.  Precompiled header files are also printed,
       even if they are found to be invalid; an invalid precompiled header
!      file is printed with ‘...x’ and a valid one with ‘...!’ .
  
! ‘-dLETTERS’
       Says to make debugging dumps during compilation as specified by
       LETTERS.  The flags documented here are those relevant to the
       preprocessor.  Other LETTERS are interpreted by the compiler
*************** single-letter options may _not_ be group
*** 4535,4592 ****
       ignored.  If you specify LETTERS whose behavior conflicts, the
       result is undefined.
  
!      '-dM'
!           Instead of the normal output, generate a list of '#define'
            directives for all the macros defined during the execution of
            the preprocessor, including predefined macros.  This gives you
            a way of finding out what is predefined in your version of the
!           preprocessor.  Assuming you have no file 'foo.h', the command
  
                 touch foo.h; cpp -dM foo.h
  
            shows all the predefined macros.
  
!      '-dD'
!           Like '-dM' except that it outputs _both_ the '#define'
            directives and the result of preprocessing.  Both kinds of
            output go to the standard output file.
  
!      '-dN'
!           Like '-dD', but emit only the macro names, not their
            expansions.
  
!      '-dI'
!           Output '#include' directives in addition to the result of
            preprocessing.
  
!      '-dU'
!           Like '-dD' except that only macros that are expanded, or whose
            definedness is tested in preprocessor directives, are output;
            the output is delayed until the use or test of the macro; and
!           '#undef' directives are also output for macros tested but
            undefined at the time.
  
! '-fdebug-cpp'
       This option is only useful for debugging GCC. When used from CPP or
!      with '-E', it dumps debugging information about location maps.
       Every token in the output is preceded by the dump of the map its
       location belongs to.
  
!      When used from GCC without '-E', this option has no effect.
  
! '-I DIR'
! '-iquote DIR'
! '-isystem DIR'
! '-idirafter DIR'
       Add the directory DIR to the list of directories to be searched for
       header files during preprocessing.  *Note Search Path::.  If DIR
!      begins with '=' or '$SYSROOT', then the '=' or '$SYSROOT' is
!      replaced by the sysroot prefix; see '--sysroot' and '-isysroot'.
  
!      Directories specified with '-iquote' apply only to the quote form
!      of the directive, '#include "FILE"'.  Directories specified with
!      '-I', '-isystem', or '-idirafter' apply to lookup for both the
!      '#include "FILE"' and '#include <FILE>' directives.
  
       You can specify any number or combination of these options on the
       command line to search for header files in several directories.
--- 4535,4592 ----
       ignored.  If you specify LETTERS whose behavior conflicts, the
       result is undefined.
  
!      ‘-dM’
!           Instead of the normal output, generate a list of ‘#define’
            directives for all the macros defined during the execution of
            the preprocessor, including predefined macros.  This gives you
            a way of finding out what is predefined in your version of the
!           preprocessor.  Assuming you have no file ‘foo.h’, the command
  
                 touch foo.h; cpp -dM foo.h
  
            shows all the predefined macros.
  
!      ‘-dD’
!           Like ‘-dM’ except that it outputs _both_ the ‘#define’
            directives and the result of preprocessing.  Both kinds of
            output go to the standard output file.
  
!      ‘-dN’
!           Like ‘-dD’, but emit only the macro names, not their
            expansions.
  
!      ‘-dI’
!           Output ‘#include’ directives in addition to the result of
            preprocessing.
  
!      ‘-dU’
!           Like ‘-dD’ except that only macros that are expanded, or whose
            definedness is tested in preprocessor directives, are output;
            the output is delayed until the use or test of the macro; and
!           ‘#undef’ directives are also output for macros tested but
            undefined at the time.
  
! ‘-fdebug-cpp’
       This option is only useful for debugging GCC. When used from CPP or
!      with ‘-E’, it dumps debugging information about location maps.
       Every token in the output is preceded by the dump of the map its
       location belongs to.
  
!      When used from GCC without ‘-E’, this option has no effect.
  
! ‘-I DIR’
! ‘-iquote DIR’
! ‘-isystem DIR’
! ‘-idirafter DIR’
       Add the directory DIR to the list of directories to be searched for
       header files during preprocessing.  *Note Search Path::.  If DIR
!      begins with ‘=’ or ‘$SYSROOT’, then the ‘=’ or ‘$SYSROOT’ is
!      replaced by the sysroot prefix; see ‘--sysroot’ and ‘-isysroot’.
  
!      Directories specified with ‘-iquote’ apply only to the quote form
!      of the directive, ‘#include "FILE"’.  Directories specified with
!      ‘-I’, ‘-isystem’, or ‘-idirafter’ apply to lookup for both the
!      ‘#include "FILE"’ and ‘#include <FILE>’ directives.
  
       You can specify any number or combination of these options on the
       command line to search for header files in several directories.
*************** single-letter options may _not_ be group
*** 4596,4714 ****
            the current file is searched first.
  
         2. For the quote form of the include directive, the directories
!           specified by '-iquote' options are searched in left-to-right
            order, as they appear on the command line.
  
!        3. Directories specified with '-I' options are scanned in
            left-to-right order.
  
!        4. Directories specified with '-isystem' options are scanned in
            left-to-right order.
  
         5. Standard system directories are scanned.
  
!        6. Directories specified with '-idirafter' options are scanned in
            left-to-right order.
  
!      You can use '-I' to override a system header file, substituting
       your own version, since these directories are searched before the
       standard system header file directories.  However, you should not
       use this option to add directories that contain vendor-supplied
!      system header files; use '-isystem' for that.
  
!      The '-isystem' and '-idirafter' options also mark the directory as
       a system directory, so that it gets the same special treatment that
       is applied to the standard system directories.  *Note System
       Headers::.
  
       If a standard system include directory, or a directory specified
!      with '-isystem', is also specified with '-I', the '-I' option is
       ignored.  The directory is still searched but as a system directory
       at its normal position in the system include chain.  This is to
       ensure that GCC's procedure to fix buggy system headers and the
!      ordering for the '#include_next' directive are not inadvertently
       changed.  If you really need to change the search order for system
!      directories, use the '-nostdinc' and/or '-isystem' options.  *Note
       System Headers::.
  
! '-I-'
       Split the include path.  This option has been deprecated.  Please
!      use '-iquote' instead for '-I' directories before the '-I-' and
!      remove the '-I-' option.
  
!      Any directories specified with '-I' options before '-I-' are
!      searched only for headers requested with '#include "FILE"'; they
!      are not searched for '#include <FILE>'.  If additional directories
!      are specified with '-I' options after the '-I-', those directories
!      are searched for all '#include' directives.
  
!      In addition, '-I-' inhibits the use of the directory of the current
!      file directory as the first search directory for '#include "FILE"'.
!      There is no way to override this effect of '-I-'.  *Note Search
       Path::.
  
! '-iprefix PREFIX'
!      Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
       If the prefix represents a directory, you should include the final
!      '/'.
  
! '-iwithprefix DIR'
! '-iwithprefixbefore DIR'
!      Append DIR to the prefix specified previously with '-iprefix', and
       add the resulting directory to the include search path.
!      '-iwithprefixbefore' puts it in the same place '-I' would;
!      '-iwithprefix' puts it where '-idirafter' would.
  
! '-isysroot DIR'
!      This option is like the '--sysroot' option, but applies only to
       header files (except for Darwin targets, where it applies to both
!      header files and libraries).  See the '--sysroot' option for more
       information.
  
! '-imultilib DIR'
       Use DIR as a subdirectory of the directory containing
       target-specific C++ headers.
  
! '-nostdinc'
       Do not search the standard system directories for header files.
!      Only the directories explicitly specified with '-I', '-iquote',
!      '-isystem', and/or '-idirafter' options (and the directory of the
       current file, if appropriate) are searched.
  
! '-nostdinc++'
       Do not search for header files in the C++-specific standard
       directories, but do still search the other standard directories.
       (This option is used when building the C++ library.)
  
! '-Wcomment'
! '-Wcomments'
!      Warn whenever a comment-start sequence '/*' appears in a '/*'
!      comment, or whenever a backslash-newline appears in a '//' comment.
!      This warning is enabled by '-Wall'.
  
! '-Wtrigraphs'
       Warn if any trigraphs are encountered that might change the meaning
       of the program.  Trigraphs within comments are not warned about,
       except those that would form escaped newlines.
  
!      This option is implied by '-Wall'.  If '-Wall' is not given, this
       option is still enabled unless trigraphs are enabled.  To get
!      trigraph conversion without warnings, but get the other '-Wall'
!      warnings, use '-trigraphs -Wall -Wno-trigraphs'.
  
! '-Wundef'
!      Warn if an undefined identifier is evaluated in an '#if' directive.
       Such identifiers are replaced with zero.
  
! '-Wexpansion-to-defined'
!      Warn whenever 'defined' is encountered in the expansion of a macro
!      (including the case where the macro is expanded by an '#if'
       directive).  Such usage is not portable.  This warning is also
!      enabled by '-Wpedantic' and '-Wextra'.
  
! '-Wunused-macros'
       Warn about macros defined in the main file that are unused.  A
!      macro is "used" if it is expanded or tested for existence at least
       once.  The preprocessor also warns if the macro has not been used
       at the time it is redefined or undefined.
  
--- 4596,4714 ----
            the current file is searched first.
  
         2. For the quote form of the include directive, the directories
!           specified by ‘-iquote’ options are searched in left-to-right
            order, as they appear on the command line.
  
!        3. Directories specified with ‘-I’ options are scanned in
            left-to-right order.
  
!        4. Directories specified with ‘-isystem’ options are scanned in
            left-to-right order.
  
         5. Standard system directories are scanned.
  
!        6. Directories specified with ‘-idirafter’ options are scanned in
            left-to-right order.
  
!      You can use ‘-I’ to override a system header file, substituting
       your own version, since these directories are searched before the
       standard system header file directories.  However, you should not
       use this option to add directories that contain vendor-supplied
!      system header files; use ‘-isystem’ for that.
  
!      The ‘-isystem’ and ‘-idirafter’ options also mark the directory as
       a system directory, so that it gets the same special treatment that
       is applied to the standard system directories.  *Note System
       Headers::.
  
       If a standard system include directory, or a directory specified
!      with ‘-isystem’, is also specified with ‘-I’, the ‘-I’ option is
       ignored.  The directory is still searched but as a system directory
       at its normal position in the system include chain.  This is to
       ensure that GCC's procedure to fix buggy system headers and the
!      ordering for the ‘#include_next’ directive are not inadvertently
       changed.  If you really need to change the search order for system
!      directories, use the ‘-nostdinc’ and/or ‘-isystem’ options.  *Note
       System Headers::.
  
! ‘-I-’
       Split the include path.  This option has been deprecated.  Please
!      use ‘-iquote’ instead for ‘-I’ directories before the ‘-I-’ and
!      remove the ‘-I-’ option.
  
!      Any directories specified with ‘-I’ options before ‘-I-’ are
!      searched only for headers requested with ‘#include "FILE"’; they
!      are not searched for ‘#include <FILE>’.  If additional directories
!      are specified with ‘-I’ options after the ‘-I-’, those directories
!      are searched for all ‘#include’ directives.
  
!      In addition, ‘-I-’ inhibits the use of the directory of the current
!      file directory as the first search directory for ‘#include "FILE"’.
!      There is no way to override this effect of ‘-I-’.  *Note Search
       Path::.
  
! ‘-iprefix PREFIX’
!      Specify PREFIX as the prefix for subsequent ‘-iwithprefix’ options.
       If the prefix represents a directory, you should include the final
!      ‘/’.
  
! ‘-iwithprefix DIR’
! ‘-iwithprefixbefore DIR’
!      Append DIR to the prefix specified previously with ‘-iprefix’, and
       add the resulting directory to the include search path.
!      ‘-iwithprefixbefore’ puts it in the same place ‘-I’ would;
!      ‘-iwithprefix’ puts it where ‘-idirafter’ would.
  
! ‘-isysroot DIR’
!      This option is like the ‘--sysroot’ option, but applies only to
       header files (except for Darwin targets, where it applies to both
!      header files and libraries).  See the ‘--sysroot’ option for more
       information.
  
! ‘-imultilib DIR’
       Use DIR as a subdirectory of the directory containing
       target-specific C++ headers.
  
! ‘-nostdinc’
       Do not search the standard system directories for header files.
!      Only the directories explicitly specified with ‘-I’, ‘-iquote’,
!      ‘-isystem’, and/or ‘-idirafter’ options (and the directory of the
       current file, if appropriate) are searched.
  
! ‘-nostdinc++’
       Do not search for header files in the C++-specific standard
       directories, but do still search the other standard directories.
       (This option is used when building the C++ library.)
  
! ‘-Wcomment’
! ‘-Wcomments’
!      Warn whenever a comment-start sequence ‘/*’ appears in a ‘/*’
!      comment, or whenever a backslash-newline appears in a ‘//’ comment.
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wtrigraphs’
       Warn if any trigraphs are encountered that might change the meaning
       of the program.  Trigraphs within comments are not warned about,
       except those that would form escaped newlines.
  
!      This option is implied by ‘-Wall’.  If ‘-Wall’ is not given, this
       option is still enabled unless trigraphs are enabled.  To get
!      trigraph conversion without warnings, but get the other ‘-Wall’
!      warnings, use ‘-trigraphs -Wall -Wno-trigraphs’.
  
! ‘-Wundef’
!      Warn if an undefined identifier is evaluated in an ‘#if’ directive.
       Such identifiers are replaced with zero.
  
! ‘-Wexpansion-to-defined’
!      Warn whenever ‘defined’ is encountered in the expansion of a macro
!      (including the case where the macro is expanded by an ‘#if’
       directive).  Such usage is not portable.  This warning is also
!      enabled by ‘-Wpedantic’ and ‘-Wextra’.
  
! ‘-Wunused-macros’
       Warn about macros defined in the main file that are unused.  A
!      macro is “used” if it is expanded or tested for existence at least
       once.  The preprocessor also warns if the macro has not been used
       at the time it is redefined or undefined.
  
*************** single-letter options may _not_ be group
*** 4725,4732 ****
            #if defined the_macro_causing_the_warning
            #endif
  
! '-Wno-endif-labels'
!      Do not warn whenever an '#else' or an '#endif' are followed by
       text.  This sometimes happens in older programs with code of the
       form
  
--- 4725,4732 ----
            #if defined the_macro_causing_the_warning
            #endif
  
! ‘-Wno-endif-labels’
!      Do not warn whenever an ‘#else’ or an ‘#endif’ are followed by
       text.  This sometimes happens in older programs with code of the
       form
  
*************** single-letter options may _not_ be group
*** 4736,4742 ****
            ...
            #endif FOO
  
!      The second and third 'FOO' should be in comments.  This warning is
       on by default.
  
  
--- 4736,4742 ----
            ...
            #endif FOO
  
!      The second and third ‘FOO’ should be in comments.  This warning is
       on by default.
  
  
*************** operates.  You can use them to specify d
*** 4750,4821 ****
  when searching for include files, or to control dependency output.
  
     Note that you can also specify places to search using options such as
! '-I', and control dependency output with options like '-M' (*note
  Invocation::).  These take precedence over environment variables, which
  in turn take precedence over the configuration of GCC.
  
! 'CPATH'
! 'C_INCLUDE_PATH'
! 'CPLUS_INCLUDE_PATH'
! 'OBJC_INCLUDE_PATH'
       Each variable's value is a list of directories separated by a
!      special character, much like 'PATH', in which to look for header
!      files.  The special character, 'PATH_SEPARATOR', is
       target-dependent and determined at GCC build time.  For Microsoft
       Windows-based targets it is a semicolon, and for almost all other
       targets it is a colon.
  
!      'CPATH' specifies a list of directories to be searched as if
!      specified with '-I', but after any paths given with '-I' options on
       the command line.  This environment variable is used regardless of
       which language is being preprocessed.
  
       The remaining environment variables apply only when preprocessing
       the particular language indicated.  Each specifies a list of
!      directories to be searched as if specified with '-isystem', but
!      after any paths given with '-isystem' options on the command line.
  
       In all these variables, an empty element instructs the compiler to
       search its current working directory.  Empty elements can appear at
       the beginning or end of a path.  For instance, if the value of
!      'CPATH' is ':/special/include', that has the same effect as
!      '-I. -I/special/include'.
  
       See also *note Search Path::.
  
! 'DEPENDENCIES_OUTPUT'
       If this variable is set, its value specifies how to output
       dependencies for Make based on the non-system header files
       processed by the compiler.  System header files are ignored in the
       dependency output.
  
!      The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
       which case the Make rules are written to that file, guessing the
       target name from the source file name.  Or the value can have the
!      form 'FILE TARGET', in which case the rules are written to file
       FILE using TARGET as the target name.
  
       In other words, this environment variable is equivalent to
!      combining the options '-MM' and '-MF' (*note Invocation::), with an
!      optional '-MT' switch too.
  
! 'SUNPRO_DEPENDENCIES'
!      This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
!      except that system header files are not ignored, so it implies '-M'
!      rather than '-MM'.  However, the dependence on the main input file
       is omitted.  *Note Invocation::.
  
! 'SOURCE_DATE_EPOCH'
       If this variable is set, its value specifies a UNIX timestamp to be
!      used in replacement of the current date and time in the '__DATE__'
!      and '__TIME__' macros, so that the embedded timestamps become
       reproducible.
  
!      The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
       as the number of seconds (excluding leap seconds) since 01 Jan 1970
!      00:00:00 represented in ASCII; identical to the output of 'date
!      +%s' on GNU/Linux and other systems that support the '%s' extension
!      in the 'date' command.
  
       The value should be a known timestamp such as the last modification
       time of the source or package and it should be set by the build
--- 4750,4821 ----
  when searching for include files, or to control dependency output.
  
     Note that you can also specify places to search using options such as
! ‘-I’, and control dependency output with options like ‘-M’ (*note
  Invocation::).  These take precedence over environment variables, which
  in turn take precedence over the configuration of GCC.
  
! ‘CPATH’
! ‘C_INCLUDE_PATH’
! ‘CPLUS_INCLUDE_PATH’
! ‘OBJC_INCLUDE_PATH’
       Each variable's value is a list of directories separated by a
!      special character, much like ‘PATH’, in which to look for header
!      files.  The special character, ‘PATH_SEPARATOR’, is
       target-dependent and determined at GCC build time.  For Microsoft
       Windows-based targets it is a semicolon, and for almost all other
       targets it is a colon.
  
!      ‘CPATH’ specifies a list of directories to be searched as if
!      specified with ‘-I’, but after any paths given with ‘-I’ options on
       the command line.  This environment variable is used regardless of
       which language is being preprocessed.
  
       The remaining environment variables apply only when preprocessing
       the particular language indicated.  Each specifies a list of
!      directories to be searched as if specified with ‘-isystem’, but
!      after any paths given with ‘-isystem’ options on the command line.
  
       In all these variables, an empty element instructs the compiler to
       search its current working directory.  Empty elements can appear at
       the beginning or end of a path.  For instance, if the value of
!      ‘CPATH’ is ‘:/special/include’, that has the same effect as
!      ‘-I. -I/special/include’.
  
       See also *note Search Path::.
  
! ‘DEPENDENCIES_OUTPUT’
       If this variable is set, its value specifies how to output
       dependencies for Make based on the non-system header files
       processed by the compiler.  System header files are ignored in the
       dependency output.
  
!      The value of ‘DEPENDENCIES_OUTPUT’ can be just a file name, in
       which case the Make rules are written to that file, guessing the
       target name from the source file name.  Or the value can have the
!      form ‘FILE TARGET’, in which case the rules are written to file
       FILE using TARGET as the target name.
  
       In other words, this environment variable is equivalent to
!      combining the options ‘-MM’ and ‘-MF’ (*note Invocation::), with an
!      optional ‘-MT’ switch too.
  
! ‘SUNPRO_DEPENDENCIES’
!      This variable is the same as ‘DEPENDENCIES_OUTPUT’ (see above),
!      except that system header files are not ignored, so it implies ‘-M’
!      rather than ‘-MM’.  However, the dependence on the main input file
       is omitted.  *Note Invocation::.
  
! ‘SOURCE_DATE_EPOCH’
       If this variable is set, its value specifies a UNIX timestamp to be
!      used in replacement of the current date and time in the ‘__DATE__’
!      and ‘__TIME__’ macros, so that the embedded timestamps become
       reproducible.
  
!      The value of ‘SOURCE_DATE_EPOCH’ must be a UNIX timestamp, defined
       as the number of seconds (excluding leap seconds) since 01 Jan 1970
!      00:00:00 represented in ASCII; identical to the output of ‘date
!      +%s’ on GNU/Linux and other systems that support the ‘%s’ extension
!      in the ‘date’ command.
  
       The value should be a known timestamp such as the last modification
       time of the source or package and it should be set by the build
*************** GNU Free Documentation License
*** 4829,4835 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 4829,4835 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 4838,4844 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 4838,4844 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** Option Index
*** 5349,5440 ****
  ************
  
  CPP's command-line options and environment variables are indexed here
! without any initial '-' or '--'.
  
  [index]
  * Menu:
  
! * A:                                     Invocation.          (line 337)
! * C:                                     Invocation.          (line 346)
! * CC:                                    Invocation.          (line 358)
  * CPATH:                                 Environment Variables.
                                                                (line  15)
  * CPLUS_INCLUDE_PATH:                    Environment Variables.
                                                                (line  17)
! * C_INCLUDE_PATH:                        Environment Variables.
!                                                               (line  16)
! * D:                                     Invocation.          (line  43)
! * d:                                     Invocation.          (line 407)
! * dD:                                    Invocation.          (line 426)
  * DEPENDENCIES_OUTPUT:                   Environment Variables.
!                                                               (line  45)
! * dI:                                    Invocation.          (line 435)
! * dM:                                    Invocation.          (line 415)
! * dN:                                    Invocation.          (line 431)
! * dU:                                    Invocation.          (line 439)
! * fdebug-cpp:                            Invocation.          (line 446)
! * fdirectives-only:                      Invocation.          (line 230)
! * fdollars-in-identifiers:               Invocation.          (line 251)
! * fexec-charset:                         Invocation.          (line 298)
! * fextended-identifiers:                 Invocation.          (line 254)
! * finput-charset:                        Invocation.          (line 313)
! * fmacro-prefix-map:                     Invocation.          (line 289)
! * fmax-include-depth:                    Invocation.          (line 263)
! * fno-canonical-system-headers:          Invocation.          (line 259)
! * fno-working-directory:                 Invocation.          (line 323)
! * fpreprocessed:                         Invocation.          (line 217)
! * ftabstop:                              Invocation.          (line 266)
! * ftrack-macro-expansion:                Invocation.          (line 272)
! * fwide-exec-charset:                    Invocation.          (line 303)
! * fworking-directory:                    Invocation.          (line 323)
! * H:                                     Invocation.          (line 400)
! * I:                                     Invocation.          (line 454)
! * I-:                                    Invocation.          (line 511)
! * idirafter:                             Invocation.          (line 454)
! * imacros:                               Invocation.          (line  81)
! * imultilib:                             Invocation.          (line 545)
! * include:                               Invocation.          (line  70)
! * iprefix:                               Invocation.          (line 527)
! * iquote:                                Invocation.          (line 454)
! * isysroot:                              Invocation.          (line 539)
! * isystem:                               Invocation.          (line 454)
! * iwithprefix:                           Invocation.          (line 532)
! * iwithprefixbefore:                     Invocation.          (line 532)
! * M:                                     Invocation.          (line 102)
! * MD:                                    Invocation.          (line 197)
! * MF:                                    Invocation.          (line 136)
! * MG:                                    Invocation.          (line 147)
! * MM:                                    Invocation.          (line 127)
! * MMD:                                   Invocation.          (line 213)
! * Mno-modules:                           Invocation.          (line 157)
! * MP:                                    Invocation.          (line 160)
! * MQ:                                    Invocation.          (line 187)
! * MT:                                    Invocation.          (line 172)
! * nostdinc:                              Invocation.          (line 549)
! * nostdinc++:                            Invocation.          (line 555)
  * OBJC_INCLUDE_PATH:                     Environment Variables.
                                                                (line  18)
! * P:                                     Invocation.          (line 370)
! * pthread:                               Invocation.          (line  95)
! * remap:                                 Invocation.          (line 396)
  * SOURCE_DATE_EPOCH:                     Environment Variables.
!                                                               (line  67)
  * SUNPRO_DEPENDENCIES:                   Environment Variables.
!                                                               (line  61)
! * traditional:                           Invocation.          (line 377)
! * traditional-cpp:                       Invocation.          (line 377)
! * trigraphs:                             Invocation.          (line 387)
! * U:                                     Invocation.          (line  66)
! * undef:                                 Invocation.          (line  90)
! * Wcomment:                              Invocation.          (line 560)
! * Wcomments:                             Invocation.          (line 560)
! * Wendif-labels:                         Invocation.          (line 605)
! * Wexpansion-to-defined:                 Invocation.          (line 580)
! * Wno-endif-labels:                      Invocation.          (line 605)
! * Wno-undef:                             Invocation.          (line 576)
! * Wtrigraphs:                            Invocation.          (line 566)
! * Wundef:                                Invocation.          (line 576)
! * Wunused-macros:                        Invocation.          (line 586)
  
  
  File: cpp.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
--- 5349,5440 ----
  ************
  
  CPP's command-line options and environment variables are indexed here
! without any initial ‘-’ or ‘--’.
  
  [index]
  * Menu:
  
! * A:                                     Invocation.          (line 336)
! * C:                                     Invocation.          (line 345)
! * C_INCLUDE_PATH:                        Environment Variables.
!                                                               (line  16)
! * CC:                                    Invocation.          (line 357)
  * CPATH:                                 Environment Variables.
                                                                (line  15)
  * CPLUS_INCLUDE_PATH:                    Environment Variables.
                                                                (line  17)
! * D:                                     Invocation.          (line  42)
! * d:                                     Invocation.          (line 406)
! * dD:                                    Invocation.          (line 425)
  * DEPENDENCIES_OUTPUT:                   Environment Variables.
!                                                               (line  44)
! * dI:                                    Invocation.          (line 434)
! * dM:                                    Invocation.          (line 414)
! * dN:                                    Invocation.          (line 430)
! * dU:                                    Invocation.          (line 438)
! * fdebug-cpp:                            Invocation.          (line 445)
! * fdirectives-only:                      Invocation.          (line 229)
! * fdollars-in-identifiers:               Invocation.          (line 250)
! * fexec-charset:                         Invocation.          (line 297)
! * fextended-identifiers:                 Invocation.          (line 253)
! * finput-charset:                        Invocation.          (line 312)
! * fmacro-prefix-map:                     Invocation.          (line 288)
! * fmax-include-depth:                    Invocation.          (line 262)
! * fno-canonical-system-headers:          Invocation.          (line 258)
! * fno-working-directory:                 Invocation.          (line 322)
! * fpreprocessed:                         Invocation.          (line 216)
! * ftabstop:                              Invocation.          (line 265)
! * ftrack-macro-expansion:                Invocation.          (line 271)
! * fwide-exec-charset:                    Invocation.          (line 302)
! * fworking-directory:                    Invocation.          (line 322)
! * H:                                     Invocation.          (line 399)
! * I:                                     Invocation.          (line 453)
! * I-:                                    Invocation.          (line 510)
! * idirafter:                             Invocation.          (line 453)
! * imacros:                               Invocation.          (line  80)
! * imultilib:                             Invocation.          (line 544)
! * include:                               Invocation.          (line  69)
! * iprefix:                               Invocation.          (line 526)
! * iquote:                                Invocation.          (line 453)
! * isysroot:                              Invocation.          (line 538)
! * isystem:                               Invocation.          (line 453)
! * iwithprefix:                           Invocation.          (line 531)
! * iwithprefixbefore:                     Invocation.          (line 531)
! * M:                                     Invocation.          (line 101)
! * MD:                                    Invocation.          (line 196)
! * MF:                                    Invocation.          (line 135)
! * MG:                                    Invocation.          (line 146)
! * MM:                                    Invocation.          (line 126)
! * MMD:                                   Invocation.          (line 212)
! * Mno-modules:                           Invocation.          (line 156)
! * MP:                                    Invocation.          (line 159)
! * MQ:                                    Invocation.          (line 186)
! * MT:                                    Invocation.          (line 171)
! * nostdinc:                              Invocation.          (line 548)
! * nostdinc++:                            Invocation.          (line 554)
  * OBJC_INCLUDE_PATH:                     Environment Variables.
                                                                (line  18)
! * P:                                     Invocation.          (line 369)
! * pthread:                               Invocation.          (line  94)
! * remap:                                 Invocation.          (line 395)
  * SOURCE_DATE_EPOCH:                     Environment Variables.
!                                                               (line  66)
  * SUNPRO_DEPENDENCIES:                   Environment Variables.
!                                                               (line  60)
! * traditional:                           Invocation.          (line 376)
! * traditional-cpp:                       Invocation.          (line 376)
! * trigraphs:                             Invocation.          (line 386)
! * U:                                     Invocation.          (line  65)
! * undef:                                 Invocation.          (line  89)
! * Wcomment:                              Invocation.          (line 559)
! * Wcomments:                             Invocation.          (line 559)
! * Wendif-labels:                         Invocation.          (line 604)
! * Wexpansion-to-defined:                 Invocation.          (line 579)
! * Wno-endif-labels:                      Invocation.          (line 604)
! * Wno-undef:                             Invocation.          (line 575)
! * Wtrigraphs:                            Invocation.          (line 565)
! * Wundef:                                Invocation.          (line 575)
! * Wunused-macros:                        Invocation.          (line 585)
  
  
  File: cpp.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
*************** Concept Index
*** 5445,5460 ****
  [index]
  * Menu:
  
- * # operator:                            Stringizing.         (line   6)
- * ## operator:                           Concatenation.       (line   6)
- * _Pragma:                               Pragmas.             (line  13)
  * __has_attribute:                       __has_attribute.     (line   6)
  * __has_builtin:                         __has_builtin.       (line   6)
- * __has_cpp_attribute:                   __has_cpp_attribute. (line   6)
  * __has_c_attribute:                     __has_c_attribute.   (line   6)
  * __has_extension:                       __has_extension.     (line   6)
  * __has_feature:                         __has_feature.       (line   6)
  * __has_include:                         __has_include.       (line   6)
  * alternative tokens:                    Tokenization.        (line 100)
  * arguments:                             Macro Arguments.     (line   6)
  * arguments in macro definitions:        Macro Arguments.     (line   6)
--- 5445,5460 ----
  [index]
  * Menu:
  
  * __has_attribute:                       __has_attribute.     (line   6)
  * __has_builtin:                         __has_builtin.       (line   6)
  * __has_c_attribute:                     __has_c_attribute.   (line   6)
+ * __has_cpp_attribute:                   __has_cpp_attribute. (line   6)
  * __has_extension:                       __has_extension.     (line   6)
  * __has_feature:                         __has_feature.       (line   6)
  * __has_include:                         __has_include.       (line   6)
+ * _Pragma:                               Pragmas.             (line  13)
+ * # operator:                            Stringizing.         (line   6)
+ * ## operator:                           Concatenation.       (line   6)
  * alternative tokens:                    Tokenization.        (line 100)
  * arguments:                             Macro Arguments.     (line   6)
  * arguments in macro definitions:        Macro Arguments.     (line   6)
*************** Concept Index
*** 5462,5473 ****
  * assertions, canceling:                 Obsolete Features.   (line  59)
  * backslash-newline:                     Initial processing.  (line  61)
  * block comments:                        Initial processing.  (line  77)
! * C language, traditional:               Invocation.          (line 377)
  * C++ named operators:                   C++ Named Operators. (line   6)
  * character constants:                   Tokenization.        (line  81)
! * character set, execution:              Invocation.          (line 298)
! * character set, input:                  Invocation.          (line 313)
! * character set, wide execution:         Invocation.          (line 303)
  * command line:                          Invocation.          (line   6)
  * commenting out code:                   Deleted Code.        (line   6)
  * comments:                              Initial processing.  (line  77)
--- 5462,5473 ----
  * assertions, canceling:                 Obsolete Features.   (line  59)
  * backslash-newline:                     Initial processing.  (line  61)
  * block comments:                        Initial processing.  (line  77)
! * C language, traditional:               Invocation.          (line 376)
  * C++ named operators:                   C++ Named Operators. (line   6)
  * character constants:                   Tokenization.        (line  81)
! * character set, execution:              Invocation.          (line 297)
! * character set, input:                  Invocation.          (line 312)
! * character set, wide execution:         Invocation.          (line 302)
  * command line:                          Invocation.          (line   6)
  * commenting out code:                   Deleted Code.        (line   6)
  * comments:                              Initial processing.  (line  77)
*************** Concept Index
*** 5481,5490 ****
  * controlling macro:                     Once-Only Headers.   (line  35)
  * defined:                               Defined.             (line   6)
  * dependencies for make as output:       Environment Variables.
!                                                               (line  45)
  * dependencies for make as output <1>:   Environment Variables.
!                                                               (line  61)
! * dependencies, make:                    Invocation.          (line 102)
  * diagnostic:                            Diagnostics.         (line   6)
  * digraphs:                              Tokenization.        (line 100)
  * directive line:                        The preprocessing language.
--- 5481,5490 ----
  * controlling macro:                     Once-Only Headers.   (line  35)
  * defined:                               Defined.             (line   6)
  * dependencies for make as output:       Environment Variables.
!                                                               (line  44)
  * dependencies for make as output <1>:   Environment Variables.
!                                                               (line  60)
! * dependencies, make:                    Invocation.          (line 101)
  * diagnostic:                            Diagnostics.         (line   6)
  * digraphs:                              Tokenization.        (line 100)
  * directive line:                        The preprocessing language.
*************** Concept Index
*** 5523,5529 ****
  * macros in include:                     Computed Includes.   (line   6)
  * macros with arguments:                 Macro Arguments.     (line   6)
  * macros with variable arguments:        Variadic Macros.     (line   6)
! * make:                                  Invocation.          (line 102)
  * manifest constants:                    Object-like Macros.  (line   6)
  * named operators:                       C++ Named Operators. (line   6)
  * newlines in macro arguments:           Newlines in Arguments.
--- 5523,5529 ----
  * macros in include:                     Computed Includes.   (line   6)
  * macros with arguments:                 Macro Arguments.     (line   6)
  * macros with variable arguments:        Variadic Macros.     (line   6)
! * make:                                  Invocation.          (line 101)
  * manifest constants:                    Object-like Macros.  (line   6)
  * named operators:                       C++ Named Operators. (line   6)
  * newlines in macro arguments:           Newlines in Arguments.
*************** Concept Index
*** 5531,5537 ****
  * null directive:                        Other Directives.    (line  15)
  * numbers:                               Tokenization.        (line  58)
  * object-like macro:                     Object-like Macros.  (line   6)
! * options:                               Invocation.          (line  43)
  * options, grouping:                     Invocation.          (line  38)
  * other tokens:                          Tokenization.        (line 114)
  * output format:                         Preprocessor Output. (line  12)
--- 5531,5537 ----
  * null directive:                        Other Directives.    (line  15)
  * numbers:                               Tokenization.        (line  58)
  * object-like macro:                     Object-like Macros.  (line   6)
! * options:                               Invocation.          (line  42)
  * options, grouping:                     Invocation.          (line  38)
  * other tokens:                          Tokenization.        (line 114)
  * output format:                         Preprocessor Output. (line  12)
*************** Concept Index
*** 5578,5584 ****
  * token concatenation:                   Concatenation.       (line   6)
  * token pasting:                         Concatenation.       (line   6)
  * tokens:                                Tokenization.        (line   6)
! * traditional C language:                Invocation.          (line 377)
  * trigraphs:                             Initial processing.  (line  32)
  * undefining macros:                     Undefining and Redefining Macros.
                                                                (line   6)
--- 5578,5584 ----
  * token concatenation:                   Concatenation.       (line   6)
  * token pasting:                         Concatenation.       (line   6)
  * tokens:                                Tokenization.        (line   6)
! * traditional C language:                Invocation.          (line 376)
  * trigraphs:                             Initial processing.  (line  32)
  * undefining macros:                     Undefining and Redefining Macros.
                                                                (line   6)
*************** Concept Index
*** 5592,5676 ****
  
  
  Tag Table:
! Node: Top945
! Node: Overview3506
! Node: Character sets6344
! Ref: Character sets-Footnote-18516
! Node: Initial processing8697
! Ref: trigraphs10256
! Node: Tokenization14456
! Ref: Tokenization-Footnote-121286
! Node: The preprocessing language21397
! Node: Header Files24276
! Node: Include Syntax26192
! Node: Include Operation27829
! Node: Search Path29677
! Node: Once-Only Headers31899
! Node: Alternatives to Wrapper #ifndef33558
! Node: Computed Includes35207
! Node: Wrapper Headers38365
! Node: System Headers40788
! Node: Macros42389
! Node: Object-like Macros43526
! Node: Function-like Macros47116
! Node: Macro Arguments48732
! Node: Stringizing52871
! Node: Concatenation56032
! Node: Variadic Macros59129
! Node: Predefined Macros64081
! Node: Standard Predefined Macros64669
! Node: Common Predefined Macros71085
! Node: System-specific Predefined Macros93721
! Node: C++ Named Operators95744
! Node: Undefining and Redefining Macros96708
! Node: Directives Within Macro Arguments98806
! Node: Macro Pitfalls99747
! Node: Misnesting100280
! Node: Operator Precedence Problems101392
! Node: Swallowing the Semicolon103258
! Node: Duplication of Side Effects105281
! Node: Self-Referential Macros107464
! Node: Argument Prescan109873
! Node: Newlines in Arguments113624
! Node: Conditionals114575
! Node: Conditional Uses116271
! Node: Conditional Syntax117629
! Node: Ifdef118089
! Node: If121246
! Node: Defined123550
! Node: Else124943
! Node: Elif125513
! Node: __has_attribute126826
! Node: __has_cpp_attribute128420
! Node: __has_c_attribute129310
! Node: __has_builtin130083
! Node: __has_feature131216
! Node: __has_extension132095
! Node: __has_include133217
! Node: Deleted Code134808
! Node: Diagnostics136055
! Node: Line Control137604
! Node: Pragmas139882
! Node: Other Directives144394
! Node: Preprocessor Output145444
! Node: Traditional Mode148597
! Node: Traditional lexical analysis149734
! Node: Traditional macros152237
! Node: Traditional miscellany156034
! Node: Traditional warnings157030
! Node: Implementation Details159227
! Node: Implementation-defined behavior159790
! Ref: Identifier characters160540
! Node: Implementation limits163589
! Node: Obsolete Features166262
! Node: Invocation169106
! Ref: dashMF175141
! Ref: fdollars-in-identifiers179803
! Ref: Wtrigraphs194003
! Node: Environment Variables196058
! Node: GNU Free Documentation License199749
! Node: Index of Directives224899
! Node: Option Index227198
! Node: Concept Index233300
  
  End Tag Table
--- 5592,5681 ----
  
  
  Tag Table:
! Node: Top944
! Node: Overview3504
! Node: Character sets6382
! Ref: Character sets-Footnote-18590
! Node: Initial processing8775
! Ref: trigraphs10346
! Node: Tokenization14626
! Ref: Tokenization-Footnote-121620
! Node: The preprocessing language21739
! Node: Header Files24692
! Node: Include Syntax26624
! Node: Include Operation28313
! Node: Search Path30185
! Node: Once-Only Headers32471
! Node: Alternatives to Wrapper #ifndef34170
! Node: Computed Includes35887
! Node: Wrapper Headers39121
! Node: System Headers41608
! Node: Macros43245
! Node: Object-like Macros44402
! Node: Function-like Macros48096
! Node: Macro Arguments49728
! Node: Stringizing53921
! Node: Concatenation57162
! Node: Variadic Macros60343
! Node: Predefined Macros65395
! Node: Standard Predefined Macros65983
! Node: Common Predefined Macros72655
! Node: System-specific Predefined Macros96855
! Node: C++ Named Operators98926
! Node: Undefining and Redefining Macros99986
! Node: Directives Within Macro Arguments102120
! Node: Macro Pitfalls103061
! Node: Misnesting103594
! Node: Operator Precedence Problems104706
! Node: Swallowing the Semicolon106596
! Node: Duplication of Side Effects108655
! Node: Self-Referential Macros110910
! Node: Argument Prescan113419
! Node: Newlines in Arguments117256
! Node: Conditionals118211
! Node: Conditional Uses119931
! Node: Conditional Syntax121295
! Node: Ifdef121771
! Node: If125016
! Node: Defined127388
! Node: Else128849
! Node: Elif129435
! Node: __has_attribute130820
! Node: __has_cpp_attribute132454
! Node: __has_c_attribute133372
! Node: __has_builtin134181
! Node: __has_feature135342
! Node: __has_extension136245
! Node: __has_include137419
! Node: Deleted Code139050
! Node: Diagnostics140341
! Node: Line Control141930
! Node: Pragmas144272
! Node: Other Directives148936
! Node: Preprocessor Output150014
! Node: Traditional Mode153239
! Node: Traditional lexical analysis154380
! Node: Traditional macros156907
! Node: Traditional miscellany160724
! Node: Traditional warnings161758
! Node: Implementation Details164025
! Node: Implementation-defined behavior164588
! Ref: Identifier characters165358
! Node: Implementation limits168485
! Node: Obsolete Features171190
! Node: Invocation174090
! Ref: dashMF180361
! Ref: fdollars-in-identifiers185291
! Ref: Wtrigraphs200091
! Node: Environment Variables202214
! Node: GNU Free Documentation License206037
! Node: Index of Directives231190
! Node: Option Index233489
! Node: Concept Index239599
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/cppinternals.info gcc-14.3.0-RC-20260619/gcc/doc/cppinternals.info
*** gcc-14.3.0/gcc/doc/cppinternals.info	Fri May 23 11:19:45 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/cppinternals.info	Fri Jun 19 07:07:43 2026
***************
*** 1,4 ****
! This is cppinternals.info, produced by makeinfo version 6.5 from
  cppinternals.texi.
  
  INFO-DIR-SECTION Software development
--- 1,4 ----
! This is cppinternals.info, produced by makeinfo version 7.1 from
  cppinternals.texi.
  
  INFO-DIR-SECTION Software development
*************** The GNU C Preprocessor Internals
*** 44,50 ****
  1 Cpplib--the GNU C Preprocessor
  ********************************
  
! The GNU C preprocessor is implemented as a library, "cpplib", so it can
  be easily shared between a stand-alone preprocessor, and a preprocessor
  integrated with the C, C++ and Objective-C front ends.  It is also
  available for use by other programs, though this is not recommended as
--- 44,50 ----
  1 Cpplib--the GNU C Preprocessor
  ********************************
  
! The GNU C preprocessor is implemented as a library, “cpplib”, so it can
  be easily shared between a stand-alone preprocessor, and a preprocessor
  integrated with the C, C++ and Objective-C front ends.  It is also
  available for use by other programs, though this is not recommended as
*************** cpplib has two interfaces--one is expose
*** 85,97 ****
  is for both internal and external use.
  
     The convention is that functions and types that are exposed to
! multiple files internally are prefixed with '_cpp_', and are to be found
! in the file 'internal.h'.  Functions and types exposed to external
! clients are in 'cpplib.h', and prefixed with 'cpp_'.  For historical
  reasons this is no longer quite true, but we should strive to stick to
  it.
  
!    We are striving to reduce the information exposed in 'cpplib.h' to
  the bare minimum necessary, and then to keep it there.  This makes clear
  exactly what external clients are entitled to assume, and allows us to
  change internals in the future without worrying whether library clients
--- 85,97 ----
  is for both internal and external use.
  
     The convention is that functions and types that are exposed to
! multiple files internally are prefixed with ‘_cpp_’, and are to be found
! in the file ‘internal.h’.  Functions and types exposed to external
! clients are in ‘cpplib.h’, and prefixed with ‘cpp_’.  For historical
  reasons this is no longer quite true, but we should strive to stick to
  it.
  
!    We are striving to reduce the information exposed in ‘cpplib.h’ to
  the bare minimum necessary, and then to keep it there.  This makes clear
  exactly what external clients are entitled to assume, and allows us to
  change internals in the future without worrying whether library clients
*************** The Lexer
*** 107,113 ****
  Overview
  ========
  
! The lexer is contained in the file 'lex.cc'.  It is a hand-coded lexer,
  and not implemented as a state machine.  It can understand C, C++ and
  Objective-C source code, and has been extended to allow reasonably
  successful preprocessing of assembly language.  The lexer does not make
--- 107,113 ----
  Overview
  ========
  
! The lexer is contained in the file ‘lex.cc’.  It is a hand-coded lexer,
  and not implemented as a state machine.  It can understand C, C++ and
  Objective-C source code, and has been extended to allow reasonably
  successful preprocessing of assembly language.  The lexer does not make
*************** them as they are encountered in a single
*** 116,132 ****
  returns preprocessing tokens individually, not a line at a time.
  
     It is mostly transparent to users of the library, since the library's
! interface for obtaining the next token, 'cpp_get_token', takes care of
  lexing new tokens, handling directives, and expanding macros as
  necessary.  However, the lexer does expose some functionality so that
  clients of the library can easily spell a given token, such as
! 'cpp_spell_token' and 'cpp_token_len'.  These functions are useful when
  generating diagnostics, and for emitting the preprocessed output.
  
  Lexing a token
  ==============
  
! Lexing of an individual token is handled by '_cpp_lex_direct' and its
  subroutines.  In its current form the code is quite complicated, with
  read ahead characters and such-like, since it strives to not step back
  in the character stream in preparation for handling non-ASCII file
--- 116,132 ----
  returns preprocessing tokens individually, not a line at a time.
  
     It is mostly transparent to users of the library, since the library's
! interface for obtaining the next token, ‘cpp_get_token’, takes care of
  lexing new tokens, handling directives, and expanding macros as
  necessary.  However, the lexer does expose some functionality so that
  clients of the library can easily spell a given token, such as
! ‘cpp_spell_token’ and ‘cpp_token_len’.  These functions are useful when
  generating diagnostics, and for emitting the preprocessed output.
  
  Lexing a token
  ==============
  
! Lexing of an individual token is handled by ‘_cpp_lex_direct’ and its
  subroutines.  In its current form the code is quite complicated, with
  read ahead characters and such-like, since it strives to not step back
  in the character stream in preparation for handling non-ASCII file
*************** encodings.  The current plan is to conve
*** 134,199 ****
  before processing them.  This complexity is therefore unnecessary and
  will be removed, so I'll not discuss it further here.
  
!    The job of '_cpp_lex_direct' is simply to lex a token.  It is not
  responsible for issues like directive handling, returning lookahead
  tokens directly, multiple-include optimization, or conditional block
! skipping.  It necessarily has a minor ro^le to play in memory management
  of lexed lines.  I discuss these issues in a separate section (*note
  Lexing a line::).
  
     The lexer places the token it lexes into storage pointed to by the
! variable 'cur_token', and then increments it.  This variable is
  important for correct diagnostic positioning.  Unless a specific line
  and column are passed to the diagnostic routines, they will examine the
! 'line' and 'col' values of the token just before the location that
! 'cur_token' points to, and use that location to report the diagnostic.
  
     The lexer does not consider whitespace to be a token in its own
  right.  If whitespace (other than a new line) precedes a token, it sets
! the 'PREV_WHITE' bit in the token's flags.  Each token has its 'line'
! and 'col' variables set to the line and column of the first character of
  the token.  This line number is the line number in the translation unit,
  and can be converted to a source (file, line) pair using the line map
  code.
  
!    The first token on a logical, i.e. unescaped, line has the flag 'BOL'
  set for beginning-of-line.  This flag is intended for internal use, both
! to distinguish a '#' that begins a directive from one that doesn't, and
  to generate a call-back to clients that want to be notified about the
  start of every non-directive line with tokens on it.  Clients cannot
  reliably determine this for themselves: the first token might be a
! macro, and the tokens of a macro expansion do not have the 'BOL' flag
  set.  The macro expansion may even be empty, and the next token on the
! line certainly won't have the 'BOL' flag set.
  
     New lines are treated specially; exactly how the lexer handles them
  is context-dependent.  The C standard mandates that directives are
  terminated by the first unescaped newline character, even if it appears
  in the middle of a macro expansion.  Therefore, if the state variable
! 'in_directive' is set, the lexer returns a 'CPP_EOF' token, which is
  normally used to indicate end-of-file, to indicate end-of-directive.  In
! a directive a 'CPP_EOF' token never means end-of-file.  Conveniently, if
! the caller was 'collect_args', it already handles 'CPP_EOF' as if it
  were end-of-file, and reports an error about an unterminated macro
  argument list.
  
     The C standard also specifies that a new line in the middle of the
  arguments to a macro is treated as whitespace.  This white space is
  important in case the macro argument is stringized.  The state variable
! 'parsing_args' is nonzero when the preprocessor is collecting the
  arguments to a macro call.  It is set to 1 when looking for the opening
  parenthesis to a function-like macro, and 2 when collecting the actual
  arguments up to the closing parenthesis, since these two cases need to
  be distinguished sometimes.  One such time is here: the lexer sets the
! 'PREV_WHITE' flag of a token if it meets a new line when 'parsing_args'
  is set to 2.  It doesn't set it if it meets a new line when
! 'parsing_args' is 1, since then code like
  
       #define foo() bar
       foo
       baz
  
! would be output with an erroneous space before 'baz':
  
       foo
        baz
--- 134,199 ----
  before processing them.  This complexity is therefore unnecessary and
  will be removed, so I'll not discuss it further here.
  
!    The job of ‘_cpp_lex_direct’ is simply to lex a token.  It is not
  responsible for issues like directive handling, returning lookahead
  tokens directly, multiple-include optimization, or conditional block
! skipping.  It necessarily has a minor rôle to play in memory management
  of lexed lines.  I discuss these issues in a separate section (*note
  Lexing a line::).
  
     The lexer places the token it lexes into storage pointed to by the
! variable ‘cur_token’, and then increments it.  This variable is
  important for correct diagnostic positioning.  Unless a specific line
  and column are passed to the diagnostic routines, they will examine the
! ‘line’ and ‘col’ values of the token just before the location that
! ‘cur_token’ points to, and use that location to report the diagnostic.
  
     The lexer does not consider whitespace to be a token in its own
  right.  If whitespace (other than a new line) precedes a token, it sets
! the ‘PREV_WHITE’ bit in the token's flags.  Each token has its ‘line’
! and ‘col’ variables set to the line and column of the first character of
  the token.  This line number is the line number in the translation unit,
  and can be converted to a source (file, line) pair using the line map
  code.
  
!    The first token on a logical, i.e. unescaped, line has the flag ‘BOL’
  set for beginning-of-line.  This flag is intended for internal use, both
! to distinguish a ‘#’ that begins a directive from one that doesn't, and
  to generate a call-back to clients that want to be notified about the
  start of every non-directive line with tokens on it.  Clients cannot
  reliably determine this for themselves: the first token might be a
! macro, and the tokens of a macro expansion do not have the ‘BOL’ flag
  set.  The macro expansion may even be empty, and the next token on the
! line certainly won't have the ‘BOL’ flag set.
  
     New lines are treated specially; exactly how the lexer handles them
  is context-dependent.  The C standard mandates that directives are
  terminated by the first unescaped newline character, even if it appears
  in the middle of a macro expansion.  Therefore, if the state variable
! ‘in_directive’ is set, the lexer returns a ‘CPP_EOF’ token, which is
  normally used to indicate end-of-file, to indicate end-of-directive.  In
! a directive a ‘CPP_EOF’ token never means end-of-file.  Conveniently, if
! the caller was ‘collect_args’, it already handles ‘CPP_EOF’ as if it
  were end-of-file, and reports an error about an unterminated macro
  argument list.
  
     The C standard also specifies that a new line in the middle of the
  arguments to a macro is treated as whitespace.  This white space is
  important in case the macro argument is stringized.  The state variable
! ‘parsing_args’ is nonzero when the preprocessor is collecting the
  arguments to a macro call.  It is set to 1 when looking for the opening
  parenthesis to a function-like macro, and 2 when collecting the actual
  arguments up to the closing parenthesis, since these two cases need to
  be distinguished sometimes.  One such time is here: the lexer sets the
! ‘PREV_WHITE’ flag of a token if it meets a new line when ‘parsing_args’
  is set to 2.  It doesn't set it if it meets a new line when
! ‘parsing_args’ is 1, since then code like
  
       #define foo() bar
       foo
       baz
  
! would be output with an erroneous space before ‘baz’:
  
       foo
        baz
*************** would be output with an erroneous space
*** 202,214 ****
  correct in the preprocessor; there are plenty of tests in the testsuite
  for corner cases like this.
  
!    The lexer is written to treat each of '\r', '\n', '\r\n' and '\n\r'
  as a single new line indicator.  This allows it to transparently
  preprocess MS-DOS, Macintosh and Unix files without their needing to
  pass through a special filter beforehand.
  
!    We also decided to treat a backslash, either '\' or the trigraph
! '??/', separated from one of the above newline indicators by non-comment
  whitespace only, as intending to escape the newline.  It tends to be a
  typing mistake, and cannot reasonably be mistaken for anything else in
  any of the C-family grammars.  Since handling it this way is not
--- 202,214 ----
  correct in the preprocessor; there are plenty of tests in the testsuite
  for corner cases like this.
  
!    The lexer is written to treat each of ‘\r’, ‘\n’, ‘\r\n’ and ‘\n\r’
  as a single new line indicator.  This allows it to transparently
  preprocess MS-DOS, Macintosh and Unix files without their needing to
  pass through a special filter beforehand.
  
!    We also decided to treat a backslash, either ‘\’ or the trigraph
! ‘??/’, separated from one of the above newline indicators by non-comment
  whitespace only, as intending to escape the newline.  It tends to be a
  typing mistake, and cannot reasonably be mistaken for anything else in
  any of the C-family grammars.  Since handling it this way is not
*************** strictly conforming to the ISO standard,
*** 216,288 ****
  wherever it encounters it.
  
     Handling newlines like this is made simpler by doing it in one place
! only.  The function 'handle_newline' takes care of all newline
! characters, and 'skip_escaped_newlines' takes care of arbitrarily long
! sequences of escaped newlines, deferring to 'handle_newline' to handle
  the newlines themselves.
  
     The most painful aspect of lexing ISO-standard C and C++ is handling
  trigraphs and backlash-escaped newlines.  Trigraphs are processed before
  any interpretation of the meaning of a character is made, and
  unfortunately there is a trigraph representation for a backslash, so it
! is possible for the trigraph '??/' to introduce an escaped newline.
  
     Escaped newlines are tedious because theoretically they can occur
! anywhere--between the '+' and '=' of the '+=' token, within the
! characters of an identifier, and even between the '*' and '/' that
  terminates a comment.  Moreover, you cannot be sure there is just
  one--there might be an arbitrarily long sequence of them.
  
!    So, for example, the routine that lexes a number, 'parse_number',
  cannot assume that it can scan forwards until the first non-number
! character and be done with it, because this could be the '\' introducing
! an escaped newline, or the '?' introducing the trigraph sequence that
! represents the '\' of an escaped newline.  If it encounters a '?' or
! '\', it calls 'skip_escaped_newlines' to skip over any potential escaped
  newlines before checking whether the number has been finished.
  
!    Similarly code in the main body of '_cpp_lex_direct' cannot simply
! check for a '=' after a '+' character to determine whether it has a '+='
  token; it needs to be prepared for an escaped newline of some sort.
! Such cases use the function 'get_effective_char', which returns the
  first character after any intervening escaped newlines.
  
     The lexer needs to keep track of the correct column position,
! including counting tabs as specified by the '-ftabstop=' option.  This
  should be done even within C-style comments; they can appear in the
  middle of a line, and we want to report diagnostics in the correct
  position for text appearing after the end of the comment.
  
!    Some identifiers, such as '__VA_ARGS__' and poisoned identifiers, may
  be invalid and require a diagnostic.  However, if they appear in a macro
  expansion we don't want to complain with each use of the macro.  It is
  therefore best to catch them during the lexing stage, in
! 'parse_identifier'.  In both cases, whether a diagnostic is needed or
  not is dependent upon the lexer's state.  For example, we don't want to
  issue a diagnostic for re-poisoning a poisoned identifier, or for using
! '__VA_ARGS__' in the expansion of a variable-argument macro.  Therefore
! 'parse_identifier' makes use of state flags to determine whether a
  diagnostic is appropriate.  Since we change state on a per-token basis,
  and don't lex whole lines at a time, this is not a problem.
  
     Another place where state flags are used to change behavior is whilst
! lexing header names.  Normally, a '<' would be lexed as a single token.
! After a '#include' directive, though, it should be lexed as a single
! token as far as the nearest '>' character.  Note that we don't allow the
! terminators of header names to be escaped; the first '"' or '>'
  terminates the header name.
  
     Interpretation of some character sequences depends upon whether we
  are lexing C, C++ or Objective-C, and on the revision of the standard in
! force.  For example, '::' is a single token in C++, but in C it is two
! separate ':' tokens and almost certainly a syntax error.  Such cases are
! handled by '_cpp_lex_direct' based upon command-line flags stored in the
! 'cpp_options' structure.
  
     Once a token has been lexed, it leads an independent existence.  The
  spelling of numbers, identifiers and strings is copied to permanent
  storage from the original input buffer, so a token remains valid and
! correct even if its source buffer is freed with '_cpp_pop_buffer'.  The
  storage holding the spellings of such tokens remains until the client
  program calls cpp_destroy, probably at the end of the translation unit.
  
--- 216,288 ----
  wherever it encounters it.
  
     Handling newlines like this is made simpler by doing it in one place
! only.  The function ‘handle_newline’ takes care of all newline
! characters, and ‘skip_escaped_newlines’ takes care of arbitrarily long
! sequences of escaped newlines, deferring to ‘handle_newline’ to handle
  the newlines themselves.
  
     The most painful aspect of lexing ISO-standard C and C++ is handling
  trigraphs and backlash-escaped newlines.  Trigraphs are processed before
  any interpretation of the meaning of a character is made, and
  unfortunately there is a trigraph representation for a backslash, so it
! is possible for the trigraph ‘??/’ to introduce an escaped newline.
  
     Escaped newlines are tedious because theoretically they can occur
! anywhere--between the ‘+’ and ‘=’ of the ‘+=’ token, within the
! characters of an identifier, and even between the ‘*’ and ‘/’ that
  terminates a comment.  Moreover, you cannot be sure there is just
  one--there might be an arbitrarily long sequence of them.
  
!    So, for example, the routine that lexes a number, ‘parse_number’,
  cannot assume that it can scan forwards until the first non-number
! character and be done with it, because this could be the ‘\’ introducing
! an escaped newline, or the ‘?’ introducing the trigraph sequence that
! represents the ‘\’ of an escaped newline.  If it encounters a ‘?’ or
! ‘\’, it calls ‘skip_escaped_newlines’ to skip over any potential escaped
  newlines before checking whether the number has been finished.
  
!    Similarly code in the main body of ‘_cpp_lex_direct’ cannot simply
! check for a ‘=’ after a ‘+’ character to determine whether it has a ‘+=’
  token; it needs to be prepared for an escaped newline of some sort.
! Such cases use the function ‘get_effective_char’, which returns the
  first character after any intervening escaped newlines.
  
     The lexer needs to keep track of the correct column position,
! including counting tabs as specified by the ‘-ftabstop=’ option.  This
  should be done even within C-style comments; they can appear in the
  middle of a line, and we want to report diagnostics in the correct
  position for text appearing after the end of the comment.
  
!    Some identifiers, such as ‘__VA_ARGS__’ and poisoned identifiers, may
  be invalid and require a diagnostic.  However, if they appear in a macro
  expansion we don't want to complain with each use of the macro.  It is
  therefore best to catch them during the lexing stage, in
! ‘parse_identifier’.  In both cases, whether a diagnostic is needed or
  not is dependent upon the lexer's state.  For example, we don't want to
  issue a diagnostic for re-poisoning a poisoned identifier, or for using
! ‘__VA_ARGS__’ in the expansion of a variable-argument macro.  Therefore
! ‘parse_identifier’ makes use of state flags to determine whether a
  diagnostic is appropriate.  Since we change state on a per-token basis,
  and don't lex whole lines at a time, this is not a problem.
  
     Another place where state flags are used to change behavior is whilst
! lexing header names.  Normally, a ‘<’ would be lexed as a single token.
! After a ‘#include’ directive, though, it should be lexed as a single
! token as far as the nearest ‘>’ character.  Note that we don't allow the
! terminators of header names to be escaped; the first ‘"’ or ‘>’
  terminates the header name.
  
     Interpretation of some character sequences depends upon whether we
  are lexing C, C++ or Objective-C, and on the revision of the standard in
! force.  For example, ‘::’ is a single token in C++, but in C it is two
! separate ‘:’ tokens and almost certainly a syntax error.  Such cases are
! handled by ‘_cpp_lex_direct’ based upon command-line flags stored in the
! ‘cpp_options’ structure.
  
     Once a token has been lexed, it leads an independent existence.  The
  spelling of numbers, identifiers and strings is copied to permanent
  storage from the original input buffer, so a token remains valid and
! correct even if its source buffer is freed with ‘_cpp_pop_buffer’.  The
  storage holding the spellings of such tokens remains until the client
  program calls cpp_destroy, probably at the end of the translation unit.
  
*************** to cpplib itself internally.
*** 299,307 ****
  token stream.  For example, after the name of a function-like macro, it
  wants to check the next token to see if it is an opening parenthesis.
  Another example is that, after reading the first few tokens of a
! '#pragma' directive and not recognizing it as a registered pragma, it
  wants to backtrack and allow the user-defined handler for unknown
! pragmas to access the full '#pragma' token stream.  The stand-alone
  preprocessor wants to be able to test the current token with the
  previous one to see if a space needs to be inserted to preserve their
  separate tokenization upon re-lexing (paste avoidance), so it needs to
--- 299,307 ----
  token stream.  For example, after the name of a function-like macro, it
  wants to check the next token to see if it is an opening parenthesis.
  Another example is that, after reading the first few tokens of a
! ‘#pragma’ directive and not recognizing it as a registered pragma, it
  wants to backtrack and allow the user-defined handler for unknown
! pragmas to access the full ‘#pragma’ token stream.  The stand-alone
  preprocessor wants to be able to test the current token with the
  previous one to see if a space needs to be inserted to preserve their
  separate tokenization upon re-lexing (paste avoidance), so it needs to
*************** to jump back to a prior position in that
*** 312,321 ****
  
     The rule I chose, which is fairly natural, is to arrange that the
  preprocessor lex all tokens on a line consecutively into a token buffer,
! which I call a "token run", and when meeting an unescaped new line
  (newlines within comments do not count either), to start lexing back at
  the beginning of the run.  Note that we do _not_ lex a line of tokens at
! once; if we did that 'parse_identifier' would not have state flags
  available to warn about invalid identifiers (*note Invalid
  identifiers::).
  
--- 312,321 ----
  
     The rule I chose, which is fairly natural, is to arrange that the
  preprocessor lex all tokens on a line consecutively into a token buffer,
! which I call a “token run”, and when meeting an unescaped new line
  (newlines within comments do not count either), to start lexing back at
  the beginning of the run.  Note that we do _not_ lex a line of tokens at
! once; if we did that ‘parse_identifier’ would not have state flags
  available to warn about invalid identifiers (*note Invalid
  identifiers::).
  
*************** identifiers::).
*** 323,329 ****
  line is valid, but since each logical line overwrites the tokens of the
  previous line, tokens from prior lines are unavailable.  In particular,
  since a directive only occupies a single logical line, this means that
! the directive handlers like the '#pragma' handler can jump around in the
  directive's tokens if necessary.
  
     Two issues remain: what about tokens that arise from macro
--- 323,329 ----
  line is valid, but since each logical line overwrites the tokens of the
  previous line, tokens from prior lines are unavailable.  In particular,
  since a directive only occupies a single logical line, this means that
! the directive handlers like the ‘#pragma’ handler can jump around in the
  directive's tokens if necessary.
  
     Two issues remain: what about tokens that arise from macro
*************** line, we cannot reallocate the run.  Ins
*** 336,347 ****
  by chaining a new token run on to the end of the existing one.
  
     The tokens forming a macro's replacement list are collected by the
! '#define' handler, and placed in storage that is only freed by
! 'cpp_destroy'.  So if a macro is expanded in the line of tokens, the
  pointers to the tokens of its expansion that are returned will always
  remain valid.  However, macros are a little trickier than that, since
  they give rise to three sources of fresh tokens.  They are the built-in
! macros like '__LINE__', and the '#' and '##' operators for stringizing
  and token pasting.  I handled this by allocating space for these tokens
  from the lexer's token run chain.  This means they automatically receive
  the same lifetime guarantees as lexed tokens, and we don't need to
--- 336,347 ----
  by chaining a new token run on to the end of the existing one.
  
     The tokens forming a macro's replacement list are collected by the
! ‘#define’ handler, and placed in storage that is only freed by
! ‘cpp_destroy’.  So if a macro is expanded in the line of tokens, the
  pointers to the tokens of its expansion that are returned will always
  remain valid.  However, macros are a little trickier than that, since
  they give rise to three sources of fresh tokens.  They are the built-in
! macros like ‘__LINE__’, and the ‘#’ and ‘##’ operators for stringizing
  and token pasting.  I handled this by allocating space for these tokens
  from the lexer's token run chain.  This means they automatically receive
  the same lifetime guarantees as lexed tokens, and we don't need to
*************** management issues, but not all.  The ope
*** 352,358 ****
  function-like macro name might lie on a different line, and the front
  ends definitely want the ability to look ahead past the end of the
  current line.  So cpplib only moves back to the start of the token run
! at the end of a line if the variable 'keep_tokens' is zero.
  Line-buffering is quite natural for the preprocessor, and as a result
  the only time cpplib needs to increment this variable is whilst looking
  for the opening parenthesis to, and reading the arguments of, a
--- 352,358 ----
  function-like macro name might lie on a different line, and the front
  ends definitely want the ability to look ahead past the end of the
  current line.  So cpplib only moves back to the start of the token run
! at the end of a line if the variable ‘keep_tokens’ is zero.
  Line-buffering is quite natural for the preprocessor, and as a result
  the only time cpplib needs to increment this variable is whilst looking
  for the opening parenthesis to, and reading the arguments of, a
*************** function-like macro.  In the near future
*** 360,371 ****
  to increment and decrement this variable, so that clients can share full
  control over the lifetime of token pointers too.
  
!    The routine '_cpp_lex_token' handles moving to new token runs,
! calling '_cpp_lex_direct' to lex new tokens, or returning
  previously-lexed tokens if we stepped back in the token stream.  It also
! checks each token for the 'BOL' flag, which might indicate a directive
  that needs to be handled, or require a start-of-line call-back to be
! made.  '_cpp_lex_token' also handles skipping over tokens in failed
  conditional blocks, and invalidates the control macro of the
  multiple-include optimization if a token was successfully lexed outside
  a directive.  In other words, its callers do not need to concern
--- 360,371 ----
  to increment and decrement this variable, so that clients can share full
  control over the lifetime of token pointers too.
  
!    The routine ‘_cpp_lex_token’ handles moving to new token runs,
! calling ‘_cpp_lex_direct’ to lex new tokens, or returning
  previously-lexed tokens if we stepped back in the token stream.  It also
! checks each token for the ‘BOL’ flag, which might indicate a directive
  that needs to be handled, or require a start-of-line call-back to be
! made.  ‘_cpp_lex_token’ also handles skipping over tokens in failed
  conditional blocks, and invalidates the control macro of the
  multiple-include optimization if a token was successfully lexed outside
  a directive.  In other words, its callers do not need to concern
*************** Hash Nodes
*** 379,397 ****
  
  When cpplib encounters an "identifier", it generates a hash code for it
  and stores it in the hash table.  By "identifier" we mean tokens with
! type 'CPP_NAME'; this includes identifiers in the usual C sense, as well
  as keywords, directive names, macro names and so on.  For example, all
! of 'pragma', 'int', 'foo' and '__GNUC__' are identifiers and hashed when
  lexed.
  
     Each node in the hash table contain various information about the
  identifier it represents.  For example, its length and type.  At any one
  time, each identifier falls into exactly one of three categories:
  
!    * Macros
  
       These have been declared to be macros, either on the command line
!      or with '#define'.  A few, such as '__TIME__' are built-ins entered
       in the hash table during initialization.  The hash node for a
       normal macro points to a structure with more information about the
       macro, such as whether it is function-like, how many arguments it
--- 379,397 ----
  
  When cpplib encounters an "identifier", it generates a hash code for it
  and stores it in the hash table.  By "identifier" we mean tokens with
! type ‘CPP_NAME’; this includes identifiers in the usual C sense, as well
  as keywords, directive names, macro names and so on.  For example, all
! of ‘pragma’, ‘int’, ‘foo’ and ‘__GNUC__’ are identifiers and hashed when
  lexed.
  
     Each node in the hash table contain various information about the
  identifier it represents.  For example, its length and type.  At any one
  time, each identifier falls into exactly one of three categories:
  
!    • Macros
  
       These have been declared to be macros, either on the command line
!      or with ‘#define’.  A few, such as ‘__TIME__’ are built-ins entered
       in the hash table during initialization.  The hash node for a
       normal macro points to a structure with more information about the
       macro, such as whether it is function-like, how many arguments it
*************** time, each identifier falls into exactly
*** 399,435 ****
       and instead contain an enum indicating which of the various
       built-in macros it is.
  
!    * Assertions
  
       Assertions are in a separate namespace to macros.  To enforce this,
!      cpp actually prepends a '#' character before hashing and entering
       it in the hash table.  An assertion's node points to a chain of
       answers to that assertion.
  
!    * Void
  
       Everything else falls into this category--an identifier that is not
       currently a macro, or a macro that has since been undefined with
!      '#undef'.
  
       When preprocessing C++, this category also includes the named
!      operators, such as 'xor'.  In expressions these behave like the
       operators they represent, but in contexts where the spelling of a
       token matters they are spelt differently.  This spelling
       distinction is relevant when they are operands of the stringizing
!      and pasting macro operators '#' and '##'.  Named operator hash
       nodes are flagged, both to catch the spelling distinction and to
       prevent them from being defined as macros.
  
     The same identifiers share the same hash node.  Since each identifier
  token, after lexing, contains a pointer to its hash node, this is used
  to provide rapid lookup of various information.  For example, when
! parsing a '#define' statement, CPP flags each argument's identifier hash
  node with the index of that argument.  This makes duplicated argument
  checking an O(1) operation for each argument.  Similarly, for each
  identifier in the macro's expansion, lookup to see if it is an argument,
  and which argument it is, is also an O(1) operation.  Further, each
! directive name, such as 'endif', has an associated directive enum stored
  in its hash node, so that directive lookup is also O(1).
  
  
--- 399,435 ----
       and instead contain an enum indicating which of the various
       built-in macros it is.
  
!    • Assertions
  
       Assertions are in a separate namespace to macros.  To enforce this,
!      cpp actually prepends a ‘#’ character before hashing and entering
       it in the hash table.  An assertion's node points to a chain of
       answers to that assertion.
  
!    • Void
  
       Everything else falls into this category--an identifier that is not
       currently a macro, or a macro that has since been undefined with
!      ‘#undef’.
  
       When preprocessing C++, this category also includes the named
!      operators, such as ‘xor’.  In expressions these behave like the
       operators they represent, but in contexts where the spelling of a
       token matters they are spelt differently.  This spelling
       distinction is relevant when they are operands of the stringizing
!      and pasting macro operators ‘#’ and ‘##’.  Named operator hash
       nodes are flagged, both to catch the spelling distinction and to
       prevent them from being defined as macros.
  
     The same identifiers share the same hash node.  Since each identifier
  token, after lexing, contains a pointer to its hash node, this is used
  to provide rapid lookup of various information.  For example, when
! parsing a ‘#define’ statement, CPP flags each argument's identifier hash
  node with the index of that argument.  This makes duplicated argument
  checking an O(1) operation for each argument.  Similarly, for each
  identifier in the macro's expansion, lookup to see if it is an argument,
  and which argument it is, is also an O(1) operation.  Further, each
! directive name, such as ‘endif’, has an associated directive enum stored
  in its hash node, so that directive lookup is also O(1).
  
  
*************** to get the replacement list of a macro.
*** 461,487 ****
  its parameters, in the form of an ordered list of pointers to the hash
  table entry of each parameter's identifier.  Further, in the macro's
  stored expansion each occurrence of a parameter is replaced with a
! special token of type 'CPP_MACRO_ARG'.  Each such token holds the index
  of the parameter it represents in the parameter list, which allows rapid
  replacement of parameters with their arguments during expansion.
  Despite this optimization it is still necessary to store the original
! parameters to the macro, both for dumping with e.g., '-dD', and to warn
  about non-trivial macro redefinitions when the parameter names have
  changed.
  
  Macro expansion overview
  ========================
  
! The preprocessor maintains a "context stack", implemented as a linked
! list of 'cpp_context' structures, which together represent the macro
! expansion state at any one time.  The 'struct cpp_reader' member
! variable 'context' points to the current top of this stack.  The top
  normally holds the unexpanded replacement list of the innermost macro
  under expansion, except when cpplib is about to pre-expand an argument,
  in which case it holds that argument's unexpanded tokens.
  
!    When there are no macros under expansion, cpplib is in "base
! context".  All contexts other than the base context contain a contiguous
  list of tokens delimited by a starting and ending token.  When not in
  base context, cpplib obtains the next token from the list of the top
  context.  If there are no tokens left in the list, it pops that context
--- 461,487 ----
  its parameters, in the form of an ordered list of pointers to the hash
  table entry of each parameter's identifier.  Further, in the macro's
  stored expansion each occurrence of a parameter is replaced with a
! special token of type ‘CPP_MACRO_ARG’.  Each such token holds the index
  of the parameter it represents in the parameter list, which allows rapid
  replacement of parameters with their arguments during expansion.
  Despite this optimization it is still necessary to store the original
! parameters to the macro, both for dumping with e.g., ‘-dD’, and to warn
  about non-trivial macro redefinitions when the parameter names have
  changed.
  
  Macro expansion overview
  ========================
  
! The preprocessor maintains a “context stack”, implemented as a linked
! list of ‘cpp_context’ structures, which together represent the macro
! expansion state at any one time.  The ‘struct cpp_reader’ member
! variable ‘context’ points to the current top of this stack.  The top
  normally holds the unexpanded replacement list of the innermost macro
  under expansion, except when cpplib is about to pre-expand an argument,
  in which case it holds that argument's unexpanded tokens.
  
!    When there are no macros under expansion, cpplib is in “base
! context”.  All contexts other than the base context contain a contiguous
  list of tokens delimited by a starting and ending token.  When not in
  base context, cpplib obtains the next token from the list of the top
  context.  If there are no tokens left in the list, it pops that context
*************** reads tokens directly from the lexer.
*** 491,514 ****
  
     If it encounters an identifier that is both a macro and enabled for
  expansion, cpplib prepares to push a new context for that macro on the
! stack by calling the routine 'enter_macro_context'.  When this routine
  returns, the new context will contain the unexpanded tokens of the
  replacement list of that macro.  In the case of function-like macros,
! 'enter_macro_context' also replaces any parameters in the replacement
! list, stored as 'CPP_MACRO_ARG' tokens, with the appropriate macro
  argument.  If the standard requires that the parameter be replaced with
  its expanded argument, the argument will have been fully macro expanded
  first.
  
!    'enter_macro_context' also handles special macros like '__LINE__'.
  Although these macros expand to a single token which cannot contain any
  further macros, for reasons of token spacing (*note Token Spacing::) and
  simplicity of implementation, cpplib handles these special macros by
  pushing a context containing just that one token.
  
!    The final thing that 'enter_macro_context' does before returning is
  to mark the macro disabled for expansion (except for special macros like
! '__TIME__').  The macro is re-enabled when its context is later popped
  from the context stack, as described above.  This strict ordering
  ensures that a macro is disabled whilst its expansion is being scanned,
  but that it is _not_ disabled whilst any arguments to it are being
--- 491,514 ----
  
     If it encounters an identifier that is both a macro and enabled for
  expansion, cpplib prepares to push a new context for that macro on the
! stack by calling the routine ‘enter_macro_context’.  When this routine
  returns, the new context will contain the unexpanded tokens of the
  replacement list of that macro.  In the case of function-like macros,
! ‘enter_macro_context’ also replaces any parameters in the replacement
! list, stored as ‘CPP_MACRO_ARG’ tokens, with the appropriate macro
  argument.  If the standard requires that the parameter be replaced with
  its expanded argument, the argument will have been fully macro expanded
  first.
  
!    ‘enter_macro_context’ also handles special macros like ‘__LINE__’.
  Although these macros expand to a single token which cannot contain any
  further macros, for reasons of token spacing (*note Token Spacing::) and
  simplicity of implementation, cpplib handles these special macros by
  pushing a context containing just that one token.
  
!    The final thing that ‘enter_macro_context’ does before returning is
  to mark the macro disabled for expansion (except for special macros like
! ‘__TIME__’).  The macro is re-enabled when its context is later popped
  from the context stack, as described above.  This strict ordering
  ensures that a macro is disabled whilst its expansion is being scanned,
  but that it is _not_ disabled whilst any arguments to it are being
*************** which illustrates many of the points abo
*** 547,567 ****
       #define foo(x) bar x
       foo(foo) (2)
  
! which fully expands to 'bar foo (2)'.  During pre-expansion of the
! argument, 'foo' does not expand even though the macro is enabled, since
  it has no following parenthesis [pre-expansion of an argument only uses
  tokens from that argument; it cannot take tokens from whatever follows
! the macro invocation].  This still leaves the argument token 'foo'
  eligible for future expansion.  Then, when re-scanning after argument
! replacement, the token 'foo' is rejected for expansion, and marked
  ineligible for future expansion, since the macro is now disabled.  It is
! disabled because the replacement list 'bar foo' of the macro is still on
  the context stack.
  
     If instead the algorithm looked for an opening parenthesis first and
  then tested whether the macro were disabled it would be subtly wrong.
! In the example above, the replacement list of 'foo' would be popped in
! the process of finding the parenthesis, re-enabling 'foo' and expanding
  it a second time.
  
  Looking for a function-like macro's opening parenthesis
--- 547,567 ----
       #define foo(x) bar x
       foo(foo) (2)
  
! which fully expands to ‘bar foo (2)’.  During pre-expansion of the
! argument, ‘foo’ does not expand even though the macro is enabled, since
  it has no following parenthesis [pre-expansion of an argument only uses
  tokens from that argument; it cannot take tokens from whatever follows
! the macro invocation].  This still leaves the argument token ‘foo’
  eligible for future expansion.  Then, when re-scanning after argument
! replacement, the token ‘foo’ is rejected for expansion, and marked
  ineligible for future expansion, since the macro is now disabled.  It is
! disabled because the replacement list ‘bar foo’ of the macro is still on
  the context stack.
  
     If instead the algorithm looked for an opening parenthesis first and
  then tested whether the macro were disabled it would be subtly wrong.
! In the example above, the replacement list of ‘foo’ would be popped in
! the process of finding the parenthesis, re-enabling ‘foo’ and expanding
  it a second time.
  
  Looking for a function-like macro's opening parenthesis
*************** padding tokens.
*** 579,585 ****
  permitted by cpplib, because in general it might involve issues like
  restoring popped contexts onto the context stack, which are too hard.
  Instead, searching for the parenthesis is handled by a special function,
! 'funlike_invocation_p', which remembers padding information as it reads
  tokens.  If the next real token is not an opening parenthesis, it backs
  up that one token, and then pushes an extra context just containing the
  padding information if necessary.
--- 579,585 ----
  permitted by cpplib, because in general it might involve issues like
  restoring popped contexts onto the context stack, which are too hard.
  Instead, searching for the parenthesis is handled by a special function,
! ‘funlike_invocation_p’, which remembers padding information as it reads
  tokens.  If the next real token is not an opening parenthesis, it backs
  up that one token, and then pushes an extra context just containing the
  padding information if necessary.
*************** Marking tokens ineligible for future exp
*** 590,601 ****
  As discussed above, cpplib needs a way of marking tokens as
  unexpandable.  Since the tokens cpplib handles are read-only once they
  have been lexed, it instead makes a copy of the token and adds the flag
! 'NO_EXPAND' to the copy.
  
     For efficiency and to simplify memory management by avoiding having
  to remember to free these tokens, they are allocated as temporary tokens
  from the lexer's current token run (*note Lexing a line::) using the
! function '_cpp_temp_token'.  The tokens are then re-used once the
  current line of tokens has been read in.
  
     This might sound unsafe.  However, tokens runs are not re-used at the
--- 590,601 ----
  As discussed above, cpplib needs a way of marking tokens as
  unexpandable.  Since the tokens cpplib handles are read-only once they
  have been lexed, it instead makes a copy of the token and adds the flag
! ‘NO_EXPAND’ to the copy.
  
     For efficiency and to simplify memory management by avoiding having
  to remember to free these tokens, they are allocated as temporary tokens
  from the lexer's current token run (*note Lexing a line::) using the
! function ‘_cpp_temp_token’.  The tokens are then re-used once the
  current line of tokens has been read in.
  
     This might sound unsafe.  However, tokens runs are not re-used at the
*************** substitution.  For example:
*** 620,628 ****
       #define EMPTY
       #define f(x) =x=
       +PLUS -EMPTY- PLUS+ f(=)
!              ==> + + - - + + = = =
       _not_
!              ==> ++ -- ++ ===
  
     One solution would be to simply insert a space between all adjacent
  tokens.  However, we would like to keep space insertion to a minimum,
--- 620,628 ----
       #define EMPTY
       #define f(x) =x=
       +PLUS -EMPTY- PLUS+ f(=)
!              ↦ + + - - + + = = =
       _not_
!              ↦ ++ -- ++ ===
  
     One solution would be to simply insert a space between all adjacent
  tokens.  However, we would like to keep space insertion to a minimum,
*************** still try to abuse the preprocessor for
*** 631,646 ****
  Makefiles.
  
     For now, just notice that when tokens are added (or removed, as shown
! by the 'EMPTY' example) from the original lexed token stream, we need to
! check for accidental token pasting.  We call this "paste avoidance".
  Token addition and removal can only occur because of macro expansion,
  but accidental pasting can occur in many places: both before and after
  each macro replacement, each argument replacement, and additionally each
! token created by the '#' and '##' operators.
  
     Look at how the preprocessor gets whitespace output correct normally.
! The 'cpp_token' structure contains a flags byte, and one of those flags
! is 'PREV_WHITE'.  This is flagged by the lexer, and indicates that the
  token was preceded by whitespace of some form other than a new line.
  The stand-alone preprocessor can use this flag to decide whether to
  insert a space between tokens in the output.
--- 631,646 ----
  Makefiles.
  
     For now, just notice that when tokens are added (or removed, as shown
! by the ‘EMPTY’ example) from the original lexed token stream, we need to
! check for accidental token pasting.  We call this “paste avoidance”.
  Token addition and removal can only occur because of macro expansion,
  but accidental pasting can occur in many places: both before and after
  each macro replacement, each argument replacement, and additionally each
! token created by the ‘#’ and ‘##’ operators.
  
     Look at how the preprocessor gets whitespace output correct normally.
! The ‘cpp_token’ structure contains a flags byte, and one of those flags
! is ‘PREV_WHITE’.  This is flagged by the lexer, and indicates that the
  token was preceded by whitespace of some form other than a new line.
  The stand-alone preprocessor can use this flag to decide whether to
  insert a space between tokens in the output.
*************** insert a space between tokens in the out
*** 649,675 ****
  
       #define add(x, y, z) x + y +z;
       sum = add (1,2, 3);
!              ==> sum = 1 + 2 +3;
  
!    The interesting thing here is that the tokens '1' and '2' are output
! with a preceding space, and '3' is output without a preceding space, but
  when lexed none of these tokens had that property.  Careful
! consideration reveals that '1' gets its preceding whitespace from the
! space preceding 'add' in the macro invocation, _not_ replacement list.
! '2' gets its whitespace from the space preceding the parameter 'y' in
! the macro replacement list, and '3' has no preceding space because
! parameter 'z' has none in the replacement list.
  
     Once lexed, tokens are effectively fixed and cannot be altered, since
  pointers to them might be held in many places, in particular by
  in-progress macro expansions.  So instead of modifying the two tokens
! above, the preprocessor inserts a special token, which I call a "padding
! token", into the token stream to indicate that spacing of the subsequent
  token is special.  The preprocessor inserts padding tokens in front of
  every macro expansion and expanded macro argument.  These point to a
! "source token" from which the subsequent real token should inherit its
! spacing.  In the above example, the source tokens are 'add' in the macro
! invocation, and 'y' and 'z' in the macro replacement list, respectively.
  
     It is quite easy to get multiple padding tokens in a row, for example
  if a macro's first replacement token expands straight into another
--- 649,675 ----
  
       #define add(x, y, z) x + y +z;
       sum = add (1,2, 3);
!              ↦ sum = 1 + 2 +3;
  
!    The interesting thing here is that the tokens ‘1’ and ‘2’ are output
! with a preceding space, and ‘3’ is output without a preceding space, but
  when lexed none of these tokens had that property.  Careful
! consideration reveals that ‘1’ gets its preceding whitespace from the
! space preceding ‘add’ in the macro invocation, _not_ replacement list.
! ‘2’ gets its whitespace from the space preceding the parameter ‘y’ in
! the macro replacement list, and ‘3’ has no preceding space because
! parameter ‘z’ has none in the replacement list.
  
     Once lexed, tokens are effectively fixed and cannot be altered, since
  pointers to them might be held in many places, in particular by
  in-progress macro expansions.  So instead of modifying the two tokens
! above, the preprocessor inserts a special token, which I call a “padding
! token”, into the token stream to indicate that spacing of the subsequent
  token is special.  The preprocessor inserts padding tokens in front of
  every macro expansion and expanded macro argument.  These point to a
! “source token” from which the subsequent real token should inherit its
! spacing.  In the above example, the source tokens are ‘add’ in the macro
! invocation, and ‘y’ and ‘z’ in the macro replacement list, respectively.
  
     It is quite easy to get multiple padding tokens in a row, for example
  if a macro's first replacement token expands straight into another
*************** macro.
*** 678,687 ****
       #define foo bar
       #define bar baz
       [foo]
!              ==> [baz]
  
!    Here, two padding tokens are generated with sources the 'foo' token
! between the brackets, and the 'bar' token from foo's replacement list,
  respectively.  Clearly the first padding token is the one to use, so the
  output code should contain a rule that the first padding token in a
  sequence is the one that matters.
--- 678,687 ----
       #define foo bar
       #define bar baz
       [foo]
!              ↦ [baz]
  
!    Here, two padding tokens are generated with sources the ‘foo’ token
! between the brackets, and the ‘bar’ token from foo's replacement list,
  respectively.  Clearly the first padding token is the one to use, so the
  output code should contain a rule that the first padding token in a
  sequence is the one that matters.
*************** slightly:
*** 693,707 ****
       #define bar EMPTY baz
       #define EMPTY
       [foo] EMPTY;
!              ==> [ baz] ;
  
!    As shown, now there should be a space before 'baz' and the semicolon
  in the output.
  
!    The rules we decided above fail for 'baz': we generate three padding
! tokens, one per macro invocation, before the token 'baz'.  We would then
  have it take its spacing from the first of these, which carries source
! token 'foo' with no leading space.
  
     It is vital that cpplib get spacing correct in these examples since
  any of these macro expansions could be stringized, where spacing
--- 693,707 ----
       #define bar EMPTY baz
       #define EMPTY
       [foo] EMPTY;
!              ↦ [ baz] ;
  
!    As shown, now there should be a space before ‘baz’ and the semicolon
  in the output.
  
!    The rules we decided above fail for ‘baz’: we generate three padding
! tokens, one per macro invocation, before the token ‘baz’.  We would then
  have it take its spacing from the first of these, which carries source
! token ‘foo’ with no leading space.
  
     It is vital that cpplib get spacing correct in these examples since
  any of these macro expansions could be stringized, where spacing
*************** matters.
*** 709,719 ****
  
     So, this demonstrates that not just entering macro and argument
  expansions, but leaving them requires special handling too.  I made
! cpplib insert a padding token with a 'NULL' source token when leaving
  macro expansions, as well as after each replaced argument in a macro's
  replacement list.  It also inserts appropriate padding tokens on either
! side of tokens created by the '#' and '##' operators.  I expanded the
! rule so that, if we see a padding token with a 'NULL' source token,
  _and_ that source token has no leading space, then we behave as if we
  have seen no padding tokens at all.  A quick check shows this rule will
  then get the above example correct as well.
--- 709,719 ----
  
     So, this demonstrates that not just entering macro and argument
  expansions, but leaving them requires special handling too.  I made
! cpplib insert a padding token with a ‘NULL’ source token when leaving
  macro expansions, as well as after each replaced argument in a macro's
  replacement list.  It also inserts appropriate padding tokens on either
! side of tokens created by the ‘#’ and ‘##’ operators.  I expanded the
! rule so that, if we see a padding token with a ‘NULL’ source token,
  _and_ that source token has no leading space, then we behave as if we
  have seen no padding tokens at all.  A quick check shows this rule will
  then get the above example correct as well.
*************** implementation of paste avoidance easy:
*** 725,731 ****
  preprocessor is fixing up spacing because of padding tokens, and it
  turns out that no space is needed, it has to take the extra step to
  check that a space is not needed after all to avoid an accidental paste.
! The function 'cpp_avoid_paste' advises whether a space is required
  between two consecutive tokens.  To avoid excessive spacing, it tries
  hard to only require a space if one is likely to be necessary, but for
  reasons of efficiency it is slightly conservative and might recommend a
--- 725,731 ----
  preprocessor is fixing up spacing because of padding tokens, and it
  turns out that no space is needed, it has to take the extra step to
  check that a space is not needed after all to avoid an accidental paste.
! The function ‘cpp_avoid_paste’ advises whether a space is required
  between two consecutive tokens.  To avoid excessive spacing, it tries
  hard to only require a space if one is likely to be necessary, but for
  reasons of efficiency it is slightly conservative and might recommend a
*************** Just which line number anyway?
*** 743,771 ****
  There are three reasonable requirements a cpplib client might have for
  the line number of a token passed to it:
  
!    * The source line it was lexed on.
!    * The line it is output on.  This can be different to the line it was
       lexed on if, for example, there are intervening escaped newlines or
       C-style comments.  For example:
  
            foo /* A long
            comment */ bar \
            baz
!           =>
            foo bar baz
  
!    * If the token results from a macro expansion, the line of the macro
       name, or possibly the line of the closing parenthesis in the case
       of function-like macro expansion.
  
!    The 'cpp_token' structure contains 'line' and 'col' members.  The
  lexer fills these in with the line and column of the first character of
  the token.  Consequently, but maybe unexpectedly, a token from the
  replacement list of a macro expansion carries the location of the token
! within the '#define' directive, because cpplib expands a macro by
  returning pointers to the tokens in its replacement list.  The current
  implementation of cpplib assigns tokens created from built-in macros and
! the '#' and '##' operators the location of the most recently lexed
  token.  This is a because they are allocated from the lexer's token
  runs, and because of the way the diagnostic routines infer the
  appropriate location to report.
--- 743,771 ----
  There are three reasonable requirements a cpplib client might have for
  the line number of a token passed to it:
  
!    • The source line it was lexed on.
!    • The line it is output on.  This can be different to the line it was
       lexed on if, for example, there are intervening escaped newlines or
       C-style comments.  For example:
  
            foo /* A long
            comment */ bar \
            baz
!           ⇒
            foo bar baz
  
!    • If the token results from a macro expansion, the line of the macro
       name, or possibly the line of the closing parenthesis in the case
       of function-like macro expansion.
  
!    The ‘cpp_token’ structure contains ‘line’ and ‘col’ members.  The
  lexer fills these in with the line and column of the first character of
  the token.  Consequently, but maybe unexpectedly, a token from the
  replacement list of a macro expansion carries the location of the token
! within the ‘#define’ directive, because cpplib expands a macro by
  returning pointers to the tokens in its replacement list.  The current
  implementation of cpplib assigns tokens created from built-in macros and
! the ‘#’ and ‘##’ operators the location of the most recently lexed
  token.  This is a because they are allocated from the lexer's token
  runs, and because of the way the diagnostic routines infer the
  appropriate location to report.
*************** line other than the first.
*** 787,793 ****
  
     To solve these issues, cpplib provides a callback that is generated
  whenever it lexes a preprocessing token that starts a new logical line
! other than a directive.  It passes this token (which may be a 'CPP_EOF'
  token indicating the end of the translation unit) to the callback
  routine, which can then use the line and column of this token to produce
  correct output.
--- 787,793 ----
  
     To solve these issues, cpplib provides a callback that is generated
  whenever it lexes a preprocessing token that starts a new logical line
! other than a directive.  It passes this token (which may be a ‘CPP_EOF’
  token indicating the end of the translation unit) to the callback
  routine, which can then use the line and column of this token to produce
  correct output.
*************** starts counting from one.
*** 810,821 ****
  translation unit.  With some simple infrastructure, it is straight
  forward to map from this to the original source file and line number
  pair, saving space whenever line number information needs to be saved.
! The code the implements this mapping lies in the files 'line-map.cc' and
! 'line-map.h'.
  
     Command-line macros and assertions are implemented by pushing a
! buffer containing the right hand side of an equivalent '#define' or
! '#assert' directive.  Some built-in macros are handled similarly.  Since
  these are all processed before the first line of the main input file, it
  will typically have an assigned line closer to twenty than to one.
  
--- 810,821 ----
  translation unit.  With some simple infrastructure, it is straight
  forward to map from this to the original source file and line number
  pair, saving space whenever line number information needs to be saved.
! The code the implements this mapping lies in the files ‘line-map.cc’ and
! ‘line-map.h’.
  
     Command-line macros and assertions are implemented by pushing a
! buffer containing the right hand side of an equivalent ‘#define’ or
! ‘#assert’ directive.  Some built-in macros are handled similarly.  Since
  these are all processed before the first line of the main input file, it
  will typically have an assigned line closer to twenty than to one.
  
*************** Header files are often of the form
*** 834,843 ****
  
  to prevent the compiler from processing them more than once.  The
  preprocessor notices such header files, so that if the header file
! appears in a subsequent '#include' directive and 'FOO' is defined, then
  it is ignored and it doesn't preprocess or even re-open the file a
! second time.  This is referred to as the "multiple include
! optimization".
  
     Under what circumstances is such an optimization valid?  If the file
  were included a second time, it can only be optimized away if that
--- 834,843 ----
  
  to prevent the compiler from processing them more than once.  The
  preprocessor notices such header files, so that if the header file
! appears in a subsequent ‘#include’ directive and ‘FOO’ is defined, then
  it is ignored and it doesn't preprocess or even re-open the file a
! second time.  This is referred to as the “multiple include
! optimization”.
  
     Under what circumstances is such an optimization valid?  If the file
  were included a second time, it can only be optimized away if that
*************** inclusion would result in no tokens to r
*** 845,856 ****
  directives to process.  Therefore the current implementation imposes
  requirements and makes some allowances as follows:
  
!   1. There must be no tokens outside the controlling '#if'-'#endif'
       pair, but whitespace and comments are permitted.
  
    2. There must be no directives outside the controlling directive pair,
!      but the "null directive" (a line containing nothing other than a
!      single '#' and possibly whitespace) is permitted.
  
    3. The opening directive must be of the form
  
--- 845,856 ----
  directives to process.  Therefore the current implementation imposes
  requirements and makes some allowances as follows:
  
!   1. There must be no tokens outside the controlling ‘#if’-‘#endif’
       pair, but whitespace and comments are permitted.
  
    2. There must be no directives outside the controlling directive pair,
!      but the “null directive” (a line containing nothing other than a
!      single ‘#’ and possibly whitespace) is permitted.
  
    3. The opening directive must be of the form
  
*************** requirements and makes some allowances a
*** 860,927 ****
  
            #if !defined FOO     [equivalently, #if !defined(FOO)]
  
!   4. In the second form above, the tokens forming the '#if' expression
       must have come directly from the source file--no macro expansion
       must have been involved.  This is because macro definitions can
       change, and tracking whether or not a relevant change has been made
       is not worth the implementation cost.
  
!   5. There can be no '#else' or '#elif' directives at the outer
       conditional block level, because they would probably contain
       something of interest to a subsequent pass.
  
     First, when pushing a new file on the buffer stack,
! '_stack_include_file' sets the controlling macro 'mi_cmacro' to 'NULL',
! and sets 'mi_valid' to 'true'.  This indicates that the preprocessor has
  not yet encountered anything that would invalidate the multiple-include
  optimization.  As described in the next few paragraphs, these two
  variables having these values effectively indicates top-of-file.
  
     When about to return a token that is not part of a directive,
! '_cpp_lex_token' sets 'mi_valid' to 'false'.  This enforces the
  constraint that tokens outside the controlling conditional block
  invalidate the optimization.
  
!    The 'do_if', when appropriate, and 'do_ifndef' directive handlers
! pass the controlling macro to the function 'push_conditional'.  cpplib
  maintains a stack of nested conditional blocks, and after processing
! every opening conditional this function pushes an 'if_stack' structure
  onto the stack.  In this structure it records the controlling macro for
  the block, provided there is one and we're at top-of-file (as described
! above).  If an '#elif' or '#else' directive is encountered, the
! controlling macro for that block is cleared to 'NULL'.  Otherwise, it
! survives until the '#endif' closing the block, upon which 'do_endif'
! sets 'mi_valid' to true and stores the controlling macro in 'mi_cmacro'.
  
!    '_cpp_handle_directive' clears 'mi_valid' when processing any
  directive other than an opening conditional and the null directive.
  With this, and requiring top-of-file to record a controlling macro, and
! no '#else' or '#elif' for it to survive and be copied to 'mi_cmacro' by
! 'do_endif', we have enforced the absence of directives outside the main
  conditional block for the optimization to be on.
  
!    Note that whilst we are inside the conditional block, 'mi_valid' is
! likely to be reset to 'false', but this does not matter since the
! closing '#endif' restores it to 'true' if appropriate.
  
!    Finally, since '_cpp_lex_direct' pops the file off the buffer stack
! at 'EOF' without returning a token, if the '#endif' directive was not
! followed by any tokens, 'mi_valid' is 'true' and '_cpp_pop_file_buffer'
  remembers the controlling macro associated with the file.  Subsequent
! calls to 'stack_include_file' result in no buffer being pushed if the
  controlling macro is defined, effecting the optimization.
  
     A quick word on how we handle the
  
       #if !defined FOO
  
! case.  '_cpp_parse_expr' and 'parse_defined' take steps to see whether
! the three stages '!', 'defined-expression' and 'end-of-directive' occur
! in order in a '#if' expression.  If so, they return the guard macro to
! 'do_if' in the variable 'mi_ind_cmacro', and otherwise set it to 'NULL'.
! 'enter_macro_context' sets 'mi_valid' to false, so if a macro was
  expanded whilst parsing any part of the expression, then the top-of-file
! test in 'push_conditional' fails and the optimization is turned off.
  
  
  File: cppinternals.info,  Node: Files,  Next: Concept Index,  Prev: Guard Macros,  Up: Top
--- 860,927 ----
  
            #if !defined FOO     [equivalently, #if !defined(FOO)]
  
!   4. In the second form above, the tokens forming the ‘#if’ expression
       must have come directly from the source file--no macro expansion
       must have been involved.  This is because macro definitions can
       change, and tracking whether or not a relevant change has been made
       is not worth the implementation cost.
  
!   5. There can be no ‘#else’ or ‘#elif’ directives at the outer
       conditional block level, because they would probably contain
       something of interest to a subsequent pass.
  
     First, when pushing a new file on the buffer stack,
! ‘_stack_include_file’ sets the controlling macro ‘mi_cmacro’ to ‘NULL’,
! and sets ‘mi_valid’ to ‘true’.  This indicates that the preprocessor has
  not yet encountered anything that would invalidate the multiple-include
  optimization.  As described in the next few paragraphs, these two
  variables having these values effectively indicates top-of-file.
  
     When about to return a token that is not part of a directive,
! ‘_cpp_lex_token’ sets ‘mi_valid’ to ‘false’.  This enforces the
  constraint that tokens outside the controlling conditional block
  invalidate the optimization.
  
!    The ‘do_if’, when appropriate, and ‘do_ifndef’ directive handlers
! pass the controlling macro to the function ‘push_conditional’.  cpplib
  maintains a stack of nested conditional blocks, and after processing
! every opening conditional this function pushes an ‘if_stack’ structure
  onto the stack.  In this structure it records the controlling macro for
  the block, provided there is one and we're at top-of-file (as described
! above).  If an ‘#elif’ or ‘#else’ directive is encountered, the
! controlling macro for that block is cleared to ‘NULL’.  Otherwise, it
! survives until the ‘#endif’ closing the block, upon which ‘do_endif’
! sets ‘mi_valid’ to true and stores the controlling macro in ‘mi_cmacro’.
  
!    ‘_cpp_handle_directive’ clears ‘mi_valid’ when processing any
  directive other than an opening conditional and the null directive.
  With this, and requiring top-of-file to record a controlling macro, and
! no ‘#else’ or ‘#elif’ for it to survive and be copied to ‘mi_cmacro’ by
! ‘do_endif’, we have enforced the absence of directives outside the main
  conditional block for the optimization to be on.
  
!    Note that whilst we are inside the conditional block, ‘mi_valid’ is
! likely to be reset to ‘false’, but this does not matter since the
! closing ‘#endif’ restores it to ‘true’ if appropriate.
  
!    Finally, since ‘_cpp_lex_direct’ pops the file off the buffer stack
! at ‘EOF’ without returning a token, if the ‘#endif’ directive was not
! followed by any tokens, ‘mi_valid’ is ‘true’ and ‘_cpp_pop_file_buffer’
  remembers the controlling macro associated with the file.  Subsequent
! calls to ‘stack_include_file’ result in no buffer being pushed if the
  controlling macro is defined, effecting the optimization.
  
     A quick word on how we handle the
  
       #if !defined FOO
  
! case.  ‘_cpp_parse_expr’ and ‘parse_defined’ take steps to see whether
! the three stages ‘!’, ‘defined-expression’ and ‘end-of-directive’ occur
! in order in a ‘#if’ expression.  If so, they return the guard macro to
! ‘do_if’ in the variable ‘mi_ind_cmacro’, and otherwise set it to ‘NULL’.
! ‘enter_macro_context’ sets ‘mi_valid’ to false, so if a macro was
  expanded whilst parsing any part of the expression, then the top-of-file
! test in ‘push_conditional’ fails and the optimization is turned off.
  
  
  File: cppinternals.info,  Node: Files,  Next: Concept Index,  Prev: Guard Macros,  Up: Top
*************** File Handling
*** 930,942 ****
  *************
  
  Fairly obviously, the file handling code of cpplib resides in the file
! 'files.cc'.  It takes care of the details of file searching, opening,
  reading and caching, for both the main source file and all the headers
  it recursively includes.
  
     The basic strategy is to minimize the number of system calls.  On
! many systems, the basic 'open ()' and 'fstat ()' system calls can be
! quite expensive.  For every '#include'-d file, we need to try all the
  directories in the search path until we find a match.  Some projects,
  such as glibc, pass twenty or thirty include paths on the command line,
  so this can rapidly become time consuming.
--- 930,942 ----
  *************
  
  Fairly obviously, the file handling code of cpplib resides in the file
! ‘files.cc’.  It takes care of the details of file searching, opening,
  reading and caching, for both the main source file and all the headers
  it recursively includes.
  
     The basic strategy is to minimize the number of system calls.  On
! many systems, the basic ‘open ()’ and ‘fstat ()’ system calls can be
! quite expensive.  For every ‘#include’-d file, we need to try all the
  directories in the search path until we find a match.  Some projects,
  such as glibc, pass twenty or thirty include paths on the command line,
  so this can rapidly become time consuming.
*************** repeating the filesystem queries whilst
*** 948,992 ****
  
     For each file we try to open, we store the constructed path in a
  splay tree.  This path first undergoes simplification by the function
! '_cpp_simplify_pathname'.  For example, '/usr/include/bits/../foo.h' is
! simplified to '/usr/include/foo.h' before we enter it in the splay tree
! and try to 'open ()' the file.  CPP will then find subsequent uses of
! 'foo.h', even as '/usr/include/foo.h', in the splay tree and save system
  calls.
  
     Further, it is likely the file contents have also been cached, saving
! a 'read ()' system call.  We don't bother caching the contents of header
  files that are re-inclusion protected, and whose re-inclusion macro is
  defined when we leave the header file for the first time.  If the host
  supports it, we try to map suitably large files into memory, rather than
  reading them in directly.
  
     The include paths are internally stored on a null-terminated
! singly-linked list, starting with the '"header.h"' directory search
! chain, which then links into the '<header.h>' directory chain.
  
!    Files included with the '<foo.h>' syntax start the lookup directly in
  the second half of this chain.  However, files included with the
! '"foo.h"' syntax start at the beginning of the chain, but with one extra
  directory prepended.  This is the directory of the current file; the one
! containing the '#include' directive.  Prepending this directory on a
! per-file basis is handled by the function 'search_from'.
  
     Note that a header included with a directory component, such as
! '#include "mydir/foo.h"' and opened as '/usr/local/include/mydir/foo.h',
! will have the complete path minus the basename 'foo.h' as the current
  directory.
  
     Enough information is stored in the splay tree that CPP can
  immediately tell whether it can skip the header file because of the
  multiple include optimization, whether the file didn't exist or couldn't
  be opened for some reason, or whether the header was flagged not to be
! re-used, as it is with the obsolete '#import' directive.
  
     For the benefit of MS-DOS filesystems with an 8.3 filename
  limitation, CPP offers the ability to treat various include file names
  as aliases for the real header files with shorter names.  The map from
! one to the other is found in a special file called 'header.gcc', stored
  in the command line (or system) include directories to which the mapping
  applies.  This may be higher up the directory tree than the full path to
  the file minus the base name.
--- 948,992 ----
  
     For each file we try to open, we store the constructed path in a
  splay tree.  This path first undergoes simplification by the function
! ‘_cpp_simplify_pathname’.  For example, ‘/usr/include/bits/../foo.h’ is
! simplified to ‘/usr/include/foo.h’ before we enter it in the splay tree
! and try to ‘open ()’ the file.  CPP will then find subsequent uses of
! ‘foo.h’, even as ‘/usr/include/foo.h’, in the splay tree and save system
  calls.
  
     Further, it is likely the file contents have also been cached, saving
! a ‘read ()’ system call.  We don't bother caching the contents of header
  files that are re-inclusion protected, and whose re-inclusion macro is
  defined when we leave the header file for the first time.  If the host
  supports it, we try to map suitably large files into memory, rather than
  reading them in directly.
  
     The include paths are internally stored on a null-terminated
! singly-linked list, starting with the ‘"header.h"’ directory search
! chain, which then links into the ‘<header.h>’ directory chain.
  
!    Files included with the ‘<foo.h>’ syntax start the lookup directly in
  the second half of this chain.  However, files included with the
! ‘"foo.h"’ syntax start at the beginning of the chain, but with one extra
  directory prepended.  This is the directory of the current file; the one
! containing the ‘#include’ directive.  Prepending this directory on a
! per-file basis is handled by the function ‘search_from’.
  
     Note that a header included with a directory component, such as
! ‘#include "mydir/foo.h"’ and opened as ‘/usr/local/include/mydir/foo.h’,
! will have the complete path minus the basename ‘foo.h’ as the current
  directory.
  
     Enough information is stored in the splay tree that CPP can
  immediately tell whether it can skip the header file because of the
  multiple include optimization, whether the file didn't exist or couldn't
  be opened for some reason, or whether the header was flagged not to be
! re-used, as it is with the obsolete ‘#import’ directive.
  
     For the benefit of MS-DOS filesystems with an 8.3 filename
  limitation, CPP offers the ability to treat various include file names
  as aliases for the real header files with shorter names.  The map from
! one to the other is found in a special file called ‘header.gcc’, stored
  in the command line (or system) include directories to which the mapping
  applies.  This may be higher up the directory tree than the full path to
  the file minus the base name.
*************** Concept Index
*** 1026,1041 ****
  
  Tag Table:
  Node: Top905
! Node: Conventions2743
! Node: Lexer3685
! Ref: Invalid identifiers11600
! Ref: Lexing a line13550
! Node: Hash Nodes18319
! Node: Macro Expansion21198
! Node: Token Spacing30142
! Node: Line Numbering35998
! Node: Guard Macros40084
! Node: Files44875
! Node: Concept Index48342
  
  End Tag Table
--- 1026,1046 ----
  
  Tag Table:
  Node: Top905
! Node: Conventions2747
! Node: Lexer3709
! Ref: Invalid identifiers11844
! Ref: Lexing a line13850
! Node: Hash Nodes18679
! Node: Macro Expansion21620
! Node: Token Spacing30660
! Node: Line Numbering36640
! Node: Guard Macros40777
! Node: Files45800
! Node: Concept Index49355
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/extend.texi gcc-14.3.0-RC-20260619/gcc/doc/extend.texi
*** gcc-14.3.0/gcc/doc/extend.texi	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/extend.texi	Fri Jun 19 06:51:02 2026
*************** is computed.
*** 13872,13878 ****
  
  @smallexample
  struct V @{ char buf1[10]; int b; char buf2[10]; @} var;
! char *p = &var.buf1[1], *q = &var.b;
  
  /* Here the object p points to is var.  */
  assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
--- 13872,13879 ----
  
  @smallexample
  struct V @{ char buf1[10]; int b; char buf2[10]; @} var;
! char *p = &var.buf1[1];
! int *q = &var.b;
  
  /* Here the object p points to is var.  */
  assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
diff -Nrcpad gcc-14.3.0/gcc/doc/fsf-funding.7 gcc-14.3.0-RC-20260619/gcc/doc/fsf-funding.7
*** gcc-14.3.0/gcc/doc/fsf-funding.7	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/fsf-funding.7	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,142 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  fsf\-funding \- Funding Free Software
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
  .SS "Funding Free Software"
  .IX Subsection "Funding Free Software"
--- 38,71 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  fsf\-funding \- Funding Free Software
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
  .SS "Funding Free Software"
  .IX Subsection "Funding Free Software"
*************** development.  The most effective approac
*** 146,152 ****
  commercial redistributors to donate.
  .PP
  Users of free software systems can boost the pace of development by
! encouraging for-a-fee distributors to donate part of their selling price
  to free software developers\-\-\-the Free Software Foundation, and others.
  .PP
  The way to convince distributors to do this is to demand it and expect
--- 75,81 ----
  commercial redistributors to donate.
  .PP
  Users of free software systems can boost the pace of development by
! encouraging for\-a\-fee distributors to donate part of their selling price
  to free software developers\-\-\-the Free Software Foundation, and others.
  .PP
  The way to convince distributors to do this is to demand it and expect
*************** how much they give to free software deve
*** 155,166 ****
  they must compete to be the one who gives the most.
  .PP
  To make this approach work, you must insist on numbers that you can
! compare, such as, \*(L"We will donate ten dollars to the Frobnitz project
! for each disk sold.\*(R"  Don't be satisfied with a vague promise, such as
! \&\*(L"A portion of the profits are donated,\*(R" since it doesn't give a basis
  for comparison.
  .PP
! Even a precise fraction \*(L"of the profits from this disk\*(R" is not very
  meaningful, since creative accounting and unrelated business decisions
  can greatly alter what fraction of the sales price counts as profit.
  If the price you pay is \f(CW$50\fR, ten percent of the profit is probably
--- 84,95 ----
  they must compete to be the one who gives the most.
  .PP
  To make this approach work, you must insist on numbers that you can
! compare, such as, "We will donate ten dollars to the Frobnitz project
! for each disk sold."  Don\*(Aqt be satisfied with a vague promise, such as
! "A portion of the profits are donated," since it doesn\*(Aqt give a basis
  for comparison.
  .PP
! Even a precise fraction "of the profits from this disk" is not very
  meaningful, since creative accounting and unrelated business decisions
  can greatly alter what fraction of the sales price counts as profit.
  If the price you pay is \f(CW$50\fR, ten percent of the profit is probably
*************** less than a dollar; it might be a few ce
*** 168,188 ****
  .PP
  Some redistributors do development work themselves.  This is useful too;
  but to keep everyone honest, you need to inquire how much they do, and
! what kind.  Some kinds of development make much more long-term
  difference than others.  For example, maintaining a separate version of
  a program contributes very little; maintaining the standard version of a
  program for the whole community contributes much.  Easy new ports
  contribute little, since someone else would surely do them; difficult
! ports such as adding a new \s-1CPU\s0 to the \s-1GNU\s0 Compiler Collection contribute more;
  major new features or packages contribute the most.
  .PP
! By establishing the idea that supporting further development is \*(L"the
! proper thing to do\*(R" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7).
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 1994 Free Software Foundation, Inc.
  Verbatim copying and redistribution of this section is permitted
--- 97,117 ----
  .PP
  Some redistributors do development work themselves.  This is useful too;
  but to keep everyone honest, you need to inquire how much they do, and
! what kind.  Some kinds of development make much more long\-term
  difference than others.  For example, maintaining a separate version of
  a program contributes very little; maintaining the standard version of a
  program for the whole community contributes much.  Easy new ports
  contribute little, since someone else would surely do them; difficult
! ports such as adding a new CPU to the GNU Compiler Collection contribute more;
  major new features or packages contribute the most.
  .PP
! 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.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7).
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 1994 Free Software Foundation, Inc.
  Verbatim copying and redistribution of this section is permitted
diff -Nrcpad gcc-14.3.0/gcc/doc/g++.1 gcc-14.3.0-RC-20260619/gcc/doc/g++.1
*** gcc-14.3.0/gcc/doc/g++.1	Fri May 23 11:19:47 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/g++.1	Fri Jun 19 07:07:45 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,157 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gcc \- GNU project C and C++ compiler
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
      [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
      [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
      [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
      [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
!     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
      [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! When you invoke \s-1GCC,\s0 it normally does preprocessing, compilation,
! assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
  process at an intermediate stage.  For example, the \fB\-c\fR option
  says not to run the linker.  Then the output consists of object files
  output by the assembler.
--- 38,86 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gcc \- GNU project C and C++ compiler
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
      [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
      [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
      [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
      [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
!     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine\-option\fR...]
      [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
! .SH DESCRIPTION
  .IX Header "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 \fB\-c\fR option
  says not to run the linker.  Then the output consists of object files
  output by the assembler.
*************** control the preprocessor and others the
*** 161,184 ****
  options control the assembler and linker; most of these are not
  documented here, since you rarely need to use any of them.
  .PP
! Most of the command-line options that you can use with \s-1GCC\s0 are useful
  for C programs; when an option is only useful with another language
! (usually \*(C+), the explanation says so explicitly.  If the description
  for a particular option does not mention a source language, you can use
  that option with all supported languages.
  .PP
! The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
! \&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
! \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a specific version of \s-1GCC.\s0
! When you compile \*(C+ programs, you should invoke \s-1GCC\s0 as \fBg++\fR 
  instead.
  .PP
  The \fBgcc\fR program accepts options and file names as operands.  Many
! options have multi-letter names; therefore multiple single-letter options
  may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
  .PP
  You can mix options and other arguments.  For the most part, the order
! you use doesn't matter.  Order does matter when you use several
  options of the same kind; for example, if you specify \fB\-L\fR more
  than once, the directories are searched in the order specified.  Also,
  the placement of the \fB\-l\fR option is significant.
--- 90,113 ----
  options control the assembler and linker; most of these are not
  documented here, since you rarely need to use any of them.
  .PP
! Most of the command\-line options that you can use with GCC are useful
  for C programs; when an option is only useful with another language
! (usually C++), the explanation says so explicitly.  If the description
  for a particular option does not mention a source language, you can use
  that option with all supported languages.
  .PP
! The usual way to run GCC is to run the executable called \fBgcc\fR, or
! \&\fImachine\fR\fB\-gcc\fR when cross\-compiling, or
! \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a specific version of GCC.
! When you compile C++ programs, you should invoke GCC as \fBg++\fR 
  instead.
  .PP
  The \fBgcc\fR program accepts options and file names as operands.  Many
! options have multi\-letter names; therefore multiple single\-letter options
  may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
  .PP
  You can mix options and other arguments.  For the most part, the order
! you use doesn\*(Aqt matter.  Order does matter when you use several
  options of the same kind; for example, if you specify \fB\-L\fR more
  than once, the directories are searched in the order specified.  Also,
  the placement of the \fB\-l\fR option is significant.
*************** integers followed by a byte size suffix
*** 201,210 ****
  such as \f(CW\*(C`kB\*(C'\fR and \f(CW\*(C`KiB\*(C'\fR for kilobyte and kibibyte, respectively,
  \&\f(CW\*(C`MB\*(C'\fR and \f(CW\*(C`MiB\*(C'\fR for megabyte and mebibyte, \f(CW\*(C`GB\*(C'\fR and
  \&\f(CW\*(C`GiB\*(C'\fR for gigabyte and gigibyte, and so on.  Such arguments are
! designated by \fIbyte-size\fR in the following text.  Refer to the \s-1NIST,
! IEC,\s0 and other relevant national and international standards for the full
  listing and explanation of the binary and decimal byte size prefixes.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
  .SS "Option Summary"
  .IX Subsection "Option Summary"
--- 130,139 ----
  such as \f(CW\*(C`kB\*(C'\fR and \f(CW\*(C`KiB\*(C'\fR for kilobyte and kibibyte, respectively,
  \&\f(CW\*(C`MB\*(C'\fR and \f(CW\*(C`MiB\*(C'\fR for megabyte and mebibyte, \f(CW\*(C`GB\*(C'\fR and
  \&\f(CW\*(C`GiB\*(C'\fR for gigabyte and gigibyte, and so on.  Such arguments are
! designated by \fIbyte\-size\fR 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.
! .SH OPTIONS
  .IX Header "OPTIONS"
  .SS "Option Summary"
  .IX Subsection "Option Summary"
*************** in the following sections.
*** 229,241 ****
  \&\-flax\-vector\-conversions  \-fms\-extensions
  \&\-foffload=\fR\fIarg\fR  \fB\-foffload\-options=\fR\fIarg\fR
  \&\fB\-fopenacc  \-fopenacc\-dim=\fR\fIgeom\fR
! \&\fB\-fopenmp  \-fopenmp\-simd  \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice-type\fR]
  \&\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR
  \&\fB\-fplan9\-extensions  \-fsigned\-bitfields  \-funsigned\-bitfields
  \&\-fsigned\-char  \-funsigned\-char  \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB]
  \&\-fsso\-struct=\fR\fIendianness\fR
! .IP "\fI\*(C+ Language Options\fR" 4
! .IX Item " Language Options"
  \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control
  \&\-faligned\-new=\fR\fIn\fR  \fB\-fargs\-in\-order=\fR\fIn\fR  \fB\-fchar8_t  \-fcheck\-new
  \&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR
--- 158,170 ----
  \&\-flax\-vector\-conversions  \-fms\-extensions
  \&\-foffload=\fR\fIarg\fR  \fB\-foffload\-options=\fR\fIarg\fR
  \&\fB\-fopenacc  \-fopenacc\-dim=\fR\fIgeom\fR
! \&\fB\-fopenmp  \-fopenmp\-simd  \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice\-type\fR]
  \&\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR
  \&\fB\-fplan9\-extensions  \-fsigned\-bitfields  \-funsigned\-bitfields
  \&\-fsigned\-char  \-funsigned\-char  \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB]
  \&\-fsso\-struct=\fR\fIendianness\fR
! .IP "\fIC++ Language Options\fR" 4
! .IX Item "C++ Language Options"
  \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control
  \&\-faligned\-new=\fR\fIn\fR  \fB\-fargs\-in\-order=\fR\fIn\fR  \fB\-fchar8_t  \-fcheck\-new
  \&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR
*************** in the following sections.
*** 297,305 ****
  \&\-Wsuggest\-final\-types  \-Wsuggest\-override  \-Wno\-template\-id\-cdtor
  \&\-Wno\-terminate  \-Wno\-vexing\-parse  \-Wvirtual\-inheritance
  \&\-Wno\-virtual\-move\-assign  \-Wvolatile  \-Wzero\-as\-null\-pointer\-constant\fR
! .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
! .IX Item "Objective-C and Objective- Language Options"
! \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR
  \&\fB\-fgnu\-runtime  \-fnext\-runtime
  \&\-fno\-nil\-receivers
  \&\-fobjc\-abi\-version=\fR\fIn\fR
--- 226,234 ----
  \&\-Wsuggest\-final\-types  \-Wsuggest\-override  \-Wno\-template\-id\-cdtor
  \&\-Wno\-terminate  \-Wno\-vexing\-parse  \-Wvirtual\-inheritance
  \&\-Wno\-virtual\-move\-assign  \-Wvolatile  \-Wzero\-as\-null\-pointer\-constant\fR
! .IP "\fIObjective\-C and Objective\-C++ Language Options\fR" 4
! .IX Item "Objective-C and Objective-C++ Language Options"
! \&\fB\-fconstant\-string\-class=\fR\fIclass\-name\fR
  \&\fB\-fgnu\-runtime  \-fnext\-runtime
  \&\-fno\-nil\-receivers
  \&\-fobjc\-abi\-version=\fR\fIn\fR
*************** in the following sections.
*** 322,331 ****
  .IX Item "Diagnostic Message Formatting Options"
  \&\fB\-fmessage\-length=\fR\fIn\fR
  \&\fB\-fdiagnostics\-plain\-output
! \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]
  \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
  \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
! \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif-stderr\fR|\fBsarif-file\fR|\fBjson\fR|\fBjson-stderr\fR|\fBjson-file\fR]
  \&\fB\-fno\-diagnostics\-json\-formatting
  \&\-fno\-diagnostics\-show\-option  \-fno\-diagnostics\-show\-caret
  \&\-fno\-diagnostics\-show\-labels  \-fno\-diagnostics\-show\-line\-numbers
--- 251,260 ----
  .IX Item "Diagnostic Message Formatting Options"
  \&\fB\-fmessage\-length=\fR\fIn\fR
  \&\fB\-fdiagnostics\-plain\-output
! \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery\-line\fR]
  \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
  \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
! \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif\-stderr\fR|\fBsarif\-file\fR|\fBjson\fR|\fBjson\-stderr\fR|\fBjson\-file\fR]
  \&\fB\-fno\-diagnostics\-json\-formatting
  \&\-fno\-diagnostics\-show\-option  \-fno\-diagnostics\-show\-caret
  \&\-fno\-diagnostics\-show\-labels  \-fno\-diagnostics\-show\-line\-numbers
*************** in the following sections.
*** 334,340 ****
  \&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR
  \&\fB\-fdiagnostics\-parseable\-fixits  \-fdiagnostics\-generate\-patch
  \&\-fdiagnostics\-show\-template\-tree  \-fno\-elide\-type
! \&\-fdiagnostics\-path\-format=\fR[\fBnone\fR|\fBseparate-events\fR|\fBinline-events\fR]
  \&\fB\-fdiagnostics\-show\-path\-depths
  \&\-fno\-show\-column
  \&\-fdiagnostics\-column\-unit=\fR[\fBdisplay\fR|\fBbyte\fR]
--- 263,269 ----
  \&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR
  \&\fB\-fdiagnostics\-parseable\-fixits  \-fdiagnostics\-generate\-patch
  \&\-fdiagnostics\-show\-template\-tree  \-fno\-elide\-type
! \&\-fdiagnostics\-path\-format=\fR[\fBnone\fR|\fBseparate\-events\fR|\fBinline\-events\fR]
  \&\fB\-fdiagnostics\-show\-path\-depths
  \&\-fno\-show\-column
  \&\-fdiagnostics\-column\-unit=\fR[\fBdisplay\fR|\fBbyte\fR]
*************** in the following sections.
*** 347,354 ****
  \&\-pedantic\-errors \-fpermissive
  \&\-w  \-Wextra  \-Wall  \-Wabi=\fR\fIn\fR
  \&\fB\-Waddress  \-Wno\-address\-of\-packed\-member  \-Waggregate\-return
! \&\-Walloc\-size  \-Walloc\-size\-larger\-than=\fR\fIbyte-size\fR  \fB\-Walloc\-zero
! \&\-Walloca  \-Walloca\-larger\-than=\fR\fIbyte-size\fR
  \&\fB\-Wno\-aggressive\-loop\-optimizations
  \&\-Warith\-conversion
  \&\-Warray\-bounds  \-Warray\-bounds=\fR\fIn\fR  \fB\-Warray\-compare
--- 276,283 ----
  \&\-pedantic\-errors \-fpermissive
  \&\-w  \-Wextra  \-Wall  \-Wabi=\fR\fIn\fR
  \&\fB\-Waddress  \-Wno\-address\-of\-packed\-member  \-Waggregate\-return
! \&\-Walloc\-size  \-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR  \fB\-Walloc\-zero
! \&\-Walloca  \-Walloca\-larger\-than=\fR\fIbyte\-size\fR
  \&\fB\-Wno\-aggressive\-loop\-optimizations
  \&\-Warith\-conversion
  \&\-Warray\-bounds  \-Warray\-bounds=\fR\fIn\fR  \fB\-Warray\-compare
*************** in the following sections.
*** 387,393 ****
  \&\-Wformat\-nonliteral  \-Wformat\-overflow=\fR\fIn\fR
  \&\fB\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-truncation=\fR\fIn\fR
  \&\fB\-Wformat\-y2k  \-Wframe\-address
! \&\-Wframe\-larger\-than=\fR\fIbyte-size\fR  \fB\-Wno\-free\-nonheap\-object
  \&\-Wno\-if\-not\-aligned  \-Wno\-ignored\-attributes
  \&\-Wignored\-qualifiers  \-Wno\-incompatible\-pointer\-types  \-Whardened
  \&\-Wimplicit  \-Wimplicit\-fallthrough  \-Wimplicit\-fallthrough=\fR\fIn\fR
--- 316,322 ----
  \&\-Wformat\-nonliteral  \-Wformat\-overflow=\fR\fIn\fR
  \&\fB\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-truncation=\fR\fIn\fR
  \&\fB\-Wformat\-y2k  \-Wframe\-address
! \&\-Wframe\-larger\-than=\fR\fIbyte\-size\fR  \fB\-Wno\-free\-nonheap\-object
  \&\-Wno\-if\-not\-aligned  \-Wno\-ignored\-attributes
  \&\-Wignored\-qualifiers  \-Wno\-incompatible\-pointer\-types  \-Whardened
  \&\-Wimplicit  \-Wimplicit\-fallthrough  \-Wimplicit\-fallthrough=\fR\fIn\fR
*************** in the following sections.
*** 396,402 ****
  \&\-Winit\-self  \-Winline  \-Wno\-int\-conversion  \-Wint\-in\-bool\-context
  \&\-Wno\-int\-to\-pointer\-cast  \-Wno\-invalid\-memory\-model
  \&\-Winvalid\-pch  \-Winvalid\-utf8  \-Wno\-unicode  \-Wjump\-misses\-init
! \&\-Wlarger\-than=\fR\fIbyte-size\fR  \fB\-Wlogical\-not\-parentheses  \-Wlogical\-op
  \&\-Wlong\-long  \-Wno\-lto\-type\-mismatch \-Wmain  \-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size  \-Wmemset\-transposed\-args
  \&\-Wmisleading\-indentation  \-Wmissing\-attributes  \-Wmissing\-braces
--- 325,331 ----
  \&\-Winit\-self  \-Winline  \-Wno\-int\-conversion  \-Wint\-in\-bool\-context
  \&\-Wno\-int\-to\-pointer\-cast  \-Wno\-invalid\-memory\-model
  \&\-Winvalid\-pch  \-Winvalid\-utf8  \-Wno\-unicode  \-Wjump\-misses\-init
! \&\-Wlarger\-than=\fR\fIbyte\-size\fR  \fB\-Wlogical\-not\-parentheses  \-Wlogical\-op
  \&\-Wlong\-long  \-Wno\-lto\-type\-mismatch \-Wmain  \-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size  \-Wmemset\-transposed\-args
  \&\-Wmisleading\-indentation  \-Wmissing\-attributes  \-Wmissing\-braces
*************** in the following sections.
*** 422,428 ****
  \&\-Wno\-sizeof\-array\-argument
  \&\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div  \-Wsizeof\-pointer\-memaccess
! \&\-Wstack\-protector  \-Wstack\-usage=\fR\fIbyte-size\fR  \fB\-Wstrict\-aliasing
  \&\-Wstrict\-aliasing=n  \-Wstrict\-overflow  \-Wstrict\-overflow=\fR\fIn\fR
  \&\fB\-Wstring\-compare
  \&\-Wno\-stringop\-overflow \-Wno\-stringop\-overread
--- 351,357 ----
  \&\-Wno\-sizeof\-array\-argument
  \&\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div  \-Wsizeof\-pointer\-memaccess
! \&\-Wstack\-protector  \-Wstack\-usage=\fR\fIbyte\-size\fR  \fB\-Wstrict\-aliasing
  \&\-Wstrict\-aliasing=n  \-Wstrict\-overflow  \-Wstrict\-overflow=\fR\fIn\fR
  \&\fB\-Wstring\-compare
  \&\-Wno\-stringop\-overflow \-Wno\-stringop\-overread
*************** in the following sections.
*** 443,449 ****
  \&\-Wuse\-after\-free  \-Wuse\-after\-free=\fR\fIn\fR  \fB\-Wuseless\-cast
  \&\-Wno\-varargs  \-Wvariadic\-macros
  \&\-Wvector\-operation\-performance
! \&\-Wvla  \-Wvla\-larger\-than=\fR\fIbyte-size\fR  \fB\-Wno\-vla\-larger\-than
  \&\-Wvolatile\-register\-var  \-Wwrite\-strings
  \&\-Wno\-xor\-used\-as\-pow
  \&\-Wzero\-length\-bounds\fR
--- 372,378 ----
  \&\-Wuse\-after\-free  \-Wuse\-after\-free=\fR\fIn\fR  \fB\-Wuseless\-cast
  \&\-Wno\-varargs  \-Wvariadic\-macros
  \&\-Wvector\-operation\-performance
! \&\-Wvla  \-Wvla\-larger\-than=\fR\fIbyte\-size\fR  \fB\-Wno\-vla\-larger\-than
  \&\-Wvolatile\-register\-var  \-Wwrite\-strings
  \&\-Wno\-xor\-used\-as\-pow
  \&\-Wzero\-length\-bounds\fR
*************** in the following sections.
*** 525,531 ****
  \&\-Wno\-analyzer\-va\-list\-use\-after\-va\-end
  \&\-Wno\-analyzer\-write\-to\-const
  \&\-Wno\-analyzer\-write\-to\-string\-literal\fR
! .IP "\fIC and Objective-C-only Warning Options\fR" 4
  .IX Item "C and Objective-C-only Warning Options"
  \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations
  \&\-Wmissing\-parameter\-type \-Wdeclaration\-missing\-parameter\-type
--- 454,460 ----
  \&\-Wno\-analyzer\-va\-list\-use\-after\-va\-end
  \&\-Wno\-analyzer\-write\-to\-const
  \&\-Wno\-analyzer\-write\-to\-string\-literal\fR
! .IP "\fIC and Objective\-C\-only Warning Options\fR" 4
  .IX Item "C and Objective-C-only Warning Options"
  \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations
  \&\-Wmissing\-parameter\-type \-Wdeclaration\-missing\-parameter\-type
*************** in the following sections.
*** 552,558 ****
  \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  \fB\-fdebug\-types\-section
  \&\-fno\-eliminate\-unused\-debug\-types
  \&\-femit\-struct\-debug\-baseonly  \-femit\-struct\-debug\-reduced
! \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]
  \&\fB\-fno\-eliminate\-unused\-debug\-symbols  \-femit\-class\-debug\-always
  \&\-fno\-merge\-debug\-strings  \-fno\-dwarf2\-cfi\-asm
  \&\-fvar\-tracking  \-fvar\-tracking\-assignments\fR
--- 481,487 ----
  \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  \fB\-fdebug\-types\-section
  \&\-fno\-eliminate\-unused\-debug\-types
  \&\-femit\-struct\-debug\-baseonly  \-femit\-struct\-debug\-reduced
! \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR]
  \&\fB\-fno\-eliminate\-unused\-debug\-symbols  \-femit\-class\-debug\-always
  \&\-fno\-merge\-debug\-strings  \-fno\-dwarf2\-cfi\-asm
  \&\-fvar\-tracking  \-fvar\-tracking\-assignments\fR
*************** in the following sections.
*** 662,668 ****
  \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR
  \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR
  \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR
! \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel-runs\fR|\fBserial\fR]
  \&\fB\-fsanitize=\fR\fIstyle\fR  \fB\-fsanitize\-recover  \-fsanitize\-recover=\fR\fIstyle\fR
  \&\fB\-fsanitize\-trap   \-fsanitize\-trap=\fR\fIstyle\fR
  \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR  \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...
--- 591,597 ----
  \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR
  \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR
  \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR
! \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR]
  \&\fB\-fsanitize=\fR\fIstyle\fR  \fB\-fsanitize\-recover  \-fsanitize\-recover=\fR\fIstyle\fR
  \&\fB\-fsanitize\-trap   \-fsanitize\-trap=\fR\fIstyle\fR
  \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR  \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...
*************** in the following sections.
*** 671,677 ****
  \&\fB\-fharden\-compares \-fharden\-conditional\-branches  \-fhardened
  \&\-fharden\-control\-flow\-redundancy  \-fhardcfr\-skip\-leaf
  \&\-fhardcfr\-check\-exceptions  \-fhardcfr\-check\-returning\-calls
! \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno-xthrow\fR|\fBnothrow\fR|\fBnever\fR]
  \&\fB\-fstack\-protector  \-fstack\-protector\-all  \-fstack\-protector\-strong
  \&\-fstack\-protector\-explicit  \-fstack\-check
  \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR
--- 600,606 ----
  \&\fB\-fharden\-compares \-fharden\-conditional\-branches  \-fhardened
  \&\-fharden\-control\-flow\-redundancy  \-fhardcfr\-skip\-leaf
  \&\-fhardcfr\-check\-exceptions  \-fhardcfr\-check\-returning\-calls
! \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR]
  \&\fB\-fstack\-protector  \-fstack\-protector\-all  \-fstack\-protector\-strong
  \&\-fstack\-protector\-explicit  \-fstack\-check
  \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR
*************** in the following sections.
*** 709,715 ****
  \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
  .IP "\fILinker Options\fR" 4
  .IX Item "Linker Options"
! \&\fIobject-file-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR  \fB\-l\fR\fIlibrary\fR
  \&\fB\-nostartfiles  \-nodefaultlibs  \-nolibc  \-nostdlib  \-nostdlib++
  \&\-e\fR \fIentry\fR  \fB\-\-entry=\fR\fIentry\fR
  \&\fB\-pie  \-pthread  \-r  \-rdynamic
--- 638,644 ----
  \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
  .IP "\fILinker Options\fR" 4
  .IX Item "Linker Options"
! \&\fIobject\-file\-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR  \fB\-l\fR\fIlibrary\fR
  \&\fB\-nostartfiles  \-nodefaultlibs  \-nolibc  \-nostdlib  \-nostdlib++
  \&\-e\fR \fIentry\fR  \fB\-\-entry=\fR\fIentry\fR
  \&\fB\-pie  \-pthread  \-r  \-rdynamic
*************** in the following sections.
*** 752,763 ****
  \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion
  \&\-dumpfullversion  \-fcallgraph\-info\fR[\fB=su,da\fR]
  \&\fB\-fchecking  \-fchecking=\fR\fIn\fR
! \&\fB\-fdbg\-cnt\-list  \-fdbg\-cnt=\fR\fIcounter-value-list\fR
  \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR
  \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR
  \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR
  \&\fB\-fdump\-debug  \-fdump\-earlydebug
  \&\-fdump\-noaddr  \-fdump\-unnumbered  \-fdump\-unnumbered\-links
  \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]
--- 681,692 ----
  \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion
  \&\-dumpfullversion  \-fcallgraph\-info\fR[\fB=su,da\fR]
  \&\fB\-fchecking  \-fchecking=\fR\fIn\fR
! \&\fB\-fdbg\-cnt\-list  \-fdbg\-cnt=\fR\fIcounter\-value\-list\fR
  \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR
  \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-rtl\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR
  \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-tree\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR
  \&\fB\-fdump\-debug  \-fdump\-earlydebug
  \&\-fdump\-noaddr  \-fdump\-unnumbered  \-fdump\-unnumbered\-links
  \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]
*************** in the following sections.
*** 775,781 ****
  \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR
  \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second
  \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR
! \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR
  \&\fB\-fira\-verbose=\fR\fIn\fR
  \&\fB\-flto\-report  \-flto\-report\-wpa  \-fmem\-report\-wpa
  \&\-fmem\-report  \-fpre\-ipa\-mem\-report  \-fpost\-ipa\-mem\-report
--- 704,710 ----
  \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR
  \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second
  \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR
! \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR
  \&\fB\-fira\-verbose=\fR\fIn\fR
  \&\fB\-flto\-report  \-flto\-report\-wpa  \-fmem\-report\-wpa
  \&\-fmem\-report  \-fpre\-ipa\-mem\-report  \-fpost\-ipa\-mem\-report
*************** in the following sections.
*** 790,796 ****
  \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q
  \&\-print\-sysroot  \-print\-sysroot\-headers\-suffix
  \&\-save\-temps  \-save\-temps=cwd  \-save\-temps=obj  \-time\fR[\fB=\fR\fIfile\fR]
! .IP "\fIMachine-Dependent Options\fR" 4
  .IX Item "Machine-Dependent Options"
  \&\fIAArch64 Options\fR
  \&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian
--- 719,725 ----
  \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q
  \&\-print\-sysroot  \-print\-sysroot\-headers\-suffix
  \&\-save\-temps  \-save\-temps=cwd  \-save\-temps=obj  \-time\fR[\fB=\fR\fIfile\fR]
! .IP "\fIMachine\-Dependent Options\fR" 4
  .IX Item "Machine-Dependent Options"
  \&\fIAArch64 Options\fR
  \&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian
*************** in the following sections.
*** 804,810 ****
  \&\-mlow\-precision\-recip\-sqrt  \-mlow\-precision\-sqrt  \-mlow\-precision\-div
  \&\-mpc\-relative\-literal\-loads
  \&\-msign\-return\-address=\fR\fIscope\fR
! \&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR
  \&\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR
  \&\fB\-mharden\-sls=\fR\fIopts\fR
  \&\fB\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
--- 733,739 ----
  \&\-mlow\-precision\-recip\-sqrt  \-mlow\-precision\-sqrt  \-mlow\-precision\-div
  \&\-mpc\-relative\-literal\-loads
  \&\-msign\-return\-address=\fR\fIscope\fR
! \&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR
  \&\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR
  \&\fB\-mharden\-sls=\fR\fIopts\fR
  \&\fB\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
*************** in the following sections.
*** 821,830 ****
  \&\-mfp\-mode=\fR\fImode\fR  \fB\-mvect\-double  \-max\-vect\-align=\fR\fInum\fR
  \&\fB\-msplit\-vecmove\-early  \-m1reg\-\fR\fIreg\fR
  .Sp
! \&\fI\s-1AMD GCN\s0 Options\fR
  \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \fB\-mstack\-size=\fR\fIbytes\fR
  .Sp
! \&\fI\s-1ARC\s0 Options\fR
  \&\fB\-mbarrel\-shifter  \-mjli\-always
  \&\-mcpu=\fR\fIcpu\fR  \fB\-mA6  \-mARC600  \-mA7  \-mARC700
  \&\-mdpfp  \-mdpfp\-compact  \-mdpfp\-fast  \-mno\-dpfp\-lrsr
--- 750,759 ----
  \&\-mfp\-mode=\fR\fImode\fR  \fB\-mvect\-double  \-max\-vect\-align=\fR\fInum\fR
  \&\fB\-msplit\-vecmove\-early  \-m1reg\-\fR\fIreg\fR
  .Sp
! \&\fIAMD GCN Options\fR
  \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \fB\-mstack\-size=\fR\fIbytes\fR
  .Sp
! \&\fIARC Options\fR
  \&\fB\-mbarrel\-shifter  \-mjli\-always
  \&\-mcpu=\fR\fIcpu\fR  \fB\-mA6  \-mARC600  \-mA7  \-mARC700
  \&\-mdpfp  \-mdpfp\-compact  \-mdpfp\-fast  \-mno\-dpfp\-lrsr
*************** in the following sections.
*** 844,850 ****
  \&\-munalign\-prob\-threshold=\fR\fIprobability\fR  \fB\-mmpy\-option=\fR\fImulto\fR
  \&\fB\-mdiv\-rem  \-mcode\-density  \-mll64  \-mfpu=\fR\fIfpu\fR  \fB\-mrf16  \-mbranch\-index\fR
  .Sp
! \&\fI\s-1ARM\s0 Options\fR
  \&\fB\-mapcs\-frame  \-mno\-apcs\-frame
  \&\-mabi=\fR\fIname\fR
  \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check
--- 773,779 ----
  \&\-munalign\-prob\-threshold=\fR\fIprobability\fR  \fB\-mmpy\-option=\fR\fImulto\fR
  \&\fB\-mdiv\-rem  \-mcode\-density  \-mll64  \-mfpu=\fR\fIfpu\fR  \fB\-mrf16  \-mbranch\-index\fR
  .Sp
! \&\fIARM Options\fR
  \&\fB\-mapcs\-frame  \-mno\-apcs\-frame
  \&\-mabi=\fR\fIname\fR
  \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check
*************** in the following sections.
*** 884,893 ****
  \&\-mfix\-cmse\-cve\-2021\-35465
  \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
  \&\fB\-mfdpic
! \&\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]
! [+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR
  .Sp
! \&\fI\s-1AVR\s0 Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-mabsdata  \-maccumulate\-args
  \&\-mbranch\-cost=\fR\fIcost\fR  \fB\-mfuse\-add=\fR\fIlevel\fR
  \&\fB\-mcall\-prologues  \-mgas\-isr\-prologues  \-mint8  \-mflmap
--- 813,822 ----
  \&\-mfix\-cmse\-cve\-2021\-35465
  \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
  \&\fB\-mfdpic
! \&\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]
! [+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR
  .Sp
! \&\fIAVR Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-mabsdata  \-maccumulate\-args
  \&\-mbranch\-cost=\fR\fIcost\fR  \fB\-mfuse\-add=\fR\fIlevel\fR
  \&\fB\-mcall\-prologues  \-mgas\-isr\-prologues  \-mint8  \-mflmap
*************** in the following sections.
*** 911,919 ****
  .Sp
  \&\fIC6X Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-march=\fR\fIcpu\fR
! \&\fB\-msim  \-msdata=\fR\fIsdata-type\fR
  .Sp
! \&\fI\s-1CRIS\s0 Options\fR
  \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR
  \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stack\-frame=\fR\fIn\fR
  \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects
--- 840,848 ----
  .Sp
  \&\fIC6X Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-march=\fR\fIcpu\fR
! \&\fB\-msim  \-msdata=\fR\fIsdata\-type\fR
  .Sp
! \&\fICRIS Options\fR
  \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR
  \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stack\-frame=\fR\fIn\fR
  \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects
*************** in the following sections.
*** 960,971 ****
  \&\-whatsloaded  \-F  \-gused  \-gfull  \-mmacosx\-version\-min=\fR\fIversion\fR
  \&\fB\-mkernel  \-mone\-byte\-bool\fR
  .Sp
! \&\fI\s-1DEC\s0 Alpha Options\fR
  \&\fB\-mno\-fp\-regs  \-msoft\-float
  \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant
  \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR
  \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants
! \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR
  \&\fB\-mbwx  \-mmax  \-mfix  \-mcix
  \&\-mfloat\-vax  \-mfloat\-ieee
  \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data
--- 889,900 ----
  \&\-whatsloaded  \-F  \-gused  \-gfull  \-mmacosx\-version\-min=\fR\fIversion\fR
  \&\fB\-mkernel  \-mone\-byte\-bool\fR
  .Sp
! \&\fIDEC Alpha Options\fR
  \&\fB\-mno\-fp\-regs  \-msoft\-float
  \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant
  \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR
  \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants
! \&\-mcpu=\fR\fIcpu\-type\fR  \fB\-mtune=\fR\fIcpu\-type\fR
  \&\fB\-mbwx  \-mmax  \-mfix  \-mcix
  \&\-mfloat\-vax  \-mfloat\-ieee
  \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data
*************** in the following sections.
*** 978,990 ****
  \&\-mjmp32 \-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR
  \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR
  .Sp
! \&\fI\s-1FR30\s0 Options\fR
  \&\fB\-msmall\-model  \-mno\-lsim\fR
  .Sp
! \&\fI\s-1FT32\s0 Options\fR
  \&\fB\-msim  \-mlra  \-mnodiv  \-mft32b  \-mcompress  \-mnopm\fR
  .Sp
! \&\fI\s-1FRV\s0 Options\fR
  \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64
  \&\-mhard\-float  \-msoft\-float
  \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword
--- 907,919 ----
  \&\-mjmp32 \-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR
  \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR
  .Sp
! \&\fIFR30 Options\fR
  \&\fB\-msmall\-model  \-mno\-lsim\fR
  .Sp
! \&\fIFT32 Options\fR
  \&\fB\-msim  \-mlra  \-mnodiv  \-mft32b  \-mcompress  \-mnopm\fR
  .Sp
! \&\fIFRV Options\fR
  \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64
  \&\-mhard\-float  \-msoft\-float
  \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword
*************** in the following sections.
*** 1009,1020 ****
  \&\fIH8/300 Options\fR
  \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr  \-mno\-exr  \-mint32  \-malign\-300\fR
  .Sp
! \&\fI\s-1HPPA\s0 Options\fR
! \&\fB\-march=\fR\fIarchitecture-type\fR
  \&\fB\-matomic\-libcalls  \-mbig\-switch
  \&\-mcaller\-copies  \-mdisable\-fpregs  \-mdisable\-indexing
  \&\-mordered  \-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld
! \&\-mfixed\-range=\fR\fIregister-range\fR
  \&\fB\-mcoherent\-ldcw \-mjump\-in\-delay  \-mlinker\-opt  \-mlong\-calls
  \&\-mlong\-load\-store  \-mno\-atomic\-libcalls  \-mno\-disable\-fpregs
  \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas
--- 938,949 ----
  \&\fIH8/300 Options\fR
  \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr  \-mno\-exr  \-mint32  \-malign\-300\fR
  .Sp
! \&\fIHPPA Options\fR
! \&\fB\-march=\fR\fIarchitecture\-type\fR
  \&\fB\-matomic\-libcalls  \-mbig\-switch
  \&\-mcaller\-copies  \-mdisable\-fpregs  \-mdisable\-indexing
  \&\-mordered  \-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld
! \&\-mfixed\-range=\fR\fIregister\-range\fR
  \&\fB\-mcoherent\-ldcw \-mjump\-in\-delay  \-mlinker\-opt  \-mlong\-calls
  \&\-mlong\-load\-store  \-mno\-atomic\-libcalls  \-mno\-disable\-fpregs
  \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas
*************** in the following sections.
*** 1022,1031 ****
  \&\-mno\-portable\-runtime  \-mno\-soft\-float
  \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0
  \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime
! \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msoft\-mult  \-msio  \-mwsio
! \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
  .Sp
! \&\fI\s-1IA\-64\s0 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic
  \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata  \-mno\-sdata
  \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd
--- 951,960 ----
  \&\-mno\-portable\-runtime  \-mno\-soft\-float
  \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0
  \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime
! \&\-mschedule=\fR\fIcpu\-type\fR  \fB\-mspace\-regs  \-msoft\-mult  \-msio  \-mwsio
! \&\-munix=\fR\fIunix\-std\fR  \fB\-nolibdld  \-static  \-threads\fR
  .Sp
! \&\fIIA\-64 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic
  \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata  \-mno\-sdata
  \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd
*************** in the following sections.
*** 1038,1060 ****
  \&\-minline\-sqrt\-min\-latency  \-minline\-sqrt\-max\-throughput
  \&\-mno\-inline\-sqrt
  \&\-mdwarf2\-asm  \-mearly\-stop\-bits
! \&\-mfixed\-range=\fR\fIregister-range\fR  \fB\-mtls\-size=\fR\fItls-size\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-milp32  \-mlp64
  \&\-msched\-br\-data\-spec  \-msched\-ar\-data\-spec  \-msched\-control\-spec
  \&\-msched\-br\-in\-data\-spec  \-msched\-ar\-in\-data\-spec  \-msched\-in\-control\-spec
  \&\-msched\-spec\-ldc  \-msched\-spec\-control\-ldc
  \&\-msched\-prefer\-non\-data\-spec\-insns  \-msched\-prefer\-non\-control\-spec\-insns
  \&\-msched\-stop\-bits\-after\-every\-cycle  \-msched\-count\-spec\-in\-critical\-path
  \&\-msel\-sched\-dont\-check\-control\-spec  \-msched\-fp\-mem\-deps\-zero\-cost
! \&\-msched\-max\-memory\-insns\-hard\-limit  \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
  .Sp
! \&\fI\s-1LM32\s0 Options\fR
  \&\fB\-mbarrel\-shift\-enabled  \-mdivide\-enabled  \-mmultiply\-enabled
  \&\-msign\-extend\-enabled  \-muser\-enabled\fR
  .Sp
  \&\fILoongArch Options\fR
! \&\fB\-march=\fR\fIarch-type\fR  \fB\-mtune=\fR\fItune-type\fR \fB\-mabi=\fR\fIbase-abi-type\fR
! \&\fB\-mfpu=\fR\fIfpu-type\fR \fB\-msimd=\fR\fIsimd-type\fR
  \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mno\-lsx \-mlasx \-mno\-lasx
  \&\-mbranch\-cost=\fR\fIn\fR  \fB\-mcheck\-zero\-division \-mno\-check\-zero\-division
  \&\-mcond\-move\-int  \-mno\-cond\-move\-int
--- 967,989 ----
  \&\-minline\-sqrt\-min\-latency  \-minline\-sqrt\-max\-throughput
  \&\-mno\-inline\-sqrt
  \&\-mdwarf2\-asm  \-mearly\-stop\-bits
! \&\-mfixed\-range=\fR\fIregister\-range\fR  \fB\-mtls\-size=\fR\fItls\-size\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR  \fB\-milp32  \-mlp64
  \&\-msched\-br\-data\-spec  \-msched\-ar\-data\-spec  \-msched\-control\-spec
  \&\-msched\-br\-in\-data\-spec  \-msched\-ar\-in\-data\-spec  \-msched\-in\-control\-spec
  \&\-msched\-spec\-ldc  \-msched\-spec\-control\-ldc
  \&\-msched\-prefer\-non\-data\-spec\-insns  \-msched\-prefer\-non\-control\-spec\-insns
  \&\-msched\-stop\-bits\-after\-every\-cycle  \-msched\-count\-spec\-in\-critical\-path
  \&\-msel\-sched\-dont\-check\-control\-spec  \-msched\-fp\-mem\-deps\-zero\-cost
! \&\-msched\-max\-memory\-insns\-hard\-limit  \-msched\-max\-memory\-insns=\fR\fImax\-insns\fR
  .Sp
! \&\fILM32 Options\fR
  \&\fB\-mbarrel\-shift\-enabled  \-mdivide\-enabled  \-mmultiply\-enabled
  \&\-msign\-extend\-enabled  \-muser\-enabled\fR
  .Sp
  \&\fILoongArch Options\fR
! \&\fB\-march=\fR\fIarch\-type\fR  \fB\-mtune=\fR\fItune\-type\fR \fB\-mabi=\fR\fIbase\-abi\-type\fR
! \&\fB\-mfpu=\fR\fIfpu\-type\fR \fB\-msimd=\fR\fIsimd\-type\fR
  \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mno\-lsx \-mlasx \-mno\-lasx
  \&\-mbranch\-cost=\fR\fIn\fR  \fB\-mcheck\-zero\-division \-mno\-check\-zero\-division
  \&\-mcond\-move\-int  \-mno\-cond\-move\-int
*************** in the following sections.
*** 1063,1069 ****
  \&\-mmax\-inline\-memcpy\-size=\fR\fIn\fR
  \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs
  \&\-mdirect\-extern\-access \-mno\-direct\-extern\-access
! \&\-mcmodel=\fR\fIcode-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as
  \&\-mrecip  \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mno\-frecipe \-mdiv32 \-mno\-div32
  \&\-mlam\-bh \-mno\-lam\-bh \-mlamcas \-mno\-lamcas \-mld\-seq\-sa \-mno\-ld\-seq\-sa
  \&\-mtls\-dialect=\fR\fIopt\fR
--- 992,998 ----
  \&\-mmax\-inline\-memcpy\-size=\fR\fIn\fR
  \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs
  \&\-mdirect\-extern\-access \-mno\-direct\-extern\-access
! \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as
  \&\-mrecip  \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mno\-frecipe \-mdiv32 \-mno\-div32
  \&\-mlam\-bh \-mno\-lam\-bh \-mlamcas \-mno\-lamcas \-mld\-seq\-sa \-mno\-ld\-seq\-sa
  \&\-mtls\-dialect=\fR\fIopt\fR
*************** in the following sections.
*** 1074,1081 ****
  \&\-malign\-loops  \-mno\-align\-loops
  \&\-missue\-rate=\fR\fInumber\fR
  \&\fB\-mbranch\-cost=\fR\fInumber\fR
! \&\fB\-mmodel=\fR\fIcode-size-model-type\fR
! \&\fB\-msdata=\fR\fIsdata-type\fR
  \&\fB\-mno\-flush\-func  \-mflush\-func=\fR\fIname\fR
  \&\fB\-mno\-flush\-trap  \-mflush\-trap=\fR\fInumber\fR
  \&\fB\-G\fR \fInum\fR
--- 1003,1010 ----
  \&\-malign\-loops  \-mno\-align\-loops
  \&\-missue\-rate=\fR\fInumber\fR
  \&\fB\-mbranch\-cost=\fR\fInumber\fR
! \&\fB\-mmodel=\fR\fIcode\-size\-model\-type\fR
! \&\fB\-msdata=\fR\fIsdata\-type\fR
  \&\fB\-mno\-flush\-func  \-mflush\-func=\fR\fIname\fR
  \&\fB\-mno\-flush\-trap  \-mflush\-trap=\fR\fInumber\fR
  \&\fB\-G\fR \fInum\fR
*************** in the following sections.
*** 1106,1115 ****
  \&\fB\-mmemcpy  \-mxl\-soft\-mul  \-mxl\-soft\-div  \-mxl\-barrel\-shift
  \&\-mxl\-pattern\-compare  \-mxl\-stack\-check  \-mxl\-gp\-opt  \-mno\-clearbss
  \&\-mxl\-multiply\-high  \-mxl\-float\-convert  \-mxl\-float\-sqrt
! \&\-mbig\-endian  \-mlittle\-endian  \-mxl\-reorder  \-mxl\-mode\-\fR\fIapp-model\fR
  \&\fB\-mpic\-data\-is\-text\-relative\fR
  .Sp
! \&\fI\s-1MIPS\s0 Options\fR
  \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR
  \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5
  \&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6
--- 1035,1044 ----
  \&\fB\-mmemcpy  \-mxl\-soft\-mul  \-mxl\-soft\-div  \-mxl\-barrel\-shift
  \&\-mxl\-pattern\-compare  \-mxl\-stack\-check  \-mxl\-gp\-opt  \-mno\-clearbss
  \&\-mxl\-multiply\-high  \-mxl\-float\-convert  \-mxl\-float\-sqrt
! \&\-mbig\-endian  \-mlittle\-endian  \-mxl\-reorder  \-mxl\-mode\-\fR\fIapp\-model\fR
  \&\fB\-mpic\-data\-is\-text\-relative\fR
  .Sp
! \&\fIMIPS Options\fR
  \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR
  \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5
  \&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6
*************** in the following sections.
*** 1134,1140 ****
  \&\-mloongson\-mmi  \-mno\-loongson\-mmi
  \&\-mloongson\-ext  \-mno\-loongson\-ext
  \&\-mloongson\-ext2  \-mno\-loongson\-ext2
! \&\-mfpu=\fR\fIfpu-type\fR
  \&\fB\-msmartmips  \-mno\-smartmips
  \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx
  \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc
--- 1063,1069 ----
  \&\-mloongson\-mmi  \-mno\-loongson\-mmi
  \&\-mloongson\-ext  \-mno\-loongson\-ext
  \&\-mloongson\-ext2  \-mno\-loongson\-ext2
! \&\-mfpu=\fR\fIfpu\-type\fR
  \&\fB\-msmartmips  \-mno\-smartmips
  \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx
  \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc
*************** in the following sections.
*** 1169,1198 ****
  \&\-mrelax\-pic\-calls  \-mno\-relax\-pic\-calls  \-mmcount\-ra\-address
  \&\-mframe\-header\-opt  \-mno\-frame\-header\-opt\fR
  .Sp
! \&\fI\s-1MMIX\s0 Options\fR
  \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu
  \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols
  \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses
  \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
  .Sp
! \&\fI\s-1MN10300\s0 Options\fR
  \&\fB\-mmult\-bug  \-mno\-mult\-bug
  \&\-mno\-am33  \-mam33  \-mam33\-2  \-mam34
! \&\-mtune=\fR\fIcpu-type\fR
  \&\fB\-mreturn\-pointer\-on\-d0
  \&\-mno\-crt0  \-mrelax  \-mliw  \-msetlb\fR
  .Sp
  \&\fIMoxie Options\fR
  \&\fB\-meb  \-mel  \-mmul.x  \-mno\-crt0\fR
  .Sp
! \&\fI\s-1MSP430\s0 Options\fR
  \&\fB\-msim  \-masm\-hex  \-mmcu=  \-mcpu=  \-mlarge  \-msmall  \-mrelax
  \&\-mwarn\-mcu
  \&\-mcode\-region=  \-mdata\-region=
  \&\-msilicon\-errata=  \-msilicon\-errata\-warn=
  \&\-mhwmult=  \-minrt  \-mtiny\-printf  \-mmax\-inline\-shift=\fR
  .Sp
! \&\fI\s-1NDS32\s0 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian
  \&\-mreduced\-regs  \-mfull\-regs
  \&\-mcmov  \-mno\-cmov
--- 1098,1127 ----
  \&\-mrelax\-pic\-calls  \-mno\-relax\-pic\-calls  \-mmcount\-ra\-address
  \&\-mframe\-header\-opt  \-mno\-frame\-header\-opt\fR
  .Sp
! \&\fIMMIX Options\fR
  \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu
  \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols
  \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses
  \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
  .Sp
! \&\fIMN10300 Options\fR
  \&\fB\-mmult\-bug  \-mno\-mult\-bug
  \&\-mno\-am33  \-mam33  \-mam33\-2  \-mam34
! \&\-mtune=\fR\fIcpu\-type\fR
  \&\fB\-mreturn\-pointer\-on\-d0
  \&\-mno\-crt0  \-mrelax  \-mliw  \-msetlb\fR
  .Sp
  \&\fIMoxie Options\fR
  \&\fB\-meb  \-mel  \-mmul.x  \-mno\-crt0\fR
  .Sp
! \&\fIMSP430 Options\fR
  \&\fB\-msim  \-masm\-hex  \-mmcu=  \-mcpu=  \-mlarge  \-msmall  \-mrelax
  \&\-mwarn\-mcu
  \&\-mcode\-region=  \-mdata\-region=
  \&\-msilicon\-errata=  \-msilicon\-errata\-warn=
  \&\-mhwmult=  \-minrt  \-mtiny\-printf  \-mmax\-inline\-shift=\fR
  .Sp
! \&\fINDS32 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian
  \&\-mreduced\-regs  \-mfull\-regs
  \&\-mcmov  \-mno\-cmov
*************** in the following sections.
*** 1204,1213 ****
  \&\-misr\-vector\-size=\fR\fInum\fR
  \&\fB\-mcache\-block\-size=\fR\fInum\fR
  \&\fB\-march=\fR\fIarch\fR
! \&\fB\-mcmodel=\fR\fIcode-model\fR
  \&\fB\-mctor\-dtor  \-mrelax\fR
  .Sp
! \&\fINios \s-1II\s0 Options\fR
  \&\fB\-G\fR \fInum\fR  \fB\-mgpopt=\fR\fIoption\fR  \fB\-mgpopt  \-mno\-gpopt
  \&\-mgprel\-sec=\fR\fIregexp\fR  \fB\-mr0rel\-sec=\fR\fIregexp\fR
  \&\fB\-mel  \-meb
--- 1133,1142 ----
  \&\-misr\-vector\-size=\fR\fInum\fR
  \&\fB\-mcache\-block\-size=\fR\fInum\fR
  \&\fB\-march=\fR\fIarch\fR
! \&\fB\-mcmodel=\fR\fIcode\-model\fR
  \&\fB\-mctor\-dtor  \-mrelax\fR
  .Sp
! \&\fINios II Options\fR
  \&\fB\-G\fR \fInum\fR  \fB\-mgpopt=\fR\fIoption\fR  \fB\-mgpopt  \-mno\-gpopt
  \&\-mgprel\-sec=\fR\fIregexp\fR  \fB\-mr0rel\-sec=\fR\fIregexp\fR
  \&\fB\-mel  \-meb
*************** in the following sections.
*** 1220,1226 ****
  \&\fB\-mhal  \-msmallc  \-msys\-crt0=\fR\fIname\fR  \fB\-msys\-lib=\fR\fIname\fR
  \&\fB\-march=\fR\fIarch\fR  \fB\-mbmx  \-mno\-bmx  \-mcdx  \-mno\-cdx\fR
  .Sp
! \&\fINvidia \s-1PTX\s0 Options\fR
  \&\fB\-m64  \-mmainkernel  \-moptimize\fR
  .Sp
  \&\fIOpenRISC Options\fR
--- 1149,1155 ----
  \&\fB\-mhal  \-msmallc  \-msys\-crt0=\fR\fIname\fR  \fB\-msys\-lib=\fR\fIname\fR
  \&\fB\-march=\fR\fIarch\fR  \fB\-mbmx  \-mno\-bmx  \-mcdx  \-mno\-cdx\fR
  .Sp
! \&\fINvidia PTX Options\fR
  \&\fB\-m64  \-mmainkernel  \-moptimize\fR
  .Sp
  \&\fIOpenRISC Options\fR
*************** in the following sections.
*** 1228,1256 ****
  \&\-msoft\-mul  \-msoft\-div
  \&\-msoft\-float  \-mhard\-float  \-mdouble\-float \-munordered\-float
  \&\-mcmov  \-mror  \-mrori  \-msext  \-msfimm  \-mshftimm
! \&\-mcmodel=\fR\fIcode-model\fR
  .Sp
! \&\fI\s-1PDP\-11\s0 Options\fR
  \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10
  \&\-mint32  \-mno\-int16  \-mint16  \-mno\-int32
  \&\-msplit  \-munix\-asm  \-mdec\-asm  \-mgnu\-asm  \-mlra\fR
  .Sp
  \&\fIPowerPC Options\fR
! See \s-1RS/6000\s0 and PowerPC Options.
  .Sp
! \&\fI\s-1PRU\s0 Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-minrt  \-mno\-relax  \-mloop
  \&\-mabi=\fR\fIvariant\fR
  .Sp
! \&\fIRISC-V Options\fR
  \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR
  \&\fB\-mplt  \-mno\-plt
! \&\-mabi=\fR\fIABI-string\fR
  \&\fB\-mfdiv  \-mno\-fdiv
  \&\-mdiv  \-mno\-div
! \&\-misa\-spec=\fR\fIISA-spec-string\fR
! \&\fB\-march=\fR\fIISA-string\fR
! \&\fB\-mtune=\fR\fIprocessor-string\fR
  \&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR
  \&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR
  \&\fB\-msave\-restore  \-mno\-save\-restore
--- 1157,1185 ----
  \&\-msoft\-mul  \-msoft\-div
  \&\-msoft\-float  \-mhard\-float  \-mdouble\-float \-munordered\-float
  \&\-mcmov  \-mror  \-mrori  \-msext  \-msfimm  \-mshftimm
! \&\-mcmodel=\fR\fIcode\-model\fR
  .Sp
! \&\fIPDP\-11 Options\fR
  \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10
  \&\-mint32  \-mno\-int16  \-mint16  \-mno\-int32
  \&\-msplit  \-munix\-asm  \-mdec\-asm  \-mgnu\-asm  \-mlra\fR
  .Sp
  \&\fIPowerPC Options\fR
! See RS/6000 and PowerPC Options.
  .Sp
! \&\fIPRU Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-minrt  \-mno\-relax  \-mloop
  \&\-mabi=\fR\fIvariant\fR
  .Sp
! \&\fIRISC\-V Options\fR
  \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR
  \&\fB\-mplt  \-mno\-plt
! \&\-mabi=\fR\fIABI\-string\fR
  \&\fB\-mfdiv  \-mno\-fdiv
  \&\-mdiv  \-mno\-div
! \&\-misa\-spec=\fR\fIISA\-spec\-string\fR
! \&\fB\-march=\fR\fIISA\-string\fR
! \&\fB\-mtune=\fR\fIprocessor\-string\fR
  \&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR
  \&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR
  \&\fB\-msave\-restore  \-mno\-save\-restore
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1272,1286 ****
  \&\-minline\-strncmp  \-mno\-inline\-strncmp
  \&\-mtls\-dialect=desc  \-mtls\-dialect=trad\fR
  .Sp
! \&\fI\s-1RL78\s0 Options\fR
  \&\fB\-msim  \-mmul=none  \-mmul=g13  \-mmul=g14  \-mallregs
  \&\-mcpu=g10  \-mcpu=g13  \-mcpu=g14  \-mg10  \-mg13  \-mg14
  \&\-m64bit\-doubles  \-m32bit\-doubles  \-msave\-mduc\-in\-interrupts\fR
  .Sp
! \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
! \&\fB\-mcpu=\fR\fIcpu-type\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR
! \&\fB\-mcmodel=\fR\fIcode-model\fR
  \&\fB\-mpowerpc64
  \&\-maltivec  \-mno\-altivec
  \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt
--- 1201,1215 ----
  \&\-minline\-strncmp  \-mno\-inline\-strncmp
  \&\-mtls\-dialect=desc  \-mtls\-dialect=trad\fR
  .Sp
! \&\fIRL78 Options\fR
  \&\fB\-msim  \-mmul=none  \-mmul=g13  \-mmul=g14  \-mallregs
  \&\-mcpu=g10  \-mcpu=g13  \-mcpu=g14  \-mg10  \-mg13  \-mg14
  \&\-m64bit\-doubles  \-m32bit\-doubles  \-msave\-mduc\-in\-interrupts\fR
  .Sp
! \&\fIRS/6000 and PowerPC Options\fR
! \&\fB\-mcpu=\fR\fIcpu\-type\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR
! \&\fB\-mcmodel=\fR\fIcode\-model\fR
  \&\fB\-mpowerpc64
  \&\-maltivec  \-mno\-altivec
  \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1307,1313 ****
  \&\-mcall\-sysv  \-mcall\-sysv\-eabi  \-mcall\-sysv\-noeabi
  \&\-mtraceback=\fR\fItraceback_type\fR
  \&\fB\-maix\-struct\-return  \-msvr4\-struct\-return
! \&\-mabi=\fR\fIabi-type\fR  \fB\-msecure\-plt  \-mbss\-plt
  \&\-mlongcall  \-mno\-longcall  \-mpltseq  \-mno\-pltseq
  \&\-mblock\-move\-inline\-limit=\fR\fInum\fR
  \&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR
--- 1236,1242 ----
  \&\-mcall\-sysv  \-mcall\-sysv\-eabi  \-mcall\-sysv\-noeabi
  \&\-mtraceback=\fR\fItraceback_type\fR
  \&\fB\-maix\-struct\-return  \-msvr4\-struct\-return
! \&\-mabi=\fR\fIabi\-type\fR  \fB\-msecure\-plt  \-mbss\-plt
  \&\-mlongcall  \-mno\-longcall  \-mpltseq  \-mno\-pltseq
  \&\-mblock\-move\-inline\-limit=\fR\fInum\fR
  \&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1338,1344 ****
  \&\-mpcrel \-mno\-pcrel \-mmma \-mno\-mmma \-mrop\-protect \-mno\-rop\-protect
  \&\-mprivileged \-mno\-privileged\fR
  .Sp
! \&\fI\s-1RX\s0 Options\fR
  \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
  \&\-mcpu=
  \&\-mbig\-endian\-data  \-mlittle\-endian\-data
--- 1267,1273 ----
  \&\-mpcrel \-mno\-pcrel \-mmma \-mno\-mmma \-mrop\-protect \-mno\-rop\-protect
  \&\-mprivileged \-mno\-privileged\fR
  .Sp
! \&\fIRX Options\fR
  \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
  \&\-mcpu=
  \&\-mbig\-endian\-data  \-mlittle\-endian\-data
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1355,1361 ****
  \&\-msave\-acc\-in\-interrupts\fR
  .Sp
  \&\fIS/390 and zSeries Options\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR
  \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp  \-mno\-hard\-dfp
  \&\-mlong\-double\-64  \-mlong\-double\-128
  \&\-mbackchain  \-mno\-backchain  \-mpacked\-stack  \-mno\-packed\-stack
--- 1284,1290 ----
  \&\-msave\-acc\-in\-interrupts\fR
  .Sp
  \&\fIS/390 and zSeries Options\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR  \fB\-march=\fR\fIcpu\-type\fR
  \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp  \-mno\-hard\-dfp
  \&\-mlong\-double\-64  \-mlong\-double\-128
  \&\-mbackchain  \-mno\-backchain  \-mpacked\-stack  \-mno\-packed\-stack
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1367,1373 ****
  \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size  \-mstack\-guard
  \&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
  .Sp
! \&\fI\s-1SH\s0 Options\fR
  \&\fB\-m1  \-m2  \-m2e
  \&\-m2a\-nofpu  \-m2a\-single\-only  \-m2a\-single  \-m2a
  \&\-m3  \-m3e
--- 1296,1302 ----
  \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size  \-mstack\-guard
  \&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
  .Sp
! \&\fISH Options\fR
  \&\fB\-m1  \-m2  \-m2e
  \&\-m2a\-nofpu  \-m2a\-single\-only  \-m2a\-single  \-m2a
  \&\-m3  \-m3e
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1377,1385 ****
  \&\-mbigtable  \-mfmovd  \-mrenesas  \-mno\-renesas  \-mnomacsave
  \&\-mieee  \-mno\-ieee  \-mbitops  \-misize  \-minline\-ic_invalidate  \-mpadstruct
  \&\-mprefergot  \-musermode  \-multcost=\fR\fInumber\fR  \fB\-mdiv=\fR\fIstrategy\fR
! \&\fB\-mdivsi3_libfunc=\fR\fIname\fR  \fB\-mfixed\-range=\fR\fIregister-range\fR
  \&\fB\-maccumulate\-outgoing\-args
! \&\-matomic\-model=\fR\fIatomic-model\fR
  \&\fB\-mbranch\-cost=\fR\fInum\fR  \fB\-mzdcbranch  \-mno\-zdcbranch
  \&\-mcbranch\-force\-delay\-slot
  \&\-mfused\-madd  \-mno\-fused\-madd  \-mfsca  \-mno\-fsca  \-mfsrra  \-mno\-fsrra
--- 1306,1314 ----
  \&\-mbigtable  \-mfmovd  \-mrenesas  \-mno\-renesas  \-mnomacsave
  \&\-mieee  \-mno\-ieee  \-mbitops  \-misize  \-minline\-ic_invalidate  \-mpadstruct
  \&\-mprefergot  \-musermode  \-multcost=\fR\fInumber\fR  \fB\-mdiv=\fR\fIstrategy\fR
! \&\fB\-mdivsi3_libfunc=\fR\fIname\fR  \fB\-mfixed\-range=\fR\fIregister\-range\fR
  \&\fB\-maccumulate\-outgoing\-args
! \&\-matomic\-model=\fR\fIatomic\-model\fR
  \&\fB\-mbranch\-cost=\fR\fInum\fR  \fB\-mzdcbranch  \-mno\-zdcbranch
  \&\-mcbranch\-force\-delay\-slot
  \&\-mfused\-madd  \-mno\-fused\-madd  \-mfsca  \-mno\-fsca  \-mfsrra  \-mno\-fsrra
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1389,1399 ****
  \&\fB\-mclear\-hwcap  \-mno\-clear\-hwcap  \-mimpure\-text  \-mno\-impure\-text
  \&\-pthreads\fR
  .Sp
! \&\fI\s-1SPARC\s0 Options\fR
! \&\fB\-mcpu=\fR\fIcpu-type\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR
! \&\fB\-mcmodel=\fR\fIcode-model\fR
! \&\fB\-mmemory\-model=\fR\fImem-model\fR
  \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs
  \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat
  \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
--- 1318,1328 ----
  \&\fB\-mclear\-hwcap  \-mno\-clear\-hwcap  \-mimpure\-text  \-mno\-impure\-text
  \&\-pthreads\fR
  .Sp
! \&\fISPARC Options\fR
! \&\fB\-mcpu=\fR\fIcpu\-type\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR
! \&\fB\-mcmodel=\fR\fIcode\-model\fR
! \&\fB\-mmemory\-model=\fR\fImem\-model\fR
  \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs
  \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat
  \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1430,1443 ****
  \&\-mrh850\-abi
  \&\-mbig\-switch\fR
  .Sp
! \&\fI\s-1VAX\s0 Options\fR
  \&\fB\-mg  \-mgnu  \-munix  \-mlra\fR
  .Sp
  \&\fIVisium Options\fR
  \&\fB\-mdebug  \-msim  \-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
! \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR  \fB\-msv\-mode  \-muser\-mode\fR
  .Sp
! \&\fI\s-1VMS\s0 Options\fR
  \&\fB\-mvms\-return\-codes  \-mdebug\-main=\fR\fIprefix\fR  \fB\-mmalloc64
  \&\-mpointer\-size=\fR\fIsize\fR
  .Sp
--- 1359,1372 ----
  \&\-mrh850\-abi
  \&\-mbig\-switch\fR
  .Sp
! \&\fIVAX Options\fR
  \&\fB\-mg  \-mgnu  \-munix  \-mlra\fR
  .Sp
  \&\fIVisium Options\fR
  \&\fB\-mdebug  \-msim  \-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
! \&\-mcpu=\fR\fIcpu\-type\fR  \fB\-mtune=\fR\fIcpu\-type\fR  \fB\-msv\-mode  \-muser\-mode\fR
  .Sp
! \&\fIVMS Options\fR
  \&\fB\-mvms\-return\-codes  \-mdebug\-main=\fR\fIprefix\fR  \fB\-mmalloc64
  \&\-mpointer\-size=\fR\fIsize\fR
  .Sp
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1446,1453 ****
  \&\-Xbind\-lazy  \-Xbind\-now\fR
  .Sp
  \&\fIx86 Options\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR  \fB\-mdump\-tune\-features  \-mno\-default
  \&\-mfpmath=\fR\fIunit\fR
  \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387
  \&\-mno\-fp\-ret\-in\-387  \-m80387  \-mhard\-float  \-msoft\-float
--- 1375,1382 ----
  \&\-Xbind\-lazy  \-Xbind\-now\fR
  .Sp
  \&\fIx86 Options\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR  \fB\-march=\fR\fIcpu\-type\fR
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR  \fB\-mdump\-tune\-features  \-mno\-default
  \&\-mfpmath=\fR\fIunit\fR
  \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387
  \&\-mno\-fp\-ret\-in\-387  \-m80387  \-mhard\-float  \-msoft\-float
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1487,1493 ****
  \&\-mveclibabi=\fR\fItype\fR  \fB\-mvect8\-ret\-in\-mem
  \&\-mpc32  \-mpc64  \-mpc80  \-mdaz\-ftz \-mstackrealign
  \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone  \-mno\-tls\-direct\-seg\-refs
! \&\-mcmodel=\fR\fIcode-model\fR  \fB\-mabi=\fR\fIname\fR  \fB\-maddress\-mode=\fR\fImode\fR
  \&\fB\-m32  \-m64  \-mx32  \-m16  \-miamcu  \-mlarge\-data\-threshold=\fR\fInum\fR
  \&\fB\-msse2avx  \-mfentry  \-mrecord\-mcount  \-mnop\-mcount  \-m8bit\-idiv
  \&\-minstrument\-return=\fR\fItype\fR \fB\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR
--- 1416,1422 ----
  \&\-mveclibabi=\fR\fItype\fR  \fB\-mvect8\-ret\-in\-mem
  \&\-mpc32  \-mpc64  \-mpc80  \-mdaz\-ftz \-mstackrealign
  \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone  \-mno\-tls\-direct\-seg\-refs
! \&\-mcmodel=\fR\fIcode\-model\fR  \fB\-mabi=\fR\fIname\fR  \fB\-maddress\-mode=\fR\fImode\fR
  \&\fB\-m32  \-m64  \-mx32  \-m16  \-miamcu  \-mlarge\-data\-threshold=\fR\fInum\fR
  \&\fB\-msse2avx  \-mfentry  \-mrecord\-mcount  \-mnop\-mcount  \-m8bit\-idiv
  \&\-minstrument\-return=\fR\fItype\fR \fB\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1519,1525 ****
  \&\-mauto\-litpools  \-mno\-auto\-litpools
  \&\-mtarget\-align  \-mno\-target\-align
  \&\-mlongcalls  \-mno\-longcalls
! \&\-mabi=\fR\fIabi-type\fR
  \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR
  \&\fB\-mstrict\-align  \-mno\-strict\-align\fR
  .Sp
--- 1448,1454 ----
  \&\-mauto\-litpools  \-mno\-auto\-litpools
  \&\-mtarget\-align  \-mno\-target\-align
  \&\-mlongcalls  \-mno\-longcalls
! \&\-mabi=\fR\fIabi\-type\fR
  \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR
  \&\fB\-mstrict\-align  \-mno\-strict\-align\fR
  .Sp
*************** See S/390 and zSeries Options.
*** 1528,1534 ****
  .SS "Options Controlling the Kind of Output"
  .IX Subsection "Options Controlling the Kind of Output"
  Compilation can involve up to four stages: preprocessing, compilation
! proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
  preprocessing and compiling several files either into several
  assembler input files, or into one assembler input file; then each
  assembler input file produces an object file, and linking combines all
--- 1457,1463 ----
  .SS "Options Controlling the Kind of Output"
  .IX Subsection "Options Controlling the Kind of Output"
  Compilation can involve up to four stages: preprocessing, compilation
! proper, assembly and linking, always in that order.  GCC is capable of
  preprocessing and compiling several files either into several
  assembler input files, or into one assembler input file; then each
  assembler input file produces an object file, and linking combines all
*************** into an executable file.
*** 1537,1707 ****
  .PP
  For any given input file, the file name suffix determines what kind of
  compilation is done:
! .IP "\fIfile\fR\fB.c\fR" 4
  .IX Item "file.c"
  C source code that must be preprocessed.
! .IP "\fIfile\fR\fB.i\fR" 4
  .IX Item "file.i"
  C source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.ii\fR" 4
  .IX Item "file.ii"
! \&\*(C+ source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.m\fR" 4
  .IX Item "file.m"
! Objective-C source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective-C program work.
! .IP "\fIfile\fR\fB.mi\fR" 4
  .IX Item "file.mi"
! Objective-C source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.mm\fR" 4
  .IX Item "file.mm"
  .PD 0
! .IP "\fIfile\fR\fB.M\fR" 4
  .IX Item "file.M"
  .PD
! Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
  to a literal capital M.
! .IP "\fIfile\fR\fB.mii\fR" 4
  .IX Item "file.mii"
! Objective\-\*(C+ source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.h\fR" 4
  .IX Item "file.h"
! C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
! precompiled header (default), or C, \*(C+ header file to be turned into an
  Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
! .IP "\fIfile\fR\fB.cc\fR" 4
  .IX Item "file.cc"
  .PD 0
! .IP "\fIfile\fR\fB.cp\fR" 4
  .IX Item "file.cp"
! .IP "\fIfile\fR\fB.cxx\fR" 4
  .IX Item "file.cxx"
! .IP "\fIfile\fR\fB.cpp\fR" 4
  .IX Item "file.cpp"
! .IP "\fIfile\fR\fB.CPP\fR" 4
  .IX Item "file.CPP"
! .IP "\fIfile\fR\fB.c++\fR" 4
  .IX Item "file.c++"
! .IP "\fIfile\fR\fB.C\fR" 4
  .IX Item "file.C"
  .PD
! \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
  the last two letters must both be literally \fBx\fR.  Likewise,
  \&\fB.C\fR refers to a literal capital C.
! .IP "\fIfile\fR\fB.mm\fR" 4
  .IX Item "file.mm"
  .PD 0
! .IP "\fIfile\fR\fB.M\fR" 4
  .IX Item "file.M"
  .PD
! Objective\-\*(C+ source code that must be preprocessed.
! .IP "\fIfile\fR\fB.mii\fR" 4
  .IX Item "file.mii"
! Objective\-\*(C+ source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.hh\fR" 4
  .IX Item "file.hh"
  .PD 0
! .IP "\fIfile\fR\fB.H\fR" 4
  .IX Item "file.H"
! .IP "\fIfile\fR\fB.hp\fR" 4
  .IX Item "file.hp"
! .IP "\fIfile\fR\fB.hxx\fR" 4
  .IX Item "file.hxx"
! .IP "\fIfile\fR\fB.hpp\fR" 4
  .IX Item "file.hpp"
! .IP "\fIfile\fR\fB.HPP\fR" 4
  .IX Item "file.HPP"
! .IP "\fIfile\fR\fB.h++\fR" 4
  .IX Item "file.h++"
! .IP "\fIfile\fR\fB.tcc\fR" 4
  .IX Item "file.tcc"
  .PD
! \&\*(C+ header file to be turned into a precompiled header or Ada spec.
! .IP "\fIfile\fR\fB.f\fR" 4
  .IX Item "file.f"
  .PD 0
! .IP "\fIfile\fR\fB.for\fR" 4
  .IX Item "file.for"
! .IP "\fIfile\fR\fB.ftn\fR" 4
  .IX Item "file.ftn"
! .IP "\fIfile\fR\fB.fi\fR" 4
  .IX Item "file.fi"
  .PD
  Fixed form Fortran source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.F\fR" 4
  .IX Item "file.F"
  .PD 0
! .IP "\fIfile\fR\fB.FOR\fR" 4
  .IX Item "file.FOR"
! .IP "\fIfile\fR\fB.fpp\fR" 4
  .IX Item "file.fpp"
! .IP "\fIfile\fR\fB.FPP\fR" 4
  .IX Item "file.FPP"
! .IP "\fIfile\fR\fB.FTN\fR" 4
  .IX Item "file.FTN"
  .PD
  Fixed form Fortran source code that must be preprocessed (with the traditional
  preprocessor).
! .IP "\fIfile\fR\fB.f90\fR" 4
  .IX Item "file.f90"
  .PD 0
! .IP "\fIfile\fR\fB.f95\fR" 4
  .IX Item "file.f95"
! .IP "\fIfile\fR\fB.f03\fR" 4
  .IX Item "file.f03"
! .IP "\fIfile\fR\fB.f08\fR" 4
  .IX Item "file.f08"
! .IP "\fIfile\fR\fB.fii\fR" 4
  .IX Item "file.fii"
  .PD
  Free form Fortran source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.F90\fR" 4
  .IX Item "file.F90"
  .PD 0
! .IP "\fIfile\fR\fB.F95\fR" 4
  .IX Item "file.F95"
! .IP "\fIfile\fR\fB.F03\fR" 4
  .IX Item "file.F03"
! .IP "\fIfile\fR\fB.F08\fR" 4
  .IX Item "file.F08"
  .PD
  Free form Fortran source code that must be preprocessed (with the
  traditional preprocessor).
! .IP "\fIfile\fR\fB.go\fR" 4
  .IX Item "file.go"
  Go source code.
! .IP "\fIfile\fR\fB.d\fR" 4
  .IX Item "file.d"
  D source code.
! .IP "\fIfile\fR\fB.di\fR" 4
  .IX Item "file.di"
  D interface file.
! .IP "\fIfile\fR\fB.dd\fR" 4
  .IX Item "file.dd"
  D documentation code (Ddoc).
! .IP "\fIfile\fR\fB.ads\fR" 4
  .IX Item "file.ads"
  Ada source code file that contains a library unit declaration (a
  declaration of a package, subprogram, or generic, or a generic
  instantiation), or a library unit renaming declaration (a package,
  generic, or subprogram renaming declaration).  Such files are also
  called \fIspecs\fR.
! .IP "\fIfile\fR\fB.adb\fR" 4
  .IX Item "file.adb"
  Ada source code file containing a library unit body (a subprogram or
  package body).  Such files are also called \fIbodies\fR.
! .IP "\fIfile\fR\fB.s\fR" 4
  .IX Item "file.s"
  Assembler code.
! .IP "\fIfile\fR\fB.S\fR" 4
  .IX Item "file.S"
  .PD 0
! .IP "\fIfile\fR\fB.sx\fR" 4
  .IX Item "file.sx"
  .PD
  Assembler code that must be preprocessed.
! .IP "\fIother\fR" 4
  .IX Item "other"
  An object file to be fed straight into linking.
  Any file name with no recognized suffix is treated this way.
--- 1466,1636 ----
  .PP
  For any given input file, the file name suffix determines what kind of
  compilation is done:
! .IP \fIfile\fR\fB.c\fR 4
  .IX Item "file.c"
  C source code that must be preprocessed.
! .IP \fIfile\fR\fB.i\fR 4
  .IX Item "file.i"
  C source code that should not be preprocessed.
! .IP \fIfile\fR\fB.ii\fR 4
  .IX Item "file.ii"
! C++ source code that should not be preprocessed.
! .IP \fIfile\fR\fB.m\fR 4
  .IX Item "file.m"
! Objective\-C source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective\-C program work.
! .IP \fIfile\fR\fB.mi\fR 4
  .IX Item "file.mi"
! Objective\-C source code that should not be preprocessed.
! .IP \fIfile\fR\fB.mm\fR 4
  .IX Item "file.mm"
  .PD 0
! .IP \fIfile\fR\fB.M\fR 4
  .IX Item "file.M"
  .PD
! Objective\-C++ source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective\-C++ program work.  Note that \fB.M\fR refers
  to a literal capital M.
! .IP \fIfile\fR\fB.mii\fR 4
  .IX Item "file.mii"
! Objective\-C++ source code that should not be preprocessed.
! .IP \fIfile\fR\fB.h\fR 4
  .IX Item "file.h"
! C, C++, Objective\-C or Objective\-C++ header file to be turned into a
! precompiled header (default), or C, C++ header file to be turned into an
  Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
! .IP \fIfile\fR\fB.cc\fR 4
  .IX Item "file.cc"
  .PD 0
! .IP \fIfile\fR\fB.cp\fR 4
  .IX Item "file.cp"
! .IP \fIfile\fR\fB.cxx\fR 4
  .IX Item "file.cxx"
! .IP \fIfile\fR\fB.cpp\fR 4
  .IX Item "file.cpp"
! .IP \fIfile\fR\fB.CPP\fR 4
  .IX Item "file.CPP"
! .IP \fIfile\fR\fB.c++\fR 4
  .IX Item "file.c++"
! .IP \fIfile\fR\fB.C\fR 4
  .IX Item "file.C"
  .PD
! C++ source code that must be preprocessed.  Note that in \fB.cxx\fR,
  the last two letters must both be literally \fBx\fR.  Likewise,
  \&\fB.C\fR refers to a literal capital C.
! .IP \fIfile\fR\fB.mm\fR 4
  .IX Item "file.mm"
  .PD 0
! .IP \fIfile\fR\fB.M\fR 4
  .IX Item "file.M"
  .PD
! Objective\-C++ source code that must be preprocessed.
! .IP \fIfile\fR\fB.mii\fR 4
  .IX Item "file.mii"
! Objective\-C++ source code that should not be preprocessed.
! .IP \fIfile\fR\fB.hh\fR 4
  .IX Item "file.hh"
  .PD 0
! .IP \fIfile\fR\fB.H\fR 4
  .IX Item "file.H"
! .IP \fIfile\fR\fB.hp\fR 4
  .IX Item "file.hp"
! .IP \fIfile\fR\fB.hxx\fR 4
  .IX Item "file.hxx"
! .IP \fIfile\fR\fB.hpp\fR 4
  .IX Item "file.hpp"
! .IP \fIfile\fR\fB.HPP\fR 4
  .IX Item "file.HPP"
! .IP \fIfile\fR\fB.h++\fR 4
  .IX Item "file.h++"
! .IP \fIfile\fR\fB.tcc\fR 4
  .IX Item "file.tcc"
  .PD
! C++ header file to be turned into a precompiled header or Ada spec.
! .IP \fIfile\fR\fB.f\fR 4
  .IX Item "file.f"
  .PD 0
! .IP \fIfile\fR\fB.for\fR 4
  .IX Item "file.for"
! .IP \fIfile\fR\fB.ftn\fR 4
  .IX Item "file.ftn"
! .IP \fIfile\fR\fB.fi\fR 4
  .IX Item "file.fi"
  .PD
  Fixed form Fortran source code that should not be preprocessed.
! .IP \fIfile\fR\fB.F\fR 4
  .IX Item "file.F"
  .PD 0
! .IP \fIfile\fR\fB.FOR\fR 4
  .IX Item "file.FOR"
! .IP \fIfile\fR\fB.fpp\fR 4
  .IX Item "file.fpp"
! .IP \fIfile\fR\fB.FPP\fR 4
  .IX Item "file.FPP"
! .IP \fIfile\fR\fB.FTN\fR 4
  .IX Item "file.FTN"
  .PD
  Fixed form Fortran source code that must be preprocessed (with the traditional
  preprocessor).
! .IP \fIfile\fR\fB.f90\fR 4
  .IX Item "file.f90"
  .PD 0
! .IP \fIfile\fR\fB.f95\fR 4
  .IX Item "file.f95"
! .IP \fIfile\fR\fB.f03\fR 4
  .IX Item "file.f03"
! .IP \fIfile\fR\fB.f08\fR 4
  .IX Item "file.f08"
! .IP \fIfile\fR\fB.fii\fR 4
  .IX Item "file.fii"
  .PD
  Free form Fortran source code that should not be preprocessed.
! .IP \fIfile\fR\fB.F90\fR 4
  .IX Item "file.F90"
  .PD 0
! .IP \fIfile\fR\fB.F95\fR 4
  .IX Item "file.F95"
! .IP \fIfile\fR\fB.F03\fR 4
  .IX Item "file.F03"
! .IP \fIfile\fR\fB.F08\fR 4
  .IX Item "file.F08"
  .PD
  Free form Fortran source code that must be preprocessed (with the
  traditional preprocessor).
! .IP \fIfile\fR\fB.go\fR 4
  .IX Item "file.go"
  Go source code.
! .IP \fIfile\fR\fB.d\fR 4
  .IX Item "file.d"
  D source code.
! .IP \fIfile\fR\fB.di\fR 4
  .IX Item "file.di"
  D interface file.
! .IP \fIfile\fR\fB.dd\fR 4
  .IX Item "file.dd"
  D documentation code (Ddoc).
! .IP \fIfile\fR\fB.ads\fR 4
  .IX Item "file.ads"
  Ada source code file that contains a library unit declaration (a
  declaration of a package, subprogram, or generic, or a generic
  instantiation), or a library unit renaming declaration (a package,
  generic, or subprogram renaming declaration).  Such files are also
  called \fIspecs\fR.
! .IP \fIfile\fR\fB.adb\fR 4
  .IX Item "file.adb"
  Ada source code file containing a library unit body (a subprogram or
  package body).  Such files are also called \fIbodies\fR.
! .IP \fIfile\fR\fB.s\fR 4
  .IX Item "file.s"
  Assembler code.
! .IP \fIfile\fR\fB.S\fR 4
  .IX Item "file.S"
  .PD 0
! .IP \fIfile\fR\fB.sx\fR 4
  .IX Item "file.sx"
  .PD
  Assembler code that must be preprocessed.
! .IP \fIother\fR 4
  .IX Item "other"
  An object file to be fed straight into linking.
  Any file name with no recognized suffix is treated this way.
*************** Specify explicitly the \fIlanguage\fR fo
*** 1714,1729 ****
  name suffix).  This option applies to all following input files until
  the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
  .Sp
! .Vb 9
  \&        c  c\-header  cpp\-output
  \&        c++  c++\-header  c++\-system\-header c++\-user\-header c++\-cpp\-output
! \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
! \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
  \&        assembler  assembler\-with\-cpp
! \&        ada
  \&        d
! \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
  \&        go
  .Ve
  .IP "\fB\-x none\fR" 4
  .IX Item "-x none"
--- 1643,1662 ----
  name suffix).  This option applies to all following input files until
  the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
  .Sp
! .Vb 10
  \&        c  c\-header  cpp\-output
  \&        c++  c++\-header  c++\-system\-header c++\-user\-header c++\-cpp\-output
! \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output  objc\-cpp\-output
! \&        objective\-c++  objective\-c++\-header  objective\-c++\-cpp\-output
! \&        objc++\-cpp\-output
  \&        assembler  assembler\-with\-cpp
! \&        ada  adascil  adawhy
  \&        d
! \&        f77  f77\-cpp\-input  f95  f95\-cpp\-input
  \&        go
+ \&        modula\-2  modula\-2\-cpp\-output
+ \&        rust
+ \&        lto
  .Ve
  .IP "\fB\-x none\fR" 4
  .IX Item "-x none"
*************** If you only want some of the stages of c
*** 1735,1742 ****
  \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
  one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
  \&\fBgcc\fR is to stop.  Note that some combinations (for example,
! \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
! .IP "\fB\-c\fR" 4
  .IX Item "-c"
  Compile or assemble the source files, but do not link.  The linking
  stage simply is not done.  The ultimate output is in the form of an
--- 1668,1675 ----
  \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
  one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
  \&\fBgcc\fR is to stop.  Note that some combinations (for example,
! \&\fB\-x cpp\-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
! .IP \fB\-c\fR 4
  .IX Item "-c"
  Compile or assemble the source files, but do not link.  The linking
  stage simply is not done.  The ultimate output is in the form of an
*************** the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR,
*** 1747,1769 ****
  .Sp
  Unrecognized input files, not requiring compilation or assembly, are
  ignored.
! .IP "\fB\-S\fR" 4
  .IX Item "-S"
  Stop after the stage of compilation proper; do not assemble.  The output
! is in the form of an assembler code file for each non-assembler input
  file specified.
  .Sp
  By default, the assembler file name for a source file is made by
  replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
  .Sp
! Input files that don't require compilation are ignored.
! .IP "\fB\-E\fR" 4
  .IX Item "-E"
  Stop after the preprocessing stage; do not run the compiler proper.  The
  output is in the form of preprocessed source code, which is sent to the
  standard output.
  .Sp
! Input files that don't require preprocessing are ignored.
  .IP "\fB\-o\fR \fIfile\fR" 4
  .IX Item "-o file"
  Place the primary output in file \fIfile\fR.  This applies to whatever
--- 1680,1702 ----
  .Sp
  Unrecognized input files, not requiring compilation or assembly, are
  ignored.
! .IP \fB\-S\fR 4
  .IX Item "-S"
  Stop after the stage of compilation proper; do not assemble.  The output
! is in the form of an assembler code file for each non\-assembler input
  file specified.
  .Sp
  By default, the assembler file name for a source file is made by
  replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
  .Sp
! Input files that don\*(Aqt require compilation are ignored.
! .IP \fB\-E\fR 4
  .IX Item "-E"
  Stop after the preprocessing stage; do not run the compiler proper.  The
  output is in the form of preprocessed source code, which is sent to the
  standard output.
  .Sp
! Input files that don\*(Aqt require preprocessing are ignored.
  .IP "\fB\-o\fR \fIfile\fR" 4
  .IX Item "-o file"
  Place the primary output in file \fIfile\fR.  This applies to whatever
*************** object file, an assembler file or prepro
*** 1772,1780 ****
  .Sp
  If \fB\-o\fR is not specified, the default is to put an executable
  file in \fIa.out\fR, the object file for
! \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
! assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
! \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
  standard output.
  .Sp
  Though \fB\-o\fR names only the primary output, it also affects the
--- 1705,1713 ----
  .Sp
  If \fB\-o\fR is not specified, the default is to put an executable
  file in \fIa.out\fR, the object file for
! \&\fIsource.suffix\fR in \fIsource.o\fR, its
! assembler file in \fIsource.s\fR, a precompiled header file in
! \&\fIsource.suffix.gch\fR, and all preprocessed C source on
  standard output.
  .Sp
  Though \fB\-o\fR names only the primary output, it also affects the
*************** dumps next to it, e.g., aux file \fIfoo.
*** 1799,1805 ****
  \&\fB\-gsplit\-dwarf\fR, and dump file \fIfoo.c.???r.final\fR for
  \&\fB\-fdump\-rtl\-final\fR.
  .Sp
! If a non-linker output file is explicitly specified, aux and dump files
  by default take the same base name:
  .Sp
  .Vb 1
--- 1732,1738 ----
  \&\fB\-gsplit\-dwarf\fR, and dump file \fIfoo.c.???r.final\fR for
  \&\fB\-fdump\-rtl\-final\fR.
  .Sp
! If a non\-linker output file is explicitly specified, aux and dump files
  by default take the same base name:
  .Sp
  .Vb 1
*************** an intermediate, thus auxiliary output),
*** 1856,1869 ****
  (implied) output file \fIfoo.o\fR.
  .Sp
  Absent this option, dump and aux files take their names from the input
! file, or from the (non-linker) output file, if one is explicitly
  specified: dump output files (e.g. those requested by \fB\-fdump\-*\fR
  options) with the input name suffix, and aux output files (those
! requested by other non-dump options, e.g. \f(CW\*(C`\-save\-temps\*(C'\fR,
  \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR, \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) without it.
  .Sp
  Similar suffix differentiation of dump and aux outputs can be attained
! for explicitly-given \fB\-dumpbase basename.suf\fR by also specifying
  \&\fB\-dumpbase\-ext .suf\fR.
  .Sp
  If \fIdumpbase\fR is explicitly specified with any directory component,
--- 1789,1802 ----
  (implied) output file \fIfoo.o\fR.
  .Sp
  Absent this option, dump and aux files take their names from the input
! file, or from the (non\-linker) output file, if one is explicitly
  specified: dump output files (e.g. those requested by \fB\-fdump\-*\fR
  options) with the input name suffix, and aux output files (those
! requested by other non\-dump options, e.g. \f(CW\*(C`\-save\-temps\*(C'\fR,
  \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR, \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) without it.
  .Sp
  Similar suffix differentiation of dump and aux outputs can be attained
! for explicitly\-given \fB\-dumpbase basename.suf\fR by also specifying
  \&\fB\-dumpbase\-ext .suf\fR.
  .Sp
  If \fIdumpbase\fR is explicitly specified with any directory component,
*************** will name aux outputs \fIdir/foo.*\fR an
*** 1908,1914 ****
  \&\fIdir/foo.c.*\fR.  Note how their basenames are taken from the input
  name, but the directory still defaults to that of the output.
  .Sp
! The empty-string dumpbase does not prevent the use of the output
  basename for outputs during linking:
  .Sp
  .Vb 1
--- 1841,1847 ----
  \&\fIdir/foo.c.*\fR.  Note how their basenames are taken from the input
  name, but the directory still defaults to that of the output.
  .Sp
! The empty\-string dumpbase does not prevent the use of the output
  basename for outputs during linking:
  .Sp
  .Vb 1
*************** basename for outputs during linking:
*** 1917,1923 ****
  .Sp
  The compilation of the source files will name auxiliary outputs
  \&\fIdir/foo.*\fR and \fIdir/bar.*\fR, and dump outputs
! \&\fIdir/foo.c.*\fR and \fIdir/bar.c.*\fR.  \s-1LTO\s0 recompilation during
  linking will use \fIdir/foobar.\fR as the prefix for dumps and
  auxiliary files.
  .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4
--- 1850,1856 ----
  .Sp
  The compilation of the source files will name auxiliary outputs
  \&\fIdir/foo.*\fR and \fIdir/bar.*\fR, and dump outputs
! \&\fIdir/foo.c.*\fR and \fIdir/bar.c.*\fR.  LTO recompilation during
  linking will use \fIdir/foobar.\fR as the prefix for dumps and
  auxiliary files.
  .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4
*************** When compiling from multiple input files
*** 2000,2006 ****
  specified, \fIdumpbase\fR, minus a \fIauxdropsuf\fR suffix, and a dash
  are appended to (or override, if containing any directory components) an
  explicit or defaulted \fIdumppfx\fR, so that each of the multiple
! compilations gets differently-named aux and dump outputs.
  .Sp
  .Vb 1
  \&        gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
--- 1933,1939 ----
  specified, \fIdumpbase\fR, minus a \fIauxdropsuf\fR suffix, and a dash
  are appended to (or override, if containing any directory components) an
  explicit or defaulted \fIdumppfx\fR, so that each of the multiple
! compilations gets differently\-named aux and dump outputs.
  .Sp
  .Vb 1
  \&        gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
*************** outputs auxiliary dumps to \fIdir/pfx\-m
*** 2010,2016 ****
  \&\fIdir/pfx\-main\-bar.*\fR, appending \fIdumpbase\fR\- to \fIdumppfx\fR.
  Dump outputs retain the input file suffix: \fIdir/pfx\-main\-foo.c.*\fR
  and \fIdir/pfx\-main\-bar.c.*\fR, respectively.  Contrast with the
! single-input compilation:
  .Sp
  .Vb 1
  \&        gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
--- 1943,1949 ----
  \&\fIdir/pfx\-main\-bar.*\fR, appending \fIdumpbase\fR\- to \fIdumppfx\fR.
  Dump outputs retain the input file suffix: \fIdir/pfx\-main\-foo.c.*\fR
  and \fIdir/pfx\-main\-bar.c.*\fR, respectively.  Contrast with the
! single\-input compilation:
  .Sp
  .Vb 1
  \&        gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
*************** instead.  Note, however, that unlike ear
*** 2035,2049 ****
  .Sp
  does not append the output name \fImain\fR to \fIdumppfx\fR, because
  \&\fB\-dumpdir\fR is explicitly specified.  The goal is that the
! explicitly-specified \fIdumppfx\fR may contain the specified output name
! as part of the prefix, if desired; only an explicitly-specified
  \&\fB\-dumpbase\fR would be combined with it, in order to avoid simply
  discarding a meaningful option.
  .Sp
  When compiling and then linking from a single input file, the linker
  output base name will only be appended to the default \fIdumppfx\fR as
  above if it does not share the base name with the single input file
! name.  This has been covered in single-input linking cases above, but
  not with an explicit \fB\-dumpdir\fR that inhibits the combination,
  even if overridden by \fB\-save\-temps=*\fR:
  .Sp
--- 1968,1982 ----
  .Sp
  does not append the output name \fImain\fR to \fIdumppfx\fR, because
  \&\fB\-dumpdir\fR is explicitly specified.  The goal is that the
! explicitly\-specified \fIdumppfx\fR may contain the specified output name
! as part of the prefix, if desired; only an explicitly\-specified
  \&\fB\-dumpbase\fR would be combined with it, in order to avoid simply
  discarding a meaningful option.
  .Sp
  When compiling and then linking from a single input file, the linker
  output base name will only be appended to the default \fIdumppfx\fR as
  above if it does not share the base name with the single input file
! name.  This has been covered in single\-input linking cases above, but
  not with an explicit \fB\-dumpdir\fR that inhibits the combination,
  even if overridden by \fB\-save\-temps=*\fR:
  .Sp
*************** for each input are formed by combining \
*** 2066,2161 ****
  minus suffix, and the auxiliary output suffix; dump output names are
  only different in that the suffix from \fIdumpbase\fR is retained.
  .Sp
! When it comes to auxiliary and dump outputs created during \s-1LTO\s0
  recompilation, a combination of \fIdumppfx\fR and \fIdumpbase\fR, as
  given or as derived from the linker output name but not from inputs,
  even in cases in which this combination would not otherwise be used as
! such, is passed down with a trailing period replacing the compiler-added
! dash, if any, as a \fB\-dumpdir\fR option to \fBlto-wrapper\fR;
  being involved in linking, this program does not normally get any
  \&\fB\-dumpbase\fR and \fB\-dumpbase\-ext\fR, and it ignores them.
  .Sp
! When running sub-compilers, \fBlto-wrapper\fR appends \s-1LTO\s0 stage
  names to the received \fIdumppfx\fR, ensures it contains a directory
  component so that it overrides any \fB\-dumpdir\fR, and passes that as
! \&\fB\-dumpbase\fR to sub-compilers.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  Print (on standard error output) the commands executed to run the stages
  of compilation.  Also print the version number of the compiler driver
  program and of the preprocessor and the compiler proper.
! .IP "\fB\-###\fR" 4
  .IX Item "-###"
  Like \fB\-v\fR except the commands are not executed and arguments
  are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
! This is useful for shell scripts to capture the driver-generated command lines.
! .IP "\fB\-\-help\fR" 4
  .IX Item "--help"
! Print (on the standard output) a description of the command-line options
  understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
  then \fB\-\-help\fR is also passed on to the various processes
! invoked by \fBgcc\fR, so that they can display the command-line options
  they accept.  If the \fB\-Wextra\fR option has also been specified
! (prior to the \fB\-\-help\fR option), then command-line options that
  have no documentation associated with them are also displayed.
! .IP "\fB\-\-target\-help\fR" 4
  .IX Item "--target-help"
! Print (on the standard output) a description of target-specific command-line
! options for each tool.  For some targets extra target-specific
  information may also be printed.
! .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
  .IX Item "--help={class|[^]qualifier}[,...]"
! Print (on the standard output) a description of the command-line
  options understood by the compiler that fit into all specified classes
  and qualifiers.  These are the supported classes:
  .RS 4
! .IP "\fBoptimizers\fR" 4
  .IX Item "optimizers"
  Display all of the optimization options supported by the
  compiler.
! .IP "\fBwarnings\fR" 4
  .IX Item "warnings"
  Display all of the options controlling warning messages
  produced by the compiler.
! .IP "\fBtarget\fR" 4
  .IX Item "target"
! Display target-specific options.  Unlike the
! \&\fB\-\-target\-help\fR option however, target-specific options of the
  linker and assembler are not displayed.  This is because those
  tools do not currently support the extended \fB\-\-help=\fR syntax.
! .IP "\fBparams\fR" 4
  .IX Item "params"
  Display the values recognized by the \fB\-\-param\fR
  option.
! .IP "\fIlanguage\fR" 4
  .IX Item "language"
  Display the options supported for \fIlanguage\fR, where
  \&\fIlanguage\fR is the name of one of the languages supported in this
! version of \s-1GCC.\s0  If an option is supported by all languages, one needs
  to select \fBcommon\fR class.
! .IP "\fBcommon\fR" 4
  .IX Item "common"
  Display the options that are common to all languages.
  .RE
  .RS 4
  .Sp
  These are the supported qualifiers:
! .IP "\fBundocumented\fR" 4
  .IX Item "undocumented"
  Display only those options that are undocumented.
! .IP "\fBjoined\fR" 4
  .IX Item "joined"
  Display options taking an argument that appears after an equal
  sign in the same continuous piece of text, such as:
  \&\fB\-\-help=target\fR.
! .IP "\fBseparate\fR" 4
  .IX Item "separate"
  Display options taking an argument that appears as a separate word
! following the original option, such as: \fB\-o output-file\fR.
  .RE
  .RS 4
  .Sp
! Thus for example to display all the undocumented target-specific
  switches supported by the compiler, use:
  .Sp
  .Vb 1
--- 1999,2094 ----
  minus suffix, and the auxiliary output suffix; dump output names are
  only different in that the suffix from \fIdumpbase\fR is retained.
  .Sp
! When it comes to auxiliary and dump outputs created during LTO
  recompilation, a combination of \fIdumppfx\fR and \fIdumpbase\fR, as
  given or as derived from the linker output name but not from inputs,
  even in cases in which this combination would not otherwise be used as
! such, is passed down with a trailing period replacing the compiler\-added
! dash, if any, as a \fB\-dumpdir\fR option to \fBlto\-wrapper\fR;
  being involved in linking, this program does not normally get any
  \&\fB\-dumpbase\fR and \fB\-dumpbase\-ext\fR, and it ignores them.
  .Sp
! When running sub\-compilers, \fBlto\-wrapper\fR appends LTO stage
  names to the received \fIdumppfx\fR, ensures it contains a directory
  component so that it overrides any \fB\-dumpdir\fR, and passes that as
! \&\fB\-dumpbase\fR to sub\-compilers.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  Print (on standard error output) the commands executed to run the stages
  of compilation.  Also print the version number of the compiler driver
  program and of the preprocessor and the compiler proper.
! .IP \fB\-###\fR 4
  .IX Item "-###"
  Like \fB\-v\fR except the commands are not executed and arguments
  are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
! This is useful for shell scripts to capture the driver\-generated command lines.
! .IP \fB\-\-help\fR 4
  .IX Item "--help"
! Print (on the standard output) a description of the command\-line options
  understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
  then \fB\-\-help\fR is also passed on to the various processes
! invoked by \fBgcc\fR, so that they can display the command\-line options
  they accept.  If the \fB\-Wextra\fR option has also been specified
! (prior to the \fB\-\-help\fR option), then command\-line options that
  have no documentation associated with them are also displayed.
! .IP \fB\-\-target\-help\fR 4
  .IX Item "--target-help"
! Print (on the standard output) a description of target\-specific command\-line
! options for each tool.  For some targets extra target\-specific
  information may also be printed.
! .IP \fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR] 4
  .IX Item "--help={class|[^]qualifier}[,...]"
! Print (on the standard output) a description of the command\-line
  options understood by the compiler that fit into all specified classes
  and qualifiers.  These are the supported classes:
  .RS 4
! .IP \fBoptimizers\fR 4
  .IX Item "optimizers"
  Display all of the optimization options supported by the
  compiler.
! .IP \fBwarnings\fR 4
  .IX Item "warnings"
  Display all of the options controlling warning messages
  produced by the compiler.
! .IP \fBtarget\fR 4
  .IX Item "target"
! Display target\-specific options.  Unlike the
! \&\fB\-\-target\-help\fR option however, target\-specific options of the
  linker and assembler are not displayed.  This is because those
  tools do not currently support the extended \fB\-\-help=\fR syntax.
! .IP \fBparams\fR 4
  .IX Item "params"
  Display the values recognized by the \fB\-\-param\fR
  option.
! .IP \fIlanguage\fR 4
  .IX Item "language"
  Display the options supported for \fIlanguage\fR, where
  \&\fIlanguage\fR is the name of one of the languages supported in this
! version of GCC.  If an option is supported by all languages, one needs
  to select \fBcommon\fR class.
! .IP \fBcommon\fR 4
  .IX Item "common"
  Display the options that are common to all languages.
  .RE
  .RS 4
  .Sp
  These are the supported qualifiers:
! .IP \fBundocumented\fR 4
  .IX Item "undocumented"
  Display only those options that are undocumented.
! .IP \fBjoined\fR 4
  .IX Item "joined"
  Display options taking an argument that appears after an equal
  sign in the same continuous piece of text, such as:
  \&\fB\-\-help=target\fR.
! .IP \fBseparate\fR 4
  .IX Item "separate"
  Display options taking an argument that appears as a separate word
! following the original option, such as: \fB\-o output\-file\fR.
  .RE
  .RS 4
  .Sp
! Thus for example to display all the undocumented target\-specific
  switches supported by the compiler, use:
  .Sp
  .Vb 1
*************** qualifiers.
*** 2177,2183 ****
  Combining several classes is possible, although this usually
  restricts the output so much that there is nothing to display.  One
  case where it does work, however, is when one of the classes is
! \&\fItarget\fR.  For example, to display all the target-specific
  optimization options, use:
  .Sp
  .Vb 1
--- 2110,2116 ----
  Combining several classes is possible, although this usually
  restricts the output so much that there is nothing to display.  One
  case where it does work, however, is when one of the classes is
! \&\fItarget\fR.  For example, to display all the target\-specific
  optimization options, use:
  .Sp
  .Vb 1
*************** options, an indication is given as to wh
*** 2197,2203 ****
  disabled or set to a specific value (assuming that the compiler
  knows this at the point where the \fB\-\-help=\fR option is used).
  .Sp
! Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
  .Sp
  .Vb 5
  \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
--- 2130,2136 ----
  disabled or set to a specific value (assuming that the compiler
  knows this at the point where the \fB\-\-help=\fR option is used).
  .Sp
! Here is a truncated example from the ARM port of \fBgcc\fR:
  .Sp
  .Vb 5
  \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
*************** Here is a truncated example from the \s-
*** 2207,2213 ****
  \&          \-mapcs                                [disabled]
  .Ve
  .Sp
! The output is sensitive to the effects of previous command-line
  options, so for example it is possible to find out which optimizations
  are enabled at \fB\-O2\fR by using:
  .Sp
--- 2140,2146 ----
  \&          \-mapcs                                [disabled]
  .Ve
  .Sp
! The output is sensitive to the effects of previous command\-line
  options, so for example it is possible to find out which optimizations
  are enabled at \fB\-O2\fR by using:
  .Sp
*************** by \fB\-O3\fR by using:
*** 2224,2247 ****
  \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
  .Ve
  .RE
! .IP "\fB\-\-version\fR" 4
  .IX Item "--version"
! Display the version number and copyrights of the invoked \s-1GCC.\s0
! .IP "\fB\-pass\-exit\-codes\fR" 4
  .IX Item "-pass-exit-codes"
  Normally the \fBgcc\fR program exits with the code of 1 if any
! phase of the compiler returns a non-success return code.  If you specify
  \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
  the numerically highest error produced by any phase returning an error
! indication.  The C, \*(C+, and Fortran front ends return 4 if an internal
  compiler error is encountered.
! .IP "\fB\-pipe\fR" 4
  .IX Item "-pipe"
  Use pipes rather than temporary files for communication between the
  various stages of compilation.  This fails to work on some systems where
! the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
  no trouble.
! .IP "\fB\-specs=\fR\fIfile\fR" 4
  .IX Item "-specs=file"
  Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
  file, in order to override the defaults which the \fBgcc\fR driver
--- 2157,2180 ----
  \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
  .Ve
  .RE
! .IP \fB\-\-version\fR 4
  .IX Item "--version"
! Display the version number and copyrights of the invoked GCC.
! .IP \fB\-pass\-exit\-codes\fR 4
  .IX Item "-pass-exit-codes"
  Normally the \fBgcc\fR program exits with the code of 1 if any
! phase of the compiler returns a non\-success return code.  If you specify
  \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
  the numerically highest error produced by any phase returning an error
! indication.  The C, C++, and Fortran front ends return 4 if an internal
  compiler error is encountered.
! .IP \fB\-pipe\fR 4
  .IX Item "-pipe"
  Use pipes rather than temporary files for communication between the
  various stages of compilation.  This fails to work on some systems where
! the assembler is unable to read from a pipe; but the GNU assembler has
  no trouble.
! .IP \fB\-specs=\fR\fIfile\fR 4
  .IX Item "-specs=file"
  Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
  file, in order to override the defaults which the \fBgcc\fR driver
*************** program uses when determining what switc
*** 2249,2255 ****
  \&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
  \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
  are processed in order, from left to right.
! .IP "\fB\-wrapper\fR" 4
  .IX Item "-wrapper"
  Invoke all subcommands under a wrapper program.  The name of the
  wrapper program and its parameters are passed as a comma separated
--- 2182,2188 ----
  \&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
  \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
  are processed in order, from left to right.
! .IP \fB\-wrapper\fR 4
  .IX Item "-wrapper"
  Invoke all subcommands under a wrapper program.  The name of the
  wrapper program and its parameters are passed as a comma separated
*************** list.
*** 2262,2318 ****
  This invokes all subprograms of \fBgcc\fR under
  \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
  \&\fBgdb \-\-args cc1 ...\fR.
! .IP "\fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-ffile-prefix-map=old=new"
! When compiling files residing in directory \fI\fIold\fI\fR, record
  any references to them in the result of the compilation as if the
! files resided in directory \fI\fInew\fI\fR instead.  Specifying this
  option is equivalent to specifying all the individual
  \&\fB\-f*\-prefix\-map\fR options.  This can be used to make reproducible
  builds that are location independent.  Directories referenced by
  directives are not affected by these options.  See also
  \&\fB\-fmacro\-prefix\-map\fR, \fB\-fdebug\-prefix\-map\fR,
  \&\fB\-fprofile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fcanon\-prefix\-map\fR" 4
  .IX Item "-fcanon-prefix-map"
  For the \fB\-f*\-prefix\-map\fR options normally comparison
! of \fI\fIold\fI\fR prefix against the filename that would be normally
  referenced in the result of the compilation is done using textual
  comparison of the prefixes, or ignoring character case for case insensitive
! filesystems and considering slashes and backslashes as equal on \s-1DOS\s0 based
  filesystems.  The \fB\-fcanon\-prefix\-map\fR causes such comparisons
! to be done on canonicalized paths of \fI\fIold\fI\fR
  and the referenced filename.
! .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
  .IX Item "-fplugin=name.so"
  Load the plugin code in file \fIname\fR.so, assumed to be a
! shared object to be dlopen'd by the compiler.  The base name of
  the shared object file is used to identify the plugin for the
  purposes of argument parsing (See
  \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
  Each plugin should define the callback functions specified in the
! Plugins \s-1API.\s0
! .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
  .IX Item "-fplugin-arg-name-key=value"
  Define an argument called \fIkey\fR with a value of \fIvalue\fR
  for the plugin called \fIname\fR.
! .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
  .IX Item "-fdump-ada-spec[-slim]"
! For C and \*(C+ source and include files, generate corresponding Ada specs.
! .IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
  .IX Item "-fada-spec-parent=unit"
  In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
  Ada specs as child units of parent \fIunit\fR.
! .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
  .IX Item "-fdump-go-spec=file"
  For input files in any language, generate corresponding Go
  declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
  \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
  useful way to start writing a Go interface to code written in some
  other language.
! .IP "\fB@\fR\fIfile\fR" 4
  .IX Item "@file"
! Read command-line options from \fIfile\fR.  The options read are
  inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
  does not exist, or cannot be read, then the option will be treated
  literally, and not removed.
--- 2195,2251 ----
  This invokes all subprograms of \fBgcc\fR under
  \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
  \&\fBgdb \-\-args cc1 ...\fR.
! .IP \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-ffile-prefix-map=old=new"
! When compiling files residing in directory \fIold\fR, record
  any references to them in the result of the compilation as if the
! files resided in directory \fInew\fR instead.  Specifying this
  option is equivalent to specifying all the individual
  \&\fB\-f*\-prefix\-map\fR options.  This can be used to make reproducible
  builds that are location independent.  Directories referenced by
  directives are not affected by these options.  See also
  \&\fB\-fmacro\-prefix\-map\fR, \fB\-fdebug\-prefix\-map\fR,
  \&\fB\-fprofile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fcanon\-prefix\-map\fR 4
  .IX Item "-fcanon-prefix-map"
  For the \fB\-f*\-prefix\-map\fR options normally comparison
! of \fIold\fR prefix against the filename that would be normally
  referenced in the result of the compilation is done using textual
  comparison of the prefixes, or ignoring character case for case insensitive
! filesystems and considering slashes and backslashes as equal on DOS based
  filesystems.  The \fB\-fcanon\-prefix\-map\fR causes such comparisons
! to be done on canonicalized paths of \fIold\fR
  and the referenced filename.
! .IP \fB\-fplugin=\fR\fIname\fR\fB.so\fR 4
  .IX Item "-fplugin=name.so"
  Load the plugin code in file \fIname\fR.so, assumed to be a
! shared object to be dlopen\*(Aqd by the compiler.  The base name of
  the shared object file is used to identify the plugin for the
  purposes of argument parsing (See
  \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
  Each plugin should define the callback functions specified in the
! Plugins API.
! .IP \fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR 4
  .IX Item "-fplugin-arg-name-key=value"
  Define an argument called \fIkey\fR with a value of \fIvalue\fR
  for the plugin called \fIname\fR.
! .IP \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] 4
  .IX Item "-fdump-ada-spec[-slim]"
! For C and C++ source and include files, generate corresponding Ada specs.
! .IP \fB\-fada\-spec\-parent=\fR\fIunit\fR 4
  .IX Item "-fada-spec-parent=unit"
  In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
  Ada specs as child units of parent \fIunit\fR.
! .IP \fB\-fdump\-go\-spec=\fR\fIfile\fR 4
  .IX Item "-fdump-go-spec=file"
  For input files in any language, generate corresponding Go
  declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
  \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
  useful way to start writing a Go interface to code written in some
  other language.
! .IP \fB@\fR\fIfile\fR 4
  .IX Item "@file"
! Read command\-line options from \fIfile\fR.  The options read are
  inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
  does not exist, or cannot be read, then the option will be treated
  literally, and not removed.
*************** option in either single or double quotes
*** 2323,2641 ****
  backslash) may be included by prefixing the character to be included
  with a backslash.  The \fIfile\fR may itself contain additional
  @\fIfile\fR options; any such options will be processed recursively.
! .SS "Compiling \*(C+ Programs"
! .IX Subsection "Compiling Programs"
! \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
  \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
! \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
  \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
! preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
! files with these names and compiles them as \*(C+ programs even if you
  call the compiler the same way as for compiling C programs (usually
  with the name \fBgcc\fR).
  .PP
! However, the use of \fBgcc\fR does not add the \*(C+ library.
! \&\fBg++\fR is a program that calls \s-1GCC\s0 and automatically specifies linking
! against the \*(C+ library.  It treats \fB.c\fR,
! \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
  files unless \fB\-x\fR is used.  This program is also useful when
! precompiling a C header file with a \fB.h\fR extension for use in \*(C+
  compilations.  On many systems, \fBg++\fR is also installed with
  the name \fBc++\fR.
  .PP
! When you compile \*(C+ programs, you may specify many of the same
! command-line options that you use for compiling programs in any
! language; or command-line options meaningful for C and related
! languages; or options that are meaningful only for \*(C+ programs.
  .SS "Options Controlling C Dialect"
  .IX Subsection "Options Controlling C Dialect"
  The following options control the dialect of C (or languages derived
! from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
  accepts:
! .IP "\fB\-ansi\fR" 4
  .IX Item "-ansi"
! In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
  equivalent to \fB\-std=c++98\fR.
  .Sp
! This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO
! C90\s0 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
  such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
  predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
  type of system you are using.  It also enables the undesirable and
! rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
! it disables recognition of \*(C+ style \fB//\fR comments as well as
  the \f(CW\*(C`inline\*(C'\fR keyword.
  .Sp
  The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
! \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO C\s0 program, of
  course, but it is useful to put them in header files that might be included
  in compilations done with \fB\-ansi\fR.  Alternate predefined macros
  such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
  without \fB\-ansi\fR.
  .Sp
! The \fB\-ansi\fR option does not cause non-ISO programs to be
  rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
  addition to \fB\-ansi\fR.
  .Sp
  The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
  option is used.  Some header files may notice this macro and refrain
  from declaring certain functions or defining certain macros that the
! \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
  programs that might use these names for other things.
  .Sp
  Functions that are normally built in but do not have semantics
! defined by \s-1ISO C\s0 (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
  functions when \fB\-ansi\fR is used.
! .IP "\fB\-std=\fR" 4
  .IX Item "-std="
  Determine the language standard.   This option
! is currently only supported when compiling C or \*(C+.
  .Sp
  The compiler can accept several base standards, such as \fBc90\fR or
! \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
  \&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
  compiler accepts all programs following that standard plus those
! using \s-1GNU\s0 extensions that do not contradict it.  For example,
! \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
! incompatible with \s-1ISO C90,\s0 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
! keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
! \&\s-1ISO C90,\s0 such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
! expression. On the other hand, when a \s-1GNU\s0 dialect of a standard is
  specified, all features supported by the compiler are enabled, even when
  those features change the meaning of the base standard.  As a result, some
! strict-conforming programs may be rejected.  The particular standard
! is used by \fB\-Wpedantic\fR to identify which features are \s-1GNU\s0
  extensions given that version of the standard. For example
! \&\fB\-std=gnu90 \-Wpedantic\fR warns about \*(C+ style \fB//\fR
  comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
  .Sp
  A value for this option must be provided; possible values are
  .RS 4
! .IP "\fBc90\fR" 4
  .IX Item "c90"
  .PD 0
! .IP "\fBc89\fR" 4
  .IX Item "c89"
! .IP "\fBiso9899:1990\fR" 4
  .IX Item "iso9899:1990"
  .PD
! Support all \s-1ISO C90\s0 programs (certain \s-1GNU\s0 extensions that conflict
! with \s-1ISO C90\s0 are disabled). Same as \fB\-ansi\fR for C code.
! .IP "\fBiso9899:199409\fR" 4
  .IX Item "iso9899:199409"
! \&\s-1ISO C90\s0 as modified in amendment 1.
! .IP "\fBc99\fR" 4
  .IX Item "c99"
  .PD 0
! .IP "\fBc9x\fR" 4
  .IX Item "c9x"
! .IP "\fBiso9899:1999\fR" 4
  .IX Item "iso9899:1999"
! .IP "\fBiso9899:199x\fR" 4
  .IX Item "iso9899:199x"
  .PD
! \&\s-1ISO C99.\s0  This standard is substantially completely supported, modulo
! bugs and floating-point issues
  (mainly but not entirely relating to optional C99 features from
  Annexes F and G).  See
  <\fBhttps://gcc.gnu.org/c99status.html\fR> for more information.  The
  names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
! .IP "\fBc11\fR" 4
  .IX Item "c11"
  .PD 0
! .IP "\fBc1x\fR" 4
  .IX Item "c1x"
! .IP "\fBiso9899:2011\fR" 4
  .IX Item "iso9899:2011"
  .PD
! \&\s-1ISO C11,\s0 the 2011 revision of the \s-1ISO C\s0 standard.  This standard is
! substantially completely supported, modulo bugs, floating-point issues
  (mainly but not entirely relating to optional C11 features from
! Annexes F and G) and the optional Annexes K (Bounds-checking
  interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
! .IP "\fBc17\fR" 4
  .IX Item "c17"
  .PD 0
! .IP "\fBc18\fR" 4
  .IX Item "c18"
! .IP "\fBiso9899:2017\fR" 4
  .IX Item "iso9899:2017"
! .IP "\fBiso9899:2018\fR" 4
  .IX Item "iso9899:2018"
  .PD
! \&\s-1ISO C17,\s0 the 2017 revision of the \s-1ISO C\s0 standard
  (published in 2018).  This standard is
  same as C11 except for corrections of defects (all of which are also
  applied with \fB\-std=c11\fR) and a new value of
  \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR, and so is supported to the same extent as C11.
! .IP "\fBc23\fR" 4
  .IX Item "c23"
  .PD 0
! .IP "\fBc2x\fR" 4
  .IX Item "c2x"
! .IP "\fBiso9899:2024\fR" 4
  .IX Item "iso9899:2024"
  .PD
! \&\s-1ISO C23,\s0 the 2023 revision of the \s-1ISO C\s0 standard (expected to be
  published in 2024).  The support for this version is experimental and
  incomplete.  The name \fBc2x\fR is deprecated.
! .IP "\fBgnu90\fR" 4
  .IX Item "gnu90"
  .PD 0
! .IP "\fBgnu89\fR" 4
  .IX Item "gnu89"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C90\s0 (including some C99 features).
! .IP "\fBgnu99\fR" 4
  .IX Item "gnu99"
  .PD 0
! .IP "\fBgnu9x\fR" 4
  .IX Item "gnu9x"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C99.\s0  The name \fBgnu9x\fR is deprecated.
! .IP "\fBgnu11\fR" 4
  .IX Item "gnu11"
  .PD 0
! .IP "\fBgnu1x\fR" 4
  .IX Item "gnu1x"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C11.\s0
  The name \fBgnu1x\fR is deprecated.
! .IP "\fBgnu17\fR" 4
  .IX Item "gnu17"
  .PD 0
! .IP "\fBgnu18\fR" 4
  .IX Item "gnu18"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C17.\s0  This is the default for C code.
! .IP "\fBgnu23\fR" 4
  .IX Item "gnu23"
  .PD 0
! .IP "\fBgnu2x\fR" 4
  .IX Item "gnu2x"
  .PD
! The next version of the \s-1ISO C\s0 standard, still under development, plus
! \&\s-1GNU\s0 extensions.  The support for this version is experimental and
  incomplete.  The name \fBgnu2x\fR is deprecated.
! .IP "\fBc++98\fR" 4
  .IX Item "c++98"
  .PD 0
! .IP "\fBc++03\fR" 4
  .IX Item "c++03"
  .PD
! The 1998 \s-1ISO \*(C+\s0 standard plus the 2003 technical corrigendum and some
! additional defect reports. Same as \fB\-ansi\fR for \*(C+ code.
! .IP "\fBgnu++98\fR" 4
  .IX Item "gnu++98"
  .PD 0
! .IP "\fBgnu++03\fR" 4
  .IX Item "gnu++03"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.
! .IP "\fBc++11\fR" 4
  .IX Item "c++11"
  .PD 0
! .IP "\fBc++0x\fR" 4
  .IX Item "c++0x"
  .PD
! The 2011 \s-1ISO \*(C+\s0 standard plus amendments.
  The name \fBc++0x\fR is deprecated.
! .IP "\fBgnu++11\fR" 4
  .IX Item "gnu++11"
  .PD 0
! .IP "\fBgnu++0x\fR" 4
  .IX Item "gnu++0x"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR.
  The name \fBgnu++0x\fR is deprecated.
! .IP "\fBc++14\fR" 4
  .IX Item "c++14"
  .PD 0
! .IP "\fBc++1y\fR" 4
  .IX Item "c++1y"
  .PD
! The 2014 \s-1ISO \*(C+\s0 standard plus amendments.
  The name \fBc++1y\fR is deprecated.
! .IP "\fBgnu++14\fR" 4
  .IX Item "gnu++14"
  .PD 0
! .IP "\fBgnu++1y\fR" 4
  .IX Item "gnu++1y"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++14\fR.
  The name \fBgnu++1y\fR is deprecated.
! .IP "\fBc++17\fR" 4
  .IX Item "c++17"
  .PD 0
! .IP "\fBc++1z\fR" 4
  .IX Item "c++1z"
  .PD
! The 2017 \s-1ISO \*(C+\s0 standard plus amendments.
  The name \fBc++1z\fR is deprecated.
! .IP "\fBgnu++17\fR" 4
  .IX Item "gnu++17"
  .PD 0
! .IP "\fBgnu++1z\fR" 4
  .IX Item "gnu++1z"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++17\fR.
! This is the default for \*(C+ code.
  The name \fBgnu++1z\fR is deprecated.
! .IP "\fBc++20\fR" 4
  .IX Item "c++20"
  .PD 0
! .IP "\fBc++2a\fR" 4
  .IX Item "c++2a"
  .PD
! The 2020 \s-1ISO \*(C+\s0 standard plus amendments.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBc++2a\fR is deprecated.
! .IP "\fBgnu++20\fR" 4
  .IX Item "gnu++20"
  .PD 0
! .IP "\fBgnu++2a\fR" 4
  .IX Item "gnu++2a"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++20\fR.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBgnu++2a\fR is deprecated.
! .IP "\fBc++2b\fR" 4
  .IX Item "c++2b"
  .PD 0
! .IP "\fBc++23\fR" 4
  .IX Item "c++23"
  .PD
! The next revision of the \s-1ISO \*(C+\s0 standard, planned for
  2023.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP "\fBgnu++2b\fR" 4
  .IX Item "gnu++2b"
  .PD 0
! .IP "\fBgnu++23\fR" 4
  .IX Item "gnu++23"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++2b\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
! .IP "\fBc++2c\fR" 4
  .IX Item "c++2c"
  .PD 0
! .IP "\fBc++26\fR" 4
  .IX Item "c++26"
  .PD
! The next revision of the \s-1ISO \*(C+\s0 standard, planned for
  2026.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP "\fBgnu++2c\fR" 4
  .IX Item "gnu++2c"
  .PD 0
! .IP "\fBgnu++26\fR" 4
  .IX Item "gnu++26"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++2c\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
  .RE
--- 2256,2574 ----
  backslash) may be included by prefixing the character to be included
  with a backslash.  The \fIfile\fR may itself contain additional
  @\fIfile\fR options; any such options will be processed recursively.
! .SS "Compiling C++ Programs"
! .IX Subsection "Compiling C++ Programs"
! C++ source files conventionally use one of the suffixes \fB.C\fR,
  \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
! \&\fB.cxx\fR; C++ header files often use \fB.hh\fR, \fB.hpp\fR,
  \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
! preprocessed C++ files use the suffix \fB.ii\fR.  GCC recognizes
! files with these names and compiles them as C++ programs even if you
  call the compiler the same way as for compiling C programs (usually
  with the name \fBgcc\fR).
  .PP
! However, the use of \fBgcc\fR does not add the C++ library.
! \&\fBg++\fR is a program that calls GCC and automatically specifies linking
! against the C++ library.  It treats \fB.c\fR,
! \&\fB.h\fR and \fB.i\fR files as C++ source files instead of C source
  files unless \fB\-x\fR is used.  This program is also useful when
! precompiling a C header file with a \fB.h\fR extension for use in C++
  compilations.  On many systems, \fBg++\fR is also installed with
  the name \fBc++\fR.
  .PP
! When you compile C++ programs, you may specify many of the same
! command\-line options that you use for compiling programs in any
! language; or command\-line options meaningful for C and related
! languages; or options that are meaningful only for C++ programs.
  .SS "Options Controlling C Dialect"
  .IX Subsection "Options Controlling C Dialect"
  The following options control the dialect of C (or languages derived
! from C, such as C++, Objective\-C and Objective\-C++) that the compiler
  accepts:
! .IP \fB\-ansi\fR 4
  .IX Item "-ansi"
! In C mode, this is equivalent to \fB\-std=c90\fR. In C++ mode, it is
  equivalent to \fB\-std=c++98\fR.
  .Sp
! This turns off certain features of GCC that are incompatible with ISO
! C90 (when compiling C code), or of standard C++ (when compiling C++ code),
  such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
  predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
  type of system you are using.  It also enables the undesirable and
! rarely used ISO trigraph feature.  For the C compiler,
! it disables recognition of C++ style \fB//\fR comments as well as
  the \f(CW\*(C`inline\*(C'\fR keyword.
  .Sp
  The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
! \&\fB\-ansi\fR.  You would not want to use them in an ISO C program, of
  course, but it is useful to put them in header files that might be included
  in compilations done with \fB\-ansi\fR.  Alternate predefined macros
  such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
  without \fB\-ansi\fR.
  .Sp
! The \fB\-ansi\fR option does not cause non\-ISO programs to be
  rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
  addition to \fB\-ansi\fR.
  .Sp
  The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
  option is used.  Some header files may notice this macro and refrain
  from declaring certain functions or defining certain macros that the
! ISO standard doesn\*(Aqt call for; this is to avoid interfering with any
  programs that might use these names for other things.
  .Sp
  Functions that are normally built in but do not have semantics
! defined by ISO C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built\-in
  functions when \fB\-ansi\fR is used.
! .IP \fB\-std=\fR 4
  .IX Item "-std="
  Determine the language standard.   This option
! is currently only supported when compiling C or C++.
  .Sp
  The compiler can accept several base standards, such as \fBc90\fR or
! \&\fBc++98\fR, and GNU dialects of those standards, such as
  \&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
  compiler accepts all programs following that standard plus those
! using GNU extensions that do not contradict it.  For example,
! \&\fB\-std=c90\fR turns off certain features of GCC that are
! incompatible with ISO C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
! keywords, but not other GNU extensions that do not have a meaning in
! ISO C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
! expression. On the other hand, when a GNU dialect of a standard is
  specified, all features supported by the compiler are enabled, even when
  those features change the meaning of the base standard.  As a result, some
! strict\-conforming programs may be rejected.  The particular standard
! is used by \fB\-Wpedantic\fR to identify which features are GNU
  extensions given that version of the standard. For example
! \&\fB\-std=gnu90 \-Wpedantic\fR warns about C++ style \fB//\fR
  comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
  .Sp
  A value for this option must be provided; possible values are
  .RS 4
! .IP \fBc90\fR 4
  .IX Item "c90"
  .PD 0
! .IP \fBc89\fR 4
  .IX Item "c89"
! .IP \fBiso9899:1990\fR 4
  .IX Item "iso9899:1990"
  .PD
! Support all ISO C90 programs (certain GNU extensions that conflict
! with ISO C90 are disabled). Same as \fB\-ansi\fR for C code.
! .IP \fBiso9899:199409\fR 4
  .IX Item "iso9899:199409"
! ISO C90 as modified in amendment 1.
! .IP \fBc99\fR 4
  .IX Item "c99"
  .PD 0
! .IP \fBc9x\fR 4
  .IX Item "c9x"
! .IP \fBiso9899:1999\fR 4
  .IX Item "iso9899:1999"
! .IP \fBiso9899:199x\fR 4
  .IX Item "iso9899:199x"
  .PD
! ISO C99.  This standard is substantially completely supported, modulo
! bugs and floating\-point issues
  (mainly but not entirely relating to optional C99 features from
  Annexes F and G).  See
  <\fBhttps://gcc.gnu.org/c99status.html\fR> for more information.  The
  names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
! .IP \fBc11\fR 4
  .IX Item "c11"
  .PD 0
! .IP \fBc1x\fR 4
  .IX Item "c1x"
! .IP \fBiso9899:2011\fR 4
  .IX Item "iso9899:2011"
  .PD
! ISO C11, the 2011 revision of the ISO C standard.  This standard is
! substantially completely supported, modulo bugs, floating\-point issues
  (mainly but not entirely relating to optional C11 features from
! Annexes F and G) and the optional Annexes K (Bounds\-checking
  interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
! .IP \fBc17\fR 4
  .IX Item "c17"
  .PD 0
! .IP \fBc18\fR 4
  .IX Item "c18"
! .IP \fBiso9899:2017\fR 4
  .IX Item "iso9899:2017"
! .IP \fBiso9899:2018\fR 4
  .IX Item "iso9899:2018"
  .PD
! ISO C17, the 2017 revision of the ISO C standard
  (published in 2018).  This standard is
  same as C11 except for corrections of defects (all of which are also
  applied with \fB\-std=c11\fR) and a new value of
  \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR, and so is supported to the same extent as C11.
! .IP \fBc23\fR 4
  .IX Item "c23"
  .PD 0
! .IP \fBc2x\fR 4
  .IX Item "c2x"
! .IP \fBiso9899:2024\fR 4
  .IX Item "iso9899:2024"
  .PD
! ISO C23, the 2023 revision of the ISO C standard (expected to be
  published in 2024).  The support for this version is experimental and
  incomplete.  The name \fBc2x\fR is deprecated.
! .IP \fBgnu90\fR 4
  .IX Item "gnu90"
  .PD 0
! .IP \fBgnu89\fR 4
  .IX Item "gnu89"
  .PD
! GNU dialect of ISO C90 (including some C99 features).
! .IP \fBgnu99\fR 4
  .IX Item "gnu99"
  .PD 0
! .IP \fBgnu9x\fR 4
  .IX Item "gnu9x"
  .PD
! GNU dialect of ISO C99.  The name \fBgnu9x\fR is deprecated.
! .IP \fBgnu11\fR 4
  .IX Item "gnu11"
  .PD 0
! .IP \fBgnu1x\fR 4
  .IX Item "gnu1x"
  .PD
! GNU dialect of ISO C11.
  The name \fBgnu1x\fR is deprecated.
! .IP \fBgnu17\fR 4
  .IX Item "gnu17"
  .PD 0
! .IP \fBgnu18\fR 4
  .IX Item "gnu18"
  .PD
! GNU dialect of ISO C17.  This is the default for C code.
! .IP \fBgnu23\fR 4
  .IX Item "gnu23"
  .PD 0
! .IP \fBgnu2x\fR 4
  .IX Item "gnu2x"
  .PD
! The next version of the ISO C standard, still under development, plus
! GNU extensions.  The support for this version is experimental and
  incomplete.  The name \fBgnu2x\fR is deprecated.
! .IP \fBc++98\fR 4
  .IX Item "c++98"
  .PD 0
! .IP \fBc++03\fR 4
  .IX Item "c++03"
  .PD
! The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
! additional defect reports. Same as \fB\-ansi\fR for C++ code.
! .IP \fBgnu++98\fR 4
  .IX Item "gnu++98"
  .PD 0
! .IP \fBgnu++03\fR 4
  .IX Item "gnu++03"
  .PD
! GNU dialect of \fB\-std=c++98\fR.
! .IP \fBc++11\fR 4
  .IX Item "c++11"
  .PD 0
! .IP \fBc++0x\fR 4
  .IX Item "c++0x"
  .PD
! The 2011 ISO C++ standard plus amendments.
  The name \fBc++0x\fR is deprecated.
! .IP \fBgnu++11\fR 4
  .IX Item "gnu++11"
  .PD 0
! .IP \fBgnu++0x\fR 4
  .IX Item "gnu++0x"
  .PD
! GNU dialect of \fB\-std=c++11\fR.
  The name \fBgnu++0x\fR is deprecated.
! .IP \fBc++14\fR 4
  .IX Item "c++14"
  .PD 0
! .IP \fBc++1y\fR 4
  .IX Item "c++1y"
  .PD
! The 2014 ISO C++ standard plus amendments.
  The name \fBc++1y\fR is deprecated.
! .IP \fBgnu++14\fR 4
  .IX Item "gnu++14"
  .PD 0
! .IP \fBgnu++1y\fR 4
  .IX Item "gnu++1y"
  .PD
! GNU dialect of \fB\-std=c++14\fR.
  The name \fBgnu++1y\fR is deprecated.
! .IP \fBc++17\fR 4
  .IX Item "c++17"
  .PD 0
! .IP \fBc++1z\fR 4
  .IX Item "c++1z"
  .PD
! The 2017 ISO C++ standard plus amendments.
  The name \fBc++1z\fR is deprecated.
! .IP \fBgnu++17\fR 4
  .IX Item "gnu++17"
  .PD 0
! .IP \fBgnu++1z\fR 4
  .IX Item "gnu++1z"
  .PD
! GNU dialect of \fB\-std=c++17\fR.
! This is the default for C++ code.
  The name \fBgnu++1z\fR is deprecated.
! .IP \fBc++20\fR 4
  .IX Item "c++20"
  .PD 0
! .IP \fBc++2a\fR 4
  .IX Item "c++2a"
  .PD
! The 2020 ISO C++ standard plus amendments.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBc++2a\fR is deprecated.
! .IP \fBgnu++20\fR 4
  .IX Item "gnu++20"
  .PD 0
! .IP \fBgnu++2a\fR 4
  .IX Item "gnu++2a"
  .PD
! GNU dialect of \fB\-std=c++20\fR.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBgnu++2a\fR is deprecated.
! .IP \fBc++2b\fR 4
  .IX Item "c++2b"
  .PD 0
! .IP \fBc++23\fR 4
  .IX Item "c++23"
  .PD
! The next revision of the ISO C++ standard, planned for
  2023.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP \fBgnu++2b\fR 4
  .IX Item "gnu++2b"
  .PD 0
! .IP \fBgnu++23\fR 4
  .IX Item "gnu++23"
  .PD
! GNU dialect of \fB\-std=c++2b\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
! .IP \fBc++2c\fR 4
  .IX Item "c++2c"
  .PD 0
! .IP \fBc++26\fR 4
  .IX Item "c++26"
  .PD
! The next revision of the ISO C++ standard, planned for
  2026.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP \fBgnu++2c\fR 4
  .IX Item "gnu++2c"
  .PD 0
! .IP \fBgnu++26\fR 4
  .IX Item "gnu++26"
  .PD
! GNU dialect of \fB\-std=c++2c\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
  .RE
*************** definition (\fBC\fR or \fBF\fR, respecti
*** 2656,2694 ****
  character).  In the case of function definitions, a K&R\-style list of
  arguments followed by their declarations is also provided, inside
  comments, after the declaration.
! .IP "\fB\-fno\-asm\fR" 4
  .IX Item "-fno-asm"
  Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
  keyword, so that code can use these words as identifiers.  You can use
  the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
  instead.  In C, \fB\-ansi\fR implies \fB\-fno\-asm\fR.
  .Sp
! In \*(C+, \f(CW\*(C`inline\*(C'\fR is a standard keyword and is not affected by
  this switch.  You may want to use the \fB\-fno\-gnu\-keywords\fR flag
  instead, which disables \f(CW\*(C`typeof\*(C'\fR but not \f(CW\*(C`asm\*(C'\fR and
  \&\f(CW\*(C`inline\*(C'\fR.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR),
  this switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords,
! since \f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO C99.\s0  In C23 mode
  (\fB\-std=c23\fR or \fB\-std=gnu23\fR), this switch only affects
  the \f(CW\*(C`asm\*(C'\fR keyword, since \f(CW\*(C`typeof\*(C'\fR is a standard keyword in
! \&\s-1ISO C23.\s0
! .IP "\fB\-fno\-builtin\fR" 4
  .IX Item "-fno-builtin"
  .PD 0
! .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
  .IX Item "-fno-builtin-function"
  .PD
! Don't recognize built-in functions that do not begin with
  \&\fB_\|_builtin_\fR as prefix.
  .Sp
! \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
  more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
  instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
  may become inline copy loops.  The resulting code is often both smaller
  and faster, but since the function calls no longer appear as such, you
  cannot set a breakpoint on those calls, nor can you change the behavior
  of the functions by linking with a different library.  In addition,
! when a function is recognized as a built-in function, \s-1GCC\s0 may use
  information about that function to warn about problems with calls to
  that function, or to generate more efficient code, even if the
  resulting code still contains calls to that function.  For example,
--- 2589,2627 ----
  character).  In the case of function definitions, a K&R\-style list of
  arguments followed by their declarations is also provided, inside
  comments, after the declaration.
! .IP \fB\-fno\-asm\fR 4
  .IX Item "-fno-asm"
  Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
  keyword, so that code can use these words as identifiers.  You can use
  the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
  instead.  In C, \fB\-ansi\fR implies \fB\-fno\-asm\fR.
  .Sp
! In C++, \f(CW\*(C`inline\*(C'\fR is a standard keyword and is not affected by
  this switch.  You may want to use the \fB\-fno\-gnu\-keywords\fR flag
  instead, which disables \f(CW\*(C`typeof\*(C'\fR but not \f(CW\*(C`asm\*(C'\fR and
  \&\f(CW\*(C`inline\*(C'\fR.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR),
  this switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords,
! since \f(CW\*(C`inline\*(C'\fR is a standard keyword in ISO C99.  In C23 mode
  (\fB\-std=c23\fR or \fB\-std=gnu23\fR), this switch only affects
  the \f(CW\*(C`asm\*(C'\fR keyword, since \f(CW\*(C`typeof\*(C'\fR is a standard keyword in
! ISO C23.
! .IP \fB\-fno\-builtin\fR 4
  .IX Item "-fno-builtin"
  .PD 0
! .IP \fB\-fno\-builtin\-\fR\fIfunction\fR 4
  .IX Item "-fno-builtin-function"
  .PD
! Don\*(Aqt recognize built\-in functions that do not begin with
  \&\fB_\|_builtin_\fR as prefix.
  .Sp
! GCC normally generates special code to handle certain built\-in functions
  more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
  instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
  may become inline copy loops.  The resulting code is often both smaller
  and faster, but since the function calls no longer appear as such, you
  cannot set a breakpoint on those calls, nor can you change the behavior
  of the functions by linking with a different library.  In addition,
! when a function is recognized as a built\-in function, GCC may use
  information about that function to warn about problems with calls to
  that function, or to generate more efficient code, even if the
  resulting code still contains calls to that function.  For example,
*************** warnings are given with \fB\-Wformat\fR
*** 2697,2753 ****
  known not to modify global memory.
  .Sp
  With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
! only the built-in function \fIfunction\fR is
  disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
! function is named that is not built-in in this version of \s-1GCC,\s0 this
  option is ignored.  There is no corresponding
  \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
! built-in functions selectively when using \fB\-fno\-builtin\fR or
  \&\fB\-ffreestanding\fR, you may define macros such as:
  .Sp
  .Vb 2
  \&        #define abs(n)          _\|_builtin_abs ((n))
  \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
  .Ve
! .IP "\fB\-fcond\-mismatch\fR" 4
  .IX Item "-fcond-mismatch"
  Allow conditional expressions with mismatched types in the second and
  third arguments.  The value of such an expression is void.  This option
! is not supported for \*(C+.
! .IP "\fB\-ffreestanding\fR" 4
  .IX Item "-ffreestanding"
  Assert that compilation targets a freestanding environment.  This
  implies \fB\-fno\-builtin\fR.  A freestanding environment
  is one in which the standard library may not exist, and program startup may
! not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
  This is equivalent to \fB\-fno\-hosted\fR.
! .IP "\fB\-fgimple\fR" 4
  .IX Item "-fgimple"
  Enable parsing of function definitions marked with \f(CW\*(C`_\|_GIMPLE\*(C'\fR.
! This is an experimental feature that allows unit testing of \s-1GIMPLE\s0
  passes.
! .IP "\fB\-fgnu\-tm\fR" 4
  .IX Item "-fgnu-tm"
  When the option \fB\-fgnu\-tm\fR is specified, the compiler
! generates code for the Linux variant of Intel's current Transactional
! Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
  an experimental feature whose interface may change in future versions
! of \s-1GCC,\s0 as the official specification changes.  Please note that not
  all architectures are supported for this feature.
  .Sp
! For more information on \s-1GCC\s0's support for transactional memory,
  .Sp
  Note that the transactional memory feature is not supported with
! non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
! .IP "\fB\-fgnu89\-inline\fR" 4
  .IX Item "-fgnu89-inline"
! The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
! \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
  .Sp
  Using this option is roughly equivalent to adding the
  \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
  .Sp
! The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
  C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
  specifies the default behavior).
  This option is not supported in \fB\-std=c90\fR or
--- 2630,2686 ----
  known not to modify global memory.
  .Sp
  With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
! only the built\-in function \fIfunction\fR is
  disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
! function is named that is not built\-in in this version of GCC, this
  option is ignored.  There is no corresponding
  \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
! built\-in functions selectively when using \fB\-fno\-builtin\fR or
  \&\fB\-ffreestanding\fR, you may define macros such as:
  .Sp
  .Vb 2
  \&        #define abs(n)          _\|_builtin_abs ((n))
  \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
  .Ve
! .IP \fB\-fcond\-mismatch\fR 4
  .IX Item "-fcond-mismatch"
  Allow conditional expressions with mismatched types in the second and
  third arguments.  The value of such an expression is void.  This option
! is not supported for C++.
! .IP \fB\-ffreestanding\fR 4
  .IX Item "-ffreestanding"
  Assert that compilation targets a freestanding environment.  This
  implies \fB\-fno\-builtin\fR.  A freestanding environment
  is one in which the standard library may not exist, and program startup may
! not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an OS kernel.
  This is equivalent to \fB\-fno\-hosted\fR.
! .IP \fB\-fgimple\fR 4
  .IX Item "-fgimple"
  Enable parsing of function definitions marked with \f(CW\*(C`_\|_GIMPLE\*(C'\fR.
! This is an experimental feature that allows unit testing of GIMPLE
  passes.
! .IP \fB\-fgnu\-tm\fR 4
  .IX Item "-fgnu-tm"
  When the option \fB\-fgnu\-tm\fR is specified, the compiler
! generates code for the Linux variant of Intel\*(Aqs current Transactional
! Memory ABI specification document (Revision 1.1, May 6 2009).  This is
  an experimental feature whose interface may change in future versions
! of GCC, as the official specification changes.  Please note that not
  all architectures are supported for this feature.
  .Sp
! For more information on GCC\*(Aqs support for transactional memory,
  .Sp
  Note that the transactional memory feature is not supported with
! non\-call exceptions (\fB\-fnon\-call\-exceptions\fR).
! .IP \fB\-fgnu89\-inline\fR 4
  .IX Item "-fgnu89-inline"
! The option \fB\-fgnu89\-inline\fR tells GCC to use the traditional
! GNU semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
  .Sp
  Using this option is roughly equivalent to adding the
  \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
  .Sp
! The option \fB\-fno\-gnu89\-inline\fR explicitly tells GCC to use the
  C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
  specifies the default behavior).
  This option is not supported in \fB\-std=c90\fR or
*************** This option is not supported in \fB\-std
*** 2756,2778 ****
  The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
  \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
  in effect for \f(CW\*(C`inline\*(C'\fR functions.
! .IP "\fB\-fhosted\fR" 4
  .IX Item "-fhosted"
  Assert that compilation targets a hosted environment.  This implies
  \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
  entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
  type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
  This is equivalent to \fB\-fno\-freestanding\fR.
! .IP "\fB\-flax\-vector\-conversions\fR" 4
  .IX Item "-flax-vector-conversions"
  Allow implicit conversions between vectors with differing numbers of
  elements and/or incompatible element types.  This option should not be
  used for new code.
! .IP "\fB\-fms\-extensions\fR" 4
  .IX Item "-fms-extensions"
! Accept some non-standard constructs used in Microsoft header files.
  .Sp
! In \*(C+ code, this allows member names in structures to be similar
  to previous types declarations.
  .Sp
  .Vb 4
--- 2689,2711 ----
  The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
  \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
  in effect for \f(CW\*(C`inline\*(C'\fR functions.
! .IP \fB\-fhosted\fR 4
  .IX Item "-fhosted"
  Assert that compilation targets a hosted environment.  This implies
  \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
  entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
  type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
  This is equivalent to \fB\-fno\-freestanding\fR.
! .IP \fB\-flax\-vector\-conversions\fR 4
  .IX Item "-flax-vector-conversions"
  Allow implicit conversions between vectors with differing numbers of
  elements and/or incompatible element types.  This option should not be
  used for new code.
! .IP \fB\-fms\-extensions\fR 4
  .IX Item "-fms-extensions"
! Accept some non\-standard constructs used in Microsoft header files.
  .Sp
! In C++ code, this allows member names in structures to be similar
  to previous types declarations.
  .Sp
  .Vb 4
*************** Some cases of unnamed fields in structur
*** 2786,2821 ****
  accepted with this option.
  .Sp
  Note that this option is off for all targets except for x86
! targets using ms-abi.
! .IP "\fB\-foffload=disable\fR" 4
  .IX Item "-foffload=disable"
  .PD 0
! .IP "\fB\-foffload=default\fR" 4
  .IX Item "-foffload=default"
! .IP "\fB\-foffload=\fR\fItarget-list\fR" 4
  .IX Item "-foffload=target-list"
  .PD
  Specify for which OpenMP and OpenACC offload targets code should be generated.
  The default behavior, equivalent to \fB\-foffload=default\fR, is to generate
  code for all supported offload targets.  The \fB\-foffload=disable\fR form
  generates code only for the host fallback, while
! \&\fB\-foffload=\fR\fItarget-list\fR generates code only for the specified
! comma-separated list of offload targets.
  .Sp
! Offload targets are specified in \s-1GCC\s0's internal target-triplet format. You can
  run the compiler with \fB\-v\fR to show the list of configured offload targets
  under \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR.
! .IP "\fB\-foffload\-options=\fR\fIoptions\fR" 4
  .IX Item "-foffload-options=options"
  .PD 0
! .IP "\fB\-foffload\-options=\fR\fItarget-triplet-list\fR\fB=\fR\fIoptions\fR" 4
  .IX Item "-foffload-options=target-triplet-list=options"
  .PD
! With \fB\-foffload\-options=\fR\fIoptions\fR, \s-1GCC\s0 passes the specified
  \&\fIoptions\fR to the compilers for all enabled offloading targets.  You can
  specify options that apply only to a specific target or targets by using
! the \fB\-foffload\-options=\fR\fItarget-list\fR\fB=\fR\fIoptions\fR form.  The
! \&\fItarget-list\fR is a comma-separated list in the same format as for the
  \&\fB\-foffload=\fR option.
  .Sp
  Typical command lines are
--- 2719,2754 ----
  accepted with this option.
  .Sp
  Note that this option is off for all targets except for x86
! targets using ms\-abi.
! .IP \fB\-foffload=disable\fR 4
  .IX Item "-foffload=disable"
  .PD 0
! .IP \fB\-foffload=default\fR 4
  .IX Item "-foffload=default"
! .IP \fB\-foffload=\fR\fItarget\-list\fR 4
  .IX Item "-foffload=target-list"
  .PD
  Specify for which OpenMP and OpenACC offload targets code should be generated.
  The default behavior, equivalent to \fB\-foffload=default\fR, is to generate
  code for all supported offload targets.  The \fB\-foffload=disable\fR form
  generates code only for the host fallback, while
! \&\fB\-foffload=\fR\fItarget\-list\fR generates code only for the specified
! comma\-separated list of offload targets.
  .Sp
! Offload targets are specified in GCC\*(Aqs internal target\-triplet format. You can
  run the compiler with \fB\-v\fR to show the list of configured offload targets
  under \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR.
! .IP \fB\-foffload\-options=\fR\fIoptions\fR 4
  .IX Item "-foffload-options=options"
  .PD 0
! .IP \fB\-foffload\-options=\fR\fItarget\-triplet\-list\fR\fB=\fR\fIoptions\fR 4
  .IX Item "-foffload-options=target-triplet-list=options"
  .PD
! With \fB\-foffload\-options=\fR\fIoptions\fR, GCC passes the specified
  \&\fIoptions\fR to the compilers for all enabled offloading targets.  You can
  specify options that apply only to a specific target or targets by using
! the \fB\-foffload\-options=\fR\fItarget\-list\fR\fB=\fR\fIoptions\fR form.  The
! \&\fItarget\-list\fR is a comma\-separated list in the same format as for the
  \&\fB\-foffload=\fR option.
  .Sp
  Typical command lines are
*************** Typical command lines are
*** 2824,2849 ****
  \&        \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \-foffload\-options=nvptx\-none=\-latomic
  \&        \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906
  .Ve
! .IP "\fB\-fopenacc\fR" 4
  .IX Item "-fopenacc"
! Enable handling of OpenACC directives \fB#pragma acc\fR in C/\*(C+ and
! \&\fB!$acc\fR in free-form Fortran and \fB!$acc\fR, \fBc$acc\fR and
! \&\fB*$acc\fR in fixed-form Fortran.  When \fB\-fopenacc\fR is specified,
  the compiler generates accelerated code according to the OpenACC Application
  Programming Interface v2.6 <\fBhttps://www.openacc.org\fR>.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR.
! .IP "\fB\-fopenacc\-dim=\fR\fIgeom\fR" 4
  .IX Item "-fopenacc-dim=geom"
  Specify default compute dimensions for parallel offload regions that do
  not explicitly specify.  The \fIgeom\fR value is a triple of
! \&':'\-separated sizes, in order 'gang', 'worker' and, 'vector'.  A size
! can be omitted, to use a target-specific default value.
! .IP "\fB\-fopenmp\fR" 4
  .IX Item "-fopenmp"
  Enable handling of OpenMP directives \fB#pragma omp\fR,
  \&\fB[[omp::directive(...)]]\fR, \fB[[omp::sequence(...)]]\fR and
! \&\fB[[omp::decl(...)]]\fR in C/\*(C+ and \fB!$omp\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  When \fB\-fopenmp\fR is specified, the
--- 2757,2782 ----
  \&        \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \-foffload\-options=nvptx\-none=\-latomic
  \&        \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906
  .Ve
! .IP \fB\-fopenacc\fR 4
  .IX Item "-fopenacc"
! Enable handling of OpenACC directives \fB#pragma acc\fR in C/C++ and
! \&\fB!$acc\fR in free\-form Fortran and \fB!$acc\fR, \fBc$acc\fR and
! \&\fB*$acc\fR in fixed\-form Fortran.  When \fB\-fopenacc\fR is specified,
  the compiler generates accelerated code according to the OpenACC Application
  Programming Interface v2.6 <\fBhttps://www.openacc.org\fR>.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR.
! .IP \fB\-fopenacc\-dim=\fR\fIgeom\fR 4
  .IX Item "-fopenacc-dim=geom"
  Specify default compute dimensions for parallel offload regions that do
  not explicitly specify.  The \fIgeom\fR value is a triple of
! \&\*(Aq:\*(Aq\-separated sizes, in order \*(Aqgang\*(Aq, \*(Aqworker\*(Aq and, \*(Aqvector\*(Aq.  A size
! can be omitted, to use a target\-specific default value.
! .IP \fB\-fopenmp\fR 4
  .IX Item "-fopenmp"
  Enable handling of OpenMP directives \fB#pragma omp\fR,
  \&\fB[[omp::directive(...)]]\fR, \fB[[omp::sequence(...)]]\fR and
! \&\fB[[omp::decl(...)]]\fR in C/C++ and \fB!$omp\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  When \fB\-fopenmp\fR is specified, the
*************** Program Interface v4.5 <\fBhttps://www.o
*** 2852,2881 ****
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
  \&\fB\-fopenmp\-simd\fR.
! .IP "\fB\-fopenmp\-simd\fR" 4
  .IX Item "-fopenmp-simd"
! Enable handling of OpenMP's \f(CW\*(C`simd\*(C'\fR, \f(CW\*(C`declare simd\*(C'\fR,
  \&\f(CW\*(C`declare reduction\*(C'\fR, \f(CW\*(C`assume\*(C'\fR, \f(CW\*(C`ordered\*(C'\fR, \f(CW\*(C`scan\*(C'\fR
  and \f(CW\*(C`loop\*(C'\fR directive, and of combined or composite directives with
  \&\f(CW\*(C`simd\*(C'\fR as constituent with \f(CW\*(C`#pragma omp\*(C'\fR,
  \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR, \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR and
! \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR in C/\*(C+ and \f(CW\*(C`!$omp\*(C'\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  Other OpenMP directives are ignored.  Unless
  \&\fB\-fopenmp\fR is additionally specified, the \f(CW\*(C`loop\*(C'\fR region binds
  to the current task region, independent of the specified \f(CW\*(C`bind\*(C'\fR clause.
! .IP "\fB\-fopenmp\-target\-simd\-clone\fR" 4
  .IX Item "-fopenmp-target-simd-clone"
  .PD 0
! .IP "\fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice-type\fR" 4
  .IX Item "-fopenmp-target-simd-clone=device-type"
  .PD
! In addition to generating \s-1SIMD\s0 clones for functions marked with the
! \&\f(CW\*(C`declare simd\*(C'\fR directive, \s-1GCC\s0 also generates clones
  for functions marked with the OpenMP \f(CW\*(C`declare target\*(C'\fR directive
  that are suitable for vectorization when this option is in effect.  The
! \&\fIdevice-type\fR may be one of \f(CW\*(C`none\*(C'\fR, \f(CW\*(C`host\*(C'\fR, \f(CW\*(C`nohost\*(C'\fR,
  and \f(CW\*(C`any\*(C'\fR, which correspond to keywords for the \f(CW\*(C`device_type\*(C'\fR
  clause of the \f(CW\*(C`declare target\*(C'\fR directive; clones are generated for
  the intersection of devices specified.
--- 2785,2814 ----
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
  \&\fB\-fopenmp\-simd\fR.
! .IP \fB\-fopenmp\-simd\fR 4
  .IX Item "-fopenmp-simd"
! Enable handling of OpenMP\*(Aqs \f(CW\*(C`simd\*(C'\fR, \f(CW\*(C`declare simd\*(C'\fR,
  \&\f(CW\*(C`declare reduction\*(C'\fR, \f(CW\*(C`assume\*(C'\fR, \f(CW\*(C`ordered\*(C'\fR, \f(CW\*(C`scan\*(C'\fR
  and \f(CW\*(C`loop\*(C'\fR directive, and of combined or composite directives with
  \&\f(CW\*(C`simd\*(C'\fR as constituent with \f(CW\*(C`#pragma omp\*(C'\fR,
  \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR, \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR and
! \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR in C/C++ and \f(CW\*(C`!$omp\*(C'\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  Other OpenMP directives are ignored.  Unless
  \&\fB\-fopenmp\fR is additionally specified, the \f(CW\*(C`loop\*(C'\fR region binds
  to the current task region, independent of the specified \f(CW\*(C`bind\*(C'\fR clause.
! .IP \fB\-fopenmp\-target\-simd\-clone\fR 4
  .IX Item "-fopenmp-target-simd-clone"
  .PD 0
! .IP \fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice\-type\fR 4
  .IX Item "-fopenmp-target-simd-clone=device-type"
  .PD
! In addition to generating SIMD clones for functions marked with the
! \&\f(CW\*(C`declare simd\*(C'\fR directive, GCC also generates clones
  for functions marked with the OpenMP \f(CW\*(C`declare target\*(C'\fR directive
  that are suitable for vectorization when this option is in effect.  The
! \&\fIdevice\-type\fR may be one of \f(CW\*(C`none\*(C'\fR, \f(CW\*(C`host\*(C'\fR, \f(CW\*(C`nohost\*(C'\fR,
  and \f(CW\*(C`any\*(C'\fR, which correspond to keywords for the \f(CW\*(C`device_type\*(C'\fR
  clause of the \f(CW\*(C`declare target\*(C'\fR directive; clones are generated for
  the intersection of devices specified.
*************** the intersection of devices specified.
*** 2887,2895 ****
  At \fB\-O2\fR and higher (but not \fB\-Os\fR or \fB\-Og\fR) this
  optimization defaults to \fB\-fopenmp\-target\-simd\-clone=nohost\fR; otherwise
  it is disabled by default.
! .IP "\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR" 4
  .IX Item "-fpermitted-flt-eval-methods=style"
! \&\s-1ISO/IEC TS 18661\-3\s0 defines new permissible values for
  \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR that indicate that operations and constants with
  a semantic type that is an interchange or extended format should be
  evaluated to the precision and range of that type.  These new values are
--- 2820,2828 ----
  At \fB\-O2\fR and higher (but not \fB\-Os\fR or \fB\-Og\fR) this
  optimization defaults to \fB\-fopenmp\-target\-simd\-clone=nohost\fR; otherwise
  it is disabled by default.
! .IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4
  .IX Item "-fpermitted-flt-eval-methods=style"
! ISO/IEC TS 18661\-3 defines new permissible values for
  \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR that indicate that operations and constants with
  a semantic type that is an interchange or extended format should be
  evaluated to the precision and range of that type.  These new values are
*************** the new values.
*** 2900,2911 ****
  .Sp
  \&\fB\-fpermitted\-flt\-eval\-methods\fR specifies whether the compiler
  should allow only the values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR specified in C99/C11,
! or the extended set of values specified in \s-1ISO/IEC TS 18661\-3.\s0
  .Sp
  \&\fIstyle\fR is either \f(CW\*(C`c11\*(C'\fR or \f(CW\*(C`ts\-18661\-3\*(C'\fR as appropriate.
  .Sp
  The default when in a standards compliant mode (\fB\-std=c11\fR or similar)
! is \fB\-fpermitted\-flt\-eval\-methods=c11\fR.  The default when in a \s-1GNU\s0
  dialect (\fB\-std=gnu11\fR or similar) is
  \&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR.
  .Sp
--- 2833,2844 ----
  .Sp
  \&\fB\-fpermitted\-flt\-eval\-methods\fR specifies whether the compiler
  should allow only the values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR specified in C99/C11,
! or the extended set of values specified in ISO/IEC TS 18661\-3.
  .Sp
  \&\fIstyle\fR is either \f(CW\*(C`c11\*(C'\fR or \f(CW\*(C`ts\-18661\-3\*(C'\fR as appropriate.
  .Sp
  The default when in a standards compliant mode (\fB\-std=c11\fR or similar)
! is \fB\-fpermitted\-flt\-eval\-methods=c11\fR.  The default when in a GNU
  dialect (\fB\-std=gnu11\fR or similar) is
  \&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR.
  .Sp
*************** resources are provided by the source.  T
*** 2916,2967 ****
  required dependencies between compilation rules of dependent sources based on
  their contents rather than requiring such information be reflected within the
  build tools as well.
! .IP "\fB\-fdeps\-file=\fR\fIfile\fR" 4
  .IX Item "-fdeps-file=file"
  Where to write structured dependency information.
! .IP "\fB\-fdeps\-format=\fR\fIformat\fR" 4
  .IX Item "-fdeps-format=format"
  The format to use for structured dependency information. \fBp1689r5\fR is the
  only supported format right now.  Note that when this argument is specified, the
! output of \fB\-MF\fR is stripped of some information (namely \*(C+ modules) so
  that it does not use extended makefile syntax not understood by most tools.
! .IP "\fB\-fdeps\-target=\fR\fIfile\fR" 4
  .IX Item "-fdeps-target=file"
  Analogous to \fB\-MT\fR but for structured dependency information.  This
  indicates the target which will ultimately need any required resources and
  provide any resources extracted from the source that may be required by other
  sources.
! .IP "\fB\-fplan9\-extensions\fR" 4
  .IX Item "-fplan9-extensions"
! Accept some non-standard constructs used in Plan 9 code.
  .Sp
  This enables \fB\-fms\-extensions\fR, permits passing pointers to
  structures with anonymous fields to functions that expect pointers to
  elements of the type of the field, and permits referring to anonymous
  fields declared using a typedef.    This is only
! supported for C, not \*(C+.
! .IP "\fB\-fsigned\-bitfields\fR" 4
  .IX Item "-fsigned-bitfields"
  .PD 0
! .IP "\fB\-funsigned\-bitfields\fR" 4
  .IX Item "-funsigned-bitfields"
! .IP "\fB\-fno\-signed\-bitfields\fR" 4
  .IX Item "-fno-signed-bitfields"
! .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
  .IX Item "-fno-unsigned-bitfields"
  .PD
! These options control whether a bit-field is signed or unsigned, when the
  declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
! default, such a bit-field is signed, because this is consistent: the
  basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
! .IP "\fB\-fsigned\-char\fR" 4
  .IX Item "-fsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
  .Sp
  Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
  the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
  \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
! .IP "\fB\-funsigned\-char\fR" 4
  .IX Item "-funsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
  .Sp
--- 2849,2900 ----
  required dependencies between compilation rules of dependent sources based on
  their contents rather than requiring such information be reflected within the
  build tools as well.
! .IP \fB\-fdeps\-file=\fR\fIfile\fR 4
  .IX Item "-fdeps-file=file"
  Where to write structured dependency information.
! .IP \fB\-fdeps\-format=\fR\fIformat\fR 4
  .IX Item "-fdeps-format=format"
  The format to use for structured dependency information. \fBp1689r5\fR is the
  only supported format right now.  Note that when this argument is specified, the
! output of \fB\-MF\fR is stripped of some information (namely C++ modules) so
  that it does not use extended makefile syntax not understood by most tools.
! .IP \fB\-fdeps\-target=\fR\fIfile\fR 4
  .IX Item "-fdeps-target=file"
  Analogous to \fB\-MT\fR but for structured dependency information.  This
  indicates the target which will ultimately need any required resources and
  provide any resources extracted from the source that may be required by other
  sources.
! .IP \fB\-fplan9\-extensions\fR 4
  .IX Item "-fplan9-extensions"
! Accept some non\-standard constructs used in Plan 9 code.
  .Sp
  This enables \fB\-fms\-extensions\fR, permits passing pointers to
  structures with anonymous fields to functions that expect pointers to
  elements of the type of the field, and permits referring to anonymous
  fields declared using a typedef.    This is only
! supported for C, not C++.
! .IP \fB\-fsigned\-bitfields\fR 4
  .IX Item "-fsigned-bitfields"
  .PD 0
! .IP \fB\-funsigned\-bitfields\fR 4
  .IX Item "-funsigned-bitfields"
! .IP \fB\-fno\-signed\-bitfields\fR 4
  .IX Item "-fno-signed-bitfields"
! .IP \fB\-fno\-unsigned\-bitfields\fR 4
  .IX Item "-fno-unsigned-bitfields"
  .PD
! These options control whether a bit\-field is signed or unsigned, when the
  declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
! default, such a bit\-field is signed, because this is consistent: the
  basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
! .IP \fB\-fsigned\-char\fR 4
  .IX Item "-fsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
  .Sp
  Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
  the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
  \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
! .IP \fB\-funsigned\-char\fR 4
  .IX Item "-funsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
  .Sp
*************** make such a program work with the opposi
*** 2979,2989 ****
  The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
  \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
  is always just like one of those two.
! .IP "\fB\-fstrict\-flex\-arrays\fR (C and \*(C+ only)" 4
! .IX Item "-fstrict-flex-arrays (C and only)"
  .PD 0
! .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(C and \*(C+ only)" 4
! .IX Item "-fstrict-flex-arrays=level (C and only)"
  .PD
  Control when to treat the trailing array of a structure as a flexible array
  member for the purpose of accessing the elements of such an array.  The value
--- 2912,2922 ----
  The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
  \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
  is always just like one of those two.
! .IP "\fB\-fstrict\-flex\-arrays\fR (C and C++ only)" 4
! .IX Item "-fstrict-flex-arrays (C and C++ only)"
  .PD 0
! .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(C and C++ only)" 4
! .IX Item "-fstrict-flex-arrays=level (C and C++ only)"
  .PD
  Control when to treat the trailing array of a structure as a flexible array
  member for the purpose of accessing the elements of such an array.  The value
*************** structure by using the variable attribut
*** 3006,3025 ****
  .Sp
  The \fB\-fstrict_flex_arrays\fR option interacts with the
  \&\fB\-Wstrict\-flex\-arrays\fR option.
! .IP "\fB\-fsso\-struct=\fR\fIendianness\fR" 4
  .IX Item "-fsso-struct=endianness"
  Set the default scalar storage order of structures and unions to the
! specified endianness.  The accepted values are \fBbig-endian\fR,
! \&\fBlittle-endian\fR and \fBnative\fR for the native endianness of
! the target (the default).  This option is not supported for \*(C+.
  .Sp
! \&\fBWarning:\fR the \fB\-fsso\-struct\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without it if the
  specified endianness is not the native endianness of the target.
! .SS "Options Controlling \*(C+ Dialect"
! .IX Subsection "Options Controlling Dialect"
! This section describes the command-line options that are only meaningful
! for \*(C+ programs.  You can also use most of the \s-1GNU\s0 compiler options
  regardless of what language your program is in.  For example, you
  might compile a file \fIfirstClass.C\fR like this:
  .PP
--- 2939,2958 ----
  .Sp
  The \fB\-fstrict_flex_arrays\fR option interacts with the
  \&\fB\-Wstrict\-flex\-arrays\fR option.
! .IP \fB\-fsso\-struct=\fR\fIendianness\fR 4
  .IX Item "-fsso-struct=endianness"
  Set the default scalar storage order of structures and unions to the
! specified endianness.  The accepted values are \fBbig\-endian\fR,
! \&\fBlittle\-endian\fR and \fBnative\fR for the native endianness of
! the target (the default).  This option is not supported for C++.
  .Sp
! \&\fBWarning:\fR the \fB\-fsso\-struct\fR switch causes GCC to generate
  code that is not binary compatible with code generated without it if the
  specified endianness is not the native endianness of the target.
! .SS "Options Controlling C++ Dialect"
! .IX Subsection "Options Controlling C++ Dialect"
! This section describes the command\-line options that are only meaningful
! for C++ programs.  You can also use most of the GNU compiler options
  regardless of what language your program is in.  For example, you
  might compile a file \fIfirstClass.C\fR like this:
  .PP
*************** might compile a file \fIfirstClass.C\fR
*** 3028,3051 ****
  .Ve
  .PP
  In this example, only \fB\-fstrict\-enums\fR is an option meant
! only for \*(C+ programs; you can use the other options with any
! language supported by \s-1GCC.\s0
  .PP
  Some options for compiling C programs, such as \fB\-std\fR, are also
! relevant for \*(C+ programs.
  .PP
! Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
! .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
  .IX Item "-fabi-version=n"
! Use version \fIn\fR of the \*(C+ \s-1ABI.\s0  The default is version 0.
  .Sp
  Version 0 refers to the version conforming most closely to
! the \*(C+ \s-1ABI\s0 specification.  Therefore, the \s-1ABI\s0 obtained using version 0
! will change in different versions of G++ as \s-1ABI\s0 bugs are fixed.
  .Sp
! Version 1 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.
  .Sp
! Version 2 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++
  3.4, and was the default through G++ 4.9.
  .Sp
  Version 3 corrects an error in mangling a constant address as a
--- 2961,2984 ----
  .Ve
  .PP
  In this example, only \fB\-fstrict\-enums\fR is an option meant
! only for C++ programs; you can use the other options with any
! language supported by GCC.
  .PP
  Some options for compiling C programs, such as \fB\-std\fR, are also
! relevant for C++ programs.
  .PP
! Here is a list of options that are \fIonly\fR for compiling C++ programs:
! .IP \fB\-fabi\-version=\fR\fIn\fR 4
  .IX Item "-fabi-version=n"
! Use version \fIn\fR of the C++ ABI.  The default is version 0.
  .Sp
  Version 0 refers to the version conforming most closely to
! the C++ ABI specification.  Therefore, the ABI obtained using version 0
! will change in different versions of G++ as ABI bugs are fixed.
  .Sp
! Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.
  .Sp
! Version 2 is the version of the C++ ABI that first appeared in G++
  3.4, and was the default through G++ 4.9.
  .Sp
  Version 3 corrects an error in mangling a constant address as a
*************** plain decl, and use of a function parame
*** 3060,3066 ****
  another parameter.
  .Sp
  Version 6, which first appeared in G++ 4.7, corrects the promotion
! behavior of \*(C+11 scoped enums and the mangling of template argument
  packs, const/static_cast, prefix ++ and \-\-, and a class scope function
  used as a template argument.
  .Sp
--- 2993,2999 ----
  another parameter.
  .Sp
  Version 6, which first appeared in G++ 4.7, corrects the promotion
! behavior of C++11 scoped enums and the mangling of template argument
  packs, const/static_cast, prefix ++ and \-\-, and a class scope function
  used as a template argument.
  .Sp
*************** builtin type and corrects the mangling o
*** 3069,3075 ****
  scope.
  .Sp
  Version 8, which first appeared in G++ 4.9, corrects the substitution
! behavior of function types with function-cv-qualifiers.
  .Sp
  Version 9, which first appeared in G++ 5.2, corrects the alignment of
  \&\f(CW\*(C`nullptr_t\*(C'\fR.
--- 3002,3008 ----
  scope.
  .Sp
  Version 8, which first appeared in G++ 4.9, corrects the substitution
! behavior of function types with function\-cv\-qualifiers.
  .Sp
  Version 9, which first appeared in G++ 5.2, corrects the alignment of
  \&\f(CW\*(C`nullptr_t\*(C'\fR.
*************** change in version 12.
*** 3096,3102 ****
  Version 14, which first appeared in G++ 10, corrects the mangling of
  the nullptr expression.
  .Sp
! Version 15, which first appeared in G++ 10.3, corrects G++ 10 \s-1ABI\s0
  tag regression.
  .Sp
  Version 16, which first appeared in G++ 11, changes the mangling of
--- 3029,3035 ----
  Version 14, which first appeared in G++ 10, corrects the mangling of
  the nullptr expression.
  .Sp
! Version 15, which first appeared in G++ 10.3, corrects G++ 10 ABI
  tag regression.
  .Sp
  Version 16, which first appeared in G++ 11, changes the mangling of
*************** dependent operator names.
*** 3105,3162 ****
  .Sp
  Version 17, which first appeared in G++ 12, fixes layout of classes
  that inherit from aggregate classes with default member initializers
! in \*(C+14 and up.
  .Sp
  Version 18, which first appeard in G++ 13, fixes manglings of lambdas
  that have additional context.
  .Sp
  Version 19, which first appeard in G++ 14, fixes manglings of structured
! bindings to include \s-1ABI\s0 tags.
  .Sp
  See also \fB\-Wabi\fR.
! .IP "\fB\-fabi\-compat\-version=\fR\fIn\fR" 4
  .IX Item "-fabi-compat-version=n"
  On targets that support strong aliases, G++
  works around mangling changes by creating an alias with the correct
  mangled name when defining a symbol with an incorrect mangled name.
! This switch specifies which \s-1ABI\s0 version to use for the alias.
  .Sp
! With \fB\-fabi\-version=0\fR (the default), this defaults to 13 (\s-1GCC 8.2\s0
! compatibility).  If another \s-1ABI\s0 version is explicitly selected, this
! defaults to 0.  For compatibility with \s-1GCC\s0 versions 3.2 through 4.9,
  use \fB\-fabi\-compat\-version=2\fR.
  .Sp
  If this option is not provided but \fB\-Wabi=\fR\fIn\fR is, that
  version is used for compatibility aliases.  If this option is provided
  along with \fB\-Wabi\fR (without the version), the version from this
  option is used for the warning.
! .IP "\fB\-fno\-access\-control\fR" 4
  .IX Item "-fno-access-control"
  Turn off all access checking.  This switch is mainly useful for working
  around bugs in the access control code.
! .IP "\fB\-faligned\-new\fR" 4
  .IX Item "-faligned-new"
! Enable support for \*(C+17 \f(CW\*(C`new\*(C'\fR of types that require more
  alignment than \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR provides.  A
  numeric argument such as \f(CW\*(C`\-faligned\-new=32\*(C'\fR can be used to
  specify how much alignment (in bytes) is provided by that function,
  but few users will need to override the default of
! \&\f(CW\*(C`alignof(std::max_align_t)\*(C'\fR.
  .Sp
  This flag is enabled by default for \fB\-std=c++17\fR.
! .IP "\fB\-fchar8_t\fR" 4
  .IX Item "-fchar8_t"
  .PD 0
! .IP "\fB\-fno\-char8_t\fR" 4
  .IX Item "-fno-char8_t"
  .PD
! Enable support for \f(CW\*(C`char8_t\*(C'\fR as adopted for \*(C+20.  This includes
  the addition of a new \f(CW\*(C`char8_t\*(C'\fR fundamental type, changes to the
! types of \s-1UTF\-8\s0 string and character literals, new signatures for
! user-defined literals, associated standard library updates, and new
  \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR and \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR feature test macros.
  .Sp
! This option enables functions to be overloaded for ordinary and \s-1UTF\-8\s0
  strings:
  .Sp
  .Vb 4
--- 3038,3095 ----
  .Sp
  Version 17, which first appeared in G++ 12, fixes layout of classes
  that inherit from aggregate classes with default member initializers
! in C++14 and up.
  .Sp
  Version 18, which first appeard in G++ 13, fixes manglings of lambdas
  that have additional context.
  .Sp
  Version 19, which first appeard in G++ 14, fixes manglings of structured
! bindings to include ABI tags.
  .Sp
  See also \fB\-Wabi\fR.
! .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4
  .IX Item "-fabi-compat-version=n"
  On targets that support strong aliases, G++
  works around mangling changes by creating an alias with the correct
  mangled name when defining a symbol with an incorrect mangled name.
! This switch specifies which ABI version to use for the alias.
  .Sp
! With \fB\-fabi\-version=0\fR (the default), this defaults to 13 (GCC 8.2
! compatibility).  If another ABI version is explicitly selected, this
! defaults to 0.  For compatibility with GCC versions 3.2 through 4.9,
  use \fB\-fabi\-compat\-version=2\fR.
  .Sp
  If this option is not provided but \fB\-Wabi=\fR\fIn\fR is, that
  version is used for compatibility aliases.  If this option is provided
  along with \fB\-Wabi\fR (without the version), the version from this
  option is used for the warning.
! .IP \fB\-fno\-access\-control\fR 4
  .IX Item "-fno-access-control"
  Turn off all access checking.  This switch is mainly useful for working
  around bugs in the access control code.
! .IP \fB\-faligned\-new\fR 4
  .IX Item "-faligned-new"
! Enable support for C++17 \f(CW\*(C`new\*(C'\fR of types that require more
  alignment than \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR provides.  A
  numeric argument such as \f(CW\*(C`\-faligned\-new=32\*(C'\fR can be used to
  specify how much alignment (in bytes) is provided by that function,
  but few users will need to override the default of
! \&\f(CWalignof(std::max_align_t)\fR.
  .Sp
  This flag is enabled by default for \fB\-std=c++17\fR.
! .IP \fB\-fchar8_t\fR 4
  .IX Item "-fchar8_t"
  .PD 0
! .IP \fB\-fno\-char8_t\fR 4
  .IX Item "-fno-char8_t"
  .PD
! Enable support for \f(CW\*(C`char8_t\*(C'\fR as adopted for C++20.  This includes
  the addition of a new \f(CW\*(C`char8_t\*(C'\fR fundamental type, changes to the
! types of UTF\-8 string and character literals, new signatures for
! user\-defined literals, associated standard library updates, and new
  \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR and \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR feature test macros.
  .Sp
! This option enables functions to be overloaded for ordinary and UTF\-8
  strings:
  .Sp
  .Vb 4
*************** strings:
*** 3166,3172 ****
  \&        int v2 = f(u8"text");   // Calls #2
  .Ve
  .Sp
! and introduces new signatures for user-defined literals:
  .Sp
  .Vb 6
  \&        int operator""_udl1(char8_t);
--- 3099,3105 ----
  \&        int v2 = f(u8"text");   // Calls #2
  .Ve
  .Sp
! and introduces new signatures for user\-defined literals:
  .Sp
  .Vb 6
  \&        int operator""_udl1(char8_t);
*************** and introduces new signatures for user-d
*** 3177,3185 ****
  \&        int v5 = u8"text"_udl3;
  .Ve
  .Sp
! The change to the types of \s-1UTF\-8\s0 string and character literals introduces
! incompatibilities with \s-1ISO \*(C+11\s0 and later standards.  For example, the
! following code is well-formed under \s-1ISO \*(C+11,\s0 but is ill-formed when
  \&\fB\-fchar8_t\fR is specified.
  .Sp
  .Vb 11
--- 3110,3118 ----
  \&        int v5 = u8"text"_udl3;
  .Ve
  .Sp
! The change to the types of UTF\-8 string and character literals introduces
! incompatibilities with ISO C++11 and later standards.  For example, the
! following code is well\-formed under ISO C++11, but is ill\-formed when
  \&\fB\-fchar8_t\fR is specified.
  .Sp
  .Vb 11
*************** following code is well-formed under \s-1
*** 3195,3236 ****
  \&                                //        \`basic_string<char8_t>\*(Aq to non\-scalar
  \&                                //        type \`basic_string<char>\*(Aq requested
  .Ve
! .IP "\fB\-fcheck\-new\fR" 4
  .IX Item "-fcheck-new"
! Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
  before attempting to modify the storage allocated.  This check is
! normally unnecessary because the \*(C+ standard specifies that
  \&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
! \&\f(CW\*(C`throw()\*(C'\fR, in which case the compiler always checks the
  return value even without this option.  In all other cases, when
! \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
  exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
  \&\fBnew (nothrow)\fR.
! .IP "\fB\-fconcepts\fR" 4
  .IX Item "-fconcepts"
  .PD 0
! .IP "\fB\-fconcepts\-ts\fR" 4
  .IX Item "-fconcepts-ts"
  .PD
! Enable support for the \*(C+ Concepts feature for constraining template
  arguments.  With \fB\-std=c++20\fR and above, Concepts are part of
  the language standard, so \fB\-fconcepts\fR defaults to on.
  .Sp
! Some constructs that were allowed by the earlier \*(C+ Extensions for
! Concepts Technical Specification, \s-1ISO 19217\s0 (2015), but didn't make it
  into the standard, can additionally be enabled by
  \&\fB\-fconcepts\-ts\fR.  The option \fB\-fconcepts\-ts\fR was deprecated
! in \s-1GCC 14\s0 and may be removed in \s-1GCC 15\s0; users are expected to convert
! their code to \*(C+20 concepts.
! .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-depth=n"
! Set the maximum nested evaluation depth for \*(C+11 constexpr functions
  to \fIn\fR.  A limit is needed to detect endless recursion during
  constant expression evaluation.  The minimum specified by the standard
  is 512.
! .IP "\fB\-fconstexpr\-cache\-depth=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-cache-depth=n"
! Set the maximum level of nested evaluation depth for \*(C+11 constexpr
  functions that will be cached to \fIn\fR.  This is a heuristic that
  trades off compilation speed (when the cache avoids repeated
  calculations) against memory consumption (when the cache grows very
--- 3128,3169 ----
  \&                                //        \`basic_string<char8_t>\*(Aq to non\-scalar
  \&                                //        type \`basic_string<char>\*(Aq requested
  .Ve
! .IP \fB\-fcheck\-new\fR 4
  .IX Item "-fcheck-new"
! Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non\-null
  before attempting to modify the storage allocated.  This check is
! normally unnecessary because the C++ standard specifies that
  \&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
! \&\f(CWthrow()\fR, in which case the compiler always checks the
  return value even without this option.  In all other cases, when
! \&\f(CW\*(C`operator new\*(C'\fR has a non\-empty exception specification, memory
  exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
  \&\fBnew (nothrow)\fR.
! .IP \fB\-fconcepts\fR 4
  .IX Item "-fconcepts"
  .PD 0
! .IP \fB\-fconcepts\-ts\fR 4
  .IX Item "-fconcepts-ts"
  .PD
! Enable support for the C++ Concepts feature for constraining template
  arguments.  With \fB\-std=c++20\fR and above, Concepts are part of
  the language standard, so \fB\-fconcepts\fR defaults to on.
  .Sp
! Some constructs that were allowed by the earlier C++ Extensions for
! Concepts Technical Specification, ISO 19217 (2015), but didn\*(Aqt make it
  into the standard, can additionally be enabled by
  \&\fB\-fconcepts\-ts\fR.  The option \fB\-fconcepts\-ts\fR was deprecated
! in GCC 14 and may be removed in GCC 15; users are expected to convert
! their code to C++20 concepts.
! .IP \fB\-fconstexpr\-depth=\fR\fIn\fR 4
  .IX Item "-fconstexpr-depth=n"
! Set the maximum nested evaluation depth for C++11 constexpr functions
  to \fIn\fR.  A limit is needed to detect endless recursion during
  constant expression evaluation.  The minimum specified by the standard
  is 512.
! .IP \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR 4
  .IX Item "-fconstexpr-cache-depth=n"
! Set the maximum level of nested evaluation depth for C++11 constexpr
  functions that will be cached to \fIn\fR.  This is a heuristic that
  trades off compilation speed (when the cache avoids repeated
  calculations) against memory consumption (when the cache grows very
*************** large from highly recursive evaluations)
*** 3238,3249 ****
  users are likely to want to adjust it, but if your code does heavy
  constexpr calculations you might want to experiment to find which
  value works best for you.
! .IP "\fB\-fconstexpr\-fp\-except\fR" 4
  .IX Item "-fconstexpr-fp-except"
! Annex F of the C standard specifies that \s-1IEC559\s0 floating point
  exceptions encountered at compile time should not stop compilation.
! \&\*(C+ compilers have historically not followed this guidance, instead
! treating floating point division by zero as non-constant even though
  it has a well defined value.  This flag tells the compiler to give
  Annex F priority over other rules saying that a particular operation
  is undefined.
--- 3171,3182 ----
  users are likely to want to adjust it, but if your code does heavy
  constexpr calculations you might want to experiment to find which
  value works best for you.
! .IP \fB\-fconstexpr\-fp\-except\fR 4
  .IX Item "-fconstexpr-fp-except"
! Annex F of the C standard specifies that IEC559 floating point
  exceptions encountered at compile time should not stop compilation.
! C++ compilers have historically not followed this guidance, instead
! treating floating point division by zero as non\-constant even though
  it has a well defined value.  This flag tells the compiler to give
  Annex F priority over other rules saying that a particular operation
  is undefined.
*************** is undefined.
*** 3251,3262 ****
  .Vb 1
  \&        constexpr float inf = 1./0.; // OK with \-fconstexpr\-fp\-except
  .Ve
! .IP "\fB\-fconstexpr\-loop\-limit=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-loop-limit=n"
! Set the maximum number of iterations for a loop in \*(C+14 constexpr functions
  to \fIn\fR.  A limit is needed to detect infinite loops during
  constant expression evaluation.  The default is 262144 (1<<18).
! .IP "\fB\-fconstexpr\-ops\-limit=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-ops-limit=n"
  Set the maximum number of operations during a single constexpr evaluation.
  Even when number of iterations of a single loop is limited with the above limit,
--- 3184,3195 ----
  .Vb 1
  \&        constexpr float inf = 1./0.; // OK with \-fconstexpr\-fp\-except
  .Ve
! .IP \fB\-fconstexpr\-loop\-limit=\fR\fIn\fR 4
  .IX Item "-fconstexpr-loop-limit=n"
! Set the maximum number of iterations for a loop in C++14 constexpr functions
  to \fIn\fR.  A limit is needed to detect infinite loops during
  constant expression evaluation.  The default is 262144 (1<<18).
! .IP \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR 4
  .IX Item "-fconstexpr-ops-limit=n"
  Set the maximum number of operations during a single constexpr evaluation.
  Even when number of iterations of a single loop is limited with the above limit,
*************** smaller than the above limit, or if in a
*** 3265,3278 ****
  of a loop too many expressions need to be evaluated, the resulting constexpr
  evaluation might take too long.
  The default is 33554432 (1<<25).
! .IP "\fB\-fcontracts\fR" 4
  .IX Item "-fcontracts"
! Enable experimental support for the \*(C+ Contracts feature, as briefly
! added to and then removed from the \*(C+20 working paper (N4820).  The
  implementation also includes proposed enhancements from papers P1290,
  P1332, and P1429.  This functionality is intended mostly for those
  interested in experimentation towards refining the feature to get it
! into shape for a future \*(C+ standard.
  .Sp
  On violation of a checked contract, the violation handler is called.
  Users can replace the violation handler by defining
--- 3198,3211 ----
  of a loop too many expressions need to be evaluated, the resulting constexpr
  evaluation might take too long.
  The default is 33554432 (1<<25).
! .IP \fB\-fcontracts\fR 4
  .IX Item "-fcontracts"
! Enable experimental support for the C++ Contracts feature, as briefly
! added to and then removed from the C++20 working paper (N4820).  The
  implementation also includes proposed enhancements from papers P1290,
  P1332, and P1429.  This functionality is intended mostly for those
  interested in experimentation towards refining the feature to get it
! into shape for a future C++ standard.
  .Sp
  On violation of a checked contract, the violation handler is called.
  Users can replace the violation handler by defining
*************** to specify which contracts will be check
*** 3287,3318 ****
  contracts, P1332 contracts, or P1429 contracts; these sets cannot be
  used together.
  .RS 4
! .IP "\fB\-fcontract\-mode=[on|off]\fR" 4
  .IX Item "-fcontract-mode=[on|off]"
  Control whether any contracts have any semantics at all.  Defaults to on.
! .IP "\fB\-fcontract\-assumption\-mode=[on|off]\fR" 4
  .IX Item "-fcontract-assumption-mode=[on|off]"
  [N4820] Control whether contracts with level \fBaxiom\fR
  should have the assume semantic.  Defaults to on.
! .IP "\fB\-fcontract\-build\-level=[off|default|audit]\fR" 4
  .IX Item "-fcontract-build-level=[off|default|audit]"
  [N4820] Specify which level of contracts to generate checks
  for.  Defaults to \fBdefault\fR.
! .IP "\fB\-fcontract\-continuation\-mode=[on|off]\fR" 4
  .IX Item "-fcontract-continuation-mode=[on|off]"
  [N4820] Control whether to allow the program to continue executing
  after a contract violation.  That is, do checked contracts have the
  \&\fBmaybe\fR semantic described below rather than the \fBnever\fR
  semantic.  Defaults to off.
! .IP "\fB\-fcontract\-role=<name>:<default>,<audit>,<axiom>\fR" 4
  .IX Item "-fcontract-role=<name>:<default>,<audit>,<axiom>"
  [P1332] Specify the concrete semantics for each contract level
  of a particular contract role.
! .IP "\fB\-fcontract\-semantic=[default|audit|axiom]:<semantic>\fR" 4
  .IX Item "-fcontract-semantic=[default|audit|axiom]:<semantic>"
  [P1429] Specify the concrete semantic for a particular
  contract level.
! .IP "\fB\-fcontract\-strict\-declarations=[on|off]\fR" 4
  .IX Item "-fcontract-strict-declarations=[on|off]"
  Control whether to reject adding contracts to a function after its
  first declaration.  Defaults to off.
--- 3220,3251 ----
  contracts, P1332 contracts, or P1429 contracts; these sets cannot be
  used together.
  .RS 4
! .IP \fB\-fcontract\-mode=[on|off]\fR 4
  .IX Item "-fcontract-mode=[on|off]"
  Control whether any contracts have any semantics at all.  Defaults to on.
! .IP \fB\-fcontract\-assumption\-mode=[on|off]\fR 4
  .IX Item "-fcontract-assumption-mode=[on|off]"
  [N4820] Control whether contracts with level \fBaxiom\fR
  should have the assume semantic.  Defaults to on.
! .IP \fB\-fcontract\-build\-level=[off|default|audit]\fR 4
  .IX Item "-fcontract-build-level=[off|default|audit]"
  [N4820] Specify which level of contracts to generate checks
  for.  Defaults to \fBdefault\fR.
! .IP \fB\-fcontract\-continuation\-mode=[on|off]\fR 4
  .IX Item "-fcontract-continuation-mode=[on|off]"
  [N4820] Control whether to allow the program to continue executing
  after a contract violation.  That is, do checked contracts have the
  \&\fBmaybe\fR semantic described below rather than the \fBnever\fR
  semantic.  Defaults to off.
! .IP \fB\-fcontract\-role=<name>:<default>,<audit>,<axiom>\fR 4
  .IX Item "-fcontract-role=<name>:<default>,<audit>,<axiom>"
  [P1332] Specify the concrete semantics for each contract level
  of a particular contract role.
! .IP \fB\-fcontract\-semantic=[default|audit|axiom]:<semantic>\fR 4
  .IX Item "-fcontract-semantic=[default|audit|axiom]:<semantic>"
  [P1429] Specify the concrete semantic for a particular
  contract level.
! .IP \fB\-fcontract\-strict\-declarations=[on|off]\fR 4
  .IX Item "-fcontract-strict-declarations=[on|off]"
  Control whether to reject adding contracts to a function after its
  first declaration.  Defaults to off.
*************** first declaration.  Defaults to off.
*** 3322,3353 ****
  The possible concrete semantics for that can be specified with
  \&\fB\-fcontract\-role\fR or \fB\-fcontract\-semantic\fR are:
  .ie n .IP """ignore""" 4
! .el .IP "\f(CWignore\fR" 4
  .IX Item "ignore"
  This contract has no effect.
  .ie n .IP """assume""" 4
! .el .IP "\f(CWassume\fR" 4
  .IX Item "assume"
! This contract is treated like \*(C+23 \f(CW\*(C`[[assume]]\*(C'\fR.
  .ie n .IP """check_never_continue""" 4
! .el .IP "\f(CWcheck_never_continue\fR" 4
  .IX Item "check_never_continue"
  .PD 0
  .ie n .IP """never""" 4
! .el .IP "\f(CWnever\fR" 4
  .IX Item "never"
  .ie n .IP """abort""" 4
! .el .IP "\f(CWabort\fR" 4
  .IX Item "abort"
  .PD
  This contract is checked.  If it fails, the violation handler is
  called.  If the handler returns, \f(CW\*(C`std::terminate\*(C'\fR is called.
  .ie n .IP """check_maybe_continue""" 4
! .el .IP "\f(CWcheck_maybe_continue\fR" 4
  .IX Item "check_maybe_continue"
  .PD 0
  .ie n .IP """maybe""" 4
! .el .IP "\f(CWmaybe\fR" 4
  .IX Item "maybe"
  .PD
  This contract is checked.  If it fails, the violation handler is
--- 3255,3286 ----
  The possible concrete semantics for that can be specified with
  \&\fB\-fcontract\-role\fR or \fB\-fcontract\-semantic\fR are:
  .ie n .IP """ignore""" 4
! .el .IP \f(CWignore\fR 4
  .IX Item "ignore"
  This contract has no effect.
  .ie n .IP """assume""" 4
! .el .IP \f(CWassume\fR 4
  .IX Item "assume"
! This contract is treated like C++23 \f(CW\*(C`[[assume]]\*(C'\fR.
  .ie n .IP """check_never_continue""" 4
! .el .IP \f(CWcheck_never_continue\fR 4
  .IX Item "check_never_continue"
  .PD 0
  .ie n .IP """never""" 4
! .el .IP \f(CWnever\fR 4
  .IX Item "never"
  .ie n .IP """abort""" 4
! .el .IP \f(CWabort\fR 4
  .IX Item "abort"
  .PD
  This contract is checked.  If it fails, the violation handler is
  called.  If the handler returns, \f(CW\*(C`std::terminate\*(C'\fR is called.
  .ie n .IP """check_maybe_continue""" 4
! .el .IP \f(CWcheck_maybe_continue\fR 4
  .IX Item "check_maybe_continue"
  .PD 0
  .ie n .IP """maybe""" 4
! .el .IP \f(CWmaybe\fR 4
  .IX Item "maybe"
  .PD
  This contract is checked.  If it fails, the violation handler is
*************** called.  If the handler returns, executi
*** 3355,3428 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fcoroutines\fR" 4
  .IX Item "-fcoroutines"
! Enable support for the \*(C+ coroutines extension (experimental).
! .IP "\fB\-fdiagnostics\-all\-candidates\fR" 4
  .IX Item "-fdiagnostics-all-candidates"
! Permit the \*(C+ front end to note all candidates during overload resolution
  failure, including when a deleted function is selected.
! .IP "\fB\-fno\-elide\-constructors\fR" 4
  .IX Item "-fno-elide-constructors"
! The \*(C+ standard allows an implementation to omit creating a temporary
  that is only used to initialize another object of the same type.
  Specifying this option disables that optimization, and forces G++ to
  call the copy constructor in all cases.  This option also causes G++
  to call trivial member functions which otherwise would be expanded inline.
  .Sp
! In \*(C+17, the compiler is required to omit these temporaries, but this
  option still affects trivial member functions.
! .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
  .IX Item "-fno-enforce-eh-specs"
! Don't generate code to check for violation of exception specifications
! at run time.  This option violates the \*(C+ standard, but may be useful
  for reducing code size in production builds, much like defining
  \&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
  exceptions in violation of the exception specifications; the compiler
  still optimizes based on the specifications, so throwing an
  unexpected exception results in undefined behavior at run time.
! .IP "\fB\-fextern\-tls\-init\fR" 4
  .IX Item "-fextern-tls-init"
  .PD 0
! .IP "\fB\-fno\-extern\-tls\-init\fR" 4
  .IX Item "-fno-extern-tls-init"
  .PD
! The \*(C+11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
  \&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
  initialization.  To support this, any use of such a variable goes
  through a wrapper function that performs any necessary initialization.
  When the use and definition of the variable are in the same
  translation unit, this overhead can be optimized away, but when the
  use is in a different translation unit there is significant overhead
! even if the variable doesn't actually need dynamic initialization.  If
  the programmer can be sure that no use of the variable in a
! non-defining \s-1TU\s0 needs to trigger dynamic initialization (either
  because the variable is statically initialized, or a use of the
! variable in the defining \s-1TU\s0 will be executed before any uses in
! another \s-1TU\s0), they can avoid this overhead with the
  \&\fB\-fno\-extern\-tls\-init\fR option.
  .Sp
  On targets that support symbol aliases, the default is
  \&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
  aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
! .IP "\fB\-ffold\-simple\-inlines\fR" 4
  .IX Item "-ffold-simple-inlines"
  .PD 0
! .IP "\fB\-fno\-fold\-simple\-inlines\fR" 4
  .IX Item "-fno-fold-simple-inlines"
  .PD
! Permit the \*(C+ frontend to fold calls to \f(CW\*(C`std::move\*(C'\fR, \f(CW\*(C`std::forward\*(C'\fR,
  \&\f(CW\*(C`std::addressof\*(C'\fR and \f(CW\*(C`std::as_const\*(C'\fR.  In contrast to inlining, this
  means no debug information will be generated for such calls.  Since these
  functions are rarely interesting to debug, this flag is enabled by default
  unless \fB\-fno\-inline\fR is active.
! .IP "\fB\-fno\-gnu\-keywords\fR" 4
  .IX Item "-fno-gnu-keywords"
  Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
  word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
! This option is implied by the strict \s-1ISO \*(C+\s0 dialects: \fB\-ansi\fR,
  \&\fB\-std=c++98\fR, \fB\-std=c++11\fR, etc.
! .IP "\fB\-fno\-immediate\-escalation\fR" 4
  .IX Item "-fno-immediate-escalation"
  Do not enable immediate function escalation whereby certain functions
  can be promoted to consteval, as specified in P2564R3.  For example:
--- 3288,3361 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fcoroutines\fR 4
  .IX Item "-fcoroutines"
! Enable support for the C++ coroutines extension (experimental).
! .IP \fB\-fdiagnostics\-all\-candidates\fR 4
  .IX Item "-fdiagnostics-all-candidates"
! Permit the C++ front end to note all candidates during overload resolution
  failure, including when a deleted function is selected.
! .IP \fB\-fno\-elide\-constructors\fR 4
  .IX Item "-fno-elide-constructors"
! The C++ standard allows an implementation to omit creating a temporary
  that is only used to initialize another object of the same type.
  Specifying this option disables that optimization, and forces G++ to
  call the copy constructor in all cases.  This option also causes G++
  to call trivial member functions which otherwise would be expanded inline.
  .Sp
! In C++17, the compiler is required to omit these temporaries, but this
  option still affects trivial member functions.
! .IP \fB\-fno\-enforce\-eh\-specs\fR 4
  .IX Item "-fno-enforce-eh-specs"
! Don\*(Aqt generate code to check for violation of exception specifications
! at run time.  This option violates the C++ standard, but may be useful
  for reducing code size in production builds, much like defining
  \&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
  exceptions in violation of the exception specifications; the compiler
  still optimizes based on the specifications, so throwing an
  unexpected exception results in undefined behavior at run time.
! .IP \fB\-fextern\-tls\-init\fR 4
  .IX Item "-fextern-tls-init"
  .PD 0
! .IP \fB\-fno\-extern\-tls\-init\fR 4
  .IX Item "-fno-extern-tls-init"
  .PD
! The C++11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
  \&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
  initialization.  To support this, any use of such a variable goes
  through a wrapper function that performs any necessary initialization.
  When the use and definition of the variable are in the same
  translation unit, this overhead can be optimized away, but when the
  use is in a different translation unit there is significant overhead
! even if the variable doesn\*(Aqt actually need dynamic initialization.  If
  the programmer can be sure that no use of the variable in a
! non\-defining TU needs to trigger dynamic initialization (either
  because the variable is statically initialized, or a use of the
! variable in the defining TU will be executed before any uses in
! another TU), they can avoid this overhead with the
  \&\fB\-fno\-extern\-tls\-init\fR option.
  .Sp
  On targets that support symbol aliases, the default is
  \&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
  aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
! .IP \fB\-ffold\-simple\-inlines\fR 4
  .IX Item "-ffold-simple-inlines"
  .PD 0
! .IP \fB\-fno\-fold\-simple\-inlines\fR 4
  .IX Item "-fno-fold-simple-inlines"
  .PD
! Permit the C++ frontend to fold calls to \f(CW\*(C`std::move\*(C'\fR, \f(CW\*(C`std::forward\*(C'\fR,
  \&\f(CW\*(C`std::addressof\*(C'\fR and \f(CW\*(C`std::as_const\*(C'\fR.  In contrast to inlining, this
  means no debug information will be generated for such calls.  Since these
  functions are rarely interesting to debug, this flag is enabled by default
  unless \fB\-fno\-inline\fR is active.
! .IP \fB\-fno\-gnu\-keywords\fR 4
  .IX Item "-fno-gnu-keywords"
  Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
  word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
! This option is implied by the strict ISO C++ dialects: \fB\-ansi\fR,
  \&\fB\-std=c++98\fR, \fB\-std=c++11\fR, etc.
! .IP \fB\-fno\-immediate\-escalation\fR 4
  .IX Item "-fno-immediate-escalation"
  Do not enable immediate function escalation whereby certain functions
  can be promoted to consteval, as specified in P2564R3.  For example:
*************** can be promoted to consteval, as specifi
*** 3441,3675 ****
  \&        }
  .Ve
  .Sp
! compiles in \*(C+20: \f(CW\*(C`f\*(C'\fR is an immediate-escalating function (due to
  the \f(CW\*(C`auto\*(C'\fR it is a function template and is declared \f(CW\*(C`constexpr\*(C'\fR)
! and \f(CWid(t)\fR is an immediate-escalating expression, so \f(CW\*(C`f\*(C'\fR is
  promoted to \f(CW\*(C`consteval\*(C'\fR.  Consequently, the call to \f(CWid(t)\fR
! is in an immediate context, so doesn't have to produce a constant (that
  is the mechanism allowing consteval function composition).  However,
  with \fB\-fno\-immediate\-escalation\fR, \f(CW\*(C`f\*(C'\fR is not promoted to
  \&\f(CW\*(C`consteval\*(C'\fR, and since the call to consteval function \f(CWid(t)\fR
  is not a constant expression, the compiler rejects the code.
  .Sp
! This option is turned on by default; it is only effective in \*(C+20 mode
  or later.
! .IP "\fB\-fimplicit\-constexpr\fR" 4
  .IX Item "-fimplicit-constexpr"
  Make inline functions implicitly constexpr, if they satisfy the
  requirements for a constexpr function.  This option can be used in
! \&\*(C+14 mode or later.  This can result in initialization changing from
  dynamic to static and other optimizations.
! .IP "\fB\-fno\-implicit\-templates\fR" 4
  .IX Item "-fno-implicit-templates"
! Never emit code for non-inline templates that are instantiated
  implicitly (i.e. by use); only emit code for explicit instantiations.
  If you use this option, you must take care to structure your code to
  include all the necessary explicit instantiations to avoid getting
  undefined symbols at link time.
! .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
  .IX Item "-fno-implicit-inline-templates"
! Don't emit code for implicit instantiations of inline templates, either.
  The default is to handle inlines differently so that compiles with and
  without optimization need the same set of explicit instantiations.
! .IP "\fB\-fno\-implement\-inlines\fR" 4
  .IX Item "-fno-implement-inlines"
! To save space, do not emit out-of-line copies of inline functions
  controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
  errors if these functions are not inlined everywhere they are called.
! .IP "\fB\-fmodules\-ts\fR" 4
  .IX Item "-fmodules-ts"
  .PD 0
! .IP "\fB\-fno\-modules\-ts\fR" 4
  .IX Item "-fno-modules-ts"
  .PD
! Enable support for \*(C+20 modules.  The
  \&\fB\-fno\-modules\-ts\fR is usually not needed, as that is the
! default.  Even though this is a \*(C+20 feature, it is not currently
  implicitly enabled by selecting that standard version.
! .IP "\fB\-fmodule\-header\fR" 4
  .IX Item "-fmodule-header"
  .PD 0
! .IP "\fB\-fmodule\-header=user\fR" 4
  .IX Item "-fmodule-header=user"
! .IP "\fB\-fmodule\-header=system\fR" 4
  .IX Item "-fmodule-header=system"
  .PD
  Compile a header file to create an importable header unit.
! .IP "\fB\-fmodule\-implicit\-inline\fR" 4
  .IX Item "-fmodule-implicit-inline"
  Member functions defined in their class definitions are not implicitly
! inline for modular code.  This is different to traditional \*(C+
  behavior, for good reasons.  However, it may result in a difficulty
  during code porting.  This option makes such function definitions
! implicitly inline.  It does however generate an \s-1ABI\s0 incompatibility,
  so you must use it everywhere or nowhere.  (Such definitions outside
  of a named module remain implicitly inline, regardless.)
! .IP "\fB\-fno\-module\-lazy\fR" 4
  .IX Item "-fno-module-lazy"
  Disable lazy module importing and module mapper creation.
! .IP "\fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=[hostname]:port[?ident]"
  .PD 0
  .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4
  .IX Item "-fmodule-mapper=|program[?ident] args..."
! .IP "\fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper==socket[?ident]"
! .IP "\fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=<>[inout][?ident]"
! .IP "\fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=<in>out[?ident]"
! .IP "\fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=file[?ident]"
  .PD
  An oracle to query for module name to filename mappings.  If
! unspecified the \fB\s-1CXX_MODULE_MAPPER\s0\fR environment variable is used,
! and if that is unset, an in-process default is provided.
! .IP "\fB\-fmodule\-only\fR" 4
  .IX Item "-fmodule-only"
  Only emit the Compiled Module Interface, inhibiting any object file.
! .IP "\fB\-fms\-extensions\fR" 4
  .IX Item "-fms-extensions"
! Disable Wpedantic warnings about constructs used in \s-1MFC,\s0 such as implicit
! int and getting a pointer to member function via non-standard syntax.
! .IP "\fB\-fnew\-inheriting\-ctors\fR" 4
  .IX Item "-fnew-inheriting-ctors"
! Enable the P0136 adjustment to the semantics of \*(C+11 constructor
! inheritance.  This is part of \*(C+17 but also considered to be a Defect
! Report against \*(C+11 and \*(C+14.  This flag is enabled by default
  unless \fB\-fabi\-version=10\fR or lower is specified.
! .IP "\fB\-fnew\-ttp\-matching\fR" 4
  .IX Item "-fnew-ttp-matching"
  Enable the P0522 resolution to Core issue 150, template template
  parameters and default arguments: this allows a template with default
  template arguments as an argument for a template template parameter
  with fewer template parameters.  This flag is enabled by default for
  \&\fB\-std=c++17\fR.
! .IP "\fB\-fno\-nonansi\-builtins\fR" 4
  .IX Item "-fno-nonansi-builtins"
! Disable built-in declarations of functions that are not mandated by
! \&\s-1ANSI/ISO C.\s0  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
  \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
! .IP "\fB\-fnothrow\-opt\fR" 4
  .IX Item "-fnothrow-opt"
! Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as if it were a
  \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
  overhead relative to a function with no exception specification.  If
! the function has local variables of types with non-trivial
  destructors, the exception specification actually makes the
! function smaller because the \s-1EH\s0 cleanups for those variables can be
  optimized away.  The semantic effect is that an exception thrown out of
  a function with such an exception specification results in a call
  to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
! .IP "\fB\-fno\-operator\-names\fR" 4
  .IX Item "-fno-operator-names"
  Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
  \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
  synonyms as keywords.
! .IP "\fB\-fno\-optional\-diags\fR" 4
  .IX Item "-fno-optional-diags"
  Disable diagnostics that the standard says a compiler does not need to
  issue.  Currently, the only such diagnostic issued by G++ is the one for
  a name having multiple meanings within a class.
! .IP "\fB\-fno\-pretty\-templates\fR" 4
  .IX Item "-fno-pretty-templates"
  When an error message refers to a specialization of a function
  template, the compiler normally prints the signature of the
  template followed by the template arguments and any typedefs or
  typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
! rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
  involved.  When an error message refers to a specialization of a class
  template, the compiler omits any template arguments that match
  the default template arguments for that template.  If either of these
  behaviors make it harder to understand the error message rather than
  easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
! .IP "\fB\-fno\-rtti\fR" 4
  .IX Item "-fno-rtti"
  Disable generation of information about every class with virtual
! functions for use by the \*(C+ run-time type identification features
! (\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don't use those parts
  of the language, you can save some space by using this flag.  Note that
  exception handling uses the same information, but G++ generates it as
  needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
! do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
  unambiguous base classes.
  .Sp
  Mixing code compiled with \fB\-frtti\fR with that compiled with
  \&\fB\-fno\-rtti\fR may not work.  For example, programs may
  fail to link if a class compiled with \fB\-fno\-rtti\fR is used as a base 
  for a class compiled with \fB\-frtti\fR.
! .IP "\fB\-fsized\-deallocation\fR" 4
  .IX Item "-fsized-deallocation"
! Enable the built-in global declarations
  .Sp
  .Vb 2
  \&        void operator delete (void *, std::size_t) noexcept;
  \&        void operator delete[] (void *, std::size_t) noexcept;
  .Ve
  .Sp
! as introduced in \*(C+14.  This is useful for user-defined replacement
  deallocation functions that, for example, use the size of the object
  to make deallocation faster.  Enabled by default under
  \&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
  warns about places that might want to add a definition.
! .IP "\fB\-fstrict\-enums\fR" 4
  .IX Item "-fstrict-enums"
  Allow the compiler to optimize using the assumption that a value of
  enumerated type can only be one of the values of the enumeration (as
! defined in the \*(C+ standard; basically, a value that can be
  represented in the minimum number of bits needed to represent all the
  enumerators).  This assumption may not be valid if the program uses a
  cast to convert an arbitrary integer value to the enumerated type.
  This option has no effect for an enumeration type with a fixed underlying
  type.
! .IP "\fB\-fstrong\-eval\-order\fR" 4
  .IX Item "-fstrong-eval-order"
  Evaluate member access, array subscripting, and shift expressions in
! left-to-right order, and evaluate assignment in right-to-left order,
! as adopted for \*(C+17.  Enabled by default with \fB\-std=c++17\fR.
  \&\fB\-fstrong\-eval\-order=some\fR enables just the ordering of member
  access and shift expressions, and is the default without
  \&\fB\-std=c++17\fR.
! .IP "\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR" 4
  .IX Item "-ftemplate-backtrace-limit=n"
  Set the maximum number of template instantiation notes for a single
  warning or error to \fIn\fR.  The default value is 10.
! .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
  .IX Item "-ftemplate-depth=n"
  Set the maximum instantiation depth for template classes to \fIn\fR.
  A limit on the template instantiation depth is needed to detect
! endless recursions during template class instantiation.  \s-1ANSI/ISO \*(C+\s0
  conforming programs must not rely on a maximum depth greater than 17
! (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
  can run out of stack space before hitting 1024 in some situations.
! .IP "\fB\-fno\-threadsafe\-statics\fR" 4
  .IX Item "-fno-threadsafe-statics"
! Do not emit the extra code to use the routines specified in the \*(C+
! \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
! option to reduce code size slightly in code that doesn't need to be
! thread-safe.
! .IP "\fB\-fuse\-cxa\-atexit\fR" 4
  .IX Item "-fuse-cxa-atexit"
  Register destructors for objects with static storage duration with the
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
! This option is required for fully standards-compliant handling of static
  destructors, but only works if your C library supports
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
! .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
  .IX Item "-fno-use-cxa-get-exception-ptr"
! Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
  causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
  if the runtime routine is not available.
! .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
  .IX Item "-fvisibility-inlines-hidden"
  This switch declares that the user does not attempt to compare
  pointers to inline functions or methods where the addresses of the two functions
  are taken in different shared objects.
  .Sp
! The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
  \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
! appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
! when used within the \s-1DSO.\s0  Enabling this option can have a dramatic effect
! on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
  dynamic export table when the library makes heavy use of templates.
  .Sp
  The behavior of this switch is not quite the same as marking the
--- 3374,3608 ----
  \&        }
  .Ve
  .Sp
! compiles in C++20: \f(CW\*(C`f\*(C'\fR is an immediate\-escalating function (due to
  the \f(CW\*(C`auto\*(C'\fR it is a function template and is declared \f(CW\*(C`constexpr\*(C'\fR)
! and \f(CWid(t)\fR is an immediate\-escalating expression, so \f(CW\*(C`f\*(C'\fR is
  promoted to \f(CW\*(C`consteval\*(C'\fR.  Consequently, the call to \f(CWid(t)\fR
! is in an immediate context, so doesn\*(Aqt have to produce a constant (that
  is the mechanism allowing consteval function composition).  However,
  with \fB\-fno\-immediate\-escalation\fR, \f(CW\*(C`f\*(C'\fR is not promoted to
  \&\f(CW\*(C`consteval\*(C'\fR, and since the call to consteval function \f(CWid(t)\fR
  is not a constant expression, the compiler rejects the code.
  .Sp
! This option is turned on by default; it is only effective in C++20 mode
  or later.
! .IP \fB\-fimplicit\-constexpr\fR 4
  .IX Item "-fimplicit-constexpr"
  Make inline functions implicitly constexpr, if they satisfy the
  requirements for a constexpr function.  This option can be used in
! C++14 mode or later.  This can result in initialization changing from
  dynamic to static and other optimizations.
! .IP \fB\-fno\-implicit\-templates\fR 4
  .IX Item "-fno-implicit-templates"
! Never emit code for non\-inline templates that are instantiated
  implicitly (i.e. by use); only emit code for explicit instantiations.
  If you use this option, you must take care to structure your code to
  include all the necessary explicit instantiations to avoid getting
  undefined symbols at link time.
! .IP \fB\-fno\-implicit\-inline\-templates\fR 4
  .IX Item "-fno-implicit-inline-templates"
! Don\*(Aqt emit code for implicit instantiations of inline templates, either.
  The default is to handle inlines differently so that compiles with and
  without optimization need the same set of explicit instantiations.
! .IP \fB\-fno\-implement\-inlines\fR 4
  .IX Item "-fno-implement-inlines"
! To save space, do not emit out\-of\-line copies of inline functions
  controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
  errors if these functions are not inlined everywhere they are called.
! .IP \fB\-fmodules\-ts\fR 4
  .IX Item "-fmodules-ts"
  .PD 0
! .IP \fB\-fno\-modules\-ts\fR 4
  .IX Item "-fno-modules-ts"
  .PD
! Enable support for C++20 modules.  The
  \&\fB\-fno\-modules\-ts\fR is usually not needed, as that is the
! default.  Even though this is a C++20 feature, it is not currently
  implicitly enabled by selecting that standard version.
! .IP \fB\-fmodule\-header\fR 4
  .IX Item "-fmodule-header"
  .PD 0
! .IP \fB\-fmodule\-header=user\fR 4
  .IX Item "-fmodule-header=user"
! .IP \fB\-fmodule\-header=system\fR 4
  .IX Item "-fmodule-header=system"
  .PD
  Compile a header file to create an importable header unit.
! .IP \fB\-fmodule\-implicit\-inline\fR 4
  .IX Item "-fmodule-implicit-inline"
  Member functions defined in their class definitions are not implicitly
! inline for modular code.  This is different to traditional C++
  behavior, for good reasons.  However, it may result in a difficulty
  during code porting.  This option makes such function definitions
! implicitly inline.  It does however generate an ABI incompatibility,
  so you must use it everywhere or nowhere.  (Such definitions outside
  of a named module remain implicitly inline, regardless.)
! .IP \fB\-fno\-module\-lazy\fR 4
  .IX Item "-fno-module-lazy"
  Disable lazy module importing and module mapper creation.
! .IP \fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=[hostname]:port[?ident]"
  .PD 0
  .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4
  .IX Item "-fmodule-mapper=|program[?ident] args..."
! .IP \fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper==socket[?ident]"
! .IP \fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=<>[inout][?ident]"
! .IP \fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=<in>out[?ident]"
! .IP \fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=file[?ident]"
  .PD
  An oracle to query for module name to filename mappings.  If
! unspecified the \fBCXX_MODULE_MAPPER\fR environment variable is used,
! and if that is unset, an in\-process default is provided.
! .IP \fB\-fmodule\-only\fR 4
  .IX Item "-fmodule-only"
  Only emit the Compiled Module Interface, inhibiting any object file.
! .IP \fB\-fms\-extensions\fR 4
  .IX Item "-fms-extensions"
! Disable Wpedantic warnings about constructs used in MFC, such as implicit
! int and getting a pointer to member function via non\-standard syntax.
! .IP \fB\-fnew\-inheriting\-ctors\fR 4
  .IX Item "-fnew-inheriting-ctors"
! Enable the P0136 adjustment to the semantics of C++11 constructor
! inheritance.  This is part of C++17 but also considered to be a Defect
! Report against C++11 and C++14.  This flag is enabled by default
  unless \fB\-fabi\-version=10\fR or lower is specified.
! .IP \fB\-fnew\-ttp\-matching\fR 4
  .IX Item "-fnew-ttp-matching"
  Enable the P0522 resolution to Core issue 150, template template
  parameters and default arguments: this allows a template with default
  template arguments as an argument for a template template parameter
  with fewer template parameters.  This flag is enabled by default for
  \&\fB\-std=c++17\fR.
! .IP \fB\-fno\-nonansi\-builtins\fR 4
  .IX Item "-fno-nonansi-builtins"
! Disable built\-in declarations of functions that are not mandated by
! ANSI/ISO C.  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
  \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
! .IP \fB\-fnothrow\-opt\fR 4
  .IX Item "-fnothrow-opt"
! Treat a \f(CWthrow()\fR exception specification as if it were a
  \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
  overhead relative to a function with no exception specification.  If
! the function has local variables of types with non\-trivial
  destructors, the exception specification actually makes the
! function smaller because the EH cleanups for those variables can be
  optimized away.  The semantic effect is that an exception thrown out of
  a function with such an exception specification results in a call
  to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
! .IP \fB\-fno\-operator\-names\fR 4
  .IX Item "-fno-operator-names"
  Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
  \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
  synonyms as keywords.
! .IP \fB\-fno\-optional\-diags\fR 4
  .IX Item "-fno-optional-diags"
  Disable diagnostics that the standard says a compiler does not need to
  issue.  Currently, the only such diagnostic issued by G++ is the one for
  a name having multiple meanings within a class.
! .IP \fB\-fno\-pretty\-templates\fR 4
  .IX Item "-fno-pretty-templates"
  When an error message refers to a specialization of a function
  template, the compiler normally prints the signature of the
  template followed by the template arguments and any typedefs or
  typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
! rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it\*(Aqs clear which template is
  involved.  When an error message refers to a specialization of a class
  template, the compiler omits any template arguments that match
  the default template arguments for that template.  If either of these
  behaviors make it harder to understand the error message rather than
  easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
! .IP \fB\-fno\-rtti\fR 4
  .IX Item "-fno-rtti"
  Disable generation of information about every class with virtual
! functions for use by the C++ run\-time type identification features
! (\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don\*(Aqt use those parts
  of the language, you can save some space by using this flag.  Note that
  exception handling uses the same information, but G++ generates it as
  needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
! do not require run\-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
  unambiguous base classes.
  .Sp
  Mixing code compiled with \fB\-frtti\fR with that compiled with
  \&\fB\-fno\-rtti\fR may not work.  For example, programs may
  fail to link if a class compiled with \fB\-fno\-rtti\fR is used as a base 
  for a class compiled with \fB\-frtti\fR.
! .IP \fB\-fsized\-deallocation\fR 4
  .IX Item "-fsized-deallocation"
! Enable the built\-in global declarations
  .Sp
  .Vb 2
  \&        void operator delete (void *, std::size_t) noexcept;
  \&        void operator delete[] (void *, std::size_t) noexcept;
  .Ve
  .Sp
! as introduced in C++14.  This is useful for user\-defined replacement
  deallocation functions that, for example, use the size of the object
  to make deallocation faster.  Enabled by default under
  \&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
  warns about places that might want to add a definition.
! .IP \fB\-fstrict\-enums\fR 4
  .IX Item "-fstrict-enums"
  Allow the compiler to optimize using the assumption that a value of
  enumerated type can only be one of the values of the enumeration (as
! defined in the C++ standard; basically, a value that can be
  represented in the minimum number of bits needed to represent all the
  enumerators).  This assumption may not be valid if the program uses a
  cast to convert an arbitrary integer value to the enumerated type.
  This option has no effect for an enumeration type with a fixed underlying
  type.
! .IP \fB\-fstrong\-eval\-order\fR 4
  .IX Item "-fstrong-eval-order"
  Evaluate member access, array subscripting, and shift expressions in
! left\-to\-right order, and evaluate assignment in right\-to\-left order,
! as adopted for C++17.  Enabled by default with \fB\-std=c++17\fR.
  \&\fB\-fstrong\-eval\-order=some\fR enables just the ordering of member
  access and shift expressions, and is the default without
  \&\fB\-std=c++17\fR.
! .IP \fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR 4
  .IX Item "-ftemplate-backtrace-limit=n"
  Set the maximum number of template instantiation notes for a single
  warning or error to \fIn\fR.  The default value is 10.
! .IP \fB\-ftemplate\-depth=\fR\fIn\fR 4
  .IX Item "-ftemplate-depth=n"
  Set the maximum instantiation depth for template classes to \fIn\fR.
  A limit on the template instantiation depth is needed to detect
! endless recursions during template class instantiation.  ANSI/ISO C++
  conforming programs must not rely on a maximum depth greater than 17
! (changed to 1024 in C++11).  The default value is 900, as the compiler
  can run out of stack space before hitting 1024 in some situations.
! .IP \fB\-fno\-threadsafe\-statics\fR 4
  .IX Item "-fno-threadsafe-statics"
! Do not emit the extra code to use the routines specified in the C++
! ABI for thread\-safe initialization of local statics.  You can use this
! option to reduce code size slightly in code that doesn\*(Aqt need to be
! thread\-safe.
! .IP \fB\-fuse\-cxa\-atexit\fR 4
  .IX Item "-fuse-cxa-atexit"
  Register destructors for objects with static storage duration with the
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
! This option is required for fully standards\-compliant handling of static
  destructors, but only works if your C library supports
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
! .IP \fB\-fno\-use\-cxa\-get\-exception\-ptr\fR 4
  .IX Item "-fno-use-cxa-get-exception-ptr"
! Don\*(Aqt use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
  causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
  if the runtime routine is not available.
! .IP \fB\-fvisibility\-inlines\-hidden\fR 4
  .IX Item "-fvisibility-inlines-hidden"
  This switch declares that the user does not attempt to compare
  pointers to inline functions or methods where the addresses of the two functions
  are taken in different shared objects.
  .Sp
! The effect of this is that GCC may, effectively, mark inline methods with
  \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
! appear in the export table of a DSO and do not require a PLT indirection
! when used within the DSO.  Enabling this option can have a dramatic effect
! on load and link times of a DSO as it massively reduces the size of the
  dynamic export table when the library makes heavy use of templates.
  .Sp
  The behavior of this switch is not quite the same as marking the
*************** visibility has no effect.
*** 3685,3705 ****
  .Sp
  Explicitly instantiated inline methods are unaffected by this option
  as their linkage might otherwise cross a shared library boundary.
! .IP "\fB\-fvisibility\-ms\-compat\fR" 4
  .IX Item "-fvisibility-ms-compat"
! This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
  linkage model compatible with that of Microsoft Visual Studio.
  .Sp
! The flag makes these changes to \s-1GCC\s0's linkage model:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
  \&\fB\-fvisibility=hidden\fR.
! .IP "2." 4
  .IX Item "2."
  Types, but not their members, are not hidden by default.
! .IP "3." 4
  .IX Item "3."
  The One Definition Rule is relaxed for types without explicit
  visibility specifications that are defined in more than one
--- 3618,3638 ----
  .Sp
  Explicitly instantiated inline methods are unaffected by this option
  as their linkage might otherwise cross a shared library boundary.
! .IP \fB\-fvisibility\-ms\-compat\fR 4
  .IX Item "-fvisibility-ms-compat"
! This flag attempts to use visibility settings to make GCC\*(Aqs C++
  linkage model compatible with that of Microsoft Visual Studio.
  .Sp
! The flag makes these changes to GCC\*(Aqs linkage model:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
  \&\fB\-fvisibility=hidden\fR.
! .IP 2. 4
  .IX Item "2."
  Types, but not their members, are not hidden by default.
! .IP 3. 4
  .IX Item "3."
  The One Definition Rule is relaxed for types without explicit
  visibility specifications that are defined in more than one
*************** of the same type with the same name but
*** 3718,3754 ****
  objects are different, so changing one does not change the other;
  and that pointers to function members defined in different shared
  objects may not compare equal.  When this flag is given, it is a
! violation of the \s-1ODR\s0 to define types with the same name differently.
  .RE
! .IP "\fB\-fno\-weak\fR" 4
  .IX Item "-fno-weak"
  Do not use weak symbol support, even if it is provided by the linker.
  By default, G++ uses weak symbols if they are available.  This
! option exists only for testing, and should not be used by end-users;
  it results in inferior code and has no benefits.  This option may
  be removed in a future release of G++.
! .IP "\fB\-fext\-numeric\-literals\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-fext-numeric-literals ( and Objective- only)"
! Accept imaginary, fixed-point, or machine-defined
! literal number suffixes as \s-1GNU\s0 extensions.
  When this option is turned off these suffixes are treated
! as \*(C+11 user-defined literal numeric suffixes.
! This is on by default for all pre\-\*(C+11 dialects and all \s-1GNU\s0 dialects:
  \&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
  \&\fB\-std=gnu++14\fR.
  This option is off by default
! for \s-1ISO \*(C+11\s0 onwards (\fB\-std=c++11\fR, ...).
! .IP "\fB\-nostdinc++\fR" 4
  .IX Item "-nostdinc++"
  Do not search for header files in the standard directories specific to
! \&\*(C+, but do still search the other standard directories.  (This option
! is used when building the \*(C+ library.)
! .IP "\fB\-flang\-info\-include\-translate\fR" 4
  .IX Item "-flang-info-include-translate"
  .PD 0
! .IP "\fB\-flang\-info\-include\-translate\-not\fR" 4
  .IX Item "-flang-info-include-translate-not"
! .IP "\fB\-flang\-info\-include\-translate=\fR\fIheader\fR" 4
  .IX Item "-flang-info-include-translate=header"
  .PD
  Inform of include translation events.  The first will note accepted
--- 3651,3687 ----
  objects are different, so changing one does not change the other;
  and that pointers to function members defined in different shared
  objects may not compare equal.  When this flag is given, it is a
! violation of the ODR to define types with the same name differently.
  .RE
! .IP \fB\-fno\-weak\fR 4
  .IX Item "-fno-weak"
  Do not use weak symbol support, even if it is provided by the linker.
  By default, G++ uses weak symbols if they are available.  This
! option exists only for testing, and should not be used by end\-users;
  it results in inferior code and has no benefits.  This option may
  be removed in a future release of G++.
! .IP "\fB\-fext\-numeric\-literals\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-fext-numeric-literals (C++ and Objective-C++ only)"
! Accept imaginary, fixed\-point, or machine\-defined
! literal number suffixes as GNU extensions.
  When this option is turned off these suffixes are treated
! as C++11 user\-defined literal numeric suffixes.
! This is on by default for all pre\-C++11 dialects and all GNU dialects:
  \&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
  \&\fB\-std=gnu++14\fR.
  This option is off by default
! for ISO C++11 onwards (\fB\-std=c++11\fR, ...).
! .IP \fB\-nostdinc++\fR 4
  .IX Item "-nostdinc++"
  Do not search for header files in the standard directories specific to
! C++, but do still search the other standard directories.  (This option
! is used when building the C++ library.)
! .IP \fB\-flang\-info\-include\-translate\fR 4
  .IX Item "-flang-info-include-translate"
  .PD 0
! .IP \fB\-flang\-info\-include\-translate\-not\fR 4
  .IX Item "-flang-info-include-translate-not"
! .IP \fB\-flang\-info\-include\-translate=\fR\fIheader\fR 4
  .IX Item "-flang-info-include-translate=header"
  .PD
  Inform of include translation events.  The first will note accepted
*************** translations.  The \fIheader\fR form wil
*** 3757,3793 ****
  translations relating to that specific header.  If \fIheader\fR is of
  the form \f(CW"user"\fR or \f(CW\*(C`<system>\*(C'\fR it will be resolved to a
  specific user or system header using the include path.
! .IP "\fB\-flang\-info\-module\-cmi\fR" 4
  .IX Item "-flang-info-module-cmi"
  .PD 0
! .IP "\fB\-flang\-info\-module\-cmi=\fR\fImodule\fR" 4
  .IX Item "-flang-info-module-cmi=module"
  .PD
  Inform of Compiled Module Interface pathnames.  The first will note
! all read \s-1CMI\s0 pathnames.  The \fImodule\fR form will not reading a
! specific module's \s-1CMI.\s0  \fImodule\fR may be a named module or a
! header-unit (the latter indicated by either being a pathname containing
  directory separators or enclosed in \f(CW\*(C`<>\*(C'\fR or \f(CW""\fR).
! .IP "\fB\-stdlib=\fR\fIlibstdc++,libc++\fR" 4
  .IX Item "-stdlib=libstdc++,libc++"
  When G++ is configured to support this option, it allows specification of
! alternate \*(C+ runtime libraries.  Two options are available: \fIlibstdc++\fR
! (the default, native \*(C+ runtime for G++) and \fIlibc++\fR which is the
! \&\*(C+ runtime installed on some operating systems (e.g. Darwin versions from
  Darwin11 onwards).  The option switches G++ to use the headers from the
  specified library and to emit \f(CW\*(C`\-lstdc++\*(C'\fR or \f(CW\*(C`\-lc++\*(C'\fR respectively,
! when a \*(C+ runtime is required for linking.
  .PP
! In addition, these warning options have meanings only for \*(C+ programs:
! .IP "\fB\-Wabi\-tag\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wabi-tag ( and Objective- only)"
! Warn when a type with an \s-1ABI\s0 tag is used in a context that does not
! have that \s-1ABI\s0 tag.  See \fB\*(C+ Attributes\fR for more information
! about \s-1ABI\s0 tags.
! .IP "\fB\-Wcomma\-subscript\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wcomma-subscript ( and Objective- only)"
  Warn about uses of a comma expression within a subscripting expression.
! This usage was deprecated in \*(C+20 and is going to be removed in \*(C+23.
  However, a comma expression wrapped in \f(CW\*(C`( )\*(C'\fR is not deprecated.  Example:
  .Sp
  .Vb 4
--- 3690,3726 ----
  translations relating to that specific header.  If \fIheader\fR is of
  the form \f(CW"user"\fR or \f(CW\*(C`<system>\*(C'\fR it will be resolved to a
  specific user or system header using the include path.
! .IP \fB\-flang\-info\-module\-cmi\fR 4
  .IX Item "-flang-info-module-cmi"
  .PD 0
! .IP \fB\-flang\-info\-module\-cmi=\fR\fImodule\fR 4
  .IX Item "-flang-info-module-cmi=module"
  .PD
  Inform of Compiled Module Interface pathnames.  The first will note
! all read CMI pathnames.  The \fImodule\fR form will not reading a
! specific module\*(Aqs CMI.  \fImodule\fR may be a named module or a
! header\-unit (the latter indicated by either being a pathname containing
  directory separators or enclosed in \f(CW\*(C`<>\*(C'\fR or \f(CW""\fR).
! .IP \fB\-stdlib=\fR\fIlibstdc++,libc++\fR 4
  .IX Item "-stdlib=libstdc++,libc++"
  When G++ is configured to support this option, it allows specification of
! alternate C++ runtime libraries.  Two options are available: \fIlibstdc++\fR
! (the default, native C++ runtime for G++) and \fIlibc++\fR which is the
! C++ runtime installed on some operating systems (e.g. Darwin versions from
  Darwin11 onwards).  The option switches G++ to use the headers from the
  specified library and to emit \f(CW\*(C`\-lstdc++\*(C'\fR or \f(CW\*(C`\-lc++\*(C'\fR respectively,
! when a C++ runtime is required for linking.
  .PP
! In addition, these warning options have meanings only for C++ programs:
! .IP "\fB\-Wabi\-tag\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wabi-tag (C++ and Objective-C++ only)"
! Warn when a type with an ABI tag is used in a context that does not
! have that ABI tag.  See \fBC++ Attributes\fR for more information
! about ABI tags.
! .IP "\fB\-Wcomma\-subscript\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wcomma-subscript (C++ and Objective-C++ only)"
  Warn about uses of a comma expression within a subscripting expression.
! This usage was deprecated in C++20 and is going to be removed in C++23.
  However, a comma expression wrapped in \f(CW\*(C`( )\*(C'\fR is not deprecated.  Example:
  .Sp
  .Vb 4
*************** However, a comma expression wrapped in \
*** 3797,3822 ****
  \&        }
  .Ve
  .Sp
! In \*(C+23 it is valid to have comma separated expressions in a subscript
  when an overloaded subscript operator is found and supports the right
  number and types of arguments.  G++ will accept the formerly valid syntax
! for code that is not valid in \*(C+23 but used to be valid but deprecated
! in \*(C+20 with a pedantic warning that can be disabled with
  \&\fB\-Wno\-comma\-subscript\fR.
  .Sp
  Enabled by default with \fB\-std=c++20\fR unless \fB\-Wno\-deprecated\fR,
  and with \fB\-std=c++23\fR regardless of \fB\-Wno\-deprecated\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! \&\*(C+23 mode or later.
! .IP "\fB\-Wctad\-maybe\-unsupported\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wctad-maybe-unsupported ( and Objective- only)"
! Warn when performing class template argument deduction (\s-1CTAD\s0) on a type with
  no explicitly written deduction guides.  This warning will point out cases
! where \s-1CTAD\s0 succeeded only because the compiler synthesized the implicit
  deduction guides, which might not be what the programmer intended.  Certain
! style guides allow \s-1CTAD\s0 only on types that specifically \*(L"opt-in\*(R"; i.e., on
! types that are designed to support \s-1CTAD.\s0  This warning can be suppressed with
  the following pattern:
  .Sp
  .Vb 6
--- 3730,3755 ----
  \&        }
  .Ve
  .Sp
! In C++23 it is valid to have comma separated expressions in a subscript
  when an overloaded subscript operator is found and supports the right
  number and types of arguments.  G++ will accept the formerly valid syntax
! for code that is not valid in C++23 but used to be valid but deprecated
! in C++20 with a pedantic warning that can be disabled with
  \&\fB\-Wno\-comma\-subscript\fR.
  .Sp
  Enabled by default with \fB\-std=c++20\fR unless \fB\-Wno\-deprecated\fR,
  and with \fB\-std=c++23\fR regardless of \fB\-Wno\-deprecated\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! C++23 mode or later.
! .IP "\fB\-Wctad\-maybe\-unsupported\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wctad-maybe-unsupported (C++ and Objective-C++ only)"
! Warn when performing class template argument deduction (CTAD) on a type with
  no explicitly written deduction guides.  This warning will point out cases
! where CTAD succeeded only because the compiler synthesized the implicit
  deduction guides, which might not be what the programmer intended.  Certain
! style guides allow CTAD only on types that specifically "opt\-in"; i.e., on
! types that are designed to support CTAD.  This warning can be suppressed with
  the following pattern:
  .Sp
  .Vb 6
*************** the following pattern:
*** 3827,3841 ****
  \&        // Guide with incomplete parameter type will never be considered.
  \&        S(allow_ctad_t) \-> S<void>;
  .Ve
! .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
  Warn when a class seems unusable because all the constructors or
  destructors in that class are private, and it has neither friends nor
! public static member functions.  Also warn if there are no non-private
! methods, and there's at least one private member function that isn't
  a constructor or destructor.
! .IP "\fB\-Wdangling\-reference\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wdangling-reference ( and Objective- only)"
  Warn when a reference is bound to a temporary whose lifetime has ended.
  For example:
  .Sp
--- 3760,3774 ----
  \&        // Guide with incomplete parameter type will never be considered.
  \&        S(allow_ctad_t) \-> S<void>;
  .Ve
! .IP "\fB\-Wctor\-dtor\-privacy\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wctor-dtor-privacy (C++ and Objective-C++ only)"
  Warn when a class seems unusable because all the constructors or
  destructors in that class are private, and it has neither friends nor
! public static member functions.  Also warn if there are no non\-private
! methods, and there\*(Aqs at least one private member function that isn\*(Aqt
  a constructor or destructor.
! .IP "\fB\-Wdangling\-reference\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wdangling-reference (C++ and Objective-C++ only)"
  Warn when a reference is bound to a temporary whose lifetime has ended.
  For example:
  .Sp
*************** Member functions are checked as well, bu
*** 3868,3874 ****
  .Ve
  .Sp
  Certain functions are safe in this respect, for example \f(CW\*(C`std::use_facet\*(C'\fR:
! they take and return a reference, but they don't return one of its arguments,
  which can fool the warning.  Such functions can be excluded from the warning
  by wrapping them in a \f(CW\*(C`#pragma\*(C'\fR:
  .Sp
--- 3801,3807 ----
  .Ve
  .Sp
  Certain functions are safe in this respect, for example \f(CW\*(C`std::use_facet\*(C'\fR:
! they take and return a reference, but they don\*(Aqt return one of its arguments,
  which can fool the warning.  Such functions can be excluded from the warning
  by wrapping them in a \f(CW\*(C`#pragma\*(C'\fR:
  .Sp
*************** classes of the form:
*** 3903,3934 ****
  \&        };
  .Ve
  .Sp
! as \f(CW\*(C`std::span\*(C'\fR\-like; that is, the class is a non-union class
  that has a pointer data member and a trivial destructor.
  .Sp
  The warning can be disabled by using the \f(CW\*(C`gnu::no_dangling\*(C'\fR attribute.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
  Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
! has virtual functions and non-virtual destructor. It is unsafe to delete
  an instance of a derived class through a pointer to a base class if the
  base class does not have a virtual destructor.  This warning is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Wdeprecated\-copy\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wdeprecated-copy ( and Objective- only)"
  Warn that the implicit declaration of a copy constructor or copy
! assignment operator is deprecated if the class has a user-provided
! copy constructor or copy assignment operator, in \*(C+11 and up.  This
  warning is enabled by \fB\-Wextra\fR.  With
  \&\fB\-Wdeprecated\-copy\-dtor\fR, also deprecate if the class has a
! user-provided destructor.
! .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-deprecated-enum-enum-conversion ( and Objective- only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a different enumeration type.  This conversion was deprecated in \*(C+20.
  For example:
  .Sp
  .Vb 3
--- 3836,3867 ----
  \&        };
  .Ve
  .Sp
! as \f(CW\*(C`std::span\*(C'\fR\-like; that is, the class is a non\-union class
  that has a pointer data member and a trivial destructor.
  .Sp
  The warning can be disabled by using the \f(CW\*(C`gnu::no_dangling\*(C'\fR attribute.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)"
  Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
! has virtual functions and non\-virtual destructor. It is unsafe to delete
  an instance of a derived class through a pointer to a base class if the
  base class does not have a virtual destructor.  This warning is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Wdeprecated\-copy\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)"
  Warn that the implicit declaration of a copy constructor or copy
! assignment operator is deprecated if the class has a user\-provided
! copy constructor or copy assignment operator, in C++11 and up.  This
  warning is enabled by \fB\-Wextra\fR.  With
  \&\fB\-Wdeprecated\-copy\-dtor\fR, also deprecate if the class has a
! user\-provided destructor.
! .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a different enumeration type.  This conversion was deprecated in C++20.
  For example:
  .Sp
  .Vb 3
*************** For example:
*** 3938,3950 ****
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-\*(C+20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-deprecated-enum-float-conversion ( and Objective- only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a floating-point type.  This conversion was deprecated in \*(C+20.  For
  example:
  .Sp
  .Vb 3
--- 3871,3883 ----
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-C++20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a floating\-point type.  This conversion was deprecated in C++20.  For
  example:
  .Sp
  .Vb 3
*************** example:
*** 3954,3989 ****
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-float\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-\*(C+20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP "\fB\-Wno\-elaborated\-enum\-base\fR" 4
  .IX Item "-Wno-elaborated-enum-base"
! For \*(C+11 and above, warn if an (invalid) additional enum-base is used
! in an elaborated-type-specifier.  That is, if an enum with given
  underlying type and no enumerator list is used in a declaration other
  than just a standalone declaration of the enum.  Enabled by default.  This
  warning is upgraded to an error with \-pedantic\-errors.
! .IP "\fB\-Wno\-init\-list\-lifetime\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-init-list-lifetime ( and Objective- only)"
  Do not warn about uses of \f(CW\*(C`std::initializer_list\*(C'\fR that are likely
  to result in dangling pointers.  Since the underlying array for an
! \&\f(CW\*(C`initializer_list\*(C'\fR is handled like a normal \*(C+ temporary object,
  it is easy to inadvertently keep a pointer to the array past the end
! of the array's lifetime.  For example:
  .RS 4
! .IP "*" 4
  If a function returns a temporary \f(CW\*(C`initializer_list\*(C'\fR, or a local
! \&\f(CW\*(C`initializer_list\*(C'\fR variable, the array's lifetime ends at the end
  of the return statement, so the value returned has a dangling pointer.
! .IP "*" 4
! If a new-expression creates an \f(CW\*(C`initializer_list\*(C'\fR, the array only
! lives until the end of the enclosing full-expression, so the
  \&\f(CW\*(C`initializer_list\*(C'\fR in the heap has a dangling pointer.
! .IP "*" 4
  When an \f(CW\*(C`initializer_list\*(C'\fR variable is assigned from a
! brace-enclosed initializer list, the temporary array created for the
  right side of the assignment only lives until the end of the
! full-expression, so at the next statement the \f(CW\*(C`initializer_list\*(C'\fR
  variable has a dangling pointer.
  .Sp
  .Vb 6
--- 3887,3922 ----
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-float\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-C++20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP \fB\-Wno\-elaborated\-enum\-base\fR 4
  .IX Item "-Wno-elaborated-enum-base"
! For C++11 and above, warn if an (invalid) additional enum\-base is used
! in an elaborated\-type\-specifier.  That is, if an enum with given
  underlying type and no enumerator list is used in a declaration other
  than just a standalone declaration of the enum.  Enabled by default.  This
  warning is upgraded to an error with \-pedantic\-errors.
! .IP "\fB\-Wno\-init\-list\-lifetime\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-init-list-lifetime (C++ and Objective-C++ only)"
  Do not warn about uses of \f(CW\*(C`std::initializer_list\*(C'\fR that are likely
  to result in dangling pointers.  Since the underlying array for an
! \&\f(CW\*(C`initializer_list\*(C'\fR is handled like a normal C++ temporary object,
  it is easy to inadvertently keep a pointer to the array past the end
! of the array\*(Aqs lifetime.  For example:
  .RS 4
! .IP * 4
  If a function returns a temporary \f(CW\*(C`initializer_list\*(C'\fR, or a local
! \&\f(CW\*(C`initializer_list\*(C'\fR variable, the array\*(Aqs lifetime ends at the end
  of the return statement, so the value returned has a dangling pointer.
! .IP * 4
! If a new\-expression creates an \f(CW\*(C`initializer_list\*(C'\fR, the array only
! lives until the end of the enclosing full\-expression, so the
  \&\f(CW\*(C`initializer_list\*(C'\fR in the heap has a dangling pointer.
! .IP * 4
  When an \f(CW\*(C`initializer_list\*(C'\fR variable is assigned from a
! brace\-enclosed initializer list, the temporary array created for the
  right side of the assignment only lives until the end of the
! full\-expression, so at the next statement the \f(CW\*(C`initializer_list\*(C'\fR
  variable has a dangling pointer.
  .Sp
  .Vb 6
*************** variable has a dangling pointer.
*** 3994,4021 ****
  \&        // now the temporary is gone and li has a dangling pointer
  \&        int i = li.begin()[0] // undefined behavior
  .Ve
! .IP "*" 4
  When a list constructor stores the \f(CW\*(C`begin\*(C'\fR pointer from the
! \&\f(CW\*(C`initializer_list\*(C'\fR argument, this doesn't extend the lifetime of
  the array, so if a class variable is constructed from a temporary
  \&\f(CW\*(C`initializer_list\*(C'\fR, the pointer is left dangling by the end of
  the variable declaration statement.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Winvalid\-constexpr\fR" 4
  .IX Item "-Winvalid-constexpr"
! Warn when a function never produces a constant expression.  In \*(C+20
  and earlier, for every \f(CW\*(C`constexpr\*(C'\fR function and function template,
  there must be at least one set of function arguments in at least one
  instantiation such that an invocation of the function or constructor
  could be an evaluated subexpression of a core constant expression.
! \&\*(C+23 removed this restriction, so it's possible to have a function
  or a function template marked \f(CW\*(C`constexpr\*(C'\fR for which no invocation
  satisfies the requirements of a core constant expression.
  .Sp
! This warning is enabled as a pedantic warning by default in \*(C+20 and
! earlier.  In \*(C+23, \fB\-Winvalid\-constexpr\fR can be turned on, in
  which case it will be an ordinary warning.  For example:
  .Sp
  .Vb 7
--- 3927,3954 ----
  \&        // now the temporary is gone and li has a dangling pointer
  \&        int i = li.begin()[0] // undefined behavior
  .Ve
! .IP * 4
  When a list constructor stores the \f(CW\*(C`begin\*(C'\fR pointer from the
! \&\f(CW\*(C`initializer_list\*(C'\fR argument, this doesn\*(Aqt extend the lifetime of
  the array, so if a class variable is constructed from a temporary
  \&\f(CW\*(C`initializer_list\*(C'\fR, the pointer is left dangling by the end of
  the variable declaration statement.
  .RE
  .RS 4
  .RE
! .IP \fB\-Winvalid\-constexpr\fR 4
  .IX Item "-Winvalid-constexpr"
! Warn when a function never produces a constant expression.  In C++20
  and earlier, for every \f(CW\*(C`constexpr\*(C'\fR function and function template,
  there must be at least one set of function arguments in at least one
  instantiation such that an invocation of the function or constructor
  could be an evaluated subexpression of a core constant expression.
! C++23 removed this restriction, so it\*(Aqs possible to have a function
  or a function template marked \f(CW\*(C`constexpr\*(C'\fR for which no invocation
  satisfies the requirements of a core constant expression.
  .Sp
! This warning is enabled as a pedantic warning by default in C++20 and
! earlier.  In C++23, \fB\-Winvalid\-constexpr\fR can be turned on, in
  which case it will be an ordinary warning.  For example:
  .Sp
  .Vb 7
*************** which case it will be an ordinary warnin
*** 4027,4043 ****
  \&          f(i);
  \&        }
  .Ve
! .IP "\fB\-Winvalid\-imported\-macros\fR" 4
  .IX Item "-Winvalid-imported-macros"
  Verify all imported macro definitions are valid at the end of
  compilation.  This is not enabled by default, as it requires
  additional processing to determine.  It may be useful when preparing
! sets of header-units to ensure consistent macros.
! .IP "\fB\-Wno\-literal\-suffix\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-literal-suffix ( and Objective- only)"
  Do not warn when a string or character literal is followed by a
! ud-suffix which does not begin with an underscore.  As a conforming
! extension, \s-1GCC\s0 treats such suffixes as separate preprocessing tokens
  in order to maintain backwards compatibility with code that uses
  formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.  For example:
  .Sp
--- 3960,3976 ----
  \&          f(i);
  \&        }
  .Ve
! .IP \fB\-Winvalid\-imported\-macros\fR 4
  .IX Item "-Winvalid-imported-macros"
  Verify all imported macro definitions are valid at the end of
  compilation.  This is not enabled by default, as it requires
  additional processing to determine.  It may be useful when preparing
! sets of header\-units to ensure consistent macros.
! .IP "\fB\-Wno\-literal\-suffix\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-literal-suffix (C++ and Objective-C++ only)"
  Do not warn when a string or character literal is followed by a
! ud\-suffix which does not begin with an underscore.  As a conforming
! extension, GCC treats such suffixes as separate preprocessing tokens
  in order to maintain backwards compatibility with code that uses
  formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.  For example:
  .Sp
*************** formatting macros from \f(CW\*(C`<inttyp
*** 4054,4076 ****
  .Sp
  In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
  .Sp
! This option also controls warnings when a user-defined literal
! operator is declared with a literal suffix identifier that doesn't
! begin with an underscore. Literal suffix identifiers that don't begin
  with an underscore are reserved for future standardization.
  .Sp
  These warnings are enabled by default.
! .IP "\fB\-Wno\-narrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-narrowing ( and Objective- only)"
! For \*(C+11 and later standards, narrowing conversions are diagnosed by default,
  as required by the standard.  A narrowing conversion from a constant produces
! an error, and a narrowing conversion from a non-constant produces a warning,
  but \fB\-Wno\-narrowing\fR suppresses the diagnostic.
! Note that this does not affect the meaning of well-formed code;
! narrowing conversions are still considered ill-formed in \s-1SFINAE\s0 contexts.
  .Sp
! With \fB\-Wnarrowing\fR in \*(C+98, warn when a narrowing
! conversion prohibited by \*(C+11 occurs within
  \&\fB{ }\fR, e.g.
  .Sp
  .Vb 1
--- 3987,4009 ----
  .Sp
  In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
  .Sp
! This option also controls warnings when a user\-defined literal
! operator is declared with a literal suffix identifier that doesn\*(Aqt
! begin with an underscore. Literal suffix identifiers that don\*(Aqt begin
  with an underscore are reserved for future standardization.
  .Sp
  These warnings are enabled by default.
! .IP "\fB\-Wno\-narrowing\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-narrowing (C++ and Objective-C++ only)"
! For C++11 and later standards, narrowing conversions are diagnosed by default,
  as required by the standard.  A narrowing conversion from a constant produces
! an error, and a narrowing conversion from a non\-constant produces a warning,
  but \fB\-Wno\-narrowing\fR suppresses the diagnostic.
! Note that this does not affect the meaning of well\-formed code;
! narrowing conversions are still considered ill\-formed in SFINAE contexts.
  .Sp
! With \fB\-Wnarrowing\fR in C++98, warn when a narrowing
! conversion prohibited by C++11 occurs within
  \&\fB{ }\fR, e.g.
  .Sp
  .Vb 1
*************** conversion prohibited by \*(C+11 occurs
*** 4078,4093 ****
  .Ve
  .Sp
  This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
! .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnoexcept ( and Objective- only)"
! Warn when a noexcept-expression evaluates to false because of a call
! to a function that does not have a non-throwing exception
! specification (i.e. \f(CW\*(C`throw()\*(C'\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
  the compiler to never throw an exception.
! .IP "\fB\-Wnoexcept\-type\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnoexcept-type ( and Objective- only)"
! Warn if the \*(C+17 feature making \f(CW\*(C`noexcept\*(C'\fR part of a function
! type changes the mangled name of a symbol relative to \*(C+14.  Enabled
  by \fB\-Wabi\fR and \fB\-Wc++17\-compat\fR.
  .Sp
  As an example:
--- 4011,4026 ----
  .Ve
  .Sp
  This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
! .IP "\fB\-Wnoexcept\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnoexcept (C++ and Objective-C++ only)"
! Warn when a noexcept\-expression evaluates to false because of a call
! to a function that does not have a non\-throwing exception
! specification (i.e. \f(CWthrow()\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
  the compiler to never throw an exception.
! .IP "\fB\-Wnoexcept\-type\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnoexcept-type (C++ and Objective-C++ only)"
! Warn if the C++17 feature making \f(CW\*(C`noexcept\*(C'\fR part of a function
! type changes the mangled name of a symbol relative to C++14.  Enabled
  by \fB\-Wabi\fR and \fB\-Wc++17\-compat\fR.
  .Sp
  As an example:
*************** As an example:
*** 4098,4114 ****
  \&        void h() { f(g); }
  .Ve
  .Sp
! In \*(C+14, \f(CW\*(C`f\*(C'\fR calls \f(CW\*(C`f<void(*)()>\*(C'\fR, but in
! \&\*(C+17 it calls \f(CW\*(C`f<void(*)()noexcept>\*(C'\fR.
! .IP "\fB\-Wclass\-memaccess\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wclass-memaccess ( and Objective- only)"
  Warn when the destination of a call to a raw memory function such as
  \&\f(CW\*(C`memset\*(C'\fR or \f(CW\*(C`memcpy\*(C'\fR is an object of class type, and when writing
! into such an object might bypass the class non-trivial or deleted constructor
! or copy assignment, violate const-correctness or encapsulation, or corrupt
  virtual table pointers.  Modifying the representation of such objects may
  violate invariants maintained by member functions of the class.  For example,
! the call to \f(CW\*(C`memset\*(C'\fR below is undefined because it modifies a non-trivial
  class object and is, therefore, diagnosed.  The safe way to either initialize
  or clear the storage of objects of such types is by using the appropriate
  constructor or assignment operator, if one is available.
--- 4031,4047 ----
  \&        void h() { f(g); }
  .Ve
  .Sp
! In C++14, \f(CW\*(C`f\*(C'\fR calls \f(CW\*(C`f<void(*)()>\*(C'\fR, but in
! C++17 it calls \f(CW\*(C`f<void(*)()noexcept>\*(C'\fR.
! .IP "\fB\-Wclass\-memaccess\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wclass-memaccess (C++ and Objective-C++ only)"
  Warn when the destination of a call to a raw memory function such as
  \&\f(CW\*(C`memset\*(C'\fR or \f(CW\*(C`memcpy\*(C'\fR is an object of class type, and when writing
! into such an object might bypass the class non\-trivial or deleted constructor
! or copy assignment, violate const\-correctness or encapsulation, or corrupt
  virtual table pointers.  Modifying the representation of such objects may
  violate invariants maintained by member functions of the class.  For example,
! the call to \f(CW\*(C`memset\*(C'\fR below is undefined because it modifies a non\-trivial
  class object and is, therefore, diagnosed.  The safe way to either initialize
  or clear the storage of objects of such types is by using the appropriate
  constructor or assignment operator, if one is available.
*************** The \fB\-Wclass\-memaccess\fR option is
*** 4122,4130 ****
  Explicitly casting the pointer to the class object to \f(CW\*(C`void *\*(C'\fR or
  to a type that can be safely accessed by the raw memory function suppresses
  the warning.
! .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
! Warn when a class has virtual functions and an accessible non-virtual
  destructor itself or in an accessible polymorphic base class, in which
  case it is possible but unsafe to delete an instance of a derived
  class through a pointer to the class itself or base class.  This
--- 4055,4063 ----
  Explicitly casting the pointer to the class object to \f(CW\*(C`void *\*(C'\fR or
  to a type that can be safely accessed by the raw memory function suppresses
  the warning.
! .IP "\fB\-Wnon\-virtual\-dtor\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnon-virtual-dtor (C++ and Objective-C++ only)"
! Warn when a class has virtual functions and an accessible non\-virtual
  destructor itself or in an accessible polymorphic base class, in which
  case it is possible but unsafe to delete an instance of a derived
  class through a pointer to the class itself or base class.  This
*************** warning is automatically enabled if \fB\
*** 4132,4146 ****
  The \fB\-Wdelete\-non\-virtual\-dtor\fR option (enabled by \fB\-Wall\fR)
  should be preferred because it warns about the unsafe cases without false
  positives.
! .IP "\fB\-Wregister\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wregister ( and Objective- only)"
  Warn on uses of the \f(CW\*(C`register\*(C'\fR storage class specifier, except
! when it is part of the \s-1GNU\s0 \fBExplicit Register Variables\fR extension.
  The use of the \f(CW\*(C`register\*(C'\fR keyword as storage class specifier has
! been deprecated in \*(C+11 and removed in \*(C+17.
  Enabled by default with \fB\-std=c++17\fR.
! .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wreorder ( and Objective- only)"
  Warn when the order of member initializers given in the code does not
  match the order in which they must be executed.  For instance:
  .Sp
--- 4065,4079 ----
  The \fB\-Wdelete\-non\-virtual\-dtor\fR option (enabled by \fB\-Wall\fR)
  should be preferred because it warns about the unsafe cases without false
  positives.
! .IP "\fB\-Wregister\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wregister (C++ and Objective-C++ only)"
  Warn on uses of the \f(CW\*(C`register\*(C'\fR storage class specifier, except
! when it is part of the GNU \fBExplicit Register Variables\fR extension.
  The use of the \f(CW\*(C`register\*(C'\fR keyword as storage class specifier has
! been deprecated in C++11 and removed in C++17.
  Enabled by default with \fB\-std=c++17\fR.
! .IP "\fB\-Wreorder\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wreorder (C++ and Objective-C++ only)"
  Warn when the order of member initializers given in the code does not
  match the order in which they must be executed.  For instance:
  .Sp
*************** match the order in which they must be ex
*** 4155,4166 ****
  The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
  and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
  a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-pessimizing\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-pessimizing-move ( and Objective- only)"
  This warning warns when a call to \f(CW\*(C`std::move\*(C'\fR prevents copy
  elision.  A typical scenario when copy elision can occur is when returning in
  a function with a class return type, when the expression being returned is the
! name of a non-volatile automatic object, and is not a function parameter, and
  has the same type as the function return type.
  .Sp
  .Vb 9
--- 4088,4099 ----
  The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
  and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
  a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-pessimizing\-move\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-pessimizing-move (C++ and Objective-C++ only)"
  This warning warns when a call to \f(CW\*(C`std::move\*(C'\fR prevents copy
  elision.  A typical scenario when copy elision can occur is when returning in
  a function with a class return type, when the expression being returned is the
! name of a non\-volatile automatic object, and is not a function parameter, and
  has the same type as the function return type.
  .Sp
  .Vb 9
*************** has the same type as the function return
*** 4178,4190 ****
  But in this example, the \f(CW\*(C`std::move\*(C'\fR call prevents copy elision.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-redundant\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-redundant-move ( and Objective- only)"
  This warning warns about redundant calls to \f(CW\*(C`std::move\*(C'\fR; that is, when
  a move operation would have been performed even without the \f(CW\*(C`std::move\*(C'\fR
  call.  This happens because the compiler is forced to treat the object as if
  it were an rvalue in certain situations such as returning a local variable,
! where copy elision isn't applicable.  Consider:
  .Sp
  .Vb 8
  \&        struct T {
--- 4111,4123 ----
  But in this example, the \f(CW\*(C`std::move\*(C'\fR call prevents copy elision.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-redundant\-move\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-redundant-move (C++ and Objective-C++ only)"
  This warning warns about redundant calls to \f(CW\*(C`std::move\*(C'\fR; that is, when
  a move operation would have been performed even without the \f(CW\*(C`std::move\*(C'\fR
  call.  This happens because the compiler is forced to treat the object as if
  it were an rvalue in certain situations such as returning a local variable,
! where copy elision isn\*(Aqt applicable.  Consider:
  .Sp
  .Vb 8
  \&        struct T {
*************** Issue 1579, another example is:
*** 4215,4228 ****
  \&        }
  .Ve
  .Sp
! In this example, copy elision isn't applicable because the type of the
  expression being returned and the function return type differ, yet G++
  treats the return value as if it were designated by an rvalue.
  .Sp
  This warning is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wrange\-loop\-construct\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wrange-loop-construct ( and Objective- only)"
! This warning warns when a \*(C+ range-based for-loop is creating an unnecessary
  copy.  This can happen when the range declaration is not a reference, but
  probably should be.  For example:
  .Sp
--- 4148,4161 ----
  \&        }
  .Ve
  .Sp
! In this example, copy elision isn\*(Aqt applicable because the type of the
  expression being returned and the function return type differ, yet G++
  treats the return value as if it were designated by an rvalue.
  .Sp
  This warning is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wrange\-loop\-construct\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wrange-loop-construct (C++ and Objective-C++ only)"
! This warning warns when a C++ range\-based for\-loop is creating an unnecessary
  copy.  This can happen when the range declaration is not a reference, but
  probably should be.  For example:
  .Sp
*************** probably should be.  For example:
*** 4234,4243 ****
  \&        }
  .Ve
  .Sp
! It does not warn when the type being copied is a trivially-copyable type whose
  size is less than 64 bytes.
  .Sp
! This warning also warns when a loop variable in a range-based for-loop is
  initialized with a value of a different type resulting in a copy.  For example:
  .Sp
  .Vb 4
--- 4167,4176 ----
  \&        }
  .Ve
  .Sp
! It does not warn when the type being copied is a trivially\-copyable type whose
  size is less than 64 bytes.
  .Sp
! This warning also warns when a loop variable in a range\-based for\-loop is
  initialized with a value of a different type resulting in a copy.  For example:
  .Sp
  .Vb 4
*************** type \f(CW\*(C`double\*(C'\fR is created
*** 4252,4260 ****
  \&\f(CW\*(C`const double &\*(C'\fR is bound.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wredundant\-tags\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wredundant-tags ( and Objective- only)"
! Warn about redundant class-key and enum-key in references to class types
  and enumerated types in contexts where the key can be eliminated without
  causing an ambiguity.  For example:
  .Sp
--- 4185,4193 ----
  \&\f(CW\*(C`const double &\*(C'\fR is bound.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wredundant\-tags\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wredundant-tags (C++ and Objective-C++ only)"
! Warn about redundant class\-key and enum\-key in references to class types
  and enumerated types in contexts where the key can be eliminated without
  causing an ambiguity.  For example:
  .Sp
*************** On the other hand, in this example there
*** 4270,4349 ****
  \&        void foo ();   // "hides" struct foo
  \&        void bar (struct foo&);  // no warning, keyword struct is necessary
  .Ve
! .IP "\fB\-Wno\-subobject\-linkage\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-subobject-linkage ( and Objective- only)"
  Do not warn
  if a class type has a base or a field whose type uses the anonymous
  namespace or depends on a type with no linkage.  If a type A depends on
  a type B with no or internal linkage, defining it in multiple
! translation units would be an \s-1ODR\s0 violation because the meaning of B
  is different in each translation unit.  If A only appears in a single
  translation unit, the best way to silence the warning is to give it
  internal linkage by putting it in an anonymous namespace as well.  The
! compiler doesn't give this warning for types defined in the main .C
  file, as those are unlikely to have multiple definitions.
  \&\fB\-Wsubobject\-linkage\fR is enabled by default.
! .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Weffc++ ( and Objective- only)"
! Warn about violations of the following style guidelines from Scott Meyers'
! \&\fIEffective \*(C+\fR series of books:
  .RS 4
! .IP "*" 4
  Define a copy constructor and an assignment operator for classes
! with dynamically-allocated memory.
! .IP "*" 4
  Prefer initialization to assignment in constructors.
! .IP "*" 4
  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
! .IP "*" 4
! Don't try to return a reference when you must return an object.
! .IP "*" 4
  Distinguish between prefix and postfix forms of increment and
  decrement operators.
! .IP "*" 4
  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
  .RE
  .RS 4
  .Sp
  This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
! one of the effective \*(C+ recommendations.  However, the check is
  extended to warn about the lack of virtual destructor in accessible
! non-polymorphic bases classes too.
  .Sp
  When selecting this option, be aware that the standard library
  headers do not obey all of these guidelines; use \fBgrep \-v\fR
  to filter out those warnings.
  .RE
! .IP "\fB\-Wno\-exceptions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-exceptions ( and Objective- only)"
  Disable the warning about the case when an exception handler is shadowed by
  another handler, which can point out a wrong ordering of exception handlers.
! .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
  Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
! compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
  to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
  null pointer, it is guaranteed to be of the same size as a pointer.
  But this use is not portable across different compilers.
! .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-non-template-friend ( and Objective- only)"
! Disable warnings when non-template friend functions are declared
! within a template.  In very old versions of \s-1GCC\s0 that predate implementation
! of the \s-1ISO\s0 standard, declarations such as 
! \&\fBfriend int foo(int)\fR, where the name of the friend is an unqualified-id,
  could be interpreted as a particular specialization of a template
  function; the warning exists to diagnose compatibility problems, 
  and is enabled by default.
! .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wold-style-cast ( and Objective- only)"
! Warn if an old-style (C\-style) cast to a non-void type is used within
! a \*(C+ program.  The new-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
  \&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
  less vulnerable to unintended effects and much easier to search for.
! .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Woverloaded-virtual ( and Objective- only)"
  .PD 0
! .IP "\fB\-Woverloaded\-virtual=\fR\fIn\fR" 4
  .IX Item "-Woverloaded-virtual=n"
  .PD
  Warn when a function declaration hides virtual functions from a
--- 4203,4282 ----
  \&        void foo ();   // "hides" struct foo
  \&        void bar (struct foo&);  // no warning, keyword struct is necessary
  .Ve
! .IP "\fB\-Wno\-subobject\-linkage\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-subobject-linkage (C++ and Objective-C++ only)"
  Do not warn
  if a class type has a base or a field whose type uses the anonymous
  namespace or depends on a type with no linkage.  If a type A depends on
  a type B with no or internal linkage, defining it in multiple
! translation units would be an ODR violation because the meaning of B
  is different in each translation unit.  If A only appears in a single
  translation unit, the best way to silence the warning is to give it
  internal linkage by putting it in an anonymous namespace as well.  The
! compiler doesn\*(Aqt give this warning for types defined in the main .C
  file, as those are unlikely to have multiple definitions.
  \&\fB\-Wsubobject\-linkage\fR is enabled by default.
! .IP "\fB\-Weffc++\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Weffc++ (C++ and Objective-C++ only)"
! Warn about violations of the following style guidelines from Scott Meyers\*(Aq
! \&\fIEffective C++\fR series of books:
  .RS 4
! .IP * 4
  Define a copy constructor and an assignment operator for classes
! with dynamically\-allocated memory.
! .IP * 4
  Prefer initialization to assignment in constructors.
! .IP * 4
  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
! .IP * 4
! Don\*(Aqt try to return a reference when you must return an object.
! .IP * 4
  Distinguish between prefix and postfix forms of increment and
  decrement operators.
! .IP * 4
  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
  .RE
  .RS 4
  .Sp
  This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
! one of the effective C++ recommendations.  However, the check is
  extended to warn about the lack of virtual destructor in accessible
! non\-polymorphic bases classes too.
  .Sp
  When selecting this option, be aware that the standard library
  headers do not obey all of these guidelines; use \fBgrep \-v\fR
  to filter out those warnings.
  .RE
! .IP "\fB\-Wno\-exceptions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-exceptions (C++ and Objective-C++ only)"
  Disable the warning about the case when an exception handler is shadowed by
  another handler, which can point out a wrong ordering of exception handlers.
! .IP "\fB\-Wstrict\-null\-sentinel\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wstrict-null-sentinel (C++ and Objective-C++ only)"
  Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
! compiling only with GCC this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
  to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
  null pointer, it is guaranteed to be of the same size as a pointer.
  But this use is not portable across different compilers.
! .IP "\fB\-Wno\-non\-template\-friend\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-non-template-friend (C++ and Objective-C++ only)"
! Disable warnings when non\-template friend functions are declared
! within a template.  In very old versions of GCC that predate implementation
! of the ISO standard, declarations such as 
! \&\fBfriend int foo(int)\fR, where the name of the friend is an unqualified\-id,
  could be interpreted as a particular specialization of a template
  function; the warning exists to diagnose compatibility problems, 
  and is enabled by default.
! .IP "\fB\-Wold\-style\-cast\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wold-style-cast (C++ and Objective-C++ only)"
! Warn if an old\-style (C\-style) cast to a non\-void type is used within
! a C++ program.  The new\-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
  \&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
  less vulnerable to unintended effects and much easier to search for.
! .IP "\fB\-Woverloaded\-virtual\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Woverloaded-virtual (C++ and Objective-C++ only)"
  .PD 0
! .IP \fB\-Woverloaded\-virtual=\fR\fIn\fR 4
  .IX Item "-Woverloaded-virtual=n"
  .PD
  Warn when a function declaration hides virtual functions from a
*************** like:
*** 4370,4377 ****
  fails to compile.
  .Sp
  In cases where the different signatures are not an accident, the
! simplest solution is to add a using-declaration to the derived class
! to un-hide the base function, e.g. add \f(CW\*(C`using A::f;\*(C'\fR to \f(CW\*(C`B\*(C'\fR.
  .Sp
  The optional level suffix controls the behavior when all the
  declarations in the derived class override virtual functions in the
--- 4303,4310 ----
  fails to compile.
  .Sp
  In cases where the different signatures are not an accident, the
! simplest solution is to add a using\-declaration to the derived class
! to un\-hide the base function, e.g. add \f(CW\*(C`using A::f;\*(C'\fR to \f(CW\*(C`B\*(C'\fR.
  .Sp
  The optional level suffix controls the behavior when all the
  declarations in the derived class override virtual functions in the
*************** for some of the overloads are fine.
*** 4395,4430 ****
  At level 1, this case does not warn; at level 2, it does.
  \&\fB\-Woverloaded\-virtual\fR by itself selects level 2.  Level 1 is
  included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-pmf-conversions ( and Objective- only)"
  Disable the diagnostic for converting a bound pointer to member function
  to a plain pointer.
! .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wsign-promo ( and Objective- only)"
  Warn when overload resolution chooses a promotion from unsigned or
  enumerated type to a signed type, over a conversion to an unsigned type of
  the same size.  Previous versions of G++ tried to preserve
  unsignedness, but the standard mandates the current behavior.
! .IP "\fB\-Wtemplates\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wtemplates ( and Objective- only)"
  Warn when a primary template declaration is encountered.  Some coding
  rules disallow templates, and this may be used to enforce that rule.
! The warning is inactive inside a system header file, such as the \s-1STL,\s0 so
! one can still use the \s-1STL.\s0  One may also instantiate or specialize
  templates.
! .IP "\fB\-Wmismatched\-new\-delete\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wmismatched-new-delete ( and Objective- only)"
  Warn for mismatches between calls to \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator
  delete\*(C'\fR and the corresponding call to the allocation or deallocation function.
! This includes invocations of \*(C+ \f(CW\*(C`operator delete\*(C'\fR with pointers
  returned from either mismatched forms of \f(CW\*(C`operator new\*(C'\fR, or from other
! functions that allocate objects for which the \f(CW\*(C`operator delete\*(C'\fR isn't
  a suitable deallocator, as well as calls to other deallocation functions
  with pointers returned from \f(CW\*(C`operator new\*(C'\fR for which the deallocation
! function isn't suitable.
  .Sp
  For example, the \f(CW\*(C`delete\*(C'\fR expression in the function below is diagnosed
! because it doesn't match the array form of the \f(CW\*(C`new\*(C'\fR expression
  the pointer argument was returned from.  Similarly, the call to \f(CW\*(C`free\*(C'\fR
  is also diagnosed.
  .Sp
--- 4328,4363 ----
  At level 1, this case does not warn; at level 2, it does.
  \&\fB\-Woverloaded\-virtual\fR by itself selects level 2.  Level 1 is
  included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-pmf\-conversions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-pmf-conversions (C++ and Objective-C++ only)"
  Disable the diagnostic for converting a bound pointer to member function
  to a plain pointer.
! .IP "\fB\-Wsign\-promo\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wsign-promo (C++ and Objective-C++ only)"
  Warn when overload resolution chooses a promotion from unsigned or
  enumerated type to a signed type, over a conversion to an unsigned type of
  the same size.  Previous versions of G++ tried to preserve
  unsignedness, but the standard mandates the current behavior.
! .IP "\fB\-Wtemplates\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wtemplates (C++ and Objective-C++ only)"
  Warn when a primary template declaration is encountered.  Some coding
  rules disallow templates, and this may be used to enforce that rule.
! The warning is inactive inside a system header file, such as the STL, so
! one can still use the STL.  One may also instantiate or specialize
  templates.
! .IP "\fB\-Wmismatched\-new\-delete\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wmismatched-new-delete (C++ and Objective-C++ only)"
  Warn for mismatches between calls to \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator
  delete\*(C'\fR and the corresponding call to the allocation or deallocation function.
! This includes invocations of C++ \f(CW\*(C`operator delete\*(C'\fR with pointers
  returned from either mismatched forms of \f(CW\*(C`operator new\*(C'\fR, or from other
! functions that allocate objects for which the \f(CW\*(C`operator delete\*(C'\fR isn\*(Aqt
  a suitable deallocator, as well as calls to other deallocation functions
  with pointers returned from \f(CW\*(C`operator new\*(C'\fR for which the deallocation
! function isn\*(Aqt suitable.
  .Sp
  For example, the \f(CW\*(C`delete\*(C'\fR expression in the function below is diagnosed
! because it doesn\*(Aqt match the array form of the \f(CW\*(C`new\*(C'\fR expression
  the pointer argument was returned from.  Similarly, the call to \f(CW\*(C`free\*(C'\fR
  is also diagnosed.
  .Sp
*************** involving allocation and deallocation fu
*** 4444,4458 ****
  new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  \&\fB\-Wmismatched\-new\-delete\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wmismatched\-tags\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wmismatched-tags ( and Objective- only)"
  Warn for declarations of structs, classes, and class templates and their
! specializations with a class-key that does not match either the definition
  or the first declaration if no definition is provided.
  .Sp
  For example, the declaration of \f(CW\*(C`struct Object\*(C'\fR in the argument list
  of \f(CW\*(C`draw\*(C'\fR triggers the warning.  To avoid it, either remove the redundant
! class-key \f(CW\*(C`struct\*(C'\fR or replace it with \f(CW\*(C`class\*(C'\fR to match its definition.
  .Sp
  .Vb 5
  \&        class Object {
--- 4377,4391 ----
  new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  \&\fB\-Wmismatched\-new\-delete\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wmismatched\-tags\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wmismatched-tags (C++ and Objective-C++ only)"
  Warn for declarations of structs, classes, and class templates and their
! specializations with a class\-key that does not match either the definition
  or the first declaration if no definition is provided.
  .Sp
  For example, the declaration of \f(CW\*(C`struct Object\*(C'\fR in the argument list
  of \f(CW\*(C`draw\*(C'\fR triggers the warning.  To avoid it, either remove the redundant
! class\-key \f(CW\*(C`struct\*(C'\fR or replace it with \f(CW\*(C`class\*(C'\fR to match its definition.
  .Sp
  .Vb 5
  \&        class Object {
*************** class-key \f(CW\*(C`struct\*(C'\fR or re
*** 4462,4506 ****
  \&        void draw (struct Object*);
  .Ve
  .Sp
! It is not wrong to declare a class with the class-key \f(CW\*(C`struct\*(C'\fR as
  the example above shows.  The \fB\-Wmismatched\-tags\fR option is intended
  to help achieve a consistent style of class declarations.  In code that is
! intended to be portable to Windows-based compilers the warning helps prevent
  unresolved references due to the difference in the mangling of symbols
! declared with different class-keys.  The option can be used either on its
  own or in conjunction with \fB\-Wredundant\-tags\fR.
! .IP "\fB\-Wmultiple\-inheritance\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wmultiple-inheritance ( and Objective- only)"
  Warn when a class is defined with multiple direct base classes.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
  classes that indirectly use multiple inheritance.
! .IP "\fB\-Wvirtual\-inheritance\fR" 4
  .IX Item "-Wvirtual-inheritance"
  Warn when a class is defined with a virtual direct base class.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
  classes that indirectly use virtual inheritance.
! .IP "\fB\-Wno\-virtual\-move\-assign\fR" 4
  .IX Item "-Wno-virtual-move-assign"
  Suppress warnings about inheriting from a virtual base with a
! non-trivial \*(C+11 move assignment operator.  This is dangerous because
  if the virtual base is reachable along more than one path, it is
  moved multiple times, which can mean both objects end up in the
! moved-from state.  If the move assignment operator is written to avoid
! moving from a moved-from object, this warning can be disabled.
! .IP "\fB\-Wnamespaces\fR" 4
  .IX Item "-Wnamespaces"
  Warn when a namespace definition is opened.  Some coding rules disallow
  namespaces, and this may be used to enforce that rule.  The warning is
! inactive inside a system header file, such as the \s-1STL,\s0 so one can still
! use the \s-1STL.\s0  One may also use using directives and qualified names.
! .IP "\fB\-Wno\-template\-id\-cdtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-template-id-cdtor ( and Objective- only)"
! Disable the warning about the use of simple-template-id as the declarator-id
! of a constructor or destructor, which became invalid in \*(C+20 via \s-1DR 2237.\s0
  For example:
  .Sp
  .Vb 4
--- 4395,4439 ----
  \&        void draw (struct Object*);
  .Ve
  .Sp
! It is not wrong to declare a class with the class\-key \f(CW\*(C`struct\*(C'\fR as
  the example above shows.  The \fB\-Wmismatched\-tags\fR option is intended
  to help achieve a consistent style of class declarations.  In code that is
! intended to be portable to Windows\-based compilers the warning helps prevent
  unresolved references due to the difference in the mangling of symbols
! declared with different class\-keys.  The option can be used either on its
  own or in conjunction with \fB\-Wredundant\-tags\fR.
! .IP "\fB\-Wmultiple\-inheritance\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wmultiple-inheritance (C++ and Objective-C++ only)"
  Warn when a class is defined with multiple direct base classes.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the STL, so one can still use the STL.  One may also define
  classes that indirectly use multiple inheritance.
! .IP \fB\-Wvirtual\-inheritance\fR 4
  .IX Item "-Wvirtual-inheritance"
  Warn when a class is defined with a virtual direct base class.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the STL, so one can still use the STL.  One may also define
  classes that indirectly use virtual inheritance.
! .IP \fB\-Wno\-virtual\-move\-assign\fR 4
  .IX Item "-Wno-virtual-move-assign"
  Suppress warnings about inheriting from a virtual base with a
! non\-trivial C++11 move assignment operator.  This is dangerous because
  if the virtual base is reachable along more than one path, it is
  moved multiple times, which can mean both objects end up in the
! moved\-from state.  If the move assignment operator is written to avoid
! moving from a moved\-from object, this warning can be disabled.
! .IP \fB\-Wnamespaces\fR 4
  .IX Item "-Wnamespaces"
  Warn when a namespace definition is opened.  Some coding rules disallow
  namespaces, and this may be used to enforce that rule.  The warning is
! inactive inside a system header file, such as the STL, so one can still
! use the STL.  One may also use using directives and qualified names.
! .IP "\fB\-Wno\-template\-id\-cdtor\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-template-id-cdtor (C++ and Objective-C++ only)"
! Disable the warning about the use of simple\-template\-id as the declarator\-id
! of a constructor or destructor, which became invalid in C++20 via DR 2237.
  For example:
  .Sp
  .Vb 4
*************** For example:
*** 4512,4526 ****
  .Sp
  \&\fB\-Wtemplate\-id\-cdtor\fR is enabled by default with
  \&\fB\-std=c++20\fR; it is also enabled by \fB\-Wc++20\-compat\fR.
! .IP "\fB\-Wno\-terminate\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-terminate ( and Objective- only)"
! Disable the warning about a throw-expression that will immediately
  result in a call to \f(CW\*(C`terminate\*(C'\fR.
! .IP "\fB\-Wno\-vexing\-parse\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-vexing-parse ( and Objective- only)"
  Warn about the most vexing parse syntactic ambiguity.  This warns about
  the cases when a declaration looks like a variable definition, but the
! \&\*(C+ language requires it to be interpreted as a function declaration.
  For instance:
  .Sp
  .Vb 4
--- 4445,4459 ----
  .Sp
  \&\fB\-Wtemplate\-id\-cdtor\fR is enabled by default with
  \&\fB\-std=c++20\fR; it is also enabled by \fB\-Wc++20\-compat\fR.
! .IP "\fB\-Wno\-terminate\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-terminate (C++ and Objective-C++ only)"
! Disable the warning about a throw\-expression that will immediately
  result in a call to \f(CW\*(C`terminate\*(C'\fR.
! .IP "\fB\-Wno\-vexing\-parse\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-vexing-parse (C++ and Objective-C++ only)"
  Warn about the most vexing parse syntactic ambiguity.  This warns about
  the cases when a declaration looks like a variable definition, but the
! C++ language requires it to be interpreted as a function declaration.
  For instance:
  .Sp
  .Vb 4
*************** The warning will suggest options how to
*** 4545,4585 ****
  it can suggest removing the parentheses or using braces instead.
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wno\-class\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-class-conversion ( and Objective- only)"
  Do not warn when a conversion function converts an
  object to the same type, to a base class of that type, or to void; such
  a conversion function will never be called.
! .IP "\fB\-Wvolatile\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wvolatile ( and Objective- only)"
  Warn about deprecated uses of the \f(CW\*(C`volatile\*(C'\fR qualifier.  This includes
  postfix and prefix \f(CW\*(C`++\*(C'\fR and \f(CW\*(C`\-\-\*(C'\fR expressions of
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified types, using simple assignments where the left
! operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified non-class type for their value,
  compound assignments where the left operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified
! non-class type, \f(CW\*(C`volatile\*(C'\fR\-qualified function return type,
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified parameter type, and structured bindings of a
! \&\f(CW\*(C`volatile\*(C'\fR\-qualified type.  This usage was deprecated in \*(C+20.
  .Sp
  Enabled by default with \fB\-std=c++20\fR.
! .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
  Warn when a literal \fB0\fR is used as null pointer constant.  This can
! be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
! .IP "\fB\-Waligned\-new\fR" 4
  .IX Item "-Waligned-new"
! Warn about a new-expression of a type that requires greater alignment
! than the \f(CW\*(C`alignof(std::max_align_t)\*(C'\fR but uses an allocation
  function without an explicit alignment parameter. This option is
  enabled by \fB\-Wall\fR.
  .Sp
  Normally this only warns about global allocation functions, but
  \&\fB\-Waligned\-new=all\fR also warns about class member allocation
  functions.
! .IP "\fB\-Wno\-placement\-new\fR" 4
  .IX Item "-Wno-placement-new"
  .PD 0
! .IP "\fB\-Wplacement\-new=\fR\fIn\fR" 4
  .IX Item "-Wplacement-new=n"
  .PD
  Warn about placement new expressions with undefined behavior, such as
--- 4478,4518 ----
  it can suggest removing the parentheses or using braces instead.
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wno\-class\-conversion\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-class-conversion (C++ and Objective-C++ only)"
  Do not warn when a conversion function converts an
  object to the same type, to a base class of that type, or to void; such
  a conversion function will never be called.
! .IP "\fB\-Wvolatile\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wvolatile (C++ and Objective-C++ only)"
  Warn about deprecated uses of the \f(CW\*(C`volatile\*(C'\fR qualifier.  This includes
  postfix and prefix \f(CW\*(C`++\*(C'\fR and \f(CW\*(C`\-\-\*(C'\fR expressions of
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified types, using simple assignments where the left
! operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified non\-class type for their value,
  compound assignments where the left operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified
! non\-class type, \f(CW\*(C`volatile\*(C'\fR\-qualified function return type,
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified parameter type, and structured bindings of a
! \&\f(CW\*(C`volatile\*(C'\fR\-qualified type.  This usage was deprecated in C++20.
  .Sp
  Enabled by default with \fB\-std=c++20\fR.
! .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)"
  Warn when a literal \fB0\fR is used as null pointer constant.  This can
! be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in C++11.
! .IP \fB\-Waligned\-new\fR 4
  .IX Item "-Waligned-new"
! Warn about a new\-expression of a type that requires greater alignment
! than the \f(CWalignof(std::max_align_t)\fR but uses an allocation
  function without an explicit alignment parameter. This option is
  enabled by \fB\-Wall\fR.
  .Sp
  Normally this only warns about global allocation functions, but
  \&\fB\-Waligned\-new=all\fR also warns about class member allocation
  functions.
! .IP \fB\-Wno\-placement\-new\fR 4
  .IX Item "-Wno-placement-new"
  .PD 0
! .IP \fB\-Wplacement\-new=\fR\fIn\fR 4
  .IX Item "-Wplacement-new=n"
  .PD
  Warn about placement new expressions with undefined behavior, such as
*************** because it attempts to construct an arra
*** 4595,4615 ****
  .Sp
  This warning is enabled by default.
  .RS 4
! .IP "\fB\-Wplacement\-new=1\fR" 4
  .IX Item "-Wplacement-new=1"
  This is the default warning level of \fB\-Wplacement\-new\fR.  At this
  level the warning is not issued for some strictly undefined constructs that
! \&\s-1GCC\s0 allows as extensions for compatibility with legacy code.  For example,
  the following \f(CW\*(C`new\*(C'\fR expression is not diagnosed at this level even
! though it has undefined behavior according to the \*(C+ standard because
! it writes past the end of the one-element array.
  .Sp
  .Vb 3
  \&        struct S { int n, a[1]; };
  \&        S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]);
  \&        new (s\->a)int [32]();
  .Ve
! .IP "\fB\-Wplacement\-new=2\fR" 4
  .IX Item "-Wplacement-new=2"
  At this level, in addition to diagnosing all the same constructs as at level
  1, a diagnostic is also issued for placement new expressions that construct
--- 4528,4548 ----
  .Sp
  This warning is enabled by default.
  .RS 4
! .IP \fB\-Wplacement\-new=1\fR 4
  .IX Item "-Wplacement-new=1"
  This is the default warning level of \fB\-Wplacement\-new\fR.  At this
  level the warning is not issued for some strictly undefined constructs that
! GCC allows as extensions for compatibility with legacy code.  For example,
  the following \f(CW\*(C`new\*(C'\fR expression is not diagnosed at this level even
! though it has undefined behavior according to the C++ standard because
! it writes past the end of the one\-element array.
  .Sp
  .Vb 3
  \&        struct S { int n, a[1]; };
  \&        S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]);
  \&        new (s\->a)int [32]();
  .Ve
! .IP \fB\-Wplacement\-new=2\fR 4
  .IX Item "-Wplacement-new=2"
  At this level, in addition to diagnosing all the same constructs as at level
  1, a diagnostic is also issued for placement new expressions that construct
*************** use of the flexible member array extensi
*** 4626,4636 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wcatch\-value\fR" 4
  .IX Item "-Wcatch-value"
  .PD 0
! .IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wcatch-value=n ( and Objective- only)"
  .PD
  Warn about catch handlers that do not catch via reference.
  With \fB\-Wcatch\-value=1\fR (or \fB\-Wcatch\-value\fR for short)
--- 4559,4569 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wcatch\-value\fR 4
  .IX Item "-Wcatch-value"
  .PD 0
! .IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(C++ and Objective\-C++ only)" 4
! .IX Item "-Wcatch-value=n (C++ and Objective-C++ only)"
  .PD
  Warn about catch handlers that do not catch via reference.
  With \fB\-Wcatch\-value=1\fR (or \fB\-Wcatch\-value\fR for short)
*************** warn about polymorphic class types that
*** 4638,4659 ****
  With \fB\-Wcatch\-value=2\fR warn about all class types that are caught
  by value. With \fB\-Wcatch\-value=3\fR warn about all types that are
  not caught by reference. \fB\-Wcatch\-value\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wconditionally\-supported\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wconditionally-supported ( and Objective- only)"
! Warn for conditionally-supported (\*(C+11 [intro.defs]) constructs.
! .IP "\fB\-Wno\-delete\-incomplete\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-delete-incomplete ( and Objective- only)"
  Do not warn when deleting a pointer to incomplete type, which may cause
  undefined behavior at runtime.  This warning is enabled by default.
! .IP "\fB\-Wextra\-semi\fR (\*(C+, Objective\-\*(C+ only)" 4
! .IX Item "-Wextra-semi (, Objective- only)"
! Warn about redundant semicolons after in-class function definitions.
! .IP "\fB\-Wno\-global\-module\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-global-module ( and Objective- only)"
  Disable the diagnostic for when the global module fragment of a module
  unit does not consist only of preprocessor directives.
! .IP "\fB\-Wno\-inaccessible\-base\fR (\*(C+, Objective\-\*(C+ only)" 4
! .IX Item "-Wno-inaccessible-base (, Objective- only)"
  This option controls warnings
  when a base class is inaccessible in a class derived from it due to
  ambiguity.  The warning is enabled by default.
--- 4571,4592 ----
  With \fB\-Wcatch\-value=2\fR warn about all class types that are caught
  by value. With \fB\-Wcatch\-value=3\fR warn about all types that are
  not caught by reference. \fB\-Wcatch\-value\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wconditionally\-supported\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wconditionally-supported (C++ and Objective-C++ only)"
! Warn for conditionally\-supported (C++11 [intro.defs]) constructs.
! .IP "\fB\-Wno\-delete\-incomplete\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-delete-incomplete (C++ and Objective-C++ only)"
  Do not warn when deleting a pointer to incomplete type, which may cause
  undefined behavior at runtime.  This warning is enabled by default.
! .IP "\fB\-Wextra\-semi\fR (C++, Objective\-C++ only)" 4
! .IX Item "-Wextra-semi (C++, Objective-C++ only)"
! Warn about redundant semicolons after in\-class function definitions.
! .IP "\fB\-Wno\-global\-module\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-global-module (C++ and Objective-C++ only)"
  Disable the diagnostic for when the global module fragment of a module
  unit does not consist only of preprocessor directives.
! .IP "\fB\-Wno\-inaccessible\-base\fR (C++, Objective\-C++ only)" 4
! .IX Item "-Wno-inaccessible-base (C++, Objective-C++ only)"
  This option controls warnings
  when a base class is inaccessible in a class derived from it due to
  ambiguity.  The warning is enabled by default.
*************** bases is enabled by the \fB\-Wextra\fR o
*** 4667,4691 ****
  \&        
  \&        struct C : B, A { };
  .Ve
! .IP "\fB\-Wno\-inherited\-variadic\-ctor\fR" 4
  .IX Item "-Wno-inherited-variadic-ctor"
! Suppress warnings about use of \*(C+11 inheriting constructors when the
  base class inherited from has a C variadic constructor; the warning is
  on by default because the ellipsis is not inherited.
! .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
! Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non-POD
! type.  According to the 2014 \s-1ISO \*(C+\s0 standard, applying \f(CW\*(C`offsetof\*(C'\fR
! to a non-standard-layout type is undefined.  In existing \*(C+ implementations,
  however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
  This flag is for users who are aware that they are
  writing nonportable code and who have deliberately chosen to ignore the
  warning about it.
  .Sp
  The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
! of the \*(C+ standard.
! .IP "\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wsized-deallocation ( and Objective- only)"
  Warn about a definition of an unsized deallocation function
  .Sp
  .Vb 2
--- 4600,4624 ----
  \&        
  \&        struct C : B, A { };
  .Ve
! .IP \fB\-Wno\-inherited\-variadic\-ctor\fR 4
  .IX Item "-Wno-inherited-variadic-ctor"
! Suppress warnings about use of C++11 inheriting constructors when the
  base class inherited from has a C variadic constructor; the warning is
  on by default because the ellipsis is not inherited.
! .IP "\fB\-Wno\-invalid\-offsetof\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-invalid-offsetof (C++ and Objective-C++ only)"
! Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non\-POD
! type.  According to the 2014 ISO C++ standard, applying \f(CW\*(C`offsetof\*(C'\fR
! to a non\-standard\-layout type is undefined.  In existing C++ implementations,
  however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
  This flag is for users who are aware that they are
  writing nonportable code and who have deliberately chosen to ignore the
  warning about it.
  .Sp
  The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
! of the C++ standard.
! .IP "\fB\-Wsized\-deallocation\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wsized-deallocation (C++ and Objective-C++ only)"
  Warn about a definition of an unsized deallocation function
  .Sp
  .Vb 2
*************** without a definition of the correspondin
*** 4702,4744 ****
  .Sp
  or vice versa.  Enabled by \fB\-Wextra\fR along with
  \&\fB\-fsized\-deallocation\fR.
! .IP "\fB\-Wsuggest\-final\-types\fR" 4
  .IX Item "-Wsuggest-final-types"
  Warn about types with virtual methods where code quality would be improved
! if the type were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible,
! declared in an anonymous namespace. This allows \s-1GCC\s0 to more aggressively
  devirtualize the polymorphic calls. This warning is more effective with
! link-time optimization,
  where the information about the class hierarchy graph is
  more complete.
! .IP "\fB\-Wsuggest\-final\-methods\fR" 4
  .IX Item "-Wsuggest-final-methods"
  Warn about virtual methods where code quality would be improved if the method
! were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible, its type were
  declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
  This warning is
! more effective with link-time optimization, where the information about the
  class hierarchy graph is more complete. It is recommended to first consider
  suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
  annotations.
! .IP "\fB\-Wsuggest\-override\fR" 4
  .IX Item "-Wsuggest-override"
  Warn about overriding virtual functions that are not marked with the
  \&\f(CW\*(C`override\*(C'\fR keyword.
! .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-conversion-null ( and Objective- only)"
! Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
  types. \fB\-Wconversion\-null\fR is enabled by default.
! .SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
! .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
! (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
  languages themselves.
  .PP
! This section describes the command-line options that are only meaningful
! for Objective-C and Objective\-\*(C+ programs.  You can also use most of
! the language-independent \s-1GNU\s0 compiler options.
  For example, you might compile a file \fIsome_class.m\fR like this:
  .PP
  .Vb 1
--- 4635,4677 ----
  .Sp
  or vice versa.  Enabled by \fB\-Wextra\fR along with
  \&\fB\-fsized\-deallocation\fR.
! .IP \fB\-Wsuggest\-final\-types\fR 4
  .IX Item "-Wsuggest-final-types"
  Warn about types with virtual methods where code quality would be improved
! if the type were declared with the C++11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible,
! declared in an anonymous namespace. This allows GCC to more aggressively
  devirtualize the polymorphic calls. This warning is more effective with
! link\-time optimization,
  where the information about the class hierarchy graph is
  more complete.
! .IP \fB\-Wsuggest\-final\-methods\fR 4
  .IX Item "-Wsuggest-final-methods"
  Warn about virtual methods where code quality would be improved if the method
! were declared with the C++11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible, its type were
  declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
  This warning is
! more effective with link\-time optimization, where the information about the
  class hierarchy graph is more complete. It is recommended to first consider
  suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
  annotations.
! .IP \fB\-Wsuggest\-override\fR 4
  .IX Item "-Wsuggest-override"
  Warn about overriding virtual functions that are not marked with the
  \&\f(CW\*(C`override\*(C'\fR keyword.
! .IP "\fB\-Wno\-conversion\-null\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-conversion-null (C++ and Objective-C++ only)"
! Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non\-pointer
  types. \fB\-Wconversion\-null\fR is enabled by default.
! .SS "Options Controlling Objective\-C and Objective\-C++ Dialects"
! .IX Subsection "Options Controlling Objective-C and Objective-C++ Dialects"
! (NOTE: This manual does not describe the Objective\-C and Objective\-C++
  languages themselves.
  .PP
! This section describes the command\-line options that are only meaningful
! for Objective\-C and Objective\-C++ programs.  You can also use most of
! the language\-independent GNU compiler options.
  For example, you might compile a file \fIsome_class.m\fR like this:
  .PP
  .Vb 1
*************** For example, you might compile a file \f
*** 4746,4909 ****
  .Ve
  .PP
  In this example, \fB\-fgnu\-runtime\fR is an option meant only for
! Objective-C and Objective\-\*(C+ programs; you can use the other options with
! any language supported by \s-1GCC.\s0
  .PP
! Note that since Objective-C is an extension of the C language, Objective-C
! compilations may also use options specific to the C front-end (e.g.,
! \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
! \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
  .PP
! Here is a list of options that are \fIonly\fR for compiling Objective-C
! and Objective\-\*(C+ programs:
! .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
  .IX Item "-fconstant-string-class=class-name"
! Use \fIclass-name\fR as the name of the class to instantiate for each
  literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
! class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
  \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  On
  Darwin / macOS platforms, the \fB\-fconstant\-cfstrings\fR option, if
  also present, overrides the \fB\-fconstant\-string\-class\fR setting and cause
  \&\f(CW\*(C`@"..."\*(C'\fR literals to be laid out as constant CoreFoundation strings.
! Note that \fB\-fconstant\-cfstrings\fR is an alias for the target-specific
  \&\fB\-mconstant\-cfstrings\fR equivalent.
! .IP "\fB\-fgnu\-runtime\fR" 4
  .IX Item "-fgnu-runtime"
! Generate object code compatible with the standard \s-1GNU\s0 Objective-C
  runtime.  This is the default for most types of systems.
! .IP "\fB\-fnext\-runtime\fR" 4
  .IX Item "-fnext-runtime"
  Generate output compatible with the NeXT runtime.  This is the default
! for NeXT-based systems, including Darwin / macOS.  The macro
  \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
  used.
! .IP "\fB\-fno\-nil\-receivers\fR" 4
  .IX Item "-fno-nil-receivers"
! Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
  message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
  not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
  runtime to be used.  This option is only available in conjunction with
! the NeXT runtime and \s-1ABI\s0 version 0 or 1.
! .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
  .IX Item "-fobjc-abi-version=n"
! Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
  This option is currently supported only for the NeXT runtime.  In that
! case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
! properties and other Objective-C 2.0 additions.  Version 1 is the
! traditional (32\-bit) \s-1ABI\s0 with support for properties and other
! Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI.\s0  If
  nothing is specified, the default is Version 0 on 32\-bit target
  machines, and Version 2 on 64\-bit target machines.
! .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
  .IX Item "-fobjc-call-cxx-cdtors"
! For each Objective-C class, check if any of its instance variables is a
! \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
  special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
! non-trivial default constructors on any such instance variables, in order,
  and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
! is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
  special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
  all such default destructors, in reverse order.
  .Sp
  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
  methods thusly generated only operate on instance variables
! declared in the current Objective-C class, and not those inherited
! from superclasses.  It is the responsibility of the Objective-C
! runtime to invoke all such methods in an object's inheritance
  hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
  by the runtime immediately after a new object instance is allocated;
  the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
  before the runtime deallocates an object instance.
  .Sp
! As of this writing, only the NeXT runtime on Mac \s-1OS X 10.4\s0 and later has
  support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
  \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
! .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
  .IX Item "-fobjc-direct-dispatch"
  Allow fast jumps to the message dispatcher.  On Darwin this is
  accomplished via the comm page.
! .IP "\fB\-fobjc\-exceptions\fR" 4
  .IX Item "-fobjc-exceptions"
  Enable syntactic support for structured exception handling in
! Objective-C, similar to what is offered by \*(C+.  This option
! is required to use the Objective-C keywords \f(CW@try\fR,
  \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
! \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
  runtime and the NeXT runtime (but not available in conjunction with
! the NeXT runtime on Mac \s-1OS X 10.2\s0 and earlier).
! .IP "\fB\-fobjc\-gc\fR" 4
  .IX Item "-fobjc-gc"
! Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
  programs.  This option is only available with the NeXT runtime; the
! \&\s-1GNU\s0 runtime has a different garbage collection implementation that
  does not require special compiler flags.
! .IP "\fB\-fobjc\-nilcheck\fR" 4
  .IX Item "-fobjc-nilcheck"
! For the NeXT runtime with version 2 of the \s-1ABI,\s0 check for a nil
  receiver in method invocations before doing the actual method call.
  This is the default and can be disabled using
  \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
  checked for nil in this way no matter what this flag is set to.
! Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
! version of the NeXT runtime \s-1ABI,\s0 is used.
! .IP "\fB\-fobjc\-std=objc1\fR" 4
  .IX Item "-fobjc-std=objc1"
! Conform to the language syntax of Objective-C 1.0, the language
! recognized by \s-1GCC 4.0.\s0  This only affects the Objective-C additions to
! the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
! which is controlled by the separate C/\*(C+ dialect option flags.  When
! this option is used with the Objective-C or Objective\-\*(C+ compiler,
! any Objective-C syntax that is not recognized by \s-1GCC 4.0\s0 is rejected.
! This is useful if you need to make sure that your Objective-C code can
! be compiled with older versions of \s-1GCC.\s0
! .IP "\fB\-freplace\-objc\-classes\fR" 4
  .IX Item "-freplace-objc-classes"
! Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
! the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
! run time instead.  This is used in conjunction with the Fix-and-Continue
  debugging mode, where the object file in question may be recompiled and
  dynamically reloaded in the course of program execution, without the need
! to restart the program itself.  Currently, Fix-and-Continue functionality
! is only available in conjunction with the NeXT runtime on Mac \s-1OS X 10.3\s0
  and later.
! .IP "\fB\-fzero\-link\fR" 4
  .IX Item "-fzero-link"
  When compiling for the NeXT runtime, the compiler ordinarily replaces calls
! to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
  compile time) with static class references that get initialized at load time,
! which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
! suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
! to be retained.  This is useful in Zero-Link debugging mode, since it allows
  for individual class implementations to be modified during program execution.
! The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
! regardless of command-line options.
! .IP "\fB\-fno\-local\-ivars\fR" 4
  .IX Item "-fno-local-ivars"
! By default instance variables in Objective-C can be accessed as if
! they were local variables from within the methods of the class they're
  declared in.  This can lead to shadowing between instance variables
  and other variables declared either locally inside a class method or
  globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
  flag disables this behavior thus avoiding variable shadowing issues.
! .IP "\fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR]" 4
  .IX Item "-fivar-visibility=[public|protected|private|package]"
  Set the default instance variable visibility to the specified option
  so that instance variables declared outside the scope of any access
  modifier directives default to the specified visibility.
! .IP "\fB\-gen\-decls\fR" 4
  .IX Item "-gen-decls"
  Dump interface declarations for all classes seen in the source file to a
! file named \fI\fIsourcename\fI.decl\fR.
! .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
! Warn whenever an Objective-C assignment is being intercepted by the
  garbage collector.
! .IP "\fB\-Wno\-property\-assign\-default\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-property-assign-default (Objective-C and Objective- only)"
! Do not warn if a property for an Objective-C object has no assign
  semantics specified.
! .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-protocol (Objective-C and Objective- only)"
  If a class is declared to implement a protocol, a warning is issued for
  every method in the protocol that is not implemented by the class.  The
  default behavior is to issue a warning for every method not explicitly
--- 4679,4842 ----
  .Ve
  .PP
  In this example, \fB\-fgnu\-runtime\fR is an option meant only for
! Objective\-C and Objective\-C++ programs; you can use the other options with
! any language supported by GCC.
  .PP
! Note that since Objective\-C is an extension of the C language, Objective\-C
! compilations may also use options specific to the C front\-end (e.g.,
! \&\fB\-Wtraditional\fR).  Similarly, Objective\-C++ compilations may use
! C++\-specific options (e.g., \fB\-Wabi\fR).
  .PP
! Here is a list of options that are \fIonly\fR for compiling Objective\-C
! and Objective\-C++ programs:
! .IP \fB\-fconstant\-string\-class=\fR\fIclass\-name\fR 4
  .IX Item "-fconstant-string-class=class-name"
! Use \fIclass\-name\fR as the name of the class to instantiate for each
  literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
! class name is \f(CW\*(C`NXConstantString\*(C'\fR if the GNU runtime is being used, and
  \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  On
  Darwin / macOS platforms, the \fB\-fconstant\-cfstrings\fR option, if
  also present, overrides the \fB\-fconstant\-string\-class\fR setting and cause
  \&\f(CW\*(C`@"..."\*(C'\fR literals to be laid out as constant CoreFoundation strings.
! Note that \fB\-fconstant\-cfstrings\fR is an alias for the target\-specific
  \&\fB\-mconstant\-cfstrings\fR equivalent.
! .IP \fB\-fgnu\-runtime\fR 4
  .IX Item "-fgnu-runtime"
! Generate object code compatible with the standard GNU Objective\-C
  runtime.  This is the default for most types of systems.
! .IP \fB\-fnext\-runtime\fR 4
  .IX Item "-fnext-runtime"
  Generate output compatible with the NeXT runtime.  This is the default
! for NeXT\-based systems, including Darwin / macOS.  The macro
  \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
  used.
! .IP \fB\-fno\-nil\-receivers\fR 4
  .IX Item "-fno-nil-receivers"
! Assume that all Objective\-C message dispatches (\f(CW\*(C`[receiver
  message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
  not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
  runtime to be used.  This option is only available in conjunction with
! the NeXT runtime and ABI version 0 or 1.
! .IP \fB\-fobjc\-abi\-version=\fR\fIn\fR 4
  .IX Item "-fobjc-abi-version=n"
! Use version \fIn\fR of the Objective\-C ABI for the selected runtime.
  This option is currently supported only for the NeXT runtime.  In that
! case, Version 0 is the traditional (32\-bit) ABI without support for
! properties and other Objective\-C 2.0 additions.  Version 1 is the
! traditional (32\-bit) ABI with support for properties and other
! Objective\-C 2.0 additions.  Version 2 is the modern (64\-bit) ABI.  If
  nothing is specified, the default is Version 0 on 32\-bit target
  machines, and Version 2 on 64\-bit target machines.
! .IP \fB\-fobjc\-call\-cxx\-cdtors\fR 4
  .IX Item "-fobjc-call-cxx-cdtors"
! For each Objective\-C class, check if any of its instance variables is a
! C++ object with a non\-trivial default constructor.  If so, synthesize a
  special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
! non\-trivial default constructors on any such instance variables, in order,
  and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
! is a C++ object with a non\-trivial destructor, and if so, synthesize a
  special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
  all such default destructors, in reverse order.
  .Sp
  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
  methods thusly generated only operate on instance variables
! declared in the current Objective\-C class, and not those inherited
! from superclasses.  It is the responsibility of the Objective\-C
! runtime to invoke all such methods in an object\*(Aqs inheritance
  hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
  by the runtime immediately after a new object instance is allocated;
  the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
  before the runtime deallocates an object instance.
  .Sp
! As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
  support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
  \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
! .IP \fB\-fobjc\-direct\-dispatch\fR 4
  .IX Item "-fobjc-direct-dispatch"
  Allow fast jumps to the message dispatcher.  On Darwin this is
  accomplished via the comm page.
! .IP \fB\-fobjc\-exceptions\fR 4
  .IX Item "-fobjc-exceptions"
  Enable syntactic support for structured exception handling in
! Objective\-C, similar to what is offered by C++.  This option
! is required to use the Objective\-C keywords \f(CW@try\fR,
  \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
! \&\f(CW@synchronized\fR.  This option is available with both the GNU
  runtime and the NeXT runtime (but not available in conjunction with
! the NeXT runtime on Mac OS X 10.2 and earlier).
! .IP \fB\-fobjc\-gc\fR 4
  .IX Item "-fobjc-gc"
! Enable garbage collection (GC) in Objective\-C and Objective\-C++
  programs.  This option is only available with the NeXT runtime; the
! GNU runtime has a different garbage collection implementation that
  does not require special compiler flags.
! .IP \fB\-fobjc\-nilcheck\fR 4
  .IX Item "-fobjc-nilcheck"
! For the NeXT runtime with version 2 of the ABI, check for a nil
  receiver in method invocations before doing the actual method call.
  This is the default and can be disabled using
  \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
  checked for nil in this way no matter what this flag is set to.
! Currently this flag does nothing when the GNU runtime, or an older
! version of the NeXT runtime ABI, is used.
! .IP \fB\-fobjc\-std=objc1\fR 4
  .IX Item "-fobjc-std=objc1"
! Conform to the language syntax of Objective\-C 1.0, the language
! recognized by GCC 4.0.  This only affects the Objective\-C additions to
! the C/C++ language; it does not affect conformance to C/C++ standards,
! which is controlled by the separate C/C++ dialect option flags.  When
! this option is used with the Objective\-C or Objective\-C++ compiler,
! any Objective\-C syntax that is not recognized by GCC 4.0 is rejected.
! This is useful if you need to make sure that your Objective\-C code can
! be compiled with older versions of GCC.
! .IP \fB\-freplace\-objc\-classes\fR 4
  .IX Item "-freplace-objc-classes"
! Emit a special marker instructing \fBld\|(1)\fR not to statically link in
! the resulting object file, and allow \fBdyld\|(1)\fR to load it in at
! run time instead.  This is used in conjunction with the Fix\-and\-Continue
  debugging mode, where the object file in question may be recompiled and
  dynamically reloaded in the course of program execution, without the need
! to restart the program itself.  Currently, Fix\-and\-Continue functionality
! is only available in conjunction with the NeXT runtime on Mac OS X 10.3
  and later.
! .IP \fB\-fzero\-link\fR 4
  .IX Item "-fzero-link"
  When compiling for the NeXT runtime, the compiler ordinarily replaces calls
! to \f(CWobjc_getClass("...")\fR (when the name of the class is known at
  compile time) with static class references that get initialized at load time,
! which improves run\-time performance.  Specifying the \fB\-fzero\-link\fR flag
! suppresses this behavior and causes calls to \f(CWobjc_getClass("...")\fR
! to be retained.  This is useful in Zero\-Link debugging mode, since it allows
  for individual class implementations to be modified during program execution.
! The GNU runtime currently always retains calls to \f(CWobjc_get_class("...")\fR
! regardless of command\-line options.
! .IP \fB\-fno\-local\-ivars\fR 4
  .IX Item "-fno-local-ivars"
! By default instance variables in Objective\-C can be accessed as if
! they were local variables from within the methods of the class they\*(Aqre
  declared in.  This can lead to shadowing between instance variables
  and other variables declared either locally inside a class method or
  globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
  flag disables this behavior thus avoiding variable shadowing issues.
! .IP \fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 4
  .IX Item "-fivar-visibility=[public|protected|private|package]"
  Set the default instance variable visibility to the specified option
  so that instance variables declared outside the scope of any access
  modifier directives default to the specified visibility.
! .IP \fB\-gen\-decls\fR 4
  .IX Item "-gen-decls"
  Dump interface declarations for all classes seen in the source file to a
! file named \fIsourcename.decl\fR.
! .IP "\fB\-Wassign\-intercept\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wassign-intercept (Objective-C and Objective-C++ only)"
! Warn whenever an Objective\-C assignment is being intercepted by the
  garbage collector.
! .IP "\fB\-Wno\-property\-assign\-default\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-property-assign-default (Objective-C and Objective-C++ only)"
! Do not warn if a property for an Objective\-C object has no assign
  semantics specified.
! .IP "\fB\-Wno\-protocol\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-protocol (Objective-C and Objective-C++ only)"
  If a class is declared to implement a protocol, a warning is issued for
  every method in the protocol that is not implemented by the class.  The
  default behavior is to issue a warning for every method not explicitly
*************** implemented in the class, even if a meth
*** 4911,4979 ****
  from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
  methods inherited from the superclass are considered to be implemented,
  and no warning is issued for them.
! .IP "\fB\-Wobjc\-root\-class\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wobjc-root-class (Objective-C and Objective- only)"
  Warn if a class interface lacks a superclass. Most classes will inherit
  from \f(CW\*(C`NSObject\*(C'\fR (or \f(CW\*(C`Object\*(C'\fR) for example.  When declaring
  classes intended to be root classes, the warning can be suppressed by
  marking their interfaces with \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR.
! .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wselector (Objective-C and Objective- only)"
  Warn if multiple methods of different types for the same selector are
  found during compilation.  The check is performed on the list of methods
  in the final stage of compilation.  Additionally, a check is performed
! for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
  expression, and a corresponding method for that selector has been found
  during compilation.  Because these checks scan the method table only at
  the end of compilation, these warnings are not produced if the final
  stage of compilation is not reached, for example because an error is
  found during compilation, or because the \fB\-fsyntax\-only\fR option is
  being used.
! .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
  Warn if multiple methods with differing argument and/or return types are
  found for a given selector when attempting to send a message using this
  selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
  is off (which is the default behavior), the compiler omits such warnings
  if any differences found are confined to types that share the same size
  and alignment.
! .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
! Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
  undeclared selector is found.  A selector is considered undeclared if no
  method with that name has been declared before the
! \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
  \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
  an \f(CW@implementation\fR section.  This option always performs its
! checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
  while \fB\-Wselector\fR only performs its checks in the final stage of
  compilation.  This also enforces the coding style convention
  that methods and selectors must be declared before being used.
! .IP "\fB\-print\-objc\-runtime\-info\fR" 4
  .IX Item "-print-objc-runtime-info"
  Generate C header describing the largest structure that is passed by
  value, if any.
  .SS "Options to Control Diagnostic Messages Formatting"
  .IX Subsection "Options to Control Diagnostic Messages Formatting"
  Traditionally, diagnostic messages have been formatted irrespective of
! the output device's aspect (e.g. its width, ...).  You can use the
  options described below
  to control the formatting algorithm for diagnostic messages, 
  e.g. how many characters per line, how often source location
  information should be reported.  Note that some language front ends may not
  honor these options.
! .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
  .IX Item "-fmessage-length=n"
  Try to format error messages so that they fit on lines of about
! \&\fIn\fR characters.  If \fIn\fR is zero, then no line-wrapping is
  done; each error message appears on a single line.  This is the
  default for all front ends.
  .Sp
  Note \- this option also affects the display of the \fB#error\fR and
! \&\fB#warning\fR pre-processor directives, and the \fBdeprecated\fR
  function/type/variable attribute.  It does not however affect the
! \&\fBpragma \s-1GCC\s0 warning\fR and \fBpragma \s-1GCC\s0 error\fR pragmas.
! .IP "\fB\-fdiagnostics\-plain\-output\fR" 4
  .IX Item "-fdiagnostics-plain-output"
  This option requests that diagnostic output look as plain as possible, which
  may be useful when running \fBdejagnu\fR or other utilities that need to
--- 4844,4912 ----
  from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
  methods inherited from the superclass are considered to be implemented,
  and no warning is issued for them.
! .IP "\fB\-Wobjc\-root\-class\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wobjc-root-class (Objective-C and Objective-C++ only)"
  Warn if a class interface lacks a superclass. Most classes will inherit
  from \f(CW\*(C`NSObject\*(C'\fR (or \f(CW\*(C`Object\*(C'\fR) for example.  When declaring
  classes intended to be root classes, the warning can be suppressed by
  marking their interfaces with \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR.
! .IP "\fB\-Wselector\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wselector (Objective-C and Objective-C++ only)"
  Warn if multiple methods of different types for the same selector are
  found during compilation.  The check is performed on the list of methods
  in the final stage of compilation.  Additionally, a check is performed
! for each selector appearing in a \f(CW@selector(...)\fR
  expression, and a corresponding method for that selector has been found
  during compilation.  Because these checks scan the method table only at
  the end of compilation, these warnings are not produced if the final
  stage of compilation is not reached, for example because an error is
  found during compilation, or because the \fB\-fsyntax\-only\fR option is
  being used.
! .IP "\fB\-Wstrict\-selector\-match\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wstrict-selector-match (Objective-C and Objective-C++ only)"
  Warn if multiple methods with differing argument and/or return types are
  found for a given selector when attempting to send a message using this
  selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
  is off (which is the default behavior), the compiler omits such warnings
  if any differences found are confined to types that share the same size
  and alignment.
! .IP "\fB\-Wundeclared\-selector\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wundeclared-selector (Objective-C and Objective-C++ only)"
! Warn if a \f(CW@selector(...)\fR expression referring to an
  undeclared selector is found.  A selector is considered undeclared if no
  method with that name has been declared before the
! \&\f(CW@selector(...)\fR expression, either explicitly in an
  \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
  an \f(CW@implementation\fR section.  This option always performs its
! checks as soon as a \f(CW@selector(...)\fR expression is found,
  while \fB\-Wselector\fR only performs its checks in the final stage of
  compilation.  This also enforces the coding style convention
  that methods and selectors must be declared before being used.
! .IP \fB\-print\-objc\-runtime\-info\fR 4
  .IX Item "-print-objc-runtime-info"
  Generate C header describing the largest structure that is passed by
  value, if any.
  .SS "Options to Control Diagnostic Messages Formatting"
  .IX Subsection "Options to Control Diagnostic Messages Formatting"
  Traditionally, diagnostic messages have been formatted irrespective of
! the output device\*(Aqs aspect (e.g. its width, ...).  You can use the
  options described below
  to control the formatting algorithm for diagnostic messages, 
  e.g. how many characters per line, how often source location
  information should be reported.  Note that some language front ends may not
  honor these options.
! .IP \fB\-fmessage\-length=\fR\fIn\fR 4
  .IX Item "-fmessage-length=n"
  Try to format error messages so that they fit on lines of about
! \&\fIn\fR characters.  If \fIn\fR is zero, then no line\-wrapping is
  done; each error message appears on a single line.  This is the
  default for all front ends.
  .Sp
  Note \- this option also affects the display of the \fB#error\fR and
! \&\fB#warning\fR pre\-processor directives, and the \fBdeprecated\fR
  function/type/variable attribute.  It does not however affect the
! \&\fBpragma GCC warning\fR and \fBpragma GCC error\fR pragmas.
! .IP \fB\-fdiagnostics\-plain\-output\fR 4
  .IX Item "-fdiagnostics-plain-output"
  This option requests that diagnostic output look as plain as possible, which
  may be useful when running \fBdejagnu\fR or other utilities that need to
*************** options:
*** 4986,5027 ****
  \&\-fdiagnostics\-urls=never
  \&\-fdiagnostics\-path\-format=separate\-events
  \&\-fdiagnostics\-text\-art\-charset=none\fR
! In the future, if \s-1GCC\s0 changes the default appearance of its diagnostics, the
  corresponding option to disable the new behavior will be added to this list.
! .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
  .IX Item "-fdiagnostics-show-location=once"
! Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
  reporter to emit source location information \fIonce\fR; that is, in
  case the message is too long to fit on a single physical line and has to
! be wrapped, the source location won't be emitted (as prefix) again,
  over and over, in subsequent continuation lines.  This is the default
  behavior.
! .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
  .IX Item "-fdiagnostics-show-location=every-line"
! Only meaningful in line-wrapping mode.  Instructs the diagnostic
  messages reporter to emit the same source location information (as
  prefix) for physical lines that result from the process of breaking
  a message which is too long to fit on a single line.
! .IP "\fB\-fdiagnostics\-color[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
  .IX Item "-fdiagnostics-color[=WHEN]"
  .PD 0
! .IP "\fB\-fno\-diagnostics\-color\fR" 4
  .IX Item "-fno-diagnostics-color"
  .PD
! Use color in diagnostics.  \fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR,
  or \fBauto\fR.  The default depends on how the compiler has been configured,
! it can be any of the above \fI\s-1WHEN\s0\fR options or also \fBnever\fR
! if \fB\s-1GCC_COLORS\s0\fR environment variable isn't present in the environment,
  and \fBauto\fR otherwise.
! \&\fBauto\fR makes \s-1GCC\s0 use color only when the standard error is a terminal,
  and when not executing in an emacs shell.
  The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
  aliases for \fB\-fdiagnostics\-color=always\fR and
  \&\fB\-fdiagnostics\-color=never\fR, respectively.
  .Sp
! The colors are defined by the environment variable \fB\s-1GCC_COLORS\s0\fR.
! Its value is a colon-separated list of capabilities and Select Graphic
! Rendition (\s-1SGR\s0) substrings. \s-1SGR\s0 commands are interpreted by the
  terminal or terminal emulator.  (See the section in the documentation
  of your text terminal for permitted values and their meanings as
  character attributes.)  These substring values are integers in decimal
--- 4919,4960 ----
  \&\-fdiagnostics\-urls=never
  \&\-fdiagnostics\-path\-format=separate\-events
  \&\-fdiagnostics\-text\-art\-charset=none\fR
! In the future, if GCC changes the default appearance of its diagnostics, the
  corresponding option to disable the new behavior will be added to this list.
! .IP \fB\-fdiagnostics\-show\-location=once\fR 4
  .IX Item "-fdiagnostics-show-location=once"
! Only meaningful in line\-wrapping mode.  Instructs the diagnostic messages
  reporter to emit source location information \fIonce\fR; that is, in
  case the message is too long to fit on a single physical line and has to
! be wrapped, the source location won\*(Aqt be emitted (as prefix) again,
  over and over, in subsequent continuation lines.  This is the default
  behavior.
! .IP \fB\-fdiagnostics\-show\-location=every\-line\fR 4
  .IX Item "-fdiagnostics-show-location=every-line"
! Only meaningful in line\-wrapping mode.  Instructs the diagnostic
  messages reporter to emit the same source location information (as
  prefix) for physical lines that result from the process of breaking
  a message which is too long to fit on a single line.
! .IP \fB\-fdiagnostics\-color[=\fR\fIWHEN\fR\fB]\fR 4
  .IX Item "-fdiagnostics-color[=WHEN]"
  .PD 0
! .IP \fB\-fno\-diagnostics\-color\fR 4
  .IX Item "-fno-diagnostics-color"
  .PD
! Use color in diagnostics.  \fIWHEN\fR is \fBnever\fR, \fBalways\fR,
  or \fBauto\fR.  The default depends on how the compiler has been configured,
! it can be any of the above \fIWHEN\fR options or also \fBnever\fR
! if \fBGCC_COLORS\fR environment variable isn\*(Aqt present in the environment,
  and \fBauto\fR otherwise.
! \&\fBauto\fR makes GCC use color only when the standard error is a terminal,
  and when not executing in an emacs shell.
  The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
  aliases for \fB\-fdiagnostics\-color=always\fR and
  \&\fB\-fdiagnostics\-color=never\fR, respectively.
  .Sp
! The colors are defined by the environment variable \fBGCC_COLORS\fR.
! Its value is a colon\-separated list of capabilities and Select Graphic
! Rendition (SGR) substrings. SGR commands are interpreted by the
  terminal or terminal emulator.  (See the section in the documentation
  of your text terminal for permitted values and their meanings as
  character attributes.)  These substring values are integers in decimal
*************** for 88\-color and 256\-color modes foreg
*** 5042,5048 ****
  and \fB48;5;0\fR to \fB48;5;255\fR
  for 88\-color and 256\-color modes background colors.
  .Sp
! The default \fB\s-1GCC_COLORS\s0\fR is
  .Sp
  .Vb 4
  \&        error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e
--- 4975,4981 ----
  and \fB48;5;0\fR to \fB48;5;255\fR
  for 88\-color and 256\-color modes background colors.
  .Sp
! The default \fBGCC_COLORS\fR is
  .Sp
  .Vb 4
  \&        error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e
*************** The default \fB\s-1GCC_COLORS\s0\fR is
*** 5054,5202 ****
  where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
  \&\fB01;36\fR is bold cyan, \fB32\fR is green, \fB34\fR is blue,
  \&\fB01\fR is bold, and \fB31\fR is red.
! Setting \fB\s-1GCC_COLORS\s0\fR to the empty string disables colors.
  Supported capabilities are as follows.
  .RS 4
  .ie n .IP """error=""" 4
! .el .IP "\f(CWerror=\fR" 4
  .IX Item "error="
! \&\s-1SGR\s0 substring for error: markers.
  .ie n .IP """warning=""" 4
! .el .IP "\f(CWwarning=\fR" 4
  .IX Item "warning="
! \&\s-1SGR\s0 substring for warning: markers.
  .ie n .IP """note=""" 4
! .el .IP "\f(CWnote=\fR" 4
  .IX Item "note="
! \&\s-1SGR\s0 substring for note: markers.
  .ie n .IP """path=""" 4
! .el .IP "\f(CWpath=\fR" 4
  .IX Item "path="
! \&\s-1SGR\s0 substring for colorizing paths of control-flow events as printed
  via \fB\-fdiagnostics\-path\-format=\fR, such as the identifiers of
  individual events and lines indicating interprocedural calls and returns.
  .ie n .IP """range1=""" 4
! .el .IP "\f(CWrange1=\fR" 4
  .IX Item "range1="
! \&\s-1SGR\s0 substring for first additional range.
  .ie n .IP """range2=""" 4
! .el .IP "\f(CWrange2=\fR" 4
  .IX Item "range2="
! \&\s-1SGR\s0 substring for second additional range.
  .ie n .IP """locus=""" 4
! .el .IP "\f(CWlocus=\fR" 4
  .IX Item "locus="
! \&\s-1SGR\s0 substring for location information, \fBfile:line\fR or
  \&\fBfile:line:column\fR etc.
  .ie n .IP """quote=""" 4
! .el .IP "\f(CWquote=\fR" 4
  .IX Item "quote="
! \&\s-1SGR\s0 substring for information printed within quotes.
  .ie n .IP """fnname=""" 4
! .el .IP "\f(CWfnname=\fR" 4
  .IX Item "fnname="
! \&\s-1SGR\s0 substring for names of \*(C+ functions.
  .ie n .IP """targs=""" 4
! .el .IP "\f(CWtargs=\fR" 4
  .IX Item "targs="
! \&\s-1SGR\s0 substring for \*(C+ function template parameter bindings.
  .ie n .IP """fixit\-insert=""" 4
! .el .IP "\f(CWfixit\-insert=\fR" 4
  .IX Item "fixit-insert="
! \&\s-1SGR\s0 substring for fix-it hints suggesting text to
  be inserted or replaced.
  .ie n .IP """fixit\-delete=""" 4
! .el .IP "\f(CWfixit\-delete=\fR" 4
  .IX Item "fixit-delete="
! \&\s-1SGR\s0 substring for fix-it hints suggesting text to
  be deleted.
  .ie n .IP """diff\-filename=""" 4
! .el .IP "\f(CWdiff\-filename=\fR" 4
  .IX Item "diff-filename="
! \&\s-1SGR\s0 substring for filename headers within generated patches.
  .ie n .IP """diff\-hunk=""" 4
! .el .IP "\f(CWdiff\-hunk=\fR" 4
  .IX Item "diff-hunk="
! \&\s-1SGR\s0 substring for the starts of hunks within generated patches.
  .ie n .IP """diff\-delete=""" 4
! .el .IP "\f(CWdiff\-delete=\fR" 4
  .IX Item "diff-delete="
! \&\s-1SGR\s0 substring for deleted lines within generated patches.
  .ie n .IP """diff\-insert=""" 4
! .el .IP "\f(CWdiff\-insert=\fR" 4
  .IX Item "diff-insert="
! \&\s-1SGR\s0 substring for inserted lines within generated patches.
  .ie n .IP """type\-diff=""" 4
! .el .IP "\f(CWtype\-diff=\fR" 4
  .IX Item "type-diff="
! \&\s-1SGR\s0 substring for highlighting mismatching types within template
! arguments in the \*(C+ frontend.
  .ie n .IP """valid=""" 4
! .el .IP "\f(CWvalid=\fR" 4
  .IX Item "valid="
! \&\s-1SGR\s0 substring for highlighting valid elements within text art diagrams.
  .ie n .IP """invalid=""" 4
! .el .IP "\f(CWinvalid=\fR" 4
  .IX Item "invalid="
! \&\s-1SGR\s0 substring for highlighting invalid elements within text art diagrams.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdiagnostics\-urls[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
  .IX Item "-fdiagnostics-urls[=WHEN]"
  Use escape sequences to embed URLs in diagnostics.  For example, when
! \&\fB\-fdiagnostics\-show\-option\fR emits text showing the command-line
! option controlling a diagnostic, embed a \s-1URL\s0 for documentation of that
  option.
  .Sp
! \&\fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR, or \fBauto\fR.
! \&\fBauto\fR makes \s-1GCC\s0 use \s-1URL\s0 escape sequences only when the standard error
  is a terminal, and when not executing in an emacs shell or any graphical
  terminal which is known to be incompatible with this feature, see below.
  .Sp
  The default depends on how the compiler has been configured.
! It can be any of the above \fI\s-1WHEN\s0\fR options.
  .Sp
! \&\s-1GCC\s0 can also be configured (via the
! \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR configure-time option)
  so that the default is affected by environment variables.
! Under such a configuration, \s-1GCC\s0 defaults to using \fBauto\fR
! if either \fB\s-1GCC_URLS\s0\fR or \fB\s-1TERM_URLS\s0\fR environment variables are
! present and non-empty in the environment of the compiler, or \fBnever\fR
  if neither are.
  .Sp
  However, even with \fB\-fdiagnostics\-urls=always\fR the behavior is
  dependent on those environment variables:
! If \fB\s-1GCC_URLS\s0\fR is set to empty or \fBno\fR, do not embed URLs in
! diagnostics.  If set to \fBst\fR, URLs use \s-1ST\s0 escape sequences.
! If set to \fBbel\fR, the default, URLs use \s-1BEL\s0 escape sequences.
! Any other non-empty value enables the feature.
! If \fB\s-1GCC_URLS\s0\fR is not set, use \fB\s-1TERM_URLS\s0\fR as a fallback.
! Note: \s-1ST\s0 is an \s-1ANSI\s0 escape sequence, string terminator \fB\s-1ESC\s0 \e\fR,
! \&\s-1BEL\s0 is an \s-1ASCII\s0 character, CTRL-G that usually sounds like a beep.
  .Sp
! At this time \s-1GCC\s0 tries to detect also a few terminals that are known to
! not implement the \s-1URL\s0 feature, and have bugs or at least had bugs in
! some versions that are still in use, where the \s-1URL\s0 escapes are likely
  to misbehave, i.e. print garbage on the screen.
  That list is currently xfce4\-terminal, certain known to be buggy
! gnome-terminal versions, the linux console, and mingw.
  This check can be skipped with the \fB\-fdiagnostics\-urls=always\fR.
! .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
  .IX Item "-fno-diagnostics-show-option"
  By default, each diagnostic emitted includes text indicating the
! command-line option that directly controls the diagnostic (if such an
  option is known to the diagnostic machinery).  Specifying the
  \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
! .IP "\fB\-fno\-diagnostics\-show\-caret\fR" 4
  .IX Item "-fno-diagnostics-show-caret"
  By default, each diagnostic emitted includes the original source line
  and a caret \fB^\fR indicating the column.  This option suppresses this
  information.  The source line is truncated to \fIn\fR characters, if
  the \fB\-fmessage\-length=n\fR option is given.  When the output is done
  to the terminal, the width is limited to the width given by the
! \&\fB\s-1COLUMNS\s0\fR environment variable or, if not set, to the terminal width.
! .IP "\fB\-fno\-diagnostics\-show\-labels\fR" 4
  .IX Item "-fno-diagnostics-show-labels"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  diagnostics can label ranges of source code with pertinent information, such
--- 4987,5135 ----
  where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
  \&\fB01;36\fR is bold cyan, \fB32\fR is green, \fB34\fR is blue,
  \&\fB01\fR is bold, and \fB31\fR is red.
! Setting \fBGCC_COLORS\fR to the empty string disables colors.
  Supported capabilities are as follows.
  .RS 4
  .ie n .IP """error=""" 4
! .el .IP \f(CWerror=\fR 4
  .IX Item "error="
! SGR substring for error: markers.
  .ie n .IP """warning=""" 4
! .el .IP \f(CWwarning=\fR 4
  .IX Item "warning="
! SGR substring for warning: markers.
  .ie n .IP """note=""" 4
! .el .IP \f(CWnote=\fR 4
  .IX Item "note="
! SGR substring for note: markers.
  .ie n .IP """path=""" 4
! .el .IP \f(CWpath=\fR 4
  .IX Item "path="
! SGR substring for colorizing paths of control\-flow events as printed
  via \fB\-fdiagnostics\-path\-format=\fR, such as the identifiers of
  individual events and lines indicating interprocedural calls and returns.
  .ie n .IP """range1=""" 4
! .el .IP \f(CWrange1=\fR 4
  .IX Item "range1="
! SGR substring for first additional range.
  .ie n .IP """range2=""" 4
! .el .IP \f(CWrange2=\fR 4
  .IX Item "range2="
! SGR substring for second additional range.
  .ie n .IP """locus=""" 4
! .el .IP \f(CWlocus=\fR 4
  .IX Item "locus="
! SGR substring for location information, \fBfile:line\fR or
  \&\fBfile:line:column\fR etc.
  .ie n .IP """quote=""" 4
! .el .IP \f(CWquote=\fR 4
  .IX Item "quote="
! SGR substring for information printed within quotes.
  .ie n .IP """fnname=""" 4
! .el .IP \f(CWfnname=\fR 4
  .IX Item "fnname="
! SGR substring for names of C++ functions.
  .ie n .IP """targs=""" 4
! .el .IP \f(CWtargs=\fR 4
  .IX Item "targs="
! SGR substring for C++ function template parameter bindings.
  .ie n .IP """fixit\-insert=""" 4
! .el .IP \f(CWfixit\-insert=\fR 4
  .IX Item "fixit-insert="
! SGR substring for fix\-it hints suggesting text to
  be inserted or replaced.
  .ie n .IP """fixit\-delete=""" 4
! .el .IP \f(CWfixit\-delete=\fR 4
  .IX Item "fixit-delete="
! SGR substring for fix\-it hints suggesting text to
  be deleted.
  .ie n .IP """diff\-filename=""" 4
! .el .IP \f(CWdiff\-filename=\fR 4
  .IX Item "diff-filename="
! SGR substring for filename headers within generated patches.
  .ie n .IP """diff\-hunk=""" 4
! .el .IP \f(CWdiff\-hunk=\fR 4
  .IX Item "diff-hunk="
! SGR substring for the starts of hunks within generated patches.
  .ie n .IP """diff\-delete=""" 4
! .el .IP \f(CWdiff\-delete=\fR 4
  .IX Item "diff-delete="
! SGR substring for deleted lines within generated patches.
  .ie n .IP """diff\-insert=""" 4
! .el .IP \f(CWdiff\-insert=\fR 4
  .IX Item "diff-insert="
! SGR substring for inserted lines within generated patches.
  .ie n .IP """type\-diff=""" 4
! .el .IP \f(CWtype\-diff=\fR 4
  .IX Item "type-diff="
! SGR substring for highlighting mismatching types within template
! arguments in the C++ frontend.
  .ie n .IP """valid=""" 4
! .el .IP \f(CWvalid=\fR 4
  .IX Item "valid="
! SGR substring for highlighting valid elements within text art diagrams.
  .ie n .IP """invalid=""" 4
! .el .IP \f(CWinvalid=\fR 4
  .IX Item "invalid="
! SGR substring for highlighting invalid elements within text art diagrams.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdiagnostics\-urls[=\fR\fIWHEN\fR\fB]\fR 4
  .IX Item "-fdiagnostics-urls[=WHEN]"
  Use escape sequences to embed URLs in diagnostics.  For example, when
! \&\fB\-fdiagnostics\-show\-option\fR emits text showing the command\-line
! option controlling a diagnostic, embed a URL for documentation of that
  option.
  .Sp
! \&\fIWHEN\fR is \fBnever\fR, \fBalways\fR, or \fBauto\fR.
! \&\fBauto\fR makes GCC use URL escape sequences only when the standard error
  is a terminal, and when not executing in an emacs shell or any graphical
  terminal which is known to be incompatible with this feature, see below.
  .Sp
  The default depends on how the compiler has been configured.
! It can be any of the above \fIWHEN\fR options.
  .Sp
! GCC can also be configured (via the
! \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR configure\-time option)
  so that the default is affected by environment variables.
! Under such a configuration, GCC defaults to using \fBauto\fR
! if either \fBGCC_URLS\fR or \fBTERM_URLS\fR environment variables are
! present and non\-empty in the environment of the compiler, or \fBnever\fR
  if neither are.
  .Sp
  However, even with \fB\-fdiagnostics\-urls=always\fR the behavior is
  dependent on those environment variables:
! If \fBGCC_URLS\fR is set to empty or \fBno\fR, do not embed URLs in
! diagnostics.  If set to \fBst\fR, URLs use ST escape sequences.
! If set to \fBbel\fR, the default, URLs use BEL escape sequences.
! Any other non\-empty value enables the feature.
! If \fBGCC_URLS\fR is not set, use \fBTERM_URLS\fR as a fallback.
! Note: ST is an ANSI escape sequence, string terminator \fBESC \e\fR,
! BEL is an ASCII character, CTRL\-G that usually sounds like a beep.
  .Sp
! At this time GCC tries to detect also a few terminals that are known to
! not implement the URL feature, and have bugs or at least had bugs in
! some versions that are still in use, where the URL escapes are likely
  to misbehave, i.e. print garbage on the screen.
  That list is currently xfce4\-terminal, certain known to be buggy
! gnome\-terminal versions, the linux console, and mingw.
  This check can be skipped with the \fB\-fdiagnostics\-urls=always\fR.
! .IP \fB\-fno\-diagnostics\-show\-option\fR 4
  .IX Item "-fno-diagnostics-show-option"
  By default, each diagnostic emitted includes text indicating the
! command\-line option that directly controls the diagnostic (if such an
  option is known to the diagnostic machinery).  Specifying the
  \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
! .IP \fB\-fno\-diagnostics\-show\-caret\fR 4
  .IX Item "-fno-diagnostics-show-caret"
  By default, each diagnostic emitted includes the original source line
  and a caret \fB^\fR indicating the column.  This option suppresses this
  information.  The source line is truncated to \fIn\fR characters, if
  the \fB\-fmessage\-length=n\fR option is given.  When the output is done
  to the terminal, the width is limited to the width given by the
! \&\fBCOLUMNS\fR environment variable or, if not set, to the terminal width.
! .IP \fB\-fno\-diagnostics\-show\-labels\fR 4
  .IX Item "-fno-diagnostics-show-labels"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  diagnostics can label ranges of source code with pertinent information, such
*************** as the types of expressions:
*** 5210,5253 ****
  .Ve
  .Sp
  This option suppresses the printing of these labels (in the example above,
! the vertical bars and the \*(L"char *\*(R" and \*(L"long int\*(R" text).
! .IP "\fB\-fno\-diagnostics\-show\-cwe\fR" 4
  .IX Item "-fno-diagnostics-show-cwe"
  Diagnostic messages can optionally have an associated
!  \s-1CWE\s0 (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) identifier.
! \&\s-1GCC\s0 itself only provides such metadata for some of the \fB\-fanalyzer\fR
! diagnostics.  \s-1GCC\s0 plugins may also provide diagnostics with such metadata.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP "\fB\-fno\-diagnostics\-show\-rules\fR" 4
  .IX Item "-fno-diagnostics-show-rules"
  Diagnostic messages can optionally have rules associated with them, such
  as from a coding standard, or a specification.
! \&\s-1GCC\s0 itself does not do this for any of its diagnostics, but plugins may do so.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP "\fB\-fno\-diagnostics\-show\-line\-numbers\fR" 4
  .IX Item "-fno-diagnostics-show-line-numbers"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  a left margin is printed, showing line numbers.  This option suppresses this
  left margin.
! .IP "\fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR" 4
  .IX Item "-fdiagnostics-minimum-margin-width=width"
  This option controls the minimum width of the left margin printed by
  \&\fB\-fdiagnostics\-show\-line\-numbers\fR.  It defaults to 6.
! .IP "\fB\-fdiagnostics\-parseable\-fixits\fR" 4
  .IX Item "-fdiagnostics-parseable-fixits"
! Emit fix-it hints in a machine-parseable format, suitable for consumption
! by IDEs.  For each fix-it, a line will be printed after the relevant
! diagnostic, starting with the string \*(L"fix-it:\*(R".  For example:
  .Sp
  .Vb 1
  \&        fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all"
  .Ve
  .Sp
! The location is expressed as a half-open range, expressed as a count of
  bytes, starting at byte 1 for the initial column.  In the above example,
! bytes 3 through 20 of line 45 of \*(L"test.c\*(R" are to be replaced with the
  given string:
  .Sp
  .Vb 5
--- 5143,5186 ----
  .Ve
  .Sp
  This option suppresses the printing of these labels (in the example above,
! the vertical bars and the "char *" and "long int" text).
! .IP \fB\-fno\-diagnostics\-show\-cwe\fR 4
  .IX Item "-fno-diagnostics-show-cwe"
  Diagnostic messages can optionally have an associated
!  CWE (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) identifier.
! GCC itself only provides such metadata for some of the \fB\-fanalyzer\fR
! diagnostics.  GCC plugins may also provide diagnostics with such metadata.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP \fB\-fno\-diagnostics\-show\-rules\fR 4
  .IX Item "-fno-diagnostics-show-rules"
  Diagnostic messages can optionally have rules associated with them, such
  as from a coding standard, or a specification.
! GCC itself does not do this for any of its diagnostics, but plugins may do so.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP \fB\-fno\-diagnostics\-show\-line\-numbers\fR 4
  .IX Item "-fno-diagnostics-show-line-numbers"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  a left margin is printed, showing line numbers.  This option suppresses this
  left margin.
! .IP \fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR 4
  .IX Item "-fdiagnostics-minimum-margin-width=width"
  This option controls the minimum width of the left margin printed by
  \&\fB\-fdiagnostics\-show\-line\-numbers\fR.  It defaults to 6.
! .IP \fB\-fdiagnostics\-parseable\-fixits\fR 4
  .IX Item "-fdiagnostics-parseable-fixits"
! Emit fix\-it hints in a machine\-parseable format, suitable for consumption
! by IDEs.  For each fix\-it, a line will be printed after the relevant
! diagnostic, starting with the string "fix\-it:".  For example:
  .Sp
  .Vb 1
  \&        fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all"
  .Ve
  .Sp
! The location is expressed as a half\-open range, expressed as a count of
  bytes, starting at byte 1 for the initial column.  In the above example,
! bytes 3 through 20 of line 45 of "test.c" are to be replaced with the
  given string:
  .Sp
  .Vb 5
*************** given string:
*** 5258,5273 ****
  \&          gtk_widget_show_all
  .Ve
  .Sp
! The filename and replacement string escape backslash as \*(L"\e\e\*(R", tab as \*(L"\et\*(R",
! newline as \*(L"\en\*(R", double quotes as \*(L"\e\*(R"\*(L", non-printable characters as octal
! (e.g. vertical tab as \*(R"\e013").
  .Sp
  An empty replacement string indicates that the given range is to be removed.
! An empty range (e.g. \*(L"45:3\-45:3\*(R") indicates that the string is to
  be inserted at the given position.
! .IP "\fB\-fdiagnostics\-generate\-patch\fR" 4
  .IX Item "-fdiagnostics-generate-patch"
! Print fix-it hints to stderr in unified diff format, after any diagnostics
  are printed.  For example:
  .Sp
  .Vb 3
--- 5191,5206 ----
  \&          gtk_widget_show_all
  .Ve
  .Sp
! The filename and replacement string escape backslash as "\e\e", tab as "\et",
! newline as "\en", double quotes as "\e"", non\-printable characters as octal
! (e.g. vertical tab as "\e013").
  .Sp
  An empty replacement string indicates that the given range is to be removed.
! An empty range (e.g. "45:3\-45:3") indicates that the string is to
  be inserted at the given position.
! .IP \fB\-fdiagnostics\-generate\-patch\fR 4
  .IX Item "-fdiagnostics-generate-patch"
! Print fix\-it hints to stderr in unified diff format, after any diagnostics
  are printed.  For example:
  .Sp
  .Vb 3
*************** are printed.  For example:
*** 5284,5292 ****
  .Sp
  The diff may or may not be colorized, following the same rules
  as for diagnostics (see \fB\-fdiagnostics\-color\fR).
! .IP "\fB\-fdiagnostics\-show\-template\-tree\fR" 4
  .IX Item "-fdiagnostics-show-template-tree"
! In the \*(C+ frontend, when printing diagnostics showing mismatching
  template types, such as:
  .Sp
  .Vb 2
--- 5217,5225 ----
  .Sp
  The diff may or may not be colorized, following the same rules
  as for diagnostics (see \fB\-fdiagnostics\-color\fR).
! .IP \fB\-fdiagnostics\-show\-template\-tree\fR 4
  .IX Item "-fdiagnostics-show-template-tree"
! In the C++ frontend, when printing diagnostics showing mismatching
  template types, such as:
  .Sp
  .Vb 2
*************** template types, such as:
*** 5295,5301 ****
  .Ve
  .Sp
  the \fB\-fdiagnostics\-show\-template\-tree\fR flag enables printing a
! tree-like structure showing the common and differing parts of the types,
  such as:
  .Sp
  .Vb 4
--- 5228,5234 ----
  .Ve
  .Sp
  the \fB\-fdiagnostics\-show\-template\-tree\fR flag enables printing a
! tree\-like structure showing the common and differing parts of the types,
  such as:
  .Sp
  .Vb 4
*************** such as:
*** 5305,5316 ****
  \&              [double != float]>>
  .Ve
  .Sp
! The parts that differ are highlighted with color (\*(L"double\*(R" and
! \&\*(L"float\*(R" in this case).
! .IP "\fB\-fno\-elide\-type\fR" 4
  .IX Item "-fno-elide-type"
! By default when the \*(C+ frontend prints diagnostics showing mismatching
! template types, common parts of the types are printed as \*(L"[...]\*(R" to
  simplify the error message.  For example:
  .Sp
  .Vb 2
--- 5238,5249 ----
  \&              [double != float]>>
  .Ve
  .Sp
! The parts that differ are highlighted with color ("double" and
! "float" in this case).
! .IP \fB\-fno\-elide\-type\fR 4
  .IX Item "-fno-elide-type"
! By default when the C++ frontend prints diagnostics showing mismatching
! template types, common parts of the types are printed as "[...]" to
  simplify the error message.  For example:
  .Sp
  .Vb 2
*************** simplify the error message.  For example
*** 5321,5337 ****
  Specifying the \fB\-fno\-elide\-type\fR flag suppresses that behavior.
  This flag also affects the output of the
  \&\fB\-fdiagnostics\-show\-template\-tree\fR flag.
! .IP "\fB\-fdiagnostics\-path\-format=\fR\fI\s-1KIND\s0\fR" 4
  .IX Item "-fdiagnostics-path-format=KIND"
! Specify how to print paths of control-flow events for diagnostics that
  have such a path associated with them.
  .Sp
! \&\fI\s-1KIND\s0\fR is \fBnone\fR, \fBseparate-events\fR, or \fBinline-events\fR,
  the default.
  .Sp
  \&\fBnone\fR means to not print diagnostic paths.
  .Sp
! \&\fBseparate-events\fR means to print a separate \*(L"note\*(R" diagnostic for
  each event within the diagnostic.  For example:
  .Sp
  .Vb 4
--- 5254,5270 ----
  Specifying the \fB\-fno\-elide\-type\fR flag suppresses that behavior.
  This flag also affects the output of the
  \&\fB\-fdiagnostics\-show\-template\-tree\fR flag.
! .IP \fB\-fdiagnostics\-path\-format=\fR\fIKIND\fR 4
  .IX Item "-fdiagnostics-path-format=KIND"
! Specify how to print paths of control\-flow events for diagnostics that
  have such a path associated with them.
  .Sp
! \&\fIKIND\fR is \fBnone\fR, \fBseparate\-events\fR, or \fBinline\-events\fR,
  the default.
  .Sp
  \&\fBnone\fR means to not print diagnostic paths.
  .Sp
! \&\fBseparate\-events\fR means to print a separate "note" diagnostic for
  each event within the diagnostic.  For example:
  .Sp
  .Vb 4
*************** each event within the diagnostic.  For e
*** 5341,5349 ****
  \&        test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1
  .Ve
  .Sp
! \&\fBinline-events\fR means to print the events \*(L"inline\*(R" within the source
  code.  This view attempts to consolidate the events into runs of
! sufficiently-close events, printing them as labelled ranges within the source.
  .Sp
  For example, the same events as above might be printed as:
  .Sp
--- 5274,5282 ----
  \&        test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1
  .Ve
  .Sp
! \&\fBinline\-events\fR means to print the events "inline" within the source
  code.  This view attempts to consolidate the events into runs of
! sufficiently\-close events, printing them as labelled ranges within the source.
  .Sp
  For example, the same events as above might be printed as:
  .Sp
*************** For example:
*** 5417,5425 ****
  \&            |
  \&        (etc)
  .Ve
! .IP "\fB\-fdiagnostics\-show\-path\-depths\fR" 4
  .IX Item "-fdiagnostics-show-path-depths"
! This option provides additional information when printing control-flow paths
  associated with a diagnostic.
  .Sp
  If this is option is provided then the stack depth will be printed for
--- 5350,5358 ----
  \&            |
  \&        (etc)
  .Ve
! .IP \fB\-fdiagnostics\-show\-path\-depths\fR 4
  .IX Item "-fdiagnostics-show-path-depths"
! This option provides additional information when printing control\-flow paths
  associated with a diagnostic.
  .Sp
  If this is option is provided then the stack depth will be printed for
*************** If provided with \fB\-fdiagnostics\-path
*** 5428,5531 ****
  the stack depth and function declaration will be appended when printing
  each event.
  .Sp
! This is intended for use by \s-1GCC\s0 developers and plugin developers when
  debugging diagnostics that report interprocedural control flow.
! .IP "\fB\-fno\-show\-column\fR" 4
  .IX Item "-fno-show-column"
  Do not print column numbers in diagnostics.  This may be necessary if
  diagnostics are being scanned by a program that does not understand the
  column numbers, such as \fBdejagnu\fR.
! .IP "\fB\-fdiagnostics\-column\-unit=\fR\fI\s-1UNIT\s0\fR" 4
  .IX Item "-fdiagnostics-column-unit=UNIT"
  Select the units for the column number.  This affects traditional diagnostics
! (in the absence of \fB\-fno\-show\-column\fR), as well as \s-1JSON\s0 format
  diagnostics if requested.
  .Sp
! The default \fI\s-1UNIT\s0\fR, \fBdisplay\fR, considers the number of display
  columns occupied by each character.  This may be larger than the number
  of bytes required to encode the character, in the case of tab
  characters, or it may be smaller, in the case of multibyte characters.
! For example, the character \*(L"\s-1GREEK SMALL LETTER PI\s0 (U+03C0)\*(R" occupies one
! display column, and its \s-1UTF\-8\s0 encoding requires two bytes; the character
! \&\*(L"\s-1SLIGHTLY SMILING FACE\s0 (U+1F642)\*(R" occupies two display columns, and
! its \s-1UTF\-8\s0 encoding requires four bytes.
  .Sp
! Setting \fI\s-1UNIT\s0\fR to \fBbyte\fR changes the column number to the raw byte
! count in all cases, as was traditionally output by \s-1GCC\s0 prior to version 11.1.0.
! .IP "\fB\-fdiagnostics\-column\-origin=\fR\fI\s-1ORIGIN\s0\fR" 4
  .IX Item "-fdiagnostics-column-origin=ORIGIN"
  Select the origin for column numbers, i.e. the column number assigned to the
! first column.  The default value of 1 corresponds to traditional \s-1GCC\s0
! behavior and to the \s-1GNU\s0 style guide.  Some utilities may perform better with an
! origin of 0; any non-negative value may be specified.
! .IP "\fB\-fdiagnostics\-escape\-format=\fR\fI\s-1FORMAT\s0\fR" 4
  .IX Item "-fdiagnostics-escape-format=FORMAT"
! When \s-1GCC\s0 prints pertinent source lines for a diagnostic it normally attempts
  to print the source bytes directly.  However, some diagnostics relate to encoding
! issues in the source file, such as malformed \s-1UTF\-8,\s0 or issues with Unicode
! normalization.  These diagnostics are flagged so that \s-1GCC\s0 will escape bytes
! that are not printable \s-1ASCII\s0 when printing their pertinent source lines.
  .Sp
  This option controls how such bytes should be escaped.
  .Sp
! The default \fI\s-1FORMAT\s0\fR, \fBunicode\fR displays Unicode characters that
! are not printable \s-1ASCII\s0 in the form \fB<U+XXXX>\fR, and bytes that do not
! correspond to a Unicode character validly-encoded in UTF\-8\-encoded will be
! displayed as hexadecimal in the form \fB<\s-1XX\s0>\fR.
  .Sp
  For example, a source line containing the string \fBbefore\fR followed by the
! Unicode character U+03C0 (\*(L"\s-1GREEK SMALL LETTER PI\*(R",\s0 with \s-1UTF\-8\s0 encoding
! 0xCF 0x80) followed by the byte 0xBF (a stray \s-1UTF\-8\s0 trailing byte), followed by
  the string \fBafter\fR will be printed for such a diagnostic as:
  .Sp
  .Vb 1
  \&         before<U+03C0><BF>after
  .Ve
  .Sp
! Setting \fI\s-1FORMAT\s0\fR to \fBbytes\fR will display all non-printable-ASCII bytes
! in the form \fB<\s-1XX\s0>\fR, thus showing the underlying encoding of non-ASCII
  Unicode characters.  For the example above, the following will be printed:
  .Sp
  .Vb 1
  \&         before<CF><80><BF>after
  .Ve
! .IP "\fB\-fdiagnostics\-text\-art\-charset=\fR\fI\s-1CHARSET\s0\fR" 4
  .IX Item "-fdiagnostics-text-art-charset=CHARSET"
! Some diagnostics can contain \*(L"text art\*(R" diagrams: visualizations created
  from text, intended to be viewed in a monospaced font.
  .Sp
  This option selects which characters should be used for printing such
! diagrams, if any.  \fI\s-1CHARSET\s0\fR is \fBnone\fR, \fBascii\fR, \fBunicode\fR,
  or \fBemoji\fR.
  .Sp
  The \fBnone\fR value suppresses the printing of such diagrams.
! The \fBascii\fR value will ensure that such diagrams are pure \s-1ASCII\s0
! (\*(L"\s-1ASCII\s0 art\*(R").  The \fBunicode\fR value will allow for conservative use of
! unicode drawing characters (such as box-drawing characters).  The \fBemoji\fR
  value further adds the possibility of emoji in the output (such as emitting
! U+26A0 \s-1WARNING SIGN\s0 followed by U+FE0F \s-1VARIATION SELECTOR\-16\s0 to select the
  emoji variant of the character).
  .Sp
! The default is \fBemoji\fR, except when the environment variable \fB\s-1LANG\s0\fR
  is set to \fBC\fR, in which case the default is \fBascii\fR.
! .IP "\fB\-fdiagnostics\-format=\fR\fI\s-1FORMAT\s0\fR" 4
  .IX Item "-fdiagnostics-format=FORMAT"
  Select a different format for printing diagnostics.
! \&\fI\s-1FORMAT\s0\fR is \fBtext\fR, \fBsarif-stderr\fR, \fBsarif-file\fR,
! \&\fBjson\fR, \fBjson-stderr\fR, or \fBjson-file\fR.
  .Sp
  The default is \fBtext\fR.
  .Sp
! The \fBsarif-stderr\fR and \fBsarif-file\fR formats both emit
! diagnostics in \s-1SARIF\s0 Version 2.1.0 format, either to stderr, or to a file
! named \fI\fIsource\fI.sarif\fR, respectively.
  .Sp
! The \fBjson\fR format is a synonym for \fBjson-stderr\fR.
! The \fBjson-stderr\fR and \fBjson-file\fR formats are identical, apart from
! where the \s-1JSON\s0 is emitted to \- with the former, the \s-1JSON\s0 is emitted to stderr,
! whereas with \fBjson-file\fR it is written to \fI\fIsource\fI.gcc.json\fR.
  .Sp
! The emitted \s-1JSON\s0 consists of a top-level \s-1JSON\s0 array containing \s-1JSON\s0 objects
  representing the diagnostics.
  .Sp
  Diagnostics can have child diagnostics.  For example, this error and note:
--- 5361,5464 ----
  the stack depth and function declaration will be appended when printing
  each event.
  .Sp
! This is intended for use by GCC developers and plugin developers when
  debugging diagnostics that report interprocedural control flow.
! .IP \fB\-fno\-show\-column\fR 4
  .IX Item "-fno-show-column"
  Do not print column numbers in diagnostics.  This may be necessary if
  diagnostics are being scanned by a program that does not understand the
  column numbers, such as \fBdejagnu\fR.
! .IP \fB\-fdiagnostics\-column\-unit=\fR\fIUNIT\fR 4
  .IX Item "-fdiagnostics-column-unit=UNIT"
  Select the units for the column number.  This affects traditional diagnostics
! (in the absence of \fB\-fno\-show\-column\fR), as well as JSON format
  diagnostics if requested.
  .Sp
! The default \fIUNIT\fR, \fBdisplay\fR, considers the number of display
  columns occupied by each character.  This may be larger than the number
  of bytes required to encode the character, in the case of tab
  characters, or it may be smaller, in the case of multibyte characters.
! For example, the character "GREEK SMALL LETTER PI (U+03C0)" occupies one
! display column, and its UTF\-8 encoding requires two bytes; the character
! "SLIGHTLY SMILING FACE (U+1F642)" occupies two display columns, and
! its UTF\-8 encoding requires four bytes.
  .Sp
! Setting \fIUNIT\fR to \fBbyte\fR changes the column number to the raw byte
! count in all cases, as was traditionally output by GCC prior to version 11.1.0.
! .IP \fB\-fdiagnostics\-column\-origin=\fR\fIORIGIN\fR 4
  .IX Item "-fdiagnostics-column-origin=ORIGIN"
  Select the origin for column numbers, i.e. the column number assigned to the
! first column.  The default value of 1 corresponds to traditional GCC
! behavior and to the GNU style guide.  Some utilities may perform better with an
! origin of 0; any non\-negative value may be specified.
! .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4
  .IX Item "-fdiagnostics-escape-format=FORMAT"
! When GCC prints pertinent source lines for a diagnostic it normally attempts
  to print the source bytes directly.  However, some diagnostics relate to encoding
! issues in the source file, such as malformed UTF\-8, or issues with Unicode
! normalization.  These diagnostics are flagged so that GCC will escape bytes
! that are not printable ASCII when printing their pertinent source lines.
  .Sp
  This option controls how such bytes should be escaped.
  .Sp
! The default \fIFORMAT\fR, \fBunicode\fR displays Unicode characters that
! are not printable ASCII in the form \fB<U+XXXX>\fR, and bytes that do not
! correspond to a Unicode character validly\-encoded in UTF\-8\-encoded will be
! displayed as hexadecimal in the form \fB<XX>\fR.
  .Sp
  For example, a source line containing the string \fBbefore\fR followed by the
! Unicode character U+03C0 ("GREEK SMALL LETTER PI", with UTF\-8 encoding
! 0xCF 0x80) followed by the byte 0xBF (a stray UTF\-8 trailing byte), followed by
  the string \fBafter\fR will be printed for such a diagnostic as:
  .Sp
  .Vb 1
  \&         before<U+03C0><BF>after
  .Ve
  .Sp
! Setting \fIFORMAT\fR to \fBbytes\fR will display all non\-printable\-ASCII bytes
! in the form \fB<XX>\fR, thus showing the underlying encoding of non\-ASCII
  Unicode characters.  For the example above, the following will be printed:
  .Sp
  .Vb 1
  \&         before<CF><80><BF>after
  .Ve
! .IP \fB\-fdiagnostics\-text\-art\-charset=\fR\fICHARSET\fR 4
  .IX Item "-fdiagnostics-text-art-charset=CHARSET"
! Some diagnostics can contain "text art" diagrams: visualizations created
  from text, intended to be viewed in a monospaced font.
  .Sp
  This option selects which characters should be used for printing such
! diagrams, if any.  \fICHARSET\fR is \fBnone\fR, \fBascii\fR, \fBunicode\fR,
  or \fBemoji\fR.
  .Sp
  The \fBnone\fR value suppresses the printing of such diagrams.
! The \fBascii\fR value will ensure that such diagrams are pure ASCII
! ("ASCII art").  The \fBunicode\fR value will allow for conservative use of
! unicode drawing characters (such as box\-drawing characters).  The \fBemoji\fR
  value further adds the possibility of emoji in the output (such as emitting
! U+26A0 WARNING SIGN followed by U+FE0F VARIATION SELECTOR\-16 to select the
  emoji variant of the character).
  .Sp
! The default is \fBemoji\fR, except when the environment variable \fBLANG\fR
  is set to \fBC\fR, in which case the default is \fBascii\fR.
! .IP \fB\-fdiagnostics\-format=\fR\fIFORMAT\fR 4
  .IX Item "-fdiagnostics-format=FORMAT"
  Select a different format for printing diagnostics.
! \&\fIFORMAT\fR is \fBtext\fR, \fBsarif\-stderr\fR, \fBsarif\-file\fR,
! \&\fBjson\fR, \fBjson\-stderr\fR, or \fBjson\-file\fR.
  .Sp
  The default is \fBtext\fR.
  .Sp
! The \fBsarif\-stderr\fR and \fBsarif\-file\fR formats both emit
! diagnostics in SARIF Version 2.1.0 format, either to stderr, or to a file
! named \fIsource.sarif\fR, respectively.
  .Sp
! The \fBjson\fR format is a synonym for \fBjson\-stderr\fR.
! The \fBjson\-stderr\fR and \fBjson\-file\fR formats are identical, apart from
! where the JSON is emitted to \- with the former, the JSON is emitted to stderr,
! whereas with \fBjson\-file\fR it is written to \fIsource.gcc.json\fR.
  .Sp
! The emitted JSON consists of a top\-level JSON array containing JSON objects
  representing the diagnostics.
  .Sp
  Diagnostics can have child diagnostics.  For example, this error and note:
*************** Diagnostics can have child diagnostics.
*** 5541,5547 ****
  \&              |     ^
  .Ve
  .Sp
! might be printed in \s-1JSON\s0 form (after formatting) like this:
  .Sp
  .Vb 10
  \&        [
--- 5474,5480 ----
  \&              |     ^
  .Ve
  .Sp
! might be printed in JSON form (after formatting) like this:
  .Sp
  .Vb 10
  \&        [
*************** might be printed in \s-1JSON\s0 form (af
*** 5595,5601 ****
  where the \f(CW\*(C`note\*(C'\fR is a child of the \f(CW\*(C`warning\*(C'\fR.
  .Sp
  A diagnostic has a \f(CW\*(C`kind\*(C'\fR.  If this is \f(CW\*(C`warning\*(C'\fR, then there is
! an \f(CW\*(C`option\*(C'\fR key describing the command-line option controlling the
  warning.
  .Sp
  A diagnostic can contain zero or more locations.  Each location has an
--- 5528,5534 ----
  where the \f(CW\*(C`note\*(C'\fR is a child of the \f(CW\*(C`warning\*(C'\fR.
  .Sp
  A diagnostic has a \f(CW\*(C`kind\*(C'\fR.  If this is \f(CW\*(C`warning\*(C'\fR, then there is
! an \f(CW\*(C`option\*(C'\fR key describing the command\-line option controlling the
  warning.
  .Sp
  A diagnostic can contain zero or more locations.  Each location has an
*************** optional \f(CW\*(C`label\*(C'\fR string
*** 5604,5615 ****
  A position is described by a \f(CW\*(C`file\*(C'\fR name, a \f(CW\*(C`line\*(C'\fR number, and
  three numbers indicating a column position:
  .RS 4
! .IP "*" 4
  \&\f(CW\*(C`display\-column\*(C'\fR counts display columns, accounting for tabs and
  multibyte characters.
! .IP "*" 4
  \&\f(CW\*(C`byte\-column\*(C'\fR counts raw bytes.
! .IP "*" 4
  \&\f(CW\*(C`column\*(C'\fR is equal to one of
  the previous two, as dictated by the \fB\-fdiagnostics\-column\-unit\fR
  option.
--- 5537,5548 ----
  A position is described by a \f(CW\*(C`file\*(C'\fR name, a \f(CW\*(C`line\*(C'\fR number, and
  three numbers indicating a column position:
  .RS 4
! .IP * 4
  \&\f(CW\*(C`display\-column\*(C'\fR counts display columns, accounting for tabs and
  multibyte characters.
! .IP * 4
  \&\f(CW\*(C`byte\-column\*(C'\fR counts raw bytes.
! .IP * 4
  \&\f(CW\*(C`column\*(C'\fR is equal to one of
  the previous two, as dictated by the \fB\-fdiagnostics\-column\-unit\fR
  option.
*************** option.
*** 5619,5625 ****
  All three columns are relative to the origin specified by
  \&\fB\-fdiagnostics\-column\-origin\fR, which is typically equal to 1 but may
  be set, for instance, to 0 for compatibility with other utilities that
! number columns from 0.  The column origin is recorded in the \s-1JSON\s0 output in
  the \f(CW\*(C`column\-origin\*(C'\fR tag.  In the remaining examples below, the extra
  column number outputs have been omitted for brevity.
  .Sp
--- 5552,5558 ----
  All three columns are relative to the origin specified by
  \&\fB\-fdiagnostics\-column\-origin\fR, which is typically equal to 1 but may
  be set, for instance, to 0 for compatibility with other utilities that
! number columns from 0.  The column origin is recorded in the JSON output in
  the \f(CW\*(C`column\-origin\*(C'\fR tag.  In the remaining examples below, the extra
  column number outputs have been omitted for brevity.
  .Sp
*************** For example, this error:
*** 5635,5643 ****
  \&              |          S {aka struct s}
  .Ve
  .Sp
! has three locations.  Its primary location is at the \*(L"+\*(R" token at column
! 23.  It has two secondary locations, describing the left and right-hand sides
! of the expression, which have labels.  It might be printed in \s-1JSON\s0 form as:
  .Sp
  .Vb 10
  \&            {
--- 5568,5576 ----
  \&              |          S {aka struct s}
  .Ve
  .Sp
! has three locations.  Its primary location is at the "+" token at column
! 23.  It has two secondary locations, describing the left and right\-hand sides
! of the expression, which have labels.  It might be printed in JSON form as:
  .Sp
  .Vb 10
  \&            {
*************** of the expression, which have labels.  I
*** 5673,5682 ****
  \&            }
  .Ve
  .Sp
! If a diagnostic contains fix-it hints, it has a \f(CW\*(C`fixits\*(C'\fR array,
! consisting of half-open intervals, similar to the output of
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  For example, this diagnostic
! with a replacement fix-it hint:
  .Sp
  .Vb 5
  \&        demo.c:8:15: error: \*(Aqstruct s\*(Aq has no member named \*(Aqcolour\*(Aq; did you
--- 5606,5615 ----
  \&            }
  .Ve
  .Sp
! If a diagnostic contains fix\-it hints, it has a \f(CW\*(C`fixits\*(C'\fR array,
! consisting of half\-open intervals, similar to the output of
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  For example, this diagnostic
! with a replacement fix\-it hint:
  .Sp
  .Vb 5
  \&        demo.c:8:15: error: \*(Aqstruct s\*(Aq has no member named \*(Aqcolour\*(Aq; did you
*************** with a replacement fix-it hint:
*** 5686,5692 ****
  \&              |               color
  .Ve
  .Sp
! might be printed in \s-1JSON\s0 form as:
  .Sp
  .Vb 10
  \&            {
--- 5619,5625 ----
  \&              |               color
  .Ve
  .Sp
! might be printed in JSON form as:
  .Sp
  .Vb 10
  \&            {
*************** might be printed in \s-1JSON\s0 form as:
*** 5726,5737 ****
  \&            }
  .Ve
  .Sp
! where the fix-it hint suggests replacing the text from \f(CW\*(C`start\*(C'\fR up
! to but not including \f(CW\*(C`next\*(C'\fR with \f(CW\*(C`string\*(C'\fR's value.  Deletions
  are expressed via an empty value for \f(CW\*(C`string\*(C'\fR, insertions by
  having \f(CW\*(C`start\*(C'\fR equal \f(CW\*(C`next\*(C'\fR.
  .Sp
! If the diagnostic has a path of control-flow events associated with it,
  it has a \f(CW\*(C`path\*(C'\fR array of objects representing the events.  Each
  event object has a \f(CW\*(C`description\*(C'\fR string, a \f(CW\*(C`location\*(C'\fR object,
  along with a \f(CW\*(C`function\*(C'\fR string and a \f(CW\*(C`depth\*(C'\fR number for
--- 5659,5670 ----
  \&            }
  .Ve
  .Sp
! where the fix\-it hint suggests replacing the text from \f(CW\*(C`start\*(C'\fR up
! to but not including \f(CW\*(C`next\*(C'\fR with \f(CW\*(C`string\*(C'\fR\*(Aqs value.  Deletions
  are expressed via an empty value for \f(CW\*(C`string\*(C'\fR, insertions by
  having \f(CW\*(C`start\*(C'\fR equal \f(CW\*(C`next\*(C'\fR.
  .Sp
! If the diagnostic has a path of control\-flow events associated with it,
  it has a \f(CW\*(C`path\*(C'\fR array of objects representing the events.  Each
  event object has a \f(CW\*(C`description\*(C'\fR string, a \f(CW\*(C`location\*(C'\fR object,
  along with a \f(CW\*(C`function\*(C'\fR string and a \f(CW\*(C`depth\*(C'\fR number for
*************** stack depth relative to some baseline: t
*** 5741,5747 ****
  within the stack.
  .Sp
  For example, the intraprocedural example shown for
! \&\fB\-fdiagnostics\-path\-format=\fR might have this \s-1JSON\s0 for its path:
  .Sp
  .Vb 10
  \&            "path": [
--- 5674,5680 ----
  within the stack.
  .Sp
  For example, the intraprocedural example shown for
! \&\fB\-fdiagnostics\-path\-format=\fR might have this JSON for its path:
  .Sp
  .Vb 10
  \&            "path": [
*************** For example, the intraprocedural example
*** 5779,5829 ****
  .Ve
  .Sp
  Diagnostics have a boolean attribute \f(CW\*(C`escape\-source\*(C'\fR, hinting whether
! non-ASCII bytes should be escaped when printing the pertinent lines of
  source code (\f(CW\*(C`true\*(C'\fR for diagnostics involving source encoding issues).
  .RE
! .IP "\fB\-fno\-diagnostics\-json\-formatting\fR" 4
  .IX Item "-fno-diagnostics-json-formatting"
! By default, when \s-1JSON\s0 is emitted for diagnostics (via
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR,
  \&\fB\-fdiagnostics\-format=sarif\-file\fR,
  \&\fB\-fdiagnostics\-format=json\fR,
  \&\fB\-fdiagnostics\-format=json\-stderr\fR,
  \&\fB\-fdiagnostics\-format=json\-file\fR),
! \&\s-1GCC\s0 will add newlines and indentation to visually emphasize the
! hierarchical structure of the \s-1JSON.\s0
  .Sp
  Use \fB\-fno\-diagnostics\-json\-formatting\fR to suppress this whitespace.
  It must be passed before the option it is to affect.
  .Sp
  This is intended for compatibility with tools that do not expect the output
! to contain newlines, such as that emitted by older \s-1GCC\s0 releases.
  .SS "Options to Request or Suppress Warnings"
  .IX Subsection "Options to Request or Suppress Warnings"
  Warnings are diagnostic messages that report constructions that
  are not inherently erroneous but that are risky or suggest there
  may have been an error.
  .PP
! The following language-independent options do not enable specific
! warnings but control the kinds of diagnostics produced by \s-1GCC.\s0
! .IP "\fB\-fsyntax\-only\fR" 4
  .IX Item "-fsyntax-only"
! Check the code for syntax errors, but don't do anything beyond that.
! .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
! \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
  code.  If \fIn\fR is 0 (the default), there is no limit on the number
  of error messages produced.  If \fB\-Wfatal\-errors\fR is also
  specified, then \fB\-Wfatal\-errors\fR takes precedence over this
  option.
! .IP "\fB\-w\fR" 4
  .IX Item "-w"
  Inhibit all warning messages.
! .IP "\fB\-Werror\fR" 4
  .IX Item "-Werror"
  Make all warnings into errors.
! .IP "\fB\-Werror=\fR" 4
  .IX Item "-Werror="
  Make the specified warning into an error.  The specifier for a warning
  is appended; for example \fB\-Werror=switch\fR turns the warnings
--- 5712,5762 ----
  .Ve
  .Sp
  Diagnostics have a boolean attribute \f(CW\*(C`escape\-source\*(C'\fR, hinting whether
! non\-ASCII bytes should be escaped when printing the pertinent lines of
  source code (\f(CW\*(C`true\*(C'\fR for diagnostics involving source encoding issues).
  .RE
! .IP \fB\-fno\-diagnostics\-json\-formatting\fR 4
  .IX Item "-fno-diagnostics-json-formatting"
! By default, when JSON is emitted for diagnostics (via
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR,
  \&\fB\-fdiagnostics\-format=sarif\-file\fR,
  \&\fB\-fdiagnostics\-format=json\fR,
  \&\fB\-fdiagnostics\-format=json\-stderr\fR,
  \&\fB\-fdiagnostics\-format=json\-file\fR),
! GCC will add newlines and indentation to visually emphasize the
! hierarchical structure of the JSON.
  .Sp
  Use \fB\-fno\-diagnostics\-json\-formatting\fR to suppress this whitespace.
  It must be passed before the option it is to affect.
  .Sp
  This is intended for compatibility with tools that do not expect the output
! to contain newlines, such as that emitted by older GCC releases.
  .SS "Options to Request or Suppress Warnings"
  .IX Subsection "Options to Request or Suppress Warnings"
  Warnings are diagnostic messages that report constructions that
  are not inherently erroneous but that are risky or suggest there
  may have been an error.
  .PP
! The following language\-independent options do not enable specific
! warnings but control the kinds of diagnostics produced by GCC.
! .IP \fB\-fsyntax\-only\fR 4
  .IX Item "-fsyntax-only"
! Check the code for syntax errors, but don\*(Aqt do anything beyond that.
! .IP \fB\-fmax\-errors=\fR\fIn\fR 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
! GCC bails out rather than attempting to continue processing the source
  code.  If \fIn\fR is 0 (the default), there is no limit on the number
  of error messages produced.  If \fB\-Wfatal\-errors\fR is also
  specified, then \fB\-Wfatal\-errors\fR takes precedence over this
  option.
! .IP \fB\-w\fR 4
  .IX Item "-w"
  Inhibit all warning messages.
! .IP \fB\-Werror\fR 4
  .IX Item "-Werror"
  Make all warnings into errors.
! .IP \fB\-Werror=\fR 4
  .IX Item "-Werror="
  Make the specified warning into an error.  The specifier for a warning
  is appended; for example \fB\-Werror=switch\fR turns the warnings
*************** option that controls the warning.  That
*** 5842,5848 ****
  Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
  \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
  imply anything.
! .IP "\fB\-Wfatal\-errors\fR" 4
  .IX Item "-Wfatal-errors"
  This option causes the compiler to abort compilation on the first error
  occurred rather than trying to keep going and printing further error
--- 5775,5781 ----
  Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
  \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
  imply anything.
! .IP \fB\-Wfatal\-errors\fR 4
  .IX Item "-Wfatal-errors"
  This option causes the compiler to abort compilation on the first error
  occurred rather than trying to keep going and printing further error
*************** implicit declarations.  Each of these sp
*** 5854,5874 ****
  has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
  example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
  two forms, whichever is not the default.  For further
! language-specific options also refer to \fB\*(C+ Dialect Options\fR and
! \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
  Additional warnings can be produced by enabling the static analyzer;
  .PP
  Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
  options, such as \fB\-Wunused\fR, which may turn on further options,
  such as \fB\-Wunused\-value\fR. The combined effect of positive and
  negative forms is that more specific options have priority over less
! specific ones, independently of their position in the command-line. For
  options of the same specificity, the last one takes effect. Options
  enabled or disabled via pragmas take effect
! as if they appeared at the end of the command-line.
  .PP
  When an unrecognized warning option is requested (e.g.,
! \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 emits a diagnostic stating
  that the option is not recognized.  However, if the \fB\-Wno\-\fR form
  is used, the behavior is slightly different: no diagnostic is
  produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
--- 5787,5807 ----
  has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
  example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
  two forms, whichever is not the default.  For further
! language\-specific options also refer to \fBC++ Dialect Options\fR and
! \&\fBObjective\-C and Objective\-C++ Dialect Options\fR.
  Additional warnings can be produced by enabling the static analyzer;
  .PP
  Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
  options, such as \fB\-Wunused\fR, which may turn on further options,
  such as \fB\-Wunused\-value\fR. The combined effect of positive and
  negative forms is that more specific options have priority over less
! specific ones, independently of their position in the command\-line. For
  options of the same specificity, the last one takes effect. Options
  enabled or disabled via pragmas take effect
! as if they appeared at the end of the command\-line.
  .PP
  When an unrecognized warning option is requested (e.g.,
! \&\fB\-Wunknown\-warning\fR), GCC emits a diagnostic stating
  that the option is not recognized.  However, if the \fB\-Wno\-\fR form
  is used, the behavior is slightly different: no diagnostic is
  produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
*************** warns that an unrecognized option is pre
*** 5878,5932 ****
  .PP
  The effectiveness of some warnings depends on optimizations also being
  enabled. For example \fB\-Wsuggest\-final\-types\fR is more effective
! with link-time optimization and some instances of other warnings may
  not be issued at all unless optimization is enabled.  While optimization
  in general improves the efficacy of control and data flow sensitive
  warnings, in some cases it may also cause false positives.
! .IP "\fB\-Wpedantic\fR" 4
  .IX Item "-Wpedantic"
  .PD 0
! .IP "\fB\-pedantic\fR" 4
  .IX Item "-pedantic"
  .PD
! Issue all the warnings demanded by strict \s-1ISO C\s0 and \s-1ISO \*(C+\s0;
  diagnose all programs that use forbidden extensions, and some other
! programs that do not follow \s-1ISO C\s0 and \s-1ISO \*(C+.\s0  This follows the version
! of the \s-1ISO C\s0 or \*(C+ standard specified by any \fB\-std\fR option used.
  .Sp
! Valid \s-1ISO C\s0 and \s-1ISO \*(C+\s0 programs should compile properly with or without
  this option (though a rare few require \fB\-ansi\fR or a
  \&\fB\-std\fR option specifying the version of the standard).  However,
! without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
  features are supported as well.  With this option, they are diagnosed
  (or rejected with \fB\-pedantic\-errors\fR).
  .Sp
  \&\fB\-Wpedantic\fR does not cause warning messages for use of the
  alternate keywords whose names begin and end with \fB_\|_\fR.  This alternate
! format can also be used to disable warnings for non-ISO \fB_\|_intN\fR types,
  i.e. \fB_\|_intN_\|_\fR.
  Pedantic warnings are also disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
  these escape routes; application programs should avoid them.
  .Sp
! Some warnings about non-conforming programs are controlled by options
  other than \fB\-Wpedantic\fR; in many cases they are implied by
  \&\fB\-Wpedantic\fR but can be disabled separately by their specific
  option, e.g. \fB\-Wpedantic \-Wno\-pointer\-sign\fR.
  .Sp
! Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
  extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
! corresponding \fIbase standard\fR, the version of \s-1ISO C\s0 on which the \s-1GNU\s0
  extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
  where they are required by the base standard.  (It does not make sense
! for such warnings to be given only for features not in the specified \s-1GNU
! C\s0 dialect, since by definition the \s-1GNU\s0 dialects of C include all
  features the compiler supports with the given option, and there would be
  nothing to warn about.)
! .IP "\fB\-pedantic\-errors\fR" 4
  .IX Item "-pedantic-errors"
  Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
  requires a diagnostic, in some cases where there is undefined behavior
! at compile-time and in some other cases that do not prevent compilation
  of programs that are valid according to the standard. This is not
  equivalent to \fB\-Werror=pedantic\fR: the latter option is unlikely to be
  useful, as it only makes errors of the diagnostics that are controlled by
--- 5811,5865 ----
  .PP
  The effectiveness of some warnings depends on optimizations also being
  enabled. For example \fB\-Wsuggest\-final\-types\fR is more effective
! with link\-time optimization and some instances of other warnings may
  not be issued at all unless optimization is enabled.  While optimization
  in general improves the efficacy of control and data flow sensitive
  warnings, in some cases it may also cause false positives.
! .IP \fB\-Wpedantic\fR 4
  .IX Item "-Wpedantic"
  .PD 0
! .IP \fB\-pedantic\fR 4
  .IX Item "-pedantic"
  .PD
! Issue all the warnings demanded by strict ISO C and ISO C++;
  diagnose all programs that use forbidden extensions, and some other
! programs that do not follow ISO C and ISO C++.  This follows the version
! of the ISO C or C++ standard specified by any \fB\-std\fR option used.
  .Sp
! Valid ISO C and ISO C++ programs should compile properly with or without
  this option (though a rare few require \fB\-ansi\fR or a
  \&\fB\-std\fR option specifying the version of the standard).  However,
! without this option, certain GNU extensions and traditional C and C++
  features are supported as well.  With this option, they are diagnosed
  (or rejected with \fB\-pedantic\-errors\fR).
  .Sp
  \&\fB\-Wpedantic\fR does not cause warning messages for use of the
  alternate keywords whose names begin and end with \fB_\|_\fR.  This alternate
! format can also be used to disable warnings for non\-ISO \fB_\|_intN\fR types,
  i.e. \fB_\|_intN_\|_\fR.
  Pedantic warnings are also disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
  these escape routes; application programs should avoid them.
  .Sp
! Some warnings about non\-conforming programs are controlled by options
  other than \fB\-Wpedantic\fR; in many cases they are implied by
  \&\fB\-Wpedantic\fR but can be disabled separately by their specific
  option, e.g. \fB\-Wpedantic \-Wno\-pointer\-sign\fR.
  .Sp
! Where the standard specified with \fB\-std\fR represents a GNU
  extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
! corresponding \fIbase standard\fR, the version of ISO C on which the GNU
  extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
  where they are required by the base standard.  (It does not make sense
! for such warnings to be given only for features not in the specified GNU
! C dialect, since by definition the GNU dialects of C include all
  features the compiler supports with the given option, and there would be
  nothing to warn about.)
! .IP \fB\-pedantic\-errors\fR 4
  .IX Item "-pedantic-errors"
  Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
  requires a diagnostic, in some cases where there is undefined behavior
! at compile\-time and in some other cases that do not prevent compilation
  of programs that are valid according to the standard. This is not
  equivalent to \fB\-Werror=pedantic\fR: the latter option is unlikely to be
  useful, as it only makes errors of the diagnostics that are controlled by
*************** useful, as it only makes errors of the d
*** 5934,5940 ****
  are always enabled or controlled by options other than \fB\-Wpedantic\fR.
  .Sp
  If you want the required diagnostics that are warnings by default to
! be errors instead, but don't also want to enable the \fB\-Wpedantic\fR
  diagnostics, you can specify \fB\-pedantic\-errors \-Wno\-pedantic\fR
  (or \fB\-pedantic\-errors \-Wno\-error=pedantic\fR to enable them but
  only as warnings).
--- 5867,5873 ----
  are always enabled or controlled by options other than \fB\-Wpedantic\fR.
  .Sp
  If you want the required diagnostics that are warnings by default to
! be errors instead, but don\*(Aqt also want to enable the \fB\-Wpedantic\fR
  diagnostics, you can specify \fB\-pedantic\-errors \-Wno\-pedantic\fR
  (or \fB\-pedantic\-errors \-Wno\-error=pedantic\fR to enable them but
  only as warnings).
*************** Some required diagnostics are errors by
*** 5943,6017 ****
  warnings using \fB\-fpermissive\fR or their specific warning option,
  e.g. \fB\-Wno\-error=narrowing\fR.
  .Sp
! Some diagnostics for non-ISO practices are controlled by specific
  warning options other than \fB\-Wpedantic\fR, but are also made
  errors by \fB\-pedantic\-errors\fR.  For instance:
  .Sp
  \&\fB\-Wattributes\fR (for standard attributes)
! \&\fB\-Wchanges\-meaning\fR (\*(C+)
! \&\fB\-Wcomma\-subscript\fR (\*(C+23 or later)
  \&\fB\-Wdeclaration\-after\-statement\fR (C90 or earlier)
! \&\fB\-Welaborated\-enum\-base\fR (\*(C+11 or later)
  \&\fB\-Wimplicit\-int\fR (C99 or later)
  \&\fB\-Wimplicit\-function\-declaration\fR (C99 or later)
  \&\fB\-Wincompatible\-pointer\-types
  \&\-Wint\-conversion
  \&\-Wlong\-long\fR (C90 or earlier)
  \&\fB\-Wmain
! \&\-Wnarrowing\fR (\*(C+11 or later)
  \&\fB\-Wpointer\-arith
  \&\-Wpointer\-sign
  \&\-Wincompatible\-pointer\-types
! \&\-Wregister\fR (\*(C+17 or later)
  \&\fB\-Wvla\fR (C90 or earlier)
! \&\fB\-Wwrite\-strings\fR (\*(C+11 or later)\fB \fR
! .IP "\fB\-fpermissive\fR" 4
  .IX Item "-fpermissive"
  Downgrade some required diagnostics about nonconformant code from
  errors to warnings.  Thus, using \fB\-fpermissive\fR allows some
! nonconforming code to compile.  Some \*(C+ diagnostics are controlled
! only by this flag, but it also downgrades some C and \*(C+ diagnostics
  that have their own flag:
  .Sp
! \&\fB\-Wdeclaration\-missing\-parameter\-type\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective-C only)
! \&\fB\-Wincompatible\-pointer\-types\fR (C and Objective-C only)
! \&\fB\-Wint\-conversion\fR (C and Objective-C only)
! \&\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wreturn\-mismatch\fR (C and Objective-C only)\fB \fR
  .Sp
  The \fB\-fpermissive\fR option is the default for historic C language
  modes (\fB\-std=c89\fR, \fB\-std=gnu89\fR, \fB\-std=c90\fR,
  \&\fB\-std=gnu90\fR).
! .IP "\fB\-Wall\fR" 4
  .IX Item "-Wall"
  This enables all the warnings about constructions that some users
  consider questionable, and that are easy to avoid (or modify to
  prevent the warning), even in conjunction with macros.  This also
! enables some language-specific warnings described in \fB\*(C+ Dialect
! Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
  .Sp
  \&\fB\-Wall\fR turns on the following warning flags:
  .Sp
  \&\fB\-Waddress
! \&\-Waligned\-new\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)
  \&\fB\-Warray\-compare
  \&\-Warray\-parameter=2
  \&\-Wbool\-compare
  \&\-Wbool\-operation
  \&\-Wc++11\-compat  \-Wc++14\-compat  \-Wc++17compat  \-Wc++20compat
! \&\-Wcatch\-value\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wchar\-subscripts
! \&\-Wclass\-memaccess\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wcomment
  \&\-Wdangling\-else
  \&\-Wdangling\-pointer=2
! \&\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wduplicate\-decl\-specifier\fR (C and Objective-C only)
! \&\fB\-Wenum\-compare\fR (in C/ObjC; this is on by default in \*(C+)
! \&\fB\-Wenum\-int\-mismatch\fR (C and Objective-C only)
  \&\fB\-Wformat=1
  \&\-Wformat\-contains\-nul
  \&\-Wformat\-diag
--- 5876,5950 ----
  warnings using \fB\-fpermissive\fR or their specific warning option,
  e.g. \fB\-Wno\-error=narrowing\fR.
  .Sp
! Some diagnostics for non\-ISO practices are controlled by specific
  warning options other than \fB\-Wpedantic\fR, but are also made
  errors by \fB\-pedantic\-errors\fR.  For instance:
  .Sp
  \&\fB\-Wattributes\fR (for standard attributes)
! \&\fB\-Wchanges\-meaning\fR (C++)
! \&\fB\-Wcomma\-subscript\fR (C++23 or later)
  \&\fB\-Wdeclaration\-after\-statement\fR (C90 or earlier)
! \&\fB\-Welaborated\-enum\-base\fR (C++11 or later)
  \&\fB\-Wimplicit\-int\fR (C99 or later)
  \&\fB\-Wimplicit\-function\-declaration\fR (C99 or later)
  \&\fB\-Wincompatible\-pointer\-types
  \&\-Wint\-conversion
  \&\-Wlong\-long\fR (C90 or earlier)
  \&\fB\-Wmain
! \&\-Wnarrowing\fR (C++11 or later)
  \&\fB\-Wpointer\-arith
  \&\-Wpointer\-sign
  \&\-Wincompatible\-pointer\-types
! \&\-Wregister\fR (C++17 or later)
  \&\fB\-Wvla\fR (C90 or earlier)
! \&\fB\-Wwrite\-strings\fR (C++11 or later)\fB \fR
! .IP \fB\-fpermissive\fR 4
  .IX Item "-fpermissive"
  Downgrade some required diagnostics about nonconformant code from
  errors to warnings.  Thus, using \fB\-fpermissive\fR allows some
! nonconforming code to compile.  Some C++ diagnostics are controlled
! only by this flag, but it also downgrades some C and C++ diagnostics
  that have their own flag:
  .Sp
! \&\fB\-Wdeclaration\-missing\-parameter\-type\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective\-C only)
! \&\fB\-Wincompatible\-pointer\-types\fR (C and Objective\-C only)
! \&\fB\-Wint\-conversion\fR (C and Objective\-C only)
! \&\fB\-Wnarrowing\fR (C++ and Objective\-C++ only)
! \&\fB\-Wreturn\-mismatch\fR (C and Objective\-C only)\fB \fR
  .Sp
  The \fB\-fpermissive\fR option is the default for historic C language
  modes (\fB\-std=c89\fR, \fB\-std=gnu89\fR, \fB\-std=c90\fR,
  \&\fB\-std=gnu90\fR).
! .IP \fB\-Wall\fR 4
  .IX Item "-Wall"
  This enables all the warnings about constructions that some users
  consider questionable, and that are easy to avoid (or modify to
  prevent the warning), even in conjunction with macros.  This also
! enables some language\-specific warnings described in \fBC++ Dialect
! Options\fR and \fBObjective\-C and Objective\-C++ Dialect Options\fR.
  .Sp
  \&\fB\-Wall\fR turns on the following warning flags:
  .Sp
  \&\fB\-Waddress
! \&\-Waligned\-new\fR (C++ and Objective\-C++ only)
  \&\fB\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)
  \&\fB\-Warray\-compare
  \&\-Warray\-parameter=2
  \&\-Wbool\-compare
  \&\-Wbool\-operation
  \&\-Wc++11\-compat  \-Wc++14\-compat  \-Wc++17compat  \-Wc++20compat
! \&\-Wcatch\-value\fR (C++ and Objective\-C++ only)
  \&\fB\-Wchar\-subscripts
! \&\-Wclass\-memaccess\fR (C++ and Objective\-C++ only)
  \&\fB\-Wcomment
  \&\-Wdangling\-else
  \&\-Wdangling\-pointer=2
! \&\-Wdelete\-non\-virtual\-dtor\fR (C++ and Objective\-C++ only)
! \&\fB\-Wduplicate\-decl\-specifier\fR (C and Objective\-C only)
! \&\fB\-Wenum\-compare\fR (in C/ObjC; this is on by default in C++)
! \&\fB\-Wenum\-int\-mismatch\fR (C and Objective\-C only)
  \&\fB\-Wformat=1
  \&\-Wformat\-contains\-nul
  \&\-Wformat\-diag
*************** Options\fR and \fBObjective-C and Object
*** 6020,6058 ****
  \&\-Wformat\-truncation=1
  \&\-Wformat\-zero\-length
  \&\-Wframe\-address
! \&\-Wimplicit\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective-C only)
  \&\fB\-Winfinite\-recursion
! \&\-Winit\-self\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wint\-in\-bool\-context
  \&\-Wlogical\-not\-parentheses
  \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)
  \&\fB\-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size
  \&\-Wmemset\-transposed\-args
! \&\-Wmisleading\-indentation\fR (only for C/\*(C+)
  \&\fB\-Wmismatched\-dealloc
! \&\-Wmismatched\-new\-delete\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wmissing\-attributes
  \&\-Wmissing\-braces\fR (only for C/ObjC)
  \&\fB\-Wmultistatement\-macros
! \&\-Wnarrowing\fR  (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wnonnull
  \&\-Wnonnull\-compare
! \&\-Wopenmp\-simd\fR (C and \*(C+ only)
! \&\fB\-Woverloaded\-virtual=1\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wpacked\-not\-aligned
  \&\-Wparentheses
! \&\-Wpessimizing\-move\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wpointer\-sign\fR (only for C/ObjC)
! \&\fB\-Wrange\-loop\-construct\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wrestrict
  \&\-Wreturn\-type
! \&\-Wself\-move\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wsequence\-point
! \&\-Wsign\-compare\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div
  \&\-Wsizeof\-pointer\-memaccess
--- 5953,5991 ----
  \&\-Wformat\-truncation=1
  \&\-Wformat\-zero\-length
  \&\-Wframe\-address
! \&\-Wimplicit\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective\-C only)
  \&\fB\-Winfinite\-recursion
! \&\-Winit\-self\fR (C++ and Objective\-C++ only)
  \&\fB\-Wint\-in\-bool\-context
  \&\-Wlogical\-not\-parentheses
  \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)
  \&\fB\-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size
  \&\-Wmemset\-transposed\-args
! \&\-Wmisleading\-indentation\fR (only for C/C++)
  \&\fB\-Wmismatched\-dealloc
! \&\-Wmismatched\-new\-delete\fR (C++ and Objective\-C++ only)
  \&\fB\-Wmissing\-attributes
  \&\-Wmissing\-braces\fR (only for C/ObjC)
  \&\fB\-Wmultistatement\-macros
! \&\-Wnarrowing\fR  (C++ and Objective\-C++ only)
  \&\fB\-Wnonnull
  \&\-Wnonnull\-compare
! \&\-Wopenmp\-simd\fR (C and C++ only)
! \&\fB\-Woverloaded\-virtual=1\fR (C++ and Objective\-C++ only)
  \&\fB\-Wpacked\-not\-aligned
  \&\-Wparentheses
! \&\-Wpessimizing\-move\fR (C++ and Objective\-C++ only)
  \&\fB\-Wpointer\-sign\fR (only for C/ObjC)
! \&\fB\-Wrange\-loop\-construct\fR (C++ and Objective\-C++ only)
! \&\fB\-Wreorder\fR (C++ and Objective\-C++ only)
  \&\fB\-Wrestrict
  \&\-Wreturn\-type
! \&\-Wself\-move\fR (C++ and Objective\-C++ only)
  \&\fB\-Wsequence\-point
! \&\-Wsign\-compare\fR (C++ and Objective\-C++ only)
  \&\fB\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div
  \&\-Wsizeof\-pointer\-memaccess
*************** others warn about constructions that are
*** 6083,6089 ****
  some cases, and there is no simple way to modify the code to suppress
  the warning. Some of them are enabled by \fB\-Wextra\fR but many of
  them must be enabled individually.
! .IP "\fB\-Wextra\fR" 4
  .IX Item "-Wextra"
  This enables some extra warning flags that are not enabled by
  \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
--- 6016,6022 ----
  some cases, and there is no simple way to modify the code to suppress
  the warning. Some of them are enabled by \fB\-Wextra\fR but many of
  them must be enabled individually.
! .IP \fB\-Wextra\fR 4
  .IX Item "-Wextra"
  This enables some extra warning flags that are not enabled by
  \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
*************** name is still supported, but the newer n
*** 6094,6114 ****
  \&\-Wcalloc\-transposed\-args
  \&\-Wcast\-function\-type
  \&\-Wclobbered
! \&\-Wdeprecated\-copy\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wempty\-body
  \&\-Wenum\-conversion\fR (only for C/ObjC)
  \&\fB\-Wexpansion\-to\-defined
! \&\-Wignored\-qualifiers\fR  (only for C/\*(C+)
  \&\fB\-Wimplicit\-fallthrough=3
  \&\-Wmaybe\-uninitialized
  \&\-Wmissing\-field\-initializers
  \&\-Wmissing\-parameter\-type\fR (C/ObjC only)
  \&\fB\-Wold\-style\-declaration\fR (C/ObjC only)
  \&\fB\-Woverride\-init\fR (C/ObjC only)
! \&\fB\-Wredundant\-move\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wshift\-negative\-value\fR (in \*(C+11 to \*(C+17 and in C99 and newer)
! \&\fB\-Wsign\-compare\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wstring\-compare
  \&\-Wtype\-limits
  \&\-Wuninitialized
--- 6027,6047 ----
  \&\-Wcalloc\-transposed\-args
  \&\-Wcast\-function\-type
  \&\-Wclobbered
! \&\-Wdeprecated\-copy\fR (C++ and Objective\-C++ only)
  \&\fB\-Wempty\-body
  \&\-Wenum\-conversion\fR (only for C/ObjC)
  \&\fB\-Wexpansion\-to\-defined
! \&\-Wignored\-qualifiers\fR  (only for C/C++)
  \&\fB\-Wimplicit\-fallthrough=3
  \&\-Wmaybe\-uninitialized
  \&\-Wmissing\-field\-initializers
  \&\-Wmissing\-parameter\-type\fR (C/ObjC only)
  \&\fB\-Wold\-style\-declaration\fR (C/ObjC only)
  \&\fB\-Woverride\-init\fR (C/ObjC only)
! \&\fB\-Wredundant\-move\fR (C++ and Objective\-C++ only)
! \&\fB\-Wshift\-negative\-value\fR (in C++11 to C++17 and in C99 and newer)
! \&\fB\-Wsign\-compare\fR (C++ and Objective\-C++ only)
! \&\fB\-Wsized\-deallocation\fR (C++ and Objective\-C++ only)
  \&\fB\-Wstring\-compare
  \&\-Wtype\-limits
  \&\-Wuninitialized
*************** name is still supported, but the newer n
*** 6118,6157 ****
  The option \fB\-Wextra\fR also prints warning messages for the
  following cases:
  .RS 4
! .IP "*" 4
  A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
  \&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
! .IP "*" 4
! (\*(C+ only) An enumerator and a non-enumerator both appear in a
  conditional expression.
! .IP "*" 4
! (\*(C+ only) Ambiguous virtual bases.
! .IP "*" 4
! (\*(C+ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
! .IP "*" 4
! (\*(C+ only) Taking the address of a variable that has been declared
  \&\f(CW\*(C`register\*(C'\fR.
! .IP "*" 4
! (\*(C+ only) A base class is not initialized in the copy constructor
  of a derived class.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wabi (C, Objective-C, and Objective- only)"
! Warn about code affected by \s-1ABI\s0 changes.  This includes code that may
! not be compatible with the vendor-neutral \*(C+ \s-1ABI\s0 as well as the psABI
  for the particular target.
  .Sp
! Since G++ now defaults to updating the \s-1ABI\s0 with each major release,
! normally \fB\-Wabi\fR warns only about \*(C+ \s-1ABI\s0 compatibility
  problems if there is a check added later in a release series for an
! \&\s-1ABI\s0 issue discovered since the initial release.  \fB\-Wabi\fR warns
! about more things if an older \s-1ABI\s0 version is selected (with
  \&\fB\-fabi\-version=\fR\fIn\fR).
  .Sp
  \&\fB\-Wabi\fR can also be used with an explicit version number to
! warn about \*(C+ \s-1ABI\s0 compatibility with a particular \fB\-fabi\-version\fR
  level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
  \&\fB\-fabi\-version=2\fR.
  .Sp
--- 6051,6090 ----
  The option \fB\-Wextra\fR also prints warning messages for the
  following cases:
  .RS 4
! .IP * 4
  A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
  \&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
! .IP * 4
! (C++ only) An enumerator and a non\-enumerator both appear in a
  conditional expression.
! .IP * 4
! (C++ only) Ambiguous virtual bases.
! .IP * 4
! (C++ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
! .IP * 4
! (C++ only) Taking the address of a variable that has been declared
  \&\f(CW\*(C`register\*(C'\fR.
! .IP * 4
! (C++ only) A base class is not initialized in the copy constructor
  of a derived class.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wabi\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wabi (C, Objective-C, C++ and Objective-C++ only)"
! Warn about code affected by ABI changes.  This includes code that may
! not be compatible with the vendor\-neutral C++ ABI as well as the psABI
  for the particular target.
  .Sp
! Since G++ now defaults to updating the ABI with each major release,
! normally \fB\-Wabi\fR warns only about C++ ABI compatibility
  problems if there is a check added later in a release series for an
! ABI issue discovered since the initial release.  \fB\-Wabi\fR warns
! about more things if an older ABI version is selected (with
  \&\fB\-fabi\-version=\fR\fIn\fR).
  .Sp
  \&\fB\-Wabi\fR can also be used with an explicit version number to
! warn about C++ ABI compatibility with a particular \fB\-fabi\-version\fR
  level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
  \&\fB\-fabi\-version=2\fR.
  .Sp
*************** If an explicit version number is provide
*** 6160,6166 ****
  from this option is used for compatibility aliases.  If no explicit
  version number is provided with this option, but
  \&\fB\-fabi\-compat\-version\fR is specified, that version number is
! used for \*(C+ \s-1ABI\s0 warnings.
  .Sp
  Although an effort has been made to warn about
  all such cases, there are probably some cases that are not warned about,
--- 6093,6099 ----
  from this option is used for compatibility aliases.  If no explicit
  version number is provided with this option, but
  \&\fB\-fabi\-compat\-version\fR is specified, that version number is
! used for C++ ABI warnings.
  .Sp
  Although an effort has been made to warn about
  all such cases, there are probably some cases that are not warned about,
*************** concerned about the fact that code gener
*** 6173,6182 ****
  compatible with code generated by other compilers.
  .Sp
  Known incompatibilities in \fB\-fabi\-version=2\fR (which was the
! default from \s-1GCC 3.4\s0 to 4.9) include:
  .RS 4
! .IP "*" 4
! A template with a non-type template parameter of reference type was
  mangled incorrectly:
  .Sp
  .Vb 3
--- 6106,6115 ----
  compatible with code generated by other compilers.
  .Sp
  Known incompatibilities in \fB\-fabi\-version=2\fR (which was the
! default from GCC 3.4 to 4.9) include:
  .RS 4
! .IP * 4
! A template with a non\-type template parameter of reference type was
  mangled incorrectly:
  .Sp
  .Vb 3
*************** mangled incorrectly:
*** 6186,6246 ****
  .Ve
  .Sp
  This was fixed in \fB\-fabi\-version=3\fR.
! .IP "*" 4
! \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
! mangled in a non-standard way that does not allow for overloading of
  functions taking vectors of different sizes.
  .Sp
  The mangling was changed in \fB\-fabi\-version=4\fR.
! .IP "*" 4
  \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
  qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
  .Sp
  These mangling issues were fixed in \fB\-fabi\-version=5\fR.
! .IP "*" 4
  Scoped enumerators passed as arguments to a variadic function are
  promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
  On most targets this does not actually affect the parameter passing
! \&\s-1ABI,\s0 as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
  .Sp
! Also, the \s-1ABI\s0 changed the mangling of template argument packs,
  \&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
  a class scope function used as a template argument.
  .Sp
  These issues were corrected in \fB\-fabi\-version=6\fR.
! .IP "*" 4
  Lambdas in default argument scope were mangled incorrectly, and the
! \&\s-1ABI\s0 changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
  .Sp
  These issues were corrected in \fB\-fabi\-version=7\fR.
! .IP "*" 4
! When mangling a function type with function-cv-qualifiers, the
! un-qualified function type was incorrectly treated as a substitution
  candidate.
  .Sp
! This was fixed in \fB\-fabi\-version=8\fR, the default for \s-1GCC 5.1.\s0
! .IP "*" 4
! \&\f(CW\*(C`decltype(nullptr)\*(C'\fR incorrectly had an alignment of 1, leading to
! unaligned accesses.  Note that this did not affect the \s-1ABI\s0 of a
  function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
  minimum alignment.
  .Sp
! This was fixed in \fB\-fabi\-version=9\fR, the default for \s-1GCC 5.2.\s0
! .IP "*" 4
! Target-specific attributes that affect the identity of a type, such as
  ia32 calling conventions on a function type (stdcall, regparm, etc.),
  did not affect the mangled name, leading to name collisions when
  function pointers were used as template arguments.
  .Sp
! This was fixed in \fB\-fabi\-version=10\fR, the default for \s-1GCC 6.1.\s0
  .RE
  .RS 4
  .Sp
! This option also enables warnings about psABI-related changes.
  The known psABI changes at this point include:
! .IP "*" 4
  For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are
! passed in memory as specified in psABI.  Prior to \s-1GCC 4.4,\s0 this was not
  the case.  For example:
  .Sp
  .Vb 4
--- 6119,6179 ----
  .Ve
  .Sp
  This was fixed in \fB\-fabi\-version=3\fR.
! .IP * 4
! SIMD vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
! mangled in a non\-standard way that does not allow for overloading of
  functions taking vectors of different sizes.
  .Sp
  The mangling was changed in \fB\-fabi\-version=4\fR.
! .IP * 4
  \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
  qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
  .Sp
  These mangling issues were fixed in \fB\-fabi\-version=5\fR.
! .IP * 4
  Scoped enumerators passed as arguments to a variadic function are
  promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
  On most targets this does not actually affect the parameter passing
! ABI, as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
  .Sp
! Also, the ABI changed the mangling of template argument packs,
  \&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
  a class scope function used as a template argument.
  .Sp
  These issues were corrected in \fB\-fabi\-version=6\fR.
! .IP * 4
  Lambdas in default argument scope were mangled incorrectly, and the
! ABI changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
  .Sp
  These issues were corrected in \fB\-fabi\-version=7\fR.
! .IP * 4
! When mangling a function type with function\-cv\-qualifiers, the
! un\-qualified function type was incorrectly treated as a substitution
  candidate.
  .Sp
! This was fixed in \fB\-fabi\-version=8\fR, the default for GCC 5.1.
! .IP * 4
! \&\f(CWdecltype(nullptr)\fR incorrectly had an alignment of 1, leading to
! unaligned accesses.  Note that this did not affect the ABI of a
  function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
  minimum alignment.
  .Sp
! This was fixed in \fB\-fabi\-version=9\fR, the default for GCC 5.2.
! .IP * 4
! Target\-specific attributes that affect the identity of a type, such as
  ia32 calling conventions on a function type (stdcall, regparm, etc.),
  did not affect the mangled name, leading to name collisions when
  function pointers were used as template arguments.
  .Sp
! This was fixed in \fB\-fabi\-version=10\fR, the default for GCC 6.1.
  .RE
  .RS 4
  .Sp
! This option also enables warnings about psABI\-related changes.
  The known psABI changes at this point include:
! .IP * 4
  For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are
! passed in memory as specified in psABI.  Prior to GCC 4.4, this was not
  the case.  For example:
  .Sp
  .Vb 4
*************** the case.  For example:
*** 6254,6264 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-changes\-meaning\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-changes-meaning ( and Objective- only)"
! \&\*(C+ requires that unqualified uses of a name within a class have the
  same meaning in the complete scope of the class, so declaring the name
! after using it is ill-formed:
  .Sp
  .Vb 3
  \&        struct A;
--- 6187,6197 ----
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-changes\-meaning\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-changes-meaning (C++ and Objective-C++ only)"
! C++ requires that unqualified uses of a name within a class have the
  same meaning in the complete scope of the class, so declaring the name
! after using it is ill\-formed:
  .Sp
  .Vb 3
  \&        struct A;
*************** error case can be reduced to a warning w
*** 6273,6305 ****
  \&\fB\-Wno\-error=changes\-meaning\fR or \fB\-fpermissive\fR.
  .Sp
  Both diagnostics are also suppressed by \fB\-fms\-extensions\fR.
! .IP "\fB\-Wchar\-subscripts\fR" 4
  .IX Item "-Wchar-subscripts"
  Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
  of error, as programmers often forget that this type is signed on some
  machines.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
  .IX Item "-Wno-coverage-mismatch"
  Warn if feedback profiles do not match when using the
  \&\fB\-fprofile\-use\fR option.
  If a source file is changed between compiling with \fB\-fprofile\-generate\fR
  and with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
! to match the source file and \s-1GCC\s0 cannot use the profile feedback
  information.  By default, this warning is enabled and is treated as an
  error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
  disable the error.  Disabling the error for this warning can result in
  poorly optimized code and is useful only in the
! case of very minor changes such as bug fixes to an existing code-base.
  Completely disabling the warning is not recommended.
! .IP "\fB\-Wno\-coverage\-too\-many\-conditions\fR" 4
  .IX Item "-Wno-coverage-too-many-conditions"
  Warn if \fB\-fcondition\-coverage\fR is used and an expression have too many
! terms and \s-1GCC\s0 gives up coverage.  Coverage is given up when there are more
  terms in the conditional than there are bits in a \f(CW\*(C`gcov_type_unsigned\*(C'\fR.
  This warning is enabled by default.
! .IP "\fB\-Wno\-coverage\-invalid\-line\-number\fR" 4
  .IX Item "-Wno-coverage-invalid-line-number"
  Warn in case a function ends earlier than it begins due
  to an invalid linenum macros.  The warning is emitted only
--- 6206,6238 ----
  \&\fB\-Wno\-error=changes\-meaning\fR or \fB\-fpermissive\fR.
  .Sp
  Both diagnostics are also suppressed by \fB\-fms\-extensions\fR.
! .IP \fB\-Wchar\-subscripts\fR 4
  .IX Item "-Wchar-subscripts"
  Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
  of error, as programmers often forget that this type is signed on some
  machines.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-coverage\-mismatch\fR 4
  .IX Item "-Wno-coverage-mismatch"
  Warn if feedback profiles do not match when using the
  \&\fB\-fprofile\-use\fR option.
  If a source file is changed between compiling with \fB\-fprofile\-generate\fR
  and with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
! to match the source file and GCC cannot use the profile feedback
  information.  By default, this warning is enabled and is treated as an
  error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
  disable the error.  Disabling the error for this warning can result in
  poorly optimized code and is useful only in the
! case of very minor changes such as bug fixes to an existing code\-base.
  Completely disabling the warning is not recommended.
! .IP \fB\-Wno\-coverage\-too\-many\-conditions\fR 4
  .IX Item "-Wno-coverage-too-many-conditions"
  Warn if \fB\-fcondition\-coverage\fR is used and an expression have too many
! terms and GCC gives up coverage.  Coverage is given up when there are more
  terms in the conditional than there are bits in a \f(CW\*(C`gcov_type_unsigned\*(C'\fR.
  This warning is enabled by default.
! .IP \fB\-Wno\-coverage\-invalid\-line\-number\fR 4
  .IX Item "-Wno-coverage-invalid-line-number"
  Warn in case a function ends earlier than it begins due
  to an invalid linenum macros.  The warning is emitted only
*************** By default, this warning is enabled and
*** 6309,6328 ****
  error.  \fB\-Wno\-coverage\-invalid\-line\-number\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-invalid\-line\-number\fR can be used to
  disable the error.
! .IP "\fB\-Wno\-cpp\fR (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)" 4
! .IX Item "-Wno-cpp (C, Objective-C, , Objective- and Fortran only)"
  Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
! .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
  Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
! promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
! floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
  \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
  using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
  overhead required for software emulation.
  .Sp
  It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
! floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
  example, in:
  .Sp
  .Vb 4
--- 6242,6261 ----
  error.  \fB\-Wno\-coverage\-invalid\-line\-number\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-invalid\-line\-number\fR can be used to
  disable the error.
! .IP "\fB\-Wno\-cpp\fR (C, Objective\-C, C++, Objective\-C++ and Fortran only)" 4
! .IX Item "-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)"
  Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
! .IP "\fB\-Wdouble\-promotion\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)"
  Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
! promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit "single\-precision"
! floating\-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
  \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
  using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
  overhead required for software emulation.
  .Sp
  It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
! floating\-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
  example, in:
  .Sp
  .Vb 4
*************** example, in:
*** 6333,6348 ****
  .Ve
  .Sp
  the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
! because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
! .IP "\fB\-Wduplicate\-decl\-specifier\fR (C and Objective-C only)" 4
  .IX Item "-Wduplicate-decl-specifier (C and Objective-C only)"
  Warn if a declaration has duplicate \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`volatile\*(C'\fR,
  \&\f(CW\*(C`restrict\*(C'\fR or \f(CW\*(C`_Atomic\*(C'\fR specifier.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wformat\fR" 4
  .IX Item "-Wformat"
  .PD 0
! .IP "\fB\-Wformat=\fR\fIn\fR" 4
  .IX Item "-Wformat=n"
  .PD
  Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
--- 6266,6281 ----
  .Ve
  .Sp
  the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
! because the floating\-point literal is a \f(CW\*(C`double\*(C'\fR.
! .IP "\fB\-Wduplicate\-decl\-specifier\fR (C and Objective\-C only)" 4
  .IX Item "-Wduplicate-decl-specifier (C and Objective-C only)"
  Warn if a declaration has duplicate \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`volatile\*(C'\fR,
  \&\f(CW\*(C`restrict\*(C'\fR or \f(CW\*(C`_Atomic\*(C'\fR specifier.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP \fB\-Wformat\fR 4
  .IX Item "-Wformat"
  .PD 0
! .IP \fB\-Wformat=\fR\fIn\fR 4
  .IX Item "-Wformat=n"
  .PD
  Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
*************** specified, and that the conversions spec
*** 6351,6376 ****
  sense.  This includes standard functions, and others specified by format
  attributes, in the \f(CW\*(C`printf\*(C'\fR,
  \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
! not in the C standard) families (or other target-specific families).
  Which functions are checked without format attributes having been
  specified depends on the standard version selected, and such checks of
  functions without the attribute specified are disabled by
  \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
  .Sp
! The formats are checked against the format features supported by \s-1GNU\s0
! libc version 2.2.  These include all \s-1ISO C90\s0 and C99 features, as well
! as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
  extensions.  Other library implementations may not support all these
! features; \s-1GCC\s0 does not support warning about features that go beyond a
! particular library's limitations.  However, if \fB\-Wpedantic\fR is used
  with \fB\-Wformat\fR, warnings are given about format features not
  in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
  since those are not in any version of the C standard).
  .RS 4
! .IP "\fB\-Wformat=1\fR" 4
  .IX Item "-Wformat=1"
  .PD 0
! .IP "\fB\-Wformat\fR" 4
  .IX Item "-Wformat"
  .PD
  Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
--- 6284,6309 ----
  sense.  This includes standard functions, and others specified by format
  attributes, in the \f(CW\*(C`printf\*(C'\fR,
  \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
! not in the C standard) families (or other target\-specific families).
  Which functions are checked without format attributes having been
  specified depends on the standard version selected, and such checks of
  functions without the attribute specified are disabled by
  \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
  .Sp
! The formats are checked against the format features supported by GNU
! libc version 2.2.  These include all ISO C90 and C99 features, as well
! as features from the Single Unix Specification and some BSD and GNU
  extensions.  Other library implementations may not support all these
! features; GCC does not support warning about features that go beyond a
! particular library\*(Aqs limitations.  However, if \fB\-Wpedantic\fR is used
  with \fB\-Wformat\fR, warnings are given about format features not
  in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
  since those are not in any version of the C standard).
  .RS 4
! .IP \fB\-Wformat=1\fR 4
  .IX Item "-Wformat=1"
  .PD 0
! .IP \fB\-Wformat\fR 4
  .IX Item "-Wformat"
  .PD
  Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
*************** aspects of this level of format checking
*** 6381,6387 ****
  options: \fB\-Wno\-format\-contains\-nul\fR,
  \&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
  \&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wformat=2\fR" 4
  .IX Item "-Wformat=2"
  Enable \fB\-Wformat\fR plus additional format checks.  Currently
  equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
--- 6314,6320 ----
  options: \fB\-Wno\-format\-contains\-nul\fR,
  \&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
  \&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
! .IP \fB\-Wformat=2\fR 4
  .IX Item "-Wformat=2"
  Enable \fB\-Wformat\fR plus additional format checks.  Currently
  equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
*************** equivalent to \fB\-Wformat \-Wformat\-no
*** 6389,6399 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
  .IX Item "-Wno-format-contains-nul"
  If \fB\-Wformat\fR is specified, do not warn about format strings that
! contain \s-1NUL\s0 bytes.
! .IP "\fB\-Wno\-format\-extra\-args\fR" 4
  .IX Item "-Wno-format-extra-args"
  If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
  \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
--- 6322,6332 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wno\-format\-contains\-nul\fR 4
  .IX Item "-Wno-format-contains-nul"
  If \fB\-Wformat\fR is specified, do not warn about format strings that
! contain NUL bytes.
! .IP \fB\-Wno\-format\-extra\-args\fR 4
  .IX Item "-Wno-format-extra-args"
  If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
  \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
*************** type to pass to \f(CW\*(C`va_arg\*(C'\fR
*** 6406,6429 ****
  in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
  warning if the unused arguments are all pointers, since the Single
  Unix Specification says that such unused arguments are allowed.
! .IP "\fB\-Wformat\-overflow\fR" 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP "\fB\-Wformat\-overflow=\fR\fIlevel\fR" 4
  .IX Item "-Wformat-overflow=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`sprintf\*(C'\fR
  and \f(CW\*(C`vsprintf\*(C'\fR that might overflow the destination buffer.  When the
  exact number of bytes written by a format directive cannot be determined
! at compile-time it is estimated based on heuristics that depend on the
  \&\fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also
  result in false positives.
  .RS 4
! .IP "\fB\-Wformat\-overflow\fR" 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP "\fB\-Wformat\-overflow=1\fR" 4
  .IX Item "-Wformat-overflow=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-overflow\fR enabled by \fB\-Wformat\fR
--- 6339,6362 ----
  in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
  warning if the unused arguments are all pointers, since the Single
  Unix Specification says that such unused arguments are allowed.
! .IP \fB\-Wformat\-overflow\fR 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP \fB\-Wformat\-overflow=\fR\fIlevel\fR 4
  .IX Item "-Wformat-overflow=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`sprintf\*(C'\fR
  and \f(CW\*(C`vsprintf\*(C'\fR that might overflow the destination buffer.  When the
  exact number of bytes written by a format directive cannot be determined
! at compile\-time it is estimated based on heuristics that depend on the
  \&\fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also
  result in false positives.
  .RS 4
! .IP \fB\-Wformat\-overflow\fR 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP \fB\-Wformat\-overflow=1\fR 4
  .IX Item "-Wformat-overflow=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-overflow\fR enabled by \fB\-Wformat\fR
*************** likely overflow the buffer.  At this lev
*** 6432,6442 ****
  directives with unknown values are assumed to have the value of one, and
  strings of unknown length to be empty.  Numeric arguments that are known
  to be bounded to a subrange of their type, or string arguments whose output
! is bounded either by their directive's precision or by a finite set of
  string literals, are assumed to take on the value within the range that
  results in the most bytes on output.  For example, the call to \f(CW\*(C`sprintf\*(C'\fR
  below is diagnosed because even with both \fIa\fR and \fIb\fR equal to zero,
! the terminating \s-1NUL\s0 character (\f(CW\*(Aq\e0\*(Aq\fR) appended by the function
  to the destination buffer will be written past its end.  Increasing
  the size of the buffer by a single byte is sufficient to avoid the
  warning, though it may not be sufficient to avoid the overflow.
--- 6365,6375 ----
  directives with unknown values are assumed to have the value of one, and
  strings of unknown length to be empty.  Numeric arguments that are known
  to be bounded to a subrange of their type, or string arguments whose output
! is bounded either by their directive\*(Aqs precision or by a finite set of
  string literals, are assumed to take on the value within the range that
  results in the most bytes on output.  For example, the call to \f(CW\*(C`sprintf\*(C'\fR
  below is diagnosed because even with both \fIa\fR and \fIb\fR equal to zero,
! the terminating NUL character (\f(CW\*(Aq\e0\*(Aq\fR) appended by the function
  to the destination buffer will be written past its end.  Increasing
  the size of the buffer by a single byte is sufficient to avoid the
  warning, though it may not be sufficient to avoid the overflow.
*************** warning, though it may not be sufficient
*** 6448,6461 ****
  \&          sprintf (buf, "a = %i, b = %i\en", a, b);
  \&        }
  .Ve
! .IP "\fB\-Wformat\-overflow=2\fR" 4
  .IX Item "-Wformat-overflow=2"
  Level \fI2\fR warns also about calls that might overflow the destination
  buffer given an argument of sufficient length or magnitude.  At level
  \&\fI2\fR, unknown numeric arguments are assumed to have the minimum
  representable value for signed types with a precision greater than 1, and
  the maximum representable value otherwise.  Unknown string arguments whose
! length cannot be assumed to be bounded either by the directive's precision,
  or by a finite set of string literals they may evaluate to, or the character
  array they may point to, are assumed to be 1 character long.
  .Sp
--- 6381,6394 ----
  \&          sprintf (buf, "a = %i, b = %i\en", a, b);
  \&        }
  .Ve
! .IP \fB\-Wformat\-overflow=2\fR 4
  .IX Item "-Wformat-overflow=2"
  Level \fI2\fR warns also about calls that might overflow the destination
  buffer given an argument of sufficient length or magnitude.  At level
  \&\fI2\fR, unknown numeric arguments are assumed to have the minimum
  representable value for signed types with a precision greater than 1, and
  the maximum representable value otherwise.  Unknown string arguments whose
! length cannot be assumed to be bounded either by the directive\*(Aqs precision,
  or by a finite set of string literals they may evaluate to, or the character
  array they may point to, are assumed to be 1 character long.
  .Sp
*************** this time because with \fIa\fR equal to
*** 6464,6470 ****
  \&\f(CW%i\fR directive will write some of its digits beyond the end of
  the destination buffer.  To make the call safe regardless of the values
  of the two variables, the size of the destination buffer must be increased
! to at least 34 bytes.  \s-1GCC\s0 includes the minimum size of the buffer in
  an informational note following the warning.
  .Sp
  An alternative to increasing the size of the destination buffer is to
--- 6397,6403 ----
  \&\f(CW%i\fR directive will write some of its digits beyond the end of
  the destination buffer.  To make the call safe regardless of the values
  of the two variables, the size of the destination buffer must be increased
! to at least 34 bytes.  GCC includes the minimum size of the buffer in
  an informational note following the warning.
  .Sp
  An alternative to increasing the size of the destination buffer is to
*************** required size of the buffer to 24 bytes.
*** 6489,6544 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-format\-zero\-length\fR" 4
  .IX Item "-Wno-format-zero-length"
! If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
! The C standard specifies that zero-length formats are allowed.
! .IP "\fB\-Wformat\-nonliteral\fR" 4
  .IX Item "-Wformat-nonliteral"
  If \fB\-Wformat\fR is specified, also warn if the format string is not a
  string literal and so cannot be checked, unless the format function
  takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
! .IP "\fB\-Wformat\-security\fR" 4
  .IX Item "-Wformat-security"
  If \fB\-Wformat\fR is specified, also warn about uses of format
  functions that represent possible security problems.  At present, this
  warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
  format string is not a string literal and there are no format arguments,
  as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
! string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
  currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
  in future warnings may be added to \fB\-Wformat\-security\fR that are not
  included in \fB\-Wformat\-nonliteral\fR.)
! .IP "\fB\-Wformat\-signedness\fR" 4
  .IX Item "-Wformat-signedness"
  If \fB\-Wformat\fR is specified, also warn if the format string
  requires an unsigned argument and the argument is signed and vice versa.
! .IP "\fB\-Wformat\-truncation\fR" 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP "\fB\-Wformat\-truncation=\fR\fIlevel\fR" 4
  .IX Item "-Wformat-truncation=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`snprintf\*(C'\fR
  and \f(CW\*(C`vsnprintf\*(C'\fR that might result in output truncation.  When the exact
  number of bytes written by a format directive cannot be determined at
! compile-time it is estimated based on heuristics that depend on
  the \fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also result
  in false positives.  Except as noted otherwise, the option uses the same
  logic \fB\-Wformat\-overflow\fR.
  .RS 4
! .IP "\fB\-Wformat\-truncation\fR" 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP "\fB\-Wformat\-truncation=1\fR" 4
  .IX Item "-Wformat-truncation=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-truncation\fR enabled by \fB\-Wformat\fR
  employs a conservative approach that warns only about calls to bounded
  functions whose return value is unused and that will most likely result
  in output truncation.
! .IP "\fB\-Wformat\-truncation=2\fR" 4
  .IX Item "-Wformat-truncation=2"
  Level \fI2\fR warns also about calls to bounded functions whose return
  value is used and that might result in truncation given an argument of
--- 6422,6477 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wno\-format\-zero\-length\fR 4
  .IX Item "-Wno-format-zero-length"
! If \fB\-Wformat\fR is specified, do not warn about zero\-length formats.
! The C standard specifies that zero\-length formats are allowed.
! .IP \fB\-Wformat\-nonliteral\fR 4
  .IX Item "-Wformat-nonliteral"
  If \fB\-Wformat\fR is specified, also warn if the format string is not a
  string literal and so cannot be checked, unless the format function
  takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
! .IP \fB\-Wformat\-security\fR 4
  .IX Item "-Wformat-security"
  If \fB\-Wformat\fR is specified, also warn about uses of format
  functions that represent possible security problems.  At present, this
  warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
  format string is not a string literal and there are no format arguments,
  as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
! string came from untrusted input and contains \fR\f(CB%n\fR\fB\fR.  (This is
  currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
  in future warnings may be added to \fB\-Wformat\-security\fR that are not
  included in \fB\-Wformat\-nonliteral\fR.)
! .IP \fB\-Wformat\-signedness\fR 4
  .IX Item "-Wformat-signedness"
  If \fB\-Wformat\fR is specified, also warn if the format string
  requires an unsigned argument and the argument is signed and vice versa.
! .IP \fB\-Wformat\-truncation\fR 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP \fB\-Wformat\-truncation=\fR\fIlevel\fR 4
  .IX Item "-Wformat-truncation=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`snprintf\*(C'\fR
  and \f(CW\*(C`vsnprintf\*(C'\fR that might result in output truncation.  When the exact
  number of bytes written by a format directive cannot be determined at
! compile\-time it is estimated based on heuristics that depend on
  the \fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also result
  in false positives.  Except as noted otherwise, the option uses the same
  logic \fB\-Wformat\-overflow\fR.
  .RS 4
! .IP \fB\-Wformat\-truncation\fR 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP \fB\-Wformat\-truncation=1\fR 4
  .IX Item "-Wformat-truncation=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-truncation\fR enabled by \fB\-Wformat\fR
  employs a conservative approach that warns only about calls to bounded
  functions whose return value is unused and that will most likely result
  in output truncation.
! .IP \fB\-Wformat\-truncation=2\fR 4
  .IX Item "-Wformat-truncation=2"
  Level \fI2\fR warns also about calls to bounded functions whose return
  value is used and that might result in truncation given an argument of
*************** sufficient length or magnitude.
*** 6546,6578 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wformat\-y2k\fR" 4
  .IX Item "-Wformat-y2k"
  If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
! formats that may yield only a two-digit year.
! .IP "\fB\-Wnonnull\fR" 4
  .IX Item "-Wnonnull"
  Warn about passing a null pointer for arguments marked as
! requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
  .Sp
  \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\fR option.
! .IP "\fB\-Wnonnull\-compare\fR" 4
  .IX Item "-Wnonnull-compare"
  Warn when comparing an argument marked with the \f(CW\*(C`nonnull\*(C'\fR
  function attribute against null inside the function.
  .Sp
  \&\fB\-Wnonnull\-compare\fR is included in \fB\-Wall\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\-compare\fR option.
! .IP "\fB\-Wnull\-dereference\fR" 4
  .IX Item "-Wnull-dereference"
  Warn if the compiler detects paths that trigger erroneous or
  undefined behavior due to dereferencing a null pointer.  This option
  is only active when \fB\-fdelete\-null\-pointer\-checks\fR is active,
  which is enabled by optimizations in most targets.  The precision of
  the warnings depends on the optimization options used.
! .IP "\fB\-Wnrvo\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnrvo ( and Objective- only)"
  Warn if the compiler does not elide the copy from a local variable to
  the return value of a function in a context where it is allowed by
  [class.copy.elision].  This elision is commonly known as the Named
--- 6479,6511 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wformat\-y2k\fR 4
  .IX Item "-Wformat-y2k"
  If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
! formats that may yield only a two\-digit year.
! .IP \fB\-Wnonnull\fR 4
  .IX Item "-Wnonnull"
  Warn about passing a null pointer for arguments marked as
! requiring a non\-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
  .Sp
  \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\fR option.
! .IP \fB\-Wnonnull\-compare\fR 4
  .IX Item "-Wnonnull-compare"
  Warn when comparing an argument marked with the \f(CW\*(C`nonnull\*(C'\fR
  function attribute against null inside the function.
  .Sp
  \&\fB\-Wnonnull\-compare\fR is included in \fB\-Wall\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\-compare\fR option.
! .IP \fB\-Wnull\-dereference\fR 4
  .IX Item "-Wnull-dereference"
  Warn if the compiler detects paths that trigger erroneous or
  undefined behavior due to dereferencing a null pointer.  This option
  is only active when \fB\-fdelete\-null\-pointer\-checks\fR is active,
  which is enabled by optimizations in most targets.  The precision of
  the warnings depends on the optimization options used.
! .IP "\fB\-Wnrvo\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnrvo (C++ and Objective-C++ only)"
  Warn if the compiler does not elide the copy from a local variable to
  the return value of a function in a context where it is allowed by
  [class.copy.elision].  This elision is commonly known as the Named
*************** compiler cannot elide copies from both v
*** 6588,6594 ****
  \&          else return v2; // warning: not eliding copy
  \&        }
  .Ve
! .IP "\fB\-Winfinite\-recursion\fR" 4
  .IX Item "-Winfinite-recursion"
  Warn about infinitely recursive calls.  The warning is effective at all
  optimization levels but requires optimization in order to detect infinite
--- 6521,6527 ----
  \&          else return v2; // warning: not eliding copy
  \&        }
  .Ve
! .IP \fB\-Winfinite\-recursion\fR 4
  .IX Item "-Winfinite-recursion"
  Warn about infinitely recursive calls.  The warning is effective at all
  optimization levels but requires optimization in order to detect infinite
*************** recursion in calls between two or more f
*** 6598,6609 ****
  Compare with \fB\-Wanalyzer\-infinite\-recursion\fR which provides a
  similar diagnostic, but is implemented in a different way (as part of
  \&\fB\-fanalyzer\fR).
! .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
  Warn about uninitialized variables that are initialized with themselves.
  Note this option can only be used with the \fB\-Wuninitialized\fR option.
  .Sp
! For example, \s-1GCC\s0 warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
  following snippet only when \fB\-Winit\-self\fR has been specified:
  .Sp
  .Vb 5
--- 6531,6542 ----
  Compare with \fB\-Wanalyzer\-infinite\-recursion\fR which provides a
  similar diagnostic, but is implemented in a different way (as part of
  \&\fB\-fanalyzer\fR).
! .IP "\fB\-Winit\-self\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Winit-self (C, C++, Objective-C and Objective-C++ only)"
  Warn about uninitialized variables that are initialized with themselves.
  Note this option can only be used with the \fB\-Wuninitialized\fR option.
  .Sp
! For example, GCC warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
  following snippet only when \fB\-Winit\-self\fR has been specified:
  .Sp
  .Vb 5
*************** following snippet only when \fB\-Winit\-
*** 6614,6621 ****
  \&        }
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in \*(C+.
! .IP "\fB\-Wno\-implicit\-int\fR (C and Objective-C only)" 4
  .IX Item "-Wno-implicit-int (C and Objective-C only)"
  This option controls warnings when a declaration does not specify a type.
  This warning is enabled by default, as an error, in C99 and later
--- 6547,6554 ----
  \&        }
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in C++.
! .IP "\fB\-Wno\-implicit\-int\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-implicit-int (C and Objective-C only)"
  This option controls warnings when a declaration does not specify a type.
  This warning is enabled by default, as an error, in C99 and later
*************** to a warning using \fB\-fpermissive\fR (
*** 6624,6630 ****
  errors), or for this error alone, with \fB\-Wno\-error=implicit\-int\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-implicit\-function\-declaration\fR (C and Objective-C only)" 4
  .IX Item "-Wno-implicit-function-declaration (C and Objective-C only)"
  This option controls warnings when a function is used before being declared.
  This warning is enabled by default, as an error, in C99 and later
--- 6557,6563 ----
  errors), or for this error alone, with \fB\-Wno\-error=implicit\-int\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-implicit\-function\-declaration\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-implicit-function-declaration (C and Objective-C only)"
  This option controls warnings when a function is used before being declared.
  This warning is enabled by default, as an error, in C99 and later
*************** errors), or for this error alone, with
*** 6634,6644 ****
  \&\fB\-Wno\-error=implicit\-function\-declaration\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
  .IX Item "-Wimplicit (C and Objective-C only)"
  Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Whardened\fR" 4
  .IX Item "-Whardened"
  Warn when \fB\-fhardened\fR did not enable an option from its set (for
  which see \fB\-fhardened\fR).  For instance, using \fB\-fhardened\fR
--- 6567,6577 ----
  \&\fB\-Wno\-error=implicit\-function\-declaration\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wimplicit\fR (C and Objective\-C only)" 4
  .IX Item "-Wimplicit (C and Objective-C only)"
  Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Whardened\fR 4
  .IX Item "-Whardened"
  Warn when \fB\-fhardened\fR did not enable an option from its set (for
  which see \fB\-fhardened\fR).  For instance, using \fB\-fhardened\fR
*************** not be enabled by \fB\-fhardened\fR.
*** 6648,6659 ****
  .Sp
  This warning is enabled by default and has effect only when \fB\-fhardened\fR
  is enabled.
! .IP "\fB\-Wimplicit\-fallthrough\fR" 4
  .IX Item "-Wimplicit-fallthrough"
  \&\fB\-Wimplicit\-fallthrough\fR is the same as \fB\-Wimplicit\-fallthrough=3\fR
  and \fB\-Wno\-implicit\-fallthrough\fR is the same as
  \&\fB\-Wimplicit\-fallthrough=0\fR.
! .IP "\fB\-Wimplicit\-fallthrough=\fR\fIn\fR" 4
  .IX Item "-Wimplicit-fallthrough=n"
  Warn when a switch case falls through.  For example:
  .Sp
--- 6581,6592 ----
  .Sp
  This warning is enabled by default and has effect only when \fB\-fhardened\fR
  is enabled.
! .IP \fB\-Wimplicit\-fallthrough\fR 4
  .IX Item "-Wimplicit-fallthrough"
  \&\fB\-Wimplicit\-fallthrough\fR is the same as \fB\-Wimplicit\-fallthrough=3\fR
  and \fB\-Wno\-implicit\-fallthrough\fR is the same as
  \&\fB\-Wimplicit\-fallthrough=0\fR.
! .IP \fB\-Wimplicit\-fallthrough=\fR\fIn\fR 4
  .IX Item "-Wimplicit-fallthrough=n"
  Warn when a switch case falls through.  For example:
  .Sp
*************** warns when appropriate.  E.g.
*** 6694,6700 ****
  .Ve
  .Sp
  Since there are occasions where a switch case fall through is desirable,
! \&\s-1GCC\s0 provides an attribute, \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR, that is
  to be used along with a null statement to suppress this warning that
  would normally occur:
  .Sp
--- 6627,6633 ----
  .Ve
  .Sp
  Since there are occasions where a switch case fall through is desirable,
! GCC provides an attribute, \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR, that is
  to be used along with a null statement to suppress this warning that
  would normally occur:
  .Sp
*************** would normally occur:
*** 6709,6719 ****
  \&          }
  .Ve
  .Sp
! \&\*(C+17 provides a standard way to suppress the \fB\-Wimplicit\-fallthrough\fR
! warning using \f(CW\*(C`[[fallthrough]];\*(C'\fR instead of the \s-1GNU\s0 attribute.  In \*(C+11
! or \*(C+14 users can use \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR, which is a \s-1GNU\s0 extension.
  Instead of these attributes, it is also possible to add a fallthrough comment
! to silence the warning.  The whole body of the C or \*(C+ style comment should
  match the given regular expressions listed below.  The option argument \fIn\fR
  specifies what kind of comments are accepted:
  .RS 4
--- 6642,6652 ----
  \&          }
  .Ve
  .Sp
! C++17 provides a standard way to suppress the \fB\-Wimplicit\-fallthrough\fR
! warning using \f(CW\*(C`[[fallthrough]];\*(C'\fR instead of the GNU attribute.  In C++11
! or C++14 users can use \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR, which is a GNU extension.
  Instead of these attributes, it is also possible to add a fallthrough comment
! to silence the warning.  The whole body of the C or C++ style comment should
  match the given regular expressions listed below.  The option argument \fIn\fR
  specifies what kind of comments are accepted:
  .RS 4
*************** expression, any comment is used as fallt
*** 6733,6743 ****
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP "*<\f(CW\-fallthrough\fR>" 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP "*<\f(CW@fallthrough@\fR>" 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
--- 6666,6676 ----
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP *<\f(CW\-fallthrough\fR> 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP *<\f(CW@fallthrough@\fR> 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
*************** following regular expressions:
*** 6751,6770 ****
  .ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
  .el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
  .IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>"
  .RE
  .RS 4
  .RE
  .IP "*<\fB\-Wimplicit\-fallthrough=4\fR case sensitively matches one of the>" 4
  .IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>"
- .PD
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP "*<\f(CW\-fallthrough\fR>" 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP "*<\f(CW@fallthrough@\fR>" 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
--- 6684,6703 ----
  .ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
  .el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
  .IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>"
+ .PD
  .RE
  .RS 4
  .RE
  .IP "*<\fB\-Wimplicit\-fallthrough=4\fR case sensitively matches one of the>" 4
  .IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>"
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP *<\f(CW\-fallthrough\fR> 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP *<\f(CW@fallthrough@\fR> 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
*************** following regular expressions:
*** 6772,6783 ****
  .ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4
  .el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4
  .IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>"
  .RE
  .RS 4
  .RE
! .IP "*<\fB\-Wimplicit\-fallthrough=5\fR doesn't recognize any comments as>" 4
  .IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>"
- .PD
  fallthrough comments, only attributes disable the warning.
  .RE
  .RS 4
--- 6705,6716 ----
  .ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4
  .el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4
  .IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>"
+ .PD
  .RE
  .RS 4
  .RE
! .IP "*<\fB\-Wimplicit\-fallthrough=5\fR doesn\*(Aqt recognize any comments as>" 4
  .IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>"
  fallthrough comments, only attributes disable the warning.
  .RE
  .RS 4
*************** by \f(CW\*(C`case\*(C'\fR or \f(CW\*(C`d
*** 6799,6844 ****
  .Sp
  The \fB\-Wimplicit\-fallthrough=3\fR warning is enabled by \fB\-Wextra\fR.
  .RE
! .IP "\fB\-Wno\-if\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-if-not-aligned (C, , Objective-C and Objective- only)"
  Control if warnings triggered by the \f(CW\*(C`warn_if_not_aligned\*(C'\fR attribute
  should be issued.  These warnings are enabled by default.
! .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
! .IX Item "-Wignored-qualifiers (C and only)"
  Warn if the return type of a function has a type qualifier
! such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO C\s0 such a type qualifier has no effect,
  since the value returned by a function is not an lvalue.
! For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
! \&\s-1ISO C\s0 prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
  definitions, so such return types always receive a warning
  even without this option.
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-ignored\-attributes\fR (C and \*(C+ only)" 4
! .IX Item "-Wno-ignored-attributes (C and only)"
  This option controls warnings when an attribute is ignored.
  This is different from the
  \&\fB\-Wattributes\fR option in that it warns whenever the compiler decides
  to drop an attribute, not that the attribute is either unknown, used in a
  wrong place, etc.  This warning is enabled by default.
! .IP "\fB\-Wmain\fR" 4
  .IX Item "-Wmain"
  Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
  a function with external linkage, returning int, taking either zero
  arguments, two, or three arguments of appropriate types.  This warning
! is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
  or \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmisleading\-indentation\fR (C and \*(C+ only)" 4
! .IX Item "-Wmisleading-indentation (C and only)"
  Warn when the indentation of the code does not reflect the block structure.
  Specifically, a warning is issued for \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`while\*(C'\fR, and
  \&\f(CW\*(C`for\*(C'\fR clauses with a guarded statement that does not use braces,
  followed by an unguarded statement with the same indentation.
  .Sp
! In the following example, the call to \*(L"bar\*(R" is misleadingly indented as
! if it were guarded by the \*(L"if\*(R" conditional.
  .Sp
  .Vb 3
  \&          if (some_condition ())
--- 6732,6777 ----
  .Sp
  The \fB\-Wimplicit\-fallthrough=3\fR warning is enabled by \fB\-Wextra\fR.
  .RE
! .IP "\fB\-Wno\-if\-not\-aligned\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)"
  Control if warnings triggered by the \f(CW\*(C`warn_if_not_aligned\*(C'\fR attribute
  should be issued.  These warnings are enabled by default.
! .IP "\fB\-Wignored\-qualifiers\fR (C and C++ only)" 4
! .IX Item "-Wignored-qualifiers (C and C++ only)"
  Warn if the return type of a function has a type qualifier
! such as \f(CW\*(C`const\*(C'\fR.  For ISO C such a type qualifier has no effect,
  since the value returned by a function is not an lvalue.
! For C++, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
! ISO C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
  definitions, so such return types always receive a warning
  even without this option.
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-ignored\-attributes\fR (C and C++ only)" 4
! .IX Item "-Wno-ignored-attributes (C and C++ only)"
  This option controls warnings when an attribute is ignored.
  This is different from the
  \&\fB\-Wattributes\fR option in that it warns whenever the compiler decides
  to drop an attribute, not that the attribute is either unknown, used in a
  wrong place, etc.  This warning is enabled by default.
! .IP \fB\-Wmain\fR 4
  .IX Item "-Wmain"
  Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
  a function with external linkage, returning int, taking either zero
  arguments, two, or three arguments of appropriate types.  This warning
! is enabled by default in C++ and is enabled by either \fB\-Wall\fR
  or \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmisleading\-indentation\fR (C and C++ only)" 4
! .IX Item "-Wmisleading-indentation (C and C++ only)"
  Warn when the indentation of the code does not reflect the block structure.
  Specifically, a warning is issued for \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`while\*(C'\fR, and
  \&\f(CW\*(C`for\*(C'\fR clauses with a guarded statement that does not use braces,
  followed by an unguarded statement with the same indentation.
  .Sp
! In the following example, the call to "bar" is misleadingly indented as
! if it were guarded by the "if" conditional.
  .Sp
  .Vb 3
  \&          if (some_condition ())
*************** The warning is not issued after a \f(CW\
*** 6866,6873 ****
  typically indicates autogenerated code, and no assumptions can be made
  about the layout of the file that the directive references.
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and \*(C+.
! .IP "\fB\-Wmissing\-attributes\fR" 4
  .IX Item "-Wmissing-attributes"
  Warn when a declaration of a function is missing one or more attributes
  that a related function is declared with and whose absence may adversely
--- 6799,6806 ----
  typically indicates autogenerated code, and no assumptions can be made
  about the layout of the file that the directive references.
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and C++.
! .IP \fB\-Wmissing\-attributes\fR 4
  .IX Item "-Wmissing-attributes"
  Warn when a declaration of a function is missing one or more attributes
  that a related function is declared with and whose absence may adversely
*************** Attributes considered include \f(CW\*(C`
*** 6883,6889 ****
  \&\f(CW\*(C`nonnull\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`nothrow\*(C'\fR, \f(CW\*(C`pure\*(C'\fR,
  \&\f(CW\*(C`returns_nonnull\*(C'\fR, and \f(CW\*(C`returns_twice\*(C'\fR.
  .Sp
! In \*(C+, the warning is issued when an explicit specialization of a primary
  template declared with attribute \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
  \&\f(CW\*(C`assume_aligned\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`format_arg\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
  or \f(CW\*(C`nonnull\*(C'\fR is declared without it.  Attributes \f(CW\*(C`deprecated\*(C'\fR,
--- 6816,6822 ----
  \&\f(CW\*(C`nonnull\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`nothrow\*(C'\fR, \f(CW\*(C`pure\*(C'\fR,
  \&\f(CW\*(C`returns_nonnull\*(C'\fR, and \f(CW\*(C`returns_twice\*(C'\fR.
  .Sp
! In C++, the warning is issued when an explicit specialization of a primary
  template declared with attribute \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
  \&\f(CW\*(C`assume_aligned\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`format_arg\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
  or \f(CW\*(C`nonnull\*(C'\fR is declared without it.  Attributes \f(CW\*(C`deprecated\*(C'\fR,
*************** diagnosed because it is missing one of t
*** 6911,6917 ****
  \&        void* _\|_attribute_\|_ ((malloc))   // missing alloc_size
  \&        allocate<void> (size_t);
  .Ve
! .IP "\fB\-Wmissing\-braces\fR" 4
  .IX Item "-Wmissing-braces"
  Warn if an aggregate or union initializer is not fully bracketed.  In
  the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
--- 6844,6850 ----
  \&        void* _\|_attribute_\|_ ((malloc))   // missing alloc_size
  \&        allocate<void> (size_t);
  .Ve
! .IP \fB\-Wmissing\-braces\fR 4
  .IX Item "-Wmissing-braces"
  Warn if an aggregate or union initializer is not fully bracketed.  In
  the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
*************** bracketed, but that for \f(CW\*(C`b\*(C'
*** 6923,6934 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C, Objective\-\*(C+ and Fortran only)" 4
! .IX Item "-Wmissing-include-dirs (C, , Objective-C, Objective- and Fortran only)"
! Warn if a user-supplied include directory does not exist. This option is disabled
! by default for C, \*(C+, Objective-C and Objective\-\*(C+. For Fortran, it is partially
  enabled by default by warning for \-I and \-J, only.
! .IP "\fB\-Wno\-missing\-profile\fR" 4
  .IX Item "-Wno-missing-profile"
  This option controls warnings if feedback profiles are missing when using the
  \&\fB\-fprofile\-use\fR option.
--- 6856,6867 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wmissing\-include\-dirs\fR (C, C++, Objective\-C, Objective\-C++ and Fortran only)" 4
! .IX Item "-Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran only)"
! Warn if a user\-supplied include directory does not exist. This option is disabled
! by default for C, C++, Objective\-C and Objective\-C++. For Fortran, it is partially
  enabled by default by warning for \-I and \-J, only.
! .IP \fB\-Wno\-missing\-profile\fR 4
  .IX Item "-Wno-missing-profile"
  This option controls warnings if feedback profiles are missing when using the
  \&\fB\-fprofile\-use\fR option.
*************** between compiling with \fB\-fprofile\-ge
*** 6938,6959 ****
  In these cases, the profile feedback data files do not contain any
  profile feedback information for
  the newly added function or file respectively.  Also, in the case when profile
! count data (.gcda) files are removed, \s-1GCC\s0 cannot use any profile feedback
  information.  In all these cases, warnings are issued to inform you that a
  profile generation step is due.
  Ignoring the warning can result in poorly optimized code.
  \&\fB\-Wno\-missing\-profile\fR can be used to
  disable the warning, but this is not recommended and should be done only
! when non-existent profile data is justified.
! .IP "\fB\-Wmismatched\-dealloc\fR" 4
  .IX Item "-Wmismatched-dealloc"
  Warn for calls to deallocation functions with pointer arguments returned
! from allocation functions for which the former isn't a suitable
  deallocator.  A pair of functions can be associated as matching allocators
  and deallocators by use of attribute \f(CW\*(C`malloc\*(C'\fR.  Unless disabled by
  the \fB\-fno\-builtin\fR option the standard functions \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, \f(CW\*(C`realloc\*(C'\fR, and \f(CW\*(C`free\*(C'\fR, as well as the corresponding
! forms of \*(C+ \f(CW\*(C`operator new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR are implicitly
  associated as matching allocators and deallocators.  In the following
  example \f(CW\*(C`mydealloc\*(C'\fR is the deallocator for pointers returned from
  \&\f(CW\*(C`myalloc\*(C'\fR.
--- 6871,6892 ----
  In these cases, the profile feedback data files do not contain any
  profile feedback information for
  the newly added function or file respectively.  Also, in the case when profile
! count data (.gcda) files are removed, GCC cannot use any profile feedback
  information.  In all these cases, warnings are issued to inform you that a
  profile generation step is due.
  Ignoring the warning can result in poorly optimized code.
  \&\fB\-Wno\-missing\-profile\fR can be used to
  disable the warning, but this is not recommended and should be done only
! when non\-existent profile data is justified.
! .IP \fB\-Wmismatched\-dealloc\fR 4
  .IX Item "-Wmismatched-dealloc"
  Warn for calls to deallocation functions with pointer arguments returned
! from allocation functions for which the former isn\*(Aqt a suitable
  deallocator.  A pair of functions can be associated as matching allocators
  and deallocators by use of attribute \f(CW\*(C`malloc\*(C'\fR.  Unless disabled by
  the \fB\-fno\-builtin\fR option the standard functions \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, \f(CW\*(C`realloc\*(C'\fR, and \f(CW\*(C`free\*(C'\fR, as well as the corresponding
! forms of C++ \f(CW\*(C`operator new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR are implicitly
  associated as matching allocators and deallocators.  In the following
  example \f(CW\*(C`mydealloc\*(C'\fR is the deallocator for pointers returned from
  \&\f(CW\*(C`myalloc\*(C'\fR.
*************** example \f(CW\*(C`mydealloc\*(C'\fR is t
*** 6973,6983 ****
  \&        }
  .Ve
  .Sp
! In \*(C+, the related option \fB\-Wmismatched\-new\-delete\fR diagnoses
  mismatches involving either \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  Option \fB\-Wmismatched\-dealloc\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wmultistatement\-macros\fR" 4
  .IX Item "-Wmultistatement-macros"
  Warn about unsafe multiple statement macros that appear to be guarded
  by a clause such as \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`for\*(C'\fR, \f(CW\*(C`switch\*(C'\fR, or
--- 6906,6916 ----
  \&        }
  .Ve
  .Sp
! In C++, the related option \fB\-Wmismatched\-new\-delete\fR diagnoses
  mismatches involving either \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  Option \fB\-Wmismatched\-dealloc\fR is included in \fB\-Wall\fR.
! .IP \fB\-Wmultistatement\-macros\fR 4
  .IX Item "-Wmultistatement-macros"
  Warn about unsafe multiple statement macros that appear to be guarded
  by a clause such as \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`for\*(C'\fR, \f(CW\*(C`switch\*(C'\fR, or
*************** For example:
*** 6993,6999 ****
  .Ve
  .Sp
  will increment \f(CW\*(C`y\*(C'\fR unconditionally, not just when \f(CW\*(C`c\*(C'\fR holds.
! The can usually be fixed by wrapping the macro in a do-while loop:
  .Sp
  .Vb 3
  \&        #define DOIT do { x++; y++; } while (0)
--- 6926,6932 ----
  .Ve
  .Sp
  will increment \f(CW\*(C`y\*(C'\fR unconditionally, not just when \f(CW\*(C`c\*(C'\fR holds.
! The can usually be fixed by wrapping the macro in a do\-while loop:
  .Sp
  .Vb 3
  \&        #define DOIT do { x++; y++; } while (0)
*************** The can usually be fixed by wrapping the
*** 7001,7008 ****
  \&          DOIT;
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and \*(C+.
! .IP "\fB\-Wparentheses\fR" 4
  .IX Item "-Wparentheses"
  Warn if parentheses are omitted in certain contexts, such
  as when there is an assignment in a context where a truth value
--- 6934,6941 ----
  \&          DOIT;
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and C++.
! .IP \fB\-Wparentheses\fR 4
  .IX Item "-Wparentheses"
  Warn if parentheses are omitted in certain contexts, such
  as when there is an assignment in a context where a truth value
*************** Also warn if a comparison like \f(CW\*(C
*** 7013,7025 ****
  equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
  interpretation from that of ordinary mathematical notation.
  .Sp
! Also warn for dangerous uses of the \s-1GNU\s0 extension to
  \&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
  in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
  always 1.  Often programmers expect it to be a value computed
  inside the conditional expression instead.
  .Sp
! For \*(C+ this also warns for some cases of unnecessary parentheses in
  declarations, which can indicate an attempt at a function call instead
  of a declaration:
  .Sp
--- 6946,6958 ----
  equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
  interpretation from that of ordinary mathematical notation.
  .Sp
! Also warn for dangerous uses of the GNU extension to
  \&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
  in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
  always 1.  Often programmers expect it to be a value computed
  inside the conditional expression instead.
  .Sp
! For C++ this also warns for some cases of unnecessary parentheses in
  declarations, which can indicate an attempt at a function call instead
  of a declaration:
  .Sp
*************** of a declaration:
*** 7032,7039 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-self\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-self-move ( and Objective- only)"
  This warning warns when a value is moved to itself with \f(CW\*(C`std::move\*(C'\fR.
  Such a \f(CW\*(C`std::move\*(C'\fR typically has no effect.
  .Sp
--- 6965,6972 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-self\-move\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-self-move (C++ and Objective-C++ only)"
  This warning warns when a value is moved to itself with \f(CW\*(C`std::move\*(C'\fR.
  Such a \f(CW\*(C`std::move\*(C'\fR typically has no effect.
  .Sp
*************** Such a \f(CW\*(C`std::move\*(C'\fR typic
*** 7050,7061 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wsequence\-point\fR" 4
  .IX Item "-Wsequence-point"
  Warn about code that may have undefined semantics because of violations
! of sequence point rules in the C and \*(C+ standards.
  .Sp
! The C and \*(C+ standards define the order in which expressions in a C/\*(C+
  program are evaluated in terms of \fIsequence points\fR, which represent
  a partial ordering between the execution of parts of the program: those
  executed before the sequence point, and those executed after it.  These
--- 6983,6994 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wsequence\-point\fR 4
  .IX Item "-Wsequence-point"
  Warn about code that may have undefined semantics because of violations
! of sequence point rules in the C and C++ standards.
  .Sp
! The C and C++ standards define the order in which expressions in a C/C++
  program are evaluated in terms of \fIsequence points\fR, which represent
  a partial ordering between the execution of parts of the program: those
  executed before the sequence point, and those executed after it.  These
*************** ruled that function calls do not overlap
*** 7074,7084 ****
  .Sp
  It is not specified when between sequence points modifications to the
  values of objects take effect.  Programs whose behavior depends on this
! have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
  the previous and next sequence point an object shall have its stored
  value modified at most once by the evaluation of an expression.
  Furthermore, the prior value shall be read only to determine the value
! to be stored.\*(R".  If a program breaks these rules, the results on any
  particular implementation are entirely unpredictable.
  .Sp
  Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
--- 7007,7017 ----
  .Sp
  It is not specified when between sequence points modifications to the
  values of objects take effect.  Programs whose behavior depends on this
! have undefined behavior; the C and C++ standards specify that "Between
  the previous and next sequence point an object shall have its stored
  value modified at most once by the evaluation of an expression.
  Furthermore, the prior value shall be read only to determine the value
! to be stored.".  If a program breaks these rules, the results on any
  particular implementation are entirely unpredictable.
  .Sp
  Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
*************** diagnosed by this option, and it may giv
*** 7087,7116 ****
  result, but in general it has been found fairly effective at detecting
  this sort of problem in programs.
  .Sp
! The \*(C+17 standard will define the order of evaluation of operands in
! more cases: in particular it requires that the right-hand side of an
! assignment be evaluated before the left-hand side, so the above
  examples are no longer undefined.  But this option will still warn
  about them, to help people avoid writing code that is undefined in C
! and earlier revisions of \*(C+.
  .Sp
  The standard is worded confusingly, therefore there is some debate
  over the precise meaning of the sequence point rules in subtle cases.
  Links to discussions of the problem, including proposed formal
! definitions, may be found on the \s-1GCC\s0 readings page, at
  <\fBhttps://gcc.gnu.org/readings.html\fR>.
  .Sp
! This warning is enabled by \fB\-Wall\fR for C and \*(C+.
! .IP "\fB\-Wno\-return\-local\-addr\fR" 4
  .IX Item "-Wno-return-local-addr"
! Do not warn about returning a pointer (or in \*(C+, a reference) to a
  variable that goes out of scope after the function returns.
! .IP "\fB\-Wreturn\-mismatch\fR" 4
  .IX Item "-Wreturn-mismatch"
  Warn about return statements without an expressions in functions which
  do not return \f(CW\*(C`void\*(C'\fR.  Also warn about a \f(CW\*(C`return\*(C'\fR statement
  with an expression in a function whose return type is \f(CW\*(C`void\*(C'\fR,
! unless the expression type is also \f(CW\*(C`void\*(C'\fR.  As a \s-1GNU\s0 extension, the
  latter case is accepted without a warning unless \fB\-Wpedantic\fR is
  used.
  .Sp
--- 7020,7049 ----
  result, but in general it has been found fairly effective at detecting
  this sort of problem in programs.
  .Sp
! The C++17 standard will define the order of evaluation of operands in
! more cases: in particular it requires that the right\-hand side of an
! assignment be evaluated before the left\-hand side, so the above
  examples are no longer undefined.  But this option will still warn
  about them, to help people avoid writing code that is undefined in C
! and earlier revisions of C++.
  .Sp
  The standard is worded confusingly, therefore there is some debate
  over the precise meaning of the sequence point rules in subtle cases.
  Links to discussions of the problem, including proposed formal
! definitions, may be found on the GCC readings page, at
  <\fBhttps://gcc.gnu.org/readings.html\fR>.
  .Sp
! This warning is enabled by \fB\-Wall\fR for C and C++.
! .IP \fB\-Wno\-return\-local\-addr\fR 4
  .IX Item "-Wno-return-local-addr"
! Do not warn about returning a pointer (or in C++, a reference) to a
  variable that goes out of scope after the function returns.
! .IP \fB\-Wreturn\-mismatch\fR 4
  .IX Item "-Wreturn-mismatch"
  Warn about return statements without an expressions in functions which
  do not return \f(CW\*(C`void\*(C'\fR.  Also warn about a \f(CW\*(C`return\*(C'\fR statement
  with an expression in a function whose return type is \f(CW\*(C`void\*(C'\fR,
! unless the expression type is also \f(CW\*(C`void\*(C'\fR.  As a GNU extension, the
  latter case is accepted without a warning unless \fB\-Wpedantic\fR is
  used.
  .Sp
*************** This warning is specific to C and enable
*** 7122,7128 ****
  language dialects, it is treated as an error.  It can be downgraded
  to a warning using \fB\-fpermissive\fR (along with other warnings),
  or for just this warning, with \fB\-Wno\-error=return\-mismatch\fR.
! .IP "\fB\-Wreturn\-type\fR" 4
  .IX Item "-Wreturn-type"
  Warn whenever a function is defined with a return type that defaults to
  \&\f(CW\*(C`int\*(C'\fR (unless \fB\-Wimplicit\-int\fR is active, which takes
--- 7055,7061 ----
  language dialects, it is treated as an error.  It can be downgraded
  to a warning using \fB\-fpermissive\fR (along with other warnings),
  or for just this warning, with \fB\-Wno\-error=return\-mismatch\fR.
! .IP \fB\-Wreturn\-type\fR 4
  .IX Item "-Wreturn-type"
  Warn whenever a function is defined with a return type that defaults to
  \&\f(CW\*(C`int\*(C'\fR (unless \fB\-Wimplicit\-int\fR is active, which takes
*************** Attempting to use the return value of a
*** 7133,7179 ****
  than \f(CW\*(C`main\*(C'\fR that flows off the end by reaching the closing curly
  brace that terminates the function is undefined.
  .Sp
! Unlike in C, in \*(C+, flowing off the end of a non\-\f(CW\*(C`void\*(C'\fR function other
  than \f(CW\*(C`main\*(C'\fR results in undefined behavior even when the value of
  the function is not used.
  .Sp
! This warning is enabled by default in \*(C+ and by \fB\-Wall\fR otherwise.
! .IP "\fB\-Wno\-shift\-count\-negative\fR" 4
  .IX Item "-Wno-shift-count-negative"
  Controls warnings if a shift count is negative.
  This warning is enabled by default.
! .IP "\fB\-Wno\-shift\-count\-overflow\fR" 4
  .IX Item "-Wno-shift-count-overflow"
  Controls warnings if a shift count is greater than or equal to the bit width
  of the type.  This warning is enabled by default.
! .IP "\fB\-Wshift\-negative\-value\fR" 4
  .IX Item "-Wshift-negative-value"
  Warn if left shifting a negative value.  This warning is enabled by
! \&\fB\-Wextra\fR in C99 (and newer) and \*(C+11 to \*(C+17 modes.
! .IP "\fB\-Wno\-shift\-overflow\fR" 4
  .IX Item "-Wno-shift-overflow"
  .PD 0
! .IP "\fB\-Wshift\-overflow=\fR\fIn\fR" 4
  .IX Item "-Wshift-overflow=n"
  .PD
  These options control warnings about left shift overflows.
  .RS 4
! .IP "\fB\-Wshift\-overflow=1\fR" 4
  .IX Item "-Wshift-overflow=1"
  This is the warning level of \fB\-Wshift\-overflow\fR and is enabled
! by default in C99 and \*(C+11 modes (and newer).  This warning level does
! not warn about left-shifting 1 into the sign bit.  (However, in C, such
  an overflow is still rejected in contexts where an integer constant expression
! is required.)  No warning is emitted in \*(C+20 mode (and newer), as signed left
  shifts always wrap.
! .IP "\fB\-Wshift\-overflow=2\fR" 4
  .IX Item "-Wshift-overflow=2"
! This warning level also warns about left-shifting 1 into the sign bit,
! unless \*(C+14 mode (or newer) is active.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wswitch\fR" 4
  .IX Item "-Wswitch"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
--- 7066,7112 ----
  than \f(CW\*(C`main\*(C'\fR that flows off the end by reaching the closing curly
  brace that terminates the function is undefined.
  .Sp
! Unlike in C, in C++, flowing off the end of a non\-\f(CW\*(C`void\*(C'\fR function other
  than \f(CW\*(C`main\*(C'\fR results in undefined behavior even when the value of
  the function is not used.
  .Sp
! This warning is enabled by default in C++ and by \fB\-Wall\fR otherwise.
! .IP \fB\-Wno\-shift\-count\-negative\fR 4
  .IX Item "-Wno-shift-count-negative"
  Controls warnings if a shift count is negative.
  This warning is enabled by default.
! .IP \fB\-Wno\-shift\-count\-overflow\fR 4
  .IX Item "-Wno-shift-count-overflow"
  Controls warnings if a shift count is greater than or equal to the bit width
  of the type.  This warning is enabled by default.
! .IP \fB\-Wshift\-negative\-value\fR 4
  .IX Item "-Wshift-negative-value"
  Warn if left shifting a negative value.  This warning is enabled by
! \&\fB\-Wextra\fR in C99 (and newer) and C++11 to C++17 modes.
! .IP \fB\-Wno\-shift\-overflow\fR 4
  .IX Item "-Wno-shift-overflow"
  .PD 0
! .IP \fB\-Wshift\-overflow=\fR\fIn\fR 4
  .IX Item "-Wshift-overflow=n"
  .PD
  These options control warnings about left shift overflows.
  .RS 4
! .IP \fB\-Wshift\-overflow=1\fR 4
  .IX Item "-Wshift-overflow=1"
  This is the warning level of \fB\-Wshift\-overflow\fR and is enabled
! by default in C99 and C++11 modes (and newer).  This warning level does
! not warn about left\-shifting 1 into the sign bit.  (However, in C, such
  an overflow is still rejected in contexts where an integer constant expression
! is required.)  No warning is emitted in C++20 mode (and newer), as signed left
  shifts always wrap.
! .IP \fB\-Wshift\-overflow=2\fR 4
  .IX Item "-Wshift-overflow=2"
! This warning level also warns about left\-shifting 1 into the sign bit,
! unless C++14 mode (or newer) is active.
  .RE
  .RS 4
  .RE
! .IP \fB\-Wswitch\fR 4
  .IX Item "-Wswitch"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
*************** warning.)  \f(CW\*(C`case\*(C'\fR labels
*** 7182,7192 ****
  provoke warnings when this option is used (even if there is a
  \&\f(CW\*(C`default\*(C'\fR label).
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wswitch\-default\fR" 4
  .IX Item "-Wswitch-default"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
  case.
! .IP "\fB\-Wswitch\-enum\fR" 4
  .IX Item "-Wswitch-enum"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
--- 7115,7125 ----
  provoke warnings when this option is used (even if there is a
  \&\f(CW\*(C`default\*(C'\fR label).
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wswitch\-default\fR 4
  .IX Item "-Wswitch-default"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
  case.
! .IP \fB\-Wswitch\-enum\fR 4
  .IX Item "-Wswitch-enum"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
*************** provoke warnings when this option is use
*** 7195,7201 ****
  between \fB\-Wswitch\fR and this option is that this option gives a
  warning about an omitted enumeration code even if there is a
  \&\f(CW\*(C`default\*(C'\fR label.
! .IP "\fB\-Wno\-switch\-bool\fR" 4
  .IX Item "-Wno-switch-bool"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type
  and the case values are outside the range of a boolean type.
--- 7128,7134 ----
  between \fB\-Wswitch\fR and this option is that this option gives a
  warning about an omitted enumeration code even if there is a
  \&\f(CW\*(C`default\*(C'\fR label.
! .IP \fB\-Wno\-switch\-bool\fR 4
  .IX Item "-Wno-switch-bool"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type
  and the case values are outside the range of a boolean type.
*************** expression to a type other than \f(CW\*(
*** 7209,7222 ****
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and \*(C+ programs.
! .IP "\fB\-Wno\-switch\-outside\-range\fR" 4
  .IX Item "-Wno-switch-outside-range"
  This option controls warnings when a \f(CW\*(C`switch\*(C'\fR case has a value
  that is outside of its
  respective type range.  This warning is enabled by default for
! C and \*(C+ programs.
! .IP "\fB\-Wno\-switch\-unreachable\fR" 4
  .IX Item "-Wno-switch-unreachable"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement contains statements between the
  controlling expression and the first case label, which will never be
--- 7142,7155 ----
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and C++ programs.
! .IP \fB\-Wno\-switch\-outside\-range\fR 4
  .IX Item "-Wno-switch-outside-range"
  This option controls warnings when a \f(CW\*(C`switch\*(C'\fR case has a value
  that is outside of its
  respective type range.  This warning is enabled by default for
! C and C++ programs.
! .IP \fB\-Wno\-switch\-unreachable\fR 4
  .IX Item "-Wno-switch-unreachable"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement contains statements between the
  controlling expression and the first case label, which will never be
*************** controlling expression and the first cas
*** 7246,7263 ****
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and \*(C+ programs.
! .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
! .IX Item "-Wsync-nand (C and only)"
  Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
! built-in functions are used.  These functions changed semantics in \s-1GCC 4.4.\s0
! .IP "\fB\-Wtrivial\-auto\-var\-init\fR" 4
  .IX Item "-Wtrivial-auto-var-init"
  Warn when \f(CW\*(C`\-ftrivial\-auto\-var\-init\*(C'\fR cannot initialize the automatic
  variable.  A common situation is an automatic variable that is declared
  between the controlling expression and the first case label of a \f(CW\*(C`switch\*(C'\fR
  statement.
! .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
  .IX Item "-Wunused-but-set-parameter"
  Warn whenever a function parameter is assigned to, but otherwise unused
  (aside from its declaration).
--- 7179,7196 ----
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and C++ programs.
! .IP "\fB\-Wsync\-nand\fR (C and C++ only)" 4
! .IX Item "-Wsync-nand (C and C++ only)"
  Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
! built\-in functions are used.  These functions changed semantics in GCC 4.4.
! .IP \fB\-Wtrivial\-auto\-var\-init\fR 4
  .IX Item "-Wtrivial-auto-var-init"
  Warn when \f(CW\*(C`\-ftrivial\-auto\-var\-init\*(C'\fR cannot initialize the automatic
  variable.  A common situation is an automatic variable that is declared
  between the controlling expression and the first case label of a \f(CW\*(C`switch\*(C'\fR
  statement.
! .IP \fB\-Wunused\-but\-set\-parameter\fR 4
  .IX Item "-Wunused-but-set-parameter"
  Warn whenever a function parameter is assigned to, but otherwise unused
  (aside from its declaration).
*************** To suppress this warning use the \f(CW\*
*** 7266,7272 ****
  .Sp
  This warning is also enabled by \fB\-Wunused\fR together with
  \&\fB\-Wextra\fR.
! .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
  .IX Item "-Wunused-but-set-variable"
  Warn whenever a local variable is assigned to, but otherwise unused
  (aside from its declaration).
--- 7199,7205 ----
  .Sp
  This warning is also enabled by \fB\-Wunused\fR together with
  \&\fB\-Wextra\fR.
! .IP \fB\-Wunused\-but\-set\-variable\fR 4
  .IX Item "-Wunused-but-set-variable"
  Warn whenever a local variable is assigned to, but otherwise unused
  (aside from its declaration).
*************** To suppress this warning use the \f(CW\*
*** 7276,7326 ****
  .Sp
  This warning is also enabled by \fB\-Wunused\fR, which is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-function\fR" 4
  .IX Item "-Wunused-function"
  Warn whenever a static function is declared but not defined or a
! non-inline static function is unused.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-label\fR" 4
  .IX Item "-Wunused-label"
  Warn whenever a label is declared but not used.
  This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
  Warn when a typedef locally defined in a function is not used.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-parameter\fR" 4
  .IX Item "-Wunused-parameter"
  Warn whenever a function parameter is unused aside from its declaration.
  This option is not enabled by \f(CW\*(C`\-Wunused\*(C'\fR unless \f(CW\*(C`\-Wextra\*(C'\fR is also
  specified.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wno\-unused\-result\fR" 4
  .IX Item "-Wno-unused-result"
  Do not warn if a caller of a function marked with attribute
  \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
  its return value. The default is \fB\-Wunused\-result\fR.
! .IP "\fB\-Wunused\-variable\fR" 4
  .IX Item "-Wunused-variable"
  Warn whenever a local or static variable is unused aside from its
  declaration. This option implies \fB\-Wunused\-const\-variable=1\fR for C,
! but not for \*(C+. This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wunused\-const\-variable\fR" 4
  .IX Item "-Wunused-const-variable"
  .PD 0
! .IP "\fB\-Wunused\-const\-variable=\fR\fIn\fR" 4
  .IX Item "-Wunused-const-variable=n"
  .PD
  Warn whenever a constant static variable is unused aside from its declaration.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
  .RS 4
! .IP "\fB\-Wunused\-const\-variable=1\fR" 4
  .IX Item "-Wunused-const-variable=1"
  Warn about unused static const variables defined in the main
  compilation unit, but not about static const variables declared in any
--- 7209,7259 ----
  .Sp
  This warning is also enabled by \fB\-Wunused\fR, which is enabled
  by \fB\-Wall\fR.
! .IP \fB\-Wunused\-function\fR 4
  .IX Item "-Wunused-function"
  Warn whenever a static function is declared but not defined or a
! non\-inline static function is unused.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wunused\-label\fR 4
  .IX Item "-Wunused-label"
  Warn whenever a label is declared but not used.
  This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)"
  Warn when a typedef locally defined in a function is not used.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wunused\-parameter\fR 4
  .IX Item "-Wunused-parameter"
  Warn whenever a function parameter is unused aside from its declaration.
  This option is not enabled by \f(CW\*(C`\-Wunused\*(C'\fR unless \f(CW\*(C`\-Wextra\*(C'\fR is also
  specified.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP \fB\-Wno\-unused\-result\fR 4
  .IX Item "-Wno-unused-result"
  Do not warn if a caller of a function marked with attribute
  \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
  its return value. The default is \fB\-Wunused\-result\fR.
! .IP \fB\-Wunused\-variable\fR 4
  .IX Item "-Wunused-variable"
  Warn whenever a local or static variable is unused aside from its
  declaration. This option implies \fB\-Wunused\-const\-variable=1\fR for C,
! but not for C++. This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP \fB\-Wunused\-const\-variable\fR 4
  .IX Item "-Wunused-const-variable"
  .PD 0
! .IP \fB\-Wunused\-const\-variable=\fR\fIn\fR 4
  .IX Item "-Wunused-const-variable=n"
  .PD
  Warn whenever a constant static variable is unused aside from its declaration.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
  .RS 4
! .IP \fB\-Wunused\-const\-variable=1\fR 4
  .IX Item "-Wunused-const-variable=1"
  Warn about unused static const variables defined in the main
  compilation unit, but not about static const variables declared in any
*************** header included.
*** 7328,7356 ****
  .Sp
  \&\fB\-Wunused\-const\-variable=1\fR is enabled by either
  \&\fB\-Wunused\-variable\fR or \fB\-Wunused\fR for C, but not for
! \&\*(C+. In C this declares variable storage, but in \*(C+ this is not an
  error since const variables take the place of \f(CW\*(C`#define\*(C'\fRs.
! .IP "\fB\-Wunused\-const\-variable=2\fR" 4
  .IX Item "-Wunused-const-variable=2"
  This warning level also warns for unused constant static variables in
  headers (excluding system headers).  It is equivalent to the short form
  \&\fB\-Wunused\-const\-variable\fR.  This level must be explicitly
! requested in both C and \*(C+ because it might be hard to clean up all
  headers included.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wunused\-value\fR" 4
  .IX Item "-Wunused-value"
  Warn whenever a statement computes a result that is explicitly not
  used. To suppress this warning cast the unused expression to
! \&\f(CW\*(C`void\*(C'\fR. This includes an expression-statement or the left-hand
  side of a comma expression that contains no side effects. For example,
  an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
  \&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wunused\fR" 4
  .IX Item "-Wunused"
  All the above \fB\-Wunused\fR options combined, except those documented
  as needing to be specified explicitly.
--- 7261,7289 ----
  .Sp
  \&\fB\-Wunused\-const\-variable=1\fR is enabled by either
  \&\fB\-Wunused\-variable\fR or \fB\-Wunused\fR for C, but not for
! C++. In C this declares variable storage, but in C++ this is not an
  error since const variables take the place of \f(CW\*(C`#define\*(C'\fRs.
! .IP \fB\-Wunused\-const\-variable=2\fR 4
  .IX Item "-Wunused-const-variable=2"
  This warning level also warns for unused constant static variables in
  headers (excluding system headers).  It is equivalent to the short form
  \&\fB\-Wunused\-const\-variable\fR.  This level must be explicitly
! requested in both C and C++ because it might be hard to clean up all
  headers included.
  .RE
  .RS 4
  .RE
! .IP \fB\-Wunused\-value\fR 4
  .IX Item "-Wunused-value"
  Warn whenever a statement computes a result that is explicitly not
  used. To suppress this warning cast the unused expression to
! \&\f(CW\*(C`void\*(C'\fR. This includes an expression\-statement or the left\-hand
  side of a comma expression that contains no side effects. For example,
  an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
  \&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wunused\fR 4
  .IX Item "-Wunused"
  All the above \fB\-Wunused\fR options combined, except those documented
  as needing to be specified explicitly.
*************** either specify \fB\-Wextra \-Wunused\fR
*** 7361,7371 ****
  \&\fB\-Wunused\-but\-set\-parameter\fR.
  .Sp
  \&\fB\-Wunused\fR enables only \fB\-Wunused\-const\-variable=1\fR rather than
! \&\fB\-Wunused\-const\-variable\fR, and only for C, not \*(C+.
! .IP "\fB\-Wuse\-after\-free\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wuse-after-free (C, Objective-C, and Objective- only)"
  .PD 0
! .IP "\fB\-Wuse\-after\-free=\fR\fIn\fR" 4
  .IX Item "-Wuse-after-free=n"
  .PD
  Warn about uses of pointers to dynamically allocated objects that have
--- 7294,7304 ----
  \&\fB\-Wunused\-but\-set\-parameter\fR.
  .Sp
  \&\fB\-Wunused\fR enables only \fB\-Wunused\-const\-variable=1\fR rather than
! \&\fB\-Wunused\-const\-variable\fR, and only for C, not C++.
! .IP "\fB\-Wuse\-after\-free\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wuse-after-free (C, Objective-C, C++ and Objective-C++ only)"
  .PD 0
! .IP \fB\-Wuse\-after\-free=\fR\fIn\fR 4
  .IX Item "-Wuse-after-free=n"
  .PD
  Warn about uses of pointers to dynamically allocated objects that have
*************** been rendered indeterminate by a call to
*** 7373,7379 ****
  The warning is enabled at all optimization levels but may yield different
  results with optimization than without.
  .RS 4
! .IP "\fB\-Wuse\-after\-free=1\fR" 4
  .IX Item "-Wuse-after-free=1"
  At level 1 the warning attempts to diagnose only unconditional uses
  of pointers made indeterminate by a deallocation call or a successful
--- 7306,7312 ----
  The warning is enabled at all optimization levels but may yield different
  results with optimization than without.
  .RS 4
! .IP \fB\-Wuse\-after\-free=1\fR 4
  .IX Item "-Wuse-after-free=1"
  At level 1 the warning attempts to diagnose only unconditional uses
  of pointers made indeterminate by a deallocation call or a successful
*************** in an actual reallocation of memory.  Th
*** 7382,7388 ****
  calls as well as uses in arithmetic and relational expressions.  Although
  undefined, uses of indeterminate pointers in equality (or inequality)
  expressions are not diagnosed at this level.
! .IP "\fB\-Wuse\-after\-free=2\fR" 4
  .IX Item "-Wuse-after-free=2"
  At level 2, in addition to unconditional uses, the warning also diagnoses
  conditional uses of pointers made indeterminate by a deallocation call.
--- 7315,7321 ----
  calls as well as uses in arithmetic and relational expressions.  Although
  undefined, uses of indeterminate pointers in equality (or inequality)
  expressions are not diagnosed at this level.
! .IP \fB\-Wuse\-after\-free=2\fR 4
  .IX Item "-Wuse-after-free=2"
  At level 2, in addition to unconditional uses, the warning also diagnoses
  conditional uses of pointers made indeterminate by a deallocation call.
*************** function is diagnosed at this level:
*** 7401,7407 ****
  \&            free (p\->data);   // warning: p may be used after free
  \&        }
  .Ve
! .IP "\fB\-Wuse\-after\-free=3\fR" 4
  .IX Item "-Wuse-after-free=3"
  At level 3, the warning also diagnoses uses of indeterminate pointers in
  equality expressions.  All uses of indeterminate pointers are undefined
--- 7334,7340 ----
  \&            free (p\->data);   // warning: p may be used after free
  \&        }
  .Ve
! .IP \fB\-Wuse\-after\-free=3\fR 4
  .IX Item "-Wuse-after-free=3"
  At level 3, the warning also diagnoses uses of indeterminate pointers in
  equality expressions.  All uses of indeterminate pointers are undefined
*************** pointers after reallocation.
*** 7431,7440 ****
  .Sp
  \&\fB\-Wuse\-after\-free=2\fR is included in \fB\-Wall\fR.
  .RE
! .IP "\fB\-Wuseless\-cast\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wuseless-cast (C, Objective-C, and Objective- only)"
  Warn when an expression is cast to its own type.  This warning does not
! occur when a class object is converted to a non-reference type as that
  is a way to create a temporary:
  .Sp
  .Vb 6
--- 7364,7373 ----
  .Sp
  \&\fB\-Wuse\-after\-free=2\fR is included in \fB\-Wall\fR.
  .RE
! .IP "\fB\-Wuseless\-cast\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wuseless-cast (C, Objective-C, C++ and Objective-C++ only)"
  Warn when an expression is cast to its own type.  This warning does not
! occur when a class object is converted to a non\-reference type as that
  is a way to create a temporary:
  .Sp
  .Vb 6
*************** is a way to create a temporary:
*** 7445,7459 ****
  \&          g (S(arg)); // make arg prvalue so that it can bind to S&&
  \&        }
  .Ve
! .IP "\fB\-Wuninitialized\fR" 4
  .IX Item "-Wuninitialized"
  Warn if an object with automatic or allocated storage duration is used
! without having been initialized.  In \*(C+, also warn if a non-static
! reference or non-static \f(CW\*(C`const\*(C'\fR member appears in a class without
  constructors.
  .Sp
! In addition, passing a pointer (or in \*(C+, a reference) to an uninitialized
! object to a \f(CW\*(C`const\*(C'\fR\-qualified argument of a built-in function known to
  read the object is also diagnosed by this warning.
  (\fB\-Wmaybe\-uninitialized\fR is issued for ordinary functions.)
  .Sp
--- 7378,7392 ----
  \&          g (S(arg)); // make arg prvalue so that it can bind to S&&
  \&        }
  .Ve
! .IP \fB\-Wuninitialized\fR 4
  .IX Item "-Wuninitialized"
  Warn if an object with automatic or allocated storage duration is used
! without having been initialized.  In C++, also warn if a non\-static
! reference or non\-static \f(CW\*(C`const\*(C'\fR member appears in a class without
  constructors.
  .Sp
! In addition, passing a pointer (or in C++, a reference) to an uninitialized
! object to a \f(CW\*(C`const\*(C'\fR\-qualified argument of a built\-in function known to
  read the object is also diagnosed by this warning.
  (\fB\-Wmaybe\-uninitialized\fR is issued for ordinary functions.)
  .Sp
*************** structure, union or array variables as w
*** 7465,7471 ****
  uninitialized as a whole.  They do not occur for variables or elements
  declared \f(CW\*(C`volatile\*(C'\fR.  Because these warnings depend on
  optimization, the exact variables or elements for which there are
! warnings depend on the precise optimization options and version of \s-1GCC\s0
  used.
  .Sp
  Note that there may be no warning about a variable that is used only
--- 7398,7404 ----
  uninitialized as a whole.  They do not occur for variables or elements
  declared \f(CW\*(C`volatile\*(C'\fR.  Because these warnings depend on
  optimization, the exact variables or elements for which there are
! warnings depend on the precise optimization options and version of GCC
  used.
  .Sp
  Note that there may be no warning about a variable that is used only
*************** to compute a value that itself is never
*** 7473,7480 ****
  computations may be deleted by data flow analysis before the warnings
  are printed.
  .Sp
! In \*(C+, this warning also warns about using uninitialized objects in
! member-initializer-lists.  For example, \s-1GCC\s0 warns about \f(CW\*(C`b\*(C'\fR being
  uninitialized in the following snippet:
  .Sp
  .Vb 5
--- 7406,7413 ----
  computations may be deleted by data flow analysis before the warnings
  are printed.
  .Sp
! In C++, this warning also warns about using uninitialized objects in
! member\-initializer\-lists.  For example, GCC warns about \f(CW\*(C`b\*(C'\fR being
  uninitialized in the following snippet:
  .Sp
  .Vb 5
*************** uninitialized in the following snippet:
*** 7484,7497 ****
  \&          A() : a(b) { }
  \&        };
  .Ve
! .IP "\fB\-Wno\-invalid\-memory\-model\fR" 4
  .IX Item "-Wno-invalid-memory-model"
  This option controls warnings
  for invocations of \fB_\|_atomic Builtins\fR, \fB_\|_sync Builtins\fR,
  and the C11 atomic generic functions with a memory consistency argument
  that is either invalid for the operation or outside the range of values
  of the \f(CW\*(C`memory_order\*(C'\fR enumeration.  For example, since the
! \&\f(CW\*(C`_\|_atomic_store\*(C'\fR and \f(CW\*(C`_\|_atomic_store_n\*(C'\fR built-ins are only
  defined for the relaxed, release, and sequentially consistent memory
  orders the following code is diagnosed:
  .Sp
--- 7417,7430 ----
  \&          A() : a(b) { }
  \&        };
  .Ve
! .IP \fB\-Wno\-invalid\-memory\-model\fR 4
  .IX Item "-Wno-invalid-memory-model"
  This option controls warnings
  for invocations of \fB_\|_atomic Builtins\fR, \fB_\|_sync Builtins\fR,
  and the C11 atomic generic functions with a memory consistency argument
  that is either invalid for the operation or outside the range of values
  of the \f(CW\*(C`memory_order\*(C'\fR enumeration.  For example, since the
! \&\f(CW\*(C`_\|_atomic_store\*(C'\fR and \f(CW\*(C`_\|_atomic_store_n\*(C'\fR built\-ins are only
  defined for the relaxed, release, and sequentially consistent memory
  orders the following code is diagnosed:
  .Sp
*************** orders the following code is diagnosed:
*** 7503,7509 ****
  .Ve
  .Sp
  \&\fB\-Winvalid\-memory\-model\fR is enabled by default.
! .IP "\fB\-Wmaybe\-uninitialized\fR" 4
  .IX Item "-Wmaybe-uninitialized"
  For an object with automatic or allocated storage duration, if there exists
  a path from the function entry to a use of the object that is initialized,
--- 7436,7442 ----
  .Ve
  .Sp
  \&\fB\-Winvalid\-memory\-model\fR is enabled by default.
! .IP \fB\-Wmaybe\-uninitialized\fR 4
  .IX Item "-Wmaybe-uninitialized"
  For an object with automatic or allocated storage duration, if there exists
  a path from the function entry to a use of the object that is initialized,
*************** but there exist some other paths for whi
*** 7511,7527 ****
  the compiler emits a warning if it cannot prove the uninitialized paths
  are not executed at run time.
  .Sp
! In addition, passing a pointer (or in \*(C+, a reference) to an uninitialized
  object to a \f(CW\*(C`const\*(C'\fR\-qualified function argument is also diagnosed by
! this warning.  (\fB\-Wuninitialized\fR is issued for built-in functions
  known to read the object.)  Annotating the function with attribute
! \&\f(CW\*(C`access (none)\*(C'\fR indicates that the argument isn't used to access
  the object and avoids the warning.
  .Sp
  These warnings are only possible in optimizing compilation, because otherwise
! \&\s-1GCC\s0 does not keep track of the state of variables.
  .Sp
! These warnings are made optional because \s-1GCC\s0 may not be able to determine when
  the code is correct in spite of appearing to have an error.  Here is one
  example of how this can happen:
  .Sp
--- 7444,7460 ----
  the compiler emits a warning if it cannot prove the uninitialized paths
  are not executed at run time.
  .Sp
! In addition, passing a pointer (or in C++, a reference) to an uninitialized
  object to a \f(CW\*(C`const\*(C'\fR\-qualified function argument is also diagnosed by
! this warning.  (\fB\-Wuninitialized\fR is issued for built\-in functions
  known to read the object.)  Annotating the function with attribute
! \&\f(CW\*(C`access (none)\*(C'\fR indicates that the argument isn\*(Aqt used to access
  the object and avoids the warning.
  .Sp
  These warnings are only possible in optimizing compilation, because otherwise
! GCC does not keep track of the state of variables.
  .Sp
! These warnings are made optional because GCC may not be able to determine when
  the code is correct in spite of appearing to have an error.  Here is one
  example of how this can happen:
  .Sp
*************** example of how this can happen:
*** 7541,7551 ****
  .Ve
  .Sp
  If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
! always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
! warning, you need to provide a default case with \fIassert\fR\|(0) or
  similar code.
  .Sp
! This option also warns when a non-volatile automatic variable might be
  changed by a call to \f(CW\*(C`longjmp\*(C'\fR.
  The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
  where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
--- 7474,7484 ----
  .Ve
  .Sp
  If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
! always initialized, but GCC doesn\*(Aqt know this. To suppress the
! warning, you need to provide a default case with \fBassert\fR\|(0) or
  similar code.
  .Sp
! This option also warns when a non\-volatile automatic variable might be
  changed by a call to \f(CW\*(C`longjmp\*(C'\fR.
  The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
  where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
*************** Some spurious warnings can be avoided if
*** 7557,7574 ****
  you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
  .Sp
  This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
! .IP "\fB\-Wunknown\-pragmas\fR" 4
  .IX Item "-Wunknown-pragmas"
  Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
! \&\s-1GCC.\s0  If this command-line option is used, warnings are even issued
  for unknown pragmas in system header files.  This is not the case if
! the warnings are only enabled by the \fB\-Wall\fR command-line option.
! .IP "\fB\-Wno\-pragmas\fR" 4
  .IX Item "-Wno-pragmas"
  Do not warn about misuses of pragmas, such as incorrect parameters,
  invalid syntax, or conflicts between pragmas.  See also
  \&\fB\-Wunknown\-pragmas\fR.
! .IP "\fB\-Wno\-prio\-ctor\-dtor\fR" 4
  .IX Item "-Wno-prio-ctor-dtor"
  Do not warn if a priority from 0 to 100 is used for constructor or destructor.
  The use of constructor and destructor attributes allow you to assign a
--- 7490,7507 ----
  you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
  .Sp
  This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
! .IP \fB\-Wunknown\-pragmas\fR 4
  .IX Item "-Wunknown-pragmas"
  Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
! GCC.  If this command\-line option is used, warnings are even issued
  for unknown pragmas in system header files.  This is not the case if
! the warnings are only enabled by the \fB\-Wall\fR command\-line option.
! .IP \fB\-Wno\-pragmas\fR 4
  .IX Item "-Wno-pragmas"
  Do not warn about misuses of pragmas, such as incorrect parameters,
  invalid syntax, or conflicts between pragmas.  See also
  \&\fB\-Wunknown\-pragmas\fR.
! .IP \fB\-Wno\-prio\-ctor\-dtor\fR 4
  .IX Item "-Wno-prio-ctor-dtor"
  Do not warn if a priority from 0 to 100 is used for constructor or destructor.
  The use of constructor and destructor attributes allow you to assign a
*************** priority to the constructor/destructor t
*** 7576,7582 ****
  before \f(CW\*(C`main\*(C'\fR is called or after it returns.  The priority values must be
  greater than 100 as the compiler reserves priority values between 0\-\-100 for
  the implementation.
! .IP "\fB\-Wstrict\-aliasing\fR" 4
  .IX Item "-Wstrict-aliasing"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
--- 7509,7515 ----
  before \f(CW\*(C`main\*(C'\fR is called or after it returns.  The priority values must be
  greater than 100 as the compiler reserves priority values between 0\-\-100 for
  the implementation.
! .IP \fB\-Wstrict\-aliasing\fR 4
  .IX Item "-Wstrict-aliasing"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
*************** compiler is using for optimization.  The
*** 7584,7590 ****
  cases, but does attempt to catch the more common pitfalls.  It is
  included in \fB\-Wall\fR.
  It is equivalent to \fB\-Wstrict\-aliasing=3\fR
! .IP "\fB\-Wstrict\-aliasing=n\fR" 4
  .IX Item "-Wstrict-aliasing=n"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
--- 7517,7523 ----
  cases, but does attempt to catch the more common pitfalls.  It is
  included in \fB\-Wall\fR.
  It is equivalent to \fB\-Wstrict\-aliasing=3\fR
! .IP \fB\-Wstrict\-aliasing=n\fR 4
  .IX Item "-Wstrict-aliasing=n"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
*************** negatives.  Slightly slower than levels
*** 7613,7625 ****
  Takes care of the common pun+dereference pattern in the front end:
  \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
  If optimization is enabled, it also runs in the back end, where it deals
! with multiple statement cases using flow-sensitive points-to information.
  Only warns when the converted pointer is dereferenced.
  Does not warn about incomplete types.
! .IP "\fB\-Wstrict\-overflow\fR" 4
  .IX Item "-Wstrict-overflow"
  .PD 0
! .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
  .IX Item "-Wstrict-overflow=n"
  .PD
  This option is only active when signed overflow is undefined.
--- 7546,7558 ----
  Takes care of the common pun+dereference pattern in the front end:
  \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
  If optimization is enabled, it also runs in the back end, where it deals
! with multiple statement cases using flow\-sensitive points\-to information.
  Only warns when the converted pointer is dereferenced.
  Does not warn about incomplete types.
! .IP \fB\-Wstrict\-overflow\fR 4
  .IX Item "-Wstrict-overflow"
  .PD 0
! .IP \fB\-Wstrict\-overflow=\fR\fIn\fR 4
  .IX Item "-Wstrict-overflow=n"
  .PD
  This option is only active when signed overflow is undefined.
*************** undefined signed overflow when estimatin
*** 7639,7652 ****
  requires, in particular when determining whether a loop will be
  executed at all.
  .RS 4
! .IP "\fB\-Wstrict\-overflow=1\fR" 4
  .IX Item "-Wstrict-overflow=1"
  Warn about cases that are both questionable and easy to avoid.  For
  example the compiler simplifies
  \&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
  \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
  are not, and must be explicitly requested.
! .IP "\fB\-Wstrict\-overflow=2\fR" 4
  .IX Item "-Wstrict-overflow=2"
  Also warn about other cases where a comparison is simplified to a
  constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
--- 7572,7585 ----
  requires, in particular when determining whether a loop will be
  executed at all.
  .RS 4
! .IP \fB\-Wstrict\-overflow=1\fR 4
  .IX Item "-Wstrict-overflow=1"
  Warn about cases that are both questionable and easy to avoid.  For
  example the compiler simplifies
  \&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
  \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
  are not, and must be explicitly requested.
! .IP \fB\-Wstrict\-overflow=2\fR 4
  .IX Item "-Wstrict-overflow=2"
  Also warn about other cases where a comparison is simplified to a
  constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
*************** simplified when signed integer overflow
*** 7654,7668 ****
  \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
  zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
  \&\fB\-Wstrict\-overflow=2\fR.
! .IP "\fB\-Wstrict\-overflow=3\fR" 4
  .IX Item "-Wstrict-overflow=3"
  Also warn about other cases where a comparison is simplified.  For
  example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
! .IP "\fB\-Wstrict\-overflow=4\fR" 4
  .IX Item "-Wstrict-overflow=4"
  Also warn about other simplifications not covered by the above cases.
  For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
! .IP "\fB\-Wstrict\-overflow=5\fR" 4
  .IX Item "-Wstrict-overflow=5"
  Also warn about cases where the compiler reduces the magnitude of a
  constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
--- 7587,7601 ----
  \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
  zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
  \&\fB\-Wstrict\-overflow=2\fR.
! .IP \fB\-Wstrict\-overflow=3\fR 4
  .IX Item "-Wstrict-overflow=3"
  Also warn about other cases where a comparison is simplified.  For
  example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
! .IP \fB\-Wstrict\-overflow=4\fR 4
  .IX Item "-Wstrict-overflow=4"
  Also warn about other simplifications not covered by the above cases.
  For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
! .IP \fB\-Wstrict\-overflow=5\fR 4
  .IX Item "-Wstrict-overflow=5"
  Also warn about cases where the compiler reduces the magnitude of a
  constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
*************** false positives.
*** 7673,7687 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wstring\-compare\fR" 4
  .IX Item "-Wstring-compare"
  Warn for calls to \f(CW\*(C`strcmp\*(C'\fR and \f(CW\*(C`strncmp\*(C'\fR whose result is
! determined to be either zero or non-zero in tests for such equality
  owing to the length of one argument being greater than the size of
  the array the other argument is stored in (or the bound in the case
  of \f(CW\*(C`strncmp\*(C'\fR).  Such calls could be mistakes.  For example,
  the call to \f(CW\*(C`strcmp\*(C'\fR below is diagnosed because its result is
! necessarily non-zero irrespective of the contents of the array \f(CW\*(C`a\*(C'\fR.
  .Sp
  .Vb 8
  \&        extern char a[4];
--- 7606,7620 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wstring\-compare\fR 4
  .IX Item "-Wstring-compare"
  Warn for calls to \f(CW\*(C`strcmp\*(C'\fR and \f(CW\*(C`strncmp\*(C'\fR whose result is
! determined to be either zero or non\-zero in tests for such equality
  owing to the length of one argument being greater than the size of
  the array the other argument is stored in (or the bound in the case
  of \f(CW\*(C`strncmp\*(C'\fR).  Such calls could be mistakes.  For example,
  the call to \f(CW\*(C`strcmp\*(C'\fR below is diagnosed because its result is
! necessarily non\-zero irrespective of the contents of the array \f(CW\*(C`a\*(C'\fR.
  .Sp
  .Vb 8
  \&        extern char a[4];
*************** necessarily non-zero irrespective of the
*** 7695,7706 ****
  .Ve
  .Sp
  \&\fB\-Wstring\-compare\fR is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-stringop\-overflow\fR" 4
  .IX Item "-Wno-stringop-overflow"
  .PD 0
! .IP "\fB\-Wstringop\-overflow\fR" 4
  .IX Item "-Wstringop-overflow"
! .IP "\fB\-Wstringop\-overflow=\fR\fItype\fR" 4
  .IX Item "-Wstringop-overflow=type"
  .PD
  Warn for calls to string manipulation functions such as \f(CW\*(C`memcpy\*(C'\fR and
--- 7628,7639 ----
  .Ve
  .Sp
  \&\fB\-Wstring\-compare\fR is enabled by \fB\-Wextra\fR.
! .IP \fB\-Wno\-stringop\-overflow\fR 4
  .IX Item "-Wno-stringop-overflow"
  .PD 0
! .IP \fB\-Wstringop\-overflow\fR 4
  .IX Item "-Wstringop-overflow"
! .IP \fB\-Wstringop\-overflow=\fR\fItype\fR 4
  .IX Item "-Wstringop-overflow=type"
  .PD
  Warn for calls to string manipulation functions such as \f(CW\*(C`memcpy\*(C'\fR and
*************** of Object Size type\-0.  The option also
*** 7713,7724 ****
  in excess of the largest possible object or at most \f(CW\*(C`SIZE_MAX / 2\*(C'\fR bytes.
  The option produces the best results with optimization enabled but can detect
  a small subset of simple buffer overflows even without optimization in
! calls to the \s-1GCC\s0 built-in functions like \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR that
  correspond to the standard functions.  In any case, the option warns about
  just a subset of buffer overflows detected by the corresponding overflow
! checking built-ins.  For example, the option issues a warning for
  the \f(CW\*(C`strcpy\*(C'\fR call below because it copies at least 5 characters
! (the string \f(CW"blue"\fR including the terminating \s-1NUL\s0) into the buffer
  of size 4.
  .Sp
  .Vb 11
--- 7646,7657 ----
  in excess of the largest possible object or at most \f(CW\*(C`SIZE_MAX / 2\*(C'\fR bytes.
  The option produces the best results with optimization enabled but can detect
  a small subset of simple buffer overflows even without optimization in
! calls to the GCC built\-in functions like \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR that
  correspond to the standard functions.  In any case, the option warns about
  just a subset of buffer overflows detected by the corresponding overflow
! checking built\-ins.  For example, the option issues a warning for
  the \f(CW\*(C`strcpy\*(C'\fR call below because it copies at least 5 characters
! (the string \f(CW"blue"\fR including the terminating NUL) into the buffer
  of size 4.
  .Sp
  .Vb 11
*************** of size 4.
*** 7740,7778 ****
  .Sp
  Option \fB\-Wstringop\-overflow=2\fR is enabled by default.
  .RS 4
! .IP "\fB\-Wstringop\-overflow\fR" 4
  .IX Item "-Wstringop-overflow"
  .PD 0
! .IP "\fB\-Wstringop\-overflow=1\fR" 4
  .IX Item "-Wstringop-overflow=1"
  .PD
! The \fB\-Wstringop\-overflow=1\fR option uses type-zero Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  does not warn for writes past the end of subobjects of larger objects accessed
  by pointers unless the size of the largest surrounding object is known.  When
  the destination may be one of several objects it is assumed to be the largest
  one of them.  On Linux systems, when optimization is enabled at this setting
  the option warns for the same code as when the \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR macro
! is defined to a non-zero value.
! .IP "\fB\-Wstringop\-overflow=2\fR" 4
  .IX Item "-Wstringop-overflow=2"
! The \fB\-Wstringop\-overflow=2\fR option uses type-one Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflows when writing to members of the largest complete
  objects whose exact size is known.  However, it does not warn for excessive
  writes to the same members of unknown objects referenced by pointers since
  they may point to arrays containing unknown numbers of elements.  This is
  the default setting of the option.
! .IP "\fB\-Wstringop\-overflow=3\fR" 4
  .IX Item "-Wstringop-overflow=3"
! The \fB\-Wstringop\-overflow=3\fR option uses type-two Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing the smallest object or data member.  This is the
  most restrictive setting of the option that may result in warnings for safe
  code.
! .IP "\fB\-Wstringop\-overflow=4\fR" 4
  .IX Item "-Wstringop-overflow=4"
! The \fB\-Wstringop\-overflow=4\fR option uses type-three Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing any data members, and when the destination is
  one of several objects it uses the size of the largest of them to decide
--- 7673,7711 ----
  .Sp
  Option \fB\-Wstringop\-overflow=2\fR is enabled by default.
  .RS 4
! .IP \fB\-Wstringop\-overflow\fR 4
  .IX Item "-Wstringop-overflow"
  .PD 0
! .IP \fB\-Wstringop\-overflow=1\fR 4
  .IX Item "-Wstringop-overflow=1"
  .PD
! The \fB\-Wstringop\-overflow=1\fR option uses type\-zero Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  does not warn for writes past the end of subobjects of larger objects accessed
  by pointers unless the size of the largest surrounding object is known.  When
  the destination may be one of several objects it is assumed to be the largest
  one of them.  On Linux systems, when optimization is enabled at this setting
  the option warns for the same code as when the \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR macro
! is defined to a non\-zero value.
! .IP \fB\-Wstringop\-overflow=2\fR 4
  .IX Item "-Wstringop-overflow=2"
! The \fB\-Wstringop\-overflow=2\fR option uses type\-one Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflows when writing to members of the largest complete
  objects whose exact size is known.  However, it does not warn for excessive
  writes to the same members of unknown objects referenced by pointers since
  they may point to arrays containing unknown numbers of elements.  This is
  the default setting of the option.
! .IP \fB\-Wstringop\-overflow=3\fR 4
  .IX Item "-Wstringop-overflow=3"
! The \fB\-Wstringop\-overflow=3\fR option uses type\-two Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing the smallest object or data member.  This is the
  most restrictive setting of the option that may result in warnings for safe
  code.
! .IP \fB\-Wstringop\-overflow=4\fR 4
  .IX Item "-Wstringop-overflow=4"
! The \fB\-Wstringop\-overflow=4\fR option uses type\-three Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing any data members, and when the destination is
  one of several objects it uses the size of the largest of them to decide
*************** setting of the option may result in warn
*** 7781,7794 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-stringop\-overread\fR" 4
  .IX Item "-Wno-stringop-overread"
  Warn for calls to string manipulation functions such as \f(CW\*(C`memchr\*(C'\fR, or
  \&\f(CW\*(C`strcpy\*(C'\fR that are determined to read past the end of the source
  sequence.
  .Sp
  Option \fB\-Wstringop\-overread\fR is enabled by default.
! .IP "\fB\-Wno\-stringop\-truncation\fR" 4
  .IX Item "-Wno-stringop-truncation"
  Do not warn for calls to bounded string manipulation functions
  such as \f(CW\*(C`strncat\*(C'\fR,
--- 7714,7727 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wno\-stringop\-overread\fR 4
  .IX Item "-Wno-stringop-overread"
  Warn for calls to string manipulation functions such as \f(CW\*(C`memchr\*(C'\fR, or
  \&\f(CW\*(C`strcpy\*(C'\fR that are determined to read past the end of the source
  sequence.
  .Sp
  Option \fB\-Wstringop\-overread\fR is enabled by default.
! .IP \fB\-Wno\-stringop\-truncation\fR 4
  .IX Item "-Wno-stringop-truncation"
  Do not warn for calls to bounded string manipulation functions
  such as \f(CW\*(C`strncat\*(C'\fR,
*************** warning use \f(CW\*(C`bufsize \- strlen
*** 7808,7818 ****
  .Ve
  .Sp
  As another example, the following call to \f(CW\*(C`strncpy\*(C'\fR results in copying
! to \f(CW\*(C`d\*(C'\fR just the characters preceding the terminating \s-1NUL,\s0 without
! appending the \s-1NUL\s0 to the end.  Assuming the result of \f(CW\*(C`strncpy\*(C'\fR is
! necessarily a NUL-terminated string is a common mistake, and so the call
  is diagnosed.  To avoid the warning when the result is not expected to be
! NUL-terminated, call \f(CW\*(C`memcpy\*(C'\fR instead.
  .Sp
  .Vb 4
  \&        void copy (char *d, const char *s)
--- 7741,7751 ----
  .Ve
  .Sp
  As another example, the following call to \f(CW\*(C`strncpy\*(C'\fR results in copying
! to \f(CW\*(C`d\*(C'\fR just the characters preceding the terminating NUL, without
! appending the NUL to the end.  Assuming the result of \f(CW\*(C`strncpy\*(C'\fR is
! necessarily a NUL\-terminated string is a common mistake, and so the call
  is diagnosed.  To avoid the warning when the result is not expected to be
! NUL\-terminated, call \f(CW\*(C`memcpy\*(C'\fR instead.
  .Sp
  .Vb 4
  \&        void copy (char *d, const char *s)
*************** NUL-terminated, call \f(CW\*(C`memcpy\*(
*** 7824,7830 ****
  In the following example, the call to \f(CW\*(C`strncpy\*(C'\fR specifies the size
  of the destination buffer as the bound.  If the length of the source
  string is equal to or greater than this size the result of the copy will
! not be NUL-terminated.  Therefore, the call is also diagnosed.  To avoid
  the warning, specify \f(CW\*(C`sizeof buf \- 1\*(C'\fR as the bound and set the last
  element of the buffer to \f(CW\*(C`NUL\*(C'\fR.
  .Sp
--- 7757,7763 ----
  In the following example, the call to \f(CW\*(C`strncpy\*(C'\fR specifies the size
  of the destination buffer as the bound.  If the length of the source
  string is equal to or greater than this size the result of the copy will
! not be NUL\-terminated.  Therefore, the call is also diagnosed.  To avoid
  the warning, specify \f(CW\*(C`sizeof buf \- 1\*(C'\fR as the bound and set the last
  element of the buffer to \f(CW\*(C`NUL\*(C'\fR.
  .Sp
*************** of bytes with no terminating \f(CW\*(C`N
*** 7842,7854 ****
  with attribute \f(CW\*(C`nonstring\*(C'\fR to avoid this warning.  Such arrays,
  however, are not suitable arguments to functions that expect
  \&\f(CW\*(C`NUL\*(C'\fR\-terminated strings.  To help detect accidental misuses of
! such arrays \s-1GCC\s0 issues warnings unless it can prove that the use is
  safe.
! .IP "\fB\-Wstrict\-flex\-arrays\fR (C and \*(C+ only)" 4
! .IX Item "-Wstrict-flex-arrays (C and only)"
  Warn about improper usages of flexible array members
! according to the \fIlevel\fR of the \f(CW\*(C`strict_flex_array (\f(CIlevel\f(CW)\*(C'\fR
! attribute attached to the trailing array field of a structure if it's
  available, otherwise according to the \fIlevel\fR of the option
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR.    \f(CW\*(C`\-Wstrict\-flex\-arrays\*(C'\fR
  is effective only when \fIlevel\fR is greater than 0.
--- 7775,7787 ----
  with attribute \f(CW\*(C`nonstring\*(C'\fR to avoid this warning.  Such arrays,
  however, are not suitable arguments to functions that expect
  \&\f(CW\*(C`NUL\*(C'\fR\-terminated strings.  To help detect accidental misuses of
! such arrays GCC issues warnings unless it can prove that the use is
  safe.
! .IP "\fB\-Wstrict\-flex\-arrays\fR (C and C++ only)" 4
! .IX Item "-Wstrict-flex-arrays (C and C++ only)"
  Warn about improper usages of flexible array members
! according to the \fIlevel\fR of the \f(CW\*(C`strict_flex_array (\fR\f(CIlevel\fR\f(CW)\*(C'\fR
! attribute attached to the trailing array field of a structure if it\*(Aqs
  available, otherwise according to the \fIlevel\fR of the option
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR.    \f(CW\*(C`\-Wstrict\-flex\-arrays\*(C'\fR
  is effective only when \fIlevel\fR is greater than 0.
*************** of a structure that have 2 or more eleme
*** 7858,7988 ****
  as a flexible array member.
  .Sp
  When \fIlevel\fR=2, in addition to \fIlevel\fR=1, additional warnings are
! issued for a trailing one-element array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  When \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings are
! issued for a trailing zero-length array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  This option is more effective when \fB\-ftree\-vrp\fR is active (the
  default for \fB\-O2\fR and above) but some warnings may be diagnosed
  even without optimization.
! .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBcold\fR|\fBmalloc\fR]\fBreturns_nonnull\fR|" 4
  .IX Item "-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]returns_nonnull|"
  Warn for cases where adding an attribute may be beneficial. The
  attributes currently supported are listed below.
  .RS 4
! .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
  .IX Item "-Wsuggest-attribute=pure"
  .PD 0
! .IP "\fB\-Wsuggest\-attribute=const\fR" 4
  .IX Item "-Wsuggest-attribute=const"
! .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
  .IX Item "-Wsuggest-attribute=noreturn"
! .IP "\fB\-Wmissing\-noreturn\fR" 4
  .IX Item "-Wmissing-noreturn"
! .IP "\fB\-Wsuggest\-attribute=malloc\fR" 4
  .IX Item "-Wsuggest-attribute=malloc"
! .IP "\fB\-Wsuggest\-attribute=returns_nonnull\fR" 4
  .IX Item "-Wsuggest-attribute=returns_nonnull"
! .IP "\fB\-Wno\-suggest\-attribute=returns_nonnull\fR" 4
  .IX Item "-Wno-suggest-attribute=returns_nonnull"
  .PD
  Warn about functions that might be candidates for attributes
  \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`returns_nonnull\*(C'\fR. The compiler
  only warns for functions visible in other compilation units or (in the case of
  \&\f(CW\*(C`pure\*(C'\fR and \f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns
! normally. A function returns normally if it doesn't contain an infinite loop or
  return abnormally by throwing, calling \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis
  requires option \fB\-fipa\-pure\-const\fR, which is enabled by default at
  \&\fB\-O\fR and higher.  Higher optimization levels improve the accuracy
  of the analysis.
! .IP "\fB\-Wsuggest\-attribute=format\fR" 4
  .IX Item "-Wsuggest-attribute=format"
  .PD 0
! .IP "\fB\-Wmissing\-format\-attribute\fR" 4
  .IX Item "-Wmissing-format-attribute"
  .PD
  Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
  attributes.  Note these are only possible candidates, not absolute ones.
! \&\s-1GCC\s0 guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
  are used in assignment, initialization, parameter passing or return
  statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
! resulting type.  I.e. the left-hand side of the assignment or
  initialization, the type of the parameter variable, or the return type
  of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
  attribute to avoid the warning.
  .Sp
! \&\s-1GCC\s0 also warns about function definitions that might be
  candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
! possible candidates.  \s-1GCC\s0 guesses that \f(CW\*(C`format\*(C'\fR attributes
  might be appropriate for any function that calls a function like
  \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
  case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
  appropriate may not be detected.
! .IP "\fB\-Wsuggest\-attribute=cold\fR" 4
  .IX Item "-Wsuggest-attribute=cold"
  Warn about functions that might be candidates for \f(CW\*(C`cold\*(C'\fR attribute.  This
  is based on static detection and generally only warns about functions which
  always leads to a call to another \f(CW\*(C`cold\*(C'\fR function such as wrappers of
! \&\*(C+ \f(CW\*(C`throw\*(C'\fR or fatal error reporting functions leading to \f(CW\*(C`abort\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Walloc\-size\fR" 4
  .IX Item "-Walloc-size"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR that specify insufficient size for the target type of
! the pointer the result is assigned to, including those to the built-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR,
  \&\f(CW\*(C`calloc\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.
! .IP "\fB\-Walloc\-zero\fR" 4
  .IX Item "-Walloc-zero"
  Warn about calls to allocation functions decorated with attribute
! \&\f(CW\*(C`alloc_size\*(C'\fR that specify zero bytes, including those to the built-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.  Because the behavior of these functions
  when called with a zero size differs among implementations (and in the case
  of \f(CW\*(C`realloc\*(C'\fR has been deprecated) relying on it may result in subtle
  portability bugs and should be avoided.
! .IP "\fB\-Wcalloc\-transposed\-args\fR" 4
  .IX Item "-Wcalloc-transposed-args"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR with two arguments, which use \f(CW\*(C`sizeof\*(C'\fR operator
! as the earlier size argument and don't use it as the later size argument.
  This is a coding style warning.  The first argument to \f(CW\*(C`calloc\*(C'\fR is
  documented to be number of elements in array, while the second argument
! is size of each element, so \f(CW\*(C`calloc (\f(CIn\f(CW, sizeof (int))\*(C'\fR is preferred
! over \f(CW\*(C`calloc (sizeof (int), \f(CIn\f(CW)\*(C'\fR.  If \f(CW\*(C`sizeof\*(C'\fR in the earlier
  argument and not the latter is intentional, the warning can be suppressed
! by using \f(CW\*(C`calloc (sizeof (struct \f(CIS\f(CW) + 0, n)\*(C'\fR or
! \&\f(CW\*(C`calloc (1 * sizeof (struct \f(CIS\f(CW), 4)\*(C'\fR or using \f(CW\*(C`sizeof\*(C'\fR in the
  later argument as well.
! .IP "\fB\-Walloc\-size\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Walloc-size-larger-than=byte-size"
  Warn about calls to functions decorated with attribute \f(CW\*(C`alloc_size\*(C'\fR
  that attempt to allocate objects larger than the specified number of bytes,
  or where the result of the size computation in an integer type with infinite
! precision would exceed the value of \fB\s-1PTRDIFF_MAX\s0\fR on the target.
! \&\fB\-Walloc\-size\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
  \&\fB\-Wno\-alloc\-size\-larger\-than\fR.
! .IP "\fB\-Wno\-alloc\-size\-larger\-than\fR" 4
  .IX Item "-Wno-alloc-size-larger-than"
  Disable \fB\-Walloc\-size\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloc\-size\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or
  larger.
! .IP "\fB\-Walloca\fR" 4
  .IX Item "-Walloca"
  This option warns on all uses of \f(CW\*(C`alloca\*(C'\fR in the source.
! .IP "\fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Walloca-larger-than=byte-size"
  This option warns on calls to \f(CW\*(C`alloca\*(C'\fR with an integer argument whose
  value is either zero, or that is not bounded by a controlling predicate
! that limits its value to at most \fIbyte-size\fR.  It also warns for calls
! to \f(CW\*(C`alloca\*(C'\fR where the bound value is unknown.  Arguments of non-integer
  types are considered unbounded even if they appear to be constrained to
  the expected range.
  .Sp
--- 7791,7921 ----
  as a flexible array member.
  .Sp
  When \fIlevel\fR=2, in addition to \fIlevel\fR=1, additional warnings are
! issued for a trailing one\-element array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  When \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings are
! issued for a trailing zero\-length array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  This option is more effective when \fB\-ftree\-vrp\fR is active (the
  default for \fB\-O2\fR and above) but some warnings may be diagnosed
  even without optimization.
! .IP \fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBcold\fR|\fBmalloc\fR]\fBreturns_nonnull\fR| 4
  .IX Item "-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]returns_nonnull|"
  Warn for cases where adding an attribute may be beneficial. The
  attributes currently supported are listed below.
  .RS 4
! .IP \fB\-Wsuggest\-attribute=pure\fR 4
  .IX Item "-Wsuggest-attribute=pure"
  .PD 0
! .IP \fB\-Wsuggest\-attribute=const\fR 4
  .IX Item "-Wsuggest-attribute=const"
! .IP \fB\-Wsuggest\-attribute=noreturn\fR 4
  .IX Item "-Wsuggest-attribute=noreturn"
! .IP \fB\-Wmissing\-noreturn\fR 4
  .IX Item "-Wmissing-noreturn"
! .IP \fB\-Wsuggest\-attribute=malloc\fR 4
  .IX Item "-Wsuggest-attribute=malloc"
! .IP \fB\-Wsuggest\-attribute=returns_nonnull\fR 4
  .IX Item "-Wsuggest-attribute=returns_nonnull"
! .IP \fB\-Wno\-suggest\-attribute=returns_nonnull\fR 4
  .IX Item "-Wno-suggest-attribute=returns_nonnull"
  .PD
  Warn about functions that might be candidates for attributes
  \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`returns_nonnull\*(C'\fR. The compiler
  only warns for functions visible in other compilation units or (in the case of
  \&\f(CW\*(C`pure\*(C'\fR and \f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns
! normally. A function returns normally if it doesn\*(Aqt contain an infinite loop or
  return abnormally by throwing, calling \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis
  requires option \fB\-fipa\-pure\-const\fR, which is enabled by default at
  \&\fB\-O\fR and higher.  Higher optimization levels improve the accuracy
  of the analysis.
! .IP \fB\-Wsuggest\-attribute=format\fR 4
  .IX Item "-Wsuggest-attribute=format"
  .PD 0
! .IP \fB\-Wmissing\-format\-attribute\fR 4
  .IX Item "-Wmissing-format-attribute"
  .PD
  Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
  attributes.  Note these are only possible candidates, not absolute ones.
! GCC guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
  are used in assignment, initialization, parameter passing or return
  statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
! resulting type.  I.e. the left\-hand side of the assignment or
  initialization, the type of the parameter variable, or the return type
  of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
  attribute to avoid the warning.
  .Sp
! GCC also warns about function definitions that might be
  candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
! possible candidates.  GCC guesses that \f(CW\*(C`format\*(C'\fR attributes
  might be appropriate for any function that calls a function like
  \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
  case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
  appropriate may not be detected.
! .IP \fB\-Wsuggest\-attribute=cold\fR 4
  .IX Item "-Wsuggest-attribute=cold"
  Warn about functions that might be candidates for \f(CW\*(C`cold\*(C'\fR attribute.  This
  is based on static detection and generally only warns about functions which
  always leads to a call to another \f(CW\*(C`cold\*(C'\fR function such as wrappers of
! C++ \f(CW\*(C`throw\*(C'\fR or fatal error reporting functions leading to \f(CW\*(C`abort\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-Walloc\-size\fR 4
  .IX Item "-Walloc-size"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR that specify insufficient size for the target type of
! the pointer the result is assigned to, including those to the built\-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR,
  \&\f(CW\*(C`calloc\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.
! .IP \fB\-Walloc\-zero\fR 4
  .IX Item "-Walloc-zero"
  Warn about calls to allocation functions decorated with attribute
! \&\f(CW\*(C`alloc_size\*(C'\fR that specify zero bytes, including those to the built\-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.  Because the behavior of these functions
  when called with a zero size differs among implementations (and in the case
  of \f(CW\*(C`realloc\*(C'\fR has been deprecated) relying on it may result in subtle
  portability bugs and should be avoided.
! .IP \fB\-Wcalloc\-transposed\-args\fR 4
  .IX Item "-Wcalloc-transposed-args"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR with two arguments, which use \f(CW\*(C`sizeof\*(C'\fR operator
! as the earlier size argument and don\*(Aqt use it as the later size argument.
  This is a coding style warning.  The first argument to \f(CW\*(C`calloc\*(C'\fR is
  documented to be number of elements in array, while the second argument
! is size of each element, so \f(CW\*(C`calloc (\fR\f(CIn\fR\f(CW, sizeof (int))\*(C'\fR is preferred
! over \f(CW\*(C`calloc (sizeof (int), \fR\f(CIn\fR\f(CW)\*(C'\fR.  If \f(CW\*(C`sizeof\*(C'\fR in the earlier
  argument and not the latter is intentional, the warning can be suppressed
! by using \f(CW\*(C`calloc (sizeof (struct \fR\f(CIS\fR\f(CW) + 0, n)\*(C'\fR or
! \&\f(CW\*(C`calloc (1 * sizeof (struct \fR\f(CIS\fR\f(CW), 4)\*(C'\fR or using \f(CW\*(C`sizeof\*(C'\fR in the
  later argument as well.
! .IP \fB\-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Walloc-size-larger-than=byte-size"
  Warn about calls to functions decorated with attribute \f(CW\*(C`alloc_size\*(C'\fR
  that attempt to allocate objects larger than the specified number of bytes,
  or where the result of the size computation in an integer type with infinite
! precision would exceed the value of \fBPTRDIFF_MAX\fR on the target.
! \&\fB\-Walloc\-size\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by
  \&\fB\-Wno\-alloc\-size\-larger\-than\fR.
! .IP \fB\-Wno\-alloc\-size\-larger\-than\fR 4
  .IX Item "-Wno-alloc-size-larger-than"
  Disable \fB\-Walloc\-size\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloc\-size\-larger\-than=\fR\fBSIZE_MAX\fR or
  larger.
! .IP \fB\-Walloca\fR 4
  .IX Item "-Walloca"
  This option warns on all uses of \f(CW\*(C`alloca\*(C'\fR in the source.
! .IP \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Walloca-larger-than=byte-size"
  This option warns on calls to \f(CW\*(C`alloca\*(C'\fR with an integer argument whose
  value is either zero, or that is not bounded by a controlling predicate
! that limits its value to at most \fIbyte\-size\fR.  It also warns for calls
! to \f(CW\*(C`alloca\*(C'\fR where the bound value is unknown.  Arguments of non\-integer
  types are considered unbounded even if they appear to be constrained to
  the expected range.
  .Sp
*************** expected argument to be implicitly cast
*** 8038,8053 ****
  .Sp
  This option also warns when \f(CW\*(C`alloca\*(C'\fR is used in a loop.
  .Sp
! \&\fB\-Walloca\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default
  but is usually only effective  when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Wvla\-larger\-than=\fR\fBbyte-size\fR.
! .IP "\fB\-Wno\-alloca\-larger\-than\fR" 4
  .IX Item "-Wno-alloca-larger-than"
  Disable \fB\-Walloca\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloca\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Warith\-conversion\fR" 4
  .IX Item "-Warith-conversion"
  Do warn about implicit conversions from arithmetic operations even
  when conversion of the operands to the same type cannot change their
--- 7971,7986 ----
  .Sp
  This option also warns when \f(CW\*(C`alloca\*(C'\fR is used in a loop.
  .Sp
! \&\fB\-Walloca\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default
  but is usually only effective  when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Wvla\-larger\-than=\fR\fBbyte\-size\fR.
! .IP \fB\-Wno\-alloca\-larger\-than\fR 4
  .IX Item "-Wno-alloca-larger-than"
  Disable \fB\-Walloca\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloca\-larger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Warith\-conversion\fR 4
  .IX Item "-Warith-conversion"
  Do warn about implicit conversions from arithmetic operations even
  when conversion of the operands to the same type cannot change their
*************** values.  This affects warnings from \fB\
*** 8061,8070 ****
  \&          c = c + 1; // only warns with B<\-Warith\-conversion>
  \&        }
  .Ve
! .IP "\fB\-Warray\-bounds\fR" 4
  .IX Item "-Warray-bounds"
  .PD 0
! .IP "\fB\-Warray\-bounds=\fR\fIn\fR" 4
  .IX Item "-Warray-bounds=n"
  .PD
  Warn about out of bounds subscripts or offsets into arrays.  This warning
--- 7994,8003 ----
  \&          c = c + 1; // only warns with B<\-Warith\-conversion>
  \&        }
  .Ve
! .IP \fB\-Warray\-bounds\fR 4
  .IX Item "-Warray-bounds"
  .PD 0
! .IP \fB\-Warray\-bounds=\fR\fIn\fR 4
  .IX Item "-Warray-bounds=n"
  .PD
  Warn about out of bounds subscripts or offsets into arrays.  This warning
*************** are issued even without optimization.
*** 8075,8083 ****
  By default, the trailing array of a structure will be treated as a flexible
  array member by \fB\-Warray\-bounds\fR or \fB\-Warray\-bounds=\fR\fIn\fR
  if it is declared as either a flexible array member per C99 standard onwards
! (\fB[]\fR), a \s-1GCC\s0 zero-length array extension (\fB[0]\fR), or an one-element
  array (\fB[1]\fR). As a result, out of bounds subscripts or offsets into
! zero-length arrays or one-element arrays are not warned by default.
  .Sp
  You can add the option \fB\-fstrict\-flex\-arrays\fR or
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR to control how this
--- 8008,8016 ----
  By default, the trailing array of a structure will be treated as a flexible
  array member by \fB\-Warray\-bounds\fR or \fB\-Warray\-bounds=\fR\fIn\fR
  if it is declared as either a flexible array member per C99 standard onwards
! (\fB[]\fR), a GCC zero\-length array extension (\fB[0]\fR), or an one\-element
  array (\fB[1]\fR). As a result, out of bounds subscripts or offsets into
! zero\-length arrays or one\-element arrays are not warned by default.
  .Sp
  You can add the option \fB\-fstrict\-flex\-arrays\fR or
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR to control how this
*************** option treat trailing array of a structu
*** 8086,8101 ****
  when \fIlevel\fR<=1, no change to the default behavior.
  .Sp
  when \fIlevel\fR=2, additional warnings will be issued for out of bounds
! subscripts or offsets into one-element arrays;
  .Sp
  when \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings will be
! issued for out of bounds subscripts or offsets into zero-length arrays.
  .RS 4
! .IP "\fB\-Warray\-bounds=1\fR" 4
  .IX Item "-Warray-bounds=1"
  This is the default warning level of \fB\-Warray\-bounds\fR and is enabled
  by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
! .IP "\fB\-Warray\-bounds=2\fR" 4
  .IX Item "-Warray-bounds=2"
  This warning level also warns about the intermediate results of pointer
  arithmetic that may yield out of bounds values. This warning level may
--- 8019,8034 ----
  when \fIlevel\fR<=1, no change to the default behavior.
  .Sp
  when \fIlevel\fR=2, additional warnings will be issued for out of bounds
! subscripts or offsets into one\-element arrays;
  .Sp
  when \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings will be
! issued for out of bounds subscripts or offsets into zero\-length arrays.
  .RS 4
! .IP \fB\-Warray\-bounds=1\fR 4
  .IX Item "-Warray-bounds=1"
  This is the default warning level of \fB\-Warray\-bounds\fR and is enabled
  by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
! .IP \fB\-Warray\-bounds=2\fR 4
  .IX Item "-Warray-bounds=2"
  This warning level also warns about the intermediate results of pointer
  arithmetic that may yield out of bounds values. This warning level may
*************** give a larger number of false positives
*** 8103,8112 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Warray\-compare\fR" 4
  .IX Item "-Warray-compare"
  Warn about equality and relational comparisons between two operands of array
! type.  This comparison was deprecated in \*(C+20.  For example:
  .Sp
  .Vb 3
  \&        int arr1[5];
--- 8036,8045 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Warray\-compare\fR 4
  .IX Item "-Warray-compare"
  Warn about equality and relational comparisons between two operands of array
! type.  This comparison was deprecated in C++20.  For example:
  .Sp
  .Vb 3
  \&        int arr1[5];
*************** type.  This comparison was deprecated in
*** 8115,8129 ****
  .Ve
  .Sp
  \&\fB\-Warray\-compare\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Warray\-parameter\fR" 4
  .IX Item "-Warray-parameter"
  .PD 0
! .IP "\fB\-Warray\-parameter=\fR\fIn\fR" 4
  .IX Item "-Warray-parameter=n"
  .PD
  Warn about redeclarations of functions involving parameters of array or
  pointer types of inconsistent kinds or forms, and enable the detection
! of out-of-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
  If the first function declaration uses the array form for a parameter
--- 8048,8062 ----
  .Ve
  .Sp
  \&\fB\-Warray\-compare\fR is enabled by \fB\-Wall\fR.
! .IP \fB\-Warray\-parameter\fR 4
  .IX Item "-Warray-parameter"
  .PD 0
! .IP \fB\-Warray\-parameter=\fR\fIn\fR 4
  .IX Item "-Warray-parameter=n"
  .PD
  Warn about redeclarations of functions involving parameters of array or
  pointer types of inconsistent kinds or forms, and enable the detection
! of out\-of\-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
  If the first function declaration uses the array form for a parameter
*************** involving Variable Length Array argument
*** 8171,8191 ****
  The short form of the option \fB\-Warray\-parameter\fR is equivalent to
  \&\fB\-Warray\-parameter=2\fR.  The negative form \fB\-Wno\-array\-parameter\fR
  is equivalent to \fB\-Warray\-parameter=0\fR.
! .IP "\fB\-Wattribute\-alias=\fR\fIn\fR" 4
  .IX Item "-Wattribute-alias=n"
  .PD 0
! .IP "\fB\-Wno\-attribute\-alias\fR" 4
  .IX Item "-Wno-attribute-alias"
  .PD
  Warn about declarations using the \f(CW\*(C`alias\*(C'\fR and similar attributes whose
  target is incompatible with the type of the alias.
  .RS 4
! .IP "\fB\-Wattribute\-alias=1\fR" 4
  .IX Item "-Wattribute-alias=1"
  The default warning level of the \fB\-Wattribute\-alias\fR option diagnoses
  incompatibilities between the type of the alias declaration and that of its
  target.  Such incompatibilities are typically indicative of bugs.
! .IP "\fB\-Wattribute\-alias=2\fR" 4
  .IX Item "-Wattribute-alias=2"
  At this level \fB\-Wattribute\-alias\fR also diagnoses cases where
  the attributes of the alias declaration are more restrictive than the
--- 8104,8124 ----
  The short form of the option \fB\-Warray\-parameter\fR is equivalent to
  \&\fB\-Warray\-parameter=2\fR.  The negative form \fB\-Wno\-array\-parameter\fR
  is equivalent to \fB\-Warray\-parameter=0\fR.
! .IP \fB\-Wattribute\-alias=\fR\fIn\fR 4
  .IX Item "-Wattribute-alias=n"
  .PD 0
! .IP \fB\-Wno\-attribute\-alias\fR 4
  .IX Item "-Wno-attribute-alias"
  .PD
  Warn about declarations using the \f(CW\*(C`alias\*(C'\fR and similar attributes whose
  target is incompatible with the type of the alias.
  .RS 4
! .IP \fB\-Wattribute\-alias=1\fR 4
  .IX Item "-Wattribute-alias=1"
  The default warning level of the \fB\-Wattribute\-alias\fR option diagnoses
  incompatibilities between the type of the alias declaration and that of its
  target.  Such incompatibilities are typically indicative of bugs.
! .IP \fB\-Wattribute\-alias=2\fR 4
  .IX Item "-Wattribute-alias=2"
  At this level \fB\-Wattribute\-alias\fR also diagnoses cases where
  the attributes of the alias declaration are more restrictive than the
*************** Attributes considered include \f(CW\*(C`
*** 8207,8222 ****
  This is the default.  You can disable these warnings with either
  \&\fB\-Wno\-attribute\-alias\fR or \fB\-Wattribute\-alias=0\fR.
  .RE
! .IP "\fB\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR]" 4
  .IX Item "-Wbidi-chars=[none|unpaired|any|ucn]"
! Warn about possibly misleading \s-1UTF\-8\s0 bidirectional control characters in
  comments, string literals, character constants, and identifiers.  Such
! characters can change left-to-right writing direction into right-to-left
  (and vice versa), which can cause confusion between the logical order and
  visual order.  This may be dangerous; for instance, it may seem that a piece
  of code is not commented out, whereas it in fact is.
  .Sp
! There are three levels of warning supported by \s-1GCC.\s0  The default is
  \&\fB\-Wbidi\-chars=unpaired\fR, which warns about improperly terminated
  bidi contexts.  \fB\-Wbidi\-chars=none\fR turns the warning off.
  \&\fB\-Wbidi\-chars=any\fR warns about any use of bidirectional control
--- 8140,8155 ----
  This is the default.  You can disable these warnings with either
  \&\fB\-Wno\-attribute\-alias\fR or \fB\-Wattribute\-alias=0\fR.
  .RE
! .IP \fB\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR] 4
  .IX Item "-Wbidi-chars=[none|unpaired|any|ucn]"
! Warn about possibly misleading UTF\-8 bidirectional control characters in
  comments, string literals, character constants, and identifiers.  Such
! characters can change left\-to\-right writing direction into right\-to\-left
  (and vice versa), which can cause confusion between the logical order and
  visual order.  This may be dangerous; for instance, it may seem that a piece
  of code is not commented out, whereas it in fact is.
  .Sp
! There are three levels of warning supported by GCC.  The default is
  \&\fB\-Wbidi\-chars=unpaired\fR, which warns about improperly terminated
  bidi contexts.  \fB\-Wbidi\-chars=none\fR turns the warning off.
  \&\fB\-Wbidi\-chars=any\fR warns about any use of bidirectional control
*************** to turn on such checking by using \fB\-W
*** 8227,8233 ****
  \&\fB\-Wbidi\-chars=any,ucn\fR.  Using \fB\-Wbidi\-chars=ucn\fR is valid,
  and is equivalent to \fB\-Wbidi\-chars=unpaired,ucn\fR, if no previous
  \&\fB\-Wbidi\-chars=any\fR was specified.
! .IP "\fB\-Wbool\-compare\fR" 4
  .IX Item "-Wbool-compare"
  Warn about boolean expression compared with an integer value different from
  \&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
--- 8160,8166 ----
  \&\fB\-Wbidi\-chars=any,ucn\fR.  Using \fB\-Wbidi\-chars=ucn\fR is valid,
  and is equivalent to \fB\-Wbidi\-chars=unpaired,ucn\fR, if no previous
  \&\fB\-Wbidi\-chars=any\fR was specified.
! .IP \fB\-Wbool\-compare\fR 4
  .IX Item "-Wbool-compare"
  Warn about boolean expression compared with an integer value different from
  \&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
*************** always false:
*** 8240,8257 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wbool\-operation\fR" 4
  .IX Item "-Wbool-operation"
  Warn about suspicious operations on expressions of a boolean type.  For
  instance, bitwise negation of a boolean is very likely a bug in the program.
  For C, this warning also warns about incrementing or decrementing a boolean,
! which rarely makes sense.  (In \*(C+, decrementing a boolean is always invalid.
! Incrementing a boolean is invalid in \*(C+17, and deprecated otherwise.)
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wduplicated\-branches\fR" 4
  .IX Item "-Wduplicated-branches"
! Warn when an if-else has identical branches.  This warning detects cases like
  .Sp
  .Vb 4
  \&        if (p != NULL)
--- 8173,8190 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wbool\-operation\fR 4
  .IX Item "-Wbool-operation"
  Warn about suspicious operations on expressions of a boolean type.  For
  instance, bitwise negation of a boolean is very likely a bug in the program.
  For C, this warning also warns about incrementing or decrementing a boolean,
! which rarely makes sense.  (In C++, decrementing a boolean is always invalid.
! Incrementing a boolean is invalid in C++17, and deprecated otherwise.)
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wduplicated\-branches\fR 4
  .IX Item "-Wduplicated-branches"
! Warn when an if\-else has identical branches.  This warning detects cases like
  .Sp
  .Vb 4
  \&        if (p != NULL)
*************** Warn when an if-else has identical branc
*** 8260,8328 ****
  \&          return 0;
  .Ve
  .Sp
! It doesn't warn when both branches contain just a null statement.  This warning
  also warn for conditional operators:
  .Sp
  .Vb 1
  \&          int i = x ? *p : *p;
  .Ve
! .IP "\fB\-Wduplicated\-cond\fR" 4
  .IX Item "-Wduplicated-cond"
! Warn about duplicated conditions in an if-else-if chain.  For instance,
  warn for the following code:
  .Sp
  .Vb 2
  \&        if (p\->q != NULL) { ... }
  \&        else if (p\->q != NULL) { ... }
  .Ve
! .IP "\fB\-Wframe\-address\fR" 4
  .IX Item "-Wframe-address"
  Warn when the \fB_\|_builtin_frame_address\fR or \fB_\|_builtin_return_address\fR
  is called with an argument greater than 0.  Such calls may return indeterminate
  values or crash the program.  The warning is included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective-C only)" 4
  .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on pointers are being discarded.
  Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
  passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
  can be used to suppress such a warning.
! .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective-C only)" 4
  .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on arrays which are pointer targets
  are being discarded.  Typically, the compiler warns if a
  \&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
  takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
  suppress such a warning.
! .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective-C only)" 4
  .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
  Do not warn when there is a conversion between pointers that have incompatible
  types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
  which warns for pointer argument passing or assignment with different
  signedness.
  .Sp
! By default, in C99 and later dialects of C, \s-1GCC\s0 treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=incompatible\-pointer\-types\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-int\-conversion\fR (C and Objective-C only)" 4
  .IX Item "-Wno-int-conversion (C and Objective-C only)"
  Do not warn about incompatible integer to pointer and pointer to integer
  conversions.  This warning is about implicit conversions; for explicit
  conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
  \&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
  .Sp
! By default, in C99 and later dialects of C, \s-1GCC\s0 treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=int\-conversion\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wzero\-length\-bounds\fR" 4
  .IX Item "-Wzero-length-bounds"
! Warn about accesses to elements of zero-length array members that might
! overlap other members of the same object.  Declaring interior zero-length
  arrays is discouraged because accesses to them are undefined.
  .Sp
  For example, the first two stores in function \f(CW\*(C`bad\*(C'\fR are diagnosed
--- 8193,8261 ----
  \&          return 0;
  .Ve
  .Sp
! It doesn\*(Aqt warn when both branches contain just a null statement.  This warning
  also warn for conditional operators:
  .Sp
  .Vb 1
  \&          int i = x ? *p : *p;
  .Ve
! .IP \fB\-Wduplicated\-cond\fR 4
  .IX Item "-Wduplicated-cond"
! Warn about duplicated conditions in an if\-else\-if chain.  For instance,
  warn for the following code:
  .Sp
  .Vb 2
  \&        if (p\->q != NULL) { ... }
  \&        else if (p\->q != NULL) { ... }
  .Ve
! .IP \fB\-Wframe\-address\fR 4
  .IX Item "-Wframe-address"
  Warn when the \fB_\|_builtin_frame_address\fR or \fB_\|_builtin_return_address\fR
  is called with an argument greater than 0.  Such calls may return indeterminate
  values or crash the program.  The warning is included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on pointers are being discarded.
  Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
  passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
  can be used to suppress such a warning.
! .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on arrays which are pointer targets
  are being discarded.  Typically, the compiler warns if a
  \&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
  takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
  suppress such a warning.
! .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
  Do not warn when there is a conversion between pointers that have incompatible
  types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
  which warns for pointer argument passing or assignment with different
  signedness.
  .Sp
! By default, in C99 and later dialects of C, GCC treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=incompatible\-pointer\-types\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-int\-conversion\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-int-conversion (C and Objective-C only)"
  Do not warn about incompatible integer to pointer and pointer to integer
  conversions.  This warning is about implicit conversions; for explicit
  conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
  \&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
  .Sp
! By default, in C99 and later dialects of C, GCC treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=int\-conversion\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wzero\-length\-bounds\fR 4
  .IX Item "-Wzero-length-bounds"
! Warn about accesses to elements of zero\-length array members that might
! overlap other members of the same object.  Declaring interior zero\-length
  arrays is discouraged because accesses to them are undefined.
  .Sp
  For example, the first two stores in function \f(CW\*(C`bad\*(C'\fR are diagnosed
*************** because it is beyond the bounds of the e
*** 8343,8366 ****
  .Ve
  .Sp
  Option \fB\-Wzero\-length\-bounds\fR is enabled by \fB\-Warray\-bounds\fR.
! .IP "\fB\-Wno\-div\-by\-zero\fR" 4
  .IX Item "-Wno-div-by-zero"
! Do not warn about compile-time integer division by zero.  Floating-point
  division by zero is not warned about, as it can be a legitimate way of
  obtaining infinities and NaNs.
! .IP "\fB\-Wsystem\-headers\fR" 4
  .IX Item "-Wsystem-headers"
  Print warning messages for constructs found in system header files.
  Warnings from system headers are normally suppressed, on the assumption
  that they usually do not indicate real problems and would only make the
! compiler output harder to read.  Using this command-line option tells
! \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
  code.  However, note that using \fB\-Wall\fR in conjunction with this
  option does \fInot\fR warn about unknown pragmas in system
  headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
! .IP "\fB\-Wtautological\-compare\fR" 4
  .IX Item "-Wtautological-compare"
! Warn if a self-comparison always evaluates to true or false.  This
  warning detects various mistakes such as:
  .Sp
  .Vb 3
--- 8276,8299 ----
  .Ve
  .Sp
  Option \fB\-Wzero\-length\-bounds\fR is enabled by \fB\-Warray\-bounds\fR.
! .IP \fB\-Wno\-div\-by\-zero\fR 4
  .IX Item "-Wno-div-by-zero"
! Do not warn about compile\-time integer division by zero.  Floating\-point
  division by zero is not warned about, as it can be a legitimate way of
  obtaining infinities and NaNs.
! .IP \fB\-Wsystem\-headers\fR 4
  .IX Item "-Wsystem-headers"
  Print warning messages for constructs found in system header files.
  Warnings from system headers are normally suppressed, on the assumption
  that they usually do not indicate real problems and would only make the
! compiler output harder to read.  Using this command\-line option tells
! GCC to emit warnings from system headers as if they occurred in user
  code.  However, note that using \fB\-Wall\fR in conjunction with this
  option does \fInot\fR warn about unknown pragmas in system
  headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
! .IP \fB\-Wtautological\-compare\fR 4
  .IX Item "-Wtautological-compare"
! Warn if a self\-comparison always evaluates to true or false.  This
  warning detects various mistakes such as:
  .Sp
  .Vb 3
*************** to true or false, for instance:
*** 8379,8385 ****
  will always be false.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wtrampolines\fR" 4
  .IX Item "-Wtrampolines"
  Warn about trampolines generated for pointers to nested functions.
  A trampoline is a small piece of data or code that is created at run
--- 8312,8318 ----
  will always be false.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wtrampolines\fR 4
  .IX Item "-Wtrampolines"
  Warn about trampolines generated for pointers to nested functions.
  A trampoline is a small piece of data or code that is created at run
*************** used to call the nested function indirec
*** 8388,8418 ****
  made up of data only and thus requires no special treatment.  But, for
  most targets, it is made up of code and thus requires the stack to be
  made executable in order for the program to work properly.
! .IP "\fB\-Wfloat\-equal\fR" 4
  .IX Item "-Wfloat-equal"
! Warn if floating-point values are used in equality comparisons.
  .Sp
  The idea behind this is that sometimes it is convenient (for the
! programmer) to consider floating-point values as approximations to
  infinitely precise real numbers.  If you are doing this, then you need
  to compute (by analyzing the code, or in some other way) the maximum or
  likely maximum error that the computation introduces, and allow for it
! when performing comparisons (and when producing output, but that's a
  different problem).  In particular, instead of testing for equality, you
  should check to see whether the two values have ranges that overlap; and
  this is done with the relational operators, so equality comparisons are
  probably mistaken.
! .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
  .IX Item "-Wtraditional (C and Objective-C only)"
  Warn about certain constructs that behave differently in traditional and
! \&\s-1ISO C.\s0  Also warn about \s-1ISO C\s0 constructs that have no traditional C
  equivalent, and/or problematic constructs that should be avoided.
  .RS 4
! .IP "*" 4
  Macro parameters that appear within string literals in the macro body.
  In traditional C macro replacement takes place within string literals,
! but in \s-1ISO C\s0 it does not.
! .IP "*" 4
  In traditional C, some preprocessor directives did not exist.
  Traditional preprocessors only considered a line to be a directive
  if the \fB#\fR appeared in column 1 on the line.  Therefore
--- 8321,8351 ----
  made up of data only and thus requires no special treatment.  But, for
  most targets, it is made up of code and thus requires the stack to be
  made executable in order for the program to work properly.
! .IP \fB\-Wfloat\-equal\fR 4
  .IX Item "-Wfloat-equal"
! Warn if floating\-point values are used in equality comparisons.
  .Sp
  The idea behind this is that sometimes it is convenient (for the
! programmer) to consider floating\-point values as approximations to
  infinitely precise real numbers.  If you are doing this, then you need
  to compute (by analyzing the code, or in some other way) the maximum or
  likely maximum error that the computation introduces, and allow for it
! when performing comparisons (and when producing output, but that\*(Aqs a
  different problem).  In particular, instead of testing for equality, you
  should check to see whether the two values have ranges that overlap; and
  this is done with the relational operators, so equality comparisons are
  probably mistaken.
! .IP "\fB\-Wtraditional\fR (C and Objective\-C only)" 4
  .IX Item "-Wtraditional (C and Objective-C only)"
  Warn about certain constructs that behave differently in traditional and
! ISO C.  Also warn about ISO C constructs that have no traditional C
  equivalent, and/or problematic constructs that should be avoided.
  .RS 4
! .IP * 4
  Macro parameters that appear within string literals in the macro body.
  In traditional C macro replacement takes place within string literals,
! but in ISO C it does not.
! .IP * 4
  In traditional C, some preprocessor directives did not exist.
  Traditional preprocessors only considered a line to be a directive
  if the \fB#\fR appeared in column 1 on the line.  Therefore
*************** first character on the line.  It also su
*** 8422,8522 ****
  \&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
  traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
  suggests avoiding it altogether.
! .IP "*" 4
! A function-like macro that appears without arguments.
! .IP "*" 4
  The unary plus operator.
! .IP "*" 4
! The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
  constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
  constants.)  Note, these suffixes appear in macros defined in the system
  headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
  Use of these macros in user code might normally lead to spurious
! warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
  avoid warning in these cases.
! .IP "*" 4
  A function declared external in one block and then used after the end of
  the block.
! .IP "*" 4
  A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
! .IP "*" 4
  A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
  This construct is not accepted by some traditional C compilers.
! .IP "*" 4
! The \s-1ISO\s0 type of an integer constant has a different width or
  signedness from its traditional type.  This warning is only issued if
  the base of the constant is ten.  I.e. hexadecimal or octal values, which
  typically represent bit patterns, are not warned about.
! .IP "*" 4
! Usage of \s-1ISO\s0 string concatenation is detected.
! .IP "*" 4
  Initialization of automatic aggregates.
! .IP "*" 4
  Identifier conflicts with labels.  Traditional C lacks a separate
  namespace for labels.
! .IP "*" 4
  Initialization of unions.  If the initializer is zero, the warning is
  omitted.  This is done under the assumption that the zero initializer in
  user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
  initializer warnings and relies on default initialization to zero in the
  traditional C case.
! .IP "*" 4
  Conversions by prototypes between fixed/floating\-point values and vice
  versa.  The absence of these prototypes when compiling with traditional
  C causes serious problems.  This is a subset of the possible
  conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
! .IP "*" 4
! Use of \s-1ISO C\s0 style function definitions.  This warning intentionally is
  \&\fInot\fR issued for prototype declarations or variadic functions
! because these \s-1ISO C\s0 features appear in your code when using
! libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
  \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
! because that feature is already a \s-1GCC\s0 extension and thus not relevant to
  traditional C compatibility.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
  .IX Item "-Wtraditional-conversion (C and Objective-C only)"
  Warn if a prototype causes a type conversion that is different from what
  would happen to the same argument in the absence of a prototype.  This
  includes conversions of fixed point to floating and vice versa, and
! conversions changing the width or signedness of a fixed-point argument
  except when the same as the default promotion.
! .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
  .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
  Warn when a declaration is found after a statement in a block.  This
! construct, known from \*(C+, was introduced with \s-1ISO C99\s0 and is by default
! allowed in \s-1GCC.\s0  It is not supported by \s-1ISO C90.\s0
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wshadow\fR" 4
  .IX Item "-Wshadow"
  Warn whenever a local variable or type declaration shadows another
! variable, parameter, type, class member (in \*(C+), or instance variable
! (in Objective-C) or whenever a built-in function is shadowed.  Note
! that in \*(C+, the compiler warns if a local variable shadows an
  explicit typedef, but not if it shadows a struct/class/enum.
  If this warning is enabled, it includes also all instances of
  local shadowing.  This means that \fB\-Wno\-shadow=local\fR
  and \fB\-Wno\-shadow=compatible\-local\fR are ignored when
  \&\fB\-Wshadow\fR is used.
  Same as \fB\-Wshadow=global\fR.
! .IP "\fB\-Wno\-shadow\-ivar\fR (Objective-C only)" 4
  .IX Item "-Wno-shadow-ivar (Objective-C only)"
  Do not warn whenever a local variable shadows an instance variable in an
! Objective-C method.
! .IP "\fB\-Wshadow=global\fR" 4
  .IX Item "-Wshadow=global"
  Warn for any shadowing.
  Same as \fB\-Wshadow\fR.
! .IP "\fB\-Wshadow=local\fR" 4
  .IX Item "-Wshadow=local"
  Warn when a local variable shadows another local variable or parameter.
! .IP "\fB\-Wshadow=compatible\-local\fR" 4
  .IX Item "-Wshadow=compatible-local"
  Warn when a local variable shadows another local variable or parameter
! whose type is compatible with that of the shadowing variable.  In \*(C+,
  type compatibility here means the type of the shadowing variable can be
  converted to that of the shadowed variable.  The creation of this flag
  (in addition to \fB\-Wshadow=local\fR) is based on the idea that when
--- 8355,8455 ----
  \&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
  traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
  suggests avoiding it altogether.
! .IP * 4
! A function\-like macro that appears without arguments.
! .IP * 4
  The unary plus operator.
! .IP * 4
! The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating\-point
  constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
  constants.)  Note, these suffixes appear in macros defined in the system
  headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
  Use of these macros in user code might normally lead to spurious
! warnings, however GCC\*(Aqs integrated preprocessor has enough context to
  avoid warning in these cases.
! .IP * 4
  A function declared external in one block and then used after the end of
  the block.
! .IP * 4
  A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
! .IP * 4
  A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
  This construct is not accepted by some traditional C compilers.
! .IP * 4
! The ISO type of an integer constant has a different width or
  signedness from its traditional type.  This warning is only issued if
  the base of the constant is ten.  I.e. hexadecimal or octal values, which
  typically represent bit patterns, are not warned about.
! .IP * 4
! Usage of ISO string concatenation is detected.
! .IP * 4
  Initialization of automatic aggregates.
! .IP * 4
  Identifier conflicts with labels.  Traditional C lacks a separate
  namespace for labels.
! .IP * 4
  Initialization of unions.  If the initializer is zero, the warning is
  omitted.  This is done under the assumption that the zero initializer in
  user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
  initializer warnings and relies on default initialization to zero in the
  traditional C case.
! .IP * 4
  Conversions by prototypes between fixed/floating\-point values and vice
  versa.  The absence of these prototypes when compiling with traditional
  C causes serious problems.  This is a subset of the possible
  conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
! .IP * 4
! Use of ISO C style function definitions.  This warning intentionally is
  \&\fInot\fR issued for prototype declarations or variadic functions
! because these ISO C features appear in your code when using
! libiberty\*(Aqs traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
  \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
! because that feature is already a GCC extension and thus not relevant to
  traditional C compatibility.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wtraditional\-conversion\fR (C and Objective\-C only)" 4
  .IX Item "-Wtraditional-conversion (C and Objective-C only)"
  Warn if a prototype causes a type conversion that is different from what
  would happen to the same argument in the absence of a prototype.  This
  includes conversions of fixed point to floating and vice versa, and
! conversions changing the width or signedness of a fixed\-point argument
  except when the same as the default promotion.
! .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective\-C only)" 4
  .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
  Warn when a declaration is found after a statement in a block.  This
! construct, known from C++, was introduced with ISO C99 and is by default
! allowed in GCC.  It is not supported by ISO C90.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wshadow\fR 4
  .IX Item "-Wshadow"
  Warn whenever a local variable or type declaration shadows another
! variable, parameter, type, class member (in C++), or instance variable
! (in Objective\-C) or whenever a built\-in function is shadowed.  Note
! that in C++, the compiler warns if a local variable shadows an
  explicit typedef, but not if it shadows a struct/class/enum.
  If this warning is enabled, it includes also all instances of
  local shadowing.  This means that \fB\-Wno\-shadow=local\fR
  and \fB\-Wno\-shadow=compatible\-local\fR are ignored when
  \&\fB\-Wshadow\fR is used.
  Same as \fB\-Wshadow=global\fR.
! .IP "\fB\-Wno\-shadow\-ivar\fR (Objective\-C only)" 4
  .IX Item "-Wno-shadow-ivar (Objective-C only)"
  Do not warn whenever a local variable shadows an instance variable in an
! Objective\-C method.
! .IP \fB\-Wshadow=global\fR 4
  .IX Item "-Wshadow=global"
  Warn for any shadowing.
  Same as \fB\-Wshadow\fR.
! .IP \fB\-Wshadow=local\fR 4
  .IX Item "-Wshadow=local"
  Warn when a local variable shadows another local variable or parameter.
! .IP \fB\-Wshadow=compatible\-local\fR 4
  .IX Item "-Wshadow=compatible-local"
  Warn when a local variable shadows another local variable or parameter
! whose type is compatible with that of the shadowing variable.  In C++,
  type compatibility here means the type of the shadowing variable can be
  converted to that of the shadowed variable.  The creation of this flag
  (in addition to \fB\-Wshadow=local\fR) is based on the idea that when
*************** Note that this also means that shadowing
*** 8544,8583 ****
  \&\f(CW\*(C`char *i\*(C'\fR does not emit a warning.
  .Sp
  This warning is also enabled by \fB\-Wshadow=local\fR.
! .IP "\fB\-Wlarger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Wlarger-than=byte-size"
! Warn whenever an object is defined whose size exceeds \fIbyte-size\fR.
! \&\fB\-Wlarger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by \fB\-Wno\-larger\-than\fR.
  .Sp
  Also warn for calls to bounded functions such as \f(CW\*(C`memchr\*(C'\fR or
  \&\f(CW\*(C`strnlen\*(C'\fR that specify a bound greater than the largest possible
! object, which is \fB\s-1PTRDIFF_MAX\s0\fR bytes by default.  These warnings
  can only be disabled by \fB\-Wno\-larger\-than\fR.
! .IP "\fB\-Wno\-larger\-than\fR" 4
  .IX Item "-Wno-larger-than"
  Disable \fB\-Wlarger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wlarger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wframe\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Wframe-larger-than=byte-size"
! Warn if the size of a function frame exceeds \fIbyte-size\fR.
  The computation done to determine the stack frame size is approximate
  and not conservative.
! The actual requirements may be somewhat greater than \fIbyte-size\fR
  even if you do not get a warning.  In addition, any space allocated
! via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
  is not included by the compiler when determining
  whether or not to issue a warning.
! \&\fB\-Wframe\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
  \&\fB\-Wno\-frame\-larger\-than\fR.
! .IP "\fB\-Wno\-frame\-larger\-than\fR" 4
  .IX Item "-Wno-frame-larger-than"
  Disable \fB\-Wframe\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wframe\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wfree\-nonheap\-object\fR" 4
  .IX Item "-Wfree-nonheap-object"
  Warn when attempting to deallocate an object that was either not allocated
  on the heap, or by using a pointer that was not returned from a prior call
--- 8477,8516 ----
  \&\f(CW\*(C`char *i\*(C'\fR does not emit a warning.
  .Sp
  This warning is also enabled by \fB\-Wshadow=local\fR.
! .IP \fB\-Wlarger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Wlarger-than=byte-size"
! Warn whenever an object is defined whose size exceeds \fIbyte\-size\fR.
! \&\fB\-Wlarger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by \fB\-Wno\-larger\-than\fR.
  .Sp
  Also warn for calls to bounded functions such as \f(CW\*(C`memchr\*(C'\fR or
  \&\f(CW\*(C`strnlen\*(C'\fR that specify a bound greater than the largest possible
! object, which is \fBPTRDIFF_MAX\fR bytes by default.  These warnings
  can only be disabled by \fB\-Wno\-larger\-than\fR.
! .IP \fB\-Wno\-larger\-than\fR 4
  .IX Item "-Wno-larger-than"
  Disable \fB\-Wlarger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wlarger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wframe\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Wframe-larger-than=byte-size"
! Warn if the size of a function frame exceeds \fIbyte\-size\fR.
  The computation done to determine the stack frame size is approximate
  and not conservative.
! The actual requirements may be somewhat greater than \fIbyte\-size\fR
  even if you do not get a warning.  In addition, any space allocated
! via \f(CW\*(C`alloca\*(C'\fR, variable\-length arrays, or related constructs
  is not included by the compiler when determining
  whether or not to issue a warning.
! \&\fB\-Wframe\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by
  \&\fB\-Wno\-frame\-larger\-than\fR.
! .IP \fB\-Wno\-frame\-larger\-than\fR 4
  .IX Item "-Wno-frame-larger-than"
  Disable \fB\-Wframe\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wframe\-larger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wfree\-nonheap\-object\fR 4
  .IX Item "-Wfree-nonheap-object"
  Warn when attempting to deallocate an object that was either not allocated
  on the heap, or by using a pointer that was not returned from a prior call
*************** diagnosed.
*** 8596,8625 ****
  .Ve
  .Sp
  \&\fB\-Wfree\-nonheap\-object\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wstack\-usage=\fR\fIbyte-size\fR" 4
  .IX Item "-Wstack-usage=byte-size"
! Warn if the stack usage of a function might exceed \fIbyte-size\fR.
  The computation done to determine the stack usage is conservative.
! Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
  constructs is included by the compiler when determining whether or not to
  issue a warning.
  .Sp
  The message is in keeping with the output of \fB\-fstack\-usage\fR.
  .RS 4
! .IP "*" 4
! If the stack usage is fully static but exceeds the specified amount, it's:
  .Sp
  .Vb 1
  \&          warning: stack usage is 1120 bytes
  .Ve
! .IP "*" 4
! If the stack usage is (partly) dynamic but bounded, it's:
  .Sp
  .Vb 1
  \&          warning: stack usage might be 1648 bytes
  .Ve
! .IP "*" 4
! If the stack usage is (partly) dynamic and not bounded, it's:
  .Sp
  .Vb 1
  \&          warning: stack usage might be unbounded
--- 8529,8558 ----
  .Ve
  .Sp
  \&\fB\-Wfree\-nonheap\-object\fR is included in \fB\-Wall\fR.
! .IP \fB\-Wstack\-usage=\fR\fIbyte\-size\fR 4
  .IX Item "-Wstack-usage=byte-size"
! Warn if the stack usage of a function might exceed \fIbyte\-size\fR.
  The computation done to determine the stack usage is conservative.
! Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable\-length arrays, or related
  constructs is included by the compiler when determining whether or not to
  issue a warning.
  .Sp
  The message is in keeping with the output of \fB\-fstack\-usage\fR.
  .RS 4
! .IP * 4
! If the stack usage is fully static but exceeds the specified amount, it\*(Aqs:
  .Sp
  .Vb 1
  \&          warning: stack usage is 1120 bytes
  .Ve
! .IP * 4
! If the stack usage is (partly) dynamic but bounded, it\*(Aqs:
  .Sp
  .Vb 1
  \&          warning: stack usage might be 1648 bytes
  .Ve
! .IP * 4
! If the stack usage is (partly) dynamic and not bounded, it\*(Aqs:
  .Sp
  .Vb 1
  \&          warning: stack usage might be unbounded
*************** If the stack usage is (partly) dynamic a
*** 8627,8642 ****
  .RE
  .RS 4
  .Sp
! \&\fB\-Wstack\-usage=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
  \&\fB\-Wno\-stack\-usage\fR.
  .RE
! .IP "\fB\-Wno\-stack\-usage\fR" 4
  .IX Item "-Wno-stack-usage"
  Disable \fB\-Wstack\-usage=\fR warnings.  The option is equivalent
! to \fB\-Wstack\-usage=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
  .IX Item "-Wunsafe-loop-optimizations"
  Warn if the loop cannot be optimized because the compiler cannot
  assume anything on the bounds of the loop indices.  With
--- 8560,8575 ----
  .RE
  .RS 4
  .Sp
! \&\fB\-Wstack\-usage=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by
  \&\fB\-Wno\-stack\-usage\fR.
  .RE
! .IP \fB\-Wno\-stack\-usage\fR 4
  .IX Item "-Wno-stack-usage"
  Disable \fB\-Wstack\-usage=\fR warnings.  The option is equivalent
! to \fB\-Wstack\-usage=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wunsafe\-loop\-optimizations\fR 4
  .IX Item "-Wunsafe-loop-optimizations"
  Warn if the loop cannot be optimized because the compiler cannot
  assume anything on the bounds of the loop indices.  With
*************** such assumptions.
*** 8645,8664 ****
  .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
  .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
  When used in combination with \fB\-Wformat\fR
! and \fB\-pedantic\fR without \s-1GNU\s0 extensions, this option
! disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
  width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
! which depend on the \s-1MS\s0 runtime.
! .IP "\fB\-Wpointer\-arith\fR" 4
  .IX Item "-Wpointer-arith"
! Warn about anything that depends on the \*(L"size of\*(R" a function type or
! of \f(CW\*(C`void\*(C'\fR.  \s-1GNU C\s0 assigns these types a size of 1, for
  convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
! to functions.  In \*(C+, warn also when an arithmetic operation involves
  \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-pointer\-compare\fR" 4
  .IX Item "-Wno-pointer-compare"
  Do not warn if a pointer is compared with a zero character constant.
  This usually
--- 8578,8597 ----
  .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
  .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
  When used in combination with \fB\-Wformat\fR
! and \fB\-pedantic\fR without GNU extensions, this option
! disables the warnings about non\-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
  width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
! which depend on the MS runtime.
! .IP \fB\-Wpointer\-arith\fR 4
  .IX Item "-Wpointer-arith"
! Warn about anything that depends on the "size of" a function type or
! of \f(CW\*(C`void\*(C'\fR.  GNU C assigns these types a size of 1, for
  convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
! to functions.  In C++, warn also when an arithmetic operation involves
  \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wno\-pointer\-compare\fR 4
  .IX Item "-Wno-pointer-compare"
  Do not warn if a pointer is compared with a zero character constant.
  This usually
*************** means that the pointer was meant to be d
*** 8670,8711 ****
  \&          return 42;
  .Ve
  .Sp
! Note that the code above is invalid in \*(C+11.
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wno\-tsan\fR" 4
  .IX Item "-Wno-tsan"
  Disable warnings about unsupported features in ThreadSanitizer.
  .Sp
  ThreadSanitizer does not support \f(CW\*(C`std::atomic_thread_fence\*(C'\fR and
  can report false positives.
! .IP "\fB\-Wtype\-limits\fR" 4
  .IX Item "-Wtype-limits"
  Warn if a comparison is always true or always false due to the limited
  range of the data type, but do not warn for constant expressions.  For
  example, warn if an unsigned variable is compared against zero with
  \&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
  \&\fB\-Wextra\fR.
! .IP "\fB\-Wabsolute\-value\fR (C and Objective-C only)" 4
  .IX Item "-Wabsolute-value (C and Objective-C only)"
  Warn for calls to standard functions that compute the absolute value
  of an argument when a more appropriate standard function is available.
! For example, calling \f(CW\*(C`abs(3.14)\*(C'\fR triggers the warning because the
  appropriate function to call to compute the absolute value of a double
  argument is \f(CW\*(C`fabs\*(C'\fR.  The option also triggers warnings when the
  argument in a call to such a function has an unsigned type.  This
  warning can be suppressed with an explicit type cast and it is also
  enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wcomment\fR" 4
  .IX Item "-Wcomment"
  .PD 0
! .IP "\fB\-Wcomments\fR" 4
  .IX Item "-Wcomments"
  .PD
! Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
! comment, or whenever a backslash-newline appears in a \fB//\fR comment.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wtrigraphs\fR" 4
  .IX Item "-Wtrigraphs"
  Warn if any trigraphs are encountered that might change the meaning of
  the program.  Trigraphs within comments are not warned about,
--- 8603,8644 ----
  \&          return 42;
  .Ve
  .Sp
! Note that the code above is invalid in C++11.
  .Sp
  This warning is enabled by default.
! .IP \fB\-Wno\-tsan\fR 4
  .IX Item "-Wno-tsan"
  Disable warnings about unsupported features in ThreadSanitizer.
  .Sp
  ThreadSanitizer does not support \f(CW\*(C`std::atomic_thread_fence\*(C'\fR and
  can report false positives.
! .IP \fB\-Wtype\-limits\fR 4
  .IX Item "-Wtype-limits"
  Warn if a comparison is always true or always false due to the limited
  range of the data type, but do not warn for constant expressions.  For
  example, warn if an unsigned variable is compared against zero with
  \&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
  \&\fB\-Wextra\fR.
! .IP "\fB\-Wabsolute\-value\fR (C and Objective\-C only)" 4
  .IX Item "-Wabsolute-value (C and Objective-C only)"
  Warn for calls to standard functions that compute the absolute value
  of an argument when a more appropriate standard function is available.
! For example, calling \f(CWabs(3.14)\fR triggers the warning because the
  appropriate function to call to compute the absolute value of a double
  argument is \f(CW\*(C`fabs\*(C'\fR.  The option also triggers warnings when the
  argument in a call to such a function has an unsigned type.  This
  warning can be suppressed with an explicit type cast and it is also
  enabled by \fB\-Wextra\fR.
! .IP \fB\-Wcomment\fR 4
  .IX Item "-Wcomment"
  .PD 0
! .IP \fB\-Wcomments\fR 4
  .IX Item "-Wcomments"
  .PD
! Warn whenever a comment\-start sequence \fB/*\fR appears in a \fB/*\fR
! comment, or whenever a backslash\-newline appears in a \fB//\fR comment.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wtrigraphs\fR 4
  .IX Item "-Wtrigraphs"
  Warn if any trigraphs are encountered that might change the meaning of
  the program.  Trigraphs within comments are not warned about,
*************** This option is implied by \fB\-Wall\fR.
*** 8715,8743 ****
  given, this option is still enabled unless trigraphs are enabled.  To
  get trigraph conversion without warnings, but get the other
  \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
! .IP "\fB\-Wundef\fR" 4
  .IX Item "-Wundef"
  Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
  Such identifiers are replaced with zero.
! .IP "\fB\-Wexpansion\-to\-defined\fR" 4
  .IX Item "-Wexpansion-to-defined"
  Warn whenever \fBdefined\fR is encountered in the expansion of a macro
  (including the case where the macro is expanded by an \fB#if\fR directive).
  Such usage is not portable.
  This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
! .IP "\fB\-Wunused\-macros\fR" 4
  .IX Item "-Wunused-macros"
  Warn about macros defined in the main file that are unused.  A macro
  is \fIused\fR if it is expanded or tested for existence at least once.
  The preprocessor also warns if the macro has not been used at the
  time it is redefined or undefined.
  .Sp
! Built-in macros, macros defined on the command line, and macros
  defined in include files are not warned about.
  .Sp
  \&\fINote:\fR If a macro is actually used, but only used in skipped
  conditional blocks, then the preprocessor reports it as unused.  To avoid the
! warning in such a case, you might improve the scope of the macro's
  definition by, for example, moving it into the first skipped block.
  Alternatively, you could provide a dummy use with something like:
  .Sp
--- 8648,8676 ----
  given, this option is still enabled unless trigraphs are enabled.  To
  get trigraph conversion without warnings, but get the other
  \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
! .IP \fB\-Wundef\fR 4
  .IX Item "-Wundef"
  Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
  Such identifiers are replaced with zero.
! .IP \fB\-Wexpansion\-to\-defined\fR 4
  .IX Item "-Wexpansion-to-defined"
  Warn whenever \fBdefined\fR is encountered in the expansion of a macro
  (including the case where the macro is expanded by an \fB#if\fR directive).
  Such usage is not portable.
  This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
! .IP \fB\-Wunused\-macros\fR 4
  .IX Item "-Wunused-macros"
  Warn about macros defined in the main file that are unused.  A macro
  is \fIused\fR if it is expanded or tested for existence at least once.
  The preprocessor also warns if the macro has not been used at the
  time it is redefined or undefined.
  .Sp
! Built\-in macros, macros defined on the command line, and macros
  defined in include files are not warned about.
  .Sp
  \&\fINote:\fR If a macro is actually used, but only used in skipped
  conditional blocks, then the preprocessor reports it as unused.  To avoid the
! warning in such a case, you might improve the scope of the macro\*(Aqs
  definition by, for example, moving it into the first skipped block.
  Alternatively, you could provide a dummy use with something like:
  .Sp
*************** Alternatively, you could provide a dummy
*** 8745,8751 ****
  \&        #if defined the_macro_causing_the_warning
  \&        #endif
  .Ve
! .IP "\fB\-Wno\-endif\-labels\fR" 4
  .IX Item "-Wno-endif-labels"
  Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
  This sometimes happens in older programs with code of the form
--- 8678,8684 ----
  \&        #if defined the_macro_causing_the_warning
  \&        #endif
  .Ve
! .IP \fB\-Wno\-endif\-labels\fR 4
  .IX Item "-Wno-endif-labels"
  Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
  This sometimes happens in older programs with code of the form
*************** This sometimes happens in older programs
*** 8760,8855 ****
  .Sp
  The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
  This warning is on by default.
! .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
  .IX Item "-Wbad-function-cast (C and Objective-C only)"
! Warn when a function call is cast to a non-matching type.
  For example, warn if a call to a function returning an integer type 
  is cast to a pointer type.
! .IP "\fB\-Wc90\-c99\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc90-c99-compat (C and Objective-C only)"
! Warn about features not present in \s-1ISO C90,\s0 but present in \s-1ISO C99.\s0
  For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
  type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
  on.  This option is independent of the standards mode.  Warnings are disabled
  in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc99\-c11\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc99-c11-compat (C and Objective-C only)"
! Warn about features not present in \s-1ISO C99,\s0 but present in \s-1ISO C11.\s0
  For instance, warn about use of anonymous structures and unions,
! \&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage-class specifier,
  \&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
  and so on.  This option is independent of the standards mode.  Warnings are
  disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc11\-c23\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc11-c23-compat (C and Objective-C only)"
  .PD 0
! .IP "\fB\-Wc11\-c2x\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc11-c2x-compat (C and Objective-C only)"
  .PD
! Warn about features not present in \s-1ISO C11,\s0 but present in \s-1ISO C23.\s0
  For instance, warn about omitting the string in \f(CW\*(C`_Static_assert\*(C'\fR,
  use of \fB[[]]\fR syntax for attributes, use of decimal
! floating-point types, and so on.  This option is independent of the
  standards mode.  Warnings are disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  The name \fB\-Wc11\-c2x\-compat\fR is
  deprecated.
  .Sp
  When not compiling in C23 mode, these warnings are upgraded to errors
  by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc++-compat (C and Objective-C only)"
! Warn about \s-1ISO C\s0 constructs that are outside of the common subset of
! \&\s-1ISO C\s0 and \s-1ISO \*(C+,\s0 e.g. request for implicit conversion from
  \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
! .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++11-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 1998\s0
! and \s-1ISO \*(C+ 2011,\s0 e.g., identifiers in \s-1ISO \*(C+ 1998\s0 that are keywords
! in \s-1ISO \*(C+ 2011.\s0  This warning turns on \fB\-Wnarrowing\fR and is
  enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++14\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++14-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2011\s0
! and \s-1ISO \*(C+ 2014.\s0  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++17\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++17-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2014\s0
! and \s-1ISO \*(C+ 2017.\s0  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++20\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++20-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2017\s0
! and \s-1ISO \*(C+ 2020.\s0  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-c++11\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++11-extensions ( and Objective- only)"
! Do not warn about \*(C+11 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+11 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++14\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++14-extensions ( and Objective- only)"
! Do not warn about \*(C+14 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+14 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++17\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++17-extensions ( and Objective- only)"
! Do not warn about \*(C+17 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+17 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++20\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++20-extensions ( and Objective- only)"
! Do not warn about \*(C+20 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+20 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++23\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++23-extensions ( and Objective- only)"
! Do not warn about \*(C+23 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+23 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++26\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++26-extensions ( and Objective- only)"
! Do not warn about \*(C+26 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+26 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wcast\-qual\fR" 4
  .IX Item "-Wcast-qual"
  Warn whenever a pointer is cast so as to remove a type qualifier from
  the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
--- 8693,8788 ----
  .Sp
  The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
  This warning is on by default.
! .IP "\fB\-Wbad\-function\-cast\fR (C and Objective\-C only)" 4
  .IX Item "-Wbad-function-cast (C and Objective-C only)"
! Warn when a function call is cast to a non\-matching type.
  For example, warn if a call to a function returning an integer type 
  is cast to a pointer type.
! .IP "\fB\-Wc90\-c99\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc90-c99-compat (C and Objective-C only)"
! Warn about features not present in ISO C90, but present in ISO C99.
  For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
  type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
  on.  This option is independent of the standards mode.  Warnings are disabled
  in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc99\-c11\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc99-c11-compat (C and Objective-C only)"
! Warn about features not present in ISO C99, but present in ISO C11.
  For instance, warn about use of anonymous structures and unions,
! \&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage\-class specifier,
  \&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
  and so on.  This option is independent of the standards mode.  Warnings are
  disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc11\-c23\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc11-c23-compat (C and Objective-C only)"
  .PD 0
! .IP "\fB\-Wc11\-c2x\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc11-c2x-compat (C and Objective-C only)"
  .PD
! Warn about features not present in ISO C11, but present in ISO C23.
  For instance, warn about omitting the string in \f(CW\*(C`_Static_assert\*(C'\fR,
  use of \fB[[]]\fR syntax for attributes, use of decimal
! floating\-point types, and so on.  This option is independent of the
  standards mode.  Warnings are disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  The name \fB\-Wc11\-c2x\-compat\fR is
  deprecated.
  .Sp
  When not compiling in C23 mode, these warnings are upgraded to errors
  by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wc++\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc++-compat (C and Objective-C only)"
! Warn about ISO C constructs that are outside of the common subset of
! ISO C and ISO C++, e.g. request for implicit conversion from
  \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
! .IP "\fB\-Wc++11\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++11-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 1998
! and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
! in ISO C++ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
  enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++14\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++14-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 2011
! and ISO C++ 2014.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++17\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++17-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 2014
! and ISO C++ 2017.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++20\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++20-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 2017
! and ISO C++ 2020.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-c++11\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++11-extensions (C++ and Objective-C++ only)"
! Do not warn about C++11 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++11 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++14\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++14-extensions (C++ and Objective-C++ only)"
! Do not warn about C++14 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++14 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++17\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++17-extensions (C++ and Objective-C++ only)"
! Do not warn about C++17 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++17 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++20\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++20-extensions (C++ and Objective-C++ only)"
! Do not warn about C++20 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++20 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++23\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++23-extensions (C++ and Objective-C++ only)"
! Do not warn about C++23 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++23 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++26\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++26-extensions (C++ and Objective-C++ only)"
! Do not warn about C++26 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++26 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP \fB\-Wcast\-qual\fR 4
  .IX Item "-Wcast-qual"
  Warn whenever a pointer is cast so as to remove a type qualifier from
  the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
*************** is unsafe, as in this example:
*** 8867,8899 ****
  \&          /* Now char** pointer points to read\-only memory.  */
  \&          **p = \*(Aqb\*(Aq;
  .Ve
! .IP "\fB\-Wcast\-align\fR" 4
  .IX Item "-Wcast-align"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
! two\- or four-byte boundaries.
! .IP "\fB\-Wcast\-align=strict\fR" 4
  .IX Item "-Wcast-align=strict"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR regardless of the target machine.
! .IP "\fB\-Wcast\-function\-type\fR" 4
  .IX Item "-Wcast-function-type"
  Warn when a function pointer is cast to an incompatible function pointer.
  In a cast involving function types with a variable argument list only
  the types of initial arguments that are provided are considered.
! Any parameter of pointer-type matches any other pointer-type.  Any benign
  differences in integral types are ignored, like \f(CW\*(C`int\*(C'\fR vs. \f(CW\*(C`long\*(C'\fR
! on \s-1ILP32\s0 targets.  Likewise type qualifiers are ignored.  The function
  type \f(CW\*(C`void (*) (void)\*(C'\fR is special and matches everything, which can
  be used to suppress this warning.
  In a cast involving pointer to member types this warning warns whenever
  the type cast is changing the pointer to member type.
  This warning is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wcast\-user\-defined\fR" 4
  .IX Item "-Wcast-user-defined"
! Warn when a cast to reference type does not involve a user-defined
  conversion that the programmer might expect to be called.
  .Sp
  .Vb 2
--- 8800,8832 ----
  \&          /* Now char** pointer points to read\-only memory.  */
  \&          **p = \*(Aqb\*(Aq;
  .Ve
! .IP \fB\-Wcast\-align\fR 4
  .IX Item "-Wcast-align"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
! two\- or four\-byte boundaries.
! .IP \fB\-Wcast\-align=strict\fR 4
  .IX Item "-Wcast-align=strict"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR regardless of the target machine.
! .IP \fB\-Wcast\-function\-type\fR 4
  .IX Item "-Wcast-function-type"
  Warn when a function pointer is cast to an incompatible function pointer.
  In a cast involving function types with a variable argument list only
  the types of initial arguments that are provided are considered.
! Any parameter of pointer\-type matches any other pointer\-type.  Any benign
  differences in integral types are ignored, like \f(CW\*(C`int\*(C'\fR vs. \f(CW\*(C`long\*(C'\fR
! on ILP32 targets.  Likewise type qualifiers are ignored.  The function
  type \f(CW\*(C`void (*) (void)\*(C'\fR is special and matches everything, which can
  be used to suppress this warning.
  In a cast involving pointer to member types this warning warns whenever
  the type cast is changing the pointer to member type.
  This warning is enabled by \fB\-Wextra\fR.
! .IP \fB\-Wcast\-user\-defined\fR 4
  .IX Item "-Wcast-user-defined"
! Warn when a cast to reference type does not involve a user\-defined
  conversion that the programmer might expect to be called.
  .Sp
  .Vb 2
*************** conversion that the programmer might exp
*** 8902,8911 ****
  .Ve
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wwrite\-strings\fR" 4
  .IX Item "-Wwrite-strings"
  When compiling C, give string constants the type \f(CW\*(C`const
! char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
  non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
  warnings help you find at compile time code that can try to write
  into a string constant, but only if you have been very careful about
--- 8835,8844 ----
  .Ve
  .Sp
  This warning is enabled by default.
! .IP \fB\-Wwrite\-strings\fR 4
  .IX Item "-Wwrite-strings"
  When compiling C, give string constants the type \f(CW\*(C`const
! char[\fR\f(CIlength\fR\f(CW]\*(C'\fR so that copying the address of one into a
  non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
  warnings help you find at compile time code that can try to write
  into a string constant, but only if you have been very careful about
*************** using \f(CW\*(C`const\*(C'\fR in declara
*** 8913,8931 ****
  just a nuisance. This is why we did not make \fB\-Wall\fR request
  these warnings.
  .Sp
! When compiling \*(C+, warn about the deprecated conversion from string
! literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
  programs.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! \&\*(C+11 mode or later.
! .IP "\fB\-Wclobbered\fR" 4
  .IX Item "-Wclobbered"
  Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
  \&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-complain\-wrong\-lang\fR" 4
  .IX Item "-Wno-complain-wrong-lang"
! By default, language front ends complain when a command-line option is
  valid, but not applicable to that front end.
  This may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR,
  which is mostly useful when invoking a single compiler driver for
--- 8846,8864 ----
  just a nuisance. This is why we did not make \fB\-Wall\fR request
  these warnings.
  .Sp
! When compiling C++, warn about the deprecated conversion from string
! literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for C++
  programs.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! C++11 mode or later.
! .IP \fB\-Wclobbered\fR 4
  .IX Item "-Wclobbered"
  Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
  \&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
! .IP \fB\-Wno\-complain\-wrong\-lang\fR 4
  .IX Item "-Wno-complain-wrong-lang"
! By default, language front ends complain when a command\-line option is
  valid, but not applicable to that front end.
  This may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR,
  which is mostly useful when invoking a single compiler driver for
*************** multiple source files written in differe
*** 8935,8950 ****
  \&        $ g++ \-fno\-rtti a.cc b.f90
  .Ve
  .Sp
! The driver \fIg++\fR invokes the \*(C+ front end to compile \fIa.cc\fR
  and the Fortran front end to compile \fIb.f90\fR.
  The latter front end diagnoses
! \&\fBf951: Warning: command-line option '\-fno\-rtti' is valid for \*(C+/D/ObjC++ but not for Fortran\fR,
  which may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR.
! .IP "\fB\-Wcompare\-distinct\-pointer\-types\fR (C and Objective-C only)" 4
  .IX Item "-Wcompare-distinct-pointer-types (C and Objective-C only)"
  Warn if pointers of distinct types are compared without a cast.  This
  warning is enabled by default.
! .IP "\fB\-Wconversion\fR" 4
  .IX Item "-Wconversion"
  Warn for implicit conversions that may alter a value. This includes
  conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
--- 8868,8883 ----
  \&        $ g++ \-fno\-rtti a.cc b.f90
  .Ve
  .Sp
! The driver \fIg++\fR invokes the C++ front end to compile \fIa.cc\fR
  and the Fortran front end to compile \fIb.f90\fR.
  The latter front end diagnoses
! \&\fBf951: Warning: command\-line option \*(Aq\-fno\-rtti\*(Aq is valid for C++/D/ObjC++ but not for Fortran\fR,
  which may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR.
! .IP "\fB\-Wcompare\-distinct\-pointer\-types\fR (C and Objective\-C only)" 4
  .IX Item "-Wcompare-distinct-pointer-types (C and Objective-C only)"
  Warn if pointers of distinct types are compared without a cast.  This
  warning is enabled by default.
! .IP \fB\-Wconversion\fR 4
  .IX Item "-Wconversion"
  Warn for implicit conversions that may alter a value. This includes
  conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
*************** changed by the conversion like in \f(CW\
*** 8956,8971 ****
  conversions between signed and unsigned integers can be disabled by
  using \fB\-Wno\-sign\-conversion\fR.
  .Sp
! For \*(C+, also warn for confusing overload resolution for user-defined
  conversions; and conversions that never use a type conversion
  operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
  reference to them. Warnings about conversions between signed and
! unsigned integers are disabled by default in \*(C+ unless
  \&\fB\-Wsign\-conversion\fR is explicitly enabled.
  .Sp
  Warnings about conversion from arithmetic on a small type back to that
  type are only given with \fB\-Warith\-conversion\fR.
! .IP "\fB\-Wdangling\-else\fR" 4
  .IX Item "-Wdangling-else"
  Warn about constructions where there may be confusion to which
  \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
--- 8889,8904 ----
  conversions between signed and unsigned integers can be disabled by
  using \fB\-Wno\-sign\-conversion\fR.
  .Sp
! For C++, also warn for confusing overload resolution for user\-defined
  conversions; and conversions that never use a type conversion
  operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
  reference to them. Warnings about conversions between signed and
! unsigned integers are disabled by default in C++ unless
  \&\fB\-Wsign\-conversion\fR is explicitly enabled.
  .Sp
  Warnings about conversion from arithmetic on a small type back to that
  type are only given with \fB\-Warith\-conversion\fR.
! .IP \fB\-Wdangling\-else\fR 4
  .IX Item "-Wdangling-else"
  Warn about constructions where there may be confusion to which
  \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
*************** such a case:
*** 8981,8991 ****
  \&        }
  .Ve
  .Sp
! In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
  \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
  often not what the programmer expected, as illustrated in the above
  example by indentation the programmer chose.  When there is the
! potential for this confusion, \s-1GCC\s0 issues a warning when this flag
  is specified.  To eliminate the warning, add explicit braces around
  the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
  can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
--- 8914,8924 ----
  \&        }
  .Ve
  .Sp
! In C/C++, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
  \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
  often not what the programmer expected, as illustrated in the above
  example by indentation the programmer chose.  When there is the
! potential for this confusion, GCC issues a warning when this flag
  is specified.  To eliminate the warning, add explicit braces around
  the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
  can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
*************** looks like this:
*** 9004,9026 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wparentheses\fR.
! .IP "\fB\-Wdangling\-pointer\fR" 4
  .IX Item "-Wdangling-pointer"
  .PD 0
! .IP "\fB\-Wdangling\-pointer=\fR\fIn\fR" 4
  .IX Item "-Wdangling-pointer=n"
  .PD
! Warn about uses of pointers (or \*(C+ references) to objects with automatic
  storage duration after their lifetime has ended.  This includes local
  variables declared in nested blocks, compound literals and other unnamed
  temporary objects.  In addition, warn about storing the address of such
  objects in escaped pointers.  The warning is enabled at all optimization
  levels but may yield different results with optimization than without.
  .RS 4
! .IP "\fB\-Wdangling\-pointer=1\fR" 4
  .IX Item "-Wdangling-pointer=1"
  At level 1, the warning diagnoses only unconditional uses of dangling pointers.
! .IP "\fB\-Wdangling\-pointer=2\fR" 4
  .IX Item "-Wdangling-pointer=2"
  At level 2, in addition to unconditional uses the warning also diagnoses
  conditional uses of dangling pointers.
--- 8937,8959 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wparentheses\fR.
! .IP \fB\-Wdangling\-pointer\fR 4
  .IX Item "-Wdangling-pointer"
  .PD 0
! .IP \fB\-Wdangling\-pointer=\fR\fIn\fR 4
  .IX Item "-Wdangling-pointer=n"
  .PD
! Warn about uses of pointers (or C++ references) to objects with automatic
  storage duration after their lifetime has ended.  This includes local
  variables declared in nested blocks, compound literals and other unnamed
  temporary objects.  In addition, warn about storing the address of such
  objects in escaped pointers.  The warning is enabled at all optimization
  levels but may yield different results with optimization than without.
  .RS 4
! .IP \fB\-Wdangling\-pointer=1\fR 4
  .IX Item "-Wdangling-pointer=1"
  At level 1, the warning diagnoses only unconditional uses of dangling pointers.
! .IP \fB\-Wdangling\-pointer=2\fR 4
  .IX Item "-Wdangling-pointer=2"
  At level 2, in addition to unconditional uses the warning also diagnoses
  conditional uses of dangling pointers.
*************** is conditional, the warning triggers at
*** 9078,9107 ****
  \&        }
  .Ve
  .RE
! .IP "\fB\-Wdate\-time\fR" 4
  .IX Item "-Wdate-time"
  Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
! are encountered as they might prevent bit-wise-identical reproducible
  compilations.
! .IP "\fB\-Wempty\-body\fR" 4
  .IX Item "-Wempty-body"
  Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
  while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-endif\-labels\fR" 4
  .IX Item "-Wno-endif-labels"
  Do not warn about stray tokens after \f(CW\*(C`#else\*(C'\fR and \f(CW\*(C`#endif\*(C'\fR.
! .IP "\fB\-Wenum\-compare\fR" 4
  .IX Item "-Wenum-compare"
  Warn about a comparison between values of different enumerated types.
! In \*(C+ enumerated type mismatches in conditional expressions are also
  diagnosed and the warning is enabled by default.  In C this warning is 
  enabled by \fB\-Wall\fR.
! .IP "\fB\-Wenum\-conversion\fR" 4
  .IX Item "-Wenum-conversion"
  Warn when a value of enumerated type is implicitly converted to a 
  different enumerated type.  This warning is enabled by \fB\-Wextra\fR
  in C.
! .IP "\fB\-Wenum\-int\-mismatch\fR (C and Objective-C only)" 4
  .IX Item "-Wenum-int-mismatch (C and Objective-C only)"
  Warn about mismatches between an enumerated type and an integer type in
  declarations.  For example:
--- 9011,9040 ----
  \&        }
  .Ve
  .RE
! .IP \fB\-Wdate\-time\fR 4
  .IX Item "-Wdate-time"
  Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
! are encountered as they might prevent bit\-wise\-identical reproducible
  compilations.
! .IP \fB\-Wempty\-body\fR 4
  .IX Item "-Wempty-body"
  Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
  while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
! .IP \fB\-Wno\-endif\-labels\fR 4
  .IX Item "-Wno-endif-labels"
  Do not warn about stray tokens after \f(CW\*(C`#else\*(C'\fR and \f(CW\*(C`#endif\*(C'\fR.
! .IP \fB\-Wenum\-compare\fR 4
  .IX Item "-Wenum-compare"
  Warn about a comparison between values of different enumerated types.
! In C++ enumerated type mismatches in conditional expressions are also
  diagnosed and the warning is enabled by default.  In C this warning is 
  enabled by \fB\-Wall\fR.
! .IP \fB\-Wenum\-conversion\fR 4
  .IX Item "-Wenum-conversion"
  Warn when a value of enumerated type is implicitly converted to a 
  different enumerated type.  This warning is enabled by \fB\-Wextra\fR
  in C.
! .IP "\fB\-Wenum\-int\-mismatch\fR (C and Objective\-C only)" 4
  .IX Item "-Wenum-int-mismatch (C and Objective-C only)"
  Warn about mismatches between an enumerated type and an integer type in
  declarations.  For example:
*************** declarations.  For example:
*** 9114,9148 ****
  .Sp
  In C, an enumerated type is compatible with \f(CW\*(C`char\*(C'\fR, a signed
  integer type, or an unsigned integer type.  However, since the choice
! of the underlying type of an enumerated type is implementation-defined,
! such mismatches may cause portability issues.  In \*(C+, such mismatches
  are an error.  In C, this warning is enabled by \fB\-Wall\fR and
  \&\fB\-Wc++\-compat\fR.
! .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
  .IX Item "-Wjump-misses-init (C, Objective-C only)"
  Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
  forward across the initialization of a variable, or jumps backward to a
  label after the variable has been initialized.  This only warns about
  variables that are initialized when they are declared.  This warning is
! only supported for C and Objective-C; in \*(C+ this sort of branch is an
  error in any case.
  .Sp
  \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
  can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
! .IP "\fB\-Wsign\-compare\fR" 4
  .IX Item "-Wsign-compare"
  Warn when a comparison between signed and unsigned values could produce
  an incorrect result when the signed value is converted to unsigned.
! In \*(C+, this warning is also enabled by \fB\-Wall\fR.  In C, it is
  also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wsign\-conversion\fR" 4
  .IX Item "-Wsign-conversion"
  Warn for implicit conversions that may change the sign of an integer
  value, like assigning a signed integer expression to an unsigned
  integer variable. An explicit cast silences the warning. In C, this
  option is enabled also by \fB\-Wconversion\fR.
! .IP "\fB\-Wflex\-array\-member\-not\-at\-end\fR (C and \*(C+ only)" 4
! .IX Item "-Wflex-array-member-not-at-end (C and only)"
  Warn when a structure containing a C99 flexible array member as the last
  field is not at the end of another structure.
  This warning warns e.g. about
--- 9047,9081 ----
  .Sp
  In C, an enumerated type is compatible with \f(CW\*(C`char\*(C'\fR, a signed
  integer type, or an unsigned integer type.  However, since the choice
! of the underlying type of an enumerated type is implementation\-defined,
! such mismatches may cause portability issues.  In C++, such mismatches
  are an error.  In C, this warning is enabled by \fB\-Wall\fR and
  \&\fB\-Wc++\-compat\fR.
! .IP "\fB\-Wjump\-misses\-init\fR (C, Objective\-C only)" 4
  .IX Item "-Wjump-misses-init (C, Objective-C only)"
  Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
  forward across the initialization of a variable, or jumps backward to a
  label after the variable has been initialized.  This only warns about
  variables that are initialized when they are declared.  This warning is
! only supported for C and Objective\-C; in C++ this sort of branch is an
  error in any case.
  .Sp
  \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
  can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
! .IP \fB\-Wsign\-compare\fR 4
  .IX Item "-Wsign-compare"
  Warn when a comparison between signed and unsigned values could produce
  an incorrect result when the signed value is converted to unsigned.
! In C++, this warning is also enabled by \fB\-Wall\fR.  In C, it is
  also enabled by \fB\-Wextra\fR.
! .IP \fB\-Wsign\-conversion\fR 4
  .IX Item "-Wsign-conversion"
  Warn for implicit conversions that may change the sign of an integer
  value, like assigning a signed integer expression to an unsigned
  integer variable. An explicit cast silences the warning. In C, this
  option is enabled also by \fB\-Wconversion\fR.
! .IP "\fB\-Wflex\-array\-member\-not\-at\-end\fR (C and C++ only)" 4
! .IX Item "-Wflex-array-member-not-at-end (C and C++ only)"
  Warn when a structure containing a C99 flexible array member as the last
  field is not at the end of another structure.
  This warning warns e.g. about
*************** This warning warns e.g. about
*** 9151,9166 ****
  \&        struct flex  { int length; char data[]; };
  \&        struct mid_flex { int m; struct flex flex_data; int n; };
  .Ve
! .IP "\fB\-Wfloat\-conversion\fR" 4
  .IX Item "-Wfloat-conversion"
  Warn for implicit conversions that reduce the precision of a real value.
  This includes conversions from real to integer, and from higher precision
  real to lower precision real values.  This option is also enabled by
  \&\fB\-Wconversion\fR.
! .IP "\fB\-Wno\-scalar\-storage\-order\fR" 4
  .IX Item "-Wno-scalar-storage-order"
  Do not warn on suspicious constructs involving reverse scalar storage order.
! .IP "\fB\-Wsizeof\-array\-div\fR" 4
  .IX Item "-Wsizeof-array-div"
  Warn about divisions of two sizeof operators when the first one is applied
  to an array and the divisor does not equal the size of the array element.
--- 9084,9099 ----
  \&        struct flex  { int length; char data[]; };
  \&        struct mid_flex { int m; struct flex flex_data; int n; };
  .Ve
! .IP \fB\-Wfloat\-conversion\fR 4
  .IX Item "-Wfloat-conversion"
  Warn for implicit conversions that reduce the precision of a real value.
  This includes conversions from real to integer, and from higher precision
  real to lower precision real values.  This option is also enabled by
  \&\fB\-Wconversion\fR.
! .IP \fB\-Wno\-scalar\-storage\-order\fR 4
  .IX Item "-Wno-scalar-storage-order"
  Do not warn on suspicious constructs involving reverse scalar storage order.
! .IP \fB\-Wsizeof\-array\-div\fR 4
  .IX Item "-Wsizeof-array-div"
  Warn about divisions of two sizeof operators when the first one is applied
  to an array and the divisor does not equal the size of the array element.
*************** array, which is likely what the user int
*** 9176,9191 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wsizeof\-pointer\-div\fR" 4
  .IX Item "-Wsizeof-pointer-div"
  Warn for suspicious divisions of two sizeof expressions that divide
  the pointer size by the element size, which is the usual way to compute
! the array size but won't work out correctly with pointers.  This warning
  warns e.g. about \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is
  not an array, but a pointer.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wsizeof\-pointer\-memaccess\fR" 4
  .IX Item "-Wsizeof-pointer-memaccess"
! Warn for suspicious length parameters to certain string and memory built-in
  functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning triggers for
  example for \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not
  an array, but a pointer, and suggests a possible fix, or about
--- 9109,9124 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wsizeof\-pointer\-div\fR 4
  .IX Item "-Wsizeof-pointer-div"
  Warn for suspicious divisions of two sizeof expressions that divide
  the pointer size by the element size, which is the usual way to compute
! the array size but won\*(Aqt work out correctly with pointers.  This warning
  warns e.g. about \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is
  not an array, but a pointer.  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wsizeof\-pointer\-memaccess\fR 4
  .IX Item "-Wsizeof-pointer-memaccess"
! Warn for suspicious length parameters to certain string and memory built\-in
  functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning triggers for
  example for \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not
  an array, but a pointer, and suggests a possible fix, or about
*************** is almost certainly a mistake and so the
*** 9207,9227 ****
  .Ve
  .Sp
  The \fB\-Wsizeof\-pointer\-memaccess\fR option is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-sizeof\-array\-argument\fR" 4
  .IX Item "-Wno-sizeof-array-argument"
  Do not warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
  declared as an array in a function definition.  This warning is enabled by
! default for C and \*(C+ programs.
! .IP "\fB\-Wmemset\-elt\-size\fR" 4
  .IX Item "-Wmemset-elt-size"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function, if the
  first argument references an array, and the third argument is a number
  equal to the number of elements, but not equal to the size of the array
  in memory.  This indicates that the user has omitted a multiplication by
  the element size.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wmemset\-transposed\-args\fR" 4
  .IX Item "-Wmemset-transposed-args"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function where
  the second argument is not zero and the third argument is zero.  For
  example, the call \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR is diagnosed because
  \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostic
--- 9140,9160 ----
  .Ve
  .Sp
  The \fB\-Wsizeof\-pointer\-memaccess\fR option is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-sizeof\-array\-argument\fR 4
  .IX Item "-Wno-sizeof-array-argument"
  Do not warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
  declared as an array in a function definition.  This warning is enabled by
! default for C and C++ programs.
! .IP \fB\-Wmemset\-elt\-size\fR 4
  .IX Item "-Wmemset-elt-size"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built\-in function, if the
  first argument references an array, and the third argument is a number
  equal to the number of elements, but not equal to the size of the array
  in memory.  This indicates that the user has omitted a multiplication by
  the element size.  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wmemset\-transposed\-args\fR 4
  .IX Item "-Wmemset-transposed-args"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built\-in function where
  the second argument is not zero and the third argument is zero.  For
  example, the call \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR is diagnosed because
  \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostic
*************** it is an expression that is folded to ze
*** 9230,9236 ****
  type, it is far less likely that the arguments have been mistakenly
  transposed and no warning is emitted.  This warning is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Waddress\fR" 4
  .IX Item "-Waddress"
  Warn about suspicious uses of address expressions. These include comparing
  the address of a function or a declared object to the null pointer constant
--- 9163,9169 ----
  type, it is far less likely that the arguments have been mistakenly
  transposed and no warning is emitted.  This warning is enabled
  by \fB\-Wall\fR.
! .IP \fB\-Waddress\fR 4
  .IX Item "-Waddress"
  Warn about suspicious uses of address expressions. These include comparing
  the address of a function or a declared object to the null pointer constant
*************** and are not portable, and suggest the in
*** 9277,9299 ****
  The warning is suppressed if the suspicious expression is the result
  of macro expansion.
  \&\fB\-Waddress\fR warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-address\-of\-packed\-member\fR" 4
  .IX Item "-Wno-address-of-packed-member"
  Do not warn when the address of packed member of struct or union is taken,
  which usually results in an unaligned pointer value.  This is
  enabled by default.
! .IP "\fB\-Wlogical\-op\fR" 4
  .IX Item "-Wlogical-op"
  Warn about suspicious uses of logical operators in expressions.
  This includes using logical operators in contexts where a
! bit-wise operator is likely to be expected.  Also warns when
  the operands of a logical operator are the same:
  .Sp
  .Vb 2
  \&        extern int a;
  \&        if (a < 0 && a < 0) { ... }
  .Ve
! .IP "\fB\-Wlogical\-not\-parentheses\fR" 4
  .IX Item "-Wlogical-not-parentheses"
  Warn about logical not used on the left hand side operand of a comparison.
  This option does not warn if the right operand is considered to be a boolean
--- 9210,9232 ----
  The warning is suppressed if the suspicious expression is the result
  of macro expansion.
  \&\fB\-Waddress\fR warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-address\-of\-packed\-member\fR 4
  .IX Item "-Wno-address-of-packed-member"
  Do not warn when the address of packed member of struct or union is taken,
  which usually results in an unaligned pointer value.  This is
  enabled by default.
! .IP \fB\-Wlogical\-op\fR 4
  .IX Item "-Wlogical-op"
  Warn about suspicious uses of logical operators in expressions.
  This includes using logical operators in contexts where a
! bit\-wise operator is likely to be expected.  Also warns when
  the operands of a logical operator are the same:
  .Sp
  .Vb 2
  \&        extern int a;
  \&        if (a < 0 && a < 0) { ... }
  .Ve
! .IP \fB\-Wlogical\-not\-parentheses\fR 4
  .IX Item "-Wlogical-not-parentheses"
  Warn about logical not used on the left hand side operand of a comparison.
  This option does not warn if the right operand is considered to be a boolean
*************** expression.  Its purpose is to detect su
*** 9305,9311 ****
  \&        if (!a > 1) { ... }
  .Ve
  .Sp
! It is possible to suppress the warning by wrapping the \s-1LHS\s0 into
  parentheses:
  .Sp
  .Vb 1
--- 9238,9244 ----
  \&        if (!a > 1) { ... }
  .Ve
  .Sp
! It is possible to suppress the warning by wrapping the LHS into
  parentheses:
  .Sp
  .Vb 1
*************** parentheses:
*** 9313,9339 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Waggregate\-return\fR" 4
  .IX Item "-Waggregate-return"
  Warn if any functions that return structures or unions are defined or
  called.  (In languages where you can return an array, this also elicits
  a warning.)
! .IP "\fB\-Wno\-aggressive\-loop\-optimizations\fR" 4
  .IX Item "-Wno-aggressive-loop-optimizations"
  Warn if in a loop with constant number of iterations the compiler detects
  undefined behavior in some statement during one or more of the iterations.
! .IP "\fB\-Wno\-attributes\fR" 4
  .IX Item "-Wno-attributes"
  Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
  unrecognized attributes, function attributes applied to variables,
  etc.  This does not stop errors for incorrect use of supported
  attributes.
  .Sp
! Warnings about ill-formed uses of standard attributes are upgraded to
  errors by \fB\-pedantic\-errors\fR.
  .Sp
  Additionally, using \fB\-Wno\-attributes=\fR, it is possible to suppress
! warnings about unknown scoped attributes (in \*(C+11 and C23).  For example,
  \&\fB\-Wno\-attributes=vendor::attr\fR disables warning about the following
  declaration:
  .Sp
--- 9246,9272 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Waggregate\-return\fR 4
  .IX Item "-Waggregate-return"
  Warn if any functions that return structures or unions are defined or
  called.  (In languages where you can return an array, this also elicits
  a warning.)
! .IP \fB\-Wno\-aggressive\-loop\-optimizations\fR 4
  .IX Item "-Wno-aggressive-loop-optimizations"
  Warn if in a loop with constant number of iterations the compiler detects
  undefined behavior in some statement during one or more of the iterations.
! .IP \fB\-Wno\-attributes\fR 4
  .IX Item "-Wno-attributes"
  Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
  unrecognized attributes, function attributes applied to variables,
  etc.  This does not stop errors for incorrect use of supported
  attributes.
  .Sp
! Warnings about ill\-formed uses of standard attributes are upgraded to
  errors by \fB\-pedantic\-errors\fR.
  .Sp
  Additionally, using \fB\-Wno\-attributes=\fR, it is possible to suppress
! warnings about unknown scoped attributes (in C++11 and C23).  For example,
  \&\fB\-Wno\-attributes=vendor::attr\fR disables warning about the following
  declaration:
  .Sp
*************** of these declarations:
*** 9351,9366 ****
  .Ve
  .Sp
  Note that \fB\-Wno\-attributes=\fR does not imply \fB\-Wno\-attributes\fR.
! .IP "\fB\-Wno\-builtin\-declaration\-mismatch\fR" 4
  .IX Item "-Wno-builtin-declaration-mismatch"
! Warn if a built-in function is declared with an incompatible signature
! or as a non-function, or when a built-in function declared with a type
  that does not include a prototype is called with arguments whose promoted
  types do not match those expected by the function.  When \fB\-Wextra\fR
! is specified, also warn when a built-in function that takes arguments is
  declared without a prototype.  The \fB\-Wbuiltin\-declaration\-mismatch\fR
  warning is enabled by default.  To avoid the warning include the appropriate
! header to bring the prototypes of built-in functions into scope.
  .Sp
  For example, the call to \f(CW\*(C`memset\*(C'\fR below is diagnosed by the warning
  because the function expects a value of type \f(CW\*(C`size_t\*(C'\fR as its argument
--- 9284,9299 ----
  .Ve
  .Sp
  Note that \fB\-Wno\-attributes=\fR does not imply \fB\-Wno\-attributes\fR.
! .IP \fB\-Wno\-builtin\-declaration\-mismatch\fR 4
  .IX Item "-Wno-builtin-declaration-mismatch"
! Warn if a built\-in function is declared with an incompatible signature
! or as a non\-function, or when a built\-in function declared with a type
  that does not include a prototype is called with arguments whose promoted
  types do not match those expected by the function.  When \fB\-Wextra\fR
! is specified, also warn when a built\-in function that takes arguments is
  declared without a prototype.  The \fB\-Wbuiltin\-declaration\-mismatch\fR
  warning is enabled by default.  To avoid the warning include the appropriate
! header to bring the prototypes of built\-in functions into scope.
  .Sp
  For example, the call to \f(CW\*(C`memset\*(C'\fR below is diagnosed by the warning
  because the function expects a value of type \f(CW\*(C`size_t\*(C'\fR as its argument
*************** the declaration of the function is diagn
*** 9374,9404 ****
  \&          memset (d, \*(Aq\e0\*(Aq, 32);
  \&        }
  .Ve
! .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
  .IX Item "-Wno-builtin-macro-redefined"
! Do not warn if certain built-in macros are redefined.  This suppresses
  warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
! .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
  .IX Item "-Wstrict-prototypes (C and Objective-C only)"
  Warn if a function is declared or defined without specifying the
! argument types.  (An old-style function definition is permitted without
  a warning if preceded by a declaration that specifies the argument
  types.)
! .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
  .IX Item "-Wold-style-declaration (C and Objective-C only)"
  Warn for obsolescent usages, according to the C Standard, in a
! declaration. For example, warn if storage-class specifiers like
  \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
  is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
  .IX Item "-Wold-style-definition (C and Objective-C only)"
! Warn if an old-style function definition is used.  A warning is given
  even if there is a previous prototype.  A definition using \fB()\fR
! is not considered an old-style definition in C23 mode, because it is
  equivalent to \fB(void)\fR in that case, but is considered an
! old-style definition for older standards.
! .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
  .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
  A function parameter is declared without a type specifier in K&R\-style
  functions:
--- 9307,9337 ----
  \&          memset (d, \*(Aq\e0\*(Aq, 32);
  \&        }
  .Ve
! .IP \fB\-Wno\-builtin\-macro\-redefined\fR 4
  .IX Item "-Wno-builtin-macro-redefined"
! Do not warn if certain built\-in macros are redefined.  This suppresses
  warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
! .IP "\fB\-Wstrict\-prototypes\fR (C and Objective\-C only)" 4
  .IX Item "-Wstrict-prototypes (C and Objective-C only)"
  Warn if a function is declared or defined without specifying the
! argument types.  (An old\-style function definition is permitted without
  a warning if preceded by a declaration that specifies the argument
  types.)
! .IP "\fB\-Wold\-style\-declaration\fR (C and Objective\-C only)" 4
  .IX Item "-Wold-style-declaration (C and Objective-C only)"
  Warn for obsolescent usages, according to the C Standard, in a
! declaration. For example, warn if storage\-class specifiers like
  \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
  is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wold\-style\-definition\fR (C and Objective\-C only)" 4
  .IX Item "-Wold-style-definition (C and Objective-C only)"
! Warn if an old\-style function definition is used.  A warning is given
  even if there is a previous prototype.  A definition using \fB()\fR
! is not considered an old\-style definition in C23 mode, because it is
  equivalent to \fB(void)\fR in that case, but is considered an
! old\-style definition for older standards.
! .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective\-C only)" 4
  .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
  A function parameter is declared without a type specifier in K&R\-style
  functions:
*************** functions:
*** 9408,9414 ****
  .Ve
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-declaration\-missing\-parameter\-type\fR (C and Objective-C only)" 4
  .IX Item "-Wno-declaration-missing-parameter-type (C and Objective-C only)"
  Do not warn if a function declaration contains a parameter name without
  a type.  Such function declarations do not provide a function prototype
--- 9341,9347 ----
  .Ve
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-declaration\-missing\-parameter\-type\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-declaration-missing-parameter-type (C and Objective-C only)"
  Do not warn if a function declaration contains a parameter name without
  a type.  Such function declarations do not provide a function prototype
*************** is treated as an error.  The error can b
*** 9420,9452 ****
  error alone, with \fB\-Wno\-error=declaration\-missing\-parameter\-type\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
  .IX Item "-Wmissing-prototypes (C and Objective-C only)"
  Warn if a global function is defined without a previous prototype
  declaration.  This warning is issued even if the definition itself
  provides a prototype.  Use this option to detect global functions
  that do not have a matching prototype declaration in a header file.
! This option is not valid for \*(C+ because all function declarations
! provide prototypes and a non-matching declaration declares an
  overload rather than conflict with an earlier declaration.
! Use \fB\-Wmissing\-declarations\fR to detect missing declarations in \*(C+.
! .IP "\fB\-Wmissing\-variable\-declarations\fR (C and Objective-C only)" 4
  .IX Item "-Wmissing-variable-declarations (C and Objective-C only)"
  Warn if a global variable is defined without a previous declaration.
  Use this option to detect global variables that do not have a matching
  extern declaration in a header file.
! .IP "\fB\-Wmissing\-declarations\fR" 4
  .IX Item "-Wmissing-declarations"
  Warn if a global function is defined without a previous declaration.
  Do so even if the definition itself provides a prototype.
  Use this option to detect global functions that are not declared in
  header files.  In C, no warnings are issued for functions with previous
! non-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
! missing prototypes.  In \*(C+, no warnings are issued for function templates,
  or for inline functions, or for functions in anonymous namespaces.
! .IP "\fB\-Wmissing\-field\-initializers\fR" 4
  .IX Item "-Wmissing-field-initializers"
! Warn if a structure's initializer has some fields missing.  For
  example, the following code causes such a warning, because
  \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
  .Sp
--- 9353,9385 ----
  error alone, with \fB\-Wno\-error=declaration\-missing\-parameter\-type\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmissing\-prototypes\fR (C and Objective\-C only)" 4
  .IX Item "-Wmissing-prototypes (C and Objective-C only)"
  Warn if a global function is defined without a previous prototype
  declaration.  This warning is issued even if the definition itself
  provides a prototype.  Use this option to detect global functions
  that do not have a matching prototype declaration in a header file.
! This option is not valid for C++ because all function declarations
! provide prototypes and a non\-matching declaration declares an
  overload rather than conflict with an earlier declaration.
! Use \fB\-Wmissing\-declarations\fR to detect missing declarations in C++.
! .IP "\fB\-Wmissing\-variable\-declarations\fR (C and Objective\-C only)" 4
  .IX Item "-Wmissing-variable-declarations (C and Objective-C only)"
  Warn if a global variable is defined without a previous declaration.
  Use this option to detect global variables that do not have a matching
  extern declaration in a header file.
! .IP \fB\-Wmissing\-declarations\fR 4
  .IX Item "-Wmissing-declarations"
  Warn if a global function is defined without a previous declaration.
  Do so even if the definition itself provides a prototype.
  Use this option to detect global functions that are not declared in
  header files.  In C, no warnings are issued for functions with previous
! non\-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
! missing prototypes.  In C++, no warnings are issued for function templates,
  or for inline functions, or for functions in anonymous namespaces.
! .IP \fB\-Wmissing\-field\-initializers\fR 4
  .IX Item "-Wmissing-field-initializers"
! Warn if a structure\*(Aqs initializer has some fields missing.  For
  example, the following code causes such a warning, because
  \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
  .Sp
*************** In C this option does not warn about the
*** 9471,9477 ****
  \&        struct s x = { 0 };
  .Ve
  .Sp
! Likewise, in \*(C+ this option does not warn about the empty { }
  initializer, for example:
  .Sp
  .Vb 2
--- 9404,9410 ----
  \&        struct s x = { 0 };
  .Ve
  .Sp
! Likewise, in C++ this option does not warn about the empty { }
  initializer, for example:
  .Sp
  .Vb 2
*************** initializer, for example:
*** 9481,9489 ****
  .Sp
  This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
  warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
! .IP "\fB\-Wno\-missing\-requires\fR" 4
  .IX Item "-Wno-missing-requires"
! By default, the compiler warns about a concept-id appearing as a \*(C+20 simple-requirement:
  .Sp
  .Vb 1
  \&        bool satisfied = requires { C<T> };
--- 9414,9422 ----
  .Sp
  This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
  warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
! .IP \fB\-Wno\-missing\-requires\fR 4
  .IX Item "-Wno-missing-requires"
! By default, the compiler warns about a concept\-id appearing as a C++20 simple\-requirement:
  .Sp
  .Vb 1
  \&        bool satisfied = requires { C<T> };
*************** so \fBsatisfied\fR is only true if conce
*** 9500,9506 ****
  type \fBT\fR.
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-requires\fR.
! .IP "\fB\-Wno\-missing\-template\-keyword\fR" 4
  .IX Item "-Wno-missing-template-keyword"
  The member access tokens ., \-> and :: must be followed by the \f(CW\*(C`template\*(C'\fR
  keyword if the parent object is dependent and the member being named is a
--- 9433,9439 ----
  type \fBT\fR.
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-requires\fR.
! .IP \fB\-Wno\-missing\-template\-keyword\fR 4
  .IX Item "-Wno-missing-template-keyword"
  The member access tokens ., \-> and :: must be followed by the \f(CW\*(C`template\*(C'\fR
  keyword if the parent object is dependent and the member being named is a
*************** template, even where m and N are integer
*** 9530,9561 ****
  .Ve
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-template\-keyword\fR.
! .IP "\fB\-Wno\-multichar\fR" 4
  .IX Item "-Wno-multichar"
! Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
! Usually they indicate a typo in the user's code, as they have
! implementation-defined values, and should not be used in portable code.
! .IP "\fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR]" 4
  .IX Item "-Wnormalized=[none|id|nfc|nfkc]"
! In \s-1ISO C\s0 and \s-1ISO \*(C+,\s0 two identifiers are different if they are
  different sequences of characters.  However, sometimes when characters
! outside the basic \s-1ASCII\s0 character set are used, you can have two
  different character sequences that look the same.  To avoid confusion,
! the \s-1ISO 10646\s0 standard sets out some \fInormalization rules\fR which
  when applied ensure that two sequences that look the same are turned into
! the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
  have not been normalized; this option controls that warning.
  .Sp
! There are four levels of warning supported by \s-1GCC.\s0  The default is
  \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
! not in the \s-1ISO 10646 \*(L"C\*(R"\s0 normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
  recommended form for most uses.  It is equivalent to
  \&\fB\-Wnormalized\fR.
  .Sp
  Unfortunately, there are some characters allowed in identifiers by
! \&\s-1ISO C\s0 and \s-1ISO \*(C+\s0 that, when turned into \s-1NFC,\s0 are not allowed in 
! identifiers.  That is, there's no way to use these symbols in portable
! \&\s-1ISO C\s0 or \*(C+ and have all your identifiers in \s-1NFC.\s0
  \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
  It is hoped that future versions of the standards involved will correct
  this, which is why this option is not the default.
--- 9463,9494 ----
  .Ve
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-template\-keyword\fR.
! .IP \fB\-Wno\-multichar\fR 4
  .IX Item "-Wno-multichar"
! Do not warn if a multicharacter constant (\fB\*(AqFOOF\*(Aq\fR) is used.
! Usually they indicate a typo in the user\*(Aqs code, as they have
! implementation\-defined values, and should not be used in portable code.
! .IP \fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 4
  .IX Item "-Wnormalized=[none|id|nfc|nfkc]"
! In ISO C and ISO C++, two identifiers are different if they are
  different sequences of characters.  However, sometimes when characters
! outside the basic ASCII character set are used, you can have two
  different character sequences that look the same.  To avoid confusion,
! the ISO 10646 standard sets out some \fInormalization rules\fR which
  when applied ensure that two sequences that look the same are turned into
! the same sequence.  GCC can warn you if you are using identifiers that
  have not been normalized; this option controls that warning.
  .Sp
! There are four levels of warning supported by GCC.  The default is
  \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
! not in the ISO 10646 "C" normalized form, \fINFC\fR.  NFC is the
  recommended form for most uses.  It is equivalent to
  \&\fB\-Wnormalized\fR.
  .Sp
  Unfortunately, there are some characters allowed in identifiers by
! ISO C and ISO C++ that, when turned into NFC, are not allowed in 
! identifiers.  That is, there\*(Aqs no way to use these symbols in portable
! ISO C or C++ and have all your identifiers in NFC.
  \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
  It is hoped that future versions of the standards involved will correct
  this, which is why this option is not the default.
*************** this, which is why this option is not th
*** 9563,9617 ****
  You can switch the warning off for all characters by writing
  \&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
  only do this if you are using some other normalization scheme (like
! \&\*(L"D\*(R"), because otherwise you can easily create bugs that are
  literally impossible to see.
  .Sp
! Some characters in \s-1ISO 10646\s0 have distinct meanings but look identical
  in some fonts or display methodologies, especially once formatting has
! been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT LATIN SMALL
! LETTER N\*(R",\s0 displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
! placed in a superscript.  \s-1ISO 10646\s0 defines the \fI\s-1NFKC\s0\fR
  normalization scheme to convert all these into a standard form as
! well, and \s-1GCC\s0 warns if your code is not in \s-1NFKC\s0 if you use
  \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
  about every identifier that contains the letter O because it might be
  confused with the digit 0, and so is not the default, but may be
  useful as a local coding convention if the programming environment 
  cannot be fixed to display these characters distinctly.
! .IP "\fB\-Wno\-attribute\-warning\fR" 4
  .IX Item "-Wno-attribute-warning"
  Do not warn about usage of functions
  declared with \f(CW\*(C`warning\*(C'\fR attribute.  By default, this warning is
  enabled.  \fB\-Wno\-attribute\-warning\fR can be used to disable the
  warning or \fB\-Wno\-error=attribute\-warning\fR can be used to
  disable the error when compiled with \fB\-Werror\fR flag.
! .IP "\fB\-Wno\-deprecated\fR" 4
  .IX Item "-Wno-deprecated"
  Do not warn about usage of deprecated features.
! .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
  .IX Item "-Wno-deprecated-declarations"
  Do not warn about uses of functions,
  variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
  attribute.
! .IP "\fB\-Wno\-overflow\fR" 4
  .IX Item "-Wno-overflow"
! Do not warn about compile-time overflow in constant expressions.
! .IP "\fB\-Wno\-odr\fR" 4
  .IX Item "-Wno-odr"
! Warn about One Definition Rule violations during link-time optimization.
  Enabled by default.
! .IP "\fB\-Wopenacc\-parallelism\fR" 4
  .IX Item "-Wopenacc-parallelism"
  Warn about potentially suboptimal choices related to OpenACC parallelism.
! .IP "\fB\-Wno\-openmp\fR" 4
  .IX Item "-Wno-openmp"
  Warn about suspicious OpenMP code.
! .IP "\fB\-Wopenmp\-simd\fR" 4
  .IX Item "-Wopenmp-simd"
  Warn if the vectorizer cost model overrides the OpenMP
  simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
  option can be used to relax the cost model.
! .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
  .IX Item "-Woverride-init (C and Objective-C only)"
  Warn if an initialized field without side effects is overridden when
  using designated initializers.
--- 9496,9550 ----
  You can switch the warning off for all characters by writing
  \&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
  only do this if you are using some other normalization scheme (like
! "D"), because otherwise you can easily create bugs that are
  literally impossible to see.
  .Sp
! Some characters in ISO 10646 have distinct meanings but look identical
  in some fonts or display methodologies, especially once formatting has
! been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, "SUPERSCRIPT LATIN SMALL
! LETTER N", displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
! placed in a superscript.  ISO 10646 defines the \fINFKC\fR
  normalization scheme to convert all these into a standard form as
! well, and GCC warns if your code is not in NFKC if you use
  \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
  about every identifier that contains the letter O because it might be
  confused with the digit 0, and so is not the default, but may be
  useful as a local coding convention if the programming environment 
  cannot be fixed to display these characters distinctly.
! .IP \fB\-Wno\-attribute\-warning\fR 4
  .IX Item "-Wno-attribute-warning"
  Do not warn about usage of functions
  declared with \f(CW\*(C`warning\*(C'\fR attribute.  By default, this warning is
  enabled.  \fB\-Wno\-attribute\-warning\fR can be used to disable the
  warning or \fB\-Wno\-error=attribute\-warning\fR can be used to
  disable the error when compiled with \fB\-Werror\fR flag.
! .IP \fB\-Wno\-deprecated\fR 4
  .IX Item "-Wno-deprecated"
  Do not warn about usage of deprecated features.
! .IP \fB\-Wno\-deprecated\-declarations\fR 4
  .IX Item "-Wno-deprecated-declarations"
  Do not warn about uses of functions,
  variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
  attribute.
! .IP \fB\-Wno\-overflow\fR 4
  .IX Item "-Wno-overflow"
! Do not warn about compile\-time overflow in constant expressions.
! .IP \fB\-Wno\-odr\fR 4
  .IX Item "-Wno-odr"
! Warn about One Definition Rule violations during link\-time optimization.
  Enabled by default.
! .IP \fB\-Wopenacc\-parallelism\fR 4
  .IX Item "-Wopenacc-parallelism"
  Warn about potentially suboptimal choices related to OpenACC parallelism.
! .IP \fB\-Wno\-openmp\fR 4
  .IX Item "-Wno-openmp"
  Warn about suspicious OpenMP code.
! .IP \fB\-Wopenmp\-simd\fR 4
  .IX Item "-Wopenmp-simd"
  Warn if the vectorizer cost model overrides the OpenMP
  simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
  option can be used to relax the cost model.
! .IP "\fB\-Woverride\-init\fR (C and Objective\-C only)" 4
  .IX Item "-Woverride-init (C and Objective-C only)"
  Warn if an initialized field without side effects is overridden when
  using designated initializers.
*************** using designated initializers.
*** 9619,9633 ****
  This warning is included in \fB\-Wextra\fR.  To get other
  \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
  \&\-Wno\-override\-init\fR.
! .IP "\fB\-Wno\-override\-init\-side\-effects\fR (C and Objective-C only)" 4
  .IX Item "-Wno-override-init-side-effects (C and Objective-C only)"
  Do not warn if an initialized field with side effects is overridden when
  using designated initializers.  This warning is enabled by default.
! .IP "\fB\-Wpacked\fR" 4
  .IX Item "-Wpacked"
  Warn if a structure is given the packed attribute, but the packed
  attribute has no effect on the layout or size of the structure.
! Such structures may be mis-aligned for little benefit.  For
  instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
  is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
  have the packed attribute:
--- 9552,9566 ----
  This warning is included in \fB\-Wextra\fR.  To get other
  \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
  \&\-Wno\-override\-init\fR.
! .IP "\fB\-Wno\-override\-init\-side\-effects\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-override-init-side-effects (C and Objective-C only)"
  Do not warn if an initialized field with side effects is overridden when
  using designated initializers.  This warning is enabled by default.
! .IP \fB\-Wpacked\fR 4
  .IX Item "-Wpacked"
  Warn if a structure is given the packed attribute, but the packed
  attribute has no effect on the layout or size of the structure.
! Such structures may be mis\-aligned for little benefit.  For
  instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
  is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
  have the packed attribute:
*************** have the packed attribute:
*** 9642,9653 ****
  \&          struct foo f;
  \&        };
  .Ve
! .IP "\fB\-Wnopacked\-bitfield\-compat\fR" 4
  .IX Item "-Wnopacked-bitfield-compat"
! The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
! on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This was fixed in \s-1GCC 4.4\s0 but
! the change can lead to differences in the structure layout.  \s-1GCC\s0
! informs you when the offset of such a field has changed in \s-1GCC 4.4.\s0
  For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
  and \f(CW\*(C`b\*(C'\fR in this structure:
  .Sp
--- 9575,9586 ----
  \&          struct foo f;
  \&        };
  .Ve
! .IP \fB\-Wnopacked\-bitfield\-compat\fR 4
  .IX Item "-Wnopacked-bitfield-compat"
! The 4.1, 4.2 and 4.3 series of GCC ignore the \f(CW\*(C`packed\*(C'\fR attribute
! on bit\-fields of type \f(CW\*(C`char\*(C'\fR.  This was fixed in GCC 4.4 but
! the change can lead to differences in the structure layout.  GCC
! informs you when the offset of such a field has changed in GCC 4.4.
  For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
  and \f(CW\*(C`b\*(C'\fR in this structure:
  .Sp
*************** and \f(CW\*(C`b\*(C'\fR in this structur
*** 9661,9668 ****
  .Sp
  This warning is enabled by default.  Use
  \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
! .IP "\fB\-Wpacked\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wpacked-not-aligned (C, , Objective-C and Objective- only)"
  Warn if a structure field with explicitly specified alignment in a
  packed struct or union is misaligned.  For example, a warning will
  be issued on \f(CW\*(C`struct S\*(C'\fR, like, \f(CW\*(C`warning: alignment 1 of
--- 9594,9601 ----
  .Sp
  This warning is enabled by default.  Use
  \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
! .IP "\fB\-Wpacked\-not\-aligned\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)"
  Warn if a structure field with explicitly specified alignment in a
  packed struct or union is misaligned.  For example, a warning will
  be issued on \f(CW\*(C`struct S\*(C'\fR, like, \f(CW\*(C`warning: alignment 1 of
*************** be issued on \f(CW\*(C`struct S\*(C'\fR,
*** 9676,9699 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wpadded\fR" 4
  .IX Item "-Wpadded"
  Warn if padding is included in a structure, either to align an element
  of the structure or to align the whole structure.  Sometimes when this
  happens it is possible to rearrange the fields of the structure to
  reduce the padding and so make the structure smaller.
! .IP "\fB\-Wredundant\-decls\fR" 4
  .IX Item "-Wredundant-decls"
  Warn if anything is declared more than once in the same scope, even in
  cases where multiple declaration is valid and changes nothing.
! .IP "\fB\-Wrestrict\fR" 4
  .IX Item "-Wrestrict"
  Warn when an object referenced by a \f(CW\*(C`restrict\*(C'\fR\-qualified parameter
! (or, in \*(C+, a \f(CW\*(C`_\|_restrict\*(C'\fR\-qualified parameter) is aliased by another
  argument, or when copies between such objects overlap.  For example,
  the call to the \f(CW\*(C`strcpy\*(C'\fR function below attempts to truncate the string
  by replacing its initial characters with the last four.  However, because
! the call writes the terminating \s-1NUL\s0 into \f(CW\*(C`a[4]\*(C'\fR, the copies overlap and
  the call is diagnosed.
  .Sp
  .Vb 6
--- 9609,9632 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wpadded\fR 4
  .IX Item "-Wpadded"
  Warn if padding is included in a structure, either to align an element
  of the structure or to align the whole structure.  Sometimes when this
  happens it is possible to rearrange the fields of the structure to
  reduce the padding and so make the structure smaller.
! .IP \fB\-Wredundant\-decls\fR 4
  .IX Item "-Wredundant-decls"
  Warn if anything is declared more than once in the same scope, even in
  cases where multiple declaration is valid and changes nothing.
! .IP \fB\-Wrestrict\fR 4
  .IX Item "-Wrestrict"
  Warn when an object referenced by a \f(CW\*(C`restrict\*(C'\fR\-qualified parameter
! (or, in C++, a \f(CW\*(C`_\|_restrict\*(C'\fR\-qualified parameter) is aliased by another
  argument, or when copies between such objects overlap.  For example,
  the call to the \f(CW\*(C`strcpy\*(C'\fR function below attempts to truncate the string
  by replacing its initial characters with the last four.  However, because
! the call writes the terminating NUL into \f(CW\*(C`a[4]\*(C'\fR, the copies overlap and
  the call is diagnosed.
  .Sp
  .Vb 6
*************** the call is diagnosed.
*** 9708,9717 ****
  The \fB\-Wrestrict\fR option detects some instances of simple overlap
  even without optimization but works best at \fB\-O2\fR and above.  It
  is included in \fB\-Wall\fR.
! .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
  .IX Item "-Wnested-externs (C and Objective-C only)"
  Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
! .IP "\fB\-Winline\fR" 4
  .IX Item "-Winline"
  Warn if a function that is declared as inline cannot be inlined.
  Even with this option, the compiler does not warn about failures to
--- 9641,9650 ----
  The \fB\-Wrestrict\fR option detects some instances of simple overlap
  even without optimization but works best at \fB\-O2\fR and above.  It
  is included in \fB\-Wall\fR.
! .IP "\fB\-Wnested\-externs\fR (C and Objective\-C only)" 4
  .IX Item "-Wnested-externs (C and Objective-C only)"
  Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
! .IP \fB\-Winline\fR 4
  .IX Item "-Winline"
  Warn if a function that is declared as inline cannot be inlined.
  Even with this option, the compiler does not warn about failures to
*************** the size of the function being inlined a
*** 9723,9732 ****
  that has already been done in the current function.  Therefore,
  seemingly insignificant changes in the source program can cause the
  warnings produced by \fB\-Winline\fR to appear or disappear.
! .IP "\fB\-Winterference\-size\fR" 4
  .IX Item "-Winterference-size"
! Warn about use of \*(C+17 \f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR
! without specifying its value with \fB\-\-param destructive-interference-size\fR.
  Also warn about questionable values for that option.
  .Sp
  This variable is intended to be used for controlling class layout, to
--- 9656,9665 ----
  that has already been done in the current function.  Therefore,
  seemingly insignificant changes in the source program can cause the
  warnings produced by \fB\-Winline\fR to appear or disappear.
! .IP \fB\-Winterference\-size\fR 4
  .IX Item "-Winterference-size"
! Warn about use of C++17 \f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR
! without specifying its value with \fB\-\-param destructive\-interference\-size\fR.
  Also warn about questionable values for that option.
  .Sp
  This variable is intended to be used for controlling class layout, to
*************** avoid false sharing in concurrent code:
*** 9742,9816 ****
  .Ve
  .Sp
  Here \fBone\fR and \fBtwo\fR are intended to be far enough apart
! that stores to one won't require accesses to the other to reload the
  cache line.
  .Sp
! By default, \fB\-\-param destructive-interference-size\fR and
! \&\fB\-\-param constructive-interference-size\fR are set based on the
  current \fB\-mtune\fR option, typically to the L1 cache line size
! for the particular target \s-1CPU,\s0 sometimes to a range if tuning for a
! generic target.  So all translation units that depend on \s-1ABI\s0
  compatibility for the use of these variables must be compiled with
  the same \fB\-mtune\fR (or \fB\-mcpu\fR).
  .Sp
! If \s-1ABI\s0 stability is important, such as if the use is in a header for a
  library, you should probably not use the hardware interference size
  variables at all.  Alternatively, you can force a particular value
  with \fB\-\-param\fR.
  .Sp
! If you are confident that your use of the variable does not affect \s-1ABI\s0
  outside a single build of your project, you can turn off the warning
  with \fB\-Wno\-interference\-size\fR.
! .IP "\fB\-Wint\-in\-bool\-context\fR" 4
  .IX Item "-Wint-in-bool-context"
  Warn for suspicious use of integer values where boolean values are expected,
! such as conditional expressions (?:) using non-boolean integer constants in
  boolean context, like \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR.  Or left shifting of signed
  integers in boolean context, like \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR.  Likewise
  for all kinds of multiplications regardless of the data type.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
  .IX Item "-Wno-int-to-pointer-cast"
  Suppress warnings from casts to pointer type of an integer of a
! different size. In \*(C+, casting to a pointer type of smaller size is
! an error. \fBWint-to-pointer-cast\fR is enabled by default.
! .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
  .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
  Suppress warnings from casts from a pointer to an integer type of a
  different size.
! .IP "\fB\-Winvalid\-pch\fR" 4
  .IX Item "-Winvalid-pch"
  Warn if a precompiled header is found in
  the search path but cannot be used.
! .IP "\fB\-Winvalid\-utf8\fR" 4
  .IX Item "-Winvalid-utf8"
! Warn if an invalid \s-1UTF\-8\s0 character is found.
! This warning is on by default for \*(C+23 if \fB\-finput\-charset=UTF\-8\fR
  is used and turned into error with \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-unicode\fR" 4
  .IX Item "-Wno-unicode"
! Don't diagnose invalid forms of delimited or named escape sequences which are
  treated as separate tokens.  \fBWunicode\fR is enabled by default.
! .IP "\fB\-Wlong\-long\fR" 4
  .IX Item "-Wlong-long"
  Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
! \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in \s-1ISO C90\s0 and \*(C+98
  modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wvariadic\-macros\fR" 4
  .IX Item "-Wvariadic-macros"
! Warn if variadic macros are used in \s-1ISO C90\s0 mode, or if the \s-1GNU\s0
! alternate syntax is used in \s-1ISO C99\s0 mode.  This is enabled by either
  \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
  messages, use \fB\-Wno\-variadic\-macros\fR.
! .IP "\fB\-Wno\-varargs\fR" 4
  .IX Item "-Wno-varargs"
  Do not warn upon questionable usage of the macros used to handle variable
  arguments like \f(CW\*(C`va_start\*(C'\fR.  These warnings are enabled by default.
! .IP "\fB\-Wvector\-operation\-performance\fR" 4
  .IX Item "-Wvector-operation-performance"
! Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
  architecture.  Mainly useful for the performance tuning.
  Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
  scalar operation is performed on every vector element; 
--- 9675,9749 ----
  .Ve
  .Sp
  Here \fBone\fR and \fBtwo\fR are intended to be far enough apart
! that stores to one won\*(Aqt require accesses to the other to reload the
  cache line.
  .Sp
! By default, \fB\-\-param destructive\-interference\-size\fR and
! \&\fB\-\-param constructive\-interference\-size\fR are set based on the
  current \fB\-mtune\fR option, typically to the L1 cache line size
! for the particular target CPU, sometimes to a range if tuning for a
! generic target.  So all translation units that depend on ABI
  compatibility for the use of these variables must be compiled with
  the same \fB\-mtune\fR (or \fB\-mcpu\fR).
  .Sp
! If ABI stability is important, such as if the use is in a header for a
  library, you should probably not use the hardware interference size
  variables at all.  Alternatively, you can force a particular value
  with \fB\-\-param\fR.
  .Sp
! If you are confident that your use of the variable does not affect ABI
  outside a single build of your project, you can turn off the warning
  with \fB\-Wno\-interference\-size\fR.
! .IP \fB\-Wint\-in\-bool\-context\fR 4
  .IX Item "-Wint-in-bool-context"
  Warn for suspicious use of integer values where boolean values are expected,
! such as conditional expressions (?:) using non\-boolean integer constants in
  boolean context, like \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR.  Or left shifting of signed
  integers in boolean context, like \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR.  Likewise
  for all kinds of multiplications regardless of the data type.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-int\-to\-pointer\-cast\fR 4
  .IX Item "-Wno-int-to-pointer-cast"
  Suppress warnings from casts to pointer type of an integer of a
! different size. In C++, casting to a pointer type of smaller size is
! an error. \fBWint\-to\-pointer\-cast\fR is enabled by default.
! .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
  Suppress warnings from casts from a pointer to an integer type of a
  different size.
! .IP \fB\-Winvalid\-pch\fR 4
  .IX Item "-Winvalid-pch"
  Warn if a precompiled header is found in
  the search path but cannot be used.
! .IP \fB\-Winvalid\-utf8\fR 4
  .IX Item "-Winvalid-utf8"
! Warn if an invalid UTF\-8 character is found.
! This warning is on by default for C++23 if \fB\-finput\-charset=UTF\-8\fR
  is used and turned into error with \fB\-pedantic\-errors\fR.
! .IP \fB\-Wno\-unicode\fR 4
  .IX Item "-Wno-unicode"
! Don\*(Aqt diagnose invalid forms of delimited or named escape sequences which are
  treated as separate tokens.  \fBWunicode\fR is enabled by default.
! .IP \fB\-Wlong\-long\fR 4
  .IX Item "-Wlong-long"
  Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
! \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in ISO C90 and C++98
  modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wvariadic\-macros\fR 4
  .IX Item "-Wvariadic-macros"
! Warn if variadic macros are used in ISO C90 mode, or if the GNU
! alternate syntax is used in ISO C99 mode.  This is enabled by either
  \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
  messages, use \fB\-Wno\-variadic\-macros\fR.
! .IP \fB\-Wno\-varargs\fR 4
  .IX Item "-Wno-varargs"
  Do not warn upon questionable usage of the macros used to handle variable
  arguments like \f(CW\*(C`va_start\*(C'\fR.  These warnings are enabled by default.
! .IP \fB\-Wvector\-operation\-performance\fR 4
  .IX Item "-Wvector-operation-performance"
! Warn if vector operation is not implemented via SIMD capabilities of the
  architecture.  Mainly useful for the performance tuning.
  Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
  scalar operation is performed on every vector element; 
*************** scalar operation is performed on every v
*** 9818,9859 ****
  using scalars of wider type, which normally is more performance efficient;
  and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
  scalar type.
! .IP "\fB\-Wvla\fR" 4
  .IX Item "-Wvla"
! Warn if a variable-length array is used in the code.
  \&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
! the variable-length array.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wvla\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Wvla-larger-than=byte-size"
  If this option is used, the compiler warns for declarations of
! variable-length arrays whose size is either unbounded, or bounded
! by an argument that allows the array size to exceed \fIbyte-size\fR
! bytes.  This is similar to how \fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR
! works, but with variable-length arrays.
  .Sp
! Note that \s-1GCC\s0 may optimize small variable-length arrays of a known
  value into plain arrays, so this warning may not get triggered for
  such arrays.
  .Sp
! \&\fB\-Wvla\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default but
  is typically only effective when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR.
! .IP "\fB\-Wno\-vla\-larger\-than\fR" 4
  .IX Item "-Wno-vla-larger-than"
  Disable \fB\-Wvla\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wvla\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wvla\-parameter\fR" 4
  .IX Item "-Wvla-parameter"
  Warn about redeclarations of functions involving arguments of Variable
  Length Array types of inconsistent kinds or forms, and enable the detection
! of out-of-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
! If the first function declaration uses the \s-1VLA\s0 form the bound specified
  in the array is assumed to be the minimum number of elements expected to
  be provided in calls to the function and the maximum number of elements
  accessed by it.  Failing to provide arguments of sufficient size or
--- 9751,9792 ----
  using scalars of wider type, which normally is more performance efficient;
  and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
  scalar type.
! .IP \fB\-Wvla\fR 4
  .IX Item "-Wvla"
! Warn if a variable\-length array is used in the code.
  \&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
! the variable\-length array.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wvla\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Wvla-larger-than=byte-size"
  If this option is used, the compiler warns for declarations of
! variable\-length arrays whose size is either unbounded, or bounded
! by an argument that allows the array size to exceed \fIbyte\-size\fR
! bytes.  This is similar to how \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR
! works, but with variable\-length arrays.
  .Sp
! Note that GCC may optimize small variable\-length arrays of a known
  value into plain arrays, so this warning may not get triggered for
  such arrays.
  .Sp
! \&\fB\-Wvla\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default but
  is typically only effective when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR.
! .IP \fB\-Wno\-vla\-larger\-than\fR 4
  .IX Item "-Wno-vla-larger-than"
  Disable \fB\-Wvla\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wvla\-larger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wvla\-parameter\fR 4
  .IX Item "-Wvla-parameter"
  Warn about redeclarations of functions involving arguments of Variable
  Length Array types of inconsistent kinds or forms, and enable the detection
! of out\-of\-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
! If the first function declaration uses the VLA form the bound specified
  in the array is assumed to be the minimum number of elements expected to
  be provided in calls to the function and the maximum number of elements
  accessed by it.  Failing to provide arguments of sufficient size or
*************** accessing more than the maximum number o
*** 9862,9869 ****
  For example, the warning triggers for the following redeclarations because
  the first one allows an array of any size to be passed to \f(CW\*(C`f\*(C'\fR while
  the second one specifies that the array argument must have at least \f(CW\*(C`n\*(C'\fR
! elements.  In addition, calling \f(CW\*(C`f\*(C'\fR with the associated \s-1VLA\s0 bound
! parameter in excess of the actual \s-1VLA\s0 bound triggers a warning as well.
  .Sp
  .Vb 3
  \&        void f (int n, int[n]);
--- 9795,9802 ----
  For example, the warning triggers for the following redeclarations because
  the first one allows an array of any size to be passed to \f(CW\*(C`f\*(C'\fR while
  the second one specifies that the array argument must have at least \f(CW\*(C`n\*(C'\fR
! elements.  In addition, calling \f(CW\*(C`f\*(C'\fR with the associated VLA bound
! parameter in excess of the actual VLA bound triggers a warning as well.
  .Sp
  .Vb 3
  \&        void f (int n, int[n]);
*************** parameter in excess of the actual \s-1VL
*** 9884,9973 ****
  \&\fB\-Wvla\-parameter\fR is included in \fB\-Wall\fR.  The
  \&\fB\-Warray\-parameter\fR option triggers warnings for similar problems
  involving ordinary array arguments.
! .IP "\fB\-Wvolatile\-register\-var\fR" 4
  .IX Item "-Wvolatile-register-var"
  Warn if a register variable is declared volatile.  The volatile
  modifier does not inhibit all optimizations that may eliminate reads
  and/or writes to register variables.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wno\-xor\-used\-as\-pow\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-xor-used-as-pow (C, , Objective-C and Objective- only)"
  Disable warnings about uses of \f(CW\*(C`^\*(C'\fR, the exclusive or operator,
  where it appears the code meant exponentiation.
  Specifically, the warning occurs when the
! left-hand side is the decimal constant 2 or 10 and the right-hand side
  is also a decimal constant.
  .Sp
! In C and \*(C+, \f(CW\*(C`^\*(C'\fR means exclusive or, whereas in some other languages
! (e.g. TeX and some versions of \s-1BASIC\s0) it means exponentiation.
  .Sp
  This warning can be silenced by converting one of the operands to
  hexadecimal as well as by compiling with \fB\-Wno\-xor\-used\-as\-pow\fR.
! .IP "\fB\-Wdisabled\-optimization\fR" 4
  .IX Item "-Wdisabled-optimization"
  Warn if a requested optimization pass is disabled.  This warning does
  not generally indicate that there is anything wrong with your code; it
! merely indicates that \s-1GCC\s0's optimizers are unable to handle the code
  effectively.  Often, the problem is that your code is too big or too
! complex; \s-1GCC\s0 refuses to optimize programs when the optimization
  itself is likely to take inordinate amounts of time.
! .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
  .IX Item "-Wpointer-sign (C and Objective-C only)"
  Warn for pointer argument passing or assignment with different signedness.
! This option is only supported for C and Objective-C.  It is implied by
  \&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
  \&\fB\-Wno\-pointer\-sign\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wstack\-protector\fR" 4
  .IX Item "-Wstack-protector"
  This option is only active when \fB\-fstack\-protector\fR is active.  It
  warns about functions that are not protected against stack smashing.
! .IP "\fB\-Woverlength\-strings\fR" 4
  .IX Item "-Woverlength-strings"
! Warn about string constants that are longer than the \*(L"minimum
! maximum\*(R" length specified in the C standard.  Modern compilers
  generally allow string constants that are much longer than the
! standard's minimum limit, but very portable programs should avoid
  using longer strings.
  .Sp
  The limit applies \fIafter\fR string constant concatenation, and does
! not count the trailing \s-1NUL.\s0  In C90, the limit was 509 characters; in
! C99, it was raised to 4095.  \*(C+98 does not specify a normative
! minimum maximum, so we do not diagnose overlength strings in \*(C+.
  .Sp
  This option is implied by \fB\-Wpedantic\fR, and can be disabled with
  \&\fB\-Wno\-overlength\-strings\fR.
! .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
  .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
  Issue a warning for any floating constant that does not have
  a suffix.  When used together with \fB\-Wsystem\-headers\fR it
  warns about such constants in system header files.  This can be useful
  when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
! from the decimal floating-point extension to C99.
! .IP "\fB\-Wno\-lto\-type\-mismatch\fR" 4
  .IX Item "-Wno-lto-type-mismatch"
! During the link-time optimization, do not warn about type mismatches in
  global declarations from different compilation units.
  Requires \fB\-flto\fR to be enabled.  Enabled by default.
! .IP "\fB\-Wno\-designated\-init\fR (C and Objective-C only)" 4
  .IX Item "-Wno-designated-init (C and Objective-C only)"
  Suppress warnings when a positional initializer is used to initialize
  a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
  attribute.
  .SS "Options That Control Static Analysis"
  .IX Subsection "Options That Control Static Analysis"
! .IP "\fB\-fanalyzer\fR" 4
  .IX Item "-fanalyzer"
  This option enables an static analysis of program flow which looks
! for \*(L"interesting\*(R" interprocedural paths through the
  code, and issues warnings for problems found on them.
  .Sp
! This analysis is much more expensive than other \s-1GCC\s0 warnings.
  .Sp
! In technical terms, it performs coverage-guided symbolic execution of
  the code being compiled.  It is neither sound nor complete: it can
! have false positives and false negatives.  It is a bug-finding tool,
  rather than a tool for proving program correctness.
  .Sp
  The analyzer is only suitable for use on C code in this release.
--- 9817,9906 ----
  \&\fB\-Wvla\-parameter\fR is included in \fB\-Wall\fR.  The
  \&\fB\-Warray\-parameter\fR option triggers warnings for similar problems
  involving ordinary array arguments.
! .IP \fB\-Wvolatile\-register\-var\fR 4
  .IX Item "-Wvolatile-register-var"
  Warn if a register variable is declared volatile.  The volatile
  modifier does not inhibit all optimizations that may eliminate reads
  and/or writes to register variables.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wno\-xor\-used\-as\-pow\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-xor-used-as-pow (C, C++, Objective-C and Objective-C++ only)"
  Disable warnings about uses of \f(CW\*(C`^\*(C'\fR, the exclusive or operator,
  where it appears the code meant exponentiation.
  Specifically, the warning occurs when the
! left\-hand side is the decimal constant 2 or 10 and the right\-hand side
  is also a decimal constant.
  .Sp
! In C and C++, \f(CW\*(C`^\*(C'\fR means exclusive or, whereas in some other languages
! (e.g. TeX and some versions of BASIC) it means exponentiation.
  .Sp
  This warning can be silenced by converting one of the operands to
  hexadecimal as well as by compiling with \fB\-Wno\-xor\-used\-as\-pow\fR.
! .IP \fB\-Wdisabled\-optimization\fR 4
  .IX Item "-Wdisabled-optimization"
  Warn if a requested optimization pass is disabled.  This warning does
  not generally indicate that there is anything wrong with your code; it
! merely indicates that GCC\*(Aqs optimizers are unable to handle the code
  effectively.  Often, the problem is that your code is too big or too
! complex; GCC refuses to optimize programs when the optimization
  itself is likely to take inordinate amounts of time.
! .IP "\fB\-Wpointer\-sign\fR (C and Objective\-C only)" 4
  .IX Item "-Wpointer-sign (C and Objective-C only)"
  Warn for pointer argument passing or assignment with different signedness.
! This option is only supported for C and Objective\-C.  It is implied by
  \&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
  \&\fB\-Wno\-pointer\-sign\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wstack\-protector\fR 4
  .IX Item "-Wstack-protector"
  This option is only active when \fB\-fstack\-protector\fR is active.  It
  warns about functions that are not protected against stack smashing.
! .IP \fB\-Woverlength\-strings\fR 4
  .IX Item "-Woverlength-strings"
! Warn about string constants that are longer than the "minimum
! maximum" length specified in the C standard.  Modern compilers
  generally allow string constants that are much longer than the
! standard\*(Aqs minimum limit, but very portable programs should avoid
  using longer strings.
  .Sp
  The limit applies \fIafter\fR string constant concatenation, and does
! not count the trailing NUL.  In C90, the limit was 509 characters; in
! C99, it was raised to 4095.  C++98 does not specify a normative
! minimum maximum, so we do not diagnose overlength strings in C++.
  .Sp
  This option is implied by \fB\-Wpedantic\fR, and can be disabled with
  \&\fB\-Wno\-overlength\-strings\fR.
! .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective\-C only)" 4
  .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
  Issue a warning for any floating constant that does not have
  a suffix.  When used together with \fB\-Wsystem\-headers\fR it
  warns about such constants in system header files.  This can be useful
  when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
! from the decimal floating\-point extension to C99.
! .IP \fB\-Wno\-lto\-type\-mismatch\fR 4
  .IX Item "-Wno-lto-type-mismatch"
! During the link\-time optimization, do not warn about type mismatches in
  global declarations from different compilation units.
  Requires \fB\-flto\fR to be enabled.  Enabled by default.
! .IP "\fB\-Wno\-designated\-init\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-designated-init (C and Objective-C only)"
  Suppress warnings when a positional initializer is used to initialize
  a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
  attribute.
  .SS "Options That Control Static Analysis"
  .IX Subsection "Options That Control Static Analysis"
! .IP \fB\-fanalyzer\fR 4
  .IX Item "-fanalyzer"
  This option enables an static analysis of program flow which looks
! for "interesting" interprocedural paths through the
  code, and issues warnings for problems found on them.
  .Sp
! This analysis is much more expensive than other GCC warnings.
  .Sp
! In technical terms, it performs coverage\-guided symbolic execution of
  the code being compiled.  It is neither sound nor complete: it can
! have false positives and false negatives.  It is a bug\-finding tool,
  rather than a tool for proving program correctness.
  .Sp
  The analyzer is only suitable for use on C code in this release.
*************** Enabling this option effectively enables
*** 10023,10031 ****
  \&\-Wanalyzer\-write\-to\-const
  \&\-Wanalyzer\-write\-to\-string\-literal\fR
  .Sp
! This option is only available if \s-1GCC\s0 was configured with analyzer
  support enabled.
! .IP "\fB\-Wanalyzer\-symbol\-too\-complex\fR" 4
  .IX Item "-Wanalyzer-symbol-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to track the state of memory, but these can be defeated by
--- 9956,9964 ----
  \&\-Wanalyzer\-write\-to\-const
  \&\-Wanalyzer\-write\-to\-string\-literal\fR
  .Sp
! This option is only available if GCC was configured with analyzer
  support enabled.
! .IP \fB\-Wanalyzer\-symbol\-too\-complex\fR 4
  .IX Item "-Wanalyzer-symbol-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to track the state of memory, but these can be defeated by
*************** if they exceed the threshold defined by
*** 10036,10042 ****
  \&\fB\-\-param analyzer\-max\-svalue\-depth=\fR\fIvalue\fR, and falls back
  to an imprecise representation for such expressions.
  The \fB\-Wanalyzer\-symbol\-too\-complex\fR option warns if this occurs.
! .IP "\fB\-Wanalyzer\-too\-complex\fR" 4
  .IX Item "-Wanalyzer-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to explore the control flow and data flow in the program,
--- 9969,9975 ----
  \&\fB\-\-param analyzer\-max\-svalue\-depth=\fR\fIvalue\fR, and falls back
  to an imprecise representation for such expressions.
  The \fB\-Wanalyzer\-symbol\-too\-complex\fR option warns if this occurs.
! .IP \fB\-Wanalyzer\-too\-complex\fR 4
  .IX Item "-Wanalyzer-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to explore the control flow and data flow in the program,
*************** but these can be defeated by sufficientl
*** 10045,10051 ****
  By default, the analysis silently stops if the code is too
  complicated for the analyzer to fully explore and it reaches an internal
  limit.  The \fB\-Wanalyzer\-too\-complex\fR option warns if this occurs.
! .IP "\fB\-Wno\-analyzer\-allocation\-size\fR" 4
  .IX Item "-Wno-analyzer-allocation-size"
  This warning requires \fB\-fanalyzer\fR, which enables it;
  to disable it, use \fB\-Wno\-analyzer\-allocation\-size\fR.
--- 9978,9984 ----
  By default, the analysis silently stops if the code is too
  complicated for the analyzer to fully explore and it reaches an internal
  limit.  The \fB\-Wanalyzer\-too\-complex\fR option warns if this occurs.
! .IP \fB\-Wno\-analyzer\-allocation\-size\fR 4
  .IX Item "-Wno-analyzer-allocation-size"
  This warning requires \fB\-fanalyzer\fR, which enables it;
  to disable it, use \fB\-Wno\-analyzer\-allocation\-size\fR.
*************** This diagnostic warns for paths through
*** 10054,10061 ****
  a buffer is assigned to point at a buffer with a size that is not a
  multiple of \f(CW\*(C`sizeof (*pointer)\*(C'\fR.
  .Sp
! See  \s-1CWE\-131:\s0 Incorrect Calculation of Buffer Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/131.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-deref\-before\-check\fR" 4
  .IX Item "-Wno-analyzer-deref-before-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-deref\-before\-check\fR
--- 9987,9994 ----
  a buffer is assigned to point at a buffer with a size that is not a
  multiple of \f(CW\*(C`sizeof (*pointer)\*(C'\fR.
  .Sp
! See  CWE\-131: Incorrect Calculation of Buffer Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/131.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-deref\-before\-check\fR 4
  .IX Item "-Wno-analyzer-deref-before-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-deref\-before\-check\fR
*************** to disable it.
*** 10063,10083 ****
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is checked for \f(CW\*(C`NULL\*(C'\fR *after* it has already been
! dereferenced, suggesting that the pointer could have been \s-1NULL.\s0
! Such cases suggest that the check for \s-1NULL\s0 is either redundant,
  or that it needs to be moved to before the pointer is dereferenced.
  .Sp
  This diagnostic also considers values passed to a function argument
! marked with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non-NULL
  value, and thus will complain if such values are checked for \f(CW\*(C`NULL\*(C'\fR
  after returning from such a function call.
  .Sp
  This diagnostic is unlikely to be reported when any level of optimization
! is enabled, as \s-1GCC\s0's optimization logic will typically consider such
! checks for \s-1NULL\s0 as being redundant, and optimize them away before the
! analyzer \*(L"sees\*(R" them.  Hence optimization should be disabled when
  attempting to trigger this diagnostic.
! .IP "\fB\-Wno\-analyzer\-double\-fclose\fR" 4
  .IX Item "-Wno-analyzer-double-fclose"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-fclose\fR to disable it.
--- 9996,10016 ----
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is checked for \f(CW\*(C`NULL\*(C'\fR *after* it has already been
! dereferenced, suggesting that the pointer could have been NULL.
! Such cases suggest that the check for NULL is either redundant,
  or that it needs to be moved to before the pointer is dereferenced.
  .Sp
  This diagnostic also considers values passed to a function argument
! marked with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non\-NULL
  value, and thus will complain if such values are checked for \f(CW\*(C`NULL\*(C'\fR
  after returning from such a function call.
  .Sp
  This diagnostic is unlikely to be reported when any level of optimization
! is enabled, as GCC\*(Aqs optimization logic will typically consider such
! checks for NULL as being redundant, and optimize them away before the
! analyzer "sees" them.  Hence optimization should be disabled when
  attempting to trigger this diagnostic.
! .IP \fB\-Wno\-analyzer\-double\-fclose\fR 4
  .IX Item "-Wno-analyzer-double-fclose"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-fclose\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10085,10092 ****
  This diagnostic warns for paths through the code in which a \f(CW\*(C`FILE *\*(C'\fR
  can have \f(CW\*(C`fclose\*(C'\fR called on it more than once.
  .Sp
! See  \s-1CWE\-1341:\s0 Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-double\-free\fR" 4
  .IX Item "-Wno-analyzer-double-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-free\fR to disable it.
--- 10018,10025 ----
  This diagnostic warns for paths through the code in which a \f(CW\*(C`FILE *\*(C'\fR
  can have \f(CW\*(C`fclose\*(C'\fR called on it more than once.
  .Sp
! See  CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-double\-free\fR 4
  .IX Item "-Wno-analyzer-double-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-free\fR to disable it.
*************** This diagnostic warns for paths through
*** 10095,10139 ****
  can have a deallocator called on it more than once, either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-415:\s0 Double Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/415.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR" 4
  .IX Item "-Wno-analyzer-exposure-through-output-file"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! security-sensitive value is written to an output file
  (such as writing a password to a log file).
  .Sp
! See  \s-1CWE\-532:\s0 Information Exposure Through Log Files (\f(CW\*(C`https://cwe.mitre.org/data/definitions/532.html\*(C'\fR).
! .IP "\fB\-Wanalyzer\-exposure\-through\-uninit\-copy\fR" 4
  .IX Item "-Wanalyzer-exposure-through-uninit-copy"
  This warning requires both \fB\-fanalyzer\fR and the use of a plugin
! to specify a function that copies across a \*(L"trust boundary\*(R".  Use
  \&\fB\-Wno\-analyzer\-exposure\-through\-uninit\-copy\fR to disable it.
  .Sp
! This diagnostic warns for \*(L"infoleaks\*(R" \- paths through the code in which
  uninitialized values are copied across a security boundary
! (such as code within an \s-1OS\s0 kernel that copies a partially-initialized
  struct on the stack to user space).
  .Sp
! See  \s-1CWE\-200:\s0 Exposure of Sensitive Information to an Unauthorized Actor (\f(CW\*(C`https://cwe.mitre.org/data/definitions/200.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-fd-access-mode-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which a
! \&\f(CW\*(C`read\*(C'\fR on a write-only file descriptor is attempted, or vice versa.
  .Sp
  This diagnostic also warns for code paths in a which a function with attribute
  \&\f(CW\*(C`fd_arg_read (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_WRONLY\*(C'\fR at referenced argument \f(CW\*(C`N\*(C'\fR or a function with attribute
  \&\f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_RDONLY\*(C'\fR at referenced argument \fIN\fR.
! .IP "\fB\-Wno\-analyzer\-fd\-double\-close\fR" 4
  .IX Item "-Wno-analyzer-fd-double-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-double\-close\fR
--- 10028,10072 ----
  can have a deallocator called on it more than once, either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-415: Double Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/415.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR 4
  .IX Item "-Wno-analyzer-exposure-through-output-file"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! security\-sensitive value is written to an output file
  (such as writing a password to a log file).
  .Sp
! See  CWE\-532: Information Exposure Through Log Files (\f(CW\*(C`https://cwe.mitre.org/data/definitions/532.html\*(C'\fR).
! .IP \fB\-Wanalyzer\-exposure\-through\-uninit\-copy\fR 4
  .IX Item "-Wanalyzer-exposure-through-uninit-copy"
  This warning requires both \fB\-fanalyzer\fR and the use of a plugin
! to specify a function that copies across a "trust boundary".  Use
  \&\fB\-Wno\-analyzer\-exposure\-through\-uninit\-copy\fR to disable it.
  .Sp
! This diagnostic warns for "infoleaks" \- paths through the code in which
  uninitialized values are copied across a security boundary
! (such as code within an OS kernel that copies a partially\-initialized
  struct on the stack to user space).
  .Sp
! See  CWE\-200: Exposure of Sensitive Information to an Unauthorized Actor (\f(CW\*(C`https://cwe.mitre.org/data/definitions/200.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR 4
  .IX Item "-Wno-analyzer-fd-access-mode-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which a
! \&\f(CW\*(C`read\*(C'\fR on a write\-only file descriptor is attempted, or vice versa.
  .Sp
  This diagnostic also warns for code paths in a which a function with attribute
  \&\f(CW\*(C`fd_arg_read (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_WRONLY\*(C'\fR at referenced argument \f(CW\*(C`N\*(C'\fR or a function with attribute
  \&\f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_RDONLY\*(C'\fR at referenced argument \fIN\fR.
! .IP \fB\-Wno\-analyzer\-fd\-double\-close\fR 4
  .IX Item "-Wno-analyzer-fd-double-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-double\-close\fR
*************** to disable it.
*** 10142,10149 ****
  This diagnostic warns for paths through code in which a
  file descriptor can be closed more than once.
  .Sp
! See  \s-1CWE\-1341:\s0 Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-leak\fR" 4
  .IX Item "-Wno-analyzer-fd-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-leak\fR
--- 10075,10082 ----
  This diagnostic warns for paths through code in which a
  file descriptor can be closed more than once.
  .Sp
! See  CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-leak\fR 4
  .IX Item "-Wno-analyzer-fd-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-leak\fR
*************** to disable it.
*** 10152,10171 ****
  This diagnostic warns for paths through code in which an
  open file descriptor is leaked.
  .Sp
! See  \s-1CWE\-775:\s0 Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-fd-phase-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which an operation is
! attempted in the wrong phase of a file descriptor's lifetime.
  For example, it will warn on attempts to call \f(CW\*(C`accept\*(C'\fR on a stream
  socket that has not yet had \f(CW\*(C`listen\*(C'\fR successfully called on it.
  .Sp
! See  \s-1CWE\-666:\s0 Operation on Resource in Wrong Phase of Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/666.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-fd-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR
--- 10085,10104 ----
  This diagnostic warns for paths through code in which an
  open file descriptor is leaked.
  .Sp
! See  CWE\-775: Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR 4
  .IX Item "-Wno-analyzer-fd-phase-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which an operation is
! attempted in the wrong phase of a file descriptor\*(Aqs lifetime.
  For example, it will warn on attempts to call \f(CW\*(C`accept\*(C'\fR on a stream
  socket that has not yet had \f(CW\*(C`listen\*(C'\fR successfully called on it.
  .Sp
! See  CWE\-666: Operation on Resource in Wrong Phase of Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/666.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-type\-mismatch\fR 4
  .IX Item "-Wno-analyzer-fd-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR
*************** operation is attempted on the wrong type
*** 10176,10182 ****
  For example, it will warn on attempts to use socket operations
  on a file descriptor obtained via \f(CW\*(C`open\*(C'\fR, or when attempting
  to use a stream socket operation on a datagram socket.
! .IP "\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR" 4
  .IX Item "-Wno-analyzer-fd-use-after-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR
--- 10109,10115 ----
  For example, it will warn on attempts to use socket operations
  on a file descriptor obtained via \f(CW\*(C`open\*(C'\fR, or when attempting
  to use a stream socket operation on a datagram socket.
! .IP \fB\-Wno\-analyzer\-fd\-use\-after\-close\fR 4
  .IX Item "-Wno-analyzer-fd-use-after-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR
*************** This diagnostic also warns for paths thr
*** 10189,10195 ****
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a closed file descriptor at
  referenced argument \f(CW\*(C`N\*(C'\fR.
! .IP "\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR" 4
  .IX Item "-Wno-analyzer-fd-use-without-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR
--- 10122,10128 ----
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a closed file descriptor at
  referenced argument \f(CW\*(C`N\*(C'\fR.
! .IP \fB\-Wno\-analyzer\-fd\-use\-without\-check\fR 4
  .IX Item "-Wno-analyzer-fd-use-without-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR
*************** This diagnostic also warns for paths thr
*** 10202,10208 ****
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor, at referenced
  argument \f(CW\*(C`N\*(C'\fR, without being checked for validity.
! .IP "\fB\-Wno\-analyzer\-file\-leak\fR" 4
  .IX Item "-Wno-analyzer-file-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-file\-leak\fR
--- 10135,10141 ----
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor, at referenced
  argument \f(CW\*(C`N\*(C'\fR, without being checked for validity.
! .IP \fB\-Wno\-analyzer\-file\-leak\fR 4
  .IX Item "-Wno-analyzer-file-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-file\-leak\fR
*************** to disable it.
*** 10211,10238 ****
  This diagnostic warns for paths through the code in which a
  \&\f(CW\*(C`<stdio.h>\*(C'\fR \f(CW\*(C`FILE *\*(C'\fR stream object is leaked.
  .Sp
! See  \s-1CWE\-775:\s0 Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR" 4
  .IX Item "-Wno-analyzer-free-of-non-heap"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which \f(CW\*(C`free\*(C'\fR
! is called on a non-heap pointer (e.g. an on-stack buffer, or a global).
  .Sp
! See  \s-1CWE\-590:\s0 Free of Memory not on the Heap (\f(CW\*(C`https://cwe.mitre.org/data/definitions/590.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR" 4
  .IX Item "-Wno-analyzer-imprecise-fp-arithmetic"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR
  to disable it.
  .Sp
! This diagnostic warns for paths through the code in which floating-point
  arithmetic is used in locations where precise computation is needed.  This
! diagnostic only warns on use of floating-point operands inside the
  calculation of an allocation size at the moment.
! .IP "\fB\-Wno\-analyzer\-infinite\-loop\fR" 4
  .IX Item "-Wno-analyzer-infinite-loop"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-loop\fR to disable it.
--- 10144,10171 ----
  This diagnostic warns for paths through the code in which a
  \&\f(CW\*(C`<stdio.h>\*(C'\fR \f(CW\*(C`FILE *\*(C'\fR stream object is leaked.
  .Sp
! See  CWE\-775: Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-free\-of\-non\-heap\fR 4
  .IX Item "-Wno-analyzer-free-of-non-heap"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which \f(CW\*(C`free\*(C'\fR
! is called on a non\-heap pointer (e.g. an on\-stack buffer, or a global).
  .Sp
! See  CWE\-590: Free of Memory not on the Heap (\f(CW\*(C`https://cwe.mitre.org/data/definitions/590.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR 4
  .IX Item "-Wno-analyzer-imprecise-fp-arithmetic"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR
  to disable it.
  .Sp
! This diagnostic warns for paths through the code in which floating\-point
  arithmetic is used in locations where precise computation is needed.  This
! diagnostic only warns on use of floating\-point operands inside the
  calculation of an allocation size at the moment.
! .IP \fB\-Wno\-analyzer\-infinite\-loop\fR 4
  .IX Item "-Wno-analyzer-infinite-loop"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-loop\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10240,10253 ****
  This diagnostics warns for paths through the code which appear to
  lead to an infinite loop.
  .Sp
! Specifically, the analyzer will issue this warning when it \*(L"sees\*(R" a loop
  in which:
  .RS 4
! .IP "*" 4
! no externally-visible work could be being done within the loop
! .IP "*" 4
  there is no way to escape from the loop
! .IP "*" 4
  the analyzer is sufficiently confident about the program state
  throughout the loop to know that the above are true
  .RE
--- 10173,10186 ----
  This diagnostics warns for paths through the code which appear to
  lead to an infinite loop.
  .Sp
! Specifically, the analyzer will issue this warning when it "sees" a loop
  in which:
  .RS 4
! .IP * 4
! no externally\-visible work could be being done within the loop
! .IP * 4
  there is no way to escape from the loop
! .IP * 4
  the analyzer is sufficiently confident about the program state
  throughout the loop to know that the above are true
  .RE
*************** For example, consider:
*** 10277,10289 ****
  .Sp
  The analyzer will complain for the above case because if \f(CW\*(C`opcode\*(C'\fR
  ever matches none of the cases, the \f(CW\*(C`switch\*(C'\fR will follow the
! implicit \f(CW\*(C`default\*(C'\fR case, making the body of the loop be a \*(L"no-op\*(R"
  with \f(CW\*(C`cpu_state.pc\*(C'\fR unchanged, and thus using the same value of
  \&\f(CW\*(C`opcode\*(C'\fR on all subseqent iterations, leading to an infinite loop.
  .Sp
! See  \s-1CWE\-835:\s0 Loop with Unreachable Exit Condition ('Infinite Loop') (\f(CW\*(C`https://cwe.mitre.org/data/definitions/835.html\*(C'\fR).
  .RE
! .IP "\fB\-Wno\-analyzer\-infinite\-recursion\fR" 4
  .IX Item "-Wno-analyzer-infinite-recursion"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-recursion\fR to disable it.
--- 10210,10222 ----
  .Sp
  The analyzer will complain for the above case because if \f(CW\*(C`opcode\*(C'\fR
  ever matches none of the cases, the \f(CW\*(C`switch\*(C'\fR will follow the
! implicit \f(CW\*(C`default\*(C'\fR case, making the body of the loop be a "no\-op"
  with \f(CW\*(C`cpu_state.pc\*(C'\fR unchanged, and thus using the same value of
  \&\f(CW\*(C`opcode\*(C'\fR on all subseqent iterations, leading to an infinite loop.
  .Sp
! See  CWE\-835: Loop with Unreachable Exit Condition (\*(AqInfinite Loop\*(Aq) (\f(CW\*(C`https://cwe.mitre.org/data/definitions/835.html\*(C'\fR).
  .RE
! .IP \fB\-Wno\-analyzer\-infinite\-recursion\fR 4
  .IX Item "-Wno-analyzer-infinite-recursion"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-recursion\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10291,10297 ****
  This diagnostics warns for paths through the code which appear to
  lead to infinite recursion.
  .Sp
! Specifically, when the analyzer \*(L"sees\*(R" a recursive call, it will compare
  the state of memory at the entry to the new frame with that at the entry
  to the previous frame of that function on the stack.  The warning is
  issued if nothing in memory appears to be changing; any changes observed
--- 10224,10230 ----
  This diagnostics warns for paths through the code which appear to
  lead to infinite recursion.
  .Sp
! Specifically, when the analyzer "sees" a recursive call, it will compare
  the state of memory at the entry to the new frame with that at the entry
  to the previous frame of that function on the stack.  The warning is
  issued if nothing in memory appears to be changing; any changes observed
*************** to parameters or globals are assumed to
*** 10299,10313 ****
  recursion and thus suppress the warning.
  .Sp
  This diagnostic is likely to miss cases of infinite recursion that
! are convered to iteration by the optimizer before the analyzer \*(L"sees\*(R"
  them.  Hence optimization should be disabled when attempting to trigger
  this diagnostic.
  .Sp
  Compare with \fB\-Winfinite\-recursion\fR, which provides a similar
  diagnostic, but is implemented in a different way.
  .Sp
! See  \s-1CWE\-674:\s0 Uncontrolled Recursion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/674.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-jump\-through\-null\fR" 4
  .IX Item "-Wno-analyzer-jump-through-null"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-jump\-through\-null\fR
--- 10232,10246 ----
  recursion and thus suppress the warning.
  .Sp
  This diagnostic is likely to miss cases of infinite recursion that
! are convered to iteration by the optimizer before the analyzer "sees"
  them.  Hence optimization should be disabled when attempting to trigger
  this diagnostic.
  .Sp
  Compare with \fB\-Winfinite\-recursion\fR, which provides a similar
  diagnostic, but is implemented in a different way.
  .Sp
! See  CWE\-674: Uncontrolled Recursion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/674.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-jump\-through\-null\fR 4
  .IX Item "-Wno-analyzer-jump-through-null"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-jump\-through\-null\fR
*************** to disable it.
*** 10315,10321 ****
  .Sp
  This diagnostic warns for paths through the code in which a \f(CW\*(C`NULL\*(C'\fR
  function pointer is called.
! .IP "\fB\-Wno\-analyzer\-malloc\-leak\fR" 4
  .IX Item "-Wno-analyzer-malloc-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-malloc\-leak\fR
--- 10248,10254 ----
  .Sp
  This diagnostic warns for paths through the code in which a \f(CW\*(C`NULL\*(C'\fR
  function pointer is called.
! .IP \fB\-Wno\-analyzer\-malloc\-leak\fR 4
  .IX Item "-Wno-analyzer-malloc-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-malloc\-leak\fR
*************** This diagnostic warns for paths through
*** 10325,10332 ****
  pointer allocated via an allocator is leaked: either \f(CW\*(C`malloc\*(C'\fR,
  or a function marked with attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-401:\s0 Missing Release of Memory after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/401.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-mismatching\-deallocation\fR" 4
  .IX Item "-Wno-analyzer-mismatching-deallocation"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-mismatching\-deallocation\fR
--- 10258,10265 ----
  pointer allocated via an allocator is leaked: either \f(CW\*(C`malloc\*(C'\fR,
  or a function marked with attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-401: Missing Release of Memory after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/401.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-mismatching\-deallocation\fR 4
  .IX Item "-Wno-analyzer-mismatching-deallocation"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-mismatching\-deallocation\fR
*************** will warn about mismatches between \f(CW
*** 10339,10358 ****
  and vector \f(CW\*(C`delete[]\*(C'\fR, and those marked as allocator/deallocator
  pairs using attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-762:\s0 Mismatched Memory Management Routines (\f(CW\*(C`https://cwe.mitre.org/data/definitions/762.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-out\-of\-bounds\fR" 4
  .IX Item "-Wno-analyzer-out-of-bounds"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-out\-of\-bounds\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a buffer is
! definitely read or written out-of-bounds.  The diagnostic applies for
  cases where the analyzer is able to determine a constant offset and for
  accesses past the end of a buffer, also a constant capacity.  Further,
  the diagnostic does limited checking for accesses past the end when the
  offset as well as the capacity is symbolic.
  .Sp
! See  \s-1CWE\-119:\s0 Improper Restriction of Operations within the Bounds of a Memory Buffer (\f(CW\*(C`https://cwe.mitre.org/data/definitions/119.html\*(C'\fR).
  .Sp
  For cases where the analyzer is able, it will emit a text art diagram
  visualizing the spatial relationship between the memory region that the
--- 10272,10291 ----
  and vector \f(CW\*(C`delete[]\*(C'\fR, and those marked as allocator/deallocator
  pairs using attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-762: Mismatched Memory Management Routines (\f(CW\*(C`https://cwe.mitre.org/data/definitions/762.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-out\-of\-bounds\fR 4
  .IX Item "-Wno-analyzer-out-of-bounds"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-out\-of\-bounds\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a buffer is
! definitely read or written out\-of\-bounds.  The diagnostic applies for
  cases where the analyzer is able to determine a constant offset and for
  accesses past the end of a buffer, also a constant capacity.  Further,
  the diagnostic does limited checking for accesses past the end when the
  offset as well as the capacity is symbolic.
  .Sp
! See  CWE\-119: Improper Restriction of Operations within the Bounds of a Memory Buffer (\f(CW\*(C`https://cwe.mitre.org/data/definitions/119.html\*(C'\fR).
  .Sp
  For cases where the analyzer is able, it will emit a text art diagram
  visualizing the spatial relationship between the memory region that the
*************** apart; which one is before or after in m
*** 10362,10445 ****
  involved, the direction of the access (read vs write), and, in some
  cases, the values of data involved.  This diagram can be suppressed
  using \fB\-fdiagnostics\-text\-art\-charset=none\fR.
! .IP "\fB\-Wno\-analyzer\-overlapping\-buffers\fR" 4
  .IX Item "-Wno-analyzer-overlapping-buffers"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-overlapping\-buffers\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which overlapping
! buffers are passed to an \s-1API\s0 for which the behavior on such buffers
  is undefined.
  .Sp
  Specifically, the diagnostic occurs on calls to the following functions
  .RS 4
  .ie n .IP "*<""memcpy"">" 4
! .el .IP "*<\f(CWmemcpy\fR>" 4
  .IX Item "*<memcpy>"
  .PD 0
  .ie n .IP "*<""strcat"">" 4
! .el .IP "*<\f(CWstrcat\fR>" 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strcpy"">" 4
! .el .IP "*<\f(CWstrcpy\fR>" 4
  .IX Item "*<strcpy>"
  .RE
  .RS 4
- .PD
  .Sp
  for cases where the buffers are known to overlap.
  .RE
! .IP "\fB\-Wno\-analyzer\-possible\-null\-argument\fR" 4
  .IX Item "-Wno-analyzer-possible-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly-NULL value is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non-NULL
  value.
  .Sp
! See  \s-1CWE\-690:\s0 Unchecked Return Value to \s-1NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-possible\-null\-dereference\fR" 4
  .IX Item "-Wno-analyzer-possible-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly-NULL value is dereferenced.
  .Sp
! See  \s-1CWE\-690:\s0 Unchecked Return Value to \s-1NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-null\-argument\fR" 4
  .IX Item "-Wno-analyzer-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be \s-1NULL\s0 is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non-NULL
  value.
  .Sp
! See  \s-1CWE\-476: NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-null\-dereference\fR" 4
  .IX Item "-Wno-analyzer-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be \s-1NULL\s0 is dereferenced.
  .Sp
! See  \s-1CWE\-476: NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR" 4
  .IX Item "-Wno-analyzer-putenv-of-auto-var"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  call to \f(CW\*(C`putenv\*(C'\fR is passed a pointer to an automatic variable
! or an on-stack buffer.
  .Sp
! See  \s-1POS34\-C.\s0 Do not call \fIputenv()\fR with a pointer to an automatic variable as the argument (\f(CW\*(C`https://wiki.sei.cmu.edu/confluence/x/6NYxBQ\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-shift\-count\-negative\fR" 4
  .IX Item "-Wno-analyzer-shift-count-negative"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-negative\fR to disable it.
--- 10295,10378 ----
  involved, the direction of the access (read vs write), and, in some
  cases, the values of data involved.  This diagram can be suppressed
  using \fB\-fdiagnostics\-text\-art\-charset=none\fR.
! .IP \fB\-Wno\-analyzer\-overlapping\-buffers\fR 4
  .IX Item "-Wno-analyzer-overlapping-buffers"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-overlapping\-buffers\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which overlapping
! buffers are passed to an API for which the behavior on such buffers
  is undefined.
  .Sp
  Specifically, the diagnostic occurs on calls to the following functions
  .RS 4
  .ie n .IP "*<""memcpy"">" 4
! .el .IP *<\f(CWmemcpy\fR> 4
  .IX Item "*<memcpy>"
  .PD 0
  .ie n .IP "*<""strcat"">" 4
! .el .IP *<\f(CWstrcat\fR> 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strcpy"">" 4
! .el .IP *<\f(CWstrcpy\fR> 4
  .IX Item "*<strcpy>"
+ .PD
  .RE
  .RS 4
  .Sp
  for cases where the buffers are known to overlap.
  .RE
! .IP \fB\-Wno\-analyzer\-possible\-null\-argument\fR 4
  .IX Item "-Wno-analyzer-possible-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly\-NULL value is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non\-NULL
  value.
  .Sp
! See  CWE\-690: Unchecked Return Value to NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-possible\-null\-dereference\fR 4
  .IX Item "-Wno-analyzer-possible-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly\-NULL value is dereferenced.
  .Sp
! See  CWE\-690: Unchecked Return Value to NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-null\-argument\fR 4
  .IX Item "-Wno-analyzer-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be NULL is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non\-NULL
  value.
  .Sp
! See  CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-null\-dereference\fR 4
  .IX Item "-Wno-analyzer-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be NULL is dereferenced.
  .Sp
! See  CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR 4
  .IX Item "-Wno-analyzer-putenv-of-auto-var"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  call to \f(CW\*(C`putenv\*(C'\fR is passed a pointer to an automatic variable
! or an on\-stack buffer.
  .Sp
! See  POS34\-C. Do not call \fBputenv()\fR with a pointer to an automatic variable as the argument (\f(CW\*(C`https://wiki.sei.cmu.edu/confluence/x/6NYxBQ\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-shift\-count\-negative\fR 4
  .IX Item "-Wno-analyzer-shift-count-negative"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-negative\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10447,10470 ****
  This diagnostic warns for paths through the code in which a
  shift is attempted with a negative count.  It is analogous to
  the \fB\-Wshift\-count\-negative\fR diagnostic implemented in
! the C/\*(C+ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-shift\-count\-overflow\fR" 4
  .IX Item "-Wno-analyzer-shift-count-overflow"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-overflow\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  shift is attempted with a count greater than or equal to the
! precision of the operand's type.  It is analogous to
  the \fB\-Wshift\-count\-overflow\fR diagnostic implemented in
! the C/\*(C+ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR" 4
  .IX Item "-Wno-analyzer-stale-setjmp-buffer"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR to disable it.
--- 10380,10403 ----
  This diagnostic warns for paths through the code in which a
  shift is attempted with a negative count.  It is analogous to
  the \fB\-Wshift\-count\-negative\fR diagnostic implemented in
! the C/C++ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-shift\-count\-overflow\fR 4
  .IX Item "-Wno-analyzer-shift-count-overflow"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-overflow\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  shift is attempted with a count greater than or equal to the
! precision of the operand\*(Aqs type.  It is analogous to
  the \fB\-Wshift\-count\-overflow\fR diagnostic implemented in
! the C/C++ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR 4
  .IX Item "-Wno-analyzer-stale-setjmp-buffer"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR to disable it.
*************** location, it records the stack frame.  T
*** 10478,10502 ****
  when the function containing the \f(CW\*(C`setjmp\*(C'\fR call returns.  Attempting
  to rewind to it via \f(CW\*(C`longjmp\*(C'\fR would reference a stack frame that
  no longer exists, and likely lead to a crash (or worse).
! .IP "\fB\-Wno\-analyzer\-tainted\-allocation\-size\fR" 4
  .IX Item "-Wno-analyzer-tainted-allocation-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the size
  of an allocation without being sanitized, so that an attacker could
  inject an excessively large allocation and potentially cause a denial
  of service attack.
  .Sp
! See  \s-1CWE\-789:\s0 Memory Allocation with Excessive Size Value (\f(CW\*(C`https://cwe.mitre.org/data/definitions/789.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-assertion\fR" 4
  .IX Item "-Wno-analyzer-tainted-assertion"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-assertion\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as part of a
  condition without being first sanitized, and that condition guards a
  call to a function marked with attribute \f(CW\*(C`noreturn\*(C'\fR
  (such as the function \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR).  Such functions
--- 10411,10435 ----
  when the function containing the \f(CW\*(C`setjmp\*(C'\fR call returns.  Attempting
  to rewind to it via \f(CW\*(C`longjmp\*(C'\fR would reference a stack frame that
  no longer exists, and likely lead to a crash (or worse).
! .IP \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR 4
  .IX Item "-Wno-analyzer-tainted-allocation-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the size
  of an allocation without being sanitized, so that an attacker could
  inject an excessively large allocation and potentially cause a denial
  of service attack.
  .Sp
! See  CWE\-789: Memory Allocation with Excessive Size Value (\f(CW\*(C`https://cwe.mitre.org/data/definitions/789.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-assertion\fR 4
  .IX Item "-Wno-analyzer-tainted-assertion"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-assertion\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as part of a
  condition without being first sanitized, and that condition guards a
  call to a function marked with attribute \f(CW\*(C`noreturn\*(C'\fR
  (such as the function \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR).  Such functions
*************** assertion failure handlers.  For example
*** 10509,10537 ****
  .Sp
  In such cases:
  .RS 4
! .IP "*" 4
! when assertion-checking is enabled: an attacker could trigger
  a denial of service by injecting an assertion failure
! .IP "*" 4
! when assertion-checking is disabled, such as by defining \f(CW\*(C`NDEBUG\*(C'\fR,
  an attacker could inject data that subverts the process, since it
  presumably violates a precondition that is being assumed by the code.
  .RE
  .RS 4
  .Sp
! Note that when assertion-checking is disabled, the assertions are
  typically removed by the preprocessor before the analyzer has a chance
! to \*(L"see\*(R" them, so this diagnostic can only generate warnings on builds
! in which assertion-checking is enabled.
  .Sp
  For the purpose of this warning, any function marked with attribute
  \&\f(CW\*(C`noreturn\*(C'\fR is considered as a possible assertion failure
  handler, including \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR.  Note that these functions
! are sometimes removed by the optimizer before the analyzer \*(L"sees\*(R" them.
  Hence optimization should be disabled when attempting to trigger this
  diagnostic.
  .Sp
! See  \s-1CWE\-617:\s0 Reachable Assertion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/617.html\*(C'\fR).
  .Sp
  The warning can also report problematic constructions such as
  .Sp
--- 10442,10470 ----
  .Sp
  In such cases:
  .RS 4
! .IP * 4
! when assertion\-checking is enabled: an attacker could trigger
  a denial of service by injecting an assertion failure
! .IP * 4
! when assertion\-checking is disabled, such as by defining \f(CW\*(C`NDEBUG\*(C'\fR,
  an attacker could inject data that subverts the process, since it
  presumably violates a precondition that is being assumed by the code.
  .RE
  .RS 4
  .Sp
! Note that when assertion\-checking is disabled, the assertions are
  typically removed by the preprocessor before the analyzer has a chance
! to "see" them, so this diagnostic can only generate warnings on builds
! in which assertion\-checking is enabled.
  .Sp
  For the purpose of this warning, any function marked with attribute
  \&\f(CW\*(C`noreturn\*(C'\fR is considered as a possible assertion failure
  handler, including \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR.  Note that these functions
! are sometimes removed by the optimizer before the analyzer "sees" them.
  Hence optimization should be disabled when attempting to trigger this
  diagnostic.
  .Sp
! See  CWE\-617: Reachable Assertion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/617.html\*(C'\fR).
  .Sp
  The warning can also report problematic constructions such as
  .Sp
*************** The warning can also report problematic
*** 10548,10598 ****
  .Sp
  despite the above not being an assertion failure, strictly speaking.
  .RE
! .IP "\fB\-Wno\-analyzer\-tainted\-array\-index\fR" 4
  .IX Item "-Wno-analyzer-tainted-array-index"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-array\-index\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the index
  of an array access without being sanitized, so that an attacker
! could inject an out-of-bounds access.
  .Sp
! See  \s-1CWE\-129:\s0 Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-divisor\fR" 4
  .IX Item "-Wno-analyzer-tainted-divisor"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-divisor\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the divisor
  in a division or modulus operation without being sanitized, so that
! an attacker could inject a division-by-zero.
  .Sp
! See  \s-1CWE\-369:\s0 Divide By Zero (\f(CW\*(C`https://cwe.mitre.org/data/definitions/369.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-offset\fR" 4
  .IX Item "-Wno-analyzer-tainted-offset"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-offset\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as a pointer offset
! without being sanitized, so that an attacker could inject an out-of-bounds
  access.
  .Sp
! See  \s-1CWE\-823:\s0 Use of Out-of-range Pointer Offset (\f(CW\*(C`https://cwe.mitre.org/data/definitions/823.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-size\fR" 4
  .IX Item "-Wno-analyzer-tainted-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the size of
  an operation such as \f(CW\*(C`memset\*(C'\fR without being sanitized, so that an
! attacker could inject an out-of-bounds access.
  .Sp
! See  \s-1CWE\-129:\s0 Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR" 4
  .IX Item "-Wno-analyzer-undefined-behavior-strtok"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR to disable it.
--- 10481,10531 ----
  .Sp
  despite the above not being an assertion failure, strictly speaking.
  .RE
! .IP \fB\-Wno\-analyzer\-tainted\-array\-index\fR 4
  .IX Item "-Wno-analyzer-tainted-array-index"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-array\-index\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the index
  of an array access without being sanitized, so that an attacker
! could inject an out\-of\-bounds access.
  .Sp
! See  CWE\-129: Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-divisor\fR 4
  .IX Item "-Wno-analyzer-tainted-divisor"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-divisor\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the divisor
  in a division or modulus operation without being sanitized, so that
! an attacker could inject a division\-by\-zero.
  .Sp
! See  CWE\-369: Divide By Zero (\f(CW\*(C`https://cwe.mitre.org/data/definitions/369.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-offset\fR 4
  .IX Item "-Wno-analyzer-tainted-offset"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-offset\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as a pointer offset
! without being sanitized, so that an attacker could inject an out\-of\-bounds
  access.
  .Sp
! See  CWE\-823: Use of Out\-of\-range Pointer Offset (\f(CW\*(C`https://cwe.mitre.org/data/definitions/823.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-size\fR 4
  .IX Item "-Wno-analyzer-tainted-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the size of
  an operation such as \f(CW\*(C`memset\*(C'\fR without being sanitized, so that an
! attacker could inject an out\-of\-bounds access.
  .Sp
! See  CWE\-129: Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR 4
  .IX Item "-Wno-analyzer-undefined-behavior-strtok"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10600,10618 ****
  This diagnostic warns for paths through the code in which a
  call is made to \f(CW\*(C`strtok\*(C'\fR with undefined behavior.
  .Sp
! Specifically, passing \s-1NULL\s0 as the first parameter for the initial
  call to \f(CW\*(C`strtok\*(C'\fR within a process has undefined behavior.
! .IP "\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR" 4
  .IX Item "-Wno-analyzer-unsafe-call-within-signal-handler"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! function known to be async-signal-unsafe (such as \f(CW\*(C`fprintf\*(C'\fR) is
  called from a signal handler.
  .Sp
! See  \s-1CWE\-479:\s0 Signal Handler Use of a Non-reentrant Function (\f(CW\*(C`https://cwe.mitre.org/data/definitions/479.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-use\-after\-free\fR" 4
  .IX Item "-Wno-analyzer-use-after-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-after\-free\fR to disable it.
--- 10533,10551 ----
  This diagnostic warns for paths through the code in which a
  call is made to \f(CW\*(C`strtok\*(C'\fR with undefined behavior.
  .Sp
! Specifically, passing NULL as the first parameter for the initial
  call to \f(CW\*(C`strtok\*(C'\fR within a process has undefined behavior.
! .IP \fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR 4
  .IX Item "-Wno-analyzer-unsafe-call-within-signal-handler"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! function known to be async\-signal\-unsafe (such as \f(CW\*(C`fprintf\*(C'\fR) is
  called from a signal handler.
  .Sp
! See  CWE\-479: Signal Handler Use of a Non\-reentrant Function (\f(CW\*(C`https://cwe.mitre.org/data/definitions/479.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-use\-after\-free\fR 4
  .IX Item "-Wno-analyzer-use-after-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-after\-free\fR to disable it.
*************** This diagnostic warns for paths through
*** 10621,10628 ****
  pointer is used after a deallocator is called on it: either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-416:\s0 Use After Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/416.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR" 4
  .IX Item "-Wno-analyzer-use-of-pointer-in-stale-stack-frame"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR
--- 10554,10561 ----
  pointer is used after a deallocator is called on it: either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-416: Use After Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/416.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR 4
  .IX Item "-Wno-analyzer-use-of-pointer-in-stale-stack-frame"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR
*************** to disable it.
*** 10630,10636 ****
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is dereferenced that points to a variable in a stale stack frame.
! .IP "\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-va-arg-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR
--- 10563,10569 ----
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is dereferenced that points to a variable in a stale stack frame.
! .IP \fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR 4
  .IX Item "-Wno-analyzer-va-arg-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR
*************** the analyzer detects an attempt to use \
*** 10641,10648 ****
  passed to a variadic call, but uses a type that does not match that of
  the expression passed to the call.
  .Sp
! See  \s-1CWE\-686:\s0 Function Call With Incorrect Argument Type (\f(CW\*(C`https://cwe.mitre.org/data/definitions/686.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-va\-list\-exhausted\fR" 4
  .IX Item "-Wno-analyzer-va-list-exhausted"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-exhausted\fR
--- 10574,10581 ----
  passed to a variadic call, but uses a type that does not match that of
  the expression passed to the call.
  .Sp
! See  CWE\-686: Function Call With Incorrect Argument Type (\f(CW\*(C`https://cwe.mitre.org/data/definitions/686.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-va\-list\-exhausted\fR 4
  .IX Item "-Wno-analyzer-va-list-exhausted"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-exhausted\fR
*************** the analyzer detects an attempt to use \
*** 10653,10660 ****
  value passed to a variadic call, but all of the values in the
  \&\f(CW\*(C`va_list\*(C'\fR have already been consumed.
  .Sp
! See  \s-1CWE\-685:\s0 Function Call With Incorrect Number of Arguments (\f(CW\*(C`https://cwe.mitre.org/data/definitions/685.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-va\-list\-leak\fR" 4
  .IX Item "-Wno-analyzer-va-list-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-leak\fR
--- 10586,10593 ----
  value passed to a variadic call, but all of the values in the
  \&\f(CW\*(C`va_list\*(C'\fR have already been consumed.
  .Sp
! See  CWE\-685: Function Call With Incorrect Number of Arguments (\f(CW\*(C`https://cwe.mitre.org/data/definitions/685.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-va\-list\-leak\fR 4
  .IX Item "-Wno-analyzer-va-list-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-leak\fR
*************** to disable it.
*** 10663,10669 ****
  This diagnostic warns for interprocedural paths through the code for which
  the analyzer detects that \f(CW\*(C`va_start\*(C'\fR or \f(CW\*(C`va_copy\*(C'\fR has been called
  on a \f(CW\*(C`va_list\*(C'\fR without a corresponding call to \f(CW\*(C`va_end\*(C'\fR.
! .IP "\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR" 4
  .IX Item "-Wno-analyzer-va-list-use-after-va-end"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR
--- 10596,10602 ----
  This diagnostic warns for interprocedural paths through the code for which
  the analyzer detects that \f(CW\*(C`va_start\*(C'\fR or \f(CW\*(C`va_copy\*(C'\fR has been called
  on a \f(CW\*(C`va_list\*(C'\fR without a corresponding call to \f(CW\*(C`va_end\*(C'\fR.
! .IP \fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR 4
  .IX Item "-Wno-analyzer-va-list-use-after-va-end"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR
*************** This diagnostic warns for interprocedura
*** 10673,10679 ****
  the analyzer detects an attempt to use a \f(CW\*(C`va_list\*(C'\fR  after
  \&\f(CW\*(C`va_end\*(C'\fR has been called on it.
  \&\f(CW\*(C`va_list\*(C'\fR.
! .IP "\fB\-Wno\-analyzer\-write\-to\-const\fR" 4
  .IX Item "-Wno-analyzer-write-to-const"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-const\fR
--- 10606,10612 ----
  the analyzer detects an attempt to use a \f(CW\*(C`va_list\*(C'\fR  after
  \&\f(CW\*(C`va_end\*(C'\fR has been called on it.
  \&\f(CW\*(C`va_list\*(C'\fR.
! .IP \fB\-Wno\-analyzer\-write\-to\-const\fR 4
  .IX Item "-Wno-analyzer-write-to-const"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-const\fR
*************** This diagnostic warns for paths through
*** 10683,10689 ****
  detects an attempt to write through a pointer to a \f(CW\*(C`const\*(C'\fR object.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR" 4
  .IX Item "-Wno-analyzer-write-to-string-literal"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR
--- 10616,10622 ----
  detects an attempt to write through a pointer to a \f(CW\*(C`const\*(C'\fR object.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-write\-to\-string\-literal\fR 4
  .IX Item "-Wno-analyzer-write-to-string-literal"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR
*************** This diagnostic warns for paths through
*** 10693,10699 ****
  detects an attempt to write through a pointer to a string literal.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR" 4
  .IX Item "-Wno-analyzer-use-of-uninitialized-value"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR to disable it.
--- 10626,10632 ----
  detects an attempt to write through a pointer to a string literal.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR 4
  .IX Item "-Wno-analyzer-use-of-uninitialized-value"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10701,10716 ****
  This diagnostic warns for paths through the code in which an uninitialized
  value is used.
  .Sp
! See  \s-1CWE\-457:\s0 Use of Uninitialized Variable (\f(CW\*(C`https://cwe.mitre.org/data/definitions/457.html\*(C'\fR).
  .PP
  The analyzer has hardcoded knowledge about the behavior of the following
! memory-management functions:
  .ie n .IP "*<""alloca"">" 4
! .el .IP "*<\f(CWalloca\fR>" 4
  .IX Item "*<alloca>"
  .PD 0
! .ie n .IP "*<The built-in functions ""_\|_builtin_alloc"",>" 4
! .el .IP "*<The built-in functions \f(CW_\|_builtin_alloc\fR,>" 4
  .IX Item "*<The built-in functions __builtin_alloc,>"
  .PD
  \&\f(CW\*(C`_\|_builtin_alloc_with_align\*(C'\fR, \f(CW@item\fR \f(CW\*(C`_\|_builtin_calloc\*(C'\fR,
--- 10634,10649 ----
  This diagnostic warns for paths through the code in which an uninitialized
  value is used.
  .Sp
! See  CWE\-457: Use of Uninitialized Variable (\f(CW\*(C`https://cwe.mitre.org/data/definitions/457.html\*(C'\fR).
  .PP
  The analyzer has hardcoded knowledge about the behavior of the following
! memory\-management functions:
  .ie n .IP "*<""alloca"">" 4
! .el .IP *<\f(CWalloca\fR> 4
  .IX Item "*<alloca>"
  .PD 0
! .ie n .IP "*<The built\-in functions ""_\|_builtin_alloc"",>" 4
! .el .IP "*<The built\-in functions \f(CW_\|_builtin_alloc\fR,>" 4
  .IX Item "*<The built-in functions __builtin_alloc,>"
  .PD
  \&\f(CW\*(C`_\|_builtin_alloc_with_align\*(C'\fR, \f(CW@item\fR \f(CW\*(C`_\|_builtin_calloc\*(C'\fR,
*************** memory-management functions:
*** 10719,10735 ****
  \&\f(CW\*(C`_\|_builtin_memset_chk\*(C'\fR, \f(CW\*(C`_\|_builtin_realloc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_stack_restore\*(C'\fR, and \f(CW\*(C`_\|_builtin_stack_save\*(C'\fR
  .ie n .IP "*<""calloc"">" 4
! .el .IP "*<\f(CWcalloc\fR>" 4
  .IX Item "*<calloc>"
  .PD 0
  .ie n .IP "*<""free"">" 4
! .el .IP "*<\f(CWfree\fR>" 4
  .IX Item "*<free>"
  .ie n .IP "*<""malloc"">" 4
! .el .IP "*<\f(CWmalloc\fR>" 4
  .IX Item "*<malloc>"
  .ie n .IP "*<""memset"">" 4
! .el .IP "*<\f(CWmemset\fR>" 4
  .IX Item "*<memset>"
  .ie n .IP "*<""operator delete"">" 4
  .el .IP "*<\f(CWoperator delete\fR>" 4
--- 10652,10668 ----
  \&\f(CW\*(C`_\|_builtin_memset_chk\*(C'\fR, \f(CW\*(C`_\|_builtin_realloc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_stack_restore\*(C'\fR, and \f(CW\*(C`_\|_builtin_stack_save\*(C'\fR
  .ie n .IP "*<""calloc"">" 4
! .el .IP *<\f(CWcalloc\fR> 4
  .IX Item "*<calloc>"
  .PD 0
  .ie n .IP "*<""free"">" 4
! .el .IP *<\f(CWfree\fR> 4
  .IX Item "*<free>"
  .ie n .IP "*<""malloc"">" 4
! .el .IP *<\f(CWmalloc\fR> 4
  .IX Item "*<malloc>"
  .ie n .IP "*<""memset"">" 4
! .el .IP *<\f(CWmemset\fR> 4
  .IX Item "*<memset>"
  .ie n .IP "*<""operator delete"">" 4
  .el .IP "*<\f(CWoperator delete\fR>" 4
*************** memory-management functions:
*** 10744,10784 ****
  .el .IP "*<\f(CWoperator new []\fR>" 4
  .IX Item "*<operator new []>"
  .ie n .IP "*<""realloc"">" 4
! .el .IP "*<\f(CWrealloc\fR>" 4
  .IX Item "*<realloc>"
  .ie n .IP "*<""strdup"">" 4
! .el .IP "*<\f(CWstrdup\fR>" 4
  .IX Item "*<strdup>"
  .ie n .IP "*<""strndup"">" 4
! .el .IP "*<\f(CWstrndup\fR>" 4
  .IX Item "*<strndup>"
  .PD
  .PP
  of the following functions for working with file descriptors:
  .ie n .IP "*<""open"">" 4
! .el .IP "*<\f(CWopen\fR>" 4
  .IX Item "*<open>"
  .PD 0
  .ie n .IP "*<""close"">" 4
! .el .IP "*<\f(CWclose\fR>" 4
  .IX Item "*<close>"
  .ie n .IP "*<""creat"">" 4
! .el .IP "*<\f(CWcreat\fR>" 4
  .IX Item "*<creat>"
  .ie n .IP "*<""dup"", ""dup2"" and ""dup3"">" 4
  .el .IP "*<\f(CWdup\fR, \f(CWdup2\fR and \f(CWdup3\fR>" 4
  .IX Item "*<dup, dup2 and dup3>"
  .ie n .IP "*<""isatty"">" 4
! .el .IP "*<\f(CWisatty\fR>" 4
  .IX Item "*<isatty>"
  .ie n .IP "*<""pipe"", and ""pipe2"">" 4
  .el .IP "*<\f(CWpipe\fR, and \f(CWpipe2\fR>" 4
  .IX Item "*<pipe, and pipe2>"
  .ie n .IP "*<""read"">" 4
! .el .IP "*<\f(CWread\fR>" 4
  .IX Item "*<read>"
  .ie n .IP "*<""write"">" 4
! .el .IP "*<\f(CWwrite\fR>" 4
  .IX Item "*<write>"
  .ie n .IP "*<""socket"", ""bind"", ""listen"", ""accept"", and ""connect"">" 4
  .el .IP "*<\f(CWsocket\fR, \f(CWbind\fR, \f(CWlisten\fR, \f(CWaccept\fR, and \f(CWconnect\fR>" 4
--- 10677,10717 ----
  .el .IP "*<\f(CWoperator new []\fR>" 4
  .IX Item "*<operator new []>"
  .ie n .IP "*<""realloc"">" 4
! .el .IP *<\f(CWrealloc\fR> 4
  .IX Item "*<realloc>"
  .ie n .IP "*<""strdup"">" 4
! .el .IP *<\f(CWstrdup\fR> 4
  .IX Item "*<strdup>"
  .ie n .IP "*<""strndup"">" 4
! .el .IP *<\f(CWstrndup\fR> 4
  .IX Item "*<strndup>"
  .PD
  .PP
  of the following functions for working with file descriptors:
  .ie n .IP "*<""open"">" 4
! .el .IP *<\f(CWopen\fR> 4
  .IX Item "*<open>"
  .PD 0
  .ie n .IP "*<""close"">" 4
! .el .IP *<\f(CWclose\fR> 4
  .IX Item "*<close>"
  .ie n .IP "*<""creat"">" 4
! .el .IP *<\f(CWcreat\fR> 4
  .IX Item "*<creat>"
  .ie n .IP "*<""dup"", ""dup2"" and ""dup3"">" 4
  .el .IP "*<\f(CWdup\fR, \f(CWdup2\fR and \f(CWdup3\fR>" 4
  .IX Item "*<dup, dup2 and dup3>"
  .ie n .IP "*<""isatty"">" 4
! .el .IP *<\f(CWisatty\fR> 4
  .IX Item "*<isatty>"
  .ie n .IP "*<""pipe"", and ""pipe2"">" 4
  .el .IP "*<\f(CWpipe\fR, and \f(CWpipe2\fR>" 4
  .IX Item "*<pipe, and pipe2>"
  .ie n .IP "*<""read"">" 4
! .el .IP *<\f(CWread\fR> 4
  .IX Item "*<read>"
  .ie n .IP "*<""write"">" 4
! .el .IP *<\f(CWwrite\fR> 4
  .IX Item "*<write>"
  .ie n .IP "*<""socket"", ""bind"", ""listen"", ""accept"", and ""connect"">" 4
  .el .IP "*<\f(CWsocket\fR, \f(CWbind\fR, \f(CWlisten\fR, \f(CWaccept\fR, and \f(CWconnect\fR>" 4
*************** of the following functions for working w
*** 10786,10793 ****
  .PD
  .PP
  of the following functions for working with \f(CW\*(C`<stdio.h>\*(C'\fR streams:
! .ie n .IP "*<The built-in functions ""_\|_builtin_fprintf"",>" 4
! .el .IP "*<The built-in functions \f(CW_\|_builtin_fprintf\fR,>" 4
  .IX Item "*<The built-in functions __builtin_fprintf,>"
  \&\f(CW\*(C`_\|_builtin_fprintf_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_fputc_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputs\*(C'\fR,
--- 10719,10726 ----
  .PD
  .PP
  of the following functions for working with \f(CW\*(C`<stdio.h>\*(C'\fR streams:
! .ie n .IP "*<The built\-in functions ""_\|_builtin_fprintf"",>" 4
! .el .IP "*<The built\-in functions \f(CW_\|_builtin_fprintf\fR,>" 4
  .IX Item "*<The built-in functions __builtin_fprintf,>"
  \&\f(CW\*(C`_\|_builtin_fprintf_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_fputc_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputs\*(C'\fR,
*************** of the following functions for working w
*** 10799,10888 ****
  \&\f(CW\*(C`_\|_builtin_puts_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_vfprintf\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_vprintf\*(C'\fR
  .ie n .IP "*<""fopen"">" 4
! .el .IP "*<\f(CWfopen\fR>" 4
  .IX Item "*<fopen>"
  .PD 0
  .ie n .IP "*<""fclose"">" 4
! .el .IP "*<\f(CWfclose\fR>" 4
  .IX Item "*<fclose>"
  .ie n .IP "*<""ferror"">" 4
! .el .IP "*<\f(CWferror\fR>" 4
  .IX Item "*<ferror>"
  .ie n .IP "*<""fgets"">" 4
! .el .IP "*<\f(CWfgets\fR>" 4
  .IX Item "*<fgets>"
  .ie n .IP "*<""fgets_unlocked"">" 4
! .el .IP "*<\f(CWfgets_unlocked\fR>" 4
  .IX Item "*<fgets_unlocked>"
  .ie n .IP "*<""fileno"">" 4
! .el .IP "*<\f(CWfileno\fR>" 4
  .IX Item "*<fileno>"
  .ie n .IP "*<""fread"">" 4
! .el .IP "*<\f(CWfread\fR>" 4
  .IX Item "*<fread>"
  .ie n .IP "*<""getc"">" 4
! .el .IP "*<\f(CWgetc\fR>" 4
  .IX Item "*<getc>"
  .ie n .IP "*<""getchar"">" 4
! .el .IP "*<\f(CWgetchar\fR>" 4
  .IX Item "*<getchar>"
  .ie n .IP "*<""fprintf"">" 4
! .el .IP "*<\f(CWfprintf\fR>" 4
  .IX Item "*<fprintf>"
  .ie n .IP "*<""printf"">" 4
! .el .IP "*<\f(CWprintf\fR>" 4
  .IX Item "*<printf>"
  .ie n .IP "*<""fwrite"">" 4
! .el .IP "*<\f(CWfwrite\fR>" 4
  .IX Item "*<fwrite>"
  .PD
  .PP
  and of the following functions:
! .ie n .IP "*<The built-in functions ""_\|_builtin_expect"",>" 4
! .el .IP "*<The built-in functions \f(CW_\|_builtin_expect\fR,>" 4
  .IX Item "*<The built-in functions __builtin_expect,>"
  \&\f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR, \f(CW\*(C`_\|_builtin_strchr\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strcpy\*(C'\fR, \f(CW\*(C`_\|_builtin_strcpy_chk\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strlen\*(C'\fR, \f(CW\*(C`_\|_builtin_va_copy\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_va_start\*(C'\fR
! .ie n .IP "*<The \s-1GNU\s0 extensions ""error"" and ""error_at_line"">" 4
! .el .IP "*<The \s-1GNU\s0 extensions \f(CWerror\fR and \f(CWerror_at_line\fR>" 4
  .IX Item "*<The GNU extensions error and error_at_line>"
  .PD 0
  .ie n .IP "*<""getpass"">" 4
! .el .IP "*<\f(CWgetpass\fR>" 4
  .IX Item "*<getpass>"
  .ie n .IP "*<""longjmp"">" 4
! .el .IP "*<\f(CWlongjmp\fR>" 4
  .IX Item "*<longjmp>"
  .ie n .IP "*<""putenv"">" 4
! .el .IP "*<\f(CWputenv\fR>" 4
  .IX Item "*<putenv>"
  .ie n .IP "*<""setjmp"">" 4
! .el .IP "*<\f(CWsetjmp\fR>" 4
  .IX Item "*<setjmp>"
  .ie n .IP "*<""siglongjmp"">" 4
! .el .IP "*<\f(CWsiglongjmp\fR>" 4
  .IX Item "*<siglongjmp>"
  .ie n .IP "*<""signal"">" 4
! .el .IP "*<\f(CWsignal\fR>" 4
  .IX Item "*<signal>"
  .ie n .IP "*<""sigsetjmp"">" 4
! .el .IP "*<\f(CWsigsetjmp\fR>" 4
  .IX Item "*<sigsetjmp>"
  .ie n .IP "*<""strcat"">" 4
! .el .IP "*<\f(CWstrcat\fR>" 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strchr"">" 4
! .el .IP "*<\f(CWstrchr\fR>" 4
  .IX Item "*<strchr>"
  .ie n .IP "*<""strlen"">" 4
! .el .IP "*<\f(CWstrlen\fR>" 4
  .IX Item "*<strlen>"
  .PD
  .PP
  In addition, various functions with an \f(CW\*(C`_\|_analyzer_\*(C'\fR prefix have
! special meaning to the analyzer, described in the \s-1GCC\s0 Internals manual.
  .PP
  Pertinent parameters for controlling the exploration are:
  .IP "*<\fB\-\-param analyzer\-bb\-explosion\-factor=\fR\fIvalue\fR>" 4
--- 10732,10821 ----
  \&\f(CW\*(C`_\|_builtin_puts_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_vfprintf\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_vprintf\*(C'\fR
  .ie n .IP "*<""fopen"">" 4
! .el .IP *<\f(CWfopen\fR> 4
  .IX Item "*<fopen>"
  .PD 0
  .ie n .IP "*<""fclose"">" 4
! .el .IP *<\f(CWfclose\fR> 4
  .IX Item "*<fclose>"
  .ie n .IP "*<""ferror"">" 4
! .el .IP *<\f(CWferror\fR> 4
  .IX Item "*<ferror>"
  .ie n .IP "*<""fgets"">" 4
! .el .IP *<\f(CWfgets\fR> 4
  .IX Item "*<fgets>"
  .ie n .IP "*<""fgets_unlocked"">" 4
! .el .IP *<\f(CWfgets_unlocked\fR> 4
  .IX Item "*<fgets_unlocked>"
  .ie n .IP "*<""fileno"">" 4
! .el .IP *<\f(CWfileno\fR> 4
  .IX Item "*<fileno>"
  .ie n .IP "*<""fread"">" 4
! .el .IP *<\f(CWfread\fR> 4
  .IX Item "*<fread>"
  .ie n .IP "*<""getc"">" 4
! .el .IP *<\f(CWgetc\fR> 4
  .IX Item "*<getc>"
  .ie n .IP "*<""getchar"">" 4
! .el .IP *<\f(CWgetchar\fR> 4
  .IX Item "*<getchar>"
  .ie n .IP "*<""fprintf"">" 4
! .el .IP *<\f(CWfprintf\fR> 4
  .IX Item "*<fprintf>"
  .ie n .IP "*<""printf"">" 4
! .el .IP *<\f(CWprintf\fR> 4
  .IX Item "*<printf>"
  .ie n .IP "*<""fwrite"">" 4
! .el .IP *<\f(CWfwrite\fR> 4
  .IX Item "*<fwrite>"
  .PD
  .PP
  and of the following functions:
! .ie n .IP "*<The built\-in functions ""_\|_builtin_expect"",>" 4
! .el .IP "*<The built\-in functions \f(CW_\|_builtin_expect\fR,>" 4
  .IX Item "*<The built-in functions __builtin_expect,>"
  \&\f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR, \f(CW\*(C`_\|_builtin_strchr\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strcpy\*(C'\fR, \f(CW\*(C`_\|_builtin_strcpy_chk\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strlen\*(C'\fR, \f(CW\*(C`_\|_builtin_va_copy\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_va_start\*(C'\fR
! .ie n .IP "*<The GNU extensions ""error"" and ""error_at_line"">" 4
! .el .IP "*<The GNU extensions \f(CWerror\fR and \f(CWerror_at_line\fR>" 4
  .IX Item "*<The GNU extensions error and error_at_line>"
  .PD 0
  .ie n .IP "*<""getpass"">" 4
! .el .IP *<\f(CWgetpass\fR> 4
  .IX Item "*<getpass>"
  .ie n .IP "*<""longjmp"">" 4
! .el .IP *<\f(CWlongjmp\fR> 4
  .IX Item "*<longjmp>"
  .ie n .IP "*<""putenv"">" 4
! .el .IP *<\f(CWputenv\fR> 4
  .IX Item "*<putenv>"
  .ie n .IP "*<""setjmp"">" 4
! .el .IP *<\f(CWsetjmp\fR> 4
  .IX Item "*<setjmp>"
  .ie n .IP "*<""siglongjmp"">" 4
! .el .IP *<\f(CWsiglongjmp\fR> 4
  .IX Item "*<siglongjmp>"
  .ie n .IP "*<""signal"">" 4
! .el .IP *<\f(CWsignal\fR> 4
  .IX Item "*<signal>"
  .ie n .IP "*<""sigsetjmp"">" 4
! .el .IP *<\f(CWsigsetjmp\fR> 4
  .IX Item "*<sigsetjmp>"
  .ie n .IP "*<""strcat"">" 4
! .el .IP *<\f(CWstrcat\fR> 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strchr"">" 4
! .el .IP *<\f(CWstrchr\fR> 4
  .IX Item "*<strchr>"
  .ie n .IP "*<""strlen"">" 4
! .el .IP *<\f(CWstrlen\fR> 4
  .IX Item "*<strlen>"
  .PD
  .PP
  In addition, various functions with an \f(CW\*(C`_\|_analyzer_\*(C'\fR prefix have
! special meaning to the analyzer, described in the GCC Internals manual.
  .PP
  Pertinent parameters for controlling the exploration are:
  .IP "*<\fB\-\-param analyzer\-bb\-explosion\-factor=\fR\fIvalue\fR>" 4
*************** Pertinent parameters for controlling the
*** 10897,10903 ****
  .PD
  .PP
  The following options control the analyzer.
! .IP "\fB\-fanalyzer\-call\-summaries\fR" 4
  .IX Item "-fanalyzer-call-summaries"
  Simplify interprocedural analysis by computing the effect of certain calls,
  rather than exploring all paths through the function from callsite to each
--- 10830,10836 ----
  .PD
  .PP
  The following options control the analyzer.
! .IP \fB\-fanalyzer\-call\-summaries\fR 4
  .IX Item "-fanalyzer-call-summaries"
  Simplify interprocedural analysis by computing the effect of certain calls,
  rather than exploring all paths through the function from callsite to each
*************** possible return.
*** 10906,10919 ****
  If enabled, call summaries are only used for functions with more than one
  call site, and that are sufficiently complicated (as per
  \&\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR).
! .IP "\fB\-fanalyzer\-checker=\fR\fIname\fR" 4
  .IX Item "-fanalyzer-checker=name"
  Restrict the analyzer to run just the named checker, and enable it.
! .IP "\fB\-fanalyzer\-debug\-text\-art\-headings\fR" 4
  .IX Item "-fanalyzer-debug-text-art-headings"
  This option is intended for analyzer developers.  If enabled,
  the analyzer will add extra annotations to any diagrams it generates.
! .IP "\fB\-fno\-analyzer\-feasibility\fR" 4
  .IX Item "-fno-analyzer-feasibility"
  This option is intended for analyzer developers.
  .Sp
--- 10839,10852 ----
  If enabled, call summaries are only used for functions with more than one
  call site, and that are sufficiently complicated (as per
  \&\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR).
! .IP \fB\-fanalyzer\-checker=\fR\fIname\fR 4
  .IX Item "-fanalyzer-checker=name"
  Restrict the analyzer to run just the named checker, and enable it.
! .IP \fB\-fanalyzer\-debug\-text\-art\-headings\fR 4
  .IX Item "-fanalyzer-debug-text-art-headings"
  This option is intended for analyzer developers.  If enabled,
  the analyzer will add extra annotations to any diagrams it generates.
! .IP \fB\-fno\-analyzer\-feasibility\fR 4
  .IX Item "-fno-analyzer-feasibility"
  This option is intended for analyzer developers.
  .Sp
*************** for each diagnostic it emits: that the c
*** 10922,11002 ****
  exclusive.  Diagnostics for which no feasible path can be found are rejected.
  This filtering can be suppressed with \fB\-fno\-analyzer\-feasibility\fR, for
  debugging issues in this code.
! .IP "\fB\-fanalyzer\-fine\-grained\fR" 4
  .IX Item "-fanalyzer-fine-grained"
  This option is intended for analyzer developers.
  .Sp
! Internally the analyzer builds an \*(L"exploded graph\*(R" that combines
  control flow graphs with data flow information.
  .Sp
  By default, an edge in this graph can contain the effects of a run
  of multiple statements within a basic block.  With
  \&\fB\-fanalyzer\-fine\-grained\fR, each statement gets its own edge.
! .IP "\fB\-fanalyzer\-show\-duplicate\-count\fR" 4
  .IX Item "-fanalyzer-show-duplicate-count"
  This option is intended for analyzer developers: if multiple diagnostics
  have been detected as being duplicates of each other, it emits a note when
  reporting the best diagnostic, giving the number of additional diagnostics
  that were suppressed by the deduplication logic.
! .IP "\fB\-fanalyzer\-show\-events\-in\-system\-headers\fR" 4
  .IX Item "-fanalyzer-show-events-in-system-headers"
  By default the analyzer emits simplified diagnostics paths by hiding
  events fully located within a system header.
  With \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR such
  events are no longer suppressed.
! .IP "\fB\-fno\-analyzer\-state\-merge\fR" 4
  .IX Item "-fno-analyzer-state-merge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by merging
  sufficiently similar states at each program point as it builds its
! \&\*(L"exploded graph\*(R".  With \fB\-fno\-analyzer\-state\-merge\fR this
! merging can be suppressed, for debugging state-handling issues.
! .IP "\fB\-fno\-analyzer\-state\-purge\fR" 4
  .IX Item "-fno-analyzer-state-purge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by purging
  aspects of state at a program point that appear to no longer be relevant
! e.g. the values of locals that aren't accessed later in the function
! and which aren't relevant to leak analysis.
  .Sp
  With \fB\-fno\-analyzer\-state\-purge\fR this purging of state can
! be suppressed, for debugging state-handling issues.
! .IP "\fB\-fno\-analyzer\-suppress\-followups\fR" 4
  .IX Item "-fno-analyzer-suppress-followups"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer will stop exploring an execution path after
  encountering certain diagnostics, in order to avoid potentially issuing a
! cascade of follow-up diagnostics.
  .Sp
  The diagnostics that terminate analysis along a path are:
  .RS 4
! .IP "*<\fB\-Wanalyzer\-null\-argument\fR>" 4
  .IX Item "*<-Wanalyzer-null-argument>"
  .PD 0
! .IP "*<\fB\-Wanalyzer\-null\-dereference\fR>" 4
  .IX Item "*<-Wanalyzer-null-dereference>"
! .IP "*<\fB\-Wanalyzer\-use\-after\-free\fR>" 4
  .IX Item "*<-Wanalyzer-use-after-free>"
! .IP "*<\fB\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR>" 4
  .IX Item "*<-Wanalyzer-use-of-pointer-in-stale-stack-frame>"
! .IP "*<\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR>" 4
  .IX Item "*<-Wanalyzer-use-of-uninitialized-value>"
  .RE
  .RS 4
- .PD
  .Sp
  With \fB\-fno\-analyzer\-suppress\-followups\fR the analyzer will
  continue to explore such paths even after such diagnostics, which may
  be helpful for debugging issues in the analyzer, or for microbenchmarks
  for detecting undefined behavior.
  .RE
! .IP "\fB\-fanalyzer\-transitivity\fR" 4
  .IX Item "-fanalyzer-transitivity"
  This option enables transitivity of constraints within the analyzer.
! .IP "\fB\-fno\-analyzer\-undo\-inlining\fR" 4
  .IX Item "-fno-analyzer-undo-inlining"
  This option is intended for analyzer developers.
  .Sp
--- 10855,10935 ----
  exclusive.  Diagnostics for which no feasible path can be found are rejected.
  This filtering can be suppressed with \fB\-fno\-analyzer\-feasibility\fR, for
  debugging issues in this code.
! .IP \fB\-fanalyzer\-fine\-grained\fR 4
  .IX Item "-fanalyzer-fine-grained"
  This option is intended for analyzer developers.
  .Sp
! Internally the analyzer builds an "exploded graph" that combines
  control flow graphs with data flow information.
  .Sp
  By default, an edge in this graph can contain the effects of a run
  of multiple statements within a basic block.  With
  \&\fB\-fanalyzer\-fine\-grained\fR, each statement gets its own edge.
! .IP \fB\-fanalyzer\-show\-duplicate\-count\fR 4
  .IX Item "-fanalyzer-show-duplicate-count"
  This option is intended for analyzer developers: if multiple diagnostics
  have been detected as being duplicates of each other, it emits a note when
  reporting the best diagnostic, giving the number of additional diagnostics
  that were suppressed by the deduplication logic.
! .IP \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR 4
  .IX Item "-fanalyzer-show-events-in-system-headers"
  By default the analyzer emits simplified diagnostics paths by hiding
  events fully located within a system header.
  With \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR such
  events are no longer suppressed.
! .IP \fB\-fno\-analyzer\-state\-merge\fR 4
  .IX Item "-fno-analyzer-state-merge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by merging
  sufficiently similar states at each program point as it builds its
! "exploded graph".  With \fB\-fno\-analyzer\-state\-merge\fR this
! merging can be suppressed, for debugging state\-handling issues.
! .IP \fB\-fno\-analyzer\-state\-purge\fR 4
  .IX Item "-fno-analyzer-state-purge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by purging
  aspects of state at a program point that appear to no longer be relevant
! e.g. the values of locals that aren\*(Aqt accessed later in the function
! and which aren\*(Aqt relevant to leak analysis.
  .Sp
  With \fB\-fno\-analyzer\-state\-purge\fR this purging of state can
! be suppressed, for debugging state\-handling issues.
! .IP \fB\-fno\-analyzer\-suppress\-followups\fR 4
  .IX Item "-fno-analyzer-suppress-followups"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer will stop exploring an execution path after
  encountering certain diagnostics, in order to avoid potentially issuing a
! cascade of follow\-up diagnostics.
  .Sp
  The diagnostics that terminate analysis along a path are:
  .RS 4
! .IP *<\fB\-Wanalyzer\-null\-argument\fR> 4
  .IX Item "*<-Wanalyzer-null-argument>"
  .PD 0
! .IP *<\fB\-Wanalyzer\-null\-dereference\fR> 4
  .IX Item "*<-Wanalyzer-null-dereference>"
! .IP *<\fB\-Wanalyzer\-use\-after\-free\fR> 4
  .IX Item "*<-Wanalyzer-use-after-free>"
! .IP *<\fB\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR> 4
  .IX Item "*<-Wanalyzer-use-of-pointer-in-stale-stack-frame>"
! .IP *<\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR> 4
  .IX Item "*<-Wanalyzer-use-of-uninitialized-value>"
+ .PD
  .RE
  .RS 4
  .Sp
  With \fB\-fno\-analyzer\-suppress\-followups\fR the analyzer will
  continue to explore such paths even after such diagnostics, which may
  be helpful for debugging issues in the analyzer, or for microbenchmarks
  for detecting undefined behavior.
  .RE
! .IP \fB\-fanalyzer\-transitivity\fR 4
  .IX Item "-fanalyzer-transitivity"
  This option enables transitivity of constraints within the analyzer.
! .IP \fB\-fno\-analyzer\-undo\-inlining\fR 4
  .IX Item "-fno-analyzer-undo-inlining"
  This option is intended for analyzer developers.
  .Sp
*************** This option is intended for analyzer dev
*** 11004,11010 ****
  tools, and some optimizations have already been applied to the code.  In
  particular function inlining may have occurred, leading to the
  interprocedural execution paths emitted by the analyzer containing
! function frames that don't correspond to those in the original source
  code.
  .Sp
  By default the analyzer attempts to reconstruct the original function
--- 10937,10943 ----
  tools, and some optimizations have already been applied to the code.  In
  particular function inlining may have occurred, leading to the
  interprocedural execution paths emitted by the analyzer containing
! function frames that don\*(Aqt correspond to those in the original source
  code.
  .Sp
  By default the analyzer attempts to reconstruct the original function
*************** frames, and to emit events showing the i
*** 11013,11140 ****
  With \fB\-fno\-analyzer\-undo\-inlining\fR this attempt to reconstruct
  the original frame information can be disabled, which may be of help
  when debugging issues in the analyzer.
! .IP "\fB\-fanalyzer\-verbose\-edges\fR" 4
  .IX Item "-fanalyzer-verbose-edges"
  This option is intended for analyzer developers.  It enables more
! verbose, lower-level detail in the descriptions of control flow
  within diagnostic paths.
! .IP "\fB\-fanalyzer\-verbose\-state\-changes\fR" 4
  .IX Item "-fanalyzer-verbose-state-changes"
  This option is intended for analyzer developers.  It enables more
! verbose, lower-level detail in the descriptions of events relating
  to state machines within diagnostic paths.
! .IP "\fB\-fanalyzer\-verbosity=\fR\fIlevel\fR" 4
  .IX Item "-fanalyzer-verbosity=level"
  This option controls the complexity of the control flow paths that are
  emitted for analyzer diagnostics.
  .Sp
  The \fIlevel\fR can be one of:
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  At this level, interprocedural call and return events are displayed,
! along with the most pertinent state-change events relating to
  a diagnostic.  For example, for a double\-\f(CW\*(C`free\*(C'\fR diagnostic,
  both calls to \f(CW\*(C`free\*(C'\fR will be shown.
! .IP "\fB1\fR" 4
  .IX Item "1"
  As per the previous level, but also show events for the entry
  to each function.
! .IP "\fB2\fR" 4
  .IX Item "2"
  As per the previous level, but also show events relating to
  control flow that are significant to triggering the issue
! (e.g. \*(L"true path taken\*(R" at a conditional).
  .Sp
  This level is the default.
! .IP "\fB3\fR" 4
  .IX Item "3"
  As per the previous level, but show all control flow events, not
  just significant ones.
! .IP "\fB4\fR" 4
  .IX Item "4"
  This level is intended for analyzer developers; it adds various
  other events intended for debugging the analyzer.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-analyzer\fR" 4
  .IX Item "-fdump-analyzer"
  Dump internal details about what the analyzer is doing to
! \&\fI\fIfile\fI.analyzer.txt\fR.
  \&\fB\-fdump\-analyzer\-stderr\fR overrides this option.
! .IP "\fB\-fdump\-analyzer\-stderr\fR" 4
  .IX Item "-fdump-analyzer-stderr"
  Dump internal details about what the analyzer is doing to stderr.
  This option overrides \fB\-fdump\-analyzer\fR.
! .IP "\fB\-fdump\-analyzer\-callgraph\fR" 4
  .IX Item "-fdump-analyzer-callgraph"
  Dump a representation of the call graph suitable for viewing with
! GraphViz to \fI\fIfile\fI.callgraph.dot\fR.
! .IP "\fB\-fdump\-analyzer\-exploded\-graph\fR" 4
  .IX Item "-fdump-analyzer-exploded-graph"
! Dump a representation of the \*(L"exploded graph\*(R" suitable for viewing with
! GraphViz to \fI\fIfile\fI.eg.dot\fR.
! Nodes are color-coded based on state-machine states to emphasize
  state changes.
! .IP "\fB\-fdump\-analyzer\-exploded\-nodes\fR" 4
  .IX Item "-fdump-analyzer-exploded-nodes"
! Emit diagnostics showing where nodes in the \*(L"exploded graph\*(R" are
  in relation to the program source.
! .IP "\fB\-fdump\-analyzer\-exploded\-nodes\-2\fR" 4
  .IX Item "-fdump-analyzer-exploded-nodes-2"
! Dump a textual representation of the \*(L"exploded graph\*(R" to
! \&\fI\fIfile\fI.eg.txt\fR.
! .IP "\fB\-fdump\-analyzer\-exploded\-nodes\-3\fR" 4
  .IX Item "-fdump-analyzer-exploded-nodes-3"
! Dump a textual representation of the \*(L"exploded graph\*(R" to
! one dump file per node, to \fI\fIfile\fI.eg\-\fIid\fI.txt\fR.
  This is typically a large number of dump files.
! .IP "\fB\-fdump\-analyzer\-exploded\-paths\fR" 4
  .IX Item "-fdump-analyzer-exploded-paths"
! Dump a textual representation of the \*(L"exploded path\*(R" for each
! diagnostic to \fI\fIfile\fI.\fIidx\fI.\fIkind\fI.epath.txt\fR.
! .IP "\fB\-fdump\-analyzer\-feasibility\fR" 4
  .IX Item "-fdump-analyzer-feasibility"
! Dump internal details about the analyzer's search for feasible paths.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fI\fIfile\fI.*.fg.dot\fR,
! \&\fI\fIfile\fI.*.tg.dot\fR, and \fI\fIfile\fI.*.fpath.txt\fR.
! .IP "\fB\-fdump\-analyzer\-infinite\-loop\fR" 4
  .IX Item "-fdump-analyzer-infinite-loop"
! Dump internal details about the analyzer's search for infinite loops.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fI\fIfile\fI.*.infinite\-loop.dot\fR.
! .IP "\fB\-fdump\-analyzer\-json\fR" 4
  .IX Item "-fdump-analyzer-json"
! Dump a compressed \s-1JSON\s0 representation of analyzer internals to
! \&\fI\fIfile\fI.analyzer.json.gz\fR.  The precise format is subject
  to change.
! .IP "\fB\-fdump\-analyzer\-state\-purge\fR" 4
  .IX Item "-fdump-analyzer-state-purge"
  As per \fB\-fdump\-analyzer\-supergraph\fR, dump a representation of the
! \&\*(L"supergraph\*(R" suitable for viewing with GraphViz, but annotate the
  graph with information on what state will be purged at each node.
! The graph is written to \fI\fIfile\fI.state\-purge.dot\fR.
! .IP "\fB\-fdump\-analyzer\-supergraph\fR" 4
  .IX Item "-fdump-analyzer-supergraph"
! Dump representations of the \*(L"supergraph\*(R" suitable for viewing with
! GraphViz to \fI\fIfile\fI.supergraph.dot\fR and to
! \&\fI\fIfile\fI.supergraph\-eg.dot\fR.  These show all of the
  control flow graphs in the program, with interprocedural edges for
  calls and returns.  The second dump contains annotations showing nodes
! in the \*(L"exploded graph\*(R" and diagnostics associated with them.
! .IP "\fB\-fdump\-analyzer\-untracked\fR" 4
  .IX Item "-fdump-analyzer-untracked"
  Emit custom warnings with internal details intended for analyzer developers.
  .SS "Options for Debugging Your Program"
  .IX Subsection "Options for Debugging Your Program"
! To tell \s-1GCC\s0 to emit extra information for use by a debugger, in almost 
  all cases you need only to add \fB\-g\fR to your other options.  Some debug
! formats can co-exist (like \s-1DWARF\s0 with \s-1CTF\s0) when each of them is enabled
  explicitly by adding the respective command line option to your other options.
  .PP
! \&\s-1GCC\s0 allows you to use \fB\-g\fR with
  \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
  be surprising: some variables you declared may not exist
  at all; flow of control may briefly move where you did not expect it;
--- 10946,11073 ----
  With \fB\-fno\-analyzer\-undo\-inlining\fR this attempt to reconstruct
  the original frame information can be disabled, which may be of help
  when debugging issues in the analyzer.
! .IP \fB\-fanalyzer\-verbose\-edges\fR 4
  .IX Item "-fanalyzer-verbose-edges"
  This option is intended for analyzer developers.  It enables more
! verbose, lower\-level detail in the descriptions of control flow
  within diagnostic paths.
! .IP \fB\-fanalyzer\-verbose\-state\-changes\fR 4
  .IX Item "-fanalyzer-verbose-state-changes"
  This option is intended for analyzer developers.  It enables more
! verbose, lower\-level detail in the descriptions of events relating
  to state machines within diagnostic paths.
! .IP \fB\-fanalyzer\-verbosity=\fR\fIlevel\fR 4
  .IX Item "-fanalyzer-verbosity=level"
  This option controls the complexity of the control flow paths that are
  emitted for analyzer diagnostics.
  .Sp
  The \fIlevel\fR can be one of:
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  At this level, interprocedural call and return events are displayed,
! along with the most pertinent state\-change events relating to
  a diagnostic.  For example, for a double\-\f(CW\*(C`free\*(C'\fR diagnostic,
  both calls to \f(CW\*(C`free\*(C'\fR will be shown.
! .IP \fB1\fR 4
  .IX Item "1"
  As per the previous level, but also show events for the entry
  to each function.
! .IP \fB2\fR 4
  .IX Item "2"
  As per the previous level, but also show events relating to
  control flow that are significant to triggering the issue
! (e.g. "true path taken" at a conditional).
  .Sp
  This level is the default.
! .IP \fB3\fR 4
  .IX Item "3"
  As per the previous level, but show all control flow events, not
  just significant ones.
! .IP \fB4\fR 4
  .IX Item "4"
  This level is intended for analyzer developers; it adds various
  other events intended for debugging the analyzer.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-analyzer\fR 4
  .IX Item "-fdump-analyzer"
  Dump internal details about what the analyzer is doing to
! \&\fIfile.analyzer.txt\fR.
  \&\fB\-fdump\-analyzer\-stderr\fR overrides this option.
! .IP \fB\-fdump\-analyzer\-stderr\fR 4
  .IX Item "-fdump-analyzer-stderr"
  Dump internal details about what the analyzer is doing to stderr.
  This option overrides \fB\-fdump\-analyzer\fR.
! .IP \fB\-fdump\-analyzer\-callgraph\fR 4
  .IX Item "-fdump-analyzer-callgraph"
  Dump a representation of the call graph suitable for viewing with
! GraphViz to \fIfile.callgraph.dot\fR.
! .IP \fB\-fdump\-analyzer\-exploded\-graph\fR 4
  .IX Item "-fdump-analyzer-exploded-graph"
! Dump a representation of the "exploded graph" suitable for viewing with
! GraphViz to \fIfile.eg.dot\fR.
! Nodes are color\-coded based on state\-machine states to emphasize
  state changes.
! .IP \fB\-fdump\-analyzer\-exploded\-nodes\fR 4
  .IX Item "-fdump-analyzer-exploded-nodes"
! Emit diagnostics showing where nodes in the "exploded graph" are
  in relation to the program source.
! .IP \fB\-fdump\-analyzer\-exploded\-nodes\-2\fR 4
  .IX Item "-fdump-analyzer-exploded-nodes-2"
! Dump a textual representation of the "exploded graph" to
! \&\fIfile.eg.txt\fR.
! .IP \fB\-fdump\-analyzer\-exploded\-nodes\-3\fR 4
  .IX Item "-fdump-analyzer-exploded-nodes-3"
! Dump a textual representation of the "exploded graph" to
! one dump file per node, to \fIfile.eg\-id.txt\fR.
  This is typically a large number of dump files.
! .IP \fB\-fdump\-analyzer\-exploded\-paths\fR 4
  .IX Item "-fdump-analyzer-exploded-paths"
! Dump a textual representation of the "exploded path" for each
! diagnostic to \fIfile.idx.kind.epath.txt\fR.
! .IP \fB\-fdump\-analyzer\-feasibility\fR 4
  .IX Item "-fdump-analyzer-feasibility"
! Dump internal details about the analyzer\*(Aqs search for feasible paths.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fIfile.*.fg.dot\fR,
! \&\fIfile.*.tg.dot\fR, and \fIfile.*.fpath.txt\fR.
! .IP \fB\-fdump\-analyzer\-infinite\-loop\fR 4
  .IX Item "-fdump-analyzer-infinite-loop"
! Dump internal details about the analyzer\*(Aqs search for infinite loops.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fIfile.*.infinite\-loop.dot\fR.
! .IP \fB\-fdump\-analyzer\-json\fR 4
  .IX Item "-fdump-analyzer-json"
! Dump a compressed JSON representation of analyzer internals to
! \&\fIfile.analyzer.json.gz\fR.  The precise format is subject
  to change.
! .IP \fB\-fdump\-analyzer\-state\-purge\fR 4
  .IX Item "-fdump-analyzer-state-purge"
  As per \fB\-fdump\-analyzer\-supergraph\fR, dump a representation of the
! "supergraph" suitable for viewing with GraphViz, but annotate the
  graph with information on what state will be purged at each node.
! The graph is written to \fIfile.state\-purge.dot\fR.
! .IP \fB\-fdump\-analyzer\-supergraph\fR 4
  .IX Item "-fdump-analyzer-supergraph"
! Dump representations of the "supergraph" suitable for viewing with
! GraphViz to \fIfile.supergraph.dot\fR and to
! \&\fIfile.supergraph\-eg.dot\fR.  These show all of the
  control flow graphs in the program, with interprocedural edges for
  calls and returns.  The second dump contains annotations showing nodes
! in the "exploded graph" and diagnostics associated with them.
! .IP \fB\-fdump\-analyzer\-untracked\fR 4
  .IX Item "-fdump-analyzer-untracked"
  Emit custom warnings with internal details intended for analyzer developers.
  .SS "Options for Debugging Your Program"
  .IX Subsection "Options for Debugging Your Program"
! To tell GCC to emit extra information for use by a debugger, in almost 
  all cases you need only to add \fB\-g\fR to your other options.  Some debug
! formats can co\-exist (like DWARF with CTF) when each of them is enabled
  explicitly by adding the respective command line option to your other options.
  .PP
! GCC allows you to use \fB\-g\fR with
  \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
  be surprising: some variables you declared may not exist
  at all; flow of control may briefly move where you did not expect it;
*************** using \fB\-Og\fR with \fB\-g\fR.
*** 11149,11237 ****
  With no \fB\-O\fR option at all, some compiler passes that collect
  information useful for debugging do not run at all, so that
  \&\fB\-Og\fR may result in a better debugging experience.
! .IP "\fB\-g\fR" 4
  .IX Item "-g"
! Produce debugging information in the operating system's native format
! (stabs, \s-1COFF, XCOFF,\s0 or \s-1DWARF\s0).  \s-1GDB\s0 can work with this debugging
  information.
  .Sp
  On most systems that use stabs format, \fB\-g\fR enables use of extra
! debugging information that only \s-1GDB\s0 can use; this extra information
! makes debugging work better in \s-1GDB\s0 but probably makes other debuggers
  crash or refuse to read the program.  If you want to control for certain whether
  to generate the extra information, use \fB\-gvms\fR (see below).
! .IP "\fB\-ggdb\fR" 4
  .IX Item "-ggdb"
! Produce debugging information for use by \s-1GDB.\s0  This means to use the
! most expressive format available (\s-1DWARF,\s0 stabs, or the native format
! if neither of those are supported), including \s-1GDB\s0 extensions if at all
  possible.
! .IP "\fB\-gdwarf\fR" 4
  .IX Item "-gdwarf"
  .PD 0
! .IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
  .IX Item "-gdwarf-version"
  .PD
! Produce debugging information in \s-1DWARF\s0 format (if that is supported).
  The value of \fIversion\fR may be either 2, 3, 4 or 5; the default
! version for most targets is 5 (with the exception of VxWorks, \s-1TPF\s0 and
! Darwin / macOS, which default to version 2, and \s-1AIX,\s0 which defaults
  to version 4).
  .Sp
! Note that with \s-1DWARF\s0 Version 2, some ports require and always
! use some non-conflicting \s-1DWARF 3\s0 extensions in the unwind tables.
  .Sp
! Version 4 may require \s-1GDB 7.0\s0 and \fB\-fvar\-tracking\-assignments\fR
! for maximum benefit. Version 5 requires \s-1GDB 8.0\s0 or higher.
  .Sp
! \&\s-1GCC\s0 no longer supports \s-1DWARF\s0 Version 1, which is substantially
  different than Version 2 and later.  For historical reasons, some
! other DWARF-related options such as
! \&\fB\-fno\-dwarf2\-cfi\-asm\fR) retain a reference to \s-1DWARF\s0 Version 2
! in their names, but apply to all currently-supported versions of \s-1DWARF.\s0
! .IP "\fB\-gbtf\fR" 4
  .IX Item "-gbtf"
! Request \s-1BTF\s0 debug information.  \s-1BTF\s0 is the default debugging format for the
! eBPF target.  On other targets, like x86, \s-1BTF\s0 debug information can be
! generated along with \s-1DWARF\s0 debug information when both of the debug formats are
  enabled explicitly via their respective command line options.
! .IP "\fB\-gctf\fR" 4
  .IX Item "-gctf"
  .PD 0
! .IP "\fB\-gctf\fR\fIlevel\fR" 4
  .IX Item "-gctflevel"
  .PD
! Request \s-1CTF\s0 debug information and use level to specify how much \s-1CTF\s0 debug
  information should be produced.  If \fB\-gctf\fR is specified
! without a value for level, the default level of \s-1CTF\s0 debug information is 2.
  .Sp
! \&\s-1CTF\s0 debug information can be generated along with \s-1DWARF\s0 debug information when
  both of the debug formats are enabled explicitly via their respective command
  line options.
  .Sp
! Level 0 produces no \s-1CTF\s0 debug information at all.  Thus, \fB\-gctf0\fR
  negates \fB\-gctf\fR.
  .Sp
! Level 1 produces \s-1CTF\s0 information for tracebacks only.  This includes callsite
  information, but does not include type information.
  .Sp
  Level 2 produces type information for entities (functions, data objects etc.)
! at file-scope or global-scope only.
! .IP "\fB\-gvms\fR" 4
  .IX Item "-gvms"
  Produce debugging information in Alpha/VMS debug format (if that is
! supported).  This is the format used by \s-1DEBUG\s0 on Alpha/VMS systems.
! .IP "\fB\-gcodeview\fR" 4
  .IX Item "-gcodeview"
  Produce debugging information in CodeView debug format (if that is
! supported).  This is the format used by Microsoft Visual \*(C+ on
  Windows.
! .IP "\fB\-g\fR\fIlevel\fR" 4
  .IX Item "-glevel"
  .PD 0
! .IP "\fB\-ggdb\fR\fIlevel\fR" 4
  .IX Item "-ggdblevel"
! .IP "\fB\-gvms\fR\fIlevel\fR" 4
  .IX Item "-gvmslevel"
  .PD
  Request debugging information and also use \fIlevel\fR to specify how
--- 11082,11170 ----
  With no \fB\-O\fR option at all, some compiler passes that collect
  information useful for debugging do not run at all, so that
  \&\fB\-Og\fR may result in a better debugging experience.
! .IP \fB\-g\fR 4
  .IX Item "-g"
! Produce debugging information in the operating system\*(Aqs native format
! (stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
  information.
  .Sp
  On most systems that use stabs format, \fB\-g\fR enables use of extra
! debugging information that only GDB can use; this extra information
! makes debugging work better in GDB but probably makes other debuggers
  crash or refuse to read the program.  If you want to control for certain whether
  to generate the extra information, use \fB\-gvms\fR (see below).
! .IP \fB\-ggdb\fR 4
  .IX Item "-ggdb"
! Produce debugging information for use by GDB.  This means to use the
! most expressive format available (DWARF, stabs, or the native format
! if neither of those are supported), including GDB extensions if at all
  possible.
! .IP \fB\-gdwarf\fR 4
  .IX Item "-gdwarf"
  .PD 0
! .IP \fB\-gdwarf\-\fR\fIversion\fR 4
  .IX Item "-gdwarf-version"
  .PD
! Produce debugging information in DWARF format (if that is supported).
  The value of \fIversion\fR may be either 2, 3, 4 or 5; the default
! version for most targets is 5 (with the exception of VxWorks, TPF and
! Darwin / macOS, which default to version 2, and AIX, which defaults
  to version 4).
  .Sp
! Note that with DWARF Version 2, some ports require and always
! use some non\-conflicting DWARF 3 extensions in the unwind tables.
  .Sp
! Version 4 may require GDB 7.0 and \fB\-fvar\-tracking\-assignments\fR
! for maximum benefit. Version 5 requires GDB 8.0 or higher.
  .Sp
! GCC no longer supports DWARF Version 1, which is substantially
  different than Version 2 and later.  For historical reasons, some
! other DWARF\-related options such as
! \&\fB\-fno\-dwarf2\-cfi\-asm\fR) retain a reference to DWARF Version 2
! in their names, but apply to all currently\-supported versions of DWARF.
! .IP \fB\-gbtf\fR 4
  .IX Item "-gbtf"
! Request BTF debug information.  BTF is the default debugging format for the
! eBPF target.  On other targets, like x86, BTF debug information can be
! generated along with DWARF debug information when both of the debug formats are
  enabled explicitly via their respective command line options.
! .IP \fB\-gctf\fR 4
  .IX Item "-gctf"
  .PD 0
! .IP \fB\-gctf\fR\fIlevel\fR 4
  .IX Item "-gctflevel"
  .PD
! Request CTF debug information and use level to specify how much CTF debug
  information should be produced.  If \fB\-gctf\fR is specified
! without a value for level, the default level of CTF debug information is 2.
  .Sp
! CTF debug information can be generated along with DWARF debug information when
  both of the debug formats are enabled explicitly via their respective command
  line options.
  .Sp
! Level 0 produces no CTF debug information at all.  Thus, \fB\-gctf0\fR
  negates \fB\-gctf\fR.
  .Sp
! Level 1 produces CTF information for tracebacks only.  This includes callsite
  information, but does not include type information.
  .Sp
  Level 2 produces type information for entities (functions, data objects etc.)
! at file\-scope or global\-scope only.
! .IP \fB\-gvms\fR 4
  .IX Item "-gvms"
  Produce debugging information in Alpha/VMS debug format (if that is
! supported).  This is the format used by DEBUG on Alpha/VMS systems.
! .IP \fB\-gcodeview\fR 4
  .IX Item "-gcodeview"
  Produce debugging information in CodeView debug format (if that is
! supported).  This is the format used by Microsoft Visual C++ on
  Windows.
! .IP \fB\-g\fR\fIlevel\fR 4
  .IX Item "-glevel"
  .PD 0
! .IP \fB\-ggdb\fR\fIlevel\fR 4
  .IX Item "-ggdblevel"
! .IP \fB\-gvms\fR\fIlevel\fR 4
  .IX Item "-gvmslevel"
  .PD
  Request debugging information and also use \fIlevel\fR to specify how
*************** Level 0 produces no debug information at
*** 11241,11247 ****
  \&\fB\-g\fR.
  .Sp
  Level 1 produces minimal information, enough for making backtraces in
! parts of the program that you don't plan to debug.  This includes
  descriptions of functions and external variables, and line number
  tables, but no information about local variables.
  .Sp
--- 11174,11180 ----
  \&\fB\-g\fR.
  .Sp
  Level 1 produces minimal information, enough for making backtraces in
! parts of the program that you don\*(Aqt plan to debug.  This includes
  descriptions of functions and external variables, and line number
  tables, but no information about local variables.
  .Sp
*************** the last such option is the one that is
*** 11255,11292 ****
  \&\fB\-gdwarf\fR does not accept a concatenated debug level, to avoid
  confusion with \fB\-gdwarf\-\fR\fIlevel\fR.
  Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
! debug level for \s-1DWARF.\s0
! .IP "\fB\-fno\-eliminate\-unused\-debug\-symbols\fR" 4
  .IX Item "-fno-eliminate-unused-debug-symbols"
  By default, no debug information is produced for symbols that are not actually
  used. Use this option if you want debug information for all symbols.
! .IP "\fB\-femit\-class\-debug\-always\fR" 4
  .IX Item "-femit-class-debug-always"
! Instead of emitting debugging information for a \*(C+ class in only one
  object file, emit it in all object files using the class.  This option
! should be used only with debuggers that are unable to handle the way \s-1GCC\s0
  normally emits debugging information for classes because using this
  option increases the size of debugging information by as much as a
  factor of two.
! .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
  .IX Item "-fno-merge-debug-strings"
  Direct the linker to not merge together strings in the debugging
  information that are identical in different object files.  Merging is
  not supported by all assemblers or linkers.  Merging decreases the size
  of the debug information in the output file at the cost of increasing
  link processing time.  Merging is enabled by default.
! .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fdebug-prefix-map=old=new"
! When compiling files residing in directory \fI\fIold\fI\fR, record
  debugging information describing them as if the files resided in
! directory \fI\fInew\fI\fR instead.  This can be used to replace a
! build-time path with an install-time path in the debug info.  It can
  also be used to change an absolute path to a relative path by using
  \&\fI.\fR for \fInew\fR.  This can give more reproducible builds, which
! are location independent, but may require an extra command to tell \s-1GDB\s0
  where to find the source files. See also \fB\-ffile\-prefix\-map\fR
  and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fvar\-tracking\fR" 4
  .IX Item "-fvar-tracking"
  Run variable tracking pass.  It computes where variables are stored at each
  position in code.  Better debugging information is then generated
--- 11188,11225 ----
  \&\fB\-gdwarf\fR does not accept a concatenated debug level, to avoid
  confusion with \fB\-gdwarf\-\fR\fIlevel\fR.
  Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
! debug level for DWARF.
! .IP \fB\-fno\-eliminate\-unused\-debug\-symbols\fR 4
  .IX Item "-fno-eliminate-unused-debug-symbols"
  By default, no debug information is produced for symbols that are not actually
  used. Use this option if you want debug information for all symbols.
! .IP \fB\-femit\-class\-debug\-always\fR 4
  .IX Item "-femit-class-debug-always"
! Instead of emitting debugging information for a C++ class in only one
  object file, emit it in all object files using the class.  This option
! should be used only with debuggers that are unable to handle the way GCC
  normally emits debugging information for classes because using this
  option increases the size of debugging information by as much as a
  factor of two.
! .IP \fB\-fno\-merge\-debug\-strings\fR 4
  .IX Item "-fno-merge-debug-strings"
  Direct the linker to not merge together strings in the debugging
  information that are identical in different object files.  Merging is
  not supported by all assemblers or linkers.  Merging decreases the size
  of the debug information in the output file at the cost of increasing
  link processing time.  Merging is enabled by default.
! .IP \fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fdebug-prefix-map=old=new"
! When compiling files residing in directory \fIold\fR, record
  debugging information describing them as if the files resided in
! directory \fInew\fR instead.  This can be used to replace a
! build\-time path with an install\-time path in the debug info.  It can
  also be used to change an absolute path to a relative path by using
  \&\fI.\fR for \fInew\fR.  This can give more reproducible builds, which
! are location independent, but may require an extra command to tell GDB
  where to find the source files. See also \fB\-ffile\-prefix\-map\fR
  and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fvar\-tracking\fR 4
  .IX Item "-fvar-tracking"
  Run variable tracking pass.  It computes where variables are stored at each
  position in code.  Better debugging information is then generated
*************** position in code.  Better debugging info
*** 11295,11430 ****
  It is enabled by default when compiling with optimization (\fB\-Os\fR,
  \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
  the debug info format supports it.
! .IP "\fB\-fvar\-tracking\-assignments\fR" 4
  .IX Item "-fvar-tracking-assignments"
  Annotate assignments to user variables early in the compilation and
  attempt to carry the annotations over throughout the compilation all the
  way to the end, in an attempt to improve debug information while
  optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
  .Sp
! It can be enabled even if var-tracking is disabled, in which case
  annotations are created and maintained, but discarded at the end.
  By default, this flag is enabled together with \fB\-fvar\-tracking\fR,
  except when selective scheduling is enabled.
! .IP "\fB\-gsplit\-dwarf\fR" 4
  .IX Item "-gsplit-dwarf"
! If \s-1DWARF\s0 debugging information is enabled, separate as much debugging
  information as possible into a separate output file with the extension
  \&\fI.dwo\fR.  This option allows the build system to avoid linking files with
  debug information.  To be useful, this option requires a debugger capable of
  reading \fI.dwo\fR files.
! .IP "\fB\-gdwarf32\fR" 4
  .IX Item "-gdwarf32"
  .PD 0
! .IP "\fB\-gdwarf64\fR" 4
  .IX Item "-gdwarf64"
  .PD
! If \s-1DWARF\s0 debugging information is enabled, the \fB\-gdwarf32\fR selects
! the 32\-bit \s-1DWARF\s0 format and the \fB\-gdwarf64\fR selects the 64\-bit
! \&\s-1DWARF\s0 format.  The default is target specific, on most targets it is
! \&\fB\-gdwarf32\fR though.  The 32\-bit \s-1DWARF\s0 format is smaller, but
! can't support more than 2GiB of debug information in any of the \s-1DWARF\s0
! debug information sections.  The 64\-bit \s-1DWARF\s0 format allows larger debug
  information and might not be well supported by all consumers yet.
! .IP "\fB\-gdescribe\-dies\fR" 4
  .IX Item "-gdescribe-dies"
! Add description attributes to some \s-1DWARF\s0 DIEs that have no name attribute,
  such as artificial variables, external references and call site
  parameter DIEs.
! .IP "\fB\-gpubnames\fR" 4
  .IX Item "-gpubnames"
! Generate \s-1DWARF\s0 \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections.
! .IP "\fB\-ggnu\-pubnames\fR" 4
  .IX Item "-ggnu-pubnames"
  Generate \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections in a format
! suitable for conversion into a \s-1GDB\s0 index.  This option is only useful
! with a linker that can produce \s-1GDB\s0 index version 7.
! .IP "\fB\-fdebug\-types\-section\fR" 4
  .IX Item "-fdebug-types-section"
! When using \s-1DWARF\s0 Version 4 or higher, type DIEs can be put into
  their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
  \&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
  comdat section since the linker can then remove duplicates.
! But not all \s-1DWARF\s0 consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
  and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
  debugging information.
! .IP "\fB\-grecord\-gcc\-switches\fR" 4
  .IX Item "-grecord-gcc-switches"
  .PD 0
! .IP "\fB\-gno\-record\-gcc\-switches\fR" 4
  .IX Item "-gno-record-gcc-switches"
  .PD
! This switch causes the command-line options used to invoke the
  compiler that may affect code generation to be appended to the
! DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
  are concatenated with spaces separating them from each other and from
  the compiler version.  
  It is enabled by default.
  See also \fB\-frecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP "\fB\-gstrict\-dwarf\fR" 4
  .IX Item "-gstrict-dwarf"
! Disallow using extensions of later \s-1DWARF\s0 standard version than selected
! with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
! \&\s-1DWARF\s0 extensions from later standard versions is allowed.
! .IP "\fB\-gno\-strict\-dwarf\fR" 4
  .IX Item "-gno-strict-dwarf"
! Allow using extensions of later \s-1DWARF\s0 standard version than selected with
  \&\fB\-gdwarf\-\fR\fIversion\fR.
! .IP "\fB\-gas\-loc\-support\fR" 4
  .IX Item "-gas-loc-support"
  Inform the compiler that the assembler supports \f(CW\*(C`.loc\*(C'\fR directives.
! It may then use them for the assembler to generate \s-1DWARF2+\s0 line number
  tables.
  .Sp
! This is generally desirable, because assembler-generated line-number
  tables are a lot more compact than those the compiler can generate
  itself.
  .Sp
! This option will be enabled by default if, at \s-1GCC\s0 configure time, the
  assembler was found to support such directives.
! .IP "\fB\-gno\-as\-loc\-support\fR" 4
  .IX Item "-gno-as-loc-support"
! Force \s-1GCC\s0 to generate \s-1DWARF2+\s0 line number tables internally, if \s-1DWARF2+\s0
  line number tables are to be generated.
! .IP "\fB\-gas\-locview\-support\fR" 4
  .IX Item "-gas-locview-support"
  Inform the compiler that the assembler supports \f(CW\*(C`view\*(C'\fR assignment
  and reset assertion checking in \f(CW\*(C`.loc\*(C'\fR directives.
  .Sp
! This option will be enabled by default if, at \s-1GCC\s0 configure time, the
  assembler was found to support them.
! .IP "\fB\-gno\-as\-locview\-support\fR" 4
  .IX Item "-gno-as-locview-support"
! Force \s-1GCC\s0 to assign view numbers internally, if
  \&\fB\-gvariable\-location\-views\fR are explicitly requested.
! .IP "\fB\-gcolumn\-info\fR" 4
  .IX Item "-gcolumn-info"
  .PD 0
! .IP "\fB\-gno\-column\-info\fR" 4
  .IX Item "-gno-column-info"
  .PD
! Emit location column information into \s-1DWARF\s0 debugging information, rather
  than just file and line.
  This option is enabled by default.
! .IP "\fB\-gstatement\-frontiers\fR" 4
  .IX Item "-gstatement-frontiers"
  .PD 0
! .IP "\fB\-gno\-statement\-frontiers\fR" 4
  .IX Item "-gno-statement-frontiers"
  .PD
! This option causes \s-1GCC\s0 to create markers in the internal representation
  at the beginning of statements, and to keep them roughly in place
  throughout compilation, using them to guide the output of \f(CW\*(C`is_stmt\*(C'\fR
  markers in the line number table.  This is enabled by default when
  compiling with optimization (\fB\-Os\fR, \fB\-O1\fR, \fB\-O2\fR,
! \&...), and outputting \s-1DWARF 2\s0 debug information at the normal level.
! .IP "\fB\-gvariable\-location\-views\fR" 4
  .IX Item "-gvariable-location-views"
  .PD 0
! .IP "\fB\-gvariable\-location\-views=incompat5\fR" 4
  .IX Item "-gvariable-location-views=incompat5"
! .IP "\fB\-gno\-variable\-location\-views\fR" 4
  .IX Item "-gno-variable-location-views"
  .PD
  Augment variable location lists with progressive view numbers implied
--- 11228,11363 ----
  It is enabled by default when compiling with optimization (\fB\-Os\fR,
  \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
  the debug info format supports it.
! .IP \fB\-fvar\-tracking\-assignments\fR 4
  .IX Item "-fvar-tracking-assignments"
  Annotate assignments to user variables early in the compilation and
  attempt to carry the annotations over throughout the compilation all the
  way to the end, in an attempt to improve debug information while
  optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
  .Sp
! It can be enabled even if var\-tracking is disabled, in which case
  annotations are created and maintained, but discarded at the end.
  By default, this flag is enabled together with \fB\-fvar\-tracking\fR,
  except when selective scheduling is enabled.
! .IP \fB\-gsplit\-dwarf\fR 4
  .IX Item "-gsplit-dwarf"
! If DWARF debugging information is enabled, separate as much debugging
  information as possible into a separate output file with the extension
  \&\fI.dwo\fR.  This option allows the build system to avoid linking files with
  debug information.  To be useful, this option requires a debugger capable of
  reading \fI.dwo\fR files.
! .IP \fB\-gdwarf32\fR 4
  .IX Item "-gdwarf32"
  .PD 0
! .IP \fB\-gdwarf64\fR 4
  .IX Item "-gdwarf64"
  .PD
! If DWARF debugging information is enabled, the \fB\-gdwarf32\fR selects
! the 32\-bit DWARF format and the \fB\-gdwarf64\fR selects the 64\-bit
! DWARF format.  The default is target specific, on most targets it is
! \&\fB\-gdwarf32\fR though.  The 32\-bit DWARF format is smaller, but
! can\*(Aqt support more than 2GiB of debug information in any of the DWARF
! debug information sections.  The 64\-bit DWARF format allows larger debug
  information and might not be well supported by all consumers yet.
! .IP \fB\-gdescribe\-dies\fR 4
  .IX Item "-gdescribe-dies"
! Add description attributes to some DWARF DIEs that have no name attribute,
  such as artificial variables, external references and call site
  parameter DIEs.
! .IP \fB\-gpubnames\fR 4
  .IX Item "-gpubnames"
! Generate DWARF \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections.
! .IP \fB\-ggnu\-pubnames\fR 4
  .IX Item "-ggnu-pubnames"
  Generate \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections in a format
! suitable for conversion into a GDB index.  This option is only useful
! with a linker that can produce GDB index version 7.
! .IP \fB\-fdebug\-types\-section\fR 4
  .IX Item "-fdebug-types-section"
! When using DWARF Version 4 or higher, type DIEs can be put into
  their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
  \&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
  comdat section since the linker can then remove duplicates.
! But not all DWARF consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
  and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
  debugging information.
! .IP \fB\-grecord\-gcc\-switches\fR 4
  .IX Item "-grecord-gcc-switches"
  .PD 0
! .IP \fB\-gno\-record\-gcc\-switches\fR 4
  .IX Item "-gno-record-gcc-switches"
  .PD
! This switch causes the command\-line options used to invoke the
  compiler that may affect code generation to be appended to the
! DW_AT_producer attribute in DWARF debugging information.  The options
  are concatenated with spaces separating them from each other and from
  the compiler version.  
  It is enabled by default.
  See also \fB\-frecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP \fB\-gstrict\-dwarf\fR 4
  .IX Item "-gstrict-dwarf"
! Disallow using extensions of later DWARF standard version than selected
! with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non\-conflicting
! DWARF extensions from later standard versions is allowed.
! .IP \fB\-gno\-strict\-dwarf\fR 4
  .IX Item "-gno-strict-dwarf"
! Allow using extensions of later DWARF standard version than selected with
  \&\fB\-gdwarf\-\fR\fIversion\fR.
! .IP \fB\-gas\-loc\-support\fR 4
  .IX Item "-gas-loc-support"
  Inform the compiler that the assembler supports \f(CW\*(C`.loc\*(C'\fR directives.
! It may then use them for the assembler to generate DWARF2+ line number
  tables.
  .Sp
! This is generally desirable, because assembler\-generated line\-number
  tables are a lot more compact than those the compiler can generate
  itself.
  .Sp
! This option will be enabled by default if, at GCC configure time, the
  assembler was found to support such directives.
! .IP \fB\-gno\-as\-loc\-support\fR 4
  .IX Item "-gno-as-loc-support"
! Force GCC to generate DWARF2+ line number tables internally, if DWARF2+
  line number tables are to be generated.
! .IP \fB\-gas\-locview\-support\fR 4
  .IX Item "-gas-locview-support"
  Inform the compiler that the assembler supports \f(CW\*(C`view\*(C'\fR assignment
  and reset assertion checking in \f(CW\*(C`.loc\*(C'\fR directives.
  .Sp
! This option will be enabled by default if, at GCC configure time, the
  assembler was found to support them.
! .IP \fB\-gno\-as\-locview\-support\fR 4
  .IX Item "-gno-as-locview-support"
! Force GCC to assign view numbers internally, if
  \&\fB\-gvariable\-location\-views\fR are explicitly requested.
! .IP \fB\-gcolumn\-info\fR 4
  .IX Item "-gcolumn-info"
  .PD 0
! .IP \fB\-gno\-column\-info\fR 4
  .IX Item "-gno-column-info"
  .PD
! Emit location column information into DWARF debugging information, rather
  than just file and line.
  This option is enabled by default.
! .IP \fB\-gstatement\-frontiers\fR 4
  .IX Item "-gstatement-frontiers"
  .PD 0
! .IP \fB\-gno\-statement\-frontiers\fR 4
  .IX Item "-gno-statement-frontiers"
  .PD
! This option causes GCC to create markers in the internal representation
  at the beginning of statements, and to keep them roughly in place
  throughout compilation, using them to guide the output of \f(CW\*(C`is_stmt\*(C'\fR
  markers in the line number table.  This is enabled by default when
  compiling with optimization (\fB\-Os\fR, \fB\-O1\fR, \fB\-O2\fR,
! \&...), and outputting DWARF 2 debug information at the normal level.
! .IP \fB\-gvariable\-location\-views\fR 4
  .IX Item "-gvariable-location-views"
  .PD 0
! .IP \fB\-gvariable\-location\-views=incompat5\fR 4
  .IX Item "-gvariable-location-views=incompat5"
! .IP \fB\-gno\-variable\-location\-views\fR 4
  .IX Item "-gno-variable-location-views"
  .PD
  Augment variable location lists with progressive view numbers implied
*************** associated with the corresponding source
*** 11434,11498 ****
  point.  If the assembler lacks support for view numbers in line number
  tables, this will cause the compiler to emit the line number table,
  which generally makes them somewhat less compact.  The augmented line
! number tables and location lists are fully backward-compatible, so they
  can be consumed by debug information consumers that are not aware of
! these augmentations, but they won't derive any benefit from them either.
  .Sp
! This is enabled by default when outputting \s-1DWARF 2\s0 debug information at
  the normal level, as long as there is assembler support,
  \&\fB\-fvar\-tracking\-assignments\fR is enabled and
  \&\fB\-gstrict\-dwarf\fR is not.  When assembler support is not
! available, this may still be enabled, but it will force \s-1GCC\s0 to output
  internal line number tables, and if
  \&\fB\-ginternal\-reset\-location\-views\fR is not enabled, that will most
  certainly lead to silently mismatching location views.
  .Sp
  There is a proposed representation for view numbers that is not backward
! compatible with the location list format introduced in \s-1DWARF 5,\s0 that can
  be enabled with \fB\-gvariable\-location\-views=incompat5\fR.  This
  option may be removed in the future, is only provided as a reference
  implementation of the proposed representation.  Debug information
  consumers are not expected to support this extended format, and they
  would be rendered unable to decode location lists using it.
! .IP "\fB\-ginternal\-reset\-location\-views\fR" 4
  .IX Item "-ginternal-reset-location-views"
  .PD 0
! .IP "\fB\-gno\-internal\-reset\-location\-views\fR" 4
  .IX Item "-gno-internal-reset-location-views"
  .PD
  Attempt to determine location views that can be omitted from location
  view lists.  This requires the compiler to have very accurate insn
! length estimates, which isn't always the case, and it may cause
  incorrect view lists to be generated silently when using an assembler
! that does not support location view lists.  The \s-1GNU\s0 assembler will flag
  any such error as a \f(CW\*(C`view number mismatch\*(C'\fR.  This is only enabled
  on ports that define a reliable estimation function.
! .IP "\fB\-ginline\-points\fR" 4
  .IX Item "-ginline-points"
  .PD 0
! .IP "\fB\-gno\-inline\-points\fR" 4
  .IX Item "-gno-inline-points"
  .PD
  Generate extended debug information for inlined functions.  Location
  view tracking markers are inserted at inlined entry points, so that
  address and view numbers can be computed and output in debug
  information.  This can be enabled independently of location views, in
! which case the view numbers won't be output, but it can only be enabled
  along with statement frontiers, and it is only enabled by default if
  location views are enabled.
! .IP "\fB\-gz\fR[\fB=\fR\fItype\fR]" 4
  .IX Item "-gz[=type]"
! Produce compressed debug sections in \s-1DWARF\s0 format, if that is supported.
  If \fItype\fR is not given, the default type depends on the capabilities
  of the assembler and linker used.  \fItype\fR may be one of
! \&\fBnone\fR (don't compress debug sections), or \fBzlib\fR (use zlib
! compression in \s-1ELF\s0 gABI format).  If the linker doesn't support writing
  compressed debug sections, the option is rejected.  Otherwise, if the
  assembler does not support them, \fB\-gz\fR is silently ignored when
  producing object files.
! .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
  .IX Item "-femit-struct-debug-baseonly"
! Emit debug information for struct-like types
  only when the base name of the compilation source file
  matches the base name of file in which the struct is defined.
  .Sp
--- 11367,11431 ----
  point.  If the assembler lacks support for view numbers in line number
  tables, this will cause the compiler to emit the line number table,
  which generally makes them somewhat less compact.  The augmented line
! number tables and location lists are fully backward\-compatible, so they
  can be consumed by debug information consumers that are not aware of
! these augmentations, but they won\*(Aqt derive any benefit from them either.
  .Sp
! This is enabled by default when outputting DWARF 2 debug information at
  the normal level, as long as there is assembler support,
  \&\fB\-fvar\-tracking\-assignments\fR is enabled and
  \&\fB\-gstrict\-dwarf\fR is not.  When assembler support is not
! available, this may still be enabled, but it will force GCC to output
  internal line number tables, and if
  \&\fB\-ginternal\-reset\-location\-views\fR is not enabled, that will most
  certainly lead to silently mismatching location views.
  .Sp
  There is a proposed representation for view numbers that is not backward
! compatible with the location list format introduced in DWARF 5, that can
  be enabled with \fB\-gvariable\-location\-views=incompat5\fR.  This
  option may be removed in the future, is only provided as a reference
  implementation of the proposed representation.  Debug information
  consumers are not expected to support this extended format, and they
  would be rendered unable to decode location lists using it.
! .IP \fB\-ginternal\-reset\-location\-views\fR 4
  .IX Item "-ginternal-reset-location-views"
  .PD 0
! .IP \fB\-gno\-internal\-reset\-location\-views\fR 4
  .IX Item "-gno-internal-reset-location-views"
  .PD
  Attempt to determine location views that can be omitted from location
  view lists.  This requires the compiler to have very accurate insn
! length estimates, which isn\*(Aqt always the case, and it may cause
  incorrect view lists to be generated silently when using an assembler
! that does not support location view lists.  The GNU assembler will flag
  any such error as a \f(CW\*(C`view number mismatch\*(C'\fR.  This is only enabled
  on ports that define a reliable estimation function.
! .IP \fB\-ginline\-points\fR 4
  .IX Item "-ginline-points"
  .PD 0
! .IP \fB\-gno\-inline\-points\fR 4
  .IX Item "-gno-inline-points"
  .PD
  Generate extended debug information for inlined functions.  Location
  view tracking markers are inserted at inlined entry points, so that
  address and view numbers can be computed and output in debug
  information.  This can be enabled independently of location views, in
! which case the view numbers won\*(Aqt be output, but it can only be enabled
  along with statement frontiers, and it is only enabled by default if
  location views are enabled.
! .IP \fB\-gz\fR[\fB=\fR\fItype\fR] 4
  .IX Item "-gz[=type]"
! Produce compressed debug sections in DWARF format, if that is supported.
  If \fItype\fR is not given, the default type depends on the capabilities
  of the assembler and linker used.  \fItype\fR may be one of
! \&\fBnone\fR (don\*(Aqt compress debug sections), or \fBzlib\fR (use zlib
! compression in ELF gABI format).  If the linker doesn\*(Aqt support writing
  compressed debug sections, the option is rejected.  Otherwise, if the
  assembler does not support them, \fB\-gz\fR is silently ignored when
  producing object files.
! .IP \fB\-femit\-struct\-debug\-baseonly\fR 4
  .IX Item "-femit-struct-debug-baseonly"
! Emit debug information for struct\-like types
  only when the base name of the compilation source file
  matches the base name of file in which the struct is defined.
  .Sp
*************** but at significant potential loss in typ
*** 11501,11510 ****
  See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with \s-1DWARF\s0 debug output.
! .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
  .IX Item "-femit-struct-debug-reduced"
! Emit debug information for struct-like types
  only when the base name of the compilation source file
  matches the base name of file in which the type is defined,
  unless the struct is a template or defined in a system header.
--- 11434,11443 ----
  See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with DWARF debug output.
! .IP \fB\-femit\-struct\-debug\-reduced\fR 4
  .IX Item "-femit-struct-debug-reduced"
! Emit debug information for struct\-like types
  only when the base name of the compilation source file
  matches the base name of file in which the type is defined,
  unless the struct is a template or defined in a system header.
*************** with some potential loss in type informa
*** 11514,11523 ****
  See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with \s-1DWARF\s0 debug output.
! .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
  .IX Item "-femit-struct-debug-detailed[=spec-list]"
! Specify the struct-like types
  for which the compiler generates debug information.
  The intent is to reduce duplicate struct debug information
  between different object files within the same program.
--- 11447,11456 ----
  See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with DWARF debug output.
! .IP \fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR] 4
  .IX Item "-femit-struct-debug-detailed[=spec-list]"
! Specify the struct\-like types
  for which the compiler generates debug information.
  The intent is to reduce duplicate struct debug information
  between different object files within the same program.
*************** An example is
*** 11539,11546 ****
  The optional second word limits the specification to
  ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
  Generic structs are a bit complicated to explain.
! For \*(C+, these are non-explicit specializations of template classes,
! or non-template classes within the above.
  Other programming languages have generics,
  but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
  .Sp
--- 11472,11479 ----
  The optional second word limits the specification to
  ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
  Generic structs are a bit complicated to explain.
! For C++, these are non\-explicit specializations of template classes,
! or non\-template classes within the above.
  Other programming languages have generics,
  but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
  .Sp
*************** You may need to experiment to determine
*** 11560,11575 ****
  .Sp
  The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
  .Sp
! This option works only with \s-1DWARF\s0 debug output.
! .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
  .IX Item "-fno-dwarf2-cfi-asm"
! Emit \s-1DWARF\s0 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
! instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
! .IP "\fB\-fno\-eliminate\-unused\-debug\-types\fR" 4
  .IX Item "-fno-eliminate-unused-debug-types"
! Normally, when producing \s-1DWARF\s0 output, \s-1GCC\s0 avoids producing debug symbol 
  output for types that are nowhere used in the source file being compiled.
! Sometimes it is useful to have \s-1GCC\s0 emit debugging
  information for all types declared in a compilation
  unit, regardless of whether or not they are actually used
  in that compilation unit, for example 
--- 11493,11508 ----
  .Sp
  The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
  .Sp
! This option works only with DWARF debug output.
! .IP \fB\-fno\-dwarf2\-cfi\-asm\fR 4
  .IX Item "-fno-dwarf2-cfi-asm"
! Emit DWARF unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
! instead of using GAS \f(CW\*(C`.cfi_*\*(C'\fR directives.
! .IP \fB\-fno\-eliminate\-unused\-debug\-types\fR 4
  .IX Item "-fno-eliminate-unused-debug-types"
! Normally, when producing DWARF output, GCC avoids producing debug symbol 
  output for types that are nowhere used in the source file being compiled.
! Sometimes it is useful to have GCC emit debugging
  information for all types declared in a compilation
  unit, regardless of whether or not they are actually used
  in that compilation unit, for example 
*************** however, this results in a significant a
*** 11580,11586 ****
  .IX Subsection "Options That Control Optimization"
  These options control various sorts of optimizations.
  .PP
! Without any optimization option, the compiler's goal is to reduce the
  cost of compilation and to make debugging produce the expected
  results.  Statements are independent: if you stop the program with a
  breakpoint between statements, you can then assign a new value to any
--- 11513,11519 ----
  .IX Subsection "Options That Control Optimization"
  These options control various sorts of optimizations.
  .PP
! Without any optimization option, the compiler\*(Aqs goal is to reduce the
  cost of compilation and to make debugging produce the expected
  results.  Statements are independent: if you stop the program with a
  breakpoint between statements, you can then assign a new value to any
*************** Most optimizations are completely disabl
*** 11605,11618 ****
  optimization flags are specified.  Similarly, \fB\-Og\fR suppresses
  many optimization passes.
  .PP
! Depending on the target and how \s-1GCC\s0 was configured, a slightly different
  set of optimizations may be enabled at each \fB\-O\fR level than
! those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
  to find out the exact set of optimizations that are enabled at each level.
! .IP "\fB\-O\fR" 4
  .IX Item "-O"
  .PD 0
! .IP "\fB\-O1\fR" 4
  .IX Item "-O1"
  .PD
  Optimize.  Optimizing compilation takes somewhat more time, and a lot
--- 11538,11551 ----
  optimization flags are specified.  Similarly, \fB\-Og\fR suppresses
  many optimization passes.
  .PP
! Depending on the target and how GCC was configured, a slightly different
  set of optimizations may be enabled at each \fB\-O\fR level than
! those listed here.  You can invoke GCC with \fB\-Q \-\-help=optimizers\fR
  to find out the exact set of optimizations that are enabled at each level.
! .IP \fB\-O\fR 4
  .IX Item "-O"
  .PD 0
! .IP \fB\-O1\fR 4
  .IX Item "-O1"
  .PD
  Optimize.  Optimizing compilation takes somewhat more time, and a lot
*************** compilation time.
*** 11671,11680 ****
  \&\-ftree\-sra
  \&\-ftree\-ter
  \&\-funit\-at\-a\-time\fR
! .IP "\fB\-O2\fR" 4
  .IX Item "-O2"
! Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
! that do not involve a space-speed tradeoff.
  As compared to \fB\-O\fR, this option increases both compilation time
  and the performance of the generated code.
  .Sp
--- 11604,11613 ----
  \&\-ftree\-sra
  \&\-ftree\-ter
  \&\-funit\-at\-a\-time\fR
! .IP \fB\-O2\fR 4
  .IX Item "-O2"
! Optimize even more.  GCC performs nearly all supported optimizations
! that do not involve a space\-speed tradeoff.
  As compared to \fB\-O\fR, this option increases both compilation time
  and the performance of the generated code.
  .Sp
*************** also turns on the following optimization
*** 11722,11728 ****
  .Sp
  Please note the warning under \fB\-fgcse\fR about
  invoking \fB\-O2\fR on programs that use computed gotos.
! .IP "\fB\-O3\fR" 4
  .IX Item "-O3"
  Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
  by \fB\-O2\fR and also turns on the following optimization flags:
--- 11655,11661 ----
  .Sp
  Please note the warning under \fB\-fgcse\fR about
  invoking \fB\-O2\fR on programs that use computed gotos.
! .IP \fB\-O3\fR 4
  .IX Item "-O3"
  Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
  by \fB\-O2\fR and also turns on the following optimization flags:
*************** by \fB\-O2\fR and also turns on the foll
*** 11740,11750 ****
  \&\-funswitch\-loops
  \&\-fvect\-cost\-model=dynamic
  \&\-fversion\-loops\-for\-strides\fR
! .IP "\fB\-O0\fR" 4
  .IX Item "-O0"
  Reduce compilation time and make debugging produce the expected
  results.  This is the default.
! .IP "\fB\-Os\fR" 4
  .IX Item "-Os"
  Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations 
  except those that often increase code size:
--- 11673,11683 ----
  \&\-funswitch\-loops
  \&\-fvect\-cost\-model=dynamic
  \&\-fversion\-loops\-for\-strides\fR
! .IP \fB\-O0\fR 4
  .IX Item "-O0"
  Reduce compilation time and make debugging produce the expected
  results.  This is the default.
! .IP \fB\-Os\fR 4
  .IX Item "-Os"
  Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations 
  except those that often increase code size:
*************** except those that often increase code si
*** 11756,11774 ****
  It also enables \fB\-finline\-functions\fR, causes the compiler to tune for
  code size rather than execution speed, and performs further optimizations
  designed to reduce code size.
! .IP "\fB\-Ofast\fR" 4
  .IX Item "-Ofast"
  Disregard strict standards compliance.  \fB\-Ofast\fR enables all
  \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
! valid for all standard-compliant programs.
  It turns on \fB\-ffast\-math\fR, \fB\-fallow\-store\-data\-races\fR
! and the Fortran-specific \fB\-fstack\-arrays\fR, unless
  \&\fB\-fmax\-stack\-var\-size\fR is specified, and \fB\-fno\-protect\-parens\fR.
  It turns off \fB\-fsemantic\-interposition\fR.
! .IP "\fB\-Og\fR" 4
  .IX Item "-Og"
  Optimize debugging experience.  \fB\-Og\fR should be the optimization
! level of choice for the standard edit-compile-debug cycle, offering
  a reasonable level of optimization while maintaining fast compilation
  and a good debugging experience.  It is a better choice than \fB\-O0\fR
  for producing debuggable code because some compiler passes
--- 11689,11707 ----
  It also enables \fB\-finline\-functions\fR, causes the compiler to tune for
  code size rather than execution speed, and performs further optimizations
  designed to reduce code size.
! .IP \fB\-Ofast\fR 4
  .IX Item "-Ofast"
  Disregard strict standards compliance.  \fB\-Ofast\fR enables all
  \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
! valid for all standard\-compliant programs.
  It turns on \fB\-ffast\-math\fR, \fB\-fallow\-store\-data\-races\fR
! and the Fortran\-specific \fB\-fstack\-arrays\fR, unless
  \&\fB\-fmax\-stack\-var\-size\fR is specified, and \fB\-fno\-protect\-parens\fR.
  It turns off \fB\-fsemantic\-interposition\fR.
! .IP \fB\-Og\fR 4
  .IX Item "-Og"
  Optimize debugging experience.  \fB\-Og\fR should be the optimization
! level of choice for the standard edit\-compile\-debug cycle, offering
  a reasonable level of optimization while maintaining fast compilation
  and a good debugging experience.  It is a better choice than \fB\-O0\fR
  for producing debuggable code because some compiler passes
*************** optimization flags except for those that
*** 11784,11790 ****
  \&\-finline\-functions\-called\-once
  \&\-fmove\-loop\-invariants  \-fmove\-loop\-stores  \-fssa\-phiopt
  \&\-ftree\-bit\-ccp  \-ftree\-dse  \-ftree\-pta  \-ftree\-sra\fR
! .IP "\fB\-Oz\fR" 4
  .IX Item "-Oz"
  Optimize aggressively for size rather than speed.  This may increase
  the number of instructions executed if those instructions require
--- 11717,11723 ----
  \&\-finline\-functions\-called\-once
  \&\-fmove\-loop\-invariants  \-fmove\-loop\-stores  \-fssa\-phiopt
  \&\-ftree\-bit\-ccp  \-ftree\-dse  \-ftree\-pta  \-ftree\-sra\fR
! .IP \fB\-Oz\fR 4
  .IX Item "-Oz"
  Optimize aggressively for size rather than speed.  This may increase
  the number of instructions executed if those instructions require
*************** including enabling most \fB\-O2\fR optim
*** 11794,11800 ****
  If you use multiple \fB\-O\fR options, with or without level numbers,
  the last such option is the one that is effective.
  .PP
! Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
  flags.  Most flags have both positive and negative forms; the negative
  form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
  below, only one of the forms is listed\-\-\-the one you typically 
--- 11727,11733 ----
  If you use multiple \fB\-O\fR options, with or without level numbers,
  the last such option is the one that is effective.
  .PP
! Options of the form \fB\-f\fR\fIflag\fR specify machine\-independent
  flags.  Most flags have both positive and negative forms; the negative
  form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
  below, only one of the forms is listed\-\-\-the one you typically 
*************** or adding it.
*** 11803,11866 ****
  .PP
  The following options control specific optimizations.  They are either
  activated by \fB\-O\fR options or are related to ones that are.  You
! can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
  optimizations to be performed is desired.
! .IP "\fB\-fno\-defer\-pop\fR" 4
  .IX Item "-fno-defer-pop"
  For machines that must pop arguments after a function call, always pop 
  the arguments as soon as each function returns.  
  At levels \fB\-O1\fR and higher, \fB\-fdefer\-pop\fR is the default;
  this allows the compiler to let arguments accumulate on the stack for several
  function calls and pop them all at once.
! .IP "\fB\-fforward\-propagate\fR" 4
  .IX Item "-fforward-propagate"
! Perform a forward propagation pass on \s-1RTL.\s0  The pass tries to combine two
  instructions and checks if the result can be simplified.  If loop unrolling
  is active, two passes are performed and the second is scheduled after
  loop unrolling.
  .Sp
  This option is enabled by default at optimization levels \fB\-O1\fR,
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
  .IX Item "-ffp-contract=style"
! \&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
! \&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
! such as forming of fused multiply-add operations if the target has
  native support for them.
! \&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
! if allowed by the language standard.  This is implemented for C and \*(C+,
  where it enables contraction within one expression, but not across
  different statements.
  .Sp
  The default is \fB\-ffp\-contract=off\fR for C in a standards compliant mode
  (\fB\-std=c11\fR or similar), \fB\-ffp\-contract=fast\fR otherwise.
! .IP "\fB\-fomit\-frame\-pointer\fR" 4
  .IX Item "-fomit-frame-pointer"
! Omit the frame pointer in functions that don't need one.  This avoids the
  instructions to save, set up and restore the frame pointer; on many targets
  it also makes an extra register available.
  .Sp
  On some targets this flag has no effect because the standard calling sequence
  always uses a frame pointer, so it cannot be omitted.
  .Sp
! Note that \fB\-fno\-omit\-frame\-pointer\fR doesn't guarantee the frame pointer
  is used in all functions.  Several targets always omit the frame pointer in
  leaf functions.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-foptimize\-sibling\-calls\fR" 4
  .IX Item "-foptimize-sibling-calls"
  Optimize sibling and tail recursive calls.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-foptimize\-strlen\fR" 4
  .IX Item "-foptimize-strlen"
  Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
  \&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
  their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-finline\-stringops[=\fR\fIfn\fR\fB]\fR" 4
  .IX Item "-finline-stringops[=fn]"
  Expand memory and string operations (for now, only \f(CW\*(C`memset\*(C'\fR)
  inline, even when the length is variable or big enough as to require
--- 11736,11799 ----
  .PP
  The following options control specific optimizations.  They are either
  activated by \fB\-O\fR options or are related to ones that are.  You
! can use the following flags in the rare cases when "fine\-tuning" of
  optimizations to be performed is desired.
! .IP \fB\-fno\-defer\-pop\fR 4
  .IX Item "-fno-defer-pop"
  For machines that must pop arguments after a function call, always pop 
  the arguments as soon as each function returns.  
  At levels \fB\-O1\fR and higher, \fB\-fdefer\-pop\fR is the default;
  this allows the compiler to let arguments accumulate on the stack for several
  function calls and pop them all at once.
! .IP \fB\-fforward\-propagate\fR 4
  .IX Item "-fforward-propagate"
! Perform a forward propagation pass on RTL.  The pass tries to combine two
  instructions and checks if the result can be simplified.  If loop unrolling
  is active, two passes are performed and the second is scheduled after
  loop unrolling.
  .Sp
  This option is enabled by default at optimization levels \fB\-O1\fR,
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-ffp\-contract=\fR\fIstyle\fR 4
  .IX Item "-ffp-contract=style"
! \&\fB\-ffp\-contract=off\fR disables floating\-point expression contraction.
! \&\fB\-ffp\-contract=fast\fR enables floating\-point expression contraction
! such as forming of fused multiply\-add operations if the target has
  native support for them.
! \&\fB\-ffp\-contract=on\fR enables floating\-point expression contraction
! if allowed by the language standard.  This is implemented for C and C++,
  where it enables contraction within one expression, but not across
  different statements.
  .Sp
  The default is \fB\-ffp\-contract=off\fR for C in a standards compliant mode
  (\fB\-std=c11\fR or similar), \fB\-ffp\-contract=fast\fR otherwise.
! .IP \fB\-fomit\-frame\-pointer\fR 4
  .IX Item "-fomit-frame-pointer"
! Omit the frame pointer in functions that don\*(Aqt need one.  This avoids the
  instructions to save, set up and restore the frame pointer; on many targets
  it also makes an extra register available.
  .Sp
  On some targets this flag has no effect because the standard calling sequence
  always uses a frame pointer, so it cannot be omitted.
  .Sp
! Note that \fB\-fno\-omit\-frame\-pointer\fR doesn\*(Aqt guarantee the frame pointer
  is used in all functions.  Several targets always omit the frame pointer in
  leaf functions.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-foptimize\-sibling\-calls\fR 4
  .IX Item "-foptimize-sibling-calls"
  Optimize sibling and tail recursive calls.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-foptimize\-strlen\fR 4
  .IX Item "-foptimize-strlen"
  Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
  \&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
  their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-finline\-stringops[=\fR\fIfn\fR\fB]\fR 4
  .IX Item "-finline-stringops[=fn]"
  Expand memory and string operations (for now, only \f(CW\*(C`memset\*(C'\fR)
  inline, even when the length is variable or big enough as to require
*************** it may be less efficient than optimized
*** 11873,11879 ****
  grow code size so much that even a less performant but shared
  implementation runs faster due to better use of code caches.  This
  option is disabled by default.
! .IP "\fB\-fno\-inline\fR" 4
  .IX Item "-fno-inline"
  Do not expand any functions inline apart from those marked with
  the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
--- 11806,11812 ----
  grow code size so much that even a less performant but shared
  implementation runs faster due to better use of code caches.  This
  option is disabled by default.
! .IP \fB\-fno\-inline\fR 4
  .IX Item "-fno-inline"
  Do not expand any functions inline apart from those marked with
  the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
*************** optimizing.
*** 11881,11887 ****
  .Sp
  Single functions can be exempted from inlining by marking them
  with the \f(CW\*(C`noinline\*(C'\fR attribute.
! .IP "\fB\-finline\-small\-functions\fR" 4
  .IX Item "-finline-small-functions"
  Integrate functions into their callers when their body is smaller than expected
  function call code (so overall size of program gets smaller).  The compiler
--- 11814,11820 ----
  .Sp
  Single functions can be exempted from inlining by marking them
  with the \f(CW\*(C`noinline\*(C'\fR attribute.
! .IP \fB\-finline\-small\-functions\fR 4
  .IX Item "-finline-small-functions"
  Integrate functions into their callers when their body is smaller than expected
  function call code (so overall size of program gets smaller).  The compiler
*************** in this way.  This inlining applies to a
*** 11890,11896 ****
  inline.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-findirect\-inlining\fR" 4
  .IX Item "-findirect-inlining"
  Inline also indirect calls that are discovered to be known at compile
  time thanks to previous inlining.  This option has any effect only
--- 11823,11829 ----
  inline.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-findirect\-inlining\fR 4
  .IX Item "-findirect-inlining"
  Inline also indirect calls that are discovered to be known at compile
  time thanks to previous inlining.  This option has any effect only
*************** when inlining itself is turned on by the
*** 11898,11904 ****
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-finline\-functions\fR" 4
  .IX Item "-finline-functions"
  Consider all functions for inlining, even if they are not declared inline.
  The compiler heuristically decides which functions are worth integrating
--- 11831,11837 ----
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-finline\-functions\fR 4
  .IX Item "-finline-functions"
  Consider all functions for inlining, even if they are not declared inline.
  The compiler heuristically decides which functions are worth integrating
*************** assembler code in its own right.
*** 11910,11916 ****
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Also enabled
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-finline\-functions\-called\-once\fR" 4
  .IX Item "-finline-functions-called-once"
  Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
  caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
--- 11843,11849 ----
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Also enabled
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-finline\-functions\-called\-once\fR 4
  .IX Item "-finline-functions-called-once"
  Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
  caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
*************** in its own right.
*** 11919,11925 ****
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR,
  but not \fB\-Og\fR.
! .IP "\fB\-fearly\-inlining\fR" 4
  .IX Item "-fearly-inlining"
  Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
  smaller than the function call overhead early before doing
--- 11852,11858 ----
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR,
  but not \fB\-Og\fR.
! .IP \fB\-fearly\-inlining\fR 4
  .IX Item "-fearly-inlining"
  Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
  smaller than the function call overhead early before doing
*************** makes profiling significantly cheaper an
*** 11928,11943 ****
  having large chains of nested wrapper functions.
  .Sp
  Enabled by default.
! .IP "\fB\-fipa\-sra\fR" 4
  .IX Item "-fipa-sra"
  Perform interprocedural scalar replacement of aggregates, removal of
  unused parameters and replacement of parameters passed by reference
  by parameters passed by value.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
! .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
  .IX Item "-finline-limit=n"
! By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
  allows coarse control of this limit.  \fIn\fR is the size of functions that
  can be inlined in number of pseudo instructions.
  .Sp
--- 11861,11876 ----
  having large chains of nested wrapper functions.
  .Sp
  Enabled by default.
! .IP \fB\-fipa\-sra\fR 4
  .IX Item "-fipa-sra"
  Perform interprocedural scalar replacement of aggregates, removal of
  unused parameters and replacement of parameters passed by reference
  by parameters passed by value.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
! .IP \fB\-finline\-limit=\fR\fIn\fR 4
  .IX Item "-finline-limit=n"
! By default, GCC limits the size of functions that can be inlined.  This flag
  allows coarse control of this limit.  \fIn\fR is the size of functions that
  can be inlined in number of pseudo instructions.
  .Sp
*************** specified individually by using \fB\-\-p
*** 11946,11955 ****
  The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
  as follows:
  .RS 4
! .IP "\fBmax-inline-insns-single\fR" 4
  .IX Item "max-inline-insns-single"
  is set to \fIn\fR/2.
! .IP "\fBmax-inline-insns-auto\fR" 4
  .IX Item "max-inline-insns-auto"
  is set to \fIn\fR/2.
  .RE
--- 11879,11888 ----
  The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
  as follows:
  .RS 4
! .IP \fBmax\-inline\-insns\-single\fR 4
  .IX Item "max-inline-insns-single"
  is set to \fIn\fR/2.
! .IP \fBmax\-inline\-insns\-auto\fR 4
  .IX Item "max-inline-insns-auto"
  is set to \fIn\fR/2.
  .RE
*************** parameters controlling inlining and for
*** 11962,11998 ****
  in default behavior.
  .Sp
  \&\fINote:\fR pseudo instruction represents, in this particular context, an
! abstract measurement of function's size.  In no way does it represent a count
  of assembly instructions and as such its exact meaning might change from one
  release to an another.
  .RE
! .IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
  .IX Item "-fno-keep-inline-dllexport"
! This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
  which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
  attribute or declspec.
! .IP "\fB\-fkeep\-inline\-functions\fR" 4
  .IX Item "-fkeep-inline-functions"
  In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
  into the object file, even if the function has been inlined into all
  of its callers.  This switch does not affect functions using the
! \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU C90.\s0  In \*(C+, emit any and all
  inline functions into the object file.
! .IP "\fB\-fkeep\-static\-functions\fR" 4
  .IX Item "-fkeep-static-functions"
  Emit \f(CW\*(C`static\*(C'\fR functions into the object file, even if the function
  is never used.
! .IP "\fB\-fkeep\-static\-consts\fR" 4
  .IX Item "-fkeep-static-consts"
! Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
! on, even if the variables aren't referenced.
  .Sp
! \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
  check if a variable is referenced, regardless of whether or not
  optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
! .IP "\fB\-fmerge\-constants\fR" 4
  .IX Item "-fmerge-constants"
! Attempt to merge identical constants (string constants and floating-point
  constants) across compilation units.
  .Sp
  This option is the default for optimized compilation if the assembler and
--- 11895,11931 ----
  in default behavior.
  .Sp
  \&\fINote:\fR pseudo instruction represents, in this particular context, an
! abstract measurement of function\*(Aqs size.  In no way does it represent a count
  of assembly instructions and as such its exact meaning might change from one
  release to an another.
  .RE
! .IP \fB\-fno\-keep\-inline\-dllexport\fR 4
  .IX Item "-fno-keep-inline-dllexport"
! This is a more fine\-grained version of \fB\-fkeep\-inline\-functions\fR,
  which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
  attribute or declspec.
! .IP \fB\-fkeep\-inline\-functions\fR 4
  .IX Item "-fkeep-inline-functions"
  In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
  into the object file, even if the function has been inlined into all
  of its callers.  This switch does not affect functions using the
! \&\f(CW\*(C`extern inline\*(C'\fR extension in GNU C90.  In C++, emit any and all
  inline functions into the object file.
! .IP \fB\-fkeep\-static\-functions\fR 4
  .IX Item "-fkeep-static-functions"
  Emit \f(CW\*(C`static\*(C'\fR functions into the object file, even if the function
  is never used.
! .IP \fB\-fkeep\-static\-consts\fR 4
  .IX Item "-fkeep-static-consts"
! Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn\*(Aqt turned
! on, even if the variables aren\*(Aqt referenced.
  .Sp
! GCC enables this option by default.  If you want to force the compiler to
  check if a variable is referenced, regardless of whether or not
  optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
! .IP \fB\-fmerge\-constants\fR 4
  .IX Item "-fmerge-constants"
! Attempt to merge identical constants (string constants and floating\-point
  constants) across compilation units.
  .Sp
  This option is the default for optimized compilation if the assembler and
*************** linker support it.  Use \fB\-fno\-merge\
*** 12000,12055 ****
  behavior.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fmerge\-all\-constants\fR" 4
  .IX Item "-fmerge-all-constants"
  Attempt to merge identical constants and identical variables.
  .Sp
  This option implies \fB\-fmerge\-constants\fR.  In addition to
  \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
! arrays or initialized constant variables with integral or floating-point
! types.  Languages like C or \*(C+ require each variable, including multiple
  instances of the same variable in recursive calls, to have distinct locations,
! so using this option results in non-conforming
  behavior.
! .IP "\fB\-fmodulo\-sched\fR" 4
  .IX Item "-fmodulo-sched"
  Perform swing modulo scheduling immediately before the first scheduling
  pass.  This pass looks at innermost loops and reorders their
  instructions by overlapping different iterations.
! .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
  .IX Item "-fmodulo-sched-allow-regmoves"
! Perform more aggressive SMS-based modulo scheduling with register moves
! allowed.  By setting this flag certain anti-dependences edges are
! deleted, which triggers the generation of reg-moves based on the
! life-range analysis.  This option is effective only with
  \&\fB\-fmodulo\-sched\fR enabled.
! .IP "\fB\-fno\-branch\-count\-reg\fR" 4
  .IX Item "-fno-branch-count-reg"
  Disable the optimization pass that scans for opportunities to use 
! \&\*(L"decrement and branch\*(R" instructions on a count register instead of
  instruction sequences that decrement a register, compare it against zero, and
  then branch based upon the result.  This option is only meaningful on
  architectures that support such instructions, which include x86, PowerPC,
! \&\s-1IA\-64\s0 and S/390.  Note that the \fB\-fno\-branch\-count\-reg\fR option
! doesn't remove the decrement and branch instructions from the generated
  instruction stream introduced by other optimization passes.
  .Sp
  The default is \fB\-fbranch\-count\-reg\fR at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP "\fB\-fno\-function\-cse\fR" 4
  .IX Item "-fno-function-cse"
  Do not put function addresses in registers; make each instruction that
! calls a constant function contain the function's address explicitly.
  .Sp
  This option results in less efficient code, but some strange hacks
  that alter the assembler output may be confused by the optimizations
  performed when this option is not used.
  .Sp
  The default is \fB\-ffunction\-cse\fR
! .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
  .IX Item "-fno-zero-initialized-in-bss"
! If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
! are initialized to zero into \s-1BSS.\s0  This can save space in the resulting
  code.
  .Sp
  This option turns off this behavior because some programs explicitly
--- 11933,11988 ----
  behavior.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fmerge\-all\-constants\fR 4
  .IX Item "-fmerge-all-constants"
  Attempt to merge identical constants and identical variables.
  .Sp
  This option implies \fB\-fmerge\-constants\fR.  In addition to
  \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
! arrays or initialized constant variables with integral or floating\-point
! types.  Languages like C or C++ require each variable, including multiple
  instances of the same variable in recursive calls, to have distinct locations,
! so using this option results in non\-conforming
  behavior.
! .IP \fB\-fmodulo\-sched\fR 4
  .IX Item "-fmodulo-sched"
  Perform swing modulo scheduling immediately before the first scheduling
  pass.  This pass looks at innermost loops and reorders their
  instructions by overlapping different iterations.
! .IP \fB\-fmodulo\-sched\-allow\-regmoves\fR 4
  .IX Item "-fmodulo-sched-allow-regmoves"
! Perform more aggressive SMS\-based modulo scheduling with register moves
! allowed.  By setting this flag certain anti\-dependences edges are
! deleted, which triggers the generation of reg\-moves based on the
! life\-range analysis.  This option is effective only with
  \&\fB\-fmodulo\-sched\fR enabled.
! .IP \fB\-fno\-branch\-count\-reg\fR 4
  .IX Item "-fno-branch-count-reg"
  Disable the optimization pass that scans for opportunities to use 
! "decrement and branch" instructions on a count register instead of
  instruction sequences that decrement a register, compare it against zero, and
  then branch based upon the result.  This option is only meaningful on
  architectures that support such instructions, which include x86, PowerPC,
! IA\-64 and S/390.  Note that the \fB\-fno\-branch\-count\-reg\fR option
! doesn\*(Aqt remove the decrement and branch instructions from the generated
  instruction stream introduced by other optimization passes.
  .Sp
  The default is \fB\-fbranch\-count\-reg\fR at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP \fB\-fno\-function\-cse\fR 4
  .IX Item "-fno-function-cse"
  Do not put function addresses in registers; make each instruction that
! calls a constant function contain the function\*(Aqs address explicitly.
  .Sp
  This option results in less efficient code, but some strange hacks
  that alter the assembler output may be confused by the optimizations
  performed when this option is not used.
  .Sp
  The default is \fB\-ffunction\-cse\fR
! .IP \fB\-fno\-zero\-initialized\-in\-bss\fR 4
  .IX Item "-fno-zero-initialized-in-bss"
! If the target supports a BSS section, GCC by default puts variables that
! are initialized to zero into BSS.  This can save space in the resulting
  code.
  .Sp
  This option turns off this behavior because some programs explicitly
*************** resulting executable can find the beginn
*** 12058,12064 ****
  assumptions based on that.
  .Sp
  The default is \fB\-fzero\-initialized\-in\-bss\fR.
! .IP "\fB\-fthread\-jumps\fR" 4
  .IX Item "-fthread-jumps"
  Perform optimizations that check to see if a jump branches to a
  location where another comparison subsumed by the first is found.  If
--- 11991,11997 ----
  assumptions based on that.
  .Sp
  The default is \fB\-fzero\-initialized\-in\-bss\fR.
! .IP \fB\-fthread\-jumps\fR 4
  .IX Item "-fthread-jumps"
  Perform optimizations that check to see if a jump branches to a
  location where another comparison subsumed by the first is found.  If
*************** second branch or a point immediately fol
*** 12067,12073 ****
  the condition is known to be true or false.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fsplit\-wide\-types\fR" 4
  .IX Item "-fsplit-wide-types"
  When using a type that occupies multiple registers, such as \f(CW\*(C`long
  long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
--- 12000,12006 ----
  the condition is known to be true or false.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fsplit\-wide\-types\fR 4
  .IX Item "-fsplit-wide-types"
  When using a type that occupies multiple registers, such as \f(CW\*(C`long
  long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
*************** but may make debugging more difficult.
*** 12076,12123 ****
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR,
  \&\fB\-Os\fR.
! .IP "\fB\-fsplit\-wide\-types\-early\fR" 4
  .IX Item "-fsplit-wide-types-early"
  Fully split wide types early, instead of very late.
  This option has no effect unless \fB\-fsplit\-wide\-types\fR is turned on.
  .Sp
  This is the default on some targets.
! .IP "\fB\-fcse\-follow\-jumps\fR" 4
  .IX Item "-fcse-follow-jumps"
! In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
  when the target of the jump is not reached by any other path.  For
! example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
! \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 follows the jump when the condition
  tested is false.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fcse\-skip\-blocks\fR" 4
  .IX Item "-fcse-skip-blocks"
! This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
! follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
  encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
! \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
  body of the \f(CW\*(C`if\*(C'\fR.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
  .IX Item "-frerun-cse-after-loop"
! Re-run common subexpression elimination after loop optimizations are
  performed.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fgcse\fR" 4
  .IX Item "-fgcse"
  Perform a global common subexpression elimination pass.
  This pass also performs global constant and copy propagation.
  .Sp
! \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
! extension, you may get better run-time performance if you disable
  the global common subexpression elimination pass by adding
  \&\fB\-fno\-gcse\fR to the command line.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fgcse\-lm\fR" 4
  .IX Item "-fgcse-lm"
  When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
  attempts to move loads that are only killed by stores into themselves.  This
--- 12009,12056 ----
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR,
  \&\fB\-Os\fR.
! .IP \fB\-fsplit\-wide\-types\-early\fR 4
  .IX Item "-fsplit-wide-types-early"
  Fully split wide types early, instead of very late.
  This option has no effect unless \fB\-fsplit\-wide\-types\fR is turned on.
  .Sp
  This is the default on some targets.
! .IP \fB\-fcse\-follow\-jumps\fR 4
  .IX Item "-fcse-follow-jumps"
! In common subexpression elimination (CSE), scan through jump instructions
  when the target of the jump is not reached by any other path.  For
! example, when CSE encounters an \f(CW\*(C`if\*(C'\fR statement with an
! \&\f(CW\*(C`else\*(C'\fR clause, CSE follows the jump when the condition
  tested is false.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fcse\-skip\-blocks\fR 4
  .IX Item "-fcse-skip-blocks"
! This is similar to \fB\-fcse\-follow\-jumps\fR, but causes CSE to
! follow jumps that conditionally skip over blocks.  When CSE
  encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
! \&\fB\-fcse\-skip\-blocks\fR causes CSE to follow the jump around the
  body of the \f(CW\*(C`if\*(C'\fR.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-frerun\-cse\-after\-loop\fR 4
  .IX Item "-frerun-cse-after-loop"
! Re\-run common subexpression elimination after loop optimizations are
  performed.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fgcse\fR 4
  .IX Item "-fgcse"
  Perform a global common subexpression elimination pass.
  This pass also performs global constant and copy propagation.
  .Sp
! \&\fINote:\fR When compiling a program using computed gotos, a GCC
! extension, you may get better run\-time performance if you disable
  the global common subexpression elimination pass by adding
  \&\fB\-fno\-gcse\fR to the command line.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fgcse\-lm\fR 4
  .IX Item "-fgcse-lm"
  When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
  attempts to move loads that are only killed by stores into themselves.  This
*************** allows a loop containing a load/store se
*** 12125,12131 ****
  the loop, and a copy/store within the loop.
  .Sp
  Enabled by default when \fB\-fgcse\fR is enabled.
! .IP "\fB\-fgcse\-sm\fR" 4
  .IX Item "-fgcse-sm"
  When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
  global common subexpression elimination.  This pass attempts to move
--- 12058,12064 ----
  the loop, and a copy/store within the loop.
  .Sp
  Enabled by default when \fB\-fgcse\fR is enabled.
! .IP \fB\-fgcse\-sm\fR 4
  .IX Item "-fgcse-sm"
  When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
  global common subexpression elimination.  This pass attempts to move
*************** loops containing a load/store sequence c
*** 12134,12207 ****
  the loop and a store after the loop.
  .Sp
  Not enabled at any optimization level.
! .IP "\fB\-fgcse\-las\fR" 4
  .IX Item "-fgcse-las"
  When \fB\-fgcse\-las\fR is enabled, the global common subexpression
  elimination pass eliminates redundant loads that come after stores to the
  same memory location (both partial and full redundancies).
  .Sp
  Not enabled at any optimization level.
! .IP "\fB\-fgcse\-after\-reload\fR" 4
  .IX Item "-fgcse-after-reload"
  When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
  pass is performed after reload.  The purpose of this pass is to clean up
  redundant spilling.
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-faggressive\-loop\-optimizations\fR" 4
  .IX Item "-faggressive-loop-optimizations"
  This option tells the loop optimizer to use language constraints to
  derive bounds for the number of iterations of a loop.  This assumes that
  loop code does not invoke undefined behavior by for example causing signed
! integer overflows or out-of-bound array accesses.  The bounds for the
  number of iterations of a loop are used to guide loop unrolling and peeling
  and loop exit test optimizations.
  This option is enabled by default.
! .IP "\fB\-funconstrained\-commons\fR" 4
  .IX Item "-funconstrained-commons"
  This option tells the compiler that variables declared in common blocks
  (e.g. Fortran) may later be overridden with longer trailing arrays. This
  prevents certain optimizations that depend on knowing the array bounds.
! .IP "\fB\-fcrossjumping\fR" 4
  .IX Item "-fcrossjumping"
! Perform cross-jumping transformation.
  This transformation unifies equivalent code and saves code size.  The
! resulting code may or may not perform better than without cross-jumping.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fauto\-inc\-dec\fR" 4
  .IX Item "-fauto-inc-dec"
  Combine increments or decrements of addresses with memory accesses.
  This pass is always skipped on architectures that do not have
  instructions to support this.  Enabled by default at \fB\-O1\fR and
  higher on architectures that support this.
! .IP "\fB\-fdce\fR" 4
  .IX Item "-fdce"
! Perform dead code elimination (\s-1DCE\s0) on \s-1RTL.\s0
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fdse\fR" 4
  .IX Item "-fdse"
! Perform dead store elimination (\s-1DSE\s0) on \s-1RTL.\s0
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fif\-conversion\fR" 4
  .IX Item "-fif-conversion"
! Attempt to transform conditional jumps into branch-less equivalents.  This
  includes use of conditional moves, min, max, set flags and abs instructions, and
  some tricks doable by standard arithmetics.  The use of conditional execution
  on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP "\fB\-fif\-conversion2\fR" 4
  .IX Item "-fif-conversion2"
  Use conditional execution (where available) to transform conditional jumps into
! branch-less equivalents.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP "\fB\-fdeclone\-ctor\-dtor\fR" 4
  .IX Item "-fdeclone-ctor-dtor"
! The \*(C+ \s-1ABI\s0 requires multiple entry points for constructors and
  destructors: one for a base subobject, one for a complete object, and
  one for a virtual destructor that calls operator delete afterwards.
  For a hierarchy with virtual bases, the base and complete variants are
--- 12067,12140 ----
  the loop and a store after the loop.
  .Sp
  Not enabled at any optimization level.
! .IP \fB\-fgcse\-las\fR 4
  .IX Item "-fgcse-las"
  When \fB\-fgcse\-las\fR is enabled, the global common subexpression
  elimination pass eliminates redundant loads that come after stores to the
  same memory location (both partial and full redundancies).
  .Sp
  Not enabled at any optimization level.
! .IP \fB\-fgcse\-after\-reload\fR 4
  .IX Item "-fgcse-after-reload"
  When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
  pass is performed after reload.  The purpose of this pass is to clean up
  redundant spilling.
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-faggressive\-loop\-optimizations\fR 4
  .IX Item "-faggressive-loop-optimizations"
  This option tells the loop optimizer to use language constraints to
  derive bounds for the number of iterations of a loop.  This assumes that
  loop code does not invoke undefined behavior by for example causing signed
! integer overflows or out\-of\-bound array accesses.  The bounds for the
  number of iterations of a loop are used to guide loop unrolling and peeling
  and loop exit test optimizations.
  This option is enabled by default.
! .IP \fB\-funconstrained\-commons\fR 4
  .IX Item "-funconstrained-commons"
  This option tells the compiler that variables declared in common blocks
  (e.g. Fortran) may later be overridden with longer trailing arrays. This
  prevents certain optimizations that depend on knowing the array bounds.
! .IP \fB\-fcrossjumping\fR 4
  .IX Item "-fcrossjumping"
! Perform cross\-jumping transformation.
  This transformation unifies equivalent code and saves code size.  The
! resulting code may or may not perform better than without cross\-jumping.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fauto\-inc\-dec\fR 4
  .IX Item "-fauto-inc-dec"
  Combine increments or decrements of addresses with memory accesses.
  This pass is always skipped on architectures that do not have
  instructions to support this.  Enabled by default at \fB\-O1\fR and
  higher on architectures that support this.
! .IP \fB\-fdce\fR 4
  .IX Item "-fdce"
! Perform dead code elimination (DCE) on RTL.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fdse\fR 4
  .IX Item "-fdse"
! Perform dead store elimination (DSE) on RTL.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fif\-conversion\fR 4
  .IX Item "-fif-conversion"
! Attempt to transform conditional jumps into branch\-less equivalents.  This
  includes use of conditional moves, min, max, set flags and abs instructions, and
  some tricks doable by standard arithmetics.  The use of conditional execution
  on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP \fB\-fif\-conversion2\fR 4
  .IX Item "-fif-conversion2"
  Use conditional execution (where available) to transform conditional jumps into
! branch\-less equivalents.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP \fB\-fdeclone\-ctor\-dtor\fR 4
  .IX Item "-fdeclone-ctor-dtor"
! The C++ ABI requires multiple entry points for constructors and
  destructors: one for a base subobject, one for a complete object, and
  one for a virtual destructor that calls operator delete afterwards.
  For a hierarchy with virtual bases, the base and complete variants are
*************** base and complete variants are changed t
*** 12210,12222 ****
  implementation.
  .Sp
  Enabled by \fB\-Os\fR.
! .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
  .IX Item "-fdelete-null-pointer-checks"
  Assume that programs cannot safely dereference null pointers, and that
  no code or data element resides at address zero.
  This option enables simple constant
  folding optimizations at all optimization levels.  In addition, other
! optimization passes in \s-1GCC\s0 use this flag to control global dataflow
  analyses that eliminate useless checks for null pointers; these assume
  that a memory access to address zero always results in a trap, so
  that if a pointer is checked after it has already been dereferenced,
--- 12143,12155 ----
  implementation.
  .Sp
  Enabled by \fB\-Os\fR.
! .IP \fB\-fdelete\-null\-pointer\-checks\fR 4
  .IX Item "-fdelete-null-pointer-checks"
  Assume that programs cannot safely dereference null pointers, and that
  no code or data element resides at address zero.
  This option enables simple constant
  folding optimizations at all optimization levels.  In addition, other
! optimization passes in GCC use this flag to control global dataflow
  analyses that eliminate useless checks for null pointers; these assume
  that a memory access to address zero always results in a trap, so
  that if a pointer is checked after it has already been dereferenced,
*************** Note however that in some environments t
*** 12226,12244 ****
  Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
  for programs that depend on that behavior.
  .Sp
! This option is enabled by default on most targets.  On Nios \s-1II ELF,\s0 it
! defaults to off.  On \s-1AVR\s0 and \s-1MSP430,\s0 this option is completely disabled.
  .Sp
  Passes that use the dataflow information
  are enabled independently at different optimization levels.
! .IP "\fB\-fdevirtualize\fR" 4
  .IX Item "-fdevirtualize"
  Attempt to convert calls to virtual functions to direct calls.  This
  is done both within a procedure and interprocedurally as part of
  indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
  propagation (\fB\-fipa\-cp\fR).
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fdevirtualize\-speculatively\fR" 4
  .IX Item "-fdevirtualize-speculatively"
  Attempt to convert calls to virtual functions to speculative direct calls.
  Based on the analysis of the type inheritance graph, determine for a given call
--- 12159,12177 ----
  Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
  for programs that depend on that behavior.
  .Sp
! This option is enabled by default on most targets.  On Nios II ELF, it
! defaults to off.  On AVR and MSP430, this option is completely disabled.
  .Sp
  Passes that use the dataflow information
  are enabled independently at different optimization levels.
! .IP \fB\-fdevirtualize\fR 4
  .IX Item "-fdevirtualize"
  Attempt to convert calls to virtual functions to direct calls.  This
  is done both within a procedure and interprocedurally as part of
  indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
  propagation (\fB\-fipa\-cp\fR).
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fdevirtualize\-speculatively\fR 4
  .IX Item "-fdevirtualize-speculatively"
  Attempt to convert calls to virtual functions to speculative direct calls.
  Based on the analysis of the type inheritance graph, determine for a given call
*************** the set of likely targets. If the set is
*** 12246,12274 ****
  the call into a conditional deciding between direct and indirect calls.  The
  speculative calls enable more optimizations, such as inlining.  When they seem
  useless after further optimization, they are converted back into original form.
! .IP "\fB\-fdevirtualize\-at\-ltrans\fR" 4
  .IX Item "-fdevirtualize-at-ltrans"
  Stream extra information needed for aggressive devirtualization when running
! the link-time optimizer in local transformation mode.  
  This option enables more devirtualization but
  significantly increases the size of streamed data. For this reason it is
  disabled by default.
! .IP "\fB\-fexpensive\-optimizations\fR" 4
  .IX Item "-fexpensive-optimizations"
  Perform a number of minor optimizations that are relatively expensive.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-free\fR" 4
  .IX Item "-free"
  Attempt to remove redundant extension instructions.  This is especially
! helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
  registers after writing to their lower 32\-bit half.
  .Sp
! Enabled for Alpha, AArch64, LoongArch, PowerPC, RISC-V, \s-1SPARC,\s0 h83000 and x86 at
  levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fno\-lifetime\-dse\fR" 4
  .IX Item "-fno-lifetime-dse"
! In \*(C+ the value of an object is only affected by changes within its
  lifetime: when the constructor begins, the object has an indeterminate
  value, and any changes during the lifetime of the object are dead when
  the object is destroyed.  Normally dead store elimination will take
--- 12179,12207 ----
  the call into a conditional deciding between direct and indirect calls.  The
  speculative calls enable more optimizations, such as inlining.  When they seem
  useless after further optimization, they are converted back into original form.
! .IP \fB\-fdevirtualize\-at\-ltrans\fR 4
  .IX Item "-fdevirtualize-at-ltrans"
  Stream extra information needed for aggressive devirtualization when running
! the link\-time optimizer in local transformation mode.  
  This option enables more devirtualization but
  significantly increases the size of streamed data. For this reason it is
  disabled by default.
! .IP \fB\-fexpensive\-optimizations\fR 4
  .IX Item "-fexpensive-optimizations"
  Perform a number of minor optimizations that are relatively expensive.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-free\fR 4
  .IX Item "-free"
  Attempt to remove redundant extension instructions.  This is especially
! helpful for the x86\-64 architecture, which implicitly zero\-extends in 64\-bit
  registers after writing to their lower 32\-bit half.
  .Sp
! Enabled for Alpha, AArch64, LoongArch, PowerPC, RISC\-V, SPARC, h83000 and x86 at
  levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fno\-lifetime\-dse\fR 4
  .IX Item "-fno-lifetime-dse"
! In C++ the value of an object is only affected by changes within its
  lifetime: when the constructor begins, the object has an indeterminate
  value, and any changes during the lifetime of the object are dead when
  the object is destroyed.  Normally dead store elimination will take
*************** storage) but still treat the object as d
*** 12280,12316 ****
  can use \fB\-flifetime\-dse=1\fR.  The default behavior can be
  explicitly selected with \fB\-flifetime\-dse=2\fR.
  \&\fB\-flifetime\-dse=0\fR is equivalent to \fB\-fno\-lifetime\-dse\fR.
! .IP "\fB\-flive\-range\-shrinkage\fR" 4
  .IX Item "-flive-range-shrinkage"
  Attempt to decrease register pressure through register live range
  shrinkage.  This is helpful for fast processors with small or moderate
  size register sets.
! .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
  .IX Item "-fira-algorithm=algorithm"
  Use the specified coloring algorithm for the integrated register
  allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
! specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
! Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
  for all architectures, but for those targets that do support it, it is
  the default because it generates better code.
! .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
  .IX Item "-fira-region=region"
  Use specified regions for the integrated register allocator.  The
  \&\fIregion\fR argument should be one of the following:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Use all loops as register allocation regions.
  This can give the best results for machines with a small and/or
  irregular register set.
! .IP "\fBmixed\fR" 4
  .IX Item "mixed"
  Use all loops except for loops with small register pressure 
  as the regions.  This value usually gives
  the best results in most cases and for most architectures,
  and is enabled by default when compiling with optimization for speed
  (\fB\-O\fR, \fB\-O2\fR, ...).
! .IP "\fBone\fR" 4
  .IX Item "one"
  Use all functions as a single region.  
  This typically results in the smallest code size, and is enabled by default for
--- 12213,12249 ----
  can use \fB\-flifetime\-dse=1\fR.  The default behavior can be
  explicitly selected with \fB\-flifetime\-dse=2\fR.
  \&\fB\-flifetime\-dse=0\fR is equivalent to \fB\-fno\-lifetime\-dse\fR.
! .IP \fB\-flive\-range\-shrinkage\fR 4
  .IX Item "-flive-range-shrinkage"
  Attempt to decrease register pressure through register live range
  shrinkage.  This is helpful for fast processors with small or moderate
  size register sets.
! .IP \fB\-fira\-algorithm=\fR\fIalgorithm\fR 4
  .IX Item "-fira-algorithm=algorithm"
  Use the specified coloring algorithm for the integrated register
  allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
! specifies Chow\*(Aqs priority coloring, or \fBCB\fR, which specifies
! Chaitin\-Briggs coloring.  Chaitin\-Briggs coloring is not implemented
  for all architectures, but for those targets that do support it, it is
  the default because it generates better code.
! .IP \fB\-fira\-region=\fR\fIregion\fR 4
  .IX Item "-fira-region=region"
  Use specified regions for the integrated register allocator.  The
  \&\fIregion\fR argument should be one of the following:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Use all loops as register allocation regions.
  This can give the best results for machines with a small and/or
  irregular register set.
! .IP \fBmixed\fR 4
  .IX Item "mixed"
  Use all loops except for loops with small register pressure 
  as the regions.  This value usually gives
  the best results in most cases and for most architectures,
  and is enabled by default when compiling with optimization for speed
  (\fB\-O\fR, \fB\-O2\fR, ...).
! .IP \fBone\fR 4
  .IX Item "one"
  Use all functions as a single region.  
  This typically results in the smallest code size, and is enabled by default for
*************** This typically results in the smallest c
*** 12318,12357 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fira\-hoist\-pressure\fR" 4
  .IX Item "-fira-hoist-pressure"
! Use \s-1IRA\s0 to evaluate register pressure in the code hoisting pass for
  decisions to hoist expressions.  This option usually results in smaller
  code, but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-Os\fR for all targets.
! .IP "\fB\-fira\-loop\-pressure\fR" 4
  .IX Item "-fira-loop-pressure"
! Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
  loop invariants.  This option usually results in generation
  of faster and smaller code on machines with large register files (>= 32
  registers), but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-O3\fR for some targets.
! .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
  .IX Item "-fno-ira-share-save-slots"
! Disable sharing of stack slots used for saving call-used hard
  registers living through a call.  Each hard register gets a
  separate stack slot, and as a result function stack frames are
  larger.
! .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
  .IX Item "-fno-ira-share-spill-slots"
! Disable sharing of stack slots allocated for pseudo-registers.  Each
! pseudo-register that does not get a hard register gets a separate
  stack slot, and as a result function stack frames are larger.
! .IP "\fB\-flra\-remat\fR" 4
  .IX Item "-flra-remat"
! Enable CFG-sensitive rematerialization in \s-1LRA.\s0  Instead of loading
! values of spilled pseudos, \s-1LRA\s0 tries to rematerialize (recalculate)
  values if it is profitable.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fdelayed\-branch\fR" 4
  .IX Item "-fdelayed-branch"
  If supported for the target machine, attempt to reorder instructions
  to exploit instruction slots available after delayed branch
--- 12251,12290 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fira\-hoist\-pressure\fR 4
  .IX Item "-fira-hoist-pressure"
! Use IRA to evaluate register pressure in the code hoisting pass for
  decisions to hoist expressions.  This option usually results in smaller
  code, but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-Os\fR for all targets.
! .IP \fB\-fira\-loop\-pressure\fR 4
  .IX Item "-fira-loop-pressure"
! Use IRA to evaluate register pressure in loops for decisions to move
  loop invariants.  This option usually results in generation
  of faster and smaller code on machines with large register files (>= 32
  registers), but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-O3\fR for some targets.
! .IP \fB\-fno\-ira\-share\-save\-slots\fR 4
  .IX Item "-fno-ira-share-save-slots"
! Disable sharing of stack slots used for saving call\-used hard
  registers living through a call.  Each hard register gets a
  separate stack slot, and as a result function stack frames are
  larger.
! .IP \fB\-fno\-ira\-share\-spill\-slots\fR 4
  .IX Item "-fno-ira-share-spill-slots"
! Disable sharing of stack slots allocated for pseudo\-registers.  Each
! pseudo\-register that does not get a hard register gets a separate
  stack slot, and as a result function stack frames are larger.
! .IP \fB\-flra\-remat\fR 4
  .IX Item "-flra-remat"
! Enable CFG\-sensitive rematerialization in LRA.  Instead of loading
! values of spilled pseudos, LRA tries to rematerialize (recalculate)
  values if it is profitable.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fdelayed\-branch\fR 4
  .IX Item "-fdelayed-branch"
  If supported for the target machine, attempt to reorder instructions
  to exploit instruction slots available after delayed branch
*************** instructions.
*** 12359,12374 ****
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR,
  but not at \fB\-Og\fR.
! .IP "\fB\-fschedule\-insns\fR" 4
  .IX Item "-fschedule-insns"
  If supported for the target machine, attempt to reorder instructions to
  eliminate execution stalls due to required data being unavailable.  This
  helps machines that have slow floating point or memory load instructions
  by allowing other instructions to be issued until the result of the load
! or floating-point instruction is required.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-fschedule\-insns2\fR" 4
  .IX Item "-fschedule-insns2"
  Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
  instruction scheduling after register allocation has been done.  This is
--- 12292,12307 ----
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR,
  but not at \fB\-Og\fR.
! .IP \fB\-fschedule\-insns\fR 4
  .IX Item "-fschedule-insns"
  If supported for the target machine, attempt to reorder instructions to
  eliminate execution stalls due to required data being unavailable.  This
  helps machines that have slow floating point or memory load instructions
  by allowing other instructions to be issued until the result of the load
! or floating\-point instruction is required.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-fschedule\-insns2\fR 4
  .IX Item "-fschedule-insns2"
  Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
  instruction scheduling after register allocation has been done.  This is
*************** especially useful on machines with a rel
*** 12376,12392 ****
  registers and where memory load instructions take more than one cycle.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fno\-sched\-interblock\fR" 4
  .IX Item "-fno-sched-interblock"
  Disable instruction scheduling across basic blocks, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fno\-sched\-spec\fR" 4
  .IX Item "-fno-sched-spec"
! Disable speculative motion of non-load instructions, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-pressure\fR" 4
  .IX Item "-fsched-pressure"
  Enable register pressure sensitive insn scheduling before register
  allocation.  This only makes sense when scheduling before register
--- 12309,12325 ----
  registers and where memory load instructions take more than one cycle.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fno\-sched\-interblock\fR 4
  .IX Item "-fno-sched-interblock"
  Disable instruction scheduling across basic blocks, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fno\-sched\-spec\fR 4
  .IX Item "-fno-sched-spec"
! Disable speculative motion of non\-load instructions, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-pressure\fR 4
  .IX Item "-fsched-pressure"
  Enable register pressure sensitive insn scheduling before register
  allocation.  This only makes sense when scheduling before register
*************** allocation is enabled, i.e. with \fB\-fs
*** 12395,12414 ****
  generated code and decrease its size by preventing register pressure
  increase above the number of available hard registers and subsequent
  spills in register allocation.
! .IP "\fB\-fsched\-spec\-load\fR" 4
  .IX Item "-fsched-spec-load"
  Allow speculative motion of some load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
  .IX Item "-fsched-spec-load-dangerous"
  Allow speculative motion of more load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-stalled\-insns\fR" 4
  .IX Item "-fsched-stalled-insns"
  .PD 0
! .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
  .IX Item "-fsched-stalled-insns=n"
  .PD
  Define how many insns (if any) can be moved prematurely from the queue
--- 12328,12347 ----
  generated code and decrease its size by preventing register pressure
  increase above the number of available hard registers and subsequent
  spills in register allocation.
! .IP \fB\-fsched\-spec\-load\fR 4
  .IX Item "-fsched-spec-load"
  Allow speculative motion of some load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-spec\-load\-dangerous\fR 4
  .IX Item "-fsched-spec-load-dangerous"
  Allow speculative motion of more load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-stalled\-insns\fR 4
  .IX Item "-fsched-stalled-insns"
  .PD 0
! .IP \fB\-fsched\-stalled\-insns=\fR\fIn\fR 4
  .IX Item "-fsched-stalled-insns=n"
  .PD
  Define how many insns (if any) can be moved prematurely from the queue
*************** prematurely, \fB\-fsched\-stalled\-insns
*** 12418,12427 ****
  on how many queued insns can be moved prematurely.
  \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns=1\fR.
! .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
  .IX Item "-fsched-stalled-insns-dep"
  .PD 0
! .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
  .IX Item "-fsched-stalled-insns-dep=n"
  .PD
  Define how many insn groups (cycles) are examined for a dependency
--- 12351,12360 ----
  on how many queued insns can be moved prematurely.
  \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns=1\fR.
! .IP \fB\-fsched\-stalled\-insns\-dep\fR 4
  .IX Item "-fsched-stalled-insns-dep"
  .PD 0
! .IP \fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR 4
  .IX Item "-fsched-stalled-insns-dep=n"
  .PD
  Define how many insn groups (cycles) are examined for a dependency
*************** and only if \fB\-fsched\-stalled\-insns\
*** 12432,12514 ****
  \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
  \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
! .IP "\fB\-fsched2\-use\-superblocks\fR" 4
  .IX Item "-fsched2-use-superblocks"
  When scheduling after register allocation, use superblock scheduling.
  This allows motion across basic block boundaries,
  resulting in faster schedules.  This option is experimental, as not all machine
! descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
  results from the algorithm.
  .Sp
  This only makes sense when scheduling after register allocation, i.e. with
  \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-group\-heuristic\fR" 4
  .IX Item "-fsched-group-heuristic"
  Enable the group heuristic in the scheduler.  This heuristic favors
  the instruction that belongs to a schedule group.  This is enabled
  by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
  .IX Item "-fsched-critical-path-heuristic"
! Enable the critical-path heuristic in the scheduler.  This heuristic favors
  instructions on the critical path.  This is enabled by default when
  scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
  .IX Item "-fsched-spec-insn-heuristic"
  Enable the speculative instruction heuristic in the scheduler.  This
  heuristic favors speculative instructions with greater dependency weakness.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
  or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-rank\-heuristic\fR" 4
  .IX Item "-fsched-rank-heuristic"
  Enable the rank heuristic in the scheduler.  This heuristic favors
  the instruction belonging to a basic block with greater size or frequency.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
  .IX Item "-fsched-last-insn-heuristic"
! Enable the last-instruction heuristic in the scheduler.  This heuristic
  favors the instruction that is less dependent on the last instruction
  scheduled.  This is enabled by default when scheduling is enabled,
  i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
  .IX Item "-fsched-dep-count-heuristic"
! Enable the dependent-count heuristic in the scheduler.  This heuristic
  favors the instruction that has more instructions depending on it.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
  .IX Item "-freschedule-modulo-scheduled-loops"
  Modulo scheduling is performed before traditional scheduling.  If a loop
  is modulo scheduled, later scheduling passes may change its schedule.  
  Use this option to control that behavior.
! .IP "\fB\-fselective\-scheduling\fR" 4
  .IX Item "-fselective-scheduling"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the first scheduler pass.
! .IP "\fB\-fselective\-scheduling2\fR" 4
  .IX Item "-fselective-scheduling2"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the second scheduler pass.
! .IP "\fB\-fsel\-sched\-pipelining\fR" 4
  .IX Item "-fsel-sched-pipelining"
  Enable software pipelining of innermost loops during selective scheduling.
  This option has no effect unless one of \fB\-fselective\-scheduling\fR or
  \&\fB\-fselective\-scheduling2\fR is turned on.
! .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
  .IX Item "-fsel-sched-pipelining-outer-loops"
  When pipelining loops during selective scheduling, also pipeline outer loops.
  This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
! .IP "\fB\-fsemantic\-interposition\fR" 4
  .IX Item "-fsemantic-interposition"
! Some object formats, like \s-1ELF,\s0 allow interposing of symbols by the 
  dynamic linker.
! This means that for symbols exported from the \s-1DSO,\s0 the compiler cannot perform
  interprocedural propagation, inlining and other optimizations in anticipation
  that the function or variable in question may change. While this feature is
  useful, for example, to rewrite memory allocation functions by a debugging
--- 12365,12447 ----
  \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
  \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
! .IP \fB\-fsched2\-use\-superblocks\fR 4
  .IX Item "-fsched2-use-superblocks"
  When scheduling after register allocation, use superblock scheduling.
  This allows motion across basic block boundaries,
  resulting in faster schedules.  This option is experimental, as not all machine
! descriptions used by GCC model the CPU closely enough to avoid unreliable
  results from the algorithm.
  .Sp
  This only makes sense when scheduling after register allocation, i.e. with
  \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-group\-heuristic\fR 4
  .IX Item "-fsched-group-heuristic"
  Enable the group heuristic in the scheduler.  This heuristic favors
  the instruction that belongs to a schedule group.  This is enabled
  by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-critical\-path\-heuristic\fR 4
  .IX Item "-fsched-critical-path-heuristic"
! Enable the critical\-path heuristic in the scheduler.  This heuristic favors
  instructions on the critical path.  This is enabled by default when
  scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-spec\-insn\-heuristic\fR 4
  .IX Item "-fsched-spec-insn-heuristic"
  Enable the speculative instruction heuristic in the scheduler.  This
  heuristic favors speculative instructions with greater dependency weakness.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
  or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-rank\-heuristic\fR 4
  .IX Item "-fsched-rank-heuristic"
  Enable the rank heuristic in the scheduler.  This heuristic favors
  the instruction belonging to a basic block with greater size or frequency.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-last\-insn\-heuristic\fR 4
  .IX Item "-fsched-last-insn-heuristic"
! Enable the last\-instruction heuristic in the scheduler.  This heuristic
  favors the instruction that is less dependent on the last instruction
  scheduled.  This is enabled by default when scheduling is enabled,
  i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-dep\-count\-heuristic\fR 4
  .IX Item "-fsched-dep-count-heuristic"
! Enable the dependent\-count heuristic in the scheduler.  This heuristic
  favors the instruction that has more instructions depending on it.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP \fB\-freschedule\-modulo\-scheduled\-loops\fR 4
  .IX Item "-freschedule-modulo-scheduled-loops"
  Modulo scheduling is performed before traditional scheduling.  If a loop
  is modulo scheduled, later scheduling passes may change its schedule.  
  Use this option to control that behavior.
! .IP \fB\-fselective\-scheduling\fR 4
  .IX Item "-fselective-scheduling"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the first scheduler pass.
! .IP \fB\-fselective\-scheduling2\fR 4
  .IX Item "-fselective-scheduling2"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the second scheduler pass.
! .IP \fB\-fsel\-sched\-pipelining\fR 4
  .IX Item "-fsel-sched-pipelining"
  Enable software pipelining of innermost loops during selective scheduling.
  This option has no effect unless one of \fB\-fselective\-scheduling\fR or
  \&\fB\-fselective\-scheduling2\fR is turned on.
! .IP \fB\-fsel\-sched\-pipelining\-outer\-loops\fR 4
  .IX Item "-fsel-sched-pipelining-outer-loops"
  When pipelining loops during selective scheduling, also pipeline outer loops.
  This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
! .IP \fB\-fsemantic\-interposition\fR 4
  .IX Item "-fsemantic-interposition"
! Some object formats, like ELF, allow interposing of symbols by the 
  dynamic linker.
! This means that for symbols exported from the DSO, the compiler cannot perform
  interprocedural propagation, inlining and other optimizations in anticipation
  that the function or variable in question may change. While this feature is
  useful, for example, to rewrite memory allocation functions by a debugging
*************** for variables, the constructor of the va
*** 12521,12538 ****
  has no effect for functions explicitly declared inline 
  (where it is never allowed for interposition to change semantics) 
  and for symbols explicitly declared weak.
! .IP "\fB\-fshrink\-wrap\fR" 4
  .IX Item "-fshrink-wrap"
  Emit function prologues only before parts of the function that need it,
  rather than at the top of the function.  This flag is enabled by default at
  \&\fB\-O\fR and higher.
! .IP "\fB\-fshrink\-wrap\-separate\fR" 4
  .IX Item "-fshrink-wrap-separate"
! Shrink-wrap separate parts of the prologue and epilogue separately, so that
  those parts are only executed when needed.
  This option is on by default, but has no effect unless \fB\-fshrink\-wrap\fR
  is also turned on and the target supports this.
! .IP "\fB\-fcaller\-saves\fR" 4
  .IX Item "-fcaller-saves"
  Enable allocation of values to registers that are clobbered by
  function calls, by emitting extra instructions to save and restore the
--- 12454,12471 ----
  has no effect for functions explicitly declared inline 
  (where it is never allowed for interposition to change semantics) 
  and for symbols explicitly declared weak.
! .IP \fB\-fshrink\-wrap\fR 4
  .IX Item "-fshrink-wrap"
  Emit function prologues only before parts of the function that need it,
  rather than at the top of the function.  This flag is enabled by default at
  \&\fB\-O\fR and higher.
! .IP \fB\-fshrink\-wrap\-separate\fR 4
  .IX Item "-fshrink-wrap-separate"
! Shrink\-wrap separate parts of the prologue and epilogue separately, so that
  those parts are only executed when needed.
  This option is on by default, but has no effect unless \fB\-fshrink\-wrap\fR
  is also turned on and the target supports this.
! .IP \fB\-fcaller\-saves\fR 4
  .IX Item "-fcaller-saves"
  Enable allocation of values to registers that are clobbered by
  function calls, by emitting extra instructions to save and restore the
*************** registers around such calls.  Such alloc
*** 12540,12555 ****
  seems to result in better code.
  .Sp
  This option is always enabled by default on certain machines, usually
! those which have no call-preserved registers to use instead.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fcombine\-stack\-adjustments\fR" 4
  .IX Item "-fcombine-stack-adjustments"
  Tracks stack adjustments (pushes and pops) and stack memory references
  and then tries to find ways to combine them.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-ra\fR" 4
  .IX Item "-fipa-ra"
  Use caller save registers for allocation if those registers are not used by
  any called function.  In that case it is not necessary to save and restore
--- 12473,12488 ----
  seems to result in better code.
  .Sp
  This option is always enabled by default on certain machines, usually
! those which have no call\-preserved registers to use instead.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fcombine\-stack\-adjustments\fR 4
  .IX Item "-fcombine-stack-adjustments"
  Tracks stack adjustments (pushes and pops) and stack memory references
  and then tries to find ways to combine them.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-ra\fR 4
  .IX Item "-fipa-ra"
  Use caller save registers for allocation if those registers are not used by
  any called function.  In that case it is not necessary to save and restore
*************** same compilation unit as current functio
*** 12558,12641 ****
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, however the option
  is disabled if generated code will be instrumented for profiling
! (\fB\-p\fR, or \fB\-pg\fR) or if callee's register usage cannot be known
  exactly (this happens on targets that do not expose prologues
! and epilogues in \s-1RTL\s0).
! .IP "\fB\-fconserve\-stack\fR" 4
  .IX Item "-fconserve-stack"
  Attempt to minimize stack usage.  The compiler attempts to use less
  stack space, even if that makes the program slower.  This option
! implies setting the \fBlarge-stack-frame\fR parameter to 100
! and the \fBlarge-stack-frame-growth\fR parameter to 400.
! .IP "\fB\-ftree\-reassoc\fR" 4
  .IX Item "-ftree-reassoc"
  Perform reassociation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-fcode\-hoisting\fR" 4
  .IX Item "-fcode-hoisting"
  Perform code hoisting.  Code hoisting tries to move the
  evaluation of expressions executed on all paths to the function exit
  as early as possible.  This is especially useful as a code size
  optimization, but it often helps for code speed as well.
  This flag is enabled by default at \fB\-O2\fR and higher.
! .IP "\fB\-ftree\-pre\fR" 4
  .IX Item "-ftree-pre"
! Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
  enabled by default at \fB\-O2\fR and \fB\-O3\fR.
! .IP "\fB\-ftree\-partial\-pre\fR" 4
  .IX Item "-ftree-partial-pre"
! Make partial redundancy elimination (\s-1PRE\s0) more aggressive.  This flag is
  enabled by default at \fB\-O3\fR.
! .IP "\fB\-ftree\-forwprop\fR" 4
  .IX Item "-ftree-forwprop"
  Perform forward propagation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-fre\fR" 4
  .IX Item "-ftree-fre"
! Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
! between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
  that are computed on all paths leading to the redundant computation.
! This analysis is faster than \s-1PRE,\s0 though it exposes fewer redundancies.
  This flag is enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-phiprop\fR" 4
  .IX Item "-ftree-phiprop"
  Perform hoisting of loads from conditional pointers on trees.  This
  pass is enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fhoist\-adjacent\-loads\fR" 4
  .IX Item "-fhoist-adjacent-loads"
! Speculatively hoist loads from both branches of an if-then-else if the
  loads are from adjacent locations in the same structure and the target
  architecture has a conditional move instruction.  This flag is enabled
  by default at \fB\-O2\fR and higher.
! .IP "\fB\-ftree\-copy\-prop\fR" 4
  .IX Item "-ftree-copy-prop"
  Perform copy propagation on trees.  This pass eliminates unnecessary
  copy operations.  This flag is enabled by default at \fB\-O1\fR and
  higher.
! .IP "\fB\-fipa\-pure\-const\fR" 4
  .IX Item "-fipa-pure-const"
  Discover which functions are pure or constant.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-reference\fR" 4
  .IX Item "-fipa-reference"
  Discover which static variables do not escape the
  compilation unit.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-reference\-addressable\fR" 4
  .IX Item "-fipa-reference-addressable"
! Discover read-only, write-only and non-addressable static variables.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-stack\-alignment\fR" 4
  .IX Item "-fipa-stack-alignment"
  Reduce stack alignment on call sites if possible.
  Enabled by default.
! .IP "\fB\-fipa\-pta\fR" 4
  .IX Item "-fipa-pta"
  Perform interprocedural pointer analysis and interprocedural modification
  and reference analysis.  This option can cause excessive memory and
! compile-time usage on large compilation units.  It is not enabled by
  default at any optimization level.
! .IP "\fB\-fipa\-profile\fR" 4
  .IX Item "-fipa-profile"
  Perform interprocedural profile propagation.  The functions called only from
  cold functions are marked as cold. Also functions executed once (such as
--- 12491,12574 ----
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, however the option
  is disabled if generated code will be instrumented for profiling
! (\fB\-p\fR, or \fB\-pg\fR) or if callee\*(Aqs register usage cannot be known
  exactly (this happens on targets that do not expose prologues
! and epilogues in RTL).
! .IP \fB\-fconserve\-stack\fR 4
  .IX Item "-fconserve-stack"
  Attempt to minimize stack usage.  The compiler attempts to use less
  stack space, even if that makes the program slower.  This option
! implies setting the \fBlarge\-stack\-frame\fR parameter to 100
! and the \fBlarge\-stack\-frame\-growth\fR parameter to 400.
! .IP \fB\-ftree\-reassoc\fR 4
  .IX Item "-ftree-reassoc"
  Perform reassociation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-fcode\-hoisting\fR 4
  .IX Item "-fcode-hoisting"
  Perform code hoisting.  Code hoisting tries to move the
  evaluation of expressions executed on all paths to the function exit
  as early as possible.  This is especially useful as a code size
  optimization, but it often helps for code speed as well.
  This flag is enabled by default at \fB\-O2\fR and higher.
! .IP \fB\-ftree\-pre\fR 4
  .IX Item "-ftree-pre"
! Perform partial redundancy elimination (PRE) on trees.  This flag is
  enabled by default at \fB\-O2\fR and \fB\-O3\fR.
! .IP \fB\-ftree\-partial\-pre\fR 4
  .IX Item "-ftree-partial-pre"
! Make partial redundancy elimination (PRE) more aggressive.  This flag is
  enabled by default at \fB\-O3\fR.
! .IP \fB\-ftree\-forwprop\fR 4
  .IX Item "-ftree-forwprop"
  Perform forward propagation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-fre\fR 4
  .IX Item "-ftree-fre"
! Perform full redundancy elimination (FRE) on trees.  The difference
! between FRE and PRE is that FRE only considers expressions
  that are computed on all paths leading to the redundant computation.
! This analysis is faster than PRE, though it exposes fewer redundancies.
  This flag is enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-phiprop\fR 4
  .IX Item "-ftree-phiprop"
  Perform hoisting of loads from conditional pointers on trees.  This
  pass is enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fhoist\-adjacent\-loads\fR 4
  .IX Item "-fhoist-adjacent-loads"
! Speculatively hoist loads from both branches of an if\-then\-else if the
  loads are from adjacent locations in the same structure and the target
  architecture has a conditional move instruction.  This flag is enabled
  by default at \fB\-O2\fR and higher.
! .IP \fB\-ftree\-copy\-prop\fR 4
  .IX Item "-ftree-copy-prop"
  Perform copy propagation on trees.  This pass eliminates unnecessary
  copy operations.  This flag is enabled by default at \fB\-O1\fR and
  higher.
! .IP \fB\-fipa\-pure\-const\fR 4
  .IX Item "-fipa-pure-const"
  Discover which functions are pure or constant.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-reference\fR 4
  .IX Item "-fipa-reference"
  Discover which static variables do not escape the
  compilation unit.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-reference\-addressable\fR 4
  .IX Item "-fipa-reference-addressable"
! Discover read\-only, write\-only and non\-addressable static variables.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-stack\-alignment\fR 4
  .IX Item "-fipa-stack-alignment"
  Reduce stack alignment on call sites if possible.
  Enabled by default.
! .IP \fB\-fipa\-pta\fR 4
  .IX Item "-fipa-pta"
  Perform interprocedural pointer analysis and interprocedural modification
  and reference analysis.  This option can cause excessive memory and
! compile\-time usage on large compilation units.  It is not enabled by
  default at any optimization level.
! .IP \fB\-fipa\-profile\fR 4
  .IX Item "-fipa-profile"
  Perform interprocedural profile propagation.  The functions called only from
  cold functions are marked as cold. Also functions executed once (such as
*************** cold functions are marked as cold. Also
*** 12643,12655 ****
  identified. Cold functions and loop less parts of functions executed once are
  then optimized for size.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-modref\fR" 4
  .IX Item "-fipa-modref"
  Perform interprocedural mod/ref analysis.  This optimization analyzes the side
  effects of functions (memory locations that are modified or referenced) and
  enables better optimization across the function call boundary.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-cp\fR" 4
  .IX Item "-fipa-cp"
  Perform interprocedural constant propagation.
  This optimization analyzes the program to determine when values passed
--- 12576,12588 ----
  identified. Cold functions and loop less parts of functions executed once are
  then optimized for size.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-modref\fR 4
  .IX Item "-fipa-modref"
  Perform interprocedural mod/ref analysis.  This optimization analyzes the side
  effects of functions (memory locations that are modified or referenced) and
  enables better optimization across the function call boundary.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-cp\fR 4
  .IX Item "-fipa-cp"
  Perform interprocedural constant propagation.
  This optimization analyzes the program to determine when values passed
*************** This optimization can substantially incr
*** 12658,12664 ****
  if the application has constants passed to functions.
  This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fipa\-cp\-clone\fR" 4
  .IX Item "-fipa-cp-clone"
  Perform function cloning to make interprocedural constant propagation stronger.
  When enabled, interprocedural constant propagation performs function cloning
--- 12591,12597 ----
  if the application has constants passed to functions.
  This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fipa\-cp\-clone\fR 4
  .IX Item "-fipa-cp-clone"
  Perform function cloning to make interprocedural constant propagation stronger.
  When enabled, interprocedural constant propagation performs function cloning
*************** it may significantly increase code size
*** 12668,12724 ****
  (see \fB\-\-param ipa\-cp\-unit\-growth=\fR\fIvalue\fR).
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fipa\-bit\-cp\fR" 4
  .IX Item "-fipa-bit-cp"
  When enabled, perform interprocedural bitwise constant
  propagation. This flag is enabled by default at \fB\-O2\fR and
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
  It requires that \fB\-fipa\-cp\fR is enabled.
! .IP "\fB\-fipa\-vrp\fR" 4
  .IX Item "-fipa-vrp"
  When enabled, perform interprocedural propagation of value
  ranges. This flag is enabled by default at \fB\-O2\fR. It requires
  that \fB\-fipa\-cp\fR is enabled.
! .IP "\fB\-fipa\-icf\fR" 4
  .IX Item "-fipa-icf"
! Perform Identical Code Folding for functions and read-only variables.
  The optimization reduces code size and may disturb unwind stacks by replacing
  a function by equivalent one with a different name. The optimization works
! more effectively with link-time optimization enabled.
  .Sp
! Although the behavior is similar to the Gold Linker's \s-1ICF\s0 optimization, \s-1GCC ICF\s0
  works on different levels and thus the optimizations are not same \- there are
! equivalences that are found only by \s-1GCC\s0 and equivalences found only by Gold.
  .Sp
  This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
! .IP "\fB\-flive\-patching=\fR\fIlevel\fR" 4
  .IX Item "-flive-patching=level"
! Control \s-1GCC\s0's optimizations to produce output suitable for live-patching.
  .Sp
! If the compiler's optimization uses a function's body or information extracted
  from its body to optimize/change another function, the latter is called an
  impacted function of the former.  If a function is patched, its impacted
  functions should be patched too.
  .Sp
! The impacted functions are determined by the compiler's interprocedural
  optimizations.  For example, a caller is impacted when inlining a function
  into its caller,
  cloning a function and changing its caller to call this new clone,
! or extracting a function's pureness/constness information to optimize
  its direct or indirect callers, etc.
  .Sp
! Usually, the more \s-1IPA\s0 optimizations enabled, the larger the number of
  impacted functions for each function.  In order to control the number of
  impacted functions and more easily compute the list of impacted function,
! \&\s-1IPA\s0 optimizations can be partially enabled at two different levels.
  .Sp
  The \fIlevel\fR argument should be one of the following:
  .RS 4
! .IP "\fBinline-clone\fR" 4
  .IX Item "inline-clone"
  Only enable inlining and cloning optimizations, which includes inlining,
  cloning, interprocedural scalar replacement of aggregates and partial inlining.
! As a result, when patching a function, all its callers and its clones'
  callers are impacted, therefore need to be patched as well.
  .Sp
  \&\fB\-flive\-patching=inline\-clone\fR disables the following optimization flags:
--- 12601,12657 ----
  (see \fB\-\-param ipa\-cp\-unit\-growth=\fR\fIvalue\fR).
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fipa\-bit\-cp\fR 4
  .IX Item "-fipa-bit-cp"
  When enabled, perform interprocedural bitwise constant
  propagation. This flag is enabled by default at \fB\-O2\fR and
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
  It requires that \fB\-fipa\-cp\fR is enabled.
! .IP \fB\-fipa\-vrp\fR 4
  .IX Item "-fipa-vrp"
  When enabled, perform interprocedural propagation of value
  ranges. This flag is enabled by default at \fB\-O2\fR. It requires
  that \fB\-fipa\-cp\fR is enabled.
! .IP \fB\-fipa\-icf\fR 4
  .IX Item "-fipa-icf"
! Perform Identical Code Folding for functions and read\-only variables.
  The optimization reduces code size and may disturb unwind stacks by replacing
  a function by equivalent one with a different name. The optimization works
! more effectively with link\-time optimization enabled.
  .Sp
! Although the behavior is similar to the Gold Linker\*(Aqs ICF optimization, GCC ICF
  works on different levels and thus the optimizations are not same \- there are
! equivalences that are found only by GCC and equivalences found only by Gold.
  .Sp
  This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
! .IP \fB\-flive\-patching=\fR\fIlevel\fR 4
  .IX Item "-flive-patching=level"
! Control GCC\*(Aqs optimizations to produce output suitable for live\-patching.
  .Sp
! If the compiler\*(Aqs optimization uses a function\*(Aqs body or information extracted
  from its body to optimize/change another function, the latter is called an
  impacted function of the former.  If a function is patched, its impacted
  functions should be patched too.
  .Sp
! The impacted functions are determined by the compiler\*(Aqs interprocedural
  optimizations.  For example, a caller is impacted when inlining a function
  into its caller,
  cloning a function and changing its caller to call this new clone,
! or extracting a function\*(Aqs pureness/constness information to optimize
  its direct or indirect callers, etc.
  .Sp
! Usually, the more IPA optimizations enabled, the larger the number of
  impacted functions for each function.  In order to control the number of
  impacted functions and more easily compute the list of impacted function,
! IPA optimizations can be partially enabled at two different levels.
  .Sp
  The \fIlevel\fR argument should be one of the following:
  .RS 4
! .IP \fBinline\-clone\fR 4
  .IX Item "inline-clone"
  Only enable inlining and cloning optimizations, which includes inlining,
  cloning, interprocedural scalar replacement of aggregates and partial inlining.
! As a result, when patching a function, all its callers and its clones\*(Aq
  callers are impacted, therefore need to be patched as well.
  .Sp
  \&\fB\-flive\-patching=inline\-clone\fR disables the following optimization flags:
*************** callers are impacted, therefore need to
*** 12727,12733 ****
  \&\-fipa\-bit\-cp  \-fipa\-vrp  \-fipa\-pure\-const
  \&\-fipa\-reference\-addressable
  \&\-fipa\-stack\-alignment \-fipa\-modref\fR
! .IP "\fBinline-only-static\fR" 4
  .IX Item "inline-only-static"
  Only enable inlining of static functions.
  As a result, when patching a static function, all its callers are impacted
--- 12660,12666 ----
  \&\-fipa\-bit\-cp  \-fipa\-vrp  \-fipa\-pure\-const
  \&\-fipa\-reference\-addressable
  \&\-fipa\-stack\-alignment \-fipa\-modref\fR
! .IP \fBinline\-only\-static\fR 4
  .IX Item "inline-only-static"
  Only enable inlining of static functions.
  As a result, when patching a static function, all its callers are impacted
*************** optimization flags:
*** 12742,12898 ****
  .RS 4
  .Sp
  When \fB\-flive\-patching\fR is specified without any value, the default value
! is \fIinline-clone\fR.
  .Sp
  This flag is disabled by default.
  .Sp
! Note that \fB\-flive\-patching\fR is not supported with link-time optimization
  (\fB\-flto\fR).
  .RE
! .IP "\fB\-fisolate\-erroneous\-paths\-dereference\fR" 4
  .IX Item "-fisolate-erroneous-paths-dereference"
  Detect paths that trigger erroneous or undefined behavior due to
  dereferencing a null pointer.  Isolate those paths from the main control
  flow and turn the statement with erroneous or undefined behavior into a trap.
  This flag is enabled by default at \fB\-O2\fR and higher and depends on
  \&\fB\-fdelete\-null\-pointer\-checks\fR also being enabled.
! .IP "\fB\-fisolate\-erroneous\-paths\-attribute\fR" 4
  .IX Item "-fisolate-erroneous-paths-attribute"
  Detect paths that trigger erroneous or undefined behavior due to a null value
  being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
  attribute.  Isolate those paths from the main control flow and turn the
  statement with erroneous or undefined behavior into a trap.  This is not
  currently enabled, but may be enabled by \fB\-O2\fR in the future.
! .IP "\fB\-ftree\-sink\fR" 4
  .IX Item "-ftree-sink"
  Perform forward store motion on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-bit\-ccp\fR" 4
  .IX Item "-ftree-bit-ccp"
  Perform sparse conditional bit constant propagation on trees and propagate
  pointer alignment information.
  This pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher, except for \fB\-Og\fR.
  It requires that \fB\-ftree\-ccp\fR is enabled.
! .IP "\fB\-ftree\-ccp\fR" 4
  .IX Item "-ftree-ccp"
! Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
  pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-fssa\-backprop\fR" 4
  .IX Item "-fssa-backprop"
  Propagate information about uses of a value up the definition chain
  in order to simplify the definitions.  For example, this pass strips
  sign operations if the sign of a value never matters.  The flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fssa\-phiopt\fR" 4
  .IX Item "-fssa-phiopt"
! Perform pattern matching on \s-1SSA PHI\s0 nodes to optimize conditional
  code.  This pass is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP "\fB\-ftree\-switch\-conversion\fR" 4
  .IX Item "-ftree-switch-conversion"
  Perform conversion of simple initializations in a switch to
  initializations from a scalar array.  This flag is enabled by default
  at \fB\-O2\fR and higher.
! .IP "\fB\-ftree\-tail\-merge\fR" 4
  .IX Item "-ftree-tail-merge"
  Look for identical code sequences.  When found, replace one with a jump to the
  other.  This optimization is known as tail merging or cross jumping.  This flag
  is enabled by default at \fB\-O2\fR and higher.  The compilation time
  in this pass can
! be limited using \fBmax-tail-merge-comparisons\fR parameter and
! \&\fBmax-tail-merge-iterations\fR parameter.
! .IP "\fB\-ftree\-dce\fR" 4
  .IX Item "-ftree-dce"
! Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
  default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
  .IX Item "-ftree-builtin-call-dce"
! Perform conditional dead code elimination (\s-1DCE\s0) for calls to built-in functions
  that may set \f(CW\*(C`errno\*(C'\fR but are otherwise free of side effects.  This flag is
  enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
  specified.
! .IP "\fB\-ffinite\-loops\fR" 4
  .IX Item "-ffinite-loops"
  Assume that a loop with an exit will eventually take the exit and not loop
  indefinitely.  This allows the compiler to remove loops that otherwise have
! no side-effects, not considering eventual endless looping as such.
  .Sp
! This option is enabled by default at \fB\-O2\fR for \*(C+ with \-std=c++11
  or higher.
! .IP "\fB\-ftree\-dominator\-opts\fR" 4
  .IX Item "-ftree-dominator-opts"
  Perform a variety of simple scalar cleanups (constant/copy
  propagation, redundancy elimination, range propagation and expression
  simplification) based on a dominator tree traversal.  This also
  performs jump threading (to reduce jumps to jumps). This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-dse\fR" 4
  .IX Item "-ftree-dse"
! Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
  a memory location that is later overwritten by another store without
  any intervening loads.  In this case the earlier store can be deleted.  This
  flag is enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-ch\fR" 4
  .IX Item "-ftree-ch"
  Perform loop header copying on trees.  This is beneficial since it increases
  effectiveness of code motion optimizations.  It also saves one jump.  This flag
  is enabled by default at \fB\-O1\fR and higher.  It is not enabled
  for \fB\-Os\fR, since it usually increases code size.
! .IP "\fB\-ftree\-loop\-optimize\fR" 4
  .IX Item "-ftree-loop-optimize"
  Perform loop optimizations on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-loop\-linear\fR" 4
  .IX Item "-ftree-loop-linear"
  .PD 0
! .IP "\fB\-floop\-strip\-mine\fR" 4
  .IX Item "-floop-strip-mine"
! .IP "\fB\-floop\-block\fR" 4
  .IX Item "-floop-block"
  .PD
  Perform loop nest optimizations.  Same as
! \&\fB\-floop\-nest\-optimize\fR.  To use this code transformation, \s-1GCC\s0 has
  to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
  transformation infrastructure.
! .IP "\fB\-fgraphite\-identity\fR" 4
  .IX Item "-fgraphite-identity"
  Enable the identity transformation for graphite.  For every SCoP we generate
  the polyhedral representation and transform it back to gimple.  Using
  \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
! \&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
  are also performed by the code generator isl, like index splitting and
  dead code elimination in loops.
! .IP "\fB\-floop\-nest\-optimize\fR" 4
  .IX Item "-floop-nest-optimize"
  Enable the isl based loop nest optimizer.  This is a generic loop nest
  optimizer based on the Pluto optimization algorithms.  It calculates a loop
! structure optimized for data-locality and parallelism.  This option
  is experimental.
! .IP "\fB\-floop\-parallelize\-all\fR" 4
  .IX Item "-floop-parallelize-all"
  Use the Graphite data dependence analysis to identify loops that can
  be parallelized.  Parallelize all the loops that can be analyzed to
  not contain loop carried dependences without checking that it is
  profitable to parallelize the loops.
! .IP "\fB\-ftree\-coalesce\-vars\fR" 4
  .IX Item "-ftree-coalesce-vars"
! While transforming the program out of the \s-1SSA\s0 representation, attempt to
! reduce copying by coalescing versions of different user-defined
  variables, instead of just compiler temporaries.  This may severely
  limit the ability to debug an optimized program compiled with
  \&\fB\-fno\-var\-tracking\-assignments\fR.  In the negated form, this flag
! prevents \s-1SSA\s0 coalescing of user variables.  This option is enabled by
  default if optimization is enabled, and it does very little otherwise.
! .IP "\fB\-ftree\-loop\-if\-convert\fR" 4
  .IX Item "-ftree-loop-if-convert"
  Attempt to transform conditional jumps in the innermost loops to
! branch-less equivalents.  The intent is to remove control-flow from
  the innermost loops in order to improve the ability of the
  vectorization pass to handle these loops.  This is enabled by default
  if vectorization is enabled.
! .IP "\fB\-ftree\-loop\-distribution\fR" 4
  .IX Item "-ftree-loop-distribution"
  Perform loop distribution.  This flag can improve cache performance on
  big loop bodies and allow further loop optimizations, like
--- 12675,12831 ----
  .RS 4
  .Sp
  When \fB\-flive\-patching\fR is specified without any value, the default value
! is \fIinline\-clone\fR.
  .Sp
  This flag is disabled by default.
  .Sp
! Note that \fB\-flive\-patching\fR is not supported with link\-time optimization
  (\fB\-flto\fR).
  .RE
! .IP \fB\-fisolate\-erroneous\-paths\-dereference\fR 4
  .IX Item "-fisolate-erroneous-paths-dereference"
  Detect paths that trigger erroneous or undefined behavior due to
  dereferencing a null pointer.  Isolate those paths from the main control
  flow and turn the statement with erroneous or undefined behavior into a trap.
  This flag is enabled by default at \fB\-O2\fR and higher and depends on
  \&\fB\-fdelete\-null\-pointer\-checks\fR also being enabled.
! .IP \fB\-fisolate\-erroneous\-paths\-attribute\fR 4
  .IX Item "-fisolate-erroneous-paths-attribute"
  Detect paths that trigger erroneous or undefined behavior due to a null value
  being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
  attribute.  Isolate those paths from the main control flow and turn the
  statement with erroneous or undefined behavior into a trap.  This is not
  currently enabled, but may be enabled by \fB\-O2\fR in the future.
! .IP \fB\-ftree\-sink\fR 4
  .IX Item "-ftree-sink"
  Perform forward store motion on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-bit\-ccp\fR 4
  .IX Item "-ftree-bit-ccp"
  Perform sparse conditional bit constant propagation on trees and propagate
  pointer alignment information.
  This pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher, except for \fB\-Og\fR.
  It requires that \fB\-ftree\-ccp\fR is enabled.
! .IP \fB\-ftree\-ccp\fR 4
  .IX Item "-ftree-ccp"
! Perform sparse conditional constant propagation (CCP) on trees.  This
  pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-fssa\-backprop\fR 4
  .IX Item "-fssa-backprop"
  Propagate information about uses of a value up the definition chain
  in order to simplify the definitions.  For example, this pass strips
  sign operations if the sign of a value never matters.  The flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fssa\-phiopt\fR 4
  .IX Item "-fssa-phiopt"
! Perform pattern matching on SSA PHI nodes to optimize conditional
  code.  This pass is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP \fB\-ftree\-switch\-conversion\fR 4
  .IX Item "-ftree-switch-conversion"
  Perform conversion of simple initializations in a switch to
  initializations from a scalar array.  This flag is enabled by default
  at \fB\-O2\fR and higher.
! .IP \fB\-ftree\-tail\-merge\fR 4
  .IX Item "-ftree-tail-merge"
  Look for identical code sequences.  When found, replace one with a jump to the
  other.  This optimization is known as tail merging or cross jumping.  This flag
  is enabled by default at \fB\-O2\fR and higher.  The compilation time
  in this pass can
! be limited using \fBmax\-tail\-merge\-comparisons\fR parameter and
! \&\fBmax\-tail\-merge\-iterations\fR parameter.
! .IP \fB\-ftree\-dce\fR 4
  .IX Item "-ftree-dce"
! Perform dead code elimination (DCE) on trees.  This flag is enabled by
  default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-builtin\-call\-dce\fR 4
  .IX Item "-ftree-builtin-call-dce"
! Perform conditional dead code elimination (DCE) for calls to built\-in functions
  that may set \f(CW\*(C`errno\*(C'\fR but are otherwise free of side effects.  This flag is
  enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
  specified.
! .IP \fB\-ffinite\-loops\fR 4
  .IX Item "-ffinite-loops"
  Assume that a loop with an exit will eventually take the exit and not loop
  indefinitely.  This allows the compiler to remove loops that otherwise have
! no side\-effects, not considering eventual endless looping as such.
  .Sp
! This option is enabled by default at \fB\-O2\fR for C++ with \-std=c++11
  or higher.
! .IP \fB\-ftree\-dominator\-opts\fR 4
  .IX Item "-ftree-dominator-opts"
  Perform a variety of simple scalar cleanups (constant/copy
  propagation, redundancy elimination, range propagation and expression
  simplification) based on a dominator tree traversal.  This also
  performs jump threading (to reduce jumps to jumps). This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-dse\fR 4
  .IX Item "-ftree-dse"
! Perform dead store elimination (DSE) on trees.  A dead store is a store into
  a memory location that is later overwritten by another store without
  any intervening loads.  In this case the earlier store can be deleted.  This
  flag is enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-ch\fR 4
  .IX Item "-ftree-ch"
  Perform loop header copying on trees.  This is beneficial since it increases
  effectiveness of code motion optimizations.  It also saves one jump.  This flag
  is enabled by default at \fB\-O1\fR and higher.  It is not enabled
  for \fB\-Os\fR, since it usually increases code size.
! .IP \fB\-ftree\-loop\-optimize\fR 4
  .IX Item "-ftree-loop-optimize"
  Perform loop optimizations on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-loop\-linear\fR 4
  .IX Item "-ftree-loop-linear"
  .PD 0
! .IP \fB\-floop\-strip\-mine\fR 4
  .IX Item "-floop-strip-mine"
! .IP \fB\-floop\-block\fR 4
  .IX Item "-floop-block"
  .PD
  Perform loop nest optimizations.  Same as
! \&\fB\-floop\-nest\-optimize\fR.  To use this code transformation, GCC has
  to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
  transformation infrastructure.
! .IP \fB\-fgraphite\-identity\fR 4
  .IX Item "-fgraphite-identity"
  Enable the identity transformation for graphite.  For every SCoP we generate
  the polyhedral representation and transform it back to gimple.  Using
  \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
! GIMPLE \-> GRAPHITE \-> GIMPLE transformation.  Some minimal optimizations
  are also performed by the code generator isl, like index splitting and
  dead code elimination in loops.
! .IP \fB\-floop\-nest\-optimize\fR 4
  .IX Item "-floop-nest-optimize"
  Enable the isl based loop nest optimizer.  This is a generic loop nest
  optimizer based on the Pluto optimization algorithms.  It calculates a loop
! structure optimized for data\-locality and parallelism.  This option
  is experimental.
! .IP \fB\-floop\-parallelize\-all\fR 4
  .IX Item "-floop-parallelize-all"
  Use the Graphite data dependence analysis to identify loops that can
  be parallelized.  Parallelize all the loops that can be analyzed to
  not contain loop carried dependences without checking that it is
  profitable to parallelize the loops.
! .IP \fB\-ftree\-coalesce\-vars\fR 4
  .IX Item "-ftree-coalesce-vars"
! While transforming the program out of the SSA representation, attempt to
! reduce copying by coalescing versions of different user\-defined
  variables, instead of just compiler temporaries.  This may severely
  limit the ability to debug an optimized program compiled with
  \&\fB\-fno\-var\-tracking\-assignments\fR.  In the negated form, this flag
! prevents SSA coalescing of user variables.  This option is enabled by
  default if optimization is enabled, and it does very little otherwise.
! .IP \fB\-ftree\-loop\-if\-convert\fR 4
  .IX Item "-ftree-loop-if-convert"
  Attempt to transform conditional jumps in the innermost loops to
! branch\-less equivalents.  The intent is to remove control\-flow from
  the innermost loops in order to improve the ability of the
  vectorization pass to handle these loops.  This is enabled by default
  if vectorization is enabled.
! .IP \fB\-ftree\-loop\-distribution\fR 4
  .IX Item "-ftree-loop-distribution"
  Perform loop distribution.  This flag can improve cache performance on
  big loop bodies and allow further loop optimizations, like
*************** is transformed to
*** 12918,12924 ****
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
  .IX Item "-ftree-loop-distribute-patterns"
  Perform loop distribution of patterns that can be code generated with
  calls to a library.  This flag is enabled by default at \fB\-O2\fR and
--- 12851,12857 ----
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-ftree\-loop\-distribute\-patterns\fR 4
  .IX Item "-ftree-loop-distribute-patterns"
  Perform loop distribution of patterns that can be code generated with
  calls to a library.  This flag is enabled by default at \fB\-O2\fR and
*************** is transformed to
*** 12946,12952 ****
  .Ve
  .Sp
  and the initialization loop is transformed into a call to memset zero.
! .IP "\fB\-floop\-interchange\fR" 4
  .IX Item "-floop-interchange"
  Perform loop interchange outside of graphite.  This flag can improve cache
  performance on loop nest and allow further loop optimizations, like
--- 12879,12885 ----
  .Ve
  .Sp
  and the initialization loop is transformed into a call to memset zero.
! .IP \fB\-floop\-interchange\fR 4
  .IX Item "-floop-interchange"
  Perform loop interchange outside of graphite.  This flag can improve cache
  performance on loop nest and allow further loop optimizations, like
*************** is transformed to
*** 12970,12996 ****
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-floop\-unroll\-and\-jam\fR" 4
  .IX Item "-floop-unroll-and-jam"
  Apply unroll and jam transformations on feasible loops.  In a loop
  nest this unrolls the outer loop by some factor and fuses the resulting
  multiple inner loops.  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftree\-loop\-im\fR" 4
  .IX Item "-ftree-loop-im"
  Perform loop invariant motion on trees.  This pass moves only invariants that
! are hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
  nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
  operands of conditions that are invariant out of the loop, so that we can use
  just trivial invariantness analysis in loop unswitching.  The pass also includes
  store motion.
! .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
  .IX Item "-ftree-loop-ivcanon"
  Create a canonical counter for number of iterations in loops for which
  determining number of iterations requires complicated analysis.  Later
  optimizations then may determine the number easily.  Useful especially
  in connection with unrolling.
! .IP "\fB\-ftree\-scev\-cprop\fR" 4
  .IX Item "-ftree-scev-cprop"
  Perform final value replacement.  If a variable is modified in a loop
  in such a way that its value when exiting the loop can be determined using
--- 12903,12929 ----
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-floop\-unroll\-and\-jam\fR 4
  .IX Item "-floop-unroll-and-jam"
  Apply unroll and jam transformations on feasible loops.  In a loop
  nest this unrolls the outer loop by some factor and fuses the resulting
  multiple inner loops.  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-ftree\-loop\-im\fR 4
  .IX Item "-ftree-loop-im"
  Perform loop invariant motion on trees.  This pass moves only invariants that
! are hard to handle at RTL level (function calls, operations that expand to
  nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
  operands of conditions that are invariant out of the loop, so that we can use
  just trivial invariantness analysis in loop unswitching.  The pass also includes
  store motion.
! .IP \fB\-ftree\-loop\-ivcanon\fR 4
  .IX Item "-ftree-loop-ivcanon"
  Create a canonical counter for number of iterations in loops for which
  determining number of iterations requires complicated analysis.  Later
  optimizations then may determine the number easily.  Useful especially
  in connection with unrolling.
! .IP \fB\-ftree\-scev\-cprop\fR 4
  .IX Item "-ftree-scev-cprop"
  Perform final value replacement.  If a variable is modified in a loop
  in such a way that its value when exiting the loop can be determined using
*************** only its initial value and the number of
*** 12998,13070 ****
  the final value by such a computation, provided it is sufficiently cheap.
  This reduces data dependencies and may allow further simplifications.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fivopts\fR" 4
  .IX Item "-fivopts"
  Perform induction variable optimizations (strength reduction, induction
  variable merging and induction variable elimination) on trees.
! .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
  .IX Item "-ftree-parallelize-loops=n"
  Parallelize loops, i.e., split their iteration space to run in n threads.
  This is only possible for loops whose iterations are independent
  and can be arbitrarily reordered.  The optimization is only
! profitable on multiprocessor machines, for loops that are CPU-intensive,
  rather than constrained e.g. by memory bandwidth.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets
  that have support for \fB\-pthread\fR.
! .IP "\fB\-ftree\-pta\fR" 4
  .IX Item "-ftree-pta"
! Perform function-local points-to analysis on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP "\fB\-ftree\-sra\fR" 4
  .IX Item "-ftree-sra"
  Perform scalar replacement of aggregates.  This pass replaces structure
  references with scalars to prevent committing structures to memory too
  early.  This flag is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP "\fB\-fstore\-merging\fR" 4
  .IX Item "-fstore-merging"
  Perform merging of narrow stores to consecutive memory addresses.  This pass
  merges contiguous stores of immediate values narrower than a word into fewer
  wider stores to reduce the number of instructions.  This is enabled by default
  at \fB\-O2\fR and higher as well as \fB\-Os\fR.
! .IP "\fB\-ftree\-ter\fR" 4
  .IX Item "-ftree-ter"
! Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
  use/single def temporaries are replaced at their use location with their
! defining expression.  This results in non-GIMPLE code, but gives the expanders
! much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-slsr\fR" 4
  .IX Item "-ftree-slsr"
! Perform straight-line strength reduction on trees.  This recognizes related
  expressions involving multiplications and replaces them by less expensive
  calculations when possible.  This is enabled by default at \fB\-O1\fR and
  higher.
! .IP "\fB\-ftree\-vectorize\fR" 4
  .IX Item "-ftree-vectorize"
  Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
  and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
! .IP "\fB\-ftree\-loop\-vectorize\fR" 4
  .IX Item "-ftree-loop-vectorize"
  Perform loop vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftree\-slp\-vectorize\fR" 4
  .IX Item "-ftree-slp-vectorize"
  Perform basic block vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftrivial\-auto\-var\-init=\fR\fIchoice\fR" 4
  .IX Item "-ftrivial-auto-var-init=choice"
  Initialize automatic variables with either a pattern or with zeroes to increase
  the security and predictability of a program by preventing uninitialized memory
  disclosure and use.
! \&\s-1GCC\s0 still considers an automatic variable that doesn't have an explicit
  initializer as uninitialized, \fB\-Wuninitialized\fR and
  \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR will still report
  warning messages on such automatic variables and the compiler will
  perform optimization as if the variable were uninitialized.
! With this option, \s-1GCC\s0 will also initialize any padding of automatic variables
  that have structure or union types to zeroes.
  However, the current implementation cannot initialize automatic variables that
  are declared between the controlling expression and the first case of a
--- 12931,13003 ----
  the final value by such a computation, provided it is sufficiently cheap.
  This reduces data dependencies and may allow further simplifications.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fivopts\fR 4
  .IX Item "-fivopts"
  Perform induction variable optimizations (strength reduction, induction
  variable merging and induction variable elimination) on trees.
! .IP \fB\-ftree\-parallelize\-loops=n\fR 4
  .IX Item "-ftree-parallelize-loops=n"
  Parallelize loops, i.e., split their iteration space to run in n threads.
  This is only possible for loops whose iterations are independent
  and can be arbitrarily reordered.  The optimization is only
! profitable on multiprocessor machines, for loops that are CPU\-intensive,
  rather than constrained e.g. by memory bandwidth.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets
  that have support for \fB\-pthread\fR.
! .IP \fB\-ftree\-pta\fR 4
  .IX Item "-ftree-pta"
! Perform function\-local points\-to analysis on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP \fB\-ftree\-sra\fR 4
  .IX Item "-ftree-sra"
  Perform scalar replacement of aggregates.  This pass replaces structure
  references with scalars to prevent committing structures to memory too
  early.  This flag is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP \fB\-fstore\-merging\fR 4
  .IX Item "-fstore-merging"
  Perform merging of narrow stores to consecutive memory addresses.  This pass
  merges contiguous stores of immediate values narrower than a word into fewer
  wider stores to reduce the number of instructions.  This is enabled by default
  at \fB\-O2\fR and higher as well as \fB\-Os\fR.
! .IP \fB\-ftree\-ter\fR 4
  .IX Item "-ftree-ter"
! Perform temporary expression replacement during the SSA\->normal phase.  Single
  use/single def temporaries are replaced at their use location with their
! defining expression.  This results in non\-GIMPLE code, but gives the expanders
! much more complex trees to work on resulting in better RTL generation.  This is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-slsr\fR 4
  .IX Item "-ftree-slsr"
! Perform straight\-line strength reduction on trees.  This recognizes related
  expressions involving multiplications and replaces them by less expensive
  calculations when possible.  This is enabled by default at \fB\-O1\fR and
  higher.
! .IP \fB\-ftree\-vectorize\fR 4
  .IX Item "-ftree-vectorize"
  Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
  and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
! .IP \fB\-ftree\-loop\-vectorize\fR 4
  .IX Item "-ftree-loop-vectorize"
  Perform loop vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP \fB\-ftree\-slp\-vectorize\fR 4
  .IX Item "-ftree-slp-vectorize"
  Perform basic block vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP \fB\-ftrivial\-auto\-var\-init=\fR\fIchoice\fR 4
  .IX Item "-ftrivial-auto-var-init=choice"
  Initialize automatic variables with either a pattern or with zeroes to increase
  the security and predictability of a program by preventing uninitialized memory
  disclosure and use.
! GCC still considers an automatic variable that doesn\*(Aqt have an explicit
  initializer as uninitialized, \fB\-Wuninitialized\fR and
  \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR will still report
  warning messages on such automatic variables and the compiler will
  perform optimization as if the variable were uninitialized.
! With this option, GCC will also initialize any padding of automatic variables
  that have structure or union types to zeroes.
  However, the current implementation cannot initialize automatic variables that
  are declared between the controlling expression and the first case of a
*************** such cases.
*** 13073,13089 ****
  .Sp
  The three values of \fIchoice\fR are:
  .RS 4
! .IP "*" 4
! \&\fBuninitialized\fR doesn't initialize any automatic variables.
! This is C and \*(C+'s default.
! .IP "*" 4
  \&\fBpattern\fR Initialize automatic variables with values which will likely
  transform logic bugs into crashes down the line, are easily recognized in a
  crash dump and without being values that programmers can rely on for useful
  program semantics.
! The current value is byte-repeatable pattern with byte \*(L"0xFE\*(R".
  The values used for pattern initialization might be changed in the future.
! .IP "*" 4
  \&\fBzero\fR Initialize automatic variables with zeroes.
  .RE
  .RS 4
--- 13006,13022 ----
  .Sp
  The three values of \fIchoice\fR are:
  .RS 4
! .IP * 4
! \&\fBuninitialized\fR doesn\*(Aqt initialize any automatic variables.
! This is C and C++\*(Aqs default.
! .IP * 4
  \&\fBpattern\fR Initialize automatic variables with values which will likely
  transform logic bugs into crashes down the line, are easily recognized in a
  crash dump and without being values that programmers can rely on for useful
  program semantics.
! The current value is byte\-repeatable pattern with byte "0xFE".
  The values used for pattern initialization might be changed in the future.
! .IP * 4
  \&\fBzero\fR Initialize automatic variables with zeroes.
  .RE
  .RS 4
*************** uses say \f(CW\*(C`0X5A\*(C'\fR and \f(C
*** 13104,13148 ****
  respectively, will trap with either \fBchoice\fR of trivial
  initializer, i.e., \fBzero\fR initialization will not convert to the
  representation for \f(CW\*(C`false\*(C'\fR, even if it would for a \f(CW\*(C`static\*(C'\fR
! variable of the same type.  This means the initializer pattern doesn't
  generally depend on the type of the initialized variable.  One notable
! exception is that (non-hardened) boolean variables that fit in registers
  are initialized with \f(CW\*(C`false\*(C'\fR (zero), even when \fBpattern\fR is
  requested.
  .Sp
  You can control this behavior for a specific variable by using the variable
  attribute \f(CW\*(C`uninitialized\*(C'\fR.
  .RE
! .IP "\fB\-fvect\-cost\-model=\fR\fImodel\fR" 4
  .IX Item "-fvect-cost-model=model"
  Alter the cost model used for vectorization.  The \fImodel\fR argument
  should be one of \fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR or
! \&\fBvery-cheap\fR.
! With the \fBunlimited\fR model the vectorized code-path is assumed
  to be profitable while with the \fBdynamic\fR model a runtime check
! guards the vectorized code-path to enable it only for iteration
  counts that will likely execute faster than when executing the original
  scalar loop.  The \fBcheap\fR model disables vectorization of
  loops where doing so would be cost prohibitive for example due to
  required runtime checks for data dependence or alignment but otherwise
! is equal to the \fBdynamic\fR model.  The \fBvery-cheap\fR model only
  allows vectorization if the vector code would entirely replace the
  scalar code that is being vectorized.  For example, if each iteration
  of a vectorized loop would only be able to handle exactly four iterations
! of the scalar loop, the \fBvery-cheap\fR model would only allow
  vectorization if the scalar iteration count is known to be a multiple
  of four.
  .Sp
  The default cost model depends on other optimization flags and is
  either \fBdynamic\fR or \fBcheap\fR.
! .IP "\fB\-fsimd\-cost\-model=\fR\fImodel\fR" 4
  .IX Item "-fsimd-cost-model=model"
  Alter the cost model used for vectorization of loops marked with the OpenMP
  simd directive.  The \fImodel\fR argument should be one of
  \&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
  have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
  default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
! .IP "\fB\-ftree\-vrp\fR" 4
  .IX Item "-ftree-vrp"
  Perform Value Range Propagation on trees.  This is similar to the
  constant propagation pass, but instead of values, ranges of values are
--- 13037,13081 ----
  respectively, will trap with either \fBchoice\fR of trivial
  initializer, i.e., \fBzero\fR initialization will not convert to the
  representation for \f(CW\*(C`false\*(C'\fR, even if it would for a \f(CW\*(C`static\*(C'\fR
! variable of the same type.  This means the initializer pattern doesn\*(Aqt
  generally depend on the type of the initialized variable.  One notable
! exception is that (non\-hardened) boolean variables that fit in registers
  are initialized with \f(CW\*(C`false\*(C'\fR (zero), even when \fBpattern\fR is
  requested.
  .Sp
  You can control this behavior for a specific variable by using the variable
  attribute \f(CW\*(C`uninitialized\*(C'\fR.
  .RE
! .IP \fB\-fvect\-cost\-model=\fR\fImodel\fR 4
  .IX Item "-fvect-cost-model=model"
  Alter the cost model used for vectorization.  The \fImodel\fR argument
  should be one of \fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR or
! \&\fBvery\-cheap\fR.
! With the \fBunlimited\fR model the vectorized code\-path is assumed
  to be profitable while with the \fBdynamic\fR model a runtime check
! guards the vectorized code\-path to enable it only for iteration
  counts that will likely execute faster than when executing the original
  scalar loop.  The \fBcheap\fR model disables vectorization of
  loops where doing so would be cost prohibitive for example due to
  required runtime checks for data dependence or alignment but otherwise
! is equal to the \fBdynamic\fR model.  The \fBvery\-cheap\fR model only
  allows vectorization if the vector code would entirely replace the
  scalar code that is being vectorized.  For example, if each iteration
  of a vectorized loop would only be able to handle exactly four iterations
! of the scalar loop, the \fBvery\-cheap\fR model would only allow
  vectorization if the scalar iteration count is known to be a multiple
  of four.
  .Sp
  The default cost model depends on other optimization flags and is
  either \fBdynamic\fR or \fBcheap\fR.
! .IP \fB\-fsimd\-cost\-model=\fR\fImodel\fR 4
  .IX Item "-fsimd-cost-model=model"
  Alter the cost model used for vectorization of loops marked with the OpenMP
  simd directive.  The \fImodel\fR argument should be one of
  \&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
  have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
  default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
! .IP \fB\-ftree\-vrp\fR 4
  .IX Item "-ftree-vrp"
  Perform Value Range Propagation on trees.  This is similar to the
  constant propagation pass, but instead of values, ranges of values are
*************** checks like array bound checks and null
*** 13151,13188 ****
  enabled by default at \fB\-O2\fR and higher.  Null pointer check
  elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
  enabled.
! .IP "\fB\-fsplit\-paths\fR" 4
  .IX Item "-fsplit-paths"
  Split paths leading to loop backedges.  This can improve dead code
  elimination and common subexpression elimination.  This is enabled by
  default at \fB\-O3\fR and above.
! .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
  .IX Item "-fsplit-ivs-in-unroller"
  Enables expression of values of induction variables in later iterations
  of the unrolled loop using the value in the first iteration.  This breaks
  long dependency chains, thus improving efficiency of the scheduling passes.
  .Sp
! A combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
  same effect.  However, that is not reliable in cases where the loop body
  is more complicated than a single basic block.  It also does not work at all
! on some architectures due to restrictions in the \s-1CSE\s0 pass.
  .Sp
  This optimization is enabled by default.
! .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
  .IX Item "-fvariable-expansion-in-unroller"
  With this option, the compiler creates multiple copies of some
  local variables when unrolling a loop, which can result in superior code.
  .Sp
  This optimization is enabled by default for PowerPC targets, but disabled
  by default otherwise.
! .IP "\fB\-fpartial\-inlining\fR" 4
  .IX Item "-fpartial-inlining"
  Inline parts of functions.  This option has any effect only
  when inlining itself is turned on by the \fB\-finline\-functions\fR
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fpredictive\-commoning\fR" 4
  .IX Item "-fpredictive-commoning"
  Perform predictive commoning optimization, i.e., reusing computations
  (especially memory loads and stores) performed in previous
--- 13084,13121 ----
  enabled by default at \fB\-O2\fR and higher.  Null pointer check
  elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
  enabled.
! .IP \fB\-fsplit\-paths\fR 4
  .IX Item "-fsplit-paths"
  Split paths leading to loop backedges.  This can improve dead code
  elimination and common subexpression elimination.  This is enabled by
  default at \fB\-O3\fR and above.
! .IP \fB\-fsplit\-ivs\-in\-unroller\fR 4
  .IX Item "-fsplit-ivs-in-unroller"
  Enables expression of values of induction variables in later iterations
  of the unrolled loop using the value in the first iteration.  This breaks
  long dependency chains, thus improving efficiency of the scheduling passes.
  .Sp
! A combination of \fB\-fweb\fR and CSE is often sufficient to obtain the
  same effect.  However, that is not reliable in cases where the loop body
  is more complicated than a single basic block.  It also does not work at all
! on some architectures due to restrictions in the CSE pass.
  .Sp
  This optimization is enabled by default.
! .IP \fB\-fvariable\-expansion\-in\-unroller\fR 4
  .IX Item "-fvariable-expansion-in-unroller"
  With this option, the compiler creates multiple copies of some
  local variables when unrolling a loop, which can result in superior code.
  .Sp
  This optimization is enabled by default for PowerPC targets, but disabled
  by default otherwise.
! .IP \fB\-fpartial\-inlining\fR 4
  .IX Item "-fpartial-inlining"
  Inline parts of functions.  This option has any effect only
  when inlining itself is turned on by the \fB\-finline\-functions\fR
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fpredictive\-commoning\fR 4
  .IX Item "-fpredictive-commoning"
  Perform predictive commoning optimization, i.e., reusing computations
  (especially memory loads and stores) performed in previous
*************** iterations of loops.
*** 13190,13196 ****
  .Sp
  This option is enabled at level \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
  .IX Item "-fprefetch-loop-arrays"
  If supported by the target machine, generate instructions to prefetch
  memory to improve the performance of loops that access large arrays.
--- 13123,13129 ----
  .Sp
  This option is enabled at level \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fprefetch\-loop\-arrays\fR 4
  .IX Item "-fprefetch-loop-arrays"
  If supported by the target machine, generate instructions to prefetch
  memory to improve the performance of loops that access large arrays.
*************** This option may generate better or worse
*** 13199,13210 ****
  dependent on the structure of loops within the source code.
  .Sp
  Disabled at level \fB\-Os\fR.
! .IP "\fB\-fno\-printf\-return\-value\fR" 4
  .IX Item "-fno-printf-return-value"
  Do not substitute constants for known return value of formatted output
  functions such as \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`snprintf\*(C'\fR, \f(CW\*(C`vsprintf\*(C'\fR, and
  \&\f(CW\*(C`vsnprintf\*(C'\fR (but not \f(CW\*(C`printf\*(C'\fR of \f(CW\*(C`fprintf\*(C'\fR).  This
! transformation allows \s-1GCC\s0 to optimize or even eliminate branches based
  on the known return value of these functions called with arguments that
  are either constant, or whose values are known to be in a range that
  makes determining the exact return value possible.  For example, when
--- 13132,13143 ----
  dependent on the structure of loops within the source code.
  .Sp
  Disabled at level \fB\-Os\fR.
! .IP \fB\-fno\-printf\-return\-value\fR 4
  .IX Item "-fno-printf-return-value"
  Do not substitute constants for known return value of formatted output
  functions such as \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`snprintf\*(C'\fR, \f(CW\*(C`vsprintf\*(C'\fR, and
  \&\f(CW\*(C`vsnprintf\*(C'\fR (but not \f(CW\*(C`printf\*(C'\fR of \f(CW\*(C`fprintf\*(C'\fR).  This
! transformation allows GCC to optimize or even eliminate branches based
  on the known return value of these functions called with arguments that
  are either constant, or whose values are known to be in a range that
  makes determining the exact return value possible.  For example, when
*************** The \fB\-fprintf\-return\-value\fR optio
*** 13223,13246 ****
  and yields best results with \fB\-O2\fR and above.  It works in tandem
  with the \fB\-Wformat\-overflow\fR and \fB\-Wformat\-truncation\fR
  options.  The \fB\-fprintf\-return\-value\fR option is enabled by default.
! .IP "\fB\-fno\-peephole\fR" 4
  .IX Item "-fno-peephole"
  .PD 0
! .IP "\fB\-fno\-peephole2\fR" 4
  .IX Item "-fno-peephole2"
  .PD
! Disable any machine-specific peephole optimizations.  The difference
  between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
  are implemented in the compiler; some targets use one, some use the
  other, a few use both.
  .Sp
  \&\fB\-fpeephole\fR is enabled by default.
  \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
  .IX Item "-fno-guess-branch-probability"
  Do not guess branch probabilities using heuristics.
  .Sp
! \&\s-1GCC\s0 uses heuristics to guess branch probabilities if they are
  not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
  heuristics are based on the control flow graph.  If some branch probabilities
  are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
--- 13156,13179 ----
  and yields best results with \fB\-O2\fR and above.  It works in tandem
  with the \fB\-Wformat\-overflow\fR and \fB\-Wformat\-truncation\fR
  options.  The \fB\-fprintf\-return\-value\fR option is enabled by default.
! .IP \fB\-fno\-peephole\fR 4
  .IX Item "-fno-peephole"
  .PD 0
! .IP \fB\-fno\-peephole2\fR 4
  .IX Item "-fno-peephole2"
  .PD
! Disable any machine\-specific peephole optimizations.  The difference
  between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
  are implemented in the compiler; some targets use one, some use the
  other, a few use both.
  .Sp
  \&\fB\-fpeephole\fR is enabled by default.
  \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fno\-guess\-branch\-probability\fR 4
  .IX Item "-fno-guess-branch-probability"
  Do not guess branch probabilities using heuristics.
  .Sp
! GCC uses heuristics to guess branch probabilities if they are
  not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
  heuristics are based on the control flow graph.  If some branch probabilities
  are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
*************** some cases, it may be useful to disable
*** 13251,13278 ****
  of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
  .Sp
  It is also possible to specify expected probability of the expression
! with \f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR built-in function.
  .Sp
  The default is \fB\-fguess\-branch\-probability\fR at levels
  \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-freorder\-blocks\fR" 4
  .IX Item "-freorder-blocks"
  Reorder basic blocks in the compiled function in order to reduce number of
  taken branches and improve code locality.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR" 4
  .IX Item "-freorder-blocks-algorithm=algorithm"
  Use the specified algorithm for basic block reordering.  The
  \&\fIalgorithm\fR argument can be \fBsimple\fR, which does not increase
  code size (except sometimes due to secondary effects like alignment),
! or \fBstc\fR, the \*(L"software trace cache\*(R" algorithm, which tries to
  put all often executed code together, minimizing the number of branches
  executed by making extra copies of code.
  .Sp
  The default is \fBsimple\fR at levels \fB\-O1\fR, \fB\-Os\fR, and
  \&\fBstc\fR at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
  .IX Item "-freorder-blocks-and-partition"
  In addition to reordering basic blocks in the compiled function, in order
  to reduce number of taken branches, partitions hot and cold basic blocks
--- 13184,13211 ----
  of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
  .Sp
  It is also possible to specify expected probability of the expression
! with \f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR built\-in function.
  .Sp
  The default is \fB\-fguess\-branch\-probability\fR at levels
  \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-freorder\-blocks\fR 4
  .IX Item "-freorder-blocks"
  Reorder basic blocks in the compiled function in order to reduce number of
  taken branches and improve code locality.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR 4
  .IX Item "-freorder-blocks-algorithm=algorithm"
  Use the specified algorithm for basic block reordering.  The
  \&\fIalgorithm\fR argument can be \fBsimple\fR, which does not increase
  code size (except sometimes due to secondary effects like alignment),
! or \fBstc\fR, the "software trace cache" algorithm, which tries to
  put all often executed code together, minimizing the number of branches
  executed by making extra copies of code.
  .Sp
  The default is \fBsimple\fR at levels \fB\-O1\fR, \fB\-Os\fR, and
  \&\fBstc\fR at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-freorder\-blocks\-and\-partition\fR 4
  .IX Item "-freorder-blocks-and-partition"
  In addition to reordering basic blocks in the compiled function, in order
  to reduce number of taken branches, partitions hot and cold basic blocks
*************** into separate sections of the assembly a
*** 13280,13293 ****
  paging and cache locality performance.
  .Sp
  This optimization is automatically turned off in the presence of
! exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined
  section attribute and on any architecture that does not support named
  sections.  When \fB\-fsplit\-stack\fR is used this option is not
  enabled by default (to avoid linker errors), but may be enabled
  explicitly (if using a working linker).
  .Sp
  Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-freorder\-functions\fR" 4
  .IX Item "-freorder-functions"
  Reorder functions in the object file in order to
  improve code locality.  This is implemented by using special
--- 13213,13226 ----
  paging and cache locality performance.
  .Sp
  This optimization is automatically turned off in the presence of
! exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user\-defined
  section attribute and on any architecture that does not support named
  sections.  When \fB\-fsplit\-stack\fR is used this option is not
  enabled by default (to avoid linker errors), but may be enabled
  explicitly (if using a working linker).
  .Sp
  Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-freorder\-functions\fR 4
  .IX Item "-freorder-functions"
  Reorder functions in the object file in order to
  improve code locality.  This is implemented by using special
*************** subsections \f(CW\*(C`.text.hot\*(C'\fR
*** 13296,13310 ****
  the linker so object file format must support named sections and linker must
  place them in a reasonable way.
  .Sp
! This option isn't effective unless you either provide profile feedback
  (see \fB\-fprofile\-arcs\fR for details) or manually annotate functions with 
  \&\f(CW\*(C`hot\*(C'\fR or \f(CW\*(C`cold\*(C'\fR attributes.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fstrict\-aliasing\fR" 4
  .IX Item "-fstrict-aliasing"
  Allow the compiler to assume the strictest aliasing rules applicable to
! the language being compiled.  For C (and \*(C+), this activates
  optimizations based on the type of expressions.  In particular, an
  object of one type is assumed never to reside at the same address as an
  object of a different type, unless the types are almost the same.  For
--- 13229,13243 ----
  the linker so object file format must support named sections and linker must
  place them in a reasonable way.
  .Sp
! This option isn\*(Aqt effective unless you either provide profile feedback
  (see \fB\-fprofile\-arcs\fR for details) or manually annotate functions with 
  \&\f(CW\*(C`hot\*(C'\fR or \f(CW\*(C`cold\*(C'\fR attributes.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fstrict\-aliasing\fR 4
  .IX Item "-fstrict-aliasing"
  Allow the compiler to assume the strictest aliasing rules applicable to
! the language being compiled.  For C (and C++), this activates
  optimizations based on the type of expressions.  In particular, an
  object of one type is assumed never to reside at the same address as an
  object of a different type, unless the types are almost the same.  For
*************** Pay special attention to code like this:
*** 13328,13335 ****
  .Ve
  .Sp
  The practice of reading from a different union member than the one most
! recently written to (called \*(L"type-punning\*(R") is common.  Even with
! \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
  is accessed through the union type.  So, the code above works as
  expected.    However, this code might not:
  .Sp
--- 13261,13268 ----
  .Ve
  .Sp
  The practice of reading from a different union member than the one most
! recently written to (called "type\-punning") is common.  Even with
! \&\fB\-fstrict\-aliasing\fR, type\-punning is allowed, provided the memory
  is accessed through the union type.  So, the code above works as
  expected.    However, this code might not:
  .Sp
*************** uses a union type, e.g.:
*** 13356,13362 ****
  .Sp
  The \fB\-fstrict\-aliasing\fR option is enabled at levels
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fipa\-strict\-aliasing\fR" 4
  .IX Item "-fipa-strict-aliasing"
  Controls whether rules of \fB\-fstrict\-aliasing\fR are applied across
  function boundaries.  Note that if multiple functions gets inlined into a
--- 13289,13295 ----
  .Sp
  The \fB\-fstrict\-aliasing\fR option is enabled at levels
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fipa\-strict\-aliasing\fR 4
  .IX Item "-fipa-strict-aliasing"
  Controls whether rules of \fB\-fstrict\-aliasing\fR are applied across
  function boundaries.  Note that if multiple functions gets inlined into a
*************** function boundary.
*** 13365,13385 ****
  .Sp
  The \fB\-fipa\-strict\-aliasing\fR option is enabled by default and is
  effective only in combination with \fB\-fstrict\-aliasing\fR.
! .IP "\fB\-falign\-functions\fR" 4
  .IX Item "-falign-functions"
  .PD 0
! .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
  .IX Item "-falign-functions=n"
! .IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-functions=n:m"
! .IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-functions=n:m:n2"
! .IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-functions=n:m:n2:m2"
  .PD
! Align the start of functions to the next power-of-two greater than or
  equal to \fIn\fR, skipping up to \fIm\fR\-1 bytes.  This ensures that at
! least the first \fIm\fR bytes of the function can be fetched by the \s-1CPU\s0
  without crossing an \fIn\fR\-byte alignment boundary.
  This is an optimization of code performance and alignment is ignored for
  functions considered cold.  If alignment is required for all functions,
--- 13298,13318 ----
  .Sp
  The \fB\-fipa\-strict\-aliasing\fR option is enabled by default and is
  effective only in combination with \fB\-fstrict\-aliasing\fR.
! .IP \fB\-falign\-functions\fR 4
  .IX Item "-falign-functions"
  .PD 0
! .IP \fB\-falign\-functions=\fR\fIn\fR 4
  .IX Item "-falign-functions=n"
! .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-functions=n:m"
! .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-functions=n:m:n2"
! .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-functions=n:m:n2:m2"
  .PD
! Align the start of functions to the next power\-of\-two greater than or
  equal to \fIn\fR, skipping up to \fIm\fR\-1 bytes.  This ensures that at
! least the first \fIm\fR bytes of the function can be fetched by the CPU
  without crossing an \fIn\fR\-byte alignment boundary.
  This is an optimization of code performance and alignment is ignored for
  functions considered cold.  If alignment is required for all functions,
*************** in that case, it is rounded up.
*** 13406,13434 ****
  \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
  equivalent and mean that functions are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-flimit\-function\-alignment\fR" 4
  .IX Item "-flimit-function-alignment"
  If this option is enabled, the compiler tries to avoid unnecessarily
  overaligning functions. It attempts to instruct the assembler to align
  by the amount specified by \fB\-falign\-functions\fR, but not to
  skip more bytes than the size of the function.
! .IP "\fB\-falign\-labels\fR" 4
  .IX Item "-falign-labels"
  .PD 0
! .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
  .IX Item "-falign-labels=n"
! .IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-labels=n:m"
! .IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-labels=n:m:n2"
! .IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-labels=n:m:n2:m2"
  .PD
! Align all branch targets to a power-of-two boundary.
  .Sp
  Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
  \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
--- 13339,13367 ----
  \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
  equivalent and mean that functions are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-flimit\-function\-alignment\fR 4
  .IX Item "-flimit-function-alignment"
  If this option is enabled, the compiler tries to avoid unnecessarily
  overaligning functions. It attempts to instruct the assembler to align
  by the amount specified by \fB\-falign\-functions\fR, but not to
  skip more bytes than the size of the function.
! .IP \fB\-falign\-labels\fR 4
  .IX Item "-falign-labels"
  .PD 0
! .IP \fB\-falign\-labels=\fR\fIn\fR 4
  .IX Item "-falign-labels=n"
! .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-labels=n:m"
! .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-labels=n:m:n2"
! .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-labels=n:m:n2:m2"
  .PD
! Align all branch targets to a power\-of\-two boundary.
  .Sp
  Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
  \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
*************** equivalent and mean that labels are not
*** 13437,13460 ****
  If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
  are greater than this value, then their values are used instead.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default
  which is very likely to be \fB1\fR, meaning no alignment.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-falign\-loops\fR" 4
  .IX Item "-falign-loops"
  .PD 0
! .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
  .IX Item "-falign-loops=n"
! .IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-loops=n:m"
! .IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-loops=n:m:n2"
! .IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-loops=n:m:n2:m2"
  .PD
! Align loops to a power-of-two boundary.  If the loops are executed
  many times, this makes up for any execution of the dummy padding
  instructions.
  This is an optimization of code performance and alignment is ignored for
--- 13370,13393 ----
  If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
  are greater than this value, then their values are used instead.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default
  which is very likely to be \fB1\fR, meaning no alignment.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-falign\-loops\fR 4
  .IX Item "-falign-loops"
  .PD 0
! .IP \fB\-falign\-loops=\fR\fIn\fR 4
  .IX Item "-falign-loops=n"
! .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-loops=n:m"
! .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-loops=n:m:n2"
! .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-loops=n:m:n2:m2"
  .PD
! Align loops to a power\-of\-two boundary.  If the loops are executed
  many times, this makes up for any execution of the dummy padding
  instructions.
  This is an optimization of code performance and alignment is ignored for
*************** Parameters of this option are analogous
*** 13468,13489 ****
  equivalent and mean that loops are not aligned.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-falign\-jumps\fR" 4
  .IX Item "-falign-jumps"
  .PD 0
! .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
  .IX Item "-falign-jumps=n"
! .IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-jumps=n:m"
! .IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-jumps=n:m:n2"
! .IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-jumps=n:m:n2:m2"
  .PD
! Align branch targets to a power-of-two boundary, for branch targets
  where the targets can only be reached by jumping.  In this case,
  no dummy operations need be executed.
  This is an optimization of code performance and alignment is ignored for
--- 13401,13422 ----
  equivalent and mean that loops are not aligned.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-falign\-jumps\fR 4
  .IX Item "-falign-jumps"
  .PD 0
! .IP \fB\-falign\-jumps=\fR\fIn\fR 4
  .IX Item "-falign-jumps=n"
! .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-jumps=n:m"
! .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-jumps=n:m:n2"
! .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-jumps=n:m:n2:m2"
  .PD
! Align branch targets to a power\-of\-two boundary, for branch targets
  where the targets can only be reached by jumping.  In this case,
  no dummy operations need be executed.
  This is an optimization of code performance and alignment is ignored for
*************** Parameters of this option are analogous
*** 13496,13515 ****
  \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
  equivalent and mean that loops are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-fmin\-function\-alignment\fR" 4
  .IX Item "-fmin-function-alignment"
! Specify minimal alignment of functions to the next power-of-two greater than or
  equal to \fIn\fR. Unlike \fB\-falign\-functions\fR this alignment is applied
  also to all functions (even those considered cold).  The alignment is also not
  affected by \fB\-flimit\-function\-alignment\fR
! .IP "\fB\-fno\-allocation\-dce\fR" 4
  .IX Item "-fno-allocation-dce"
! Do not remove unused \*(C+ allocations in dead code elimination.
! .IP "\fB\-fallow\-store\-data\-races\fR" 4
  .IX Item "-fallow-store-data-races"
  Allow the compiler to perform optimizations that may introduce new data races
  on stores, without proving that the variable cannot be concurrently accessed
--- 13429,13448 ----
  \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
  equivalent and mean that loops are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-fmin\-function\-alignment\fR 4
  .IX Item "-fmin-function-alignment"
! Specify minimal alignment of functions to the next power\-of\-two greater than or
  equal to \fIn\fR. Unlike \fB\-falign\-functions\fR this alignment is applied
  also to all functions (even those considered cold).  The alignment is also not
  affected by \fB\-flimit\-function\-alignment\fR
! .IP \fB\-fno\-allocation\-dce\fR 4
  .IX Item "-fno-allocation-dce"
! Do not remove unused C++ allocations in dead code elimination.
! .IP \fB\-fallow\-store\-data\-races\fR 4
  .IX Item "-fallow-store-data-races"
  Allow the compiler to perform optimizations that may introduce new data races
  on stores, without proving that the variable cannot be concurrently accessed
*************** use this option if it is known that glob
*** 13518,13540 ****
  multiple threads.
  .Sp
  Examples of optimizations enabled by \fB\-fallow\-store\-data\-races\fR include
! hoisting or if-conversions that may cause a value that was already in memory
! to be re-written with that same value.  Such re-writing is safe in a single
! threaded context but may be unsafe in a multi-threaded context.  Note that on
! some processors, if-conversions may be required in order to enable
  vectorization.
  .Sp
  Enabled at level \fB\-Ofast\fR.
! .IP "\fB\-funit\-at\-a\-time\fR" 4
  .IX Item "-funit-at-a-time"
  This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
  has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
  \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
  .Sp
  Enabled by default.
! .IP "\fB\-fno\-toplevel\-reorder\fR" 4
  .IX Item "-fno-toplevel-reorder"
! Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
  statements.  Output them in the same order that they appear in the
  input file.  When this option is used, unreferenced static variables
  are not removed.  This option is intended to support existing code
--- 13451,13473 ----
  multiple threads.
  .Sp
  Examples of optimizations enabled by \fB\-fallow\-store\-data\-races\fR include
! hoisting or if\-conversions that may cause a value that was already in memory
! to be re\-written with that same value.  Such re\-writing is safe in a single
! threaded context but may be unsafe in a multi\-threaded context.  Note that on
! some processors, if\-conversions may be required in order to enable
  vectorization.
  .Sp
  Enabled at level \fB\-Ofast\fR.
! .IP \fB\-funit\-at\-a\-time\fR 4
  .IX Item "-funit-at-a-time"
  This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
  has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
  \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
  .Sp
  Enabled by default.
! .IP \fB\-fno\-toplevel\-reorder\fR 4
  .IX Item "-fno-toplevel-reorder"
! Do not reorder top\-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
  statements.  Output them in the same order that they appear in the
  input file.  When this option is used, unreferenced static variables
  are not removed.  This option is intended to support existing code
*************** use attributes when possible.
*** 13545,13551 ****
  also at \fB\-O0\fR if \fB\-fsection\-anchors\fR is explicitly requested.
  Additionally \fB\-fno\-toplevel\-reorder\fR implies
  \&\fB\-fno\-section\-anchors\fR.
! .IP "\fB\-funreachable\-traps\fR" 4
  .IX Item "-funreachable-traps"
  With this option, the compiler turns calls to
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR into traps, instead of using them for
--- 13478,13484 ----
  also at \fB\-O0\fR if \fB\-fsection\-anchors\fR is explicitly requested.
  Additionally \fB\-fno\-toplevel\-reorder\fR implies
  \&\fB\-fno\-section\-anchors\fR.
! .IP \fB\-funreachable\-traps\fR 4
  .IX Item "-funreachable-traps"
  With this option, the compiler turns calls to
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR into traps, instead of using them for
*************** options.  If \fB\-fsanitize=unreachable\
*** 13558,13574 ****
  takes priority over this one.
  .Sp
  This option is enabled by default at \fB\-O0\fR and \fB\-Og\fR.
! .IP "\fB\-fweb\fR" 4
  .IX Item "-fweb"
  Constructs webs as commonly used for register allocation purposes and assign
  each web individual pseudo register.  This allows the register allocation pass
  to operate on pseudos directly, but also strengthens several other optimization
! passes, such as \s-1CSE,\s0 loop optimizer and trivial dead code remover.  It can,
  however, make debugging impossible, since variables no longer stay in a
! \&\*(L"home register\*(R".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP "\fB\-fwhole\-program\fR" 4
  .IX Item "-fwhole-program"
  Assume that the current compilation unit represents the whole program being
  compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
--- 13491,13507 ----
  takes priority over this one.
  .Sp
  This option is enabled by default at \fB\-O0\fR and \fB\-Og\fR.
! .IP \fB\-fweb\fR 4
  .IX Item "-fweb"
  Constructs webs as commonly used for register allocation purposes and assign
  each web individual pseudo register.  This allows the register allocation pass
  to operate on pseudos directly, but also strengthens several other optimization
! passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
  however, make debugging impossible, since variables no longer stay in a
! "home register".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP \fB\-fwhole\-program\fR 4
  .IX Item "-fwhole-program"
  Assume that the current compilation unit represents the whole program being
  compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
*************** and in effect are optimized more aggress
*** 13577,13596 ****
  .Sp
  With \fB\-flto\fR this option has a limited use.  In most cases the
  precise list of symbols used or exported from the binary is known the
! resolution info passed to the link-time optimizer by the linker plugin.  It is
  still useful if no linker plugin is used or during incremental link step when
  final code is produced (with \fB\-flto\fR
  \&\fB\-flinker\-output=nolto\-rel\fR).
! .IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
  .IX Item "-flto[=n]"
! This option runs the standard link-time optimizer.  When invoked
! with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
! representations) and writes it to special \s-1ELF\s0 sections in the object
  file.  When the object files are linked together, all the function
! bodies are read from these \s-1ELF\s0 sections and instantiated as if they
  had been part of the same translation unit.
  .Sp
! To use the link-time optimizer, \fB\-flto\fR and optimization
  options should be specified at compile time and during the final link.
  It is recommended that you compile all the files participating in the
  same link with the same options and also specify those options at
--- 13510,13529 ----
  .Sp
  With \fB\-flto\fR this option has a limited use.  In most cases the
  precise list of symbols used or exported from the binary is known the
! resolution info passed to the link\-time optimizer by the linker plugin.  It is
  still useful if no linker plugin is used or during incremental link step when
  final code is produced (with \fB\-flto\fR
  \&\fB\-flinker\-output=nolto\-rel\fR).
! .IP \fB\-flto[=\fR\fIn\fR\fB]\fR 4
  .IX Item "-flto[=n]"
! This option runs the standard link\-time optimizer.  When invoked
! with source code, it generates GIMPLE (one of GCC\*(Aqs internal
! representations) and writes it to special ELF sections in the object
  file.  When the object files are linked together, all the function
! bodies are read from these ELF sections and instantiated as if they
  had been part of the same translation unit.
  .Sp
! To use the link\-time optimizer, \fB\-flto\fR and optimization
  options should be specified at compile time and during the final link.
  It is recommended that you compile all the files participating in the
  same link with the same options and also specify those options at
*************** For example:
*** 13603,13641 ****
  \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
  .Ve
  .Sp
! The first two invocations to \s-1GCC\s0 save a bytecode representation
! of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
! \&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
  \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
  internal image, and compiles the result as usual.  Since both
  \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
! causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
  work across the two files as if they were a single one.  This means,
  for example, that the inliner is able to inline functions in
! \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
  .Sp
! Another (simpler) way to enable link-time optimization is:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
  .Ve
  .Sp
  The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
! merges them together into a single \s-1GIMPLE\s0 representation and optimizes
  them as usual to produce \fImyprog\fR.
  .Sp
! The important thing to keep in mind is that to enable link-time
! optimizations you need to use the \s-1GCC\s0 driver to perform the link step.
! \&\s-1GCC\s0 automatically performs link-time optimization if any of the
! objects involved were compiled with the \fB\-flto\fR command-line option.  
  You can always override
! the automatic decision to do link-time optimization
  by passing \fB\-fno\-lto\fR to the link command.
  .Sp
  To make whole program optimization effective, it is necessary to make
  certain whole program assumptions.  The compiler needs to know
  what functions and variables can be accessed by libraries and runtime
! outside of the link-time optimized unit.  When supported by the linker,
  the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
  to the compiler about used and externally visible symbols.  When
  the linker plugin is not available, \fB\-fwhole\-program\fR should be
--- 13536,13574 ----
  \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
  .Ve
  .Sp
! The first two invocations to GCC save a bytecode representation
! of GIMPLE into special ELF sections inside \fIfoo.o\fR and
! \&\fIbar.o\fR.  The final invocation reads the GIMPLE bytecode from
  \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
  internal image, and compiles the result as usual.  Since both
  \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
! causes all the interprocedural analyses and optimizations in GCC to
  work across the two files as if they were a single one.  This means,
  for example, that the inliner is able to inline functions in
! \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice\-versa.
  .Sp
! Another (simpler) way to enable link\-time optimization is:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
  .Ve
  .Sp
  The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
! merges them together into a single GIMPLE representation and optimizes
  them as usual to produce \fImyprog\fR.
  .Sp
! The important thing to keep in mind is that to enable link\-time
! optimizations you need to use the GCC driver to perform the link step.
! GCC automatically performs link\-time optimization if any of the
! objects involved were compiled with the \fB\-flto\fR command\-line option.  
  You can always override
! the automatic decision to do link\-time optimization
  by passing \fB\-fno\-lto\fR to the link command.
  .Sp
  To make whole program optimization effective, it is necessary to make
  certain whole program assumptions.  The compiler needs to know
  what functions and variables can be accessed by libraries and runtime
! outside of the link\-time optimized unit.  When supported by the linker,
  the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
  to the compiler about used and externally visible symbols.  When
  the linker plugin is not available, \fB\-fwhole\-program\fR should be
*************** to more aggressive optimization decision
*** 13644,13670 ****
  .Sp
  When a file is compiled with \fB\-flto\fR without
  \&\fB\-fuse\-linker\-plugin\fR, the generated object file is larger than
! a regular object file because it contains \s-1GIMPLE\s0 bytecodes and the usual
  final code (see \fB\-ffat\-lto\-objects\fR).  This means that
! object files with \s-1LTO\s0 information can be linked as normal object
  files; if \fB\-fno\-lto\fR is passed to the linker, no
  interprocedural optimizations are applied.  Note that when
  \&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile stage is faster
! but you cannot perform a regular, non-LTO link on them.
  .Sp
! When producing the final binary, \s-1GCC\s0 only
! applies link-time optimizations to those files that contain bytecode.
  Therefore, you can mix and match object files and libraries with
! \&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
! which files to optimize in \s-1LTO\s0 mode and which files to link without
  further processing.
  .Sp
  Generally, options specified at link time override those
! specified at compile time, although in some cases \s-1GCC\s0 attempts to infer
! link-time options from the settings used to compile the input files.
  .Sp
  If you do not specify an optimization level option \fB\-O\fR at
! link time, then \s-1GCC\s0 uses the highest optimization level 
  used when compiling the object files.  Note that it is generally 
  ineffective to specify an optimization level option only at link time and 
  not at compile time, for two reasons.  First, compiling without 
--- 13577,13603 ----
  .Sp
  When a file is compiled with \fB\-flto\fR without
  \&\fB\-fuse\-linker\-plugin\fR, the generated object file is larger than
! a regular object file because it contains GIMPLE bytecodes and the usual
  final code (see \fB\-ffat\-lto\-objects\fR).  This means that
! object files with LTO information can be linked as normal object
  files; if \fB\-fno\-lto\fR is passed to the linker, no
  interprocedural optimizations are applied.  Note that when
  \&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile stage is faster
! but you cannot perform a regular, non\-LTO link on them.
  .Sp
! When producing the final binary, GCC only
! applies link\-time optimizations to those files that contain bytecode.
  Therefore, you can mix and match object files and libraries with
! GIMPLE bytecodes and final object code.  GCC automatically selects
! which files to optimize in LTO mode and which files to link without
  further processing.
  .Sp
  Generally, options specified at link time override those
! specified at compile time, although in some cases GCC attempts to infer
! link\-time options from the settings used to compile the input files.
  .Sp
  If you do not specify an optimization level option \fB\-O\fR at
! link time, then GCC uses the highest optimization level 
  used when compiling the object files.  Note that it is generally 
  ineffective to specify an optimization level option only at link time and 
  not at compile time, for two reasons.  First, compiling without 
*************** needed for effective optimization at lin
*** 13673,13679 ****
  optimization passes can be performed only at compile time and 
  not at link time.
  .Sp
! There are some code generation flags preserved by \s-1GCC\s0 when
  generating bytecodes, as they need to be used during the final link.
  Currently, the following options and their settings are taken from
  the first object file that explicitly specifies them: 
--- 13606,13612 ----
  optimization passes can be performed only at compile time and 
  not at link time.
  .Sp
! There are some code generation flags preserved by GCC when
  generating bytecodes, as they need to be used during the final link.
  Currently, the following options and their settings are taken from
  the first object file that explicitly specifies them: 
*************** The following options \fB\-fPIC\fR, \fB\
*** 13692,13698 ****
  \&        B<\-fPIC/\-fpic> + B<\-fpie> = B<\-fpie>
  .Ve
  .Sp
! Certain ABI-changing flags are required to match in all compilation units,
  and trying to override this at link time with a conflicting value
  is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
  and \fB\-fpcc\-struct\-return\fR.
--- 13625,13631 ----
  \&        B<\-fPIC/\-fpic> + B<\-fpie> = B<\-fpie>
  .Ve
  .Sp
! Certain ABI\-changing flags are required to match in all compilation units,
  and trying to override this at link time with a conflicting value
  is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
  and \fB\-fpcc\-struct\-return\fR.
*************** over \fB\-ffp\-contract=fast\fR.  You ca
*** 13707,13713 ****
  .Sp
  Diagnostic options such as \fB\-Wstringop\-overflow\fR are passed
  through to the link stage and their setting matches that of the
! compile-step at function granularity.  Note that this matters only
  for diagnostics emitted during optimization.  Note that code
  transforms such as inlining can lead to warnings being enabled
  or disabled for regions if code not consistent with the setting
--- 13640,13646 ----
  .Sp
  Diagnostic options such as \fB\-Wstringop\-overflow\fR are passed
  through to the link stage and their setting matches that of the
! compile\-step at function granularity.  Note that this matters only
  for diagnostics emitted during optimization.  Note that code
  transforms such as inlining can lead to warnings being enabled
  or disabled for regions if code not consistent with the setting
*************** When you need to pass options to the ass
*** 13717,13723 ****
  \&\fB\-Xassembler\fR make sure to either compile such translation
  units with \fB\-fno\-lto\fR or consistently use the same assembler
  options on all translation units.  You can alternatively also
! specify assembler options at \s-1LTO\s0 link time.
  .Sp
  To enable debug info generation you need to supply \fB\-g\fR at
  compile time.  If any of the input files at link time were built
--- 13650,13656 ----
  \&\fB\-Xassembler\fR make sure to either compile such translation
  units with \fB\-fno\-lto\fR or consistently use the same assembler
  options on all translation units.  You can alternatively also
! specify assembler options at LTO link time.
  .Sp
  To enable debug info generation you need to supply \fB\-g\fR at
  compile time.  If any of the input files at link time were built
*************** like the dwarf level \fB\-gdwarf\-5\fR n
*** 13727,13739 ****
  at the linker command line and mixing different settings in different
  translation units is discouraged.
  .Sp
! If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
  types in separate translation units to be linked together (undefined
! behavior according to \s-1ISO C99 6.2.7\s0), a non-fatal diagnostic may be
  issued.  The behavior is still undefined at run time.  Similar
  diagnostics may be raised for other languages.
  .Sp
! Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
  optimizations on files written in different languages:
  .Sp
  .Vb 4
--- 13660,13672 ----
  at the linker command line and mixing different settings in different
  translation units is discouraged.
  .Sp
! If LTO encounters objects with C linkage declared with incompatible
  types in separate translation units to be linked together (undefined
! behavior according to ISO C99 6.2.7), a non\-fatal diagnostic may be
  issued.  The behavior is still undefined at run time.  Similar
  diagnostics may be raised for other languages.
  .Sp
! Another feature of LTO is that it is possible to apply interprocedural
  optimizations on files written in different languages:
  .Sp
  .Vb 4
*************** optimizations on files written in differ
*** 13743,13781 ****
  \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
  .Ve
  .Sp
! Notice that the final link is done with \fBg++\fR to get the \*(C+
  runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
! runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
  should use the same link command options as when mixing languages in a
! regular (non-LTO) compilation.
  .Sp
! If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
! \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
  are using a linker with plugin support.  To create static libraries suitable
! for \s-1LTO,\s0 use \fBgcc-ar\fR and \fBgcc-ranlib\fR instead of \fBar\fR
  and \fBranlib\fR; 
! to show the symbols of object files with \s-1GIMPLE\s0 bytecode, use
! \&\fBgcc-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
  and \fBnm\fR have been compiled with plugin support.  At link time, use the
  flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
! the \s-1LTO\s0 optimization process:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
  .Ve
  .Sp
  With the linker plugin enabled, the linker extracts the needed
! \&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
! to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
  .Sp
  If you are not using a linker with plugin support and/or do not
  enable the linker plugin, then the objects inside \fIlibfoo.a\fR
  are extracted and linked as usual, but they do not participate
! in the \s-1LTO\s0 optimization process.  In order to make a static library suitable
! for both \s-1LTO\s0 optimization and usual linkage, compile its object files with
  \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
  .Sp
! Link-time optimizations do not require the presence of the whole program to
  operate.  If the program does not require any symbols to be exported, it is
  possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
  the interprocedural optimizers to use more aggressive assumptions which may
--- 13676,13714 ----
  \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
  .Ve
  .Sp
! Notice that the final link is done with \fBg++\fR to get the C++
  runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
! runtime libraries.  In general, when mixing languages in LTO mode, you
  should use the same link command options as when mixing languages in a
! regular (non\-LTO) compilation.
  .Sp
! If object files containing GIMPLE bytecode are stored in a library archive, say
! \&\fIlibfoo.a\fR, it is possible to extract and use them in an LTO link if you
  are using a linker with plugin support.  To create static libraries suitable
! for LTO, use \fBgcc\-ar\fR and \fBgcc\-ranlib\fR instead of \fBar\fR
  and \fBranlib\fR; 
! to show the symbols of object files with GIMPLE bytecode, use
! \&\fBgcc\-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
  and \fBnm\fR have been compiled with plugin support.  At link time, use the
  flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
! the LTO optimization process:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
  .Ve
  .Sp
  With the linker plugin enabled, the linker extracts the needed
! GIMPLE files from \fIlibfoo.a\fR and passes them on to the running GCC
! to make them part of the aggregated GIMPLE image to be optimized.
  .Sp
  If you are not using a linker with plugin support and/or do not
  enable the linker plugin, then the objects inside \fIlibfoo.a\fR
  are extracted and linked as usual, but they do not participate
! in the LTO optimization process.  In order to make a static library suitable
! for both LTO optimization and usual linkage, compile its object files with
  \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
  .Sp
! Link\-time optimizations do not require the presence of the whole program to
  operate.  If the program does not require any symbols to be exported, it is
  possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
  the interprocedural optimizers to use more aggressive assumptions which may
*************** lead to improved optimization opportunit
*** 13783,13818 ****
  Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
  active (see \fB\-fuse\-linker\-plugin\fR).
  .Sp
! The current implementation of \s-1LTO\s0 makes no
  attempt to generate bytecode that is portable between different
  types of hosts.  The bytecode files are versioned and there is a
  strict version check, so bytecode files generated in one version of
! \&\s-1GCC\s0 do not work with an older or newer version of \s-1GCC.\s0
  .Sp
! Link-time optimization does not work well with generation of debugging
! information on systems other than those using a combination of \s-1ELF\s0 and
! \&\s-1DWARF.\s0
  .Sp
  If you specify the optional \fIn\fR, the optimization and code
  generation done at link time is executed in parallel using \fIn\fR
  parallel jobs by utilizing an installed \fBmake\fR program.  The
! environment variable \fB\s-1MAKE\s0\fR may be used to override the program
  used.
  .Sp
! You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
  job server mode to determine the number of parallel jobs. This
! is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
  You must prepend a \fB+\fR to the command recipe in the parent Makefile
! for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
! \&\s-1GNU\s0 make.  Even without the option value, \s-1GCC\s0 tries to automatically
! detect a running \s-1GNU\s0 make's job server.
  .Sp
! Use \fB\-flto=auto\fR to use \s-1GNU\s0 make's job server, if available,
! or otherwise fall back to autodetection of the number of \s-1CPU\s0 threads
  present in your system.
! .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
  .IX Item "-flto-partition=alg"
! Specify the partitioning algorithm used by the link-time optimizer.
  The value is either \fB1to1\fR to specify a partitioning mirroring
  the original source files or \fBbalanced\fR to specify partitioning
  into equally sized chunks (whenever possible) or \fBmax\fR to create
--- 13716,13751 ----
  Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
  active (see \fB\-fuse\-linker\-plugin\fR).
  .Sp
! The current implementation of LTO makes no
  attempt to generate bytecode that is portable between different
  types of hosts.  The bytecode files are versioned and there is a
  strict version check, so bytecode files generated in one version of
! GCC do not work with an older or newer version of GCC.
  .Sp
! Link\-time optimization does not work well with generation of debugging
! information on systems other than those using a combination of ELF and
! DWARF.
  .Sp
  If you specify the optional \fIn\fR, the optimization and code
  generation done at link time is executed in parallel using \fIn\fR
  parallel jobs by utilizing an installed \fBmake\fR program.  The
! environment variable \fBMAKE\fR may be used to override the program
  used.
  .Sp
! You can also specify \fB\-flto=jobserver\fR to use GNU make\*(Aqs
  job server mode to determine the number of parallel jobs. This
! is useful when the Makefile calling GCC is already executing in parallel.
  You must prepend a \fB+\fR to the command recipe in the parent Makefile
! for this to work.  This option likely only works if \fBMAKE\fR is
! GNU make.  Even without the option value, GCC tries to automatically
! detect a running GNU make\*(Aqs job server.
  .Sp
! Use \fB\-flto=auto\fR to use GNU make\*(Aqs job server, if available,
! or otherwise fall back to autodetection of the number of CPU threads
  present in your system.
! .IP \fB\-flto\-partition=\fR\fIalg\fR 4
  .IX Item "-flto-partition=alg"
! Specify the partitioning algorithm used by the link\-time optimizer.
  The value is either \fB1to1\fR to specify a partitioning mirroring
  the original source files or \fBbalanced\fR to specify partitioning
  into equally sized chunks (whenever possible) or \fBmax\fR to create
*************** as an workaround for various code orderi
*** 13823,13883 ****
  partitioning is intended for internal testing only.
  The value \fBone\fR specifies that exactly one partition should be
  used while the value \fBnone\fR bypasses partitioning and executes
! the link-time optimization step directly from the \s-1WPA\s0 phase.
! .IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
  .IX Item "-flto-compression-level=n"
  This option specifies the level of compression used for intermediate
! language written to \s-1LTO\s0 object files, and is only meaningful in
! conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  \s-1GCC\s0 currently supports two
! \&\s-1LTO\s0 compression algorithms. For zstd, valid values are 0 (no compression)
  to 19 (maximum compression), while zlib supports values from 0 to 9.
  Values outside this range are clamped to either minimum or maximum
  of the supported values.  If the option is not given,
  a default balanced compression setting is used.
! .IP "\fB\-fuse\-linker\-plugin\fR" 4
  .IX Item "-fuse-linker-plugin"
! Enables the use of a linker plugin during link-time optimization.  This
  option relies on plugin support in the linker, which is available in gold
! or in \s-1GNU\s0 ld 2.21 or newer.
  .Sp
! This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
  of library archives. This improves the quality of optimization by exposing
! more code to the link-time optimizer.  This information specifies what
! symbols can be accessed externally (by non-LTO object or during dynamic
  linking).  Resulting code quality improvements on binaries (and shared
  libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
  See \fB\-flto\fR for a description of the effect of this flag and how to
  use it.
  .Sp
! This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
! and \s-1GCC\s0 was configured for use with
! a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
! .IP "\fB\-ffat\-lto\-objects\fR" 4
  .IX Item "-ffat-lto-objects"
! Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
! and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
  linking. This option is effective only when compiling with \fB\-flto\fR
  and is ignored at link time.
  .Sp
! \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO,\s0 but
! requires the complete toolchain to be aware of \s-1LTO.\s0 It requires a linker with
  linker plugin support for basic functionality.  Additionally,
  \&\fBnm\fR, \fBar\fR and \fBranlib\fR
! need to support linker plugins to allow a full-featured build environment
! (capable of building static libraries etc).  \s-1GCC\s0 provides the \fBgcc-ar\fR,
! \&\fBgcc-nm\fR, \fBgcc-ranlib\fR wrappers to pass the right options
! to these tools. With non fat \s-1LTO\s0 makefiles need to be modified to use them.
  .Sp
! Note that modern binutils provide plugin auto-load mechanism.
! Installing the linker plugin into \fI\f(CI$libdir\fI/bfd\-plugins\fR has the same
! effect as usage of the command wrappers (\fBgcc-ar\fR, \fBgcc-nm\fR and
! \&\fBgcc-ranlib\fR).
  .Sp
  The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
  support.
! .IP "\fB\-fcompare\-elim\fR" 4
  .IX Item "-fcompare-elim"
! After register allocation and post-register allocation instruction splitting,
  identify arithmetic instructions that compute processor flags similar to a
  comparison operation based on that arithmetic.  If possible, eliminate the
  explicit comparison operation.
--- 13756,13816 ----
  partitioning is intended for internal testing only.
  The value \fBone\fR specifies that exactly one partition should be
  used while the value \fBnone\fR bypasses partitioning and executes
! the link\-time optimization step directly from the WPA phase.
! .IP \fB\-flto\-compression\-level=\fR\fIn\fR 4
  .IX Item "-flto-compression-level=n"
  This option specifies the level of compression used for intermediate
! language written to LTO object files, and is only meaningful in
! conjunction with LTO mode (\fB\-flto\fR).  GCC currently supports two
! LTO compression algorithms. For zstd, valid values are 0 (no compression)
  to 19 (maximum compression), while zlib supports values from 0 to 9.
  Values outside this range are clamped to either minimum or maximum
  of the supported values.  If the option is not given,
  a default balanced compression setting is used.
! .IP \fB\-fuse\-linker\-plugin\fR 4
  .IX Item "-fuse-linker-plugin"
! Enables the use of a linker plugin during link\-time optimization.  This
  option relies on plugin support in the linker, which is available in gold
! or in GNU ld 2.21 or newer.
  .Sp
! This option enables the extraction of object files with GIMPLE bytecode out
  of library archives. This improves the quality of optimization by exposing
! more code to the link\-time optimizer.  This information specifies what
! symbols can be accessed externally (by non\-LTO object or during dynamic
  linking).  Resulting code quality improvements on binaries (and shared
  libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
  See \fB\-flto\fR for a description of the effect of this flag and how to
  use it.
  .Sp
! This option is enabled by default when LTO support in GCC is enabled
! and GCC was configured for use with
! a linker supporting plugins (GNU ld 2.21 or newer or gold).
! .IP \fB\-ffat\-lto\-objects\fR 4
  .IX Item "-ffat-lto-objects"
! Fat LTO objects are object files that contain both the intermediate language
! and the object code. This makes them usable for both LTO linking and normal
  linking. This option is effective only when compiling with \fB\-flto\fR
  and is ignored at link time.
  .Sp
! \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain LTO, but
! requires the complete toolchain to be aware of LTO. It requires a linker with
  linker plugin support for basic functionality.  Additionally,
  \&\fBnm\fR, \fBar\fR and \fBranlib\fR
! need to support linker plugins to allow a full\-featured build environment
! (capable of building static libraries etc).  GCC provides the \fBgcc\-ar\fR,
! \&\fBgcc\-nm\fR, \fBgcc\-ranlib\fR wrappers to pass the right options
! to these tools. With non fat LTO makefiles need to be modified to use them.
  .Sp
! Note that modern binutils provide plugin auto\-load mechanism.
! Installing the linker plugin into \fR\f(CI$libdir\fR\fI/bfd\-plugins\fR has the same
! effect as usage of the command wrappers (\fBgcc\-ar\fR, \fBgcc\-nm\fR and
! \&\fBgcc\-ranlib\fR).
  .Sp
  The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
  support.
! .IP \fB\-fcompare\-elim\fR 4
  .IX Item "-fcompare-elim"
! After register allocation and post\-register allocation instruction splitting,
  identify arithmetic instructions that compute processor flags similar to a
  comparison operation based on that arithmetic.  If possible, eliminate the
  explicit comparison operation.
*************** This pass only applies to certain target
*** 13886,13916 ****
  the comparison operation before register allocation is complete.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-ffold\-mem\-offsets\fR" 4
  .IX Item "-ffold-mem-offsets"
  .PD 0
! .IP "\fB\-fno\-fold\-mem\-offsets\fR" 4
  .IX Item "-fno-fold-mem-offsets"
  .PD
  Try to eliminate add instructions by folding them in memory loads/stores.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-fcprop\-registers\fR" 4
  .IX Item "-fcprop-registers"
! After register allocation and post-register allocation instruction splitting,
! perform a copy-propagation pass to try to reduce scheduling dependencies
  and occasionally eliminate the copy.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fprofile\-correction\fR" 4
  .IX Item "-fprofile-correction"
! Profiles collected using an instrumented binary for multi-threaded programs may
  be inconsistent due to missed counter updates. When this option is specified,
! \&\s-1GCC\s0 uses heuristics to correct or smooth out such inconsistencies. By
! default, \s-1GCC\s0 emits an error message when an inconsistent profile is detected.
  .Sp
  This option is enabled by \fB\-fauto\-profile\fR.
! .IP "\fB\-fprofile\-partial\-training\fR" 4
  .IX Item "-fprofile-partial-training"
  With \f(CW\*(C`\-fprofile\-use\*(C'\fR all portions of programs not executed during train
  run are optimized agressively for size rather than speed.  In some cases it is
--- 13819,13849 ----
  the comparison operation before register allocation is complete.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-ffold\-mem\-offsets\fR 4
  .IX Item "-ffold-mem-offsets"
  .PD 0
! .IP \fB\-fno\-fold\-mem\-offsets\fR 4
  .IX Item "-fno-fold-mem-offsets"
  .PD
  Try to eliminate add instructions by folding them in memory loads/stores.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-fcprop\-registers\fR 4
  .IX Item "-fcprop-registers"
! After register allocation and post\-register allocation instruction splitting,
! perform a copy\-propagation pass to try to reduce scheduling dependencies
  and occasionally eliminate the copy.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fprofile\-correction\fR 4
  .IX Item "-fprofile-correction"
! Profiles collected using an instrumented binary for multi\-threaded programs may
  be inconsistent due to missed counter updates. When this option is specified,
! GCC uses heuristics to correct or smooth out such inconsistencies. By
! default, GCC emits an error message when an inconsistent profile is detected.
  .Sp
  This option is enabled by \fB\-fauto\-profile\fR.
! .IP \fB\-fprofile\-partial\-training\fR 4
  .IX Item "-fprofile-partial-training"
  With \f(CW\*(C`\-fprofile\-use\*(C'\fR all portions of programs not executed during train
  run are optimized agressively for size rather than speed.  In some cases it is
*************** functions not executed during the train
*** 13922,13934 ****
  they were compiled without profile feedback. This leads to better performance
  when train run is not representative but also leads to significantly bigger
  code.
! .IP "\fB\-fprofile\-use\fR" 4
  .IX Item "-fprofile-use"
  .PD 0
! .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
  .IX Item "-fprofile-use=path"
  .PD
! Enable profile feedback-directed optimizations, 
  and the following optimizations, many of which
  are generally profitable only with profile feedback available:
  .Sp
--- 13855,13867 ----
  they were compiled without profile feedback. This leads to better performance
  when train run is not representative but also leads to significantly bigger
  code.
! .IP \fB\-fprofile\-use\fR 4
  .IX Item "-fprofile-use"
  .PD 0
! .IP \fB\-fprofile\-use=\fR\fIpath\fR 4
  .IX Item "-fprofile-use=path"
  .PD
! Enable profile feedback\-directed optimizations, 
  and the following optimizations, many of which
  are generally profitable only with profile feedback available:
  .Sp
*************** are generally profitable only with profi
*** 13942,13962 ****
  .Sp
  Before you can use this option, you must first generate profiling information.
  .Sp
! By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
  match the source code.  This error can be turned into a warning by using
  \&\fB\-Wno\-error=coverage\-mismatch\fR.  Note this may result in poorly
! optimized code.  Additionally, by default, \s-1GCC\s0 also emits a warning message if
  the feedback profiles do not exist (see \fB\-Wmissing\-profile\fR).
  .Sp
! If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
! .IP "\fB\-fauto\-profile\fR" 4
  .IX Item "-fauto-profile"
  .PD 0
! .IP "\fB\-fauto\-profile=\fR\fIpath\fR" 4
  .IX Item "-fauto-profile=path"
  .PD
! Enable sampling-based feedback-directed optimizations, 
  and the following optimizations,
  many of which are generally profitable only with profile feedback available:
  .Sp
--- 13875,13895 ----
  .Sp
  Before you can use this option, you must first generate profiling information.
  .Sp
! By default, GCC emits an error message if the feedback profiles do not
  match the source code.  This error can be turned into a warning by using
  \&\fB\-Wno\-error=coverage\-mismatch\fR.  Note this may result in poorly
! optimized code.  Additionally, by default, GCC also emits a warning message if
  the feedback profiles do not exist (see \fB\-Wmissing\-profile\fR).
  .Sp
! If \fIpath\fR is specified, GCC looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
! .IP \fB\-fauto\-profile\fR 4
  .IX Item "-fauto-profile"
  .PD 0
! .IP \fB\-fauto\-profile=\fR\fIpath\fR 4
  .IX Item "-fauto-profile=path"
  .PD
! Enable sampling\-based feedback\-directed optimizations, 
  and the following optimizations,
  many of which are generally profitable only with profile feedback available:
  .Sp
*************** E.g.
*** 13983,13989 ****
  .Ve
  .Sp
  Then use the \fBcreate_gcov\fR tool to convert the raw profile data
! to a format that can be used by \s-1GCC.\s0  You must also supply the 
  unstripped binary for your program to this tool.  
  See <\fBhttps://github.com/google/autofdo\fR>.
  .Sp
--- 13916,13922 ----
  .Ve
  .Sp
  Then use the \fBcreate_gcov\fR tool to convert the raw profile data
! to a format that can be used by GCC.  You must also supply the 
  unstripped binary for your program to this tool.  
  See <\fBhttps://github.com/google/autofdo\fR>.
  .Sp
*************** E.g.
*** 13994,14029 ****
  \&            \-\-gcov=profile.afdo
  .Ve
  .PP
! The following options control compiler behavior regarding floating-point 
  arithmetic.  These options trade off between speed and
  correctness.  All must be specifically enabled.
! .IP "\fB\-ffloat\-store\fR" 4
  .IX Item "-ffloat-store"
! Do not store floating-point variables in registers, and inhibit other
! options that might change whether a floating-point value is taken from a
  register or memory.
  .Sp
  This option prevents undesirable excess precision on machines such as
  the 68000 where the floating registers (of the 68881) keep more
  precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
  x86 architecture.  For most programs, the excess precision does only
! good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
  point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
  them to store all pertinent intermediate computations into variables.
! .IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
  .IX Item "-fexcess-precision=style"
  This option allows further control over excess precision on machines
! where floating-point operations occur in a format with more precision or
! range than the \s-1IEEE\s0 standard and interchange floating-point types.  By
  default, \fB\-fexcess\-precision=fast\fR is in effect; this means that
  operations may be carried out in a wider precision than the types specified
  in the source if that would result in faster code, and it is unpredictable
  when rounding to the types specified in the source code takes place.
! When compiling C or \*(C+, if \fB\-fexcess\-precision=standard\fR is specified
! then excess precision follows the rules specified in \s-1ISO C99\s0 or \*(C+; in particular,
  both casts and assignments cause values to be rounded to their
  semantic types (whereas \fB\-ffloat\-store\fR only affects
! assignments).  This option is enabled by default for C or \*(C+ if a strict
  conformance option such as \fB\-std=c99\fR or \fB\-std=c++17\fR is used.
  \&\fB\-ffast\-math\fR enables \fB\-fexcess\-precision=fast\fR by default
  regardless of whether a strict conformance option is used.
--- 13927,13962 ----
  \&            \-\-gcov=profile.afdo
  .Ve
  .PP
! The following options control compiler behavior regarding floating\-point 
  arithmetic.  These options trade off between speed and
  correctness.  All must be specifically enabled.
! .IP \fB\-ffloat\-store\fR 4
  .IX Item "-ffloat-store"
! Do not store floating\-point variables in registers, and inhibit other
! options that might change whether a floating\-point value is taken from a
  register or memory.
  .Sp
  This option prevents undesirable excess precision on machines such as
  the 68000 where the floating registers (of the 68881) keep more
  precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
  x86 architecture.  For most programs, the excess precision does only
! good, but a few programs rely on the precise definition of IEEE floating
  point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
  them to store all pertinent intermediate computations into variables.
! .IP \fB\-fexcess\-precision=\fR\fIstyle\fR 4
  .IX Item "-fexcess-precision=style"
  This option allows further control over excess precision on machines
! where floating\-point operations occur in a format with more precision or
! range than the IEEE standard and interchange floating\-point types.  By
  default, \fB\-fexcess\-precision=fast\fR is in effect; this means that
  operations may be carried out in a wider precision than the types specified
  in the source if that would result in faster code, and it is unpredictable
  when rounding to the types specified in the source code takes place.
! When compiling C or C++, if \fB\-fexcess\-precision=standard\fR is specified
! then excess precision follows the rules specified in ISO C99 or C++; in particular,
  both casts and assignments cause values to be rounded to their
  semantic types (whereas \fB\-ffloat\-store\fR only affects
! assignments).  This option is enabled by default for C or C++ if a strict
  conformance option such as \fB\-std=c99\fR or \fB\-std=c++17\fR is used.
  \&\fB\-ffast\-math\fR enables \fB\-fexcess\-precision=fast\fR by default
  regardless of whether a strict conformance option is used.
*************** results of expressions with types \f(CW\
*** 14032,14042 ****
  are computed without excess precision.
  .Sp
  \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
! other than C or \*(C+.  On the x86, it has no effect if \fB\-mfpmath=sse\fR
! or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
  semantics apply without excess precision, and in the latter, rounding
  is unpredictable.
! .IP "\fB\-ffast\-math\fR" 4
  .IX Item "-ffast-math"
  Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
--- 13965,13975 ----
  are computed without excess precision.
  .Sp
  \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
! other than C or C++.  On the x86, it has no effect if \fB\-mfpmath=sse\fR
! or \fB\-mfpmath=sse+387\fR is specified; in the former case, IEEE
  semantics apply without excess precision, and in the latter, rounding
  is unpredictable.
! .IP \fB\-ffast\-math\fR 4
  .IX Item "-ffast-math"
  Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
*************** This option causes the preprocessor macr
*** 14047,14065 ****
  .Sp
  This option is not turned on by any \fB\-O\fR option besides
  \&\fB\-Ofast\fR since it can result in incorrect output for programs
! that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
  for math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
! .IP "\fB\-fno\-math\-errno\fR" 4
  .IX Item "-fno-math-errno"
  Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
  with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
! \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
! for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
--- 13980,13998 ----
  .Sp
  This option is not turned on by any \fB\-O\fR option besides
  \&\fB\-Ofast\fR since it can result in incorrect output for programs
! that depend on an exact implementation of IEEE or ISO rules/specifications
  for math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
! .IP \fB\-fno\-math\-errno\fR 4
  .IX Item "-fno-math-errno"
  Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
  with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
! IEEE exceptions for math error handling may want to use this flag
! for speed while maintaining IEEE arithmetic compatibility.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
*************** The default is \fB\-fmath\-errno\fR.
*** 14068,14107 ****
  On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
  therefore no reason for the compiler to consider the possibility that
  it might, and \fB\-fno\-math\-errno\fR is the default.
! .IP "\fB\-funsafe\-math\-optimizations\fR" 4
  .IX Item "-funsafe-math-optimizations"
! Allow optimizations for floating-point arithmetic that (a) assume
! that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
! \&\s-1ANSI\s0 standards.  When used at link time, it may include libraries
! or startup files that change the default \s-1FPU\s0 control word or other
  similar optimizations.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
  \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
  .Sp
  The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
! .IP "\fB\-fassociative\-math\fR" 4
  .IX Item "-fassociative-math"
! Allow re-association of operands in series of floating-point operations.
! This violates the \s-1ISO C\s0 and \*(C+ language standard by possibly changing
! computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
  well as ignore NaNs and inhibit or create underflow or overflow (and
  thus cannot be used on code that relies on rounding behavior like
! \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
  and thus may not be used when ordered comparisons are required.
  This option requires that both \fB\-fno\-signed\-zeros\fR and
! \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
  much sense with \fB\-frounding\-math\fR. For Fortran the option
  is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
  \&\fB\-fno\-trapping\-math\fR are in effect.
  .Sp
  The default is \fB\-fno\-associative\-math\fR.
! .IP "\fB\-freciprocal\-math\fR" 4
  .IX Item "-freciprocal-math"
  Allow the reciprocal of a value to be used instead of dividing by
  the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
--- 14001,14040 ----
  On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
  therefore no reason for the compiler to consider the possibility that
  it might, and \fB\-fno\-math\-errno\fR is the default.
! .IP \fB\-funsafe\-math\-optimizations\fR 4
  .IX Item "-funsafe-math-optimizations"
! Allow optimizations for floating\-point arithmetic that (a) assume
! that arguments and results are valid and (b) may violate IEEE or
! ANSI standards.  When used at link time, it may include libraries
! or startup files that change the default FPU control word or other
  similar optimizations.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
  \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
  .Sp
  The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
! .IP \fB\-fassociative\-math\fR 4
  .IX Item "-fassociative-math"
! Allow re\-association of operands in series of floating\-point operations.
! This violates the ISO C and C++ language standard by possibly changing
! computation result.  NOTE: re\-ordering may change the sign of zero as
  well as ignore NaNs and inhibit or create underflow or overflow (and
  thus cannot be used on code that relies on rounding behavior like
! \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating\-point comparisons
  and thus may not be used when ordered comparisons are required.
  This option requires that both \fB\-fno\-signed\-zeros\fR and
! \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn\*(Aqt make
  much sense with \fB\-frounding\-math\fR. For Fortran the option
  is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
  \&\fB\-fno\-trapping\-math\fR are in effect.
  .Sp
  The default is \fB\-fno\-associative\-math\fR.
! .IP \fB\-freciprocal\-math\fR 4
  .IX Item "-freciprocal-math"
  Allow the reciprocal of a value to be used instead of dividing by
  the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
*************** is subject to common subexpression elimi
*** 14110,14179 ****
  precision and increases the number of flops operating on the value.
  .Sp
  The default is \fB\-fno\-reciprocal\-math\fR.
! .IP "\fB\-ffinite\-math\-only\fR" 4
  .IX Item "-ffinite-math-only"
! Allow optimizations for floating-point arithmetic that assume
  that arguments and results are not NaNs or +\-Infs.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
  The default is \fB\-fno\-finite\-math\-only\fR.
! .IP "\fB\-fno\-signed\-zeros\fR" 4
  .IX Item "-fno-signed-zeros"
! Allow optimizations for floating-point arithmetic that ignore the
! signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
  distinct +0.0 and \-0.0 values, which then prohibits simplification
  of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
! This option implies that the sign of a zero result isn't significant.
  .Sp
  The default is \fB\-fsigned\-zeros\fR.
! .IP "\fB\-fno\-trapping\-math\fR" 4
  .IX Item "-fno-trapping-math"
! Compile code assuming that floating-point operations cannot generate
! user-visible traps.  These traps include division by zero, overflow,
  underflow, inexact result and invalid operation.  This option requires
  that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
! allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
  .Sp
  This option should never be turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions.
  .Sp
  The default is \fB\-ftrapping\-math\fR.
  .Sp
! Future versions of \s-1GCC\s0 may provide finer control of this setting
! using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
  will be used along with \fB\-frounding\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP "\fB\-frounding\-math\fR" 4
  .IX Item "-frounding-math"
! Disable transformations and optimizations that assume default floating-point
! rounding behavior.  This is round-to-zero for all floating point
! to integer conversions, and round-to-nearest for all other arithmetic
  truncations.  This option should be specified for programs that change
! the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
! non-default rounding mode.  This option disables constant folding of
! floating-point expressions at compile time (which may be affected by
  rounding mode) and arithmetic transformations that are unsafe in the
! presence of sign-dependent rounding modes.
  .Sp
  The default is \fB\-fno\-rounding\-math\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
! Future versions of \s-1GCC\s0 may provide finer control of this setting
! using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
  will be used along with \fB\-ftrapping\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP "\fB\-fsignaling\-nans\fR" 4
  .IX Item "-fsignaling-nans"
! Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
! traps during floating-point operations.  Setting this option disables
  optimizations that may change the number of exceptions visible with
  signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
  .Sp
--- 14043,14112 ----
  precision and increases the number of flops operating on the value.
  .Sp
  The default is \fB\-fno\-reciprocal\-math\fR.
! .IP \fB\-ffinite\-math\-only\fR 4
  .IX Item "-ffinite-math-only"
! Allow optimizations for floating\-point arithmetic that assume
  that arguments and results are not NaNs or +\-Infs.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
  The default is \fB\-fno\-finite\-math\-only\fR.
! .IP \fB\-fno\-signed\-zeros\fR 4
  .IX Item "-fno-signed-zeros"
! Allow optimizations for floating\-point arithmetic that ignore the
! signedness of zero.  IEEE arithmetic specifies the behavior of
  distinct +0.0 and \-0.0 values, which then prohibits simplification
  of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
! This option implies that the sign of a zero result isn\*(Aqt significant.
  .Sp
  The default is \fB\-fsigned\-zeros\fR.
! .IP \fB\-fno\-trapping\-math\fR 4
  .IX Item "-fno-trapping-math"
! Compile code assuming that floating\-point operations cannot generate
! user\-visible traps.  These traps include division by zero, overflow,
  underflow, inexact result and invalid operation.  This option requires
  that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
! allow faster code if one relies on "non\-stop" IEEE arithmetic, for example.
  .Sp
  This option should never be turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions.
  .Sp
  The default is \fB\-ftrapping\-math\fR.
  .Sp
! Future versions of GCC may provide finer control of this setting
! using C99\*(Aqs \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command\-line option
  will be used along with \fB\-frounding\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP \fB\-frounding\-math\fR 4
  .IX Item "-frounding-math"
! Disable transformations and optimizations that assume default floating\-point
! rounding behavior.  This is round\-to\-zero for all floating point
! to integer conversions, and round\-to\-nearest for all other arithmetic
  truncations.  This option should be specified for programs that change
! the FP rounding mode dynamically, or that may be executed with a
! non\-default rounding mode.  This option disables constant folding of
! floating\-point expressions at compile time (which may be affected by
  rounding mode) and arithmetic transformations that are unsafe in the
! presence of sign\-dependent rounding modes.
  .Sp
  The default is \fB\-fno\-rounding\-math\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all GCC optimizations that are affected by rounding mode.
! Future versions of GCC may provide finer control of this setting
! using C99\*(Aqs \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command\-line option
  will be used along with \fB\-ftrapping\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP \fB\-fsignaling\-nans\fR 4
  .IX Item "-fsignaling-nans"
! Compile code assuming that IEEE signaling NaNs may generate user\-visible
! traps during floating\-point operations.  Setting this option disables
  optimizations that may change the number of exceptions visible with
  signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
  .Sp
*************** be defined.
*** 14183,14211 ****
  The default is \fB\-fno\-signaling\-nans\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
! .IP "\fB\-fno\-fp\-int\-builtin\-inexact\fR" 4
  .IX Item "-fno-fp-int-builtin-inexact"
! Do not allow the built-in functions \f(CW\*(C`ceil\*(C'\fR, \f(CW\*(C`floor\*(C'\fR,
  \&\f(CW\*(C`round\*(C'\fR and \f(CW\*(C`trunc\*(C'\fR, and their \f(CW\*(C`float\*(C'\fR and \f(CW\*(C`long
! double\*(C'\fR variants, to generate code that raises the \*(L"inexact\*(R"
! floating-point exception for noninteger arguments.  \s-1ISO C99\s0 and C11
! allow these functions to raise the \*(L"inexact\*(R" exception, but \s-1ISO/IEC
! TS 18661\-1:2014,\s0 the C bindings to \s-1IEEE 754\-2008,\s0 as integrated into
! \&\s-1ISO C23,\s0 does not allow these functions to do so.
  .Sp
  The default is \fB\-ffp\-int\-builtin\-inexact\fR, allowing the
  exception to be raised, unless C23 or a later C standard is selected.
  This option does nothing unless \fB\-ftrapping\-math\fR is in effect.
  .Sp
  Even if \fB\-fno\-fp\-int\-builtin\-inexact\fR is used, if the functions
! generate a call to a library function then the \*(L"inexact\*(R" exception
! may be raised if the library implementation does not follow \s-1TS 18661.\s0
! .IP "\fB\-fsingle\-precision\-constant\fR" 4
  .IX Item "-fsingle-precision-constant"
! Treat floating-point constants as single precision instead of
! implicitly converting them to double-precision constants.
! .IP "\fB\-fcx\-limited\-range\fR" 4
  .IX Item "-fcx-limited-range"
  When enabled, this option states that a range reduction step is not
  needed when performing complex division.  Also, there is no checking
--- 14116,14144 ----
  The default is \fB\-fno\-signaling\-nans\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all GCC optimizations that affect signaling NaN behavior.
! .IP \fB\-fno\-fp\-int\-builtin\-inexact\fR 4
  .IX Item "-fno-fp-int-builtin-inexact"
! Do not allow the built\-in functions \f(CW\*(C`ceil\*(C'\fR, \f(CW\*(C`floor\*(C'\fR,
  \&\f(CW\*(C`round\*(C'\fR and \f(CW\*(C`trunc\*(C'\fR, and their \f(CW\*(C`float\*(C'\fR and \f(CW\*(C`long
! double\*(C'\fR variants, to generate code that raises the "inexact"
! floating\-point exception for noninteger arguments.  ISO C99 and C11
! allow these functions to raise the "inexact" exception, but ISO/IEC
! TS 18661\-1:2014, the C bindings to IEEE 754\-2008, as integrated into
! ISO C23, does not allow these functions to do so.
  .Sp
  The default is \fB\-ffp\-int\-builtin\-inexact\fR, allowing the
  exception to be raised, unless C23 or a later C standard is selected.
  This option does nothing unless \fB\-ftrapping\-math\fR is in effect.
  .Sp
  Even if \fB\-fno\-fp\-int\-builtin\-inexact\fR is used, if the functions
! generate a call to a library function then the "inexact" exception
! may be raised if the library implementation does not follow TS 18661.
! .IP \fB\-fsingle\-precision\-constant\fR 4
  .IX Item "-fsingle-precision-constant"
! Treat floating\-point constants as single precision instead of
! implicitly converting them to double\-precision constants.
! .IP \fB\-fcx\-limited\-range\fR 4
  .IX Item "-fcx-limited-range"
  When enabled, this option states that a range reduction step is not
  needed when performing complex division.  Also, there is no checking
*************** whether the result of a complex multipli
*** 14214,14223 ****
  default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
  \&\fB\-ffast\-math\fR.
  .Sp
! This option controls the default setting of the \s-1ISO C99\s0
  \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
  all languages.
! .IP "\fB\-fcx\-fortran\-rules\fR" 4
  .IX Item "-fcx-fortran-rules"
  Complex multiplication and division follow Fortran rules.  Range
  reduction is done as part of complex division, but there is no checking
--- 14147,14156 ----
  default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
  \&\fB\-ffast\-math\fR.
  .Sp
! This option controls the default setting of the ISO C99
  \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
  all languages.
! .IP \fB\-fcx\-fortran\-rules\fR 4
  .IX Item "-fcx-fortran-rules"
  Complex multiplication and division follow Fortran rules.  Range
  reduction is done as part of complex division, but there is no checking
*************** The default is \fB\-fno\-cx\-fortran\-ru
*** 14229,14256 ****
  The following options control optimizations that may improve
  performance, but are not enabled by any \fB\-O\fR options.  This
  section includes experimental options that may produce broken code.
! .IP "\fB\-fbranch\-probabilities\fR" 4
  .IX Item "-fbranch-probabilities"
  After running a program compiled with \fB\-fprofile\-arcs\fR,
  you can compile it a second time using
  \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
  the number of times each branch was taken.  When a program
  compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
! counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
  file.  The information in this data file is very dependent on the
  structure of the generated code, so you must use the same source code
  and the same optimization options for both compilations.
  See details about the file naming in \fB\-fprofile\-arcs\fR.
  .Sp
! With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
! \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
  These can be used to improve optimization.  Currently, they are only
  used in one place: in \fIreorg.cc\fR, instead of guessing which path a
! branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
  exactly determine which path is taken more often.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fprofile\-values\fR" 4
  .IX Item "-fprofile-values"
  If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
  data about values of expressions in the program is gathered.
--- 14162,14189 ----
  The following options control optimizations that may improve
  performance, but are not enabled by any \fB\-O\fR options.  This
  section includes experimental options that may produce broken code.
! .IP \fB\-fbranch\-probabilities\fR 4
  .IX Item "-fbranch-probabilities"
  After running a program compiled with \fB\-fprofile\-arcs\fR,
  you can compile it a second time using
  \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
  the number of times each branch was taken.  When a program
  compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
! counts to a file called \fIsourcename.gcda\fR for each source
  file.  The information in this data file is very dependent on the
  structure of the generated code, so you must use the same source code
  and the same optimization options for both compilations.
  See details about the file naming in \fB\-fprofile\-arcs\fR.
  .Sp
! With \fB\-fbranch\-probabilities\fR, GCC puts a
! \&\fBREG_BR_PROB\fR note on each \fBJUMP_INSN\fR and \fBCALL_INSN\fR.
  These can be used to improve optimization.  Currently, they are only
  used in one place: in \fIreorg.cc\fR, instead of guessing which path a
! branch is most likely to take, the \fBREG_BR_PROB\fR values are used to
  exactly determine which path is taken more often.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fprofile\-values\fR 4
  .IX Item "-fprofile-values"
  If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
  data about values of expressions in the program is gathered.
*************** from profiling values of expressions for
*** 14260,14273 ****
  .Sp
  Enabled by \fB\-fprofile\-generate\fR, \fB\-fprofile\-use\fR, and
  \&\fB\-fauto\-profile\fR.
! .IP "\fB\-fprofile\-reorder\-functions\fR" 4
  .IX Item "-fprofile-reorder-functions"
  Function reordering based on profile instrumentation collects
  first time of execution of a function and orders these functions
  in ascending order.
  .Sp
  Enabled with \fB\-fprofile\-use\fR.
! .IP "\fB\-fvpt\fR" 4
  .IX Item "-fvpt"
  If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
  to add code to gather information about values of expressions.
--- 14193,14206 ----
  .Sp
  Enabled by \fB\-fprofile\-generate\fR, \fB\-fprofile\-use\fR, and
  \&\fB\-fauto\-profile\fR.
! .IP \fB\-fprofile\-reorder\-functions\fR 4
  .IX Item "-fprofile-reorder-functions"
  Function reordering based on profile instrumentation collects
  first time of execution of a function and orders these functions
  in ascending order.
  .Sp
  Enabled with \fB\-fprofile\-use\fR.
! .IP \fB\-fvpt\fR 4
  .IX Item "-fvpt"
  If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
  to add code to gather information about values of expressions.
*************** Currently the optimizations include spec
*** 14278,14308 ****
  using the knowledge about the value of the denominator.
  .Sp
  Enabled with \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-frename\-registers\fR" 4
  .IX Item "-frename-registers"
  Attempt to avoid false dependencies in scheduled code by making use
  of registers left over after register allocation.  This optimization
  most benefits processors with lots of registers.  Depending on the
  debug information format adopted by the target, however, it can
  make debugging impossible, since variables no longer stay in
! a \*(L"home register\*(R".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP "\fB\-fschedule\-fusion\fR" 4
  .IX Item "-fschedule-fusion"
  Performs a target dependent pass over the instruction stream to schedule
  instructions of same type together because target machine can execute them
  more efficiently if they are adjacent to each other in the instruction flow.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-ftracer\fR" 4
  .IX Item "-ftracer"
  Perform tail duplication to enlarge superblock size.  This transformation
  simplifies the control flow of the function allowing other optimizations to do
  a better job.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-funroll\-loops\fR" 4
  .IX Item "-funroll-loops"
  Unroll loops whose number of iterations can be determined at compile time or
  upon entry to the loop.  \fB\-funroll\-loops\fR implies
--- 14211,14241 ----
  using the knowledge about the value of the denominator.
  .Sp
  Enabled with \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-frename\-registers\fR 4
  .IX Item "-frename-registers"
  Attempt to avoid false dependencies in scheduled code by making use
  of registers left over after register allocation.  This optimization
  most benefits processors with lots of registers.  Depending on the
  debug information format adopted by the target, however, it can
  make debugging impossible, since variables no longer stay in
! a "home register".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP \fB\-fschedule\-fusion\fR 4
  .IX Item "-fschedule-fusion"
  Performs a target dependent pass over the instruction stream to schedule
  instructions of same type together because target machine can execute them
  more efficiently if they are adjacent to each other in the instruction flow.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-ftracer\fR 4
  .IX Item "-ftracer"
  Perform tail duplication to enlarge superblock size.  This transformation
  simplifies the control flow of the function allowing other optimizations to do
  a better job.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-funroll\-loops\fR 4
  .IX Item "-funroll-loops"
  Unroll loops whose number of iterations can be determined at compile time or
  upon entry to the loop.  \fB\-funroll\-loops\fR implies
*************** a small constant number of iterations).
*** 14312,14324 ****
  or may not make it run faster.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-funroll\-all\-loops\fR" 4
  .IX Item "-funroll-all-loops"
  Unroll all loops, even if their number of iterations is uncertain when
  the loop is entered.  This usually makes programs run more slowly.
  \&\fB\-funroll\-all\-loops\fR implies the same options as
  \&\fB\-funroll\-loops\fR.
! .IP "\fB\-fpeel\-loops\fR" 4
  .IX Item "-fpeel-loops"
  Peels loops for which there is enough information that they do not
  roll much (from profile feedback or static analysis).  It also turns on
--- 14245,14257 ----
  or may not make it run faster.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-funroll\-all\-loops\fR 4
  .IX Item "-funroll-all-loops"
  Unroll all loops, even if their number of iterations is uncertain when
  the loop is entered.  This usually makes programs run more slowly.
  \&\fB\-funroll\-all\-loops\fR implies the same options as
  \&\fB\-funroll\-loops\fR.
! .IP \fB\-fpeel\-loops\fR 4
  .IX Item "-fpeel-loops"
  Peels loops for which there is enough information that they do not
  roll much (from profile feedback or static analysis).  It also turns on
*************** complete loop peeling (i.e. complete rem
*** 14326,14356 ****
  number of iterations).
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR, and \fB\-fauto\-profile\fR.
! .IP "\fB\-fmove\-loop\-invariants\fR" 4
  .IX Item "-fmove-loop-invariants"
! Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
  at level \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP "\fB\-fmove\-loop\-stores\fR" 4
  .IX Item "-fmove-loop-stores"
! Enables the loop store motion pass in the \s-1GIMPLE\s0 loop optimizer.  This
  moves invariant stores to after the end of the loop in exchange for
  carrying the stored value in a register across the iteration.
  Note for this option to have an effect \fB\-ftree\-loop\-im\fR has to
  be enabled as well.  Enabled at level \fB\-O1\fR and higher, except
  for \fB\-Og\fR.
! .IP "\fB\-fsplit\-loops\fR" 4
  .IX Item "-fsplit-loops"
! Split a loop into two if it contains a condition that's always true
  for one side of the iteration space and false for the other.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-funswitch\-loops\fR" 4
  .IX Item "-funswitch-loops"
  Move branches with loop invariant conditions out of the loop, with duplicates
  of the loop on both branches (modified according to result of the condition).
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fversion\-loops\-for\-strides\fR" 4
  .IX Item "-fversion-loops-for-strides"
  If a loop iterates over an array with a variable stride, create another
  version of the loop that assumes the stride is always one.  For example:
--- 14259,14289 ----
  number of iterations).
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR, and \fB\-fauto\-profile\fR.
! .IP \fB\-fmove\-loop\-invariants\fR 4
  .IX Item "-fmove-loop-invariants"
! Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
  at level \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP \fB\-fmove\-loop\-stores\fR 4
  .IX Item "-fmove-loop-stores"
! Enables the loop store motion pass in the GIMPLE loop optimizer.  This
  moves invariant stores to after the end of the loop in exchange for
  carrying the stored value in a register across the iteration.
  Note for this option to have an effect \fB\-ftree\-loop\-im\fR has to
  be enabled as well.  Enabled at level \fB\-O1\fR and higher, except
  for \fB\-Og\fR.
! .IP \fB\-fsplit\-loops\fR 4
  .IX Item "-fsplit-loops"
! Split a loop into two if it contains a condition that\*(Aqs always true
  for one side of the iteration space and false for the other.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-funswitch\-loops\fR 4
  .IX Item "-funswitch-loops"
  Move branches with loop invariant conditions out of the loop, with duplicates
  of the loop on both branches (modified according to result of the condition).
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fversion\-loops\-for\-strides\fR 4
  .IX Item "-fversion-loops-for-strides"
  If a loop iterates over an array with a variable stride, create another
  version of the loop that assumes the stride is always one.  For example:
*************** becomes:
*** 14371,14402 ****
  \&            x[i * stride] = ...;
  .Ve
  .Sp
! This is particularly useful for assumed-shape arrays in Fortran where
  (for example) it allows better vectorization assuming contiguous accesses.
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-ffunction\-sections\fR" 4
  .IX Item "-ffunction-sections"
  .PD 0
! .IP "\fB\-fdata\-sections\fR" 4
  .IX Item "-fdata-sections"
  .PD
  Place each function or data item into its own section in the output
  file if the target supports arbitrary sections.  The name of the
! function or the name of the data item determines the section's name
  in the output file.
  .Sp
  Use these options on systems where the linker can perform optimizations to
  improve locality of reference in the instruction space.  Most systems using the
! \&\s-1ELF\s0 object format have linkers with such optimizations.  On \s-1AIX,\s0 the linker
  rearranges sections (CSECTs) based on the call graph.  The performance impact
  varies.
  .Sp
  Together with a linker garbage collection (linker \fB\-\-gc\-sections\fR
! option) these options may lead to smaller statically-linked executables (after
  stripping).
  .Sp
! On \s-1ELF/DWARF\s0 systems these options do not degenerate the quality of the debug
  information.  There could be issues with other object files/debug info formats.
  .Sp
  Only use these options when there are significant benefits from doing so.  When
--- 14304,14335 ----
  \&            x[i * stride] = ...;
  .Ve
  .Sp
! This is particularly useful for assumed\-shape arrays in Fortran where
  (for example) it allows better vectorization assuming contiguous accesses.
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-ffunction\-sections\fR 4
  .IX Item "-ffunction-sections"
  .PD 0
! .IP \fB\-fdata\-sections\fR 4
  .IX Item "-fdata-sections"
  .PD
  Place each function or data item into its own section in the output
  file if the target supports arbitrary sections.  The name of the
! function or the name of the data item determines the section\*(Aqs name
  in the output file.
  .Sp
  Use these options on systems where the linker can perform optimizations to
  improve locality of reference in the instruction space.  Most systems using the
! ELF object format have linkers with such optimizations.  On AIX, the linker
  rearranges sections (CSECTs) based on the call graph.  The performance impact
  varies.
  .Sp
  Together with a linker garbage collection (linker \fB\-\-gc\-sections\fR
! option) these options may lead to smaller statically\-linked executables (after
  stripping).
  .Sp
! On ELF/DWARF systems these options do not degenerate the quality of the debug
  information.  There could be issues with other object files/debug info formats.
  .Sp
  Only use these options when there are significant benefits from doing so.  When
*************** They prevent optimizations by the compil
*** 14406,14420 ****
  locations inside a translation unit since the locations are unknown until
  link time.  An example of such an optimization is relaxing calls to short call
  instructions.
! .IP "\fB\-fstdarg\-opt\fR" 4
  .IX Item "-fstdarg-opt"
  Optimize the prologue of variadic argument functions with respect to usage of
  those arguments.
! .IP "\fB\-fsection\-anchors\fR" 4
  .IX Item "-fsection-anchors"
  Try to reduce the number of symbolic address calculations by using
! shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
! can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
  targets.
  .Sp
  For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
--- 14339,14353 ----
  locations inside a translation unit since the locations are unknown until
  link time.  An example of such an optimization is relaxing calls to short call
  instructions.
! .IP \fB\-fstdarg\-opt\fR 4
  .IX Item "-fstdarg-opt"
  Optimize the prologue of variadic argument functions with respect to usage of
  those arguments.
! .IP \fB\-fsection\-anchors\fR 4
  .IX Item "-fsection-anchors"
  Try to reduce the number of symbolic address calculations by using
! shared "anchor" symbols to address nearby objects.  This transformation
! can help to reduce the number of GOT entries and GOT accesses on some
  targets.
  .Sp
  For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
*************** For example, the implementation of the f
*** 14427,14433 ****
  usually calculates the addresses of all three variables, but if you
  compile it with \fB\-fsection\-anchors\fR, it accesses the variables
  from a common anchor point instead.  The effect is similar to the
! following pseudocode (which isn't valid C):
  .Sp
  .Vb 5
  \&        int foo (void)
--- 14360,14366 ----
  usually calculates the addresses of all three variables, but if you
  compile it with \fB\-fsection\-anchors\fR, it accesses the variables
  from a common anchor point instead.  The effect is similar to the
! following pseudocode (which isn\*(Aqt valid C):
  .Sp
  .Vb 5
  \&        int foo (void)
*************** following pseudocode (which isn't valid
*** 14438,14447 ****
  .Ve
  .Sp
  Not all targets support this option.
! .IP "\fB\-fzero\-call\-used\-regs=\fR\fIchoice\fR" 4
  .IX Item "-fzero-call-used-regs=choice"
! Zero call-used registers at function return to increase program
! security by either mitigating Return-Oriented Programming (\s-1ROP\s0)
  attacks or preventing information leakage through registers.
  .Sp
  The possible values of \fIchoice\fR are the same as for the
--- 14371,14380 ----
  .Ve
  .Sp
  Not all targets support this option.
! .IP \fB\-fzero\-call\-used\-regs=\fR\fIchoice\fR 4
  .IX Item "-fzero-call-used-regs=choice"
! Zero call\-used registers at function return to increase program
! security by either mitigating Return\-Oriented Programming (ROP)
  attacks or preventing information leakage through registers.
  .Sp
  The possible values of \fIchoice\fR are the same as for the
*************** You can control this behavior for a spec
*** 14452,14459 ****
  attribute \f(CW\*(C`zero_call_used_regs\*(C'\fR.
  .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
  .IX Item "--param name=value"
! In some places, \s-1GCC\s0 uses various constants to control the amount of
! optimization that is done.  For example, \s-1GCC\s0 does not inline functions
  that contain more than a certain number of instructions.  You can
  control some of these constants on the command line using the
  \&\fB\-\-param\fR option.
--- 14385,14392 ----
  attribute \f(CW\*(C`zero_call_used_regs\*(C'\fR.
  .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
  .IX Item "--param name=value"
! In some places, GCC uses various constants to control the amount of
! optimization that is done.  For example, GCC does not inline functions
  that contain more than a certain number of instructions.  You can
  control some of these constants on the command line using the
  \&\fB\-\-param\fR option.
*************** use the \fB\-\-help=param \-Q\fR options
*** 14468,14521 ****
  In each case, the \fIvalue\fR is an integer.  The following choices
  of \fIname\fR are recognized for all targets:
  .RS 4
! .IP "\fBpredictable-branch-outcome\fR" 4
  .IX Item "predictable-branch-outcome"
  When branch is predicted to be taken with probability lower than this threshold
  (in percent), then it is considered well predictable.
! .IP "\fBmax-rtl-if-conversion-insns\fR" 4
  .IX Item "max-rtl-if-conversion-insns"
! \&\s-1RTL\s0 if-conversion tries to remove conditional branches around a block and
  replace them with conditionally executed instructions.  This parameter
  gives the maximum number of instructions in a block which should be
! considered for if-conversion.  The compiler will
! also use other heuristics to decide whether if-conversion is likely to be
  profitable.
! .IP "\fBmax-rtl-if-conversion-predictable-cost\fR" 4
  .IX Item "max-rtl-if-conversion-predictable-cost"
! \&\s-1RTL\s0 if-conversion will try to remove conditional branches around a block
  and replace them with conditionally executed instructions.  These parameters
  give the maximum permissible cost for the sequence that would be generated
! by if-conversion depending on whether the branch is statically determined
  to be predictable or not.  The units for this parameter are the same as
! those for the \s-1GCC\s0 internal seq_cost metric.  The compiler will try to
! provide a reasonable default for this parameter using the \s-1BRANCH_COST\s0
  target macro.
! .IP "\fBmax-crossjump-edges\fR" 4
  .IX Item "max-crossjump-edges"
! The maximum number of incoming edges to consider for cross-jumping.
  The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
  the number of edges incoming to each block.  Increasing values mean
  more aggressive optimization, making the compilation time increase with
  probably small improvement in executable size.
! .IP "\fBmin-crossjump-insns\fR" 4
  .IX Item "min-crossjump-insns"
  The minimum number of instructions that must be matched at the end
! of two blocks before cross-jumping is performed on them.  This
  value is ignored in the case where all instructions in the block being
! cross-jumped from are matched.
! .IP "\fBmax-grow-copy-bb-insns\fR" 4
  .IX Item "max-grow-copy-bb-insns"
  The maximum code size expansion factor when copying basic blocks
  instead of jumping.  The expansion is relative to a jump instruction.
! .IP "\fBmax-goto-duplication-insns\fR" 4
  .IX Item "max-goto-duplication-insns"
  The maximum number of instructions to duplicate to a block that jumps
  to a computed goto.  To avoid O(N^2) behavior in a number of
! passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
  and unfactors them as late as possible.  Only computed jumps at the
! end of a basic blocks with no more than max-goto-duplication-insns are
  unfactored.
! .IP "\fBmax-delay-slot-insn-search\fR" 4
  .IX Item "max-delay-slot-insn-search"
  The maximum number of instructions to consider when looking for an
  instruction to fill a delay slot.  If more than this arbitrary number of
--- 14401,14454 ----
  In each case, the \fIvalue\fR is an integer.  The following choices
  of \fIname\fR are recognized for all targets:
  .RS 4
! .IP \fBpredictable\-branch\-outcome\fR 4
  .IX Item "predictable-branch-outcome"
  When branch is predicted to be taken with probability lower than this threshold
  (in percent), then it is considered well predictable.
! .IP \fBmax\-rtl\-if\-conversion\-insns\fR 4
  .IX Item "max-rtl-if-conversion-insns"
! RTL if\-conversion tries to remove conditional branches around a block and
  replace them with conditionally executed instructions.  This parameter
  gives the maximum number of instructions in a block which should be
! considered for if\-conversion.  The compiler will
! also use other heuristics to decide whether if\-conversion is likely to be
  profitable.
! .IP \fBmax\-rtl\-if\-conversion\-predictable\-cost\fR 4
  .IX Item "max-rtl-if-conversion-predictable-cost"
! RTL if\-conversion will try to remove conditional branches around a block
  and replace them with conditionally executed instructions.  These parameters
  give the maximum permissible cost for the sequence that would be generated
! by if\-conversion depending on whether the branch is statically determined
  to be predictable or not.  The units for this parameter are the same as
! those for the GCC internal seq_cost metric.  The compiler will try to
! provide a reasonable default for this parameter using the BRANCH_COST
  target macro.
! .IP \fBmax\-crossjump\-edges\fR 4
  .IX Item "max-crossjump-edges"
! The maximum number of incoming edges to consider for cross\-jumping.
  The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
  the number of edges incoming to each block.  Increasing values mean
  more aggressive optimization, making the compilation time increase with
  probably small improvement in executable size.
! .IP \fBmin\-crossjump\-insns\fR 4
  .IX Item "min-crossjump-insns"
  The minimum number of instructions that must be matched at the end
! of two blocks before cross\-jumping is performed on them.  This
  value is ignored in the case where all instructions in the block being
! cross\-jumped from are matched.
! .IP \fBmax\-grow\-copy\-bb\-insns\fR 4
  .IX Item "max-grow-copy-bb-insns"
  The maximum code size expansion factor when copying basic blocks
  instead of jumping.  The expansion is relative to a jump instruction.
! .IP \fBmax\-goto\-duplication\-insns\fR 4
  .IX Item "max-goto-duplication-insns"
  The maximum number of instructions to duplicate to a block that jumps
  to a computed goto.  To avoid O(N^2) behavior in a number of
! passes, GCC factors computed gotos early in the compilation process,
  and unfactors them as late as possible.  Only computed jumps at the
! end of a basic blocks with no more than max\-goto\-duplication\-insns are
  unfactored.
! .IP \fBmax\-delay\-slot\-insn\-search\fR 4
  .IX Item "max-delay-slot-insn-search"
  The maximum number of instructions to consider when looking for an
  instruction to fill a delay slot.  If more than this arbitrary number of
*************** instructions are searched, the time savi
*** 14523,14694 ****
  are minimal, so stop searching.  Increasing values mean more
  aggressive optimization, making the compilation time increase with probably
  small improvement in execution time.
! .IP "\fBmax-delay-slot-live-search\fR" 4
  .IX Item "max-delay-slot-live-search"
  When trying to fill delay slots, the maximum number of instructions to
  consider when searching for a block with valid live register
  information.  Increasing this arbitrarily chosen value means more
  aggressive optimization, increasing the compilation time.  This parameter
  should be removed when the delay slot code is rewritten to maintain the
! control-flow graph.
! .IP "\fBmax-gcse-memory\fR" 4
  .IX Item "max-gcse-memory"
  The approximate maximum amount of memory in \f(CW\*(C`kB\*(C'\fR that can be allocated in
  order to perform the global common subexpression elimination
  optimization.  If more memory than specified is required, the
  optimization is not done.
! .IP "\fBmax-gcse-insertion-ratio\fR" 4
  .IX Item "max-gcse-insertion-ratio"
  If the ratio of expression insertions to deletions is larger than this value
! for any expression, then \s-1RTL PRE\s0 inserts or removes the expression and thus
  leaves partially redundant computations in the instruction stream.
! .IP "\fBmax-pending-list-length\fR" 4
  .IX Item "max-pending-list-length"
  The maximum number of pending dependencies scheduling allows
  before flushing the current state and starting over.  Large functions
  with few branches or calls can create excessively large lists which
  needlessly consume memory and resources.
! .IP "\fBmax-modulo-backtrack-attempts\fR" 4
  .IX Item "max-modulo-backtrack-attempts"
  The maximum number of backtrack attempts the scheduler should make
  when modulo scheduling a loop.  Larger values can exponentially increase
  compilation time.
! .IP "\fBmax-inline-functions-called-once-loop-depth\fR" 4
  .IX Item "max-inline-functions-called-once-loop-depth"
  Maximal loop depth of a call considered by inline heuristics that tries to
  inline all functions called once.
! .IP "\fBmax-inline-functions-called-once-insns\fR" 4
  .IX Item "max-inline-functions-called-once-insns"
  Maximal estimated size of functions produced while inlining functions called
  once.
! .IP "\fBmax-inline-insns-single\fR" 4
  .IX Item "max-inline-insns-single"
! Several parameters control the tree inliner used in \s-1GCC.\s0  This number sets the
! maximum number of instructions (counted in \s-1GCC\s0's internal representation) in a
  single function that the tree inliner considers for inlining.  This only
  affects functions declared inline and methods implemented in a class
! declaration (\*(C+).
! .IP "\fBmax-inline-insns-auto\fR" 4
  .IX Item "max-inline-insns-auto"
  When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
  a lot of functions that would otherwise not be considered for inlining
  by the compiler are investigated.  To those functions, a different
  (more restrictive) limit compared to functions declared inline can
! be applied (\fB\-\-param max-inline-insns-auto\fR).
! .IP "\fBmax-inline-insns-small\fR" 4
  .IX Item "max-inline-insns-small"
  This is bound applied to calls which are considered relevant with
  \&\fB\-finline\-small\-functions\fR.
! .IP "\fBmax-inline-insns-size\fR" 4
  .IX Item "max-inline-insns-size"
  This is bound applied to calls which are optimized for size. Small growth
  may be desirable to anticipate optimization oppurtunities exposed by inlining.
! .IP "\fBuninlined-function-insns\fR" 4
  .IX Item "uninlined-function-insns"
  Number of instructions accounted by inliner for function overhead such as
  function prologue and epilogue.
! .IP "\fBuninlined-function-time\fR" 4
  .IX Item "uninlined-function-time"
  Extra time accounted by inliner for function overhead such as time needed to
  execute function prologue and epilogue.
! .IP "\fBinline-heuristics-hint-percent\fR" 4
  .IX Item "inline-heuristics-hint-percent"
! The scale (in percents) applied to \fBinline-insns-single\fR,
! \&\fBinline\-insns\-single\-O2\fR, \fBinline-insns-auto\fR
  when inline heuristics hints that inlining is
  very profitable (will enable later optimizations).
! .IP "\fBuninlined-thunk-insns\fR" 4
  .IX Item "uninlined-thunk-insns"
  .PD 0
! .IP "\fBuninlined-thunk-time\fR" 4
  .IX Item "uninlined-thunk-time"
  .PD
! Same as \fB\-\-param uninlined-function-insns\fR and
! \&\fB\-\-param uninlined-function-time\fR but applied to function thunks.
! .IP "\fBinline-min-speedup\fR" 4
  .IX Item "inline-min-speedup"
  When estimated performance improvement of caller + callee runtime exceeds this
  threshold (in percent), the function can be inlined regardless of the limit on
! \&\fB\-\-param max-inline-insns-single\fR and \fB\-\-param
! max-inline-insns-auto\fR.
! .IP "\fBlarge-function-insns\fR" 4
  .IX Item "large-function-insns"
  The limit specifying really large functions.  For functions larger than this
  limit after inlining, inlining is constrained by
! \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
! to avoid extreme compilation time caused by non-linear algorithms used by the
  back end.
! .IP "\fBlarge-function-growth\fR" 4
  .IX Item "large-function-growth"
  Specifies maximal growth of large function caused by inlining in percents.
  For example, parameter value 100 limits large function growth to 2.0 times
  the original size.
! .IP "\fBlarge-unit-insns\fR" 4
  .IX Item "large-unit-insns"
  The limit specifying large translation unit.  Growth caused by inlining of
! units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
  For small units this might be too tight.
  For example, consider a unit consisting of function A
  that is inline and B that just calls A three times.  If B is small relative to
  A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
  large units consisting of small inlineable functions, however, the overall unit
  growth limit is needed to avoid exponential explosion of code size.  Thus for
! smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
! before applying \fB\-\-param inline-unit-growth\fR.
! .IP "\fBlazy-modules\fR" 4
  .IX Item "lazy-modules"
! Maximum number of concurrently open \*(C+ module files when lazy loading.
! .IP "\fBinline-unit-growth\fR" 4
  .IX Item "inline-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by inlining.
  For example, parameter value 20 limits unit growth to 1.2 times the original
  size. Cold functions (either marked cold via an attribute or by profile
  feedback) are not accounted into the unit size.
! .IP "\fBipa-cp-unit-growth\fR" 4
  .IX Item "ipa-cp-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by
  interprocedural constant propagation.  For example, parameter value 10 limits
  unit growth to 1.1 times the original size.
! .IP "\fBipa-cp-large-unit-insns\fR" 4
  .IX Item "ipa-cp-large-unit-insns"
! The size of translation unit that IPA-CP pass considers large.
! .IP "\fBlarge-stack-frame\fR" 4
  .IX Item "large-stack-frame"
  The limit specifying large stack frames.  While inlining the algorithm is trying
  to not grow past this limit too much.
! .IP "\fBlarge-stack-frame-growth\fR" 4
  .IX Item "large-stack-frame-growth"
  Specifies maximal growth of large stack frames caused by inlining in percents.
  For example, parameter value 1000 limits large stack frame growth to 11 times
  the original size.
! .IP "\fBmax-inline-insns-recursive\fR" 4
  .IX Item "max-inline-insns-recursive"
  .PD 0
! .IP "\fBmax-inline-insns-recursive-auto\fR" 4
  .IX Item "max-inline-insns-recursive-auto"
  .PD
! Specifies the maximum number of instructions an out-of-line copy of a
! self-recursive inline
  function can grow into by performing recursive inlining.
  .Sp
! \&\fB\-\-param max-inline-insns-recursive\fR applies to functions
  declared inline.
  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max-inline-insns-recursive-auto\fR applies instead.
! .IP "\fBmax-inline-recursive-depth\fR" 4
  .IX Item "max-inline-recursive-depth"
  .PD 0
! .IP "\fBmax-inline-recursive-depth-auto\fR" 4
  .IX Item "max-inline-recursive-depth-auto"
  .PD
  Specifies the maximum recursion depth used for recursive inlining.
  .Sp
! \&\fB\-\-param max-inline-recursive-depth\fR applies to functions
  declared inline.  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max-inline-recursive-depth-auto\fR applies instead.
! .IP "\fBmin-inline-recursive-probability\fR" 4
  .IX Item "min-inline-recursive-probability"
  Recursive inlining is profitable only for function having deep recursion
  in average and can hurt for function having little recursion depth by
--- 14456,14627 ----
  are minimal, so stop searching.  Increasing values mean more
  aggressive optimization, making the compilation time increase with probably
  small improvement in execution time.
! .IP \fBmax\-delay\-slot\-live\-search\fR 4
  .IX Item "max-delay-slot-live-search"
  When trying to fill delay slots, the maximum number of instructions to
  consider when searching for a block with valid live register
  information.  Increasing this arbitrarily chosen value means more
  aggressive optimization, increasing the compilation time.  This parameter
  should be removed when the delay slot code is rewritten to maintain the
! control\-flow graph.
! .IP \fBmax\-gcse\-memory\fR 4
  .IX Item "max-gcse-memory"
  The approximate maximum amount of memory in \f(CW\*(C`kB\*(C'\fR that can be allocated in
  order to perform the global common subexpression elimination
  optimization.  If more memory than specified is required, the
  optimization is not done.
! .IP \fBmax\-gcse\-insertion\-ratio\fR 4
  .IX Item "max-gcse-insertion-ratio"
  If the ratio of expression insertions to deletions is larger than this value
! for any expression, then RTL PRE inserts or removes the expression and thus
  leaves partially redundant computations in the instruction stream.
! .IP \fBmax\-pending\-list\-length\fR 4
  .IX Item "max-pending-list-length"
  The maximum number of pending dependencies scheduling allows
  before flushing the current state and starting over.  Large functions
  with few branches or calls can create excessively large lists which
  needlessly consume memory and resources.
! .IP \fBmax\-modulo\-backtrack\-attempts\fR 4
  .IX Item "max-modulo-backtrack-attempts"
  The maximum number of backtrack attempts the scheduler should make
  when modulo scheduling a loop.  Larger values can exponentially increase
  compilation time.
! .IP \fBmax\-inline\-functions\-called\-once\-loop\-depth\fR 4
  .IX Item "max-inline-functions-called-once-loop-depth"
  Maximal loop depth of a call considered by inline heuristics that tries to
  inline all functions called once.
! .IP \fBmax\-inline\-functions\-called\-once\-insns\fR 4
  .IX Item "max-inline-functions-called-once-insns"
  Maximal estimated size of functions produced while inlining functions called
  once.
! .IP \fBmax\-inline\-insns\-single\fR 4
  .IX Item "max-inline-insns-single"
! Several parameters control the tree inliner used in GCC.  This number sets the
! maximum number of instructions (counted in GCC\*(Aqs internal representation) in a
  single function that the tree inliner considers for inlining.  This only
  affects functions declared inline and methods implemented in a class
! declaration (C++).
! .IP \fBmax\-inline\-insns\-auto\fR 4
  .IX Item "max-inline-insns-auto"
  When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
  a lot of functions that would otherwise not be considered for inlining
  by the compiler are investigated.  To those functions, a different
  (more restrictive) limit compared to functions declared inline can
! be applied (\fB\-\-param max\-inline\-insns\-auto\fR).
! .IP \fBmax\-inline\-insns\-small\fR 4
  .IX Item "max-inline-insns-small"
  This is bound applied to calls which are considered relevant with
  \&\fB\-finline\-small\-functions\fR.
! .IP \fBmax\-inline\-insns\-size\fR 4
  .IX Item "max-inline-insns-size"
  This is bound applied to calls which are optimized for size. Small growth
  may be desirable to anticipate optimization oppurtunities exposed by inlining.
! .IP \fBuninlined\-function\-insns\fR 4
  .IX Item "uninlined-function-insns"
  Number of instructions accounted by inliner for function overhead such as
  function prologue and epilogue.
! .IP \fBuninlined\-function\-time\fR 4
  .IX Item "uninlined-function-time"
  Extra time accounted by inliner for function overhead such as time needed to
  execute function prologue and epilogue.
! .IP \fBinline\-heuristics\-hint\-percent\fR 4
  .IX Item "inline-heuristics-hint-percent"
! The scale (in percents) applied to \fBinline\-insns\-single\fR,
! \&\fBinline\-insns\-single\-O2\fR, \fBinline\-insns\-auto\fR
  when inline heuristics hints that inlining is
  very profitable (will enable later optimizations).
! .IP \fBuninlined\-thunk\-insns\fR 4
  .IX Item "uninlined-thunk-insns"
  .PD 0
! .IP \fBuninlined\-thunk\-time\fR 4
  .IX Item "uninlined-thunk-time"
  .PD
! Same as \fB\-\-param uninlined\-function\-insns\fR and
! \&\fB\-\-param uninlined\-function\-time\fR but applied to function thunks.
! .IP \fBinline\-min\-speedup\fR 4
  .IX Item "inline-min-speedup"
  When estimated performance improvement of caller + callee runtime exceeds this
  threshold (in percent), the function can be inlined regardless of the limit on
! \&\fB\-\-param max\-inline\-insns\-single\fR and \fB\-\-param
! max\-inline\-insns\-auto\fR.
! .IP \fBlarge\-function\-insns\fR 4
  .IX Item "large-function-insns"
  The limit specifying really large functions.  For functions larger than this
  limit after inlining, inlining is constrained by
! \&\fB\-\-param large\-function\-growth\fR.  This parameter is useful primarily
! to avoid extreme compilation time caused by non\-linear algorithms used by the
  back end.
! .IP \fBlarge\-function\-growth\fR 4
  .IX Item "large-function-growth"
  Specifies maximal growth of large function caused by inlining in percents.
  For example, parameter value 100 limits large function growth to 2.0 times
  the original size.
! .IP \fBlarge\-unit\-insns\fR 4
  .IX Item "large-unit-insns"
  The limit specifying large translation unit.  Growth caused by inlining of
! units larger than this limit is limited by \fB\-\-param inline\-unit\-growth\fR.
  For small units this might be too tight.
  For example, consider a unit consisting of function A
  that is inline and B that just calls A three times.  If B is small relative to
  A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
  large units consisting of small inlineable functions, however, the overall unit
  growth limit is needed to avoid exponential explosion of code size.  Thus for
! smaller units, the size is increased to \fB\-\-param large\-unit\-insns\fR
! before applying \fB\-\-param inline\-unit\-growth\fR.
! .IP \fBlazy\-modules\fR 4
  .IX Item "lazy-modules"
! Maximum number of concurrently open C++ module files when lazy loading.
! .IP \fBinline\-unit\-growth\fR 4
  .IX Item "inline-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by inlining.
  For example, parameter value 20 limits unit growth to 1.2 times the original
  size. Cold functions (either marked cold via an attribute or by profile
  feedback) are not accounted into the unit size.
! .IP \fBipa\-cp\-unit\-growth\fR 4
  .IX Item "ipa-cp-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by
  interprocedural constant propagation.  For example, parameter value 10 limits
  unit growth to 1.1 times the original size.
! .IP \fBipa\-cp\-large\-unit\-insns\fR 4
  .IX Item "ipa-cp-large-unit-insns"
! The size of translation unit that IPA\-CP pass considers large.
! .IP \fBlarge\-stack\-frame\fR 4
  .IX Item "large-stack-frame"
  The limit specifying large stack frames.  While inlining the algorithm is trying
  to not grow past this limit too much.
! .IP \fBlarge\-stack\-frame\-growth\fR 4
  .IX Item "large-stack-frame-growth"
  Specifies maximal growth of large stack frames caused by inlining in percents.
  For example, parameter value 1000 limits large stack frame growth to 11 times
  the original size.
! .IP \fBmax\-inline\-insns\-recursive\fR 4
  .IX Item "max-inline-insns-recursive"
  .PD 0
! .IP \fBmax\-inline\-insns\-recursive\-auto\fR 4
  .IX Item "max-inline-insns-recursive-auto"
  .PD
! Specifies the maximum number of instructions an out\-of\-line copy of a
! self\-recursive inline
  function can grow into by performing recursive inlining.
  .Sp
! \&\fB\-\-param max\-inline\-insns\-recursive\fR applies to functions
  declared inline.
  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max\-inline\-insns\-recursive\-auto\fR applies instead.
! .IP \fBmax\-inline\-recursive\-depth\fR 4
  .IX Item "max-inline-recursive-depth"
  .PD 0
! .IP \fBmax\-inline\-recursive\-depth\-auto\fR 4
  .IX Item "max-inline-recursive-depth-auto"
  .PD
  Specifies the maximum recursion depth used for recursive inlining.
  .Sp
! \&\fB\-\-param max\-inline\-recursive\-depth\fR applies to functions
  declared inline.  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max\-inline\-recursive\-depth\-auto\fR applies instead.
! .IP \fBmin\-inline\-recursive\-probability\fR 4
  .IX Item "min-inline-recursive-probability"
  Recursive inlining is profitable only for function having deep recursion
  in average and can hurt for function having little recursion depth by
*************** When profile feedback is available (see
*** 14699,14917 ****
  recursion depth can be guessed from the probability that function recurses
  via a given call expression.  This parameter limits inlining only to call
  expressions whose probability exceeds the given threshold (in percents).
! .IP "\fBearly-inlining-insns\fR" 4
  .IX Item "early-inlining-insns"
  Specify growth that the early inliner can make.  In effect it increases
  the amount of inlining for code having a large abstraction penalty.
! .IP "\fBmax-early-inliner-iterations\fR" 4
  .IX Item "max-early-inliner-iterations"
  Limit of iterations of the early inliner.  This basically bounds
  the number of nested indirect calls the early inliner can resolve.
  Deeper chains are still handled by late inlining.
! .IP "\fBcomdat-sharing-probability\fR" 4
  .IX Item "comdat-sharing-probability"
! Probability (in percent) that \*(C+ inline function with comdat visibility
  are shared across multiple compilation units.
! .IP "\fBmodref-max-bases\fR" 4
  .IX Item "modref-max-bases"
  .PD 0
! .IP "\fBmodref-max-refs\fR" 4
  .IX Item "modref-max-refs"
! .IP "\fBmodref-max-accesses\fR" 4
  .IX Item "modref-max-accesses"
  .PD
  Specifies the maximal number of base pointers, references and accesses stored
  for a single function by mod/ref analysis.
! .IP "\fBmodref-max-tests\fR" 4
  .IX Item "modref-max-tests"
  Specifies the maxmal number of tests alias oracle can perform to disambiguate
  memory locations using the mod/ref information.  This parameter ought to be
! bigger than \fB\-\-param modref-max-bases\fR and \fB\-\-param
! modref-max-refs\fR.
! .IP "\fBmodref-max-depth\fR" 4
  .IX Item "modref-max-depth"
! Specifies the maximum depth of \s-1DFS\s0 walk used by modref escape analysis.
  Setting to 0 disables the analysis completely.
! .IP "\fBmodref-max-escape-points\fR" 4
  .IX Item "modref-max-escape-points"
! Specifies the maximum number of escape points tracked by modref per SSA-name.
! .IP "\fBmodref-max-adjustments\fR" 4
  .IX Item "modref-max-adjustments"
  Specifies the maximum number the access range is enlarged during modref dataflow
  analysis.
! .IP "\fBprofile-func-internal-id\fR" 4
  .IX Item "profile-func-internal-id"
  A parameter to control whether to use function internal id in profile
  database lookup. If the value is 0, the compiler uses an id that
  is based on function assembler name and filename, which makes old profile
  data more tolerant to source changes such as function reordering etc.
! .IP "\fBmin-vect-loop-bound\fR" 4
  .IX Item "min-vect-loop-bound"
  The minimum number of iterations under which loops are not vectorized
  when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
  vectorization needs to be greater than the value specified by this option
  to allow vectorization.
! .IP "\fBgcse-cost-distance-ratio\fR" 4
  .IX Item "gcse-cost-distance-ratio"
  Scaling factor in calculation of maximum distance an expression
! can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
  code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
  is with simple expressions, i.e., the expressions that have cost
! less than \fBgcse-unrestricted-cost\fR.  Specifying 0 disables
  hoisting of simple expressions.
! .IP "\fBgcse-unrestricted-cost\fR" 4
  .IX Item "gcse-unrestricted-cost"
  Cost, roughly measured as the cost of a single typical machine
! instruction, at which \s-1GCSE\s0 optimizations do not constrain
  the distance an expression can travel.  This is currently
  supported only in the code hoisting pass.  The lesser the cost,
  the more aggressive code hoisting is.  Specifying 0 
  allows all expressions to travel unrestricted distances.
! .IP "\fBmax-hoist-depth\fR" 4
  .IX Item "max-hoist-depth"
  The depth of search in the dominator tree for expressions to hoist.
  This is used to avoid quadratic behavior in hoisting algorithm.
  The value of 0 does not limit on the search, but may slow down compilation
  of huge functions.
! .IP "\fBmax-tail-merge-comparisons\fR" 4
  .IX Item "max-tail-merge-comparisons"
  The maximum amount of similar bbs to compare a bb with.  This is used to
  avoid quadratic behavior in tree tail merging.
! .IP "\fBmax-tail-merge-iterations\fR" 4
  .IX Item "max-tail-merge-iterations"
  The maximum amount of iterations of the pass over the function.  This is used to
  limit compilation time in tree tail merging.
! .IP "\fBstore-merging-allow-unaligned\fR" 4
  .IX Item "store-merging-allow-unaligned"
  Allow the store merging pass to introduce unaligned stores if it is legal to
  do so.
! .IP "\fBmax-stores-to-merge\fR" 4
  .IX Item "max-stores-to-merge"
  The maximum number of stores to attempt to merge into wider stores in the store
  merging pass.
! .IP "\fBmax-store-chains-to-track\fR" 4
  .IX Item "max-store-chains-to-track"
  The maximum number of store chains to track at the same time in the attempt
  to merge them into wider stores in the store merging pass.
! .IP "\fBmax-stores-to-track\fR" 4
  .IX Item "max-stores-to-track"
  The maximum number of stores to track at the same time in the attemt to
  to merge them into wider stores in the store merging pass.
! .IP "\fBmax-unrolled-insns\fR" 4
  .IX Item "max-unrolled-insns"
  The maximum number of instructions that a loop may have to be unrolled.
  If a loop is unrolled, this parameter also determines how many times
  the loop code is unrolled.
! .IP "\fBmax-average-unrolled-insns\fR" 4
  .IX Item "max-average-unrolled-insns"
  The maximum number of instructions biased by probabilities of their execution
  that a loop may have to be unrolled.  If a loop is unrolled,
  this parameter also determines how many times the loop code is unrolled.
! .IP "\fBmax-unroll-times\fR" 4
  .IX Item "max-unroll-times"
  The maximum number of unrollings of a single loop.
! .IP "\fBmax-peeled-insns\fR" 4
  .IX Item "max-peeled-insns"
  The maximum number of instructions that a loop may have to be peeled.
  If a loop is peeled, this parameter also determines how many times
  the loop code is peeled.
! .IP "\fBmax-peel-times\fR" 4
  .IX Item "max-peel-times"
  The maximum number of peelings of a single loop.
! .IP "\fBmax-peel-branches\fR" 4
  .IX Item "max-peel-branches"
  The maximum number of branches on the hot path through the peeled sequence.
! .IP "\fBmax-completely-peeled-insns\fR" 4
  .IX Item "max-completely-peeled-insns"
  The maximum number of insns of a completely peeled loop.
! .IP "\fBmax-completely-peel-times\fR" 4
  .IX Item "max-completely-peel-times"
  The maximum number of iterations of a loop to be suitable for complete peeling.
! .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
  .IX Item "max-completely-peel-loop-nest-depth"
  The maximum depth of a loop nest suitable for complete peeling.
! .IP "\fBmax-unswitch-insns\fR" 4
  .IX Item "max-unswitch-insns"
  The maximum number of insns of an unswitched loop.
! .IP "\fBmax-unswitch-depth\fR" 4
  .IX Item "max-unswitch-depth"
  The maximum depth of a loop nest to be unswitched.
! .IP "\fBlim-expensive\fR" 4
  .IX Item "lim-expensive"
  The minimum cost of an expensive expression in the loop invariant motion.
! .IP "\fBmin-loop-cond-split-prob\fR" 4
  .IX Item "min-loop-cond-split-prob"
! When \s-1FDO\s0 profile information is available, \fBmin-loop-cond-split-prob\fR
! specifies minimum threshold for probability of semi-invariant condition
  statement to trigger loop split.
! .IP "\fBiv-consider-all-candidates-bound\fR" 4
  .IX Item "iv-consider-all-candidates-bound"
  Bound on number of candidates for induction variables, below which
  all candidates are considered for each use in induction variable
  optimizations.  If there are more candidates than this,
  only the most relevant ones are considered to avoid quadratic time complexity.
! .IP "\fBiv-max-considered-uses\fR" 4
  .IX Item "iv-max-considered-uses"
  The induction variable optimizations give up on loops that contain more
  induction variable uses.
! .IP "\fBiv-always-prune-cand-set-bound\fR" 4
  .IX Item "iv-always-prune-cand-set-bound"
  If the number of candidates in the set is smaller than this value,
  always try to remove unnecessary ivs from the set
  when adding a new one.
! .IP "\fBavg-loop-niter\fR" 4
  .IX Item "avg-loop-niter"
  Average number of iterations of a loop.
! .IP "\fBdse-max-object-size\fR" 4
  .IX Item "dse-max-object-size"
  Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
  Larger values may result in larger compilation times.
! .IP "\fBdse-max-alias-queries-per-store\fR" 4
  .IX Item "dse-max-alias-queries-per-store"
  Maximum number of queries into the alias oracle per store.
  Larger values result in larger compilation times and may result in more
  removed dead stores.
! .IP "\fBscev-max-expr-size\fR" 4
  .IX Item "scev-max-expr-size"
  Bound on size of expressions used in the scalar evolutions analyzer.
  Large expressions slow the analyzer.
! .IP "\fBscev-max-expr-complexity\fR" 4
  .IX Item "scev-max-expr-complexity"
  Bound on the complexity of the expressions in the scalar evolutions analyzer.
  Complex expressions slow the analyzer.
! .IP "\fBmax-tree-if-conversion-phi-args\fR" 4
  .IX Item "max-tree-if-conversion-phi-args"
! Maximum number of arguments in a \s-1PHI\s0 supported by \s-1TREE\s0 if conversion
  unless the loop is marked with simd pragma.
! .IP "\fBvect-max-layout-candidates\fR" 4
  .IX Item "vect-max-layout-candidates"
  The maximum number of possible vector layouts (such as permutations)
! to consider when optimizing to-be-vectorized code.
! .IP "\fBvect-max-version-for-alignment-checks\fR" 4
  .IX Item "vect-max-version-for-alignment-checks"
! The maximum number of run-time checks that can be performed when
  doing loop versioning for alignment in the vectorizer.
! .IP "\fBvect-max-version-for-alias-checks\fR" 4
  .IX Item "vect-max-version-for-alias-checks"
! The maximum number of run-time checks that can be performed when
  doing loop versioning for alias in the vectorizer.
! .IP "\fBvect-max-peeling-for-alignment\fR" 4
  .IX Item "vect-max-peeling-for-alignment"
  The maximum number of loop peels to enhance access alignment
  for vectorizer. Value \-1 means no limit.
! .IP "\fBmax-iterations-to-track\fR" 4
  .IX Item "max-iterations-to-track"
! The maximum number of iterations of a loop the brute-force algorithm
  for analysis of the number of iterations of the loop tries to evaluate.
! .IP "\fBhot-bb-count-fraction\fR" 4
  .IX Item "hot-bb-count-fraction"
  The denominator n of fraction 1/n of the maximal execution count of a
  basic block in the entire program that a basic block needs to at least
  have in order to be considered hot.  The default is 10000, which means
  that a basic block is considered hot if its execution count is greater
  than 1/10000 of the maximal execution count.  0 means that it is never
! considered hot.  Used in non-LTO mode.
! .IP "\fBhot-bb-count-ws-permille\fR" 4
  .IX Item "hot-bb-count-ws-permille"
  The number of most executed permilles, ranging from 0 to 1000, of the
  profiled execution of the entire program to which the execution count
--- 14632,14850 ----
  recursion depth can be guessed from the probability that function recurses
  via a given call expression.  This parameter limits inlining only to call
  expressions whose probability exceeds the given threshold (in percents).
! .IP \fBearly\-inlining\-insns\fR 4
  .IX Item "early-inlining-insns"
  Specify growth that the early inliner can make.  In effect it increases
  the amount of inlining for code having a large abstraction penalty.
! .IP \fBmax\-early\-inliner\-iterations\fR 4
  .IX Item "max-early-inliner-iterations"
  Limit of iterations of the early inliner.  This basically bounds
  the number of nested indirect calls the early inliner can resolve.
  Deeper chains are still handled by late inlining.
! .IP \fBcomdat\-sharing\-probability\fR 4
  .IX Item "comdat-sharing-probability"
! Probability (in percent) that C++ inline function with comdat visibility
  are shared across multiple compilation units.
! .IP \fBmodref\-max\-bases\fR 4
  .IX Item "modref-max-bases"
  .PD 0
! .IP \fBmodref\-max\-refs\fR 4
  .IX Item "modref-max-refs"
! .IP \fBmodref\-max\-accesses\fR 4
  .IX Item "modref-max-accesses"
  .PD
  Specifies the maximal number of base pointers, references and accesses stored
  for a single function by mod/ref analysis.
! .IP \fBmodref\-max\-tests\fR 4
  .IX Item "modref-max-tests"
  Specifies the maxmal number of tests alias oracle can perform to disambiguate
  memory locations using the mod/ref information.  This parameter ought to be
! bigger than \fB\-\-param modref\-max\-bases\fR and \fB\-\-param
! modref\-max\-refs\fR.
! .IP \fBmodref\-max\-depth\fR 4
  .IX Item "modref-max-depth"
! Specifies the maximum depth of DFS walk used by modref escape analysis.
  Setting to 0 disables the analysis completely.
! .IP \fBmodref\-max\-escape\-points\fR 4
  .IX Item "modref-max-escape-points"
! Specifies the maximum number of escape points tracked by modref per SSA\-name.
! .IP \fBmodref\-max\-adjustments\fR 4
  .IX Item "modref-max-adjustments"
  Specifies the maximum number the access range is enlarged during modref dataflow
  analysis.
! .IP \fBprofile\-func\-internal\-id\fR 4
  .IX Item "profile-func-internal-id"
  A parameter to control whether to use function internal id in profile
  database lookup. If the value is 0, the compiler uses an id that
  is based on function assembler name and filename, which makes old profile
  data more tolerant to source changes such as function reordering etc.
! .IP \fBmin\-vect\-loop\-bound\fR 4
  .IX Item "min-vect-loop-bound"
  The minimum number of iterations under which loops are not vectorized
  when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
  vectorization needs to be greater than the value specified by this option
  to allow vectorization.
! .IP \fBgcse\-cost\-distance\-ratio\fR 4
  .IX Item "gcse-cost-distance-ratio"
  Scaling factor in calculation of maximum distance an expression
! can be moved by GCSE optimizations.  This is currently supported only in the
  code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
  is with simple expressions, i.e., the expressions that have cost
! less than \fBgcse\-unrestricted\-cost\fR.  Specifying 0 disables
  hoisting of simple expressions.
! .IP \fBgcse\-unrestricted\-cost\fR 4
  .IX Item "gcse-unrestricted-cost"
  Cost, roughly measured as the cost of a single typical machine
! instruction, at which GCSE optimizations do not constrain
  the distance an expression can travel.  This is currently
  supported only in the code hoisting pass.  The lesser the cost,
  the more aggressive code hoisting is.  Specifying 0 
  allows all expressions to travel unrestricted distances.
! .IP \fBmax\-hoist\-depth\fR 4
  .IX Item "max-hoist-depth"
  The depth of search in the dominator tree for expressions to hoist.
  This is used to avoid quadratic behavior in hoisting algorithm.
  The value of 0 does not limit on the search, but may slow down compilation
  of huge functions.
! .IP \fBmax\-tail\-merge\-comparisons\fR 4
  .IX Item "max-tail-merge-comparisons"
  The maximum amount of similar bbs to compare a bb with.  This is used to
  avoid quadratic behavior in tree tail merging.
! .IP \fBmax\-tail\-merge\-iterations\fR 4
  .IX Item "max-tail-merge-iterations"
  The maximum amount of iterations of the pass over the function.  This is used to
  limit compilation time in tree tail merging.
! .IP \fBstore\-merging\-allow\-unaligned\fR 4
  .IX Item "store-merging-allow-unaligned"
  Allow the store merging pass to introduce unaligned stores if it is legal to
  do so.
! .IP \fBmax\-stores\-to\-merge\fR 4
  .IX Item "max-stores-to-merge"
  The maximum number of stores to attempt to merge into wider stores in the store
  merging pass.
! .IP \fBmax\-store\-chains\-to\-track\fR 4
  .IX Item "max-store-chains-to-track"
  The maximum number of store chains to track at the same time in the attempt
  to merge them into wider stores in the store merging pass.
! .IP \fBmax\-stores\-to\-track\fR 4
  .IX Item "max-stores-to-track"
  The maximum number of stores to track at the same time in the attemt to
  to merge them into wider stores in the store merging pass.
! .IP \fBmax\-unrolled\-insns\fR 4
  .IX Item "max-unrolled-insns"
  The maximum number of instructions that a loop may have to be unrolled.
  If a loop is unrolled, this parameter also determines how many times
  the loop code is unrolled.
! .IP \fBmax\-average\-unrolled\-insns\fR 4
  .IX Item "max-average-unrolled-insns"
  The maximum number of instructions biased by probabilities of their execution
  that a loop may have to be unrolled.  If a loop is unrolled,
  this parameter also determines how many times the loop code is unrolled.
! .IP \fBmax\-unroll\-times\fR 4
  .IX Item "max-unroll-times"
  The maximum number of unrollings of a single loop.
! .IP \fBmax\-peeled\-insns\fR 4
  .IX Item "max-peeled-insns"
  The maximum number of instructions that a loop may have to be peeled.
  If a loop is peeled, this parameter also determines how many times
  the loop code is peeled.
! .IP \fBmax\-peel\-times\fR 4
  .IX Item "max-peel-times"
  The maximum number of peelings of a single loop.
! .IP \fBmax\-peel\-branches\fR 4
  .IX Item "max-peel-branches"
  The maximum number of branches on the hot path through the peeled sequence.
! .IP \fBmax\-completely\-peeled\-insns\fR 4
  .IX Item "max-completely-peeled-insns"
  The maximum number of insns of a completely peeled loop.
! .IP \fBmax\-completely\-peel\-times\fR 4
  .IX Item "max-completely-peel-times"
  The maximum number of iterations of a loop to be suitable for complete peeling.
! .IP \fBmax\-completely\-peel\-loop\-nest\-depth\fR 4
  .IX Item "max-completely-peel-loop-nest-depth"
  The maximum depth of a loop nest suitable for complete peeling.
! .IP \fBmax\-unswitch\-insns\fR 4
  .IX Item "max-unswitch-insns"
  The maximum number of insns of an unswitched loop.
! .IP \fBmax\-unswitch\-depth\fR 4
  .IX Item "max-unswitch-depth"
  The maximum depth of a loop nest to be unswitched.
! .IP \fBlim\-expensive\fR 4
  .IX Item "lim-expensive"
  The minimum cost of an expensive expression in the loop invariant motion.
! .IP \fBmin\-loop\-cond\-split\-prob\fR 4
  .IX Item "min-loop-cond-split-prob"
! When FDO profile information is available, \fBmin\-loop\-cond\-split\-prob\fR
! specifies minimum threshold for probability of semi\-invariant condition
  statement to trigger loop split.
! .IP \fBiv\-consider\-all\-candidates\-bound\fR 4
  .IX Item "iv-consider-all-candidates-bound"
  Bound on number of candidates for induction variables, below which
  all candidates are considered for each use in induction variable
  optimizations.  If there are more candidates than this,
  only the most relevant ones are considered to avoid quadratic time complexity.
! .IP \fBiv\-max\-considered\-uses\fR 4
  .IX Item "iv-max-considered-uses"
  The induction variable optimizations give up on loops that contain more
  induction variable uses.
! .IP \fBiv\-always\-prune\-cand\-set\-bound\fR 4
  .IX Item "iv-always-prune-cand-set-bound"
  If the number of candidates in the set is smaller than this value,
  always try to remove unnecessary ivs from the set
  when adding a new one.
! .IP \fBavg\-loop\-niter\fR 4
  .IX Item "avg-loop-niter"
  Average number of iterations of a loop.
! .IP \fBdse\-max\-object\-size\fR 4
  .IX Item "dse-max-object-size"
  Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
  Larger values may result in larger compilation times.
! .IP \fBdse\-max\-alias\-queries\-per\-store\fR 4
  .IX Item "dse-max-alias-queries-per-store"
  Maximum number of queries into the alias oracle per store.
  Larger values result in larger compilation times and may result in more
  removed dead stores.
! .IP \fBscev\-max\-expr\-size\fR 4
  .IX Item "scev-max-expr-size"
  Bound on size of expressions used in the scalar evolutions analyzer.
  Large expressions slow the analyzer.
! .IP \fBscev\-max\-expr\-complexity\fR 4
  .IX Item "scev-max-expr-complexity"
  Bound on the complexity of the expressions in the scalar evolutions analyzer.
  Complex expressions slow the analyzer.
! .IP \fBmax\-tree\-if\-conversion\-phi\-args\fR 4
  .IX Item "max-tree-if-conversion-phi-args"
! Maximum number of arguments in a PHI supported by TREE if conversion
  unless the loop is marked with simd pragma.
! .IP \fBvect\-max\-layout\-candidates\fR 4
  .IX Item "vect-max-layout-candidates"
  The maximum number of possible vector layouts (such as permutations)
! to consider when optimizing to\-be\-vectorized code.
! .IP \fBvect\-max\-version\-for\-alignment\-checks\fR 4
  .IX Item "vect-max-version-for-alignment-checks"
! The maximum number of run\-time checks that can be performed when
  doing loop versioning for alignment in the vectorizer.
! .IP \fBvect\-max\-version\-for\-alias\-checks\fR 4
  .IX Item "vect-max-version-for-alias-checks"
! The maximum number of run\-time checks that can be performed when
  doing loop versioning for alias in the vectorizer.
! .IP \fBvect\-max\-peeling\-for\-alignment\fR 4
  .IX Item "vect-max-peeling-for-alignment"
  The maximum number of loop peels to enhance access alignment
  for vectorizer. Value \-1 means no limit.
! .IP \fBmax\-iterations\-to\-track\fR 4
  .IX Item "max-iterations-to-track"
! The maximum number of iterations of a loop the brute\-force algorithm
  for analysis of the number of iterations of the loop tries to evaluate.
! .IP \fBhot\-bb\-count\-fraction\fR 4
  .IX Item "hot-bb-count-fraction"
  The denominator n of fraction 1/n of the maximal execution count of a
  basic block in the entire program that a basic block needs to at least
  have in order to be considered hot.  The default is 10000, which means
  that a basic block is considered hot if its execution count is greater
  than 1/10000 of the maximal execution count.  0 means that it is never
! considered hot.  Used in non\-LTO mode.
! .IP \fBhot\-bb\-count\-ws\-permille\fR 4
  .IX Item "hot-bb-count-ws-permille"
  The number of most executed permilles, ranging from 0 to 1000, of the
  profiled execution of the entire program to which the execution count
*************** of a basic block must be part of in orde
*** 14919,14926 ****
  default is 990, which means that a basic block is considered hot if
  its execution count contributes to the upper 990 permilles, or 99.0%,
  of the profiled execution of the entire program.  0 means that it is
! never considered hot.  Used in \s-1LTO\s0 mode.
! .IP "\fBhot-bb-frequency-fraction\fR" 4
  .IX Item "hot-bb-frequency-fraction"
  The denominator n of fraction 1/n of the execution frequency of the
  entry block of a function that a basic block of this function needs
--- 14852,14859 ----
  default is 990, which means that a basic block is considered hot if
  its execution count contributes to the upper 990 permilles, or 99.0%,
  of the profiled execution of the entire program.  0 means that it is
! never considered hot.  Used in LTO mode.
! .IP \fBhot\-bb\-frequency\-fraction\fR 4
  .IX Item "hot-bb-frequency-fraction"
  The denominator n of fraction 1/n of the execution frequency of the
  entry block of a function that a basic block of this function needs
*************** to at least have in order to be consider
*** 14928,14934 ****
  which means that a basic block is considered hot in a function if it
  is executed more frequently than 1/1000 of the frequency of the entry
  block of the function.  0 means that it is never considered hot.
! .IP "\fBunlikely-bb-count-fraction\fR" 4
  .IX Item "unlikely-bb-count-fraction"
  The denominator n of fraction 1/n of the number of profiled runs of
  the entire program below which the execution count of a basic block
--- 14861,14867 ----
  which means that a basic block is considered hot in a function if it
  is executed more frequently than 1/1000 of the frequency of the entry
  block of the function.  0 means that it is never considered hot.
! .IP \fBunlikely\-bb\-count\-fraction\fR 4
  .IX Item "unlikely-bb-count-fraction"
  The denominator n of fraction 1/n of the number of profiled runs of
  the entire program below which the execution count of a basic block
*************** must be in order for the basic block to
*** 14936,14942 ****
  The default is 20, which means that a basic block is considered unlikely
  executed if it is executed in fewer than 1/20, or 5%, of the runs of
  the program.  0 means that it is always considered unlikely executed.
! .IP "\fBmax-predicted-iterations\fR" 4
  .IX Item "max-predicted-iterations"
  The maximum number of loop iterations we predict statically.  This is useful
  in cases where a function contains a single loop with known bound and
--- 14869,14875 ----
  The default is 20, which means that a basic block is considered unlikely
  executed if it is executed in fewer than 1/20, or 5%, of the runs of
  the program.  0 means that it is always considered unlikely executed.
! .IP \fBmax\-predicted\-iterations\fR 4
  .IX Item "max-predicted-iterations"
  The maximum number of loop iterations we predict statically.  This is useful
  in cases where a function contains a single loop with known bound and
*************** another loop with unknown bound.
*** 14944,15191 ****
  The known number of iterations is predicted correctly, while
  the unknown number of iterations average to roughly 10.  This means that the
  loop without bounds appears artificially cold relative to the other one.
! .IP "\fBbuiltin-expect-probability\fR" 4
  .IX Item "builtin-expect-probability"
  Control the probability of the expression having the specified value. This
  parameter takes a percentage (i.e. 0 ... 100) as input.
! .IP "\fBbuiltin-string-cmp-inline-length\fR" 4
  .IX Item "builtin-string-cmp-inline-length"
  The maximum length of a constant string for a builtin string cmp call 
  eligible for inlining.
! .IP "\fBalign-threshold\fR" 4
  .IX Item "align-threshold"
  Select fraction of the maximal frequency of executions of a basic block in
  a function to align the basic block.
! .IP "\fBalign-loop-iterations\fR" 4
  .IX Item "align-loop-iterations"
  A loop expected to iterate at least the selected number of iterations is
  aligned.
! .IP "\fBtracer-dynamic-coverage\fR" 4
  .IX Item "tracer-dynamic-coverage"
  .PD 0
! .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
  .IX Item "tracer-dynamic-coverage-feedback"
  .PD
  This value is used to limit superblock formation once the given percentage of
  executed instructions is covered.  This limits unnecessary code size
  expansion.
  .Sp
! The \fBtracer-dynamic-coverage-feedback\fR parameter
  is used only when profile
  feedback is available.  The real profiles (as opposed to statically estimated
  ones) are much less balanced allowing the threshold to be larger value.
! .IP "\fBtracer-max-code-growth\fR" 4
  .IX Item "tracer-max-code-growth"
  Stop tail duplication once code growth has reached given percentage.  This is
  a rather artificial limit, as most of the duplicates are eliminated later in
  cross jumping, so it may be set to much higher values than is the desired code
  growth.
! .IP "\fBtracer-min-branch-ratio\fR" 4
  .IX Item "tracer-min-branch-ratio"
  Stop reverse growth when the reverse probability of best edge is less than this
  threshold (in percent).
! .IP "\fBtracer-min-branch-probability\fR" 4
  .IX Item "tracer-min-branch-probability"
  .PD 0
! .IP "\fBtracer-min-branch-probability-feedback\fR" 4
  .IX Item "tracer-min-branch-probability-feedback"
  .PD
  Stop forward growth if the best edge has probability lower than this
  threshold.
  .Sp
! Similarly to \fBtracer-dynamic-coverage\fR two parameters are
! provided.  \fBtracer-min-branch-probability-feedback\fR is used for
! compilation with profile feedback and \fBtracer-min-branch-probability\fR
  compilation without.  The value for compilation with profile feedback
  needs to be more conservative (higher) in order to make tracer
  effective.
! .IP "\fBstack-clash-protection-guard-size\fR" 4
  .IX Item "stack-clash-protection-guard-size"
  Specify the size of the operating system provided stack guard as
  2 raised to \fInum\fR bytes.  Higher values may reduce the
  number of explicit probes, but a value larger than the operating system
  provided guard will leave code vulnerable to stack clash style attacks.
! .IP "\fBstack-clash-protection-probe-interval\fR" 4
  .IX Item "stack-clash-protection-probe-interval"
  Stack clash protection involves probing stack space as it is allocated.  This
  param controls the maximum distance between probes into the stack as 2 raised
  to \fInum\fR bytes.  Higher values may reduce the number of explicit probes, but a value
  larger than the operating system provided guard will leave code vulnerable to
  stack clash style attacks.
! .IP "\fBmax-cse-path-length\fR" 4
  .IX Item "max-cse-path-length"
! The maximum number of basic blocks on path that \s-1CSE\s0 considers.
! .IP "\fBmax-cse-insns\fR" 4
  .IX Item "max-cse-insns"
! The maximum number of instructions \s-1CSE\s0 processes before flushing.
! .IP "\fBggc-min-expand\fR" 4
  .IX Item "ggc-min-expand"
! \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
  parameter specifies the minimum percentage by which the garbage
! collector's heap should be allowed to expand between collections.
  Tuning this may improve compilation speed; it has no effect on code
  generation.
  .Sp
! The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
! \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\*(R"\s0 is
! the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
! \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
  bound of 30% is used.  Setting this parameter and
! \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
  every opportunity.  This is extremely slow, but can be useful for
  debugging.
! .IP "\fBggc-min-heapsize\fR" 4
  .IX Item "ggc-min-heapsize"
! Minimum size of the garbage collector's heap before it begins bothering
  to collect garbage.  The first collection occurs after the heap expands
! by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
  tuning this may improve compilation speed, and has no effect on code
  generation.
  .Sp
! The default is the smaller of \s-1RAM/8, RLIMIT_RSS,\s0 or a limit that
! tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
  with a lower bound of 4096 (four megabytes) and an upper bound of
! 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
  particular platform, the lower bound is used.  Setting this parameter
  very large effectively disables garbage collection.  Setting this
! parameter and \fBggc-min-expand\fR to zero causes a full collection
  to occur at every opportunity.
! .IP "\fBmax-reload-search-insns\fR" 4
  .IX Item "max-reload-search-insns"
  The maximum number of instruction reload should look backward for equivalent
  register.  Increasing values mean more aggressive optimization, making the
  compilation time increase with probably slightly better performance.
! .IP "\fBmax-cselib-memory-locations\fR" 4
  .IX Item "max-cselib-memory-locations"
  The maximum number of memory locations cselib should take into account.
  Increasing values mean more aggressive optimization, making the compilation time
  increase with probably slightly better performance.
! .IP "\fBmax-sched-ready-insns\fR" 4
  .IX Item "max-sched-ready-insns"
  The maximum number of instructions ready to be issued the scheduler should
  consider at any given time during the first scheduling pass.  Increasing
  values mean more thorough searches, making the compilation time increase
  with probably little benefit.
! .IP "\fBmax-sched-region-blocks\fR" 4
  .IX Item "max-sched-region-blocks"
  The maximum number of blocks in a region to be considered for
  interblock scheduling.
! .IP "\fBmax-pipeline-region-blocks\fR" 4
  .IX Item "max-pipeline-region-blocks"
  The maximum number of blocks in a region to be considered for
  pipelining in the selective scheduler.
! .IP "\fBmax-sched-region-insns\fR" 4
  .IX Item "max-sched-region-insns"
  The maximum number of insns in a region to be considered for
  interblock scheduling.
! .IP "\fBmax-pipeline-region-insns\fR" 4
  .IX Item "max-pipeline-region-insns"
  The maximum number of insns in a region to be considered for
  pipelining in the selective scheduler.
! .IP "\fBmin-spec-prob\fR" 4
  .IX Item "min-spec-prob"
  The minimum probability (in percents) of reaching a source block
  for interblock speculative scheduling.
! .IP "\fBmax-sched-extend-regions-iters\fR" 4
  .IX Item "max-sched-extend-regions-iters"
! The maximum number of iterations through \s-1CFG\s0 to extend regions.
  A value of 0 disables region extensions.
! .IP "\fBmax-sched-insn-conflict-delay\fR" 4
  .IX Item "max-sched-insn-conflict-delay"
  The maximum conflict delay for an insn to be considered for speculative motion.
! .IP "\fBsched-spec-prob-cutoff\fR" 4
  .IX Item "sched-spec-prob-cutoff"
  The minimal probability of speculation success (in percents), so that
  speculative insns are scheduled.
! .IP "\fBsched-state-edge-prob-cutoff\fR" 4
  .IX Item "sched-state-edge-prob-cutoff"
  The minimum probability an edge must have for the scheduler to save its
  state across it.
! .IP "\fBsched-mem-true-dep-cost\fR" 4
  .IX Item "sched-mem-true-dep-cost"
! Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
  memory locations.
! .IP "\fBselsched-max-lookahead\fR" 4
  .IX Item "selsched-max-lookahead"
  The maximum size of the lookahead window of selective scheduling.  It is a
  depth of search for available instructions.
! .IP "\fBselsched-max-sched-times\fR" 4
  .IX Item "selsched-max-sched-times"
  The maximum number of times that an instruction is scheduled during
  selective scheduling.  This is the limit on the number of iterations
  through which the instruction may be pipelined.
! .IP "\fBselsched-insns-to-rename\fR" 4
  .IX Item "selsched-insns-to-rename"
  The maximum number of best instructions in the ready list that are considered
  for renaming in the selective scheduler.
! .IP "\fBsms-min-sc\fR" 4
  .IX Item "sms-min-sc"
  The minimum value of stage count that swing modulo scheduler
  generates.
! .IP "\fBmax-last-value-rtl\fR" 4
  .IX Item "max-last-value-rtl"
  The maximum size measured as number of RTLs that can be recorded in an expression
  in combiner for a pseudo register as last known value of that register.
! .IP "\fBmax-combine-insns\fR" 4
  .IX Item "max-combine-insns"
! The maximum number of instructions the \s-1RTL\s0 combiner tries to combine.
! .IP "\fBinteger-share-limit\fR" 4
  .IX Item "integer-share-limit"
  Small integer constants can use a shared data structure, reducing the
! compiler's memory usage and increasing its speed.  This sets the maximum
  value of a shared integer constant.
! .IP "\fBssp-buffer-size\fR" 4
  .IX Item "ssp-buffer-size"
  The minimum size of buffers (i.e. arrays) that receive stack smashing
  protection when \fB\-fstack\-protector\fR is used.
! .IP "\fBmin-size-for-stack-sharing\fR" 4
  .IX Item "min-size-for-stack-sharing"
  The minimum size of variables taking part in stack slot sharing when not
  optimizing.
! .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
  .IX Item "max-jump-thread-duplication-stmts"
  Maximum number of statements allowed in a block that needs to be
  duplicated when threading jumps.
! .IP "\fBmax-jump-thread-paths\fR" 4
  .IX Item "max-jump-thread-paths"
  The maximum number of paths to consider when searching for jump threading
  opportunities.  When arriving at a block, incoming edges are only considered
  if the number of paths to be searched so far multiplied by the number of
  incoming edges does not exhaust the specified maximum number of paths to
  consider.
! .IP "\fBmax-fields-for-field-sensitive\fR" 4
  .IX Item "max-fields-for-field-sensitive"
  Maximum number of fields in a structure treated in
  a field sensitive manner during pointer analysis.
! .IP "\fBprefetch-latency\fR" 4
  .IX Item "prefetch-latency"
  Estimate on average number of instructions that are executed before
  prefetch finishes.  The distance prefetched ahead is proportional
  to this constant.  Increasing this number may also lead to less
! streams being prefetched (see \fBsimultaneous-prefetches\fR).
! .IP "\fBsimultaneous-prefetches\fR" 4
  .IX Item "simultaneous-prefetches"
  Maximum number of prefetches that can run at the same time.
! .IP "\fBl1\-cache\-line\-size\fR" 4
  .IX Item "l1-cache-line-size"
  The size of cache line in L1 data cache, in bytes.
! .IP "\fBl1\-cache\-size\fR" 4
  .IX Item "l1-cache-size"
  The size of L1 data cache, in kilobytes.
! .IP "\fBl2\-cache\-size\fR" 4
  .IX Item "l2-cache-size"
  The size of L2 data cache, in kilobytes.
! .IP "\fBprefetch-dynamic-strides\fR" 4
  .IX Item "prefetch-dynamic-strides"
  Whether the loop array prefetch pass should issue software prefetch hints
! for strides that are non-constant.  In some cases this may be
! beneficial, though the fact the stride is non-constant may make it
  hard to predict when there is clear benefit to issuing these hints.
  .Sp
! Set to 1 if the prefetch hints should be issued for non-constant
  strides.  Set to 0 if prefetch hints should be issued only for strides that
! are known to be constant and below \fBprefetch-minimum-stride\fR.
! .IP "\fBprefetch-minimum-stride\fR" 4
  .IX Item "prefetch-minimum-stride"
  Minimum constant stride, in bytes, to start using prefetch hints for.  If
  the stride is less than this threshold, prefetch hints will not be issued.
--- 14877,15124 ----
  The known number of iterations is predicted correctly, while
  the unknown number of iterations average to roughly 10.  This means that the
  loop without bounds appears artificially cold relative to the other one.
! .IP \fBbuiltin\-expect\-probability\fR 4
  .IX Item "builtin-expect-probability"
  Control the probability of the expression having the specified value. This
  parameter takes a percentage (i.e. 0 ... 100) as input.
! .IP \fBbuiltin\-string\-cmp\-inline\-length\fR 4
  .IX Item "builtin-string-cmp-inline-length"
  The maximum length of a constant string for a builtin string cmp call 
  eligible for inlining.
! .IP \fBalign\-threshold\fR 4
  .IX Item "align-threshold"
  Select fraction of the maximal frequency of executions of a basic block in
  a function to align the basic block.
! .IP \fBalign\-loop\-iterations\fR 4
  .IX Item "align-loop-iterations"
  A loop expected to iterate at least the selected number of iterations is
  aligned.
! .IP \fBtracer\-dynamic\-coverage\fR 4
  .IX Item "tracer-dynamic-coverage"
  .PD 0
! .IP \fBtracer\-dynamic\-coverage\-feedback\fR 4
  .IX Item "tracer-dynamic-coverage-feedback"
  .PD
  This value is used to limit superblock formation once the given percentage of
  executed instructions is covered.  This limits unnecessary code size
  expansion.
  .Sp
! The \fBtracer\-dynamic\-coverage\-feedback\fR parameter
  is used only when profile
  feedback is available.  The real profiles (as opposed to statically estimated
  ones) are much less balanced allowing the threshold to be larger value.
! .IP \fBtracer\-max\-code\-growth\fR 4
  .IX Item "tracer-max-code-growth"
  Stop tail duplication once code growth has reached given percentage.  This is
  a rather artificial limit, as most of the duplicates are eliminated later in
  cross jumping, so it may be set to much higher values than is the desired code
  growth.
! .IP \fBtracer\-min\-branch\-ratio\fR 4
  .IX Item "tracer-min-branch-ratio"
  Stop reverse growth when the reverse probability of best edge is less than this
  threshold (in percent).
! .IP \fBtracer\-min\-branch\-probability\fR 4
  .IX Item "tracer-min-branch-probability"
  .PD 0
! .IP \fBtracer\-min\-branch\-probability\-feedback\fR 4
  .IX Item "tracer-min-branch-probability-feedback"
  .PD
  Stop forward growth if the best edge has probability lower than this
  threshold.
  .Sp
! Similarly to \fBtracer\-dynamic\-coverage\fR two parameters are
! provided.  \fBtracer\-min\-branch\-probability\-feedback\fR is used for
! compilation with profile feedback and \fBtracer\-min\-branch\-probability\fR
  compilation without.  The value for compilation with profile feedback
  needs to be more conservative (higher) in order to make tracer
  effective.
! .IP \fBstack\-clash\-protection\-guard\-size\fR 4
  .IX Item "stack-clash-protection-guard-size"
  Specify the size of the operating system provided stack guard as
  2 raised to \fInum\fR bytes.  Higher values may reduce the
  number of explicit probes, but a value larger than the operating system
  provided guard will leave code vulnerable to stack clash style attacks.
! .IP \fBstack\-clash\-protection\-probe\-interval\fR 4
  .IX Item "stack-clash-protection-probe-interval"
  Stack clash protection involves probing stack space as it is allocated.  This
  param controls the maximum distance between probes into the stack as 2 raised
  to \fInum\fR bytes.  Higher values may reduce the number of explicit probes, but a value
  larger than the operating system provided guard will leave code vulnerable to
  stack clash style attacks.
! .IP \fBmax\-cse\-path\-length\fR 4
  .IX Item "max-cse-path-length"
! The maximum number of basic blocks on path that CSE considers.
! .IP \fBmax\-cse\-insns\fR 4
  .IX Item "max-cse-insns"
! The maximum number of instructions CSE processes before flushing.
! .IP \fBggc\-min\-expand\fR 4
  .IX Item "ggc-min-expand"
! GCC uses a garbage collector to manage its own memory allocation.  This
  parameter specifies the minimum percentage by which the garbage
! collector\*(Aqs heap should be allowed to expand between collections.
  Tuning this may improve compilation speed; it has no effect on code
  generation.
  .Sp
! The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
! RAM >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of "RAM" is
! the smallest of actual RAM and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
! GCC is not able to calculate RAM on a particular platform, the lower
  bound of 30% is used.  Setting this parameter and
! \&\fBggc\-min\-heapsize\fR to zero causes a full collection to occur at
  every opportunity.  This is extremely slow, but can be useful for
  debugging.
! .IP \fBggc\-min\-heapsize\fR 4
  .IX Item "ggc-min-heapsize"
! Minimum size of the garbage collector\*(Aqs heap before it begins bothering
  to collect garbage.  The first collection occurs after the heap expands
! by \fBggc\-min\-expand\fR% beyond \fBggc\-min\-heapsize\fR.  Again,
  tuning this may improve compilation speed, and has no effect on code
  generation.
  .Sp
! The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
! tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
  with a lower bound of 4096 (four megabytes) and an upper bound of
! 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
  particular platform, the lower bound is used.  Setting this parameter
  very large effectively disables garbage collection.  Setting this
! parameter and \fBggc\-min\-expand\fR to zero causes a full collection
  to occur at every opportunity.
! .IP \fBmax\-reload\-search\-insns\fR 4
  .IX Item "max-reload-search-insns"
  The maximum number of instruction reload should look backward for equivalent
  register.  Increasing values mean more aggressive optimization, making the
  compilation time increase with probably slightly better performance.
! .IP \fBmax\-cselib\-memory\-locations\fR 4
  .IX Item "max-cselib-memory-locations"
  The maximum number of memory locations cselib should take into account.
  Increasing values mean more aggressive optimization, making the compilation time
  increase with probably slightly better performance.
! .IP \fBmax\-sched\-ready\-insns\fR 4
  .IX Item "max-sched-ready-insns"
  The maximum number of instructions ready to be issued the scheduler should
  consider at any given time during the first scheduling pass.  Increasing
  values mean more thorough searches, making the compilation time increase
  with probably little benefit.
! .IP \fBmax\-sched\-region\-blocks\fR 4
  .IX Item "max-sched-region-blocks"
  The maximum number of blocks in a region to be considered for
  interblock scheduling.
! .IP \fBmax\-pipeline\-region\-blocks\fR 4
  .IX Item "max-pipeline-region-blocks"
  The maximum number of blocks in a region to be considered for
  pipelining in the selective scheduler.
! .IP \fBmax\-sched\-region\-insns\fR 4
  .IX Item "max-sched-region-insns"
  The maximum number of insns in a region to be considered for
  interblock scheduling.
! .IP \fBmax\-pipeline\-region\-insns\fR 4
  .IX Item "max-pipeline-region-insns"
  The maximum number of insns in a region to be considered for
  pipelining in the selective scheduler.
! .IP \fBmin\-spec\-prob\fR 4
  .IX Item "min-spec-prob"
  The minimum probability (in percents) of reaching a source block
  for interblock speculative scheduling.
! .IP \fBmax\-sched\-extend\-regions\-iters\fR 4
  .IX Item "max-sched-extend-regions-iters"
! The maximum number of iterations through CFG to extend regions.
  A value of 0 disables region extensions.
! .IP \fBmax\-sched\-insn\-conflict\-delay\fR 4
  .IX Item "max-sched-insn-conflict-delay"
  The maximum conflict delay for an insn to be considered for speculative motion.
! .IP \fBsched\-spec\-prob\-cutoff\fR 4
  .IX Item "sched-spec-prob-cutoff"
  The minimal probability of speculation success (in percents), so that
  speculative insns are scheduled.
! .IP \fBsched\-state\-edge\-prob\-cutoff\fR 4
  .IX Item "sched-state-edge-prob-cutoff"
  The minimum probability an edge must have for the scheduler to save its
  state across it.
! .IP \fBsched\-mem\-true\-dep\-cost\fR 4
  .IX Item "sched-mem-true-dep-cost"
! Minimal distance (in CPU cycles) between store and load targeting same
  memory locations.
! .IP \fBselsched\-max\-lookahead\fR 4
  .IX Item "selsched-max-lookahead"
  The maximum size of the lookahead window of selective scheduling.  It is a
  depth of search for available instructions.
! .IP \fBselsched\-max\-sched\-times\fR 4
  .IX Item "selsched-max-sched-times"
  The maximum number of times that an instruction is scheduled during
  selective scheduling.  This is the limit on the number of iterations
  through which the instruction may be pipelined.
! .IP \fBselsched\-insns\-to\-rename\fR 4
  .IX Item "selsched-insns-to-rename"
  The maximum number of best instructions in the ready list that are considered
  for renaming in the selective scheduler.
! .IP \fBsms\-min\-sc\fR 4
  .IX Item "sms-min-sc"
  The minimum value of stage count that swing modulo scheduler
  generates.
! .IP \fBmax\-last\-value\-rtl\fR 4
  .IX Item "max-last-value-rtl"
  The maximum size measured as number of RTLs that can be recorded in an expression
  in combiner for a pseudo register as last known value of that register.
! .IP \fBmax\-combine\-insns\fR 4
  .IX Item "max-combine-insns"
! The maximum number of instructions the RTL combiner tries to combine.
! .IP \fBinteger\-share\-limit\fR 4
  .IX Item "integer-share-limit"
  Small integer constants can use a shared data structure, reducing the
! compiler\*(Aqs memory usage and increasing its speed.  This sets the maximum
  value of a shared integer constant.
! .IP \fBssp\-buffer\-size\fR 4
  .IX Item "ssp-buffer-size"
  The minimum size of buffers (i.e. arrays) that receive stack smashing
  protection when \fB\-fstack\-protector\fR is used.
! .IP \fBmin\-size\-for\-stack\-sharing\fR 4
  .IX Item "min-size-for-stack-sharing"
  The minimum size of variables taking part in stack slot sharing when not
  optimizing.
! .IP \fBmax\-jump\-thread\-duplication\-stmts\fR 4
  .IX Item "max-jump-thread-duplication-stmts"
  Maximum number of statements allowed in a block that needs to be
  duplicated when threading jumps.
! .IP \fBmax\-jump\-thread\-paths\fR 4
  .IX Item "max-jump-thread-paths"
  The maximum number of paths to consider when searching for jump threading
  opportunities.  When arriving at a block, incoming edges are only considered
  if the number of paths to be searched so far multiplied by the number of
  incoming edges does not exhaust the specified maximum number of paths to
  consider.
! .IP \fBmax\-fields\-for\-field\-sensitive\fR 4
  .IX Item "max-fields-for-field-sensitive"
  Maximum number of fields in a structure treated in
  a field sensitive manner during pointer analysis.
! .IP \fBprefetch\-latency\fR 4
  .IX Item "prefetch-latency"
  Estimate on average number of instructions that are executed before
  prefetch finishes.  The distance prefetched ahead is proportional
  to this constant.  Increasing this number may also lead to less
! streams being prefetched (see \fBsimultaneous\-prefetches\fR).
! .IP \fBsimultaneous\-prefetches\fR 4
  .IX Item "simultaneous-prefetches"
  Maximum number of prefetches that can run at the same time.
! .IP \fBl1\-cache\-line\-size\fR 4
  .IX Item "l1-cache-line-size"
  The size of cache line in L1 data cache, in bytes.
! .IP \fBl1\-cache\-size\fR 4
  .IX Item "l1-cache-size"
  The size of L1 data cache, in kilobytes.
! .IP \fBl2\-cache\-size\fR 4
  .IX Item "l2-cache-size"
  The size of L2 data cache, in kilobytes.
! .IP \fBprefetch\-dynamic\-strides\fR 4
  .IX Item "prefetch-dynamic-strides"
  Whether the loop array prefetch pass should issue software prefetch hints
! for strides that are non\-constant.  In some cases this may be
! beneficial, though the fact the stride is non\-constant may make it
  hard to predict when there is clear benefit to issuing these hints.
  .Sp
! Set to 1 if the prefetch hints should be issued for non\-constant
  strides.  Set to 0 if prefetch hints should be issued only for strides that
! are known to be constant and below \fBprefetch\-minimum\-stride\fR.
! .IP \fBprefetch\-minimum\-stride\fR 4
  .IX Item "prefetch-minimum-stride"
  Minimum constant stride, in bytes, to start using prefetch hints for.  If
  the stride is less than this threshold, prefetch hints will not be issued.
*************** the software prefetchers.  If the hardwa
*** 15196,15216 ****
  stride they can handle, it should be used here to improve the use of
  software prefetchers.
  .Sp
! A value of \-1 means we don't have a threshold and therefore
  prefetch hints can be issued for any constant stride.
  .Sp
  This setting is only useful for strides that are known and constant.
! .IP "\fBdestructive-interference-size\fR" 4
  .IX Item "destructive-interference-size"
  .PD 0
! .IP "\fBconstructive-interference-size\fR" 4
  .IX Item "constructive-interference-size"
  .PD
! The values for the \*(C+17 variables
  \&\f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR and
  \&\f(CW\*(C`std::hardware_constructive_interference_size\*(C'\fR.  The destructive
  interference size is the minimum recommended offset between two
! independent concurrently-accessed objects; the constructive
  interference size is the maximum recommended size of contiguous memory
  accessed together.  Typically both will be the size of an L1 cache
  line for the target, in bytes.  For a generic target covering a range of L1
--- 15129,15149 ----
  stride they can handle, it should be used here to improve the use of
  software prefetchers.
  .Sp
! A value of \-1 means we don\*(Aqt have a threshold and therefore
  prefetch hints can be issued for any constant stride.
  .Sp
  This setting is only useful for strides that are known and constant.
! .IP \fBdestructive\-interference\-size\fR 4
  .IX Item "destructive-interference-size"
  .PD 0
! .IP \fBconstructive\-interference\-size\fR 4
  .IX Item "constructive-interference-size"
  .PD
! The values for the C++17 variables
  \&\f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR and
  \&\f(CW\*(C`std::hardware_constructive_interference_size\*(C'\fR.  The destructive
  interference size is the minimum recommended offset between two
! independent concurrently\-accessed objects; the constructive
  interference size is the maximum recommended size of contiguous memory
  accessed together.  Typically both will be the size of an L1 cache
  line for the target, in bytes.  For a generic target covering a range of L1
*************** the small end of the range and the destr
*** 15219,15227 ****
  end.
  .Sp
  The destructive interference size is intended to be used for layout,
! and thus has \s-1ABI\s0 impact.  The default value is not expected to be
  stable, and on some targets varies with \fB\-mtune\fR, so use of
! this variable in a context where \s-1ABI\s0 stability is important, such as
  the public interface of a library, is strongly discouraged; if it is
  used in that context, users can stabilize the value using this
  option.
--- 15152,15160 ----
  end.
  .Sp
  The destructive interference size is intended to be used for layout,
! and thus has ABI impact.  The default value is not expected to be
  stable, and on some targets varies with \fB\-mtune\fR, so use of
! this variable in a context where ABI stability is important, such as
  the public interface of a library, is strongly discouraged; if it is
  used in that context, users can stabilize the value using this
  option.
*************** typically only used in a \fBstatic_asser
*** 15231,15263 ****
  fits within a cache line.
  .Sp
  See also \fB\-Winterference\-size\fR.
! .IP "\fBloop-interchange-max-num-stmts\fR" 4
  .IX Item "loop-interchange-max-num-stmts"
  The maximum number of stmts in a loop to be interchanged.
! .IP "\fBloop-interchange-stride-ratio\fR" 4
  .IX Item "loop-interchange-stride-ratio"
  The minimum ratio between stride of two loops for interchange to be profitable.
! .IP "\fBmin-insn-to-prefetch-ratio\fR" 4
  .IX Item "min-insn-to-prefetch-ratio"
  The minimum ratio between the number of instructions and the
  number of prefetches to enable prefetching in a loop.
! .IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
  .IX Item "prefetch-min-insn-to-mem-ratio"
  The minimum ratio between the number of instructions and the
  number of memory references to enable prefetching in a loop.
! .IP "\fBuse-canonical-types\fR" 4
  .IX Item "use-canonical-types"
! Whether the compiler should use the \*(L"canonical\*(R" type system.
  Should always be 1, which uses a more efficient internal
! mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
  bugs in the canonical type system are causing compilation failures,
  set this value to 0 to disable canonical types.
! .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
  .IX Item "switch-conversion-max-branch-ratio"
  Switch initialization conversion refuses to create arrays that are
! bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
  branches in the switch.
! .IP "\fBmax-partial-antic-length\fR" 4
  .IX Item "max-partial-antic-length"
  Maximum length of the partial antic set computed during the tree
  partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
--- 15164,15196 ----
  fits within a cache line.
  .Sp
  See also \fB\-Winterference\-size\fR.
! .IP \fBloop\-interchange\-max\-num\-stmts\fR 4
  .IX Item "loop-interchange-max-num-stmts"
  The maximum number of stmts in a loop to be interchanged.
! .IP \fBloop\-interchange\-stride\-ratio\fR 4
  .IX Item "loop-interchange-stride-ratio"
  The minimum ratio between stride of two loops for interchange to be profitable.
! .IP \fBmin\-insn\-to\-prefetch\-ratio\fR 4
  .IX Item "min-insn-to-prefetch-ratio"
  The minimum ratio between the number of instructions and the
  number of prefetches to enable prefetching in a loop.
! .IP \fBprefetch\-min\-insn\-to\-mem\-ratio\fR 4
  .IX Item "prefetch-min-insn-to-mem-ratio"
  The minimum ratio between the number of instructions and the
  number of memory references to enable prefetching in a loop.
! .IP \fBuse\-canonical\-types\fR 4
  .IX Item "use-canonical-types"
! Whether the compiler should use the "canonical" type system.
  Should always be 1, which uses a more efficient internal
! mechanism for comparing types in C++ and Objective\-C++.  However, if
  bugs in the canonical type system are causing compilation failures,
  set this value to 0 to disable canonical types.
! .IP \fBswitch\-conversion\-max\-branch\-ratio\fR 4
  .IX Item "switch-conversion-max-branch-ratio"
  Switch initialization conversion refuses to create arrays that are
! bigger than \fBswitch\-conversion\-max\-branch\-ratio\fR times the number of
  branches in the switch.
! .IP \fBmax\-partial\-antic\-length\fR 4
  .IX Item "max-partial-antic-length"
  Maximum length of the partial antic set computed during the tree
  partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
*************** consuming all of the memory available on
*** 15267,15340 ****
  parameter sets a limit on the length of the sets that are computed,
  which prevents the runaway behavior.  Setting a value of 0 for
  this parameter allows an unlimited set length.
! .IP "\fBrpo-vn-max-loop-depth\fR" 4
  .IX Item "rpo-vn-max-loop-depth"
! Maximum loop depth that is value-numbered optimistically.
  When the limit hits the innermost
! \&\fIrpo-vn-max-loop-depth\fR loops and the outermost loop in the
! loop nest are value-numbered optimistically and the remaining ones not.
! .IP "\fBsccvn-max-alias-queries-per-access\fR" 4
  .IX Item "sccvn-max-alias-queries-per-access"
! Maximum number of alias-oracle queries we perform when looking for
  redundancies for loads and stores.  If this limit is hit the search
  is aborted and the load or store is not considered redundant.  The
  number of queries is algorithmically limited to the number of
  stores on all paths from the load to the function entry.
! .IP "\fBira-max-loops-num\fR" 4
  .IX Item "ira-max-loops-num"
! \&\s-1IRA\s0 uses regional register allocation by default.  If a function
  contains more loops than the number given by this parameter, only at most
! the given number of the most frequently-executed loops form regions
  for regional register allocation.
! .IP "\fBira-max-conflict-table-size\fR" 4
  .IX Item "ira-max-conflict-table-size"
! Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
  table, the table can still require excessive amounts of memory for
  huge functions.  If the conflict table for a function could be more
! than the size in \s-1MB\s0 given by this parameter, the register allocator
! instead uses a faster, simpler, and lower-quality
! algorithm that does not require building a pseudo-register conflict table.
! .IP "\fBira-loop-reserved-regs\fR" 4
  .IX Item "ira-loop-reserved-regs"
! \&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
  for decisions to move loop invariants (see \fB\-O3\fR).  The number
  of available registers reserved for some other purposes is given
  by this parameter.  Default of the parameter
  is the best found from numerous experiments.
! .IP "\fBira-consider-dup-in-all-alts\fR" 4
  .IX Item "ira-consider-dup-in-all-alts"
! Make \s-1IRA\s0 to consider matching constraint (duplicated operand number)
  heavily in all available alternatives for preferred register class.
! If it is set as zero, it means \s-1IRA\s0 only respects the matching
! constraint when it's in the only available alternative with an
! appropriate register class.  Otherwise, it means \s-1IRA\s0 will check all
  available alternatives for preferred register class even if it has
  found some choice with an appropriate register class and respect the
  found qualified matching constraint.
! .IP "\fBira-simple-lra-insn-threshold\fR" 4
  .IX Item "ira-simple-lra-insn-threshold"
! Approximate function insn number in 1K units triggering simple local \s-1RA.\s0
! .IP "\fBlra-inheritance-ebb-probability-cutoff\fR" 4
  .IX Item "lra-inheritance-ebb-probability-cutoff"
! \&\s-1LRA\s0 tries to reuse values reloaded in registers in subsequent insns.
! This optimization is called inheritance.  \s-1EBB\s0 is used as a region to
! do this optimization.  The parameter defines a minimal fall-through
! edge probability in percentage used to add \s-1BB\s0 to inheritance \s-1EBB\s0 in
! \&\s-1LRA.\s0  The default value was chosen
! from numerous runs of \s-1SPEC2000\s0 on x86\-64.
! .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
  .IX Item "loop-invariant-max-bbs-in-loop"
  Loop invariant motion can be very expensive, both in compilation time and
! in amount of needed compile-time memory, with very large loops.  Loops
! with more basic blocks than this parameter won't have loop invariant
  motion optimization performed on them.
! .IP "\fBloop-max-datarefs-for-datadeps\fR" 4
  .IX Item "loop-max-datarefs-for-datadeps"
  Building data dependencies is expensive for very large loops.  This
  parameter limits the number of data references in loops that are
  considered for data dependence analysis.  These large loops are no
  handled by the optimizations using loop data dependencies.
! .IP "\fBmax-vartrack-size\fR" 4
  .IX Item "max-vartrack-size"
  Sets a maximum number of hash table slots to use during variable
  tracking dataflow analysis of any function.  If this limit is exceeded
--- 15200,15273 ----
  parameter sets a limit on the length of the sets that are computed,
  which prevents the runaway behavior.  Setting a value of 0 for
  this parameter allows an unlimited set length.
! .IP \fBrpo\-vn\-max\-loop\-depth\fR 4
  .IX Item "rpo-vn-max-loop-depth"
! Maximum loop depth that is value\-numbered optimistically.
  When the limit hits the innermost
! \&\fIrpo\-vn\-max\-loop\-depth\fR loops and the outermost loop in the
! loop nest are value\-numbered optimistically and the remaining ones not.
! .IP \fBsccvn\-max\-alias\-queries\-per\-access\fR 4
  .IX Item "sccvn-max-alias-queries-per-access"
! Maximum number of alias\-oracle queries we perform when looking for
  redundancies for loads and stores.  If this limit is hit the search
  is aborted and the load or store is not considered redundant.  The
  number of queries is algorithmically limited to the number of
  stores on all paths from the load to the function entry.
! .IP \fBira\-max\-loops\-num\fR 4
  .IX Item "ira-max-loops-num"
! IRA uses regional register allocation by default.  If a function
  contains more loops than the number given by this parameter, only at most
! the given number of the most frequently\-executed loops form regions
  for regional register allocation.
! .IP \fBira\-max\-conflict\-table\-size\fR 4
  .IX Item "ira-max-conflict-table-size"
! Although IRA uses a sophisticated algorithm to compress the conflict
  table, the table can still require excessive amounts of memory for
  huge functions.  If the conflict table for a function could be more
! than the size in MB given by this parameter, the register allocator
! instead uses a faster, simpler, and lower\-quality
! algorithm that does not require building a pseudo\-register conflict table.
! .IP \fBira\-loop\-reserved\-regs\fR 4
  .IX Item "ira-loop-reserved-regs"
! IRA can be used to evaluate more accurate register pressure in loops
  for decisions to move loop invariants (see \fB\-O3\fR).  The number
  of available registers reserved for some other purposes is given
  by this parameter.  Default of the parameter
  is the best found from numerous experiments.
! .IP \fBira\-consider\-dup\-in\-all\-alts\fR 4
  .IX Item "ira-consider-dup-in-all-alts"
! Make IRA to consider matching constraint (duplicated operand number)
  heavily in all available alternatives for preferred register class.
! If it is set as zero, it means IRA only respects the matching
! constraint when it\*(Aqs in the only available alternative with an
! appropriate register class.  Otherwise, it means IRA will check all
  available alternatives for preferred register class even if it has
  found some choice with an appropriate register class and respect the
  found qualified matching constraint.
! .IP \fBira\-simple\-lra\-insn\-threshold\fR 4
  .IX Item "ira-simple-lra-insn-threshold"
! Approximate function insn number in 1K units triggering simple local RA.
! .IP \fBlra\-inheritance\-ebb\-probability\-cutoff\fR 4
  .IX Item "lra-inheritance-ebb-probability-cutoff"
! LRA tries to reuse values reloaded in registers in subsequent insns.
! This optimization is called inheritance.  EBB is used as a region to
! do this optimization.  The parameter defines a minimal fall\-through
! edge probability in percentage used to add BB to inheritance EBB in
! LRA.  The default value was chosen
! from numerous runs of SPEC2000 on x86\-64.
! .IP \fBloop\-invariant\-max\-bbs\-in\-loop\fR 4
  .IX Item "loop-invariant-max-bbs-in-loop"
  Loop invariant motion can be very expensive, both in compilation time and
! in amount of needed compile\-time memory, with very large loops.  Loops
! with more basic blocks than this parameter won\*(Aqt have loop invariant
  motion optimization performed on them.
! .IP \fBloop\-max\-datarefs\-for\-datadeps\fR 4
  .IX Item "loop-max-datarefs-for-datadeps"
  Building data dependencies is expensive for very large loops.  This
  parameter limits the number of data references in loops that are
  considered for data dependence analysis.  These large loops are no
  handled by the optimizations using loop data dependencies.
! .IP \fBmax\-vartrack\-size\fR 4
  .IX Item "max-vartrack-size"
  Sets a maximum number of hash table slots to use during variable
  tracking dataflow analysis of any function.  If this limit is exceeded
*************** function is retried without it, after re
*** 15343,15349 ****
  the function.  If the limit is exceeded even without debug insns, var
  tracking analysis is completely disabled for the function.  Setting
  the parameter to zero makes it unlimited.
! .IP "\fBmax-vartrack-expr-depth\fR" 4
  .IX Item "max-vartrack-expr-depth"
  Sets a maximum number of recursion levels when attempting to map
  variable names or debug temporaries to value expressions.  This trades
--- 15276,15282 ----
  the function.  If the limit is exceeded even without debug insns, var
  tracking analysis is completely disabled for the function.  Setting
  the parameter to zero makes it unlimited.
! .IP \fBmax\-vartrack\-expr\-depth\fR 4
  .IX Item "max-vartrack-expr-depth"
  Sets a maximum number of recursion levels when attempting to map
  variable names or debug temporaries to value expressions.  This trades
*************** low, value expressions that are availabl
*** 15352,15568 ****
  debug information may end up not being used; setting this higher may
  enable the compiler to find more complex debug expressions, but compile
  time and memory use may grow.
! .IP "\fBmax-debug-marker-count\fR" 4
  .IX Item "max-debug-marker-count"
  Sets a threshold on the number of debug markers (e.g. begin stmt
! markers) to avoid complexity explosion at inlining or expanding to \s-1RTL.\s0
  If a function has more such gimple stmts than the set limit, such stmts
! will be dropped from the inlined copy of a function, and from its \s-1RTL\s0
  expansion.
! .IP "\fBmin-nondebug-insn-uid\fR" 4
  .IX Item "min-nondebug-insn-uid"
  Use uids starting at this parameter for nondebug insns.  The range below
  the parameter is reserved exclusively for debug insns created by
  \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
! (non-overlapping) uids above it if the reserved range is exhausted.
! .IP "\fBipa-sra-deref-prob-threshold\fR" 4
  .IX Item "ipa-sra-deref-prob-threshold"
! IPA-SRA replaces a pointer which is known not be \s-1NULL\s0 with one or more
  new parameters only when the probability (in percent, relative to
  function entry) of it being dereferenced is higher than this parameter.
! .IP "\fBipa-sra-ptr-growth-factor\fR" 4
  .IX Item "ipa-sra-ptr-growth-factor"
! IPA-SRA replaces a pointer to an aggregate with one or more new
  parameters only when their cumulative size is less or equal to
! \&\fBipa-sra-ptr-growth-factor\fR times the size of the original
  pointer parameter.
! .IP "\fBipa-sra-ptrwrap-growth-factor\fR" 4
  .IX Item "ipa-sra-ptrwrap-growth-factor"
  Additional maximum allowed growth of total size of new parameters
! that ipa-sra replaces a pointer to an aggregate with,
  if it points to a local variable that the caller only writes to and
  passes it as an argument to other functions.
! .IP "\fBipa-sra-max-replacements\fR" 4
  .IX Item "ipa-sra-max-replacements"
! Maximum pieces of an aggregate that IPA-SRA tracks.  As a
  consequence, it is also the maximum number of replacements of a formal
  parameter.
! .IP "\fBsra-max-scalarization-size-Ospeed\fR" 4
  .IX Item "sra-max-scalarization-size-Ospeed"
  .PD 0
! .IP "\fBsra-max-scalarization-size-Osize\fR" 4
  .IX Item "sra-max-scalarization-size-Osize"
  .PD
! The two Scalar Reduction of Aggregates passes (\s-1SRA\s0 and IPA-SRA) aim to
  replace scalar parts of aggregates with uses of independent scalar
  variables.  These parameters control the maximum size, in storage units,
  of aggregate which is considered for replacement when compiling for
  speed
! (\fBsra-max-scalarization-size-Ospeed\fR) or size
! (\fBsra-max-scalarization-size-Osize\fR) respectively.
! .IP "\fBsra-max-propagations\fR" 4
  .IX Item "sra-max-propagations"
  The maximum number of artificial accesses that Scalar Replacement of
! Aggregates (\s-1SRA\s0) will track, per one local variable, in order to
  facilitate copy propagation.
! .IP "\fBtm-max-aggregate-size\fR" 4
  .IX Item "tm-max-aggregate-size"
! When making copies of thread-local variables in a transaction, this
  parameter specifies the size in bytes after which variables are
  saved with the logging functions as opposed to save/restore code
  sequence pairs.  This option only applies when using
  \&\fB\-fgnu\-tm\fR.
! .IP "\fBgraphite-max-nb-scop-params\fR" 4
  .IX Item "graphite-max-nb-scop-params"
  To avoid exponential effects in the Graphite loop transforms, the
  number of parameters in a Static Control Part (SCoP) is bounded.
  A value of zero can be used to lift
  the bound.  A variable whose value is unknown at compilation time and
  defined outside a SCoP is a parameter of the SCoP.
! .IP "\fBhardcfr-max-blocks\fR" 4
  .IX Item "hardcfr-max-blocks"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR for functions with a
  larger number of blocks than the specified value.  Zero removes any
  limit.
! .IP "\fBhardcfr-max-inline-blocks\fR" 4
  .IX Item "hardcfr-max-inline-blocks"
! Force \fB\-fharden\-control\-flow\-redundancy\fR to use out-of-line
  checking for functions with a larger number of basic blocks than the
  specified value.
! .IP "\fBloop-block-tile-size\fR" 4
  .IX Item "loop-block-tile-size"
  Loop blocking or strip mining transforms, enabled with
  \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
  loop in the loop nest by a given number of iterations.  The strip
! length can be changed using the \fBloop-block-tile-size\fR
  parameter.
! .IP "\fBipa-jump-function-lookups\fR" 4
  .IX Item "ipa-jump-function-lookups"
  Specifies number of statements visited during jump function offset discovery.
! .IP "\fBipa-cp-value-list-size\fR" 4
  .IX Item "ipa-cp-value-list-size"
! IPA-CP attempts to track all possible values and types passed to a function's
  parameter in order to propagate them and perform devirtualization.
! \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
  stores per one formal parameter of a function.
! .IP "\fBipa-cp-eval-threshold\fR" 4
  .IX Item "ipa-cp-eval-threshold"
! IPA-CP calculates its own score of cloning profitability heuristics
  and performs those cloning opportunities with scores that exceed
! \&\fBipa-cp-eval-threshold\fR.
! .IP "\fBipa-cp-max-recursive-depth\fR" 4
  .IX Item "ipa-cp-max-recursive-depth"
! Maximum depth of recursive cloning for self-recursive function.
! .IP "\fBipa-cp-min-recursive-probability\fR" 4
  .IX Item "ipa-cp-min-recursive-probability"
  Recursive cloning only when the probability of call being executed exceeds
  the parameter.
! .IP "\fBipa-cp-profile-count-base\fR" 4
  .IX Item "ipa-cp-profile-count-base"
! When using \fB\-fprofile\-use\fR option, IPA-CP will consider the measured
  execution count of a call graph edge at this percentage position in their
  histogram as the basis for its heuristics calculation.
! .IP "\fBipa-cp-recursive-freq-factor\fR" 4
  .IX Item "ipa-cp-recursive-freq-factor"
  The number of times interprocedural copy propagation expects recursive
  functions to call themselves.
! .IP "\fBipa-cp-recursion-penalty\fR" 4
  .IX Item "ipa-cp-recursion-penalty"
  Percentage penalty the recursive functions will receive when they
  are evaluated for cloning.
! .IP "\fBipa-cp-single-call-penalty\fR" 4
  .IX Item "ipa-cp-single-call-penalty"
  Percentage penalty functions containing a single call to another
  function will receive when they are evaluated for cloning.
! .IP "\fBipa-max-agg-items\fR" 4
  .IX Item "ipa-max-agg-items"
! IPA-CP is also capable to propagate a number of scalar values passed
! in an aggregate. \fBipa-max-agg-items\fR controls the maximum
  number of such values per one parameter.
! .IP "\fBipa-cp-loop-hint-bonus\fR" 4
  .IX Item "ipa-cp-loop-hint-bonus"
! When IPA-CP determines that a cloning candidate would make the number
  of iterations of a loop known, it adds a bonus of
! \&\fBipa-cp-loop-hint-bonus\fR to the profitability score of
  the candidate.
! .IP "\fBipa-max-loop-predicates\fR" 4
  .IX Item "ipa-max-loop-predicates"
! The maximum number of different predicates \s-1IPA\s0 will use to describe when
  loops in a function have known properties.
! .IP "\fBipa-max-aa-steps\fR" 4
  .IX Item "ipa-max-aa-steps"
! During its analysis of function bodies, IPA-CP employs alias analysis
  in order to track values pointed to by function parameters.  In order
  not spend too much time analyzing huge functions, it gives up and
  consider all memory clobbered after examining
! \&\fBipa-max-aa-steps\fR statements modifying memory.
! .IP "\fBipa-max-switch-predicate-bounds\fR" 4
  .IX Item "ipa-max-switch-predicate-bounds"
  Maximal number of boundary endpoints of case ranges of switch statement.
! For switch exceeding this limit, IPA-CP will not construct cloning cost
  predicate, which is used to estimate cloning benefit, for default case
  of the switch statement.
! .IP "\fBipa-max-param-expr-ops\fR" 4
  .IX Item "ipa-max-param-expr-ops"
! IPA-CP will analyze conditional statement that references some function
  parameter to estimate benefit for cloning upon certain constant value.
  But if number of operations in a parameter expression exceeds
! \&\fBipa-max-param-expr-ops\fR, the expression is treated as complicated
! one, and is not handled by \s-1IPA\s0 analysis.
! .IP "\fBlto-partitions\fR" 4
  .IX Item "lto-partitions"
! Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
  The number of partitions should exceed the number of CPUs used for compilation.
! .IP "\fBlto-min-partition\fR" 4
  .IX Item "lto-min-partition"
! Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
  This prevents expenses of splitting very small programs into too many
  partitions.
! .IP "\fBlto-max-partition\fR" 4
  .IX Item "lto-max-partition"
! Size of max partition for \s-1WHOPR\s0 (in estimated instructions).
  to provide an upper bound for individual size of partition.
  Meant to be used only with balanced partitioning.
! .IP "\fBlto-max-streaming-parallelism\fR" 4
  .IX Item "lto-max-streaming-parallelism"
! Maximal number of parallel processes used for \s-1LTO\s0 streaming.
! .IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
  .IX Item "cxx-max-namespaces-for-diagnostic-help"
! The maximum number of namespaces to consult for suggestions when \*(C+
  name lookup fails for an identifier.
! .IP "\fBsink-frequency-threshold\fR" 4
  .IX Item "sink-frequency-threshold"
  The maximum relative execution frequency (in percents) of the target block
! relative to a statement's original block to allow statement sinking of a
  statement.  Larger numbers result in more aggressive statement sinking.
  A small positive adjustment is applied for
  statements with memory operands as those are even more profitable so sink.
! .IP "\fBmax-stores-to-sink\fR" 4
  .IX Item "max-stores-to-sink"
  The maximum number of conditional store pairs that can be sunk.  Set to 0
! if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
  (\fB\-ftree\-loop\-if\-convert\fR) is disabled.
! .IP "\fBcase-values-threshold\fR" 4
  .IX Item "case-values-threshold"
  The smallest number of different values for which it is best to use a
! jump-table instead of a tree of conditional branches.  If the value is
  0, use the default for the machine.
! .IP "\fBjump-table-max-growth-ratio-for-size\fR" 4
  .IX Item "jump-table-max-growth-ratio-for-size"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for size.
! .IP "\fBjump-table-max-growth-ratio-for-speed\fR" 4
  .IX Item "jump-table-max-growth-ratio-for-speed"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for speed.
! .IP "\fBtree-reassoc-width\fR" 4
  .IX Item "tree-reassoc-width"
  Set the maximum number of instructions executed in parallel in
  reassociated tree. This parameter overrides target dependent
  heuristics used by default if has non zero value.
! .IP "\fBsched-pressure-algorithm\fR" 4
  .IX Item "sched-pressure-algorithm"
  Choose between the two available implementations of
  \&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
--- 15285,15501 ----
  debug information may end up not being used; setting this higher may
  enable the compiler to find more complex debug expressions, but compile
  time and memory use may grow.
! .IP \fBmax\-debug\-marker\-count\fR 4
  .IX Item "max-debug-marker-count"
  Sets a threshold on the number of debug markers (e.g. begin stmt
! markers) to avoid complexity explosion at inlining or expanding to RTL.
  If a function has more such gimple stmts than the set limit, such stmts
! will be dropped from the inlined copy of a function, and from its RTL
  expansion.
! .IP \fBmin\-nondebug\-insn\-uid\fR 4
  .IX Item "min-nondebug-insn-uid"
  Use uids starting at this parameter for nondebug insns.  The range below
  the parameter is reserved exclusively for debug insns created by
  \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
! (non\-overlapping) uids above it if the reserved range is exhausted.
! .IP \fBipa\-sra\-deref\-prob\-threshold\fR 4
  .IX Item "ipa-sra-deref-prob-threshold"
! IPA\-SRA replaces a pointer which is known not be NULL with one or more
  new parameters only when the probability (in percent, relative to
  function entry) of it being dereferenced is higher than this parameter.
! .IP \fBipa\-sra\-ptr\-growth\-factor\fR 4
  .IX Item "ipa-sra-ptr-growth-factor"
! IPA\-SRA replaces a pointer to an aggregate with one or more new
  parameters only when their cumulative size is less or equal to
! \&\fBipa\-sra\-ptr\-growth\-factor\fR times the size of the original
  pointer parameter.
! .IP \fBipa\-sra\-ptrwrap\-growth\-factor\fR 4
  .IX Item "ipa-sra-ptrwrap-growth-factor"
  Additional maximum allowed growth of total size of new parameters
! that ipa\-sra replaces a pointer to an aggregate with,
  if it points to a local variable that the caller only writes to and
  passes it as an argument to other functions.
! .IP \fBipa\-sra\-max\-replacements\fR 4
  .IX Item "ipa-sra-max-replacements"
! Maximum pieces of an aggregate that IPA\-SRA tracks.  As a
  consequence, it is also the maximum number of replacements of a formal
  parameter.
! .IP \fBsra\-max\-scalarization\-size\-Ospeed\fR 4
  .IX Item "sra-max-scalarization-size-Ospeed"
  .PD 0
! .IP \fBsra\-max\-scalarization\-size\-Osize\fR 4
  .IX Item "sra-max-scalarization-size-Osize"
  .PD
! The two Scalar Reduction of Aggregates passes (SRA and IPA\-SRA) aim to
  replace scalar parts of aggregates with uses of independent scalar
  variables.  These parameters control the maximum size, in storage units,
  of aggregate which is considered for replacement when compiling for
  speed
! (\fBsra\-max\-scalarization\-size\-Ospeed\fR) or size
! (\fBsra\-max\-scalarization\-size\-Osize\fR) respectively.
! .IP \fBsra\-max\-propagations\fR 4
  .IX Item "sra-max-propagations"
  The maximum number of artificial accesses that Scalar Replacement of
! Aggregates (SRA) will track, per one local variable, in order to
  facilitate copy propagation.
! .IP \fBtm\-max\-aggregate\-size\fR 4
  .IX Item "tm-max-aggregate-size"
! When making copies of thread\-local variables in a transaction, this
  parameter specifies the size in bytes after which variables are
  saved with the logging functions as opposed to save/restore code
  sequence pairs.  This option only applies when using
  \&\fB\-fgnu\-tm\fR.
! .IP \fBgraphite\-max\-nb\-scop\-params\fR 4
  .IX Item "graphite-max-nb-scop-params"
  To avoid exponential effects in the Graphite loop transforms, the
  number of parameters in a Static Control Part (SCoP) is bounded.
  A value of zero can be used to lift
  the bound.  A variable whose value is unknown at compilation time and
  defined outside a SCoP is a parameter of the SCoP.
! .IP \fBhardcfr\-max\-blocks\fR 4
  .IX Item "hardcfr-max-blocks"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR for functions with a
  larger number of blocks than the specified value.  Zero removes any
  limit.
! .IP \fBhardcfr\-max\-inline\-blocks\fR 4
  .IX Item "hardcfr-max-inline-blocks"
! Force \fB\-fharden\-control\-flow\-redundancy\fR to use out\-of\-line
  checking for functions with a larger number of basic blocks than the
  specified value.
! .IP \fBloop\-block\-tile\-size\fR 4
  .IX Item "loop-block-tile-size"
  Loop blocking or strip mining transforms, enabled with
  \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
  loop in the loop nest by a given number of iterations.  The strip
! length can be changed using the \fBloop\-block\-tile\-size\fR
  parameter.
! .IP \fBipa\-jump\-function\-lookups\fR 4
  .IX Item "ipa-jump-function-lookups"
  Specifies number of statements visited during jump function offset discovery.
! .IP \fBipa\-cp\-value\-list\-size\fR 4
  .IX Item "ipa-cp-value-list-size"
! IPA\-CP attempts to track all possible values and types passed to a function\*(Aqs
  parameter in order to propagate them and perform devirtualization.
! \&\fBipa\-cp\-value\-list\-size\fR is the maximum number of values and types it
  stores per one formal parameter of a function.
! .IP \fBipa\-cp\-eval\-threshold\fR 4
  .IX Item "ipa-cp-eval-threshold"
! IPA\-CP calculates its own score of cloning profitability heuristics
  and performs those cloning opportunities with scores that exceed
! \&\fBipa\-cp\-eval\-threshold\fR.
! .IP \fBipa\-cp\-max\-recursive\-depth\fR 4
  .IX Item "ipa-cp-max-recursive-depth"
! Maximum depth of recursive cloning for self\-recursive function.
! .IP \fBipa\-cp\-min\-recursive\-probability\fR 4
  .IX Item "ipa-cp-min-recursive-probability"
  Recursive cloning only when the probability of call being executed exceeds
  the parameter.
! .IP \fBipa\-cp\-profile\-count\-base\fR 4
  .IX Item "ipa-cp-profile-count-base"
! When using \fB\-fprofile\-use\fR option, IPA\-CP will consider the measured
  execution count of a call graph edge at this percentage position in their
  histogram as the basis for its heuristics calculation.
! .IP \fBipa\-cp\-recursive\-freq\-factor\fR 4
  .IX Item "ipa-cp-recursive-freq-factor"
  The number of times interprocedural copy propagation expects recursive
  functions to call themselves.
! .IP \fBipa\-cp\-recursion\-penalty\fR 4
  .IX Item "ipa-cp-recursion-penalty"
  Percentage penalty the recursive functions will receive when they
  are evaluated for cloning.
! .IP \fBipa\-cp\-single\-call\-penalty\fR 4
  .IX Item "ipa-cp-single-call-penalty"
  Percentage penalty functions containing a single call to another
  function will receive when they are evaluated for cloning.
! .IP \fBipa\-max\-agg\-items\fR 4
  .IX Item "ipa-max-agg-items"
! IPA\-CP is also capable to propagate a number of scalar values passed
! in an aggregate. \fBipa\-max\-agg\-items\fR controls the maximum
  number of such values per one parameter.
! .IP \fBipa\-cp\-loop\-hint\-bonus\fR 4
  .IX Item "ipa-cp-loop-hint-bonus"
! When IPA\-CP determines that a cloning candidate would make the number
  of iterations of a loop known, it adds a bonus of
! \&\fBipa\-cp\-loop\-hint\-bonus\fR to the profitability score of
  the candidate.
! .IP \fBipa\-max\-loop\-predicates\fR 4
  .IX Item "ipa-max-loop-predicates"
! The maximum number of different predicates IPA will use to describe when
  loops in a function have known properties.
! .IP \fBipa\-max\-aa\-steps\fR 4
  .IX Item "ipa-max-aa-steps"
! During its analysis of function bodies, IPA\-CP employs alias analysis
  in order to track values pointed to by function parameters.  In order
  not spend too much time analyzing huge functions, it gives up and
  consider all memory clobbered after examining
! \&\fBipa\-max\-aa\-steps\fR statements modifying memory.
! .IP \fBipa\-max\-switch\-predicate\-bounds\fR 4
  .IX Item "ipa-max-switch-predicate-bounds"
  Maximal number of boundary endpoints of case ranges of switch statement.
! For switch exceeding this limit, IPA\-CP will not construct cloning cost
  predicate, which is used to estimate cloning benefit, for default case
  of the switch statement.
! .IP \fBipa\-max\-param\-expr\-ops\fR 4
  .IX Item "ipa-max-param-expr-ops"
! IPA\-CP will analyze conditional statement that references some function
  parameter to estimate benefit for cloning upon certain constant value.
  But if number of operations in a parameter expression exceeds
! \&\fBipa\-max\-param\-expr\-ops\fR, the expression is treated as complicated
! one, and is not handled by IPA analysis.
! .IP \fBlto\-partitions\fR 4
  .IX Item "lto-partitions"
! Specify desired number of partitions produced during WHOPR compilation.
  The number of partitions should exceed the number of CPUs used for compilation.
! .IP \fBlto\-min\-partition\fR 4
  .IX Item "lto-min-partition"
! Size of minimal partition for WHOPR (in estimated instructions).
  This prevents expenses of splitting very small programs into too many
  partitions.
! .IP \fBlto\-max\-partition\fR 4
  .IX Item "lto-max-partition"
! Size of max partition for WHOPR (in estimated instructions).
  to provide an upper bound for individual size of partition.
  Meant to be used only with balanced partitioning.
! .IP \fBlto\-max\-streaming\-parallelism\fR 4
  .IX Item "lto-max-streaming-parallelism"
! Maximal number of parallel processes used for LTO streaming.
! .IP \fBcxx\-max\-namespaces\-for\-diagnostic\-help\fR 4
  .IX Item "cxx-max-namespaces-for-diagnostic-help"
! The maximum number of namespaces to consult for suggestions when C++
  name lookup fails for an identifier.
! .IP \fBsink\-frequency\-threshold\fR 4
  .IX Item "sink-frequency-threshold"
  The maximum relative execution frequency (in percents) of the target block
! relative to a statement\*(Aqs original block to allow statement sinking of a
  statement.  Larger numbers result in more aggressive statement sinking.
  A small positive adjustment is applied for
  statements with memory operands as those are even more profitable so sink.
! .IP \fBmax\-stores\-to\-sink\fR 4
  .IX Item "max-stores-to-sink"
  The maximum number of conditional store pairs that can be sunk.  Set to 0
! if either vectorization (\fB\-ftree\-vectorize\fR) or if\-conversion
  (\fB\-ftree\-loop\-if\-convert\fR) is disabled.
! .IP \fBcase\-values\-threshold\fR 4
  .IX Item "case-values-threshold"
  The smallest number of different values for which it is best to use a
! jump\-table instead of a tree of conditional branches.  If the value is
  0, use the default for the machine.
! .IP \fBjump\-table\-max\-growth\-ratio\-for\-size\fR 4
  .IX Item "jump-table-max-growth-ratio-for-size"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for size.
! .IP \fBjump\-table\-max\-growth\-ratio\-for\-speed\fR 4
  .IX Item "jump-table-max-growth-ratio-for-speed"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for speed.
! .IP \fBtree\-reassoc\-width\fR 4
  .IX Item "tree-reassoc-width"
  Set the maximum number of instructions executed in parallel in
  reassociated tree. This parameter overrides target dependent
  heuristics used by default if has non zero value.
! .IP \fBsched\-pressure\-algorithm\fR 4
  .IX Item "sched-pressure-algorithm"
  Choose between the two available implementations of
  \&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
*************** Algorithm 2 was designed to be a comprom
*** 15571,15643 ****
  conservative approach taken by algorithm 1 and the rather aggressive
  approach taken by the default scheduler.  It relies more heavily on
  having a regular register file and accurate register pressure classes.
! See \fIhaifa\-sched.cc\fR in the \s-1GCC\s0 sources for more details.
  .Sp
  The default choice depends on the target.
! .IP "\fBmax-slsr-cand-scan\fR" 4
  .IX Item "max-slsr-cand-scan"
  Set the maximum number of existing candidates that are considered when
! seeking a basis for a new straight-line strength reduction candidate.
! .IP "\fBasan-globals\fR" 4
  .IX Item "asan-globals"
  Enable buffer overflow detection for global objects.  This kind
  of protection is enabled by default if you are using
  \&\fB\-fsanitize=address\fR option.
  To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
! .IP "\fBasan-stack\fR" 4
  .IX Item "asan-stack"
  Enable buffer overflow detection for stack objects.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
! .IP "\fBasan-instrument-reads\fR" 4
  .IX Item "asan-instrument-reads"
  Enable buffer overflow detection for memory reads.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory reads protection use
  \&\fB\-\-param asan\-instrument\-reads=0\fR.
! .IP "\fBasan-instrument-writes\fR" 4
  .IX Item "asan-instrument-writes"
  Enable buffer overflow detection for memory writes.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory writes protection use
  \&\fB\-\-param asan\-instrument\-writes=0\fR option.
! .IP "\fBasan-memintrin\fR" 4
  .IX Item "asan-memintrin"
! Enable detection for built-in functions.  This kind of protection
  is enabled by default when using \fB\-fsanitize=address\fR.
! To disable built-in functions protection use
  \&\fB\-\-param asan\-memintrin=0\fR.
! .IP "\fBasan-use-after-return\fR" 4
  .IX Item "asan-use-after-return"
! Enable detection of use-after-return.  This kind of protection
  is enabled by default when using the \fB\-fsanitize=address\fR option.
  To disable it use \fB\-\-param asan\-use\-after\-return=0\fR.
  .Sp
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_stack_use_after_return=1\*(C'\fR to the environment variable
! \&\fB\s-1ASAN_OPTIONS\s0\fR.
! .IP "\fBasan-instrumentation-with-call-threshold\fR" 4
  .IX Item "asan-instrumentation-with-call-threshold"
  If number of memory accesses in function being instrumented
  is greater or equal to this number, use callbacks instead of inline checks.
  E.g. to disable inline code use
  \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
! .IP "\fBasan-kernel-mem-intrinsic-prefix\fR" 4
  .IX Item "asan-kernel-mem-intrinsic-prefix"
  If nonzero, prefix calls to \f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`memset\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR
  with \fB_\|_asan_\fR or \fB_\|_hwasan_\fR
  for \fB\-fsanitize=kernel\-address\fR or \fB\-fsanitize=kernel\-hwaddress\fR,
  respectively.
! .IP "\fBhwasan-instrument-stack\fR" 4
  .IX Item "hwasan-instrument-stack"
! Enable hwasan instrumentation of statically sized stack-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable stack instrumentation use
  \&\fB\-\-param hwasan\-instrument\-stack=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR.
! .IP "\fBhwasan-random-frame-tag\fR" 4
  .IX Item "hwasan-random-frame-tag"
  When using stack instrumentation, decide tags for stack variables using a
  deterministic sequence beginning at a random tag for each frame.  With this
--- 15504,15576 ----
  conservative approach taken by algorithm 1 and the rather aggressive
  approach taken by the default scheduler.  It relies more heavily on
  having a regular register file and accurate register pressure classes.
! See \fIhaifa\-sched.cc\fR in the GCC sources for more details.
  .Sp
  The default choice depends on the target.
! .IP \fBmax\-slsr\-cand\-scan\fR 4
  .IX Item "max-slsr-cand-scan"
  Set the maximum number of existing candidates that are considered when
! seeking a basis for a new straight\-line strength reduction candidate.
! .IP \fBasan\-globals\fR 4
  .IX Item "asan-globals"
  Enable buffer overflow detection for global objects.  This kind
  of protection is enabled by default if you are using
  \&\fB\-fsanitize=address\fR option.
  To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
! .IP \fBasan\-stack\fR 4
  .IX Item "asan-stack"
  Enable buffer overflow detection for stack objects.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
! .IP \fBasan\-instrument\-reads\fR 4
  .IX Item "asan-instrument-reads"
  Enable buffer overflow detection for memory reads.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory reads protection use
  \&\fB\-\-param asan\-instrument\-reads=0\fR.
! .IP \fBasan\-instrument\-writes\fR 4
  .IX Item "asan-instrument-writes"
  Enable buffer overflow detection for memory writes.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory writes protection use
  \&\fB\-\-param asan\-instrument\-writes=0\fR option.
! .IP \fBasan\-memintrin\fR 4
  .IX Item "asan-memintrin"
! Enable detection for built\-in functions.  This kind of protection
  is enabled by default when using \fB\-fsanitize=address\fR.
! To disable built\-in functions protection use
  \&\fB\-\-param asan\-memintrin=0\fR.
! .IP \fBasan\-use\-after\-return\fR 4
  .IX Item "asan-use-after-return"
! Enable detection of use\-after\-return.  This kind of protection
  is enabled by default when using the \fB\-fsanitize=address\fR option.
  To disable it use \fB\-\-param asan\-use\-after\-return=0\fR.
  .Sp
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_stack_use_after_return=1\*(C'\fR to the environment variable
! \&\fBASAN_OPTIONS\fR.
! .IP \fBasan\-instrumentation\-with\-call\-threshold\fR 4
  .IX Item "asan-instrumentation-with-call-threshold"
  If number of memory accesses in function being instrumented
  is greater or equal to this number, use callbacks instead of inline checks.
  E.g. to disable inline code use
  \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
! .IP \fBasan\-kernel\-mem\-intrinsic\-prefix\fR 4
  .IX Item "asan-kernel-mem-intrinsic-prefix"
  If nonzero, prefix calls to \f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`memset\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR
  with \fB_\|_asan_\fR or \fB_\|_hwasan_\fR
  for \fB\-fsanitize=kernel\-address\fR or \fB\-fsanitize=kernel\-hwaddress\fR,
  respectively.
! .IP \fBhwasan\-instrument\-stack\fR 4
  .IX Item "hwasan-instrument-stack"
! Enable hwasan instrumentation of statically sized stack\-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable stack instrumentation use
  \&\fB\-\-param hwasan\-instrument\-stack=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR.
! .IP \fBhwasan\-random\-frame\-tag\fR 4
  .IX Item "hwasan-random-frame-tag"
  When using stack instrumentation, decide tags for stack variables using a
  deterministic sequence beginning at a random tag for each frame.  With this
*************** parameter unset tags are chosen using th
*** 15645,15765 ****
  This is enabled by default for \fB\-fsanitize=hwaddress\fR and unavailable
  for \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable it use \fB\-\-param hwasan\-random\-frame\-tag=0\fR.
! .IP "\fBhwasan-instrument-allocas\fR" 4
  .IX Item "hwasan-instrument-allocas"
! Enable hwasan instrumentation of dynamically sized stack-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of such variables use
  \&\fB\-\-param hwasan\-instrument\-allocas=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR.
! .IP "\fBhwasan-instrument-reads\fR" 4
  .IX Item "hwasan-instrument-reads"
  Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory reads use
  \&\fB\-\-param hwasan\-instrument\-reads=0\fR.
! .IP "\fBhwasan-instrument-writes\fR" 4
  .IX Item "hwasan-instrument-writes"
  Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory writes use
  \&\fB\-\-param hwasan\-instrument\-writes=0\fR.
! .IP "\fBhwasan-instrument-mem-intrinsics\fR" 4
  .IX Item "hwasan-instrument-mem-intrinsics"
  Enable hwasan instrumentation of builtin functions.  Instrumentation of these
  builtin functions is enabled by default for both \fB\-fsanitize=hwaddress\fR
  and \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of builtin functions use
  \&\fB\-\-param hwasan\-instrument\-mem\-intrinsics=0\fR.
! .IP "\fBuse-after-scope-direct-emission-threshold\fR" 4
  .IX Item "use-after-scope-direct-emission-threshold"
  If the size of a local variable in bytes is smaller or equal to this
  number, directly poison (or unpoison) shadow memory instead of using
! run-time callbacks.
! .IP "\fBtsan-distinguish-volatile\fR" 4
  .IX Item "tsan-distinguish-volatile"
  Emit special instrumentation for accesses to volatiles.
! .IP "\fBtsan-instrument-func-entry-exit\fR" 4
  .IX Item "tsan-instrument-func-entry-exit"
! Emit instrumentation calls to _\|\fI_tsan_func_entry()\fR and _\|\fI_tsan_func_exit()\fR.
! .IP "\fBmax-fsm-thread-path-insns\fR" 4
  .IX Item "max-fsm-thread-path-insns"
  Maximum number of instructions to copy when duplicating blocks on a
  finite state automaton jump thread path.
! .IP "\fBthreader-debug\fR" 4
  .IX Item "threader-debug"
  threader\-debug=[none|all] Enables verbose dumping of the threader solver.
! .IP "\fBparloops-chunk-size\fR" 4
  .IX Item "parloops-chunk-size"
  Chunk size of omp schedule for loops parallelized by parloops.
! .IP "\fBparloops-schedule\fR" 4
  .IX Item "parloops-schedule"
  Schedule type of omp schedule for loops parallelized by parloops (static,
  dynamic, guided, auto, runtime).
! .IP "\fBparloops-min-per-thread\fR" 4
  .IX Item "parloops-min-per-thread"
  The minimum number of iterations per thread of an innermost parallelized
  loop for which the parallelized variant is preferred over the single threaded
  one.  Note that for a parallelized loop nest the
  minimum number of iterations of the outermost loop per thread is two.
! .IP "\fBmax-ssa-name-query-depth\fR" 4
  .IX Item "max-ssa-name-query-depth"
! Maximum depth of recursion when querying properties of \s-1SSA\s0 names in things
  like fold routines.  One level of recursion corresponds to following a
! use-def chain.
! .IP "\fBmax-speculative-devirt-maydefs\fR" 4
  .IX Item "max-speculative-devirt-maydefs"
! The maximum number of may-defs we analyze when looking for a must-def
  specifying the dynamic type of an object that invokes a virtual call
  we may be able to devirtualize speculatively.
! .IP "\fBranger-debug\fR" 4
  .IX Item "ranger-debug"
  Specifies the type of debug output to be issued for ranges.
! .IP "\fBunroll-jam-min-percent\fR" 4
  .IX Item "unroll-jam-min-percent"
  The minimum percentage of memory references that must be optimized
! away for the unroll-and-jam transformation to be considered profitable.
! .IP "\fBunroll-jam-max-unroll\fR" 4
  .IX Item "unroll-jam-max-unroll"
  The maximum number of times the outer loop should be unrolled by
! the unroll-and-jam transformation.
! .IP "\fBmax-rtl-if-conversion-unpredictable-cost\fR" 4
  .IX Item "max-rtl-if-conversion-unpredictable-cost"
  Maximum permissible cost for the sequence that would be generated
! by the \s-1RTL\s0 if-conversion pass for a branch that is considered unpredictable.
! .IP "\fBmax-variable-expansions-in-unroller\fR" 4
  .IX Item "max-variable-expansions-in-unroller"
  If \fB\-fvariable\-expansion\-in\-unroller\fR is used, the maximum number
  of times that an individual variable will be expanded during loop unrolling.
! .IP "\fBpartial-inlining-entry-probability\fR" 4
  .IX Item "partial-inlining-entry-probability"
! Maximum probability of the entry \s-1BB\s0 of split region
! (in percent relative to entry \s-1BB\s0 of the function)
  to make partial inlining happen.
! .IP "\fBmax-tracked-strlens\fR" 4
  .IX Item "max-tracked-strlens"
  Maximum number of strings for which strlen optimization pass will
  track string lengths.
! .IP "\fBgcse-after-reload-partial-fraction\fR" 4
  .IX Item "gcse-after-reload-partial-fraction"
  The threshold ratio for performing partial redundancy
  elimination after reload.
! .IP "\fBgcse-after-reload-critical-fraction\fR" 4
  .IX Item "gcse-after-reload-critical-fraction"
  The threshold ratio of critical edges execution count that
  permit performing redundancy elimination after reload.
! .IP "\fBmax-loop-header-insns\fR" 4
  .IX Item "max-loop-header-insns"
  The maximum number of insns in loop header duplicated
  by the copy loop headers pass.
! .IP "\fBvect-epilogues-nomask\fR" 4
  .IX Item "vect-epilogues-nomask"
  Enable loop epilogue vectorization using smaller vector size.
! .IP "\fBvect-partial-vector-usage\fR" 4
  .IX Item "vect-partial-vector-usage"
  Controls when the loop vectorizer considers using partial vector loads
  and stores as an alternative to falling back to scalar code.  0 stops
--- 15578,15698 ----
  This is enabled by default for \fB\-fsanitize=hwaddress\fR and unavailable
  for \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable it use \fB\-\-param hwasan\-random\-frame\-tag=0\fR.
! .IP \fBhwasan\-instrument\-allocas\fR 4
  .IX Item "hwasan-instrument-allocas"
! Enable hwasan instrumentation of dynamically sized stack\-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of such variables use
  \&\fB\-\-param hwasan\-instrument\-allocas=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR.
! .IP \fBhwasan\-instrument\-reads\fR 4
  .IX Item "hwasan-instrument-reads"
  Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory reads use
  \&\fB\-\-param hwasan\-instrument\-reads=0\fR.
! .IP \fBhwasan\-instrument\-writes\fR 4
  .IX Item "hwasan-instrument-writes"
  Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory writes use
  \&\fB\-\-param hwasan\-instrument\-writes=0\fR.
! .IP \fBhwasan\-instrument\-mem\-intrinsics\fR 4
  .IX Item "hwasan-instrument-mem-intrinsics"
  Enable hwasan instrumentation of builtin functions.  Instrumentation of these
  builtin functions is enabled by default for both \fB\-fsanitize=hwaddress\fR
  and \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of builtin functions use
  \&\fB\-\-param hwasan\-instrument\-mem\-intrinsics=0\fR.
! .IP \fBuse\-after\-scope\-direct\-emission\-threshold\fR 4
  .IX Item "use-after-scope-direct-emission-threshold"
  If the size of a local variable in bytes is smaller or equal to this
  number, directly poison (or unpoison) shadow memory instead of using
! run\-time callbacks.
! .IP \fBtsan\-distinguish\-volatile\fR 4
  .IX Item "tsan-distinguish-volatile"
  Emit special instrumentation for accesses to volatiles.
! .IP \fBtsan\-instrument\-func\-entry\-exit\fR 4
  .IX Item "tsan-instrument-func-entry-exit"
! Emit instrumentation calls to _\|\fB_tsan_func_entry()\fR and _\|\fB_tsan_func_exit()\fR.
! .IP \fBmax\-fsm\-thread\-path\-insns\fR 4
  .IX Item "max-fsm-thread-path-insns"
  Maximum number of instructions to copy when duplicating blocks on a
  finite state automaton jump thread path.
! .IP \fBthreader\-debug\fR 4
  .IX Item "threader-debug"
  threader\-debug=[none|all] Enables verbose dumping of the threader solver.
! .IP \fBparloops\-chunk\-size\fR 4
  .IX Item "parloops-chunk-size"
  Chunk size of omp schedule for loops parallelized by parloops.
! .IP \fBparloops\-schedule\fR 4
  .IX Item "parloops-schedule"
  Schedule type of omp schedule for loops parallelized by parloops (static,
  dynamic, guided, auto, runtime).
! .IP \fBparloops\-min\-per\-thread\fR 4
  .IX Item "parloops-min-per-thread"
  The minimum number of iterations per thread of an innermost parallelized
  loop for which the parallelized variant is preferred over the single threaded
  one.  Note that for a parallelized loop nest the
  minimum number of iterations of the outermost loop per thread is two.
! .IP \fBmax\-ssa\-name\-query\-depth\fR 4
  .IX Item "max-ssa-name-query-depth"
! Maximum depth of recursion when querying properties of SSA names in things
  like fold routines.  One level of recursion corresponds to following a
! use\-def chain.
! .IP \fBmax\-speculative\-devirt\-maydefs\fR 4
  .IX Item "max-speculative-devirt-maydefs"
! The maximum number of may\-defs we analyze when looking for a must\-def
  specifying the dynamic type of an object that invokes a virtual call
  we may be able to devirtualize speculatively.
! .IP \fBranger\-debug\fR 4
  .IX Item "ranger-debug"
  Specifies the type of debug output to be issued for ranges.
! .IP \fBunroll\-jam\-min\-percent\fR 4
  .IX Item "unroll-jam-min-percent"
  The minimum percentage of memory references that must be optimized
! away for the unroll\-and\-jam transformation to be considered profitable.
! .IP \fBunroll\-jam\-max\-unroll\fR 4
  .IX Item "unroll-jam-max-unroll"
  The maximum number of times the outer loop should be unrolled by
! the unroll\-and\-jam transformation.
! .IP \fBmax\-rtl\-if\-conversion\-unpredictable\-cost\fR 4
  .IX Item "max-rtl-if-conversion-unpredictable-cost"
  Maximum permissible cost for the sequence that would be generated
! by the RTL if\-conversion pass for a branch that is considered unpredictable.
! .IP \fBmax\-variable\-expansions\-in\-unroller\fR 4
  .IX Item "max-variable-expansions-in-unroller"
  If \fB\-fvariable\-expansion\-in\-unroller\fR is used, the maximum number
  of times that an individual variable will be expanded during loop unrolling.
! .IP \fBpartial\-inlining\-entry\-probability\fR 4
  .IX Item "partial-inlining-entry-probability"
! Maximum probability of the entry BB of split region
! (in percent relative to entry BB of the function)
  to make partial inlining happen.
! .IP \fBmax\-tracked\-strlens\fR 4
  .IX Item "max-tracked-strlens"
  Maximum number of strings for which strlen optimization pass will
  track string lengths.
! .IP \fBgcse\-after\-reload\-partial\-fraction\fR 4
  .IX Item "gcse-after-reload-partial-fraction"
  The threshold ratio for performing partial redundancy
  elimination after reload.
! .IP \fBgcse\-after\-reload\-critical\-fraction\fR 4
  .IX Item "gcse-after-reload-critical-fraction"
  The threshold ratio of critical edges execution count that
  permit performing redundancy elimination after reload.
! .IP \fBmax\-loop\-header\-insns\fR 4
  .IX Item "max-loop-header-insns"
  The maximum number of insns in loop header duplicated
  by the copy loop headers pass.
! .IP \fBvect\-epilogues\-nomask\fR 4
  .IX Item "vect-epilogues-nomask"
  Enable loop epilogue vectorization using smaller vector size.
! .IP \fBvect\-partial\-vector\-usage\fR 4
  .IX Item "vect-partial-vector-usage"
  Controls when the loop vectorizer considers using partial vector loads
  and stores as an alternative to falling back to scalar code.  0 stops
*************** partial vector loads and stores if vecto
*** 15768,16027 ****
  code to iterate.  2 allows partial vector loads and stores in all loops.
  The parameter only has an effect on targets that support partial
  vector loads and stores.
! .IP "\fBvect-inner-loop-cost-factor\fR" 4
  .IX Item "vect-inner-loop-cost-factor"
  The maximum factor which the loop vectorizer applies to the cost of statements
  in an inner loop relative to the loop being vectorized.  The factor applied
  is the maximum of the estimated number of iterations of the inner loop and
  this parameter.  The default value of this parameter is 50.
! .IP "\fBvect-induction-float\fR" 4
  .IX Item "vect-induction-float"
  Enable loop vectorization of floating point inductions.
! .IP "\fBvrp-sparse-threshold\fR" 4
  .IX Item "vrp-sparse-threshold"
! Maximum number of basic blocks before \s-1VRP\s0 uses a sparse bitmap cache.
! .IP "\fBvrp-switch-limit\fR" 4
  .IX Item "vrp-switch-limit"
! Maximum number of outgoing edges in a switch before \s-1VRP\s0 will not process it.
! .IP "\fBvrp-vector-threshold\fR" 4
  .IX Item "vrp-vector-threshold"
! Maximum number of basic blocks for \s-1VRP\s0 to use a basic cache vector.
! .IP "\fBavoid-fma-max-bits\fR" 4
  .IX Item "avoid-fma-max-bits"
  Maximum number of bits for which we avoid creating FMAs.
! .IP "\fBfully-pipelined-fma\fR" 4
  .IX Item "fully-pipelined-fma"
! Whether the target fully pipelines \s-1FMA\s0 instructions.  If non-zero,
! reassociation considers the benefit of parallelizing \s-1FMA\s0's multiplication
! part and addition part, assuming \s-1FMUL\s0 and \s-1FMA\s0 use the same units that can
! also do \s-1FADD.\s0
! .IP "\fBsms-loop-average-count-threshold\fR" 4
  .IX Item "sms-loop-average-count-threshold"
  A threshold on the average loop count considered by the swing modulo scheduler.
! .IP "\fBsms-dfa-history\fR" 4
  .IX Item "sms-dfa-history"
  The number of cycles the swing modulo scheduler considers when checking
! conflicts using \s-1DFA.\s0
! .IP "\fBgraphite-allow-codegen-errors\fR" 4
  .IX Item "graphite-allow-codegen-errors"
  Whether codegen errors should be ICEs when \fB\-fchecking\fR.
! .IP "\fBsms-max-ii-factor\fR" 4
  .IX Item "sms-max-ii-factor"
  A factor for tuning the upper bound that swing modulo scheduler
  uses for scheduling a loop.
! .IP "\fBlra-max-considered-reload-pseudos\fR" 4
  .IX Item "lra-max-considered-reload-pseudos"
  The max number of reload pseudos which are considered during
! spilling a non-reload pseudo.
! .IP "\fBmax-pow-sqrt-depth\fR" 4
  .IX Item "max-pow-sqrt-depth"
  Maximum depth of sqrt chains to use when synthesizing exponentiation
  by a real constant.
! .IP "\fBmax-dse-active-local-stores\fR" 4
  .IX Item "max-dse-active-local-stores"
! Maximum number of active local stores in \s-1RTL\s0 dead store elimination.
! .IP "\fBasan-instrument-allocas\fR" 4
  .IX Item "asan-instrument-allocas"
  Enable asan allocas/VLAs protection.
! .IP "\fBmax-iterations-computation-cost\fR" 4
  .IX Item "max-iterations-computation-cost"
  Bound on the cost of an expression to compute the number of iterations.
! .IP "\fBmax-isl-operations\fR" 4
  .IX Item "max-isl-operations"
  Maximum number of isl operations, 0 means unlimited.
! .IP "\fBgraphite-max-arrays-per-scop\fR" 4
  .IX Item "graphite-max-arrays-per-scop"
  Maximum number of arrays per scop.
! .IP "\fBmax-vartrack-reverse-op-size\fR" 4
  .IX Item "max-vartrack-reverse-op-size"
  Max. size of loc list for which reverse ops should be added.
! .IP "\fBfsm-scale-path-stmts\fR" 4
  .IX Item "fsm-scale-path-stmts"
  Scale factor to apply to the number of statements in a threading path
  crossing a loop backedge when comparing to
  \&\fB\-\-param=max\-jump\-thread\-duplication\-stmts\fR.
! .IP "\fBuninit-control-dep-attempts\fR" 4
  .IX Item "uninit-control-dep-attempts"
  Maximum number of nested calls to search for control dependencies
  during uninitialized variable analysis.
! .IP "\fBuninit-max-chain-len\fR" 4
  .IX Item "uninit-max-chain-len"
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
! .IP "\fBuninit-max-num-chains\fR" 4
  .IX Item "uninit-max-num-chains"
  Maximum number of predicates ored in the normalized predicate chain.
! .IP "\fBsched-autopref-queue-depth\fR" 4
  .IX Item "sched-autopref-queue-depth"
  Hardware autoprefetcher scheduler model control flag.
! Number of lookahead cycles the model looks into; at '
! \&' only enable instruction sorting heuristic.
! .IP "\fBloop-versioning-max-inner-insns\fR" 4
  .IX Item "loop-versioning-max-inner-insns"
  The maximum number of instructions that an inner loop can have
  before the loop versioning pass considers it too big to copy.
! .IP "\fBloop-versioning-max-outer-insns\fR" 4
  .IX Item "loop-versioning-max-outer-insns"
  The maximum number of instructions that an outer loop can have
  before the loop versioning pass considers it too big to copy,
  discounting any instructions in inner loops that directly benefit
  from versioning.
! .IP "\fBssa-name-def-chain-limit\fR" 4
  .IX Item "ssa-name-def-chain-limit"
! The maximum number of \s-1SSA_NAME\s0 assignments to follow in determining
  a property of a variable such as its value.  This limits the number
! of iterations or recursive calls \s-1GCC\s0 performs when optimizing certain
  statements or when determining their validity prior to issuing
  diagnostics.
! .IP "\fBstore-merging-max-size\fR" 4
  .IX Item "store-merging-max-size"
  Maximum size of a single store merging region in bytes.
! .IP "\fBhash-table-verification-limit\fR" 4
  .IX Item "hash-table-verification-limit"
  The number of elements for which hash table verification is done
  for each searched element.
! .IP "\fBmax-find-base-term-values\fR" 4
  .IX Item "max-find-base-term-values"
  Maximum number of VALUEs handled during a single find_base_term call.
! .IP "\fBanalyzer-max-enodes-per-program-point\fR" 4
  .IX Item "analyzer-max-enodes-per-program-point"
  The maximum number of exploded nodes per program point within
  the analyzer, before terminating analysis of that point.
! .IP "\fBanalyzer-max-constraints\fR" 4
  .IX Item "analyzer-max-constraints"
  The maximum number of constraints per state.
! .IP "\fBanalyzer-min-snodes-for-call-summary\fR" 4
  .IX Item "analyzer-min-snodes-for-call-summary"
  The minimum number of supernodes within a function for the
  analyzer to consider summarizing its effects at call sites.
! .IP "\fBanalyzer-max-enodes-for-full-dump\fR" 4
  .IX Item "analyzer-max-enodes-for-full-dump"
  The maximum depth of exploded nodes that should appear in a dot dump
  before switching to a less verbose format.
! .IP "\fBanalyzer-max-recursion-depth\fR" 4
  .IX Item "analyzer-max-recursion-depth"
  The maximum number of times a callsite can appear in a call stack
  within the analyzer, before terminating analysis of a call that would
  recurse deeper.
! .IP "\fBanalyzer-max-svalue-depth\fR" 4
  .IX Item "analyzer-max-svalue-depth"
  The maximum depth of a symbolic value, before approximating
  the value as unknown.
! .IP "\fBanalyzer-max-infeasible-edges\fR" 4
  .IX Item "analyzer-max-infeasible-edges"
  The maximum number of infeasible edges to reject before declaring
  a diagnostic as infeasible.
! .IP "\fBgimple-fe-computed-hot-bb-threshold\fR" 4
  .IX Item "gimple-fe-computed-hot-bb-threshold"
  The number of executions of a basic block which is considered hot.
! The parameter is used only in \s-1GIMPLE FE.\s0
! .IP "\fBanalyzer-bb-explosion-factor\fR" 4
  .IX Item "analyzer-bb-explosion-factor"
! The maximum number of 'after supernode' exploded nodes within the analyzer
  per supernode, before terminating analysis.
! .IP "\fBanalyzer-text-art-string-ellipsis-threshold\fR" 4
  .IX Item "analyzer-text-art-string-ellipsis-threshold"
  The number of bytes at which to ellipsize string literals in analyzer text art diagrams.
! .IP "\fBanalyzer-text-art-ideal-canvas-width\fR" 4
  .IX Item "analyzer-text-art-ideal-canvas-width"
  The ideal width in characters of text art diagrams generated by the analyzer.
! .IP "\fBanalyzer-text-art-string-ellipsis-head-len\fR" 4
  .IX Item "analyzer-text-art-string-ellipsis-head-len"
  The number of literal bytes to show at the head of a string literal in text art when ellipsizing it.
! .IP "\fBanalyzer-text-art-string-ellipsis-tail-len\fR" 4
  .IX Item "analyzer-text-art-string-ellipsis-tail-len"
  The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it.
! .IP "\fBranger-logical-depth\fR" 4
  .IX Item "ranger-logical-depth"
  Maximum depth of logical expression evaluation ranger will look through
  when evaluating outgoing edge ranges.
! .IP "\fBranger-recompute-depth\fR" 4
  .IX Item "ranger-recompute-depth"
  Maximum depth of instruction chains to consider for recomputation
  in the outgoing range calculator.
! .IP "\fBrelation-block-limit\fR" 4
  .IX Item "relation-block-limit"
  Maximum number of relations the oracle will register in a basic block.
! .IP "\fBmin-pagesize\fR" 4
  .IX Item "min-pagesize"
  Minimum page size for warning purposes.
! .IP "\fBopenacc-kernels\fR" 4
  .IX Item "openacc-kernels"
! Specify mode of OpenACC `kernels' constructs handling.
! With \fB\-\-param=openacc\-kernels=decompose\fR, OpenACC `kernels'
  constructs are decomposed into parts, a sequence of compute
  constructs, each then handled individually.
  This is work in progress.
! With \fB\-\-param=openacc\-kernels=parloops\fR, OpenACC `kernels'
  constructs are handled by the \fBparloops\fR pass, en bloc.
  This is the current default.
! .IP "\fBopenacc-privatization\fR" 4
  .IX Item "openacc-privatization"
  Control whether the \fB\-fopt\-info\-omp\-note\fR and applicable
  \&\fB\-fdump\-tree\-*\-details\fR options emit OpenACC privatization diagnostics.
! With \fB\-\-param=openacc\-privatization=quiet\fR, don't diagnose.
  This is the current default.
  With \fB\-\-param=openacc\-privatization=noisy\fR, do diagnose.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on AArch64 targets:
! .IP "\fBaarch64\-vect\-compare\-costs\fR" 4
  .IX Item "aarch64-vect-compare-costs"
  When vectorizing, consider using multiple different approaches and use
  the cost model to choose the cheapest one.  This includes:
  .RS 4
! .IP "*" 4
! Trying both \s-1SVE\s0 and Advanced \s-1SIMD,\s0 when \s-1SVE\s0 is available.
! .IP "*" 4
! Trying to use 64\-bit Advanced \s-1SIMD\s0 vectors for the smallest data elements,
  rather than using 128\-bit vectors for everything.
! .IP "*" 4
! Trying to use \*(L"unpacked\*(R" \s-1SVE\s0 vectors for smaller elements.  This includes
  storing smaller elements in larger containers and accessing elements with
  extending loads and truncating stores.
  .RE
  .RS 4
  .RE
! .IP "\fBaarch64\-float\-recp\-precision\fR" 4
  .IX Item "aarch64-float-recp-precision"
  The number of Newton iterations for calculating the reciprocal for float type.
  The precision of division is proportional to this param when division
  approximation is enabled.  The default value is 1.
! .IP "\fBaarch64\-double\-recp\-precision\fR" 4
  .IX Item "aarch64-double-recp-precision"
  The number of Newton iterations for calculating the reciprocal for double type.
  The precision of division is propotional to this param when division
  approximation is enabled.  The default value is 2.
! .IP "\fBaarch64\-autovec\-preference\fR" 4
  .IX Item "aarch64-autovec-preference"
! Force an \s-1ISA\s0 selection strategy for auto-vectorization.  Accepts values from
  0 to 4, inclusive.
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  Use the default heuristics.
! .IP "\fB1\fR" 4
  .IX Item "1"
! Use only Advanced \s-1SIMD\s0 for auto-vectorization.
! .IP "\fB2\fR" 4
  .IX Item "2"
! Use only \s-1SVE\s0 for auto-vectorization.
! .IP "\fB3\fR" 4
  .IX Item "3"
! Use both Advanced \s-1SIMD\s0 and \s-1SVE.\s0  Prefer Advanced \s-1SIMD\s0 when the costs are
  deemed equal.
! .IP "\fB4\fR" 4
  .IX Item "4"
! Use both Advanced \s-1SIMD\s0 and \s-1SVE.\s0  Prefer \s-1SVE\s0 when the costs are deemed equal.
  .RE
  .RS 4
  .Sp
  The default value is 0.
  .RE
! .IP "\fBaarch64\-ldp\-policy\fR" 4
  .IX Item "aarch64-ldp-policy"
! Fine-grained policy for load pairs.
  With \fB\-\-param=aarch64\-ldp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-ldp\-policy=always\fR, emit ldp regardless
--- 15701,15960 ----
  code to iterate.  2 allows partial vector loads and stores in all loops.
  The parameter only has an effect on targets that support partial
  vector loads and stores.
! .IP \fBvect\-inner\-loop\-cost\-factor\fR 4
  .IX Item "vect-inner-loop-cost-factor"
  The maximum factor which the loop vectorizer applies to the cost of statements
  in an inner loop relative to the loop being vectorized.  The factor applied
  is the maximum of the estimated number of iterations of the inner loop and
  this parameter.  The default value of this parameter is 50.
! .IP \fBvect\-induction\-float\fR 4
  .IX Item "vect-induction-float"
  Enable loop vectorization of floating point inductions.
! .IP \fBvrp\-sparse\-threshold\fR 4
  .IX Item "vrp-sparse-threshold"
! Maximum number of basic blocks before VRP uses a sparse bitmap cache.
! .IP \fBvrp\-switch\-limit\fR 4
  .IX Item "vrp-switch-limit"
! Maximum number of outgoing edges in a switch before VRP will not process it.
! .IP \fBvrp\-vector\-threshold\fR 4
  .IX Item "vrp-vector-threshold"
! Maximum number of basic blocks for VRP to use a basic cache vector.
! .IP \fBavoid\-fma\-max\-bits\fR 4
  .IX Item "avoid-fma-max-bits"
  Maximum number of bits for which we avoid creating FMAs.
! .IP \fBfully\-pipelined\-fma\fR 4
  .IX Item "fully-pipelined-fma"
! Whether the target fully pipelines FMA instructions.  If non\-zero,
! reassociation considers the benefit of parallelizing FMA\*(Aqs multiplication
! part and addition part, assuming FMUL and FMA use the same units that can
! also do FADD.
! .IP \fBsms\-loop\-average\-count\-threshold\fR 4
  .IX Item "sms-loop-average-count-threshold"
  A threshold on the average loop count considered by the swing modulo scheduler.
! .IP \fBsms\-dfa\-history\fR 4
  .IX Item "sms-dfa-history"
  The number of cycles the swing modulo scheduler considers when checking
! conflicts using DFA.
! .IP \fBgraphite\-allow\-codegen\-errors\fR 4
  .IX Item "graphite-allow-codegen-errors"
  Whether codegen errors should be ICEs when \fB\-fchecking\fR.
! .IP \fBsms\-max\-ii\-factor\fR 4
  .IX Item "sms-max-ii-factor"
  A factor for tuning the upper bound that swing modulo scheduler
  uses for scheduling a loop.
! .IP \fBlra\-max\-considered\-reload\-pseudos\fR 4
  .IX Item "lra-max-considered-reload-pseudos"
  The max number of reload pseudos which are considered during
! spilling a non\-reload pseudo.
! .IP \fBmax\-pow\-sqrt\-depth\fR 4
  .IX Item "max-pow-sqrt-depth"
  Maximum depth of sqrt chains to use when synthesizing exponentiation
  by a real constant.
! .IP \fBmax\-dse\-active\-local\-stores\fR 4
  .IX Item "max-dse-active-local-stores"
! Maximum number of active local stores in RTL dead store elimination.
! .IP \fBasan\-instrument\-allocas\fR 4
  .IX Item "asan-instrument-allocas"
  Enable asan allocas/VLAs protection.
! .IP \fBmax\-iterations\-computation\-cost\fR 4
  .IX Item "max-iterations-computation-cost"
  Bound on the cost of an expression to compute the number of iterations.
! .IP \fBmax\-isl\-operations\fR 4
  .IX Item "max-isl-operations"
  Maximum number of isl operations, 0 means unlimited.
! .IP \fBgraphite\-max\-arrays\-per\-scop\fR 4
  .IX Item "graphite-max-arrays-per-scop"
  Maximum number of arrays per scop.
! .IP \fBmax\-vartrack\-reverse\-op\-size\fR 4
  .IX Item "max-vartrack-reverse-op-size"
  Max. size of loc list for which reverse ops should be added.
! .IP \fBfsm\-scale\-path\-stmts\fR 4
  .IX Item "fsm-scale-path-stmts"
  Scale factor to apply to the number of statements in a threading path
  crossing a loop backedge when comparing to
  \&\fB\-\-param=max\-jump\-thread\-duplication\-stmts\fR.
! .IP \fBuninit\-control\-dep\-attempts\fR 4
  .IX Item "uninit-control-dep-attempts"
  Maximum number of nested calls to search for control dependencies
  during uninitialized variable analysis.
! .IP \fBuninit\-max\-chain\-len\fR 4
  .IX Item "uninit-max-chain-len"
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
! .IP \fBuninit\-max\-num\-chains\fR 4
  .IX Item "uninit-max-num-chains"
  Maximum number of predicates ored in the normalized predicate chain.
! .IP \fBsched\-autopref\-queue\-depth\fR 4
  .IX Item "sched-autopref-queue-depth"
  Hardware autoprefetcher scheduler model control flag.
! Number of lookahead cycles the model looks into; at \*(Aq
! \&\*(Aq only enable instruction sorting heuristic.
! .IP \fBloop\-versioning\-max\-inner\-insns\fR 4
  .IX Item "loop-versioning-max-inner-insns"
  The maximum number of instructions that an inner loop can have
  before the loop versioning pass considers it too big to copy.
! .IP \fBloop\-versioning\-max\-outer\-insns\fR 4
  .IX Item "loop-versioning-max-outer-insns"
  The maximum number of instructions that an outer loop can have
  before the loop versioning pass considers it too big to copy,
  discounting any instructions in inner loops that directly benefit
  from versioning.
! .IP \fBssa\-name\-def\-chain\-limit\fR 4
  .IX Item "ssa-name-def-chain-limit"
! The maximum number of SSA_NAME assignments to follow in determining
  a property of a variable such as its value.  This limits the number
! of iterations or recursive calls GCC performs when optimizing certain
  statements or when determining their validity prior to issuing
  diagnostics.
! .IP \fBstore\-merging\-max\-size\fR 4
  .IX Item "store-merging-max-size"
  Maximum size of a single store merging region in bytes.
! .IP \fBhash\-table\-verification\-limit\fR 4
  .IX Item "hash-table-verification-limit"
  The number of elements for which hash table verification is done
  for each searched element.
! .IP \fBmax\-find\-base\-term\-values\fR 4
  .IX Item "max-find-base-term-values"
  Maximum number of VALUEs handled during a single find_base_term call.
! .IP \fBanalyzer\-max\-enodes\-per\-program\-point\fR 4
  .IX Item "analyzer-max-enodes-per-program-point"
  The maximum number of exploded nodes per program point within
  the analyzer, before terminating analysis of that point.
! .IP \fBanalyzer\-max\-constraints\fR 4
  .IX Item "analyzer-max-constraints"
  The maximum number of constraints per state.
! .IP \fBanalyzer\-min\-snodes\-for\-call\-summary\fR 4
  .IX Item "analyzer-min-snodes-for-call-summary"
  The minimum number of supernodes within a function for the
  analyzer to consider summarizing its effects at call sites.
! .IP \fBanalyzer\-max\-enodes\-for\-full\-dump\fR 4
  .IX Item "analyzer-max-enodes-for-full-dump"
  The maximum depth of exploded nodes that should appear in a dot dump
  before switching to a less verbose format.
! .IP \fBanalyzer\-max\-recursion\-depth\fR 4
  .IX Item "analyzer-max-recursion-depth"
  The maximum number of times a callsite can appear in a call stack
  within the analyzer, before terminating analysis of a call that would
  recurse deeper.
! .IP \fBanalyzer\-max\-svalue\-depth\fR 4
  .IX Item "analyzer-max-svalue-depth"
  The maximum depth of a symbolic value, before approximating
  the value as unknown.
! .IP \fBanalyzer\-max\-infeasible\-edges\fR 4
  .IX Item "analyzer-max-infeasible-edges"
  The maximum number of infeasible edges to reject before declaring
  a diagnostic as infeasible.
! .IP \fBgimple\-fe\-computed\-hot\-bb\-threshold\fR 4
  .IX Item "gimple-fe-computed-hot-bb-threshold"
  The number of executions of a basic block which is considered hot.
! The parameter is used only in GIMPLE FE.
! .IP \fBanalyzer\-bb\-explosion\-factor\fR 4
  .IX Item "analyzer-bb-explosion-factor"
! The maximum number of \*(Aqafter supernode\*(Aq exploded nodes within the analyzer
  per supernode, before terminating analysis.
! .IP \fBanalyzer\-text\-art\-string\-ellipsis\-threshold\fR 4
  .IX Item "analyzer-text-art-string-ellipsis-threshold"
  The number of bytes at which to ellipsize string literals in analyzer text art diagrams.
! .IP \fBanalyzer\-text\-art\-ideal\-canvas\-width\fR 4
  .IX Item "analyzer-text-art-ideal-canvas-width"
  The ideal width in characters of text art diagrams generated by the analyzer.
! .IP \fBanalyzer\-text\-art\-string\-ellipsis\-head\-len\fR 4
  .IX Item "analyzer-text-art-string-ellipsis-head-len"
  The number of literal bytes to show at the head of a string literal in text art when ellipsizing it.
! .IP \fBanalyzer\-text\-art\-string\-ellipsis\-tail\-len\fR 4
  .IX Item "analyzer-text-art-string-ellipsis-tail-len"
  The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it.
! .IP \fBranger\-logical\-depth\fR 4
  .IX Item "ranger-logical-depth"
  Maximum depth of logical expression evaluation ranger will look through
  when evaluating outgoing edge ranges.
! .IP \fBranger\-recompute\-depth\fR 4
  .IX Item "ranger-recompute-depth"
  Maximum depth of instruction chains to consider for recomputation
  in the outgoing range calculator.
! .IP \fBrelation\-block\-limit\fR 4
  .IX Item "relation-block-limit"
  Maximum number of relations the oracle will register in a basic block.
! .IP \fBmin\-pagesize\fR 4
  .IX Item "min-pagesize"
  Minimum page size for warning purposes.
! .IP \fBopenacc\-kernels\fR 4
  .IX Item "openacc-kernels"
! Specify mode of OpenACC \`kernels\*(Aq constructs handling.
! With \fB\-\-param=openacc\-kernels=decompose\fR, OpenACC \`kernels\*(Aq
  constructs are decomposed into parts, a sequence of compute
  constructs, each then handled individually.
  This is work in progress.
! With \fB\-\-param=openacc\-kernels=parloops\fR, OpenACC \`kernels\*(Aq
  constructs are handled by the \fBparloops\fR pass, en bloc.
  This is the current default.
! .IP \fBopenacc\-privatization\fR 4
  .IX Item "openacc-privatization"
  Control whether the \fB\-fopt\-info\-omp\-note\fR and applicable
  \&\fB\-fdump\-tree\-*\-details\fR options emit OpenACC privatization diagnostics.
! With \fB\-\-param=openacc\-privatization=quiet\fR, don\*(Aqt diagnose.
  This is the current default.
  With \fB\-\-param=openacc\-privatization=noisy\fR, do diagnose.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on AArch64 targets:
! .IP \fBaarch64\-vect\-compare\-costs\fR 4
  .IX Item "aarch64-vect-compare-costs"
  When vectorizing, consider using multiple different approaches and use
  the cost model to choose the cheapest one.  This includes:
  .RS 4
! .IP * 4
! Trying both SVE and Advanced SIMD, when SVE is available.
! .IP * 4
! Trying to use 64\-bit Advanced SIMD vectors for the smallest data elements,
  rather than using 128\-bit vectors for everything.
! .IP * 4
! Trying to use "unpacked" SVE vectors for smaller elements.  This includes
  storing smaller elements in larger containers and accessing elements with
  extending loads and truncating stores.
  .RE
  .RS 4
  .RE
! .IP \fBaarch64\-float\-recp\-precision\fR 4
  .IX Item "aarch64-float-recp-precision"
  The number of Newton iterations for calculating the reciprocal for float type.
  The precision of division is proportional to this param when division
  approximation is enabled.  The default value is 1.
! .IP \fBaarch64\-double\-recp\-precision\fR 4
  .IX Item "aarch64-double-recp-precision"
  The number of Newton iterations for calculating the reciprocal for double type.
  The precision of division is propotional to this param when division
  approximation is enabled.  The default value is 2.
! .IP \fBaarch64\-autovec\-preference\fR 4
  .IX Item "aarch64-autovec-preference"
! Force an ISA selection strategy for auto\-vectorization.  Accepts values from
  0 to 4, inclusive.
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  Use the default heuristics.
! .IP \fB1\fR 4
  .IX Item "1"
! Use only Advanced SIMD for auto\-vectorization.
! .IP \fB2\fR 4
  .IX Item "2"
! Use only SVE for auto\-vectorization.
! .IP \fB3\fR 4
  .IX Item "3"
! Use both Advanced SIMD and SVE.  Prefer Advanced SIMD when the costs are
  deemed equal.
! .IP \fB4\fR 4
  .IX Item "4"
! Use both Advanced SIMD and SVE.  Prefer SVE when the costs are deemed equal.
  .RE
  .RS 4
  .Sp
  The default value is 0.
  .RE
! .IP \fBaarch64\-ldp\-policy\fR 4
  .IX Item "aarch64-ldp-policy"
! Fine\-grained policy for load pairs.
  With \fB\-\-param=aarch64\-ldp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-ldp\-policy=always\fR, emit ldp regardless
*************** of alignment.
*** 16029,16037 ****
  With \fB\-\-param=aarch64\-ldp\-policy=never\fR, do not emit ldp.
  With \fB\-\-param=aarch64\-ldp\-policy=aligned\fR, emit ldp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP "\fBaarch64\-stp\-policy\fR" 4
  .IX Item "aarch64-stp-policy"
! Fine-grained policy for store pairs.
  With \fB\-\-param=aarch64\-stp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-stp\-policy=always\fR, emit stp regardless
--- 15962,15970 ----
  With \fB\-\-param=aarch64\-ldp\-policy=never\fR, do not emit ldp.
  With \fB\-\-param=aarch64\-ldp\-policy=aligned\fR, emit ldp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP \fBaarch64\-stp\-policy\fR 4
  .IX Item "aarch64-stp-policy"
! Fine\-grained policy for store pairs.
  With \fB\-\-param=aarch64\-stp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-stp\-policy=always\fR, emit stp regardless
*************** of alignment.
*** 16039,16051 ****
  With \fB\-\-param=aarch64\-stp\-policy=never\fR, do not emit stp.
  With \fB\-\-param=aarch64\-stp\-policy=aligned\fR, emit stp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP "\fBaarch64\-ldp\-alias\-check\-limit\fR" 4
  .IX Item "aarch64-ldp-alias-check-limit"
  Limit on the number of alias checks performed by the AArch64 load/store pair
  fusion pass when attempting to form an ldp/stp.  Higher values make the pass
! more aggressive at re-ordering loads over stores, at the expense of increased
  compile time.
! .IP "\fBaarch64\-ldp\-writeback\fR" 4
  .IX Item "aarch64-ldp-writeback"
  Param to control which writeback opportunities we try to handle in the AArch64
  load/store pair fusion pass.  A value of zero disables writeback handling.  One
--- 15972,15984 ----
  With \fB\-\-param=aarch64\-stp\-policy=never\fR, do not emit stp.
  With \fB\-\-param=aarch64\-stp\-policy=aligned\fR, emit stp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP \fBaarch64\-ldp\-alias\-check\-limit\fR 4
  .IX Item "aarch64-ldp-alias-check-limit"
  Limit on the number of alias checks performed by the AArch64 load/store pair
  fusion pass when attempting to form an ldp/stp.  Higher values make the pass
! more aggressive at re\-ordering loads over stores, at the expense of increased
  compile time.
! .IP \fBaarch64\-ldp\-writeback\fR 4
  .IX Item "aarch64-ldp-writeback"
  Param to control which writeback opportunities we try to handle in the AArch64
  load/store pair fusion pass.  A value of zero disables writeback handling.  One
*************** means we try to form pairs involving one
*** 16053,16111 ****
  accesses where possible.  A value of two means we also try to opportunistically
  form writeback opportunities by folding in trailing destructive updates of the
  base register used by a pair.
! .IP "\fBaarch64\-loop\-vect\-issue\-rate\-niters\fR" 4
  .IX Item "aarch64-loop-vect-issue-rate-niters"
  The tuning for some AArch64 CPUs tries to take both latencies and issue
  rates into account when deciding whether a loop should be vectorized
! using \s-1SVE,\s0 vectorized using Advanced \s-1SIMD,\s0 or not vectorized at all.
! If this parameter is set to \fIn\fR, \s-1GCC\s0 will not use this heuristic
  for loops that are known to execute in fewer than \fIn\fR Advanced
! \&\s-1SIMD\s0 iterations.
! .IP "\fBaarch64\-vect\-unroll\-limit\fR" 4
  .IX Item "aarch64-vect-unroll-limit"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set's the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .RE
  .RS 4
  .Sp
! The following choices of \fIname\fR are available on \s-1GCN\s0 targets:
! .IP "\fBgcn-preferred-vectorization-factor\fR" 4
  .IX Item "gcn-preferred-vectorization-factor"
  Preferred vectorization factor: \fBdefault\fR, \fB32\fR, \fB64\fR.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on i386 and x86_64 targets:
! .IP "\fBx86\-stlf\-window\-ninsns\fR" 4
  .IX Item "x86-stlf-window-ninsns"
! Instructions number above which \s-1STFL\s0 stall penalty can be compensated.
! .IP "\fBx86\-stv\-max\-visits\fR" 4
  .IX Item "x86-stv-max-visits"
! The maximum number of use and def visits when discovering a \s-1STV\s0 chain before
  the discovery is aborted.
  .RE
  .RS 4
  .RE
  .SS "Program Instrumentation Options"
  .IX Subsection "Program Instrumentation Options"
! \&\s-1GCC\s0 supports a number of command-line options that control adding
! run-time instrumentation to the code it normally generates.  
  For example, one purpose of instrumentation is collect profiling
  statistics for use in finding program hot spots, code coverage
! analysis, or profile-guided optimizations.
! Another class of program instrumentation is adding run-time checking 
  to detect programming errors like invalid pointer
! dereferences or out-of-bounds array accesses, as well as deliberately
! hostile attacks such as stack smashing or \*(C+ vtable hijacking.
  There is also a general hook which can be used to implement other
! forms of tracing or function-level instrumentation for debug or
  program analysis purposes.
! .IP "\fB\-p\fR" 4
  .IX Item "-p"
  .PD 0
! .IP "\fB\-pg\fR" 4
  .IX Item "-pg"
  .PD
  Generate extra code to write profile information suitable for the
--- 15986,16044 ----
  accesses where possible.  A value of two means we also try to opportunistically
  form writeback opportunities by folding in trailing destructive updates of the
  base register used by a pair.
! .IP \fBaarch64\-loop\-vect\-issue\-rate\-niters\fR 4
  .IX Item "aarch64-loop-vect-issue-rate-niters"
  The tuning for some AArch64 CPUs tries to take both latencies and issue
  rates into account when deciding whether a loop should be vectorized
! using SVE, vectorized using Advanced SIMD, or not vectorized at all.
! If this parameter is set to \fIn\fR, GCC will not use this heuristic
  for loops that are known to execute in fewer than \fIn\fR Advanced
! SIMD iterations.
! .IP \fBaarch64\-vect\-unroll\-limit\fR 4
  .IX Item "aarch64-vect-unroll-limit"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set\*(Aqs the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .RE
  .RS 4
  .Sp
! The following choices of \fIname\fR are available on GCN targets:
! .IP \fBgcn\-preferred\-vectorization\-factor\fR 4
  .IX Item "gcn-preferred-vectorization-factor"
  Preferred vectorization factor: \fBdefault\fR, \fB32\fR, \fB64\fR.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on i386 and x86_64 targets:
! .IP \fBx86\-stlf\-window\-ninsns\fR 4
  .IX Item "x86-stlf-window-ninsns"
! Instructions number above which STFL stall penalty can be compensated.
! .IP \fBx86\-stv\-max\-visits\fR 4
  .IX Item "x86-stv-max-visits"
! The maximum number of use and def visits when discovering a STV chain before
  the discovery is aborted.
  .RE
  .RS 4
  .RE
  .SS "Program Instrumentation Options"
  .IX Subsection "Program Instrumentation Options"
! GCC supports a number of command\-line options that control adding
! run\-time instrumentation to the code it normally generates.  
  For example, one purpose of instrumentation is collect profiling
  statistics for use in finding program hot spots, code coverage
! analysis, or profile\-guided optimizations.
! Another class of program instrumentation is adding run\-time checking 
  to detect programming errors like invalid pointer
! dereferences or out\-of\-bounds array accesses, as well as deliberately
! hostile attacks such as stack smashing or C++ vtable hijacking.
  There is also a general hook which can be used to implement other
! forms of tracing or function\-level instrumentation for debug or
  program analysis purposes.
! .IP \fB\-p\fR 4
  .IX Item "-p"
  .PD 0
! .IP \fB\-pg\fR 4
  .IX Item "-pg"
  .PD
  Generate extra code to write profile information suitable for the
*************** linking.
*** 16116,16135 ****
  .Sp
  You can use the function attribute \f(CW\*(C`no_instrument_function\*(C'\fR to
  suppress profiling of individual functions when compiling with these options.
! .IP "\fB\-fprofile\-arcs\fR" 4
  .IX Item "-fprofile-arcs"
  Add code so that program flow \fIarcs\fR are instrumented.  During
  execution the program records how many times each branch and call is
  executed and how many times it is taken or returns.  On targets that support
  constructors with priority support, profiling properly handles constructors,
! destructors and \*(C+ constructors (and destructors) of classes which are used
  as a type of a global variable.
  .Sp
  When the compiled
  program exits it saves this data to a file called
! \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
! profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
! test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
  \&\fIauxname\fR is generated from the name of the output file, if
  explicitly specified and it is not the final executable, otherwise it is
  the basename of the source file.  In both cases any suffix is removed
--- 16049,16068 ----
  .Sp
  You can use the function attribute \f(CW\*(C`no_instrument_function\*(C'\fR to
  suppress profiling of individual functions when compiling with these options.
! .IP \fB\-fprofile\-arcs\fR 4
  .IX Item "-fprofile-arcs"
  Add code so that program flow \fIarcs\fR are instrumented.  During
  execution the program records how many times each branch and call is
  executed and how many times it is taken or returns.  On targets that support
  constructors with priority support, profiling properly handles constructors,
! destructors and C++ constructors (and destructors) of classes which are used
  as a type of a global variable.
  .Sp
  When the compiled
  program exits it saves this data to a file called
! \&\fIauxname.gcda\fR for each source file.  The data may be used for
! profile\-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
! test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file\*(Aqs
  \&\fIauxname\fR is generated from the name of the output file, if
  explicitly specified and it is not the final executable, otherwise it is
  the basename of the source file.  In both cases any suffix is removed
*************** Note that if a command line directly lin
*** 16140,16195 ****
  \&\fI.gcda\fR files will be prefixed with the unsuffixed name of the output file.
  E.g. \f(CW\*(C`gcc a.c b.c \-o binary\*(C'\fR would generate \fIbinary\-a.gcda\fR and
  \&\fIbinary\-b.gcda\fR files.
! .IP "\fB\-fcondition\-coverage\fR" 4
  .IX Item "-fcondition-coverage"
  Add code so that program conditions are instrumented.  During execution the
  program records what terms in a conditional contributes to a decision, which
  can be used to verify that all terms in a Boolean function are tested and have
  an independent effect on the outcome of a decision.  The result can be read
  with \f(CW\*(C`gcov \-\-conditions\*(C'\fR.
! .IP "\fB\-\-coverage\fR" 4
  .IX Item "--coverage"
  This option is used to compile and link code instrumented for coverage
  analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
  \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
  linking).  See the documentation for those options for more details.
  .RS 4
! .IP "*" 4
  Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
  and code generation options.  For test coverage analysis, use the
  additional \fB\-ftest\-coverage\fR option.  You do not need to profile
  every source file in a program.
! .IP "*" 4
  Compile the source files additionally with \fB\-fprofile\-abs\-path\fR
  to create absolute path names in the \fI.gcno\fR files.  This allows
  \&\fBgcov\fR to find the correct sources in projects where compilations
  occur with different working directories.
! .IP "*" 4
  Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
  (the latter implies the former).
! .IP "*" 4
  Run the program on a representative workload to generate the arc profile
  information.  This may be repeated any number of times.  You can run
  concurrent instances of your program, and provided that the file system
  supports locking, the data files will be correctly updated.  Unless
! a strict \s-1ISO C\s0 dialect option is in effect, \f(CW\*(C`fork\*(C'\fR calls are
  detected and correctly handled without double counting.
  .Sp
  Moreover, an object file can be recompiled multiple times
  and the corresponding \fI.gcda\fR file merges as long as
  the source file and the compiler options are unchanged.
! .IP "*" 4
! For profile-directed optimizations, compile the source files again with
  the same optimization and code generation options plus
  \&\fB\-fbranch\-probabilities\fR.
! .IP "*" 4
  For test coverage analysis, use \fBgcov\fR to produce human readable
  information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
  \&\fBgcov\fR documentation for further information.
  .RE
  .RS 4
  .Sp
! With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
  creates a program flow graph, then finds a spanning tree for the graph.
  Only arcs that are not on the spanning tree have to be instrumented: the
  compiler adds code to count the number of times that these arcs are
--- 16073,16128 ----
  \&\fI.gcda\fR files will be prefixed with the unsuffixed name of the output file.
  E.g. \f(CW\*(C`gcc a.c b.c \-o binary\*(C'\fR would generate \fIbinary\-a.gcda\fR and
  \&\fIbinary\-b.gcda\fR files.
! .IP \fB\-fcondition\-coverage\fR 4
  .IX Item "-fcondition-coverage"
  Add code so that program conditions are instrumented.  During execution the
  program records what terms in a conditional contributes to a decision, which
  can be used to verify that all terms in a Boolean function are tested and have
  an independent effect on the outcome of a decision.  The result can be read
  with \f(CW\*(C`gcov \-\-conditions\*(C'\fR.
! .IP \fB\-\-coverage\fR 4
  .IX Item "--coverage"
  This option is used to compile and link code instrumented for coverage
  analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
  \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
  linking).  See the documentation for those options for more details.
  .RS 4
! .IP * 4
  Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
  and code generation options.  For test coverage analysis, use the
  additional \fB\-ftest\-coverage\fR option.  You do not need to profile
  every source file in a program.
! .IP * 4
  Compile the source files additionally with \fB\-fprofile\-abs\-path\fR
  to create absolute path names in the \fI.gcno\fR files.  This allows
  \&\fBgcov\fR to find the correct sources in projects where compilations
  occur with different working directories.
! .IP * 4
  Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
  (the latter implies the former).
! .IP * 4
  Run the program on a representative workload to generate the arc profile
  information.  This may be repeated any number of times.  You can run
  concurrent instances of your program, and provided that the file system
  supports locking, the data files will be correctly updated.  Unless
! a strict ISO C dialect option is in effect, \f(CW\*(C`fork\*(C'\fR calls are
  detected and correctly handled without double counting.
  .Sp
  Moreover, an object file can be recompiled multiple times
  and the corresponding \fI.gcda\fR file merges as long as
  the source file and the compiler options are unchanged.
! .IP * 4
! For profile\-directed optimizations, compile the source files again with
  the same optimization and code generation options plus
  \&\fB\-fbranch\-probabilities\fR.
! .IP * 4
  For test coverage analysis, use \fBgcov\fR to produce human readable
  information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
  \&\fBgcov\fR documentation for further information.
  .RE
  .RS 4
  .Sp
! With \fB\-fprofile\-arcs\fR, for each function of your program GCC
  creates a program flow graph, then finds a spanning tree for the graph.
  Only arcs that are not on the spanning tree have to be instrumented: the
  compiler adds code to count the number of times that these arcs are
*************** executed.  When an arc is the only exit
*** 16197,16252 ****
  instrumentation code can be added to the block; otherwise, a new basic
  block must be created to hold the instrumentation code.
  .Sp
! With \fB\-fcondition\-coverage\fR, for each conditional in your program \s-1GCC\s0
  creates a bitset and records the exercised boolean values that have an
  independent effect on the outcome of that expression.
  .RE
! .IP "\fB\-ftest\-coverage\fR" 4
  .IX Item "-ftest-coverage"
! Produce a notes file that the \fBgcov\fR code-coverage utility can use to
! show program coverage.  Each source file's note file is called
! \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
  above for a description of \fIauxname\fR and instructions on how to
  generate test coverage data.  Coverage data matches the source files
  more closely if you do not optimize.
! .IP "\fB\-fprofile\-abs\-path\fR" 4
  .IX Item "-fprofile-abs-path"
  Automatically convert relative source file names to absolute path names
  in the \fI.gcno\fR files.  This allows \fBgcov\fR to find the correct
  sources in projects where compilations occur with different working
  directories.
! .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
  .IX Item "-fprofile-dir=path"
  Set the directory to search for the profile data files in to \fIpath\fR.
  This option affects only the profile data generated by
  \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
  and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
  and its related options.  Both absolute and relative paths can be used.
! By default, \s-1GCC\s0 uses the current directory as \fIpath\fR, thus the
  profile data file appears in the same directory as the object file.
  In order to prevent the file name clashing, if the object file name is
  not an absolute path, we mangle the absolute path of the
! \&\fI\fIsourcename\fI.gcda\fR file and use it as the file name of a
  \&\fI.gcda\fR file.  See details about the file naming in \fB\-fprofile\-arcs\fR.
  See similar option \fB\-fprofile\-note\fR.
  .Sp
  When an executable is run in a massive parallel environment, it is recommended
  to save profile to different folders.  That can be done with variables
! in \fIpath\fR that are exported during run-time:
  .RS 4
! .IP "\fB\f(CB%p\fB\fR" 4
  .IX Item "%p"
! process \s-1ID.\s0
! .IP "\fB\f(CB%q\fB{\s-1VAR\s0}\fR" 4
  .IX Item "%q{VAR}"
! value of environment variable \fI\s-1VAR\s0\fR
  .RE
  .RS 4
  .RE
! .IP "\fB\-fprofile\-generate\fR" 4
  .IX Item "-fprofile-generate"
  .PD 0
! .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
  .IX Item "-fprofile-generate=path"
  .PD
  Enable options usually used for instrumenting application to produce
--- 16130,16187 ----
  instrumentation code can be added to the block; otherwise, a new basic
  block must be created to hold the instrumentation code.
  .Sp
! With \fB\-fcondition\-coverage\fR, for each conditional in your program GCC
  creates a bitset and records the exercised boolean values that have an
  independent effect on the outcome of that expression.
  .RE
! .IP \fB\-ftest\-coverage\fR 4
  .IX Item "-ftest-coverage"
! Produce a notes file that the \fBgcov\fR code\-coverage utility can use to
! show program coverage.  Each source file\*(Aqs note file is called
! \&\fIauxname.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
  above for a description of \fIauxname\fR and instructions on how to
  generate test coverage data.  Coverage data matches the source files
  more closely if you do not optimize.
! .IP \fB\-fprofile\-abs\-path\fR 4
  .IX Item "-fprofile-abs-path"
  Automatically convert relative source file names to absolute path names
  in the \fI.gcno\fR files.  This allows \fBgcov\fR to find the correct
  sources in projects where compilations occur with different working
  directories.
! .IP \fB\-fprofile\-dir=\fR\fIpath\fR 4
  .IX Item "-fprofile-dir=path"
  Set the directory to search for the profile data files in to \fIpath\fR.
  This option affects only the profile data generated by
  \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
  and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
  and its related options.  Both absolute and relative paths can be used.
! By default, GCC uses the current directory as \fIpath\fR, thus the
  profile data file appears in the same directory as the object file.
  In order to prevent the file name clashing, if the object file name is
  not an absolute path, we mangle the absolute path of the
! \&\fIsourcename.gcda\fR file and use it as the file name of a
  \&\fI.gcda\fR file.  See details about the file naming in \fB\-fprofile\-arcs\fR.
  See similar option \fB\-fprofile\-note\fR.
  .Sp
  When an executable is run in a massive parallel environment, it is recommended
  to save profile to different folders.  That can be done with variables
! in \fIpath\fR that are exported during run\-time:
  .RS 4
! .ie n .IP \fR\fB%p\fR\fB\fR 4
! .el .IP \fR\f(CB%p\fR\fB\fR 4
  .IX Item "%p"
! process ID.
! .ie n .IP \fR\fB%q\fR\fB{VAR}\fR 4
! .el .IP \fR\f(CB%q\fR\fB{VAR}\fR 4
  .IX Item "%q{VAR}"
! value of environment variable \fIVAR\fR
  .RE
  .RS 4
  .RE
! .IP \fB\-fprofile\-generate\fR 4
  .IX Item "-fprofile-generate"
  .PD 0
! .IP \fB\-fprofile\-generate=\fR\fIpath\fR 4
  .IX Item "-fprofile-generate=path"
  .PD
  Enable options usually used for instrumenting application to produce
*************** The following options are enabled:
*** 16258,16272 ****
  \&\fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR,
  \&\fB\-finline\-functions\fR, and \fB\-fipa\-bit\-cp\fR.
  .Sp
! If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
  .Sp
  To optimize the program based on the collected profile information, use
  \&\fB\-fprofile\-use\fR.
! .IP "\fB\-fprofile\-info\-section\fR" 4
  .IX Item "-fprofile-info-section"
  .PD 0
! .IP "\fB\-fprofile\-info\-section=\fR\fIname\fR" 4
  .IX Item "-fprofile-info-section=name"
  .PD
  Register the profile information in the specified section instead of using a
--- 16193,16207 ----
  \&\fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR,
  \&\fB\-finline\-functions\fR, and \fB\-fipa\-bit\-cp\fR.
  .Sp
! If \fIpath\fR is specified, GCC looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
  .Sp
  To optimize the program based on the collected profile information, use
  \&\fB\-fprofile\-use\fR.
! .IP \fB\-fprofile\-info\-section\fR 4
  .IX Item "-fprofile-info-section"
  .PD 0
! .IP \fB\-fprofile\-info\-section=\fR\fIname\fR 4
  .IX Item "-fprofile-info-section=name"
  .PD
  Register the profile information in the specified section instead of using a
*************** environments (for example embedded syste
*** 16281,16287 ****
  support constructors/destructors or the C library file I/O.
  .Sp
  The linker could collect the input sections in a continuous memory block and
! define start and end symbols.  A \s-1GNU\s0 linker script example which defines a
  linker output section follows:
  .Sp
  .Vb 6
--- 16216,16222 ----
  support constructors/destructors or the C library file I/O.
  .Sp
  The linker could collect the input sections in a continuous memory block and
! define start and end symbols.  A GNU linker script example which defines a
  linker output section follows:
  .Sp
  .Vb 6
*************** for example like this:
*** 16351,16370 ****
  \&        }
  .Ve
  .Sp
! The \fBmerge-stream\fR subcommand of \fBgcov-tool\fR may be used to
  deserialize the data stream generated by the \f(CW\*(C`_\|_gcov_filename_to_gcfn\*(C'\fR and
  \&\f(CW\*(C`_\|_gcov_info_to_gcda\*(C'\fR functions and merge the profile information into
  \&\fI.gcda\fR files on the host filesystem.
! .IP "\fB\-fprofile\-note=\fR\fIpath\fR" 4
  .IX Item "-fprofile-note=path"
! If \fIpath\fR is specified, \s-1GCC\s0 saves \fI.gcno\fR file into \fIpath\fR
  location.  If you combine the option with multiple source files,
  the \fI.gcno\fR file will be overwritten.
! .IP "\fB\-fprofile\-prefix\-path=\fR\fIpath\fR" 4
  .IX Item "-fprofile-prefix-path=path"
  This option can be used in combination with
  \&\fBprofile\-generate=\fR\fIprofile_dir\fR and
! \&\fBprofile\-use=\fR\fIprofile_dir\fR to inform \s-1GCC\s0 where is the base
  directory of built source tree.  By default \fIprofile_dir\fR will contain
  files with mangled absolute paths of all object files in the built project.
  This is not desirable when directory used to build the instrumented binary
--- 16286,16305 ----
  \&        }
  .Ve
  .Sp
! The \fBmerge\-stream\fR subcommand of \fBgcov\-tool\fR may be used to
  deserialize the data stream generated by the \f(CW\*(C`_\|_gcov_filename_to_gcfn\*(C'\fR and
  \&\f(CW\*(C`_\|_gcov_info_to_gcda\*(C'\fR functions and merge the profile information into
  \&\fI.gcda\fR files on the host filesystem.
! .IP \fB\-fprofile\-note=\fR\fIpath\fR 4
  .IX Item "-fprofile-note=path"
! If \fIpath\fR is specified, GCC saves \fI.gcno\fR file into \fIpath\fR
  location.  If you combine the option with multiple source files,
  the \fI.gcno\fR file will be overwritten.
! .IP \fB\-fprofile\-prefix\-path=\fR\fIpath\fR 4
  .IX Item "-fprofile-prefix-path=path"
  This option can be used in combination with
  \&\fBprofile\-generate=\fR\fIprofile_dir\fR and
! \&\fBprofile\-use=\fR\fIprofile_dir\fR to inform GCC where is the base
  directory of built source tree.  By default \fIprofile_dir\fR will contain
  files with mangled absolute paths of all object files in the built project.
  This is not desirable when directory used to build the instrumented binary
*************** feedback because the profile data will n
*** 16373,16410 ****
  In such setups \fB\-fprofile\-prefix\-path=\fR\fIpath\fR with \fIpath\fR
  pointing to the base directory of the build can be used to strip the irrelevant
  part of the path and keep all file names relative to the main build directory.
! .IP "\fB\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fprofile-prefix-map=old=new"
! When compiling files residing in directory \fI\fIold\fI\fR, record
  profiling information (with \fB\-\-coverage\fR)
  describing them as if the files resided in
! directory \fI\fInew\fI\fR instead.
  See also \fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fprofile\-update=\fR\fImethod\fR" 4
  .IX Item "-fprofile-update=method"
  Alter the update method for an application instrumented for profile
  feedback based optimization.  The \fImethod\fR argument should be one of
! \&\fBsingle\fR, \fBatomic\fR or \fBprefer-atomic\fR.
! The first one is useful for single-threaded applications,
! while the second one prevents profile corruption by emitting thread-safe code.
  .Sp
  \&\fBWarning:\fR When an application does not properly join all threads
  (or creates an detached thread), a profile file can be still corrupted.
  .Sp
! Using \fBprefer-atomic\fR would be transformed either to \fBatomic\fR,
! when supported by a target, or to \fBsingle\fR otherwise.  The \s-1GCC\s0 driver
! automatically selects \fBprefer-atomic\fR when \fB\-pthread\fR
  is present in the command line, otherwise the default method is \fBsingle\fR.
  .Sp
  If \fBatomic\fR is selected, then the profile information is updated using
! atomic operations on a best-effort basis.  Ideally, the profile information is
  updated through atomic operations in hardware.  If the target platform does not
  support the required atomic operations in hardware, however, \fIlibatomic\fR
  is available, then the profile information is updated through calls to
  \&\fIlibatomic\fR.  If the target platform neither supports the required atomic
  operations in hardware nor \fIlibatomic\fR, then the profile information is
  not atomically updated and a warning is issued.  In this case, the obtained
! profiling information may be corrupt for multi-threaded applications.
  .Sp
  For performance reasons, if 64\-bit counters are used for the profiling
  information and the target platform only supports 32\-bit atomic operations in
--- 16308,16345 ----
  In such setups \fB\-fprofile\-prefix\-path=\fR\fIpath\fR with \fIpath\fR
  pointing to the base directory of the build can be used to strip the irrelevant
  part of the path and keep all file names relative to the main build directory.
! .IP \fB\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fprofile-prefix-map=old=new"
! When compiling files residing in directory \fIold\fR, record
  profiling information (with \fB\-\-coverage\fR)
  describing them as if the files resided in
! directory \fInew\fR instead.
  See also \fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fprofile\-update=\fR\fImethod\fR 4
  .IX Item "-fprofile-update=method"
  Alter the update method for an application instrumented for profile
  feedback based optimization.  The \fImethod\fR argument should be one of
! \&\fBsingle\fR, \fBatomic\fR or \fBprefer\-atomic\fR.
! The first one is useful for single\-threaded applications,
! while the second one prevents profile corruption by emitting thread\-safe code.
  .Sp
  \&\fBWarning:\fR When an application does not properly join all threads
  (or creates an detached thread), a profile file can be still corrupted.
  .Sp
! Using \fBprefer\-atomic\fR would be transformed either to \fBatomic\fR,
! when supported by a target, or to \fBsingle\fR otherwise.  The GCC driver
! automatically selects \fBprefer\-atomic\fR when \fB\-pthread\fR
  is present in the command line, otherwise the default method is \fBsingle\fR.
  .Sp
  If \fBatomic\fR is selected, then the profile information is updated using
! atomic operations on a best\-effort basis.  Ideally, the profile information is
  updated through atomic operations in hardware.  If the target platform does not
  support the required atomic operations in hardware, however, \fIlibatomic\fR
  is available, then the profile information is updated through calls to
  \&\fIlibatomic\fR.  If the target platform neither supports the required atomic
  operations in hardware nor \fIlibatomic\fR, then the profile information is
  not atomically updated and a warning is issued.  In this case, the obtained
! profiling information may be corrupt for multi\-threaded applications.
  .Sp
  For performance reasons, if 64\-bit counters are used for the profiling
  information and the target platform only supports 32\-bit atomic operations in
*************** hardware, then the performance critical
*** 16412,16432 ****
  32\-bit atomic operations for each counter update.  If a signal interrupts these
  two operations updating a counter, then the profiling information may be in an
  inconsistent state.
! .IP "\fB\-fprofile\-filter\-files=\fR\fIregex\fR" 4
  .IX Item "-fprofile-filter-files=regex"
  Instrument only functions from files whose name matches
! any of the regular expressions (separated by semi-colons).
  .Sp
  For example, \fB\-fprofile\-filter\-files=main\e.c;module.*\e.c\fR will instrument
! only \fImain.c\fR and all C files starting with 'module'.
! .IP "\fB\-fprofile\-exclude\-files=\fR\fIregex\fR" 4
  .IX Item "-fprofile-exclude-files=regex"
  Instrument only functions from files whose name does not match
! any of the regular expressions (separated by semi-colons).
  .Sp
  For example, \fB\-fprofile\-exclude\-files=/usr/.*\fR will prevent instrumentation
  of all files that are located in the \fI/usr/\fR folder.
! .IP "\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel-runs\fR|\fBserial\fR]" 4
  .IX Item "-fprofile-reproducible=[multithreaded|parallel-runs|serial]"
  Control level of reproducibility of profile gathered by
  \&\f(CW\*(C`\-fprofile\-generate\*(C'\fR.  This makes it possible to rebuild program
--- 16347,16367 ----
  32\-bit atomic operations for each counter update.  If a signal interrupts these
  two operations updating a counter, then the profiling information may be in an
  inconsistent state.
! .IP \fB\-fprofile\-filter\-files=\fR\fIregex\fR 4
  .IX Item "-fprofile-filter-files=regex"
  Instrument only functions from files whose name matches
! any of the regular expressions (separated by semi\-colons).
  .Sp
  For example, \fB\-fprofile\-filter\-files=main\e.c;module.*\e.c\fR will instrument
! only \fImain.c\fR and all C files starting with \*(Aqmodule\*(Aq.
! .IP \fB\-fprofile\-exclude\-files=\fR\fIregex\fR 4
  .IX Item "-fprofile-exclude-files=regex"
  Instrument only functions from files whose name does not match
! any of the regular expressions (separated by semi\-colons).
  .Sp
  For example, \fB\-fprofile\-exclude\-files=/usr/.*\fR will prevent instrumentation
  of all files that are located in the \fI/usr/\fR folder.
! .IP \fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] 4
  .IX Item "-fprofile-reproducible=[multithreaded|parallel-runs|serial]"
  Control level of reproducibility of profile gathered by
  \&\f(CW\*(C`\-fprofile\-generate\*(C'\fR.  This makes it possible to rebuild program
*************** packages.
*** 16436,16450 ****
  With \fB\-fprofile\-reproducible=serial\fR the profile gathered by
  \&\fB\-fprofile\-generate\fR is reproducible provided the trained program
  behaves the same at each invocation of the train run, it is not
! multi-threaded and profile data streaming is always done in the same
  order.  Note that profile streaming happens at the end of program run but
  also before \f(CW\*(C`fork\*(C'\fR function is invoked.
  .Sp
  Note that it is quite common that execution counts of some part of
  programs depends, for example, on length of temporary file names or
! memory space randomization (that may affect hash-table collision rate).
! Such non-reproducible part of programs may be annotated by
! \&\f(CW\*(C`no_instrument_function\*(C'\fR function attribute. \fBgcov-dump\fR with
  \&\fB\-l\fR can be used to dump gathered data and verify that they are
  indeed reproducible.
  .Sp
--- 16371,16385 ----
  With \fB\-fprofile\-reproducible=serial\fR the profile gathered by
  \&\fB\-fprofile\-generate\fR is reproducible provided the trained program
  behaves the same at each invocation of the train run, it is not
! multi\-threaded and profile data streaming is always done in the same
  order.  Note that profile streaming happens at the end of program run but
  also before \f(CW\*(C`fork\*(C'\fR function is invoked.
  .Sp
  Note that it is quite common that execution counts of some part of
  programs depends, for example, on length of temporary file names or
! memory space randomization (that may affect hash\-table collision rate).
! Such non\-reproducible part of programs may be annotated by
! \&\f(CW\*(C`no_instrument_function\*(C'\fR function attribute. \fBgcov\-dump\fR with
  \&\fB\-l\fR can be used to dump gathered data and verify that they are
  indeed reproducible.
  .Sp
*************** gcda files.  This setting makes it possi
*** 16454,16468 ****
  instrumented program in parallel (such as with \f(CW\*(C`make \-j\*(C'\fR). This
  reduces quality of gathered data, in particular of indirect call
  profiling.
! .IP "\fB\-fsanitize=address\fR" 4
  .IX Item "-fsanitize=address"
  Enable AddressSanitizer, a fast memory error detector.
  Memory access instructions are instrumented to detect
! out-of-bounds and use-after-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> for
! more details.  The run-time behavior can be influenced using the
! \&\fB\s-1ASAN_OPTIONS\s0\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
--- 16389,16403 ----
  instrumented program in parallel (such as with \f(CW\*(C`make \-j\*(C'\fR). This
  reduces quality of gathered data, in particular of indirect call
  profiling.
! .IP \fB\-fsanitize=address\fR 4
  .IX Item "-fsanitize=address"
  Enable AddressSanitizer, a fast memory error detector.
  Memory access instructions are instrumented to detect
! out\-of\-bounds and use\-after\-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> for
! more details.  The run\-time behavior can be influenced using the
! \&\fBASAN_OPTIONS\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
*************** most function inlining), \fB\-fno\-optim
*** 16478,16508 ****
  optimizing sibling and tail recursive calls; this option is implicit for
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR), or \fB\-fno\-ipa\-icf\fR (which
  disables Identical Code Folding for functions).  Since multiple runs of the
! program may yield backtraces with different addresses due to \s-1ASLR\s0 (Address
! Space Layout Randomization), it may be desirable to turn \s-1ASLR\s0 off.  On Linux,
! this can be achieved with \fBsetarch `uname \-m` \-R ./prog\fR.
! .IP "\fB\-fsanitize=kernel\-address\fR" 4
  .IX Item "-fsanitize=kernel-address"
  Enable AddressSanitizer for Linux kernel.
  See <\fBhttps://github.com/google/kernel\-sanitizers\fR> for more details.
! .IP "\fB\-fsanitize=hwaddress\fR" 4
  .IX Item "-fsanitize=hwaddress"
! Enable Hardware-assisted AddressSanitizer, which uses a hardware ability to
  ignore the top byte of a pointer to allow the detection of memory errors with
  a low memory overhead.
! Memory access instructions are instrumented to detect out-of-bounds and
! use-after-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See
  <\fBhttps://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html\fR>
! for more details.  The run-time behavior can be influenced using the
! \&\fB\s-1HWASAN_OPTIONS\s0\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
  \&\fB\-fsanitize=address\fR, and is currently only available on AArch64.
! .IP "\fB\-fsanitize=kernel\-hwaddress\fR" 4
  .IX Item "-fsanitize=kernel-hwaddress"
! Enable Hardware-assisted AddressSanitizer for compilation of the Linux kernel.
  Similar to \fB\-fsanitize=kernel\-address\fR but using an alternate
  instrumentation method, and similar to \fB\-fsanitize=hwaddress\fR but with
  instrumentation differences necessary for compiling the Linux kernel.
--- 16413,16443 ----
  optimizing sibling and tail recursive calls; this option is implicit for
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR), or \fB\-fno\-ipa\-icf\fR (which
  disables Identical Code Folding for functions).  Since multiple runs of the
! program may yield backtraces with different addresses due to ASLR (Address
! Space Layout Randomization), it may be desirable to turn ASLR off.  On Linux,
! this can be achieved with \fBsetarch \`uname \-m\` \-R ./prog\fR.
! .IP \fB\-fsanitize=kernel\-address\fR 4
  .IX Item "-fsanitize=kernel-address"
  Enable AddressSanitizer for Linux kernel.
  See <\fBhttps://github.com/google/kernel\-sanitizers\fR> for more details.
! .IP \fB\-fsanitize=hwaddress\fR 4
  .IX Item "-fsanitize=hwaddress"
! Enable Hardware\-assisted AddressSanitizer, which uses a hardware ability to
  ignore the top byte of a pointer to allow the detection of memory errors with
  a low memory overhead.
! Memory access instructions are instrumented to detect out\-of\-bounds and
! use\-after\-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See
  <\fBhttps://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html\fR>
! for more details.  The run\-time behavior can be influenced using the
! \&\fBHWASAN_OPTIONS\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
  \&\fB\-fsanitize=address\fR, and is currently only available on AArch64.
! .IP \fB\-fsanitize=kernel\-hwaddress\fR 4
  .IX Item "-fsanitize=kernel-hwaddress"
! Enable Hardware\-assisted AddressSanitizer for compilation of the Linux kernel.
  Similar to \fB\-fsanitize=kernel\-address\fR but using an alternate
  instrumentation method, and similar to \fB\-fsanitize=hwaddress\fR but with
  instrumentation differences necessary for compiling the Linux kernel.
*************** account for the stack pointer having a d
*** 16511,16521 ****
  .Sp
  \&\fINote:\fR This option has different defaults to the \fB\-fsanitize=hwaddress\fR.
  Instrumenting the stack and alloca calls are not on by default but are still
! possible by specifying the command-line options
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR and
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR respectively. Using a random frame
  tag is not implemented for kernel instrumentation.
! .IP "\fB\-fsanitize=pointer\-compare\fR" 4
  .IX Item "-fsanitize=pointer-compare"
  Instrument comparison operation (<, <=, >, >=) with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
--- 16446,16456 ----
  .Sp
  \&\fINote:\fR This option has different defaults to the \fB\-fsanitize=hwaddress\fR.
  Instrumenting the stack and alloca calls are not on by default but are still
! possible by specifying the command\-line options
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR and
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR respectively. Using a random frame
  tag is not implemented for kernel instrumentation.
! .IP \fB\-fsanitize=pointer\-compare\fR 4
  .IX Item "-fsanitize=pointer-compare"
  Instrument comparison operation (<, <=, >, >=) with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
*************** The option must be combined with either
*** 16523,16531 ****
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fB\s-1ASAN_OPTIONS\s0\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non-null.
! .IP "\fB\-fsanitize=pointer\-subtract\fR" 4
  .IX Item "-fsanitize=pointer-subtract"
  Instrument subtraction with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
--- 16458,16466 ----
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fBASAN_OPTIONS\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non\-null.
! .IP \fB\-fsanitize=pointer\-subtract\fR 4
  .IX Item "-fsanitize=pointer-subtract"
  Instrument subtraction with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
*************** The option must be combined with either
*** 16533,16555 ****
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fB\s-1ASAN_OPTIONS\s0\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non-null.
! .IP "\fB\-fsanitize=shadow\-call\-stack\fR" 4
  .IX Item "-fsanitize=shadow-call-stack"
  Enable ShadowCallStack, a security enhancement mechanism used to protect
  programs against return address overwrites (e.g. stack buffer overflows.)
! It works by saving a function's return address to a separately allocated
  shadow call stack in the function prologue and restoring the return address
  from the shadow call stack in the function epilogue.  Instrumentation only
  occurs in functions that need to save the return address to the stack.
  .Sp
  Currently it only supports the aarch64 platform.  It is specifically
! designed for linux kernels that enable the \s-1CONFIG_SHADOW_CALL_STACK\s0 option.
  For the user space programs, runtime support is not currently provided
  in libc and libgcc.  Users who want to use this feature in user space need
  to provide their own support for the runtime.  It should be noted that
! this may cause the \s-1ABI\s0 rules to be broken.
  .Sp
  On aarch64, the instrumentation makes use of the platform register \f(CW\*(C`x18\*(C'\fR.
  This generally means that any code that may run on the same thread as code
--- 16468,16490 ----
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fBASAN_OPTIONS\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non\-null.
! .IP \fB\-fsanitize=shadow\-call\-stack\fR 4
  .IX Item "-fsanitize=shadow-call-stack"
  Enable ShadowCallStack, a security enhancement mechanism used to protect
  programs against return address overwrites (e.g. stack buffer overflows.)
! It works by saving a function\*(Aqs return address to a separately allocated
  shadow call stack in the function prologue and restoring the return address
  from the shadow call stack in the function epilogue.  Instrumentation only
  occurs in functions that need to save the return address to the stack.
  .Sp
  Currently it only supports the aarch64 platform.  It is specifically
! designed for linux kernels that enable the CONFIG_SHADOW_CALL_STACK option.
  For the user space programs, runtime support is not currently provided
  in libc and libgcc.  Users who want to use this feature in user space need
  to provide their own support for the runtime.  It should be noted that
! this may cause the ABI rules to be broken.
  .Sp
  On aarch64, the instrumentation makes use of the platform register \f(CW\*(C`x18\*(C'\fR.
  This generally means that any code that may run on the same thread as code
*************** to turn off exceptions.
*** 16564,16575 ****
  .Sp
  See <\fBhttps://clang.llvm.org/docs/ShadowCallStack.html\fR> for more
  details.
! .IP "\fB\-fsanitize=thread\fR" 4
  .IX Item "-fsanitize=thread"
  Enable ThreadSanitizer, a fast data race detector.
  Memory access instructions are instrumented to detect
  data race bugs.  See <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> for more
! details. The run-time behavior can be influenced using the \fB\s-1TSAN_OPTIONS\s0\fR
  environment variable; see
  <\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> for a list of
  supported options.
--- 16499,16510 ----
  .Sp
  See <\fBhttps://clang.llvm.org/docs/ShadowCallStack.html\fR> for more
  details.
! .IP \fB\-fsanitize=thread\fR 4
  .IX Item "-fsanitize=thread"
  Enable ThreadSanitizer, a fast data race detector.
  Memory access instructions are instrumented to detect
  data race bugs.  See <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> for more
! details. The run\-time behavior can be influenced using the \fBTSAN_OPTIONS\fR
  environment variable; see
  <\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> for a list of
  supported options.
*************** The option cannot be combined with \fB\-
*** 16577,16645 ****
  \&\fB\-fsanitize=leak\fR.
  .Sp
  Note that sanitized atomic builtins cannot throw exceptions when
! operating on invalid memory addresses with non-call exceptions
  (\fB\-fnon\-call\-exceptions\fR).
! .IP "\fB\-fsanitize=leak\fR" 4
  .IX Item "-fsanitize=leak"
  Enable LeakSanitizer, a memory leak detector.
  This option only matters for linking of executables.
  The executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
  and other allocator functions.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> for more
! details.  The run-time behavior can be influenced using the
! \&\fB\s-1LSAN_OPTIONS\s0\fR environment variable.
  The option cannot be combined with \fB\-fsanitize=thread\fR.
! .IP "\fB\-fsanitize=undefined\fR" 4
  .IX Item "-fsanitize=undefined"
  Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
  Various computations are instrumented to detect undefined behavior
! at runtime.  See <\fBhttps://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html\fR> for more details.   The run-time behavior can be influenced using the
! \&\fB\s-1UBSAN_OPTIONS\s0\fR environment variable.  Current suboptions are:
  .RS 4
! .IP "\fB\-fsanitize=shift\fR" 4
  .IX Item "-fsanitize=shift"
  This option enables checking that the result of a shift operation is
  not undefined.  Note that what exactly is considered undefined differs
! slightly between C and \*(C+, as well as between \s-1ISO C90\s0 and C99, etc.
  This option has two suboptions, \fB\-fsanitize=shift\-base\fR and
  \&\fB\-fsanitize=shift\-exponent\fR.
! .IP "\fB\-fsanitize=shift\-exponent\fR" 4
  .IX Item "-fsanitize=shift-exponent"
  This option enables checking that the second argument of a shift operation
  is not negative and is smaller than the precision of the promoted first
  argument.
! .IP "\fB\-fsanitize=shift\-base\fR" 4
  .IX Item "-fsanitize=shift-base"
  If the second argument of a shift operation is within range, check that the
  result of a shift operation is not undefined.  Note that what exactly is
! considered undefined differs slightly between C and \*(C+, as well as between
! \&\s-1ISO C90\s0 and C99, etc.
! .IP "\fB\-fsanitize=integer\-divide\-by\-zero\fR" 4
  .IX Item "-fsanitize=integer-divide-by-zero"
  Detect integer division by zero.
! .IP "\fB\-fsanitize=unreachable\fR" 4
  .IX Item "-fsanitize=unreachable"
  With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
  call into a diagnostics message call instead.  When reaching the
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
! .IP "\fB\-fsanitize=vla\-bound\fR" 4
  .IX Item "-fsanitize=vla-bound"
  This option instructs the compiler to check that the size of a variable
  length array is positive.
! .IP "\fB\-fsanitize=null\fR" 4
  .IX Item "-fsanitize=null"
  This option enables pointer checking.  Particularly, the application
  built with this option turned on will issue an error message when it
! tries to dereference a \s-1NULL\s0 pointer, or if a reference (possibly an
! rvalue reference) is bound to a \s-1NULL\s0 pointer, or if a method is invoked
! on an object pointed by a \s-1NULL\s0 pointer.
! .IP "\fB\-fsanitize=return\fR" 4
  .IX Item "-fsanitize=return"
  This option enables return statement checking.  Programs
  built with this option turned on will issue an error message
! when the end of a non-void function is reached without actually
! returning a value.  This option works in \*(C+ only.
! .IP "\fB\-fsanitize=signed\-integer\-overflow\fR" 4
  .IX Item "-fsanitize=signed-integer-overflow"
  This option enables signed integer overflow checking.  We check that
  the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
--- 16512,16580 ----
  \&\fB\-fsanitize=leak\fR.
  .Sp
  Note that sanitized atomic builtins cannot throw exceptions when
! operating on invalid memory addresses with non\-call exceptions
  (\fB\-fnon\-call\-exceptions\fR).
! .IP \fB\-fsanitize=leak\fR 4
  .IX Item "-fsanitize=leak"
  Enable LeakSanitizer, a memory leak detector.
  This option only matters for linking of executables.
  The executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
  and other allocator functions.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> for more
! details.  The run\-time behavior can be influenced using the
! \&\fBLSAN_OPTIONS\fR environment variable.
  The option cannot be combined with \fB\-fsanitize=thread\fR.
! .IP \fB\-fsanitize=undefined\fR 4
  .IX Item "-fsanitize=undefined"
  Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
  Various computations are instrumented to detect undefined behavior
! at runtime.  See <\fBhttps://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html\fR> for more details.   The run\-time behavior can be influenced using the
! \&\fBUBSAN_OPTIONS\fR environment variable.  Current suboptions are:
  .RS 4
! .IP \fB\-fsanitize=shift\fR 4
  .IX Item "-fsanitize=shift"
  This option enables checking that the result of a shift operation is
  not undefined.  Note that what exactly is considered undefined differs
! slightly between C and C++, as well as between ISO C90 and C99, etc.
  This option has two suboptions, \fB\-fsanitize=shift\-base\fR and
  \&\fB\-fsanitize=shift\-exponent\fR.
! .IP \fB\-fsanitize=shift\-exponent\fR 4
  .IX Item "-fsanitize=shift-exponent"
  This option enables checking that the second argument of a shift operation
  is not negative and is smaller than the precision of the promoted first
  argument.
! .IP \fB\-fsanitize=shift\-base\fR 4
  .IX Item "-fsanitize=shift-base"
  If the second argument of a shift operation is within range, check that the
  result of a shift operation is not undefined.  Note that what exactly is
! considered undefined differs slightly between C and C++, as well as between
! ISO C90 and C99, etc.
! .IP \fB\-fsanitize=integer\-divide\-by\-zero\fR 4
  .IX Item "-fsanitize=integer-divide-by-zero"
  Detect integer division by zero.
! .IP \fB\-fsanitize=unreachable\fR 4
  .IX Item "-fsanitize=unreachable"
  With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
  call into a diagnostics message call instead.  When reaching the
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
! .IP \fB\-fsanitize=vla\-bound\fR 4
  .IX Item "-fsanitize=vla-bound"
  This option instructs the compiler to check that the size of a variable
  length array is positive.
! .IP \fB\-fsanitize=null\fR 4
  .IX Item "-fsanitize=null"
  This option enables pointer checking.  Particularly, the application
  built with this option turned on will issue an error message when it
! tries to dereference a NULL pointer, or if a reference (possibly an
! rvalue reference) is bound to a NULL pointer, or if a method is invoked
! on an object pointed by a NULL pointer.
! .IP \fB\-fsanitize=return\fR 4
  .IX Item "-fsanitize=return"
  This option enables return statement checking.  Programs
  built with this option turned on will issue an error message
! when the end of a non\-void function is reached without actually
! returning a value.  This option works in C++ only.
! .IP \fB\-fsanitize=signed\-integer\-overflow\fR 4
  .IX Item "-fsanitize=signed-integer-overflow"
  This option enables signed integer overflow checking.  We check that
  the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
*************** overflow:
*** 16652,16726 ****
  \&        signed char a = SCHAR_MAX;
  \&        a++;
  .Ve
! .IP "\fB\-fsanitize=bounds\fR" 4
  .IX Item "-fsanitize=bounds"
  This option enables instrumentation of array bounds.  Various out of bounds
! accesses are detected.  Flexible array members, flexible array member-like
  arrays, and initializers of variables with static storage are not
! instrumented, with the exception of flexible array member-like arrays
  for which \f(CW\*(C`\-fstrict\-flex\-arrays\*(C'\fR or \f(CW\*(C`\-fstrict\-flex\-arrays=\*(C'\fR
! options or \f(CW\*(C`strict_flex_array\*(C'\fR attributes say they shouldn't be treated
! like flexible array member-like arrays.
! .IP "\fB\-fsanitize=bounds\-strict\fR" 4
  .IX Item "-fsanitize=bounds-strict"
  This option enables strict instrumentation of array bounds.  Most out of bounds
! accesses are detected, including flexible array member-like arrays.
  Initializers of variables with static storage are not instrumented.
! .IP "\fB\-fsanitize=alignment\fR" 4
  .IX Item "-fsanitize=alignment"
  This option enables checking of alignment of pointers when they are
  dereferenced, or when a reference is bound to insufficiently aligned target,
  or when a method or constructor is invoked on insufficiently aligned object.
! .IP "\fB\-fsanitize=object\-size\fR" 4
  .IX Item "-fsanitize=object-size"
  This option enables instrumentation of memory references using the
  \&\f(CW\*(C`_\|_builtin_dynamic_object_size\*(C'\fR function.  Various out of bounds
  pointer accesses are detected.
! .IP "\fB\-fsanitize=float\-divide\-by\-zero\fR" 4
  .IX Item "-fsanitize=float-divide-by-zero"
! Detect floating-point division by zero.  Unlike other similar options,
  \&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
! \&\fB\-fsanitize=undefined\fR, since floating-point division by zero can
  be a legitimate way of obtaining infinities and NaNs.
! .IP "\fB\-fsanitize=float\-cast\-overflow\fR" 4
  .IX Item "-fsanitize=float-cast-overflow"
! This option enables floating-point type to integer conversion checking.
  We check that the result of the conversion does not overflow.
  Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
  not enabled by \fB\-fsanitize=undefined\fR.
  This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
! .IP "\fB\-fsanitize=nonnull\-attribute\fR" 4
  .IX Item "-fsanitize=nonnull-attribute"
  This option enables instrumentation of calls, checking whether null values
! are not passed to arguments marked as requiring a non-null value by the
  \&\f(CW\*(C`nonnull\*(C'\fR function attribute.
! .IP "\fB\-fsanitize=returns\-nonnull\-attribute\fR" 4
  .IX Item "-fsanitize=returns-nonnull-attribute"
  This option enables instrumentation of return statements in functions
  marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
  of null values from such functions.
! .IP "\fB\-fsanitize=bool\fR" 4
  .IX Item "-fsanitize=bool"
  This option enables instrumentation of loads from bool.  If a value other
! than 0/1 is loaded, a run-time error is issued.
! .IP "\fB\-fsanitize=enum\fR" 4
  .IX Item "-fsanitize=enum"
  This option enables instrumentation of loads from an enum type.  If
  a value outside the range of values for the enum type is loaded,
! a run-time error is issued.
! .IP "\fB\-fsanitize=vptr\fR" 4
  .IX Item "-fsanitize=vptr"
! This option enables instrumentation of \*(C+ member function calls, member
  accesses and some conversions between pointers to base and derived classes,
  to verify the referenced object has the correct dynamic type.
! .IP "\fB\-fsanitize=pointer\-overflow\fR" 4
  .IX Item "-fsanitize=pointer-overflow"
  This option enables instrumentation of pointer arithmetics.  If the pointer
! arithmetics overflows, a run-time error is issued.
! .IP "\fB\-fsanitize=builtin\fR" 4
  .IX Item "-fsanitize=builtin"
  This option enables instrumentation of arguments to selected builtin
! functions.  If an invalid value is passed to such arguments, a run-time
  error is issued.  E.g. passing 0 as the argument to \f(CW\*(C`_\|_builtin_ctz\*(C'\fR
  or \f(CW\*(C`_\|_builtin_clz\*(C'\fR invokes undefined behavior and is diagnosed
  by this option.
--- 16587,16661 ----
  \&        signed char a = SCHAR_MAX;
  \&        a++;
  .Ve
! .IP \fB\-fsanitize=bounds\fR 4
  .IX Item "-fsanitize=bounds"
  This option enables instrumentation of array bounds.  Various out of bounds
! accesses are detected.  Flexible array members, flexible array member\-like
  arrays, and initializers of variables with static storage are not
! instrumented, with the exception of flexible array member\-like arrays
  for which \f(CW\*(C`\-fstrict\-flex\-arrays\*(C'\fR or \f(CW\*(C`\-fstrict\-flex\-arrays=\*(C'\fR
! options or \f(CW\*(C`strict_flex_array\*(C'\fR attributes say they shouldn\*(Aqt be treated
! like flexible array member\-like arrays.
! .IP \fB\-fsanitize=bounds\-strict\fR 4
  .IX Item "-fsanitize=bounds-strict"
  This option enables strict instrumentation of array bounds.  Most out of bounds
! accesses are detected, including flexible array member\-like arrays.
  Initializers of variables with static storage are not instrumented.
! .IP \fB\-fsanitize=alignment\fR 4
  .IX Item "-fsanitize=alignment"
  This option enables checking of alignment of pointers when they are
  dereferenced, or when a reference is bound to insufficiently aligned target,
  or when a method or constructor is invoked on insufficiently aligned object.
! .IP \fB\-fsanitize=object\-size\fR 4
  .IX Item "-fsanitize=object-size"
  This option enables instrumentation of memory references using the
  \&\f(CW\*(C`_\|_builtin_dynamic_object_size\*(C'\fR function.  Various out of bounds
  pointer accesses are detected.
! .IP \fB\-fsanitize=float\-divide\-by\-zero\fR 4
  .IX Item "-fsanitize=float-divide-by-zero"
! Detect floating\-point division by zero.  Unlike other similar options,
  \&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
! \&\fB\-fsanitize=undefined\fR, since floating\-point division by zero can
  be a legitimate way of obtaining infinities and NaNs.
! .IP \fB\-fsanitize=float\-cast\-overflow\fR 4
  .IX Item "-fsanitize=float-cast-overflow"
! This option enables floating\-point type to integer conversion checking.
  We check that the result of the conversion does not overflow.
  Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
  not enabled by \fB\-fsanitize=undefined\fR.
  This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
! .IP \fB\-fsanitize=nonnull\-attribute\fR 4
  .IX Item "-fsanitize=nonnull-attribute"
  This option enables instrumentation of calls, checking whether null values
! are not passed to arguments marked as requiring a non\-null value by the
  \&\f(CW\*(C`nonnull\*(C'\fR function attribute.
! .IP \fB\-fsanitize=returns\-nonnull\-attribute\fR 4
  .IX Item "-fsanitize=returns-nonnull-attribute"
  This option enables instrumentation of return statements in functions
  marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
  of null values from such functions.
! .IP \fB\-fsanitize=bool\fR 4
  .IX Item "-fsanitize=bool"
  This option enables instrumentation of loads from bool.  If a value other
! than 0/1 is loaded, a run\-time error is issued.
! .IP \fB\-fsanitize=enum\fR 4
  .IX Item "-fsanitize=enum"
  This option enables instrumentation of loads from an enum type.  If
  a value outside the range of values for the enum type is loaded,
! a run\-time error is issued.
! .IP \fB\-fsanitize=vptr\fR 4
  .IX Item "-fsanitize=vptr"
! This option enables instrumentation of C++ member function calls, member
  accesses and some conversions between pointers to base and derived classes,
  to verify the referenced object has the correct dynamic type.
! .IP \fB\-fsanitize=pointer\-overflow\fR 4
  .IX Item "-fsanitize=pointer-overflow"
  This option enables instrumentation of pointer arithmetics.  If the pointer
! arithmetics overflows, a run\-time error is issued.
! .IP \fB\-fsanitize=builtin\fR 4
  .IX Item "-fsanitize=builtin"
  This option enables instrumentation of arguments to selected builtin
! functions.  If an invalid value is passed to such arguments, a run\-time
  error is issued.  E.g. passing 0 as the argument to \f(CW\*(C`_\|_builtin_ctz\*(C'\fR
  or \f(CW\*(C`_\|_builtin_clz\*(C'\fR invokes undefined behavior and is diagnosed
  by this option.
*************** While \fB\-ftrapv\fR causes traps for si
*** 16736,16759 ****
  \&\fB\-fsanitize=undefined\fR gives a diagnostic message.
  This currently works only for the C family of languages.
  .RE
! .IP "\fB\-fno\-sanitize=all\fR" 4
  .IX Item "-fno-sanitize=all"
  This option disables all previously enabled sanitizers.
  \&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
  together.
! .IP "\fB\-fasan\-shadow\-offset=\fR\fInumber\fR" 4
  .IX Item "-fasan-shadow-offset=number"
! This option forces \s-1GCC\s0 to use custom shadow offset in AddressSanitizer checks.
  It is useful for experimenting with different shadow memory layouts in
  Kernel AddressSanitizer.
! .IP "\fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR" 4
  .IX Item "-fsanitize-sections=s1,s2,..."
! Sanitize global variables in selected user-defined sections.  \fIsi\fR may
  contain wildcards.
! .IP "\fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR]" 4
  .IX Item "-fsanitize-recover[=opts]"
  \&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
! mentioned in comma-separated list of \fIopts\fR.  Enabling this option
  for a sanitizer component causes it to attempt to continue
  running the program as if no error happened.  This means multiple
  runtime errors can be reported in a single program run, and the exit
--- 16671,16694 ----
  \&\fB\-fsanitize=undefined\fR gives a diagnostic message.
  This currently works only for the C family of languages.
  .RE
! .IP \fB\-fno\-sanitize=all\fR 4
  .IX Item "-fno-sanitize=all"
  This option disables all previously enabled sanitizers.
  \&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
  together.
! .IP \fB\-fasan\-shadow\-offset=\fR\fInumber\fR 4
  .IX Item "-fasan-shadow-offset=number"
! This option forces GCC to use custom shadow offset in AddressSanitizer checks.
  It is useful for experimenting with different shadow memory layouts in
  Kernel AddressSanitizer.
! .IP \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR 4
  .IX Item "-fsanitize-sections=s1,s2,..."
! Sanitize global variables in selected user\-defined sections.  \fIsi\fR may
  contain wildcards.
! .IP \fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR] 4
  .IX Item "-fsanitize-recover[=opts]"
  \&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
! mentioned in comma\-separated list of \fIopts\fR.  Enabling this option
  for a sanitizer component causes it to attempt to continue
  running the program as if no error happened.  This means multiple
  runtime errors can be reported in a single program run, and the exit
*************** code of the program may indicate success
*** 16761,16767 ****
  have been reported.  The \fB\-fno\-sanitize\-recover=\fR option
  can be used to alter
  this behavior: only the first detected error is reported
! and program then exits with a non-zero exit code.
  .Sp
  Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
  except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
--- 16696,16702 ----
  have been reported.  The \fB\-fno\-sanitize\-recover=\fR option
  can be used to alter
  this behavior: only the first detected error is reported
! and program then exits with a non\-zero exit code.
  .Sp
  Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
  except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
*************** equivalent to specifying an \fIopts\fR l
*** 16787,16800 ****
  .Vb 1
  \&        undefined,float\-cast\-overflow,float\-divide\-by\-zero,bounds\-strict
  .Ve
! .IP "\fB\-fsanitize\-address\-use\-after\-scope\fR" 4
  .IX Item "-fsanitize-address-use-after-scope"
! Enable sanitization of local variables to detect use-after-scope bugs.
  The option sets \fB\-fstack\-reuse\fR to \fBnone\fR.
! .IP "\fB\-fsanitize\-trap\fR[\fB=\fR\fIopts\fR]" 4
  .IX Item "-fsanitize-trap[=opts]"
  The \fB\-fsanitize\-trap=\fR option instructs the compiler to
! report for sanitizers mentioned in comma-separated list of \fIopts\fR
  undefined behavior using \f(CW\*(C`_\|_builtin_trap\*(C'\fR rather than a \f(CW\*(C`libubsan\*(C'\fR
  library routine.  If this option is enabled for certain sanitizer,
  it takes precedence over the \fB\-fsanitizer\-recover=\fR for that
--- 16722,16735 ----
  .Vb 1
  \&        undefined,float\-cast\-overflow,float\-divide\-by\-zero,bounds\-strict
  .Ve
! .IP \fB\-fsanitize\-address\-use\-after\-scope\fR 4
  .IX Item "-fsanitize-address-use-after-scope"
! Enable sanitization of local variables to detect use\-after\-scope bugs.
  The option sets \fB\-fstack\-reuse\fR to \fBnone\fR.
! .IP \fB\-fsanitize\-trap\fR[\fB=\fR\fIopts\fR] 4
  .IX Item "-fsanitize-trap[=opts]"
  The \fB\-fsanitize\-trap=\fR option instructs the compiler to
! report for sanitizers mentioned in comma\-separated list of \fIopts\fR
  undefined behavior using \f(CW\*(C`_\|_builtin_trap\*(C'\fR rather than a \f(CW\*(C`libubsan\*(C'\fR
  library routine.  If this option is enabled for certain sanitizer,
  it takes precedence over the \fB\-fsanitizer\-recover=\fR for that
*************** If \f(CW\*(C`\-fsanitize\-trap=undefined
*** 16816,16830 ****
  and \f(CW\*(C`\-fsanitize=vptr\*(C'\fR is enabled on the command line, the
  instrumentation is silently ignored as the instrumentation always needs
  \&\f(CW\*(C`libubsan\*(C'\fR support, \fB\-fsanitize\-trap=vptr\fR is not allowed.
! .IP "\fB\-fsanitize\-undefined\-trap\-on\-error\fR" 4
  .IX Item "-fsanitize-undefined-trap-on-error"
  The \fB\-fsanitize\-undefined\-trap\-on\-error\fR option is deprecated
  equivalent of \fB\-fsanitize\-trap=all\fR.
! .IP "\fB\-fsanitize\-coverage=trace\-pc\fR" 4
  .IX Item "-fsanitize-coverage=trace-pc"
! Enable coverage-guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_pc\*(C'\fR into every basic block.
! .IP "\fB\-fsanitize\-coverage=trace\-cmp\fR" 4
  .IX Item "-fsanitize-coverage=trace-cmp"
  Enable dataflow guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_cmp1\*(C'\fR,
--- 16751,16765 ----
  and \f(CW\*(C`\-fsanitize=vptr\*(C'\fR is enabled on the command line, the
  instrumentation is silently ignored as the instrumentation always needs
  \&\f(CW\*(C`libubsan\*(C'\fR support, \fB\-fsanitize\-trap=vptr\fR is not allowed.
! .IP \fB\-fsanitize\-undefined\-trap\-on\-error\fR 4
  .IX Item "-fsanitize-undefined-trap-on-error"
  The \fB\-fsanitize\-undefined\-trap\-on\-error\fR option is deprecated
  equivalent of \fB\-fsanitize\-trap=all\fR.
! .IP \fB\-fsanitize\-coverage=trace\-pc\fR 4
  .IX Item "-fsanitize-coverage=trace-pc"
! Enable coverage\-guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_pc\*(C'\fR into every basic block.
! .IP \fB\-fsanitize\-coverage=trace\-cmp\fR 4
  .IX Item "-fsanitize-coverage=trace-cmp"
  Enable dataflow guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_cmp1\*(C'\fR,
*************** variable or \f(CW\*(C`_\|_sanitizer_cov_
*** 16837,16854 ****
  operand constant, \f(CW\*(C`_\|_sanitizer_cov_trace_cmpf\*(C'\fR or
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmpd\*(C'\fR for float or double comparisons and
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_switch\*(C'\fR for switch statements.
! .IP "\fB\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR]" 4
  .IX Item "-fcf-protection=[full|branch|return|none|check]"
! Enable code instrumentation of control-flow transfers to increase
! program security by checking that target addresses of control-flow
  transfer instructions (such as indirect function call, function return,
  indirect jump) are valid.  This prevents diverting the flow of control
  to an unexpected target.  This is intended to protect against such
! threats as Return-oriented Programming (\s-1ROP\s0), and similarly
! call/jmp\-oriented programming (\s-1COP/JOP\s0).
  .Sp
  The value \f(CW\*(C`branch\*(C'\fR tells the compiler to implement checking of
! validity of control-flow transfer at the point of indirect branch
  instructions, i.e. call/jmp instructions.  The value \f(CW\*(C`return\*(C'\fR
  implements checking of validity at the point of returning from a
  function.  The value \f(CW\*(C`full\*(C'\fR is an alias for specifying both
--- 16772,16789 ----
  operand constant, \f(CW\*(C`_\|_sanitizer_cov_trace_cmpf\*(C'\fR or
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmpd\*(C'\fR for float or double comparisons and
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_switch\*(C'\fR for switch statements.
! .IP \fB\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR] 4
  .IX Item "-fcf-protection=[full|branch|return|none|check]"
! Enable code instrumentation of control\-flow transfers to increase
! program security by checking that target addresses of control\-flow
  transfer instructions (such as indirect function call, function return,
  indirect jump) are valid.  This prevents diverting the flow of control
  to an unexpected target.  This is intended to protect against such
! threats as Return\-oriented Programming (ROP), and similarly
! call/jmp\-oriented programming (COP/JOP).
  .Sp
  The value \f(CW\*(C`branch\*(C'\fR tells the compiler to implement checking of
! validity of control\-flow transfer at the point of indirect branch
  instructions, i.e. call/jmp instructions.  The value \f(CW\*(C`return\*(C'\fR
  implements checking of validity at the point of returning from a
  function.  The value \f(CW\*(C`full\*(C'\fR is an alias for specifying both
*************** instrumentation.
*** 16858,16865 ****
  To override \fB\-fcf\-protection\fR, \fB\-fcf\-protection=none\fR
  needs to be added and then with \fB\-fcf\-protection=xxx\fR.
  .Sp
! The value \f(CW\*(C`check\*(C'\fR is used for the final link with link-time
! optimization (\s-1LTO\s0).  An error is issued if \s-1LTO\s0 object files are
  compiled with different \fB\-fcf\-protection\fR values.  The
  value \f(CW\*(C`check\*(C'\fR is ignored at the compile time.
  .Sp
--- 16793,16800 ----
  To override \fB\-fcf\-protection\fR, \fB\-fcf\-protection=none\fR
  needs to be added and then with \fB\-fcf\-protection=xxx\fR.
  .Sp
! The value \f(CW\*(C`check\*(C'\fR is used for the final link with link\-time
! optimization (LTO).  An error is issued if LTO object files are
  compiled with different \fB\-fcf\-protection\fR values.  The
  value \f(CW\*(C`check\*(C'\fR is ignored at the compile time.
  .Sp
*************** You can also use the \f(CW\*(C`nocf_chec
*** 16872,16880 ****
  which functions and calls should be skipped from instrumentation.
  .Sp
  Currently the x86 GNU/Linux target provides an implementation based
! on Intel Control-flow Enforcement Technology (\s-1CET\s0) which works for
  i686 processor or newer.
! .IP "\fB\-fharden\-compares\fR" 4
  .IX Item "-fharden-compares"
  For every logical test that survives gimple optimizations and is
  \&\fInot\fR the condition in a conditional branch (for example,
--- 16807,16815 ----
  which functions and calls should be skipped from instrumentation.
  .Sp
  Currently the x86 GNU/Linux target provides an implementation based
! on Intel Control\-flow Enforcement Technology (CET) which works for
  i686 processor or newer.
! .IP \fB\-fharden\-compares\fR 4
  .IX Item "-fharden-compares"
  For every logical test that survives gimple optimizations and is
  \&\fInot\fR the condition in a conditional branch (for example,
*************** variables), emit extra code to compute a
*** 16883,16896 ****
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the results do not
  match.  Use with \fB\-fharden\-conditional\-branches\fR to cover all
  conditionals.
! .IP "\fB\-fharden\-conditional\-branches\fR" 4
  .IX Item "-fharden-conditional-branches"
! For every non-vectorized conditional branch that survives gimple
  optimizations, emit extra code to compute and verify the reversed
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the result is
  unexpected.  Use with \fB\-fharden\-compares\fR to cover all
  conditionals.
! .IP "\fB\-fharden\-control\-flow\-redundancy\fR" 4
  .IX Item "-fharden-control-flow-redundancy"
  Emit extra code to set booleans when entering basic blocks, and to
  verify and trap, at function exits, when the booleans do not form an
--- 16818,16831 ----
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the results do not
  match.  Use with \fB\-fharden\-conditional\-branches\fR to cover all
  conditionals.
! .IP \fB\-fharden\-conditional\-branches\fR 4
  .IX Item "-fharden-conditional-branches"
! For every non\-vectorized conditional branch that survives gimple
  optimizations, emit extra code to compute and verify the reversed
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the result is
  unexpected.  Use with \fB\-fharden\-compares\fR to cover all
  conditionals.
! .IP \fB\-fharden\-control\-flow\-redundancy\fR 4
  .IX Item "-fharden-control-flow-redundancy"
  Emit extra code to set booleans when entering basic blocks, and to
  verify and trap, at function exits, when the booleans do not form an
*************** Verification takes place before returns,
*** 16901,16944 ****
  \&\fB\-fhardcfr\-check\-exceptions\fR, before returning calls with
  \&\fB\-fhardcfr\-check\-returning\-calls\fR, and before noreturn calls with
  \&\fB\-fhardcfr\-check\-noreturn\-calls\fR).  Tuning options
! \&\fB\-\-param hardcfr-max-blocks\fR and \fB\-\-param
! hardcfr-max-inline-blocks\fR are available.
  .Sp
  Tail call optimization takes place too late to affect control flow
  redundancy, but calls annotated as mandatory tail calls by language
! front-ends, and any calls marked early enough as potential tail calls
  would also have verification issued before the call, but these
  possibilities are merely theoretical, as these conditions can only be
  met when using custom compiler plugins.
! .IP "\fB\-fhardcfr\-skip\-leaf\fR" 4
  .IX Item "-fhardcfr-skip-leaf"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR in leaf functions.
! .IP "\fB\-fhardcfr\-check\-exceptions\fR" 4
  .IX Item "-fhardcfr-check-exceptions"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph at exception
  escape points, as if the function body was wrapped with a cleanup
  handler that performed the check and reraised.  This option is enabled
  by default; use \fB\-fno\-hardcfr\-check\-exceptions\fR to disable it.
! .IP "\fB\-fhardcfr\-check\-returning\-calls\fR" 4
  .IX Item "-fhardcfr-check-returning-calls"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before any
  function call immediately followed by a return of its result, if any, so
! as to not prevent tail-call optimization, whether or not it is
  ultimately optimized to a tail call.
  .Sp
  This option is enabled by default whenever sibling call optimizations
  are enabled (see \fB\-foptimize\-sibling\-calls\fR), but it can be
  enabled (or disabled, using its negated form) explicitly, regardless of
  the optimizations.
! .IP "\fB\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno-xthrow\fR|\fBnothrow\fR|\fBnever\fR]" 4
  .IX Item "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before
  \&\f(CW\*(C`noreturn\*(C'\fR calls, either all of them (\fBalways\fR), those that
! aren't expected to return control to the caller through an exception
! (\fBno-xthrow\fR, the default), those that may not return control to
  the caller through an exception either (\fBnothrow\fR), or none of
  them (\fBnever\fR).
  .Sp
--- 16836,16879 ----
  \&\fB\-fhardcfr\-check\-exceptions\fR, before returning calls with
  \&\fB\-fhardcfr\-check\-returning\-calls\fR, and before noreturn calls with
  \&\fB\-fhardcfr\-check\-noreturn\-calls\fR).  Tuning options
! \&\fB\-\-param hardcfr\-max\-blocks\fR and \fB\-\-param
! hardcfr\-max\-inline\-blocks\fR are available.
  .Sp
  Tail call optimization takes place too late to affect control flow
  redundancy, but calls annotated as mandatory tail calls by language
! front\-ends, and any calls marked early enough as potential tail calls
  would also have verification issued before the call, but these
  possibilities are merely theoretical, as these conditions can only be
  met when using custom compiler plugins.
! .IP \fB\-fhardcfr\-skip\-leaf\fR 4
  .IX Item "-fhardcfr-skip-leaf"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR in leaf functions.
! .IP \fB\-fhardcfr\-check\-exceptions\fR 4
  .IX Item "-fhardcfr-check-exceptions"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph at exception
  escape points, as if the function body was wrapped with a cleanup
  handler that performed the check and reraised.  This option is enabled
  by default; use \fB\-fno\-hardcfr\-check\-exceptions\fR to disable it.
! .IP \fB\-fhardcfr\-check\-returning\-calls\fR 4
  .IX Item "-fhardcfr-check-returning-calls"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before any
  function call immediately followed by a return of its result, if any, so
! as to not prevent tail\-call optimization, whether or not it is
  ultimately optimized to a tail call.
  .Sp
  This option is enabled by default whenever sibling call optimizations
  are enabled (see \fB\-foptimize\-sibling\-calls\fR), but it can be
  enabled (or disabled, using its negated form) explicitly, regardless of
  the optimizations.
! .IP \fB\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] 4
  .IX Item "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before
  \&\f(CW\*(C`noreturn\*(C'\fR calls, either all of them (\fBalways\fR), those that
! aren\*(Aqt expected to return control to the caller through an exception
! (\fBno\-xthrow\fR, the default), those that may not return control to
  the caller through an exception either (\fBnothrow\fR), or none of
  them (\fBnever\fR).
  .Sp
*************** the caller through an exception may caus
*** 16947,16953 ****
  than once, if the exception is caught in the caller, whether by a
  handler or a cleanup.  When \fB\-fhardcfr\-check\-exceptions\fR is also
  enabled, the compiler will avoid associating a \f(CW\*(C`noreturn\*(C'\fR call with
! the implicitly-added cleanup handler, since it would be redundant with
  the check performed before the call, but other handlers or cleanups in
  the function, if activated, will modify the recorded execution path and
  check it again when another checkpoint is hit.  The checkpoint may even
--- 16882,16888 ----
  than once, if the exception is caught in the caller, whether by a
  handler or a cleanup.  When \fB\-fhardcfr\-check\-exceptions\fR is also
  enabled, the compiler will avoid associating a \f(CW\*(C`noreturn\*(C'\fR call with
! the implicitly\-added cleanup handler, since it would be redundant with
  the check performed before the call, but other handlers or cleanups in
  the function, if activated, will modify the recorded execution path and
  check it again when another checkpoint is hit.  The checkpoint may even
*************** attributes, which may affect the placeme
*** 16960,16973 ****
  well as the addition of implicit cleanup handlers for them.  This
  unpredictability, and the fact that raising and reraising exceptions
  frequently amounts to implicitly calling \f(CW\*(C`noreturn\*(C'\fR functions, have
! made \fBno-xthrow\fR the default setting for this option: it excludes
  from the \f(CW\*(C`noreturn\*(C'\fR treatment only internal functions used to
  (re)raise exceptions, that are not affected by these optimizations.
! .IP "\fB\-fhardened\fR" 4
  .IX Item "-fhardened"
! Enable a set of flags for C and \*(C+ that improve the security of the
! generated code without affecting its \s-1ABI.\s0  The precise flags enabled
! may change between major releases of \s-1GCC,\s0 but are currently:
  .Sp
  \&\fB\-D_FORTIFY_SOURCE=3
  \&\-D_GLIBCXX_ASSERTIONS
--- 16895,16908 ----
  well as the addition of implicit cleanup handlers for them.  This
  unpredictability, and the fact that raising and reraising exceptions
  frequently amounts to implicitly calling \f(CW\*(C`noreturn\*(C'\fR functions, have
! made \fBno\-xthrow\fR the default setting for this option: it excludes
  from the \f(CW\*(C`noreturn\*(C'\fR treatment only internal functions used to
  (re)raise exceptions, that are not affected by these optimizations.
! .IP \fB\-fhardened\fR 4
  .IX Item "-fhardened"
! Enable a set of flags for C and C++ that improve the security of the
! generated code without affecting its ABI.  The precise flags enabled
! may change between major releases of GCC, but are currently:
  .Sp
  \&\fB\-D_FORTIFY_SOURCE=3
  \&\-D_GLIBCXX_ASSERTIONS
*************** in debug builds.
*** 16988,16998 ****
  .Sp
  Currently, \fB\-fhardened\fR is only supported on GNU/Linux targets.
  .Sp
! \&\fB\-fhardened\fR only enables a particular option if it wasn't
  already specified anywhere on the command line.  For instance,
  \&\fB\-fhardened\fR \fB\-fstack\-protector\fR will only enable
  \&\fB\-fstack\-protector\fR, but not \fB\-fstack\-protector\-strong\fR.
! .IP "\fB\-fstack\-protector\fR" 4
  .IX Item "-fstack-protector"
  Emit extra code to check for buffer overflows, such as stack smashing
  attacks.  This is done by adding a guard variable to functions with
--- 16923,16933 ----
  .Sp
  Currently, \fB\-fhardened\fR is only supported on GNU/Linux targets.
  .Sp
! \&\fB\-fhardened\fR only enables a particular option if it wasn\*(Aqt
  already specified anywhere on the command line.  For instance,
  \&\fB\-fhardened\fR \fB\-fstack\-protector\fR will only enable
  \&\fB\-fstack\-protector\fR, but not \fB\-fstack\-protector\-strong\fR.
! .IP \fB\-fstack\-protector\fR 4
  .IX Item "-fstack-protector"
  Emit extra code to check for buffer overflows, such as stack smashing
  attacks.  This is done by adding a guard variable to functions with
*************** initialized when a function is entered a
*** 17002,17028 ****
  exits.  If a guard check fails, an error message is printed and the program
  exits.  Only variables that are actually allocated on the stack are
  considered, optimized away variables or variables allocated in registers
! don't count.
! .IP "\fB\-fstack\-protector\-all\fR" 4
  .IX Item "-fstack-protector-all"
  Like \fB\-fstack\-protector\fR except that all functions are protected.
! .IP "\fB\-fstack\-protector\-strong\fR" 4
  .IX Item "-fstack-protector-strong"
  Like \fB\-fstack\-protector\fR but includes additional functions to
  be protected \-\-\- those that have local array definitions, or have
  references to local frame addresses.  Only variables that are actually
  allocated on the stack are considered, optimized away variables or variables
! allocated in registers don't count.
! .IP "\fB\-fstack\-protector\-explicit\fR" 4
  .IX Item "-fstack-protector-explicit"
  Like \fB\-fstack\-protector\fR but only protects those functions which
  have the \f(CW\*(C`stack_protect\*(C'\fR attribute.
! .IP "\fB\-fstack\-check\fR" 4
  .IX Item "-fstack-check"
  Generate code to verify that you do not go beyond the boundary of the
  stack.  You should specify this flag if you are running in an
  environment with multiple threads, but you only rarely need to specify it in
! a single-threaded environment since stack overflow is automatically
  detected on nearly all systems if there is only one stack.
  .Sp
  Note that this switch does not actually cause checking to be done; the
--- 16937,16963 ----
  exits.  If a guard check fails, an error message is printed and the program
  exits.  Only variables that are actually allocated on the stack are
  considered, optimized away variables or variables allocated in registers
! don\*(Aqt count.
! .IP \fB\-fstack\-protector\-all\fR 4
  .IX Item "-fstack-protector-all"
  Like \fB\-fstack\-protector\fR except that all functions are protected.
! .IP \fB\-fstack\-protector\-strong\fR 4
  .IX Item "-fstack-protector-strong"
  Like \fB\-fstack\-protector\fR but includes additional functions to
  be protected \-\-\- those that have local array definitions, or have
  references to local frame addresses.  Only variables that are actually
  allocated on the stack are considered, optimized away variables or variables
! allocated in registers don\*(Aqt count.
! .IP \fB\-fstack\-protector\-explicit\fR 4
  .IX Item "-fstack-protector-explicit"
  Like \fB\-fstack\-protector\fR but only protects those functions which
  have the \f(CW\*(C`stack_protect\*(C'\fR attribute.
! .IP \fB\-fstack\-check\fR 4
  .IX Item "-fstack-check"
  Generate code to verify that you do not go beyond the boundary of the
  stack.  You should specify this flag if you are running in an
  environment with multiple threads, but you only rarely need to specify it in
! a single\-threaded environment since stack overflow is automatically
  detected on nearly all systems if there is only one stack.
  .Sp
  Note that this switch does not actually cause checking to be done; the
*************** operating system or the language runtime
*** 17030,17068 ****
  generation of code to ensure that they see the stack being extended.
  .Sp
  You can additionally specify a string parameter: \fBno\fR means no
! checking, \fBgeneric\fR means force the use of old-style checking,
  \&\fBspecific\fR means use the best checking method and is equivalent
  to bare \fB\-fstack\-check\fR.
  .Sp
! Old-style checking is a generic mechanism that requires no specific
  target support in the compiler but comes with the following drawbacks:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  Modified allocation strategy for large objects: they are always
  allocated dynamically if their size exceeds a fixed threshold.  Note this
  may change the semantics of some code.
! .IP "2." 4
  .IX Item "2."
  Fixed limit on the size of the static frame of functions: when it is
  topped by a particular function, stack checking is not reliable and
  a warning is issued by the compiler.
! .IP "3." 4
  .IX Item "3."
  Inefficiency: because of both the modified allocation strategy and the
  generic implementation, code performance is hampered.
  .RE
  .RS 4
  .Sp
! Note that old-style stack checking is also the fallback method for
  \&\fBspecific\fR if no target support has been added in the compiler.
  .Sp
! \&\fB\-fstack\-check=\fR is designed for Ada's needs to detect infinite recursion
  and stack overflows.  \fBspecific\fR is an excellent choice when compiling
! Ada code.  It is not generally sufficient to protect against stack-clash
  attacks.  To protect against those you want \fB\-fstack\-clash\-protection\fR.
  .RE
! .IP "\fB\-fstack\-clash\-protection\fR" 4
  .IX Item "-fstack-clash-protection"
  Generate code to prevent stack clash style attacks.  When this option is
  enabled, the compiler will only allocate one page of stack space at a time
--- 16965,17003 ----
  generation of code to ensure that they see the stack being extended.
  .Sp
  You can additionally specify a string parameter: \fBno\fR means no
! checking, \fBgeneric\fR means force the use of old\-style checking,
  \&\fBspecific\fR means use the best checking method and is equivalent
  to bare \fB\-fstack\-check\fR.
  .Sp
! Old\-style checking is a generic mechanism that requires no specific
  target support in the compiler but comes with the following drawbacks:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  Modified allocation strategy for large objects: they are always
  allocated dynamically if their size exceeds a fixed threshold.  Note this
  may change the semantics of some code.
! .IP 2. 4
  .IX Item "2."
  Fixed limit on the size of the static frame of functions: when it is
  topped by a particular function, stack checking is not reliable and
  a warning is issued by the compiler.
! .IP 3. 4
  .IX Item "3."
  Inefficiency: because of both the modified allocation strategy and the
  generic implementation, code performance is hampered.
  .RE
  .RS 4
  .Sp
! Note that old\-style stack checking is also the fallback method for
  \&\fBspecific\fR if no target support has been added in the compiler.
  .Sp
! \&\fB\-fstack\-check=\fR is designed for Ada\*(Aqs needs to detect infinite recursion
  and stack overflows.  \fBspecific\fR is an excellent choice when compiling
! Ada code.  It is not generally sufficient to protect against stack\-clash
  attacks.  To protect against those you want \fB\-fstack\-clash\-protection\fR.
  .RE
! .IP \fB\-fstack\-clash\-protection\fR 4
  .IX Item "-fstack-clash-protection"
  Generate code to prevent stack clash style attacks.  When this option is
  enabled, the compiler will only allocate one page of stack space at a time
*************** those targets \fB\-fstack\-clash\-protec
*** 17075,17086 ****
  allocations.  \fB\-fstack\-clash\-protection\fR may also provide limited
  protection for static stack allocations if the target supports
  \&\fB\-fstack\-check=specific\fR.
! .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
  .IX Item "-fstack-limit-register=reg"
  .PD 0
! .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
  .IX Item "-fstack-limit-symbol=sym"
! .IP "\fB\-fno\-stack\-limit\fR" 4
  .IX Item "-fno-stack-limit"
  .PD
  Generate code to ensure that the stack does not grow beyond a certain value,
--- 17010,17021 ----
  allocations.  \fB\-fstack\-clash\-protection\fR may also provide limited
  protection for static stack allocations if the target supports
  \&\fB\-fstack\-check=specific\fR.
! .IP \fB\-fstack\-limit\-register=\fR\fIreg\fR 4
  .IX Item "-fstack-limit-register=reg"
  .PD 0
! .IP \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 4
  .IX Item "-fstack-limit-symbol=sym"
! .IP \fB\-fno\-stack\-limit\fR 4
  .IX Item "-fno-stack-limit"
  .PD
  Generate code to ensure that the stack does not grow beyond a certain value,
*************** For instance, if the stack starts at abs
*** 17093,17103 ****
  and grows downwards, you can use the flags
  \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
  \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
! of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
  .Sp
  You can locally override stack limit checking by using the
  \&\f(CW\*(C`no_stack_limit\*(C'\fR function attribute.
! .IP "\fB\-fsplit\-stack\fR" 4
  .IX Item "-fsplit-stack"
  Generate code to automatically split the stack before it overflows.
  The resulting program has a discontiguous stack which can only
--- 17028,17038 ----
  and grows downwards, you can use the flags
  \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
  \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
! of 128KB.  Note that this may only work with the GNU linker.
  .Sp
  You can locally override stack limit checking by using the
  \&\f(CW\*(C`no_stack_limit\*(C'\fR function attribute.
! .IP \fB\-fsplit\-stack\fR 4
  .IX Item "-fsplit-stack"
  Generate code to automatically split the stack before it overflows.
  The resulting program has a discontiguous stack which can only
*************** available for the latter code to run.  I
*** 17113,17132 ****
  including library code, with \fB\-fsplit\-stack\fR is not an option,
  then the linker can fix up these calls so that the code compiled
  without \fB\-fsplit\-stack\fR always has a large stack.  Support for
! this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
  and later.
! .IP "\fB\-fstrub=disable\fR" 4
  .IX Item "-fstrub=disable"
  Disable stack scrubbing entirely, ignoring any \f(CW\*(C`strub\*(C'\fR attributes.
  See
! .IP "\fB\-fstrub=strict\fR" 4
  .IX Item "-fstrub=strict"
  Functions default to \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR, and apply
  \&\fBstrict\fRly the restriction that only functions associated with
  \&\f(CW\*(C`strub\*(C'\fR\-\f(CW\*(C`callable\*(C'\fR modes (\f(CW\*(C`at\-calls\*(C'\fR, \f(CW\*(C`callable\*(C'\fR and
  \&\f(CW\*(C`always_inline\*(C'\fR \f(CW\*(C`internal\*(C'\fR) are \f(CW\*(C`callable\*(C'\fR by functions
  with \f(CW\*(C`strub\*(C'\fR\-enabled modes (\f(CW\*(C`at\-calls\*(C'\fR and \f(CW\*(C`internal\*(C'\fR).
! .IP "\fB\-fstrub=relaxed\fR" 4
  .IX Item "-fstrub=relaxed"
  Restore the default stack scrub (\f(CW\*(C`strub\*(C'\fR) setting, namely,
  \&\f(CW\*(C`strub\*(C'\fR is only enabled as required by \f(CW\*(C`strub\*(C'\fR attributes
--- 17048,17067 ----
  including library code, with \fB\-fsplit\-stack\fR is not an option,
  then the linker can fix up these calls so that the code compiled
  without \fB\-fsplit\-stack\fR always has a large stack.  Support for
! this is implemented in the gold linker in GNU binutils release 2.21
  and later.
! .IP \fB\-fstrub=disable\fR 4
  .IX Item "-fstrub=disable"
  Disable stack scrubbing entirely, ignoring any \f(CW\*(C`strub\*(C'\fR attributes.
  See
! .IP \fB\-fstrub=strict\fR 4
  .IX Item "-fstrub=strict"
  Functions default to \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR, and apply
  \&\fBstrict\fRly the restriction that only functions associated with
  \&\f(CW\*(C`strub\*(C'\fR\-\f(CW\*(C`callable\*(C'\fR modes (\f(CW\*(C`at\-calls\*(C'\fR, \f(CW\*(C`callable\*(C'\fR and
  \&\f(CW\*(C`always_inline\*(C'\fR \f(CW\*(C`internal\*(C'\fR) are \f(CW\*(C`callable\*(C'\fR by functions
  with \f(CW\*(C`strub\*(C'\fR\-enabled modes (\f(CW\*(C`at\-calls\*(C'\fR and \f(CW\*(C`internal\*(C'\fR).
! .IP \fB\-fstrub=relaxed\fR 4
  .IX Item "-fstrub=relaxed"
  Restore the default stack scrub (\f(CW\*(C`strub\*(C'\fR) setting, namely,
  \&\f(CW\*(C`strub\*(C'\fR is only enabled as required by \f(CW\*(C`strub\*(C'\fR attributes
*************** strub contexts are only prevented from c
*** 17135,17141 ****
  associated with \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR.  This option is only
  useful to override other \fB\-fstrub=*\fR options that precede it in
  the command line.
! .IP "\fB\-fstrub=at\-calls\fR" 4
  .IX Item "-fstrub=at-calls"
  Enable \f(CW\*(C`at\-calls\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  It exercises the \f(CW\*(C`strub\*(C'\fR machinery
--- 17070,17076 ----
  associated with \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR.  This option is only
  useful to override other \fB\-fstrub=*\fR options that precede it in
  the command line.
! .IP \fB\-fstrub=at\-calls\fR 4
  .IX Item "-fstrub=at-calls"
  Enable \f(CW\*(C`at\-calls\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  It exercises the \f(CW\*(C`strub\*(C'\fR machinery
*************** other translation units, or that has its
*** 17145,17167 ****
  be affected by this option.  Optimization options may also affect
  viability.  See the \f(CW\*(C`strub\*(C'\fR attribute documentation for details on
  viability and eligibility requirements.
! .IP "\fB\-fstrub=internal\fR" 4
  .IX Item "-fstrub=internal"
  Enable \f(CW\*(C`internal\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  This option is intended to exercise
  thoroughly parts of the \f(CW\*(C`strub\*(C'\fR machinery that implement the less
! efficient, but interface-preserving \f(CW\*(C`strub\*(C'\fR mode.  Functions that
  would not be affected by this option are quite uncommon.
! .IP "\fB\-fstrub=all\fR" 4
  .IX Item "-fstrub=all"
  Enable some \f(CW\*(C`strub\*(C'\fR mode where viable.  When both strub modes are
  viable, \f(CW\*(C`at\-calls\*(C'\fR is preferred.  \fB\-fdump\-ipa\-strubm\fR adds
  function attributes that tell which mode was selected for each function.
  The primary use of this option is for testing, to exercise thoroughly
  the \f(CW\*(C`strub\*(C'\fR machinery.
! .IP "\fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR]" 4
  .IX Item "-fvtable-verify=[std|preinit|none]"
! This option is only available when compiling \*(C+ code.
  It turns on (or off, if using \fB\-fvtable\-verify=none\fR) the security
  feature that verifies at run time, for every virtual call, that
  the vtable pointer through which the call is made is valid for the type of
--- 17080,17102 ----
  be affected by this option.  Optimization options may also affect
  viability.  See the \f(CW\*(C`strub\*(C'\fR attribute documentation for details on
  viability and eligibility requirements.
! .IP \fB\-fstrub=internal\fR 4
  .IX Item "-fstrub=internal"
  Enable \f(CW\*(C`internal\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  This option is intended to exercise
  thoroughly parts of the \f(CW\*(C`strub\*(C'\fR machinery that implement the less
! efficient, but interface\-preserving \f(CW\*(C`strub\*(C'\fR mode.  Functions that
  would not be affected by this option are quite uncommon.
! .IP \fB\-fstrub=all\fR 4
  .IX Item "-fstrub=all"
  Enable some \f(CW\*(C`strub\*(C'\fR mode where viable.  When both strub modes are
  viable, \f(CW\*(C`at\-calls\*(C'\fR is preferred.  \fB\-fdump\-ipa\-strubm\fR adds
  function attributes that tell which mode was selected for each function.
  The primary use of this option is for testing, to exercise thoroughly
  the \f(CW\*(C`strub\*(C'\fR machinery.
! .IP \fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 4
  .IX Item "-fvtable-verify=[std|preinit|none]"
! This option is only available when compiling C++ code.
  It turns on (or off, if using \fB\-fvtable\-verify=none\fR) the security
  feature that verifies at run time, for every virtual call, that
  the vtable pointer through which the call is made is valid for the type of
*************** the object, and has not been corrupted o
*** 17169,17175 ****
  pointer is detected at run time, an error is reported and execution of the
  program is immediately halted.
  .Sp
! This option causes run-time data structures to be built at program startup,
  which are used for verifying the vtable pointers.  
  The options \fBstd\fR and \fBpreinit\fR
  control the timing of when these data structures are built.  In both cases the
--- 17104,17110 ----
  pointer is detected at run time, an error is reported and execution of the
  program is immediately halted.
  .Sp
! This option causes run\-time data structures to be built at program startup,
  which are used for verifying the vtable pointers.  
  The options \fBstd\fR and \fBpreinit\fR
  control the timing of when these data structures are built.  In both cases the
*************** libraries have been loaded and initializ
*** 17182,17188 ****
  If this option appears multiple times in the command line with different
  values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
  \&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
! .IP "\fB\-fvtv\-debug\fR" 4
  .IX Item "-fvtv-debug"
  When used in conjunction with \fB\-fvtable\-verify=std\fR or 
  \&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
--- 17117,17123 ----
  If this option appears multiple times in the command line with different
  values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
  \&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
! .IP \fB\-fvtv\-debug\fR 4
  .IX Item "-fvtv-debug"
  When used in conjunction with \fB\-fvtable\-verify=std\fR or 
  \&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
*************** runtime functions for the vtable verific
*** 17190,17218 ****
  This flag also causes the compiler to log information about which 
  vtable pointers it finds for each class.
  This information is written to a file named \fIvtv_set_ptr_data.log\fR 
! in the directory named by the environment variable \fB\s-1VTV_LOGS_DIR\s0\fR 
  if that is defined or the current working directory otherwise.
  .Sp
  Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
  file, be sure to delete any existing one.
! .IP "\fB\-fvtv\-counts\fR" 4
  .IX Item "-fvtv-counts"
  This is a debugging flag.  When used in conjunction with
  \&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
  causes the compiler to keep track of the total number of virtual calls
  it encounters and the number of verifications it inserts.  It also
! counts the number of calls to certain run-time library functions
  that it inserts and logs this information for each compilation unit.
  The compiler writes this information to a file named
  \&\fIvtv_count_data.log\fR in the directory named by the environment
! variable \fB\s-1VTV_LOGS_DIR\s0\fR if that is defined or the current working
  directory otherwise.  It also counts the size of the vtable pointer sets
  for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
  in the same directory.
  .Sp
  Note:  This feature \fIappends\fR data to the log files.  To get fresh log
  files, be sure to delete any existing ones.
! .IP "\fB\-finstrument\-functions\fR" 4
  .IX Item "-finstrument-functions"
  Generate instrumentation calls for entry and exit to functions.  Just
  after function entry and just before function exit, the following
--- 17125,17153 ----
  This flag also causes the compiler to log information about which 
  vtable pointers it finds for each class.
  This information is written to a file named \fIvtv_set_ptr_data.log\fR 
! in the directory named by the environment variable \fBVTV_LOGS_DIR\fR 
  if that is defined or the current working directory otherwise.
  .Sp
  Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
  file, be sure to delete any existing one.
! .IP \fB\-fvtv\-counts\fR 4
  .IX Item "-fvtv-counts"
  This is a debugging flag.  When used in conjunction with
  \&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
  causes the compiler to keep track of the total number of virtual calls
  it encounters and the number of verifications it inserts.  It also
! counts the number of calls to certain run\-time library functions
  that it inserts and logs this information for each compilation unit.
  The compiler writes this information to a file named
  \&\fIvtv_count_data.log\fR in the directory named by the environment
! variable \fBVTV_LOGS_DIR\fR if that is defined or the current working
  directory otherwise.  It also counts the size of the vtable pointer sets
  for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
  in the same directory.
  .Sp
  Note:  This feature \fIappends\fR data to the log files.  To get fresh log
  files, be sure to delete any existing ones.
! .IP \fB\-finstrument\-functions\fR 4
  .IX Item "-finstrument-functions"
  Generate instrumentation calls for entry and exit to functions.  Just
  after function entry and just before function exit, the following
*************** providing static copies.)
*** 17245,17255 ****
  .Sp
  A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
  which case this instrumentation is not done.  This can be used, for
! example, for the profiling functions listed above, high-priority
  interrupt routines, and any functions from which the profiling functions
  cannot safely be called (perhaps signal handlers, if the profiling
  routines generate output or allocate memory).
! .IP "\fB\-finstrument\-functions\-once\fR" 4
  .IX Item "-finstrument-functions-once"
  This is similar to \fB\-finstrument\-functions\fR, but the profiling
  functions are called only once per instrumented function, i.e. the first
--- 17180,17190 ----
  .Sp
  A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
  which case this instrumentation is not done.  This can be used, for
! example, for the profiling functions listed above, high\-priority
  interrupt routines, and any functions from which the profiling functions
  cannot safely be called (perhaps signal handlers, if the profiling
  routines generate output or allocate memory).
! .IP \fB\-finstrument\-functions\-once\fR 4
  .IX Item "-finstrument-functions-once"
  This is similar to \fB\-finstrument\-functions\fR, but the profiling
  functions are called only once per instrumented function, i.e. the first
*************** functions are called at \fIleast\fR once
*** 17264,17270 ****
  once per thread, but the calls are always paired, that is to say, if a
  thread calls the first function, then it will call the second function,
  unless it never reaches the exit of the instrumented function.
! .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
  .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
  Set the list of functions that are excluded from instrumentation (see
  the description of \fB\-finstrument\-functions\fR).  If the file that
--- 17199,17205 ----
  once per thread, but the calls are always paired, that is to say, if a
  thread calls the first function, then it will call the second function,
  unless it never reaches the exit of the instrumented function.
! .IP \fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR 4
  .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
  Set the list of functions that are excluded from instrumentation (see
  the description of \fB\-finstrument\-functions\fR).  If the file that
*************** contain \fI/bits/stl\fR or \fIinclude/sy
*** 17284,17334 ****
  .Sp
  If, for some reason, you want to include letter \fB,\fR in one of
  \&\fIsym\fR, write \fB,\fR. For example,
! \&\fB\-finstrument\-functions\-exclude\-file\-list=',,tmp'\fR
  (note the single quote surrounding the option).
! .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
  .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
  This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
  but this option sets the list of function names to be excluded from
! instrumentation.  The function name to be matched is its user-visible
  name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
  internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
  match is done on substrings: if the \fIsym\fR parameter is a substring
! of the function name, it is considered to be a match.  For C99 and \*(C+
! extended identifiers, the function name must be given in \s-1UTF\-8,\s0 not
  using universal character names.
! .IP "\fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR" 4
  .IX Item "-fpatchable-function-entry=N[,M]"
  Generate \fIN\fR NOPs right at the beginning
! of each function, with the function entry point before the \fIM\fRth \s-1NOP.\s0
  If \fIM\fR is omitted, it defaults to \f(CW0\fR so the
! function entry points to the address just at the first \s-1NOP.\s0
! The \s-1NOP\s0 instructions reserve extra space which can be used to patch in
  any desired instrumentation at run time, provided that the code segment
  is writable.  The amount of space is controllable indirectly via
! the number of NOPs; the \s-1NOP\s0 instruction used corresponds to the instruction
! emitted by the internal \s-1GCC\s0 back-end interface \f(CW\*(C`gen_nop\*(C'\fR.  This behavior
! is target-specific and may also depend on the architecture variant and/or
  other compilation options.
  .Sp
! For run-time identification, the starting addresses of these areas,
  which correspond to their respective function entries minus \fIM\fR,
  are additionally collected in the \f(CW\*(C`_\|_patchable_function_entries\*(C'\fR
  section of the resulting binary.
  .Sp
  Note that the value of \f(CW\*(C`_\|_attribute_\|_ ((patchable_function_entry
! (N,M)))\*(C'\fR takes precedence over command-line option
  \&\fB\-fpatchable\-function\-entry=N,M\fR.  This can be used to increase
  the area size or to remove it completely on a single function.
  If \f(CW\*(C`N=0\*(C'\fR, no pad location is recorded.
  .Sp
! The \s-1NOP\s0 instructions are inserted at\-\-\-and maybe before, depending on
  \&\fIM\fR\-\-\-the function entry address, even before the prologue.  On
! PowerPC with the ELFv2 \s-1ABI,\s0 for a function with dual entry points,
  the local entry point is this function entry address.
  .Sp
  The maximum value of \fIN\fR and \fIM\fR is 65535.  On PowerPC with the
! ELFv2 \s-1ABI,\s0 for a function with dual entry points, the supported values
  for \fIM\fR are 0, 2, 6 and 14.
  .SS "Options Controlling the Preprocessor"
  .IX Subsection "Options Controlling the Preprocessor"
--- 17219,17269 ----
  .Sp
  If, for some reason, you want to include letter \fB,\fR in one of
  \&\fIsym\fR, write \fB,\fR. For example,
! \&\fB\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\fR
  (note the single quote surrounding the option).
! .IP \fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR 4
  .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
  This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
  but this option sets the list of function names to be excluded from
! instrumentation.  The function name to be matched is its user\-visible
  name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
  internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
  match is done on substrings: if the \fIsym\fR parameter is a substring
! of the function name, it is considered to be a match.  For C99 and C++
! extended identifiers, the function name must be given in UTF\-8, not
  using universal character names.
! .IP \fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR 4
  .IX Item "-fpatchable-function-entry=N[,M]"
  Generate \fIN\fR NOPs right at the beginning
! of each function, with the function entry point before the \fIM\fRth NOP.
  If \fIM\fR is omitted, it defaults to \f(CW0\fR so the
! function entry points to the address just at the first NOP.
! The NOP instructions reserve extra space which can be used to patch in
  any desired instrumentation at run time, provided that the code segment
  is writable.  The amount of space is controllable indirectly via
! the number of NOPs; the NOP instruction used corresponds to the instruction
! emitted by the internal GCC back\-end interface \f(CW\*(C`gen_nop\*(C'\fR.  This behavior
! is target\-specific and may also depend on the architecture variant and/or
  other compilation options.
  .Sp
! For run\-time identification, the starting addresses of these areas,
  which correspond to their respective function entries minus \fIM\fR,
  are additionally collected in the \f(CW\*(C`_\|_patchable_function_entries\*(C'\fR
  section of the resulting binary.
  .Sp
  Note that the value of \f(CW\*(C`_\|_attribute_\|_ ((patchable_function_entry
! (N,M)))\*(C'\fR takes precedence over command\-line option
  \&\fB\-fpatchable\-function\-entry=N,M\fR.  This can be used to increase
  the area size or to remove it completely on a single function.
  If \f(CW\*(C`N=0\*(C'\fR, no pad location is recorded.
  .Sp
! The NOP instructions are inserted at\-\-\-and maybe before, depending on
  \&\fIM\fR\-\-\-the function entry address, even before the prologue.  On
! PowerPC with the ELFv2 ABI, for a function with dual entry points,
  the local entry point is this function entry address.
  .Sp
  The maximum value of \fIN\fR and \fIM\fR is 65535.  On PowerPC with the
! ELFv2 ABI, for a function with dual entry points, the supported values
  for \fIM\fR are 0, 2, 6 and 14.
  .SS "Options Controlling the Preprocessor"
  .IX Subsection "Options Controlling the Preprocessor"
*************** they appeared during translation phase t
*** 17355,17369 ****
  directive.  In particular, the definition is truncated by
  embedded newline characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell-like
! program you may need to use the shell's quoting syntax to protect
  characters such as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any).  Parentheses are meaningful to most shells, so you should
  quote the option.  With \fBsh\fR and \fBcsh\fR,
! \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
  .Sp
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
  are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
--- 17290,17304 ----
  directive.  In particular, the definition is truncated by
  embedded newline characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell\-like
! program you may need to use the shell\*(Aqs quoting syntax to protect
  characters such as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function\-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any).  Parentheses are meaningful to most shells, so you should
  quote the option.  With \fBsh\fR and \fBcsh\fR,
! \&\fB\-D\*(Aq\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB\*(Aq\fR works.
  .Sp
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
  are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
*************** provided with a \fB\-D\fR option.
*** 17377,17383 ****
  .IX Item "-include file"
  Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
  line of the primary source file.  However, the first directory searched
! for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
  the directory containing the main source file.  If not found there, it
  is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
  chain as normal.
--- 17312,17318 ----
  .IX Item "-include file"
  Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
  line of the primary source file.  However, the first directory searched
! for \fIfile\fR is the preprocessor\*(Aqs working directory \fIinstead of\fR
  the directory containing the main source file.  If not found there, it
  is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
  chain as normal.
*************** processing its declarations.
*** 17393,17416 ****
  .Sp
  All files specified by \fB\-imacros\fR are processed before all files
  specified by \fB\-include\fR.
! .IP "\fB\-undef\fR" 4
  .IX Item "-undef"
! Do not predefine any system-specific or GCC-specific macros.  The
  standard predefined macros remain defined.
! .IP "\fB\-pthread\fR" 4
  .IX Item "-pthread"
! Define additional macros required for using the \s-1POSIX\s0 threads library.
  You should use this option consistently for both compilation and linking.
  This option is supported on GNU/Linux targets, most other Unix derivatives,
  and also on x86 Cygwin and MinGW targets.
! .IP "\fB\-M\fR" 4
  .IX Item "-M"
  Instead of outputting the result of preprocessing, output a rule
  suitable for \fBmake\fR describing the dependencies of the main
  source file.  The preprocessor outputs one \fBmake\fR rule containing
  the object file name for that source file, a colon, and the names of all
  the included files, including those coming from \fB\-include\fR or
! \&\fB\-imacros\fR command-line options.
  .Sp
  Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
  object file name consists of the name of the source file with any
--- 17328,17351 ----
  .Sp
  All files specified by \fB\-imacros\fR are processed before all files
  specified by \fB\-include\fR.
! .IP \fB\-undef\fR 4
  .IX Item "-undef"
! Do not predefine any system\-specific or GCC\-specific macros.  The
  standard predefined macros remain defined.
! .IP \fB\-pthread\fR 4
  .IX Item "-pthread"
! Define additional macros required for using the POSIX threads library.
  You should use this option consistently for both compilation and linking.
  This option is supported on GNU/Linux targets, most other Unix derivatives,
  and also on x86 Cygwin and MinGW targets.
! .IP \fB\-M\fR 4
  .IX Item "-M"
  Instead of outputting the result of preprocessing, output a rule
  suitable for \fBmake\fR describing the dependencies of the main
  source file.  The preprocessor outputs one \fBmake\fR rule containing
  the object file name for that source file, a colon, and the names of all
  the included files, including those coming from \fB\-include\fR or
! \&\fB\-imacros\fR command\-line options.
  .Sp
  Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
  object file name consists of the name of the source file with any
*************** parts removed.  If there are many includ
*** 17419,17434 ****
  split into several lines using \fB\e\fR\-newline.  The rule has no
  commands.
  .Sp
! This option does not suppress the preprocessor's debug output, such as
  \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
  rules you should explicitly specify the dependency output file with
  \&\fB\-MF\fR, or use an environment variable like
! \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
  is still sent to the regular output stream as normal.
  .Sp
  Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
  warnings with an implicit \fB\-w\fR.
! .IP "\fB\-MM\fR" 4
  .IX Item "-MM"
  Like \fB\-M\fR but do not mention header files that are found in
  system header directories, nor header files that are included,
--- 17354,17369 ----
  split into several lines using \fB\e\fR\-newline.  The rule has no
  commands.
  .Sp
! This option does not suppress the preprocessor\*(Aqs debug output, such as
  \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
  rules you should explicitly specify the dependency output file with
  \&\fB\-MF\fR, or use an environment variable like
! \&\fBDEPENDENCIES_OUTPUT\fR.  Debug output
  is still sent to the regular output stream as normal.
  .Sp
  Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
  warnings with an implicit \fB\-w\fR.
! .IP \fB\-MM\fR 4
  .IX Item "-MM"
  Like \fB\-M\fR but do not mention header files that are found in
  system header directories, nor header files that are included,
*************** When used with the driver options \fB\-M
*** 17448,17454 ****
  \&\fB\-MF\fR overrides the default dependency output file.
  .Sp
  If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
! .IP "\fB\-MG\fR" 4
  .IX Item "-MG"
  In conjunction with an option such as \fB\-M\fR requesting
  dependency generation, \fB\-MG\fR assumes missing header files are
--- 17383,17389 ----
  \&\fB\-MF\fR overrides the default dependency output file.
  .Sp
  If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
! .IP \fB\-MG\fR 4
  .IX Item "-MG"
  In conjunction with an option such as \fB\-M\fR requesting
  dependency generation, \fB\-MG\fR assumes missing header files are
*************** also suppresses preprocessed output, as
*** 17459,17470 ****
  this useless.
  .Sp
  This feature is used in automatic updating of makefiles.
! .IP "\fB\-Mno\-modules\fR" 4
  .IX Item "-Mno-modules"
  Disable dependency generation for compiled module interfaces.
! .IP "\fB\-MP\fR" 4
  .IX Item "-MP"
! This option instructs \s-1CPP\s0 to add a phony target for each dependency
  other than the main file, causing each to depend on nothing.  These
  dummy rules work around errors \fBmake\fR gives if you remove header
  files without updating the \fIMakefile\fR to match.
--- 17394,17405 ----
  this useless.
  .Sp
  This feature is used in automatic updating of makefiles.
! .IP \fB\-Mno\-modules\fR 4
  .IX Item "-Mno-modules"
  Disable dependency generation for compiled module interfaces.
! .IP \fB\-MP\fR 4
  .IX Item "-MP"
! This option instructs CPP to add a phony target for each dependency
  other than the main file, causing each to depend on nothing.  These
  dummy rules work around errors \fBmake\fR gives if you remove header
  files without updating the \fIMakefile\fR to match.
*************** This is typical output:
*** 17479,17493 ****
  .IP "\fB\-MT\fR \fItarget\fR" 4
  .IX Item "-MT target"
  Change the target of the rule emitted by dependency generation.  By
! default \s-1CPP\s0 takes the name of the main input file, deletes any
  directory components and any file suffix such as \fB.c\fR, and
! appends the platform's usual object suffix.  The result is the target.
  .Sp
  An \fB\-MT\fR option sets the target to be exactly the string you
  specify.  If you want multiple targets, you can specify them as a single
  argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
  .Sp
! For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
  .Sp
  .Vb 1
  \&        $(objpfx)foo.o: foo.c
--- 17414,17428 ----
  .IP "\fB\-MT\fR \fItarget\fR" 4
  .IX Item "-MT target"
  Change the target of the rule emitted by dependency generation.  By
! default CPP takes the name of the main input file, deletes any
  directory components and any file suffix such as \fB.c\fR, and
! appends the platform\*(Aqs usual object suffix.  The result is the target.
  .Sp
  An \fB\-MT\fR option sets the target to be exactly the string you
  specify.  If you want multiple targets, you can specify them as a single
  argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
  .Sp
! For example, \fB\-MT\ \*(Aq$(objpfx)foo.o\*(Aq\fR might give
  .Sp
  .Vb 1
  \&        $(objpfx)foo.o: foo.c
*************** For example, \fB\-MT\ '$(objpfx)foo.o'\f
*** 17495,17501 ****
  .IP "\fB\-MQ\fR \fItarget\fR" 4
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
! Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
  .Sp
  .Vb 1
  \&        $$(objpfx)foo.o: foo.c
--- 17430,17436 ----
  .IP "\fB\-MQ\fR \fItarget\fR" 4
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
! Make.  \fB\-MQ\ \*(Aq$(objpfx)foo.o\*(Aq\fR gives
  .Sp
  .Vb 1
  \&        $$(objpfx)foo.o: foo.c
*************** Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR give
*** 17503,17509 ****
  .Sp
  The default target is automatically quoted, as if it were given with
  \&\fB\-MQ\fR.
! .IP "\fB\-MD\fR" 4
  .IX Item "-MD"
  \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
  \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
--- 17438,17444 ----
  .Sp
  The default target is automatically quoted, as if it were given with
  \&\fB\-MQ\fR.
! .IP \fB\-MD\fR 4
  .IX Item "-MD"
  \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
  \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
*************** is understood to specify a target object
*** 17518,17528 ****
  .Sp
  Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
  a dependency output file as a side effect of the compilation process.
! .IP "\fB\-MMD\fR" 4
  .IX Item "-MMD"
  Like \fB\-MD\fR except mention only user header files, not system
  header files.
! .IP "\fB\-fpreprocessed\fR" 4
  .IX Item "-fpreprocessed"
  Indicate to the preprocessor that the input file has already been
  preprocessed.  This suppresses things like macro expansion, trigraph
--- 17453,17463 ----
  .Sp
  Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
  a dependency output file as a side effect of the compilation process.
! .IP \fB\-MMD\fR 4
  .IX Item "-MMD"
  Like \fB\-MD\fR except mention only user header files, not system
  header files.
! .IP \fB\-fpreprocessed\fR 4
  .IX Item "-fpreprocessed"
  Indicate to the preprocessor that the input file has already been
  preprocessed.  This suppresses things like macro expansion, trigraph
*************** a tokenizer for the front ends.
*** 17534,17546 ****
  .Sp
  \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
  extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
! extensions that \s-1GCC\s0 uses for preprocessed files created by
  \&\fB\-save\-temps\fR.
! .IP "\fB\-fdirectives\-only\fR" 4
  .IX Item "-fdirectives-only"
  When preprocessing, handle directives, but do not expand macros.
  .Sp
! The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
  options.
  .Sp
  With \fB\-E\fR, preprocessing is limited to the handling of directives
--- 17469,17481 ----
  .Sp
  \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
  extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
! extensions that GCC uses for preprocessed files created by
  \&\fB\-save\-temps\fR.
! .IP \fB\-fdirectives\-only\fR 4
  .IX Item "-fdirectives-only"
  When preprocessing, handle directives, but do not expand macros.
  .Sp
! The option\*(Aqs behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
  options.
  .Sp
  With \fB\-E\fR, preprocessing is limited to the handling of directives
*************** files previously preprocessed with \f(CW
*** 17557,17583 ****
  With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
  \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
  files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
! .IP "\fB\-fdollars\-in\-identifiers\fR" 4
  .IX Item "-fdollars-in-identifiers"
  Accept \fB$\fR in identifiers.
! .IP "\fB\-fextended\-identifiers\fR" 4
  .IX Item "-fextended-identifiers"
  Accept universal character names and extended characters in
  identifiers.  This option is enabled by default for C99 (and later C
! standard versions) and \*(C+.
! .IP "\fB\-fno\-canonical\-system\-headers\fR" 4
  .IX Item "-fno-canonical-system-headers"
  When preprocessing, do not shorten system header paths with canonicalization.
! .IP "\fB\-fmax\-include\-depth=\fR\fIdepth\fR" 4
  .IX Item "-fmax-include-depth=depth"
  Set the maximum depth of the nested #include. The default is 200.
! .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
  .IX Item "-ftabstop=width"
  Set the distance between tab stops.  This helps the preprocessor report
  correct column numbers in warnings or errors, even if tabs appear on the
  line.  If the value is less than 1 or greater than 100, the option is
  ignored.  The default is 8.
! .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
  .IX Item "-ftrack-macro-expansion[=level]"
  Track locations of tokens across macro expansions. This allows the
  compiler to emit diagnostic about the current macro expansion stack
--- 17492,17518 ----
  With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
  \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
  files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
! .IP \fB\-fdollars\-in\-identifiers\fR 4
  .IX Item "-fdollars-in-identifiers"
  Accept \fB$\fR in identifiers.
! .IP \fB\-fextended\-identifiers\fR 4
  .IX Item "-fextended-identifiers"
  Accept universal character names and extended characters in
  identifiers.  This option is enabled by default for C99 (and later C
! standard versions) and C++.
! .IP \fB\-fno\-canonical\-system\-headers\fR 4
  .IX Item "-fno-canonical-system-headers"
  When preprocessing, do not shorten system header paths with canonicalization.
! .IP \fB\-fmax\-include\-depth=\fR\fIdepth\fR 4
  .IX Item "-fmax-include-depth=depth"
  Set the maximum depth of the nested #include. The default is 200.
! .IP \fB\-ftabstop=\fR\fIwidth\fR 4
  .IX Item "-ftabstop=width"
  Set the distance between tab stops.  This helps the preprocessor report
  correct column numbers in warnings or errors, even if tabs appear on the
  line.  If the value is less than 1 or greater than 100, the option is
  ignored.  The default is 8.
! .IP \fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR] 4
  .IX Item "-ftrack-macro-expansion[=level]"
  Track locations of tokens across macro expansions. This allows the
  compiler to emit diagnostic about the current macro expansion stack
*************** when a compilation error occurs in a mac
*** 17585,17665 ****
  option makes the preprocessor and the compiler consume more
  memory. The \fIlevel\fR parameter can be used to choose the level of
  precision of token location tracking thus decreasing the memory
! consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
  this option. Value \fB1\fR tracks tokens locations in a
  degraded mode for the sake of minimal memory overhead. In this mode
  all tokens resulting from the expansion of an argument of a
! function-like macro have the same location. Value \fB2\fR tracks
  tokens locations completely. This value is the most memory hungry.
  When this option is given no argument, the default parameter value is
  \&\fB2\fR.
  .Sp
  Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
! .IP "\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fmacro-prefix-map=old=new"
! When preprocessing files residing in directory \fI\fIold\fI\fR,
  expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
! files resided in directory \fI\fInew\fI\fR instead.  This can be used
  to change an absolute path to a relative path by using \fI.\fR for
  \&\fInew\fR which can result in more reproducible builds that are
  location independent.  This option also affects
  \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
  \&\fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
  .IX Item "-fexec-charset=charset"
  Set the execution character set, used for string and character
! constants.  The default is \s-1UTF\-8.\s0  \fIcharset\fR can be any encoding
! supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
  .IX Item "-fwide-exec-charset=charset"
  Set the wide execution character set, used for wide string and
! character constants.  The default is one of \s-1UTF\-32BE, UTF\-32LE, UTF\-16BE,\s0
! or \s-1UTF\-16LE,\s0 whichever corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR and the
! big-endian or little-endian byte order being used for code generation.  As
  with \fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
! by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
  problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
! .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
  .IX Item "-finput-charset=charset"
  Set the input character set, used for translation from the character
! set of the input file to the source character set used by \s-1GCC.\s0  If the
! locale does not specify, or \s-1GCC\s0 cannot get this information from the
! locale, the default is \s-1UTF\-8.\s0  This can be overridden by either the locale
! or this command-line option.  Currently the command-line option takes
! precedence if there's a conflict.  \fIcharset\fR can be any encoding
! supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP "\fB\-fpch\-deps\fR" 4
  .IX Item "-fpch-deps"
  When using precompiled headers, this flag
! causes the dependency-output flags to also list the files from the
! precompiled header's dependencies.  If not specified, only the
  precompiled header are listed and not the files that were used to
  create it, because those files are not consulted when a precompiled
  header is used.
! .IP "\fB\-fpch\-preprocess\fR" 4
  .IX Item "-fpch-preprocess"
  This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
! \&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
  the place where the precompiled header was found, and its \fIfilename\fR.
! When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
! and loads the \s-1PCH.\s0
  .Sp
  This option is off by default, because the resulting preprocessed output
! is only really suitable as input to \s-1GCC.\s0  It is switched on by
  \&\fB\-save\-temps\fR.
  .Sp
  You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
! safe to edit the filename if the \s-1PCH\s0 file is available in a different
! location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
  current directory.
! .IP "\fB\-fworking\-directory\fR" 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that
  let the compiler know the current working directory at the time of
  preprocessing.  When this option is enabled, the preprocessor
  emits, after the initial linemarker, a second linemarker with the
! current working directory followed by two slashes.  \s-1GCC\s0 uses this
! directory, when it's present in the preprocessed input, as the
  directory emitted as the current working directory in some debugging
  information formats.  This option is implicitly enabled if debugging
  information is enabled, but this can be inhibited with the negated
--- 17520,17600 ----
  option makes the preprocessor and the compiler consume more
  memory. The \fIlevel\fR parameter can be used to choose the level of
  precision of token location tracking thus decreasing the memory
! consumption if necessary. Value \fB0\fR of \fIlevel\fR de\-activates
  this option. Value \fB1\fR tracks tokens locations in a
  degraded mode for the sake of minimal memory overhead. In this mode
  all tokens resulting from the expansion of an argument of a
! function\-like macro have the same location. Value \fB2\fR tracks
  tokens locations completely. This value is the most memory hungry.
  When this option is given no argument, the default parameter value is
  \&\fB2\fR.
  .Sp
  Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
! .IP \fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fmacro-prefix-map=old=new"
! When preprocessing files residing in directory \fIold\fR,
  expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
! files resided in directory \fInew\fR instead.  This can be used
  to change an absolute path to a relative path by using \fI.\fR for
  \&\fInew\fR which can result in more reproducible builds that are
  location independent.  This option also affects
  \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
  \&\fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fexec\-charset=\fR\fIcharset\fR 4
  .IX Item "-fexec-charset=charset"
  Set the execution character set, used for string and character
! constants.  The default is UTF\-8.  \fIcharset\fR can be any encoding
! supported by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP \fB\-fwide\-exec\-charset=\fR\fIcharset\fR 4
  .IX Item "-fwide-exec-charset=charset"
  Set the wide execution character set, used for wide string and
! character constants.  The default is one of UTF\-32BE, UTF\-32LE, UTF\-16BE,
! or UTF\-16LE, whichever corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR and the
! big\-endian or little\-endian byte order being used for code generation.  As
  with \fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
! by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
  problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
! .IP \fB\-finput\-charset=\fR\fIcharset\fR 4
  .IX Item "-finput-charset=charset"
  Set the input character set, used for translation from the character
! set of the input file to the source character set used by GCC.  If the
! locale does not specify, or GCC cannot get this information from the
! locale, the default is UTF\-8.  This can be overridden by either the locale
! or this command\-line option.  Currently the command\-line option takes
! precedence if there\*(Aqs a conflict.  \fIcharset\fR can be any encoding
! supported by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP \fB\-fpch\-deps\fR 4
  .IX Item "-fpch-deps"
  When using precompiled headers, this flag
! causes the dependency\-output flags to also list the files from the
! precompiled header\*(Aqs dependencies.  If not specified, only the
  precompiled header are listed and not the files that were used to
  create it, because those files are not consulted when a precompiled
  header is used.
! .IP \fB\-fpch\-preprocess\fR 4
  .IX Item "-fpch-preprocess"
  This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
! \&\f(CW\*(C`#pragma GCC pch_preprocess "\fR\f(CIfilename\fR\f(CW"\*(C'\fR in the output to mark
  the place where the precompiled header was found, and its \fIfilename\fR.
! When \fB\-fpreprocessed\fR is in use, GCC recognizes this \f(CW\*(C`#pragma\*(C'\fR
! and loads the PCH.
  .Sp
  This option is off by default, because the resulting preprocessed output
! is only really suitable as input to GCC.  It is switched on by
  \&\fB\-save\-temps\fR.
  .Sp
  You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
! safe to edit the filename if the PCH file is available in a different
! location.  The filename may be absolute or it may be relative to GCC\*(Aqs
  current directory.
! .IP \fB\-fworking\-directory\fR 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that
  let the compiler know the current working directory at the time of
  preprocessing.  When this option is enabled, the preprocessor
  emits, after the initial linemarker, a second linemarker with the
! current working directory followed by two slashes.  GCC uses this
! directory, when it\*(Aqs present in the preprocessed input, as the
  directory emitted as the current working directory in some debugging
  information formats.  This option is implicitly enabled if debugging
  information is enabled, but this can be inhibited with the negated
*************** it does not use shell special characters
*** 17676,17682 ****
  .IX Item "-A -predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer
  \&\fIanswer\fR.
! .IP "\fB\-C\fR" 4
  .IX Item "-C"
  Do not discard comments.  All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
--- 17611,17617 ----
  .IX Item "-A -predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer
  \&\fIanswer\fR.
! .IP \fB\-C\fR 4
  .IX Item "-C"
  Do not discard comments.  All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
*************** causes the preprocessor to treat comment
*** 17687,17730 ****
  For example, comments appearing at the start of what would be a
  directive line have the effect of turning that line into an ordinary
  source line, since the first token on the line is no longer a \fB#\fR.
! .IP "\fB\-CC\fR" 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion.  This is
  like \fB\-C\fR, except that comments contained within macros are
  also passed through to the output file where the macro is expanded.
  .Sp
  In addition to the side effects of the \fB\-C\fR option, the
! \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
  to be converted to C\-style comments.  This is to prevent later use
  of that macro from inadvertently commenting out the remainder of
  the source line.
  .Sp
  The \fB\-CC\fR option is generally used to support lint comments.
! .IP "\fB\-P\fR" 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that is
  not C code, and will be sent to a program which might be confused by the
  linemarkers.
! .IP "\fB\-traditional\fR" 4
  .IX Item "-traditional"
  .PD 0
! .IP "\fB\-traditional\-cpp\fR" 4
  .IX Item "-traditional-cpp"
  .PD
! Try to imitate the behavior of pre-standard C preprocessors, as
! opposed to \s-1ISO C\s0 preprocessors.
! See the \s-1GNU CPP\s0 manual for details.
  .Sp
! Note that \s-1GCC\s0 does not otherwise attempt to emulate a pre-standard 
  C compiler, and these options are only supported with the \fB\-E\fR 
! switch, or when invoking \s-1CPP\s0 explicitly.
! .IP "\fB\-trigraphs\fR" 4
  .IX Item "-trigraphs"
! Support \s-1ISO C\s0 trigraphs.
! These are three-character sequences, all starting with \fB??\fR, that
! are defined by \s-1ISO C\s0 to stand for single characters.  For example,
! \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
  constant for a newline.
  .Sp
  The nine trigraphs and their replacements are
--- 17622,17665 ----
  For example, comments appearing at the start of what would be a
  directive line have the effect of turning that line into an ordinary
  source line, since the first token on the line is no longer a \fB#\fR.
! .IP \fB\-CC\fR 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion.  This is
  like \fB\-C\fR, except that comments contained within macros are
  also passed through to the output file where the macro is expanded.
  .Sp
  In addition to the side effects of the \fB\-C\fR option, the
! \&\fB\-CC\fR option causes all C++\-style comments inside a macro
  to be converted to C\-style comments.  This is to prevent later use
  of that macro from inadvertently commenting out the remainder of
  the source line.
  .Sp
  The \fB\-CC\fR option is generally used to support lint comments.
! .IP \fB\-P\fR 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that is
  not C code, and will be sent to a program which might be confused by the
  linemarkers.
! .IP \fB\-traditional\fR 4
  .IX Item "-traditional"
  .PD 0
! .IP \fB\-traditional\-cpp\fR 4
  .IX Item "-traditional-cpp"
  .PD
! Try to imitate the behavior of pre\-standard C preprocessors, as
! opposed to ISO C preprocessors.
! See the GNU CPP manual for details.
  .Sp
! Note that GCC does not otherwise attempt to emulate a pre\-standard 
  C compiler, and these options are only supported with the \fB\-E\fR 
! switch, or when invoking CPP explicitly.
! .IP \fB\-trigraphs\fR 4
  .IX Item "-trigraphs"
! Support ISO C trigraphs.
! These are three\-character sequences, all starting with \fB??\fR, that
! are defined by ISO C to stand for single characters.  For example,
! \&\fB??/\fR stands for \fB\e\fR, so \fB\*(Aq??/n\*(Aq\fR is a character
  constant for a newline.
  .Sp
  The nine trigraphs and their replacements are
*************** The nine trigraphs and their replacement
*** 17734,17763 ****
  \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
  .Ve
  .Sp
! By default, \s-1GCC\s0 ignores trigraphs, but in
! standard-conforming modes it converts them.  See the \fB\-std\fR and
  \&\fB\-ansi\fR options.
! .IP "\fB\-remap\fR" 4
  .IX Item "-remap"
  Enable special code to work around file systems which only permit very
! short file names, such as MS-DOS.
! .IP "\fB\-H\fR" 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities.  Each name is indented to show how deep in the
  \&\fB#include\fR stack it is.  Precompiled header files are also
  printed, even if they are found to be invalid; an invalid precompiled
  header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
! .IP "\fB\-d\fR\fIletters\fR" 4
  .IX Item "-dletters"
  Says to make debugging dumps during compilation as specified by
  \&\fIletters\fR.  The flags documented here are those relevant to the
  preprocessor.  Other \fIletters\fR are interpreted
! by the compiler proper, or reserved for future versions of \s-1GCC,\s0 and so
  are silently ignored.  If you specify \fIletters\fR whose behavior
  conflicts, the result is undefined.
  .RS 4
! .IP "\fB\-dM\fR" 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \fB#define\fR
  directives for all the macros defined during the execution of the
--- 17669,17698 ----
  \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
  .Ve
  .Sp
! By default, GCC ignores trigraphs, but in
! standard\-conforming modes it converts them.  See the \fB\-std\fR and
  \&\fB\-ansi\fR options.
! .IP \fB\-remap\fR 4
  .IX Item "-remap"
  Enable special code to work around file systems which only permit very
! short file names, such as MS\-DOS.
! .IP \fB\-H\fR 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities.  Each name is indented to show how deep in the
  \&\fB#include\fR stack it is.  Precompiled header files are also
  printed, even if they are found to be invalid; an invalid precompiled
  header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
! .IP \fB\-d\fR\fIletters\fR 4
  .IX Item "-dletters"
  Says to make debugging dumps during compilation as specified by
  \&\fIletters\fR.  The flags documented here are those relevant to the
  preprocessor.  Other \fIletters\fR are interpreted
! by the compiler proper, or reserved for future versions of GCC, and so
  are silently ignored.  If you specify \fIletters\fR whose behavior
  conflicts, the result is undefined.
  .RS 4
! .IP \fB\-dM\fR 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \fB#define\fR
  directives for all the macros defined during the execution of the
*************** shows all the predefined macros.
*** 17773,17791 ****
  .Sp
  If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
  interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
! .IP "\fB\-dD\fR" 4
  .IX Item "-dD"
  Like \fB\-dM\fR except that it outputs \fIboth\fR the \fB#define\fR
  directives and the result of preprocessing.  Both kinds of output go to
  the standard output file.
! .IP "\fB\-dN\fR" 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP "\fB\-dI\fR" 4
  .IX Item "-dI"
  Output \fB#include\fR directives in addition to the result of
  preprocessing.
! .IP "\fB\-dU\fR" 4
  .IX Item "-dU"
  Like \fB\-dD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the
--- 17708,17726 ----
  .Sp
  If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
  interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
! .IP \fB\-dD\fR 4
  .IX Item "-dD"
  Like \fB\-dM\fR except that it outputs \fIboth\fR the \fB#define\fR
  directives and the result of preprocessing.  Both kinds of output go to
  the standard output file.
! .IP \fB\-dN\fR 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP \fB\-dI\fR 4
  .IX Item "-dI"
  Output \fB#include\fR directives in addition to the result of
  preprocessing.
! .IP \fB\-dU\fR 4
  .IX Item "-dU"
  Like \fB\-dD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the
*************** undefined at the time.
*** 17795,17847 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdebug\-cpp\fR" 4
  .IX Item "-fdebug-cpp"
! This option is only useful for debugging \s-1GCC.\s0  When used from \s-1CPP\s0 or with
  \&\fB\-E\fR, it dumps debugging information about location maps.  Every
  token in the output is preceded by the dump of the map its location
  belongs to.
  .Sp
! When used from \s-1GCC\s0 without \fB\-E\fR, this option has no effect.
! .IP "\fB\-Wp,\fR\fIoption\fR" 4
  .IX Item "-Wp,option"
  You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
  and pass \fIoption\fR directly through to the preprocessor.  If
  \&\fIoption\fR contains commas, it is split into multiple options at the
  commas.  However, many options are modified, translated or interpreted
  by the compiler driver before being passed to the preprocessor, and
! \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
  interface is undocumented and subject to change, so whenever possible
  you should avoid using \fB\-Wp\fR and let the driver handle the
  options instead.
  .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
  .IX Item "-Xpreprocessor option"
  Pass \fIoption\fR as an option to the preprocessor.  You can use this to
! supply system-specific preprocessor options that \s-1GCC\s0 does not 
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
  \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
! .IP "\fB\-no\-integrated\-cpp\fR" 4
  .IX Item "-no-integrated-cpp"
  Perform preprocessing as a separate pass before compilation.
! By default, \s-1GCC\s0 performs preprocessing as an integrated part of
  input tokenization and parsing.
  If this option is provided, the appropriate language front end
! (\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, \*(C+,
! and Objective-C, respectively) is instead invoked twice,
  once for preprocessing only and once for actual compilation
  of the preprocessed input.
  This option may be useful in conjunction with the \fB\-B\fR or
  \&\fB\-wrapper\fR options to specify an alternate preprocessor or
  perform additional processing of the program source between
  normal preprocessing and compilation.
! .IP "\fB\-flarge\-source\-files\fR" 4
  .IX Item "-flarge-source-files"
! Adjust \s-1GCC\s0 to expect large source files, at the expense of slower
  compilation and higher memory usage.
  .Sp
! Specifically, \s-1GCC\s0 normally tracks both column numbers and line numbers
  within source files and it normally prints both of these numbers in
  diagnostics.  However, once it has processed a certain number of source
  lines, it stops tracking column numbers and only tracks line numbers.
--- 17730,17782 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fdebug\-cpp\fR 4
  .IX Item "-fdebug-cpp"
! This option is only useful for debugging GCC.  When used from CPP or with
  \&\fB\-E\fR, it dumps debugging information about location maps.  Every
  token in the output is preceded by the dump of the map its location
  belongs to.
  .Sp
! When used from GCC without \fB\-E\fR, this option has no effect.
! .IP \fB\-Wp,\fR\fIoption\fR 4
  .IX Item "-Wp,option"
  You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
  and pass \fIoption\fR directly through to the preprocessor.  If
  \&\fIoption\fR contains commas, it is split into multiple options at the
  commas.  However, many options are modified, translated or interpreted
  by the compiler driver before being passed to the preprocessor, and
! \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor\*(Aqs direct
  interface is undocumented and subject to change, so whenever possible
  you should avoid using \fB\-Wp\fR and let the driver handle the
  options instead.
  .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
  .IX Item "-Xpreprocessor option"
  Pass \fIoption\fR as an option to the preprocessor.  You can use this to
! supply system\-specific preprocessor options that GCC does not 
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
  \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
! .IP \fB\-no\-integrated\-cpp\fR 4
  .IX Item "-no-integrated-cpp"
  Perform preprocessing as a separate pass before compilation.
! By default, GCC performs preprocessing as an integrated part of
  input tokenization and parsing.
  If this option is provided, the appropriate language front end
! (\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, C++,
! and Objective\-C, respectively) is instead invoked twice,
  once for preprocessing only and once for actual compilation
  of the preprocessed input.
  This option may be useful in conjunction with the \fB\-B\fR or
  \&\fB\-wrapper\fR options to specify an alternate preprocessor or
  perform additional processing of the program source between
  normal preprocessing and compilation.
! .IP \fB\-flarge\-source\-files\fR 4
  .IX Item "-flarge-source-files"
! Adjust GCC to expect large source files, at the expense of slower
  compilation and higher memory usage.
  .Sp
! Specifically, GCC normally tracks both column numbers and line numbers
  within source files and it normally prints both of these numbers in
  diagnostics.  However, once it has processed a certain number of source
  lines, it stops tracking column numbers and only tracks line numbers.
*************** This means that diagnostics for later li
*** 17849,17866 ****
  It also means that options like \fB\-Wmisleading\-indentation\fR cease to work
  at that point, although the compiler prints a note if this happens.
  Passing \fB\-flarge\-source\-files\fR significantly increases the number
! of source lines that \s-1GCC\s0 can process before it stops tracking columns.
  .SS "Passing Options to the Assembler"
  .IX Subsection "Passing Options to the Assembler"
  You can pass options to the assembler.
! .IP "\fB\-Wa,\fR\fIoption\fR" 4
  .IX Item "-Wa,option"
  Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
  contains commas, it is split into multiple options at the commas.
  .IP "\fB\-Xassembler\fR \fIoption\fR" 4
  .IX Item "-Xassembler option"
  Pass \fIoption\fR as an option to the assembler.  You can use this to
! supply system-specific assembler options that \s-1GCC\s0 does not
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
--- 17784,17801 ----
  It also means that options like \fB\-Wmisleading\-indentation\fR cease to work
  at that point, although the compiler prints a note if this happens.
  Passing \fB\-flarge\-source\-files\fR significantly increases the number
! of source lines that GCC can process before it stops tracking columns.
  .SS "Passing Options to the Assembler"
  .IX Subsection "Passing Options to the Assembler"
  You can pass options to the assembler.
! .IP \fB\-Wa,\fR\fIoption\fR 4
  .IX Item "-Wa,option"
  Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
  contains commas, it is split into multiple options at the commas.
  .IP "\fB\-Xassembler\fR \fIoption\fR" 4
  .IX Item "-Xassembler option"
  Pass \fIoption\fR as an option to the assembler.  You can use this to
! supply system\-specific assembler options that GCC does not
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
*************** If you want to pass an option that takes
*** 17870,17898 ****
  These options come into play when the compiler links object files into
  an executable output file.  They are meaningless if the compiler is
  not doing a link step.
! .IP "\fIobject-file-name\fR" 4
  .IX Item "object-file-name"
  A file name that does not end in a special recognized suffix is
  considered to name an object file or library.  (Object files are
  distinguished from libraries by the linker according to the file
  contents.)  If linking is done, these object files are used as input
  to the linker.
! .IP "\fB\-c\fR" 4
  .IX Item "-c"
  .PD 0
! .IP "\fB\-S\fR" 4
  .IX Item "-S"
! .IP "\fB\-E\fR" 4
  .IX Item "-E"
  .PD
  If any of these options is used, then the linker is not run, and
  object file names should not be used as arguments.
! .IP "\fB\-flinker\-output=\fR\fItype\fR" 4
  .IX Item "-flinker-output=type"
! This option controls code generation of the link-time optimizer.  By
  default the linker output is automatically determined by the linker
  plugin.  For debugging the compiler and if incremental linking with a 
! non-LTO object file is desired, it may be useful to control the type
  manually.
  .Sp
  If \fItype\fR is \fBexec\fR, code generation produces a static
--- 17805,17833 ----
  These options come into play when the compiler links object files into
  an executable output file.  They are meaningless if the compiler is
  not doing a link step.
! .IP \fIobject\-file\-name\fR 4
  .IX Item "object-file-name"
  A file name that does not end in a special recognized suffix is
  considered to name an object file or library.  (Object files are
  distinguished from libraries by the linker according to the file
  contents.)  If linking is done, these object files are used as input
  to the linker.
! .IP \fB\-c\fR 4
  .IX Item "-c"
  .PD 0
! .IP \fB\-S\fR 4
  .IX Item "-S"
! .IP \fB\-E\fR 4
  .IX Item "-E"
  .PD
  If any of these options is used, then the linker is not run, and
  object file names should not be used as arguments.
! .IP \fB\-flinker\-output=\fR\fItype\fR 4
  .IX Item "-flinker-output=type"
! This option controls code generation of the link\-time optimizer.  By
  default the linker output is automatically determined by the linker
  plugin.  For debugging the compiler and if incremental linking with a 
! non\-LTO object file is desired, it may be useful to control the type
  manually.
  .Sp
  If \fItype\fR is \fBexec\fR, code generation produces a static
*************** disabled.
*** 17902,17908 ****
  If \fItype\fR is \fBdyn\fR, code generation produces a shared
  library.  In this case \fB\-fpic\fR or \fB\-fPIC\fR is preserved,
  but not enabled automatically.  This allows to build shared libraries
! without position-independent code on architectures where this is
  possible, i.e. on x86.
  .Sp
  If \fItype\fR is \fBpie\fR, code generation produces an \fB\-fpie\fR
--- 17837,17843 ----
  If \fItype\fR is \fBdyn\fR, code generation produces a shared
  library.  In this case \fB\-fpic\fR or \fB\-fPIC\fR is preserved,
  but not enabled automatically.  This allows to build shared libraries
! without position\-independent code on architectures where this is
  possible, i.e. on x86.
  .Sp
  If \fItype\fR is \fBpie\fR, code generation produces an \fB\-fpie\fR
*************** except that \fB\-fpie\fR is not disabled
*** 17911,17952 ****
  time.
  .Sp
  If \fItype\fR is \fBrel\fR, the compiler assumes that incremental linking is
! done.  The sections containing intermediate code for link-time optimization are
! merged, pre-optimized, and output to the resulting object file. In addition, if
  \&\fB\-ffat\-lto\-objects\fR is specified, binary code is produced for future
! non-LTO linking. The object file produced by incremental linking is smaller
  than a static library produced from the same object files.  At link time the
  result of incremental linking also loads faster than a static
  library assuming that the majority of objects in the library are used.
  .Sp
! Finally \fBnolto-rel\fR configures the compiler for incremental linking where
  code generation is forced, a final binary is produced, and the intermediate
! code for later link-time optimization is stripped. When multiple object files
  are linked together the resulting code is better optimized than with
! link-time optimizations disabled (for example, cross-module inlining 
  happens), but most of benefits of whole program optimizations are lost.
  .Sp
  During the incremental link (by \fB\-r\fR) the linker plugin defaults to
! \&\fBrel\fR. With current interfaces to \s-1GNU\s0 Binutils it is however not
! possible to incrementally link \s-1LTO\s0 objects and non-LTO objects into a single
  mixed object file.  If any of object files in incremental link cannot
! be used for link-time optimization, the linker plugin issues a warning and
! uses \fBnolto-rel\fR. To maintain whole program optimization, it is
  recommended to link such objects into static library instead. Alternatively it
! is possible to use H.J. Lu's binutils with support for mixed objects.
! .IP "\fB\-fuse\-ld=bfd\fR" 4
  .IX Item "-fuse-ld=bfd"
  Use the \fBbfd\fR linker instead of the default linker.
! .IP "\fB\-fuse\-ld=gold\fR" 4
  .IX Item "-fuse-ld=gold"
  Use the \fBgold\fR linker instead of the default linker.
! .IP "\fB\-fuse\-ld=lld\fR" 4
  .IX Item "-fuse-ld=lld"
! Use the \s-1LLVM\s0 \fBlld\fR linker instead of the default linker.
! .IP "\fB\-fuse\-ld=mold\fR" 4
  .IX Item "-fuse-ld=mold"
  Use the Modern Linker (\fBmold\fR) instead of the default linker.
! .IP "\fB\-l\fR\fIlibrary\fR" 4
  .IX Item "-llibrary"
  .PD 0
  .IP "\fB\-l\fR \fIlibrary\fR" 4
--- 17846,17887 ----
  time.
  .Sp
  If \fItype\fR is \fBrel\fR, the compiler assumes that incremental linking is
! done.  The sections containing intermediate code for link\-time optimization are
! merged, pre\-optimized, and output to the resulting object file. In addition, if
  \&\fB\-ffat\-lto\-objects\fR is specified, binary code is produced for future
! non\-LTO linking. The object file produced by incremental linking is smaller
  than a static library produced from the same object files.  At link time the
  result of incremental linking also loads faster than a static
  library assuming that the majority of objects in the library are used.
  .Sp
! Finally \fBnolto\-rel\fR configures the compiler for incremental linking where
  code generation is forced, a final binary is produced, and the intermediate
! code for later link\-time optimization is stripped. When multiple object files
  are linked together the resulting code is better optimized than with
! link\-time optimizations disabled (for example, cross\-module inlining 
  happens), but most of benefits of whole program optimizations are lost.
  .Sp
  During the incremental link (by \fB\-r\fR) the linker plugin defaults to
! \&\fBrel\fR. With current interfaces to GNU Binutils it is however not
! possible to incrementally link LTO objects and non\-LTO objects into a single
  mixed object file.  If any of object files in incremental link cannot
! be used for link\-time optimization, the linker plugin issues a warning and
! uses \fBnolto\-rel\fR. To maintain whole program optimization, it is
  recommended to link such objects into static library instead. Alternatively it
! is possible to use H.J. Lu\*(Aqs binutils with support for mixed objects.
! .IP \fB\-fuse\-ld=bfd\fR 4
  .IX Item "-fuse-ld=bfd"
  Use the \fBbfd\fR linker instead of the default linker.
! .IP \fB\-fuse\-ld=gold\fR 4
  .IX Item "-fuse-ld=gold"
  Use the \fBgold\fR linker instead of the default linker.
! .IP \fB\-fuse\-ld=lld\fR 4
  .IX Item "-fuse-ld=lld"
! Use the LLVM \fBlld\fR linker instead of the default linker.
! .IP \fB\-fuse\-ld=mold\fR 4
  .IX Item "-fuse-ld=mold"
  Use the Modern Linker (\fBmold\fR) instead of the default linker.
! .IP \fB\-l\fR\fIlibrary\fR 4
  .IX Item "-llibrary"
  .PD 0
  .IP "\fB\-l\fR \fIlibrary\fR" 4
*************** Use the Modern Linker (\fBmold\fR) inste
*** 17954,17972 ****
  .PD
  Search the library named \fIlibrary\fR when linking.  (The second
  alternative with the library as a separate argument is only for
! \&\s-1POSIX\s0 compliance and is not recommended.)
  .Sp
! The \fB\-l\fR option is passed directly to the linker by \s-1GCC.\s0  Refer
  to your linker documentation for exact details.  The general
! description below applies to the \s-1GNU\s0 linker.
  .Sp
  The linker searches a standard list of directories for the library.
  The directories searched include several standard system directories
  plus any that you specify with \fB\-L\fR.
  .Sp
  Static libraries are archives of object files, and have file names
! like \fIlib\fIlibrary\fI.a\fR.  Some targets also support shared
! libraries, which typically have names like \fIlib\fIlibrary\fI.so\fR.
  If both static and shared libraries are found, the linker gives
  preference to linking with the shared library unless the
  \&\fB\-static\fR option is used.
--- 17889,17907 ----
  .PD
  Search the library named \fIlibrary\fR when linking.  (The second
  alternative with the library as a separate argument is only for
! POSIX compliance and is not recommended.)
  .Sp
! The \fB\-l\fR option is passed directly to the linker by GCC.  Refer
  to your linker documentation for exact details.  The general
! description below applies to the GNU linker.
  .Sp
  The linker searches a standard list of directories for the library.
  The directories searched include several standard system directories
  plus any that you specify with \fB\-L\fR.
  .Sp
  Static libraries are archives of object files, and have file names
! like \fIliblibrary.a\fR.  Some targets also support shared
! libraries, which typically have names like \fIliblibrary.so\fR.
  If both static and shared libraries are found, the linker gives
  preference to linking with the shared library unless the
  \&\fB\-static\fR option is used.
*************** linker searches and processes libraries
*** 17976,17991 ****
  are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
  after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
  to functions in \fBz\fR, those functions may not be loaded.
! .IP "\fB\-lobjc\fR" 4
  .IX Item "-lobjc"
  You need this special case of the \fB\-l\fR option in order to
! link an Objective-C or Objective\-\*(C+ program.
! .IP "\fB\-nostartfiles\fR" 4
  .IX Item "-nostartfiles"
  Do not use the standard system startup files when linking.
  The standard system libraries are used normally, unless \fB\-nostdlib\fR,
  \&\fB\-nolibc\fR, or \fB\-nodefaultlibs\fR is used.
! .IP "\fB\-nodefaultlibs\fR" 4
  .IX Item "-nodefaultlibs"
  Do not use the standard system libraries when linking.
  Only the libraries you specify are passed to the linker, and options
--- 17911,17926 ----
  are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
  after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
  to functions in \fBz\fR, those functions may not be loaded.
! .IP \fB\-lobjc\fR 4
  .IX Item "-lobjc"
  You need this special case of the \fB\-l\fR option in order to
! link an Objective\-C or Objective\-C++ program.
! .IP \fB\-nostartfiles\fR 4
  .IX Item "-nostartfiles"
  Do not use the standard system startup files when linking.
  The standard system libraries are used normally, unless \fB\-nostdlib\fR,
  \&\fB\-nolibc\fR, or \fB\-nodefaultlibs\fR is used.
! .IP \fB\-nodefaultlibs\fR 4
  .IX Item "-nodefaultlibs"
  Do not use the standard system libraries when linking.
  Only the libraries you specify are passed to the linker, and options
*************** The compiler may generate calls to \f(CW
*** 17999,18005 ****
  These entries are usually resolved by entries in
  libc.  These entry points should be supplied through some other
  mechanism when this option is specified.
! .IP "\fB\-nolibc\fR" 4
  .IX Item "-nolibc"
  Do not use the C library or system libraries tightly coupled with it when
  linking.  Still link with the startup files, \fIlibgcc\fR or toolchain
--- 17934,17940 ----
  These entries are usually resolved by entries in
  libc.  These entry points should be supplied through some other
  mechanism when this option is specified.
! .IP \fB\-nolibc\fR 4
  .IX Item "-nolibc"
  Do not use the C library or system libraries tightly coupled with it when
  linking.  Still link with the startup files, \fIlibgcc\fR or toolchain
*************** or \fIlibstdc++\fR unless options preven
*** 18008,18016 ****
  well.  This typically removes \fB\-lc\fR from the link command line, as well
  as system libraries that normally go with it and become meaningless when
  absence of a C library is assumed, for example \fB\-lpthread\fR or
! \&\fB\-lm\fR in some configurations.  This is intended for bare-board
  targets when there is indeed no C library available.
! .IP "\fB\-nostdlib\fR" 4
  .IX Item "-nostdlib"
  Do not use the standard system startup files or libraries when linking.
  No startup files and only the libraries you specify are passed to
--- 17943,17951 ----
  well.  This typically removes \fB\-lc\fR from the link command line, as well
  as system libraries that normally go with it and become meaningless when
  absence of a C library is assumed, for example \fB\-lpthread\fR or
! \&\fB\-lm\fR in some configurations.  This is intended for bare\-board
  targets when there is indeed no C library available.
! .IP \fB\-nostdlib\fR 4
  .IX Item "-nostdlib"
  Do not use the standard system startup files or libraries when linking.
  No startup files and only the libraries you specify are passed to
*************** mechanism when this option is specified.
*** 18025,18062 ****
  .Sp
  One of the standard libraries bypassed by \fB\-nostdlib\fR and
  \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
! which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
  needs for some languages.
  .Sp
  In most cases, you need \fIlibgcc.a\fR even when you want to avoid
  other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
  or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
! This ensures that you have no unresolved references to internal \s-1GCC\s0
  library subroutines.
! (An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure \*(C+
  constructors are called.)
! .IP "\fB\-nostdlib++\fR" 4
  .IX Item "-nostdlib++"
! Do not implicitly link with standard \*(C+ libraries.
  .IP "\fB\-e\fR \fIentry\fR" 4
  .IX Item "-e entry"
  .PD 0
! .IP "\fB\-\-entry=\fR\fIentry\fR" 4
  .IX Item "--entry=entry"
  .PD
  Specify that the program entry point is \fIentry\fR.  The argument is
! interpreted by the linker; the \s-1GNU\s0 linker accepts either a symbol name
  or an address.
! .IP "\fB\-pie\fR" 4
  .IX Item "-pie"
  Produce a dynamically linked position independent executable on targets
  that support it.  For predictable results, you must also specify the same
  set of options used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
  or model suboptions) when you specify this linker option.
! .IP "\fB\-no\-pie\fR" 4
  .IX Item "-no-pie"
! Don't produce a dynamically linked position independent executable.
! .IP "\fB\-static\-pie\fR" 4
  .IX Item "-static-pie"
  Produce a static position independent executable on targets that support
  it.  A static position independent executable is similar to a static
--- 17960,17997 ----
  .Sp
  One of the standard libraries bypassed by \fB\-nostdlib\fR and
  \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
! which GCC uses to overcome shortcomings of particular machines, or special
  needs for some languages.
  .Sp
  In most cases, you need \fIlibgcc.a\fR even when you want to avoid
  other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
  or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
! This ensures that you have no unresolved references to internal GCC
  library subroutines.
! (An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure C++
  constructors are called.)
! .IP \fB\-nostdlib++\fR 4
  .IX Item "-nostdlib++"
! Do not implicitly link with standard C++ libraries.
  .IP "\fB\-e\fR \fIentry\fR" 4
  .IX Item "-e entry"
  .PD 0
! .IP \fB\-\-entry=\fR\fIentry\fR 4
  .IX Item "--entry=entry"
  .PD
  Specify that the program entry point is \fIentry\fR.  The argument is
! interpreted by the linker; the GNU linker accepts either a symbol name
  or an address.
! .IP \fB\-pie\fR 4
  .IX Item "-pie"
  Produce a dynamically linked position independent executable on targets
  that support it.  For predictable results, you must also specify the same
  set of options used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
  or model suboptions) when you specify this linker option.
! .IP \fB\-no\-pie\fR 4
  .IX Item "-no-pie"
! Don\*(Aqt produce a dynamically linked position independent executable.
! .IP \fB\-static\-pie\fR 4
  .IX Item "-static-pie"
  Produce a static position independent executable on targets that support
  it.  A static position independent executable is similar to a static
*************** executable, but can be loaded at any add
*** 18064,18106 ****
  For predictable results, you must also specify the same set of options
  used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR, or model
  suboptions) when you specify this linker option.
! .IP "\fB\-pthread\fR" 4
  .IX Item "-pthread"
! Link with the \s-1POSIX\s0 threads library.  This option is supported on 
  GNU/Linux targets, most other Unix derivatives, and also on 
  x86 Cygwin and MinGW targets.  On some targets this option also sets 
  flags for the preprocessor, so it should be used consistently for both
  compilation and linking.
! .IP "\fB\-r\fR" 4
  .IX Item "-r"
  Produce a relocatable object as output.  This is also known as partial
  linking.
! .IP "\fB\-rdynamic\fR" 4
  .IX Item "-rdynamic"
! Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
  that support it. This instructs the linker to add all symbols, not
  only used ones, to the dynamic symbol table. This option is needed
  for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
  from within a program.
! .IP "\fB\-s\fR" 4
  .IX Item "-s"
  Remove all symbol table and relocation information from the executable.
! .IP "\fB\-static\fR" 4
  .IX Item "-static"
  On systems that support dynamic linking, this overrides \fB\-pie\fR
  and prevents linking with the shared libraries.  On other systems, this
  option has no effect.
! .IP "\fB\-shared\fR" 4
  .IX Item "-shared"
  Produce a shared object which can then be linked with other objects to
  form an executable.  Not all systems support this option.  For predictable
  results, you must also specify the same set of options used for compilation
  (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
  you specify this linker option.[1]
! .IP "\fB\-shared\-libgcc\fR" 4
  .IX Item "-shared-libgcc"
  .PD 0
! .IP "\fB\-static\-libgcc\fR" 4
  .IX Item "-static-libgcc"
  .PD
  On systems that provide \fIlibgcc\fR as a shared library, these options
--- 17999,18041 ----
  For predictable results, you must also specify the same set of options
  used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR, or model
  suboptions) when you specify this linker option.
! .IP \fB\-pthread\fR 4
  .IX Item "-pthread"
! Link with the POSIX threads library.  This option is supported on 
  GNU/Linux targets, most other Unix derivatives, and also on 
  x86 Cygwin and MinGW targets.  On some targets this option also sets 
  flags for the preprocessor, so it should be used consistently for both
  compilation and linking.
! .IP \fB\-r\fR 4
  .IX Item "-r"
  Produce a relocatable object as output.  This is also known as partial
  linking.
! .IP \fB\-rdynamic\fR 4
  .IX Item "-rdynamic"
! Pass the flag \fB\-export\-dynamic\fR to the ELF linker, on targets
  that support it. This instructs the linker to add all symbols, not
  only used ones, to the dynamic symbol table. This option is needed
  for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
  from within a program.
! .IP \fB\-s\fR 4
  .IX Item "-s"
  Remove all symbol table and relocation information from the executable.
! .IP \fB\-static\fR 4
  .IX Item "-static"
  On systems that support dynamic linking, this overrides \fB\-pie\fR
  and prevents linking with the shared libraries.  On other systems, this
  option has no effect.
! .IP \fB\-shared\fR 4
  .IX Item "-shared"
  Produce a shared object which can then be linked with other objects to
  form an executable.  Not all systems support this option.  For predictable
  results, you must also specify the same set of options used for compilation
  (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
  you specify this linker option.[1]
! .IP \fB\-shared\-libgcc\fR 4
  .IX Item "-shared-libgcc"
  .PD 0
! .IP \fB\-static\-libgcc\fR 4
  .IX Item "-static-libgcc"
  .PD
  On systems that provide \fIlibgcc\fR as a shared library, these options
*************** across different shared libraries.  In t
*** 18115,18127 ****
  as well as the application itself should use the shared \fIlibgcc\fR.
  .Sp
  Therefore, the G++ driver automatically adds \fB\-shared\-libgcc\fR
! whenever you build a shared library or a main executable, because \*(C+
  programs typically use exceptions, so this is the right thing to do.
  .Sp
! If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
  find that they are not always linked with the shared \fIlibgcc\fR.
! If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
! or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
  it links the shared version of \fIlibgcc\fR into shared libraries
  by default.  Otherwise, it takes advantage of the linker and optimizes
  away the linking with the shared version of \fIlibgcc\fR, linking with
--- 18050,18062 ----
  as well as the application itself should use the shared \fIlibgcc\fR.
  .Sp
  Therefore, the G++ driver automatically adds \fB\-shared\-libgcc\fR
! whenever you build a shared library or a main executable, because C++
  programs typically use exceptions, so this is the right thing to do.
  .Sp
! If, instead, you use the GCC driver to create shared libraries, you may
  find that they are not always linked with the shared \fIlibgcc\fR.
! If GCC finds, at its configuration time, that you have a non\-GNU linker
! or a GNU linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
  it links the shared version of \fIlibgcc\fR into shared libraries
  by default.  Otherwise, it takes advantage of the linker and optimizes
  away the linking with the shared version of \fIlibgcc\fR, linking with
*************** However, if a library or main executable
*** 18133,18177 ****
  exceptions, you must link it using the G++ driver, or using the option
  \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
  \&\fIlibgcc\fR.
! .IP "\fB\-static\-libasan\fR" 4
  .IX Item "-static-libasan"
  When the \fB\-fsanitize=address\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBlibasan\fR.  If
  \&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the \s-1GCC\s0
  driver to link \fIlibasan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-libtsan\fR" 4
  .IX Item "-static-libtsan"
  When the \fB\-fsanitize=thread\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBlibtsan\fR.  If
  \&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the \s-1GCC\s0
  driver to link \fIlibtsan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-liblsan\fR" 4
  .IX Item "-static-liblsan"
  When the \fB\-fsanitize=leak\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBliblsan\fR.  If
  \&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the \s-1GCC\s0
  driver to link \fIliblsan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-libubsan\fR" 4
  .IX Item "-static-libubsan"
  When the \fB\-fsanitize=undefined\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBlibubsan\fR.  If
  \&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the \s-1GCC\s0
  driver to link \fIlibubsan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-libstdc++\fR" 4
  .IX Item "-static-libstdc++"
! When the \fBg++\fR program is used to link a \*(C+ program, it
  normally automatically links against \fBlibstdc++\fR.  If
  \&\fIlibstdc++\fR is available as a shared library, and the
  \&\fB\-static\fR option is not used, then this links against the
--- 18068,18112 ----
  exceptions, you must link it using the G++ driver, or using the option
  \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
  \&\fIlibgcc\fR.
! .IP \fB\-static\-libasan\fR 4
  .IX Item "-static-libasan"
  When the \fB\-fsanitize=address\fR option is used to link a program,
! the GCC driver automatically links against \fBlibasan\fR.  If
  \&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the GCC
  driver to link \fIlibasan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-libtsan\fR 4
  .IX Item "-static-libtsan"
  When the \fB\-fsanitize=thread\fR option is used to link a program,
! the GCC driver automatically links against \fBlibtsan\fR.  If
  \&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the GCC
  driver to link \fIlibtsan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-liblsan\fR 4
  .IX Item "-static-liblsan"
  When the \fB\-fsanitize=leak\fR option is used to link a program,
! the GCC driver automatically links against \fBliblsan\fR.  If
  \&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the GCC
  driver to link \fIliblsan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-libubsan\fR 4
  .IX Item "-static-libubsan"
  When the \fB\-fsanitize=undefined\fR option is used to link a program,
! the GCC driver automatically links against \fBlibubsan\fR.  If
  \&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the GCC
  driver to link \fIlibubsan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-libstdc++\fR 4
  .IX Item "-static-libstdc++"
! When the \fBg++\fR program is used to link a C++ program, it
  normally automatically links against \fBlibstdc++\fR.  If
  \&\fIlibstdc++\fR is available as a shared library, and the
  \&\fB\-static\fR option is not used, then this links against the
*************** the program without going all the way to
*** 18181,18187 ****
  \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
  link \fIlibstdc++\fR statically, without necessarily linking other
  libraries statically.
! .IP "\fB\-symbolic\fR" 4
  .IX Item "-symbolic"
  Bind references to global symbols when building a shared object.  Warn
  about any unresolved references (unless overridden by the link editor
--- 18116,18122 ----
  \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
  link \fIlibstdc++\fR statically, without necessarily linking other
  libraries statically.
! .IP \fB\-symbolic\fR 4
  .IX Item "-symbolic"
  Bind references to global symbols when building a shared object.  Warn
  about any unresolved references (unless overridden by the link editor
*************** this option.
*** 18190,18223 ****
  .IP "\fB\-T\fR \fIscript\fR" 4
  .IX Item "-T script"
  Use \fIscript\fR as the linker script.  This option is supported by most
! systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
  targets without an operating system, the \fB\-T\fR option may be required
  when linking to avoid references to undefined symbols.
  .IP "\fB\-Xlinker\fR \fIoption\fR" 4
  .IX Item "-Xlinker option"
  Pass \fIoption\fR as an option to the linker.  You can use this to
! supply system-specific linker options that \s-1GCC\s0 does not recognize.
  .Sp
  If you want to pass an option that takes a separate argument, you must use
  \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
  For example, to pass \fB\-assert definitions\fR, you must write
  \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
! \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
  string as a single argument, which is not what the linker expects.
  .Sp
! When using the \s-1GNU\s0 linker, it is usually more convenient to pass
  arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
  syntax than as separate arguments.  For example, you can specify
  \&\fB\-Xlinker \-Map=output.map\fR rather than
  \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
! this syntax for command-line options.
! .IP "\fB\-Wl,\fR\fIoption\fR" 4
  .IX Item "-Wl,option"
  Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
  commas, it is split into multiple options at the commas.  You can use this
  syntax to pass an argument to the option.
  For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
! linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
  \&\fB\-Wl,\-Map=output.map\fR.
  .IP "\fB\-u\fR \fIsymbol\fR" 4
  .IX Item "-u symbol"
--- 18125,18158 ----
  .IP "\fB\-T\fR \fIscript\fR" 4
  .IX Item "-T script"
  Use \fIscript\fR as the linker script.  This option is supported by most
! systems using the GNU linker.  On some targets, such as bare\-board
  targets without an operating system, the \fB\-T\fR option may be required
  when linking to avoid references to undefined symbols.
  .IP "\fB\-Xlinker\fR \fIoption\fR" 4
  .IX Item "-Xlinker option"
  Pass \fIoption\fR as an option to the linker.  You can use this to
! supply system\-specific linker options that GCC does not recognize.
  .Sp
  If you want to pass an option that takes a separate argument, you must use
  \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
  For example, to pass \fB\-assert definitions\fR, you must write
  \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
! \&\fB\-Xlinker "\-assert definitions"\fR, because this passes the entire
  string as a single argument, which is not what the linker expects.
  .Sp
! When using the GNU linker, it is usually more convenient to pass
  arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
  syntax than as separate arguments.  For example, you can specify
  \&\fB\-Xlinker \-Map=output.map\fR rather than
  \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
! this syntax for command\-line options.
! .IP \fB\-Wl,\fR\fIoption\fR 4
  .IX Item "-Wl,option"
  Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
  commas, it is split into multiple options at the commas.  You can use this
  syntax to pass an argument to the option.
  For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
! linker.  When using the GNU linker, you can also get the same effect with
  \&\fB\-Wl,\-Map=output.map\fR.
  .IP "\fB\-u\fR \fIsymbol\fR" 4
  .IX Item "-u symbol"
*************** or \f(CW$SYSROOT\fR is replaced by the s
*** 18250,18289 ****
  \&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .Sp
  Directories specified with \fB\-iquote\fR apply only to the quote 
! form of the directive, \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
  Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
  or \fB\-idirafter\fR apply to lookup for both the
! \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR and
! \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR directives.
  .Sp
  You can specify any number or combination of these options on the 
  command line to search for header files in several directories.  
  The lookup order is as follows:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  For the quote form of the include directive, the directory of the current
  file is searched first.
! .IP "2." 4
  .IX Item "2."
  For the quote form of the include directive, the directories specified
! by \fB\-iquote\fR options are searched in left-to-right order,
  as they appear on the command line.
! .IP "3." 4
  .IX Item "3."
  Directories specified with \fB\-I\fR options are scanned in
! left-to-right order.
! .IP "4." 4
  .IX Item "4."
  Directories specified with \fB\-isystem\fR options are scanned in
! left-to-right order.
! .IP "5." 4
  .IX Item "5."
  Standard system directories are scanned.
! .IP "6." 4
  .IX Item "6."
  Directories specified with \fB\-idirafter\fR options are scanned in
! left-to-right order.
  .RE
  .RS 4
  .Sp
--- 18185,18224 ----
  \&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .Sp
  Directories specified with \fB\-iquote\fR apply only to the quote 
! form of the directive, \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR.
  Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
  or \fB\-idirafter\fR apply to lookup for both the
! \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR and
! \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR directives.
  .Sp
  You can specify any number or combination of these options on the 
  command line to search for header files in several directories.  
  The lookup order is as follows:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  For the quote form of the include directive, the directory of the current
  file is searched first.
! .IP 2. 4
  .IX Item "2."
  For the quote form of the include directive, the directories specified
! by \fB\-iquote\fR options are searched in left\-to\-right order,
  as they appear on the command line.
! .IP 3. 4
  .IX Item "3."
  Directories specified with \fB\-I\fR options are scanned in
! left\-to\-right order.
! .IP 4. 4
  .IX Item "4."
  Directories specified with \fB\-isystem\fR options are scanned in
! left\-to\-right order.
! .IP 5. 4
  .IX Item "5."
  Standard system directories are scanned.
! .IP 6. 4
  .IX Item "6."
  Directories specified with \fB\-idirafter\fR options are scanned in
! left\-to\-right order.
  .RE
  .RS 4
  .Sp
*************** You can use \fB\-I\fR to override a syst
*** 18291,18297 ****
  file, substituting your own version, since these directories are
  searched before the standard system header file directories.  
  However, you should
! not use this option to add directories that contain vendor-supplied
  system header files; use \fB\-isystem\fR for that.
  .Sp
  The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
--- 18226,18232 ----
  file, substituting your own version, since these directories are
  searched before the standard system header file directories.  
  However, you should
! not use this option to add directories that contain vendor\-supplied
  system header files; use \fB\-isystem\fR for that.
  .Sp
  The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
*************** If a standard system include directory,
*** 18302,18314 ****
  \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
  option is ignored.  The directory is still searched but as a
  system directory at its normal position in the system include chain.
! This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
  the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
  changed.
  If you really need to change the search order for system directories,
  use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
  .RE
! .IP "\fB\-I\-\fR" 4
  .IX Item "-I-"
  Split the include path.
  This option has been deprecated.  Please use \fB\-iquote\fR instead for
--- 18237,18249 ----
  \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
  option is ignored.  The directory is still searched but as a
  system directory at its normal position in the system include chain.
! This is to ensure that GCC\*(Aqs procedure to fix buggy system headers and
  the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
  changed.
  If you really need to change the search order for system directories,
  use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
  .RE
! .IP \fB\-I\-\fR 4
  .IX Item "-I-"
  Split the include path.
  This option has been deprecated.  Please use \fB\-iquote\fR instead for
*************** option.
*** 18317,18329 ****
  .Sp
  Any directories specified with \fB\-I\fR
  options before \fB\-I\-\fR are searched only for headers requested with
! \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
! \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
  specified with \fB\-I\fR options after the \fB\-I\-\fR, those
  directories are searched for all \fB#include\fR directives.
  .Sp
  In addition, \fB\-I\-\fR inhibits the use of the directory of the current
! file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
--- 18252,18264 ----
  .Sp
  Any directories specified with \fB\-I\fR
  options before \fB\-I\-\fR are searched only for headers requested with
! \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR; they are not searched for
! \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR.  If additional directories are
  specified with \fB\-I\fR options after the \fB\-I\-\fR, those
  directories are searched for all \fB#include\fR directives.
  .Sp
  In addition, \fB\-I\-\fR inhibits the use of the directory of the current
! file directory as the first search directory for \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
*************** information.
*** 18348,18377 ****
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the directory containing
! target-specific \*(C+ headers.
! .IP "\fB\-nostdinc\fR" 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files.
  Only the directories explicitly specified with \fB\-I\fR,
  \&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
  options (and the directory of the current file, if appropriate) 
  are searched.
! .IP "\fB\-nostdinc++\fR" 4
  .IX Item "-nostdinc++"
! Do not search for header files in the \*(C+\-specific standard directories,
  but do still search the other standard directories.  (This option is
! used when building the \*(C+ library.)
! .IP "\fB\-iplugindir=\fR\fIdir\fR" 4
  .IX Item "-iplugindir=dir"
  Set the directory to search for plugins that are passed
  by \fB\-fplugin=\fR\fIname\fR instead of
  \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
  to be used by the user, but only passed by the driver.
! .IP "\fB\-L\fR\fIdir\fR" 4
  .IX Item "-Ldir"
  Add directory \fIdir\fR to the list of directories to be searched
  for \fB\-l\fR.
! .IP "\fB\-B\fR\fIprefix\fR" 4
  .IX Item "-Bprefix"
  This option specifies where to find the executables, libraries,
  include files, and data files of the compiler itself.
--- 18283,18312 ----
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the directory containing
! target\-specific C++ headers.
! .IP \fB\-nostdinc\fR 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files.
  Only the directories explicitly specified with \fB\-I\fR,
  \&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
  options (and the directory of the current file, if appropriate) 
  are searched.
! .IP \fB\-nostdinc++\fR 4
  .IX Item "-nostdinc++"
! Do not search for header files in the C++\-specific standard directories,
  but do still search the other standard directories.  (This option is
! used when building the C++ library.)
! .IP \fB\-iplugindir=\fR\fIdir\fR 4
  .IX Item "-iplugindir=dir"
  Set the directory to search for plugins that are passed
  by \fB\-fplugin=\fR\fIname\fR instead of
  \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
  to be used by the user, but only passed by the driver.
! .IP \fB\-L\fR\fIdir\fR 4
  .IX Item "-Ldir"
  Add directory \fIdir\fR to the list of directories to be searched
  for \fB\-l\fR.
! .IP \fB\-B\fR\fIprefix\fR 4
  .IX Item "-Bprefix"
  This option specifies where to find the executables, libraries,
  include files, and data files of the compiler itself.
*************** is not specified, the driver tries two s
*** 18388,18394 ****
  \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
  those results in a file name that is found, the unmodified program
  name is searched for using the directories specified in your
! \&\fB\s-1PATH\s0\fR environment variable.
  .Sp
  The compiler checks to see if the path provided by \fB\-B\fR
  refers to a directory, and if necessary it adds a directory
--- 18323,18329 ----
  \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
  those results in a file name that is found, the unmodified program
  name is searched for using the directories specified in your
! \&\fBPATH\fR environment variable.
  .Sp
  The compiler checks to see if the path provided by \fB\-B\fR
  refers to a directory, and if necessary it adds a directory
*************** standard prefixes above are tried, and t
*** 18407,18449 ****
  out of the link if it is not found by those means.
  .Sp
  Another way to specify a prefix much like the \fB\-B\fR prefix is to use
! the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
  .Sp
  As a special kludge, if the path provided by \fB\-B\fR is
! \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
  9, then it is replaced by \fI[dir/]include\fR.  This is to help
! with boot-strapping the compiler.
! .IP "\fB\-no\-canonical\-prefixes\fR" 4
  .IX Item "-no-canonical-prefixes"
  Do not expand any symbolic links, resolve references to \fB/../\fR
  or \fB/./\fR, or make the path absolute when generating a relative
  prefix.
! .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
  .IX Item "--sysroot=dir"
  Use \fIdir\fR as the logical root directory for headers and libraries.
  For example, if the compiler normally searches for headers in
  \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
! searches \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
  .Sp
  If you use both this option and the \fB\-isysroot\fR option, then
  the \fB\-\-sysroot\fR option applies to libraries, but the
  \&\fB\-isysroot\fR option applies to header files.
  .Sp
! The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
  for this option.  If your linker does not support this option, the
  header file aspect of \fB\-\-sysroot\fR still works, but the
  library aspect does not.
! .IP "\fB\-\-no\-sysroot\-suffix\fR" 4
  .IX Item "--no-sysroot-suffix"
  For some targets, a suffix is added to the root directory specified
  with \fB\-\-sysroot\fR, depending on the other options used, so that
  headers may for example be found in
! \&\fI\fIdir\fI/\fIsuffix\fI/usr/include\fR instead of
! \&\fI\fIdir\fI/usr/include\fR.  This option disables the addition of
  such a suffix.
  .SS "Options for Code Generation Conventions"
  .IX Subsection "Options for Code Generation Conventions"
! These machine-independent options control the interface conventions
  used in code generation.
  .PP
  Most of them have both positive and negative forms; the negative form
--- 18342,18384 ----
  out of the link if it is not found by those means.
  .Sp
  Another way to specify a prefix much like the \fB\-B\fR prefix is to use
! the environment variable \fBGCC_EXEC_PREFIX\fR.
  .Sp
  As a special kludge, if the path provided by \fB\-B\fR is
! \&\fI[dir/]stageN/\fR, where \fIN\fR is a number in the range 0 to
  9, then it is replaced by \fI[dir/]include\fR.  This is to help
! with boot\-strapping the compiler.
! .IP \fB\-no\-canonical\-prefixes\fR 4
  .IX Item "-no-canonical-prefixes"
  Do not expand any symbolic links, resolve references to \fB/../\fR
  or \fB/./\fR, or make the path absolute when generating a relative
  prefix.
! .IP \fB\-\-sysroot=\fR\fIdir\fR 4
  .IX Item "--sysroot=dir"
  Use \fIdir\fR as the logical root directory for headers and libraries.
  For example, if the compiler normally searches for headers in
  \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
! searches \fIdir/usr/include\fR and \fIdir/usr/lib\fR.
  .Sp
  If you use both this option and the \fB\-isysroot\fR option, then
  the \fB\-\-sysroot\fR option applies to libraries, but the
  \&\fB\-isysroot\fR option applies to header files.
  .Sp
! The GNU linker (beginning with version 2.16) has the necessary support
  for this option.  If your linker does not support this option, the
  header file aspect of \fB\-\-sysroot\fR still works, but the
  library aspect does not.
! .IP \fB\-\-no\-sysroot\-suffix\fR 4
  .IX Item "--no-sysroot-suffix"
  For some targets, a suffix is added to the root directory specified
  with \fB\-\-sysroot\fR, depending on the other options used, so that
  headers may for example be found in
! \&\fIdir/suffix/usr/include\fR instead of
! \&\fIdir/usr/include\fR.  This option disables the addition of
  such a suffix.
  .SS "Options for Code Generation Conventions"
  .IX Subsection "Options for Code Generation Conventions"
! These machine\-independent options control the interface conventions
  used in code generation.
  .PP
  Most of them have both positive and negative forms; the negative form
*************** of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In
*** 18451,18457 ****
  one of the forms is listed\-\-\-the one that is not the default.  You
  can figure out the other form by either removing \fBno\-\fR or adding
  it.
! .IP "\fB\-fstack\-reuse=\fR\fIreuse-level\fR" 4
  .IX Item "-fstack-reuse=reuse-level"
  This option controls stack space reuse for user declared local/auto variables
  and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
--- 18386,18392 ----
  one of the forms is listed\-\-\-the one that is not the default.  You
  can figure out the other form by either removing \fBno\-\fR or adding
  it.
! .IP \fB\-fstack\-reuse=\fR\fIreuse\-level\fR 4
  .IX Item "-fstack-reuse=reuse-level"
  This option controls stack space reuse for user declared local/auto variables
  and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
*************** Another example:
*** 18519,18607 ****
  \&           }
  .Ve
  .Sp
! The lifetime of a compiler generated temporary is well defined by the \*(C+
  standard. When a lifetime of a temporary ends, and if the temporary lives
  in memory, the optimizing compiler has the freedom to reuse its stack
  space with other temporaries or scoped local variables whose live range
  does not overlap with it. However some of the legacy code relies on
! the behavior of older compilers in which temporaries' stack space is
  not reused, the aggressive stack reuse can lead to runtime errors. This
  option is used to control the temporary stack reuse optimization.
! .IP "\fB\-ftrapv\fR" 4
  .IX Item "-ftrapv"
  This option generates traps for signed overflow on addition, subtraction,
  multiplication operations.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command-line
  results in \fB\-ftrapv\fR being effective.
! .IP "\fB\-fwrapv\fR" 4
  .IX Item "-fwrapv"
  This option instructs the compiler to assume that signed arithmetic
  overflow of addition, subtraction and multiplication wraps around
! using twos-complement representation.  This flag enables some optimizations
  and disables others.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command-line
  results in \fB\-ftrapv\fR being effective.
! .IP "\fB\-fwrapv\-pointer\fR" 4
  .IX Item "-fwrapv-pointer"
  This option instructs the compiler to assume that pointer arithmetic
! overflow on addition and subtraction wraps around using twos-complement
  representation.  This flag disables some optimizations which assume
  pointer overflow is invalid.
! .IP "\fB\-fstrict\-overflow\fR" 4
  .IX Item "-fstrict-overflow"
  This option implies \fB\-fno\-wrapv\fR \fB\-fno\-wrapv\-pointer\fR and when
  negated implies \fB\-fwrapv\fR \fB\-fwrapv\-pointer\fR.
! .IP "\fB\-fexceptions\fR" 4
  .IX Item "-fexceptions"
  Enable exception handling.  Generates extra code needed to propagate
! exceptions.  For some targets, this implies \s-1GCC\s0 generates frame
  unwind information for all functions, which can produce significant data
  size overhead, although it does not affect execution.  If you do not
! specify this option, \s-1GCC\s0 enables it by default for languages like
! \&\*(C+ that normally require exception handling, and disables it for
  languages like C that do not normally require it.  However, you may need
  to enable this option when compiling C code that needs to interoperate
! properly with exception handlers written in \*(C+.  You may also wish to
! disable this option if you are compiling older \*(C+ programs that don't
  use exception handling.
! .IP "\fB\-fnon\-call\-exceptions\fR" 4
  .IX Item "-fnon-call-exceptions"
  Generate code that allows trapping instructions to throw exceptions.
! Note that this requires platform-specific runtime support that does
  not exist everywhere.  Moreover, it only allows \fItrapping\fR
! instructions to throw exceptions, i.e. memory references or floating-point
  instructions.  It does not allow exceptions to be thrown from
  arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.  This enables
  \&\fB\-fexceptions\fR.
! .IP "\fB\-fdelete\-dead\-exceptions\fR" 4
  .IX Item "-fdelete-dead-exceptions"
! Consider that instructions that may throw exceptions but don't otherwise
  contribute to the execution of the program can be optimized away.
  This does not affect calls to functions except those with the
  \&\f(CW\*(C`pure\*(C'\fR or \f(CW\*(C`const\*(C'\fR attributes.
! This option is enabled by default for the Ada and \*(C+ compilers, as permitted by
  the language specifications.
  Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
! .IP "\fB\-funwind\-tables\fR" 4
  .IX Item "-funwind-tables"
  Similar to \fB\-fexceptions\fR, except that it just generates any needed
  static data, but does not affect the generated code in any other way.
  You normally do not need to enable this option; instead, a language processor
  that needs this handling enables it on your behalf.
! .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
  .IX Item "-fasynchronous-unwind-tables"
! Generate unwind table in \s-1DWARF\s0 format, if supported by target machine.  The
  table is exact at each instruction boundary, so it can be used for stack
  unwinding from asynchronous events (such as debugger or garbage collector).
! .IP "\fB\-fno\-gnu\-unique\fR" 4
  .IX Item "-fno-gnu-unique"
! On systems with recent \s-1GNU\s0 assembler and C library, the \*(C+ compiler
  uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
  of template static data members and static local variables in inline
  functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
--- 18454,18542 ----
  \&           }
  .Ve
  .Sp
! The lifetime of a compiler generated temporary is well defined by the C++
  standard. When a lifetime of a temporary ends, and if the temporary lives
  in memory, the optimizing compiler has the freedom to reuse its stack
  space with other temporaries or scoped local variables whose live range
  does not overlap with it. However some of the legacy code relies on
! the behavior of older compilers in which temporaries\*(Aq stack space is
  not reused, the aggressive stack reuse can lead to runtime errors. This
  option is used to control the temporary stack reuse optimization.
! .IP \fB\-ftrapv\fR 4
  .IX Item "-ftrapv"
  This option generates traps for signed overflow on addition, subtraction,
  multiplication operations.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command\-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command\-line
  results in \fB\-ftrapv\fR being effective.
! .IP \fB\-fwrapv\fR 4
  .IX Item "-fwrapv"
  This option instructs the compiler to assume that signed arithmetic
  overflow of addition, subtraction and multiplication wraps around
! using twos\-complement representation.  This flag enables some optimizations
  and disables others.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command\-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command\-line
  results in \fB\-ftrapv\fR being effective.
! .IP \fB\-fwrapv\-pointer\fR 4
  .IX Item "-fwrapv-pointer"
  This option instructs the compiler to assume that pointer arithmetic
! overflow on addition and subtraction wraps around using twos\-complement
  representation.  This flag disables some optimizations which assume
  pointer overflow is invalid.
! .IP \fB\-fstrict\-overflow\fR 4
  .IX Item "-fstrict-overflow"
  This option implies \fB\-fno\-wrapv\fR \fB\-fno\-wrapv\-pointer\fR and when
  negated implies \fB\-fwrapv\fR \fB\-fwrapv\-pointer\fR.
! .IP \fB\-fexceptions\fR 4
  .IX Item "-fexceptions"
  Enable exception handling.  Generates extra code needed to propagate
! exceptions.  For some targets, this implies GCC generates frame
  unwind information for all functions, which can produce significant data
  size overhead, although it does not affect execution.  If you do not
! specify this option, GCC enables it by default for languages like
! C++ that normally require exception handling, and disables it for
  languages like C that do not normally require it.  However, you may need
  to enable this option when compiling C code that needs to interoperate
! properly with exception handlers written in C++.  You may also wish to
! disable this option if you are compiling older C++ programs that don\*(Aqt
  use exception handling.
! .IP \fB\-fnon\-call\-exceptions\fR 4
  .IX Item "-fnon-call-exceptions"
  Generate code that allows trapping instructions to throw exceptions.
! Note that this requires platform\-specific runtime support that does
  not exist everywhere.  Moreover, it only allows \fItrapping\fR
! instructions to throw exceptions, i.e. memory references or floating\-point
  instructions.  It does not allow exceptions to be thrown from
  arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.  This enables
  \&\fB\-fexceptions\fR.
! .IP \fB\-fdelete\-dead\-exceptions\fR 4
  .IX Item "-fdelete-dead-exceptions"
! Consider that instructions that may throw exceptions but don\*(Aqt otherwise
  contribute to the execution of the program can be optimized away.
  This does not affect calls to functions except those with the
  \&\f(CW\*(C`pure\*(C'\fR or \f(CW\*(C`const\*(C'\fR attributes.
! This option is enabled by default for the Ada and C++ compilers, as permitted by
  the language specifications.
  Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
! .IP \fB\-funwind\-tables\fR 4
  .IX Item "-funwind-tables"
  Similar to \fB\-fexceptions\fR, except that it just generates any needed
  static data, but does not affect the generated code in any other way.
  You normally do not need to enable this option; instead, a language processor
  that needs this handling enables it on your behalf.
! .IP \fB\-fasynchronous\-unwind\-tables\fR 4
  .IX Item "-fasynchronous-unwind-tables"
! Generate unwind table in DWARF format, if supported by target machine.  The
  table is exact at each instruction boundary, so it can be used for stack
  unwinding from asynchronous events (such as debugger or garbage collector).
! .IP \fB\-fno\-gnu\-unique\fR 4
  .IX Item "-fno-gnu-unique"
! On systems with recent GNU assembler and C library, the C++ compiler
  uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
  of template static data members and static local variables in inline
  functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
*************** is necessary to avoid problems with a li
*** 18609,18623 ****
  \&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
  therefore disagreeing with the other one about the binding of the
  symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
! DSOs; if your program relies on reinitialization of a \s-1DSO\s0 via
  \&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
  \&\fB\-fno\-gnu\-unique\fR.
! .IP "\fB\-fpcc\-struct\-return\fR" 4
  .IX Item "-fpcc-struct-return"
! Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
  longer ones, rather than in registers.  This convention is less
  efficient, but it has the advantage of allowing intercallability between
! GCC-compiled files and files compiled with other compilers, particularly
  the Portable C Compiler (pcc).
  .Sp
  The precise convention for returning structures in memory depends
--- 18544,18558 ----
  \&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
  therefore disagreeing with the other one about the binding of the
  symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
! DSOs; if your program relies on reinitialization of a DSO via
  \&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
  \&\fB\-fno\-gnu\-unique\fR.
! .IP \fB\-fpcc\-struct\-return\fR 4
  .IX Item "-fpcc-struct-return"
! Return "short" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
  longer ones, rather than in registers.  This convention is less
  efficient, but it has the advantage of allowing intercallability between
! GCC\-compiled files and files compiled with other compilers, particularly
  the Portable C Compiler (pcc).
  .Sp
  The precise convention for returning structures in memory depends
*************** that of some integer type.
*** 18629,18653 ****
  \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-freg\-struct\-return\fR switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-freg\-struct\-return\fR" 4
  .IX Item "-freg-struct-return"
  Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
  This is more efficient for small structures than
  \&\fB\-fpcc\-struct\-return\fR.
  .Sp
  If you specify neither \fB\-fpcc\-struct\-return\fR nor
! \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
! standard for the target.  If there is no standard convention, \s-1GCC\s0
! defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
  the principal compiler.  In those cases, we can choose the standard, and
  we chose the more efficient register return alternative.
  .Sp
  \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-fpcc\-struct\-return\fR switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fshort\-enums\fR" 4
  .IX Item "-fshort-enums"
  Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
  declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
--- 18564,18588 ----
  \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-freg\-struct\-return\fR switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-freg\-struct\-return\fR 4
  .IX Item "-freg-struct-return"
  Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
  This is more efficient for small structures than
  \&\fB\-fpcc\-struct\-return\fR.
  .Sp
  If you specify neither \fB\-fpcc\-struct\-return\fR nor
! \&\fB\-freg\-struct\-return\fR, GCC defaults to whichever convention is
! standard for the target.  If there is no standard convention, GCC
! defaults to \fB\-fpcc\-struct\-return\fR, except on targets where GCC is
  the principal compiler.  In those cases, we can choose the standard, and
  we chose the more efficient register return alternative.
  .Sp
  \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-fpcc\-struct\-return\fR switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fshort\-enums\fR 4
  .IX Item "-fshort-enums"
  Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
  declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
*************** is equivalent to the smallest integer ty
*** 18655,18673 ****
  This option has no effect for an enumeration type with a fixed underlying
  type.
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fshort\-wchar\fR" 4
  .IX Item "-fshort-wchar"
  Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
  unsigned int\*(C'\fR instead of the default for the target.  This option is
! useful for building programs to run under \s-1WINE.\s0
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fcommon\fR" 4
  .IX Item "-fcommon"
  In C code, this option controls the placement of global variables
  defined without an initializer, known as \fItentative definitions\fR
--- 18590,18608 ----
  This option has no effect for an enumeration type with a fixed underlying
  type.
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes GCC to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fshort\-wchar\fR 4
  .IX Item "-fshort-wchar"
  Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
  unsigned int\*(C'\fR instead of the default for the target.  This option is
! useful for building programs to run under WINE.
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes GCC to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fcommon\fR 4
  .IX Item "-fcommon"
  In C code, this option controls the placement of global variables
  defined without an initializer, known as \fItentative definitions\fR
*************** in the C standard.  Tentative definition
*** 18675,18702 ****
  of a variable with the \f(CW\*(C`extern\*(C'\fR keyword, which do not allocate storage.
  .Sp
  The default is \fB\-fno\-common\fR, which specifies that the compiler places
! uninitialized global variables in the \s-1BSS\s0 section of the object file.
  This inhibits the merging of tentative definitions by the linker so you get a
! multiple-definition error if the same variable is accidentally defined in more
  than one compilation unit.
  .Sp
  The \fB\-fcommon\fR places uninitialized global variables in a common block.
  This allows the linker to resolve all tentative definitions of the same variable
! in different compilation units to the same object, or to a non-tentative
! definition.  This behavior is inconsistent with \*(C+, and on many targets implies
  a speed and code size penalty on global variable references.  It is mainly
  useful to enable legacy code to link without errors.
! .IP "\fB\-fno\-ident\fR" 4
  .IX Item "-fno-ident"
  Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
! .IP "\fB\-finhibit\-size\-directive\fR" 4
  .IX Item "-finhibit-size-directive"
! Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
  would cause trouble if the function is split in the middle, and the
  two halves are placed at locations far apart in memory.  This option is
  used when compiling \fIcrtstuff.c\fR; you should not need to use it
  for anything else.
! .IP "\fB\-fverbose\-asm\fR" 4
  .IX Item "-fverbose-asm"
  Put extra commentary information in the generated assembly code to
  make it more readable.  This option is generally only of use to those
--- 18610,18637 ----
  of a variable with the \f(CW\*(C`extern\*(C'\fR keyword, which do not allocate storage.
  .Sp
  The default is \fB\-fno\-common\fR, which specifies that the compiler places
! uninitialized global variables in the BSS section of the object file.
  This inhibits the merging of tentative definitions by the linker so you get a
! multiple\-definition error if the same variable is accidentally defined in more
  than one compilation unit.
  .Sp
  The \fB\-fcommon\fR places uninitialized global variables in a common block.
  This allows the linker to resolve all tentative definitions of the same variable
! in different compilation units to the same object, or to a non\-tentative
! definition.  This behavior is inconsistent with C++, and on many targets implies
  a speed and code size penalty on global variable references.  It is mainly
  useful to enable legacy code to link without errors.
! .IP \fB\-fno\-ident\fR 4
  .IX Item "-fno-ident"
  Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
! .IP \fB\-finhibit\-size\-directive\fR 4
  .IX Item "-finhibit-size-directive"
! Don\*(Aqt output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
  would cause trouble if the function is split in the middle, and the
  two halves are placed at locations far apart in memory.  This option is
  used when compiling \fIcrtstuff.c\fR; you should not need to use it
  for anything else.
! .IP \fB\-fverbose\-asm\fR 4
  .IX Item "-fverbose-asm"
  Put extra commentary information in the generated assembly code to
  make it more readable.  This option is generally only of use to those
*************** files.
*** 18709,18721 ****
  .Sp
  The added comments include:
  .RS 4
! .IP "*" 4
! information on the compiler version and command-line options,
! .IP "*" 4
  the source code lines associated with the assembly instructions,
! in the form \s-1FILENAME:LINENUMBER:CONTENT OF LINE,\s0
! .IP "*" 4
! hints on which high-level expressions correspond to
  the various assembly instruction operands.
  .RE
  .RS 4
--- 18644,18656 ----
  .Sp
  The added comments include:
  .RS 4
! .IP * 4
! information on the compiler version and command\-line options,
! .IP * 4
  the source code lines associated with the assembly instructions,
! in the form FILENAME:LINENUMBER:CONTENT OF LINE,
! .IP * 4
! hints on which high\-level expressions correspond to
  the various assembly instruction operands.
  .RE
  .RS 4
*************** gives output similar to this:
*** 18786,18890 ****
  The comments are intended for humans rather than machines and hence the
  precise format of the comments is subject to change.
  .RE
! .IP "\fB\-frecord\-gcc\-switches\fR" 4
  .IX Item "-frecord-gcc-switches"
  This switch causes the command line used to invoke the
  compiler to be recorded into the object file that is being created.
  This switch is only implemented on some targets and the exact format
  of the recording is target and binary file format dependent, but it
! usually takes the form of a section containing \s-1ASCII\s0 text.  This
  switch is related to the \fB\-fverbose\-asm\fR switch, but that
  switch only records information in the assembler output file as
  comments, so it never reaches the object file.
  See also \fB\-grecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP "\fB\-fpic\fR" 4
  .IX Item "-fpic"
! Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
  library, if supported for the target machine.  Such code accesses all
! constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
! loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
! loader is not part of \s-1GCC\s0; it is part of the operating system).  If
! the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
  maximum size, you get an error message from the linker indicating that
  \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
! instead.  (These maximums are 8k on the \s-1SPARC,\s0 28k on AArch64 and 32k
! on the m68k and \s-1RS/6000.\s0  The x86 has no such limit.)
  .Sp
! Position-independent code requires special support, and therefore works
! only on certain machines.  For the x86, \s-1GCC\s0 supports \s-1PIC\s0 for System V
! but not for the Sun 386i.  Code generated for the \s-1IBM RS/6000\s0 is always
! position-independent.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 1.
! .IP "\fB\-fPIC\fR" 4
  .IX Item "-fPIC"
! If supported for the target machine, emit position-independent code,
  suitable for dynamic linking and avoiding any limit on the size of the
  global offset table.  This option makes a difference on AArch64, m68k,
! PowerPC and \s-1SPARC.\s0
  .Sp
! Position-independent code requires special support, and therefore works
  only on certain machines.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 2.
! .IP "\fB\-fpie\fR" 4
  .IX Item "-fpie"
  .PD 0
! .IP "\fB\-fPIE\fR" 4
  .IX Item "-fPIE"
  .PD
  These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but the
! generated position-independent code can be only linked into executables.
  Usually these options are used to compile code that will be linked using
! the \fB\-pie\fR \s-1GCC\s0 option.
  .Sp
  \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
  \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
  for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
! .IP "\fB\-fno\-plt\fR" 4
  .IX Item "-fno-plt"
! Do not use the \s-1PLT\s0 for external function calls in position-independent code.
! Instead, load the callee address at call sites from the \s-1GOT\s0 and branch to it.
! This leads to more efficient code by eliminating \s-1PLT\s0 stubs and exposing
! \&\s-1GOT\s0 loads to optimizations.  On architectures such as 32\-bit x86 where
! \&\s-1PLT\s0 stubs expect the \s-1GOT\s0 pointer in a specific register, this gives more
  register allocation freedom to the compiler.
! Lazy binding requires use of the \s-1PLT\s0; 
  with \fB\-fno\-plt\fR all external symbols are resolved at load time.
  .Sp
  Alternatively, the function attribute \f(CW\*(C`noplt\*(C'\fR can be used to avoid calls
! through the \s-1PLT\s0 for specific external functions.
  .Sp
! In position-dependent code, a few targets also convert calls to
! functions that are marked to not use the \s-1PLT\s0 to use the \s-1GOT\s0 instead.
! .IP "\fB\-fno\-jump\-tables\fR" 4
  .IX Item "-fno-jump-tables"
  Do not use jump tables for switch statements even where it would be
  more efficient than other code generation strategies.  This option is
  of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
  building code that forms part of a dynamic linker and cannot
  reference the address of a jump table.  On some targets, jump tables
! do not require a \s-1GOT\s0 and this option is not needed.
! .IP "\fB\-fno\-bit\-tests\fR" 4
  .IX Item "-fno-bit-tests"
  Do not use bit tests for switch statements even where it would be
  more efficient than other code generation strategies.
! .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
  .IX Item "-ffixed-reg"
  Treat the register named \fIreg\fR as a fixed register; generated code
  should never refer to it (except perhaps as a stack pointer, frame
  pointer or in some other fixed role).
  .Sp
  \&\fIreg\fR must be the name of a register.  The register names accepted
! are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
  macro in the machine description macro file.
  .Sp
  This flag does not have a negative form, because it specifies a
! three-way choice.
! .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
  .IX Item "-fcall-used-reg"
  Treat the register named \fIreg\fR as an allocable register that is
  clobbered by function calls.  It may be allocated for temporaries or
--- 18721,18825 ----
  The comments are intended for humans rather than machines and hence the
  precise format of the comments is subject to change.
  .RE
! .IP \fB\-frecord\-gcc\-switches\fR 4
  .IX Item "-frecord-gcc-switches"
  This switch causes the command line used to invoke the
  compiler to be recorded into the object file that is being created.
  This switch is only implemented on some targets and the exact format
  of the recording is target and binary file format dependent, but it
! usually takes the form of a section containing ASCII text.  This
  switch is related to the \fB\-fverbose\-asm\fR switch, but that
  switch only records information in the assembler output file as
  comments, so it never reaches the object file.
  See also \fB\-grecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP \fB\-fpic\fR 4
  .IX Item "-fpic"
! Generate position\-independent code (PIC) suitable for use in a shared
  library, if supported for the target machine.  Such code accesses all
! constant addresses through a global offset table (GOT).  The dynamic
! loader resolves the GOT entries when the program starts (the dynamic
! loader is not part of GCC; it is part of the operating system).  If
! the GOT size for the linked executable exceeds a machine\-specific
  maximum size, you get an error message from the linker indicating that
  \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
! instead.  (These maximums are 8k on the SPARC, 28k on AArch64 and 32k
! on the m68k and RS/6000.  The x86 has no such limit.)
  .Sp
! Position\-independent code requires special support, and therefore works
! only on certain machines.  For the x86, GCC supports PIC for System V
! but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
! position\-independent.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 1.
! .IP \fB\-fPIC\fR 4
  .IX Item "-fPIC"
! If supported for the target machine, emit position\-independent code,
  suitable for dynamic linking and avoiding any limit on the size of the
  global offset table.  This option makes a difference on AArch64, m68k,
! PowerPC and SPARC.
  .Sp
! Position\-independent code requires special support, and therefore works
  only on certain machines.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 2.
! .IP \fB\-fpie\fR 4
  .IX Item "-fpie"
  .PD 0
! .IP \fB\-fPIE\fR 4
  .IX Item "-fPIE"
  .PD
  These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but the
! generated position\-independent code can be only linked into executables.
  Usually these options are used to compile code that will be linked using
! the \fB\-pie\fR GCC option.
  .Sp
  \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
  \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
  for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
! .IP \fB\-fno\-plt\fR 4
  .IX Item "-fno-plt"
! Do not use the PLT for external function calls in position\-independent code.
! Instead, load the callee address at call sites from the GOT and branch to it.
! This leads to more efficient code by eliminating PLT stubs and exposing
! GOT loads to optimizations.  On architectures such as 32\-bit x86 where
! PLT stubs expect the GOT pointer in a specific register, this gives more
  register allocation freedom to the compiler.
! Lazy binding requires use of the PLT; 
  with \fB\-fno\-plt\fR all external symbols are resolved at load time.
  .Sp
  Alternatively, the function attribute \f(CW\*(C`noplt\*(C'\fR can be used to avoid calls
! through the PLT for specific external functions.
  .Sp
! In position\-dependent code, a few targets also convert calls to
! functions that are marked to not use the PLT to use the GOT instead.
! .IP \fB\-fno\-jump\-tables\fR 4
  .IX Item "-fno-jump-tables"
  Do not use jump tables for switch statements even where it would be
  more efficient than other code generation strategies.  This option is
  of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
  building code that forms part of a dynamic linker and cannot
  reference the address of a jump table.  On some targets, jump tables
! do not require a GOT and this option is not needed.
! .IP \fB\-fno\-bit\-tests\fR 4
  .IX Item "-fno-bit-tests"
  Do not use bit tests for switch statements even where it would be
  more efficient than other code generation strategies.
! .IP \fB\-ffixed\-\fR\fIreg\fR 4
  .IX Item "-ffixed-reg"
  Treat the register named \fIreg\fR as a fixed register; generated code
  should never refer to it (except perhaps as a stack pointer, frame
  pointer or in some other fixed role).
  .Sp
  \&\fIreg\fR must be the name of a register.  The register names accepted
! are machine\-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
  macro in the machine description macro file.
  .Sp
  This flag does not have a negative form, because it specifies a
! three\-way choice.
! .IP \fB\-fcall\-used\-\fR\fIreg\fR 4
  .IX Item "-fcall-used-reg"
  Treat the register named \fIreg\fR as an allocable register that is
  clobbered by function calls.  It may be allocated for temporaries or
*************** do not save and restore the register \fI
*** 18893,18903 ****
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine's execution model produces disastrous results.
  .Sp
  This flag does not have a negative form, because it specifies a
! three-way choice.
! .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
  .IX Item "-fcall-saved-reg"
  Treat the register named \fIreg\fR as an allocable register saved by
  functions.  It may be allocated even for temporaries or variables that
--- 18828,18838 ----
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine\*(Aqs execution model produces disastrous results.
  .Sp
  This flag does not have a negative form, because it specifies a
! three\-way choice.
! .IP \fB\-fcall\-saved\-\fR\fIreg\fR 4
  .IX Item "-fcall-saved-reg"
  Treat the register named \fIreg\fR as an allocable register saved by
  functions.  It may be allocated even for temporaries or variables that
*************** the register \fIreg\fR if they use it.
*** 18906,18919 ****
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine's execution model produces disastrous results.
  .Sp
  A different sort of disaster results from the use of this flag for
  a register in which function values may be returned.
  .Sp
  This flag does not have a negative form, because it specifies a
! three-way choice.
! .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
  .IX Item "-fpack-struct[=n]"
  Without a value specified, pack all structure members together without
  holes.  When a value is specified (which must be a small power of two), pack
--- 18841,18854 ----
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine\*(Aqs execution model produces disastrous results.
  .Sp
  A different sort of disaster results from the use of this flag for
  a register in which function values may be returned.
  .Sp
  This flag does not have a negative form, because it specifies a
! three\-way choice.
! .IP \fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR 4
  .IX Item "-fpack-struct[=n]"
  Without a value specified, pack all structure members together without
  holes.  When a value is specified (which must be a small power of two), pack
*************** structure members according to this valu
*** 18921,18956 ****
  alignment (that is, objects with default alignment requirements larger than
  this are output potentially unaligned at the next fitting location.
  .Sp
! \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without that switch.
  Additionally, it makes the code suboptimal.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fleading\-underscore\fR" 4
  .IX Item "-fleading-underscore"
  This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
  change the way C symbols are represented in the object file.  One use
  is to help link with legacy assembly code.
  .Sp
! \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
  generate code that is not binary compatible with code generated without that
! switch.  Use it to conform to a non-default application binary interface.
  Not all targets provide complete support for this switch.
! .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
  .IX Item "-ftls-model=model"
! Alter the thread-local storage model to be used.
! The \fImodel\fR argument should be one of \fBglobal-dynamic\fR,
! \&\fBlocal-dynamic\fR, \fBinitial-exec\fR or \fBlocal-exec\fR.
  Note that the choice is subject to optimization: the compiler may use
  a more efficient model for symbols not visible outside of the translation
  unit, or if \fB\-fpic\fR is not given on the command line.
  .Sp
! The default without \fB\-fpic\fR is \fBinitial-exec\fR; with
! \&\fB\-fpic\fR the default is \fBglobal-dynamic\fR.
! .IP "\fB\-ftrampolines\fR" 4
  .IX Item "-ftrampolines"
  For targets that normally need trampolines for nested functions, always
  generate them instead of using descriptors.  Otherwise, for targets that
! do not need them, like for example HP-PA or \s-1IA\-64,\s0 do nothing.
  .Sp
  A trampoline is a small piece of code that is created at run time on the
  stack when the address of a nested function is taken, and is used to call
--- 18856,18891 ----
  alignment (that is, objects with default alignment requirements larger than
  this are output potentially unaligned at the next fitting location.
  .Sp
! \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes GCC to generate
  code that is not binary compatible with code generated without that switch.
  Additionally, it makes the code suboptimal.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fleading\-underscore\fR 4
  .IX Item "-fleading-underscore"
  This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
  change the way C symbols are represented in the object file.  One use
  is to help link with legacy assembly code.
  .Sp
! \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes GCC to
  generate code that is not binary compatible with code generated without that
! switch.  Use it to conform to a non\-default application binary interface.
  Not all targets provide complete support for this switch.
! .IP \fB\-ftls\-model=\fR\fImodel\fR 4
  .IX Item "-ftls-model=model"
! Alter the thread\-local storage model to be used.
! The \fImodel\fR argument should be one of \fBglobal\-dynamic\fR,
! \&\fBlocal\-dynamic\fR, \fBinitial\-exec\fR or \fBlocal\-exec\fR.
  Note that the choice is subject to optimization: the compiler may use
  a more efficient model for symbols not visible outside of the translation
  unit, or if \fB\-fpic\fR is not given on the command line.
  .Sp
! The default without \fB\-fpic\fR is \fBinitial\-exec\fR; with
! \&\fB\-fpic\fR the default is \fBglobal\-dynamic\fR.
! .IP \fB\-ftrampolines\fR 4
  .IX Item "-ftrampolines"
  For targets that normally need trampolines for nested functions, always
  generate them instead of using descriptors.  Otherwise, for targets that
! do not need them, like for example HP\-PA or IA\-64, do nothing.
  .Sp
  A trampoline is a small piece of code that is created at run time on the
  stack when the address of a nested function is taken, and is used to call
*************** writing, \fB\-fno\-trampolines\fR is ena
*** 18965,18978 ****
  .Sp
  Moreover, code compiled with \fB\-ftrampolines\fR and code compiled with
  \&\fB\-fno\-trampolines\fR are not binary compatible if nested functions are
! present.  This option must therefore be used on a program-wide basis and be
  manipulated with extreme care.
  .Sp
  For languages other than Ada, the \f(CW\*(C`\-ftrampolines\*(C'\fR and
  \&\f(CW\*(C`\-fno\-trampolines\*(C'\fR options currently have no effect, and
  trampolines are always generated on platforms that need them
  for nested functions.
! .IP "\fB\-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR]" 4
  .IX Item "-ftrampoline-impl=[stack|heap]"
  By default, trampolines are generated on stack.  However, certain platforms
  (such as the Apple M1) do not permit an executable stack.  Compiling with
--- 18900,18913 ----
  .Sp
  Moreover, code compiled with \fB\-ftrampolines\fR and code compiled with
  \&\fB\-fno\-trampolines\fR are not binary compatible if nested functions are
! present.  This option must therefore be used on a program\-wide basis and be
  manipulated with extreme care.
  .Sp
  For languages other than Ada, the \f(CW\*(C`\-ftrampolines\*(C'\fR and
  \&\f(CW\*(C`\-fno\-trampolines\*(C'\fR options currently have no effect, and
  trampolines are always generated on platforms that need them
  for nested functions.
! .IP \fB\-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR] 4
  .IX Item "-ftrampoline-impl=[stack|heap]"
  By default, trampolines are generated on stack.  However, certain platforms
  (such as the Apple M1) do not permit an executable stack.  Compiling with
*************** By default, trampolines are generated on
*** 18981,19010 ****
  \&\f(CW\*(C`_\|_gcc_nested_func_ptr_deleted\*(C'\fR in order to allocate and
  deallocate trampoline space on the executable heap.  These functions are
  implemented in libgcc, and will only be provided on specific targets:
! x86_64 Darwin, x86_64 and aarch64 Linux.  \fI\s-1PLEASE NOTE\s0\fR: Heap
  trampolines are \fInot\fR guaranteed to be correctly deallocated if you
  \&\f(CW\*(C`setjmp\*(C'\fR, instantiate nested functions, and then \f(CW\*(C`longjmp\*(C'\fR back
  to a state prior to having allocated those nested functions.
! .IP "\fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR]" 4
  .IX Item "-fvisibility=[default|internal|hidden|protected]"
! Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
  symbols are marked with this unless overridden within the code.
  Using this feature can very substantially improve linking and
  load times of shared object libraries, produce more optimized
! code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
  It is \fBstrongly\fR recommended that you use this in any shared objects
  you distribute.
  .Sp
  Despite the nomenclature, \fBdefault\fR always means public; i.e.,
  available to be linked against from outside the shared object.
! \&\fBprotected\fR and \fBinternal\fR are pretty useless in real-world
  usage so the only other commonly used option is \fBhidden\fR.
! The default if \fB\-fvisibility\fR isn't specified is
  \&\fBdefault\fR, i.e., make every symbol public.
  .Sp
! A good explanation of the benefits offered by ensuring \s-1ELF\s0
! symbols have the correct visibility is given by \*(L"How To Write
! Shared Libraries\*(R" by Ulrich Drepper (which can be found at
  <\fBhttps://www.akkadia.org/drepper/\fR>)\-\-\-however a superior
  solution made possible by this option to marking things hidden when
  the default is public is to make the default hidden and mark things
--- 18916,18945 ----
  \&\f(CW\*(C`_\|_gcc_nested_func_ptr_deleted\*(C'\fR in order to allocate and
  deallocate trampoline space on the executable heap.  These functions are
  implemented in libgcc, and will only be provided on specific targets:
! x86_64 Darwin, x86_64 and aarch64 Linux.  \fIPLEASE NOTE\fR: Heap
  trampolines are \fInot\fR guaranteed to be correctly deallocated if you
  \&\f(CW\*(C`setjmp\*(C'\fR, instantiate nested functions, and then \f(CW\*(C`longjmp\*(C'\fR back
  to a state prior to having allocated those nested functions.
! .IP \fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 4
  .IX Item "-fvisibility=[default|internal|hidden|protected]"
! Set the default ELF image symbol visibility to the specified option\-\-\-all
  symbols are marked with this unless overridden within the code.
  Using this feature can very substantially improve linking and
  load times of shared object libraries, produce more optimized
! code, provide near\-perfect API export and prevent symbol clashes.
  It is \fBstrongly\fR recommended that you use this in any shared objects
  you distribute.
  .Sp
  Despite the nomenclature, \fBdefault\fR always means public; i.e.,
  available to be linked against from outside the shared object.
! \&\fBprotected\fR and \fBinternal\fR are pretty useless in real\-world
  usage so the only other commonly used option is \fBhidden\fR.
! The default if \fB\-fvisibility\fR isn\*(Aqt specified is
  \&\fBdefault\fR, i.e., make every symbol public.
  .Sp
! A good explanation of the benefits offered by ensuring ELF
! symbols have the correct visibility is given by "How To Write
! Shared Libraries" by Ulrich Drepper (which can be found at
  <\fBhttps://www.akkadia.org/drepper/\fR>)\-\-\-however a superior
  solution made possible by this option to marking things hidden when
  the default is public is to make the default hidden and mark things
*************** public.  This is the norm with DLLs on W
*** 19012,19018 ****
  and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
  \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
  identical syntax.  This is a great boon to those working with
! cross-platform projects.
  .Sp
  For those adding visibility support to existing code, you may find
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
--- 18947,18953 ----
  and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
  \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
  identical syntax.  This is a great boon to those working with
! cross\-platform projects.
  .Sp
  For those adding visibility support to existing code, you may find
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
*************** the declarations you wish to set visibil
*** 19020,19031 ****
  \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
  \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
  Bear in mind that symbol visibility should be viewed \fBas
! part of the \s-1API\s0 interface contract\fR and thus all new code should
  always specify visibility when it is not the default; i.e., declarations
! only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
! as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
! abundantly clear also aids readability and self-documentation of the code.
! Note that due to \s-1ISO \*(C+\s0 specification requirements, \f(CW\*(C`operator new\*(C'\fR and
  \&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
  .Sp
  Be aware that headers from outside your project, in particular system
--- 18955,18966 ----
  \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
  \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
  Bear in mind that symbol visibility should be viewed \fBas
! part of the API interface contract\fR and thus all new code should
  always specify visibility when it is not the default; i.e., declarations
! only for use within the local DSO should \fBalways\fR be marked explicitly
! as hidden as so to avoid PLT indirection overheads\-\-\-making this
! abundantly clear also aids readability and self\-documentation of the code.
! Note that due to ISO C++ specification requirements, \f(CW\*(C`operator new\*(C'\fR and
  \&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
  .Sp
  Be aware that headers from outside your project, in particular system
*************** before including any such headers.
*** 19037,19048 ****
  \&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
  a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
  no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
! functions with no explicit visibility use the \s-1PLT,\s0 so it is more
  effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
  declarations should be treated as hidden.
  .Sp
! Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
  entities. This means that, for instance, an exception class that is
  be thrown between DSOs must be explicitly marked with default
  visibility so that the \fBtype_info\fR nodes are unified between
--- 18972,18983 ----
  \&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
  a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
  no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
! functions with no explicit visibility use the PLT, so it is more
  effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
  declarations should be treated as hidden.
  .Sp
! Note that \fB\-fvisibility\fR does affect C++ vague linkage
  entities. This means that, for instance, an exception class that is
  be thrown between DSOs must be explicitly marked with default
  visibility so that the \fBtype_info\fR nodes are unified between
*************** the DSOs.
*** 19050,19107 ****
  .Sp
  An overview of these techniques, their benefits and how to use them
  is at <\fBhttps://gcc.gnu.org/wiki/Visibility\fR>.
! .IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
  .IX Item "-fstrict-volatile-bitfields"
! This option should be used if accesses to volatile bit-fields (or other
  structure fields, although the compiler usually honors those types
  anyway) should use a single access of the width of the
! field's type, aligned to a natural alignment if possible.  For
! example, targets with memory-mapped peripheral registers might require
  all such accesses to be 16 bits wide; with this flag you can
! declare all peripheral bit-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
! is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
  instead of, perhaps, a more efficient 32\-bit access.
  .Sp
  If this option is disabled, the compiler uses the most efficient
  instruction.  In the previous example, that might be a 32\-bit load
  instruction, even though that accesses bytes that do not contain
! any portion of the bit-field, or memory-mapped registers unrelated to
  the one being updated.
  .Sp
  In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
  structure field, it may not be possible to access the field with a single
  read or write that is correctly aligned for the target machine.  In this
! case \s-1GCC\s0 falls back to generating multiple accesses rather than code that 
  will fault or truncate the result at run time.
  .Sp
! Note:  Due to restrictions of the C/\*(C+11 memory model, write accesses are
! not allowed to touch non bit-field members.  It is therefore recommended
! to define all bits of the field's type as bit-field members.
  .Sp
  The default value of this option is determined by the application binary
  interface for the target processor.
! .IP "\fB\-fsync\-libcalls\fR" 4
  .IX Item "-fsync-libcalls"
! This option controls whether any out-of-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
! family of functions may be used to implement the \*(C+11 \f(CW\*(C`_\|_atomic\*(C'\fR
  family of functions.
  .Sp
  The default value of this option is enabled, thus the only useful form
  of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
  the implementation of the \fIlibatomic\fR runtime library.
! .SS "\s-1GCC\s0 Developer Options"
  .IX Subsection "GCC Developer Options"
! This section describes command-line options that are primarily of
! interest to \s-1GCC\s0 developers, including options to support compiler
! testing and investigation of compiler bugs and compile-time
  performance problems.  This includes options that produce debug dumps
  at various points in the compilation; that print statistics such as
! memory use and execution time; and that print information about \s-1GCC\s0's
  configuration, such as where it searches for libraries.  You should
  rarely need to use any of these options for ordinary compilation and
  linking tasks.
  .PP
! Many developer options that cause \s-1GCC\s0 to dump output to a file take an
  optional \fB=\fR\fIfilename\fR suffix. You can specify \fBstdout\fR
  or \fB\-\fR to dump to standard output, and \fBstderr\fR for standard
  error.
--- 18985,19042 ----
  .Sp
  An overview of these techniques, their benefits and how to use them
  is at <\fBhttps://gcc.gnu.org/wiki/Visibility\fR>.
! .IP \fB\-fstrict\-volatile\-bitfields\fR 4
  .IX Item "-fstrict-volatile-bitfields"
! This option should be used if accesses to volatile bit\-fields (or other
  structure fields, although the compiler usually honors those types
  anyway) should use a single access of the width of the
! field\*(Aqs type, aligned to a natural alignment if possible.  For
! example, targets with memory\-mapped peripheral registers might require
  all such accesses to be 16 bits wide; with this flag you can
! declare all peripheral bit\-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
! is 16 bits on these targets) to force GCC to use 16\-bit accesses
  instead of, perhaps, a more efficient 32\-bit access.
  .Sp
  If this option is disabled, the compiler uses the most efficient
  instruction.  In the previous example, that might be a 32\-bit load
  instruction, even though that accesses bytes that do not contain
! any portion of the bit\-field, or memory\-mapped registers unrelated to
  the one being updated.
  .Sp
  In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
  structure field, it may not be possible to access the field with a single
  read or write that is correctly aligned for the target machine.  In this
! case GCC falls back to generating multiple accesses rather than code that 
  will fault or truncate the result at run time.
  .Sp
! Note:  Due to restrictions of the C/C++11 memory model, write accesses are
! not allowed to touch non bit\-field members.  It is therefore recommended
! to define all bits of the field\*(Aqs type as bit\-field members.
  .Sp
  The default value of this option is determined by the application binary
  interface for the target processor.
! .IP \fB\-fsync\-libcalls\fR 4
  .IX Item "-fsync-libcalls"
! This option controls whether any out\-of\-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
! family of functions may be used to implement the C++11 \f(CW\*(C`_\|_atomic\*(C'\fR
  family of functions.
  .Sp
  The default value of this option is enabled, thus the only useful form
  of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
  the implementation of the \fIlibatomic\fR runtime library.
! .SS "GCC Developer Options"
  .IX Subsection "GCC Developer Options"
! This section describes command\-line options that are primarily of
! interest to GCC developers, including options to support compiler
! testing and investigation of compiler bugs and compile\-time
  performance problems.  This includes options that produce debug dumps
  at various points in the compilation; that print statistics such as
! memory use and execution time; and that print information about GCC\*(Aqs
  configuration, such as where it searches for libraries.  You should
  rarely need to use any of these options for ordinary compilation and
  linking tasks.
  .PP
! Many developer options that cause GCC to dump output to a file take an
  optional \fB=\fR\fIfilename\fR suffix. You can specify \fBstdout\fR
  or \fB\-\fR to dump to standard output, and \fBstderr\fR for standard
  error.
*************** phase letter, and pass name.  The base d
*** 19112,19135 ****
  output file produced by the compiler if explicitly specified and not
  an executable; otherwise it is the source file name.
  The pass number is determined by the order passes are registered with
! the compiler's pass manager. 
  This is generally the same as the order of execution, but passes
! registered by plugins, target-specific passes, or passes that are
  otherwise registered late are numbered higher than the pass named
  \&\fBfinal\fR, even if they are executed earlier.  The phase letter is
! one of \fBi\fR (inter-procedural analysis), \fBl\fR
! (language-specific), \fBr\fR (\s-1RTL\s0), or \fBt\fR (tree). 
  The files are created in the directory of the output file.
! .IP "\fB\-fcallgraph\-info\fR" 4
  .IX Item "-fcallgraph-info"
  .PD 0
! .IP "\fB\-fcallgraph\-info=\fR\fI\s-1MARKERS\s0\fR" 4
  .IX Item "-fcallgraph-info=MARKERS"
  .PD
  Makes the compiler output callgraph information for the program, on a
! per-object-file basis.  The information is generated in the common \s-1VCG\s0
! format.  It can be decorated with additional, per-node and/or per-edge
! information, if a list of comma-separated markers is additionally
  specified.  When the \f(CW\*(C`su\*(C'\fR marker is specified, the callgraph is
  decorated with stack usage information; it is equivalent to
  \&\fB\-fstack\-usage\fR.  When the \f(CW\*(C`da\*(C'\fR marker is specified, the
--- 19047,19070 ----
  output file produced by the compiler if explicitly specified and not
  an executable; otherwise it is the source file name.
  The pass number is determined by the order passes are registered with
! the compiler\*(Aqs pass manager. 
  This is generally the same as the order of execution, but passes
! registered by plugins, target\-specific passes, or passes that are
  otherwise registered late are numbered higher than the pass named
  \&\fBfinal\fR, even if they are executed earlier.  The phase letter is
! one of \fBi\fR (inter\-procedural analysis), \fBl\fR
! (language\-specific), \fBr\fR (RTL), or \fBt\fR (tree). 
  The files are created in the directory of the output file.
! .IP \fB\-fcallgraph\-info\fR 4
  .IX Item "-fcallgraph-info"
  .PD 0
! .IP \fB\-fcallgraph\-info=\fR\fIMARKERS\fR 4
  .IX Item "-fcallgraph-info=MARKERS"
  .PD
  Makes the compiler output callgraph information for the program, on a
! per\-object\-file basis.  The information is generated in the common VCG
! format.  It can be decorated with additional, per\-node and/or per\-edge
! information, if a list of comma\-separated markers is additionally
  specified.  When the \f(CW\*(C`su\*(C'\fR marker is specified, the callgraph is
  decorated with stack usage information; it is equivalent to
  \&\fB\-fstack\-usage\fR.  When the \f(CW\*(C`da\*(C'\fR marker is specified, the
*************** callgraph is decorated with information
*** 19137,19155 ****
  objects.
  .Sp
  When compiling with \fB\-flto\fR, no callgraph information is output
! along with the object file.  At \s-1LTO\s0 link time, \fB\-fcallgraph\-info\fR
  may generate multiple callgraph information files next to intermediate
! \&\s-1LTO\s0 output files.
! .IP "\fB\-d\fR\fIletters\fR" 4
  .IX Item "-dletters"
  .PD 0
! .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
  .IX Item "-fdump-rtl-pass"
! .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fdump-rtl-pass=filename"
  .PD
  Says to make debugging dumps during compilation at times specified by
! \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
  compiler.
  .Sp
  Some \fB\-d\fR\fIletters\fR switches have different meaning when
--- 19072,19090 ----
  objects.
  .Sp
  When compiling with \fB\-flto\fR, no callgraph information is output
! along with the object file.  At LTO link time, \fB\-fcallgraph\-info\fR
  may generate multiple callgraph information files next to intermediate
! LTO output files.
! .IP \fB\-d\fR\fIletters\fR 4
  .IX Item "-dletters"
  .PD 0
! .IP \fB\-fdump\-rtl\-\fR\fIpass\fR 4
  .IX Item "-fdump-rtl-pass"
! .IP \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fdump-rtl-pass=filename"
  .PD
  Says to make debugging dumps during compilation at times specified by
! \&\fIletters\fR.  This is used for debugging the RTL\-based passes of the
  compiler.
  .Sp
  Some \fB\-d\fR\fIletters\fR switches have different meaning when
*************** Debug dumps can be enabled with a \fB\-f
*** 19159,19470 ****
  \&\fB\-d\fR option \fIletters\fR.  Here are the possible
  letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
  .RS 4
! .IP "\fB\-fdump\-rtl\-alignments\fR" 4
  .IX Item "-fdump-rtl-alignments"
  Dump after branch alignments have been computed.
! .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
  .IX Item "-fdump-rtl-asmcons"
  Dump after fixing rtl statements that have unsatisfied in/out constraints.
! .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
  .IX Item "-fdump-rtl-auto_inc_dec"
! Dump after auto-inc-dec discovery.  This pass is only run on
  architectures that have auto inc or auto dec instructions.
! .IP "\fB\-fdump\-rtl\-barriers\fR" 4
  .IX Item "-fdump-rtl-barriers"
  Dump after cleaning up the barrier instructions.
! .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
  .IX Item "-fdump-rtl-bbpart"
  Dump after partitioning hot and cold basic blocks.
! .IP "\fB\-fdump\-rtl\-bbro\fR" 4
  .IX Item "-fdump-rtl-bbro"
  Dump after block reordering.
! .IP "\fB\-fdump\-rtl\-btl1\fR" 4
  .IX Item "-fdump-rtl-btl1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-btl2\fR" 4
  .IX Item "-fdump-rtl-btl2"
  .PD
  \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
  after the two branch
  target load optimization passes.
! .IP "\fB\-fdump\-rtl\-bypass\fR" 4
  .IX Item "-fdump-rtl-bypass"
  Dump after jump bypassing and control flow optimizations.
! .IP "\fB\-fdump\-rtl\-combine\fR" 4
  .IX Item "-fdump-rtl-combine"
! Dump after the \s-1RTL\s0 instruction combination pass.
! .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
  .IX Item "-fdump-rtl-compgotos"
  Dump after duplicating the computed gotos.
! .IP "\fB\-fdump\-rtl\-ce1\fR" 4
  .IX Item "-fdump-rtl-ce1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-ce2\fR" 4
  .IX Item "-fdump-rtl-ce2"
! .IP "\fB\-fdump\-rtl\-ce3\fR" 4
  .IX Item "-fdump-rtl-ce3"
  .PD
  \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
  \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
  if conversion passes.
! .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
  .IX Item "-fdump-rtl-cprop_hardreg"
  Dump after hard register copy propagation.
! .IP "\fB\-fdump\-rtl\-csa\fR" 4
  .IX Item "-fdump-rtl-csa"
  Dump after combining stack adjustments.
! .IP "\fB\-fdump\-rtl\-cse1\fR" 4
  .IX Item "-fdump-rtl-cse1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-cse2\fR" 4
  .IX Item "-fdump-rtl-cse2"
  .PD
  \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
  the two common subexpression elimination passes.
! .IP "\fB\-fdump\-rtl\-dce\fR" 4
  .IX Item "-fdump-rtl-dce"
  Dump after the standalone dead code elimination passes.
! .IP "\fB\-fdump\-rtl\-dbr\fR" 4
  .IX Item "-fdump-rtl-dbr"
  Dump after delayed branch scheduling.
! .IP "\fB\-fdump\-rtl\-dce1\fR" 4
  .IX Item "-fdump-rtl-dce1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-dce2\fR" 4
  .IX Item "-fdump-rtl-dce2"
  .PD
  \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
  the two dead store elimination passes.
! .IP "\fB\-fdump\-rtl\-eh\fR" 4
  .IX Item "-fdump-rtl-eh"
! Dump after finalization of \s-1EH\s0 handling code.
! .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
  .IX Item "-fdump-rtl-eh_ranges"
! Dump after conversion of \s-1EH\s0 handling range regions.
! .IP "\fB\-fdump\-rtl\-expand\fR" 4
  .IX Item "-fdump-rtl-expand"
! Dump after \s-1RTL\s0 generation.
! .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
  .IX Item "-fdump-rtl-fwprop1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
  .IX Item "-fdump-rtl-fwprop2"
  .PD
  \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
  dumping after the two forward propagation passes.
! .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
  .IX Item "-fdump-rtl-gcse1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
  .IX Item "-fdump-rtl-gcse2"
  .PD
  \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
  after global common subexpression elimination.
! .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
  .IX Item "-fdump-rtl-init-regs"
  Dump after the initialization of the registers.
! .IP "\fB\-fdump\-rtl\-initvals\fR" 4
  .IX Item "-fdump-rtl-initvals"
  Dump after the computation of the initial value sets.
! .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
  .IX Item "-fdump-rtl-into_cfglayout"
  Dump after converting to cfglayout mode.
! .IP "\fB\-fdump\-rtl\-ira\fR" 4
  .IX Item "-fdump-rtl-ira"
  Dump after iterated register allocation.
! .IP "\fB\-fdump\-rtl\-jump\fR" 4
  .IX Item "-fdump-rtl-jump"
  Dump after the second jump optimization.
! .IP "\fB\-fdump\-rtl\-loop2\fR" 4
  .IX Item "-fdump-rtl-loop2"
  \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
  loop optimization passes.
! .IP "\fB\-fdump\-rtl\-mach\fR" 4
  .IX Item "-fdump-rtl-mach"
  Dump after performing the machine dependent reorganization pass, if that
  pass exists.
! .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
  .IX Item "-fdump-rtl-mode_sw"
  Dump after removing redundant mode switches.
! .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
  .IX Item "-fdump-rtl-rnreg"
  Dump after register renumbering.
! .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
  .IX Item "-fdump-rtl-outof_cfglayout"
  Dump after converting from cfglayout mode.
! .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
  .IX Item "-fdump-rtl-peephole2"
  Dump after the peephole pass.
! .IP "\fB\-fdump\-rtl\-postreload\fR" 4
  .IX Item "-fdump-rtl-postreload"
! Dump after post-reload optimizations.
! .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
  .IX Item "-fdump-rtl-pro_and_epilogue"
  Dump after generating the function prologues and epilogues.
! .IP "\fB\-fdump\-rtl\-sched1\fR" 4
  .IX Item "-fdump-rtl-sched1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-sched2\fR" 4
  .IX Item "-fdump-rtl-sched2"
  .PD
  \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
  after the basic block scheduling passes.
! .IP "\fB\-fdump\-rtl\-ree\fR" 4
  .IX Item "-fdump-rtl-ree"
  Dump after sign/zero extension elimination.
! .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
  .IX Item "-fdump-rtl-seqabstr"
  Dump after common sequence discovery.
! .IP "\fB\-fdump\-rtl\-shorten\fR" 4
  .IX Item "-fdump-rtl-shorten"
  Dump after shortening branches.
! .IP "\fB\-fdump\-rtl\-sibling\fR" 4
  .IX Item "-fdump-rtl-sibling"
  Dump after sibling call optimizations.
! .IP "\fB\-fdump\-rtl\-split1\fR" 4
  .IX Item "-fdump-rtl-split1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-split2\fR" 4
  .IX Item "-fdump-rtl-split2"
! .IP "\fB\-fdump\-rtl\-split3\fR" 4
  .IX Item "-fdump-rtl-split3"
! .IP "\fB\-fdump\-rtl\-split4\fR" 4
  .IX Item "-fdump-rtl-split4"
! .IP "\fB\-fdump\-rtl\-split5\fR" 4
  .IX Item "-fdump-rtl-split5"
  .PD
  These options enable dumping after five rounds of
  instruction splitting.
! .IP "\fB\-fdump\-rtl\-sms\fR" 4
  .IX Item "-fdump-rtl-sms"
  Dump after modulo scheduling.  This pass is only run on some
  architectures.
! .IP "\fB\-fdump\-rtl\-stack\fR" 4
  .IX Item "-fdump-rtl-stack"
! Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
! x87's stack-like registers.  This pass is only run on x86 variants.
! .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
  .IX Item "-fdump-rtl-subreg1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
  .IX Item "-fdump-rtl-subreg2"
  .PD
  \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
  the two subreg expansion passes.
! .IP "\fB\-fdump\-rtl\-unshare\fR" 4
  .IX Item "-fdump-rtl-unshare"
  Dump after all rtl has been unshared.
! .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
  .IX Item "-fdump-rtl-vartrack"
  Dump after variable tracking.
! .IP "\fB\-fdump\-rtl\-vregs\fR" 4
  .IX Item "-fdump-rtl-vregs"
  Dump after converting virtual registers to hard registers.
! .IP "\fB\-fdump\-rtl\-web\fR" 4
  .IX Item "-fdump-rtl-web"
  Dump after live range splitting.
! .IP "\fB\-fdump\-rtl\-regclass\fR" 4
  .IX Item "-fdump-rtl-regclass"
  .PD 0
! .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
  .IX Item "-fdump-rtl-subregs_of_mode_init"
! .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
  .IX Item "-fdump-rtl-subregs_of_mode_finish"
! .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
  .IX Item "-fdump-rtl-dfinit"
! .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
  .IX Item "-fdump-rtl-dfinish"
  .PD
  These dumps are defined but always produce empty files.
! .IP "\fB\-da\fR" 4
  .IX Item "-da"
  .PD 0
! .IP "\fB\-fdump\-rtl\-all\fR" 4
  .IX Item "-fdump-rtl-all"
  .PD
  Produce all the dumps listed above.
! .IP "\fB\-dA\fR" 4
  .IX Item "-dA"
  Annotate the assembler output with miscellaneous debugging information.
! .IP "\fB\-dD\fR" 4
  .IX Item "-dD"
  Dump all macro definitions, at the end of preprocessing, in addition to
  normal output.
! .IP "\fB\-dH\fR" 4
  .IX Item "-dH"
  Produce a core dump whenever an error occurs.
! .IP "\fB\-dp\fR" 4
  .IX Item "-dp"
  Annotate the assembler output with a comment indicating which
  pattern and alternative is used.  The length and cost of each instruction are
  also printed.
! .IP "\fB\-dP\fR" 4
  .IX Item "-dP"
! Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
  Also turns on \fB\-dp\fR annotation.
! .IP "\fB\-dx\fR" 4
  .IX Item "-dx"
! Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
  with \fB\-fdump\-rtl\-expand\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-debug\fR" 4
  .IX Item "-fdump-debug"
  Dump debugging information generated during the debug
  generation phase.
! .IP "\fB\-fdump\-earlydebug\fR" 4
  .IX Item "-fdump-earlydebug"
  Dump debugging information generated during the early debug
  generation phase.
! .IP "\fB\-fdump\-noaddr\fR" 4
  .IX Item "-fdump-noaddr"
  When doing debugging dumps, suppress address output.  This makes it more
  feasible to use diff on debugging dumps for compiler invocations with
  different compiler binaries and/or different
  text / bss / data / heap / stack / dso start locations.
! .IP "\fB\-freport\-bug\fR" 4
  .IX Item "-freport-bug"
  Collect and dump debug information into a temporary file if an
! internal compiler error (\s-1ICE\s0) occurs.
! .IP "\fB\-fdump\-unnumbered\fR" 4
  .IX Item "-fdump-unnumbered"
  When doing debugging dumps, suppress instruction numbers and address output.
  This makes it more feasible to use diff on debugging dumps for compiler
  invocations with different options, in particular with and without
  \&\fB\-g\fR.
! .IP "\fB\-fdump\-unnumbered\-links\fR" 4
  .IX Item "-fdump-unnumbered-links"
  When doing debugging dumps (see \fB\-d\fR option above), suppress
  instruction numbers for the links to the previous and next instructions
  in a sequence.
! .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
  .IX Item "-fdump-ipa-switch"
  .PD 0
! .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
  .IX Item "-fdump-ipa-switch-options"
  .PD
! Control the dumping at various stages of inter-procedural analysis
  language tree to a file.  The file name is generated by appending a
  switch specific suffix to the source file name, and the file is created
  in the same directory as the output file.  The following dumps are
  possible:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
! Enables all inter-procedural analysis dumps.
! .IP "\fBcgraph\fR" 4
  .IX Item "cgraph"
! Dumps information about call-graph optimization, unused function removal,
  and inlining decisions.
! .IP "\fBinline\fR" 4
  .IX Item "inline"
  Dump after function inlining.
! .IP "\fBstrubm\fR" 4
  .IX Item "strubm"
  Dump after selecting \f(CW\*(C`strub\*(C'\fR modes, and recording the selections as
  function attributes.
! .IP "\fBstrub\fR" 4
  .IX Item "strub"
  Dump \f(CW\*(C`strub\*(C'\fR transformations: interface changes, function wrapping,
  and insertion of builtin calls for stack scrubbing and watermarking.
--- 19094,19405 ----
  \&\fB\-d\fR option \fIletters\fR.  Here are the possible
  letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
  .RS 4
! .IP \fB\-fdump\-rtl\-alignments\fR 4
  .IX Item "-fdump-rtl-alignments"
  Dump after branch alignments have been computed.
! .IP \fB\-fdump\-rtl\-asmcons\fR 4
  .IX Item "-fdump-rtl-asmcons"
  Dump after fixing rtl statements that have unsatisfied in/out constraints.
! .IP \fB\-fdump\-rtl\-auto_inc_dec\fR 4
  .IX Item "-fdump-rtl-auto_inc_dec"
! Dump after auto\-inc\-dec discovery.  This pass is only run on
  architectures that have auto inc or auto dec instructions.
! .IP \fB\-fdump\-rtl\-barriers\fR 4
  .IX Item "-fdump-rtl-barriers"
  Dump after cleaning up the barrier instructions.
! .IP \fB\-fdump\-rtl\-bbpart\fR 4
  .IX Item "-fdump-rtl-bbpart"
  Dump after partitioning hot and cold basic blocks.
! .IP \fB\-fdump\-rtl\-bbro\fR 4
  .IX Item "-fdump-rtl-bbro"
  Dump after block reordering.
! .IP \fB\-fdump\-rtl\-btl1\fR 4
  .IX Item "-fdump-rtl-btl1"
  .PD 0
! .IP \fB\-fdump\-rtl\-btl2\fR 4
  .IX Item "-fdump-rtl-btl2"
  .PD
  \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
  after the two branch
  target load optimization passes.
! .IP \fB\-fdump\-rtl\-bypass\fR 4
  .IX Item "-fdump-rtl-bypass"
  Dump after jump bypassing and control flow optimizations.
! .IP \fB\-fdump\-rtl\-combine\fR 4
  .IX Item "-fdump-rtl-combine"
! Dump after the RTL instruction combination pass.
! .IP \fB\-fdump\-rtl\-compgotos\fR 4
  .IX Item "-fdump-rtl-compgotos"
  Dump after duplicating the computed gotos.
! .IP \fB\-fdump\-rtl\-ce1\fR 4
  .IX Item "-fdump-rtl-ce1"
  .PD 0
! .IP \fB\-fdump\-rtl\-ce2\fR 4
  .IX Item "-fdump-rtl-ce2"
! .IP \fB\-fdump\-rtl\-ce3\fR 4
  .IX Item "-fdump-rtl-ce3"
  .PD
  \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
  \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
  if conversion passes.
! .IP \fB\-fdump\-rtl\-cprop_hardreg\fR 4
  .IX Item "-fdump-rtl-cprop_hardreg"
  Dump after hard register copy propagation.
! .IP \fB\-fdump\-rtl\-csa\fR 4
  .IX Item "-fdump-rtl-csa"
  Dump after combining stack adjustments.
! .IP \fB\-fdump\-rtl\-cse1\fR 4
  .IX Item "-fdump-rtl-cse1"
  .PD 0
! .IP \fB\-fdump\-rtl\-cse2\fR 4
  .IX Item "-fdump-rtl-cse2"
  .PD
  \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
  the two common subexpression elimination passes.
! .IP \fB\-fdump\-rtl\-dce\fR 4
  .IX Item "-fdump-rtl-dce"
  Dump after the standalone dead code elimination passes.
! .IP \fB\-fdump\-rtl\-dbr\fR 4
  .IX Item "-fdump-rtl-dbr"
  Dump after delayed branch scheduling.
! .IP \fB\-fdump\-rtl\-dce1\fR 4
  .IX Item "-fdump-rtl-dce1"
  .PD 0
! .IP \fB\-fdump\-rtl\-dce2\fR 4
  .IX Item "-fdump-rtl-dce2"
  .PD
  \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
  the two dead store elimination passes.
! .IP \fB\-fdump\-rtl\-eh\fR 4
  .IX Item "-fdump-rtl-eh"
! Dump after finalization of EH handling code.
! .IP \fB\-fdump\-rtl\-eh_ranges\fR 4
  .IX Item "-fdump-rtl-eh_ranges"
! Dump after conversion of EH handling range regions.
! .IP \fB\-fdump\-rtl\-expand\fR 4
  .IX Item "-fdump-rtl-expand"
! Dump after RTL generation.
! .IP \fB\-fdump\-rtl\-fwprop1\fR 4
  .IX Item "-fdump-rtl-fwprop1"
  .PD 0
! .IP \fB\-fdump\-rtl\-fwprop2\fR 4
  .IX Item "-fdump-rtl-fwprop2"
  .PD
  \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
  dumping after the two forward propagation passes.
! .IP \fB\-fdump\-rtl\-gcse1\fR 4
  .IX Item "-fdump-rtl-gcse1"
  .PD 0
! .IP \fB\-fdump\-rtl\-gcse2\fR 4
  .IX Item "-fdump-rtl-gcse2"
  .PD
  \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
  after global common subexpression elimination.
! .IP \fB\-fdump\-rtl\-init\-regs\fR 4
  .IX Item "-fdump-rtl-init-regs"
  Dump after the initialization of the registers.
! .IP \fB\-fdump\-rtl\-initvals\fR 4
  .IX Item "-fdump-rtl-initvals"
  Dump after the computation of the initial value sets.
! .IP \fB\-fdump\-rtl\-into_cfglayout\fR 4
  .IX Item "-fdump-rtl-into_cfglayout"
  Dump after converting to cfglayout mode.
! .IP \fB\-fdump\-rtl\-ira\fR 4
  .IX Item "-fdump-rtl-ira"
  Dump after iterated register allocation.
! .IP \fB\-fdump\-rtl\-jump\fR 4
  .IX Item "-fdump-rtl-jump"
  Dump after the second jump optimization.
! .IP \fB\-fdump\-rtl\-loop2\fR 4
  .IX Item "-fdump-rtl-loop2"
  \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
  loop optimization passes.
! .IP \fB\-fdump\-rtl\-mach\fR 4
  .IX Item "-fdump-rtl-mach"
  Dump after performing the machine dependent reorganization pass, if that
  pass exists.
! .IP \fB\-fdump\-rtl\-mode_sw\fR 4
  .IX Item "-fdump-rtl-mode_sw"
  Dump after removing redundant mode switches.
! .IP \fB\-fdump\-rtl\-rnreg\fR 4
  .IX Item "-fdump-rtl-rnreg"
  Dump after register renumbering.
! .IP \fB\-fdump\-rtl\-outof_cfglayout\fR 4
  .IX Item "-fdump-rtl-outof_cfglayout"
  Dump after converting from cfglayout mode.
! .IP \fB\-fdump\-rtl\-peephole2\fR 4
  .IX Item "-fdump-rtl-peephole2"
  Dump after the peephole pass.
! .IP \fB\-fdump\-rtl\-postreload\fR 4
  .IX Item "-fdump-rtl-postreload"
! Dump after post\-reload optimizations.
! .IP \fB\-fdump\-rtl\-pro_and_epilogue\fR 4
  .IX Item "-fdump-rtl-pro_and_epilogue"
  Dump after generating the function prologues and epilogues.
! .IP \fB\-fdump\-rtl\-sched1\fR 4
  .IX Item "-fdump-rtl-sched1"
  .PD 0
! .IP \fB\-fdump\-rtl\-sched2\fR 4
  .IX Item "-fdump-rtl-sched2"
  .PD
  \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
  after the basic block scheduling passes.
! .IP \fB\-fdump\-rtl\-ree\fR 4
  .IX Item "-fdump-rtl-ree"
  Dump after sign/zero extension elimination.
! .IP \fB\-fdump\-rtl\-seqabstr\fR 4
  .IX Item "-fdump-rtl-seqabstr"
  Dump after common sequence discovery.
! .IP \fB\-fdump\-rtl\-shorten\fR 4
  .IX Item "-fdump-rtl-shorten"
  Dump after shortening branches.
! .IP \fB\-fdump\-rtl\-sibling\fR 4
  .IX Item "-fdump-rtl-sibling"
  Dump after sibling call optimizations.
! .IP \fB\-fdump\-rtl\-split1\fR 4
  .IX Item "-fdump-rtl-split1"
  .PD 0
! .IP \fB\-fdump\-rtl\-split2\fR 4
  .IX Item "-fdump-rtl-split2"
! .IP \fB\-fdump\-rtl\-split3\fR 4
  .IX Item "-fdump-rtl-split3"
! .IP \fB\-fdump\-rtl\-split4\fR 4
  .IX Item "-fdump-rtl-split4"
! .IP \fB\-fdump\-rtl\-split5\fR 4
  .IX Item "-fdump-rtl-split5"
  .PD
  These options enable dumping after five rounds of
  instruction splitting.
! .IP \fB\-fdump\-rtl\-sms\fR 4
  .IX Item "-fdump-rtl-sms"
  Dump after modulo scheduling.  This pass is only run on some
  architectures.
! .IP \fB\-fdump\-rtl\-stack\fR 4
  .IX Item "-fdump-rtl-stack"
! Dump after conversion from GCC\*(Aqs "flat register file" registers to the
! x87\*(Aqs stack\-like registers.  This pass is only run on x86 variants.
! .IP \fB\-fdump\-rtl\-subreg1\fR 4
  .IX Item "-fdump-rtl-subreg1"
  .PD 0
! .IP \fB\-fdump\-rtl\-subreg2\fR 4
  .IX Item "-fdump-rtl-subreg2"
  .PD
  \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
  the two subreg expansion passes.
! .IP \fB\-fdump\-rtl\-unshare\fR 4
  .IX Item "-fdump-rtl-unshare"
  Dump after all rtl has been unshared.
! .IP \fB\-fdump\-rtl\-vartrack\fR 4
  .IX Item "-fdump-rtl-vartrack"
  Dump after variable tracking.
! .IP \fB\-fdump\-rtl\-vregs\fR 4
  .IX Item "-fdump-rtl-vregs"
  Dump after converting virtual registers to hard registers.
! .IP \fB\-fdump\-rtl\-web\fR 4
  .IX Item "-fdump-rtl-web"
  Dump after live range splitting.
! .IP \fB\-fdump\-rtl\-regclass\fR 4
  .IX Item "-fdump-rtl-regclass"
  .PD 0
! .IP \fB\-fdump\-rtl\-subregs_of_mode_init\fR 4
  .IX Item "-fdump-rtl-subregs_of_mode_init"
! .IP \fB\-fdump\-rtl\-subregs_of_mode_finish\fR 4
  .IX Item "-fdump-rtl-subregs_of_mode_finish"
! .IP \fB\-fdump\-rtl\-dfinit\fR 4
  .IX Item "-fdump-rtl-dfinit"
! .IP \fB\-fdump\-rtl\-dfinish\fR 4
  .IX Item "-fdump-rtl-dfinish"
  .PD
  These dumps are defined but always produce empty files.
! .IP \fB\-da\fR 4
  .IX Item "-da"
  .PD 0
! .IP \fB\-fdump\-rtl\-all\fR 4
  .IX Item "-fdump-rtl-all"
  .PD
  Produce all the dumps listed above.
! .IP \fB\-dA\fR 4
  .IX Item "-dA"
  Annotate the assembler output with miscellaneous debugging information.
! .IP \fB\-dD\fR 4
  .IX Item "-dD"
  Dump all macro definitions, at the end of preprocessing, in addition to
  normal output.
! .IP \fB\-dH\fR 4
  .IX Item "-dH"
  Produce a core dump whenever an error occurs.
! .IP \fB\-dp\fR 4
  .IX Item "-dp"
  Annotate the assembler output with a comment indicating which
  pattern and alternative is used.  The length and cost of each instruction are
  also printed.
! .IP \fB\-dP\fR 4
  .IX Item "-dP"
! Dump the RTL in the assembler output as a comment before each instruction.
  Also turns on \fB\-dp\fR annotation.
! .IP \fB\-dx\fR 4
  .IX Item "-dx"
! Just generate RTL for a function instead of compiling it.  Usually used
  with \fB\-fdump\-rtl\-expand\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-debug\fR 4
  .IX Item "-fdump-debug"
  Dump debugging information generated during the debug
  generation phase.
! .IP \fB\-fdump\-earlydebug\fR 4
  .IX Item "-fdump-earlydebug"
  Dump debugging information generated during the early debug
  generation phase.
! .IP \fB\-fdump\-noaddr\fR 4
  .IX Item "-fdump-noaddr"
  When doing debugging dumps, suppress address output.  This makes it more
  feasible to use diff on debugging dumps for compiler invocations with
  different compiler binaries and/or different
  text / bss / data / heap / stack / dso start locations.
! .IP \fB\-freport\-bug\fR 4
  .IX Item "-freport-bug"
  Collect and dump debug information into a temporary file if an
! internal compiler error (ICE) occurs.
! .IP \fB\-fdump\-unnumbered\fR 4
  .IX Item "-fdump-unnumbered"
  When doing debugging dumps, suppress instruction numbers and address output.
  This makes it more feasible to use diff on debugging dumps for compiler
  invocations with different options, in particular with and without
  \&\fB\-g\fR.
! .IP \fB\-fdump\-unnumbered\-links\fR 4
  .IX Item "-fdump-unnumbered-links"
  When doing debugging dumps (see \fB\-d\fR option above), suppress
  instruction numbers for the links to the previous and next instructions
  in a sequence.
! .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR 4
  .IX Item "-fdump-ipa-switch"
  .PD 0
! .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4
  .IX Item "-fdump-ipa-switch-options"
  .PD
! Control the dumping at various stages of inter\-procedural analysis
  language tree to a file.  The file name is generated by appending a
  switch specific suffix to the source file name, and the file is created
  in the same directory as the output file.  The following dumps are
  possible:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
! Enables all inter\-procedural analysis dumps.
! .IP \fBcgraph\fR 4
  .IX Item "cgraph"
! Dumps information about call\-graph optimization, unused function removal,
  and inlining decisions.
! .IP \fBinline\fR 4
  .IX Item "inline"
  Dump after function inlining.
! .IP \fBstrubm\fR 4
  .IX Item "strubm"
  Dump after selecting \f(CW\*(C`strub\*(C'\fR modes, and recording the selections as
  function attributes.
! .IP \fBstrub\fR 4
  .IX Item "strub"
  Dump \f(CW\*(C`strub\*(C'\fR transformations: interface changes, function wrapping,
  and insertion of builtin calls for stack scrubbing and watermarking.
*************** that were not inlined.
*** 19481,19495 ****
  .Sp
  By default, the dump will contain messages about successful
  optimizations (equivalent to \fB\-optimized\fR) together with
! low-level details about the analysis.
  .RE
! .IP "\fB\-fdump\-ipa\-clones\fR" 4
  .IX Item "-fdump-ipa-clones"
  Create a dump file containing information about creation of call graph
! node clones and removals of call graph nodes during inter-procedural
  optimizations and transformations.  Its main intended use is that tools
! that create live-patches can determine the set of functions that need to
! be live-patched to completely replace a particular function (see
  \&\fB\-flive\-patching\fR).  The file name is generated by appending
  suffix \f(CW\*(C`ipa\-clones\*(C'\fR to the source file name, and the file is
  created in the same directory as the output file.  Each entry in the
--- 19416,19430 ----
  .Sp
  By default, the dump will contain messages about successful
  optimizations (equivalent to \fB\-optimized\fR) together with
! low\-level details about the analysis.
  .RE
! .IP \fB\-fdump\-ipa\-clones\fR 4
  .IX Item "-fdump-ipa-clones"
  Create a dump file containing information about creation of call graph
! node clones and removals of call graph nodes during inter\-procedural
  optimizations and transformations.  Its main intended use is that tools
! that create live\-patches can determine the set of functions that need to
! be live\-patched to completely replace a particular function (see
  \&\fB\-flive\-patching\fR).  The file name is generated by appending
  suffix \f(CW\*(C`ipa\-clones\*(C'\fR to the source file name, and the file is
  created in the same directory as the output file.  Each entry in the
*************** file is on a separate line containing se
*** 19497,19618 ****
  .Sp
  In the case of call graph clone creation, the individual fields are:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph clone\*(C'\fR.
! .IP "2." 4
  .IX Item "2."
  Name of the function being cloned as it is presented to the assembler.
! .IP "3." 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole-program analysis but is likely to be different in the two
  phases.
! .IP "4." 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP "5." 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP "6." 4
  .IX Item "6."
  The column where the function definition is located.
! .IP "7." 4
  .IX Item "7."
  Name of the new function clone as it is presented to the assembler.
! .IP "8." 4
  .IX Item "8."
  A number that uniquely represents the new function clone in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole-program analysis but is likely to be different in the two
  phases.
! .IP "9." 4
  .IX Item "9."
  The file name of the source file where the source code location of the
  new clone points to.
! .IP "10." 4
  .IX Item "10."
  The line to which the source code location of the new clone points to.
! .IP "11." 4
  .IX Item "11."
  The column to which the source code location of the new clone points to.
! .IP "12." 4
  .IX Item "12."
  A string that determines the reason for cloning.
  .RE
  .RS 4
  .Sp
  In the case of call graph clone removal, the individual fields are:
! .IP "1." 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph removal\*(C'\fR.
! .IP "2." 4
  .IX Item "2."
  Name of the function being removed as it would be presented to the assembler.
! .IP "3." 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole-program analysis but is likely to be different in the two
  phases.
! .IP "4." 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP "5." 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP "6." 4
  .IX Item "6."
  The column where the function definition is located.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-lang\fR" 4
  .IX Item "-fdump-lang"
! Dump language-specific information.  The file name is made by appending
  \&\fI.lang\fR to the source file name.
! .IP "\fB\-fdump\-lang\-all\fR" 4
  .IX Item "-fdump-lang-all"
  .PD 0
! .IP "\fB\-fdump\-lang\-\fR\fIswitch\fR" 4
  .IX Item "-fdump-lang-switch"
! .IP "\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
  .IX Item "-fdump-lang-switch-options"
! .IP "\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fdump-lang-switch-options=filename"
  .PD
! Control the dumping of language-specific information.  The \fIoptions\fR
  and \fIfilename\fR portions behave as described in the
  \&\fB\-fdump\-tree\fR option.  The following \fIswitch\fR values are
  accepted:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
! Enable all language-specific dumps.
! .IP "\fBclass\fR" 4
  .IX Item "class"
  Dump class hierarchy information.  Virtual table information is emitted
! unless '\fBslim\fR' is specified.  This option is applicable to \*(C+ only.
! .IP "\fBmodule\fR" 4
  .IX Item "module"
  Dump module information.  Options \fBlineno\fR (locations),
  \&\fBgraph\fR (reachability), \fBblocks\fR (clusters),
  \&\fBuid\fR (serialization), \fBalias\fR (mergeable),
  \&\fBasmname\fR (Elrond), \fBeh\fR (mapper) & \fBvops\fR
  (macros) may provide additional information.  This option is
! applicable to \*(C+ only.
! .IP "\fBraw\fR" 4
  .IX Item "raw"
! Dump the raw internal tree data.  This option is applicable to \*(C+ only.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-passes\fR" 4
  .IX Item "-fdump-passes"
  Print on \fIstderr\fR the list of optimization passes that are turned
! on and off by the current command-line options.
! .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
  .IX Item "-fdump-statistics-option"
  Enable and control dumping of pass statistics in a separate file.  The
  file name is generated by appending a suffix ending in
--- 19432,19553 ----
  .Sp
  In the case of call graph clone creation, the individual fields are:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph clone\*(C'\fR.
! .IP 2. 4
  .IX Item "2."
  Name of the function being cloned as it is presented to the assembler.
! .IP 3. 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole\-program analysis but is likely to be different in the two
  phases.
! .IP 4. 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP 5. 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP 6. 4
  .IX Item "6."
  The column where the function definition is located.
! .IP 7. 4
  .IX Item "7."
  Name of the new function clone as it is presented to the assembler.
! .IP 8. 4
  .IX Item "8."
  A number that uniquely represents the new function clone in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole\-program analysis but is likely to be different in the two
  phases.
! .IP 9. 4
  .IX Item "9."
  The file name of the source file where the source code location of the
  new clone points to.
! .IP 10. 4
  .IX Item "10."
  The line to which the source code location of the new clone points to.
! .IP 11. 4
  .IX Item "11."
  The column to which the source code location of the new clone points to.
! .IP 12. 4
  .IX Item "12."
  A string that determines the reason for cloning.
  .RE
  .RS 4
  .Sp
  In the case of call graph clone removal, the individual fields are:
! .IP 1. 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph removal\*(C'\fR.
! .IP 2. 4
  .IX Item "2."
  Name of the function being removed as it would be presented to the assembler.
! .IP 3. 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole\-program analysis but is likely to be different in the two
  phases.
! .IP 4. 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP 5. 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP 6. 4
  .IX Item "6."
  The column where the function definition is located.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-lang\fR 4
  .IX Item "-fdump-lang"
! Dump language\-specific information.  The file name is made by appending
  \&\fI.lang\fR to the source file name.
! .IP \fB\-fdump\-lang\-all\fR 4
  .IX Item "-fdump-lang-all"
  .PD 0
! .IP \fB\-fdump\-lang\-\fR\fIswitch\fR 4
  .IX Item "-fdump-lang-switch"
! .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4
  .IX Item "-fdump-lang-switch-options"
! .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fdump-lang-switch-options=filename"
  .PD
! Control the dumping of language\-specific information.  The \fIoptions\fR
  and \fIfilename\fR portions behave as described in the
  \&\fB\-fdump\-tree\fR option.  The following \fIswitch\fR values are
  accepted:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
! Enable all language\-specific dumps.
! .IP \fBclass\fR 4
  .IX Item "class"
  Dump class hierarchy information.  Virtual table information is emitted
! unless \*(Aq\fBslim\fR\*(Aq is specified.  This option is applicable to C++ only.
! .IP \fBmodule\fR 4
  .IX Item "module"
  Dump module information.  Options \fBlineno\fR (locations),
  \&\fBgraph\fR (reachability), \fBblocks\fR (clusters),
  \&\fBuid\fR (serialization), \fBalias\fR (mergeable),
  \&\fBasmname\fR (Elrond), \fBeh\fR (mapper) & \fBvops\fR
  (macros) may provide additional information.  This option is
! applicable to C++ only.
! .IP \fBraw\fR 4
  .IX Item "raw"
! Dump the raw internal tree data.  This option is applicable to C++ only.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-passes\fR 4
  .IX Item "-fdump-passes"
  Print on \fIstderr\fR the list of optimization passes that are turned
! on and off by the current command\-line options.
! .IP \fB\-fdump\-statistics\-\fR\fIoption\fR 4
  .IX Item "-fdump-statistics-option"
  Enable and control dumping of pass statistics in a separate file.  The
  file name is generated by appending a suffix ending in
*************** form is used, \fB\-stats\fR causes count
*** 19622,19635 ****
  whole compilation unit while \fB\-details\fR dumps every event as
  the passes generate them.  The default with no option is to sum
  counters for each function compiled.
! .IP "\fB\-fdump\-tree\-all\fR" 4
  .IX Item "-fdump-tree-all"
  .PD 0
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
  .IX Item "-fdump-tree-switch"
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
  .IX Item "-fdump-tree-switch-options"
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fdump-tree-switch-options=filename"
  .PD
  Control the dumping at various stages of processing the intermediate
--- 19557,19570 ----
  whole compilation unit while \fB\-details\fR dumps every event as
  the passes generate them.  The default with no option is to sum
  counters for each function compiled.
! .IP \fB\-fdump\-tree\-all\fR 4
  .IX Item "-fdump-tree-all"
  .PD 0
! .IP \fB\-fdump\-tree\-\fR\fIswitch\fR 4
  .IX Item "-fdump-tree-switch"
! .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4
  .IX Item "-fdump-tree-switch-options"
! .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fdump-tree-switch-options=filename"
  .PD
  Control the dumping at various stages of processing the intermediate
*************** which control the details of the dump.
*** 19639,19726 ****
  to all dumps; those that are not meaningful are ignored.  The
  following options are available
  .RS 4
! .IP "\fBaddress\fR" 4
  .IX Item "address"
  Print the address of each node.  Usually this is not meaningful as it
  changes according to the environment and source file.  Its primary use
  is for tying up a dump file with a debug environment.
! .IP "\fBasmname\fR" 4
  .IX Item "asmname"
  If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
  in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
  use working backward from mangled names in the assembly file.
! .IP "\fBslim\fR" 4
  .IX Item "slim"
! When dumping front-end intermediate representations, inhibit dumping
  of members of a scope or body of a function merely because that scope
  has been reached.  Only dump such items when they are directly reachable
  by some other path.
  .Sp
! When dumping pretty-printed trees, this option inhibits dumping the
  bodies of control structures.
  .Sp
! When dumping \s-1RTL,\s0 print the \s-1RTL\s0 in slim (condensed) form instead of
! the default LISP-like representation.
! .IP "\fBraw\fR" 4
  .IX Item "raw"
  Print a raw representation of the tree.  By default, trees are
! pretty-printed into a C\-like representation.
! .IP "\fBdetails\fR" 4
  .IX Item "details"
  Enable more detailed dumps (not honored by every dump option). Also
  include information from the optimization passes.
! .IP "\fBstats\fR" 4
  .IX Item "stats"
  Enable dumping various statistics about the pass (not honored by every dump
  option).
! .IP "\fBblocks\fR" 4
  .IX Item "blocks"
  Enable showing basic block boundaries (disabled in raw dumps).
! .IP "\fBgraph\fR" 4
  .IX Item "graph"
  For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
  dump a representation of the control flow graph suitable for viewing with
! GraphViz to \fI\fIfile\fI.\fIpassid\fI.\fIpass\fI.dot\fR.  Each function in
! the file is pretty-printed as a subgraph, so that GraphViz can render them
  all in a single plot.
  .Sp
! This option currently only works for \s-1RTL\s0 dumps, and the \s-1RTL\s0 is always
  dumped in slim form.
! .IP "\fBvops\fR" 4
  .IX Item "vops"
  Enable showing virtual operands for every statement.
! .IP "\fBlineno\fR" 4
  .IX Item "lineno"
  Enable showing line numbers for statements.
! .IP "\fBuid\fR" 4
  .IX Item "uid"
! Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
! .IP "\fBverbose\fR" 4
  .IX Item "verbose"
  Enable showing the tree dump for each statement.
! .IP "\fBeh\fR" 4
  .IX Item "eh"
! Enable showing the \s-1EH\s0 region number holding each statement.
! .IP "\fBscev\fR" 4
  .IX Item "scev"
  Enable showing scalar evolution analysis details.
! .IP "\fBoptimized\fR" 4
  .IX Item "optimized"
  Enable showing optimization information (only available in certain
  passes).
! .IP "\fBmissed\fR" 4
  .IX Item "missed"
  Enable showing missed optimization information (only available in certain
  passes).
! .IP "\fBnote\fR" 4
  .IX Item "note"
  Enable other detailed optimization information (only available in
  certain passes).
! .IP "\fBall\fR" 4
  .IX Item "all"
  Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
  and \fBlineno\fR.
! .IP "\fBoptall\fR" 4
  .IX Item "optall"
  Turn on all optimization options, i.e., \fBoptimized\fR,
  \&\fBmissed\fR, and \fBnote\fR.
--- 19574,19661 ----
  to all dumps; those that are not meaningful are ignored.  The
  following options are available
  .RS 4
! .IP \fBaddress\fR 4
  .IX Item "address"
  Print the address of each node.  Usually this is not meaningful as it
  changes according to the environment and source file.  Its primary use
  is for tying up a dump file with a debug environment.
! .IP \fBasmname\fR 4
  .IX Item "asmname"
  If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
  in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
  use working backward from mangled names in the assembly file.
! .IP \fBslim\fR 4
  .IX Item "slim"
! When dumping front\-end intermediate representations, inhibit dumping
  of members of a scope or body of a function merely because that scope
  has been reached.  Only dump such items when they are directly reachable
  by some other path.
  .Sp
! When dumping pretty\-printed trees, this option inhibits dumping the
  bodies of control structures.
  .Sp
! When dumping RTL, print the RTL in slim (condensed) form instead of
! the default LISP\-like representation.
! .IP \fBraw\fR 4
  .IX Item "raw"
  Print a raw representation of the tree.  By default, trees are
! pretty\-printed into a C\-like representation.
! .IP \fBdetails\fR 4
  .IX Item "details"
  Enable more detailed dumps (not honored by every dump option). Also
  include information from the optimization passes.
! .IP \fBstats\fR 4
  .IX Item "stats"
  Enable dumping various statistics about the pass (not honored by every dump
  option).
! .IP \fBblocks\fR 4
  .IX Item "blocks"
  Enable showing basic block boundaries (disabled in raw dumps).
! .IP \fBgraph\fR 4
  .IX Item "graph"
  For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
  dump a representation of the control flow graph suitable for viewing with
! GraphViz to \fIfile.passid.pass.dot\fR.  Each function in
! the file is pretty\-printed as a subgraph, so that GraphViz can render them
  all in a single plot.
  .Sp
! This option currently only works for RTL dumps, and the RTL is always
  dumped in slim form.
! .IP \fBvops\fR 4
  .IX Item "vops"
  Enable showing virtual operands for every statement.
! .IP \fBlineno\fR 4
  .IX Item "lineno"
  Enable showing line numbers for statements.
! .IP \fBuid\fR 4
  .IX Item "uid"
! Enable showing the unique ID (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
! .IP \fBverbose\fR 4
  .IX Item "verbose"
  Enable showing the tree dump for each statement.
! .IP \fBeh\fR 4
  .IX Item "eh"
! Enable showing the EH region number holding each statement.
! .IP \fBscev\fR 4
  .IX Item "scev"
  Enable showing scalar evolution analysis details.
! .IP \fBoptimized\fR 4
  .IX Item "optimized"
  Enable showing optimization information (only available in certain
  passes).
! .IP \fBmissed\fR 4
  .IX Item "missed"
  Enable showing missed optimization information (only available in certain
  passes).
! .IP \fBnote\fR 4
  .IX Item "note"
  Enable other detailed optimization information (only available in
  certain passes).
! .IP \fBall\fR 4
  .IX Item "all"
  Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
  and \fBlineno\fR.
! .IP \fBoptall\fR 4
  .IX Item "optall"
  Turn on all optimization options, i.e., \fBoptimized\fR,
  \&\fBmissed\fR, and \fBnote\fR.
*************** Turn on all optimization options, i.e.,
*** 19729,19768 ****
  .Sp
  To determine what tree dumps are available or find the dump for a pass
  of interest follow the steps below.
! .IP "1." 4
  .IX Item "1."
! Invoke \s-1GCC\s0 with \fB\-fdump\-passes\fR and in the \fIstderr\fR output
  look for a code that corresponds to the pass you are interested in.
  For example, the codes \f(CW\*(C`tree\-evrp\*(C'\fR, \f(CW\*(C`tree\-vrp1\*(C'\fR, and
  \&\f(CW\*(C`tree\-vrp2\*(C'\fR correspond to the three Value Range Propagation passes.
  The number at the end distinguishes distinct invocations of the same pass.
! .IP "2." 4
  .IX Item "2."
  To enable the creation of the dump file, append the pass code to
! the \fB\-fdump\-\fR option prefix and invoke \s-1GCC\s0 with it.  For example,
  to enable the dump from the Early Value Range Propagation pass, invoke
! \&\s-1GCC\s0 with the \fB\-fdump\-tree\-evrp\fR option.  Optionally, you may
! specify the name of the dump file.  If you don't specify one, \s-1GCC\s0
  creates as described below.
! .IP "3." 4
  .IX Item "3."
  Find the pass dump in a file whose name is composed of three components
! separated by a period: the name of the source file \s-1GCC\s0 was invoked to
  compile, a numeric suffix indicating the pass number followed by the
! letter \fBt\fR for tree passes (and the letter \fBr\fR for \s-1RTL\s0 passes),
! and finally the pass code.  For example, the Early \s-1VRP\s0 pass dump might
  be in a file named \fImyfile.c.038t.evrp\fR in the current working
  directory.  Note that the numeric codes are not stable and may change
! from one version of \s-1GCC\s0 to another.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fopt\-info\fR" 4
  .IX Item "-fopt-info"
  .PD 0
! .IP "\fB\-fopt\-info\-\fR\fIoptions\fR" 4
  .IX Item "-fopt-info-options"
! .IP "\fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fopt-info-options=filename"
  .PD
  Controls optimization dumps from various optimization passes. If the
--- 19664,19703 ----
  .Sp
  To determine what tree dumps are available or find the dump for a pass
  of interest follow the steps below.
! .IP 1. 4
  .IX Item "1."
! Invoke GCC with \fB\-fdump\-passes\fR and in the \fIstderr\fR output
  look for a code that corresponds to the pass you are interested in.
  For example, the codes \f(CW\*(C`tree\-evrp\*(C'\fR, \f(CW\*(C`tree\-vrp1\*(C'\fR, and
  \&\f(CW\*(C`tree\-vrp2\*(C'\fR correspond to the three Value Range Propagation passes.
  The number at the end distinguishes distinct invocations of the same pass.
! .IP 2. 4
  .IX Item "2."
  To enable the creation of the dump file, append the pass code to
! the \fB\-fdump\-\fR option prefix and invoke GCC with it.  For example,
  to enable the dump from the Early Value Range Propagation pass, invoke
! GCC with the \fB\-fdump\-tree\-evrp\fR option.  Optionally, you may
! specify the name of the dump file.  If you don\*(Aqt specify one, GCC
  creates as described below.
! .IP 3. 4
  .IX Item "3."
  Find the pass dump in a file whose name is composed of three components
! separated by a period: the name of the source file GCC was invoked to
  compile, a numeric suffix indicating the pass number followed by the
! letter \fBt\fR for tree passes (and the letter \fBr\fR for RTL passes),
! and finally the pass code.  For example, the Early VRP pass dump might
  be in a file named \fImyfile.c.038t.evrp\fR in the current working
  directory.  Note that the numeric codes are not stable and may change
! from one version of GCC to another.
  .RE
  .RS 4
  .RE
! .IP \fB\-fopt\-info\fR 4
  .IX Item "-fopt-info"
  .PD 0
! .IP \fB\-fopt\-info\-\fR\fIoptions\fR 4
  .IX Item "-fopt-info-options"
! .IP \fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fopt-info-options=filename"
  .PD
  Controls optimization dumps from various optimization passes. If the
*************** optimizations.
*** 19772,19810 ****
  .Sp
  The \fIoptions\fR can be divided into three groups:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  options describing what kinds of messages should be emitted,
! .IP "2." 4
  .IX Item "2."
  options describing the verbosity of the dump, and
! .IP "3." 4
  .IX Item "3."
  options describing which optimizations should be included.
  .RE
  .RS 4
  .Sp
  The options from each group can be freely mixed as they are
! non-overlapping. However, in case of any conflicts,
  the later options override the earlier options on the command
  line.
  .Sp
  The following options control which kinds of messages should be emitted:
! .IP "\fBoptimized\fR" 4
  .IX Item "optimized"
  Print information when an optimization is successfully applied. It is
  up to a pass to decide which information is relevant. For example, the
  vectorizer passes print the source location of loops which are
  successfully vectorized.
! .IP "\fBmissed\fR" 4
  .IX Item "missed"
  Print information about missed optimizations. Individual passes
  control which information to include in the output.
! .IP "\fBnote\fR" 4
  .IX Item "note"
  Print verbose information about optimizations, such as certain
  transformations, more detailed messages about decisions etc.
! .IP "\fBall\fR" 4
  .IX Item "all"
  Print detailed optimization information. This includes
  \&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
--- 19707,19745 ----
  .Sp
  The \fIoptions\fR can be divided into three groups:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  options describing what kinds of messages should be emitted,
! .IP 2. 4
  .IX Item "2."
  options describing the verbosity of the dump, and
! .IP 3. 4
  .IX Item "3."
  options describing which optimizations should be included.
  .RE
  .RS 4
  .Sp
  The options from each group can be freely mixed as they are
! non\-overlapping. However, in case of any conflicts,
  the later options override the earlier options on the command
  line.
  .Sp
  The following options control which kinds of messages should be emitted:
! .IP \fBoptimized\fR 4
  .IX Item "optimized"
  Print information when an optimization is successfully applied. It is
  up to a pass to decide which information is relevant. For example, the
  vectorizer passes print the source location of loops which are
  successfully vectorized.
! .IP \fBmissed\fR 4
  .IX Item "missed"
  Print information about missed optimizations. Individual passes
  control which information to include in the output.
! .IP \fBnote\fR 4
  .IX Item "note"
  Print verbose information about optimizations, such as certain
  transformations, more detailed messages about decisions etc.
! .IP \fBall\fR 4
  .IX Item "all"
  Print detailed optimization information. This includes
  \&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
*************** Print detailed optimization information.
*** 19812,19843 ****
  .RS 4
  .Sp
  The following option controls the dump verbosity:
! .IP "\fBinternals\fR" 4
  .IX Item "internals"
! By default, only \*(L"high-level\*(R" messages are emitted. This option enables
  additional, more detailed, messages, which are likely to only be of interest
! to \s-1GCC\s0 developers.
  .RE
  .RS 4
  .Sp
  One or more of the following option keywords can be used to describe a
  group of optimizations:
! .IP "\fBipa\fR" 4
  .IX Item "ipa"
  Enable dumps from all interprocedural optimizations.
! .IP "\fBloop\fR" 4
  .IX Item "loop"
  Enable dumps from all loop optimizations.
! .IP "\fBinline\fR" 4
  .IX Item "inline"
  Enable dumps from all inlining optimizations.
! .IP "\fBomp\fR" 4
  .IX Item "omp"
! Enable dumps from all \s-1OMP\s0 (Offloading and Multi Processing) optimizations.
! .IP "\fBvec\fR" 4
  .IX Item "vec"
  Enable dumps from all vectorization optimizations.
! .IP "\fBoptall\fR" 4
  .IX Item "optall"
  Enable dumps from all optimizations. This is a superset of
  the optimization groups listed above.
--- 19747,19778 ----
  .RS 4
  .Sp
  The following option controls the dump verbosity:
! .IP \fBinternals\fR 4
  .IX Item "internals"
! By default, only "high\-level" messages are emitted. This option enables
  additional, more detailed, messages, which are likely to only be of interest
! to GCC developers.
  .RE
  .RS 4
  .Sp
  One or more of the following option keywords can be used to describe a
  group of optimizations:
! .IP \fBipa\fR 4
  .IX Item "ipa"
  Enable dumps from all interprocedural optimizations.
! .IP \fBloop\fR 4
  .IX Item "loop"
  Enable dumps from all loop optimizations.
! .IP \fBinline\fR 4
  .IX Item "inline"
  Enable dumps from all inlining optimizations.
! .IP \fBomp\fR 4
  .IX Item "omp"
! Enable dumps from all OMP (Offloading and Multi Processing) optimizations.
! .IP \fBvec\fR 4
  .IX Item "vec"
  Enable dumps from all vectorization optimizations.
! .IP \fBoptall\fR 4
  .IX Item "optall"
  Enable dumps from all optimizations. This is a superset of
  the optimization groups listed above.
*************** the optimization groups listed above.
*** 19845,19853 ****
  .RS 4
  .Sp
  If \fIoptions\fR is
! omitted, it defaults to \fBoptimized-optall\fR, which means to dump messages
  about successful optimizations from all the passes, omitting messages
! that are treated as \*(L"internals\*(R".
  .Sp
  If the \fIfilename\fR is provided, then the dumps from all the
  applicable optimizations are concatenated into the \fIfilename\fR.
--- 19780,19788 ----
  .RS 4
  .Sp
  If \fIoptions\fR is
! omitted, it defaults to \fBoptimized\-optall\fR, which means to dump messages
  about successful optimizations from all the passes, omitting messages
! that are treated as "internals".
  .Sp
  If the \fIfilename\fR is provided, then the dumps from all the
  applicable optimizations are concatenated into the \fIfilename\fR.
*************** the first option takes effect and the su
*** 19909,19945 ****
  ignored. Thus only \fIvec.miss\fR is produced which contains
  dumps from the vectorizer about missed opportunities.
  .RE
! .IP "\fB\-fsave\-optimization\-record\fR" 4
  .IX Item "-fsave-optimization-record"
! Write a \s-1SRCFILE\s0.opt\-record.json.gz file detailing what optimizations
  were performed, for those optimizations that support \fB\-fopt\-info\fR.
  .Sp
  This option is experimental and the format of the data within the
! compressed \s-1JSON\s0 file is subject to change.
  .Sp
! It is roughly equivalent to a machine-readable version of
  \&\fB\-fopt\-info\-all\fR, as a collection of messages with source file,
  line number and column number, with the following additional data for
  each message:
  .RS 4
! .IP "*" 4
  the execution count of the code being optimized, along with metadata about
  whether this was from actual profile data, or just an estimate, allowing
  consumers to prioritize messages by code hotness,
! .IP "*" 4
  the function name of the code being optimized, where applicable,
! .IP "*" 4
! the \*(L"inlining chain\*(R" for the code being optimized, so that when
  a function is inlined into several different places (which might
  themselves be inlined), the reader can distinguish between the copies,
! .IP "*" 4
  objects identifying those parts of the message that refer to expressions,
! statements or symbol-table nodes, which of these categories they are, and,
  when available, their source code location,
! .IP "*" 4
! the \s-1GCC\s0 pass that emitted the message, and
! .IP "*" 4
! the location in \s-1GCC\s0's own code from which the message was emitted
  .RE
  .RS 4
  .Sp
--- 19844,19880 ----
  ignored. Thus only \fIvec.miss\fR is produced which contains
  dumps from the vectorizer about missed opportunities.
  .RE
! .IP \fB\-fsave\-optimization\-record\fR 4
  .IX Item "-fsave-optimization-record"
! Write a SRCFILE.opt\-record.json.gz file detailing what optimizations
  were performed, for those optimizations that support \fB\-fopt\-info\fR.
  .Sp
  This option is experimental and the format of the data within the
! compressed JSON file is subject to change.
  .Sp
! It is roughly equivalent to a machine\-readable version of
  \&\fB\-fopt\-info\-all\fR, as a collection of messages with source file,
  line number and column number, with the following additional data for
  each message:
  .RS 4
! .IP * 4
  the execution count of the code being optimized, along with metadata about
  whether this was from actual profile data, or just an estimate, allowing
  consumers to prioritize messages by code hotness,
! .IP * 4
  the function name of the code being optimized, where applicable,
! .IP * 4
! the "inlining chain" for the code being optimized, so that when
  a function is inlined into several different places (which might
  themselves be inlined), the reader can distinguish between the copies,
! .IP * 4
  objects identifying those parts of the message that refer to expressions,
! statements or symbol\-table nodes, which of these categories they are, and,
  when available, their source code location,
! .IP * 4
! the GCC pass that emitted the message, and
! .IP * 4
! the location in GCC\*(Aqs own code from which the message was emitted
  .RE
  .RS 4
  .Sp
*************** Additionally, some messages are logicall
*** 19947,19953 ****
  messages, reflecting implementation details of the optimization
  passes.
  .RE
! .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
  .IX Item "-fsched-verbose=n"
  On targets that use instruction scheduling, this option controls the
  amount of debugging output the scheduler prints to the dump files.
--- 19882,19888 ----
  messages, reflecting implementation details of the optimization
  passes.
  .RE
! .IP \fB\-fsched\-verbose=\fR\fIn\fR 4
  .IX Item "-fsched-verbose=n"
  On targets that use instruction scheduling, this option controls the
  amount of debugging output the scheduler prints to the dump files.
*************** For \fIn\fR greater than zero, \fB\-fsch
*** 19956,20021 ****
  same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
  For \fIn\fR greater than one, it also output basic block probabilities,
  detailed ready list information and unit/insn info.  For \fIn\fR greater
! than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
  And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
  dependence info.
! .IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
  .IX Item "-fenable-kind-pass"
  .PD 0
! .IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fdisable-kind-pass=range-list"
  .PD
  This is a set of options that are used to explicitly disable/enable
! optimization passes.  These options are intended for use for debugging \s-1GCC.\s0
  Compiler users should use regular options for enabling/disabling
  passes instead.
  .RS 4
! .IP "\fB\-fdisable\-ipa\-\fR\fIpass\fR" 4
  .IX Item "-fdisable-ipa-pass"
! Disable \s-1IPA\s0 pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR" 4
  .IX Item "-fdisable-rtl-pass"
  .PD 0
! .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fdisable-rtl-pass=range-list"
  .PD
! Disable \s-1RTL\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
! appended with a sequential number starting from 1.  \fIrange-list\fR is a 
! comma-separated list of function ranges or assembler names.  Each range is a number
  pair separated by a colon.  The range is inclusive in both ends.  If the range
  is trivial, the number pair can be simplified as a single number.  If the
! function's call graph node's \fIuid\fR falls within one of the specified ranges,
  the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
  function header of a dump file, and the pass names can be dumped by using
  option \fB\-fdump\-passes\fR.
! .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR" 4
  .IX Item "-fdisable-tree-pass"
  .PD 0
! .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fdisable-tree-pass=range-list"
  .PD
  Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
  option arguments.
! .IP "\fB\-fenable\-ipa\-\fR\fIpass\fR" 4
  .IX Item "-fenable-ipa-pass"
! Enable \s-1IPA\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR" 4
  .IX Item "-fenable-rtl-pass"
  .PD 0
! .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fenable-rtl-pass=range-list"
  .PD
! Enable \s-1RTL\s0 pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
  description and examples.
! .IP "\fB\-fenable\-tree\-\fR\fIpass\fR" 4
  .IX Item "-fenable-tree-pass"
  .PD 0
! .IP "\fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fenable-tree-pass=range-list"
  .PD
  Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
--- 19891,19956 ----
  same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
  For \fIn\fR greater than one, it also output basic block probabilities,
  detailed ready list information and unit/insn info.  For \fIn\fR greater
! than two, it includes RTL at abort point, control\-flow and regions info.
  And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
  dependence info.
! .IP \fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 4
  .IX Item "-fenable-kind-pass"
  .PD 0
! .IP \fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fdisable-kind-pass=range-list"
  .PD
  This is a set of options that are used to explicitly disable/enable
! optimization passes.  These options are intended for use for debugging GCC.
  Compiler users should use regular options for enabling/disabling
  passes instead.
  .RS 4
! .IP \fB\-fdisable\-ipa\-\fR\fIpass\fR 4
  .IX Item "-fdisable-ipa-pass"
! Disable IPA pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP \fB\-fdisable\-rtl\-\fR\fIpass\fR 4
  .IX Item "-fdisable-rtl-pass"
  .PD 0
! .IP \fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fdisable-rtl-pass=range-list"
  .PD
! Disable RTL pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
! appended with a sequential number starting from 1.  \fIrange\-list\fR is a 
! comma\-separated list of function ranges or assembler names.  Each range is a number
  pair separated by a colon.  The range is inclusive in both ends.  If the range
  is trivial, the number pair can be simplified as a single number.  If the
! function\*(Aqs call graph node\*(Aqs \fIuid\fR falls within one of the specified ranges,
  the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
  function header of a dump file, and the pass names can be dumped by using
  option \fB\-fdump\-passes\fR.
! .IP \fB\-fdisable\-tree\-\fR\fIpass\fR 4
  .IX Item "-fdisable-tree-pass"
  .PD 0
! .IP \fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fdisable-tree-pass=range-list"
  .PD
  Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
  option arguments.
! .IP \fB\-fenable\-ipa\-\fR\fIpass\fR 4
  .IX Item "-fenable-ipa-pass"
! Enable IPA pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP \fB\-fenable\-rtl\-\fR\fIpass\fR 4
  .IX Item "-fenable-rtl-pass"
  .PD 0
! .IP \fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fenable-rtl-pass=range-list"
  .PD
! Enable RTL pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
  description and examples.
! .IP \fB\-fenable\-tree\-\fR\fIpass\fR 4
  .IX Item "-fenable-tree-pass"
  .PD 0
! .IP \fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fenable-tree-pass=range-list"
  .PD
  Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
*************** Here are some examples showing uses of t
*** 20042,20059 ****
  \&           \-fenable\-tree\-unroll
  .Ve
  .RE
! .IP "\fB\-fchecking\fR" 4
  .IX Item "-fchecking"
  .PD 0
! .IP "\fB\-fchecking=\fR\fIn\fR" 4
  .IX Item "-fchecking=n"
  .PD
  Enable internal consistency checking.  The default depends on
  the compiler configuration.  \fB\-fchecking=2\fR enables further
  internal consistency checking that might affect code generation.
! .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
  .IX Item "-frandom-seed=string"
! This option provides a seed that \s-1GCC\s0 uses in place of
  random numbers in generating certain symbol names
  that have to be different in every compiled file.  It is also used to
  place unique stamps in coverage data files and the object files that
--- 19977,19994 ----
  \&           \-fenable\-tree\-unroll
  .Ve
  .RE
! .IP \fB\-fchecking\fR 4
  .IX Item "-fchecking"
  .PD 0
! .IP \fB\-fchecking=\fR\fIn\fR 4
  .IX Item "-fchecking=n"
  .PD
  Enable internal consistency checking.  The default depends on
  the compiler configuration.  \fB\-fchecking=2\fR enables further
  internal consistency checking that might affect code generation.
! .IP \fB\-frandom\-seed=\fR\fIstring\fR 4
  .IX Item "-frandom-seed=string"
! This option provides a seed that GCC uses in place of
  random numbers in generating certain symbol names
  that have to be different in every compiled file.  It is also used to
  place unique stamps in coverage data files and the object files that
*************** produce them.  You can use the \fB\-fran
*** 20061,20094 ****
  reproducibly identical object files.
  .Sp
  The \fIstring\fR can either be a number (decimal, octal or hex) or an
! arbitrary string (in which case it's converted to a number by
! computing \s-1CRC32\s0).
  .Sp
  The \fIstring\fR should be different for every file you compile.
! .IP "\fB\-save\-temps\fR" 4
  .IX Item "-save-temps"
! Store the usual \*(L"temporary\*(R" intermediate files permanently; name them
  as auxiliary output files, as specified described under
  \&\fB\-dumpbase\fR and \fB\-dumpdir\fR.
  .Sp
! When used in combination with the \fB\-x\fR command-line option,
  \&\fB\-save\-temps\fR is sensible enough to avoid overwriting an
  input source file with the same extension as an intermediate file.
  The corresponding intermediate file may be obtained by renaming the
  source file before using \fB\-save\-temps\fR.
! .IP "\fB\-save\-temps=cwd\fR" 4
  .IX Item "-save-temps=cwd"
  Equivalent to \fB\-save\-temps \-dumpdir ./\fR.
! .IP "\fB\-save\-temps=obj\fR" 4
  .IX Item "-save-temps=obj"
! Equivalent to \fB\-save\-temps \-dumpdir \f(BIoutdir/\fB\fR, where
  \&\fIoutdir/\fR is the directory of the output file specified after the
  \&\fB\-o\fR option, including any directory separators.  If the
  \&\fB\-o\fR option is not used, the \fB\-save\-temps=obj\fR switch
  behaves like \fB\-save\-temps=cwd\fR.
! .IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
  .IX Item "-time[=file]"
! Report the \s-1CPU\s0 time taken by each subprocess in the compilation
  sequence.  For C source files, this is the compiler proper and assembler
  (plus the linker if linking is done).
  .Sp
--- 19996,20029 ----
  reproducibly identical object files.
  .Sp
  The \fIstring\fR can either be a number (decimal, octal or hex) or an
! arbitrary string (in which case it\*(Aqs converted to a number by
! computing CRC32).
  .Sp
  The \fIstring\fR should be different for every file you compile.
! .IP \fB\-save\-temps\fR 4
  .IX Item "-save-temps"
! Store the usual "temporary" intermediate files permanently; name them
  as auxiliary output files, as specified described under
  \&\fB\-dumpbase\fR and \fB\-dumpdir\fR.
  .Sp
! When used in combination with the \fB\-x\fR command\-line option,
  \&\fB\-save\-temps\fR is sensible enough to avoid overwriting an
  input source file with the same extension as an intermediate file.
  The corresponding intermediate file may be obtained by renaming the
  source file before using \fB\-save\-temps\fR.
! .IP \fB\-save\-temps=cwd\fR 4
  .IX Item "-save-temps=cwd"
  Equivalent to \fB\-save\-temps \-dumpdir ./\fR.
! .IP \fB\-save\-temps=obj\fR 4
  .IX Item "-save-temps=obj"
! Equivalent to \fB\-save\-temps \-dumpdir \fR\f(BIoutdir/\fR, where
  \&\fIoutdir/\fR is the directory of the output file specified after the
  \&\fB\-o\fR option, including any directory separators.  If the
  \&\fB\-o\fR option is not used, the \fB\-save\-temps=obj\fR switch
  behaves like \fB\-save\-temps=cwd\fR.
! .IP \fB\-time\fR[\fB=\fR\fIfile\fR] 4
  .IX Item "-time[=file]"
! Report the CPU time taken by each subprocess in the compilation
  sequence.  For C source files, this is the compiler proper and assembler
  (plus the linker if linking is done).
  .Sp
*************** Without the specification of an output f
*** 20099,20106 ****
  \&        # as 0.00 0.01
  .Ve
  .Sp
! The first number on each line is the \*(L"user time\*(R", that is time spent
! executing the program itself.  The second number is \*(L"system time\*(R",
  time spent executing operating system routines on behalf of the program.
  Both numbers are in seconds.
  .Sp
--- 20034,20041 ----
  \&        # as 0.00 0.01
  .Ve
  .Sp
! The first number on each line is the "user time", that is time spent
! executing the program itself.  The second number is "system time",
  time spent executing operating system routines on behalf of the program.
  Both numbers are in seconds.
  .Sp
*************** named file, and it looks like this:
*** 20112,20127 ****
  \&        0.00 0.01 as <options>
  .Ve
  .Sp
! The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
  name, and the options passed to the program are displayed, so that one
  can later tell what file was being compiled, and with which options.
! .IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
  .IX Item "-fdump-final-insns[=file]"
! Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
  optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
  of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
  dump base name, see \fB\-dumpbase\fR.
! .IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
  .IX Item "-fcompare-debug[=opts]"
  If no error occurs during compilation, run the compiler a second time,
  adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
--- 20047,20062 ----
  \&        0.00 0.01 as <options>
  .Ve
  .Sp
! The "user time" and the "system time" are moved before the program
  name, and the options passed to the program are displayed, so that one
  can later tell what file was being compiled, and with which options.
! .IP \fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] 4
  .IX Item "-fdump-final-insns[=file]"
! Dump the final internal representation (RTL) to \fIfile\fR.  If the
  optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
  of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
  dump base name, see \fB\-dumpbase\fR.
! .IP \fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR] 4
  .IX Item "-fcompare-debug[=opts]"
  If no error occurs during compilation, run the compiler a second time,
  adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
*************** representation in both compilations, and
*** 20130,20153 ****
  .Sp
  If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
  .Sp
! The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
  and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
! \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
  then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
  is used.
  .Sp
  \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
  is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
  of the final representation and the second compilation, preventing even
! \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
  .Sp
  To verify full coverage during \fB\-fcompare\-debug\fR testing, set
! \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
! which \s-1GCC\s0 rejects as an invalid option in any actual compilation
  (rather than preprocessing, assembly or linking).  To get just a
! warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
  not overridden\fR will do.
! .IP "\fB\-fcompare\-debug\-second\fR" 4
  .IX Item "-fcompare-debug-second"
  This option is implicitly passed to the compiler for the second
  compilation requested by \fB\-fcompare\-debug\fR, along with options to
--- 20065,20088 ----
  .Sp
  If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
  .Sp
! The environment variable \fBGCC_COMPARE_DEBUG\fR, if defined, non\-empty
  and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
! \&\fBGCC_COMPARE_DEBUG\fR is defined to a string starting with a dash,
  then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
  is used.
  .Sp
  \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
  is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
  of the final representation and the second compilation, preventing even
! \&\fBGCC_COMPARE_DEBUG\fR from taking effect.
  .Sp
  To verify full coverage during \fB\-fcompare\-debug\fR testing, set
! \&\fBGCC_COMPARE_DEBUG\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
! which GCC rejects as an invalid option in any actual compilation
  (rather than preprocessing, assembly or linking).  To get just a
! warning, setting \fBGCC_COMPARE_DEBUG\fR to \fB\-w%n\-fcompare\-debug
  not overridden\fR will do.
! .IP \fB\-fcompare\-debug\-second\fR 4
  .IX Item "-fcompare-debug-second"
  This option is implicitly passed to the compiler for the second
  compilation requested by \fB\-fcompare\-debug\fR, along with options to
*************** overwriting those generated by the first
*** 20160,20166 ****
  When this option is passed to the compiler driver, it causes the
  \&\fIfirst\fR compilation to be skipped, which makes it useful for little
  other than debugging the compiler proper.
! .IP "\fB\-gtoggle\fR" 4
  .IX Item "-gtoggle"
  Turn off generation of debug info, if leaving out this option
  generates it, or turn it on at level 2 otherwise.  The position of this
--- 20095,20101 ----
  When this option is passed to the compiler driver, it causes the
  \&\fIfirst\fR compilation to be skipped, which makes it useful for little
  other than debugging the compiler proper.
! .IP \fB\-gtoggle\fR 4
  .IX Item "-gtoggle"
  Turn off generation of debug info, if leaving out this option
  generates it, or turn it on at level 2 otherwise.  The position of this
*************** argument in the command line does not ma
*** 20168,20239 ****
  other options are processed, and it does so only once, no matter how
  many times it is given.  This is mainly intended to be used with
  \&\fB\-fcompare\-debug\fR.
! .IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
  .IX Item "-fvar-tracking-assignments-toggle"
  Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
  \&\fB\-gtoggle\fR toggles \fB\-g\fR.
! .IP "\fB\-Q\fR" 4
  .IX Item "-Q"
  Makes the compiler print out each function name as it is compiled, and
  print some statistics about each pass when it finishes.
! .IP "\fB\-ftime\-report\fR" 4
  .IX Item "-ftime-report"
  Makes the compiler print some statistics to stderr about the time consumed
  by each pass when it finishes.
  .Sp
! If \s-1SARIF\s0 output of diagnostics was requested via
  \&\fB\-fdiagnostics\-format=sarif\-file\fR or
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR then the \fB\-ftime\-report\fR
! information is instead emitted in \s-1JSON\s0 form as part of \s-1SARIF\s0 output.  The
! precise format of this \s-1JSON\s0 data is subject to change, and the values may
  not exactly match those emitted to stderr due to being written out at a
  slightly different place within the compiler.
! .IP "\fB\-ftime\-report\-details\fR" 4
  .IX Item "-ftime-report-details"
  Record the time consumed by infrastructure parts separately for each pass.
! .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
  .IX Item "-fira-verbose=n"
  Control the verbosity of the dump file for the integrated register allocator.
  The default value is 5.  If the value \fIn\fR is greater or equal to 10,
  the dump output is sent to stderr using the same format as \fIn\fR minus 10.
! .IP "\fB\-flto\-report\fR" 4
  .IX Item "-flto-report"
! Prints a report with internal details on the workings of the link-time
  optimizer.  The contents of this report vary from version to version.
! It is meant to be useful to \s-1GCC\s0 developers when processing object
! files in \s-1LTO\s0 mode (via \fB\-flto\fR).
  .Sp
  Disabled by default.
! .IP "\fB\-flto\-report\-wpa\fR" 4
  .IX Item "-flto-report-wpa"
! Like \fB\-flto\-report\fR, but only print for the \s-1WPA\s0 phase of link-time
  optimization.
! .IP "\fB\-fmem\-report\fR" 4
  .IX Item "-fmem-report"
  Makes the compiler print some statistics about permanent memory
  allocation when it finishes.
! .IP "\fB\-fmem\-report\-wpa\fR" 4
  .IX Item "-fmem-report-wpa"
  Makes the compiler print some statistics about permanent memory
! allocation for the \s-1WPA\s0 phase only.
! .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
  .IX Item "-fpre-ipa-mem-report"
  .PD 0
! .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
  .IX Item "-fpost-ipa-mem-report"
  .PD
  Makes the compiler print some statistics about permanent memory
  allocation before or after interprocedural optimization.
! .IP "\fB\-fmultiflags\fR" 4
  .IX Item "-fmultiflags"
! This option enables multilib-aware \f(CW\*(C`TFLAGS\*(C'\fR to be used to build
  target libraries with options different from those the compiler is
  configured to use by default, through the use of specs set up by compiler internals, by the target, or by builders at
  configure time.
  .Sp
  Like \f(CW\*(C`TFLAGS\*(C'\fR, this allows the target libraries to be built for
  portable baseline environments, while the compiler defaults to more
! demanding ones.  That's useful because users can easily override the
  defaults the compiler is configured to use to build their own programs,
  if the defaults are not ideal for their target environment, whereas
  rebuilding the runtime libraries is usually not as easy or desirable.
--- 20103,20174 ----
  other options are processed, and it does so only once, no matter how
  many times it is given.  This is mainly intended to be used with
  \&\fB\-fcompare\-debug\fR.
! .IP \fB\-fvar\-tracking\-assignments\-toggle\fR 4
  .IX Item "-fvar-tracking-assignments-toggle"
  Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
  \&\fB\-gtoggle\fR toggles \fB\-g\fR.
! .IP \fB\-Q\fR 4
  .IX Item "-Q"
  Makes the compiler print out each function name as it is compiled, and
  print some statistics about each pass when it finishes.
! .IP \fB\-ftime\-report\fR 4
  .IX Item "-ftime-report"
  Makes the compiler print some statistics to stderr about the time consumed
  by each pass when it finishes.
  .Sp
! If SARIF output of diagnostics was requested via
  \&\fB\-fdiagnostics\-format=sarif\-file\fR or
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR then the \fB\-ftime\-report\fR
! information is instead emitted in JSON form as part of SARIF output.  The
! precise format of this JSON data is subject to change, and the values may
  not exactly match those emitted to stderr due to being written out at a
  slightly different place within the compiler.
! .IP \fB\-ftime\-report\-details\fR 4
  .IX Item "-ftime-report-details"
  Record the time consumed by infrastructure parts separately for each pass.
! .IP \fB\-fira\-verbose=\fR\fIn\fR 4
  .IX Item "-fira-verbose=n"
  Control the verbosity of the dump file for the integrated register allocator.
  The default value is 5.  If the value \fIn\fR is greater or equal to 10,
  the dump output is sent to stderr using the same format as \fIn\fR minus 10.
! .IP \fB\-flto\-report\fR 4
  .IX Item "-flto-report"
! Prints a report with internal details on the workings of the link\-time
  optimizer.  The contents of this report vary from version to version.
! It is meant to be useful to GCC developers when processing object
! files in LTO mode (via \fB\-flto\fR).
  .Sp
  Disabled by default.
! .IP \fB\-flto\-report\-wpa\fR 4
  .IX Item "-flto-report-wpa"
! Like \fB\-flto\-report\fR, but only print for the WPA phase of link\-time
  optimization.
! .IP \fB\-fmem\-report\fR 4
  .IX Item "-fmem-report"
  Makes the compiler print some statistics about permanent memory
  allocation when it finishes.
! .IP \fB\-fmem\-report\-wpa\fR 4
  .IX Item "-fmem-report-wpa"
  Makes the compiler print some statistics about permanent memory
! allocation for the WPA phase only.
! .IP \fB\-fpre\-ipa\-mem\-report\fR 4
  .IX Item "-fpre-ipa-mem-report"
  .PD 0
! .IP \fB\-fpost\-ipa\-mem\-report\fR 4
  .IX Item "-fpost-ipa-mem-report"
  .PD
  Makes the compiler print some statistics about permanent memory
  allocation before or after interprocedural optimization.
! .IP \fB\-fmultiflags\fR 4
  .IX Item "-fmultiflags"
! This option enables multilib\-aware \f(CW\*(C`TFLAGS\*(C'\fR to be used to build
  target libraries with options different from those the compiler is
  configured to use by default, through the use of specs set up by compiler internals, by the target, or by builders at
  configure time.
  .Sp
  Like \f(CW\*(C`TFLAGS\*(C'\fR, this allows the target libraries to be built for
  portable baseline environments, while the compiler defaults to more
! demanding ones.  That\*(Aqs useful because users can easily override the
  defaults the compiler is configured to use to build their own programs,
  if the defaults are not ideal for their target environment, whereas
  rebuilding the runtime libraries is usually not as easy or desirable.
*************** selected for different multilibs.  The w
*** 20243,20273 ****
  build with \fBmake TFLAGS=\-fmultiflags\fR, after configuring
  \&\fB\-\-with\-specs=%{fmultiflags:...}\fR.
  .Sp
! This option is discarded by the driver once it's done processing driver
  self spec.
  .Sp
  It is also useful to check that \f(CW\*(C`TFLAGS\*(C'\fR are being used to build
! all target libraries, by configuring a non-bootstrap compiler
! \&\fB\-\-with\-specs='%{!fmultiflags:%emissing \s-1TFLAGS\s0}'\fR and building
  the compiler and target libraries.
! .IP "\fB\-fprofile\-report\fR" 4
  .IX Item "-fprofile-report"
  Makes the compiler print some statistics about consistency of the
  (estimated) profile and effect of individual passes.
! .IP "\fB\-fstack\-usage\fR" 4
  .IX Item "-fstack-usage"
  Makes the compiler output stack usage information for the program, on a
! per-function basis.  The filename for the dump is made by appending
  \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
  the output file, if explicitly specified and it is not an executable,
  otherwise it is the basename of the source file.  An entry is made up
  of three fields:
  .RS 4
! .IP "*" 4
  The name of the function.
! .IP "*" 4
  A number of bytes.
! .IP "*" 4
  One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
  .RE
  .RS 4
--- 20178,20208 ----
  build with \fBmake TFLAGS=\-fmultiflags\fR, after configuring
  \&\fB\-\-with\-specs=%{fmultiflags:...}\fR.
  .Sp
! This option is discarded by the driver once it\*(Aqs done processing driver
  self spec.
  .Sp
  It is also useful to check that \f(CW\*(C`TFLAGS\*(C'\fR are being used to build
! all target libraries, by configuring a non\-bootstrap compiler
! \&\fB\-\-with\-specs=\*(Aq%{!fmultiflags:%emissing TFLAGS}\*(Aq\fR and building
  the compiler and target libraries.
! .IP \fB\-fprofile\-report\fR 4
  .IX Item "-fprofile-report"
  Makes the compiler print some statistics about consistency of the
  (estimated) profile and effect of individual passes.
! .IP \fB\-fstack\-usage\fR 4
  .IX Item "-fstack-usage"
  Makes the compiler output stack usage information for the program, on a
! per\-function basis.  The filename for the dump is made by appending
  \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
  the output file, if explicitly specified and it is not an executable,
  otherwise it is the basename of the source file.  An entry is made up
  of three fields:
  .RS 4
! .IP * 4
  The name of the function.
! .IP * 4
  A number of bytes.
! .IP * 4
  One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
  .RE
  .RS 4
*************** the function.  If it is not present, the
*** 20287,20347 ****
  not bounded at compile time and the second field only represents the
  bounded part.
  .RE
! .IP "\fB\-fstats\fR" 4
  .IX Item "-fstats"
! Emit statistics about front-end processing at the end of the compilation.
! This option is supported only by the \*(C+ front end, and
  the information is generally only useful to the G++ development team.
! .IP "\fB\-fdbg\-cnt\-list\fR" 4
  .IX Item "-fdbg-cnt-list"
  Print the name and the counter upper bound for all debug counters.
! .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
  .IX Item "-fdbg-cnt=counter-value-list"
! Set the internal debug counter lower and upper bound.  \fIcounter-value-list\fR
! is a comma-separated list of \fIname\fR:\fIlower_bound1\fR\-\fIupper_bound1\fR
  [:\fIlower_bound2\fR\-\fIupper_bound2\fR...] tuples which sets
  the name of the counter and list of closed intervals.
  The \fIlower_bound\fR is optional and is zero
  initialized if not set.
  For example, with \fB\-fdbg\-cnt=dce:2\-4:10\-11,tail_call:10\fR,
! \&\f(CW\*(C`dbg_cnt(dce)\*(C'\fR returns true only for second, third, fourth, tenth and
  eleventh invocation.
! For \f(CW\*(C`dbg_cnt(tail_call)\*(C'\fR true is returned for first 10 invocations.
! .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
  .IX Item "-print-file-name=library"
  Print the full absolute name of the library file \fIlibrary\fR that
! would be used when linking\-\-\-and don't do anything else.  With this
! option, \s-1GCC\s0 does not compile or link anything; it just prints the
  file name.
! .IP "\fB\-print\-multi\-directory\fR" 4
  .IX Item "-print-multi-directory"
  Print the directory name corresponding to the multilib selected by any
  other switches present in the command line.  This directory is supposed
! to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
! .IP "\fB\-print\-multi\-lib\fR" 4
  .IX Item "-print-multi-lib"
  Print the mapping from multilib directory names to compiler switches
  that enable them.  The directory name is separated from the switches by
  \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
  \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
  ease shell processing.
! .IP "\fB\-print\-multi\-os\-directory\fR" 4
  .IX Item "-print-multi-os-directory"
! Print the path to \s-1OS\s0 libraries for the selected
! multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
  present in the \fIlib\fR subdirectory and no multilibs are used, this is
! usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
  sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
! \&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
  subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
! .IP "\fB\-print\-multiarch\fR" 4
  .IX Item "-print-multiarch"
! Print the path to \s-1OS\s0 libraries for the selected multiarch,
  relative to some \fIlib\fR subdirectory.
! .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
  .IX Item "-print-prog-name=program"
  Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
! .IP "\fB\-print\-libgcc\-file\-name\fR" 4
  .IX Item "-print-libgcc-file-name"
  Same as \fB\-print\-file\-name=libgcc.a\fR.
  .Sp
--- 20222,20282 ----
  not bounded at compile time and the second field only represents the
  bounded part.
  .RE
! .IP \fB\-fstats\fR 4
  .IX Item "-fstats"
! Emit statistics about front\-end processing at the end of the compilation.
! This option is supported only by the C++ front end, and
  the information is generally only useful to the G++ development team.
! .IP \fB\-fdbg\-cnt\-list\fR 4
  .IX Item "-fdbg-cnt-list"
  Print the name and the counter upper bound for all debug counters.
! .IP \fB\-fdbg\-cnt=\fR\fIcounter\-value\-list\fR 4
  .IX Item "-fdbg-cnt=counter-value-list"
! Set the internal debug counter lower and upper bound.  \fIcounter\-value\-list\fR
! is a comma\-separated list of \fIname\fR:\fIlower_bound1\fR\-\fIupper_bound1\fR
  [:\fIlower_bound2\fR\-\fIupper_bound2\fR...] tuples which sets
  the name of the counter and list of closed intervals.
  The \fIlower_bound\fR is optional and is zero
  initialized if not set.
  For example, with \fB\-fdbg\-cnt=dce:2\-4:10\-11,tail_call:10\fR,
! \&\f(CWdbg_cnt(dce)\fR returns true only for second, third, fourth, tenth and
  eleventh invocation.
! For \f(CWdbg_cnt(tail_call)\fR true is returned for first 10 invocations.
! .IP \fB\-print\-file\-name=\fR\fIlibrary\fR 4
  .IX Item "-print-file-name=library"
  Print the full absolute name of the library file \fIlibrary\fR that
! would be used when linking\-\-\-and don\*(Aqt do anything else.  With this
! option, GCC does not compile or link anything; it just prints the
  file name.
! .IP \fB\-print\-multi\-directory\fR 4
  .IX Item "-print-multi-directory"
  Print the directory name corresponding to the multilib selected by any
  other switches present in the command line.  This directory is supposed
! to exist in \fBGCC_EXEC_PREFIX\fR.
! .IP \fB\-print\-multi\-lib\fR 4
  .IX Item "-print-multi-lib"
  Print the mapping from multilib directory names to compiler switches
  that enable them.  The directory name is separated from the switches by
  \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
  \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
  ease shell processing.
! .IP \fB\-print\-multi\-os\-directory\fR 4
  .IX Item "-print-multi-os-directory"
! Print the path to OS libraries for the selected
! multilib, relative to some \fIlib\fR subdirectory.  If OS libraries are
  present in the \fIlib\fR subdirectory and no multilibs are used, this is
! usually just \fI.\fR, if OS libraries are present in \fIlibsuffix\fR
  sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
! \&\fI../lib32\fR, or if OS libraries are present in \fIlib/subdir\fR
  subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
! .IP \fB\-print\-multiarch\fR 4
  .IX Item "-print-multiarch"
! Print the path to OS libraries for the selected multiarch,
  relative to some \fIlib\fR subdirectory.
! .IP \fB\-print\-prog\-name=\fR\fIprogram\fR 4
  .IX Item "-print-prog-name=program"
  Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
! .IP \fB\-print\-libgcc\-file\-name\fR 4
  .IX Item "-print-libgcc-file-name"
  Same as \fB\-print\-file\-name=libgcc.a\fR.
  .Sp
*************** but you do want to link with \fIlibgcc.a
*** 20351,20408 ****
  .Vb 1
  \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
  .Ve
! .IP "\fB\-print\-search\-dirs\fR" 4
  .IX Item "-print-search-dirs"
  Print the name of the configured installation directory and a list of
! program and library directories \fBgcc\fR searches\-\-\-and don't do anything else.
  .Sp
  This is useful when \fBgcc\fR prints the error message
  \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
  To resolve this you either need to put \fIcpp0\fR and the other compiler
  components where \fBgcc\fR expects to find them, or you can set the environment
! variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
! Don't forget the trailing \fB/\fR.
! .IP "\fB\-print\-sysroot\fR" 4
  .IX Item "-print-sysroot"
  Print the target sysroot directory that is used during
  compilation.  This is the target sysroot specified either at configure
  time or using the \fB\-\-sysroot\fR option, possibly with an extra
  suffix that depends on compilation options.  If no target sysroot is
  specified, the option prints nothing.
! .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
  .IX Item "-print-sysroot-headers-suffix"
  Print the suffix added to the target sysroot when searching for
  headers, or give an error if the compiler is not configured with such
! a suffix\-\-\-and don't do anything else.
! .IP "\fB\-dumpmachine\fR" 4
  .IX Item "-dumpmachine"
! Print the compiler's target machine (for example,
! \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
! .IP "\fB\-dumpversion\fR" 4
  .IX Item "-dumpversion"
! Print the compiler version (for example, \f(CW3.0\fR, \f(CW6.3.0\fR or \f(CW7\fR)\-\-\-and don't do
  anything else.  This is the compiler version used in filesystem paths and
  specs. Depending on how the compiler has been configured it can be just
  a single number (major version), two numbers separated by a dot (major and
  minor version) or three numbers separated by dots (major, minor and patchlevel
  version).
! .IP "\fB\-dumpfullversion\fR" 4
  .IX Item "-dumpfullversion"
! Print the full compiler version\-\-\-and don't do anything else. The output is
  always three numbers separated by dots, major, minor and patchlevel version.
! .IP "\fB\-dumpspecs\fR" 4
  .IX Item "-dumpspecs"
! Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
! is used when \s-1GCC\s0 itself is being built.)
! .SS "Machine-Dependent Options"
  .IX Subsection "Machine-Dependent Options"
! Each target machine supported by \s-1GCC\s0 can have its own options\-\-\-for
  example, to allow you to compile for a particular processor variant or
! \&\s-1ABI,\s0 or to control optimizations specific to that machine.  By
! convention, the names of machine-specific options start with
  \&\fB\-m\fR.
  .PP
! Some configurations of the compiler also support additional target-specific
  options, usually for compatibility with other compilers on the same
  platform.
  .PP
--- 20286,20343 ----
  .Vb 1
  \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
  .Ve
! .IP \fB\-print\-search\-dirs\fR 4
  .IX Item "-print-search-dirs"
  Print the name of the configured installation directory and a list of
! program and library directories \fBgcc\fR searches\-\-\-and don\*(Aqt do anything else.
  .Sp
  This is useful when \fBgcc\fR prints the error message
  \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
  To resolve this you either need to put \fIcpp0\fR and the other compiler
  components where \fBgcc\fR expects to find them, or you can set the environment
! variable \fBGCC_EXEC_PREFIX\fR to the directory where you installed them.
! Don\*(Aqt forget the trailing \fB/\fR.
! .IP \fB\-print\-sysroot\fR 4
  .IX Item "-print-sysroot"
  Print the target sysroot directory that is used during
  compilation.  This is the target sysroot specified either at configure
  time or using the \fB\-\-sysroot\fR option, possibly with an extra
  suffix that depends on compilation options.  If no target sysroot is
  specified, the option prints nothing.
! .IP \fB\-print\-sysroot\-headers\-suffix\fR 4
  .IX Item "-print-sysroot-headers-suffix"
  Print the suffix added to the target sysroot when searching for
  headers, or give an error if the compiler is not configured with such
! a suffix\-\-\-and don\*(Aqt do anything else.
! .IP \fB\-dumpmachine\fR 4
  .IX Item "-dumpmachine"
! Print the compiler\*(Aqs target machine (for example,
! \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don\*(Aqt do anything else.
! .IP \fB\-dumpversion\fR 4
  .IX Item "-dumpversion"
! Print the compiler version (for example, \f(CW3.0\fR, \f(CW6.3.0\fR or \f(CW7\fR)\-\-\-and don\*(Aqt do
  anything else.  This is the compiler version used in filesystem paths and
  specs. Depending on how the compiler has been configured it can be just
  a single number (major version), two numbers separated by a dot (major and
  minor version) or three numbers separated by dots (major, minor and patchlevel
  version).
! .IP \fB\-dumpfullversion\fR 4
  .IX Item "-dumpfullversion"
! Print the full compiler version\-\-\-and don\*(Aqt do anything else. The output is
  always three numbers separated by dots, major, minor and patchlevel version.
! .IP \fB\-dumpspecs\fR 4
  .IX Item "-dumpspecs"
! Print the compiler\*(Aqs built\-in specs\-\-\-and don\*(Aqt do anything else.  (This
! is used when GCC itself is being built.)
! .SS "Machine\-Dependent Options"
  .IX Subsection "Machine-Dependent Options"
! Each target machine supported by GCC can have its own options\-\-\-for
  example, to allow you to compile for a particular processor variant or
! ABI, or to control optimizations specific to that machine.  By
! convention, the names of machine\-specific options start with
  \&\fB\-m\fR.
  .PP
! Some configurations of the compiler also support additional target\-specific
  options, usually for compatibility with other compilers on the same
  platform.
  .PP
*************** platform.
*** 20410,20455 ****
  .IX Subsection "AArch64 Options"
  .PP
  These options are defined for AArch64 implementations:
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
  Generate code for the specified data model.  Permissible values
! are \fBilp32\fR for SysV-like data model where int, long int and pointers
! are 32 bits, and \fBlp64\fR for SysV-like data model where int is 32 bits,
  but long int and pointers are 64 bits.
  .Sp
  The default depends on the specific target configuration.  Note that
! the \s-1LP64\s0 and \s-1ILP32\s0 ABIs are not link-compatible; you must compile your
! entire program with the same \s-1ABI,\s0 and link with a compatible set of libraries.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for an
  \&\fBaarch64_be\-*\-*\fR target.
! .IP "\fB\-mgeneral\-regs\-only\fR" 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general-purpose registers.  This will prevent
! the compiler from using floating-point and Advanced \s-1SIMD\s0 registers but will not
  impose any restrictions on the assembler.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for an
  \&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
! .IP "\fB\-mcmodel=tiny\fR" 4
  .IX Item "-mcmodel=tiny"
  Generate code for the tiny code model.  The program and its statically defined
  symbols must be within 1MB of each other.  Programs can be statically or
  dynamically linked.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model.  The program and its statically defined
  symbols must be within 4GB of each other.  Programs can be statically or
  dynamically linked.  This is the default code model.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
  Generate code for the large code model.  This makes no assumptions about
  addresses and sizes of sections.  Programs can be statically linked only.  The
  \&\fB\-mcmodel=large\fR option is incompatible with \fB\-mabi=ilp32\fR,
  \&\fB\-fpic\fR and \fB\-fPIC\fR.
! .IP "\fB\-mtp=\fR\fIname\fR" 4
  .IX Item "-mtp=name"
  Specify the system register to use as a thread pointer.  The valid values
  are \fBtpidr_el0\fR, \fBtpidrro_el0\fR, \fBtpidr_el1\fR, \fBtpidr_el2\fR,
--- 20345,20390 ----
  .IX Subsection "AArch64 Options"
  .PP
  These options are defined for AArch64 implementations:
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
  Generate code for the specified data model.  Permissible values
! are \fBilp32\fR for SysV\-like data model where int, long int and pointers
! are 32 bits, and \fBlp64\fR for SysV\-like data model where int is 32 bits,
  but long int and pointers are 64 bits.
  .Sp
  The default depends on the specific target configuration.  Note that
! the LP64 and ILP32 ABIs are not link\-compatible; you must compile your
! entire program with the same ABI, and link with a compatible set of libraries.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate big\-endian code.  This is the default when GCC is configured for an
  \&\fBaarch64_be\-*\-*\fR target.
! .IP \fB\-mgeneral\-regs\-only\fR 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general\-purpose registers.  This will prevent
! the compiler from using floating\-point and Advanced SIMD registers but will not
  impose any restrictions on the assembler.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate little\-endian code.  This is the default when GCC is configured for an
  \&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
! .IP \fB\-mcmodel=tiny\fR 4
  .IX Item "-mcmodel=tiny"
  Generate code for the tiny code model.  The program and its statically defined
  symbols must be within 1MB of each other.  Programs can be statically or
  dynamically linked.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model.  The program and its statically defined
  symbols must be within 4GB of each other.  Programs can be statically or
  dynamically linked.  This is the default code model.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
  Generate code for the large code model.  This makes no assumptions about
  addresses and sizes of sections.  Programs can be statically linked only.  The
  \&\fB\-mcmodel=large\fR option is incompatible with \fB\-mabi=ilp32\fR,
  \&\fB\-fpic\fR and \fB\-fPIC\fR.
! .IP \fB\-mtp=\fR\fIname\fR 4
  .IX Item "-mtp=name"
  Specify the system register to use as a thread pointer.  The valid values
  are \fBtpidr_el0\fR, \fBtpidrro_el0\fR, \fBtpidr_el1\fR, \fBtpidr_el2\fR,
*************** are \fBtpidr_el0\fR, \fBtpidrro_el0\fR,
*** 20458,20485 ****
  The default setting is \fBtpidr_el0\fR.  It is recommended to compile all
  code intended to interoperate with the same value of this option to avoid
  accessing a different thread pointer from the wrong exception level.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification.
! .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-momit-leaf-frame-pointer"
  .PD 0
! .IP "\fB\-mno\-omit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-mno-omit-leaf-frame-pointer"
  .PD
  Omit or keep the frame pointer in leaf functions.  The former behavior is the
  default.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
--- 20393,20420 ----
  The default setting is \fBtpidr_el0\fR.  It is recommended to compile all
  code intended to interoperate with the same value of this option to avoid
  accessing a different thread pointer from the wrong exception level.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification.
! .IP \fB\-momit\-leaf\-frame\-pointer\fR 4
  .IX Item "-momit-leaf-frame-pointer"
  .PD 0
! .IP \fB\-mno\-omit\-leaf\-frame\-pointer\fR 4
  .IX Item "-mno-omit-leaf-frame-pointer"
  .PD
  Omit or keep the frame pointer in leaf functions.  The former behavior is the
  default.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
*************** which system register to use as base reg
*** 20493,20532 ****
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP "\fB\-mtls\-dialect=desc\fR" 4
  .IX Item "-mtls-dialect=desc"
! Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.  This is the default.
! .IP "\fB\-mtls\-dialect=traditional\fR" 4
  .IX Item "-mtls-dialect=traditional"
! Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.
! .IP "\fB\-mtls\-size=\fR\fIsize\fR" 4
  .IX Item "-mtls-size=size"
! Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 12, 24, 32, 48.
  This option requires binutils 2.26 or newer.
! .IP "\fB\-mfix\-cortex\-a53\-835769\fR" 4
  .IX Item "-mfix-cortex-a53-835769"
  .PD 0
! .IP "\fB\-mno\-fix\-cortex\-a53\-835769\fR" 4
  .IX Item "-mno-fix-cortex-a53-835769"
  .PD
! Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
! This involves inserting a \s-1NOP\s0 instruction between memory instructions and
! 64\-bit integer multiply-accumulate instructions.
! .IP "\fB\-mfix\-cortex\-a53\-843419\fR" 4
  .IX Item "-mfix-cortex-a53-843419"
  .PD 0
! .IP "\fB\-mno\-fix\-cortex\-a53\-843419\fR" 4
  .IX Item "-mno-fix-cortex-a53-843419"
  .PD
! Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 843419.
  This erratum workaround is made at link time and this will only pass the
  corresponding flag to the linker.
! .IP "\fB\-mlow\-precision\-recip\-sqrt\fR" 4
  .IX Item "-mlow-precision-recip-sqrt"
  .PD 0
! .IP "\fB\-mno\-low\-precision\-recip\-sqrt\fR" 4
  .IX Item "-mno-low-precision-recip-sqrt"
  .PD
  Enable or disable the reciprocal square root approximation.
--- 20428,20467 ----
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP \fB\-mtls\-dialect=desc\fR 4
  .IX Item "-mtls-dialect=desc"
! Use TLS descriptors as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.  This is the default.
! .IP \fB\-mtls\-dialect=traditional\fR 4
  .IX Item "-mtls-dialect=traditional"
! Use traditional TLS as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.
! .IP \fB\-mtls\-size=\fR\fIsize\fR 4
  .IX Item "-mtls-size=size"
! Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
  This option requires binutils 2.26 or newer.
! .IP \fB\-mfix\-cortex\-a53\-835769\fR 4
  .IX Item "-mfix-cortex-a53-835769"
  .PD 0
! .IP \fB\-mno\-fix\-cortex\-a53\-835769\fR 4
  .IX Item "-mno-fix-cortex-a53-835769"
  .PD
! Enable or disable the workaround for the ARM Cortex\-A53 erratum number 835769.
! This involves inserting a NOP instruction between memory instructions and
! 64\-bit integer multiply\-accumulate instructions.
! .IP \fB\-mfix\-cortex\-a53\-843419\fR 4
  .IX Item "-mfix-cortex-a53-843419"
  .PD 0
! .IP \fB\-mno\-fix\-cortex\-a53\-843419\fR 4
  .IX Item "-mno-fix-cortex-a53-843419"
  .PD
! Enable or disable the workaround for the ARM Cortex\-A53 erratum number 843419.
  This erratum workaround is made at link time and this will only pass the
  corresponding flag to the linker.
! .IP \fB\-mlow\-precision\-recip\-sqrt\fR 4
  .IX Item "-mlow-precision-recip-sqrt"
  .PD 0
! .IP \fB\-mno\-low\-precision\-recip\-sqrt\fR 4
  .IX Item "-mno-low-precision-recip-sqrt"
  .PD
  Enable or disable the reciprocal square root approximation.
*************** This option only has an effect if \fB\-f
*** 20534,20543 ****
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of reciprocal square root results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP "\fB\-mlow\-precision\-sqrt\fR" 4
  .IX Item "-mlow-precision-sqrt"
  .PD 0
! .IP "\fB\-mno\-low\-precision\-sqrt\fR" 4
  .IX Item "-mno-low-precision-sqrt"
  .PD
  Enable or disable the square root approximation.
--- 20469,20478 ----
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of reciprocal square root results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP \fB\-mlow\-precision\-sqrt\fR 4
  .IX Item "-mlow-precision-sqrt"
  .PD 0
! .IP \fB\-mno\-low\-precision\-sqrt\fR 4
  .IX Item "-mno-low-precision-sqrt"
  .PD
  Enable or disable the square root approximation.
*************** This option only has an effect if \fB\-f
*** 20546,20555 ****
  precision of square root results to about 16 bits for
  single precision and to 32 bits for double precision.
  If enabled, it implies \fB\-mlow\-precision\-recip\-sqrt\fR.
! .IP "\fB\-mlow\-precision\-div\fR" 4
  .IX Item "-mlow-precision-div"
  .PD 0
! .IP "\fB\-mno\-low\-precision\-div\fR" 4
  .IX Item "-mno-low-precision-div"
  .PD
  Enable or disable the division approximation.
--- 20481,20490 ----
  precision of square root results to about 16 bits for
  single precision and to 32 bits for double precision.
  If enabled, it implies \fB\-mlow\-precision\-recip\-sqrt\fR.
! .IP \fB\-mlow\-precision\-div\fR 4
  .IX Item "-mlow-precision-div"
  .PD 0
! .IP \fB\-mno\-low\-precision\-div\fR 4
  .IX Item "-mno-low-precision-div"
  .PD
  Enable or disable the division approximation.
*************** This option only has an effect if \fB\-f
*** 20557,20566 ****
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of division results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP "\fB\-mtrack\-speculation\fR" 4
  .IX Item "-mtrack-speculation"
  .PD 0
! .IP "\fB\-mno\-track\-speculation\fR" 4
  .IX Item "-mno-track-speculation"
  .PD
  Enable or disable generation of additional code to track speculative
--- 20492,20501 ----
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of division results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP \fB\-mtrack\-speculation\fR 4
  .IX Item "-mtrack-speculation"
  .PD 0
! .IP \fB\-mno\-track\-speculation\fR 4
  .IX Item "-mno-track-speculation"
  .PD
  Enable or disable generation of additional code to track speculative
*************** execution through conditional branches.
*** 20568,20583 ****
  be used by the compiler when expanding calls to
  \&\f(CW\*(C`_\|_builtin_speculation_safe_copy\*(C'\fR to permit a more efficient code
  sequence to be generated.
! .IP "\fB\-moutline\-atomics\fR" 4
  .IX Item "-moutline-atomics"
  .PD 0
! .IP "\fB\-mno\-outline\-atomics\fR" 4
  .IX Item "-mno-outline-atomics"
  .PD
! Enable or disable calls to out-of-line helpers to implement atomic operations.
! These helpers will, at runtime, determine if the \s-1LSE\s0 instructions from
  ARMv8.1\-A can be used; if not, they will use the load/store\-exclusive
! instructions that are present in the base ARMv8.0 \s-1ISA.\s0
  .Sp
  This option is only applicable when compiling for the base ARMv8.0
  instruction set.  If using a later revision, e.g. \fB\-march=armv8.1\-a\fR
--- 20503,20518 ----
  be used by the compiler when expanding calls to
  \&\f(CW\*(C`_\|_builtin_speculation_safe_copy\*(C'\fR to permit a more efficient code
  sequence to be generated.
! .IP \fB\-moutline\-atomics\fR 4
  .IX Item "-moutline-atomics"
  .PD 0
! .IP \fB\-mno\-outline\-atomics\fR 4
  .IX Item "-mno-outline-atomics"
  .PD
! Enable or disable calls to out\-of\-line helpers to implement atomic operations.
! These helpers will, at runtime, determine if the LSE instructions from
  ARMv8.1\-A can be used; if not, they will use the load/store\-exclusive
! instructions that are present in the base ARMv8.0 ISA.
  .Sp
  This option is only applicable when compiling for the base ARMv8.0
  instruction set.  If using a later revision, e.g. \fB\-march=armv8.1\-a\fR
*************** or \fB\-march=armv8\-a+lse\fR, the ARMv8
*** 20585,20591 ****
  used directly.  The same applies when using \fB\-mcpu=\fR when the
  selected cpu supports the \fBlse\fR feature.
  This option is on by default.
! .IP "\fB\-march=\fR\fIname\fR" 4
  .IX Item "-march=name"
  Specify the name of the target architecture and, optionally, one or
  more feature modifiers.  This option has the form
--- 20520,20526 ----
  used directly.  The same applies when using \fB\-mcpu=\fR when the
  selected cpu supports the \fBlse\fR feature.
  This option is on by default.
! .IP \fB\-march=\fR\fIname\fR 4
  .IX Item "-march=name"
  Specify the name of the target architecture and, optionally, one or
  more feature modifiers.  This option has the form
*************** and the features that they enable by def
*** 20629,20657 ****
  .IX Item "armv9.4-a : Armv9.4-A : armv9.3-a"
  .IP "\fBarmv8\-r\fR : Armv8\-R : \fBarmv8\-r\fR" 4
  .IX Item "armv8-r : Armv8-R : armv8-r"
  .RE
  .RS 4
- .PD
  .Sp
  The value \fBnative\fR is available on native AArch64 GNU/Linux and
  causes the compiler to pick the architecture of the host system.  This
  option has no effect if the compiler is unable to recognize the
  architecture of the host system,
  .Sp
! The permissible values for \fIfeature\fR are listed in the sub-section
  on \fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right-most feature is used.
  .Sp
! \&\s-1GCC\s0 uses \fIname\fR to determine what kind of instructions it can emit
  when generating assembly code.  If \fB\-march\fR is specified
  without either of \fB\-mtune\fR or \fB\-mcpu\fR also being
  specified, the code is tuned to perform well across a range of target
  processors implementing the target architecture.
  .RE
! .IP "\fB\-mtune=\fR\fIname\fR" 4
  .IX Item "-mtune=name"
! Specify the name of the target processor for which \s-1GCC\s0 should tune the
  performance of the code.  Permissible values for this option are:
  \&\fBgeneric\fR, \fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR,
  \&\fBcortex\-a57\fR, \fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR,
--- 20564,20592 ----
  .IX Item "armv9.4-a : Armv9.4-A : armv9.3-a"
  .IP "\fBarmv8\-r\fR : Armv8\-R : \fBarmv8\-r\fR" 4
  .IX Item "armv8-r : Armv8-R : armv8-r"
+ .PD
  .RE
  .RS 4
  .Sp
  The value \fBnative\fR is available on native AArch64 GNU/Linux and
  causes the compiler to pick the architecture of the host system.  This
  option has no effect if the compiler is unable to recognize the
  architecture of the host system,
  .Sp
! The permissible values for \fIfeature\fR are listed in the sub\-section
  on \fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right\-most feature is used.
  .Sp
! GCC uses \fIname\fR to determine what kind of instructions it can emit
  when generating assembly code.  If \fB\-march\fR is specified
  without either of \fB\-mtune\fR or \fB\-mcpu\fR also being
  specified, the code is tuned to perform well across a range of target
  processors implementing the target architecture.
  .RE
! .IP \fB\-mtune=\fR\fIname\fR 4
  .IX Item "-mtune=name"
! Specify the name of the target processor for which GCC should tune the
  performance of the code.  Permissible values for this option are:
  \&\fBgeneric\fR, \fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR,
  \&\fBcortex\-a57\fR, \fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR,
*************** performance of the code.  Permissible va
*** 20667,20675 ****
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
  \&\fBocteontx2f95mm\fR,
! \&\fBa64fx\fR, \fBfujitsu-monaka\fR,
  \&\fBthunderx\fR, \fBthunderxt88\fR,
! \&\fBthunderxt88p1\fR, \fBthunderxt81\fR, \fBtsv110\fR,
  \&\fBthunderxt83\fR, \fBthunderx2t99\fR, \fBthunderx3t110\fR, \fBzeus\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
--- 20602,20610 ----
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
  \&\fBocteontx2f95mm\fR,
! \&\fBa64fx\fR, \fBfujitsu\-monaka\fR,
  \&\fBthunderx\fR, \fBthunderxt88\fR,
! \&\fBthunderxt88p1\fR, \fBthunderxt81\fR, \fBtsv110\fR, \fBhip12\fR,
  \&\fBthunderxt83\fR, \fBthunderx2t99\fR, \fBthunderx3t110\fR, \fBzeus\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
*************** performance of the code.  Permissible va
*** 20682,20696 ****
  .Sp
  The values \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
! \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR specify that \s-1GCC\s0
  should tune for a big.LITTLE system.
  .Sp
! The value \fBneoverse\-512tvb\fR specifies that \s-1GCC\s0 should tune
! for Neoverse cores that (a) implement \s-1SVE\s0 and (b) have a total vector
! bandwidth of 512 bits per cycle.  In other words, the option tells \s-1GCC\s0 to
! tune for Neoverse cores that can execute 4 128\-bit Advanced \s-1SIMD\s0 arithmetic
! instructions a cycle and that can execute an equivalent number of \s-1SVE\s0
! arithmetic instructions per cycle (2 for 256\-bit \s-1SVE, 4\s0 for 128\-bit \s-1SVE\s0).
  This is more general than tuning for a specific core like Neoverse V1
  but is more specific than the default tuning described below.
  .Sp
--- 20617,20631 ----
  .Sp
  The values \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
! \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR specify that GCC
  should tune for a big.LITTLE system.
  .Sp
! The value \fBneoverse\-512tvb\fR specifies that GCC should tune
! for Neoverse cores that (a) implement SVE and (b) have a total vector
! bandwidth of 512 bits per cycle.  In other words, the option tells GCC to
! tune for Neoverse cores that can execute 4 128\-bit Advanced SIMD arithmetic
! instructions a cycle and that can execute an equivalent number of SVE
! arithmetic instructions per cycle (2 for 256\-bit SVE, 4 for 128\-bit SVE).
  This is more general than tuning for a specific core like Neoverse V1
  but is more specific than the default tuning described below.
  .Sp
*************** are specified, the code is tuned to perf
*** 20703,20721 ****
  of target processors.
  .Sp
  This option cannot be suffixed by feature modifiers.
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
  .IX Item "-mcpu=name"
  Specify the name of the target processor, optionally suffixed by one
  or more feature modifiers.  This option has the form
  \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where
  the permissible values for \fIcpu\fR are the same as those available
  for \fB\-mtune\fR.  The permissible values for \fIfeature\fR are
! documented in the sub-section on
  \&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right-most feature is used.
  .Sp
! \&\s-1GCC\s0 uses \fIname\fR to determine what kind of instructions it can emit when
  generating assembly code (as if by \fB\-march\fR) and to determine
  the target processor for which to tune for performance (as if
  by \fB\-mtune\fR).  Where this option is used in conjunction
--- 20638,20656 ----
  of target processors.
  .Sp
  This option cannot be suffixed by feature modifiers.
! .IP \fB\-mcpu=\fR\fIname\fR 4
  .IX Item "-mcpu=name"
  Specify the name of the target processor, optionally suffixed by one
  or more feature modifiers.  This option has the form
  \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where
  the permissible values for \fIcpu\fR are the same as those available
  for \fB\-mtune\fR.  The permissible values for \fIfeature\fR are
! documented in the sub\-section on
  \&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right\-most feature is used.
  .Sp
! GCC uses \fIname\fR to determine what kind of instructions it can emit when
  generating assembly code (as if by \fB\-march\fR) and to determine
  the target processor for which to tune for performance (as if
  by \fB\-mtune\fR).  Where this option is used in conjunction
*************** over the appropriate part of this option
*** 20724,20767 ****
  .Sp
  \&\fB\-mcpu=neoverse\-512tvb\fR is special in that it does not refer
  to a specific core, but instead refers to all Neoverse cores that
! (a) implement \s-1SVE\s0 and (b) have a total vector bandwidth of 512 bits
  a cycle.  Unless overridden by \fB\-march\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR generates code that can run on a
  Neoverse V1 core, since Neoverse V1 is the first Neoverse core with
  these properties.  Unless overridden by \fB\-mtune\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR tunes code in the same way as for
  \&\fB\-mtune=neoverse\-512tvb\fR.
! .IP "\fB\-moverride=\fR\fIstring\fR" 4
  .IX Item "-moverride=string"
! Override tuning decisions made by the back-end in response to a
  \&\fB\-mtune=\fR switch.  The syntax, semantics, and accepted values
  for \fIstring\fR in this option are not guaranteed to be consistent
  across releases.
  .Sp
! This option is only intended to be useful when developing \s-1GCC.\s0
! .IP "\fB\-mverbose\-cost\-dump\fR" 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP "\fB\-mpc\-relative\-literal\-loads\fR" 4
  .IX Item "-mpc-relative-literal-loads"
  .PD 0
! .IP "\fB\-mno\-pc\-relative\-literal\-loads\fR" 4
  .IX Item "-mno-pc-relative-literal-loads"
  .PD
! Enable or disable PC-relative literal loads.  With this option literal pools are
  accessed using a single instruction and emitted after each function.  This
  limits the maximum size of functions to 1MB.  This is enabled by default for
  \&\fB\-mcmodel=tiny\fR.
! .IP "\fB\-msign\-return\-address=\fR\fIscope\fR" 4
  .IX Item "-msign-return-address=scope"
  Select the function scope on which return address signing will be applied.
  Permissible values are \fBnone\fR, which disables return address signing,
! \&\fBnon-leaf\fR, which enables pointer signing for functions which are not leaf
  functions, and \fBall\fR, which enables pointer signing for all functions.  The
  default value is \fBnone\fR. This option has been deprecated by
  \&\-mbranch\-protection.
! .IP "\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR" 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti"
  Select the branch protection features to use.
  \&\fBnone\fR is the default and turns off all types of branch protection.
--- 20659,20702 ----
  .Sp
  \&\fB\-mcpu=neoverse\-512tvb\fR is special in that it does not refer
  to a specific core, but instead refers to all Neoverse cores that
! (a) implement SVE and (b) have a total vector bandwidth of 512 bits
  a cycle.  Unless overridden by \fB\-march\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR generates code that can run on a
  Neoverse V1 core, since Neoverse V1 is the first Neoverse core with
  these properties.  Unless overridden by \fB\-mtune\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR tunes code in the same way as for
  \&\fB\-mtune=neoverse\-512tvb\fR.
! .IP \fB\-moverride=\fR\fIstring\fR 4
  .IX Item "-moverride=string"
! Override tuning decisions made by the back\-end in response to a
  \&\fB\-mtune=\fR switch.  The syntax, semantics, and accepted values
  for \fIstring\fR in this option are not guaranteed to be consistent
  across releases.
  .Sp
! This option is only intended to be useful when developing GCC.
! .IP \fB\-mverbose\-cost\-dump\fR 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP \fB\-mpc\-relative\-literal\-loads\fR 4
  .IX Item "-mpc-relative-literal-loads"
  .PD 0
! .IP \fB\-mno\-pc\-relative\-literal\-loads\fR 4
  .IX Item "-mno-pc-relative-literal-loads"
  .PD
! Enable or disable PC\-relative literal loads.  With this option literal pools are
  accessed using a single instruction and emitted after each function.  This
  limits the maximum size of functions to 1MB.  This is enabled by default for
  \&\fB\-mcmodel=tiny\fR.
! .IP \fB\-msign\-return\-address=\fR\fIscope\fR 4
  .IX Item "-msign-return-address=scope"
  Select the function scope on which return address signing will be applied.
  Permissible values are \fBnone\fR, which disables return address signing,
! \&\fBnon\-leaf\fR, which enables pointer signing for functions which are not leaf
  functions, and \fBall\fR, which enables pointer signing for all functions.  The
  default value is \fBnone\fR. This option has been deprecated by
  \&\-mbranch\-protection.
! .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti"
  Select the branch protection features to use.
  \&\fBnone\fR is the default and turns off all types of branch protection.
*************** Select the branch protection features to
*** 20769,21019 ****
  has additional tuning options, then \fBstandard\fR sets it to its standard
  level.
  \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR turns on return address signing to its standard
! level: signing functions that save the return address to memory (non-leaf
  functions will practically always do this) using the a\-key.  The optional
  argument \fBleaf\fR can be used to extend the signing to include leaf
  functions.  The optional argument \fBb\-key\fR can be used to sign the functions
  with the B\-key instead of the A\-key.
  \&\fBbti\fR turns on branch target identification mechanism.
! .IP "\fB\-mharden\-sls=\fR\fIopts\fR" 4
  .IX Item "-mharden-sls=opts"
! Enable compiler hardening against straight line speculation (\s-1SLS\s0).
! \&\fIopts\fR is a comma-separated list of the following options:
  .RS 4
! .IP "\fBretbr\fR" 4
  .IX Item "retbr"
  .PD 0
! .IP "\fBblr\fR" 4
  .IX Item "blr"
  .RE
  .RS 4
- .PD
  .Sp
! In addition, \fB\-mharden\-sls=all\fR enables all \s-1SLS\s0 hardening while
! \&\fB\-mharden\-sls=none\fR disables all \s-1SLS\s0 hardening.
  .RE
! .IP "\fB\-mearly\-ra=\fR\fIscope\fR" 4
  .IX Item "-mearly-ra=scope"
  Determine when to enable an early register allocation pass.  This pass runs
! before instruction scheduling and tries to find a spill-free allocation of
! floating-point and vector code.  It also tries to make use of strided
! multi-register instructions, such as \s-1SME2\s0's strided \s-1LD1\s0 and \s-1ST1.\s0
  .Sp
  The possible values of \fIscope\fR are: \fIall\fR, which runs the pass on
  all functions; \fIstrided\fR, which runs the pass on functions that have
! access to strided multi-register instructions; and \fInone\fR, which
  disables the pass.
  .Sp
  \&\fB\-mearly\-ra=all\fR is the default for \fB\-O2\fR and above, and for
  \&\fB\-Os\fR.  \fB\-mearly\-ra=none\fR is the default otherwise.
! .IP "\fB\-mearly\-ldp\-fusion\fR" 4
  .IX Item "-mearly-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs before
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP "\fB\-mlate\-ldp\-fusion\fR" 4
  .IX Item "-mlate-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs after
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP "\fB\-msve\-vector\-bits=\fR\fIbits\fR" 4
  .IX Item "-msve-vector-bits=bits"
! Specify the number of bits in an \s-1SVE\s0 vector register.  This option only has
! an effect when \s-1SVE\s0 is enabled.
  .Sp
! \&\s-1GCC\s0 supports two forms of \s-1SVE\s0 code generation: \*(L"vector-length
! agnostic\*(R" output that works with any size of vector register and
! \&\*(L"vector-length specific\*(R" output that allows \s-1GCC\s0 to make assumptions
  about the vector length when it is useful for optimization reasons.
  The possible values of \fBbits\fR are: \fBscalable\fR, \fB128\fR,
  \&\fB256\fR, \fB512\fR, \fB1024\fR and \fB2048\fR.
! Specifying \fBscalable\fR selects vector-length agnostic
! output.  At present \fB\-msve\-vector\-bits=128\fR also generates vector-length
! agnostic output for big-endian targets.  All other values generate
! vector-length specific code.  The behavior of these values may change
  in future releases and no value except \fBscalable\fR should be
  relied on for producing code that is portable across different
! hardware \s-1SVE\s0 vector lengths.
  .Sp
  The default is \fB\-msve\-vector\-bits=scalable\fR, which produces
! vector-length agnostic code.
  .PP
  \fB\-march\fR and \fB\-mcpu\fR Feature Modifiers
  .IX Subsection "-march and -mcpu Feature Modifiers"
  .PP
  Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be any of
  the following and their inverses \fBno\fR\fIfeature\fR:
! .IP "\fBcrc\fR" 4
  .IX Item "crc"
! Enable \s-1CRC\s0 extension.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP "\fBcrypto\fR" 4
  .IX Item "crypto"
! Enable Crypto extension.  This also enables Advanced \s-1SIMD\s0 and floating-point
  instructions.
! .IP "\fBfp\fR" 4
  .IX Item "fp"
! Enable floating-point instructions.  This is on by default for all possible
  values for options \fB\-march\fR and \fB\-mcpu\fR.
! .IP "\fBsimd\fR" 4
  .IX Item "simd"
! Enable Advanced \s-1SIMD\s0 instructions.  This also enables floating-point
  instructions.  This is on by default for all possible values for options
  \&\fB\-march\fR and \fB\-mcpu\fR.
! .IP "\fBsve\fR" 4
  .IX Item "sve"
  Enable Scalable Vector Extension instructions.  This also enables Advanced
! \&\s-1SIMD\s0 and floating-point instructions.
! .IP "\fBlse\fR" 4
  .IX Item "lse"
  Enable Large System Extension instructions.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP "\fBrdma\fR" 4
  .IX Item "rdma"
  Enable Round Double Multiply Accumulate instructions.  This is on by default
  for \fB\-march=armv8.1\-a\fR.
! .IP "\fBfp16\fR" 4
  .IX Item "fp16"
! Enable \s-1FP16\s0 extension.  This also enables floating-point instructions.
! .IP "\fBfp16fml\fR" 4
  .IX Item "fp16fml"
! Enable \s-1FP16\s0 fmla extension.  This also enables \s-1FP16\s0 extensions and
! floating-point instructions. This option is enabled by default for \fB\-march=armv8.4\-a\fR. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP "\fBrcpc\fR" 4
  .IX Item "rcpc"
! Enable the RCpc extension.  This enables the use of the \s-1LDAPR\s0 instructions for
! load-acquire atomic semantics, and passes it on to the assembler, enabling
  inline asm statements to use instructions from the RCpc extension.
! .IP "\fBdotprod\fR" 4
  .IX Item "dotprod"
! Enable the Dot Product extension.  This also enables Advanced \s-1SIMD\s0 instructions.
! .IP "\fBaes\fR" 4
  .IX Item "aes"
  Enable the Armv8\-a aes and pmull crypto extension.  This also enables Advanced
! \&\s-1SIMD\s0 instructions.
! .IP "\fBsha2\fR" 4
  .IX Item "sha2"
! Enable the Armv8\-a sha2 crypto extension.  This also enables Advanced \s-1SIMD\s0 instructions.
! .IP "\fBsha3\fR" 4
  .IX Item "sha3"
! Enable the sha512 and sha3 crypto extension.  This also enables Advanced \s-1SIMD\s0
  instructions. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP "\fBsm4\fR" 4
  .IX Item "sm4"
! Enable the sm3 and sm4 crypto extension.  This also enables Advanced \s-1SIMD\s0 instructions.
  Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP "\fBprofile\fR" 4
  .IX Item "profile"
  Enable the Statistical Profiling extension.  This option is only to enable the
  extension at the assembler level and does not affect code generation.
! .IP "\fBrng\fR" 4
  .IX Item "rng"
  Enable the Armv8.5\-a Random Number instructions.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.
! .IP "\fBmemtag\fR" 4
  .IX Item "memtag"
  Enable the Armv8.5\-a Memory Tagging Extensions.
  Use of this option with architectures prior to Armv8.5\-A is not supported.
! .IP "\fBsb\fR" 4
  .IX Item "sb"
  Enable the Armv8\-a Speculation Barrier instruction.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP "\fBssbs\fR" 4
  .IX Item "ssbs"
  Enable the Armv8\-a Speculative Store Bypass Safe instruction.  This option
  is only to enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP "\fBpredres\fR" 4
  .IX Item "predres"
  Enable the Armv8\-a Execution and Data Prediction Restriction instructions.
  This option is only to enable the extension at the assembler level and does
  not affect code generation.  This option is enabled by default for
  \&\fB\-march=armv8.5\-a\fR.
! .IP "\fBsve2\fR" 4
  .IX Item "sve2"
! Enable the Armv8\-a Scalable Vector Extension 2.  This also enables \s-1SVE\s0
  instructions.
! .IP "\fBsve2\-bitperm\fR" 4
  .IX Item "sve2-bitperm"
! Enable \s-1SVE2\s0 bitperm instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBsve2\-sm4\fR" 4
  .IX Item "sve2-sm4"
! Enable \s-1SVE2\s0 sm4 instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBsve2\-aes\fR" 4
  .IX Item "sve2-aes"
! Enable \s-1SVE2\s0 aes instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBsve2\-sha3\fR" 4
  .IX Item "sve2-sha3"
! Enable \s-1SVE2\s0 sha3 instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBtme\fR" 4
  .IX Item "tme"
  Enable the Transactional Memory Extension.
! .IP "\fBi8mm\fR" 4
  .IX Item "i8mm"
  Enable 8\-bit Integer Matrix Multiply instructions.  This also enables
! Advanced \s-1SIMD\s0 and floating-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP "\fBf32mm\fR" 4
  .IX Item "f32mm"
  Enable 32\-bit Floating point Matrix Multiply instructions.  This also enables
! \&\s-1SVE\s0 instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP "\fBf64mm\fR" 4
  .IX Item "f64mm"
  Enable 64\-bit Floating point Matrix Multiply instructions.  This also enables
! \&\s-1SVE\s0 instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP "\fBbf16\fR" 4
  .IX Item "bf16"
! Enable brain half-precision floating-point instructions.  This also enables
! Advanced \s-1SIMD\s0 and floating-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP "\fBls64\fR" 4
  .IX Item "ls64"
  Enable the 64\-byte atomic load and store instructions for accelerators.
  This option is enabled by default for \fB\-march=armv8.7\-a\fR.
! .IP "\fBmops\fR" 4
  .IX Item "mops"
  Enable the instructions to accelerate memory operations like \f(CW\*(C`memcpy\*(C'\fR,
  \&\f(CW\*(C`memmove\*(C'\fR, \f(CW\*(C`memset\*(C'\fR.  This option is enabled by default for
  \&\fB\-march=armv8.8\-a\fR
! .IP "\fBflagm\fR" 4
  .IX Item "flagm"
  Enable the Flag Manipulation instructions Extension.
! .IP "\fBpauth\fR" 4
  .IX Item "pauth"
  Enable the Pointer Authentication Extension.
! .IP "\fBcssc\fR" 4
  .IX Item "cssc"
  Enable the Common Short Sequence Compression instructions.
! .IP "\fBsme\fR" 4
  .IX Item "sme"
  Enable the Scalable Matrix Extension.
! .IP "\fBsme\-i16i64\fR" 4
  .IX Item "sme-i16i64"
! Enable the \s-1FEAT_SME_I16I64\s0 extension to \s-1SME.\s0
! .IP "\fBsme\-f64f64\fR" 4
  .IX Item "sme-f64f64"
! Enable the \s-1FEAT_SME_F64F64\s0 extension to \s-1SME.\s0
  +@item sme2
! Enable the Scalable Matrix Extension 2.  This also enables \s-1SME\s0 instructions.
! .IP "\fBlse128\fR" 4
  .IX Item "lse128"
! Enable the \s-1LSE128\s0 128\-bit atomic instructions extension.  This also
! enables \s-1LSE\s0 instructions.
! .IP "\fBd128\fR" 4
  .IX Item "d128"
  Enable support for 128\-bit system register read/write instructions.
! This also enables the \s-1LSE128\s0 extension.
! .IP "\fBgcs\fR" 4
  .IX Item "gcs"
  Enable support for Armv9.4\-a Guarded Control Stack extension.
! .IP "\fBthe\fR" 4
  .IX Item "the"
  Enable support for Armv8.9\-a/9.4\-a translation hardening extension.
! .IP "\fBrcpc3\fR" 4
  .IX Item "rcpc3"
  Enable the RCpc3 (Release Consistency) extension.
  .PP
--- 20704,20954 ----
  has additional tuning options, then \fBstandard\fR sets it to its standard
  level.
  \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR turns on return address signing to its standard
! level: signing functions that save the return address to memory (non\-leaf
  functions will practically always do this) using the a\-key.  The optional
  argument \fBleaf\fR can be used to extend the signing to include leaf
  functions.  The optional argument \fBb\-key\fR can be used to sign the functions
  with the B\-key instead of the A\-key.
  \&\fBbti\fR turns on branch target identification mechanism.
! .IP \fB\-mharden\-sls=\fR\fIopts\fR 4
  .IX Item "-mharden-sls=opts"
! Enable compiler hardening against straight line speculation (SLS).
! \&\fIopts\fR is a comma\-separated list of the following options:
  .RS 4
! .IP \fBretbr\fR 4
  .IX Item "retbr"
  .PD 0
! .IP \fBblr\fR 4
  .IX Item "blr"
+ .PD
  .RE
  .RS 4
  .Sp
! In addition, \fB\-mharden\-sls=all\fR enables all SLS hardening while
! \&\fB\-mharden\-sls=none\fR disables all SLS hardening.
  .RE
! .IP \fB\-mearly\-ra=\fR\fIscope\fR 4
  .IX Item "-mearly-ra=scope"
  Determine when to enable an early register allocation pass.  This pass runs
! before instruction scheduling and tries to find a spill\-free allocation of
! floating\-point and vector code.  It also tries to make use of strided
! multi\-register instructions, such as SME2\*(Aqs strided LD1 and ST1.
  .Sp
  The possible values of \fIscope\fR are: \fIall\fR, which runs the pass on
  all functions; \fIstrided\fR, which runs the pass on functions that have
! access to strided multi\-register instructions; and \fInone\fR, which
  disables the pass.
  .Sp
  \&\fB\-mearly\-ra=all\fR is the default for \fB\-O2\fR and above, and for
  \&\fB\-Os\fR.  \fB\-mearly\-ra=none\fR is the default otherwise.
! .IP \fB\-mearly\-ldp\-fusion\fR 4
  .IX Item "-mearly-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs before
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP \fB\-mlate\-ldp\-fusion\fR 4
  .IX Item "-mlate-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs after
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP \fB\-msve\-vector\-bits=\fR\fIbits\fR 4
  .IX Item "-msve-vector-bits=bits"
! Specify the number of bits in an SVE vector register.  This option only has
! an effect when SVE is enabled.
  .Sp
! GCC supports two forms of SVE code generation: "vector\-length
! agnostic" output that works with any size of vector register and
! "vector\-length specific" output that allows GCC to make assumptions
  about the vector length when it is useful for optimization reasons.
  The possible values of \fBbits\fR are: \fBscalable\fR, \fB128\fR,
  \&\fB256\fR, \fB512\fR, \fB1024\fR and \fB2048\fR.
! Specifying \fBscalable\fR selects vector\-length agnostic
! output.  At present \fB\-msve\-vector\-bits=128\fR also generates vector\-length
! agnostic output for big\-endian targets.  All other values generate
! vector\-length specific code.  The behavior of these values may change
  in future releases and no value except \fBscalable\fR should be
  relied on for producing code that is portable across different
! hardware SVE vector lengths.
  .Sp
  The default is \fB\-msve\-vector\-bits=scalable\fR, which produces
! vector\-length agnostic code.
  .PP
  \fB\-march\fR and \fB\-mcpu\fR Feature Modifiers
  .IX Subsection "-march and -mcpu Feature Modifiers"
  .PP
  Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be any of
  the following and their inverses \fBno\fR\fIfeature\fR:
! .IP \fBcrc\fR 4
  .IX Item "crc"
! Enable CRC extension.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP \fBcrypto\fR 4
  .IX Item "crypto"
! Enable Crypto extension.  This also enables Advanced SIMD and floating\-point
  instructions.
! .IP \fBfp\fR 4
  .IX Item "fp"
! Enable floating\-point instructions.  This is on by default for all possible
  values for options \fB\-march\fR and \fB\-mcpu\fR.
! .IP \fBsimd\fR 4
  .IX Item "simd"
! Enable Advanced SIMD instructions.  This also enables floating\-point
  instructions.  This is on by default for all possible values for options
  \&\fB\-march\fR and \fB\-mcpu\fR.
! .IP \fBsve\fR 4
  .IX Item "sve"
  Enable Scalable Vector Extension instructions.  This also enables Advanced
! SIMD and floating\-point instructions.
! .IP \fBlse\fR 4
  .IX Item "lse"
  Enable Large System Extension instructions.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP \fBrdma\fR 4
  .IX Item "rdma"
  Enable Round Double Multiply Accumulate instructions.  This is on by default
  for \fB\-march=armv8.1\-a\fR.
! .IP \fBfp16\fR 4
  .IX Item "fp16"
! Enable FP16 extension.  This also enables floating\-point instructions.
! .IP \fBfp16fml\fR 4
  .IX Item "fp16fml"
! Enable FP16 fmla extension.  This also enables FP16 extensions and
! floating\-point instructions. This option is enabled by default for \fB\-march=armv8.4\-a\fR. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP \fBrcpc\fR 4
  .IX Item "rcpc"
! Enable the RCpc extension.  This enables the use of the LDAPR instructions for
! load\-acquire atomic semantics, and passes it on to the assembler, enabling
  inline asm statements to use instructions from the RCpc extension.
! .IP \fBdotprod\fR 4
  .IX Item "dotprod"
! Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
! .IP \fBaes\fR 4
  .IX Item "aes"
  Enable the Armv8\-a aes and pmull crypto extension.  This also enables Advanced
! SIMD instructions.
! .IP \fBsha2\fR 4
  .IX Item "sha2"
! Enable the Armv8\-a sha2 crypto extension.  This also enables Advanced SIMD instructions.
! .IP \fBsha3\fR 4
  .IX Item "sha3"
! Enable the sha512 and sha3 crypto extension.  This also enables Advanced SIMD
  instructions. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP \fBsm4\fR 4
  .IX Item "sm4"
! Enable the sm3 and sm4 crypto extension.  This also enables Advanced SIMD instructions.
  Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP \fBprofile\fR 4
  .IX Item "profile"
  Enable the Statistical Profiling extension.  This option is only to enable the
  extension at the assembler level and does not affect code generation.
! .IP \fBrng\fR 4
  .IX Item "rng"
  Enable the Armv8.5\-a Random Number instructions.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.
! .IP \fBmemtag\fR 4
  .IX Item "memtag"
  Enable the Armv8.5\-a Memory Tagging Extensions.
  Use of this option with architectures prior to Armv8.5\-A is not supported.
! .IP \fBsb\fR 4
  .IX Item "sb"
  Enable the Armv8\-a Speculation Barrier instruction.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP \fBssbs\fR 4
  .IX Item "ssbs"
  Enable the Armv8\-a Speculative Store Bypass Safe instruction.  This option
  is only to enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP \fBpredres\fR 4
  .IX Item "predres"
  Enable the Armv8\-a Execution and Data Prediction Restriction instructions.
  This option is only to enable the extension at the assembler level and does
  not affect code generation.  This option is enabled by default for
  \&\fB\-march=armv8.5\-a\fR.
! .IP \fBsve2\fR 4
  .IX Item "sve2"
! Enable the Armv8\-a Scalable Vector Extension 2.  This also enables SVE
  instructions.
! .IP \fBsve2\-bitperm\fR 4
  .IX Item "sve2-bitperm"
! Enable SVE2 bitperm instructions.  This also enables SVE2 instructions.
! .IP \fBsve2\-sm4\fR 4
  .IX Item "sve2-sm4"
! Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
! .IP \fBsve2\-aes\fR 4
  .IX Item "sve2-aes"
! Enable SVE2 aes instructions.  This also enables SVE2 instructions.
! .IP \fBsve2\-sha3\fR 4
  .IX Item "sve2-sha3"
! Enable SVE2 sha3 instructions.  This also enables SVE2 instructions.
! .IP \fBtme\fR 4
  .IX Item "tme"
  Enable the Transactional Memory Extension.
! .IP \fBi8mm\fR 4
  .IX Item "i8mm"
  Enable 8\-bit Integer Matrix Multiply instructions.  This also enables
! Advanced SIMD and floating\-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP \fBf32mm\fR 4
  .IX Item "f32mm"
  Enable 32\-bit Floating point Matrix Multiply instructions.  This also enables
! SVE instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP \fBf64mm\fR 4
  .IX Item "f64mm"
  Enable 64\-bit Floating point Matrix Multiply instructions.  This also enables
! SVE instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP \fBbf16\fR 4
  .IX Item "bf16"
! Enable brain half\-precision floating\-point instructions.  This also enables
! Advanced SIMD and floating\-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP \fBls64\fR 4
  .IX Item "ls64"
  Enable the 64\-byte atomic load and store instructions for accelerators.
  This option is enabled by default for \fB\-march=armv8.7\-a\fR.
! .IP \fBmops\fR 4
  .IX Item "mops"
  Enable the instructions to accelerate memory operations like \f(CW\*(C`memcpy\*(C'\fR,
  \&\f(CW\*(C`memmove\*(C'\fR, \f(CW\*(C`memset\*(C'\fR.  This option is enabled by default for
  \&\fB\-march=armv8.8\-a\fR
! .IP \fBflagm\fR 4
  .IX Item "flagm"
  Enable the Flag Manipulation instructions Extension.
! .IP \fBpauth\fR 4
  .IX Item "pauth"
  Enable the Pointer Authentication Extension.
! .IP \fBcssc\fR 4
  .IX Item "cssc"
  Enable the Common Short Sequence Compression instructions.
! .IP \fBsme\fR 4
  .IX Item "sme"
  Enable the Scalable Matrix Extension.
! .IP \fBsme\-i16i64\fR 4
  .IX Item "sme-i16i64"
! Enable the FEAT_SME_I16I64 extension to SME.
! .IP \fBsme\-f64f64\fR 4
  .IX Item "sme-f64f64"
! Enable the FEAT_SME_F64F64 extension to SME.
  +@item sme2
! Enable the Scalable Matrix Extension 2.  This also enables SME instructions.
! .IP \fBlse128\fR 4
  .IX Item "lse128"
! Enable the LSE128 128\-bit atomic instructions extension.  This also
! enables LSE instructions.
! .IP \fBd128\fR 4
  .IX Item "d128"
  Enable support for 128\-bit system register read/write instructions.
! This also enables the LSE128 extension.
! .IP \fBgcs\fR 4
  .IX Item "gcs"
  Enable support for Armv9.4\-a Guarded Control Stack extension.
! .IP \fBthe\fR 4
  .IX Item "the"
  Enable support for Armv8.9\-a/9.4\-a translation hardening extension.
! .IP \fBrcpc3\fR 4
  .IX Item "rcpc3"
  Enable the RCpc3 (Release Consistency) extension.
  .PP
*************** Conversely, \fBnofp\fR implies \fBnosimd
*** 21026,21159 ****
  .IX Subsection "Adapteva Epiphany Options"
  .PP
  These \fB\-m\fR options are defined for Adapteva Epiphany:
! .IP "\fB\-mhalf\-reg\-file\fR" 4
  .IX Item "-mhalf-reg-file"
! Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
  That allows code to run on hardware variants that lack these registers.
! .IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
  .IX Item "-mprefer-short-insn-regs"
  Preferentially allocate registers that allow short instruction generation.
  This can result in increased instruction count, so this may either reduce or
  increase overall code size.
! .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.
! .IP "\fB\-mcmove\fR" 4
  .IX Item "-mcmove"
  Enable the generation of conditional moves.
! .IP "\fB\-mnops=\fR\fInum\fR" 4
  .IX Item "-mnops=num"
  Emit \fInum\fR NOPs before every other generated instruction.
! .IP "\fB\-mno\-soft\-cmpsf\fR" 4
  .IX Item "-mno-soft-cmpsf"
! For single-precision floating-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
  and test the flags.  This is faster than a software comparison, but can
  get incorrect results in the presence of NaNs, or when two different small
  numbers are compared such that their difference is calculated as zero.
! The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
  software comparisons.
! .IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
  .IX Item "-mstack-offset=num"
  Set the offset between the top of the stack and the stack pointer.
  E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
  can be used by leaf functions without stack allocation.
  Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
! Note also that this option changes the \s-1ABI\s0; compiling a program with a
  different stack offset than the libraries have been compiled with
  generally does not work.
  This option can be useful if you want to evaluate if a different stack
  offset would give you better code, but to actually use a different stack
  offset to build working programs, it is recommended to configure the
  toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
! .IP "\fB\-mno\-round\-nearest\fR" 4
  .IX Item "-mno-round-nearest"
  Make the scheduler assume that the rounding mode has been set to
  truncating.  The default is \fB\-mround\-nearest\fR.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  If not otherwise specified by an attribute, assume all calls might be beyond
  the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
  function address into a register before performing a (otherwise direct) call.
  This is the default.
! .IP "\fB\-mshort\-calls\fR" 4
  .IX Item "-mshort-calls"
  If not otherwise specified by an attribute, assume all direct calls are
  in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
  for direct calls.  The default is \fB\-mlong\-calls\fR.
! .IP "\fB\-msmall16\fR" 4
  .IX Item "-msmall16"
  Assume addresses can be loaded as 16\-bit unsigned values.  This does not
  apply to function addresses for which \fB\-mlong\-calls\fR semantics
  are in effect.
! .IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
  .IX Item "-mfp-mode=mode"
! Set the prevailing mode of the floating-point unit.
! This determines the floating-point mode that is provided and expected
  at function call and return time.  Making this mode match the mode you
  predominantly need at function start can make your programs smaller and
  faster by avoiding unnecessary mode switches.
  .Sp
  \&\fImode\fR can be set to one the following values:
  .RS 4
! .IP "\fBcaller\fR" 4
  .IX Item "caller"
  Any mode at function entry is valid, and retained or restored when
  the function returns, and when it calls other functions.
  This mode is useful for compiling libraries or other compilation units
  you might want to incorporate into different programs with different
! prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
  object file outweighs the size and speed overhead for any extra
  mode switching that might be needed, compared with what would be needed
! with a more specific choice of prevailing \s-1FPU\s0 mode.
! .IP "\fBtruncate\fR" 4
  .IX Item "truncate"
! This is the mode used for floating-point calculations with
  truncating (i.e. round towards zero) rounding mode.  That includes
  conversion from floating point to integer.
! .IP "\fBround-nearest\fR" 4
  .IX Item "round-nearest"
! This is the mode used for floating-point calculations with
! round-to-nearest-or-even rounding mode.
! .IP "\fBint\fR" 4
  .IX Item "int"
! This is the mode used to perform integer calculations in the \s-1FPU,\s0 e.g.
! integer multiply, or integer multiply-and-accumulate.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mfp\-mode=caller\fR
  .RE
! .IP "\fB\-mno\-split\-lohi\fR" 4
  .IX Item "-mno-split-lohi"
  .PD 0
! .IP "\fB\-mno\-postinc\fR" 4
  .IX Item "-mno-postinc"
! .IP "\fB\-mno\-postmodify\fR" 4
  .IX Item "-mno-postmodify"
  .PD
  Code generation tweaks that disable, respectively, splitting of 32\-bit
! loads, generation of post-increment addresses, and generation of
! post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
  \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
! .IP "\fB\-mnovect\-double\fR" 4
  .IX Item "-mnovect-double"
! Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
! \&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
! .IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
  .IX Item "-max-vect-align=num"
! The maximum alignment for \s-1SIMD\s0 vector mode types.
  \&\fInum\fR may be 4 or 8.  The default is 8.
! Note that this is an \s-1ABI\s0 change, even though many library function
! interfaces are unaffected if they don't use \s-1SIMD\s0 vector modes
  in places that affect size and/or alignment of relevant types.
! .IP "\fB\-msplit\-vecmove\-early\fR" 4
  .IX Item "-msplit-vecmove-early"
  Split vector moves into single word moves before reload.  In theory this
  can give better register allocation, but so far the reverse seems to be
  generally the case.
! .IP "\fB\-m1reg\-\fR\fIreg\fR" 4
  .IX Item "-m1reg-reg"
  Specify a register to hold the constant \-1, which makes loading small negative
  constants and certain bitmasks faster.
--- 20961,21094 ----
  .IX Subsection "Adapteva Epiphany Options"
  .PP
  These \fB\-m\fR options are defined for Adapteva Epiphany:
! .IP \fB\-mhalf\-reg\-file\fR 4
  .IX Item "-mhalf-reg-file"
! Don\*(Aqt allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
  That allows code to run on hardware variants that lack these registers.
! .IP \fB\-mprefer\-short\-insn\-regs\fR 4
  .IX Item "-mprefer-short-insn-regs"
  Preferentially allocate registers that allow short instruction generation.
  This can result in increased instruction count, so this may either reduce or
  increase overall code size.
! .IP \fB\-mbranch\-cost=\fR\fInum\fR 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR "simple" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.
! .IP \fB\-mcmove\fR 4
  .IX Item "-mcmove"
  Enable the generation of conditional moves.
! .IP \fB\-mnops=\fR\fInum\fR 4
  .IX Item "-mnops=num"
  Emit \fInum\fR NOPs before every other generated instruction.
! .IP \fB\-mno\-soft\-cmpsf\fR 4
  .IX Item "-mno-soft-cmpsf"
! For single\-precision floating\-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
  and test the flags.  This is faster than a software comparison, but can
  get incorrect results in the presence of NaNs, or when two different small
  numbers are compared such that their difference is calculated as zero.
! The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE\-compliant,
  software comparisons.
! .IP \fB\-mstack\-offset=\fR\fInum\fR 4
  .IX Item "-mstack-offset=num"
  Set the offset between the top of the stack and the stack pointer.
  E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
  can be used by leaf functions without stack allocation.
  Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
! Note also that this option changes the ABI; compiling a program with a
  different stack offset than the libraries have been compiled with
  generally does not work.
  This option can be useful if you want to evaluate if a different stack
  offset would give you better code, but to actually use a different stack
  offset to build working programs, it is recommended to configure the
  toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
! .IP \fB\-mno\-round\-nearest\fR 4
  .IX Item "-mno-round-nearest"
  Make the scheduler assume that the rounding mode has been set to
  truncating.  The default is \fB\-mround\-nearest\fR.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  If not otherwise specified by an attribute, assume all calls might be beyond
  the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
  function address into a register before performing a (otherwise direct) call.
  This is the default.
! .IP \fB\-mshort\-calls\fR 4
  .IX Item "-mshort-calls"
  If not otherwise specified by an attribute, assume all direct calls are
  in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
  for direct calls.  The default is \fB\-mlong\-calls\fR.
! .IP \fB\-msmall16\fR 4
  .IX Item "-msmall16"
  Assume addresses can be loaded as 16\-bit unsigned values.  This does not
  apply to function addresses for which \fB\-mlong\-calls\fR semantics
  are in effect.
! .IP \fB\-mfp\-mode=\fR\fImode\fR 4
  .IX Item "-mfp-mode=mode"
! Set the prevailing mode of the floating\-point unit.
! This determines the floating\-point mode that is provided and expected
  at function call and return time.  Making this mode match the mode you
  predominantly need at function start can make your programs smaller and
  faster by avoiding unnecessary mode switches.
  .Sp
  \&\fImode\fR can be set to one the following values:
  .RS 4
! .IP \fBcaller\fR 4
  .IX Item "caller"
  Any mode at function entry is valid, and retained or restored when
  the function returns, and when it calls other functions.
  This mode is useful for compiling libraries or other compilation units
  you might want to incorporate into different programs with different
! prevailing FPU modes, and the convenience of being able to use a single
  object file outweighs the size and speed overhead for any extra
  mode switching that might be needed, compared with what would be needed
! with a more specific choice of prevailing FPU mode.
! .IP \fBtruncate\fR 4
  .IX Item "truncate"
! This is the mode used for floating\-point calculations with
  truncating (i.e. round towards zero) rounding mode.  That includes
  conversion from floating point to integer.
! .IP \fBround\-nearest\fR 4
  .IX Item "round-nearest"
! This is the mode used for floating\-point calculations with
! round\-to\-nearest\-or\-even rounding mode.
! .IP \fBint\fR 4
  .IX Item "int"
! This is the mode used to perform integer calculations in the FPU, e.g.
! integer multiply, or integer multiply\-and\-accumulate.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mfp\-mode=caller\fR
  .RE
! .IP \fB\-mno\-split\-lohi\fR 4
  .IX Item "-mno-split-lohi"
  .PD 0
! .IP \fB\-mno\-postinc\fR 4
  .IX Item "-mno-postinc"
! .IP \fB\-mno\-postmodify\fR 4
  .IX Item "-mno-postmodify"
  .PD
  Code generation tweaks that disable, respectively, splitting of 32\-bit
! loads, generation of post\-increment addresses, and generation of
! post\-modify addresses.  The defaults are \fBmsplit\-lohi\fR,
  \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
! .IP \fB\-mnovect\-double\fR 4
  .IX Item "-mnovect-double"
! Change the preferred SIMD mode to SImode.  The default is
! \&\fB\-mvect\-double\fR, which uses DImode as preferred SIMD mode.
! .IP \fB\-max\-vect\-align=\fR\fInum\fR 4
  .IX Item "-max-vect-align=num"
! The maximum alignment for SIMD vector mode types.
  \&\fInum\fR may be 4 or 8.  The default is 8.
! Note that this is an ABI change, even though many library function
! interfaces are unaffected if they don\*(Aqt use SIMD vector modes
  in places that affect size and/or alignment of relevant types.
! .IP \fB\-msplit\-vecmove\-early\fR 4
  .IX Item "-msplit-vecmove-early"
  Split vector moves into single word moves before reload.  In theory this
  can give better register allocation, but so far the reverse seems to be
  generally the case.
! .IP \fB\-m1reg\-\fR\fIreg\fR 4
  .IX Item "-m1reg-reg"
  Specify a register to hold the constant \-1, which makes loading small negative
  constants and certain bitmasks faster.
*************** which specify use of that register as a
*** 21162,21694 ****
  and \fBnone\fR, which means that no register is used for this
  purpose.  The default is \fB\-m1reg\-none\fR.
  .PP
! \fI\s-1AMD GCN\s0 Options\fR
  .IX Subsection "AMD GCN Options"
  .PP
! These options are defined specifically for the \s-1AMD GCN\s0 port.
! .IP "\fB\-march=\fR\fIgpu\fR" 4
  .IX Item "-march=gpu"
  .PD 0
! .IP "\fB\-mtune=\fR\fIgpu\fR" 4
  .IX Item "-mtune=gpu"
  .PD
  Set architecture type or tuning for \fIgpu\fR. Supported values for \fIgpu\fR
  are
  .RS 4
! .IP "\fBfiji\fR" 4
  .IX Item "fiji"
! Compile for \s-1GCN3\s0 Fiji devices (gfx803).  Support deprecated; availablility
! depends on how \s-1GCC\s0 has been configured, see \fB\-\-with\-arch\fR and
  \&\fB\-\-with\-multilib\-list\fR.
! .IP "\fBgfx900\fR" 4
  .IX Item "gfx900"
! Compile for \s-1GCN5\s0 Vega 10 devices (gfx900).
! .IP "\fBgfx906\fR" 4
  .IX Item "gfx906"
! Compile for \s-1GCN5\s0 Vega 20 devices (gfx906).
! .IP "\fBgfx908\fR" 4
  .IX Item "gfx908"
! Compile for \s-1CDNA1\s0 Instinct \s-1MI100\s0 series devices (gfx908).
! .IP "\fBgfx90a\fR" 4
  .IX Item "gfx90a"
! Compile for \s-1CDNA2\s0 Instinct \s-1MI200\s0 series devices (gfx90a).
! .IP "\fBgfx90c\fR" 4
  .IX Item "gfx90c"
! Compile for \s-1GCN5\s0 Vega 7 devices (gfx90c).
! .IP "\fBgfx1030\fR" 4
  .IX Item "gfx1030"
! Compile for \s-1RDNA2\s0 gfx1030 devices (\s-1GFX10\s0 series).
! .IP "\fBgfx1036\fR" 4
  .IX Item "gfx1036"
! Compile for \s-1RDNA2\s0 gfx1036 devices (\s-1GFX10\s0 series).
! .IP "\fBgfx1100\fR" 4
  .IX Item "gfx1100"
! Compile for \s-1RDNA3\s0 gfx1100 devices (\s-1GFX11\s0 series).
! .IP "\fBgfx1103\fR" 4
  .IX Item "gfx1103"
! Compile for \s-1RDNA3\s0 gfx1103 devices (\s-1GFX11\s0 series).
  .RE
  .RS 4
  .RE
! .IP "\fB\-msram\-ecc=on\fR" 4
  .IX Item "-msram-ecc=on"
  .PD 0
! .IP "\fB\-msram\-ecc=off\fR" 4
  .IX Item "-msram-ecc=off"
! .IP "\fB\-msram\-ecc=any\fR" 4
  .IX Item "-msram-ecc=any"
  .PD
! Compile binaries suitable for devices with the SRAM-ECC feature enabled,
! disabled, or either mode.  This feature can be enabled per-process on some
  devices.  The compiled code must match the device mode. The default is
  \&\fBany\fR, for devices that support it.
! .IP "\fB\-mstack\-size=\fR\fIbytes\fR" 4
  .IX Item "-mstack-size=bytes"
! Specify how many \fIbytes\fR of stack space will be requested for each \s-1GPU\s0
! thread (wave-front).  Beware that there may be many threads and limited memory
  available.  The size of the stack allocation may also have an impact on
! run-time performance.  The default is 32KB when using OpenACC or OpenMP, and
  1MB otherwise.
! .IP "\fB\-mxnack=on\fR" 4
  .IX Item "-mxnack=on"
  .PD 0
! .IP "\fB\-mxnack=off\fR" 4
  .IX Item "-mxnack=off"
! .IP "\fB\-mxnack=any\fR" 4
  .IX Item "-mxnack=any"
  .PD
! Compile binaries suitable for devices with the \s-1XNACK\s0 feature enabled, disabled,
! or either mode.  Some devices always require \s-1XNACK\s0 and some allow the user to
! configure \s-1XNACK.\s0  The compiled code must match the device mode.
  The default is \fB\-mxnack=any\fR on devices that support Unified Shared
  Memory, and \fB\-mxnack=no\fR otherwise.
  .PP
! \fI\s-1ARC\s0 Options\fR
  .IX Subsection "ARC Options"
  .PP
  The following options control the architecture variant for which code
  is being compiled:
! .IP "\fB\-mbarrel\-shifter\fR" 4
  .IX Item "-mbarrel-shifter"
  Generate instructions supported by barrel shifter.  This is the default
  unless \fB\-mcpu=ARC601\fR or \fB\-mcpu=ARCEM\fR is in effect.
! .IP "\fB\-mjli\-always\fR" 4
  .IX Item "-mjli-always"
  Force to call a function using jli_s instruction.  This option is
  valid only for ARCv2 architecture.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Set architecture type, register usage, and instruction scheduling
  parameters for \fIcpu\fR.  There are also shortcut alias options
  available for backward compatibility and convenience.  Supported
  values for \fIcpu\fR are
  .RS 4
! .IP "\fBarc600\fR" 4
  .IX Item "arc600"
! Compile for \s-1ARC600.\s0  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
! .IP "\fBarc601\fR" 4
  .IX Item "arc601"
! Compile for \s-1ARC601.\s0  Alias: \fB\-mARC601\fR.
! .IP "\fBarc700\fR" 4
  .IX Item "arc700"
! Compile for \s-1ARC700.\s0  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
  This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
! .IP "\fBarcem\fR" 4
  .IX Item "arcem"
! Compile for \s-1ARC EM.\s0
! .IP "\fBarchs\fR" 4
  .IX Item "archs"
! Compile for \s-1ARC HS.\s0
! .IP "\fBem\fR" 4
  .IX Item "em"
! Compile for \s-1ARC EM CPU\s0 with no hardware extensions.
! .IP "\fBem4\fR" 4
  .IX Item "em4"
! Compile for \s-1ARC EM4 CPU.\s0
! .IP "\fBem4_dmips\fR" 4
  .IX Item "em4_dmips"
! Compile for \s-1ARC EM4 DMIPS CPU.\s0
! .IP "\fBem4_fpus\fR" 4
  .IX Item "em4_fpus"
! Compile for \s-1ARC EM4 DMIPS CPU\s0 with the single-precision floating-point
  extension.
! .IP "\fBem4_fpuda\fR" 4
  .IX Item "em4_fpuda"
! Compile for \s-1ARC EM4 DMIPS CPU\s0 with single-precision floating-point and
  double assist instructions.
! .IP "\fBhs\fR" 4
  .IX Item "hs"
! Compile for \s-1ARC HS CPU\s0 with no hardware extensions except the atomic
  instructions.
! .IP "\fBhs34\fR" 4
  .IX Item "hs34"
! Compile for \s-1ARC HS34 CPU.\s0
! .IP "\fBhs38\fR" 4
  .IX Item "hs38"
! Compile for \s-1ARC HS38 CPU.\s0
! .IP "\fBhs38_linux\fR" 4
  .IX Item "hs38_linux"
! Compile for \s-1ARC HS38 CPU\s0 with all hardware extensions on.
! .IP "\fBhs4x\fR" 4
  .IX Item "hs4x"
! Compile for \s-1ARC\s0 HS4x \s-1CPU.\s0
! .IP "\fBhs4xd\fR" 4
  .IX Item "hs4xd"
! Compile for \s-1ARC\s0 HS4xD \s-1CPU.\s0
! .IP "\fBhs4x_rel31\fR" 4
  .IX Item "hs4x_rel31"
! Compile for \s-1ARC\s0 HS4x \s-1CPU\s0 release 3.10a.
! .IP "\fBarc600_norm\fR" 4
  .IX Item "arc600_norm"
! Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP "\fBarc600_mul32x16\fR" 4
  .IX Item "arc600_mul32x16"
! Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply 
  instructions enabled.
! .IP "\fBarc600_mul64\fR" 4
  .IX Item "arc600_mul64"
! Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family 
  instructions enabled.
! .IP "\fBarc601_norm\fR" 4
  .IX Item "arc601_norm"
! Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP "\fBarc601_mul32x16\fR" 4
  .IX Item "arc601_mul32x16"
! Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply
  instructions enabled.
! .IP "\fBarc601_mul64\fR" 4
  .IX Item "arc601_mul64"
! Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family
  instructions enabled.
! .IP "\fBnps400\fR" 4
  .IX Item "nps400"
! Compile for \s-1ARC 700\s0 on \s-1NPS400\s0 chip.
! .IP "\fBem_mini\fR" 4
  .IX Item "em_mini"
! Compile for \s-1ARC EM\s0 minimalist configuration featuring reduced register
  set.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mdpfp\fR" 4
  .IX Item "-mdpfp"
  .PD 0
! .IP "\fB\-mdpfp\-compact\fR" 4
  .IX Item "-mdpfp-compact"
  .PD
! Generate double-precision \s-1FPX\s0 instructions, tuned for the compact
  implementation.
! .IP "\fB\-mdpfp\-fast\fR" 4
  .IX Item "-mdpfp-fast"
! Generate double-precision \s-1FPX\s0 instructions, tuned for the fast
  implementation.
! .IP "\fB\-mno\-dpfp\-lrsr\fR" 4
  .IX Item "-mno-dpfp-lrsr"
! Disable \f(CW\*(C`lr\*(C'\fR and \f(CW\*(C`sr\*(C'\fR instructions from using \s-1FPX\s0 extension
  aux registers.
! .IP "\fB\-mea\fR" 4
  .IX Item "-mea"
  Generate extended arithmetic instructions.  Currently only
  \&\f(CW\*(C`divaw\*(C'\fR, \f(CW\*(C`adds\*(C'\fR, \f(CW\*(C`subs\*(C'\fR, and \f(CW\*(C`sat16\*(C'\fR are
  supported.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP "\fB\-mno\-mpy\fR" 4
  .IX Item "-mno-mpy"
! Do not generate \f(CW\*(C`mpy\*(C'\fR\-family instructions for \s-1ARC700.\s0  This option is
  deprecated.
! .IP "\fB\-mmul32x16\fR" 4
  .IX Item "-mmul32x16"
! Generate 32x16\-bit multiply and multiply-accumulate instructions.
! .IP "\fB\-mmul64\fR" 4
  .IX Item "-mmul64"
  Generate \f(CW\*(C`mul64\*(C'\fR and \f(CW\*(C`mulu64\*(C'\fR instructions.  
  Only valid for \fB\-mcpu=ARC600\fR.
! .IP "\fB\-mnorm\fR" 4
  .IX Item "-mnorm"
  Generate \f(CW\*(C`norm\*(C'\fR instructions.  This is the default if \fB\-mcpu=ARC700\fR
  is in effect.
! .IP "\fB\-mspfp\fR" 4
  .IX Item "-mspfp"
  .PD 0
! .IP "\fB\-mspfp\-compact\fR" 4
  .IX Item "-mspfp-compact"
  .PD
! Generate single-precision \s-1FPX\s0 instructions, tuned for the compact
  implementation.
! .IP "\fB\-mspfp\-fast\fR" 4
  .IX Item "-mspfp-fast"
! Generate single-precision \s-1FPX\s0 instructions, tuned for the fast
  implementation.
! .IP "\fB\-msimd\fR" 4
  .IX Item "-msimd"
! Enable generation of \s-1ARC SIMD\s0 instructions via target-specific
  builtins.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  This option ignored; it is provided for compatibility purposes only.
! Software floating-point code is emitted by default, and this default
! can overridden by \s-1FPX\s0 options; \fB\-mspfp\fR, \fB\-mspfp\-compact\fR, or
  \&\fB\-mspfp\-fast\fR for single precision, and \fB\-mdpfp\fR,
  \&\fB\-mdpfp\-compact\fR, or \fB\-mdpfp\-fast\fR for double precision.
! .IP "\fB\-mswap\fR" 4
  .IX Item "-mswap"
  Generate \f(CW\*(C`swap\*(C'\fR instructions.
! .IP "\fB\-matomic\fR" 4
  .IX Item "-matomic"
  This enables use of the locked load/store conditional extension to implement
! atomic memory built-in functions.  Not available for \s-1ARC\s0 6xx or \s-1ARC
! EM\s0 cores.
! .IP "\fB\-mdiv\-rem\fR" 4
  .IX Item "-mdiv-rem"
  Enable \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`rem\*(C'\fR instructions for ARCv2 cores.
! .IP "\fB\-mcode\-density\fR" 4
  .IX Item "-mcode-density"
! Enable code density instructions for \s-1ARC EM.\s0  
! This option is on by default for \s-1ARC HS.\s0
! .IP "\fB\-mll64\fR" 4
  .IX Item "-mll64"
! Enable double load/store operations for \s-1ARC HS\s0 cores.
! .IP "\fB\-mtp\-regno=\fR\fIregno\fR" 4
  .IX Item "-mtp-regno=regno"
  Specify thread pointer register number.
! .IP "\fB\-mmpy\-option=\fR\fImulto\fR" 4
  .IX Item "-mmpy-option=multo"
  Compile ARCv2 code with a multiplier design option.  You can specify 
  the option using either a string or numeric value for \fImulto\fR.  
  \&\fBwlh1\fR is the default value.  The recognized values are:
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  .PD 0
! .IP "\fBnone\fR" 4
  .IX Item "none"
  .PD
  No multiplier available.
! .IP "\fB1\fR" 4
  .IX Item "1"
  .PD 0
! .IP "\fBw\fR" 4
  .IX Item "w"
  .PD
  16x16 multiplier, fully pipelined.
  The following instructions are enabled: \f(CW\*(C`mpyw\*(C'\fR and \f(CW\*(C`mpyuw\*(C'\fR.
! .IP "\fB2\fR" 4
  .IX Item "2"
  .PD 0
! .IP "\fBwlh1\fR" 4
  .IX Item "wlh1"
  .PD
  32x32 multiplier, fully
  pipelined (1 stage).  The following instructions are additionally
  enabled: \f(CW\*(C`mpy\*(C'\fR, \f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB3\fR" 4
  .IX Item "3"
  .PD 0
! .IP "\fBwlh2\fR" 4
  .IX Item "wlh2"
  .PD
  32x32 multiplier, fully pipelined
  (2 stages).  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB4\fR" 4
  .IX Item "4"
  .PD 0
! .IP "\fBwlh3\fR" 4
  .IX Item "wlh3"
  .PD
  Two 16x16 multipliers, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB5\fR" 4
  .IX Item "5"
  .PD 0
! .IP "\fBwlh4\fR" 4
  .IX Item "wlh4"
  .PD
  One 16x16 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB6\fR" 4
  .IX Item "6"
  .PD 0
! .IP "\fBwlh5\fR" 4
  .IX Item "wlh5"
  .PD
  One 32x4 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB7\fR" 4
  .IX Item "7"
  .PD 0
! .IP "\fBplus_dmpy\fR" 4
  .IX Item "plus_dmpy"
  .PD
! \&\s-1ARC HS SIMD\s0 support.
! .IP "\fB8\fR" 4
  .IX Item "8"
  .PD 0
! .IP "\fBplus_macd\fR" 4
  .IX Item "plus_macd"
  .PD
! \&\s-1ARC HS SIMD\s0 support.
! .IP "\fB9\fR" 4
  .IX Item "9"
  .PD 0
! .IP "\fBplus_qmacw\fR" 4
  .IX Item "plus_qmacw"
  .PD
! \&\s-1ARC HS SIMD\s0 support.
  .RE
  .RS 4
  .Sp
  This option is only available for ARCv2 cores.
  .RE
! .IP "\fB\-mfpu=\fR\fIfpu\fR" 4
  .IX Item "-mfpu=fpu"
! Enables support for specific floating-point hardware extensions for ARCv2
  cores.  Supported values for \fIfpu\fR are:
  .RS 4
! .IP "\fBfpus\fR" 4
  .IX Item "fpus"
! Enables support for single-precision floating-point hardware
  extensions.
! .IP "\fBfpud\fR" 4
  .IX Item "fpud"
! Enables support for double-precision floating-point hardware
! extensions.  The single-precision floating-point extension is also
! enabled.  Not available for \s-1ARC EM.\s0
! .IP "\fBfpuda\fR" 4
  .IX Item "fpuda"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.  The single-precision
! floating-point extension is also enabled.  This option is
! only available for \s-1ARC EM.\s0
! .IP "\fBfpuda_div\fR" 4
  .IX Item "fpuda_div"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.
! The single-precision floating-point, square-root, and divide 
  extensions are also enabled.  This option is
! only available for \s-1ARC EM.\s0
! .IP "\fBfpuda_fma\fR" 4
  .IX Item "fpuda_fma"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.
! The single-precision floating-point and fused multiply and add 
  hardware extensions are also enabled.  This option is
! only available for \s-1ARC EM.\s0
! .IP "\fBfpuda_all\fR" 4
  .IX Item "fpuda_all"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.
! All single-precision floating-point hardware extensions are also
! enabled.  This option is only available for \s-1ARC EM.\s0
! .IP "\fBfpus_div\fR" 4
  .IX Item "fpus_div"
! Enables support for single-precision floating-point, square-root and divide 
  hardware extensions.
! .IP "\fBfpud_div\fR" 4
  .IX Item "fpud_div"
! Enables support for double-precision floating-point, square-root and divide 
  hardware extensions.  This option
! includes option \fBfpus_div\fR. Not available for \s-1ARC EM.\s0
! .IP "\fBfpus_fma\fR" 4
  .IX Item "fpus_fma"
! Enables support for single-precision floating-point and 
  fused multiply and add hardware extensions.
! .IP "\fBfpud_fma\fR" 4
  .IX Item "fpud_fma"
! Enables support for double-precision floating-point and 
  fused multiply and add hardware extensions.  This option
! includes option \fBfpus_fma\fR.  Not available for \s-1ARC EM.\s0
! .IP "\fBfpus_all\fR" 4
  .IX Item "fpus_all"
! Enables support for all single-precision floating-point hardware
  extensions.
! .IP "\fBfpud_all\fR" 4
  .IX Item "fpud_all"
! Enables support for all single\- and double-precision floating-point
! hardware extensions.  Not available for \s-1ARC EM.\s0
  .RE
  .RS 4
  .RE
! .IP "\fB\-mirq\-ctrl\-saved=\fR\fIregister-range\fR\fB,\fR \fIblink\fR\fB,\fR \fIlp_count\fR" 4
  .IX Item "-mirq-ctrl-saved=register-range, blink, lp_count"
! Specifies general-purposes registers that the processor automatically
! saves/restores on interrupt entry and exit.  \fIregister-range\fR is
  specified as two registers separated by a dash.  The register range
  always starts with \f(CW\*(C`r0\*(C'\fR, the upper limit is \f(CW\*(C`fp\*(C'\fR register.
  \&\fIblink\fR and \fIlp_count\fR are optional.  This option is only
! valid for \s-1ARC EM\s0 and \s-1ARC HS\s0 cores.
! .IP "\fB\-mrgf\-banked\-regs=\fR\fInumber\fR" 4
  .IX Item "-mrgf-banked-regs=number"
  Specifies the number of registers replicated in second register bank
  on entry to fast interrupt.  Fast interrupts are interrupts with the
! highest priority level P0.  These interrupts save only \s-1PC\s0 and \s-1STATUS32\s0
  registers to avoid memory transactions during interrupt entry and exit
  sequences.  Use this option when you are using fast interrupts in an
! \&\s-1ARC V2\s0 family processor.  Permitted values are 4, 8, 16, and 32.
! .IP "\fB\-mlpc\-width=\fR\fIwidth\fR" 4
  .IX Item "-mlpc-width=width"
  Specify the width of the \f(CW\*(C`lp_count\*(C'\fR register.  Valid values for
  \&\fIwidth\fR are 8, 16, 20, 24, 28 and 32 bits.  The default width is
  fixed to 32 bits.  If the width is less than 32, the compiler does not
! attempt to transform loops in your program to use the zero-delay loop
  mechanism unless it is known that the \f(CW\*(C`lp_count\*(C'\fR register can
! hold the required loop-counter value.  Depending on the width
! specified, the compiler and run-time library might continue to use the
  loop mechanism for various needs.  This option defines macro
  \&\f(CW\*(C`_\|_ARC_LPC_WIDTH_\|_\*(C'\fR with the value of \fIwidth\fR.
! .IP "\fB\-mrf16\fR" 4
  .IX Item "-mrf16"
  This option instructs the compiler to generate code for a 16\-entry
  register file.  This option defines the \f(CW\*(C`_\|_ARC_RF16_\|_\*(C'\fR
  preprocessor macro.
! .IP "\fB\-mbranch\-index\fR" 4
  .IX Item "-mbranch-index"
  Enable use of \f(CW\*(C`bi\*(C'\fR or \f(CW\*(C`bih\*(C'\fR instructions to implement jump
  tables.
  .PP
  The following options are passed through to the assembler, and also
  define preprocessor macro symbols.
! .IP "\fB\-mdsp\-packa\fR" 4
  .IX Item "-mdsp-packa"
! Passed down to the assembler to enable the \s-1DSP\s0 Pack A extensions.
  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.  This option is
  deprecated.
! .IP "\fB\-mdvbf\fR" 4
  .IX Item "-mdvbf"
  Passed down to the assembler to enable the dual Viterbi butterfly
  extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.  This
  option is deprecated.
! .IP "\fB\-mlock\fR" 4
  .IX Item "-mlock"
  Passed down to the assembler to enable the locked load/store
  conditional extension.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xlock\*(C'\fR.
! .IP "\fB\-mmac\-d16\fR" 4
  .IX Item "-mmac-d16"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mmac\-24\fR" 4
  .IX Item "-mmac-24"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mrtsc\fR" 4
  .IX Item "-mrtsc"
! Passed down to the assembler to enable the 64\-bit time-stamp counter
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mswape\fR" 4
  .IX Item "-mswape"
  Passed down to the assembler to enable the swap byte ordering
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xswape\*(C'\fR.
! .IP "\fB\-mtelephony\fR" 4
  .IX Item "-mtelephony"
! Passed down to the assembler to enable dual\- and single-operand
  instructions for telephony.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mxy\fR" 4
  .IX Item "-mxy"
! Passed down to the assembler to enable the \s-1XY\s0 memory extension.  Also
  sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
  .PP
  The following options control how the assembly code is annotated:
! .IP "\fB\-misize\fR" 4
  .IX Item "-misize"
  Annotate assembler instructions with estimated addresses.
! .IP "\fB\-mannotate\-align\fR" 4
  .IX Item "-mannotate-align"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are passed through to the linker:
! .IP "\fB\-marclinux\fR" 4
  .IX Item "-marclinux"
  Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
  This option is enabled by default in tool chains built for
  \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
  when profiling is not requested.
! .IP "\fB\-marclinux_prof\fR" 4
  .IX Item "-marclinux_prof"
  Passed through to the linker, to specify use of the
  \&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
--- 21097,21629 ----
  and \fBnone\fR, which means that no register is used for this
  purpose.  The default is \fB\-m1reg\-none\fR.
  .PP
! \fIAMD GCN Options\fR
  .IX Subsection "AMD GCN Options"
  .PP
! These options are defined specifically for the AMD GCN port.
! .IP \fB\-march=\fR\fIgpu\fR 4
  .IX Item "-march=gpu"
  .PD 0
! .IP \fB\-mtune=\fR\fIgpu\fR 4
  .IX Item "-mtune=gpu"
  .PD
  Set architecture type or tuning for \fIgpu\fR. Supported values for \fIgpu\fR
  are
  .RS 4
! .IP \fBfiji\fR 4
  .IX Item "fiji"
! Compile for GCN3 Fiji devices (gfx803).  Support deprecated; availablility
! depends on how GCC has been configured, see \fB\-\-with\-arch\fR and
  \&\fB\-\-with\-multilib\-list\fR.
! .IP \fBgfx900\fR 4
  .IX Item "gfx900"
! Compile for GCN5 Vega 10 devices (gfx900).
! .IP \fBgfx906\fR 4
  .IX Item "gfx906"
! Compile for GCN5 Vega 20 devices (gfx906).
! .IP \fBgfx908\fR 4
  .IX Item "gfx908"
! Compile for CDNA1 Instinct MI100 series devices (gfx908).
! .IP \fBgfx90a\fR 4
  .IX Item "gfx90a"
! Compile for CDNA2 Instinct MI200 series devices (gfx90a).
! .IP \fBgfx90c\fR 4
  .IX Item "gfx90c"
! Compile for GCN5 Vega 7 devices (gfx90c).
! .IP \fBgfx1030\fR 4
  .IX Item "gfx1030"
! Compile for RDNA2 gfx1030 devices (GFX10 series).
! .IP \fBgfx1036\fR 4
  .IX Item "gfx1036"
! Compile for RDNA2 gfx1036 devices (GFX10 series).
! .IP \fBgfx1100\fR 4
  .IX Item "gfx1100"
! Compile for RDNA3 gfx1100 devices (GFX11 series).
! .IP \fBgfx1103\fR 4
  .IX Item "gfx1103"
! Compile for RDNA3 gfx1103 devices (GFX11 series).
  .RE
  .RS 4
  .RE
! .IP \fB\-msram\-ecc=on\fR 4
  .IX Item "-msram-ecc=on"
  .PD 0
! .IP \fB\-msram\-ecc=off\fR 4
  .IX Item "-msram-ecc=off"
! .IP \fB\-msram\-ecc=any\fR 4
  .IX Item "-msram-ecc=any"
  .PD
! Compile binaries suitable for devices with the SRAM\-ECC feature enabled,
! disabled, or either mode.  This feature can be enabled per\-process on some
  devices.  The compiled code must match the device mode. The default is
  \&\fBany\fR, for devices that support it.
! .IP \fB\-mstack\-size=\fR\fIbytes\fR 4
  .IX Item "-mstack-size=bytes"
! Specify how many \fIbytes\fR of stack space will be requested for each GPU
! thread (wave\-front).  Beware that there may be many threads and limited memory
  available.  The size of the stack allocation may also have an impact on
! run\-time performance.  The default is 32KB when using OpenACC or OpenMP, and
  1MB otherwise.
! .IP \fB\-mxnack=on\fR 4
  .IX Item "-mxnack=on"
  .PD 0
! .IP \fB\-mxnack=off\fR 4
  .IX Item "-mxnack=off"
! .IP \fB\-mxnack=any\fR 4
  .IX Item "-mxnack=any"
  .PD
! Compile binaries suitable for devices with the XNACK feature enabled, disabled,
! or either mode.  Some devices always require XNACK and some allow the user to
! configure XNACK.  The compiled code must match the device mode.
  The default is \fB\-mxnack=any\fR on devices that support Unified Shared
  Memory, and \fB\-mxnack=no\fR otherwise.
  .PP
! \fIARC Options\fR
  .IX Subsection "ARC Options"
  .PP
  The following options control the architecture variant for which code
  is being compiled:
! .IP \fB\-mbarrel\-shifter\fR 4
  .IX Item "-mbarrel-shifter"
  Generate instructions supported by barrel shifter.  This is the default
  unless \fB\-mcpu=ARC601\fR or \fB\-mcpu=ARCEM\fR is in effect.
! .IP \fB\-mjli\-always\fR 4
  .IX Item "-mjli-always"
  Force to call a function using jli_s instruction.  This option is
  valid only for ARCv2 architecture.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Set architecture type, register usage, and instruction scheduling
  parameters for \fIcpu\fR.  There are also shortcut alias options
  available for backward compatibility and convenience.  Supported
  values for \fIcpu\fR are
  .RS 4
! .IP \fBarc600\fR 4
  .IX Item "arc600"
! Compile for ARC600.  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
! .IP \fBarc601\fR 4
  .IX Item "arc601"
! Compile for ARC601.  Alias: \fB\-mARC601\fR.
! .IP \fBarc700\fR 4
  .IX Item "arc700"
! Compile for ARC700.  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
  This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
! .IP \fBarcem\fR 4
  .IX Item "arcem"
! Compile for ARC EM.
! .IP \fBarchs\fR 4
  .IX Item "archs"
! Compile for ARC HS.
! .IP \fBem\fR 4
  .IX Item "em"
! Compile for ARC EM CPU with no hardware extensions.
! .IP \fBem4\fR 4
  .IX Item "em4"
! Compile for ARC EM4 CPU.
! .IP \fBem4_dmips\fR 4
  .IX Item "em4_dmips"
! Compile for ARC EM4 DMIPS CPU.
! .IP \fBem4_fpus\fR 4
  .IX Item "em4_fpus"
! Compile for ARC EM4 DMIPS CPU with the single\-precision floating\-point
  extension.
! .IP \fBem4_fpuda\fR 4
  .IX Item "em4_fpuda"
! Compile for ARC EM4 DMIPS CPU with single\-precision floating\-point and
  double assist instructions.
! .IP \fBhs\fR 4
  .IX Item "hs"
! Compile for ARC HS CPU with no hardware extensions except the atomic
  instructions.
! .IP \fBhs34\fR 4
  .IX Item "hs34"
! Compile for ARC HS34 CPU.
! .IP \fBhs38\fR 4
  .IX Item "hs38"
! Compile for ARC HS38 CPU.
! .IP \fBhs38_linux\fR 4
  .IX Item "hs38_linux"
! Compile for ARC HS38 CPU with all hardware extensions on.
! .IP \fBhs4x\fR 4
  .IX Item "hs4x"
! Compile for ARC HS4x CPU.
! .IP \fBhs4xd\fR 4
  .IX Item "hs4xd"
! Compile for ARC HS4xD CPU.
! .IP \fBhs4x_rel31\fR 4
  .IX Item "hs4x_rel31"
! Compile for ARC HS4x CPU release 3.10a.
! .IP \fBarc600_norm\fR 4
  .IX Item "arc600_norm"
! Compile for ARC 600 CPU with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP \fBarc600_mul32x16\fR 4
  .IX Item "arc600_mul32x16"
! Compile for ARC 600 CPU with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply 
  instructions enabled.
! .IP \fBarc600_mul64\fR 4
  .IX Item "arc600_mul64"
! Compile for ARC 600 CPU with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family 
  instructions enabled.
! .IP \fBarc601_norm\fR 4
  .IX Item "arc601_norm"
! Compile for ARC 601 CPU with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP \fBarc601_mul32x16\fR 4
  .IX Item "arc601_mul32x16"
! Compile for ARC 601 CPU with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply
  instructions enabled.
! .IP \fBarc601_mul64\fR 4
  .IX Item "arc601_mul64"
! Compile for ARC 601 CPU with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family
  instructions enabled.
! .IP \fBnps400\fR 4
  .IX Item "nps400"
! Compile for ARC 700 on NPS400 chip.
! .IP \fBem_mini\fR 4
  .IX Item "em_mini"
! Compile for ARC EM minimalist configuration featuring reduced register
  set.
  .RE
  .RS 4
  .RE
! .IP \fB\-mdpfp\fR 4
  .IX Item "-mdpfp"
  .PD 0
! .IP \fB\-mdpfp\-compact\fR 4
  .IX Item "-mdpfp-compact"
  .PD
! Generate double\-precision FPX instructions, tuned for the compact
  implementation.
! .IP \fB\-mdpfp\-fast\fR 4
  .IX Item "-mdpfp-fast"
! Generate double\-precision FPX instructions, tuned for the fast
  implementation.
! .IP \fB\-mno\-dpfp\-lrsr\fR 4
  .IX Item "-mno-dpfp-lrsr"
! Disable \f(CW\*(C`lr\*(C'\fR and \f(CW\*(C`sr\*(C'\fR instructions from using FPX extension
  aux registers.
! .IP \fB\-mea\fR 4
  .IX Item "-mea"
  Generate extended arithmetic instructions.  Currently only
  \&\f(CW\*(C`divaw\*(C'\fR, \f(CW\*(C`adds\*(C'\fR, \f(CW\*(C`subs\*(C'\fR, and \f(CW\*(C`sat16\*(C'\fR are
  supported.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP \fB\-mno\-mpy\fR 4
  .IX Item "-mno-mpy"
! Do not generate \f(CW\*(C`mpy\*(C'\fR\-family instructions for ARC700.  This option is
  deprecated.
! .IP \fB\-mmul32x16\fR 4
  .IX Item "-mmul32x16"
! Generate 32x16\-bit multiply and multiply\-accumulate instructions.
! .IP \fB\-mmul64\fR 4
  .IX Item "-mmul64"
  Generate \f(CW\*(C`mul64\*(C'\fR and \f(CW\*(C`mulu64\*(C'\fR instructions.  
  Only valid for \fB\-mcpu=ARC600\fR.
! .IP \fB\-mnorm\fR 4
  .IX Item "-mnorm"
  Generate \f(CW\*(C`norm\*(C'\fR instructions.  This is the default if \fB\-mcpu=ARC700\fR
  is in effect.
! .IP \fB\-mspfp\fR 4
  .IX Item "-mspfp"
  .PD 0
! .IP \fB\-mspfp\-compact\fR 4
  .IX Item "-mspfp-compact"
  .PD
! Generate single\-precision FPX instructions, tuned for the compact
  implementation.
! .IP \fB\-mspfp\-fast\fR 4
  .IX Item "-mspfp-fast"
! Generate single\-precision FPX instructions, tuned for the fast
  implementation.
! .IP \fB\-msimd\fR 4
  .IX Item "-msimd"
! Enable generation of ARC SIMD instructions via target\-specific
  builtins.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  This option ignored; it is provided for compatibility purposes only.
! Software floating\-point code is emitted by default, and this default
! can overridden by FPX options; \fB\-mspfp\fR, \fB\-mspfp\-compact\fR, or
  \&\fB\-mspfp\-fast\fR for single precision, and \fB\-mdpfp\fR,
  \&\fB\-mdpfp\-compact\fR, or \fB\-mdpfp\-fast\fR for double precision.
! .IP \fB\-mswap\fR 4
  .IX Item "-mswap"
  Generate \f(CW\*(C`swap\*(C'\fR instructions.
! .IP \fB\-matomic\fR 4
  .IX Item "-matomic"
  This enables use of the locked load/store conditional extension to implement
! atomic memory built\-in functions.  Not available for ARC 6xx or ARC
! EM cores.
! .IP \fB\-mdiv\-rem\fR 4
  .IX Item "-mdiv-rem"
  Enable \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`rem\*(C'\fR instructions for ARCv2 cores.
! .IP \fB\-mcode\-density\fR 4
  .IX Item "-mcode-density"
! Enable code density instructions for ARC EM.  
! This option is on by default for ARC HS.
! .IP \fB\-mll64\fR 4
  .IX Item "-mll64"
! Enable double load/store operations for ARC HS cores.
! .IP \fB\-mtp\-regno=\fR\fIregno\fR 4
  .IX Item "-mtp-regno=regno"
  Specify thread pointer register number.
! .IP \fB\-mmpy\-option=\fR\fImulto\fR 4
  .IX Item "-mmpy-option=multo"
  Compile ARCv2 code with a multiplier design option.  You can specify 
  the option using either a string or numeric value for \fImulto\fR.  
  \&\fBwlh1\fR is the default value.  The recognized values are:
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  .PD 0
! .IP \fBnone\fR 4
  .IX Item "none"
  .PD
  No multiplier available.
! .IP \fB1\fR 4
  .IX Item "1"
  .PD 0
! .IP \fBw\fR 4
  .IX Item "w"
  .PD
  16x16 multiplier, fully pipelined.
  The following instructions are enabled: \f(CW\*(C`mpyw\*(C'\fR and \f(CW\*(C`mpyuw\*(C'\fR.
! .IP \fB2\fR 4
  .IX Item "2"
  .PD 0
! .IP \fBwlh1\fR 4
  .IX Item "wlh1"
  .PD
  32x32 multiplier, fully
  pipelined (1 stage).  The following instructions are additionally
  enabled: \f(CW\*(C`mpy\*(C'\fR, \f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB3\fR 4
  .IX Item "3"
  .PD 0
! .IP \fBwlh2\fR 4
  .IX Item "wlh2"
  .PD
  32x32 multiplier, fully pipelined
  (2 stages).  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB4\fR 4
  .IX Item "4"
  .PD 0
! .IP \fBwlh3\fR 4
  .IX Item "wlh3"
  .PD
  Two 16x16 multipliers, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB5\fR 4
  .IX Item "5"
  .PD 0
! .IP \fBwlh4\fR 4
  .IX Item "wlh4"
  .PD
  One 16x16 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB6\fR 4
  .IX Item "6"
  .PD 0
! .IP \fBwlh5\fR 4
  .IX Item "wlh5"
  .PD
  One 32x4 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB7\fR 4
  .IX Item "7"
  .PD 0
! .IP \fBplus_dmpy\fR 4
  .IX Item "plus_dmpy"
  .PD
! ARC HS SIMD support.
! .IP \fB8\fR 4
  .IX Item "8"
  .PD 0
! .IP \fBplus_macd\fR 4
  .IX Item "plus_macd"
  .PD
! ARC HS SIMD support.
! .IP \fB9\fR 4
  .IX Item "9"
  .PD 0
! .IP \fBplus_qmacw\fR 4
  .IX Item "plus_qmacw"
  .PD
! ARC HS SIMD support.
  .RE
  .RS 4
  .Sp
  This option is only available for ARCv2 cores.
  .RE
! .IP \fB\-mfpu=\fR\fIfpu\fR 4
  .IX Item "-mfpu=fpu"
! Enables support for specific floating\-point hardware extensions for ARCv2
  cores.  Supported values for \fIfpu\fR are:
  .RS 4
! .IP \fBfpus\fR 4
  .IX Item "fpus"
! Enables support for single\-precision floating\-point hardware
  extensions.
! .IP \fBfpud\fR 4
  .IX Item "fpud"
! Enables support for double\-precision floating\-point hardware
! extensions.  The single\-precision floating\-point extension is also
! enabled.  Not available for ARC EM.
! .IP \fBfpuda\fR 4
  .IX Item "fpuda"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.  The single\-precision
! floating\-point extension is also enabled.  This option is
! only available for ARC EM.
! .IP \fBfpuda_div\fR 4
  .IX Item "fpuda_div"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.
! The single\-precision floating\-point, square\-root, and divide 
  extensions are also enabled.  This option is
! only available for ARC EM.
! .IP \fBfpuda_fma\fR 4
  .IX Item "fpuda_fma"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.
! The single\-precision floating\-point and fused multiply and add 
  hardware extensions are also enabled.  This option is
! only available for ARC EM.
! .IP \fBfpuda_all\fR 4
  .IX Item "fpuda_all"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.
! All single\-precision floating\-point hardware extensions are also
! enabled.  This option is only available for ARC EM.
! .IP \fBfpus_div\fR 4
  .IX Item "fpus_div"
! Enables support for single\-precision floating\-point, square\-root and divide 
  hardware extensions.
! .IP \fBfpud_div\fR 4
  .IX Item "fpud_div"
! Enables support for double\-precision floating\-point, square\-root and divide 
  hardware extensions.  This option
! includes option \fBfpus_div\fR. Not available for ARC EM.
! .IP \fBfpus_fma\fR 4
  .IX Item "fpus_fma"
! Enables support for single\-precision floating\-point and 
  fused multiply and add hardware extensions.
! .IP \fBfpud_fma\fR 4
  .IX Item "fpud_fma"
! Enables support for double\-precision floating\-point and 
  fused multiply and add hardware extensions.  This option
! includes option \fBfpus_fma\fR.  Not available for ARC EM.
! .IP \fBfpus_all\fR 4
  .IX Item "fpus_all"
! Enables support for all single\-precision floating\-point hardware
  extensions.
! .IP \fBfpud_all\fR 4
  .IX Item "fpud_all"
! Enables support for all single\- and double\-precision floating\-point
! hardware extensions.  Not available for ARC EM.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mirq\-ctrl\-saved=\fR\fIregister\-range\fR\fB,\fR \fIblink\fR\fB,\fR \fIlp_count\fR" 4
  .IX Item "-mirq-ctrl-saved=register-range, blink, lp_count"
! Specifies general\-purposes registers that the processor automatically
! saves/restores on interrupt entry and exit.  \fIregister\-range\fR is
  specified as two registers separated by a dash.  The register range
  always starts with \f(CW\*(C`r0\*(C'\fR, the upper limit is \f(CW\*(C`fp\*(C'\fR register.
  \&\fIblink\fR and \fIlp_count\fR are optional.  This option is only
! valid for ARC EM and ARC HS cores.
! .IP \fB\-mrgf\-banked\-regs=\fR\fInumber\fR 4
  .IX Item "-mrgf-banked-regs=number"
  Specifies the number of registers replicated in second register bank
  on entry to fast interrupt.  Fast interrupts are interrupts with the
! highest priority level P0.  These interrupts save only PC and STATUS32
  registers to avoid memory transactions during interrupt entry and exit
  sequences.  Use this option when you are using fast interrupts in an
! ARC V2 family processor.  Permitted values are 4, 8, 16, and 32.
! .IP \fB\-mlpc\-width=\fR\fIwidth\fR 4
  .IX Item "-mlpc-width=width"
  Specify the width of the \f(CW\*(C`lp_count\*(C'\fR register.  Valid values for
  \&\fIwidth\fR are 8, 16, 20, 24, 28 and 32 bits.  The default width is
  fixed to 32 bits.  If the width is less than 32, the compiler does not
! attempt to transform loops in your program to use the zero\-delay loop
  mechanism unless it is known that the \f(CW\*(C`lp_count\*(C'\fR register can
! hold the required loop\-counter value.  Depending on the width
! specified, the compiler and run\-time library might continue to use the
  loop mechanism for various needs.  This option defines macro
  \&\f(CW\*(C`_\|_ARC_LPC_WIDTH_\|_\*(C'\fR with the value of \fIwidth\fR.
! .IP \fB\-mrf16\fR 4
  .IX Item "-mrf16"
  This option instructs the compiler to generate code for a 16\-entry
  register file.  This option defines the \f(CW\*(C`_\|_ARC_RF16_\|_\*(C'\fR
  preprocessor macro.
! .IP \fB\-mbranch\-index\fR 4
  .IX Item "-mbranch-index"
  Enable use of \f(CW\*(C`bi\*(C'\fR or \f(CW\*(C`bih\*(C'\fR instructions to implement jump
  tables.
  .PP
  The following options are passed through to the assembler, and also
  define preprocessor macro symbols.
! .IP \fB\-mdsp\-packa\fR 4
  .IX Item "-mdsp-packa"
! Passed down to the assembler to enable the DSP Pack A extensions.
  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.  This option is
  deprecated.
! .IP \fB\-mdvbf\fR 4
  .IX Item "-mdvbf"
  Passed down to the assembler to enable the dual Viterbi butterfly
  extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.  This
  option is deprecated.
! .IP \fB\-mlock\fR 4
  .IX Item "-mlock"
  Passed down to the assembler to enable the locked load/store
  conditional extension.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xlock\*(C'\fR.
! .IP \fB\-mmac\-d16\fR 4
  .IX Item "-mmac-d16"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.  This option is deprecated.
! .IP \fB\-mmac\-24\fR 4
  .IX Item "-mmac-24"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.  This option is deprecated.
! .IP \fB\-mrtsc\fR 4
  .IX Item "-mrtsc"
! Passed down to the assembler to enable the 64\-bit time\-stamp counter
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.  This option is deprecated.
! .IP \fB\-mswape\fR 4
  .IX Item "-mswape"
  Passed down to the assembler to enable the swap byte ordering
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xswape\*(C'\fR.
! .IP \fB\-mtelephony\fR 4
  .IX Item "-mtelephony"
! Passed down to the assembler to enable dual\- and single\-operand
  instructions for telephony.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.  This option is deprecated.
! .IP \fB\-mxy\fR 4
  .IX Item "-mxy"
! Passed down to the assembler to enable the XY memory extension.  Also
  sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
  .PP
  The following options control how the assembly code is annotated:
! .IP \fB\-misize\fR 4
  .IX Item "-misize"
  Annotate assembler instructions with estimated addresses.
! .IP \fB\-mannotate\-align\fR 4
  .IX Item "-mannotate-align"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are passed through to the linker:
! .IP \fB\-marclinux\fR 4
  .IX Item "-marclinux"
  Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
  This option is enabled by default in tool chains built for
  \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
  when profiling is not requested.
! .IP \fB\-marclinux_prof\fR 4
  .IX Item "-marclinux_prof"
  Passed through to the linker, to specify use of the
  \&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
*************** tool chains built for \f(CW\*(C`arc\-lin
*** 21696,21765 ****
  \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
  .PP
  The following options control the semantics of generated code:
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  Generate calls as register indirect calls, thus providing access
  to the full 32\-bit address range.
! .IP "\fB\-mmedium\-calls\fR" 4
  .IX Item "-mmedium-calls"
! Don't use less than 25\-bit addressing range for calls, which is the
! offset available for an unconditional branch-and-link
  instruction.  Conditional execution of function calls is suppressed, to
  allow use of the 25\-bit range, rather than the 21\-bit range with
! conditional branch-and-link.  This is the default for tool chains built
  for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally-visible data in a small data section if
  that data is no bigger than \fInum\fR bytes.  The default value of
! \&\fInum\fR is 4 for any \s-1ARC\s0 configuration, or 8 when we have double
  load/store operations.
! .IP "\fB\-mno\-sdata\fR" 4
  .IX Item "-mno-sdata"
  Do not generate sdata references.  This is the default for tool chains
  built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
  targets.
! .IP "\fB\-mvolatile\-cache\fR" 4
  .IX Item "-mvolatile-cache"
  Use ordinarily cached memory accesses for volatile references.  This is the
  default.
! .IP "\fB\-mno\-volatile\-cache\fR" 4
  .IX Item "-mno-volatile-cache"
  Enable cache bypass for volatile references.
  .PP
  The following options fine tune code generation:
! .IP "\fB\-malign\-call\fR" 4
  .IX Item "-malign-call"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mauto\-modify\-reg\fR" 4
  .IX Item "-mauto-modify-reg"
  Enable the use of pre/post modify with register displacement.
! .IP "\fB\-mbbit\-peephole\fR" 4
  .IX Item "-mbbit-peephole"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mno\-brcc\fR" 4
  .IX Item "-mno-brcc"
! This option disables a target-specific pass in \fIarc_reorg\fR to
! generate compare-and-branch (\f(CW\*(C`br\f(CIcc\f(CW\*(C'\fR) instructions.  
  It has no effect on
  generation of these instructions driven by the combiner pass.
! .IP "\fB\-mcase\-vector\-pcrel\fR" 4
  .IX Item "-mcase-vector-pcrel"
! Use PC-relative switch case tables to enable case table shortening.
  This is the default for \fB\-Os\fR.
! .IP "\fB\-mcompact\-casesi\fR" 4
  .IX Item "-mcompact-casesi"
  Enable compact \f(CW\*(C`casesi\*(C'\fR pattern.  This is the default for \fB\-Os\fR,
  and only available for ARCv1 cores.  This option is deprecated.
! .IP "\fB\-mno\-cond\-exec\fR" 4
  .IX Item "-mno-cond-exec"
! Disable the ARCompact-specific pass to generate conditional 
  execution instructions.
  .Sp
  Due to delay slot scheduling and interactions between operand numbers,
  literal sizes, instruction lengths, and the support for conditional execution,
! the target-independent pass to generate conditional execution is often lacking,
! so the \s-1ARC\s0 port has kept a special pass around that tries to find more
  conditional execution generation opportunities after register allocation,
  branch shortening, and delay slot scheduling have been done.  This pass
  generally, but not always, improves performance and code size, at the cost of
--- 21631,21700 ----
  \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
  .PP
  The following options control the semantics of generated code:
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  Generate calls as register indirect calls, thus providing access
  to the full 32\-bit address range.
! .IP \fB\-mmedium\-calls\fR 4
  .IX Item "-mmedium-calls"
! Don\*(Aqt use less than 25\-bit addressing range for calls, which is the
! offset available for an unconditional branch\-and\-link
  instruction.  Conditional execution of function calls is suppressed, to
  allow use of the 25\-bit range, rather than the 21\-bit range with
! conditional branch\-and\-link.  This is the default for tool chains built
  for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally\-visible data in a small data section if
  that data is no bigger than \fInum\fR bytes.  The default value of
! \&\fInum\fR is 4 for any ARC configuration, or 8 when we have double
  load/store operations.
! .IP \fB\-mno\-sdata\fR 4
  .IX Item "-mno-sdata"
  Do not generate sdata references.  This is the default for tool chains
  built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
  targets.
! .IP \fB\-mvolatile\-cache\fR 4
  .IX Item "-mvolatile-cache"
  Use ordinarily cached memory accesses for volatile references.  This is the
  default.
! .IP \fB\-mno\-volatile\-cache\fR 4
  .IX Item "-mno-volatile-cache"
  Enable cache bypass for volatile references.
  .PP
  The following options fine tune code generation:
! .IP \fB\-malign\-call\fR 4
  .IX Item "-malign-call"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mauto\-modify\-reg\fR 4
  .IX Item "-mauto-modify-reg"
  Enable the use of pre/post modify with register displacement.
! .IP \fB\-mbbit\-peephole\fR 4
  .IX Item "-mbbit-peephole"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mno\-brcc\fR 4
  .IX Item "-mno-brcc"
! This option disables a target\-specific pass in \fIarc_reorg\fR to
! generate compare\-and\-branch (\f(CW\*(C`br\fR\f(CIcc\fR\f(CW\*(C'\fR) instructions.  
  It has no effect on
  generation of these instructions driven by the combiner pass.
! .IP \fB\-mcase\-vector\-pcrel\fR 4
  .IX Item "-mcase-vector-pcrel"
! Use PC\-relative switch case tables to enable case table shortening.
  This is the default for \fB\-Os\fR.
! .IP \fB\-mcompact\-casesi\fR 4
  .IX Item "-mcompact-casesi"
  Enable compact \f(CW\*(C`casesi\*(C'\fR pattern.  This is the default for \fB\-Os\fR,
  and only available for ARCv1 cores.  This option is deprecated.
! .IP \fB\-mno\-cond\-exec\fR 4
  .IX Item "-mno-cond-exec"
! Disable the ARCompact\-specific pass to generate conditional 
  execution instructions.
  .Sp
  Due to delay slot scheduling and interactions between operand numbers,
  literal sizes, instruction lengths, and the support for conditional execution,
! the target\-independent pass to generate conditional execution is often lacking,
! so the ARC port has kept a special pass around that tries to find more
  conditional execution generation opportunities after register allocation,
  branch shortening, and delay slot scheduling have been done.  This pass
  generally, but not always, improves performance and code size, at the cost of
*************** extra compilation time, which is why the
*** 21767,21799 ****
  If you have a problem with call instructions exceeding their allowable
  offset range because they are conditionalized, you should consider using
  \&\fB\-mmedium\-calls\fR instead.
! .IP "\fB\-mearly\-cbranchsi\fR" 4
  .IX Item "-mearly-cbranchsi"
! Enable pre-reload use of the \f(CW\*(C`cbranchsi\*(C'\fR pattern.
! .IP "\fB\-mexpand\-adddi\fR" 4
  .IX Item "-mexpand-adddi"
! Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at \s-1RTL\s0 generation time into
  \&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.  This option is deprecated.
! .IP "\fB\-mindexed\-loads\fR" 4
  .IX Item "-mindexed-loads"
  Enable the use of indexed loads.  This can be problematic because some
  optimizers then assume that indexed stores exist, which is not
  the case.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for \s-1ARC,\s0
  so by default the compiler uses standard reload
  (i.e. \fB\-mno\-lra\fR).
! .IP "\fB\-mlra\-priority\-none\fR" 4
  .IX Item "-mlra-priority-none"
! Don't indicate any priority for target registers.
! .IP "\fB\-mlra\-priority\-compact\fR" 4
  .IX Item "-mlra-priority-compact"
  Indicate target register priority for r0..r3 / r12..r15.
! .IP "\fB\-mlra\-priority\-noncompact\fR" 4
  .IX Item "-mlra-priority-noncompact"
  Reduce target register priority for r0..r3 / r12..r15.
! .IP "\fB\-mmillicode\fR" 4
  .IX Item "-mmillicode"
  When optimizing for size (using \fB\-Os\fR), prologues and epilogues
  that have to save or restore a large number of registers are often
--- 21702,21734 ----
  If you have a problem with call instructions exceeding their allowable
  offset range because they are conditionalized, you should consider using
  \&\fB\-mmedium\-calls\fR instead.
! .IP \fB\-mearly\-cbranchsi\fR 4
  .IX Item "-mearly-cbranchsi"
! Enable pre\-reload use of the \f(CW\*(C`cbranchsi\*(C'\fR pattern.
! .IP \fB\-mexpand\-adddi\fR 4
  .IX Item "-mexpand-adddi"
! Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at RTL generation time into
  \&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.  This option is deprecated.
! .IP \fB\-mindexed\-loads\fR 4
  .IX Item "-mindexed-loads"
  Enable the use of indexed loads.  This can be problematic because some
  optimizers then assume that indexed stores exist, which is not
  the case.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for ARC,
  so by default the compiler uses standard reload
  (i.e. \fB\-mno\-lra\fR).
! .IP \fB\-mlra\-priority\-none\fR 4
  .IX Item "-mlra-priority-none"
! Don\*(Aqt indicate any priority for target registers.
! .IP \fB\-mlra\-priority\-compact\fR 4
  .IX Item "-mlra-priority-compact"
  Indicate target register priority for r0..r3 / r12..r15.
! .IP \fB\-mlra\-priority\-noncompact\fR 4
  .IX Item "-mlra-priority-noncompact"
  Reduce target register priority for r0..r3 / r12..r15.
! .IP \fB\-mmillicode\fR 4
  .IX Item "-mmillicode"
  When optimizing for size (using \fB\-Os\fR), prologues and epilogues
  that have to save or restore a large number of registers are often
*************** referred to as a \fImillicode\fR call.
*** 21802,21840 ****
  performance issues, and/or cause linking issues when linking in a
  nonstandard way, this option is provided to turn on or off millicode
  call generation.
! .IP "\fB\-mcode\-density\-frame\fR" 4
  .IX Item "-mcode-density-frame"
  This option enable the compiler to emit \f(CW\*(C`enter\*(C'\fR and \f(CW\*(C`leave\*(C'\fR
  instructions.  These instructions are only valid for CPUs with
! code-density feature.
! .IP "\fB\-mmixed\-code\fR" 4
  .IX Item "-mmixed-code"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mq\-class\fR" 4
  .IX Item "-mq-class"
  Ths option is deprecated.  Enable \fBq\fR instruction alternatives.
  This is the default for \fB\-Os\fR.
! .IP "\fB\-mRcq\fR" 4
  .IX Item "-mRcq"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mRcw\fR" 4
  .IX Item "-mRcw"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-msize\-level=\fR\fIlevel\fR" 4
  .IX Item "-msize-level=level"
! Fine-tune size optimization with regards to instruction lengths and alignment.
  The recognized values for \fIlevel\fR are:
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  No size optimization.  This level is deprecated and treated like \fB1\fR.
! .IP "\fB1\fR" 4
  .IX Item "1"
  Short instructions are used opportunistically.
! .IP "\fB2\fR" 4
  .IX Item "2"
  In addition, alignment of loops and of code after barriers are dropped.
! .IP "\fB3\fR" 4
  .IX Item "3"
  In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
  .RE
--- 21737,21775 ----
  performance issues, and/or cause linking issues when linking in a
  nonstandard way, this option is provided to turn on or off millicode
  call generation.
! .IP \fB\-mcode\-density\-frame\fR 4
  .IX Item "-mcode-density-frame"
  This option enable the compiler to emit \f(CW\*(C`enter\*(C'\fR and \f(CW\*(C`leave\*(C'\fR
  instructions.  These instructions are only valid for CPUs with
! code\-density feature.
! .IP \fB\-mmixed\-code\fR 4
  .IX Item "-mmixed-code"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mq\-class\fR 4
  .IX Item "-mq-class"
  Ths option is deprecated.  Enable \fBq\fR instruction alternatives.
  This is the default for \fB\-Os\fR.
! .IP \fB\-mRcq\fR 4
  .IX Item "-mRcq"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mRcw\fR 4
  .IX Item "-mRcw"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-msize\-level=\fR\fIlevel\fR 4
  .IX Item "-msize-level=level"
! Fine\-tune size optimization with regards to instruction lengths and alignment.
  The recognized values for \fIlevel\fR are:
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  No size optimization.  This level is deprecated and treated like \fB1\fR.
! .IP \fB1\fR 4
  .IX Item "1"
  Short instructions are used opportunistically.
! .IP \fB2\fR 4
  .IX Item "2"
  In addition, alignment of loops and of code after barriers are dropped.
! .IP \fB3\fR 4
  .IX Item "3"
  In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
  .RE
*************** In addition, optional data alignment is
*** 21843,22031 ****
  This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
  the behavior when this is not set is equivalent to level \fB1\fR.
  .RE
! .IP "\fB\-mtune=\fR\fIcpu\fR" 4
  .IX Item "-mtune=cpu"
  Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
  by \fB\-mcpu=\fR.
  .Sp
  Supported values for \fIcpu\fR are
  .RS 4
! .IP "\fB\s-1ARC600\s0\fR" 4
  .IX Item "ARC600"
! Tune for \s-1ARC600 CPU.\s0
! .IP "\fB\s-1ARC601\s0\fR" 4
  .IX Item "ARC601"
! Tune for \s-1ARC601 CPU.\s0
! .IP "\fB\s-1ARC700\s0\fR" 4
  .IX Item "ARC700"
! Tune for \s-1ARC700 CPU\s0 with standard multiplier block.
! .IP "\fBARC700\-xmac\fR" 4
  .IX Item "ARC700-xmac"
! Tune for \s-1ARC700 CPU\s0 with \s-1XMAC\s0 block.
! .IP "\fB\s-1ARC725D\s0\fR" 4
  .IX Item "ARC725D"
! Tune for \s-1ARC725D CPU.\s0
! .IP "\fB\s-1ARC750D\s0\fR" 4
  .IX Item "ARC750D"
! Tune for \s-1ARC750D CPU.\s0
! .IP "\fBcore3\fR" 4
  .IX Item "core3"
! Tune for ARCv2 core3 type \s-1CPU.\s0  This option enable usage of
  \&\f(CW\*(C`dbnz\*(C'\fR instruction.
! .IP "\fBrelease31a\fR" 4
  .IX Item "release31a"
  Tune for ARC4x release 3.10a.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mmultcost=\fR\fInum\fR" 4
  .IX Item "-mmultcost=num"
  Cost to assume for a multiply instruction, with \fB4\fR being equal to a
  normal instruction.
! .IP "\fB\-munalign\-prob\-threshold=\fR\fIprobability\fR" 4
  .IX Item "-munalign-prob-threshold=probability"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are maintained for backward compatibility, but
  are now deprecated and will be removed in a future release:
! .IP "\fB\-margonaut\fR" 4
  .IX Item "-margonaut"
! Obsolete \s-1FPX.\s0
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP "\fB\-EB\fR" 4
  .IX Item "-EB"
  .PD
! Compile code for big-endian targets.  Use of these options is now
! deprecated.  Big-endian code is supported by configuring \s-1GCC\s0 to build
  \&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets,
  for which big endian is the default.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP "\fB\-EL\fR" 4
  .IX Item "-EL"
  .PD
! Compile code for little-endian targets.  Use of these options is now
! deprecated.  Little-endian code is supported by configuring \s-1GCC\s0 to build 
  \&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets,
  for which little endian is the default.
! .IP "\fB\-mbarrel_shifter\fR" 4
  .IX Item "-mbarrel_shifter"
  Replaced by \fB\-mbarrel\-shifter\fR.
! .IP "\fB\-mdpfp_compact\fR" 4
  .IX Item "-mdpfp_compact"
  Replaced by \fB\-mdpfp\-compact\fR.
! .IP "\fB\-mdpfp_fast\fR" 4
  .IX Item "-mdpfp_fast"
  Replaced by \fB\-mdpfp\-fast\fR.
! .IP "\fB\-mdsp_packa\fR" 4
  .IX Item "-mdsp_packa"
  Replaced by \fB\-mdsp\-packa\fR.
! .IP "\fB\-mEA\fR" 4
  .IX Item "-mEA"
  Replaced by \fB\-mea\fR.
! .IP "\fB\-mmac_24\fR" 4
  .IX Item "-mmac_24"
  Replaced by \fB\-mmac\-24\fR.
! .IP "\fB\-mmac_d16\fR" 4
  .IX Item "-mmac_d16"
  Replaced by \fB\-mmac\-d16\fR.
! .IP "\fB\-mspfp_compact\fR" 4
  .IX Item "-mspfp_compact"
  Replaced by \fB\-mspfp\-compact\fR.
! .IP "\fB\-mspfp_fast\fR" 4
  .IX Item "-mspfp_fast"
  Replaced by \fB\-mspfp\-fast\fR.
! .IP "\fB\-mtune=\fR\fIcpu\fR" 4
  .IX Item "-mtune=cpu"
  Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
! \&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fB\s-1ARC600\s0\fR,
! \&\fB\s-1ARC601\s0\fR, \fB\s-1ARC700\s0\fR and \fBARC700\-xmac\fR respectively.
! .IP "\fB\-multcost=\fR\fInum\fR" 4
  .IX Item "-multcost=num"
  Replaced by \fB\-mmultcost\fR.
  .PP
! \fI\s-1ARM\s0 Options\fR
  .IX Subsection "ARM Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1ARM\s0 port:
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
! Generate code for the specified \s-1ABI.\s0  Permissible values are: \fBapcs-gnu\fR,
! \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
! .IP "\fB\-mapcs\-frame\fR" 4
  .IX Item "-mapcs-frame"
! Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
  Standard for all functions, even if this is not strictly necessary for
  correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
  with this option causes the stack frames not to be generated for
  leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
  This option is deprecated.
! .IP "\fB\-mapcs\fR" 4
  .IX Item "-mapcs"
  This is a synonym for \fB\-mapcs\-frame\fR and is deprecated.
! .IP "\fB\-mthumb\-interwork\fR" 4
  .IX Item "-mthumb-interwork"
! Generate code that supports calling between the \s-1ARM\s0 and Thumb
  instruction sets.  Without this option, on pre\-v5 architectures, the
  two instruction sets cannot be reliably used inside one program.  The
  default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
! is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
  configurations this option is meaningless.
! .IP "\fB\-mno\-sched\-prolog\fR" 4
  .IX Item "-mno-sched-prolog"
  Prevent the reordering of instructions in the function prologue, or the
! merging of those instruction with the instructions in the function's
  body.  This means that all functions start with a recognizable set
  of instructions (or in fact one of a choice from a small set of
  different function prologues), and this information can be used to
  locate the start of functions inside an executable piece of code.  The
  default is \fB\-msched\-prolog\fR.
! .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
! library calls for floating-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating-point
! instructions, but still uses the soft-float calling conventions.
! \&\fBhard\fR allows generation of floating-point instructions
! and uses FPU-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard-float and soft-float ABIs are not link-compatible; you must
! compile your entire program with the same \s-1ABI,\s0 and link with a
  compatible set of libraries.
! .IP "\fB\-mgeneral\-regs\-only\fR" 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general-purpose registers.  This will prevent
! the compiler from using floating-point and Advanced \s-1SIMD\s0 registers but will not
  impose any restrictions on the assembler.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a processor running in little-endian mode.  This is
  the default for all standard configurations.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a processor running in big-endian mode; the default is
! to compile code for a little-endian processor.
! .IP "\fB\-mbe8\fR" 4
  .IX Item "-mbe8"
  .PD 0
! .IP "\fB\-mbe32\fR" 4
  .IX Item "-mbe32"
  .PD
! When linking a big-endian image select between \s-1BE8\s0 and \s-1BE32\s0 formats.
! The option has no effect for little-endian images and is ignored.  The
  default is dependent on the selected target architecture.  For ARMv6
! and later architectures the default is \s-1BE8,\s0 for older architectures
! the default is \s-1BE32.\s0  \s-1BE32\s0 format has been deprecated by \s-1ARM.\s0
! .IP "\fB\-march=\fR\fIname\fR[\fB+extension...\fR]" 4
  .IX Item "-march=name[+extension...]"
! This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  This option can be used in conjunction with or instead
  of the \fB\-mcpu=\fR option.
--- 21778,21966 ----
  This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
  the behavior when this is not set is equivalent to level \fB1\fR.
  .RE
! .IP \fB\-mtune=\fR\fIcpu\fR 4
  .IX Item "-mtune=cpu"
  Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
  by \fB\-mcpu=\fR.
  .Sp
  Supported values for \fIcpu\fR are
  .RS 4
! .IP \fBARC600\fR 4
  .IX Item "ARC600"
! Tune for ARC600 CPU.
! .IP \fBARC601\fR 4
  .IX Item "ARC601"
! Tune for ARC601 CPU.
! .IP \fBARC700\fR 4
  .IX Item "ARC700"
! Tune for ARC700 CPU with standard multiplier block.
! .IP \fBARC700\-xmac\fR 4
  .IX Item "ARC700-xmac"
! Tune for ARC700 CPU with XMAC block.
! .IP \fBARC725D\fR 4
  .IX Item "ARC725D"
! Tune for ARC725D CPU.
! .IP \fBARC750D\fR 4
  .IX Item "ARC750D"
! Tune for ARC750D CPU.
! .IP \fBcore3\fR 4
  .IX Item "core3"
! Tune for ARCv2 core3 type CPU.  This option enable usage of
  \&\f(CW\*(C`dbnz\*(C'\fR instruction.
! .IP \fBrelease31a\fR 4
  .IX Item "release31a"
  Tune for ARC4x release 3.10a.
  .RE
  .RS 4
  .RE
! .IP \fB\-mmultcost=\fR\fInum\fR 4
  .IX Item "-mmultcost=num"
  Cost to assume for a multiply instruction, with \fB4\fR being equal to a
  normal instruction.
! .IP \fB\-munalign\-prob\-threshold=\fR\fIprobability\fR 4
  .IX Item "-munalign-prob-threshold=probability"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are maintained for backward compatibility, but
  are now deprecated and will be removed in a future release:
! .IP \fB\-margonaut\fR 4
  .IX Item "-margonaut"
! Obsolete FPX.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP \fB\-EB\fR 4
  .IX Item "-EB"
  .PD
! Compile code for big\-endian targets.  Use of these options is now
! deprecated.  Big\-endian code is supported by configuring GCC to build
  \&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets,
  for which big endian is the default.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP \fB\-EL\fR 4
  .IX Item "-EL"
  .PD
! Compile code for little\-endian targets.  Use of these options is now
! deprecated.  Little\-endian code is supported by configuring GCC to build 
  \&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets,
  for which little endian is the default.
! .IP \fB\-mbarrel_shifter\fR 4
  .IX Item "-mbarrel_shifter"
  Replaced by \fB\-mbarrel\-shifter\fR.
! .IP \fB\-mdpfp_compact\fR 4
  .IX Item "-mdpfp_compact"
  Replaced by \fB\-mdpfp\-compact\fR.
! .IP \fB\-mdpfp_fast\fR 4
  .IX Item "-mdpfp_fast"
  Replaced by \fB\-mdpfp\-fast\fR.
! .IP \fB\-mdsp_packa\fR 4
  .IX Item "-mdsp_packa"
  Replaced by \fB\-mdsp\-packa\fR.
! .IP \fB\-mEA\fR 4
  .IX Item "-mEA"
  Replaced by \fB\-mea\fR.
! .IP \fB\-mmac_24\fR 4
  .IX Item "-mmac_24"
  Replaced by \fB\-mmac\-24\fR.
! .IP \fB\-mmac_d16\fR 4
  .IX Item "-mmac_d16"
  Replaced by \fB\-mmac\-d16\fR.
! .IP \fB\-mspfp_compact\fR 4
  .IX Item "-mspfp_compact"
  Replaced by \fB\-mspfp\-compact\fR.
! .IP \fB\-mspfp_fast\fR 4
  .IX Item "-mspfp_fast"
  Replaced by \fB\-mspfp\-fast\fR.
! .IP \fB\-mtune=\fR\fIcpu\fR 4
  .IX Item "-mtune=cpu"
  Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
! \&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fBARC600\fR,
! \&\fBARC601\fR, \fBARC700\fR and \fBARC700\-xmac\fR respectively.
! .IP \fB\-multcost=\fR\fInum\fR 4
  .IX Item "-multcost=num"
  Replaced by \fB\-mmultcost\fR.
  .PP
! \fIARM Options\fR
  .IX Subsection "ARM Options"
  .PP
! These \fB\-m\fR options are defined for the ARM port:
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
! Generate code for the specified ABI.  Permissible values are: \fBapcs\-gnu\fR,
! \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs\-linux\fR and \fBiwmmxt\fR.
! .IP \fB\-mapcs\-frame\fR 4
  .IX Item "-mapcs-frame"
! Generate a stack frame that is compliant with the ARM Procedure Call
  Standard for all functions, even if this is not strictly necessary for
  correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
  with this option causes the stack frames not to be generated for
  leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
  This option is deprecated.
! .IP \fB\-mapcs\fR 4
  .IX Item "-mapcs"
  This is a synonym for \fB\-mapcs\-frame\fR and is deprecated.
! .IP \fB\-mthumb\-interwork\fR 4
  .IX Item "-mthumb-interwork"
! Generate code that supports calling between the ARM and Thumb
  instruction sets.  Without this option, on pre\-v5 architectures, the
  two instruction sets cannot be reliably used inside one program.  The
  default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
! is generated when \fB\-mthumb\-interwork\fR is specified.  In AAPCS
  configurations this option is meaningless.
! .IP \fB\-mno\-sched\-prolog\fR 4
  .IX Item "-mno-sched-prolog"
  Prevent the reordering of instructions in the function prologue, or the
! merging of those instruction with the instructions in the function\*(Aqs
  body.  This means that all functions start with a recognizable set
  of instructions (or in fact one of a choice from a small set of
  different function prologues), and this information can be used to
  locate the start of functions inside an executable piece of code.  The
  default is \fB\-msched\-prolog\fR.
! .IP \fB\-mfloat\-abi=\fR\fIname\fR 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating\-point ABI to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes GCC to generate output containing
! library calls for floating\-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating\-point
! instructions, but still uses the soft\-float calling conventions.
! \&\fBhard\fR allows generation of floating\-point instructions
! and uses FPU\-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard\-float and soft\-float ABIs are not link\-compatible; you must
! compile your entire program with the same ABI, and link with a
  compatible set of libraries.
! .IP \fB\-mgeneral\-regs\-only\fR 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general\-purpose registers.  This will prevent
! the compiler from using floating\-point and Advanced SIMD registers but will not
  impose any restrictions on the assembler.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a processor running in little\-endian mode.  This is
  the default for all standard configurations.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a processor running in big\-endian mode; the default is
! to compile code for a little\-endian processor.
! .IP \fB\-mbe8\fR 4
  .IX Item "-mbe8"
  .PD 0
! .IP \fB\-mbe32\fR 4
  .IX Item "-mbe32"
  .PD
! When linking a big\-endian image select between BE8 and BE32 formats.
! The option has no effect for little\-endian images and is ignored.  The
  default is dependent on the selected target architecture.  For ARMv6
! and later architectures the default is BE8, for older architectures
! the default is BE32.  BE32 format has been deprecated by ARM.
! .IP \fB\-march=\fR\fIname\fR[\fB+extension...\fR] 4
  .IX Item "-march=name[+extension...]"
! This specifies the name of the target ARM architecture.  GCC uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  This option can be used in conjunction with or instead
  of the \fB\-mcpu=\fR option.
*************** Most extension names are generically nam
*** 22072,22612 ****
  dependent upon the architecture to which it is applied.  For example,
  the \fB+simd\fR option can be applied to both \fBarmv7\-a\fR and
  \&\fBarmv8\-a\fR architectures, but will enable the original ARMv7\-A
! Advanced \s-1SIMD\s0 (Neon) extensions for \fBarmv7\-a\fR and the ARMv8\-A
  variant for \fBarmv8\-a\fR.
  .Sp
  The table below lists the supported extensions for each architecture.
  Architectures not mentioned do not support any extensions.
  .RS 4
! .IP "\fBarmv5te\fR" 4
  .IX Item "armv5te"
  .PD 0
! .IP "\fBarmv6\fR" 4
  .IX Item "armv6"
! .IP "\fBarmv6j\fR" 4
  .IX Item "armv6j"
! .IP "\fBarmv6k\fR" 4
  .IX Item "armv6k"
! .IP "\fBarmv6kz\fR" 4
  .IX Item "armv6kz"
! .IP "\fBarmv6t2\fR" 4
  .IX Item "armv6t2"
! .IP "\fBarmv6z\fR" 4
  .IX Item "armv6z"
! .IP "\fBarmv6zk\fR" 4
  .IX Item "armv6zk"
  .RS 4
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
  .PD
! The VFPv2 floating-point instructions.  The extension \fB+vfpv2\fR can be
  used as an alias for this extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7\fR" 4
  .IX Item "armv7"
  The common subset of the ARMv7\-A, ARMv7\-R and ARMv7\-M architectures.
  .RS 4
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv3 floating-point instructions, with 16 double-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
! for this extension.  Note that floating-point is not supported by the
  base ARMv7\-M architecture, but is compatible with both the ARMv7\-A and
  ARMv7\-R architectures.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7\-a\fR" 4
  .IX Item "armv7-a"
  .RS 4
  .PD 0
! .IP "\fB+mp\fR" 4
  .IX Item "+mp"
  .PD
  The multiprocessing extension.
! .IP "\fB+sec\fR" 4
  .IX Item "+sec"
  The security extension.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv3 floating-point instructions, with 16 double-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
  for this extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions.
  The extensions \fB+neon\fR and \fB+neon\-vfpv3\fR can be used as aliases
  for this extension.
! .IP "\fB+vfpv3\fR" 4
  .IX Item "+vfpv3"
! The VFPv3 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+vfpv3\-d16\-fp16\fR" 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating-point instructions, with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv3\-fp16\fR" 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating-point instructions, with 32 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv4\-d16\fR" 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating-point instructions, with 16 double-precision
  registers.
! .IP "\fB+vfpv4\fR" 4
  .IX Item "+vfpv4"
! The VFPv4 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+neon\-fp16\fR" 4
  .IX Item "+neon-fp16"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions, with
! the half-precision floating-point conversion operations.
! .IP "\fB+neon\-vfpv4\fR" 4
  .IX Item "+neon-vfpv4"
! The Advanced \s-1SIMD\s0 (Neon) v2 and the VFPv4 floating-point instructions.
! .IP "\fB+nosimd\fR" 4
  .IX Item "+nosimd"
! Disable the Advanced \s-1SIMD\s0 instructions (does not disable floating point).
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point and Advanced \s-1SIMD\s0 instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7ve\fR" 4
  .IX Item "armv7ve"
  The extended version of the ARMv7\-A architecture with support for
  virtualization.
  .RS 4
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv4 floating-point instructions, with 16 double-precision registers.
  The extension \fB+vfpv4\-d16\fR can be used as an alias for this extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The Advanced \s-1SIMD\s0 (Neon) v2 and the VFPv4 floating-point instructions.  The
  extension \fB+neon\-vfpv4\fR can be used as an alias for this extension.
! .IP "\fB+vfpv3\-d16\fR" 4
  .IX Item "+vfpv3-d16"
! The VFPv3 floating-point instructions, with 16 double-precision
  registers.
! .IP "\fB+vfpv3\fR" 4
  .IX Item "+vfpv3"
! The VFPv3 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+vfpv3\-d16\-fp16\fR" 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating-point instructions, with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv3\-fp16\fR" 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating-point instructions, with 32 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv4\-d16\fR" 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating-point instructions, with 16 double-precision
  registers.
! .IP "\fB+vfpv4\fR" 4
  .IX Item "+vfpv4"
! The VFPv4 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+neon\fR" 4
  .IX Item "+neon"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions.
  The extension \fB+neon\-vfpv3\fR can be used as an alias for this extension.
! .IP "\fB+neon\-fp16\fR" 4
  .IX Item "+neon-fp16"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions, with
! the half-precision floating-point conversion operations.
! .IP "\fB+nosimd\fR" 4
  .IX Item "+nosimd"
! Disable the Advanced \s-1SIMD\s0 instructions (does not disable floating point).
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point and Advanced \s-1SIMD\s0 instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8\-a\fR" 4
  .IX Item "armv8-a"
  .RS 4
  .PD 0
! .IP "\fB+crc\fR" 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (\s-1CRC\s0) instructions.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.1\-a\fR" 4
  .IX Item "armv8.1-a"
  .RS 4
  .PD 0
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
  .PD
! The ARMv8.1\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.2\-a\fR" 4
  .IX Item "armv8.2-a"
  .PD 0
! .IP "\fBarmv8.3\-a\fR" 4
  .IX Item "armv8.3-a"
  .RS 4
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+fp16fml\fR" 4
  .IX Item "+fp16fml"
! The half-precision floating-point fmla extension.  This also enables
! the half-precision floating-point extension and Advanced \s-1SIMD\s0 and
! floating-point instructions.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.1\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions.
! .IP "\fB+dotprod\fR" 4
  .IX Item "+dotprod"
! Enable the Dot Product extension.  This also enables Advanced \s-1SIMD\s0 instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.4\-a\fR" 4
  .IX Item "armv8.4-a"
  .RS 4
  .PD 0
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
! as the Dot Product extension and the half-precision floating-point fmla
  extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
  Dot Product extension.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions as well as the Dot Product extension.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.5\-a\fR" 4
  .IX Item "armv8.5-a"
  .RS 4
  .PD 0
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
! as the Dot Product extension and the half-precision floating-point fmla
  extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
  Dot Product extension.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions as well as the Dot Product extension.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.6\-a\fR" 4
  .IX Item "armv8.6-a"
  .RS 4
  .PD 0
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
! as the Dot Product extension and the half-precision floating-point fmla
  extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
  Dot Product extension.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions as well as the Dot Product extension.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7\-r\fR" 4
  .IX Item "armv7-r"
  .RS 4
  .PD 0
! .IP "\fB+fp.sp\fR" 4
  .IX Item "+fp.sp"
  .PD
! The single-precision VFPv3 floating-point instructions.  The extension
  \&\fB+vfpv3xd\fR can be used as an alias for this extension.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv3 floating-point instructions with 16 double-precision registers.
  The extension +vfpv3\-d16 can be used as an alias for this extension.
! .IP "\fB+vfpv3xd\-d16\-fp16\fR" 4
  .IX Item "+vfpv3xd-d16-fp16"
! The single-precision VFPv3 floating-point instructions with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv3\-d16\-fp16\fR" 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating-point instructions with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extension.
! .IP "\fB+idiv\fR" 4
  .IX Item "+idiv"
! The ARM-state integer division instructions.
! .IP "\fB+noidiv\fR" 4
  .IX Item "+noidiv"
! Disable the ARM-state integer division extension.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7e\-m\fR" 4
  .IX Item "armv7e-m"
  .RS 4
  .PD 0
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
  .PD
! The single-precision VFPv4 floating-point instructions.
! .IP "\fB+fpv5\fR" 4
  .IX Item "+fpv5"
! The single-precision FPv5 floating-point instructions.
! .IP "\fB+fp.dp\fR" 4
  .IX Item "+fp.dp"
! The single\- and double-precision FPv5 floating-point instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extensions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.1\-m.main\fR" 4
  .IX Item "armv8.1-m.main"
  .RS 4
  .PD 0
! .IP "\fB+dsp\fR" 4
  .IX Item "+dsp"
  .PD
! The \s-1DSP\s0 instructions.
! .IP "\fB+mve\fR" 4
  .IX Item "+mve"
! The M\-Profile Vector Extension (\s-1MVE\s0) integer instructions.
! .IP "\fB+mve.fp\fR" 4
  .IX Item "+mve.fp"
! The M\-Profile Vector Extension (\s-1MVE\s0) integer and single precision
! floating-point instructions.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The single-precision floating-point instructions.
! .IP "\fB+fp.dp\fR" 4
  .IX Item "+fp.dp"
! The single\- and double-precision floating-point instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (\s-1CDE\s0) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
! .IP "\fB+pacbti\fR" 4
  .IX Item "+pacbti"
  Enable the Pointer Authentication and Branch Target Identification Extension.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8\-m.main\fR" 4
  .IX Item "armv8-m.main"
  .RS 4
  .PD 0
! .IP "\fB+dsp\fR" 4
  .IX Item "+dsp"
  .PD
! The \s-1DSP\s0 instructions.
! .IP "\fB+nodsp\fR" 4
  .IX Item "+nodsp"
! Disable the \s-1DSP\s0 extension.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The single-precision floating-point instructions.
! .IP "\fB+fp.dp\fR" 4
  .IX Item "+fp.dp"
! The single\- and double-precision floating-point instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (\s-1CDE\s0) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8\-r\fR" 4
  .IX Item "armv8-r"
  .RS 4
  .PD 0
! .IP "\fB+crc\fR" 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (\s-1CRC\s0) instructions.
! .IP "\fB+fp.sp\fR" 4
  .IX Item "+fp.sp"
! The single-precision FPv5 floating-point instructions.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .Sp
! \&\fB\-march=native\fR causes the compiler to auto-detect the architecture
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto-detect
  is unsuccessful the option has no effect.
  .RE
! .IP "\fB\-mtune=\fR\fIname\fR" 4
  .IX Item "-mtune=name"
! This option specifies the name of the target \s-1ARM\s0 processor for
! which \s-1GCC\s0 should tune the performance of the code.
! For some \s-1ARM\s0 implementations better performance can be obtained by using
  this option.
  Permissible names are: \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR, \fBarm710t\fR,
  \&\fBarm720t\fR, \fBarm740t\fR, \fBstrongarm\fR, \fBstrongarm110\fR,
--- 22007,22547 ----
  dependent upon the architecture to which it is applied.  For example,
  the \fB+simd\fR option can be applied to both \fBarmv7\-a\fR and
  \&\fBarmv8\-a\fR architectures, but will enable the original ARMv7\-A
! Advanced SIMD (Neon) extensions for \fBarmv7\-a\fR and the ARMv8\-A
  variant for \fBarmv8\-a\fR.
  .Sp
  The table below lists the supported extensions for each architecture.
  Architectures not mentioned do not support any extensions.
  .RS 4
! .IP \fBarmv5te\fR 4
  .IX Item "armv5te"
  .PD 0
! .IP \fBarmv6\fR 4
  .IX Item "armv6"
! .IP \fBarmv6j\fR 4
  .IX Item "armv6j"
! .IP \fBarmv6k\fR 4
  .IX Item "armv6k"
! .IP \fBarmv6kz\fR 4
  .IX Item "armv6kz"
! .IP \fBarmv6t2\fR 4
  .IX Item "armv6t2"
! .IP \fBarmv6z\fR 4
  .IX Item "armv6z"
! .IP \fBarmv6zk\fR 4
  .IX Item "armv6zk"
  .RS 4
! .IP \fB+fp\fR 4
  .IX Item "+fp"
  .PD
! The VFPv2 floating\-point instructions.  The extension \fB+vfpv2\fR can be
  used as an alias for this extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7\fR 4
  .IX Item "armv7"
  The common subset of the ARMv7\-A, ARMv7\-R and ARMv7\-M architectures.
  .RS 4
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv3 floating\-point instructions, with 16 double\-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
! for this extension.  Note that floating\-point is not supported by the
  base ARMv7\-M architecture, but is compatible with both the ARMv7\-A and
  ARMv7\-R architectures.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7\-a\fR 4
  .IX Item "armv7-a"
  .RS 4
  .PD 0
! .IP \fB+mp\fR 4
  .IX Item "+mp"
  .PD
  The multiprocessing extension.
! .IP \fB+sec\fR 4
  .IX Item "+sec"
  The security extension.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv3 floating\-point instructions, with 16 double\-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
  for this extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions.
  The extensions \fB+neon\fR and \fB+neon\-vfpv3\fR can be used as aliases
  for this extension.
! .IP \fB+vfpv3\fR 4
  .IX Item "+vfpv3"
! The VFPv3 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+vfpv3\-d16\-fp16\fR 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating\-point instructions, with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv3\-fp16\fR 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating\-point instructions, with 32 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv4\-d16\fR 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating\-point instructions, with 16 double\-precision
  registers.
! .IP \fB+vfpv4\fR 4
  .IX Item "+vfpv4"
! The VFPv4 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+neon\-fp16\fR 4
  .IX Item "+neon-fp16"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions, with
! the half\-precision floating\-point conversion operations.
! .IP \fB+neon\-vfpv4\fR 4
  .IX Item "+neon-vfpv4"
! The Advanced SIMD (Neon) v2 and the VFPv4 floating\-point instructions.
! .IP \fB+nosimd\fR 4
  .IX Item "+nosimd"
! Disable the Advanced SIMD instructions (does not disable floating point).
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point and Advanced SIMD instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7ve\fR 4
  .IX Item "armv7ve"
  The extended version of the ARMv7\-A architecture with support for
  virtualization.
  .RS 4
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv4 floating\-point instructions, with 16 double\-precision registers.
  The extension \fB+vfpv4\-d16\fR can be used as an alias for this extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The Advanced SIMD (Neon) v2 and the VFPv4 floating\-point instructions.  The
  extension \fB+neon\-vfpv4\fR can be used as an alias for this extension.
! .IP \fB+vfpv3\-d16\fR 4
  .IX Item "+vfpv3-d16"
! The VFPv3 floating\-point instructions, with 16 double\-precision
  registers.
! .IP \fB+vfpv3\fR 4
  .IX Item "+vfpv3"
! The VFPv3 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+vfpv3\-d16\-fp16\fR 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating\-point instructions, with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv3\-fp16\fR 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating\-point instructions, with 32 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv4\-d16\fR 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating\-point instructions, with 16 double\-precision
  registers.
! .IP \fB+vfpv4\fR 4
  .IX Item "+vfpv4"
! The VFPv4 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+neon\fR 4
  .IX Item "+neon"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions.
  The extension \fB+neon\-vfpv3\fR can be used as an alias for this extension.
! .IP \fB+neon\-fp16\fR 4
  .IX Item "+neon-fp16"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions, with
! the half\-precision floating\-point conversion operations.
! .IP \fB+nosimd\fR 4
  .IX Item "+nosimd"
! Disable the Advanced SIMD instructions (does not disable floating point).
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point and Advanced SIMD instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8\-a\fR 4
  .IX Item "armv8-a"
  .RS 4
  .PD 0
! .IP \fB+crc\fR 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (CRC) instructions.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.1\-a\fR 4
  .IX Item "armv8.1-a"
  .RS 4
  .PD 0
! .IP \fB+simd\fR 4
  .IX Item "+simd"
  .PD
! The ARMv8.1\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.2\-a\fR 4
  .IX Item "armv8.2-a"
  .PD 0
! .IP \fBarmv8.3\-a\fR 4
  .IX Item "armv8.3-a"
  .RS 4
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions.
! .IP \fB+fp16fml\fR 4
  .IX Item "+fp16fml"
! The half\-precision floating\-point fmla extension.  This also enables
! the half\-precision floating\-point extension and Advanced SIMD and
! floating\-point instructions.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.1\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions.
! .IP \fB+dotprod\fR 4
  .IX Item "+dotprod"
! Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.4\-a\fR 4
  .IX Item "armv8.4-a"
  .RS 4
  .PD 0
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions as well
! as the Dot Product extension and the half\-precision floating\-point fmla
  extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced SIMD and floating\-point instructions as well as the
  Dot Product extension.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions as well as the Dot Product extension.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.5\-a\fR 4
  .IX Item "armv8.5-a"
  .RS 4
  .PD 0
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions as well
! as the Dot Product extension and the half\-precision floating\-point fmla
  extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced SIMD and floating\-point instructions as well as the
  Dot Product extension.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions as well as the Dot Product extension.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.6\-a\fR 4
  .IX Item "armv8.6-a"
  .RS 4
  .PD 0
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions as well
! as the Dot Product extension and the half\-precision floating\-point fmla
  extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced SIMD and floating\-point instructions as well as the
  Dot Product extension.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions as well as the Dot Product extension.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7\-r\fR 4
  .IX Item "armv7-r"
  .RS 4
  .PD 0
! .IP \fB+fp.sp\fR 4
  .IX Item "+fp.sp"
  .PD
! The single\-precision VFPv3 floating\-point instructions.  The extension
  \&\fB+vfpv3xd\fR can be used as an alias for this extension.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv3 floating\-point instructions with 16 double\-precision registers.
  The extension +vfpv3\-d16 can be used as an alias for this extension.
! .IP \fB+vfpv3xd\-d16\-fp16\fR 4
  .IX Item "+vfpv3xd-d16-fp16"
! The single\-precision VFPv3 floating\-point instructions with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv3\-d16\-fp16\fR 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating\-point instructions with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extension.
! .IP \fB+idiv\fR 4
  .IX Item "+idiv"
! The ARM\-state integer division instructions.
! .IP \fB+noidiv\fR 4
  .IX Item "+noidiv"
! Disable the ARM\-state integer division extension.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7e\-m\fR 4
  .IX Item "armv7e-m"
  .RS 4
  .PD 0
! .IP \fB+fp\fR 4
  .IX Item "+fp"
  .PD
! The single\-precision VFPv4 floating\-point instructions.
! .IP \fB+fpv5\fR 4
  .IX Item "+fpv5"
! The single\-precision FPv5 floating\-point instructions.
! .IP \fB+fp.dp\fR 4
  .IX Item "+fp.dp"
! The single\- and double\-precision FPv5 floating\-point instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extensions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.1\-m.main\fR 4
  .IX Item "armv8.1-m.main"
  .RS 4
  .PD 0
! .IP \fB+dsp\fR 4
  .IX Item "+dsp"
  .PD
! The DSP instructions.
! .IP \fB+mve\fR 4
  .IX Item "+mve"
! The M\-Profile Vector Extension (MVE) integer instructions.
! .IP \fB+mve.fp\fR 4
  .IX Item "+mve.fp"
! The M\-Profile Vector Extension (MVE) integer and single precision
! floating\-point instructions.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The single\-precision floating\-point instructions.
! .IP \fB+fp.dp\fR 4
  .IX Item "+fp.dp"
! The single\- and double\-precision floating\-point instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (CDE) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
! .IP \fB+pacbti\fR 4
  .IX Item "+pacbti"
  Enable the Pointer Authentication and Branch Target Identification Extension.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8\-m.main\fR 4
  .IX Item "armv8-m.main"
  .RS 4
  .PD 0
! .IP \fB+dsp\fR 4
  .IX Item "+dsp"
  .PD
! The DSP instructions.
! .IP \fB+nodsp\fR 4
  .IX Item "+nodsp"
! Disable the DSP extension.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The single\-precision floating\-point instructions.
! .IP \fB+fp.dp\fR 4
  .IX Item "+fp.dp"
! The single\- and double\-precision floating\-point instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (CDE) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8\-r\fR 4
  .IX Item "armv8-r"
  .RS 4
  .PD 0
! .IP \fB+crc\fR 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (CRC) instructions.
! .IP \fB+fp.sp\fR 4
  .IX Item "+fp.sp"
! The single\-precision FPv5 floating\-point instructions.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .Sp
! \&\fB\-march=native\fR causes the compiler to auto\-detect the architecture
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto\-detect
  is unsuccessful the option has no effect.
  .RE
! .IP \fB\-mtune=\fR\fIname\fR 4
  .IX Item "-mtune=name"
! This option specifies the name of the target ARM processor for
! which GCC should tune the performance of the code.
! For some ARM implementations better performance can be obtained by using
  this option.
  Permissible names are: \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR, \fBarm710t\fR,
  \&\fBarm720t\fR, \fBarm740t\fR, \fBstrongarm\fR, \fBstrongarm110\fR,
*************** Permissible names are: \fBarm7tdmi\fR, \
*** 22635,22666 ****
  \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR, \fBstar\-mc1\fR,
  \&\fBxgene1\fR.
  .Sp
! Additionally, this option can specify that \s-1GCC\s0 should tune the performance
  of the code for a big.LITTLE system.  Permissible names are:
  \&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a17.cortex\-a7\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a72.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
  \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR.
  .Sp
! \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
  performance for a blend of processors within architecture \fIarch\fR.
  The aim is to generate code that run well on the current most popular
  processors, balancing between optimizations that benefit some CPUs in the
  range, and avoiding performance pitfalls of other CPUs.  The effects of
! this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
  .Sp
  \&\fB\-mtune\fR permits the same extension options as \fB\-mcpu\fR, but
  the extension options do not affect the tuning of the generated code.
  .Sp
! \&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto-detect is
  unsuccessful the option has no effect.
! .IP "\fB\-mcpu=\fR\fIname\fR[\fB+extension...\fR]" 4
  .IX Item "-mcpu=name[+extension...]"
! This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
! to derive the name of the target \s-1ARM\s0 architecture (as if specified
! by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
  performance (as if specified by \fB\-mtune\fR).  Where this option
  is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
  those options take precedence over the appropriate part of this option.
--- 22570,22601 ----
  \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR, \fBstar\-mc1\fR,
  \&\fBxgene1\fR.
  .Sp
! Additionally, this option can specify that GCC should tune the performance
  of the code for a big.LITTLE system.  Permissible names are:
  \&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a17.cortex\-a7\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a72.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
  \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR.
  .Sp
! \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that GCC should tune the
  performance for a blend of processors within architecture \fIarch\fR.
  The aim is to generate code that run well on the current most popular
  processors, balancing between optimizations that benefit some CPUs in the
  range, and avoiding performance pitfalls of other CPUs.  The effects of
! this option may change in future GCC versions as CPU models come and go.
  .Sp
  \&\fB\-mtune\fR permits the same extension options as \fB\-mcpu\fR, but
  the extension options do not affect the tuning of the generated code.
  .Sp
! \&\fB\-mtune=native\fR causes the compiler to auto\-detect the CPU
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto\-detect is
  unsuccessful the option has no effect.
! .IP \fB\-mcpu=\fR\fIname\fR[\fB+extension...\fR] 4
  .IX Item "-mcpu=name[+extension...]"
! This specifies the name of the target ARM processor.  GCC uses this name
! to derive the name of the target ARM architecture (as if specified
! by \fB\-march\fR) and the ARM processor type for which to tune for
  performance (as if specified by \fB\-mtune\fR).  Where this option
  is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
  those options take precedence over the appropriate part of this option.
*************** Many of the supported CPUs implement opt
*** 22669,22687 ****
  extensions.  Where this is so the architectural extensions are
  normally enabled by default.  If implementations that lack the
  extension exist, then the extension syntax can be used to disable
! those extensions that have been omitted.  For floating-point and
! Advanced \s-1SIMD\s0 (Neon) instructions, the settings of the options
  \&\fB\-mfloat\-abi\fR and \fB\-mfpu\fR must also be considered:
! floating-point and Advanced \s-1SIMD\s0 instructions will only be used if
  \&\fB\-mfloat\-abi\fR is not set to \fBsoft\fR; and any setting of
  \&\fB\-mfpu\fR other than \fBauto\fR will override the available
! floating-point and \s-1SIMD\s0 extension instructions.
  .Sp
  For example, \fBcortex\-a9\fR can be found in three major
! configurations: integer only, with just a floating-point unit or with
! floating-point and Advanced \s-1SIMD.\s0  The default is to enable all the
  instructions, but the extensions \fB+nosimd\fR and \fB+nofp\fR can
! be used to disable just the \s-1SIMD\s0 or both the \s-1SIMD\s0 and floating-point
  instructions respectively.
  .Sp
  Permissible names for this option are the same as those for
--- 22604,22622 ----
  extensions.  Where this is so the architectural extensions are
  normally enabled by default.  If implementations that lack the
  extension exist, then the extension syntax can be used to disable
! those extensions that have been omitted.  For floating\-point and
! Advanced SIMD (Neon) instructions, the settings of the options
  \&\fB\-mfloat\-abi\fR and \fB\-mfpu\fR must also be considered:
! floating\-point and Advanced SIMD instructions will only be used if
  \&\fB\-mfloat\-abi\fR is not set to \fBsoft\fR; and any setting of
  \&\fB\-mfpu\fR other than \fBauto\fR will override the available
! floating\-point and SIMD extension instructions.
  .Sp
  For example, \fBcortex\-a9\fR can be found in three major
! configurations: integer only, with just a floating\-point unit or with
! floating\-point and Advanced SIMD.  The default is to enable all the
  instructions, but the extensions \fB+nosimd\fR and \fB+nofp\fR can
! be used to disable just the SIMD or both the SIMD and floating\-point
  instructions respectively.
  .Sp
  Permissible names for this option are the same as those for
*************** Permissible names for this option are th
*** 22689,22742 ****
  .Sp
  The following extension options are common to the listed CPUs:
  .RS 4
! .IP "\fB+nodsp\fR" 4
  .IX Item "+nodsp"
! Disable the \s-1DSP\s0 instructions on \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Also disable the M\-Profile Vector Extension (\s-1MVE\s0) integer and
! single precision floating-point instructions on
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP "\fB+nopacbti\fR" 4
  .IX Item "+nopacbti"
  Disable the Pointer Authentication and Branch Target Identification Extension
  on \fBcortex\-m52\fR and \fBcortex\-m85\fR.
! .IP "\fB+nomve\fR" 4
  .IX Item "+nomve"
! Disable the M\-Profile Vector Extension (\s-1MVE\s0) integer and single precision
! floating-point instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP "\fB+nomve.fp\fR" 4
  .IX Item "+nomve.fp"
! Disable the M\-Profile Vector Extension (\s-1MVE\s0) single precision floating-point
  instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (\s-1CDE\s0) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7 on \fBcortex\-m52\fR and \fBcortex\-m55\fR.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disables the floating-point instructions on \fBarm9e\fR,
  \&\fBarm946e\-s\fR, \fBarm966e\-s\fR, \fBarm968e\-s\fR, \fBarm10e\fR,
  \&\fBarm1020e\fR, \fBarm1022e\fR, \fBarm926ej\-s\fR,
  \&\fBarm1026ej\-s\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR,
  \&\fBcortex\-m4\fR, \fBcortex\-m7\fR, \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Disables the floating-point and \s-1SIMD\s0 instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR,
  \&\fBcortex\-a8\fR, \fBcortex\-a9\fR, \fBcortex\-a12\fR,
  \&\fBcortex\-a15\fR, \fBcortex\-a17\fR, \fBcortex\-a15.cortex\-a7\fR,
  \&\fBcortex\-a17.cortex\-a7\fR, \fBcortex\-a32\fR, \fBcortex\-a35\fR,
  \&\fBcortex\-a53\fR and \fBcortex\-a55\fR.
! .IP "\fB+nofp.dp\fR" 4
  .IX Item "+nofp.dp"
! Disables the double-precision component of the floating-point instructions
  on \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR, \fBcortex\-r52\fR,
  \&\fBcortex\-r52plus\fR and \fBcortex\-m7\fR.
! .IP "\fB+nosimd\fR" 4
  .IX Item "+nosimd"
! Disables the \s-1SIMD\s0 (but not floating-point) instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR
  and \fBcortex\-a9\fR.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
  Enables the cryptographic instructions on \fBcortex\-a32\fR,
  \&\fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR, \fBcortex\-a57\fR,
--- 22624,22677 ----
  .Sp
  The following extension options are common to the listed CPUs:
  .RS 4
! .IP \fB+nodsp\fR 4
  .IX Item "+nodsp"
! Disable the DSP instructions on \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Also disable the M\-Profile Vector Extension (MVE) integer and
! single precision floating\-point instructions on
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP \fB+nopacbti\fR 4
  .IX Item "+nopacbti"
  Disable the Pointer Authentication and Branch Target Identification Extension
  on \fBcortex\-m52\fR and \fBcortex\-m85\fR.
! .IP \fB+nomve\fR 4
  .IX Item "+nomve"
! Disable the M\-Profile Vector Extension (MVE) integer and single precision
! floating\-point instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP \fB+nomve.fp\fR 4
  .IX Item "+nomve.fp"
! Disable the M\-Profile Vector Extension (MVE) single precision floating\-point
  instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (CDE) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7 on \fBcortex\-m52\fR and \fBcortex\-m55\fR.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disables the floating\-point instructions on \fBarm9e\fR,
  \&\fBarm946e\-s\fR, \fBarm966e\-s\fR, \fBarm968e\-s\fR, \fBarm10e\fR,
  \&\fBarm1020e\fR, \fBarm1022e\fR, \fBarm926ej\-s\fR,
  \&\fBarm1026ej\-s\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR,
  \&\fBcortex\-m4\fR, \fBcortex\-m7\fR, \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Disables the floating\-point and SIMD instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR,
  \&\fBcortex\-a8\fR, \fBcortex\-a9\fR, \fBcortex\-a12\fR,
  \&\fBcortex\-a15\fR, \fBcortex\-a17\fR, \fBcortex\-a15.cortex\-a7\fR,
  \&\fBcortex\-a17.cortex\-a7\fR, \fBcortex\-a32\fR, \fBcortex\-a35\fR,
  \&\fBcortex\-a53\fR and \fBcortex\-a55\fR.
! .IP \fB+nofp.dp\fR 4
  .IX Item "+nofp.dp"
! Disables the double\-precision component of the floating\-point instructions
  on \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR, \fBcortex\-r52\fR,
  \&\fBcortex\-r52plus\fR and \fBcortex\-m7\fR.
! .IP \fB+nosimd\fR 4
  .IX Item "+nosimd"
! Disables the SIMD (but not floating\-point) instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR
  and \fBcortex\-a9\fR.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
  Enables the cryptographic instructions on \fBcortex\-a32\fR,
  \&\fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR, \fBcortex\-a57\fR,
*************** Enables the cryptographic instructions o
*** 22748,22754 ****
  .RS 4
  .Sp
  Additionally the \fBgeneric\-armv7\-a\fR pseudo target defaults to
! VFPv3 with 16 double-precision registers.  It supports the following
  extension options: \fBmp\fR, \fBsec\fR, \fBvfpv3\-d16\fR,
  \&\fBvfpv3\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3\-fp16\fR,
  \&\fBvfpv4\-d16\fR, \fBvfpv4\fR, \fBneon\fR, \fBneon\-vfpv3\fR,
--- 22683,22689 ----
  .RS 4
  .Sp
  Additionally the \fBgeneric\-armv7\-a\fR pseudo target defaults to
! VFPv3 with 16 double\-precision registers.  It supports the following
  extension options: \fBmp\fR, \fBsec\fR, \fBvfpv3\-d16\fR,
  \&\fBvfpv3\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3\-fp16\fR,
  \&\fBvfpv4\-d16\fR, \fBvfpv4\fR, \fBneon\fR, \fBneon\-vfpv3\fR,
*************** the extensions to \fB\-march=armv7\-a\fR
*** 22759,22772 ****
  equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
  See \fB\-mtune\fR for more information.
  .Sp
! \&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto-detect
  is unsuccessful the option has no effect.
  .RE
! .IP "\fB\-mfpu=\fR\fIname\fR" 4
  .IX Item "-mfpu=name"
! This specifies what floating-point hardware (or hardware emulation) is
  available on the target.  Permissible names are: \fBauto\fR, \fBvfpv2\fR,
  \&\fBvfpv3\fR,
  \&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
--- 22694,22707 ----
  equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
  See \fB\-mtune\fR for more information.
  .Sp
! \&\fB\-mcpu=native\fR causes the compiler to auto\-detect the CPU
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto\-detect
  is unsuccessful the option has no effect.
  .RE
! .IP \fB\-mfpu=\fR\fIname\fR 4
  .IX Item "-mfpu=name"
! This specifies what floating\-point hardware (or hardware emulation) is
  available on the target.  Permissible names are: \fBauto\fR, \fBvfpv2\fR,
  \&\fBvfpv3\fR,
  \&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
*************** Note that \fBneon\fR is an alias for \fB
*** 22778,22808 ****
  is an alias for \fBvfpv2\fR.
  .Sp
  The setting \fBauto\fR is the default and is special.  It causes the
! compiler to select the floating-point and Advanced \s-1SIMD\s0 instructions
  based on the settings of \fB\-mcpu\fR and \fB\-march\fR.
  .Sp
! If the selected floating-point hardware includes the \s-1NEON\s0 extension
! (e.g. \fB\-mfpu=neon\fR), note that floating-point
! operations are not generated by \s-1GCC\s0's auto-vectorization pass unless
  \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
! because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE 754\s0 standard for
! floating-point arithmetic (in particular denormal values are treated as
! zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
  .Sp
! You can also set the fpu name at function level by using the \f(CW\*(C`target("fpu=")\*(C'\fR function attributes or pragmas.
! .IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
  .IX Item "-mfp16-format=name"
! Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
  Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
  the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
  defined.
! .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
  .IX Item "-mstructure-size-boundary=n"
  The sizes of all structures and unions are rounded up to a multiple
  of the number of bits set by this option.  Permissible values are 8, 32
! and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
  targeted toolchain the default value is 8.  A value of 64 is only allowed
! if the underlying \s-1ABI\s0 supports it.
  .Sp
  Specifying a larger number can produce faster, more efficient code, but
  can also increase the size of the program.  Different values are potentially
--- 22713,22743 ----
  is an alias for \fBvfpv2\fR.
  .Sp
  The setting \fBauto\fR is the default and is special.  It causes the
! compiler to select the floating\-point and Advanced SIMD instructions
  based on the settings of \fB\-mcpu\fR and \fB\-march\fR.
  .Sp
! If the selected floating\-point hardware includes the NEON extension
! (e.g. \fB\-mfpu=neon\fR), note that floating\-point
! operations are not generated by GCC\*(Aqs auto\-vectorization pass unless
  \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
! because NEON hardware does not fully implement the IEEE 754 standard for
! floating\-point arithmetic (in particular denormal values are treated as
! zero), so the use of NEON instructions may lead to a loss of precision.
  .Sp
! You can also set the fpu name at function level by using the \f(CWtarget("fpu=")\fR function attributes or pragmas.
! .IP \fB\-mfp16\-format=\fR\fIname\fR 4
  .IX Item "-mfp16-format=name"
! Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half\-precision floating\-point type.
  Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
  the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
  defined.
! .IP \fB\-mstructure\-size\-boundary=\fR\fIn\fR 4
  .IX Item "-mstructure-size-boundary=n"
  The sizes of all structures and unions are rounded up to a multiple
  of the number of bits set by this option.  Permissible values are 8, 32
! and 64.  The default value varies for different toolchains.  For the COFF
  targeted toolchain the default value is 8.  A value of 64 is only allowed
! if the underlying ABI supports it.
  .Sp
  Specifying a larger number can produce faster, more efficient code, but
  can also increase the size of the program.  Different values are potentially
*************** work with code or libraries compiled wit
*** 22811,22831 ****
  information using structures or unions.
  .Sp
  This option is deprecated.
! .IP "\fB\-mabort\-on\-noreturn\fR" 4
  .IX Item "-mabort-on-noreturn"
  Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
  \&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
  return.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 64\-megabyte addressing range of the offset-based
  version of subroutine call instruction.
  .Sp
  Even if this switch is enabled, not all function calls are turned
--- 22746,22766 ----
  information using structures or unions.
  .Sp
  This option is deprecated.
! .IP \fB\-mabort\-on\-noreturn\fR 4
  .IX Item "-mabort-on-noreturn"
  Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
  \&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
  return.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 64\-megabyte addressing range of the offset\-based
  version of subroutine call instruction.
  .Sp
  Even if this switch is enabled, not all function calls are turned
*************** placing the function calls within the sc
*** 22845,22872 ****
  long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
  the compiler generates code to handle function calls via function
  pointers.
! .IP "\fB\-msingle\-pic\-base\fR" 4
  .IX Item "-msingle-pic-base"
! Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
  .IX Item "-mpic-register=reg"
! Specify the register to be used for \s-1PIC\s0 addressing.
! For standard \s-1PIC\s0 base case, the default is any suitable register
! determined by compiler.  For single \s-1PIC\s0 base case, the default is
! \&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
  otherwise the default is \fBR10\fR.
! .IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
! at static link time.  This permits using PC-relative addressing
  operations to access data known to be in the data segment.  For
! non-VxWorks \s-1RTP\s0 targets, this option is enabled by default.  When
  disabled on such targets, it will enable \fB\-msingle\-pic\-base\fR by
  default.
! .IP "\fB\-mpoke\-function\-name\fR" 4
  .IX Item "-mpoke-function-name"
  Write the name of each function into the text section, directly
  preceding the function prologue.  The generated code is similar to this:
--- 22780,22807 ----
  long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
  the compiler generates code to handle function calls via function
  pointers.
! .IP \fB\-msingle\-pic\-base\fR 4
  .IX Item "-msingle-pic-base"
! Treat the register used for PIC addressing as read\-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP \fB\-mpic\-register=\fR\fIreg\fR 4
  .IX Item "-mpic-register=reg"
! Specify the register to be used for PIC addressing.
! For standard PIC base case, the default is any suitable register
! determined by compiler.  For single PIC base case, the default is
! \&\fBR9\fR if target is EABI based or stack\-checking is enabled,
  otherwise the default is \fBR10\fR.
! .IP \fB\-mpic\-data\-is\-text\-relative\fR 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
! at static link time.  This permits using PC\-relative addressing
  operations to access data known to be in the data segment.  For
! non\-VxWorks RTP targets, this option is enabled by default.  When
  disabled on such targets, it will enable \fB\-msingle\-pic\-base\fR by
  default.
! .IP \fB\-mpoke\-function\-name\fR 4
  .IX Item "-mpoke-function-name"
  Write the name of each function into the text section, directly
  preceding the function prologue.  The generated code is similar to this:
*************** When performing a stack backtrace, code
*** 22888,22989 ****
  location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
  there is a function name embedded immediately preceding this location
  and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
! .IP "\fB\-mthumb\fR" 4
  .IX Item "-mthumb"
  .PD 0
! .IP "\fB\-marm\fR" 4
  .IX Item "-marm"
  .PD
! Select between generating code that executes in \s-1ARM\s0 and Thumb
  states.  The default for most configurations is to generate code
! that executes in \s-1ARM\s0 state, but the default can be changed by
! configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
  configure option.
  .Sp
! You can also override the \s-1ARM\s0 and Thumb mode for each function
! by using the \f(CW\*(C`target("thumb")\*(C'\fR and \f(CW\*(C`target("arm")\*(C'\fR function attributes or pragmas.
! .IP "\fB\-mflip\-thumb\fR" 4
  .IX Item "-mflip-thumb"
  Switch ARM/Thumb modes on alternating functions.
  This option is provided for regression testing of mixed Thumb/ARM code
  generation, and is not intended for ordinary use in compiling code.
! .IP "\fB\-mtpcs\-frame\fR" 4
  .IX Item "-mtpcs-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
! Standard for all non-leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
! .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
  .IX Item "-mtpcs-leaf-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
  Standard for all leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
! .IP "\fB\-mcallee\-super\-interworking\fR" 4
  .IX Item "-mcallee-super-interworking"
! Gives all externally visible functions in the file being compiled an \s-1ARM\s0
  instruction set header which switches to Thumb mode before executing the
  rest of the function.  This allows these functions to be called from
! non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
  because interworking is enabled by default.
! .IP "\fB\-mcaller\-super\-interworking\fR" 4
  .IX Item "-mcaller-super-interworking"
  Allows calls via function pointers (including virtual functions) to
  execute correctly regardless of whether the target code has been
  compiled for interworking or not.  There is a small overhead in the cost
  of executing a function pointer if this option is enabled.  This option
! is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
  by default.
! .IP "\fB\-mtp=\fR\fIname\fR" 4
  .IX Item "-mtp=name"
  Specify the access model for the thread local storage pointer.  The model
  \&\fBsoft\fR generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR.  Other accepted
  models are \fBtpidrurw\fR, \fBtpidruro\fR and \fBtpidrprw\fR which fetch
  the thread pointer from the corresponding system register directly
  (supported from the arm6k architecture and later).  These system registers
! are accessed through the \s-1CP15\s0 co-processor interface and the argument
  \&\fBcp15\fR is also accepted as a convenience alias of \fBtpidruro\fR.
  The argument \fBauto\fR uses the best available method for the selected
  processor.  The default setting is \fBauto\fR.
! .IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
  .IX Item "-mtls-dialect=dialect"
  Specify the dialect to use for accessing thread local storage.  Two
  \&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
! \&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
! local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
! selects the \s-1GNU\s0 descriptor scheme, which provides better performance
! for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
  the original scheme, but does require new assembler, linker and
! library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
  this option and always use the original scheme.
! .IP "\fB\-mword\-relocations\fR" 4
  .IX Item "-mword-relocations"
! Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
  This is enabled by default on targets (uClinux, SymbianOS) where the runtime
  loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
  is specified. This option conflicts with \fB\-mslow\-flash\-data\fR.
! .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
  .IX Item "-mfix-cortex-m3-ldrd"
  Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
  with overlapping destination and base registers are used.  This option avoids
  generating these instructions.  This option is enabled by default when
  \&\fB\-mcpu=cortex\-m3\fR is specified.
! .IP "\fB\-mfix\-cortex\-a57\-aes\-1742098\fR" 4
  .IX Item "-mfix-cortex-a57-aes-1742098"
  .PD 0
! .IP "\fB\-mno\-fix\-cortex\-a57\-aes\-1742098\fR" 4
  .IX Item "-mno-fix-cortex-a57-aes-1742098"
! .IP "\fB\-mfix\-cortex\-a72\-aes\-1655431\fR" 4
  .IX Item "-mfix-cortex-a72-aes-1655431"
! .IP "\fB\-mno\-fix\-cortex\-a72\-aes\-1655431\fR" 4
  .IX Item "-mno-fix-cortex-a72-aes-1655431"
  .PD
  Enable (disable) mitigation for an erratum on Cortex\-A57 and
! Cortex\-A72 that affects the \s-1AES\s0 cryptographic instructions.  This
  option is enabled by default when either \fB\-mcpu=cortex\-a57\fR or
  \&\fB\-mcpu=cortex\-a72\fR is specified.
! .IP "\fB\-munaligned\-access\fR" 4
  .IX Item "-munaligned-access"
  .PD 0
! .IP "\fB\-mno\-unaligned\-access\fR" 4
  .IX Item "-mno-unaligned-access"
  .PD
  Enables (or disables) reading and writing of 16\- and 32\- bit values
--- 22823,22924 ----
  location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
  there is a function name embedded immediately preceding this location
  and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
! .IP \fB\-mthumb\fR 4
  .IX Item "-mthumb"
  .PD 0
! .IP \fB\-marm\fR 4
  .IX Item "-marm"
  .PD
! Select between generating code that executes in ARM and Thumb
  states.  The default for most configurations is to generate code
! that executes in ARM state, but the default can be changed by
! configuring GCC with the \fB\-\-with\-mode=\fR\fIstate\fR
  configure option.
  .Sp
! You can also override the ARM and Thumb mode for each function
! by using the \f(CWtarget("thumb")\fR and \f(CWtarget("arm")\fR function attributes or pragmas.
! .IP \fB\-mflip\-thumb\fR 4
  .IX Item "-mflip-thumb"
  Switch ARM/Thumb modes on alternating functions.
  This option is provided for regression testing of mixed Thumb/ARM code
  generation, and is not intended for ordinary use in compiling code.
! .IP \fB\-mtpcs\-frame\fR 4
  .IX Item "-mtpcs-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
! Standard for all non\-leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
! .IP \fB\-mtpcs\-leaf\-frame\fR 4
  .IX Item "-mtpcs-leaf-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
  Standard for all leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
! .IP \fB\-mcallee\-super\-interworking\fR 4
  .IX Item "-mcallee-super-interworking"
! Gives all externally visible functions in the file being compiled an ARM
  instruction set header which switches to Thumb mode before executing the
  rest of the function.  This allows these functions to be called from
! non\-interworking code.  This option is not valid in AAPCS configurations
  because interworking is enabled by default.
! .IP \fB\-mcaller\-super\-interworking\fR 4
  .IX Item "-mcaller-super-interworking"
  Allows calls via function pointers (including virtual functions) to
  execute correctly regardless of whether the target code has been
  compiled for interworking or not.  There is a small overhead in the cost
  of executing a function pointer if this option is enabled.  This option
! is not valid in AAPCS configurations because interworking is enabled
  by default.
! .IP \fB\-mtp=\fR\fIname\fR 4
  .IX Item "-mtp=name"
  Specify the access model for the thread local storage pointer.  The model
  \&\fBsoft\fR generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR.  Other accepted
  models are \fBtpidrurw\fR, \fBtpidruro\fR and \fBtpidrprw\fR which fetch
  the thread pointer from the corresponding system register directly
  (supported from the arm6k architecture and later).  These system registers
! are accessed through the CP15 co\-processor interface and the argument
  \&\fBcp15\fR is also accepted as a convenience alias of \fBtpidruro\fR.
  The argument \fBauto\fR uses the best available method for the selected
  processor.  The default setting is \fBauto\fR.
! .IP \fB\-mtls\-dialect=\fR\fIdialect\fR 4
  .IX Item "-mtls-dialect=dialect"
  Specify the dialect to use for accessing thread local storage.  Two
  \&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
! \&\fBgnu\fR dialect selects the original GNU scheme for supporting
! local and global dynamic TLS models.  The \fBgnu2\fR dialect
! selects the GNU descriptor scheme, which provides better performance
! for shared libraries.  The GNU descriptor scheme is compatible with
  the original scheme, but does require new assembler, linker and
! library support.  Initial and local exec TLS models are unaffected by
  this option and always use the original scheme.
! .IP \fB\-mword\-relocations\fR 4
  .IX Item "-mword-relocations"
! Only generate absolute relocations on word\-sized values (i.e. R_ARM_ABS32).
  This is enabled by default on targets (uClinux, SymbianOS) where the runtime
  loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
  is specified. This option conflicts with \fB\-mslow\-flash\-data\fR.
! .IP \fB\-mfix\-cortex\-m3\-ldrd\fR 4
  .IX Item "-mfix-cortex-m3-ldrd"
  Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
  with overlapping destination and base registers are used.  This option avoids
  generating these instructions.  This option is enabled by default when
  \&\fB\-mcpu=cortex\-m3\fR is specified.
! .IP \fB\-mfix\-cortex\-a57\-aes\-1742098\fR 4
  .IX Item "-mfix-cortex-a57-aes-1742098"
  .PD 0
! .IP \fB\-mno\-fix\-cortex\-a57\-aes\-1742098\fR 4
  .IX Item "-mno-fix-cortex-a57-aes-1742098"
! .IP \fB\-mfix\-cortex\-a72\-aes\-1655431\fR 4
  .IX Item "-mfix-cortex-a72-aes-1655431"
! .IP \fB\-mno\-fix\-cortex\-a72\-aes\-1655431\fR 4
  .IX Item "-mno-fix-cortex-a72-aes-1655431"
  .PD
  Enable (disable) mitigation for an erratum on Cortex\-A57 and
! Cortex\-A72 that affects the AES cryptographic instructions.  This
  option is enabled by default when either \fB\-mcpu=cortex\-a57\fR or
  \&\fB\-mcpu=cortex\-a72\fR is specified.
! .IP \fB\-munaligned\-access\fR 4
  .IX Item "-munaligned-access"
  .PD 0
! .IP \fB\-mno\-unaligned\-access\fR 4
  .IX Item "-mno-unaligned-access"
  .PD
  Enables (or disables) reading and writing of 16\- and 32\- bit values
*************** ARMv8\-M Baseline architectures, and ena
*** 22993,23085 ****
  architectures.  If unaligned access is not enabled then words in packed
  data structures are accessed a byte at a time.
  .Sp
! The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
  generated object file to either true or false, depending upon the
  setting of this option.  If unaligned access is enabled then the
  preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
  defined.
! .IP "\fB\-mneon\-for\-64bits\fR" 4
  .IX Item "-mneon-for-64bits"
  This option is deprecated and has no effect.
! .IP "\fB\-mslow\-flash\-data\fR" 4
  .IX Item "-mslow-flash-data"
  Assume loading data from flash is slower than fetching instruction.
  Therefore literal load is minimized for better performance.
  This option is only supported when compiling for ARMv7 M\-profile and
  off by default. It conflicts with \fB\-mword\-relocations\fR.
! .IP "\fB\-masm\-syntax\-unified\fR" 4
  .IX Item "-masm-syntax-unified"
  Assume inline assembler is using unified asm syntax.  The default is
  currently off which implies divided syntax.  This option has no impact
! on Thumb2. However, this may change in future releases of \s-1GCC.\s0
  Divided syntax should be considered deprecated.
! .IP "\fB\-mrestrict\-it\fR" 4
  .IX Item "-mrestrict-it"
! Restricts generation of \s-1IT\s0 blocks to conform to the rules of ARMv8\-A.
! \&\s-1IT\s0 blocks can only contain a single 16\-bit instruction from a select
  set of instructions. This option is on by default for ARMv8\-A Thumb mode.
! .IP "\fB\-mprint\-tune\-info\fR" 4
  .IX Item "-mprint-tune-info"
! Print \s-1CPU\s0 tuning information as comment in assembler file.  This is
  an option used only for regression testing of the compiler and not
  intended for ordinary use in compiling code.  This option is disabled
  by default.
! .IP "\fB\-mverbose\-cost\-dump\fR" 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP "\fB\-mpure\-code\fR" 4
  .IX Item "-mpure-code"
  Do not allow constant data to be placed in code sections.
! Additionally, when compiling for \s-1ELF\s0 object format give all text sections the
! \&\s-1ELF\s0 processor-specific section attribute \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR.  This option
! is only available when generating non-pic code for M\-profile targets.
! .IP "\fB\-mcmse\fR" 4
  .IX Item "-mcmse"
! Generate secure code as per the \*(L"ARMv8\-M Security Extensions: Requirements on
! Development Tools Engineering Specification\*(R", which can be found on
  <\fBhttps://developer.arm.com/documentation/ecm0359818/latest/\fR>.
! .IP "\fB\-mfix\-cmse\-cve\-2021\-35465\fR" 4
  .IX Item "-mfix-cmse-cve-2021-35465"
  Mitigate against a potential security issue with the \f(CW\*(C`VLLDM\*(C'\fR instruction
! in some M\-profile devices when using \s-1CMSE\s0 (\s-1CVE\-2021\-365465\s0).  This option is
  enabled by default when the option \fB\-mcpu=\fR is used with
  \&\f(CW\*(C`cortex\-m33\*(C'\fR, \f(CW\*(C`cortex\-m35p\*(C'\fR, \f(CW\*(C`cortex\-m52\*(C'\fR, \f(CW\*(C`cortex\-m55\*(C'\fR,
  \&\f(CW\*(C`cortex\-m85\*(C'\fR or \f(CW\*(C`star\-mc1\*(C'\fR. The option \fB\-mno\-fix\-cmse\-cve\-2021\-35465\fR
  can be used to disable the mitigation.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
  locations are \fBglobal\fR for a global canary or \fBtls\fR for a
! canary accessible via the \s-1TLS\s0 register. The option
  \&\fB\-mstack\-protector\-guard\-offset=\fR is for use with
! \&\fB\-fstack\-protector\-guard=tls\fR and not for use in user-land code.
! .IP "\fB\-mfdpic\fR" 4
  .IX Item "-mfdpic"
  .PD 0
! .IP "\fB\-mno\-fdpic\fR" 4
  .IX Item "-mno-fdpic"
  .PD
! Select the \s-1FDPIC ABI,\s0 which uses 64\-bit function descriptors to
  represent pointers to functions.  When the compiler is configured for
  \&\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR targets, this option is on by default
  and implies \fB\-fPIE\fR if none of the PIC/PIE\-related options is
! provided.  On other targets, it only enables the FDPIC-specific code
  generation features, and the user should explicitly provide the
  PIC/PIE\-related options as needed.
  .Sp
  Note that static linking is not supported because it would still
! involve the dynamic linker when the program self-relocates.  If such
  behavior is acceptable, use \-static and \-Wl,\-dynamic\-linker options.
  .Sp
  The opposite \fB\-mno\-fdpic\fR option is useful (and required) to
  build the Linux kernel using the same (\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR)
  toolchain as the one used to build the userland programs.
! .IP "\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB][+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR" 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf][+bti]|bti[+pac-ret[+leaf]]"
  Enable branch protection features (armv8.1\-m.main only).
  \&\fBnone\fR generate code without branch protection or return address
--- 22928,23020 ----
  architectures.  If unaligned access is not enabled then words in packed
  data structures are accessed a byte at a time.
  .Sp
! The ARM attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
  generated object file to either true or false, depending upon the
  setting of this option.  If unaligned access is enabled then the
  preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
  defined.
! .IP \fB\-mneon\-for\-64bits\fR 4
  .IX Item "-mneon-for-64bits"
  This option is deprecated and has no effect.
! .IP \fB\-mslow\-flash\-data\fR 4
  .IX Item "-mslow-flash-data"
  Assume loading data from flash is slower than fetching instruction.
  Therefore literal load is minimized for better performance.
  This option is only supported when compiling for ARMv7 M\-profile and
  off by default. It conflicts with \fB\-mword\-relocations\fR.
! .IP \fB\-masm\-syntax\-unified\fR 4
  .IX Item "-masm-syntax-unified"
  Assume inline assembler is using unified asm syntax.  The default is
  currently off which implies divided syntax.  This option has no impact
! on Thumb2. However, this may change in future releases of GCC.
  Divided syntax should be considered deprecated.
! .IP \fB\-mrestrict\-it\fR 4
  .IX Item "-mrestrict-it"
! Restricts generation of IT blocks to conform to the rules of ARMv8\-A.
! IT blocks can only contain a single 16\-bit instruction from a select
  set of instructions. This option is on by default for ARMv8\-A Thumb mode.
! .IP \fB\-mprint\-tune\-info\fR 4
  .IX Item "-mprint-tune-info"
! Print CPU tuning information as comment in assembler file.  This is
  an option used only for regression testing of the compiler and not
  intended for ordinary use in compiling code.  This option is disabled
  by default.
! .IP \fB\-mverbose\-cost\-dump\fR 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP \fB\-mpure\-code\fR 4
  .IX Item "-mpure-code"
  Do not allow constant data to be placed in code sections.
! Additionally, when compiling for ELF object format give all text sections the
! ELF processor\-specific section attribute \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR.  This option
! is only available when generating non\-pic code for M\-profile targets.
! .IP \fB\-mcmse\fR 4
  .IX Item "-mcmse"
! Generate secure code as per the "ARMv8\-M Security Extensions: Requirements on
! Development Tools Engineering Specification", which can be found on
  <\fBhttps://developer.arm.com/documentation/ecm0359818/latest/\fR>.
! .IP \fB\-mfix\-cmse\-cve\-2021\-35465\fR 4
  .IX Item "-mfix-cmse-cve-2021-35465"
  Mitigate against a potential security issue with the \f(CW\*(C`VLLDM\*(C'\fR instruction
! in some M\-profile devices when using CMSE (CVE\-2021\-365465).  This option is
  enabled by default when the option \fB\-mcpu=\fR is used with
  \&\f(CW\*(C`cortex\-m33\*(C'\fR, \f(CW\*(C`cortex\-m35p\*(C'\fR, \f(CW\*(C`cortex\-m52\*(C'\fR, \f(CW\*(C`cortex\-m55\*(C'\fR,
  \&\f(CW\*(C`cortex\-m85\*(C'\fR or \f(CW\*(C`star\-mc1\*(C'\fR. The option \fB\-mno\-fix\-cmse\-cve\-2021\-35465\fR
  can be used to disable the mitigation.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
  locations are \fBglobal\fR for a global canary or \fBtls\fR for a
! canary accessible via the TLS register. The option
  \&\fB\-mstack\-protector\-guard\-offset=\fR is for use with
! \&\fB\-fstack\-protector\-guard=tls\fR and not for use in user\-land code.
! .IP \fB\-mfdpic\fR 4
  .IX Item "-mfdpic"
  .PD 0
! .IP \fB\-mno\-fdpic\fR 4
  .IX Item "-mno-fdpic"
  .PD
! Select the FDPIC ABI, which uses 64\-bit function descriptors to
  represent pointers to functions.  When the compiler is configured for
  \&\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR targets, this option is on by default
  and implies \fB\-fPIE\fR if none of the PIC/PIE\-related options is
! provided.  On other targets, it only enables the FDPIC\-specific code
  generation features, and the user should explicitly provide the
  PIC/PIE\-related options as needed.
  .Sp
  Note that static linking is not supported because it would still
! involve the dynamic linker when the program self\-relocates.  If such
  behavior is acceptable, use \-static and \-Wl,\-dynamic\-linker options.
  .Sp
  The opposite \fB\-mno\-fdpic\fR option is useful (and required) to
  build the Linux kernel using the same (\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR)
  toolchain as the one used to build the userland programs.
! .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB][+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf][+bti]|bti[+pac-ret[+leaf]]"
  Enable branch protection features (armv8.1\-m.main only).
  \&\fBnone\fR generate code without branch protection or return address
*************** set to its standard level, which is to s
*** 23091,23108 ****
  the return address to memory.
  \&\fBleaf\fR When return address signing is enabled, also sign leaf
  functions even if they do not write the return address to memory.
! +\fBbti\fR Add landing-pad instructions at the permitted targets of
  indirect branch instructions.
  .Sp
  If the \fB+pacbti\fR architecture extension is not enabled, then all
  branch protection and return address signing operations are
  constrained to use only the instructions defined in the
! architectural-NOP space. The generated code will remain
! backwards-compatible with earlier versions of the architecture, but
  the additional security can be enabled at run time on processors that
! support the \fB\s-1PACBTI\s0\fR extension.
  .Sp
! Branch target enforcement using \s-1BTI\s0 can only be enabled at runtime if
  all code in the application has been compiled with at least
  \&\fB\-mbranch\-protection=bti\fR.
  .Sp
--- 23026,23043 ----
  the return address to memory.
  \&\fBleaf\fR When return address signing is enabled, also sign leaf
  functions even if they do not write the return address to memory.
! +\fBbti\fR Add landing\-pad instructions at the permitted targets of
  indirect branch instructions.
  .Sp
  If the \fB+pacbti\fR architecture extension is not enabled, then all
  branch protection and return address signing operations are
  constrained to use only the instructions defined in the
! architectural\-NOP space. The generated code will remain
! backwards\-compatible with earlier versions of the architecture, but
  the additional security can be enabled at run time on processors that
! support the \fBPACBTI\fR extension.
  .Sp
! Branch target enforcement using BTI can only be enabled at runtime if
  all code in the application has been compiled with at least
  \&\fB\-mbranch\-protection=bti\fR.
  .Sp
*************** or later.
*** 23112,23232 ****
  The default is to generate code without branch protection or return
  address signing.
  .PP
! \fI\s-1AVR\s0 Options\fR
  .IX Subsection "AVR Options"
  .PP
! These options are defined for \s-1AVR\s0 implementations:
! .IP "\fB\-mmcu=\fR\fImcu\fR" 4
  .IX Item "-mmcu=mcu"
! Specify the \s-1AVR\s0 instruction set architecture (\s-1ISA\s0) or device type.
  The default for this option is \f(CW\*(C`avr2\*(C'\fR.
  .Sp
! The following \s-1AVR\s0 devices and ISAs are supported.
  \&\fINote:\fR A complete device support consists of
! startup code \f(CW\*(C`crt\f(CImcu\f(CW.o\*(C'\fR, a device header \f(CW\*(C`avr/io*.h\*(C'\fR,
! a device library \f(CW\*(C`lib\f(CImcu\f(CW.a\*(C'\fR and a
! device-specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) file
! \&\f(CW\*(C`specs\-\f(CImcu\f(CW\*(C'\fR. Only the latter is provided by the compiler
! according the supported \f(CW\*(C`\f(CImcu\f(CW\*(C'\fRs below.  The rest is supported
! by AVR-LibC (\f(CW\*(C`https://www.nongnu.org/avr\-libc/\*(C'\fR), or by means of
  \&\f(CW\*(C`atpack\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#atpack\*(C'\fR) files
  from the hardware manufacturer.
  .RS 4
  .ie n .IP """avr2""" 4
! .el .IP "\f(CWavr2\fR" 4
  .IX Item "avr2"
! \&\*(L"Classic\*(R" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
  .ie n .IP """avr25""" 4
! .el .IP "\f(CWavr25\fR" 4
  .IX Item "avr25"
! \&\*(L"Classic\*(R" devices with up to 8 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
  .ie n .IP """avr3""" 4
! .el .IP "\f(CWavr3\fR" 4
  .IX Item "avr3"
! \&\*(L"Classic\*(R" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`at76c711\*(C'\fR, \f(CW\*(C`at43usb355\*(C'\fR.
  .ie n .IP """avr31""" 4
! .el .IP "\f(CWavr31\fR" 4
  .IX Item "avr31"
! \&\*(L"Classic\*(R" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
  .ie n .IP """avr35""" 4
! .el .IP "\f(CWavr35\fR" 4
  .IX Item "avr35"
! \&\*(L"Classic\*(R" devices with 16 KiB up to 64 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR.
  .ie n .IP """avr4""" 4
! .el .IP "\f(CWavr4\fR" 4
  .IX Item "avr4"
! \&\*(L"Enhanced\*(R" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
  .ie n .IP """avr5""" 4
! .el .IP "\f(CWavr5\fR" 4
  .IX Item "avr5"
! \&\*(L"Enhanced\*(R" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega324pb\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`ata5787\*(C'\fR, \f(CW\*(C`ata5835\*(C'\fR, \f(CW\*(C`ata5700m322\*(C'\fR, \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
  .ie n .IP """avr51""" 4
! .el .IP "\f(CWavr51\fR" 4
  .IX Item "avr51"
! \&\*(L"Enhanced\*(R" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
  .ie n .IP """avr6""" 4
! .el .IP "\f(CWavr6\fR" 4
  .IX Item "avr6"
! \&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC,\s0 i.e. with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR.
  .ie n .IP """avrxmega2""" 4
! .el .IP "\f(CWavrxmega2\fR" 4
  .IX Item "avrxmega2"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
! .el .IP "\f(CWavrxmega3\fR" 4
  .IX Item "avrxmega3"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64 KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
! .el .IP "\f(CWavrxmega4\fR" 4
  .IX Item "avrxmega4"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 64 KiB and up to 128 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR, \f(CW\*(C`avr128da28\*(C'\fR, \f(CW\*(C`avr128da32\*(C'\fR, \f(CW\*(C`avr128da48\*(C'\fR, \f(CW\*(C`avr128da64\*(C'\fR, \f(CW\*(C`avr128db28\*(C'\fR, \f(CW\*(C`avr128db32\*(C'\fR, \f(CW\*(C`avr128db48\*(C'\fR, \f(CW\*(C`avr128db64\*(C'\fR.
  .ie n .IP """avrxmega5""" 4
! .el .IP "\f(CWavrxmega5\fR" 4
  .IX Item "avrxmega5"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 64 KiB and up to 128 KiB of program memory and more than 64 KiB of \s-1RAM.\s0
  \&\fImcu\fR = \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
  .ie n .IP """avrxmega6""" 4
! .el .IP "\f(CWavrxmega6\fR" 4
  .IX Item "avrxmega6"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR.
  .ie n .IP """avrxmega7""" 4
! .el .IP "\f(CWavrxmega7\fR" 4
  .IX Item "avrxmega7"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 128 KiB of program memory and more than 64 KiB of \s-1RAM.\s0
  \&\fImcu\fR = \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
  .ie n .IP """avrtiny""" 4
! .el .IP "\f(CWavrtiny\fR" 4
  .IX Item "avrtiny"
! \&\*(L"Reduced Tiny\*(R" Tiny core devices with only 16 general purpose registers and 512 B up to 4 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR, \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny102\*(C'\fR, \f(CW\*(C`attiny104\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR.
  .ie n .IP """avr1""" 4
! .el .IP "\f(CWavr1\fR" 4
  .IX Item "avr1"
! This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for assembler only.
  \&\fImcu\fR = \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mabsdata\fR" 4
  .IX Item "-mabsdata"
! Assume that all data in static storage can be accessed by \s-1LDS / STS\s0
  instructions.  This option has only an effect on reduced Tiny devices like
  ATtiny40.  See also the \f(CW\*(C`absdata\*(C'\fR
! \&\fB\s-1AVR\s0 Variable Attributes,variable attribute\fR.
! .IP "\fB\-maccumulate\-args\fR" 4
  .IX Item "-maccumulate-args"
  Accumulate outgoing function arguments and acquire/release the needed
  stack space for outgoing function arguments once in function
--- 23047,23167 ----
  The default is to generate code without branch protection or return
  address signing.
  .PP
! \fIAVR Options\fR
  .IX Subsection "AVR Options"
  .PP
! These options are defined for AVR implementations:
! .IP \fB\-mmcu=\fR\fImcu\fR 4
  .IX Item "-mmcu=mcu"
! Specify the AVR instruction set architecture (ISA) or device type.
  The default for this option is \f(CW\*(C`avr2\*(C'\fR.
  .Sp
! The following AVR devices and ISAs are supported.
  \&\fINote:\fR A complete device support consists of
! startup code \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW.o\*(C'\fR, a device header \f(CW\*(C`avr/io*.h\*(C'\fR,
! a device library \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR and a
! device\-specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) file
! \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR. Only the latter is provided by the compiler
! according the supported \f(CW\*(C`\fR\f(CImcu\fR\f(CW\*(C'\fRs below.  The rest is supported
! by AVR\-LibC (\f(CW\*(C`https://www.nongnu.org/avr\-libc/\*(C'\fR), or by means of
  \&\f(CW\*(C`atpack\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#atpack\*(C'\fR) files
  from the hardware manufacturer.
  .RS 4
  .ie n .IP """avr2""" 4
! .el .IP \f(CWavr2\fR 4
  .IX Item "avr2"
! "Classic" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
  .ie n .IP """avr25""" 4
! .el .IP \f(CWavr25\fR 4
  .IX Item "avr25"
! "Classic" devices with up to 8 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
  .ie n .IP """avr3""" 4
! .el .IP \f(CWavr3\fR 4
  .IX Item "avr3"
! "Classic" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`at76c711\*(C'\fR, \f(CW\*(C`at43usb355\*(C'\fR.
  .ie n .IP """avr31""" 4
! .el .IP \f(CWavr31\fR 4
  .IX Item "avr31"
! "Classic" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
  .ie n .IP """avr35""" 4
! .el .IP \f(CWavr35\fR 4
  .IX Item "avr35"
! "Classic" devices with 16 KiB up to 64 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR.
  .ie n .IP """avr4""" 4
! .el .IP \f(CWavr4\fR 4
  .IX Item "avr4"
! "Enhanced" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
  .ie n .IP """avr5""" 4
! .el .IP \f(CWavr5\fR 4
  .IX Item "avr5"
! "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega324pb\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`ata5787\*(C'\fR, \f(CW\*(C`ata5835\*(C'\fR, \f(CW\*(C`ata5700m322\*(C'\fR, \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
  .ie n .IP """avr51""" 4
! .el .IP \f(CWavr51\fR 4
  .IX Item "avr51"
! "Enhanced" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
  .ie n .IP """avr6""" 4
! .el .IP \f(CWavr6\fR 4
  .IX Item "avr6"
! "Enhanced" devices with 3\-byte PC, i.e. with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR.
  .ie n .IP """avrxmega2""" 4
! .el .IP \f(CWavrxmega2\fR 4
  .IX Item "avrxmega2"
! "XMEGA" devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da28s\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da32s\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da48s\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64da64s\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
! .el .IP \f(CWavrxmega3\fR 4
  .IX Item "avrxmega3"
! "XMEGA" devices with up to 64 KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr16la14\*(C'\fR, \f(CW\*(C`avr16la20\*(C'\fR, \f(CW\*(C`avr16la28\*(C'\fR, \f(CW\*(C`avr16la32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da28s\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da32s\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32da48s\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32eb14\*(C'\fR, \f(CW\*(C`avr32eb20\*(C'\fR, \f(CW\*(C`avr32eb28\*(C'\fR, \f(CW\*(C`avr32eb32\*(C'\fR, \f(CW\*(C`avr32la14\*(C'\fR, \f(CW\*(C`avr32la20\*(C'\fR, \f(CW\*(C`avr32la28\*(C'\fR, \f(CW\*(C`avr32la32\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
! .el .IP \f(CWavrxmega4\fR 4
  .IX Item "avrxmega4"
! "XMEGA" devices with more than 64 KiB and up to 128 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR, \f(CW\*(C`avr128da28\*(C'\fR, \f(CW\*(C`avr128da28s\*(C'\fR, \f(CW\*(C`avr128da32\*(C'\fR, \f(CW\*(C`avr128da32s\*(C'\fR, \f(CW\*(C`avr128da48\*(C'\fR, \f(CW\*(C`avr128da48s\*(C'\fR, \f(CW\*(C`avr128da64\*(C'\fR, \f(CW\*(C`avr128da64s\*(C'\fR, \f(CW\*(C`avr128db28\*(C'\fR, \f(CW\*(C`avr128db32\*(C'\fR, \f(CW\*(C`avr128db48\*(C'\fR, \f(CW\*(C`avr128db64\*(C'\fR.
  .ie n .IP """avrxmega5""" 4
! .el .IP \f(CWavrxmega5\fR 4
  .IX Item "avrxmega5"
! "XMEGA" devices with more than 64 KiB and up to 128 KiB of program memory and more than 64 KiB of RAM.
  \&\fImcu\fR = \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
  .ie n .IP """avrxmega6""" 4
! .el .IP \f(CWavrxmega6\fR 4
  .IX Item "avrxmega6"
! "XMEGA" devices with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR.
  .ie n .IP """avrxmega7""" 4
! .el .IP \f(CWavrxmega7\fR 4
  .IX Item "avrxmega7"
! "XMEGA" devices with more than 128 KiB of program memory and more than 64 KiB of RAM.
  \&\fImcu\fR = \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
  .ie n .IP """avrtiny""" 4
! .el .IP \f(CWavrtiny\fR 4
  .IX Item "avrtiny"
! "Reduced Tiny" Tiny core devices with only 16 general purpose registers and 512 B up to 4 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR, \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny102\*(C'\fR, \f(CW\*(C`attiny104\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR.
  .ie n .IP """avr1""" 4
! .el .IP \f(CWavr1\fR 4
  .IX Item "avr1"
! This ISA is implemented by the minimal AVR core and supported for assembler only.
  \&\fImcu\fR = \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-mabsdata\fR 4
  .IX Item "-mabsdata"
! Assume that all data in static storage can be accessed by LDS / STS
  instructions.  This option has only an effect on reduced Tiny devices like
  ATtiny40.  See also the \f(CW\*(C`absdata\*(C'\fR
! \&\fBAVR Variable Attributes,variable attribute\fR.
! .IP \fB\-maccumulate\-args\fR 4
  .IX Item "-maccumulate-args"
  Accumulate outgoing function arguments and acquire/release the needed
  stack space for outgoing function arguments once in function
*************** prologue/epilogue.  Without this option,
*** 23234,23271 ****
  before calling a function and popped afterwards.
  .Sp
  Popping the arguments after the function call can be expensive on
! \&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
  executables because arguments need not be removed from the
  stack after such a function call.
  .Sp
  This option can lead to reduced code size for functions that perform
  several calls to functions that get their arguments on the stack like
! calls to printf-like functions.
! .IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
  .IX Item "-mbranch-cost=cost"
  Set the branch costs for conditional branch instructions to
! \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
  integers. The default branch cost is 0.
! .IP "\fB\-mcall\-prologues\fR" 4
  .IX Item "-mcall-prologues"
  Functions prologues/epilogues are expanded as calls to appropriate
  subroutines.  Code size is smaller.
! .IP "\fB\-mfuse\-add\fR" 4
  .IX Item "-mfuse-add"
  .PD 0
! .IP "\fB\-mno\-fuse\-add\fR" 4
  .IX Item "-mno-fuse-add"
! .IP "\fB\-mfuse\-add=\fR\fIlevel\fR" 4
  .IX Item "-mfuse-add=level"
  .PD
  Optimize indirect memory accesses on reduced Tiny devices.
! The default uses \f(CW\*(C`\f(CIlevel\f(CW=1\*(C'\fR for optimizations \fB\-Og\fR
! and \fB\-O1\fR, and \f(CW\*(C`\f(CIlevel\f(CW=2\*(C'\fR for higher optimizations.
  Valid values for \fIlevel\fR are \f(CW0\fR, \f(CW1\fR and \f(CW2\fR.
! .IP "\fB\-mdouble=\fR\fIbits\fR" 4
  .IX Item "-mdouble=bits"
  .PD 0
! .IP "\fB\-mlong\-double=\fR\fIbits\fR" 4
  .IX Item "-mlong-double=bits"
  .PD
  Set the size (in bits) of the \f(CW\*(C`double\*(C'\fR or \f(CW\*(C`long double\*(C'\fR type,
--- 23169,23206 ----
  before calling a function and popped afterwards.
  .Sp
  Popping the arguments after the function call can be expensive on
! AVR so that accumulating the stack space might lead to smaller
  executables because arguments need not be removed from the
  stack after such a function call.
  .Sp
  This option can lead to reduced code size for functions that perform
  several calls to functions that get their arguments on the stack like
! calls to printf\-like functions.
! .IP \fB\-mbranch\-cost=\fR\fIcost\fR 4
  .IX Item "-mbranch-cost=cost"
  Set the branch costs for conditional branch instructions to
! \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non\-negative
  integers. The default branch cost is 0.
! .IP \fB\-mcall\-prologues\fR 4
  .IX Item "-mcall-prologues"
  Functions prologues/epilogues are expanded as calls to appropriate
  subroutines.  Code size is smaller.
! .IP \fB\-mfuse\-add\fR 4
  .IX Item "-mfuse-add"
  .PD 0
! .IP \fB\-mno\-fuse\-add\fR 4
  .IX Item "-mno-fuse-add"
! .IP \fB\-mfuse\-add=\fR\fIlevel\fR 4
  .IX Item "-mfuse-add=level"
  .PD
  Optimize indirect memory accesses on reduced Tiny devices.
! The default uses \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=1\*(C'\fR for optimizations \fB\-Og\fR
! and \fB\-O1\fR, and \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=2\*(C'\fR for higher optimizations.
  Valid values for \fIlevel\fR are \f(CW0\fR, \f(CW1\fR and \f(CW2\fR.
! .IP \fB\-mdouble=\fR\fIbits\fR 4
  .IX Item "-mdouble=bits"
  .PD 0
! .IP \fB\-mlong\-double=\fR\fIbits\fR 4
  .IX Item "-mlong-double=bits"
  .PD
  Set the size (in bits) of the \f(CW\*(C`double\*(C'\fR or \f(CW\*(C`long double\*(C'\fR type,
*************** Whether or not a specific value for \fIb
*** 23274,23311 ****
  the \f(CW\*(C`\-\-with\-double=\*(C'\fR and \f(CW\*(C`\-\-with\-long\-double=\*(C'\fR
  configure\ options (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR),
  and the same applies for the default values of the options.
! .IP "\fB\-mgas\-isr\-prologues\fR" 4
  .IX Item "-mgas-isr-prologues"
  Interrupt service routines (ISRs) may use the \f(CW\*(C`_\|_gcc_isr\*(C'\fR pseudo
! instruction supported by \s-1GNU\s0 Binutils.
  If this option is on, the feature can still be disabled for individual
! ISRs by means of the \fB\s-1AVR\s0 Function Attributes,,\f(CB\*(C`no_gccisr\*(C'\fB\fR
  function attribute.  This feature is activated per default
  if optimization is on (but not with \fB\-Og\fR, \f(CW@pxref\fR{Optimize Options}),
! and if \s-1GNU\s0 Binutils support \s-1PR21683\s0 (\f(CW\*(C`https://sourceware.org/PR21683\*(C'\fR).
! .IP "\fB\-mint8\fR" 4
  .IX Item "-mint8"
  Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
  \&\f(CW\*(C`char\*(C'\fR is 1 byte, an \f(CW\*(C`int\*(C'\fR is 1 byte, a \f(CW\*(C`long\*(C'\fR is 2 bytes,
  and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
  conform to the C standards, but it results in smaller code
  size.
! .IP "\fB\-mmain\-is\-OS_task\fR" 4
  .IX Item "-mmain-is-OS_task"
  Do not save registers in \f(CW\*(C`main\*(C'\fR.  The effect is the same like
! attaching attribute \fB\s-1AVR\s0 Function Attributes,,\f(CB\*(C`OS_task\*(C'\fB\fR
  to \f(CW\*(C`main\*(C'\fR. It is activated per default if optimization is on.
! .IP "\fB\-mno\-interrupts\fR" 4
  .IX Item "-mno-interrupts"
  Generated code is not compatible with hardware interrupts.
  Code size is smaller.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
  \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
  Setting \fB\-mrelax\fR just adds the \fB\-\-mlink\-relax\fR option to
! the assembler's command line and the \fB\-\-relax\fR option to the
! linker's command line.
  .Sp
  Jump relaxing is performed by the linker because jump offsets are not
  known before code is located. Therefore, the assembler code generated by the
--- 23209,23246 ----
  the \f(CW\*(C`\-\-with\-double=\*(C'\fR and \f(CW\*(C`\-\-with\-long\-double=\*(C'\fR
  configure\ options (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR),
  and the same applies for the default values of the options.
! .IP \fB\-mgas\-isr\-prologues\fR 4
  .IX Item "-mgas-isr-prologues"
  Interrupt service routines (ISRs) may use the \f(CW\*(C`_\|_gcc_isr\*(C'\fR pseudo
! instruction supported by GNU Binutils.
  If this option is on, the feature can still be disabled for individual
! ISRs by means of the \fBAVR Function Attributes,,\fR\f(CB\*(C`no_gccisr\*(C'\fR
  function attribute.  This feature is activated per default
  if optimization is on (but not with \fB\-Og\fR, \f(CW@pxref\fR{Optimize Options}),
! and if GNU Binutils support PR21683 (\f(CW\*(C`https://sourceware.org/PR21683\*(C'\fR).
! .IP \fB\-mint8\fR 4
  .IX Item "-mint8"
  Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
  \&\f(CW\*(C`char\*(C'\fR is 1 byte, an \f(CW\*(C`int\*(C'\fR is 1 byte, a \f(CW\*(C`long\*(C'\fR is 2 bytes,
  and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
  conform to the C standards, but it results in smaller code
  size.
! .IP \fB\-mmain\-is\-OS_task\fR 4
  .IX Item "-mmain-is-OS_task"
  Do not save registers in \f(CW\*(C`main\*(C'\fR.  The effect is the same like
! attaching attribute \fBAVR Function Attributes,,\fR\f(CB\*(C`OS_task\*(C'\fR
  to \f(CW\*(C`main\*(C'\fR. It is activated per default if optimization is on.
! .IP \fB\-mno\-interrupts\fR 4
  .IX Item "-mno-interrupts"
  Generated code is not compatible with hardware interrupts.
  Code size is smaller.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
  \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
  Setting \fB\-mrelax\fR just adds the \fB\-\-mlink\-relax\fR option to
! the assembler\*(Aqs command line and the \fB\-\-relax\fR option to the
! linker\*(Aqs command line.
  .Sp
  Jump relaxing is performed by the linker because jump offsets are not
  known before code is located. Therefore, the assembler code generated by the
*************** differ from instructions in the assemble
*** 23314,23346 ****
  .Sp
  Relaxing must be turned on if linker stubs are needed, see the
  section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
! .IP "\fB\-mrodata\-in\-ram\fR" 4
  .IX Item "-mrodata-in-ram"
  .PD 0
! .IP "\fB\-mno\-rodata\-in\-ram\fR" 4
  .IX Item "-mno-rodata-in-ram"
  .PD
! Locate the \f(CW\*(C`.rodata\*(C'\fR sections for read-only data in \s-1RAM\s0 resp.
  in program memory.
  For most devices, there is no choice and this option acts rather
  like an assertion.
  .Sp
  Since v14 and for the AVR64* and AVR128* devices, \f(CW\*(C`.rodata\*(C'\fR
! is located in flash memory per default, provided the required \s-1GNU\s0 Binutils
! support (\s-1PR31124\s0 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR)) is available.
  In that case, \fB\-mrodata\-in\-ram\fR can be used to return to the old
! layout with \f(CW\*(C`.rodata\*(C'\fR in \s-1RAM.\s0
! .IP "\fB\-mstrict\-X\fR" 4
  .IX Item "-mstrict-X"
  Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
! that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
! pre-decrement addressing.
  .Sp
  Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
  as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
  instructions.  
  For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
! small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
  performed as
  .Sp
  .Vb 3
--- 23249,23281 ----
  .Sp
  Relaxing must be turned on if linker stubs are needed, see the
  section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
! .IP \fB\-mrodata\-in\-ram\fR 4
  .IX Item "-mrodata-in-ram"
  .PD 0
! .IP \fB\-mno\-rodata\-in\-ram\fR 4
  .IX Item "-mno-rodata-in-ram"
  .PD
! Locate the \f(CW\*(C`.rodata\*(C'\fR sections for read\-only data in RAM resp.
  in program memory.
  For most devices, there is no choice and this option acts rather
  like an assertion.
  .Sp
  Since v14 and for the AVR64* and AVR128* devices, \f(CW\*(C`.rodata\*(C'\fR
! is located in flash memory per default, provided the required GNU Binutils
! support (PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR)) is available.
  In that case, \fB\-mrodata\-in\-ram\fR can be used to return to the old
! layout with \f(CW\*(C`.rodata\*(C'\fR in RAM.
! .IP \fB\-mstrict\-X\fR 4
  .IX Item "-mstrict-X"
  Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
! that \f(CW\*(C`X\*(C'\fR is only used in indirect, post\-increment or
! pre\-decrement addressing.
  .Sp
  Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
  as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
  instructions.  
  For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
! small non\-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
  performed as
  .Sp
  .Vb 3
*************** performed as
*** 23348,23382 ****
  \&        ld   <Rn>, X        ; <Rn> = *X
  \&        sbiw r26, const   ; X \-= const
  .Ve
! .IP "\fB\-mtiny\-stack\fR" 4
  .IX Item "-mtiny-stack"
  Only change the lower 8 bits of the stack pointer.
! .IP "\fB\-mfract\-convert\-truncate\fR" 4
  .IX Item "-mfract-convert-truncate"
! Allow to use truncation instead of rounding towards zero for fractional fixed-point types.
! .IP "\fB\-nodevicelib\fR" 4
  .IX Item "-nodevicelib"
! Don't link against AVR-LibC's device specific library \f(CW\*(C`lib<mcu>.a\*(C'\fR.
! .IP "\fB\-nodevicespecs\fR" 4
  .IX Item "-nodevicespecs"
! Don't add \fB\-specs=device\-specs/specs\-\fR\fImcu\fR to the compiler driver's
! command line.  The user takes responsibility for supplying the sub-processes
  like compiler proper, assembler and linker with appropriate command line
  options.  This means that the user has to supply her private device specs
! file by means of \fB\-specs=\fR\fIpath-to-specs-file\fR.  There is no
  more need for option \fB\-mmcu=\fR\fImcu\fR.
  .Sp
  This option can also serve as a replacement for the older way of
! specifying custom device-specs files that needed \fB\-B\fR \fIsome-path\fR to point to a directory
  which contains a folder named \f(CW\*(C`device\-specs\*(C'\fR which contains a specs file named
! \&\f(CW\*(C`specs\-\f(CImcu\f(CW\*(C'\fR, where \fImcu\fR was specified by \fB\-mmcu=\fR\fImcu\fR.
! .IP "\fB\-Waddr\-space\-convert\fR" 4
  .IX Item "-Waddr-space-convert"
  Warn about conversions between address spaces in the case where the
  resulting address space is not contained in the incoming address space.
! .IP "\fB\-Wmisspelled\-isr\fR" 4
  .IX Item "-Wmisspelled-isr"
! Warn if the \s-1ISR\s0 is misspelled, i.e. without _\|_vector prefix.
  Enabled by default.
  .PP
  \f(CW\*(C`EIND\*(C'\fR and Devices with More Than 128 Ki Bytes of Flash
--- 23283,23317 ----
  \&        ld   <Rn>, X        ; <Rn> = *X
  \&        sbiw r26, const   ; X \-= const
  .Ve
! .IP \fB\-mtiny\-stack\fR 4
  .IX Item "-mtiny-stack"
  Only change the lower 8 bits of the stack pointer.
! .IP \fB\-mfract\-convert\-truncate\fR 4
  .IX Item "-mfract-convert-truncate"
! Allow to use truncation instead of rounding towards zero for fractional fixed\-point types.
! .IP \fB\-nodevicelib\fR 4
  .IX Item "-nodevicelib"
! Don\*(Aqt link against AVR\-LibC\*(Aqs device specific library \f(CW\*(C`lib<mcu>.a\*(C'\fR.
! .IP \fB\-nodevicespecs\fR 4
  .IX Item "-nodevicespecs"
! Don\*(Aqt add \fB\-specs=device\-specs/specs\-\fR\fImcu\fR to the compiler driver\*(Aqs
! command line.  The user takes responsibility for supplying the sub\-processes
  like compiler proper, assembler and linker with appropriate command line
  options.  This means that the user has to supply her private device specs
! file by means of \fB\-specs=\fR\fIpath\-to\-specs\-file\fR.  There is no
  more need for option \fB\-mmcu=\fR\fImcu\fR.
  .Sp
  This option can also serve as a replacement for the older way of
! specifying custom device\-specs files that needed \fB\-B\fR \fIsome\-path\fR to point to a directory
  which contains a folder named \f(CW\*(C`device\-specs\*(C'\fR which contains a specs file named
! \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR, where \fImcu\fR was specified by \fB\-mmcu=\fR\fImcu\fR.
! .IP \fB\-Waddr\-space\-convert\fR 4
  .IX Item "-Waddr-space-convert"
  Warn about conversions between address spaces in the case where the
  resulting address space is not contained in the incoming address space.
! .IP \fB\-Wmisspelled\-isr\fR 4
  .IX Item "-Wmisspelled-isr"
! Warn if the ISR is misspelled, i.e. without _\|_vector prefix.
  Enabled by default.
  .PP
  \f(CW\*(C`EIND\*(C'\fR and Devices with More Than 128 Ki Bytes of Flash
*************** when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*
*** 23394,23438 ****
  .PP
  Indirect jumps and calls on these devices are handled as follows by
  the compiler and are subject to some limitations:
! .IP "*" 4
  The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
! .IP "*" 4
  The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitly in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
  instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
  indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
! .IP "*" 4
  The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
  code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
  saved/restored in function or interrupt service routine
  prologue/epilogue.
! .IP "*" 4
  For indirect calls to functions and computed goto, the linker
  generates \fIstubs\fR. Stubs are jump pads sometimes also called
  \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
  The stub contains a direct jump to the desired address.
! .IP "*" 4
  Linker relaxation must be turned on so that the linker generates
  the stubs correctly in all situations. See the compiler option
  \&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
  There are corner cases where the linker is supposed to generate stubs
  but aborts without relaxation and without a helpful error message.
! .IP "*" 4
  The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
  If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
  linker script has to be used in order to place the sections whose
  name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
  points to.
! .IP "*" 4
  The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
! Notice that startup code is a blend of code from libgcc and AVR-LibC.
! For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
! AVR-LibC\ user\ manual (\f(CW\*(C`https://www.nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
! .IP "*" 4
! It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
  early, for example by means of initialization code located in
  section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
! that initializes \s-1RAM\s0 and calls constructors, but after the bit
! of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
  where the vector table is located.
  .Sp
  .Vb 1
--- 23329,23373 ----
  .PP
  Indirect jumps and calls on these devices are handled as follows by
  the compiler and are subject to some limitations:
! .IP * 4
  The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
! .IP * 4
  The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitly in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
  instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
  indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
! .IP * 4
  The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
  code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
  saved/restored in function or interrupt service routine
  prologue/epilogue.
! .IP * 4
  For indirect calls to functions and computed goto, the linker
  generates \fIstubs\fR. Stubs are jump pads sometimes also called
  \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
  The stub contains a direct jump to the desired address.
! .IP * 4
  Linker relaxation must be turned on so that the linker generates
  the stubs correctly in all situations. See the compiler option
  \&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
  There are corner cases where the linker is supposed to generate stubs
  but aborts without relaxation and without a helpful error message.
! .IP * 4
  The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
  If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
  linker script has to be used in order to place the sections whose
  name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
  points to.
! .IP * 4
  The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
! Notice that startup code is a blend of code from libgcc and AVR\-LibC.
! For the impact of AVR\-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
! AVR\-LibC\ user\ manual (\f(CW\*(C`https://www.nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
! .IP * 4
! It is legitimate for user\-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
  early, for example by means of initialization code located in
  section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
! that initializes RAM and calls constructors, but after the bit
! of startup code from AVR\-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
  where the vector table is located.
  .Sp
  .Vb 1
*************** where the vector table is located.
*** 23448,23454 ****
  .Ve
  .Sp
  The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
! .IP "*" 4
  Stubs are generated automatically by the linker if
  the following two conditions are met:
  .RS 4
--- 23383,23389 ----
  .Ve
  .Sp
  The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
! .IP * 4
  Stubs are generated automatically by the linker if
  the following two conditions are met:
  .RS 4
*************** the following two conditions are met:
*** 23467,23473 ****
  .RE
  .RS 4
  .RE
! .IP "*" 4
  The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
  following situations:
  .RS 4
--- 23402,23408 ----
  .RE
  .RS 4
  .RE
! .IP * 4
  The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
  following situations:
  .RS 4
*************** following situations:
*** 23476,23500 ****
  .PD 0
  .IP "\-<Computed goto.>" 4
  .IX Item "-<Computed goto.>"
! .IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
  .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
  .PD
! command-line option.
  .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
  .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
! tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
! .IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
! .IX Item "-<C and constructors/destructors called during startup/shutdown.>"
  .PD 0
! .ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
  .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
  .IX Item "-<If the tools hit a gs() modifier explained above.>"
  .RE
  .RS 4
  .RE
! .IP "*" 4
! .PD
! Jumping to non-symbolic addresses like so is \fInot\fR supported:
  .Sp
  .Vb 5
  \&        int main (void)
--- 23411,23435 ----
  .PD 0
  .IP "\-<Computed goto.>" 4
  .IX Item "-<Computed goto.>"
! .IP "\-<If prologue\-save function is used, see \fB\-mcall\-prologues\fR>" 4
  .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
  .PD
! command\-line option.
  .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
  .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
! tables you can specify the \fB\-fno\-jump\-tables\fR command\-line option.
! .IP "\-<C and C++ constructors/destructors called during startup/shutdown.>" 4
! .IX Item "-<C and C++ constructors/destructors called during startup/shutdown.>"
  .PD 0
! .ie n .IP "\-<If the tools hit a gs() modifier explained above.>" 4
  .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
  .IX Item "-<If the tools hit a gs() modifier explained above.>"
+ .PD
  .RE
  .RS 4
  .RE
! .IP * 4
! Jumping to non\-symbolic addresses like so is \fInot\fR supported:
  .Sp
  .Vb 5
  \&        int main (void)
*************** Alternatively, \f(CW\*(C`func_4\*(C'\fR
*** 23523,23529 ****
  Handling of the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR and \f(CW\*(C`RAMPZ\*(C'\fR Special Function Registers
  .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
  .PP
! Some \s-1AVR\s0 devices support memories larger than the 64 KiB range
  that can be accessed with 16\-bit pointers.  To access memory locations
  outside this 64 KiB range, the content of a \f(CW\*(C`RAMP\*(C'\fR
  register is used as high part of the address:
--- 23458,23464 ----
  Handling of the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR and \f(CW\*(C`RAMPZ\*(C'\fR Special Function Registers
  .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
  .PP
! Some AVR devices support memories larger than the 64 KiB range
  that can be accessed with 16\-bit pointers.  To access memory locations
  outside this 64 KiB range, the content of a \f(CW\*(C`RAMP\*(C'\fR
  register is used as high part of the address:
*************** The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C
*** 23531,23571 ****
  with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
  register, respectively, to get a wide address. Similarly,
  \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
! .IP "*" 4
  The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
  registers with zero.
! .IP "*" 4
! If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
  generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
  as needed before the operation.
! .IP "*" 4
! If the device supports \s-1RAM\s0 larger than 64 KiB and the compiler
  needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
  is reset to zero after the operation.
! .IP "*" 4
! If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
! prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
! zero in case the \s-1ISR\s0 code might (implicitly) use it.
! .IP "*" 4
! \&\s-1RAM\s0 larger than 64 KiB is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
  If you use inline assembler to read from locations outside the
  16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
  you must reset it to zero after the access.
  .PP
! \s-1AVR\s0 Built-in Macros
  .IX Subsection "AVR Built-in Macros"
  .PP
! \&\s-1GCC\s0 defines several built-in macros so that the user code can test
  for the presence or absence of features.  Almost any of the following
! built-in macros are deduced from device capabilities and thus
! triggered by the \fB\-mmcu=\fR command-line option.
  .PP
! For even more AVR-specific built-in macros see
! \&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
  .ie n .IP """_\|_AVR_ARCH_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ARCH_\|_\fR" 4
  .IX Item "__AVR_ARCH__"
! Build-in macro that resolves to a decimal number that identifies the
  architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
  Possible values are:
  .Sp
--- 23466,23506 ----
  with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
  register, respectively, to get a wide address. Similarly,
  \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
! .IP * 4
  The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
  registers with zero.
! .IP * 4
! If a \fBAVR Named Address Spaces,named address space\fR other than
  generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
  as needed before the operation.
! .IP * 4
! If the device supports RAM larger than 64 KiB and the compiler
  needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
  is reset to zero after the operation.
! .IP * 4
! If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the ISR
! prologue/epilogue saves/restores that SFR and initializes it with
! zero in case the ISR code might (implicitly) use it.
! .IP * 4
! RAM larger than 64 KiB is not supported by GCC for AVR targets.
  If you use inline assembler to read from locations outside the
  16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
  you must reset it to zero after the access.
  .PP
! AVR Built\-in Macros
  .IX Subsection "AVR Built-in Macros"
  .PP
! GCC defines several built\-in macros so that the user code can test
  for the presence or absence of features.  Almost any of the following
! built\-in macros are deduced from device capabilities and thus
! triggered by the \fB\-mmcu=\fR command\-line option.
  .PP
! For even more AVR\-specific built\-in macros see
! \&\fBAVR Named Address Spaces\fR and \fBAVR Built\-in Functions\fR.
  .ie n .IP """_\|_AVR_ARCH_\|_""" 4
! .el .IP \f(CW_\|_AVR_ARCH_\|_\fR 4
  .IX Item "__AVR_ARCH__"
! Build\-in macro that resolves to a decimal number that identifies the
  architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
  Possible values are:
  .Sp
*************** respectively and
*** 23584,23760 ****
  for \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR,
  \&\f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega3\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR,
  \&\f(CW\*(C`avrxmega5\*(C'\fR, \f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
! If \fImcu\fR specifies a device, this built-in macro is set
  accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
  defined to \f(CW4\fR.
! .ie n .IP """_\|_AVR_\fIDevice\fP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
  .IX Item "__AVR_Device__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro which reflects
! the device's name. For example, \fB\-mmcu=atmega8\fR defines the
! built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
  \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
  .Sp
! The built-in macros' names follow
! the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
! the device name as from the \s-1AVR\s0 user manual. The difference between
! \&\fIDevice\fR in the built-in macro and \fIdevice\fR in
  \&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
! .el .IP "\f(CW_\|_AVR_DEVICE_NAME_\|_\fR" 4
  .IX Item "__AVR_DEVICE_NAME__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro to
! the device's name. For example, with \fB\-mmcu=atmega8\fR the macro
  is defined to \f(CW\*(C`atmega8\*(C'\fR.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
! .el .IP "\f(CW_\|_AVR_XMEGA_\|_\fR" 4
  .IX Item "__AVR_XMEGA__"
! The device / architecture belongs to the \s-1XMEGA\s0 family of devices.
  .ie n .IP """_\|_AVR_HAVE_ADIW_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_ADIW_\|_\fR" 4
  .IX Item "__AVR_HAVE_ADIW__"
  The device has the \f(CW\*(C`ADIW\*(C'\fR and \f(CW\*(C`SBIW\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
  .IX Item "__AVR_HAVE_ELPM__"
  The device has the \f(CW\*(C`ELPM\*(C'\fR instruction.
  .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
  .IX Item "__AVR_HAVE_ELPMX__"
! The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
! R\f(CIn\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
  .IX Item "__AVR_HAVE_LPMX__"
! The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
! \&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
  .IX Item "__AVR_HAVE_MOVW__"
  The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
! register-register moves.
  .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
  .IX Item "__AVR_HAVE_MUL__"
  The device has a hardware multiplier.
  .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
  .IX Item "__AVR_HAVE_JMP_CALL__"
  The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
  This is the case for devices with more than 8 KiB of program
  memory.
  .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
  .IX Item "__AVR_HAVE_EIJMP_EICALL__"
  .PD 0
  .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
! .el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
  .IX Item "__AVR_3_BYTE_PC__"
  .PD
  The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
  This is the case for devices with more than 128 KiB of program memory.
  This also means that the program counter
! (\s-1PC\s0) is 3 bytes wide.
  .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
! .el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
  .IX Item "__AVR_2_BYTE_PC__"
! The program counter (\s-1PC\s0) is 2 bytes wide. This is the case for devices
  with up to 128 KiB of program memory.
  .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
  .IX Item "__AVR_HAVE_8BIT_SP__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
  .IX Item "__AVR_HAVE_16BIT_SP__"
  .PD
! The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
  16\-bit register by the compiler.
  The definition of these macros is affected by \fB\-mtiny\-stack\fR.
  .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
  .IX Item "__AVR_HAVE_SPH__"
  .PD 0
  .ie n .IP """_\|_AVR_SP8_\|_""" 4
! .el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
  .IX Item "__AVR_SP8__"
  .PD
! The device has the \s-1SPH\s0 (high part of stack pointer) special function
  register or has an 8\-bit stack pointer, respectively.
  The definition of these macros is affected by \fB\-mmcu=\fR and
  in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
  by \fB\-msp8\fR.
  .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPD__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPX__"
  .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPY__"
  .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPZ__"
  .PD
  The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
  \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
  .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
! .el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
  .IX Item "__NO_INTERRUPTS__"
! This macro reflects the \fB\-mno\-interrupts\fR command-line option.
  .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
  .IX Item "__AVR_ERRATA_SKIP__"
  .PD 0
  .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
  .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
  .PD
! Some \s-1AVR\s0 devices (\s-1AT90S8515,\s0 ATmega103) must not skip 32\-bit
  instructions because of a hardware erratum.  Skip instructions are
  \&\f(CW\*(C`SBRS\*(C'\fR, \f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR and \f(CW\*(C`CPSE\*(C'\fR.
  The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
  set.
  .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ISA_RMW_\|_\fR" 4
  .IX Item "__AVR_ISA_RMW__"
! The device has Read-Modify-Write instructions (\s-1XCH, LAC, LAS\s0 and \s-1LAT\s0).
! .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fP""" 4
! .el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
  .IX Item "__AVR_SFR_OFFSET__=offset"
  Instructions that can address I/O special function registers directly
  like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
! address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
  or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
! to be subtracted from the \s-1RAM\s0 address in order to get the
  respective I/O address.
  .ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4
! .el .IP "\f(CW_\|_AVR_SHORT_CALLS_\|_\fR" 4
  .IX Item "__AVR_SHORT_CALLS__"
  The \fB\-mshort\-calls\fR command line option is set.
! .ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fP""" 4
! .el .IP "\f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\f(CIaddr\f(CW\fR" 4
  .IX Item "__AVR_PM_BASE_ADDRESS__=addr"
  Some devices support reading from flash memory by means of \f(CW\*(C`LD*\*(C'\fR
  instructions.  The flash memory is seen in the data address space
  at an offset of \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR.  If this macro
  is not defined, this feature is not available.  If defined,
  the address space is linear and there is no need to put
! \&\f(CW\*(C`.rodata\*(C'\fR into \s-1RAM.\s0  This is handled by the default linker
  description file, and is currently available for
  \&\f(CW\*(C`avrtiny\*(C'\fR and \f(CW\*(C`avrxmega3\*(C'\fR.  Even more convenient,
  there is no need to use address spaces like \f(CW\*(C`_\|_flash\*(C'\fR or
  features like attribute \f(CW\*(C`progmem\*(C'\fR and \f(CW\*(C`pgm_read_*\*(C'\fR.
  .ie n .IP """_\|_AVR_HAVE_FLMAP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_FLMAP_\|_\fR" 4
  .IX Item "__AVR_HAVE_FLMAP__"
  This macro is defined provided the following conditions are met:
  .RS 4
--- 23519,23695 ----
  for \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR,
  \&\f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega3\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR,
  \&\f(CW\*(C`avrxmega5\*(C'\fR, \f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
! If \fImcu\fR specifies a device, this built\-in macro is set
  accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
  defined to \f(CW4\fR.
! .ie n .IP """_\|_AVR_\fIDevice\fR_\|_""" 4
! .el .IP \f(CW_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\fR 4
  .IX Item "__AVR_Device__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built\-in macro which reflects
! the device\*(Aqs name. For example, \fB\-mmcu=atmega8\fR defines the
! built\-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
  \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
  .Sp
! The built\-in macros\*(Aq names follow
! the scheme \f(CW\*(C`_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\*(C'\fR where \fIDevice\fR is
! the device name as from the AVR user manual. The difference between
! \&\fIDevice\fR in the built\-in macro and \fIdevice\fR in
  \&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
! .el .IP \f(CW_\|_AVR_DEVICE_NAME_\|_\fR 4
  .IX Item "__AVR_DEVICE_NAME__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built\-in macro to
! the device\*(Aqs name. For example, with \fB\-mmcu=atmega8\fR the macro
  is defined to \f(CW\*(C`atmega8\*(C'\fR.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
! .el .IP \f(CW_\|_AVR_XMEGA_\|_\fR 4
  .IX Item "__AVR_XMEGA__"
! The device / architecture belongs to the XMEGA family of devices.
  .ie n .IP """_\|_AVR_HAVE_ADIW_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_ADIW_\|_\fR 4
  .IX Item "__AVR_HAVE_ADIW__"
  The device has the \f(CW\*(C`ADIW\*(C'\fR and \f(CW\*(C`SBIW\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_ELPM_\|_\fR 4
  .IX Item "__AVR_HAVE_ELPM__"
  The device has the \f(CW\*(C`ELPM\*(C'\fR instruction.
  .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_ELPMX_\|_\fR 4
  .IX Item "__AVR_HAVE_ELPMX__"
! The device has the \f(CW\*(C`ELPM R\fR\f(CIn\fR\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
! R\fR\f(CIn\fR\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_LPMX_\|_\fR 4
  .IX Item "__AVR_HAVE_LPMX__"
! The device has the \f(CW\*(C`LPM R\fR\f(CIn\fR\f(CW,Z\*(C'\fR and
! \&\f(CW\*(C`LPM R\fR\f(CIn\fR\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_MOVW_\|_\fR 4
  .IX Item "__AVR_HAVE_MOVW__"
  The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
! register\-register moves.
  .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_MUL_\|_\fR 4
  .IX Item "__AVR_HAVE_MUL__"
  The device has a hardware multiplier.
  .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR 4
  .IX Item "__AVR_HAVE_JMP_CALL__"
  The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
  This is the case for devices with more than 8 KiB of program
  memory.
  .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR 4
  .IX Item "__AVR_HAVE_EIJMP_EICALL__"
  .PD 0
  .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
! .el .IP \f(CW_\|_AVR_3_BYTE_PC_\|_\fR 4
  .IX Item "__AVR_3_BYTE_PC__"
  .PD
  The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
  This is the case for devices with more than 128 KiB of program memory.
  This also means that the program counter
! (PC) is 3 bytes wide.
  .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
! .el .IP \f(CW_\|_AVR_2_BYTE_PC_\|_\fR 4
  .IX Item "__AVR_2_BYTE_PC__"
! The program counter (PC) is 2 bytes wide. This is the case for devices
  with up to 128 KiB of program memory.
  .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR 4
  .IX Item "__AVR_HAVE_8BIT_SP__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR 4
  .IX Item "__AVR_HAVE_16BIT_SP__"
  .PD
! The stack pointer (SP) register is treated as 8\-bit respectively
  16\-bit register by the compiler.
  The definition of these macros is affected by \fB\-mtiny\-stack\fR.
  .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_SPH_\|_\fR 4
  .IX Item "__AVR_HAVE_SPH__"
  .PD 0
  .ie n .IP """_\|_AVR_SP8_\|_""" 4
! .el .IP \f(CW_\|_AVR_SP8_\|_\fR 4
  .IX Item "__AVR_SP8__"
  .PD
! The device has the SPH (high part of stack pointer) special function
  register or has an 8\-bit stack pointer, respectively.
  The definition of these macros is affected by \fB\-mmcu=\fR and
  in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
  by \fB\-msp8\fR.
  .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPD_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPD__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPX_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPX__"
  .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPY_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPY__"
  .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPZ__"
  .PD
  The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
  \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
  .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
! .el .IP \f(CW_\|_NO_INTERRUPTS_\|_\fR 4
  .IX Item "__NO_INTERRUPTS__"
! This macro reflects the \fB\-mno\-interrupts\fR command\-line option.
  .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
! .el .IP \f(CW_\|_AVR_ERRATA_SKIP_\|_\fR 4
  .IX Item "__AVR_ERRATA_SKIP__"
  .PD 0
  .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
! .el .IP \f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR 4
  .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
  .PD
! Some AVR devices (AT90S8515, ATmega103) must not skip 32\-bit
  instructions because of a hardware erratum.  Skip instructions are
  \&\f(CW\*(C`SBRS\*(C'\fR, \f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR and \f(CW\*(C`CPSE\*(C'\fR.
  The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
  set.
  .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
! .el .IP \f(CW_\|_AVR_ISA_RMW_\|_\fR 4
  .IX Item "__AVR_ISA_RMW__"
! The device has Read\-Modify\-Write instructions (XCH, LAC, LAS and LAT).
! .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fR""" 4
! .el .IP \f(CW_\|_AVR_SFR_OFFSET_\|_=\fR\f(CIoffset\fR\f(CW\fR 4
  .IX Item "__AVR_SFR_OFFSET__=offset"
  Instructions that can address I/O special function registers directly
  like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
! address as if addressed by an instruction to access RAM like \f(CW\*(C`LD\*(C'\fR
  or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
! to be subtracted from the RAM address in order to get the
  respective I/O address.
  .ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4
! .el .IP \f(CW_\|_AVR_SHORT_CALLS_\|_\fR 4
  .IX Item "__AVR_SHORT_CALLS__"
  The \fB\-mshort\-calls\fR command line option is set.
! .ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fR""" 4
! .el .IP \f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\fR\f(CIaddr\fR\f(CW\fR 4
  .IX Item "__AVR_PM_BASE_ADDRESS__=addr"
  Some devices support reading from flash memory by means of \f(CW\*(C`LD*\*(C'\fR
  instructions.  The flash memory is seen in the data address space
  at an offset of \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR.  If this macro
  is not defined, this feature is not available.  If defined,
  the address space is linear and there is no need to put
! \&\f(CW\*(C`.rodata\*(C'\fR into RAM.  This is handled by the default linker
  description file, and is currently available for
  \&\f(CW\*(C`avrtiny\*(C'\fR and \f(CW\*(C`avrxmega3\*(C'\fR.  Even more convenient,
  there is no need to use address spaces like \f(CW\*(C`_\|_flash\*(C'\fR or
  features like attribute \f(CW\*(C`progmem\*(C'\fR and \f(CW\*(C`pgm_read_*\*(C'\fR.
  .ie n .IP """_\|_AVR_HAVE_FLMAP_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_FLMAP_\|_\fR 4
  .IX Item "__AVR_HAVE_FLMAP__"
  This macro is defined provided the following conditions are met:
  .RS 4
*************** This macro is defined provided the follo
*** 23762,23876 ****
  .el .IP "*<The device has the \f(CWNVMCTRL_CTRLB.FLMAP\fR bitfield.>" 4
  .IX Item "*<The device has the NVMCTRL_CTRLB.FLMAP bitfield.>"
  This applies to the AVR64* and AVR128* devices.
! .IP "*<It's not known at assembler-time which emulation will be used.>" 4
  .IX Item "*<It's not known at assembler-time which emulation will be used.>"
  .RE
  .RS 4
  .Sp
! This implies the compiler was configured with \s-1GNU\s0 Binutils that implement
! \&\s-1PR31124\s0 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR).
  .RE
  .ie n .IP """_\|_AVR_RODATA_IN_RAM_\|_""" 4
! .el .IP "\f(CW_\|_AVR_RODATA_IN_RAM_\|_\fR" 4
  .IX Item "__AVR_RODATA_IN_RAM__"
  This macro is undefined when the code is compiled for a core architecture.
  .Sp
  When the code is compiled for a device, the macro is defined to 1
! when the \f(CW\*(C`.rodata\*(C'\fR sections for read-only data is located in \s-1RAM\s0;
  and defined to 0, otherwise.
  .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
! .el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
  .IX Item "__WITH_AVRLIBC__"
! The compiler is configured to be used together with AVR-Libc.
  See the \fB\-\-with\-avrlibc\fR configure option.
  .ie n .IP """_\|_HAVE_DOUBLE_MULTILIB_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_DOUBLE_MULTILIB_\|_\fR" 4
  .IX Item "__HAVE_DOUBLE_MULTILIB__"
  Defined if \fB\-mdouble=\fR acts as a multilib option.
  .ie n .IP """_\|_HAVE_DOUBLE32_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_DOUBLE32_\|_\fR" 4
  .IX Item "__HAVE_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_DOUBLE64_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_DOUBLE64_\|_\fR" 4
  .IX Item "__HAVE_DOUBLE64__"
  .PD
  Defined if the compiler supports 32\-bit double resp. 64\-bit double.
  The actual layout is specified by option \fB\-mdouble=\fR.
  .ie n .IP """_\|_DEFAULT_DOUBLE_\|_""" 4
! .el .IP "\f(CW_\|_DEFAULT_DOUBLE_\|_\fR" 4
  .IX Item "__DEFAULT_DOUBLE__"
  The size in bits of \f(CW\*(C`double\*(C'\fR if \fB\-mdouble=\fR is not set.
! To test the layout of \f(CW\*(C`double\*(C'\fR in a program, use the built-in
  macro \f(CW\*(C`_\|_SIZEOF_DOUBLE_\|_\*(C'\fR.
  .ie n .IP """_\|_HAVE_LONG_DOUBLE32_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_LONG_DOUBLE32_\|_\fR" 4
  .IX Item "__HAVE_LONG_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_LONG_DOUBLE64_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_LONG_DOUBLE64_\|_\fR" 4
  .IX Item "__HAVE_LONG_DOUBLE64__"
  .ie n .IP """_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_\fR" 4
  .IX Item "__HAVE_LONG_DOUBLE_MULTILIB__"
  .ie n .IP """_\|_DEFAULT_LONG_DOUBLE_\|_""" 4
! .el .IP "\f(CW_\|_DEFAULT_LONG_DOUBLE_\|_\fR" 4
  .IX Item "__DEFAULT_LONG_DOUBLE__"
  .PD
  Same as above, but for \f(CW\*(C`long double\*(C'\fR instead of \f(CW\*(C`double\*(C'\fR.
  .ie n .IP """_\|_WITH_DOUBLE_COMPARISON_\|_""" 4
! .el .IP "\f(CW_\|_WITH_DOUBLE_COMPARISON_\|_\fR" 4
  .IX Item "__WITH_DOUBLE_COMPARISON__"
  Reflects the \f(CW\*(C`\-\-with\-double\-comparison={tristate|bool|libf7}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR)
  and is defined to \f(CW2\fR or \f(CW3\fR.
  .ie n .IP """_\|_WITH_LIBF7_LIBGCC_\|_""" 4
! .el .IP "\f(CW_\|_WITH_LIBF7_LIBGCC_\|_\fR" 4
  .IX Item "__WITH_LIBF7_LIBGCC__"
  .PD 0
  .ie n .IP """_\|_WITH_LIBF7_MATH_\|_""" 4
! .el .IP "\f(CW_\|_WITH_LIBF7_MATH_\|_\fR" 4
  .IX Item "__WITH_LIBF7_MATH__"
  .ie n .IP """_\|_WITH_LIBF7_MATH_SYMBOLS_\|_""" 4
! .el .IP "\f(CW_\|_WITH_LIBF7_MATH_SYMBOLS_\|_\fR" 4
  .IX Item "__WITH_LIBF7_MATH_SYMBOLS__"
  .PD
  Reflects the \f(CW\*(C`\-\-with\-libf7={libgcc|math|math\-symbols}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR).
  .PP
! \s-1AVR\s0 Internal Options
  .IX Subsection "AVR Internal Options"
  .PP
  The following options are used internally by the compiler and to communicate
! between device specs files and the compiler proper. You don't need to set these
  options by hand, in particular they are not optimization options.
! Using these options in the wrong way may lead to sub-optimal or wrong code.
  They are documented for completeness, and in order to get a better
  understanding of
  device\ specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR)
  files.
! .IP "\fB\-mn\-flash=\fR\fInum\fR" 4
  .IX Item "-mn-flash=num"
  Assume that the flash memory has a size of \fInum\fR times 64 KiB.
! This determines which \f(CW\*(C`_\|_flash\f(CIN\f(CW\*(C'\fR address spaces are available.
! .IP "\fB\-mflmap\fR" 4
  .IX Item "-mflmap"
  The device has the \f(CW\*(C`FLMAP\*(C'\fR bit field located in special function
  register \f(CW\*(C`NVMCTRL_CTRLB\*(C'\fR.
! .IP "\fB\-mrmw\fR" 4
  .IX Item "-mrmw"
! Assume that the device supports the Read-Modify-Write
  instructions \f(CW\*(C`XCH\*(C'\fR, \f(CW\*(C`LAC\*(C'\fR, \f(CW\*(C`LAS\*(C'\fR and \f(CW\*(C`LAT\*(C'\fR.
! .IP "\fB\-mshort\-calls\fR" 4
  .IX Item "-mshort-calls"
  Assume that \f(CW\*(C`RJMP\*(C'\fR and \f(CW\*(C`RCALL\*(C'\fR can target the whole
  program memory. This option is used for multilib generation and selection
  for the devices from architecture \f(CW\*(C`avrxmega3\*(C'\fR.
! .IP "\fB\-mskip\-bug\fR" 4
  .IX Item "-mskip-bug"
  Generate code without skips (\f(CW\*(C`CPSE\*(C'\fR, \f(CW\*(C`SBRS\*(C'\fR,
  \&\f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR) over 32\-bit instructions.
! .IP "\fB\-msp8\fR" 4
  .IX Item "-msp8"
  Treat the stack pointer register as an 8\-bit register,
  i.e. assume the high byte of the stack pointer is zero.
--- 23697,23811 ----
  .el .IP "*<The device has the \f(CWNVMCTRL_CTRLB.FLMAP\fR bitfield.>" 4
  .IX Item "*<The device has the NVMCTRL_CTRLB.FLMAP bitfield.>"
  This applies to the AVR64* and AVR128* devices.
! .IP "*<It\*(Aqs not known at assembler\-time which emulation will be used.>" 4
  .IX Item "*<It's not known at assembler-time which emulation will be used.>"
  .RE
  .RS 4
  .Sp
! This implies the compiler was configured with GNU Binutils that implement
! PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR).
  .RE
  .ie n .IP """_\|_AVR_RODATA_IN_RAM_\|_""" 4
! .el .IP \f(CW_\|_AVR_RODATA_IN_RAM_\|_\fR 4
  .IX Item "__AVR_RODATA_IN_RAM__"
  This macro is undefined when the code is compiled for a core architecture.
  .Sp
  When the code is compiled for a device, the macro is defined to 1
! when the \f(CW\*(C`.rodata\*(C'\fR sections for read\-only data is located in RAM;
  and defined to 0, otherwise.
  .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
! .el .IP \f(CW_\|_WITH_AVRLIBC_\|_\fR 4
  .IX Item "__WITH_AVRLIBC__"
! The compiler is configured to be used together with AVR\-Libc.
  See the \fB\-\-with\-avrlibc\fR configure option.
  .ie n .IP """_\|_HAVE_DOUBLE_MULTILIB_\|_""" 4
! .el .IP \f(CW_\|_HAVE_DOUBLE_MULTILIB_\|_\fR 4
  .IX Item "__HAVE_DOUBLE_MULTILIB__"
  Defined if \fB\-mdouble=\fR acts as a multilib option.
  .ie n .IP """_\|_HAVE_DOUBLE32_\|_""" 4
! .el .IP \f(CW_\|_HAVE_DOUBLE32_\|_\fR 4
  .IX Item "__HAVE_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_DOUBLE64_\|_""" 4
! .el .IP \f(CW_\|_HAVE_DOUBLE64_\|_\fR 4
  .IX Item "__HAVE_DOUBLE64__"
  .PD
  Defined if the compiler supports 32\-bit double resp. 64\-bit double.
  The actual layout is specified by option \fB\-mdouble=\fR.
  .ie n .IP """_\|_DEFAULT_DOUBLE_\|_""" 4
! .el .IP \f(CW_\|_DEFAULT_DOUBLE_\|_\fR 4
  .IX Item "__DEFAULT_DOUBLE__"
  The size in bits of \f(CW\*(C`double\*(C'\fR if \fB\-mdouble=\fR is not set.
! To test the layout of \f(CW\*(C`double\*(C'\fR in a program, use the built\-in
  macro \f(CW\*(C`_\|_SIZEOF_DOUBLE_\|_\*(C'\fR.
  .ie n .IP """_\|_HAVE_LONG_DOUBLE32_\|_""" 4
! .el .IP \f(CW_\|_HAVE_LONG_DOUBLE32_\|_\fR 4
  .IX Item "__HAVE_LONG_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_LONG_DOUBLE64_\|_""" 4
! .el .IP \f(CW_\|_HAVE_LONG_DOUBLE64_\|_\fR 4
  .IX Item "__HAVE_LONG_DOUBLE64__"
  .ie n .IP """_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_""" 4
! .el .IP \f(CW_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_\fR 4
  .IX Item "__HAVE_LONG_DOUBLE_MULTILIB__"
  .ie n .IP """_\|_DEFAULT_LONG_DOUBLE_\|_""" 4
! .el .IP \f(CW_\|_DEFAULT_LONG_DOUBLE_\|_\fR 4
  .IX Item "__DEFAULT_LONG_DOUBLE__"
  .PD
  Same as above, but for \f(CW\*(C`long double\*(C'\fR instead of \f(CW\*(C`double\*(C'\fR.
  .ie n .IP """_\|_WITH_DOUBLE_COMPARISON_\|_""" 4
! .el .IP \f(CW_\|_WITH_DOUBLE_COMPARISON_\|_\fR 4
  .IX Item "__WITH_DOUBLE_COMPARISON__"
  Reflects the \f(CW\*(C`\-\-with\-double\-comparison={tristate|bool|libf7}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR)
  and is defined to \f(CW2\fR or \f(CW3\fR.
  .ie n .IP """_\|_WITH_LIBF7_LIBGCC_\|_""" 4
! .el .IP \f(CW_\|_WITH_LIBF7_LIBGCC_\|_\fR 4
  .IX Item "__WITH_LIBF7_LIBGCC__"
  .PD 0
  .ie n .IP """_\|_WITH_LIBF7_MATH_\|_""" 4
! .el .IP \f(CW_\|_WITH_LIBF7_MATH_\|_\fR 4
  .IX Item "__WITH_LIBF7_MATH__"
  .ie n .IP """_\|_WITH_LIBF7_MATH_SYMBOLS_\|_""" 4
! .el .IP \f(CW_\|_WITH_LIBF7_MATH_SYMBOLS_\|_\fR 4
  .IX Item "__WITH_LIBF7_MATH_SYMBOLS__"
  .PD
  Reflects the \f(CW\*(C`\-\-with\-libf7={libgcc|math|math\-symbols}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR).
  .PP
! AVR Internal Options
  .IX Subsection "AVR Internal Options"
  .PP
  The following options are used internally by the compiler and to communicate
! between device specs files and the compiler proper. You don\*(Aqt need to set these
  options by hand, in particular they are not optimization options.
! Using these options in the wrong way may lead to sub\-optimal or wrong code.
  They are documented for completeness, and in order to get a better
  understanding of
  device\ specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR)
  files.
! .IP \fB\-mn\-flash=\fR\fInum\fR 4
  .IX Item "-mn-flash=num"
  Assume that the flash memory has a size of \fInum\fR times 64 KiB.
! This determines which \f(CW\*(C`_\|_flash\fR\f(CIN\fR\f(CW\*(C'\fR address spaces are available.
! .IP \fB\-mflmap\fR 4
  .IX Item "-mflmap"
  The device has the \f(CW\*(C`FLMAP\*(C'\fR bit field located in special function
  register \f(CW\*(C`NVMCTRL_CTRLB\*(C'\fR.
! .IP \fB\-mrmw\fR 4
  .IX Item "-mrmw"
! Assume that the device supports the Read\-Modify\-Write
  instructions \f(CW\*(C`XCH\*(C'\fR, \f(CW\*(C`LAC\*(C'\fR, \f(CW\*(C`LAS\*(C'\fR and \f(CW\*(C`LAT\*(C'\fR.
! .IP \fB\-mshort\-calls\fR 4
  .IX Item "-mshort-calls"
  Assume that \f(CW\*(C`RJMP\*(C'\fR and \f(CW\*(C`RCALL\*(C'\fR can target the whole
  program memory. This option is used for multilib generation and selection
  for the devices from architecture \f(CW\*(C`avrxmega3\*(C'\fR.
! .IP \fB\-mskip\-bug\fR 4
  .IX Item "-mskip-bug"
  Generate code without skips (\f(CW\*(C`CPSE\*(C'\fR, \f(CW\*(C`SBRS\*(C'\fR,
  \&\f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR) over 32\-bit instructions.
! .IP \fB\-msp8\fR 4
  .IX Item "-msp8"
  Treat the stack pointer register as an 8\-bit register,
  i.e. assume the high byte of the stack pointer is zero.
*************** These architectures mix devices with and
*** 23880,23886 ****
  .PP
  \fIBlackfin Options\fR
  .IX Subsection "Blackfin Options"
! .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
  .IX Item "-mcpu=cpu[-sirevision]"
  Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
  can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
--- 23815,23821 ----
  .PP
  \fIBlackfin Options\fR
  .IX Subsection "Blackfin Options"
! .IP \fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 4
  .IX Item "-mcpu=cpu[-sirevision]"
  Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
  can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
*************** hexadecimal digits representing the majo
*** 23900,24018 ****
  revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
  is not defined.  If \fIsirevision\fR is \fBany\fR, the
  \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
! If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
  silicon revision of the targeted Blackfin processor.
  .Sp
! \&\s-1GCC\s0 defines a preprocessor macro for the specified \fIcpu\fR.
! For the \fBbfin-elf\fR toolchain, this option causes the hardware \s-1BSP\s0
  provided by libgloss to be linked in if \fB\-msim\fR is not given.
  .Sp
  Without this option, \fBbf532\fR is used as the processor by default.
  .Sp
  Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
  only the preprocessor macro is defined.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
! the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
! has effect only for \fBbfin-elf\fR toolchain.
  Certain other options, such as \fB\-mid\-shared\-library\fR and
  \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
! .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-momit-leaf-frame-pointer"
! Don't keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up and restore frame pointers and
  makes an extra register available in leaf functions.
! .IP "\fB\-mspecld\-anomaly\fR" 4
  .IX Item "-mspecld-anomaly"
  When enabled, the compiler ensures that the generated code does not
  contain speculative loads after jump instructions. If this option is used,
  \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
! .IP "\fB\-mno\-specld\-anomaly\fR" 4
  .IX Item "-mno-specld-anomaly"
! Don't generate extra code to prevent speculative loads from occurring.
! .IP "\fB\-mcsync\-anomaly\fR" 4
  .IX Item "-mcsync-anomaly"
  When enabled, the compiler ensures that the generated code does not
! contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
  If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
! .IP "\fB\-mno\-csync\-anomaly\fR" 4
  .IX Item "-mno-csync-anomaly"
! Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
  occurring too soon after a conditional branch.
! .IP "\fB\-mlow64k\fR" 4
  .IX Item "-mlow64k"
  When enabled, the compiler is free to take advantage of the knowledge that
  the entire program fits into the low 64k of memory.
! .IP "\fB\-mno\-low64k\fR" 4
  .IX Item "-mno-low64k"
  Assume that the program is arbitrarily large.  This is the default.
! .IP "\fB\-mstack\-check\-l1\fR" 4
  .IX Item "-mstack-check-l1"
  Do stack checking using information placed into L1 scratchpad memory by the
  uClinux kernel.
! .IP "\fB\-mid\-shared\-library\fR" 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library \s-1ID\s0 method.
  This allows for execute in place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
! .IP "\fB\-mno\-id\-shared\-library\fR" 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn't assume ID-based shared libraries are being used.
  This is the default.
! .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
  .IX Item "-mleaf-id-shared-library"
! Generate code that supports shared libraries via the library \s-1ID\s0 method,
! but assumes that this library or executable won't link against any other
! \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
  and calls.
! .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
  .IX Item "-mno-leaf-id-shared-library"
! Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
  libraries.  Slower code is generated for jump and call insns.
! .IP "\fB\-mshared\-library\-id=n\fR" 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library but is no more space\- or time-efficient than omitting this option.
! .IP "\fB\-msep\-data\fR" 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
  area of memory from the text segment.  This allows for execute in place in
  an environment without virtual memory management by eliminating relocations
  against the text section.
! .IP "\fB\-mno\-sep\-data\fR" 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 24\-bit addressing range of the offset-based
  version of subroutine call instruction.
  .Sp
  This feature is not enabled by default.  Specifying
  \&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
  switches have no effect on how the compiler generates code to handle
  function calls via function pointers.
! .IP "\fB\-mfast\-fp\fR" 4
  .IX Item "-mfast-fp"
! Link with the fast floating-point library. This library relaxes some of
! the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
! Not-a-Number (\s-1NAN\s0), in the interest of performance.
! .IP "\fB\-minline\-plt\fR" 4
  .IX Item "-minline-plt"
! Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! .IP "\fB\-mmulticore\fR" 4
  .IX Item "-mmulticore"
  Build a standalone application for multicore Blackfin processors. 
  This option causes proper start files and link scripts supporting 
--- 23835,23953 ----
  revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
  is not defined.  If \fIsirevision\fR is \fBany\fR, the
  \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
! If this optional \fIsirevision\fR is not used, GCC assumes the latest known
  silicon revision of the targeted Blackfin processor.
  .Sp
! GCC defines a preprocessor macro for the specified \fIcpu\fR.
! For the \fBbfin\-elf\fR toolchain, this option causes the hardware BSP
  provided by libgloss to be linked in if \fB\-msim\fR is not given.
  .Sp
  Without this option, \fBbf532\fR is used as the processor by default.
  .Sp
  Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
  only the preprocessor macro is defined.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
! the simulator BSP provided by libgloss to be linked in.  This option
! has effect only for \fBbfin\-elf\fR toolchain.
  Certain other options, such as \fB\-mid\-shared\-library\fR and
  \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
! .IP \fB\-momit\-leaf\-frame\-pointer\fR 4
  .IX Item "-momit-leaf-frame-pointer"
! Don\*(Aqt keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up and restore frame pointers and
  makes an extra register available in leaf functions.
! .IP \fB\-mspecld\-anomaly\fR 4
  .IX Item "-mspecld-anomaly"
  When enabled, the compiler ensures that the generated code does not
  contain speculative loads after jump instructions. If this option is used,
  \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
! .IP \fB\-mno\-specld\-anomaly\fR 4
  .IX Item "-mno-specld-anomaly"
! Don\*(Aqt generate extra code to prevent speculative loads from occurring.
! .IP \fB\-mcsync\-anomaly\fR 4
  .IX Item "-mcsync-anomaly"
  When enabled, the compiler ensures that the generated code does not
! contain CSYNC or SSYNC instructions too soon after conditional branches.
  If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
! .IP \fB\-mno\-csync\-anomaly\fR 4
  .IX Item "-mno-csync-anomaly"
! Don\*(Aqt generate extra code to prevent CSYNC or SSYNC instructions from
  occurring too soon after a conditional branch.
! .IP \fB\-mlow64k\fR 4
  .IX Item "-mlow64k"
  When enabled, the compiler is free to take advantage of the knowledge that
  the entire program fits into the low 64k of memory.
! .IP \fB\-mno\-low64k\fR 4
  .IX Item "-mno-low64k"
  Assume that the program is arbitrarily large.  This is the default.
! .IP \fB\-mstack\-check\-l1\fR 4
  .IX Item "-mstack-check-l1"
  Do stack checking using information placed into L1 scratchpad memory by the
  uClinux kernel.
! .IP \fB\-mid\-shared\-library\fR 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library ID method.
  This allows for execute in place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! With a \fBbfin\-elf\fR target, this option implies \fB\-msim\fR.
! .IP \fB\-mno\-id\-shared\-library\fR 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn\*(Aqt assume ID\-based shared libraries are being used.
  This is the default.
! .IP \fB\-mleaf\-id\-shared\-library\fR 4
  .IX Item "-mleaf-id-shared-library"
! Generate code that supports shared libraries via the library ID method,
! but assumes that this library or executable won\*(Aqt link against any other
! ID shared libraries.  That allows the compiler to use faster code for jumps
  and calls.
! .IP \fB\-mno\-leaf\-id\-shared\-library\fR 4
  .IX Item "-mno-leaf-id-shared-library"
! Do not assume that the code being compiled won\*(Aqt link against any ID shared
  libraries.  Slower code is generated for jump and call insns.
! .IP \fB\-mshared\-library\-id=n\fR 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID\-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library but is no more space\- or time\-efficient than omitting this option.
! .IP \fB\-msep\-data\fR 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
  area of memory from the text segment.  This allows for execute in place in
  an environment without virtual memory management by eliminating relocations
  against the text section.
! .IP \fB\-mno\-sep\-data\fR 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 24\-bit addressing range of the offset\-based
  version of subroutine call instruction.
  .Sp
  This feature is not enabled by default.  Specifying
  \&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
  switches have no effect on how the compiler generates code to handle
  function calls via function pointers.
! .IP \fB\-mfast\-fp\fR 4
  .IX Item "-mfast-fp"
! Link with the fast floating\-point library. This library relaxes some of
! the IEEE floating\-point standard\*(Aqs rules for checking inputs against
! Not\-a\-Number (NAN), in the interest of performance.
! .IP \fB\-minline\-plt\fR 4
  .IX Item "-minline-plt"
! Enable inlining of PLT entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! .IP \fB\-mmulticore\fR 4
  .IX Item "-mmulticore"
  Build a standalone application for multicore Blackfin processors. 
  This option causes proper start files and link scripts supporting 
*************** multicore to be used, and defines the ma
*** 24020,24054 ****
  It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
  .Sp
  This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
! selects the one-application-per-core programming model.  Without
  \&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
  programming model is used. In this model, the main function of Core B
  should be named as \f(CW\*(C`coreb_main\*(C'\fR.
  .Sp
! If this option is not used, the single-core application programming
  model is used.
! .IP "\fB\-mcorea\fR" 4
  .IX Item "-mcorea"
! Build a standalone application for Core A of \s-1BF561\s0 when using
! the one-application-per-core programming model. Proper start files
  and link scripts are used to support Core A, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP "\fB\-mcoreb\fR" 4
  .IX Item "-mcoreb"
! Build a standalone application for Core B of \s-1BF561\s0 when using
! the one-application-per-core programming model. Proper start files
  and link scripts are used to support Core B, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
  should be used instead of \f(CW\*(C`main\*(C'\fR. 
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP "\fB\-msdram\fR" 4
  .IX Item "-msdram"
! Build a standalone application for \s-1SDRAM.\s0 Proper start files and
! link scripts are used to put the application into \s-1SDRAM,\s0 and the macro
  \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
! The loader should initialize \s-1SDRAM\s0 before loading the application.
! .IP "\fB\-micplb\fR" 4
  .IX Item "-micplb"
  Assume that ICPLBs are enabled at run time.  This has an effect on certain
  anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
--- 23955,23989 ----
  It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
  .Sp
  This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
! selects the one\-application\-per\-core programming model.  Without
  \&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
  programming model is used. In this model, the main function of Core B
  should be named as \f(CW\*(C`coreb_main\*(C'\fR.
  .Sp
! If this option is not used, the single\-core application programming
  model is used.
! .IP \fB\-mcorea\fR 4
  .IX Item "-mcorea"
! Build a standalone application for Core A of BF561 when using
! the one\-application\-per\-core programming model. Proper start files
  and link scripts are used to support Core A, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP \fB\-mcoreb\fR 4
  .IX Item "-mcoreb"
! Build a standalone application for Core B of BF561 when using
! the one\-application\-per\-core programming model. Proper start files
  and link scripts are used to support Core B, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
  should be used instead of \f(CW\*(C`main\*(C'\fR. 
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP \fB\-msdram\fR 4
  .IX Item "-msdram"
! Build a standalone application for SDRAM. Proper start files and
! link scripts are used to put the application into SDRAM, and the macro
  \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
! The loader should initialize SDRAM before loading the application.
! .IP \fB\-micplb\fR 4
  .IX Item "-micplb"
  Assume that ICPLBs are enabled at run time.  This has an effect on certain
  anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
*************** are enabled; for standalone applications
*** 24056,24090 ****
  .PP
  \fIC6X Options\fR
  .IX Subsection "C6X Options"
! .IP "\fB\-march=\fR\fIname\fR" 4
  .IX Item "-march=name"
! This specifies the name of the target architecture.  \s-1GCC\s0 uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBc62x\fR,
  \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.  This is the default.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
! .IP "\fB\-msdata=default\fR" 4
  .IX Item "-msdata=default"
  Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
  which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
  global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
! to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read-only data into the
  \&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
  pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
! .IP "\fB\-msdata=all\fR" 4
  .IX Item "-msdata=all"
  Put all data, not just small objects, into the sections reserved for
  small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
  access them.
! .IP "\fB\-msdata=none\fR" 4
  .IX Item "-msdata=none"
  Make no use of the sections reserved for small data, and use absolute
  addresses to access all data.  Put all initialized global and static
--- 23991,24025 ----
  .PP
  \fIC6X Options\fR
  .IX Subsection "C6X Options"
! .IP \fB\-march=\fR\fIname\fR 4
  .IX Item "-march=name"
! This specifies the name of the target architecture.  GCC uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBc62x\fR,
  \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.  This is the default.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
! .IP \fB\-msdata=default\fR 4
  .IX Item "-msdata=default"
  Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
  which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
  global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
! to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read\-only data into the
  \&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
  pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
! .IP \fB\-msdata=all\fR 4
  .IX Item "-msdata=all"
  Put all data, not just small objects, into the sections reserved for
  small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
  access them.
! .IP \fB\-msdata=none\fR 4
  .IX Item "-msdata=none"
  Make no use of the sections reserved for small data, and use absolute
  addresses to access all data.  Put all initialized global and static
*************** data in the \f(CW\*(C`.fardata\*(C'\fR s
*** 24092,24215 ****
  \&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
  section.
  .PP
! \fI\s-1CRIS\s0 Options\fR
  .IX Subsection "CRIS Options"
  .PP
! These options are defined specifically for the \s-1CRIS\s0 ports.
! .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
  .IX Item "-march=architecture-type"
  .PD 0
! .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
  .IX Item "-mcpu=architecture-type"
  .PD
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
! respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX.\s0
  Default is \fBv0\fR.
! .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
  .IX Item "-mtune=architecture-type"
! Tune to \fIarchitecture-type\fR everything applicable about the generated
! code, except for the \s-1ABI\s0 and the set of available instructions.  The
! choices for \fIarchitecture-type\fR are the same as for
! \&\fB\-march=\fR\fIarchitecture-type\fR.
! .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
  .IX Item "-mmax-stack-frame=n"
  Warn when the stack frame of a function exceeds \fIn\fR bytes.
! .IP "\fB\-metrax4\fR" 4
  .IX Item "-metrax4"
  .PD 0
! .IP "\fB\-metrax100\fR" 4
  .IX Item "-metrax100"
  .PD
  The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
  \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
! .IP "\fB\-mmul\-bug\-workaround\fR" 4
  .IX Item "-mmul-bug-workaround"
  .PD 0
! .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
  .IX Item "-mno-mul-bug-workaround"
  .PD
! Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
  models where it applies.  This option is disabled by default.
! .IP "\fB\-mpdebug\fR" 4
  .IX Item "-mpdebug"
! Enable CRIS-specific verbose debug-related information in the assembly
  code.  This option also has the effect of turning off the \fB#NO_APP\fR
! formatted-code indicator to the assembler at the beginning of the
  assembly file.
! .IP "\fB\-mcc\-init\fR" 4
  .IX Item "-mcc-init"
! Do not use condition-code results from previous instruction; always emit
  compare and test instructions before use of condition codes.
! .IP "\fB\-mno\-side\-effects\fR" 4
  .IX Item "-mno-side-effects"
  Do not emit instructions with side effects in addressing modes other than
! post-increment.
! .IP "\fB\-mstack\-align\fR" 4
  .IX Item "-mstack-align"
  .PD 0
! .IP "\fB\-mno\-stack\-align\fR" 4
  .IX Item "-mno-stack-align"
! .IP "\fB\-mdata\-align\fR" 4
  .IX Item "-mdata-align"
! .IP "\fB\-mno\-data\-align\fR" 4
  .IX Item "-mno-data-align"
! .IP "\fB\-mconst\-align\fR" 4
  .IX Item "-mconst-align"
! .IP "\fB\-mno\-const\-align\fR" 4
  .IX Item "-mno-const-align"
  .PD
  These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
  stack frame, individual data and constants to be aligned for the maximum
! single data access size for the chosen \s-1CPU\s0 model.  The default is to
! arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
  not affected by these options.
! .IP "\fB\-m32\-bit\fR" 4
  .IX Item "-m32-bit"
  .PD 0
! .IP "\fB\-m16\-bit\fR" 4
  .IX Item "-m16-bit"
! .IP "\fB\-m8\-bit\fR" 4
  .IX Item "-m8-bit"
  .PD
! Similar to the stack\- data\- and const-align options above, these options
  arrange for stack frame, writable data and constants to all be 32\-bit,
  16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
! .IP "\fB\-mno\-prologue\-epilogue\fR" 4
  .IX Item "-mno-prologue-epilogue"
  .PD 0
! .IP "\fB\-mprologue\-epilogue\fR" 4
  .IX Item "-mprologue-epilogue"
  .PD
  With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
  epilogue which set up the stack frame are omitted and no return
  instructions or return sequences are generated in the code.  Use this
  option only together with visual inspection of the compiled code: no
! warnings or errors are generated when call-saved registers must be saved,
  or storage for local variables needs to be allocated.
! .IP "\fB\-melf\fR" 4
  .IX Item "-melf"
! Legacy no-op option.
! .IP "\fB\-sim\fR" 4
  .IX Item "-sim"
  This option arranges
! to link with input-output functions from a simulator library.  Code,
! initialized data and zero-initialized data are allocated consecutively.
! .IP "\fB\-sim2\fR" 4
  .IX Item "-sim2"
  Like \fB\-sim\fR, but pass linker options to locate initialized data at
! 0x40000000 and zero-initialized data at 0x80000000.
  .PP
  \fIC\-SKY Options\fR
  .IX Subsection "C-SKY Options"
  .PP
! \&\s-1GCC\s0 supports these options when compiling for C\-SKY V2 processors.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Specify the C\-SKY target architecture.  Valid values for \fIarch\fR are:
  \&\fBck801\fR, \fBck802\fR, \fBck803\fR, \fBck807\fR, and \fBck810\fR.
  The default is \fBck810\fR.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Specify the C\-SKY target processor.  Valid values for \fIcpu\fR are:
  \&\fBck801\fR, \fBck801t\fR,
--- 24027,24150 ----
  \&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
  section.
  .PP
! \fICRIS Options\fR
  .IX Subsection "CRIS Options"
  .PP
! These options are defined specifically for the CRIS ports.
! .IP \fB\-march=\fR\fIarchitecture\-type\fR 4
  .IX Item "-march=architecture-type"
  .PD 0
! .IP \fB\-mcpu=\fR\fIarchitecture\-type\fR 4
  .IX Item "-mcpu=architecture-type"
  .PD
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture\-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
! respectively ETRAX\ 4, ETRAX\ 100, and ETRAX\ 100\ LX.
  Default is \fBv0\fR.
! .IP \fB\-mtune=\fR\fIarchitecture\-type\fR 4
  .IX Item "-mtune=architecture-type"
! Tune to \fIarchitecture\-type\fR everything applicable about the generated
! code, except for the ABI and the set of available instructions.  The
! choices for \fIarchitecture\-type\fR are the same as for
! \&\fB\-march=\fR\fIarchitecture\-type\fR.
! .IP \fB\-mmax\-stack\-frame=\fR\fIn\fR 4
  .IX Item "-mmax-stack-frame=n"
  Warn when the stack frame of a function exceeds \fIn\fR bytes.
! .IP \fB\-metrax4\fR 4
  .IX Item "-metrax4"
  .PD 0
! .IP \fB\-metrax100\fR 4
  .IX Item "-metrax100"
  .PD
  The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
  \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
! .IP \fB\-mmul\-bug\-workaround\fR 4
  .IX Item "-mmul-bug-workaround"
  .PD 0
! .IP \fB\-mno\-mul\-bug\-workaround\fR 4
  .IX Item "-mno-mul-bug-workaround"
  .PD
! Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for CPU
  models where it applies.  This option is disabled by default.
! .IP \fB\-mpdebug\fR 4
  .IX Item "-mpdebug"
! Enable CRIS\-specific verbose debug\-related information in the assembly
  code.  This option also has the effect of turning off the \fB#NO_APP\fR
! formatted\-code indicator to the assembler at the beginning of the
  assembly file.
! .IP \fB\-mcc\-init\fR 4
  .IX Item "-mcc-init"
! Do not use condition\-code results from previous instruction; always emit
  compare and test instructions before use of condition codes.
! .IP \fB\-mno\-side\-effects\fR 4
  .IX Item "-mno-side-effects"
  Do not emit instructions with side effects in addressing modes other than
! post\-increment.
! .IP \fB\-mstack\-align\fR 4
  .IX Item "-mstack-align"
  .PD 0
! .IP \fB\-mno\-stack\-align\fR 4
  .IX Item "-mno-stack-align"
! .IP \fB\-mdata\-align\fR 4
  .IX Item "-mdata-align"
! .IP \fB\-mno\-data\-align\fR 4
  .IX Item "-mno-data-align"
! .IP \fB\-mconst\-align\fR 4
  .IX Item "-mconst-align"
! .IP \fB\-mno\-const\-align\fR 4
  .IX Item "-mno-const-align"
  .PD
  These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
  stack frame, individual data and constants to be aligned for the maximum
! single data access size for the chosen CPU model.  The default is to
! arrange for 32\-bit alignment.  ABI details such as structure layout are
  not affected by these options.
! .IP \fB\-m32\-bit\fR 4
  .IX Item "-m32-bit"
  .PD 0
! .IP \fB\-m16\-bit\fR 4
  .IX Item "-m16-bit"
! .IP \fB\-m8\-bit\fR 4
  .IX Item "-m8-bit"
  .PD
! Similar to the stack\- data\- and const\-align options above, these options
  arrange for stack frame, writable data and constants to all be 32\-bit,
  16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
! .IP \fB\-mno\-prologue\-epilogue\fR 4
  .IX Item "-mno-prologue-epilogue"
  .PD 0
! .IP \fB\-mprologue\-epilogue\fR 4
  .IX Item "-mprologue-epilogue"
  .PD
  With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
  epilogue which set up the stack frame are omitted and no return
  instructions or return sequences are generated in the code.  Use this
  option only together with visual inspection of the compiled code: no
! warnings or errors are generated when call\-saved registers must be saved,
  or storage for local variables needs to be allocated.
! .IP \fB\-melf\fR 4
  .IX Item "-melf"
! Legacy no\-op option.
! .IP \fB\-sim\fR 4
  .IX Item "-sim"
  This option arranges
! to link with input\-output functions from a simulator library.  Code,
! initialized data and zero\-initialized data are allocated consecutively.
! .IP \fB\-sim2\fR 4
  .IX Item "-sim2"
  Like \fB\-sim\fR, but pass linker options to locate initialized data at
! 0x40000000 and zero\-initialized data at 0x80000000.
  .PP
  \fIC\-SKY Options\fR
  .IX Subsection "C-SKY Options"
  .PP
! GCC supports these options when compiling for C\-SKY V2 processors.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Specify the C\-SKY target architecture.  Valid values for \fIarch\fR are:
  \&\fBck801\fR, \fBck802\fR, \fBck803\fR, \fBck807\fR, and \fBck810\fR.
  The default is \fBck810\fR.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Specify the C\-SKY target processor.  Valid values for \fIcpu\fR are:
  \&\fBck801\fR, \fBck801t\fR,
*************** Specify the C\-SKY target processor.  Va
*** 24228,24432 ****
  \&\fBck810e\fR, \fBck810et\fR, \fBck810ef\fR, \fBck810eft\fR,
  \&\fBck810\fR, \fBck810v\fR, \fBck810f\fR, \fBck810t\fR, \fBck810fv\fR,
  \&\fBck810tv\fR, \fBck810ft\fR, and \fBck810ftv\fR.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP "\fB\-EB\fR" 4
  .IX Item "-EB"
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! .IP "\fB\-EL\fR" 4
  .IX Item "-EL"
  .PD
! Select big\- or little-endian code.  The default is little-endian.
! .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
! library calls for floating-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating-point
! instructions, but still uses the soft-float calling conventions.
! \&\fBhard\fR allows generation of floating-point instructions
! and uses FPU-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard-float and soft-float ABIs are not link-compatible; you must
! compile your entire program with the same \s-1ABI,\s0 and link with a
  compatible set of libraries.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Select hardware or software floating-point implementations.
  The default is soft float.
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
  .PD 0
! .IP "\fB\-mno\-double\-float\fR" 4
  .IX Item "-mno-double-float"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
! double-precision float instructions.  This is the default except
! when compiling for \s-1CK803.\s0
! .IP "\fB\-mfdivdu\fR" 4
  .IX Item "-mfdivdu"
  .PD 0
! .IP "\fB\-mno\-fdivdu\fR" 4
  .IX Item "-mno-fdivdu"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
  \&\f(CW\*(C`frecipd\*(C'\fR, \f(CW\*(C`fsqrtd\*(C'\fR, and \f(CW\*(C`fdivd\*(C'\fR instructions.
! This is the default except when compiling for \s-1CK803.\s0
! .IP "\fB\-mfpu=\fR\fIfpu\fR" 4
  .IX Item "-mfpu=fpu"
! Select the floating-point processor.  This option can only be used with
  \&\fB\-mhard\-float\fR.
  Values for \fIfpu\fR are
  \&\fBfpv2_sf\fR (equivalent to \fB\-mno\-double\-float \-mno\-fdivdu\fR),
  \&\fBfpv2\fR (\fB\-mdouble\-float \-mno\-divdu\fR), and
  \&\fBfpv2_divd\fR (\fB\-mdouble\-float \-mdivdu\fR).
! .IP "\fB\-melrw\fR" 4
  .IX Item "-melrw"
  .PD 0
! .IP "\fB\-mno\-elrw\fR" 4
  .IX Item "-mno-elrw"
  .PD
  Enable the extended \f(CW\*(C`lrw\*(C'\fR instruction.  This option defaults to on
! for \s-1CK801\s0 and off otherwise.
! .IP "\fB\-mistack\fR" 4
  .IX Item "-mistack"
  .PD 0
! .IP "\fB\-mno\-istack\fR" 4
  .IX Item "-mno-istack"
  .PD
  Enable interrupt stack instructions; the default is off.
  .Sp
  The \fB\-mistack\fR option is required to handle the
  \&\f(CW\*(C`interrupt\*(C'\fR and \f(CW\*(C`isr\*(C'\fR function attributes.
! .IP "\fB\-mmp\fR" 4
  .IX Item "-mmp"
  Enable multiprocessor instructions; the default is off.
! .IP "\fB\-mcp\fR" 4
  .IX Item "-mcp"
  Enable coprocessor instructions; the default is off.
! .IP "\fB\-mcache\fR" 4
  .IX Item "-mcache"
  Enable coprocessor instructions; the default is off.
! .IP "\fB\-msecurity\fR" 4
  .IX Item "-msecurity"
  Enable C\-SKY security instructions; the default is off.
! .IP "\fB\-mtrust\fR" 4
  .IX Item "-mtrust"
  Enable C\-SKY trust instructions; the default is off.
! .IP "\fB\-mdsp\fR" 4
  .IX Item "-mdsp"
  .PD 0
! .IP "\fB\-medsp\fR" 4
  .IX Item "-medsp"
! .IP "\fB\-mvdsp\fR" 4
  .IX Item "-mvdsp"
  .PD
! Enable C\-SKY \s-1DSP,\s0 Enhanced \s-1DSP,\s0 or Vector \s-1DSP\s0 instructions, respectively.
  All of these options default to off.
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
  Generate divide instructions.  Default is off.
! .IP "\fB\-msmart\fR" 4
  .IX Item "-msmart"
  .PD 0
! .IP "\fB\-mno\-smart\fR" 4
  .IX Item "-mno-smart"
  .PD
  Generate code for Smart Mode, using only registers numbered 0\-7 to allow
! use of 16\-bit instructions.  This option is ignored for \s-1CK801\s0 where this
! is the required behavior, and it defaults to on for \s-1CK802.\s0
  For other targets, the default is off.
! .IP "\fB\-mhigh\-registers\fR" 4
  .IX Item "-mhigh-registers"
  .PD 0
! .IP "\fB\-mno\-high\-registers\fR" 4
  .IX Item "-mno-high-registers"
  .PD
  Generate code using the high registers numbered 16\-31.  This option
! is not supported on \s-1CK801, CK802,\s0 or \s-1CK803,\s0 and is enabled by default
  for other processors.
! .IP "\fB\-manchor\fR" 4
  .IX Item "-manchor"
  .PD 0
! .IP "\fB\-mno\-anchor\fR" 4
  .IX Item "-mno-anchor"
  .PD
  Generate code using global anchor symbol addresses.
! .IP "\fB\-mpushpop\fR" 4
  .IX Item "-mpushpop"
  .PD 0
! .IP "\fB\-mno\-pushpop\fR" 4
  .IX Item "-mno-pushpop"
  .PD
  Generate code using \f(CW\*(C`push\*(C'\fR and \f(CW\*(C`pop\*(C'\fR instructions.  This option
  defaults to on.
! .IP "\fB\-mmultiple\-stld\fR" 4
  .IX Item "-mmultiple-stld"
  .PD 0
! .IP "\fB\-mstm\fR" 4
  .IX Item "-mstm"
! .IP "\fB\-mno\-multiple\-stld\fR" 4
  .IX Item "-mno-multiple-stld"
! .IP "\fB\-mno\-stm\fR" 4
  .IX Item "-mno-stm"
  .PD
  Generate code using \f(CW\*(C`stm\*(C'\fR and \f(CW\*(C`ldm\*(C'\fR instructions.  This option
! isn't supported on \s-1CK801\s0 but is enabled by default on other processors.
! .IP "\fB\-mconstpool\fR" 4
  .IX Item "-mconstpool"
  .PD 0
! .IP "\fB\-mno\-constpool\fR" 4
  .IX Item "-mno-constpool"
  .PD
  Create constant pools in the compiler instead of deferring it to the
  assembler.  This option is the default and required for correct code
! generation on \s-1CK801\s0 and \s-1CK802,\s0 and is optional on other processors.
! .IP "\fB\-mstack\-size\fR" 4
  .IX Item "-mstack-size"
  .PD 0
! .IP "\fB\-mno\-stack\-size\fR" 4
  .IX Item "-mno-stack-size"
  .PD
  Emit \f(CW\*(C`.stack_size\*(C'\fR directives for each function in the assembly
  output.  This option defaults to off.
! .IP "\fB\-mccrt\fR" 4
  .IX Item "-mccrt"
  .PD 0
! .IP "\fB\-mno\-ccrt\fR" 4
  .IX Item "-mno-ccrt"
  .PD
  Generate code for the C\-SKY compiler runtime instead of libgcc.  This
  option defaults to off.
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
  .IX Item "-mbranch-cost=n"
  Set the branch costs to roughly \f(CW\*(C`n\*(C'\fR instructions.  The default is 1.
! .IP "\fB\-msched\-prolog\fR" 4
  .IX Item "-msched-prolog"
  .PD 0
! .IP "\fB\-mno\-sched\-prolog\fR" 4
  .IX Item "-mno-sched-prolog"
  .PD
  Permit scheduling of function prologue and epilogue sequences.  Using
! this option can result in code that is not compliant with the C\-SKY V2 \s-1ABI\s0
  prologue requirements and that cannot be debugged or backtraced.
  It is disabled by default.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Links the library libsemi.a which is in compatible with simulator. Applicable
! to \s-1ELF\s0 compiler only.
  .PP
  \fIDarwin Options\fR
  .IX Subsection "Darwin Options"
--- 24163,24367 ----
  \&\fBck810e\fR, \fBck810et\fR, \fBck810ef\fR, \fBck810eft\fR,
  \&\fBck810\fR, \fBck810v\fR, \fBck810f\fR, \fBck810t\fR, \fBck810fv\fR,
  \&\fBck810tv\fR, \fBck810ft\fR, and \fBck810ftv\fR.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP \fB\-EB\fR 4
  .IX Item "-EB"
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! .IP \fB\-EL\fR 4
  .IX Item "-EL"
  .PD
! Select big\- or little\-endian code.  The default is little\-endian.
! .IP \fB\-mfloat\-abi=\fR\fIname\fR 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating\-point ABI to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes GCC to generate output containing
! library calls for floating\-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating\-point
! instructions, but still uses the soft\-float calling conventions.
! \&\fBhard\fR allows generation of floating\-point instructions
! and uses FPU\-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard\-float and soft\-float ABIs are not link\-compatible; you must
! compile your entire program with the same ABI, and link with a
  compatible set of libraries.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Select hardware or software floating\-point implementations.
  The default is soft float.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
  .PD 0
! .IP \fB\-mno\-double\-float\fR 4
  .IX Item "-mno-double-float"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
! double\-precision float instructions.  This is the default except
! when compiling for CK803.
! .IP \fB\-mfdivdu\fR 4
  .IX Item "-mfdivdu"
  .PD 0
! .IP \fB\-mno\-fdivdu\fR 4
  .IX Item "-mno-fdivdu"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
  \&\f(CW\*(C`frecipd\*(C'\fR, \f(CW\*(C`fsqrtd\*(C'\fR, and \f(CW\*(C`fdivd\*(C'\fR instructions.
! This is the default except when compiling for CK803.
! .IP \fB\-mfpu=\fR\fIfpu\fR 4
  .IX Item "-mfpu=fpu"
! Select the floating\-point processor.  This option can only be used with
  \&\fB\-mhard\-float\fR.
  Values for \fIfpu\fR are
  \&\fBfpv2_sf\fR (equivalent to \fB\-mno\-double\-float \-mno\-fdivdu\fR),
  \&\fBfpv2\fR (\fB\-mdouble\-float \-mno\-divdu\fR), and
  \&\fBfpv2_divd\fR (\fB\-mdouble\-float \-mdivdu\fR).
! .IP \fB\-melrw\fR 4
  .IX Item "-melrw"
  .PD 0
! .IP \fB\-mno\-elrw\fR 4
  .IX Item "-mno-elrw"
  .PD
  Enable the extended \f(CW\*(C`lrw\*(C'\fR instruction.  This option defaults to on
! for CK801 and off otherwise.
! .IP \fB\-mistack\fR 4
  .IX Item "-mistack"
  .PD 0
! .IP \fB\-mno\-istack\fR 4
  .IX Item "-mno-istack"
  .PD
  Enable interrupt stack instructions; the default is off.
  .Sp
  The \fB\-mistack\fR option is required to handle the
  \&\f(CW\*(C`interrupt\*(C'\fR and \f(CW\*(C`isr\*(C'\fR function attributes.
! .IP \fB\-mmp\fR 4
  .IX Item "-mmp"
  Enable multiprocessor instructions; the default is off.
! .IP \fB\-mcp\fR 4
  .IX Item "-mcp"
  Enable coprocessor instructions; the default is off.
! .IP \fB\-mcache\fR 4
  .IX Item "-mcache"
  Enable coprocessor instructions; the default is off.
! .IP \fB\-msecurity\fR 4
  .IX Item "-msecurity"
  Enable C\-SKY security instructions; the default is off.
! .IP \fB\-mtrust\fR 4
  .IX Item "-mtrust"
  Enable C\-SKY trust instructions; the default is off.
! .IP \fB\-mdsp\fR 4
  .IX Item "-mdsp"
  .PD 0
! .IP \fB\-medsp\fR 4
  .IX Item "-medsp"
! .IP \fB\-mvdsp\fR 4
  .IX Item "-mvdsp"
  .PD
! Enable C\-SKY DSP, Enhanced DSP, or Vector DSP instructions, respectively.
  All of these options default to off.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
  Generate divide instructions.  Default is off.
! .IP \fB\-msmart\fR 4
  .IX Item "-msmart"
  .PD 0
! .IP \fB\-mno\-smart\fR 4
  .IX Item "-mno-smart"
  .PD
  Generate code for Smart Mode, using only registers numbered 0\-7 to allow
! use of 16\-bit instructions.  This option is ignored for CK801 where this
! is the required behavior, and it defaults to on for CK802.
  For other targets, the default is off.
! .IP \fB\-mhigh\-registers\fR 4
  .IX Item "-mhigh-registers"
  .PD 0
! .IP \fB\-mno\-high\-registers\fR 4
  .IX Item "-mno-high-registers"
  .PD
  Generate code using the high registers numbered 16\-31.  This option
! is not supported on CK801, CK802, or CK803, and is enabled by default
  for other processors.
! .IP \fB\-manchor\fR 4
  .IX Item "-manchor"
  .PD 0
! .IP \fB\-mno\-anchor\fR 4
  .IX Item "-mno-anchor"
  .PD
  Generate code using global anchor symbol addresses.
! .IP \fB\-mpushpop\fR 4
  .IX Item "-mpushpop"
  .PD 0
! .IP \fB\-mno\-pushpop\fR 4
  .IX Item "-mno-pushpop"
  .PD
  Generate code using \f(CW\*(C`push\*(C'\fR and \f(CW\*(C`pop\*(C'\fR instructions.  This option
  defaults to on.
! .IP \fB\-mmultiple\-stld\fR 4
  .IX Item "-mmultiple-stld"
  .PD 0
! .IP \fB\-mstm\fR 4
  .IX Item "-mstm"
! .IP \fB\-mno\-multiple\-stld\fR 4
  .IX Item "-mno-multiple-stld"
! .IP \fB\-mno\-stm\fR 4
  .IX Item "-mno-stm"
  .PD
  Generate code using \f(CW\*(C`stm\*(C'\fR and \f(CW\*(C`ldm\*(C'\fR instructions.  This option
! isn\*(Aqt supported on CK801 but is enabled by default on other processors.
! .IP \fB\-mconstpool\fR 4
  .IX Item "-mconstpool"
  .PD 0
! .IP \fB\-mno\-constpool\fR 4
  .IX Item "-mno-constpool"
  .PD
  Create constant pools in the compiler instead of deferring it to the
  assembler.  This option is the default and required for correct code
! generation on CK801 and CK802, and is optional on other processors.
! .IP \fB\-mstack\-size\fR 4
  .IX Item "-mstack-size"
  .PD 0
! .IP \fB\-mno\-stack\-size\fR 4
  .IX Item "-mno-stack-size"
  .PD
  Emit \f(CW\*(C`.stack_size\*(C'\fR directives for each function in the assembly
  output.  This option defaults to off.
! .IP \fB\-mccrt\fR 4
  .IX Item "-mccrt"
  .PD 0
! .IP \fB\-mno\-ccrt\fR 4
  .IX Item "-mno-ccrt"
  .PD
  Generate code for the C\-SKY compiler runtime instead of libgcc.  This
  option defaults to off.
! .IP \fB\-mbranch\-cost=\fR\fIn\fR 4
  .IX Item "-mbranch-cost=n"
  Set the branch costs to roughly \f(CW\*(C`n\*(C'\fR instructions.  The default is 1.
! .IP \fB\-msched\-prolog\fR 4
  .IX Item "-msched-prolog"
  .PD 0
! .IP \fB\-mno\-sched\-prolog\fR 4
  .IX Item "-mno-sched-prolog"
  .PD
  Permit scheduling of function prologue and epilogue sequences.  Using
! this option can result in code that is not compliant with the C\-SKY V2 ABI
  prologue requirements and that cannot be debugged or backtraced.
  It is disabled by default.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Links the library libsemi.a which is in compatible with simulator. Applicable
! to ELF compiler only.
  .PP
  \fIDarwin Options\fR
  .IX Subsection "Darwin Options"
*************** to \s-1ELF\s0 compiler only.
*** 24434,24452 ****
  These options are defined for all architectures running the Darwin operating
  system.
  .PP
! \&\s-1FSF GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it creates
! an object file for the single architecture that \s-1GCC\s0 was built to
! target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
  \&\fB\-arch\fR options are used; it does so by running the compiler or
  linker multiple times and joining the results together with
  \&\fIlipo\fR.
  .PP
  The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
! \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
! that \s-1GCC\s0 is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
  \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
  .PP
! The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
  mismatch.  The assembler, \fIas\fR, only permits instructions to
  be used that are valid for the subtype of the file it is generating,
  so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
--- 24369,24387 ----
  These options are defined for all architectures running the Darwin operating
  system.
  .PP
! FSF GCC on Darwin does not create "fat" object files; it creates
! an object file for the single architecture that GCC was built to
! target.  Apple\*(Aqs GCC on Darwin does create "fat" files if multiple
  \&\fB\-arch\fR options are used; it does so by running the compiler or
  linker multiple times and joining the results together with
  \&\fIlipo\fR.
  .PP
  The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
! \&\fBi686\fR) is determined by the flags that specify the ISA
! that GCC is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
  \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
  .PP
! The Darwin tools vary in their behavior when presented with an ISA
  mismatch.  The assembler, \fIas\fR, only permits instructions to
  be used that are valid for the subtype of the file it is generating,
  so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
*************** restrictive subtype than its input files
*** 24456,24467 ****
  a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
  for executables, \fBld\fR, quietly gives the executable the most
  restrictive subtype of any of its input files.
! .IP "\fB\-F\fR\fIdir\fR" 4
  .IX Item "-Fdir"
  Add the framework directory \fIdir\fR to the head of the list of
  directories to be searched for header files.  These directories are
  interleaved with those specified by \fB\-I\fR options and are
! scanned in a left-to-right order.
  .Sp
  A framework directory is a directory with frameworks in it.  A
  framework is a directory with a \fIHeaders\fR and/or
--- 24391,24402 ----
  a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
  for executables, \fBld\fR, quietly gives the executable the most
  restrictive subtype of any of its input files.
! .IP \fB\-F\fR\fIdir\fR 4
  .IX Item "-Fdir"
  Add the framework directory \fIdir\fR to the head of the list of
  directories to be searched for header files.  These directories are
  interleaved with those specified by \fB\-I\fR options and are
! scanned in a left\-to\-right order.
  .Sp
  A framework directory is a directory with frameworks in it.  A
  framework is a directory with a \fIHeaders\fR and/or
*************** in \fI.framework\fR.  The name of a fram
*** 24470,24476 ****
  directory excluding the \fI.framework\fR.  Headers associated with
  the framework are found in one of those two directories, with
  \&\fIHeaders\fR being searched first.  A subframework is a framework
! directory that is in a framework's \fIFrameworks\fR directory.
  Includes of subframework headers can only appear in a header of a
  framework that contains the subframework, or in a sibling subframework
  header.  Two subframeworks are siblings if they occur in the same
--- 24405,24411 ----
  directory excluding the \fI.framework\fR.  Headers associated with
  the framework are found in one of those two directories, with
  \&\fIHeaders\fR being searched first.  A subframework is a framework
! directory that is in a framework\*(Aqs \fIFrameworks\fR directory.
  Includes of subframework headers can only appear in a header of a
  framework that contains the subframework, or in a sibling subframework
  header.  Two subframeworks are siblings if they occur in the same
*************** in \fI/System/Library/Frameworks\fR and
*** 24483,24522 ****
  \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
  the name of the framework and \fIheader.h\fR is found in the
  \&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
! .IP "\fB\-iframework\fR\fIdir\fR" 4
  .IX Item "-iframeworkdir"
  Like \fB\-F\fR except the directory is a treated as a system
  directory.  The main difference between this \fB\-iframework\fR and
  \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
  warn about constructs contained within header files found via
  \&\fIdir\fR.  This option is valid only for the C family of languages.
! .IP "\fB\-gused\fR" 4
  .IX Item "-gused"
  Emit debugging information for symbols that are used.  For stabs
  debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
! This is by default \s-1ON.\s0
! .IP "\fB\-gfull\fR" 4
  .IX Item "-gfull"
  Emit debugging information for all symbols and types.
! .IP "\fB\-fconstant\-cfstrings\fR" 4
  .IX Item "-fconstant-cfstrings"
  The \fB\-fconstant\-cfstrings\fR is an alias for \fB\-mconstant\-cfstrings\fR.
! .IP "\fB\-mconstant\-cfstrings\fR" 4
  .IX Item "-mconstant-cfstrings"
  When the NeXT runtime is being used (the default on these systems), override
  any \fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR
  literals to be laid out as constant CoreFoundation strings.
! .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
  .IX Item "-mmacosx-version-min=version"
  The earliest version of MacOS X that this executable will run on is
  \&\fIversion\fR.  Typical values supported for \fIversion\fR include \f(CW12\fR,
  \&\f(CW10.12\fR, and \f(CW10.5.8\fR.
  .Sp
! If the compiler was built to use the system's headers by default,
  then the default for this option is the system version on which the
  compiler is running, otherwise the default is to make choices that
  are compatible with as many systems and code bases as possible.
! .IP "\fB\-mkernel\fR" 4
  .IX Item "-mkernel"
  Enable kernel development mode.  The \fB\-mkernel\fR option sets
  \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
--- 24418,24457 ----
  \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
  the name of the framework and \fIheader.h\fR is found in the
  \&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
! .IP \fB\-iframework\fR\fIdir\fR 4
  .IX Item "-iframeworkdir"
  Like \fB\-F\fR except the directory is a treated as a system
  directory.  The main difference between this \fB\-iframework\fR and
  \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
  warn about constructs contained within header files found via
  \&\fIdir\fR.  This option is valid only for the C family of languages.
! .IP \fB\-gused\fR 4
  .IX Item "-gused"
  Emit debugging information for symbols that are used.  For stabs
  debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
! This is by default ON.
! .IP \fB\-gfull\fR 4
  .IX Item "-gfull"
  Emit debugging information for all symbols and types.
! .IP \fB\-fconstant\-cfstrings\fR 4
  .IX Item "-fconstant-cfstrings"
  The \fB\-fconstant\-cfstrings\fR is an alias for \fB\-mconstant\-cfstrings\fR.
! .IP \fB\-mconstant\-cfstrings\fR 4
  .IX Item "-mconstant-cfstrings"
  When the NeXT runtime is being used (the default on these systems), override
  any \fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR
  literals to be laid out as constant CoreFoundation strings.
! .IP \fB\-mmacosx\-version\-min=\fR\fIversion\fR 4
  .IX Item "-mmacosx-version-min=version"
  The earliest version of MacOS X that this executable will run on is
  \&\fIversion\fR.  Typical values supported for \fIversion\fR include \f(CW12\fR,
  \&\f(CW10.12\fR, and \f(CW10.5.8\fR.
  .Sp
! If the compiler was built to use the system\*(Aqs headers by default,
  then the default for this option is the system version on which the
  compiler is running, otherwise the default is to make choices that
  are compatible with as many systems and code bases as possible.
! .IP \fB\-mkernel\fR 4
  .IX Item "-mkernel"
  Enable kernel development mode.  The \fB\-mkernel\fR option sets
  \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
*************** Enable kernel development mode.  The \fB
*** 24525,24583 ****
  applicable.  This mode also sets \fB\-mno\-altivec\fR,
  \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
  \&\fB\-mlong\-branch\fR for PowerPC targets.
! .IP "\fB\-mone\-byte\-bool\fR" 4
  .IX Item "-mone-byte-bool"
  Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
! By default \f(CW\*(C`sizeof(bool)\*(C'\fR is \f(CW4\fR when compiling for
  Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
  option has no effect on x86.
  .Sp
! \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
  to generate code that is not binary compatible with code generated
  without that switch.  Using this switch may require recompiling all
  other modules in a program, including system libraries.  Use this
! switch to conform to a non-default data model.
! .IP "\fB\-mfix\-and\-continue\fR" 4
  .IX Item "-mfix-and-continue"
  .PD 0
! .IP "\fB\-ffix\-and\-continue\fR" 4
  .IX Item "-ffix-and-continue"
! .IP "\fB\-findirect\-data\fR" 4
  .IX Item "-findirect-data"
  .PD
  Generate code suitable for fast turnaround development, such as to
! allow \s-1GDB\s0 to dynamically load \fI.o\fR files into already-running
  programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
  are provided for backwards compatibility.
! .IP "\fB\-all_load\fR" 4
  .IX Item "-all_load"
  Loads all members of static archive libraries.
! See man \fIld\fR\|(1) for more information.
! .IP "\fB\-arch_errors_fatal\fR" 4
  .IX Item "-arch_errors_fatal"
  Cause the errors having to do with files that have the wrong architecture
  to be fatal.
! .IP "\fB\-bind_at_load\fR" 4
  .IX Item "-bind_at_load"
  Causes the output file to be marked such that the dynamic linker will
  bind all undefined references when the file is loaded or launched.
! .IP "\fB\-bundle\fR" 4
  .IX Item "-bundle"
! Produce a Mach-o bundle format file.
! See man \fIld\fR\|(1) for more information.
  .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
  .IX Item "-bundle_loader executable"
  This option specifies the \fIexecutable\fR that will load the build
! output file being linked.  See man \fIld\fR\|(1) for more information.
! .IP "\fB\-dynamiclib\fR" 4
  .IX Item "-dynamiclib"
! When passed this option, \s-1GCC\s0 produces a dynamic library instead of
  an executable when linking, using the Darwin \fIlibtool\fR command.
! .IP "\fB\-force_cpusubtype_ALL\fR" 4
  .IX Item "-force_cpusubtype_ALL"
! This causes \s-1GCC\s0's output file to have the \fB\s-1ALL\s0\fR subtype, instead of
  one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
! .IP "\fB\-nodefaultrpaths\fR" 4
  .IX Item "-nodefaultrpaths"
  Do not add default run paths for the compiler library directories to
  executables, modules or dynamic libraries. On macOS 10.5 and later,
--- 24460,24518 ----
  applicable.  This mode also sets \fB\-mno\-altivec\fR,
  \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
  \&\fB\-mlong\-branch\fR for PowerPC targets.
! .IP \fB\-mone\-byte\-bool\fR 4
  .IX Item "-mone-byte-bool"
  Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
! By default \f(CWsizeof(bool)\fR is \f(CW4\fR when compiling for
  Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
  option has no effect on x86.
  .Sp
! \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes GCC
  to generate code that is not binary compatible with code generated
  without that switch.  Using this switch may require recompiling all
  other modules in a program, including system libraries.  Use this
! switch to conform to a non\-default data model.
! .IP \fB\-mfix\-and\-continue\fR 4
  .IX Item "-mfix-and-continue"
  .PD 0
! .IP \fB\-ffix\-and\-continue\fR 4
  .IX Item "-ffix-and-continue"
! .IP \fB\-findirect\-data\fR 4
  .IX Item "-findirect-data"
  .PD
  Generate code suitable for fast turnaround development, such as to
! allow GDB to dynamically load \fI.o\fR files into already\-running
  programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
  are provided for backwards compatibility.
! .IP \fB\-all_load\fR 4
  .IX Item "-all_load"
  Loads all members of static archive libraries.
! See man \fBld\fR\|(1) for more information.
! .IP \fB\-arch_errors_fatal\fR 4
  .IX Item "-arch_errors_fatal"
  Cause the errors having to do with files that have the wrong architecture
  to be fatal.
! .IP \fB\-bind_at_load\fR 4
  .IX Item "-bind_at_load"
  Causes the output file to be marked such that the dynamic linker will
  bind all undefined references when the file is loaded or launched.
! .IP \fB\-bundle\fR 4
  .IX Item "-bundle"
! Produce a Mach\-o bundle format file.
! See man \fBld\fR\|(1) for more information.
  .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
  .IX Item "-bundle_loader executable"
  This option specifies the \fIexecutable\fR that will load the build
! output file being linked.  See man \fBld\fR\|(1) for more information.
! .IP \fB\-dynamiclib\fR 4
  .IX Item "-dynamiclib"
! When passed this option, GCC produces a dynamic library instead of
  an executable when linking, using the Darwin \fIlibtool\fR command.
! .IP \fB\-force_cpusubtype_ALL\fR 4
  .IX Item "-force_cpusubtype_ALL"
! This causes GCC\*(Aqs output file to have the \fBALL\fR subtype, instead of
  one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
! .IP \fB\-nodefaultrpaths\fR 4
  .IX Item "-nodefaultrpaths"
  Do not add default run paths for the compiler library directories to
  executables, modules or dynamic libraries. On macOS 10.5 and later,
*************** the embedded runpath is added by default
*** 24587,24817 ****
  .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
  .IX Item "-allowable_client client_name"
  .PD 0
! .IP "\fB\-client_name\fR" 4
  .IX Item "-client_name"
! .IP "\fB\-compatibility_version\fR" 4
  .IX Item "-compatibility_version"
! .IP "\fB\-current_version\fR" 4
  .IX Item "-current_version"
! .IP "\fB\-dead_strip\fR" 4
  .IX Item "-dead_strip"
! .IP "\fB\-dependency\-file\fR" 4
  .IX Item "-dependency-file"
! .IP "\fB\-dylib_file\fR" 4
  .IX Item "-dylib_file"
! .IP "\fB\-dylinker_install_name\fR" 4
  .IX Item "-dylinker_install_name"
! .IP "\fB\-dynamic\fR" 4
  .IX Item "-dynamic"
! .IP "\fB\-exported_symbols_list\fR" 4
  .IX Item "-exported_symbols_list"
! .IP "\fB\-filelist\fR" 4
  .IX Item "-filelist"
! .IP "\fB\-flat_namespace\fR" 4
  .IX Item "-flat_namespace"
! .IP "\fB\-force_flat_namespace\fR" 4
  .IX Item "-force_flat_namespace"
! .IP "\fB\-headerpad_max_install_names\fR" 4
  .IX Item "-headerpad_max_install_names"
! .IP "\fB\-image_base\fR" 4
  .IX Item "-image_base"
! .IP "\fB\-init\fR" 4
  .IX Item "-init"
! .IP "\fB\-install_name\fR" 4
  .IX Item "-install_name"
! .IP "\fB\-keep_private_externs\fR" 4
  .IX Item "-keep_private_externs"
! .IP "\fB\-multi_module\fR" 4
  .IX Item "-multi_module"
! .IP "\fB\-multiply_defined\fR" 4
  .IX Item "-multiply_defined"
! .IP "\fB\-multiply_defined_unused\fR" 4
  .IX Item "-multiply_defined_unused"
! .IP "\fB\-noall_load\fR" 4
  .IX Item "-noall_load"
! .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
  .IX Item "-no_dead_strip_inits_and_terms"
! .IP "\fB\-nofixprebinding\fR" 4
  .IX Item "-nofixprebinding"
! .IP "\fB\-nomultidefs\fR" 4
  .IX Item "-nomultidefs"
! .IP "\fB\-noprebind\fR" 4
  .IX Item "-noprebind"
! .IP "\fB\-noseglinkedit\fR" 4
  .IX Item "-noseglinkedit"
! .IP "\fB\-pagezero_size\fR" 4
  .IX Item "-pagezero_size"
! .IP "\fB\-prebind\fR" 4
  .IX Item "-prebind"
! .IP "\fB\-prebind_all_twolevel_modules\fR" 4
  .IX Item "-prebind_all_twolevel_modules"
! .IP "\fB\-private_bundle\fR" 4
  .IX Item "-private_bundle"
! .IP "\fB\-read_only_relocs\fR" 4
  .IX Item "-read_only_relocs"
! .IP "\fB\-sectalign\fR" 4
  .IX Item "-sectalign"
! .IP "\fB\-sectobjectsymbols\fR" 4
  .IX Item "-sectobjectsymbols"
! .IP "\fB\-whyload\fR" 4
  .IX Item "-whyload"
! .IP "\fB\-seg1addr\fR" 4
  .IX Item "-seg1addr"
! .IP "\fB\-sectcreate\fR" 4
  .IX Item "-sectcreate"
! .IP "\fB\-sectobjectsymbols\fR" 4
  .IX Item "-sectobjectsymbols"
! .IP "\fB\-sectorder\fR" 4
  .IX Item "-sectorder"
! .IP "\fB\-segaddr\fR" 4
  .IX Item "-segaddr"
! .IP "\fB\-segs_read_only_addr\fR" 4
  .IX Item "-segs_read_only_addr"
! .IP "\fB\-segs_read_write_addr\fR" 4
  .IX Item "-segs_read_write_addr"
! .IP "\fB\-seg_addr_table\fR" 4
  .IX Item "-seg_addr_table"
! .IP "\fB\-seg_addr_table_filename\fR" 4
  .IX Item "-seg_addr_table_filename"
! .IP "\fB\-seglinkedit\fR" 4
  .IX Item "-seglinkedit"
! .IP "\fB\-segprot\fR" 4
  .IX Item "-segprot"
! .IP "\fB\-segs_read_only_addr\fR" 4
  .IX Item "-segs_read_only_addr"
! .IP "\fB\-segs_read_write_addr\fR" 4
  .IX Item "-segs_read_write_addr"
! .IP "\fB\-single_module\fR" 4
  .IX Item "-single_module"
! .IP "\fB\-static\fR" 4
  .IX Item "-static"
! .IP "\fB\-sub_library\fR" 4
  .IX Item "-sub_library"
! .IP "\fB\-sub_umbrella\fR" 4
  .IX Item "-sub_umbrella"
! .IP "\fB\-twolevel_namespace\fR" 4
  .IX Item "-twolevel_namespace"
! .IP "\fB\-umbrella\fR" 4
  .IX Item "-umbrella"
! .IP "\fB\-undefined\fR" 4
  .IX Item "-undefined"
! .IP "\fB\-unexported_symbols_list\fR" 4
  .IX Item "-unexported_symbols_list"
! .IP "\fB\-weak_reference_mismatches\fR" 4
  .IX Item "-weak_reference_mismatches"
! .IP "\fB\-whatsloaded\fR" 4
  .IX Item "-whatsloaded"
  .PD
  These options are passed to the Darwin linker.  The Darwin linker man page
  describes them in detail.
  .PP
! \fI\s-1DEC\s0 Alpha Options\fR
  .IX Subsection "DEC Alpha Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
! .IP "\fB\-mno\-soft\-float\fR" 4
  .IX Item "-mno-soft-float"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating-point instructions for
! floating-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating-point
  operations.  Unless they are replaced by routines that emulate the
! floating-point operations, or compiled in such a way as to call such
! emulations routines, these routines issue floating-point
! operations.   If you are compiling for an Alpha without floating-point
  operations, you must ensure that the library is built so as not to call
  them.
  .Sp
! Note that Alpha implementations without floating-point operations are
! required to have floating-point registers.
! .IP "\fB\-mfp\-reg\fR" 4
  .IX Item "-mfp-reg"
  .PD 0
! .IP "\fB\-mno\-fp\-regs\fR" 4
  .IX Item "-mno-fp-regs"
  .PD
! Generate code that uses (does not use) the floating-point register set.
! \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
! register set is not used, floating-point operands are passed in integer
! registers as if they were integers and floating-point results are passed
! in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
! so any function with a floating-point argument or return value called by code
  compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
  option.
  .Sp
  A typical use of this option is building a kernel that does not use,
! and hence need not save and restore, any floating-point registers.
! .IP "\fB\-mieee\fR" 4
  .IX Item "-mieee"
! The Alpha architecture implements floating-point hardware optimized for
! maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
  standard.  However, for full compliance, software assistance is
! required.  This option generates code fully IEEE-compliant code
! \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
  If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
  defined during compilation.  The resulting code is less efficient but is
! able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
! values such as not-a-number and plus/minus infinity.  Other Alpha
  compilers call this option \fB\-ieee_with_no_inexact\fR.
! .IP "\fB\-mieee\-with\-inexact\fR" 4
  .IX Item "-mieee-with-inexact"
  This is like \fB\-mieee\fR except the generated code also maintains
! the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
! generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
  \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
  macro.  On some Alpha implementations the resulting code may execute
  significantly slower than the code generated by default.  Since there is
! very little code that depends on the \fIinexact-flag\fR, you should
  normally not specify this option.  Other Alpha compilers call this
  option \fB\-ieee_with_inexact\fR.
! .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
  .IX Item "-mfp-trap-mode=trap-mode"
! This option controls what floating-point related traps are enabled.
! Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
  The trap mode can be set to one of four values:
  .RS 4
! .IP "\fBn\fR" 4
  .IX Item "n"
  This is the default (normal) setting.  The only traps that are enabled
  are the ones that cannot be disabled in software (e.g., division by zero
  trap).
! .IP "\fBu\fR" 4
  .IX Item "u"
  In addition to the traps enabled by \fBn\fR, underflow traps are enabled
  as well.
! .IP "\fBsu\fR" 4
  .IX Item "su"
  Like \fBu\fR, but the instructions are marked to be safe for software
  completion (see Alpha architecture manual for details).
! .IP "\fBsui\fR" 4
  .IX Item "sui"
  Like \fBsu\fR, but inexact traps are enabled as well.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
  .IX Item "-mfp-rounding-mode=rounding-mode"
! Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
! \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
  of:
  .RS 4
! .IP "\fBn\fR" 4
  .IX Item "n"
! Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
  the nearest machine number or towards the even machine number in case
  of a tie.
! .IP "\fBm\fR" 4
  .IX Item "m"
  Round towards minus infinity.
! .IP "\fBc\fR" 4
  .IX Item "c"
! Chopped rounding mode.  Floating-point numbers are rounded towards zero.
! .IP "\fBd\fR" 4
  .IX Item "d"
! Dynamic rounding mode.  A field in the floating-point control register
  (\fIfpcr\fR, see Alpha architecture reference manual) controls the
  rounding mode in effect.  The C library initializes this register for
  rounding towards plus infinity.  Thus, unless your program modifies the
--- 24522,24752 ----
  .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
  .IX Item "-allowable_client client_name"
  .PD 0
! .IP \fB\-client_name\fR 4
  .IX Item "-client_name"
! .IP \fB\-compatibility_version\fR 4
  .IX Item "-compatibility_version"
! .IP \fB\-current_version\fR 4
  .IX Item "-current_version"
! .IP \fB\-dead_strip\fR 4
  .IX Item "-dead_strip"
! .IP \fB\-dependency\-file\fR 4
  .IX Item "-dependency-file"
! .IP \fB\-dylib_file\fR 4
  .IX Item "-dylib_file"
! .IP \fB\-dylinker_install_name\fR 4
  .IX Item "-dylinker_install_name"
! .IP \fB\-dynamic\fR 4
  .IX Item "-dynamic"
! .IP \fB\-exported_symbols_list\fR 4
  .IX Item "-exported_symbols_list"
! .IP \fB\-filelist\fR 4
  .IX Item "-filelist"
! .IP \fB\-flat_namespace\fR 4
  .IX Item "-flat_namespace"
! .IP \fB\-force_flat_namespace\fR 4
  .IX Item "-force_flat_namespace"
! .IP \fB\-headerpad_max_install_names\fR 4
  .IX Item "-headerpad_max_install_names"
! .IP \fB\-image_base\fR 4
  .IX Item "-image_base"
! .IP \fB\-init\fR 4
  .IX Item "-init"
! .IP \fB\-install_name\fR 4
  .IX Item "-install_name"
! .IP \fB\-keep_private_externs\fR 4
  .IX Item "-keep_private_externs"
! .IP \fB\-multi_module\fR 4
  .IX Item "-multi_module"
! .IP \fB\-multiply_defined\fR 4
  .IX Item "-multiply_defined"
! .IP \fB\-multiply_defined_unused\fR 4
  .IX Item "-multiply_defined_unused"
! .IP \fB\-noall_load\fR 4
  .IX Item "-noall_load"
! .IP \fB\-no_dead_strip_inits_and_terms\fR 4
  .IX Item "-no_dead_strip_inits_and_terms"
! .IP \fB\-nofixprebinding\fR 4
  .IX Item "-nofixprebinding"
! .IP \fB\-nomultidefs\fR 4
  .IX Item "-nomultidefs"
! .IP \fB\-noprebind\fR 4
  .IX Item "-noprebind"
! .IP \fB\-noseglinkedit\fR 4
  .IX Item "-noseglinkedit"
! .IP \fB\-pagezero_size\fR 4
  .IX Item "-pagezero_size"
! .IP \fB\-prebind\fR 4
  .IX Item "-prebind"
! .IP \fB\-prebind_all_twolevel_modules\fR 4
  .IX Item "-prebind_all_twolevel_modules"
! .IP \fB\-private_bundle\fR 4
  .IX Item "-private_bundle"
! .IP \fB\-read_only_relocs\fR 4
  .IX Item "-read_only_relocs"
! .IP \fB\-sectalign\fR 4
  .IX Item "-sectalign"
! .IP \fB\-sectobjectsymbols\fR 4
  .IX Item "-sectobjectsymbols"
! .IP \fB\-whyload\fR 4
  .IX Item "-whyload"
! .IP \fB\-seg1addr\fR 4
  .IX Item "-seg1addr"
! .IP \fB\-sectcreate\fR 4
  .IX Item "-sectcreate"
! .IP \fB\-sectobjectsymbols\fR 4
  .IX Item "-sectobjectsymbols"
! .IP \fB\-sectorder\fR 4
  .IX Item "-sectorder"
! .IP \fB\-segaddr\fR 4
  .IX Item "-segaddr"
! .IP \fB\-segs_read_only_addr\fR 4
  .IX Item "-segs_read_only_addr"
! .IP \fB\-segs_read_write_addr\fR 4
  .IX Item "-segs_read_write_addr"
! .IP \fB\-seg_addr_table\fR 4
  .IX Item "-seg_addr_table"
! .IP \fB\-seg_addr_table_filename\fR 4
  .IX Item "-seg_addr_table_filename"
! .IP \fB\-seglinkedit\fR 4
  .IX Item "-seglinkedit"
! .IP \fB\-segprot\fR 4
  .IX Item "-segprot"
! .IP \fB\-segs_read_only_addr\fR 4
  .IX Item "-segs_read_only_addr"
! .IP \fB\-segs_read_write_addr\fR 4
  .IX Item "-segs_read_write_addr"
! .IP \fB\-single_module\fR 4
  .IX Item "-single_module"
! .IP \fB\-static\fR 4
  .IX Item "-static"
! .IP \fB\-sub_library\fR 4
  .IX Item "-sub_library"
! .IP \fB\-sub_umbrella\fR 4
  .IX Item "-sub_umbrella"
! .IP \fB\-twolevel_namespace\fR 4
  .IX Item "-twolevel_namespace"
! .IP \fB\-umbrella\fR 4
  .IX Item "-umbrella"
! .IP \fB\-undefined\fR 4
  .IX Item "-undefined"
! .IP \fB\-unexported_symbols_list\fR 4
  .IX Item "-unexported_symbols_list"
! .IP \fB\-weak_reference_mismatches\fR 4
  .IX Item "-weak_reference_mismatches"
! .IP \fB\-whatsloaded\fR 4
  .IX Item "-whatsloaded"
  .PD
  These options are passed to the Darwin linker.  The Darwin linker man page
  describes them in detail.
  .PP
! \fIDEC Alpha Options\fR
  .IX Subsection "DEC Alpha Options"
  .PP
! These \fB\-m\fR options are defined for the DEC Alpha implementations:
! .IP \fB\-mno\-soft\-float\fR 4
  .IX Item "-mno-soft-float"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating\-point instructions for
! floating\-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating\-point
  operations.  Unless they are replaced by routines that emulate the
! floating\-point operations, or compiled in such a way as to call such
! emulations routines, these routines issue floating\-point
! operations.   If you are compiling for an Alpha without floating\-point
  operations, you must ensure that the library is built so as not to call
  them.
  .Sp
! Note that Alpha implementations without floating\-point operations are
! required to have floating\-point registers.
! .IP \fB\-mfp\-reg\fR 4
  .IX Item "-mfp-reg"
  .PD 0
! .IP \fB\-mno\-fp\-regs\fR 4
  .IX Item "-mno-fp-regs"
  .PD
! Generate code that uses (does not use) the floating\-point register set.
! \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating\-point
! register set is not used, floating\-point operands are passed in integer
! registers as if they were integers and floating\-point results are passed
! in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non\-standard calling sequence,
! so any function with a floating\-point argument or return value called by code
  compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
  option.
  .Sp
  A typical use of this option is building a kernel that does not use,
! and hence need not save and restore, any floating\-point registers.
! .IP \fB\-mieee\fR 4
  .IX Item "-mieee"
! The Alpha architecture implements floating\-point hardware optimized for
! maximum performance.  It is mostly compliant with the IEEE floating\-point
  standard.  However, for full compliance, software assistance is
! required.  This option generates code fully IEEE\-compliant code
! \&\fIexcept\fR that the \fIinexact\-flag\fR is not maintained (see below).
  If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
  defined during compilation.  The resulting code is less efficient but is
! able to correctly support denormalized numbers and exceptional IEEE
! values such as not\-a\-number and plus/minus infinity.  Other Alpha
  compilers call this option \fB\-ieee_with_no_inexact\fR.
! .IP \fB\-mieee\-with\-inexact\fR 4
  .IX Item "-mieee-with-inexact"
  This is like \fB\-mieee\fR except the generated code also maintains
! the IEEE \fIinexact\-flag\fR.  Turning on this option causes the
! generated code to implement fully\-compliant IEEE math.  In addition to
  \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
  macro.  On some Alpha implementations the resulting code may execute
  significantly slower than the code generated by default.  Since there is
! very little code that depends on the \fIinexact\-flag\fR, you should
  normally not specify this option.  Other Alpha compilers call this
  option \fB\-ieee_with_inexact\fR.
! .IP \fB\-mfp\-trap\-mode=\fR\fItrap\-mode\fR 4
  .IX Item "-mfp-trap-mode=trap-mode"
! This option controls what floating\-point related traps are enabled.
! Other Alpha compilers call this option \fB\-fptm\fR \fItrap\-mode\fR.
  The trap mode can be set to one of four values:
  .RS 4
! .IP \fBn\fR 4
  .IX Item "n"
  This is the default (normal) setting.  The only traps that are enabled
  are the ones that cannot be disabled in software (e.g., division by zero
  trap).
! .IP \fBu\fR 4
  .IX Item "u"
  In addition to the traps enabled by \fBn\fR, underflow traps are enabled
  as well.
! .IP \fBsu\fR 4
  .IX Item "su"
  Like \fBu\fR, but the instructions are marked to be safe for software
  completion (see Alpha architecture manual for details).
! .IP \fBsui\fR 4
  .IX Item "sui"
  Like \fBsu\fR, but inexact traps are enabled as well.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfp\-rounding\-mode=\fR\fIrounding\-mode\fR 4
  .IX Item "-mfp-rounding-mode=rounding-mode"
! Selects the IEEE rounding mode.  Other Alpha compilers call this option
! \&\fB\-fprm\fR \fIrounding\-mode\fR.  The \fIrounding\-mode\fR can be one
  of:
  .RS 4
! .IP \fBn\fR 4
  .IX Item "n"
! Normal IEEE rounding mode.  Floating\-point numbers are rounded towards
  the nearest machine number or towards the even machine number in case
  of a tie.
! .IP \fBm\fR 4
  .IX Item "m"
  Round towards minus infinity.
! .IP \fBc\fR 4
  .IX Item "c"
! Chopped rounding mode.  Floating\-point numbers are rounded towards zero.
! .IP \fBd\fR 4
  .IX Item "d"
! Dynamic rounding mode.  A field in the floating\-point control register
  (\fIfpcr\fR, see Alpha architecture reference manual) controls the
  rounding mode in effect.  The C library initializes this register for
  rounding towards plus infinity.  Thus, unless your program modifies the
*************** rounding towards plus infinity.  Thus, u
*** 24819,24923 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
  .IX Item "-mtrap-precision=trap-precision"
! In the Alpha architecture, floating-point traps are imprecise.  This
  means without software assistance it is impossible to recover from a
  floating trap and program execution normally needs to be terminated.
! \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
! in determining the exact location that caused a floating-point trap.
  Depending on the requirements of an application, different levels of
  precisions can be selected:
  .RS 4
! .IP "\fBp\fR" 4
  .IX Item "p"
  Program precision.  This option is the default and means a trap handler
! can only identify which program caused a floating-point exception.
! .IP "\fBf\fR" 4
  .IX Item "f"
  Function precision.  The trap handler can determine the function that
! caused a floating-point exception.
! .IP "\fBi\fR" 4
  .IX Item "i"
  Instruction precision.  The trap handler can determine the exact
! instruction that caused a floating-point exception.
  .RE
  .RS 4
  .Sp
  Other Alpha compilers provide the equivalent options called
  \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
  .RE
! .IP "\fB\-mieee\-conformant\fR" 4
  .IX Item "-mieee-conformant"
! This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
  use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
  \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
  is to emit the line \fB.eflag 48\fR in the function prologue of the
  generated assembly file.
! .IP "\fB\-mbuild\-constants\fR" 4
  .IX Item "-mbuild-constants"
! Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
  see if it can construct it from smaller constants in two or three
  instructions.  If it cannot, it outputs the constant as a literal and
  generates code to load it from the data segment at run time.
  .Sp
! Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
  using code, even if it takes more instructions (the maximum is six).
  .Sp
  You typically use this option to build a shared library dynamic
  loader.  Itself a shared library, it must relocate itself in memory
  before it can find the variables and constants in its own data segment.
! .IP "\fB\-mbwx\fR" 4
  .IX Item "-mbwx"
  .PD 0
! .IP "\fB\-mno\-bwx\fR" 4
  .IX Item "-mno-bwx"
! .IP "\fB\-mcix\fR" 4
  .IX Item "-mcix"
! .IP "\fB\-mno\-cix\fR" 4
  .IX Item "-mno-cix"
! .IP "\fB\-mfix\fR" 4
  .IX Item "-mfix"
! .IP "\fB\-mno\-fix\fR" 4
  .IX Item "-mno-fix"
! .IP "\fB\-mmax\fR" 4
  .IX Item "-mmax"
! .IP "\fB\-mno\-max\fR" 4
  .IX Item "-mno-max"
  .PD
! Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX,
! CIX, FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
! sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
! of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none is specified.
! .IP "\fB\-mfloat\-vax\fR" 4
  .IX Item "-mfloat-vax"
  .PD 0
! .IP "\fB\-mfloat\-ieee\fR" 4
  .IX Item "-mfloat-ieee"
  .PD
! Generate code that uses (does not use) \s-1VAX F\s0 and G floating-point
! arithmetic instead of \s-1IEEE\s0 single and double precision.
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP "\fB\-mno\-explicit\-relocs\fR" 4
  .IX Item "-mno-explicit-relocs"
  .PD
  Older Alpha assemblers provided no way to generate symbol relocations
  except via assembler macros.  Use of these macros does not allow
! optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
  supports a new syntax that allows the compiler to explicitly mark
  which relocations should apply to which instructions.  This option
! is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
  the assembler when it is built and sets the default accordingly.
! .IP "\fB\-msmall\-data\fR" 4
  .IX Item "-msmall-data"
  .PD 0
! .IP "\fB\-mlarge\-data\fR" 4
  .IX Item "-mlarge-data"
  .PD
  When \fB\-mexplicit\-relocs\fR is in effect, static data is
! accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
  is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
  (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
  16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
--- 24754,24858 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mtrap\-precision=\fR\fItrap\-precision\fR 4
  .IX Item "-mtrap-precision=trap-precision"
! In the Alpha architecture, floating\-point traps are imprecise.  This
  means without software assistance it is impossible to recover from a
  floating trap and program execution normally needs to be terminated.
! GCC can generate code that can assist operating system trap handlers
! in determining the exact location that caused a floating\-point trap.
  Depending on the requirements of an application, different levels of
  precisions can be selected:
  .RS 4
! .IP \fBp\fR 4
  .IX Item "p"
  Program precision.  This option is the default and means a trap handler
! can only identify which program caused a floating\-point exception.
! .IP \fBf\fR 4
  .IX Item "f"
  Function precision.  The trap handler can determine the function that
! caused a floating\-point exception.
! .IP \fBi\fR 4
  .IX Item "i"
  Instruction precision.  The trap handler can determine the exact
! instruction that caused a floating\-point exception.
  .RE
  .RS 4
  .Sp
  Other Alpha compilers provide the equivalent options called
  \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
  .RE
! .IP \fB\-mieee\-conformant\fR 4
  .IX Item "-mieee-conformant"
! This option marks the generated code as IEEE conformant.  You must not
  use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
  \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
  is to emit the line \fB.eflag 48\fR in the function prologue of the
  generated assembly file.
! .IP \fB\-mbuild\-constants\fR 4
  .IX Item "-mbuild-constants"
! Normally GCC examines a 32\- or 64\-bit integer constant to
  see if it can construct it from smaller constants in two or three
  instructions.  If it cannot, it outputs the constant as a literal and
  generates code to load it from the data segment at run time.
  .Sp
! Use this option to require GCC to construct \fIall\fR integer constants
  using code, even if it takes more instructions (the maximum is six).
  .Sp
  You typically use this option to build a shared library dynamic
  loader.  Itself a shared library, it must relocate itself in memory
  before it can find the variables and constants in its own data segment.
! .IP \fB\-mbwx\fR 4
  .IX Item "-mbwx"
  .PD 0
! .IP \fB\-mno\-bwx\fR 4
  .IX Item "-mno-bwx"
! .IP \fB\-mcix\fR 4
  .IX Item "-mcix"
! .IP \fB\-mno\-cix\fR 4
  .IX Item "-mno-cix"
! .IP \fB\-mfix\fR 4
  .IX Item "-mfix"
! .IP \fB\-mno\-fix\fR 4
  .IX Item "-mno-fix"
! .IP \fB\-mmax\fR 4
  .IX Item "-mmax"
! .IP \fB\-mno\-max\fR 4
  .IX Item "-mno-max"
  .PD
! Indicate whether GCC should generate code to use the optional BWX,
! CIX, FIX and MAX instruction sets.  The default is to use the instruction
! sets supported by the CPU type specified via \fB\-mcpu=\fR option or that
! of the CPU on which GCC was built if none is specified.
! .IP \fB\-mfloat\-vax\fR 4
  .IX Item "-mfloat-vax"
  .PD 0
! .IP \fB\-mfloat\-ieee\fR 4
  .IX Item "-mfloat-ieee"
  .PD
! Generate code that uses (does not use) VAX F and G floating\-point
! arithmetic instead of IEEE single and double precision.
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP \fB\-mno\-explicit\-relocs\fR 4
  .IX Item "-mno-explicit-relocs"
  .PD
  Older Alpha assemblers provided no way to generate symbol relocations
  except via assembler macros.  Use of these macros does not allow
! optimal instruction scheduling.  GNU binutils as of version 2.12
  supports a new syntax that allows the compiler to explicitly mark
  which relocations should apply to which instructions.  This option
! is mostly useful for debugging, as GCC detects the capabilities of
  the assembler when it is built and sets the default accordingly.
! .IP \fB\-msmall\-data\fR 4
  .IX Item "-msmall-data"
  .PD 0
! .IP \fB\-mlarge\-data\fR 4
  .IX Item "-mlarge-data"
  .PD
  When \fB\-mexplicit\-relocs\fR is in effect, static data is
! accessed via \fIgp\-relative\fR relocations.  When \fB\-msmall\-data\fR
  is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
  (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
  16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
*************** directly accessed via a single instructi
*** 24927,24940 ****
  The default is \fB\-mlarge\-data\fR.  With this option the data area
  is limited to just below 2GB.  Programs that require more than 2GB of
  data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
! heap instead of in the program's data segment.
  .Sp
  When generating code for shared libraries, \fB\-fpic\fR implies
  \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
! .IP "\fB\-msmall\-text\fR" 4
  .IX Item "-msmall-text"
  .PD 0
! .IP "\fB\-mlarge\-text\fR" 4
  .IX Item "-mlarge-text"
  .PD
  When \fB\-msmall\-text\fR is used, the compiler assumes that the
--- 24862,24875 ----
  The default is \fB\-mlarge\-data\fR.  With this option the data area
  is limited to just below 2GB.  Programs that require more than 2GB of
  data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
! heap instead of in the program\*(Aqs data segment.
  .Sp
  When generating code for shared libraries, \fB\-fpic\fR implies
  \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
! .IP \fB\-msmall\-text\fR 4
  .IX Item "-msmall-text"
  .PD 0
! .IP \fB\-mlarge\-text\fR 4
  .IX Item "-mlarge-text"
  .PD
  When \fB\-msmall\-text\fR is used, the compiler assumes that the
*************** same \f(CW$gp\fR value, and thus reduce
*** 24945,25026 ****
  required for a function call from 4 to 1.
  .Sp
  The default is \fB\-mlarge\-text\fR.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set and instruction scheduling parameters for
! machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
! style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
! parameters for the \s-1EV4, EV5\s0 and \s-1EV6\s0 family of processors and
  chooses the default values for the instruction set from the processor
! you specify.  If you do not specify a processor type, \s-1GCC\s0 defaults
  to the processor on which the compiler was built.
  .Sp
  Supported values for \fIcpu_type\fR are
  .RS 4
! .IP "\fBev4\fR" 4
  .IX Item "ev4"
  .PD 0
! .IP "\fBev45\fR" 4
  .IX Item "ev45"
! .IP "\fB21064\fR" 4
  .IX Item "21064"
  .PD
! Schedules as an \s-1EV4\s0 and has no instruction set extensions.
! .IP "\fBev5\fR" 4
  .IX Item "ev5"
  .PD 0
! .IP "\fB21164\fR" 4
  .IX Item "21164"
  .PD
! Schedules as an \s-1EV5\s0 and has no instruction set extensions.
! .IP "\fBev56\fR" 4
  .IX Item "ev56"
  .PD 0
! .IP "\fB21164a\fR" 4
  .IX Item "21164a"
  .PD
! Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
! .IP "\fBpca56\fR" 4
  .IX Item "pca56"
  .PD 0
! .IP "\fB21164pc\fR" 4
  .IX Item "21164pc"
! .IP "\fB21164PC\fR" 4
  .IX Item "21164PC"
  .PD
! Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
! .IP "\fBev6\fR" 4
  .IX Item "ev6"
  .PD 0
! .IP "\fB21264\fR" 4
  .IX Item "21264"
  .PD
! Schedules as an \s-1EV6\s0 and supports the \s-1BWX, FIX,\s0 and \s-1MAX\s0 extensions.
! .IP "\fBev67\fR" 4
  .IX Item "ev67"
  .PD 0
! .IP "\fB21264a\fR" 4
  .IX Item "21264a"
  .PD
! Schedules as an \s-1EV6\s0 and supports the \s-1BWX, CIX, FIX,\s0 and \s-1MAX\s0 extensions.
  .RE
  .RS 4
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
  .RE
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set only the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR.  The instruction set is not changed.
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
! .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
  .IX Item "-mmemory-latency=time"
  Sets the latency the scheduler should assume for typical memory
  references as seen by the application.  This number is highly
--- 24880,24961 ----
  required for a function call from 4 to 1.
  .Sp
  The default is \fB\-mlarge\-text\fR.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set and instruction scheduling parameters for
! machine type \fIcpu_type\fR.  You can specify either the \fBEV\fR
! style name or the corresponding chip number.  GCC supports scheduling
! parameters for the EV4, EV5 and EV6 family of processors and
  chooses the default values for the instruction set from the processor
! you specify.  If you do not specify a processor type, GCC defaults
  to the processor on which the compiler was built.
  .Sp
  Supported values for \fIcpu_type\fR are
  .RS 4
! .IP \fBev4\fR 4
  .IX Item "ev4"
  .PD 0
! .IP \fBev45\fR 4
  .IX Item "ev45"
! .IP \fB21064\fR 4
  .IX Item "21064"
  .PD
! Schedules as an EV4 and has no instruction set extensions.
! .IP \fBev5\fR 4
  .IX Item "ev5"
  .PD 0
! .IP \fB21164\fR 4
  .IX Item "21164"
  .PD
! Schedules as an EV5 and has no instruction set extensions.
! .IP \fBev56\fR 4
  .IX Item "ev56"
  .PD 0
! .IP \fB21164a\fR 4
  .IX Item "21164a"
  .PD
! Schedules as an EV5 and supports the BWX extension.
! .IP \fBpca56\fR 4
  .IX Item "pca56"
  .PD 0
! .IP \fB21164pc\fR 4
  .IX Item "21164pc"
! .IP \fB21164PC\fR 4
  .IX Item "21164PC"
  .PD
! Schedules as an EV5 and supports the BWX and MAX extensions.
! .IP \fBev6\fR 4
  .IX Item "ev6"
  .PD 0
! .IP \fB21264\fR 4
  .IX Item "21264"
  .PD
! Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
! .IP \fBev67\fR 4
  .IX Item "ev67"
  .PD 0
! .IP \fB21264a\fR 4
  .IX Item "21264a"
  .PD
! Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
  .RE
  .RS 4
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if GCC does not recognize
  the processor.
  .RE
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set only the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR.  The instruction set is not changed.
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mtune=native\fR has no effect if GCC does not recognize
  the processor.
! .IP \fB\-mmemory\-latency=\fR\fItime\fR 4
  .IX Item "-mmemory-latency=time"
  Sets the latency the scheduler should assume for typical memory
  references as seen by the application.  This number is highly
*************** and the size of the external cache on th
*** 25029,25154 ****
  .Sp
  Valid options for \fItime\fR are
  .RS 4
! .IP "\fInumber\fR" 4
  .IX Item "number"
  A decimal number representing clock cycles.
! .IP "\fBL1\fR" 4
  .IX Item "L1"
  .PD 0
! .IP "\fBL2\fR" 4
  .IX Item "L2"
! .IP "\fBL3\fR" 4
  .IX Item "L3"
! .IP "\fBmain\fR" 4
  .IX Item "main"
  .PD
  The compiler contains estimates of the number of clock cycles for
! \&\*(L"typical\*(R" \s-1EV4 & EV5\s0 hardware for the Level 1, 2 & 3 caches
  (also called Dcache, Scache, and Bcache), as well as to main memory.
! Note that L3 is only valid for \s-1EV5.\s0
  .RE
  .RS 4
  .RE
  .PP
  \fIeBPF Options\fR
  .IX Subsection "eBPF Options"
! .IP "\fB\-mframe\-limit=\fR\fIbytes\fR" 4
  .IX Item "-mframe-limit=bytes"
  This specifies the hard limit for frame sizes, in bytes.  Currently,
  the value that can be specified should be less than or equal to
  \&\fB32767\fR.  Defaults to whatever limit is imposed by the version of
  the Linux kernel targeted.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.  This is the default.
! .IP "\fB\-mjmpext\fR" 4
  .IX Item "-mjmpext"
  .PD 0
! .IP "\fB\-mno\-jmpext\fR" 4
  .IX Item "-mno-jmpext"
  .PD
! Enable or disable generation of extra conditional-branch instructions.
! Enabled for \s-1CPU\s0 v2 and above.
! .IP "\fB\-mjmp32\fR" 4
  .IX Item "-mjmp32"
  .PD 0
! .IP "\fB\-mno\-jmp32\fR" 4
  .IX Item "-mno-jmp32"
  .PD
  Enable or disable generation of 32\-bit jump instructions.
! Enabled for \s-1CPU\s0 v3 and above.
! .IP "\fB\-malu32\fR" 4
  .IX Item "-malu32"
  .PD 0
! .IP "\fB\-mno\-alu32\fR" 4
  .IX Item "-mno-alu32"
  .PD
! Enable or disable generation of 32\-bit \s-1ALU\s0 instructions.
! Enabled for \s-1CPU\s0 v3 and above.
! .IP "\fB\-mv3\-atomics\fR" 4
  .IX Item "-mv3-atomics"
  .PD 0
! .IP "\fB\-mno\-v3\-atomics\fR" 4
  .IX Item "-mno-v3-atomics"
  .PD
  Enable or disable instructions for general atomic operations introduced
! in \s-1CPU\s0 v3.  Enabled for \s-1CPU\s0 v3 and above.
! .IP "\fB\-mbswap\fR" 4
  .IX Item "-mbswap"
  .PD 0
! .IP "\fB\-mno\-bswap\fR" 4
  .IX Item "-mno-bswap"
  .PD
! Enable or disable byte swap instructions.  Enabled for \s-1CPU\s0 v4 and above.
! .IP "\fB\-msdiv\fR" 4
  .IX Item "-msdiv"
  .PD 0
! .IP "\fB\-mno\-sdiv\fR" 4
  .IX Item "-mno-sdiv"
  .PD
  Enable or disable signed division and modulus instructions.  Enabled for
! \&\s-1CPU\s0 v4 and above.
! .IP "\fB\-msmov\fR" 4
  .IX Item "-msmov"
  .PD 0
! .IP "\fB\-mno\-smov\fR" 4
  .IX Item "-mno-smov"
  .PD
! Enable or disable sign-extending move and memory load instructions.
! Enabled for \s-1CPU\s0 v4 and above.
! .IP "\fB\-mcpu=\fR\fIversion\fR" 4
  .IX Item "-mcpu=version"
! This specifies which version of the eBPF \s-1ISA\s0 to target. Newer versions
  may not be supported by all kernels. The default is \fBv4\fR.
  .Sp
  Supported values for \fIversion\fR are:
  .RS 4
! .IP "\fBv1\fR" 4
  .IX Item "v1"
! The first stable eBPF \s-1ISA\s0 with no special features or extensions.
! .IP "\fBv2\fR" 4
  .IX Item "v2"
  Supports the jump extensions, as in \fB\-mjmpext\fR.
! .IP "\fBv3\fR" 4
  .IX Item "v3"
  All features of v2, plus:
  .RS 4
  .IP "\-<32\-bit jump operations, as in \fB\-mjmp32\fR>" 4
  .IX Item "-<32-bit jump operations, as in -mjmp32>"
  .PD 0
! .IP "\-<32\-bit \s-1ALU\s0 operations, as in \fB\-malu32\fR>" 4
  .IX Item "-<32-bit ALU operations, as in -malu32>"
  .IP "\-<general atomic operations, as in \fB\-mv3\-atomics\fR>" 4
  .IX Item "-<general atomic operations, as in -mv3-atomics>"
  .RE
  .RS 4
  .RE
! .IP "\fBv4\fR" 4
  .IX Item "v4"
- .PD
  All features of v3, plus:
  .RS 4
  .IP "\-<Byte swap instructions, as in \fB\-mbswap\fR>" 4
--- 24964,25089 ----
  .Sp
  Valid options for \fItime\fR are
  .RS 4
! .IP \fInumber\fR 4
  .IX Item "number"
  A decimal number representing clock cycles.
! .IP \fBL1\fR 4
  .IX Item "L1"
  .PD 0
! .IP \fBL2\fR 4
  .IX Item "L2"
! .IP \fBL3\fR 4
  .IX Item "L3"
! .IP \fBmain\fR 4
  .IX Item "main"
  .PD
  The compiler contains estimates of the number of clock cycles for
! "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
  (also called Dcache, Scache, and Bcache), as well as to main memory.
! Note that L3 is only valid for EV5.
  .RE
  .RS 4
  .RE
  .PP
  \fIeBPF Options\fR
  .IX Subsection "eBPF Options"
! .IP \fB\-mframe\-limit=\fR\fIbytes\fR 4
  .IX Item "-mframe-limit=bytes"
  This specifies the hard limit for frame sizes, in bytes.  Currently,
  the value that can be specified should be less than or equal to
  \&\fB32767\fR.  Defaults to whatever limit is imposed by the version of
  the Linux kernel targeted.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.  This is the default.
! .IP \fB\-mjmpext\fR 4
  .IX Item "-mjmpext"
  .PD 0
! .IP \fB\-mno\-jmpext\fR 4
  .IX Item "-mno-jmpext"
  .PD
! Enable or disable generation of extra conditional\-branch instructions.
! Enabled for CPU v2 and above.
! .IP \fB\-mjmp32\fR 4
  .IX Item "-mjmp32"
  .PD 0
! .IP \fB\-mno\-jmp32\fR 4
  .IX Item "-mno-jmp32"
  .PD
  Enable or disable generation of 32\-bit jump instructions.
! Enabled for CPU v3 and above.
! .IP \fB\-malu32\fR 4
  .IX Item "-malu32"
  .PD 0
! .IP \fB\-mno\-alu32\fR 4
  .IX Item "-mno-alu32"
  .PD
! Enable or disable generation of 32\-bit ALU instructions.
! Enabled for CPU v3 and above.
! .IP \fB\-mv3\-atomics\fR 4
  .IX Item "-mv3-atomics"
  .PD 0
! .IP \fB\-mno\-v3\-atomics\fR 4
  .IX Item "-mno-v3-atomics"
  .PD
  Enable or disable instructions for general atomic operations introduced
! in CPU v3.  Enabled for CPU v3 and above.
! .IP \fB\-mbswap\fR 4
  .IX Item "-mbswap"
  .PD 0
! .IP \fB\-mno\-bswap\fR 4
  .IX Item "-mno-bswap"
  .PD
! Enable or disable byte swap instructions.  Enabled for CPU v4 and above.
! .IP \fB\-msdiv\fR 4
  .IX Item "-msdiv"
  .PD 0
! .IP \fB\-mno\-sdiv\fR 4
  .IX Item "-mno-sdiv"
  .PD
  Enable or disable signed division and modulus instructions.  Enabled for
! CPU v4 and above.
! .IP \fB\-msmov\fR 4
  .IX Item "-msmov"
  .PD 0
! .IP \fB\-mno\-smov\fR 4
  .IX Item "-mno-smov"
  .PD
! Enable or disable sign\-extending move and memory load instructions.
! Enabled for CPU v4 and above.
! .IP \fB\-mcpu=\fR\fIversion\fR 4
  .IX Item "-mcpu=version"
! This specifies which version of the eBPF ISA to target. Newer versions
  may not be supported by all kernels. The default is \fBv4\fR.
  .Sp
  Supported values for \fIversion\fR are:
  .RS 4
! .IP \fBv1\fR 4
  .IX Item "v1"
! The first stable eBPF ISA with no special features or extensions.
! .IP \fBv2\fR 4
  .IX Item "v2"
  Supports the jump extensions, as in \fB\-mjmpext\fR.
! .IP \fBv3\fR 4
  .IX Item "v3"
  All features of v2, plus:
  .RS 4
  .IP "\-<32\-bit jump operations, as in \fB\-mjmp32\fR>" 4
  .IX Item "-<32-bit jump operations, as in -mjmp32>"
  .PD 0
! .IP "\-<32\-bit ALU operations, as in \fB\-malu32\fR>" 4
  .IX Item "-<32-bit ALU operations, as in -malu32>"
  .IP "\-<general atomic operations, as in \fB\-mv3\-atomics\fR>" 4
  .IX Item "-<general atomic operations, as in -mv3-atomics>"
+ .PD
  .RE
  .RS 4
  .RE
! .IP \fBv4\fR 4
  .IX Item "v4"
  All features of v3, plus:
  .RS 4
  .IP "\-<Byte swap instructions, as in \fB\-mbswap\fR>" 4
*************** All features of v3, plus:
*** 25158,25467 ****
  .IX Item "-<Signed division and modulus instructions, as in -msdiv>"
  .IP "\-<Sign\-extending move and memory load instructions, as in \fB\-msmov\fR>" 4
  .IX Item "-<Sign-extending move and memory load instructions, as in -msmov>"
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .RE
! .IP "\fB\-mco\-re\fR" 4
  .IX Item "-mco-re"
! .PD
! Enable \s-1BPF\s0 Compile Once \- Run Everywhere (CO-RE) support. Requires and
  is implied by \fB\-gbtf\fR.
! .IP "\fB\-mno\-co\-re\fR" 4
  .IX Item "-mno-co-re"
! Disable \s-1BPF\s0 Compile Once \- Run Everywhere (CO-RE) support. \s-1BPF\s0 CO-RE
! support is enabled by default when generating \s-1BTF\s0 debug information for
! the \s-1BPF\s0 target.
! .IP "\fB\-mxbpf\fR" 4
  .IX Item "-mxbpf"
! Generate code for an expanded version of \s-1BPF,\s0 which relaxes some of
! the restrictions imposed by the \s-1BPF\s0 architecture:
  .RS 4
! .IP "\-<Save and restore callee-saved registers at function entry and>" 4
  .IX Item "-<Save and restore callee-saved registers at function entry and>"
  exit, respectively.
  .RE
  .RS 4
  .RE
! .IP "\fB\-masm=\fR\fIdialect\fR" 4
  .IX Item "-masm=dialect"
  Outputs assembly instructions using eBPF selected \fIdialect\fR.  The default
  is \fBpseudoc\fR.
  .Sp
  Supported values for \fIdialect\fR are:
  .RS 4
! .IP "\fBnormal\fR" 4
  .IX Item "normal"
  Outputs normal assembly dialect.
! .IP "\fBpseudoc\fR" 4
  .IX Item "pseudoc"
! Outputs pseudo-c assembly dialect.
  .RE
  .RS 4
  .RE
! .IP "\fB\-minline\-memops\-threshold=\fR\fIbytes\fR" 4
  .IX Item "-minline-memops-threshold=bytes"
  Specifies a size threshold in bytes at or below which memmove, memcpy
  and memset shall always be expanded inline.  Operations dealing with
  sizes larger than this threshold would have to be implemented using
! a library call instead of being expanded inline, but since \s-1BPF\s0 doesn't
! allow libcalls, exceeding this threshold results in a compile-time
  error.  The default is \fB1024\fR bytes.
  .PP
! \fI\s-1FR30\s0 Options\fR
  .IX Subsection "FR30 Options"
  .PP
! These options are defined specifically for the \s-1FR30\s0 port.
! .IP "\fB\-msmall\-model\fR" 4
  .IX Item "-msmall-model"
  Use the small address space model.  This can produce smaller code, but
  it does assume that all symbolic values and addresses fit into a
  20\-bit range.
! .IP "\fB\-mno\-lsim\fR" 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so there is no need
  to include the simulator library (\fIlibsim.a\fR) on the linker
  command line.
  .PP
! \fI\s-1FT32\s0 Options\fR
  .IX Subsection "FT32 Options"
  .PP
! These options are defined specifically for the \s-1FT32\s0 port.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime startup and library to be linked.
  You must not use this option when generating programs that will run on
  real hardware; you must provide your own runtime library for whatever
  I/O functions are needed.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for \s-1FT32,\s0
  so by default the compiler uses standard reload.
! .IP "\fB\-mnodiv\fR" 4
  .IX Item "-mnodiv"
  Do not use div and mod instructions.
! .IP "\fB\-mft32b\fR" 4
  .IX Item "-mft32b"
! Enable use of the extended instructions of the \s-1FT32B\s0 processor.
! .IP "\fB\-mcompress\fR" 4
  .IX Item "-mcompress"
  Compress all code using the Ft32B code compression scheme.
! .IP "\fB\-mnopm\fR" 4
  .IX Item "-mnopm"
  Do not generate code that reads program memory.
  .PP
! \fI\s-1FRV\s0 Options\fR
  .IX Subsection "FRV Options"
! .IP "\fB\-mgpr\-32\fR" 4
  .IX Item "-mgpr-32"
! Only use the first 32 general-purpose registers.
! .IP "\fB\-mgpr\-64\fR" 4
  .IX Item "-mgpr-64"
! Use all 64 general-purpose registers.
! .IP "\fB\-mfpr\-32\fR" 4
  .IX Item "-mfpr-32"
! Use only the first 32 floating-point registers.
! .IP "\fB\-mfpr\-64\fR" 4
  .IX Item "-mfpr-64"
! Use all 64 floating-point registers.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
! Use hardware instructions for floating-point operations.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Use library routines for floating-point operations.
! .IP "\fB\-malloc\-cc\fR" 4
  .IX Item "-malloc-cc"
  Dynamically allocate condition code registers.
! .IP "\fB\-mfixed\-cc\fR" 4
  .IX Item "-mfixed-cc"
  Do not try to dynamically allocate condition code registers, only
  use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
! .IP "\fB\-mdword\fR" 4
  .IX Item "-mdword"
! Change \s-1ABI\s0 to use double word insns.
! .IP "\fB\-mno\-dword\fR" 4
  .IX Item "-mno-dword"
  Do not use double word instructions.
! .IP "\fB\-mdouble\fR" 4
  .IX Item "-mdouble"
! Use floating-point double instructions.
! .IP "\fB\-mno\-double\fR" 4
  .IX Item "-mno-double"
! Do not use floating-point double instructions.
! .IP "\fB\-mmedia\fR" 4
  .IX Item "-mmedia"
  Use media instructions.
! .IP "\fB\-mno\-media\fR" 4
  .IX Item "-mno-media"
  Do not use media instructions.
! .IP "\fB\-mmuladd\fR" 4
  .IX Item "-mmuladd"
  Use multiply and add/subtract instructions.
! .IP "\fB\-mno\-muladd\fR" 4
  .IX Item "-mno-muladd"
  Do not use multiply and add/subtract instructions.
! .IP "\fB\-mfdpic\fR" 4
  .IX Item "-mfdpic"
! Select the \s-1FDPIC ABI,\s0 which uses function descriptors to represent
  pointers to functions.  Without any PIC/PIE\-related options, it
  implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
! assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
! \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
  are computed with 32 bits.
! With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
! .IP "\fB\-minline\-plt\fR" 4
  .IX Item "-minline-plt"
! Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! It's enabled by default if optimizing for speed and compiling for
  shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
  optimization option such as \fB\-O3\fR or above is present in the
  command line.
! .IP "\fB\-mTLS\fR" 4
  .IX Item "-mTLS"
! Assume a large \s-1TLS\s0 segment when generating thread-local code.
! .IP "\fB\-mtls\fR" 4
  .IX Item "-mtls"
! Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
! .IP "\fB\-mgprel\-ro\fR" 4
  .IX Item "-mgprel-ro"
! Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC ABI\s0 for data
! that is known to be in read-only sections.  It's enabled by default,
  except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
  make the global offset table smaller, it trades 1 instruction for 4.
  With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
  one of which may be shared by multiple symbols, and it avoids the need
! for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
  win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
! .IP "\fB\-multilib\-library\-pic\fR" 4
  .IX Item "-multilib-library-pic"
! Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
  \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
  \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
  it explicitly.
! .IP "\fB\-mlinked\-fp\fR" 4
  .IX Item "-mlinked-fp"
! Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
  a stack frame is allocated.  This option is enabled by default and can
  be disabled with \fB\-mno\-linked\-fp\fR.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  Use indirect addressing to call functions outside the current
  compilation unit.  This allows the functions to be placed anywhere
  within the 32\-bit address space.
! .IP "\fB\-malign\-labels\fR" 4
  .IX Item "-malign-labels"
  Try to align labels to an 8\-byte boundary by inserting NOPs into the
! previous packet.  This option only has an effect when \s-1VLIW\s0 packing
! is enabled.  It doesn't create new packets; it merely adds NOPs to
  existing ones.
! .IP "\fB\-mlibrary\-pic\fR" 4
  .IX Item "-mlibrary-pic"
! Generate position-independent \s-1EABI\s0 code.
! .IP "\fB\-macc\-4\fR" 4
  .IX Item "-macc-4"
  Use only the first four media accumulator registers.
! .IP "\fB\-macc\-8\fR" 4
  .IX Item "-macc-8"
  Use all eight media accumulator registers.
! .IP "\fB\-mpack\fR" 4
  .IX Item "-mpack"
! Pack \s-1VLIW\s0 instructions.
! .IP "\fB\-mno\-pack\fR" 4
  .IX Item "-mno-pack"
! Do not pack \s-1VLIW\s0 instructions.
! .IP "\fB\-mno\-eflags\fR" 4
  .IX Item "-mno-eflags"
! Do not mark \s-1ABI\s0 switches in e_flags.
! .IP "\fB\-mcond\-move\fR" 4
  .IX Item "-mcond-move"
! Enable the use of conditional-move instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-cond\-move\fR" 4
  .IX Item "-mno-cond-move"
! Disable the use of conditional-move instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mscc\fR" 4
  .IX Item "-mscc"
  Enable the use of conditional set instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-scc\fR" 4
  .IX Item "-mno-scc"
  Disable the use of conditional set instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mcond\-exec\fR" 4
  .IX Item "-mcond-exec"
  Enable the use of conditional execution (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-cond\-exec\fR" 4
  .IX Item "-mno-cond-exec"
  Disable the use of conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mvliw\-branch\fR" 4
  .IX Item "-mvliw-branch"
! Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-vliw\-branch\fR" 4
  .IX Item "-mno-vliw-branch"
! Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mmulti\-cond\-exec\fR" 4
  .IX Item "-mmulti-cond-exec"
  Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
  (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
  .IX Item "-mno-multi-cond-exec"
  Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mnested\-cond\-exec\fR" 4
  .IX Item "-mnested-cond-exec"
  Enable nested conditional execution optimizations (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
  .IX Item "-mno-nested-cond-exec"
  Disable nested conditional execution optimizations.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-moptimize\-membar\fR" 4
  .IX Item "-moptimize-membar"
  This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
! compiler-generated code.  It is enabled by default.
! .IP "\fB\-mno\-optimize\-membar\fR" 4
  .IX Item "-mno-optimize-membar"
  This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
  instructions from the generated code.
! .IP "\fB\-mtomcat\-stats\fR" 4
  .IX Item "-mtomcat-stats"
  Cause gas to print out tomcat statistics.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Select the processor type for which to generate code.  Possible values are
  \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
--- 25093,25402 ----
  .IX Item "-<Signed division and modulus instructions, as in -msdiv>"
  .IP "\-<Sign\-extending move and memory load instructions, as in \fB\-msmov\fR>" 4
  .IX Item "-<Sign-extending move and memory load instructions, as in -msmov>"
+ .PD
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .RE
! .IP \fB\-mco\-re\fR 4
  .IX Item "-mco-re"
! Enable BPF Compile Once \- Run Everywhere (CO\-RE) support. Requires and
  is implied by \fB\-gbtf\fR.
! .IP \fB\-mno\-co\-re\fR 4
  .IX Item "-mno-co-re"
! Disable BPF Compile Once \- Run Everywhere (CO\-RE) support. BPF CO\-RE
! support is enabled by default when generating BTF debug information for
! the BPF target.
! .IP \fB\-mxbpf\fR 4
  .IX Item "-mxbpf"
! Generate code for an expanded version of BPF, which relaxes some of
! the restrictions imposed by the BPF architecture:
  .RS 4
! .IP "\-<Save and restore callee\-saved registers at function entry and>" 4
  .IX Item "-<Save and restore callee-saved registers at function entry and>"
  exit, respectively.
  .RE
  .RS 4
  .RE
! .IP \fB\-masm=\fR\fIdialect\fR 4
  .IX Item "-masm=dialect"
  Outputs assembly instructions using eBPF selected \fIdialect\fR.  The default
  is \fBpseudoc\fR.
  .Sp
  Supported values for \fIdialect\fR are:
  .RS 4
! .IP \fBnormal\fR 4
  .IX Item "normal"
  Outputs normal assembly dialect.
! .IP \fBpseudoc\fR 4
  .IX Item "pseudoc"
! Outputs pseudo\-c assembly dialect.
  .RE
  .RS 4
  .RE
! .IP \fB\-minline\-memops\-threshold=\fR\fIbytes\fR 4
  .IX Item "-minline-memops-threshold=bytes"
  Specifies a size threshold in bytes at or below which memmove, memcpy
  and memset shall always be expanded inline.  Operations dealing with
  sizes larger than this threshold would have to be implemented using
! a library call instead of being expanded inline, but since BPF doesn\*(Aqt
! allow libcalls, exceeding this threshold results in a compile\-time
  error.  The default is \fB1024\fR bytes.
  .PP
! \fIFR30 Options\fR
  .IX Subsection "FR30 Options"
  .PP
! These options are defined specifically for the FR30 port.
! .IP \fB\-msmall\-model\fR 4
  .IX Item "-msmall-model"
  Use the small address space model.  This can produce smaller code, but
  it does assume that all symbolic values and addresses fit into a
  20\-bit range.
! .IP \fB\-mno\-lsim\fR 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so there is no need
  to include the simulator library (\fIlibsim.a\fR) on the linker
  command line.
  .PP
! \fIFT32 Options\fR
  .IX Subsection "FT32 Options"
  .PP
! These options are defined specifically for the FT32 port.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime startup and library to be linked.
  You must not use this option when generating programs that will run on
  real hardware; you must provide your own runtime library for whatever
  I/O functions are needed.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for FT32,
  so by default the compiler uses standard reload.
! .IP \fB\-mnodiv\fR 4
  .IX Item "-mnodiv"
  Do not use div and mod instructions.
! .IP \fB\-mft32b\fR 4
  .IX Item "-mft32b"
! Enable use of the extended instructions of the FT32B processor.
! .IP \fB\-mcompress\fR 4
  .IX Item "-mcompress"
  Compress all code using the Ft32B code compression scheme.
! .IP \fB\-mnopm\fR 4
  .IX Item "-mnopm"
  Do not generate code that reads program memory.
  .PP
! \fIFRV Options\fR
  .IX Subsection "FRV Options"
! .IP \fB\-mgpr\-32\fR 4
  .IX Item "-mgpr-32"
! Only use the first 32 general\-purpose registers.
! .IP \fB\-mgpr\-64\fR 4
  .IX Item "-mgpr-64"
! Use all 64 general\-purpose registers.
! .IP \fB\-mfpr\-32\fR 4
  .IX Item "-mfpr-32"
! Use only the first 32 floating\-point registers.
! .IP \fB\-mfpr\-64\fR 4
  .IX Item "-mfpr-64"
! Use all 64 floating\-point registers.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
! Use hardware instructions for floating\-point operations.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Use library routines for floating\-point operations.
! .IP \fB\-malloc\-cc\fR 4
  .IX Item "-malloc-cc"
  Dynamically allocate condition code registers.
! .IP \fB\-mfixed\-cc\fR 4
  .IX Item "-mfixed-cc"
  Do not try to dynamically allocate condition code registers, only
  use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
! .IP \fB\-mdword\fR 4
  .IX Item "-mdword"
! Change ABI to use double word insns.
! .IP \fB\-mno\-dword\fR 4
  .IX Item "-mno-dword"
  Do not use double word instructions.
! .IP \fB\-mdouble\fR 4
  .IX Item "-mdouble"
! Use floating\-point double instructions.
! .IP \fB\-mno\-double\fR 4
  .IX Item "-mno-double"
! Do not use floating\-point double instructions.
! .IP \fB\-mmedia\fR 4
  .IX Item "-mmedia"
  Use media instructions.
! .IP \fB\-mno\-media\fR 4
  .IX Item "-mno-media"
  Do not use media instructions.
! .IP \fB\-mmuladd\fR 4
  .IX Item "-mmuladd"
  Use multiply and add/subtract instructions.
! .IP \fB\-mno\-muladd\fR 4
  .IX Item "-mno-muladd"
  Do not use multiply and add/subtract instructions.
! .IP \fB\-mfdpic\fR 4
  .IX Item "-mfdpic"
! Select the FDPIC ABI, which uses function descriptors to represent
  pointers to functions.  Without any PIC/PIE\-related options, it
  implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
! assumes GOT entries and small data are within a 12\-bit range from the
! GOT base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, GOT offsets
  are computed with 32 bits.
! With a \fBbfin\-elf\fR target, this option implies \fB\-msim\fR.
! .IP \fB\-minline\-plt\fR 4
  .IX Item "-minline-plt"
! Enable inlining of PLT entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! It\*(Aqs enabled by default if optimizing for speed and compiling for
  shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
  optimization option such as \fB\-O3\fR or above is present in the
  command line.
! .IP \fB\-mTLS\fR 4
  .IX Item "-mTLS"
! Assume a large TLS segment when generating thread\-local code.
! .IP \fB\-mtls\fR 4
  .IX Item "-mtls"
! Do not assume a large TLS segment when generating thread\-local code.
! .IP \fB\-mgprel\-ro\fR 4
  .IX Item "-mgprel-ro"
! Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the FDPIC ABI for data
! that is known to be in read\-only sections.  It\*(Aqs enabled by default,
  except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
  make the global offset table smaller, it trades 1 instruction for 4.
  With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
  one of which may be shared by multiple symbols, and it avoids the need
! for a GOT entry for the referenced symbol, so it\*(Aqs more likely to be a
  win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
! .IP \fB\-multilib\-library\-pic\fR 4
  .IX Item "-multilib-library-pic"
! Link with the (library, not FD) pic libraries.  It\*(Aqs implied by
  \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
  \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
  it explicitly.
! .IP \fB\-mlinked\-fp\fR 4
  .IX Item "-mlinked-fp"
! Follow the EABI requirement of always creating a frame pointer whenever
  a stack frame is allocated.  This option is enabled by default and can
  be disabled with \fB\-mno\-linked\-fp\fR.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  Use indirect addressing to call functions outside the current
  compilation unit.  This allows the functions to be placed anywhere
  within the 32\-bit address space.
! .IP \fB\-malign\-labels\fR 4
  .IX Item "-malign-labels"
  Try to align labels to an 8\-byte boundary by inserting NOPs into the
! previous packet.  This option only has an effect when VLIW packing
! is enabled.  It doesn\*(Aqt create new packets; it merely adds NOPs to
  existing ones.
! .IP \fB\-mlibrary\-pic\fR 4
  .IX Item "-mlibrary-pic"
! Generate position\-independent EABI code.
! .IP \fB\-macc\-4\fR 4
  .IX Item "-macc-4"
  Use only the first four media accumulator registers.
! .IP \fB\-macc\-8\fR 4
  .IX Item "-macc-8"
  Use all eight media accumulator registers.
! .IP \fB\-mpack\fR 4
  .IX Item "-mpack"
! Pack VLIW instructions.
! .IP \fB\-mno\-pack\fR 4
  .IX Item "-mno-pack"
! Do not pack VLIW instructions.
! .IP \fB\-mno\-eflags\fR 4
  .IX Item "-mno-eflags"
! Do not mark ABI switches in e_flags.
! .IP \fB\-mcond\-move\fR 4
  .IX Item "-mcond-move"
! Enable the use of conditional\-move instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-cond\-move\fR 4
  .IX Item "-mno-cond-move"
! Disable the use of conditional\-move instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mscc\fR 4
  .IX Item "-mscc"
  Enable the use of conditional set instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-scc\fR 4
  .IX Item "-mno-scc"
  Disable the use of conditional set instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mcond\-exec\fR 4
  .IX Item "-mcond-exec"
  Enable the use of conditional execution (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-cond\-exec\fR 4
  .IX Item "-mno-cond-exec"
  Disable the use of conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mvliw\-branch\fR 4
  .IX Item "-mvliw-branch"
! Run a pass to pack branches into VLIW instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-vliw\-branch\fR 4
  .IX Item "-mno-vliw-branch"
! Do not run a pass to pack branches into VLIW instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mmulti\-cond\-exec\fR 4
  .IX Item "-mmulti-cond-exec"
  Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
  (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-multi\-cond\-exec\fR 4
  .IX Item "-mno-multi-cond-exec"
  Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mnested\-cond\-exec\fR 4
  .IX Item "-mnested-cond-exec"
  Enable nested conditional execution optimizations (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-nested\-cond\-exec\fR 4
  .IX Item "-mno-nested-cond-exec"
  Disable nested conditional execution optimizations.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-moptimize\-membar\fR 4
  .IX Item "-moptimize-membar"
  This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
! compiler\-generated code.  It is enabled by default.
! .IP \fB\-mno\-optimize\-membar\fR 4
  .IX Item "-mno-optimize-membar"
  This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
  instructions from the generated code.
! .IP \fB\-mtomcat\-stats\fR 4
  .IX Item "-mtomcat-stats"
  Cause gas to print out tomcat statistics.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Select the processor type for which to generate code.  Possible values are
  \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
*************** Select the processor type for which to g
*** 25471,25509 ****
  .IX Subsection "GNU/Linux Options"
  .PP
  These \fB\-m\fR options are defined for GNU/Linux targets:
! .IP "\fB\-mglibc\fR" 4
  .IX Item "-mglibc"
! Use the \s-1GNU C\s0 library.  This is the default except
  on \fB*\-*\-linux\-*uclibc*\fR, \fB*\-*\-linux\-*musl*\fR and
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP "\fB\-muclibc\fR" 4
  .IX Item "-muclibc"
  Use uClibc C library.  This is the default on
  \&\fB*\-*\-linux\-*uclibc*\fR targets.
! .IP "\fB\-mmusl\fR" 4
  .IX Item "-mmusl"
  Use the musl C library.  This is the default on
  \&\fB*\-*\-linux\-*musl*\fR targets.
! .IP "\fB\-mbionic\fR" 4
  .IX Item "-mbionic"
  Use Bionic C library.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP "\fB\-mandroid\fR" 4
  .IX Item "-mandroid"
  Compile code compatible with Android platform.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
  .Sp
  When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
  \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
! this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
  Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
  to be defined.
! .IP "\fB\-tno\-android\-cc\fR" 4
  .IX Item "-tno-android-cc"
  Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
  \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
  \&\fB\-fno\-rtti\fR by default.
! .IP "\fB\-tno\-android\-ld\fR" 4
  .IX Item "-tno-android-ld"
  Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
  linking options to the linker.
--- 25406,25444 ----
  .IX Subsection "GNU/Linux Options"
  .PP
  These \fB\-m\fR options are defined for GNU/Linux targets:
! .IP \fB\-mglibc\fR 4
  .IX Item "-mglibc"
! Use the GNU C library.  This is the default except
  on \fB*\-*\-linux\-*uclibc*\fR, \fB*\-*\-linux\-*musl*\fR and
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP \fB\-muclibc\fR 4
  .IX Item "-muclibc"
  Use uClibc C library.  This is the default on
  \&\fB*\-*\-linux\-*uclibc*\fR targets.
! .IP \fB\-mmusl\fR 4
  .IX Item "-mmusl"
  Use the musl C library.  This is the default on
  \&\fB*\-*\-linux\-*musl*\fR targets.
! .IP \fB\-mbionic\fR 4
  .IX Item "-mbionic"
  Use Bionic C library.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP \fB\-mandroid\fR 4
  .IX Item "-mandroid"
  Compile code compatible with Android platform.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
  .Sp
  When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
  \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
! this option makes the GCC driver pass Android\-specific options to the linker.
  Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
  to be defined.
! .IP \fB\-tno\-android\-cc\fR 4
  .IX Item "-tno-android-cc"
  Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
  \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
  \&\fB\-fno\-rtti\fR by default.
! .IP \fB\-tno\-android\-ld\fR 4
  .IX Item "-tno-android-ld"
  Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
  linking options to the linker.
*************** linking options to the linker.
*** 25512,25548 ****
  .IX Subsection "H8/300 Options"
  .PP
  These \fB\-m\fR options are defined for the H8/300 implementations:
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP "\fB\-mh\fR" 4
  .IX Item "-mh"
  Generate code for the H8/300H.
! .IP "\fB\-ms\fR" 4
  .IX Item "-ms"
  Generate code for the H8S.
! .IP "\fB\-mn\fR" 4
  .IX Item "-mn"
  Generate code for the H8S and H8/300H in the normal mode.  This switch
  must be used either with \fB\-mh\fR or \fB\-ms\fR.
! .IP "\fB\-ms2600\fR" 4
  .IX Item "-ms2600"
  Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
! .IP "\fB\-mexr\fR" 4
  .IX Item "-mexr"
  Extended registers are stored on stack before execution of function
  with monitor attribute. Default option is \fB\-mexr\fR.
  This option is valid only for H8S targets.
! .IP "\fB\-mno\-exr\fR" 4
  .IX Item "-mno-exr"
  Extended registers are not stored on stack before execution of function 
  with monitor attribute. Default option is \fB\-mno\-exr\fR. 
  This option is valid only for H8S targets.
! .IP "\fB\-mint32\fR" 4
  .IX Item "-mint32"
  Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
! .IP "\fB\-malign\-300\fR" 4
  .IX Item "-malign-300"
  On the H8/300H and H8S, use the same alignment rules as for the H8/300.
  The default for the H8/300H and H8S is to align longs and floats on
--- 25447,25483 ----
  .IX Subsection "H8/300 Options"
  .PP
  These \fB\-m\fR options are defined for the H8/300 implementations:
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP \fB\-mh\fR 4
  .IX Item "-mh"
  Generate code for the H8/300H.
! .IP \fB\-ms\fR 4
  .IX Item "-ms"
  Generate code for the H8S.
! .IP \fB\-mn\fR 4
  .IX Item "-mn"
  Generate code for the H8S and H8/300H in the normal mode.  This switch
  must be used either with \fB\-mh\fR or \fB\-ms\fR.
! .IP \fB\-ms2600\fR 4
  .IX Item "-ms2600"
  Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
! .IP \fB\-mexr\fR 4
  .IX Item "-mexr"
  Extended registers are stored on stack before execution of function
  with monitor attribute. Default option is \fB\-mexr\fR.
  This option is valid only for H8S targets.
! .IP \fB\-mno\-exr\fR 4
  .IX Item "-mno-exr"
  Extended registers are not stored on stack before execution of function 
  with monitor attribute. Default option is \fB\-mno\-exr\fR. 
  This option is valid only for H8S targets.
! .IP \fB\-mint32\fR 4
  .IX Item "-mint32"
  Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
! .IP \fB\-malign\-300\fR 4
  .IX Item "-malign-300"
  On the H8/300H and H8S, use the same alignment rules as for the H8/300.
  The default for the H8/300H and H8S is to align longs and floats on
*************** The default for the H8/300H and H8S is t
*** 25550,25582 ****
  \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
  This option has no effect on the H8/300.
  .PP
! \fI\s-1HPPA\s0 Options\fR
  .IX Subsection "HPPA Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
! .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
  .IX Item "-march=architecture-type"
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA 1.0,\s0 \fB1.1\fR for \s-1PA
! 1.1,\s0 and \fB2.0\fR for \s-1PA 2.0\s0 processors.  Refer to
! \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
  architecture option for your machine.  Code compiled for lower numbered
  architectures runs on higher numbered architectures, but not the
  other way around.
! .IP "\fB\-mpa\-risc\-1\-0\fR" 4
  .IX Item "-mpa-risc-1-0"
  .PD 0
! .IP "\fB\-mpa\-risc\-1\-1\fR" 4
  .IX Item "-mpa-risc-1-1"
! .IP "\fB\-mpa\-risc\-2\-0\fR" 4
  .IX Item "-mpa-risc-2-0"
  .PD
  Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
! .IP "\fB\-matomic\-libcalls\fR" 4
  .IX Item "-matomic-libcalls"
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  This option is enabled by default.  It only affects the generation of
! atomic libcalls by the \s-1HPPA\s0 backend.
  .Sp
  Both the sync and \fIlibatomic\fR libcall implementations use locking.
  As a result, processor stores are not atomic with respect to other
--- 25485,25517 ----
  \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
  This option has no effect on the H8/300.
  .PP
! \fIHPPA Options\fR
  .IX Subsection "HPPA Options"
  .PP
! These \fB\-m\fR options are defined for the HPPA family of computers:
! .IP \fB\-march=\fR\fIarchitecture\-type\fR 4
  .IX Item "-march=architecture-type"
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture\-type\fR are \fB1.0\fR for PA 1.0, \fB1.1\fR for PA
! 1.1, and \fB2.0\fR for PA 2.0 processors.  Refer to
! \&\fI/usr/lib/sched.models\fR on an HP\-UX system to determine the proper
  architecture option for your machine.  Code compiled for lower numbered
  architectures runs on higher numbered architectures, but not the
  other way around.
! .IP \fB\-mpa\-risc\-1\-0\fR 4
  .IX Item "-mpa-risc-1-0"
  .PD 0
! .IP \fB\-mpa\-risc\-1\-1\fR 4
  .IX Item "-mpa-risc-1-1"
! .IP \fB\-mpa\-risc\-2\-0\fR 4
  .IX Item "-mpa-risc-2-0"
  .PD
  Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
! .IP \fB\-matomic\-libcalls\fR 4
  .IX Item "-matomic-libcalls"
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  This option is enabled by default.  It only affects the generation of
! atomic libcalls by the HPPA backend.
  .Sp
  Both the sync and \fIlibatomic\fR libcall implementations use locking.
  As a result, processor stores are not atomic with respect to other
*************** atomic operations.  Processor loads up t
*** 25584,25590 ****
  respect to other atomic operations provided they are implemented as
  a single access.
  .Sp
! The PA-RISC architecture does not support any atomic operations in
  hardware except for the \f(CW\*(C`ldcw\*(C'\fR instruction.  Thus, all atomic
  support is implemented using sync and atomic libcalls.  Sync libcall
  support is in \fIlibgcc.a\fR.  Atomic libcall support is in
--- 25519,25525 ----
  respect to other atomic operations provided they are implemented as
  a single access.
  .Sp
! The PA\-RISC architecture does not support any atomic operations in
  hardware except for the \f(CW\*(C`ldcw\*(C'\fR instruction.  Thus, all atomic
  support is implemented using sync and atomic libcalls.  Sync libcall
  support is in \fIlibgcc.a\fR.  Atomic libcall support is in
*************** support is in \fIlibgcc.a\fR.  Atomic li
*** 25593,25668 ****
  This option generates \f(CW\*(C`_\|_atomic_exchange\*(C'\fR calls for atomic stores.
  It also provides special handling for atomic DImode accesses on 32\-bit
  targets.
! .IP "\fB\-mbig\-switch\fR" 4
  .IX Item "-mbig-switch"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mcaller\-copies\fR" 4
  .IX Item "-mcaller-copies"
  The caller copies function arguments passed by hidden reference.  This
  option should be used with care as it is not compatible with the default
  32\-bit runtime.  However, only aggregates larger than eight bytes are
  passed by hidden reference and the option provides better compatibility
  with OpenMP.
! .IP "\fB\-mcoherent\-ldcw\fR" 4
  .IX Item "-mcoherent-ldcw"
! Use ldcw/ldcd coherent cache-control hint.
! .IP "\fB\-mdisable\-fpregs\fR" 4
  .IX Item "-mdisable-fpregs"
! Disable floating-point registers.  Equivalent to \f(CW\*(C`\-msoft\-float\*(C'\fR.
! .IP "\fB\-mdisable\-indexing\fR" 4
  .IX Item "-mdisable-indexing"
  Prevent the compiler from using indexing address modes.  This avoids some
! rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH.\s0
! .IP "\fB\-mfast\-indirect\-calls\fR" 4
  .IX Item "-mfast-indirect-calls"
  Generate code that assumes calls never cross space boundaries.  This
! allows \s-1GCC\s0 to emit code that performs faster indirect calls.
  .Sp
  This option does not work in the presence of shared libraries or nested
  functions.
! .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP "\fB\-mgas\fR" 4
  .IX Item "-mgas"
! Enable the use of assembler directives only \s-1GAS\s0 understands.
! .IP "\fB\-mgnu\-ld\fR" 4
  .IX Item "-mgnu-ld"
! Use options specific to \s-1GNU\s0 \fBld\fR.
  This passes \fB\-shared\fR to \fBld\fR when
! building a shared library.  It is the default when \s-1GCC\s0 is configured,
! explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
  affect which \fBld\fR is called; it only changes what parameters
  are passed to that \fBld\fR.
  The \fBld\fR that is called is determined by the
! \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
! finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
! using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
! on the 64\-bit HP-UX \s-1GCC,\s0 i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP "\fB\-mhp\-ld\fR" 4
  .IX Item "-mhp-ld"
! Use options specific to \s-1HP\s0 \fBld\fR.
  This passes \fB\-b\fR to \fBld\fR when building
  a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
! links.  It is the default when \s-1GCC\s0 is configured, explicitly or
! implicitly, with the \s-1HP\s0 linker.  This option does not affect
  which \fBld\fR is called; it only changes what parameters are passed to that
  \&\fBld\fR.
  The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
! configure option, \s-1GCC\s0's program search path, and finally by the user's
! \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
! `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
! HP-UX \s-1GCC,\s0 i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP "\fB\-mlinker\-opt\fR" 4
  .IX Item "-mlinker-opt"
! Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
! debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
  linkers in which they give bogus error messages when linking some programs.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  Generate code that uses long call sequences.  This ensures that a call
  is always able to reach linker generated stubs.  The default is to generate
--- 25528,25603 ----
  This option generates \f(CW\*(C`_\|_atomic_exchange\*(C'\fR calls for atomic stores.
  It also provides special handling for atomic DImode accesses on 32\-bit
  targets.
! .IP \fB\-mbig\-switch\fR 4
  .IX Item "-mbig-switch"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mcaller\-copies\fR 4
  .IX Item "-mcaller-copies"
  The caller copies function arguments passed by hidden reference.  This
  option should be used with care as it is not compatible with the default
  32\-bit runtime.  However, only aggregates larger than eight bytes are
  passed by hidden reference and the option provides better compatibility
  with OpenMP.
! .IP \fB\-mcoherent\-ldcw\fR 4
  .IX Item "-mcoherent-ldcw"
! Use ldcw/ldcd coherent cache\-control hint.
! .IP \fB\-mdisable\-fpregs\fR 4
  .IX Item "-mdisable-fpregs"
! Disable floating\-point registers.  Equivalent to \f(CW\*(C`\-msoft\-float\*(C'\fR.
! .IP \fB\-mdisable\-indexing\fR 4
  .IX Item "-mdisable-indexing"
  Prevent the compiler from using indexing address modes.  This avoids some
! rather obscure problems when compiling MIG generated code under MACH.
! .IP \fB\-mfast\-indirect\-calls\fR 4
  .IX Item "-mfast-indirect-calls"
  Generate code that assumes calls never cross space boundaries.  This
! allows GCC to emit code that performs faster indirect calls.
  .Sp
  This option does not work in the presence of shared libraries or nested
  functions.
! .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP \fB\-mgas\fR 4
  .IX Item "-mgas"
! Enable the use of assembler directives only GAS understands.
! .IP \fB\-mgnu\-ld\fR 4
  .IX Item "-mgnu-ld"
! Use options specific to GNU \fBld\fR.
  This passes \fB\-shared\fR to \fBld\fR when
! building a shared library.  It is the default when GCC is configured,
! explicitly or implicitly, with the GNU linker.  This option does not
  affect which \fBld\fR is called; it only changes what parameters
  are passed to that \fBld\fR.
  The \fBld\fR that is called is determined by the
! \&\fB\-\-with\-ld\fR configure option, GCC\*(Aqs program search path, and
! finally by the user\*(Aqs \fBPATH\fR.  The linker used by GCC can be printed
! using \fBwhich \`gcc \-print\-prog\-name=ld\`\fR.  This option is only available
! on the 64\-bit HP\-UX GCC, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP \fB\-mhp\-ld\fR 4
  .IX Item "-mhp-ld"
! Use options specific to HP \fBld\fR.
  This passes \fB\-b\fR to \fBld\fR when building
  a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
! links.  It is the default when GCC is configured, explicitly or
! implicitly, with the HP linker.  This option does not affect
  which \fBld\fR is called; it only changes what parameters are passed to that
  \&\fBld\fR.
  The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
! configure option, GCC\*(Aqs program search path, and finally by the user\*(Aqs
! \&\fBPATH\fR.  The linker used by GCC can be printed using \fBwhich
! \&\`gcc \-print\-prog\-name=ld\`\fR.  This option is only available on the 64\-bit
! HP\-UX GCC, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP \fB\-mlinker\-opt\fR 4
  .IX Item "-mlinker-opt"
! Enable the optimization pass in the HP\-UX linker.  Note this makes symbolic
! debugging impossible.  It also triggers a bug in the HP\-UX 8 and HP\-UX 9
  linkers in which they give bogus error messages when linking some programs.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  Generate code that uses long call sequences.  This ensures that a call
  is always able to reach linker generated stubs.  The default is to generate
*************** long calls only when the distance from t
*** 25670,25682 ****
  of the function or translation unit, as the case may be, exceeds a
  predefined limit set by the branch type being used.  The limits for
  normal calls are 7,600,000 and 240,000 bytes, respectively for the
! \&\s-1PA 2.0\s0 and \s-1PA 1.X\s0 architectures.  Sibcalls are always limited at
  240,000 bytes.
  .Sp
  Distances are measured from the beginning of functions when using the
  \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
! and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
! the \s-1SOM\s0 linker.
  .Sp
  It is normally not desirable to use this option as it degrades
  performance.  However, it may be useful in large applications,
--- 25605,25617 ----
  of the function or translation unit, as the case may be, exceeds a
  predefined limit set by the branch type being used.  The limits for
  normal calls are 7,600,000 and 240,000 bytes, respectively for the
! PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
  240,000 bytes.
  .Sp
  Distances are measured from the beginning of functions when using the
  \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
! and \fB\-mno\-portable\-runtime\fR options together under HP\-UX with
! the SOM linker.
  .Sp
  It is normally not desirable to use this option as it degrades
  performance.  However, it may be useful in large applications,
*************** particularly when partial linking is use
*** 25685,25757 ****
  The types of long calls used depends on the capabilities of the
  assembler and linker, and the type of code being generated.  The
  impact on systems that support long absolute calls, and long pic
! symbol-difference or pc-relative calls should be relatively small.
! However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
  and it is quite long.
! .IP "\fB\-mlong\-load\-store\fR" 4
  .IX Item "-mlong-load-store"
  Generate 3\-instruction load and store sequences as sometimes required by
! the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
! the \s-1HP\s0 compilers.
! .IP "\fB\-mjump\-in\-delay\fR" 4
  .IX Item "-mjump-in-delay"
  This option is ignored and provided for compatibility purposes only.
! .IP "\fB\-mno\-space\-regs\fR" 4
  .IX Item "-mno-space-regs"
  Generate code that assumes the target has no space registers.  This allows
! \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
  .Sp
! Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
! .IP "\fB\-mordered\fR" 4
  .IX Item "-mordered"
  Assume memory references are ordered and barriers are not needed.
! .IP "\fB\-mportable\-runtime\fR" 4
  .IX Item "-mportable-runtime"
! Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
! .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
  .IX Item "-mschedule=cpu-type"
  Schedule code according to the constraints for the machine type
! \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
  \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
! to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
  proper scheduling option for your machine.  The default scheduling is
  \&\fB8000\fR.
! .IP "\fB\-msio\fR" 4
  .IX Item "-msio"
! Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO.\s0  The default is
  \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
! \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO.\s0  These
! options are available under HP-UX and HI-UX.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
! targets.  Normally the facilities of the machine's usual C compiler are
! used, but this cannot be done directly in cross-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross-compilation.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
  this to work.
! .IP "\fB\-msoft\-mult\fR" 4
  .IX Item "-msoft-mult"
  Use software integer multiplication.
  .Sp
  This disables the use of the \f(CW\*(C`xmpyu\*(C'\fR instruction.
! .IP "\fB\-munix=\fR\fIunix-std\fR" 4
  .IX Item "-munix=unix-std"
  Generate compiler predefines and select a startfile for the specified
! \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
! and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
! is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
! 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
! \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
  and later.
  .Sp
! \&\fB\-munix=93\fR provides the same predefines as \s-1GCC 3.3\s0 and 3.4.
  \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
  and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
  \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
--- 25620,25692 ----
  The types of long calls used depends on the capabilities of the
  assembler and linker, and the type of code being generated.  The
  impact on systems that support long absolute calls, and long pic
! symbol\-difference or pc\-relative calls should be relatively small.
! However, an indirect call is used on 32\-bit ELF systems in pic code
  and it is quite long.
! .IP \fB\-mlong\-load\-store\fR 4
  .IX Item "-mlong-load-store"
  Generate 3\-instruction load and store sequences as sometimes required by
! the HP\-UX 10 linker.  This is equivalent to the \fB+k\fR option to
! the HP compilers.
! .IP \fB\-mjump\-in\-delay\fR 4
  .IX Item "-mjump-in-delay"
  This option is ignored and provided for compatibility purposes only.
! .IP \fB\-mno\-space\-regs\fR 4
  .IX Item "-mno-space-regs"
  Generate code that assumes the target has no space registers.  This allows
! GCC to generate faster indirect calls and use unscaled index address modes.
  .Sp
! Such code is suitable for level 0 PA systems and kernels.
! .IP \fB\-mordered\fR 4
  .IX Item "-mordered"
  Assume memory references are ordered and barriers are not needed.
! .IP \fB\-mportable\-runtime\fR 4
  .IX Item "-mportable-runtime"
! Use the portable calling conventions proposed by HP for ELF systems.
! .IP \fB\-mschedule=\fR\fIcpu\-type\fR 4
  .IX Item "-mschedule=cpu-type"
  Schedule code according to the constraints for the machine type
! \&\fIcpu\-type\fR.  The choices for \fIcpu\-type\fR are \fB700\fR
  \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
! to \fI/usr/lib/sched.models\fR on an HP\-UX system to determine the
  proper scheduling option for your machine.  The default scheduling is
  \&\fB8000\fR.
! .IP \fB\-msio\fR 4
  .IX Item "-msio"
! Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server IO.  The default is
  \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
! \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation IO.  These
! options are available under HP\-UX and HI\-UX.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all HPPA
! targets.  Normally the facilities of the machine\*(Aqs usual C compiler are
! used, but this cannot be done directly in cross\-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross\-compilation.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with GCC, with \fB\-msoft\-float\fR in order for
  this to work.
! .IP \fB\-msoft\-mult\fR 4
  .IX Item "-msoft-mult"
  Use software integer multiplication.
  .Sp
  This disables the use of the \f(CW\*(C`xmpyu\*(C'\fR instruction.
! .IP \fB\-munix=\fR\fIunix\-std\fR 4
  .IX Item "-munix=unix-std"
  Generate compiler predefines and select a startfile for the specified
! UNIX standard.  The choices for \fIunix\-std\fR are \fB93\fR, \fB95\fR
! and \fB98\fR.  \fB93\fR is supported on all HP\-UX versions.  \fB95\fR
! is available on HP\-UX 10.10 and later.  \fB98\fR is available on HP\-UX
! 11.11 and later.  The default values are \fB93\fR for HP\-UX 10.00,
! \&\fB95\fR for HP\-UX 10.10 though to 11.00, and \fB98\fR for HP\-UX 11.11
  and later.
  .Sp
! \&\fB\-munix=93\fR provides the same predefines as GCC 3.3 and 3.4.
  \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
  and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
  \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
*************** for various library routines.  It also a
*** 25763,25963 ****
  of the C library.  Thus, \fIextreme\fR care is needed in using this
  option.
  .Sp
! Library code that is intended to operate with more than one \s-1UNIX\s0
  standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
! as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
! .IP "\fB\-nolibdld\fR" 4
  .IX Item "-nolibdld"
  Suppress the generation of link options to search libdld.sl when the
! \&\fB\-static\fR option is specified on HP-UX 10 and later.
! .IP "\fB\-static\fR" 4
  .IX Item "-static"
! The HP-UX implementation of setlocale in libc has a dependency on
! libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
  when the \fB\-static\fR option is specified, special link options
  are needed to resolve this dependency.
  .Sp
! On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
  link with libdld.sl when the \fB\-static\fR option is specified.
  This causes the resulting binary to be dynamic.  On the 64\-bit port,
  the linkers generate dynamic binaries by default in any case.  The
! \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
  adding these link options.
! .IP "\fB\-threads\fR" 4
  .IX Item "-threads"
  Add support for multithreading with the \fIdce thread\fR library
! under HP-UX.  This option sets flags for both the preprocessor and
  linker.
  .PP
! \fI\s-1IA\-64\s0 Options\fR
  .IX Subsection "IA-64 Options"
  .PP
! These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.  This is the default for HP-UX.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
  and GNU/Linux.
! .IP "\fB\-mgnu\-as\fR" 4
  .IX Item "-mgnu-as"
  .PD 0
! .IP "\fB\-mno\-gnu\-as\fR" 4
  .IX Item "-mno-gnu-as"
  .PD
! Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
! .IP "\fB\-mgnu\-ld\fR" 4
  .IX Item "-mgnu-ld"
  .PD 0
! .IP "\fB\-mno\-gnu\-ld\fR" 4
  .IX Item "-mno-gnu-ld"
  .PD
! Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
! .IP "\fB\-mno\-pic\fR" 4
  .IX Item "-mno-pic"
  Generate code that does not use a global pointer register.  The result
! is not position independent code, and violates the \s-1IA\-64 ABI.\s0
! .IP "\fB\-mvolatile\-asm\-stop\fR" 4
  .IX Item "-mvolatile-asm-stop"
  .PD 0
! .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
  .IX Item "-mno-volatile-asm-stop"
  .PD
! Generate (or don't) a stop bit immediately before and after volatile asm
  statements.
! .IP "\fB\-mregister\-names\fR" 4
  .IX Item "-mregister-names"
  .PD 0
! .IP "\fB\-mno\-register\-names\fR" 4
  .IX Item "-mno-register-names"
  .PD
! Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
  the stacked registers.  This may make assembler output more readable.
! .IP "\fB\-mno\-sdata\fR" 4
  .IX Item "-mno-sdata"
  .PD 0
! .IP "\fB\-msdata\fR" 4
  .IX Item "-msdata"
  .PD
  Disable (or enable) optimizations that use the small data section.  This may
  be useful for working around optimizer bugs.
! .IP "\fB\-mconstant\-gp\fR" 4
  .IX Item "-mconstant-gp"
  Generate code that uses a single constant global pointer value.  This is
  useful when compiling kernel code.
! .IP "\fB\-mauto\-pic\fR" 4
  .IX Item "-mauto-pic"
! Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
  This is useful when compiling firmware code.
! .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
  .IX Item "-minline-float-divide-min-latency"
! Generate code for inline divides of floating-point values
  using the minimum latency algorithm.
! .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
  .IX Item "-minline-float-divide-max-throughput"
! Generate code for inline divides of floating-point values
  using the maximum throughput algorithm.
! .IP "\fB\-mno\-inline\-float\-divide\fR" 4
  .IX Item "-mno-inline-float-divide"
! Do not generate inline code for divides of floating-point values.
! .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
  .IX Item "-minline-int-divide-min-latency"
  Generate code for inline divides of integer values
  using the minimum latency algorithm.
! .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
  .IX Item "-minline-int-divide-max-throughput"
  Generate code for inline divides of integer values
  using the maximum throughput algorithm.
! .IP "\fB\-mno\-inline\-int\-divide\fR" 4
  .IX Item "-mno-inline-int-divide"
  Do not generate inline code for divides of integer values.
! .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
  .IX Item "-minline-sqrt-min-latency"
  Generate code for inline square roots
  using the minimum latency algorithm.
! .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
  .IX Item "-minline-sqrt-max-throughput"
  Generate code for inline square roots
  using the maximum throughput algorithm.
! .IP "\fB\-mno\-inline\-sqrt\fR" 4
  .IX Item "-mno-inline-sqrt"
  Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Do (don't) generate code that uses the fused multiply/add or multiply/subtract
  instructions.  The default is to use these instructions.
! .IP "\fB\-mno\-dwarf2\-asm\fR" 4
  .IX Item "-mno-dwarf2-asm"
  .PD 0
! .IP "\fB\-mdwarf2\-asm\fR" 4
  .IX Item "-mdwarf2-asm"
  .PD
! Don't (or do) generate assembler code for the \s-1DWARF\s0 line number debugging
! info.  This may be useful when not using the \s-1GNU\s0 assembler.
! .IP "\fB\-mearly\-stop\-bits\fR" 4
  .IX Item "-mearly-stop-bits"
  .PD 0
! .IP "\fB\-mno\-early\-stop\-bits\fR" 4
  .IX Item "-mno-early-stop-bits"
  .PD
  Allow stop bits to be placed earlier than immediately preceding the
  instruction that triggered the stop bit.  This can improve instruction
  scheduling, but does not always do so.
! .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
  .IX Item "-mtls-size=tls-size"
! Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
  64.
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Tune the instruction scheduling for a particular \s-1CPU,\s0 Valid values are
  \&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
  and \fBmckinley\fR.
! .IP "\fB\-milp32\fR" 4
  .IX Item "-milp32"
  .PD 0
! .IP "\fB\-mlp64\fR" 4
  .IX Item "-mlp64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
! to 64 bits.  These are HP-UX specific flags.
! .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
  .IX Item "-mno-sched-br-data-spec"
  .PD 0
! .IP "\fB\-msched\-br\-data\-spec\fR" 4
  .IX Item "-msched-br-data-spec"
  .PD
  (Dis/En)able data speculative scheduling before reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is disabled.
! .IP "\fB\-msched\-ar\-data\-spec\fR" 4
  .IX Item "-msched-ar-data-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
  .IX Item "-mno-sched-ar-data-spec"
  .PD
  (En/Dis)able data speculative scheduling after reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is enabled.
! .IP "\fB\-mno\-sched\-control\-spec\fR" 4
  .IX Item "-mno-sched-control-spec"
  .PD 0
! .IP "\fB\-msched\-control\-spec\fR" 4
  .IX Item "-msched-control-spec"
  .PD
  (Dis/En)able control speculative scheduling.  This feature is
--- 25698,25898 ----
  of the C library.  Thus, \fIextreme\fR care is needed in using this
  option.
  .Sp
! Library code that is intended to operate with more than one UNIX
  standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
! as appropriate.  Most GNU software doesn\*(Aqt provide this capability.
! .IP \fB\-nolibdld\fR 4
  .IX Item "-nolibdld"
  Suppress the generation of link options to search libdld.sl when the
! \&\fB\-static\fR option is specified on HP\-UX 10 and later.
! .IP \fB\-static\fR 4
  .IX Item "-static"
! The HP\-UX implementation of setlocale in libc has a dependency on
! libdld.sl.  There isn\*(Aqt an archive version of libdld.sl.  Thus,
  when the \fB\-static\fR option is specified, special link options
  are needed to resolve this dependency.
  .Sp
! On HP\-UX 10 and later, the GCC driver adds the necessary options to
  link with libdld.sl when the \fB\-static\fR option is specified.
  This causes the resulting binary to be dynamic.  On the 64\-bit port,
  the linkers generate dynamic binaries by default in any case.  The
! \&\fB\-nolibdld\fR option can be used to prevent the GCC driver from
  adding these link options.
! .IP \fB\-threads\fR 4
  .IX Item "-threads"
  Add support for multithreading with the \fIdce thread\fR library
! under HP\-UX.  This option sets flags for both the preprocessor and
  linker.
  .PP
! \fIIA\-64 Options\fR
  .IX Subsection "IA-64 Options"
  .PP
! These are the \fB\-m\fR options defined for the Intel IA\-64 architecture.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.  This is the default for HP\-UX.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.  This is the default for AIX5
  and GNU/Linux.
! .IP \fB\-mgnu\-as\fR 4
  .IX Item "-mgnu-as"
  .PD 0
! .IP \fB\-mno\-gnu\-as\fR 4
  .IX Item "-mno-gnu-as"
  .PD
! Generate (or don\*(Aqt) code for the GNU assembler.  This is the default.
! .IP \fB\-mgnu\-ld\fR 4
  .IX Item "-mgnu-ld"
  .PD 0
! .IP \fB\-mno\-gnu\-ld\fR 4
  .IX Item "-mno-gnu-ld"
  .PD
! Generate (or don\*(Aqt) code for the GNU linker.  This is the default.
! .IP \fB\-mno\-pic\fR 4
  .IX Item "-mno-pic"
  Generate code that does not use a global pointer register.  The result
! is not position independent code, and violates the IA\-64 ABI.
! .IP \fB\-mvolatile\-asm\-stop\fR 4
  .IX Item "-mvolatile-asm-stop"
  .PD 0
! .IP \fB\-mno\-volatile\-asm\-stop\fR 4
  .IX Item "-mno-volatile-asm-stop"
  .PD
! Generate (or don\*(Aqt) a stop bit immediately before and after volatile asm
  statements.
! .IP \fB\-mregister\-names\fR 4
  .IX Item "-mregister-names"
  .PD 0
! .IP \fB\-mno\-register\-names\fR 4
  .IX Item "-mno-register-names"
  .PD
! Generate (or don\*(Aqt) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
  the stacked registers.  This may make assembler output more readable.
! .IP \fB\-mno\-sdata\fR 4
  .IX Item "-mno-sdata"
  .PD 0
! .IP \fB\-msdata\fR 4
  .IX Item "-msdata"
  .PD
  Disable (or enable) optimizations that use the small data section.  This may
  be useful for working around optimizer bugs.
! .IP \fB\-mconstant\-gp\fR 4
  .IX Item "-mconstant-gp"
  Generate code that uses a single constant global pointer value.  This is
  useful when compiling kernel code.
! .IP \fB\-mauto\-pic\fR 4
  .IX Item "-mauto-pic"
! Generate code that is self\-relocatable.  This implies \fB\-mconstant\-gp\fR.
  This is useful when compiling firmware code.
! .IP \fB\-minline\-float\-divide\-min\-latency\fR 4
  .IX Item "-minline-float-divide-min-latency"
! Generate code for inline divides of floating\-point values
  using the minimum latency algorithm.
! .IP \fB\-minline\-float\-divide\-max\-throughput\fR 4
  .IX Item "-minline-float-divide-max-throughput"
! Generate code for inline divides of floating\-point values
  using the maximum throughput algorithm.
! .IP \fB\-mno\-inline\-float\-divide\fR 4
  .IX Item "-mno-inline-float-divide"
! Do not generate inline code for divides of floating\-point values.
! .IP \fB\-minline\-int\-divide\-min\-latency\fR 4
  .IX Item "-minline-int-divide-min-latency"
  Generate code for inline divides of integer values
  using the minimum latency algorithm.
! .IP \fB\-minline\-int\-divide\-max\-throughput\fR 4
  .IX Item "-minline-int-divide-max-throughput"
  Generate code for inline divides of integer values
  using the maximum throughput algorithm.
! .IP \fB\-mno\-inline\-int\-divide\fR 4
  .IX Item "-mno-inline-int-divide"
  Do not generate inline code for divides of integer values.
! .IP \fB\-minline\-sqrt\-min\-latency\fR 4
  .IX Item "-minline-sqrt-min-latency"
  Generate code for inline square roots
  using the minimum latency algorithm.
! .IP \fB\-minline\-sqrt\-max\-throughput\fR 4
  .IX Item "-minline-sqrt-max-throughput"
  Generate code for inline square roots
  using the maximum throughput algorithm.
! .IP \fB\-mno\-inline\-sqrt\fR 4
  .IX Item "-mno-inline-sqrt"
  Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Do (don\*(Aqt) generate code that uses the fused multiply/add or multiply/subtract
  instructions.  The default is to use these instructions.
! .IP \fB\-mno\-dwarf2\-asm\fR 4
  .IX Item "-mno-dwarf2-asm"
  .PD 0
! .IP \fB\-mdwarf2\-asm\fR 4
  .IX Item "-mdwarf2-asm"
  .PD
! Don\*(Aqt (or do) generate assembler code for the DWARF line number debugging
! info.  This may be useful when not using the GNU assembler.
! .IP \fB\-mearly\-stop\-bits\fR 4
  .IX Item "-mearly-stop-bits"
  .PD 0
! .IP \fB\-mno\-early\-stop\-bits\fR 4
  .IX Item "-mno-early-stop-bits"
  .PD
  Allow stop bits to be placed earlier than immediately preceding the
  instruction that triggered the stop bit.  This can improve instruction
  scheduling, but does not always do so.
! .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP \fB\-mtls\-size=\fR\fItls\-size\fR 4
  .IX Item "-mtls-size=tls-size"
! Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
  64.
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Tune the instruction scheduling for a particular CPU, Valid values are
  \&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
  and \fBmckinley\fR.
! .IP \fB\-milp32\fR 4
  .IX Item "-milp32"
  .PD 0
! .IP \fB\-mlp64\fR 4
  .IX Item "-mlp64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
! to 64 bits.  These are HP\-UX specific flags.
! .IP \fB\-mno\-sched\-br\-data\-spec\fR 4
  .IX Item "-mno-sched-br-data-spec"
  .PD 0
! .IP \fB\-msched\-br\-data\-spec\fR 4
  .IX Item "-msched-br-data-spec"
  .PD
  (Dis/En)able data speculative scheduling before reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is disabled.
! .IP \fB\-msched\-ar\-data\-spec\fR 4
  .IX Item "-msched-ar-data-spec"
  .PD 0
! .IP \fB\-mno\-sched\-ar\-data\-spec\fR 4
  .IX Item "-mno-sched-ar-data-spec"
  .PD
  (En/Dis)able data speculative scheduling after reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is enabled.
! .IP \fB\-mno\-sched\-control\-spec\fR 4
  .IX Item "-mno-sched-control-spec"
  .PD 0
! .IP \fB\-msched\-control\-spec\fR 4
  .IX Item "-msched-control-spec"
  .PD
  (Dis/En)able control speculative scheduling.  This feature is
*************** available only during region scheduling
*** 25965,26318 ****
  This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
  the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
  The default setting is disabled.
! .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
  .IX Item "-msched-br-in-data-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
  .IX Item "-mno-sched-br-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads before reload.
  This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
  .IX Item "-msched-ar-in-data-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
  .IX Item "-mno-sched-ar-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads after reload.
  This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP "\fB\-msched\-in\-control\-spec\fR" 4
  .IX Item "-msched-in-control-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
  .IX Item "-mno-sched-in-control-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the control speculative loads.
  This is effective only with \fB\-msched\-control\-spec\fR enabled.
  The default setting is enabled.
! .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
  .IX Item "-mno-sched-prefer-non-data-spec-insns"
  .PD 0
! .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
  .IX Item "-msched-prefer-non-data-spec-insns"
  .PD
! If enabled, data-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the data speculation much more conservative.
  The default setting is disabled.
! .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
  .IX Item "-mno-sched-prefer-non-control-spec-insns"
  .PD 0
! .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
  .IX Item "-msched-prefer-non-control-spec-insns"
  .PD
! If enabled, control-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the control speculation much more conservative.
  The default setting is disabled.
! .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
  .IX Item "-mno-sched-count-spec-in-critical-path"
  .PD 0
! .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
  .IX Item "-msched-count-spec-in-critical-path"
  .PD
  If enabled, speculative dependencies are considered during
  computation of the instructions priorities.  This makes the use of the
  speculation a bit more conservative.
  The default setting is disabled.
! .IP "\fB\-msched\-spec\-ldc\fR" 4
  .IX Item "-msched-spec-ldc"
  Use a simple data speculation check.  This option is on by default.
! .IP "\fB\-msched\-control\-spec\-ldc\fR" 4
  .IX Item "-msched-control-spec-ldc"
  Use a simple check for control speculation.  This option is on by default.
! .IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
  .IX Item "-msched-stop-bits-after-every-cycle"
  Place a stop bit after every cycle when scheduling.  This option is on
  by default.
! .IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
  .IX Item "-msched-fp-mem-deps-zero-cost"
! Assume that floating-point stores and loads are not likely to cause a conflict
  when placed into the same instruction group.  This option is disabled by
  default.
! .IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
  .IX Item "-msel-sched-dont-check-control-spec"
  Generate checks for control speculation in selective scheduling.
  This flag is disabled by default.
! .IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
  .IX Item "-msched-max-memory-insns=max-insns"
  Limit on the number of memory insns per instruction group, giving lower
  priority to subsequent memory insns attempting to schedule in the same
  instruction group. Frequently useful to prevent cache bank conflicts.
  The default value is 1.
! .IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
  .IX Item "-msched-max-memory-insns-hard-limit"
! Makes the limit specified by \fBmsched-max-memory-insns\fR a hard limit,
  disallowing more than that number in an instruction group.
! Otherwise, the limit is \*(L"soft\*(R", meaning that non-memory operations
  are preferred when the limit is reached, but memory operations may still
  be scheduled.
  .PP
! \fI\s-1LM32\s0 Options\fR
  .IX Subsection "LM32 Options"
  .PP
  These \fB\-m\fR options are defined for the LatticeMico32 architecture:
! .IP "\fB\-mbarrel\-shift\-enabled\fR" 4
  .IX Item "-mbarrel-shift-enabled"
! Enable barrel-shift instructions.
! .IP "\fB\-mdivide\-enabled\fR" 4
  .IX Item "-mdivide-enabled"
  Enable divide and modulus instructions.
! .IP "\fB\-mmultiply\-enabled\fR" 4
  .IX Item "-mmultiply-enabled"
  Enable multiply instructions.
! .IP "\fB\-msign\-extend\-enabled\fR" 4
  .IX Item "-msign-extend-enabled"
  Enable sign extend instructions.
! .IP "\fB\-muser\-enabled\fR" 4
  .IX Item "-muser-enabled"
! Enable user-defined instructions.
  .PP
  \fILoongArch Options\fR
  .IX Subsection "LoongArch Options"
  .PP
! These command-line options are defined for LoongArch targets:
! .IP "\fB\-march=\fR\fIarch-type\fR" 4
  .IX Item "-march=arch-type"
! Generate instructions for the machine type \fIarch-type\fR.
! \&\fB\-march=\fR\fIarch-type\fR allows \s-1GCC\s0 to generate code that
  may not run at all on processors other than the one indicated.
  .Sp
! The choices for \fIarch-type\fR are:
  .RS 4
! .IP "\fBnative\fR" 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP "\fBloongarch64\fR" 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP "\fBla464\fR" 4
  .IX Item "la464"
! LoongArch LA464\-based processor with \s-1LSX, LASX.\s0
! .IP "\fBla664\fR" 4
  .IX Item "la664"
! LoongArch LA664\-based processor with \s-1LSX, LASX\s0
  and all LoongArch v1.1 instructions.
! .IP "\fBla64v1.0\fR" 4
  .IX Item "la64v1.0"
! LoongArch64 \s-1ISA\s0 version 1.0.
! .IP "\fBla64v1.1\fR" 4
  .IX Item "la64v1.1"
! LoongArch64 \s-1ISA\s0 version 1.1.
  .RE
  .RS 4
  .Sp
! More information about LoongArch \s-1ISA\s0 versions can be found at
  <\fBhttps://github.com/loongson/la\-toolchain\-conventions\fR>.
  .RE
! .IP "\fB\-mtune=\fR\fItune-type\fR" 4
  .IX Item "-mtune=tune-type"
  Optimize the generated code for the given processor target.
  .Sp
! The choices for \fItune-type\fR are:
  .RS 4
! .IP "\fBnative\fR" 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP "\fBgeneric\fR" 4
  .IX Item "generic"
  Generic LoongArch processor.
! .IP "\fBloongarch64\fR" 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP "\fBla464\fR" 4
  .IX Item "la464"
! LoongArch \s-1LA464\s0 core.
! .IP "\fBla664\fR" 4
  .IX Item "la664"
! LoongArch \s-1LA664\s0 core.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mabi=\fR\fIbase-abi-type\fR" 4
  .IX Item "-mabi=base-abi-type"
  Generate code for the specified calling convention.
! \&\fIbase-abi-type\fR can be one of:
  .RS 4
! .IP "\fBlp64d\fR" 4
  .IX Item "lp64d"
! Uses 64\-bit general purpose registers and 32/64\-bit floating-point
! registers for parameter passing.  Data model is \s-1LP64,\s0 where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP "\fBlp64f\fR" 4
  .IX Item "lp64f"
! Uses 64\-bit general purpose registers and 32\-bit floating-point
! registers for parameter passing.  Data model is \s-1LP64,\s0 where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP "\fBlp64s\fR" 4
  .IX Item "lp64s"
! Uses 64\-bit general purpose registers and no floating-point
! registers for parameter passing.  Data model is \s-1LP64,\s0 where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfpu=\fR\fIfpu-type\fR" 4
  .IX Item "-mfpu=fpu-type"
! Generate code for the specified \s-1FPU\s0 type, which can be one of:
  .RS 4
! .IP "\fB64\fR" 4
  .IX Item "64"
! Allow the use of hardware floating-point instructions for 32\-bit
  and 64\-bit operations.
! .IP "\fB32\fR" 4
  .IX Item "32"
! Allow the use of hardware floating-point instructions for 32\-bit
  operations.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  .PD 0
! .IP "\fB0\fR" 4
  .IX Item "0"
  .PD
! Prevent the use of hardware floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fB\-msimd=\fR\fIsimd-type\fR" 4
  .IX Item "-msimd=simd-type"
! Enable generation of LoongArch \s-1SIMD\s0 instructions for vectorization
  and via builtin functions.  The value can be one of:
  .RS 4
! .IP "\fBlasx\fR" 4
  .IX Item "lasx"
  Enable generating instructions from the 256\-bit LoongArch Advanced
! \&\s-1SIMD\s0 Extension (\s-1LASX\s0) and the 128\-bit LoongArch \s-1SIMD\s0 Extension (\s-1LSX\s0).
! .IP "\fBlsx\fR" 4
  .IX Item "lsx"
! Enable generating instructions from the 128\-bit LoongArch \s-1SIMD\s0
! Extension (\s-1LSX\s0).
! .IP "\fBnone\fR" 4
  .IX Item "none"
! No LoongArch \s-1SIMD\s0 instruction may be generated.
  .RE
  .RS 4
  .RE
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Force \fB\-mfpu=none\fR and prevents the use of floating-point
  registers for parameter passing.  This option may change the target
! \&\s-1ABI.\s0
! .IP "\fB\-msingle\-float\fR" 4
  .IX Item "-msingle-float"
! Force \fB\-mfpu=32\fR and allow the use of 32\-bit floating-point
  registers for parameter passing.  This option may change the target
! \&\s-1ABI.\s0
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
! Force \fB\-mfpu=64\fR and allow the use of 32/64\-bit floating-point
  registers for parameter passing.  This option may change the target
! \&\s-1ABI.\s0
! .IP "\fB\-mlasx\fR" 4
  .IX Item "-mlasx"
  .PD 0
! .IP "\fB\-mno\-lasx\fR" 4
  .IX Item "-mno-lasx"
! .IP "\fB\-mlsx\fR" 4
  .IX Item "-mlsx"
! .IP "\fB\-mno\-lsx\fR" 4
  .IX Item "-mno-lsx"
  .PD
! Incrementally adjust the scope of the \s-1SIMD\s0 extensions (none / \s-1LSX / LASX\s0)
! that can be used by the compiler for code generation.  Enabling \s-1LASX\s0 with
! \&\fBmlasx\fR automatically enables \s-1LSX,\s0 and diabling \s-1LSX\s0 with \fBmno-lsx\fR
! automatically disables \s-1LASX.\s0  These driver-only options act upon the final
  \&\fBmsimd\fR configuration state and make incremental chagnes in the order
! they appear on the \s-1GCC\s0 driver's command line, deriving the final / canonicalized
  \&\fBmsimd\fR option that is passed to the compiler proper.
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP "\fB\-mcheck\-zero\-division\fR" 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP "\fB\-mno\-check\-zero\-divison\fR" 4
  .IX Item "-mno-check-zero-divison"
  .PD
  Trap (do not trap) on integer division by zero.  The default is
  \&\fB\-mcheck\-zero\-division\fR for \fB\-O0\fR or \fB\-Og\fR, and
  \&\fB\-mno\-check\-zero\-division\fR for other optimization levels.
! .IP "\fB\-mcond\-move\-int\fR" 4
  .IX Item "-mcond-move-int"
  .PD 0
! .IP "\fB\-mno\-cond\-move\-int\fR" 4
  .IX Item "-mno-cond-move-int"
  .PD
! Conditional moves for integral data in general-purpose registers
  are enabled (disabled).  The default is \fB\-mcond\-move\-int\fR.
! .IP "\fB\-mcond\-move\-float\fR" 4
  .IX Item "-mcond-move-float"
  .PD 0
! .IP "\fB\-mno\-cond\-move\-float\fR" 4
  .IX Item "-mno-cond-move-float"
  .PD
! Conditional moves for floating-point registers are enabled (disabled).
  The default is \fB\-mcond\-move\-float\fR.
! .IP "\fB\-mmemcpy\fR" 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP "\fB\-mno\-memcpy\fR" 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non-trivial block moves.
! The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline most
! constant-sized copies.  Setting optimization level to \fB\-Os\fR also
  forces the use of \f(CW\*(C`memcpy\*(C'\fR, but \fB\-mno\-memcpy\fR may override this
  behavior if explicitly specified, regardless of the order these options on
  the command line.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification. The default is
  \&\fB\-mno\-strict\-align\fR.
! .IP "\fB\-msmall\-data\-limit=\fR\fInumber\fR" 4
  .IX Item "-msmall-data-limit=number"
  Put global and static data smaller than \fInumber\fR bytes into a special
  section (on some targets).  The default value is 0.
! .IP "\fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR" 4
  .IX Item "-mmax-inline-memcpy-size=n"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure copies)
  less than or equal to \fIn\fR bytes.  The default value of \fIn\fR is 1024.
! .IP "\fB\-mcmodel=\fR\fIcode-model\fR" 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of:
  .RS 4
! .IP "\fBtiny-static (Not implemented yet)\fR" 4
  .IX Item "tiny-static (Not implemented yet)"
  .PD 0
  .IP "\fBtiny (Not implemented yet)\fR" 4
  .IX Item "tiny (Not implemented yet)"
! .IP "\fBnormal\fR" 4
  .IX Item "normal"
  .PD
  The text segment must be within 128MB addressing space.  The data segment must
  be within 2GB addressing space.
! .IP "\fBmedium\fR" 4
  .IX Item "medium"
  The text segment and data segment must be within 2GB addressing space.
  .IP "\fBlarge (Not implemented yet)\fR" 4
  .IX Item "large (Not implemented yet)"
  .PD 0
! .IP "\fBextreme\fR" 4
  .IX Item "extreme"
  .PD
  This mode does not limit the size of the code segment and data segment.
--- 25900,26253 ----
  This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
  the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
  The default setting is disabled.
! .IP \fB\-msched\-br\-in\-data\-spec\fR 4
  .IX Item "-msched-br-in-data-spec"
  .PD 0
! .IP \fB\-mno\-sched\-br\-in\-data\-spec\fR 4
  .IX Item "-mno-sched-br-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads before reload.
  This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP \fB\-msched\-ar\-in\-data\-spec\fR 4
  .IX Item "-msched-ar-in-data-spec"
  .PD 0
! .IP \fB\-mno\-sched\-ar\-in\-data\-spec\fR 4
  .IX Item "-mno-sched-ar-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads after reload.
  This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP \fB\-msched\-in\-control\-spec\fR 4
  .IX Item "-msched-in-control-spec"
  .PD 0
! .IP \fB\-mno\-sched\-in\-control\-spec\fR 4
  .IX Item "-mno-sched-in-control-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the control speculative loads.
  This is effective only with \fB\-msched\-control\-spec\fR enabled.
  The default setting is enabled.
! .IP \fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR 4
  .IX Item "-mno-sched-prefer-non-data-spec-insns"
  .PD 0
! .IP \fB\-msched\-prefer\-non\-data\-spec\-insns\fR 4
  .IX Item "-msched-prefer-non-data-spec-insns"
  .PD
! If enabled, data\-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the data speculation much more conservative.
  The default setting is disabled.
! .IP \fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR 4
  .IX Item "-mno-sched-prefer-non-control-spec-insns"
  .PD 0
! .IP \fB\-msched\-prefer\-non\-control\-spec\-insns\fR 4
  .IX Item "-msched-prefer-non-control-spec-insns"
  .PD
! If enabled, control\-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the control speculation much more conservative.
  The default setting is disabled.
! .IP \fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR 4
  .IX Item "-mno-sched-count-spec-in-critical-path"
  .PD 0
! .IP \fB\-msched\-count\-spec\-in\-critical\-path\fR 4
  .IX Item "-msched-count-spec-in-critical-path"
  .PD
  If enabled, speculative dependencies are considered during
  computation of the instructions priorities.  This makes the use of the
  speculation a bit more conservative.
  The default setting is disabled.
! .IP \fB\-msched\-spec\-ldc\fR 4
  .IX Item "-msched-spec-ldc"
  Use a simple data speculation check.  This option is on by default.
! .IP \fB\-msched\-control\-spec\-ldc\fR 4
  .IX Item "-msched-control-spec-ldc"
  Use a simple check for control speculation.  This option is on by default.
! .IP \fB\-msched\-stop\-bits\-after\-every\-cycle\fR 4
  .IX Item "-msched-stop-bits-after-every-cycle"
  Place a stop bit after every cycle when scheduling.  This option is on
  by default.
! .IP \fB\-msched\-fp\-mem\-deps\-zero\-cost\fR 4
  .IX Item "-msched-fp-mem-deps-zero-cost"
! Assume that floating\-point stores and loads are not likely to cause a conflict
  when placed into the same instruction group.  This option is disabled by
  default.
! .IP \fB\-msel\-sched\-dont\-check\-control\-spec\fR 4
  .IX Item "-msel-sched-dont-check-control-spec"
  Generate checks for control speculation in selective scheduling.
  This flag is disabled by default.
! .IP \fB\-msched\-max\-memory\-insns=\fR\fImax\-insns\fR 4
  .IX Item "-msched-max-memory-insns=max-insns"
  Limit on the number of memory insns per instruction group, giving lower
  priority to subsequent memory insns attempting to schedule in the same
  instruction group. Frequently useful to prevent cache bank conflicts.
  The default value is 1.
! .IP \fB\-msched\-max\-memory\-insns\-hard\-limit\fR 4
  .IX Item "-msched-max-memory-insns-hard-limit"
! Makes the limit specified by \fBmsched\-max\-memory\-insns\fR a hard limit,
  disallowing more than that number in an instruction group.
! Otherwise, the limit is "soft", meaning that non\-memory operations
  are preferred when the limit is reached, but memory operations may still
  be scheduled.
  .PP
! \fILM32 Options\fR
  .IX Subsection "LM32 Options"
  .PP
  These \fB\-m\fR options are defined for the LatticeMico32 architecture:
! .IP \fB\-mbarrel\-shift\-enabled\fR 4
  .IX Item "-mbarrel-shift-enabled"
! Enable barrel\-shift instructions.
! .IP \fB\-mdivide\-enabled\fR 4
  .IX Item "-mdivide-enabled"
  Enable divide and modulus instructions.
! .IP \fB\-mmultiply\-enabled\fR 4
  .IX Item "-mmultiply-enabled"
  Enable multiply instructions.
! .IP \fB\-msign\-extend\-enabled\fR 4
  .IX Item "-msign-extend-enabled"
  Enable sign extend instructions.
! .IP \fB\-muser\-enabled\fR 4
  .IX Item "-muser-enabled"
! Enable user\-defined instructions.
  .PP
  \fILoongArch Options\fR
  .IX Subsection "LoongArch Options"
  .PP
! These command\-line options are defined for LoongArch targets:
! .IP \fB\-march=\fR\fIarch\-type\fR 4
  .IX Item "-march=arch-type"
! Generate instructions for the machine type \fIarch\-type\fR.
! \&\fB\-march=\fR\fIarch\-type\fR allows GCC to generate code that
  may not run at all on processors other than the one indicated.
  .Sp
! The choices for \fIarch\-type\fR are:
  .RS 4
! .IP \fBnative\fR 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP \fBloongarch64\fR 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP \fBla464\fR 4
  .IX Item "la464"
! LoongArch LA464\-based processor with LSX, LASX.
! .IP \fBla664\fR 4
  .IX Item "la664"
! LoongArch LA664\-based processor with LSX, LASX
  and all LoongArch v1.1 instructions.
! .IP \fBla64v1.0\fR 4
  .IX Item "la64v1.0"
! LoongArch64 ISA version 1.0.
! .IP \fBla64v1.1\fR 4
  .IX Item "la64v1.1"
! LoongArch64 ISA version 1.1.
  .RE
  .RS 4
  .Sp
! More information about LoongArch ISA versions can be found at
  <\fBhttps://github.com/loongson/la\-toolchain\-conventions\fR>.
  .RE
! .IP \fB\-mtune=\fR\fItune\-type\fR 4
  .IX Item "-mtune=tune-type"
  Optimize the generated code for the given processor target.
  .Sp
! The choices for \fItune\-type\fR are:
  .RS 4
! .IP \fBnative\fR 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP \fBgeneric\fR 4
  .IX Item "generic"
  Generic LoongArch processor.
! .IP \fBloongarch64\fR 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP \fBla464\fR 4
  .IX Item "la464"
! LoongArch LA464 core.
! .IP \fBla664\fR 4
  .IX Item "la664"
! LoongArch LA664 core.
  .RE
  .RS 4
  .RE
! .IP \fB\-mabi=\fR\fIbase\-abi\-type\fR 4
  .IX Item "-mabi=base-abi-type"
  Generate code for the specified calling convention.
! \&\fIbase\-abi\-type\fR can be one of:
  .RS 4
! .IP \fBlp64d\fR 4
  .IX Item "lp64d"
! Uses 64\-bit general purpose registers and 32/64\-bit floating\-point
! registers for parameter passing.  Data model is LP64, where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP \fBlp64f\fR 4
  .IX Item "lp64f"
! Uses 64\-bit general purpose registers and 32\-bit floating\-point
! registers for parameter passing.  Data model is LP64, where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP \fBlp64s\fR 4
  .IX Item "lp64s"
! Uses 64\-bit general purpose registers and no floating\-point
! registers for parameter passing.  Data model is LP64, where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfpu=\fR\fIfpu\-type\fR 4
  .IX Item "-mfpu=fpu-type"
! Generate code for the specified FPU type, which can be one of:
  .RS 4
! .IP \fB64\fR 4
  .IX Item "64"
! Allow the use of hardware floating\-point instructions for 32\-bit
  and 64\-bit operations.
! .IP \fB32\fR 4
  .IX Item "32"
! Allow the use of hardware floating\-point instructions for 32\-bit
  operations.
! .IP \fBnone\fR 4
  .IX Item "none"
  .PD 0
! .IP \fB0\fR 4
  .IX Item "0"
  .PD
! Prevent the use of hardware floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fB\-msimd=\fR\fIsimd\-type\fR 4
  .IX Item "-msimd=simd-type"
! Enable generation of LoongArch SIMD instructions for vectorization
  and via builtin functions.  The value can be one of:
  .RS 4
! .IP \fBlasx\fR 4
  .IX Item "lasx"
  Enable generating instructions from the 256\-bit LoongArch Advanced
! SIMD Extension (LASX) and the 128\-bit LoongArch SIMD Extension (LSX).
! .IP \fBlsx\fR 4
  .IX Item "lsx"
! Enable generating instructions from the 128\-bit LoongArch SIMD
! Extension (LSX).
! .IP \fBnone\fR 4
  .IX Item "none"
! No LoongArch SIMD instruction may be generated.
  .RE
  .RS 4
  .RE
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Force \fB\-mfpu=none\fR and prevents the use of floating\-point
  registers for parameter passing.  This option may change the target
! ABI.
! .IP \fB\-msingle\-float\fR 4
  .IX Item "-msingle-float"
! Force \fB\-mfpu=32\fR and allow the use of 32\-bit floating\-point
  registers for parameter passing.  This option may change the target
! ABI.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
! Force \fB\-mfpu=64\fR and allow the use of 32/64\-bit floating\-point
  registers for parameter passing.  This option may change the target
! ABI.
! .IP \fB\-mlasx\fR 4
  .IX Item "-mlasx"
  .PD 0
! .IP \fB\-mno\-lasx\fR 4
  .IX Item "-mno-lasx"
! .IP \fB\-mlsx\fR 4
  .IX Item "-mlsx"
! .IP \fB\-mno\-lsx\fR 4
  .IX Item "-mno-lsx"
  .PD
! Incrementally adjust the scope of the SIMD extensions (none / LSX / LASX)
! that can be used by the compiler for code generation.  Enabling LASX with
! \&\fBmlasx\fR automatically enables LSX, and diabling LSX with \fBmno\-lsx\fR
! automatically disables LASX.  These driver\-only options act upon the final
  \&\fBmsimd\fR configuration state and make incremental chagnes in the order
! they appear on the GCC driver\*(Aqs command line, deriving the final / canonicalized
  \&\fBmsimd\fR option that is passed to the compiler proper.
! .IP \fB\-mbranch\-cost=\fR\fIn\fR 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP \fB\-mcheck\-zero\-division\fR 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP \fB\-mno\-check\-zero\-divison\fR 4
  .IX Item "-mno-check-zero-divison"
  .PD
  Trap (do not trap) on integer division by zero.  The default is
  \&\fB\-mcheck\-zero\-division\fR for \fB\-O0\fR or \fB\-Og\fR, and
  \&\fB\-mno\-check\-zero\-division\fR for other optimization levels.
! .IP \fB\-mcond\-move\-int\fR 4
  .IX Item "-mcond-move-int"
  .PD 0
! .IP \fB\-mno\-cond\-move\-int\fR 4
  .IX Item "-mno-cond-move-int"
  .PD
! Conditional moves for integral data in general\-purpose registers
  are enabled (disabled).  The default is \fB\-mcond\-move\-int\fR.
! .IP \fB\-mcond\-move\-float\fR 4
  .IX Item "-mcond-move-float"
  .PD 0
! .IP \fB\-mno\-cond\-move\-float\fR 4
  .IX Item "-mno-cond-move-float"
  .PD
! Conditional moves for floating\-point registers are enabled (disabled).
  The default is \fB\-mcond\-move\-float\fR.
! .IP \fB\-mmemcpy\fR 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP \fB\-mno\-memcpy\fR 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non\-trivial block moves.
! The default is \fB\-mno\-memcpy\fR, which allows GCC to inline most
! constant\-sized copies.  Setting optimization level to \fB\-Os\fR also
  forces the use of \f(CW\*(C`memcpy\*(C'\fR, but \fB\-mno\-memcpy\fR may override this
  behavior if explicitly specified, regardless of the order these options on
  the command line.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification. The default is
  \&\fB\-mno\-strict\-align\fR.
! .IP \fB\-msmall\-data\-limit=\fR\fInumber\fR 4
  .IX Item "-msmall-data-limit=number"
  Put global and static data smaller than \fInumber\fR bytes into a special
  section (on some targets).  The default value is 0.
! .IP \fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR 4
  .IX Item "-mmax-inline-memcpy-size=n"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure copies)
  less than or equal to \fIn\fR bytes.  The default value of \fIn\fR is 1024.
! .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of:
  .RS 4
! .IP "\fBtiny\-static (Not implemented yet)\fR" 4
  .IX Item "tiny-static (Not implemented yet)"
  .PD 0
  .IP "\fBtiny (Not implemented yet)\fR" 4
  .IX Item "tiny (Not implemented yet)"
! .IP \fBnormal\fR 4
  .IX Item "normal"
  .PD
  The text segment must be within 128MB addressing space.  The data segment must
  be within 2GB addressing space.
! .IP \fBmedium\fR 4
  .IX Item "medium"
  The text segment and data segment must be within 2GB addressing space.
  .IP "\fBlarge (Not implemented yet)\fR" 4
  .IX Item "large (Not implemented yet)"
  .PD 0
! .IP \fBextreme\fR 4
  .IX Item "extreme"
  .PD
  This mode does not limit the size of the code segment and data segment.
*************** and/or \fB\-mexplicit\-relocs=none\fR.
*** 26323,26329 ****
  .Sp
  The default code model is \f(CW\*(C`normal\*(C'\fR.
  .RE
! .IP "\fB\-mexplicit\-relocs=\fR\fIstyle\fR" 4
  .IX Item "-mexplicit-relocs=style"
  Set when to use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
--- 26258,26264 ----
  .Sp
  The default code model is \f(CW\*(C`normal\*(C'\fR.
  .RE
! .IP \fB\-mexplicit\-relocs=\fR\fIstyle\fR 4
  .IX Item "-mexplicit-relocs=style"
  Set when to use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
*************** are always used, with \fB\-mexplicit\-re
*** 26334,26441 ****
  use the relocation operators where the linker relaxation is impossible to
  improve the code quality, and macros elsewhere.  The default
  value for the option is determined with the assembler capability detected
! during \s-1GCC\s0 build-time and the setting of \fB\-mrelax\fR:
  \&\fB\-mexplicit\-relocs=none\fR if the assembler does not support
  relocation operators at all,
  \&\fB\-mexplicit\-relocs=always\fR if the assembler supports relocation
  operators but \fB\-mrelax\fR is not enabled,
  \&\fB\-mexplicit\-relocs=auto\fR if the assembler supports relocation
  operators and \fB\-mrelax\fR is enabled.
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
  An alias of \fB\-mexplicit\-relocs=always\fR for backward compatibility.
! .IP "\fB\-mno\-explicit\-relocs\fR" 4
  .IX Item "-mno-explicit-relocs"
  An alias of \fB\-mexplicit\-relocs=none\fR for backward compatibility.
! .IP "\fB\-mdirect\-extern\-access\fR" 4
  .IX Item "-mdirect-extern-access"
  .PD 0
! .IP "\fB\-mno\-direct\-extern\-access\fR" 4
  .IX Item "-mno-direct-extern-access"
  .PD
! Do not use or use \s-1GOT\s0 to access external symbols.  The default is
! \&\fB\-mno\-direct\-extern\-access\fR: \s-1GOT\s0 is used for external symbols with
  default visibility, but not used for other external symbols.
  .Sp
! With \fB\-mdirect\-extern\-access\fR, \s-1GOT\s0 is not used and all external
! symbols are PC-relatively addressed.  It is \fBonly\fR suitable for
! environments where no dynamic link is performed, like firmwares, \s-1OS\s0
  kernels, executables linked with \fB\-static\fR or \fB\-static\-pie\fR.
  \&\fB\-mdirect\-extern\-access\fR is not compatible with \fB\-fPIC\fR or
  \&\fB\-fpic\fR.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  .PD 0
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
  .PD
  Take (do not take) advantage of linker relaxations.  If
  \&\fB\-mpass\-mrelax\-to\-as\fR is enabled, this option is also passed to
! the assembler.  The default is determined during \s-1GCC\s0 build-time by
  detecting corresponding assembler support:
  \&\fB\-mrelax\fR if the assembler supports both the \fB\-mrelax\fR
! option and the conditional branch relaxation (it's required or the
  \&\f(CW\*(C`.align\*(C'\fR directives and conditional branch instructions in the
! assembly code outputted by \s-1GCC\s0 may be rejected by the assembler because
  of a relocation overflow), \fB\-mno\-relax\fR otherwise.
! .IP "\fB\-mpass\-mrelax\-to\-as\fR" 4
  .IX Item "-mpass-mrelax-to-as"
  .PD 0
! .IP "\fB\-mno\-pass\-mrelax\-to\-as\fR" 4
  .IX Item "-mno-pass-mrelax-to-as"
  .PD
  Pass (do not pass) the \fB\-mrelax\fR or \fB\-mno\-relax\fR option
! to the assembler.  The default is determined during \s-1GCC\s0 build-time by
  detecting corresponding assembler support:
  \&\fB\-mpass\-mrelax\-to\-as\fR if the assembler supports the
  \&\fB\-mrelax\fR option, \fB\-mno\-pass\-mrelax\-to\-as\fR otherwise.
  This option is mostly useful for debugging, or interoperation with
! assemblers different from the build-time one.
! .IP "\fB\-mrecip\fR" 4
  .IX Item "-mrecip"
  This option enables use of the reciprocal estimate and reciprocal square
! root estimate instructions with additional Newton-Raphson steps to increase
  precision instead of doing a divide or square root and divide for
! floating-point arguments.
  These instructions are generated only when \fB\-funsafe\-math\-optimizations\fR
  is enabled together with \fB\-ffinite\-math\-only\fR and
  \&\fB\-fno\-trapping\-math\fR.
  This option is off by default. Before you can use this option, you must sure the
! target \s-1CPU\s0 supports frecipe and frsqrte instructions.
  Note that while the throughput of the sequence is higher than the throughput of
! the non-reciprocal instruction, the precision of the sequence can be decreased
  by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
! .IP "\fB\-mrecip=\fR\fIopt\fR" 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP "\fBdiv\fR" 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP "\fBvec-div\fR" 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP "\fBsqrt\fR" 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP "\fBvec-sqrt\fR" 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
! .IP "\fBrsqrt\fR" 4
  .IX Item "rsqrt"
  Enable the approximation for scalar reciprocal square root.
! .IP "\fBvec-rsqrt\fR" 4
  .IX Item "vec-rsqrt"
  Enable the approximation for vectorized reciprocal square root.
  .RE
--- 26269,26376 ----
  use the relocation operators where the linker relaxation is impossible to
  improve the code quality, and macros elsewhere.  The default
  value for the option is determined with the assembler capability detected
! during GCC build\-time and the setting of \fB\-mrelax\fR:
  \&\fB\-mexplicit\-relocs=none\fR if the assembler does not support
  relocation operators at all,
  \&\fB\-mexplicit\-relocs=always\fR if the assembler supports relocation
  operators but \fB\-mrelax\fR is not enabled,
  \&\fB\-mexplicit\-relocs=auto\fR if the assembler supports relocation
  operators and \fB\-mrelax\fR is enabled.
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
  An alias of \fB\-mexplicit\-relocs=always\fR for backward compatibility.
! .IP \fB\-mno\-explicit\-relocs\fR 4
  .IX Item "-mno-explicit-relocs"
  An alias of \fB\-mexplicit\-relocs=none\fR for backward compatibility.
! .IP \fB\-mdirect\-extern\-access\fR 4
  .IX Item "-mdirect-extern-access"
  .PD 0
! .IP \fB\-mno\-direct\-extern\-access\fR 4
  .IX Item "-mno-direct-extern-access"
  .PD
! Do not use or use GOT to access external symbols.  The default is
! \&\fB\-mno\-direct\-extern\-access\fR: GOT is used for external symbols with
  default visibility, but not used for other external symbols.
  .Sp
! With \fB\-mdirect\-extern\-access\fR, GOT is not used and all external
! symbols are PC\-relatively addressed.  It is \fBonly\fR suitable for
! environments where no dynamic link is performed, like firmwares, OS
  kernels, executables linked with \fB\-static\fR or \fB\-static\-pie\fR.
  \&\fB\-mdirect\-extern\-access\fR is not compatible with \fB\-fPIC\fR or
  \&\fB\-fpic\fR.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  .PD 0
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
  .PD
  Take (do not take) advantage of linker relaxations.  If
  \&\fB\-mpass\-mrelax\-to\-as\fR is enabled, this option is also passed to
! the assembler.  The default is determined during GCC build\-time by
  detecting corresponding assembler support:
  \&\fB\-mrelax\fR if the assembler supports both the \fB\-mrelax\fR
! option and the conditional branch relaxation (it\*(Aqs required or the
  \&\f(CW\*(C`.align\*(C'\fR directives and conditional branch instructions in the
! assembly code outputted by GCC may be rejected by the assembler because
  of a relocation overflow), \fB\-mno\-relax\fR otherwise.
! .IP \fB\-mpass\-mrelax\-to\-as\fR 4
  .IX Item "-mpass-mrelax-to-as"
  .PD 0
! .IP \fB\-mno\-pass\-mrelax\-to\-as\fR 4
  .IX Item "-mno-pass-mrelax-to-as"
  .PD
  Pass (do not pass) the \fB\-mrelax\fR or \fB\-mno\-relax\fR option
! to the assembler.  The default is determined during GCC build\-time by
  detecting corresponding assembler support:
  \&\fB\-mpass\-mrelax\-to\-as\fR if the assembler supports the
  \&\fB\-mrelax\fR option, \fB\-mno\-pass\-mrelax\-to\-as\fR otherwise.
  This option is mostly useful for debugging, or interoperation with
! assemblers different from the build\-time one.
! .IP \fB\-mrecip\fR 4
  .IX Item "-mrecip"
  This option enables use of the reciprocal estimate and reciprocal square
! root estimate instructions with additional Newton\-Raphson steps to increase
  precision instead of doing a divide or square root and divide for
! floating\-point arguments.
  These instructions are generated only when \fB\-funsafe\-math\-optimizations\fR
  is enabled together with \fB\-ffinite\-math\-only\fR and
  \&\fB\-fno\-trapping\-math\fR.
  This option is off by default. Before you can use this option, you must sure the
! target CPU supports frecipe and frsqrte instructions.
  Note that while the throughput of the sequence is higher than the throughput of
! the non\-reciprocal instruction, the precision of the sequence can be decreased
  by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
! .IP \fB\-mrecip=\fR\fIopt\fR 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma\-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP \fBdefault\fR 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP \fBdiv\fR 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP \fBvec\-div\fR 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP \fBsqrt\fR 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP \fBvec\-sqrt\fR 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
! .IP \fBrsqrt\fR 4
  .IX Item "rsqrt"
  Enable the approximation for scalar reciprocal square root.
! .IP \fBvec\-rsqrt\fR 4
  .IX Item "vec-rsqrt"
  Enable the approximation for vectorized reciprocal square root.
  .RE
*************** Enable the approximation for vectorized
*** 26444,26505 ****
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for scalar square root.
  .RE
! .IP "\fB\-mfrecipe\fR" 4
  .IX Item "-mfrecipe"
  .PD 0
! .IP "\fB\-mno\-frecipe\fR" 4
  .IX Item "-mno-frecipe"
  .PD
  Use (do not use) \f(CW\*(C`frecipe.{s/d}\*(C'\fR and \f(CW\*(C`frsqrte.{s/d}\*(C'\fR
  instructions.  When build with \fB\-march=la664\fR, it is enabled by default.
  The default is \fB\-mno\-frecipe\fR.
! .IP "\fB\-mdiv32\fR" 4
  .IX Item "-mdiv32"
  .PD 0
! .IP "\fB\-mno\-div32\fR" 4
  .IX Item "-mno-div32"
  .PD
  Use (do not use) \f(CW\*(C`div.w[u]\*(C'\fR and \f(CW\*(C`mod.w[u]\*(C'\fR instructions with input
! not sign-extended.  When build with \fB\-march=la664\fR, it is enabled by
  default.  The default is \fB\-mno\-div32\fR.
! .IP "\fB\-mlam\-bh\fR" 4
  .IX Item "-mlam-bh"
  .PD 0
! .IP "\fB\-mno\-lam\-bh\fR" 4
  .IX Item "-mno-lam-bh"
  .PD
  Use (do not use) \f(CW\*(C`am{swap/add}[_db].{b/h}\*(C'\fR instructions.  When build
  with \fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lam\-bh\fR.
! .IP "\fB\-mlamcas\fR" 4
  .IX Item "-mlamcas"
  .PD 0
! .IP "\fB\-mno\-lamcas\fR" 4
  .IX Item "-mno-lamcas"
  .PD
  Use (do not use) \f(CW\*(C`amcas[_db].{b/h/w/d}\*(C'\fR instructions.  When build with
  \&\fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lamcas\fR.
! .IP "\fB\-mld\-seq\-sa\fR" 4
  .IX Item "-mld-seq-sa"
  .PD 0
! .IP "\fB\-mno\-ld\-seq\-sa\fR" 4
  .IX Item "-mno-ld-seq-sa"
  .PD
! Whether a same-address load-load barrier (\f(CW\*(C`dbar 0x700\*(C'\fR) is needed.  When
  build with \fB\-march=la664\fR, it is enabled by default.  The default is
! \&\fB\-mno\-ld\-seq\-sa\fR, the load-load barrier is needed.
! .IP "\fB\-mtls\-dialect=\fR\fIopt\fR" 4
  .IX Item "-mtls-dialect=opt"
  This option controls which tls dialect may be used for general dynamic and
! local dynamic \s-1TLS\s0 models.
  .RS 4
! .IP "\fBtrad\fR" 4
  .IX Item "trad"
! Use traditional \s-1TLS.\s0 This is the default.
! .IP "\fBdesc\fR" 4
  .IX Item "desc"
! Use \s-1TLS\s0 descriptors.
  .RE
  .RS 4
  .RE
--- 26379,26440 ----
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for scalar square root.
  .RE
! .IP \fB\-mfrecipe\fR 4
  .IX Item "-mfrecipe"
  .PD 0
! .IP \fB\-mno\-frecipe\fR 4
  .IX Item "-mno-frecipe"
  .PD
  Use (do not use) \f(CW\*(C`frecipe.{s/d}\*(C'\fR and \f(CW\*(C`frsqrte.{s/d}\*(C'\fR
  instructions.  When build with \fB\-march=la664\fR, it is enabled by default.
  The default is \fB\-mno\-frecipe\fR.
! .IP \fB\-mdiv32\fR 4
  .IX Item "-mdiv32"
  .PD 0
! .IP \fB\-mno\-div32\fR 4
  .IX Item "-mno-div32"
  .PD
  Use (do not use) \f(CW\*(C`div.w[u]\*(C'\fR and \f(CW\*(C`mod.w[u]\*(C'\fR instructions with input
! not sign\-extended.  When build with \fB\-march=la664\fR, it is enabled by
  default.  The default is \fB\-mno\-div32\fR.
! .IP \fB\-mlam\-bh\fR 4
  .IX Item "-mlam-bh"
  .PD 0
! .IP \fB\-mno\-lam\-bh\fR 4
  .IX Item "-mno-lam-bh"
  .PD
  Use (do not use) \f(CW\*(C`am{swap/add}[_db].{b/h}\*(C'\fR instructions.  When build
  with \fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lam\-bh\fR.
! .IP \fB\-mlamcas\fR 4
  .IX Item "-mlamcas"
  .PD 0
! .IP \fB\-mno\-lamcas\fR 4
  .IX Item "-mno-lamcas"
  .PD
  Use (do not use) \f(CW\*(C`amcas[_db].{b/h/w/d}\*(C'\fR instructions.  When build with
  \&\fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lamcas\fR.
! .IP \fB\-mld\-seq\-sa\fR 4
  .IX Item "-mld-seq-sa"
  .PD 0
! .IP \fB\-mno\-ld\-seq\-sa\fR 4
  .IX Item "-mno-ld-seq-sa"
  .PD
! Whether a same\-address load\-load barrier (\f(CW\*(C`dbar 0x700\*(C'\fR) is needed.  When
  build with \fB\-march=la664\fR, it is enabled by default.  The default is
! \&\fB\-mno\-ld\-seq\-sa\fR, the load\-load barrier is needed.
! .IP \fB\-mtls\-dialect=\fR\fIopt\fR 4
  .IX Item "-mtls-dialect=opt"
  This option controls which tls dialect may be used for general dynamic and
! local dynamic TLS models.
  .RS 4
! .IP \fBtrad\fR 4
  .IX Item "trad"
! Use traditional TLS. This is the default.
! .IP \fBdesc\fR 4
  .IX Item "desc"
! Use TLS descriptors.
  .RE
  .RS 4
  .RE
*************** Use \s-1TLS\s0 descriptors.
*** 26507,26554 ****
  .IX Item "--param loongarch-vect-unroll-limit=n"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set's the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is six.
  .PP
  \fIM32C Options\fR
  .IX Subsection "M32C Options"
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
  .IX Item "-mcpu=name"
! Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
  \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
  /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
  the M32C/80 series.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime library to be linked in which supports, for
  example, file I/O.  You must not use this option when generating
  programs that will run on real hardware; you must provide your own
  runtime library for whatever I/O functions are needed.
! .IP "\fB\-memregs=\fR\fInumber\fR" 4
  .IX Item "-memregs=number"
! Specifies the number of memory-based pseudo-registers \s-1GCC\s0 uses
! during code generation.  These pseudo-registers are used like real
! registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
  code into available registers, and the performance penalty of using
  memory instead of registers.  Note that all modules in a program must
  be compiled with the same value for this option.  Because of that, you
! must not use this option with \s-1GCC\s0's default runtime libraries.
  .PP
  \fIM32R/D Options\fR
  .IX Subsection "M32R/D Options"
  .PP
  These \fB\-m\fR options are defined for Renesas M32R/D architectures:
! .IP "\fB\-m32r2\fR" 4
  .IX Item "-m32r2"
  Generate code for the M32R/2.
! .IP "\fB\-m32rx\fR" 4
  .IX Item "-m32rx"
  Generate code for the M32R/X.
! .IP "\fB\-m32r\fR" 4
  .IX Item "-m32r"
  Generate code for the M32R.  This is the default.
! .IP "\fB\-mmodel=small\fR" 4
  .IX Item "-mmodel=small"
  Assume all objects live in the lower 16MB of memory (so that their addresses
  can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
--- 26442,26489 ----
  .IX Item "--param loongarch-vect-unroll-limit=n"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set\*(Aqs the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is six.
  .PP
  \fIM32C Options\fR
  .IX Subsection "M32C Options"
! .IP \fB\-mcpu=\fR\fIname\fR 4
  .IX Item "-mcpu=name"
! Select the CPU for which code is generated.  \fIname\fR may be one of
  \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
  /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
  the M32C/80 series.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime library to be linked in which supports, for
  example, file I/O.  You must not use this option when generating
  programs that will run on real hardware; you must provide your own
  runtime library for whatever I/O functions are needed.
! .IP \fB\-memregs=\fR\fInumber\fR 4
  .IX Item "-memregs=number"
! Specifies the number of memory\-based pseudo\-registers GCC uses
! during code generation.  These pseudo\-registers are used like real
! registers, so there is a tradeoff between GCC\*(Aqs ability to fit the
  code into available registers, and the performance penalty of using
  memory instead of registers.  Note that all modules in a program must
  be compiled with the same value for this option.  Because of that, you
! must not use this option with GCC\*(Aqs default runtime libraries.
  .PP
  \fIM32R/D Options\fR
  .IX Subsection "M32R/D Options"
  .PP
  These \fB\-m\fR options are defined for Renesas M32R/D architectures:
! .IP \fB\-m32r2\fR 4
  .IX Item "-m32r2"
  Generate code for the M32R/2.
! .IP \fB\-m32rx\fR 4
  .IX Item "-m32rx"
  Generate code for the M32R/X.
! .IP \fB\-m32r\fR 4
  .IX Item "-m32r"
  Generate code for the M32R.  This is the default.
! .IP \fB\-mmodel=small\fR 4
  .IX Item "-mmodel=small"
  Assume all objects live in the lower 16MB of memory (so that their addresses
  can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
*************** This is the default.
*** 26557,26575 ****
  .Sp
  The addressability of a particular object can be set with the
  \&\f(CW\*(C`model\*(C'\fR attribute.
! .IP "\fB\-mmodel=medium\fR" 4
  .IX Item "-mmodel=medium"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
! .IP "\fB\-mmodel=large\fR" 4
  .IX Item "-mmodel=large"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
  (the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
  instruction sequence).
! .IP "\fB\-msdata=none\fR" 4
  .IX Item "-msdata=none"
  Disable use of the small data area.  Variables are put into
  one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
--- 26492,26510 ----
  .Sp
  The addressability of a particular object can be set with the
  \&\f(CW\*(C`model\*(C'\fR attribute.
! .IP \fB\-mmodel=medium\fR 4
  .IX Item "-mmodel=medium"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
! .IP \fB\-mmodel=large\fR 4
  .IX Item "-mmodel=large"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
  (the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
  instruction sequence).
! .IP \fB\-msdata=none\fR 4
  .IX Item "-msdata=none"
  Disable use of the small data area.  Variables are put into
  one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
*************** This is the default.
*** 26579,26637 ****
  The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
  Objects may be explicitly put in the small data area with the
  \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
! .IP "\fB\-msdata=sdata\fR" 4
  .IX Item "-msdata=sdata"
  Put small global and static data in the small data area, but do not
  generate special code to reference them.
! .IP "\fB\-msdata=use\fR" 4
  .IX Item "-msdata=use"
  Put small global and static data in the small data area, and generate
  special instructions to reference them.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
  sections.  The default value of \fInum\fR is 8.
  The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
  for this option to have any effect.
  .Sp
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
  Compiling with different values of \fInum\fR may or may not work; if it
! doesn't the linker gives an error message\-\-\-incorrect code is not
  generated.
! .IP "\fB\-mdebug\fR" 4
  .IX Item "-mdebug"
  Makes the M32R\-specific code in the compiler display some statistics
  that might help in debugging programs.
! .IP "\fB\-malign\-loops\fR" 4
  .IX Item "-malign-loops"
  Align all loops to a 32\-byte boundary.
! .IP "\fB\-mno\-align\-loops\fR" 4
  .IX Item "-mno-align-loops"
  Do not enforce a 32\-byte alignment for loops.  This is the default.
! .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
  .IX Item "-missue-rate=number"
  Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
  or 2.
! .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
  .IX Item "-mbranch-cost=number"
  \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
  preferred over conditional code, if it is 2, then the opposite applies.
! .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
  .IX Item "-mflush-trap=number"
  Specifies the trap number to use to flush the cache.  The default is
  12.  Valid numbers are between 0 and 15 inclusive.
! .IP "\fB\-mno\-flush\-trap\fR" 4
  .IX Item "-mno-flush-trap"
  Specifies that the cache cannot be flushed by using a trap.
! .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
  .IX Item "-mflush-func=name"
  Specifies the name of the operating system function to call to flush
  the cache.  The default is \fB_flush_cache\fR, but a function call
  is only used if a trap is not available.
! .IP "\fB\-mno\-flush\-func\fR" 4
  .IX Item "-mno-flush-func"
! Indicates that there is no \s-1OS\s0 function for flushing the cache.
  .PP
  \fIM680x0 Options\fR
  .IX Subsection "M680x0 Options"
--- 26514,26572 ----
  The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
  Objects may be explicitly put in the small data area with the
  \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
! .IP \fB\-msdata=sdata\fR 4
  .IX Item "-msdata=sdata"
  Put small global and static data in the small data area, but do not
  generate special code to reference them.
! .IP \fB\-msdata=use\fR 4
  .IX Item "-msdata=use"
  Put small global and static data in the small data area, and generate
  special instructions to reference them.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or BSS sections instead of the normal data or BSS
  sections.  The default value of \fInum\fR is 8.
  The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
  for this option to have any effect.
  .Sp
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
  Compiling with different values of \fInum\fR may or may not work; if it
! doesn\*(Aqt the linker gives an error message\-\-\-incorrect code is not
  generated.
! .IP \fB\-mdebug\fR 4
  .IX Item "-mdebug"
  Makes the M32R\-specific code in the compiler display some statistics
  that might help in debugging programs.
! .IP \fB\-malign\-loops\fR 4
  .IX Item "-malign-loops"
  Align all loops to a 32\-byte boundary.
! .IP \fB\-mno\-align\-loops\fR 4
  .IX Item "-mno-align-loops"
  Do not enforce a 32\-byte alignment for loops.  This is the default.
! .IP \fB\-missue\-rate=\fR\fInumber\fR 4
  .IX Item "-missue-rate=number"
  Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
  or 2.
! .IP \fB\-mbranch\-cost=\fR\fInumber\fR 4
  .IX Item "-mbranch-cost=number"
  \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
  preferred over conditional code, if it is 2, then the opposite applies.
! .IP \fB\-mflush\-trap=\fR\fInumber\fR 4
  .IX Item "-mflush-trap=number"
  Specifies the trap number to use to flush the cache.  The default is
  12.  Valid numbers are between 0 and 15 inclusive.
! .IP \fB\-mno\-flush\-trap\fR 4
  .IX Item "-mno-flush-trap"
  Specifies that the cache cannot be flushed by using a trap.
! .IP \fB\-mflush\-func=\fR\fIname\fR 4
  .IX Item "-mflush-func=name"
  Specifies the name of the operating system function to call to flush
  the cache.  The default is \fB_flush_cache\fR, but a function call
  is only used if a trap is not available.
! .IP \fB\-mno\-flush\-func\fR 4
  .IX Item "-mno-flush-func"
! Indicates that there is no OS function for flushing the cache.
  .PP
  \fIM680x0 Options\fR
  .IX Subsection "M680x0 Options"
*************** These are the \fB\-m\fR options defined
*** 26640,26663 ****
  The default settings depend on which architecture was selected when
  the compiler was configured; the defaults for the most common choices
  are given below.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Generate code for a specific M680x0 or ColdFire instruction set
  architecture.  Permissible values of \fIarch\fR for M680x0
  architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
  \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
! architectures are selected according to Freescale's \s-1ISA\s0 classification
  and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
  \&\fBisab\fR and \fBisac\fR.
  .Sp
! \&\s-1GCC\s0 defines a macro \f(CW\*(C`_\|_mcf\f(CIarch\f(CW_\|_\*(C'\fR whenever it is generating
  code for a ColdFire target.  The \fIarch\fR in this macro is one of the
  \&\fB\-march\fR arguments given above.
  .Sp
  When used together, \fB\-march\fR and \fB\-mtune\fR select code
  that runs on a family of similar processors but that is optimized
  for a particular microarchitecture.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Generate code for a specific M680x0 or ColdFire processor.
  The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
--- 26575,26598 ----
  The default settings depend on which architecture was selected when
  the compiler was configured; the defaults for the most common choices
  are given below.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Generate code for a specific M680x0 or ColdFire instruction set
  architecture.  Permissible values of \fIarch\fR for M680x0
  architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
  \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
! architectures are selected according to Freescale\*(Aqs ISA classification
  and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
  \&\fBisab\fR and \fBisac\fR.
  .Sp
! GCC defines a macro \f(CW\*(C`_\|_mcf\fR\f(CIarch\fR\f(CW_\|_\*(C'\fR whenever it is generating
  code for a ColdFire target.  The \fIarch\fR in this macro is one of the
  \&\fB\-march\fR arguments given above.
  .Sp
  When used together, \fB\-march\fR and \fB\-mtune\fR select code
  that runs on a family of similar processors but that is optimized
  for a particular microarchitecture.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Generate code for a specific M680x0 or ColdFire processor.
  The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
*************** below, which also classifies the CPUs in
*** 26714,26732 ****
  .IX Item "5407 : 5407"
  .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
  .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
  .RE
  .RS 4
- .PD
  .Sp
  \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
  \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
  \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
  .Sp
! \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcf_cpu_\f(CIcpu\f(CW\*(C'\fR when ColdFire target
! \&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\f(CIfamily\f(CW\*(C'\fR,
  where the value of \fIfamily\fR is given by the table above.
  .RE
! .IP "\fB\-mtune=\fR\fItune\fR" 4
  .IX Item "-mtune=tune"
  Tune the code for a particular microarchitecture within the
  constraints set by \fB\-march\fR and \fB\-mcpu\fR.
--- 26649,26667 ----
  .IX Item "5407 : 5407"
  .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
  .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
+ .PD
  .RE
  .RS 4
  .Sp
  \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
  \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
  \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
  .Sp
! GCC defines the macro \f(CW\*(C`_\|_mcf_cpu_\fR\f(CIcpu\fR\f(CW\*(C'\fR when ColdFire target
! \&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\fR\f(CIfamily\fR\f(CW\*(C'\fR,
  where the value of \fIfamily\fR is given by the table above.
  .RE
! .IP \fB\-mtune=\fR\fItune\fR 4
  .IX Item "-mtune=tune"
  Tune the code for a particular microarchitecture within the
  constraints set by \fB\-march\fR and \fB\-mcpu\fR.
*************** to run relatively well on 68020, 68030 a
*** 26741,26788 ****
  as well.  These two options select the same tuning decisions as
  \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
  .Sp
! \&\s-1GCC\s0 defines the macros \f(CW\*(C`_\|_mc\f(CIarch\f(CW\*(C'\fR and \f(CW\*(C`_\|_mc\f(CIarch\f(CW_\|_\*(C'\fR
  when tuning for 680x0 architecture \fIarch\fR.  It also defines
! \&\f(CW\*(C`mc\f(CIarch\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
! option is used.  If \s-1GCC\s0 is tuning for a range of architectures,
  as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
  it defines the macros for every architecture in the range.
  .Sp
! \&\s-1GCC\s0 also defines the macro \f(CW\*(C`_\|_m\f(CIuarch\f(CW_\|_\*(C'\fR when tuning for
  ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
  of the arguments given above.
! .IP "\fB\-m68000\fR" 4
  .IX Item "-m68000"
  .PD 0
! .IP "\fB\-mc68000\fR" 4
  .IX Item "-mc68000"
  .PD
  Generate output for a 68000.  This is the default
  when the compiler is configured for 68000\-based systems.
  It is equivalent to \fB\-march=68000\fR.
  .Sp
! Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
  including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
! .IP "\fB\-m68010\fR" 4
  .IX Item "-m68010"
  Generate output for a 68010.  This is the default
  when the compiler is configured for 68010\-based systems.
  It is equivalent to \fB\-march=68010\fR.
! .IP "\fB\-m68020\fR" 4
  .IX Item "-m68020"
  .PD 0
! .IP "\fB\-mc68020\fR" 4
  .IX Item "-mc68020"
  .PD
  Generate output for a 68020.  This is the default
  when the compiler is configured for 68020\-based systems.
  It is equivalent to \fB\-march=68020\fR.
! .IP "\fB\-m68030\fR" 4
  .IX Item "-m68030"
  Generate output for a 68030.  This is the default when the compiler is
  configured for 68030\-based systems.  It is equivalent to
  \&\fB\-march=68030\fR.
! .IP "\fB\-m68040\fR" 4
  .IX Item "-m68040"
  Generate output for a 68040.  This is the default when the compiler is
  configured for 68040\-based systems.  It is equivalent to
--- 26676,26723 ----
  as well.  These two options select the same tuning decisions as
  \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
  .Sp
! GCC defines the macros \f(CW\*(C`_\|_mc\fR\f(CIarch\fR\f(CW\*(C'\fR and \f(CW\*(C`_\|_mc\fR\f(CIarch\fR\f(CW_\|_\*(C'\fR
  when tuning for 680x0 architecture \fIarch\fR.  It also defines
! \&\f(CW\*(C`mc\fR\f(CIarch\fR\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non\-GNU \fB\-std\fR
! option is used.  If GCC is tuning for a range of architectures,
  as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
  it defines the macros for every architecture in the range.
  .Sp
! GCC also defines the macro \f(CW\*(C`_\|_m\fR\f(CIuarch\fR\f(CW_\|_\*(C'\fR when tuning for
  ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
  of the arguments given above.
! .IP \fB\-m68000\fR 4
  .IX Item "-m68000"
  .PD 0
! .IP \fB\-mc68000\fR 4
  .IX Item "-mc68000"
  .PD
  Generate output for a 68000.  This is the default
  when the compiler is configured for 68000\-based systems.
  It is equivalent to \fB\-march=68000\fR.
  .Sp
! Use this option for microcontrollers with a 68000 or EC000 core,
  including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
! .IP \fB\-m68010\fR 4
  .IX Item "-m68010"
  Generate output for a 68010.  This is the default
  when the compiler is configured for 68010\-based systems.
  It is equivalent to \fB\-march=68010\fR.
! .IP \fB\-m68020\fR 4
  .IX Item "-m68020"
  .PD 0
! .IP \fB\-mc68020\fR 4
  .IX Item "-mc68020"
  .PD
  Generate output for a 68020.  This is the default
  when the compiler is configured for 68020\-based systems.
  It is equivalent to \fB\-march=68020\fR.
! .IP \fB\-m68030\fR 4
  .IX Item "-m68030"
  Generate output for a 68030.  This is the default when the compiler is
  configured for 68030\-based systems.  It is equivalent to
  \&\fB\-march=68030\fR.
! .IP \fB\-m68040\fR 4
  .IX Item "-m68040"
  Generate output for a 68040.  This is the default when the compiler is
  configured for 68040\-based systems.  It is equivalent to
*************** configured for 68040\-based systems.  It
*** 26791,26797 ****
  This option inhibits the use of 68881/68882 instructions that have to be
  emulated by software on the 68040.  Use this option if your 68040 does not
  have code to emulate those instructions.
! .IP "\fB\-m68060\fR" 4
  .IX Item "-m68060"
  Generate output for a 68060.  This is the default when the compiler is
  configured for 68060\-based systems.  It is equivalent to
--- 26726,26732 ----
  This option inhibits the use of 68881/68882 instructions that have to be
  emulated by software on the 68040.  Use this option if your 68040 does not
  have code to emulate those instructions.
! .IP \fB\-m68060\fR 4
  .IX Item "-m68060"
  Generate output for a 68060.  This is the default when the compiler is
  configured for 68060\-based systems.  It is equivalent to
*************** configured for 68060\-based systems.  It
*** 26800,26847 ****
  This option inhibits the use of 68020 and 68881/68882 instructions that
  have to be emulated by software on the 68060.  Use this option if your 68060
  does not have code to emulate those instructions.
! .IP "\fB\-mcpu32\fR" 4
  .IX Item "-mcpu32"
! Generate output for a \s-1CPU32.\s0  This is the default
  when the compiler is configured for CPU32\-based systems.
  It is equivalent to \fB\-march=cpu32\fR.
  .Sp
  Use this option for microcontrollers with a
! \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
  68336, 68340, 68341, 68349 and 68360.
! .IP "\fB\-m5200\fR" 4
  .IX Item "-m5200"
! Generate output for a 520X ColdFire \s-1CPU.\s0  This is the default
  when the compiler is configured for 520X\-based systems.
  It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
  in favor of that option.
  .Sp
  Use this option for microcontroller with a 5200 core, including
! the \s-1MCF5202, MCF5203, MCF5204\s0 and \s-1MCF5206.\s0
! .IP "\fB\-m5206e\fR" 4
  .IX Item "-m5206e"
! Generate output for a 5206e ColdFire \s-1CPU.\s0  The option is now
  deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
! .IP "\fB\-m528x\fR" 4
  .IX Item "-m528x"
  Generate output for a member of the ColdFire 528X family.
  The option is now deprecated in favor of the equivalent
  \&\fB\-mcpu=528x\fR.
! .IP "\fB\-m5307\fR" 4
  .IX Item "-m5307"
! Generate output for a ColdFire 5307 \s-1CPU.\s0  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5307\fR.
! .IP "\fB\-m5407\fR" 4
  .IX Item "-m5407"
! Generate output for a ColdFire 5407 \s-1CPU.\s0  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5407\fR.
! .IP "\fB\-mcfv4e\fR" 4
  .IX Item "-mcfv4e"
! Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
! This includes use of hardware floating-point instructions.
  The option is equivalent to \fB\-mcpu=547x\fR, and is now
  deprecated in favor of that option.
! .IP "\fB\-m68020\-40\fR" 4
  .IX Item "-m68020-40"
  Generate output for a 68040, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
--- 26735,26782 ----
  This option inhibits the use of 68020 and 68881/68882 instructions that
  have to be emulated by software on the 68060.  Use this option if your 68060
  does not have code to emulate those instructions.
! .IP \fB\-mcpu32\fR 4
  .IX Item "-mcpu32"
! Generate output for a CPU32.  This is the default
  when the compiler is configured for CPU32\-based systems.
  It is equivalent to \fB\-march=cpu32\fR.
  .Sp
  Use this option for microcontrollers with a
! CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
  68336, 68340, 68341, 68349 and 68360.
! .IP \fB\-m5200\fR 4
  .IX Item "-m5200"
! Generate output for a 520X ColdFire CPU.  This is the default
  when the compiler is configured for 520X\-based systems.
  It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
  in favor of that option.
  .Sp
  Use this option for microcontroller with a 5200 core, including
! the MCF5202, MCF5203, MCF5204 and MCF5206.
! .IP \fB\-m5206e\fR 4
  .IX Item "-m5206e"
! Generate output for a 5206e ColdFire CPU.  The option is now
  deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
! .IP \fB\-m528x\fR 4
  .IX Item "-m528x"
  Generate output for a member of the ColdFire 528X family.
  The option is now deprecated in favor of the equivalent
  \&\fB\-mcpu=528x\fR.
! .IP \fB\-m5307\fR 4
  .IX Item "-m5307"
! Generate output for a ColdFire 5307 CPU.  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5307\fR.
! .IP \fB\-m5407\fR 4
  .IX Item "-m5407"
! Generate output for a ColdFire 5407 CPU.  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5407\fR.
! .IP \fB\-mcfv4e\fR 4
  .IX Item "-mcfv4e"
! Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
! This includes use of hardware floating\-point instructions.
  The option is equivalent to \fB\-mcpu=547x\fR, and is now
  deprecated in favor of that option.
! .IP \fB\-m68020\-40\fR 4
  .IX Item "-m68020-40"
  Generate output for a 68040, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
*************** This results in code that can run relati
*** 26849,26855 ****
  68881 instructions that are emulated on the 68040.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
! .IP "\fB\-m68020\-60\fR" 4
  .IX Item "-m68020-60"
  Generate output for a 68060, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
--- 26784,26790 ----
  68881 instructions that are emulated on the 68040.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
! .IP \fB\-m68020\-60\fR 4
  .IX Item "-m68020-60"
  Generate output for a 68060, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
*************** This results in code that can run relati
*** 26857,26916 ****
  68881 instructions that are emulated on the 68060.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD 0
! .IP "\fB\-m68881\fR" 4
  .IX Item "-m68881"
  .PD
! Generate floating-point instructions.  This is the default for 68020
! and above, and for ColdFire devices that have an \s-1FPU.\s0  It defines the
  macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
  on ColdFire targets.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Do not generate floating-point instructions; use library calls instead.
  This is the default for 68000, 68010, and 68832 targets.  It is also
! the default for ColdFire devices that have no \s-1FPU.\s0
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
  Generate (do not generate) ColdFire hardware divide and remainder
  instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
! the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
! architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
! (either the default \s-1CPU,\s0 or the one specified by \fB\-mcpu\fR).  For
! example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
  \&\fB\-mcpu=5206e\fR.
  .Sp
! \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
! .IP "\fB\-mshort\fR" 4
  .IX Item "-mshort"
  Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
  Additionally, parameters passed on the stack are also aligned to a
! 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
! .IP "\fB\-mno\-short\fR" 4
  .IX Item "-mno-short"
  Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
! .IP "\fB\-mnobitfield\fR" 4
  .IX Item "-mnobitfield"
  .PD 0
! .IP "\fB\-mno\-bitfield\fR" 4
  .IX Item "-mno-bitfield"
  .PD
! Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
  and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
! .IP "\fB\-mbitfield\fR" 4
  .IX Item "-mbitfield"
! Do use the bit-field instructions.  The \fB\-m68020\fR option implies
  \&\fB\-mbitfield\fR.  This is the default if you use a configuration
  designed for a 68020.
! .IP "\fB\-mrtd\fR" 4
  .IX Item "-mrtd"
! Use a different function-calling convention, in which functions
  that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
  instruction, which pops their arguments while returning.  This
  saves one instruction in the caller since there is no need to pop
--- 26792,26851 ----
  68881 instructions that are emulated on the 68060.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD 0
! .IP \fB\-m68881\fR 4
  .IX Item "-m68881"
  .PD
! Generate floating\-point instructions.  This is the default for 68020
! and above, and for ColdFire devices that have an FPU.  It defines the
  macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
  on ColdFire targets.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Do not generate floating\-point instructions; use library calls instead.
  This is the default for 68000, 68010, and 68832 targets.  It is also
! the default for ColdFire devices that have no FPU.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
  Generate (do not generate) ColdFire hardware divide and remainder
  instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
! the default is "on" for ColdFire architectures and "off" for M680x0
! architectures.  Otherwise, the default is taken from the target CPU
! (either the default CPU, or the one specified by \fB\-mcpu\fR).  For
! example, the default is "off" for \fB\-mcpu=5206\fR and "on" for
  \&\fB\-mcpu=5206e\fR.
  .Sp
! GCC defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
! .IP \fB\-mshort\fR 4
  .IX Item "-mshort"
  Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
  Additionally, parameters passed on the stack are also aligned to a
! 16\-bit boundary even on targets whose API mandates promotion to 32\-bit.
! .IP \fB\-mno\-short\fR 4
  .IX Item "-mno-short"
  Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
! .IP \fB\-mnobitfield\fR 4
  .IX Item "-mnobitfield"
  .PD 0
! .IP \fB\-mno\-bitfield\fR 4
  .IX Item "-mno-bitfield"
  .PD
! Do not use the bit\-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
  and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
! .IP \fB\-mbitfield\fR 4
  .IX Item "-mbitfield"
! Do use the bit\-field instructions.  The \fB\-m68020\fR option implies
  \&\fB\-mbitfield\fR.  This is the default if you use a configuration
  designed for a 68020.
! .IP \fB\-mrtd\fR 4
  .IX Item "-mrtd"
! Use a different function\-calling convention, in which functions
  that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
  instruction, which pops their arguments while returning.  This
  saves one instruction in the caller since there is no need to pop
*************** function with too many arguments.  (Norm
*** 26930,27005 ****
  harmlessly ignored.)
  .Sp
  The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
! 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
  .Sp
  The default is \fB\-mno\-rtd\fR.
! .IP "\fB\-malign\-int\fR" 4
  .IX Item "-malign-int"
  .PD 0
! .IP "\fB\-mno\-align\-int\fR" 4
  .IX Item "-mno-align-int"
  .PD
! Control whether \s-1GCC\s0 aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
  \&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
  boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
  Aligning variables on 32\-bit boundaries produces code that runs somewhat
  faster on processors with 32\-bit busses at the expense of more memory.
  .Sp
! \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0
  aligns structures containing the above types differently than
  most published application binary interface specifications for the m68k.
  .Sp
! Use the pc-relative addressing mode of the 68000 directly, instead of
  using a global offset table.  At present, this option implies \fB\-fpic\fR,
! allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
  not presently supported with \fB\-mpcrel\fR, though this could be supported for
  68020 and higher processors.
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD
  Do not (do) assume that unaligned memory references are handled by
  the system.
! .IP "\fB\-msep\-data\fR" 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
! area of memory from the text segment.  This allows for execute-in-place in
  an environment without virtual memory management.  This option implies
  \&\fB\-fPIC\fR.
! .IP "\fB\-mno\-sep\-data\fR" 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP "\fB\-mid\-shared\-library\fR" 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library \s-1ID\s0 method.
! This allows for execute-in-place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! .IP "\fB\-mno\-id\-shared\-library\fR" 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn't assume ID-based shared libraries are being used.
  This is the default.
! .IP "\fB\-mshared\-library\-id=n\fR" 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library, but is no more space\- or time-efficient than omitting this option.
! .IP "\fB\-mxgot\fR" 4
  .IX Item "-mxgot"
  .PD 0
! .IP "\fB\-mno\-xgot\fR" 4
  .IX Item "-mno-xgot"
  .PD
! When generating position-independent code for ColdFire, generate code
! that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
  larger and slower than code generated without this option.  On M680x0
  processors, this option is not needed; \fB\-fPIC\fR suffices.
  .Sp
! \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT.\s0
! While this is relatively efficient, it only works if the \s-1GOT\s0
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
--- 26865,26940 ----
  harmlessly ignored.)
  .Sp
  The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
! 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
  .Sp
  The default is \fB\-mno\-rtd\fR.
! .IP \fB\-malign\-int\fR 4
  .IX Item "-malign-int"
  .PD 0
! .IP \fB\-mno\-align\-int\fR 4
  .IX Item "-mno-align-int"
  .PD
! Control whether GCC aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
  \&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
  boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
  Aligning variables on 32\-bit boundaries produces code that runs somewhat
  faster on processors with 32\-bit busses at the expense of more memory.
  .Sp
! \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, GCC
  aligns structures containing the above types differently than
  most published application binary interface specifications for the m68k.
  .Sp
! Use the pc\-relative addressing mode of the 68000 directly, instead of
  using a global offset table.  At present, this option implies \fB\-fpic\fR,
! allowing at most a 16\-bit offset for pc\-relative addressing.  \fB\-fPIC\fR is
  not presently supported with \fB\-mpcrel\fR, though this could be supported for
  68020 and higher processors.
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD
  Do not (do) assume that unaligned memory references are handled by
  the system.
! .IP \fB\-msep\-data\fR 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
! area of memory from the text segment.  This allows for execute\-in\-place in
  an environment without virtual memory management.  This option implies
  \&\fB\-fPIC\fR.
! .IP \fB\-mno\-sep\-data\fR 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP \fB\-mid\-shared\-library\fR 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library ID method.
! This allows for execute\-in\-place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! .IP \fB\-mno\-id\-shared\-library\fR 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn\*(Aqt assume ID\-based shared libraries are being used.
  This is the default.
! .IP \fB\-mshared\-library\-id=n\fR 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID\-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library, but is no more space\- or time\-efficient than omitting this option.
! .IP \fB\-mxgot\fR 4
  .IX Item "-mxgot"
  .PD 0
! .IP \fB\-mno\-xgot\fR 4
  .IX Item "-mno-xgot"
  .PD
! When generating position\-independent code for ColdFire, generate code
! that works if the GOT has more than 8192 entries.  This code is
  larger and slower than code generated without this option.  On M680x0
  processors, this option is not needed; \fB\-fPIC\fR suffices.
  .Sp
! GCC normally uses a single instruction to load values from the GOT.
! While this is relatively efficient, it only works if the GOT
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
*************** It should then work with very large GOTs
*** 27012,27025 ****
  \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
  the value of a global symbol.
  .Sp
! Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
! can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
  you should only need to use \fB\-mxgot\fR when compiling a single
! object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
  .Sp
! These options have no effect unless \s-1GCC\s0 is generating
! position-independent code.
! .IP "\fB\-mlong\-jump\-table\-offsets\fR" 4
  .IX Item "-mlong-jump-table-offsets"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
--- 26947,26960 ----
  \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
  the value of a global symbol.
  .Sp
! Note that some linkers, including newer versions of the GNU linker,
! can create multiple GOTs and sort GOT entries.  If you have such a linker,
  you should only need to use \fB\-mxgot\fR when compiling a single
! object file that accesses more than 8192 GOT entries.  Very few do.
  .Sp
! These options have no effect unless GCC is generating
! position\-independent code.
! .IP \fB\-mlong\-jump\-table\-offsets\fR 4
  .IX Item "-mlong-jump-table-offsets"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
*************** Use 32\-bit offsets in \f(CW\*(C`switch\
*** 27029,27103 ****
  .PP
  These are the \fB\-m\fR options defined for the Motorola M*Core
  processors.
! .IP "\fB\-mhardlit\fR" 4
  .IX Item "-mhardlit"
  .PD 0
! .IP "\fB\-mno\-hardlit\fR" 4
  .IX Item "-mno-hardlit"
  .PD
  Inline constants into the code stream if it can be done in two
  instructions or less.
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
  Use the divide instruction.  (Enabled by default).
! .IP "\fB\-mrelax\-immediate\fR" 4
  .IX Item "-mrelax-immediate"
  .PD 0
! .IP "\fB\-mno\-relax\-immediate\fR" 4
  .IX Item "-mno-relax-immediate"
  .PD
! Allow arbitrary-sized immediates in bit operations.
! .IP "\fB\-mwide\-bitfields\fR" 4
  .IX Item "-mwide-bitfields"
  .PD 0
! .IP "\fB\-mno\-wide\-bitfields\fR" 4
  .IX Item "-mno-wide-bitfields"
  .PD
! Always treat bit-fields as \f(CW\*(C`int\*(C'\fR\-sized.
! .IP "\fB\-m4byte\-functions\fR" 4
  .IX Item "-m4byte-functions"
  .PD 0
! .IP "\fB\-mno\-4byte\-functions\fR" 4
  .IX Item "-mno-4byte-functions"
  .PD
  Force all functions to be aligned to a 4\-byte boundary.
! .IP "\fB\-mcallgraph\-data\fR" 4
  .IX Item "-mcallgraph-data"
  .PD 0
! .IP "\fB\-mno\-callgraph\-data\fR" 4
  .IX Item "-mno-callgraph-data"
  .PD
  Emit callgraph information.
! .IP "\fB\-mslow\-bytes\fR" 4
  .IX Item "-mslow-bytes"
  .PD 0
! .IP "\fB\-mno\-slow\-bytes\fR" 4
  .IX Item "-mno-slow-bytes"
  .PD
  Prefer word access when reading byte quantities.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD
! Generate code for a little-endian target.
! .IP "\fB\-m210\fR" 4
  .IX Item "-m210"
  .PD 0
! .IP "\fB\-m340\fR" 4
  .IX Item "-m340"
  .PD
  Generate code for the 210 processor.
! .IP "\fB\-mno\-lsim\fR" 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so omit the
  simulator library (\fIlibsim.a)\fR from the linker command line.
! .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
  .IX Item "-mstack-increment=size"
  Set the maximum amount for a single stack increment operation.  Large
  values can increase the speed of programs that contain functions
--- 26964,27038 ----
  .PP
  These are the \fB\-m\fR options defined for the Motorola M*Core
  processors.
! .IP \fB\-mhardlit\fR 4
  .IX Item "-mhardlit"
  .PD 0
! .IP \fB\-mno\-hardlit\fR 4
  .IX Item "-mno-hardlit"
  .PD
  Inline constants into the code stream if it can be done in two
  instructions or less.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
  Use the divide instruction.  (Enabled by default).
! .IP \fB\-mrelax\-immediate\fR 4
  .IX Item "-mrelax-immediate"
  .PD 0
! .IP \fB\-mno\-relax\-immediate\fR 4
  .IX Item "-mno-relax-immediate"
  .PD
! Allow arbitrary\-sized immediates in bit operations.
! .IP \fB\-mwide\-bitfields\fR 4
  .IX Item "-mwide-bitfields"
  .PD 0
! .IP \fB\-mno\-wide\-bitfields\fR 4
  .IX Item "-mno-wide-bitfields"
  .PD
! Always treat bit\-fields as \f(CW\*(C`int\*(C'\fR\-sized.
! .IP \fB\-m4byte\-functions\fR 4
  .IX Item "-m4byte-functions"
  .PD 0
! .IP \fB\-mno\-4byte\-functions\fR 4
  .IX Item "-mno-4byte-functions"
  .PD
  Force all functions to be aligned to a 4\-byte boundary.
! .IP \fB\-mcallgraph\-data\fR 4
  .IX Item "-mcallgraph-data"
  .PD 0
! .IP \fB\-mno\-callgraph\-data\fR 4
  .IX Item "-mno-callgraph-data"
  .PD
  Emit callgraph information.
! .IP \fB\-mslow\-bytes\fR 4
  .IX Item "-mslow-bytes"
  .PD 0
! .IP \fB\-mno\-slow\-bytes\fR 4
  .IX Item "-mno-slow-bytes"
  .PD
  Prefer word access when reading byte quantities.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD
! Generate code for a little\-endian target.
! .IP \fB\-m210\fR 4
  .IX Item "-m210"
  .PD 0
! .IP \fB\-m340\fR 4
  .IX Item "-m340"
  .PD
  Generate code for the 210 processor.
! .IP \fB\-mno\-lsim\fR 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so omit the
  simulator library (\fIlibsim.a)\fR from the linker command line.
! .IP \fB\-mstack\-increment=\fR\fIsize\fR 4
  .IX Item "-mstack-increment=size"
  Set the maximum amount for a single stack increment operation.  Large
  values can increase the speed of programs that contain functions
*************** value is 0x1000.
*** 27107,27189 ****
  .PP
  \fIMicroBlaze Options\fR
  .IX Subsection "MicroBlaze Options"
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  Use software emulation for floating point (default).
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
! Use hardware floating-point instructions.
! .IP "\fB\-mmemcpy\fR" 4
  .IX Item "-mmemcpy"
  Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
! .IP "\fB\-mno\-clearbss\fR" 4
  .IX Item "-mno-clearbss"
  This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
! .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
  .IX Item "-mcpu=cpu-type"
! Use features of, and schedule code for, the given \s-1CPU.\s0
! Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
! where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
  \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
  \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
! .IP "\fB\-mxl\-soft\-mul\fR" 4
  .IX Item "-mxl-soft-mul"
  Use software multiply emulation (default).
! .IP "\fB\-mxl\-soft\-div\fR" 4
  .IX Item "-mxl-soft-div"
  Use software emulation for divides (default).
! .IP "\fB\-mxl\-barrel\-shift\fR" 4
  .IX Item "-mxl-barrel-shift"
  Use the hardware barrel shifter.
! .IP "\fB\-mxl\-pattern\-compare\fR" 4
  .IX Item "-mxl-pattern-compare"
  Use pattern compare instructions.
! .IP "\fB\-msmall\-divides\fR" 4
  .IX Item "-msmall-divides"
  Use table lookup optimization for small signed integer divisions.
! .IP "\fB\-mxl\-stack\-check\fR" 4
  .IX Item "-mxl-stack-check"
  This option is deprecated.  Use \fB\-fstack\-check\fR instead.
! .IP "\fB\-mxl\-gp\-opt\fR" 4
  .IX Item "-mxl-gp-opt"
! Use GP-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
! .IP "\fB\-mxl\-multiply\-high\fR" 4
  .IX Item "-mxl-multiply-high"
  Use multiply high instructions for high part of 32x32 multiply.
! .IP "\fB\-mxl\-float\-convert\fR" 4
  .IX Item "-mxl-float-convert"
! Use hardware floating-point conversion instructions.
! .IP "\fB\-mxl\-float\-sqrt\fR" 4
  .IX Item "-mxl-float-sqrt"
! Use hardware floating-point square root instruction.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.
! .IP "\fB\-mxl\-reorder\fR" 4
  .IX Item "-mxl-reorder"
  Use reorder instructions (swap and byte reversed load/store).
! .IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
  .IX Item "-mxl-mode-app-model"
! Select application model \fIapp-model\fR.  Valid models are
  .RS 4
! .IP "\fBexecutable\fR" 4
  .IX Item "executable"
  normal executable (default), uses startup code \fIcrt0.o\fR.
! .IP "\fBxmdstub\fR" 4
  .IX Item "xmdstub"
! for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
  software intrusive debug agent called xmdstub. This uses startup file
  \&\fIcrt1.o\fR and sets the start address of the program to 0x800.
! .IP "\fBbootstrap\fR" 4
  .IX Item "bootstrap"
  for applications that are loaded using a bootloader.
  This model uses startup file \fIcrt2.o\fR which does not contain a processor
  reset vector handler. This is suitable for transferring control on a
  processor reset to the bootloader rather than the application.
! .IP "\fBnovectors\fR" 4
  .IX Item "novectors"
  for applications that do not require any of the
  MicroBlaze vectors. This option may be useful for applications running
--- 27042,27124 ----
  .PP
  \fIMicroBlaze Options\fR
  .IX Subsection "MicroBlaze Options"
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  Use software emulation for floating point (default).
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
! Use hardware floating\-point instructions.
! .IP \fB\-mmemcpy\fR 4
  .IX Item "-mmemcpy"
  Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
! .IP \fB\-mno\-clearbss\fR 4
  .IX Item "-mno-clearbss"
  This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
! .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4
  .IX Item "-mcpu=cpu-type"
! Use features of, and schedule code for, the given CPU.
! Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fIYY\fR\fB.\fR\fIZ\fR,
! where \fIX\fR is a major version, \fIYY\fR is the minor version, and
  \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
  \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
! .IP \fB\-mxl\-soft\-mul\fR 4
  .IX Item "-mxl-soft-mul"
  Use software multiply emulation (default).
! .IP \fB\-mxl\-soft\-div\fR 4
  .IX Item "-mxl-soft-div"
  Use software emulation for divides (default).
! .IP \fB\-mxl\-barrel\-shift\fR 4
  .IX Item "-mxl-barrel-shift"
  Use the hardware barrel shifter.
! .IP \fB\-mxl\-pattern\-compare\fR 4
  .IX Item "-mxl-pattern-compare"
  Use pattern compare instructions.
! .IP \fB\-msmall\-divides\fR 4
  .IX Item "-msmall-divides"
  Use table lookup optimization for small signed integer divisions.
! .IP \fB\-mxl\-stack\-check\fR 4
  .IX Item "-mxl-stack-check"
  This option is deprecated.  Use \fB\-fstack\-check\fR instead.
! .IP \fB\-mxl\-gp\-opt\fR 4
  .IX Item "-mxl-gp-opt"
! Use GP\-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
! .IP \fB\-mxl\-multiply\-high\fR 4
  .IX Item "-mxl-multiply-high"
  Use multiply high instructions for high part of 32x32 multiply.
! .IP \fB\-mxl\-float\-convert\fR 4
  .IX Item "-mxl-float-convert"
! Use hardware floating\-point conversion instructions.
! .IP \fB\-mxl\-float\-sqrt\fR 4
  .IX Item "-mxl-float-sqrt"
! Use hardware floating\-point square root instruction.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.
! .IP \fB\-mxl\-reorder\fR 4
  .IX Item "-mxl-reorder"
  Use reorder instructions (swap and byte reversed load/store).
! .IP \fB\-mxl\-mode\-\fR\fIapp\-model\fR 4
  .IX Item "-mxl-mode-app-model"
! Select application model \fIapp\-model\fR.  Valid models are
  .RS 4
! .IP \fBexecutable\fR 4
  .IX Item "executable"
  normal executable (default), uses startup code \fIcrt0.o\fR.
! .IP \fBxmdstub\fR 4
  .IX Item "xmdstub"
! for use with Xilinx Microprocessor Debugger (XMD) based
  software intrusive debug agent called xmdstub. This uses startup file
  \&\fIcrt1.o\fR and sets the start address of the program to 0x800.
! .IP \fBbootstrap\fR 4
  .IX Item "bootstrap"
  for applications that are loaded using a bootloader.
  This model uses startup file \fIcrt2.o\fR which does not contain a processor
  reset vector handler. This is suitable for transferring control on a
  processor reset to the bootloader rather than the application.
! .IP \fBnovectors\fR 4
  .IX Item "novectors"
  for applications that do not require any of the
  MicroBlaze vectors. This option may be useful for applications running
*************** within a monitoring application. This mo
*** 27191,27219 ****
  .RE
  .RS 4
  .Sp
! Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
! \&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
  .RE
! .IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
  at static link time.  This allows data to be referenced by offset from start of
! text address instead of \s-1GOT\s0 since PC-relative addressing is not supported.
  .PP
! \fI\s-1MIPS\s0 Options\fR
  .IX Subsection "MIPS Options"
! .IP "\fB\-EB\fR" 4
  .IX Item "-EB"
! Generate big-endian code.
! .IP "\fB\-EL\fR" 4
  .IX Item "-EL"
! Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
  configurations.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Generate code that runs on \fIarch\fR, which can be the name of a
! generic \s-1MIPS ISA,\s0 or the name of a particular processor.
! The \s-1ISA\s0 names are:
  \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
  \&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
  \&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
--- 27126,27154 ----
  .RE
  .RS 4
  .Sp
! Option \fB\-xl\-mode\-\fR\fIapp\-model\fR is a deprecated alias for
! \&\fB\-mxl\-mode\-\fR\fIapp\-model\fR.
  .RE
! .IP \fB\-mpic\-data\-is\-text\-relative\fR 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
  at static link time.  This allows data to be referenced by offset from start of
! text address instead of GOT since PC\-relative addressing is not supported.
  .PP
! \fIMIPS Options\fR
  .IX Subsection "MIPS Options"
! .IP \fB\-EB\fR 4
  .IX Item "-EB"
! Generate big\-endian code.
! .IP \fB\-EL\fR 4
  .IX Item "-EL"
! Generate little\-endian code.  This is the default for \fBmips*el\-*\-*\fR
  configurations.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Generate code that runs on \fIarch\fR, which can be the name of a
! generic MIPS ISA, or the name of a particular processor.
! The ISA names are:
  \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
  \&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
  \&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
*************** The processor names are:
*** 27248,27260 ****
  \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
  \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
  \&\fBxlr\fR and \fBxlp\fR.
! The special value \fBfrom-abi\fR selects the
! most compatible architecture for the selected \s-1ABI\s0 (that is,
  \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
  .Sp
  The native Linux/GNU toolchain also supports the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
  .Sp
  In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
--- 27183,27195 ----
  \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
  \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
  \&\fBxlr\fR and \fBxlp\fR.
! The special value \fBfrom\-abi\fR selects the
! most compatible architecture for the selected ABI (that is,
  \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
  .Sp
  The native Linux/GNU toolchain also supports the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if GCC does not recognize
  the processor.
  .Sp
  In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
*************** For compatibility reasons, \fIn\fR\fBf\f
*** 27270,27493 ****
  for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
  accepted as synonyms for \fIn\fR\fBf1_1\fR.
  .Sp
! \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
  is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
! a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\f(CIfoo\f(CW\*(C'\fR,
  where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
  For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
  to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
  .Sp
  Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
  above.  In other words, it has the full prefix and does not
! abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
  the macro names the resolved architecture (either \f(CW"mips1"\fR or
  \&\f(CW"mips3"\fR).  It names the default architecture when no
  \&\fB\-march\fR option is given.
! .IP "\fB\-mtune=\fR\fIarch\fR" 4
  .IX Item "-mtune=arch"
  Optimize for \fIarch\fR.  Among other things, this option controls
  the way instructions are scheduled, and the perceived cost of arithmetic
  operations.  The list of \fIarch\fR values is the same as for
  \&\fB\-march\fR.
  .Sp
! When this option is not used, \s-1GCC\s0 optimizes for the processor
  specified by \fB\-march\fR.  By using \fB\-march\fR and
  \&\fB\-mtune\fR together, it is possible to generate code that
  runs on a family of processors, but optimize the code for one
  particular member of that family.
  .Sp
  \&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
! \&\f(CW\*(C`_MIPS_TUNE_\f(CIfoo\f(CW\*(C'\fR, which work in the same way as the
  \&\fB\-march\fR ones described above.
! .IP "\fB\-mips1\fR" 4
  .IX Item "-mips1"
  Equivalent to \fB\-march=mips1\fR.
! .IP "\fB\-mips2\fR" 4
  .IX Item "-mips2"
  Equivalent to \fB\-march=mips2\fR.
! .IP "\fB\-mips3\fR" 4
  .IX Item "-mips3"
  Equivalent to \fB\-march=mips3\fR.
! .IP "\fB\-mips4\fR" 4
  .IX Item "-mips4"
  Equivalent to \fB\-march=mips4\fR.
! .IP "\fB\-mips32\fR" 4
  .IX Item "-mips32"
  Equivalent to \fB\-march=mips32\fR.
! .IP "\fB\-mips32r3\fR" 4
  .IX Item "-mips32r3"
  Equivalent to \fB\-march=mips32r3\fR.
! .IP "\fB\-mips32r5\fR" 4
  .IX Item "-mips32r5"
  Equivalent to \fB\-march=mips32r5\fR.
! .IP "\fB\-mips32r6\fR" 4
  .IX Item "-mips32r6"
  Equivalent to \fB\-march=mips32r6\fR.
! .IP "\fB\-mips64\fR" 4
  .IX Item "-mips64"
  Equivalent to \fB\-march=mips64\fR.
! .IP "\fB\-mips64r2\fR" 4
  .IX Item "-mips64r2"
  Equivalent to \fB\-march=mips64r2\fR.
! .IP "\fB\-mips64r3\fR" 4
  .IX Item "-mips64r3"
  Equivalent to \fB\-march=mips64r3\fR.
! .IP "\fB\-mips64r5\fR" 4
  .IX Item "-mips64r5"
  Equivalent to \fB\-march=mips64r5\fR.
! .IP "\fB\-mips64r6\fR" 4
  .IX Item "-mips64r6"
  Equivalent to \fB\-march=mips64r6\fR.
! .IP "\fB\-mips16\fR" 4
  .IX Item "-mips16"
  .PD 0
! .IP "\fB\-mno\-mips16\fR" 4
  .IX Item "-mno-mips16"
  .PD
! Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targeting a
! \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it makes use of the MIPS16e \s-1ASE.\s0
  .Sp
! \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
  by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
! .IP "\fB\-mmips16e2\fR" 4
  .IX Item "-mmips16e2"
  .PD 0
! .IP "\fB\-mno\-mips16e2\fR" 4
  .IX Item "-mno-mips16e2"
  .PD
! Use (do not use) the MIPS16e2 \s-1ASE.\s0  This option modifies the behavior
! of the \fB\-mips16\fR option such that it targets the MIPS16e2 \s-1ASE.\s0
! .IP "\fB\-mflip\-mips16\fR" 4
  .IX Item "-mflip-mips16"
! Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
  for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
  not intended for ordinary use in compiling user code.
! .IP "\fB\-minterlink\-compressed\fR" 4
  .IX Item "-minterlink-compressed"
  .PD 0
! .IP "\fB\-mno\-interlink\-compressed\fR" 4
  .IX Item "-mno-interlink-compressed"
  .PD
! Require (do not require) that code using the standard (uncompressed) \s-1MIPS ISA\s0
! be link-compatible with \s-1MIPS16\s0 and microMIPS code, and vice versa.
  .Sp
! For example, code using the standard \s-1ISA\s0 encoding cannot jump directly
! to \s-1MIPS16\s0 or microMIPS code; it must either use a call or an indirect jump.
! \&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless \s-1GCC\s0
  knows that the target of the jump is not compressed.
! .IP "\fB\-minterlink\-mips16\fR" 4
  .IX Item "-minterlink-mips16"
  .PD 0
! .IP "\fB\-mno\-interlink\-mips16\fR" 4
  .IX Item "-mno-interlink-mips16"
  .PD
  Aliases of \fB\-minterlink\-compressed\fR and
! \&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS \s-1ASE\s0
  and are retained for backwards compatibility.
! .IP "\fB\-mabi=32\fR" 4
  .IX Item "-mabi=32"
  .PD 0
! .IP "\fB\-mabi=o64\fR" 4
  .IX Item "-mabi=o64"
! .IP "\fB\-mabi=n32\fR" 4
  .IX Item "-mabi=n32"
! .IP "\fB\-mabi=64\fR" 4
  .IX Item "-mabi=64"
! .IP "\fB\-mabi=eabi\fR" 4
  .IX Item "-mabi=eabi"
  .PD
! Generate code for the given \s-1ABI.\s0
  .Sp
! Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
  generates 64\-bit code when you select a 64\-bit architecture, but you
  can use \fB\-mgp32\fR to get 32\-bit code instead.
  .Sp
! For information about the O64 \s-1ABI,\s0 see
  <\fBhttps://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
  .Sp
! \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
  are 64 rather than 32 bits wide.  You can select this combination with
! \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \f(CW\*(C`mthc1\*(C'\fR
  and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
! \&\s-1MIPS32R2, MIPS32R3\s0 and \s-1MIPS32R5\s0 processors.
  .Sp
  The register assignments for arguments and return values remain the
  same, but each scalar value is passed in a single 64\-bit register
  rather than a pair of 32\-bit registers.  For example, scalar
! floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
! \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
! remains the same in that the even-numbered double-precision registers
  are saved.
  .Sp
! Two additional variants of the o32 \s-1ABI\s0 are supported to enable
! a transition from 32\-bit to 64\-bit registers.  These are \s-1FPXX\s0
! (\fB\-mfpxx\fR) and \s-1FP64A\s0 (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
! The \s-1FPXX\s0 extension mandates that all code must execute correctly
  when run using 32\-bit or 64\-bit registers.  The code can be interlinked
! with either \s-1FP32\s0 or \s-1FP64,\s0 but not both.
! The \s-1FP64A\s0 extension is similar to the \s-1FP64\s0 extension but forbids the
! use of odd-numbered single-precision registers.  This can be used
! in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in \s-1MIPS32R5\s0
! processors and allows both \s-1FP32\s0 and \s-1FP64A\s0 code to interlink and
! run in the same process without changing \s-1FPU\s0 modes.
! .IP "\fB\-mabicalls\fR" 4
  .IX Item "-mabicalls"
  .PD 0
! .IP "\fB\-mno\-abicalls\fR" 4
  .IX Item "-mno-abicalls"
  .PD
  Generate (do not generate) code that is suitable for SVR4\-style
  dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
  systems.
! .IP "\fB\-mshared\fR" 4
  .IX Item "-mshared"
  .PD 0
! .IP "\fB\-mno\-shared\fR" 4
  .IX Item "-mno-shared"
  .PD
! Generate (do not generate) code that is fully position-independent,
  and that can therefore be linked into shared libraries.  This option
  only affects \fB\-mabicalls\fR.
  .Sp
! All \fB\-mabicalls\fR code has traditionally been position-independent,
  regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
! as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
! accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
! initialization sequences and generate direct calls to locally-defined
  functions.  This mode is selected by \fB\-mno\-shared\fR.
  .Sp
  \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
! objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
! does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
  of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
  executables both smaller and quicker.
  .Sp
  \&\fB\-mshared\fR is the default.
! .IP "\fB\-mplt\fR" 4
  .IX Item "-mplt"
  .PD 0
! .IP "\fB\-mno\-plt\fR" 4
  .IX Item "-mno-plt"
  .PD
  Assume (do not assume) that the static and dynamic linkers
  support PLTs and copy relocations.  This option only affects
! \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI,\s0 this option
  has no effect without \fB\-msym32\fR.
  .Sp
  You can make \fB\-mplt\fR the default by configuring
! \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
  \&\fB\-mno\-plt\fR otherwise.
! .IP "\fB\-mxgot\fR" 4
  .IX Item "-mxgot"
  .PD 0
! .IP "\fB\-mno\-xgot\fR" 4
  .IX Item "-mno-xgot"
  .PD
  Lift (do not lift) the usual restrictions on the size of the global
  offset table.
  .Sp
! \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT.\s0
! While this is relatively efficient, it only works if the \s-1GOT\s0
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
--- 27205,27428 ----
  for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
  accepted as synonyms for \fIn\fR\fBf1_1\fR.
  .Sp
! GCC defines two macros based on the value of this option.  The first
  is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
! a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\fR\f(CIfoo\fR\f(CW\*(C'\fR,
  where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
  For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
  to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
  .Sp
  Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
  above.  In other words, it has the full prefix and does not
! abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom\-abi\fR,
  the macro names the resolved architecture (either \f(CW"mips1"\fR or
  \&\f(CW"mips3"\fR).  It names the default architecture when no
  \&\fB\-march\fR option is given.
! .IP \fB\-mtune=\fR\fIarch\fR 4
  .IX Item "-mtune=arch"
  Optimize for \fIarch\fR.  Among other things, this option controls
  the way instructions are scheduled, and the perceived cost of arithmetic
  operations.  The list of \fIarch\fR values is the same as for
  \&\fB\-march\fR.
  .Sp
! When this option is not used, GCC optimizes for the processor
  specified by \fB\-march\fR.  By using \fB\-march\fR and
  \&\fB\-mtune\fR together, it is possible to generate code that
  runs on a family of processors, but optimize the code for one
  particular member of that family.
  .Sp
  \&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
! \&\f(CW\*(C`_MIPS_TUNE_\fR\f(CIfoo\fR\f(CW\*(C'\fR, which work in the same way as the
  \&\fB\-march\fR ones described above.
! .IP \fB\-mips1\fR 4
  .IX Item "-mips1"
  Equivalent to \fB\-march=mips1\fR.
! .IP \fB\-mips2\fR 4
  .IX Item "-mips2"
  Equivalent to \fB\-march=mips2\fR.
! .IP \fB\-mips3\fR 4
  .IX Item "-mips3"
  Equivalent to \fB\-march=mips3\fR.
! .IP \fB\-mips4\fR 4
  .IX Item "-mips4"
  Equivalent to \fB\-march=mips4\fR.
! .IP \fB\-mips32\fR 4
  .IX Item "-mips32"
  Equivalent to \fB\-march=mips32\fR.
! .IP \fB\-mips32r3\fR 4
  .IX Item "-mips32r3"
  Equivalent to \fB\-march=mips32r3\fR.
! .IP \fB\-mips32r5\fR 4
  .IX Item "-mips32r5"
  Equivalent to \fB\-march=mips32r5\fR.
! .IP \fB\-mips32r6\fR 4
  .IX Item "-mips32r6"
  Equivalent to \fB\-march=mips32r6\fR.
! .IP \fB\-mips64\fR 4
  .IX Item "-mips64"
  Equivalent to \fB\-march=mips64\fR.
! .IP \fB\-mips64r2\fR 4
  .IX Item "-mips64r2"
  Equivalent to \fB\-march=mips64r2\fR.
! .IP \fB\-mips64r3\fR 4
  .IX Item "-mips64r3"
  Equivalent to \fB\-march=mips64r3\fR.
! .IP \fB\-mips64r5\fR 4
  .IX Item "-mips64r5"
  Equivalent to \fB\-march=mips64r5\fR.
! .IP \fB\-mips64r6\fR 4
  .IX Item "-mips64r6"
  Equivalent to \fB\-march=mips64r6\fR.
! .IP \fB\-mips16\fR 4
  .IX Item "-mips16"
  .PD 0
! .IP \fB\-mno\-mips16\fR 4
  .IX Item "-mno-mips16"
  .PD
! Generate (do not generate) MIPS16 code.  If GCC is targeting a
! MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
  .Sp
! MIPS16 code generation can also be controlled on a per\-function basis
  by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
! .IP \fB\-mmips16e2\fR 4
  .IX Item "-mmips16e2"
  .PD 0
! .IP \fB\-mno\-mips16e2\fR 4
  .IX Item "-mno-mips16e2"
  .PD
! Use (do not use) the MIPS16e2 ASE.  This option modifies the behavior
! of the \fB\-mips16\fR option such that it targets the MIPS16e2 ASE.
! .IP \fB\-mflip\-mips16\fR 4
  .IX Item "-mflip-mips16"
! Generate MIPS16 code on alternating functions.  This option is provided
  for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
  not intended for ordinary use in compiling user code.
! .IP \fB\-minterlink\-compressed\fR 4
  .IX Item "-minterlink-compressed"
  .PD 0
! .IP \fB\-mno\-interlink\-compressed\fR 4
  .IX Item "-mno-interlink-compressed"
  .PD
! Require (do not require) that code using the standard (uncompressed) MIPS ISA
! be link\-compatible with MIPS16 and microMIPS code, and vice versa.
  .Sp
! For example, code using the standard ISA encoding cannot jump directly
! to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
! \&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless GCC
  knows that the target of the jump is not compressed.
! .IP \fB\-minterlink\-mips16\fR 4
  .IX Item "-minterlink-mips16"
  .PD 0
! .IP \fB\-mno\-interlink\-mips16\fR 4
  .IX Item "-mno-interlink-mips16"
  .PD
  Aliases of \fB\-minterlink\-compressed\fR and
! \&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS ASE
  and are retained for backwards compatibility.
! .IP \fB\-mabi=32\fR 4
  .IX Item "-mabi=32"
  .PD 0
! .IP \fB\-mabi=o64\fR 4
  .IX Item "-mabi=o64"
! .IP \fB\-mabi=n32\fR 4
  .IX Item "-mabi=n32"
! .IP \fB\-mabi=64\fR 4
  .IX Item "-mabi=64"
! .IP \fB\-mabi=eabi\fR 4
  .IX Item "-mabi=eabi"
  .PD
! Generate code for the given ABI.
  .Sp
! Note that the EABI has a 32\-bit and a 64\-bit variant.  GCC normally
  generates 64\-bit code when you select a 64\-bit architecture, but you
  can use \fB\-mgp32\fR to get 32\-bit code instead.
  .Sp
! For information about the O64 ABI, see
  <\fBhttps://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
  .Sp
! GCC supports a variant of the o32 ABI in which floating\-point registers
  are 64 rather than 32 bits wide.  You can select this combination with
! \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This ABI relies on the \f(CW\*(C`mthc1\*(C'\fR
  and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
! MIPS32R2, MIPS32R3 and MIPS32R5 processors.
  .Sp
  The register assignments for arguments and return values remain the
  same, but each scalar value is passed in a single 64\-bit register
  rather than a pair of 32\-bit registers.  For example, scalar
! floating\-point values are returned in \fR\f(CB$f0\fR\fB\fR only, not a
! \&\fB\fR\f(CB$f0\fR\fB\fR/\fB\fR\f(CB$f1\fR\fB\fR pair.  The set of call\-saved registers also
! remains the same in that the even\-numbered double\-precision registers
  are saved.
  .Sp
! Two additional variants of the o32 ABI are supported to enable
! a transition from 32\-bit to 64\-bit registers.  These are FPXX
! (\fB\-mfpxx\fR) and FP64A (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
! The FPXX extension mandates that all code must execute correctly
  when run using 32\-bit or 64\-bit registers.  The code can be interlinked
! with either FP32 or FP64, but not both.
! The FP64A extension is similar to the FP64 extension but forbids the
! use of odd\-numbered single\-precision registers.  This can be used
! in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in MIPS32R5
! processors and allows both FP32 and FP64A code to interlink and
! run in the same process without changing FPU modes.
! .IP \fB\-mabicalls\fR 4
  .IX Item "-mabicalls"
  .PD 0
! .IP \fB\-mno\-abicalls\fR 4
  .IX Item "-mno-abicalls"
  .PD
  Generate (do not generate) code that is suitable for SVR4\-style
  dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
  systems.
! .IP \fB\-mshared\fR 4
  .IX Item "-mshared"
  .PD 0
! .IP \fB\-mno\-shared\fR 4
  .IX Item "-mno-shared"
  .PD
! Generate (do not generate) code that is fully position\-independent,
  and that can therefore be linked into shared libraries.  This option
  only affects \fB\-mabicalls\fR.
  .Sp
! All \fB\-mabicalls\fR code has traditionally been position\-independent,
  regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
! as an extension, the GNU toolchain allows executables to use absolute
! accesses for locally\-binding symbols.  It can also use shorter GP
! initialization sequences and generate direct calls to locally\-defined
  functions.  This mode is selected by \fB\-mno\-shared\fR.
  .Sp
  \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
! objects that can only be linked by the GNU linker.  However, the option
! does not affect the ABI of the final executable; it only affects the ABI
  of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
  executables both smaller and quicker.
  .Sp
  \&\fB\-mshared\fR is the default.
! .IP \fB\-mplt\fR 4
  .IX Item "-mplt"
  .PD 0
! .IP \fB\-mno\-plt\fR 4
  .IX Item "-mno-plt"
  .PD
  Assume (do not assume) that the static and dynamic linkers
  support PLTs and copy relocations.  This option only affects
! \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 ABI, this option
  has no effect without \fB\-msym32\fR.
  .Sp
  You can make \fB\-mplt\fR the default by configuring
! GCC with \fB\-\-with\-mips\-plt\fR.  The default is
  \&\fB\-mno\-plt\fR otherwise.
! .IP \fB\-mxgot\fR 4
  .IX Item "-mxgot"
  .PD 0
! .IP \fB\-mno\-xgot\fR 4
  .IX Item "-mno-xgot"
  .PD
  Lift (do not lift) the usual restrictions on the size of the global
  offset table.
  .Sp
! GCC normally uses a single instruction to load values from the GOT.
! While this is relatively efficient, it only works if the GOT
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
*************** value of a global symbol.
*** 27502,27791 ****
  .Sp
  Note that some linkers can create multiple GOTs.  If you have such a
  linker, you should only need to use \fB\-mxgot\fR when a single object
! file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
  .Sp
! These options have no effect unless \s-1GCC\s0 is generating position
  independent code.
! .IP "\fB\-mgp32\fR" 4
  .IX Item "-mgp32"
! Assume that general-purpose registers are 32 bits wide.
! .IP "\fB\-mgp64\fR" 4
  .IX Item "-mgp64"
! Assume that general-purpose registers are 64 bits wide.
! .IP "\fB\-mfp32\fR" 4
  .IX Item "-mfp32"
! Assume that floating-point registers are 32 bits wide.
! .IP "\fB\-mfp64\fR" 4
  .IX Item "-mfp64"
! Assume that floating-point registers are 64 bits wide.
! .IP "\fB\-mfpxx\fR" 4
  .IX Item "-mfpxx"
! Do not assume the width of floating-point registers.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
! Use floating-point coprocessor instructions.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Do not use floating-point coprocessor instructions.  Implement
! floating-point calculations using library calls instead.
! .IP "\fB\-mno\-float\fR" 4
  .IX Item "-mno-float"
  Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
! program being compiled does not perform any floating-point operations.
! This option is presently supported only by some bare-metal \s-1MIPS\s0
  configurations, where it may select a special set of libraries
! that lack all floating-point support (including, for example, the
! floating-point \f(CW\*(C`printf\*(C'\fR formats).  
  If code compiled with \fB\-mno\-float\fR accidentally contains
! floating-point operations, it is likely to suffer a link-time
! or run-time failure.
! .IP "\fB\-msingle\-float\fR" 4
  .IX Item "-msingle-float"
! Assume that the floating-point coprocessor only supports single-precision
  operations.
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
! Assume that the floating-point coprocessor supports double-precision
  operations.  This is the default.
! .IP "\fB\-modd\-spreg\fR" 4
  .IX Item "-modd-spreg"
  .PD 0
! .IP "\fB\-mno\-odd\-spreg\fR" 4
  .IX Item "-mno-odd-spreg"
  .PD
! Enable the use of odd-numbered single-precision floating-point registers
! for the o32 \s-1ABI.\s0  This is the default for processors that are known to
! support these registers.  When using the o32 \s-1FPXX ABI,\s0 \fB\-mno\-odd\-spreg\fR
  is set by default.
! .IP "\fB\-mabs=2008\fR" 4
  .IX Item "-mabs=2008"
  .PD 0
! .IP "\fB\-mabs=legacy\fR" 4
  .IX Item "-mabs=legacy"
  .PD
! These options control the treatment of the special not-a-number (NaN)
! \&\s-1IEEE 754\s0 floating-point data with the \f(CW\*(C`abs.\f(CIfmt\f(CW\*(C'\fR and
! \&\f(CW\*(C`neg.\f(CIfmt\f(CW\*(C'\fR machine instructions.
  .Sp
  By default or when \fB\-mabs=legacy\fR is used the legacy
  treatment is selected.  In this case these instructions are considered
  arithmetic and avoided where correct operation is required and the
  input operand might be a NaN.  A longer sequence of instructions that
! manipulate the sign bit of floating-point datum manually is used
  instead unless the \fB\-ffinite\-math\-only\fR option has also been
  specified.
  .Sp
! The \fB\-mabs=2008\fR option selects the \s-1IEEE 754\-2008\s0 treatment.  In
! this case these instructions are considered non-arithmetic and therefore
  operating correctly in all cases, including in particular where the
  input operand is a NaN.  These instructions are therefore always used
  for the respective operations.
! .IP "\fB\-mnan=2008\fR" 4
  .IX Item "-mnan=2008"
  .PD 0
! .IP "\fB\-mnan=legacy\fR" 4
  .IX Item "-mnan=legacy"
  .PD
! These options control the encoding of the special not-a-number (NaN)
! \&\s-1IEEE 754\s0 floating-point data.
  .Sp
  The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
  case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
  significand field being 0, whereas signaling NaNs (sNaNs) are denoted
  by the first bit of their trailing significand field being 1.
  .Sp
! The \fB\-mnan=2008\fR option selects the \s-1IEEE 754\-2008\s0 encoding.  In
  this case qNaNs are denoted by the first bit of their trailing
  significand field being 1, whereas sNaNs are denoted by the first bit of
  their trailing significand field being 0.
  .Sp
! The default is \fB\-mnan=legacy\fR unless \s-1GCC\s0 has been configured with
  \&\fB\-\-with\-nan=2008\fR.
! .IP "\fB\-mllsc\fR" 4
  .IX Item "-mllsc"
  .PD 0
! .IP "\fB\-mno\-llsc\fR" 4
  .IX Item "-mno-llsc"
  .PD
  Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
! implement atomic memory built-in functions.  When neither option is
! specified, \s-1GCC\s0 uses the instructions if the target architecture
  supports them.
  .Sp
  \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
  instructions and \fB\-mno\-llsc\fR can be useful when compiling for
  nonstandard ISAs.  You can make either option the default by
! configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
  respectively.  \fB\-\-with\-llsc\fR is the default for some
  configurations; see the installation documentation for details.
! .IP "\fB\-mdsp\fR" 4
  .IX Item "-mdsp"
  .PD 0
! .IP "\fB\-mno\-dsp\fR" 4
  .IX Item "-mno-dsp"
  .PD
! Use (do not use) revision 1 of the \s-1MIPS DSP ASE.\s0
    This option defines the
  preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
  \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
! .IP "\fB\-mdspr2\fR" 4
  .IX Item "-mdspr2"
  .PD 0
! .IP "\fB\-mno\-dspr2\fR" 4
  .IX Item "-mno-dspr2"
  .PD
! Use (do not use) revision 2 of the \s-1MIPS DSP ASE.\s0
    This option defines the
  preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
  It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
! .IP "\fB\-msmartmips\fR" 4
  .IX Item "-msmartmips"
  .PD 0
! .IP "\fB\-mno\-smartmips\fR" 4
  .IX Item "-mno-smartmips"
  .PD
! Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE.\s0
! .IP "\fB\-mpaired\-single\fR" 4
  .IX Item "-mpaired-single"
  .PD 0
! .IP "\fB\-mno\-paired\-single\fR" 4
  .IX Item "-mno-paired-single"
  .PD
! Use (do not use) paired-single floating-point instructions.
    This option requires
! hardware floating-point support to be enabled.
! .IP "\fB\-mdmx\fR" 4
  .IX Item "-mdmx"
  .PD 0
! .IP "\fB\-mno\-mdmx\fR" 4
  .IX Item "-mno-mdmx"
  .PD
! Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
  This option can only be used when generating 64\-bit code and requires
! hardware floating-point support to be enabled.
! .IP "\fB\-mips3d\fR" 4
  .IX Item "-mips3d"
  .PD 0
! .IP "\fB\-mno\-mips3d\fR" 4
  .IX Item "-mno-mips3d"
  .PD
! Use (do not use) the \s-1MIPS\-3D ASE.\s0  
  The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
! .IP "\fB\-mmicromips\fR" 4
  .IX Item "-mmicromips"
  .PD 0
! .IP "\fB\-mno\-micromips\fR" 4
  .IX Item "-mno-micromips"
  .PD
  Generate (do not generate) microMIPS code.
  .Sp
! MicroMIPS code generation can also be controlled on a per-function basis
  by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
! .IP "\fB\-mmt\fR" 4
  .IX Item "-mmt"
  .PD 0
! .IP "\fB\-mno\-mt\fR" 4
  .IX Item "-mno-mt"
  .PD
! Use (do not use) \s-1MT\s0 Multithreading instructions.
! .IP "\fB\-mmcu\fR" 4
  .IX Item "-mmcu"
  .PD 0
! .IP "\fB\-mno\-mcu\fR" 4
  .IX Item "-mno-mcu"
  .PD
! Use (do not use) the \s-1MIPS MCU ASE\s0 instructions.
! .IP "\fB\-meva\fR" 4
  .IX Item "-meva"
  .PD 0
! .IP "\fB\-mno\-eva\fR" 4
  .IX Item "-mno-eva"
  .PD
! Use (do not use) the \s-1MIPS\s0 Enhanced Virtual Addressing instructions.
! .IP "\fB\-mvirt\fR" 4
  .IX Item "-mvirt"
  .PD 0
! .IP "\fB\-mno\-virt\fR" 4
  .IX Item "-mno-virt"
  .PD
! Use (do not use) the \s-1MIPS\s0 Virtualization (\s-1VZ\s0) instructions.
! .IP "\fB\-mxpa\fR" 4
  .IX Item "-mxpa"
  .PD 0
! .IP "\fB\-mno\-xpa\fR" 4
  .IX Item "-mno-xpa"
  .PD
! Use (do not use) the \s-1MIPS\s0 eXtended Physical Address (\s-1XPA\s0) instructions.
! .IP "\fB\-mcrc\fR" 4
  .IX Item "-mcrc"
  .PD 0
! .IP "\fB\-mno\-crc\fR" 4
  .IX Item "-mno-crc"
  .PD
! Use (do not use) the \s-1MIPS\s0 Cyclic Redundancy Check (\s-1CRC\s0) instructions.
! .IP "\fB\-mginv\fR" 4
  .IX Item "-mginv"
  .PD 0
! .IP "\fB\-mno\-ginv\fR" 4
  .IX Item "-mno-ginv"
  .PD
! Use (do not use) the \s-1MIPS\s0 Global INValidate (\s-1GINV\s0) instructions.
! .IP "\fB\-mloongson\-mmi\fR" 4
  .IX Item "-mloongson-mmi"
  .PD 0
! .IP "\fB\-mno\-loongson\-mmi\fR" 4
  .IX Item "-mno-loongson-mmi"
  .PD
! Use (do not use) the \s-1MIPS\s0 Loongson MultiMedia extensions Instructions (\s-1MMI\s0).
! .IP "\fB\-mloongson\-ext\fR" 4
  .IX Item "-mloongson-ext"
  .PD 0
! .IP "\fB\-mno\-loongson\-ext\fR" 4
  .IX Item "-mno-loongson-ext"
  .PD
! Use (do not use) the \s-1MIPS\s0 Loongson EXTensions (\s-1EXT\s0) instructions.
! .IP "\fB\-mloongson\-ext2\fR" 4
  .IX Item "-mloongson-ext2"
  .PD 0
! .IP "\fB\-mno\-loongson\-ext2\fR" 4
  .IX Item "-mno-loongson-ext2"
  .PD
! Use (do not use) the \s-1MIPS\s0 Loongson EXTensions r2 (\s-1EXT2\s0) instructions.
! .IP "\fB\-mlong64\fR" 4
  .IX Item "-mlong64"
  Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
  an explanation of the default and the way that the pointer size is
  determined.
! .IP "\fB\-mlong32\fR" 4
  .IX Item "-mlong32"
  Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
  .Sp
  The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
! the \s-1ABI.\s0  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
! uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
  32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
  or the same size as integer registers, whichever is smaller.
! .IP "\fB\-msym32\fR" 4
  .IX Item "-msym32"
  .PD 0
! .IP "\fB\-mno\-sym32\fR" 4
  .IX Item "-mno-sym32"
  .PD
  Assume (do not assume) that all symbols have 32\-bit values, regardless
! of the selected \s-1ABI.\s0  This option is useful in combination with
! \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
  to generate shorter and faster references to symbolic addresses.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally-visible data in a small data section
! if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then generate
  more efficient accesses to the data; see \fB\-mgpopt\fR for details.
  .Sp
  The default \fB\-G\fR option depends on the configuration.
! .IP "\fB\-mlocal\-sdata\fR" 4
  .IX Item "-mlocal-sdata"
  .PD 0
! .IP "\fB\-mno\-local\-sdata\fR" 4
  .IX Item "-mno-local-sdata"
  .PD
  Extend (do not extend) the \fB\-G\fR behavior to local data too,
--- 27437,27726 ----
  .Sp
  Note that some linkers can create multiple GOTs.  If you have such a
  linker, you should only need to use \fB\-mxgot\fR when a single object
! file accesses more than 64k\*(Aqs worth of GOT entries.  Very few do.
  .Sp
! These options have no effect unless GCC is generating position
  independent code.
! .IP \fB\-mgp32\fR 4
  .IX Item "-mgp32"
! Assume that general\-purpose registers are 32 bits wide.
! .IP \fB\-mgp64\fR 4
  .IX Item "-mgp64"
! Assume that general\-purpose registers are 64 bits wide.
! .IP \fB\-mfp32\fR 4
  .IX Item "-mfp32"
! Assume that floating\-point registers are 32 bits wide.
! .IP \fB\-mfp64\fR 4
  .IX Item "-mfp64"
! Assume that floating\-point registers are 64 bits wide.
! .IP \fB\-mfpxx\fR 4
  .IX Item "-mfpxx"
! Do not assume the width of floating\-point registers.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
! Use floating\-point coprocessor instructions.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Do not use floating\-point coprocessor instructions.  Implement
! floating\-point calculations using library calls instead.
! .IP \fB\-mno\-float\fR 4
  .IX Item "-mno-float"
  Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
! program being compiled does not perform any floating\-point operations.
! This option is presently supported only by some bare\-metal MIPS
  configurations, where it may select a special set of libraries
! that lack all floating\-point support (including, for example, the
! floating\-point \f(CW\*(C`printf\*(C'\fR formats).  
  If code compiled with \fB\-mno\-float\fR accidentally contains
! floating\-point operations, it is likely to suffer a link\-time
! or run\-time failure.
! .IP \fB\-msingle\-float\fR 4
  .IX Item "-msingle-float"
! Assume that the floating\-point coprocessor only supports single\-precision
  operations.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
! Assume that the floating\-point coprocessor supports double\-precision
  operations.  This is the default.
! .IP \fB\-modd\-spreg\fR 4
  .IX Item "-modd-spreg"
  .PD 0
! .IP \fB\-mno\-odd\-spreg\fR 4
  .IX Item "-mno-odd-spreg"
  .PD
! Enable the use of odd\-numbered single\-precision floating\-point registers
! for the o32 ABI.  This is the default for processors that are known to
! support these registers.  When using the o32 FPXX ABI, \fB\-mno\-odd\-spreg\fR
  is set by default.
! .IP \fB\-mabs=2008\fR 4
  .IX Item "-mabs=2008"
  .PD 0
! .IP \fB\-mabs=legacy\fR 4
  .IX Item "-mabs=legacy"
  .PD
! These options control the treatment of the special not\-a\-number (NaN)
! IEEE 754 floating\-point data with the \f(CW\*(C`abs.\fR\f(CIfmt\fR\f(CW\*(C'\fR and
! \&\f(CW\*(C`neg.\fR\f(CIfmt\fR\f(CW\*(C'\fR machine instructions.
  .Sp
  By default or when \fB\-mabs=legacy\fR is used the legacy
  treatment is selected.  In this case these instructions are considered
  arithmetic and avoided where correct operation is required and the
  input operand might be a NaN.  A longer sequence of instructions that
! manipulate the sign bit of floating\-point datum manually is used
  instead unless the \fB\-ffinite\-math\-only\fR option has also been
  specified.
  .Sp
! The \fB\-mabs=2008\fR option selects the IEEE 754\-2008 treatment.  In
! this case these instructions are considered non\-arithmetic and therefore
  operating correctly in all cases, including in particular where the
  input operand is a NaN.  These instructions are therefore always used
  for the respective operations.
! .IP \fB\-mnan=2008\fR 4
  .IX Item "-mnan=2008"
  .PD 0
! .IP \fB\-mnan=legacy\fR 4
  .IX Item "-mnan=legacy"
  .PD
! These options control the encoding of the special not\-a\-number (NaN)
! IEEE 754 floating\-point data.
  .Sp
  The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
  case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
  significand field being 0, whereas signaling NaNs (sNaNs) are denoted
  by the first bit of their trailing significand field being 1.
  .Sp
! The \fB\-mnan=2008\fR option selects the IEEE 754\-2008 encoding.  In
  this case qNaNs are denoted by the first bit of their trailing
  significand field being 1, whereas sNaNs are denoted by the first bit of
  their trailing significand field being 0.
  .Sp
! The default is \fB\-mnan=legacy\fR unless GCC has been configured with
  \&\fB\-\-with\-nan=2008\fR.
! .IP \fB\-mllsc\fR 4
  .IX Item "-mllsc"
  .PD 0
! .IP \fB\-mno\-llsc\fR 4
  .IX Item "-mno-llsc"
  .PD
  Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
! implement atomic memory built\-in functions.  When neither option is
! specified, GCC uses the instructions if the target architecture
  supports them.
  .Sp
  \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
  instructions and \fB\-mno\-llsc\fR can be useful when compiling for
  nonstandard ISAs.  You can make either option the default by
! configuring GCC with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
  respectively.  \fB\-\-with\-llsc\fR is the default for some
  configurations; see the installation documentation for details.
! .IP \fB\-mdsp\fR 4
  .IX Item "-mdsp"
  .PD 0
! .IP \fB\-mno\-dsp\fR 4
  .IX Item "-mno-dsp"
  .PD
! Use (do not use) revision 1 of the MIPS DSP ASE.
    This option defines the
  preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
  \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
! .IP \fB\-mdspr2\fR 4
  .IX Item "-mdspr2"
  .PD 0
! .IP \fB\-mno\-dspr2\fR 4
  .IX Item "-mno-dspr2"
  .PD
! Use (do not use) revision 2 of the MIPS DSP ASE.
    This option defines the
  preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
  It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
! .IP \fB\-msmartmips\fR 4
  .IX Item "-msmartmips"
  .PD 0
! .IP \fB\-mno\-smartmips\fR 4
  .IX Item "-mno-smartmips"
  .PD
! Use (do not use) the MIPS SmartMIPS ASE.
! .IP \fB\-mpaired\-single\fR 4
  .IX Item "-mpaired-single"
  .PD 0
! .IP \fB\-mno\-paired\-single\fR 4
  .IX Item "-mno-paired-single"
  .PD
! Use (do not use) paired\-single floating\-point instructions.
    This option requires
! hardware floating\-point support to be enabled.
! .IP \fB\-mdmx\fR 4
  .IX Item "-mdmx"
  .PD 0
! .IP \fB\-mno\-mdmx\fR 4
  .IX Item "-mno-mdmx"
  .PD
! Use (do not use) MIPS Digital Media Extension instructions.
  This option can only be used when generating 64\-bit code and requires
! hardware floating\-point support to be enabled.
! .IP \fB\-mips3d\fR 4
  .IX Item "-mips3d"
  .PD 0
! .IP \fB\-mno\-mips3d\fR 4
  .IX Item "-mno-mips3d"
  .PD
! Use (do not use) the MIPS\-3D ASE.  
  The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
! .IP \fB\-mmicromips\fR 4
  .IX Item "-mmicromips"
  .PD 0
! .IP \fB\-mno\-micromips\fR 4
  .IX Item "-mno-micromips"
  .PD
  Generate (do not generate) microMIPS code.
  .Sp
! MicroMIPS code generation can also be controlled on a per\-function basis
  by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
! .IP \fB\-mmt\fR 4
  .IX Item "-mmt"
  .PD 0
! .IP \fB\-mno\-mt\fR 4
  .IX Item "-mno-mt"
  .PD
! Use (do not use) MT Multithreading instructions.
! .IP \fB\-mmcu\fR 4
  .IX Item "-mmcu"
  .PD 0
! .IP \fB\-mno\-mcu\fR 4
  .IX Item "-mno-mcu"
  .PD
! Use (do not use) the MIPS MCU ASE instructions.
! .IP \fB\-meva\fR 4
  .IX Item "-meva"
  .PD 0
! .IP \fB\-mno\-eva\fR 4
  .IX Item "-mno-eva"
  .PD
! Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
! .IP \fB\-mvirt\fR 4
  .IX Item "-mvirt"
  .PD 0
! .IP \fB\-mno\-virt\fR 4
  .IX Item "-mno-virt"
  .PD
! Use (do not use) the MIPS Virtualization (VZ) instructions.
! .IP \fB\-mxpa\fR 4
  .IX Item "-mxpa"
  .PD 0
! .IP \fB\-mno\-xpa\fR 4
  .IX Item "-mno-xpa"
  .PD
! Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.
! .IP \fB\-mcrc\fR 4
  .IX Item "-mcrc"
  .PD 0
! .IP \fB\-mno\-crc\fR 4
  .IX Item "-mno-crc"
  .PD
! Use (do not use) the MIPS Cyclic Redundancy Check (CRC) instructions.
! .IP \fB\-mginv\fR 4
  .IX Item "-mginv"
  .PD 0
! .IP \fB\-mno\-ginv\fR 4
  .IX Item "-mno-ginv"
  .PD
! Use (do not use) the MIPS Global INValidate (GINV) instructions.
! .IP \fB\-mloongson\-mmi\fR 4
  .IX Item "-mloongson-mmi"
  .PD 0
! .IP \fB\-mno\-loongson\-mmi\fR 4
  .IX Item "-mno-loongson-mmi"
  .PD
! Use (do not use) the MIPS Loongson MultiMedia extensions Instructions (MMI).
! .IP \fB\-mloongson\-ext\fR 4
  .IX Item "-mloongson-ext"
  .PD 0
! .IP \fB\-mno\-loongson\-ext\fR 4
  .IX Item "-mno-loongson-ext"
  .PD
! Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
! .IP \fB\-mloongson\-ext2\fR 4
  .IX Item "-mloongson-ext2"
  .PD 0
! .IP \fB\-mno\-loongson\-ext2\fR 4
  .IX Item "-mno-loongson-ext2"
  .PD
! Use (do not use) the MIPS Loongson EXTensions r2 (EXT2) instructions.
! .IP \fB\-mlong64\fR 4
  .IX Item "-mlong64"
  Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
  an explanation of the default and the way that the pointer size is
  determined.
! .IP \fB\-mlong32\fR 4
  .IX Item "-mlong32"
  Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
  .Sp
  The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
! the ABI.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 ABI
! uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit EABI; the others use
  32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
  or the same size as integer registers, whichever is smaller.
! .IP \fB\-msym32\fR 4
  .IX Item "-msym32"
  .PD 0
! .IP \fB\-mno\-sym32\fR 4
  .IX Item "-mno-sym32"
  .PD
  Assume (do not assume) that all symbols have 32\-bit values, regardless
! of the selected ABI.  This option is useful in combination with
! \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows GCC
  to generate shorter and faster references to symbolic addresses.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally\-visible data in a small data section
! if that data is no bigger than \fInum\fR bytes.  GCC can then generate
  more efficient accesses to the data; see \fB\-mgpopt\fR for details.
  .Sp
  The default \fB\-G\fR option depends on the configuration.
! .IP \fB\-mlocal\-sdata\fR 4
  .IX Item "-mlocal-sdata"
  .PD 0
! .IP \fB\-mno\-local\-sdata\fR 4
  .IX Item "-mno-local-sdata"
  .PD
  Extend (do not extend) the \fB\-G\fR behavior to local data too,
*************** such as to static variables in C.  \fB\-
*** 27793,27809 ****
  default for all configurations.
  .Sp
  If the linker complains that an application is using too much small data,
! you might want to try rebuilding the less performance-critical parts with
  \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
  libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
  more room for the main program.
! .IP "\fB\-mextern\-sdata\fR" 4
  .IX Item "-mextern-sdata"
  .PD 0
! .IP "\fB\-mno\-extern\-sdata\fR" 4
  .IX Item "-mno-extern-sdata"
  .PD
! Assume (do not assume) that externally-defined data is in
  a small data section if the size of that data is within the \fB\-G\fR limit.
  \&\fB\-mextern\-sdata\fR is the default for all configurations.
  .Sp
--- 27728,27744 ----
  default for all configurations.
  .Sp
  If the linker complains that an application is using too much small data,
! you might want to try rebuilding the less performance\-critical parts with
  \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
  libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
  more room for the main program.
! .IP \fB\-mextern\-sdata\fR 4
  .IX Item "-mextern-sdata"
  .PD 0
! .IP \fB\-mno\-extern\-sdata\fR 4
  .IX Item "-mno-extern-sdata"
  .PD
! Assume (do not assume) that externally\-defined data is in
  a small data section if the size of that data is within the \fB\-G\fR limit.
  \&\fB\-mextern\-sdata\fR is the default for all configurations.
  .Sp
*************** If you compile a module \fIMod\fR with \
*** 27811,27820 ****
  \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
  that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
  is placed in a small data section.  If \fIVar\fR is defined by another
! module, you must either compile that module with a high-enough
! \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
  definition.  If \fIVar\fR is common, you must link the application
! with a high-enough \fB\-G\fR setting.
  .Sp
  The easiest way of satisfying these restrictions is to compile
  and link every module with the same \fB\-G\fR option.  However,
--- 27746,27755 ----
  \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
  that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
  is placed in a small data section.  If \fIVar\fR is defined by another
! module, you must either compile that module with a high\-enough
! \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR\*(Aqs
  definition.  If \fIVar\fR is common, you must link the application
! with a high\-enough \fB\-G\fR setting.
  .Sp
  The easiest way of satisfying these restrictions is to compile
  and link every module with the same \fB\-G\fR option.  However,
*************** you may wish to build a library that sup
*** 27822,27835 ****
  small data limits.  You can do this by compiling the library with
  the highest supported \fB\-G\fR setting and additionally using
  \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
! about externally-defined data.
! .IP "\fB\-mgpopt\fR" 4
  .IX Item "-mgpopt"
  .PD 0
! .IP "\fB\-mno\-gpopt\fR" 4
  .IX Item "-mno-gpopt"
  .PD
! Use (do not use) GP-relative accesses for symbols that are known to be
  in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
  \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
  configurations.
--- 27757,27770 ----
  small data limits.  You can do this by compiling the library with
  the highest supported \fB\-G\fR setting and additionally using
  \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
! about externally\-defined data.
! .IP \fB\-mgpopt\fR 4
  .IX Item "-mgpopt"
  .PD 0
! .IP \fB\-mno\-gpopt\fR 4
  .IX Item "-mno-gpopt"
  .PD
! Use (do not use) GP\-relative accesses for symbols that are known to be
  in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
  \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
  configurations.
*************** with \fB\-G0\fR.)
*** 27843,27937 ****
  .Sp
  \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
  \&\fB\-mno\-extern\-sdata\fR.
! .IP "\fB\-membedded\-data\fR" 4
  .IX Item "-membedded-data"
  .PD 0
! .IP "\fB\-mno\-embedded\-data\fR" 4
  .IX Item "-mno-embedded-data"
  .PD
! Allocate variables to the read-only data section first if possible, then
  next in the small data section if possible, otherwise in data.  This gives
! slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
  when executing, and thus may be preferred for some embedded systems.
! .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
  .IX Item "-muninit-const-in-rodata"
  .PD 0
! .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
  .IX Item "-mno-uninit-const-in-rodata"
  .PD
! Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
  This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
! .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
  .IX Item "-mcode-readable=setting"
! Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
  There are three possible settings:
  .RS 4
! .IP "\fB\-mcode\-readable=yes\fR" 4
  .IX Item "-mcode-readable=yes"
  Instructions may freely access executable sections.  This is the
  default setting.
! .IP "\fB\-mcode\-readable=pcrel\fR" 4
  .IX Item "-mcode-readable=pcrel"
! \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
  but other instructions must not do so.  This option is useful on 4KSc
  and 4KSd processors when the code TLBs have the Read Inhibit bit set.
  It is also useful on processors that can be configured to have a dual
! instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
! redirect PC-relative loads to the instruction \s-1RAM.\s0
! .IP "\fB\-mcode\-readable=no\fR" 4
  .IX Item "-mcode-readable=no"
  Instructions must not access executable sections.  This option can be
  useful on targets that are configured to have a dual instruction/data
! \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
! PC-relative loads to the instruction \s-1RAM.\s0
  .RE
  .RS 4
  .RE
! .IP "\fB\-msplit\-addresses\fR" 4
  .IX Item "-msplit-addresses"
  .PD 0
! .IP "\fB\-mno\-split\-addresses\fR" 4
  .IX Item "-mno-split-addresses"
  .PD
! Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
  relocation operators.  This option has been superseded by
  \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
! .IP "\fB\-mexplicit\-relocs=none\fR" 4
  .IX Item "-mexplicit-relocs=none"
  .PD 0
! .IP "\fB\-mexplicit\-relocs=base\fR" 4
  .IX Item "-mexplicit-relocs=base"
! .IP "\fB\-mexplicit\-relocs=pcrel\fR" 4
  .IX Item "-mexplicit-relocs=pcrel"
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
! .IP "\fB\-mno\-explicit\-relocs\fR" 4
  .IX Item "-mno-explicit-relocs"
  .PD
  These options control whether explicit relocs (such as \f(CW%gp_rel\fR) are used.
! The default value depends on the version of \s-1GAS\s0 when \s-1GCC\s0 itself was built.
  .Sp
! The \f(CW\*(C`base\*(C'\fR explicit-relocs support introdunced into \s-1GAS\s0 in 2001.
! The \f(CW\*(C`pcrel\*(C'\fR explicit-relocs support introdunced into \s-1GAS\s0 in 2014,
  which supports \f(CW%pcrel_hi\fR and \f(CW%pcrel_lo\fR.
! .IP "\fB\-mcheck\-zero\-division\fR" 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP "\fB\-mno\-check\-zero\-division\fR" 4
  .IX Item "-mno-check-zero-division"
  .PD
  Trap (do not trap) on integer division by zero.
  .Sp
  The default is \fB\-mcheck\-zero\-division\fR.
! .IP "\fB\-mdivide\-traps\fR" 4
  .IX Item "-mdivide-traps"
  .PD 0
! .IP "\fB\-mdivide\-breaks\fR" 4
  .IX Item "-mdivide-breaks"
  .PD
! \&\s-1MIPS\s0 systems check for division by zero by generating either a
  conditional trap or a break instruction.  Using traps results in
! smaller code, but is only supported on \s-1MIPS II\s0 and later.  Also, some
  versions of the Linux kernel have a bug that prevents trap from
  generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
  allow conditional traps on architectures that support them and
--- 27778,27872 ----
  .Sp
  \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
  \&\fB\-mno\-extern\-sdata\fR.
! .IP \fB\-membedded\-data\fR 4
  .IX Item "-membedded-data"
  .PD 0
! .IP \fB\-mno\-embedded\-data\fR 4
  .IX Item "-mno-embedded-data"
  .PD
! Allocate variables to the read\-only data section first if possible, then
  next in the small data section if possible, otherwise in data.  This gives
! slightly slower code than the default, but reduces the amount of RAM required
  when executing, and thus may be preferred for some embedded systems.
! .IP \fB\-muninit\-const\-in\-rodata\fR 4
  .IX Item "-muninit-const-in-rodata"
  .PD 0
! .IP \fB\-mno\-uninit\-const\-in\-rodata\fR 4
  .IX Item "-mno-uninit-const-in-rodata"
  .PD
! Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read\-only data section.
  This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
! .IP \fB\-mcode\-readable=\fR\fIsetting\fR 4
  .IX Item "-mcode-readable=setting"
! Specify whether GCC may generate code that reads from executable sections.
  There are three possible settings:
  .RS 4
! .IP \fB\-mcode\-readable=yes\fR 4
  .IX Item "-mcode-readable=yes"
  Instructions may freely access executable sections.  This is the
  default setting.
! .IP \fB\-mcode\-readable=pcrel\fR 4
  .IX Item "-mcode-readable=pcrel"
! MIPS16 PC\-relative load instructions can access executable sections,
  but other instructions must not do so.  This option is useful on 4KSc
  and 4KSd processors when the code TLBs have the Read Inhibit bit set.
  It is also useful on processors that can be configured to have a dual
! instruction/data SRAM interface and that, like the M4K, automatically
! redirect PC\-relative loads to the instruction RAM.
! .IP \fB\-mcode\-readable=no\fR 4
  .IX Item "-mcode-readable=no"
  Instructions must not access executable sections.  This option can be
  useful on targets that are configured to have a dual instruction/data
! SRAM interface but that (unlike the M4K) do not automatically redirect
! PC\-relative loads to the instruction RAM.
  .RE
  .RS 4
  .RE
! .IP \fB\-msplit\-addresses\fR 4
  .IX Item "-msplit-addresses"
  .PD 0
! .IP \fB\-mno\-split\-addresses\fR 4
  .IX Item "-mno-split-addresses"
  .PD
! Enable (disable) use of the \f(CW%hi()\fR and \f(CW%lo()\fR assembler
  relocation operators.  This option has been superseded by
  \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
! .IP \fB\-mexplicit\-relocs=none\fR 4
  .IX Item "-mexplicit-relocs=none"
  .PD 0
! .IP \fB\-mexplicit\-relocs=base\fR 4
  .IX Item "-mexplicit-relocs=base"
! .IP \fB\-mexplicit\-relocs=pcrel\fR 4
  .IX Item "-mexplicit-relocs=pcrel"
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
! .IP \fB\-mno\-explicit\-relocs\fR 4
  .IX Item "-mno-explicit-relocs"
  .PD
  These options control whether explicit relocs (such as \f(CW%gp_rel\fR) are used.
! The default value depends on the version of GAS when GCC itself was built.
  .Sp
! The \f(CW\*(C`base\*(C'\fR explicit\-relocs support introdunced into GAS in 2001.
! The \f(CW\*(C`pcrel\*(C'\fR explicit\-relocs support introdunced into GAS in 2014,
  which supports \f(CW%pcrel_hi\fR and \f(CW%pcrel_lo\fR.
! .IP \fB\-mcheck\-zero\-division\fR 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP \fB\-mno\-check\-zero\-division\fR 4
  .IX Item "-mno-check-zero-division"
  .PD
  Trap (do not trap) on integer division by zero.
  .Sp
  The default is \fB\-mcheck\-zero\-division\fR.
! .IP \fB\-mdivide\-traps\fR 4
  .IX Item "-mdivide-traps"
  .PD 0
! .IP \fB\-mdivide\-breaks\fR 4
  .IX Item "-mdivide-breaks"
  .PD
! MIPS systems check for division by zero by generating either a
  conditional trap or a break instruction.  Using traps results in
! smaller code, but is only supported on MIPS II and later.  Also, some
  versions of the Linux kernel have a bug that prevents trap from
  generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
  allow conditional traps on architectures that support them and
*************** allow conditional traps on architectures
*** 27939,27984 ****
  .Sp
  The default is usually \fB\-mdivide\-traps\fR, but this can be
  overridden at configure time using \fB\-\-with\-divide=breaks\fR.
! Divide-by-zero checks can be completely disabled using
  \&\fB\-mno\-check\-zero\-division\fR.
! .IP "\fB\-mload\-store\-pairs\fR" 4
  .IX Item "-mload-store-pairs"
  .PD 0
! .IP "\fB\-mno\-load\-store\-pairs\fR" 4
  .IX Item "-mno-load-store-pairs"
  .PD
  Enable (disable) an optimization that pairs consecutive load or store
  instructions to enable load/store bonding.  This option is enabled by
  default but only takes effect when the selected architecture is known
  to support bonding.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
! .IP "\fB\-munaligned\-access\fR" 4
  .IX Item "-munaligned-access"
! .IP "\fB\-mno\-unaligned\-access\fR" 4
  .IX Item "-mno-unaligned-access"
  .PD
! Disable (enable) direct unaligned access for \s-1MIPS\s0 Release 6.
! MIPSr6 requires load/store unaligned-access support, by hardware or
  trap&emulate.  So \fB\-mstrict\-align\fR may be needed by kernel.  The
  options \fB\-munaligned\-access\fR and \fB\-mno\-unaligned\-access\fR
! are obsoleted, and only for backward-compatible.
! .IP "\fB\-mmemcpy\fR" 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP "\fB\-mno\-memcpy\fR" 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non-trivial block
! moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
! most constant-sized copies.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
--- 27874,27919 ----
  .Sp
  The default is usually \fB\-mdivide\-traps\fR, but this can be
  overridden at configure time using \fB\-\-with\-divide=breaks\fR.
! Divide\-by\-zero checks can be completely disabled using
  \&\fB\-mno\-check\-zero\-division\fR.
! .IP \fB\-mload\-store\-pairs\fR 4
  .IX Item "-mload-store-pairs"
  .PD 0
! .IP \fB\-mno\-load\-store\-pairs\fR 4
  .IX Item "-mno-load-store-pairs"
  .PD
  Enable (disable) an optimization that pairs consecutive load or store
  instructions to enable load/store bonding.  This option is enabled by
  default but only takes effect when the selected architecture is known
  to support bonding.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
! .IP \fB\-munaligned\-access\fR 4
  .IX Item "-munaligned-access"
! .IP \fB\-mno\-unaligned\-access\fR 4
  .IX Item "-mno-unaligned-access"
  .PD
! Disable (enable) direct unaligned access for MIPS Release 6.
! MIPSr6 requires load/store unaligned\-access support, by hardware or
  trap&emulate.  So \fB\-mstrict\-align\fR may be needed by kernel.  The
  options \fB\-munaligned\-access\fR and \fB\-mno\-unaligned\-access\fR
! are obsoleted, and only for backward\-compatible.
! .IP \fB\-mmemcpy\fR 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP \fB\-mno\-memcpy\fR 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non\-trivial block
! moves.  The default is \fB\-mno\-memcpy\fR, which allows GCC to inline
! most constant\-sized copies.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
*************** and callee to be in the same 256 megabyt
*** 27987,28095 ****
  .Sp
  This option has no effect on abicalls code.  The default is
  \&\fB\-mno\-long\-calls\fR.
! .IP "\fB\-mmad\fR" 4
  .IX Item "-mmad"
  .PD 0
! .IP "\fB\-mno\-mad\fR" 4
  .IX Item "-mno-mad"
  .PD
  Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
! instructions, as provided by the R4650 \s-1ISA.\s0
! .IP "\fB\-mimadd\fR" 4
  .IX Item "-mimadd"
  .PD 0
! .IP "\fB\-mno\-imadd\fR" 4
  .IX Item "-mno-imadd"
  .PD
  Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
  instructions.  The default is \fB\-mimadd\fR on architectures
  that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
  architecture where it was found to generate slower code.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Enable (disable) use of the floating-point multiply-accumulate
  instructions, when they are available.  The default is
  \&\fB\-mfused\-madd\fR.
  .Sp
! On the R8000 \s-1CPU\s0 when multiply-accumulate instructions are used,
  the intermediate product is calculated to infinite precision
! and is not subject to the \s-1FCSR\s0 Flush to Zero bit.  This may be
  undesirable in some circumstances.  On other processors the result
  is numerically identical to the equivalent computation using
  separate multiply, add, subtract and negate instructions.
! .IP "\fB\-nocpp\fR" 4
  .IX Item "-nocpp"
! Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
  assembler files (with a \fB.s\fR suffix) when assembling them.
! .IP "\fB\-mfix\-24k\fR" 4
  .IX Item "-mfix-24k"
  .PD 0
! .IP "\fB\-mno\-fix\-24k\fR" 4
  .IX Item "-mno-fix-24k"
  .PD
  Work around the 24K E48 (lost data on stores during refill) errata.
! The workarounds are implemented by the assembler rather than by \s-1GCC.\s0
! .IP "\fB\-mfix\-r4000\fR" 4
  .IX Item "-mfix-r4000"
  .PD 0
! .IP "\fB\-mno\-fix\-r4000\fR" 4
  .IX Item "-mno-fix-r4000"
  .PD
! Work around certain R4000 \s-1CPU\s0 errata:
  .RS 4
! .IP "\-" 4
! A double-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
! .IP "\-" 4
! A double-word or a variable shift may give an incorrect result if executed
  while an integer multiplication is in progress.
! .IP "\-" 4
  An integer division may give an incorrect result if started in a delay slot
  of a taken branch or a jump.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfix\-r4400\fR" 4
  .IX Item "-mfix-r4400"
  .PD 0
! .IP "\fB\-mno\-fix\-r4400\fR" 4
  .IX Item "-mno-fix-r4400"
  .PD
! Work around certain R4400 \s-1CPU\s0 errata:
  .RS 4
! .IP "\-" 4
! A double-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfix\-r10000\fR" 4
  .IX Item "-mfix-r10000"
  .PD 0
! .IP "\fB\-mno\-fix\-r10000\fR" 4
  .IX Item "-mno-fix-r10000"
  .PD
  Work around certain R10000 errata:
  .RS 4
! .IP "\-" 4
  \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
  prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
  .RE
  .RS 4
  .Sp
  This option can only be used if the target architecture supports
! branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
  \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
  otherwise.
  .RE
! .IP "\fB\-mfix\-r5900\fR" 4
  .IX Item "-mfix-r5900"
  .PD 0
! .IP "\fB\-mno\-fix\-r5900\fR" 4
  .IX Item "-mno-fix-r5900"
  .PD
  Do not attempt to schedule the preceding instruction into the delay slot
--- 27922,28030 ----
  .Sp
  This option has no effect on abicalls code.  The default is
  \&\fB\-mno\-long\-calls\fR.
! .IP \fB\-mmad\fR 4
  .IX Item "-mmad"
  .PD 0
! .IP \fB\-mno\-mad\fR 4
  .IX Item "-mno-mad"
  .PD
  Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
! instructions, as provided by the R4650 ISA.
! .IP \fB\-mimadd\fR 4
  .IX Item "-mimadd"
  .PD 0
! .IP \fB\-mno\-imadd\fR 4
  .IX Item "-mno-imadd"
  .PD
  Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
  instructions.  The default is \fB\-mimadd\fR on architectures
  that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
  architecture where it was found to generate slower code.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Enable (disable) use of the floating\-point multiply\-accumulate
  instructions, when they are available.  The default is
  \&\fB\-mfused\-madd\fR.
  .Sp
! On the R8000 CPU when multiply\-accumulate instructions are used,
  the intermediate product is calculated to infinite precision
! and is not subject to the FCSR Flush to Zero bit.  This may be
  undesirable in some circumstances.  On other processors the result
  is numerically identical to the equivalent computation using
  separate multiply, add, subtract and negate instructions.
! .IP \fB\-nocpp\fR 4
  .IX Item "-nocpp"
! Tell the MIPS assembler to not run its preprocessor over user
  assembler files (with a \fB.s\fR suffix) when assembling them.
! .IP \fB\-mfix\-24k\fR 4
  .IX Item "-mfix-24k"
  .PD 0
! .IP \fB\-mno\-fix\-24k\fR 4
  .IX Item "-mno-fix-24k"
  .PD
  Work around the 24K E48 (lost data on stores during refill) errata.
! The workarounds are implemented by the assembler rather than by GCC.
! .IP \fB\-mfix\-r4000\fR 4
  .IX Item "-mfix-r4000"
  .PD 0
! .IP \fB\-mno\-fix\-r4000\fR 4
  .IX Item "-mno-fix-r4000"
  .PD
! Work around certain R4000 CPU errata:
  .RS 4
! .IP \- 4
! A double\-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
! .IP \- 4
! A double\-word or a variable shift may give an incorrect result if executed
  while an integer multiplication is in progress.
! .IP \- 4
  An integer division may give an incorrect result if started in a delay slot
  of a taken branch or a jump.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfix\-r4400\fR 4
  .IX Item "-mfix-r4400"
  .PD 0
! .IP \fB\-mno\-fix\-r4400\fR 4
  .IX Item "-mno-fix-r4400"
  .PD
! Work around certain R4400 CPU errata:
  .RS 4
! .IP \- 4
! A double\-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfix\-r10000\fR 4
  .IX Item "-mfix-r10000"
  .PD 0
! .IP \fB\-mno\-fix\-r10000\fR 4
  .IX Item "-mno-fix-r10000"
  .PD
  Work around certain R10000 errata:
  .RS 4
! .IP \- 4
  \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
  prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
  .RE
  .RS 4
  .Sp
  This option can only be used if the target architecture supports
! branch\-likely instructions.  \fB\-mfix\-r10000\fR is the default when
  \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
  otherwise.
  .RE
! .IP \fB\-mfix\-r5900\fR 4
  .IX Item "-mfix-r5900"
  .PD 0
! .IP \fB\-mno\-fix\-r5900\fR 4
  .IX Item "-mno-fix-r5900"
  .PD
  Do not attempt to schedule the preceding instruction into the delay slot
*************** of a branch instruction placed at the en
*** 28097,28122 ****
  instructions or fewer and always schedule a \f(CW\*(C`nop\*(C'\fR instruction there
  instead.  The short loop bug under certain conditions causes loops to
  execute only once or twice, due to a hardware bug in the R5900 chip.  The
! workaround is implemented by the assembler rather than by \s-1GCC.\s0
! .IP "\fB\-mfix\-rm7000\fR" 4
  .IX Item "-mfix-rm7000"
  .PD 0
! .IP "\fB\-mno\-fix\-rm7000\fR" 4
  .IX Item "-mno-fix-rm7000"
  .PD
! Work around the \s-1RM7000\s0 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by \s-1GCC.\s0
! .IP "\fB\-mfix\-vr4120\fR" 4
  .IX Item "-mfix-vr4120"
  .PD 0
! .IP "\fB\-mno\-fix\-vr4120\fR" 4
  .IX Item "-mno-fix-vr4120"
  .PD
! Work around certain \s-1VR4120\s0 errata:
  .RS 4
! .IP "\-" 4
  \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
! .IP "\-" 4
  \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
  of the operands is negative.
  .RE
--- 28032,28057 ----
  instructions or fewer and always schedule a \f(CW\*(C`nop\*(C'\fR instruction there
  instead.  The short loop bug under certain conditions causes loops to
  execute only once or twice, due to a hardware bug in the R5900 chip.  The
! workaround is implemented by the assembler rather than by GCC.
! .IP \fB\-mfix\-rm7000\fR 4
  .IX Item "-mfix-rm7000"
  .PD 0
! .IP \fB\-mno\-fix\-rm7000\fR 4
  .IX Item "-mno-fix-rm7000"
  .PD
! Work around the RM7000 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by GCC.
! .IP \fB\-mfix\-vr4120\fR 4
  .IX Item "-mfix-vr4120"
  .PD 0
! .IP \fB\-mno\-fix\-vr4120\fR 4
  .IX Item "-mno-fix-vr4120"
  .PD
! Work around certain VR4120 errata:
  .RS 4
! .IP \- 4
  \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
! .IP \- 4
  \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
  of the operands is negative.
  .RE
*************** The workarounds for the division errata
*** 28126,28189 ****
  \&\fIlibgcc.a\fR.  At present, these functions are only provided by
  the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
  .Sp
! Other \s-1VR4120\s0 errata require a \s-1NOP\s0 to be inserted between certain pairs of
! instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
  .RE
! .IP "\fB\-mfix\-vr4130\fR" 4
  .IX Item "-mfix-vr4130"
! Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by \s-1GCC,\s0
! although \s-1GCC\s0 avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
! \&\s-1VR4130\s0 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
  instructions are available instead.
! .IP "\fB\-mfix\-sb1\fR" 4
  .IX Item "-mfix-sb1"
  .PD 0
! .IP "\fB\-mno\-fix\-sb1\fR" 4
  .IX Item "-mno-fix-sb1"
  .PD
! Work around certain \s-1SB\-1 CPU\s0 core errata.
! (This flag currently works around the \s-1SB\-1\s0 revision 2
! \&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
! .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
  .IX Item "-mr10k-cache-barrier=setting"
! Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
  side effects of speculation on R10K processors.
  .Sp
  In common with many processors, the R10K tries to predict the outcome
  of a conditional branch and speculatively executes instructions from
! the \*(L"taken\*(R" branch.  It later aborts these instructions if the
  predicted outcome is wrong.  However, on the R10K, even aborted
  instructions can have side effects.
  .Sp
  This problem only affects kernel stores and, depending on the system,
! kernel loads.  As an example, a speculatively-executed store may load
  the target memory into cache and mark the cache line as dirty, even if
! the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
! same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
! data overwrites the DMA-ed data.  See the R10K processor manual
  for a full description, including other potential problems.
  .Sp
  One workaround is to insert cache barrier instructions before every memory
  access that might be speculatively executed and that might have side
  effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
! controls \s-1GCC\s0's implementation of this workaround.  It assumes that
  aborted accesses to any byte in the following regions does not have
  side effects:
  .RS 4
! .IP "1." 4
  .IX Item "1."
! the memory occupied by the current function's stack frame;
! .IP "2." 4
  .IX Item "2."
  the memory occupied by an incoming stack argument;
! .IP "3." 4
  .IX Item "3."
! the memory occupied by an object with a link-time-constant address.
  .RE
  .RS 4
  .Sp
! It is the kernel's responsibility to ensure that speculative
  accesses to these regions are indeed safe.
  .Sp
  If the input program contains a function declaration such as:
--- 28061,28124 ----
  \&\fIlibgcc.a\fR.  At present, these functions are only provided by
  the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
  .Sp
! Other VR4120 errata require a NOP to be inserted between certain pairs of
! instructions.  These errata are handled by the assembler, not by GCC itself.
  .RE
! .IP \fB\-mfix\-vr4130\fR 4
  .IX Item "-mfix-vr4130"
! Work around the VR4130 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by GCC,
! although GCC avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
! VR4130 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
  instructions are available instead.
! .IP \fB\-mfix\-sb1\fR 4
  .IX Item "-mfix-sb1"
  .PD 0
! .IP \fB\-mno\-fix\-sb1\fR 4
  .IX Item "-mno-fix-sb1"
  .PD
! Work around certain SB\-1 CPU core errata.
! (This flag currently works around the SB\-1 revision 2
! "F1" and "F2" floating\-point errata.)
! .IP \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR 4
  .IX Item "-mr10k-cache-barrier=setting"
! Specify whether GCC should insert cache barriers to avoid the
  side effects of speculation on R10K processors.
  .Sp
  In common with many processors, the R10K tries to predict the outcome
  of a conditional branch and speculatively executes instructions from
! the "taken" branch.  It later aborts these instructions if the
  predicted outcome is wrong.  However, on the R10K, even aborted
  instructions can have side effects.
  .Sp
  This problem only affects kernel stores and, depending on the system,
! kernel loads.  As an example, a speculatively\-executed store may load
  the target memory into cache and mark the cache line as dirty, even if
! the store itself is later aborted.  If a DMA operation writes to the
! same area of memory before the "dirty" line is flushed, the cached
! data overwrites the DMA\-ed data.  See the R10K processor manual
  for a full description, including other potential problems.
  .Sp
  One workaround is to insert cache barrier instructions before every memory
  access that might be speculatively executed and that might have side
  effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
! controls GCC\*(Aqs implementation of this workaround.  It assumes that
  aborted accesses to any byte in the following regions does not have
  side effects:
  .RS 4
! .IP 1. 4
  .IX Item "1."
! the memory occupied by the current function\*(Aqs stack frame;
! .IP 2. 4
  .IX Item "2."
  the memory occupied by an incoming stack argument;
! .IP 3. 4
  .IX Item "3."
! the memory occupied by an object with a link\-time\-constant address.
  .RE
  .RS 4
  .Sp
! It is the kernel\*(Aqs responsibility to ensure that speculative
  accesses to these regions are indeed safe.
  .Sp
  If the input program contains a function declaration such as:
*************** If the input program contains a function
*** 28193,28222 ****
  .Ve
  .Sp
  then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
! \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
! restriction for functions it compiles itself.  It expects non-GCC
! functions (such as hand-written assembly code) to do the same.
  .Sp
  The option has three forms:
! .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
  .IX Item "-mr10k-cache-barrier=load-store"
  Insert a cache barrier before a load or store that might be
  speculatively executed and that might have side effects even
  if aborted.
! .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
  .IX Item "-mr10k-cache-barrier=store"
  Insert a cache barrier before a store that might be speculatively
  executed and that might have side effects even if aborted.
! .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
  .IX Item "-mr10k-cache-barrier=none"
  Disable the insertion of cache barriers.  This is the default setting.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
  .IX Item "-mflush-func=func"
  .PD 0
! .IP "\fB\-mno\-flush\-func\fR" 4
  .IX Item "-mno-flush-func"
  .PD
  Specifies the function to call to flush the I and D caches, or to not
--- 28128,28157 ----
  .Ve
  .Sp
  then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
! \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  GCC honors this
! restriction for functions it compiles itself.  It expects non\-GCC
! functions (such as hand\-written assembly code) to do the same.
  .Sp
  The option has three forms:
! .IP \fB\-mr10k\-cache\-barrier=load\-store\fR 4
  .IX Item "-mr10k-cache-barrier=load-store"
  Insert a cache barrier before a load or store that might be
  speculatively executed and that might have side effects even
  if aborted.
! .IP \fB\-mr10k\-cache\-barrier=store\fR 4
  .IX Item "-mr10k-cache-barrier=store"
  Insert a cache barrier before a store that might be speculatively
  executed and that might have side effects even if aborted.
! .IP \fB\-mr10k\-cache\-barrier=none\fR 4
  .IX Item "-mr10k-cache-barrier=none"
  Disable the insertion of cache barriers.  This is the default setting.
  .RE
  .RS 4
  .RE
! .IP \fB\-mflush\-func=\fR\fIfunc\fR 4
  .IX Item "-mflush-func=func"
  .PD 0
! .IP \fB\-mno\-flush\-func\fR 4
  .IX Item "-mno-flush-func"
  .PD
  Specifies the function to call to flush the I and D caches, or to not
*************** call any such function.  If called, the
*** 28224,28256 ****
  arguments as the common \f(CW\*(C`_flush_func\*(C'\fR, that is, the address of the
  memory range for which the cache is being flushed, the size of the
  memory range, and the number 3 (to flush both caches).  The default
! depends on the target \s-1GCC\s0 was configured for, but commonly is either
  \&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
! .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.  A zero cost redundantly selects
  the default, which is based on the \fB\-mtune\fR setting.
! .IP "\fB\-mbranch\-likely\fR" 4
  .IX Item "-mbranch-likely"
  .PD 0
! .IP "\fB\-mno\-branch\-likely\fR" 4
  .IX Item "-mno-branch-likely"
  .PD
  Enable or disable use of Branch Likely instructions, regardless of the
  default for the selected architecture.  By default, Branch Likely
  instructions may be generated if they are supported by the selected
! architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
  and processors that implement those architectures; for those, Branch
! Likely instructions are not be generated by default because the \s-1MIPS32\s0
! and \s-1MIPS64\s0 architectures specifically deprecate their use.
! .IP "\fB\-mcompact\-branches=never\fR" 4
  .IX Item "-mcompact-branches=never"
  .PD 0
! .IP "\fB\-mcompact\-branches=optimal\fR" 4
  .IX Item "-mcompact-branches=optimal"
! .IP "\fB\-mcompact\-branches=always\fR" 4
  .IX Item "-mcompact-branches=always"
  .PD
  These options control which form of branches will be generated.  The
--- 28159,28191 ----
  arguments as the common \f(CW\*(C`_flush_func\*(C'\fR, that is, the address of the
  memory range for which the cache is being flushed, the size of the
  memory range, and the number 3 (to flush both caches).  The default
! depends on the target GCC was configured for, but commonly is either
  \&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
! .IP \fB\-mbranch\-cost=\fR\fInum\fR 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR "simple" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.  A zero cost redundantly selects
  the default, which is based on the \fB\-mtune\fR setting.
! .IP \fB\-mbranch\-likely\fR 4
  .IX Item "-mbranch-likely"
  .PD 0
! .IP \fB\-mno\-branch\-likely\fR 4
  .IX Item "-mno-branch-likely"
  .PD
  Enable or disable use of Branch Likely instructions, regardless of the
  default for the selected architecture.  By default, Branch Likely
  instructions may be generated if they are supported by the selected
! architecture.  An exception is for the MIPS32 and MIPS64 architectures
  and processors that implement those architectures; for those, Branch
! Likely instructions are not be generated by default because the MIPS32
! and MIPS64 architectures specifically deprecate their use.
! .IP \fB\-mcompact\-branches=never\fR 4
  .IX Item "-mcompact-branches=never"
  .PD 0
! .IP \fB\-mcompact\-branches=optimal\fR 4
  .IX Item "-mcompact-branches=optimal"
! .IP \fB\-mcompact\-branches=always\fR 4
  .IX Item "-mcompact-branches=always"
  .PD
  These options control which form of branches will be generated.  The
*************** The \fB\-mcompact\-branches=never\fR opt
*** 28260,28266 ****
  instructions will never be generated.
  .Sp
  The \fB\-mcompact\-branches=always\fR option ensures that a compact
! branch instruction will be generated if available for \s-1MIPS\s0 Release 6 onwards.
  If a compact branch instruction is not available (or pre\-R6),
  a delay slot form of the branch will be used instead.
  .Sp
--- 28195,28201 ----
  instructions will never be generated.
  .Sp
  The \fB\-mcompact\-branches=always\fR option ensures that a compact
! branch instruction will be generated if available for MIPS Release 6 onwards.
  If a compact branch instruction is not available (or pre\-R6),
  a delay slot form of the branch will be used instead.
  .Sp
*************** The behaviour for MIPS16/microMIPS may c
*** 28269,28309 ****
  since they do have some compact branch instructions.
  .Sp
  The \fB\-mcompact\-branches=optimal\fR option will cause a delay slot
! branch to be used if one is available in the current \s-1ISA\s0 and the delay
  slot is successfully filled.  If the delay slot is not filled, a compact
  branch will be chosen if one is available.
! .IP "\fB\-mfp\-exceptions\fR" 4
  .IX Item "-mfp-exceptions"
  .PD 0
! .IP "\fB\-mno\-fp\-exceptions\fR" 4
  .IX Item "-mno-fp-exceptions"
  .PD
! Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how
! \&\s-1FP\s0 instructions are scheduled for some processors.
! The default is that \s-1FP\s0 exceptions are
  enabled.
  .Sp
! For instance, on the \s-1SB\-1,\s0 if \s-1FP\s0 exceptions are disabled, and we are emitting
! 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
! \&\s-1FP\s0 pipe.
! .IP "\fB\-mvr4130\-align\fR" 4
  .IX Item "-mvr4130-align"
  .PD 0
! .IP "\fB\-mno\-vr4130\-align\fR" 4
  .IX Item "-mno-vr4130-align"
  .PD
! The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
  instructions together if the first one is 8\-byte aligned.  When this
! option is enabled, \s-1GCC\s0 aligns pairs of instructions that it
  thinks should execute in parallel.
  .Sp
! This option only has an effect when optimizing for the \s-1VR4130.\s0
  It normally makes code faster, but at the expense of making it bigger.
  It is enabled by default at optimization level \fB\-O3\fR.
! .IP "\fB\-msynci\fR" 4
  .IX Item "-msynci"
  .PD 0
! .IP "\fB\-mno\-synci\fR" 4
  .IX Item "-mno-synci"
  .PD
  Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
--- 28204,28244 ----
  since they do have some compact branch instructions.
  .Sp
  The \fB\-mcompact\-branches=optimal\fR option will cause a delay slot
! branch to be used if one is available in the current ISA and the delay
  slot is successfully filled.  If the delay slot is not filled, a compact
  branch will be chosen if one is available.
! .IP \fB\-mfp\-exceptions\fR 4
  .IX Item "-mfp-exceptions"
  .PD 0
! .IP \fB\-mno\-fp\-exceptions\fR 4
  .IX Item "-mno-fp-exceptions"
  .PD
! Specifies whether FP exceptions are enabled.  This affects how
! FP instructions are scheduled for some processors.
! The default is that FP exceptions are
  enabled.
  .Sp
! For instance, on the SB\-1, if FP exceptions are disabled, and we are emitting
! 64\-bit code, then we can use both FP pipes.  Otherwise, we can only use one
! FP pipe.
! .IP \fB\-mvr4130\-align\fR 4
  .IX Item "-mvr4130-align"
  .PD 0
! .IP \fB\-mno\-vr4130\-align\fR 4
  .IX Item "-mno-vr4130-align"
  .PD
! The VR4130 pipeline is two\-way superscalar, but can only issue two
  instructions together if the first one is 8\-byte aligned.  When this
! option is enabled, GCC aligns pairs of instructions that it
  thinks should execute in parallel.
  .Sp
! This option only has an effect when optimizing for the VR4130.
  It normally makes code faster, but at the expense of making it bigger.
  It is enabled by default at optimization level \fB\-O3\fR.
! .IP \fB\-msynci\fR 4
  .IX Item "-msynci"
  .PD 0
! .IP \fB\-mno\-synci\fR 4
  .IX Item "-mno-synci"
  .PD
  Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
*************** enabled) are generated when \f(CW\*(C`_\
*** 28312,28464 ****
  compiled.
  .Sp
  This option defaults to \fB\-mno\-synci\fR, but the default can be
! overridden by configuring \s-1GCC\s0 with \fB\-\-with\-synci\fR.
  .Sp
  When compiling code for single processor systems, it is generally safe
! to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
  does not invalidate the instruction caches on all cores and may lead
  to undefined behavior.
! .IP "\fB\-mrelax\-pic\-calls\fR" 4
  .IX Item "-mrelax-pic-calls"
  .PD 0
! .IP "\fB\-mno\-relax\-pic\-calls\fR" 4
  .IX Item "-mno-relax-pic-calls"
  .PD
! Try to turn \s-1PIC\s0 calls that are normally dispatched via register
  \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
  resolve the destination at link time and if the destination is within
  range for a direct call.
  .Sp
! \&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
  an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
  directive and \fB\-mexplicit\-relocs\fR is in effect.  With
  \&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
  assembler and the linker alone without help from the compiler.
! .IP "\fB\-mmcount\-ra\-address\fR" 4
  .IX Item "-mmcount-ra-address"
  .PD 0
! .IP "\fB\-mno\-mcount\-ra\-address\fR" 4
  .IX Item "-mno-mcount-ra-address"
  .PD
  Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
! calling function's return address.  When enabled, this option extends
! the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
  parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
  \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
  doing both of the following:
  .RS 4
! .IP "*" 4
  Returning the new address in register \f(CW$31\fR.
! .IP "*" 4
! Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
! if \fIra-address\fR is nonnull.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mno\-mcount\-ra\-address\fR.
  .RE
! .IP "\fB\-mframe\-header\-opt\fR" 4
  .IX Item "-mframe-header-opt"
  .PD 0
! .IP "\fB\-mno\-frame\-header\-opt\fR" 4
  .IX Item "-mno-frame-header-opt"
  .PD
! Enable (disable) frame header optimization in the o32 \s-1ABI.\s0  When using the
! o32 \s-1ABI,\s0 calling functions will allocate 16 bytes on the stack for the called
  function to write out register arguments.  When enabled, this optimization
  will suppress the allocation of the frame header if it can be determined that
  it is unused.
  .Sp
  This optimization is off by default at all optimization levels.
! .IP "\fB\-mlxc1\-sxc1\fR" 4
  .IX Item "-mlxc1-sxc1"
  .PD 0
! .IP "\fB\-mno\-lxc1\-sxc1\fR" 4
  .IX Item "-mno-lxc1-sxc1"
  .PD
  When applicable, enable (disable) the generation of \f(CW\*(C`lwxc1\*(C'\fR,
  \&\f(CW\*(C`swxc1\*(C'\fR, \f(CW\*(C`ldxc1\*(C'\fR, \f(CW\*(C`sdxc1\*(C'\fR instructions.  Enabled by default.
! .IP "\fB\-mmadd4\fR" 4
  .IX Item "-mmadd4"
  .PD 0
! .IP "\fB\-mno\-madd4\fR" 4
  .IX Item "-mno-madd4"
  .PD
  When applicable, enable (disable) the generation of 4\-operand \f(CW\*(C`madd.s\*(C'\fR,
  \&\f(CW\*(C`madd.d\*(C'\fR and related instructions.  Enabled by default.
  .PP
! \fI\s-1MMIX\s0 Options\fR
  .IX Subsection "MMIX Options"
  .PP
! These options are defined for the \s-1MMIX:\s0
! .IP "\fB\-mlibfuncs\fR" 4
  .IX Item "-mlibfuncs"
  .PD 0
! .IP "\fB\-mno\-libfuncs\fR" 4
  .IX Item "-mno-libfuncs"
  .PD
  Specify that intrinsic library functions are being compiled, passing all
  values in registers, no matter the size.
! .IP "\fB\-mepsilon\fR" 4
  .IX Item "-mepsilon"
  .PD 0
! .IP "\fB\-mno\-epsilon\fR" 4
  .IX Item "-mno-epsilon"
  .PD
! Generate floating-point comparison instructions that compare with respect
  to the \f(CW\*(C`rE\*(C'\fR epsilon register.
! .IP "\fB\-mabi=mmixware\fR" 4
  .IX Item "-mabi=mmixware"
  .PD 0
! .IP "\fB\-mabi=gnu\fR" 4
  .IX Item "-mabi=gnu"
  .PD
  Generate code that passes function parameters and return values that (in
  the called function) are seen as registers \f(CW$0\fR and up, as opposed to
! the \s-1GNU ABI\s0 which uses global registers \f(CW$231\fR and up.
! .IP "\fB\-mzero\-extend\fR" 4
  .IX Item "-mzero-extend"
  .PD 0
! .IP "\fB\-mno\-zero\-extend\fR" 4
  .IX Item "-mno-zero-extend"
  .PD
  When reading data from memory in sizes shorter than 64 bits, use (do not
! use) zero-extending load instructions by default, rather than
! sign-extending ones.
! .IP "\fB\-mknuthdiv\fR" 4
  .IX Item "-mknuthdiv"
  .PD 0
! .IP "\fB\-mno\-knuthdiv\fR" 4
  .IX Item "-mno-knuthdiv"
  .PD
  Make the result of a division yielding a remainder have the same sign as
  the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
  remainder follows the sign of the dividend.  Both methods are
  arithmetically valid, the latter being almost exclusively used.
! .IP "\fB\-mtoplevel\-symbols\fR" 4
  .IX Item "-mtoplevel-symbols"
  .PD 0
! .IP "\fB\-mno\-toplevel\-symbols\fR" 4
  .IX Item "-mno-toplevel-symbols"
  .PD
  Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
  code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
! .IP "\fB\-melf\fR" 4
  .IX Item "-melf"
! Generate an executable in the \s-1ELF\s0 format, rather than the default
  \&\fBmmo\fR format used by the \fBmmix\fR simulator.
! .IP "\fB\-mbranch\-predict\fR" 4
  .IX Item "-mbranch-predict"
  .PD 0
! .IP "\fB\-mno\-branch\-predict\fR" 4
  .IX Item "-mno-branch-predict"
  .PD
! Use (do not use) the probable-branch instructions, when static branch
  prediction indicates a probable branch.
! .IP "\fB\-mbase\-addresses\fR" 4
  .IX Item "-mbase-addresses"
  .PD 0
! .IP "\fB\-mno\-base\-addresses\fR" 4
  .IX Item "-mno-base-addresses"
  .PD
  Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
--- 28247,28399 ----
  compiled.
  .Sp
  This option defaults to \fB\-mno\-synci\fR, but the default can be
! overridden by configuring GCC with \fB\-\-with\-synci\fR.
  .Sp
  When compiling code for single processor systems, it is generally safe
! to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi\-core (SMP) systems, it
  does not invalidate the instruction caches on all cores and may lead
  to undefined behavior.
! .IP \fB\-mrelax\-pic\-calls\fR 4
  .IX Item "-mrelax-pic-calls"
  .PD 0
! .IP \fB\-mno\-relax\-pic\-calls\fR 4
  .IX Item "-mno-relax-pic-calls"
  .PD
! Try to turn PIC calls that are normally dispatched via register
  \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
  resolve the destination at link time and if the destination is within
  range for a direct call.
  .Sp
! \&\fB\-mrelax\-pic\-calls\fR is the default if GCC was configured to use
  an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
  directive and \fB\-mexplicit\-relocs\fR is in effect.  With
  \&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
  assembler and the linker alone without help from the compiler.
! .IP \fB\-mmcount\-ra\-address\fR 4
  .IX Item "-mmcount-ra-address"
  .PD 0
! .IP \fB\-mno\-mcount\-ra\-address\fR 4
  .IX Item "-mno-mcount-ra-address"
  .PD
  Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
! calling function\*(Aqs return address.  When enabled, this option extends
! the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra\-address\fR
  parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
  \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
  doing both of the following:
  .RS 4
! .IP * 4
  Returning the new address in register \f(CW$31\fR.
! .IP * 4
! Storing the new address in \f(CW\*(C`*\fR\f(CIra\-address\fR\f(CW\*(C'\fR,
! if \fIra\-address\fR is nonnull.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mno\-mcount\-ra\-address\fR.
  .RE
! .IP \fB\-mframe\-header\-opt\fR 4
  .IX Item "-mframe-header-opt"
  .PD 0
! .IP \fB\-mno\-frame\-header\-opt\fR 4
  .IX Item "-mno-frame-header-opt"
  .PD
! Enable (disable) frame header optimization in the o32 ABI.  When using the
! o32 ABI, calling functions will allocate 16 bytes on the stack for the called
  function to write out register arguments.  When enabled, this optimization
  will suppress the allocation of the frame header if it can be determined that
  it is unused.
  .Sp
  This optimization is off by default at all optimization levels.
! .IP \fB\-mlxc1\-sxc1\fR 4
  .IX Item "-mlxc1-sxc1"
  .PD 0
! .IP \fB\-mno\-lxc1\-sxc1\fR 4
  .IX Item "-mno-lxc1-sxc1"
  .PD
  When applicable, enable (disable) the generation of \f(CW\*(C`lwxc1\*(C'\fR,
  \&\f(CW\*(C`swxc1\*(C'\fR, \f(CW\*(C`ldxc1\*(C'\fR, \f(CW\*(C`sdxc1\*(C'\fR instructions.  Enabled by default.
! .IP \fB\-mmadd4\fR 4
  .IX Item "-mmadd4"
  .PD 0
! .IP \fB\-mno\-madd4\fR 4
  .IX Item "-mno-madd4"
  .PD
  When applicable, enable (disable) the generation of 4\-operand \f(CW\*(C`madd.s\*(C'\fR,
  \&\f(CW\*(C`madd.d\*(C'\fR and related instructions.  Enabled by default.
  .PP
! \fIMMIX Options\fR
  .IX Subsection "MMIX Options"
  .PP
! These options are defined for the MMIX:
! .IP \fB\-mlibfuncs\fR 4
  .IX Item "-mlibfuncs"
  .PD 0
! .IP \fB\-mno\-libfuncs\fR 4
  .IX Item "-mno-libfuncs"
  .PD
  Specify that intrinsic library functions are being compiled, passing all
  values in registers, no matter the size.
! .IP \fB\-mepsilon\fR 4
  .IX Item "-mepsilon"
  .PD 0
! .IP \fB\-mno\-epsilon\fR 4
  .IX Item "-mno-epsilon"
  .PD
! Generate floating\-point comparison instructions that compare with respect
  to the \f(CW\*(C`rE\*(C'\fR epsilon register.
! .IP \fB\-mabi=mmixware\fR 4
  .IX Item "-mabi=mmixware"
  .PD 0
! .IP \fB\-mabi=gnu\fR 4
  .IX Item "-mabi=gnu"
  .PD
  Generate code that passes function parameters and return values that (in
  the called function) are seen as registers \f(CW$0\fR and up, as opposed to
! the GNU ABI which uses global registers \f(CW$231\fR and up.
! .IP \fB\-mzero\-extend\fR 4
  .IX Item "-mzero-extend"
  .PD 0
! .IP \fB\-mno\-zero\-extend\fR 4
  .IX Item "-mno-zero-extend"
  .PD
  When reading data from memory in sizes shorter than 64 bits, use (do not
! use) zero\-extending load instructions by default, rather than
! sign\-extending ones.
! .IP \fB\-mknuthdiv\fR 4
  .IX Item "-mknuthdiv"
  .PD 0
! .IP \fB\-mno\-knuthdiv\fR 4
  .IX Item "-mno-knuthdiv"
  .PD
  Make the result of a division yielding a remainder have the same sign as
  the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
  remainder follows the sign of the dividend.  Both methods are
  arithmetically valid, the latter being almost exclusively used.
! .IP \fB\-mtoplevel\-symbols\fR 4
  .IX Item "-mtoplevel-symbols"
  .PD 0
! .IP \fB\-mno\-toplevel\-symbols\fR 4
  .IX Item "-mno-toplevel-symbols"
  .PD
  Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
  code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
! .IP \fB\-melf\fR 4
  .IX Item "-melf"
! Generate an executable in the ELF format, rather than the default
  \&\fBmmo\fR format used by the \fBmmix\fR simulator.
! .IP \fB\-mbranch\-predict\fR 4
  .IX Item "-mbranch-predict"
  .PD 0
! .IP \fB\-mno\-branch\-predict\fR 4
  .IX Item "-mno-branch-predict"
  .PD
! Use (do not use) the probable\-branch instructions, when static branch
  prediction indicates a probable branch.
! .IP \fB\-mbase\-addresses\fR 4
  .IX Item "-mbase-addresses"
  .PD 0
! .IP \fB\-mno\-base\-addresses\fR 4
  .IX Item "-mno-base-addresses"
  .PD
  Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
*************** to 255 from the value held in the regist
*** 28469,28603 ****
  and fast code, but the number of different data items that can be
  addressed is limited.  This means that a program that uses lots of static
  data may require \fB\-mno\-base\-addresses\fR.
! .IP "\fB\-msingle\-exit\fR" 4
  .IX Item "-msingle-exit"
  .PD 0
! .IP "\fB\-mno\-single\-exit\fR" 4
  .IX Item "-mno-single-exit"
  .PD
  Force (do not force) generated code to have a single exit point in each
  function.
  .PP
! \fI\s-1MN10300\s0 Options\fR
  .IX Subsection "MN10300 Options"
  .PP
! These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
! .IP "\fB\-mmult\-bug\fR" 4
  .IX Item "-mmult-bug"
! Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
  processors.  This is the default.
! .IP "\fB\-mno\-mult\-bug\fR" 4
  .IX Item "-mno-mult-bug"
  Do not generate code to avoid bugs in the multiply instructions for the
! \&\s-1MN10300\s0 processors.
! .IP "\fB\-mam33\fR" 4
  .IX Item "-mam33"
! Generate code using features specific to the \s-1AM33\s0 processor.
! .IP "\fB\-mno\-am33\fR" 4
  .IX Item "-mno-am33"
! Do not generate code using features specific to the \s-1AM33\s0 processor.  This
  is the default.
! .IP "\fB\-mam33\-2\fR" 4
  .IX Item "-mam33-2"
! Generate code using features specific to the \s-1AM33/2.0\s0 processor.
! .IP "\fB\-mam34\fR" 4
  .IX Item "-mam34"
! Generate code using features specific to the \s-1AM34\s0 processor.
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Use the timing characteristics of the indicated \s-1CPU\s0 type when
  scheduling instructions.  This does not change the targeted processor
! type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
  \&\fBam33\-2\fR or \fBam34\fR.
! .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
  .IX Item "-mreturn-pointer-on-d0"
  When generating a function that returns a pointer, return the pointer
  in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
  only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
  result in errors.  Note that this option is on by default; use
  \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
! .IP "\fB\-mno\-crt0\fR" 4
  .IX Item "-mno-crt0"
! Do not link in the C run-time initialization object file.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Indicate to the linker that it should perform a relaxation optimization pass
  to shorten branches, calls and absolute memory addresses.  This option only
  has an effect when used on the command line for the final link step.
  .Sp
  This option makes symbolic debugging impossible.
! .IP "\fB\-mliw\fR" 4
  .IX Item "-mliw"
  Allow the compiler to generate \fILong Instruction Word\fR
! instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
! .IP "\fB\-mno\-liw\fR" 4
  .IX Item "-mno-liw"
  Do not allow the compiler to generate \fILong Instruction Word\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
! .IP "\fB\-msetlb\fR" 4
  .IX Item "-msetlb"
! Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
! instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
! .IP "\fB\-mno\-setlb\fR" 4
  .IX Item "-mno-setlb"
! Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
  .PP
  \fIMoxie Options\fR
  .IX Subsection "Moxie Options"
! .IP "\fB\-meb\fR" 4
  .IX Item "-meb"
! Generate big-endian code.  This is the default for \fBmoxie\-*\-*\fR
  configurations.
! .IP "\fB\-mel\fR" 4
  .IX Item "-mel"
! Generate little-endian code.
! .IP "\fB\-mmul.x\fR" 4
  .IX Item "-mmul.x"
  Generate mul.x and umul.x instructions.  This is the default for
  \&\fBmoxiebox\-*\-*\fR configurations.
! .IP "\fB\-mno\-crt0\fR" 4
  .IX Item "-mno-crt0"
! Do not link in the C run-time initialization object file.
  .PP
! \fI\s-1MSP430\s0 Options\fR
  .IX Subsection "MSP430 Options"
  .PP
! These options are defined for the \s-1MSP430:\s0
! .IP "\fB\-masm\-hex\fR" 4
  .IX Item "-masm-hex"
  Force assembly output to always use hex constants.  Normally such
  constants are signed decimals, but this option is available for
  testsuite and/or aesthetic purposes.
! .IP "\fB\-mmcu=\fR" 4
  .IX Item "-mmcu="
! Select the \s-1MCU\s0 to target.  This is used to create a C preprocessor
! symbol based upon the \s-1MCU\s0 name, converted to upper case and pre\- and
! post-fixed with \fB_\|_\fR.  This in turn is used by the
! \&\fImsp430.h\fR header file to select an MCU-specific supplementary
  header file.
  .Sp
! The option also sets the \s-1ISA\s0 to use.  If the \s-1MCU\s0 name is one that is
! known to only support the 430 \s-1ISA\s0 then that is selected, otherwise the
! 430X \s-1ISA\s0 is selected.  A generic \s-1MCU\s0 name of \fBmsp430\fR can also be
! used to select the 430 \s-1ISA.\s0  Similarly the generic \fBmsp430x\fR \s-1MCU\s0
! name selects the 430X \s-1ISA.\s0
  .Sp
! In addition an MCU-specific linker script is added to the linker
! command line.  The script's name is the name of the \s-1MCU\s0 with
  \&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
  command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
  cause the linker to search for a script called \fIxxx.ld\fR.
  .Sp
! The \s-1ISA\s0 and hardware multiply supported for the different MCUs is hard-coded
! into \s-1GCC.\s0  However, an external \fBdevices.csv\fR file can be used to
! extend device support beyond those that have been hard-coded.
  .Sp
! \&\s-1GCC\s0 searches for the \fBdevices.csv\fR file using the following methods in the
  given precedence order, where the first method takes precendence over the
  second which takes precedence over the third.
  .RS 4
--- 28404,28538 ----
  and fast code, but the number of different data items that can be
  addressed is limited.  This means that a program that uses lots of static
  data may require \fB\-mno\-base\-addresses\fR.
! .IP \fB\-msingle\-exit\fR 4
  .IX Item "-msingle-exit"
  .PD 0
! .IP \fB\-mno\-single\-exit\fR 4
  .IX Item "-mno-single-exit"
  .PD
  Force (do not force) generated code to have a single exit point in each
  function.
  .PP
! \fIMN10300 Options\fR
  .IX Subsection "MN10300 Options"
  .PP
! These \fB\-m\fR options are defined for Matsushita MN10300 architectures:
! .IP \fB\-mmult\-bug\fR 4
  .IX Item "-mmult-bug"
! Generate code to avoid bugs in the multiply instructions for the MN10300
  processors.  This is the default.
! .IP \fB\-mno\-mult\-bug\fR 4
  .IX Item "-mno-mult-bug"
  Do not generate code to avoid bugs in the multiply instructions for the
! MN10300 processors.
! .IP \fB\-mam33\fR 4
  .IX Item "-mam33"
! Generate code using features specific to the AM33 processor.
! .IP \fB\-mno\-am33\fR 4
  .IX Item "-mno-am33"
! Do not generate code using features specific to the AM33 processor.  This
  is the default.
! .IP \fB\-mam33\-2\fR 4
  .IX Item "-mam33-2"
! Generate code using features specific to the AM33/2.0 processor.
! .IP \fB\-mam34\fR 4
  .IX Item "-mam34"
! Generate code using features specific to the AM34 processor.
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Use the timing characteristics of the indicated CPU type when
  scheduling instructions.  This does not change the targeted processor
! type.  The CPU type must be one of \fBmn10300\fR, \fBam33\fR,
  \&\fBam33\-2\fR or \fBam34\fR.
! .IP \fB\-mreturn\-pointer\-on\-d0\fR 4
  .IX Item "-mreturn-pointer-on-d0"
  When generating a function that returns a pointer, return the pointer
  in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
  only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
  result in errors.  Note that this option is on by default; use
  \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
! .IP \fB\-mno\-crt0\fR 4
  .IX Item "-mno-crt0"
! Do not link in the C run\-time initialization object file.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Indicate to the linker that it should perform a relaxation optimization pass
  to shorten branches, calls and absolute memory addresses.  This option only
  has an effect when used on the command line for the final link step.
  .Sp
  This option makes symbolic debugging impossible.
! .IP \fB\-mliw\fR 4
  .IX Item "-mliw"
  Allow the compiler to generate \fILong Instruction Word\fR
! instructions if the target is the \fBAM33\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
! .IP \fB\-mno\-liw\fR 4
  .IX Item "-mno-liw"
  Do not allow the compiler to generate \fILong Instruction Word\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
! .IP \fB\-msetlb\fR 4
  .IX Item "-msetlb"
! Allow the compiler to generate the \fISETLB\fR and \fILcc\fR
! instructions if the target is the \fBAM33\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
! .IP \fB\-mno\-setlb\fR 4
  .IX Item "-mno-setlb"
! Do not allow the compiler to generate \fISETLB\fR or \fILcc\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
  .PP
  \fIMoxie Options\fR
  .IX Subsection "Moxie Options"
! .IP \fB\-meb\fR 4
  .IX Item "-meb"
! Generate big\-endian code.  This is the default for \fBmoxie\-*\-*\fR
  configurations.
! .IP \fB\-mel\fR 4
  .IX Item "-mel"
! Generate little\-endian code.
! .IP \fB\-mmul.x\fR 4
  .IX Item "-mmul.x"
  Generate mul.x and umul.x instructions.  This is the default for
  \&\fBmoxiebox\-*\-*\fR configurations.
! .IP \fB\-mno\-crt0\fR 4
  .IX Item "-mno-crt0"
! Do not link in the C run\-time initialization object file.
  .PP
! \fIMSP430 Options\fR
  .IX Subsection "MSP430 Options"
  .PP
! These options are defined for the MSP430:
! .IP \fB\-masm\-hex\fR 4
  .IX Item "-masm-hex"
  Force assembly output to always use hex constants.  Normally such
  constants are signed decimals, but this option is available for
  testsuite and/or aesthetic purposes.
! .IP \fB\-mmcu=\fR 4
  .IX Item "-mmcu="
! Select the MCU to target.  This is used to create a C preprocessor
! symbol based upon the MCU name, converted to upper case and pre\- and
! post\-fixed with \fB_\|_\fR.  This in turn is used by the
! \&\fImsp430.h\fR header file to select an MCU\-specific supplementary
  header file.
  .Sp
! The option also sets the ISA to use.  If the MCU name is one that is
! known to only support the 430 ISA then that is selected, otherwise the
! 430X ISA is selected.  A generic MCU name of \fBmsp430\fR can also be
! used to select the 430 ISA.  Similarly the generic \fBmsp430x\fR MCU
! name selects the 430X ISA.
  .Sp
! In addition an MCU\-specific linker script is added to the linker
! command line.  The script\*(Aqs name is the name of the MCU with
  \&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
  command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
  cause the linker to search for a script called \fIxxx.ld\fR.
  .Sp
! The ISA and hardware multiply supported for the different MCUs is hard\-coded
! into GCC.  However, an external \fBdevices.csv\fR file can be used to
! extend device support beyond those that have been hard\-coded.
  .Sp
! GCC searches for the \fBdevices.csv\fR file using the following methods in the
  given precedence order, where the first method takes precendence over the
  second which takes precedence over the third.
  .RS 4
*************** second which takes precedence over the t
*** 28606,28675 ****
  .IX Item "Include path specified with -I and -L"
  \&\fBdevices.csv\fR will be searched for in each of the directories specified by
  include paths and linker library search paths.
! .IP "Path specified by the environment variable \fB\s-1MSP430_GCC_INCLUDE_DIR\s0\fR" 4
  .IX Item "Path specified by the environment variable MSP430_GCC_INCLUDE_DIR"
  Define the value of the global environment variable
! \&\fB\s-1MSP430_GCC_INCLUDE_DIR\s0\fR
! to the full path to the directory containing devices.csv, and \s-1GCC\s0 will search
  this directory for devices.csv.  If devices.csv is found, this directory will
  also be registered as an include path, and linker library path.  Header files
  and linker scripts in this directory can therefore be used without manually
  specifying \f(CW\*(C`\-I\*(C'\fR and \f(CW\*(C`\-L\*(C'\fR on the command line.
  .IP "The \fBmsp430\-elf{,bare}/include/devices\fR directory" 4
  .IX Item "The msp430-elf{,bare}/include/devices directory"
! Finally, \s-1GCC\s0 will examine \fBmsp430\-elf{,bare}/include/devices\fR from the
  toolchain root directory.  This directory does not exist in a default
  installation, but if the user has created it and copied \fBdevices.csv\fR
! there, then the \s-1MCU\s0 data will be read.  As above, this directory will
  also be registered as an include path, and linker library path.
  .RE
  .RS 4
  .Sp
  If none of the above search methods find \fBdevices.csv\fR, then the
! hard-coded \s-1MCU\s0 data is used.
  .RE
! .IP "\fB\-mwarn\-mcu\fR" 4
  .IX Item "-mwarn-mcu"
  .PD 0
! .IP "\fB\-mno\-warn\-mcu\fR" 4
  .IX Item "-mno-warn-mcu"
  .PD
  This option enables or disables warnings about conflicts between the
! \&\s-1MCU\s0 name specified by the \fB\-mmcu\fR option and the \s-1ISA\s0 set by the
  \&\fB\-mcpu\fR option and/or the hardware multiply support set by the
  \&\fB\-mhwmult\fR option.  It also toggles warnings about unrecognized
! \&\s-1MCU\s0 names.  This option is on by default.
! .IP "\fB\-mcpu=\fR" 4
  .IX Item "-mcpu="
! Specifies the \s-1ISA\s0 to use.  Accepted values are \fBmsp430\fR,
  \&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
! \&\fB\-mmcu=\fR option should be used to select the \s-1ISA.\s0
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Link to the simulator runtime libraries and linker script.  Overrides
  any scripts that would be selected by the \fB\-mmcu=\fR option.
! .IP "\fB\-mlarge\fR" 4
  .IX Item "-mlarge"
! Use large-model addressing (20\-bit pointers, 20\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP "\fB\-msmall\fR" 4
  .IX Item "-msmall"
! Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  This option is passed to the assembler and linker, and allows the
  linker to perform certain optimizations that cannot be done until
  the final link.
! .IP "\fBmhwmult=\fR" 4
  .IX Item "mhwmult="
  Describes the type of hardware multiply supported by the target.
  Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
  for the original 16\-bit\-only multiply supported by early MCUs.
  \&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
  \&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
! A value of \fBauto\fR can also be given.  This tells \s-1GCC\s0 to deduce
! the hardware multiply support based upon the \s-1MCU\s0 name provided by the
  \&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified or if
! the \s-1MCU\s0 name is not recognized then no hardware multiply support is
  assumed.  \f(CW\*(C`auto\*(C'\fR is the default setting.
  .Sp
  Hardware multiplies are normally performed by calling a library
--- 28541,28610 ----
  .IX Item "Include path specified with -I and -L"
  \&\fBdevices.csv\fR will be searched for in each of the directories specified by
  include paths and linker library search paths.
! .IP "Path specified by the environment variable \fBMSP430_GCC_INCLUDE_DIR\fR" 4
  .IX Item "Path specified by the environment variable MSP430_GCC_INCLUDE_DIR"
  Define the value of the global environment variable
! \&\fBMSP430_GCC_INCLUDE_DIR\fR
! to the full path to the directory containing devices.csv, and GCC will search
  this directory for devices.csv.  If devices.csv is found, this directory will
  also be registered as an include path, and linker library path.  Header files
  and linker scripts in this directory can therefore be used without manually
  specifying \f(CW\*(C`\-I\*(C'\fR and \f(CW\*(C`\-L\*(C'\fR on the command line.
  .IP "The \fBmsp430\-elf{,bare}/include/devices\fR directory" 4
  .IX Item "The msp430-elf{,bare}/include/devices directory"
! Finally, GCC will examine \fBmsp430\-elf{,bare}/include/devices\fR from the
  toolchain root directory.  This directory does not exist in a default
  installation, but if the user has created it and copied \fBdevices.csv\fR
! there, then the MCU data will be read.  As above, this directory will
  also be registered as an include path, and linker library path.
  .RE
  .RS 4
  .Sp
  If none of the above search methods find \fBdevices.csv\fR, then the
! hard\-coded MCU data is used.
  .RE
! .IP \fB\-mwarn\-mcu\fR 4
  .IX Item "-mwarn-mcu"
  .PD 0
! .IP \fB\-mno\-warn\-mcu\fR 4
  .IX Item "-mno-warn-mcu"
  .PD
  This option enables or disables warnings about conflicts between the
! MCU name specified by the \fB\-mmcu\fR option and the ISA set by the
  \&\fB\-mcpu\fR option and/or the hardware multiply support set by the
  \&\fB\-mhwmult\fR option.  It also toggles warnings about unrecognized
! MCU names.  This option is on by default.
! .IP \fB\-mcpu=\fR 4
  .IX Item "-mcpu="
! Specifies the ISA to use.  Accepted values are \fBmsp430\fR,
  \&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
! \&\fB\-mmcu=\fR option should be used to select the ISA.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Link to the simulator runtime libraries and linker script.  Overrides
  any scripts that would be selected by the \fB\-mmcu=\fR option.
! .IP \fB\-mlarge\fR 4
  .IX Item "-mlarge"
! Use large\-model addressing (20\-bit pointers, 20\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP \fB\-msmall\fR 4
  .IX Item "-msmall"
! Use small\-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  This option is passed to the assembler and linker, and allows the
  linker to perform certain optimizations that cannot be done until
  the final link.
! .IP \fBmhwmult=\fR 4
  .IX Item "mhwmult="
  Describes the type of hardware multiply supported by the target.
  Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
  for the original 16\-bit\-only multiply supported by early MCUs.
  \&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
  \&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
! A value of \fBauto\fR can also be given.  This tells GCC to deduce
! the hardware multiply support based upon the MCU name provided by the
  \&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified or if
! the MCU name is not recognized then no hardware multiply support is
  assumed.  \f(CW\*(C`auto\*(C'\fR is the default setting.
  .Sp
  Hardware multiplies are normally performed by calling a library
*************** inline.  This makes for bigger, but fast
*** 28680,28704 ****
  The hardware multiply routines disable interrupts whilst running and
  restore the previous interrupt state when they finish.  This makes
  them safe to use inside interrupt handlers as well as in normal code.
! .IP "\fB\-minrt\fR" 4
  .IX Item "-minrt"
  Enable the use of a minimum runtime environment \- no static
! initializers or constructors.  This is intended for memory-constrained
  devices.  The compiler includes special symbols in some objects
  that tell the linker and runtime which code fragments are required.
! .IP "\fB\-mtiny\-printf\fR" 4
  .IX Item "-mtiny-printf"
  Enable reduced code size \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`puts\*(C'\fR library functions.
  The \fBtiny\fR implementations of these functions are not reentrant, so
! must be used with caution in multi-threaded applications.
  .Sp
  Support for streams has been removed and the string to be printed will
  always be sent to stdout via the \f(CW\*(C`write\*(C'\fR syscall.  The string is not
  buffered before it is sent to write.
  .Sp
! This option requires Newlib Nano \s-1IO,\s0 so \s-1GCC\s0 must be configured with
  \&\fB\-\-enable\-newlib\-nano\-formatted\-io\fR.
! .IP "\fB\-mmax\-inline\-shift=\fR" 4
  .IX Item "-mmax-inline-shift="
  This option takes an integer between 0 and 64 inclusive, and sets
  the maximum number of inline shift instructions which should be emitted to
--- 28615,28639 ----
  The hardware multiply routines disable interrupts whilst running and
  restore the previous interrupt state when they finish.  This makes
  them safe to use inside interrupt handlers as well as in normal code.
! .IP \fB\-minrt\fR 4
  .IX Item "-minrt"
  Enable the use of a minimum runtime environment \- no static
! initializers or constructors.  This is intended for memory\-constrained
  devices.  The compiler includes special symbols in some objects
  that tell the linker and runtime which code fragments are required.
! .IP \fB\-mtiny\-printf\fR 4
  .IX Item "-mtiny-printf"
  Enable reduced code size \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`puts\*(C'\fR library functions.
  The \fBtiny\fR implementations of these functions are not reentrant, so
! must be used with caution in multi\-threaded applications.
  .Sp
  Support for streams has been removed and the string to be printed will
  always be sent to stdout via the \f(CW\*(C`write\*(C'\fR syscall.  The string is not
  buffered before it is sent to write.
  .Sp
! This option requires Newlib Nano IO, so GCC must be configured with
  \&\fB\-\-enable\-newlib\-nano\-formatted\-io\fR.
! .IP \fB\-mmax\-inline\-shift=\fR 4
  .IX Item "-mmax-inline-shift="
  This option takes an integer between 0 and 64 inclusive, and sets
  the maximum number of inline shift instructions which should be emitted to
*************** perform a shift operation by a constant
*** 28706,28719 ****
  exceeded, an mspabi helper function is used instead.  The default value is 4.
  .Sp
  This only affects cases where a shift by multiple positions cannot be
! completed with a single instruction (e.g. all shifts >1 on the 430 \s-1ISA\s0).
  .Sp
  Shifts of a 32\-bit value are at least twice as costly, so the value passed for
  this option is divided by 2 and the resulting value used instead.
! .IP "\fB\-mcode\-region=\fR" 4
  .IX Item "-mcode-region="
  .PD 0
! .IP "\fB\-mdata\-region=\fR" 4
  .IX Item "-mdata-region="
  .PD
  These options tell the compiler where to place functions and data that
--- 28641,28654 ----
  exceeded, an mspabi helper function is used instead.  The default value is 4.
  .Sp
  This only affects cases where a shift by multiple positions cannot be
! completed with a single instruction (e.g. all shifts >1 on the 430 ISA).
  .Sp
  Shifts of a 32\-bit value are at least twice as costly, so the value passed for
  this option is divided by 2 and the resulting value used instead.
! .IP \fB\-mcode\-region=\fR 4
  .IX Item "-mcode-region="
  .PD 0
! .IP \fB\-mdata\-region=\fR 4
  .IX Item "-mdata-region="
  .PD
  These options tell the compiler where to place functions and data that
*************** like the corresponding attribute.  The f
*** 28724,28881 ****
  \&\f(CW\*(C`any\*(C'\fR \- is the default.  It leaves placement entirely up to the
  linker script and how it assigns the standard sections
  (\f(CW\*(C`.text\*(C'\fR, \f(CW\*(C`.data\*(C'\fR, etc) to the memory regions.
! .IP "\fB\-msilicon\-errata=\fR" 4
  .IX Item "-msilicon-errata="
  This option passes on a request to assembler to enable the fixes for
  the named silicon errata.
! .IP "\fB\-msilicon\-errata\-warn=\fR" 4
  .IX Item "-msilicon-errata-warn="
  This option passes on a request to the assembler to enable warning
  messages when a silicon errata might need to be applied.
! .IP "\fB\-mwarn\-devices\-csv\fR" 4
  .IX Item "-mwarn-devices-csv"
  .PD 0
! .IP "\fB\-mno\-warn\-devices\-csv\fR" 4
  .IX Item "-mno-warn-devices-csv"
  .PD
  Warn if \fBdevices.csv\fR is not found or there are problem parsing it
  (default: on).
  .PP
! \fI\s-1NDS32\s0 Options\fR
  .IX Subsection "NDS32 Options"
  .PP
! These options are defined for \s-1NDS32\s0 implementations:
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code in big-endian mode.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code in little-endian mode.
! .IP "\fB\-mreduced\-regs\fR" 4
  .IX Item "-mreduced-regs"
! Use reduced-set registers for register allocation.
! .IP "\fB\-mfull\-regs\fR" 4
  .IX Item "-mfull-regs"
! Use full-set registers for register allocation.
! .IP "\fB\-mcmov\fR" 4
  .IX Item "-mcmov"
  Generate conditional move instructions.
! .IP "\fB\-mno\-cmov\fR" 4
  .IX Item "-mno-cmov"
  Do not generate conditional move instructions.
! .IP "\fB\-mext\-perf\fR" 4
  .IX Item "-mext-perf"
  Generate performance extension instructions.
! .IP "\fB\-mno\-ext\-perf\fR" 4
  .IX Item "-mno-ext-perf"
  Do not generate performance extension instructions.
! .IP "\fB\-mext\-perf2\fR" 4
  .IX Item "-mext-perf2"
  Generate performance extension 2 instructions.
! .IP "\fB\-mno\-ext\-perf2\fR" 4
  .IX Item "-mno-ext-perf2"
  Do not generate performance extension 2 instructions.
! .IP "\fB\-mext\-string\fR" 4
  .IX Item "-mext-string"
  Generate string extension instructions.
! .IP "\fB\-mno\-ext\-string\fR" 4
  .IX Item "-mno-ext-string"
  Do not generate string extension instructions.
! .IP "\fB\-mv3push\fR" 4
  .IX Item "-mv3push"
  Generate v3 push25/pop25 instructions.
! .IP "\fB\-mno\-v3push\fR" 4
  .IX Item "-mno-v3push"
  Do not generate v3 push25/pop25 instructions.
! .IP "\fB\-m16\-bit\fR" 4
  .IX Item "-m16-bit"
  Generate 16\-bit instructions.
! .IP "\fB\-mno\-16\-bit\fR" 4
  .IX Item "-mno-16-bit"
  Do not generate 16\-bit instructions.
! .IP "\fB\-misr\-vector\-size=\fR\fInum\fR" 4
  .IX Item "-misr-vector-size=num"
  Specify the size of each interrupt vector, which must be 4 or 16.
! .IP "\fB\-mcache\-block\-size=\fR\fInum\fR" 4
  .IX Item "-mcache-block-size=num"
  Specify the size of each cache block,
  which must be a power of 2 between 4 and 512.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Specify the name of the target architecture.
! .IP "\fB\-mcmodel=\fR\fIcode-model\fR" 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of
  .RS 4
! .IP "\fBsmall\fR" 4
  .IX Item "small"
! All the data and read-only data segments must be within 512KB addressing space.
  The text segment must be within 16MB addressing space.
! .IP "\fBmedium\fR" 4
  .IX Item "medium"
! The data segment must be within 512KB while the read-only data segment can be
  within 4GB addressing space.  The text segment should be still within 16MB
  addressing space.
! .IP "\fBlarge\fR" 4
  .IX Item "large"
  All the text and data segments can be within 4GB addressing space.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mctor\-dtor\fR" 4
  .IX Item "-mctor-dtor"
  Enable constructor/destructor feature.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Guide linker to relax instructions.
  .PP
! \fINios \s-1II\s0 Options\fR
  .IX Subsection "Nios II Options"
  .PP
! These are the options defined for the Altera Nios \s-1II\s0 processor.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
  sections.  The default value of \fInum\fR is 8.
! .IP "\fB\-mgpopt=\fR\fIoption\fR" 4
  .IX Item "-mgpopt=option"
  .PD 0
! .IP "\fB\-mgpopt\fR" 4
  .IX Item "-mgpopt"
! .IP "\fB\-mno\-gpopt\fR" 4
  .IX Item "-mno-gpopt"
  .PD
! Generate (do not generate) GP-relative accesses.  The following 
  \&\fIoption\fR names are recognized:
  .RS 4
! .IP "\fBnone\fR" 4
  .IX Item "none"
! Do not generate GP-relative accesses.
! .IP "\fBlocal\fR" 4
  .IX Item "local"
! Generate GP-relative accesses for small data objects that are not 
  external, weak, or uninitialized common symbols.  
! Also use GP-relative addressing for objects that
  have been explicitly placed in a small data section via a \f(CW\*(C`section\*(C'\fR
  attribute.
! .IP "\fBglobal\fR" 4
  .IX Item "global"
! As for \fBlocal\fR, but also generate GP-relative accesses for
  small data objects that are external, weak, or common.  If you use this option,
  you must ensure that all parts of your program (including libraries) are
  compiled with the same \fB\-G\fR setting.
! .IP "\fBdata\fR" 4
  .IX Item "data"
! Generate GP-relative accesses for all data objects in the program.  If you
! use this option, the entire data and \s-1BSS\s0 segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
! .IP "\fBall\fR" 4
  .IX Item "all"
! Generate GP-relative addresses for function pointers as well as data
! pointers.  If you use this option, the entire text, data, and \s-1BSS\s0 segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
--- 28659,28816 ----
  \&\f(CW\*(C`any\*(C'\fR \- is the default.  It leaves placement entirely up to the
  linker script and how it assigns the standard sections
  (\f(CW\*(C`.text\*(C'\fR, \f(CW\*(C`.data\*(C'\fR, etc) to the memory regions.
! .IP \fB\-msilicon\-errata=\fR 4
  .IX Item "-msilicon-errata="
  This option passes on a request to assembler to enable the fixes for
  the named silicon errata.
! .IP \fB\-msilicon\-errata\-warn=\fR 4
  .IX Item "-msilicon-errata-warn="
  This option passes on a request to the assembler to enable warning
  messages when a silicon errata might need to be applied.
! .IP \fB\-mwarn\-devices\-csv\fR 4
  .IX Item "-mwarn-devices-csv"
  .PD 0
! .IP \fB\-mno\-warn\-devices\-csv\fR 4
  .IX Item "-mno-warn-devices-csv"
  .PD
  Warn if \fBdevices.csv\fR is not found or there are problem parsing it
  (default: on).
  .PP
! \fINDS32 Options\fR
  .IX Subsection "NDS32 Options"
  .PP
! These options are defined for NDS32 implementations:
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code in big\-endian mode.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code in little\-endian mode.
! .IP \fB\-mreduced\-regs\fR 4
  .IX Item "-mreduced-regs"
! Use reduced\-set registers for register allocation.
! .IP \fB\-mfull\-regs\fR 4
  .IX Item "-mfull-regs"
! Use full\-set registers for register allocation.
! .IP \fB\-mcmov\fR 4
  .IX Item "-mcmov"
  Generate conditional move instructions.
! .IP \fB\-mno\-cmov\fR 4
  .IX Item "-mno-cmov"
  Do not generate conditional move instructions.
! .IP \fB\-mext\-perf\fR 4
  .IX Item "-mext-perf"
  Generate performance extension instructions.
! .IP \fB\-mno\-ext\-perf\fR 4
  .IX Item "-mno-ext-perf"
  Do not generate performance extension instructions.
! .IP \fB\-mext\-perf2\fR 4
  .IX Item "-mext-perf2"
  Generate performance extension 2 instructions.
! .IP \fB\-mno\-ext\-perf2\fR 4
  .IX Item "-mno-ext-perf2"
  Do not generate performance extension 2 instructions.
! .IP \fB\-mext\-string\fR 4
  .IX Item "-mext-string"
  Generate string extension instructions.
! .IP \fB\-mno\-ext\-string\fR 4
  .IX Item "-mno-ext-string"
  Do not generate string extension instructions.
! .IP \fB\-mv3push\fR 4
  .IX Item "-mv3push"
  Generate v3 push25/pop25 instructions.
! .IP \fB\-mno\-v3push\fR 4
  .IX Item "-mno-v3push"
  Do not generate v3 push25/pop25 instructions.
! .IP \fB\-m16\-bit\fR 4
  .IX Item "-m16-bit"
  Generate 16\-bit instructions.
! .IP \fB\-mno\-16\-bit\fR 4
  .IX Item "-mno-16-bit"
  Do not generate 16\-bit instructions.
! .IP \fB\-misr\-vector\-size=\fR\fInum\fR 4
  .IX Item "-misr-vector-size=num"
  Specify the size of each interrupt vector, which must be 4 or 16.
! .IP \fB\-mcache\-block\-size=\fR\fInum\fR 4
  .IX Item "-mcache-block-size=num"
  Specify the size of each cache block,
  which must be a power of 2 between 4 and 512.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Specify the name of the target architecture.
! .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of
  .RS 4
! .IP \fBsmall\fR 4
  .IX Item "small"
! All the data and read\-only data segments must be within 512KB addressing space.
  The text segment must be within 16MB addressing space.
! .IP \fBmedium\fR 4
  .IX Item "medium"
! The data segment must be within 512KB while the read\-only data segment can be
  within 4GB addressing space.  The text segment should be still within 16MB
  addressing space.
! .IP \fBlarge\fR 4
  .IX Item "large"
  All the text and data segments can be within 4GB addressing space.
  .RE
  .RS 4
  .RE
! .IP \fB\-mctor\-dtor\fR 4
  .IX Item "-mctor-dtor"
  Enable constructor/destructor feature.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Guide linker to relax instructions.
  .PP
! \fINios II Options\fR
  .IX Subsection "Nios II Options"
  .PP
! These are the options defined for the Altera Nios II processor.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or BSS sections instead of the normal data or BSS
  sections.  The default value of \fInum\fR is 8.
! .IP \fB\-mgpopt=\fR\fIoption\fR 4
  .IX Item "-mgpopt=option"
  .PD 0
! .IP \fB\-mgpopt\fR 4
  .IX Item "-mgpopt"
! .IP \fB\-mno\-gpopt\fR 4
  .IX Item "-mno-gpopt"
  .PD
! Generate (do not generate) GP\-relative accesses.  The following 
  \&\fIoption\fR names are recognized:
  .RS 4
! .IP \fBnone\fR 4
  .IX Item "none"
! Do not generate GP\-relative accesses.
! .IP \fBlocal\fR 4
  .IX Item "local"
! Generate GP\-relative accesses for small data objects that are not 
  external, weak, or uninitialized common symbols.  
! Also use GP\-relative addressing for objects that
  have been explicitly placed in a small data section via a \f(CW\*(C`section\*(C'\fR
  attribute.
! .IP \fBglobal\fR 4
  .IX Item "global"
! As for \fBlocal\fR, but also generate GP\-relative accesses for
  small data objects that are external, weak, or common.  If you use this option,
  you must ensure that all parts of your program (including libraries) are
  compiled with the same \fB\-G\fR setting.
! .IP \fBdata\fR 4
  .IX Item "data"
! Generate GP\-relative accesses for all data objects in the program.  If you
! use this option, the entire data and BSS segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
! .IP \fBall\fR 4
  .IX Item "all"
! Generate GP\-relative addresses for function pointers as well as data
! pointers.  If you use this option, the entire text, data, and BSS segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
*************** global pointer.
*** 28886,29021 ****
  \&\fB\-mno\-gpopt\fR is equivalent to \fB\-mgpopt=none\fR.
  .Sp
  The default is \fB\-mgpopt\fR except when \fB\-fpic\fR or
! \&\fB\-fPIC\fR is specified to generate position-independent code.
! Note that the Nios \s-1II ABI\s0 does not permit GP-relative accesses from
  shared libraries.
  .Sp
  You may need to specify \fB\-mno\-gpopt\fR explicitly when building
  programs that include large amounts of small data, including large
! \&\s-1GOT\s0 data sections.  In this case, the 16\-bit offset for GP-relative
  addressing may not be large enough to allow access to the entire 
  small data section.
  .RE
! .IP "\fB\-mgprel\-sec=\fR\fIregexp\fR" 4
  .IX Item "-mgprel-sec=regexp"
  This option specifies additional section names that can be accessed via
! GP-relative addressing.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a \s-1POSIX\s0 Extended Regular Expression.
  .Sp
  This option does not affect the behavior of the \fB\-G\fR option, and 
  the specified sections are in addition to the standard \f(CW\*(C`.sdata\*(C'\fR
! and \f(CW\*(C`.sbss\*(C'\fR small-data sections that are recognized by \fB\-mgpopt\fR.
! .IP "\fB\-mr0rel\-sec=\fR\fIregexp\fR" 4
  .IX Item "-mr0rel-sec=regexp"
  This option specifies names of sections that can be accessed via a 
  16\-bit offset from \f(CW\*(C`r0\*(C'\fR; that is, in the low 32K or high 32K 
  of the 32\-bit address space.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a \s-1POSIX\s0 Extended Regular Expression.
  .Sp
! In contrast to the use of GP-relative addressing for small data, 
! zero-based addressing is never generated by default and there are no 
  conventional section names used in standard linker scripts for sections
  in the low or high areas of memory.
! .IP "\fB\-mel\fR" 4
  .IX Item "-mel"
  .PD 0
! .IP "\fB\-meb\fR" 4
  .IX Item "-meb"
  .PD
! Generate little-endian (default) or big-endian (experimental) code,
  respectively.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
! This specifies the name of the target Nios \s-1II\s0 architecture.  \s-1GCC\s0 uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBr1\fR, \fBr2\fR.
  .Sp
  The preprocessor macro \f(CW\*(C`_\|_nios2_arch_\|_\*(C'\fR is available to programs,
! with value 1 or 2, indicating the targeted \s-1ISA\s0 level.
! .IP "\fB\-mbypass\-cache\fR" 4
  .IX Item "-mbypass-cache"
  .PD 0
! .IP "\fB\-mno\-bypass\-cache\fR" 4
  .IX Item "-mno-bypass-cache"
  .PD
  Force all load and store instructions to always bypass cache by 
  using I/O variants of the instructions. The default is not to
  bypass the cache.
! .IP "\fB\-mno\-cache\-volatile\fR" 4
  .IX Item "-mno-cache-volatile"
  .PD 0
! .IP "\fB\-mcache\-volatile\fR" 4
  .IX Item "-mcache-volatile"
  .PD
  Volatile memory access bypass the cache using the I/O variants of 
  the load and store instructions. The default is not to bypass the cache.
! .IP "\fB\-mno\-fast\-sw\-div\fR" 4
  .IX Item "-mno-fast-sw-div"
  .PD 0
! .IP "\fB\-mfast\-sw\-div\fR" 4
  .IX Item "-mfast-sw-div"
  .PD
! Do not use table-based fast divide for small numbers. The default 
  is to use the fast divide at \fB\-O3\fR and above.
! .IP "\fB\-mno\-hw\-mul\fR" 4
  .IX Item "-mno-hw-mul"
  .PD 0
! .IP "\fB\-mhw\-mul\fR" 4
  .IX Item "-mhw-mul"
! .IP "\fB\-mno\-hw\-mulx\fR" 4
  .IX Item "-mno-hw-mulx"
! .IP "\fB\-mhw\-mulx\fR" 4
  .IX Item "-mhw-mulx"
! .IP "\fB\-mno\-hw\-div\fR" 4
  .IX Item "-mno-hw-div"
! .IP "\fB\-mhw\-div\fR" 4
  .IX Item "-mhw-div"
  .PD
  Enable or disable emitting \f(CW\*(C`mul\*(C'\fR, \f(CW\*(C`mulx\*(C'\fR and \f(CW\*(C`div\*(C'\fR family of 
  instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
  and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
! .IP "\fB\-mbmx\fR" 4
  .IX Item "-mbmx"
  .PD 0
! .IP "\fB\-mno\-bmx\fR" 4
  .IX Item "-mno-bmx"
! .IP "\fB\-mcdx\fR" 4
  .IX Item "-mcdx"
! .IP "\fB\-mno\-cdx\fR" 4
  .IX Item "-mno-cdx"
  .PD
! Enable or disable generation of Nios \s-1II R2 BMX\s0 (bit manipulation) and
! \&\s-1CDX\s0 (code density) instructions.  Enabling these instructions also
  requires \fB\-march=r2\fR.  Since these instructions are optional
  extensions to the R2 architecture, the default is not to emit them.
! .IP "\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR" 4
  .IX Item "-mcustom-insn=N"
  .PD 0
! .IP "\fB\-mno\-custom\-\fR\fIinsn\fR" 4
  .IX Item "-mno-custom-insn"
  .PD
  Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
  custom instruction with encoding \fIN\fR when generating code that uses 
  \&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
! instruction 253 for single-precision floating-point add operations instead
  of the default behavior of using a library call.
  .Sp
  The following values of \fIinsn\fR are supported.  Except as otherwise
! noted, floating-point operations are expected to be implemented with
! normal \s-1IEEE 754\s0 semantics and correspond directly to the C operators or the
! equivalent \s-1GCC\s0 built-in functions.
  .Sp
! Single-precision floating point:
  .RS 4
  .IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
  .IX Item "fadds, fsubs, fdivs, fmuls"
  Binary arithmetic operations.
! .IP "\fBfnegs\fR" 4
  .IX Item "fnegs"
  Unary negation.
! .IP "\fBfabss\fR" 4
  .IX Item "fabss"
  Unary absolute value.
  .IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
--- 28821,28956 ----
  \&\fB\-mno\-gpopt\fR is equivalent to \fB\-mgpopt=none\fR.
  .Sp
  The default is \fB\-mgpopt\fR except when \fB\-fpic\fR or
! \&\fB\-fPIC\fR is specified to generate position\-independent code.
! Note that the Nios II ABI does not permit GP\-relative accesses from
  shared libraries.
  .Sp
  You may need to specify \fB\-mno\-gpopt\fR explicitly when building
  programs that include large amounts of small data, including large
! GOT data sections.  In this case, the 16\-bit offset for GP\-relative
  addressing may not be large enough to allow access to the entire 
  small data section.
  .RE
! .IP \fB\-mgprel\-sec=\fR\fIregexp\fR 4
  .IX Item "-mgprel-sec=regexp"
  This option specifies additional section names that can be accessed via
! GP\-relative addressing.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a POSIX Extended Regular Expression.
  .Sp
  This option does not affect the behavior of the \fB\-G\fR option, and 
  the specified sections are in addition to the standard \f(CW\*(C`.sdata\*(C'\fR
! and \f(CW\*(C`.sbss\*(C'\fR small\-data sections that are recognized by \fB\-mgpopt\fR.
! .IP \fB\-mr0rel\-sec=\fR\fIregexp\fR 4
  .IX Item "-mr0rel-sec=regexp"
  This option specifies names of sections that can be accessed via a 
  16\-bit offset from \f(CW\*(C`r0\*(C'\fR; that is, in the low 32K or high 32K 
  of the 32\-bit address space.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a POSIX Extended Regular Expression.
  .Sp
! In contrast to the use of GP\-relative addressing for small data, 
! zero\-based addressing is never generated by default and there are no 
  conventional section names used in standard linker scripts for sections
  in the low or high areas of memory.
! .IP \fB\-mel\fR 4
  .IX Item "-mel"
  .PD 0
! .IP \fB\-meb\fR 4
  .IX Item "-meb"
  .PD
! Generate little\-endian (default) or big\-endian (experimental) code,
  respectively.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
! This specifies the name of the target Nios II architecture.  GCC uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBr1\fR, \fBr2\fR.
  .Sp
  The preprocessor macro \f(CW\*(C`_\|_nios2_arch_\|_\*(C'\fR is available to programs,
! with value 1 or 2, indicating the targeted ISA level.
! .IP \fB\-mbypass\-cache\fR 4
  .IX Item "-mbypass-cache"
  .PD 0
! .IP \fB\-mno\-bypass\-cache\fR 4
  .IX Item "-mno-bypass-cache"
  .PD
  Force all load and store instructions to always bypass cache by 
  using I/O variants of the instructions. The default is not to
  bypass the cache.
! .IP \fB\-mno\-cache\-volatile\fR 4
  .IX Item "-mno-cache-volatile"
  .PD 0
! .IP \fB\-mcache\-volatile\fR 4
  .IX Item "-mcache-volatile"
  .PD
  Volatile memory access bypass the cache using the I/O variants of 
  the load and store instructions. The default is not to bypass the cache.
! .IP \fB\-mno\-fast\-sw\-div\fR 4
  .IX Item "-mno-fast-sw-div"
  .PD 0
! .IP \fB\-mfast\-sw\-div\fR 4
  .IX Item "-mfast-sw-div"
  .PD
! Do not use table\-based fast divide for small numbers. The default 
  is to use the fast divide at \fB\-O3\fR and above.
! .IP \fB\-mno\-hw\-mul\fR 4
  .IX Item "-mno-hw-mul"
  .PD 0
! .IP \fB\-mhw\-mul\fR 4
  .IX Item "-mhw-mul"
! .IP \fB\-mno\-hw\-mulx\fR 4
  .IX Item "-mno-hw-mulx"
! .IP \fB\-mhw\-mulx\fR 4
  .IX Item "-mhw-mulx"
! .IP \fB\-mno\-hw\-div\fR 4
  .IX Item "-mno-hw-div"
! .IP \fB\-mhw\-div\fR 4
  .IX Item "-mhw-div"
  .PD
  Enable or disable emitting \f(CW\*(C`mul\*(C'\fR, \f(CW\*(C`mulx\*(C'\fR and \f(CW\*(C`div\*(C'\fR family of 
  instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
  and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
! .IP \fB\-mbmx\fR 4
  .IX Item "-mbmx"
  .PD 0
! .IP \fB\-mno\-bmx\fR 4
  .IX Item "-mno-bmx"
! .IP \fB\-mcdx\fR 4
  .IX Item "-mcdx"
! .IP \fB\-mno\-cdx\fR 4
  .IX Item "-mno-cdx"
  .PD
! Enable or disable generation of Nios II R2 BMX (bit manipulation) and
! CDX (code density) instructions.  Enabling these instructions also
  requires \fB\-march=r2\fR.  Since these instructions are optional
  extensions to the R2 architecture, the default is not to emit them.
! .IP \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR 4
  .IX Item "-mcustom-insn=N"
  .PD 0
! .IP \fB\-mno\-custom\-\fR\fIinsn\fR 4
  .IX Item "-mno-custom-insn"
  .PD
  Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
  custom instruction with encoding \fIN\fR when generating code that uses 
  \&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
! instruction 253 for single\-precision floating\-point add operations instead
  of the default behavior of using a library call.
  .Sp
  The following values of \fIinsn\fR are supported.  Except as otherwise
! noted, floating\-point operations are expected to be implemented with
! normal IEEE 754 semantics and correspond directly to the C operators or the
! equivalent GCC built\-in functions.
  .Sp
! Single\-precision floating point:
  .RS 4
  .IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
  .IX Item "fadds, fsubs, fdivs, fmuls"
  Binary arithmetic operations.
! .IP \fBfnegs\fR 4
  .IX Item "fnegs"
  Unary negation.
! .IP \fBfabss\fR 4
  .IX Item "fabss"
  Unary absolute value.
  .IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
*************** Unary absolute value.
*** 29023,29048 ****
  Comparison operations.
  .IP "\fBfmins\fR, \fBfmaxs\fR" 4
  .IX Item "fmins, fmaxs"
! Floating-point minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP "\fBfsqrts\fR" 4
  .IX Item "fsqrts"
  Unary square root operation.
  .IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
  .IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
! Floating-point trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
! Double-precision floating point:
  .IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
  .IX Item "faddd, fsubd, fdivd, fmuld"
  Binary arithmetic operations.
! .IP "\fBfnegd\fR" 4
  .IX Item "fnegd"
  Unary negation.
! .IP "\fBfabsd\fR" 4
  .IX Item "fabsd"
  Unary absolute value.
  .IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
--- 28958,28983 ----
  Comparison operations.
  .IP "\fBfmins\fR, \fBfmaxs\fR" 4
  .IX Item "fmins, fmaxs"
! Floating\-point minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP \fBfsqrts\fR 4
  .IX Item "fsqrts"
  Unary square root operation.
  .IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
  .IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
! Floating\-point trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
! Double\-precision floating point:
  .IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
  .IX Item "faddd, fsubd, fdivd, fmuld"
  Binary arithmetic operations.
! .IP \fBfnegd\fR 4
  .IX Item "fnegd"
  Unary negation.
! .IP \fBfabsd\fR 4
  .IX Item "fabsd"
  Unary absolute value.
  .IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
*************** Unary absolute value.
*** 29050,29126 ****
  Comparison operations.
  .IP "\fBfmind\fR, \fBfmaxd\fR" 4
  .IX Item "fmind, fmaxd"
! Double-precision minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP "\fBfsqrtd\fR" 4
  .IX Item "fsqrtd"
  Unary square root operation.
  .IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
  .IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
! Double-precision trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
  Conversions:
! .IP "\fBfextsd\fR" 4
  .IX Item "fextsd"
  Conversion from single precision to double precision.
! .IP "\fBftruncds\fR" 4
  .IX Item "ftruncds"
  Conversion from double precision to single precision.
  .IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
  .IX Item "fixsi, fixsu, fixdi, fixdu"
  Conversion from floating point to signed or unsigned integer types, with
  truncation towards zero.
! .IP "\fBround\fR" 4
  .IX Item "round"
! Conversion from single-precision floating point to signed integer,
  rounding to the nearest integer and ties away from zero.
  This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
  \&\fB\-fno\-math\-errno\fR is used.
  .IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
  .IX Item "floatis, floatus, floatid, floatud"
! Conversion from signed or unsigned integer types to floating-point types.
  .RE
  .RS 4
  .Sp
  In addition, all of the following transfer instructions for internal
! registers X and Y must be provided to use any of the double-precision
! floating-point instructions.  Custom instructions taking two
! double-precision source operands expect the first operand in the
  64\-bit register X.  The other operand (or only operand of a unary
  operation) is given to the custom arithmetic instruction with the
  least significant half in source register \fIsrc1\fR and the most
  significant half in \fIsrc2\fR.  A custom instruction that returns a
! double-precision result returns the most significant 32 bits in the
  destination register and the other half in 32\-bit register Y.  
! \&\s-1GCC\s0 automatically generates the necessary code sequences to write
! register X and/or read register Y when double-precision floating-point
  instructions are used.
! .IP "\fBfwrx\fR" 4
  .IX Item "fwrx"
  Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
  the most significant half of X.
! .IP "\fBfwry\fR" 4
  .IX Item "fwry"
  Write \fIsrc1\fR into Y.
  .IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
  .IX Item "frdxhi, frdxlo"
  Read the most or least (respectively) significant half of X and store it in
  \&\fIdest\fR.
! .IP "\fBfrdy\fR" 4
  .IX Item "frdy"
  Read the value of Y and store it into \fIdest\fR.
  .RE
  .RS 4
  .Sp
! Note that you can gain more local control over generation of Nios \s-1II\s0 custom
! instructions by using the \f(CW\*(C`target("custom\-\f(CIinsn\f(CW=\f(CIN\f(CW")\*(C'\fR
! and \f(CW\*(C`target("no\-custom\-\f(CIinsn\f(CW")\*(C'\fR function attributes
  or pragmas.
  .RE
! .IP "\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR" 4
  .IX Item "-mcustom-fpu-cfg=name"
  This option enables a predefined, named set of custom instruction encodings
  (see \fB\-mcustom\-\fR\fIinsn\fR above).  
--- 28985,29061 ----
  Comparison operations.
  .IP "\fBfmind\fR, \fBfmaxd\fR" 4
  .IX Item "fmind, fmaxd"
! Double\-precision minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP \fBfsqrtd\fR 4
  .IX Item "fsqrtd"
  Unary square root operation.
  .IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
  .IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
! Double\-precision trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
  Conversions:
! .IP \fBfextsd\fR 4
  .IX Item "fextsd"
  Conversion from single precision to double precision.
! .IP \fBftruncds\fR 4
  .IX Item "ftruncds"
  Conversion from double precision to single precision.
  .IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
  .IX Item "fixsi, fixsu, fixdi, fixdu"
  Conversion from floating point to signed or unsigned integer types, with
  truncation towards zero.
! .IP \fBround\fR 4
  .IX Item "round"
! Conversion from single\-precision floating point to signed integer,
  rounding to the nearest integer and ties away from zero.
  This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
  \&\fB\-fno\-math\-errno\fR is used.
  .IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
  .IX Item "floatis, floatus, floatid, floatud"
! Conversion from signed or unsigned integer types to floating\-point types.
  .RE
  .RS 4
  .Sp
  In addition, all of the following transfer instructions for internal
! registers X and Y must be provided to use any of the double\-precision
! floating\-point instructions.  Custom instructions taking two
! double\-precision source operands expect the first operand in the
  64\-bit register X.  The other operand (or only operand of a unary
  operation) is given to the custom arithmetic instruction with the
  least significant half in source register \fIsrc1\fR and the most
  significant half in \fIsrc2\fR.  A custom instruction that returns a
! double\-precision result returns the most significant 32 bits in the
  destination register and the other half in 32\-bit register Y.  
! GCC automatically generates the necessary code sequences to write
! register X and/or read register Y when double\-precision floating\-point
  instructions are used.
! .IP \fBfwrx\fR 4
  .IX Item "fwrx"
  Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
  the most significant half of X.
! .IP \fBfwry\fR 4
  .IX Item "fwry"
  Write \fIsrc1\fR into Y.
  .IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
  .IX Item "frdxhi, frdxlo"
  Read the most or least (respectively) significant half of X and store it in
  \&\fIdest\fR.
! .IP \fBfrdy\fR 4
  .IX Item "frdy"
  Read the value of Y and store it into \fIdest\fR.
  .RE
  .RS 4
  .Sp
! Note that you can gain more local control over generation of Nios II custom
! instructions by using the \f(CWtarget("custom\-\fR\f(CIinsn\fR\f(CW=\fR\f(CIN\fR\f(CW")\fR
! and \f(CWtarget("no\-custom\-\fR\f(CIinsn\fR\f(CW")\fR function attributes
  or pragmas.
  .RE
! .IP \fB\-mcustom\-fpu\-cfg=\fR\fIname\fR 4
  .IX Item "-mcustom-fpu-cfg=name"
  This option enables a predefined, named set of custom instruction encodings
  (see \fB\-mcustom\-\fR\fIinsn\fR above).  
*************** Custom instruction assignments given by
*** 29178,29189 ****
  \&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
  order of the options on the command line.
  .Sp
! Note that you can gain more local control over selection of a \s-1FPU\s0
! configuration by using the \f(CW\*(C`target("custom\-fpu\-cfg=\f(CIname\f(CW")\*(C'\fR
  function attribute
  or pragma.
  .Sp
! The name \fIfph2\fR is an abbreviation for \fINios \s-1II\s0 Floating Point
  Hardware 2 Component\fR.  Please note that the custom instructions enabled by
  \&\fB\-mcustom\-fmins=233\fR and \fB\-mcustom\-fmaxs=234\fR are only generated
  if \fB\-ffinite\-math\-only\fR is specified.  The custom instruction enabled by
--- 29113,29124 ----
  \&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
  order of the options on the command line.
  .Sp
! Note that you can gain more local control over selection of a FPU
! configuration by using the \f(CWtarget("custom\-fpu\-cfg=\fR\f(CIname\fR\f(CW")\fR
  function attribute
  or pragma.
  .Sp
! The name \fIfph2\fR is an abbreviation for \fINios II Floating Point
  Hardware 2 Component\fR.  Please note that the custom instructions enabled by
  \&\fB\-mcustom\-fmins=233\fR and \fB\-mcustom\-fmaxs=234\fR are only generated
  if \fB\-ffinite\-math\-only\fR is specified.  The custom instruction enabled by
*************** if \fB\-ffinite\-math\-only\fR is specif
*** 29191,29230 ****
  specified.  In contrast to the other configurations,
  \&\fB\-fsingle\-precision\-constant\fR is not set.
  .PP
! These additional \fB\-m\fR options are available for the Altera Nios \s-1II
! ELF\s0 (bare-metal) target:
! .IP "\fB\-mhal\fR" 4
  .IX Item "-mhal"
! Link with \s-1HAL BSP.\s0  This suppresses linking with the GCC-provided C runtime
  startup and termination code, and is typically used in conjunction with
  \&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
! provided by the \s-1HAL BSP.\s0
! .IP "\fB\-msmallc\fR" 4
  .IX Item "-msmallc"
  Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
  Newlib.
! .IP "\fB\-msys\-crt0=\fR\fIstartfile\fR" 4
  .IX Item "-msys-crt0=startfile"
  \&\fIstartfile\fR is the file name of the startfile (crt0) to use 
  when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
! .IP "\fB\-msys\-lib=\fR\fIsystemlib\fR" 4
  .IX Item "-msys-lib=systemlib"
  \&\fIsystemlib\fR is the library name of the library that provides
! low-level system calls required by the C library,
  e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
! This option is typically used to link with a library provided by a \s-1HAL BSP.\s0
  .PP
! \fINvidia \s-1PTX\s0 Options\fR
  .IX Subsection "Nvidia PTX Options"
  .PP
! These options are defined for Nvidia \s-1PTX:\s0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
! Ignored, but preserved for backward compatibility.  Only 64\-bit \s-1ABI\s0 is
  supported.
! .IP "\fB\-march=\fR\fIarchitecture-string\fR" 4
  .IX Item "-march=architecture-string"
! Generate code for the specified \s-1PTX ISA\s0 target architecture
  (e.g. \fBsm_35\fR).  Valid architecture strings are \fBsm_30\fR,
  \&\fBsm_35\fR, \fBsm_53\fR, \fBsm_70\fR, \fBsm_75\fR and
  \&\fBsm_80\fR.
--- 29126,29165 ----
  specified.  In contrast to the other configurations,
  \&\fB\-fsingle\-precision\-constant\fR is not set.
  .PP
! These additional \fB\-m\fR options are available for the Altera Nios II
! ELF (bare\-metal) target:
! .IP \fB\-mhal\fR 4
  .IX Item "-mhal"
! Link with HAL BSP.  This suppresses linking with the GCC\-provided C runtime
  startup and termination code, and is typically used in conjunction with
  \&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
! provided by the HAL BSP.
! .IP \fB\-msmallc\fR 4
  .IX Item "-msmallc"
  Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
  Newlib.
! .IP \fB\-msys\-crt0=\fR\fIstartfile\fR 4
  .IX Item "-msys-crt0=startfile"
  \&\fIstartfile\fR is the file name of the startfile (crt0) to use 
  when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
! .IP \fB\-msys\-lib=\fR\fIsystemlib\fR 4
  .IX Item "-msys-lib=systemlib"
  \&\fIsystemlib\fR is the library name of the library that provides
! low\-level system calls required by the C library,
  e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
! This option is typically used to link with a library provided by a HAL BSP.
  .PP
! \fINvidia PTX Options\fR
  .IX Subsection "Nvidia PTX Options"
  .PP
! These options are defined for Nvidia PTX:
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
! Ignored, but preserved for backward compatibility.  Only 64\-bit ABI is
  supported.
! .IP \fB\-march=\fR\fIarchitecture\-string\fR 4
  .IX Item "-march=architecture-string"
! Generate code for the specified PTX ISA target architecture
  (e.g. \fBsm_35\fR).  Valid architecture strings are \fBsm_30\fR,
  \&\fBsm_35\fR, \fBsm_53\fR, \fBsm_70\fR, \fBsm_75\fR and
  \&\fBsm_80\fR.
*************** The default depends on how the compiler
*** 29234,29293 ****
  This option sets the value of the preprocessor macro
  \&\f(CW\*(C`_\|_PTX_SM_\|_\*(C'\fR; for instance, for \fBsm_35\fR, it has the value
  \&\fB350\fR.
! .IP "\fB\-misa=\fR\fIarchitecture-string\fR" 4
  .IX Item "-misa=architecture-string"
  Alias of \fB\-march=\fR.
! .IP "\fB\-march\-map=\fR\fIarchitecture-string\fR" 4
  .IX Item "-march-map=architecture-string"
  Select the closest available \fB\-march=\fR value that is not more
  capable.  For instance, for \fB\-march\-map=sm_50\fR select
  \&\fB\-march=sm_35\fR, and for \fB\-march\-map=sm_53\fR select
  \&\fB\-march=sm_53\fR.
! .IP "\fB\-mptx=\fR\fIversion-string\fR" 4
  .IX Item "-mptx=version-string"
! Generate code for the specified \s-1PTX ISA\s0 version (e.g. \fB7.0\fR).
  Valid version strings include \fB3.1\fR, \fB6.0\fR, \fB6.3\fR, and
! \&\fB7.0\fR.  The default \s-1PTX ISA\s0 version is 6.0, unless a higher
! version is required for specified \s-1PTX ISA\s0 target architecture via
  option \fB\-march=\fR.
  .Sp
  This option sets the values of the preprocessor macros
  \&\f(CW\*(C`_\|_PTX_ISA_VERSION_MAJOR_\|_\*(C'\fR and \f(CW\*(C`_\|_PTX_ISA_VERSION_MINOR_\|_\*(C'\fR;
  for instance, for \fB3.1\fR the macros have the values \fB3\fR and
  \&\fB1\fR, respectively.
! .IP "\fB\-mmainkernel\fR" 4
  .IX Item "-mmainkernel"
! Link in code for a _\|_main kernel.  This is for stand-alone instead of
  offloading execution.
! .IP "\fB\-moptimize\fR" 4
  .IX Item "-moptimize"
  Apply partitioned execution optimizations.  This is the default when any
  level of optimization is selected.
! .IP "\fB\-msoft\-stack\fR" 4
  .IX Item "-msoft-stack"
  Generate code that does not use \f(CW\*(C`.local\*(C'\fR memory
! directly for stack storage. Instead, a per-warp stack pointer is
! maintained explicitly. This enables variable-length stack allocation (with
! variable-length arrays or \f(CW\*(C`alloca\*(C'\fR), and when global memory is used for
  underlying storage, makes it possible to access automatic variables from other
  threads, or with atomic instructions. This code generation variant is used
  for OpenMP offloading, but the option is exposed on its own for the purpose
  of testing the compiler; to generate code suitable for linking into programs
  using OpenMP offloading, use option \fB\-mgomp\fR.
! .IP "\fB\-muniform\-simt\fR" 4
  .IX Item "-muniform-simt"
  Switch to code generation variant that allows to execute all threads in each
  warp, while maintaining memory state and side effects as if only one thread
! in each warp was active outside of OpenMP \s-1SIMD\s0 regions.  All atomic operations
  and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
  current lane index equals the master lane index), and the register being
  assigned is copied via a shuffle instruction from the master lane.  Outside of
! \&\s-1SIMD\s0 regions lane 0 is the master; inside, each thread sees itself as the
! master.  Shared memory array \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR stores all-zeros or
! all-ones bitmasks for each warp, indicating current mode (0 outside of \s-1SIMD\s0
! regions).  Each thread can bitwise-and the bitmask at position \f(CW\*(C`tid.y\*(C'\fR
  with current lane index to compute the master lane index.
! .IP "\fB\-mgomp\fR" 4
  .IX Item "-mgomp"
  Generate code for use in OpenMP offloading: enables \fB\-msoft\-stack\fR and
  \&\fB\-muniform\-simt\fR options, and selects corresponding multilib variant.
--- 29169,29228 ----
  This option sets the value of the preprocessor macro
  \&\f(CW\*(C`_\|_PTX_SM_\|_\*(C'\fR; for instance, for \fBsm_35\fR, it has the value
  \&\fB350\fR.
! .IP \fB\-misa=\fR\fIarchitecture\-string\fR 4
  .IX Item "-misa=architecture-string"
  Alias of \fB\-march=\fR.
! .IP \fB\-march\-map=\fR\fIarchitecture\-string\fR 4
  .IX Item "-march-map=architecture-string"
  Select the closest available \fB\-march=\fR value that is not more
  capable.  For instance, for \fB\-march\-map=sm_50\fR select
  \&\fB\-march=sm_35\fR, and for \fB\-march\-map=sm_53\fR select
  \&\fB\-march=sm_53\fR.
! .IP \fB\-mptx=\fR\fIversion\-string\fR 4
  .IX Item "-mptx=version-string"
! Generate code for the specified PTX ISA version (e.g. \fB7.0\fR).
  Valid version strings include \fB3.1\fR, \fB6.0\fR, \fB6.3\fR, and
! \&\fB7.0\fR.  The default PTX ISA version is 6.0, unless a higher
! version is required for specified PTX ISA target architecture via
  option \fB\-march=\fR.
  .Sp
  This option sets the values of the preprocessor macros
  \&\f(CW\*(C`_\|_PTX_ISA_VERSION_MAJOR_\|_\*(C'\fR and \f(CW\*(C`_\|_PTX_ISA_VERSION_MINOR_\|_\*(C'\fR;
  for instance, for \fB3.1\fR the macros have the values \fB3\fR and
  \&\fB1\fR, respectively.
! .IP \fB\-mmainkernel\fR 4
  .IX Item "-mmainkernel"
! Link in code for a _\|_main kernel.  This is for stand\-alone instead of
  offloading execution.
! .IP \fB\-moptimize\fR 4
  .IX Item "-moptimize"
  Apply partitioned execution optimizations.  This is the default when any
  level of optimization is selected.
! .IP \fB\-msoft\-stack\fR 4
  .IX Item "-msoft-stack"
  Generate code that does not use \f(CW\*(C`.local\*(C'\fR memory
! directly for stack storage. Instead, a per\-warp stack pointer is
! maintained explicitly. This enables variable\-length stack allocation (with
! variable\-length arrays or \f(CW\*(C`alloca\*(C'\fR), and when global memory is used for
  underlying storage, makes it possible to access automatic variables from other
  threads, or with atomic instructions. This code generation variant is used
  for OpenMP offloading, but the option is exposed on its own for the purpose
  of testing the compiler; to generate code suitable for linking into programs
  using OpenMP offloading, use option \fB\-mgomp\fR.
! .IP \fB\-muniform\-simt\fR 4
  .IX Item "-muniform-simt"
  Switch to code generation variant that allows to execute all threads in each
  warp, while maintaining memory state and side effects as if only one thread
! in each warp was active outside of OpenMP SIMD regions.  All atomic operations
  and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
  current lane index equals the master lane index), and the register being
  assigned is copied via a shuffle instruction from the master lane.  Outside of
! SIMD regions lane 0 is the master; inside, each thread sees itself as the
! master.  Shared memory array \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR stores all\-zeros or
! all\-ones bitmasks for each warp, indicating current mode (0 outside of SIMD
! regions).  Each thread can bitwise\-and the bitmask at position \f(CW\*(C`tid.y\*(C'\fR
  with current lane index to compute the master lane index.
! .IP \fB\-mgomp\fR 4
  .IX Item "-mgomp"
  Generate code for use in OpenMP offloading: enables \fB\-msoft\-stack\fR and
  \&\fB\-muniform\-simt\fR options, and selects corresponding multilib variant.
*************** Generate code for use in OpenMP offloadi
*** 29296,29434 ****
  .IX Subsection "OpenRISC Options"
  .PP
  These options are defined for OpenRISC:
! .IP "\fB\-mboard=\fR\fIname\fR" 4
  .IX Item "-mboard=name"
  Configure a board specific runtime.  This will be passed to the linker for
  newlib board library linking.  The default is \f(CW\*(C`or1ksim\*(C'\fR.
! .IP "\fB\-mnewlib\fR" 4
  .IX Item "-mnewlib"
  This option is ignored; it is for compatibility purposes only.  This used to
  select linker and preprocessor options for use with newlib.
! .IP "\fB\-msoft\-div\fR" 4
  .IX Item "-msoft-div"
  .PD 0
! .IP "\fB\-mhard\-div\fR" 4
  .IX Item "-mhard-div"
  .PD
  Select software or hardware divide (\f(CW\*(C`l.div\*(C'\fR, \f(CW\*(C`l.divu\*(C'\fR) instructions.
  This default is hardware divide.
! .IP "\fB\-msoft\-mul\fR" 4
  .IX Item "-msoft-mul"
  .PD 0
! .IP "\fB\-mhard\-mul\fR" 4
  .IX Item "-mhard-mul"
  .PD
  Select software or hardware multiply (\f(CW\*(C`l.mul\*(C'\fR, \f(CW\*(C`l.muli\*(C'\fR) instructions.
  This default is hardware multiply.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
  Select software or hardware for floating point operations.
  The default is software.
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
! When \fB\-mhard\-float\fR is selected, enables generation of double-precision
  floating point instructions.  By default functions from \fIlibgcc\fR are used
! to perform double-precision floating point operations.
! .IP "\fB\-munordered\-float\fR" 4
  .IX Item "-munordered-float"
  When \fB\-mhard\-float\fR is selected, enables generation of unordered
  floating point compare and set flag (\f(CW\*(C`lf.sfun*\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform unordered floating point
  compare and set flag operations.
! .IP "\fB\-mcmov\fR" 4
  .IX Item "-mcmov"
  Enable generation of conditional move (\f(CW\*(C`l.cmov\*(C'\fR) instructions.  By
  default the equivalent will be generated using set and branch.
! .IP "\fB\-mror\fR" 4
  .IX Item "-mror"
  Enable generation of rotate right (\f(CW\*(C`l.ror\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform rotate right operations.
! .IP "\fB\-mrori\fR" 4
  .IX Item "-mrori"
  Enable generation of rotate right with immediate (\f(CW\*(C`l.rori\*(C'\fR) instructions.
  By default functions from \fIlibgcc\fR are used to perform rotate right with
  immediate operations.
! .IP "\fB\-msext\fR" 4
  .IX Item "-msext"
  Enable generation of sign extension (\f(CW\*(C`l.ext*\*(C'\fR) instructions.  By default
  memory loads are used to perform sign extension.
! .IP "\fB\-msfimm\fR" 4
  .IX Item "-msfimm"
  Enable generation of compare and set flag with immediate (\f(CW\*(C`l.sf*i\*(C'\fR)
  instructions.  By default extra instructions will be generated to store the
  immediate to a register first.
! .IP "\fB\-mshftimm\fR" 4
  .IX Item "-mshftimm"
  Enable generation of shift with immediate (\f(CW\*(C`l.srai\*(C'\fR, \f(CW\*(C`l.srli\*(C'\fR,
  \&\f(CW\*(C`l.slli\*(C'\fR) instructions.  By default extra instructions will be generated
  to store the immediate to a register first.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
! Generate OpenRISC code for the small model: The \s-1GOT\s0 is limited to 64k. This is
  the default model.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
! Generate OpenRISC code for the large model: The \s-1GOT\s0 may grow up to 4G in size.
  .PP
! \fI\s-1PDP\-11\s0 Options\fR
  .IX Subsection "PDP-11 Options"
  .PP
! These options are defined for the \s-1PDP\-11:\s0
! .IP "\fB\-mfpu\fR" 4
  .IX Item "-mfpu"
! Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
! point on the \s-1PDP\-11/40\s0 is not supported.)  Implies \-m45.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  Do not use hardware floating point.
! .IP "\fB\-mac0\fR" 4
  .IX Item "-mac0"
! Return floating-point results in ac0 (fr0 in Unix assembler syntax).
! .IP "\fB\-mno\-ac0\fR" 4
  .IX Item "-mno-ac0"
! Return floating-point results in memory.  This is the default.
! .IP "\fB\-m40\fR" 4
  .IX Item "-m40"
! Generate code for a \s-1PDP\-11/40.\s0  Implies \-msoft\-float \-mno\-split.
! .IP "\fB\-m45\fR" 4
  .IX Item "-m45"
! Generate code for a \s-1PDP\-11/45.\s0  This is the default.
! .IP "\fB\-m10\fR" 4
  .IX Item "-m10"
! Generate code for a \s-1PDP\-11/10.\s0  Implies \-msoft\-float \-mno\-split.
! .IP "\fB\-mint16\fR" 4
  .IX Item "-mint16"
  .PD 0
! .IP "\fB\-mno\-int32\fR" 4
  .IX Item "-mno-int32"
  .PD
  Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
! .IP "\fB\-mint32\fR" 4
  .IX Item "-mint32"
  .PD 0
! .IP "\fB\-mno\-int16\fR" 4
  .IX Item "-mno-int16"
  .PD
  Use 32\-bit \f(CW\*(C`int\*(C'\fR.
! .IP "\fB\-msplit\fR" 4
  .IX Item "-msplit"
  Target has split instruction and data space.  Implies \-m45.
! .IP "\fB\-munix\-asm\fR" 4
  .IX Item "-munix-asm"
  Use Unix assembler syntax.
! .IP "\fB\-mdec\-asm\fR" 4
  .IX Item "-mdec-asm"
! Use \s-1DEC\s0 assembler syntax.
! .IP "\fB\-mgnu\-asm\fR" 4
  .IX Item "-mgnu-asm"
! Use \s-1GNU\s0 assembler syntax.  This is the default.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
! Use the new \s-1LRA\s0 register allocator.  By default, the old \*(L"reload\*(R"
  allocator is used.
  .PP
  \fIPowerPC Options\fR
--- 29231,29369 ----
  .IX Subsection "OpenRISC Options"
  .PP
  These options are defined for OpenRISC:
! .IP \fB\-mboard=\fR\fIname\fR 4
  .IX Item "-mboard=name"
  Configure a board specific runtime.  This will be passed to the linker for
  newlib board library linking.  The default is \f(CW\*(C`or1ksim\*(C'\fR.
! .IP \fB\-mnewlib\fR 4
  .IX Item "-mnewlib"
  This option is ignored; it is for compatibility purposes only.  This used to
  select linker and preprocessor options for use with newlib.
! .IP \fB\-msoft\-div\fR 4
  .IX Item "-msoft-div"
  .PD 0
! .IP \fB\-mhard\-div\fR 4
  .IX Item "-mhard-div"
  .PD
  Select software or hardware divide (\f(CW\*(C`l.div\*(C'\fR, \f(CW\*(C`l.divu\*(C'\fR) instructions.
  This default is hardware divide.
! .IP \fB\-msoft\-mul\fR 4
  .IX Item "-msoft-mul"
  .PD 0
! .IP \fB\-mhard\-mul\fR 4
  .IX Item "-mhard-mul"
  .PD
  Select software or hardware multiply (\f(CW\*(C`l.mul\*(C'\fR, \f(CW\*(C`l.muli\*(C'\fR) instructions.
  This default is hardware multiply.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
  Select software or hardware for floating point operations.
  The default is software.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
! When \fB\-mhard\-float\fR is selected, enables generation of double\-precision
  floating point instructions.  By default functions from \fIlibgcc\fR are used
! to perform double\-precision floating point operations.
! .IP \fB\-munordered\-float\fR 4
  .IX Item "-munordered-float"
  When \fB\-mhard\-float\fR is selected, enables generation of unordered
  floating point compare and set flag (\f(CW\*(C`lf.sfun*\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform unordered floating point
  compare and set flag operations.
! .IP \fB\-mcmov\fR 4
  .IX Item "-mcmov"
  Enable generation of conditional move (\f(CW\*(C`l.cmov\*(C'\fR) instructions.  By
  default the equivalent will be generated using set and branch.
! .IP \fB\-mror\fR 4
  .IX Item "-mror"
  Enable generation of rotate right (\f(CW\*(C`l.ror\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform rotate right operations.
! .IP \fB\-mrori\fR 4
  .IX Item "-mrori"
  Enable generation of rotate right with immediate (\f(CW\*(C`l.rori\*(C'\fR) instructions.
  By default functions from \fIlibgcc\fR are used to perform rotate right with
  immediate operations.
! .IP \fB\-msext\fR 4
  .IX Item "-msext"
  Enable generation of sign extension (\f(CW\*(C`l.ext*\*(C'\fR) instructions.  By default
  memory loads are used to perform sign extension.
! .IP \fB\-msfimm\fR 4
  .IX Item "-msfimm"
  Enable generation of compare and set flag with immediate (\f(CW\*(C`l.sf*i\*(C'\fR)
  instructions.  By default extra instructions will be generated to store the
  immediate to a register first.
! .IP \fB\-mshftimm\fR 4
  .IX Item "-mshftimm"
  Enable generation of shift with immediate (\f(CW\*(C`l.srai\*(C'\fR, \f(CW\*(C`l.srli\*(C'\fR,
  \&\f(CW\*(C`l.slli\*(C'\fR) instructions.  By default extra instructions will be generated
  to store the immediate to a register first.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
! Generate OpenRISC code for the small model: The GOT is limited to 64k. This is
  the default model.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
! Generate OpenRISC code for the large model: The GOT may grow up to 4G in size.
  .PP
! \fIPDP\-11 Options\fR
  .IX Subsection "PDP-11 Options"
  .PP
! These options are defined for the PDP\-11:
! .IP \fB\-mfpu\fR 4
  .IX Item "-mfpu"
! Use hardware FPP floating point.  This is the default.  (FIS floating
! point on the PDP\-11/40 is not supported.)  Implies \-m45.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  Do not use hardware floating point.
! .IP \fB\-mac0\fR 4
  .IX Item "-mac0"
! Return floating\-point results in ac0 (fr0 in Unix assembler syntax).
! .IP \fB\-mno\-ac0\fR 4
  .IX Item "-mno-ac0"
! Return floating\-point results in memory.  This is the default.
! .IP \fB\-m40\fR 4
  .IX Item "-m40"
! Generate code for a PDP\-11/40.  Implies \-msoft\-float \-mno\-split.
! .IP \fB\-m45\fR 4
  .IX Item "-m45"
! Generate code for a PDP\-11/45.  This is the default.
! .IP \fB\-m10\fR 4
  .IX Item "-m10"
! Generate code for a PDP\-11/10.  Implies \-msoft\-float \-mno\-split.
! .IP \fB\-mint16\fR 4
  .IX Item "-mint16"
  .PD 0
! .IP \fB\-mno\-int32\fR 4
  .IX Item "-mno-int32"
  .PD
  Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
! .IP \fB\-mint32\fR 4
  .IX Item "-mint32"
  .PD 0
! .IP \fB\-mno\-int16\fR 4
  .IX Item "-mno-int16"
  .PD
  Use 32\-bit \f(CW\*(C`int\*(C'\fR.
! .IP \fB\-msplit\fR 4
  .IX Item "-msplit"
  Target has split instruction and data space.  Implies \-m45.
! .IP \fB\-munix\-asm\fR 4
  .IX Item "-munix-asm"
  Use Unix assembler syntax.
! .IP \fB\-mdec\-asm\fR 4
  .IX Item "-mdec-asm"
! Use DEC assembler syntax.
! .IP \fB\-mgnu\-asm\fR 4
  .IX Item "-mgnu-asm"
! Use GNU assembler syntax.  This is the default.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
! Use the new LRA register allocator.  By default, the old "reload"
  allocator is used.
  .PP
  \fIPowerPC Options\fR
*************** allocator is used.
*** 29436,29449 ****
  .PP
  These are listed under
  .PP
! \fI\s-1PRU\s0 Options\fR
  .IX Subsection "PRU Options"
  .PP
! These command-line options are defined for \s-1PRU\s0 target:
! .IP "\fB\-minrt\fR" 4
  .IX Item "-minrt"
  Link with a minimum runtime environment.  This can significantly reduce
! the size of the final \s-1ELF\s0 binary, but some standard C runtime features
  are removed.
  .Sp
  This option disables support for static initializers and constructors.
--- 29371,29384 ----
  .PP
  These are listed under
  .PP
! \fIPRU Options\fR
  .IX Subsection "PRU Options"
  .PP
! These command\-line options are defined for PRU target:
! .IP \fB\-minrt\fR 4
  .IX Item "-minrt"
  Link with a minimum runtime environment.  This can significantly reduce
! the size of the final ELF binary, but some standard C runtime features
  are removed.
  .Sp
  This option disables support for static initializers and constructors.
*************** program will not use those features.
*** 29454,29492 ****
  The minimal startup code would not pass \f(CW\*(C`argc\*(C'\fR and \f(CW\*(C`argv\*(C'\fR arguments
  to \f(CW\*(C`main\*(C'\fR, so the latter must be declared as \f(CW\*(C`int main (void)\*(C'\fR.
  This is already the norm for most firmware projects.
! .IP "\fB\-mmcu=\fR\fImcu\fR" 4
  .IX Item "-mmcu=mcu"
! Specify the \s-1PRU\s0 hardware variant to use.  A correspondingly named
  spec file would be loaded, passing the memory region sizes to
! the linker and defining hardware-specific C macros.
  .Sp
  Newlib provides only the \f(CW\*(C`sim\*(C'\fR spec, intended for running
  regression tests using a simulator.  Specs for real hardware can be
  obtained by installing the
  GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu/\*(C'\fR) package.
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
! Make \s-1GCC\s0 pass the \fB\-\-no\-relax\fR command-line option to the linker
  instead of the \fB\-\-relax\fR option.
! .IP "\fB\-mloop\fR" 4
  .IX Item "-mloop"
! Allow (or do not allow) \s-1GCC\s0 to use the \s-1LOOP\s0 instruction.
! .IP "\fB\-mabi=\fR\fIvariant\fR" 4
  .IX Item "-mabi=variant"
! Specify the \s-1ABI\s0 variant to output code for.  \fB\-mabi=ti\fR selects the
! unmodified \s-1TI ABI\s0 while \fB\-mabi=gnu\fR selects a \s-1GNU\s0 variant that copes
! more naturally with certain \s-1GCC\s0 assumptions.  These are the differences:
  .RS 4
  .IP "\fBFunction Pointer Size\fR" 4
  .IX Item "Function Pointer Size"
! \&\s-1TI ABI\s0 specifies that function (code) pointers are 16\-bit, whereas \s-1GNU\s0
  supports only 32\-bit data and code pointers.
  .IP "\fBOptional Return Value Pointer\fR" 4
  .IX Item "Optional Return Value Pointer"
  Function return values larger than 64 bits are passed by using a hidden
! pointer as the first argument of the function.  \s-1TI ABI,\s0 though, mandates that
! the pointer can be \s-1NULL\s0 in case the caller is not using the returned value.
! \&\s-1GNU\s0 always passes and expects a valid return value pointer.
  .RE
  .RS 4
  .Sp
--- 29389,29427 ----
  The minimal startup code would not pass \f(CW\*(C`argc\*(C'\fR and \f(CW\*(C`argv\*(C'\fR arguments
  to \f(CW\*(C`main\*(C'\fR, so the latter must be declared as \f(CW\*(C`int main (void)\*(C'\fR.
  This is already the norm for most firmware projects.
! .IP \fB\-mmcu=\fR\fImcu\fR 4
  .IX Item "-mmcu=mcu"
! Specify the PRU hardware variant to use.  A correspondingly named
  spec file would be loaded, passing the memory region sizes to
! the linker and defining hardware\-specific C macros.
  .Sp
  Newlib provides only the \f(CW\*(C`sim\*(C'\fR spec, intended for running
  regression tests using a simulator.  Specs for real hardware can be
  obtained by installing the
  GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu/\*(C'\fR) package.
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
! Make GCC pass the \fB\-\-no\-relax\fR command\-line option to the linker
  instead of the \fB\-\-relax\fR option.
! .IP \fB\-mloop\fR 4
  .IX Item "-mloop"
! Allow (or do not allow) GCC to use the LOOP instruction.
! .IP \fB\-mabi=\fR\fIvariant\fR 4
  .IX Item "-mabi=variant"
! Specify the ABI variant to output code for.  \fB\-mabi=ti\fR selects the
! unmodified TI ABI while \fB\-mabi=gnu\fR selects a GNU variant that copes
! more naturally with certain GCC assumptions.  These are the differences:
  .RS 4
  .IP "\fBFunction Pointer Size\fR" 4
  .IX Item "Function Pointer Size"
! TI ABI specifies that function (code) pointers are 16\-bit, whereas GNU
  supports only 32\-bit data and code pointers.
  .IP "\fBOptional Return Value Pointer\fR" 4
  .IX Item "Optional Return Value Pointer"
  Function return values larger than 64 bits are passed by using a hidden
! pointer as the first argument of the function.  TI ABI, though, mandates that
! the pointer can be NULL in case the caller is not using the returned value.
! GNU always passes and expects a valid return value pointer.
  .RE
  .RS 4
  .Sp
*************** when any of the above code constructs is
*** 29495,29532 ****
  the standard C library cannot be built and it is omitted when linking with
  \&\fB\-mabi=ti\fR.
  .Sp
! Relaxation is a \s-1GNU\s0 feature and for safety reasons is disabled when using
! \&\fB\-mabi=ti\fR.  The \s-1TI\s0 toolchain does not emit relocations for QBBx
! instructions, so the \s-1GNU\s0 linker cannot adjust them when shortening adjacent
! \&\s-1LDI32\s0 pseudo instructions.
  .RE
  .PP
! \fIRISC-V Options\fR
  .IX Subsection "RISC-V Options"
  .PP
! These command-line options are defined for RISC-V targets:
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP "\fB\-mplt\fR" 4
  .IX Item "-mplt"
  .PD 0
! .IP "\fB\-mno\-plt\fR" 4
  .IX Item "-mno-plt"
  .PD
! When generating \s-1PIC\s0 code, do or don't allow the use of PLTs. Ignored for
! non-PIC.  The default is \fB\-mplt\fR.
! .IP "\fB\-mabi=\fR\fIABI-string\fR" 4
  .IX Item "-mabi=ABI-string"
! Specify integer and floating-point calling convention.  \fIABI-string\fR
  contains two parts: the size of integer types and the registers used for
! floating-point types.  For example \fB\-march=rv64ifd \-mabi=lp64d\fR means that
  \&\fBlong\fR and pointers are 64\-bit (implicitly defining \fBint\fR to be
! 32\-bit), and that floating-point values up to 64 bits wide are passed in F
  registers.  Contrast this with \fB\-march=rv64ifd \-mabi=lp64f\fR, which still
  allows the compiler to generate code that uses the F and D extensions but only
! allows floating-point values up to 32 bits long to be passed in registers; or
! \&\fB\-march=rv64ifd \-mabi=lp64\fR, in which no floating-point arguments will be
  passed in registers.
  .Sp
  The default for this argument is system dependent, users who want a specific
--- 29430,29467 ----
  the standard C library cannot be built and it is omitted when linking with
  \&\fB\-mabi=ti\fR.
  .Sp
! Relaxation is a GNU feature and for safety reasons is disabled when using
! \&\fB\-mabi=ti\fR.  The TI toolchain does not emit relocations for QBBx
! instructions, so the GNU linker cannot adjust them when shortening adjacent
! LDI32 pseudo instructions.
  .RE
  .PP
! \fIRISC\-V Options\fR
  .IX Subsection "RISC-V Options"
  .PP
! These command\-line options are defined for RISC\-V targets:
! .IP \fB\-mbranch\-cost=\fR\fIn\fR 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP \fB\-mplt\fR 4
  .IX Item "-mplt"
  .PD 0
! .IP \fB\-mno\-plt\fR 4
  .IX Item "-mno-plt"
  .PD
! When generating PIC code, do or don\*(Aqt allow the use of PLTs. Ignored for
! non\-PIC.  The default is \fB\-mplt\fR.
! .IP \fB\-mabi=\fR\fIABI\-string\fR 4
  .IX Item "-mabi=ABI-string"
! Specify integer and floating\-point calling convention.  \fIABI\-string\fR
  contains two parts: the size of integer types and the registers used for
! floating\-point types.  For example \fB\-march=rv64ifd \-mabi=lp64d\fR means that
  \&\fBlong\fR and pointers are 64\-bit (implicitly defining \fBint\fR to be
! 32\-bit), and that floating\-point values up to 64 bits wide are passed in F
  registers.  Contrast this with \fB\-march=rv64ifd \-mabi=lp64f\fR, which still
  allows the compiler to generate code that uses the F and D extensions but only
! allows floating\-point values up to 32 bits long to be passed in registers; or
! \&\fB\-march=rv64ifd \-mabi=lp64\fR, in which no floating\-point arguments will be
  passed in registers.
  .Sp
  The default for this argument is system dependent, users who want a specific
*************** calling convention should specify one ex
*** 29534,29605 ****
  conventions are: \fBilp32\fR, \fBilp32f\fR, \fBilp32d\fR, \fBlp64\fR,
  \&\fBlp64f\fR, and \fBlp64d\fR.  Some calling conventions are impossible to
  implement on some ISAs: for example, \fB\-march=rv32if \-mabi=ilp32d\fR is
! invalid because the \s-1ABI\s0 requires 64\-bit values be passed in F registers, but F
! registers are only 32 bits wide.  There are also the \fBilp32e\fR \s-1ABI\s0 that can
! only be used with the \fBrv32e\fR architecture and the \fBlp64e\fR \s-1ABI\s0 that
  can only be used with the \fBrv64e\fR.  Those ABIs are not well specified at
  present, and are subject to change.
! .IP "\fB\-mfdiv\fR" 4
  .IX Item "-mfdiv"
  .PD 0
! .IP "\fB\-mno\-fdiv\fR" 4
  .IX Item "-mno-fdiv"
  .PD
! Do or don't use hardware floating-point divide and square root instructions.
! This requires the F or D extensions for floating-point registers.  The default
  is to use them if the specified architecture has these instructions.
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
! Do or don't use hardware instructions for integer division.  This requires the
  M extension.  The default is to use them if the specified architecture has
  these instructions.
! .IP "\fB\-misa\-spec=\fR\fIISA-spec-string\fR" 4
  .IX Item "-misa-spec=ISA-spec-string"
! Specify the version of the RISC-V Unprivileged (formerly User-Level)
! \&\s-1ISA\s0 specification to produce code conforming to.  The possibilities
! for \fIISA-spec-string\fR are:
  .RS 4
! .ie n .IP "2.2" 4
! .el .IP "\f(CW2.2\fR" 4
  .IX Item "2.2"
  Produce code conforming to version 2.2.
! .ie n .IP "20190608" 4
! .el .IP "\f(CW20190608\fR" 4
  .IX Item "20190608"
  Produce code conforming to version 20190608.
! .ie n .IP "20191213" 4
! .el .IP "\f(CW20191213\fR" 4
  .IX Item "20191213"
  Produce code conforming to version 20191213.
  .RE
  .RS 4
  .Sp
! The default is \fB\-misa\-spec=20191213\fR unless \s-1GCC\s0 has been configured
  with \fB\-\-with\-isa\-spec=\fR specifying a different default version.
  .RE
! .IP "\fB\-march=\fR\fIISA-string\fR" 4
  .IX Item "-march=ISA-string"
! Generate code for given RISC-V \s-1ISA\s0 (e.g. \fBrv64im\fR).  \s-1ISA\s0 strings must be
! lower-case.  Examples include \fBrv64i\fR, \fBrv32g\fR, \fBrv32e\fR, and
  \&\fBrv32imaf\fR. Additionally, a special value \fBhelp\fR
  (\fB\-march=help\fR) is accepted to list all supported extensions.
  .Sp
! The syntax of the \s-1ISA\s0 string is defined as follows:
  .RS 4
! .ie n .IP """The string must start with \fBrv32\fP or \fBrv64\fP, followed by""" 4
! .el .IP "\f(CWThe string must start with \f(CBrv32\f(CW or \f(CBrv64\f(CW, followed by\fR" 4
  .IX Item "The string must start with rv32 or rv64, followed by"
! \&\fBi\fR, \fBe\fR, or \fBg\fR, referred to as the base \s-1ISA.\s0
  .ie n .IP """The subsequent part of the string is a list of extension names. Extension""" 4
  .el .IP "\f(CWThe subsequent part of the string is a list of extension names. Extension\fR" 4
  .IX Item "The subsequent part of the string is a list of extension names. Extension"
! names can be categorized as multi-letter (e.g. \fBzba\fR) and single-letter
! (e.g. \fBv\fR). Single-letter extensions can appear consecutively,
! but multi-letter extensions must be separated by underscores.
  .ie n .IP """An underscore can appear anywhere after the base ISA. It has no specific""" 4
  .el .IP "\f(CWAn underscore can appear anywhere after the base ISA. It has no specific\fR" 4
  .IX Item "An underscore can appear anywhere after the base ISA. It has no specific"
--- 29469,29540 ----
  conventions are: \fBilp32\fR, \fBilp32f\fR, \fBilp32d\fR, \fBlp64\fR,
  \&\fBlp64f\fR, and \fBlp64d\fR.  Some calling conventions are impossible to
  implement on some ISAs: for example, \fB\-march=rv32if \-mabi=ilp32d\fR is
! invalid because the ABI requires 64\-bit values be passed in F registers, but F
! registers are only 32 bits wide.  There are also the \fBilp32e\fR ABI that can
! only be used with the \fBrv32e\fR architecture and the \fBlp64e\fR ABI that
  can only be used with the \fBrv64e\fR.  Those ABIs are not well specified at
  present, and are subject to change.
! .IP \fB\-mfdiv\fR 4
  .IX Item "-mfdiv"
  .PD 0
! .IP \fB\-mno\-fdiv\fR 4
  .IX Item "-mno-fdiv"
  .PD
! Do or don\*(Aqt use hardware floating\-point divide and square root instructions.
! This requires the F or D extensions for floating\-point registers.  The default
  is to use them if the specified architecture has these instructions.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
! Do or don\*(Aqt use hardware instructions for integer division.  This requires the
  M extension.  The default is to use them if the specified architecture has
  these instructions.
! .IP \fB\-misa\-spec=\fR\fIISA\-spec\-string\fR 4
  .IX Item "-misa-spec=ISA-spec-string"
! Specify the version of the RISC\-V Unprivileged (formerly User\-Level)
! ISA specification to produce code conforming to.  The possibilities
! for \fIISA\-spec\-string\fR are:
  .RS 4
! .ie n .IP 2.2 4
! .el .IP \f(CW2.2\fR 4
  .IX Item "2.2"
  Produce code conforming to version 2.2.
! .ie n .IP 20190608 4
! .el .IP \f(CW20190608\fR 4
  .IX Item "20190608"
  Produce code conforming to version 20190608.
! .ie n .IP 20191213 4
! .el .IP \f(CW20191213\fR 4
  .IX Item "20191213"
  Produce code conforming to version 20191213.
  .RE
  .RS 4
  .Sp
! The default is \fB\-misa\-spec=20191213\fR unless GCC has been configured
  with \fB\-\-with\-isa\-spec=\fR specifying a different default version.
  .RE
! .IP \fB\-march=\fR\fIISA\-string\fR 4
  .IX Item "-march=ISA-string"
! Generate code for given RISC\-V ISA (e.g. \fBrv64im\fR).  ISA strings must be
! lower\-case.  Examples include \fBrv64i\fR, \fBrv32g\fR, \fBrv32e\fR, and
  \&\fBrv32imaf\fR. Additionally, a special value \fBhelp\fR
  (\fB\-march=help\fR) is accepted to list all supported extensions.
  .Sp
! The syntax of the ISA string is defined as follows:
  .RS 4
! .ie n .IP """The string must start with \fBrv32\fR or \fBrv64\fR, followed by""" 4
! .el .IP "\f(CWThe string must start with \fR\f(CBrv32\fR\f(CW or \fR\f(CBrv64\fR\f(CW, followed by\fR" 4
  .IX Item "The string must start with rv32 or rv64, followed by"
! \&\fBi\fR, \fBe\fR, or \fBg\fR, referred to as the base ISA.
  .ie n .IP """The subsequent part of the string is a list of extension names. Extension""" 4
  .el .IP "\f(CWThe subsequent part of the string is a list of extension names. Extension\fR" 4
  .IX Item "The subsequent part of the string is a list of extension names. Extension"
! names can be categorized as multi\-letter (e.g. \fBzba\fR) and single\-letter
! (e.g. \fBv\fR). Single\-letter extensions can appear consecutively,
! but multi\-letter extensions must be separated by underscores.
  .ie n .IP """An underscore can appear anywhere after the base ISA. It has no specific""" 4
  .el .IP "\f(CWAn underscore can appear anywhere after the base ISA. It has no specific\fR" 4
  .IX Item "An underscore can appear anywhere after the base ISA. It has no specific"
*************** Supported extension are listed below:
*** 29616,30103 ****
  .IP "\fIExtension Name\fR : \fISupported Version\fR : \fIDescription\fR" 4
  .IX Item "Extension Name : Supported Version : Description"
  .PD 0
! .IP "i" 4
  .IX Item "i"
  .PD
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Base integer extension.
! .IP "e" 4
  .IX Item "e"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Reduced base integer extension.
! .IP "g" 4
  .IX Item "g"
  \&\f(CW@tab\fR \-
! \&\f(CW@tab\fR General-purpose computing base extension, \fBg\fR will expand to
  \&\fBi\fR, \fBm\fR, \fBa\fR, \fBf\fR, \fBd\fR, \fBzicsr\fR and
  \&\fBzifencei\fR.
! .IP "m" 4
  .IX Item "m"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Integer multiplication and division extension.
! .IP "a" 4
  .IX Item "a"
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Atomic extension.
! .IP "f" 4
  .IX Item "f"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Single-precision floating-point extension.
! .IP "d" 4
  .IX Item "d"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Double-precision floating-point extension.
! .IP "c" 4
  .IX Item "c"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Compressed extension.
! .IP "h" 4
  .IX Item "h"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hypervisor extension.
! .IP "v" 4
  .IX Item "v"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extension.
! .IP "zicsr" 4
  .IX Item "zicsr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Control and status register access extension.
! .IP "zifencei" 4
  .IX Item "zifencei"
  \&\f(CW@tab\fR 2.0
! \&\f(CW@tab\fR Instruction-fetch fence extension.
! .IP "zicond" 4
  .IX Item "zicond"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer conditional operations extension.
! .IP "za64rs" 4
  .IX Item "za64rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 64 bytes.
! .IP "za128rs" 4
  .IX Item "za128rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 128 bytes.
! .IP "zawrs" 4
  .IX Item "zawrs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Wait-on-reservation-set extension.
! .IP "zba" 4
  .IX Item "zba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Address calculation extension.
! .IP "zbb" 4
  .IX Item "zbb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Basic bit manipulation extension.
! .IP "zbc" 4
  .IX Item "zbc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Carry-less multiplication extension.
! .IP "zbs" 4
  .IX Item "zbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single-bit operation extension.
! .IP "zfinx" 4
  .IX Item "zfinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single-precision floating-point in integer registers extension.
! .IP "zdinx" 4
  .IX Item "zdinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Double-precision floating-point in integer registers extension.
! .IP "zhinx" 4
  .IX Item "zhinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half-precision floating-point in integer registers extension.
! .IP "zhinxmin" 4
  .IX Item "zhinxmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half-precision floating-point in integer registers extension.
! .IP "zbkb" 4
  .IX Item "zbkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography bit-manipulation extension.
! .IP "zbkc" 4
  .IX Item "zbkc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography carry-less multiply extension.
! .IP "zbkx" 4
  .IX Item "zbkx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cryptography crossbar permutation extension.
! .IP "zkne" 4
  .IX Item "zkne"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1AES\s0 Encryption extension.
! .IP "zknd" 4
  .IX Item "zknd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1AES\s0 Decryption extension.
! .IP "zknh" 4
  .IX Item "zknh"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hash function extension.
! .IP "zkr" 4
  .IX Item "zkr"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Entropy source extension.
! .IP "zksed" 4
  .IX Item "zksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1SM4\s0 block cipher extension.
! .IP "zksh" 4
  .IX Item "zksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1SM3\s0 hash function extension.
! .IP "zkt" 4
  .IX Item "zkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Data independent execution latency extension.
! .IP "zk" 4
  .IX Item "zk"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Standard scalar cryptography extension.
! .IP "zkn" 4
  .IX Item "zkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1NIST\s0 algorithm suite extension.
! .IP "zks" 4
  .IX Item "zks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR ShangMi algorithm suite extension.
! .IP "zihintntl" 4
  .IX Item "zihintntl"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Non-temporal locality hints extension.
! .IP "zihintpause" 4
  .IX Item "zihintpause"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Pause hint extension.
! .IP "zicboz" 4
  .IX Item "zicboz"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache-block zero extension.
! .IP "zicbom" 4
  .IX Item "zicbom"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache-block management extension.
! .IP "zicbop" 4
  .IX Item "zicbop"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache-block prefetch extension.
! .IP "zic64b" 4
  .IX Item "zic64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cache block size isf 64 bytes.
! .IP "ziccamoa" 4
  .IX Item "ziccamoa"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports all atomics in A.
! .IP "ziccif" 4
  .IX Item "ziccif"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports instruction fetch with atomicity requirement.
! .IP "zicclsm" 4
  .IX Item "zicclsm"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports misaligned loads/stores.
! .IP "ziccrse" 4
  .IX Item "ziccrse"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Main memory supports forward progress on \s-1LR/SC\s0 sequences.
! .IP "zicntr" 4
  .IX Item "zicntr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for base counters and timers.
! .IP "zihpm" 4
  .IX Item "zihpm"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for hardware performance counters.
! .IP "ztso" 4
  .IX Item "ztso"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Total store ordering extension.
! .IP "zve32x" 4
  .IX Item "zve32x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve32f" 4
  .IX Item "zve32f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve64x" 4
  .IX Item "zve64x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve64f" 4
  .IX Item "zve64f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve64d" 4
  .IX Item "zve64d"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zvl32b" 4
  .IX Item "zvl32b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl64b" 4
  .IX Item "zvl64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl128b" 4
  .IX Item "zvl128b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl256b" 4
  .IX Item "zvl256b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl512b" 4
  .IX Item "zvl512b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl1024b" 4
  .IX Item "zvl1024b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl2048b" 4
  .IX Item "zvl2048b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl4096b" 4
  .IX Item "zvl4096b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvbb" 4
  .IX Item "zvbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector basic bit-manipulation extension.
! .IP "zvbc" 4
  .IX Item "zvbc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector carryless multiplication extension.
! .IP "zvkb" 4
  .IX Item "zvkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector cryptography bit-manipulation extension.
! .IP "zvkg" 4
  .IX Item "zvkg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1GCM/GMAC\s0 extension.
! .IP "zvkned" 4
  .IX Item "zvkned"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1AES\s0 block cipher extension.
! .IP "zvknha" 4
  .IX Item "zvknha"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SHA\-2\s0 secure hash extension.
! .IP "zvknhb" 4
  .IX Item "zvknhb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SHA\-2\s0 secure hash extension.
! .IP "zvksed" 4
  .IX Item "zvksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SM4\s0 Block Cipher extension.
! .IP "zvksh" 4
  .IX Item "zvksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SM3\s0 Secure Hash extension.
! .IP "zvkn" 4
  .IX Item "zvkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1NIST\s0 Algorithm Suite extension, \fBzvkn\fR will expand to
  \&\fBzvkned\fR, \fBzvknhb\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP "zvknc" 4
  .IX Item "zvknc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1NIST\s0 Algorithm Suite with carryless multiply extension, \fBzvknc\fR
  will expand to \fBzvkn\fR and \fBzvbc\fR.
! .IP "zvkng" 4
  .IX Item "zvkng"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1NIST\s0 Algorithm Suite with \s-1GCM\s0 extension, \fBzvkng\fR will expand
  to \fBzvkn\fR and \fBzvkg\fR.
! .IP "zvks" 4
  .IX Item "zvks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite extension, \fBzvks\fR will expand
  to \fBzvksed\fR, \fBzvksh\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP "zvksc" 4
  .IX Item "zvksc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite with carryless multiplication extension,
  \&\fBzvksc\fR will expand to \fBzvks\fR and \fBzvbc\fR.
! .IP "zvksg" 4
  .IX Item "zvksg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector ShangMi algorithm suite with \s-1GCM\s0 extension, \fBzvksg\fR will expand
  to \fBzvks\fR and \fBzvkg\fR.
! .IP "zvkt" 4
  .IX Item "zvkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector data independent execution latency extension.
! .IP "zfh" 4
  .IX Item "zfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half-precision floating-point extension.
! .IP "zfhmin" 4
  .IX Item "zfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half-precision floating-point extension.
! .IP "zvfh" 4
  .IX Item "zvfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector half-precision floating-point extension.
! .IP "zvfhmin" 4
  .IX Item "zvfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector minimal half-precision floating-point extension.
! .IP "zvfbfmin" 4
  .IX Item "zvfbfmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1BF16\s0 converts extension.
! .IP "zfa" 4
  .IX Item "zfa"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Additional floating-point extension.
! .IP "zmmul" 4
  .IX Item "zmmul"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer multiplication extension.
! .IP "zca" 4
  .IX Item "zca"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer compressed instruction extension.
! .IP "zcf" 4
  .IX Item "zcf"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed single-precision floating point loads and stores extension.
! .IP "zcd" 4
  .IX Item "zcd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed double-precision floating point loads and stores extension.
! .IP "zcb" 4
  .IX Item "zcb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Simple compressed instruction extension.
! .IP "zce" 4
  .IX Item "zce"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed instruction extensions for embedded processors.
! .IP "zcmp" 4
  .IX Item "zcmp"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed push pop extension.
! .IP "zcmt" 4
  .IX Item "zcmt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Table jump instruction extension.
! .IP "smaia" 4
  .IX Item "smaia"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Advanced interrupt architecture extension.
! .IP "smepmp" 4
  .IX Item "smepmp"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1PMP\s0 Enhancements for memory access and execution prevention on Machine mode.
! .IP "smstateen" 4
  .IX Item "smstateen"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR State enable extension.
! .IP "ssaia" 4
  .IX Item "ssaia"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Advanced interrupt architecture extension for supervisor-mode.
! .IP "sscofpmf" 4
  .IX Item "sscofpmf"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Count overflow & filtering extension.
! .IP "ssstateen" 4
  .IX Item "ssstateen"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR State-enable extension for supervisor-mode.
! .IP "sstc" 4
  .IX Item "sstc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Supervisor-mode timer interrupts extension.
! .IP "svinval" 4
  .IX Item "svinval"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Fine-grained address-translation cache invalidation extension.
! .IP "svnapot" 4
  .IX Item "svnapot"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1NAPOT\s0 translation contiguity extension.
! .IP "svpbmt" 4
  .IX Item "svpbmt"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Page-based memory types extension.
! .IP "xcvmac" 4
  .IX Item "xcvmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core-V multiply-accumulate extension.
! .IP "xcvalu" 4
  .IX Item "xcvalu"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core-V miscellaneous \s-1ALU\s0 extension.
! .IP "xcvelw" 4
  .IX Item "xcvelw"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core-V event load word extension.
! .IP "xtheadba" 4
  .IX Item "xtheadba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head address calculation extension.
! .IP "xtheadbb" 4
  .IX Item "xtheadbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head basic bit-manipulation extension.
! .IP "xtheadbs" 4
  .IX Item "xtheadbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head single-bit instructions extension.
! .IP "xtheadcmo" 4
  .IX Item "xtheadcmo"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head cache management operations extension.
! .IP "xtheadcondmov" 4
  .IX Item "xtheadcondmov"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head conditional move extension.
! .IP "xtheadfmemidx" 4
  .IX Item "xtheadfmemidx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head indexed memory operations for floating-point registers extension.
! .IP "xtheadfmv" 4
  .IX Item "xtheadfmv"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head double floating-point high-bit data transmission extension.
! .IP "xtheadint" 4
  .IX Item "xtheadint"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head acceleration interruption extension.
! .IP "xtheadmac" 4
  .IX Item "xtheadmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multiply-accumulate extension.
! .IP "xtheadmemidx" 4
  .IX Item "xtheadmemidx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head indexed memory operation extension.
! .IP "xtheadmempair" 4
  .IX Item "xtheadmempair"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head two-GPR memory operation extension.
! .IP "xtheadsync" 4
  .IX Item "xtheadsync"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multi-core synchronization extension.
! .IP "xventanacondops" 4
  .IX Item "xventanacondops"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Ventana integer conditional operations extension.
--- 29551,30038 ----
  .IP "\fIExtension Name\fR : \fISupported Version\fR : \fIDescription\fR" 4
  .IX Item "Extension Name : Supported Version : Description"
  .PD 0
! .IP i 4
  .IX Item "i"
  .PD
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Base integer extension.
! .IP e 4
  .IX Item "e"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Reduced base integer extension.
! .IP g 4
  .IX Item "g"
  \&\f(CW@tab\fR \-
! \&\f(CW@tab\fR General\-purpose computing base extension, \fBg\fR will expand to
  \&\fBi\fR, \fBm\fR, \fBa\fR, \fBf\fR, \fBd\fR, \fBzicsr\fR and
  \&\fBzifencei\fR.
! .IP m 4
  .IX Item "m"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Integer multiplication and division extension.
! .IP a 4
  .IX Item "a"
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Atomic extension.
! .IP f 4
  .IX Item "f"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Single\-precision floating\-point extension.
! .IP d 4
  .IX Item "d"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Double\-precision floating\-point extension.
! .IP c 4
  .IX Item "c"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Compressed extension.
! .IP h 4
  .IX Item "h"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hypervisor extension.
! .IP v 4
  .IX Item "v"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extension.
! .IP zicsr 4
  .IX Item "zicsr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Control and status register access extension.
! .IP zifencei 4
  .IX Item "zifencei"
  \&\f(CW@tab\fR 2.0
! \&\f(CW@tab\fR Instruction\-fetch fence extension.
! .IP zicond 4
  .IX Item "zicond"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer conditional operations extension.
! .IP za64rs 4
  .IX Item "za64rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 64 bytes.
! .IP za128rs 4
  .IX Item "za128rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 128 bytes.
! .IP zawrs 4
  .IX Item "zawrs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Wait\-on\-reservation\-set extension.
! .IP zba 4
  .IX Item "zba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Address calculation extension.
! .IP zbb 4
  .IX Item "zbb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Basic bit manipulation extension.
! .IP zbc 4
  .IX Item "zbc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Carry\-less multiplication extension.
! .IP zbs 4
  .IX Item "zbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single\-bit operation extension.
! .IP zfinx 4
  .IX Item "zfinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single\-precision floating\-point in integer registers extension.
! .IP zdinx 4
  .IX Item "zdinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Double\-precision floating\-point in integer registers extension.
! .IP zhinx 4
  .IX Item "zhinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half\-precision floating\-point in integer registers extension.
! .IP zhinxmin 4
  .IX Item "zhinxmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half\-precision floating\-point in integer registers extension.
! .IP zbkb 4
  .IX Item "zbkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography bit\-manipulation extension.
! .IP zbkc 4
  .IX Item "zbkc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography carry\-less multiply extension.
! .IP zbkx 4
  .IX Item "zbkx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cryptography crossbar permutation extension.
! .IP zkne 4
  .IX Item "zkne"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR AES Encryption extension.
! .IP zknd 4
  .IX Item "zknd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR AES Decryption extension.
! .IP zknh 4
  .IX Item "zknh"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hash function extension.
! .IP zkr 4
  .IX Item "zkr"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Entropy source extension.
! .IP zksed 4
  .IX Item "zksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR SM4 block cipher extension.
! .IP zksh 4
  .IX Item "zksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR SM3 hash function extension.
! .IP zkt 4
  .IX Item "zkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Data independent execution latency extension.
! .IP zk 4
  .IX Item "zk"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Standard scalar cryptography extension.
! .IP zkn 4
  .IX Item "zkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR NIST algorithm suite extension.
! .IP zks 4
  .IX Item "zks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR ShangMi algorithm suite extension.
! .IP zihintntl 4
  .IX Item "zihintntl"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Non\-temporal locality hints extension.
! .IP zihintpause 4
  .IX Item "zihintpause"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Pause hint extension.
! .IP zicboz 4
  .IX Item "zicboz"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache\-block zero extension.
! .IP zicbom 4
  .IX Item "zicbom"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache\-block management extension.
! .IP zicbop 4
  .IX Item "zicbop"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache\-block prefetch extension.
! .IP zic64b 4
  .IX Item "zic64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cache block size isf 64 bytes.
! .IP ziccamoa 4
  .IX Item "ziccamoa"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports all atomics in A.
! .IP ziccif 4
  .IX Item "ziccif"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports instruction fetch with atomicity requirement.
! .IP zicclsm 4
  .IX Item "zicclsm"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports misaligned loads/stores.
! .IP ziccrse 4
  .IX Item "ziccrse"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Main memory supports forward progress on LR/SC sequences.
! .IP zicntr 4
  .IX Item "zicntr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for base counters and timers.
! .IP zihpm 4
  .IX Item "zihpm"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for hardware performance counters.
! .IP ztso 4
  .IX Item "ztso"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Total store ordering extension.
! .IP zve32x 4
  .IX Item "zve32x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve32f 4
  .IX Item "zve32f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve64x 4
  .IX Item "zve64x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve64f 4
  .IX Item "zve64f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve64d 4
  .IX Item "zve64d"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zvl32b 4
  .IX Item "zvl32b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl64b 4
  .IX Item "zvl64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl128b 4
  .IX Item "zvl128b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl256b 4
  .IX Item "zvl256b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl512b 4
  .IX Item "zvl512b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl1024b 4
  .IX Item "zvl1024b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl2048b 4
  .IX Item "zvl2048b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl4096b 4
  .IX Item "zvl4096b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvbb 4
  .IX Item "zvbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector basic bit\-manipulation extension.
! .IP zvbc 4
  .IX Item "zvbc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector carryless multiplication extension.
! .IP zvkb 4
  .IX Item "zvkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector cryptography bit\-manipulation extension.
! .IP zvkg 4
  .IX Item "zvkg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector GCM/GMAC extension.
! .IP zvkned 4
  .IX Item "zvkned"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector AES block cipher extension.
! .IP zvknha 4
  .IX Item "zvknha"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SHA\-2 secure hash extension.
! .IP zvknhb 4
  .IX Item "zvknhb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SHA\-2 secure hash extension.
! .IP zvksed 4
  .IX Item "zvksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SM4 Block Cipher extension.
! .IP zvksh 4
  .IX Item "zvksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SM3 Secure Hash extension.
! .IP zvkn 4
  .IX Item "zvkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector NIST Algorithm Suite extension, \fBzvkn\fR will expand to
  \&\fBzvkned\fR, \fBzvknhb\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP zvknc 4
  .IX Item "zvknc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector NIST Algorithm Suite with carryless multiply extension, \fBzvknc\fR
  will expand to \fBzvkn\fR and \fBzvbc\fR.
! .IP zvkng 4
  .IX Item "zvkng"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector NIST Algorithm Suite with GCM extension, \fBzvkng\fR will expand
  to \fBzvkn\fR and \fBzvkg\fR.
! .IP zvks 4
  .IX Item "zvks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite extension, \fBzvks\fR will expand
  to \fBzvksed\fR, \fBzvksh\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP zvksc 4
  .IX Item "zvksc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite with carryless multiplication extension,
  \&\fBzvksc\fR will expand to \fBzvks\fR and \fBzvbc\fR.
! .IP zvksg 4
  .IX Item "zvksg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector ShangMi algorithm suite with GCM extension, \fBzvksg\fR will expand
  to \fBzvks\fR and \fBzvkg\fR.
! .IP zvkt 4
  .IX Item "zvkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector data independent execution latency extension.
! .IP zfh 4
  .IX Item "zfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half\-precision floating\-point extension.
! .IP zfhmin 4
  .IX Item "zfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half\-precision floating\-point extension.
! .IP zvfh 4
  .IX Item "zvfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector half\-precision floating\-point extension.
! .IP zvfhmin 4
  .IX Item "zvfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector minimal half\-precision floating\-point extension.
! .IP zvfbfmin 4
  .IX Item "zvfbfmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector BF16 converts extension.
! .IP zfa 4
  .IX Item "zfa"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Additional floating\-point extension.
! .IP zmmul 4
  .IX Item "zmmul"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer multiplication extension.
! .IP zca 4
  .IX Item "zca"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer compressed instruction extension.
! .IP zcf 4
  .IX Item "zcf"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed single\-precision floating point loads and stores extension.
! .IP zcd 4
  .IX Item "zcd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed double\-precision floating point loads and stores extension.
! .IP zcb 4
  .IX Item "zcb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Simple compressed instruction extension.
! .IP zce 4
  .IX Item "zce"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed instruction extensions for embedded processors.
! .IP zcmp 4
  .IX Item "zcmp"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed push pop extension.
! .IP zcmt 4
  .IX Item "zcmt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Table jump instruction extension.
! .IP smaia 4
  .IX Item "smaia"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Advanced interrupt architecture extension.
! .IP smepmp 4
  .IX Item "smepmp"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR PMP Enhancements for memory access and execution prevention on Machine mode.
! .IP smstateen 4
  .IX Item "smstateen"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR State enable extension.
! .IP ssaia 4
  .IX Item "ssaia"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Advanced interrupt architecture extension for supervisor\-mode.
! .IP sscofpmf 4
  .IX Item "sscofpmf"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Count overflow & filtering extension.
! .IP ssstateen 4
  .IX Item "ssstateen"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR State\-enable extension for supervisor\-mode.
! .IP sstc 4
  .IX Item "sstc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Supervisor\-mode timer interrupts extension.
! .IP svinval 4
  .IX Item "svinval"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Fine\-grained address\-translation cache invalidation extension.
! .IP svnapot 4
  .IX Item "svnapot"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR NAPOT translation contiguity extension.
! .IP svpbmt 4
  .IX Item "svpbmt"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Page\-based memory types extension.
! .IP xcvmac 4
  .IX Item "xcvmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core\-V multiply\-accumulate extension.
! .IP xcvalu 4
  .IX Item "xcvalu"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core\-V miscellaneous ALU extension.
! .IP xcvelw 4
  .IX Item "xcvelw"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core\-V event load word extension.
! .IP xtheadba 4
  .IX Item "xtheadba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head address calculation extension.
! .IP xtheadbb 4
  .IX Item "xtheadbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head basic bit\-manipulation extension.
! .IP xtheadbs 4
  .IX Item "xtheadbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head single\-bit instructions extension.
! .IP xtheadcmo 4
  .IX Item "xtheadcmo"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head cache management operations extension.
! .IP xtheadcondmov 4
  .IX Item "xtheadcondmov"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head conditional move extension.
! .IP xtheadfmemidx 4
  .IX Item "xtheadfmemidx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head indexed memory operations for floating\-point registers extension.
! .IP xtheadfmv 4
  .IX Item "xtheadfmv"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head double floating\-point high\-bit data transmission extension.
! .IP xtheadint 4
  .IX Item "xtheadint"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head acceleration interruption extension.
! .IP xtheadmac 4
  .IX Item "xtheadmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multiply\-accumulate extension.
! .IP xtheadmemidx 4
  .IX Item "xtheadmemidx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head indexed memory operation extension.
! .IP xtheadmempair 4
  .IX Item "xtheadmempair"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head two\-GPR memory operation extension.
! .IP xtheadsync 4
  .IX Item "xtheadsync"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multi\-core synchronization extension.
! .IP xventanacondops 4
  .IX Item "xventanacondops"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Ventana integer conditional operations extension.
*************** If both \fB\-march\fR and \fB\-mcpu=\fR
*** 30110,30119 ****
  this argument is system dependent, users who want a specific architecture
  extensions should specify one explicitly.
  .RE
! .IP "\fB\-mcpu=\fR\fIprocessor-string\fR" 4
  .IX Item "-mcpu=processor-string"
  Use architecture of and optimize the output for the given processor, specified
! by particular \s-1CPU\s0 name.
  Permissible values for this option are: \fBsifive\-e20\fR, \fBsifive\-e21\fR,
  \&\fBsifive\-e24\fR, \fBsifive\-e31\fR, \fBsifive\-e34\fR, \fBsifive\-e76\fR,
  \&\fBsifive\-s21\fR, \fBsifive\-s51\fR, \fBsifive\-s54\fR, \fBsifive\-s76\fR,
--- 30045,30054 ----
  this argument is system dependent, users who want a specific architecture
  extensions should specify one explicitly.
  .RE
! .IP \fB\-mcpu=\fR\fIprocessor\-string\fR 4
  .IX Item "-mcpu=processor-string"
  Use architecture of and optimize the output for the given processor, specified
! by particular CPU name.
  Permissible values for this option are: \fBsifive\-e20\fR, \fBsifive\-e21\fR,
  \&\fBsifive\-e24\fR, \fBsifive\-e31\fR, \fBsifive\-e34\fR, \fBsifive\-e76\fR,
  \&\fBsifive\-s21\fR, \fBsifive\-s51\fR, \fBsifive\-s54\fR, \fBsifive\-s76\fR,
*************** Permissible values for this option are:
*** 30121,30130 ****
  \&\fBsifive\-x670\fR.
  .Sp
  Note that \fB\-mcpu\fR does not override \fB\-march\fR or \fB\-mtune\fR.
! .IP "\fB\-mtune=\fR\fIprocessor-string\fR" 4
  .IX Item "-mtune=processor-string"
  Optimize the output for the given processor, specified by microarchitecture or
! particular \s-1CPU\s0 name.  Permissible values for this option are: \fBrocket\fR,
  \&\fBsifive\-3\-series\fR, \fBsifive\-5\-series\fR, \fBsifive\-7\-series\fR,
  \&\fBthead\-c906\fR, \fBsize\fR, \fBsifive\-p400\-series\fR,
  \&\fBsifive\-p600\-series\fR, and all valid options for \fB\-mcpu=\fR.
--- 30056,30065 ----
  \&\fBsifive\-x670\fR.
  .Sp
  Note that \fB\-mcpu\fR does not override \fB\-march\fR or \fB\-mtune\fR.
! .IP \fB\-mtune=\fR\fIprocessor\-string\fR 4
  .IX Item "-mtune=processor-string"
  Optimize the output for the given processor, specified by microarchitecture or
! particular CPU name.  Permissible values for this option are: \fBrocket\fR,
  \&\fBsifive\-3\-series\fR, \fBsifive\-5\-series\fR, \fBsifive\-7\-series\fR,
  \&\fBthead\-c906\fR, \fBsize\fR, \fBsifive\-p400\-series\fR,
  \&\fBsifive\-p600\-series\fR, and all valid options for \fB\-mcpu=\fR.
*************** particular \s-1CPU\s0 name.  Permissible
*** 30132,30142 ****
  When \fB\-mtune=\fR is not specified, use the setting from \fB\-mcpu\fR,
  the default is \fBrocket\fR if both are not specified.
  .Sp
! The \fBsize\fR choice is not intended for use by end-users.  This is used
  when \fB\-Os\fR is specified.  It overrides the instruction cost info
  provided by \fB\-mtune=\fR, but does not override the pipeline info.  This
  helps reduce code size while still giving good performance.
! .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
--- 30067,30077 ----
  When \fB\-mtune=\fR is not specified, use the setting from \fB\-mcpu\fR,
  the default is \fBrocket\fR if both are not specified.
  .Sp
! The \fBsize\fR choice is not intended for use by end\-users.  This is used
  when \fB\-Os\fR is specified.  It overrides the instruction cost info
  provided by \fB\-mtune=\fR, but does not override the pipeline info.  This
  helps reduce code size while still giving good performance.
! .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
*************** the default is 4 (16 bytes or 128\-bits)
*** 30145,30196 ****
  \&\fBWarning:\fR If you use this switch, then you must build all modules with
  the same value, including any libraries.  This includes the system libraries
  and startup modules.
! .IP "\fB\-msmall\-data\-limit=\fR\fIn\fR" 4
  .IX Item "-msmall-data-limit=n"
  Put global and static data smaller than \fIn\fR bytes into a special section
  (on some targets).
! .IP "\fB\-msave\-restore\fR" 4
  .IX Item "-msave-restore"
  .PD 0
! .IP "\fB\-mno\-save\-restore\fR" 4
  .IX Item "-mno-save-restore"
  .PD
! Do or don't use smaller but slower prologue and epilogue code that uses
  library function calls.  The default is to use fast inline prologues and
  epilogues.
! .IP "\fB\-mmovcc\fR" 4
  .IX Item "-mmovcc"
  .PD 0
! .IP "\fB\-mno\-movcc\fR" 4
  .IX Item "-mno-movcc"
  .PD
! Do or don't produce branchless conditional-move code sequences even with
  targets that do not have specific instructions for conditional operations.
! If enabled, sequences of \s-1ALU\s0 operations are produced using base integer
! \&\s-1ISA\s0 instructions where profitable.
! .IP "\fB\-minline\-atomics\fR" 4
  .IX Item "-minline-atomics"
  .PD 0
! .IP "\fB\-mno\-inline\-atomics\fR" 4
  .IX Item "-mno-inline-atomics"
  .PD
! Do or don't use smaller but slower subword atomic emulation code that uses
  libatomic function calls.  The default is to use fast inline subword atomics
  that do not require libatomic.
! .IP "\fB\-minline\-strlen\fR" 4
  .IX Item "-minline-strlen"
  .PD 0
! .IP "\fB\-mno\-inline\-strlen\fR" 4
  .IX Item "-mno-inline-strlen"
  .PD
  Do or do not attempt to inline strlen calls if possible.
  Inlining will only be done if the string is properly aligned
  and instructions for accelerated processing are available.
  The default is to not inline strlen calls.
! .IP "\fB\-minline\-strcmp\fR" 4
  .IX Item "-minline-strcmp"
  .PD 0
! .IP "\fB\-mno\-inline\-strcmp\fR" 4
  .IX Item "-mno-inline-strcmp"
  .PD
  Do or do not attempt to inline strcmp calls if possible.
--- 30080,30131 ----
  \&\fBWarning:\fR If you use this switch, then you must build all modules with
  the same value, including any libraries.  This includes the system libraries
  and startup modules.
! .IP \fB\-msmall\-data\-limit=\fR\fIn\fR 4
  .IX Item "-msmall-data-limit=n"
  Put global and static data smaller than \fIn\fR bytes into a special section
  (on some targets).
! .IP \fB\-msave\-restore\fR 4
  .IX Item "-msave-restore"
  .PD 0
! .IP \fB\-mno\-save\-restore\fR 4
  .IX Item "-mno-save-restore"
  .PD
! Do or don\*(Aqt use smaller but slower prologue and epilogue code that uses
  library function calls.  The default is to use fast inline prologues and
  epilogues.
! .IP \fB\-mmovcc\fR 4
  .IX Item "-mmovcc"
  .PD 0
! .IP \fB\-mno\-movcc\fR 4
  .IX Item "-mno-movcc"
  .PD
! Do or don\*(Aqt produce branchless conditional\-move code sequences even with
  targets that do not have specific instructions for conditional operations.
! If enabled, sequences of ALU operations are produced using base integer
! ISA instructions where profitable.
! .IP \fB\-minline\-atomics\fR 4
  .IX Item "-minline-atomics"
  .PD 0
! .IP \fB\-mno\-inline\-atomics\fR 4
  .IX Item "-mno-inline-atomics"
  .PD
! Do or don\*(Aqt use smaller but slower subword atomic emulation code that uses
  libatomic function calls.  The default is to use fast inline subword atomics
  that do not require libatomic.
! .IP \fB\-minline\-strlen\fR 4
  .IX Item "-minline-strlen"
  .PD 0
! .IP \fB\-mno\-inline\-strlen\fR 4
  .IX Item "-mno-inline-strlen"
  .PD
  Do or do not attempt to inline strlen calls if possible.
  Inlining will only be done if the string is properly aligned
  and instructions for accelerated processing are available.
  The default is to not inline strlen calls.
! .IP \fB\-minline\-strcmp\fR 4
  .IX Item "-minline-strcmp"
  .PD 0
! .IP \fB\-mno\-inline\-strcmp\fR 4
  .IX Item "-mno-inline-strcmp"
  .PD
  Do or do not attempt to inline strcmp calls if possible.
*************** The default is to not inline strcmp call
*** 30201,30210 ****
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP "\fB\-minline\-strncmp\fR" 4
  .IX Item "-minline-strncmp"
  .PD 0
! .IP "\fB\-mno\-inline\-strncmp\fR" 4
  .IX Item "-mno-inline-strncmp"
  .PD
  Do or do not attempt to inline strncmp calls if possible.
--- 30136,30145 ----
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP \fB\-minline\-strncmp\fR 4
  .IX Item "-minline-strncmp"
  .PD 0
! .IP \fB\-mno\-inline\-strncmp\fR 4
  .IX Item "-mno-inline-strncmp"
  .PD
  Do or do not attempt to inline strncmp calls if possible.
*************** The default is to not inline strncmp cal
*** 30215,30314 ****
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP "\fB\-mshorten\-memrefs\fR" 4
  .IX Item "-mshorten-memrefs"
  .PD 0
! .IP "\fB\-mno\-shorten\-memrefs\fR" 4
  .IX Item "-mno-shorten-memrefs"
  .PD
  Do or do not attempt to make more use of compressed load/store instructions by
! replacing a load/store of 'base register + large offset' with a new load/store
! of 'new base + small offset'.  If the new base gets stored in a compressed
  register, then the new load/store can be compressed.  Currently targets 32\-bit
  integer load/stores only.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Do not or do generate unaligned memory accesses.  The default is set depending
  on whether the processor we are optimizing for supports fast unaligned access
  or not.
! .IP "\fB\-mcmodel=medlow\fR" 4
  .IX Item "-mcmodel=medlow"
! Generate code for the medium-low code model. The program and its statically
  defined symbols must lie within a single 2 GiB address range and must lie
  between absolute addresses \-2 GiB and +2 GiB. Programs can be
  statically or dynamically linked. This is the default code model.
! .IP "\fB\-mcmodel=medany\fR" 4
  .IX Item "-mcmodel=medany"
! Generate code for the medium-any code model. The program and its statically
  defined symbols must be within any single 2 GiB address range. Programs can be
  statically or dynamically linked.
  .Sp
! The code generated by the medium-any code model is position-independent, but is
! not guaranteed to function correctly when linked into position-independent
  executables or libraries.
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP "\fB\-mno\-exlicit\-relocs\fR" 4
  .IX Item "-mno-exlicit-relocs"
  .PD
  Use or do not use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit optimization.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  .PD 0
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
  .PD
  Take advantage of linker relaxations to reduce the number of instructions
  required to materialize symbol addresses. The default is to take advantage of
  linker relaxations.
! .IP "\fB\-mriscv\-attribute\fR" 4
  .IX Item "-mriscv-attribute"
  .PD 0
! .IP "\fB\-mno\-riscv\-attribute\fR" 4
  .IX Item "-mno-riscv-attribute"
  .PD
! Emit (do not emit) RISC-V attribute to record extra information into \s-1ELF\s0
  objects.  This feature requires at least binutils 2.32.
! .IP "\fB\-mcsr\-check\fR" 4
  .IX Item "-mcsr-check"
  .PD 0
! .IP "\fB\-mno\-csr\-check\fR" 4
  .IX Item "-mno-csr-check"
  .PD
! Enables or disables the \s-1CSR\s0 checking.
! .IP "\fB\-malign\-data=\fR\fItype\fR" 4
  .IX Item "-malign-data=type"
! Control how \s-1GCC\s0 aligns variables and constants of array, structure, or union
  types.  Supported values for \fItype\fR are \fBxlen\fR which uses x register
  width as the alignment value, and \fBnatural\fR which uses natural alignment.
  \&\fBxlen\fR is the default.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for a
  \&\fBriscv64be\-*\-*\fR or \fBriscv32be\-*\-*\fR target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for a
  \&\fBriscv64\-*\-*\fR or \fBriscv32\-*\-*\fR but not a \fBriscv64be\-*\-*\fR or
  \&\fBriscv32be\-*\-*\fR target.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for a global canary or \fBtls\fR for per-thread
! canary in the \s-1TLS\s0 block.
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
--- 30150,30249 ----
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP \fB\-mshorten\-memrefs\fR 4
  .IX Item "-mshorten-memrefs"
  .PD 0
! .IP \fB\-mno\-shorten\-memrefs\fR 4
  .IX Item "-mno-shorten-memrefs"
  .PD
  Do or do not attempt to make more use of compressed load/store instructions by
! replacing a load/store of \*(Aqbase register + large offset\*(Aq with a new load/store
! of \*(Aqnew base + small offset\*(Aq.  If the new base gets stored in a compressed
  register, then the new load/store can be compressed.  Currently targets 32\-bit
  integer load/stores only.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Do not or do generate unaligned memory accesses.  The default is set depending
  on whether the processor we are optimizing for supports fast unaligned access
  or not.
! .IP \fB\-mcmodel=medlow\fR 4
  .IX Item "-mcmodel=medlow"
! Generate code for the medium\-low code model. The program and its statically
  defined symbols must lie within a single 2 GiB address range and must lie
  between absolute addresses \-2 GiB and +2 GiB. Programs can be
  statically or dynamically linked. This is the default code model.
! .IP \fB\-mcmodel=medany\fR 4
  .IX Item "-mcmodel=medany"
! Generate code for the medium\-any code model. The program and its statically
  defined symbols must be within any single 2 GiB address range. Programs can be
  statically or dynamically linked.
  .Sp
! The code generated by the medium\-any code model is position\-independent, but is
! not guaranteed to function correctly when linked into position\-independent
  executables or libraries.
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP \fB\-mno\-exlicit\-relocs\fR 4
  .IX Item "-mno-exlicit-relocs"
  .PD
  Use or do not use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit optimization.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  .PD 0
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
  .PD
  Take advantage of linker relaxations to reduce the number of instructions
  required to materialize symbol addresses. The default is to take advantage of
  linker relaxations.
! .IP \fB\-mriscv\-attribute\fR 4
  .IX Item "-mriscv-attribute"
  .PD 0
! .IP \fB\-mno\-riscv\-attribute\fR 4
  .IX Item "-mno-riscv-attribute"
  .PD
! Emit (do not emit) RISC\-V attribute to record extra information into ELF
  objects.  This feature requires at least binutils 2.32.
! .IP \fB\-mcsr\-check\fR 4
  .IX Item "-mcsr-check"
  .PD 0
! .IP \fB\-mno\-csr\-check\fR 4
  .IX Item "-mno-csr-check"
  .PD
! Enables or disables the CSR checking.
! .IP \fB\-malign\-data=\fR\fItype\fR 4
  .IX Item "-malign-data=type"
! Control how GCC aligns variables and constants of array, structure, or union
  types.  Supported values for \fItype\fR are \fBxlen\fR which uses x register
  width as the alignment value, and \fBnatural\fR which uses natural alignment.
  \&\fBxlen\fR is the default.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate big\-endian code.  This is the default when GCC is configured for a
  \&\fBriscv64be\-*\-*\fR or \fBriscv32be\-*\-*\fR target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate little\-endian code.  This is the default when GCC is configured for a
  \&\fBriscv64\-*\-*\fR or \fBriscv32\-*\-*\fR but not a \fBriscv64be\-*\-*\fR or
  \&\fBriscv32be\-*\-*\fR target.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for a global canary or \fBtls\fR for per\-thread
! canary in the TLS block.
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
*************** which register to use as base register f
*** 30317,30373 ****
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP "\fB\-mtls\-dialect=desc\fR" 4
  .IX Item "-mtls-dialect=desc"
! Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.
! .IP "\fB\-mtls\-dialect=trad\fR" 4
  .IX Item "-mtls-dialect=trad"
! Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.  This is the default.
  .PP
! \fI\s-1RL78\s0 Options\fR
  .IX Subsection "RL78 Options"
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Links in additional target libraries to support operation within a
  simulator.
! .IP "\fB\-mmul=none\fR" 4
  .IX Item "-mmul=none"
  .PD 0
! .IP "\fB\-mmul=g10\fR" 4
  .IX Item "-mmul=g10"
! .IP "\fB\-mmul=g13\fR" 4
  .IX Item "-mmul=g13"
! .IP "\fB\-mmul=g14\fR" 4
  .IX Item "-mmul=g14"
! .IP "\fB\-mmul=rl78\fR" 4
  .IX Item "-mmul=rl78"
  .PD
  Specifies the type of hardware multiplication and division support to
  be used.  The simplest is \f(CW\*(C`none\*(C'\fR, which uses software for both
  multiplication and division.  This is the default.  The \f(CW\*(C`g13\*(C'\fR
  value is for the hardware multiply/divide peripheral found on the
! \&\s-1RL78/G13\s0 (S2 core) targets.  The \f(CW\*(C`g14\*(C'\fR value selects the use of
! the multiplication and division instructions supported by the \s-1RL78/G14\s0
  (S3 core) parts.  The value \f(CW\*(C`rl78\*(C'\fR is an alias for \f(CW\*(C`g14\*(C'\fR and
  the value \f(CW\*(C`mg10\*(C'\fR is an alias for \f(CW\*(C`none\*(C'\fR.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR.
! .IP "\fB\-mcpu=g10\fR" 4
  .IX Item "-mcpu=g10"
  .PD 0
! .IP "\fB\-mcpu=g13\fR" 4
  .IX Item "-mcpu=g13"
! .IP "\fB\-mcpu=g14\fR" 4
  .IX Item "-mcpu=g14"
! .IP "\fB\-mcpu=rl78\fR" 4
  .IX Item "-mcpu=rl78"
  .PD
! Specifies the \s-1RL78\s0 core to target.  The default is the G14 core, also
! known as an S3 core or just \s-1RL78.\s0  The G13 or S2 core does not have
  multiply or divide instructions, instead it uses a hardware peripheral
  for these operations.  The G10 or S1 core does not have register
  banks, so it uses a different calling convention.
--- 30252,30308 ----
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP \fB\-mtls\-dialect=desc\fR 4
  .IX Item "-mtls-dialect=desc"
! Use TLS descriptors as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.
! .IP \fB\-mtls\-dialect=trad\fR 4
  .IX Item "-mtls-dialect=trad"
! Use traditional TLS as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.  This is the default.
  .PP
! \fIRL78 Options\fR
  .IX Subsection "RL78 Options"
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Links in additional target libraries to support operation within a
  simulator.
! .IP \fB\-mmul=none\fR 4
  .IX Item "-mmul=none"
  .PD 0
! .IP \fB\-mmul=g10\fR 4
  .IX Item "-mmul=g10"
! .IP \fB\-mmul=g13\fR 4
  .IX Item "-mmul=g13"
! .IP \fB\-mmul=g14\fR 4
  .IX Item "-mmul=g14"
! .IP \fB\-mmul=rl78\fR 4
  .IX Item "-mmul=rl78"
  .PD
  Specifies the type of hardware multiplication and division support to
  be used.  The simplest is \f(CW\*(C`none\*(C'\fR, which uses software for both
  multiplication and division.  This is the default.  The \f(CW\*(C`g13\*(C'\fR
  value is for the hardware multiply/divide peripheral found on the
! RL78/G13 (S2 core) targets.  The \f(CW\*(C`g14\*(C'\fR value selects the use of
! the multiplication and division instructions supported by the RL78/G14
  (S3 core) parts.  The value \f(CW\*(C`rl78\*(C'\fR is an alias for \f(CW\*(C`g14\*(C'\fR and
  the value \f(CW\*(C`mg10\*(C'\fR is an alias for \f(CW\*(C`none\*(C'\fR.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR.
! .IP \fB\-mcpu=g10\fR 4
  .IX Item "-mcpu=g10"
  .PD 0
! .IP \fB\-mcpu=g13\fR 4
  .IX Item "-mcpu=g13"
! .IP \fB\-mcpu=g14\fR 4
  .IX Item "-mcpu=g14"
! .IP \fB\-mcpu=rl78\fR 4
  .IX Item "-mcpu=rl78"
  .PD
! Specifies the RL78 core to target.  The default is the G14 core, also
! known as an S3 core or just RL78.  The G13 or S2 core does not have
  multiply or divide instructions, instead it uses a hardware peripheral
  for these operations.  The G10 or S1 core does not have register
  banks, so it uses a different calling convention.
*************** support to use, unless this is overridde
*** 30379,30520 ****
  peripheral and specifying \fB\-mcpu=g10\fR disables the use of
  hardware multiplications altogether.
  .Sp
! Note, although the \s-1RL78/G14\s0 core is the default target, specifying
  \&\fB\-mcpu=g14\fR or \fB\-mcpu=rl78\fR on the command line does
  change the behavior of the toolchain since it also enables G14
  hardware multiply support.  If these options are not specified on the
  command line then software multiplication routines will be used even
! though the code targets the \s-1RL78\s0 core.  This is for backwards
  compatibility with older toolchains which did not have hardware
  multiply and divide support.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_G10_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_G14_\|_\*(C'\fR.
! .IP "\fB\-mg10\fR" 4
  .IX Item "-mg10"
  .PD 0
! .IP "\fB\-mg13\fR" 4
  .IX Item "-mg13"
! .IP "\fB\-mg14\fR" 4
  .IX Item "-mg14"
! .IP "\fB\-mrl78\fR" 4
  .IX Item "-mrl78"
  .PD
  These are aliases for the corresponding \fB\-mcpu=\fR option.  They
  are provided for backwards compatibility.
! .IP "\fB\-mallregs\fR" 4
  .IX Item "-mallregs"
  Allow the compiler to use all of the available registers.  By default
  registers \f(CW\*(C`r24..r31\*(C'\fR are reserved for use in interrupt handlers.
  With this option enabled these registers can be used in ordinary
  functions as well.
! .IP "\fB\-m64bit\-doubles\fR" 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP "\fB\-m32bit\-doubles\fR" 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
  \&\fB\-m32bit\-doubles\fR.
! .IP "\fB\-msave\-mduc\-in\-interrupts\fR" 4
  .IX Item "-msave-mduc-in-interrupts"
  .PD 0
! .IP "\fB\-mno\-save\-mduc\-in\-interrupts\fR" 4
  .IX Item "-mno-save-mduc-in-interrupts"
  .PD
  Specifies that interrupt handler functions should preserve the
! \&\s-1MDUC\s0 registers.  This is only necessary if normal code might use
! the \s-1MDUC\s0 registers, for example because it performs multiplication
! and division operations.  The default is to ignore the \s-1MDUC\s0 registers
  as this makes the interrupt handlers faster.  The target option \-mg13
  needs to be passed for this to work as this feature is only available
! on the G13 target (S2 core).  The \s-1MDUC\s0 registers will only be saved
  if the interrupt handler performs a multiplication or division
  operation or it calls another function.
  .PP
! \fI\s-1IBM RS/6000\s0 and PowerPC Options\fR
  .IX Subsection "IBM RS/6000 and PowerPC Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1IBM RS/6000\s0 and PowerPC:
! .IP "\fB\-mpowerpc\-gpopt\fR" 4
  .IX Item "-mpowerpc-gpopt"
  .PD 0
! .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
  .IX Item "-mno-powerpc-gpopt"
! .IP "\fB\-mpowerpc\-gfxopt\fR" 4
  .IX Item "-mpowerpc-gfxopt"
! .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
  .IX Item "-mno-powerpc-gfxopt"
! .IP "\fB\-mpowerpc64\fR" 4
  .IX Item "-mpowerpc64"
! .IP "\fB\-mno\-powerpc64\fR" 4
  .IX Item "-mno-powerpc64"
! .IP "\fB\-mmfcrf\fR" 4
  .IX Item "-mmfcrf"
! .IP "\fB\-mno\-mfcrf\fR" 4
  .IX Item "-mno-mfcrf"
! .IP "\fB\-mpopcntb\fR" 4
  .IX Item "-mpopcntb"
! .IP "\fB\-mno\-popcntb\fR" 4
  .IX Item "-mno-popcntb"
! .IP "\fB\-mpopcntd\fR" 4
  .IX Item "-mpopcntd"
! .IP "\fB\-mno\-popcntd\fR" 4
  .IX Item "-mno-popcntd"
! .IP "\fB\-mfprnd\fR" 4
  .IX Item "-mfprnd"
! .IP "\fB\-mno\-fprnd\fR" 4
  .IX Item "-mno-fprnd"
! .IP "\fB\-mcmpb\fR" 4
  .IX Item "-mcmpb"
! .IP "\fB\-mno\-cmpb\fR" 4
  .IX Item "-mno-cmpb"
! .IP "\fB\-mhard\-dfp\fR" 4
  .IX Item "-mhard-dfp"
! .IP "\fB\-mno\-hard\-dfp\fR" 4
  .IX Item "-mno-hard-dfp"
  .PD
  You use these options to specify which instructions are available on the
  processor you are using.  The default value of these options is
! determined when configuring \s-1GCC.\s0  Specifying the
  \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
  options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
  rather than the options listed above.
  .Sp
  Specifying \fB\-mpowerpc\-gpopt\fR allows
! \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
! General Purpose group, including floating-point square root.  Specifying
! \&\fB\-mpowerpc\-gfxopt\fR allows \s-1GCC\s0 to
  use the optional PowerPC architecture instructions in the Graphics
! group, including floating-point select.
  .Sp
! The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
! condition register field instruction implemented on the \s-1POWER4\s0
  processor and other processors that support the PowerPC V2.01
  architecture.
! The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
! double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
! \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
  architecture.
! The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
! instruction implemented on the \s-1POWER7\s0 processor and other processors
  that support the PowerPC V2.06 architecture.
! The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
! integer instructions implemented on the \s-1POWER5+\s0 processor and other
  processors that support the PowerPC V2.03 architecture.
! The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
! instruction implemented on the \s-1POWER6\s0 processor and other processors
  that support the PowerPC V2.05 architecture.
! The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
! floating-point instructions implemented on some \s-1POWER\s0 processors.
  .Sp
! The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
  64\-bit instructions that are found in the full PowerPC64 architecture
! and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
  \&\fB\-mno\-powerpc64\fR.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set architecture type, register usage, and
  instruction scheduling parameters for machine type \fIcpu_type\fR.
--- 30314,30455 ----
  peripheral and specifying \fB\-mcpu=g10\fR disables the use of
  hardware multiplications altogether.
  .Sp
! Note, although the RL78/G14 core is the default target, specifying
  \&\fB\-mcpu=g14\fR or \fB\-mcpu=rl78\fR on the command line does
  change the behavior of the toolchain since it also enables G14
  hardware multiply support.  If these options are not specified on the
  command line then software multiplication routines will be used even
! though the code targets the RL78 core.  This is for backwards
  compatibility with older toolchains which did not have hardware
  multiply and divide support.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_G10_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_G14_\|_\*(C'\fR.
! .IP \fB\-mg10\fR 4
  .IX Item "-mg10"
  .PD 0
! .IP \fB\-mg13\fR 4
  .IX Item "-mg13"
! .IP \fB\-mg14\fR 4
  .IX Item "-mg14"
! .IP \fB\-mrl78\fR 4
  .IX Item "-mrl78"
  .PD
  These are aliases for the corresponding \fB\-mcpu=\fR option.  They
  are provided for backwards compatibility.
! .IP \fB\-mallregs\fR 4
  .IX Item "-mallregs"
  Allow the compiler to use all of the available registers.  By default
  registers \f(CW\*(C`r24..r31\*(C'\fR are reserved for use in interrupt handlers.
  With this option enabled these registers can be used in ordinary
  functions as well.
! .IP \fB\-m64bit\-doubles\fR 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP \fB\-m32bit\-doubles\fR 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
  \&\fB\-m32bit\-doubles\fR.
! .IP \fB\-msave\-mduc\-in\-interrupts\fR 4
  .IX Item "-msave-mduc-in-interrupts"
  .PD 0
! .IP \fB\-mno\-save\-mduc\-in\-interrupts\fR 4
  .IX Item "-mno-save-mduc-in-interrupts"
  .PD
  Specifies that interrupt handler functions should preserve the
! MDUC registers.  This is only necessary if normal code might use
! the MDUC registers, for example because it performs multiplication
! and division operations.  The default is to ignore the MDUC registers
  as this makes the interrupt handlers faster.  The target option \-mg13
  needs to be passed for this to work as this feature is only available
! on the G13 target (S2 core).  The MDUC registers will only be saved
  if the interrupt handler performs a multiplication or division
  operation or it calls another function.
  .PP
! \fIIBM RS/6000 and PowerPC Options\fR
  .IX Subsection "IBM RS/6000 and PowerPC Options"
  .PP
! These \fB\-m\fR options are defined for the IBM RS/6000 and PowerPC:
! .IP \fB\-mpowerpc\-gpopt\fR 4
  .IX Item "-mpowerpc-gpopt"
  .PD 0
! .IP \fB\-mno\-powerpc\-gpopt\fR 4
  .IX Item "-mno-powerpc-gpopt"
! .IP \fB\-mpowerpc\-gfxopt\fR 4
  .IX Item "-mpowerpc-gfxopt"
! .IP \fB\-mno\-powerpc\-gfxopt\fR 4
  .IX Item "-mno-powerpc-gfxopt"
! .IP \fB\-mpowerpc64\fR 4
  .IX Item "-mpowerpc64"
! .IP \fB\-mno\-powerpc64\fR 4
  .IX Item "-mno-powerpc64"
! .IP \fB\-mmfcrf\fR 4
  .IX Item "-mmfcrf"
! .IP \fB\-mno\-mfcrf\fR 4
  .IX Item "-mno-mfcrf"
! .IP \fB\-mpopcntb\fR 4
  .IX Item "-mpopcntb"
! .IP \fB\-mno\-popcntb\fR 4
  .IX Item "-mno-popcntb"
! .IP \fB\-mpopcntd\fR 4
  .IX Item "-mpopcntd"
! .IP \fB\-mno\-popcntd\fR 4
  .IX Item "-mno-popcntd"
! .IP \fB\-mfprnd\fR 4
  .IX Item "-mfprnd"
! .IP \fB\-mno\-fprnd\fR 4
  .IX Item "-mno-fprnd"
! .IP \fB\-mcmpb\fR 4
  .IX Item "-mcmpb"
! .IP \fB\-mno\-cmpb\fR 4
  .IX Item "-mno-cmpb"
! .IP \fB\-mhard\-dfp\fR 4
  .IX Item "-mhard-dfp"
! .IP \fB\-mno\-hard\-dfp\fR 4
  .IX Item "-mno-hard-dfp"
  .PD
  You use these options to specify which instructions are available on the
  processor you are using.  The default value of these options is
! determined when configuring GCC.  Specifying the
  \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
  options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
  rather than the options listed above.
  .Sp
  Specifying \fB\-mpowerpc\-gpopt\fR allows
! GCC to use the optional PowerPC architecture instructions in the
! General Purpose group, including floating\-point square root.  Specifying
! \&\fB\-mpowerpc\-gfxopt\fR allows GCC to
  use the optional PowerPC architecture instructions in the Graphics
! group, including floating\-point select.
  .Sp
! The \fB\-mmfcrf\fR option allows GCC to generate the move from
! condition register field instruction implemented on the POWER4
  processor and other processors that support the PowerPC V2.01
  architecture.
! The \fB\-mpopcntb\fR option allows GCC to generate the popcount and
! double\-precision FP reciprocal estimate instruction implemented on the
! POWER5 processor and other processors that support the PowerPC V2.02
  architecture.
! The \fB\-mpopcntd\fR option allows GCC to generate the popcount
! instruction implemented on the POWER7 processor and other processors
  that support the PowerPC V2.06 architecture.
! The \fB\-mfprnd\fR option allows GCC to generate the FP round to
! integer instructions implemented on the POWER5+ processor and other
  processors that support the PowerPC V2.03 architecture.
! The \fB\-mcmpb\fR option allows GCC to generate the compare bytes
! instruction implemented on the POWER6 processor and other processors
  that support the PowerPC V2.05 architecture.
! The \fB\-mhard\-dfp\fR option allows GCC to generate the decimal
! floating\-point instructions implemented on some POWER processors.
  .Sp
! The \fB\-mpowerpc64\fR option allows GCC to generate the additional
  64\-bit instructions that are found in the full PowerPC64 architecture
! and to treat GPRs as 64\-bit, doubleword quantities.  GCC defaults to
  \&\fB\-mno\-powerpc64\fR.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set architecture type, register usage, and
  instruction scheduling parameters for machine type \fIcpu_type\fR.
*************** model assumed for scheduling purposes.
*** 30540,30546 ****
  Specifying \fBnative\fR as cpu type detects and selects the
  architecture option that corresponds to the host processor of the
  system performing the compilation.
! \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize the
  processor.
  .Sp
  The other options specify a specific processor.  Code generated under
--- 30475,30481 ----
  Specifying \fBnative\fR as cpu type detects and selects the
  architecture option that corresponds to the host processor of the
  system performing the compilation.
! \&\fB\-mcpu=native\fR has no effect if GCC does not recognize the
  processor.
  .Sp
  The other options specify a specific processor.  Code generated under
*************** following options:
*** 30559,30577 ****
  \&\-mfloat128\-hardware \-mprefixed \-mpcrel \-mmma
  \&\-mrop\-protect\fR
  .Sp
! The particular options set for any particular \s-1CPU\s0 varies between
  compiler versions, depending on what setting seems to produce optimal
! code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
  capabilities.  If you wish to set an individual option to a particular
  value, you may specify it after the \fB\-mcpu\fR option, like
  \&\fB\-mcpu=970 \-mno\-altivec\fR.
  .Sp
! On \s-1AIX,\s0 the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
  not enabled or disabled by the \fB\-mcpu\fR option at present because
! \&\s-1AIX\s0 does not have full support for these options.  You may still
! enable or disable them individually if you're sure it'll work in your
  environment.
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the architecture type or register usage,
--- 30494,30512 ----
  \&\-mfloat128\-hardware \-mprefixed \-mpcrel \-mmma
  \&\-mrop\-protect\fR
  .Sp
! The particular options set for any particular CPU varies between
  compiler versions, depending on what setting seems to produce optimal
! code for that CPU; it doesn\*(Aqt necessarily reflect the actual hardware\*(Aqs
  capabilities.  If you wish to set an individual option to a particular
  value, you may specify it after the \fB\-mcpu\fR option, like
  \&\fB\-mcpu=970 \-mno\-altivec\fR.
  .Sp
! On AIX, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
  not enabled or disabled by the \fB\-mcpu\fR option at present because
! AIX does not have full support for these options.  You may still
! enable or disable them individually if you\*(Aqre sure it\*(Aqll work in your
  environment.
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the architecture type or register usage,
*************** values for \fIcpu_type\fR are used for \
*** 30580,30864 ****
  \&\fB\-mcpu\fR.  If both are specified, the code generated uses the
  architecture and registers set by \fB\-mcpu\fR, but the
  scheduling parameters set by \fB\-mtune\fR.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
! Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
  64k.
! .IP "\fB\-mcmodel=medium\fR" 4
  .IX Item "-mcmodel=medium"
! Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
  data may be up to a total of 4G in size.  This is the default for 64\-bit
  Linux.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
! Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
  in size.  Other data and code is only limited by the 64\-bit address
  space.
! .IP "\fB\-maltivec\fR" 4
  .IX Item "-maltivec"
  .PD 0
! .IP "\fB\-mno\-altivec\fR" 4
  .IX Item "-mno-altivec"
  .PD
  Generate code that uses (does not use) AltiVec instructions, and also
! enable the use of built-in functions that allow more direct access to
  the AltiVec instruction set.  You may also need to set
! \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
  enhancements.
  .Sp
  When \fB\-maltivec\fR is used, the element order for AltiVec intrinsics
  such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
  match array element order corresponding to the endianness of the
  target.  That is, element zero identifies the leftmost element in a
! vector register when targeting a big-endian platform, and identifies
  the rightmost element in a vector register when targeting a
! little-endian platform.
! .IP "\fB\-mvrsave\fR" 4
  .IX Item "-mvrsave"
  .PD 0
! .IP "\fB\-mno\-vrsave\fR" 4
  .IX Item "-mno-vrsave"
  .PD
! Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
! .IP "\fB\-msecure\-plt\fR" 4
  .IX Item "-msecure-plt"
  Generate code that allows \fBld\fR and \fBld.so\fR
  to build executables and shared
! libraries with non-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
  This is a PowerPC
! 32\-bit \s-1SYSV ABI\s0 option.
! .IP "\fB\-mbss\-plt\fR" 4
  .IX Item "-mbss-plt"
! Generate code that uses a \s-1BSS\s0 \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
  fills in, and
  requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
  sections that are both writable and executable.
! This is a PowerPC 32\-bit \s-1SYSV ABI\s0 option.
! .IP "\fB\-misel\fR" 4
  .IX Item "-misel"
  .PD 0
! .IP "\fB\-mno\-isel\fR" 4
  .IX Item "-mno-isel"
  .PD
! This switch enables or disables the generation of \s-1ISEL\s0 instructions.
! .IP "\fB\-mvsx\fR" 4
  .IX Item "-mvsx"
  .PD 0
! .IP "\fB\-mno\-vsx\fR" 4
  .IX Item "-mno-vsx"
  .PD
! Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
! instructions, and also enable the use of built-in functions that allow
! more direct access to the \s-1VSX\s0 instruction set.
! .IP "\fB\-mcrypto\fR" 4
  .IX Item "-mcrypto"
  .PD 0
! .IP "\fB\-mno\-crypto\fR" 4
  .IX Item "-mno-crypto"
  .PD
! Enable the use (disable) of the built-in functions that allow direct
  access to the cryptographic instructions that were added in version
! 2.07 of the PowerPC \s-1ISA.\s0
! .IP "\fB\-mhtm\fR" 4
  .IX Item "-mhtm"
  .PD 0
! .IP "\fB\-mno\-htm\fR" 4
  .IX Item "-mno-htm"
  .PD
! Enable (disable) the use of the built-in functions that allow direct
! access to the Hardware Transactional Memory (\s-1HTM\s0) instructions that
! were added in version 2.07 of the PowerPC \s-1ISA.\s0
! .IP "\fB\-mpower8\-fusion\fR" 4
  .IX Item "-mpower8-fusion"
  .PD 0
! .IP "\fB\-mno\-power8\-fusion\fR" 4
  .IX Item "-mno-power8-fusion"
  .PD
  Generate code that keeps (does not keeps) some integer operations
  adjacent so that the instructions can be fused together on power8 and
  later processors.
! .IP "\fB\-mquad\-memory\fR" 4
  .IX Item "-mquad-memory"
  .PD 0
! .IP "\fB\-mno\-quad\-memory\fR" 4
  .IX Item "-mno-quad-memory"
  .PD
! Generate code that uses (does not use) the non-atomic quad word memory
  instructions.  The \fB\-mquad\-memory\fR option requires use of
  64\-bit mode.
! .IP "\fB\-mquad\-memory\-atomic\fR" 4
  .IX Item "-mquad-memory-atomic"
  .PD 0
! .IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
  .IX Item "-mno-quad-memory-atomic"
  .PD
  Generate code that uses (does not use) the atomic quad word memory
  instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
  64\-bit mode.
! .IP "\fB\-mfloat128\fR" 4
  .IX Item "-mfloat128"
  .PD 0
! .IP "\fB\-mno\-float128\fR" 4
  .IX Item "-mno-float128"
  .PD
! Enable/disable the \fI_\|_float128\fR keyword for \s-1IEEE\s0 128\-bit floating point
! and use either software emulation for \s-1IEEE\s0 128\-bit floating point or
  hardware instructions.
  .Sp
! The \s-1VSX\s0 instruction set (\fB\-mvsx\fR) must be enabled to use the \s-1IEEE\s0
! 128\-bit floating point support.  The \s-1IEEE\s0 128\-bit floating point is only
  supported on Linux.
  .Sp
  The default for \fB\-mfloat128\fR is enabled on PowerPC Linux
! systems using the \s-1VSX\s0 instruction set, and disabled on other systems.
  .Sp
! If you use the \s-1ISA 3.0\s0 instruction set (\fB\-mcpu=power9\fR) on a
! 64\-bit system, the \s-1IEEE\s0 128\-bit floating point support will also enable
! the generation of \s-1ISA 3.0 IEEE\s0 128\-bit floating point instructions.
! Otherwise, if you do not specify to generate \s-1ISA 3.0\s0 instructions or you
! are targeting a 32\-bit big endian system, \s-1IEEE\s0 128\-bit floating point
  will be done with software emulation.
! .IP "\fB\-mfloat128\-hardware\fR" 4
  .IX Item "-mfloat128-hardware"
  .PD 0
! .IP "\fB\-mno\-float128\-hardware\fR" 4
  .IX Item "-mno-float128-hardware"
  .PD
! Enable/disable using \s-1ISA 3.0\s0 hardware instructions to support the
  \&\fI_\|_float128\fR data type.
  .Sp
  The default for \fB\-mfloat128\-hardware\fR is enabled on PowerPC
! Linux systems using the \s-1ISA 3.0\s0 instruction set, and disabled on other
  systems.
! .IP "\fB\-m32\fR" 4
  .IX Item "-m32"
  .PD 0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
  .PD
! Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
  targets (including GNU/Linux).  The 32\-bit environment sets int, long
  and pointer to 32 bits and generates code that runs on any PowerPC
  variant.  The 64\-bit environment sets int to 32 bits and long and
  pointer to 64 bits, and generates code for PowerPC64, as for
  \&\fB\-mpowerpc64\fR.
! .IP "\fB\-mfull\-toc\fR" 4
  .IX Item "-mfull-toc"
  .PD 0
! .IP "\fB\-mno\-fp\-in\-toc\fR" 4
  .IX Item "-mno-fp-in-toc"
! .IP "\fB\-mno\-sum\-in\-toc\fR" 4
  .IX Item "-mno-sum-in-toc"
! .IP "\fB\-mminimal\-toc\fR" 4
  .IX Item "-mminimal-toc"
  .PD
! Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
  every executable file.  The \fB\-mfull\-toc\fR option is selected by
! default.  In that case, \s-1GCC\s0 allocates at least one \s-1TOC\s0 entry for
! each unique non-automatic variable reference in your program.  \s-1GCC\s0
! also places floating-point constants in the \s-1TOC.\s0  However, only
! 16,384 entries are available in the \s-1TOC.\s0
  .Sp
  If you receive a linker error message that saying you have overflowed
! the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
  with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
! \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
! constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
  generate code to calculate the sum of an address and a constant at
! run time instead of putting that sum into the \s-1TOC.\s0  You may specify one
! or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
! slower and larger code at the expense of conserving \s-1TOC\s0 space.
  .Sp
! If you still run out of space in the \s-1TOC\s0 even when you specify both of
  these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
! \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
! option, \s-1GCC\s0 produces code that is slower and larger but which
! uses extremely little \s-1TOC\s0 space.  You may wish to use this option
! only on files that contain less frequently-executed code.
! .IP "\fB\-maix64\fR" 4
  .IX Item "-maix64"
  .PD 0
! .IP "\fB\-maix32\fR" 4
  .IX Item "-maix32"
  .PD
! Enable 64\-bit \s-1AIX ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
  \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
  Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
! while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
! implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
! .IP "\fB\-mxl\-compat\fR" 4
  .IX Item "-mxl-compat"
  .PD 0
! .IP "\fB\-mno\-xl\-compat\fR" 4
  .IX Item "-mno-xl-compat"
  .PD
! Produce code that conforms more closely to \s-1IBM XL\s0 compiler semantics
! when using AIX-compatible \s-1ABI.\s0  Pass floating-point arguments to
! prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
  in addition to argument FPRs.  Do not assume that most significant
  double in 128\-bit long double value is properly rounded when comparing
! values and converting to double.  Use \s-1XL\s0 symbol names for long double
  support routines.
  .Sp
! The \s-1AIX\s0 calling convention was extended but not initially documented to
  handle an obscure K&R C case of calling a function that takes the
! address of its arguments with fewer arguments than declared.  \s-1IBM XL\s0
! compilers access floating-point arguments that do not fit in the
! \&\s-1RSA\s0 from the stack when a subroutine is compiled without
! optimization.  Because always storing floating-point arguments on the
  stack is inefficient and rarely needed, this option is not enabled by
! default and only is necessary when calling subroutines compiled by \s-1IBM
! XL\s0 compilers without optimization.
! .IP "\fB\-mpe\fR" 4
  .IX Item "-mpe"
! Support \fI\s-1IBM RS/6000 SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
  application written to use message passing with special startup code to
! enable the application to run.  The system must have \s-1PE\s0 installed in the
  standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
  must be overridden with the \fB\-specs=\fR option to specify the
  appropriate directory location.  The Parallel Environment does not
  support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
  option are incompatible.
! .IP "\fB\-malign\-natural\fR" 4
  .IX Item "-malign-natural"
  .PD 0
! .IP "\fB\-malign\-power\fR" 4
  .IX Item "-malign-power"
  .PD
! On \s-1AIX,\s0 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
! \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
! types, such as floating-point doubles, on their natural size-based boundary.
! The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
! alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI.\s0
  .Sp
  On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
  is not supported.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Generate code that does not use (uses) the floating-point register set.
! Software floating-point emulation is provided if you use the
! \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
! .IP "\fB\-mmultiple\fR" 4
  .IX Item "-mmultiple"
  .PD 0
! .IP "\fB\-mno\-multiple\fR" 4
  .IX Item "-mno-multiple"
  .PD
  Generate code that uses (does not use) the load multiple word
  instructions and the store multiple word instructions.  These
! instructions are generated by default on \s-1POWER\s0 systems, and not
! generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
  PowerPC systems, since those instructions do not work when the
! processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
! \&\s-1PPC750\s0 which permit these instructions in little-endian mode.
! .IP "\fB\-mupdate\fR" 4
  .IX Item "-mupdate"
  .PD 0
! .IP "\fB\-mno\-update\fR" 4
  .IX Item "-mno-update"
  .PD
  Generate code that uses (does not use) the load or store instructions
--- 30515,30799 ----
  \&\fB\-mcpu\fR.  If both are specified, the code generated uses the
  architecture and registers set by \fB\-mcpu\fR, but the
  scheduling parameters set by \fB\-mtune\fR.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
! Generate PowerPC64 code for the small model: The TOC is limited to
  64k.
! .IP \fB\-mcmodel=medium\fR 4
  .IX Item "-mcmodel=medium"
! Generate PowerPC64 code for the medium model: The TOC and other static
  data may be up to a total of 4G in size.  This is the default for 64\-bit
  Linux.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
! Generate PowerPC64 code for the large model: The TOC may be up to 4G
  in size.  Other data and code is only limited by the 64\-bit address
  space.
! .IP \fB\-maltivec\fR 4
  .IX Item "-maltivec"
  .PD 0
! .IP \fB\-mno\-altivec\fR 4
  .IX Item "-mno-altivec"
  .PD
  Generate code that uses (does not use) AltiVec instructions, and also
! enable the use of built\-in functions that allow more direct access to
  the AltiVec instruction set.  You may also need to set
! \&\fB\-mabi=altivec\fR to adjust the current ABI with AltiVec ABI
  enhancements.
  .Sp
  When \fB\-maltivec\fR is used, the element order for AltiVec intrinsics
  such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
  match array element order corresponding to the endianness of the
  target.  That is, element zero identifies the leftmost element in a
! vector register when targeting a big\-endian platform, and identifies
  the rightmost element in a vector register when targeting a
! little\-endian platform.
! .IP \fB\-mvrsave\fR 4
  .IX Item "-mvrsave"
  .PD 0
! .IP \fB\-mno\-vrsave\fR 4
  .IX Item "-mno-vrsave"
  .PD
! Generate VRSAVE instructions when generating AltiVec code.
! .IP \fB\-msecure\-plt\fR 4
  .IX Item "-msecure-plt"
  Generate code that allows \fBld\fR and \fBld.so\fR
  to build executables and shared
! libraries with non\-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
  This is a PowerPC
! 32\-bit SYSV ABI option.
! .IP \fB\-mbss\-plt\fR 4
  .IX Item "-mbss-plt"
! Generate code that uses a BSS \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
  fills in, and
  requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
  sections that are both writable and executable.
! This is a PowerPC 32\-bit SYSV ABI option.
! .IP \fB\-misel\fR 4
  .IX Item "-misel"
  .PD 0
! .IP \fB\-mno\-isel\fR 4
  .IX Item "-mno-isel"
  .PD
! This switch enables or disables the generation of ISEL instructions.
! .IP \fB\-mvsx\fR 4
  .IX Item "-mvsx"
  .PD 0
! .IP \fB\-mno\-vsx\fR 4
  .IX Item "-mno-vsx"
  .PD
! Generate code that uses (does not use) vector/scalar (VSX)
! instructions, and also enable the use of built\-in functions that allow
! more direct access to the VSX instruction set.
! .IP \fB\-mcrypto\fR 4
  .IX Item "-mcrypto"
  .PD 0
! .IP \fB\-mno\-crypto\fR 4
  .IX Item "-mno-crypto"
  .PD
! Enable the use (disable) of the built\-in functions that allow direct
  access to the cryptographic instructions that were added in version
! 2.07 of the PowerPC ISA.
! .IP \fB\-mhtm\fR 4
  .IX Item "-mhtm"
  .PD 0
! .IP \fB\-mno\-htm\fR 4
  .IX Item "-mno-htm"
  .PD
! Enable (disable) the use of the built\-in functions that allow direct
! access to the Hardware Transactional Memory (HTM) instructions that
! were added in version 2.07 of the PowerPC ISA.
! .IP \fB\-mpower8\-fusion\fR 4
  .IX Item "-mpower8-fusion"
  .PD 0
! .IP \fB\-mno\-power8\-fusion\fR 4
  .IX Item "-mno-power8-fusion"
  .PD
  Generate code that keeps (does not keeps) some integer operations
  adjacent so that the instructions can be fused together on power8 and
  later processors.
! .IP \fB\-mquad\-memory\fR 4
  .IX Item "-mquad-memory"
  .PD 0
! .IP \fB\-mno\-quad\-memory\fR 4
  .IX Item "-mno-quad-memory"
  .PD
! Generate code that uses (does not use) the non\-atomic quad word memory
  instructions.  The \fB\-mquad\-memory\fR option requires use of
  64\-bit mode.
! .IP \fB\-mquad\-memory\-atomic\fR 4
  .IX Item "-mquad-memory-atomic"
  .PD 0
! .IP \fB\-mno\-quad\-memory\-atomic\fR 4
  .IX Item "-mno-quad-memory-atomic"
  .PD
  Generate code that uses (does not use) the atomic quad word memory
  instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
  64\-bit mode.
! .IP \fB\-mfloat128\fR 4
  .IX Item "-mfloat128"
  .PD 0
! .IP \fB\-mno\-float128\fR 4
  .IX Item "-mno-float128"
  .PD
! Enable/disable the \fI_\|_float128\fR keyword for IEEE 128\-bit floating point
! and use either software emulation for IEEE 128\-bit floating point or
  hardware instructions.
  .Sp
! The VSX instruction set (\fB\-mvsx\fR) must be enabled to use the IEEE
! 128\-bit floating point support.  The IEEE 128\-bit floating point is only
  supported on Linux.
  .Sp
  The default for \fB\-mfloat128\fR is enabled on PowerPC Linux
! systems using the VSX instruction set, and disabled on other systems.
  .Sp
! If you use the ISA 3.0 instruction set (\fB\-mcpu=power9\fR) on a
! 64\-bit system, the IEEE 128\-bit floating point support will also enable
! the generation of ISA 3.0 IEEE 128\-bit floating point instructions.
! Otherwise, if you do not specify to generate ISA 3.0 instructions or you
! are targeting a 32\-bit big endian system, IEEE 128\-bit floating point
  will be done with software emulation.
! .IP \fB\-mfloat128\-hardware\fR 4
  .IX Item "-mfloat128-hardware"
  .PD 0
! .IP \fB\-mno\-float128\-hardware\fR 4
  .IX Item "-mno-float128-hardware"
  .PD
! Enable/disable using ISA 3.0 hardware instructions to support the
  \&\fI_\|_float128\fR data type.
  .Sp
  The default for \fB\-mfloat128\-hardware\fR is enabled on PowerPC
! Linux systems using the ISA 3.0 instruction set, and disabled on other
  systems.
! .IP \fB\-m32\fR 4
  .IX Item "-m32"
  .PD 0
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
  .PD
! Generate code for 32\-bit or 64\-bit environments of Darwin and SVR4
  targets (including GNU/Linux).  The 32\-bit environment sets int, long
  and pointer to 32 bits and generates code that runs on any PowerPC
  variant.  The 64\-bit environment sets int to 32 bits and long and
  pointer to 64 bits, and generates code for PowerPC64, as for
  \&\fB\-mpowerpc64\fR.
! .IP \fB\-mfull\-toc\fR 4
  .IX Item "-mfull-toc"
  .PD 0
! .IP \fB\-mno\-fp\-in\-toc\fR 4
  .IX Item "-mno-fp-in-toc"
! .IP \fB\-mno\-sum\-in\-toc\fR 4
  .IX Item "-mno-sum-in-toc"
! .IP \fB\-mminimal\-toc\fR 4
  .IX Item "-mminimal-toc"
  .PD
! Modify generation of the TOC (Table Of Contents), which is created for
  every executable file.  The \fB\-mfull\-toc\fR option is selected by
! default.  In that case, GCC allocates at least one TOC entry for
! each unique non\-automatic variable reference in your program.  GCC
! also places floating\-point constants in the TOC.  However, only
! 16,384 entries are available in the TOC.
  .Sp
  If you receive a linker error message that saying you have overflowed
! the available TOC space, you can reduce the amount of TOC space used
  with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
! \&\fB\-mno\-fp\-in\-toc\fR prevents GCC from putting floating\-point
! constants in the TOC and \fB\-mno\-sum\-in\-toc\fR forces GCC to
  generate code to calculate the sum of an address and a constant at
! run time instead of putting that sum into the TOC.  You may specify one
! or both of these options.  Each causes GCC to produce very slightly
! slower and larger code at the expense of conserving TOC space.
  .Sp
! If you still run out of space in the TOC even when you specify both of
  these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
! GCC to make only one TOC entry for every file.  When you specify this
! option, GCC produces code that is slower and larger but which
! uses extremely little TOC space.  You may wish to use this option
! only on files that contain less frequently\-executed code.
! .IP \fB\-maix64\fR 4
  .IX Item "-maix64"
  .PD 0
! .IP \fB\-maix32\fR 4
  .IX Item "-maix32"
  .PD
! Enable 64\-bit AIX ABI and calling convention: 64\-bit pointers, 64\-bit
  \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
  Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
! while \fB\-maix32\fR disables the 64\-bit ABI and
! implies \fB\-mno\-powerpc64\fR.  GCC defaults to \fB\-maix32\fR.
! .IP \fB\-mxl\-compat\fR 4
  .IX Item "-mxl-compat"
  .PD 0
! .IP \fB\-mno\-xl\-compat\fR 4
  .IX Item "-mno-xl-compat"
  .PD
! Produce code that conforms more closely to IBM XL compiler semantics
! when using AIX\-compatible ABI.  Pass floating\-point arguments to
! prototyped functions beyond the register save area (RSA) on the stack
  in addition to argument FPRs.  Do not assume that most significant
  double in 128\-bit long double value is properly rounded when comparing
! values and converting to double.  Use XL symbol names for long double
  support routines.
  .Sp
! The AIX calling convention was extended but not initially documented to
  handle an obscure K&R C case of calling a function that takes the
! address of its arguments with fewer arguments than declared.  IBM XL
! compilers access floating\-point arguments that do not fit in the
! RSA from the stack when a subroutine is compiled without
! optimization.  Because always storing floating\-point arguments on the
  stack is inefficient and rarely needed, this option is not enabled by
! default and only is necessary when calling subroutines compiled by IBM
! XL compilers without optimization.
! .IP \fB\-mpe\fR 4
  .IX Item "-mpe"
! Support \fIIBM RS/6000 SP\fR \fIParallel Environment\fR (PE).  Link an
  application written to use message passing with special startup code to
! enable the application to run.  The system must have PE installed in the
  standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
  must be overridden with the \fB\-specs=\fR option to specify the
  appropriate directory location.  The Parallel Environment does not
  support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
  option are incompatible.
! .IP \fB\-malign\-natural\fR 4
  .IX Item "-malign-natural"
  .PD 0
! .IP \fB\-malign\-power\fR 4
  .IX Item "-malign-power"
  .PD
! On AIX, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
! \&\fB\-malign\-natural\fR overrides the ABI\-defined alignment of larger
! types, such as floating\-point doubles, on their natural size\-based boundary.
! The option \fB\-malign\-power\fR instructs GCC to follow the ABI\-specified
! alignment rules.  GCC defaults to the standard alignment defined in the ABI.
  .Sp
  On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
  is not supported.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Generate code that does not use (uses) the floating\-point register set.
! Software floating\-point emulation is provided if you use the
! \&\fB\-msoft\-float\fR option, and pass the option to GCC when linking.
! .IP \fB\-mmultiple\fR 4
  .IX Item "-mmultiple"
  .PD 0
! .IP \fB\-mno\-multiple\fR 4
  .IX Item "-mno-multiple"
  .PD
  Generate code that uses (does not use) the load multiple word
  instructions and the store multiple word instructions.  These
! instructions are generated by default on POWER systems, and not
! generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little\-endian
  PowerPC systems, since those instructions do not work when the
! processor is in little\-endian mode.  The exceptions are PPC740 and
! PPC750 which permit these instructions in little\-endian mode.
! .IP \fB\-mupdate\fR 4
  .IX Item "-mupdate"
  .PD 0
! .IP \fB\-mno\-update\fR 4
  .IX Item "-mno-update"
  .PD
  Generate code that uses (does not use) the load or store instructions
*************** location.  These instructions are genera
*** 30868,30877 ****
  stack pointer is updated and the address of the previous frame is
  stored, which means code that walks the stack frame across interrupts or
  signals may get corrupted data.
! .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
  .IX Item "-mavoid-indexed-addresses"
  .PD 0
! .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
  .IX Item "-mno-avoid-indexed-addresses"
  .PD
  Generate code that tries to avoid (not avoid) the use of indexed load
--- 30803,30812 ----
  stack pointer is updated and the address of the previous frame is
  stored, which means code that walks the stack frame across interrupts or
  signals may get corrupted data.
! .IP \fB\-mavoid\-indexed\-addresses\fR 4
  .IX Item "-mavoid-indexed-addresses"
  .PD 0
! .IP \fB\-mno\-avoid\-indexed\-addresses\fR 4
  .IX Item "-mno-avoid-indexed-addresses"
  .PD
  Generate code that tries to avoid (not avoid) the use of indexed load
*************** or store instructions. These instruction
*** 30879,30942 ****
  penalty on Power6 processors in certain situations, such as when
  stepping through large arrays that cross a 16M boundary.  This option
  is enabled by default when targeting Power6 and disabled otherwise.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP "\fB\-mmulhw\fR" 4
  .IX Item "-mmulhw"
  .PD 0
! .IP "\fB\-mno\-mulhw\fR" 4
  .IX Item "-mno-mulhw"
  .PD
! Generate code that uses (does not use) the half-word multiply and
! multiply-accumulate instructions on the \s-1IBM 405, 440, 464\s0 and 476 processors.
  These instructions are generated by default when targeting those
  processors.
! .IP "\fB\-mdlmzb\fR" 4
  .IX Item "-mdlmzb"
  .PD 0
! .IP "\fB\-mno\-dlmzb\fR" 4
  .IX Item "-mno-dlmzb"
  .PD
! Generate code that uses (does not use) the string-search \fBdlmzb\fR
! instruction on the \s-1IBM 405, 440, 464\s0 and 476 processors.  This instruction is
  generated by default when targeting those processors.
! .IP "\fB\-mno\-bit\-align\fR" 4
  .IX Item "-mno-bit-align"
  .PD 0
! .IP "\fB\-mbit\-align\fR" 4
  .IX Item "-mbit-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) force structures
! and unions that contain bit-fields to be aligned to the base type of the
! bit-field.
  .Sp
  For example, by default a structure containing nothing but 8
! \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
  boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
  the structure is aligned to a 1\-byte boundary and is 1 byte in
  size.
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  unaligned memory references are handled by the system.
! .IP "\fB\-mrelocatable\fR" 4
  .IX Item "-mrelocatable"
  .PD 0
! .IP "\fB\-mno\-relocatable\fR" 4
  .IX Item "-mno-relocatable"
  .PD
  Generate code that allows (does not allow) a static executable to be
--- 30814,30877 ----
  penalty on Power6 processors in certain situations, such as when
  stepping through large arrays that cross a 16M boundary.  This option
  is enabled by default when targeting Power6 and disabled otherwise.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating\-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine\-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine\-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP \fB\-mmulhw\fR 4
  .IX Item "-mmulhw"
  .PD 0
! .IP \fB\-mno\-mulhw\fR 4
  .IX Item "-mno-mulhw"
  .PD
! Generate code that uses (does not use) the half\-word multiply and
! multiply\-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
  These instructions are generated by default when targeting those
  processors.
! .IP \fB\-mdlmzb\fR 4
  .IX Item "-mdlmzb"
  .PD 0
! .IP \fB\-mno\-dlmzb\fR 4
  .IX Item "-mno-dlmzb"
  .PD
! Generate code that uses (does not use) the string\-search \fBdlmzb\fR
! instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
  generated by default when targeting those processors.
! .IP \fB\-mno\-bit\-align\fR 4
  .IX Item "-mno-bit-align"
  .PD 0
! .IP \fB\-mbit\-align\fR 4
  .IX Item "-mbit-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) force structures
! and unions that contain bit\-fields to be aligned to the base type of the
! bit\-field.
  .Sp
  For example, by default a structure containing nothing but 8
! \&\f(CW\*(C`unsigned\*(C'\fR bit\-fields of length 1 is aligned to a 4\-byte
  boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
  the structure is aligned to a 1\-byte boundary and is 1 byte in
  size.
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  unaligned memory references are handled by the system.
! .IP \fB\-mrelocatable\fR 4
  .IX Item "-mrelocatable"
  .PD 0
! .IP \fB\-mno\-relocatable\fR 4
  .IX Item "-mno-relocatable"
  .PD
  Generate code that allows (does not allow) a static executable to be
*************** a table of 32\-bit addresses generated b
*** 30947,30956 ****
  work, all objects linked together must be compiled with
  \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
  \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
! .IP "\fB\-mrelocatable\-lib\fR" 4
  .IX Item "-mrelocatable-lib"
  .PD 0
! .IP "\fB\-mno\-relocatable\-lib\fR" 4
  .IX Item "-mno-relocatable-lib"
  .PD
  Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
--- 30882,30891 ----
  work, all objects linked together must be compiled with
  \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
  \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
! .IP \fB\-mrelocatable\-lib\fR 4
  .IX Item "-mrelocatable-lib"
  .PD 0
! .IP \fB\-mno\-relocatable\-lib\fR 4
  .IX Item "-mno-relocatable-lib"
  .PD
  Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
*************** run time, but \fB\-mrelocatable\-lib\fR
*** 30959,31214 ****
  alignment of \fB\-mrelocatable\fR.  Objects compiled with
  \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
  any combination of the \fB\-mrelocatable\fR options.
! .IP "\fB\-mno\-toc\fR" 4
  .IX Item "-mno-toc"
  .PD 0
! .IP "\fB\-mtoc\fR" 4
  .IX Item "-mtoc"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  register 2 contains a pointer to a global area pointing to the addresses
  used in the program.
! .IP "\fB\-mlittle\fR" 4
  .IX Item "-mlittle"
  .PD 0
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
  the same as \fB\-mlittle\fR.
! .IP "\fB\-mbig\fR" 4
  .IX Item "-mbig"
  .PD 0
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
  the same as \fB\-mbig\fR.
! .IP "\fB\-mdynamic\-no\-pic\fR" 4
  .IX Item "-mdynamic-no-pic"
  On Darwin / macOS systems, compile code so that it is not
  relocatable, but that its external references are relocatable.  The
  resulting code is suitable for applications, but not shared
  libraries.
! .IP "\fB\-msingle\-pic\-base\fR" 4
  .IX Item "-msingle-pic-base"
! Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
  .IX Item "-mprioritize-restricted-insns=priority"
  This option controls the priority that is assigned to
! dispatch-slot restricted instructions during the second scheduling
  pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
! or \fB2\fR to assign no, highest, or second-highest (respectively) 
! priority to dispatch-slot restricted
  instructions.
! .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
  .IX Item "-msched-costly-dep=dependence_type"
  This option controls which dependences are considered costly
  by the target during instruction scheduling.  The argument
  \&\fIdependence_type\fR takes one of the following values:
  .RS 4
! .IP "\fBno\fR" 4
  .IX Item "no"
  No dependence is costly.
! .IP "\fBall\fR" 4
  .IX Item "all"
  All dependences are costly.
! .IP "\fBtrue_store_to_load\fR" 4
  .IX Item "true_store_to_load"
  A true dependence from store to load is costly.
! .IP "\fBstore_to_load\fR" 4
  .IX Item "store_to_load"
  Any dependence from store to load is costly.
! .IP "\fInumber\fR" 4
  .IX Item "number"
  Any dependence for which the latency is greater than or equal to 
  \&\fInumber\fR is costly.
  .RE
  .RS 4
  .RE
! .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
  .IX Item "-minsert-sched-nops=scheme"
! This option controls which \s-1NOP\s0 insertion scheme is used during
  the second scheduling pass.  The argument \fIscheme\fR takes one of the
  following values:
  .RS 4
! .IP "\fBno\fR" 4
  .IX Item "no"
! Don't insert NOPs.
! .IP "\fBpad\fR" 4
  .IX Item "pad"
  Pad with NOPs any dispatch group that has vacant issue slots,
! according to the scheduler's grouping.
! .IP "\fBregroup_exact\fR" 4
  .IX Item "regroup_exact"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert exactly as many NOPs as needed to force an insn
  to a new group, according to the estimated processor grouping.
! .IP "\fInumber\fR" 4
  .IX Item "number"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mcall\-sysv\fR" 4
  .IX Item "-mcall-sysv"
  On System V.4 and embedded PowerPC systems compile code using calling
  conventions that adhere to the March 1995 draft of the System V
  Application Binary Interface, PowerPC processor supplement.  This is the
! default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
! .IP "\fB\-mcall\-sysv\-eabi\fR" 4
  .IX Item "-mcall-sysv-eabi"
  .PD 0
! .IP "\fB\-mcall\-eabi\fR" 4
  .IX Item "-mcall-eabi"
  .PD
  Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
! .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
  .IX Item "-mcall-sysv-noeabi"
  Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
! .IP "\fB\-mcall\-aixdesc\fR" 4
  .IX Item "-mcall-aixdesc"
! On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
  operating system.
! .IP "\fB\-mcall\-linux\fR" 4
  .IX Item "-mcall-linux"
  On System V.4 and embedded PowerPC systems compile code for the
! Linux-based \s-1GNU\s0 system.
! .IP "\fB\-mcall\-freebsd\fR" 4
  .IX Item "-mcall-freebsd"
  On System V.4 and embedded PowerPC systems compile code for the
  FreeBSD operating system.
! .IP "\fB\-mcall\-netbsd\fR" 4
  .IX Item "-mcall-netbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  NetBSD operating system.
! .IP "\fB\-mcall\-openbsd\fR" 4
  .IX Item "-mcall-openbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  OpenBSD operating system.
! .IP "\fB\-mtraceback=\fR\fItraceback_type\fR" 4
  .IX Item "-mtraceback=traceback_type"
  Select the type of traceback table. Valid values for \fItraceback_type\fR
  are \fBfull\fR, \fBpart\fR, and \fBno\fR.
! .IP "\fB\-maix\-struct\-return\fR" 4
  .IX Item "-maix-struct-return"
! Return all structures in memory (as specified by the \s-1AIX ABI\s0).
! .IP "\fB\-msvr4\-struct\-return\fR" 4
  .IX Item "-msvr4-struct-return"
  Return structures smaller than 8 bytes in registers (as specified by the
! \&\s-1SVR4 ABI\s0).
! .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
  .IX Item "-mabi=abi-type"
! Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
! Valid values are: \fBaltivec\fR, \fBno-altivec\fR,
  \&\fBibmlongdouble\fR, \fBieeelongdouble\fR,
  \&\fBelfv1\fR, \fBelfv2\fR,
! and for \s-1AIX:\s0 \fBvec-extabi\fR, \fBvec-default\fR.
! .IP "\fB\-mabi=ibmlongdouble\fR" 4
  .IX Item "-mabi=ibmlongdouble"
! Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
! This is not likely to work if your system defaults to using \s-1IEEE\s0
! extended-precision long double.  If you change the long double type
! from \s-1IEEE\s0 extended-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP "\fB\-mabi=ieeelongdouble\fR" 4
  .IX Item "-mabi=ieeelongdouble"
! Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
! This is not likely to work if your system defaults to using \s-1IBM\s0
! extended-precision long double.  If you change the long double type
! from \s-1IBM\s0 extended-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP "\fB\-mabi=elfv1\fR" 4
  .IX Item "-mabi=elfv1"
! Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI.\s0
! This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
! Overriding the default \s-1ABI\s0 requires special system support and is
  likely to fail in spectacular ways.
! .IP "\fB\-mabi=elfv2\fR" 4
  .IX Item "-mabi=elfv2"
! Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI.\s0
! This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
! Overriding the default \s-1ABI\s0 requires special system support and is
  likely to fail in spectacular ways.
! .IP "\fB\-mgnu\-attribute\fR" 4
  .IX Item "-mgnu-attribute"
  .PD 0
! .IP "\fB\-mno\-gnu\-attribute\fR" 4
  .IX Item "-mno-gnu-attribute"
  .PD
  Emit .gnu_attribute assembly directives to set tag/value pairs in a
! \&.gnu.attributes section that specify \s-1ABI\s0 variations in function
  parameters or return values.
! .IP "\fB\-mprototype\fR" 4
  .IX Item "-mprototype"
  .PD 0
! .IP "\fB\-mno\-prototype\fR" 4
  .IX Item "-mno-prototype"
  .PD
  On System V.4 and embedded PowerPC systems assume that all calls to
  variable argument functions are properly prototyped.  Otherwise, the
! compiler must insert an instruction before every non-prototyped call to
  set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
! indicate whether floating-point values are passed in the floating-point
  registers in case the function takes variable arguments.  With
  \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
  set or clear the bit.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
  \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
  configurations.
! .IP "\fB\-mmvme\fR" 4
  .IX Item "-mmvme"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
  \&\fIlibc.a\fR.
! .IP "\fB\-mads\fR" 4
  .IX Item "-mads"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
  \&\fIlibc.a\fR.
! .IP "\fB\-myellowknife\fR" 4
  .IX Item "-myellowknife"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
  \&\fIlibc.a\fR.
! .IP "\fB\-mvxworks\fR" 4
  .IX Item "-mvxworks"
  On System V.4 and embedded PowerPC systems, specify that you are
  compiling for a VxWorks system.
! .IP "\fB\-memb\fR" 4
  .IX Item "-memb"
! On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the \s-1ELF\s0 flags
  header to indicate that \fBeabi\fR extended relocations are used.
! .IP "\fB\-meabi\fR" 4
  .IX Item "-meabi"
  .PD 0
! .IP "\fB\-mno\-eabi\fR" 4
  .IX Item "-mno-eabi"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) adhere to the
! Embedded Applications Binary Interface (\s-1EABI\s0), which is a set of
  modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
  means that the stack is aligned to an 8\-byte boundary, a function
! \&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the \s-1EABI\s0
  environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
  \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
  \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
! no \s-1EABI\s0 initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
  \&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
  small data area.  The \fB\-meabi\fR option is on by default if you
! configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
! .IP "\fB\-msdata=eabi\fR" 4
  .IX Item "-msdata=eabi"
  On System V.4 and embedded PowerPC systems, put small initialized
  \&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
--- 30894,31149 ----
  alignment of \fB\-mrelocatable\fR.  Objects compiled with
  \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
  any combination of the \fB\-mrelocatable\fR options.
! .IP \fB\-mno\-toc\fR 4
  .IX Item "-mno-toc"
  .PD 0
! .IP \fB\-mtoc\fR 4
  .IX Item "-mtoc"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  register 2 contains a pointer to a global area pointing to the addresses
  used in the program.
! .IP \fB\-mlittle\fR 4
  .IX Item "-mlittle"
  .PD 0
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in little\-endian mode.  The \fB\-mlittle\-endian\fR option is
  the same as \fB\-mlittle\fR.
! .IP \fB\-mbig\fR 4
  .IX Item "-mbig"
  .PD 0
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in big\-endian mode.  The \fB\-mbig\-endian\fR option is
  the same as \fB\-mbig\fR.
! .IP \fB\-mdynamic\-no\-pic\fR 4
  .IX Item "-mdynamic-no-pic"
  On Darwin / macOS systems, compile code so that it is not
  relocatable, but that its external references are relocatable.  The
  resulting code is suitable for applications, but not shared
  libraries.
! .IP \fB\-msingle\-pic\-base\fR 4
  .IX Item "-msingle-pic-base"
! Treat the register used for PIC addressing as read\-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP \fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 4
  .IX Item "-mprioritize-restricted-insns=priority"
  This option controls the priority that is assigned to
! dispatch\-slot restricted instructions during the second scheduling
  pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
! or \fB2\fR to assign no, highest, or second\-highest (respectively) 
! priority to dispatch\-slot restricted
  instructions.
! .IP \fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 4
  .IX Item "-msched-costly-dep=dependence_type"
  This option controls which dependences are considered costly
  by the target during instruction scheduling.  The argument
  \&\fIdependence_type\fR takes one of the following values:
  .RS 4
! .IP \fBno\fR 4
  .IX Item "no"
  No dependence is costly.
! .IP \fBall\fR 4
  .IX Item "all"
  All dependences are costly.
! .IP \fBtrue_store_to_load\fR 4
  .IX Item "true_store_to_load"
  A true dependence from store to load is costly.
! .IP \fBstore_to_load\fR 4
  .IX Item "store_to_load"
  Any dependence from store to load is costly.
! .IP \fInumber\fR 4
  .IX Item "number"
  Any dependence for which the latency is greater than or equal to 
  \&\fInumber\fR is costly.
  .RE
  .RS 4
  .RE
! .IP \fB\-minsert\-sched\-nops=\fR\fIscheme\fR 4
  .IX Item "-minsert-sched-nops=scheme"
! This option controls which NOP insertion scheme is used during
  the second scheduling pass.  The argument \fIscheme\fR takes one of the
  following values:
  .RS 4
! .IP \fBno\fR 4
  .IX Item "no"
! Don\*(Aqt insert NOPs.
! .IP \fBpad\fR 4
  .IX Item "pad"
  Pad with NOPs any dispatch group that has vacant issue slots,
! according to the scheduler\*(Aqs grouping.
! .IP \fBregroup_exact\fR 4
  .IX Item "regroup_exact"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert exactly as many NOPs as needed to force an insn
  to a new group, according to the estimated processor grouping.
! .IP \fInumber\fR 4
  .IX Item "number"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
  .RE
  .RS 4
  .RE
! .IP \fB\-mcall\-sysv\fR 4
  .IX Item "-mcall-sysv"
  On System V.4 and embedded PowerPC systems compile code using calling
  conventions that adhere to the March 1995 draft of the System V
  Application Binary Interface, PowerPC processor supplement.  This is the
! default unless you configured GCC using \fBpowerpc\-*\-eabiaix\fR.
! .IP \fB\-mcall\-sysv\-eabi\fR 4
  .IX Item "-mcall-sysv-eabi"
  .PD 0
! .IP \fB\-mcall\-eabi\fR 4
  .IX Item "-mcall-eabi"
  .PD
  Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
! .IP \fB\-mcall\-sysv\-noeabi\fR 4
  .IX Item "-mcall-sysv-noeabi"
  Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
! .IP \fB\-mcall\-aixdesc\fR 4
  .IX Item "-mcall-aixdesc"
! On System V.4 and embedded PowerPC systems compile code for the AIX
  operating system.
! .IP \fB\-mcall\-linux\fR 4
  .IX Item "-mcall-linux"
  On System V.4 and embedded PowerPC systems compile code for the
! Linux\-based GNU system.
! .IP \fB\-mcall\-freebsd\fR 4
  .IX Item "-mcall-freebsd"
  On System V.4 and embedded PowerPC systems compile code for the
  FreeBSD operating system.
! .IP \fB\-mcall\-netbsd\fR 4
  .IX Item "-mcall-netbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  NetBSD operating system.
! .IP \fB\-mcall\-openbsd\fR 4
  .IX Item "-mcall-openbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  OpenBSD operating system.
! .IP \fB\-mtraceback=\fR\fItraceback_type\fR 4
  .IX Item "-mtraceback=traceback_type"
  Select the type of traceback table. Valid values for \fItraceback_type\fR
  are \fBfull\fR, \fBpart\fR, and \fBno\fR.
! .IP \fB\-maix\-struct\-return\fR 4
  .IX Item "-maix-struct-return"
! Return all structures in memory (as specified by the AIX ABI).
! .IP \fB\-msvr4\-struct\-return\fR 4
  .IX Item "-msvr4-struct-return"
  Return structures smaller than 8 bytes in registers (as specified by the
! SVR4 ABI).
! .IP \fB\-mabi=\fR\fIabi\-type\fR 4
  .IX Item "-mabi=abi-type"
! Extend the current ABI with a particular extension, or remove such extension.
! Valid values are: \fBaltivec\fR, \fBno\-altivec\fR,
  \&\fBibmlongdouble\fR, \fBieeelongdouble\fR,
  \&\fBelfv1\fR, \fBelfv2\fR,
! and for AIX: \fBvec\-extabi\fR, \fBvec\-default\fR.
! .IP \fB\-mabi=ibmlongdouble\fR 4
  .IX Item "-mabi=ibmlongdouble"
! Change the current ABI to use IBM extended\-precision long double.
! This is not likely to work if your system defaults to using IEEE
! extended\-precision long double.  If you change the long double type
! from IEEE extended\-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP \fB\-mabi=ieeelongdouble\fR 4
  .IX Item "-mabi=ieeelongdouble"
! Change the current ABI to use IEEE extended\-precision long double.
! This is not likely to work if your system defaults to using IBM
! extended\-precision long double.  If you change the long double type
! from IBM extended\-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP \fB\-mabi=elfv1\fR 4
  .IX Item "-mabi=elfv1"
! Change the current ABI to use the ELFv1 ABI.
! This is the default ABI for big\-endian PowerPC 64\-bit Linux.
! Overriding the default ABI requires special system support and is
  likely to fail in spectacular ways.
! .IP \fB\-mabi=elfv2\fR 4
  .IX Item "-mabi=elfv2"
! Change the current ABI to use the ELFv2 ABI.
! This is the default ABI for little\-endian PowerPC 64\-bit Linux.
! Overriding the default ABI requires special system support and is
  likely to fail in spectacular ways.
! .IP \fB\-mgnu\-attribute\fR 4
  .IX Item "-mgnu-attribute"
  .PD 0
! .IP \fB\-mno\-gnu\-attribute\fR 4
  .IX Item "-mno-gnu-attribute"
  .PD
  Emit .gnu_attribute assembly directives to set tag/value pairs in a
! \&.gnu.attributes section that specify ABI variations in function
  parameters or return values.
! .IP \fB\-mprototype\fR 4
  .IX Item "-mprototype"
  .PD 0
! .IP \fB\-mno\-prototype\fR 4
  .IX Item "-mno-prototype"
  .PD
  On System V.4 and embedded PowerPC systems assume that all calls to
  variable argument functions are properly prototyped.  Otherwise, the
! compiler must insert an instruction before every non\-prototyped call to
  set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
! indicate whether floating\-point values are passed in the floating\-point
  registers in case the function takes variable arguments.  With
  \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
  set or clear the bit.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
  \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
  configurations.
! .IP \fB\-mmvme\fR 4
  .IX Item "-mmvme"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
  \&\fIlibc.a\fR.
! .IP \fB\-mads\fR 4
  .IX Item "-mads"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
  \&\fIlibc.a\fR.
! .IP \fB\-myellowknife\fR 4
  .IX Item "-myellowknife"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
  \&\fIlibc.a\fR.
! .IP \fB\-mvxworks\fR 4
  .IX Item "-mvxworks"
  On System V.4 and embedded PowerPC systems, specify that you are
  compiling for a VxWorks system.
! .IP \fB\-memb\fR 4
  .IX Item "-memb"
! On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the ELF flags
  header to indicate that \fBeabi\fR extended relocations are used.
! .IP \fB\-meabi\fR 4
  .IX Item "-meabi"
  .PD 0
! .IP \fB\-mno\-eabi\fR 4
  .IX Item "-mno-eabi"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) adhere to the
! Embedded Applications Binary Interface (EABI), which is a set of
  modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
  means that the stack is aligned to an 8\-byte boundary, a function
! \&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the EABI
  environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
  \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
  \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
! no EABI initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
  \&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
  small data area.  The \fB\-meabi\fR option is on by default if you
! configured GCC using one of the \fBpowerpc*\-*\-eabi*\fR options.
! .IP \fB\-msdata=eabi\fR 4
  .IX Item "-msdata=eabi"
  On System V.4 and embedded PowerPC systems, put small initialized
  \&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
*************** global and static data in the \f(CW\*(C`
*** 31219,31225 ****
  the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
  incompatible with the \fB\-mrelocatable\fR option.  The
  \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
! .IP "\fB\-msdata=sysv\fR" 4
  .IX Item "-msdata=sysv"
  On System V.4 and embedded PowerPC systems, put small global and static
  data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
--- 31154,31160 ----
  the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
  incompatible with the \fB\-mrelocatable\fR option.  The
  \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
! .IP \fB\-msdata=sysv\fR 4
  .IX Item "-msdata=sysv"
  On System V.4 and embedded PowerPC systems, put small global and static
  data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
*************** data in the \f(CW\*(C`.sdata\*(C'\fR sec
*** 31227,31282 ****
  \&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
  The \fB\-msdata=sysv\fR option is incompatible with the
  \&\fB\-mrelocatable\fR option.
! .IP "\fB\-msdata=default\fR" 4
  .IX Item "-msdata=default"
  .PD 0
! .IP "\fB\-msdata\fR" 4
  .IX Item "-msdata"
  .PD
  On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
  compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
  same as \fB\-msdata=sysv\fR.
! .IP "\fB\-msdata=data\fR" 4
  .IX Item "-msdata=data"
  On System V.4 and embedded PowerPC systems, put small global
  data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
  data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
  to address small data however.  This is the default behavior unless
  other \fB\-msdata\fR options are used.
! .IP "\fB\-msdata=none\fR" 4
  .IX Item "-msdata=none"
  .PD 0
! .IP "\fB\-mno\-sdata\fR" 4
  .IX Item "-mno-sdata"
  .PD
  On embedded PowerPC systems, put all initialized global and static data
  in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
  \&\f(CW\*(C`.bss\*(C'\fR section.
! .IP "\fB\-mreadonly\-in\-sdata\fR" 4
  .IX Item "-mreadonly-in-sdata"
! Put read-only objects in the \f(CW\*(C`.sdata\*(C'\fR section as well.  This is the
  default.
! .IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
  .IX Item "-mblock-move-inline-limit=num"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
  copies) less than or equal to \fInum\fR bytes.  The minimum value for
  \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
! targets.  The default value is target-specific.
! .IP "\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR" 4
  .IX Item "-mblock-compare-inline-limit=num"
! Generate non-looping inline code for all block compares (such as calls
  to \f(CW\*(C`memcmp\*(C'\fR or structure compares) less than or equal to \fInum\fR
! bytes. If \fInum\fR is 0, all inline expansion (non-loop and loop) of
! block compare is disabled. The default value is target-specific.
! .IP "\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR" 4
  .IX Item "-mblock-compare-inline-loop-limit=num"
  Generate an inline expansion using loop code for all block compares that
  are less than or equal to \fInum\fR bytes, but greater than the limit
! for non-loop inline block compare expansion. If the block length is not
  constant, at most \fInum\fR bytes will be compared before \f(CW\*(C`memcmp\*(C'\fR
  is called to compare the remainder of the block. The default value is
! target-specific.
! .IP "\fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR" 4
  .IX Item "-mstring-compare-inline-limit=num"
  Compare at most \fInum\fR string bytes with inline code.
  If the difference or end of string is not found at the
--- 31162,31217 ----
  \&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
  The \fB\-msdata=sysv\fR option is incompatible with the
  \&\fB\-mrelocatable\fR option.
! .IP \fB\-msdata=default\fR 4
  .IX Item "-msdata=default"
  .PD 0
! .IP \fB\-msdata\fR 4
  .IX Item "-msdata"
  .PD
  On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
  compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
  same as \fB\-msdata=sysv\fR.
! .IP \fB\-msdata=data\fR 4
  .IX Item "-msdata=data"
  On System V.4 and embedded PowerPC systems, put small global
  data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
  data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
  to address small data however.  This is the default behavior unless
  other \fB\-msdata\fR options are used.
! .IP \fB\-msdata=none\fR 4
  .IX Item "-msdata=none"
  .PD 0
! .IP \fB\-mno\-sdata\fR 4
  .IX Item "-mno-sdata"
  .PD
  On embedded PowerPC systems, put all initialized global and static data
  in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
  \&\f(CW\*(C`.bss\*(C'\fR section.
! .IP \fB\-mreadonly\-in\-sdata\fR 4
  .IX Item "-mreadonly-in-sdata"
! Put read\-only objects in the \f(CW\*(C`.sdata\*(C'\fR section as well.  This is the
  default.
! .IP \fB\-mblock\-move\-inline\-limit=\fR\fInum\fR 4
  .IX Item "-mblock-move-inline-limit=num"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
  copies) less than or equal to \fInum\fR bytes.  The minimum value for
  \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
! targets.  The default value is target\-specific.
! .IP \fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR 4
  .IX Item "-mblock-compare-inline-limit=num"
! Generate non\-looping inline code for all block compares (such as calls
  to \f(CW\*(C`memcmp\*(C'\fR or structure compares) less than or equal to \fInum\fR
! bytes. If \fInum\fR is 0, all inline expansion (non\-loop and loop) of
! block compare is disabled. The default value is target\-specific.
! .IP \fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR 4
  .IX Item "-mblock-compare-inline-loop-limit=num"
  Generate an inline expansion using loop code for all block compares that
  are less than or equal to \fInum\fR bytes, but greater than the limit
! for non\-loop inline block compare expansion. If the block length is not
  constant, at most \fInum\fR bytes will be compared before \f(CW\*(C`memcmp\*(C'\fR
  is called to compare the remainder of the block. The default value is
! target\-specific.
! .IP \fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR 4
  .IX Item "-mstring-compare-inline-limit=num"
  Compare at most \fInum\fR string bytes with inline code.
  If the difference or end of string is not found at the
*************** take care of the rest of the comparison.
*** 31285,31306 ****
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  On embedded PowerPC systems, put global and static items less than or
! equal to \fInum\fR bytes into the small data or \s-1BSS\s0 sections instead of
! the normal data or \s-1BSS\s0 section.  By default, \fInum\fR is 8.  The
  \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
! .IP "\fB\-mregnames\fR" 4
  .IX Item "-mregnames"
  .PD 0
! .IP "\fB\-mno\-regnames\fR" 4
  .IX Item "-mno-regnames"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) emit register
  names in the assembly language output using symbolic forms.
! .IP "\fB\-mlongcall\fR" 4
  .IX Item "-mlongcall"
  .PD 0
! .IP "\fB\-mno\-longcall\fR" 4
  .IX Item "-mno-longcall"
  .PD
  By default assume that all calls are far away so that a longer and more
--- 31220,31241 ----
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  On embedded PowerPC systems, put global and static items less than or
! equal to \fInum\fR bytes into the small data or BSS sections instead of
! the normal data or BSS section.  By default, \fInum\fR is 8.  The
  \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
! .IP \fB\-mregnames\fR 4
  .IX Item "-mregnames"
  .PD 0
! .IP \fB\-mno\-regnames\fR 4
  .IX Item "-mno-regnames"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) emit register
  names in the assembly language output using symbolic forms.
! .IP \fB\-mlongcall\fR 4
  .IX Item "-mlongcall"
  .PD 0
! .IP \fB\-mno\-longcall\fR 4
  .IX Item "-mno-longcall"
  .PD
  By default assume that all calls are far away so that a longer and more
*************** expensive calling sequence is required.
*** 31308,31450 ****
  farther than 32 megabytes (33,554,432 bytes) from the current location.
  A short call is generated if the compiler knows
  the call cannot be that far away.  This setting can be overridden by
! the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
! longcall(0)\*(C'\fR.
  .Sp
! Some linkers are capable of detecting out-of-range calls and generating
  glue code on the fly.  On these systems, long calls are unnecessary and
! generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
! as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
! to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
  .Sp
! On PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer \s-1GNU\s0 linkers,
! \&\s-1GCC\s0 can generate long calls using an inline \s-1PLT\s0 call sequence (see
  \&\fB\-mpltseq\fR).  PowerPC with \fB\-mbss\-plt\fR and PowerPC64
! ELFv1 (big-endian) do not support inline \s-1PLT\s0 calls.
  .Sp
  On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
  callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
  addresses represent the callee and the branch island.  The
  Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
! callee\*(C'\fR if the \s-1PPC\s0 \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
  otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
  island.  The branch island is appended to the body of the
  calling function; it computes the full 32\-bit address of the callee
  and jumps to it.
  .Sp
! On Mach-O (Darwin) systems, this option directs the compiler emit to
  the glue for every direct call, and the Darwin linker decides whether
  to use or discard it.
  .Sp
! In the future, \s-1GCC\s0 may ignore all longcall specifications
  when the linker is known to generate glue.
! .IP "\fB\-mpltseq\fR" 4
  .IX Item "-mpltseq"
  .PD 0
! .IP "\fB\-mno\-pltseq\fR" 4
  .IX Item "-mno-pltseq"
  .PD
  Implement (do not implement) \-fno\-plt and long calls using an inline
! \&\s-1PLT\s0 call sequence that supports lazy linking and long calls to
! functions in dlopen'd shared libraries.  Inline \s-1PLT\s0 calls are only
! supported on PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer \s-1GNU\s0
  linkers, and are enabled by default if the support is detected when
! configuring \s-1GCC,\s0 and, in the case of 32\-bit PowerPC, if \s-1GCC\s0 is
  configured with \fB\-\-enable\-secureplt\fR.  \fB\-mpltseq\fR code
  and \fB\-mbss\-plt\fR 32\-bit PowerPC relocatable objects may not be
  linked together.
! .IP "\fB\-mtls\-markers\fR" 4
  .IX Item "-mtls-markers"
  .PD 0
! .IP "\fB\-mno\-tls\-markers\fR" 4
  .IX Item "-mno-tls-markers"
  .PD
  Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
  specifying the function argument.  The relocation allows the linker to
  reliably associate function call with argument setup instructions for
! \&\s-1TLS\s0 optimization, which in turn allows \s-1GCC\s0 to better schedule the
  sequence.
! .IP "\fB\-mrecip\fR" 4
  .IX Item "-mrecip"
  .PD 0
! .IP "\fB\-mno\-recip\fR" 4
  .IX Item "-mno-recip"
  .PD
  This option enables use of the reciprocal estimate and
  reciprocal square root estimate instructions with additional
! Newton-Raphson steps to increase precision instead of doing a divide or
! square root and divide for floating-point arguments.  You should use
  the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
  least \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-freciprocal\-math\fR and
  \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
! sequence is generally higher than the throughput of the non-reciprocal
  instruction, the precision of the sequence can be decreased by up to 2
  ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
  roots.
! .IP "\fB\-mrecip=\fR\fIopt\fR" 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma-separated list of options, which may
  be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP "\fBdiv\fR" 4
  .IX Item "div"
  Enable the reciprocal approximation instructions for both 
  single and double precision.
! .IP "\fBdivf\fR" 4
  .IX Item "divf"
! Enable the single-precision reciprocal approximation instructions.
! .IP "\fBdivd\fR" 4
  .IX Item "divd"
! Enable the double-precision reciprocal approximation instructions.
! .IP "\fBrsqrt\fR" 4
  .IX Item "rsqrt"
  Enable the reciprocal square root approximation instructions for both
  single and double precision.
! .IP "\fBrsqrtf\fR" 4
  .IX Item "rsqrtf"
! Enable the single-precision reciprocal square root approximation instructions.
! .IP "\fBrsqrtd\fR" 4
  .IX Item "rsqrtd"
! Enable the double-precision reciprocal square root approximation instructions.
  .RE
  .RS 4
  .Sp
  So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
  all of the reciprocal estimate instructions, except for the
  \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
! which handle the double-precision reciprocal square root calculations.
  .RE
! .IP "\fB\-mrecip\-precision\fR" 4
  .IX Item "-mrecip-precision"
  .PD 0
! .IP "\fB\-mno\-recip\-precision\fR" 4
  .IX Item "-mno-recip-precision"
  .PD
  Assume (do not assume) that the reciprocal estimate instructions
! provide higher-precision estimates than is mandated by the PowerPC
! \&\s-1ABI.\s0  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
  \&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
! The double-precision square root estimate instructions are not generated by
! default on low-precision machines, since they do not provide an
  estimate that converges after three steps.
! .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
  .IX Item "-mveclibabi=type"
! Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
  external library.  The only type supported at present is \fBmass\fR,
! which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
! (\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
! \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
  \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
  \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
  \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
--- 31243,31385 ----
  farther than 32 megabytes (33,554,432 bytes) from the current location.
  A short call is generated if the compiler knows
  the call cannot be that far away.  This setting can be overridden by
! the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW#pragma
! longcall(0)\fR.
  .Sp
! Some linkers are capable of detecting out\-of\-range calls and generating
  glue code on the fly.  On these systems, long calls are unnecessary and
! generate slower code.  As of this writing, the AIX linker can do this,
! as can the GNU linker for PowerPC/64.  It is planned to add this feature
! to the GNU linker for 32\-bit PowerPC systems as well.
  .Sp
! On PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer GNU linkers,
! GCC can generate long calls using an inline PLT call sequence (see
  \&\fB\-mpltseq\fR).  PowerPC with \fB\-mbss\-plt\fR and PowerPC64
! ELFv1 (big\-endian) do not support inline PLT calls.
  .Sp
  On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
  callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
  addresses represent the callee and the branch island.  The
  Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
! callee\*(C'\fR if the PPC \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
  otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
  island.  The branch island is appended to the body of the
  calling function; it computes the full 32\-bit address of the callee
  and jumps to it.
  .Sp
! On Mach\-O (Darwin) systems, this option directs the compiler emit to
  the glue for every direct call, and the Darwin linker decides whether
  to use or discard it.
  .Sp
! In the future, GCC may ignore all longcall specifications
  when the linker is known to generate glue.
! .IP \fB\-mpltseq\fR 4
  .IX Item "-mpltseq"
  .PD 0
! .IP \fB\-mno\-pltseq\fR 4
  .IX Item "-mno-pltseq"
  .PD
  Implement (do not implement) \-fno\-plt and long calls using an inline
! PLT call sequence that supports lazy linking and long calls to
! functions in dlopen\*(Aqd shared libraries.  Inline PLT calls are only
! supported on PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer GNU
  linkers, and are enabled by default if the support is detected when
! configuring GCC, and, in the case of 32\-bit PowerPC, if GCC is
  configured with \fB\-\-enable\-secureplt\fR.  \fB\-mpltseq\fR code
  and \fB\-mbss\-plt\fR 32\-bit PowerPC relocatable objects may not be
  linked together.
! .IP \fB\-mtls\-markers\fR 4
  .IX Item "-mtls-markers"
  .PD 0
! .IP \fB\-mno\-tls\-markers\fR 4
  .IX Item "-mno-tls-markers"
  .PD
  Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
  specifying the function argument.  The relocation allows the linker to
  reliably associate function call with argument setup instructions for
! TLS optimization, which in turn allows GCC to better schedule the
  sequence.
! .IP \fB\-mrecip\fR 4
  .IX Item "-mrecip"
  .PD 0
! .IP \fB\-mno\-recip\fR 4
  .IX Item "-mno-recip"
  .PD
  This option enables use of the reciprocal estimate and
  reciprocal square root estimate instructions with additional
! Newton\-Raphson steps to increase precision instead of doing a divide or
! square root and divide for floating\-point arguments.  You should use
  the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
  least \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-freciprocal\-math\fR and
  \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
! sequence is generally higher than the throughput of the non\-reciprocal
  instruction, the precision of the sequence can be decreased by up to 2
  ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
  roots.
! .IP \fB\-mrecip=\fR\fIopt\fR 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma\-separated list of options, which may
  be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP \fBdefault\fR 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP \fBdiv\fR 4
  .IX Item "div"
  Enable the reciprocal approximation instructions for both 
  single and double precision.
! .IP \fBdivf\fR 4
  .IX Item "divf"
! Enable the single\-precision reciprocal approximation instructions.
! .IP \fBdivd\fR 4
  .IX Item "divd"
! Enable the double\-precision reciprocal approximation instructions.
! .IP \fBrsqrt\fR 4
  .IX Item "rsqrt"
  Enable the reciprocal square root approximation instructions for both
  single and double precision.
! .IP \fBrsqrtf\fR 4
  .IX Item "rsqrtf"
! Enable the single\-precision reciprocal square root approximation instructions.
! .IP \fBrsqrtd\fR 4
  .IX Item "rsqrtd"
! Enable the double\-precision reciprocal square root approximation instructions.
  .RE
  .RS 4
  .Sp
  So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
  all of the reciprocal estimate instructions, except for the
  \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
! which handle the double\-precision reciprocal square root calculations.
  .RE
! .IP \fB\-mrecip\-precision\fR 4
  .IX Item "-mrecip-precision"
  .PD 0
! .IP \fB\-mno\-recip\-precision\fR 4
  .IX Item "-mno-recip-precision"
  .PD
  Assume (do not assume) that the reciprocal estimate instructions
! provide higher\-precision estimates than is mandated by the PowerPC
! ABI.  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
  \&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
! The double\-precision square root estimate instructions are not generated by
! default on low\-precision machines, since they do not provide an
  estimate that converges after three steps.
! .IP \fB\-mveclibabi=\fR\fItype\fR 4
  .IX Item "-mveclibabi=type"
! Specifies the ABI type to use for vectorizing intrinsics using an
  external library.  The only type supported at present is \fBmass\fR,
! which specifies to use IBM\*(Aqs Mathematical Acceleration Subsystem
! (MASS) libraries for vectorizing intrinsics using external libraries.
! GCC currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
  \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
  \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
  \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
*************** which specifies to use \s-1IBM\s0's Math
*** 31459,31589 ****
  \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
  \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
  for power7.  Both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The \s-1MASS\s0
  libraries must be specified at link time.
! .IP "\fB\-mfriz\fR" 4
  .IX Item "-mfriz"
  .PD 0
! .IP "\fB\-mno\-friz\fR" 4
  .IX Item "-mno-friz"
  .PD
  Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
  \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
! rounding of floating-point values to 64\-bit integer and back to floating
  point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
! the floating-point number is too large to fit in an integer.
! .IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
  .IX Item "-mpointers-to-nested-functions"
  .PD 0
! .IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
  .IX Item "-mno-pointers-to-nested-functions"
  .PD
  Generate (do not generate) code to load up the static chain register
! (\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
  systems where a function pointer points to a 3\-word descriptor giving
! the function address, \s-1TOC\s0 value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
  static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
  \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
  call through pointers to nested functions or pointers
  to functions compiled in other languages that use the static chain if
  you use \fB\-mno\-pointers\-to\-nested\-functions\fR.
! .IP "\fB\-msave\-toc\-indirect\fR" 4
  .IX Item "-msave-toc-indirect"
  .PD 0
! .IP "\fB\-mno\-save\-toc\-indirect\fR" 4
  .IX Item "-mno-save-toc-indirect"
  .PD
! Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
  stack location in the function prologue if the function calls through
! a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
  saved in the prologue, it is saved just before the call through the
  pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
! .IP "\fB\-mcompat\-align\-parm\fR" 4
  .IX Item "-mcompat-align-parm"
  .PD 0
! .IP "\fB\-mno\-compat\-align\-parm\fR" 4
  .IX Item "-mno-compat-align-parm"
  .PD
  Generate (do not generate) code to pass structure parameters with a
  maximum alignment of 64 bits, for compatibility with older versions
! of \s-1GCC.\s0
  .Sp
! Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
  structure parameter on a 128\-bit boundary when that structure contained
  a member requiring 128\-bit alignment.  This is corrected in more
! recent versions of \s-1GCC.\s0  This option may be used to generate code
  that is compatible with functions compiled with older versions of
! \&\s-1GCC.\s0
  .Sp
  The \fB\-mno\-compat\-align\-parm\fR option is the default.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
! .IP "\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR" 4
  .IX Item "-mstack-protector-guard-symbol=symbol"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
! canary in the \s-1TLS\s0 block (the default with \s-1GNU\s0 libc version 2.4 or later).
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which register to use as base register for reading the canary, and from what
  offset from that base register. The default for those is as specified in the
! relevant \s-1ABI.\s0  \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR overrides
! the offset with a symbol reference to a canary in the \s-1TLS\s0 block.
! .IP "\fB\-mpcrel\fR" 4
  .IX Item "-mpcrel"
  .PD 0
! .IP "\fB\-mno\-pcrel\fR" 4
  .IX Item "-mno-pcrel"
  .PD
! Generate (do not generate) pc-relative addressing.  The \fB\-mpcrel\fR
  option requires that the medium code model (\fB\-mcmodel=medium\fR)
  and prefixed addressing (\fB\-mprefixed\fR) options are enabled.
! .IP "\fB\-mprefixed\fR" 4
  .IX Item "-mprefixed"
  .PD 0
! .IP "\fB\-mno\-prefixed\fR" 4
  .IX Item "-mno-prefixed"
  .PD
  Generate (do not generate) addressing modes using prefixed load and
  store instructions.  The \fB\-mprefixed\fR option requires that
  the option \fB\-mcpu=power10\fR (or later) is enabled.
! .IP "\fB\-mmma\fR" 4
  .IX Item "-mmma"
  .PD 0
! .IP "\fB\-mno\-mma\fR" 4
  .IX Item "-mno-mma"
  .PD
! Generate (do not generate) the \s-1MMA\s0 instructions.  The \fB\-mma\fR
  option requires that the option \fB\-mcpu=power10\fR (or later)
  is enabled.
! .IP "\fB\-mrop\-protect\fR" 4
  .IX Item "-mrop-protect"
  .PD 0
! .IP "\fB\-mno\-rop\-protect\fR" 4
  .IX Item "-mno-rop-protect"
  .PD
! Generate (do not generate) \s-1ROP\s0 protection instructions when the target
! processor supports them.  Currently this option disables the shrink-wrap
  optimization (\fB\-fshrink\-wrap\fR).
! .IP "\fB\-mprivileged\fR" 4
  .IX Item "-mprivileged"
  .PD 0
! .IP "\fB\-mno\-privileged\fR" 4
  .IX Item "-mno-privileged"
  .PD
  Generate (do not generate) code that will run in privileged state.
! .IP "\fB\-mblock\-ops\-unaligned\-vsx\fR" 4
  .IX Item "-mblock-ops-unaligned-vsx"
  .PD 0
! .IP "\fB\-mno\-block\-ops\-unaligned\-vsx\fR" 4
  .IX Item "-mno-block-ops-unaligned-vsx"
  .PD
  Generate (do not generate) unaligned vsx loads and stores for
--- 31394,31524 ----
  \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
  \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
  for power7.  Both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The MASS
  libraries must be specified at link time.
! .IP \fB\-mfriz\fR 4
  .IX Item "-mfriz"
  .PD 0
! .IP \fB\-mno\-friz\fR 4
  .IX Item "-mno-friz"
  .PD
  Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
  \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
! rounding of floating\-point values to 64\-bit integer and back to floating
  point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
! the floating\-point number is too large to fit in an integer.
! .IP \fB\-mpointers\-to\-nested\-functions\fR 4
  .IX Item "-mpointers-to-nested-functions"
  .PD 0
! .IP \fB\-mno\-pointers\-to\-nested\-functions\fR 4
  .IX Item "-mno-pointers-to-nested-functions"
  .PD
  Generate (do not generate) code to load up the static chain register
! (\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on AIX and 64\-bit Linux
  systems where a function pointer points to a 3\-word descriptor giving
! the function address, TOC value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
  static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
  \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
  call through pointers to nested functions or pointers
  to functions compiled in other languages that use the static chain if
  you use \fB\-mno\-pointers\-to\-nested\-functions\fR.
! .IP \fB\-msave\-toc\-indirect\fR 4
  .IX Item "-msave-toc-indirect"
  .PD 0
! .IP \fB\-mno\-save\-toc\-indirect\fR 4
  .IX Item "-mno-save-toc-indirect"
  .PD
! Generate (do not generate) code to save the TOC value in the reserved
  stack location in the function prologue if the function calls through
! a pointer on AIX and 64\-bit Linux systems.  If the TOC value is not
  saved in the prologue, it is saved just before the call through the
  pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
! .IP \fB\-mcompat\-align\-parm\fR 4
  .IX Item "-mcompat-align-parm"
  .PD 0
! .IP \fB\-mno\-compat\-align\-parm\fR 4
  .IX Item "-mno-compat-align-parm"
  .PD
  Generate (do not generate) code to pass structure parameters with a
  maximum alignment of 64 bits, for compatibility with older versions
! of GCC.
  .Sp
! Older versions of GCC (prior to 4.9.0) incorrectly did not align a
  structure parameter on a 128\-bit boundary when that structure contained
  a member requiring 128\-bit alignment.  This is corrected in more
! recent versions of GCC.  This option may be used to generate code
  that is compatible with functions compiled with older versions of
! GCC.
  .Sp
  The \fB\-mno\-compat\-align\-parm\fR option is the default.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
! .IP \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR 4
  .IX Item "-mstack-protector-guard-symbol=symbol"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per\-thread
! canary in the TLS block (the default with GNU libc version 2.4 or later).
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which register to use as base register for reading the canary, and from what
  offset from that base register. The default for those is as specified in the
! relevant ABI.  \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR overrides
! the offset with a symbol reference to a canary in the TLS block.
! .IP \fB\-mpcrel\fR 4
  .IX Item "-mpcrel"
  .PD 0
! .IP \fB\-mno\-pcrel\fR 4
  .IX Item "-mno-pcrel"
  .PD
! Generate (do not generate) pc\-relative addressing.  The \fB\-mpcrel\fR
  option requires that the medium code model (\fB\-mcmodel=medium\fR)
  and prefixed addressing (\fB\-mprefixed\fR) options are enabled.
! .IP \fB\-mprefixed\fR 4
  .IX Item "-mprefixed"
  .PD 0
! .IP \fB\-mno\-prefixed\fR 4
  .IX Item "-mno-prefixed"
  .PD
  Generate (do not generate) addressing modes using prefixed load and
  store instructions.  The \fB\-mprefixed\fR option requires that
  the option \fB\-mcpu=power10\fR (or later) is enabled.
! .IP \fB\-mmma\fR 4
  .IX Item "-mmma"
  .PD 0
! .IP \fB\-mno\-mma\fR 4
  .IX Item "-mno-mma"
  .PD
! Generate (do not generate) the MMA instructions.  The \fB\-mma\fR
  option requires that the option \fB\-mcpu=power10\fR (or later)
  is enabled.
! .IP \fB\-mrop\-protect\fR 4
  .IX Item "-mrop-protect"
  .PD 0
! .IP \fB\-mno\-rop\-protect\fR 4
  .IX Item "-mno-rop-protect"
  .PD
! Generate (do not generate) ROP protection instructions when the target
! processor supports them.  Currently this option disables the shrink\-wrap
  optimization (\fB\-fshrink\-wrap\fR).
! .IP \fB\-mprivileged\fR 4
  .IX Item "-mprivileged"
  .PD 0
! .IP \fB\-mno\-privileged\fR 4
  .IX Item "-mno-privileged"
  .PD
  Generate (do not generate) code that will run in privileged state.
! .IP \fB\-mblock\-ops\-unaligned\-vsx\fR 4
  .IX Item "-mblock-ops-unaligned-vsx"
  .PD 0
! .IP \fB\-mno\-block\-ops\-unaligned\-vsx\fR 4
  .IX Item "-mno-block-ops-unaligned-vsx"
  .PD
  Generate (do not generate) unaligned vsx loads and stores for
*************** would be beneficial to unroll the main v
*** 31595,31660 ****
  parameter sets the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .PP
! \fI\s-1RX\s0 Options\fR
  .IX Subsection "RX Options"
  .PP
! These command-line options are defined for \s-1RX\s0 targets:
! .IP "\fB\-m64bit\-doubles\fR" 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP "\fB\-m32bit\-doubles\fR" 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
! \&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
  works on 32\-bit values, which is why the default is
  \&\fB\-m32bit\-doubles\fR.
! .IP "\fB\-fpu\fR" 4
  .IX Item "-fpu"
  .PD 0
! .IP "\fB\-nofpu\fR" 4
  .IX Item "-nofpu"
  .PD
! Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
! floating-point hardware.  The default is enabled for the \s-1RX600\s0
! series and disabled for the \s-1RX200\s0 series.
  .Sp
! Floating-point instructions are only generated for 32\-bit floating-point 
! values, however, so the \s-1FPU\s0 hardware is not used for doubles if the
  \&\fB\-m64bit\-doubles\fR option is used.
  .Sp
  \&\fINote\fR If the \fB\-fpu\fR option is enabled then
  \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
! This is because the \s-1RX FPU\s0 instructions are themselves unsafe.
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
  .IX Item "-mcpu=name"
! Selects the type of \s-1RX CPU\s0 to be targeted.  Currently three types are
! supported, the generic \fB\s-1RX600\s0\fR and \fB\s-1RX200\s0\fR series hardware and
! the specific \fB\s-1RX610\s0\fR \s-1CPU.\s0  The default is \fB\s-1RX600\s0\fR.
  .Sp
! The only difference between \fB\s-1RX600\s0\fR and \fB\s-1RX610\s0\fR is that the
! \&\fB\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
  .Sp
! The \fB\s-1RX200\s0\fR series does not have a hardware floating-point unit
  and so \fB\-nofpu\fR is enabled by default when this type is
  selected.
! .IP "\fB\-mbig\-endian\-data\fR" 4
  .IX Item "-mbig-endian-data"
  .PD 0
! .IP "\fB\-mlittle\-endian\-data\fR" 4
  .IX Item "-mlittle-endian-data"
  .PD
! Store data (but not code) in the big-endian format.  The default is
! \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
  format.
! .IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
  .IX Item "-msmall-data-limit=N"
  Specifies the maximum size in bytes of global and static variables
  which can be placed into the small data area.  Using the small data
  area can lead to smaller and faster code, but the size of area is
  limited and it is up to the programmer to ensure that the area does
! not overflow.  Also when the small data area is used one of the \s-1RX\s0's
  registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
  area, so it is no longer available for use by the compiler.  This
  could result in slower and/or larger code if variables are pushed onto
--- 31530,31595 ----
  parameter sets the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .PP
! \fIRX Options\fR
  .IX Subsection "RX Options"
  .PP
! These command\-line options are defined for RX targets:
! .IP \fB\-m64bit\-doubles\fR 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP \fB\-m32bit\-doubles\fR 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
! \&\fB\-m32bit\-doubles\fR.  \fINote\fR RX floating\-point hardware only
  works on 32\-bit values, which is why the default is
  \&\fB\-m32bit\-doubles\fR.
! .IP \fB\-fpu\fR 4
  .IX Item "-fpu"
  .PD 0
! .IP \fB\-nofpu\fR 4
  .IX Item "-nofpu"
  .PD
! Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of RX
! floating\-point hardware.  The default is enabled for the RX600
! series and disabled for the RX200 series.
  .Sp
! Floating\-point instructions are only generated for 32\-bit floating\-point 
! values, however, so the FPU hardware is not used for doubles if the
  \&\fB\-m64bit\-doubles\fR option is used.
  .Sp
  \&\fINote\fR If the \fB\-fpu\fR option is enabled then
  \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
! This is because the RX FPU instructions are themselves unsafe.
! .IP \fB\-mcpu=\fR\fIname\fR 4
  .IX Item "-mcpu=name"
! Selects the type of RX CPU to be targeted.  Currently three types are
! supported, the generic \fBRX600\fR and \fBRX200\fR series hardware and
! the specific \fBRX610\fR CPU.  The default is \fBRX600\fR.
  .Sp
! The only difference between \fBRX600\fR and \fBRX610\fR is that the
! \&\fBRX610\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
  .Sp
! The \fBRX200\fR series does not have a hardware floating\-point unit
  and so \fB\-nofpu\fR is enabled by default when this type is
  selected.
! .IP \fB\-mbig\-endian\-data\fR 4
  .IX Item "-mbig-endian-data"
  .PD 0
! .IP \fB\-mlittle\-endian\-data\fR 4
  .IX Item "-mlittle-endian-data"
  .PD
! Store data (but not code) in the big\-endian format.  The default is
! \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little\-endian
  format.
! .IP \fB\-msmall\-data\-limit=\fR\fIN\fR 4
  .IX Item "-msmall-data-limit=N"
  Specifies the maximum size in bytes of global and static variables
  which can be placed into the small data area.  Using the small data
  area can lead to smaller and faster code, but the size of area is
  limited and it is up to the programmer to ensure that the area does
! not overflow.  Also when the small data area is used one of the RX\*(Aqs
  registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
  area, so it is no longer available for use by the compiler.  This
  could result in slower and/or larger code if variables are pushed onto
*************** reserving a register.  It is up to the p
*** 31671,31697 ****
  discover whether this feature is of benefit to their program.  See the
  description of the \fB\-mpid\fR option for a description of how the
  actual register to hold the small data area pointer is chosen.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  .PD 0
! .IP "\fB\-mno\-sim\fR" 4
  .IX Item "-mno-sim"
  .PD
  Use the simulator runtime.  The default is to use the libgloss
! board-specific runtime.
! .IP "\fB\-mas100\-syntax\fR" 4
  .IX Item "-mas100-syntax"
  .PD 0
! .IP "\fB\-mno\-as100\-syntax\fR" 4
  .IX Item "-mno-as100-syntax"
  .PD
  When generating assembler output use a syntax that is compatible with
! Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
  assembler, but it has some restrictions so it is not generated by default.
! .IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
  .IX Item "-mmax-constant-size=N"
  Specifies the maximum size, in bytes, of a constant that can be used as
! an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
  allow constants of up to 4 bytes in length to be used in instructions,
  a longer value equates to a longer instruction.  Thus in some
  circumstances it can be beneficial to restrict the size of constants
--- 31606,31632 ----
  discover whether this feature is of benefit to their program.  See the
  description of the \fB\-mpid\fR option for a description of how the
  actual register to hold the small data area pointer is chosen.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  .PD 0
! .IP \fB\-mno\-sim\fR 4
  .IX Item "-mno-sim"
  .PD
  Use the simulator runtime.  The default is to use the libgloss
! board\-specific runtime.
! .IP \fB\-mas100\-syntax\fR 4
  .IX Item "-mas100-syntax"
  .PD 0
! .IP \fB\-mno\-as100\-syntax\fR 4
  .IX Item "-mno-as100-syntax"
  .PD
  When generating assembler output use a syntax that is compatible with
! Renesas\*(Aqs AS100 assembler.  This syntax can also be handled by the GAS
  assembler, but it has some restrictions so it is not generated by default.
! .IP \fB\-mmax\-constant\-size=\fR\fIN\fR 4
  .IX Item "-mmax-constant-size=N"
  Specifies the maximum size, in bytes, of a constant that can be used as
! an operand in a RX instruction.  Although the RX instruction set does
  allow constants of up to 4 bytes in length to be used in instructions,
  a longer value equates to a longer instruction.  Thus in some
  circumstances it can be beneficial to restrict the size of constants
*************** placed into a constant pool and referenc
*** 31700,31711 ****
  .Sp
  The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
  or 4 means that constants of any size are allowed.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Enable linker relaxation.  Linker relaxation is a process whereby the
  linker attempts to reduce the size of a program by finding shorter
  versions of various instructions.  Disabled by default.
! .IP "\fB\-mint\-register=\fR\fIN\fR" 4
  .IX Item "-mint-register=N"
  Specify the number of registers to reserve for fast interrupt handler
  functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
--- 31635,31646 ----
  .Sp
  The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
  or 4 means that constants of any size are allowed.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Enable linker relaxation.  Linker relaxation is a process whereby the
  linker attempts to reduce the size of a program by finding shorter
  versions of various instructions.  Disabled by default.
! .IP \fB\-mint\-register=\fR\fIN\fR 4
  .IX Item "-mint-register=N"
  Specify the number of registers to reserve for fast interrupt handler
  functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
*************** of fast interrupt handlers.  A value of
*** 31714,31730 ****
  \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
  \&\f(CW\*(C`r11\*(C'\fR, and a value of 4 reserves \f(CW\*(C`r13\*(C'\fR through \f(CW\*(C`r10\*(C'\fR.
  A value of 0, the default, does not reserve any registers.
! .IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
  .IX Item "-msave-acc-in-interrupts"
  Specifies that interrupt handler functions should preserve the
  accumulator register.  This is only necessary if normal code might use
  the accumulator register, for example because it performs 64\-bit
  multiplications.  The default is to ignore the accumulator as this
  makes the interrupt handlers faster.
! .IP "\fB\-mpid\fR" 4
  .IX Item "-mpid"
  .PD 0
! .IP "\fB\-mno\-pid\fR" 4
  .IX Item "-mno-pid"
  .PD
  Enables the generation of position independent data.  When enabled any
--- 31649,31665 ----
  \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
  \&\f(CW\*(C`r11\*(C'\fR, and a value of 4 reserves \f(CW\*(C`r13\*(C'\fR through \f(CW\*(C`r10\*(C'\fR.
  A value of 0, the default, does not reserve any registers.
! .IP \fB\-msave\-acc\-in\-interrupts\fR 4
  .IX Item "-msave-acc-in-interrupts"
  Specifies that interrupt handler functions should preserve the
  accumulator register.  This is only necessary if normal code might use
  the accumulator register, for example because it performs 64\-bit
  multiplications.  The default is to ignore the accumulator as this
  makes the interrupt handlers faster.
! .IP \fB\-mpid\fR 4
  .IX Item "-mpid"
  .PD 0
! .IP \fB\-mno\-pid\fR 4
  .IX Item "-mno-pid"
  .PD
  Enables the generation of position independent data.  When enabled any
*************** larger code, especially in complicated f
*** 31741,31747 ****
  .Sp
  The actual register chosen to hold the constant data base address
  depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
! \&\fB\-mint\-register\fR command-line options are enabled.  Starting
  with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
  allocated first to satisfy the requirements of \fB\-mint\-register\fR,
  then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
--- 31676,31682 ----
  .Sp
  The actual register chosen to hold the constant data base address
  depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
! \&\fB\-mint\-register\fR command\-line options are enabled.  Starting
  with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
  allocated first to satisfy the requirements of \fB\-mint\-register\fR,
  then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
*************** is possible for the small data area regi
*** 31750,31793 ****
  command line.
  .Sp
  By default this feature is not enabled.  The default can be restored
! via the \fB\-mno\-pid\fR command-line option.
! .IP "\fB\-mno\-warn\-multiple\-fast\-interrupts\fR" 4
  .IX Item "-mno-warn-multiple-fast-interrupts"
  .PD 0
! .IP "\fB\-mwarn\-multiple\-fast\-interrupts\fR" 4
  .IX Item "-mwarn-multiple-fast-interrupts"
  .PD
! Prevents \s-1GCC\s0 from issuing a warning message if it finds more than one
  fast interrupt handler when it is compiling a file.  The default is to
! issue a warning for each extra fast interrupt handler found, as the \s-1RX\s0
  only supports one such interrupt.
! .IP "\fB\-mallow\-string\-insns\fR" 4
  .IX Item "-mallow-string-insns"
  .PD 0
! .IP "\fB\-mno\-allow\-string\-insns\fR" 4
  .IX Item "-mno-allow-string-insns"
  .PD
  Enables or disables the use of the string manipulation instructions
  \&\f(CW\*(C`SMOVF\*(C'\fR, \f(CW\*(C`SCMPU\*(C'\fR, \f(CW\*(C`SMOVB\*(C'\fR, \f(CW\*(C`SMOVU\*(C'\fR, \f(CW\*(C`SUNTIL\*(C'\fR
  \&\f(CW\*(C`SWHILE\*(C'\fR and also the \f(CW\*(C`RMPA\*(C'\fR instruction.  These
  instructions may prefetch data, which is not safe to do if accessing
! an I/O register.  (See section 12.2.7 of the \s-1RX62N\s0 Group User's Manual
  for more information).
  .Sp
  The default is to allow these instructions, but it is not possible for
! \&\s-1GCC\s0 to reliably detect all circumstances where a string instruction
  might be used to access an I/O register, so their use cannot be
  disabled automatically.  Instead it is reliant upon the programmer to
  use the \fB\-mno\-allow\-string\-insns\fR option if their program
  accesses I/O space.
  .Sp
! When the instructions are enabled \s-1GCC\s0 defines the C preprocessor
  symbol \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR, otherwise it defines the
  symbol \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR.
! .IP "\fB\-mjsr\fR" 4
  .IX Item "-mjsr"
  .PD 0
! .IP "\fB\-mno\-jsr\fR" 4
  .IX Item "-mno-jsr"
  .PD
  Use only (or not only) \f(CW\*(C`JSR\*(C'\fR instructions to access functions.
--- 31685,31728 ----
  command line.
  .Sp
  By default this feature is not enabled.  The default can be restored
! via the \fB\-mno\-pid\fR command\-line option.
! .IP \fB\-mno\-warn\-multiple\-fast\-interrupts\fR 4
  .IX Item "-mno-warn-multiple-fast-interrupts"
  .PD 0
! .IP \fB\-mwarn\-multiple\-fast\-interrupts\fR 4
  .IX Item "-mwarn-multiple-fast-interrupts"
  .PD
! Prevents GCC from issuing a warning message if it finds more than one
  fast interrupt handler when it is compiling a file.  The default is to
! issue a warning for each extra fast interrupt handler found, as the RX
  only supports one such interrupt.
! .IP \fB\-mallow\-string\-insns\fR 4
  .IX Item "-mallow-string-insns"
  .PD 0
! .IP \fB\-mno\-allow\-string\-insns\fR 4
  .IX Item "-mno-allow-string-insns"
  .PD
  Enables or disables the use of the string manipulation instructions
  \&\f(CW\*(C`SMOVF\*(C'\fR, \f(CW\*(C`SCMPU\*(C'\fR, \f(CW\*(C`SMOVB\*(C'\fR, \f(CW\*(C`SMOVU\*(C'\fR, \f(CW\*(C`SUNTIL\*(C'\fR
  \&\f(CW\*(C`SWHILE\*(C'\fR and also the \f(CW\*(C`RMPA\*(C'\fR instruction.  These
  instructions may prefetch data, which is not safe to do if accessing
! an I/O register.  (See section 12.2.7 of the RX62N Group User\*(Aqs Manual
  for more information).
  .Sp
  The default is to allow these instructions, but it is not possible for
! GCC to reliably detect all circumstances where a string instruction
  might be used to access an I/O register, so their use cannot be
  disabled automatically.  Instead it is reliant upon the programmer to
  use the \fB\-mno\-allow\-string\-insns\fR option if their program
  accesses I/O space.
  .Sp
! When the instructions are enabled GCC defines the C preprocessor
  symbol \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR, otherwise it defines the
  symbol \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR.
! .IP \fB\-mjsr\fR 4
  .IX Item "-mjsr"
  .PD 0
! .IP \fB\-mno\-jsr\fR 4
  .IX Item "-mno-jsr"
  .PD
  Use only (or not only) \f(CW\*(C`JSR\*(C'\fR instructions to access functions.
*************** This option can be used when code size e
*** 31795,31862 ****
  instructions.  Note that \fB\-mno\-jsr\fR does not mean to not use
  \&\f(CW\*(C`JSR\*(C'\fR but instead means that any type of branch may be used.
  .PP
! \&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
! has special significance to the \s-1RX\s0 port when used with the
  \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
! function intended to process fast interrupts.  \s-1GCC\s0 ensures
  that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
  and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
  corresponding registers have been restricted via the
! \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
  options.
  .PP
  \fIS/390 and zSeries Options\fR
  .IX Subsection "S/390 and zSeries Options"
  .PP
  These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating-point instructions and registers
! for floating-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating-point
  operations.  When \fB\-mhard\-float\fR is specified, the compiler
! generates \s-1IEEE\s0 floating-point instructions.  This is the default.
! .IP "\fB\-mhard\-dfp\fR" 4
  .IX Item "-mhard-dfp"
  .PD 0
! .IP "\fB\-mno\-hard\-dfp\fR" 4
  .IX Item "-mno-hard-dfp"
  .PD
! Use (do not use) the hardware decimal-floating-point instructions for
! decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
  specified, functions in \fIlibgcc.a\fR are used to perform
! decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
! specified, the compiler generates decimal-floating-point hardware
  instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
! .IP "\fB\-mlong\-double\-64\fR" 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP "\fB\-mlong\-double\-128\fR" 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
  of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
  type. This is the default.
! .IP "\fB\-mbackchain\fR" 4
  .IX Item "-mbackchain"
  .PD 0
! .IP "\fB\-mno\-backchain\fR" 4
  .IX Item "-mno-backchain"
  .PD
! Store (do not store) the address of the caller's frame as backchain pointer
! into the callee's stack frame.
  A backchain may be needed to allow debugging using tools that do not understand
! \&\s-1DWARF\s0 call frame information.
  When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
  at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
  the backchain is placed into the topmost word of the 96/160 byte register
  save area.
  .Sp
! In general, code compiled with \fB\-mbackchain\fR is call-compatible with
  code compiled with \fB\-mno\-backchain\fR; however, use of the backchain
  for debugging purposes usually requires that the whole binary is built with
  \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
--- 31730,31797 ----
  instructions.  Note that \fB\-mno\-jsr\fR does not mean to not use
  \&\f(CW\*(C`JSR\*(C'\fR but instead means that any type of branch may be used.
  .PP
! \&\fINote:\fR The generic GCC command\-line option \fB\-ffixed\-\fR\fIreg\fR
! has special significance to the RX port when used with the
  \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
! function intended to process fast interrupts.  GCC ensures
  that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
  and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
  corresponding registers have been restricted via the
! \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command\-line
  options.
  .PP
  \fIS/390 and zSeries Options\fR
  .IX Subsection "S/390 and zSeries Options"
  .PP
  These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating\-point instructions and registers
! for floating\-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating\-point
  operations.  When \fB\-mhard\-float\fR is specified, the compiler
! generates IEEE floating\-point instructions.  This is the default.
! .IP \fB\-mhard\-dfp\fR 4
  .IX Item "-mhard-dfp"
  .PD 0
! .IP \fB\-mno\-hard\-dfp\fR 4
  .IX Item "-mno-hard-dfp"
  .PD
! Use (do not use) the hardware decimal\-floating\-point instructions for
! decimal\-floating\-point operations.  When \fB\-mno\-hard\-dfp\fR is
  specified, functions in \fIlibgcc.a\fR are used to perform
! decimal\-floating\-point operations.  When \fB\-mhard\-dfp\fR is
! specified, the compiler generates decimal\-floating\-point hardware
  instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
! .IP \fB\-mlong\-double\-64\fR 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP \fB\-mlong\-double\-128\fR 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
  of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
  type. This is the default.
! .IP \fB\-mbackchain\fR 4
  .IX Item "-mbackchain"
  .PD 0
! .IP \fB\-mno\-backchain\fR 4
  .IX Item "-mno-backchain"
  .PD
! Store (do not store) the address of the caller\*(Aqs frame as backchain pointer
! into the callee\*(Aqs stack frame.
  A backchain may be needed to allow debugging using tools that do not understand
! DWARF call frame information.
  When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
  at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
  the backchain is placed into the topmost word of the 96/160 byte register
  save area.
  .Sp
! In general, code compiled with \fB\-mbackchain\fR is call\-compatible with
  code compiled with \fB\-mno\-backchain\fR; however, use of the backchain
  for debugging purposes usually requires that the whole binary is built with
  \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
*************** for debugging purposes usually requires
*** 31864,31873 ****
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not maintain the backchain.
! .IP "\fB\-mpacked\-stack\fR" 4
  .IX Item "-mpacked-stack"
  .PD 0
! .IP "\fB\-mno\-packed\-stack\fR" 4
  .IX Item "-mno-packed-stack"
  .PD
  Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
--- 31799,31808 ----
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not maintain the backchain.
! .IP \fB\-mpacked\-stack\fR 4
  .IX Item "-mpacked-stack"
  .PD 0
! .IP \fB\-mno\-packed\-stack\fR 4
  .IX Item "-mno-packed-stack"
  .PD
  Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
*************** the save area is always used to store th
*** 31881,31900 ****
  register is always saved two words below the backchain.
  .Sp
  As long as the stack frame backchain is not used, code generated with
! \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
! \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC 2.95\s0 for
  S/390 or zSeries generated code that uses the stack frame backchain at run
! time, not just for debugging purposes.  Such code is not call-compatible
  with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
  combination of \fB\-mbackchain\fR,
  \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not use the packed stack layout.
! .IP "\fB\-msmall\-exec\fR" 4
  .IX Item "-msmall-exec"
  .PD 0
! .IP "\fB\-mno\-small\-exec\fR" 4
  .IX Item "-mno-small-exec"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
--- 31816,31835 ----
  register is always saved two words below the backchain.
  .Sp
  As long as the stack frame backchain is not used, code generated with
! \&\fB\-mpacked\-stack\fR is call\-compatible with code generated with
! \&\fB\-mno\-packed\-stack\fR.  Note that some non\-FSF releases of GCC 2.95 for
  S/390 or zSeries generated code that uses the stack frame backchain at run
! time, not just for debugging purposes.  Such code is not call\-compatible
  with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
  combination of \fB\-mbackchain\fR,
  \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not use the packed stack layout.
! .IP \fB\-msmall\-exec\fR 4
  .IX Item "-msmall-exec"
  .PD 0
! .IP \fB\-mno\-small\-exec\fR 4
  .IX Item "-mno-small-exec"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
*************** to do subroutine calls.
*** 31902,31999 ****
  This only works reliably if the total executable size does not
  exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
  which does not have this limitation.
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
  .PD 0
! .IP "\fB\-m31\fR" 4
  .IX Item "-m31"
  .PD
  When \fB\-m31\fR is specified, generate code compliant to the
! GNU/Linux for S/390 \s-1ABI.\s0  When \fB\-m64\fR is specified, generate
! code compliant to the GNU/Linux for zSeries \s-1ABI.\s0  This allows \s-1GCC\s0 in
  particular to generate 64\-bit instructions.  For the \fBs390\fR
  targets, the default is \fB\-m31\fR, while the \fBs390x\fR
  targets default to \fB\-m64\fR.
! .IP "\fB\-mzarch\fR" 4
  .IX Item "-mzarch"
  .PD 0
! .IP "\fB\-mesa\fR" 4
  .IX Item "-mesa"
  .PD
  When \fB\-mzarch\fR is specified, generate code using the
  instructions available on z/Architecture.
  When \fB\-mesa\fR is specified, generate code using the
! instructions available on \s-1ESA/390.\s0  Note that \fB\-mesa\fR is
  not possible with \fB\-m64\fR.
! When generating code compliant to the GNU/Linux for S/390 \s-1ABI,\s0
  the default is \fB\-mesa\fR.  When generating code compliant
! to the GNU/Linux for zSeries \s-1ABI,\s0 the default is \fB\-mzarch\fR.
! .IP "\fB\-mhtm\fR" 4
  .IX Item "-mhtm"
  .PD 0
! .IP "\fB\-mno\-htm\fR" 4
  .IX Item "-mno-htm"
  .PD
  The \fB\-mhtm\fR option enables a set of builtins making use of
  instructions available with the transactional execution facility
! introduced with the \s-1IBM\s0 zEnterprise \s-1EC12\s0 machine generation
! \&\fBS/390 System z Built-in Functions\fR.
  \&\fB\-mhtm\fR is enabled by default when using \fB\-march=zEC12\fR.
! .IP "\fB\-mvx\fR" 4
  .IX Item "-mvx"
  .PD 0
! .IP "\fB\-mno\-vx\fR" 4
  .IX Item "-mno-vx"
  .PD
  When \fB\-mvx\fR is specified, generate code using the instructions
! available with the vector extension facility introduced with the \s-1IBM\s0
  z13 machine generation.
! This option changes the \s-1ABI\s0 for some vector type values with regard to
  alignment and calling conventions.  In case vector type values are
! being used in an ABI-relevant context a \s-1GAS\s0 \fB.gnu_attribute\fR
! command will be added to mark the resulting binary with the \s-1ABI\s0 used.
  \&\fB\-mvx\fR is enabled by default when using \fB\-march=z13\fR.
! .IP "\fB\-mzvector\fR" 4
  .IX Item "-mzvector"
  .PD 0
! .IP "\fB\-mno\-zvector\fR" 4
  .IX Item "-mno-zvector"
  .PD
  The \fB\-mzvector\fR option enables vector language extensions and
  builtins using instructions available with the vector extension
! facility introduced with the \s-1IBM\s0 z13 machine generation.
  This option adds support for \fBvector\fR to be used as a keyword to
  define vector type variables and arguments.  \fBvector\fR is only
! available when \s-1GNU\s0 extensions are enabled.  It will not be expanded
  when requesting strict standard compliance e.g. with \fB\-std=c99\fR.
! In addition to the \s-1GCC\s0 low-level builtins \fB\-mzvector\fR enables
! a set of builtins added for compatibility with AltiVec-style
  implementations like Power and Cell.  In order to make use of these
  builtins the header file \fIvecintrin.h\fR needs to be included.
  \&\fB\-mzvector\fR is disabled by default.
! .IP "\fB\-mmvcle\fR" 4
  .IX Item "-mmvcle"
  .PD 0
! .IP "\fB\-mno\-mvcle\fR" 4
  .IX Item "-mno-mvcle"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
  to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
  use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
  size.
! .IP "\fB\-mdebug\fR" 4
  .IX Item "-mdebug"
  .PD 0
! .IP "\fB\-mno\-debug\fR" 4
  .IX Item "-mno-debug"
  .PD
  Print (or do not print) additional debug information when compiling.
  The default is to not print debug information.
! .IP "\fB\-march=\fR\fIcpu-type\fR" 4
  .IX Item "-march=cpu-type"
! Generate code that runs on \fIcpu-type\fR, which is the name of a
  system representing a certain processor type.  Possible values for
! \&\fIcpu-type\fR are \fBz900\fR/\fBarch5\fR, \fBz990\fR/\fBarch6\fR,
  \&\fBz9\-109\fR, \fBz9\-ec\fR/\fBarch7\fR, \fBz10\fR/\fBarch8\fR,
  \&\fBz196\fR/\fBarch9\fR, \fBzEC12\fR, \fBz13\fR/\fBarch11\fR,
  \&\fBz14\fR/\fBarch12\fR, \fBz15\fR/\fBarch13\fR,
--- 31837,31934 ----
  This only works reliably if the total executable size does not
  exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
  which does not have this limitation.
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
  .PD 0
! .IP \fB\-m31\fR 4
  .IX Item "-m31"
  .PD
  When \fB\-m31\fR is specified, generate code compliant to the
! GNU/Linux for S/390 ABI.  When \fB\-m64\fR is specified, generate
! code compliant to the GNU/Linux for zSeries ABI.  This allows GCC in
  particular to generate 64\-bit instructions.  For the \fBs390\fR
  targets, the default is \fB\-m31\fR, while the \fBs390x\fR
  targets default to \fB\-m64\fR.
! .IP \fB\-mzarch\fR 4
  .IX Item "-mzarch"
  .PD 0
! .IP \fB\-mesa\fR 4
  .IX Item "-mesa"
  .PD
  When \fB\-mzarch\fR is specified, generate code using the
  instructions available on z/Architecture.
  When \fB\-mesa\fR is specified, generate code using the
! instructions available on ESA/390.  Note that \fB\-mesa\fR is
  not possible with \fB\-m64\fR.
! When generating code compliant to the GNU/Linux for S/390 ABI,
  the default is \fB\-mesa\fR.  When generating code compliant
! to the GNU/Linux for zSeries ABI, the default is \fB\-mzarch\fR.
! .IP \fB\-mhtm\fR 4
  .IX Item "-mhtm"
  .PD 0
! .IP \fB\-mno\-htm\fR 4
  .IX Item "-mno-htm"
  .PD
  The \fB\-mhtm\fR option enables a set of builtins making use of
  instructions available with the transactional execution facility
! introduced with the IBM zEnterprise EC12 machine generation
! \&\fBS/390 System z Built\-in Functions\fR.
  \&\fB\-mhtm\fR is enabled by default when using \fB\-march=zEC12\fR.
! .IP \fB\-mvx\fR 4
  .IX Item "-mvx"
  .PD 0
! .IP \fB\-mno\-vx\fR 4
  .IX Item "-mno-vx"
  .PD
  When \fB\-mvx\fR is specified, generate code using the instructions
! available with the vector extension facility introduced with the IBM
  z13 machine generation.
! This option changes the ABI for some vector type values with regard to
  alignment and calling conventions.  In case vector type values are
! being used in an ABI\-relevant context a GAS \fB.gnu_attribute\fR
! command will be added to mark the resulting binary with the ABI used.
  \&\fB\-mvx\fR is enabled by default when using \fB\-march=z13\fR.
! .IP \fB\-mzvector\fR 4
  .IX Item "-mzvector"
  .PD 0
! .IP \fB\-mno\-zvector\fR 4
  .IX Item "-mno-zvector"
  .PD
  The \fB\-mzvector\fR option enables vector language extensions and
  builtins using instructions available with the vector extension
! facility introduced with the IBM z13 machine generation.
  This option adds support for \fBvector\fR to be used as a keyword to
  define vector type variables and arguments.  \fBvector\fR is only
! available when GNU extensions are enabled.  It will not be expanded
  when requesting strict standard compliance e.g. with \fB\-std=c99\fR.
! In addition to the GCC low\-level builtins \fB\-mzvector\fR enables
! a set of builtins added for compatibility with AltiVec\-style
  implementations like Power and Cell.  In order to make use of these
  builtins the header file \fIvecintrin.h\fR needs to be included.
  \&\fB\-mzvector\fR is disabled by default.
! .IP \fB\-mmvcle\fR 4
  .IX Item "-mmvcle"
  .PD 0
! .IP \fB\-mno\-mvcle\fR 4
  .IX Item "-mno-mvcle"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
  to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
  use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
  size.
! .IP \fB\-mdebug\fR 4
  .IX Item "-mdebug"
  .PD 0
! .IP \fB\-mno\-debug\fR 4
  .IX Item "-mno-debug"
  .PD
  Print (or do not print) additional debug information when compiling.
  The default is to not print debug information.
! .IP \fB\-march=\fR\fIcpu\-type\fR 4
  .IX Item "-march=cpu-type"
! Generate code that runs on \fIcpu\-type\fR, which is the name of a
  system representing a certain processor type.  Possible values for
! \&\fIcpu\-type\fR are \fBz900\fR/\fBarch5\fR, \fBz990\fR/\fBarch6\fR,
  \&\fBz9\-109\fR, \fBz9\-ec\fR/\fBarch7\fR, \fBz10\fR/\fBarch8\fR,
  \&\fBz196\fR/\fBarch9\fR, \fBzEC12\fR, \fBz13\fR/\fBarch11\fR,
  \&\fBz14\fR/\fBarch12\fR, \fBz15\fR/\fBarch13\fR,
*************** The default is \fB\-march=z900\fR.
*** 32003,32083 ****
  .Sp
  Specifying \fBnative\fR as cpu type can be used to select the best
  architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize the
  processor.
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu-type\fR everything applicable about the generated code,
! except for the \s-1ABI\s0 and the set of available instructions.
! The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
  The default is the value used for \fB\-march\fR.
! .IP "\fB\-mtpf\-trace\fR" 4
  .IX Item "-mtpf-trace"
  .PD 0
! .IP "\fB\-mno\-tpf\-trace\fR" 4
  .IX Item "-mno-tpf-trace"
  .PD
! Generate code that adds (does not add) in \s-1TPF OS\s0 specific branches to trace
  routines in the operating system.  This option is off by default, even
! when compiling for the \s-1TPF OS.\s0
! .IP "\fB\-mtpf\-trace\-skip\fR" 4
  .IX Item "-mtpf-trace-skip"
  .PD 0
! .IP "\fB\-mno\-tpf\-trace\-skip\fR" 4
  .IX Item "-mno-tpf-trace-skip"
  .PD
  Generate code that changes (does not change) the default branch
  targets enabled by \fB\-mtpf\-trace\fR to point to specialized trace
  routines providing the ability of selectively skipping function trace
! entries for the \s-1TPF OS.\s0  This option is off by default, even when
! compiling for the \s-1TPF OS\s0 and specifying \fB\-mtpf\-trace\fR.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating-point multiply and
  accumulate instructions.  These instructions are generated by default if
  hardware floating point is used.
! .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
  .IX Item "-mwarn-framesize=framesize"
  Emit a warning if the current function exceeds the given frame size.  Because
! this is a compile-time check it doesn't need to be a real problem when the program
  runs.  It is intended to identify functions that most probably cause
  a stack overflow.  It is useful to be used in an environment with limited stack
  size e.g. the linux kernel.
! .IP "\fB\-mwarn\-dynamicstack\fR" 4
  .IX Item "-mwarn-dynamicstack"
! Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically-sized
  arrays.  This is generally a bad idea with a limited stack size.
! .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
  .IX Item "-mstack-guard=stack-guard"
  .PD 0
! .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
  .IX Item "-mstack-size=stack-size"
  .PD
  If these options are provided the S/390 back end emits additional instructions in
! the function prologue that trigger a trap if the stack size is \fIstack-guard\fR
! bytes above the \fIstack-size\fR (remember that the stack on S/390 grows downward).
! If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
  the frame size of the compiled function is chosen.
  These options are intended to be used to help debugging stack overflow problems.
  The additionally emitted code causes only little overhead and hence can also be
! used in production-like systems without greater performance degradation.  The given
! values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
! \&\fIstack-guard\fR without exceeding 64k.
  In order to be efficient the extra code makes the assumption that the stack starts
! at an address aligned to the value given by \fIstack-size\fR.
! The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
! .IP "\fB\-mhotpatch=\fR\fIpre-halfwords\fR\fB,\fR\fIpost-halfwords\fR" 4
  .IX Item "-mhotpatch=pre-halfwords,post-halfwords"
! If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
  prologue is generated for all functions in the compilation unit.
! The funtion label is prepended with the given number of two-byte
! \&\s-1NOP\s0 instructions (\fIpre-halfwords\fR, maximum 1000000).  After
! the label, 2 * \fIpost-halfwords\fR bytes are appended, using the
! largest \s-1NOP\s0 like instructions the architecture allows (maximum
  1000000).
  .Sp
  If both arguments are zero, hotpatching is disabled.
--- 31938,32018 ----
  .Sp
  Specifying \fBnative\fR as cpu type can be used to select the best
  architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if GCC does not recognize the
  processor.
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu\-type\fR everything applicable about the generated code,
! except for the ABI and the set of available instructions.
! The list of \fIcpu\-type\fR values is the same as for \fB\-march\fR.
  The default is the value used for \fB\-march\fR.
! .IP \fB\-mtpf\-trace\fR 4
  .IX Item "-mtpf-trace"
  .PD 0
! .IP \fB\-mno\-tpf\-trace\fR 4
  .IX Item "-mno-tpf-trace"
  .PD
! Generate code that adds (does not add) in TPF OS specific branches to trace
  routines in the operating system.  This option is off by default, even
! when compiling for the TPF OS.
! .IP \fB\-mtpf\-trace\-skip\fR 4
  .IX Item "-mtpf-trace-skip"
  .PD 0
! .IP \fB\-mno\-tpf\-trace\-skip\fR 4
  .IX Item "-mno-tpf-trace-skip"
  .PD
  Generate code that changes (does not change) the default branch
  targets enabled by \fB\-mtpf\-trace\fR to point to specialized trace
  routines providing the ability of selectively skipping function trace
! entries for the TPF OS.  This option is off by default, even when
! compiling for the TPF OS and specifying \fB\-mtpf\-trace\fR.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating\-point multiply and
  accumulate instructions.  These instructions are generated by default if
  hardware floating point is used.
! .IP \fB\-mwarn\-framesize=\fR\fIframesize\fR 4
  .IX Item "-mwarn-framesize=framesize"
  Emit a warning if the current function exceeds the given frame size.  Because
! this is a compile\-time check it doesn\*(Aqt need to be a real problem when the program
  runs.  It is intended to identify functions that most probably cause
  a stack overflow.  It is useful to be used in an environment with limited stack
  size e.g. the linux kernel.
! .IP \fB\-mwarn\-dynamicstack\fR 4
  .IX Item "-mwarn-dynamicstack"
! Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically\-sized
  arrays.  This is generally a bad idea with a limited stack size.
! .IP \fB\-mstack\-guard=\fR\fIstack\-guard\fR 4
  .IX Item "-mstack-guard=stack-guard"
  .PD 0
! .IP \fB\-mstack\-size=\fR\fIstack\-size\fR 4
  .IX Item "-mstack-size=stack-size"
  .PD
  If these options are provided the S/390 back end emits additional instructions in
! the function prologue that trigger a trap if the stack size is \fIstack\-guard\fR
! bytes above the \fIstack\-size\fR (remember that the stack on S/390 grows downward).
! If the \fIstack\-guard\fR option is omitted the smallest power of 2 larger than
  the frame size of the compiled function is chosen.
  These options are intended to be used to help debugging stack overflow problems.
  The additionally emitted code causes only little overhead and hence can also be
! used in production\-like systems without greater performance degradation.  The given
! values have to be exact powers of 2 and \fIstack\-size\fR has to be greater than
! \&\fIstack\-guard\fR without exceeding 64k.
  In order to be efficient the extra code makes the assumption that the stack starts
! at an address aligned to the value given by \fIstack\-size\fR.
! The \fIstack\-guard\fR option can only be used in conjunction with \fIstack\-size\fR.
! .IP \fB\-mhotpatch=\fR\fIpre\-halfwords\fR\fB,\fR\fIpost\-halfwords\fR 4
  .IX Item "-mhotpatch=pre-halfwords,post-halfwords"
! If the hotpatch option is enabled, a "hot\-patching" function
  prologue is generated for all functions in the compilation unit.
! The funtion label is prepended with the given number of two\-byte
! NOP instructions (\fIpre\-halfwords\fR, maximum 1000000).  After
! the label, 2 * \fIpost\-halfwords\fR bytes are appended, using the
! largest NOP like instructions the architecture allows (maximum
  1000000).
  .Sp
  If both arguments are zero, hotpatching is disabled.
*************** If both arguments are zero, hotpatching
*** 32085,32262 ****
  This option can be overridden for individual functions with the
  \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
  .PP
! \fI\s-1SH\s0 Options\fR
  .IX Subsection "SH Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
! .IP "\fB\-m1\fR" 4
  .IX Item "-m1"
! Generate code for the \s-1SH1.\s0
! .IP "\fB\-m2\fR" 4
  .IX Item "-m2"
! Generate code for the \s-1SH2.\s0
! .IP "\fB\-m2e\fR" 4
  .IX Item "-m2e"
  Generate code for the SH2e.
! .IP "\fB\-m2a\-nofpu\fR" 4
  .IX Item "-m2a-nofpu"
! Generate code for the SH2a without \s-1FPU,\s0 or for a SH2a\-FPU in such a way
! that the floating-point unit is not used.
! .IP "\fB\-m2a\-single\-only\fR" 4
  .IX Item "-m2a-single-only"
! Generate code for the SH2a\-FPU, in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m2a\-single\fR" 4
  .IX Item "-m2a-single"
! Generate code for the SH2a\-FPU assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m2a\fR" 4
  .IX Item "-m2a"
! Generate code for the SH2a\-FPU assuming the floating-point unit is in
! double-precision mode by default.
! .IP "\fB\-m3\fR" 4
  .IX Item "-m3"
! Generate code for the \s-1SH3.\s0
! .IP "\fB\-m3e\fR" 4
  .IX Item "-m3e"
  Generate code for the SH3e.
! .IP "\fB\-m4\-nofpu\fR" 4
  .IX Item "-m4-nofpu"
! Generate code for the \s-1SH4\s0 without a floating-point unit.
! .IP "\fB\-m4\-single\-only\fR" 4
  .IX Item "-m4-single-only"
! Generate code for the \s-1SH4\s0 with a floating-point unit that only
! supports single-precision arithmetic.
! .IP "\fB\-m4\-single\fR" 4
  .IX Item "-m4-single"
! Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4\fR" 4
  .IX Item "-m4"
! Generate code for the \s-1SH4.\s0
! .IP "\fB\-m4\-100\fR" 4
  .IX Item "-m4-100"
! Generate code for \s-1SH4\-100.\s0
! .IP "\fB\-m4\-100\-nofpu\fR" 4
  .IX Item "-m4-100-nofpu"
! Generate code for \s-1SH4\-100\s0 in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4\-100\-single\fR" 4
  .IX Item "-m4-100-single"
! Generate code for \s-1SH4\-100\s0 assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4\-100\-single\-only\fR" 4
  .IX Item "-m4-100-single-only"
! Generate code for \s-1SH4\-100\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-200\fR" 4
  .IX Item "-m4-200"
! Generate code for \s-1SH4\-200.\s0
! .IP "\fB\-m4\-200\-nofpu\fR" 4
  .IX Item "-m4-200-nofpu"
! Generate code for \s-1SH4\-200\s0 without in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4\-200\-single\fR" 4
  .IX Item "-m4-200-single"
! Generate code for \s-1SH4\-200\s0 assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4\-200\-single\-only\fR" 4
  .IX Item "-m4-200-single-only"
! Generate code for \s-1SH4\-200\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-300\fR" 4
  .IX Item "-m4-300"
! Generate code for \s-1SH4\-300.\s0
! .IP "\fB\-m4\-300\-nofpu\fR" 4
  .IX Item "-m4-300-nofpu"
! Generate code for \s-1SH4\-300\s0 without in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4\-300\-single\fR" 4
  .IX Item "-m4-300-single"
! Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-300\-single\-only\fR" 4
  .IX Item "-m4-300-single-only"
! Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-340\fR" 4
  .IX Item "-m4-340"
! Generate code for \s-1SH4\-340\s0 (no \s-1MMU,\s0 no \s-1FPU\s0).
! .IP "\fB\-m4\-500\fR" 4
  .IX Item "-m4-500"
! Generate code for \s-1SH4\-500\s0 (no \s-1FPU\s0).  Passes \fB\-isa=sh4\-nofpu\fR to the
  assembler.
! .IP "\fB\-m4a\-nofpu\fR" 4
  .IX Item "-m4a-nofpu"
  Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4a\-single\-only\fR" 4
  .IX Item "-m4a-single-only"
! Generate code for the SH4a, in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4a\-single\fR" 4
  .IX Item "-m4a-single"
! Generate code for the SH4a assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4a\fR" 4
  .IX Item "-m4a"
  Generate code for the SH4a.
! .IP "\fB\-m4al\fR" 4
  .IX Item "-m4al"
  Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
! \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
  instructions at the moment.
! .IP "\fB\-mb\fR" 4
  .IX Item "-mb"
! Compile code for the processor in big-endian mode.
! .IP "\fB\-ml\fR" 4
  .IX Item "-ml"
! Compile code for the processor in little-endian mode.
! .IP "\fB\-mdalign\fR" 4
  .IX Item "-mdalign"
  Align doubles at 64\-bit boundaries.  Note that this changes the calling
  conventions, and thus some functions from the standard C library do
  not work unless you recompile it first with \fB\-mdalign\fR.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP "\fB\-mbigtable\fR" 4
  .IX Item "-mbigtable"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
! .IP "\fB\-mbitops\fR" 4
  .IX Item "-mbitops"
! Enable the use of bit manipulation instructions on \s-1SH2A.\s0
! .IP "\fB\-mfmovd\fR" 4
  .IX Item "-mfmovd"
  Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
  alignment constraints.
! .IP "\fB\-mrenesas\fR" 4
  .IX Item "-mrenesas"
  Comply with the calling conventions defined by Renesas.
! .IP "\fB\-mno\-renesas\fR" 4
  .IX Item "-mno-renesas"
! Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
  conventions were available.  This option is the default for all
! targets of the \s-1SH\s0 toolchain.
! .IP "\fB\-mnomacsave\fR" 4
  .IX Item "-mnomacsave"
! Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
  \&\fB\-mrenesas\fR is given.
! .IP "\fB\-mieee\fR" 4
  .IX Item "-mieee"
  .PD 0
! .IP "\fB\-mno\-ieee\fR" 4
  .IX Item "-mno-ieee"
  .PD
! Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
  handling of cases where the result of a comparison is unordered.  By default
  \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
  enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
! floating-point greater-equal and less-equal comparisons.  The implicit settings
  can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
! .IP "\fB\-minline\-ic_invalidate\fR" 4
  .IX Item "-minline-ic_invalidate"
  Inline code to invalidate instruction cache entries after setting up
  nested function trampolines.
--- 32020,32197 ----
  This option can be overridden for individual functions with the
  \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
  .PP
! \fISH Options\fR
  .IX Subsection "SH Options"
  .PP
! These \fB\-m\fR options are defined for the SH implementations:
! .IP \fB\-m1\fR 4
  .IX Item "-m1"
! Generate code for the SH1.
! .IP \fB\-m2\fR 4
  .IX Item "-m2"
! Generate code for the SH2.
! .IP \fB\-m2e\fR 4
  .IX Item "-m2e"
  Generate code for the SH2e.
! .IP \fB\-m2a\-nofpu\fR 4
  .IX Item "-m2a-nofpu"
! Generate code for the SH2a without FPU, or for a SH2a\-FPU in such a way
! that the floating\-point unit is not used.
! .IP \fB\-m2a\-single\-only\fR 4
  .IX Item "-m2a-single-only"
! Generate code for the SH2a\-FPU, in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m2a\-single\fR 4
  .IX Item "-m2a-single"
! Generate code for the SH2a\-FPU assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m2a\fR 4
  .IX Item "-m2a"
! Generate code for the SH2a\-FPU assuming the floating\-point unit is in
! double\-precision mode by default.
! .IP \fB\-m3\fR 4
  .IX Item "-m3"
! Generate code for the SH3.
! .IP \fB\-m3e\fR 4
  .IX Item "-m3e"
  Generate code for the SH3e.
! .IP \fB\-m4\-nofpu\fR 4
  .IX Item "-m4-nofpu"
! Generate code for the SH4 without a floating\-point unit.
! .IP \fB\-m4\-single\-only\fR 4
  .IX Item "-m4-single-only"
! Generate code for the SH4 with a floating\-point unit that only
! supports single\-precision arithmetic.
! .IP \fB\-m4\-single\fR 4
  .IX Item "-m4-single"
! Generate code for the SH4 assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4\fR 4
  .IX Item "-m4"
! Generate code for the SH4.
! .IP \fB\-m4\-100\fR 4
  .IX Item "-m4-100"
! Generate code for SH4\-100.
! .IP \fB\-m4\-100\-nofpu\fR 4
  .IX Item "-m4-100-nofpu"
! Generate code for SH4\-100 in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4\-100\-single\fR 4
  .IX Item "-m4-100-single"
! Generate code for SH4\-100 assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4\-100\-single\-only\fR 4
  .IX Item "-m4-100-single-only"
! Generate code for SH4\-100 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-200\fR 4
  .IX Item "-m4-200"
! Generate code for SH4\-200.
! .IP \fB\-m4\-200\-nofpu\fR 4
  .IX Item "-m4-200-nofpu"
! Generate code for SH4\-200 without in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4\-200\-single\fR 4
  .IX Item "-m4-200-single"
! Generate code for SH4\-200 assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4\-200\-single\-only\fR 4
  .IX Item "-m4-200-single-only"
! Generate code for SH4\-200 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-300\fR 4
  .IX Item "-m4-300"
! Generate code for SH4\-300.
! .IP \fB\-m4\-300\-nofpu\fR 4
  .IX Item "-m4-300-nofpu"
! Generate code for SH4\-300 without in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4\-300\-single\fR 4
  .IX Item "-m4-300-single"
! Generate code for SH4\-300 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-300\-single\-only\fR 4
  .IX Item "-m4-300-single-only"
! Generate code for SH4\-300 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-340\fR 4
  .IX Item "-m4-340"
! Generate code for SH4\-340 (no MMU, no FPU).
! .IP \fB\-m4\-500\fR 4
  .IX Item "-m4-500"
! Generate code for SH4\-500 (no FPU).  Passes \fB\-isa=sh4\-nofpu\fR to the
  assembler.
! .IP \fB\-m4a\-nofpu\fR 4
  .IX Item "-m4a-nofpu"
  Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4a\-single\-only\fR 4
  .IX Item "-m4a-single-only"
! Generate code for the SH4a, in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4a\-single\fR 4
  .IX Item "-m4a-single"
! Generate code for the SH4a assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4a\fR 4
  .IX Item "-m4a"
  Generate code for the SH4a.
! .IP \fB\-m4al\fR 4
  .IX Item "-m4al"
  Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
! \&\fB\-dsp\fR to the assembler.  GCC doesn\*(Aqt generate any DSP
  instructions at the moment.
! .IP \fB\-mb\fR 4
  .IX Item "-mb"
! Compile code for the processor in big\-endian mode.
! .IP \fB\-ml\fR 4
  .IX Item "-ml"
! Compile code for the processor in little\-endian mode.
! .IP \fB\-mdalign\fR 4
  .IX Item "-mdalign"
  Align doubles at 64\-bit boundaries.  Note that this changes the calling
  conventions, and thus some functions from the standard C library do
  not work unless you recompile it first with \fB\-mdalign\fR.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP \fB\-mbigtable\fR 4
  .IX Item "-mbigtable"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
! .IP \fB\-mbitops\fR 4
  .IX Item "-mbitops"
! Enable the use of bit manipulation instructions on SH2A.
! .IP \fB\-mfmovd\fR 4
  .IX Item "-mfmovd"
  Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
  alignment constraints.
! .IP \fB\-mrenesas\fR 4
  .IX Item "-mrenesas"
  Comply with the calling conventions defined by Renesas.
! .IP \fB\-mno\-renesas\fR 4
  .IX Item "-mno-renesas"
! Comply with the calling conventions defined for GCC before the Renesas
  conventions were available.  This option is the default for all
! targets of the SH toolchain.
! .IP \fB\-mnomacsave\fR 4
  .IX Item "-mnomacsave"
! Mark the \f(CW\*(C`MAC\*(C'\fR register as call\-clobbered, even if
  \&\fB\-mrenesas\fR is given.
! .IP \fB\-mieee\fR 4
  .IX Item "-mieee"
  .PD 0
! .IP \fB\-mno\-ieee\fR 4
  .IX Item "-mno-ieee"
  .PD
! Control the IEEE compliance of floating\-point comparisons, which affects the
  handling of cases where the result of a comparison is unordered.  By default
  \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
  enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
! floating\-point greater\-equal and less\-equal comparisons.  The implicit settings
  can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
! .IP \fB\-minline\-ic_invalidate\fR 4
  .IX Item "-minline-ic_invalidate"
  Inline code to invalidate instruction cache entries after setting up
  nested function trampolines.
*************** If the selected code generation option d
*** 32267,32334 ****
  instruction, and \fB\-musermode\fR is not in effect, the inlined code
  manipulates the instruction cache address array directly with an associative
  write.  This not only requires privileged mode at run time, but it also
! fails if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
! .IP "\fB\-misize\fR" 4
  .IX Item "-misize"
  Dump instruction size and location in the assembly code.
! .IP "\fB\-mpadstruct\fR" 4
  .IX Item "-mpadstruct"
  This option is deprecated.  It pads structures to multiple of 4 bytes,
! which is incompatible with the \s-1SH ABI.\s0
! .IP "\fB\-matomic\-model=\fR\fImodel\fR" 4
  .IX Item "-matomic-model=model"
  Sets the model of atomic operations and additional parameters as a comma
! separated list.  For details on the atomic built-in functions see
  \&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
  .RS 4
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable compiler generated atomic sequences and emit library calls for atomic
  operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
! .IP "\fBsoft-gusa\fR" 4
  .IX Item "soft-gusa"
  Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
! built-in functions.  The generated atomic sequences require additional support
  from the interrupt/exception handling code of the system and are only suitable
! for SH3* and SH4* single-core systems.  This option is enabled by default when
! the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is \s-1SH4A,\s0
  this option also partially utilizes the hardware atomic instructions
  \&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
  \&\fBstrict\fR is specified.
! .IP "\fBsoft-tcb\fR" 4
  .IX Item "soft-tcb"
  Generate software atomic sequences that use a variable in the thread control
  block.  This is a variation of the gUSA sequences which can also be used on
  SH1* and SH2* targets.  The generated atomic sequences require additional
  support from the interrupt/exception handling code of the system and are only
! suitable for single-core systems.  When using this model, the \fBgbr\-offset=\fR
  parameter has to be specified as well.
! .IP "\fBsoft-imask\fR" 4
  .IX Item "soft-imask"
  Generate software atomic sequences that temporarily disable interrupts by
  setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
! in privileged mode and is only suitable for single-core systems.  Additional
  support from the interrupt/exception handling code of the system is not
  required.  This model is enabled by default when the target is
  \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
! .IP "\fBhard-llcs\fR" 4
  .IX Item "hard-llcs"
  Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
! instructions only.  This is only available on \s-1SH4A\s0 and is suitable for
! multi-core systems.  Since the hardware instructions support only 32 bit atomic
  variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
  Code compiled with this option is also compatible with other software
! atomic model interrupt/exception handling systems if executed on an \s-1SH4A\s0
  system.  Additional support from the interrupt/exception handling code of the
  system is not required for this model.
! .IP "\fBgbr\-offset=\fR" 4
  .IX Item "gbr-offset="
  This parameter specifies the offset in bytes of the variable in the thread
  control block structure that should be used by the generated atomic sequences
! when the \fBsoft-tcb\fR model has been selected.  For other models this
  parameter is ignored.  The specified value must be an integer multiple of four
  and in the range 0\-1020.
! .IP "\fBstrict\fR" 4
  .IX Item "strict"
  This parameter prevents mixed usage of multiple atomic models, even if they
  are compatible, and makes the compiler generate atomic sequences of the
--- 32202,32269 ----
  instruction, and \fB\-musermode\fR is not in effect, the inlined code
  manipulates the instruction cache address array directly with an associative
  write.  This not only requires privileged mode at run time, but it also
! fails if the cache line had been mapped via the TLB and has become unmapped.
! .IP \fB\-misize\fR 4
  .IX Item "-misize"
  Dump instruction size and location in the assembly code.
! .IP \fB\-mpadstruct\fR 4
  .IX Item "-mpadstruct"
  This option is deprecated.  It pads structures to multiple of 4 bytes,
! which is incompatible with the SH ABI.
! .IP \fB\-matomic\-model=\fR\fImodel\fR 4
  .IX Item "-matomic-model=model"
  Sets the model of atomic operations and additional parameters as a comma
! separated list.  For details on the atomic built\-in functions see
  \&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
  .RS 4
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable compiler generated atomic sequences and emit library calls for atomic
  operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
! .IP \fBsoft\-gusa\fR 4
  .IX Item "soft-gusa"
  Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
! built\-in functions.  The generated atomic sequences require additional support
  from the interrupt/exception handling code of the system and are only suitable
! for SH3* and SH4* single\-core systems.  This option is enabled by default when
! the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is SH4A,
  this option also partially utilizes the hardware atomic instructions
  \&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
  \&\fBstrict\fR is specified.
! .IP \fBsoft\-tcb\fR 4
  .IX Item "soft-tcb"
  Generate software atomic sequences that use a variable in the thread control
  block.  This is a variation of the gUSA sequences which can also be used on
  SH1* and SH2* targets.  The generated atomic sequences require additional
  support from the interrupt/exception handling code of the system and are only
! suitable for single\-core systems.  When using this model, the \fBgbr\-offset=\fR
  parameter has to be specified as well.
! .IP \fBsoft\-imask\fR 4
  .IX Item "soft-imask"
  Generate software atomic sequences that temporarily disable interrupts by
  setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
! in privileged mode and is only suitable for single\-core systems.  Additional
  support from the interrupt/exception handling code of the system is not
  required.  This model is enabled by default when the target is
  \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
! .IP \fBhard\-llcs\fR 4
  .IX Item "hard-llcs"
  Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
! instructions only.  This is only available on SH4A and is suitable for
! multi\-core systems.  Since the hardware instructions support only 32 bit atomic
  variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
  Code compiled with this option is also compatible with other software
! atomic model interrupt/exception handling systems if executed on an SH4A
  system.  Additional support from the interrupt/exception handling code of the
  system is not required for this model.
! .IP \fBgbr\-offset=\fR 4
  .IX Item "gbr-offset="
  This parameter specifies the offset in bytes of the variable in the thread
  control block structure that should be used by the generated atomic sequences
! when the \fBsoft\-tcb\fR model has been selected.  For other models this
  parameter is ignored.  The specified value must be an integer multiple of four
  and in the range 0\-1020.
! .IP \fBstrict\fR 4
  .IX Item "strict"
  This parameter prevents mixed usage of multiple atomic models, even if they
  are compatible, and makes the compiler generate atomic sequences of the
*************** specified model only.
*** 32336,32647 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mtas\fR" 4
  .IX Item "-mtas"
  Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
  Notice that depending on the particular hardware and software configuration
  this can degrade overall performance due to the operand cache line flushes
! that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi-core \s-1SH4A\s0
  processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
  can result in data corruption for certain cache configurations.
! .IP "\fB\-mprefergot\fR" 4
  .IX Item "-mprefergot"
! When generating position-independent code, emit function calls using
  the Global Offset Table instead of the Procedure Linkage Table.
! .IP "\fB\-musermode\fR" 4
  .IX Item "-musermode"
  .PD 0
! .IP "\fB\-mno\-usermode\fR" 4
  .IX Item "-mno-usermode"
  .PD
! Don't allow (allow) the compiler generating privileged mode code.  Specifying
  \&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
  inlined code would not work in user mode.  \fB\-musermode\fR is the default
  when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
  \&\fB\-musermode\fR has no effect, since there is no user mode.
! .IP "\fB\-multcost=\fR\fInumber\fR" 4
  .IX Item "-multcost=number"
  Set the cost to assume for a multiply insn.
! .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
  .IX Item "-mdiv=strategy"
  Set the division strategy to be used for integer division operations.
  \&\fIstrategy\fR can be one of:
  .RS 4
! .IP "\fBcall\-div1\fR" 4
  .IX Item "call-div1"
! Calls a library function that uses the single-step division instruction
  \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
! unspecified result and does not trap.  This is the default except for \s-1SH4,
! SH2A\s0 and SHcompact.
! .IP "\fBcall-fp\fR" 4
  .IX Item "call-fp"
  Calls a library function that performs the operation in double precision
! floating point.  Division by zero causes a floating-point exception.  This is
! the default for SHcompact with \s-1FPU.\s0  Specifying this for targets that do not
! have a double precision \s-1FPU\s0 defaults to \f(CW\*(C`call\-div1\*(C'\fR.
! .IP "\fBcall-table\fR" 4
  .IX Item "call-table"
  Calls a library function that uses a lookup table for small divisors and
  the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
  by zero calculates an unspecified result and does not trap.  This is the default
! for \s-1SH4.\s0  Specifying this for targets that do not have dynamic shift
  instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
  .RE
  .RS 4
  .Sp
  When a division strategy has not been specified the default strategy is
! selected based on the current target.  For \s-1SH2A\s0 the default strategy is to
  use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
  calls.
  .RE
! .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
  .IX Item "-maccumulate-outgoing-args"
  Reserve space once for outgoing arguments in the function prologue rather
  than around each call.  Generally beneficial for performance and size.  Also
  needed for unwinding to avoid changing the stack frame around conditional code.
! .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
  .IX Item "-mdivsi3_libfunc=name"
  Set the name of the library function used for 32\-bit signed division to
  \&\fIname\fR.
  This only affects the name used in the \fBcall\fR division strategies, and
  the compiler still expects the same sets of input/output/clobbered registers as
  if this option were not present.
! .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
  .IX Item "-mbranch-cost=num"
  Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
! make the compiler try to generate more branch-free code if possible.  
  If not specified the value is selected depending on the processor type that
  is being compiled for.
! .IP "\fB\-mzdcbranch\fR" 4
  .IX Item "-mzdcbranch"
  .PD 0
! .IP "\fB\-mno\-zdcbranch\fR" 4
  .IX Item "-mno-zdcbranch"
  .PD
  Assume (do not assume) that zero displacement conditional branch instructions
  \&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
  compiler prefers zero displacement branch code sequences.  This is
! enabled by default when generating code for \s-1SH4\s0 and \s-1SH4A.\s0  It can be explicitly
  disabled by specifying \fB\-mno\-zdcbranch\fR.
! .IP "\fB\-mcbranch\-force\-delay\-slot\fR" 4
  .IX Item "-mcbranch-force-delay-slot"
  Force the usage of delay slots for conditional branches, which stuffs the delay
  slot with a \f(CW\*(C`nop\*(C'\fR if a suitable instruction cannot be found.  By default
  this option is disabled.  It can be enabled to work around hardware bugs as
! found in the original \s-1SH7055.\s0
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP "\fB\-mfsca\fR" 4
  .IX Item "-mfsca"
  .PD 0
! .IP "\fB\-mno\-fsca\fR" 4
  .IX Item "-mno-fsca"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
  and cosine approximations.  The option \fB\-mfsca\fR must be used in
  combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
! when generating code for \s-1SH4A.\s0  Using \fB\-mno\-fsca\fR disables sine and cosine
  approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
! .IP "\fB\-mfsrra\fR" 4
  .IX Item "-mfsrra"
  .PD 0
! .IP "\fB\-mno\-fsrra\fR" 4
  .IX Item "-mno-fsrra"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
  reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
  in combination with \fB\-funsafe\-math\-optimizations\fR and
  \&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
! \&\s-1SH4A.\s0  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
  even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
  in effect.
! .IP "\fB\-mpretend\-cmove\fR" 4
  .IX Item "-mpretend-cmove"
! Prefer zero-displacement conditional branches for conditional move instruction
! patterns.  This can result in faster code on the \s-1SH4\s0 processor.
! .IP "\fB\-mfdpic\fR" 4
  .IX Item "-mfdpic"
! Generate code using the \s-1FDPIC ABI.\s0
  .PP
  \fISolaris 2 Options\fR
  .IX Subsection "Solaris 2 Options"
  .PP
  These \fB\-m\fR options are supported on Solaris 2:
! .IP "\fB\-mclear\-hwcap\fR" 4
  .IX Item "-mclear-hwcap"
  \&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
  capabilities generated by the Solaris assembler.  This is only necessary
! when object files use \s-1ISA\s0 extensions not supported by the current
  machine, but check at runtime whether or not to use them.
! .IP "\fB\-mimpure\-text\fR" 4
  .IX Item "-mimpure-text"
  \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
  the compiler to not pass \fB\-z text\fR to the linker when linking a
! shared object.  Using this option, you can link position-dependent
  code into a shared object.
  .Sp
! \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
! allocatable but non-writable sections\*(R" linker error message.
! However, the necessary relocations trigger copy-on-write, and the
  shared object is not actually shared across processes.  Instead of
  using \fB\-mimpure\-text\fR, you should compile all source code with
  \&\fB\-fpic\fR or \fB\-fPIC\fR.
  .PP
  These switches are supported in addition to the above on Solaris 2:
! .IP "\fB\-pthreads\fR" 4
  .IX Item "-pthreads"
  This is a synonym for \fB\-pthread\fR.
  .PP
! \fI\s-1SPARC\s0 Options\fR
  .IX Subsection "SPARC Options"
  .PP
! These \fB\-m\fR options are supported on the \s-1SPARC:\s0
! .IP "\fB\-mno\-app\-regs\fR" 4
  .IX Item "-mno-app-regs"
  .PD 0
! .IP "\fB\-mapp\-regs\fR" 4
  .IX Item "-mapp-regs"
  .PD
  Specify \fB\-mapp\-regs\fR to generate output using the global registers
! 2 through 4, which the \s-1SPARC SVR4 ABI\s0 reserves for applications.  Like the
  global register 1, each global register 2 through 4 is then treated as an
  allocable register that is clobbered by function calls.  This is the default.
  .Sp
! To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
  specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
  software with this option.
! .IP "\fB\-mflat\fR" 4
  .IX Item "-mflat"
  .PD 0
! .IP "\fB\-mno\-flat\fR" 4
  .IX Item "-mno-flat"
  .PD
  With \fB\-mflat\fR, the compiler does not generate save/restore instructions
! and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
  with the regular register window model.  The local registers and the input
! registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and are
  saved on the stack as needed.
  .Sp
  With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
  instructions (except for leaf functions).  This is the normal operating mode.
! .IP "\fB\-mfpu\fR" 4
  .IX Item "-mfpu"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Generate output containing floating-point instructions.  This is the
  default.
! .IP "\fB\-mno\-fpu\fR" 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
! targets.  Normally the facilities of the machine's usual C compiler are
! used, but this cannot be done directly in cross-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
! \&\fBsparclite\-*\-*\fR do provide software floating-point support.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
  this to work.
! .IP "\fB\-mhard\-quad\-float\fR" 4
  .IX Item "-mhard-quad-float"
! Generate output containing quad-word (long double) floating-point
  instructions.
! .IP "\fB\-msoft\-quad\-float\fR" 4
  .IX Item "-msoft-quad-float"
! Generate output containing library calls for quad-word (long double)
! floating-point instructions.  The functions called are those specified
! in the \s-1SPARC ABI.\s0  This is the default.
  .Sp
! As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
! support for the quad-word floating-point instructions.  They all invoke
  a trap handler for one of these instructions, and then the trap handler
  emulates the effect of the instruction.  Because of the trap handler overhead,
! this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
  \&\fB\-msoft\-quad\-float\fR option is the default.
! .IP "\fB\-mno\-unaligned\-doubles\fR" 4
  .IX Item "-mno-unaligned-doubles"
  .PD 0
! .IP "\fB\-munaligned\-doubles\fR" 4
  .IX Item "-munaligned-doubles"
  .PD
  Assume that doubles have 8\-byte alignment.  This is the default.
  .Sp
! With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
  alignment only if they are contained in another type, or if they have an
  absolute address.  Otherwise, it assumes they have 4\-byte alignment.
  Specifying this option avoids some rare compatibility problems with code
  generated by other compilers.  It is not the default because it results
! in a performance loss, especially for floating-point code.
! .IP "\fB\-muser\-mode\fR" 4
  .IX Item "-muser-mode"
  .PD 0
! .IP "\fB\-mno\-user\-mode\fR" 4
  .IX Item "-mno-user-mode"
  .PD
  Do not generate code that can only run in supervisor mode.  This is relevant
! only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  This
  is the default.
! .IP "\fB\-mfaster\-structs\fR" 4
  .IX Item "-mfaster-structs"
  .PD 0
! .IP "\fB\-mno\-faster\-structs\fR" 4
  .IX Item "-mno-faster-structs"
  .PD
  With \fB\-mfaster\-structs\fR, the compiler assumes that structures
  should have 8\-byte alignment.  This enables the use of pairs of
  \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
  assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
! However, the use of this changed alignment directly violates the \s-1SPARC
! ABI.\s0  Thus, it's intended only for use on targets where the developer
  acknowledges that their resulting code is not directly in line with
! the rules of the \s-1ABI.\s0
! .IP "\fB\-mstd\-struct\-return\fR" 4
  .IX Item "-mstd-struct-return"
  .PD 0
! .IP "\fB\-mno\-std\-struct\-return\fR" 4
  .IX Item "-mno-std-struct-return"
  .PD
  With \fB\-mstd\-struct\-return\fR, the compiler generates checking code
  in functions returning structures or unions to detect size mismatches
! between the two sides of function calls, as per the 32\-bit \s-1ABI.\s0
  .Sp
  The default is \fB\-mno\-std\-struct\-return\fR.  This option has no effect
  in 64\-bit mode.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
  .PD 0
! .IP "\fB\-mno\-lra\fR" 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is the default for \s-1SPARC\s0 since \s-1GCC 7\s0
  so \fB\-mno\-lra\fR needs to be passed to get old Reload.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
--- 32271,32582 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mtas\fR 4
  .IX Item "-mtas"
  Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
  Notice that depending on the particular hardware and software configuration
  this can degrade overall performance due to the operand cache line flushes
! that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi\-core SH4A
  processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
  can result in data corruption for certain cache configurations.
! .IP \fB\-mprefergot\fR 4
  .IX Item "-mprefergot"
! When generating position\-independent code, emit function calls using
  the Global Offset Table instead of the Procedure Linkage Table.
! .IP \fB\-musermode\fR 4
  .IX Item "-musermode"
  .PD 0
! .IP \fB\-mno\-usermode\fR 4
  .IX Item "-mno-usermode"
  .PD
! Don\*(Aqt allow (allow) the compiler generating privileged mode code.  Specifying
  \&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
  inlined code would not work in user mode.  \fB\-musermode\fR is the default
  when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
  \&\fB\-musermode\fR has no effect, since there is no user mode.
! .IP \fB\-multcost=\fR\fInumber\fR 4
  .IX Item "-multcost=number"
  Set the cost to assume for a multiply insn.
! .IP \fB\-mdiv=\fR\fIstrategy\fR 4
  .IX Item "-mdiv=strategy"
  Set the division strategy to be used for integer division operations.
  \&\fIstrategy\fR can be one of:
  .RS 4
! .IP \fBcall\-div1\fR 4
  .IX Item "call-div1"
! Calls a library function that uses the single\-step division instruction
  \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
! unspecified result and does not trap.  This is the default except for SH4,
! SH2A and SHcompact.
! .IP \fBcall\-fp\fR 4
  .IX Item "call-fp"
  Calls a library function that performs the operation in double precision
! floating point.  Division by zero causes a floating\-point exception.  This is
! the default for SHcompact with FPU.  Specifying this for targets that do not
! have a double precision FPU defaults to \f(CW\*(C`call\-div1\*(C'\fR.
! .IP \fBcall\-table\fR 4
  .IX Item "call-table"
  Calls a library function that uses a lookup table for small divisors and
  the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
  by zero calculates an unspecified result and does not trap.  This is the default
! for SH4.  Specifying this for targets that do not have dynamic shift
  instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
  .RE
  .RS 4
  .Sp
  When a division strategy has not been specified the default strategy is
! selected based on the current target.  For SH2A the default strategy is to
  use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
  calls.
  .RE
! .IP \fB\-maccumulate\-outgoing\-args\fR 4
  .IX Item "-maccumulate-outgoing-args"
  Reserve space once for outgoing arguments in the function prologue rather
  than around each call.  Generally beneficial for performance and size.  Also
  needed for unwinding to avoid changing the stack frame around conditional code.
! .IP \fB\-mdivsi3_libfunc=\fR\fIname\fR 4
  .IX Item "-mdivsi3_libfunc=name"
  Set the name of the library function used for 32\-bit signed division to
  \&\fIname\fR.
  This only affects the name used in the \fBcall\fR division strategies, and
  the compiler still expects the same sets of input/output/clobbered registers as
  if this option were not present.
! .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP \fB\-mbranch\-cost=\fR\fInum\fR 4
  .IX Item "-mbranch-cost=num"
  Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
! make the compiler try to generate more branch\-free code if possible.  
  If not specified the value is selected depending on the processor type that
  is being compiled for.
! .IP \fB\-mzdcbranch\fR 4
  .IX Item "-mzdcbranch"
  .PD 0
! .IP \fB\-mno\-zdcbranch\fR 4
  .IX Item "-mno-zdcbranch"
  .PD
  Assume (do not assume) that zero displacement conditional branch instructions
  \&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
  compiler prefers zero displacement branch code sequences.  This is
! enabled by default when generating code for SH4 and SH4A.  It can be explicitly
  disabled by specifying \fB\-mno\-zdcbranch\fR.
! .IP \fB\-mcbranch\-force\-delay\-slot\fR 4
  .IX Item "-mcbranch-force-delay-slot"
  Force the usage of delay slots for conditional branches, which stuffs the delay
  slot with a \f(CW\*(C`nop\*(C'\fR if a suitable instruction cannot be found.  By default
  this option is disabled.  It can be enabled to work around hardware bugs as
! found in the original SH7055.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating\-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine\-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine\-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP \fB\-mfsca\fR 4
  .IX Item "-mfsca"
  .PD 0
! .IP \fB\-mno\-fsca\fR 4
  .IX Item "-mno-fsca"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
  and cosine approximations.  The option \fB\-mfsca\fR must be used in
  combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
! when generating code for SH4A.  Using \fB\-mno\-fsca\fR disables sine and cosine
  approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
! .IP \fB\-mfsrra\fR 4
  .IX Item "-mfsrra"
  .PD 0
! .IP \fB\-mno\-fsrra\fR 4
  .IX Item "-mno-fsrra"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
  reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
  in combination with \fB\-funsafe\-math\-optimizations\fR and
  \&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
! SH4A.  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
  even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
  in effect.
! .IP \fB\-mpretend\-cmove\fR 4
  .IX Item "-mpretend-cmove"
! Prefer zero\-displacement conditional branches for conditional move instruction
! patterns.  This can result in faster code on the SH4 processor.
! .IP \fB\-mfdpic\fR 4
  .IX Item "-mfdpic"
! Generate code using the FDPIC ABI.
  .PP
  \fISolaris 2 Options\fR
  .IX Subsection "Solaris 2 Options"
  .PP
  These \fB\-m\fR options are supported on Solaris 2:
! .IP \fB\-mclear\-hwcap\fR 4
  .IX Item "-mclear-hwcap"
  \&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
  capabilities generated by the Solaris assembler.  This is only necessary
! when object files use ISA extensions not supported by the current
  machine, but check at runtime whether or not to use them.
! .IP \fB\-mimpure\-text\fR 4
  .IX Item "-mimpure-text"
  \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
  the compiler to not pass \fB\-z text\fR to the linker when linking a
! shared object.  Using this option, you can link position\-dependent
  code into a shared object.
  .Sp
! \&\fB\-mimpure\-text\fR suppresses the "relocations remain against
! allocatable but non\-writable sections" linker error message.
! However, the necessary relocations trigger copy\-on\-write, and the
  shared object is not actually shared across processes.  Instead of
  using \fB\-mimpure\-text\fR, you should compile all source code with
  \&\fB\-fpic\fR or \fB\-fPIC\fR.
  .PP
  These switches are supported in addition to the above on Solaris 2:
! .IP \fB\-pthreads\fR 4
  .IX Item "-pthreads"
  This is a synonym for \fB\-pthread\fR.
  .PP
! \fISPARC Options\fR
  .IX Subsection "SPARC Options"
  .PP
! These \fB\-m\fR options are supported on the SPARC:
! .IP \fB\-mno\-app\-regs\fR 4
  .IX Item "-mno-app-regs"
  .PD 0
! .IP \fB\-mapp\-regs\fR 4
  .IX Item "-mapp-regs"
  .PD
  Specify \fB\-mapp\-regs\fR to generate output using the global registers
! 2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
  global register 1, each global register 2 through 4 is then treated as an
  allocable register that is clobbered by function calls.  This is the default.
  .Sp
! To be fully SVR4 ABI\-compliant at the cost of some performance loss,
  specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
  software with this option.
! .IP \fB\-mflat\fR 4
  .IX Item "-mflat"
  .PD 0
! .IP \fB\-mno\-flat\fR 4
  .IX Item "-mno-flat"
  .PD
  With \fB\-mflat\fR, the compiler does not generate save/restore instructions
! and uses a "flat" or single register window model.  This model is compatible
  with the regular register window model.  The local registers and the input
! registers (0\-\-5) are still treated as "call\-saved" registers and are
  saved on the stack as needed.
  .Sp
  With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
  instructions (except for leaf functions).  This is the normal operating mode.
! .IP \fB\-mfpu\fR 4
  .IX Item "-mfpu"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Generate output containing floating\-point instructions.  This is the
  default.
! .IP \fB\-mno\-fpu\fR 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all SPARC
! targets.  Normally the facilities of the machine\*(Aqs usual C compiler are
! used, but this cannot be done directly in cross\-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross\-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
! \&\fBsparclite\-*\-*\fR do provide software floating\-point support.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with GCC, with \fB\-msoft\-float\fR in order for
  this to work.
! .IP \fB\-mhard\-quad\-float\fR 4
  .IX Item "-mhard-quad-float"
! Generate output containing quad\-word (long double) floating\-point
  instructions.
! .IP \fB\-msoft\-quad\-float\fR 4
  .IX Item "-msoft-quad-float"
! Generate output containing library calls for quad\-word (long double)
! floating\-point instructions.  The functions called are those specified
! in the SPARC ABI.  This is the default.
  .Sp
! As of this writing, there are no SPARC implementations that have hardware
! support for the quad\-word floating\-point instructions.  They all invoke
  a trap handler for one of these instructions, and then the trap handler
  emulates the effect of the instruction.  Because of the trap handler overhead,
! this is much slower than calling the ABI library routines.  Thus the
  \&\fB\-msoft\-quad\-float\fR option is the default.
! .IP \fB\-mno\-unaligned\-doubles\fR 4
  .IX Item "-mno-unaligned-doubles"
  .PD 0
! .IP \fB\-munaligned\-doubles\fR 4
  .IX Item "-munaligned-doubles"
  .PD
  Assume that doubles have 8\-byte alignment.  This is the default.
  .Sp
! With \fB\-munaligned\-doubles\fR, GCC assumes that doubles have 8\-byte
  alignment only if they are contained in another type, or if they have an
  absolute address.  Otherwise, it assumes they have 4\-byte alignment.
  Specifying this option avoids some rare compatibility problems with code
  generated by other compilers.  It is not the default because it results
! in a performance loss, especially for floating\-point code.
! .IP \fB\-muser\-mode\fR 4
  .IX Item "-muser-mode"
  .PD 0
! .IP \fB\-mno\-user\-mode\fR 4
  .IX Item "-mno-user-mode"
  .PD
  Do not generate code that can only run in supervisor mode.  This is relevant
! only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the LEON3 processor.  This
  is the default.
! .IP \fB\-mfaster\-structs\fR 4
  .IX Item "-mfaster-structs"
  .PD 0
! .IP \fB\-mno\-faster\-structs\fR 4
  .IX Item "-mno-faster-structs"
  .PD
  With \fB\-mfaster\-structs\fR, the compiler assumes that structures
  should have 8\-byte alignment.  This enables the use of pairs of
  \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
  assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
! However, the use of this changed alignment directly violates the SPARC
! ABI.  Thus, it\*(Aqs intended only for use on targets where the developer
  acknowledges that their resulting code is not directly in line with
! the rules of the ABI.
! .IP \fB\-mstd\-struct\-return\fR 4
  .IX Item "-mstd-struct-return"
  .PD 0
! .IP \fB\-mno\-std\-struct\-return\fR 4
  .IX Item "-mno-std-struct-return"
  .PD
  With \fB\-mstd\-struct\-return\fR, the compiler generates checking code
  in functions returning structures or unions to detect size mismatches
! between the two sides of function calls, as per the 32\-bit ABI.
  .Sp
  The default is \fB\-mno\-std\-struct\-return\fR.  This option has no effect
  in 64\-bit mode.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
  .PD 0
! .IP \fB\-mno\-lra\fR 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is the default for SPARC since GCC 7
  so \fB\-mno\-lra\fR needs to be passed to get old Reload.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
*************** for machine type \fIcpu_type\fR.  Suppor
*** 32654,32660 ****
  .Sp
  Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
  .Sp
  Default instruction scheduling parameters are used for values that select
--- 32589,32595 ----
  .Sp
  Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if GCC does not recognize
  the processor.
  .Sp
  Default instruction scheduling parameters are used for values that select
*************** an architecture and not an implementatio
*** 32664,32718 ****
  Here is a list of each supported architecture and their supported
  implementations.
  .RS 4
! .IP "v7" 4
  .IX Item "v7"
  cypress, leon3v7
! .IP "v8" 4
  .IX Item "v8"
  supersparc, hypersparc, leon, leon3, leon5
! .IP "sparclite" 4
  .IX Item "sparclite"
  f930, f934, sparclite86x
! .IP "sparclet" 4
  .IX Item "sparclet"
  tsc701
! .IP "v9" 4
  .IX Item "v9"
  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
  niagara7, m8
  .RE
  .RS 4
  .Sp
! By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
! variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
! additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
  SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
! SPARCStation 1, 2, \s-1IPX\s0 etc.
  .Sp
! With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
  architecture.  The only difference from V7 code is that the compiler emits
! the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
! but not in \s-1SPARC\-V7.\s0  With \fB\-mcpu=supersparc\fR, the compiler additionally
  optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
  2000 series.
  .Sp
! With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
! the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
! and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7.\s0
  With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
! Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU.\s0  With
  \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
! \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU.\s0
  .Sp
! With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
! the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
  integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
! but not in \s-1SPARC\-V7.\s0  With \fB\-mcpu=tsc701\fR, the compiler additionally
! optimizes it for the \s-1TEMIC\s0 SPARClet chip.
  .Sp
! With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
! architecture.  This adds 64\-bit integer and floating-point move instructions,
! 3 additional floating-point condition code registers and conditional move
  instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
  optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
  \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
--- 32599,32653 ----
  Here is a list of each supported architecture and their supported
  implementations.
  .RS 4
! .IP v7 4
  .IX Item "v7"
  cypress, leon3v7
! .IP v8 4
  .IX Item "v8"
  supersparc, hypersparc, leon, leon3, leon5
! .IP sparclite 4
  .IX Item "sparclite"
  f930, f934, sparclite86x
! .IP sparclet 4
  .IX Item "sparclet"
  tsc701
! .IP v9 4
  .IX Item "v9"
  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
  niagara7, m8
  .RE
  .RS 4
  .Sp
! By default (unless configured otherwise), GCC generates code for the V7
! variant of the SPARC architecture.  With \fB\-mcpu=cypress\fR, the compiler
! additionally optimizes it for the Cypress CY7C602 chip, as used in the
  SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
! SPARCStation 1, 2, IPX etc.
  .Sp
! With \fB\-mcpu=v8\fR, GCC generates code for the V8 variant of the SPARC
  architecture.  The only difference from V7 code is that the compiler emits
! the integer multiply and integer divide instructions which exist in SPARC\-V8
! but not in SPARC\-V7.  With \fB\-mcpu=supersparc\fR, the compiler additionally
  optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
  2000 series.
  .Sp
! With \fB\-mcpu=sparclite\fR, GCC generates code for the SPARClite variant of
! the SPARC architecture.  This adds the integer multiply, integer divide step
! and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in SPARC\-V7.
  With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
! Fujitsu MB86930 chip, which is the original SPARClite, with no FPU.  With
  \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
! MB86934 chip, which is the more recent SPARClite with FPU.
  .Sp
! With \fB\-mcpu=sparclet\fR, GCC generates code for the SPARClet variant of
! the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
  integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
! but not in SPARC\-V7.  With \fB\-mcpu=tsc701\fR, the compiler additionally
! optimizes it for the TEMIC SPARClet chip.
  .Sp
! With \fB\-mcpu=v9\fR, GCC generates code for the V9 variant of the SPARC
! architecture.  This adds 64\-bit integer and floating\-point move instructions,
! 3 additional floating\-point condition code registers and conditional move
  instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
  optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
  \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
*************** additionally optimizes it for Sun UltraS
*** 32724,32733 ****
  UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
  additionally optimizes it for Sun UltraSPARC T4 chips.  With
  \&\fB\-mcpu=niagara7\fR, the compiler additionally optimizes it for
! Oracle \s-1SPARC M7\s0 chips.  With \fB\-mcpu=m8\fR, the compiler
  additionally optimizes it for Oracle M8 chips.
  .RE
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the instruction set or register set that the
--- 32659,32668 ----
  UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
  additionally optimizes it for Sun UltraSPARC T4 chips.  With
  \&\fB\-mcpu=niagara7\fR, the compiler additionally optimizes it for
! Oracle SPARC M7 chips.  With \fB\-mcpu=m8\fR, the compiler
  additionally optimizes it for Oracle M8 chips.
  .RE
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the instruction set or register set that the
*************** option \fB\-mcpu=\fR\fIcpu_type\fR does.
*** 32735,32953 ****
  .Sp
  The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
  \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
! that select a particular \s-1CPU\s0 implementation.  Those are
  \&\fBcypress\fR, \fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR,
  \&\fBleon3\fR, \fBleon3v7\fR, \fBleon5\fR, \fBf930\fR, \fBf934\fR,
  \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
  \&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
  \&\fBniagara4\fR, \fBniagara7\fR and \fBm8\fR.  With native Solaris
  and GNU/Linux toolchains, \fBnative\fR can also be used.
! .IP "\fB\-mv8plus\fR" 4
  .IX Item "-mv8plus"
  .PD 0
! .IP "\fB\-mno\-v8plus\fR" 4
  .IX Item "-mno-v8plus"
  .PD
! With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+ ABI.\s0  The
! difference from the V8 \s-1ABI\s0 is that the global and out registers are
  considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
! mode for all \s-1SPARC\-V9\s0 processors.
! .IP "\fB\-mvis\fR" 4
  .IX Item "-mvis"
  .PD 0
! .IP "\fB\-mno\-vis\fR" 4
  .IX Item "-mno-vis"
  .PD
! With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
  Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
! .IP "\fB\-mvis2\fR" 4
  .IX Item "-mvis2"
  .PD 0
! .IP "\fB\-mno\-vis2\fR" 4
  .IX Item "-mno-vis2"
  .PD
! With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
  version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis2\fR when targeting a cpu that supports such
! instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
  also sets \fB\-mvis\fR.
! .IP "\fB\-mvis3\fR" 4
  .IX Item "-mvis3"
  .PD 0
! .IP "\fB\-mno\-vis3\fR" 4
  .IX Item "-mno-vis3"
  .PD
! With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
  version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis3\fR when targeting a cpu that supports such
  instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
  also sets \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP "\fB\-mvis4\fR" 4
  .IX Item "-mvis4"
  .PD 0
! .IP "\fB\-mno\-vis4\fR" 4
  .IX Item "-mno-vis4"
  .PD
! With \fB\-mvis4\fR, \s-1GCC\s0 generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis4\fR when targeting a cpu that supports such
  instructions, such as niagara\-7 and later.  Setting \fB\-mvis4\fR
  also sets \fB\-mvis3\fR, \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP "\fB\-mvis4b\fR" 4
  .IX Item "-mvis4b"
  .PD 0
! .IP "\fB\-mno\-vis4b\fR" 4
  .IX Item "-mno-vis4b"
  .PD
! With \fB\-mvis4b\fR, \s-1GCC\s0 generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
! the additional \s-1VIS\s0 instructions introduced in the Oracle \s-1SPARC\s0
  Architecture 2017.  The default is \fB\-mvis4b\fR when targeting a
  cpu that supports such instructions, such as m8 and later.  Setting
  \&\fB\-mvis4b\fR also sets \fB\-mvis4\fR, \fB\-mvis3\fR,
  \&\fB\-mvis2\fR and \fB\-mvis\fR.
! .IP "\fB\-mcbcond\fR" 4
  .IX Item "-mcbcond"
  .PD 0
! .IP "\fB\-mno\-cbcond\fR" 4
  .IX Item "-mno-cbcond"
  .PD
! With \fB\-mcbcond\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
! Compare-and-Branch-on-Condition instructions.  The default is \fB\-mcbcond\fR
! when targeting a \s-1CPU\s0 that supports such instructions, such as Niagara\-4 and
  later.
! .IP "\fB\-mfmaf\fR" 4
  .IX Item "-mfmaf"
  .PD 0
! .IP "\fB\-mno\-fmaf\fR" 4
  .IX Item "-mno-fmaf"
  .PD
! With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
! Fused Multiply-Add Floating-point instructions.  The default is \fB\-mfmaf\fR
! when targeting a \s-1CPU\s0 that supports such instructions, such as Niagara\-3 and
  later.
! .IP "\fB\-mfsmuld\fR" 4
  .IX Item "-mfsmuld"
  .PD 0
! .IP "\fB\-mno\-fsmuld\fR" 4
  .IX Item "-mno-fsmuld"
  .PD
! With \fB\-mfsmuld\fR, \s-1GCC\s0 generates code that takes advantage of the
! Floating-point Multiply Single to Double (FsMULd) instruction.  The default is
! \&\fB\-mfsmuld\fR when targeting a \s-1CPU\s0 supporting the architecture versions V8
! or V9 with \s-1FPU\s0 except \fB\-mcpu=leon\fR.
! .IP "\fB\-mpopc\fR" 4
  .IX Item "-mpopc"
  .PD 0
! .IP "\fB\-mno\-popc\fR" 4
  .IX Item "-mno-popc"
  .PD
! With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
  Population Count instruction.  The default is \fB\-mpopc\fR
! when targeting a \s-1CPU\s0 that supports such an instruction, such as Niagara\-2 and
  later.
! .IP "\fB\-msubxc\fR" 4
  .IX Item "-msubxc"
  .PD 0
! .IP "\fB\-mno\-subxc\fR" 4
  .IX Item "-mno-subxc"
  .PD
! With \fB\-msubxc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
! Subtract-Extended-with-Carry instruction.  The default is \fB\-msubxc\fR
! when targeting a \s-1CPU\s0 that supports such an instruction, such as Niagara\-7 and
  later.
! .IP "\fB\-mfix\-at697f\fR" 4
  .IX Item "-mfix-at697f"
! Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
! processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
! .IP "\fB\-mfix\-ut699\fR" 4
  .IX Item "-mfix-ut699"
! Enable the documented workarounds for the floating-point errata and the data
! cache nullify errata of the \s-1UT699\s0 processor.
! .IP "\fB\-mfix\-ut700\fR" 4
  .IX Item "-mfix-ut700"
! Enable the documented workaround for the back-to-back store errata of
! the \s-1UT699E/UT700\s0 processor.
! .IP "\fB\-mfix\-gr712rc\fR" 4
  .IX Item "-mfix-gr712rc"
! Enable the documented workaround for the back-to-back store errata of
! the \s-1GR712RC\s0 processor.
  .PP
  These \fB\-m\fR options are supported in addition to the above
! on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
! .IP "\fB\-m32\fR" 4
  .IX Item "-m32"
  .PD 0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
  to 64 bits.
! .IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
  .IX Item "-mcmodel=which"
  Set the code model to one of
  .RS 4
! .IP "\fBmedlow\fR" 4
  .IX Item "medlow"
  The Medium/Low code model: 64\-bit addresses, programs
  must be linked in the low 32 bits of memory.  Programs can be statically
  or dynamically linked.
! .IP "\fBmedmid\fR" 4
  .IX Item "medmid"
  The Medium/Middle code model: 64\-bit addresses, programs
  must be linked in the low 44 bits of memory, the text and data segments must
  be less than 2GB in size and the data segment must be located within 2GB of
  the text segment.
! .IP "\fBmedany\fR" 4
  .IX Item "medany"
  The Medium/Anywhere code model: 64\-bit addresses, programs
  may be linked anywhere in memory, the text and data segments must be less
  than 2GB in size and the data segment must be located within 2GB of the
  text segment.
! .IP "\fBembmedany\fR" 4
  .IX Item "embmedany"
  The Medium/Anywhere code model for embedded systems:
  64\-bit addresses, the text and data segments must be less than 2GB in
  size, both starting anywhere in memory (determined at link time).  The
  global register \f(CW%g4\fR points to the base of the data segment.  Programs
! are statically linked and \s-1PIC\s0 is not supported.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
  .IX Item "-mmemory-model=mem-model"
  Set the memory model in force on the processor to one of
  .RS 4
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  The default memory model for the processor and operating system.
! .IP "\fBrmo\fR" 4
  .IX Item "rmo"
  Relaxed Memory Order
! .IP "\fBpso\fR" 4
  .IX Item "pso"
  Partial Store Order
! .IP "\fBtso\fR" 4
  .IX Item "tso"
  Total Store Order
! .IP "\fBsc\fR" 4
  .IX Item "sc"
  Sequential Consistency
  .RE
  .RS 4
  .Sp
! These memory models are formally defined in Appendix D of the \s-1SPARC\-V9\s0
! architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
  .RE
! .IP "\fB\-mstack\-bias\fR" 4
  .IX Item "-mstack-bias"
  .PD 0
! .IP "\fB\-mno\-stack\-bias\fR" 4
  .IX Item "-mno-stack-bias"
  .PD
! With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
  frame pointer if present, are offset by \-2047 which must be added back
  when making stack frame references.  This is the default in 64\-bit mode.
  Otherwise, assume no such offset is present.
--- 32670,32888 ----
  .Sp
  The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
  \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
! that select a particular CPU implementation.  Those are
  \&\fBcypress\fR, \fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR,
  \&\fBleon3\fR, \fBleon3v7\fR, \fBleon5\fR, \fBf930\fR, \fBf934\fR,
  \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
  \&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
  \&\fBniagara4\fR, \fBniagara7\fR and \fBm8\fR.  With native Solaris
  and GNU/Linux toolchains, \fBnative\fR can also be used.
! .IP \fB\-mv8plus\fR 4
  .IX Item "-mv8plus"
  .PD 0
! .IP \fB\-mno\-v8plus\fR 4
  .IX Item "-mno-v8plus"
  .PD
! With \fB\-mv8plus\fR, GCC generates code for the SPARC\-V8+ ABI.  The
! difference from the V8 ABI is that the global and out registers are
  considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
! mode for all SPARC\-V9 processors.
! .IP \fB\-mvis\fR 4
  .IX Item "-mvis"
  .PD 0
! .IP \fB\-mno\-vis\fR 4
  .IX Item "-mno-vis"
  .PD
! With \fB\-mvis\fR, GCC generates code that takes advantage of the UltraSPARC
  Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
! .IP \fB\-mvis2\fR 4
  .IX Item "-mvis2"
  .PD 0
! .IP \fB\-mno\-vis2\fR 4
  .IX Item "-mno-vis2"
  .PD
! With \fB\-mvis2\fR, GCC generates code that takes advantage of
  version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis2\fR when targeting a cpu that supports such
! instructions, such as UltraSPARC\-III and later.  Setting \fB\-mvis2\fR
  also sets \fB\-mvis\fR.
! .IP \fB\-mvis3\fR 4
  .IX Item "-mvis3"
  .PD 0
! .IP \fB\-mno\-vis3\fR 4
  .IX Item "-mno-vis3"
  .PD
! With \fB\-mvis3\fR, GCC generates code that takes advantage of
  version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis3\fR when targeting a cpu that supports such
  instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
  also sets \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP \fB\-mvis4\fR 4
  .IX Item "-mvis4"
  .PD 0
! .IP \fB\-mno\-vis4\fR 4
  .IX Item "-mno-vis4"
  .PD
! With \fB\-mvis4\fR, GCC generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis4\fR when targeting a cpu that supports such
  instructions, such as niagara\-7 and later.  Setting \fB\-mvis4\fR
  also sets \fB\-mvis3\fR, \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP \fB\-mvis4b\fR 4
  .IX Item "-mvis4b"
  .PD 0
! .IP \fB\-mno\-vis4b\fR 4
  .IX Item "-mno-vis4b"
  .PD
! With \fB\-mvis4b\fR, GCC generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
! the additional VIS instructions introduced in the Oracle SPARC
  Architecture 2017.  The default is \fB\-mvis4b\fR when targeting a
  cpu that supports such instructions, such as m8 and later.  Setting
  \&\fB\-mvis4b\fR also sets \fB\-mvis4\fR, \fB\-mvis3\fR,
  \&\fB\-mvis2\fR and \fB\-mvis\fR.
! .IP \fB\-mcbcond\fR 4
  .IX Item "-mcbcond"
  .PD 0
! .IP \fB\-mno\-cbcond\fR 4
  .IX Item "-mno-cbcond"
  .PD
! With \fB\-mcbcond\fR, GCC generates code that takes advantage of the UltraSPARC
! Compare\-and\-Branch\-on\-Condition instructions.  The default is \fB\-mcbcond\fR
! when targeting a CPU that supports such instructions, such as Niagara\-4 and
  later.
! .IP \fB\-mfmaf\fR 4
  .IX Item "-mfmaf"
  .PD 0
! .IP \fB\-mno\-fmaf\fR 4
  .IX Item "-mno-fmaf"
  .PD
! With \fB\-mfmaf\fR, GCC generates code that takes advantage of the UltraSPARC
! Fused Multiply\-Add Floating\-point instructions.  The default is \fB\-mfmaf\fR
! when targeting a CPU that supports such instructions, such as Niagara\-3 and
  later.
! .IP \fB\-mfsmuld\fR 4
  .IX Item "-mfsmuld"
  .PD 0
! .IP \fB\-mno\-fsmuld\fR 4
  .IX Item "-mno-fsmuld"
  .PD
! With \fB\-mfsmuld\fR, GCC generates code that takes advantage of the
! Floating\-point Multiply Single to Double (FsMULd) instruction.  The default is
! \&\fB\-mfsmuld\fR when targeting a CPU supporting the architecture versions V8
! or V9 with FPU except \fB\-mcpu=leon\fR.
! .IP \fB\-mpopc\fR 4
  .IX Item "-mpopc"
  .PD 0
! .IP \fB\-mno\-popc\fR 4
  .IX Item "-mno-popc"
  .PD
! With \fB\-mpopc\fR, GCC generates code that takes advantage of the UltraSPARC
  Population Count instruction.  The default is \fB\-mpopc\fR
! when targeting a CPU that supports such an instruction, such as Niagara\-2 and
  later.
! .IP \fB\-msubxc\fR 4
  .IX Item "-msubxc"
  .PD 0
! .IP \fB\-mno\-subxc\fR 4
  .IX Item "-mno-subxc"
  .PD
! With \fB\-msubxc\fR, GCC generates code that takes advantage of the UltraSPARC
! Subtract\-Extended\-with\-Carry instruction.  The default is \fB\-msubxc\fR
! when targeting a CPU that supports such an instruction, such as Niagara\-7 and
  later.
! .IP \fB\-mfix\-at697f\fR 4
  .IX Item "-mfix-at697f"
! Enable the documented workaround for the single erratum of the Atmel AT697F
! processor (which corresponds to erratum #13 of the AT697E processor).
! .IP \fB\-mfix\-ut699\fR 4
  .IX Item "-mfix-ut699"
! Enable the documented workarounds for the floating\-point errata and the data
! cache nullify errata of the UT699 processor.
! .IP \fB\-mfix\-ut700\fR 4
  .IX Item "-mfix-ut700"
! Enable the documented workaround for the back\-to\-back store errata of
! the UT699E/UT700 processor.
! .IP \fB\-mfix\-gr712rc\fR 4
  .IX Item "-mfix-gr712rc"
! Enable the documented workaround for the back\-to\-back store errata of
! the GR712RC processor.
  .PP
  These \fB\-m\fR options are supported in addition to the above
! on SPARC\-V9 processors in 64\-bit environments:
! .IP \fB\-m32\fR 4
  .IX Item "-m32"
  .PD 0
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
  to 64 bits.
! .IP \fB\-mcmodel=\fR\fIwhich\fR 4
  .IX Item "-mcmodel=which"
  Set the code model to one of
  .RS 4
! .IP \fBmedlow\fR 4
  .IX Item "medlow"
  The Medium/Low code model: 64\-bit addresses, programs
  must be linked in the low 32 bits of memory.  Programs can be statically
  or dynamically linked.
! .IP \fBmedmid\fR 4
  .IX Item "medmid"
  The Medium/Middle code model: 64\-bit addresses, programs
  must be linked in the low 44 bits of memory, the text and data segments must
  be less than 2GB in size and the data segment must be located within 2GB of
  the text segment.
! .IP \fBmedany\fR 4
  .IX Item "medany"
  The Medium/Anywhere code model: 64\-bit addresses, programs
  may be linked anywhere in memory, the text and data segments must be less
  than 2GB in size and the data segment must be located within 2GB of the
  text segment.
! .IP \fBembmedany\fR 4
  .IX Item "embmedany"
  The Medium/Anywhere code model for embedded systems:
  64\-bit addresses, the text and data segments must be less than 2GB in
  size, both starting anywhere in memory (determined at link time).  The
  global register \f(CW%g4\fR points to the base of the data segment.  Programs
! are statically linked and PIC is not supported.
  .RE
  .RS 4
  .RE
! .IP \fB\-mmemory\-model=\fR\fImem\-model\fR 4
  .IX Item "-mmemory-model=mem-model"
  Set the memory model in force on the processor to one of
  .RS 4
! .IP \fBdefault\fR 4
  .IX Item "default"
  The default memory model for the processor and operating system.
! .IP \fBrmo\fR 4
  .IX Item "rmo"
  Relaxed Memory Order
! .IP \fBpso\fR 4
  .IX Item "pso"
  Partial Store Order
! .IP \fBtso\fR 4
  .IX Item "tso"
  Total Store Order
! .IP \fBsc\fR 4
  .IX Item "sc"
  Sequential Consistency
  .RE
  .RS 4
  .Sp
! These memory models are formally defined in Appendix D of the SPARC\-V9
! architecture manual, as set in the processor\*(Aqs \f(CW\*(C`PSTATE.MM\*(C'\fR field.
  .RE
! .IP \fB\-mstack\-bias\fR 4
  .IX Item "-mstack-bias"
  .PD 0
! .IP \fB\-mno\-stack\-bias\fR 4
  .IX Item "-mno-stack-bias"
  .PD
! With \fB\-mstack\-bias\fR, GCC assumes that the stack pointer, and
  frame pointer if present, are offset by \-2047 which must be added back
  when making stack frame references.  This is the default in 64\-bit mode.
  Otherwise, assume no such offset is present.
*************** Otherwise, assume no such offset is pres
*** 32957,32979 ****
  .PP
  These additional options are available on System V Release 4 for
  compatibility with other compilers on those systems:
! .IP "\fB\-G\fR" 4
  .IX Item "-G"
  Create a shared object.
  It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
! .IP "\fB\-Qy\fR" 4
  .IX Item "-Qy"
  Identify the versions of each tool used by the compiler, in a
  \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
! .IP "\fB\-Qn\fR" 4
  .IX Item "-Qn"
  Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
  the default).
! .IP "\fB\-YP,\fR\fIdirs\fR" 4
  .IX Item "-YP,dirs"
  Search the directories \fIdirs\fR, and no others, for libraries
  specified with \fB\-l\fR.
! .IP "\fB\-Ym,\fR\fIdir\fR" 4
  .IX Item "-Ym,dir"
  Look in the directory \fIdir\fR to find the M4 preprocessor.
  The assembler uses this option.
--- 32892,32914 ----
  .PP
  These additional options are available on System V Release 4 for
  compatibility with other compilers on those systems:
! .IP \fB\-G\fR 4
  .IX Item "-G"
  Create a shared object.
  It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
! .IP \fB\-Qy\fR 4
  .IX Item "-Qy"
  Identify the versions of each tool used by the compiler, in a
  \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
! .IP \fB\-Qn\fR 4
  .IX Item "-Qn"
  Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
  the default).
! .IP \fB\-YP,\fR\fIdirs\fR 4
  .IX Item "-YP,dirs"
  Search the directories \fIdirs\fR, and no others, for libraries
  specified with \fB\-l\fR.
! .IP \fB\-Ym,\fR\fIdir\fR 4
  .IX Item "-Ym,dir"
  Look in the directory \fIdir\fR to find the M4 preprocessor.
  The assembler uses this option.
*************** The assembler uses this option.
*** 32982,33010 ****
  .IX Subsection "V850 Options"
  .PP
  These \fB\-m\fR options are defined for V850 implementations:
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Treat all calls as being far away (near).  If calls are assumed to be
! far away, the compiler always loads the function's address into a
  register, and calls indirect through the pointer.
! .IP "\fB\-mno\-ep\fR" 4
  .IX Item "-mno-ep"
  .PD 0
! .IP "\fB\-mep\fR" 4
  .IX Item "-mep"
  .PD
  Do not optimize (do optimize) basic blocks that use the same index
  pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
  use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
  option is on by default if you optimize.
! .IP "\fB\-mno\-prolog\-function\fR" 4
  .IX Item "-mno-prolog-function"
  .PD 0
! .IP "\fB\-mprolog\-function\fR" 4
  .IX Item "-mprolog-function"
  .PD
  Do not use (do use) external functions to save and restore registers
--- 32917,32945 ----
  .IX Subsection "V850 Options"
  .PP
  These \fB\-m\fR options are defined for V850 implementations:
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Treat all calls as being far away (near).  If calls are assumed to be
! far away, the compiler always loads the function\*(Aqs address into a
  register, and calls indirect through the pointer.
! .IP \fB\-mno\-ep\fR 4
  .IX Item "-mno-ep"
  .PD 0
! .IP \fB\-mep\fR 4
  .IX Item "-mep"
  .PD
  Do not optimize (do optimize) basic blocks that use the same index
  pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
  use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
  option is on by default if you optimize.
! .IP \fB\-mno\-prolog\-function\fR 4
  .IX Item "-mno-prolog-function"
  .PD 0
! .IP \fB\-mprolog\-function\fR 4
  .IX Item "-mprolog-function"
  .PD
  Do not use (do use) external functions to save and restore registers
*************** at the prologue and epilogue of a functi
*** 33012,33064 ****
  are slower, but use less code space if more than one function saves
  the same number of registers.  The \fB\-mprolog\-function\fR option
  is on by default if you optimize.
! .IP "\fB\-mspace\fR" 4
  .IX Item "-mspace"
  Try to make the code as small as possible.  At present, this just turns
  on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
! .IP "\fB\-mtda=\fR\fIn\fR" 4
  .IX Item "-mtda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
  area can hold up to 256 bytes in total (128 bytes for byte references).
! .IP "\fB\-msda=\fR\fIn\fR" 4
  .IX Item "-msda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
  area can hold up to 64 kilobytes.
! .IP "\fB\-mzda=\fR\fIn\fR" 4
  .IX Item "-mzda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the first 32 kilobytes of memory.
! .IP "\fB\-mv850\fR" 4
  .IX Item "-mv850"
  Specify that the target processor is the V850.
! .IP "\fB\-mv850e3v5\fR" 4
  .IX Item "-mv850e3v5"
  Specify that the target processor is the V850E3V5.  The preprocessor
  constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
! .IP "\fB\-mv850e2v4\fR" 4
  .IX Item "-mv850e2v4"
  Specify that the target processor is the V850E3V5.  This is an alias for
  the \fB\-mv850e3v5\fR option.
! .IP "\fB\-mv850e2v3\fR" 4
  .IX Item "-mv850e2v3"
  Specify that the target processor is the V850E2V3.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
! .IP "\fB\-mv850e2\fR" 4
  .IX Item "-mv850e2"
  Specify that the target processor is the V850E2.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
! .IP "\fB\-mv850e1\fR" 4
  .IX Item "-mv850e1"
  Specify that the target processor is the V850E1.  The preprocessor
  constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
  this option is used.
! .IP "\fB\-mv850es\fR" 4
  .IX Item "-mv850es"
  Specify that the target processor is the V850ES.  This is an alias for
  the \fB\-mv850e1\fR option.
! .IP "\fB\-mv850e\fR" 4
  .IX Item "-mv850e"
  Specify that the target processor is the V850E.  The preprocessor
  constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
--- 32947,32999 ----
  are slower, but use less code space if more than one function saves
  the same number of registers.  The \fB\-mprolog\-function\fR option
  is on by default if you optimize.
! .IP \fB\-mspace\fR 4
  .IX Item "-mspace"
  Try to make the code as small as possible.  At present, this just turns
  on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
! .IP \fB\-mtda=\fR\fIn\fR 4
  .IX Item "-mtda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
  area can hold up to 256 bytes in total (128 bytes for byte references).
! .IP \fB\-msda=\fR\fIn\fR 4
  .IX Item "-msda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
  area can hold up to 64 kilobytes.
! .IP \fB\-mzda=\fR\fIn\fR 4
  .IX Item "-mzda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the first 32 kilobytes of memory.
! .IP \fB\-mv850\fR 4
  .IX Item "-mv850"
  Specify that the target processor is the V850.
! .IP \fB\-mv850e3v5\fR 4
  .IX Item "-mv850e3v5"
  Specify that the target processor is the V850E3V5.  The preprocessor
  constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
! .IP \fB\-mv850e2v4\fR 4
  .IX Item "-mv850e2v4"
  Specify that the target processor is the V850E3V5.  This is an alias for
  the \fB\-mv850e3v5\fR option.
! .IP \fB\-mv850e2v3\fR 4
  .IX Item "-mv850e2v3"
  Specify that the target processor is the V850E2V3.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
! .IP \fB\-mv850e2\fR 4
  .IX Item "-mv850e2"
  Specify that the target processor is the V850E2.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
! .IP \fB\-mv850e1\fR 4
  .IX Item "-mv850e1"
  Specify that the target processor is the V850E1.  The preprocessor
  constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
  this option is used.
! .IP \fB\-mv850es\fR 4
  .IX Item "-mv850es"
  Specify that the target processor is the V850ES.  This is an alias for
  the \fB\-mv850e1\fR option.
! .IP \fB\-mv850e\fR 4
  .IX Item "-mv850e"
  Specify that the target processor is the V850E.  The preprocessor
  constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
*************** relevant \fB_\|_v850*_\|_\fR preprocesso
*** 33070,33178 ****
  .Sp
  The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
  defined, regardless of which processor variant is the target.
! .IP "\fB\-mdisable\-callt\fR" 4
  .IX Item "-mdisable-callt"
  .PD 0
! .IP "\fB\-mno\-disable\-callt\fR" 4
  .IX Item "-mno-disable-callt"
  .PD
  This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
  v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
  architecture.
  .Sp
! This option is enabled by default when the \s-1RH850 ABI\s0 is
  in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
! \&\s-1GCC ABI\s0 is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
  then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  .PD 0
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
  .PD
! Pass on (or do not pass on) the \fB\-mrelax\fR command-line option
  to the assembler.
! .IP "\fB\-mlong\-jumps\fR" 4
  .IX Item "-mlong-jumps"
  .PD 0
! .IP "\fB\-mno\-long\-jumps\fR" 4
  .IX Item "-mno-long-jumps"
  .PD
! Disable (or re-enable) the generation of PC-relative jump instructions.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Disable (or re-enable) the generation of hardware floating point
  instructions.  This option is only significant when the target
  architecture is \fBV850E2V3\fR or higher.  If hardware floating point
  instructions are being generated then the C preprocessor symbol
  \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
  \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
! .IP "\fB\-mloop\fR" 4
  .IX Item "-mloop"
! Enables the use of the e3v5 \s-1LOOP\s0 instruction.  The use of this
  instruction is not enabled by default when the e3v5 architecture is
  selected because its use is still experimental.
! .IP "\fB\-mrh850\-abi\fR" 4
  .IX Item "-mrh850-abi"
  .PD 0
! .IP "\fB\-mghs\fR" 4
  .IX Item "-mghs"
  .PD
! Enables support for the \s-1RH850\s0 version of the V850 \s-1ABI.\s0  This is the
! default.  With this version of the \s-1ABI\s0 the following rules apply:
  .RS 4
! .IP "*" 4
  Integer sized structures and unions are returned via a memory pointer
  rather than a register.
! .IP "*" 4
  Large structures and unions (more than 8 bytes in size) are passed by
  value.
! .IP "*" 4
  Functions are aligned to 16\-bit boundaries.
! .IP "*" 4
! The \fB\-m8byte\-align\fR command-line option is supported.
! .IP "*" 4
! The \fB\-mdisable\-callt\fR command-line option is enabled by
! default.  The \fB\-mno\-disable\-callt\fR command-line option is not
  supported.
  .RE
  .RS 4
  .Sp
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP "\fB\-mgcc\-abi\fR" 4
  .IX Item "-mgcc-abi"
! Enables support for the old \s-1GCC\s0 version of the V850 \s-1ABI.\s0  With this
! version of the \s-1ABI\s0 the following rules apply:
  .RS 4
! .IP "*" 4
  Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
! .IP "*" 4
  Large structures and unions (more than 8 bytes in size) are passed by
  reference.
! .IP "*" 4
  Functions are aligned to 32\-bit boundaries, unless optimizing for
  size.
! .IP "*" 4
! The \fB\-m8byte\-align\fR command-line option is not supported.
! .IP "*" 4
! The \fB\-mdisable\-callt\fR command-line option is supported but not
  enabled by default.
  .RE
  .RS 4
  .Sp
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP "\fB\-m8byte\-align\fR" 4
  .IX Item "-m8byte-align"
  .PD 0
! .IP "\fB\-mno\-8byte\-align\fR" 4
  .IX Item "-mno-8byte-align"
  .PD
  Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
--- 33005,33113 ----
  .Sp
  The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
  defined, regardless of which processor variant is the target.
! .IP \fB\-mdisable\-callt\fR 4
  .IX Item "-mdisable-callt"
  .PD 0
! .IP \fB\-mno\-disable\-callt\fR 4
  .IX Item "-mno-disable-callt"
  .PD
  This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
  v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
  architecture.
  .Sp
! This option is enabled by default when the RH850 ABI is
  in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
! GCC ABI is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
  then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  .PD 0
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
  .PD
! Pass on (or do not pass on) the \fB\-mrelax\fR command\-line option
  to the assembler.
! .IP \fB\-mlong\-jumps\fR 4
  .IX Item "-mlong-jumps"
  .PD 0
! .IP \fB\-mno\-long\-jumps\fR 4
  .IX Item "-mno-long-jumps"
  .PD
! Disable (or re\-enable) the generation of PC\-relative jump instructions.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Disable (or re\-enable) the generation of hardware floating point
  instructions.  This option is only significant when the target
  architecture is \fBV850E2V3\fR or higher.  If hardware floating point
  instructions are being generated then the C preprocessor symbol
  \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
  \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
! .IP \fB\-mloop\fR 4
  .IX Item "-mloop"
! Enables the use of the e3v5 LOOP instruction.  The use of this
  instruction is not enabled by default when the e3v5 architecture is
  selected because its use is still experimental.
! .IP \fB\-mrh850\-abi\fR 4
  .IX Item "-mrh850-abi"
  .PD 0
! .IP \fB\-mghs\fR 4
  .IX Item "-mghs"
  .PD
! Enables support for the RH850 version of the V850 ABI.  This is the
! default.  With this version of the ABI the following rules apply:
  .RS 4
! .IP * 4
  Integer sized structures and unions are returned via a memory pointer
  rather than a register.
! .IP * 4
  Large structures and unions (more than 8 bytes in size) are passed by
  value.
! .IP * 4
  Functions are aligned to 16\-bit boundaries.
! .IP * 4
! The \fB\-m8byte\-align\fR command\-line option is supported.
! .IP * 4
! The \fB\-mdisable\-callt\fR command\-line option is enabled by
! default.  The \fB\-mno\-disable\-callt\fR command\-line option is not
  supported.
  .RE
  .RS 4
  .Sp
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP \fB\-mgcc\-abi\fR 4
  .IX Item "-mgcc-abi"
! Enables support for the old GCC version of the V850 ABI.  With this
! version of the ABI the following rules apply:
  .RS 4
! .IP * 4
  Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
! .IP * 4
  Large structures and unions (more than 8 bytes in size) are passed by
  reference.
! .IP * 4
  Functions are aligned to 32\-bit boundaries, unless optimizing for
  size.
! .IP * 4
! The \fB\-m8byte\-align\fR command\-line option is not supported.
! .IP * 4
! The \fB\-mdisable\-callt\fR command\-line option is supported but not
  enabled by default.
  .RE
  .RS 4
  .Sp
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP \fB\-m8byte\-align\fR 4
  .IX Item "-m8byte-align"
  .PD 0
! .IP \fB\-mno\-8byte\-align\fR 4
  .IX Item "-mno-8byte-align"
  .PD
  Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
*************** aligned on 8\-byte boundaries.  The defa
*** 33180,33258 ****
  alignment of all objects to at most 4\-bytes.  When
  \&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
! .IP "\fB\-mbig\-switch\fR" 4
  .IX Item "-mbig-switch"
  Generate code suitable for big switch tables.  Use this option only if
  the assembler/linker complain about out of range branches within a switch
  table.
! .IP "\fB\-mapp\-regs\fR" 4
  .IX Item "-mapp-regs"
  This option causes r2 and r5 to be used in the code generated by
  the compiler.  This setting is the default.
! .IP "\fB\-mno\-app\-regs\fR" 4
  .IX Item "-mno-app-regs"
  This option causes r2 and r5 to be treated as fixed registers.
  .PP
! \fI\s-1VAX\s0 Options\fR
  .IX Subsection "VAX Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1VAX:\s0
! .IP "\fB\-munix\fR" 4
  .IX Item "-munix"
  Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
! that the Unix assembler for the \s-1VAX\s0 cannot handle across long
  ranges.
! .IP "\fB\-mgnu\fR" 4
  .IX Item "-mgnu"
  Do output those jump instructions, on the assumption that the
! \&\s-1GNU\s0 assembler is being used.
! .IP "\fB\-mg\fR" 4
  .IX Item "-mg"
! Output code for G\-format floating-point numbers instead of D\-format.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
  .PD 0
! .IP "\fB\-mno\-lra\fR" 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is still experimental for the \s-1VAX,\s0
  so by default the compiler uses standard reload.
  .PP
  \fIVisium Options\fR
  .IX Subsection "Visium Options"
! .IP "\fB\-mdebug\fR" 4
  .IX Item "-mdebug"
! A program which performs file I/O and is destined to run on an \s-1MCM\s0 target
  should be linked with this option.  It causes the libraries libc.a and
  libdebug.a to be linked.  The program should be run on the target under
! the control of the \s-1GDB\s0 remote debugging stub.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  A program which performs file I/O and is destined to run on the simulator
  should be linked with option.  This causes libraries libc.a and libsim.a to
  be linked.
! .IP "\fB\-mfpu\fR" 4
  .IX Item "-mfpu"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Generate code containing floating-point instructions.  This is the
  default.
! .IP "\fB\-mno\-fpu\fR" 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Generate code containing library calls for floating-point.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
  this to work.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
--- 33115,33193 ----
  alignment of all objects to at most 4\-bytes.  When
  \&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
! .IP \fB\-mbig\-switch\fR 4
  .IX Item "-mbig-switch"
  Generate code suitable for big switch tables.  Use this option only if
  the assembler/linker complain about out of range branches within a switch
  table.
! .IP \fB\-mapp\-regs\fR 4
  .IX Item "-mapp-regs"
  This option causes r2 and r5 to be used in the code generated by
  the compiler.  This setting is the default.
! .IP \fB\-mno\-app\-regs\fR 4
  .IX Item "-mno-app-regs"
  This option causes r2 and r5 to be treated as fixed registers.
  .PP
! \fIVAX Options\fR
  .IX Subsection "VAX Options"
  .PP
! These \fB\-m\fR options are defined for the VAX:
! .IP \fB\-munix\fR 4
  .IX Item "-munix"
  Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
! that the Unix assembler for the VAX cannot handle across long
  ranges.
! .IP \fB\-mgnu\fR 4
  .IX Item "-mgnu"
  Do output those jump instructions, on the assumption that the
! GNU assembler is being used.
! .IP \fB\-mg\fR 4
  .IX Item "-mg"
! Output code for G\-format floating\-point numbers instead of D\-format.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
  .PD 0
! .IP \fB\-mno\-lra\fR 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is still experimental for the VAX,
  so by default the compiler uses standard reload.
  .PP
  \fIVisium Options\fR
  .IX Subsection "Visium Options"
! .IP \fB\-mdebug\fR 4
  .IX Item "-mdebug"
! A program which performs file I/O and is destined to run on an MCM target
  should be linked with this option.  It causes the libraries libc.a and
  libdebug.a to be linked.  The program should be run on the target under
! the control of the GDB remote debugging stub.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  A program which performs file I/O and is destined to run on the simulator
  should be linked with option.  This causes libraries libc.a and libsim.a to
  be linked.
! .IP \fB\-mfpu\fR 4
  .IX Item "-mfpu"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Generate code containing floating\-point instructions.  This is the
  default.
! .IP \fB\-mno\-fpu\fR 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Generate code containing library calls for floating\-point.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with GCC, with \fB\-msoft\-float\fR in order for
  this to work.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
*************** for machine type \fIcpu_type\fR.  Suppor
*** 33260,33302 ****
  .Sp
  \&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
  .Sp
! By default (unless configured otherwise), \s-1GCC\s0 generates code for the \s-1GR5\s0
  variant of the Visium architecture.
  .Sp
! With \fB\-mcpu=gr6\fR, \s-1GCC\s0 generates code for the \s-1GR6\s0 variant of the Visium
! architecture.  The only difference from \s-1GR5\s0 code is that the compiler will
  generate block move instructions.
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
  but do not set the instruction set or register set that the option
  \&\fB\-mcpu=\fR\fIcpu_type\fR would.
! .IP "\fB\-msv\-mode\fR" 4
  .IX Item "-msv-mode"
  Generate code for the supervisor mode, where there are no restrictions on
  the access to general registers.  This is the default.
! .IP "\fB\-muser\-mode\fR" 4
  .IX Item "-muser-mode"
  Generate code for the user mode, where the access to some general registers
! is forbidden: on the \s-1GR5,\s0 registers r24 to r31 cannot be accessed in this
! mode; on the \s-1GR6,\s0 only registers r29 to r31 are affected.
  .PP
! \fI\s-1VMS\s0 Options\fR
  .IX Subsection "VMS Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1VMS\s0 implementations:
! .IP "\fB\-mvms\-return\-codes\fR" 4
  .IX Item "-mvms-return-codes"
! Return \s-1VMS\s0 condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX-style
  condition (e.g. error) codes.
! .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
  .IX Item "-mdebug-main=prefix"
  Flag the first routine whose name starts with \fIprefix\fR as the main
  routine for the debugger.
! .IP "\fB\-mmalloc64\fR" 4
  .IX Item "-mmalloc64"
  Default to 64\-bit memory allocation routines.
! .IP "\fB\-mpointer\-size=\fR\fIsize\fR" 4
  .IX Item "-mpointer-size=size"
  Set the default size of pointers. Possible options for \fIsize\fR are
  \&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
--- 33195,33237 ----
  .Sp
  \&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
  .Sp
! By default (unless configured otherwise), GCC generates code for the GR5
  variant of the Visium architecture.
  .Sp
! With \fB\-mcpu=gr6\fR, GCC generates code for the GR6 variant of the Visium
! architecture.  The only difference from GR5 code is that the compiler will
  generate block move instructions.
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
  but do not set the instruction set or register set that the option
  \&\fB\-mcpu=\fR\fIcpu_type\fR would.
! .IP \fB\-msv\-mode\fR 4
  .IX Item "-msv-mode"
  Generate code for the supervisor mode, where there are no restrictions on
  the access to general registers.  This is the default.
! .IP \fB\-muser\-mode\fR 4
  .IX Item "-muser-mode"
  Generate code for the user mode, where the access to some general registers
! is forbidden: on the GR5, registers r24 to r31 cannot be accessed in this
! mode; on the GR6, only registers r29 to r31 are affected.
  .PP
! \fIVMS Options\fR
  .IX Subsection "VMS Options"
  .PP
! These \fB\-m\fR options are defined for the VMS implementations:
! .IP \fB\-mvms\-return\-codes\fR 4
  .IX Item "-mvms-return-codes"
! Return VMS condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX\-style
  condition (e.g. error) codes.
! .IP \fB\-mdebug\-main=\fR\fIprefix\fR 4
  .IX Item "-mdebug-main=prefix"
  Flag the first routine whose name starts with \fIprefix\fR as the main
  routine for the debugger.
! .IP \fB\-mmalloc64\fR 4
  .IX Item "-mmalloc64"
  Default to 64\-bit memory allocation routines.
! .IP \fB\-mpointer\-size=\fR\fIsize\fR 4
  .IX Item "-mpointer-size=size"
  Set the default size of pointers. Possible options for \fIsize\fR are
  \&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
*************** The later option disables \f(CW\*(C`prag
*** 33309,33344 ****
  The options in this section are defined for all VxWorks targets.
  Options specific to the target hardware are listed with the other
  options for that target.
! .IP "\fB\-mrtp\fR" 4
  .IX Item "-mrtp"
! \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
  (RTPs).  This option switches from the former to the latter.  It also
  defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
! .IP "\fB\-msmp\fR" 4
  .IX Item "-msmp"
! Select \s-1SMP\s0 runtimes for linking.  Not available on architectures other
  than PowerPC, nor on VxWorks version 7 or later, in which the selection
  is part of the VxWorks build configuration and the library paths are the
  same for either choice.
! .IP "\fB\-non\-static\fR" 4
  .IX Item "-non-static"
! Link an \s-1RTP\s0 executable against shared libraries rather than static
  libraries.  The options \fB\-static\fR and \fB\-shared\fR can
  also be used for RTPs; \fB\-static\fR
  is the default.
! .IP "\fB\-Bstatic\fR" 4
  .IX Item "-Bstatic"
  .PD 0
! .IP "\fB\-Bdynamic\fR" 4
  .IX Item "-Bdynamic"
  .PD
  These options are passed down to the linker.  They are defined for
  compatibility with Diab.
! .IP "\fB\-Xbind\-lazy\fR" 4
  .IX Item "-Xbind-lazy"
  Enable lazy binding of function calls.  This option is equivalent to
  \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
! .IP "\fB\-Xbind\-now\fR" 4
  .IX Item "-Xbind-now"
  Disable lazy binding of function calls.  This option is the default and
  is defined for compatibility with Diab.
--- 33244,33279 ----
  The options in this section are defined for all VxWorks targets.
  Options specific to the target hardware are listed with the other
  options for that target.
! .IP \fB\-mrtp\fR 4
  .IX Item "-mrtp"
! GCC can generate code for both VxWorks kernels and real time processes
  (RTPs).  This option switches from the former to the latter.  It also
  defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
! .IP \fB\-msmp\fR 4
  .IX Item "-msmp"
! Select SMP runtimes for linking.  Not available on architectures other
  than PowerPC, nor on VxWorks version 7 or later, in which the selection
  is part of the VxWorks build configuration and the library paths are the
  same for either choice.
! .IP \fB\-non\-static\fR 4
  .IX Item "-non-static"
! Link an RTP executable against shared libraries rather than static
  libraries.  The options \fB\-static\fR and \fB\-shared\fR can
  also be used for RTPs; \fB\-static\fR
  is the default.
! .IP \fB\-Bstatic\fR 4
  .IX Item "-Bstatic"
  .PD 0
! .IP \fB\-Bdynamic\fR 4
  .IX Item "-Bdynamic"
  .PD
  These options are passed down to the linker.  They are defined for
  compatibility with Diab.
! .IP \fB\-Xbind\-lazy\fR 4
  .IX Item "-Xbind-lazy"
  Enable lazy binding of function calls.  This option is equivalent to
  \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
! .IP \fB\-Xbind\-now\fR 4
  .IX Item "-Xbind-now"
  Disable lazy binding of function calls.  This option is the default and
  is defined for compatibility with Diab.
*************** is defined for compatibility with Diab.
*** 33347,33990 ****
  .IX Subsection "x86 Options"
  .PP
  These \fB\-m\fR options are defined for the x86 family of computers.
! .IP "\fB\-march=\fR\fIcpu-type\fR" 4
  .IX Item "-march=cpu-type"
! Generate instructions for the machine type \fIcpu-type\fR.  In contrast to
! \&\fB\-mtune=\fR\fIcpu-type\fR, which merely tunes the generated code 
! for the specified \fIcpu-type\fR, \fB\-march=\fR\fIcpu-type\fR allows \s-1GCC\s0
  to generate code that may not run at all on processors other than the one
! indicated.  Specifying \fB\-march=\fR\fIcpu-type\fR implies 
! \&\fB\-mtune=\fR\fIcpu-type\fR, except where noted otherwise.
  .Sp
! The choices for \fIcpu-type\fR are:
  .RS 4
! .IP "\fBnative\fR" 4
  .IX Item "native"
! This selects the \s-1CPU\s0 to generate code for at compilation time by determining
  the processor type of the compiling machine.  Using \fB\-march=native\fR
  enables all instruction subsets supported by the local machine (hence
  the result might not run on different machines).  Using \fB\-mtune=native\fR
  produces code optimized for the local machine under the constraints
  of the selected instruction set.
! .IP "\fBx86\-64\fR" 4
  .IX Item "x86-64"
! A generic \s-1CPU\s0 with 64\-bit extensions.
! .IP "\fBx86\-64\-v2\fR" 4
  .IX Item "x86-64-v2"
  .PD 0
! .IP "\fBx86\-64\-v3\fR" 4
  .IX Item "x86-64-v3"
! .IP "\fBx86\-64\-v4\fR" 4
  .IX Item "x86-64-v4"
  .PD
! These choices for \fIcpu-type\fR select the corresponding
! micro-architecture level from the x86\-64 psABI.  On ABIs other than
! the x86\-64 psABI they select the same \s-1CPU\s0 features as the x86\-64 psABI
! documents for the particular micro-architecture level.
  .Sp
! Since these \fIcpu-type\fR values do not have a corresponding
  \&\fB\-mtune\fR setting, using \fB\-march\fR with these values enables
  generic tuning.  Specific tuning can be enabled using the
! \&\fB\-mtune=\fR\fIother-cpu-type\fR option with an appropriate
! \&\fIother-cpu-type\fR value.
! .IP "\fBi386\fR" 4
  .IX Item "i386"
! Original Intel i386 \s-1CPU.\s0
! .IP "\fBi486\fR" 4
  .IX Item "i486"
! Intel i486 \s-1CPU.\s0  (No scheduling is implemented for this chip.)
! .IP "\fBi586\fR" 4
  .IX Item "i586"
  .PD 0
! .IP "\fBpentium\fR" 4
  .IX Item "pentium"
  .PD
! Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
! .IP "\fBlakemont\fR" 4
  .IX Item "lakemont"
! Intel Lakemont \s-1MCU,\s0 based on Intel Pentium \s-1CPU.\s0
! .IP "\fBpentium-mmx\fR" 4
  .IX Item "pentium-mmx"
! Intel Pentium \s-1MMX CPU,\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
! .IP "\fBpentiumpro\fR" 4
  .IX Item "pentiumpro"
! Intel Pentium Pro \s-1CPU.\s0
! .IP "\fBi686\fR" 4
  .IX Item "i686"
  When used with \fB\-march\fR, the Pentium Pro
  instruction set is used, so the code runs on all i686 family chips.
  When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
! .IP "\fBpentium2\fR" 4
  .IX Item "pentium2"
! Intel Pentium \s-1II CPU,\s0 based on Pentium Pro core with \s-1MMX\s0 and \s-1FXSR\s0 instruction
  set support.
! .IP "\fBpentium3\fR" 4
  .IX Item "pentium3"
  .PD 0
! .IP "\fBpentium3m\fR" 4
  .IX Item "pentium3m"
  .PD
! Intel Pentium \s-1III CPU,\s0 based on Pentium Pro core with \s-1MMX, FXSR\s0 and \s-1SSE\s0
  instruction set support.
! .IP "\fBpentium-m\fR" 4
  .IX Item "pentium-m"
! Intel Pentium M; low-power version of Intel Pentium \s-1III CPU\s0
! with \s-1MMX, SSE, SSE2\s0 and \s-1FXSR\s0 instruction set support.  Used by Centrino
  notebooks.
! .IP "\fBpentium4\fR" 4
  .IX Item "pentium4"
  .PD 0
! .IP "\fBpentium4m\fR" 4
  .IX Item "pentium4m"
  .PD
! Intel Pentium 4 \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBprescott\fR" 4
  .IX Item "prescott"
! Improved version of Intel Pentium 4 \s-1CPU\s0 with \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1FXSR\s0
  instruction set support.
! .IP "\fBnocona\fR" 4
  .IX Item "nocona"
! Improved version of Intel Pentium 4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
! SSE2, SSE3\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBcore2\fR" 4
  .IX Item "core2"
! Intel Core 2 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, CX16,
! SAHF\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBnehalem\fR" 4
  .IX Item "nehalem"
  .PD 0
! .IP "\fBcorei7\fR" 4
  .IX Item "corei7"
  .PD
! Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBwestmere\fR" 4
  .IX Item "westmere"
! Intel Westmere \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support.
! .IP "\fBsandybridge\fR" 4
  .IX Item "sandybridge"
  .PD 0
! .IP "\fBcorei7\-avx\fR" 4
  .IX Item "corei7-avx"
  .PD
! Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set
  support.
! .IP "\fBivybridge\fR" 4
  .IX Item "ivybridge"
  .PD 0
! .IP "\fBcore-avx-i\fR" 4
  .IX Item "core-avx-i"
  .PD
! Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0
  and F16C instruction set support.
! .IP "\fBhaswell\fR" 4
  .IX Item "haswell"
  .PD 0
! .IP "\fBcore\-avx2\fR" 4
  .IX Item "core-avx2"
  .PD
! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support.
! .IP "\fBbroadwell\fR" 4
  .IX Item "broadwell"
! Intel Broadwell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX\s0 and \s-1PREFETCHW\s0
  instruction set support.
! .IP "\fBskylake\fR" 4
  .IX Item "skylake"
! Intel Skylake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
! CLFLUSHOPT, XSAVEC, XSAVES\s0 and \s-1SGX\s0 instruction set support.
! .IP "\fBskylake\-avx512\fR" 4
  .IX Item "skylake-avx512"
! Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
! AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
! .IP "\fBcascadelake\fR" 4
  .IX Item "cascadelake"
! Intel Cascade Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
! .IP "\fBcannonlake\fR" 4
  .IX Item "cannonlake"
! Intel Cannon Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
! AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set
  support.
! .IP "\fBcooperlake\fR" 4
  .IX Item "cooperlake"
! Intel Cooper Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support.
! .IP "\fBicelake-client\fR" 4
  .IX Item "icelake-client"
! Intel Ice Lake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
! .IP "\fBicelake-server\fR" 4
  .IX Item "icelake-server"
! Intel Ice Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0
  instruction set support.
! .IP "\fBtigerlake\fR" 4
  .IX Item "tigerlake"
! Intel Tiger Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
! AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support.
! .IP "\fBrocketlake\fR" 4
  .IX Item "rocketlake"
! Intel Rocket Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
! VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
! .IP "\fBalderlake\fR" 4
  .IX Item "alderlake"
  .PD 0
! .IP "\fBraptorlake\fR" 4
  .IX Item "raptorlake"
! .IP "\fBmeteorlake\fR" 4
  .IX Item "meteorlake"
! .IP "\fBgracemont\fR" 4
  .IX Item "gracemont"
  .PD
! Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont \s-1CPU\s0 with 64\-bit extensions,
! \&\s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
! PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0
! GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI,
! BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
! WIDEKL\s0 and AVX-VNNI instruction set support.
! .IP "\fBarrowlake\fR" 4
  .IX Item "arrowlake"
! Intel Arrow Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
! MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT\s0 and \s-1CMPCCXADD\s0 instruction set
! support.
! .IP "\fBarrowlake-s\fR" 4
  .IX Item "arrowlake-s"
  .PD 0
! .IP "\fBlunarlake\fR" 4
  .IX Item "lunarlake"
  .PD
! Intel Arrow Lake S/Lunar Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
! XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB,
! MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3\s0 and \s-1SM4\s0 instruction set support.
! .IP "\fBpantherlake\fR" 4
  .IX Item "pantherlake"
! Intel Panther Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
! MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4\s0 and \s-1PREFETCHI\s0 instruction set support.
! .IP "\fBsapphirerapids\fR" 4
  .IX Item "sapphirerapids"
  .PD 0
! .IP "\fBemeraldrapids\fR" 4
  .IX Item "emeraldrapids"
  .PD
! Intel Sapphire Rapids/Emerald Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
  AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
  WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
! SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0
! and \s-1AVX512BF16\s0 instruction set support.
! .IP "\fBgraniterapids\fR" 4
  .IX Item "graniterapids"
! Intel Granite Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16, AVX512BF16, AMX\-FP16\s0
! and \s-1PREFETCHI\s0 instruction set support.
! .IP "\fBgraniterapids-d\fR" 4
  .IX Item "graniterapids-d"
! Intel Granite Rapids D \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512FP16, AVX512BF16, AMX\-FP16,
! PREFETCHI\s0 and AMX-COMPLEX instruction set support.
! .IP "\fBbonnell\fR" 4
  .IX Item "bonnell"
  .PD 0
! .IP "\fBatom\fR" 4
  .IX Item "atom"
  .PD
! Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
! .IP "\fBsilvermont\fR" 4
  .IX Item "silvermont"
  .PD 0
! .IP "\fBslm\fR" 4
  .IX Item "slm"
  .PD
! Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0
  instruction set support.
! .IP "\fBgoldmont\fR" 4
  .IX Item "goldmont"
! Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction
  set support.
! .IP "\fBgoldmont-plus\fR" 4
  .IX Item "goldmont-plus"
! Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
  SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
! RDPID\s0 and \s-1SGX\s0 instruction set support.
! .IP "\fBtremont\fR" 4
  .IX Item "tremont"
! Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
  RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
! SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set
  support.
! .IP "\fBsierraforest\fR" 4
  .IX Item "sierraforest"
! Intel Sierra Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
  support.
! .IP "\fBgrandridge\fR" 4
  .IX Item "grandridge"
! Intel Grand Ridge \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
  support.
! .IP "\fBclearwaterforest\fR" 4
  .IX Item "clearwaterforest"
! Intel Clearwater Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
! XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16,
! SHA512, SM3, SM4, USER_MSR\s0 and \s-1PREFETCHI\s0 instruction set support.
! .IP "\fBknl\fR" 4
  .IX Item "knl"
! Intel Knights Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support.
! .IP "\fBknm\fR" 4
  .IX Item "knm"
! Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW,
! AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
! .IP "\fBk6\fR" 4
  .IX Item "k6"
! \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support.
! .IP "\fBk6\-2\fR" 4
  .IX Item "k6-2"
  .PD 0
! .IP "\fBk6\-3\fR" 4
  .IX Item "k6-3"
  .PD
! Improved versions of \s-1AMD K6 CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
! .IP "\fBathlon\fR" 4
  .IX Item "athlon"
  .PD 0
! .IP "\fBathlon-tbird\fR" 4
  .IX Item "athlon-tbird"
  .PD
! \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX,\s0 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
  support.
! .IP "\fBathlon\-4\fR" 4
  .IX Item "athlon-4"
  .PD 0
! .IP "\fBathlon-xp\fR" 4
  .IX Item "athlon-xp"
! .IP "\fBathlon-mp\fR" 4
  .IX Item "athlon-mp"
  .PD
! Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX,\s0 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
  instruction set support.
! .IP "\fBk8\fR" 4
  .IX Item "k8"
  .PD 0
! .IP "\fBopteron\fR" 4
  .IX Item "opteron"
! .IP "\fBathlon64\fR" 4
  .IX Item "athlon64"
! .IP "\fBathlon-fx\fR" 4
  .IX Item "athlon-fx"
  .PD
! Processors based on the \s-1AMD K8\s0 core with x86\-64 instruction set support,
! including the \s-1AMD\s0 Opteron, Athlon 64, and Athlon 64 \s-1FX\s0 processors.
! (This supersets \s-1MMX, SSE, SSE2,\s0 3DNow!, enhanced 3DNow! and 64\-bit
  instruction set extensions.)
! .IP "\fBk8\-sse3\fR" 4
  .IX Item "k8-sse3"
  .PD 0
! .IP "\fBopteron\-sse3\fR" 4
  .IX Item "opteron-sse3"
! .IP "\fBathlon64\-sse3\fR" 4
  .IX Item "athlon64-sse3"
  .PD
! Improved versions of \s-1AMD K8\s0 cores with \s-1SSE3\s0 instruction set support.
! .IP "\fBamdfam10\fR" 4
  .IX Item "amdfam10"
  .PD 0
! .IP "\fBbarcelona\fR" 4
  .IX Item "barcelona"
  .PD
! CPUs based on \s-1AMD\s0 Family 10h cores with x86\-64 instruction set support.  (This
! supersets \s-1MMX, SSE, SSE2, SSE3, SSE4A,\s0 3DNow!, enhanced 3DNow!, \s-1ABM\s0 and 64\-bit
  instruction set extensions.)
! .IP "\fBbdver1\fR" 4
  .IX Item "bdver1"
! CPUs based on \s-1AMD\s0 Family 15h cores with x86\-64 instruction set support.  (This
! supersets \s-1FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
! SSSE3, SSE4.1, SSE4.2, ABM\s0 and 64\-bit instruction set extensions.)
! .IP "\fBbdver2\fR" 4
  .IX Item "bdver2"
! \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX,
! SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM\s0 and 64\-bit instruction set 
  extensions.)
! .IP "\fBbdver3\fR" 4
  .IX Item "bdver3"
! \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES,\s0 
! \&\s-1PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM\s0 and
  64\-bit instruction set extensions.)
! .IP "\fBbdver4\fR" 4
  .IX Item "bdver4"
! \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP,\s0 
! \&\s-1AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
! SSE4.2, ABM\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver1\fR" 4
  .IX Item "znver1"
! \&\s-1AMD\s0 Family 17h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
  SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
! SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,\s0 and 64\-bit
  instruction set extensions.)
! .IP "\fBznver2\fR" 4
  .IX Item "znver2"
! \&\s-1AMD\s0 Family 17h core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD,\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver3\fR" 4
  .IX Item "znver3"
! \&\s-1AMD\s0 Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD, PKU, VPCLMULQDQ, VAES,\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver4\fR" 4
  .IX Item "znver4"
! \&\s-1AMD\s0 Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
! AVX512BITALG, AVX512VPOPCNTDQ, GFNI\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver5\fR" 4
  .IX Item "znver5"
! \&\s-1AMD\s0 Family 1ah core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
! AVX512VP2INTERSECT, PREFETCHI\s0 and 64\-bit instruction set extensions.)
! .IP "\fBbtver1\fR" 4
  .IX Item "btver1"
! CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
! supersets \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM\s0 and 64\-bit
  instruction set extensions.)
! .IP "\fBbtver2\fR" 4
  .IX Item "btver2"
! CPUs based on \s-1AMD\s0 Family 16h cores with x86\-64 instruction set support. This
! includes \s-1MOVBE, F16C, BMI, AVX, PCLMUL, AES, SSE4.2, SSE4.1, CX16, ABM,
! SSE4A, SSSE3, SSE3, SSE2, SSE, MMX\s0 and 64\-bit instruction set extensions.
! .IP "\fBwinchip\-c6\fR" 4
  .IX Item "winchip-c6"
! \&\s-1IDT\s0 WinChip C6 \s-1CPU,\s0 dealt in same way as i486 with additional \s-1MMX\s0 instruction
  set support.
! .IP "\fBwinchip2\fR" 4
  .IX Item "winchip2"
! \&\s-1IDT\s0 WinChip 2 \s-1CPU,\s0 dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
  instruction set support.
! .IP "\fBc3\fR" 4
  .IX Item "c3"
! \&\s-1VIA C3 CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBc3\-2\fR" 4
  .IX Item "c3-2"
! \&\s-1VIA C3\-2\s0 (Nehemiah/C5XL) \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBc7\fR" 4
  .IX Item "c7"
! \&\s-1VIA C7\s0 (Esther) \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBsamuel\-2\fR" 4
  .IX Item "samuel-2"
! \&\s-1VIA\s0 Eden Samuel 2 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnehemiah\fR" 4
  .IX Item "nehemiah"
! \&\s-1VIA\s0 Eden Nehemiah \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBesther\fR" 4
  .IX Item "esther"
! \&\s-1VIA\s0 Eden Esther \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBeden\-x2\fR" 4
  .IX Item "eden-x2"
! \&\s-1VIA\s0 Eden X2 \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBeden\-x4\fR" 4
  .IX Item "eden-x4"
! \&\s-1VIA\s0 Eden X4 \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
! AVX\s0 and \s-1AVX2\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\fR" 4
  .IX Item "nano"
! Generic \s-1VIA\s0 Nano \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-1000\fR" 4
  .IX Item "nano-1000"
! \&\s-1VIA\s0 Nano 1xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-2000\fR" 4
  .IX Item "nano-2000"
! \&\s-1VIA\s0 Nano 2xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-3000\fR" 4
  .IX Item "nano-3000"
! \&\s-1VIA\s0 Nano 3xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-x2\fR" 4
  .IX Item "nano-x2"
! \&\s-1VIA\s0 Nano Dual Core \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-x4\fR" 4
  .IX Item "nano-x4"
! \&\s-1VIA\s0 Nano Quad Core \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBlujiazui\fR" 4
  .IX Item "lujiazui"
! \&\s-1ZHAOXIN\s0 lujiazui \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED\s0 instruction set support.  While the CPUs
! do support \s-1AVX\s0 and F16C, these aren't enabled by \f(CW\*(C`\-march=lujiazui\*(C'\fR
  for performance reasons.
! .IP "\fByongfeng\fR" 4
  .IX Item "yongfeng"
! \&\s-1ZHAOXIN\s0 yongfeng \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED, AVX2, FMA, SHA, LZCNT\s0
  instruction set support.
! .IP "\fBgeode\fR" 4
  .IX Item "geode"
! \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu-type\fR everything applicable about the generated code, except
! for the \s-1ABI\s0 and the set of available instructions.  
! While picking a specific \fIcpu-type\fR schedules things appropriately
  for that particular chip, the compiler does not generate any code that
  cannot run on the default machine type unless you use a
! \&\fB\-march=\fR\fIcpu-type\fR option.
! For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
  then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
  but still runs on i686 machines.
  .Sp
! The choices for \fIcpu-type\fR are the same as for \fB\-march\fR.
! In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu-type\fR:
  .RS 4
! .IP "\fBgeneric\fR" 4
  .IX Item "generic"
! Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
! If you know the \s-1CPU\s0 on which your code will run, then you should use
  the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
! \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
  of your application will have, then you should use this option.
  .Sp
  As new processors are deployed in the marketplace, the behavior of this
  option will change.  Therefore, if you upgrade to a newer version of
! \&\s-1GCC,\s0 code generation controlled by this option will change to reflect
  the processors
! that are most common at the time that version of \s-1GCC\s0 is released.
  .Sp
  There is no \fB\-march=generic\fR option because \fB\-march\fR
  indicates the instruction set the compiler can use, and there is no
  generic instruction set applicable to all processors.  In contrast,
  \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
  processors) for which the code is optimized.
! .IP "\fBintel\fR" 4
  .IX Item "intel"
  Produce code optimized for the most current Intel processors, which are
! Haswell and Silvermont for this version of \s-1GCC.\s0  If you know the \s-1CPU\s0
  on which your code will run, then you should use the corresponding
  \&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
  But, if you want your application performs better on both Haswell and
--- 33282,33924 ----
  .IX Subsection "x86 Options"
  .PP
  These \fB\-m\fR options are defined for the x86 family of computers.
! .IP \fB\-march=\fR\fIcpu\-type\fR 4
  .IX Item "-march=cpu-type"
! Generate instructions for the machine type \fIcpu\-type\fR.  In contrast to
! \&\fB\-mtune=\fR\fIcpu\-type\fR, which merely tunes the generated code 
! for the specified \fIcpu\-type\fR, \fB\-march=\fR\fIcpu\-type\fR allows GCC
  to generate code that may not run at all on processors other than the one
! indicated.  Specifying \fB\-march=\fR\fIcpu\-type\fR implies 
! \&\fB\-mtune=\fR\fIcpu\-type\fR, except where noted otherwise.
  .Sp
! The choices for \fIcpu\-type\fR are:
  .RS 4
! .IP \fBnative\fR 4
  .IX Item "native"
! This selects the CPU to generate code for at compilation time by determining
  the processor type of the compiling machine.  Using \fB\-march=native\fR
  enables all instruction subsets supported by the local machine (hence
  the result might not run on different machines).  Using \fB\-mtune=native\fR
  produces code optimized for the local machine under the constraints
  of the selected instruction set.
! .IP \fBx86\-64\fR 4
  .IX Item "x86-64"
! A generic CPU with 64\-bit extensions.
! .IP \fBx86\-64\-v2\fR 4
  .IX Item "x86-64-v2"
  .PD 0
! .IP \fBx86\-64\-v3\fR 4
  .IX Item "x86-64-v3"
! .IP \fBx86\-64\-v4\fR 4
  .IX Item "x86-64-v4"
  .PD
! These choices for \fIcpu\-type\fR select the corresponding
! micro\-architecture level from the x86\-64 psABI.  On ABIs other than
! the x86\-64 psABI they select the same CPU features as the x86\-64 psABI
! documents for the particular micro\-architecture level.
  .Sp
! Since these \fIcpu\-type\fR values do not have a corresponding
  \&\fB\-mtune\fR setting, using \fB\-march\fR with these values enables
  generic tuning.  Specific tuning can be enabled using the
! \&\fB\-mtune=\fR\fIother\-cpu\-type\fR option with an appropriate
! \&\fIother\-cpu\-type\fR value.
! .IP \fBi386\fR 4
  .IX Item "i386"
! Original Intel i386 CPU.
! .IP \fBi486\fR 4
  .IX Item "i486"
! Intel i486 CPU.  (No scheduling is implemented for this chip.)
! .IP \fBi586\fR 4
  .IX Item "i586"
  .PD 0
! .IP \fBpentium\fR 4
  .IX Item "pentium"
  .PD
! Intel Pentium CPU with no MMX support.
! .IP \fBlakemont\fR 4
  .IX Item "lakemont"
! Intel Lakemont MCU, based on Intel Pentium CPU.
! .IP \fBpentium\-mmx\fR 4
  .IX Item "pentium-mmx"
! Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
! .IP \fBpentiumpro\fR 4
  .IX Item "pentiumpro"
! Intel Pentium Pro CPU.
! .IP \fBi686\fR 4
  .IX Item "i686"
  When used with \fB\-march\fR, the Pentium Pro
  instruction set is used, so the code runs on all i686 family chips.
  When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
! .IP \fBpentium2\fR 4
  .IX Item "pentium2"
! Intel Pentium II CPU, based on Pentium Pro core with MMX and FXSR instruction
  set support.
! .IP \fBpentium3\fR 4
  .IX Item "pentium3"
  .PD 0
! .IP \fBpentium3m\fR 4
  .IX Item "pentium3m"
  .PD
! Intel Pentium III CPU, based on Pentium Pro core with MMX, FXSR and SSE
  instruction set support.
! .IP \fBpentium\-m\fR 4
  .IX Item "pentium-m"
! Intel Pentium M; low\-power version of Intel Pentium III CPU
! with MMX, SSE, SSE2 and FXSR instruction set support.  Used by Centrino
  notebooks.
! .IP \fBpentium4\fR 4
  .IX Item "pentium4"
  .PD 0
! .IP \fBpentium4m\fR 4
  .IX Item "pentium4m"
  .PD
! Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction set support.
! .IP \fBprescott\fR 4
  .IX Item "prescott"
! Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2, SSE3 and FXSR
  instruction set support.
! .IP \fBnocona\fR 4
  .IX Item "nocona"
! Improved version of Intel Pentium 4 CPU with 64\-bit extensions, MMX, SSE,
! SSE2, SSE3 and FXSR instruction set support.
! .IP \fBcore2\fR 4
  .IX Item "core2"
! Intel Core 2 CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, CX16,
! SAHF and FXSR instruction set support.
! .IP \fBnehalem\fR 4
  .IX Item "nehalem"
  .PD 0
! .IP \fBcorei7\fR 4
  .IX Item "corei7"
  .PD
! Intel Nehalem CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction set support.
! .IP \fBwestmere\fR 4
  .IX Item "westmere"
! Intel Westmere CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and PCLMUL instruction set support.
! .IP \fBsandybridge\fR 4
  .IX Item "sandybridge"
  .PD 0
! .IP \fBcorei7\-avx\fR 4
  .IX Item "corei7-avx"
  .PD
! Intel Sandy Bridge CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set
  support.
! .IP \fBivybridge\fR 4
  .IX Item "ivybridge"
  .PD 0
! .IP \fBcore\-avx\-i\fR 4
  .IX Item "core-avx-i"
  .PD
! Intel Ivy Bridge CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND
  and F16C instruction set support.
! .IP \fBhaswell\fR 4
  .IX Item "haswell"
  .PD 0
! .IP \fBcore\-avx2\fR 4
  .IX Item "core-avx2"
  .PD
! Intel Haswell CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support.
! .IP \fBbroadwell\fR 4
  .IX Item "broadwell"
! Intel Broadwell CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX and PREFETCHW
  instruction set support.
! .IP \fBskylake\fR 4
  .IX Item "skylake"
! Intel Skylake CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
! CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
! .IP \fBskylake\-avx512\fR 4
  .IX Item "skylake-avx512"
! Intel Skylake Server CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
! AVX512DQ and AVX512CD instruction set support.
! .IP \fBcascadelake\fR 4
  .IX Item "cascadelake"
! Intel Cascade Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD and AVX512VNNI instruction set support.
! .IP \fBcannonlake\fR 4
  .IX Item "cannonlake"
! Intel Cannon Lake Server CPU with 64\-bit extensions, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
! AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA instruction set
  support.
! .IP \fBcooperlake\fR 4
  .IX Item "cooperlake"
! Intel Cooper Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD, AVX512VNNI and AVX512BF16 instruction set support.
! .IP \fBicelake\-client\fR 4
  .IX Item "icelake-client"
! Intel Ice Lake Client CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
! .IP \fBicelake\-server\fR 4
  .IX Item "icelake-server"
! Intel Ice Lake Server CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB
  instruction set support.
! .IP \fBtigerlake\fR 4
  .IX Item "tigerlake"
! Intel Tiger Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
! AVX512VP2INTERSECT and KEYLOCKER instruction set support.
! .IP \fBrocketlake\fR 4
  .IX Item "rocketlake"
! Intel Rocket Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
! VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
! .IP \fBalderlake\fR 4
  .IX Item "alderlake"
  .PD 0
! .IP \fBraptorlake\fR 4
  .IX Item "raptorlake"
! .IP \fBmeteorlake\fR 4
  .IX Item "meteorlake"
! .IP \fBgracemont\fR 4
  .IX Item "gracemont"
  .PD
! Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont CPU with 64\-bit extensions,
! MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
! PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,
! GFNI\-SSE, CLWB, MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C,
! FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and
! AVX\-VNNI instruction set support.
! .IP \fBarrowlake\fR 4
  .IX Item "arrowlake"
! Intel Arrow Lake CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
! MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI, UINTR, AVXIFMA,
! AVXVNNIINT8, AVXNECONVERT and CMPCCXADD instruction set support.
! .IP \fBarrowlake\-s\fR 4
  .IX Item "arrowlake-s"
  .PD 0
! .IP \fBlunarlake\fR 4
  .IX Item "lunarlake"
  .PD
! Intel Arrow Lake S/Lunar Lake CPU with 64\-bit extensions, MOVBE, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
! XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB,
! MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI, UINTR,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and
! SM4 instruction set support.
! .IP \fBpantherlake\fR 4
  .IX Item "pantherlake"
! Intel Panther Lake CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
! MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX\-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
! AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and SM4 instruction set
! support.
! .IP \fBsapphirerapids\fR 4
  .IX Item "sapphirerapids"
  .PD 0
! .IP \fBemeraldrapids\fR 4
  .IX Item "emeraldrapids"
  .PD
! Intel Sapphire Rapids/Emerald Rapids CPU with 64\-bit extensions, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
  AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
  WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
! SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16, AMX\-TILE, AMX\-INT8, AVX\-VNNI, AVX512\-FP16
! and AVX512BF16 instruction set support.
! .IP \fBgraniterapids\fR 4
  .IX Item "graniterapids"
! Intel Granite Rapids CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16, AMX\-TILE, AMX\-INT8, AVX\-VNNI, AVX512\-FP16, AVX512BF16, AMX\-FP16
! and PREFETCHI instruction set support.
! .IP \fBgraniterapids\-d\fR 4
  .IX Item "graniterapids-d"
! Intel Granite Rapids D CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16, AMX\-TILE, AMX\-INT8, AVX\-VNNI, AVX512FP16, AVX512BF16, AMX\-FP16,
! PREFETCHI and AMX\-COMPLEX instruction set support.
! .IP \fBbonnell\fR 4
  .IX Item "bonnell"
  .PD 0
! .IP \fBatom\fR 4
  .IX Item "atom"
  .PD
! Intel Bonnell CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
! .IP \fBsilvermont\fR 4
  .IX Item "silvermont"
  .PD 0
! .IP \fBslm\fR 4
  .IX Item "slm"
  .PD
! Intel Silvermont CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND
  instruction set support.
! .IP \fBgoldmont\fR 4
  .IX Item "goldmont"
! Intel Goldmont CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction
  set support.
! .IP \fBgoldmont\-plus\fR 4
  .IX Item "goldmont-plus"
! Intel Goldmont Plus CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
  SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
! RDPID and SGX instruction set support.
! .IP \fBtremont\fR 4
  .IX Item "tremont"
! Intel Tremont CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
  RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
! SGX, CLWB, GFNI\-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set
  support.
! .IP \fBsierraforest\fR 4
  .IX Item "sierraforest"
! Intel Sierra Forest CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
  support.
! .IP \fBgrandridge\fR 4
  .IX Item "grandridge"
! Intel Grand Ridge CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
  support.
! .IP \fBclearwaterforest\fR 4
  .IX Item "clearwaterforest"
! Intel Clearwater Forest CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
! XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX\-VNNI, ENQCMD,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4, USER_MSR and PREFETCHI instruction set support.
! .IP \fBknl\fR 4
  .IX Item "knl"
! Intel Knights Landing CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support.
! .IP \fBknm\fR 4
  .IX Item "knm"
! Intel Knights Mill CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW,
! AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
! .IP \fBk6\fR 4
  .IX Item "k6"
! AMD K6 CPU with MMX instruction set support.
! .IP \fBk6\-2\fR 4
  .IX Item "k6-2"
  .PD 0
! .IP \fBk6\-3\fR 4
  .IX Item "k6-3"
  .PD
! Improved versions of AMD K6 CPU with MMX and 3DNow! instruction set support.
! .IP \fBathlon\fR 4
  .IX Item "athlon"
  .PD 0
! .IP \fBathlon\-tbird\fR 4
  .IX Item "athlon-tbird"
  .PD
! AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE prefetch instructions
  support.
! .IP \fBathlon\-4\fR 4
  .IX Item "athlon-4"
  .PD 0
! .IP \fBathlon\-xp\fR 4
  .IX Item "athlon-xp"
! .IP \fBathlon\-mp\fR 4
  .IX Item "athlon-mp"
  .PD
! Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and full SSE
  instruction set support.
! .IP \fBk8\fR 4
  .IX Item "k8"
  .PD 0
! .IP \fBopteron\fR 4
  .IX Item "opteron"
! .IP \fBathlon64\fR 4
  .IX Item "athlon64"
! .IP \fBathlon\-fx\fR 4
  .IX Item "athlon-fx"
  .PD
! Processors based on the AMD K8 core with x86\-64 instruction set support,
! including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
! (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 64\-bit
  instruction set extensions.)
! .IP \fBk8\-sse3\fR 4
  .IX Item "k8-sse3"
  .PD 0
! .IP \fBopteron\-sse3\fR 4
  .IX Item "opteron-sse3"
! .IP \fBathlon64\-sse3\fR 4
  .IX Item "athlon64-sse3"
  .PD
! Improved versions of AMD K8 cores with SSE3 instruction set support.
! .IP \fBamdfam10\fR 4
  .IX Item "amdfam10"
  .PD 0
! .IP \fBbarcelona\fR 4
  .IX Item "barcelona"
  .PD
! CPUs based on AMD Family 10h cores with x86\-64 instruction set support.  (This
! supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64\-bit
  instruction set extensions.)
! .IP \fBbdver1\fR 4
  .IX Item "bdver1"
! CPUs based on AMD Family 15h cores with x86\-64 instruction set support.  (This
! supersets FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
! SSSE3, SSE4.1, SSE4.2, ABM and 64\-bit instruction set extensions.)
! .IP \fBbdver2\fR 4
  .IX Item "bdver2"
! AMD Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX,
! SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64\-bit instruction set 
  extensions.)
! .IP \fBbdver3\fR 4
  .IX Item "bdver3"
! AMD Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
! PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and
  64\-bit instruction set extensions.)
! .IP \fBbdver4\fR 4
  .IX Item "bdver4"
! AMD Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
! AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
! SSE4.2, ABM and 64\-bit instruction set extensions.)
! .IP \fBznver1\fR 4
  .IX Item "znver1"
! AMD Family 17h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
  SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
! SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64\-bit
  instruction set extensions.)
! .IP \fBznver2\fR 4
  .IX Item "znver2"
! AMD Family 17h core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD, and 64\-bit instruction set extensions.)
! .IP \fBznver3\fR 4
  .IX Item "znver3"
! AMD Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64\-bit instruction set extensions.)
! .IP \fBznver4\fR 4
  .IX Item "znver4"
! AMD Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
! AVX512BITALG, AVX512VPOPCNTDQ, GFNI and 64\-bit instruction set extensions.)
! .IP \fBznver5\fR 4
  .IX Item "znver5"
! AMD Family 1ah core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
! AVX512VP2INTERSECT, PREFETCHI and 64\-bit instruction set extensions.)
! .IP \fBbtver1\fR 4
  .IX Item "btver1"
! CPUs based on AMD Family 14h cores with x86\-64 instruction set support.  (This
! supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64\-bit
  instruction set extensions.)
! .IP \fBbtver2\fR 4
  .IX Item "btver2"
! CPUs based on AMD Family 16h cores with x86\-64 instruction set support. This
! includes MOVBE, F16C, BMI, AVX, PCLMUL, AES, SSE4.2, SSE4.1, CX16, ABM,
! SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64\-bit instruction set extensions.
! .IP \fBwinchip\-c6\fR 4
  .IX Item "winchip-c6"
! IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
  set support.
! .IP \fBwinchip2\fR 4
  .IX Item "winchip2"
! IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!
  instruction set support.
! .IP \fBc3\fR 4
  .IX Item "c3"
! VIA C3 CPU with MMX and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBc3\-2\fR 4
  .IX Item "c3-2"
! VIA C3\-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBc7\fR 4
  .IX Item "c7"
! VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBsamuel\-2\fR 4
  .IX Item "samuel-2"
! VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnehemiah\fR 4
  .IX Item "nehemiah"
! VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBesther\fR 4
  .IX Item "esther"
! VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBeden\-x2\fR 4
  .IX Item "eden-x2"
! VIA Eden X2 CPU with x86\-64, MMX, SSE, SSE2 and SSE3 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBeden\-x4\fR 4
  .IX Item "eden-x4"
! VIA Eden X4 CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
! AVX and AVX2 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\fR 4
  .IX Item "nano"
! Generic VIA Nano CPU with x86\-64, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-1000\fR 4
  .IX Item "nano-1000"
! VIA Nano 1xxx CPU with x86\-64, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-2000\fR 4
  .IX Item "nano-2000"
! VIA Nano 2xxx CPU with x86\-64, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-3000\fR 4
  .IX Item "nano-3000"
! VIA Nano 3xxx CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-x2\fR 4
  .IX Item "nano-x2"
! VIA Nano Dual Core CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-x4\fR 4
  .IX Item "nano-x4"
! VIA Nano Quad Core CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBlujiazui\fR 4
  .IX Item "lujiazui"
! ZHAOXIN lujiazui CPU with x86\-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED instruction set support.  While the CPUs
! do support AVX and F16C, these aren\*(Aqt enabled by \f(CW\*(C`\-march=lujiazui\*(C'\fR
  for performance reasons.
! .IP \fByongfeng\fR 4
  .IX Item "yongfeng"
! ZHAOXIN yongfeng CPU with x86\-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED, AVX2, FMA, SHA, LZCNT
  instruction set support.
! .IP \fBgeode\fR 4
  .IX Item "geode"
! AMD Geode embedded processor with MMX and 3DNow! instruction set support.
  .RE
  .RS 4
  .RE
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu\-type\fR everything applicable about the generated code, except
! for the ABI and the set of available instructions.  
! While picking a specific \fIcpu\-type\fR schedules things appropriately
  for that particular chip, the compiler does not generate any code that
  cannot run on the default machine type unless you use a
! \&\fB\-march=\fR\fIcpu\-type\fR option.
! For example, if GCC is configured for i686\-pc\-linux\-gnu
  then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
  but still runs on i686 machines.
  .Sp
! The choices for \fIcpu\-type\fR are the same as for \fB\-march\fR.
! In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu\-type\fR:
  .RS 4
! .IP \fBgeneric\fR 4
  .IX Item "generic"
! Produce code optimized for the most common IA32/AMD64/EM64T processors.
! If you know the CPU on which your code will run, then you should use
  the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
! \&\fB\-mtune=generic\fR.  But, if you do not know exactly what CPU users
  of your application will have, then you should use this option.
  .Sp
  As new processors are deployed in the marketplace, the behavior of this
  option will change.  Therefore, if you upgrade to a newer version of
! GCC, code generation controlled by this option will change to reflect
  the processors
! that are most common at the time that version of GCC is released.
  .Sp
  There is no \fB\-march=generic\fR option because \fB\-march\fR
  indicates the instruction set the compiler can use, and there is no
  generic instruction set applicable to all processors.  In contrast,
  \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
  processors) for which the code is optimized.
! .IP \fBintel\fR 4
  .IX Item "intel"
  Produce code optimized for the most current Intel processors, which are
! Haswell and Silvermont for this version of GCC.  If you know the CPU
  on which your code will run, then you should use the corresponding
  \&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
  But, if you want your application performs better on both Haswell and
*************** Silvermont, then you should use this opt
*** 33992,33999 ****
  .Sp
  As new Intel processors are deployed in the marketplace, the behavior of
  this option will change.  Therefore, if you upgrade to a newer version of
! \&\s-1GCC,\s0 code generation controlled by this option will change to reflect
! the most current Intel processors at the time that version of \s-1GCC\s0 is
  released.
  .Sp
  There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
--- 33926,33933 ----
  .Sp
  As new Intel processors are deployed in the marketplace, the behavior of
  this option will change.  Therefore, if you upgrade to a newer version of
! GCC, code generation controlled by this option will change to reflect
! the most current Intel processors at the time that version of GCC is
  released.
  .Sp
  There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
*************** processors) for which the code is optimi
*** 34004,34039 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
  .IX Item "-mcpu=cpu-type"
  A deprecated synonym for \fB\-mtune\fR.
! .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
  .IX Item "-mfpmath=unit"
! Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
  for \fIunit\fR are:
  .RS 4
! .IP "\fB387\fR" 4
  .IX Item "387"
! Use the standard 387 floating-point coprocessor present on the majority of chips and
  emulated otherwise.  Code compiled with this option runs almost everywhere.
  The temporary results are computed in 80\-bit precision instead of the precision
  specified by the type, resulting in slightly different results compared to most
  of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
  .Sp
! This is the default choice for non-Darwin x86\-32 targets.
! .IP "\fBsse\fR" 4
  .IX Item "sse"
! Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
! This instruction set is supported by Pentium \s-1III\s0 and newer chips,
! and in the \s-1AMD\s0 line
! by Athlon\-4, Athlon \s-1XP\s0 and Athlon \s-1MP\s0 chips.  The earlier version of the \s-1SSE\s0
! instruction set supports only single-precision arithmetic, thus the double and
! extended-precision arithmetic are still done using 387.  A later version, present
! only in Pentium 4 and \s-1AMD\s0 x86\-64 chips, supports double-precision
  arithmetic too.
  .Sp
! For the x86\-32 compiler, you must use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
! or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
  effective.  For the x86\-64 compiler, these extensions are enabled by default.
  .Sp
  The resulting code should be considerably faster in the majority of cases and avoid
--- 33938,33973 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4
  .IX Item "-mcpu=cpu-type"
  A deprecated synonym for \fB\-mtune\fR.
! .IP \fB\-mfpmath=\fR\fIunit\fR 4
  .IX Item "-mfpmath=unit"
! Generate floating\-point arithmetic for selected unit \fIunit\fR.  The choices
  for \fIunit\fR are:
  .RS 4
! .IP \fB387\fR 4
  .IX Item "387"
! Use the standard 387 floating\-point coprocessor present on the majority of chips and
  emulated otherwise.  Code compiled with this option runs almost everywhere.
  The temporary results are computed in 80\-bit precision instead of the precision
  specified by the type, resulting in slightly different results compared to most
  of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
  .Sp
! This is the default choice for non\-Darwin x86\-32 targets.
! .IP \fBsse\fR 4
  .IX Item "sse"
! Use scalar floating\-point instructions present in the SSE instruction set.
! This instruction set is supported by Pentium III and newer chips,
! and in the AMD line
! by Athlon\-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
! instruction set supports only single\-precision arithmetic, thus the double and
! extended\-precision arithmetic are still done using 387.  A later version, present
! only in Pentium 4 and AMD x86\-64 chips, supports double\-precision
  arithmetic too.
  .Sp
! For the x86\-32 compiler, you must use \fB\-march=\fR\fIcpu\-type\fR, \fB\-msse\fR
! or \fB\-msse2\fR switches to enable SSE extensions and make this option
  effective.  For the x86\-64 compiler, these extensions are enabled by default.
  .Sp
  The resulting code should be considerably faster in the majority of cases and avoid
*************** the numerical instability problems of 38
*** 34041,34134 ****
  code that expects temporaries to be 80 bits.
  .Sp
  This is the default choice for the x86\-64 compiler, Darwin x86\-32 targets,
! and the default choice for x86\-32 targets with the \s-1SSE2\s0 instruction set
  when \fB\-ffast\-math\fR is enabled.
! .IP "\fBsse,387\fR" 4
  .IX Item "sse,387"
  .PD 0
! .IP "\fBsse+387\fR" 4
  .IX Item "sse+387"
! .IP "\fBboth\fR" 4
  .IX Item "both"
  .PD
  Attempt to utilize both instruction sets at once.  This effectively doubles the
  amount of available registers, and on chips with separate execution units for
! 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
! still experimental, because the \s-1GCC\s0 register allocator does not model separate
  functional units well, resulting in unstable performance.
  .RE
  .RS 4
  .RE
! .IP "\fB\-masm=\fR\fIdialect\fR" 4
  .IX Item "-masm=dialect"
  Output assembly instructions using selected \fIdialect\fR.  Also affects
  which dialect is used for basic \f(CW\*(C`asm\*(C'\fR and
  extended \f(CW\*(C`asm\*(C'\fR. Supported choices (in dialect
  order) are \fBatt\fR or \fBintel\fR. The default is \fBatt\fR. Darwin does
  not support \fBintel\fR.
! .IP "\fB\-mieee\-fp\fR" 4
  .IX Item "-mieee-fp"
  .PD 0
! .IP "\fB\-mno\-ieee\-fp\fR" 4
  .IX Item "-mno-ieee-fp"
  .PD
! Control whether or not the compiler uses \s-1IEEE\s0 floating-point
  comparisons.  These correctly handle the case where the result of a
  comparison is unordered.
! .IP "\fB\-m80387\fR" 4
  .IX Item "-m80387"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
  Generate output containing 80387 instructions for floating point.
! .IP "\fB\-mno\-80387\fR" 4
  .IX Item "-mno-80387"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
  .Sp
! \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC.\s0
! Normally the facilities of the machine's usual C compiler are used, but
! this cannot be done directly in cross-compilation.  You must make your
  own arrangements to provide suitable library functions for
! cross-compilation.
  .Sp
! On machines where a function returns floating-point results in the 80387
! register stack, some floating-point opcodes may be emitted even if
  \&\fB\-msoft\-float\fR is used.
! .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
  .IX Item "-mno-fp-ret-in-387"
! Do not use the \s-1FPU\s0 registers for return values of functions.
  .Sp
  The usual calling convention has functions return values of types
! \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
! is no \s-1FPU.\s0  The idea is that the operating system should emulate
! an \s-1FPU.\s0
  .Sp
  The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
! in ordinary \s-1CPU\s0 registers instead.
! .IP "\fB\-mno\-fancy\-math\-387\fR" 4
  .IX Item "-mno-fancy-math-387"
  Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
  \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
  generating those instructions.
  This option is overridden when \fB\-march\fR
! indicates that the target \s-1CPU\s0 always has an \s-1FPU\s0 and so the
  instruction does not need emulation.  These
  instructions are not generated unless you also use the
  \&\fB\-funsafe\-math\-optimizations\fR switch.
! .IP "\fB\-malign\-double\fR" 4
  .IX Item "-malign-double"
  .PD 0
! .IP "\fB\-mno\-align\-double\fR" 4
  .IX Item "-mno-align-double"
  .PD
! Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
! \&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
! boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
  produces code that runs somewhat faster on a Pentium at the
  expense of more memory.
  .Sp
--- 33975,34068 ----
  code that expects temporaries to be 80 bits.
  .Sp
  This is the default choice for the x86\-64 compiler, Darwin x86\-32 targets,
! and the default choice for x86\-32 targets with the SSE2 instruction set
  when \fB\-ffast\-math\fR is enabled.
! .IP \fBsse,387\fR 4
  .IX Item "sse,387"
  .PD 0
! .IP \fBsse+387\fR 4
  .IX Item "sse+387"
! .IP \fBboth\fR 4
  .IX Item "both"
  .PD
  Attempt to utilize both instruction sets at once.  This effectively doubles the
  amount of available registers, and on chips with separate execution units for
! 387 and SSE the execution resources too.  Use this option with care, as it is
! still experimental, because the GCC register allocator does not model separate
  functional units well, resulting in unstable performance.
  .RE
  .RS 4
  .RE
! .IP \fB\-masm=\fR\fIdialect\fR 4
  .IX Item "-masm=dialect"
  Output assembly instructions using selected \fIdialect\fR.  Also affects
  which dialect is used for basic \f(CW\*(C`asm\*(C'\fR and
  extended \f(CW\*(C`asm\*(C'\fR. Supported choices (in dialect
  order) are \fBatt\fR or \fBintel\fR. The default is \fBatt\fR. Darwin does
  not support \fBintel\fR.
! .IP \fB\-mieee\-fp\fR 4
  .IX Item "-mieee-fp"
  .PD 0
! .IP \fB\-mno\-ieee\-fp\fR 4
  .IX Item "-mno-ieee-fp"
  .PD
! Control whether or not the compiler uses IEEE floating\-point
  comparisons.  These correctly handle the case where the result of a
  comparison is unordered.
! .IP \fB\-m80387\fR 4
  .IX Item "-m80387"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
  Generate output containing 80387 instructions for floating point.
! .IP \fB\-mno\-80387\fR 4
  .IX Item "-mno-80387"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
  .Sp
! \&\fBWarning:\fR the requisite libraries are not part of GCC.
! Normally the facilities of the machine\*(Aqs usual C compiler are used, but
! this cannot be done directly in cross\-compilation.  You must make your
  own arrangements to provide suitable library functions for
! cross\-compilation.
  .Sp
! On machines where a function returns floating\-point results in the 80387
! register stack, some floating\-point opcodes may be emitted even if
  \&\fB\-msoft\-float\fR is used.
! .IP \fB\-mno\-fp\-ret\-in\-387\fR 4
  .IX Item "-mno-fp-ret-in-387"
! Do not use the FPU registers for return values of functions.
  .Sp
  The usual calling convention has functions return values of types
! \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an FPU register, even if there
! is no FPU.  The idea is that the operating system should emulate
! an FPU.
  .Sp
  The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
! in ordinary CPU registers instead.
! .IP \fB\-mno\-fancy\-math\-387\fR 4
  .IX Item "-mno-fancy-math-387"
  Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
  \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
  generating those instructions.
  This option is overridden when \fB\-march\fR
! indicates that the target CPU always has an FPU and so the
  instruction does not need emulation.  These
  instructions are not generated unless you also use the
  \&\fB\-funsafe\-math\-optimizations\fR switch.
! .IP \fB\-malign\-double\fR 4
  .IX Item "-malign-double"
  .PD 0
! .IP \fB\-mno\-align\-double\fR 4
  .IX Item "-mno-align-double"
  .PD
! Control whether GCC aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
! \&\f(CW\*(C`long long\*(C'\fR variables on a two\-word boundary or a one\-word
! boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two\-word boundary
  produces code that runs somewhat faster on a Pentium at the
  expense of more memory.
  .Sp
*************** structures containing the above types ar
*** 34139,34148 ****
  the published application binary interface specifications for the x86\-32
  and are not binary compatible with structures in code compiled
  without that switch.
! .IP "\fB\-m96bit\-long\-double\fR" 4
  .IX Item "-m96bit-long-double"
  .PD 0
! .IP "\fB\-m128bit\-long\-double\fR" 4
  .IX Item "-m128bit-long-double"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The x86\-32
--- 34073,34082 ----
  the published application binary interface specifications for the x86\-32
  and are not binary compatible with structures in code compiled
  without that switch.
! .IP \fB\-m96bit\-long\-double\fR 4
  .IX Item "-m96bit-long-double"
  .PD 0
! .IP \fB\-m128bit\-long\-double\fR 4
  .IX Item "-m128bit-long-double"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The x86\-32
*************** so \fB\-m96bit\-long\-double\fR is the d
*** 34151,34179 ****
  .Sp
  Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
  to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
! conforming to the \s-1ABI,\s0 this is not possible.  So specifying
  \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
  to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
  32\-bit zero.
  .Sp
  In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
! its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
  .Sp
  Notice that neither of these options enable any extra precision over the x87
  standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target \s-1ABI,\s0 this
  changes the size of 
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
  with code compiled without that switch.
! .IP "\fB\-mlong\-double\-64\fR" 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP "\fB\-mlong\-double\-80\fR" 4
  .IX Item "-mlong-double-80"
! .IP "\fB\-mlong\-double\-128\fR" 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
--- 34085,34113 ----
  .Sp
  Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
  to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
! conforming to the ABI, this is not possible.  So specifying
  \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
  to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
  32\-bit zero.
  .Sp
  In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
! its ABI specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
  .Sp
  Notice that neither of these options enable any extra precision over the x87
  standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target ABI, this
  changes the size of 
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary\-compatible
  with code compiled without that switch.
! .IP \fB\-mlong\-double\-64\fR 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP \fB\-mlong\-double\-80\fR 4
  .IX Item "-mlong-double-80"
! .IP \fB\-mlong\-double\-128\fR 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
*************** type. This is the default for 32\-bit Bi
*** 34182,34209 ****
  of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
  \&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target \s-1ABI,\s0 this
  changes the size of
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
  with code compiled without that switch.
! .IP "\fB\-malign\-data=\fR\fItype\fR" 4
  .IX Item "-malign-data=type"
! Control how \s-1GCC\s0 aligns variables.  Supported values for \fItype\fR are
! \&\fBcompat\fR uses increased alignment value compatible uses \s-1GCC 4.8\s0
  and earlier, \fBabi\fR uses alignment value as specified by the
  psABI, and \fBcacheline\fR uses increased alignment value to match
  the cache line size.  \fBcompat\fR is the default.
! .IP "\fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR" 4
  .IX Item "-mlarge-data-threshold=threshold"
  When \fB\-mcmodel=medium\fR or \fB\-mcmodel=large\fR is specified, data
  objects larger than \fIthreshold\fR are placed in large data sections.  The
  default is 65535.
! .IP "\fB\-mrtd\fR" 4
  .IX Item "-mrtd"
! Use a different function-calling convention, in which functions that
! take a fixed number of arguments return with the \f(CW\*(C`ret \f(CInum\f(CW\*(C'\fR
  instruction, which pops their arguments while returning.  This saves one
  instruction in the caller since there is no need to pop the arguments
  there.
--- 34116,34143 ----
  of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
  \&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target ABI, this
  changes the size of
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary\-compatible
  with code compiled without that switch.
! .IP \fB\-malign\-data=\fR\fItype\fR 4
  .IX Item "-malign-data=type"
! Control how GCC aligns variables.  Supported values for \fItype\fR are
! \&\fBcompat\fR uses increased alignment value compatible uses GCC 4.8
  and earlier, \fBabi\fR uses alignment value as specified by the
  psABI, and \fBcacheline\fR uses increased alignment value to match
  the cache line size.  \fBcompat\fR is the default.
! .IP \fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR 4
  .IX Item "-mlarge-data-threshold=threshold"
  When \fB\-mcmodel=medium\fR or \fB\-mcmodel=large\fR is specified, data
  objects larger than \fIthreshold\fR are placed in large data sections.  The
  default is 65535.
! .IP \fB\-mrtd\fR 4
  .IX Item "-mrtd"
! Use a different function\-calling convention, in which functions that
! take a fixed number of arguments return with the \f(CW\*(C`ret \fR\f(CInum\fR\f(CW\*(C'\fR
  instruction, which pops their arguments while returning.  This saves one
  instruction in the caller since there is no need to pop the arguments
  there.
*************** functions.
*** 34225,34231 ****
  In addition, seriously incorrect code results if you call a
  function with too many arguments.  (Normally, extra arguments are
  harmlessly ignored.)
! .IP "\fB\-mregparm=\fR\fInum\fR" 4
  .IX Item "-mregparm=num"
  Control how many registers are used to pass integer arguments.  By
  default, no registers are used to pass arguments, and at most 3
--- 34159,34165 ----
  In addition, seriously incorrect code results if you call a
  function with too many arguments.  (Normally, extra arguments are
  harmlessly ignored.)
! .IP \fB\-mregparm=\fR\fInum\fR 4
  .IX Item "-mregparm=num"
  Control how many registers are used to pass integer arguments.  By
  default, no registers are used to pass arguments, and at most 3
*************** function by using the function attribute
*** 34236,34318 ****
  \&\fInum\fR is nonzero, then you must build all modules with the same
  value, including any libraries.  This includes the system libraries and
  startup modules.
! .IP "\fB\-msseregparm\fR" 4
  .IX Item "-msseregparm"
! Use \s-1SSE\s0 register passing conventions for float and double arguments
  and return values.  You can control this behavior for a specific
  function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
  .Sp
  \&\fBWarning:\fR if you use this switch then you must build all
  modules with the same value, including any libraries.  This includes
  the system libraries and startup modules.
! .IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
  .IX Item "-mvect8-ret-in-mem"
! Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
! default on VxWorks to match the \s-1ABI\s0 of the Sun Studio compilers until
  version 12.  \fIOnly\fR use this option if you need to remain
  compatible with existing code produced by those previous compiler
! versions or older versions of \s-1GCC.\s0
! .IP "\fB\-mpc32\fR" 4
  .IX Item "-mpc32"
  .PD 0
! .IP "\fB\-mpc64\fR" 4
  .IX Item "-mpc64"
! .IP "\fB\-mpc80\fR" 4
  .IX Item "-mpc80"
  .PD
! Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
! is specified, the significands of results of floating-point operations are
  rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
! significands of results of floating-point operations to 53 bits (double
  precision) and \fB\-mpc80\fR rounds the significands of results of
! floating-point operations to 64 bits (extended double precision), which is
! the default.  When this option is used, floating-point operations in higher
! precisions are not available to the programmer without setting the \s-1FPU\s0
  control word explicitly.
  .Sp
! Setting the rounding of floating-point operations to less than the default
  80 bits can speed some programs by 2% or more.  Note that some mathematical
! libraries assume that extended-precision (80\-bit) floating-point operations
  are enabled by default; routines in such libraries could suffer significant
! loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
  when this option is used to set the precision to less than extended precision.
! .IP "\fB\-mdaz\-ftz\fR" 4
  .IX Item "-mdaz-ftz"
! The flush-to-zero (\s-1FTZ\s0) and denormals-are-zero (\s-1DAZ\s0) flags in the \s-1MXCSR\s0 register
! are used to control floating-point calculations.SSE and \s-1AVX\s0 instructions
! including scalar and vector instructions could benefit from enabling the \s-1FTZ\s0
! and \s-1DAZ\s0 flags when \fB\-mdaz\-ftz\fR is specified. Don't set \s-1FTZ/DAZ\s0 flags
  when \fB\-mno\-daz\-ftz\fR or \fB\-shared\fR is specified, \fB\-mdaz\-ftz\fR
! will set \s-1FTZ/DAZ\s0 flags even with \fB\-shared\fR.
! .IP "\fB\-mstackrealign\fR" 4
  .IX Item "-mstackrealign"
  Realign the stack at entry.  On the x86, the \fB\-mstackrealign\fR
  option generates an alternate prologue and epilogue that realigns the
! run-time stack if necessary.  This supports mixing legacy codes that keep
  4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
! \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
  applicable to individual functions.
! .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
  the default is 4 (16 bytes or 128 bits).
  .Sp
  \&\fBWarning:\fR When generating code for the x86\-64 architecture with
! \&\s-1SSE\s0 extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
  used to keep the stack boundary aligned to 8 byte boundary.  Since
! x86\-64 \s-1ABI\s0 require 16 byte stack alignment, this is \s-1ABI\s0 incompatible and
  intended to be used in controlled environment where stack space is
  important limitation.  This option leads to wrong code when functions
  compiled with 16 byte stack alignment (such as functions from a standard
! library) are called with misaligned stack.  In this case, \s-1SSE\s0
  instructions may lead to misaligned memory access traps.  In addition,
  variable arguments are handled incorrectly for 16 byte aligned
  objects (including x87 long double and _\|_int128), leading to wrong
  results.  You must build all modules with
  \&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
  includes the system libraries and startup modules.
! .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
  .IX Item "-mincoming-stack-boundary=num"
  Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
  boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
--- 34170,34252 ----
  \&\fInum\fR is nonzero, then you must build all modules with the same
  value, including any libraries.  This includes the system libraries and
  startup modules.
! .IP \fB\-msseregparm\fR 4
  .IX Item "-msseregparm"
! Use SSE register passing conventions for float and double arguments
  and return values.  You can control this behavior for a specific
  function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
  .Sp
  \&\fBWarning:\fR if you use this switch then you must build all
  modules with the same value, including any libraries.  This includes
  the system libraries and startup modules.
! .IP \fB\-mvect8\-ret\-in\-mem\fR 4
  .IX Item "-mvect8-ret-in-mem"
! Return 8\-byte vectors in memory instead of MMX registers.  This is the
! default on VxWorks to match the ABI of the Sun Studio compilers until
  version 12.  \fIOnly\fR use this option if you need to remain
  compatible with existing code produced by those previous compiler
! versions or older versions of GCC.
! .IP \fB\-mpc32\fR 4
  .IX Item "-mpc32"
  .PD 0
! .IP \fB\-mpc64\fR 4
  .IX Item "-mpc64"
! .IP \fB\-mpc80\fR 4
  .IX Item "-mpc80"
  .PD
! Set 80387 floating\-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
! is specified, the significands of results of floating\-point operations are
  rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
! significands of results of floating\-point operations to 53 bits (double
  precision) and \fB\-mpc80\fR rounds the significands of results of
! floating\-point operations to 64 bits (extended double precision), which is
! the default.  When this option is used, floating\-point operations in higher
! precisions are not available to the programmer without setting the FPU
  control word explicitly.
  .Sp
! Setting the rounding of floating\-point operations to less than the default
  80 bits can speed some programs by 2% or more.  Note that some mathematical
! libraries assume that extended\-precision (80\-bit) floating\-point operations
  are enabled by default; routines in such libraries could suffer significant
! loss of accuracy, typically through so\-called "catastrophic cancellation",
  when this option is used to set the precision to less than extended precision.
! .IP \fB\-mdaz\-ftz\fR 4
  .IX Item "-mdaz-ftz"
! The flush\-to\-zero (FTZ) and denormals\-are\-zero (DAZ) flags in the MXCSR register
! are used to control floating\-point calculations.SSE and AVX instructions
! including scalar and vector instructions could benefit from enabling the FTZ
! and DAZ flags when \fB\-mdaz\-ftz\fR is specified. Don\*(Aqt set FTZ/DAZ flags
  when \fB\-mno\-daz\-ftz\fR or \fB\-shared\fR is specified, \fB\-mdaz\-ftz\fR
! will set FTZ/DAZ flags even with \fB\-shared\fR.
! .IP \fB\-mstackrealign\fR 4
  .IX Item "-mstackrealign"
  Realign the stack at entry.  On the x86, the \fB\-mstackrealign\fR
  option generates an alternate prologue and epilogue that realigns the
! run\-time stack if necessary.  This supports mixing legacy codes that keep
  4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
! SSE compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
  applicable to individual functions.
! .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
  the default is 4 (16 bytes or 128 bits).
  .Sp
  \&\fBWarning:\fR When generating code for the x86\-64 architecture with
! SSE extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
  used to keep the stack boundary aligned to 8 byte boundary.  Since
! x86\-64 ABI require 16 byte stack alignment, this is ABI incompatible and
  intended to be used in controlled environment where stack space is
  important limitation.  This option leads to wrong code when functions
  compiled with 16 byte stack alignment (such as functions from a standard
! library) are called with misaligned stack.  In this case, SSE
  instructions may lead to misaligned memory access traps.  In addition,
  variable arguments are handled incorrectly for 16 byte aligned
  objects (including x87 long double and _\|_int128), leading to wrong
  results.  You must build all modules with
  \&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
  includes the system libraries and startup modules.
! .IP \fB\-mincoming\-stack\-boundary=\fR\fInum\fR 4
  .IX Item "-mincoming-stack-boundary=num"
  Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
  boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
*************** the one specified by \fB\-mpreferred\-st
*** 34320,34327 ****
  .Sp
  On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
  should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
! suffer significant run time performance penalties.  On Pentium \s-1III,\s0 the
! Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
  properly if it is not 16\-byte aligned.
  .Sp
  To ensure proper alignment of this values on the stack, the stack boundary
--- 34254,34261 ----
  .Sp
  On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
  should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
! suffer significant run time performance penalties.  On Pentium III, the
! Streaming SIMD Extension (SSE) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
  properly if it is not 16\-byte aligned.
  .Sp
  To ensure proper alignment of this values on the stack, the stack boundary
*************** This extra alignment does consume extra
*** 34336,34759 ****
  increases code size.  Code that is sensitive to stack space usage, such
  as embedded systems and operating system kernels, may want to reduce the
  preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
! .IP "\fB\-mmmx\fR" 4
  .IX Item "-mmmx"
  .PD 0
! .IP "\fB\-msse\fR" 4
  .IX Item "-msse"
! .IP "\fB\-msse2\fR" 4
  .IX Item "-msse2"
! .IP "\fB\-msse3\fR" 4
  .IX Item "-msse3"
! .IP "\fB\-mssse3\fR" 4
  .IX Item "-mssse3"
! .IP "\fB\-msse4\fR" 4
  .IX Item "-msse4"
! .IP "\fB\-msse4a\fR" 4
  .IX Item "-msse4a"
! .IP "\fB\-msse4.1\fR" 4
  .IX Item "-msse4.1"
! .IP "\fB\-msse4.2\fR" 4
  .IX Item "-msse4.2"
! .IP "\fB\-mavx\fR" 4
  .IX Item "-mavx"
! .IP "\fB\-mavx2\fR" 4
  .IX Item "-mavx2"
! .IP "\fB\-mavx512f\fR" 4
  .IX Item "-mavx512f"
! .IP "\fB\-mavx512pf\fR" 4
  .IX Item "-mavx512pf"
! .IP "\fB\-mavx512er\fR" 4
  .IX Item "-mavx512er"
! .IP "\fB\-mavx512cd\fR" 4
  .IX Item "-mavx512cd"
! .IP "\fB\-mavx512vl\fR" 4
  .IX Item "-mavx512vl"
! .IP "\fB\-mavx512bw\fR" 4
  .IX Item "-mavx512bw"
! .IP "\fB\-mavx512dq\fR" 4
  .IX Item "-mavx512dq"
! .IP "\fB\-mavx512ifma\fR" 4
  .IX Item "-mavx512ifma"
! .IP "\fB\-mavx512vbmi\fR" 4
  .IX Item "-mavx512vbmi"
! .IP "\fB\-msha\fR" 4
  .IX Item "-msha"
! .IP "\fB\-maes\fR" 4
  .IX Item "-maes"
! .IP "\fB\-mpclmul\fR" 4
  .IX Item "-mpclmul"
! .IP "\fB\-mclflushopt\fR" 4
  .IX Item "-mclflushopt"
! .IP "\fB\-mclwb\fR" 4
  .IX Item "-mclwb"
! .IP "\fB\-mfsgsbase\fR" 4
  .IX Item "-mfsgsbase"
! .IP "\fB\-mptwrite\fR" 4
  .IX Item "-mptwrite"
! .IP "\fB\-mrdrnd\fR" 4
  .IX Item "-mrdrnd"
! .IP "\fB\-mf16c\fR" 4
  .IX Item "-mf16c"
! .IP "\fB\-mfma\fR" 4
  .IX Item "-mfma"
! .IP "\fB\-mpconfig\fR" 4
  .IX Item "-mpconfig"
! .IP "\fB\-mwbnoinvd\fR" 4
  .IX Item "-mwbnoinvd"
! .IP "\fB\-mfma4\fR" 4
  .IX Item "-mfma4"
! .IP "\fB\-mprfchw\fR" 4
  .IX Item "-mprfchw"
! .IP "\fB\-mrdpid\fR" 4
  .IX Item "-mrdpid"
! .IP "\fB\-mprefetchwt1\fR" 4
  .IX Item "-mprefetchwt1"
! .IP "\fB\-mrdseed\fR" 4
  .IX Item "-mrdseed"
! .IP "\fB\-msgx\fR" 4
  .IX Item "-msgx"
! .IP "\fB\-mxop\fR" 4
  .IX Item "-mxop"
! .IP "\fB\-mlwp\fR" 4
  .IX Item "-mlwp"
! .IP "\fB\-m3dnow\fR" 4
  .IX Item "-m3dnow"
! .IP "\fB\-m3dnowa\fR" 4
  .IX Item "-m3dnowa"
! .IP "\fB\-mpopcnt\fR" 4
  .IX Item "-mpopcnt"
! .IP "\fB\-mabm\fR" 4
  .IX Item "-mabm"
! .IP "\fB\-madx\fR" 4
  .IX Item "-madx"
! .IP "\fB\-mbmi\fR" 4
  .IX Item "-mbmi"
! .IP "\fB\-mbmi2\fR" 4
  .IX Item "-mbmi2"
! .IP "\fB\-mlzcnt\fR" 4
  .IX Item "-mlzcnt"
! .IP "\fB\-mfxsr\fR" 4
  .IX Item "-mfxsr"
! .IP "\fB\-mxsave\fR" 4
  .IX Item "-mxsave"
! .IP "\fB\-mxsaveopt\fR" 4
  .IX Item "-mxsaveopt"
! .IP "\fB\-mxsavec\fR" 4
  .IX Item "-mxsavec"
! .IP "\fB\-mxsaves\fR" 4
  .IX Item "-mxsaves"
! .IP "\fB\-mrtm\fR" 4
  .IX Item "-mrtm"
! .IP "\fB\-mhle\fR" 4
  .IX Item "-mhle"
! .IP "\fB\-mtbm\fR" 4
  .IX Item "-mtbm"
! .IP "\fB\-mmwaitx\fR" 4
  .IX Item "-mmwaitx"
! .IP "\fB\-mclzero\fR" 4
  .IX Item "-mclzero"
! .IP "\fB\-mpku\fR" 4
  .IX Item "-mpku"
! .IP "\fB\-mavx512vbmi2\fR" 4
  .IX Item "-mavx512vbmi2"
! .IP "\fB\-mavx512bf16\fR" 4
  .IX Item "-mavx512bf16"
! .IP "\fB\-mavx512fp16\fR" 4
  .IX Item "-mavx512fp16"
! .IP "\fB\-mgfni\fR" 4
  .IX Item "-mgfni"
! .IP "\fB\-mvaes\fR" 4
  .IX Item "-mvaes"
! .IP "\fB\-mwaitpkg\fR" 4
  .IX Item "-mwaitpkg"
! .IP "\fB\-mvpclmulqdq\fR" 4
  .IX Item "-mvpclmulqdq"
! .IP "\fB\-mavx512bitalg\fR" 4
  .IX Item "-mavx512bitalg"
! .IP "\fB\-mmovdiri\fR" 4
  .IX Item "-mmovdiri"
! .IP "\fB\-mmovdir64b\fR" 4
  .IX Item "-mmovdir64b"
! .IP "\fB\-menqcmd\fR" 4
  .IX Item "-menqcmd"
! .IP "\fB\-muintr\fR" 4
  .IX Item "-muintr"
! .IP "\fB\-mtsxldtrk\fR" 4
  .IX Item "-mtsxldtrk"
! .IP "\fB\-mavx512vpopcntdq\fR" 4
  .IX Item "-mavx512vpopcntdq"
! .IP "\fB\-mavx512vp2intersect\fR" 4
  .IX Item "-mavx512vp2intersect"
! .IP "\fB\-mavx5124fmaps\fR" 4
  .IX Item "-mavx5124fmaps"
! .IP "\fB\-mavx512vnni\fR" 4
  .IX Item "-mavx512vnni"
! .IP "\fB\-mavxvnni\fR" 4
  .IX Item "-mavxvnni"
! .IP "\fB\-mavx5124vnniw\fR" 4
  .IX Item "-mavx5124vnniw"
! .IP "\fB\-mcldemote\fR" 4
  .IX Item "-mcldemote"
! .IP "\fB\-mserialize\fR" 4
  .IX Item "-mserialize"
! .IP "\fB\-mamx\-tile\fR" 4
  .IX Item "-mamx-tile"
! .IP "\fB\-mamx\-int8\fR" 4
  .IX Item "-mamx-int8"
! .IP "\fB\-mamx\-bf16\fR" 4
  .IX Item "-mamx-bf16"
! .IP "\fB\-mhreset\fR" 4
  .IX Item "-mhreset"
! .IP "\fB\-mkl\fR" 4
  .IX Item "-mkl"
! .IP "\fB\-mwidekl\fR" 4
  .IX Item "-mwidekl"
! .IP "\fB\-mavxifma\fR" 4
  .IX Item "-mavxifma"
! .IP "\fB\-mavxvnniint8\fR" 4
  .IX Item "-mavxvnniint8"
! .IP "\fB\-mavxneconvert\fR" 4
  .IX Item "-mavxneconvert"
! .IP "\fB\-mcmpccxadd\fR" 4
  .IX Item "-mcmpccxadd"
! .IP "\fB\-mamx\-fp16\fR" 4
  .IX Item "-mamx-fp16"
! .IP "\fB\-mprefetchi\fR" 4
  .IX Item "-mprefetchi"
! .IP "\fB\-mraoint\fR" 4
  .IX Item "-mraoint"
! .IP "\fB\-mamx\-complex\fR" 4
  .IX Item "-mamx-complex"
! .IP "\fB\-mavxvnniint16\fR" 4
  .IX Item "-mavxvnniint16"
! .IP "\fB\-msm3\fR" 4
  .IX Item "-msm3"
! .IP "\fB\-msha512\fR" 4
  .IX Item "-msha512"
! .IP "\fB\-msm4\fR" 4
  .IX Item "-msm4"
! .IP "\fB\-mapxf\fR" 4
  .IX Item "-mapxf"
! .IP "\fB\-musermsr\fR" 4
  .IX Item "-musermsr"
! .IP "\fB\-mavx10.1\fR" 4
  .IX Item "-mavx10.1"
! .IP "\fB\-mavx10.1\-256\fR" 4
  .IX Item "-mavx10.1-256"
! .IP "\fB\-mavx10.1\-512\fR" 4
  .IX Item "-mavx10.1-512"
  .PD
! These switches enable the use of instructions in the \s-1MMX, SSE,
  AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
  AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG,
! WBNOINVD, FMA4, PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP,\s0
! 3DNow!, enhanced 3DNow!, \s-1POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
  XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
  GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B, AVX512BF16,
  ENQCMD, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE,
  UINTR, HRESET, AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512\-FP16,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AMX\-FP16, PREFETCHI, RAOINT,\s0
! AMX-COMPLEX, \s-1AVXVNNIINT16, SM3, SHA512, SM4, APX_F, USER_MSR, AVX10.1\s0 or
! \&\s-1CLDEMOTE\s0 extended instruction sets.  Each has a corresponding \fB\-mno\-\fR
  option to disable use of these instructions.
  .Sp
! These extensions are also available as built-in functions: see
! \&\fBx86 Built-in Functions\fR, for details of the functions enabled and
  disabled by these switches.
  .Sp
! To generate \s-1SSE/SSE2\s0 instructions automatically from floating-point
  code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
  .Sp
! \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
! generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
  when needed.
  .Sp
! These options enable \s-1GCC\s0 to use these extended instructions in
  generated code, even without \fB\-mfpmath=sse\fR.  Applications that
! perform run-time \s-1CPU\s0 detection must compile separate files for each
  supported architecture, using the appropriate flags.  In particular,
! the file containing the \s-1CPU\s0 detection code should be compiled without
  these options.
! .IP "\fB\-mdump\-tune\-features\fR" 4
  .IX Item "-mdump-tune-features"
! This option instructs \s-1GCC\s0 to dump the names of the x86 performance 
  tuning features and default settings. The names can be used in 
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR.
! .IP "\fB\-mtune\-ctrl=\fR\fIfeature-list\fR" 4
  .IX Item "-mtune-ctrl=feature-list"
  This option is used to do fine grain control of x86 code generation features.
! \&\fIfeature-list\fR is a comma separated list of \fIfeature\fR names. See also
  \&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
  on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR is intended to be used by \s-1GCC\s0
  developers. Using it may lead to code paths not covered by testing and can
  potentially result in compiler ICEs or runtime errors.
! .IP "\fB\-mno\-default\fR" 4
  .IX Item "-mno-default"
! This option instructs \s-1GCC\s0 to turn off all tunable features. See also 
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR and \fB\-mdump\-tune\-features\fR.
! .IP "\fB\-mcld\fR" 4
  .IX Item "-mcld"
! This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
  of functions that use string instructions.  String instructions depend on
! the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
! \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
! systems violate this specification by not clearing the \s-1DF\s0 flag in their
! exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
  set, which leads to wrong direction mode when string instructions are used.
  This option can be enabled by default on 32\-bit x86 targets by configuring
! \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
  instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
  in this case.
! .IP "\fB\-mvzeroupper\fR" 4
  .IX Item "-mvzeroupper"
! This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
  before a transfer of control flow out of the function to minimize
! the \s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
  intrinsics.
! .IP "\fB\-mprefer\-avx128\fR" 4
  .IX Item "-mprefer-avx128"
! This option instructs \s-1GCC\s0 to use 128\-bit \s-1AVX\s0 instructions instead of
! 256\-bit \s-1AVX\s0 instructions in the auto-vectorizer.
! .IP "\fB\-mprefer\-vector\-width=\fR\fIopt\fR" 4
  .IX Item "-mprefer-vector-width=opt"
! This option instructs \s-1GCC\s0 to use \fIopt\fR\-bit vector width in instructions
  instead of default on the selected platform.
! .IP "\fB\-mpartial\-vector\-fp\-math\fR" 4
  .IX Item "-mpartial-vector-fp-math"
! This option enables \s-1GCC\s0 to generate floating-point operations that might
! affect the set of floating-point status flags on partial vectors, where
! vector elements reside in the low part of the 128\-bit \s-1SSE\s0 register.  Unless
  \&\fB\-fno\-trapping\-math\fR is specified, the compiler guarantees correct
  behavior by sanitizing all input operands to have zeroes in the unused
! upper part of the vector register.  Note that by using built-in functions
  or inline assembly with partial vector arguments, NaNs, denormal or invalid
  values can leak into the upper part of the vector, causing possible
  performance issues when \fB\-fno\-trapping\-math\fR is in effect.  These
  issues can be mitigated by manually sanitizing the upper part of the partial
  vector argument register or by using \fB\-mdaz\-ftz\fR to set
! denormals-are-zero (\s-1DAZ\s0) flag in the \s-1MXCSR\s0 register.
  .Sp
  This option is enabled by default.
! .IP "\fB\-mmove\-max=\fR\fIbits\fR" 4
  .IX Item "-mmove-max=bits"
! This option instructs \s-1GCC\s0 to set the maximum number of bits can be
  moved from memory to memory efficiently to \fIbits\fR.  The valid
  \&\fIbits\fR are 128, 256 and 512.
! .IP "\fB\-mstore\-max=\fR\fIbits\fR" 4
  .IX Item "-mstore-max=bits"
! This option instructs \s-1GCC\s0 to set the maximum number of bits can be
  stored to memory efficiently to \fIbits\fR.  The valid \fIbits\fR are
  128, 256 and 512.
  .RS 4
! .IP "\fBnone\fR" 4
  .IX Item "none"
! No extra limitations applied to \s-1GCC\s0 other than defined by the selected platform.
! .IP "\fB128\fR" 4
  .IX Item "128"
  Prefer 128\-bit vector width for instructions.
! .IP "\fB256\fR" 4
  .IX Item "256"
  Prefer 256\-bit vector width for instructions.
! .IP "\fB512\fR" 4
  .IX Item "512"
  Prefer 512\-bit vector width for instructions.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mnoreturn\-no\-callee\-saved\-registers\fR" 4
  .IX Item "-mnoreturn-no-callee-saved-registers"
  This option optimizes functions with \f(CW\*(C`noreturn\*(C'\fR attribute or
! \&\f(CW\*(C`_Noreturn\*(C'\fR specifier by not saving in the function prologue callee-saved
  registers which are used in the function (except for the \f(CW\*(C`BP\*(C'\fR
  register).  This option can interfere with debugging of the caller of the
  \&\f(CW\*(C`noreturn\*(C'\fR function or any function further up in the call stack, so it
  is not enabled by default.
! .IP "\fB\-mcx16\fR" 4
  .IX Item "-mcx16"
! This option enables \s-1GCC\s0 to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions in 64\-bit
! code to implement compare-and-exchange operations on 16\-byte aligned 128\-bit
  objects.  This is useful for atomic updates of data structures exceeding one
  machine word in size.  The compiler uses this instruction to implement
  \&\fB_\|_sync Builtins\fR.  However, for \fB_\|_atomic Builtins\fR operating on
  128\-bit integers, a library call is always used.
! .IP "\fB\-msahf\fR" 4
  .IX Item "-msahf"
  This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
  Early Intel Pentium 4 CPUs with Intel 64 support,
  prior to the introduction of Pentium 4 G1 step in December 2005,
  lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
! which are supported by \s-1AMD64.\s0
  These are load and store instructions, respectively, for certain status flags.
  In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
! \&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built-in functions;
  see \fBOther Builtins\fR for details.
! .IP "\fB\-mmovbe\fR" 4
  .IX Item "-mmovbe"
  This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to optimize
  byte swapping of four and eight byte entities.
! .IP "\fB\-mshstk\fR" 4
  .IX Item "-mshstk"
! The \fB\-mshstk\fR option enables shadow stack built-in functions
! from x86 Control-flow Enforcement Technology (\s-1CET\s0).
! .IP "\fB\-mcrc32\fR" 4
  .IX Item "-mcrc32"
! This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
  \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
! .IP "\fB\-mmwait\fR" 4
  .IX Item "-mmwait"
! This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_monitor\*(C'\fR,
  and \f(CW\*(C`_\|_builtin_ia32_mwait\*(C'\fR to generate the \f(CW\*(C`monitor\*(C'\fR and
  \&\f(CW\*(C`mwait\*(C'\fR machine instructions.
! .IP "\fB\-mrecip\fR" 4
  .IX Item "-mrecip"
  This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
  (and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
! with an additional Newton-Raphson step
  to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
  (and their vectorized
! variants) for single-precision floating-point arguments.  These instructions
  are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
  together with \fB\-ffinite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
  Note that while the throughput of the sequence is higher than the throughput
! of the non-reciprocal instruction, the precision of the sequence can be
  decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
  .Sp
! Note that \s-1GCC\s0 implements \f(CW\*(C`1.0f/sqrtf(\f(CIx\f(CW)\*(C'\fR in terms of \f(CW\*(C`RSQRTSS\*(C'\fR
  (or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
! combination), and doesn't need \fB\-mrecip\fR.
  .Sp
! Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
! for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
  already with \fB\-ffast\-math\fR (or the above option combination), and
! doesn't need \fB\-mrecip\fR.
! .IP "\fB\-mrecip=\fR\fIopt\fR" 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP "\fBdiv\fR" 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP "\fBvec-div\fR" 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP "\fBsqrt\fR" 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP "\fBvec-sqrt\fR" 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
  .RE
--- 34270,34693 ----
  increases code size.  Code that is sensitive to stack space usage, such
  as embedded systems and operating system kernels, may want to reduce the
  preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
! .IP \fB\-mmmx\fR 4
  .IX Item "-mmmx"
  .PD 0
! .IP \fB\-msse\fR 4
  .IX Item "-msse"
! .IP \fB\-msse2\fR 4
  .IX Item "-msse2"
! .IP \fB\-msse3\fR 4
  .IX Item "-msse3"
! .IP \fB\-mssse3\fR 4
  .IX Item "-mssse3"
! .IP \fB\-msse4\fR 4
  .IX Item "-msse4"
! .IP \fB\-msse4a\fR 4
  .IX Item "-msse4a"
! .IP \fB\-msse4.1\fR 4
  .IX Item "-msse4.1"
! .IP \fB\-msse4.2\fR 4
  .IX Item "-msse4.2"
! .IP \fB\-mavx\fR 4
  .IX Item "-mavx"
! .IP \fB\-mavx2\fR 4
  .IX Item "-mavx2"
! .IP \fB\-mavx512f\fR 4
  .IX Item "-mavx512f"
! .IP \fB\-mavx512pf\fR 4
  .IX Item "-mavx512pf"
! .IP \fB\-mavx512er\fR 4
  .IX Item "-mavx512er"
! .IP \fB\-mavx512cd\fR 4
  .IX Item "-mavx512cd"
! .IP \fB\-mavx512vl\fR 4
  .IX Item "-mavx512vl"
! .IP \fB\-mavx512bw\fR 4
  .IX Item "-mavx512bw"
! .IP \fB\-mavx512dq\fR 4
  .IX Item "-mavx512dq"
! .IP \fB\-mavx512ifma\fR 4
  .IX Item "-mavx512ifma"
! .IP \fB\-mavx512vbmi\fR 4
  .IX Item "-mavx512vbmi"
! .IP \fB\-msha\fR 4
  .IX Item "-msha"
! .IP \fB\-maes\fR 4
  .IX Item "-maes"
! .IP \fB\-mpclmul\fR 4
  .IX Item "-mpclmul"
! .IP \fB\-mclflushopt\fR 4
  .IX Item "-mclflushopt"
! .IP \fB\-mclwb\fR 4
  .IX Item "-mclwb"
! .IP \fB\-mfsgsbase\fR 4
  .IX Item "-mfsgsbase"
! .IP \fB\-mptwrite\fR 4
  .IX Item "-mptwrite"
! .IP \fB\-mrdrnd\fR 4
  .IX Item "-mrdrnd"
! .IP \fB\-mf16c\fR 4
  .IX Item "-mf16c"
! .IP \fB\-mfma\fR 4
  .IX Item "-mfma"
! .IP \fB\-mpconfig\fR 4
  .IX Item "-mpconfig"
! .IP \fB\-mwbnoinvd\fR 4
  .IX Item "-mwbnoinvd"
! .IP \fB\-mfma4\fR 4
  .IX Item "-mfma4"
! .IP \fB\-mprfchw\fR 4
  .IX Item "-mprfchw"
! .IP \fB\-mrdpid\fR 4
  .IX Item "-mrdpid"
! .IP \fB\-mprefetchwt1\fR 4
  .IX Item "-mprefetchwt1"
! .IP \fB\-mrdseed\fR 4
  .IX Item "-mrdseed"
! .IP \fB\-msgx\fR 4
  .IX Item "-msgx"
! .IP \fB\-mxop\fR 4
  .IX Item "-mxop"
! .IP \fB\-mlwp\fR 4
  .IX Item "-mlwp"
! .IP \fB\-m3dnow\fR 4
  .IX Item "-m3dnow"
! .IP \fB\-m3dnowa\fR 4
  .IX Item "-m3dnowa"
! .IP \fB\-mpopcnt\fR 4
  .IX Item "-mpopcnt"
! .IP \fB\-mabm\fR 4
  .IX Item "-mabm"
! .IP \fB\-madx\fR 4
  .IX Item "-madx"
! .IP \fB\-mbmi\fR 4
  .IX Item "-mbmi"
! .IP \fB\-mbmi2\fR 4
  .IX Item "-mbmi2"
! .IP \fB\-mlzcnt\fR 4
  .IX Item "-mlzcnt"
! .IP \fB\-mfxsr\fR 4
  .IX Item "-mfxsr"
! .IP \fB\-mxsave\fR 4
  .IX Item "-mxsave"
! .IP \fB\-mxsaveopt\fR 4
  .IX Item "-mxsaveopt"
! .IP \fB\-mxsavec\fR 4
  .IX Item "-mxsavec"
! .IP \fB\-mxsaves\fR 4
  .IX Item "-mxsaves"
! .IP \fB\-mrtm\fR 4
  .IX Item "-mrtm"
! .IP \fB\-mhle\fR 4
  .IX Item "-mhle"
! .IP \fB\-mtbm\fR 4
  .IX Item "-mtbm"
! .IP \fB\-mmwaitx\fR 4
  .IX Item "-mmwaitx"
! .IP \fB\-mclzero\fR 4
  .IX Item "-mclzero"
! .IP \fB\-mpku\fR 4
  .IX Item "-mpku"
! .IP \fB\-mavx512vbmi2\fR 4
  .IX Item "-mavx512vbmi2"
! .IP \fB\-mavx512bf16\fR 4
  .IX Item "-mavx512bf16"
! .IP \fB\-mavx512fp16\fR 4
  .IX Item "-mavx512fp16"
! .IP \fB\-mgfni\fR 4
  .IX Item "-mgfni"
! .IP \fB\-mvaes\fR 4
  .IX Item "-mvaes"
! .IP \fB\-mwaitpkg\fR 4
  .IX Item "-mwaitpkg"
! .IP \fB\-mvpclmulqdq\fR 4
  .IX Item "-mvpclmulqdq"
! .IP \fB\-mavx512bitalg\fR 4
  .IX Item "-mavx512bitalg"
! .IP \fB\-mmovdiri\fR 4
  .IX Item "-mmovdiri"
! .IP \fB\-mmovdir64b\fR 4
  .IX Item "-mmovdir64b"
! .IP \fB\-menqcmd\fR 4
  .IX Item "-menqcmd"
! .IP \fB\-muintr\fR 4
  .IX Item "-muintr"
! .IP \fB\-mtsxldtrk\fR 4
  .IX Item "-mtsxldtrk"
! .IP \fB\-mavx512vpopcntdq\fR 4
  .IX Item "-mavx512vpopcntdq"
! .IP \fB\-mavx512vp2intersect\fR 4
  .IX Item "-mavx512vp2intersect"
! .IP \fB\-mavx5124fmaps\fR 4
  .IX Item "-mavx5124fmaps"
! .IP \fB\-mavx512vnni\fR 4
  .IX Item "-mavx512vnni"
! .IP \fB\-mavxvnni\fR 4
  .IX Item "-mavxvnni"
! .IP \fB\-mavx5124vnniw\fR 4
  .IX Item "-mavx5124vnniw"
! .IP \fB\-mcldemote\fR 4
  .IX Item "-mcldemote"
! .IP \fB\-mserialize\fR 4
  .IX Item "-mserialize"
! .IP \fB\-mamx\-tile\fR 4
  .IX Item "-mamx-tile"
! .IP \fB\-mamx\-int8\fR 4
  .IX Item "-mamx-int8"
! .IP \fB\-mamx\-bf16\fR 4
  .IX Item "-mamx-bf16"
! .IP \fB\-mhreset\fR 4
  .IX Item "-mhreset"
! .IP \fB\-mkl\fR 4
  .IX Item "-mkl"
! .IP \fB\-mwidekl\fR 4
  .IX Item "-mwidekl"
! .IP \fB\-mavxifma\fR 4
  .IX Item "-mavxifma"
! .IP \fB\-mavxvnniint8\fR 4
  .IX Item "-mavxvnniint8"
! .IP \fB\-mavxneconvert\fR 4
  .IX Item "-mavxneconvert"
! .IP \fB\-mcmpccxadd\fR 4
  .IX Item "-mcmpccxadd"
! .IP \fB\-mamx\-fp16\fR 4
  .IX Item "-mamx-fp16"
! .IP \fB\-mprefetchi\fR 4
  .IX Item "-mprefetchi"
! .IP \fB\-mraoint\fR 4
  .IX Item "-mraoint"
! .IP \fB\-mamx\-complex\fR 4
  .IX Item "-mamx-complex"
! .IP \fB\-mavxvnniint16\fR 4
  .IX Item "-mavxvnniint16"
! .IP \fB\-msm3\fR 4
  .IX Item "-msm3"
! .IP \fB\-msha512\fR 4
  .IX Item "-msha512"
! .IP \fB\-msm4\fR 4
  .IX Item "-msm4"
! .IP \fB\-mapxf\fR 4
  .IX Item "-mapxf"
! .IP \fB\-musermsr\fR 4
  .IX Item "-musermsr"
! .IP \fB\-mavx10.1\fR 4
  .IX Item "-mavx10.1"
! .IP \fB\-mavx10.1\-256\fR 4
  .IX Item "-mavx10.1-256"
! .IP \fB\-mavx10.1\-512\fR 4
  .IX Item "-mavx10.1-512"
  .PD
! These switches enable the use of instructions in the MMX, SSE,
  AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
  AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG,
! WBNOINVD, FMA4, PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP,
! 3DNow!, enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
  XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
  GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B, AVX512BF16,
  ENQCMD, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE,
  UINTR, HRESET, AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512\-FP16,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AMX\-FP16, PREFETCHI, RAOINT,
! AMX\-COMPLEX, AVXVNNIINT16, SM3, SHA512, SM4, APX_F, USER_MSR, AVX10.1 or
! CLDEMOTE extended instruction sets.  Each has a corresponding \fB\-mno\-\fR
  option to disable use of these instructions.
  .Sp
! These extensions are also available as built\-in functions: see
! \&\fBx86 Built\-in Functions\fR, for details of the functions enabled and
  disabled by these switches.
  .Sp
! To generate SSE/SSE2 instructions automatically from floating\-point
  code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
  .Sp
! GCC depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
! generates new AVX instructions or AVX equivalence for all SSEx instructions
  when needed.
  .Sp
! These options enable GCC to use these extended instructions in
  generated code, even without \fB\-mfpmath=sse\fR.  Applications that
! perform run\-time CPU detection must compile separate files for each
  supported architecture, using the appropriate flags.  In particular,
! the file containing the CPU detection code should be compiled without
  these options.
! .IP \fB\-mdump\-tune\-features\fR 4
  .IX Item "-mdump-tune-features"
! This option instructs GCC to dump the names of the x86 performance 
  tuning features and default settings. The names can be used in 
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR.
! .IP \fB\-mtune\-ctrl=\fR\fIfeature\-list\fR 4
  .IX Item "-mtune-ctrl=feature-list"
  This option is used to do fine grain control of x86 code generation features.
! \&\fIfeature\-list\fR is a comma separated list of \fIfeature\fR names. See also
  \&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
  on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR is intended to be used by GCC
  developers. Using it may lead to code paths not covered by testing and can
  potentially result in compiler ICEs or runtime errors.
! .IP \fB\-mno\-default\fR 4
  .IX Item "-mno-default"
! This option instructs GCC to turn off all tunable features. See also 
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR and \fB\-mdump\-tune\-features\fR.
! .IP \fB\-mcld\fR 4
  .IX Item "-mcld"
! This option instructs GCC to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
  of functions that use string instructions.  String instructions depend on
! the DF flag to select between autoincrement or autodecrement mode.  While the
! ABI specifies the DF flag to be cleared on function entry, some operating
! systems violate this specification by not clearing the DF flag in their
! exception dispatchers.  The exception handler can be invoked with the DF flag
  set, which leads to wrong direction mode when string instructions are used.
  This option can be enabled by default on 32\-bit x86 targets by configuring
! GCC with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
  instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
  in this case.
! .IP \fB\-mvzeroupper\fR 4
  .IX Item "-mvzeroupper"
! This option instructs GCC to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
  before a transfer of control flow out of the function to minimize
! the AVX to SSE transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
  intrinsics.
! .IP \fB\-mprefer\-avx128\fR 4
  .IX Item "-mprefer-avx128"
! This option instructs GCC to use 128\-bit AVX instructions instead of
! 256\-bit AVX instructions in the auto\-vectorizer.
! .IP \fB\-mprefer\-vector\-width=\fR\fIopt\fR 4
  .IX Item "-mprefer-vector-width=opt"
! This option instructs GCC to use \fIopt\fR\-bit vector width in instructions
  instead of default on the selected platform.
! .IP \fB\-mpartial\-vector\-fp\-math\fR 4
  .IX Item "-mpartial-vector-fp-math"
! This option enables GCC to generate floating\-point operations that might
! affect the set of floating\-point status flags on partial vectors, where
! vector elements reside in the low part of the 128\-bit SSE register.  Unless
  \&\fB\-fno\-trapping\-math\fR is specified, the compiler guarantees correct
  behavior by sanitizing all input operands to have zeroes in the unused
! upper part of the vector register.  Note that by using built\-in functions
  or inline assembly with partial vector arguments, NaNs, denormal or invalid
  values can leak into the upper part of the vector, causing possible
  performance issues when \fB\-fno\-trapping\-math\fR is in effect.  These
  issues can be mitigated by manually sanitizing the upper part of the partial
  vector argument register or by using \fB\-mdaz\-ftz\fR to set
! denormals\-are\-zero (DAZ) flag in the MXCSR register.
  .Sp
  This option is enabled by default.
! .IP \fB\-mmove\-max=\fR\fIbits\fR 4
  .IX Item "-mmove-max=bits"
! This option instructs GCC to set the maximum number of bits can be
  moved from memory to memory efficiently to \fIbits\fR.  The valid
  \&\fIbits\fR are 128, 256 and 512.
! .IP \fB\-mstore\-max=\fR\fIbits\fR 4
  .IX Item "-mstore-max=bits"
! This option instructs GCC to set the maximum number of bits can be
  stored to memory efficiently to \fIbits\fR.  The valid \fIbits\fR are
  128, 256 and 512.
  .RS 4
! .IP \fBnone\fR 4
  .IX Item "none"
! No extra limitations applied to GCC other than defined by the selected platform.
! .IP \fB128\fR 4
  .IX Item "128"
  Prefer 128\-bit vector width for instructions.
! .IP \fB256\fR 4
  .IX Item "256"
  Prefer 256\-bit vector width for instructions.
! .IP \fB512\fR 4
  .IX Item "512"
  Prefer 512\-bit vector width for instructions.
  .RE
  .RS 4
  .RE
! .IP \fB\-mnoreturn\-no\-callee\-saved\-registers\fR 4
  .IX Item "-mnoreturn-no-callee-saved-registers"
  This option optimizes functions with \f(CW\*(C`noreturn\*(C'\fR attribute or
! \&\f(CW\*(C`_Noreturn\*(C'\fR specifier by not saving in the function prologue callee\-saved
  registers which are used in the function (except for the \f(CW\*(C`BP\*(C'\fR
  register).  This option can interfere with debugging of the caller of the
  \&\f(CW\*(C`noreturn\*(C'\fR function or any function further up in the call stack, so it
  is not enabled by default.
! .IP \fB\-mcx16\fR 4
  .IX Item "-mcx16"
! This option enables GCC to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions in 64\-bit
! code to implement compare\-and\-exchange operations on 16\-byte aligned 128\-bit
  objects.  This is useful for atomic updates of data structures exceeding one
  machine word in size.  The compiler uses this instruction to implement
  \&\fB_\|_sync Builtins\fR.  However, for \fB_\|_atomic Builtins\fR operating on
  128\-bit integers, a library call is always used.
! .IP \fB\-msahf\fR 4
  .IX Item "-msahf"
  This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
  Early Intel Pentium 4 CPUs with Intel 64 support,
  prior to the introduction of Pentium 4 G1 step in December 2005,
  lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
! which are supported by AMD64.
  These are load and store instructions, respectively, for certain status flags.
  In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
! \&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built\-in functions;
  see \fBOther Builtins\fR for details.
! .IP \fB\-mmovbe\fR 4
  .IX Item "-mmovbe"
  This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to optimize
  byte swapping of four and eight byte entities.
! .IP \fB\-mshstk\fR 4
  .IX Item "-mshstk"
! The \fB\-mshstk\fR option enables shadow stack built\-in functions
! from x86 Control\-flow Enforcement Technology (CET).
! .IP \fB\-mcrc32\fR 4
  .IX Item "-mcrc32"
! This option enables built\-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
  \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
! .IP \fB\-mmwait\fR 4
  .IX Item "-mmwait"
! This option enables built\-in functions \f(CW\*(C`_\|_builtin_ia32_monitor\*(C'\fR,
  and \f(CW\*(C`_\|_builtin_ia32_mwait\*(C'\fR to generate the \f(CW\*(C`monitor\*(C'\fR and
  \&\f(CW\*(C`mwait\*(C'\fR machine instructions.
! .IP \fB\-mrecip\fR 4
  .IX Item "-mrecip"
  This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
  (and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
! with an additional Newton\-Raphson step
  to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
  (and their vectorized
! variants) for single\-precision floating\-point arguments.  These instructions
  are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
  together with \fB\-ffinite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
  Note that while the throughput of the sequence is higher than the throughput
! of the non\-reciprocal instruction, the precision of the sequence can be
  decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
  .Sp
! Note that GCC implements \f(CW\*(C`1.0f/sqrtf(\fR\f(CIx\fR\f(CW)\*(C'\fR in terms of \f(CW\*(C`RSQRTSS\*(C'\fR
  (or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
! combination), and doesn\*(Aqt need \fB\-mrecip\fR.
  .Sp
! Also note that GCC emits the above sequence with additional Newton\-Raphson step
! for vectorized single\-float division and vectorized \f(CWsqrtf(\fR\f(CIx\fR\f(CW)\fR
  already with \fB\-ffast\-math\fR (or the above option combination), and
! doesn\*(Aqt need \fB\-mrecip\fR.
! .IP \fB\-mrecip=\fR\fIopt\fR 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma\-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP \fBdefault\fR 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP \fBdiv\fR 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP \fBvec\-div\fR 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP \fBsqrt\fR 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP \fBvec\-sqrt\fR 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
  .RE
*************** Enable the approximation for vectorized
*** 34762,34778 ****
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for square root.
  .RE
! .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
  .IX Item "-mveclibabi=type"
! Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
  external library.  Supported values for \fItype\fR are \fBsvml\fR 
  for the Intel short
! vector math library and \fBacml\fR for the \s-1AMD\s0 math core library.
  To use this option, both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an \s-1SVML\s0 or \s-1ACML\s0 
! ABI-compatible library must be specified at link time.
  .Sp
! \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
  \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
  \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
  \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
--- 34696,34712 ----
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for square root.
  .RE
! .IP \fB\-mveclibabi=\fR\fItype\fR 4
  .IX Item "-mveclibabi=type"
! Specifies the ABI type to use for vectorizing intrinsics using an
  external library.  Supported values for \fItype\fR are \fBsvml\fR 
  for the Intel short
! vector math library and \fBacml\fR for the AMD math core library.
  To use this option, both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an SVML or ACML 
! ABI\-compatible library must be specified at link time.
  .Sp
! GCC currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
  \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
  \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
  \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
*************** function type when \fB\-mveclibabi=svml\
*** 34788,34874 ****
  \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
  \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
  when \fB\-mveclibabi=acml\fR is used.
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
  Generate code for the specified calling convention.  Permissible values
! are \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems, and
! \&\fBms\fR for the Microsoft \s-1ABI.\s0  The default is to use the Microsoft
! \&\s-1ABI\s0 when targeting Microsoft Windows and the SysV \s-1ABI\s0 on all other systems.
  You can control this behavior for specific functions by
  using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
! .IP "\fB\-mforce\-indirect\-call\fR" 4
  .IX Item "-mforce-indirect-call"
  Force all calls to functions to be indirect. This is useful
  when using Intel Processor Trace where it generates more precise timing
  information for function calls.
! .IP "\fB\-mmanual\-endbr\fR" 4
  .IX Item "-mmanual-endbr"
! Insert \s-1ENDBR\s0 instruction at function entry only via the \f(CW\*(C`cf_check\*(C'\fR
  function attribute. This is useful when used with the option
! \&\fB\-fcf\-protection=branch\fR to control \s-1ENDBR\s0 insertion at the
  function entry.
! .IP "\fB\-mcet\-switch\fR" 4
  .IX Item "-mcet-switch"
! By default, \s-1CET\s0 instrumentation is turned off on switch statements that
  use a jump table and indirect branch track is disabled.  Since jump
! tables are stored in read-only memory, this does not result in a direct
! loss of hardening.  But if the jump table index is attacker-controlled,
! the indirect jump may not be constrained by \s-1CET.\s0  This option turns on
! \&\s-1CET\s0 instrumentation to enable indirect branch track for switch statements
  with jump tables which leads to the jump targets reachable via any indirect
  jumps.
! .IP "\fB\-mcall\-ms2sysv\-xlogues\fR" 4
  .IX Item "-mcall-ms2sysv-xlogues"
! Due to differences in 64\-bit ABIs, any Microsoft \s-1ABI\s0 function that calls a
! System V \s-1ABI\s0 function must consider \s-1RSI, RDI\s0 and \s-1XMM6\-15\s0 as clobbered.  By
  default, the code for saving and restoring these registers is emitted inline,
  resulting in fairly lengthy prologues and epilogues.  Using
  \&\fB\-mcall\-ms2sysv\-xlogues\fR emits prologues and epilogues that
  use stubs in the static portion of libgcc to perform these saves and restores,
  thus reducing function size at the cost of a few extra instructions.
! .IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
  .IX Item "-mtls-dialect=type"
! Generate code to access thread-local storage using the \fBgnu\fR or
  \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
! \&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
  requirements that cannot be satisfied on all systems.
! .IP "\fB\-mpush\-args\fR" 4
  .IX Item "-mpush-args"
  .PD 0
! .IP "\fB\-mno\-push\-args\fR" 4
  .IX Item "-mno-push-args"
  .PD
! Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
! and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
  by default.  In some cases disabling it may improve performance because of
  improved scheduling and reduced dependencies.
! .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
  .IX Item "-maccumulate-outgoing-args"
  If enabled, the maximum amount of space required for outgoing arguments is
  computed in the function prologue.  This is faster on most modern CPUs
  because of reduced dependencies, improved scheduling and reduced stack usage
  when the preferred stack boundary is not equal to 2.  The drawback is a notable
  increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
! .IP "\fB\-mthreads\fR" 4
  .IX Item "-mthreads"
! Support thread-safe exception handling on MinGW.  Programs that rely
! on thread-safe exception handling must compile and link all code with the
  \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
  \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
! \&\fB\-lmingwthrd\fR which cleans up per-thread exception-handling data.
! .IP "\fB\-mms\-bitfields\fR" 4
  .IX Item "-mms-bitfields"
  .PD 0
! .IP "\fB\-mno\-ms\-bitfields\fR" 4
  .IX Item "-mno-ms-bitfields"
  .PD
! Enable/disable bit-field layout compatible with the native Microsoft
  Windows compiler.
  .Sp
! If \f(CW\*(C`packed\*(C'\fR is used on a structure, or if bit-fields are used,
! it may be that the Microsoft \s-1ABI\s0 lays out the structure differently
! than the way \s-1GCC\s0 normally does.  Particularly when moving packed
! data between functions compiled with \s-1GCC\s0 and the native Microsoft compiler
  (either via function call or as data in a file), it may be necessary to access
  either format.
  .Sp
--- 34722,34808 ----
  \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
  \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
  when \fB\-mveclibabi=acml\fR is used.
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
  Generate code for the specified calling convention.  Permissible values
! are \fBsysv\fR for the ABI used on GNU/Linux and other systems, and
! \&\fBms\fR for the Microsoft ABI.  The default is to use the Microsoft
! ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
  You can control this behavior for specific functions by
  using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
! .IP \fB\-mforce\-indirect\-call\fR 4
  .IX Item "-mforce-indirect-call"
  Force all calls to functions to be indirect. This is useful
  when using Intel Processor Trace where it generates more precise timing
  information for function calls.
! .IP \fB\-mmanual\-endbr\fR 4
  .IX Item "-mmanual-endbr"
! Insert ENDBR instruction at function entry only via the \f(CW\*(C`cf_check\*(C'\fR
  function attribute. This is useful when used with the option
! \&\fB\-fcf\-protection=branch\fR to control ENDBR insertion at the
  function entry.
! .IP \fB\-mcet\-switch\fR 4
  .IX Item "-mcet-switch"
! By default, CET instrumentation is turned off on switch statements that
  use a jump table and indirect branch track is disabled.  Since jump
! tables are stored in read\-only memory, this does not result in a direct
! loss of hardening.  But if the jump table index is attacker\-controlled,
! the indirect jump may not be constrained by CET.  This option turns on
! CET instrumentation to enable indirect branch track for switch statements
  with jump tables which leads to the jump targets reachable via any indirect
  jumps.
! .IP \fB\-mcall\-ms2sysv\-xlogues\fR 4
  .IX Item "-mcall-ms2sysv-xlogues"
! Due to differences in 64\-bit ABIs, any Microsoft ABI function that calls a
! System V ABI function must consider RSI, RDI and XMM6\-15 as clobbered.  By
  default, the code for saving and restoring these registers is emitted inline,
  resulting in fairly lengthy prologues and epilogues.  Using
  \&\fB\-mcall\-ms2sysv\-xlogues\fR emits prologues and epilogues that
  use stubs in the static portion of libgcc to perform these saves and restores,
  thus reducing function size at the cost of a few extra instructions.
! .IP \fB\-mtls\-dialect=\fR\fItype\fR 4
  .IX Item "-mtls-dialect=type"
! Generate code to access thread\-local storage using the \fBgnu\fR or
  \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
! \&\fBgnu2\fR is more efficient, but it may add compile\- and run\-time
  requirements that cannot be satisfied on all systems.
! .IP \fB\-mpush\-args\fR 4
  .IX Item "-mpush-args"
  .PD 0
! .IP \fB\-mno\-push\-args\fR 4
  .IX Item "-mno-push-args"
  .PD
! Use PUSH operations to store outgoing parameters.  This method is shorter
! and usually equally fast as method using SUB/MOV operations and is enabled
  by default.  In some cases disabling it may improve performance because of
  improved scheduling and reduced dependencies.
! .IP \fB\-maccumulate\-outgoing\-args\fR 4
  .IX Item "-maccumulate-outgoing-args"
  If enabled, the maximum amount of space required for outgoing arguments is
  computed in the function prologue.  This is faster on most modern CPUs
  because of reduced dependencies, improved scheduling and reduced stack usage
  when the preferred stack boundary is not equal to 2.  The drawback is a notable
  increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
! .IP \fB\-mthreads\fR 4
  .IX Item "-mthreads"
! Support thread\-safe exception handling on MinGW.  Programs that rely
! on thread\-safe exception handling must compile and link all code with the
  \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
  \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
! \&\fB\-lmingwthrd\fR which cleans up per\-thread exception\-handling data.
! .IP \fB\-mms\-bitfields\fR 4
  .IX Item "-mms-bitfields"
  .PD 0
! .IP \fB\-mno\-ms\-bitfields\fR 4
  .IX Item "-mno-ms-bitfields"
  .PD
! Enable/disable bit\-field layout compatible with the native Microsoft
  Windows compiler.
  .Sp
! If \f(CW\*(C`packed\*(C'\fR is used on a structure, or if bit\-fields are used,
! it may be that the Microsoft ABI lays out the structure differently
! than the way GCC normally does.  Particularly when moving packed
! data between functions compiled with GCC and the native Microsoft compiler
  (either via function call or as data in a file), it may be necessary to access
  either format.
  .Sp
*************** or type attributes.  For more informatio
*** 34878,34886 ****
  and \fBx86 Type Attributes\fR.
  .Sp
  The Microsoft structure layout algorithm is fairly simple with the exception
! of the bit-field packing.  
! The padding and alignment of members of structures and whether a bit-field 
! can straddle a storage-unit boundary are determine by these rules:
  .RS 4
  .IP "1. Structure members are stored sequentially in the order in which they are" 4
  .IX Item "1. Structure members are stored sequentially in the order in which they are"
--- 34812,34820 ----
  and \fBx86 Type Attributes\fR.
  .Sp
  The Microsoft structure layout algorithm is fairly simple with the exception
! of the bit\-field packing.  
! The padding and alignment of members of structures and whether a bit\-field 
! can straddle a storage\-unit boundary are determine by these rules:
  .RS 4
  .IP "1. Structure members are stored sequentially in the order in which they are" 4
  .IX Item "1. Structure members are stored sequentially in the order in which they are"
*************** Every object is allocated an offset so t
*** 34898,34915 ****
  .Vb 1
  \&        offset % alignment_requirement == 0
  .Ve
! .IP "3. Adjacent bit-fields are packed into the same 1\-, 2\-, or 4\-byte allocation" 4
  .IX Item "3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation"
! unit if the integral types are the same size and if the next bit-field fits
  into the current allocation unit without crossing the boundary imposed by the
! common alignment requirements of the bit-fields.
  .RE
  .RS 4
  .Sp
! \&\s-1MSVC\s0 interprets zero-length bit-fields in the following ways:
! .IP "1. If a zero-length bit-field is inserted between two bit-fields that" 4
  .IX Item "1. If a zero-length bit-field is inserted between two bit-fields that"
! are normally coalesced, the bit-fields are not coalesced.
  .Sp
  For example:
  .Sp
--- 34832,34849 ----
  .Vb 1
  \&        offset % alignment_requirement == 0
  .Ve
! .IP "3. Adjacent bit\-fields are packed into the same 1\-, 2\-, or 4\-byte allocation" 4
  .IX Item "3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation"
! unit if the integral types are the same size and if the next bit\-field fits
  into the current allocation unit without crossing the boundary imposed by the
! common alignment requirements of the bit\-fields.
  .RE
  .RS 4
  .Sp
! MSVC interprets zero\-length bit\-fields in the following ways:
! .IP "1. If a zero\-length bit\-field is inserted between two bit\-fields that" 4
  .IX Item "1. If a zero-length bit-field is inserted between two bit-fields that"
! are normally coalesced, the bit\-fields are not coalesced.
  .Sp
  For example:
  .Sp
*************** For example:
*** 34922,34934 ****
  \&         } t1;
  .Ve
  .Sp
! The size of \f(CW\*(C`t1\*(C'\fR is 8 bytes with the zero-length bit-field.  If the
! zero-length bit-field were removed, \f(CW\*(C`t1\*(C'\fR's size would be 4 bytes.
! .ie n .IP "2. If a zero-length bit-field is inserted after a bit-field, ""foo"", and the" 4
! .el .IP "2. If a zero-length bit-field is inserted after a bit-field, \f(CWfoo\fR, and the" 4
  .IX Item "2. If a zero-length bit-field is inserted after a bit-field, foo, and the"
! alignment of the zero-length bit-field is greater than the member that follows it,
! \&\f(CW\*(C`bar\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is aligned as the type of the zero-length bit-field.
  .Sp
  For example:
  .Sp
--- 34856,34868 ----
  \&         } t1;
  .Ve
  .Sp
! The size of \f(CW\*(C`t1\*(C'\fR is 8 bytes with the zero\-length bit\-field.  If the
! zero\-length bit\-field were removed, \f(CW\*(C`t1\*(C'\fR\*(Aqs size would be 4 bytes.
! .ie n .IP "2. If a zero\-length bit\-field is inserted after a bit\-field, ""foo"", and the" 4
! .el .IP "2. If a zero\-length bit\-field is inserted after a bit\-field, \f(CWfoo\fR, and the" 4
  .IX Item "2. If a zero-length bit-field is inserted after a bit-field, foo, and the"
! alignment of the zero\-length bit\-field is greater than the member that follows it,
! \&\f(CW\*(C`bar\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is aligned as the type of the zero\-length bit\-field.
  .Sp
  For example:
  .Sp
*************** For example:
*** 34949,34966 ****
  .Ve
  .Sp
  For \f(CW\*(C`t2\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is placed at offset 2, rather than offset 1.
! Accordingly, the size of \f(CW\*(C`t2\*(C'\fR is 4.  For \f(CW\*(C`t3\*(C'\fR, the zero-length
! bit-field does not affect the alignment of \f(CW\*(C`bar\*(C'\fR or, as a result, the size
  of the structure.
  .Sp
  Taking this into account, it is important to note the following:
  .RS 4
! .IP "1. If a zero-length bit-field follows a normal bit-field, the type of the" 4
  .IX Item "1. If a zero-length bit-field follows a normal bit-field, the type of the"
! zero-length bit-field may affect the alignment of the structure as whole. For
! example, \f(CW\*(C`t2\*(C'\fR has a size of 4 bytes, since the zero-length bit-field follows a
! normal bit-field, and is of type short.
! .IP "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may" 4
  .IX Item "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may"
  still affect the alignment of the structure:
  .Sp
--- 34883,34900 ----
  .Ve
  .Sp
  For \f(CW\*(C`t2\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is placed at offset 2, rather than offset 1.
! Accordingly, the size of \f(CW\*(C`t2\*(C'\fR is 4.  For \f(CW\*(C`t3\*(C'\fR, the zero\-length
! bit\-field does not affect the alignment of \f(CW\*(C`bar\*(C'\fR or, as a result, the size
  of the structure.
  .Sp
  Taking this into account, it is important to note the following:
  .RS 4
! .IP "1. If a zero\-length bit\-field follows a normal bit\-field, the type of the" 4
  .IX Item "1. If a zero-length bit-field follows a normal bit-field, the type of the"
! zero\-length bit\-field may affect the alignment of the structure as whole. For
! example, \f(CW\*(C`t2\*(C'\fR has a size of 4 bytes, since the zero\-length bit\-field follows a
! normal bit\-field, and is of type short.
! .IP "2. Even if a zero\-length bit\-field is not followed by a normal bit\-field, it may" 4
  .IX Item "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may"
  still affect the alignment of the structure:
  .Sp
*************** Here, \f(CW\*(C`t4\*(C'\fR takes up 4 by
*** 34976,34982 ****
  .RE
  .RS 4
  .RE
! .IP "3. Zero-length bit-fields following non-bit-field members are ignored:" 4
  .IX Item "3. Zero-length bit-fields following non-bit-field members are ignored:"
  .Vb 6
  \&        struct
--- 34910,34916 ----
  .RE
  .RS 4
  .RE
! .IP "3. Zero\-length bit\-fields following non\-bit\-field members are ignored:" 4
  .IX Item "3. Zero-length bit-fields following non-bit-field members are ignored:"
  .Vb 6
  \&        struct
*************** Here, \f(CW\*(C`t5\*(C'\fR takes up 2 by
*** 34991,35180 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mno\-align\-stringops\fR" 4
  .IX Item "-mno-align-stringops"
  Do not align the destination of inlined string operations.  This switch reduces
  code size and improves performance in case the destination is already aligned,
! but \s-1GCC\s0 doesn't know about it.
! .IP "\fB\-minline\-all\-stringops\fR" 4
  .IX Item "-minline-all-stringops"
! By default \s-1GCC\s0 inlines string operations only when the destination is 
  known to be aligned to least a 4\-byte boundary.  
  This enables more inlining and increases code
  size, but may improve performance of code that depends on fast
  \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memset\*(C'\fR for short lengths.
  The option enables inline expansion of \f(CW\*(C`strlen\*(C'\fR for all
  pointer alignments.
! .IP "\fB\-minline\-stringops\-dynamically\fR" 4
  .IX Item "-minline-stringops-dynamically"
! For string operations of unknown size, use run-time checks with
  inline code for small blocks and a library call for large blocks.
! .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
  .IX Item "-mstringop-strategy=alg"
  Override the internal decision heuristic for the particular algorithm to use
  for inlining string operations.  The allowed values for \fIalg\fR are:
  .RS 4
! .IP "\fBrep_byte\fR" 4
  .IX Item "rep_byte"
  .PD 0
! .IP "\fBrep_4byte\fR" 4
  .IX Item "rep_4byte"
! .IP "\fBrep_8byte\fR" 4
  .IX Item "rep_8byte"
  .PD
  Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
! .IP "\fBbyte_loop\fR" 4
  .IX Item "byte_loop"
  .PD 0
! .IP "\fBloop\fR" 4
  .IX Item "loop"
! .IP "\fBunrolled_loop\fR" 4
  .IX Item "unrolled_loop"
  .PD
  Expand into an inline loop.
! .IP "\fBlibcall\fR" 4
  .IX Item "libcall"
  Always use a library call.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR" 4
  .IX Item "-mmemcpy-strategy=strategy"
  Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
  should be inlined and what inline algorithm to use when the expected size
  of the copy operation is known. \fIstrategy\fR 
! is a comma-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
  \&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
  the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
! triplet, the \fImax_size\fR must be \f(CW\*(C`\-1\*(C'\fR. The \fImax_size\fR of the triplets
  in the list must be specified in increasing order.  The minimal byte size for 
! \&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\f(CImax_size\f(CW + 1\*(C'\fR of the 
  preceding range.
! .IP "\fB\-mmemset\-strategy=\fR\fIstrategy\fR" 4
  .IX Item "-mmemset-strategy=strategy"
  The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
  \&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
! .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-momit-leaf-frame-pointer"
! Don't keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up, and restore frame pointers and
  makes an extra register available in leaf functions.  The option
  \&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
  which might make debugging harder.
! .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
  .IX Item "-mtls-direct-seg-refs"
  .PD 0
! .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
  .IX Item "-mno-tls-direct-seg-refs"
  .PD
! Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
! \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
  or whether the thread base pointer must be added.  Whether or not this
  is valid depends on the operating system, and whether it maps the
! segment to cover the entire \s-1TLS\s0 area.
  .Sp
! For systems that use the \s-1GNU C\s0 Library, the default is on.
! .IP "\fB\-msse2avx\fR" 4
  .IX Item "-msse2avx"
  .PD 0
! .IP "\fB\-mno\-sse2avx\fR" 4
  .IX Item "-mno-sse2avx"
  .PD
! Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
  prefix.  The option \fB\-mavx\fR turns this on by default.
! .IP "\fB\-mfentry\fR" 4
  .IX Item "-mfentry"
  .PD 0
! .IP "\fB\-mno\-fentry\fR" 4
  .IX Item "-mno-fentry"
  .PD
  If profiling is active (\fB\-pg\fR), put the profiling
  counter call before the prologue.
  Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
! isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
! .IP "\fB\-mrecord\-mcount\fR" 4
  .IX Item "-mrecord-mcount"
  .PD 0
! .IP "\fB\-mno\-record\-mcount\fR" 4
  .IX Item "-mno-record-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
  that contains pointers to each profiling call. This is useful for
  automatically patching and out calls.
! .IP "\fB\-mnop\-mcount\fR" 4
  .IX Item "-mnop-mcount"
  .PD 0
! .IP "\fB\-mno\-nop\-mcount\fR" 4
  .IX Item "-mno-nop-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate the calls to
  the profiling functions as NOPs. This is useful when they
  should be patched in later dynamically. This is likely only
  useful together with \fB\-mrecord\-mcount\fR.
! .IP "\fB\-minstrument\-return=\fR\fItype\fR" 4
  .IX Item "-minstrument-return=type"
  Instrument function exit in \-pg \-mfentry instrumented functions with
  call to specified function. This only instruments true returns ending
  with ret, but not sibling calls ending with jump. Valid types
  are \fInone\fR to not instrument, \fIcall\fR to generate a call to _\|_return_\|_,
  or \fInop5\fR to generate a 5 byte nop.
! .IP "\fB\-mrecord\-return\fR" 4
  .IX Item "-mrecord-return"
  .PD 0
! .IP "\fB\-mno\-record\-return\fR" 4
  .IX Item "-mno-record-return"
  .PD
  Generate a _\|_return_loc section pointing to all return instrumentation code.
! .IP "\fB\-mfentry\-name=\fR\fIname\fR" 4
  .IX Item "-mfentry-name=name"
  Set name of _\|_fentry_\|_ symbol called at function entry for \-pg \-mfentry functions.
! .IP "\fB\-mfentry\-section=\fR\fIname\fR" 4
  .IX Item "-mfentry-section=name"
  Set name of section to record \-mrecord\-mcount calls (default _\|_mcount_loc).
! .IP "\fB\-mskip\-rax\-setup\fR" 4
  .IX Item "-mskip-rax-setup"
  .PD 0
! .IP "\fB\-mno\-skip\-rax\-setup\fR" 4
  .IX Item "-mno-skip-rax-setup"
  .PD
! When generating code for the x86\-64 architecture with \s-1SSE\s0 extensions
! disabled, \fB\-mskip\-rax\-setup\fR can be used to skip setting up \s-1RAX\s0
  register when there are no variable arguments passed in vector registers.
  .Sp
! \&\fBWarning:\fR Since \s-1RAX\s0 register is used to avoid unnecessarily
  saving vector registers on stack when passing variable arguments, the
  impacts of this option are callees may waste some stack space,
! misbehave or jump to a random location.  \s-1GCC 4.4\s0 or newer don't have
! those issues, regardless the \s-1RAX\s0 register value.
! .IP "\fB\-m8bit\-idiv\fR" 4
  .IX Item "-m8bit-idiv"
  .PD 0
! .IP "\fB\-mno\-8bit\-idiv\fR" 4
  .IX Item "-mno-8bit-idiv"
  .PD
  On some processors, like Intel Atom, 8\-bit unsigned integer divide is
  much faster than 32\-bit/64\-bit integer divide.  This option generates a
! run-time check.  If both dividend and divisor are within range of 0
  to 255, 8\-bit unsigned integer divide is used instead of
  32\-bit/64\-bit integer divide.
! .IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
  .IX Item "-mavx256-split-unaligned-load"
  .PD 0
! .IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
  .IX Item "-mavx256-split-unaligned-store"
  .PD
! Split 32\-byte \s-1AVX\s0 unaligned load and store.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
! canary in the \s-1TLS\s0 block (the default).  This option has effect only when
  \&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
  .Sp
  With the latter choice the options
--- 34925,35114 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mno\-align\-stringops\fR 4
  .IX Item "-mno-align-stringops"
  Do not align the destination of inlined string operations.  This switch reduces
  code size and improves performance in case the destination is already aligned,
! but GCC doesn\*(Aqt know about it.
! .IP \fB\-minline\-all\-stringops\fR 4
  .IX Item "-minline-all-stringops"
! By default GCC inlines string operations only when the destination is 
  known to be aligned to least a 4\-byte boundary.  
  This enables more inlining and increases code
  size, but may improve performance of code that depends on fast
  \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memset\*(C'\fR for short lengths.
  The option enables inline expansion of \f(CW\*(C`strlen\*(C'\fR for all
  pointer alignments.
! .IP \fB\-minline\-stringops\-dynamically\fR 4
  .IX Item "-minline-stringops-dynamically"
! For string operations of unknown size, use run\-time checks with
  inline code for small blocks and a library call for large blocks.
! .IP \fB\-mstringop\-strategy=\fR\fIalg\fR 4
  .IX Item "-mstringop-strategy=alg"
  Override the internal decision heuristic for the particular algorithm to use
  for inlining string operations.  The allowed values for \fIalg\fR are:
  .RS 4
! .IP \fBrep_byte\fR 4
  .IX Item "rep_byte"
  .PD 0
! .IP \fBrep_4byte\fR 4
  .IX Item "rep_4byte"
! .IP \fBrep_8byte\fR 4
  .IX Item "rep_8byte"
  .PD
  Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
! .IP \fBbyte_loop\fR 4
  .IX Item "byte_loop"
  .PD 0
! .IP \fBloop\fR 4
  .IX Item "loop"
! .IP \fBunrolled_loop\fR 4
  .IX Item "unrolled_loop"
  .PD
  Expand into an inline loop.
! .IP \fBlibcall\fR 4
  .IX Item "libcall"
  Always use a library call.
  .RE
  .RS 4
  .RE
! .IP \fB\-mmemcpy\-strategy=\fR\fIstrategy\fR 4
  .IX Item "-mmemcpy-strategy=strategy"
  Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
  should be inlined and what inline algorithm to use when the expected size
  of the copy operation is known. \fIstrategy\fR 
! is a comma\-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
  \&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
  the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
! triplet, the \fImax_size\fR must be \f(CW\-1\fR. The \fImax_size\fR of the triplets
  in the list must be specified in increasing order.  The minimal byte size for 
! \&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\fR\f(CImax_size\fR\f(CW + 1\*(C'\fR of the 
  preceding range.
! .IP \fB\-mmemset\-strategy=\fR\fIstrategy\fR 4
  .IX Item "-mmemset-strategy=strategy"
  The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
  \&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
! .IP \fB\-momit\-leaf\-frame\-pointer\fR 4
  .IX Item "-momit-leaf-frame-pointer"
! Don\*(Aqt keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up, and restore frame pointers and
  makes an extra register available in leaf functions.  The option
  \&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
  which might make debugging harder.
! .IP \fB\-mtls\-direct\-seg\-refs\fR 4
  .IX Item "-mtls-direct-seg-refs"
  .PD 0
! .IP \fB\-mno\-tls\-direct\-seg\-refs\fR 4
  .IX Item "-mno-tls-direct-seg-refs"
  .PD
! Controls whether TLS variables may be accessed with offsets from the
! TLS segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
  or whether the thread base pointer must be added.  Whether or not this
  is valid depends on the operating system, and whether it maps the
! segment to cover the entire TLS area.
  .Sp
! For systems that use the GNU C Library, the default is on.
! .IP \fB\-msse2avx\fR 4
  .IX Item "-msse2avx"
  .PD 0
! .IP \fB\-mno\-sse2avx\fR 4
  .IX Item "-mno-sse2avx"
  .PD
! Specify that the assembler should encode SSE instructions with VEX
  prefix.  The option \fB\-mavx\fR turns this on by default.
! .IP \fB\-mfentry\fR 4
  .IX Item "-mfentry"
  .PD 0
! .IP \fB\-mno\-fentry\fR 4
  .IX Item "-mno-fentry"
  .PD
  If profiling is active (\fB\-pg\fR), put the profiling
  counter call before the prologue.
  Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
! isn\*(Aqt possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
! .IP \fB\-mrecord\-mcount\fR 4
  .IX Item "-mrecord-mcount"
  .PD 0
! .IP \fB\-mno\-record\-mcount\fR 4
  .IX Item "-mno-record-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
  that contains pointers to each profiling call. This is useful for
  automatically patching and out calls.
! .IP \fB\-mnop\-mcount\fR 4
  .IX Item "-mnop-mcount"
  .PD 0
! .IP \fB\-mno\-nop\-mcount\fR 4
  .IX Item "-mno-nop-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate the calls to
  the profiling functions as NOPs. This is useful when they
  should be patched in later dynamically. This is likely only
  useful together with \fB\-mrecord\-mcount\fR.
! .IP \fB\-minstrument\-return=\fR\fItype\fR 4
  .IX Item "-minstrument-return=type"
  Instrument function exit in \-pg \-mfentry instrumented functions with
  call to specified function. This only instruments true returns ending
  with ret, but not sibling calls ending with jump. Valid types
  are \fInone\fR to not instrument, \fIcall\fR to generate a call to _\|_return_\|_,
  or \fInop5\fR to generate a 5 byte nop.
! .IP \fB\-mrecord\-return\fR 4
  .IX Item "-mrecord-return"
  .PD 0
! .IP \fB\-mno\-record\-return\fR 4
  .IX Item "-mno-record-return"
  .PD
  Generate a _\|_return_loc section pointing to all return instrumentation code.
! .IP \fB\-mfentry\-name=\fR\fIname\fR 4
  .IX Item "-mfentry-name=name"
  Set name of _\|_fentry_\|_ symbol called at function entry for \-pg \-mfentry functions.
! .IP \fB\-mfentry\-section=\fR\fIname\fR 4
  .IX Item "-mfentry-section=name"
  Set name of section to record \-mrecord\-mcount calls (default _\|_mcount_loc).
! .IP \fB\-mskip\-rax\-setup\fR 4
  .IX Item "-mskip-rax-setup"
  .PD 0
! .IP \fB\-mno\-skip\-rax\-setup\fR 4
  .IX Item "-mno-skip-rax-setup"
  .PD
! When generating code for the x86\-64 architecture with SSE extensions
! disabled, \fB\-mskip\-rax\-setup\fR can be used to skip setting up RAX
  register when there are no variable arguments passed in vector registers.
  .Sp
! \&\fBWarning:\fR Since RAX register is used to avoid unnecessarily
  saving vector registers on stack when passing variable arguments, the
  impacts of this option are callees may waste some stack space,
! misbehave or jump to a random location.  GCC 4.4 or newer don\*(Aqt have
! those issues, regardless the RAX register value.
! .IP \fB\-m8bit\-idiv\fR 4
  .IX Item "-m8bit-idiv"
  .PD 0
! .IP \fB\-mno\-8bit\-idiv\fR 4
  .IX Item "-mno-8bit-idiv"
  .PD
  On some processors, like Intel Atom, 8\-bit unsigned integer divide is
  much faster than 32\-bit/64\-bit integer divide.  This option generates a
! run\-time check.  If both dividend and divisor are within range of 0
  to 255, 8\-bit unsigned integer divide is used instead of
  32\-bit/64\-bit integer divide.
! .IP \fB\-mavx256\-split\-unaligned\-load\fR 4
  .IX Item "-mavx256-split-unaligned-load"
  .PD 0
! .IP \fB\-mavx256\-split\-unaligned\-store\fR 4
  .IX Item "-mavx256-split-unaligned-store"
  .PD
! Split 32\-byte AVX unaligned load and store.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per\-thread
! canary in the TLS block (the default).  This option has effect only when
  \&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
  .Sp
  With the latter choice the options
*************** With the latter choice the options
*** 35182,35207 ****
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which segment register (\f(CW%fs\fR or \f(CW%gs\fR) to use as base register
  for reading the canary, and from what offset from that base register.
! The default for those is as specified in the relevant \s-1ABI.\s0
! .IP "\fB\-mgeneral\-regs\-only\fR" 4
  .IX Item "-mgeneral-regs-only"
! Generate code that uses only the general-purpose registers.  This
! prevents the compiler from using floating-point, vector, mask and bound
  registers.
! .IP "\fB\-mrelax\-cmpxchg\-loop\fR" 4
  .IX Item "-mrelax-cmpxchg-loop"
! When emitting a compare-and-swap loop for \fB_\|_sync Builtins\fR
  and \fB_\|_atomic Builtins\fR lacking a native instruction, optimize
  for the highly contended case by issuing an atomic load before the
  \&\f(CW\*(C`CMPXCHG\*(C'\fR instruction, and using the \f(CW\*(C`PAUSE\*(C'\fR instruction
! to save \s-1CPU\s0 power when restarting the loop.
! .IP "\fB\-mindirect\-branch=\fR\fIchoice\fR" 4
  .IX Item "-mindirect-branch=choice"
  Convert indirect call and jump with \fIchoice\fR.  The default is
  \&\fBkeep\fR, which keeps indirect call and jump unmodified.
  \&\fBthunk\fR converts indirect call and jump to call and return thunk.
! \&\fBthunk-inline\fR converts indirect call and jump to inlined call
! and return thunk.  \fBthunk-extern\fR converts indirect call and jump
  to external call and return thunk provided in a separate object file.
  You can control this behavior for a specific function by using the
  function attribute \f(CW\*(C`indirect_branch\*(C'\fR.
--- 35116,35141 ----
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which segment register (\f(CW%fs\fR or \f(CW%gs\fR) to use as base register
  for reading the canary, and from what offset from that base register.
! The default for those is as specified in the relevant ABI.
! .IP \fB\-mgeneral\-regs\-only\fR 4
  .IX Item "-mgeneral-regs-only"
! Generate code that uses only the general\-purpose registers.  This
! prevents the compiler from using floating\-point, vector, mask and bound
  registers.
! .IP \fB\-mrelax\-cmpxchg\-loop\fR 4
  .IX Item "-mrelax-cmpxchg-loop"
! When emitting a compare\-and\-swap loop for \fB_\|_sync Builtins\fR
  and \fB_\|_atomic Builtins\fR lacking a native instruction, optimize
  for the highly contended case by issuing an atomic load before the
  \&\f(CW\*(C`CMPXCHG\*(C'\fR instruction, and using the \f(CW\*(C`PAUSE\*(C'\fR instruction
! to save CPU power when restarting the loop.
! .IP \fB\-mindirect\-branch=\fR\fIchoice\fR 4
  .IX Item "-mindirect-branch=choice"
  Convert indirect call and jump with \fIchoice\fR.  The default is
  \&\fBkeep\fR, which keeps indirect call and jump unmodified.
  \&\fBthunk\fR converts indirect call and jump to call and return thunk.
! \&\fBthunk\-inline\fR converts indirect call and jump to inlined call
! and return thunk.  \fBthunk\-extern\fR converts indirect call and jump
  to external call and return thunk provided in a separate object file.
  You can control this behavior for a specific function by using the
  function attribute \f(CW\*(C`indirect_branch\*(C'\fR.
*************** not be reachable in the large code model
*** 35213,35280 ****
  .Sp
  Note that \fB\-mindirect\-branch=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control-flow check.
! .IP "\fB\-mfunction\-return=\fR\fIchoice\fR" 4
  .IX Item "-mfunction-return=choice"
  Convert function return with \fIchoice\fR.  The default is \fBkeep\fR,
  which keeps function return unmodified.  \fBthunk\fR converts function
! return to call and return thunk.  \fBthunk-inline\fR converts function
! return to inlined call and return thunk.  \fBthunk-extern\fR converts
  function return to external call and return thunk provided in a separate
  object file.  You can control this behavior for a specific function by
  using the function attribute \f(CW\*(C`function_return\*(C'\fR.
  .Sp
  Note that \fB\-mindirect\-return=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control-flow check.
  .Sp
  Note that \fB\-mcmodel=large\fR is incompatible with
  \&\fB\-mfunction\-return=thunk\fR and
  \&\fB\-mfunction\-return=thunk\-extern\fR since the thunk function may
  not be reachable in the large code model.
! .IP "\fB\-mindirect\-branch\-register\fR" 4
  .IX Item "-mindirect-branch-register"
  Force indirect call and jump via register.
! .IP "\fB\-mharden\-sls=\fR\fIchoice\fR" 4
  .IX Item "-mharden-sls=choice"
! Generate code to mitigate against straight line speculation (\s-1SLS\s0) with
! \&\fIchoice\fR.  The default is \fBnone\fR which disables all \s-1SLS\s0
! hardening.  \fBreturn\fR enables \s-1SLS\s0 hardening for function returns.
! \&\fBindirect-jmp\fR enables \s-1SLS\s0 hardening for indirect jumps.
! \&\fBall\fR enables all \s-1SLS\s0 hardening.
! .IP "\fB\-mindirect\-branch\-cs\-prefix\fR" 4
  .IX Item "-mindirect-branch-cs-prefix"
! Add \s-1CS\s0 prefix to call and jmp to indirect thunk with branch target in
  r8\-r15 registers so that the call and jmp instruction length is 6 bytes
  to allow them to be replaced with \fBlfence; call *%r8\-r15\fR or
! \&\fBlfence; jmp *%r8\-r15\fR at run-time.
! .IP "\fB\-mapx\-inline\-asm\-use\-gpr32\fR" 4
  .IX Item "-mapx-inline-asm-use-gpr32"
! For inline asm support with \s-1APX,\s0 by default the \s-1EGPR\s0 feature was
! disabled to prevent potential illegal instruction with \s-1EGPR\s0 occurs.
  To invoke egpr usage in inline asm, use new compiler option
  \&\-mapx\-inline\-asm\-use\-gpr32 and user should ensure the instruction
! supports \s-1EGPR.\s0
! .IP "\fB\-mevex512\fR" 4
  .IX Item "-mevex512"
  .PD 0
! .IP "\fB\-mno\-evex512\fR" 4
  .IX Item "-mno-evex512"
  .PD
! Enables/disables 512\-bit vector. It will be default on if \s-1AVX512F\s0 is enabled.
  .PP
  These \fB\-m\fR switches are supported in addition to the above
  on x86\-64 processors in 64\-bit environments.
! .IP "\fB\-m32\fR" 4
  .IX Item "-m32"
  .PD 0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
! .IP "\fB\-mx32\fR" 4
  .IX Item "-mx32"
! .IP "\fB\-m16\fR" 4
  .IX Item "-m16"
! .IP "\fB\-miamcu\fR" 4
  .IX Item "-miamcu"
  .PD
  Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
--- 35147,35214 ----
  .Sp
  Note that \fB\-mindirect\-branch=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control\-flow check.
! .IP \fB\-mfunction\-return=\fR\fIchoice\fR 4
  .IX Item "-mfunction-return=choice"
  Convert function return with \fIchoice\fR.  The default is \fBkeep\fR,
  which keeps function return unmodified.  \fBthunk\fR converts function
! return to call and return thunk.  \fBthunk\-inline\fR converts function
! return to inlined call and return thunk.  \fBthunk\-extern\fR converts
  function return to external call and return thunk provided in a separate
  object file.  You can control this behavior for a specific function by
  using the function attribute \f(CW\*(C`function_return\*(C'\fR.
  .Sp
  Note that \fB\-mindirect\-return=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control\-flow check.
  .Sp
  Note that \fB\-mcmodel=large\fR is incompatible with
  \&\fB\-mfunction\-return=thunk\fR and
  \&\fB\-mfunction\-return=thunk\-extern\fR since the thunk function may
  not be reachable in the large code model.
! .IP \fB\-mindirect\-branch\-register\fR 4
  .IX Item "-mindirect-branch-register"
  Force indirect call and jump via register.
! .IP \fB\-mharden\-sls=\fR\fIchoice\fR 4
  .IX Item "-mharden-sls=choice"
! Generate code to mitigate against straight line speculation (SLS) with
! \&\fIchoice\fR.  The default is \fBnone\fR which disables all SLS
! hardening.  \fBreturn\fR enables SLS hardening for function returns.
! \&\fBindirect\-jmp\fR enables SLS hardening for indirect jumps.
! \&\fBall\fR enables all SLS hardening.
! .IP \fB\-mindirect\-branch\-cs\-prefix\fR 4
  .IX Item "-mindirect-branch-cs-prefix"
! Add CS prefix to call and jmp to indirect thunk with branch target in
  r8\-r15 registers so that the call and jmp instruction length is 6 bytes
  to allow them to be replaced with \fBlfence; call *%r8\-r15\fR or
! \&\fBlfence; jmp *%r8\-r15\fR at run\-time.
! .IP \fB\-mapx\-inline\-asm\-use\-gpr32\fR 4
  .IX Item "-mapx-inline-asm-use-gpr32"
! For inline asm support with APX, by default the EGPR feature was
! disabled to prevent potential illegal instruction with EGPR occurs.
  To invoke egpr usage in inline asm, use new compiler option
  \&\-mapx\-inline\-asm\-use\-gpr32 and user should ensure the instruction
! supports EGPR.
! .IP \fB\-mevex512\fR 4
  .IX Item "-mevex512"
  .PD 0
! .IP \fB\-mno\-evex512\fR 4
  .IX Item "-mno-evex512"
  .PD
! Enables/disables 512\-bit vector. It will be default on if AVX512F is enabled.
  .PP
  These \fB\-m\fR switches are supported in addition to the above
  on x86\-64 processors in 64\-bit environments.
! .IP \fB\-m32\fR 4
  .IX Item "-m32"
  .PD 0
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
! .IP \fB\-mx32\fR 4
  .IX Item "-mx32"
! .IP \fB\-m16\fR 4
  .IX Item "-m16"
! .IP \fB\-miamcu\fR 4
  .IX Item "-miamcu"
  .PD
  Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
*************** The \fB\-m16\fR option is the same as \f
*** 35295,35352 ****
  it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
  the assembly output so that the binary can run in 16\-bit mode.
  .Sp
! The \fB\-miamcu\fR option generates code which conforms to Intel \s-1MCU\s0
  psABI.  It requires the \fB\-m32\fR option to be turned on.
! .IP "\fB\-mno\-red\-zone\fR" 4
  .IX Item "-mno-red-zone"
! Do not use a so-called \*(L"red zone\*(R" for x86\-64 code.  The red zone is mandated
! by the x86\-64 \s-1ABI\s0; it is a 128\-byte area beyond the location of the
  stack pointer that is not modified by signal or interrupt handlers
  and therefore can be used for temporary data without adjusting the stack
  pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model: the program and its symbols must
! be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
  Programs can be statically or dynamically linked.  This is the default
  code model.
! .IP "\fB\-mcmodel=kernel\fR" 4
  .IX Item "-mcmodel=kernel"
  Generate code for the kernel code model.  The kernel runs in the
! negative 2 \s-1GB\s0 of the address space.
  This model has to be used for Linux kernel code.
! .IP "\fB\-mcmodel=medium\fR" 4
  .IX Item "-mcmodel=medium"
  Generate code for the medium model: the program is linked in the lower 2
! \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
  with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
! large data or \s-1BSS\s0 sections and can be located above 2GB.  Programs can
  be statically or dynamically linked.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
  Generate code for the large model.  This model makes no assumptions
  about addresses and sizes of sections.
! .IP "\fB\-maddress\-mode=long\fR" 4
  .IX Item "-maddress-mode=long"
  Generate code for long address mode.  This is only supported for 64\-bit
  and x32 environments.  It is the default address mode for 64\-bit
  environments.
! .IP "\fB\-maddress\-mode=short\fR" 4
  .IX Item "-maddress-mode=short"
  Generate code for short address mode.  This is only supported for 32\-bit
  and x32 environments.  It is the default address mode for 32\-bit and
  x32 environments.
! .IP "\fB\-mneeded\fR" 4
  .IX Item "-mneeded"
  .PD 0
! .IP "\fB\-mno\-needed\fR" 4
  .IX Item "-mno-needed"
  .PD
! Emit \s-1GNU_PROPERTY_X86_ISA_1_NEEDED GNU\s0 property for Linux target to
! indicate the micro-architecture \s-1ISA\s0 level required to execute the binary.
! .IP "\fB\-mno\-direct\-extern\-access\fR" 4
  .IX Item "-mno-direct-extern-access"
! Without \fB\-fpic\fR nor \fB\-fPIC\fR, always use the \s-1GOT\s0 pointer
  to access external symbols.  With \fB\-fpic\fR or \fB\-fPIC\fR,
  treat access to protected symbols as local symbols.  The default is
  \&\fB\-mdirect\-extern\-access\fR.
--- 35229,35286 ----
  it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
  the assembly output so that the binary can run in 16\-bit mode.
  .Sp
! The \fB\-miamcu\fR option generates code which conforms to Intel MCU
  psABI.  It requires the \fB\-m32\fR option to be turned on.
! .IP \fB\-mno\-red\-zone\fR 4
  .IX Item "-mno-red-zone"
! Do not use a so\-called "red zone" for x86\-64 code.  The red zone is mandated
! by the x86\-64 ABI; it is a 128\-byte area beyond the location of the
  stack pointer that is not modified by signal or interrupt handlers
  and therefore can be used for temporary data without adjusting the stack
  pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model: the program and its symbols must
! be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
  Programs can be statically or dynamically linked.  This is the default
  code model.
! .IP \fB\-mcmodel=kernel\fR 4
  .IX Item "-mcmodel=kernel"
  Generate code for the kernel code model.  The kernel runs in the
! negative 2 GB of the address space.
  This model has to be used for Linux kernel code.
! .IP \fB\-mcmodel=medium\fR 4
  .IX Item "-mcmodel=medium"
  Generate code for the medium model: the program is linked in the lower 2
! GB of the address space.  Small symbols are also placed there.  Symbols
  with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
! large data or BSS sections and can be located above 2GB.  Programs can
  be statically or dynamically linked.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
  Generate code for the large model.  This model makes no assumptions
  about addresses and sizes of sections.
! .IP \fB\-maddress\-mode=long\fR 4
  .IX Item "-maddress-mode=long"
  Generate code for long address mode.  This is only supported for 64\-bit
  and x32 environments.  It is the default address mode for 64\-bit
  environments.
! .IP \fB\-maddress\-mode=short\fR 4
  .IX Item "-maddress-mode=short"
  Generate code for short address mode.  This is only supported for 32\-bit
  and x32 environments.  It is the default address mode for 32\-bit and
  x32 environments.
! .IP \fB\-mneeded\fR 4
  .IX Item "-mneeded"
  .PD 0
! .IP \fB\-mno\-needed\fR 4
  .IX Item "-mno-needed"
  .PD
! Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
! indicate the micro\-architecture ISA level required to execute the binary.
! .IP \fB\-mno\-direct\-extern\-access\fR 4
  .IX Item "-mno-direct-extern-access"
! Without \fB\-fpic\fR nor \fB\-fPIC\fR, always use the GOT pointer
  to access external symbols.  With \fB\-fpic\fR or \fB\-fPIC\fR,
  treat access to protected symbols as local symbols.  The default is
  \&\fB\-mdirect\-extern\-access\fR.
*************** treat access to protected symbols as loc
*** 35355,35369 ****
  \&\fB\-mno\-direct\-extern\-access\fR and executable compiled with
  \&\fB\-mdirect\-extern\-access\fR may not be binary compatible if
  protected symbols are used in shared libraries and executable.
! .IP "\fB\-munroll\-only\-small\-loops\fR" 4
  .IX Item "-munroll-only-small-loops"
  Controls conservative small loop unrolling. It is default enabled by
  O2, and unrolls loop with less than 4 insns by 1 time. Explicit
  \&\-f[no\-]unroll\-[all\-]loops would disable this flag to avoid any
  unintended unrolling behavior that user does not want.
! .IP "\fB\-mlam=\fR\fIchoice\fR" 4
  .IX Item "-mlam=choice"
! \&\s-1LAM\s0(linear\-address masking) allows special bits in the pointer to be used
  for metadata. The default is \fBnone\fR. With \fBu48\fR, pointer bits in
  positions 62:48 can be used for metadata; With \fBu57\fR, pointer bits in
  positions 62:57 can be used for metadata.
--- 35289,35303 ----
  \&\fB\-mno\-direct\-extern\-access\fR and executable compiled with
  \&\fB\-mdirect\-extern\-access\fR may not be binary compatible if
  protected symbols are used in shared libraries and executable.
! .IP \fB\-munroll\-only\-small\-loops\fR 4
  .IX Item "-munroll-only-small-loops"
  Controls conservative small loop unrolling. It is default enabled by
  O2, and unrolls loop with less than 4 insns by 1 time. Explicit
  \&\-f[no\-]unroll\-[all\-]loops would disable this flag to avoid any
  unintended unrolling behavior that user does not want.
! .IP \fB\-mlam=\fR\fIchoice\fR 4
  .IX Item "-mlam=choice"
! LAM(linear\-address masking) allows special bits in the pointer to be used
  for metadata. The default is \fBnone\fR. With \fBu48\fR, pointer bits in
  positions 62:48 can be used for metadata; With \fBu57\fR, pointer bits in
  positions 62:57 can be used for metadata.
*************** positions 62:57 can be used for metadata
*** 35372,35392 ****
  .IX Subsection "x86 Windows Options"
  .PP
  These additional options are available for Microsoft Windows targets:
! .IP "\fB\-mconsole\fR" 4
  .IX Item "-mconsole"
  This option
  specifies that a console application is to be generated, by
! instructing the linker to set the \s-1PE\s0 header subsystem type
  required for console applications.
  This option is available for Cygwin and MinGW targets and is
  enabled by default on those targets.
! .IP "\fB\-mcrtdll=\fR\fIlibrary\fR" 4
  .IX Item "-mcrtdll=library"
! Preprocess, compile or link with specified C RunTime \s-1DLL\s0 \fIlibrary\fR.
  This option adjust predefined macros \f(CW\*(C`_\|_CRTDLL_\|_\*(C'\fR, \f(CW\*(C`_\|_MSVCRT_\|_\*(C'\fR,
! \&\f(CW\*(C`_UCRT\*(C'\fR and \f(CW\*(C`_\|_MSVCRT_VERSION_\|_\*(C'\fR for specified \s-1CRT\s0 \fIlibrary\fR,
! choose start file for \s-1CRT\s0 \fIlibrary\fR and link with \s-1CRT\s0 \fIlibrary\fR.
! Recognized \s-1CRT\s0 library names for proprocessor are:
  \&\f(CW\*(C`crtdll*\*(C'\fR, \f(CW\*(C`msvcrt10*\*(C'\fR, \f(CW\*(C`msvcrt20*\*(C'\fR, \f(CW\*(C`msvcrt40*\*(C'\fR,
  \&\f(CW\*(C`msvcr40*\*(C'\fR, \f(CW\*(C`msvcrtd*\*(C'\fR, \f(CW\*(C`msvcrt\-os*\*(C'\fR,
  \&\f(CW\*(C`msvcr70*\*(C'\fR, \f(CW\*(C`msvcr71*\*(C'\fR, \f(CW\*(C`msvcr80*\*(C'\fR, \f(CW\*(C`msvcr90*\*(C'\fR,
--- 35306,35326 ----
  .IX Subsection "x86 Windows Options"
  .PP
  These additional options are available for Microsoft Windows targets:
! .IP \fB\-mconsole\fR 4
  .IX Item "-mconsole"
  This option
  specifies that a console application is to be generated, by
! instructing the linker to set the PE header subsystem type
  required for console applications.
  This option is available for Cygwin and MinGW targets and is
  enabled by default on those targets.
! .IP \fB\-mcrtdll=\fR\fIlibrary\fR 4
  .IX Item "-mcrtdll=library"
! Preprocess, compile or link with specified C RunTime DLL \fIlibrary\fR.
  This option adjust predefined macros \f(CW\*(C`_\|_CRTDLL_\|_\*(C'\fR, \f(CW\*(C`_\|_MSVCRT_\|_\*(C'\fR,
! \&\f(CW\*(C`_UCRT\*(C'\fR and \f(CW\*(C`_\|_MSVCRT_VERSION_\|_\*(C'\fR for specified CRT \fIlibrary\fR,
! choose start file for CRT \fIlibrary\fR and link with CRT \fIlibrary\fR.
! Recognized CRT library names for proprocessor are:
  \&\f(CW\*(C`crtdll*\*(C'\fR, \f(CW\*(C`msvcrt10*\*(C'\fR, \f(CW\*(C`msvcrt20*\*(C'\fR, \f(CW\*(C`msvcrt40*\*(C'\fR,
  \&\f(CW\*(C`msvcr40*\*(C'\fR, \f(CW\*(C`msvcrtd*\*(C'\fR, \f(CW\*(C`msvcrt\-os*\*(C'\fR,
  \&\f(CW\*(C`msvcr70*\*(C'\fR, \f(CW\*(C`msvcr71*\*(C'\fR, \f(CW\*(C`msvcr80*\*(C'\fR, \f(CW\*(C`msvcr90*\*(C'\fR,
*************** Recognized \s-1CRT\s0 library names for
*** 35394,35458 ****
  If this options is not specified then the default MinGW import library
  \&\f(CW\*(C`msvcrt\*(C'\fR is used for linking and no other adjustment for
  preprocessor is done. MinGW import library \f(CW\*(C`msvcrt\*(C'\fR is just a
! symlink to (or a copy of) another MinGW \s-1CRT\s0 import library
  chosen during MinGW compilation. MinGW import library \f(CW\*(C`msvcrt\-os\*(C'\fR
! is for Windows system \s-1CRT DLL\s0 library \f(CW\*(C`msvcrt.dll\*(C'\fR and
  in most cases is the default MinGW import library.
! Generally speaking, changing the \s-1CRT DLL\s0 requires recompiling
! the entire MinGW \s-1CRT.\s0 This option is for experimental and testing
  purposes only.
  This option is available for MinGW targets.
! .IP "\fB\-mdll\fR" 4
  .IX Item "-mdll"
  This option is available for Cygwin and MinGW targets.  It
  specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
  generated, enabling the selection of the required runtime
  startup object and entry point.
! .IP "\fB\-mnop\-fun\-dllimport\fR" 4
  .IX Item "-mnop-fun-dllimport"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
! .IP "\fB\-mthreads\fR" 4
  .IX Item "-mthreads"
  This option is available for MinGW targets. It specifies
! that MinGW-specific thread support is to be used.
! .IP "\fB\-municode\fR" 4
  .IX Item "-municode"
  This option is available for MinGW\-w64 targets.  It causes
  the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
! chooses Unicode-capable runtime startup code.
! .IP "\fB\-mwin32\fR" 4
  .IX Item "-mwin32"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the typical Microsoft Windows predefined macros are to
! be set in the pre-processor, but does not influence the choice
  of runtime library/startup code.
! .IP "\fB\-mwindows\fR" 4
  .IX Item "-mwindows"
  This option is available for Cygwin and MinGW targets.  It
! specifies that a \s-1GUI\s0 application is to be generated by
! instructing the linker to set the \s-1PE\s0 header subsystem type
  appropriately.
! .IP "\fB\-fno\-set\-stack\-executable\fR" 4
  .IX Item "-fno-set-stack-executable"
  This option is available for MinGW targets. It specifies that
! the executable flag for the stack used by nested functions isn't
  set. This is necessary for binaries running in kernel mode of
! Microsoft Windows, as there the User32 \s-1API,\s0 which is used to set executable
! privileges, isn't available.
! .IP "\fB\-fwritable\-relocated\-rdata\fR" 4
  .IX Item "-fwritable-relocated-rdata"
  This option is available for MinGW and Cygwin targets.  It specifies
! that relocated-data in read-only section is put into the \f(CW\*(C`.data\*(C'\fR
  section.  This is a necessary for older runtimes not supporting
! modification of \f(CW\*(C`.rdata\*(C'\fR sections for pseudo-relocation.
! .IP "\fB\-mpe\-aligned\-commons\fR" 4
  .IX Item "-mpe-aligned-commons"
  This option is available for Cygwin and MinGW targets.  It
! specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
! permits the correct alignment of \s-1COMMON\s0 variables should be
  used when generating code.  It is enabled by default if
! \&\s-1GCC\s0 detects that the target assembler found during configuration
  supports the feature.
  .PP
  See also under \fBx86 Options\fR for standard options.
--- 35328,35392 ----
  If this options is not specified then the default MinGW import library
  \&\f(CW\*(C`msvcrt\*(C'\fR is used for linking and no other adjustment for
  preprocessor is done. MinGW import library \f(CW\*(C`msvcrt\*(C'\fR is just a
! symlink to (or a copy of) another MinGW CRT import library
  chosen during MinGW compilation. MinGW import library \f(CW\*(C`msvcrt\-os\*(C'\fR
! is for Windows system CRT DLL library \f(CW\*(C`msvcrt.dll\*(C'\fR and
  in most cases is the default MinGW import library.
! Generally speaking, changing the CRT DLL requires recompiling
! the entire MinGW CRT. This option is for experimental and testing
  purposes only.
  This option is available for MinGW targets.
! .IP \fB\-mdll\fR 4
  .IX Item "-mdll"
  This option is available for Cygwin and MinGW targets.  It
  specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
  generated, enabling the selection of the required runtime
  startup object and entry point.
! .IP \fB\-mnop\-fun\-dllimport\fR 4
  .IX Item "-mnop-fun-dllimport"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
! .IP \fB\-mthreads\fR 4
  .IX Item "-mthreads"
  This option is available for MinGW targets. It specifies
! that MinGW\-specific thread support is to be used.
! .IP \fB\-municode\fR 4
  .IX Item "-municode"
  This option is available for MinGW\-w64 targets.  It causes
  the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
! chooses Unicode\-capable runtime startup code.
! .IP \fB\-mwin32\fR 4
  .IX Item "-mwin32"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the typical Microsoft Windows predefined macros are to
! be set in the pre\-processor, but does not influence the choice
  of runtime library/startup code.
! .IP \fB\-mwindows\fR 4
  .IX Item "-mwindows"
  This option is available for Cygwin and MinGW targets.  It
! specifies that a GUI application is to be generated by
! instructing the linker to set the PE header subsystem type
  appropriately.
! .IP \fB\-fno\-set\-stack\-executable\fR 4
  .IX Item "-fno-set-stack-executable"
  This option is available for MinGW targets. It specifies that
! the executable flag for the stack used by nested functions isn\*(Aqt
  set. This is necessary for binaries running in kernel mode of
! Microsoft Windows, as there the User32 API, which is used to set executable
! privileges, isn\*(Aqt available.
! .IP \fB\-fwritable\-relocated\-rdata\fR 4
  .IX Item "-fwritable-relocated-rdata"
  This option is available for MinGW and Cygwin targets.  It specifies
! that relocated\-data in read\-only section is put into the \f(CW\*(C`.data\*(C'\fR
  section.  This is a necessary for older runtimes not supporting
! modification of \f(CW\*(C`.rdata\*(C'\fR sections for pseudo\-relocation.
! .IP \fB\-mpe\-aligned\-commons\fR 4
  .IX Item "-mpe-aligned-commons"
  This option is available for Cygwin and MinGW targets.  It
! specifies that the GNU extension to the PE file format that
! permits the correct alignment of COMMON variables should be
  used when generating code.  It is enabled by default if
! GCC detects that the target assembler found during configuration
  supports the feature.
  .PP
  See also under \fBx86 Options\fR for standard options.
*************** See also under \fBx86 Options\fR for sta
*** 35461,35467 ****
  .IX Subsection "Xstormy16 Options"
  .PP
  These options are defined for Xstormy16:
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
  .PP
--- 35395,35401 ----
  .IX Subsection "Xstormy16 Options"
  .PP
  These options are defined for Xstormy16:
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
  .PP
*************** Choose startup files and linker script s
*** 35469,35478 ****
  .IX Subsection "Xtensa Options"
  .PP
  These options are supported for Xtensa targets:
! .IP "\fB\-mconst16\fR" 4
  .IX Item "-mconst16"
  .PD 0
! .IP "\fB\-mno\-const16\fR" 4
  .IX Item "-mno-const16"
  .PD
  Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
--- 35403,35412 ----
  .IX Subsection "Xtensa Options"
  .PP
  These options are supported for Xtensa targets:
! .IP \fB\-mconst16\fR 4
  .IX Item "-mconst16"
  .PD 0
! .IP \fB\-mno\-const16\fR 4
  .IX Item "-mno-const16"
  .PD
  Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
*************** standard option from Tensilica.  When en
*** 35481,35538 ****
  instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
  instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
  the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
  Enable or disable use of fused multiply/add and multiply/subtract
! instructions in the floating-point option.  This has no effect if the
! floating-point option is not also enabled.  Disabling fused multiply/add
  and multiply/subtract instructions forces the compiler to use separate
  instructions for the multiply and add/subtract operations.  This may be
! desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
  required: the fused multiply add/subtract instructions do not round the
  intermediate result, thereby producing results with \fImore\fR bits of
! precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
  add/subtract instructions also ensures that the program output is not
! sensitive to the compiler's ability to combine multiply and add/subtract
  operations.
! .IP "\fB\-mserialize\-volatile\fR" 4
  .IX Item "-mserialize-volatile"
  .PD 0
! .IP "\fB\-mno\-serialize\-volatile\fR" 4
  .IX Item "-mno-serialize-volatile"
  .PD
! When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
  \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
  The default is \fB\-mserialize\-volatile\fR.  Use
  \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
! .IP "\fB\-mforce\-no\-pic\fR" 4
  .IX Item "-mforce-no-pic"
! For targets, like GNU/Linux, where all user-mode Xtensa code must be
! position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
  kernel code.
! .IP "\fB\-mtext\-section\-literals\fR" 4
  .IX Item "-mtext-section-literals"
  .PD 0
! .IP "\fB\-mno\-text\-section\-literals\fR" 4
  .IX Item "-mno-text-section-literals"
  .PD
  These options control the treatment of literal pools.  The default is
  \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
  section in the output file.  This allows the literal pool to be placed
! in a data \s-1RAM/ROM,\s0 and it also allows the linker to combine literal
  pools from separate object files to remove redundant literals and
  improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
  are interspersed in the text section in order to keep them as close as
  possible to their references.  This may be necessary for large assembly
  files.  Literals for each function are placed right before that function.
! .IP "\fB\-mauto\-litpools\fR" 4
  .IX Item "-mauto-litpools"
  .PD 0
! .IP "\fB\-mno\-auto\-litpools\fR" 4
  .IX Item "-mno-auto-litpools"
  .PD
  These options control the treatment of literal pools.  The default is
--- 35415,35472 ----
  instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
  instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
  the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
  Enable or disable use of fused multiply/add and multiply/subtract
! instructions in the floating\-point option.  This has no effect if the
! floating\-point option is not also enabled.  Disabling fused multiply/add
  and multiply/subtract instructions forces the compiler to use separate
  instructions for the multiply and add/subtract operations.  This may be
! desirable in some cases where strict IEEE 754\-compliant results are
  required: the fused multiply add/subtract instructions do not round the
  intermediate result, thereby producing results with \fImore\fR bits of
! precision than specified by the IEEE standard.  Disabling fused multiply
  add/subtract instructions also ensures that the program output is not
! sensitive to the compiler\*(Aqs ability to combine multiply and add/subtract
  operations.
! .IP \fB\-mserialize\-volatile\fR 4
  .IX Item "-mserialize-volatile"
  .PD 0
! .IP \fB\-mno\-serialize\-volatile\fR 4
  .IX Item "-mno-serialize-volatile"
  .PD
! When this option is enabled, GCC inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
  \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
  The default is \fB\-mserialize\-volatile\fR.  Use
  \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
! .IP \fB\-mforce\-no\-pic\fR 4
  .IX Item "-mforce-no-pic"
! For targets, like GNU/Linux, where all user\-mode Xtensa code must be
! position\-independent code (PIC), this option disables PIC for compiling
  kernel code.
! .IP \fB\-mtext\-section\-literals\fR 4
  .IX Item "-mtext-section-literals"
  .PD 0
! .IP \fB\-mno\-text\-section\-literals\fR 4
  .IX Item "-mno-text-section-literals"
  .PD
  These options control the treatment of literal pools.  The default is
  \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
  section in the output file.  This allows the literal pool to be placed
! in a data RAM/ROM, and it also allows the linker to combine literal
  pools from separate object files to remove redundant literals and
  improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
  are interspersed in the text section in order to keep them as close as
  possible to their references.  This may be necessary for large assembly
  files.  Literals for each function are placed right before that function.
! .IP \fB\-mauto\-litpools\fR 4
  .IX Item "-mauto-litpools"
  .PD 0
! .IP \fB\-mno\-auto\-litpools\fR 4
  .IX Item "-mno-auto-litpools"
  .PD
  These options control the treatment of literal pools.  The default is
*************** do relaxation and place literals as nece
*** 35546,35574 ****
  assembler to create several literal pools per function and assemble
  very big functions, which may not be possible with
  \&\fB\-mtext\-section\-literals\fR.
! .IP "\fB\-mtarget\-align\fR" 4
  .IX Item "-mtarget-align"
  .PD 0
! .IP "\fB\-mno\-target\-align\fR" 4
  .IX Item "-mno-target-align"
  .PD
! When this option is enabled, \s-1GCC\s0 instructs the assembler to
  automatically align instructions to reduce branch penalties at the
  expense of some code density.  The assembler attempts to widen density
  instructions to align branch targets and the instructions following call
  instructions.  If there are not enough preceding safe density
  instructions to align a target, no widening is performed.  The
  default is \fB\-mtarget\-align\fR.  These options do not affect the
! treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
  assembler always aligns, either by widening density instructions or
! by inserting \s-1NOP\s0 instructions.
! .IP "\fB\-mlongcalls\fR" 4
  .IX Item "-mlongcalls"
  .PD 0
! .IP "\fB\-mno\-longcalls\fR" 4
  .IX Item "-mno-longcalls"
  .PD
! When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
  direct calls to indirect calls unless it can determine that the target
  of a direct call is in the range allowed by the call instruction.  This
  translation typically occurs for calls to functions in other source
--- 35480,35508 ----
  assembler to create several literal pools per function and assemble
  very big functions, which may not be possible with
  \&\fB\-mtext\-section\-literals\fR.
! .IP \fB\-mtarget\-align\fR 4
  .IX Item "-mtarget-align"
  .PD 0
! .IP \fB\-mno\-target\-align\fR 4
  .IX Item "-mno-target-align"
  .PD
! When this option is enabled, GCC instructs the assembler to
  automatically align instructions to reduce branch penalties at the
  expense of some code density.  The assembler attempts to widen density
  instructions to align branch targets and the instructions following call
  instructions.  If there are not enough preceding safe density
  instructions to align a target, no widening is performed.  The
  default is \fB\-mtarget\-align\fR.  These options do not affect the
! treatment of auto\-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
  assembler always aligns, either by widening density instructions or
! by inserting NOP instructions.
! .IP \fB\-mlongcalls\fR 4
  .IX Item "-mlongcalls"
  .PD 0
! .IP \fB\-mno\-longcalls\fR 4
  .IX Item "-mno-longcalls"
  .PD
! When this option is enabled, GCC instructs the assembler to translate
  direct calls to indirect calls unless it can determine that the target
  of a direct call is in the range allowed by the call instruction.  This
  translation typically occurs for calls to functions in other source
*************** instruction into an \f(CW\*(C`L32R\*(C'\
*** 35577,35617 ****
  The default is \fB\-mno\-longcalls\fR.  This option should be used in
  programs where the call target can potentially be out of range.  This
  option is implemented in the assembler, not the compiler, so the
! assembly code generated by \s-1GCC\s0 still shows direct call
  instructions\-\-\-look at the disassembled object code to see the actual
  instructions.  Note that the assembler uses an indirect call for
! every cross-file call, not just those that really are out of range.
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
! Generate code for the specified \s-1ABI.\s0  Permissible values are: \fBcall0\fR,
! \&\fBwindowed\fR.  Default \s-1ABI\s0 is chosen by the Xtensa core configuration.
! .IP "\fB\-mabi=call0\fR" 4
  .IX Item "-mabi=call0"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR, registers \f(CW\*(C`a12\*(C'\fR through \f(CW\*(C`a15\*(C'\fR are
! caller-saved, and register \f(CW\*(C`a15\*(C'\fR may be used as a frame pointer.
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_CALL0_ABI_\|_\*(C'\fR is defined.
! .IP "\fB\-mabi=windowed\fR" 4
  .IX Item "-mabi=windowed"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a10\*(C'\fR through \f(CW\*(C`a15\*(C'\fR, and called function rotates register window
  by 8 registers on entry so that its arguments are found in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR.  Register \f(CW\*(C`a7\*(C'\fR may be used as a frame
  pointer.  Register window is rotated 8 registers back upon return.
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_WINDOWED_ABI_\|_\*(C'\fR is defined.
! .IP "\fB\-mextra\-l32r\-costs=\fR\fIn\fR" 4
  .IX Item "-mextra-l32r-costs=n"
! Specify an extra cost of instruction \s-1RAM/ROM\s0 access for \f(CW\*(C`L32R\*(C'\fR
  instructions, in clock cycles.  This affects, when optimizing for speed,
  whether loading a constant from literal pool using \f(CW\*(C`L32R\*(C'\fR or
  synthesizing the constant from a small one with a couple of arithmetic
  instructions.  The default value is 0.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
--- 35511,35551 ----
  The default is \fB\-mno\-longcalls\fR.  This option should be used in
  programs where the call target can potentially be out of range.  This
  option is implemented in the assembler, not the compiler, so the
! assembly code generated by GCC still shows direct call
  instructions\-\-\-look at the disassembled object code to see the actual
  instructions.  Note that the assembler uses an indirect call for
! every cross\-file call, not just those that really are out of range.
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
! Generate code for the specified ABI.  Permissible values are: \fBcall0\fR,
! \&\fBwindowed\fR.  Default ABI is chosen by the Xtensa core configuration.
! .IP \fB\-mabi=call0\fR 4
  .IX Item "-mabi=call0"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR, registers \f(CW\*(C`a12\*(C'\fR through \f(CW\*(C`a15\*(C'\fR are
! caller\-saved, and register \f(CW\*(C`a15\*(C'\fR may be used as a frame pointer.
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_CALL0_ABI_\|_\*(C'\fR is defined.
! .IP \fB\-mabi=windowed\fR 4
  .IX Item "-mabi=windowed"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a10\*(C'\fR through \f(CW\*(C`a15\*(C'\fR, and called function rotates register window
  by 8 registers on entry so that its arguments are found in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR.  Register \f(CW\*(C`a7\*(C'\fR may be used as a frame
  pointer.  Register window is rotated 8 registers back upon return.
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_WINDOWED_ABI_\|_\*(C'\fR is defined.
! .IP \fB\-mextra\-l32r\-costs=\fR\fIn\fR 4
  .IX Item "-mextra-l32r-costs=n"
! Specify an extra cost of instruction RAM/ROM access for \f(CW\*(C`L32R\*(C'\fR
  instructions, in clock cycles.  This affects, when optimizing for speed,
  whether loading a constant from literal pool using \f(CW\*(C`L32R\*(C'\fR or
  synthesizing the constant from a small one with a couple of arithmetic
  instructions.  The default value is 0.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
*************** other cores.
*** 35624,35632 ****
  .IX Subsection "zSeries Options"
  .PP
  These are listed under
! .SH "ENVIRONMENT"
  .IX Header "ENVIRONMENT"
! This section describes several environment variables that affect how \s-1GCC\s0
  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
  aspects of the compilation environment.
--- 35558,35566 ----
  .IX Subsection "zSeries Options"
  .PP
  These are listed under
! .SH ENVIRONMENT
  .IX Header "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
  aspects of the compilation environment.
*************** aspects of the compilation environment.
*** 35634,35699 ****
  Note that you can also specify places to search using options such as
  \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
  take precedence over places specified using environment variables, which
! in turn take precedence over those specified by the configuration of \s-1GCC.\s0
! .IP "\fB\s-1LANG\s0\fR" 4
  .IX Item "LANG"
  .PD 0
! .IP "\fB\s-1LC_CTYPE\s0\fR" 4
  .IX Item "LC_CTYPE"
! .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
  .IX Item "LC_MESSAGES"
! .IP "\fB\s-1LC_ALL\s0\fR" 4
  .IX Item "LC_ALL"
  .PD
! These environment variables control the way that \s-1GCC\s0 uses
! localization information which allows \s-1GCC\s0 to work with different
! national conventions.  \s-1GCC\s0 inspects the locale categories
! \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
  so.  These locale categories can be set to any value supported by your
  installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
! Kingdom encoded in \s-1UTF\-8.\s0
  .Sp
! The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
! classification.  \s-1GCC\s0 uses it to determine the character boundaries in
  a string; this is needed for some multibyte encodings that contain quote
  and escape characters that are otherwise interpreted as a string
  end or escape.
  .Sp
! The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
  use in diagnostic messages.
  .Sp
! If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
! of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
! and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
! environment variable.  If none of these variables are set, \s-1GCC\s0
  defaults to traditional C English behavior.
! .IP "\fB\s-1TMPDIR\s0\fR" 4
  .IX Item "TMPDIR"
! If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
! files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
  compilation which is to be used as input to the next stage: for example,
  the output of the preprocessor, which is the input to the compiler
  proper.
! .IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
  .IX Item "GCC_COMPARE_DEBUG"
! Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
  \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
  of this option for more details.
! .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
  .IX Item "GCC_EXEC_PREFIX"
! If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
  names of the subprograms executed by the compiler.  No slash is added
  when this prefix is combined with the name of a subprogram, but you can
  specify a prefix that ends with a slash if you wish.
  .Sp
! If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 attempts to figure out
  an appropriate prefix to use based on the pathname it is invoked with.
  .Sp
! If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
  tries looking in the usual places for the subprogram.
  .Sp
! The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
! \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
  the installed compiler. In many cases \fIprefix\fR is the value
  of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
  .Sp
--- 35568,35633 ----
  Note that you can also specify places to search using options such as
  \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
  take precedence over places specified using environment variables, which
! in turn take precedence over those specified by the configuration of GCC.
! .IP \fBLANG\fR 4
  .IX Item "LANG"
  .PD 0
! .IP \fBLC_CTYPE\fR 4
  .IX Item "LC_CTYPE"
! .IP \fBLC_MESSAGES\fR 4
  .IX Item "LC_MESSAGES"
! .IP \fBLC_ALL\fR 4
  .IX Item "LC_ALL"
  .PD
! These environment variables control the way that GCC uses
! localization information which allows GCC to work with different
! national conventions.  GCC inspects the locale categories
! \&\fBLC_CTYPE\fR and \fBLC_MESSAGES\fR if it has been configured to do
  so.  These locale categories can be set to any value supported by your
  installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
! Kingdom encoded in UTF\-8.
  .Sp
! The \fBLC_CTYPE\fR environment variable specifies character
! classification.  GCC uses it to determine the character boundaries in
  a string; this is needed for some multibyte encodings that contain quote
  and escape characters that are otherwise interpreted as a string
  end or escape.
  .Sp
! The \fBLC_MESSAGES\fR environment variable specifies the language to
  use in diagnostic messages.
  .Sp
! If the \fBLC_ALL\fR environment variable is set, it overrides the value
! of \fBLC_CTYPE\fR and \fBLC_MESSAGES\fR; otherwise, \fBLC_CTYPE\fR
! and \fBLC_MESSAGES\fR default to the value of the \fBLANG\fR
! environment variable.  If none of these variables are set, GCC
  defaults to traditional C English behavior.
! .IP \fBTMPDIR\fR 4
  .IX Item "TMPDIR"
! If \fBTMPDIR\fR is set, it specifies the directory to use for temporary
! files.  GCC uses temporary files to hold the output of one stage of
  compilation which is to be used as input to the next stage: for example,
  the output of the preprocessor, which is the input to the compiler
  proper.
! .IP \fBGCC_COMPARE_DEBUG\fR 4
  .IX Item "GCC_COMPARE_DEBUG"
! Setting \fBGCC_COMPARE_DEBUG\fR is nearly equivalent to passing
  \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
  of this option for more details.
! .IP \fBGCC_EXEC_PREFIX\fR 4
  .IX Item "GCC_EXEC_PREFIX"
! If \fBGCC_EXEC_PREFIX\fR is set, it specifies a prefix to use in the
  names of the subprograms executed by the compiler.  No slash is added
  when this prefix is combined with the name of a subprogram, but you can
  specify a prefix that ends with a slash if you wish.
  .Sp
! If \fBGCC_EXEC_PREFIX\fR is not set, GCC attempts to figure out
  an appropriate prefix to use based on the pathname it is invoked with.
  .Sp
! If GCC cannot find the subprogram using the specified prefix, it
  tries looking in the usual places for the subprogram.
  .Sp
! The default value of \fBGCC_EXEC_PREFIX\fR is
! \&\fIprefix/lib/gcc/\fR where \fIprefix\fR is the prefix to
  the installed compiler. In many cases \fIprefix\fR is the value
  of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
  .Sp
*************** used for linking.
*** 35705,35771 ****
  In addition, the prefix is used in an unusual way in finding the
  directories to search for header files.  For each of the standard
  directories whose name normally begins with \fB/usr/local/lib/gcc\fR
! (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
  replacing that beginning with the specified prefix to produce an
! alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 searches
  \&\fIfoo/bar\fR just before it searches the standard directory 
  \&\fI/usr/local/lib/bar\fR.
  If a standard directory begins with the configured
  \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
! \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
! .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
  .IX Item "COMPILER_PATH"
! The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
! directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
  specified when searching for subprograms, if it cannot find the
! subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
! .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
  .IX Item "LIBRARY_PATH"
! The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
! directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
! \&\s-1GCC\s0 tries the directories thus specified when searching for special
! linker files, if it cannot find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
! using \s-1GCC\s0 also uses these directories when searching for ordinary
  libraries for the \fB\-l\fR option (but directories specified with
  \&\fB\-L\fR come first).
! .IP "\fB\s-1LANG\s0\fR" 4
  .IX Item "LANG"
  This variable is used to pass locale information to the compiler.  One way in
  which this information is used is to determine the character set to be used
! when character literals, string literals and comments are parsed in C and \*(C+.
  When the compiler is configured to allow multibyte characters,
! the following values for \fB\s-1LANG\s0\fR are recognized:
  .RS 4
! .IP "\fBC\-JIS\fR" 4
  .IX Item "C-JIS"
! Recognize \s-1JIS\s0 characters.
! .IP "\fBC\-SJIS\fR" 4
  .IX Item "C-SJIS"
! Recognize \s-1SJIS\s0 characters.
! .IP "\fBC\-EUCJP\fR" 4
  .IX Item "C-EUCJP"
! Recognize \s-1EUCJP\s0 characters.
  .RE
  .RS 4
  .Sp
! If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
  compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
  recognize and translate multibyte characters.
  .RE
! .IP "\fB\s-1GCC_EXTRA_DIAGNOSTIC_OUTPUT\s0\fR" 4
  .IX Item "GCC_EXTRA_DIAGNOSTIC_OUTPUT"
! If \fB\s-1GCC_EXTRA_DIAGNOSTIC_OUTPUT\s0\fR is set to one of the following values,
! then additional text will be emitted to stderr when fix-it hints are
  emitted.  \fB\-fdiagnostics\-parseable\-fixits\fR and
  \&\fB\-fno\-diagnostics\-parseable\-fixits\fR take precedence over this
  environment variable.
  .RS 4
! .IP "\fBfixits\-v1\fR" 4
  .IX Item "fixits-v1"
! Emit parseable fix-it hints, equivalent to
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  In particular, columns are
  expressed as a count of bytes, starting at byte 1 for the initial column.
! .IP "\fBfixits\-v2\fR" 4
  .IX Item "fixits-v2"
  As \f(CW\*(C`fixits\-v1\*(C'\fR, but columns are expressed as display columns,
  as per \fB\-fdiagnostics\-column\-unit=display\fR.
--- 35639,35705 ----
  In addition, the prefix is used in an unusual way in finding the
  directories to search for header files.  For each of the standard
  directories whose name normally begins with \fB/usr/local/lib/gcc\fR
! (more precisely, with the value of \fBGCC_INCLUDE_DIR\fR), GCC tries
  replacing that beginning with the specified prefix to produce an
! alternate directory name.  Thus, with \fB\-Bfoo/\fR, GCC searches
  \&\fIfoo/bar\fR just before it searches the standard directory 
  \&\fI/usr/local/lib/bar\fR.
  If a standard directory begins with the configured
  \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
! \&\fBGCC_EXEC_PREFIX\fR when looking for header files.
! .IP \fBCOMPILER_PATH\fR 4
  .IX Item "COMPILER_PATH"
! The value of \fBCOMPILER_PATH\fR is a colon\-separated list of
! directories, much like \fBPATH\fR.  GCC tries the directories thus
  specified when searching for subprograms, if it cannot find the
! subprograms using \fBGCC_EXEC_PREFIX\fR.
! .IP \fBLIBRARY_PATH\fR 4
  .IX Item "LIBRARY_PATH"
! The value of \fBLIBRARY_PATH\fR is a colon\-separated list of
! directories, much like \fBPATH\fR.  When configured as a native compiler,
! GCC tries the directories thus specified when searching for special
! linker files, if it cannot find them using \fBGCC_EXEC_PREFIX\fR.  Linking
! using GCC also uses these directories when searching for ordinary
  libraries for the \fB\-l\fR option (but directories specified with
  \&\fB\-L\fR come first).
! .IP \fBLANG\fR 4
  .IX Item "LANG"
  This variable is used to pass locale information to the compiler.  One way in
  which this information is used is to determine the character set to be used
! when character literals, string literals and comments are parsed in C and C++.
  When the compiler is configured to allow multibyte characters,
! the following values for \fBLANG\fR are recognized:
  .RS 4
! .IP \fBC\-JIS\fR 4
  .IX Item "C-JIS"
! Recognize JIS characters.
! .IP \fBC\-SJIS\fR 4
  .IX Item "C-SJIS"
! Recognize SJIS characters.
! .IP \fBC\-EUCJP\fR 4
  .IX Item "C-EUCJP"
! Recognize EUCJP characters.
  .RE
  .RS 4
  .Sp
! If \fBLANG\fR is not defined, or if it has some other value, then the
  compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
  recognize and translate multibyte characters.
  .RE
! .IP \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR 4
  .IX Item "GCC_EXTRA_DIAGNOSTIC_OUTPUT"
! If \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR is set to one of the following values,
! then additional text will be emitted to stderr when fix\-it hints are
  emitted.  \fB\-fdiagnostics\-parseable\-fixits\fR and
  \&\fB\-fno\-diagnostics\-parseable\-fixits\fR take precedence over this
  environment variable.
  .RS 4
! .IP \fBfixits\-v1\fR 4
  .IX Item "fixits-v1"
! Emit parseable fix\-it hints, equivalent to
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  In particular, columns are
  expressed as a count of bytes, starting at byte 1 for the initial column.
! .IP \fBfixits\-v2\fR 4
  .IX Item "fixits-v2"
  As \f(CW\*(C`fixits\-v1\*(C'\fR, but columns are expressed as display columns,
  as per \fB\-fdiagnostics\-column\-unit=display\fR.
*************** as per \fB\-fdiagnostics\-column\-unit=d
*** 35775,35797 ****
  .PP
  Some additional environment variables affect the behavior of the
  preprocessor.
! .IP "\fB\s-1CPATH\s0\fR" 4
  .IX Item "CPATH"
  .PD 0
! .IP "\fBC_INCLUDE_PATH\fR" 4
  .IX Item "C_INCLUDE_PATH"
! .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
  .IX Item "CPLUS_INCLUDE_PATH"
! .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
  .IX Item "OBJC_INCLUDE_PATH"
  .PD
! Each variable's value is a list of directories separated by a special
! character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
! The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
! determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
  semicolon, and for almost all other targets it is a colon.
  .Sp
! \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
  specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
  options on the command line.  This environment variable is used
  regardless of which language is being preprocessed.
--- 35709,35731 ----
  .PP
  Some additional environment variables affect the behavior of the
  preprocessor.
! .IP \fBCPATH\fR 4
  .IX Item "CPATH"
  .PD 0
! .IP \fBC_INCLUDE_PATH\fR 4
  .IX Item "C_INCLUDE_PATH"
! .IP \fBCPLUS_INCLUDE_PATH\fR 4
  .IX Item "CPLUS_INCLUDE_PATH"
! .IP \fBOBJC_INCLUDE_PATH\fR 4
  .IX Item "OBJC_INCLUDE_PATH"
  .PD
! Each variable\*(Aqs value is a list of directories separated by a special
! character, much like \fBPATH\fR, in which to look for header files.
! The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target\-dependent and
! determined at GCC build time.  For Microsoft Windows\-based targets it is a
  semicolon, and for almost all other targets it is a colon.
  .Sp
! \&\fBCPATH\fR specifies a list of directories to be searched as if
  specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
  options on the command line.  This environment variable is used
  regardless of which language is being preprocessed.
*************** paths given with \fB\-isystem\fR options
*** 35804,35819 ****
  In all these variables, an empty element instructs the compiler to
  search its current working directory.  Empty elements can appear at the
  beginning or end of a path.  For instance, if the value of
! \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
  effect as \fB\-I.\ \-I/special/include\fR.
! .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
  .IX Item "DEPENDENCIES_OUTPUT"
  If this variable is set, its value specifies how to output
! dependencies for Make based on the non-system header files processed
  by the compiler.  System header files are ignored in the dependency
  output.
  .Sp
! The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
  which case the Make rules are written to that file, guessing the target
  name from the source file name.  Or the value can have the form
  \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
--- 35738,35753 ----
  In all these variables, an empty element instructs the compiler to
  search its current working directory.  Empty elements can appear at the
  beginning or end of a path.  For instance, if the value of
! \&\fBCPATH\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
  effect as \fB\-I.\ \-I/special/include\fR.
! .IP \fBDEPENDENCIES_OUTPUT\fR 4
  .IX Item "DEPENDENCIES_OUTPUT"
  If this variable is set, its value specifies how to output
! dependencies for Make based on the non\-system header files processed
  by the compiler.  System header files are ignored in the dependency
  output.
  .Sp
! The value of \fBDEPENDENCIES_OUTPUT\fR can be just a file name, in
  which case the Make rules are written to that file, guessing the target
  name from the source file name.  Or the value can have the form
  \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
*************** file \fIfile\fR using \fItarget\fR as th
*** 35822,35894 ****
  In other words, this environment variable is equivalent to combining
  the options \fB\-MM\fR and \fB\-MF\fR,
  with an optional \fB\-MT\fR switch too.
! .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
  .IX Item "SUNPRO_DEPENDENCIES"
! This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
  except that system header files are not ignored, so it implies
  \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
  main input file is omitted.
! .IP "\fB\s-1SOURCE_DATE_EPOCH\s0\fR" 4
  .IX Item "SOURCE_DATE_EPOCH"
! If this variable is set, its value specifies a \s-1UNIX\s0 timestamp to be
  used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
  and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
  reproducible.
  .Sp
! The value of \fB\s-1SOURCE_DATE_EPOCH\s0\fR must be a \s-1UNIX\s0 timestamp,
  defined as the number of seconds (excluding leap seconds) since
! 01 Jan 1970 00:00:00 represented in \s-1ASCII\s0; identical to the output of
  \&\f(CW\*(C`date +%s\*(C'\fR on GNU/Linux and other systems that support the
  \&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
  .Sp
  The value should be a known timestamp such as the last modification
  time of the source or package and it should be set by the build
  process.
! .SH "BUGS"
  .IX Header "BUGS"
  For instructions on reporting bugs, see
  <\fBhttps://gcc.gnu.org/bugs/\fR>.
! .SH "FOOTNOTES"
  .IX Header "FOOTNOTES"
! .IP "1." 4
  On some systems, \fBgcc \-shared\fR
  needs to build supplementary stub code for constructors to work.  On
! multi-libbed systems, \fBgcc \-shared\fR must select the correct support
  libraries to link against.  Failing to supply the correct flags may lead
  to subtle defects.  Supplying them in cases where they are not necessary
  is innocuous.  \fB\-shared\fR suppresses the addition of startup code
! to alter the floating-point environment as done with \fB\-ffast\-math\fR,
  \&\fB\-Ofast\fR or \fB\-funsafe\-math\-optimizations\fR on some targets.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1)
  and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
  \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
! .SH "AUTHOR"
  .IX Header "AUTHOR"
  See the Info entry for \fBgcc\fR, or
  <\fBhttps://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
! for contributors to \s-1GCC.\s0
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 1988\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
! Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 35756,35828 ----
  In other words, this environment variable is equivalent to combining
  the options \fB\-MM\fR and \fB\-MF\fR,
  with an optional \fB\-MT\fR switch too.
! .IP \fBSUNPRO_DEPENDENCIES\fR 4
  .IX Item "SUNPRO_DEPENDENCIES"
! This variable is the same as \fBDEPENDENCIES_OUTPUT\fR (see above),
  except that system header files are not ignored, so it implies
  \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
  main input file is omitted.
! .IP \fBSOURCE_DATE_EPOCH\fR 4
  .IX Item "SOURCE_DATE_EPOCH"
! If this variable is set, its value specifies a UNIX timestamp to be
  used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
  and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
  reproducible.
  .Sp
! The value of \fBSOURCE_DATE_EPOCH\fR must be a UNIX timestamp,
  defined as the number of seconds (excluding leap seconds) since
! 01 Jan 1970 00:00:00 represented in ASCII; identical to the output of
  \&\f(CW\*(C`date +%s\*(C'\fR on GNU/Linux and other systems that support the
  \&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
  .Sp
  The value should be a known timestamp such as the last modification
  time of the source or package and it should be set by the build
  process.
! .SH BUGS
  .IX Header "BUGS"
  For instructions on reporting bugs, see
  <\fBhttps://gcc.gnu.org/bugs/\fR>.
! .SH FOOTNOTES
  .IX Header "FOOTNOTES"
! .IP 1. 4
  On some systems, \fBgcc \-shared\fR
  needs to build supplementary stub code for constructors to work.  On
! multi\-libbed systems, \fBgcc \-shared\fR must select the correct support
  libraries to link against.  Failing to supply the correct flags may lead
  to subtle defects.  Supplying them in cases where they are not necessary
  is innocuous.  \fB\-shared\fR suppresses the addition of startup code
! to alter the floating\-point environment as done with \fB\-ffast\-math\fR,
  \&\fB\-Ofast\fR or \fB\-funsafe\-math\-optimizations\fR on some targets.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7),
! \&\fBcpp\fR\|(1), \fBgcov\fR\|(1), \fBas\fR\|(1), \fBld\fR\|(1), \fBgdb\fR\|(1)
  and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
  \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
! .SH AUTHOR
  .IX Header "AUTHOR"
  See the Info entry for \fBgcc\fR, or
  <\fBhttps://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
! for contributors to GCC.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 1988\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gcc.1 gcc-14.3.0-RC-20260619/gcc/doc/gcc.1
*** gcc-14.3.0/gcc/doc/gcc.1	Fri May 23 11:19:47 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gcc.1	Fri Jun 19 07:07:45 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,157 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gcc \- GNU project C and C++ compiler
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
      [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
      [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
      [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
      [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
!     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
      [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! When you invoke \s-1GCC,\s0 it normally does preprocessing, compilation,
! assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
  process at an intermediate stage.  For example, the \fB\-c\fR option
  says not to run the linker.  Then the output consists of object files
  output by the assembler.
--- 38,86 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gcc \- GNU project C and C++ compiler
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
      [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
      [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
      [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
      [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
!     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine\-option\fR...]
      [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
! .SH DESCRIPTION
  .IX Header "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 \fB\-c\fR option
  says not to run the linker.  Then the output consists of object files
  output by the assembler.
*************** control the preprocessor and others the
*** 161,184 ****
  options control the assembler and linker; most of these are not
  documented here, since you rarely need to use any of them.
  .PP
! Most of the command-line options that you can use with \s-1GCC\s0 are useful
  for C programs; when an option is only useful with another language
! (usually \*(C+), the explanation says so explicitly.  If the description
  for a particular option does not mention a source language, you can use
  that option with all supported languages.
  .PP
! The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
! \&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
! \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a specific version of \s-1GCC.\s0
! When you compile \*(C+ programs, you should invoke \s-1GCC\s0 as \fBg++\fR 
  instead.
  .PP
  The \fBgcc\fR program accepts options and file names as operands.  Many
! options have multi-letter names; therefore multiple single-letter options
  may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
  .PP
  You can mix options and other arguments.  For the most part, the order
! you use doesn't matter.  Order does matter when you use several
  options of the same kind; for example, if you specify \fB\-L\fR more
  than once, the directories are searched in the order specified.  Also,
  the placement of the \fB\-l\fR option is significant.
--- 90,113 ----
  options control the assembler and linker; most of these are not
  documented here, since you rarely need to use any of them.
  .PP
! Most of the command\-line options that you can use with GCC are useful
  for C programs; when an option is only useful with another language
! (usually C++), the explanation says so explicitly.  If the description
  for a particular option does not mention a source language, you can use
  that option with all supported languages.
  .PP
! The usual way to run GCC is to run the executable called \fBgcc\fR, or
! \&\fImachine\fR\fB\-gcc\fR when cross\-compiling, or
! \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a specific version of GCC.
! When you compile C++ programs, you should invoke GCC as \fBg++\fR 
  instead.
  .PP
  The \fBgcc\fR program accepts options and file names as operands.  Many
! options have multi\-letter names; therefore multiple single\-letter options
  may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
  .PP
  You can mix options and other arguments.  For the most part, the order
! you use doesn\*(Aqt matter.  Order does matter when you use several
  options of the same kind; for example, if you specify \fB\-L\fR more
  than once, the directories are searched in the order specified.  Also,
  the placement of the \fB\-l\fR option is significant.
*************** integers followed by a byte size suffix
*** 201,210 ****
  such as \f(CW\*(C`kB\*(C'\fR and \f(CW\*(C`KiB\*(C'\fR for kilobyte and kibibyte, respectively,
  \&\f(CW\*(C`MB\*(C'\fR and \f(CW\*(C`MiB\*(C'\fR for megabyte and mebibyte, \f(CW\*(C`GB\*(C'\fR and
  \&\f(CW\*(C`GiB\*(C'\fR for gigabyte and gigibyte, and so on.  Such arguments are
! designated by \fIbyte-size\fR in the following text.  Refer to the \s-1NIST,
! IEC,\s0 and other relevant national and international standards for the full
  listing and explanation of the binary and decimal byte size prefixes.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
  .SS "Option Summary"
  .IX Subsection "Option Summary"
--- 130,139 ----
  such as \f(CW\*(C`kB\*(C'\fR and \f(CW\*(C`KiB\*(C'\fR for kilobyte and kibibyte, respectively,
  \&\f(CW\*(C`MB\*(C'\fR and \f(CW\*(C`MiB\*(C'\fR for megabyte and mebibyte, \f(CW\*(C`GB\*(C'\fR and
  \&\f(CW\*(C`GiB\*(C'\fR for gigabyte and gigibyte, and so on.  Such arguments are
! designated by \fIbyte\-size\fR 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.
! .SH OPTIONS
  .IX Header "OPTIONS"
  .SS "Option Summary"
  .IX Subsection "Option Summary"
*************** in the following sections.
*** 229,241 ****
  \&\-flax\-vector\-conversions  \-fms\-extensions
  \&\-foffload=\fR\fIarg\fR  \fB\-foffload\-options=\fR\fIarg\fR
  \&\fB\-fopenacc  \-fopenacc\-dim=\fR\fIgeom\fR
! \&\fB\-fopenmp  \-fopenmp\-simd  \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice-type\fR]
  \&\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR
  \&\fB\-fplan9\-extensions  \-fsigned\-bitfields  \-funsigned\-bitfields
  \&\-fsigned\-char  \-funsigned\-char  \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB]
  \&\-fsso\-struct=\fR\fIendianness\fR
! .IP "\fI\*(C+ Language Options\fR" 4
! .IX Item " Language Options"
  \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control
  \&\-faligned\-new=\fR\fIn\fR  \fB\-fargs\-in\-order=\fR\fIn\fR  \fB\-fchar8_t  \-fcheck\-new
  \&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR
--- 158,170 ----
  \&\-flax\-vector\-conversions  \-fms\-extensions
  \&\-foffload=\fR\fIarg\fR  \fB\-foffload\-options=\fR\fIarg\fR
  \&\fB\-fopenacc  \-fopenacc\-dim=\fR\fIgeom\fR
! \&\fB\-fopenmp  \-fopenmp\-simd  \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice\-type\fR]
  \&\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR
  \&\fB\-fplan9\-extensions  \-fsigned\-bitfields  \-funsigned\-bitfields
  \&\-fsigned\-char  \-funsigned\-char  \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB]
  \&\-fsso\-struct=\fR\fIendianness\fR
! .IP "\fIC++ Language Options\fR" 4
! .IX Item "C++ Language Options"
  \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control
  \&\-faligned\-new=\fR\fIn\fR  \fB\-fargs\-in\-order=\fR\fIn\fR  \fB\-fchar8_t  \-fcheck\-new
  \&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR
*************** in the following sections.
*** 297,305 ****
  \&\-Wsuggest\-final\-types  \-Wsuggest\-override  \-Wno\-template\-id\-cdtor
  \&\-Wno\-terminate  \-Wno\-vexing\-parse  \-Wvirtual\-inheritance
  \&\-Wno\-virtual\-move\-assign  \-Wvolatile  \-Wzero\-as\-null\-pointer\-constant\fR
! .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
! .IX Item "Objective-C and Objective- Language Options"
! \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR
  \&\fB\-fgnu\-runtime  \-fnext\-runtime
  \&\-fno\-nil\-receivers
  \&\-fobjc\-abi\-version=\fR\fIn\fR
--- 226,234 ----
  \&\-Wsuggest\-final\-types  \-Wsuggest\-override  \-Wno\-template\-id\-cdtor
  \&\-Wno\-terminate  \-Wno\-vexing\-parse  \-Wvirtual\-inheritance
  \&\-Wno\-virtual\-move\-assign  \-Wvolatile  \-Wzero\-as\-null\-pointer\-constant\fR
! .IP "\fIObjective\-C and Objective\-C++ Language Options\fR" 4
! .IX Item "Objective-C and Objective-C++ Language Options"
! \&\fB\-fconstant\-string\-class=\fR\fIclass\-name\fR
  \&\fB\-fgnu\-runtime  \-fnext\-runtime
  \&\-fno\-nil\-receivers
  \&\-fobjc\-abi\-version=\fR\fIn\fR
*************** in the following sections.
*** 322,331 ****
  .IX Item "Diagnostic Message Formatting Options"
  \&\fB\-fmessage\-length=\fR\fIn\fR
  \&\fB\-fdiagnostics\-plain\-output
! \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]
  \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
  \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
! \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif-stderr\fR|\fBsarif-file\fR|\fBjson\fR|\fBjson-stderr\fR|\fBjson-file\fR]
  \&\fB\-fno\-diagnostics\-json\-formatting
  \&\-fno\-diagnostics\-show\-option  \-fno\-diagnostics\-show\-caret
  \&\-fno\-diagnostics\-show\-labels  \-fno\-diagnostics\-show\-line\-numbers
--- 251,260 ----
  .IX Item "Diagnostic Message Formatting Options"
  \&\fB\-fmessage\-length=\fR\fIn\fR
  \&\fB\-fdiagnostics\-plain\-output
! \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery\-line\fR]
  \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
  \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]
! \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif\-stderr\fR|\fBsarif\-file\fR|\fBjson\fR|\fBjson\-stderr\fR|\fBjson\-file\fR]
  \&\fB\-fno\-diagnostics\-json\-formatting
  \&\-fno\-diagnostics\-show\-option  \-fno\-diagnostics\-show\-caret
  \&\-fno\-diagnostics\-show\-labels  \-fno\-diagnostics\-show\-line\-numbers
*************** in the following sections.
*** 334,340 ****
  \&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR
  \&\fB\-fdiagnostics\-parseable\-fixits  \-fdiagnostics\-generate\-patch
  \&\-fdiagnostics\-show\-template\-tree  \-fno\-elide\-type
! \&\-fdiagnostics\-path\-format=\fR[\fBnone\fR|\fBseparate-events\fR|\fBinline-events\fR]
  \&\fB\-fdiagnostics\-show\-path\-depths
  \&\-fno\-show\-column
  \&\-fdiagnostics\-column\-unit=\fR[\fBdisplay\fR|\fBbyte\fR]
--- 263,269 ----
  \&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR
  \&\fB\-fdiagnostics\-parseable\-fixits  \-fdiagnostics\-generate\-patch
  \&\-fdiagnostics\-show\-template\-tree  \-fno\-elide\-type
! \&\-fdiagnostics\-path\-format=\fR[\fBnone\fR|\fBseparate\-events\fR|\fBinline\-events\fR]
  \&\fB\-fdiagnostics\-show\-path\-depths
  \&\-fno\-show\-column
  \&\-fdiagnostics\-column\-unit=\fR[\fBdisplay\fR|\fBbyte\fR]
*************** in the following sections.
*** 347,354 ****
  \&\-pedantic\-errors \-fpermissive
  \&\-w  \-Wextra  \-Wall  \-Wabi=\fR\fIn\fR
  \&\fB\-Waddress  \-Wno\-address\-of\-packed\-member  \-Waggregate\-return
! \&\-Walloc\-size  \-Walloc\-size\-larger\-than=\fR\fIbyte-size\fR  \fB\-Walloc\-zero
! \&\-Walloca  \-Walloca\-larger\-than=\fR\fIbyte-size\fR
  \&\fB\-Wno\-aggressive\-loop\-optimizations
  \&\-Warith\-conversion
  \&\-Warray\-bounds  \-Warray\-bounds=\fR\fIn\fR  \fB\-Warray\-compare
--- 276,283 ----
  \&\-pedantic\-errors \-fpermissive
  \&\-w  \-Wextra  \-Wall  \-Wabi=\fR\fIn\fR
  \&\fB\-Waddress  \-Wno\-address\-of\-packed\-member  \-Waggregate\-return
! \&\-Walloc\-size  \-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR  \fB\-Walloc\-zero
! \&\-Walloca  \-Walloca\-larger\-than=\fR\fIbyte\-size\fR
  \&\fB\-Wno\-aggressive\-loop\-optimizations
  \&\-Warith\-conversion
  \&\-Warray\-bounds  \-Warray\-bounds=\fR\fIn\fR  \fB\-Warray\-compare
*************** in the following sections.
*** 387,393 ****
  \&\-Wformat\-nonliteral  \-Wformat\-overflow=\fR\fIn\fR
  \&\fB\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-truncation=\fR\fIn\fR
  \&\fB\-Wformat\-y2k  \-Wframe\-address
! \&\-Wframe\-larger\-than=\fR\fIbyte-size\fR  \fB\-Wno\-free\-nonheap\-object
  \&\-Wno\-if\-not\-aligned  \-Wno\-ignored\-attributes
  \&\-Wignored\-qualifiers  \-Wno\-incompatible\-pointer\-types  \-Whardened
  \&\-Wimplicit  \-Wimplicit\-fallthrough  \-Wimplicit\-fallthrough=\fR\fIn\fR
--- 316,322 ----
  \&\-Wformat\-nonliteral  \-Wformat\-overflow=\fR\fIn\fR
  \&\fB\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-truncation=\fR\fIn\fR
  \&\fB\-Wformat\-y2k  \-Wframe\-address
! \&\-Wframe\-larger\-than=\fR\fIbyte\-size\fR  \fB\-Wno\-free\-nonheap\-object
  \&\-Wno\-if\-not\-aligned  \-Wno\-ignored\-attributes
  \&\-Wignored\-qualifiers  \-Wno\-incompatible\-pointer\-types  \-Whardened
  \&\-Wimplicit  \-Wimplicit\-fallthrough  \-Wimplicit\-fallthrough=\fR\fIn\fR
*************** in the following sections.
*** 396,402 ****
  \&\-Winit\-self  \-Winline  \-Wno\-int\-conversion  \-Wint\-in\-bool\-context
  \&\-Wno\-int\-to\-pointer\-cast  \-Wno\-invalid\-memory\-model
  \&\-Winvalid\-pch  \-Winvalid\-utf8  \-Wno\-unicode  \-Wjump\-misses\-init
! \&\-Wlarger\-than=\fR\fIbyte-size\fR  \fB\-Wlogical\-not\-parentheses  \-Wlogical\-op
  \&\-Wlong\-long  \-Wno\-lto\-type\-mismatch \-Wmain  \-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size  \-Wmemset\-transposed\-args
  \&\-Wmisleading\-indentation  \-Wmissing\-attributes  \-Wmissing\-braces
--- 325,331 ----
  \&\-Winit\-self  \-Winline  \-Wno\-int\-conversion  \-Wint\-in\-bool\-context
  \&\-Wno\-int\-to\-pointer\-cast  \-Wno\-invalid\-memory\-model
  \&\-Winvalid\-pch  \-Winvalid\-utf8  \-Wno\-unicode  \-Wjump\-misses\-init
! \&\-Wlarger\-than=\fR\fIbyte\-size\fR  \fB\-Wlogical\-not\-parentheses  \-Wlogical\-op
  \&\-Wlong\-long  \-Wno\-lto\-type\-mismatch \-Wmain  \-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size  \-Wmemset\-transposed\-args
  \&\-Wmisleading\-indentation  \-Wmissing\-attributes  \-Wmissing\-braces
*************** in the following sections.
*** 422,428 ****
  \&\-Wno\-sizeof\-array\-argument
  \&\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div  \-Wsizeof\-pointer\-memaccess
! \&\-Wstack\-protector  \-Wstack\-usage=\fR\fIbyte-size\fR  \fB\-Wstrict\-aliasing
  \&\-Wstrict\-aliasing=n  \-Wstrict\-overflow  \-Wstrict\-overflow=\fR\fIn\fR
  \&\fB\-Wstring\-compare
  \&\-Wno\-stringop\-overflow \-Wno\-stringop\-overread
--- 351,357 ----
  \&\-Wno\-sizeof\-array\-argument
  \&\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div  \-Wsizeof\-pointer\-memaccess
! \&\-Wstack\-protector  \-Wstack\-usage=\fR\fIbyte\-size\fR  \fB\-Wstrict\-aliasing
  \&\-Wstrict\-aliasing=n  \-Wstrict\-overflow  \-Wstrict\-overflow=\fR\fIn\fR
  \&\fB\-Wstring\-compare
  \&\-Wno\-stringop\-overflow \-Wno\-stringop\-overread
*************** in the following sections.
*** 443,449 ****
  \&\-Wuse\-after\-free  \-Wuse\-after\-free=\fR\fIn\fR  \fB\-Wuseless\-cast
  \&\-Wno\-varargs  \-Wvariadic\-macros
  \&\-Wvector\-operation\-performance
! \&\-Wvla  \-Wvla\-larger\-than=\fR\fIbyte-size\fR  \fB\-Wno\-vla\-larger\-than
  \&\-Wvolatile\-register\-var  \-Wwrite\-strings
  \&\-Wno\-xor\-used\-as\-pow
  \&\-Wzero\-length\-bounds\fR
--- 372,378 ----
  \&\-Wuse\-after\-free  \-Wuse\-after\-free=\fR\fIn\fR  \fB\-Wuseless\-cast
  \&\-Wno\-varargs  \-Wvariadic\-macros
  \&\-Wvector\-operation\-performance
! \&\-Wvla  \-Wvla\-larger\-than=\fR\fIbyte\-size\fR  \fB\-Wno\-vla\-larger\-than
  \&\-Wvolatile\-register\-var  \-Wwrite\-strings
  \&\-Wno\-xor\-used\-as\-pow
  \&\-Wzero\-length\-bounds\fR
*************** in the following sections.
*** 525,531 ****
  \&\-Wno\-analyzer\-va\-list\-use\-after\-va\-end
  \&\-Wno\-analyzer\-write\-to\-const
  \&\-Wno\-analyzer\-write\-to\-string\-literal\fR
! .IP "\fIC and Objective-C-only Warning Options\fR" 4
  .IX Item "C and Objective-C-only Warning Options"
  \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations
  \&\-Wmissing\-parameter\-type \-Wdeclaration\-missing\-parameter\-type
--- 454,460 ----
  \&\-Wno\-analyzer\-va\-list\-use\-after\-va\-end
  \&\-Wno\-analyzer\-write\-to\-const
  \&\-Wno\-analyzer\-write\-to\-string\-literal\fR
! .IP "\fIC and Objective\-C\-only Warning Options\fR" 4
  .IX Item "C and Objective-C-only Warning Options"
  \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations
  \&\-Wmissing\-parameter\-type \-Wdeclaration\-missing\-parameter\-type
*************** in the following sections.
*** 552,558 ****
  \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  \fB\-fdebug\-types\-section
  \&\-fno\-eliminate\-unused\-debug\-types
  \&\-femit\-struct\-debug\-baseonly  \-femit\-struct\-debug\-reduced
! \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]
  \&\fB\-fno\-eliminate\-unused\-debug\-symbols  \-femit\-class\-debug\-always
  \&\-fno\-merge\-debug\-strings  \-fno\-dwarf2\-cfi\-asm
  \&\-fvar\-tracking  \-fvar\-tracking\-assignments\fR
--- 481,487 ----
  \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  \fB\-fdebug\-types\-section
  \&\-fno\-eliminate\-unused\-debug\-types
  \&\-femit\-struct\-debug\-baseonly  \-femit\-struct\-debug\-reduced
! \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR]
  \&\fB\-fno\-eliminate\-unused\-debug\-symbols  \-femit\-class\-debug\-always
  \&\-fno\-merge\-debug\-strings  \-fno\-dwarf2\-cfi\-asm
  \&\-fvar\-tracking  \-fvar\-tracking\-assignments\fR
*************** in the following sections.
*** 662,668 ****
  \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR
  \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR
  \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR
! \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel-runs\fR|\fBserial\fR]
  \&\fB\-fsanitize=\fR\fIstyle\fR  \fB\-fsanitize\-recover  \-fsanitize\-recover=\fR\fIstyle\fR
  \&\fB\-fsanitize\-trap   \-fsanitize\-trap=\fR\fIstyle\fR
  \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR  \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...
--- 591,597 ----
  \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR
  \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR
  \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR
! \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR]
  \&\fB\-fsanitize=\fR\fIstyle\fR  \fB\-fsanitize\-recover  \-fsanitize\-recover=\fR\fIstyle\fR
  \&\fB\-fsanitize\-trap   \-fsanitize\-trap=\fR\fIstyle\fR
  \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR  \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...
*************** in the following sections.
*** 671,677 ****
  \&\fB\-fharden\-compares \-fharden\-conditional\-branches  \-fhardened
  \&\-fharden\-control\-flow\-redundancy  \-fhardcfr\-skip\-leaf
  \&\-fhardcfr\-check\-exceptions  \-fhardcfr\-check\-returning\-calls
! \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno-xthrow\fR|\fBnothrow\fR|\fBnever\fR]
  \&\fB\-fstack\-protector  \-fstack\-protector\-all  \-fstack\-protector\-strong
  \&\-fstack\-protector\-explicit  \-fstack\-check
  \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR
--- 600,606 ----
  \&\fB\-fharden\-compares \-fharden\-conditional\-branches  \-fhardened
  \&\-fharden\-control\-flow\-redundancy  \-fhardcfr\-skip\-leaf
  \&\-fhardcfr\-check\-exceptions  \-fhardcfr\-check\-returning\-calls
! \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR]
  \&\fB\-fstack\-protector  \-fstack\-protector\-all  \-fstack\-protector\-strong
  \&\-fstack\-protector\-explicit  \-fstack\-check
  \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR
*************** in the following sections.
*** 709,715 ****
  \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
  .IP "\fILinker Options\fR" 4
  .IX Item "Linker Options"
! \&\fIobject-file-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR  \fB\-l\fR\fIlibrary\fR
  \&\fB\-nostartfiles  \-nodefaultlibs  \-nolibc  \-nostdlib  \-nostdlib++
  \&\-e\fR \fIentry\fR  \fB\-\-entry=\fR\fIentry\fR
  \&\fB\-pie  \-pthread  \-r  \-rdynamic
--- 638,644 ----
  \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
  .IP "\fILinker Options\fR" 4
  .IX Item "Linker Options"
! \&\fIobject\-file\-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR  \fB\-l\fR\fIlibrary\fR
  \&\fB\-nostartfiles  \-nodefaultlibs  \-nolibc  \-nostdlib  \-nostdlib++
  \&\-e\fR \fIentry\fR  \fB\-\-entry=\fR\fIentry\fR
  \&\fB\-pie  \-pthread  \-r  \-rdynamic
*************** in the following sections.
*** 752,763 ****
  \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion
  \&\-dumpfullversion  \-fcallgraph\-info\fR[\fB=su,da\fR]
  \&\fB\-fchecking  \-fchecking=\fR\fIn\fR
! \&\fB\-fdbg\-cnt\-list  \-fdbg\-cnt=\fR\fIcounter-value-list\fR
  \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR
  \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR
  \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR
  \&\fB\-fdump\-debug  \-fdump\-earlydebug
  \&\-fdump\-noaddr  \-fdump\-unnumbered  \-fdump\-unnumbered\-links
  \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]
--- 681,692 ----
  \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion
  \&\-dumpfullversion  \-fcallgraph\-info\fR[\fB=su,da\fR]
  \&\fB\-fchecking  \-fchecking=\fR\fIn\fR
! \&\fB\-fdbg\-cnt\-list  \-fdbg\-cnt=\fR\fIcounter\-value\-list\fR
  \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR
  \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-rtl\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR
  \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR
! \&\fB\-fdisable\-tree\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR
  \&\fB\-fdump\-debug  \-fdump\-earlydebug
  \&\-fdump\-noaddr  \-fdump\-unnumbered  \-fdump\-unnumbered\-links
  \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]
*************** in the following sections.
*** 775,781 ****
  \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR
  \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second
  \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR
! \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR
  \&\fB\-fira\-verbose=\fR\fIn\fR
  \&\fB\-flto\-report  \-flto\-report\-wpa  \-fmem\-report\-wpa
  \&\-fmem\-report  \-fpre\-ipa\-mem\-report  \-fpost\-ipa\-mem\-report
--- 704,710 ----
  \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR
  \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second
  \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR
! \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR
  \&\fB\-fira\-verbose=\fR\fIn\fR
  \&\fB\-flto\-report  \-flto\-report\-wpa  \-fmem\-report\-wpa
  \&\-fmem\-report  \-fpre\-ipa\-mem\-report  \-fpost\-ipa\-mem\-report
*************** in the following sections.
*** 790,796 ****
  \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q
  \&\-print\-sysroot  \-print\-sysroot\-headers\-suffix
  \&\-save\-temps  \-save\-temps=cwd  \-save\-temps=obj  \-time\fR[\fB=\fR\fIfile\fR]
! .IP "\fIMachine-Dependent Options\fR" 4
  .IX Item "Machine-Dependent Options"
  \&\fIAArch64 Options\fR
  \&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian
--- 719,725 ----
  \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q
  \&\-print\-sysroot  \-print\-sysroot\-headers\-suffix
  \&\-save\-temps  \-save\-temps=cwd  \-save\-temps=obj  \-time\fR[\fB=\fR\fIfile\fR]
! .IP "\fIMachine\-Dependent Options\fR" 4
  .IX Item "Machine-Dependent Options"
  \&\fIAArch64 Options\fR
  \&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian
*************** in the following sections.
*** 804,810 ****
  \&\-mlow\-precision\-recip\-sqrt  \-mlow\-precision\-sqrt  \-mlow\-precision\-div
  \&\-mpc\-relative\-literal\-loads
  \&\-msign\-return\-address=\fR\fIscope\fR
! \&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR
  \&\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR
  \&\fB\-mharden\-sls=\fR\fIopts\fR
  \&\fB\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
--- 733,739 ----
  \&\-mlow\-precision\-recip\-sqrt  \-mlow\-precision\-sqrt  \-mlow\-precision\-div
  \&\-mpc\-relative\-literal\-loads
  \&\-msign\-return\-address=\fR\fIscope\fR
! \&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR
  \&\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR
  \&\fB\-mharden\-sls=\fR\fIopts\fR
  \&\fB\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
*************** in the following sections.
*** 821,830 ****
  \&\-mfp\-mode=\fR\fImode\fR  \fB\-mvect\-double  \-max\-vect\-align=\fR\fInum\fR
  \&\fB\-msplit\-vecmove\-early  \-m1reg\-\fR\fIreg\fR
  .Sp
! \&\fI\s-1AMD GCN\s0 Options\fR
  \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \fB\-mstack\-size=\fR\fIbytes\fR
  .Sp
! \&\fI\s-1ARC\s0 Options\fR
  \&\fB\-mbarrel\-shifter  \-mjli\-always
  \&\-mcpu=\fR\fIcpu\fR  \fB\-mA6  \-mARC600  \-mA7  \-mARC700
  \&\-mdpfp  \-mdpfp\-compact  \-mdpfp\-fast  \-mno\-dpfp\-lrsr
--- 750,759 ----
  \&\-mfp\-mode=\fR\fImode\fR  \fB\-mvect\-double  \-max\-vect\-align=\fR\fInum\fR
  \&\fB\-msplit\-vecmove\-early  \-m1reg\-\fR\fIreg\fR
  .Sp
! \&\fIAMD GCN Options\fR
  \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \fB\-mstack\-size=\fR\fIbytes\fR
  .Sp
! \&\fIARC Options\fR
  \&\fB\-mbarrel\-shifter  \-mjli\-always
  \&\-mcpu=\fR\fIcpu\fR  \fB\-mA6  \-mARC600  \-mA7  \-mARC700
  \&\-mdpfp  \-mdpfp\-compact  \-mdpfp\-fast  \-mno\-dpfp\-lrsr
*************** in the following sections.
*** 844,850 ****
  \&\-munalign\-prob\-threshold=\fR\fIprobability\fR  \fB\-mmpy\-option=\fR\fImulto\fR
  \&\fB\-mdiv\-rem  \-mcode\-density  \-mll64  \-mfpu=\fR\fIfpu\fR  \fB\-mrf16  \-mbranch\-index\fR
  .Sp
! \&\fI\s-1ARM\s0 Options\fR
  \&\fB\-mapcs\-frame  \-mno\-apcs\-frame
  \&\-mabi=\fR\fIname\fR
  \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check
--- 773,779 ----
  \&\-munalign\-prob\-threshold=\fR\fIprobability\fR  \fB\-mmpy\-option=\fR\fImulto\fR
  \&\fB\-mdiv\-rem  \-mcode\-density  \-mll64  \-mfpu=\fR\fIfpu\fR  \fB\-mrf16  \-mbranch\-index\fR
  .Sp
! \&\fIARM Options\fR
  \&\fB\-mapcs\-frame  \-mno\-apcs\-frame
  \&\-mabi=\fR\fIname\fR
  \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check
*************** in the following sections.
*** 884,893 ****
  \&\-mfix\-cmse\-cve\-2021\-35465
  \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
  \&\fB\-mfdpic
! \&\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]
! [+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR
  .Sp
! \&\fI\s-1AVR\s0 Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-mabsdata  \-maccumulate\-args
  \&\-mbranch\-cost=\fR\fIcost\fR  \fB\-mfuse\-add=\fR\fIlevel\fR
  \&\fB\-mcall\-prologues  \-mgas\-isr\-prologues  \-mint8  \-mflmap
--- 813,822 ----
  \&\-mfix\-cmse\-cve\-2021\-35465
  \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
  \&\fB\-mfdpic
! \&\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]
! [+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR
  .Sp
! \&\fIAVR Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-mabsdata  \-maccumulate\-args
  \&\-mbranch\-cost=\fR\fIcost\fR  \fB\-mfuse\-add=\fR\fIlevel\fR
  \&\fB\-mcall\-prologues  \-mgas\-isr\-prologues  \-mint8  \-mflmap
*************** in the following sections.
*** 911,919 ****
  .Sp
  \&\fIC6X Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-march=\fR\fIcpu\fR
! \&\fB\-msim  \-msdata=\fR\fIsdata-type\fR
  .Sp
! \&\fI\s-1CRIS\s0 Options\fR
  \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR
  \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stack\-frame=\fR\fIn\fR
  \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects
--- 840,848 ----
  .Sp
  \&\fIC6X Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-march=\fR\fIcpu\fR
! \&\fB\-msim  \-msdata=\fR\fIsdata\-type\fR
  .Sp
! \&\fICRIS Options\fR
  \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR
  \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stack\-frame=\fR\fIn\fR
  \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects
*************** in the following sections.
*** 960,971 ****
  \&\-whatsloaded  \-F  \-gused  \-gfull  \-mmacosx\-version\-min=\fR\fIversion\fR
  \&\fB\-mkernel  \-mone\-byte\-bool\fR
  .Sp
! \&\fI\s-1DEC\s0 Alpha Options\fR
  \&\fB\-mno\-fp\-regs  \-msoft\-float
  \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant
  \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR
  \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants
! \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR
  \&\fB\-mbwx  \-mmax  \-mfix  \-mcix
  \&\-mfloat\-vax  \-mfloat\-ieee
  \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data
--- 889,900 ----
  \&\-whatsloaded  \-F  \-gused  \-gfull  \-mmacosx\-version\-min=\fR\fIversion\fR
  \&\fB\-mkernel  \-mone\-byte\-bool\fR
  .Sp
! \&\fIDEC Alpha Options\fR
  \&\fB\-mno\-fp\-regs  \-msoft\-float
  \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant
  \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR
  \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants
! \&\-mcpu=\fR\fIcpu\-type\fR  \fB\-mtune=\fR\fIcpu\-type\fR
  \&\fB\-mbwx  \-mmax  \-mfix  \-mcix
  \&\-mfloat\-vax  \-mfloat\-ieee
  \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data
*************** in the following sections.
*** 978,990 ****
  \&\-mjmp32 \-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR
  \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR
  .Sp
! \&\fI\s-1FR30\s0 Options\fR
  \&\fB\-msmall\-model  \-mno\-lsim\fR
  .Sp
! \&\fI\s-1FT32\s0 Options\fR
  \&\fB\-msim  \-mlra  \-mnodiv  \-mft32b  \-mcompress  \-mnopm\fR
  .Sp
! \&\fI\s-1FRV\s0 Options\fR
  \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64
  \&\-mhard\-float  \-msoft\-float
  \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword
--- 907,919 ----
  \&\-mjmp32 \-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR
  \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR
  .Sp
! \&\fIFR30 Options\fR
  \&\fB\-msmall\-model  \-mno\-lsim\fR
  .Sp
! \&\fIFT32 Options\fR
  \&\fB\-msim  \-mlra  \-mnodiv  \-mft32b  \-mcompress  \-mnopm\fR
  .Sp
! \&\fIFRV Options\fR
  \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64
  \&\-mhard\-float  \-msoft\-float
  \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword
*************** in the following sections.
*** 1009,1020 ****
  \&\fIH8/300 Options\fR
  \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr  \-mno\-exr  \-mint32  \-malign\-300\fR
  .Sp
! \&\fI\s-1HPPA\s0 Options\fR
! \&\fB\-march=\fR\fIarchitecture-type\fR
  \&\fB\-matomic\-libcalls  \-mbig\-switch
  \&\-mcaller\-copies  \-mdisable\-fpregs  \-mdisable\-indexing
  \&\-mordered  \-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld
! \&\-mfixed\-range=\fR\fIregister-range\fR
  \&\fB\-mcoherent\-ldcw \-mjump\-in\-delay  \-mlinker\-opt  \-mlong\-calls
  \&\-mlong\-load\-store  \-mno\-atomic\-libcalls  \-mno\-disable\-fpregs
  \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas
--- 938,949 ----
  \&\fIH8/300 Options\fR
  \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr  \-mno\-exr  \-mint32  \-malign\-300\fR
  .Sp
! \&\fIHPPA Options\fR
! \&\fB\-march=\fR\fIarchitecture\-type\fR
  \&\fB\-matomic\-libcalls  \-mbig\-switch
  \&\-mcaller\-copies  \-mdisable\-fpregs  \-mdisable\-indexing
  \&\-mordered  \-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld
! \&\-mfixed\-range=\fR\fIregister\-range\fR
  \&\fB\-mcoherent\-ldcw \-mjump\-in\-delay  \-mlinker\-opt  \-mlong\-calls
  \&\-mlong\-load\-store  \-mno\-atomic\-libcalls  \-mno\-disable\-fpregs
  \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas
*************** in the following sections.
*** 1022,1031 ****
  \&\-mno\-portable\-runtime  \-mno\-soft\-float
  \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0
  \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime
! \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msoft\-mult  \-msio  \-mwsio
! \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
  .Sp
! \&\fI\s-1IA\-64\s0 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic
  \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata  \-mno\-sdata
  \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd
--- 951,960 ----
  \&\-mno\-portable\-runtime  \-mno\-soft\-float
  \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0
  \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime
! \&\-mschedule=\fR\fIcpu\-type\fR  \fB\-mspace\-regs  \-msoft\-mult  \-msio  \-mwsio
! \&\-munix=\fR\fIunix\-std\fR  \fB\-nolibdld  \-static  \-threads\fR
  .Sp
! \&\fIIA\-64 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic
  \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata  \-mno\-sdata
  \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd
*************** in the following sections.
*** 1038,1060 ****
  \&\-minline\-sqrt\-min\-latency  \-minline\-sqrt\-max\-throughput
  \&\-mno\-inline\-sqrt
  \&\-mdwarf2\-asm  \-mearly\-stop\-bits
! \&\-mfixed\-range=\fR\fIregister-range\fR  \fB\-mtls\-size=\fR\fItls-size\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-milp32  \-mlp64
  \&\-msched\-br\-data\-spec  \-msched\-ar\-data\-spec  \-msched\-control\-spec
  \&\-msched\-br\-in\-data\-spec  \-msched\-ar\-in\-data\-spec  \-msched\-in\-control\-spec
  \&\-msched\-spec\-ldc  \-msched\-spec\-control\-ldc
  \&\-msched\-prefer\-non\-data\-spec\-insns  \-msched\-prefer\-non\-control\-spec\-insns
  \&\-msched\-stop\-bits\-after\-every\-cycle  \-msched\-count\-spec\-in\-critical\-path
  \&\-msel\-sched\-dont\-check\-control\-spec  \-msched\-fp\-mem\-deps\-zero\-cost
! \&\-msched\-max\-memory\-insns\-hard\-limit  \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
  .Sp
! \&\fI\s-1LM32\s0 Options\fR
  \&\fB\-mbarrel\-shift\-enabled  \-mdivide\-enabled  \-mmultiply\-enabled
  \&\-msign\-extend\-enabled  \-muser\-enabled\fR
  .Sp
  \&\fILoongArch Options\fR
! \&\fB\-march=\fR\fIarch-type\fR  \fB\-mtune=\fR\fItune-type\fR \fB\-mabi=\fR\fIbase-abi-type\fR
! \&\fB\-mfpu=\fR\fIfpu-type\fR \fB\-msimd=\fR\fIsimd-type\fR
  \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mno\-lsx \-mlasx \-mno\-lasx
  \&\-mbranch\-cost=\fR\fIn\fR  \fB\-mcheck\-zero\-division \-mno\-check\-zero\-division
  \&\-mcond\-move\-int  \-mno\-cond\-move\-int
--- 967,989 ----
  \&\-minline\-sqrt\-min\-latency  \-minline\-sqrt\-max\-throughput
  \&\-mno\-inline\-sqrt
  \&\-mdwarf2\-asm  \-mearly\-stop\-bits
! \&\-mfixed\-range=\fR\fIregister\-range\fR  \fB\-mtls\-size=\fR\fItls\-size\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR  \fB\-milp32  \-mlp64
  \&\-msched\-br\-data\-spec  \-msched\-ar\-data\-spec  \-msched\-control\-spec
  \&\-msched\-br\-in\-data\-spec  \-msched\-ar\-in\-data\-spec  \-msched\-in\-control\-spec
  \&\-msched\-spec\-ldc  \-msched\-spec\-control\-ldc
  \&\-msched\-prefer\-non\-data\-spec\-insns  \-msched\-prefer\-non\-control\-spec\-insns
  \&\-msched\-stop\-bits\-after\-every\-cycle  \-msched\-count\-spec\-in\-critical\-path
  \&\-msel\-sched\-dont\-check\-control\-spec  \-msched\-fp\-mem\-deps\-zero\-cost
! \&\-msched\-max\-memory\-insns\-hard\-limit  \-msched\-max\-memory\-insns=\fR\fImax\-insns\fR
  .Sp
! \&\fILM32 Options\fR
  \&\fB\-mbarrel\-shift\-enabled  \-mdivide\-enabled  \-mmultiply\-enabled
  \&\-msign\-extend\-enabled  \-muser\-enabled\fR
  .Sp
  \&\fILoongArch Options\fR
! \&\fB\-march=\fR\fIarch\-type\fR  \fB\-mtune=\fR\fItune\-type\fR \fB\-mabi=\fR\fIbase\-abi\-type\fR
! \&\fB\-mfpu=\fR\fIfpu\-type\fR \fB\-msimd=\fR\fIsimd\-type\fR
  \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mno\-lsx \-mlasx \-mno\-lasx
  \&\-mbranch\-cost=\fR\fIn\fR  \fB\-mcheck\-zero\-division \-mno\-check\-zero\-division
  \&\-mcond\-move\-int  \-mno\-cond\-move\-int
*************** in the following sections.
*** 1063,1069 ****
  \&\-mmax\-inline\-memcpy\-size=\fR\fIn\fR
  \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs
  \&\-mdirect\-extern\-access \-mno\-direct\-extern\-access
! \&\-mcmodel=\fR\fIcode-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as
  \&\-mrecip  \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mno\-frecipe \-mdiv32 \-mno\-div32
  \&\-mlam\-bh \-mno\-lam\-bh \-mlamcas \-mno\-lamcas \-mld\-seq\-sa \-mno\-ld\-seq\-sa
  \&\-mtls\-dialect=\fR\fIopt\fR
--- 992,998 ----
  \&\-mmax\-inline\-memcpy\-size=\fR\fIn\fR
  \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs
  \&\-mdirect\-extern\-access \-mno\-direct\-extern\-access
! \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as
  \&\-mrecip  \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mno\-frecipe \-mdiv32 \-mno\-div32
  \&\-mlam\-bh \-mno\-lam\-bh \-mlamcas \-mno\-lamcas \-mld\-seq\-sa \-mno\-ld\-seq\-sa
  \&\-mtls\-dialect=\fR\fIopt\fR
*************** in the following sections.
*** 1074,1081 ****
  \&\-malign\-loops  \-mno\-align\-loops
  \&\-missue\-rate=\fR\fInumber\fR
  \&\fB\-mbranch\-cost=\fR\fInumber\fR
! \&\fB\-mmodel=\fR\fIcode-size-model-type\fR
! \&\fB\-msdata=\fR\fIsdata-type\fR
  \&\fB\-mno\-flush\-func  \-mflush\-func=\fR\fIname\fR
  \&\fB\-mno\-flush\-trap  \-mflush\-trap=\fR\fInumber\fR
  \&\fB\-G\fR \fInum\fR
--- 1003,1010 ----
  \&\-malign\-loops  \-mno\-align\-loops
  \&\-missue\-rate=\fR\fInumber\fR
  \&\fB\-mbranch\-cost=\fR\fInumber\fR
! \&\fB\-mmodel=\fR\fIcode\-size\-model\-type\fR
! \&\fB\-msdata=\fR\fIsdata\-type\fR
  \&\fB\-mno\-flush\-func  \-mflush\-func=\fR\fIname\fR
  \&\fB\-mno\-flush\-trap  \-mflush\-trap=\fR\fInumber\fR
  \&\fB\-G\fR \fInum\fR
*************** in the following sections.
*** 1106,1115 ****
  \&\fB\-mmemcpy  \-mxl\-soft\-mul  \-mxl\-soft\-div  \-mxl\-barrel\-shift
  \&\-mxl\-pattern\-compare  \-mxl\-stack\-check  \-mxl\-gp\-opt  \-mno\-clearbss
  \&\-mxl\-multiply\-high  \-mxl\-float\-convert  \-mxl\-float\-sqrt
! \&\-mbig\-endian  \-mlittle\-endian  \-mxl\-reorder  \-mxl\-mode\-\fR\fIapp-model\fR
  \&\fB\-mpic\-data\-is\-text\-relative\fR
  .Sp
! \&\fI\s-1MIPS\s0 Options\fR
  \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR
  \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5
  \&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6
--- 1035,1044 ----
  \&\fB\-mmemcpy  \-mxl\-soft\-mul  \-mxl\-soft\-div  \-mxl\-barrel\-shift
  \&\-mxl\-pattern\-compare  \-mxl\-stack\-check  \-mxl\-gp\-opt  \-mno\-clearbss
  \&\-mxl\-multiply\-high  \-mxl\-float\-convert  \-mxl\-float\-sqrt
! \&\-mbig\-endian  \-mlittle\-endian  \-mxl\-reorder  \-mxl\-mode\-\fR\fIapp\-model\fR
  \&\fB\-mpic\-data\-is\-text\-relative\fR
  .Sp
! \&\fIMIPS Options\fR
  \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR
  \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5
  \&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6
*************** in the following sections.
*** 1134,1140 ****
  \&\-mloongson\-mmi  \-mno\-loongson\-mmi
  \&\-mloongson\-ext  \-mno\-loongson\-ext
  \&\-mloongson\-ext2  \-mno\-loongson\-ext2
! \&\-mfpu=\fR\fIfpu-type\fR
  \&\fB\-msmartmips  \-mno\-smartmips
  \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx
  \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc
--- 1063,1069 ----
  \&\-mloongson\-mmi  \-mno\-loongson\-mmi
  \&\-mloongson\-ext  \-mno\-loongson\-ext
  \&\-mloongson\-ext2  \-mno\-loongson\-ext2
! \&\-mfpu=\fR\fIfpu\-type\fR
  \&\fB\-msmartmips  \-mno\-smartmips
  \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx
  \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc
*************** in the following sections.
*** 1169,1198 ****
  \&\-mrelax\-pic\-calls  \-mno\-relax\-pic\-calls  \-mmcount\-ra\-address
  \&\-mframe\-header\-opt  \-mno\-frame\-header\-opt\fR
  .Sp
! \&\fI\s-1MMIX\s0 Options\fR
  \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu
  \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols
  \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses
  \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
  .Sp
! \&\fI\s-1MN10300\s0 Options\fR
  \&\fB\-mmult\-bug  \-mno\-mult\-bug
  \&\-mno\-am33  \-mam33  \-mam33\-2  \-mam34
! \&\-mtune=\fR\fIcpu-type\fR
  \&\fB\-mreturn\-pointer\-on\-d0
  \&\-mno\-crt0  \-mrelax  \-mliw  \-msetlb\fR
  .Sp
  \&\fIMoxie Options\fR
  \&\fB\-meb  \-mel  \-mmul.x  \-mno\-crt0\fR
  .Sp
! \&\fI\s-1MSP430\s0 Options\fR
  \&\fB\-msim  \-masm\-hex  \-mmcu=  \-mcpu=  \-mlarge  \-msmall  \-mrelax
  \&\-mwarn\-mcu
  \&\-mcode\-region=  \-mdata\-region=
  \&\-msilicon\-errata=  \-msilicon\-errata\-warn=
  \&\-mhwmult=  \-minrt  \-mtiny\-printf  \-mmax\-inline\-shift=\fR
  .Sp
! \&\fI\s-1NDS32\s0 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian
  \&\-mreduced\-regs  \-mfull\-regs
  \&\-mcmov  \-mno\-cmov
--- 1098,1127 ----
  \&\-mrelax\-pic\-calls  \-mno\-relax\-pic\-calls  \-mmcount\-ra\-address
  \&\-mframe\-header\-opt  \-mno\-frame\-header\-opt\fR
  .Sp
! \&\fIMMIX Options\fR
  \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu
  \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols
  \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses
  \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
  .Sp
! \&\fIMN10300 Options\fR
  \&\fB\-mmult\-bug  \-mno\-mult\-bug
  \&\-mno\-am33  \-mam33  \-mam33\-2  \-mam34
! \&\-mtune=\fR\fIcpu\-type\fR
  \&\fB\-mreturn\-pointer\-on\-d0
  \&\-mno\-crt0  \-mrelax  \-mliw  \-msetlb\fR
  .Sp
  \&\fIMoxie Options\fR
  \&\fB\-meb  \-mel  \-mmul.x  \-mno\-crt0\fR
  .Sp
! \&\fIMSP430 Options\fR
  \&\fB\-msim  \-masm\-hex  \-mmcu=  \-mcpu=  \-mlarge  \-msmall  \-mrelax
  \&\-mwarn\-mcu
  \&\-mcode\-region=  \-mdata\-region=
  \&\-msilicon\-errata=  \-msilicon\-errata\-warn=
  \&\-mhwmult=  \-minrt  \-mtiny\-printf  \-mmax\-inline\-shift=\fR
  .Sp
! \&\fINDS32 Options\fR
  \&\fB\-mbig\-endian  \-mlittle\-endian
  \&\-mreduced\-regs  \-mfull\-regs
  \&\-mcmov  \-mno\-cmov
*************** in the following sections.
*** 1204,1213 ****
  \&\-misr\-vector\-size=\fR\fInum\fR
  \&\fB\-mcache\-block\-size=\fR\fInum\fR
  \&\fB\-march=\fR\fIarch\fR
! \&\fB\-mcmodel=\fR\fIcode-model\fR
  \&\fB\-mctor\-dtor  \-mrelax\fR
  .Sp
! \&\fINios \s-1II\s0 Options\fR
  \&\fB\-G\fR \fInum\fR  \fB\-mgpopt=\fR\fIoption\fR  \fB\-mgpopt  \-mno\-gpopt
  \&\-mgprel\-sec=\fR\fIregexp\fR  \fB\-mr0rel\-sec=\fR\fIregexp\fR
  \&\fB\-mel  \-meb
--- 1133,1142 ----
  \&\-misr\-vector\-size=\fR\fInum\fR
  \&\fB\-mcache\-block\-size=\fR\fInum\fR
  \&\fB\-march=\fR\fIarch\fR
! \&\fB\-mcmodel=\fR\fIcode\-model\fR
  \&\fB\-mctor\-dtor  \-mrelax\fR
  .Sp
! \&\fINios II Options\fR
  \&\fB\-G\fR \fInum\fR  \fB\-mgpopt=\fR\fIoption\fR  \fB\-mgpopt  \-mno\-gpopt
  \&\-mgprel\-sec=\fR\fIregexp\fR  \fB\-mr0rel\-sec=\fR\fIregexp\fR
  \&\fB\-mel  \-meb
*************** in the following sections.
*** 1220,1226 ****
  \&\fB\-mhal  \-msmallc  \-msys\-crt0=\fR\fIname\fR  \fB\-msys\-lib=\fR\fIname\fR
  \&\fB\-march=\fR\fIarch\fR  \fB\-mbmx  \-mno\-bmx  \-mcdx  \-mno\-cdx\fR
  .Sp
! \&\fINvidia \s-1PTX\s0 Options\fR
  \&\fB\-m64  \-mmainkernel  \-moptimize\fR
  .Sp
  \&\fIOpenRISC Options\fR
--- 1149,1155 ----
  \&\fB\-mhal  \-msmallc  \-msys\-crt0=\fR\fIname\fR  \fB\-msys\-lib=\fR\fIname\fR
  \&\fB\-march=\fR\fIarch\fR  \fB\-mbmx  \-mno\-bmx  \-mcdx  \-mno\-cdx\fR
  .Sp
! \&\fINvidia PTX Options\fR
  \&\fB\-m64  \-mmainkernel  \-moptimize\fR
  .Sp
  \&\fIOpenRISC Options\fR
*************** in the following sections.
*** 1228,1256 ****
  \&\-msoft\-mul  \-msoft\-div
  \&\-msoft\-float  \-mhard\-float  \-mdouble\-float \-munordered\-float
  \&\-mcmov  \-mror  \-mrori  \-msext  \-msfimm  \-mshftimm
! \&\-mcmodel=\fR\fIcode-model\fR
  .Sp
! \&\fI\s-1PDP\-11\s0 Options\fR
  \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10
  \&\-mint32  \-mno\-int16  \-mint16  \-mno\-int32
  \&\-msplit  \-munix\-asm  \-mdec\-asm  \-mgnu\-asm  \-mlra\fR
  .Sp
  \&\fIPowerPC Options\fR
! See \s-1RS/6000\s0 and PowerPC Options.
  .Sp
! \&\fI\s-1PRU\s0 Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-minrt  \-mno\-relax  \-mloop
  \&\-mabi=\fR\fIvariant\fR
  .Sp
! \&\fIRISC-V Options\fR
  \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR
  \&\fB\-mplt  \-mno\-plt
! \&\-mabi=\fR\fIABI-string\fR
  \&\fB\-mfdiv  \-mno\-fdiv
  \&\-mdiv  \-mno\-div
! \&\-misa\-spec=\fR\fIISA-spec-string\fR
! \&\fB\-march=\fR\fIISA-string\fR
! \&\fB\-mtune=\fR\fIprocessor-string\fR
  \&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR
  \&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR
  \&\fB\-msave\-restore  \-mno\-save\-restore
--- 1157,1185 ----
  \&\-msoft\-mul  \-msoft\-div
  \&\-msoft\-float  \-mhard\-float  \-mdouble\-float \-munordered\-float
  \&\-mcmov  \-mror  \-mrori  \-msext  \-msfimm  \-mshftimm
! \&\-mcmodel=\fR\fIcode\-model\fR
  .Sp
! \&\fIPDP\-11 Options\fR
  \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10
  \&\-mint32  \-mno\-int16  \-mint16  \-mno\-int32
  \&\-msplit  \-munix\-asm  \-mdec\-asm  \-mgnu\-asm  \-mlra\fR
  .Sp
  \&\fIPowerPC Options\fR
! See RS/6000 and PowerPC Options.
  .Sp
! \&\fIPRU Options\fR
  \&\fB\-mmcu=\fR\fImcu\fR  \fB\-minrt  \-mno\-relax  \-mloop
  \&\-mabi=\fR\fIvariant\fR
  .Sp
! \&\fIRISC\-V Options\fR
  \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR
  \&\fB\-mplt  \-mno\-plt
! \&\-mabi=\fR\fIABI\-string\fR
  \&\fB\-mfdiv  \-mno\-fdiv
  \&\-mdiv  \-mno\-div
! \&\-misa\-spec=\fR\fIISA\-spec\-string\fR
! \&\fB\-march=\fR\fIISA\-string\fR
! \&\fB\-mtune=\fR\fIprocessor\-string\fR
  \&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR
  \&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR
  \&\fB\-msave\-restore  \-mno\-save\-restore
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1272,1286 ****
  \&\-minline\-strncmp  \-mno\-inline\-strncmp
  \&\-mtls\-dialect=desc  \-mtls\-dialect=trad\fR
  .Sp
! \&\fI\s-1RL78\s0 Options\fR
  \&\fB\-msim  \-mmul=none  \-mmul=g13  \-mmul=g14  \-mallregs
  \&\-mcpu=g10  \-mcpu=g13  \-mcpu=g14  \-mg10  \-mg13  \-mg14
  \&\-m64bit\-doubles  \-m32bit\-doubles  \-msave\-mduc\-in\-interrupts\fR
  .Sp
! \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
! \&\fB\-mcpu=\fR\fIcpu-type\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR
! \&\fB\-mcmodel=\fR\fIcode-model\fR
  \&\fB\-mpowerpc64
  \&\-maltivec  \-mno\-altivec
  \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt
--- 1201,1215 ----
  \&\-minline\-strncmp  \-mno\-inline\-strncmp
  \&\-mtls\-dialect=desc  \-mtls\-dialect=trad\fR
  .Sp
! \&\fIRL78 Options\fR
  \&\fB\-msim  \-mmul=none  \-mmul=g13  \-mmul=g14  \-mallregs
  \&\-mcpu=g10  \-mcpu=g13  \-mcpu=g14  \-mg10  \-mg13  \-mg14
  \&\-m64bit\-doubles  \-m32bit\-doubles  \-msave\-mduc\-in\-interrupts\fR
  .Sp
! \&\fIRS/6000 and PowerPC Options\fR
! \&\fB\-mcpu=\fR\fIcpu\-type\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR
! \&\fB\-mcmodel=\fR\fIcode\-model\fR
  \&\fB\-mpowerpc64
  \&\-maltivec  \-mno\-altivec
  \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1307,1313 ****
  \&\-mcall\-sysv  \-mcall\-sysv\-eabi  \-mcall\-sysv\-noeabi
  \&\-mtraceback=\fR\fItraceback_type\fR
  \&\fB\-maix\-struct\-return  \-msvr4\-struct\-return
! \&\-mabi=\fR\fIabi-type\fR  \fB\-msecure\-plt  \-mbss\-plt
  \&\-mlongcall  \-mno\-longcall  \-mpltseq  \-mno\-pltseq
  \&\-mblock\-move\-inline\-limit=\fR\fInum\fR
  \&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR
--- 1236,1242 ----
  \&\-mcall\-sysv  \-mcall\-sysv\-eabi  \-mcall\-sysv\-noeabi
  \&\-mtraceback=\fR\fItraceback_type\fR
  \&\fB\-maix\-struct\-return  \-msvr4\-struct\-return
! \&\-mabi=\fR\fIabi\-type\fR  \fB\-msecure\-plt  \-mbss\-plt
  \&\-mlongcall  \-mno\-longcall  \-mpltseq  \-mno\-pltseq
  \&\-mblock\-move\-inline\-limit=\fR\fInum\fR
  \&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1338,1344 ****
  \&\-mpcrel \-mno\-pcrel \-mmma \-mno\-mmma \-mrop\-protect \-mno\-rop\-protect
  \&\-mprivileged \-mno\-privileged\fR
  .Sp
! \&\fI\s-1RX\s0 Options\fR
  \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
  \&\-mcpu=
  \&\-mbig\-endian\-data  \-mlittle\-endian\-data
--- 1267,1273 ----
  \&\-mpcrel \-mno\-pcrel \-mmma \-mno\-mmma \-mrop\-protect \-mno\-rop\-protect
  \&\-mprivileged \-mno\-privileged\fR
  .Sp
! \&\fIRX Options\fR
  \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
  \&\-mcpu=
  \&\-mbig\-endian\-data  \-mlittle\-endian\-data
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1355,1361 ****
  \&\-msave\-acc\-in\-interrupts\fR
  .Sp
  \&\fIS/390 and zSeries Options\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR
  \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp  \-mno\-hard\-dfp
  \&\-mlong\-double\-64  \-mlong\-double\-128
  \&\-mbackchain  \-mno\-backchain  \-mpacked\-stack  \-mno\-packed\-stack
--- 1284,1290 ----
  \&\-msave\-acc\-in\-interrupts\fR
  .Sp
  \&\fIS/390 and zSeries Options\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR  \fB\-march=\fR\fIcpu\-type\fR
  \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp  \-mno\-hard\-dfp
  \&\-mlong\-double\-64  \-mlong\-double\-128
  \&\-mbackchain  \-mno\-backchain  \-mpacked\-stack  \-mno\-packed\-stack
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1367,1373 ****
  \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size  \-mstack\-guard
  \&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
  .Sp
! \&\fI\s-1SH\s0 Options\fR
  \&\fB\-m1  \-m2  \-m2e
  \&\-m2a\-nofpu  \-m2a\-single\-only  \-m2a\-single  \-m2a
  \&\-m3  \-m3e
--- 1296,1302 ----
  \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size  \-mstack\-guard
  \&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
  .Sp
! \&\fISH Options\fR
  \&\fB\-m1  \-m2  \-m2e
  \&\-m2a\-nofpu  \-m2a\-single\-only  \-m2a\-single  \-m2a
  \&\-m3  \-m3e
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1377,1385 ****
  \&\-mbigtable  \-mfmovd  \-mrenesas  \-mno\-renesas  \-mnomacsave
  \&\-mieee  \-mno\-ieee  \-mbitops  \-misize  \-minline\-ic_invalidate  \-mpadstruct
  \&\-mprefergot  \-musermode  \-multcost=\fR\fInumber\fR  \fB\-mdiv=\fR\fIstrategy\fR
! \&\fB\-mdivsi3_libfunc=\fR\fIname\fR  \fB\-mfixed\-range=\fR\fIregister-range\fR
  \&\fB\-maccumulate\-outgoing\-args
! \&\-matomic\-model=\fR\fIatomic-model\fR
  \&\fB\-mbranch\-cost=\fR\fInum\fR  \fB\-mzdcbranch  \-mno\-zdcbranch
  \&\-mcbranch\-force\-delay\-slot
  \&\-mfused\-madd  \-mno\-fused\-madd  \-mfsca  \-mno\-fsca  \-mfsrra  \-mno\-fsrra
--- 1306,1314 ----
  \&\-mbigtable  \-mfmovd  \-mrenesas  \-mno\-renesas  \-mnomacsave
  \&\-mieee  \-mno\-ieee  \-mbitops  \-misize  \-minline\-ic_invalidate  \-mpadstruct
  \&\-mprefergot  \-musermode  \-multcost=\fR\fInumber\fR  \fB\-mdiv=\fR\fIstrategy\fR
! \&\fB\-mdivsi3_libfunc=\fR\fIname\fR  \fB\-mfixed\-range=\fR\fIregister\-range\fR
  \&\fB\-maccumulate\-outgoing\-args
! \&\-matomic\-model=\fR\fIatomic\-model\fR
  \&\fB\-mbranch\-cost=\fR\fInum\fR  \fB\-mzdcbranch  \-mno\-zdcbranch
  \&\-mcbranch\-force\-delay\-slot
  \&\-mfused\-madd  \-mno\-fused\-madd  \-mfsca  \-mno\-fsca  \-mfsrra  \-mno\-fsrra
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1389,1399 ****
  \&\fB\-mclear\-hwcap  \-mno\-clear\-hwcap  \-mimpure\-text  \-mno\-impure\-text
  \&\-pthreads\fR
  .Sp
! \&\fI\s-1SPARC\s0 Options\fR
! \&\fB\-mcpu=\fR\fIcpu-type\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR
! \&\fB\-mcmodel=\fR\fIcode-model\fR
! \&\fB\-mmemory\-model=\fR\fImem-model\fR
  \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs
  \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat
  \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
--- 1318,1328 ----
  \&\fB\-mclear\-hwcap  \-mno\-clear\-hwcap  \-mimpure\-text  \-mno\-impure\-text
  \&\-pthreads\fR
  .Sp
! \&\fISPARC Options\fR
! \&\fB\-mcpu=\fR\fIcpu\-type\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR
! \&\fB\-mcmodel=\fR\fIcode\-model\fR
! \&\fB\-mmemory\-model=\fR\fImem\-model\fR
  \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs
  \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat
  \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1430,1443 ****
  \&\-mrh850\-abi
  \&\-mbig\-switch\fR
  .Sp
! \&\fI\s-1VAX\s0 Options\fR
  \&\fB\-mg  \-mgnu  \-munix  \-mlra\fR
  .Sp
  \&\fIVisium Options\fR
  \&\fB\-mdebug  \-msim  \-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
! \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR  \fB\-msv\-mode  \-muser\-mode\fR
  .Sp
! \&\fI\s-1VMS\s0 Options\fR
  \&\fB\-mvms\-return\-codes  \-mdebug\-main=\fR\fIprefix\fR  \fB\-mmalloc64
  \&\-mpointer\-size=\fR\fIsize\fR
  .Sp
--- 1359,1372 ----
  \&\-mrh850\-abi
  \&\-mbig\-switch\fR
  .Sp
! \&\fIVAX Options\fR
  \&\fB\-mg  \-mgnu  \-munix  \-mlra\fR
  .Sp
  \&\fIVisium Options\fR
  \&\fB\-mdebug  \-msim  \-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float
! \&\-mcpu=\fR\fIcpu\-type\fR  \fB\-mtune=\fR\fIcpu\-type\fR  \fB\-msv\-mode  \-muser\-mode\fR
  .Sp
! \&\fIVMS Options\fR
  \&\fB\-mvms\-return\-codes  \-mdebug\-main=\fR\fIprefix\fR  \fB\-mmalloc64
  \&\-mpointer\-size=\fR\fIsize\fR
  .Sp
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1446,1453 ****
  \&\-Xbind\-lazy  \-Xbind\-now\fR
  .Sp
  \&\fIx86 Options\fR
! \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR  \fB\-mdump\-tune\-features  \-mno\-default
  \&\-mfpmath=\fR\fIunit\fR
  \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387
  \&\-mno\-fp\-ret\-in\-387  \-m80387  \-mhard\-float  \-msoft\-float
--- 1375,1382 ----
  \&\-Xbind\-lazy  \-Xbind\-now\fR
  .Sp
  \&\fIx86 Options\fR
! \&\fB\-mtune=\fR\fIcpu\-type\fR  \fB\-march=\fR\fIcpu\-type\fR
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR  \fB\-mdump\-tune\-features  \-mno\-default
  \&\-mfpmath=\fR\fIunit\fR
  \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387
  \&\-mno\-fp\-ret\-in\-387  \-m80387  \-mhard\-float  \-msoft\-float
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1487,1493 ****
  \&\-mveclibabi=\fR\fItype\fR  \fB\-mvect8\-ret\-in\-mem
  \&\-mpc32  \-mpc64  \-mpc80  \-mdaz\-ftz \-mstackrealign
  \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone  \-mno\-tls\-direct\-seg\-refs
! \&\-mcmodel=\fR\fIcode-model\fR  \fB\-mabi=\fR\fIname\fR  \fB\-maddress\-mode=\fR\fImode\fR
  \&\fB\-m32  \-m64  \-mx32  \-m16  \-miamcu  \-mlarge\-data\-threshold=\fR\fInum\fR
  \&\fB\-msse2avx  \-mfentry  \-mrecord\-mcount  \-mnop\-mcount  \-m8bit\-idiv
  \&\-minstrument\-return=\fR\fItype\fR \fB\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR
--- 1416,1422 ----
  \&\-mveclibabi=\fR\fItype\fR  \fB\-mvect8\-ret\-in\-mem
  \&\-mpc32  \-mpc64  \-mpc80  \-mdaz\-ftz \-mstackrealign
  \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone  \-mno\-tls\-direct\-seg\-refs
! \&\-mcmodel=\fR\fIcode\-model\fR  \fB\-mabi=\fR\fIname\fR  \fB\-maddress\-mode=\fR\fImode\fR
  \&\fB\-m32  \-m64  \-mx32  \-m16  \-miamcu  \-mlarge\-data\-threshold=\fR\fInum\fR
  \&\fB\-msse2avx  \-mfentry  \-mrecord\-mcount  \-mnop\-mcount  \-m8bit\-idiv
  \&\-minstrument\-return=\fR\fItype\fR \fB\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR
*************** See \s-1RS/6000\s0 and PowerPC Options.
*** 1519,1525 ****
  \&\-mauto\-litpools  \-mno\-auto\-litpools
  \&\-mtarget\-align  \-mno\-target\-align
  \&\-mlongcalls  \-mno\-longcalls
! \&\-mabi=\fR\fIabi-type\fR
  \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR
  \&\fB\-mstrict\-align  \-mno\-strict\-align\fR
  .Sp
--- 1448,1454 ----
  \&\-mauto\-litpools  \-mno\-auto\-litpools
  \&\-mtarget\-align  \-mno\-target\-align
  \&\-mlongcalls  \-mno\-longcalls
! \&\-mabi=\fR\fIabi\-type\fR
  \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR
  \&\fB\-mstrict\-align  \-mno\-strict\-align\fR
  .Sp
*************** See S/390 and zSeries Options.
*** 1528,1534 ****
  .SS "Options Controlling the Kind of Output"
  .IX Subsection "Options Controlling the Kind of Output"
  Compilation can involve up to four stages: preprocessing, compilation
! proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
  preprocessing and compiling several files either into several
  assembler input files, or into one assembler input file; then each
  assembler input file produces an object file, and linking combines all
--- 1457,1463 ----
  .SS "Options Controlling the Kind of Output"
  .IX Subsection "Options Controlling the Kind of Output"
  Compilation can involve up to four stages: preprocessing, compilation
! proper, assembly and linking, always in that order.  GCC is capable of
  preprocessing and compiling several files either into several
  assembler input files, or into one assembler input file; then each
  assembler input file produces an object file, and linking combines all
*************** into an executable file.
*** 1537,1707 ****
  .PP
  For any given input file, the file name suffix determines what kind of
  compilation is done:
! .IP "\fIfile\fR\fB.c\fR" 4
  .IX Item "file.c"
  C source code that must be preprocessed.
! .IP "\fIfile\fR\fB.i\fR" 4
  .IX Item "file.i"
  C source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.ii\fR" 4
  .IX Item "file.ii"
! \&\*(C+ source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.m\fR" 4
  .IX Item "file.m"
! Objective-C source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective-C program work.
! .IP "\fIfile\fR\fB.mi\fR" 4
  .IX Item "file.mi"
! Objective-C source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.mm\fR" 4
  .IX Item "file.mm"
  .PD 0
! .IP "\fIfile\fR\fB.M\fR" 4
  .IX Item "file.M"
  .PD
! Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
  to a literal capital M.
! .IP "\fIfile\fR\fB.mii\fR" 4
  .IX Item "file.mii"
! Objective\-\*(C+ source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.h\fR" 4
  .IX Item "file.h"
! C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
! precompiled header (default), or C, \*(C+ header file to be turned into an
  Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
! .IP "\fIfile\fR\fB.cc\fR" 4
  .IX Item "file.cc"
  .PD 0
! .IP "\fIfile\fR\fB.cp\fR" 4
  .IX Item "file.cp"
! .IP "\fIfile\fR\fB.cxx\fR" 4
  .IX Item "file.cxx"
! .IP "\fIfile\fR\fB.cpp\fR" 4
  .IX Item "file.cpp"
! .IP "\fIfile\fR\fB.CPP\fR" 4
  .IX Item "file.CPP"
! .IP "\fIfile\fR\fB.c++\fR" 4
  .IX Item "file.c++"
! .IP "\fIfile\fR\fB.C\fR" 4
  .IX Item "file.C"
  .PD
! \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
  the last two letters must both be literally \fBx\fR.  Likewise,
  \&\fB.C\fR refers to a literal capital C.
! .IP "\fIfile\fR\fB.mm\fR" 4
  .IX Item "file.mm"
  .PD 0
! .IP "\fIfile\fR\fB.M\fR" 4
  .IX Item "file.M"
  .PD
! Objective\-\*(C+ source code that must be preprocessed.
! .IP "\fIfile\fR\fB.mii\fR" 4
  .IX Item "file.mii"
! Objective\-\*(C+ source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.hh\fR" 4
  .IX Item "file.hh"
  .PD 0
! .IP "\fIfile\fR\fB.H\fR" 4
  .IX Item "file.H"
! .IP "\fIfile\fR\fB.hp\fR" 4
  .IX Item "file.hp"
! .IP "\fIfile\fR\fB.hxx\fR" 4
  .IX Item "file.hxx"
! .IP "\fIfile\fR\fB.hpp\fR" 4
  .IX Item "file.hpp"
! .IP "\fIfile\fR\fB.HPP\fR" 4
  .IX Item "file.HPP"
! .IP "\fIfile\fR\fB.h++\fR" 4
  .IX Item "file.h++"
! .IP "\fIfile\fR\fB.tcc\fR" 4
  .IX Item "file.tcc"
  .PD
! \&\*(C+ header file to be turned into a precompiled header or Ada spec.
! .IP "\fIfile\fR\fB.f\fR" 4
  .IX Item "file.f"
  .PD 0
! .IP "\fIfile\fR\fB.for\fR" 4
  .IX Item "file.for"
! .IP "\fIfile\fR\fB.ftn\fR" 4
  .IX Item "file.ftn"
! .IP "\fIfile\fR\fB.fi\fR" 4
  .IX Item "file.fi"
  .PD
  Fixed form Fortran source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.F\fR" 4
  .IX Item "file.F"
  .PD 0
! .IP "\fIfile\fR\fB.FOR\fR" 4
  .IX Item "file.FOR"
! .IP "\fIfile\fR\fB.fpp\fR" 4
  .IX Item "file.fpp"
! .IP "\fIfile\fR\fB.FPP\fR" 4
  .IX Item "file.FPP"
! .IP "\fIfile\fR\fB.FTN\fR" 4
  .IX Item "file.FTN"
  .PD
  Fixed form Fortran source code that must be preprocessed (with the traditional
  preprocessor).
! .IP "\fIfile\fR\fB.f90\fR" 4
  .IX Item "file.f90"
  .PD 0
! .IP "\fIfile\fR\fB.f95\fR" 4
  .IX Item "file.f95"
! .IP "\fIfile\fR\fB.f03\fR" 4
  .IX Item "file.f03"
! .IP "\fIfile\fR\fB.f08\fR" 4
  .IX Item "file.f08"
! .IP "\fIfile\fR\fB.fii\fR" 4
  .IX Item "file.fii"
  .PD
  Free form Fortran source code that should not be preprocessed.
! .IP "\fIfile\fR\fB.F90\fR" 4
  .IX Item "file.F90"
  .PD 0
! .IP "\fIfile\fR\fB.F95\fR" 4
  .IX Item "file.F95"
! .IP "\fIfile\fR\fB.F03\fR" 4
  .IX Item "file.F03"
! .IP "\fIfile\fR\fB.F08\fR" 4
  .IX Item "file.F08"
  .PD
  Free form Fortran source code that must be preprocessed (with the
  traditional preprocessor).
! .IP "\fIfile\fR\fB.go\fR" 4
  .IX Item "file.go"
  Go source code.
! .IP "\fIfile\fR\fB.d\fR" 4
  .IX Item "file.d"
  D source code.
! .IP "\fIfile\fR\fB.di\fR" 4
  .IX Item "file.di"
  D interface file.
! .IP "\fIfile\fR\fB.dd\fR" 4
  .IX Item "file.dd"
  D documentation code (Ddoc).
! .IP "\fIfile\fR\fB.ads\fR" 4
  .IX Item "file.ads"
  Ada source code file that contains a library unit declaration (a
  declaration of a package, subprogram, or generic, or a generic
  instantiation), or a library unit renaming declaration (a package,
  generic, or subprogram renaming declaration).  Such files are also
  called \fIspecs\fR.
! .IP "\fIfile\fR\fB.adb\fR" 4
  .IX Item "file.adb"
  Ada source code file containing a library unit body (a subprogram or
  package body).  Such files are also called \fIbodies\fR.
! .IP "\fIfile\fR\fB.s\fR" 4
  .IX Item "file.s"
  Assembler code.
! .IP "\fIfile\fR\fB.S\fR" 4
  .IX Item "file.S"
  .PD 0
! .IP "\fIfile\fR\fB.sx\fR" 4
  .IX Item "file.sx"
  .PD
  Assembler code that must be preprocessed.
! .IP "\fIother\fR" 4
  .IX Item "other"
  An object file to be fed straight into linking.
  Any file name with no recognized suffix is treated this way.
--- 1466,1636 ----
  .PP
  For any given input file, the file name suffix determines what kind of
  compilation is done:
! .IP \fIfile\fR\fB.c\fR 4
  .IX Item "file.c"
  C source code that must be preprocessed.
! .IP \fIfile\fR\fB.i\fR 4
  .IX Item "file.i"
  C source code that should not be preprocessed.
! .IP \fIfile\fR\fB.ii\fR 4
  .IX Item "file.ii"
! C++ source code that should not be preprocessed.
! .IP \fIfile\fR\fB.m\fR 4
  .IX Item "file.m"
! Objective\-C source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective\-C program work.
! .IP \fIfile\fR\fB.mi\fR 4
  .IX Item "file.mi"
! Objective\-C source code that should not be preprocessed.
! .IP \fIfile\fR\fB.mm\fR 4
  .IX Item "file.mm"
  .PD 0
! .IP \fIfile\fR\fB.M\fR 4
  .IX Item "file.M"
  .PD
! Objective\-C++ source code.  Note that you must link with the \fIlibobjc\fR
! library to make an Objective\-C++ program work.  Note that \fB.M\fR refers
  to a literal capital M.
! .IP \fIfile\fR\fB.mii\fR 4
  .IX Item "file.mii"
! Objective\-C++ source code that should not be preprocessed.
! .IP \fIfile\fR\fB.h\fR 4
  .IX Item "file.h"
! C, C++, Objective\-C or Objective\-C++ header file to be turned into a
! precompiled header (default), or C, C++ header file to be turned into an
  Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
! .IP \fIfile\fR\fB.cc\fR 4
  .IX Item "file.cc"
  .PD 0
! .IP \fIfile\fR\fB.cp\fR 4
  .IX Item "file.cp"
! .IP \fIfile\fR\fB.cxx\fR 4
  .IX Item "file.cxx"
! .IP \fIfile\fR\fB.cpp\fR 4
  .IX Item "file.cpp"
! .IP \fIfile\fR\fB.CPP\fR 4
  .IX Item "file.CPP"
! .IP \fIfile\fR\fB.c++\fR 4
  .IX Item "file.c++"
! .IP \fIfile\fR\fB.C\fR 4
  .IX Item "file.C"
  .PD
! C++ source code that must be preprocessed.  Note that in \fB.cxx\fR,
  the last two letters must both be literally \fBx\fR.  Likewise,
  \&\fB.C\fR refers to a literal capital C.
! .IP \fIfile\fR\fB.mm\fR 4
  .IX Item "file.mm"
  .PD 0
! .IP \fIfile\fR\fB.M\fR 4
  .IX Item "file.M"
  .PD
! Objective\-C++ source code that must be preprocessed.
! .IP \fIfile\fR\fB.mii\fR 4
  .IX Item "file.mii"
! Objective\-C++ source code that should not be preprocessed.
! .IP \fIfile\fR\fB.hh\fR 4
  .IX Item "file.hh"
  .PD 0
! .IP \fIfile\fR\fB.H\fR 4
  .IX Item "file.H"
! .IP \fIfile\fR\fB.hp\fR 4
  .IX Item "file.hp"
! .IP \fIfile\fR\fB.hxx\fR 4
  .IX Item "file.hxx"
! .IP \fIfile\fR\fB.hpp\fR 4
  .IX Item "file.hpp"
! .IP \fIfile\fR\fB.HPP\fR 4
  .IX Item "file.HPP"
! .IP \fIfile\fR\fB.h++\fR 4
  .IX Item "file.h++"
! .IP \fIfile\fR\fB.tcc\fR 4
  .IX Item "file.tcc"
  .PD
! C++ header file to be turned into a precompiled header or Ada spec.
! .IP \fIfile\fR\fB.f\fR 4
  .IX Item "file.f"
  .PD 0
! .IP \fIfile\fR\fB.for\fR 4
  .IX Item "file.for"
! .IP \fIfile\fR\fB.ftn\fR 4
  .IX Item "file.ftn"
! .IP \fIfile\fR\fB.fi\fR 4
  .IX Item "file.fi"
  .PD
  Fixed form Fortran source code that should not be preprocessed.
! .IP \fIfile\fR\fB.F\fR 4
  .IX Item "file.F"
  .PD 0
! .IP \fIfile\fR\fB.FOR\fR 4
  .IX Item "file.FOR"
! .IP \fIfile\fR\fB.fpp\fR 4
  .IX Item "file.fpp"
! .IP \fIfile\fR\fB.FPP\fR 4
  .IX Item "file.FPP"
! .IP \fIfile\fR\fB.FTN\fR 4
  .IX Item "file.FTN"
  .PD
  Fixed form Fortran source code that must be preprocessed (with the traditional
  preprocessor).
! .IP \fIfile\fR\fB.f90\fR 4
  .IX Item "file.f90"
  .PD 0
! .IP \fIfile\fR\fB.f95\fR 4
  .IX Item "file.f95"
! .IP \fIfile\fR\fB.f03\fR 4
  .IX Item "file.f03"
! .IP \fIfile\fR\fB.f08\fR 4
  .IX Item "file.f08"
! .IP \fIfile\fR\fB.fii\fR 4
  .IX Item "file.fii"
  .PD
  Free form Fortran source code that should not be preprocessed.
! .IP \fIfile\fR\fB.F90\fR 4
  .IX Item "file.F90"
  .PD 0
! .IP \fIfile\fR\fB.F95\fR 4
  .IX Item "file.F95"
! .IP \fIfile\fR\fB.F03\fR 4
  .IX Item "file.F03"
! .IP \fIfile\fR\fB.F08\fR 4
  .IX Item "file.F08"
  .PD
  Free form Fortran source code that must be preprocessed (with the
  traditional preprocessor).
! .IP \fIfile\fR\fB.go\fR 4
  .IX Item "file.go"
  Go source code.
! .IP \fIfile\fR\fB.d\fR 4
  .IX Item "file.d"
  D source code.
! .IP \fIfile\fR\fB.di\fR 4
  .IX Item "file.di"
  D interface file.
! .IP \fIfile\fR\fB.dd\fR 4
  .IX Item "file.dd"
  D documentation code (Ddoc).
! .IP \fIfile\fR\fB.ads\fR 4
  .IX Item "file.ads"
  Ada source code file that contains a library unit declaration (a
  declaration of a package, subprogram, or generic, or a generic
  instantiation), or a library unit renaming declaration (a package,
  generic, or subprogram renaming declaration).  Such files are also
  called \fIspecs\fR.
! .IP \fIfile\fR\fB.adb\fR 4
  .IX Item "file.adb"
  Ada source code file containing a library unit body (a subprogram or
  package body).  Such files are also called \fIbodies\fR.
! .IP \fIfile\fR\fB.s\fR 4
  .IX Item "file.s"
  Assembler code.
! .IP \fIfile\fR\fB.S\fR 4
  .IX Item "file.S"
  .PD 0
! .IP \fIfile\fR\fB.sx\fR 4
  .IX Item "file.sx"
  .PD
  Assembler code that must be preprocessed.
! .IP \fIother\fR 4
  .IX Item "other"
  An object file to be fed straight into linking.
  Any file name with no recognized suffix is treated this way.
*************** Specify explicitly the \fIlanguage\fR fo
*** 1714,1729 ****
  name suffix).  This option applies to all following input files until
  the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
  .Sp
! .Vb 9
  \&        c  c\-header  cpp\-output
  \&        c++  c++\-header  c++\-system\-header c++\-user\-header c++\-cpp\-output
! \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
! \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
  \&        assembler  assembler\-with\-cpp
! \&        ada
  \&        d
! \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
  \&        go
  .Ve
  .IP "\fB\-x none\fR" 4
  .IX Item "-x none"
--- 1643,1662 ----
  name suffix).  This option applies to all following input files until
  the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
  .Sp
! .Vb 10
  \&        c  c\-header  cpp\-output
  \&        c++  c++\-header  c++\-system\-header c++\-user\-header c++\-cpp\-output
! \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output  objc\-cpp\-output
! \&        objective\-c++  objective\-c++\-header  objective\-c++\-cpp\-output
! \&        objc++\-cpp\-output
  \&        assembler  assembler\-with\-cpp
! \&        ada  adascil  adawhy
  \&        d
! \&        f77  f77\-cpp\-input  f95  f95\-cpp\-input
  \&        go
+ \&        modula\-2  modula\-2\-cpp\-output
+ \&        rust
+ \&        lto
  .Ve
  .IP "\fB\-x none\fR" 4
  .IX Item "-x none"
*************** If you only want some of the stages of c
*** 1735,1742 ****
  \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
  one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
  \&\fBgcc\fR is to stop.  Note that some combinations (for example,
! \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
! .IP "\fB\-c\fR" 4
  .IX Item "-c"
  Compile or assemble the source files, but do not link.  The linking
  stage simply is not done.  The ultimate output is in the form of an
--- 1668,1675 ----
  \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
  one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
  \&\fBgcc\fR is to stop.  Note that some combinations (for example,
! \&\fB\-x cpp\-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
! .IP \fB\-c\fR 4
  .IX Item "-c"
  Compile or assemble the source files, but do not link.  The linking
  stage simply is not done.  The ultimate output is in the form of an
*************** the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR,
*** 1747,1769 ****
  .Sp
  Unrecognized input files, not requiring compilation or assembly, are
  ignored.
! .IP "\fB\-S\fR" 4
  .IX Item "-S"
  Stop after the stage of compilation proper; do not assemble.  The output
! is in the form of an assembler code file for each non-assembler input
  file specified.
  .Sp
  By default, the assembler file name for a source file is made by
  replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
  .Sp
! Input files that don't require compilation are ignored.
! .IP "\fB\-E\fR" 4
  .IX Item "-E"
  Stop after the preprocessing stage; do not run the compiler proper.  The
  output is in the form of preprocessed source code, which is sent to the
  standard output.
  .Sp
! Input files that don't require preprocessing are ignored.
  .IP "\fB\-o\fR \fIfile\fR" 4
  .IX Item "-o file"
  Place the primary output in file \fIfile\fR.  This applies to whatever
--- 1680,1702 ----
  .Sp
  Unrecognized input files, not requiring compilation or assembly, are
  ignored.
! .IP \fB\-S\fR 4
  .IX Item "-S"
  Stop after the stage of compilation proper; do not assemble.  The output
! is in the form of an assembler code file for each non\-assembler input
  file specified.
  .Sp
  By default, the assembler file name for a source file is made by
  replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
  .Sp
! Input files that don\*(Aqt require compilation are ignored.
! .IP \fB\-E\fR 4
  .IX Item "-E"
  Stop after the preprocessing stage; do not run the compiler proper.  The
  output is in the form of preprocessed source code, which is sent to the
  standard output.
  .Sp
! Input files that don\*(Aqt require preprocessing are ignored.
  .IP "\fB\-o\fR \fIfile\fR" 4
  .IX Item "-o file"
  Place the primary output in file \fIfile\fR.  This applies to whatever
*************** object file, an assembler file or prepro
*** 1772,1780 ****
  .Sp
  If \fB\-o\fR is not specified, the default is to put an executable
  file in \fIa.out\fR, the object file for
! \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
! assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
! \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
  standard output.
  .Sp
  Though \fB\-o\fR names only the primary output, it also affects the
--- 1705,1713 ----
  .Sp
  If \fB\-o\fR is not specified, the default is to put an executable
  file in \fIa.out\fR, the object file for
! \&\fIsource.suffix\fR in \fIsource.o\fR, its
! assembler file in \fIsource.s\fR, a precompiled header file in
! \&\fIsource.suffix.gch\fR, and all preprocessed C source on
  standard output.
  .Sp
  Though \fB\-o\fR names only the primary output, it also affects the
*************** dumps next to it, e.g., aux file \fIfoo.
*** 1799,1805 ****
  \&\fB\-gsplit\-dwarf\fR, and dump file \fIfoo.c.???r.final\fR for
  \&\fB\-fdump\-rtl\-final\fR.
  .Sp
! If a non-linker output file is explicitly specified, aux and dump files
  by default take the same base name:
  .Sp
  .Vb 1
--- 1732,1738 ----
  \&\fB\-gsplit\-dwarf\fR, and dump file \fIfoo.c.???r.final\fR for
  \&\fB\-fdump\-rtl\-final\fR.
  .Sp
! If a non\-linker output file is explicitly specified, aux and dump files
  by default take the same base name:
  .Sp
  .Vb 1
*************** an intermediate, thus auxiliary output),
*** 1856,1869 ****
  (implied) output file \fIfoo.o\fR.
  .Sp
  Absent this option, dump and aux files take their names from the input
! file, or from the (non-linker) output file, if one is explicitly
  specified: dump output files (e.g. those requested by \fB\-fdump\-*\fR
  options) with the input name suffix, and aux output files (those
! requested by other non-dump options, e.g. \f(CW\*(C`\-save\-temps\*(C'\fR,
  \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR, \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) without it.
  .Sp
  Similar suffix differentiation of dump and aux outputs can be attained
! for explicitly-given \fB\-dumpbase basename.suf\fR by also specifying
  \&\fB\-dumpbase\-ext .suf\fR.
  .Sp
  If \fIdumpbase\fR is explicitly specified with any directory component,
--- 1789,1802 ----
  (implied) output file \fIfoo.o\fR.
  .Sp
  Absent this option, dump and aux files take their names from the input
! file, or from the (non\-linker) output file, if one is explicitly
  specified: dump output files (e.g. those requested by \fB\-fdump\-*\fR
  options) with the input name suffix, and aux output files (those
! requested by other non\-dump options, e.g. \f(CW\*(C`\-save\-temps\*(C'\fR,
  \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR, \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) without it.
  .Sp
  Similar suffix differentiation of dump and aux outputs can be attained
! for explicitly\-given \fB\-dumpbase basename.suf\fR by also specifying
  \&\fB\-dumpbase\-ext .suf\fR.
  .Sp
  If \fIdumpbase\fR is explicitly specified with any directory component,
*************** will name aux outputs \fIdir/foo.*\fR an
*** 1908,1914 ****
  \&\fIdir/foo.c.*\fR.  Note how their basenames are taken from the input
  name, but the directory still defaults to that of the output.
  .Sp
! The empty-string dumpbase does not prevent the use of the output
  basename for outputs during linking:
  .Sp
  .Vb 1
--- 1841,1847 ----
  \&\fIdir/foo.c.*\fR.  Note how their basenames are taken from the input
  name, but the directory still defaults to that of the output.
  .Sp
! The empty\-string dumpbase does not prevent the use of the output
  basename for outputs during linking:
  .Sp
  .Vb 1
*************** basename for outputs during linking:
*** 1917,1923 ****
  .Sp
  The compilation of the source files will name auxiliary outputs
  \&\fIdir/foo.*\fR and \fIdir/bar.*\fR, and dump outputs
! \&\fIdir/foo.c.*\fR and \fIdir/bar.c.*\fR.  \s-1LTO\s0 recompilation during
  linking will use \fIdir/foobar.\fR as the prefix for dumps and
  auxiliary files.
  .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4
--- 1850,1856 ----
  .Sp
  The compilation of the source files will name auxiliary outputs
  \&\fIdir/foo.*\fR and \fIdir/bar.*\fR, and dump outputs
! \&\fIdir/foo.c.*\fR and \fIdir/bar.c.*\fR.  LTO recompilation during
  linking will use \fIdir/foobar.\fR as the prefix for dumps and
  auxiliary files.
  .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4
*************** When compiling from multiple input files
*** 2000,2006 ****
  specified, \fIdumpbase\fR, minus a \fIauxdropsuf\fR suffix, and a dash
  are appended to (or override, if containing any directory components) an
  explicit or defaulted \fIdumppfx\fR, so that each of the multiple
! compilations gets differently-named aux and dump outputs.
  .Sp
  .Vb 1
  \&        gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
--- 1933,1939 ----
  specified, \fIdumpbase\fR, minus a \fIauxdropsuf\fR suffix, and a dash
  are appended to (or override, if containing any directory components) an
  explicit or defaulted \fIdumppfx\fR, so that each of the multiple
! compilations gets differently\-named aux and dump outputs.
  .Sp
  .Vb 1
  \&        gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
*************** outputs auxiliary dumps to \fIdir/pfx\-m
*** 2010,2016 ****
  \&\fIdir/pfx\-main\-bar.*\fR, appending \fIdumpbase\fR\- to \fIdumppfx\fR.
  Dump outputs retain the input file suffix: \fIdir/pfx\-main\-foo.c.*\fR
  and \fIdir/pfx\-main\-bar.c.*\fR, respectively.  Contrast with the
! single-input compilation:
  .Sp
  .Vb 1
  \&        gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
--- 1943,1949 ----
  \&\fIdir/pfx\-main\-bar.*\fR, appending \fIdumpbase\fR\- to \fIdumppfx\fR.
  Dump outputs retain the input file suffix: \fIdir/pfx\-main\-foo.c.*\fR
  and \fIdir/pfx\-main\-bar.c.*\fR, respectively.  Contrast with the
! single\-input compilation:
  .Sp
  .Vb 1
  \&        gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ...
*************** instead.  Note, however, that unlike ear
*** 2035,2049 ****
  .Sp
  does not append the output name \fImain\fR to \fIdumppfx\fR, because
  \&\fB\-dumpdir\fR is explicitly specified.  The goal is that the
! explicitly-specified \fIdumppfx\fR may contain the specified output name
! as part of the prefix, if desired; only an explicitly-specified
  \&\fB\-dumpbase\fR would be combined with it, in order to avoid simply
  discarding a meaningful option.
  .Sp
  When compiling and then linking from a single input file, the linker
  output base name will only be appended to the default \fIdumppfx\fR as
  above if it does not share the base name with the single input file
! name.  This has been covered in single-input linking cases above, but
  not with an explicit \fB\-dumpdir\fR that inhibits the combination,
  even if overridden by \fB\-save\-temps=*\fR:
  .Sp
--- 1968,1982 ----
  .Sp
  does not append the output name \fImain\fR to \fIdumppfx\fR, because
  \&\fB\-dumpdir\fR is explicitly specified.  The goal is that the
! explicitly\-specified \fIdumppfx\fR may contain the specified output name
! as part of the prefix, if desired; only an explicitly\-specified
  \&\fB\-dumpbase\fR would be combined with it, in order to avoid simply
  discarding a meaningful option.
  .Sp
  When compiling and then linking from a single input file, the linker
  output base name will only be appended to the default \fIdumppfx\fR as
  above if it does not share the base name with the single input file
! name.  This has been covered in single\-input linking cases above, but
  not with an explicit \fB\-dumpdir\fR that inhibits the combination,
  even if overridden by \fB\-save\-temps=*\fR:
  .Sp
*************** for each input are formed by combining \
*** 2066,2161 ****
  minus suffix, and the auxiliary output suffix; dump output names are
  only different in that the suffix from \fIdumpbase\fR is retained.
  .Sp
! When it comes to auxiliary and dump outputs created during \s-1LTO\s0
  recompilation, a combination of \fIdumppfx\fR and \fIdumpbase\fR, as
  given or as derived from the linker output name but not from inputs,
  even in cases in which this combination would not otherwise be used as
! such, is passed down with a trailing period replacing the compiler-added
! dash, if any, as a \fB\-dumpdir\fR option to \fBlto-wrapper\fR;
  being involved in linking, this program does not normally get any
  \&\fB\-dumpbase\fR and \fB\-dumpbase\-ext\fR, and it ignores them.
  .Sp
! When running sub-compilers, \fBlto-wrapper\fR appends \s-1LTO\s0 stage
  names to the received \fIdumppfx\fR, ensures it contains a directory
  component so that it overrides any \fB\-dumpdir\fR, and passes that as
! \&\fB\-dumpbase\fR to sub-compilers.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  Print (on standard error output) the commands executed to run the stages
  of compilation.  Also print the version number of the compiler driver
  program and of the preprocessor and the compiler proper.
! .IP "\fB\-###\fR" 4
  .IX Item "-###"
  Like \fB\-v\fR except the commands are not executed and arguments
  are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
! This is useful for shell scripts to capture the driver-generated command lines.
! .IP "\fB\-\-help\fR" 4
  .IX Item "--help"
! Print (on the standard output) a description of the command-line options
  understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
  then \fB\-\-help\fR is also passed on to the various processes
! invoked by \fBgcc\fR, so that they can display the command-line options
  they accept.  If the \fB\-Wextra\fR option has also been specified
! (prior to the \fB\-\-help\fR option), then command-line options that
  have no documentation associated with them are also displayed.
! .IP "\fB\-\-target\-help\fR" 4
  .IX Item "--target-help"
! Print (on the standard output) a description of target-specific command-line
! options for each tool.  For some targets extra target-specific
  information may also be printed.
! .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
  .IX Item "--help={class|[^]qualifier}[,...]"
! Print (on the standard output) a description of the command-line
  options understood by the compiler that fit into all specified classes
  and qualifiers.  These are the supported classes:
  .RS 4
! .IP "\fBoptimizers\fR" 4
  .IX Item "optimizers"
  Display all of the optimization options supported by the
  compiler.
! .IP "\fBwarnings\fR" 4
  .IX Item "warnings"
  Display all of the options controlling warning messages
  produced by the compiler.
! .IP "\fBtarget\fR" 4
  .IX Item "target"
! Display target-specific options.  Unlike the
! \&\fB\-\-target\-help\fR option however, target-specific options of the
  linker and assembler are not displayed.  This is because those
  tools do not currently support the extended \fB\-\-help=\fR syntax.
! .IP "\fBparams\fR" 4
  .IX Item "params"
  Display the values recognized by the \fB\-\-param\fR
  option.
! .IP "\fIlanguage\fR" 4
  .IX Item "language"
  Display the options supported for \fIlanguage\fR, where
  \&\fIlanguage\fR is the name of one of the languages supported in this
! version of \s-1GCC.\s0  If an option is supported by all languages, one needs
  to select \fBcommon\fR class.
! .IP "\fBcommon\fR" 4
  .IX Item "common"
  Display the options that are common to all languages.
  .RE
  .RS 4
  .Sp
  These are the supported qualifiers:
! .IP "\fBundocumented\fR" 4
  .IX Item "undocumented"
  Display only those options that are undocumented.
! .IP "\fBjoined\fR" 4
  .IX Item "joined"
  Display options taking an argument that appears after an equal
  sign in the same continuous piece of text, such as:
  \&\fB\-\-help=target\fR.
! .IP "\fBseparate\fR" 4
  .IX Item "separate"
  Display options taking an argument that appears as a separate word
! following the original option, such as: \fB\-o output-file\fR.
  .RE
  .RS 4
  .Sp
! Thus for example to display all the undocumented target-specific
  switches supported by the compiler, use:
  .Sp
  .Vb 1
--- 1999,2094 ----
  minus suffix, and the auxiliary output suffix; dump output names are
  only different in that the suffix from \fIdumpbase\fR is retained.
  .Sp
! When it comes to auxiliary and dump outputs created during LTO
  recompilation, a combination of \fIdumppfx\fR and \fIdumpbase\fR, as
  given or as derived from the linker output name but not from inputs,
  even in cases in which this combination would not otherwise be used as
! such, is passed down with a trailing period replacing the compiler\-added
! dash, if any, as a \fB\-dumpdir\fR option to \fBlto\-wrapper\fR;
  being involved in linking, this program does not normally get any
  \&\fB\-dumpbase\fR and \fB\-dumpbase\-ext\fR, and it ignores them.
  .Sp
! When running sub\-compilers, \fBlto\-wrapper\fR appends LTO stage
  names to the received \fIdumppfx\fR, ensures it contains a directory
  component so that it overrides any \fB\-dumpdir\fR, and passes that as
! \&\fB\-dumpbase\fR to sub\-compilers.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  Print (on standard error output) the commands executed to run the stages
  of compilation.  Also print the version number of the compiler driver
  program and of the preprocessor and the compiler proper.
! .IP \fB\-###\fR 4
  .IX Item "-###"
  Like \fB\-v\fR except the commands are not executed and arguments
  are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
! This is useful for shell scripts to capture the driver\-generated command lines.
! .IP \fB\-\-help\fR 4
  .IX Item "--help"
! Print (on the standard output) a description of the command\-line options
  understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
  then \fB\-\-help\fR is also passed on to the various processes
! invoked by \fBgcc\fR, so that they can display the command\-line options
  they accept.  If the \fB\-Wextra\fR option has also been specified
! (prior to the \fB\-\-help\fR option), then command\-line options that
  have no documentation associated with them are also displayed.
! .IP \fB\-\-target\-help\fR 4
  .IX Item "--target-help"
! Print (on the standard output) a description of target\-specific command\-line
! options for each tool.  For some targets extra target\-specific
  information may also be printed.
! .IP \fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR] 4
  .IX Item "--help={class|[^]qualifier}[,...]"
! Print (on the standard output) a description of the command\-line
  options understood by the compiler that fit into all specified classes
  and qualifiers.  These are the supported classes:
  .RS 4
! .IP \fBoptimizers\fR 4
  .IX Item "optimizers"
  Display all of the optimization options supported by the
  compiler.
! .IP \fBwarnings\fR 4
  .IX Item "warnings"
  Display all of the options controlling warning messages
  produced by the compiler.
! .IP \fBtarget\fR 4
  .IX Item "target"
! Display target\-specific options.  Unlike the
! \&\fB\-\-target\-help\fR option however, target\-specific options of the
  linker and assembler are not displayed.  This is because those
  tools do not currently support the extended \fB\-\-help=\fR syntax.
! .IP \fBparams\fR 4
  .IX Item "params"
  Display the values recognized by the \fB\-\-param\fR
  option.
! .IP \fIlanguage\fR 4
  .IX Item "language"
  Display the options supported for \fIlanguage\fR, where
  \&\fIlanguage\fR is the name of one of the languages supported in this
! version of GCC.  If an option is supported by all languages, one needs
  to select \fBcommon\fR class.
! .IP \fBcommon\fR 4
  .IX Item "common"
  Display the options that are common to all languages.
  .RE
  .RS 4
  .Sp
  These are the supported qualifiers:
! .IP \fBundocumented\fR 4
  .IX Item "undocumented"
  Display only those options that are undocumented.
! .IP \fBjoined\fR 4
  .IX Item "joined"
  Display options taking an argument that appears after an equal
  sign in the same continuous piece of text, such as:
  \&\fB\-\-help=target\fR.
! .IP \fBseparate\fR 4
  .IX Item "separate"
  Display options taking an argument that appears as a separate word
! following the original option, such as: \fB\-o output\-file\fR.
  .RE
  .RS 4
  .Sp
! Thus for example to display all the undocumented target\-specific
  switches supported by the compiler, use:
  .Sp
  .Vb 1
*************** qualifiers.
*** 2177,2183 ****
  Combining several classes is possible, although this usually
  restricts the output so much that there is nothing to display.  One
  case where it does work, however, is when one of the classes is
! \&\fItarget\fR.  For example, to display all the target-specific
  optimization options, use:
  .Sp
  .Vb 1
--- 2110,2116 ----
  Combining several classes is possible, although this usually
  restricts the output so much that there is nothing to display.  One
  case where it does work, however, is when one of the classes is
! \&\fItarget\fR.  For example, to display all the target\-specific
  optimization options, use:
  .Sp
  .Vb 1
*************** options, an indication is given as to wh
*** 2197,2203 ****
  disabled or set to a specific value (assuming that the compiler
  knows this at the point where the \fB\-\-help=\fR option is used).
  .Sp
! Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
  .Sp
  .Vb 5
  \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
--- 2130,2136 ----
  disabled or set to a specific value (assuming that the compiler
  knows this at the point where the \fB\-\-help=\fR option is used).
  .Sp
! Here is a truncated example from the ARM port of \fBgcc\fR:
  .Sp
  .Vb 5
  \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
*************** Here is a truncated example from the \s-
*** 2207,2213 ****
  \&          \-mapcs                                [disabled]
  .Ve
  .Sp
! The output is sensitive to the effects of previous command-line
  options, so for example it is possible to find out which optimizations
  are enabled at \fB\-O2\fR by using:
  .Sp
--- 2140,2146 ----
  \&          \-mapcs                                [disabled]
  .Ve
  .Sp
! The output is sensitive to the effects of previous command\-line
  options, so for example it is possible to find out which optimizations
  are enabled at \fB\-O2\fR by using:
  .Sp
*************** by \fB\-O3\fR by using:
*** 2224,2247 ****
  \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
  .Ve
  .RE
! .IP "\fB\-\-version\fR" 4
  .IX Item "--version"
! Display the version number and copyrights of the invoked \s-1GCC.\s0
! .IP "\fB\-pass\-exit\-codes\fR" 4
  .IX Item "-pass-exit-codes"
  Normally the \fBgcc\fR program exits with the code of 1 if any
! phase of the compiler returns a non-success return code.  If you specify
  \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
  the numerically highest error produced by any phase returning an error
! indication.  The C, \*(C+, and Fortran front ends return 4 if an internal
  compiler error is encountered.
! .IP "\fB\-pipe\fR" 4
  .IX Item "-pipe"
  Use pipes rather than temporary files for communication between the
  various stages of compilation.  This fails to work on some systems where
! the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
  no trouble.
! .IP "\fB\-specs=\fR\fIfile\fR" 4
  .IX Item "-specs=file"
  Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
  file, in order to override the defaults which the \fBgcc\fR driver
--- 2157,2180 ----
  \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
  .Ve
  .RE
! .IP \fB\-\-version\fR 4
  .IX Item "--version"
! Display the version number and copyrights of the invoked GCC.
! .IP \fB\-pass\-exit\-codes\fR 4
  .IX Item "-pass-exit-codes"
  Normally the \fBgcc\fR program exits with the code of 1 if any
! phase of the compiler returns a non\-success return code.  If you specify
  \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
  the numerically highest error produced by any phase returning an error
! indication.  The C, C++, and Fortran front ends return 4 if an internal
  compiler error is encountered.
! .IP \fB\-pipe\fR 4
  .IX Item "-pipe"
  Use pipes rather than temporary files for communication between the
  various stages of compilation.  This fails to work on some systems where
! the assembler is unable to read from a pipe; but the GNU assembler has
  no trouble.
! .IP \fB\-specs=\fR\fIfile\fR 4
  .IX Item "-specs=file"
  Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
  file, in order to override the defaults which the \fBgcc\fR driver
*************** program uses when determining what switc
*** 2249,2255 ****
  \&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
  \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
  are processed in order, from left to right.
! .IP "\fB\-wrapper\fR" 4
  .IX Item "-wrapper"
  Invoke all subcommands under a wrapper program.  The name of the
  wrapper program and its parameters are passed as a comma separated
--- 2182,2188 ----
  \&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
  \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
  are processed in order, from left to right.
! .IP \fB\-wrapper\fR 4
  .IX Item "-wrapper"
  Invoke all subcommands under a wrapper program.  The name of the
  wrapper program and its parameters are passed as a comma separated
*************** list.
*** 2262,2318 ****
  This invokes all subprograms of \fBgcc\fR under
  \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
  \&\fBgdb \-\-args cc1 ...\fR.
! .IP "\fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-ffile-prefix-map=old=new"
! When compiling files residing in directory \fI\fIold\fI\fR, record
  any references to them in the result of the compilation as if the
! files resided in directory \fI\fInew\fI\fR instead.  Specifying this
  option is equivalent to specifying all the individual
  \&\fB\-f*\-prefix\-map\fR options.  This can be used to make reproducible
  builds that are location independent.  Directories referenced by
  directives are not affected by these options.  See also
  \&\fB\-fmacro\-prefix\-map\fR, \fB\-fdebug\-prefix\-map\fR,
  \&\fB\-fprofile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fcanon\-prefix\-map\fR" 4
  .IX Item "-fcanon-prefix-map"
  For the \fB\-f*\-prefix\-map\fR options normally comparison
! of \fI\fIold\fI\fR prefix against the filename that would be normally
  referenced in the result of the compilation is done using textual
  comparison of the prefixes, or ignoring character case for case insensitive
! filesystems and considering slashes and backslashes as equal on \s-1DOS\s0 based
  filesystems.  The \fB\-fcanon\-prefix\-map\fR causes such comparisons
! to be done on canonicalized paths of \fI\fIold\fI\fR
  and the referenced filename.
! .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
  .IX Item "-fplugin=name.so"
  Load the plugin code in file \fIname\fR.so, assumed to be a
! shared object to be dlopen'd by the compiler.  The base name of
  the shared object file is used to identify the plugin for the
  purposes of argument parsing (See
  \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
  Each plugin should define the callback functions specified in the
! Plugins \s-1API.\s0
! .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
  .IX Item "-fplugin-arg-name-key=value"
  Define an argument called \fIkey\fR with a value of \fIvalue\fR
  for the plugin called \fIname\fR.
! .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
  .IX Item "-fdump-ada-spec[-slim]"
! For C and \*(C+ source and include files, generate corresponding Ada specs.
! .IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
  .IX Item "-fada-spec-parent=unit"
  In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
  Ada specs as child units of parent \fIunit\fR.
! .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
  .IX Item "-fdump-go-spec=file"
  For input files in any language, generate corresponding Go
  declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
  \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
  useful way to start writing a Go interface to code written in some
  other language.
! .IP "\fB@\fR\fIfile\fR" 4
  .IX Item "@file"
! Read command-line options from \fIfile\fR.  The options read are
  inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
  does not exist, or cannot be read, then the option will be treated
  literally, and not removed.
--- 2195,2251 ----
  This invokes all subprograms of \fBgcc\fR under
  \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
  \&\fBgdb \-\-args cc1 ...\fR.
! .IP \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-ffile-prefix-map=old=new"
! When compiling files residing in directory \fIold\fR, record
  any references to them in the result of the compilation as if the
! files resided in directory \fInew\fR instead.  Specifying this
  option is equivalent to specifying all the individual
  \&\fB\-f*\-prefix\-map\fR options.  This can be used to make reproducible
  builds that are location independent.  Directories referenced by
  directives are not affected by these options.  See also
  \&\fB\-fmacro\-prefix\-map\fR, \fB\-fdebug\-prefix\-map\fR,
  \&\fB\-fprofile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fcanon\-prefix\-map\fR 4
  .IX Item "-fcanon-prefix-map"
  For the \fB\-f*\-prefix\-map\fR options normally comparison
! of \fIold\fR prefix against the filename that would be normally
  referenced in the result of the compilation is done using textual
  comparison of the prefixes, or ignoring character case for case insensitive
! filesystems and considering slashes and backslashes as equal on DOS based
  filesystems.  The \fB\-fcanon\-prefix\-map\fR causes such comparisons
! to be done on canonicalized paths of \fIold\fR
  and the referenced filename.
! .IP \fB\-fplugin=\fR\fIname\fR\fB.so\fR 4
  .IX Item "-fplugin=name.so"
  Load the plugin code in file \fIname\fR.so, assumed to be a
! shared object to be dlopen\*(Aqd by the compiler.  The base name of
  the shared object file is used to identify the plugin for the
  purposes of argument parsing (See
  \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
  Each plugin should define the callback functions specified in the
! Plugins API.
! .IP \fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR 4
  .IX Item "-fplugin-arg-name-key=value"
  Define an argument called \fIkey\fR with a value of \fIvalue\fR
  for the plugin called \fIname\fR.
! .IP \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] 4
  .IX Item "-fdump-ada-spec[-slim]"
! For C and C++ source and include files, generate corresponding Ada specs.
! .IP \fB\-fada\-spec\-parent=\fR\fIunit\fR 4
  .IX Item "-fada-spec-parent=unit"
  In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
  Ada specs as child units of parent \fIunit\fR.
! .IP \fB\-fdump\-go\-spec=\fR\fIfile\fR 4
  .IX Item "-fdump-go-spec=file"
  For input files in any language, generate corresponding Go
  declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
  \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
  useful way to start writing a Go interface to code written in some
  other language.
! .IP \fB@\fR\fIfile\fR 4
  .IX Item "@file"
! Read command\-line options from \fIfile\fR.  The options read are
  inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
  does not exist, or cannot be read, then the option will be treated
  literally, and not removed.
*************** option in either single or double quotes
*** 2323,2641 ****
  backslash) may be included by prefixing the character to be included
  with a backslash.  The \fIfile\fR may itself contain additional
  @\fIfile\fR options; any such options will be processed recursively.
! .SS "Compiling \*(C+ Programs"
! .IX Subsection "Compiling Programs"
! \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
  \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
! \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
  \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
! preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
! files with these names and compiles them as \*(C+ programs even if you
  call the compiler the same way as for compiling C programs (usually
  with the name \fBgcc\fR).
  .PP
! However, the use of \fBgcc\fR does not add the \*(C+ library.
! \&\fBg++\fR is a program that calls \s-1GCC\s0 and automatically specifies linking
! against the \*(C+ library.  It treats \fB.c\fR,
! \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
  files unless \fB\-x\fR is used.  This program is also useful when
! precompiling a C header file with a \fB.h\fR extension for use in \*(C+
  compilations.  On many systems, \fBg++\fR is also installed with
  the name \fBc++\fR.
  .PP
! When you compile \*(C+ programs, you may specify many of the same
! command-line options that you use for compiling programs in any
! language; or command-line options meaningful for C and related
! languages; or options that are meaningful only for \*(C+ programs.
  .SS "Options Controlling C Dialect"
  .IX Subsection "Options Controlling C Dialect"
  The following options control the dialect of C (or languages derived
! from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
  accepts:
! .IP "\fB\-ansi\fR" 4
  .IX Item "-ansi"
! In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
  equivalent to \fB\-std=c++98\fR.
  .Sp
! This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO
! C90\s0 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
  such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
  predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
  type of system you are using.  It also enables the undesirable and
! rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
! it disables recognition of \*(C+ style \fB//\fR comments as well as
  the \f(CW\*(C`inline\*(C'\fR keyword.
  .Sp
  The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
! \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO C\s0 program, of
  course, but it is useful to put them in header files that might be included
  in compilations done with \fB\-ansi\fR.  Alternate predefined macros
  such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
  without \fB\-ansi\fR.
  .Sp
! The \fB\-ansi\fR option does not cause non-ISO programs to be
  rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
  addition to \fB\-ansi\fR.
  .Sp
  The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
  option is used.  Some header files may notice this macro and refrain
  from declaring certain functions or defining certain macros that the
! \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
  programs that might use these names for other things.
  .Sp
  Functions that are normally built in but do not have semantics
! defined by \s-1ISO C\s0 (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
  functions when \fB\-ansi\fR is used.
! .IP "\fB\-std=\fR" 4
  .IX Item "-std="
  Determine the language standard.   This option
! is currently only supported when compiling C or \*(C+.
  .Sp
  The compiler can accept several base standards, such as \fBc90\fR or
! \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
  \&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
  compiler accepts all programs following that standard plus those
! using \s-1GNU\s0 extensions that do not contradict it.  For example,
! \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
! incompatible with \s-1ISO C90,\s0 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
! keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
! \&\s-1ISO C90,\s0 such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
! expression. On the other hand, when a \s-1GNU\s0 dialect of a standard is
  specified, all features supported by the compiler are enabled, even when
  those features change the meaning of the base standard.  As a result, some
! strict-conforming programs may be rejected.  The particular standard
! is used by \fB\-Wpedantic\fR to identify which features are \s-1GNU\s0
  extensions given that version of the standard. For example
! \&\fB\-std=gnu90 \-Wpedantic\fR warns about \*(C+ style \fB//\fR
  comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
  .Sp
  A value for this option must be provided; possible values are
  .RS 4
! .IP "\fBc90\fR" 4
  .IX Item "c90"
  .PD 0
! .IP "\fBc89\fR" 4
  .IX Item "c89"
! .IP "\fBiso9899:1990\fR" 4
  .IX Item "iso9899:1990"
  .PD
! Support all \s-1ISO C90\s0 programs (certain \s-1GNU\s0 extensions that conflict
! with \s-1ISO C90\s0 are disabled). Same as \fB\-ansi\fR for C code.
! .IP "\fBiso9899:199409\fR" 4
  .IX Item "iso9899:199409"
! \&\s-1ISO C90\s0 as modified in amendment 1.
! .IP "\fBc99\fR" 4
  .IX Item "c99"
  .PD 0
! .IP "\fBc9x\fR" 4
  .IX Item "c9x"
! .IP "\fBiso9899:1999\fR" 4
  .IX Item "iso9899:1999"
! .IP "\fBiso9899:199x\fR" 4
  .IX Item "iso9899:199x"
  .PD
! \&\s-1ISO C99.\s0  This standard is substantially completely supported, modulo
! bugs and floating-point issues
  (mainly but not entirely relating to optional C99 features from
  Annexes F and G).  See
  <\fBhttps://gcc.gnu.org/c99status.html\fR> for more information.  The
  names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
! .IP "\fBc11\fR" 4
  .IX Item "c11"
  .PD 0
! .IP "\fBc1x\fR" 4
  .IX Item "c1x"
! .IP "\fBiso9899:2011\fR" 4
  .IX Item "iso9899:2011"
  .PD
! \&\s-1ISO C11,\s0 the 2011 revision of the \s-1ISO C\s0 standard.  This standard is
! substantially completely supported, modulo bugs, floating-point issues
  (mainly but not entirely relating to optional C11 features from
! Annexes F and G) and the optional Annexes K (Bounds-checking
  interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
! .IP "\fBc17\fR" 4
  .IX Item "c17"
  .PD 0
! .IP "\fBc18\fR" 4
  .IX Item "c18"
! .IP "\fBiso9899:2017\fR" 4
  .IX Item "iso9899:2017"
! .IP "\fBiso9899:2018\fR" 4
  .IX Item "iso9899:2018"
  .PD
! \&\s-1ISO C17,\s0 the 2017 revision of the \s-1ISO C\s0 standard
  (published in 2018).  This standard is
  same as C11 except for corrections of defects (all of which are also
  applied with \fB\-std=c11\fR) and a new value of
  \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR, and so is supported to the same extent as C11.
! .IP "\fBc23\fR" 4
  .IX Item "c23"
  .PD 0
! .IP "\fBc2x\fR" 4
  .IX Item "c2x"
! .IP "\fBiso9899:2024\fR" 4
  .IX Item "iso9899:2024"
  .PD
! \&\s-1ISO C23,\s0 the 2023 revision of the \s-1ISO C\s0 standard (expected to be
  published in 2024).  The support for this version is experimental and
  incomplete.  The name \fBc2x\fR is deprecated.
! .IP "\fBgnu90\fR" 4
  .IX Item "gnu90"
  .PD 0
! .IP "\fBgnu89\fR" 4
  .IX Item "gnu89"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C90\s0 (including some C99 features).
! .IP "\fBgnu99\fR" 4
  .IX Item "gnu99"
  .PD 0
! .IP "\fBgnu9x\fR" 4
  .IX Item "gnu9x"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C99.\s0  The name \fBgnu9x\fR is deprecated.
! .IP "\fBgnu11\fR" 4
  .IX Item "gnu11"
  .PD 0
! .IP "\fBgnu1x\fR" 4
  .IX Item "gnu1x"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C11.\s0
  The name \fBgnu1x\fR is deprecated.
! .IP "\fBgnu17\fR" 4
  .IX Item "gnu17"
  .PD 0
! .IP "\fBgnu18\fR" 4
  .IX Item "gnu18"
  .PD
! \&\s-1GNU\s0 dialect of \s-1ISO C17.\s0  This is the default for C code.
! .IP "\fBgnu23\fR" 4
  .IX Item "gnu23"
  .PD 0
! .IP "\fBgnu2x\fR" 4
  .IX Item "gnu2x"
  .PD
! The next version of the \s-1ISO C\s0 standard, still under development, plus
! \&\s-1GNU\s0 extensions.  The support for this version is experimental and
  incomplete.  The name \fBgnu2x\fR is deprecated.
! .IP "\fBc++98\fR" 4
  .IX Item "c++98"
  .PD 0
! .IP "\fBc++03\fR" 4
  .IX Item "c++03"
  .PD
! The 1998 \s-1ISO \*(C+\s0 standard plus the 2003 technical corrigendum and some
! additional defect reports. Same as \fB\-ansi\fR for \*(C+ code.
! .IP "\fBgnu++98\fR" 4
  .IX Item "gnu++98"
  .PD 0
! .IP "\fBgnu++03\fR" 4
  .IX Item "gnu++03"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.
! .IP "\fBc++11\fR" 4
  .IX Item "c++11"
  .PD 0
! .IP "\fBc++0x\fR" 4
  .IX Item "c++0x"
  .PD
! The 2011 \s-1ISO \*(C+\s0 standard plus amendments.
  The name \fBc++0x\fR is deprecated.
! .IP "\fBgnu++11\fR" 4
  .IX Item "gnu++11"
  .PD 0
! .IP "\fBgnu++0x\fR" 4
  .IX Item "gnu++0x"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR.
  The name \fBgnu++0x\fR is deprecated.
! .IP "\fBc++14\fR" 4
  .IX Item "c++14"
  .PD 0
! .IP "\fBc++1y\fR" 4
  .IX Item "c++1y"
  .PD
! The 2014 \s-1ISO \*(C+\s0 standard plus amendments.
  The name \fBc++1y\fR is deprecated.
! .IP "\fBgnu++14\fR" 4
  .IX Item "gnu++14"
  .PD 0
! .IP "\fBgnu++1y\fR" 4
  .IX Item "gnu++1y"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++14\fR.
  The name \fBgnu++1y\fR is deprecated.
! .IP "\fBc++17\fR" 4
  .IX Item "c++17"
  .PD 0
! .IP "\fBc++1z\fR" 4
  .IX Item "c++1z"
  .PD
! The 2017 \s-1ISO \*(C+\s0 standard plus amendments.
  The name \fBc++1z\fR is deprecated.
! .IP "\fBgnu++17\fR" 4
  .IX Item "gnu++17"
  .PD 0
! .IP "\fBgnu++1z\fR" 4
  .IX Item "gnu++1z"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++17\fR.
! This is the default for \*(C+ code.
  The name \fBgnu++1z\fR is deprecated.
! .IP "\fBc++20\fR" 4
  .IX Item "c++20"
  .PD 0
! .IP "\fBc++2a\fR" 4
  .IX Item "c++2a"
  .PD
! The 2020 \s-1ISO \*(C+\s0 standard plus amendments.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBc++2a\fR is deprecated.
! .IP "\fBgnu++20\fR" 4
  .IX Item "gnu++20"
  .PD 0
! .IP "\fBgnu++2a\fR" 4
  .IX Item "gnu++2a"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++20\fR.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBgnu++2a\fR is deprecated.
! .IP "\fBc++2b\fR" 4
  .IX Item "c++2b"
  .PD 0
! .IP "\fBc++23\fR" 4
  .IX Item "c++23"
  .PD
! The next revision of the \s-1ISO \*(C+\s0 standard, planned for
  2023.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP "\fBgnu++2b\fR" 4
  .IX Item "gnu++2b"
  .PD 0
! .IP "\fBgnu++23\fR" 4
  .IX Item "gnu++23"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++2b\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
! .IP "\fBc++2c\fR" 4
  .IX Item "c++2c"
  .PD 0
! .IP "\fBc++26\fR" 4
  .IX Item "c++26"
  .PD
! The next revision of the \s-1ISO \*(C+\s0 standard, planned for
  2026.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP "\fBgnu++2c\fR" 4
  .IX Item "gnu++2c"
  .PD 0
! .IP "\fBgnu++26\fR" 4
  .IX Item "gnu++26"
  .PD
! \&\s-1GNU\s0 dialect of \fB\-std=c++2c\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
  .RE
--- 2256,2574 ----
  backslash) may be included by prefixing the character to be included
  with a backslash.  The \fIfile\fR may itself contain additional
  @\fIfile\fR options; any such options will be processed recursively.
! .SS "Compiling C++ Programs"
! .IX Subsection "Compiling C++ Programs"
! C++ source files conventionally use one of the suffixes \fB.C\fR,
  \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
! \&\fB.cxx\fR; C++ header files often use \fB.hh\fR, \fB.hpp\fR,
  \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
! preprocessed C++ files use the suffix \fB.ii\fR.  GCC recognizes
! files with these names and compiles them as C++ programs even if you
  call the compiler the same way as for compiling C programs (usually
  with the name \fBgcc\fR).
  .PP
! However, the use of \fBgcc\fR does not add the C++ library.
! \&\fBg++\fR is a program that calls GCC and automatically specifies linking
! against the C++ library.  It treats \fB.c\fR,
! \&\fB.h\fR and \fB.i\fR files as C++ source files instead of C source
  files unless \fB\-x\fR is used.  This program is also useful when
! precompiling a C header file with a \fB.h\fR extension for use in C++
  compilations.  On many systems, \fBg++\fR is also installed with
  the name \fBc++\fR.
  .PP
! When you compile C++ programs, you may specify many of the same
! command\-line options that you use for compiling programs in any
! language; or command\-line options meaningful for C and related
! languages; or options that are meaningful only for C++ programs.
  .SS "Options Controlling C Dialect"
  .IX Subsection "Options Controlling C Dialect"
  The following options control the dialect of C (or languages derived
! from C, such as C++, Objective\-C and Objective\-C++) that the compiler
  accepts:
! .IP \fB\-ansi\fR 4
  .IX Item "-ansi"
! In C mode, this is equivalent to \fB\-std=c90\fR. In C++ mode, it is
  equivalent to \fB\-std=c++98\fR.
  .Sp
! This turns off certain features of GCC that are incompatible with ISO
! C90 (when compiling C code), or of standard C++ (when compiling C++ code),
  such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
  predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
  type of system you are using.  It also enables the undesirable and
! rarely used ISO trigraph feature.  For the C compiler,
! it disables recognition of C++ style \fB//\fR comments as well as
  the \f(CW\*(C`inline\*(C'\fR keyword.
  .Sp
  The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
! \&\fB\-ansi\fR.  You would not want to use them in an ISO C program, of
  course, but it is useful to put them in header files that might be included
  in compilations done with \fB\-ansi\fR.  Alternate predefined macros
  such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
  without \fB\-ansi\fR.
  .Sp
! The \fB\-ansi\fR option does not cause non\-ISO programs to be
  rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
  addition to \fB\-ansi\fR.
  .Sp
  The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
  option is used.  Some header files may notice this macro and refrain
  from declaring certain functions or defining certain macros that the
! ISO standard doesn\*(Aqt call for; this is to avoid interfering with any
  programs that might use these names for other things.
  .Sp
  Functions that are normally built in but do not have semantics
! defined by ISO C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built\-in
  functions when \fB\-ansi\fR is used.
! .IP \fB\-std=\fR 4
  .IX Item "-std="
  Determine the language standard.   This option
! is currently only supported when compiling C or C++.
  .Sp
  The compiler can accept several base standards, such as \fBc90\fR or
! \&\fBc++98\fR, and GNU dialects of those standards, such as
  \&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
  compiler accepts all programs following that standard plus those
! using GNU extensions that do not contradict it.  For example,
! \&\fB\-std=c90\fR turns off certain features of GCC that are
! incompatible with ISO C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
! keywords, but not other GNU extensions that do not have a meaning in
! ISO C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
! expression. On the other hand, when a GNU dialect of a standard is
  specified, all features supported by the compiler are enabled, even when
  those features change the meaning of the base standard.  As a result, some
! strict\-conforming programs may be rejected.  The particular standard
! is used by \fB\-Wpedantic\fR to identify which features are GNU
  extensions given that version of the standard. For example
! \&\fB\-std=gnu90 \-Wpedantic\fR warns about C++ style \fB//\fR
  comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
  .Sp
  A value for this option must be provided; possible values are
  .RS 4
! .IP \fBc90\fR 4
  .IX Item "c90"
  .PD 0
! .IP \fBc89\fR 4
  .IX Item "c89"
! .IP \fBiso9899:1990\fR 4
  .IX Item "iso9899:1990"
  .PD
! Support all ISO C90 programs (certain GNU extensions that conflict
! with ISO C90 are disabled). Same as \fB\-ansi\fR for C code.
! .IP \fBiso9899:199409\fR 4
  .IX Item "iso9899:199409"
! ISO C90 as modified in amendment 1.
! .IP \fBc99\fR 4
  .IX Item "c99"
  .PD 0
! .IP \fBc9x\fR 4
  .IX Item "c9x"
! .IP \fBiso9899:1999\fR 4
  .IX Item "iso9899:1999"
! .IP \fBiso9899:199x\fR 4
  .IX Item "iso9899:199x"
  .PD
! ISO C99.  This standard is substantially completely supported, modulo
! bugs and floating\-point issues
  (mainly but not entirely relating to optional C99 features from
  Annexes F and G).  See
  <\fBhttps://gcc.gnu.org/c99status.html\fR> for more information.  The
  names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
! .IP \fBc11\fR 4
  .IX Item "c11"
  .PD 0
! .IP \fBc1x\fR 4
  .IX Item "c1x"
! .IP \fBiso9899:2011\fR 4
  .IX Item "iso9899:2011"
  .PD
! ISO C11, the 2011 revision of the ISO C standard.  This standard is
! substantially completely supported, modulo bugs, floating\-point issues
  (mainly but not entirely relating to optional C11 features from
! Annexes F and G) and the optional Annexes K (Bounds\-checking
  interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
! .IP \fBc17\fR 4
  .IX Item "c17"
  .PD 0
! .IP \fBc18\fR 4
  .IX Item "c18"
! .IP \fBiso9899:2017\fR 4
  .IX Item "iso9899:2017"
! .IP \fBiso9899:2018\fR 4
  .IX Item "iso9899:2018"
  .PD
! ISO C17, the 2017 revision of the ISO C standard
  (published in 2018).  This standard is
  same as C11 except for corrections of defects (all of which are also
  applied with \fB\-std=c11\fR) and a new value of
  \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR, and so is supported to the same extent as C11.
! .IP \fBc23\fR 4
  .IX Item "c23"
  .PD 0
! .IP \fBc2x\fR 4
  .IX Item "c2x"
! .IP \fBiso9899:2024\fR 4
  .IX Item "iso9899:2024"
  .PD
! ISO C23, the 2023 revision of the ISO C standard (expected to be
  published in 2024).  The support for this version is experimental and
  incomplete.  The name \fBc2x\fR is deprecated.
! .IP \fBgnu90\fR 4
  .IX Item "gnu90"
  .PD 0
! .IP \fBgnu89\fR 4
  .IX Item "gnu89"
  .PD
! GNU dialect of ISO C90 (including some C99 features).
! .IP \fBgnu99\fR 4
  .IX Item "gnu99"
  .PD 0
! .IP \fBgnu9x\fR 4
  .IX Item "gnu9x"
  .PD
! GNU dialect of ISO C99.  The name \fBgnu9x\fR is deprecated.
! .IP \fBgnu11\fR 4
  .IX Item "gnu11"
  .PD 0
! .IP \fBgnu1x\fR 4
  .IX Item "gnu1x"
  .PD
! GNU dialect of ISO C11.
  The name \fBgnu1x\fR is deprecated.
! .IP \fBgnu17\fR 4
  .IX Item "gnu17"
  .PD 0
! .IP \fBgnu18\fR 4
  .IX Item "gnu18"
  .PD
! GNU dialect of ISO C17.  This is the default for C code.
! .IP \fBgnu23\fR 4
  .IX Item "gnu23"
  .PD 0
! .IP \fBgnu2x\fR 4
  .IX Item "gnu2x"
  .PD
! The next version of the ISO C standard, still under development, plus
! GNU extensions.  The support for this version is experimental and
  incomplete.  The name \fBgnu2x\fR is deprecated.
! .IP \fBc++98\fR 4
  .IX Item "c++98"
  .PD 0
! .IP \fBc++03\fR 4
  .IX Item "c++03"
  .PD
! The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
! additional defect reports. Same as \fB\-ansi\fR for C++ code.
! .IP \fBgnu++98\fR 4
  .IX Item "gnu++98"
  .PD 0
! .IP \fBgnu++03\fR 4
  .IX Item "gnu++03"
  .PD
! GNU dialect of \fB\-std=c++98\fR.
! .IP \fBc++11\fR 4
  .IX Item "c++11"
  .PD 0
! .IP \fBc++0x\fR 4
  .IX Item "c++0x"
  .PD
! The 2011 ISO C++ standard plus amendments.
  The name \fBc++0x\fR is deprecated.
! .IP \fBgnu++11\fR 4
  .IX Item "gnu++11"
  .PD 0
! .IP \fBgnu++0x\fR 4
  .IX Item "gnu++0x"
  .PD
! GNU dialect of \fB\-std=c++11\fR.
  The name \fBgnu++0x\fR is deprecated.
! .IP \fBc++14\fR 4
  .IX Item "c++14"
  .PD 0
! .IP \fBc++1y\fR 4
  .IX Item "c++1y"
  .PD
! The 2014 ISO C++ standard plus amendments.
  The name \fBc++1y\fR is deprecated.
! .IP \fBgnu++14\fR 4
  .IX Item "gnu++14"
  .PD 0
! .IP \fBgnu++1y\fR 4
  .IX Item "gnu++1y"
  .PD
! GNU dialect of \fB\-std=c++14\fR.
  The name \fBgnu++1y\fR is deprecated.
! .IP \fBc++17\fR 4
  .IX Item "c++17"
  .PD 0
! .IP \fBc++1z\fR 4
  .IX Item "c++1z"
  .PD
! The 2017 ISO C++ standard plus amendments.
  The name \fBc++1z\fR is deprecated.
! .IP \fBgnu++17\fR 4
  .IX Item "gnu++17"
  .PD 0
! .IP \fBgnu++1z\fR 4
  .IX Item "gnu++1z"
  .PD
! GNU dialect of \fB\-std=c++17\fR.
! This is the default for C++ code.
  The name \fBgnu++1z\fR is deprecated.
! .IP \fBc++20\fR 4
  .IX Item "c++20"
  .PD 0
! .IP \fBc++2a\fR 4
  .IX Item "c++2a"
  .PD
! The 2020 ISO C++ standard plus amendments.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBc++2a\fR is deprecated.
! .IP \fBgnu++20\fR 4
  .IX Item "gnu++20"
  .PD 0
! .IP \fBgnu++2a\fR 4
  .IX Item "gnu++2a"
  .PD
! GNU dialect of \fB\-std=c++20\fR.
  Support is experimental, and could change in incompatible ways in
  future releases.
  The name \fBgnu++2a\fR is deprecated.
! .IP \fBc++2b\fR 4
  .IX Item "c++2b"
  .PD 0
! .IP \fBc++23\fR 4
  .IX Item "c++23"
  .PD
! The next revision of the ISO C++ standard, planned for
  2023.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP \fBgnu++2b\fR 4
  .IX Item "gnu++2b"
  .PD 0
! .IP \fBgnu++23\fR 4
  .IX Item "gnu++23"
  .PD
! GNU dialect of \fB\-std=c++2b\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
! .IP \fBc++2c\fR 4
  .IX Item "c++2c"
  .PD 0
! .IP \fBc++26\fR 4
  .IX Item "c++26"
  .PD
! The next revision of the ISO C++ standard, planned for
  2026.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
! .IP \fBgnu++2c\fR 4
  .IX Item "gnu++2c"
  .PD 0
! .IP \fBgnu++26\fR 4
  .IX Item "gnu++26"
  .PD
! GNU dialect of \fB\-std=c++2c\fR.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
  .RE
*************** definition (\fBC\fR or \fBF\fR, respecti
*** 2656,2694 ****
  character).  In the case of function definitions, a K&R\-style list of
  arguments followed by their declarations is also provided, inside
  comments, after the declaration.
! .IP "\fB\-fno\-asm\fR" 4
  .IX Item "-fno-asm"
  Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
  keyword, so that code can use these words as identifiers.  You can use
  the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
  instead.  In C, \fB\-ansi\fR implies \fB\-fno\-asm\fR.
  .Sp
! In \*(C+, \f(CW\*(C`inline\*(C'\fR is a standard keyword and is not affected by
  this switch.  You may want to use the \fB\-fno\-gnu\-keywords\fR flag
  instead, which disables \f(CW\*(C`typeof\*(C'\fR but not \f(CW\*(C`asm\*(C'\fR and
  \&\f(CW\*(C`inline\*(C'\fR.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR),
  this switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords,
! since \f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO C99.\s0  In C23 mode
  (\fB\-std=c23\fR or \fB\-std=gnu23\fR), this switch only affects
  the \f(CW\*(C`asm\*(C'\fR keyword, since \f(CW\*(C`typeof\*(C'\fR is a standard keyword in
! \&\s-1ISO C23.\s0
! .IP "\fB\-fno\-builtin\fR" 4
  .IX Item "-fno-builtin"
  .PD 0
! .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
  .IX Item "-fno-builtin-function"
  .PD
! Don't recognize built-in functions that do not begin with
  \&\fB_\|_builtin_\fR as prefix.
  .Sp
! \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
  more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
  instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
  may become inline copy loops.  The resulting code is often both smaller
  and faster, but since the function calls no longer appear as such, you
  cannot set a breakpoint on those calls, nor can you change the behavior
  of the functions by linking with a different library.  In addition,
! when a function is recognized as a built-in function, \s-1GCC\s0 may use
  information about that function to warn about problems with calls to
  that function, or to generate more efficient code, even if the
  resulting code still contains calls to that function.  For example,
--- 2589,2627 ----
  character).  In the case of function definitions, a K&R\-style list of
  arguments followed by their declarations is also provided, inside
  comments, after the declaration.
! .IP \fB\-fno\-asm\fR 4
  .IX Item "-fno-asm"
  Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
  keyword, so that code can use these words as identifiers.  You can use
  the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
  instead.  In C, \fB\-ansi\fR implies \fB\-fno\-asm\fR.
  .Sp
! In C++, \f(CW\*(C`inline\*(C'\fR is a standard keyword and is not affected by
  this switch.  You may want to use the \fB\-fno\-gnu\-keywords\fR flag
  instead, which disables \f(CW\*(C`typeof\*(C'\fR but not \f(CW\*(C`asm\*(C'\fR and
  \&\f(CW\*(C`inline\*(C'\fR.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR),
  this switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords,
! since \f(CW\*(C`inline\*(C'\fR is a standard keyword in ISO C99.  In C23 mode
  (\fB\-std=c23\fR or \fB\-std=gnu23\fR), this switch only affects
  the \f(CW\*(C`asm\*(C'\fR keyword, since \f(CW\*(C`typeof\*(C'\fR is a standard keyword in
! ISO C23.
! .IP \fB\-fno\-builtin\fR 4
  .IX Item "-fno-builtin"
  .PD 0
! .IP \fB\-fno\-builtin\-\fR\fIfunction\fR 4
  .IX Item "-fno-builtin-function"
  .PD
! Don\*(Aqt recognize built\-in functions that do not begin with
  \&\fB_\|_builtin_\fR as prefix.
  .Sp
! GCC normally generates special code to handle certain built\-in functions
  more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
  instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
  may become inline copy loops.  The resulting code is often both smaller
  and faster, but since the function calls no longer appear as such, you
  cannot set a breakpoint on those calls, nor can you change the behavior
  of the functions by linking with a different library.  In addition,
! when a function is recognized as a built\-in function, GCC may use
  information about that function to warn about problems with calls to
  that function, or to generate more efficient code, even if the
  resulting code still contains calls to that function.  For example,
*************** warnings are given with \fB\-Wformat\fR
*** 2697,2753 ****
  known not to modify global memory.
  .Sp
  With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
! only the built-in function \fIfunction\fR is
  disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
! function is named that is not built-in in this version of \s-1GCC,\s0 this
  option is ignored.  There is no corresponding
  \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
! built-in functions selectively when using \fB\-fno\-builtin\fR or
  \&\fB\-ffreestanding\fR, you may define macros such as:
  .Sp
  .Vb 2
  \&        #define abs(n)          _\|_builtin_abs ((n))
  \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
  .Ve
! .IP "\fB\-fcond\-mismatch\fR" 4
  .IX Item "-fcond-mismatch"
  Allow conditional expressions with mismatched types in the second and
  third arguments.  The value of such an expression is void.  This option
! is not supported for \*(C+.
! .IP "\fB\-ffreestanding\fR" 4
  .IX Item "-ffreestanding"
  Assert that compilation targets a freestanding environment.  This
  implies \fB\-fno\-builtin\fR.  A freestanding environment
  is one in which the standard library may not exist, and program startup may
! not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
  This is equivalent to \fB\-fno\-hosted\fR.
! .IP "\fB\-fgimple\fR" 4
  .IX Item "-fgimple"
  Enable parsing of function definitions marked with \f(CW\*(C`_\|_GIMPLE\*(C'\fR.
! This is an experimental feature that allows unit testing of \s-1GIMPLE\s0
  passes.
! .IP "\fB\-fgnu\-tm\fR" 4
  .IX Item "-fgnu-tm"
  When the option \fB\-fgnu\-tm\fR is specified, the compiler
! generates code for the Linux variant of Intel's current Transactional
! Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
  an experimental feature whose interface may change in future versions
! of \s-1GCC,\s0 as the official specification changes.  Please note that not
  all architectures are supported for this feature.
  .Sp
! For more information on \s-1GCC\s0's support for transactional memory,
  .Sp
  Note that the transactional memory feature is not supported with
! non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
! .IP "\fB\-fgnu89\-inline\fR" 4
  .IX Item "-fgnu89-inline"
! The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
! \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
  .Sp
  Using this option is roughly equivalent to adding the
  \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
  .Sp
! The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
  C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
  specifies the default behavior).
  This option is not supported in \fB\-std=c90\fR or
--- 2630,2686 ----
  known not to modify global memory.
  .Sp
  With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
! only the built\-in function \fIfunction\fR is
  disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
! function is named that is not built\-in in this version of GCC, this
  option is ignored.  There is no corresponding
  \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
! built\-in functions selectively when using \fB\-fno\-builtin\fR or
  \&\fB\-ffreestanding\fR, you may define macros such as:
  .Sp
  .Vb 2
  \&        #define abs(n)          _\|_builtin_abs ((n))
  \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
  .Ve
! .IP \fB\-fcond\-mismatch\fR 4
  .IX Item "-fcond-mismatch"
  Allow conditional expressions with mismatched types in the second and
  third arguments.  The value of such an expression is void.  This option
! is not supported for C++.
! .IP \fB\-ffreestanding\fR 4
  .IX Item "-ffreestanding"
  Assert that compilation targets a freestanding environment.  This
  implies \fB\-fno\-builtin\fR.  A freestanding environment
  is one in which the standard library may not exist, and program startup may
! not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an OS kernel.
  This is equivalent to \fB\-fno\-hosted\fR.
! .IP \fB\-fgimple\fR 4
  .IX Item "-fgimple"
  Enable parsing of function definitions marked with \f(CW\*(C`_\|_GIMPLE\*(C'\fR.
! This is an experimental feature that allows unit testing of GIMPLE
  passes.
! .IP \fB\-fgnu\-tm\fR 4
  .IX Item "-fgnu-tm"
  When the option \fB\-fgnu\-tm\fR is specified, the compiler
! generates code for the Linux variant of Intel\*(Aqs current Transactional
! Memory ABI specification document (Revision 1.1, May 6 2009).  This is
  an experimental feature whose interface may change in future versions
! of GCC, as the official specification changes.  Please note that not
  all architectures are supported for this feature.
  .Sp
! For more information on GCC\*(Aqs support for transactional memory,
  .Sp
  Note that the transactional memory feature is not supported with
! non\-call exceptions (\fB\-fnon\-call\-exceptions\fR).
! .IP \fB\-fgnu89\-inline\fR 4
  .IX Item "-fgnu89-inline"
! The option \fB\-fgnu89\-inline\fR tells GCC to use the traditional
! GNU semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
  .Sp
  Using this option is roughly equivalent to adding the
  \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
  .Sp
! The option \fB\-fno\-gnu89\-inline\fR explicitly tells GCC to use the
  C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
  specifies the default behavior).
  This option is not supported in \fB\-std=c90\fR or
*************** This option is not supported in \fB\-std
*** 2756,2778 ****
  The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
  \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
  in effect for \f(CW\*(C`inline\*(C'\fR functions.
! .IP "\fB\-fhosted\fR" 4
  .IX Item "-fhosted"
  Assert that compilation targets a hosted environment.  This implies
  \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
  entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
  type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
  This is equivalent to \fB\-fno\-freestanding\fR.
! .IP "\fB\-flax\-vector\-conversions\fR" 4
  .IX Item "-flax-vector-conversions"
  Allow implicit conversions between vectors with differing numbers of
  elements and/or incompatible element types.  This option should not be
  used for new code.
! .IP "\fB\-fms\-extensions\fR" 4
  .IX Item "-fms-extensions"
! Accept some non-standard constructs used in Microsoft header files.
  .Sp
! In \*(C+ code, this allows member names in structures to be similar
  to previous types declarations.
  .Sp
  .Vb 4
--- 2689,2711 ----
  The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
  \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
  in effect for \f(CW\*(C`inline\*(C'\fR functions.
! .IP \fB\-fhosted\fR 4
  .IX Item "-fhosted"
  Assert that compilation targets a hosted environment.  This implies
  \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
  entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
  type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
  This is equivalent to \fB\-fno\-freestanding\fR.
! .IP \fB\-flax\-vector\-conversions\fR 4
  .IX Item "-flax-vector-conversions"
  Allow implicit conversions between vectors with differing numbers of
  elements and/or incompatible element types.  This option should not be
  used for new code.
! .IP \fB\-fms\-extensions\fR 4
  .IX Item "-fms-extensions"
! Accept some non\-standard constructs used in Microsoft header files.
  .Sp
! In C++ code, this allows member names in structures to be similar
  to previous types declarations.
  .Sp
  .Vb 4
*************** Some cases of unnamed fields in structur
*** 2786,2821 ****
  accepted with this option.
  .Sp
  Note that this option is off for all targets except for x86
! targets using ms-abi.
! .IP "\fB\-foffload=disable\fR" 4
  .IX Item "-foffload=disable"
  .PD 0
! .IP "\fB\-foffload=default\fR" 4
  .IX Item "-foffload=default"
! .IP "\fB\-foffload=\fR\fItarget-list\fR" 4
  .IX Item "-foffload=target-list"
  .PD
  Specify for which OpenMP and OpenACC offload targets code should be generated.
  The default behavior, equivalent to \fB\-foffload=default\fR, is to generate
  code for all supported offload targets.  The \fB\-foffload=disable\fR form
  generates code only for the host fallback, while
! \&\fB\-foffload=\fR\fItarget-list\fR generates code only for the specified
! comma-separated list of offload targets.
  .Sp
! Offload targets are specified in \s-1GCC\s0's internal target-triplet format. You can
  run the compiler with \fB\-v\fR to show the list of configured offload targets
  under \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR.
! .IP "\fB\-foffload\-options=\fR\fIoptions\fR" 4
  .IX Item "-foffload-options=options"
  .PD 0
! .IP "\fB\-foffload\-options=\fR\fItarget-triplet-list\fR\fB=\fR\fIoptions\fR" 4
  .IX Item "-foffload-options=target-triplet-list=options"
  .PD
! With \fB\-foffload\-options=\fR\fIoptions\fR, \s-1GCC\s0 passes the specified
  \&\fIoptions\fR to the compilers for all enabled offloading targets.  You can
  specify options that apply only to a specific target or targets by using
! the \fB\-foffload\-options=\fR\fItarget-list\fR\fB=\fR\fIoptions\fR form.  The
! \&\fItarget-list\fR is a comma-separated list in the same format as for the
  \&\fB\-foffload=\fR option.
  .Sp
  Typical command lines are
--- 2719,2754 ----
  accepted with this option.
  .Sp
  Note that this option is off for all targets except for x86
! targets using ms\-abi.
! .IP \fB\-foffload=disable\fR 4
  .IX Item "-foffload=disable"
  .PD 0
! .IP \fB\-foffload=default\fR 4
  .IX Item "-foffload=default"
! .IP \fB\-foffload=\fR\fItarget\-list\fR 4
  .IX Item "-foffload=target-list"
  .PD
  Specify for which OpenMP and OpenACC offload targets code should be generated.
  The default behavior, equivalent to \fB\-foffload=default\fR, is to generate
  code for all supported offload targets.  The \fB\-foffload=disable\fR form
  generates code only for the host fallback, while
! \&\fB\-foffload=\fR\fItarget\-list\fR generates code only for the specified
! comma\-separated list of offload targets.
  .Sp
! Offload targets are specified in GCC\*(Aqs internal target\-triplet format. You can
  run the compiler with \fB\-v\fR to show the list of configured offload targets
  under \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR.
! .IP \fB\-foffload\-options=\fR\fIoptions\fR 4
  .IX Item "-foffload-options=options"
  .PD 0
! .IP \fB\-foffload\-options=\fR\fItarget\-triplet\-list\fR\fB=\fR\fIoptions\fR 4
  .IX Item "-foffload-options=target-triplet-list=options"
  .PD
! With \fB\-foffload\-options=\fR\fIoptions\fR, GCC passes the specified
  \&\fIoptions\fR to the compilers for all enabled offloading targets.  You can
  specify options that apply only to a specific target or targets by using
! the \fB\-foffload\-options=\fR\fItarget\-list\fR\fB=\fR\fIoptions\fR form.  The
! \&\fItarget\-list\fR is a comma\-separated list in the same format as for the
  \&\fB\-foffload=\fR option.
  .Sp
  Typical command lines are
*************** Typical command lines are
*** 2824,2849 ****
  \&        \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \-foffload\-options=nvptx\-none=\-latomic
  \&        \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906
  .Ve
! .IP "\fB\-fopenacc\fR" 4
  .IX Item "-fopenacc"
! Enable handling of OpenACC directives \fB#pragma acc\fR in C/\*(C+ and
! \&\fB!$acc\fR in free-form Fortran and \fB!$acc\fR, \fBc$acc\fR and
! \&\fB*$acc\fR in fixed-form Fortran.  When \fB\-fopenacc\fR is specified,
  the compiler generates accelerated code according to the OpenACC Application
  Programming Interface v2.6 <\fBhttps://www.openacc.org\fR>.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR.
! .IP "\fB\-fopenacc\-dim=\fR\fIgeom\fR" 4
  .IX Item "-fopenacc-dim=geom"
  Specify default compute dimensions for parallel offload regions that do
  not explicitly specify.  The \fIgeom\fR value is a triple of
! \&':'\-separated sizes, in order 'gang', 'worker' and, 'vector'.  A size
! can be omitted, to use a target-specific default value.
! .IP "\fB\-fopenmp\fR" 4
  .IX Item "-fopenmp"
  Enable handling of OpenMP directives \fB#pragma omp\fR,
  \&\fB[[omp::directive(...)]]\fR, \fB[[omp::sequence(...)]]\fR and
! \&\fB[[omp::decl(...)]]\fR in C/\*(C+ and \fB!$omp\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  When \fB\-fopenmp\fR is specified, the
--- 2757,2782 ----
  \&        \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \-foffload\-options=nvptx\-none=\-latomic
  \&        \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906
  .Ve
! .IP \fB\-fopenacc\fR 4
  .IX Item "-fopenacc"
! Enable handling of OpenACC directives \fB#pragma acc\fR in C/C++ and
! \&\fB!$acc\fR in free\-form Fortran and \fB!$acc\fR, \fBc$acc\fR and
! \&\fB*$acc\fR in fixed\-form Fortran.  When \fB\-fopenacc\fR is specified,
  the compiler generates accelerated code according to the OpenACC Application
  Programming Interface v2.6 <\fBhttps://www.openacc.org\fR>.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR.
! .IP \fB\-fopenacc\-dim=\fR\fIgeom\fR 4
  .IX Item "-fopenacc-dim=geom"
  Specify default compute dimensions for parallel offload regions that do
  not explicitly specify.  The \fIgeom\fR value is a triple of
! \&\*(Aq:\*(Aq\-separated sizes, in order \*(Aqgang\*(Aq, \*(Aqworker\*(Aq and, \*(Aqvector\*(Aq.  A size
! can be omitted, to use a target\-specific default value.
! .IP \fB\-fopenmp\fR 4
  .IX Item "-fopenmp"
  Enable handling of OpenMP directives \fB#pragma omp\fR,
  \&\fB[[omp::directive(...)]]\fR, \fB[[omp::sequence(...)]]\fR and
! \&\fB[[omp::decl(...)]]\fR in C/C++ and \fB!$omp\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  When \fB\-fopenmp\fR is specified, the
*************** Program Interface v4.5 <\fBhttps://www.o
*** 2852,2881 ****
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
  \&\fB\-fopenmp\-simd\fR.
! .IP "\fB\-fopenmp\-simd\fR" 4
  .IX Item "-fopenmp-simd"
! Enable handling of OpenMP's \f(CW\*(C`simd\*(C'\fR, \f(CW\*(C`declare simd\*(C'\fR,
  \&\f(CW\*(C`declare reduction\*(C'\fR, \f(CW\*(C`assume\*(C'\fR, \f(CW\*(C`ordered\*(C'\fR, \f(CW\*(C`scan\*(C'\fR
  and \f(CW\*(C`loop\*(C'\fR directive, and of combined or composite directives with
  \&\f(CW\*(C`simd\*(C'\fR as constituent with \f(CW\*(C`#pragma omp\*(C'\fR,
  \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR, \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR and
! \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR in C/\*(C+ and \f(CW\*(C`!$omp\*(C'\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  Other OpenMP directives are ignored.  Unless
  \&\fB\-fopenmp\fR is additionally specified, the \f(CW\*(C`loop\*(C'\fR region binds
  to the current task region, independent of the specified \f(CW\*(C`bind\*(C'\fR clause.
! .IP "\fB\-fopenmp\-target\-simd\-clone\fR" 4
  .IX Item "-fopenmp-target-simd-clone"
  .PD 0
! .IP "\fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice-type\fR" 4
  .IX Item "-fopenmp-target-simd-clone=device-type"
  .PD
! In addition to generating \s-1SIMD\s0 clones for functions marked with the
! \&\f(CW\*(C`declare simd\*(C'\fR directive, \s-1GCC\s0 also generates clones
  for functions marked with the OpenMP \f(CW\*(C`declare target\*(C'\fR directive
  that are suitable for vectorization when this option is in effect.  The
! \&\fIdevice-type\fR may be one of \f(CW\*(C`none\*(C'\fR, \f(CW\*(C`host\*(C'\fR, \f(CW\*(C`nohost\*(C'\fR,
  and \f(CW\*(C`any\*(C'\fR, which correspond to keywords for the \f(CW\*(C`device_type\*(C'\fR
  clause of the \f(CW\*(C`declare target\*(C'\fR directive; clones are generated for
  the intersection of devices specified.
--- 2785,2814 ----
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
  \&\fB\-fopenmp\-simd\fR.
! .IP \fB\-fopenmp\-simd\fR 4
  .IX Item "-fopenmp-simd"
! Enable handling of OpenMP\*(Aqs \f(CW\*(C`simd\*(C'\fR, \f(CW\*(C`declare simd\*(C'\fR,
  \&\f(CW\*(C`declare reduction\*(C'\fR, \f(CW\*(C`assume\*(C'\fR, \f(CW\*(C`ordered\*(C'\fR, \f(CW\*(C`scan\*(C'\fR
  and \f(CW\*(C`loop\*(C'\fR directive, and of combined or composite directives with
  \&\f(CW\*(C`simd\*(C'\fR as constituent with \f(CW\*(C`#pragma omp\*(C'\fR,
  \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR, \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR and
! \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR in C/C++ and \f(CW\*(C`!$omp\*(C'\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
  Fortran.  In fixed source form Fortran, the sentinels can also start with
  \&\fBc\fR or \fB*\fR.  Other OpenMP directives are ignored.  Unless
  \&\fB\-fopenmp\fR is additionally specified, the \f(CW\*(C`loop\*(C'\fR region binds
  to the current task region, independent of the specified \f(CW\*(C`bind\*(C'\fR clause.
! .IP \fB\-fopenmp\-target\-simd\-clone\fR 4
  .IX Item "-fopenmp-target-simd-clone"
  .PD 0
! .IP \fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice\-type\fR 4
  .IX Item "-fopenmp-target-simd-clone=device-type"
  .PD
! In addition to generating SIMD clones for functions marked with the
! \&\f(CW\*(C`declare simd\*(C'\fR directive, GCC also generates clones
  for functions marked with the OpenMP \f(CW\*(C`declare target\*(C'\fR directive
  that are suitable for vectorization when this option is in effect.  The
! \&\fIdevice\-type\fR may be one of \f(CW\*(C`none\*(C'\fR, \f(CW\*(C`host\*(C'\fR, \f(CW\*(C`nohost\*(C'\fR,
  and \f(CW\*(C`any\*(C'\fR, which correspond to keywords for the \f(CW\*(C`device_type\*(C'\fR
  clause of the \f(CW\*(C`declare target\*(C'\fR directive; clones are generated for
  the intersection of devices specified.
*************** the intersection of devices specified.
*** 2887,2895 ****
  At \fB\-O2\fR and higher (but not \fB\-Os\fR or \fB\-Og\fR) this
  optimization defaults to \fB\-fopenmp\-target\-simd\-clone=nohost\fR; otherwise
  it is disabled by default.
! .IP "\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR" 4
  .IX Item "-fpermitted-flt-eval-methods=style"
! \&\s-1ISO/IEC TS 18661\-3\s0 defines new permissible values for
  \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR that indicate that operations and constants with
  a semantic type that is an interchange or extended format should be
  evaluated to the precision and range of that type.  These new values are
--- 2820,2828 ----
  At \fB\-O2\fR and higher (but not \fB\-Os\fR or \fB\-Og\fR) this
  optimization defaults to \fB\-fopenmp\-target\-simd\-clone=nohost\fR; otherwise
  it is disabled by default.
! .IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4
  .IX Item "-fpermitted-flt-eval-methods=style"
! ISO/IEC TS 18661\-3 defines new permissible values for
  \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR that indicate that operations and constants with
  a semantic type that is an interchange or extended format should be
  evaluated to the precision and range of that type.  These new values are
*************** the new values.
*** 2900,2911 ****
  .Sp
  \&\fB\-fpermitted\-flt\-eval\-methods\fR specifies whether the compiler
  should allow only the values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR specified in C99/C11,
! or the extended set of values specified in \s-1ISO/IEC TS 18661\-3.\s0
  .Sp
  \&\fIstyle\fR is either \f(CW\*(C`c11\*(C'\fR or \f(CW\*(C`ts\-18661\-3\*(C'\fR as appropriate.
  .Sp
  The default when in a standards compliant mode (\fB\-std=c11\fR or similar)
! is \fB\-fpermitted\-flt\-eval\-methods=c11\fR.  The default when in a \s-1GNU\s0
  dialect (\fB\-std=gnu11\fR or similar) is
  \&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR.
  .Sp
--- 2833,2844 ----
  .Sp
  \&\fB\-fpermitted\-flt\-eval\-methods\fR specifies whether the compiler
  should allow only the values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR specified in C99/C11,
! or the extended set of values specified in ISO/IEC TS 18661\-3.
  .Sp
  \&\fIstyle\fR is either \f(CW\*(C`c11\*(C'\fR or \f(CW\*(C`ts\-18661\-3\*(C'\fR as appropriate.
  .Sp
  The default when in a standards compliant mode (\fB\-std=c11\fR or similar)
! is \fB\-fpermitted\-flt\-eval\-methods=c11\fR.  The default when in a GNU
  dialect (\fB\-std=gnu11\fR or similar) is
  \&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR.
  .Sp
*************** resources are provided by the source.  T
*** 2916,2967 ****
  required dependencies between compilation rules of dependent sources based on
  their contents rather than requiring such information be reflected within the
  build tools as well.
! .IP "\fB\-fdeps\-file=\fR\fIfile\fR" 4
  .IX Item "-fdeps-file=file"
  Where to write structured dependency information.
! .IP "\fB\-fdeps\-format=\fR\fIformat\fR" 4
  .IX Item "-fdeps-format=format"
  The format to use for structured dependency information. \fBp1689r5\fR is the
  only supported format right now.  Note that when this argument is specified, the
! output of \fB\-MF\fR is stripped of some information (namely \*(C+ modules) so
  that it does not use extended makefile syntax not understood by most tools.
! .IP "\fB\-fdeps\-target=\fR\fIfile\fR" 4
  .IX Item "-fdeps-target=file"
  Analogous to \fB\-MT\fR but for structured dependency information.  This
  indicates the target which will ultimately need any required resources and
  provide any resources extracted from the source that may be required by other
  sources.
! .IP "\fB\-fplan9\-extensions\fR" 4
  .IX Item "-fplan9-extensions"
! Accept some non-standard constructs used in Plan 9 code.
  .Sp
  This enables \fB\-fms\-extensions\fR, permits passing pointers to
  structures with anonymous fields to functions that expect pointers to
  elements of the type of the field, and permits referring to anonymous
  fields declared using a typedef.    This is only
! supported for C, not \*(C+.
! .IP "\fB\-fsigned\-bitfields\fR" 4
  .IX Item "-fsigned-bitfields"
  .PD 0
! .IP "\fB\-funsigned\-bitfields\fR" 4
  .IX Item "-funsigned-bitfields"
! .IP "\fB\-fno\-signed\-bitfields\fR" 4
  .IX Item "-fno-signed-bitfields"
! .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
  .IX Item "-fno-unsigned-bitfields"
  .PD
! These options control whether a bit-field is signed or unsigned, when the
  declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
! default, such a bit-field is signed, because this is consistent: the
  basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
! .IP "\fB\-fsigned\-char\fR" 4
  .IX Item "-fsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
  .Sp
  Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
  the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
  \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
! .IP "\fB\-funsigned\-char\fR" 4
  .IX Item "-funsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
  .Sp
--- 2849,2900 ----
  required dependencies between compilation rules of dependent sources based on
  their contents rather than requiring such information be reflected within the
  build tools as well.
! .IP \fB\-fdeps\-file=\fR\fIfile\fR 4
  .IX Item "-fdeps-file=file"
  Where to write structured dependency information.
! .IP \fB\-fdeps\-format=\fR\fIformat\fR 4
  .IX Item "-fdeps-format=format"
  The format to use for structured dependency information. \fBp1689r5\fR is the
  only supported format right now.  Note that when this argument is specified, the
! output of \fB\-MF\fR is stripped of some information (namely C++ modules) so
  that it does not use extended makefile syntax not understood by most tools.
! .IP \fB\-fdeps\-target=\fR\fIfile\fR 4
  .IX Item "-fdeps-target=file"
  Analogous to \fB\-MT\fR but for structured dependency information.  This
  indicates the target which will ultimately need any required resources and
  provide any resources extracted from the source that may be required by other
  sources.
! .IP \fB\-fplan9\-extensions\fR 4
  .IX Item "-fplan9-extensions"
! Accept some non\-standard constructs used in Plan 9 code.
  .Sp
  This enables \fB\-fms\-extensions\fR, permits passing pointers to
  structures with anonymous fields to functions that expect pointers to
  elements of the type of the field, and permits referring to anonymous
  fields declared using a typedef.    This is only
! supported for C, not C++.
! .IP \fB\-fsigned\-bitfields\fR 4
  .IX Item "-fsigned-bitfields"
  .PD 0
! .IP \fB\-funsigned\-bitfields\fR 4
  .IX Item "-funsigned-bitfields"
! .IP \fB\-fno\-signed\-bitfields\fR 4
  .IX Item "-fno-signed-bitfields"
! .IP \fB\-fno\-unsigned\-bitfields\fR 4
  .IX Item "-fno-unsigned-bitfields"
  .PD
! These options control whether a bit\-field is signed or unsigned, when the
  declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
! default, such a bit\-field is signed, because this is consistent: the
  basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
! .IP \fB\-fsigned\-char\fR 4
  .IX Item "-fsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
  .Sp
  Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
  the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
  \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
! .IP \fB\-funsigned\-char\fR 4
  .IX Item "-funsigned-char"
  Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
  .Sp
*************** make such a program work with the opposi
*** 2979,2989 ****
  The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
  \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
  is always just like one of those two.
! .IP "\fB\-fstrict\-flex\-arrays\fR (C and \*(C+ only)" 4
! .IX Item "-fstrict-flex-arrays (C and only)"
  .PD 0
! .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(C and \*(C+ only)" 4
! .IX Item "-fstrict-flex-arrays=level (C and only)"
  .PD
  Control when to treat the trailing array of a structure as a flexible array
  member for the purpose of accessing the elements of such an array.  The value
--- 2912,2922 ----
  The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
  \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
  is always just like one of those two.
! .IP "\fB\-fstrict\-flex\-arrays\fR (C and C++ only)" 4
! .IX Item "-fstrict-flex-arrays (C and C++ only)"
  .PD 0
! .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(C and C++ only)" 4
! .IX Item "-fstrict-flex-arrays=level (C and C++ only)"
  .PD
  Control when to treat the trailing array of a structure as a flexible array
  member for the purpose of accessing the elements of such an array.  The value
*************** structure by using the variable attribut
*** 3006,3025 ****
  .Sp
  The \fB\-fstrict_flex_arrays\fR option interacts with the
  \&\fB\-Wstrict\-flex\-arrays\fR option.
! .IP "\fB\-fsso\-struct=\fR\fIendianness\fR" 4
  .IX Item "-fsso-struct=endianness"
  Set the default scalar storage order of structures and unions to the
! specified endianness.  The accepted values are \fBbig-endian\fR,
! \&\fBlittle-endian\fR and \fBnative\fR for the native endianness of
! the target (the default).  This option is not supported for \*(C+.
  .Sp
! \&\fBWarning:\fR the \fB\-fsso\-struct\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without it if the
  specified endianness is not the native endianness of the target.
! .SS "Options Controlling \*(C+ Dialect"
! .IX Subsection "Options Controlling Dialect"
! This section describes the command-line options that are only meaningful
! for \*(C+ programs.  You can also use most of the \s-1GNU\s0 compiler options
  regardless of what language your program is in.  For example, you
  might compile a file \fIfirstClass.C\fR like this:
  .PP
--- 2939,2958 ----
  .Sp
  The \fB\-fstrict_flex_arrays\fR option interacts with the
  \&\fB\-Wstrict\-flex\-arrays\fR option.
! .IP \fB\-fsso\-struct=\fR\fIendianness\fR 4
  .IX Item "-fsso-struct=endianness"
  Set the default scalar storage order of structures and unions to the
! specified endianness.  The accepted values are \fBbig\-endian\fR,
! \&\fBlittle\-endian\fR and \fBnative\fR for the native endianness of
! the target (the default).  This option is not supported for C++.
  .Sp
! \&\fBWarning:\fR the \fB\-fsso\-struct\fR switch causes GCC to generate
  code that is not binary compatible with code generated without it if the
  specified endianness is not the native endianness of the target.
! .SS "Options Controlling C++ Dialect"
! .IX Subsection "Options Controlling C++ Dialect"
! This section describes the command\-line options that are only meaningful
! for C++ programs.  You can also use most of the GNU compiler options
  regardless of what language your program is in.  For example, you
  might compile a file \fIfirstClass.C\fR like this:
  .PP
*************** might compile a file \fIfirstClass.C\fR
*** 3028,3051 ****
  .Ve
  .PP
  In this example, only \fB\-fstrict\-enums\fR is an option meant
! only for \*(C+ programs; you can use the other options with any
! language supported by \s-1GCC.\s0
  .PP
  Some options for compiling C programs, such as \fB\-std\fR, are also
! relevant for \*(C+ programs.
  .PP
! Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
! .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
  .IX Item "-fabi-version=n"
! Use version \fIn\fR of the \*(C+ \s-1ABI.\s0  The default is version 0.
  .Sp
  Version 0 refers to the version conforming most closely to
! the \*(C+ \s-1ABI\s0 specification.  Therefore, the \s-1ABI\s0 obtained using version 0
! will change in different versions of G++ as \s-1ABI\s0 bugs are fixed.
  .Sp
! Version 1 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.
  .Sp
! Version 2 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++
  3.4, and was the default through G++ 4.9.
  .Sp
  Version 3 corrects an error in mangling a constant address as a
--- 2961,2984 ----
  .Ve
  .PP
  In this example, only \fB\-fstrict\-enums\fR is an option meant
! only for C++ programs; you can use the other options with any
! language supported by GCC.
  .PP
  Some options for compiling C programs, such as \fB\-std\fR, are also
! relevant for C++ programs.
  .PP
! Here is a list of options that are \fIonly\fR for compiling C++ programs:
! .IP \fB\-fabi\-version=\fR\fIn\fR 4
  .IX Item "-fabi-version=n"
! Use version \fIn\fR of the C++ ABI.  The default is version 0.
  .Sp
  Version 0 refers to the version conforming most closely to
! the C++ ABI specification.  Therefore, the ABI obtained using version 0
! will change in different versions of G++ as ABI bugs are fixed.
  .Sp
! Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.
  .Sp
! Version 2 is the version of the C++ ABI that first appeared in G++
  3.4, and was the default through G++ 4.9.
  .Sp
  Version 3 corrects an error in mangling a constant address as a
*************** plain decl, and use of a function parame
*** 3060,3066 ****
  another parameter.
  .Sp
  Version 6, which first appeared in G++ 4.7, corrects the promotion
! behavior of \*(C+11 scoped enums and the mangling of template argument
  packs, const/static_cast, prefix ++ and \-\-, and a class scope function
  used as a template argument.
  .Sp
--- 2993,2999 ----
  another parameter.
  .Sp
  Version 6, which first appeared in G++ 4.7, corrects the promotion
! behavior of C++11 scoped enums and the mangling of template argument
  packs, const/static_cast, prefix ++ and \-\-, and a class scope function
  used as a template argument.
  .Sp
*************** builtin type and corrects the mangling o
*** 3069,3075 ****
  scope.
  .Sp
  Version 8, which first appeared in G++ 4.9, corrects the substitution
! behavior of function types with function-cv-qualifiers.
  .Sp
  Version 9, which first appeared in G++ 5.2, corrects the alignment of
  \&\f(CW\*(C`nullptr_t\*(C'\fR.
--- 3002,3008 ----
  scope.
  .Sp
  Version 8, which first appeared in G++ 4.9, corrects the substitution
! behavior of function types with function\-cv\-qualifiers.
  .Sp
  Version 9, which first appeared in G++ 5.2, corrects the alignment of
  \&\f(CW\*(C`nullptr_t\*(C'\fR.
*************** change in version 12.
*** 3096,3102 ****
  Version 14, which first appeared in G++ 10, corrects the mangling of
  the nullptr expression.
  .Sp
! Version 15, which first appeared in G++ 10.3, corrects G++ 10 \s-1ABI\s0
  tag regression.
  .Sp
  Version 16, which first appeared in G++ 11, changes the mangling of
--- 3029,3035 ----
  Version 14, which first appeared in G++ 10, corrects the mangling of
  the nullptr expression.
  .Sp
! Version 15, which first appeared in G++ 10.3, corrects G++ 10 ABI
  tag regression.
  .Sp
  Version 16, which first appeared in G++ 11, changes the mangling of
*************** dependent operator names.
*** 3105,3162 ****
  .Sp
  Version 17, which first appeared in G++ 12, fixes layout of classes
  that inherit from aggregate classes with default member initializers
! in \*(C+14 and up.
  .Sp
  Version 18, which first appeard in G++ 13, fixes manglings of lambdas
  that have additional context.
  .Sp
  Version 19, which first appeard in G++ 14, fixes manglings of structured
! bindings to include \s-1ABI\s0 tags.
  .Sp
  See also \fB\-Wabi\fR.
! .IP "\fB\-fabi\-compat\-version=\fR\fIn\fR" 4
  .IX Item "-fabi-compat-version=n"
  On targets that support strong aliases, G++
  works around mangling changes by creating an alias with the correct
  mangled name when defining a symbol with an incorrect mangled name.
! This switch specifies which \s-1ABI\s0 version to use for the alias.
  .Sp
! With \fB\-fabi\-version=0\fR (the default), this defaults to 13 (\s-1GCC 8.2\s0
! compatibility).  If another \s-1ABI\s0 version is explicitly selected, this
! defaults to 0.  For compatibility with \s-1GCC\s0 versions 3.2 through 4.9,
  use \fB\-fabi\-compat\-version=2\fR.
  .Sp
  If this option is not provided but \fB\-Wabi=\fR\fIn\fR is, that
  version is used for compatibility aliases.  If this option is provided
  along with \fB\-Wabi\fR (without the version), the version from this
  option is used for the warning.
! .IP "\fB\-fno\-access\-control\fR" 4
  .IX Item "-fno-access-control"
  Turn off all access checking.  This switch is mainly useful for working
  around bugs in the access control code.
! .IP "\fB\-faligned\-new\fR" 4
  .IX Item "-faligned-new"
! Enable support for \*(C+17 \f(CW\*(C`new\*(C'\fR of types that require more
  alignment than \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR provides.  A
  numeric argument such as \f(CW\*(C`\-faligned\-new=32\*(C'\fR can be used to
  specify how much alignment (in bytes) is provided by that function,
  but few users will need to override the default of
! \&\f(CW\*(C`alignof(std::max_align_t)\*(C'\fR.
  .Sp
  This flag is enabled by default for \fB\-std=c++17\fR.
! .IP "\fB\-fchar8_t\fR" 4
  .IX Item "-fchar8_t"
  .PD 0
! .IP "\fB\-fno\-char8_t\fR" 4
  .IX Item "-fno-char8_t"
  .PD
! Enable support for \f(CW\*(C`char8_t\*(C'\fR as adopted for \*(C+20.  This includes
  the addition of a new \f(CW\*(C`char8_t\*(C'\fR fundamental type, changes to the
! types of \s-1UTF\-8\s0 string and character literals, new signatures for
! user-defined literals, associated standard library updates, and new
  \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR and \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR feature test macros.
  .Sp
! This option enables functions to be overloaded for ordinary and \s-1UTF\-8\s0
  strings:
  .Sp
  .Vb 4
--- 3038,3095 ----
  .Sp
  Version 17, which first appeared in G++ 12, fixes layout of classes
  that inherit from aggregate classes with default member initializers
! in C++14 and up.
  .Sp
  Version 18, which first appeard in G++ 13, fixes manglings of lambdas
  that have additional context.
  .Sp
  Version 19, which first appeard in G++ 14, fixes manglings of structured
! bindings to include ABI tags.
  .Sp
  See also \fB\-Wabi\fR.
! .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4
  .IX Item "-fabi-compat-version=n"
  On targets that support strong aliases, G++
  works around mangling changes by creating an alias with the correct
  mangled name when defining a symbol with an incorrect mangled name.
! This switch specifies which ABI version to use for the alias.
  .Sp
! With \fB\-fabi\-version=0\fR (the default), this defaults to 13 (GCC 8.2
! compatibility).  If another ABI version is explicitly selected, this
! defaults to 0.  For compatibility with GCC versions 3.2 through 4.9,
  use \fB\-fabi\-compat\-version=2\fR.
  .Sp
  If this option is not provided but \fB\-Wabi=\fR\fIn\fR is, that
  version is used for compatibility aliases.  If this option is provided
  along with \fB\-Wabi\fR (without the version), the version from this
  option is used for the warning.
! .IP \fB\-fno\-access\-control\fR 4
  .IX Item "-fno-access-control"
  Turn off all access checking.  This switch is mainly useful for working
  around bugs in the access control code.
! .IP \fB\-faligned\-new\fR 4
  .IX Item "-faligned-new"
! Enable support for C++17 \f(CW\*(C`new\*(C'\fR of types that require more
  alignment than \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR provides.  A
  numeric argument such as \f(CW\*(C`\-faligned\-new=32\*(C'\fR can be used to
  specify how much alignment (in bytes) is provided by that function,
  but few users will need to override the default of
! \&\f(CWalignof(std::max_align_t)\fR.
  .Sp
  This flag is enabled by default for \fB\-std=c++17\fR.
! .IP \fB\-fchar8_t\fR 4
  .IX Item "-fchar8_t"
  .PD 0
! .IP \fB\-fno\-char8_t\fR 4
  .IX Item "-fno-char8_t"
  .PD
! Enable support for \f(CW\*(C`char8_t\*(C'\fR as adopted for C++20.  This includes
  the addition of a new \f(CW\*(C`char8_t\*(C'\fR fundamental type, changes to the
! types of UTF\-8 string and character literals, new signatures for
! user\-defined literals, associated standard library updates, and new
  \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR and \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR feature test macros.
  .Sp
! This option enables functions to be overloaded for ordinary and UTF\-8
  strings:
  .Sp
  .Vb 4
*************** strings:
*** 3166,3172 ****
  \&        int v2 = f(u8"text");   // Calls #2
  .Ve
  .Sp
! and introduces new signatures for user-defined literals:
  .Sp
  .Vb 6
  \&        int operator""_udl1(char8_t);
--- 3099,3105 ----
  \&        int v2 = f(u8"text");   // Calls #2
  .Ve
  .Sp
! and introduces new signatures for user\-defined literals:
  .Sp
  .Vb 6
  \&        int operator""_udl1(char8_t);
*************** and introduces new signatures for user-d
*** 3177,3185 ****
  \&        int v5 = u8"text"_udl3;
  .Ve
  .Sp
! The change to the types of \s-1UTF\-8\s0 string and character literals introduces
! incompatibilities with \s-1ISO \*(C+11\s0 and later standards.  For example, the
! following code is well-formed under \s-1ISO \*(C+11,\s0 but is ill-formed when
  \&\fB\-fchar8_t\fR is specified.
  .Sp
  .Vb 11
--- 3110,3118 ----
  \&        int v5 = u8"text"_udl3;
  .Ve
  .Sp
! The change to the types of UTF\-8 string and character literals introduces
! incompatibilities with ISO C++11 and later standards.  For example, the
! following code is well\-formed under ISO C++11, but is ill\-formed when
  \&\fB\-fchar8_t\fR is specified.
  .Sp
  .Vb 11
*************** following code is well-formed under \s-1
*** 3195,3236 ****
  \&                                //        \`basic_string<char8_t>\*(Aq to non\-scalar
  \&                                //        type \`basic_string<char>\*(Aq requested
  .Ve
! .IP "\fB\-fcheck\-new\fR" 4
  .IX Item "-fcheck-new"
! Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
  before attempting to modify the storage allocated.  This check is
! normally unnecessary because the \*(C+ standard specifies that
  \&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
! \&\f(CW\*(C`throw()\*(C'\fR, in which case the compiler always checks the
  return value even without this option.  In all other cases, when
! \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
  exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
  \&\fBnew (nothrow)\fR.
! .IP "\fB\-fconcepts\fR" 4
  .IX Item "-fconcepts"
  .PD 0
! .IP "\fB\-fconcepts\-ts\fR" 4
  .IX Item "-fconcepts-ts"
  .PD
! Enable support for the \*(C+ Concepts feature for constraining template
  arguments.  With \fB\-std=c++20\fR and above, Concepts are part of
  the language standard, so \fB\-fconcepts\fR defaults to on.
  .Sp
! Some constructs that were allowed by the earlier \*(C+ Extensions for
! Concepts Technical Specification, \s-1ISO 19217\s0 (2015), but didn't make it
  into the standard, can additionally be enabled by
  \&\fB\-fconcepts\-ts\fR.  The option \fB\-fconcepts\-ts\fR was deprecated
! in \s-1GCC 14\s0 and may be removed in \s-1GCC 15\s0; users are expected to convert
! their code to \*(C+20 concepts.
! .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-depth=n"
! Set the maximum nested evaluation depth for \*(C+11 constexpr functions
  to \fIn\fR.  A limit is needed to detect endless recursion during
  constant expression evaluation.  The minimum specified by the standard
  is 512.
! .IP "\fB\-fconstexpr\-cache\-depth=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-cache-depth=n"
! Set the maximum level of nested evaluation depth for \*(C+11 constexpr
  functions that will be cached to \fIn\fR.  This is a heuristic that
  trades off compilation speed (when the cache avoids repeated
  calculations) against memory consumption (when the cache grows very
--- 3128,3169 ----
  \&                                //        \`basic_string<char8_t>\*(Aq to non\-scalar
  \&                                //        type \`basic_string<char>\*(Aq requested
  .Ve
! .IP \fB\-fcheck\-new\fR 4
  .IX Item "-fcheck-new"
! Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non\-null
  before attempting to modify the storage allocated.  This check is
! normally unnecessary because the C++ standard specifies that
  \&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
! \&\f(CWthrow()\fR, in which case the compiler always checks the
  return value even without this option.  In all other cases, when
! \&\f(CW\*(C`operator new\*(C'\fR has a non\-empty exception specification, memory
  exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
  \&\fBnew (nothrow)\fR.
! .IP \fB\-fconcepts\fR 4
  .IX Item "-fconcepts"
  .PD 0
! .IP \fB\-fconcepts\-ts\fR 4
  .IX Item "-fconcepts-ts"
  .PD
! Enable support for the C++ Concepts feature for constraining template
  arguments.  With \fB\-std=c++20\fR and above, Concepts are part of
  the language standard, so \fB\-fconcepts\fR defaults to on.
  .Sp
! Some constructs that were allowed by the earlier C++ Extensions for
! Concepts Technical Specification, ISO 19217 (2015), but didn\*(Aqt make it
  into the standard, can additionally be enabled by
  \&\fB\-fconcepts\-ts\fR.  The option \fB\-fconcepts\-ts\fR was deprecated
! in GCC 14 and may be removed in GCC 15; users are expected to convert
! their code to C++20 concepts.
! .IP \fB\-fconstexpr\-depth=\fR\fIn\fR 4
  .IX Item "-fconstexpr-depth=n"
! Set the maximum nested evaluation depth for C++11 constexpr functions
  to \fIn\fR.  A limit is needed to detect endless recursion during
  constant expression evaluation.  The minimum specified by the standard
  is 512.
! .IP \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR 4
  .IX Item "-fconstexpr-cache-depth=n"
! Set the maximum level of nested evaluation depth for C++11 constexpr
  functions that will be cached to \fIn\fR.  This is a heuristic that
  trades off compilation speed (when the cache avoids repeated
  calculations) against memory consumption (when the cache grows very
*************** large from highly recursive evaluations)
*** 3238,3249 ****
  users are likely to want to adjust it, but if your code does heavy
  constexpr calculations you might want to experiment to find which
  value works best for you.
! .IP "\fB\-fconstexpr\-fp\-except\fR" 4
  .IX Item "-fconstexpr-fp-except"
! Annex F of the C standard specifies that \s-1IEC559\s0 floating point
  exceptions encountered at compile time should not stop compilation.
! \&\*(C+ compilers have historically not followed this guidance, instead
! treating floating point division by zero as non-constant even though
  it has a well defined value.  This flag tells the compiler to give
  Annex F priority over other rules saying that a particular operation
  is undefined.
--- 3171,3182 ----
  users are likely to want to adjust it, but if your code does heavy
  constexpr calculations you might want to experiment to find which
  value works best for you.
! .IP \fB\-fconstexpr\-fp\-except\fR 4
  .IX Item "-fconstexpr-fp-except"
! Annex F of the C standard specifies that IEC559 floating point
  exceptions encountered at compile time should not stop compilation.
! C++ compilers have historically not followed this guidance, instead
! treating floating point division by zero as non\-constant even though
  it has a well defined value.  This flag tells the compiler to give
  Annex F priority over other rules saying that a particular operation
  is undefined.
*************** is undefined.
*** 3251,3262 ****
  .Vb 1
  \&        constexpr float inf = 1./0.; // OK with \-fconstexpr\-fp\-except
  .Ve
! .IP "\fB\-fconstexpr\-loop\-limit=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-loop-limit=n"
! Set the maximum number of iterations for a loop in \*(C+14 constexpr functions
  to \fIn\fR.  A limit is needed to detect infinite loops during
  constant expression evaluation.  The default is 262144 (1<<18).
! .IP "\fB\-fconstexpr\-ops\-limit=\fR\fIn\fR" 4
  .IX Item "-fconstexpr-ops-limit=n"
  Set the maximum number of operations during a single constexpr evaluation.
  Even when number of iterations of a single loop is limited with the above limit,
--- 3184,3195 ----
  .Vb 1
  \&        constexpr float inf = 1./0.; // OK with \-fconstexpr\-fp\-except
  .Ve
! .IP \fB\-fconstexpr\-loop\-limit=\fR\fIn\fR 4
  .IX Item "-fconstexpr-loop-limit=n"
! Set the maximum number of iterations for a loop in C++14 constexpr functions
  to \fIn\fR.  A limit is needed to detect infinite loops during
  constant expression evaluation.  The default is 262144 (1<<18).
! .IP \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR 4
  .IX Item "-fconstexpr-ops-limit=n"
  Set the maximum number of operations during a single constexpr evaluation.
  Even when number of iterations of a single loop is limited with the above limit,
*************** smaller than the above limit, or if in a
*** 3265,3278 ****
  of a loop too many expressions need to be evaluated, the resulting constexpr
  evaluation might take too long.
  The default is 33554432 (1<<25).
! .IP "\fB\-fcontracts\fR" 4
  .IX Item "-fcontracts"
! Enable experimental support for the \*(C+ Contracts feature, as briefly
! added to and then removed from the \*(C+20 working paper (N4820).  The
  implementation also includes proposed enhancements from papers P1290,
  P1332, and P1429.  This functionality is intended mostly for those
  interested in experimentation towards refining the feature to get it
! into shape for a future \*(C+ standard.
  .Sp
  On violation of a checked contract, the violation handler is called.
  Users can replace the violation handler by defining
--- 3198,3211 ----
  of a loop too many expressions need to be evaluated, the resulting constexpr
  evaluation might take too long.
  The default is 33554432 (1<<25).
! .IP \fB\-fcontracts\fR 4
  .IX Item "-fcontracts"
! Enable experimental support for the C++ Contracts feature, as briefly
! added to and then removed from the C++20 working paper (N4820).  The
  implementation also includes proposed enhancements from papers P1290,
  P1332, and P1429.  This functionality is intended mostly for those
  interested in experimentation towards refining the feature to get it
! into shape for a future C++ standard.
  .Sp
  On violation of a checked contract, the violation handler is called.
  Users can replace the violation handler by defining
*************** to specify which contracts will be check
*** 3287,3318 ****
  contracts, P1332 contracts, or P1429 contracts; these sets cannot be
  used together.
  .RS 4
! .IP "\fB\-fcontract\-mode=[on|off]\fR" 4
  .IX Item "-fcontract-mode=[on|off]"
  Control whether any contracts have any semantics at all.  Defaults to on.
! .IP "\fB\-fcontract\-assumption\-mode=[on|off]\fR" 4
  .IX Item "-fcontract-assumption-mode=[on|off]"
  [N4820] Control whether contracts with level \fBaxiom\fR
  should have the assume semantic.  Defaults to on.
! .IP "\fB\-fcontract\-build\-level=[off|default|audit]\fR" 4
  .IX Item "-fcontract-build-level=[off|default|audit]"
  [N4820] Specify which level of contracts to generate checks
  for.  Defaults to \fBdefault\fR.
! .IP "\fB\-fcontract\-continuation\-mode=[on|off]\fR" 4
  .IX Item "-fcontract-continuation-mode=[on|off]"
  [N4820] Control whether to allow the program to continue executing
  after a contract violation.  That is, do checked contracts have the
  \&\fBmaybe\fR semantic described below rather than the \fBnever\fR
  semantic.  Defaults to off.
! .IP "\fB\-fcontract\-role=<name>:<default>,<audit>,<axiom>\fR" 4
  .IX Item "-fcontract-role=<name>:<default>,<audit>,<axiom>"
  [P1332] Specify the concrete semantics for each contract level
  of a particular contract role.
! .IP "\fB\-fcontract\-semantic=[default|audit|axiom]:<semantic>\fR" 4
  .IX Item "-fcontract-semantic=[default|audit|axiom]:<semantic>"
  [P1429] Specify the concrete semantic for a particular
  contract level.
! .IP "\fB\-fcontract\-strict\-declarations=[on|off]\fR" 4
  .IX Item "-fcontract-strict-declarations=[on|off]"
  Control whether to reject adding contracts to a function after its
  first declaration.  Defaults to off.
--- 3220,3251 ----
  contracts, P1332 contracts, or P1429 contracts; these sets cannot be
  used together.
  .RS 4
! .IP \fB\-fcontract\-mode=[on|off]\fR 4
  .IX Item "-fcontract-mode=[on|off]"
  Control whether any contracts have any semantics at all.  Defaults to on.
! .IP \fB\-fcontract\-assumption\-mode=[on|off]\fR 4
  .IX Item "-fcontract-assumption-mode=[on|off]"
  [N4820] Control whether contracts with level \fBaxiom\fR
  should have the assume semantic.  Defaults to on.
! .IP \fB\-fcontract\-build\-level=[off|default|audit]\fR 4
  .IX Item "-fcontract-build-level=[off|default|audit]"
  [N4820] Specify which level of contracts to generate checks
  for.  Defaults to \fBdefault\fR.
! .IP \fB\-fcontract\-continuation\-mode=[on|off]\fR 4
  .IX Item "-fcontract-continuation-mode=[on|off]"
  [N4820] Control whether to allow the program to continue executing
  after a contract violation.  That is, do checked contracts have the
  \&\fBmaybe\fR semantic described below rather than the \fBnever\fR
  semantic.  Defaults to off.
! .IP \fB\-fcontract\-role=<name>:<default>,<audit>,<axiom>\fR 4
  .IX Item "-fcontract-role=<name>:<default>,<audit>,<axiom>"
  [P1332] Specify the concrete semantics for each contract level
  of a particular contract role.
! .IP \fB\-fcontract\-semantic=[default|audit|axiom]:<semantic>\fR 4
  .IX Item "-fcontract-semantic=[default|audit|axiom]:<semantic>"
  [P1429] Specify the concrete semantic for a particular
  contract level.
! .IP \fB\-fcontract\-strict\-declarations=[on|off]\fR 4
  .IX Item "-fcontract-strict-declarations=[on|off]"
  Control whether to reject adding contracts to a function after its
  first declaration.  Defaults to off.
*************** first declaration.  Defaults to off.
*** 3322,3353 ****
  The possible concrete semantics for that can be specified with
  \&\fB\-fcontract\-role\fR or \fB\-fcontract\-semantic\fR are:
  .ie n .IP """ignore""" 4
! .el .IP "\f(CWignore\fR" 4
  .IX Item "ignore"
  This contract has no effect.
  .ie n .IP """assume""" 4
! .el .IP "\f(CWassume\fR" 4
  .IX Item "assume"
! This contract is treated like \*(C+23 \f(CW\*(C`[[assume]]\*(C'\fR.
  .ie n .IP """check_never_continue""" 4
! .el .IP "\f(CWcheck_never_continue\fR" 4
  .IX Item "check_never_continue"
  .PD 0
  .ie n .IP """never""" 4
! .el .IP "\f(CWnever\fR" 4
  .IX Item "never"
  .ie n .IP """abort""" 4
! .el .IP "\f(CWabort\fR" 4
  .IX Item "abort"
  .PD
  This contract is checked.  If it fails, the violation handler is
  called.  If the handler returns, \f(CW\*(C`std::terminate\*(C'\fR is called.
  .ie n .IP """check_maybe_continue""" 4
! .el .IP "\f(CWcheck_maybe_continue\fR" 4
  .IX Item "check_maybe_continue"
  .PD 0
  .ie n .IP """maybe""" 4
! .el .IP "\f(CWmaybe\fR" 4
  .IX Item "maybe"
  .PD
  This contract is checked.  If it fails, the violation handler is
--- 3255,3286 ----
  The possible concrete semantics for that can be specified with
  \&\fB\-fcontract\-role\fR or \fB\-fcontract\-semantic\fR are:
  .ie n .IP """ignore""" 4
! .el .IP \f(CWignore\fR 4
  .IX Item "ignore"
  This contract has no effect.
  .ie n .IP """assume""" 4
! .el .IP \f(CWassume\fR 4
  .IX Item "assume"
! This contract is treated like C++23 \f(CW\*(C`[[assume]]\*(C'\fR.
  .ie n .IP """check_never_continue""" 4
! .el .IP \f(CWcheck_never_continue\fR 4
  .IX Item "check_never_continue"
  .PD 0
  .ie n .IP """never""" 4
! .el .IP \f(CWnever\fR 4
  .IX Item "never"
  .ie n .IP """abort""" 4
! .el .IP \f(CWabort\fR 4
  .IX Item "abort"
  .PD
  This contract is checked.  If it fails, the violation handler is
  called.  If the handler returns, \f(CW\*(C`std::terminate\*(C'\fR is called.
  .ie n .IP """check_maybe_continue""" 4
! .el .IP \f(CWcheck_maybe_continue\fR 4
  .IX Item "check_maybe_continue"
  .PD 0
  .ie n .IP """maybe""" 4
! .el .IP \f(CWmaybe\fR 4
  .IX Item "maybe"
  .PD
  This contract is checked.  If it fails, the violation handler is
*************** called.  If the handler returns, executi
*** 3355,3428 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fcoroutines\fR" 4
  .IX Item "-fcoroutines"
! Enable support for the \*(C+ coroutines extension (experimental).
! .IP "\fB\-fdiagnostics\-all\-candidates\fR" 4
  .IX Item "-fdiagnostics-all-candidates"
! Permit the \*(C+ front end to note all candidates during overload resolution
  failure, including when a deleted function is selected.
! .IP "\fB\-fno\-elide\-constructors\fR" 4
  .IX Item "-fno-elide-constructors"
! The \*(C+ standard allows an implementation to omit creating a temporary
  that is only used to initialize another object of the same type.
  Specifying this option disables that optimization, and forces G++ to
  call the copy constructor in all cases.  This option also causes G++
  to call trivial member functions which otherwise would be expanded inline.
  .Sp
! In \*(C+17, the compiler is required to omit these temporaries, but this
  option still affects trivial member functions.
! .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
  .IX Item "-fno-enforce-eh-specs"
! Don't generate code to check for violation of exception specifications
! at run time.  This option violates the \*(C+ standard, but may be useful
  for reducing code size in production builds, much like defining
  \&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
  exceptions in violation of the exception specifications; the compiler
  still optimizes based on the specifications, so throwing an
  unexpected exception results in undefined behavior at run time.
! .IP "\fB\-fextern\-tls\-init\fR" 4
  .IX Item "-fextern-tls-init"
  .PD 0
! .IP "\fB\-fno\-extern\-tls\-init\fR" 4
  .IX Item "-fno-extern-tls-init"
  .PD
! The \*(C+11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
  \&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
  initialization.  To support this, any use of such a variable goes
  through a wrapper function that performs any necessary initialization.
  When the use and definition of the variable are in the same
  translation unit, this overhead can be optimized away, but when the
  use is in a different translation unit there is significant overhead
! even if the variable doesn't actually need dynamic initialization.  If
  the programmer can be sure that no use of the variable in a
! non-defining \s-1TU\s0 needs to trigger dynamic initialization (either
  because the variable is statically initialized, or a use of the
! variable in the defining \s-1TU\s0 will be executed before any uses in
! another \s-1TU\s0), they can avoid this overhead with the
  \&\fB\-fno\-extern\-tls\-init\fR option.
  .Sp
  On targets that support symbol aliases, the default is
  \&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
  aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
! .IP "\fB\-ffold\-simple\-inlines\fR" 4
  .IX Item "-ffold-simple-inlines"
  .PD 0
! .IP "\fB\-fno\-fold\-simple\-inlines\fR" 4
  .IX Item "-fno-fold-simple-inlines"
  .PD
! Permit the \*(C+ frontend to fold calls to \f(CW\*(C`std::move\*(C'\fR, \f(CW\*(C`std::forward\*(C'\fR,
  \&\f(CW\*(C`std::addressof\*(C'\fR and \f(CW\*(C`std::as_const\*(C'\fR.  In contrast to inlining, this
  means no debug information will be generated for such calls.  Since these
  functions are rarely interesting to debug, this flag is enabled by default
  unless \fB\-fno\-inline\fR is active.
! .IP "\fB\-fno\-gnu\-keywords\fR" 4
  .IX Item "-fno-gnu-keywords"
  Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
  word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
! This option is implied by the strict \s-1ISO \*(C+\s0 dialects: \fB\-ansi\fR,
  \&\fB\-std=c++98\fR, \fB\-std=c++11\fR, etc.
! .IP "\fB\-fno\-immediate\-escalation\fR" 4
  .IX Item "-fno-immediate-escalation"
  Do not enable immediate function escalation whereby certain functions
  can be promoted to consteval, as specified in P2564R3.  For example:
--- 3288,3361 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fcoroutines\fR 4
  .IX Item "-fcoroutines"
! Enable support for the C++ coroutines extension (experimental).
! .IP \fB\-fdiagnostics\-all\-candidates\fR 4
  .IX Item "-fdiagnostics-all-candidates"
! Permit the C++ front end to note all candidates during overload resolution
  failure, including when a deleted function is selected.
! .IP \fB\-fno\-elide\-constructors\fR 4
  .IX Item "-fno-elide-constructors"
! The C++ standard allows an implementation to omit creating a temporary
  that is only used to initialize another object of the same type.
  Specifying this option disables that optimization, and forces G++ to
  call the copy constructor in all cases.  This option also causes G++
  to call trivial member functions which otherwise would be expanded inline.
  .Sp
! In C++17, the compiler is required to omit these temporaries, but this
  option still affects trivial member functions.
! .IP \fB\-fno\-enforce\-eh\-specs\fR 4
  .IX Item "-fno-enforce-eh-specs"
! Don\*(Aqt generate code to check for violation of exception specifications
! at run time.  This option violates the C++ standard, but may be useful
  for reducing code size in production builds, much like defining
  \&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
  exceptions in violation of the exception specifications; the compiler
  still optimizes based on the specifications, so throwing an
  unexpected exception results in undefined behavior at run time.
! .IP \fB\-fextern\-tls\-init\fR 4
  .IX Item "-fextern-tls-init"
  .PD 0
! .IP \fB\-fno\-extern\-tls\-init\fR 4
  .IX Item "-fno-extern-tls-init"
  .PD
! The C++11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
  \&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
  initialization.  To support this, any use of such a variable goes
  through a wrapper function that performs any necessary initialization.
  When the use and definition of the variable are in the same
  translation unit, this overhead can be optimized away, but when the
  use is in a different translation unit there is significant overhead
! even if the variable doesn\*(Aqt actually need dynamic initialization.  If
  the programmer can be sure that no use of the variable in a
! non\-defining TU needs to trigger dynamic initialization (either
  because the variable is statically initialized, or a use of the
! variable in the defining TU will be executed before any uses in
! another TU), they can avoid this overhead with the
  \&\fB\-fno\-extern\-tls\-init\fR option.
  .Sp
  On targets that support symbol aliases, the default is
  \&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
  aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
! .IP \fB\-ffold\-simple\-inlines\fR 4
  .IX Item "-ffold-simple-inlines"
  .PD 0
! .IP \fB\-fno\-fold\-simple\-inlines\fR 4
  .IX Item "-fno-fold-simple-inlines"
  .PD
! Permit the C++ frontend to fold calls to \f(CW\*(C`std::move\*(C'\fR, \f(CW\*(C`std::forward\*(C'\fR,
  \&\f(CW\*(C`std::addressof\*(C'\fR and \f(CW\*(C`std::as_const\*(C'\fR.  In contrast to inlining, this
  means no debug information will be generated for such calls.  Since these
  functions are rarely interesting to debug, this flag is enabled by default
  unless \fB\-fno\-inline\fR is active.
! .IP \fB\-fno\-gnu\-keywords\fR 4
  .IX Item "-fno-gnu-keywords"
  Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
  word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
! This option is implied by the strict ISO C++ dialects: \fB\-ansi\fR,
  \&\fB\-std=c++98\fR, \fB\-std=c++11\fR, etc.
! .IP \fB\-fno\-immediate\-escalation\fR 4
  .IX Item "-fno-immediate-escalation"
  Do not enable immediate function escalation whereby certain functions
  can be promoted to consteval, as specified in P2564R3.  For example:
*************** can be promoted to consteval, as specifi
*** 3441,3675 ****
  \&        }
  .Ve
  .Sp
! compiles in \*(C+20: \f(CW\*(C`f\*(C'\fR is an immediate-escalating function (due to
  the \f(CW\*(C`auto\*(C'\fR it is a function template and is declared \f(CW\*(C`constexpr\*(C'\fR)
! and \f(CWid(t)\fR is an immediate-escalating expression, so \f(CW\*(C`f\*(C'\fR is
  promoted to \f(CW\*(C`consteval\*(C'\fR.  Consequently, the call to \f(CWid(t)\fR
! is in an immediate context, so doesn't have to produce a constant (that
  is the mechanism allowing consteval function composition).  However,
  with \fB\-fno\-immediate\-escalation\fR, \f(CW\*(C`f\*(C'\fR is not promoted to
  \&\f(CW\*(C`consteval\*(C'\fR, and since the call to consteval function \f(CWid(t)\fR
  is not a constant expression, the compiler rejects the code.
  .Sp
! This option is turned on by default; it is only effective in \*(C+20 mode
  or later.
! .IP "\fB\-fimplicit\-constexpr\fR" 4
  .IX Item "-fimplicit-constexpr"
  Make inline functions implicitly constexpr, if they satisfy the
  requirements for a constexpr function.  This option can be used in
! \&\*(C+14 mode or later.  This can result in initialization changing from
  dynamic to static and other optimizations.
! .IP "\fB\-fno\-implicit\-templates\fR" 4
  .IX Item "-fno-implicit-templates"
! Never emit code for non-inline templates that are instantiated
  implicitly (i.e. by use); only emit code for explicit instantiations.
  If you use this option, you must take care to structure your code to
  include all the necessary explicit instantiations to avoid getting
  undefined symbols at link time.
! .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
  .IX Item "-fno-implicit-inline-templates"
! Don't emit code for implicit instantiations of inline templates, either.
  The default is to handle inlines differently so that compiles with and
  without optimization need the same set of explicit instantiations.
! .IP "\fB\-fno\-implement\-inlines\fR" 4
  .IX Item "-fno-implement-inlines"
! To save space, do not emit out-of-line copies of inline functions
  controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
  errors if these functions are not inlined everywhere they are called.
! .IP "\fB\-fmodules\-ts\fR" 4
  .IX Item "-fmodules-ts"
  .PD 0
! .IP "\fB\-fno\-modules\-ts\fR" 4
  .IX Item "-fno-modules-ts"
  .PD
! Enable support for \*(C+20 modules.  The
  \&\fB\-fno\-modules\-ts\fR is usually not needed, as that is the
! default.  Even though this is a \*(C+20 feature, it is not currently
  implicitly enabled by selecting that standard version.
! .IP "\fB\-fmodule\-header\fR" 4
  .IX Item "-fmodule-header"
  .PD 0
! .IP "\fB\-fmodule\-header=user\fR" 4
  .IX Item "-fmodule-header=user"
! .IP "\fB\-fmodule\-header=system\fR" 4
  .IX Item "-fmodule-header=system"
  .PD
  Compile a header file to create an importable header unit.
! .IP "\fB\-fmodule\-implicit\-inline\fR" 4
  .IX Item "-fmodule-implicit-inline"
  Member functions defined in their class definitions are not implicitly
! inline for modular code.  This is different to traditional \*(C+
  behavior, for good reasons.  However, it may result in a difficulty
  during code porting.  This option makes such function definitions
! implicitly inline.  It does however generate an \s-1ABI\s0 incompatibility,
  so you must use it everywhere or nowhere.  (Such definitions outside
  of a named module remain implicitly inline, regardless.)
! .IP "\fB\-fno\-module\-lazy\fR" 4
  .IX Item "-fno-module-lazy"
  Disable lazy module importing and module mapper creation.
! .IP "\fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=[hostname]:port[?ident]"
  .PD 0
  .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4
  .IX Item "-fmodule-mapper=|program[?ident] args..."
! .IP "\fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper==socket[?ident]"
! .IP "\fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=<>[inout][?ident]"
! .IP "\fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=<in>out[?ident]"
! .IP "\fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR]" 4
  .IX Item "-fmodule-mapper=file[?ident]"
  .PD
  An oracle to query for module name to filename mappings.  If
! unspecified the \fB\s-1CXX_MODULE_MAPPER\s0\fR environment variable is used,
! and if that is unset, an in-process default is provided.
! .IP "\fB\-fmodule\-only\fR" 4
  .IX Item "-fmodule-only"
  Only emit the Compiled Module Interface, inhibiting any object file.
! .IP "\fB\-fms\-extensions\fR" 4
  .IX Item "-fms-extensions"
! Disable Wpedantic warnings about constructs used in \s-1MFC,\s0 such as implicit
! int and getting a pointer to member function via non-standard syntax.
! .IP "\fB\-fnew\-inheriting\-ctors\fR" 4
  .IX Item "-fnew-inheriting-ctors"
! Enable the P0136 adjustment to the semantics of \*(C+11 constructor
! inheritance.  This is part of \*(C+17 but also considered to be a Defect
! Report against \*(C+11 and \*(C+14.  This flag is enabled by default
  unless \fB\-fabi\-version=10\fR or lower is specified.
! .IP "\fB\-fnew\-ttp\-matching\fR" 4
  .IX Item "-fnew-ttp-matching"
  Enable the P0522 resolution to Core issue 150, template template
  parameters and default arguments: this allows a template with default
  template arguments as an argument for a template template parameter
  with fewer template parameters.  This flag is enabled by default for
  \&\fB\-std=c++17\fR.
! .IP "\fB\-fno\-nonansi\-builtins\fR" 4
  .IX Item "-fno-nonansi-builtins"
! Disable built-in declarations of functions that are not mandated by
! \&\s-1ANSI/ISO C.\s0  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
  \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
! .IP "\fB\-fnothrow\-opt\fR" 4
  .IX Item "-fnothrow-opt"
! Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as if it were a
  \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
  overhead relative to a function with no exception specification.  If
! the function has local variables of types with non-trivial
  destructors, the exception specification actually makes the
! function smaller because the \s-1EH\s0 cleanups for those variables can be
  optimized away.  The semantic effect is that an exception thrown out of
  a function with such an exception specification results in a call
  to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
! .IP "\fB\-fno\-operator\-names\fR" 4
  .IX Item "-fno-operator-names"
  Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
  \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
  synonyms as keywords.
! .IP "\fB\-fno\-optional\-diags\fR" 4
  .IX Item "-fno-optional-diags"
  Disable diagnostics that the standard says a compiler does not need to
  issue.  Currently, the only such diagnostic issued by G++ is the one for
  a name having multiple meanings within a class.
! .IP "\fB\-fno\-pretty\-templates\fR" 4
  .IX Item "-fno-pretty-templates"
  When an error message refers to a specialization of a function
  template, the compiler normally prints the signature of the
  template followed by the template arguments and any typedefs or
  typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
! rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
  involved.  When an error message refers to a specialization of a class
  template, the compiler omits any template arguments that match
  the default template arguments for that template.  If either of these
  behaviors make it harder to understand the error message rather than
  easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
! .IP "\fB\-fno\-rtti\fR" 4
  .IX Item "-fno-rtti"
  Disable generation of information about every class with virtual
! functions for use by the \*(C+ run-time type identification features
! (\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don't use those parts
  of the language, you can save some space by using this flag.  Note that
  exception handling uses the same information, but G++ generates it as
  needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
! do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
  unambiguous base classes.
  .Sp
  Mixing code compiled with \fB\-frtti\fR with that compiled with
  \&\fB\-fno\-rtti\fR may not work.  For example, programs may
  fail to link if a class compiled with \fB\-fno\-rtti\fR is used as a base 
  for a class compiled with \fB\-frtti\fR.
! .IP "\fB\-fsized\-deallocation\fR" 4
  .IX Item "-fsized-deallocation"
! Enable the built-in global declarations
  .Sp
  .Vb 2
  \&        void operator delete (void *, std::size_t) noexcept;
  \&        void operator delete[] (void *, std::size_t) noexcept;
  .Ve
  .Sp
! as introduced in \*(C+14.  This is useful for user-defined replacement
  deallocation functions that, for example, use the size of the object
  to make deallocation faster.  Enabled by default under
  \&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
  warns about places that might want to add a definition.
! .IP "\fB\-fstrict\-enums\fR" 4
  .IX Item "-fstrict-enums"
  Allow the compiler to optimize using the assumption that a value of
  enumerated type can only be one of the values of the enumeration (as
! defined in the \*(C+ standard; basically, a value that can be
  represented in the minimum number of bits needed to represent all the
  enumerators).  This assumption may not be valid if the program uses a
  cast to convert an arbitrary integer value to the enumerated type.
  This option has no effect for an enumeration type with a fixed underlying
  type.
! .IP "\fB\-fstrong\-eval\-order\fR" 4
  .IX Item "-fstrong-eval-order"
  Evaluate member access, array subscripting, and shift expressions in
! left-to-right order, and evaluate assignment in right-to-left order,
! as adopted for \*(C+17.  Enabled by default with \fB\-std=c++17\fR.
  \&\fB\-fstrong\-eval\-order=some\fR enables just the ordering of member
  access and shift expressions, and is the default without
  \&\fB\-std=c++17\fR.
! .IP "\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR" 4
  .IX Item "-ftemplate-backtrace-limit=n"
  Set the maximum number of template instantiation notes for a single
  warning or error to \fIn\fR.  The default value is 10.
! .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
  .IX Item "-ftemplate-depth=n"
  Set the maximum instantiation depth for template classes to \fIn\fR.
  A limit on the template instantiation depth is needed to detect
! endless recursions during template class instantiation.  \s-1ANSI/ISO \*(C+\s0
  conforming programs must not rely on a maximum depth greater than 17
! (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
  can run out of stack space before hitting 1024 in some situations.
! .IP "\fB\-fno\-threadsafe\-statics\fR" 4
  .IX Item "-fno-threadsafe-statics"
! Do not emit the extra code to use the routines specified in the \*(C+
! \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
! option to reduce code size slightly in code that doesn't need to be
! thread-safe.
! .IP "\fB\-fuse\-cxa\-atexit\fR" 4
  .IX Item "-fuse-cxa-atexit"
  Register destructors for objects with static storage duration with the
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
! This option is required for fully standards-compliant handling of static
  destructors, but only works if your C library supports
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
! .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
  .IX Item "-fno-use-cxa-get-exception-ptr"
! Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
  causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
  if the runtime routine is not available.
! .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
  .IX Item "-fvisibility-inlines-hidden"
  This switch declares that the user does not attempt to compare
  pointers to inline functions or methods where the addresses of the two functions
  are taken in different shared objects.
  .Sp
! The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
  \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
! appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
! when used within the \s-1DSO.\s0  Enabling this option can have a dramatic effect
! on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
  dynamic export table when the library makes heavy use of templates.
  .Sp
  The behavior of this switch is not quite the same as marking the
--- 3374,3608 ----
  \&        }
  .Ve
  .Sp
! compiles in C++20: \f(CW\*(C`f\*(C'\fR is an immediate\-escalating function (due to
  the \f(CW\*(C`auto\*(C'\fR it is a function template and is declared \f(CW\*(C`constexpr\*(C'\fR)
! and \f(CWid(t)\fR is an immediate\-escalating expression, so \f(CW\*(C`f\*(C'\fR is
  promoted to \f(CW\*(C`consteval\*(C'\fR.  Consequently, the call to \f(CWid(t)\fR
! is in an immediate context, so doesn\*(Aqt have to produce a constant (that
  is the mechanism allowing consteval function composition).  However,
  with \fB\-fno\-immediate\-escalation\fR, \f(CW\*(C`f\*(C'\fR is not promoted to
  \&\f(CW\*(C`consteval\*(C'\fR, and since the call to consteval function \f(CWid(t)\fR
  is not a constant expression, the compiler rejects the code.
  .Sp
! This option is turned on by default; it is only effective in C++20 mode
  or later.
! .IP \fB\-fimplicit\-constexpr\fR 4
  .IX Item "-fimplicit-constexpr"
  Make inline functions implicitly constexpr, if they satisfy the
  requirements for a constexpr function.  This option can be used in
! C++14 mode or later.  This can result in initialization changing from
  dynamic to static and other optimizations.
! .IP \fB\-fno\-implicit\-templates\fR 4
  .IX Item "-fno-implicit-templates"
! Never emit code for non\-inline templates that are instantiated
  implicitly (i.e. by use); only emit code for explicit instantiations.
  If you use this option, you must take care to structure your code to
  include all the necessary explicit instantiations to avoid getting
  undefined symbols at link time.
! .IP \fB\-fno\-implicit\-inline\-templates\fR 4
  .IX Item "-fno-implicit-inline-templates"
! Don\*(Aqt emit code for implicit instantiations of inline templates, either.
  The default is to handle inlines differently so that compiles with and
  without optimization need the same set of explicit instantiations.
! .IP \fB\-fno\-implement\-inlines\fR 4
  .IX Item "-fno-implement-inlines"
! To save space, do not emit out\-of\-line copies of inline functions
  controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
  errors if these functions are not inlined everywhere they are called.
! .IP \fB\-fmodules\-ts\fR 4
  .IX Item "-fmodules-ts"
  .PD 0
! .IP \fB\-fno\-modules\-ts\fR 4
  .IX Item "-fno-modules-ts"
  .PD
! Enable support for C++20 modules.  The
  \&\fB\-fno\-modules\-ts\fR is usually not needed, as that is the
! default.  Even though this is a C++20 feature, it is not currently
  implicitly enabled by selecting that standard version.
! .IP \fB\-fmodule\-header\fR 4
  .IX Item "-fmodule-header"
  .PD 0
! .IP \fB\-fmodule\-header=user\fR 4
  .IX Item "-fmodule-header=user"
! .IP \fB\-fmodule\-header=system\fR 4
  .IX Item "-fmodule-header=system"
  .PD
  Compile a header file to create an importable header unit.
! .IP \fB\-fmodule\-implicit\-inline\fR 4
  .IX Item "-fmodule-implicit-inline"
  Member functions defined in their class definitions are not implicitly
! inline for modular code.  This is different to traditional C++
  behavior, for good reasons.  However, it may result in a difficulty
  during code porting.  This option makes such function definitions
! implicitly inline.  It does however generate an ABI incompatibility,
  so you must use it everywhere or nowhere.  (Such definitions outside
  of a named module remain implicitly inline, regardless.)
! .IP \fB\-fno\-module\-lazy\fR 4
  .IX Item "-fno-module-lazy"
  Disable lazy module importing and module mapper creation.
! .IP \fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=[hostname]:port[?ident]"
  .PD 0
  .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4
  .IX Item "-fmodule-mapper=|program[?ident] args..."
! .IP \fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper==socket[?ident]"
! .IP \fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=<>[inout][?ident]"
! .IP \fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=<in>out[?ident]"
! .IP \fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR] 4
  .IX Item "-fmodule-mapper=file[?ident]"
  .PD
  An oracle to query for module name to filename mappings.  If
! unspecified the \fBCXX_MODULE_MAPPER\fR environment variable is used,
! and if that is unset, an in\-process default is provided.
! .IP \fB\-fmodule\-only\fR 4
  .IX Item "-fmodule-only"
  Only emit the Compiled Module Interface, inhibiting any object file.
! .IP \fB\-fms\-extensions\fR 4
  .IX Item "-fms-extensions"
! Disable Wpedantic warnings about constructs used in MFC, such as implicit
! int and getting a pointer to member function via non\-standard syntax.
! .IP \fB\-fnew\-inheriting\-ctors\fR 4
  .IX Item "-fnew-inheriting-ctors"
! Enable the P0136 adjustment to the semantics of C++11 constructor
! inheritance.  This is part of C++17 but also considered to be a Defect
! Report against C++11 and C++14.  This flag is enabled by default
  unless \fB\-fabi\-version=10\fR or lower is specified.
! .IP \fB\-fnew\-ttp\-matching\fR 4
  .IX Item "-fnew-ttp-matching"
  Enable the P0522 resolution to Core issue 150, template template
  parameters and default arguments: this allows a template with default
  template arguments as an argument for a template template parameter
  with fewer template parameters.  This flag is enabled by default for
  \&\fB\-std=c++17\fR.
! .IP \fB\-fno\-nonansi\-builtins\fR 4
  .IX Item "-fno-nonansi-builtins"
! Disable built\-in declarations of functions that are not mandated by
! ANSI/ISO C.  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
  \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
! .IP \fB\-fnothrow\-opt\fR 4
  .IX Item "-fnothrow-opt"
! Treat a \f(CWthrow()\fR exception specification as if it were a
  \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
  overhead relative to a function with no exception specification.  If
! the function has local variables of types with non\-trivial
  destructors, the exception specification actually makes the
! function smaller because the EH cleanups for those variables can be
  optimized away.  The semantic effect is that an exception thrown out of
  a function with such an exception specification results in a call
  to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
! .IP \fB\-fno\-operator\-names\fR 4
  .IX Item "-fno-operator-names"
  Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
  \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
  synonyms as keywords.
! .IP \fB\-fno\-optional\-diags\fR 4
  .IX Item "-fno-optional-diags"
  Disable diagnostics that the standard says a compiler does not need to
  issue.  Currently, the only such diagnostic issued by G++ is the one for
  a name having multiple meanings within a class.
! .IP \fB\-fno\-pretty\-templates\fR 4
  .IX Item "-fno-pretty-templates"
  When an error message refers to a specialization of a function
  template, the compiler normally prints the signature of the
  template followed by the template arguments and any typedefs or
  typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
! rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it\*(Aqs clear which template is
  involved.  When an error message refers to a specialization of a class
  template, the compiler omits any template arguments that match
  the default template arguments for that template.  If either of these
  behaviors make it harder to understand the error message rather than
  easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
! .IP \fB\-fno\-rtti\fR 4
  .IX Item "-fno-rtti"
  Disable generation of information about every class with virtual
! functions for use by the C++ run\-time type identification features
! (\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don\*(Aqt use those parts
  of the language, you can save some space by using this flag.  Note that
  exception handling uses the same information, but G++ generates it as
  needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
! do not require run\-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
  unambiguous base classes.
  .Sp
  Mixing code compiled with \fB\-frtti\fR with that compiled with
  \&\fB\-fno\-rtti\fR may not work.  For example, programs may
  fail to link if a class compiled with \fB\-fno\-rtti\fR is used as a base 
  for a class compiled with \fB\-frtti\fR.
! .IP \fB\-fsized\-deallocation\fR 4
  .IX Item "-fsized-deallocation"
! Enable the built\-in global declarations
  .Sp
  .Vb 2
  \&        void operator delete (void *, std::size_t) noexcept;
  \&        void operator delete[] (void *, std::size_t) noexcept;
  .Ve
  .Sp
! as introduced in C++14.  This is useful for user\-defined replacement
  deallocation functions that, for example, use the size of the object
  to make deallocation faster.  Enabled by default under
  \&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
  warns about places that might want to add a definition.
! .IP \fB\-fstrict\-enums\fR 4
  .IX Item "-fstrict-enums"
  Allow the compiler to optimize using the assumption that a value of
  enumerated type can only be one of the values of the enumeration (as
! defined in the C++ standard; basically, a value that can be
  represented in the minimum number of bits needed to represent all the
  enumerators).  This assumption may not be valid if the program uses a
  cast to convert an arbitrary integer value to the enumerated type.
  This option has no effect for an enumeration type with a fixed underlying
  type.
! .IP \fB\-fstrong\-eval\-order\fR 4
  .IX Item "-fstrong-eval-order"
  Evaluate member access, array subscripting, and shift expressions in
! left\-to\-right order, and evaluate assignment in right\-to\-left order,
! as adopted for C++17.  Enabled by default with \fB\-std=c++17\fR.
  \&\fB\-fstrong\-eval\-order=some\fR enables just the ordering of member
  access and shift expressions, and is the default without
  \&\fB\-std=c++17\fR.
! .IP \fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR 4
  .IX Item "-ftemplate-backtrace-limit=n"
  Set the maximum number of template instantiation notes for a single
  warning or error to \fIn\fR.  The default value is 10.
! .IP \fB\-ftemplate\-depth=\fR\fIn\fR 4
  .IX Item "-ftemplate-depth=n"
  Set the maximum instantiation depth for template classes to \fIn\fR.
  A limit on the template instantiation depth is needed to detect
! endless recursions during template class instantiation.  ANSI/ISO C++
  conforming programs must not rely on a maximum depth greater than 17
! (changed to 1024 in C++11).  The default value is 900, as the compiler
  can run out of stack space before hitting 1024 in some situations.
! .IP \fB\-fno\-threadsafe\-statics\fR 4
  .IX Item "-fno-threadsafe-statics"
! Do not emit the extra code to use the routines specified in the C++
! ABI for thread\-safe initialization of local statics.  You can use this
! option to reduce code size slightly in code that doesn\*(Aqt need to be
! thread\-safe.
! .IP \fB\-fuse\-cxa\-atexit\fR 4
  .IX Item "-fuse-cxa-atexit"
  Register destructors for objects with static storage duration with the
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
! This option is required for fully standards\-compliant handling of static
  destructors, but only works if your C library supports
  \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
! .IP \fB\-fno\-use\-cxa\-get\-exception\-ptr\fR 4
  .IX Item "-fno-use-cxa-get-exception-ptr"
! Don\*(Aqt use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
  causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
  if the runtime routine is not available.
! .IP \fB\-fvisibility\-inlines\-hidden\fR 4
  .IX Item "-fvisibility-inlines-hidden"
  This switch declares that the user does not attempt to compare
  pointers to inline functions or methods where the addresses of the two functions
  are taken in different shared objects.
  .Sp
! The effect of this is that GCC may, effectively, mark inline methods with
  \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
! appear in the export table of a DSO and do not require a PLT indirection
! when used within the DSO.  Enabling this option can have a dramatic effect
! on load and link times of a DSO as it massively reduces the size of the
  dynamic export table when the library makes heavy use of templates.
  .Sp
  The behavior of this switch is not quite the same as marking the
*************** visibility has no effect.
*** 3685,3705 ****
  .Sp
  Explicitly instantiated inline methods are unaffected by this option
  as their linkage might otherwise cross a shared library boundary.
! .IP "\fB\-fvisibility\-ms\-compat\fR" 4
  .IX Item "-fvisibility-ms-compat"
! This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
  linkage model compatible with that of Microsoft Visual Studio.
  .Sp
! The flag makes these changes to \s-1GCC\s0's linkage model:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
  \&\fB\-fvisibility=hidden\fR.
! .IP "2." 4
  .IX Item "2."
  Types, but not their members, are not hidden by default.
! .IP "3." 4
  .IX Item "3."
  The One Definition Rule is relaxed for types without explicit
  visibility specifications that are defined in more than one
--- 3618,3638 ----
  .Sp
  Explicitly instantiated inline methods are unaffected by this option
  as their linkage might otherwise cross a shared library boundary.
! .IP \fB\-fvisibility\-ms\-compat\fR 4
  .IX Item "-fvisibility-ms-compat"
! This flag attempts to use visibility settings to make GCC\*(Aqs C++
  linkage model compatible with that of Microsoft Visual Studio.
  .Sp
! The flag makes these changes to GCC\*(Aqs linkage model:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
  \&\fB\-fvisibility=hidden\fR.
! .IP 2. 4
  .IX Item "2."
  Types, but not their members, are not hidden by default.
! .IP 3. 4
  .IX Item "3."
  The One Definition Rule is relaxed for types without explicit
  visibility specifications that are defined in more than one
*************** of the same type with the same name but
*** 3718,3754 ****
  objects are different, so changing one does not change the other;
  and that pointers to function members defined in different shared
  objects may not compare equal.  When this flag is given, it is a
! violation of the \s-1ODR\s0 to define types with the same name differently.
  .RE
! .IP "\fB\-fno\-weak\fR" 4
  .IX Item "-fno-weak"
  Do not use weak symbol support, even if it is provided by the linker.
  By default, G++ uses weak symbols if they are available.  This
! option exists only for testing, and should not be used by end-users;
  it results in inferior code and has no benefits.  This option may
  be removed in a future release of G++.
! .IP "\fB\-fext\-numeric\-literals\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-fext-numeric-literals ( and Objective- only)"
! Accept imaginary, fixed-point, or machine-defined
! literal number suffixes as \s-1GNU\s0 extensions.
  When this option is turned off these suffixes are treated
! as \*(C+11 user-defined literal numeric suffixes.
! This is on by default for all pre\-\*(C+11 dialects and all \s-1GNU\s0 dialects:
  \&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
  \&\fB\-std=gnu++14\fR.
  This option is off by default
! for \s-1ISO \*(C+11\s0 onwards (\fB\-std=c++11\fR, ...).
! .IP "\fB\-nostdinc++\fR" 4
  .IX Item "-nostdinc++"
  Do not search for header files in the standard directories specific to
! \&\*(C+, but do still search the other standard directories.  (This option
! is used when building the \*(C+ library.)
! .IP "\fB\-flang\-info\-include\-translate\fR" 4
  .IX Item "-flang-info-include-translate"
  .PD 0
! .IP "\fB\-flang\-info\-include\-translate\-not\fR" 4
  .IX Item "-flang-info-include-translate-not"
! .IP "\fB\-flang\-info\-include\-translate=\fR\fIheader\fR" 4
  .IX Item "-flang-info-include-translate=header"
  .PD
  Inform of include translation events.  The first will note accepted
--- 3651,3687 ----
  objects are different, so changing one does not change the other;
  and that pointers to function members defined in different shared
  objects may not compare equal.  When this flag is given, it is a
! violation of the ODR to define types with the same name differently.
  .RE
! .IP \fB\-fno\-weak\fR 4
  .IX Item "-fno-weak"
  Do not use weak symbol support, even if it is provided by the linker.
  By default, G++ uses weak symbols if they are available.  This
! option exists only for testing, and should not be used by end\-users;
  it results in inferior code and has no benefits.  This option may
  be removed in a future release of G++.
! .IP "\fB\-fext\-numeric\-literals\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-fext-numeric-literals (C++ and Objective-C++ only)"
! Accept imaginary, fixed\-point, or machine\-defined
! literal number suffixes as GNU extensions.
  When this option is turned off these suffixes are treated
! as C++11 user\-defined literal numeric suffixes.
! This is on by default for all pre\-C++11 dialects and all GNU dialects:
  \&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
  \&\fB\-std=gnu++14\fR.
  This option is off by default
! for ISO C++11 onwards (\fB\-std=c++11\fR, ...).
! .IP \fB\-nostdinc++\fR 4
  .IX Item "-nostdinc++"
  Do not search for header files in the standard directories specific to
! C++, but do still search the other standard directories.  (This option
! is used when building the C++ library.)
! .IP \fB\-flang\-info\-include\-translate\fR 4
  .IX Item "-flang-info-include-translate"
  .PD 0
! .IP \fB\-flang\-info\-include\-translate\-not\fR 4
  .IX Item "-flang-info-include-translate-not"
! .IP \fB\-flang\-info\-include\-translate=\fR\fIheader\fR 4
  .IX Item "-flang-info-include-translate=header"
  .PD
  Inform of include translation events.  The first will note accepted
*************** translations.  The \fIheader\fR form wil
*** 3757,3793 ****
  translations relating to that specific header.  If \fIheader\fR is of
  the form \f(CW"user"\fR or \f(CW\*(C`<system>\*(C'\fR it will be resolved to a
  specific user or system header using the include path.
! .IP "\fB\-flang\-info\-module\-cmi\fR" 4
  .IX Item "-flang-info-module-cmi"
  .PD 0
! .IP "\fB\-flang\-info\-module\-cmi=\fR\fImodule\fR" 4
  .IX Item "-flang-info-module-cmi=module"
  .PD
  Inform of Compiled Module Interface pathnames.  The first will note
! all read \s-1CMI\s0 pathnames.  The \fImodule\fR form will not reading a
! specific module's \s-1CMI.\s0  \fImodule\fR may be a named module or a
! header-unit (the latter indicated by either being a pathname containing
  directory separators or enclosed in \f(CW\*(C`<>\*(C'\fR or \f(CW""\fR).
! .IP "\fB\-stdlib=\fR\fIlibstdc++,libc++\fR" 4
  .IX Item "-stdlib=libstdc++,libc++"
  When G++ is configured to support this option, it allows specification of
! alternate \*(C+ runtime libraries.  Two options are available: \fIlibstdc++\fR
! (the default, native \*(C+ runtime for G++) and \fIlibc++\fR which is the
! \&\*(C+ runtime installed on some operating systems (e.g. Darwin versions from
  Darwin11 onwards).  The option switches G++ to use the headers from the
  specified library and to emit \f(CW\*(C`\-lstdc++\*(C'\fR or \f(CW\*(C`\-lc++\*(C'\fR respectively,
! when a \*(C+ runtime is required for linking.
  .PP
! In addition, these warning options have meanings only for \*(C+ programs:
! .IP "\fB\-Wabi\-tag\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wabi-tag ( and Objective- only)"
! Warn when a type with an \s-1ABI\s0 tag is used in a context that does not
! have that \s-1ABI\s0 tag.  See \fB\*(C+ Attributes\fR for more information
! about \s-1ABI\s0 tags.
! .IP "\fB\-Wcomma\-subscript\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wcomma-subscript ( and Objective- only)"
  Warn about uses of a comma expression within a subscripting expression.
! This usage was deprecated in \*(C+20 and is going to be removed in \*(C+23.
  However, a comma expression wrapped in \f(CW\*(C`( )\*(C'\fR is not deprecated.  Example:
  .Sp
  .Vb 4
--- 3690,3726 ----
  translations relating to that specific header.  If \fIheader\fR is of
  the form \f(CW"user"\fR or \f(CW\*(C`<system>\*(C'\fR it will be resolved to a
  specific user or system header using the include path.
! .IP \fB\-flang\-info\-module\-cmi\fR 4
  .IX Item "-flang-info-module-cmi"
  .PD 0
! .IP \fB\-flang\-info\-module\-cmi=\fR\fImodule\fR 4
  .IX Item "-flang-info-module-cmi=module"
  .PD
  Inform of Compiled Module Interface pathnames.  The first will note
! all read CMI pathnames.  The \fImodule\fR form will not reading a
! specific module\*(Aqs CMI.  \fImodule\fR may be a named module or a
! header\-unit (the latter indicated by either being a pathname containing
  directory separators or enclosed in \f(CW\*(C`<>\*(C'\fR or \f(CW""\fR).
! .IP \fB\-stdlib=\fR\fIlibstdc++,libc++\fR 4
  .IX Item "-stdlib=libstdc++,libc++"
  When G++ is configured to support this option, it allows specification of
! alternate C++ runtime libraries.  Two options are available: \fIlibstdc++\fR
! (the default, native C++ runtime for G++) and \fIlibc++\fR which is the
! C++ runtime installed on some operating systems (e.g. Darwin versions from
  Darwin11 onwards).  The option switches G++ to use the headers from the
  specified library and to emit \f(CW\*(C`\-lstdc++\*(C'\fR or \f(CW\*(C`\-lc++\*(C'\fR respectively,
! when a C++ runtime is required for linking.
  .PP
! In addition, these warning options have meanings only for C++ programs:
! .IP "\fB\-Wabi\-tag\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wabi-tag (C++ and Objective-C++ only)"
! Warn when a type with an ABI tag is used in a context that does not
! have that ABI tag.  See \fBC++ Attributes\fR for more information
! about ABI tags.
! .IP "\fB\-Wcomma\-subscript\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wcomma-subscript (C++ and Objective-C++ only)"
  Warn about uses of a comma expression within a subscripting expression.
! This usage was deprecated in C++20 and is going to be removed in C++23.
  However, a comma expression wrapped in \f(CW\*(C`( )\*(C'\fR is not deprecated.  Example:
  .Sp
  .Vb 4
*************** However, a comma expression wrapped in \
*** 3797,3822 ****
  \&        }
  .Ve
  .Sp
! In \*(C+23 it is valid to have comma separated expressions in a subscript
  when an overloaded subscript operator is found and supports the right
  number and types of arguments.  G++ will accept the formerly valid syntax
! for code that is not valid in \*(C+23 but used to be valid but deprecated
! in \*(C+20 with a pedantic warning that can be disabled with
  \&\fB\-Wno\-comma\-subscript\fR.
  .Sp
  Enabled by default with \fB\-std=c++20\fR unless \fB\-Wno\-deprecated\fR,
  and with \fB\-std=c++23\fR regardless of \fB\-Wno\-deprecated\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! \&\*(C+23 mode or later.
! .IP "\fB\-Wctad\-maybe\-unsupported\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wctad-maybe-unsupported ( and Objective- only)"
! Warn when performing class template argument deduction (\s-1CTAD\s0) on a type with
  no explicitly written deduction guides.  This warning will point out cases
! where \s-1CTAD\s0 succeeded only because the compiler synthesized the implicit
  deduction guides, which might not be what the programmer intended.  Certain
! style guides allow \s-1CTAD\s0 only on types that specifically \*(L"opt-in\*(R"; i.e., on
! types that are designed to support \s-1CTAD.\s0  This warning can be suppressed with
  the following pattern:
  .Sp
  .Vb 6
--- 3730,3755 ----
  \&        }
  .Ve
  .Sp
! In C++23 it is valid to have comma separated expressions in a subscript
  when an overloaded subscript operator is found and supports the right
  number and types of arguments.  G++ will accept the formerly valid syntax
! for code that is not valid in C++23 but used to be valid but deprecated
! in C++20 with a pedantic warning that can be disabled with
  \&\fB\-Wno\-comma\-subscript\fR.
  .Sp
  Enabled by default with \fB\-std=c++20\fR unless \fB\-Wno\-deprecated\fR,
  and with \fB\-std=c++23\fR regardless of \fB\-Wno\-deprecated\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! C++23 mode or later.
! .IP "\fB\-Wctad\-maybe\-unsupported\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wctad-maybe-unsupported (C++ and Objective-C++ only)"
! Warn when performing class template argument deduction (CTAD) on a type with
  no explicitly written deduction guides.  This warning will point out cases
! where CTAD succeeded only because the compiler synthesized the implicit
  deduction guides, which might not be what the programmer intended.  Certain
! style guides allow CTAD only on types that specifically "opt\-in"; i.e., on
! types that are designed to support CTAD.  This warning can be suppressed with
  the following pattern:
  .Sp
  .Vb 6
*************** the following pattern:
*** 3827,3841 ****
  \&        // Guide with incomplete parameter type will never be considered.
  \&        S(allow_ctad_t) \-> S<void>;
  .Ve
! .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
  Warn when a class seems unusable because all the constructors or
  destructors in that class are private, and it has neither friends nor
! public static member functions.  Also warn if there are no non-private
! methods, and there's at least one private member function that isn't
  a constructor or destructor.
! .IP "\fB\-Wdangling\-reference\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wdangling-reference ( and Objective- only)"
  Warn when a reference is bound to a temporary whose lifetime has ended.
  For example:
  .Sp
--- 3760,3774 ----
  \&        // Guide with incomplete parameter type will never be considered.
  \&        S(allow_ctad_t) \-> S<void>;
  .Ve
! .IP "\fB\-Wctor\-dtor\-privacy\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wctor-dtor-privacy (C++ and Objective-C++ only)"
  Warn when a class seems unusable because all the constructors or
  destructors in that class are private, and it has neither friends nor
! public static member functions.  Also warn if there are no non\-private
! methods, and there\*(Aqs at least one private member function that isn\*(Aqt
  a constructor or destructor.
! .IP "\fB\-Wdangling\-reference\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wdangling-reference (C++ and Objective-C++ only)"
  Warn when a reference is bound to a temporary whose lifetime has ended.
  For example:
  .Sp
*************** Member functions are checked as well, bu
*** 3868,3874 ****
  .Ve
  .Sp
  Certain functions are safe in this respect, for example \f(CW\*(C`std::use_facet\*(C'\fR:
! they take and return a reference, but they don't return one of its arguments,
  which can fool the warning.  Such functions can be excluded from the warning
  by wrapping them in a \f(CW\*(C`#pragma\*(C'\fR:
  .Sp
--- 3801,3807 ----
  .Ve
  .Sp
  Certain functions are safe in this respect, for example \f(CW\*(C`std::use_facet\*(C'\fR:
! they take and return a reference, but they don\*(Aqt return one of its arguments,
  which can fool the warning.  Such functions can be excluded from the warning
  by wrapping them in a \f(CW\*(C`#pragma\*(C'\fR:
  .Sp
*************** classes of the form:
*** 3903,3934 ****
  \&        };
  .Ve
  .Sp
! as \f(CW\*(C`std::span\*(C'\fR\-like; that is, the class is a non-union class
  that has a pointer data member and a trivial destructor.
  .Sp
  The warning can be disabled by using the \f(CW\*(C`gnu::no_dangling\*(C'\fR attribute.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
  Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
! has virtual functions and non-virtual destructor. It is unsafe to delete
  an instance of a derived class through a pointer to a base class if the
  base class does not have a virtual destructor.  This warning is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Wdeprecated\-copy\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wdeprecated-copy ( and Objective- only)"
  Warn that the implicit declaration of a copy constructor or copy
! assignment operator is deprecated if the class has a user-provided
! copy constructor or copy assignment operator, in \*(C+11 and up.  This
  warning is enabled by \fB\-Wextra\fR.  With
  \&\fB\-Wdeprecated\-copy\-dtor\fR, also deprecate if the class has a
! user-provided destructor.
! .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-deprecated-enum-enum-conversion ( and Objective- only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a different enumeration type.  This conversion was deprecated in \*(C+20.
  For example:
  .Sp
  .Vb 3
--- 3836,3867 ----
  \&        };
  .Ve
  .Sp
! as \f(CW\*(C`std::span\*(C'\fR\-like; that is, the class is a non\-union class
  that has a pointer data member and a trivial destructor.
  .Sp
  The warning can be disabled by using the \f(CW\*(C`gnu::no_dangling\*(C'\fR attribute.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)"
  Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
! has virtual functions and non\-virtual destructor. It is unsafe to delete
  an instance of a derived class through a pointer to a base class if the
  base class does not have a virtual destructor.  This warning is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Wdeprecated\-copy\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)"
  Warn that the implicit declaration of a copy constructor or copy
! assignment operator is deprecated if the class has a user\-provided
! copy constructor or copy assignment operator, in C++11 and up.  This
  warning is enabled by \fB\-Wextra\fR.  With
  \&\fB\-Wdeprecated\-copy\-dtor\fR, also deprecate if the class has a
! user\-provided destructor.
! .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a different enumeration type.  This conversion was deprecated in C++20.
  For example:
  .Sp
  .Vb 3
*************** For example:
*** 3938,3950 ****
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-\*(C+20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-deprecated-enum-float-conversion ( and Objective- only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a floating-point type.  This conversion was deprecated in \*(C+20.  For
  example:
  .Sp
  .Vb 3
--- 3871,3883 ----
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-C++20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)"
  Disable the warning about the case when the usual arithmetic conversions
  are applied on operands where one is of enumeration type and the other is
! of a floating\-point type.  This conversion was deprecated in C++20.  For
  example:
  .Sp
  .Vb 3
*************** example:
*** 3954,3989 ****
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-float\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-\*(C+20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP "\fB\-Wno\-elaborated\-enum\-base\fR" 4
  .IX Item "-Wno-elaborated-enum-base"
! For \*(C+11 and above, warn if an (invalid) additional enum-base is used
! in an elaborated-type-specifier.  That is, if an enum with given
  underlying type and no enumerator list is used in a declaration other
  than just a standalone declaration of the enum.  Enabled by default.  This
  warning is upgraded to an error with \-pedantic\-errors.
! .IP "\fB\-Wno\-init\-list\-lifetime\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-init-list-lifetime ( and Objective- only)"
  Do not warn about uses of \f(CW\*(C`std::initializer_list\*(C'\fR that are likely
  to result in dangling pointers.  Since the underlying array for an
! \&\f(CW\*(C`initializer_list\*(C'\fR is handled like a normal \*(C+ temporary object,
  it is easy to inadvertently keep a pointer to the array past the end
! of the array's lifetime.  For example:
  .RS 4
! .IP "*" 4
  If a function returns a temporary \f(CW\*(C`initializer_list\*(C'\fR, or a local
! \&\f(CW\*(C`initializer_list\*(C'\fR variable, the array's lifetime ends at the end
  of the return statement, so the value returned has a dangling pointer.
! .IP "*" 4
! If a new-expression creates an \f(CW\*(C`initializer_list\*(C'\fR, the array only
! lives until the end of the enclosing full-expression, so the
  \&\f(CW\*(C`initializer_list\*(C'\fR in the heap has a dangling pointer.
! .IP "*" 4
  When an \f(CW\*(C`initializer_list\*(C'\fR variable is assigned from a
! brace-enclosed initializer list, the temporary array created for the
  right side of the assignment only lives until the end of the
! full-expression, so at the next statement the \f(CW\*(C`initializer_list\*(C'\fR
  variable has a dangling pointer.
  .Sp
  .Vb 6
--- 3887,3922 ----
  .Ve
  .Sp
  \&\fB\-Wdeprecated\-enum\-float\-conversion\fR is enabled by default with
! \&\fB\-std=c++20\fR.  In pre\-C++20 dialects, this warning can be enabled
  by \fB\-Wenum\-conversion\fR.
! .IP \fB\-Wno\-elaborated\-enum\-base\fR 4
  .IX Item "-Wno-elaborated-enum-base"
! For C++11 and above, warn if an (invalid) additional enum\-base is used
! in an elaborated\-type\-specifier.  That is, if an enum with given
  underlying type and no enumerator list is used in a declaration other
  than just a standalone declaration of the enum.  Enabled by default.  This
  warning is upgraded to an error with \-pedantic\-errors.
! .IP "\fB\-Wno\-init\-list\-lifetime\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-init-list-lifetime (C++ and Objective-C++ only)"
  Do not warn about uses of \f(CW\*(C`std::initializer_list\*(C'\fR that are likely
  to result in dangling pointers.  Since the underlying array for an
! \&\f(CW\*(C`initializer_list\*(C'\fR is handled like a normal C++ temporary object,
  it is easy to inadvertently keep a pointer to the array past the end
! of the array\*(Aqs lifetime.  For example:
  .RS 4
! .IP * 4
  If a function returns a temporary \f(CW\*(C`initializer_list\*(C'\fR, or a local
! \&\f(CW\*(C`initializer_list\*(C'\fR variable, the array\*(Aqs lifetime ends at the end
  of the return statement, so the value returned has a dangling pointer.
! .IP * 4
! If a new\-expression creates an \f(CW\*(C`initializer_list\*(C'\fR, the array only
! lives until the end of the enclosing full\-expression, so the
  \&\f(CW\*(C`initializer_list\*(C'\fR in the heap has a dangling pointer.
! .IP * 4
  When an \f(CW\*(C`initializer_list\*(C'\fR variable is assigned from a
! brace\-enclosed initializer list, the temporary array created for the
  right side of the assignment only lives until the end of the
! full\-expression, so at the next statement the \f(CW\*(C`initializer_list\*(C'\fR
  variable has a dangling pointer.
  .Sp
  .Vb 6
*************** variable has a dangling pointer.
*** 3994,4021 ****
  \&        // now the temporary is gone and li has a dangling pointer
  \&        int i = li.begin()[0] // undefined behavior
  .Ve
! .IP "*" 4
  When a list constructor stores the \f(CW\*(C`begin\*(C'\fR pointer from the
! \&\f(CW\*(C`initializer_list\*(C'\fR argument, this doesn't extend the lifetime of
  the array, so if a class variable is constructed from a temporary
  \&\f(CW\*(C`initializer_list\*(C'\fR, the pointer is left dangling by the end of
  the variable declaration statement.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Winvalid\-constexpr\fR" 4
  .IX Item "-Winvalid-constexpr"
! Warn when a function never produces a constant expression.  In \*(C+20
  and earlier, for every \f(CW\*(C`constexpr\*(C'\fR function and function template,
  there must be at least one set of function arguments in at least one
  instantiation such that an invocation of the function or constructor
  could be an evaluated subexpression of a core constant expression.
! \&\*(C+23 removed this restriction, so it's possible to have a function
  or a function template marked \f(CW\*(C`constexpr\*(C'\fR for which no invocation
  satisfies the requirements of a core constant expression.
  .Sp
! This warning is enabled as a pedantic warning by default in \*(C+20 and
! earlier.  In \*(C+23, \fB\-Winvalid\-constexpr\fR can be turned on, in
  which case it will be an ordinary warning.  For example:
  .Sp
  .Vb 7
--- 3927,3954 ----
  \&        // now the temporary is gone and li has a dangling pointer
  \&        int i = li.begin()[0] // undefined behavior
  .Ve
! .IP * 4
  When a list constructor stores the \f(CW\*(C`begin\*(C'\fR pointer from the
! \&\f(CW\*(C`initializer_list\*(C'\fR argument, this doesn\*(Aqt extend the lifetime of
  the array, so if a class variable is constructed from a temporary
  \&\f(CW\*(C`initializer_list\*(C'\fR, the pointer is left dangling by the end of
  the variable declaration statement.
  .RE
  .RS 4
  .RE
! .IP \fB\-Winvalid\-constexpr\fR 4
  .IX Item "-Winvalid-constexpr"
! Warn when a function never produces a constant expression.  In C++20
  and earlier, for every \f(CW\*(C`constexpr\*(C'\fR function and function template,
  there must be at least one set of function arguments in at least one
  instantiation such that an invocation of the function or constructor
  could be an evaluated subexpression of a core constant expression.
! C++23 removed this restriction, so it\*(Aqs possible to have a function
  or a function template marked \f(CW\*(C`constexpr\*(C'\fR for which no invocation
  satisfies the requirements of a core constant expression.
  .Sp
! This warning is enabled as a pedantic warning by default in C++20 and
! earlier.  In C++23, \fB\-Winvalid\-constexpr\fR can be turned on, in
  which case it will be an ordinary warning.  For example:
  .Sp
  .Vb 7
*************** which case it will be an ordinary warnin
*** 4027,4043 ****
  \&          f(i);
  \&        }
  .Ve
! .IP "\fB\-Winvalid\-imported\-macros\fR" 4
  .IX Item "-Winvalid-imported-macros"
  Verify all imported macro definitions are valid at the end of
  compilation.  This is not enabled by default, as it requires
  additional processing to determine.  It may be useful when preparing
! sets of header-units to ensure consistent macros.
! .IP "\fB\-Wno\-literal\-suffix\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-literal-suffix ( and Objective- only)"
  Do not warn when a string or character literal is followed by a
! ud-suffix which does not begin with an underscore.  As a conforming
! extension, \s-1GCC\s0 treats such suffixes as separate preprocessing tokens
  in order to maintain backwards compatibility with code that uses
  formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.  For example:
  .Sp
--- 3960,3976 ----
  \&          f(i);
  \&        }
  .Ve
! .IP \fB\-Winvalid\-imported\-macros\fR 4
  .IX Item "-Winvalid-imported-macros"
  Verify all imported macro definitions are valid at the end of
  compilation.  This is not enabled by default, as it requires
  additional processing to determine.  It may be useful when preparing
! sets of header\-units to ensure consistent macros.
! .IP "\fB\-Wno\-literal\-suffix\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-literal-suffix (C++ and Objective-C++ only)"
  Do not warn when a string or character literal is followed by a
! ud\-suffix which does not begin with an underscore.  As a conforming
! extension, GCC treats such suffixes as separate preprocessing tokens
  in order to maintain backwards compatibility with code that uses
  formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.  For example:
  .Sp
*************** formatting macros from \f(CW\*(C`<inttyp
*** 4054,4076 ****
  .Sp
  In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
  .Sp
! This option also controls warnings when a user-defined literal
! operator is declared with a literal suffix identifier that doesn't
! begin with an underscore. Literal suffix identifiers that don't begin
  with an underscore are reserved for future standardization.
  .Sp
  These warnings are enabled by default.
! .IP "\fB\-Wno\-narrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-narrowing ( and Objective- only)"
! For \*(C+11 and later standards, narrowing conversions are diagnosed by default,
  as required by the standard.  A narrowing conversion from a constant produces
! an error, and a narrowing conversion from a non-constant produces a warning,
  but \fB\-Wno\-narrowing\fR suppresses the diagnostic.
! Note that this does not affect the meaning of well-formed code;
! narrowing conversions are still considered ill-formed in \s-1SFINAE\s0 contexts.
  .Sp
! With \fB\-Wnarrowing\fR in \*(C+98, warn when a narrowing
! conversion prohibited by \*(C+11 occurs within
  \&\fB{ }\fR, e.g.
  .Sp
  .Vb 1
--- 3987,4009 ----
  .Sp
  In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
  .Sp
! This option also controls warnings when a user\-defined literal
! operator is declared with a literal suffix identifier that doesn\*(Aqt
! begin with an underscore. Literal suffix identifiers that don\*(Aqt begin
  with an underscore are reserved for future standardization.
  .Sp
  These warnings are enabled by default.
! .IP "\fB\-Wno\-narrowing\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-narrowing (C++ and Objective-C++ only)"
! For C++11 and later standards, narrowing conversions are diagnosed by default,
  as required by the standard.  A narrowing conversion from a constant produces
! an error, and a narrowing conversion from a non\-constant produces a warning,
  but \fB\-Wno\-narrowing\fR suppresses the diagnostic.
! Note that this does not affect the meaning of well\-formed code;
! narrowing conversions are still considered ill\-formed in SFINAE contexts.
  .Sp
! With \fB\-Wnarrowing\fR in C++98, warn when a narrowing
! conversion prohibited by C++11 occurs within
  \&\fB{ }\fR, e.g.
  .Sp
  .Vb 1
*************** conversion prohibited by \*(C+11 occurs
*** 4078,4093 ****
  .Ve
  .Sp
  This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
! .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnoexcept ( and Objective- only)"
! Warn when a noexcept-expression evaluates to false because of a call
! to a function that does not have a non-throwing exception
! specification (i.e. \f(CW\*(C`throw()\*(C'\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
  the compiler to never throw an exception.
! .IP "\fB\-Wnoexcept\-type\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnoexcept-type ( and Objective- only)"
! Warn if the \*(C+17 feature making \f(CW\*(C`noexcept\*(C'\fR part of a function
! type changes the mangled name of a symbol relative to \*(C+14.  Enabled
  by \fB\-Wabi\fR and \fB\-Wc++17\-compat\fR.
  .Sp
  As an example:
--- 4011,4026 ----
  .Ve
  .Sp
  This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
! .IP "\fB\-Wnoexcept\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnoexcept (C++ and Objective-C++ only)"
! Warn when a noexcept\-expression evaluates to false because of a call
! to a function that does not have a non\-throwing exception
! specification (i.e. \f(CWthrow()\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
  the compiler to never throw an exception.
! .IP "\fB\-Wnoexcept\-type\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnoexcept-type (C++ and Objective-C++ only)"
! Warn if the C++17 feature making \f(CW\*(C`noexcept\*(C'\fR part of a function
! type changes the mangled name of a symbol relative to C++14.  Enabled
  by \fB\-Wabi\fR and \fB\-Wc++17\-compat\fR.
  .Sp
  As an example:
*************** As an example:
*** 4098,4114 ****
  \&        void h() { f(g); }
  .Ve
  .Sp
! In \*(C+14, \f(CW\*(C`f\*(C'\fR calls \f(CW\*(C`f<void(*)()>\*(C'\fR, but in
! \&\*(C+17 it calls \f(CW\*(C`f<void(*)()noexcept>\*(C'\fR.
! .IP "\fB\-Wclass\-memaccess\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wclass-memaccess ( and Objective- only)"
  Warn when the destination of a call to a raw memory function such as
  \&\f(CW\*(C`memset\*(C'\fR or \f(CW\*(C`memcpy\*(C'\fR is an object of class type, and when writing
! into such an object might bypass the class non-trivial or deleted constructor
! or copy assignment, violate const-correctness or encapsulation, or corrupt
  virtual table pointers.  Modifying the representation of such objects may
  violate invariants maintained by member functions of the class.  For example,
! the call to \f(CW\*(C`memset\*(C'\fR below is undefined because it modifies a non-trivial
  class object and is, therefore, diagnosed.  The safe way to either initialize
  or clear the storage of objects of such types is by using the appropriate
  constructor or assignment operator, if one is available.
--- 4031,4047 ----
  \&        void h() { f(g); }
  .Ve
  .Sp
! In C++14, \f(CW\*(C`f\*(C'\fR calls \f(CW\*(C`f<void(*)()>\*(C'\fR, but in
! C++17 it calls \f(CW\*(C`f<void(*)()noexcept>\*(C'\fR.
! .IP "\fB\-Wclass\-memaccess\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wclass-memaccess (C++ and Objective-C++ only)"
  Warn when the destination of a call to a raw memory function such as
  \&\f(CW\*(C`memset\*(C'\fR or \f(CW\*(C`memcpy\*(C'\fR is an object of class type, and when writing
! into such an object might bypass the class non\-trivial or deleted constructor
! or copy assignment, violate const\-correctness or encapsulation, or corrupt
  virtual table pointers.  Modifying the representation of such objects may
  violate invariants maintained by member functions of the class.  For example,
! the call to \f(CW\*(C`memset\*(C'\fR below is undefined because it modifies a non\-trivial
  class object and is, therefore, diagnosed.  The safe way to either initialize
  or clear the storage of objects of such types is by using the appropriate
  constructor or assignment operator, if one is available.
*************** The \fB\-Wclass\-memaccess\fR option is
*** 4122,4130 ****
  Explicitly casting the pointer to the class object to \f(CW\*(C`void *\*(C'\fR or
  to a type that can be safely accessed by the raw memory function suppresses
  the warning.
! .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
! Warn when a class has virtual functions and an accessible non-virtual
  destructor itself or in an accessible polymorphic base class, in which
  case it is possible but unsafe to delete an instance of a derived
  class through a pointer to the class itself or base class.  This
--- 4055,4063 ----
  Explicitly casting the pointer to the class object to \f(CW\*(C`void *\*(C'\fR or
  to a type that can be safely accessed by the raw memory function suppresses
  the warning.
! .IP "\fB\-Wnon\-virtual\-dtor\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnon-virtual-dtor (C++ and Objective-C++ only)"
! Warn when a class has virtual functions and an accessible non\-virtual
  destructor itself or in an accessible polymorphic base class, in which
  case it is possible but unsafe to delete an instance of a derived
  class through a pointer to the class itself or base class.  This
*************** warning is automatically enabled if \fB\
*** 4132,4146 ****
  The \fB\-Wdelete\-non\-virtual\-dtor\fR option (enabled by \fB\-Wall\fR)
  should be preferred because it warns about the unsafe cases without false
  positives.
! .IP "\fB\-Wregister\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wregister ( and Objective- only)"
  Warn on uses of the \f(CW\*(C`register\*(C'\fR storage class specifier, except
! when it is part of the \s-1GNU\s0 \fBExplicit Register Variables\fR extension.
  The use of the \f(CW\*(C`register\*(C'\fR keyword as storage class specifier has
! been deprecated in \*(C+11 and removed in \*(C+17.
  Enabled by default with \fB\-std=c++17\fR.
! .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wreorder ( and Objective- only)"
  Warn when the order of member initializers given in the code does not
  match the order in which they must be executed.  For instance:
  .Sp
--- 4065,4079 ----
  The \fB\-Wdelete\-non\-virtual\-dtor\fR option (enabled by \fB\-Wall\fR)
  should be preferred because it warns about the unsafe cases without false
  positives.
! .IP "\fB\-Wregister\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wregister (C++ and Objective-C++ only)"
  Warn on uses of the \f(CW\*(C`register\*(C'\fR storage class specifier, except
! when it is part of the GNU \fBExplicit Register Variables\fR extension.
  The use of the \f(CW\*(C`register\*(C'\fR keyword as storage class specifier has
! been deprecated in C++11 and removed in C++17.
  Enabled by default with \fB\-std=c++17\fR.
! .IP "\fB\-Wreorder\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wreorder (C++ and Objective-C++ only)"
  Warn when the order of member initializers given in the code does not
  match the order in which they must be executed.  For instance:
  .Sp
*************** match the order in which they must be ex
*** 4155,4166 ****
  The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
  and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
  a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-pessimizing\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-pessimizing-move ( and Objective- only)"
  This warning warns when a call to \f(CW\*(C`std::move\*(C'\fR prevents copy
  elision.  A typical scenario when copy elision can occur is when returning in
  a function with a class return type, when the expression being returned is the
! name of a non-volatile automatic object, and is not a function parameter, and
  has the same type as the function return type.
  .Sp
  .Vb 9
--- 4088,4099 ----
  The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
  and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
  a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-pessimizing\-move\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-pessimizing-move (C++ and Objective-C++ only)"
  This warning warns when a call to \f(CW\*(C`std::move\*(C'\fR prevents copy
  elision.  A typical scenario when copy elision can occur is when returning in
  a function with a class return type, when the expression being returned is the
! name of a non\-volatile automatic object, and is not a function parameter, and
  has the same type as the function return type.
  .Sp
  .Vb 9
*************** has the same type as the function return
*** 4178,4190 ****
  But in this example, the \f(CW\*(C`std::move\*(C'\fR call prevents copy elision.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-redundant\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-redundant-move ( and Objective- only)"
  This warning warns about redundant calls to \f(CW\*(C`std::move\*(C'\fR; that is, when
  a move operation would have been performed even without the \f(CW\*(C`std::move\*(C'\fR
  call.  This happens because the compiler is forced to treat the object as if
  it were an rvalue in certain situations such as returning a local variable,
! where copy elision isn't applicable.  Consider:
  .Sp
  .Vb 8
  \&        struct T {
--- 4111,4123 ----
  But in this example, the \f(CW\*(C`std::move\*(C'\fR call prevents copy elision.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-redundant\-move\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-redundant-move (C++ and Objective-C++ only)"
  This warning warns about redundant calls to \f(CW\*(C`std::move\*(C'\fR; that is, when
  a move operation would have been performed even without the \f(CW\*(C`std::move\*(C'\fR
  call.  This happens because the compiler is forced to treat the object as if
  it were an rvalue in certain situations such as returning a local variable,
! where copy elision isn\*(Aqt applicable.  Consider:
  .Sp
  .Vb 8
  \&        struct T {
*************** Issue 1579, another example is:
*** 4215,4228 ****
  \&        }
  .Ve
  .Sp
! In this example, copy elision isn't applicable because the type of the
  expression being returned and the function return type differ, yet G++
  treats the return value as if it were designated by an rvalue.
  .Sp
  This warning is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wrange\-loop\-construct\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wrange-loop-construct ( and Objective- only)"
! This warning warns when a \*(C+ range-based for-loop is creating an unnecessary
  copy.  This can happen when the range declaration is not a reference, but
  probably should be.  For example:
  .Sp
--- 4148,4161 ----
  \&        }
  .Ve
  .Sp
! In this example, copy elision isn\*(Aqt applicable because the type of the
  expression being returned and the function return type differ, yet G++
  treats the return value as if it were designated by an rvalue.
  .Sp
  This warning is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wrange\-loop\-construct\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wrange-loop-construct (C++ and Objective-C++ only)"
! This warning warns when a C++ range\-based for\-loop is creating an unnecessary
  copy.  This can happen when the range declaration is not a reference, but
  probably should be.  For example:
  .Sp
*************** probably should be.  For example:
*** 4234,4243 ****
  \&        }
  .Ve
  .Sp
! It does not warn when the type being copied is a trivially-copyable type whose
  size is less than 64 bytes.
  .Sp
! This warning also warns when a loop variable in a range-based for-loop is
  initialized with a value of a different type resulting in a copy.  For example:
  .Sp
  .Vb 4
--- 4167,4176 ----
  \&        }
  .Ve
  .Sp
! It does not warn when the type being copied is a trivially\-copyable type whose
  size is less than 64 bytes.
  .Sp
! This warning also warns when a loop variable in a range\-based for\-loop is
  initialized with a value of a different type resulting in a copy.  For example:
  .Sp
  .Vb 4
*************** type \f(CW\*(C`double\*(C'\fR is created
*** 4252,4260 ****
  \&\f(CW\*(C`const double &\*(C'\fR is bound.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wredundant\-tags\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wredundant-tags ( and Objective- only)"
! Warn about redundant class-key and enum-key in references to class types
  and enumerated types in contexts where the key can be eliminated without
  causing an ambiguity.  For example:
  .Sp
--- 4185,4193 ----
  \&\f(CW\*(C`const double &\*(C'\fR is bound.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wredundant\-tags\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wredundant-tags (C++ and Objective-C++ only)"
! Warn about redundant class\-key and enum\-key in references to class types
  and enumerated types in contexts where the key can be eliminated without
  causing an ambiguity.  For example:
  .Sp
*************** On the other hand, in this example there
*** 4270,4349 ****
  \&        void foo ();   // "hides" struct foo
  \&        void bar (struct foo&);  // no warning, keyword struct is necessary
  .Ve
! .IP "\fB\-Wno\-subobject\-linkage\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-subobject-linkage ( and Objective- only)"
  Do not warn
  if a class type has a base or a field whose type uses the anonymous
  namespace or depends on a type with no linkage.  If a type A depends on
  a type B with no or internal linkage, defining it in multiple
! translation units would be an \s-1ODR\s0 violation because the meaning of B
  is different in each translation unit.  If A only appears in a single
  translation unit, the best way to silence the warning is to give it
  internal linkage by putting it in an anonymous namespace as well.  The
! compiler doesn't give this warning for types defined in the main .C
  file, as those are unlikely to have multiple definitions.
  \&\fB\-Wsubobject\-linkage\fR is enabled by default.
! .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Weffc++ ( and Objective- only)"
! Warn about violations of the following style guidelines from Scott Meyers'
! \&\fIEffective \*(C+\fR series of books:
  .RS 4
! .IP "*" 4
  Define a copy constructor and an assignment operator for classes
! with dynamically-allocated memory.
! .IP "*" 4
  Prefer initialization to assignment in constructors.
! .IP "*" 4
  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
! .IP "*" 4
! Don't try to return a reference when you must return an object.
! .IP "*" 4
  Distinguish between prefix and postfix forms of increment and
  decrement operators.
! .IP "*" 4
  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
  .RE
  .RS 4
  .Sp
  This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
! one of the effective \*(C+ recommendations.  However, the check is
  extended to warn about the lack of virtual destructor in accessible
! non-polymorphic bases classes too.
  .Sp
  When selecting this option, be aware that the standard library
  headers do not obey all of these guidelines; use \fBgrep \-v\fR
  to filter out those warnings.
  .RE
! .IP "\fB\-Wno\-exceptions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-exceptions ( and Objective- only)"
  Disable the warning about the case when an exception handler is shadowed by
  another handler, which can point out a wrong ordering of exception handlers.
! .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
  Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
! compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
  to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
  null pointer, it is guaranteed to be of the same size as a pointer.
  But this use is not portable across different compilers.
! .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-non-template-friend ( and Objective- only)"
! Disable warnings when non-template friend functions are declared
! within a template.  In very old versions of \s-1GCC\s0 that predate implementation
! of the \s-1ISO\s0 standard, declarations such as 
! \&\fBfriend int foo(int)\fR, where the name of the friend is an unqualified-id,
  could be interpreted as a particular specialization of a template
  function; the warning exists to diagnose compatibility problems, 
  and is enabled by default.
! .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wold-style-cast ( and Objective- only)"
! Warn if an old-style (C\-style) cast to a non-void type is used within
! a \*(C+ program.  The new-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
  \&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
  less vulnerable to unintended effects and much easier to search for.
! .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Woverloaded-virtual ( and Objective- only)"
  .PD 0
! .IP "\fB\-Woverloaded\-virtual=\fR\fIn\fR" 4
  .IX Item "-Woverloaded-virtual=n"
  .PD
  Warn when a function declaration hides virtual functions from a
--- 4203,4282 ----
  \&        void foo ();   // "hides" struct foo
  \&        void bar (struct foo&);  // no warning, keyword struct is necessary
  .Ve
! .IP "\fB\-Wno\-subobject\-linkage\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-subobject-linkage (C++ and Objective-C++ only)"
  Do not warn
  if a class type has a base or a field whose type uses the anonymous
  namespace or depends on a type with no linkage.  If a type A depends on
  a type B with no or internal linkage, defining it in multiple
! translation units would be an ODR violation because the meaning of B
  is different in each translation unit.  If A only appears in a single
  translation unit, the best way to silence the warning is to give it
  internal linkage by putting it in an anonymous namespace as well.  The
! compiler doesn\*(Aqt give this warning for types defined in the main .C
  file, as those are unlikely to have multiple definitions.
  \&\fB\-Wsubobject\-linkage\fR is enabled by default.
! .IP "\fB\-Weffc++\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Weffc++ (C++ and Objective-C++ only)"
! Warn about violations of the following style guidelines from Scott Meyers\*(Aq
! \&\fIEffective C++\fR series of books:
  .RS 4
! .IP * 4
  Define a copy constructor and an assignment operator for classes
! with dynamically\-allocated memory.
! .IP * 4
  Prefer initialization to assignment in constructors.
! .IP * 4
  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
! .IP * 4
! Don\*(Aqt try to return a reference when you must return an object.
! .IP * 4
  Distinguish between prefix and postfix forms of increment and
  decrement operators.
! .IP * 4
  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
  .RE
  .RS 4
  .Sp
  This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
! one of the effective C++ recommendations.  However, the check is
  extended to warn about the lack of virtual destructor in accessible
! non\-polymorphic bases classes too.
  .Sp
  When selecting this option, be aware that the standard library
  headers do not obey all of these guidelines; use \fBgrep \-v\fR
  to filter out those warnings.
  .RE
! .IP "\fB\-Wno\-exceptions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-exceptions (C++ and Objective-C++ only)"
  Disable the warning about the case when an exception handler is shadowed by
  another handler, which can point out a wrong ordering of exception handlers.
! .IP "\fB\-Wstrict\-null\-sentinel\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wstrict-null-sentinel (C++ and Objective-C++ only)"
  Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
! compiling only with GCC this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
  to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
  null pointer, it is guaranteed to be of the same size as a pointer.
  But this use is not portable across different compilers.
! .IP "\fB\-Wno\-non\-template\-friend\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-non-template-friend (C++ and Objective-C++ only)"
! Disable warnings when non\-template friend functions are declared
! within a template.  In very old versions of GCC that predate implementation
! of the ISO standard, declarations such as 
! \&\fBfriend int foo(int)\fR, where the name of the friend is an unqualified\-id,
  could be interpreted as a particular specialization of a template
  function; the warning exists to diagnose compatibility problems, 
  and is enabled by default.
! .IP "\fB\-Wold\-style\-cast\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wold-style-cast (C++ and Objective-C++ only)"
! Warn if an old\-style (C\-style) cast to a non\-void type is used within
! a C++ program.  The new\-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
  \&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
  less vulnerable to unintended effects and much easier to search for.
! .IP "\fB\-Woverloaded\-virtual\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Woverloaded-virtual (C++ and Objective-C++ only)"
  .PD 0
! .IP \fB\-Woverloaded\-virtual=\fR\fIn\fR 4
  .IX Item "-Woverloaded-virtual=n"
  .PD
  Warn when a function declaration hides virtual functions from a
*************** like:
*** 4370,4377 ****
  fails to compile.
  .Sp
  In cases where the different signatures are not an accident, the
! simplest solution is to add a using-declaration to the derived class
! to un-hide the base function, e.g. add \f(CW\*(C`using A::f;\*(C'\fR to \f(CW\*(C`B\*(C'\fR.
  .Sp
  The optional level suffix controls the behavior when all the
  declarations in the derived class override virtual functions in the
--- 4303,4310 ----
  fails to compile.
  .Sp
  In cases where the different signatures are not an accident, the
! simplest solution is to add a using\-declaration to the derived class
! to un\-hide the base function, e.g. add \f(CW\*(C`using A::f;\*(C'\fR to \f(CW\*(C`B\*(C'\fR.
  .Sp
  The optional level suffix controls the behavior when all the
  declarations in the derived class override virtual functions in the
*************** for some of the overloads are fine.
*** 4395,4430 ****
  At level 1, this case does not warn; at level 2, it does.
  \&\fB\-Woverloaded\-virtual\fR by itself selects level 2.  Level 1 is
  included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-pmf-conversions ( and Objective- only)"
  Disable the diagnostic for converting a bound pointer to member function
  to a plain pointer.
! .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wsign-promo ( and Objective- only)"
  Warn when overload resolution chooses a promotion from unsigned or
  enumerated type to a signed type, over a conversion to an unsigned type of
  the same size.  Previous versions of G++ tried to preserve
  unsignedness, but the standard mandates the current behavior.
! .IP "\fB\-Wtemplates\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wtemplates ( and Objective- only)"
  Warn when a primary template declaration is encountered.  Some coding
  rules disallow templates, and this may be used to enforce that rule.
! The warning is inactive inside a system header file, such as the \s-1STL,\s0 so
! one can still use the \s-1STL.\s0  One may also instantiate or specialize
  templates.
! .IP "\fB\-Wmismatched\-new\-delete\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wmismatched-new-delete ( and Objective- only)"
  Warn for mismatches between calls to \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator
  delete\*(C'\fR and the corresponding call to the allocation or deallocation function.
! This includes invocations of \*(C+ \f(CW\*(C`operator delete\*(C'\fR with pointers
  returned from either mismatched forms of \f(CW\*(C`operator new\*(C'\fR, or from other
! functions that allocate objects for which the \f(CW\*(C`operator delete\*(C'\fR isn't
  a suitable deallocator, as well as calls to other deallocation functions
  with pointers returned from \f(CW\*(C`operator new\*(C'\fR for which the deallocation
! function isn't suitable.
  .Sp
  For example, the \f(CW\*(C`delete\*(C'\fR expression in the function below is diagnosed
! because it doesn't match the array form of the \f(CW\*(C`new\*(C'\fR expression
  the pointer argument was returned from.  Similarly, the call to \f(CW\*(C`free\*(C'\fR
  is also diagnosed.
  .Sp
--- 4328,4363 ----
  At level 1, this case does not warn; at level 2, it does.
  \&\fB\-Woverloaded\-virtual\fR by itself selects level 2.  Level 1 is
  included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-pmf\-conversions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-pmf-conversions (C++ and Objective-C++ only)"
  Disable the diagnostic for converting a bound pointer to member function
  to a plain pointer.
! .IP "\fB\-Wsign\-promo\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wsign-promo (C++ and Objective-C++ only)"
  Warn when overload resolution chooses a promotion from unsigned or
  enumerated type to a signed type, over a conversion to an unsigned type of
  the same size.  Previous versions of G++ tried to preserve
  unsignedness, but the standard mandates the current behavior.
! .IP "\fB\-Wtemplates\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wtemplates (C++ and Objective-C++ only)"
  Warn when a primary template declaration is encountered.  Some coding
  rules disallow templates, and this may be used to enforce that rule.
! The warning is inactive inside a system header file, such as the STL, so
! one can still use the STL.  One may also instantiate or specialize
  templates.
! .IP "\fB\-Wmismatched\-new\-delete\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wmismatched-new-delete (C++ and Objective-C++ only)"
  Warn for mismatches between calls to \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator
  delete\*(C'\fR and the corresponding call to the allocation or deallocation function.
! This includes invocations of C++ \f(CW\*(C`operator delete\*(C'\fR with pointers
  returned from either mismatched forms of \f(CW\*(C`operator new\*(C'\fR, or from other
! functions that allocate objects for which the \f(CW\*(C`operator delete\*(C'\fR isn\*(Aqt
  a suitable deallocator, as well as calls to other deallocation functions
  with pointers returned from \f(CW\*(C`operator new\*(C'\fR for which the deallocation
! function isn\*(Aqt suitable.
  .Sp
  For example, the \f(CW\*(C`delete\*(C'\fR expression in the function below is diagnosed
! because it doesn\*(Aqt match the array form of the \f(CW\*(C`new\*(C'\fR expression
  the pointer argument was returned from.  Similarly, the call to \f(CW\*(C`free\*(C'\fR
  is also diagnosed.
  .Sp
*************** involving allocation and deallocation fu
*** 4444,4458 ****
  new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  \&\fB\-Wmismatched\-new\-delete\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wmismatched\-tags\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wmismatched-tags ( and Objective- only)"
  Warn for declarations of structs, classes, and class templates and their
! specializations with a class-key that does not match either the definition
  or the first declaration if no definition is provided.
  .Sp
  For example, the declaration of \f(CW\*(C`struct Object\*(C'\fR in the argument list
  of \f(CW\*(C`draw\*(C'\fR triggers the warning.  To avoid it, either remove the redundant
! class-key \f(CW\*(C`struct\*(C'\fR or replace it with \f(CW\*(C`class\*(C'\fR to match its definition.
  .Sp
  .Vb 5
  \&        class Object {
--- 4377,4391 ----
  new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  \&\fB\-Wmismatched\-new\-delete\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wmismatched\-tags\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wmismatched-tags (C++ and Objective-C++ only)"
  Warn for declarations of structs, classes, and class templates and their
! specializations with a class\-key that does not match either the definition
  or the first declaration if no definition is provided.
  .Sp
  For example, the declaration of \f(CW\*(C`struct Object\*(C'\fR in the argument list
  of \f(CW\*(C`draw\*(C'\fR triggers the warning.  To avoid it, either remove the redundant
! class\-key \f(CW\*(C`struct\*(C'\fR or replace it with \f(CW\*(C`class\*(C'\fR to match its definition.
  .Sp
  .Vb 5
  \&        class Object {
*************** class-key \f(CW\*(C`struct\*(C'\fR or re
*** 4462,4506 ****
  \&        void draw (struct Object*);
  .Ve
  .Sp
! It is not wrong to declare a class with the class-key \f(CW\*(C`struct\*(C'\fR as
  the example above shows.  The \fB\-Wmismatched\-tags\fR option is intended
  to help achieve a consistent style of class declarations.  In code that is
! intended to be portable to Windows-based compilers the warning helps prevent
  unresolved references due to the difference in the mangling of symbols
! declared with different class-keys.  The option can be used either on its
  own or in conjunction with \fB\-Wredundant\-tags\fR.
! .IP "\fB\-Wmultiple\-inheritance\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wmultiple-inheritance ( and Objective- only)"
  Warn when a class is defined with multiple direct base classes.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
  classes that indirectly use multiple inheritance.
! .IP "\fB\-Wvirtual\-inheritance\fR" 4
  .IX Item "-Wvirtual-inheritance"
  Warn when a class is defined with a virtual direct base class.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
  classes that indirectly use virtual inheritance.
! .IP "\fB\-Wno\-virtual\-move\-assign\fR" 4
  .IX Item "-Wno-virtual-move-assign"
  Suppress warnings about inheriting from a virtual base with a
! non-trivial \*(C+11 move assignment operator.  This is dangerous because
  if the virtual base is reachable along more than one path, it is
  moved multiple times, which can mean both objects end up in the
! moved-from state.  If the move assignment operator is written to avoid
! moving from a moved-from object, this warning can be disabled.
! .IP "\fB\-Wnamespaces\fR" 4
  .IX Item "-Wnamespaces"
  Warn when a namespace definition is opened.  Some coding rules disallow
  namespaces, and this may be used to enforce that rule.  The warning is
! inactive inside a system header file, such as the \s-1STL,\s0 so one can still
! use the \s-1STL.\s0  One may also use using directives and qualified names.
! .IP "\fB\-Wno\-template\-id\-cdtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-template-id-cdtor ( and Objective- only)"
! Disable the warning about the use of simple-template-id as the declarator-id
! of a constructor or destructor, which became invalid in \*(C+20 via \s-1DR 2237.\s0
  For example:
  .Sp
  .Vb 4
--- 4395,4439 ----
  \&        void draw (struct Object*);
  .Ve
  .Sp
! It is not wrong to declare a class with the class\-key \f(CW\*(C`struct\*(C'\fR as
  the example above shows.  The \fB\-Wmismatched\-tags\fR option is intended
  to help achieve a consistent style of class declarations.  In code that is
! intended to be portable to Windows\-based compilers the warning helps prevent
  unresolved references due to the difference in the mangling of symbols
! declared with different class\-keys.  The option can be used either on its
  own or in conjunction with \fB\-Wredundant\-tags\fR.
! .IP "\fB\-Wmultiple\-inheritance\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wmultiple-inheritance (C++ and Objective-C++ only)"
  Warn when a class is defined with multiple direct base classes.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the STL, so one can still use the STL.  One may also define
  classes that indirectly use multiple inheritance.
! .IP \fB\-Wvirtual\-inheritance\fR 4
  .IX Item "-Wvirtual-inheritance"
  Warn when a class is defined with a virtual direct base class.  Some
  coding rules disallow multiple inheritance, and this may be used to
  enforce that rule.  The warning is inactive inside a system header file,
! such as the STL, so one can still use the STL.  One may also define
  classes that indirectly use virtual inheritance.
! .IP \fB\-Wno\-virtual\-move\-assign\fR 4
  .IX Item "-Wno-virtual-move-assign"
  Suppress warnings about inheriting from a virtual base with a
! non\-trivial C++11 move assignment operator.  This is dangerous because
  if the virtual base is reachable along more than one path, it is
  moved multiple times, which can mean both objects end up in the
! moved\-from state.  If the move assignment operator is written to avoid
! moving from a moved\-from object, this warning can be disabled.
! .IP \fB\-Wnamespaces\fR 4
  .IX Item "-Wnamespaces"
  Warn when a namespace definition is opened.  Some coding rules disallow
  namespaces, and this may be used to enforce that rule.  The warning is
! inactive inside a system header file, such as the STL, so one can still
! use the STL.  One may also use using directives and qualified names.
! .IP "\fB\-Wno\-template\-id\-cdtor\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-template-id-cdtor (C++ and Objective-C++ only)"
! Disable the warning about the use of simple\-template\-id as the declarator\-id
! of a constructor or destructor, which became invalid in C++20 via DR 2237.
  For example:
  .Sp
  .Vb 4
*************** For example:
*** 4512,4526 ****
  .Sp
  \&\fB\-Wtemplate\-id\-cdtor\fR is enabled by default with
  \&\fB\-std=c++20\fR; it is also enabled by \fB\-Wc++20\-compat\fR.
! .IP "\fB\-Wno\-terminate\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-terminate ( and Objective- only)"
! Disable the warning about a throw-expression that will immediately
  result in a call to \f(CW\*(C`terminate\*(C'\fR.
! .IP "\fB\-Wno\-vexing\-parse\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-vexing-parse ( and Objective- only)"
  Warn about the most vexing parse syntactic ambiguity.  This warns about
  the cases when a declaration looks like a variable definition, but the
! \&\*(C+ language requires it to be interpreted as a function declaration.
  For instance:
  .Sp
  .Vb 4
--- 4445,4459 ----
  .Sp
  \&\fB\-Wtemplate\-id\-cdtor\fR is enabled by default with
  \&\fB\-std=c++20\fR; it is also enabled by \fB\-Wc++20\-compat\fR.
! .IP "\fB\-Wno\-terminate\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-terminate (C++ and Objective-C++ only)"
! Disable the warning about a throw\-expression that will immediately
  result in a call to \f(CW\*(C`terminate\*(C'\fR.
! .IP "\fB\-Wno\-vexing\-parse\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-vexing-parse (C++ and Objective-C++ only)"
  Warn about the most vexing parse syntactic ambiguity.  This warns about
  the cases when a declaration looks like a variable definition, but the
! C++ language requires it to be interpreted as a function declaration.
  For instance:
  .Sp
  .Vb 4
*************** The warning will suggest options how to
*** 4545,4585 ****
  it can suggest removing the parentheses or using braces instead.
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wno\-class\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-class-conversion ( and Objective- only)"
  Do not warn when a conversion function converts an
  object to the same type, to a base class of that type, or to void; such
  a conversion function will never be called.
! .IP "\fB\-Wvolatile\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wvolatile ( and Objective- only)"
  Warn about deprecated uses of the \f(CW\*(C`volatile\*(C'\fR qualifier.  This includes
  postfix and prefix \f(CW\*(C`++\*(C'\fR and \f(CW\*(C`\-\-\*(C'\fR expressions of
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified types, using simple assignments where the left
! operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified non-class type for their value,
  compound assignments where the left operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified
! non-class type, \f(CW\*(C`volatile\*(C'\fR\-qualified function return type,
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified parameter type, and structured bindings of a
! \&\f(CW\*(C`volatile\*(C'\fR\-qualified type.  This usage was deprecated in \*(C+20.
  .Sp
  Enabled by default with \fB\-std=c++20\fR.
! .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
  Warn when a literal \fB0\fR is used as null pointer constant.  This can
! be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
! .IP "\fB\-Waligned\-new\fR" 4
  .IX Item "-Waligned-new"
! Warn about a new-expression of a type that requires greater alignment
! than the \f(CW\*(C`alignof(std::max_align_t)\*(C'\fR but uses an allocation
  function without an explicit alignment parameter. This option is
  enabled by \fB\-Wall\fR.
  .Sp
  Normally this only warns about global allocation functions, but
  \&\fB\-Waligned\-new=all\fR also warns about class member allocation
  functions.
! .IP "\fB\-Wno\-placement\-new\fR" 4
  .IX Item "-Wno-placement-new"
  .PD 0
! .IP "\fB\-Wplacement\-new=\fR\fIn\fR" 4
  .IX Item "-Wplacement-new=n"
  .PD
  Warn about placement new expressions with undefined behavior, such as
--- 4478,4518 ----
  it can suggest removing the parentheses or using braces instead.
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wno\-class\-conversion\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-class-conversion (C++ and Objective-C++ only)"
  Do not warn when a conversion function converts an
  object to the same type, to a base class of that type, or to void; such
  a conversion function will never be called.
! .IP "\fB\-Wvolatile\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wvolatile (C++ and Objective-C++ only)"
  Warn about deprecated uses of the \f(CW\*(C`volatile\*(C'\fR qualifier.  This includes
  postfix and prefix \f(CW\*(C`++\*(C'\fR and \f(CW\*(C`\-\-\*(C'\fR expressions of
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified types, using simple assignments where the left
! operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified non\-class type for their value,
  compound assignments where the left operand is a \f(CW\*(C`volatile\*(C'\fR\-qualified
! non\-class type, \f(CW\*(C`volatile\*(C'\fR\-qualified function return type,
  \&\f(CW\*(C`volatile\*(C'\fR\-qualified parameter type, and structured bindings of a
! \&\f(CW\*(C`volatile\*(C'\fR\-qualified type.  This usage was deprecated in C++20.
  .Sp
  Enabled by default with \fB\-std=c++20\fR.
! .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)"
  Warn when a literal \fB0\fR is used as null pointer constant.  This can
! be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in C++11.
! .IP \fB\-Waligned\-new\fR 4
  .IX Item "-Waligned-new"
! Warn about a new\-expression of a type that requires greater alignment
! than the \f(CWalignof(std::max_align_t)\fR but uses an allocation
  function without an explicit alignment parameter. This option is
  enabled by \fB\-Wall\fR.
  .Sp
  Normally this only warns about global allocation functions, but
  \&\fB\-Waligned\-new=all\fR also warns about class member allocation
  functions.
! .IP \fB\-Wno\-placement\-new\fR 4
  .IX Item "-Wno-placement-new"
  .PD 0
! .IP \fB\-Wplacement\-new=\fR\fIn\fR 4
  .IX Item "-Wplacement-new=n"
  .PD
  Warn about placement new expressions with undefined behavior, such as
*************** because it attempts to construct an arra
*** 4595,4615 ****
  .Sp
  This warning is enabled by default.
  .RS 4
! .IP "\fB\-Wplacement\-new=1\fR" 4
  .IX Item "-Wplacement-new=1"
  This is the default warning level of \fB\-Wplacement\-new\fR.  At this
  level the warning is not issued for some strictly undefined constructs that
! \&\s-1GCC\s0 allows as extensions for compatibility with legacy code.  For example,
  the following \f(CW\*(C`new\*(C'\fR expression is not diagnosed at this level even
! though it has undefined behavior according to the \*(C+ standard because
! it writes past the end of the one-element array.
  .Sp
  .Vb 3
  \&        struct S { int n, a[1]; };
  \&        S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]);
  \&        new (s\->a)int [32]();
  .Ve
! .IP "\fB\-Wplacement\-new=2\fR" 4
  .IX Item "-Wplacement-new=2"
  At this level, in addition to diagnosing all the same constructs as at level
  1, a diagnostic is also issued for placement new expressions that construct
--- 4528,4548 ----
  .Sp
  This warning is enabled by default.
  .RS 4
! .IP \fB\-Wplacement\-new=1\fR 4
  .IX Item "-Wplacement-new=1"
  This is the default warning level of \fB\-Wplacement\-new\fR.  At this
  level the warning is not issued for some strictly undefined constructs that
! GCC allows as extensions for compatibility with legacy code.  For example,
  the following \f(CW\*(C`new\*(C'\fR expression is not diagnosed at this level even
! though it has undefined behavior according to the C++ standard because
! it writes past the end of the one\-element array.
  .Sp
  .Vb 3
  \&        struct S { int n, a[1]; };
  \&        S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]);
  \&        new (s\->a)int [32]();
  .Ve
! .IP \fB\-Wplacement\-new=2\fR 4
  .IX Item "-Wplacement-new=2"
  At this level, in addition to diagnosing all the same constructs as at level
  1, a diagnostic is also issued for placement new expressions that construct
*************** use of the flexible member array extensi
*** 4626,4636 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wcatch\-value\fR" 4
  .IX Item "-Wcatch-value"
  .PD 0
! .IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wcatch-value=n ( and Objective- only)"
  .PD
  Warn about catch handlers that do not catch via reference.
  With \fB\-Wcatch\-value=1\fR (or \fB\-Wcatch\-value\fR for short)
--- 4559,4569 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wcatch\-value\fR 4
  .IX Item "-Wcatch-value"
  .PD 0
! .IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(C++ and Objective\-C++ only)" 4
! .IX Item "-Wcatch-value=n (C++ and Objective-C++ only)"
  .PD
  Warn about catch handlers that do not catch via reference.
  With \fB\-Wcatch\-value=1\fR (or \fB\-Wcatch\-value\fR for short)
*************** warn about polymorphic class types that
*** 4638,4659 ****
  With \fB\-Wcatch\-value=2\fR warn about all class types that are caught
  by value. With \fB\-Wcatch\-value=3\fR warn about all types that are
  not caught by reference. \fB\-Wcatch\-value\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wconditionally\-supported\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wconditionally-supported ( and Objective- only)"
! Warn for conditionally-supported (\*(C+11 [intro.defs]) constructs.
! .IP "\fB\-Wno\-delete\-incomplete\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-delete-incomplete ( and Objective- only)"
  Do not warn when deleting a pointer to incomplete type, which may cause
  undefined behavior at runtime.  This warning is enabled by default.
! .IP "\fB\-Wextra\-semi\fR (\*(C+, Objective\-\*(C+ only)" 4
! .IX Item "-Wextra-semi (, Objective- only)"
! Warn about redundant semicolons after in-class function definitions.
! .IP "\fB\-Wno\-global\-module\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-global-module ( and Objective- only)"
  Disable the diagnostic for when the global module fragment of a module
  unit does not consist only of preprocessor directives.
! .IP "\fB\-Wno\-inaccessible\-base\fR (\*(C+, Objective\-\*(C+ only)" 4
! .IX Item "-Wno-inaccessible-base (, Objective- only)"
  This option controls warnings
  when a base class is inaccessible in a class derived from it due to
  ambiguity.  The warning is enabled by default.
--- 4571,4592 ----
  With \fB\-Wcatch\-value=2\fR warn about all class types that are caught
  by value. With \fB\-Wcatch\-value=3\fR warn about all types that are
  not caught by reference. \fB\-Wcatch\-value\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wconditionally\-supported\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wconditionally-supported (C++ and Objective-C++ only)"
! Warn for conditionally\-supported (C++11 [intro.defs]) constructs.
! .IP "\fB\-Wno\-delete\-incomplete\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-delete-incomplete (C++ and Objective-C++ only)"
  Do not warn when deleting a pointer to incomplete type, which may cause
  undefined behavior at runtime.  This warning is enabled by default.
! .IP "\fB\-Wextra\-semi\fR (C++, Objective\-C++ only)" 4
! .IX Item "-Wextra-semi (C++, Objective-C++ only)"
! Warn about redundant semicolons after in\-class function definitions.
! .IP "\fB\-Wno\-global\-module\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-global-module (C++ and Objective-C++ only)"
  Disable the diagnostic for when the global module fragment of a module
  unit does not consist only of preprocessor directives.
! .IP "\fB\-Wno\-inaccessible\-base\fR (C++, Objective\-C++ only)" 4
! .IX Item "-Wno-inaccessible-base (C++, Objective-C++ only)"
  This option controls warnings
  when a base class is inaccessible in a class derived from it due to
  ambiguity.  The warning is enabled by default.
*************** bases is enabled by the \fB\-Wextra\fR o
*** 4667,4691 ****
  \&        
  \&        struct C : B, A { };
  .Ve
! .IP "\fB\-Wno\-inherited\-variadic\-ctor\fR" 4
  .IX Item "-Wno-inherited-variadic-ctor"
! Suppress warnings about use of \*(C+11 inheriting constructors when the
  base class inherited from has a C variadic constructor; the warning is
  on by default because the ellipsis is not inherited.
! .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
! Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non-POD
! type.  According to the 2014 \s-1ISO \*(C+\s0 standard, applying \f(CW\*(C`offsetof\*(C'\fR
! to a non-standard-layout type is undefined.  In existing \*(C+ implementations,
  however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
  This flag is for users who are aware that they are
  writing nonportable code and who have deliberately chosen to ignore the
  warning about it.
  .Sp
  The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
! of the \*(C+ standard.
! .IP "\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wsized-deallocation ( and Objective- only)"
  Warn about a definition of an unsized deallocation function
  .Sp
  .Vb 2
--- 4600,4624 ----
  \&        
  \&        struct C : B, A { };
  .Ve
! .IP \fB\-Wno\-inherited\-variadic\-ctor\fR 4
  .IX Item "-Wno-inherited-variadic-ctor"
! Suppress warnings about use of C++11 inheriting constructors when the
  base class inherited from has a C variadic constructor; the warning is
  on by default because the ellipsis is not inherited.
! .IP "\fB\-Wno\-invalid\-offsetof\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-invalid-offsetof (C++ and Objective-C++ only)"
! Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non\-POD
! type.  According to the 2014 ISO C++ standard, applying \f(CW\*(C`offsetof\*(C'\fR
! to a non\-standard\-layout type is undefined.  In existing C++ implementations,
  however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
  This flag is for users who are aware that they are
  writing nonportable code and who have deliberately chosen to ignore the
  warning about it.
  .Sp
  The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
! of the C++ standard.
! .IP "\fB\-Wsized\-deallocation\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wsized-deallocation (C++ and Objective-C++ only)"
  Warn about a definition of an unsized deallocation function
  .Sp
  .Vb 2
*************** without a definition of the correspondin
*** 4702,4744 ****
  .Sp
  or vice versa.  Enabled by \fB\-Wextra\fR along with
  \&\fB\-fsized\-deallocation\fR.
! .IP "\fB\-Wsuggest\-final\-types\fR" 4
  .IX Item "-Wsuggest-final-types"
  Warn about types with virtual methods where code quality would be improved
! if the type were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible,
! declared in an anonymous namespace. This allows \s-1GCC\s0 to more aggressively
  devirtualize the polymorphic calls. This warning is more effective with
! link-time optimization,
  where the information about the class hierarchy graph is
  more complete.
! .IP "\fB\-Wsuggest\-final\-methods\fR" 4
  .IX Item "-Wsuggest-final-methods"
  Warn about virtual methods where code quality would be improved if the method
! were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible, its type were
  declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
  This warning is
! more effective with link-time optimization, where the information about the
  class hierarchy graph is more complete. It is recommended to first consider
  suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
  annotations.
! .IP "\fB\-Wsuggest\-override\fR" 4
  .IX Item "-Wsuggest-override"
  Warn about overriding virtual functions that are not marked with the
  \&\f(CW\*(C`override\*(C'\fR keyword.
! .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-conversion-null ( and Objective- only)"
! Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
  types. \fB\-Wconversion\-null\fR is enabled by default.
! .SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
! .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
! (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
  languages themselves.
  .PP
! This section describes the command-line options that are only meaningful
! for Objective-C and Objective\-\*(C+ programs.  You can also use most of
! the language-independent \s-1GNU\s0 compiler options.
  For example, you might compile a file \fIsome_class.m\fR like this:
  .PP
  .Vb 1
--- 4635,4677 ----
  .Sp
  or vice versa.  Enabled by \fB\-Wextra\fR along with
  \&\fB\-fsized\-deallocation\fR.
! .IP \fB\-Wsuggest\-final\-types\fR 4
  .IX Item "-Wsuggest-final-types"
  Warn about types with virtual methods where code quality would be improved
! if the type were declared with the C++11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible,
! declared in an anonymous namespace. This allows GCC to more aggressively
  devirtualize the polymorphic calls. This warning is more effective with
! link\-time optimization,
  where the information about the class hierarchy graph is
  more complete.
! .IP \fB\-Wsuggest\-final\-methods\fR 4
  .IX Item "-Wsuggest-final-methods"
  Warn about virtual methods where code quality would be improved if the method
! were declared with the C++11 \f(CW\*(C`final\*(C'\fR specifier,
  or, if possible, its type were
  declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
  This warning is
! more effective with link\-time optimization, where the information about the
  class hierarchy graph is more complete. It is recommended to first consider
  suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
  annotations.
! .IP \fB\-Wsuggest\-override\fR 4
  .IX Item "-Wsuggest-override"
  Warn about overriding virtual functions that are not marked with the
  \&\f(CW\*(C`override\*(C'\fR keyword.
! .IP "\fB\-Wno\-conversion\-null\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-conversion-null (C++ and Objective-C++ only)"
! Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non\-pointer
  types. \fB\-Wconversion\-null\fR is enabled by default.
! .SS "Options Controlling Objective\-C and Objective\-C++ Dialects"
! .IX Subsection "Options Controlling Objective-C and Objective-C++ Dialects"
! (NOTE: This manual does not describe the Objective\-C and Objective\-C++
  languages themselves.
  .PP
! This section describes the command\-line options that are only meaningful
! for Objective\-C and Objective\-C++ programs.  You can also use most of
! the language\-independent GNU compiler options.
  For example, you might compile a file \fIsome_class.m\fR like this:
  .PP
  .Vb 1
*************** For example, you might compile a file \f
*** 4746,4909 ****
  .Ve
  .PP
  In this example, \fB\-fgnu\-runtime\fR is an option meant only for
! Objective-C and Objective\-\*(C+ programs; you can use the other options with
! any language supported by \s-1GCC.\s0
  .PP
! Note that since Objective-C is an extension of the C language, Objective-C
! compilations may also use options specific to the C front-end (e.g.,
! \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
! \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
  .PP
! Here is a list of options that are \fIonly\fR for compiling Objective-C
! and Objective\-\*(C+ programs:
! .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
  .IX Item "-fconstant-string-class=class-name"
! Use \fIclass-name\fR as the name of the class to instantiate for each
  literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
! class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
  \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  On
  Darwin / macOS platforms, the \fB\-fconstant\-cfstrings\fR option, if
  also present, overrides the \fB\-fconstant\-string\-class\fR setting and cause
  \&\f(CW\*(C`@"..."\*(C'\fR literals to be laid out as constant CoreFoundation strings.
! Note that \fB\-fconstant\-cfstrings\fR is an alias for the target-specific
  \&\fB\-mconstant\-cfstrings\fR equivalent.
! .IP "\fB\-fgnu\-runtime\fR" 4
  .IX Item "-fgnu-runtime"
! Generate object code compatible with the standard \s-1GNU\s0 Objective-C
  runtime.  This is the default for most types of systems.
! .IP "\fB\-fnext\-runtime\fR" 4
  .IX Item "-fnext-runtime"
  Generate output compatible with the NeXT runtime.  This is the default
! for NeXT-based systems, including Darwin / macOS.  The macro
  \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
  used.
! .IP "\fB\-fno\-nil\-receivers\fR" 4
  .IX Item "-fno-nil-receivers"
! Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
  message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
  not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
  runtime to be used.  This option is only available in conjunction with
! the NeXT runtime and \s-1ABI\s0 version 0 or 1.
! .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
  .IX Item "-fobjc-abi-version=n"
! Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
  This option is currently supported only for the NeXT runtime.  In that
! case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
! properties and other Objective-C 2.0 additions.  Version 1 is the
! traditional (32\-bit) \s-1ABI\s0 with support for properties and other
! Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI.\s0  If
  nothing is specified, the default is Version 0 on 32\-bit target
  machines, and Version 2 on 64\-bit target machines.
! .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
  .IX Item "-fobjc-call-cxx-cdtors"
! For each Objective-C class, check if any of its instance variables is a
! \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
  special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
! non-trivial default constructors on any such instance variables, in order,
  and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
! is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
  special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
  all such default destructors, in reverse order.
  .Sp
  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
  methods thusly generated only operate on instance variables
! declared in the current Objective-C class, and not those inherited
! from superclasses.  It is the responsibility of the Objective-C
! runtime to invoke all such methods in an object's inheritance
  hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
  by the runtime immediately after a new object instance is allocated;
  the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
  before the runtime deallocates an object instance.
  .Sp
! As of this writing, only the NeXT runtime on Mac \s-1OS X 10.4\s0 and later has
  support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
  \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
! .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
  .IX Item "-fobjc-direct-dispatch"
  Allow fast jumps to the message dispatcher.  On Darwin this is
  accomplished via the comm page.
! .IP "\fB\-fobjc\-exceptions\fR" 4
  .IX Item "-fobjc-exceptions"
  Enable syntactic support for structured exception handling in
! Objective-C, similar to what is offered by \*(C+.  This option
! is required to use the Objective-C keywords \f(CW@try\fR,
  \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
! \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
  runtime and the NeXT runtime (but not available in conjunction with
! the NeXT runtime on Mac \s-1OS X 10.2\s0 and earlier).
! .IP "\fB\-fobjc\-gc\fR" 4
  .IX Item "-fobjc-gc"
! Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
  programs.  This option is only available with the NeXT runtime; the
! \&\s-1GNU\s0 runtime has a different garbage collection implementation that
  does not require special compiler flags.
! .IP "\fB\-fobjc\-nilcheck\fR" 4
  .IX Item "-fobjc-nilcheck"
! For the NeXT runtime with version 2 of the \s-1ABI,\s0 check for a nil
  receiver in method invocations before doing the actual method call.
  This is the default and can be disabled using
  \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
  checked for nil in this way no matter what this flag is set to.
! Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
! version of the NeXT runtime \s-1ABI,\s0 is used.
! .IP "\fB\-fobjc\-std=objc1\fR" 4
  .IX Item "-fobjc-std=objc1"
! Conform to the language syntax of Objective-C 1.0, the language
! recognized by \s-1GCC 4.0.\s0  This only affects the Objective-C additions to
! the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
! which is controlled by the separate C/\*(C+ dialect option flags.  When
! this option is used with the Objective-C or Objective\-\*(C+ compiler,
! any Objective-C syntax that is not recognized by \s-1GCC 4.0\s0 is rejected.
! This is useful if you need to make sure that your Objective-C code can
! be compiled with older versions of \s-1GCC.\s0
! .IP "\fB\-freplace\-objc\-classes\fR" 4
  .IX Item "-freplace-objc-classes"
! Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
! the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
! run time instead.  This is used in conjunction with the Fix-and-Continue
  debugging mode, where the object file in question may be recompiled and
  dynamically reloaded in the course of program execution, without the need
! to restart the program itself.  Currently, Fix-and-Continue functionality
! is only available in conjunction with the NeXT runtime on Mac \s-1OS X 10.3\s0
  and later.
! .IP "\fB\-fzero\-link\fR" 4
  .IX Item "-fzero-link"
  When compiling for the NeXT runtime, the compiler ordinarily replaces calls
! to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
  compile time) with static class references that get initialized at load time,
! which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
! suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
! to be retained.  This is useful in Zero-Link debugging mode, since it allows
  for individual class implementations to be modified during program execution.
! The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
! regardless of command-line options.
! .IP "\fB\-fno\-local\-ivars\fR" 4
  .IX Item "-fno-local-ivars"
! By default instance variables in Objective-C can be accessed as if
! they were local variables from within the methods of the class they're
  declared in.  This can lead to shadowing between instance variables
  and other variables declared either locally inside a class method or
  globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
  flag disables this behavior thus avoiding variable shadowing issues.
! .IP "\fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR]" 4
  .IX Item "-fivar-visibility=[public|protected|private|package]"
  Set the default instance variable visibility to the specified option
  so that instance variables declared outside the scope of any access
  modifier directives default to the specified visibility.
! .IP "\fB\-gen\-decls\fR" 4
  .IX Item "-gen-decls"
  Dump interface declarations for all classes seen in the source file to a
! file named \fI\fIsourcename\fI.decl\fR.
! .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
! Warn whenever an Objective-C assignment is being intercepted by the
  garbage collector.
! .IP "\fB\-Wno\-property\-assign\-default\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-property-assign-default (Objective-C and Objective- only)"
! Do not warn if a property for an Objective-C object has no assign
  semantics specified.
! .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-protocol (Objective-C and Objective- only)"
  If a class is declared to implement a protocol, a warning is issued for
  every method in the protocol that is not implemented by the class.  The
  default behavior is to issue a warning for every method not explicitly
--- 4679,4842 ----
  .Ve
  .PP
  In this example, \fB\-fgnu\-runtime\fR is an option meant only for
! Objective\-C and Objective\-C++ programs; you can use the other options with
! any language supported by GCC.
  .PP
! Note that since Objective\-C is an extension of the C language, Objective\-C
! compilations may also use options specific to the C front\-end (e.g.,
! \&\fB\-Wtraditional\fR).  Similarly, Objective\-C++ compilations may use
! C++\-specific options (e.g., \fB\-Wabi\fR).
  .PP
! Here is a list of options that are \fIonly\fR for compiling Objective\-C
! and Objective\-C++ programs:
! .IP \fB\-fconstant\-string\-class=\fR\fIclass\-name\fR 4
  .IX Item "-fconstant-string-class=class-name"
! Use \fIclass\-name\fR as the name of the class to instantiate for each
  literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
! class name is \f(CW\*(C`NXConstantString\*(C'\fR if the GNU runtime is being used, and
  \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  On
  Darwin / macOS platforms, the \fB\-fconstant\-cfstrings\fR option, if
  also present, overrides the \fB\-fconstant\-string\-class\fR setting and cause
  \&\f(CW\*(C`@"..."\*(C'\fR literals to be laid out as constant CoreFoundation strings.
! Note that \fB\-fconstant\-cfstrings\fR is an alias for the target\-specific
  \&\fB\-mconstant\-cfstrings\fR equivalent.
! .IP \fB\-fgnu\-runtime\fR 4
  .IX Item "-fgnu-runtime"
! Generate object code compatible with the standard GNU Objective\-C
  runtime.  This is the default for most types of systems.
! .IP \fB\-fnext\-runtime\fR 4
  .IX Item "-fnext-runtime"
  Generate output compatible with the NeXT runtime.  This is the default
! for NeXT\-based systems, including Darwin / macOS.  The macro
  \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
  used.
! .IP \fB\-fno\-nil\-receivers\fR 4
  .IX Item "-fno-nil-receivers"
! Assume that all Objective\-C message dispatches (\f(CW\*(C`[receiver
  message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
  not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
  runtime to be used.  This option is only available in conjunction with
! the NeXT runtime and ABI version 0 or 1.
! .IP \fB\-fobjc\-abi\-version=\fR\fIn\fR 4
  .IX Item "-fobjc-abi-version=n"
! Use version \fIn\fR of the Objective\-C ABI for the selected runtime.
  This option is currently supported only for the NeXT runtime.  In that
! case, Version 0 is the traditional (32\-bit) ABI without support for
! properties and other Objective\-C 2.0 additions.  Version 1 is the
! traditional (32\-bit) ABI with support for properties and other
! Objective\-C 2.0 additions.  Version 2 is the modern (64\-bit) ABI.  If
  nothing is specified, the default is Version 0 on 32\-bit target
  machines, and Version 2 on 64\-bit target machines.
! .IP \fB\-fobjc\-call\-cxx\-cdtors\fR 4
  .IX Item "-fobjc-call-cxx-cdtors"
! For each Objective\-C class, check if any of its instance variables is a
! C++ object with a non\-trivial default constructor.  If so, synthesize a
  special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
! non\-trivial default constructors on any such instance variables, in order,
  and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
! is a C++ object with a non\-trivial destructor, and if so, synthesize a
  special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
  all such default destructors, in reverse order.
  .Sp
  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
  methods thusly generated only operate on instance variables
! declared in the current Objective\-C class, and not those inherited
! from superclasses.  It is the responsibility of the Objective\-C
! runtime to invoke all such methods in an object\*(Aqs inheritance
  hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
  by the runtime immediately after a new object instance is allocated;
  the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
  before the runtime deallocates an object instance.
  .Sp
! As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
  support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
  \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
! .IP \fB\-fobjc\-direct\-dispatch\fR 4
  .IX Item "-fobjc-direct-dispatch"
  Allow fast jumps to the message dispatcher.  On Darwin this is
  accomplished via the comm page.
! .IP \fB\-fobjc\-exceptions\fR 4
  .IX Item "-fobjc-exceptions"
  Enable syntactic support for structured exception handling in
! Objective\-C, similar to what is offered by C++.  This option
! is required to use the Objective\-C keywords \f(CW@try\fR,
  \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
! \&\f(CW@synchronized\fR.  This option is available with both the GNU
  runtime and the NeXT runtime (but not available in conjunction with
! the NeXT runtime on Mac OS X 10.2 and earlier).
! .IP \fB\-fobjc\-gc\fR 4
  .IX Item "-fobjc-gc"
! Enable garbage collection (GC) in Objective\-C and Objective\-C++
  programs.  This option is only available with the NeXT runtime; the
! GNU runtime has a different garbage collection implementation that
  does not require special compiler flags.
! .IP \fB\-fobjc\-nilcheck\fR 4
  .IX Item "-fobjc-nilcheck"
! For the NeXT runtime with version 2 of the ABI, check for a nil
  receiver in method invocations before doing the actual method call.
  This is the default and can be disabled using
  \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
  checked for nil in this way no matter what this flag is set to.
! Currently this flag does nothing when the GNU runtime, or an older
! version of the NeXT runtime ABI, is used.
! .IP \fB\-fobjc\-std=objc1\fR 4
  .IX Item "-fobjc-std=objc1"
! Conform to the language syntax of Objective\-C 1.0, the language
! recognized by GCC 4.0.  This only affects the Objective\-C additions to
! the C/C++ language; it does not affect conformance to C/C++ standards,
! which is controlled by the separate C/C++ dialect option flags.  When
! this option is used with the Objective\-C or Objective\-C++ compiler,
! any Objective\-C syntax that is not recognized by GCC 4.0 is rejected.
! This is useful if you need to make sure that your Objective\-C code can
! be compiled with older versions of GCC.
! .IP \fB\-freplace\-objc\-classes\fR 4
  .IX Item "-freplace-objc-classes"
! Emit a special marker instructing \fBld\|(1)\fR not to statically link in
! the resulting object file, and allow \fBdyld\|(1)\fR to load it in at
! run time instead.  This is used in conjunction with the Fix\-and\-Continue
  debugging mode, where the object file in question may be recompiled and
  dynamically reloaded in the course of program execution, without the need
! to restart the program itself.  Currently, Fix\-and\-Continue functionality
! is only available in conjunction with the NeXT runtime on Mac OS X 10.3
  and later.
! .IP \fB\-fzero\-link\fR 4
  .IX Item "-fzero-link"
  When compiling for the NeXT runtime, the compiler ordinarily replaces calls
! to \f(CWobjc_getClass("...")\fR (when the name of the class is known at
  compile time) with static class references that get initialized at load time,
! which improves run\-time performance.  Specifying the \fB\-fzero\-link\fR flag
! suppresses this behavior and causes calls to \f(CWobjc_getClass("...")\fR
! to be retained.  This is useful in Zero\-Link debugging mode, since it allows
  for individual class implementations to be modified during program execution.
! The GNU runtime currently always retains calls to \f(CWobjc_get_class("...")\fR
! regardless of command\-line options.
! .IP \fB\-fno\-local\-ivars\fR 4
  .IX Item "-fno-local-ivars"
! By default instance variables in Objective\-C can be accessed as if
! they were local variables from within the methods of the class they\*(Aqre
  declared in.  This can lead to shadowing between instance variables
  and other variables declared either locally inside a class method or
  globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
  flag disables this behavior thus avoiding variable shadowing issues.
! .IP \fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 4
  .IX Item "-fivar-visibility=[public|protected|private|package]"
  Set the default instance variable visibility to the specified option
  so that instance variables declared outside the scope of any access
  modifier directives default to the specified visibility.
! .IP \fB\-gen\-decls\fR 4
  .IX Item "-gen-decls"
  Dump interface declarations for all classes seen in the source file to a
! file named \fIsourcename.decl\fR.
! .IP "\fB\-Wassign\-intercept\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wassign-intercept (Objective-C and Objective-C++ only)"
! Warn whenever an Objective\-C assignment is being intercepted by the
  garbage collector.
! .IP "\fB\-Wno\-property\-assign\-default\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-property-assign-default (Objective-C and Objective-C++ only)"
! Do not warn if a property for an Objective\-C object has no assign
  semantics specified.
! .IP "\fB\-Wno\-protocol\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-protocol (Objective-C and Objective-C++ only)"
  If a class is declared to implement a protocol, a warning is issued for
  every method in the protocol that is not implemented by the class.  The
  default behavior is to issue a warning for every method not explicitly
*************** implemented in the class, even if a meth
*** 4911,4979 ****
  from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
  methods inherited from the superclass are considered to be implemented,
  and no warning is issued for them.
! .IP "\fB\-Wobjc\-root\-class\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wobjc-root-class (Objective-C and Objective- only)"
  Warn if a class interface lacks a superclass. Most classes will inherit
  from \f(CW\*(C`NSObject\*(C'\fR (or \f(CW\*(C`Object\*(C'\fR) for example.  When declaring
  classes intended to be root classes, the warning can be suppressed by
  marking their interfaces with \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR.
! .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wselector (Objective-C and Objective- only)"
  Warn if multiple methods of different types for the same selector are
  found during compilation.  The check is performed on the list of methods
  in the final stage of compilation.  Additionally, a check is performed
! for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
  expression, and a corresponding method for that selector has been found
  during compilation.  Because these checks scan the method table only at
  the end of compilation, these warnings are not produced if the final
  stage of compilation is not reached, for example because an error is
  found during compilation, or because the \fB\-fsyntax\-only\fR option is
  being used.
! .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
  Warn if multiple methods with differing argument and/or return types are
  found for a given selector when attempting to send a message using this
  selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
  is off (which is the default behavior), the compiler omits such warnings
  if any differences found are confined to types that share the same size
  and alignment.
! .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
! Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
  undeclared selector is found.  A selector is considered undeclared if no
  method with that name has been declared before the
! \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
  \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
  an \f(CW@implementation\fR section.  This option always performs its
! checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
  while \fB\-Wselector\fR only performs its checks in the final stage of
  compilation.  This also enforces the coding style convention
  that methods and selectors must be declared before being used.
! .IP "\fB\-print\-objc\-runtime\-info\fR" 4
  .IX Item "-print-objc-runtime-info"
  Generate C header describing the largest structure that is passed by
  value, if any.
  .SS "Options to Control Diagnostic Messages Formatting"
  .IX Subsection "Options to Control Diagnostic Messages Formatting"
  Traditionally, diagnostic messages have been formatted irrespective of
! the output device's aspect (e.g. its width, ...).  You can use the
  options described below
  to control the formatting algorithm for diagnostic messages, 
  e.g. how many characters per line, how often source location
  information should be reported.  Note that some language front ends may not
  honor these options.
! .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
  .IX Item "-fmessage-length=n"
  Try to format error messages so that they fit on lines of about
! \&\fIn\fR characters.  If \fIn\fR is zero, then no line-wrapping is
  done; each error message appears on a single line.  This is the
  default for all front ends.
  .Sp
  Note \- this option also affects the display of the \fB#error\fR and
! \&\fB#warning\fR pre-processor directives, and the \fBdeprecated\fR
  function/type/variable attribute.  It does not however affect the
! \&\fBpragma \s-1GCC\s0 warning\fR and \fBpragma \s-1GCC\s0 error\fR pragmas.
! .IP "\fB\-fdiagnostics\-plain\-output\fR" 4
  .IX Item "-fdiagnostics-plain-output"
  This option requests that diagnostic output look as plain as possible, which
  may be useful when running \fBdejagnu\fR or other utilities that need to
--- 4844,4912 ----
  from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
  methods inherited from the superclass are considered to be implemented,
  and no warning is issued for them.
! .IP "\fB\-Wobjc\-root\-class\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wobjc-root-class (Objective-C and Objective-C++ only)"
  Warn if a class interface lacks a superclass. Most classes will inherit
  from \f(CW\*(C`NSObject\*(C'\fR (or \f(CW\*(C`Object\*(C'\fR) for example.  When declaring
  classes intended to be root classes, the warning can be suppressed by
  marking their interfaces with \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR.
! .IP "\fB\-Wselector\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wselector (Objective-C and Objective-C++ only)"
  Warn if multiple methods of different types for the same selector are
  found during compilation.  The check is performed on the list of methods
  in the final stage of compilation.  Additionally, a check is performed
! for each selector appearing in a \f(CW@selector(...)\fR
  expression, and a corresponding method for that selector has been found
  during compilation.  Because these checks scan the method table only at
  the end of compilation, these warnings are not produced if the final
  stage of compilation is not reached, for example because an error is
  found during compilation, or because the \fB\-fsyntax\-only\fR option is
  being used.
! .IP "\fB\-Wstrict\-selector\-match\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wstrict-selector-match (Objective-C and Objective-C++ only)"
  Warn if multiple methods with differing argument and/or return types are
  found for a given selector when attempting to send a message using this
  selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
  is off (which is the default behavior), the compiler omits such warnings
  if any differences found are confined to types that share the same size
  and alignment.
! .IP "\fB\-Wundeclared\-selector\fR (Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wundeclared-selector (Objective-C and Objective-C++ only)"
! Warn if a \f(CW@selector(...)\fR expression referring to an
  undeclared selector is found.  A selector is considered undeclared if no
  method with that name has been declared before the
! \&\f(CW@selector(...)\fR expression, either explicitly in an
  \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
  an \f(CW@implementation\fR section.  This option always performs its
! checks as soon as a \f(CW@selector(...)\fR expression is found,
  while \fB\-Wselector\fR only performs its checks in the final stage of
  compilation.  This also enforces the coding style convention
  that methods and selectors must be declared before being used.
! .IP \fB\-print\-objc\-runtime\-info\fR 4
  .IX Item "-print-objc-runtime-info"
  Generate C header describing the largest structure that is passed by
  value, if any.
  .SS "Options to Control Diagnostic Messages Formatting"
  .IX Subsection "Options to Control Diagnostic Messages Formatting"
  Traditionally, diagnostic messages have been formatted irrespective of
! the output device\*(Aqs aspect (e.g. its width, ...).  You can use the
  options described below
  to control the formatting algorithm for diagnostic messages, 
  e.g. how many characters per line, how often source location
  information should be reported.  Note that some language front ends may not
  honor these options.
! .IP \fB\-fmessage\-length=\fR\fIn\fR 4
  .IX Item "-fmessage-length=n"
  Try to format error messages so that they fit on lines of about
! \&\fIn\fR characters.  If \fIn\fR is zero, then no line\-wrapping is
  done; each error message appears on a single line.  This is the
  default for all front ends.
  .Sp
  Note \- this option also affects the display of the \fB#error\fR and
! \&\fB#warning\fR pre\-processor directives, and the \fBdeprecated\fR
  function/type/variable attribute.  It does not however affect the
! \&\fBpragma GCC warning\fR and \fBpragma GCC error\fR pragmas.
! .IP \fB\-fdiagnostics\-plain\-output\fR 4
  .IX Item "-fdiagnostics-plain-output"
  This option requests that diagnostic output look as plain as possible, which
  may be useful when running \fBdejagnu\fR or other utilities that need to
*************** options:
*** 4986,5027 ****
  \&\-fdiagnostics\-urls=never
  \&\-fdiagnostics\-path\-format=separate\-events
  \&\-fdiagnostics\-text\-art\-charset=none\fR
! In the future, if \s-1GCC\s0 changes the default appearance of its diagnostics, the
  corresponding option to disable the new behavior will be added to this list.
! .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
  .IX Item "-fdiagnostics-show-location=once"
! Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
  reporter to emit source location information \fIonce\fR; that is, in
  case the message is too long to fit on a single physical line and has to
! be wrapped, the source location won't be emitted (as prefix) again,
  over and over, in subsequent continuation lines.  This is the default
  behavior.
! .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
  .IX Item "-fdiagnostics-show-location=every-line"
! Only meaningful in line-wrapping mode.  Instructs the diagnostic
  messages reporter to emit the same source location information (as
  prefix) for physical lines that result from the process of breaking
  a message which is too long to fit on a single line.
! .IP "\fB\-fdiagnostics\-color[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
  .IX Item "-fdiagnostics-color[=WHEN]"
  .PD 0
! .IP "\fB\-fno\-diagnostics\-color\fR" 4
  .IX Item "-fno-diagnostics-color"
  .PD
! Use color in diagnostics.  \fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR,
  or \fBauto\fR.  The default depends on how the compiler has been configured,
! it can be any of the above \fI\s-1WHEN\s0\fR options or also \fBnever\fR
! if \fB\s-1GCC_COLORS\s0\fR environment variable isn't present in the environment,
  and \fBauto\fR otherwise.
! \&\fBauto\fR makes \s-1GCC\s0 use color only when the standard error is a terminal,
  and when not executing in an emacs shell.
  The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
  aliases for \fB\-fdiagnostics\-color=always\fR and
  \&\fB\-fdiagnostics\-color=never\fR, respectively.
  .Sp
! The colors are defined by the environment variable \fB\s-1GCC_COLORS\s0\fR.
! Its value is a colon-separated list of capabilities and Select Graphic
! Rendition (\s-1SGR\s0) substrings. \s-1SGR\s0 commands are interpreted by the
  terminal or terminal emulator.  (See the section in the documentation
  of your text terminal for permitted values and their meanings as
  character attributes.)  These substring values are integers in decimal
--- 4919,4960 ----
  \&\-fdiagnostics\-urls=never
  \&\-fdiagnostics\-path\-format=separate\-events
  \&\-fdiagnostics\-text\-art\-charset=none\fR
! In the future, if GCC changes the default appearance of its diagnostics, the
  corresponding option to disable the new behavior will be added to this list.
! .IP \fB\-fdiagnostics\-show\-location=once\fR 4
  .IX Item "-fdiagnostics-show-location=once"
! Only meaningful in line\-wrapping mode.  Instructs the diagnostic messages
  reporter to emit source location information \fIonce\fR; that is, in
  case the message is too long to fit on a single physical line and has to
! be wrapped, the source location won\*(Aqt be emitted (as prefix) again,
  over and over, in subsequent continuation lines.  This is the default
  behavior.
! .IP \fB\-fdiagnostics\-show\-location=every\-line\fR 4
  .IX Item "-fdiagnostics-show-location=every-line"
! Only meaningful in line\-wrapping mode.  Instructs the diagnostic
  messages reporter to emit the same source location information (as
  prefix) for physical lines that result from the process of breaking
  a message which is too long to fit on a single line.
! .IP \fB\-fdiagnostics\-color[=\fR\fIWHEN\fR\fB]\fR 4
  .IX Item "-fdiagnostics-color[=WHEN]"
  .PD 0
! .IP \fB\-fno\-diagnostics\-color\fR 4
  .IX Item "-fno-diagnostics-color"
  .PD
! Use color in diagnostics.  \fIWHEN\fR is \fBnever\fR, \fBalways\fR,
  or \fBauto\fR.  The default depends on how the compiler has been configured,
! it can be any of the above \fIWHEN\fR options or also \fBnever\fR
! if \fBGCC_COLORS\fR environment variable isn\*(Aqt present in the environment,
  and \fBauto\fR otherwise.
! \&\fBauto\fR makes GCC use color only when the standard error is a terminal,
  and when not executing in an emacs shell.
  The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
  aliases for \fB\-fdiagnostics\-color=always\fR and
  \&\fB\-fdiagnostics\-color=never\fR, respectively.
  .Sp
! The colors are defined by the environment variable \fBGCC_COLORS\fR.
! Its value is a colon\-separated list of capabilities and Select Graphic
! Rendition (SGR) substrings. SGR commands are interpreted by the
  terminal or terminal emulator.  (See the section in the documentation
  of your text terminal for permitted values and their meanings as
  character attributes.)  These substring values are integers in decimal
*************** for 88\-color and 256\-color modes foreg
*** 5042,5048 ****
  and \fB48;5;0\fR to \fB48;5;255\fR
  for 88\-color and 256\-color modes background colors.
  .Sp
! The default \fB\s-1GCC_COLORS\s0\fR is
  .Sp
  .Vb 4
  \&        error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e
--- 4975,4981 ----
  and \fB48;5;0\fR to \fB48;5;255\fR
  for 88\-color and 256\-color modes background colors.
  .Sp
! The default \fBGCC_COLORS\fR is
  .Sp
  .Vb 4
  \&        error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e
*************** The default \fB\s-1GCC_COLORS\s0\fR is
*** 5054,5202 ****
  where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
  \&\fB01;36\fR is bold cyan, \fB32\fR is green, \fB34\fR is blue,
  \&\fB01\fR is bold, and \fB31\fR is red.
! Setting \fB\s-1GCC_COLORS\s0\fR to the empty string disables colors.
  Supported capabilities are as follows.
  .RS 4
  .ie n .IP """error=""" 4
! .el .IP "\f(CWerror=\fR" 4
  .IX Item "error="
! \&\s-1SGR\s0 substring for error: markers.
  .ie n .IP """warning=""" 4
! .el .IP "\f(CWwarning=\fR" 4
  .IX Item "warning="
! \&\s-1SGR\s0 substring for warning: markers.
  .ie n .IP """note=""" 4
! .el .IP "\f(CWnote=\fR" 4
  .IX Item "note="
! \&\s-1SGR\s0 substring for note: markers.
  .ie n .IP """path=""" 4
! .el .IP "\f(CWpath=\fR" 4
  .IX Item "path="
! \&\s-1SGR\s0 substring for colorizing paths of control-flow events as printed
  via \fB\-fdiagnostics\-path\-format=\fR, such as the identifiers of
  individual events and lines indicating interprocedural calls and returns.
  .ie n .IP """range1=""" 4
! .el .IP "\f(CWrange1=\fR" 4
  .IX Item "range1="
! \&\s-1SGR\s0 substring for first additional range.
  .ie n .IP """range2=""" 4
! .el .IP "\f(CWrange2=\fR" 4
  .IX Item "range2="
! \&\s-1SGR\s0 substring for second additional range.
  .ie n .IP """locus=""" 4
! .el .IP "\f(CWlocus=\fR" 4
  .IX Item "locus="
! \&\s-1SGR\s0 substring for location information, \fBfile:line\fR or
  \&\fBfile:line:column\fR etc.
  .ie n .IP """quote=""" 4
! .el .IP "\f(CWquote=\fR" 4
  .IX Item "quote="
! \&\s-1SGR\s0 substring for information printed within quotes.
  .ie n .IP """fnname=""" 4
! .el .IP "\f(CWfnname=\fR" 4
  .IX Item "fnname="
! \&\s-1SGR\s0 substring for names of \*(C+ functions.
  .ie n .IP """targs=""" 4
! .el .IP "\f(CWtargs=\fR" 4
  .IX Item "targs="
! \&\s-1SGR\s0 substring for \*(C+ function template parameter bindings.
  .ie n .IP """fixit\-insert=""" 4
! .el .IP "\f(CWfixit\-insert=\fR" 4
  .IX Item "fixit-insert="
! \&\s-1SGR\s0 substring for fix-it hints suggesting text to
  be inserted or replaced.
  .ie n .IP """fixit\-delete=""" 4
! .el .IP "\f(CWfixit\-delete=\fR" 4
  .IX Item "fixit-delete="
! \&\s-1SGR\s0 substring for fix-it hints suggesting text to
  be deleted.
  .ie n .IP """diff\-filename=""" 4
! .el .IP "\f(CWdiff\-filename=\fR" 4
  .IX Item "diff-filename="
! \&\s-1SGR\s0 substring for filename headers within generated patches.
  .ie n .IP """diff\-hunk=""" 4
! .el .IP "\f(CWdiff\-hunk=\fR" 4
  .IX Item "diff-hunk="
! \&\s-1SGR\s0 substring for the starts of hunks within generated patches.
  .ie n .IP """diff\-delete=""" 4
! .el .IP "\f(CWdiff\-delete=\fR" 4
  .IX Item "diff-delete="
! \&\s-1SGR\s0 substring for deleted lines within generated patches.
  .ie n .IP """diff\-insert=""" 4
! .el .IP "\f(CWdiff\-insert=\fR" 4
  .IX Item "diff-insert="
! \&\s-1SGR\s0 substring for inserted lines within generated patches.
  .ie n .IP """type\-diff=""" 4
! .el .IP "\f(CWtype\-diff=\fR" 4
  .IX Item "type-diff="
! \&\s-1SGR\s0 substring for highlighting mismatching types within template
! arguments in the \*(C+ frontend.
  .ie n .IP """valid=""" 4
! .el .IP "\f(CWvalid=\fR" 4
  .IX Item "valid="
! \&\s-1SGR\s0 substring for highlighting valid elements within text art diagrams.
  .ie n .IP """invalid=""" 4
! .el .IP "\f(CWinvalid=\fR" 4
  .IX Item "invalid="
! \&\s-1SGR\s0 substring for highlighting invalid elements within text art diagrams.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdiagnostics\-urls[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
  .IX Item "-fdiagnostics-urls[=WHEN]"
  Use escape sequences to embed URLs in diagnostics.  For example, when
! \&\fB\-fdiagnostics\-show\-option\fR emits text showing the command-line
! option controlling a diagnostic, embed a \s-1URL\s0 for documentation of that
  option.
  .Sp
! \&\fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR, or \fBauto\fR.
! \&\fBauto\fR makes \s-1GCC\s0 use \s-1URL\s0 escape sequences only when the standard error
  is a terminal, and when not executing in an emacs shell or any graphical
  terminal which is known to be incompatible with this feature, see below.
  .Sp
  The default depends on how the compiler has been configured.
! It can be any of the above \fI\s-1WHEN\s0\fR options.
  .Sp
! \&\s-1GCC\s0 can also be configured (via the
! \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR configure-time option)
  so that the default is affected by environment variables.
! Under such a configuration, \s-1GCC\s0 defaults to using \fBauto\fR
! if either \fB\s-1GCC_URLS\s0\fR or \fB\s-1TERM_URLS\s0\fR environment variables are
! present and non-empty in the environment of the compiler, or \fBnever\fR
  if neither are.
  .Sp
  However, even with \fB\-fdiagnostics\-urls=always\fR the behavior is
  dependent on those environment variables:
! If \fB\s-1GCC_URLS\s0\fR is set to empty or \fBno\fR, do not embed URLs in
! diagnostics.  If set to \fBst\fR, URLs use \s-1ST\s0 escape sequences.
! If set to \fBbel\fR, the default, URLs use \s-1BEL\s0 escape sequences.
! Any other non-empty value enables the feature.
! If \fB\s-1GCC_URLS\s0\fR is not set, use \fB\s-1TERM_URLS\s0\fR as a fallback.
! Note: \s-1ST\s0 is an \s-1ANSI\s0 escape sequence, string terminator \fB\s-1ESC\s0 \e\fR,
! \&\s-1BEL\s0 is an \s-1ASCII\s0 character, CTRL-G that usually sounds like a beep.
  .Sp
! At this time \s-1GCC\s0 tries to detect also a few terminals that are known to
! not implement the \s-1URL\s0 feature, and have bugs or at least had bugs in
! some versions that are still in use, where the \s-1URL\s0 escapes are likely
  to misbehave, i.e. print garbage on the screen.
  That list is currently xfce4\-terminal, certain known to be buggy
! gnome-terminal versions, the linux console, and mingw.
  This check can be skipped with the \fB\-fdiagnostics\-urls=always\fR.
! .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
  .IX Item "-fno-diagnostics-show-option"
  By default, each diagnostic emitted includes text indicating the
! command-line option that directly controls the diagnostic (if such an
  option is known to the diagnostic machinery).  Specifying the
  \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
! .IP "\fB\-fno\-diagnostics\-show\-caret\fR" 4
  .IX Item "-fno-diagnostics-show-caret"
  By default, each diagnostic emitted includes the original source line
  and a caret \fB^\fR indicating the column.  This option suppresses this
  information.  The source line is truncated to \fIn\fR characters, if
  the \fB\-fmessage\-length=n\fR option is given.  When the output is done
  to the terminal, the width is limited to the width given by the
! \&\fB\s-1COLUMNS\s0\fR environment variable or, if not set, to the terminal width.
! .IP "\fB\-fno\-diagnostics\-show\-labels\fR" 4
  .IX Item "-fno-diagnostics-show-labels"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  diagnostics can label ranges of source code with pertinent information, such
--- 4987,5135 ----
  where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
  \&\fB01;36\fR is bold cyan, \fB32\fR is green, \fB34\fR is blue,
  \&\fB01\fR is bold, and \fB31\fR is red.
! Setting \fBGCC_COLORS\fR to the empty string disables colors.
  Supported capabilities are as follows.
  .RS 4
  .ie n .IP """error=""" 4
! .el .IP \f(CWerror=\fR 4
  .IX Item "error="
! SGR substring for error: markers.
  .ie n .IP """warning=""" 4
! .el .IP \f(CWwarning=\fR 4
  .IX Item "warning="
! SGR substring for warning: markers.
  .ie n .IP """note=""" 4
! .el .IP \f(CWnote=\fR 4
  .IX Item "note="
! SGR substring for note: markers.
  .ie n .IP """path=""" 4
! .el .IP \f(CWpath=\fR 4
  .IX Item "path="
! SGR substring for colorizing paths of control\-flow events as printed
  via \fB\-fdiagnostics\-path\-format=\fR, such as the identifiers of
  individual events and lines indicating interprocedural calls and returns.
  .ie n .IP """range1=""" 4
! .el .IP \f(CWrange1=\fR 4
  .IX Item "range1="
! SGR substring for first additional range.
  .ie n .IP """range2=""" 4
! .el .IP \f(CWrange2=\fR 4
  .IX Item "range2="
! SGR substring for second additional range.
  .ie n .IP """locus=""" 4
! .el .IP \f(CWlocus=\fR 4
  .IX Item "locus="
! SGR substring for location information, \fBfile:line\fR or
  \&\fBfile:line:column\fR etc.
  .ie n .IP """quote=""" 4
! .el .IP \f(CWquote=\fR 4
  .IX Item "quote="
! SGR substring for information printed within quotes.
  .ie n .IP """fnname=""" 4
! .el .IP \f(CWfnname=\fR 4
  .IX Item "fnname="
! SGR substring for names of C++ functions.
  .ie n .IP """targs=""" 4
! .el .IP \f(CWtargs=\fR 4
  .IX Item "targs="
! SGR substring for C++ function template parameter bindings.
  .ie n .IP """fixit\-insert=""" 4
! .el .IP \f(CWfixit\-insert=\fR 4
  .IX Item "fixit-insert="
! SGR substring for fix\-it hints suggesting text to
  be inserted or replaced.
  .ie n .IP """fixit\-delete=""" 4
! .el .IP \f(CWfixit\-delete=\fR 4
  .IX Item "fixit-delete="
! SGR substring for fix\-it hints suggesting text to
  be deleted.
  .ie n .IP """diff\-filename=""" 4
! .el .IP \f(CWdiff\-filename=\fR 4
  .IX Item "diff-filename="
! SGR substring for filename headers within generated patches.
  .ie n .IP """diff\-hunk=""" 4
! .el .IP \f(CWdiff\-hunk=\fR 4
  .IX Item "diff-hunk="
! SGR substring for the starts of hunks within generated patches.
  .ie n .IP """diff\-delete=""" 4
! .el .IP \f(CWdiff\-delete=\fR 4
  .IX Item "diff-delete="
! SGR substring for deleted lines within generated patches.
  .ie n .IP """diff\-insert=""" 4
! .el .IP \f(CWdiff\-insert=\fR 4
  .IX Item "diff-insert="
! SGR substring for inserted lines within generated patches.
  .ie n .IP """type\-diff=""" 4
! .el .IP \f(CWtype\-diff=\fR 4
  .IX Item "type-diff="
! SGR substring for highlighting mismatching types within template
! arguments in the C++ frontend.
  .ie n .IP """valid=""" 4
! .el .IP \f(CWvalid=\fR 4
  .IX Item "valid="
! SGR substring for highlighting valid elements within text art diagrams.
  .ie n .IP """invalid=""" 4
! .el .IP \f(CWinvalid=\fR 4
  .IX Item "invalid="
! SGR substring for highlighting invalid elements within text art diagrams.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdiagnostics\-urls[=\fR\fIWHEN\fR\fB]\fR 4
  .IX Item "-fdiagnostics-urls[=WHEN]"
  Use escape sequences to embed URLs in diagnostics.  For example, when
! \&\fB\-fdiagnostics\-show\-option\fR emits text showing the command\-line
! option controlling a diagnostic, embed a URL for documentation of that
  option.
  .Sp
! \&\fIWHEN\fR is \fBnever\fR, \fBalways\fR, or \fBauto\fR.
! \&\fBauto\fR makes GCC use URL escape sequences only when the standard error
  is a terminal, and when not executing in an emacs shell or any graphical
  terminal which is known to be incompatible with this feature, see below.
  .Sp
  The default depends on how the compiler has been configured.
! It can be any of the above \fIWHEN\fR options.
  .Sp
! GCC can also be configured (via the
! \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR configure\-time option)
  so that the default is affected by environment variables.
! Under such a configuration, GCC defaults to using \fBauto\fR
! if either \fBGCC_URLS\fR or \fBTERM_URLS\fR environment variables are
! present and non\-empty in the environment of the compiler, or \fBnever\fR
  if neither are.
  .Sp
  However, even with \fB\-fdiagnostics\-urls=always\fR the behavior is
  dependent on those environment variables:
! If \fBGCC_URLS\fR is set to empty or \fBno\fR, do not embed URLs in
! diagnostics.  If set to \fBst\fR, URLs use ST escape sequences.
! If set to \fBbel\fR, the default, URLs use BEL escape sequences.
! Any other non\-empty value enables the feature.
! If \fBGCC_URLS\fR is not set, use \fBTERM_URLS\fR as a fallback.
! Note: ST is an ANSI escape sequence, string terminator \fBESC \e\fR,
! BEL is an ASCII character, CTRL\-G that usually sounds like a beep.
  .Sp
! At this time GCC tries to detect also a few terminals that are known to
! not implement the URL feature, and have bugs or at least had bugs in
! some versions that are still in use, where the URL escapes are likely
  to misbehave, i.e. print garbage on the screen.
  That list is currently xfce4\-terminal, certain known to be buggy
! gnome\-terminal versions, the linux console, and mingw.
  This check can be skipped with the \fB\-fdiagnostics\-urls=always\fR.
! .IP \fB\-fno\-diagnostics\-show\-option\fR 4
  .IX Item "-fno-diagnostics-show-option"
  By default, each diagnostic emitted includes text indicating the
! command\-line option that directly controls the diagnostic (if such an
  option is known to the diagnostic machinery).  Specifying the
  \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
! .IP \fB\-fno\-diagnostics\-show\-caret\fR 4
  .IX Item "-fno-diagnostics-show-caret"
  By default, each diagnostic emitted includes the original source line
  and a caret \fB^\fR indicating the column.  This option suppresses this
  information.  The source line is truncated to \fIn\fR characters, if
  the \fB\-fmessage\-length=n\fR option is given.  When the output is done
  to the terminal, the width is limited to the width given by the
! \&\fBCOLUMNS\fR environment variable or, if not set, to the terminal width.
! .IP \fB\-fno\-diagnostics\-show\-labels\fR 4
  .IX Item "-fno-diagnostics-show-labels"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  diagnostics can label ranges of source code with pertinent information, such
*************** as the types of expressions:
*** 5210,5253 ****
  .Ve
  .Sp
  This option suppresses the printing of these labels (in the example above,
! the vertical bars and the \*(L"char *\*(R" and \*(L"long int\*(R" text).
! .IP "\fB\-fno\-diagnostics\-show\-cwe\fR" 4
  .IX Item "-fno-diagnostics-show-cwe"
  Diagnostic messages can optionally have an associated
!  \s-1CWE\s0 (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) identifier.
! \&\s-1GCC\s0 itself only provides such metadata for some of the \fB\-fanalyzer\fR
! diagnostics.  \s-1GCC\s0 plugins may also provide diagnostics with such metadata.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP "\fB\-fno\-diagnostics\-show\-rules\fR" 4
  .IX Item "-fno-diagnostics-show-rules"
  Diagnostic messages can optionally have rules associated with them, such
  as from a coding standard, or a specification.
! \&\s-1GCC\s0 itself does not do this for any of its diagnostics, but plugins may do so.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP "\fB\-fno\-diagnostics\-show\-line\-numbers\fR" 4
  .IX Item "-fno-diagnostics-show-line-numbers"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  a left margin is printed, showing line numbers.  This option suppresses this
  left margin.
! .IP "\fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR" 4
  .IX Item "-fdiagnostics-minimum-margin-width=width"
  This option controls the minimum width of the left margin printed by
  \&\fB\-fdiagnostics\-show\-line\-numbers\fR.  It defaults to 6.
! .IP "\fB\-fdiagnostics\-parseable\-fixits\fR" 4
  .IX Item "-fdiagnostics-parseable-fixits"
! Emit fix-it hints in a machine-parseable format, suitable for consumption
! by IDEs.  For each fix-it, a line will be printed after the relevant
! diagnostic, starting with the string \*(L"fix-it:\*(R".  For example:
  .Sp
  .Vb 1
  \&        fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all"
  .Ve
  .Sp
! The location is expressed as a half-open range, expressed as a count of
  bytes, starting at byte 1 for the initial column.  In the above example,
! bytes 3 through 20 of line 45 of \*(L"test.c\*(R" are to be replaced with the
  given string:
  .Sp
  .Vb 5
--- 5143,5186 ----
  .Ve
  .Sp
  This option suppresses the printing of these labels (in the example above,
! the vertical bars and the "char *" and "long int" text).
! .IP \fB\-fno\-diagnostics\-show\-cwe\fR 4
  .IX Item "-fno-diagnostics-show-cwe"
  Diagnostic messages can optionally have an associated
!  CWE (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) identifier.
! GCC itself only provides such metadata for some of the \fB\-fanalyzer\fR
! diagnostics.  GCC plugins may also provide diagnostics with such metadata.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP \fB\-fno\-diagnostics\-show\-rules\fR 4
  .IX Item "-fno-diagnostics-show-rules"
  Diagnostic messages can optionally have rules associated with them, such
  as from a coding standard, or a specification.
! GCC itself does not do this for any of its diagnostics, but plugins may do so.
  By default, if this information is present, it will be printed with
  the diagnostic.  This option suppresses the printing of this metadata.
! .IP \fB\-fno\-diagnostics\-show\-line\-numbers\fR 4
  .IX Item "-fno-diagnostics-show-line-numbers"
  By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
  a left margin is printed, showing line numbers.  This option suppresses this
  left margin.
! .IP \fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR 4
  .IX Item "-fdiagnostics-minimum-margin-width=width"
  This option controls the minimum width of the left margin printed by
  \&\fB\-fdiagnostics\-show\-line\-numbers\fR.  It defaults to 6.
! .IP \fB\-fdiagnostics\-parseable\-fixits\fR 4
  .IX Item "-fdiagnostics-parseable-fixits"
! Emit fix\-it hints in a machine\-parseable format, suitable for consumption
! by IDEs.  For each fix\-it, a line will be printed after the relevant
! diagnostic, starting with the string "fix\-it:".  For example:
  .Sp
  .Vb 1
  \&        fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all"
  .Ve
  .Sp
! The location is expressed as a half\-open range, expressed as a count of
  bytes, starting at byte 1 for the initial column.  In the above example,
! bytes 3 through 20 of line 45 of "test.c" are to be replaced with the
  given string:
  .Sp
  .Vb 5
*************** given string:
*** 5258,5273 ****
  \&          gtk_widget_show_all
  .Ve
  .Sp
! The filename and replacement string escape backslash as \*(L"\e\e\*(R", tab as \*(L"\et\*(R",
! newline as \*(L"\en\*(R", double quotes as \*(L"\e\*(R"\*(L", non-printable characters as octal
! (e.g. vertical tab as \*(R"\e013").
  .Sp
  An empty replacement string indicates that the given range is to be removed.
! An empty range (e.g. \*(L"45:3\-45:3\*(R") indicates that the string is to
  be inserted at the given position.
! .IP "\fB\-fdiagnostics\-generate\-patch\fR" 4
  .IX Item "-fdiagnostics-generate-patch"
! Print fix-it hints to stderr in unified diff format, after any diagnostics
  are printed.  For example:
  .Sp
  .Vb 3
--- 5191,5206 ----
  \&          gtk_widget_show_all
  .Ve
  .Sp
! The filename and replacement string escape backslash as "\e\e", tab as "\et",
! newline as "\en", double quotes as "\e"", non\-printable characters as octal
! (e.g. vertical tab as "\e013").
  .Sp
  An empty replacement string indicates that the given range is to be removed.
! An empty range (e.g. "45:3\-45:3") indicates that the string is to
  be inserted at the given position.
! .IP \fB\-fdiagnostics\-generate\-patch\fR 4
  .IX Item "-fdiagnostics-generate-patch"
! Print fix\-it hints to stderr in unified diff format, after any diagnostics
  are printed.  For example:
  .Sp
  .Vb 3
*************** are printed.  For example:
*** 5284,5292 ****
  .Sp
  The diff may or may not be colorized, following the same rules
  as for diagnostics (see \fB\-fdiagnostics\-color\fR).
! .IP "\fB\-fdiagnostics\-show\-template\-tree\fR" 4
  .IX Item "-fdiagnostics-show-template-tree"
! In the \*(C+ frontend, when printing diagnostics showing mismatching
  template types, such as:
  .Sp
  .Vb 2
--- 5217,5225 ----
  .Sp
  The diff may or may not be colorized, following the same rules
  as for diagnostics (see \fB\-fdiagnostics\-color\fR).
! .IP \fB\-fdiagnostics\-show\-template\-tree\fR 4
  .IX Item "-fdiagnostics-show-template-tree"
! In the C++ frontend, when printing diagnostics showing mismatching
  template types, such as:
  .Sp
  .Vb 2
*************** template types, such as:
*** 5295,5301 ****
  .Ve
  .Sp
  the \fB\-fdiagnostics\-show\-template\-tree\fR flag enables printing a
! tree-like structure showing the common and differing parts of the types,
  such as:
  .Sp
  .Vb 4
--- 5228,5234 ----
  .Ve
  .Sp
  the \fB\-fdiagnostics\-show\-template\-tree\fR flag enables printing a
! tree\-like structure showing the common and differing parts of the types,
  such as:
  .Sp
  .Vb 4
*************** such as:
*** 5305,5316 ****
  \&              [double != float]>>
  .Ve
  .Sp
! The parts that differ are highlighted with color (\*(L"double\*(R" and
! \&\*(L"float\*(R" in this case).
! .IP "\fB\-fno\-elide\-type\fR" 4
  .IX Item "-fno-elide-type"
! By default when the \*(C+ frontend prints diagnostics showing mismatching
! template types, common parts of the types are printed as \*(L"[...]\*(R" to
  simplify the error message.  For example:
  .Sp
  .Vb 2
--- 5238,5249 ----
  \&              [double != float]>>
  .Ve
  .Sp
! The parts that differ are highlighted with color ("double" and
! "float" in this case).
! .IP \fB\-fno\-elide\-type\fR 4
  .IX Item "-fno-elide-type"
! By default when the C++ frontend prints diagnostics showing mismatching
! template types, common parts of the types are printed as "[...]" to
  simplify the error message.  For example:
  .Sp
  .Vb 2
*************** simplify the error message.  For example
*** 5321,5337 ****
  Specifying the \fB\-fno\-elide\-type\fR flag suppresses that behavior.
  This flag also affects the output of the
  \&\fB\-fdiagnostics\-show\-template\-tree\fR flag.
! .IP "\fB\-fdiagnostics\-path\-format=\fR\fI\s-1KIND\s0\fR" 4
  .IX Item "-fdiagnostics-path-format=KIND"
! Specify how to print paths of control-flow events for diagnostics that
  have such a path associated with them.
  .Sp
! \&\fI\s-1KIND\s0\fR is \fBnone\fR, \fBseparate-events\fR, or \fBinline-events\fR,
  the default.
  .Sp
  \&\fBnone\fR means to not print diagnostic paths.
  .Sp
! \&\fBseparate-events\fR means to print a separate \*(L"note\*(R" diagnostic for
  each event within the diagnostic.  For example:
  .Sp
  .Vb 4
--- 5254,5270 ----
  Specifying the \fB\-fno\-elide\-type\fR flag suppresses that behavior.
  This flag also affects the output of the
  \&\fB\-fdiagnostics\-show\-template\-tree\fR flag.
! .IP \fB\-fdiagnostics\-path\-format=\fR\fIKIND\fR 4
  .IX Item "-fdiagnostics-path-format=KIND"
! Specify how to print paths of control\-flow events for diagnostics that
  have such a path associated with them.
  .Sp
! \&\fIKIND\fR is \fBnone\fR, \fBseparate\-events\fR, or \fBinline\-events\fR,
  the default.
  .Sp
  \&\fBnone\fR means to not print diagnostic paths.
  .Sp
! \&\fBseparate\-events\fR means to print a separate "note" diagnostic for
  each event within the diagnostic.  For example:
  .Sp
  .Vb 4
*************** each event within the diagnostic.  For e
*** 5341,5349 ****
  \&        test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1
  .Ve
  .Sp
! \&\fBinline-events\fR means to print the events \*(L"inline\*(R" within the source
  code.  This view attempts to consolidate the events into runs of
! sufficiently-close events, printing them as labelled ranges within the source.
  .Sp
  For example, the same events as above might be printed as:
  .Sp
--- 5274,5282 ----
  \&        test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1
  .Ve
  .Sp
! \&\fBinline\-events\fR means to print the events "inline" within the source
  code.  This view attempts to consolidate the events into runs of
! sufficiently\-close events, printing them as labelled ranges within the source.
  .Sp
  For example, the same events as above might be printed as:
  .Sp
*************** For example:
*** 5417,5425 ****
  \&            |
  \&        (etc)
  .Ve
! .IP "\fB\-fdiagnostics\-show\-path\-depths\fR" 4
  .IX Item "-fdiagnostics-show-path-depths"
! This option provides additional information when printing control-flow paths
  associated with a diagnostic.
  .Sp
  If this is option is provided then the stack depth will be printed for
--- 5350,5358 ----
  \&            |
  \&        (etc)
  .Ve
! .IP \fB\-fdiagnostics\-show\-path\-depths\fR 4
  .IX Item "-fdiagnostics-show-path-depths"
! This option provides additional information when printing control\-flow paths
  associated with a diagnostic.
  .Sp
  If this is option is provided then the stack depth will be printed for
*************** If provided with \fB\-fdiagnostics\-path
*** 5428,5531 ****
  the stack depth and function declaration will be appended when printing
  each event.
  .Sp
! This is intended for use by \s-1GCC\s0 developers and plugin developers when
  debugging diagnostics that report interprocedural control flow.
! .IP "\fB\-fno\-show\-column\fR" 4
  .IX Item "-fno-show-column"
  Do not print column numbers in diagnostics.  This may be necessary if
  diagnostics are being scanned by a program that does not understand the
  column numbers, such as \fBdejagnu\fR.
! .IP "\fB\-fdiagnostics\-column\-unit=\fR\fI\s-1UNIT\s0\fR" 4
  .IX Item "-fdiagnostics-column-unit=UNIT"
  Select the units for the column number.  This affects traditional diagnostics
! (in the absence of \fB\-fno\-show\-column\fR), as well as \s-1JSON\s0 format
  diagnostics if requested.
  .Sp
! The default \fI\s-1UNIT\s0\fR, \fBdisplay\fR, considers the number of display
  columns occupied by each character.  This may be larger than the number
  of bytes required to encode the character, in the case of tab
  characters, or it may be smaller, in the case of multibyte characters.
! For example, the character \*(L"\s-1GREEK SMALL LETTER PI\s0 (U+03C0)\*(R" occupies one
! display column, and its \s-1UTF\-8\s0 encoding requires two bytes; the character
! \&\*(L"\s-1SLIGHTLY SMILING FACE\s0 (U+1F642)\*(R" occupies two display columns, and
! its \s-1UTF\-8\s0 encoding requires four bytes.
  .Sp
! Setting \fI\s-1UNIT\s0\fR to \fBbyte\fR changes the column number to the raw byte
! count in all cases, as was traditionally output by \s-1GCC\s0 prior to version 11.1.0.
! .IP "\fB\-fdiagnostics\-column\-origin=\fR\fI\s-1ORIGIN\s0\fR" 4
  .IX Item "-fdiagnostics-column-origin=ORIGIN"
  Select the origin for column numbers, i.e. the column number assigned to the
! first column.  The default value of 1 corresponds to traditional \s-1GCC\s0
! behavior and to the \s-1GNU\s0 style guide.  Some utilities may perform better with an
! origin of 0; any non-negative value may be specified.
! .IP "\fB\-fdiagnostics\-escape\-format=\fR\fI\s-1FORMAT\s0\fR" 4
  .IX Item "-fdiagnostics-escape-format=FORMAT"
! When \s-1GCC\s0 prints pertinent source lines for a diagnostic it normally attempts
  to print the source bytes directly.  However, some diagnostics relate to encoding
! issues in the source file, such as malformed \s-1UTF\-8,\s0 or issues with Unicode
! normalization.  These diagnostics are flagged so that \s-1GCC\s0 will escape bytes
! that are not printable \s-1ASCII\s0 when printing their pertinent source lines.
  .Sp
  This option controls how such bytes should be escaped.
  .Sp
! The default \fI\s-1FORMAT\s0\fR, \fBunicode\fR displays Unicode characters that
! are not printable \s-1ASCII\s0 in the form \fB<U+XXXX>\fR, and bytes that do not
! correspond to a Unicode character validly-encoded in UTF\-8\-encoded will be
! displayed as hexadecimal in the form \fB<\s-1XX\s0>\fR.
  .Sp
  For example, a source line containing the string \fBbefore\fR followed by the
! Unicode character U+03C0 (\*(L"\s-1GREEK SMALL LETTER PI\*(R",\s0 with \s-1UTF\-8\s0 encoding
! 0xCF 0x80) followed by the byte 0xBF (a stray \s-1UTF\-8\s0 trailing byte), followed by
  the string \fBafter\fR will be printed for such a diagnostic as:
  .Sp
  .Vb 1
  \&         before<U+03C0><BF>after
  .Ve
  .Sp
! Setting \fI\s-1FORMAT\s0\fR to \fBbytes\fR will display all non-printable-ASCII bytes
! in the form \fB<\s-1XX\s0>\fR, thus showing the underlying encoding of non-ASCII
  Unicode characters.  For the example above, the following will be printed:
  .Sp
  .Vb 1
  \&         before<CF><80><BF>after
  .Ve
! .IP "\fB\-fdiagnostics\-text\-art\-charset=\fR\fI\s-1CHARSET\s0\fR" 4
  .IX Item "-fdiagnostics-text-art-charset=CHARSET"
! Some diagnostics can contain \*(L"text art\*(R" diagrams: visualizations created
  from text, intended to be viewed in a monospaced font.
  .Sp
  This option selects which characters should be used for printing such
! diagrams, if any.  \fI\s-1CHARSET\s0\fR is \fBnone\fR, \fBascii\fR, \fBunicode\fR,
  or \fBemoji\fR.
  .Sp
  The \fBnone\fR value suppresses the printing of such diagrams.
! The \fBascii\fR value will ensure that such diagrams are pure \s-1ASCII\s0
! (\*(L"\s-1ASCII\s0 art\*(R").  The \fBunicode\fR value will allow for conservative use of
! unicode drawing characters (such as box-drawing characters).  The \fBemoji\fR
  value further adds the possibility of emoji in the output (such as emitting
! U+26A0 \s-1WARNING SIGN\s0 followed by U+FE0F \s-1VARIATION SELECTOR\-16\s0 to select the
  emoji variant of the character).
  .Sp
! The default is \fBemoji\fR, except when the environment variable \fB\s-1LANG\s0\fR
  is set to \fBC\fR, in which case the default is \fBascii\fR.
! .IP "\fB\-fdiagnostics\-format=\fR\fI\s-1FORMAT\s0\fR" 4
  .IX Item "-fdiagnostics-format=FORMAT"
  Select a different format for printing diagnostics.
! \&\fI\s-1FORMAT\s0\fR is \fBtext\fR, \fBsarif-stderr\fR, \fBsarif-file\fR,
! \&\fBjson\fR, \fBjson-stderr\fR, or \fBjson-file\fR.
  .Sp
  The default is \fBtext\fR.
  .Sp
! The \fBsarif-stderr\fR and \fBsarif-file\fR formats both emit
! diagnostics in \s-1SARIF\s0 Version 2.1.0 format, either to stderr, or to a file
! named \fI\fIsource\fI.sarif\fR, respectively.
  .Sp
! The \fBjson\fR format is a synonym for \fBjson-stderr\fR.
! The \fBjson-stderr\fR and \fBjson-file\fR formats are identical, apart from
! where the \s-1JSON\s0 is emitted to \- with the former, the \s-1JSON\s0 is emitted to stderr,
! whereas with \fBjson-file\fR it is written to \fI\fIsource\fI.gcc.json\fR.
  .Sp
! The emitted \s-1JSON\s0 consists of a top-level \s-1JSON\s0 array containing \s-1JSON\s0 objects
  representing the diagnostics.
  .Sp
  Diagnostics can have child diagnostics.  For example, this error and note:
--- 5361,5464 ----
  the stack depth and function declaration will be appended when printing
  each event.
  .Sp
! This is intended for use by GCC developers and plugin developers when
  debugging diagnostics that report interprocedural control flow.
! .IP \fB\-fno\-show\-column\fR 4
  .IX Item "-fno-show-column"
  Do not print column numbers in diagnostics.  This may be necessary if
  diagnostics are being scanned by a program that does not understand the
  column numbers, such as \fBdejagnu\fR.
! .IP \fB\-fdiagnostics\-column\-unit=\fR\fIUNIT\fR 4
  .IX Item "-fdiagnostics-column-unit=UNIT"
  Select the units for the column number.  This affects traditional diagnostics
! (in the absence of \fB\-fno\-show\-column\fR), as well as JSON format
  diagnostics if requested.
  .Sp
! The default \fIUNIT\fR, \fBdisplay\fR, considers the number of display
  columns occupied by each character.  This may be larger than the number
  of bytes required to encode the character, in the case of tab
  characters, or it may be smaller, in the case of multibyte characters.
! For example, the character "GREEK SMALL LETTER PI (U+03C0)" occupies one
! display column, and its UTF\-8 encoding requires two bytes; the character
! "SLIGHTLY SMILING FACE (U+1F642)" occupies two display columns, and
! its UTF\-8 encoding requires four bytes.
  .Sp
! Setting \fIUNIT\fR to \fBbyte\fR changes the column number to the raw byte
! count in all cases, as was traditionally output by GCC prior to version 11.1.0.
! .IP \fB\-fdiagnostics\-column\-origin=\fR\fIORIGIN\fR 4
  .IX Item "-fdiagnostics-column-origin=ORIGIN"
  Select the origin for column numbers, i.e. the column number assigned to the
! first column.  The default value of 1 corresponds to traditional GCC
! behavior and to the GNU style guide.  Some utilities may perform better with an
! origin of 0; any non\-negative value may be specified.
! .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4
  .IX Item "-fdiagnostics-escape-format=FORMAT"
! When GCC prints pertinent source lines for a diagnostic it normally attempts
  to print the source bytes directly.  However, some diagnostics relate to encoding
! issues in the source file, such as malformed UTF\-8, or issues with Unicode
! normalization.  These diagnostics are flagged so that GCC will escape bytes
! that are not printable ASCII when printing their pertinent source lines.
  .Sp
  This option controls how such bytes should be escaped.
  .Sp
! The default \fIFORMAT\fR, \fBunicode\fR displays Unicode characters that
! are not printable ASCII in the form \fB<U+XXXX>\fR, and bytes that do not
! correspond to a Unicode character validly\-encoded in UTF\-8\-encoded will be
! displayed as hexadecimal in the form \fB<XX>\fR.
  .Sp
  For example, a source line containing the string \fBbefore\fR followed by the
! Unicode character U+03C0 ("GREEK SMALL LETTER PI", with UTF\-8 encoding
! 0xCF 0x80) followed by the byte 0xBF (a stray UTF\-8 trailing byte), followed by
  the string \fBafter\fR will be printed for such a diagnostic as:
  .Sp
  .Vb 1
  \&         before<U+03C0><BF>after
  .Ve
  .Sp
! Setting \fIFORMAT\fR to \fBbytes\fR will display all non\-printable\-ASCII bytes
! in the form \fB<XX>\fR, thus showing the underlying encoding of non\-ASCII
  Unicode characters.  For the example above, the following will be printed:
  .Sp
  .Vb 1
  \&         before<CF><80><BF>after
  .Ve
! .IP \fB\-fdiagnostics\-text\-art\-charset=\fR\fICHARSET\fR 4
  .IX Item "-fdiagnostics-text-art-charset=CHARSET"
! Some diagnostics can contain "text art" diagrams: visualizations created
  from text, intended to be viewed in a monospaced font.
  .Sp
  This option selects which characters should be used for printing such
! diagrams, if any.  \fICHARSET\fR is \fBnone\fR, \fBascii\fR, \fBunicode\fR,
  or \fBemoji\fR.
  .Sp
  The \fBnone\fR value suppresses the printing of such diagrams.
! The \fBascii\fR value will ensure that such diagrams are pure ASCII
! ("ASCII art").  The \fBunicode\fR value will allow for conservative use of
! unicode drawing characters (such as box\-drawing characters).  The \fBemoji\fR
  value further adds the possibility of emoji in the output (such as emitting
! U+26A0 WARNING SIGN followed by U+FE0F VARIATION SELECTOR\-16 to select the
  emoji variant of the character).
  .Sp
! The default is \fBemoji\fR, except when the environment variable \fBLANG\fR
  is set to \fBC\fR, in which case the default is \fBascii\fR.
! .IP \fB\-fdiagnostics\-format=\fR\fIFORMAT\fR 4
  .IX Item "-fdiagnostics-format=FORMAT"
  Select a different format for printing diagnostics.
! \&\fIFORMAT\fR is \fBtext\fR, \fBsarif\-stderr\fR, \fBsarif\-file\fR,
! \&\fBjson\fR, \fBjson\-stderr\fR, or \fBjson\-file\fR.
  .Sp
  The default is \fBtext\fR.
  .Sp
! The \fBsarif\-stderr\fR and \fBsarif\-file\fR formats both emit
! diagnostics in SARIF Version 2.1.0 format, either to stderr, or to a file
! named \fIsource.sarif\fR, respectively.
  .Sp
! The \fBjson\fR format is a synonym for \fBjson\-stderr\fR.
! The \fBjson\-stderr\fR and \fBjson\-file\fR formats are identical, apart from
! where the JSON is emitted to \- with the former, the JSON is emitted to stderr,
! whereas with \fBjson\-file\fR it is written to \fIsource.gcc.json\fR.
  .Sp
! The emitted JSON consists of a top\-level JSON array containing JSON objects
  representing the diagnostics.
  .Sp
  Diagnostics can have child diagnostics.  For example, this error and note:
*************** Diagnostics can have child diagnostics.
*** 5541,5547 ****
  \&              |     ^
  .Ve
  .Sp
! might be printed in \s-1JSON\s0 form (after formatting) like this:
  .Sp
  .Vb 10
  \&        [
--- 5474,5480 ----
  \&              |     ^
  .Ve
  .Sp
! might be printed in JSON form (after formatting) like this:
  .Sp
  .Vb 10
  \&        [
*************** might be printed in \s-1JSON\s0 form (af
*** 5595,5601 ****
  where the \f(CW\*(C`note\*(C'\fR is a child of the \f(CW\*(C`warning\*(C'\fR.
  .Sp
  A diagnostic has a \f(CW\*(C`kind\*(C'\fR.  If this is \f(CW\*(C`warning\*(C'\fR, then there is
! an \f(CW\*(C`option\*(C'\fR key describing the command-line option controlling the
  warning.
  .Sp
  A diagnostic can contain zero or more locations.  Each location has an
--- 5528,5534 ----
  where the \f(CW\*(C`note\*(C'\fR is a child of the \f(CW\*(C`warning\*(C'\fR.
  .Sp
  A diagnostic has a \f(CW\*(C`kind\*(C'\fR.  If this is \f(CW\*(C`warning\*(C'\fR, then there is
! an \f(CW\*(C`option\*(C'\fR key describing the command\-line option controlling the
  warning.
  .Sp
  A diagnostic can contain zero or more locations.  Each location has an
*************** optional \f(CW\*(C`label\*(C'\fR string
*** 5604,5615 ****
  A position is described by a \f(CW\*(C`file\*(C'\fR name, a \f(CW\*(C`line\*(C'\fR number, and
  three numbers indicating a column position:
  .RS 4
! .IP "*" 4
  \&\f(CW\*(C`display\-column\*(C'\fR counts display columns, accounting for tabs and
  multibyte characters.
! .IP "*" 4
  \&\f(CW\*(C`byte\-column\*(C'\fR counts raw bytes.
! .IP "*" 4
  \&\f(CW\*(C`column\*(C'\fR is equal to one of
  the previous two, as dictated by the \fB\-fdiagnostics\-column\-unit\fR
  option.
--- 5537,5548 ----
  A position is described by a \f(CW\*(C`file\*(C'\fR name, a \f(CW\*(C`line\*(C'\fR number, and
  three numbers indicating a column position:
  .RS 4
! .IP * 4
  \&\f(CW\*(C`display\-column\*(C'\fR counts display columns, accounting for tabs and
  multibyte characters.
! .IP * 4
  \&\f(CW\*(C`byte\-column\*(C'\fR counts raw bytes.
! .IP * 4
  \&\f(CW\*(C`column\*(C'\fR is equal to one of
  the previous two, as dictated by the \fB\-fdiagnostics\-column\-unit\fR
  option.
*************** option.
*** 5619,5625 ****
  All three columns are relative to the origin specified by
  \&\fB\-fdiagnostics\-column\-origin\fR, which is typically equal to 1 but may
  be set, for instance, to 0 for compatibility with other utilities that
! number columns from 0.  The column origin is recorded in the \s-1JSON\s0 output in
  the \f(CW\*(C`column\-origin\*(C'\fR tag.  In the remaining examples below, the extra
  column number outputs have been omitted for brevity.
  .Sp
--- 5552,5558 ----
  All three columns are relative to the origin specified by
  \&\fB\-fdiagnostics\-column\-origin\fR, which is typically equal to 1 but may
  be set, for instance, to 0 for compatibility with other utilities that
! number columns from 0.  The column origin is recorded in the JSON output in
  the \f(CW\*(C`column\-origin\*(C'\fR tag.  In the remaining examples below, the extra
  column number outputs have been omitted for brevity.
  .Sp
*************** For example, this error:
*** 5635,5643 ****
  \&              |          S {aka struct s}
  .Ve
  .Sp
! has three locations.  Its primary location is at the \*(L"+\*(R" token at column
! 23.  It has two secondary locations, describing the left and right-hand sides
! of the expression, which have labels.  It might be printed in \s-1JSON\s0 form as:
  .Sp
  .Vb 10
  \&            {
--- 5568,5576 ----
  \&              |          S {aka struct s}
  .Ve
  .Sp
! has three locations.  Its primary location is at the "+" token at column
! 23.  It has two secondary locations, describing the left and right\-hand sides
! of the expression, which have labels.  It might be printed in JSON form as:
  .Sp
  .Vb 10
  \&            {
*************** of the expression, which have labels.  I
*** 5673,5682 ****
  \&            }
  .Ve
  .Sp
! If a diagnostic contains fix-it hints, it has a \f(CW\*(C`fixits\*(C'\fR array,
! consisting of half-open intervals, similar to the output of
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  For example, this diagnostic
! with a replacement fix-it hint:
  .Sp
  .Vb 5
  \&        demo.c:8:15: error: \*(Aqstruct s\*(Aq has no member named \*(Aqcolour\*(Aq; did you
--- 5606,5615 ----
  \&            }
  .Ve
  .Sp
! If a diagnostic contains fix\-it hints, it has a \f(CW\*(C`fixits\*(C'\fR array,
! consisting of half\-open intervals, similar to the output of
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  For example, this diagnostic
! with a replacement fix\-it hint:
  .Sp
  .Vb 5
  \&        demo.c:8:15: error: \*(Aqstruct s\*(Aq has no member named \*(Aqcolour\*(Aq; did you
*************** with a replacement fix-it hint:
*** 5686,5692 ****
  \&              |               color
  .Ve
  .Sp
! might be printed in \s-1JSON\s0 form as:
  .Sp
  .Vb 10
  \&            {
--- 5619,5625 ----
  \&              |               color
  .Ve
  .Sp
! might be printed in JSON form as:
  .Sp
  .Vb 10
  \&            {
*************** might be printed in \s-1JSON\s0 form as:
*** 5726,5737 ****
  \&            }
  .Ve
  .Sp
! where the fix-it hint suggests replacing the text from \f(CW\*(C`start\*(C'\fR up
! to but not including \f(CW\*(C`next\*(C'\fR with \f(CW\*(C`string\*(C'\fR's value.  Deletions
  are expressed via an empty value for \f(CW\*(C`string\*(C'\fR, insertions by
  having \f(CW\*(C`start\*(C'\fR equal \f(CW\*(C`next\*(C'\fR.
  .Sp
! If the diagnostic has a path of control-flow events associated with it,
  it has a \f(CW\*(C`path\*(C'\fR array of objects representing the events.  Each
  event object has a \f(CW\*(C`description\*(C'\fR string, a \f(CW\*(C`location\*(C'\fR object,
  along with a \f(CW\*(C`function\*(C'\fR string and a \f(CW\*(C`depth\*(C'\fR number for
--- 5659,5670 ----
  \&            }
  .Ve
  .Sp
! where the fix\-it hint suggests replacing the text from \f(CW\*(C`start\*(C'\fR up
! to but not including \f(CW\*(C`next\*(C'\fR with \f(CW\*(C`string\*(C'\fR\*(Aqs value.  Deletions
  are expressed via an empty value for \f(CW\*(C`string\*(C'\fR, insertions by
  having \f(CW\*(C`start\*(C'\fR equal \f(CW\*(C`next\*(C'\fR.
  .Sp
! If the diagnostic has a path of control\-flow events associated with it,
  it has a \f(CW\*(C`path\*(C'\fR array of objects representing the events.  Each
  event object has a \f(CW\*(C`description\*(C'\fR string, a \f(CW\*(C`location\*(C'\fR object,
  along with a \f(CW\*(C`function\*(C'\fR string and a \f(CW\*(C`depth\*(C'\fR number for
*************** stack depth relative to some baseline: t
*** 5741,5747 ****
  within the stack.
  .Sp
  For example, the intraprocedural example shown for
! \&\fB\-fdiagnostics\-path\-format=\fR might have this \s-1JSON\s0 for its path:
  .Sp
  .Vb 10
  \&            "path": [
--- 5674,5680 ----
  within the stack.
  .Sp
  For example, the intraprocedural example shown for
! \&\fB\-fdiagnostics\-path\-format=\fR might have this JSON for its path:
  .Sp
  .Vb 10
  \&            "path": [
*************** For example, the intraprocedural example
*** 5779,5829 ****
  .Ve
  .Sp
  Diagnostics have a boolean attribute \f(CW\*(C`escape\-source\*(C'\fR, hinting whether
! non-ASCII bytes should be escaped when printing the pertinent lines of
  source code (\f(CW\*(C`true\*(C'\fR for diagnostics involving source encoding issues).
  .RE
! .IP "\fB\-fno\-diagnostics\-json\-formatting\fR" 4
  .IX Item "-fno-diagnostics-json-formatting"
! By default, when \s-1JSON\s0 is emitted for diagnostics (via
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR,
  \&\fB\-fdiagnostics\-format=sarif\-file\fR,
  \&\fB\-fdiagnostics\-format=json\fR,
  \&\fB\-fdiagnostics\-format=json\-stderr\fR,
  \&\fB\-fdiagnostics\-format=json\-file\fR),
! \&\s-1GCC\s0 will add newlines and indentation to visually emphasize the
! hierarchical structure of the \s-1JSON.\s0
  .Sp
  Use \fB\-fno\-diagnostics\-json\-formatting\fR to suppress this whitespace.
  It must be passed before the option it is to affect.
  .Sp
  This is intended for compatibility with tools that do not expect the output
! to contain newlines, such as that emitted by older \s-1GCC\s0 releases.
  .SS "Options to Request or Suppress Warnings"
  .IX Subsection "Options to Request or Suppress Warnings"
  Warnings are diagnostic messages that report constructions that
  are not inherently erroneous but that are risky or suggest there
  may have been an error.
  .PP
! The following language-independent options do not enable specific
! warnings but control the kinds of diagnostics produced by \s-1GCC.\s0
! .IP "\fB\-fsyntax\-only\fR" 4
  .IX Item "-fsyntax-only"
! Check the code for syntax errors, but don't do anything beyond that.
! .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
! \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
  code.  If \fIn\fR is 0 (the default), there is no limit on the number
  of error messages produced.  If \fB\-Wfatal\-errors\fR is also
  specified, then \fB\-Wfatal\-errors\fR takes precedence over this
  option.
! .IP "\fB\-w\fR" 4
  .IX Item "-w"
  Inhibit all warning messages.
! .IP "\fB\-Werror\fR" 4
  .IX Item "-Werror"
  Make all warnings into errors.
! .IP "\fB\-Werror=\fR" 4
  .IX Item "-Werror="
  Make the specified warning into an error.  The specifier for a warning
  is appended; for example \fB\-Werror=switch\fR turns the warnings
--- 5712,5762 ----
  .Ve
  .Sp
  Diagnostics have a boolean attribute \f(CW\*(C`escape\-source\*(C'\fR, hinting whether
! non\-ASCII bytes should be escaped when printing the pertinent lines of
  source code (\f(CW\*(C`true\*(C'\fR for diagnostics involving source encoding issues).
  .RE
! .IP \fB\-fno\-diagnostics\-json\-formatting\fR 4
  .IX Item "-fno-diagnostics-json-formatting"
! By default, when JSON is emitted for diagnostics (via
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR,
  \&\fB\-fdiagnostics\-format=sarif\-file\fR,
  \&\fB\-fdiagnostics\-format=json\fR,
  \&\fB\-fdiagnostics\-format=json\-stderr\fR,
  \&\fB\-fdiagnostics\-format=json\-file\fR),
! GCC will add newlines and indentation to visually emphasize the
! hierarchical structure of the JSON.
  .Sp
  Use \fB\-fno\-diagnostics\-json\-formatting\fR to suppress this whitespace.
  It must be passed before the option it is to affect.
  .Sp
  This is intended for compatibility with tools that do not expect the output
! to contain newlines, such as that emitted by older GCC releases.
  .SS "Options to Request or Suppress Warnings"
  .IX Subsection "Options to Request or Suppress Warnings"
  Warnings are diagnostic messages that report constructions that
  are not inherently erroneous but that are risky or suggest there
  may have been an error.
  .PP
! The following language\-independent options do not enable specific
! warnings but control the kinds of diagnostics produced by GCC.
! .IP \fB\-fsyntax\-only\fR 4
  .IX Item "-fsyntax-only"
! Check the code for syntax errors, but don\*(Aqt do anything beyond that.
! .IP \fB\-fmax\-errors=\fR\fIn\fR 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
! GCC bails out rather than attempting to continue processing the source
  code.  If \fIn\fR is 0 (the default), there is no limit on the number
  of error messages produced.  If \fB\-Wfatal\-errors\fR is also
  specified, then \fB\-Wfatal\-errors\fR takes precedence over this
  option.
! .IP \fB\-w\fR 4
  .IX Item "-w"
  Inhibit all warning messages.
! .IP \fB\-Werror\fR 4
  .IX Item "-Werror"
  Make all warnings into errors.
! .IP \fB\-Werror=\fR 4
  .IX Item "-Werror="
  Make the specified warning into an error.  The specifier for a warning
  is appended; for example \fB\-Werror=switch\fR turns the warnings
*************** option that controls the warning.  That
*** 5842,5848 ****
  Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
  \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
  imply anything.
! .IP "\fB\-Wfatal\-errors\fR" 4
  .IX Item "-Wfatal-errors"
  This option causes the compiler to abort compilation on the first error
  occurred rather than trying to keep going and printing further error
--- 5775,5781 ----
  Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
  \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
  imply anything.
! .IP \fB\-Wfatal\-errors\fR 4
  .IX Item "-Wfatal-errors"
  This option causes the compiler to abort compilation on the first error
  occurred rather than trying to keep going and printing further error
*************** implicit declarations.  Each of these sp
*** 5854,5874 ****
  has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
  example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
  two forms, whichever is not the default.  For further
! language-specific options also refer to \fB\*(C+ Dialect Options\fR and
! \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
  Additional warnings can be produced by enabling the static analyzer;
  .PP
  Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
  options, such as \fB\-Wunused\fR, which may turn on further options,
  such as \fB\-Wunused\-value\fR. The combined effect of positive and
  negative forms is that more specific options have priority over less
! specific ones, independently of their position in the command-line. For
  options of the same specificity, the last one takes effect. Options
  enabled or disabled via pragmas take effect
! as if they appeared at the end of the command-line.
  .PP
  When an unrecognized warning option is requested (e.g.,
! \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 emits a diagnostic stating
  that the option is not recognized.  However, if the \fB\-Wno\-\fR form
  is used, the behavior is slightly different: no diagnostic is
  produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
--- 5787,5807 ----
  has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
  example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
  two forms, whichever is not the default.  For further
! language\-specific options also refer to \fBC++ Dialect Options\fR and
! \&\fBObjective\-C and Objective\-C++ Dialect Options\fR.
  Additional warnings can be produced by enabling the static analyzer;
  .PP
  Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
  options, such as \fB\-Wunused\fR, which may turn on further options,
  such as \fB\-Wunused\-value\fR. The combined effect of positive and
  negative forms is that more specific options have priority over less
! specific ones, independently of their position in the command\-line. For
  options of the same specificity, the last one takes effect. Options
  enabled or disabled via pragmas take effect
! as if they appeared at the end of the command\-line.
  .PP
  When an unrecognized warning option is requested (e.g.,
! \&\fB\-Wunknown\-warning\fR), GCC emits a diagnostic stating
  that the option is not recognized.  However, if the \fB\-Wno\-\fR form
  is used, the behavior is slightly different: no diagnostic is
  produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
*************** warns that an unrecognized option is pre
*** 5878,5932 ****
  .PP
  The effectiveness of some warnings depends on optimizations also being
  enabled. For example \fB\-Wsuggest\-final\-types\fR is more effective
! with link-time optimization and some instances of other warnings may
  not be issued at all unless optimization is enabled.  While optimization
  in general improves the efficacy of control and data flow sensitive
  warnings, in some cases it may also cause false positives.
! .IP "\fB\-Wpedantic\fR" 4
  .IX Item "-Wpedantic"
  .PD 0
! .IP "\fB\-pedantic\fR" 4
  .IX Item "-pedantic"
  .PD
! Issue all the warnings demanded by strict \s-1ISO C\s0 and \s-1ISO \*(C+\s0;
  diagnose all programs that use forbidden extensions, and some other
! programs that do not follow \s-1ISO C\s0 and \s-1ISO \*(C+.\s0  This follows the version
! of the \s-1ISO C\s0 or \*(C+ standard specified by any \fB\-std\fR option used.
  .Sp
! Valid \s-1ISO C\s0 and \s-1ISO \*(C+\s0 programs should compile properly with or without
  this option (though a rare few require \fB\-ansi\fR or a
  \&\fB\-std\fR option specifying the version of the standard).  However,
! without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
  features are supported as well.  With this option, they are diagnosed
  (or rejected with \fB\-pedantic\-errors\fR).
  .Sp
  \&\fB\-Wpedantic\fR does not cause warning messages for use of the
  alternate keywords whose names begin and end with \fB_\|_\fR.  This alternate
! format can also be used to disable warnings for non-ISO \fB_\|_intN\fR types,
  i.e. \fB_\|_intN_\|_\fR.
  Pedantic warnings are also disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
  these escape routes; application programs should avoid them.
  .Sp
! Some warnings about non-conforming programs are controlled by options
  other than \fB\-Wpedantic\fR; in many cases they are implied by
  \&\fB\-Wpedantic\fR but can be disabled separately by their specific
  option, e.g. \fB\-Wpedantic \-Wno\-pointer\-sign\fR.
  .Sp
! Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
  extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
! corresponding \fIbase standard\fR, the version of \s-1ISO C\s0 on which the \s-1GNU\s0
  extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
  where they are required by the base standard.  (It does not make sense
! for such warnings to be given only for features not in the specified \s-1GNU
! C\s0 dialect, since by definition the \s-1GNU\s0 dialects of C include all
  features the compiler supports with the given option, and there would be
  nothing to warn about.)
! .IP "\fB\-pedantic\-errors\fR" 4
  .IX Item "-pedantic-errors"
  Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
  requires a diagnostic, in some cases where there is undefined behavior
! at compile-time and in some other cases that do not prevent compilation
  of programs that are valid according to the standard. This is not
  equivalent to \fB\-Werror=pedantic\fR: the latter option is unlikely to be
  useful, as it only makes errors of the diagnostics that are controlled by
--- 5811,5865 ----
  .PP
  The effectiveness of some warnings depends on optimizations also being
  enabled. For example \fB\-Wsuggest\-final\-types\fR is more effective
! with link\-time optimization and some instances of other warnings may
  not be issued at all unless optimization is enabled.  While optimization
  in general improves the efficacy of control and data flow sensitive
  warnings, in some cases it may also cause false positives.
! .IP \fB\-Wpedantic\fR 4
  .IX Item "-Wpedantic"
  .PD 0
! .IP \fB\-pedantic\fR 4
  .IX Item "-pedantic"
  .PD
! Issue all the warnings demanded by strict ISO C and ISO C++;
  diagnose all programs that use forbidden extensions, and some other
! programs that do not follow ISO C and ISO C++.  This follows the version
! of the ISO C or C++ standard specified by any \fB\-std\fR option used.
  .Sp
! Valid ISO C and ISO C++ programs should compile properly with or without
  this option (though a rare few require \fB\-ansi\fR or a
  \&\fB\-std\fR option specifying the version of the standard).  However,
! without this option, certain GNU extensions and traditional C and C++
  features are supported as well.  With this option, they are diagnosed
  (or rejected with \fB\-pedantic\-errors\fR).
  .Sp
  \&\fB\-Wpedantic\fR does not cause warning messages for use of the
  alternate keywords whose names begin and end with \fB_\|_\fR.  This alternate
! format can also be used to disable warnings for non\-ISO \fB_\|_intN\fR types,
  i.e. \fB_\|_intN_\|_\fR.
  Pedantic warnings are also disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
  these escape routes; application programs should avoid them.
  .Sp
! Some warnings about non\-conforming programs are controlled by options
  other than \fB\-Wpedantic\fR; in many cases they are implied by
  \&\fB\-Wpedantic\fR but can be disabled separately by their specific
  option, e.g. \fB\-Wpedantic \-Wno\-pointer\-sign\fR.
  .Sp
! Where the standard specified with \fB\-std\fR represents a GNU
  extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
! corresponding \fIbase standard\fR, the version of ISO C on which the GNU
  extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
  where they are required by the base standard.  (It does not make sense
! for such warnings to be given only for features not in the specified GNU
! C dialect, since by definition the GNU dialects of C include all
  features the compiler supports with the given option, and there would be
  nothing to warn about.)
! .IP \fB\-pedantic\-errors\fR 4
  .IX Item "-pedantic-errors"
  Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
  requires a diagnostic, in some cases where there is undefined behavior
! at compile\-time and in some other cases that do not prevent compilation
  of programs that are valid according to the standard. This is not
  equivalent to \fB\-Werror=pedantic\fR: the latter option is unlikely to be
  useful, as it only makes errors of the diagnostics that are controlled by
*************** useful, as it only makes errors of the d
*** 5934,5940 ****
  are always enabled or controlled by options other than \fB\-Wpedantic\fR.
  .Sp
  If you want the required diagnostics that are warnings by default to
! be errors instead, but don't also want to enable the \fB\-Wpedantic\fR
  diagnostics, you can specify \fB\-pedantic\-errors \-Wno\-pedantic\fR
  (or \fB\-pedantic\-errors \-Wno\-error=pedantic\fR to enable them but
  only as warnings).
--- 5867,5873 ----
  are always enabled or controlled by options other than \fB\-Wpedantic\fR.
  .Sp
  If you want the required diagnostics that are warnings by default to
! be errors instead, but don\*(Aqt also want to enable the \fB\-Wpedantic\fR
  diagnostics, you can specify \fB\-pedantic\-errors \-Wno\-pedantic\fR
  (or \fB\-pedantic\-errors \-Wno\-error=pedantic\fR to enable them but
  only as warnings).
*************** Some required diagnostics are errors by
*** 5943,6017 ****
  warnings using \fB\-fpermissive\fR or their specific warning option,
  e.g. \fB\-Wno\-error=narrowing\fR.
  .Sp
! Some diagnostics for non-ISO practices are controlled by specific
  warning options other than \fB\-Wpedantic\fR, but are also made
  errors by \fB\-pedantic\-errors\fR.  For instance:
  .Sp
  \&\fB\-Wattributes\fR (for standard attributes)
! \&\fB\-Wchanges\-meaning\fR (\*(C+)
! \&\fB\-Wcomma\-subscript\fR (\*(C+23 or later)
  \&\fB\-Wdeclaration\-after\-statement\fR (C90 or earlier)
! \&\fB\-Welaborated\-enum\-base\fR (\*(C+11 or later)
  \&\fB\-Wimplicit\-int\fR (C99 or later)
  \&\fB\-Wimplicit\-function\-declaration\fR (C99 or later)
  \&\fB\-Wincompatible\-pointer\-types
  \&\-Wint\-conversion
  \&\-Wlong\-long\fR (C90 or earlier)
  \&\fB\-Wmain
! \&\-Wnarrowing\fR (\*(C+11 or later)
  \&\fB\-Wpointer\-arith
  \&\-Wpointer\-sign
  \&\-Wincompatible\-pointer\-types
! \&\-Wregister\fR (\*(C+17 or later)
  \&\fB\-Wvla\fR (C90 or earlier)
! \&\fB\-Wwrite\-strings\fR (\*(C+11 or later)\fB \fR
! .IP "\fB\-fpermissive\fR" 4
  .IX Item "-fpermissive"
  Downgrade some required diagnostics about nonconformant code from
  errors to warnings.  Thus, using \fB\-fpermissive\fR allows some
! nonconforming code to compile.  Some \*(C+ diagnostics are controlled
! only by this flag, but it also downgrades some C and \*(C+ diagnostics
  that have their own flag:
  .Sp
! \&\fB\-Wdeclaration\-missing\-parameter\-type\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective-C only)
! \&\fB\-Wincompatible\-pointer\-types\fR (C and Objective-C only)
! \&\fB\-Wint\-conversion\fR (C and Objective-C only)
! \&\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wreturn\-mismatch\fR (C and Objective-C only)\fB \fR
  .Sp
  The \fB\-fpermissive\fR option is the default for historic C language
  modes (\fB\-std=c89\fR, \fB\-std=gnu89\fR, \fB\-std=c90\fR,
  \&\fB\-std=gnu90\fR).
! .IP "\fB\-Wall\fR" 4
  .IX Item "-Wall"
  This enables all the warnings about constructions that some users
  consider questionable, and that are easy to avoid (or modify to
  prevent the warning), even in conjunction with macros.  This also
! enables some language-specific warnings described in \fB\*(C+ Dialect
! Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
  .Sp
  \&\fB\-Wall\fR turns on the following warning flags:
  .Sp
  \&\fB\-Waddress
! \&\-Waligned\-new\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)
  \&\fB\-Warray\-compare
  \&\-Warray\-parameter=2
  \&\-Wbool\-compare
  \&\-Wbool\-operation
  \&\-Wc++11\-compat  \-Wc++14\-compat  \-Wc++17compat  \-Wc++20compat
! \&\-Wcatch\-value\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wchar\-subscripts
! \&\-Wclass\-memaccess\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wcomment
  \&\-Wdangling\-else
  \&\-Wdangling\-pointer=2
! \&\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wduplicate\-decl\-specifier\fR (C and Objective-C only)
! \&\fB\-Wenum\-compare\fR (in C/ObjC; this is on by default in \*(C+)
! \&\fB\-Wenum\-int\-mismatch\fR (C and Objective-C only)
  \&\fB\-Wformat=1
  \&\-Wformat\-contains\-nul
  \&\-Wformat\-diag
--- 5876,5950 ----
  warnings using \fB\-fpermissive\fR or their specific warning option,
  e.g. \fB\-Wno\-error=narrowing\fR.
  .Sp
! Some diagnostics for non\-ISO practices are controlled by specific
  warning options other than \fB\-Wpedantic\fR, but are also made
  errors by \fB\-pedantic\-errors\fR.  For instance:
  .Sp
  \&\fB\-Wattributes\fR (for standard attributes)
! \&\fB\-Wchanges\-meaning\fR (C++)
! \&\fB\-Wcomma\-subscript\fR (C++23 or later)
  \&\fB\-Wdeclaration\-after\-statement\fR (C90 or earlier)
! \&\fB\-Welaborated\-enum\-base\fR (C++11 or later)
  \&\fB\-Wimplicit\-int\fR (C99 or later)
  \&\fB\-Wimplicit\-function\-declaration\fR (C99 or later)
  \&\fB\-Wincompatible\-pointer\-types
  \&\-Wint\-conversion
  \&\-Wlong\-long\fR (C90 or earlier)
  \&\fB\-Wmain
! \&\-Wnarrowing\fR (C++11 or later)
  \&\fB\-Wpointer\-arith
  \&\-Wpointer\-sign
  \&\-Wincompatible\-pointer\-types
! \&\-Wregister\fR (C++17 or later)
  \&\fB\-Wvla\fR (C90 or earlier)
! \&\fB\-Wwrite\-strings\fR (C++11 or later)\fB \fR
! .IP \fB\-fpermissive\fR 4
  .IX Item "-fpermissive"
  Downgrade some required diagnostics about nonconformant code from
  errors to warnings.  Thus, using \fB\-fpermissive\fR allows some
! nonconforming code to compile.  Some C++ diagnostics are controlled
! only by this flag, but it also downgrades some C and C++ diagnostics
  that have their own flag:
  .Sp
! \&\fB\-Wdeclaration\-missing\-parameter\-type\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective\-C only)
! \&\fB\-Wincompatible\-pointer\-types\fR (C and Objective\-C only)
! \&\fB\-Wint\-conversion\fR (C and Objective\-C only)
! \&\fB\-Wnarrowing\fR (C++ and Objective\-C++ only)
! \&\fB\-Wreturn\-mismatch\fR (C and Objective\-C only)\fB \fR
  .Sp
  The \fB\-fpermissive\fR option is the default for historic C language
  modes (\fB\-std=c89\fR, \fB\-std=gnu89\fR, \fB\-std=c90\fR,
  \&\fB\-std=gnu90\fR).
! .IP \fB\-Wall\fR 4
  .IX Item "-Wall"
  This enables all the warnings about constructions that some users
  consider questionable, and that are easy to avoid (or modify to
  prevent the warning), even in conjunction with macros.  This also
! enables some language\-specific warnings described in \fBC++ Dialect
! Options\fR and \fBObjective\-C and Objective\-C++ Dialect Options\fR.
  .Sp
  \&\fB\-Wall\fR turns on the following warning flags:
  .Sp
  \&\fB\-Waddress
! \&\-Waligned\-new\fR (C++ and Objective\-C++ only)
  \&\fB\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)
  \&\fB\-Warray\-compare
  \&\-Warray\-parameter=2
  \&\-Wbool\-compare
  \&\-Wbool\-operation
  \&\-Wc++11\-compat  \-Wc++14\-compat  \-Wc++17compat  \-Wc++20compat
! \&\-Wcatch\-value\fR (C++ and Objective\-C++ only)
  \&\fB\-Wchar\-subscripts
! \&\-Wclass\-memaccess\fR (C++ and Objective\-C++ only)
  \&\fB\-Wcomment
  \&\-Wdangling\-else
  \&\-Wdangling\-pointer=2
! \&\-Wdelete\-non\-virtual\-dtor\fR (C++ and Objective\-C++ only)
! \&\fB\-Wduplicate\-decl\-specifier\fR (C and Objective\-C only)
! \&\fB\-Wenum\-compare\fR (in C/ObjC; this is on by default in C++)
! \&\fB\-Wenum\-int\-mismatch\fR (C and Objective\-C only)
  \&\fB\-Wformat=1
  \&\-Wformat\-contains\-nul
  \&\-Wformat\-diag
*************** Options\fR and \fBObjective-C and Object
*** 6020,6058 ****
  \&\-Wformat\-truncation=1
  \&\-Wformat\-zero\-length
  \&\-Wframe\-address
! \&\-Wimplicit\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective-C only)
  \&\fB\-Winfinite\-recursion
! \&\-Winit\-self\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wint\-in\-bool\-context
  \&\-Wlogical\-not\-parentheses
  \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)
  \&\fB\-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size
  \&\-Wmemset\-transposed\-args
! \&\-Wmisleading\-indentation\fR (only for C/\*(C+)
  \&\fB\-Wmismatched\-dealloc
! \&\-Wmismatched\-new\-delete\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wmissing\-attributes
  \&\-Wmissing\-braces\fR (only for C/ObjC)
  \&\fB\-Wmultistatement\-macros
! \&\-Wnarrowing\fR  (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wnonnull
  \&\-Wnonnull\-compare
! \&\-Wopenmp\-simd\fR (C and \*(C+ only)
! \&\fB\-Woverloaded\-virtual=1\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wpacked\-not\-aligned
  \&\-Wparentheses
! \&\-Wpessimizing\-move\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wpointer\-sign\fR (only for C/ObjC)
! \&\fB\-Wrange\-loop\-construct\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wrestrict
  \&\-Wreturn\-type
! \&\-Wself\-move\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wsequence\-point
! \&\-Wsign\-compare\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div
  \&\-Wsizeof\-pointer\-memaccess
--- 5953,5991 ----
  \&\-Wformat\-truncation=1
  \&\-Wformat\-zero\-length
  \&\-Wframe\-address
! \&\-Wimplicit\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective\-C only)
! \&\fB\-Wimplicit\-int\fR (C and Objective\-C only)
  \&\fB\-Winfinite\-recursion
! \&\-Winit\-self\fR (C++ and Objective\-C++ only)
  \&\fB\-Wint\-in\-bool\-context
  \&\-Wlogical\-not\-parentheses
  \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)
  \&\fB\-Wmaybe\-uninitialized
  \&\-Wmemset\-elt\-size
  \&\-Wmemset\-transposed\-args
! \&\-Wmisleading\-indentation\fR (only for C/C++)
  \&\fB\-Wmismatched\-dealloc
! \&\-Wmismatched\-new\-delete\fR (C++ and Objective\-C++ only)
  \&\fB\-Wmissing\-attributes
  \&\-Wmissing\-braces\fR (only for C/ObjC)
  \&\fB\-Wmultistatement\-macros
! \&\-Wnarrowing\fR  (C++ and Objective\-C++ only)
  \&\fB\-Wnonnull
  \&\-Wnonnull\-compare
! \&\-Wopenmp\-simd\fR (C and C++ only)
! \&\fB\-Woverloaded\-virtual=1\fR (C++ and Objective\-C++ only)
  \&\fB\-Wpacked\-not\-aligned
  \&\-Wparentheses
! \&\-Wpessimizing\-move\fR (C++ and Objective\-C++ only)
  \&\fB\-Wpointer\-sign\fR (only for C/ObjC)
! \&\fB\-Wrange\-loop\-construct\fR (C++ and Objective\-C++ only)
! \&\fB\-Wreorder\fR (C++ and Objective\-C++ only)
  \&\fB\-Wrestrict
  \&\-Wreturn\-type
! \&\-Wself\-move\fR (C++ and Objective\-C++ only)
  \&\fB\-Wsequence\-point
! \&\-Wsign\-compare\fR (C++ and Objective\-C++ only)
  \&\fB\-Wsizeof\-array\-div
  \&\-Wsizeof\-pointer\-div
  \&\-Wsizeof\-pointer\-memaccess
*************** others warn about constructions that are
*** 6083,6089 ****
  some cases, and there is no simple way to modify the code to suppress
  the warning. Some of them are enabled by \fB\-Wextra\fR but many of
  them must be enabled individually.
! .IP "\fB\-Wextra\fR" 4
  .IX Item "-Wextra"
  This enables some extra warning flags that are not enabled by
  \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
--- 6016,6022 ----
  some cases, and there is no simple way to modify the code to suppress
  the warning. Some of them are enabled by \fB\-Wextra\fR but many of
  them must be enabled individually.
! .IP \fB\-Wextra\fR 4
  .IX Item "-Wextra"
  This enables some extra warning flags that are not enabled by
  \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
*************** name is still supported, but the newer n
*** 6094,6114 ****
  \&\-Wcalloc\-transposed\-args
  \&\-Wcast\-function\-type
  \&\-Wclobbered
! \&\-Wdeprecated\-copy\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wempty\-body
  \&\-Wenum\-conversion\fR (only for C/ObjC)
  \&\fB\-Wexpansion\-to\-defined
! \&\-Wignored\-qualifiers\fR  (only for C/\*(C+)
  \&\fB\-Wimplicit\-fallthrough=3
  \&\-Wmaybe\-uninitialized
  \&\-Wmissing\-field\-initializers
  \&\-Wmissing\-parameter\-type\fR (C/ObjC only)
  \&\fB\-Wold\-style\-declaration\fR (C/ObjC only)
  \&\fB\-Woverride\-init\fR (C/ObjC only)
! \&\fB\-Wredundant\-move\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wshift\-negative\-value\fR (in \*(C+11 to \*(C+17 and in C99 and newer)
! \&\fB\-Wsign\-compare\fR (\*(C+ and Objective\-\*(C+ only)
! \&\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)
  \&\fB\-Wstring\-compare
  \&\-Wtype\-limits
  \&\-Wuninitialized
--- 6027,6047 ----
  \&\-Wcalloc\-transposed\-args
  \&\-Wcast\-function\-type
  \&\-Wclobbered
! \&\-Wdeprecated\-copy\fR (C++ and Objective\-C++ only)
  \&\fB\-Wempty\-body
  \&\-Wenum\-conversion\fR (only for C/ObjC)
  \&\fB\-Wexpansion\-to\-defined
! \&\-Wignored\-qualifiers\fR  (only for C/C++)
  \&\fB\-Wimplicit\-fallthrough=3
  \&\-Wmaybe\-uninitialized
  \&\-Wmissing\-field\-initializers
  \&\-Wmissing\-parameter\-type\fR (C/ObjC only)
  \&\fB\-Wold\-style\-declaration\fR (C/ObjC only)
  \&\fB\-Woverride\-init\fR (C/ObjC only)
! \&\fB\-Wredundant\-move\fR (C++ and Objective\-C++ only)
! \&\fB\-Wshift\-negative\-value\fR (in C++11 to C++17 and in C99 and newer)
! \&\fB\-Wsign\-compare\fR (C++ and Objective\-C++ only)
! \&\fB\-Wsized\-deallocation\fR (C++ and Objective\-C++ only)
  \&\fB\-Wstring\-compare
  \&\-Wtype\-limits
  \&\-Wuninitialized
*************** name is still supported, but the newer n
*** 6118,6157 ****
  The option \fB\-Wextra\fR also prints warning messages for the
  following cases:
  .RS 4
! .IP "*" 4
  A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
  \&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
! .IP "*" 4
! (\*(C+ only) An enumerator and a non-enumerator both appear in a
  conditional expression.
! .IP "*" 4
! (\*(C+ only) Ambiguous virtual bases.
! .IP "*" 4
! (\*(C+ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
! .IP "*" 4
! (\*(C+ only) Taking the address of a variable that has been declared
  \&\f(CW\*(C`register\*(C'\fR.
! .IP "*" 4
! (\*(C+ only) A base class is not initialized in the copy constructor
  of a derived class.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wabi (C, Objective-C, and Objective- only)"
! Warn about code affected by \s-1ABI\s0 changes.  This includes code that may
! not be compatible with the vendor-neutral \*(C+ \s-1ABI\s0 as well as the psABI
  for the particular target.
  .Sp
! Since G++ now defaults to updating the \s-1ABI\s0 with each major release,
! normally \fB\-Wabi\fR warns only about \*(C+ \s-1ABI\s0 compatibility
  problems if there is a check added later in a release series for an
! \&\s-1ABI\s0 issue discovered since the initial release.  \fB\-Wabi\fR warns
! about more things if an older \s-1ABI\s0 version is selected (with
  \&\fB\-fabi\-version=\fR\fIn\fR).
  .Sp
  \&\fB\-Wabi\fR can also be used with an explicit version number to
! warn about \*(C+ \s-1ABI\s0 compatibility with a particular \fB\-fabi\-version\fR
  level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
  \&\fB\-fabi\-version=2\fR.
  .Sp
--- 6051,6090 ----
  The option \fB\-Wextra\fR also prints warning messages for the
  following cases:
  .RS 4
! .IP * 4
  A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
  \&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
! .IP * 4
! (C++ only) An enumerator and a non\-enumerator both appear in a
  conditional expression.
! .IP * 4
! (C++ only) Ambiguous virtual bases.
! .IP * 4
! (C++ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
! .IP * 4
! (C++ only) Taking the address of a variable that has been declared
  \&\f(CW\*(C`register\*(C'\fR.
! .IP * 4
! (C++ only) A base class is not initialized in the copy constructor
  of a derived class.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wabi\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wabi (C, Objective-C, C++ and Objective-C++ only)"
! Warn about code affected by ABI changes.  This includes code that may
! not be compatible with the vendor\-neutral C++ ABI as well as the psABI
  for the particular target.
  .Sp
! Since G++ now defaults to updating the ABI with each major release,
! normally \fB\-Wabi\fR warns only about C++ ABI compatibility
  problems if there is a check added later in a release series for an
! ABI issue discovered since the initial release.  \fB\-Wabi\fR warns
! about more things if an older ABI version is selected (with
  \&\fB\-fabi\-version=\fR\fIn\fR).
  .Sp
  \&\fB\-Wabi\fR can also be used with an explicit version number to
! warn about C++ ABI compatibility with a particular \fB\-fabi\-version\fR
  level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
  \&\fB\-fabi\-version=2\fR.
  .Sp
*************** If an explicit version number is provide
*** 6160,6166 ****
  from this option is used for compatibility aliases.  If no explicit
  version number is provided with this option, but
  \&\fB\-fabi\-compat\-version\fR is specified, that version number is
! used for \*(C+ \s-1ABI\s0 warnings.
  .Sp
  Although an effort has been made to warn about
  all such cases, there are probably some cases that are not warned about,
--- 6093,6099 ----
  from this option is used for compatibility aliases.  If no explicit
  version number is provided with this option, but
  \&\fB\-fabi\-compat\-version\fR is specified, that version number is
! used for C++ ABI warnings.
  .Sp
  Although an effort has been made to warn about
  all such cases, there are probably some cases that are not warned about,
*************** concerned about the fact that code gener
*** 6173,6182 ****
  compatible with code generated by other compilers.
  .Sp
  Known incompatibilities in \fB\-fabi\-version=2\fR (which was the
! default from \s-1GCC 3.4\s0 to 4.9) include:
  .RS 4
! .IP "*" 4
! A template with a non-type template parameter of reference type was
  mangled incorrectly:
  .Sp
  .Vb 3
--- 6106,6115 ----
  compatible with code generated by other compilers.
  .Sp
  Known incompatibilities in \fB\-fabi\-version=2\fR (which was the
! default from GCC 3.4 to 4.9) include:
  .RS 4
! .IP * 4
! A template with a non\-type template parameter of reference type was
  mangled incorrectly:
  .Sp
  .Vb 3
*************** mangled incorrectly:
*** 6186,6246 ****
  .Ve
  .Sp
  This was fixed in \fB\-fabi\-version=3\fR.
! .IP "*" 4
! \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
! mangled in a non-standard way that does not allow for overloading of
  functions taking vectors of different sizes.
  .Sp
  The mangling was changed in \fB\-fabi\-version=4\fR.
! .IP "*" 4
  \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
  qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
  .Sp
  These mangling issues were fixed in \fB\-fabi\-version=5\fR.
! .IP "*" 4
  Scoped enumerators passed as arguments to a variadic function are
  promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
  On most targets this does not actually affect the parameter passing
! \&\s-1ABI,\s0 as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
  .Sp
! Also, the \s-1ABI\s0 changed the mangling of template argument packs,
  \&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
  a class scope function used as a template argument.
  .Sp
  These issues were corrected in \fB\-fabi\-version=6\fR.
! .IP "*" 4
  Lambdas in default argument scope were mangled incorrectly, and the
! \&\s-1ABI\s0 changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
  .Sp
  These issues were corrected in \fB\-fabi\-version=7\fR.
! .IP "*" 4
! When mangling a function type with function-cv-qualifiers, the
! un-qualified function type was incorrectly treated as a substitution
  candidate.
  .Sp
! This was fixed in \fB\-fabi\-version=8\fR, the default for \s-1GCC 5.1.\s0
! .IP "*" 4
! \&\f(CW\*(C`decltype(nullptr)\*(C'\fR incorrectly had an alignment of 1, leading to
! unaligned accesses.  Note that this did not affect the \s-1ABI\s0 of a
  function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
  minimum alignment.
  .Sp
! This was fixed in \fB\-fabi\-version=9\fR, the default for \s-1GCC 5.2.\s0
! .IP "*" 4
! Target-specific attributes that affect the identity of a type, such as
  ia32 calling conventions on a function type (stdcall, regparm, etc.),
  did not affect the mangled name, leading to name collisions when
  function pointers were used as template arguments.
  .Sp
! This was fixed in \fB\-fabi\-version=10\fR, the default for \s-1GCC 6.1.\s0
  .RE
  .RS 4
  .Sp
! This option also enables warnings about psABI-related changes.
  The known psABI changes at this point include:
! .IP "*" 4
  For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are
! passed in memory as specified in psABI.  Prior to \s-1GCC 4.4,\s0 this was not
  the case.  For example:
  .Sp
  .Vb 4
--- 6119,6179 ----
  .Ve
  .Sp
  This was fixed in \fB\-fabi\-version=3\fR.
! .IP * 4
! SIMD vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
! mangled in a non\-standard way that does not allow for overloading of
  functions taking vectors of different sizes.
  .Sp
  The mangling was changed in \fB\-fabi\-version=4\fR.
! .IP * 4
  \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
  qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
  .Sp
  These mangling issues were fixed in \fB\-fabi\-version=5\fR.
! .IP * 4
  Scoped enumerators passed as arguments to a variadic function are
  promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
  On most targets this does not actually affect the parameter passing
! ABI, as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
  .Sp
! Also, the ABI changed the mangling of template argument packs,
  \&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
  a class scope function used as a template argument.
  .Sp
  These issues were corrected in \fB\-fabi\-version=6\fR.
! .IP * 4
  Lambdas in default argument scope were mangled incorrectly, and the
! ABI changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
  .Sp
  These issues were corrected in \fB\-fabi\-version=7\fR.
! .IP * 4
! When mangling a function type with function\-cv\-qualifiers, the
! un\-qualified function type was incorrectly treated as a substitution
  candidate.
  .Sp
! This was fixed in \fB\-fabi\-version=8\fR, the default for GCC 5.1.
! .IP * 4
! \&\f(CWdecltype(nullptr)\fR incorrectly had an alignment of 1, leading to
! unaligned accesses.  Note that this did not affect the ABI of a
  function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
  minimum alignment.
  .Sp
! This was fixed in \fB\-fabi\-version=9\fR, the default for GCC 5.2.
! .IP * 4
! Target\-specific attributes that affect the identity of a type, such as
  ia32 calling conventions on a function type (stdcall, regparm, etc.),
  did not affect the mangled name, leading to name collisions when
  function pointers were used as template arguments.
  .Sp
! This was fixed in \fB\-fabi\-version=10\fR, the default for GCC 6.1.
  .RE
  .RS 4
  .Sp
! This option also enables warnings about psABI\-related changes.
  The known psABI changes at this point include:
! .IP * 4
  For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are
! passed in memory as specified in psABI.  Prior to GCC 4.4, this was not
  the case.  For example:
  .Sp
  .Vb 4
*************** the case.  For example:
*** 6254,6264 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-changes\-meaning\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-changes-meaning ( and Objective- only)"
! \&\*(C+ requires that unqualified uses of a name within a class have the
  same meaning in the complete scope of the class, so declaring the name
! after using it is ill-formed:
  .Sp
  .Vb 3
  \&        struct A;
--- 6187,6197 ----
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-changes\-meaning\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-changes-meaning (C++ and Objective-C++ only)"
! C++ requires that unqualified uses of a name within a class have the
  same meaning in the complete scope of the class, so declaring the name
! after using it is ill\-formed:
  .Sp
  .Vb 3
  \&        struct A;
*************** error case can be reduced to a warning w
*** 6273,6305 ****
  \&\fB\-Wno\-error=changes\-meaning\fR or \fB\-fpermissive\fR.
  .Sp
  Both diagnostics are also suppressed by \fB\-fms\-extensions\fR.
! .IP "\fB\-Wchar\-subscripts\fR" 4
  .IX Item "-Wchar-subscripts"
  Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
  of error, as programmers often forget that this type is signed on some
  machines.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
  .IX Item "-Wno-coverage-mismatch"
  Warn if feedback profiles do not match when using the
  \&\fB\-fprofile\-use\fR option.
  If a source file is changed between compiling with \fB\-fprofile\-generate\fR
  and with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
! to match the source file and \s-1GCC\s0 cannot use the profile feedback
  information.  By default, this warning is enabled and is treated as an
  error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
  disable the error.  Disabling the error for this warning can result in
  poorly optimized code and is useful only in the
! case of very minor changes such as bug fixes to an existing code-base.
  Completely disabling the warning is not recommended.
! .IP "\fB\-Wno\-coverage\-too\-many\-conditions\fR" 4
  .IX Item "-Wno-coverage-too-many-conditions"
  Warn if \fB\-fcondition\-coverage\fR is used and an expression have too many
! terms and \s-1GCC\s0 gives up coverage.  Coverage is given up when there are more
  terms in the conditional than there are bits in a \f(CW\*(C`gcov_type_unsigned\*(C'\fR.
  This warning is enabled by default.
! .IP "\fB\-Wno\-coverage\-invalid\-line\-number\fR" 4
  .IX Item "-Wno-coverage-invalid-line-number"
  Warn in case a function ends earlier than it begins due
  to an invalid linenum macros.  The warning is emitted only
--- 6206,6238 ----
  \&\fB\-Wno\-error=changes\-meaning\fR or \fB\-fpermissive\fR.
  .Sp
  Both diagnostics are also suppressed by \fB\-fms\-extensions\fR.
! .IP \fB\-Wchar\-subscripts\fR 4
  .IX Item "-Wchar-subscripts"
  Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
  of error, as programmers often forget that this type is signed on some
  machines.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-coverage\-mismatch\fR 4
  .IX Item "-Wno-coverage-mismatch"
  Warn if feedback profiles do not match when using the
  \&\fB\-fprofile\-use\fR option.
  If a source file is changed between compiling with \fB\-fprofile\-generate\fR
  and with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
! to match the source file and GCC cannot use the profile feedback
  information.  By default, this warning is enabled and is treated as an
  error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
  disable the error.  Disabling the error for this warning can result in
  poorly optimized code and is useful only in the
! case of very minor changes such as bug fixes to an existing code\-base.
  Completely disabling the warning is not recommended.
! .IP \fB\-Wno\-coverage\-too\-many\-conditions\fR 4
  .IX Item "-Wno-coverage-too-many-conditions"
  Warn if \fB\-fcondition\-coverage\fR is used and an expression have too many
! terms and GCC gives up coverage.  Coverage is given up when there are more
  terms in the conditional than there are bits in a \f(CW\*(C`gcov_type_unsigned\*(C'\fR.
  This warning is enabled by default.
! .IP \fB\-Wno\-coverage\-invalid\-line\-number\fR 4
  .IX Item "-Wno-coverage-invalid-line-number"
  Warn in case a function ends earlier than it begins due
  to an invalid linenum macros.  The warning is emitted only
*************** By default, this warning is enabled and
*** 6309,6328 ****
  error.  \fB\-Wno\-coverage\-invalid\-line\-number\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-invalid\-line\-number\fR can be used to
  disable the error.
! .IP "\fB\-Wno\-cpp\fR (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)" 4
! .IX Item "-Wno-cpp (C, Objective-C, , Objective- and Fortran only)"
  Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
! .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
  Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
! promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
! floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
  \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
  using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
  overhead required for software emulation.
  .Sp
  It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
! floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
  example, in:
  .Sp
  .Vb 4
--- 6242,6261 ----
  error.  \fB\-Wno\-coverage\-invalid\-line\-number\fR can be used to disable the
  warning or \fB\-Wno\-error=coverage\-invalid\-line\-number\fR can be used to
  disable the error.
! .IP "\fB\-Wno\-cpp\fR (C, Objective\-C, C++, Objective\-C++ and Fortran only)" 4
! .IX Item "-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)"
  Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
! .IP "\fB\-Wdouble\-promotion\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)"
  Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
! promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit "single\-precision"
! floating\-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
  \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
  using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
  overhead required for software emulation.
  .Sp
  It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
! floating\-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
  example, in:
  .Sp
  .Vb 4
*************** example, in:
*** 6333,6348 ****
  .Ve
  .Sp
  the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
! because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
! .IP "\fB\-Wduplicate\-decl\-specifier\fR (C and Objective-C only)" 4
  .IX Item "-Wduplicate-decl-specifier (C and Objective-C only)"
  Warn if a declaration has duplicate \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`volatile\*(C'\fR,
  \&\f(CW\*(C`restrict\*(C'\fR or \f(CW\*(C`_Atomic\*(C'\fR specifier.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wformat\fR" 4
  .IX Item "-Wformat"
  .PD 0
! .IP "\fB\-Wformat=\fR\fIn\fR" 4
  .IX Item "-Wformat=n"
  .PD
  Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
--- 6266,6281 ----
  .Ve
  .Sp
  the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
! because the floating\-point literal is a \f(CW\*(C`double\*(C'\fR.
! .IP "\fB\-Wduplicate\-decl\-specifier\fR (C and Objective\-C only)" 4
  .IX Item "-Wduplicate-decl-specifier (C and Objective-C only)"
  Warn if a declaration has duplicate \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`volatile\*(C'\fR,
  \&\f(CW\*(C`restrict\*(C'\fR or \f(CW\*(C`_Atomic\*(C'\fR specifier.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP \fB\-Wformat\fR 4
  .IX Item "-Wformat"
  .PD 0
! .IP \fB\-Wformat=\fR\fIn\fR 4
  .IX Item "-Wformat=n"
  .PD
  Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
*************** specified, and that the conversions spec
*** 6351,6376 ****
  sense.  This includes standard functions, and others specified by format
  attributes, in the \f(CW\*(C`printf\*(C'\fR,
  \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
! not in the C standard) families (or other target-specific families).
  Which functions are checked without format attributes having been
  specified depends on the standard version selected, and such checks of
  functions without the attribute specified are disabled by
  \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
  .Sp
! The formats are checked against the format features supported by \s-1GNU\s0
! libc version 2.2.  These include all \s-1ISO C90\s0 and C99 features, as well
! as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
  extensions.  Other library implementations may not support all these
! features; \s-1GCC\s0 does not support warning about features that go beyond a
! particular library's limitations.  However, if \fB\-Wpedantic\fR is used
  with \fB\-Wformat\fR, warnings are given about format features not
  in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
  since those are not in any version of the C standard).
  .RS 4
! .IP "\fB\-Wformat=1\fR" 4
  .IX Item "-Wformat=1"
  .PD 0
! .IP "\fB\-Wformat\fR" 4
  .IX Item "-Wformat"
  .PD
  Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
--- 6284,6309 ----
  sense.  This includes standard functions, and others specified by format
  attributes, in the \f(CW\*(C`printf\*(C'\fR,
  \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
! not in the C standard) families (or other target\-specific families).
  Which functions are checked without format attributes having been
  specified depends on the standard version selected, and such checks of
  functions without the attribute specified are disabled by
  \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
  .Sp
! The formats are checked against the format features supported by GNU
! libc version 2.2.  These include all ISO C90 and C99 features, as well
! as features from the Single Unix Specification and some BSD and GNU
  extensions.  Other library implementations may not support all these
! features; GCC does not support warning about features that go beyond a
! particular library\*(Aqs limitations.  However, if \fB\-Wpedantic\fR is used
  with \fB\-Wformat\fR, warnings are given about format features not
  in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
  since those are not in any version of the C standard).
  .RS 4
! .IP \fB\-Wformat=1\fR 4
  .IX Item "-Wformat=1"
  .PD 0
! .IP \fB\-Wformat\fR 4
  .IX Item "-Wformat"
  .PD
  Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
*************** aspects of this level of format checking
*** 6381,6387 ****
  options: \fB\-Wno\-format\-contains\-nul\fR,
  \&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
  \&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wformat=2\fR" 4
  .IX Item "-Wformat=2"
  Enable \fB\-Wformat\fR plus additional format checks.  Currently
  equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
--- 6314,6320 ----
  options: \fB\-Wno\-format\-contains\-nul\fR,
  \&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
  \&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
! .IP \fB\-Wformat=2\fR 4
  .IX Item "-Wformat=2"
  Enable \fB\-Wformat\fR plus additional format checks.  Currently
  equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
*************** equivalent to \fB\-Wformat \-Wformat\-no
*** 6389,6399 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
  .IX Item "-Wno-format-contains-nul"
  If \fB\-Wformat\fR is specified, do not warn about format strings that
! contain \s-1NUL\s0 bytes.
! .IP "\fB\-Wno\-format\-extra\-args\fR" 4
  .IX Item "-Wno-format-extra-args"
  If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
  \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
--- 6322,6332 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wno\-format\-contains\-nul\fR 4
  .IX Item "-Wno-format-contains-nul"
  If \fB\-Wformat\fR is specified, do not warn about format strings that
! contain NUL bytes.
! .IP \fB\-Wno\-format\-extra\-args\fR 4
  .IX Item "-Wno-format-extra-args"
  If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
  \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
*************** type to pass to \f(CW\*(C`va_arg\*(C'\fR
*** 6406,6429 ****
  in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
  warning if the unused arguments are all pointers, since the Single
  Unix Specification says that such unused arguments are allowed.
! .IP "\fB\-Wformat\-overflow\fR" 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP "\fB\-Wformat\-overflow=\fR\fIlevel\fR" 4
  .IX Item "-Wformat-overflow=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`sprintf\*(C'\fR
  and \f(CW\*(C`vsprintf\*(C'\fR that might overflow the destination buffer.  When the
  exact number of bytes written by a format directive cannot be determined
! at compile-time it is estimated based on heuristics that depend on the
  \&\fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also
  result in false positives.
  .RS 4
! .IP "\fB\-Wformat\-overflow\fR" 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP "\fB\-Wformat\-overflow=1\fR" 4
  .IX Item "-Wformat-overflow=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-overflow\fR enabled by \fB\-Wformat\fR
--- 6339,6362 ----
  in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
  warning if the unused arguments are all pointers, since the Single
  Unix Specification says that such unused arguments are allowed.
! .IP \fB\-Wformat\-overflow\fR 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP \fB\-Wformat\-overflow=\fR\fIlevel\fR 4
  .IX Item "-Wformat-overflow=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`sprintf\*(C'\fR
  and \f(CW\*(C`vsprintf\*(C'\fR that might overflow the destination buffer.  When the
  exact number of bytes written by a format directive cannot be determined
! at compile\-time it is estimated based on heuristics that depend on the
  \&\fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also
  result in false positives.
  .RS 4
! .IP \fB\-Wformat\-overflow\fR 4
  .IX Item "-Wformat-overflow"
  .PD 0
! .IP \fB\-Wformat\-overflow=1\fR 4
  .IX Item "-Wformat-overflow=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-overflow\fR enabled by \fB\-Wformat\fR
*************** likely overflow the buffer.  At this lev
*** 6432,6442 ****
  directives with unknown values are assumed to have the value of one, and
  strings of unknown length to be empty.  Numeric arguments that are known
  to be bounded to a subrange of their type, or string arguments whose output
! is bounded either by their directive's precision or by a finite set of
  string literals, are assumed to take on the value within the range that
  results in the most bytes on output.  For example, the call to \f(CW\*(C`sprintf\*(C'\fR
  below is diagnosed because even with both \fIa\fR and \fIb\fR equal to zero,
! the terminating \s-1NUL\s0 character (\f(CW\*(Aq\e0\*(Aq\fR) appended by the function
  to the destination buffer will be written past its end.  Increasing
  the size of the buffer by a single byte is sufficient to avoid the
  warning, though it may not be sufficient to avoid the overflow.
--- 6365,6375 ----
  directives with unknown values are assumed to have the value of one, and
  strings of unknown length to be empty.  Numeric arguments that are known
  to be bounded to a subrange of their type, or string arguments whose output
! is bounded either by their directive\*(Aqs precision or by a finite set of
  string literals, are assumed to take on the value within the range that
  results in the most bytes on output.  For example, the call to \f(CW\*(C`sprintf\*(C'\fR
  below is diagnosed because even with both \fIa\fR and \fIb\fR equal to zero,
! the terminating NUL character (\f(CW\*(Aq\e0\*(Aq\fR) appended by the function
  to the destination buffer will be written past its end.  Increasing
  the size of the buffer by a single byte is sufficient to avoid the
  warning, though it may not be sufficient to avoid the overflow.
*************** warning, though it may not be sufficient
*** 6448,6461 ****
  \&          sprintf (buf, "a = %i, b = %i\en", a, b);
  \&        }
  .Ve
! .IP "\fB\-Wformat\-overflow=2\fR" 4
  .IX Item "-Wformat-overflow=2"
  Level \fI2\fR warns also about calls that might overflow the destination
  buffer given an argument of sufficient length or magnitude.  At level
  \&\fI2\fR, unknown numeric arguments are assumed to have the minimum
  representable value for signed types with a precision greater than 1, and
  the maximum representable value otherwise.  Unknown string arguments whose
! length cannot be assumed to be bounded either by the directive's precision,
  or by a finite set of string literals they may evaluate to, or the character
  array they may point to, are assumed to be 1 character long.
  .Sp
--- 6381,6394 ----
  \&          sprintf (buf, "a = %i, b = %i\en", a, b);
  \&        }
  .Ve
! .IP \fB\-Wformat\-overflow=2\fR 4
  .IX Item "-Wformat-overflow=2"
  Level \fI2\fR warns also about calls that might overflow the destination
  buffer given an argument of sufficient length or magnitude.  At level
  \&\fI2\fR, unknown numeric arguments are assumed to have the minimum
  representable value for signed types with a precision greater than 1, and
  the maximum representable value otherwise.  Unknown string arguments whose
! length cannot be assumed to be bounded either by the directive\*(Aqs precision,
  or by a finite set of string literals they may evaluate to, or the character
  array they may point to, are assumed to be 1 character long.
  .Sp
*************** this time because with \fIa\fR equal to
*** 6464,6470 ****
  \&\f(CW%i\fR directive will write some of its digits beyond the end of
  the destination buffer.  To make the call safe regardless of the values
  of the two variables, the size of the destination buffer must be increased
! to at least 34 bytes.  \s-1GCC\s0 includes the minimum size of the buffer in
  an informational note following the warning.
  .Sp
  An alternative to increasing the size of the destination buffer is to
--- 6397,6403 ----
  \&\f(CW%i\fR directive will write some of its digits beyond the end of
  the destination buffer.  To make the call safe regardless of the values
  of the two variables, the size of the destination buffer must be increased
! to at least 34 bytes.  GCC includes the minimum size of the buffer in
  an informational note following the warning.
  .Sp
  An alternative to increasing the size of the destination buffer is to
*************** required size of the buffer to 24 bytes.
*** 6489,6544 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-format\-zero\-length\fR" 4
  .IX Item "-Wno-format-zero-length"
! If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
! The C standard specifies that zero-length formats are allowed.
! .IP "\fB\-Wformat\-nonliteral\fR" 4
  .IX Item "-Wformat-nonliteral"
  If \fB\-Wformat\fR is specified, also warn if the format string is not a
  string literal and so cannot be checked, unless the format function
  takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
! .IP "\fB\-Wformat\-security\fR" 4
  .IX Item "-Wformat-security"
  If \fB\-Wformat\fR is specified, also warn about uses of format
  functions that represent possible security problems.  At present, this
  warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
  format string is not a string literal and there are no format arguments,
  as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
! string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
  currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
  in future warnings may be added to \fB\-Wformat\-security\fR that are not
  included in \fB\-Wformat\-nonliteral\fR.)
! .IP "\fB\-Wformat\-signedness\fR" 4
  .IX Item "-Wformat-signedness"
  If \fB\-Wformat\fR is specified, also warn if the format string
  requires an unsigned argument and the argument is signed and vice versa.
! .IP "\fB\-Wformat\-truncation\fR" 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP "\fB\-Wformat\-truncation=\fR\fIlevel\fR" 4
  .IX Item "-Wformat-truncation=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`snprintf\*(C'\fR
  and \f(CW\*(C`vsnprintf\*(C'\fR that might result in output truncation.  When the exact
  number of bytes written by a format directive cannot be determined at
! compile-time it is estimated based on heuristics that depend on
  the \fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also result
  in false positives.  Except as noted otherwise, the option uses the same
  logic \fB\-Wformat\-overflow\fR.
  .RS 4
! .IP "\fB\-Wformat\-truncation\fR" 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP "\fB\-Wformat\-truncation=1\fR" 4
  .IX Item "-Wformat-truncation=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-truncation\fR enabled by \fB\-Wformat\fR
  employs a conservative approach that warns only about calls to bounded
  functions whose return value is unused and that will most likely result
  in output truncation.
! .IP "\fB\-Wformat\-truncation=2\fR" 4
  .IX Item "-Wformat-truncation=2"
  Level \fI2\fR warns also about calls to bounded functions whose return
  value is used and that might result in truncation given an argument of
--- 6422,6477 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wno\-format\-zero\-length\fR 4
  .IX Item "-Wno-format-zero-length"
! If \fB\-Wformat\fR is specified, do not warn about zero\-length formats.
! The C standard specifies that zero\-length formats are allowed.
! .IP \fB\-Wformat\-nonliteral\fR 4
  .IX Item "-Wformat-nonliteral"
  If \fB\-Wformat\fR is specified, also warn if the format string is not a
  string literal and so cannot be checked, unless the format function
  takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
! .IP \fB\-Wformat\-security\fR 4
  .IX Item "-Wformat-security"
  If \fB\-Wformat\fR is specified, also warn about uses of format
  functions that represent possible security problems.  At present, this
  warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
  format string is not a string literal and there are no format arguments,
  as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
! string came from untrusted input and contains \fR\f(CB%n\fR\fB\fR.  (This is
  currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
  in future warnings may be added to \fB\-Wformat\-security\fR that are not
  included in \fB\-Wformat\-nonliteral\fR.)
! .IP \fB\-Wformat\-signedness\fR 4
  .IX Item "-Wformat-signedness"
  If \fB\-Wformat\fR is specified, also warn if the format string
  requires an unsigned argument and the argument is signed and vice versa.
! .IP \fB\-Wformat\-truncation\fR 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP \fB\-Wformat\-truncation=\fR\fIlevel\fR 4
  .IX Item "-Wformat-truncation=level"
  .PD
  Warn about calls to formatted input/output functions such as \f(CW\*(C`snprintf\*(C'\fR
  and \f(CW\*(C`vsnprintf\*(C'\fR that might result in output truncation.  When the exact
  number of bytes written by a format directive cannot be determined at
! compile\-time it is estimated based on heuristics that depend on
  the \fIlevel\fR argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also result
  in false positives.  Except as noted otherwise, the option uses the same
  logic \fB\-Wformat\-overflow\fR.
  .RS 4
! .IP \fB\-Wformat\-truncation\fR 4
  .IX Item "-Wformat-truncation"
  .PD 0
! .IP \fB\-Wformat\-truncation=1\fR 4
  .IX Item "-Wformat-truncation=1"
  .PD
  Level \fI1\fR of \fB\-Wformat\-truncation\fR enabled by \fB\-Wformat\fR
  employs a conservative approach that warns only about calls to bounded
  functions whose return value is unused and that will most likely result
  in output truncation.
! .IP \fB\-Wformat\-truncation=2\fR 4
  .IX Item "-Wformat-truncation=2"
  Level \fI2\fR warns also about calls to bounded functions whose return
  value is used and that might result in truncation given an argument of
*************** sufficient length or magnitude.
*** 6546,6578 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wformat\-y2k\fR" 4
  .IX Item "-Wformat-y2k"
  If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
! formats that may yield only a two-digit year.
! .IP "\fB\-Wnonnull\fR" 4
  .IX Item "-Wnonnull"
  Warn about passing a null pointer for arguments marked as
! requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
  .Sp
  \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\fR option.
! .IP "\fB\-Wnonnull\-compare\fR" 4
  .IX Item "-Wnonnull-compare"
  Warn when comparing an argument marked with the \f(CW\*(C`nonnull\*(C'\fR
  function attribute against null inside the function.
  .Sp
  \&\fB\-Wnonnull\-compare\fR is included in \fB\-Wall\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\-compare\fR option.
! .IP "\fB\-Wnull\-dereference\fR" 4
  .IX Item "-Wnull-dereference"
  Warn if the compiler detects paths that trigger erroneous or
  undefined behavior due to dereferencing a null pointer.  This option
  is only active when \fB\-fdelete\-null\-pointer\-checks\fR is active,
  which is enabled by optimizations in most targets.  The precision of
  the warnings depends on the optimization options used.
! .IP "\fB\-Wnrvo\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wnrvo ( and Objective- only)"
  Warn if the compiler does not elide the copy from a local variable to
  the return value of a function in a context where it is allowed by
  [class.copy.elision].  This elision is commonly known as the Named
--- 6479,6511 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wformat\-y2k\fR 4
  .IX Item "-Wformat-y2k"
  If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
! formats that may yield only a two\-digit year.
! .IP \fB\-Wnonnull\fR 4
  .IX Item "-Wnonnull"
  Warn about passing a null pointer for arguments marked as
! requiring a non\-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
  .Sp
  \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\fR option.
! .IP \fB\-Wnonnull\-compare\fR 4
  .IX Item "-Wnonnull-compare"
  Warn when comparing an argument marked with the \f(CW\*(C`nonnull\*(C'\fR
  function attribute against null inside the function.
  .Sp
  \&\fB\-Wnonnull\-compare\fR is included in \fB\-Wall\fR.  It
  can be disabled with the \fB\-Wno\-nonnull\-compare\fR option.
! .IP \fB\-Wnull\-dereference\fR 4
  .IX Item "-Wnull-dereference"
  Warn if the compiler detects paths that trigger erroneous or
  undefined behavior due to dereferencing a null pointer.  This option
  is only active when \fB\-fdelete\-null\-pointer\-checks\fR is active,
  which is enabled by optimizations in most targets.  The precision of
  the warnings depends on the optimization options used.
! .IP "\fB\-Wnrvo\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wnrvo (C++ and Objective-C++ only)"
  Warn if the compiler does not elide the copy from a local variable to
  the return value of a function in a context where it is allowed by
  [class.copy.elision].  This elision is commonly known as the Named
*************** compiler cannot elide copies from both v
*** 6588,6594 ****
  \&          else return v2; // warning: not eliding copy
  \&        }
  .Ve
! .IP "\fB\-Winfinite\-recursion\fR" 4
  .IX Item "-Winfinite-recursion"
  Warn about infinitely recursive calls.  The warning is effective at all
  optimization levels but requires optimization in order to detect infinite
--- 6521,6527 ----
  \&          else return v2; // warning: not eliding copy
  \&        }
  .Ve
! .IP \fB\-Winfinite\-recursion\fR 4
  .IX Item "-Winfinite-recursion"
  Warn about infinitely recursive calls.  The warning is effective at all
  optimization levels but requires optimization in order to detect infinite
*************** recursion in calls between two or more f
*** 6598,6609 ****
  Compare with \fB\-Wanalyzer\-infinite\-recursion\fR which provides a
  similar diagnostic, but is implemented in a different way (as part of
  \&\fB\-fanalyzer\fR).
! .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
  Warn about uninitialized variables that are initialized with themselves.
  Note this option can only be used with the \fB\-Wuninitialized\fR option.
  .Sp
! For example, \s-1GCC\s0 warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
  following snippet only when \fB\-Winit\-self\fR has been specified:
  .Sp
  .Vb 5
--- 6531,6542 ----
  Compare with \fB\-Wanalyzer\-infinite\-recursion\fR which provides a
  similar diagnostic, but is implemented in a different way (as part of
  \&\fB\-fanalyzer\fR).
! .IP "\fB\-Winit\-self\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Winit-self (C, C++, Objective-C and Objective-C++ only)"
  Warn about uninitialized variables that are initialized with themselves.
  Note this option can only be used with the \fB\-Wuninitialized\fR option.
  .Sp
! For example, GCC warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
  following snippet only when \fB\-Winit\-self\fR has been specified:
  .Sp
  .Vb 5
*************** following snippet only when \fB\-Winit\-
*** 6614,6621 ****
  \&        }
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in \*(C+.
! .IP "\fB\-Wno\-implicit\-int\fR (C and Objective-C only)" 4
  .IX Item "-Wno-implicit-int (C and Objective-C only)"
  This option controls warnings when a declaration does not specify a type.
  This warning is enabled by default, as an error, in C99 and later
--- 6547,6554 ----
  \&        }
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in C++.
! .IP "\fB\-Wno\-implicit\-int\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-implicit-int (C and Objective-C only)"
  This option controls warnings when a declaration does not specify a type.
  This warning is enabled by default, as an error, in C99 and later
*************** to a warning using \fB\-fpermissive\fR (
*** 6624,6630 ****
  errors), or for this error alone, with \fB\-Wno\-error=implicit\-int\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-implicit\-function\-declaration\fR (C and Objective-C only)" 4
  .IX Item "-Wno-implicit-function-declaration (C and Objective-C only)"
  This option controls warnings when a function is used before being declared.
  This warning is enabled by default, as an error, in C99 and later
--- 6557,6563 ----
  errors), or for this error alone, with \fB\-Wno\-error=implicit\-int\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-implicit\-function\-declaration\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-implicit-function-declaration (C and Objective-C only)"
  This option controls warnings when a function is used before being declared.
  This warning is enabled by default, as an error, in C99 and later
*************** errors), or for this error alone, with
*** 6634,6644 ****
  \&\fB\-Wno\-error=implicit\-function\-declaration\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
  .IX Item "-Wimplicit (C and Objective-C only)"
  Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Whardened\fR" 4
  .IX Item "-Whardened"
  Warn when \fB\-fhardened\fR did not enable an option from its set (for
  which see \fB\-fhardened\fR).  For instance, using \fB\-fhardened\fR
--- 6567,6577 ----
  \&\fB\-Wno\-error=implicit\-function\-declaration\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wimplicit\fR (C and Objective\-C only)" 4
  .IX Item "-Wimplicit (C and Objective-C only)"
  Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Whardened\fR 4
  .IX Item "-Whardened"
  Warn when \fB\-fhardened\fR did not enable an option from its set (for
  which see \fB\-fhardened\fR).  For instance, using \fB\-fhardened\fR
*************** not be enabled by \fB\-fhardened\fR.
*** 6648,6659 ****
  .Sp
  This warning is enabled by default and has effect only when \fB\-fhardened\fR
  is enabled.
! .IP "\fB\-Wimplicit\-fallthrough\fR" 4
  .IX Item "-Wimplicit-fallthrough"
  \&\fB\-Wimplicit\-fallthrough\fR is the same as \fB\-Wimplicit\-fallthrough=3\fR
  and \fB\-Wno\-implicit\-fallthrough\fR is the same as
  \&\fB\-Wimplicit\-fallthrough=0\fR.
! .IP "\fB\-Wimplicit\-fallthrough=\fR\fIn\fR" 4
  .IX Item "-Wimplicit-fallthrough=n"
  Warn when a switch case falls through.  For example:
  .Sp
--- 6581,6592 ----
  .Sp
  This warning is enabled by default and has effect only when \fB\-fhardened\fR
  is enabled.
! .IP \fB\-Wimplicit\-fallthrough\fR 4
  .IX Item "-Wimplicit-fallthrough"
  \&\fB\-Wimplicit\-fallthrough\fR is the same as \fB\-Wimplicit\-fallthrough=3\fR
  and \fB\-Wno\-implicit\-fallthrough\fR is the same as
  \&\fB\-Wimplicit\-fallthrough=0\fR.
! .IP \fB\-Wimplicit\-fallthrough=\fR\fIn\fR 4
  .IX Item "-Wimplicit-fallthrough=n"
  Warn when a switch case falls through.  For example:
  .Sp
*************** warns when appropriate.  E.g.
*** 6694,6700 ****
  .Ve
  .Sp
  Since there are occasions where a switch case fall through is desirable,
! \&\s-1GCC\s0 provides an attribute, \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR, that is
  to be used along with a null statement to suppress this warning that
  would normally occur:
  .Sp
--- 6627,6633 ----
  .Ve
  .Sp
  Since there are occasions where a switch case fall through is desirable,
! GCC provides an attribute, \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR, that is
  to be used along with a null statement to suppress this warning that
  would normally occur:
  .Sp
*************** would normally occur:
*** 6709,6719 ****
  \&          }
  .Ve
  .Sp
! \&\*(C+17 provides a standard way to suppress the \fB\-Wimplicit\-fallthrough\fR
! warning using \f(CW\*(C`[[fallthrough]];\*(C'\fR instead of the \s-1GNU\s0 attribute.  In \*(C+11
! or \*(C+14 users can use \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR, which is a \s-1GNU\s0 extension.
  Instead of these attributes, it is also possible to add a fallthrough comment
! to silence the warning.  The whole body of the C or \*(C+ style comment should
  match the given regular expressions listed below.  The option argument \fIn\fR
  specifies what kind of comments are accepted:
  .RS 4
--- 6642,6652 ----
  \&          }
  .Ve
  .Sp
! C++17 provides a standard way to suppress the \fB\-Wimplicit\-fallthrough\fR
! warning using \f(CW\*(C`[[fallthrough]];\*(C'\fR instead of the GNU attribute.  In C++11
! or C++14 users can use \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR, which is a GNU extension.
  Instead of these attributes, it is also possible to add a fallthrough comment
! to silence the warning.  The whole body of the C or C++ style comment should
  match the given regular expressions listed below.  The option argument \fIn\fR
  specifies what kind of comments are accepted:
  .RS 4
*************** expression, any comment is used as fallt
*** 6733,6743 ****
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP "*<\f(CW\-fallthrough\fR>" 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP "*<\f(CW@fallthrough@\fR>" 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
--- 6666,6676 ----
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP *<\f(CW\-fallthrough\fR> 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP *<\f(CW@fallthrough@\fR> 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
*************** following regular expressions:
*** 6751,6770 ****
  .ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
  .el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
  .IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>"
  .RE
  .RS 4
  .RE
  .IP "*<\fB\-Wimplicit\-fallthrough=4\fR case sensitively matches one of the>" 4
  .IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>"
- .PD
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP "*<\f(CW\-fallthrough\fR>" 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP "*<\f(CW@fallthrough@\fR>" 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
--- 6684,6703 ----
  .ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
  .el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
  .IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>"
+ .PD
  .RE
  .RS 4
  .RE
  .IP "*<\fB\-Wimplicit\-fallthrough=4\fR case sensitively matches one of the>" 4
  .IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>"
  following regular expressions:
  .RS 4
  .ie n .IP "*<""\-fallthrough"">" 4
! .el .IP *<\f(CW\-fallthrough\fR> 4
  .IX Item "*<-fallthrough>"
  .PD 0
  .ie n .IP "*<""@fallthrough@"">" 4
! .el .IP *<\f(CW@fallthrough@\fR> 4
  .IX Item "*<@fallthrough@>"
  .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
  .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
*************** following regular expressions:
*** 6772,6783 ****
  .ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4
  .el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4
  .IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>"
  .RE
  .RS 4
  .RE
! .IP "*<\fB\-Wimplicit\-fallthrough=5\fR doesn't recognize any comments as>" 4
  .IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>"
- .PD
  fallthrough comments, only attributes disable the warning.
  .RE
  .RS 4
--- 6705,6716 ----
  .ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4
  .el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4
  .IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>"
+ .PD
  .RE
  .RS 4
  .RE
! .IP "*<\fB\-Wimplicit\-fallthrough=5\fR doesn\*(Aqt recognize any comments as>" 4
  .IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>"
  fallthrough comments, only attributes disable the warning.
  .RE
  .RS 4
*************** by \f(CW\*(C`case\*(C'\fR or \f(CW\*(C`d
*** 6799,6844 ****
  .Sp
  The \fB\-Wimplicit\-fallthrough=3\fR warning is enabled by \fB\-Wextra\fR.
  .RE
! .IP "\fB\-Wno\-if\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-if-not-aligned (C, , Objective-C and Objective- only)"
  Control if warnings triggered by the \f(CW\*(C`warn_if_not_aligned\*(C'\fR attribute
  should be issued.  These warnings are enabled by default.
! .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
! .IX Item "-Wignored-qualifiers (C and only)"
  Warn if the return type of a function has a type qualifier
! such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO C\s0 such a type qualifier has no effect,
  since the value returned by a function is not an lvalue.
! For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
! \&\s-1ISO C\s0 prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
  definitions, so such return types always receive a warning
  even without this option.
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-ignored\-attributes\fR (C and \*(C+ only)" 4
! .IX Item "-Wno-ignored-attributes (C and only)"
  This option controls warnings when an attribute is ignored.
  This is different from the
  \&\fB\-Wattributes\fR option in that it warns whenever the compiler decides
  to drop an attribute, not that the attribute is either unknown, used in a
  wrong place, etc.  This warning is enabled by default.
! .IP "\fB\-Wmain\fR" 4
  .IX Item "-Wmain"
  Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
  a function with external linkage, returning int, taking either zero
  arguments, two, or three arguments of appropriate types.  This warning
! is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
  or \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmisleading\-indentation\fR (C and \*(C+ only)" 4
! .IX Item "-Wmisleading-indentation (C and only)"
  Warn when the indentation of the code does not reflect the block structure.
  Specifically, a warning is issued for \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`while\*(C'\fR, and
  \&\f(CW\*(C`for\*(C'\fR clauses with a guarded statement that does not use braces,
  followed by an unguarded statement with the same indentation.
  .Sp
! In the following example, the call to \*(L"bar\*(R" is misleadingly indented as
! if it were guarded by the \*(L"if\*(R" conditional.
  .Sp
  .Vb 3
  \&          if (some_condition ())
--- 6732,6777 ----
  .Sp
  The \fB\-Wimplicit\-fallthrough=3\fR warning is enabled by \fB\-Wextra\fR.
  .RE
! .IP "\fB\-Wno\-if\-not\-aligned\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)"
  Control if warnings triggered by the \f(CW\*(C`warn_if_not_aligned\*(C'\fR attribute
  should be issued.  These warnings are enabled by default.
! .IP "\fB\-Wignored\-qualifiers\fR (C and C++ only)" 4
! .IX Item "-Wignored-qualifiers (C and C++ only)"
  Warn if the return type of a function has a type qualifier
! such as \f(CW\*(C`const\*(C'\fR.  For ISO C such a type qualifier has no effect,
  since the value returned by a function is not an lvalue.
! For C++, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
! ISO C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
  definitions, so such return types always receive a warning
  even without this option.
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-ignored\-attributes\fR (C and C++ only)" 4
! .IX Item "-Wno-ignored-attributes (C and C++ only)"
  This option controls warnings when an attribute is ignored.
  This is different from the
  \&\fB\-Wattributes\fR option in that it warns whenever the compiler decides
  to drop an attribute, not that the attribute is either unknown, used in a
  wrong place, etc.  This warning is enabled by default.
! .IP \fB\-Wmain\fR 4
  .IX Item "-Wmain"
  Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
  a function with external linkage, returning int, taking either zero
  arguments, two, or three arguments of appropriate types.  This warning
! is enabled by default in C++ and is enabled by either \fB\-Wall\fR
  or \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmisleading\-indentation\fR (C and C++ only)" 4
! .IX Item "-Wmisleading-indentation (C and C++ only)"
  Warn when the indentation of the code does not reflect the block structure.
  Specifically, a warning is issued for \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`while\*(C'\fR, and
  \&\f(CW\*(C`for\*(C'\fR clauses with a guarded statement that does not use braces,
  followed by an unguarded statement with the same indentation.
  .Sp
! In the following example, the call to "bar" is misleadingly indented as
! if it were guarded by the "if" conditional.
  .Sp
  .Vb 3
  \&          if (some_condition ())
*************** The warning is not issued after a \f(CW\
*** 6866,6873 ****
  typically indicates autogenerated code, and no assumptions can be made
  about the layout of the file that the directive references.
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and \*(C+.
! .IP "\fB\-Wmissing\-attributes\fR" 4
  .IX Item "-Wmissing-attributes"
  Warn when a declaration of a function is missing one or more attributes
  that a related function is declared with and whose absence may adversely
--- 6799,6806 ----
  typically indicates autogenerated code, and no assumptions can be made
  about the layout of the file that the directive references.
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and C++.
! .IP \fB\-Wmissing\-attributes\fR 4
  .IX Item "-Wmissing-attributes"
  Warn when a declaration of a function is missing one or more attributes
  that a related function is declared with and whose absence may adversely
*************** Attributes considered include \f(CW\*(C`
*** 6883,6889 ****
  \&\f(CW\*(C`nonnull\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`nothrow\*(C'\fR, \f(CW\*(C`pure\*(C'\fR,
  \&\f(CW\*(C`returns_nonnull\*(C'\fR, and \f(CW\*(C`returns_twice\*(C'\fR.
  .Sp
! In \*(C+, the warning is issued when an explicit specialization of a primary
  template declared with attribute \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
  \&\f(CW\*(C`assume_aligned\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`format_arg\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
  or \f(CW\*(C`nonnull\*(C'\fR is declared without it.  Attributes \f(CW\*(C`deprecated\*(C'\fR,
--- 6816,6822 ----
  \&\f(CW\*(C`nonnull\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`nothrow\*(C'\fR, \f(CW\*(C`pure\*(C'\fR,
  \&\f(CW\*(C`returns_nonnull\*(C'\fR, and \f(CW\*(C`returns_twice\*(C'\fR.
  .Sp
! In C++, the warning is issued when an explicit specialization of a primary
  template declared with attribute \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
  \&\f(CW\*(C`assume_aligned\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`format_arg\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
  or \f(CW\*(C`nonnull\*(C'\fR is declared without it.  Attributes \f(CW\*(C`deprecated\*(C'\fR,
*************** diagnosed because it is missing one of t
*** 6911,6917 ****
  \&        void* _\|_attribute_\|_ ((malloc))   // missing alloc_size
  \&        allocate<void> (size_t);
  .Ve
! .IP "\fB\-Wmissing\-braces\fR" 4
  .IX Item "-Wmissing-braces"
  Warn if an aggregate or union initializer is not fully bracketed.  In
  the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
--- 6844,6850 ----
  \&        void* _\|_attribute_\|_ ((malloc))   // missing alloc_size
  \&        allocate<void> (size_t);
  .Ve
! .IP \fB\-Wmissing\-braces\fR 4
  .IX Item "-Wmissing-braces"
  Warn if an aggregate or union initializer is not fully bracketed.  In
  the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
*************** bracketed, but that for \f(CW\*(C`b\*(C'
*** 6923,6934 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C, Objective\-\*(C+ and Fortran only)" 4
! .IX Item "-Wmissing-include-dirs (C, , Objective-C, Objective- and Fortran only)"
! Warn if a user-supplied include directory does not exist. This option is disabled
! by default for C, \*(C+, Objective-C and Objective\-\*(C+. For Fortran, it is partially
  enabled by default by warning for \-I and \-J, only.
! .IP "\fB\-Wno\-missing\-profile\fR" 4
  .IX Item "-Wno-missing-profile"
  This option controls warnings if feedback profiles are missing when using the
  \&\fB\-fprofile\-use\fR option.
--- 6856,6867 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wmissing\-include\-dirs\fR (C, C++, Objective\-C, Objective\-C++ and Fortran only)" 4
! .IX Item "-Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran only)"
! Warn if a user\-supplied include directory does not exist. This option is disabled
! by default for C, C++, Objective\-C and Objective\-C++. For Fortran, it is partially
  enabled by default by warning for \-I and \-J, only.
! .IP \fB\-Wno\-missing\-profile\fR 4
  .IX Item "-Wno-missing-profile"
  This option controls warnings if feedback profiles are missing when using the
  \&\fB\-fprofile\-use\fR option.
*************** between compiling with \fB\-fprofile\-ge
*** 6938,6959 ****
  In these cases, the profile feedback data files do not contain any
  profile feedback information for
  the newly added function or file respectively.  Also, in the case when profile
! count data (.gcda) files are removed, \s-1GCC\s0 cannot use any profile feedback
  information.  In all these cases, warnings are issued to inform you that a
  profile generation step is due.
  Ignoring the warning can result in poorly optimized code.
  \&\fB\-Wno\-missing\-profile\fR can be used to
  disable the warning, but this is not recommended and should be done only
! when non-existent profile data is justified.
! .IP "\fB\-Wmismatched\-dealloc\fR" 4
  .IX Item "-Wmismatched-dealloc"
  Warn for calls to deallocation functions with pointer arguments returned
! from allocation functions for which the former isn't a suitable
  deallocator.  A pair of functions can be associated as matching allocators
  and deallocators by use of attribute \f(CW\*(C`malloc\*(C'\fR.  Unless disabled by
  the \fB\-fno\-builtin\fR option the standard functions \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, \f(CW\*(C`realloc\*(C'\fR, and \f(CW\*(C`free\*(C'\fR, as well as the corresponding
! forms of \*(C+ \f(CW\*(C`operator new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR are implicitly
  associated as matching allocators and deallocators.  In the following
  example \f(CW\*(C`mydealloc\*(C'\fR is the deallocator for pointers returned from
  \&\f(CW\*(C`myalloc\*(C'\fR.
--- 6871,6892 ----
  In these cases, the profile feedback data files do not contain any
  profile feedback information for
  the newly added function or file respectively.  Also, in the case when profile
! count data (.gcda) files are removed, GCC cannot use any profile feedback
  information.  In all these cases, warnings are issued to inform you that a
  profile generation step is due.
  Ignoring the warning can result in poorly optimized code.
  \&\fB\-Wno\-missing\-profile\fR can be used to
  disable the warning, but this is not recommended and should be done only
! when non\-existent profile data is justified.
! .IP \fB\-Wmismatched\-dealloc\fR 4
  .IX Item "-Wmismatched-dealloc"
  Warn for calls to deallocation functions with pointer arguments returned
! from allocation functions for which the former isn\*(Aqt a suitable
  deallocator.  A pair of functions can be associated as matching allocators
  and deallocators by use of attribute \f(CW\*(C`malloc\*(C'\fR.  Unless disabled by
  the \fB\-fno\-builtin\fR option the standard functions \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, \f(CW\*(C`realloc\*(C'\fR, and \f(CW\*(C`free\*(C'\fR, as well as the corresponding
! forms of C++ \f(CW\*(C`operator new\*(C'\fR and \f(CW\*(C`operator delete\*(C'\fR are implicitly
  associated as matching allocators and deallocators.  In the following
  example \f(CW\*(C`mydealloc\*(C'\fR is the deallocator for pointers returned from
  \&\f(CW\*(C`myalloc\*(C'\fR.
*************** example \f(CW\*(C`mydealloc\*(C'\fR is t
*** 6973,6983 ****
  \&        }
  .Ve
  .Sp
! In \*(C+, the related option \fB\-Wmismatched\-new\-delete\fR diagnoses
  mismatches involving either \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  Option \fB\-Wmismatched\-dealloc\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wmultistatement\-macros\fR" 4
  .IX Item "-Wmultistatement-macros"
  Warn about unsafe multiple statement macros that appear to be guarded
  by a clause such as \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`for\*(C'\fR, \f(CW\*(C`switch\*(C'\fR, or
--- 6906,6916 ----
  \&        }
  .Ve
  .Sp
! In C++, the related option \fB\-Wmismatched\-new\-delete\fR diagnoses
  mismatches involving either \f(CW\*(C`operator new\*(C'\fR or \f(CW\*(C`operator delete\*(C'\fR.
  .Sp
  Option \fB\-Wmismatched\-dealloc\fR is included in \fB\-Wall\fR.
! .IP \fB\-Wmultistatement\-macros\fR 4
  .IX Item "-Wmultistatement-macros"
  Warn about unsafe multiple statement macros that appear to be guarded
  by a clause such as \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`for\*(C'\fR, \f(CW\*(C`switch\*(C'\fR, or
*************** For example:
*** 6993,6999 ****
  .Ve
  .Sp
  will increment \f(CW\*(C`y\*(C'\fR unconditionally, not just when \f(CW\*(C`c\*(C'\fR holds.
! The can usually be fixed by wrapping the macro in a do-while loop:
  .Sp
  .Vb 3
  \&        #define DOIT do { x++; y++; } while (0)
--- 6926,6932 ----
  .Ve
  .Sp
  will increment \f(CW\*(C`y\*(C'\fR unconditionally, not just when \f(CW\*(C`c\*(C'\fR holds.
! The can usually be fixed by wrapping the macro in a do\-while loop:
  .Sp
  .Vb 3
  \&        #define DOIT do { x++; y++; } while (0)
*************** The can usually be fixed by wrapping the
*** 7001,7008 ****
  \&          DOIT;
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and \*(C+.
! .IP "\fB\-Wparentheses\fR" 4
  .IX Item "-Wparentheses"
  Warn if parentheses are omitted in certain contexts, such
  as when there is an assignment in a context where a truth value
--- 6934,6941 ----
  \&          DOIT;
  .Ve
  .Sp
! This warning is enabled by \fB\-Wall\fR in C and C++.
! .IP \fB\-Wparentheses\fR 4
  .IX Item "-Wparentheses"
  Warn if parentheses are omitted in certain contexts, such
  as when there is an assignment in a context where a truth value
*************** Also warn if a comparison like \f(CW\*(C
*** 7013,7025 ****
  equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
  interpretation from that of ordinary mathematical notation.
  .Sp
! Also warn for dangerous uses of the \s-1GNU\s0 extension to
  \&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
  in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
  always 1.  Often programmers expect it to be a value computed
  inside the conditional expression instead.
  .Sp
! For \*(C+ this also warns for some cases of unnecessary parentheses in
  declarations, which can indicate an attempt at a function call instead
  of a declaration:
  .Sp
--- 6946,6958 ----
  equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
  interpretation from that of ordinary mathematical notation.
  .Sp
! Also warn for dangerous uses of the GNU extension to
  \&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
  in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
  always 1.  Often programmers expect it to be a value computed
  inside the conditional expression instead.
  .Sp
! For C++ this also warns for some cases of unnecessary parentheses in
  declarations, which can indicate an attempt at a function call instead
  of a declaration:
  .Sp
*************** of a declaration:
*** 7032,7039 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-self\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-self-move ( and Objective- only)"
  This warning warns when a value is moved to itself with \f(CW\*(C`std::move\*(C'\fR.
  Such a \f(CW\*(C`std::move\*(C'\fR typically has no effect.
  .Sp
--- 6965,6972 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-self\-move\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-self-move (C++ and Objective-C++ only)"
  This warning warns when a value is moved to itself with \f(CW\*(C`std::move\*(C'\fR.
  Such a \f(CW\*(C`std::move\*(C'\fR typically has no effect.
  .Sp
*************** Such a \f(CW\*(C`std::move\*(C'\fR typic
*** 7050,7061 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wsequence\-point\fR" 4
  .IX Item "-Wsequence-point"
  Warn about code that may have undefined semantics because of violations
! of sequence point rules in the C and \*(C+ standards.
  .Sp
! The C and \*(C+ standards define the order in which expressions in a C/\*(C+
  program are evaluated in terms of \fIsequence points\fR, which represent
  a partial ordering between the execution of parts of the program: those
  executed before the sequence point, and those executed after it.  These
--- 6983,6994 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wsequence\-point\fR 4
  .IX Item "-Wsequence-point"
  Warn about code that may have undefined semantics because of violations
! of sequence point rules in the C and C++ standards.
  .Sp
! The C and C++ standards define the order in which expressions in a C/C++
  program are evaluated in terms of \fIsequence points\fR, which represent
  a partial ordering between the execution of parts of the program: those
  executed before the sequence point, and those executed after it.  These
*************** ruled that function calls do not overlap
*** 7074,7084 ****
  .Sp
  It is not specified when between sequence points modifications to the
  values of objects take effect.  Programs whose behavior depends on this
! have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
  the previous and next sequence point an object shall have its stored
  value modified at most once by the evaluation of an expression.
  Furthermore, the prior value shall be read only to determine the value
! to be stored.\*(R".  If a program breaks these rules, the results on any
  particular implementation are entirely unpredictable.
  .Sp
  Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
--- 7007,7017 ----
  .Sp
  It is not specified when between sequence points modifications to the
  values of objects take effect.  Programs whose behavior depends on this
! have undefined behavior; the C and C++ standards specify that "Between
  the previous and next sequence point an object shall have its stored
  value modified at most once by the evaluation of an expression.
  Furthermore, the prior value shall be read only to determine the value
! to be stored.".  If a program breaks these rules, the results on any
  particular implementation are entirely unpredictable.
  .Sp
  Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
*************** diagnosed by this option, and it may giv
*** 7087,7116 ****
  result, but in general it has been found fairly effective at detecting
  this sort of problem in programs.
  .Sp
! The \*(C+17 standard will define the order of evaluation of operands in
! more cases: in particular it requires that the right-hand side of an
! assignment be evaluated before the left-hand side, so the above
  examples are no longer undefined.  But this option will still warn
  about them, to help people avoid writing code that is undefined in C
! and earlier revisions of \*(C+.
  .Sp
  The standard is worded confusingly, therefore there is some debate
  over the precise meaning of the sequence point rules in subtle cases.
  Links to discussions of the problem, including proposed formal
! definitions, may be found on the \s-1GCC\s0 readings page, at
  <\fBhttps://gcc.gnu.org/readings.html\fR>.
  .Sp
! This warning is enabled by \fB\-Wall\fR for C and \*(C+.
! .IP "\fB\-Wno\-return\-local\-addr\fR" 4
  .IX Item "-Wno-return-local-addr"
! Do not warn about returning a pointer (or in \*(C+, a reference) to a
  variable that goes out of scope after the function returns.
! .IP "\fB\-Wreturn\-mismatch\fR" 4
  .IX Item "-Wreturn-mismatch"
  Warn about return statements without an expressions in functions which
  do not return \f(CW\*(C`void\*(C'\fR.  Also warn about a \f(CW\*(C`return\*(C'\fR statement
  with an expression in a function whose return type is \f(CW\*(C`void\*(C'\fR,
! unless the expression type is also \f(CW\*(C`void\*(C'\fR.  As a \s-1GNU\s0 extension, the
  latter case is accepted without a warning unless \fB\-Wpedantic\fR is
  used.
  .Sp
--- 7020,7049 ----
  result, but in general it has been found fairly effective at detecting
  this sort of problem in programs.
  .Sp
! The C++17 standard will define the order of evaluation of operands in
! more cases: in particular it requires that the right\-hand side of an
! assignment be evaluated before the left\-hand side, so the above
  examples are no longer undefined.  But this option will still warn
  about them, to help people avoid writing code that is undefined in C
! and earlier revisions of C++.
  .Sp
  The standard is worded confusingly, therefore there is some debate
  over the precise meaning of the sequence point rules in subtle cases.
  Links to discussions of the problem, including proposed formal
! definitions, may be found on the GCC readings page, at
  <\fBhttps://gcc.gnu.org/readings.html\fR>.
  .Sp
! This warning is enabled by \fB\-Wall\fR for C and C++.
! .IP \fB\-Wno\-return\-local\-addr\fR 4
  .IX Item "-Wno-return-local-addr"
! Do not warn about returning a pointer (or in C++, a reference) to a
  variable that goes out of scope after the function returns.
! .IP \fB\-Wreturn\-mismatch\fR 4
  .IX Item "-Wreturn-mismatch"
  Warn about return statements without an expressions in functions which
  do not return \f(CW\*(C`void\*(C'\fR.  Also warn about a \f(CW\*(C`return\*(C'\fR statement
  with an expression in a function whose return type is \f(CW\*(C`void\*(C'\fR,
! unless the expression type is also \f(CW\*(C`void\*(C'\fR.  As a GNU extension, the
  latter case is accepted without a warning unless \fB\-Wpedantic\fR is
  used.
  .Sp
*************** This warning is specific to C and enable
*** 7122,7128 ****
  language dialects, it is treated as an error.  It can be downgraded
  to a warning using \fB\-fpermissive\fR (along with other warnings),
  or for just this warning, with \fB\-Wno\-error=return\-mismatch\fR.
! .IP "\fB\-Wreturn\-type\fR" 4
  .IX Item "-Wreturn-type"
  Warn whenever a function is defined with a return type that defaults to
  \&\f(CW\*(C`int\*(C'\fR (unless \fB\-Wimplicit\-int\fR is active, which takes
--- 7055,7061 ----
  language dialects, it is treated as an error.  It can be downgraded
  to a warning using \fB\-fpermissive\fR (along with other warnings),
  or for just this warning, with \fB\-Wno\-error=return\-mismatch\fR.
! .IP \fB\-Wreturn\-type\fR 4
  .IX Item "-Wreturn-type"
  Warn whenever a function is defined with a return type that defaults to
  \&\f(CW\*(C`int\*(C'\fR (unless \fB\-Wimplicit\-int\fR is active, which takes
*************** Attempting to use the return value of a
*** 7133,7179 ****
  than \f(CW\*(C`main\*(C'\fR that flows off the end by reaching the closing curly
  brace that terminates the function is undefined.
  .Sp
! Unlike in C, in \*(C+, flowing off the end of a non\-\f(CW\*(C`void\*(C'\fR function other
  than \f(CW\*(C`main\*(C'\fR results in undefined behavior even when the value of
  the function is not used.
  .Sp
! This warning is enabled by default in \*(C+ and by \fB\-Wall\fR otherwise.
! .IP "\fB\-Wno\-shift\-count\-negative\fR" 4
  .IX Item "-Wno-shift-count-negative"
  Controls warnings if a shift count is negative.
  This warning is enabled by default.
! .IP "\fB\-Wno\-shift\-count\-overflow\fR" 4
  .IX Item "-Wno-shift-count-overflow"
  Controls warnings if a shift count is greater than or equal to the bit width
  of the type.  This warning is enabled by default.
! .IP "\fB\-Wshift\-negative\-value\fR" 4
  .IX Item "-Wshift-negative-value"
  Warn if left shifting a negative value.  This warning is enabled by
! \&\fB\-Wextra\fR in C99 (and newer) and \*(C+11 to \*(C+17 modes.
! .IP "\fB\-Wno\-shift\-overflow\fR" 4
  .IX Item "-Wno-shift-overflow"
  .PD 0
! .IP "\fB\-Wshift\-overflow=\fR\fIn\fR" 4
  .IX Item "-Wshift-overflow=n"
  .PD
  These options control warnings about left shift overflows.
  .RS 4
! .IP "\fB\-Wshift\-overflow=1\fR" 4
  .IX Item "-Wshift-overflow=1"
  This is the warning level of \fB\-Wshift\-overflow\fR and is enabled
! by default in C99 and \*(C+11 modes (and newer).  This warning level does
! not warn about left-shifting 1 into the sign bit.  (However, in C, such
  an overflow is still rejected in contexts where an integer constant expression
! is required.)  No warning is emitted in \*(C+20 mode (and newer), as signed left
  shifts always wrap.
! .IP "\fB\-Wshift\-overflow=2\fR" 4
  .IX Item "-Wshift-overflow=2"
! This warning level also warns about left-shifting 1 into the sign bit,
! unless \*(C+14 mode (or newer) is active.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wswitch\fR" 4
  .IX Item "-Wswitch"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
--- 7066,7112 ----
  than \f(CW\*(C`main\*(C'\fR that flows off the end by reaching the closing curly
  brace that terminates the function is undefined.
  .Sp
! Unlike in C, in C++, flowing off the end of a non\-\f(CW\*(C`void\*(C'\fR function other
  than \f(CW\*(C`main\*(C'\fR results in undefined behavior even when the value of
  the function is not used.
  .Sp
! This warning is enabled by default in C++ and by \fB\-Wall\fR otherwise.
! .IP \fB\-Wno\-shift\-count\-negative\fR 4
  .IX Item "-Wno-shift-count-negative"
  Controls warnings if a shift count is negative.
  This warning is enabled by default.
! .IP \fB\-Wno\-shift\-count\-overflow\fR 4
  .IX Item "-Wno-shift-count-overflow"
  Controls warnings if a shift count is greater than or equal to the bit width
  of the type.  This warning is enabled by default.
! .IP \fB\-Wshift\-negative\-value\fR 4
  .IX Item "-Wshift-negative-value"
  Warn if left shifting a negative value.  This warning is enabled by
! \&\fB\-Wextra\fR in C99 (and newer) and C++11 to C++17 modes.
! .IP \fB\-Wno\-shift\-overflow\fR 4
  .IX Item "-Wno-shift-overflow"
  .PD 0
! .IP \fB\-Wshift\-overflow=\fR\fIn\fR 4
  .IX Item "-Wshift-overflow=n"
  .PD
  These options control warnings about left shift overflows.
  .RS 4
! .IP \fB\-Wshift\-overflow=1\fR 4
  .IX Item "-Wshift-overflow=1"
  This is the warning level of \fB\-Wshift\-overflow\fR and is enabled
! by default in C99 and C++11 modes (and newer).  This warning level does
! not warn about left\-shifting 1 into the sign bit.  (However, in C, such
  an overflow is still rejected in contexts where an integer constant expression
! is required.)  No warning is emitted in C++20 mode (and newer), as signed left
  shifts always wrap.
! .IP \fB\-Wshift\-overflow=2\fR 4
  .IX Item "-Wshift-overflow=2"
! This warning level also warns about left\-shifting 1 into the sign bit,
! unless C++14 mode (or newer) is active.
  .RE
  .RS 4
  .RE
! .IP \fB\-Wswitch\fR 4
  .IX Item "-Wswitch"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
*************** warning.)  \f(CW\*(C`case\*(C'\fR labels
*** 7182,7192 ****
  provoke warnings when this option is used (even if there is a
  \&\f(CW\*(C`default\*(C'\fR label).
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wswitch\-default\fR" 4
  .IX Item "-Wswitch-default"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
  case.
! .IP "\fB\-Wswitch\-enum\fR" 4
  .IX Item "-Wswitch-enum"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
--- 7115,7125 ----
  provoke warnings when this option is used (even if there is a
  \&\f(CW\*(C`default\*(C'\fR label).
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wswitch\-default\fR 4
  .IX Item "-Wswitch-default"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
  case.
! .IP \fB\-Wswitch\-enum\fR 4
  .IX Item "-Wswitch-enum"
  Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
  and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
*************** provoke warnings when this option is use
*** 7195,7201 ****
  between \fB\-Wswitch\fR and this option is that this option gives a
  warning about an omitted enumeration code even if there is a
  \&\f(CW\*(C`default\*(C'\fR label.
! .IP "\fB\-Wno\-switch\-bool\fR" 4
  .IX Item "-Wno-switch-bool"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type
  and the case values are outside the range of a boolean type.
--- 7128,7134 ----
  between \fB\-Wswitch\fR and this option is that this option gives a
  warning about an omitted enumeration code even if there is a
  \&\f(CW\*(C`default\*(C'\fR label.
! .IP \fB\-Wno\-switch\-bool\fR 4
  .IX Item "-Wno-switch-bool"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type
  and the case values are outside the range of a boolean type.
*************** expression to a type other than \f(CW\*(
*** 7209,7222 ****
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and \*(C+ programs.
! .IP "\fB\-Wno\-switch\-outside\-range\fR" 4
  .IX Item "-Wno-switch-outside-range"
  This option controls warnings when a \f(CW\*(C`switch\*(C'\fR case has a value
  that is outside of its
  respective type range.  This warning is enabled by default for
! C and \*(C+ programs.
! .IP "\fB\-Wno\-switch\-unreachable\fR" 4
  .IX Item "-Wno-switch-unreachable"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement contains statements between the
  controlling expression and the first case label, which will never be
--- 7142,7155 ----
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and C++ programs.
! .IP \fB\-Wno\-switch\-outside\-range\fR 4
  .IX Item "-Wno-switch-outside-range"
  This option controls warnings when a \f(CW\*(C`switch\*(C'\fR case has a value
  that is outside of its
  respective type range.  This warning is enabled by default for
! C and C++ programs.
! .IP \fB\-Wno\-switch\-unreachable\fR 4
  .IX Item "-Wno-switch-unreachable"
  Do not warn when a \f(CW\*(C`switch\*(C'\fR statement contains statements between the
  controlling expression and the first case label, which will never be
*************** controlling expression and the first cas
*** 7246,7263 ****
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and \*(C+ programs.
! .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
! .IX Item "-Wsync-nand (C and only)"
  Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
! built-in functions are used.  These functions changed semantics in \s-1GCC 4.4.\s0
! .IP "\fB\-Wtrivial\-auto\-var\-init\fR" 4
  .IX Item "-Wtrivial-auto-var-init"
  Warn when \f(CW\*(C`\-ftrivial\-auto\-var\-init\*(C'\fR cannot initialize the automatic
  variable.  A common situation is an automatic variable that is declared
  between the controlling expression and the first case label of a \f(CW\*(C`switch\*(C'\fR
  statement.
! .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
  .IX Item "-Wunused-but-set-parameter"
  Warn whenever a function parameter is assigned to, but otherwise unused
  (aside from its declaration).
--- 7179,7196 ----
  \&          }
  .Ve
  .Sp
! This warning is enabled by default for C and C++ programs.
! .IP "\fB\-Wsync\-nand\fR (C and C++ only)" 4
! .IX Item "-Wsync-nand (C and C++ only)"
  Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
! built\-in functions are used.  These functions changed semantics in GCC 4.4.
! .IP \fB\-Wtrivial\-auto\-var\-init\fR 4
  .IX Item "-Wtrivial-auto-var-init"
  Warn when \f(CW\*(C`\-ftrivial\-auto\-var\-init\*(C'\fR cannot initialize the automatic
  variable.  A common situation is an automatic variable that is declared
  between the controlling expression and the first case label of a \f(CW\*(C`switch\*(C'\fR
  statement.
! .IP \fB\-Wunused\-but\-set\-parameter\fR 4
  .IX Item "-Wunused-but-set-parameter"
  Warn whenever a function parameter is assigned to, but otherwise unused
  (aside from its declaration).
*************** To suppress this warning use the \f(CW\*
*** 7266,7272 ****
  .Sp
  This warning is also enabled by \fB\-Wunused\fR together with
  \&\fB\-Wextra\fR.
! .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
  .IX Item "-Wunused-but-set-variable"
  Warn whenever a local variable is assigned to, but otherwise unused
  (aside from its declaration).
--- 7199,7205 ----
  .Sp
  This warning is also enabled by \fB\-Wunused\fR together with
  \&\fB\-Wextra\fR.
! .IP \fB\-Wunused\-but\-set\-variable\fR 4
  .IX Item "-Wunused-but-set-variable"
  Warn whenever a local variable is assigned to, but otherwise unused
  (aside from its declaration).
*************** To suppress this warning use the \f(CW\*
*** 7276,7326 ****
  .Sp
  This warning is also enabled by \fB\-Wunused\fR, which is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-function\fR" 4
  .IX Item "-Wunused-function"
  Warn whenever a static function is declared but not defined or a
! non-inline static function is unused.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-label\fR" 4
  .IX Item "-Wunused-label"
  Warn whenever a label is declared but not used.
  This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
  Warn when a typedef locally defined in a function is not used.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-parameter\fR" 4
  .IX Item "-Wunused-parameter"
  Warn whenever a function parameter is unused aside from its declaration.
  This option is not enabled by \f(CW\*(C`\-Wunused\*(C'\fR unless \f(CW\*(C`\-Wextra\*(C'\fR is also
  specified.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wno\-unused\-result\fR" 4
  .IX Item "-Wno-unused-result"
  Do not warn if a caller of a function marked with attribute
  \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
  its return value. The default is \fB\-Wunused\-result\fR.
! .IP "\fB\-Wunused\-variable\fR" 4
  .IX Item "-Wunused-variable"
  Warn whenever a local or static variable is unused aside from its
  declaration. This option implies \fB\-Wunused\-const\-variable=1\fR for C,
! but not for \*(C+. This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wunused\-const\-variable\fR" 4
  .IX Item "-Wunused-const-variable"
  .PD 0
! .IP "\fB\-Wunused\-const\-variable=\fR\fIn\fR" 4
  .IX Item "-Wunused-const-variable=n"
  .PD
  Warn whenever a constant static variable is unused aside from its declaration.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
  .RS 4
! .IP "\fB\-Wunused\-const\-variable=1\fR" 4
  .IX Item "-Wunused-const-variable=1"
  Warn about unused static const variables defined in the main
  compilation unit, but not about static const variables declared in any
--- 7209,7259 ----
  .Sp
  This warning is also enabled by \fB\-Wunused\fR, which is enabled
  by \fB\-Wall\fR.
! .IP \fB\-Wunused\-function\fR 4
  .IX Item "-Wunused-function"
  Warn whenever a static function is declared but not defined or a
! non\-inline static function is unused.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wunused\-label\fR 4
  .IX Item "-Wunused-label"
  Warn whenever a label is declared but not used.
  This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)"
  Warn when a typedef locally defined in a function is not used.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wunused\-parameter\fR 4
  .IX Item "-Wunused-parameter"
  Warn whenever a function parameter is unused aside from its declaration.
  This option is not enabled by \f(CW\*(C`\-Wunused\*(C'\fR unless \f(CW\*(C`\-Wextra\*(C'\fR is also
  specified.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP \fB\-Wno\-unused\-result\fR 4
  .IX Item "-Wno-unused-result"
  Do not warn if a caller of a function marked with attribute
  \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
  its return value. The default is \fB\-Wunused\-result\fR.
! .IP \fB\-Wunused\-variable\fR 4
  .IX Item "-Wunused-variable"
  Warn whenever a local or static variable is unused aside from its
  declaration. This option implies \fB\-Wunused\-const\-variable=1\fR for C,
! but not for C++. This warning is enabled by \fB\-Wall\fR.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
! .IP \fB\-Wunused\-const\-variable\fR 4
  .IX Item "-Wunused-const-variable"
  .PD 0
! .IP \fB\-Wunused\-const\-variable=\fR\fIn\fR 4
  .IX Item "-Wunused-const-variable=n"
  .PD
  Warn whenever a constant static variable is unused aside from its declaration.
  .Sp
  To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
  .RS 4
! .IP \fB\-Wunused\-const\-variable=1\fR 4
  .IX Item "-Wunused-const-variable=1"
  Warn about unused static const variables defined in the main
  compilation unit, but not about static const variables declared in any
*************** header included.
*** 7328,7356 ****
  .Sp
  \&\fB\-Wunused\-const\-variable=1\fR is enabled by either
  \&\fB\-Wunused\-variable\fR or \fB\-Wunused\fR for C, but not for
! \&\*(C+. In C this declares variable storage, but in \*(C+ this is not an
  error since const variables take the place of \f(CW\*(C`#define\*(C'\fRs.
! .IP "\fB\-Wunused\-const\-variable=2\fR" 4
  .IX Item "-Wunused-const-variable=2"
  This warning level also warns for unused constant static variables in
  headers (excluding system headers).  It is equivalent to the short form
  \&\fB\-Wunused\-const\-variable\fR.  This level must be explicitly
! requested in both C and \*(C+ because it might be hard to clean up all
  headers included.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wunused\-value\fR" 4
  .IX Item "-Wunused-value"
  Warn whenever a statement computes a result that is explicitly not
  used. To suppress this warning cast the unused expression to
! \&\f(CW\*(C`void\*(C'\fR. This includes an expression-statement or the left-hand
  side of a comma expression that contains no side effects. For example,
  an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
  \&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wunused\fR" 4
  .IX Item "-Wunused"
  All the above \fB\-Wunused\fR options combined, except those documented
  as needing to be specified explicitly.
--- 7261,7289 ----
  .Sp
  \&\fB\-Wunused\-const\-variable=1\fR is enabled by either
  \&\fB\-Wunused\-variable\fR or \fB\-Wunused\fR for C, but not for
! C++. In C this declares variable storage, but in C++ this is not an
  error since const variables take the place of \f(CW\*(C`#define\*(C'\fRs.
! .IP \fB\-Wunused\-const\-variable=2\fR 4
  .IX Item "-Wunused-const-variable=2"
  This warning level also warns for unused constant static variables in
  headers (excluding system headers).  It is equivalent to the short form
  \&\fB\-Wunused\-const\-variable\fR.  This level must be explicitly
! requested in both C and C++ because it might be hard to clean up all
  headers included.
  .RE
  .RS 4
  .RE
! .IP \fB\-Wunused\-value\fR 4
  .IX Item "-Wunused-value"
  Warn whenever a statement computes a result that is explicitly not
  used. To suppress this warning cast the unused expression to
! \&\f(CW\*(C`void\*(C'\fR. This includes an expression\-statement or the left\-hand
  side of a comma expression that contains no side effects. For example,
  an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
  \&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wunused\fR 4
  .IX Item "-Wunused"
  All the above \fB\-Wunused\fR options combined, except those documented
  as needing to be specified explicitly.
*************** either specify \fB\-Wextra \-Wunused\fR
*** 7361,7371 ****
  \&\fB\-Wunused\-but\-set\-parameter\fR.
  .Sp
  \&\fB\-Wunused\fR enables only \fB\-Wunused\-const\-variable=1\fR rather than
! \&\fB\-Wunused\-const\-variable\fR, and only for C, not \*(C+.
! .IP "\fB\-Wuse\-after\-free\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wuse-after-free (C, Objective-C, and Objective- only)"
  .PD 0
! .IP "\fB\-Wuse\-after\-free=\fR\fIn\fR" 4
  .IX Item "-Wuse-after-free=n"
  .PD
  Warn about uses of pointers to dynamically allocated objects that have
--- 7294,7304 ----
  \&\fB\-Wunused\-but\-set\-parameter\fR.
  .Sp
  \&\fB\-Wunused\fR enables only \fB\-Wunused\-const\-variable=1\fR rather than
! \&\fB\-Wunused\-const\-variable\fR, and only for C, not C++.
! .IP "\fB\-Wuse\-after\-free\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wuse-after-free (C, Objective-C, C++ and Objective-C++ only)"
  .PD 0
! .IP \fB\-Wuse\-after\-free=\fR\fIn\fR 4
  .IX Item "-Wuse-after-free=n"
  .PD
  Warn about uses of pointers to dynamically allocated objects that have
*************** been rendered indeterminate by a call to
*** 7373,7379 ****
  The warning is enabled at all optimization levels but may yield different
  results with optimization than without.
  .RS 4
! .IP "\fB\-Wuse\-after\-free=1\fR" 4
  .IX Item "-Wuse-after-free=1"
  At level 1 the warning attempts to diagnose only unconditional uses
  of pointers made indeterminate by a deallocation call or a successful
--- 7306,7312 ----
  The warning is enabled at all optimization levels but may yield different
  results with optimization than without.
  .RS 4
! .IP \fB\-Wuse\-after\-free=1\fR 4
  .IX Item "-Wuse-after-free=1"
  At level 1 the warning attempts to diagnose only unconditional uses
  of pointers made indeterminate by a deallocation call or a successful
*************** in an actual reallocation of memory.  Th
*** 7382,7388 ****
  calls as well as uses in arithmetic and relational expressions.  Although
  undefined, uses of indeterminate pointers in equality (or inequality)
  expressions are not diagnosed at this level.
! .IP "\fB\-Wuse\-after\-free=2\fR" 4
  .IX Item "-Wuse-after-free=2"
  At level 2, in addition to unconditional uses, the warning also diagnoses
  conditional uses of pointers made indeterminate by a deallocation call.
--- 7315,7321 ----
  calls as well as uses in arithmetic and relational expressions.  Although
  undefined, uses of indeterminate pointers in equality (or inequality)
  expressions are not diagnosed at this level.
! .IP \fB\-Wuse\-after\-free=2\fR 4
  .IX Item "-Wuse-after-free=2"
  At level 2, in addition to unconditional uses, the warning also diagnoses
  conditional uses of pointers made indeterminate by a deallocation call.
*************** function is diagnosed at this level:
*** 7401,7407 ****
  \&            free (p\->data);   // warning: p may be used after free
  \&        }
  .Ve
! .IP "\fB\-Wuse\-after\-free=3\fR" 4
  .IX Item "-Wuse-after-free=3"
  At level 3, the warning also diagnoses uses of indeterminate pointers in
  equality expressions.  All uses of indeterminate pointers are undefined
--- 7334,7340 ----
  \&            free (p\->data);   // warning: p may be used after free
  \&        }
  .Ve
! .IP \fB\-Wuse\-after\-free=3\fR 4
  .IX Item "-Wuse-after-free=3"
  At level 3, the warning also diagnoses uses of indeterminate pointers in
  equality expressions.  All uses of indeterminate pointers are undefined
*************** pointers after reallocation.
*** 7431,7440 ****
  .Sp
  \&\fB\-Wuse\-after\-free=2\fR is included in \fB\-Wall\fR.
  .RE
! .IP "\fB\-Wuseless\-cast\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wuseless-cast (C, Objective-C, and Objective- only)"
  Warn when an expression is cast to its own type.  This warning does not
! occur when a class object is converted to a non-reference type as that
  is a way to create a temporary:
  .Sp
  .Vb 6
--- 7364,7373 ----
  .Sp
  \&\fB\-Wuse\-after\-free=2\fR is included in \fB\-Wall\fR.
  .RE
! .IP "\fB\-Wuseless\-cast\fR (C, Objective\-C, C++ and Objective\-C++ only)" 4
! .IX Item "-Wuseless-cast (C, Objective-C, C++ and Objective-C++ only)"
  Warn when an expression is cast to its own type.  This warning does not
! occur when a class object is converted to a non\-reference type as that
  is a way to create a temporary:
  .Sp
  .Vb 6
*************** is a way to create a temporary:
*** 7445,7459 ****
  \&          g (S(arg)); // make arg prvalue so that it can bind to S&&
  \&        }
  .Ve
! .IP "\fB\-Wuninitialized\fR" 4
  .IX Item "-Wuninitialized"
  Warn if an object with automatic or allocated storage duration is used
! without having been initialized.  In \*(C+, also warn if a non-static
! reference or non-static \f(CW\*(C`const\*(C'\fR member appears in a class without
  constructors.
  .Sp
! In addition, passing a pointer (or in \*(C+, a reference) to an uninitialized
! object to a \f(CW\*(C`const\*(C'\fR\-qualified argument of a built-in function known to
  read the object is also diagnosed by this warning.
  (\fB\-Wmaybe\-uninitialized\fR is issued for ordinary functions.)
  .Sp
--- 7378,7392 ----
  \&          g (S(arg)); // make arg prvalue so that it can bind to S&&
  \&        }
  .Ve
! .IP \fB\-Wuninitialized\fR 4
  .IX Item "-Wuninitialized"
  Warn if an object with automatic or allocated storage duration is used
! without having been initialized.  In C++, also warn if a non\-static
! reference or non\-static \f(CW\*(C`const\*(C'\fR member appears in a class without
  constructors.
  .Sp
! In addition, passing a pointer (or in C++, a reference) to an uninitialized
! object to a \f(CW\*(C`const\*(C'\fR\-qualified argument of a built\-in function known to
  read the object is also diagnosed by this warning.
  (\fB\-Wmaybe\-uninitialized\fR is issued for ordinary functions.)
  .Sp
*************** structure, union or array variables as w
*** 7465,7471 ****
  uninitialized as a whole.  They do not occur for variables or elements
  declared \f(CW\*(C`volatile\*(C'\fR.  Because these warnings depend on
  optimization, the exact variables or elements for which there are
! warnings depend on the precise optimization options and version of \s-1GCC\s0
  used.
  .Sp
  Note that there may be no warning about a variable that is used only
--- 7398,7404 ----
  uninitialized as a whole.  They do not occur for variables or elements
  declared \f(CW\*(C`volatile\*(C'\fR.  Because these warnings depend on
  optimization, the exact variables or elements for which there are
! warnings depend on the precise optimization options and version of GCC
  used.
  .Sp
  Note that there may be no warning about a variable that is used only
*************** to compute a value that itself is never
*** 7473,7480 ****
  computations may be deleted by data flow analysis before the warnings
  are printed.
  .Sp
! In \*(C+, this warning also warns about using uninitialized objects in
! member-initializer-lists.  For example, \s-1GCC\s0 warns about \f(CW\*(C`b\*(C'\fR being
  uninitialized in the following snippet:
  .Sp
  .Vb 5
--- 7406,7413 ----
  computations may be deleted by data flow analysis before the warnings
  are printed.
  .Sp
! In C++, this warning also warns about using uninitialized objects in
! member\-initializer\-lists.  For example, GCC warns about \f(CW\*(C`b\*(C'\fR being
  uninitialized in the following snippet:
  .Sp
  .Vb 5
*************** uninitialized in the following snippet:
*** 7484,7497 ****
  \&          A() : a(b) { }
  \&        };
  .Ve
! .IP "\fB\-Wno\-invalid\-memory\-model\fR" 4
  .IX Item "-Wno-invalid-memory-model"
  This option controls warnings
  for invocations of \fB_\|_atomic Builtins\fR, \fB_\|_sync Builtins\fR,
  and the C11 atomic generic functions with a memory consistency argument
  that is either invalid for the operation or outside the range of values
  of the \f(CW\*(C`memory_order\*(C'\fR enumeration.  For example, since the
! \&\f(CW\*(C`_\|_atomic_store\*(C'\fR and \f(CW\*(C`_\|_atomic_store_n\*(C'\fR built-ins are only
  defined for the relaxed, release, and sequentially consistent memory
  orders the following code is diagnosed:
  .Sp
--- 7417,7430 ----
  \&          A() : a(b) { }
  \&        };
  .Ve
! .IP \fB\-Wno\-invalid\-memory\-model\fR 4
  .IX Item "-Wno-invalid-memory-model"
  This option controls warnings
  for invocations of \fB_\|_atomic Builtins\fR, \fB_\|_sync Builtins\fR,
  and the C11 atomic generic functions with a memory consistency argument
  that is either invalid for the operation or outside the range of values
  of the \f(CW\*(C`memory_order\*(C'\fR enumeration.  For example, since the
! \&\f(CW\*(C`_\|_atomic_store\*(C'\fR and \f(CW\*(C`_\|_atomic_store_n\*(C'\fR built\-ins are only
  defined for the relaxed, release, and sequentially consistent memory
  orders the following code is diagnosed:
  .Sp
*************** orders the following code is diagnosed:
*** 7503,7509 ****
  .Ve
  .Sp
  \&\fB\-Winvalid\-memory\-model\fR is enabled by default.
! .IP "\fB\-Wmaybe\-uninitialized\fR" 4
  .IX Item "-Wmaybe-uninitialized"
  For an object with automatic or allocated storage duration, if there exists
  a path from the function entry to a use of the object that is initialized,
--- 7436,7442 ----
  .Ve
  .Sp
  \&\fB\-Winvalid\-memory\-model\fR is enabled by default.
! .IP \fB\-Wmaybe\-uninitialized\fR 4
  .IX Item "-Wmaybe-uninitialized"
  For an object with automatic or allocated storage duration, if there exists
  a path from the function entry to a use of the object that is initialized,
*************** but there exist some other paths for whi
*** 7511,7527 ****
  the compiler emits a warning if it cannot prove the uninitialized paths
  are not executed at run time.
  .Sp
! In addition, passing a pointer (or in \*(C+, a reference) to an uninitialized
  object to a \f(CW\*(C`const\*(C'\fR\-qualified function argument is also diagnosed by
! this warning.  (\fB\-Wuninitialized\fR is issued for built-in functions
  known to read the object.)  Annotating the function with attribute
! \&\f(CW\*(C`access (none)\*(C'\fR indicates that the argument isn't used to access
  the object and avoids the warning.
  .Sp
  These warnings are only possible in optimizing compilation, because otherwise
! \&\s-1GCC\s0 does not keep track of the state of variables.
  .Sp
! These warnings are made optional because \s-1GCC\s0 may not be able to determine when
  the code is correct in spite of appearing to have an error.  Here is one
  example of how this can happen:
  .Sp
--- 7444,7460 ----
  the compiler emits a warning if it cannot prove the uninitialized paths
  are not executed at run time.
  .Sp
! In addition, passing a pointer (or in C++, a reference) to an uninitialized
  object to a \f(CW\*(C`const\*(C'\fR\-qualified function argument is also diagnosed by
! this warning.  (\fB\-Wuninitialized\fR is issued for built\-in functions
  known to read the object.)  Annotating the function with attribute
! \&\f(CW\*(C`access (none)\*(C'\fR indicates that the argument isn\*(Aqt used to access
  the object and avoids the warning.
  .Sp
  These warnings are only possible in optimizing compilation, because otherwise
! GCC does not keep track of the state of variables.
  .Sp
! These warnings are made optional because GCC may not be able to determine when
  the code is correct in spite of appearing to have an error.  Here is one
  example of how this can happen:
  .Sp
*************** example of how this can happen:
*** 7541,7551 ****
  .Ve
  .Sp
  If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
! always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
! warning, you need to provide a default case with \fIassert\fR\|(0) or
  similar code.
  .Sp
! This option also warns when a non-volatile automatic variable might be
  changed by a call to \f(CW\*(C`longjmp\*(C'\fR.
  The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
  where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
--- 7474,7484 ----
  .Ve
  .Sp
  If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
! always initialized, but GCC doesn\*(Aqt know this. To suppress the
! warning, you need to provide a default case with \fBassert\fR\|(0) or
  similar code.
  .Sp
! This option also warns when a non\-volatile automatic variable might be
  changed by a call to \f(CW\*(C`longjmp\*(C'\fR.
  The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
  where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
*************** Some spurious warnings can be avoided if
*** 7557,7574 ****
  you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
  .Sp
  This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
! .IP "\fB\-Wunknown\-pragmas\fR" 4
  .IX Item "-Wunknown-pragmas"
  Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
! \&\s-1GCC.\s0  If this command-line option is used, warnings are even issued
  for unknown pragmas in system header files.  This is not the case if
! the warnings are only enabled by the \fB\-Wall\fR command-line option.
! .IP "\fB\-Wno\-pragmas\fR" 4
  .IX Item "-Wno-pragmas"
  Do not warn about misuses of pragmas, such as incorrect parameters,
  invalid syntax, or conflicts between pragmas.  See also
  \&\fB\-Wunknown\-pragmas\fR.
! .IP "\fB\-Wno\-prio\-ctor\-dtor\fR" 4
  .IX Item "-Wno-prio-ctor-dtor"
  Do not warn if a priority from 0 to 100 is used for constructor or destructor.
  The use of constructor and destructor attributes allow you to assign a
--- 7490,7507 ----
  you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
  .Sp
  This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
! .IP \fB\-Wunknown\-pragmas\fR 4
  .IX Item "-Wunknown-pragmas"
  Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
! GCC.  If this command\-line option is used, warnings are even issued
  for unknown pragmas in system header files.  This is not the case if
! the warnings are only enabled by the \fB\-Wall\fR command\-line option.
! .IP \fB\-Wno\-pragmas\fR 4
  .IX Item "-Wno-pragmas"
  Do not warn about misuses of pragmas, such as incorrect parameters,
  invalid syntax, or conflicts between pragmas.  See also
  \&\fB\-Wunknown\-pragmas\fR.
! .IP \fB\-Wno\-prio\-ctor\-dtor\fR 4
  .IX Item "-Wno-prio-ctor-dtor"
  Do not warn if a priority from 0 to 100 is used for constructor or destructor.
  The use of constructor and destructor attributes allow you to assign a
*************** priority to the constructor/destructor t
*** 7576,7582 ****
  before \f(CW\*(C`main\*(C'\fR is called or after it returns.  The priority values must be
  greater than 100 as the compiler reserves priority values between 0\-\-100 for
  the implementation.
! .IP "\fB\-Wstrict\-aliasing\fR" 4
  .IX Item "-Wstrict-aliasing"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
--- 7509,7515 ----
  before \f(CW\*(C`main\*(C'\fR is called or after it returns.  The priority values must be
  greater than 100 as the compiler reserves priority values between 0\-\-100 for
  the implementation.
! .IP \fB\-Wstrict\-aliasing\fR 4
  .IX Item "-Wstrict-aliasing"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
*************** compiler is using for optimization.  The
*** 7584,7590 ****
  cases, but does attempt to catch the more common pitfalls.  It is
  included in \fB\-Wall\fR.
  It is equivalent to \fB\-Wstrict\-aliasing=3\fR
! .IP "\fB\-Wstrict\-aliasing=n\fR" 4
  .IX Item "-Wstrict-aliasing=n"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
--- 7517,7523 ----
  cases, but does attempt to catch the more common pitfalls.  It is
  included in \fB\-Wall\fR.
  It is equivalent to \fB\-Wstrict\-aliasing=3\fR
! .IP \fB\-Wstrict\-aliasing=n\fR 4
  .IX Item "-Wstrict-aliasing=n"
  This option is only active when \fB\-fstrict\-aliasing\fR is active.
  It warns about code that might break the strict aliasing rules that the
*************** negatives.  Slightly slower than levels
*** 7613,7625 ****
  Takes care of the common pun+dereference pattern in the front end:
  \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
  If optimization is enabled, it also runs in the back end, where it deals
! with multiple statement cases using flow-sensitive points-to information.
  Only warns when the converted pointer is dereferenced.
  Does not warn about incomplete types.
! .IP "\fB\-Wstrict\-overflow\fR" 4
  .IX Item "-Wstrict-overflow"
  .PD 0
! .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
  .IX Item "-Wstrict-overflow=n"
  .PD
  This option is only active when signed overflow is undefined.
--- 7546,7558 ----
  Takes care of the common pun+dereference pattern in the front end:
  \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
  If optimization is enabled, it also runs in the back end, where it deals
! with multiple statement cases using flow\-sensitive points\-to information.
  Only warns when the converted pointer is dereferenced.
  Does not warn about incomplete types.
! .IP \fB\-Wstrict\-overflow\fR 4
  .IX Item "-Wstrict-overflow"
  .PD 0
! .IP \fB\-Wstrict\-overflow=\fR\fIn\fR 4
  .IX Item "-Wstrict-overflow=n"
  .PD
  This option is only active when signed overflow is undefined.
*************** undefined signed overflow when estimatin
*** 7639,7652 ****
  requires, in particular when determining whether a loop will be
  executed at all.
  .RS 4
! .IP "\fB\-Wstrict\-overflow=1\fR" 4
  .IX Item "-Wstrict-overflow=1"
  Warn about cases that are both questionable and easy to avoid.  For
  example the compiler simplifies
  \&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
  \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
  are not, and must be explicitly requested.
! .IP "\fB\-Wstrict\-overflow=2\fR" 4
  .IX Item "-Wstrict-overflow=2"
  Also warn about other cases where a comparison is simplified to a
  constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
--- 7572,7585 ----
  requires, in particular when determining whether a loop will be
  executed at all.
  .RS 4
! .IP \fB\-Wstrict\-overflow=1\fR 4
  .IX Item "-Wstrict-overflow=1"
  Warn about cases that are both questionable and easy to avoid.  For
  example the compiler simplifies
  \&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
  \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
  are not, and must be explicitly requested.
! .IP \fB\-Wstrict\-overflow=2\fR 4
  .IX Item "-Wstrict-overflow=2"
  Also warn about other cases where a comparison is simplified to a
  constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
*************** simplified when signed integer overflow
*** 7654,7668 ****
  \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
  zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
  \&\fB\-Wstrict\-overflow=2\fR.
! .IP "\fB\-Wstrict\-overflow=3\fR" 4
  .IX Item "-Wstrict-overflow=3"
  Also warn about other cases where a comparison is simplified.  For
  example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
! .IP "\fB\-Wstrict\-overflow=4\fR" 4
  .IX Item "-Wstrict-overflow=4"
  Also warn about other simplifications not covered by the above cases.
  For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
! .IP "\fB\-Wstrict\-overflow=5\fR" 4
  .IX Item "-Wstrict-overflow=5"
  Also warn about cases where the compiler reduces the magnitude of a
  constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
--- 7587,7601 ----
  \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
  zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
  \&\fB\-Wstrict\-overflow=2\fR.
! .IP \fB\-Wstrict\-overflow=3\fR 4
  .IX Item "-Wstrict-overflow=3"
  Also warn about other cases where a comparison is simplified.  For
  example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
! .IP \fB\-Wstrict\-overflow=4\fR 4
  .IX Item "-Wstrict-overflow=4"
  Also warn about other simplifications not covered by the above cases.
  For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
! .IP \fB\-Wstrict\-overflow=5\fR 4
  .IX Item "-Wstrict-overflow=5"
  Also warn about cases where the compiler reduces the magnitude of a
  constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
*************** false positives.
*** 7673,7687 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wstring\-compare\fR" 4
  .IX Item "-Wstring-compare"
  Warn for calls to \f(CW\*(C`strcmp\*(C'\fR and \f(CW\*(C`strncmp\*(C'\fR whose result is
! determined to be either zero or non-zero in tests for such equality
  owing to the length of one argument being greater than the size of
  the array the other argument is stored in (or the bound in the case
  of \f(CW\*(C`strncmp\*(C'\fR).  Such calls could be mistakes.  For example,
  the call to \f(CW\*(C`strcmp\*(C'\fR below is diagnosed because its result is
! necessarily non-zero irrespective of the contents of the array \f(CW\*(C`a\*(C'\fR.
  .Sp
  .Vb 8
  \&        extern char a[4];
--- 7606,7620 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wstring\-compare\fR 4
  .IX Item "-Wstring-compare"
  Warn for calls to \f(CW\*(C`strcmp\*(C'\fR and \f(CW\*(C`strncmp\*(C'\fR whose result is
! determined to be either zero or non\-zero in tests for such equality
  owing to the length of one argument being greater than the size of
  the array the other argument is stored in (or the bound in the case
  of \f(CW\*(C`strncmp\*(C'\fR).  Such calls could be mistakes.  For example,
  the call to \f(CW\*(C`strcmp\*(C'\fR below is diagnosed because its result is
! necessarily non\-zero irrespective of the contents of the array \f(CW\*(C`a\*(C'\fR.
  .Sp
  .Vb 8
  \&        extern char a[4];
*************** necessarily non-zero irrespective of the
*** 7695,7706 ****
  .Ve
  .Sp
  \&\fB\-Wstring\-compare\fR is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-stringop\-overflow\fR" 4
  .IX Item "-Wno-stringop-overflow"
  .PD 0
! .IP "\fB\-Wstringop\-overflow\fR" 4
  .IX Item "-Wstringop-overflow"
! .IP "\fB\-Wstringop\-overflow=\fR\fItype\fR" 4
  .IX Item "-Wstringop-overflow=type"
  .PD
  Warn for calls to string manipulation functions such as \f(CW\*(C`memcpy\*(C'\fR and
--- 7628,7639 ----
  .Ve
  .Sp
  \&\fB\-Wstring\-compare\fR is enabled by \fB\-Wextra\fR.
! .IP \fB\-Wno\-stringop\-overflow\fR 4
  .IX Item "-Wno-stringop-overflow"
  .PD 0
! .IP \fB\-Wstringop\-overflow\fR 4
  .IX Item "-Wstringop-overflow"
! .IP \fB\-Wstringop\-overflow=\fR\fItype\fR 4
  .IX Item "-Wstringop-overflow=type"
  .PD
  Warn for calls to string manipulation functions such as \f(CW\*(C`memcpy\*(C'\fR and
*************** of Object Size type\-0.  The option also
*** 7713,7724 ****
  in excess of the largest possible object or at most \f(CW\*(C`SIZE_MAX / 2\*(C'\fR bytes.
  The option produces the best results with optimization enabled but can detect
  a small subset of simple buffer overflows even without optimization in
! calls to the \s-1GCC\s0 built-in functions like \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR that
  correspond to the standard functions.  In any case, the option warns about
  just a subset of buffer overflows detected by the corresponding overflow
! checking built-ins.  For example, the option issues a warning for
  the \f(CW\*(C`strcpy\*(C'\fR call below because it copies at least 5 characters
! (the string \f(CW"blue"\fR including the terminating \s-1NUL\s0) into the buffer
  of size 4.
  .Sp
  .Vb 11
--- 7646,7657 ----
  in excess of the largest possible object or at most \f(CW\*(C`SIZE_MAX / 2\*(C'\fR bytes.
  The option produces the best results with optimization enabled but can detect
  a small subset of simple buffer overflows even without optimization in
! calls to the GCC built\-in functions like \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR that
  correspond to the standard functions.  In any case, the option warns about
  just a subset of buffer overflows detected by the corresponding overflow
! checking built\-ins.  For example, the option issues a warning for
  the \f(CW\*(C`strcpy\*(C'\fR call below because it copies at least 5 characters
! (the string \f(CW"blue"\fR including the terminating NUL) into the buffer
  of size 4.
  .Sp
  .Vb 11
*************** of size 4.
*** 7740,7778 ****
  .Sp
  Option \fB\-Wstringop\-overflow=2\fR is enabled by default.
  .RS 4
! .IP "\fB\-Wstringop\-overflow\fR" 4
  .IX Item "-Wstringop-overflow"
  .PD 0
! .IP "\fB\-Wstringop\-overflow=1\fR" 4
  .IX Item "-Wstringop-overflow=1"
  .PD
! The \fB\-Wstringop\-overflow=1\fR option uses type-zero Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  does not warn for writes past the end of subobjects of larger objects accessed
  by pointers unless the size of the largest surrounding object is known.  When
  the destination may be one of several objects it is assumed to be the largest
  one of them.  On Linux systems, when optimization is enabled at this setting
  the option warns for the same code as when the \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR macro
! is defined to a non-zero value.
! .IP "\fB\-Wstringop\-overflow=2\fR" 4
  .IX Item "-Wstringop-overflow=2"
! The \fB\-Wstringop\-overflow=2\fR option uses type-one Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflows when writing to members of the largest complete
  objects whose exact size is known.  However, it does not warn for excessive
  writes to the same members of unknown objects referenced by pointers since
  they may point to arrays containing unknown numbers of elements.  This is
  the default setting of the option.
! .IP "\fB\-Wstringop\-overflow=3\fR" 4
  .IX Item "-Wstringop-overflow=3"
! The \fB\-Wstringop\-overflow=3\fR option uses type-two Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing the smallest object or data member.  This is the
  most restrictive setting of the option that may result in warnings for safe
  code.
! .IP "\fB\-Wstringop\-overflow=4\fR" 4
  .IX Item "-Wstringop-overflow=4"
! The \fB\-Wstringop\-overflow=4\fR option uses type-three Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing any data members, and when the destination is
  one of several objects it uses the size of the largest of them to decide
--- 7673,7711 ----
  .Sp
  Option \fB\-Wstringop\-overflow=2\fR is enabled by default.
  .RS 4
! .IP \fB\-Wstringop\-overflow\fR 4
  .IX Item "-Wstringop-overflow"
  .PD 0
! .IP \fB\-Wstringop\-overflow=1\fR 4
  .IX Item "-Wstringop-overflow=1"
  .PD
! The \fB\-Wstringop\-overflow=1\fR option uses type\-zero Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  does not warn for writes past the end of subobjects of larger objects accessed
  by pointers unless the size of the largest surrounding object is known.  When
  the destination may be one of several objects it is assumed to be the largest
  one of them.  On Linux systems, when optimization is enabled at this setting
  the option warns for the same code as when the \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR macro
! is defined to a non\-zero value.
! .IP \fB\-Wstringop\-overflow=2\fR 4
  .IX Item "-Wstringop-overflow=2"
! The \fB\-Wstringop\-overflow=2\fR option uses type\-one Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflows when writing to members of the largest complete
  objects whose exact size is known.  However, it does not warn for excessive
  writes to the same members of unknown objects referenced by pointers since
  they may point to arrays containing unknown numbers of elements.  This is
  the default setting of the option.
! .IP \fB\-Wstringop\-overflow=3\fR 4
  .IX Item "-Wstringop-overflow=3"
! The \fB\-Wstringop\-overflow=3\fR option uses type\-two Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing the smallest object or data member.  This is the
  most restrictive setting of the option that may result in warnings for safe
  code.
! .IP \fB\-Wstringop\-overflow=4\fR 4
  .IX Item "-Wstringop-overflow=4"
! The \fB\-Wstringop\-overflow=4\fR option uses type\-three Object Size Checking
  to determine the sizes of destination objects.  At this setting the option
  warns about overflowing any data members, and when the destination is
  one of several objects it uses the size of the largest of them to decide
*************** setting of the option may result in warn
*** 7781,7794 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wno\-stringop\-overread\fR" 4
  .IX Item "-Wno-stringop-overread"
  Warn for calls to string manipulation functions such as \f(CW\*(C`memchr\*(C'\fR, or
  \&\f(CW\*(C`strcpy\*(C'\fR that are determined to read past the end of the source
  sequence.
  .Sp
  Option \fB\-Wstringop\-overread\fR is enabled by default.
! .IP "\fB\-Wno\-stringop\-truncation\fR" 4
  .IX Item "-Wno-stringop-truncation"
  Do not warn for calls to bounded string manipulation functions
  such as \f(CW\*(C`strncat\*(C'\fR,
--- 7714,7727 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Wno\-stringop\-overread\fR 4
  .IX Item "-Wno-stringop-overread"
  Warn for calls to string manipulation functions such as \f(CW\*(C`memchr\*(C'\fR, or
  \&\f(CW\*(C`strcpy\*(C'\fR that are determined to read past the end of the source
  sequence.
  .Sp
  Option \fB\-Wstringop\-overread\fR is enabled by default.
! .IP \fB\-Wno\-stringop\-truncation\fR 4
  .IX Item "-Wno-stringop-truncation"
  Do not warn for calls to bounded string manipulation functions
  such as \f(CW\*(C`strncat\*(C'\fR,
*************** warning use \f(CW\*(C`bufsize \- strlen
*** 7808,7818 ****
  .Ve
  .Sp
  As another example, the following call to \f(CW\*(C`strncpy\*(C'\fR results in copying
! to \f(CW\*(C`d\*(C'\fR just the characters preceding the terminating \s-1NUL,\s0 without
! appending the \s-1NUL\s0 to the end.  Assuming the result of \f(CW\*(C`strncpy\*(C'\fR is
! necessarily a NUL-terminated string is a common mistake, and so the call
  is diagnosed.  To avoid the warning when the result is not expected to be
! NUL-terminated, call \f(CW\*(C`memcpy\*(C'\fR instead.
  .Sp
  .Vb 4
  \&        void copy (char *d, const char *s)
--- 7741,7751 ----
  .Ve
  .Sp
  As another example, the following call to \f(CW\*(C`strncpy\*(C'\fR results in copying
! to \f(CW\*(C`d\*(C'\fR just the characters preceding the terminating NUL, without
! appending the NUL to the end.  Assuming the result of \f(CW\*(C`strncpy\*(C'\fR is
! necessarily a NUL\-terminated string is a common mistake, and so the call
  is diagnosed.  To avoid the warning when the result is not expected to be
! NUL\-terminated, call \f(CW\*(C`memcpy\*(C'\fR instead.
  .Sp
  .Vb 4
  \&        void copy (char *d, const char *s)
*************** NUL-terminated, call \f(CW\*(C`memcpy\*(
*** 7824,7830 ****
  In the following example, the call to \f(CW\*(C`strncpy\*(C'\fR specifies the size
  of the destination buffer as the bound.  If the length of the source
  string is equal to or greater than this size the result of the copy will
! not be NUL-terminated.  Therefore, the call is also diagnosed.  To avoid
  the warning, specify \f(CW\*(C`sizeof buf \- 1\*(C'\fR as the bound and set the last
  element of the buffer to \f(CW\*(C`NUL\*(C'\fR.
  .Sp
--- 7757,7763 ----
  In the following example, the call to \f(CW\*(C`strncpy\*(C'\fR specifies the size
  of the destination buffer as the bound.  If the length of the source
  string is equal to or greater than this size the result of the copy will
! not be NUL\-terminated.  Therefore, the call is also diagnosed.  To avoid
  the warning, specify \f(CW\*(C`sizeof buf \- 1\*(C'\fR as the bound and set the last
  element of the buffer to \f(CW\*(C`NUL\*(C'\fR.
  .Sp
*************** of bytes with no terminating \f(CW\*(C`N
*** 7842,7854 ****
  with attribute \f(CW\*(C`nonstring\*(C'\fR to avoid this warning.  Such arrays,
  however, are not suitable arguments to functions that expect
  \&\f(CW\*(C`NUL\*(C'\fR\-terminated strings.  To help detect accidental misuses of
! such arrays \s-1GCC\s0 issues warnings unless it can prove that the use is
  safe.
! .IP "\fB\-Wstrict\-flex\-arrays\fR (C and \*(C+ only)" 4
! .IX Item "-Wstrict-flex-arrays (C and only)"
  Warn about improper usages of flexible array members
! according to the \fIlevel\fR of the \f(CW\*(C`strict_flex_array (\f(CIlevel\f(CW)\*(C'\fR
! attribute attached to the trailing array field of a structure if it's
  available, otherwise according to the \fIlevel\fR of the option
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR.    \f(CW\*(C`\-Wstrict\-flex\-arrays\*(C'\fR
  is effective only when \fIlevel\fR is greater than 0.
--- 7775,7787 ----
  with attribute \f(CW\*(C`nonstring\*(C'\fR to avoid this warning.  Such arrays,
  however, are not suitable arguments to functions that expect
  \&\f(CW\*(C`NUL\*(C'\fR\-terminated strings.  To help detect accidental misuses of
! such arrays GCC issues warnings unless it can prove that the use is
  safe.
! .IP "\fB\-Wstrict\-flex\-arrays\fR (C and C++ only)" 4
! .IX Item "-Wstrict-flex-arrays (C and C++ only)"
  Warn about improper usages of flexible array members
! according to the \fIlevel\fR of the \f(CW\*(C`strict_flex_array (\fR\f(CIlevel\fR\f(CW)\*(C'\fR
! attribute attached to the trailing array field of a structure if it\*(Aqs
  available, otherwise according to the \fIlevel\fR of the option
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR.    \f(CW\*(C`\-Wstrict\-flex\-arrays\*(C'\fR
  is effective only when \fIlevel\fR is greater than 0.
*************** of a structure that have 2 or more eleme
*** 7858,7988 ****
  as a flexible array member.
  .Sp
  When \fIlevel\fR=2, in addition to \fIlevel\fR=1, additional warnings are
! issued for a trailing one-element array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  When \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings are
! issued for a trailing zero-length array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  This option is more effective when \fB\-ftree\-vrp\fR is active (the
  default for \fB\-O2\fR and above) but some warnings may be diagnosed
  even without optimization.
! .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBcold\fR|\fBmalloc\fR]\fBreturns_nonnull\fR|" 4
  .IX Item "-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]returns_nonnull|"
  Warn for cases where adding an attribute may be beneficial. The
  attributes currently supported are listed below.
  .RS 4
! .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
  .IX Item "-Wsuggest-attribute=pure"
  .PD 0
! .IP "\fB\-Wsuggest\-attribute=const\fR" 4
  .IX Item "-Wsuggest-attribute=const"
! .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
  .IX Item "-Wsuggest-attribute=noreturn"
! .IP "\fB\-Wmissing\-noreturn\fR" 4
  .IX Item "-Wmissing-noreturn"
! .IP "\fB\-Wsuggest\-attribute=malloc\fR" 4
  .IX Item "-Wsuggest-attribute=malloc"
! .IP "\fB\-Wsuggest\-attribute=returns_nonnull\fR" 4
  .IX Item "-Wsuggest-attribute=returns_nonnull"
! .IP "\fB\-Wno\-suggest\-attribute=returns_nonnull\fR" 4
  .IX Item "-Wno-suggest-attribute=returns_nonnull"
  .PD
  Warn about functions that might be candidates for attributes
  \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`returns_nonnull\*(C'\fR. The compiler
  only warns for functions visible in other compilation units or (in the case of
  \&\f(CW\*(C`pure\*(C'\fR and \f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns
! normally. A function returns normally if it doesn't contain an infinite loop or
  return abnormally by throwing, calling \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis
  requires option \fB\-fipa\-pure\-const\fR, which is enabled by default at
  \&\fB\-O\fR and higher.  Higher optimization levels improve the accuracy
  of the analysis.
! .IP "\fB\-Wsuggest\-attribute=format\fR" 4
  .IX Item "-Wsuggest-attribute=format"
  .PD 0
! .IP "\fB\-Wmissing\-format\-attribute\fR" 4
  .IX Item "-Wmissing-format-attribute"
  .PD
  Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
  attributes.  Note these are only possible candidates, not absolute ones.
! \&\s-1GCC\s0 guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
  are used in assignment, initialization, parameter passing or return
  statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
! resulting type.  I.e. the left-hand side of the assignment or
  initialization, the type of the parameter variable, or the return type
  of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
  attribute to avoid the warning.
  .Sp
! \&\s-1GCC\s0 also warns about function definitions that might be
  candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
! possible candidates.  \s-1GCC\s0 guesses that \f(CW\*(C`format\*(C'\fR attributes
  might be appropriate for any function that calls a function like
  \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
  case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
  appropriate may not be detected.
! .IP "\fB\-Wsuggest\-attribute=cold\fR" 4
  .IX Item "-Wsuggest-attribute=cold"
  Warn about functions that might be candidates for \f(CW\*(C`cold\*(C'\fR attribute.  This
  is based on static detection and generally only warns about functions which
  always leads to a call to another \f(CW\*(C`cold\*(C'\fR function such as wrappers of
! \&\*(C+ \f(CW\*(C`throw\*(C'\fR or fatal error reporting functions leading to \f(CW\*(C`abort\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Walloc\-size\fR" 4
  .IX Item "-Walloc-size"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR that specify insufficient size for the target type of
! the pointer the result is assigned to, including those to the built-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR,
  \&\f(CW\*(C`calloc\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.
! .IP "\fB\-Walloc\-zero\fR" 4
  .IX Item "-Walloc-zero"
  Warn about calls to allocation functions decorated with attribute
! \&\f(CW\*(C`alloc_size\*(C'\fR that specify zero bytes, including those to the built-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.  Because the behavior of these functions
  when called with a zero size differs among implementations (and in the case
  of \f(CW\*(C`realloc\*(C'\fR has been deprecated) relying on it may result in subtle
  portability bugs and should be avoided.
! .IP "\fB\-Wcalloc\-transposed\-args\fR" 4
  .IX Item "-Wcalloc-transposed-args"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR with two arguments, which use \f(CW\*(C`sizeof\*(C'\fR operator
! as the earlier size argument and don't use it as the later size argument.
  This is a coding style warning.  The first argument to \f(CW\*(C`calloc\*(C'\fR is
  documented to be number of elements in array, while the second argument
! is size of each element, so \f(CW\*(C`calloc (\f(CIn\f(CW, sizeof (int))\*(C'\fR is preferred
! over \f(CW\*(C`calloc (sizeof (int), \f(CIn\f(CW)\*(C'\fR.  If \f(CW\*(C`sizeof\*(C'\fR in the earlier
  argument and not the latter is intentional, the warning can be suppressed
! by using \f(CW\*(C`calloc (sizeof (struct \f(CIS\f(CW) + 0, n)\*(C'\fR or
! \&\f(CW\*(C`calloc (1 * sizeof (struct \f(CIS\f(CW), 4)\*(C'\fR or using \f(CW\*(C`sizeof\*(C'\fR in the
  later argument as well.
! .IP "\fB\-Walloc\-size\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Walloc-size-larger-than=byte-size"
  Warn about calls to functions decorated with attribute \f(CW\*(C`alloc_size\*(C'\fR
  that attempt to allocate objects larger than the specified number of bytes,
  or where the result of the size computation in an integer type with infinite
! precision would exceed the value of \fB\s-1PTRDIFF_MAX\s0\fR on the target.
! \&\fB\-Walloc\-size\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
  \&\fB\-Wno\-alloc\-size\-larger\-than\fR.
! .IP "\fB\-Wno\-alloc\-size\-larger\-than\fR" 4
  .IX Item "-Wno-alloc-size-larger-than"
  Disable \fB\-Walloc\-size\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloc\-size\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or
  larger.
! .IP "\fB\-Walloca\fR" 4
  .IX Item "-Walloca"
  This option warns on all uses of \f(CW\*(C`alloca\*(C'\fR in the source.
! .IP "\fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Walloca-larger-than=byte-size"
  This option warns on calls to \f(CW\*(C`alloca\*(C'\fR with an integer argument whose
  value is either zero, or that is not bounded by a controlling predicate
! that limits its value to at most \fIbyte-size\fR.  It also warns for calls
! to \f(CW\*(C`alloca\*(C'\fR where the bound value is unknown.  Arguments of non-integer
  types are considered unbounded even if they appear to be constrained to
  the expected range.
  .Sp
--- 7791,7921 ----
  as a flexible array member.
  .Sp
  When \fIlevel\fR=2, in addition to \fIlevel\fR=1, additional warnings are
! issued for a trailing one\-element array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  When \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings are
! issued for a trailing zero\-length array reference of a structure
  if the array is referenced as a flexible array member.
  .Sp
  This option is more effective when \fB\-ftree\-vrp\fR is active (the
  default for \fB\-O2\fR and above) but some warnings may be diagnosed
  even without optimization.
! .IP \fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBcold\fR|\fBmalloc\fR]\fBreturns_nonnull\fR| 4
  .IX Item "-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]returns_nonnull|"
  Warn for cases where adding an attribute may be beneficial. The
  attributes currently supported are listed below.
  .RS 4
! .IP \fB\-Wsuggest\-attribute=pure\fR 4
  .IX Item "-Wsuggest-attribute=pure"
  .PD 0
! .IP \fB\-Wsuggest\-attribute=const\fR 4
  .IX Item "-Wsuggest-attribute=const"
! .IP \fB\-Wsuggest\-attribute=noreturn\fR 4
  .IX Item "-Wsuggest-attribute=noreturn"
! .IP \fB\-Wmissing\-noreturn\fR 4
  .IX Item "-Wmissing-noreturn"
! .IP \fB\-Wsuggest\-attribute=malloc\fR 4
  .IX Item "-Wsuggest-attribute=malloc"
! .IP \fB\-Wsuggest\-attribute=returns_nonnull\fR 4
  .IX Item "-Wsuggest-attribute=returns_nonnull"
! .IP \fB\-Wno\-suggest\-attribute=returns_nonnull\fR 4
  .IX Item "-Wno-suggest-attribute=returns_nonnull"
  .PD
  Warn about functions that might be candidates for attributes
  \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`returns_nonnull\*(C'\fR. The compiler
  only warns for functions visible in other compilation units or (in the case of
  \&\f(CW\*(C`pure\*(C'\fR and \f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns
! normally. A function returns normally if it doesn\*(Aqt contain an infinite loop or
  return abnormally by throwing, calling \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis
  requires option \fB\-fipa\-pure\-const\fR, which is enabled by default at
  \&\fB\-O\fR and higher.  Higher optimization levels improve the accuracy
  of the analysis.
! .IP \fB\-Wsuggest\-attribute=format\fR 4
  .IX Item "-Wsuggest-attribute=format"
  .PD 0
! .IP \fB\-Wmissing\-format\-attribute\fR 4
  .IX Item "-Wmissing-format-attribute"
  .PD
  Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
  attributes.  Note these are only possible candidates, not absolute ones.
! GCC guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
  are used in assignment, initialization, parameter passing or return
  statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
! resulting type.  I.e. the left\-hand side of the assignment or
  initialization, the type of the parameter variable, or the return type
  of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
  attribute to avoid the warning.
  .Sp
! GCC also warns about function definitions that might be
  candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
! possible candidates.  GCC guesses that \f(CW\*(C`format\*(C'\fR attributes
  might be appropriate for any function that calls a function like
  \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
  case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
  appropriate may not be detected.
! .IP \fB\-Wsuggest\-attribute=cold\fR 4
  .IX Item "-Wsuggest-attribute=cold"
  Warn about functions that might be candidates for \f(CW\*(C`cold\*(C'\fR attribute.  This
  is based on static detection and generally only warns about functions which
  always leads to a call to another \f(CW\*(C`cold\*(C'\fR function such as wrappers of
! C++ \f(CW\*(C`throw\*(C'\fR or fatal error reporting functions leading to \f(CW\*(C`abort\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-Walloc\-size\fR 4
  .IX Item "-Walloc-size"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR that specify insufficient size for the target type of
! the pointer the result is assigned to, including those to the built\-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR,
  \&\f(CW\*(C`calloc\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.
! .IP \fB\-Walloc\-zero\fR 4
  .IX Item "-Walloc-zero"
  Warn about calls to allocation functions decorated with attribute
! \&\f(CW\*(C`alloc_size\*(C'\fR that specify zero bytes, including those to the built\-in
  forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`calloc\*(C'\fR,
  \&\f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.  Because the behavior of these functions
  when called with a zero size differs among implementations (and in the case
  of \f(CW\*(C`realloc\*(C'\fR has been deprecated) relying on it may result in subtle
  portability bugs and should be avoided.
! .IP \fB\-Wcalloc\-transposed\-args\fR 4
  .IX Item "-Wcalloc-transposed-args"
  Warn about calls to allocation functions decorated with attribute
  \&\f(CW\*(C`alloc_size\*(C'\fR with two arguments, which use \f(CW\*(C`sizeof\*(C'\fR operator
! as the earlier size argument and don\*(Aqt use it as the later size argument.
  This is a coding style warning.  The first argument to \f(CW\*(C`calloc\*(C'\fR is
  documented to be number of elements in array, while the second argument
! is size of each element, so \f(CW\*(C`calloc (\fR\f(CIn\fR\f(CW, sizeof (int))\*(C'\fR is preferred
! over \f(CW\*(C`calloc (sizeof (int), \fR\f(CIn\fR\f(CW)\*(C'\fR.  If \f(CW\*(C`sizeof\*(C'\fR in the earlier
  argument and not the latter is intentional, the warning can be suppressed
! by using \f(CW\*(C`calloc (sizeof (struct \fR\f(CIS\fR\f(CW) + 0, n)\*(C'\fR or
! \&\f(CW\*(C`calloc (1 * sizeof (struct \fR\f(CIS\fR\f(CW), 4)\*(C'\fR or using \f(CW\*(C`sizeof\*(C'\fR in the
  later argument as well.
! .IP \fB\-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Walloc-size-larger-than=byte-size"
  Warn about calls to functions decorated with attribute \f(CW\*(C`alloc_size\*(C'\fR
  that attempt to allocate objects larger than the specified number of bytes,
  or where the result of the size computation in an integer type with infinite
! precision would exceed the value of \fBPTRDIFF_MAX\fR on the target.
! \&\fB\-Walloc\-size\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by
  \&\fB\-Wno\-alloc\-size\-larger\-than\fR.
! .IP \fB\-Wno\-alloc\-size\-larger\-than\fR 4
  .IX Item "-Wno-alloc-size-larger-than"
  Disable \fB\-Walloc\-size\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloc\-size\-larger\-than=\fR\fBSIZE_MAX\fR or
  larger.
! .IP \fB\-Walloca\fR 4
  .IX Item "-Walloca"
  This option warns on all uses of \f(CW\*(C`alloca\*(C'\fR in the source.
! .IP \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Walloca-larger-than=byte-size"
  This option warns on calls to \f(CW\*(C`alloca\*(C'\fR with an integer argument whose
  value is either zero, or that is not bounded by a controlling predicate
! that limits its value to at most \fIbyte\-size\fR.  It also warns for calls
! to \f(CW\*(C`alloca\*(C'\fR where the bound value is unknown.  Arguments of non\-integer
  types are considered unbounded even if they appear to be constrained to
  the expected range.
  .Sp
*************** expected argument to be implicitly cast
*** 8038,8053 ****
  .Sp
  This option also warns when \f(CW\*(C`alloca\*(C'\fR is used in a loop.
  .Sp
! \&\fB\-Walloca\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default
  but is usually only effective  when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Wvla\-larger\-than=\fR\fBbyte-size\fR.
! .IP "\fB\-Wno\-alloca\-larger\-than\fR" 4
  .IX Item "-Wno-alloca-larger-than"
  Disable \fB\-Walloca\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloca\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Warith\-conversion\fR" 4
  .IX Item "-Warith-conversion"
  Do warn about implicit conversions from arithmetic operations even
  when conversion of the operands to the same type cannot change their
--- 7971,7986 ----
  .Sp
  This option also warns when \f(CW\*(C`alloca\*(C'\fR is used in a loop.
  .Sp
! \&\fB\-Walloca\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default
  but is usually only effective  when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Wvla\-larger\-than=\fR\fBbyte\-size\fR.
! .IP \fB\-Wno\-alloca\-larger\-than\fR 4
  .IX Item "-Wno-alloca-larger-than"
  Disable \fB\-Walloca\-larger\-than=\fR warnings.  The option is
! equivalent to \fB\-Walloca\-larger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Warith\-conversion\fR 4
  .IX Item "-Warith-conversion"
  Do warn about implicit conversions from arithmetic operations even
  when conversion of the operands to the same type cannot change their
*************** values.  This affects warnings from \fB\
*** 8061,8070 ****
  \&          c = c + 1; // only warns with B<\-Warith\-conversion>
  \&        }
  .Ve
! .IP "\fB\-Warray\-bounds\fR" 4
  .IX Item "-Warray-bounds"
  .PD 0
! .IP "\fB\-Warray\-bounds=\fR\fIn\fR" 4
  .IX Item "-Warray-bounds=n"
  .PD
  Warn about out of bounds subscripts or offsets into arrays.  This warning
--- 7994,8003 ----
  \&          c = c + 1; // only warns with B<\-Warith\-conversion>
  \&        }
  .Ve
! .IP \fB\-Warray\-bounds\fR 4
  .IX Item "-Warray-bounds"
  .PD 0
! .IP \fB\-Warray\-bounds=\fR\fIn\fR 4
  .IX Item "-Warray-bounds=n"
  .PD
  Warn about out of bounds subscripts or offsets into arrays.  This warning
*************** are issued even without optimization.
*** 8075,8083 ****
  By default, the trailing array of a structure will be treated as a flexible
  array member by \fB\-Warray\-bounds\fR or \fB\-Warray\-bounds=\fR\fIn\fR
  if it is declared as either a flexible array member per C99 standard onwards
! (\fB[]\fR), a \s-1GCC\s0 zero-length array extension (\fB[0]\fR), or an one-element
  array (\fB[1]\fR). As a result, out of bounds subscripts or offsets into
! zero-length arrays or one-element arrays are not warned by default.
  .Sp
  You can add the option \fB\-fstrict\-flex\-arrays\fR or
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR to control how this
--- 8008,8016 ----
  By default, the trailing array of a structure will be treated as a flexible
  array member by \fB\-Warray\-bounds\fR or \fB\-Warray\-bounds=\fR\fIn\fR
  if it is declared as either a flexible array member per C99 standard onwards
! (\fB[]\fR), a GCC zero\-length array extension (\fB[0]\fR), or an one\-element
  array (\fB[1]\fR). As a result, out of bounds subscripts or offsets into
! zero\-length arrays or one\-element arrays are not warned by default.
  .Sp
  You can add the option \fB\-fstrict\-flex\-arrays\fR or
  \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR to control how this
*************** option treat trailing array of a structu
*** 8086,8101 ****
  when \fIlevel\fR<=1, no change to the default behavior.
  .Sp
  when \fIlevel\fR=2, additional warnings will be issued for out of bounds
! subscripts or offsets into one-element arrays;
  .Sp
  when \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings will be
! issued for out of bounds subscripts or offsets into zero-length arrays.
  .RS 4
! .IP "\fB\-Warray\-bounds=1\fR" 4
  .IX Item "-Warray-bounds=1"
  This is the default warning level of \fB\-Warray\-bounds\fR and is enabled
  by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
! .IP "\fB\-Warray\-bounds=2\fR" 4
  .IX Item "-Warray-bounds=2"
  This warning level also warns about the intermediate results of pointer
  arithmetic that may yield out of bounds values. This warning level may
--- 8019,8034 ----
  when \fIlevel\fR<=1, no change to the default behavior.
  .Sp
  when \fIlevel\fR=2, additional warnings will be issued for out of bounds
! subscripts or offsets into one\-element arrays;
  .Sp
  when \fIlevel\fR=3, in addition to \fIlevel\fR=2, additional warnings will be
! issued for out of bounds subscripts or offsets into zero\-length arrays.
  .RS 4
! .IP \fB\-Warray\-bounds=1\fR 4
  .IX Item "-Warray-bounds=1"
  This is the default warning level of \fB\-Warray\-bounds\fR and is enabled
  by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
! .IP \fB\-Warray\-bounds=2\fR 4
  .IX Item "-Warray-bounds=2"
  This warning level also warns about the intermediate results of pointer
  arithmetic that may yield out of bounds values. This warning level may
*************** give a larger number of false positives
*** 8103,8112 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-Warray\-compare\fR" 4
  .IX Item "-Warray-compare"
  Warn about equality and relational comparisons between two operands of array
! type.  This comparison was deprecated in \*(C+20.  For example:
  .Sp
  .Vb 3
  \&        int arr1[5];
--- 8036,8045 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-Warray\-compare\fR 4
  .IX Item "-Warray-compare"
  Warn about equality and relational comparisons between two operands of array
! type.  This comparison was deprecated in C++20.  For example:
  .Sp
  .Vb 3
  \&        int arr1[5];
*************** type.  This comparison was deprecated in
*** 8115,8129 ****
  .Ve
  .Sp
  \&\fB\-Warray\-compare\fR is enabled by \fB\-Wall\fR.
! .IP "\fB\-Warray\-parameter\fR" 4
  .IX Item "-Warray-parameter"
  .PD 0
! .IP "\fB\-Warray\-parameter=\fR\fIn\fR" 4
  .IX Item "-Warray-parameter=n"
  .PD
  Warn about redeclarations of functions involving parameters of array or
  pointer types of inconsistent kinds or forms, and enable the detection
! of out-of-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
  If the first function declaration uses the array form for a parameter
--- 8048,8062 ----
  .Ve
  .Sp
  \&\fB\-Warray\-compare\fR is enabled by \fB\-Wall\fR.
! .IP \fB\-Warray\-parameter\fR 4
  .IX Item "-Warray-parameter"
  .PD 0
! .IP \fB\-Warray\-parameter=\fR\fIn\fR 4
  .IX Item "-Warray-parameter=n"
  .PD
  Warn about redeclarations of functions involving parameters of array or
  pointer types of inconsistent kinds or forms, and enable the detection
! of out\-of\-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
  If the first function declaration uses the array form for a parameter
*************** involving Variable Length Array argument
*** 8171,8191 ****
  The short form of the option \fB\-Warray\-parameter\fR is equivalent to
  \&\fB\-Warray\-parameter=2\fR.  The negative form \fB\-Wno\-array\-parameter\fR
  is equivalent to \fB\-Warray\-parameter=0\fR.
! .IP "\fB\-Wattribute\-alias=\fR\fIn\fR" 4
  .IX Item "-Wattribute-alias=n"
  .PD 0
! .IP "\fB\-Wno\-attribute\-alias\fR" 4
  .IX Item "-Wno-attribute-alias"
  .PD
  Warn about declarations using the \f(CW\*(C`alias\*(C'\fR and similar attributes whose
  target is incompatible with the type of the alias.
  .RS 4
! .IP "\fB\-Wattribute\-alias=1\fR" 4
  .IX Item "-Wattribute-alias=1"
  The default warning level of the \fB\-Wattribute\-alias\fR option diagnoses
  incompatibilities between the type of the alias declaration and that of its
  target.  Such incompatibilities are typically indicative of bugs.
! .IP "\fB\-Wattribute\-alias=2\fR" 4
  .IX Item "-Wattribute-alias=2"
  At this level \fB\-Wattribute\-alias\fR also diagnoses cases where
  the attributes of the alias declaration are more restrictive than the
--- 8104,8124 ----
  The short form of the option \fB\-Warray\-parameter\fR is equivalent to
  \&\fB\-Warray\-parameter=2\fR.  The negative form \fB\-Wno\-array\-parameter\fR
  is equivalent to \fB\-Warray\-parameter=0\fR.
! .IP \fB\-Wattribute\-alias=\fR\fIn\fR 4
  .IX Item "-Wattribute-alias=n"
  .PD 0
! .IP \fB\-Wno\-attribute\-alias\fR 4
  .IX Item "-Wno-attribute-alias"
  .PD
  Warn about declarations using the \f(CW\*(C`alias\*(C'\fR and similar attributes whose
  target is incompatible with the type of the alias.
  .RS 4
! .IP \fB\-Wattribute\-alias=1\fR 4
  .IX Item "-Wattribute-alias=1"
  The default warning level of the \fB\-Wattribute\-alias\fR option diagnoses
  incompatibilities between the type of the alias declaration and that of its
  target.  Such incompatibilities are typically indicative of bugs.
! .IP \fB\-Wattribute\-alias=2\fR 4
  .IX Item "-Wattribute-alias=2"
  At this level \fB\-Wattribute\-alias\fR also diagnoses cases where
  the attributes of the alias declaration are more restrictive than the
*************** Attributes considered include \f(CW\*(C`
*** 8207,8222 ****
  This is the default.  You can disable these warnings with either
  \&\fB\-Wno\-attribute\-alias\fR or \fB\-Wattribute\-alias=0\fR.
  .RE
! .IP "\fB\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR]" 4
  .IX Item "-Wbidi-chars=[none|unpaired|any|ucn]"
! Warn about possibly misleading \s-1UTF\-8\s0 bidirectional control characters in
  comments, string literals, character constants, and identifiers.  Such
! characters can change left-to-right writing direction into right-to-left
  (and vice versa), which can cause confusion between the logical order and
  visual order.  This may be dangerous; for instance, it may seem that a piece
  of code is not commented out, whereas it in fact is.
  .Sp
! There are three levels of warning supported by \s-1GCC.\s0  The default is
  \&\fB\-Wbidi\-chars=unpaired\fR, which warns about improperly terminated
  bidi contexts.  \fB\-Wbidi\-chars=none\fR turns the warning off.
  \&\fB\-Wbidi\-chars=any\fR warns about any use of bidirectional control
--- 8140,8155 ----
  This is the default.  You can disable these warnings with either
  \&\fB\-Wno\-attribute\-alias\fR or \fB\-Wattribute\-alias=0\fR.
  .RE
! .IP \fB\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR] 4
  .IX Item "-Wbidi-chars=[none|unpaired|any|ucn]"
! Warn about possibly misleading UTF\-8 bidirectional control characters in
  comments, string literals, character constants, and identifiers.  Such
! characters can change left\-to\-right writing direction into right\-to\-left
  (and vice versa), which can cause confusion between the logical order and
  visual order.  This may be dangerous; for instance, it may seem that a piece
  of code is not commented out, whereas it in fact is.
  .Sp
! There are three levels of warning supported by GCC.  The default is
  \&\fB\-Wbidi\-chars=unpaired\fR, which warns about improperly terminated
  bidi contexts.  \fB\-Wbidi\-chars=none\fR turns the warning off.
  \&\fB\-Wbidi\-chars=any\fR warns about any use of bidirectional control
*************** to turn on such checking by using \fB\-W
*** 8227,8233 ****
  \&\fB\-Wbidi\-chars=any,ucn\fR.  Using \fB\-Wbidi\-chars=ucn\fR is valid,
  and is equivalent to \fB\-Wbidi\-chars=unpaired,ucn\fR, if no previous
  \&\fB\-Wbidi\-chars=any\fR was specified.
! .IP "\fB\-Wbool\-compare\fR" 4
  .IX Item "-Wbool-compare"
  Warn about boolean expression compared with an integer value different from
  \&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
--- 8160,8166 ----
  \&\fB\-Wbidi\-chars=any,ucn\fR.  Using \fB\-Wbidi\-chars=ucn\fR is valid,
  and is equivalent to \fB\-Wbidi\-chars=unpaired,ucn\fR, if no previous
  \&\fB\-Wbidi\-chars=any\fR was specified.
! .IP \fB\-Wbool\-compare\fR 4
  .IX Item "-Wbool-compare"
  Warn about boolean expression compared with an integer value different from
  \&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
*************** always false:
*** 8240,8257 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wbool\-operation\fR" 4
  .IX Item "-Wbool-operation"
  Warn about suspicious operations on expressions of a boolean type.  For
  instance, bitwise negation of a boolean is very likely a bug in the program.
  For C, this warning also warns about incrementing or decrementing a boolean,
! which rarely makes sense.  (In \*(C+, decrementing a boolean is always invalid.
! Incrementing a boolean is invalid in \*(C+17, and deprecated otherwise.)
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wduplicated\-branches\fR" 4
  .IX Item "-Wduplicated-branches"
! Warn when an if-else has identical branches.  This warning detects cases like
  .Sp
  .Vb 4
  \&        if (p != NULL)
--- 8173,8190 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wbool\-operation\fR 4
  .IX Item "-Wbool-operation"
  Warn about suspicious operations on expressions of a boolean type.  For
  instance, bitwise negation of a boolean is very likely a bug in the program.
  For C, this warning also warns about incrementing or decrementing a boolean,
! which rarely makes sense.  (In C++, decrementing a boolean is always invalid.
! Incrementing a boolean is invalid in C++17, and deprecated otherwise.)
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wduplicated\-branches\fR 4
  .IX Item "-Wduplicated-branches"
! Warn when an if\-else has identical branches.  This warning detects cases like
  .Sp
  .Vb 4
  \&        if (p != NULL)
*************** Warn when an if-else has identical branc
*** 8260,8328 ****
  \&          return 0;
  .Ve
  .Sp
! It doesn't warn when both branches contain just a null statement.  This warning
  also warn for conditional operators:
  .Sp
  .Vb 1
  \&          int i = x ? *p : *p;
  .Ve
! .IP "\fB\-Wduplicated\-cond\fR" 4
  .IX Item "-Wduplicated-cond"
! Warn about duplicated conditions in an if-else-if chain.  For instance,
  warn for the following code:
  .Sp
  .Vb 2
  \&        if (p\->q != NULL) { ... }
  \&        else if (p\->q != NULL) { ... }
  .Ve
! .IP "\fB\-Wframe\-address\fR" 4
  .IX Item "-Wframe-address"
  Warn when the \fB_\|_builtin_frame_address\fR or \fB_\|_builtin_return_address\fR
  is called with an argument greater than 0.  Such calls may return indeterminate
  values or crash the program.  The warning is included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective-C only)" 4
  .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on pointers are being discarded.
  Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
  passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
  can be used to suppress such a warning.
! .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective-C only)" 4
  .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on arrays which are pointer targets
  are being discarded.  Typically, the compiler warns if a
  \&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
  takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
  suppress such a warning.
! .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective-C only)" 4
  .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
  Do not warn when there is a conversion between pointers that have incompatible
  types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
  which warns for pointer argument passing or assignment with different
  signedness.
  .Sp
! By default, in C99 and later dialects of C, \s-1GCC\s0 treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=incompatible\-pointer\-types\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-int\-conversion\fR (C and Objective-C only)" 4
  .IX Item "-Wno-int-conversion (C and Objective-C only)"
  Do not warn about incompatible integer to pointer and pointer to integer
  conversions.  This warning is about implicit conversions; for explicit
  conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
  \&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
  .Sp
! By default, in C99 and later dialects of C, \s-1GCC\s0 treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=int\-conversion\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wzero\-length\-bounds\fR" 4
  .IX Item "-Wzero-length-bounds"
! Warn about accesses to elements of zero-length array members that might
! overlap other members of the same object.  Declaring interior zero-length
  arrays is discouraged because accesses to them are undefined.
  .Sp
  For example, the first two stores in function \f(CW\*(C`bad\*(C'\fR are diagnosed
--- 8193,8261 ----
  \&          return 0;
  .Ve
  .Sp
! It doesn\*(Aqt warn when both branches contain just a null statement.  This warning
  also warn for conditional operators:
  .Sp
  .Vb 1
  \&          int i = x ? *p : *p;
  .Ve
! .IP \fB\-Wduplicated\-cond\fR 4
  .IX Item "-Wduplicated-cond"
! Warn about duplicated conditions in an if\-else\-if chain.  For instance,
  warn for the following code:
  .Sp
  .Vb 2
  \&        if (p\->q != NULL) { ... }
  \&        else if (p\->q != NULL) { ... }
  .Ve
! .IP \fB\-Wframe\-address\fR 4
  .IX Item "-Wframe-address"
  Warn when the \fB_\|_builtin_frame_address\fR or \fB_\|_builtin_return_address\fR
  is called with an argument greater than 0.  Such calls may return indeterminate
  values or crash the program.  The warning is included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on pointers are being discarded.
  Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
  passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
  can be used to suppress such a warning.
! .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
  Do not warn if type qualifiers on arrays which are pointer targets
  are being discarded.  Typically, the compiler warns if a
  \&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
  takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
  suppress such a warning.
! .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
  Do not warn when there is a conversion between pointers that have incompatible
  types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
  which warns for pointer argument passing or assignment with different
  signedness.
  .Sp
! By default, in C99 and later dialects of C, GCC treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=incompatible\-pointer\-types\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-int\-conversion\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-int-conversion (C and Objective-C only)"
  Do not warn about incompatible integer to pointer and pointer to integer
  conversions.  This warning is about implicit conversions; for explicit
  conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
  \&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
  .Sp
! By default, in C99 and later dialects of C, GCC treats this issue as an
  error.  The error can be downgraded to a warning using
  \&\fB\-fpermissive\fR (along with certain other errors), or for this
  error alone, with \fB\-Wno\-error=int\-conversion\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wzero\-length\-bounds\fR 4
  .IX Item "-Wzero-length-bounds"
! Warn about accesses to elements of zero\-length array members that might
! overlap other members of the same object.  Declaring interior zero\-length
  arrays is discouraged because accesses to them are undefined.
  .Sp
  For example, the first two stores in function \f(CW\*(C`bad\*(C'\fR are diagnosed
*************** because it is beyond the bounds of the e
*** 8343,8366 ****
  .Ve
  .Sp
  Option \fB\-Wzero\-length\-bounds\fR is enabled by \fB\-Warray\-bounds\fR.
! .IP "\fB\-Wno\-div\-by\-zero\fR" 4
  .IX Item "-Wno-div-by-zero"
! Do not warn about compile-time integer division by zero.  Floating-point
  division by zero is not warned about, as it can be a legitimate way of
  obtaining infinities and NaNs.
! .IP "\fB\-Wsystem\-headers\fR" 4
  .IX Item "-Wsystem-headers"
  Print warning messages for constructs found in system header files.
  Warnings from system headers are normally suppressed, on the assumption
  that they usually do not indicate real problems and would only make the
! compiler output harder to read.  Using this command-line option tells
! \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
  code.  However, note that using \fB\-Wall\fR in conjunction with this
  option does \fInot\fR warn about unknown pragmas in system
  headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
! .IP "\fB\-Wtautological\-compare\fR" 4
  .IX Item "-Wtautological-compare"
! Warn if a self-comparison always evaluates to true or false.  This
  warning detects various mistakes such as:
  .Sp
  .Vb 3
--- 8276,8299 ----
  .Ve
  .Sp
  Option \fB\-Wzero\-length\-bounds\fR is enabled by \fB\-Warray\-bounds\fR.
! .IP \fB\-Wno\-div\-by\-zero\fR 4
  .IX Item "-Wno-div-by-zero"
! Do not warn about compile\-time integer division by zero.  Floating\-point
  division by zero is not warned about, as it can be a legitimate way of
  obtaining infinities and NaNs.
! .IP \fB\-Wsystem\-headers\fR 4
  .IX Item "-Wsystem-headers"
  Print warning messages for constructs found in system header files.
  Warnings from system headers are normally suppressed, on the assumption
  that they usually do not indicate real problems and would only make the
! compiler output harder to read.  Using this command\-line option tells
! GCC to emit warnings from system headers as if they occurred in user
  code.  However, note that using \fB\-Wall\fR in conjunction with this
  option does \fInot\fR warn about unknown pragmas in system
  headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
! .IP \fB\-Wtautological\-compare\fR 4
  .IX Item "-Wtautological-compare"
! Warn if a self\-comparison always evaluates to true or false.  This
  warning detects various mistakes such as:
  .Sp
  .Vb 3
*************** to true or false, for instance:
*** 8379,8385 ****
  will always be false.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wtrampolines\fR" 4
  .IX Item "-Wtrampolines"
  Warn about trampolines generated for pointers to nested functions.
  A trampoline is a small piece of data or code that is created at run
--- 8312,8318 ----
  will always be false.
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wtrampolines\fR 4
  .IX Item "-Wtrampolines"
  Warn about trampolines generated for pointers to nested functions.
  A trampoline is a small piece of data or code that is created at run
*************** used to call the nested function indirec
*** 8388,8418 ****
  made up of data only and thus requires no special treatment.  But, for
  most targets, it is made up of code and thus requires the stack to be
  made executable in order for the program to work properly.
! .IP "\fB\-Wfloat\-equal\fR" 4
  .IX Item "-Wfloat-equal"
! Warn if floating-point values are used in equality comparisons.
  .Sp
  The idea behind this is that sometimes it is convenient (for the
! programmer) to consider floating-point values as approximations to
  infinitely precise real numbers.  If you are doing this, then you need
  to compute (by analyzing the code, or in some other way) the maximum or
  likely maximum error that the computation introduces, and allow for it
! when performing comparisons (and when producing output, but that's a
  different problem).  In particular, instead of testing for equality, you
  should check to see whether the two values have ranges that overlap; and
  this is done with the relational operators, so equality comparisons are
  probably mistaken.
! .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
  .IX Item "-Wtraditional (C and Objective-C only)"
  Warn about certain constructs that behave differently in traditional and
! \&\s-1ISO C.\s0  Also warn about \s-1ISO C\s0 constructs that have no traditional C
  equivalent, and/or problematic constructs that should be avoided.
  .RS 4
! .IP "*" 4
  Macro parameters that appear within string literals in the macro body.
  In traditional C macro replacement takes place within string literals,
! but in \s-1ISO C\s0 it does not.
! .IP "*" 4
  In traditional C, some preprocessor directives did not exist.
  Traditional preprocessors only considered a line to be a directive
  if the \fB#\fR appeared in column 1 on the line.  Therefore
--- 8321,8351 ----
  made up of data only and thus requires no special treatment.  But, for
  most targets, it is made up of code and thus requires the stack to be
  made executable in order for the program to work properly.
! .IP \fB\-Wfloat\-equal\fR 4
  .IX Item "-Wfloat-equal"
! Warn if floating\-point values are used in equality comparisons.
  .Sp
  The idea behind this is that sometimes it is convenient (for the
! programmer) to consider floating\-point values as approximations to
  infinitely precise real numbers.  If you are doing this, then you need
  to compute (by analyzing the code, or in some other way) the maximum or
  likely maximum error that the computation introduces, and allow for it
! when performing comparisons (and when producing output, but that\*(Aqs a
  different problem).  In particular, instead of testing for equality, you
  should check to see whether the two values have ranges that overlap; and
  this is done with the relational operators, so equality comparisons are
  probably mistaken.
! .IP "\fB\-Wtraditional\fR (C and Objective\-C only)" 4
  .IX Item "-Wtraditional (C and Objective-C only)"
  Warn about certain constructs that behave differently in traditional and
! ISO C.  Also warn about ISO C constructs that have no traditional C
  equivalent, and/or problematic constructs that should be avoided.
  .RS 4
! .IP * 4
  Macro parameters that appear within string literals in the macro body.
  In traditional C macro replacement takes place within string literals,
! but in ISO C it does not.
! .IP * 4
  In traditional C, some preprocessor directives did not exist.
  Traditional preprocessors only considered a line to be a directive
  if the \fB#\fR appeared in column 1 on the line.  Therefore
*************** first character on the line.  It also su
*** 8422,8522 ****
  \&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
  traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
  suggests avoiding it altogether.
! .IP "*" 4
! A function-like macro that appears without arguments.
! .IP "*" 4
  The unary plus operator.
! .IP "*" 4
! The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
  constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
  constants.)  Note, these suffixes appear in macros defined in the system
  headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
  Use of these macros in user code might normally lead to spurious
! warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
  avoid warning in these cases.
! .IP "*" 4
  A function declared external in one block and then used after the end of
  the block.
! .IP "*" 4
  A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
! .IP "*" 4
  A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
  This construct is not accepted by some traditional C compilers.
! .IP "*" 4
! The \s-1ISO\s0 type of an integer constant has a different width or
  signedness from its traditional type.  This warning is only issued if
  the base of the constant is ten.  I.e. hexadecimal or octal values, which
  typically represent bit patterns, are not warned about.
! .IP "*" 4
! Usage of \s-1ISO\s0 string concatenation is detected.
! .IP "*" 4
  Initialization of automatic aggregates.
! .IP "*" 4
  Identifier conflicts with labels.  Traditional C lacks a separate
  namespace for labels.
! .IP "*" 4
  Initialization of unions.  If the initializer is zero, the warning is
  omitted.  This is done under the assumption that the zero initializer in
  user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
  initializer warnings and relies on default initialization to zero in the
  traditional C case.
! .IP "*" 4
  Conversions by prototypes between fixed/floating\-point values and vice
  versa.  The absence of these prototypes when compiling with traditional
  C causes serious problems.  This is a subset of the possible
  conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
! .IP "*" 4
! Use of \s-1ISO C\s0 style function definitions.  This warning intentionally is
  \&\fInot\fR issued for prototype declarations or variadic functions
! because these \s-1ISO C\s0 features appear in your code when using
! libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
  \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
! because that feature is already a \s-1GCC\s0 extension and thus not relevant to
  traditional C compatibility.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
  .IX Item "-Wtraditional-conversion (C and Objective-C only)"
  Warn if a prototype causes a type conversion that is different from what
  would happen to the same argument in the absence of a prototype.  This
  includes conversions of fixed point to floating and vice versa, and
! conversions changing the width or signedness of a fixed-point argument
  except when the same as the default promotion.
! .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
  .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
  Warn when a declaration is found after a statement in a block.  This
! construct, known from \*(C+, was introduced with \s-1ISO C99\s0 and is by default
! allowed in \s-1GCC.\s0  It is not supported by \s-1ISO C90.\s0
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wshadow\fR" 4
  .IX Item "-Wshadow"
  Warn whenever a local variable or type declaration shadows another
! variable, parameter, type, class member (in \*(C+), or instance variable
! (in Objective-C) or whenever a built-in function is shadowed.  Note
! that in \*(C+, the compiler warns if a local variable shadows an
  explicit typedef, but not if it shadows a struct/class/enum.
  If this warning is enabled, it includes also all instances of
  local shadowing.  This means that \fB\-Wno\-shadow=local\fR
  and \fB\-Wno\-shadow=compatible\-local\fR are ignored when
  \&\fB\-Wshadow\fR is used.
  Same as \fB\-Wshadow=global\fR.
! .IP "\fB\-Wno\-shadow\-ivar\fR (Objective-C only)" 4
  .IX Item "-Wno-shadow-ivar (Objective-C only)"
  Do not warn whenever a local variable shadows an instance variable in an
! Objective-C method.
! .IP "\fB\-Wshadow=global\fR" 4
  .IX Item "-Wshadow=global"
  Warn for any shadowing.
  Same as \fB\-Wshadow\fR.
! .IP "\fB\-Wshadow=local\fR" 4
  .IX Item "-Wshadow=local"
  Warn when a local variable shadows another local variable or parameter.
! .IP "\fB\-Wshadow=compatible\-local\fR" 4
  .IX Item "-Wshadow=compatible-local"
  Warn when a local variable shadows another local variable or parameter
! whose type is compatible with that of the shadowing variable.  In \*(C+,
  type compatibility here means the type of the shadowing variable can be
  converted to that of the shadowed variable.  The creation of this flag
  (in addition to \fB\-Wshadow=local\fR) is based on the idea that when
--- 8355,8455 ----
  \&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
  traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
  suggests avoiding it altogether.
! .IP * 4
! A function\-like macro that appears without arguments.
! .IP * 4
  The unary plus operator.
! .IP * 4
! The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating\-point
  constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
  constants.)  Note, these suffixes appear in macros defined in the system
  headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
  Use of these macros in user code might normally lead to spurious
! warnings, however GCC\*(Aqs integrated preprocessor has enough context to
  avoid warning in these cases.
! .IP * 4
  A function declared external in one block and then used after the end of
  the block.
! .IP * 4
  A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
! .IP * 4
  A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
  This construct is not accepted by some traditional C compilers.
! .IP * 4
! The ISO type of an integer constant has a different width or
  signedness from its traditional type.  This warning is only issued if
  the base of the constant is ten.  I.e. hexadecimal or octal values, which
  typically represent bit patterns, are not warned about.
! .IP * 4
! Usage of ISO string concatenation is detected.
! .IP * 4
  Initialization of automatic aggregates.
! .IP * 4
  Identifier conflicts with labels.  Traditional C lacks a separate
  namespace for labels.
! .IP * 4
  Initialization of unions.  If the initializer is zero, the warning is
  omitted.  This is done under the assumption that the zero initializer in
  user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
  initializer warnings and relies on default initialization to zero in the
  traditional C case.
! .IP * 4
  Conversions by prototypes between fixed/floating\-point values and vice
  versa.  The absence of these prototypes when compiling with traditional
  C causes serious problems.  This is a subset of the possible
  conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
! .IP * 4
! Use of ISO C style function definitions.  This warning intentionally is
  \&\fInot\fR issued for prototype declarations or variadic functions
! because these ISO C features appear in your code when using
! libiberty\*(Aqs traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
  \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
! because that feature is already a GCC extension and thus not relevant to
  traditional C compatibility.
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wtraditional\-conversion\fR (C and Objective\-C only)" 4
  .IX Item "-Wtraditional-conversion (C and Objective-C only)"
  Warn if a prototype causes a type conversion that is different from what
  would happen to the same argument in the absence of a prototype.  This
  includes conversions of fixed point to floating and vice versa, and
! conversions changing the width or signedness of a fixed\-point argument
  except when the same as the default promotion.
! .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective\-C only)" 4
  .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
  Warn when a declaration is found after a statement in a block.  This
! construct, known from C++, was introduced with ISO C99 and is by default
! allowed in GCC.  It is not supported by ISO C90.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wshadow\fR 4
  .IX Item "-Wshadow"
  Warn whenever a local variable or type declaration shadows another
! variable, parameter, type, class member (in C++), or instance variable
! (in Objective\-C) or whenever a built\-in function is shadowed.  Note
! that in C++, the compiler warns if a local variable shadows an
  explicit typedef, but not if it shadows a struct/class/enum.
  If this warning is enabled, it includes also all instances of
  local shadowing.  This means that \fB\-Wno\-shadow=local\fR
  and \fB\-Wno\-shadow=compatible\-local\fR are ignored when
  \&\fB\-Wshadow\fR is used.
  Same as \fB\-Wshadow=global\fR.
! .IP "\fB\-Wno\-shadow\-ivar\fR (Objective\-C only)" 4
  .IX Item "-Wno-shadow-ivar (Objective-C only)"
  Do not warn whenever a local variable shadows an instance variable in an
! Objective\-C method.
! .IP \fB\-Wshadow=global\fR 4
  .IX Item "-Wshadow=global"
  Warn for any shadowing.
  Same as \fB\-Wshadow\fR.
! .IP \fB\-Wshadow=local\fR 4
  .IX Item "-Wshadow=local"
  Warn when a local variable shadows another local variable or parameter.
! .IP \fB\-Wshadow=compatible\-local\fR 4
  .IX Item "-Wshadow=compatible-local"
  Warn when a local variable shadows another local variable or parameter
! whose type is compatible with that of the shadowing variable.  In C++,
  type compatibility here means the type of the shadowing variable can be
  converted to that of the shadowed variable.  The creation of this flag
  (in addition to \fB\-Wshadow=local\fR) is based on the idea that when
*************** Note that this also means that shadowing
*** 8544,8583 ****
  \&\f(CW\*(C`char *i\*(C'\fR does not emit a warning.
  .Sp
  This warning is also enabled by \fB\-Wshadow=local\fR.
! .IP "\fB\-Wlarger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Wlarger-than=byte-size"
! Warn whenever an object is defined whose size exceeds \fIbyte-size\fR.
! \&\fB\-Wlarger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by \fB\-Wno\-larger\-than\fR.
  .Sp
  Also warn for calls to bounded functions such as \f(CW\*(C`memchr\*(C'\fR or
  \&\f(CW\*(C`strnlen\*(C'\fR that specify a bound greater than the largest possible
! object, which is \fB\s-1PTRDIFF_MAX\s0\fR bytes by default.  These warnings
  can only be disabled by \fB\-Wno\-larger\-than\fR.
! .IP "\fB\-Wno\-larger\-than\fR" 4
  .IX Item "-Wno-larger-than"
  Disable \fB\-Wlarger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wlarger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wframe\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Wframe-larger-than=byte-size"
! Warn if the size of a function frame exceeds \fIbyte-size\fR.
  The computation done to determine the stack frame size is approximate
  and not conservative.
! The actual requirements may be somewhat greater than \fIbyte-size\fR
  even if you do not get a warning.  In addition, any space allocated
! via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
  is not included by the compiler when determining
  whether or not to issue a warning.
! \&\fB\-Wframe\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
  \&\fB\-Wno\-frame\-larger\-than\fR.
! .IP "\fB\-Wno\-frame\-larger\-than\fR" 4
  .IX Item "-Wno-frame-larger-than"
  Disable \fB\-Wframe\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wframe\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wfree\-nonheap\-object\fR" 4
  .IX Item "-Wfree-nonheap-object"
  Warn when attempting to deallocate an object that was either not allocated
  on the heap, or by using a pointer that was not returned from a prior call
--- 8477,8516 ----
  \&\f(CW\*(C`char *i\*(C'\fR does not emit a warning.
  .Sp
  This warning is also enabled by \fB\-Wshadow=local\fR.
! .IP \fB\-Wlarger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Wlarger-than=byte-size"
! Warn whenever an object is defined whose size exceeds \fIbyte\-size\fR.
! \&\fB\-Wlarger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by \fB\-Wno\-larger\-than\fR.
  .Sp
  Also warn for calls to bounded functions such as \f(CW\*(C`memchr\*(C'\fR or
  \&\f(CW\*(C`strnlen\*(C'\fR that specify a bound greater than the largest possible
! object, which is \fBPTRDIFF_MAX\fR bytes by default.  These warnings
  can only be disabled by \fB\-Wno\-larger\-than\fR.
! .IP \fB\-Wno\-larger\-than\fR 4
  .IX Item "-Wno-larger-than"
  Disable \fB\-Wlarger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wlarger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wframe\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Wframe-larger-than=byte-size"
! Warn if the size of a function frame exceeds \fIbyte\-size\fR.
  The computation done to determine the stack frame size is approximate
  and not conservative.
! The actual requirements may be somewhat greater than \fIbyte\-size\fR
  even if you do not get a warning.  In addition, any space allocated
! via \f(CW\*(C`alloca\*(C'\fR, variable\-length arrays, or related constructs
  is not included by the compiler when determining
  whether or not to issue a warning.
! \&\fB\-Wframe\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by
  \&\fB\-Wno\-frame\-larger\-than\fR.
! .IP \fB\-Wno\-frame\-larger\-than\fR 4
  .IX Item "-Wno-frame-larger-than"
  Disable \fB\-Wframe\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wframe\-larger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wfree\-nonheap\-object\fR 4
  .IX Item "-Wfree-nonheap-object"
  Warn when attempting to deallocate an object that was either not allocated
  on the heap, or by using a pointer that was not returned from a prior call
*************** diagnosed.
*** 8596,8625 ****
  .Ve
  .Sp
  \&\fB\-Wfree\-nonheap\-object\fR is included in \fB\-Wall\fR.
! .IP "\fB\-Wstack\-usage=\fR\fIbyte-size\fR" 4
  .IX Item "-Wstack-usage=byte-size"
! Warn if the stack usage of a function might exceed \fIbyte-size\fR.
  The computation done to determine the stack usage is conservative.
! Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
  constructs is included by the compiler when determining whether or not to
  issue a warning.
  .Sp
  The message is in keeping with the output of \fB\-fstack\-usage\fR.
  .RS 4
! .IP "*" 4
! If the stack usage is fully static but exceeds the specified amount, it's:
  .Sp
  .Vb 1
  \&          warning: stack usage is 1120 bytes
  .Ve
! .IP "*" 4
! If the stack usage is (partly) dynamic but bounded, it's:
  .Sp
  .Vb 1
  \&          warning: stack usage might be 1648 bytes
  .Ve
! .IP "*" 4
! If the stack usage is (partly) dynamic and not bounded, it's:
  .Sp
  .Vb 1
  \&          warning: stack usage might be unbounded
--- 8529,8558 ----
  .Ve
  .Sp
  \&\fB\-Wfree\-nonheap\-object\fR is included in \fB\-Wall\fR.
! .IP \fB\-Wstack\-usage=\fR\fIbyte\-size\fR 4
  .IX Item "-Wstack-usage=byte-size"
! Warn if the stack usage of a function might exceed \fIbyte\-size\fR.
  The computation done to determine the stack usage is conservative.
! Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable\-length arrays, or related
  constructs is included by the compiler when determining whether or not to
  issue a warning.
  .Sp
  The message is in keeping with the output of \fB\-fstack\-usage\fR.
  .RS 4
! .IP * 4
! If the stack usage is fully static but exceeds the specified amount, it\*(Aqs:
  .Sp
  .Vb 1
  \&          warning: stack usage is 1120 bytes
  .Ve
! .IP * 4
! If the stack usage is (partly) dynamic but bounded, it\*(Aqs:
  .Sp
  .Vb 1
  \&          warning: stack usage might be 1648 bytes
  .Ve
! .IP * 4
! If the stack usage is (partly) dynamic and not bounded, it\*(Aqs:
  .Sp
  .Vb 1
  \&          warning: stack usage might be unbounded
*************** If the stack usage is (partly) dynamic a
*** 8627,8642 ****
  .RE
  .RS 4
  .Sp
! \&\fB\-Wstack\-usage=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
  \&\fB\-Wno\-stack\-usage\fR.
  .RE
! .IP "\fB\-Wno\-stack\-usage\fR" 4
  .IX Item "-Wno-stack-usage"
  Disable \fB\-Wstack\-usage=\fR warnings.  The option is equivalent
! to \fB\-Wstack\-usage=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
  .IX Item "-Wunsafe-loop-optimizations"
  Warn if the loop cannot be optimized because the compiler cannot
  assume anything on the bounds of the loop indices.  With
--- 8560,8575 ----
  .RE
  .RS 4
  .Sp
! \&\fB\-Wstack\-usage=\fR\fBPTRDIFF_MAX\fR is enabled by default.
  Warnings controlled by the option can be disabled either by specifying
! \&\fIbyte\-size\fR of \fBSIZE_MAX\fR or more or by
  \&\fB\-Wno\-stack\-usage\fR.
  .RE
! .IP \fB\-Wno\-stack\-usage\fR 4
  .IX Item "-Wno-stack-usage"
  Disable \fB\-Wstack\-usage=\fR warnings.  The option is equivalent
! to \fB\-Wstack\-usage=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wunsafe\-loop\-optimizations\fR 4
  .IX Item "-Wunsafe-loop-optimizations"
  Warn if the loop cannot be optimized because the compiler cannot
  assume anything on the bounds of the loop indices.  With
*************** such assumptions.
*** 8645,8664 ****
  .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
  .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
  When used in combination with \fB\-Wformat\fR
! and \fB\-pedantic\fR without \s-1GNU\s0 extensions, this option
! disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
  width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
! which depend on the \s-1MS\s0 runtime.
! .IP "\fB\-Wpointer\-arith\fR" 4
  .IX Item "-Wpointer-arith"
! Warn about anything that depends on the \*(L"size of\*(R" a function type or
! of \f(CW\*(C`void\*(C'\fR.  \s-1GNU C\s0 assigns these types a size of 1, for
  convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
! to functions.  In \*(C+, warn also when an arithmetic operation involves
  \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-pointer\-compare\fR" 4
  .IX Item "-Wno-pointer-compare"
  Do not warn if a pointer is compared with a zero character constant.
  This usually
--- 8578,8597 ----
  .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
  .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
  When used in combination with \fB\-Wformat\fR
! and \fB\-pedantic\fR without GNU extensions, this option
! disables the warnings about non\-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
  width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
! which depend on the MS runtime.
! .IP \fB\-Wpointer\-arith\fR 4
  .IX Item "-Wpointer-arith"
! Warn about anything that depends on the "size of" a function type or
! of \f(CW\*(C`void\*(C'\fR.  GNU C assigns these types a size of 1, for
  convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
! to functions.  In C++, warn also when an arithmetic operation involves
  \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wno\-pointer\-compare\fR 4
  .IX Item "-Wno-pointer-compare"
  Do not warn if a pointer is compared with a zero character constant.
  This usually
*************** means that the pointer was meant to be d
*** 8670,8711 ****
  \&          return 42;
  .Ve
  .Sp
! Note that the code above is invalid in \*(C+11.
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wno\-tsan\fR" 4
  .IX Item "-Wno-tsan"
  Disable warnings about unsupported features in ThreadSanitizer.
  .Sp
  ThreadSanitizer does not support \f(CW\*(C`std::atomic_thread_fence\*(C'\fR and
  can report false positives.
! .IP "\fB\-Wtype\-limits\fR" 4
  .IX Item "-Wtype-limits"
  Warn if a comparison is always true or always false due to the limited
  range of the data type, but do not warn for constant expressions.  For
  example, warn if an unsigned variable is compared against zero with
  \&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
  \&\fB\-Wextra\fR.
! .IP "\fB\-Wabsolute\-value\fR (C and Objective-C only)" 4
  .IX Item "-Wabsolute-value (C and Objective-C only)"
  Warn for calls to standard functions that compute the absolute value
  of an argument when a more appropriate standard function is available.
! For example, calling \f(CW\*(C`abs(3.14)\*(C'\fR triggers the warning because the
  appropriate function to call to compute the absolute value of a double
  argument is \f(CW\*(C`fabs\*(C'\fR.  The option also triggers warnings when the
  argument in a call to such a function has an unsigned type.  This
  warning can be suppressed with an explicit type cast and it is also
  enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wcomment\fR" 4
  .IX Item "-Wcomment"
  .PD 0
! .IP "\fB\-Wcomments\fR" 4
  .IX Item "-Wcomments"
  .PD
! Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
! comment, or whenever a backslash-newline appears in a \fB//\fR comment.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wtrigraphs\fR" 4
  .IX Item "-Wtrigraphs"
  Warn if any trigraphs are encountered that might change the meaning of
  the program.  Trigraphs within comments are not warned about,
--- 8603,8644 ----
  \&          return 42;
  .Ve
  .Sp
! Note that the code above is invalid in C++11.
  .Sp
  This warning is enabled by default.
! .IP \fB\-Wno\-tsan\fR 4
  .IX Item "-Wno-tsan"
  Disable warnings about unsupported features in ThreadSanitizer.
  .Sp
  ThreadSanitizer does not support \f(CW\*(C`std::atomic_thread_fence\*(C'\fR and
  can report false positives.
! .IP \fB\-Wtype\-limits\fR 4
  .IX Item "-Wtype-limits"
  Warn if a comparison is always true or always false due to the limited
  range of the data type, but do not warn for constant expressions.  For
  example, warn if an unsigned variable is compared against zero with
  \&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
  \&\fB\-Wextra\fR.
! .IP "\fB\-Wabsolute\-value\fR (C and Objective\-C only)" 4
  .IX Item "-Wabsolute-value (C and Objective-C only)"
  Warn for calls to standard functions that compute the absolute value
  of an argument when a more appropriate standard function is available.
! For example, calling \f(CWabs(3.14)\fR triggers the warning because the
  appropriate function to call to compute the absolute value of a double
  argument is \f(CW\*(C`fabs\*(C'\fR.  The option also triggers warnings when the
  argument in a call to such a function has an unsigned type.  This
  warning can be suppressed with an explicit type cast and it is also
  enabled by \fB\-Wextra\fR.
! .IP \fB\-Wcomment\fR 4
  .IX Item "-Wcomment"
  .PD 0
! .IP \fB\-Wcomments\fR 4
  .IX Item "-Wcomments"
  .PD
! Warn whenever a comment\-start sequence \fB/*\fR appears in a \fB/*\fR
! comment, or whenever a backslash\-newline appears in a \fB//\fR comment.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wtrigraphs\fR 4
  .IX Item "-Wtrigraphs"
  Warn if any trigraphs are encountered that might change the meaning of
  the program.  Trigraphs within comments are not warned about,
*************** This option is implied by \fB\-Wall\fR.
*** 8715,8743 ****
  given, this option is still enabled unless trigraphs are enabled.  To
  get trigraph conversion without warnings, but get the other
  \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
! .IP "\fB\-Wundef\fR" 4
  .IX Item "-Wundef"
  Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
  Such identifiers are replaced with zero.
! .IP "\fB\-Wexpansion\-to\-defined\fR" 4
  .IX Item "-Wexpansion-to-defined"
  Warn whenever \fBdefined\fR is encountered in the expansion of a macro
  (including the case where the macro is expanded by an \fB#if\fR directive).
  Such usage is not portable.
  This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
! .IP "\fB\-Wunused\-macros\fR" 4
  .IX Item "-Wunused-macros"
  Warn about macros defined in the main file that are unused.  A macro
  is \fIused\fR if it is expanded or tested for existence at least once.
  The preprocessor also warns if the macro has not been used at the
  time it is redefined or undefined.
  .Sp
! Built-in macros, macros defined on the command line, and macros
  defined in include files are not warned about.
  .Sp
  \&\fINote:\fR If a macro is actually used, but only used in skipped
  conditional blocks, then the preprocessor reports it as unused.  To avoid the
! warning in such a case, you might improve the scope of the macro's
  definition by, for example, moving it into the first skipped block.
  Alternatively, you could provide a dummy use with something like:
  .Sp
--- 8648,8676 ----
  given, this option is still enabled unless trigraphs are enabled.  To
  get trigraph conversion without warnings, but get the other
  \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
! .IP \fB\-Wundef\fR 4
  .IX Item "-Wundef"
  Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
  Such identifiers are replaced with zero.
! .IP \fB\-Wexpansion\-to\-defined\fR 4
  .IX Item "-Wexpansion-to-defined"
  Warn whenever \fBdefined\fR is encountered in the expansion of a macro
  (including the case where the macro is expanded by an \fB#if\fR directive).
  Such usage is not portable.
  This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
! .IP \fB\-Wunused\-macros\fR 4
  .IX Item "-Wunused-macros"
  Warn about macros defined in the main file that are unused.  A macro
  is \fIused\fR if it is expanded or tested for existence at least once.
  The preprocessor also warns if the macro has not been used at the
  time it is redefined or undefined.
  .Sp
! Built\-in macros, macros defined on the command line, and macros
  defined in include files are not warned about.
  .Sp
  \&\fINote:\fR If a macro is actually used, but only used in skipped
  conditional blocks, then the preprocessor reports it as unused.  To avoid the
! warning in such a case, you might improve the scope of the macro\*(Aqs
  definition by, for example, moving it into the first skipped block.
  Alternatively, you could provide a dummy use with something like:
  .Sp
*************** Alternatively, you could provide a dummy
*** 8745,8751 ****
  \&        #if defined the_macro_causing_the_warning
  \&        #endif
  .Ve
! .IP "\fB\-Wno\-endif\-labels\fR" 4
  .IX Item "-Wno-endif-labels"
  Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
  This sometimes happens in older programs with code of the form
--- 8678,8684 ----
  \&        #if defined the_macro_causing_the_warning
  \&        #endif
  .Ve
! .IP \fB\-Wno\-endif\-labels\fR 4
  .IX Item "-Wno-endif-labels"
  Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
  This sometimes happens in older programs with code of the form
*************** This sometimes happens in older programs
*** 8760,8855 ****
  .Sp
  The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
  This warning is on by default.
! .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
  .IX Item "-Wbad-function-cast (C and Objective-C only)"
! Warn when a function call is cast to a non-matching type.
  For example, warn if a call to a function returning an integer type 
  is cast to a pointer type.
! .IP "\fB\-Wc90\-c99\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc90-c99-compat (C and Objective-C only)"
! Warn about features not present in \s-1ISO C90,\s0 but present in \s-1ISO C99.\s0
  For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
  type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
  on.  This option is independent of the standards mode.  Warnings are disabled
  in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc99\-c11\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc99-c11-compat (C and Objective-C only)"
! Warn about features not present in \s-1ISO C99,\s0 but present in \s-1ISO C11.\s0
  For instance, warn about use of anonymous structures and unions,
! \&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage-class specifier,
  \&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
  and so on.  This option is independent of the standards mode.  Warnings are
  disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc11\-c23\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc11-c23-compat (C and Objective-C only)"
  .PD 0
! .IP "\fB\-Wc11\-c2x\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc11-c2x-compat (C and Objective-C only)"
  .PD
! Warn about features not present in \s-1ISO C11,\s0 but present in \s-1ISO C23.\s0
  For instance, warn about omitting the string in \f(CW\*(C`_Static_assert\*(C'\fR,
  use of \fB[[]]\fR syntax for attributes, use of decimal
! floating-point types, and so on.  This option is independent of the
  standards mode.  Warnings are disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  The name \fB\-Wc11\-c2x\-compat\fR is
  deprecated.
  .Sp
  When not compiling in C23 mode, these warnings are upgraded to errors
  by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
  .IX Item "-Wc++-compat (C and Objective-C only)"
! Warn about \s-1ISO C\s0 constructs that are outside of the common subset of
! \&\s-1ISO C\s0 and \s-1ISO \*(C+,\s0 e.g. request for implicit conversion from
  \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
! .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++11-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 1998\s0
! and \s-1ISO \*(C+ 2011,\s0 e.g., identifiers in \s-1ISO \*(C+ 1998\s0 that are keywords
! in \s-1ISO \*(C+ 2011.\s0  This warning turns on \fB\-Wnarrowing\fR and is
  enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++14\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++14-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2011\s0
! and \s-1ISO \*(C+ 2014.\s0  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++17\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++17-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2014\s0
! and \s-1ISO \*(C+ 2017.\s0  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++20\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wc++20-compat ( and Objective- only)"
! Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2017\s0
! and \s-1ISO \*(C+ 2020.\s0  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-c++11\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++11-extensions ( and Objective- only)"
! Do not warn about \*(C+11 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+11 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++14\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++14-extensions ( and Objective- only)"
! Do not warn about \*(C+14 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+14 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++17\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++17-extensions ( and Objective- only)"
! Do not warn about \*(C+17 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+17 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++20\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++20-extensions ( and Objective- only)"
! Do not warn about \*(C+20 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+20 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++23\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++23-extensions ( and Objective- only)"
! Do not warn about \*(C+23 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+23 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++26\-extensions\fR (\*(C+ and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-c++26-extensions ( and Objective- only)"
! Do not warn about \*(C+26 constructs in code being compiled using
! an older \*(C+ standard.  Even without this option, some \*(C+26 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wcast\-qual\fR" 4
  .IX Item "-Wcast-qual"
  Warn whenever a pointer is cast so as to remove a type qualifier from
  the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
--- 8693,8788 ----
  .Sp
  The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
  This warning is on by default.
! .IP "\fB\-Wbad\-function\-cast\fR (C and Objective\-C only)" 4
  .IX Item "-Wbad-function-cast (C and Objective-C only)"
! Warn when a function call is cast to a non\-matching type.
  For example, warn if a call to a function returning an integer type 
  is cast to a pointer type.
! .IP "\fB\-Wc90\-c99\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc90-c99-compat (C and Objective-C only)"
! Warn about features not present in ISO C90, but present in ISO C99.
  For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
  type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
  on.  This option is independent of the standards mode.  Warnings are disabled
  in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc99\-c11\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc99-c11-compat (C and Objective-C only)"
! Warn about features not present in ISO C99, but present in ISO C11.
  For instance, warn about use of anonymous structures and unions,
! \&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage\-class specifier,
  \&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
  and so on.  This option is independent of the standards mode.  Warnings are
  disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
! .IP "\fB\-Wc11\-c23\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc11-c23-compat (C and Objective-C only)"
  .PD 0
! .IP "\fB\-Wc11\-c2x\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc11-c2x-compat (C and Objective-C only)"
  .PD
! Warn about features not present in ISO C11, but present in ISO C23.
  For instance, warn about omitting the string in \f(CW\*(C`_Static_assert\*(C'\fR,
  use of \fB[[]]\fR syntax for attributes, use of decimal
! floating\-point types, and so on.  This option is independent of the
  standards mode.  Warnings are disabled in the expression that follows
  \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  The name \fB\-Wc11\-c2x\-compat\fR is
  deprecated.
  .Sp
  When not compiling in C23 mode, these warnings are upgraded to errors
  by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wc++\-compat\fR (C and Objective\-C only)" 4
  .IX Item "-Wc++-compat (C and Objective-C only)"
! Warn about ISO C constructs that are outside of the common subset of
! ISO C and ISO C++, e.g. request for implicit conversion from
  \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
! .IP "\fB\-Wc++11\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++11-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 1998
! and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
! in ISO C++ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
  enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++14\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++14-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 2011
! and ISO C++ 2014.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++17\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++17-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 2014
! and ISO C++ 2017.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wc++20\-compat\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wc++20-compat (C++ and Objective-C++ only)"
! Warn about C++ constructs whose meaning differs between ISO C++ 2017
! and ISO C++ 2020.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-c++11\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++11-extensions (C++ and Objective-C++ only)"
! Do not warn about C++11 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++11 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++14\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++14-extensions (C++ and Objective-C++ only)"
! Do not warn about C++14 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++14 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++17\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++17-extensions (C++ and Objective-C++ only)"
! Do not warn about C++17 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++17 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++20\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++20-extensions (C++ and Objective-C++ only)"
! Do not warn about C++20 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++20 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++23\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++23-extensions (C++ and Objective-C++ only)"
! Do not warn about C++23 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++23 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP "\fB\-Wno\-c++26\-extensions\fR (C++ and Objective\-C++ only)" 4
! .IX Item "-Wno-c++26-extensions (C++ and Objective-C++ only)"
! Do not warn about C++26 constructs in code being compiled using
! an older C++ standard.  Even without this option, some C++26 constructs
  will only be diagnosed if \fB\-Wpedantic\fR is used.
! .IP \fB\-Wcast\-qual\fR 4
  .IX Item "-Wcast-qual"
  Warn whenever a pointer is cast so as to remove a type qualifier from
  the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
*************** is unsafe, as in this example:
*** 8867,8899 ****
  \&          /* Now char** pointer points to read\-only memory.  */
  \&          **p = \*(Aqb\*(Aq;
  .Ve
! .IP "\fB\-Wcast\-align\fR" 4
  .IX Item "-Wcast-align"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
! two\- or four-byte boundaries.
! .IP "\fB\-Wcast\-align=strict\fR" 4
  .IX Item "-Wcast-align=strict"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR regardless of the target machine.
! .IP "\fB\-Wcast\-function\-type\fR" 4
  .IX Item "-Wcast-function-type"
  Warn when a function pointer is cast to an incompatible function pointer.
  In a cast involving function types with a variable argument list only
  the types of initial arguments that are provided are considered.
! Any parameter of pointer-type matches any other pointer-type.  Any benign
  differences in integral types are ignored, like \f(CW\*(C`int\*(C'\fR vs. \f(CW\*(C`long\*(C'\fR
! on \s-1ILP32\s0 targets.  Likewise type qualifiers are ignored.  The function
  type \f(CW\*(C`void (*) (void)\*(C'\fR is special and matches everything, which can
  be used to suppress this warning.
  In a cast involving pointer to member types this warning warns whenever
  the type cast is changing the pointer to member type.
  This warning is enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wcast\-user\-defined\fR" 4
  .IX Item "-Wcast-user-defined"
! Warn when a cast to reference type does not involve a user-defined
  conversion that the programmer might expect to be called.
  .Sp
  .Vb 2
--- 8800,8832 ----
  \&          /* Now char** pointer points to read\-only memory.  */
  \&          **p = \*(Aqb\*(Aq;
  .Ve
! .IP \fB\-Wcast\-align\fR 4
  .IX Item "-Wcast-align"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
! two\- or four\-byte boundaries.
! .IP \fB\-Wcast\-align=strict\fR 4
  .IX Item "-Wcast-align=strict"
  Warn whenever a pointer is cast such that the required alignment of the
  target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
  an \f(CW\*(C`int *\*(C'\fR regardless of the target machine.
! .IP \fB\-Wcast\-function\-type\fR 4
  .IX Item "-Wcast-function-type"
  Warn when a function pointer is cast to an incompatible function pointer.
  In a cast involving function types with a variable argument list only
  the types of initial arguments that are provided are considered.
! Any parameter of pointer\-type matches any other pointer\-type.  Any benign
  differences in integral types are ignored, like \f(CW\*(C`int\*(C'\fR vs. \f(CW\*(C`long\*(C'\fR
! on ILP32 targets.  Likewise type qualifiers are ignored.  The function
  type \f(CW\*(C`void (*) (void)\*(C'\fR is special and matches everything, which can
  be used to suppress this warning.
  In a cast involving pointer to member types this warning warns whenever
  the type cast is changing the pointer to member type.
  This warning is enabled by \fB\-Wextra\fR.
! .IP \fB\-Wcast\-user\-defined\fR 4
  .IX Item "-Wcast-user-defined"
! Warn when a cast to reference type does not involve a user\-defined
  conversion that the programmer might expect to be called.
  .Sp
  .Vb 2
*************** conversion that the programmer might exp
*** 8902,8911 ****
  .Ve
  .Sp
  This warning is enabled by default.
! .IP "\fB\-Wwrite\-strings\fR" 4
  .IX Item "-Wwrite-strings"
  When compiling C, give string constants the type \f(CW\*(C`const
! char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
  non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
  warnings help you find at compile time code that can try to write
  into a string constant, but only if you have been very careful about
--- 8835,8844 ----
  .Ve
  .Sp
  This warning is enabled by default.
! .IP \fB\-Wwrite\-strings\fR 4
  .IX Item "-Wwrite-strings"
  When compiling C, give string constants the type \f(CW\*(C`const
! char[\fR\f(CIlength\fR\f(CW]\*(C'\fR so that copying the address of one into a
  non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
  warnings help you find at compile time code that can try to write
  into a string constant, but only if you have been very careful about
*************** using \f(CW\*(C`const\*(C'\fR in declara
*** 8913,8931 ****
  just a nuisance. This is why we did not make \fB\-Wall\fR request
  these warnings.
  .Sp
! When compiling \*(C+, warn about the deprecated conversion from string
! literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
  programs.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! \&\*(C+11 mode or later.
! .IP "\fB\-Wclobbered\fR" 4
  .IX Item "-Wclobbered"
  Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
  \&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-complain\-wrong\-lang\fR" 4
  .IX Item "-Wno-complain-wrong-lang"
! By default, language front ends complain when a command-line option is
  valid, but not applicable to that front end.
  This may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR,
  which is mostly useful when invoking a single compiler driver for
--- 8846,8864 ----
  just a nuisance. This is why we did not make \fB\-Wall\fR request
  these warnings.
  .Sp
! When compiling C++, warn about the deprecated conversion from string
! literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for C++
  programs.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR in
! C++11 mode or later.
! .IP \fB\-Wclobbered\fR 4
  .IX Item "-Wclobbered"
  Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
  \&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
! .IP \fB\-Wno\-complain\-wrong\-lang\fR 4
  .IX Item "-Wno-complain-wrong-lang"
! By default, language front ends complain when a command\-line option is
  valid, but not applicable to that front end.
  This may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR,
  which is mostly useful when invoking a single compiler driver for
*************** multiple source files written in differe
*** 8935,8950 ****
  \&        $ g++ \-fno\-rtti a.cc b.f90
  .Ve
  .Sp
! The driver \fIg++\fR invokes the \*(C+ front end to compile \fIa.cc\fR
  and the Fortran front end to compile \fIb.f90\fR.
  The latter front end diagnoses
! \&\fBf951: Warning: command-line option '\-fno\-rtti' is valid for \*(C+/D/ObjC++ but not for Fortran\fR,
  which may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR.
! .IP "\fB\-Wcompare\-distinct\-pointer\-types\fR (C and Objective-C only)" 4
  .IX Item "-Wcompare-distinct-pointer-types (C and Objective-C only)"
  Warn if pointers of distinct types are compared without a cast.  This
  warning is enabled by default.
! .IP "\fB\-Wconversion\fR" 4
  .IX Item "-Wconversion"
  Warn for implicit conversions that may alter a value. This includes
  conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
--- 8868,8883 ----
  \&        $ g++ \-fno\-rtti a.cc b.f90
  .Ve
  .Sp
! The driver \fIg++\fR invokes the C++ front end to compile \fIa.cc\fR
  and the Fortran front end to compile \fIb.f90\fR.
  The latter front end diagnoses
! \&\fBf951: Warning: command\-line option \*(Aq\-fno\-rtti\*(Aq is valid for C++/D/ObjC++ but not for Fortran\fR,
  which may be disabled with \fB\-Wno\-complain\-wrong\-lang\fR.
! .IP "\fB\-Wcompare\-distinct\-pointer\-types\fR (C and Objective\-C only)" 4
  .IX Item "-Wcompare-distinct-pointer-types (C and Objective-C only)"
  Warn if pointers of distinct types are compared without a cast.  This
  warning is enabled by default.
! .IP \fB\-Wconversion\fR 4
  .IX Item "-Wconversion"
  Warn for implicit conversions that may alter a value. This includes
  conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
*************** changed by the conversion like in \f(CW\
*** 8956,8971 ****
  conversions between signed and unsigned integers can be disabled by
  using \fB\-Wno\-sign\-conversion\fR.
  .Sp
! For \*(C+, also warn for confusing overload resolution for user-defined
  conversions; and conversions that never use a type conversion
  operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
  reference to them. Warnings about conversions between signed and
! unsigned integers are disabled by default in \*(C+ unless
  \&\fB\-Wsign\-conversion\fR is explicitly enabled.
  .Sp
  Warnings about conversion from arithmetic on a small type back to that
  type are only given with \fB\-Warith\-conversion\fR.
! .IP "\fB\-Wdangling\-else\fR" 4
  .IX Item "-Wdangling-else"
  Warn about constructions where there may be confusion to which
  \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
--- 8889,8904 ----
  conversions between signed and unsigned integers can be disabled by
  using \fB\-Wno\-sign\-conversion\fR.
  .Sp
! For C++, also warn for confusing overload resolution for user\-defined
  conversions; and conversions that never use a type conversion
  operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
  reference to them. Warnings about conversions between signed and
! unsigned integers are disabled by default in C++ unless
  \&\fB\-Wsign\-conversion\fR is explicitly enabled.
  .Sp
  Warnings about conversion from arithmetic on a small type back to that
  type are only given with \fB\-Warith\-conversion\fR.
! .IP \fB\-Wdangling\-else\fR 4
  .IX Item "-Wdangling-else"
  Warn about constructions where there may be confusion to which
  \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
*************** such a case:
*** 8981,8991 ****
  \&        }
  .Ve
  .Sp
! In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
  \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
  often not what the programmer expected, as illustrated in the above
  example by indentation the programmer chose.  When there is the
! potential for this confusion, \s-1GCC\s0 issues a warning when this flag
  is specified.  To eliminate the warning, add explicit braces around
  the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
  can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
--- 8914,8924 ----
  \&        }
  .Ve
  .Sp
! In C/C++, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
  \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
  often not what the programmer expected, as illustrated in the above
  example by indentation the programmer chose.  When there is the
! potential for this confusion, GCC issues a warning when this flag
  is specified.  To eliminate the warning, add explicit braces around
  the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
  can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
*************** looks like this:
*** 9004,9026 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wparentheses\fR.
! .IP "\fB\-Wdangling\-pointer\fR" 4
  .IX Item "-Wdangling-pointer"
  .PD 0
! .IP "\fB\-Wdangling\-pointer=\fR\fIn\fR" 4
  .IX Item "-Wdangling-pointer=n"
  .PD
! Warn about uses of pointers (or \*(C+ references) to objects with automatic
  storage duration after their lifetime has ended.  This includes local
  variables declared in nested blocks, compound literals and other unnamed
  temporary objects.  In addition, warn about storing the address of such
  objects in escaped pointers.  The warning is enabled at all optimization
  levels but may yield different results with optimization than without.
  .RS 4
! .IP "\fB\-Wdangling\-pointer=1\fR" 4
  .IX Item "-Wdangling-pointer=1"
  At level 1, the warning diagnoses only unconditional uses of dangling pointers.
! .IP "\fB\-Wdangling\-pointer=2\fR" 4
  .IX Item "-Wdangling-pointer=2"
  At level 2, in addition to unconditional uses the warning also diagnoses
  conditional uses of dangling pointers.
--- 8937,8959 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wparentheses\fR.
! .IP \fB\-Wdangling\-pointer\fR 4
  .IX Item "-Wdangling-pointer"
  .PD 0
! .IP \fB\-Wdangling\-pointer=\fR\fIn\fR 4
  .IX Item "-Wdangling-pointer=n"
  .PD
! Warn about uses of pointers (or C++ references) to objects with automatic
  storage duration after their lifetime has ended.  This includes local
  variables declared in nested blocks, compound literals and other unnamed
  temporary objects.  In addition, warn about storing the address of such
  objects in escaped pointers.  The warning is enabled at all optimization
  levels but may yield different results with optimization than without.
  .RS 4
! .IP \fB\-Wdangling\-pointer=1\fR 4
  .IX Item "-Wdangling-pointer=1"
  At level 1, the warning diagnoses only unconditional uses of dangling pointers.
! .IP \fB\-Wdangling\-pointer=2\fR 4
  .IX Item "-Wdangling-pointer=2"
  At level 2, in addition to unconditional uses the warning also diagnoses
  conditional uses of dangling pointers.
*************** is conditional, the warning triggers at
*** 9078,9107 ****
  \&        }
  .Ve
  .RE
! .IP "\fB\-Wdate\-time\fR" 4
  .IX Item "-Wdate-time"
  Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
! are encountered as they might prevent bit-wise-identical reproducible
  compilations.
! .IP "\fB\-Wempty\-body\fR" 4
  .IX Item "-Wempty-body"
  Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
  while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-endif\-labels\fR" 4
  .IX Item "-Wno-endif-labels"
  Do not warn about stray tokens after \f(CW\*(C`#else\*(C'\fR and \f(CW\*(C`#endif\*(C'\fR.
! .IP "\fB\-Wenum\-compare\fR" 4
  .IX Item "-Wenum-compare"
  Warn about a comparison between values of different enumerated types.
! In \*(C+ enumerated type mismatches in conditional expressions are also
  diagnosed and the warning is enabled by default.  In C this warning is 
  enabled by \fB\-Wall\fR.
! .IP "\fB\-Wenum\-conversion\fR" 4
  .IX Item "-Wenum-conversion"
  Warn when a value of enumerated type is implicitly converted to a 
  different enumerated type.  This warning is enabled by \fB\-Wextra\fR
  in C.
! .IP "\fB\-Wenum\-int\-mismatch\fR (C and Objective-C only)" 4
  .IX Item "-Wenum-int-mismatch (C and Objective-C only)"
  Warn about mismatches between an enumerated type and an integer type in
  declarations.  For example:
--- 9011,9040 ----
  \&        }
  .Ve
  .RE
! .IP \fB\-Wdate\-time\fR 4
  .IX Item "-Wdate-time"
  Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
! are encountered as they might prevent bit\-wise\-identical reproducible
  compilations.
! .IP \fB\-Wempty\-body\fR 4
  .IX Item "-Wempty-body"
  Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
  while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
! .IP \fB\-Wno\-endif\-labels\fR 4
  .IX Item "-Wno-endif-labels"
  Do not warn about stray tokens after \f(CW\*(C`#else\*(C'\fR and \f(CW\*(C`#endif\*(C'\fR.
! .IP \fB\-Wenum\-compare\fR 4
  .IX Item "-Wenum-compare"
  Warn about a comparison between values of different enumerated types.
! In C++ enumerated type mismatches in conditional expressions are also
  diagnosed and the warning is enabled by default.  In C this warning is 
  enabled by \fB\-Wall\fR.
! .IP \fB\-Wenum\-conversion\fR 4
  .IX Item "-Wenum-conversion"
  Warn when a value of enumerated type is implicitly converted to a 
  different enumerated type.  This warning is enabled by \fB\-Wextra\fR
  in C.
! .IP "\fB\-Wenum\-int\-mismatch\fR (C and Objective\-C only)" 4
  .IX Item "-Wenum-int-mismatch (C and Objective-C only)"
  Warn about mismatches between an enumerated type and an integer type in
  declarations.  For example:
*************** declarations.  For example:
*** 9114,9148 ****
  .Sp
  In C, an enumerated type is compatible with \f(CW\*(C`char\*(C'\fR, a signed
  integer type, or an unsigned integer type.  However, since the choice
! of the underlying type of an enumerated type is implementation-defined,
! such mismatches may cause portability issues.  In \*(C+, such mismatches
  are an error.  In C, this warning is enabled by \fB\-Wall\fR and
  \&\fB\-Wc++\-compat\fR.
! .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
  .IX Item "-Wjump-misses-init (C, Objective-C only)"
  Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
  forward across the initialization of a variable, or jumps backward to a
  label after the variable has been initialized.  This only warns about
  variables that are initialized when they are declared.  This warning is
! only supported for C and Objective-C; in \*(C+ this sort of branch is an
  error in any case.
  .Sp
  \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
  can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
! .IP "\fB\-Wsign\-compare\fR" 4
  .IX Item "-Wsign-compare"
  Warn when a comparison between signed and unsigned values could produce
  an incorrect result when the signed value is converted to unsigned.
! In \*(C+, this warning is also enabled by \fB\-Wall\fR.  In C, it is
  also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wsign\-conversion\fR" 4
  .IX Item "-Wsign-conversion"
  Warn for implicit conversions that may change the sign of an integer
  value, like assigning a signed integer expression to an unsigned
  integer variable. An explicit cast silences the warning. In C, this
  option is enabled also by \fB\-Wconversion\fR.
! .IP "\fB\-Wflex\-array\-member\-not\-at\-end\fR (C and \*(C+ only)" 4
! .IX Item "-Wflex-array-member-not-at-end (C and only)"
  Warn when a structure containing a C99 flexible array member as the last
  field is not at the end of another structure.
  This warning warns e.g. about
--- 9047,9081 ----
  .Sp
  In C, an enumerated type is compatible with \f(CW\*(C`char\*(C'\fR, a signed
  integer type, or an unsigned integer type.  However, since the choice
! of the underlying type of an enumerated type is implementation\-defined,
! such mismatches may cause portability issues.  In C++, such mismatches
  are an error.  In C, this warning is enabled by \fB\-Wall\fR and
  \&\fB\-Wc++\-compat\fR.
! .IP "\fB\-Wjump\-misses\-init\fR (C, Objective\-C only)" 4
  .IX Item "-Wjump-misses-init (C, Objective-C only)"
  Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
  forward across the initialization of a variable, or jumps backward to a
  label after the variable has been initialized.  This only warns about
  variables that are initialized when they are declared.  This warning is
! only supported for C and Objective\-C; in C++ this sort of branch is an
  error in any case.
  .Sp
  \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
  can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
! .IP \fB\-Wsign\-compare\fR 4
  .IX Item "-Wsign-compare"
  Warn when a comparison between signed and unsigned values could produce
  an incorrect result when the signed value is converted to unsigned.
! In C++, this warning is also enabled by \fB\-Wall\fR.  In C, it is
  also enabled by \fB\-Wextra\fR.
! .IP \fB\-Wsign\-conversion\fR 4
  .IX Item "-Wsign-conversion"
  Warn for implicit conversions that may change the sign of an integer
  value, like assigning a signed integer expression to an unsigned
  integer variable. An explicit cast silences the warning. In C, this
  option is enabled also by \fB\-Wconversion\fR.
! .IP "\fB\-Wflex\-array\-member\-not\-at\-end\fR (C and C++ only)" 4
! .IX Item "-Wflex-array-member-not-at-end (C and C++ only)"
  Warn when a structure containing a C99 flexible array member as the last
  field is not at the end of another structure.
  This warning warns e.g. about
*************** This warning warns e.g. about
*** 9151,9166 ****
  \&        struct flex  { int length; char data[]; };
  \&        struct mid_flex { int m; struct flex flex_data; int n; };
  .Ve
! .IP "\fB\-Wfloat\-conversion\fR" 4
  .IX Item "-Wfloat-conversion"
  Warn for implicit conversions that reduce the precision of a real value.
  This includes conversions from real to integer, and from higher precision
  real to lower precision real values.  This option is also enabled by
  \&\fB\-Wconversion\fR.
! .IP "\fB\-Wno\-scalar\-storage\-order\fR" 4
  .IX Item "-Wno-scalar-storage-order"
  Do not warn on suspicious constructs involving reverse scalar storage order.
! .IP "\fB\-Wsizeof\-array\-div\fR" 4
  .IX Item "-Wsizeof-array-div"
  Warn about divisions of two sizeof operators when the first one is applied
  to an array and the divisor does not equal the size of the array element.
--- 9084,9099 ----
  \&        struct flex  { int length; char data[]; };
  \&        struct mid_flex { int m; struct flex flex_data; int n; };
  .Ve
! .IP \fB\-Wfloat\-conversion\fR 4
  .IX Item "-Wfloat-conversion"
  Warn for implicit conversions that reduce the precision of a real value.
  This includes conversions from real to integer, and from higher precision
  real to lower precision real values.  This option is also enabled by
  \&\fB\-Wconversion\fR.
! .IP \fB\-Wno\-scalar\-storage\-order\fR 4
  .IX Item "-Wno-scalar-storage-order"
  Do not warn on suspicious constructs involving reverse scalar storage order.
! .IP \fB\-Wsizeof\-array\-div\fR 4
  .IX Item "-Wsizeof-array-div"
  Warn about divisions of two sizeof operators when the first one is applied
  to an array and the divisor does not equal the size of the array element.
*************** array, which is likely what the user int
*** 9176,9191 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wsizeof\-pointer\-div\fR" 4
  .IX Item "-Wsizeof-pointer-div"
  Warn for suspicious divisions of two sizeof expressions that divide
  the pointer size by the element size, which is the usual way to compute
! the array size but won't work out correctly with pointers.  This warning
  warns e.g. about \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is
  not an array, but a pointer.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wsizeof\-pointer\-memaccess\fR" 4
  .IX Item "-Wsizeof-pointer-memaccess"
! Warn for suspicious length parameters to certain string and memory built-in
  functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning triggers for
  example for \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not
  an array, but a pointer, and suggests a possible fix, or about
--- 9109,9124 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wsizeof\-pointer\-div\fR 4
  .IX Item "-Wsizeof-pointer-div"
  Warn for suspicious divisions of two sizeof expressions that divide
  the pointer size by the element size, which is the usual way to compute
! the array size but won\*(Aqt work out correctly with pointers.  This warning
  warns e.g. about \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is
  not an array, but a pointer.  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wsizeof\-pointer\-memaccess\fR 4
  .IX Item "-Wsizeof-pointer-memaccess"
! Warn for suspicious length parameters to certain string and memory built\-in
  functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning triggers for
  example for \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not
  an array, but a pointer, and suggests a possible fix, or about
*************** is almost certainly a mistake and so the
*** 9207,9227 ****
  .Ve
  .Sp
  The \fB\-Wsizeof\-pointer\-memaccess\fR option is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-sizeof\-array\-argument\fR" 4
  .IX Item "-Wno-sizeof-array-argument"
  Do not warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
  declared as an array in a function definition.  This warning is enabled by
! default for C and \*(C+ programs.
! .IP "\fB\-Wmemset\-elt\-size\fR" 4
  .IX Item "-Wmemset-elt-size"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function, if the
  first argument references an array, and the third argument is a number
  equal to the number of elements, but not equal to the size of the array
  in memory.  This indicates that the user has omitted a multiplication by
  the element size.  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wmemset\-transposed\-args\fR" 4
  .IX Item "-Wmemset-transposed-args"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function where
  the second argument is not zero and the third argument is zero.  For
  example, the call \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR is diagnosed because
  \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostic
--- 9140,9160 ----
  .Ve
  .Sp
  The \fB\-Wsizeof\-pointer\-memaccess\fR option is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-sizeof\-array\-argument\fR 4
  .IX Item "-Wno-sizeof-array-argument"
  Do not warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
  declared as an array in a function definition.  This warning is enabled by
! default for C and C++ programs.
! .IP \fB\-Wmemset\-elt\-size\fR 4
  .IX Item "-Wmemset-elt-size"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built\-in function, if the
  first argument references an array, and the third argument is a number
  equal to the number of elements, but not equal to the size of the array
  in memory.  This indicates that the user has omitted a multiplication by
  the element size.  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wmemset\-transposed\-args\fR 4
  .IX Item "-Wmemset-transposed-args"
! Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built\-in function where
  the second argument is not zero and the third argument is zero.  For
  example, the call \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR is diagnosed because
  \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostic
*************** it is an expression that is folded to ze
*** 9230,9236 ****
  type, it is far less likely that the arguments have been mistakenly
  transposed and no warning is emitted.  This warning is enabled
  by \fB\-Wall\fR.
! .IP "\fB\-Waddress\fR" 4
  .IX Item "-Waddress"
  Warn about suspicious uses of address expressions. These include comparing
  the address of a function or a declared object to the null pointer constant
--- 9163,9169 ----
  type, it is far less likely that the arguments have been mistakenly
  transposed and no warning is emitted.  This warning is enabled
  by \fB\-Wall\fR.
! .IP \fB\-Waddress\fR 4
  .IX Item "-Waddress"
  Warn about suspicious uses of address expressions. These include comparing
  the address of a function or a declared object to the null pointer constant
*************** and are not portable, and suggest the in
*** 9277,9299 ****
  The warning is suppressed if the suspicious expression is the result
  of macro expansion.
  \&\fB\-Waddress\fR warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-address\-of\-packed\-member\fR" 4
  .IX Item "-Wno-address-of-packed-member"
  Do not warn when the address of packed member of struct or union is taken,
  which usually results in an unaligned pointer value.  This is
  enabled by default.
! .IP "\fB\-Wlogical\-op\fR" 4
  .IX Item "-Wlogical-op"
  Warn about suspicious uses of logical operators in expressions.
  This includes using logical operators in contexts where a
! bit-wise operator is likely to be expected.  Also warns when
  the operands of a logical operator are the same:
  .Sp
  .Vb 2
  \&        extern int a;
  \&        if (a < 0 && a < 0) { ... }
  .Ve
! .IP "\fB\-Wlogical\-not\-parentheses\fR" 4
  .IX Item "-Wlogical-not-parentheses"
  Warn about logical not used on the left hand side operand of a comparison.
  This option does not warn if the right operand is considered to be a boolean
--- 9210,9232 ----
  The warning is suppressed if the suspicious expression is the result
  of macro expansion.
  \&\fB\-Waddress\fR warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-address\-of\-packed\-member\fR 4
  .IX Item "-Wno-address-of-packed-member"
  Do not warn when the address of packed member of struct or union is taken,
  which usually results in an unaligned pointer value.  This is
  enabled by default.
! .IP \fB\-Wlogical\-op\fR 4
  .IX Item "-Wlogical-op"
  Warn about suspicious uses of logical operators in expressions.
  This includes using logical operators in contexts where a
! bit\-wise operator is likely to be expected.  Also warns when
  the operands of a logical operator are the same:
  .Sp
  .Vb 2
  \&        extern int a;
  \&        if (a < 0 && a < 0) { ... }
  .Ve
! .IP \fB\-Wlogical\-not\-parentheses\fR 4
  .IX Item "-Wlogical-not-parentheses"
  Warn about logical not used on the left hand side operand of a comparison.
  This option does not warn if the right operand is considered to be a boolean
*************** expression.  Its purpose is to detect su
*** 9305,9311 ****
  \&        if (!a > 1) { ... }
  .Ve
  .Sp
! It is possible to suppress the warning by wrapping the \s-1LHS\s0 into
  parentheses:
  .Sp
  .Vb 1
--- 9238,9244 ----
  \&        if (!a > 1) { ... }
  .Ve
  .Sp
! It is possible to suppress the warning by wrapping the LHS into
  parentheses:
  .Sp
  .Vb 1
*************** parentheses:
*** 9313,9339 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Waggregate\-return\fR" 4
  .IX Item "-Waggregate-return"
  Warn if any functions that return structures or unions are defined or
  called.  (In languages where you can return an array, this also elicits
  a warning.)
! .IP "\fB\-Wno\-aggressive\-loop\-optimizations\fR" 4
  .IX Item "-Wno-aggressive-loop-optimizations"
  Warn if in a loop with constant number of iterations the compiler detects
  undefined behavior in some statement during one or more of the iterations.
! .IP "\fB\-Wno\-attributes\fR" 4
  .IX Item "-Wno-attributes"
  Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
  unrecognized attributes, function attributes applied to variables,
  etc.  This does not stop errors for incorrect use of supported
  attributes.
  .Sp
! Warnings about ill-formed uses of standard attributes are upgraded to
  errors by \fB\-pedantic\-errors\fR.
  .Sp
  Additionally, using \fB\-Wno\-attributes=\fR, it is possible to suppress
! warnings about unknown scoped attributes (in \*(C+11 and C23).  For example,
  \&\fB\-Wno\-attributes=vendor::attr\fR disables warning about the following
  declaration:
  .Sp
--- 9246,9272 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Waggregate\-return\fR 4
  .IX Item "-Waggregate-return"
  Warn if any functions that return structures or unions are defined or
  called.  (In languages where you can return an array, this also elicits
  a warning.)
! .IP \fB\-Wno\-aggressive\-loop\-optimizations\fR 4
  .IX Item "-Wno-aggressive-loop-optimizations"
  Warn if in a loop with constant number of iterations the compiler detects
  undefined behavior in some statement during one or more of the iterations.
! .IP \fB\-Wno\-attributes\fR 4
  .IX Item "-Wno-attributes"
  Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
  unrecognized attributes, function attributes applied to variables,
  etc.  This does not stop errors for incorrect use of supported
  attributes.
  .Sp
! Warnings about ill\-formed uses of standard attributes are upgraded to
  errors by \fB\-pedantic\-errors\fR.
  .Sp
  Additionally, using \fB\-Wno\-attributes=\fR, it is possible to suppress
! warnings about unknown scoped attributes (in C++11 and C23).  For example,
  \&\fB\-Wno\-attributes=vendor::attr\fR disables warning about the following
  declaration:
  .Sp
*************** of these declarations:
*** 9351,9366 ****
  .Ve
  .Sp
  Note that \fB\-Wno\-attributes=\fR does not imply \fB\-Wno\-attributes\fR.
! .IP "\fB\-Wno\-builtin\-declaration\-mismatch\fR" 4
  .IX Item "-Wno-builtin-declaration-mismatch"
! Warn if a built-in function is declared with an incompatible signature
! or as a non-function, or when a built-in function declared with a type
  that does not include a prototype is called with arguments whose promoted
  types do not match those expected by the function.  When \fB\-Wextra\fR
! is specified, also warn when a built-in function that takes arguments is
  declared without a prototype.  The \fB\-Wbuiltin\-declaration\-mismatch\fR
  warning is enabled by default.  To avoid the warning include the appropriate
! header to bring the prototypes of built-in functions into scope.
  .Sp
  For example, the call to \f(CW\*(C`memset\*(C'\fR below is diagnosed by the warning
  because the function expects a value of type \f(CW\*(C`size_t\*(C'\fR as its argument
--- 9284,9299 ----
  .Ve
  .Sp
  Note that \fB\-Wno\-attributes=\fR does not imply \fB\-Wno\-attributes\fR.
! .IP \fB\-Wno\-builtin\-declaration\-mismatch\fR 4
  .IX Item "-Wno-builtin-declaration-mismatch"
! Warn if a built\-in function is declared with an incompatible signature
! or as a non\-function, or when a built\-in function declared with a type
  that does not include a prototype is called with arguments whose promoted
  types do not match those expected by the function.  When \fB\-Wextra\fR
! is specified, also warn when a built\-in function that takes arguments is
  declared without a prototype.  The \fB\-Wbuiltin\-declaration\-mismatch\fR
  warning is enabled by default.  To avoid the warning include the appropriate
! header to bring the prototypes of built\-in functions into scope.
  .Sp
  For example, the call to \f(CW\*(C`memset\*(C'\fR below is diagnosed by the warning
  because the function expects a value of type \f(CW\*(C`size_t\*(C'\fR as its argument
*************** the declaration of the function is diagn
*** 9374,9404 ****
  \&          memset (d, \*(Aq\e0\*(Aq, 32);
  \&        }
  .Ve
! .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
  .IX Item "-Wno-builtin-macro-redefined"
! Do not warn if certain built-in macros are redefined.  This suppresses
  warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
! .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
  .IX Item "-Wstrict-prototypes (C and Objective-C only)"
  Warn if a function is declared or defined without specifying the
! argument types.  (An old-style function definition is permitted without
  a warning if preceded by a declaration that specifies the argument
  types.)
! .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
  .IX Item "-Wold-style-declaration (C and Objective-C only)"
  Warn for obsolescent usages, according to the C Standard, in a
! declaration. For example, warn if storage-class specifiers like
  \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
  is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
  .IX Item "-Wold-style-definition (C and Objective-C only)"
! Warn if an old-style function definition is used.  A warning is given
  even if there is a previous prototype.  A definition using \fB()\fR
! is not considered an old-style definition in C23 mode, because it is
  equivalent to \fB(void)\fR in that case, but is considered an
! old-style definition for older standards.
! .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
  .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
  A function parameter is declared without a type specifier in K&R\-style
  functions:
--- 9307,9337 ----
  \&          memset (d, \*(Aq\e0\*(Aq, 32);
  \&        }
  .Ve
! .IP \fB\-Wno\-builtin\-macro\-redefined\fR 4
  .IX Item "-Wno-builtin-macro-redefined"
! Do not warn if certain built\-in macros are redefined.  This suppresses
  warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
! .IP "\fB\-Wstrict\-prototypes\fR (C and Objective\-C only)" 4
  .IX Item "-Wstrict-prototypes (C and Objective-C only)"
  Warn if a function is declared or defined without specifying the
! argument types.  (An old\-style function definition is permitted without
  a warning if preceded by a declaration that specifies the argument
  types.)
! .IP "\fB\-Wold\-style\-declaration\fR (C and Objective\-C only)" 4
  .IX Item "-Wold-style-declaration (C and Objective-C only)"
  Warn for obsolescent usages, according to the C Standard, in a
! declaration. For example, warn if storage\-class specifiers like
  \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
  is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wold\-style\-definition\fR (C and Objective\-C only)" 4
  .IX Item "-Wold-style-definition (C and Objective-C only)"
! Warn if an old\-style function definition is used.  A warning is given
  even if there is a previous prototype.  A definition using \fB()\fR
! is not considered an old\-style definition in C23 mode, because it is
  equivalent to \fB(void)\fR in that case, but is considered an
! old\-style definition for older standards.
! .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective\-C only)" 4
  .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
  A function parameter is declared without a type specifier in K&R\-style
  functions:
*************** functions:
*** 9408,9414 ****
  .Ve
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-declaration\-missing\-parameter\-type\fR (C and Objective-C only)" 4
  .IX Item "-Wno-declaration-missing-parameter-type (C and Objective-C only)"
  Do not warn if a function declaration contains a parameter name without
  a type.  Such function declarations do not provide a function prototype
--- 9341,9347 ----
  .Ve
  .Sp
  This warning is also enabled by \fB\-Wextra\fR.
! .IP "\fB\-Wno\-declaration\-missing\-parameter\-type\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-declaration-missing-parameter-type (C and Objective-C only)"
  Do not warn if a function declaration contains a parameter name without
  a type.  Such function declarations do not provide a function prototype
*************** is treated as an error.  The error can b
*** 9420,9452 ****
  error alone, with \fB\-Wno\-error=declaration\-missing\-parameter\-type\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
  .IX Item "-Wmissing-prototypes (C and Objective-C only)"
  Warn if a global function is defined without a previous prototype
  declaration.  This warning is issued even if the definition itself
  provides a prototype.  Use this option to detect global functions
  that do not have a matching prototype declaration in a header file.
! This option is not valid for \*(C+ because all function declarations
! provide prototypes and a non-matching declaration declares an
  overload rather than conflict with an earlier declaration.
! Use \fB\-Wmissing\-declarations\fR to detect missing declarations in \*(C+.
! .IP "\fB\-Wmissing\-variable\-declarations\fR (C and Objective-C only)" 4
  .IX Item "-Wmissing-variable-declarations (C and Objective-C only)"
  Warn if a global variable is defined without a previous declaration.
  Use this option to detect global variables that do not have a matching
  extern declaration in a header file.
! .IP "\fB\-Wmissing\-declarations\fR" 4
  .IX Item "-Wmissing-declarations"
  Warn if a global function is defined without a previous declaration.
  Do so even if the definition itself provides a prototype.
  Use this option to detect global functions that are not declared in
  header files.  In C, no warnings are issued for functions with previous
! non-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
! missing prototypes.  In \*(C+, no warnings are issued for function templates,
  or for inline functions, or for functions in anonymous namespaces.
! .IP "\fB\-Wmissing\-field\-initializers\fR" 4
  .IX Item "-Wmissing-field-initializers"
! Warn if a structure's initializer has some fields missing.  For
  example, the following code causes such a warning, because
  \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
  .Sp
--- 9353,9385 ----
  error alone, with \fB\-Wno\-error=declaration\-missing\-parameter\-type\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wmissing\-prototypes\fR (C and Objective\-C only)" 4
  .IX Item "-Wmissing-prototypes (C and Objective-C only)"
  Warn if a global function is defined without a previous prototype
  declaration.  This warning is issued even if the definition itself
  provides a prototype.  Use this option to detect global functions
  that do not have a matching prototype declaration in a header file.
! This option is not valid for C++ because all function declarations
! provide prototypes and a non\-matching declaration declares an
  overload rather than conflict with an earlier declaration.
! Use \fB\-Wmissing\-declarations\fR to detect missing declarations in C++.
! .IP "\fB\-Wmissing\-variable\-declarations\fR (C and Objective\-C only)" 4
  .IX Item "-Wmissing-variable-declarations (C and Objective-C only)"
  Warn if a global variable is defined without a previous declaration.
  Use this option to detect global variables that do not have a matching
  extern declaration in a header file.
! .IP \fB\-Wmissing\-declarations\fR 4
  .IX Item "-Wmissing-declarations"
  Warn if a global function is defined without a previous declaration.
  Do so even if the definition itself provides a prototype.
  Use this option to detect global functions that are not declared in
  header files.  In C, no warnings are issued for functions with previous
! non\-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
! missing prototypes.  In C++, no warnings are issued for function templates,
  or for inline functions, or for functions in anonymous namespaces.
! .IP \fB\-Wmissing\-field\-initializers\fR 4
  .IX Item "-Wmissing-field-initializers"
! Warn if a structure\*(Aqs initializer has some fields missing.  For
  example, the following code causes such a warning, because
  \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
  .Sp
*************** In C this option does not warn about the
*** 9471,9477 ****
  \&        struct s x = { 0 };
  .Ve
  .Sp
! Likewise, in \*(C+ this option does not warn about the empty { }
  initializer, for example:
  .Sp
  .Vb 2
--- 9404,9410 ----
  \&        struct s x = { 0 };
  .Ve
  .Sp
! Likewise, in C++ this option does not warn about the empty { }
  initializer, for example:
  .Sp
  .Vb 2
*************** initializer, for example:
*** 9481,9489 ****
  .Sp
  This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
  warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
! .IP "\fB\-Wno\-missing\-requires\fR" 4
  .IX Item "-Wno-missing-requires"
! By default, the compiler warns about a concept-id appearing as a \*(C+20 simple-requirement:
  .Sp
  .Vb 1
  \&        bool satisfied = requires { C<T> };
--- 9414,9422 ----
  .Sp
  This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
  warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
! .IP \fB\-Wno\-missing\-requires\fR 4
  .IX Item "-Wno-missing-requires"
! By default, the compiler warns about a concept\-id appearing as a C++20 simple\-requirement:
  .Sp
  .Vb 1
  \&        bool satisfied = requires { C<T> };
*************** so \fBsatisfied\fR is only true if conce
*** 9500,9506 ****
  type \fBT\fR.
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-requires\fR.
! .IP "\fB\-Wno\-missing\-template\-keyword\fR" 4
  .IX Item "-Wno-missing-template-keyword"
  The member access tokens ., \-> and :: must be followed by the \f(CW\*(C`template\*(C'\fR
  keyword if the parent object is dependent and the member being named is a
--- 9433,9439 ----
  type \fBT\fR.
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-requires\fR.
! .IP \fB\-Wno\-missing\-template\-keyword\fR 4
  .IX Item "-Wno-missing-template-keyword"
  The member access tokens ., \-> and :: must be followed by the \f(CW\*(C`template\*(C'\fR
  keyword if the parent object is dependent and the member being named is a
*************** template, even where m and N are integer
*** 9530,9561 ****
  .Ve
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-template\-keyword\fR.
! .IP "\fB\-Wno\-multichar\fR" 4
  .IX Item "-Wno-multichar"
! Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
! Usually they indicate a typo in the user's code, as they have
! implementation-defined values, and should not be used in portable code.
! .IP "\fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR]" 4
  .IX Item "-Wnormalized=[none|id|nfc|nfkc]"
! In \s-1ISO C\s0 and \s-1ISO \*(C+,\s0 two identifiers are different if they are
  different sequences of characters.  However, sometimes when characters
! outside the basic \s-1ASCII\s0 character set are used, you can have two
  different character sequences that look the same.  To avoid confusion,
! the \s-1ISO 10646\s0 standard sets out some \fInormalization rules\fR which
  when applied ensure that two sequences that look the same are turned into
! the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
  have not been normalized; this option controls that warning.
  .Sp
! There are four levels of warning supported by \s-1GCC.\s0  The default is
  \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
! not in the \s-1ISO 10646 \*(L"C\*(R"\s0 normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
  recommended form for most uses.  It is equivalent to
  \&\fB\-Wnormalized\fR.
  .Sp
  Unfortunately, there are some characters allowed in identifiers by
! \&\s-1ISO C\s0 and \s-1ISO \*(C+\s0 that, when turned into \s-1NFC,\s0 are not allowed in 
! identifiers.  That is, there's no way to use these symbols in portable
! \&\s-1ISO C\s0 or \*(C+ and have all your identifiers in \s-1NFC.\s0
  \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
  It is hoped that future versions of the standards involved will correct
  this, which is why this option is not the default.
--- 9463,9494 ----
  .Ve
  .Sp
  This warning can be disabled with \fB\-Wno\-missing\-template\-keyword\fR.
! .IP \fB\-Wno\-multichar\fR 4
  .IX Item "-Wno-multichar"
! Do not warn if a multicharacter constant (\fB\*(AqFOOF\*(Aq\fR) is used.
! Usually they indicate a typo in the user\*(Aqs code, as they have
! implementation\-defined values, and should not be used in portable code.
! .IP \fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 4
  .IX Item "-Wnormalized=[none|id|nfc|nfkc]"
! In ISO C and ISO C++, two identifiers are different if they are
  different sequences of characters.  However, sometimes when characters
! outside the basic ASCII character set are used, you can have two
  different character sequences that look the same.  To avoid confusion,
! the ISO 10646 standard sets out some \fInormalization rules\fR which
  when applied ensure that two sequences that look the same are turned into
! the same sequence.  GCC can warn you if you are using identifiers that
  have not been normalized; this option controls that warning.
  .Sp
! There are four levels of warning supported by GCC.  The default is
  \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
! not in the ISO 10646 "C" normalized form, \fINFC\fR.  NFC is the
  recommended form for most uses.  It is equivalent to
  \&\fB\-Wnormalized\fR.
  .Sp
  Unfortunately, there are some characters allowed in identifiers by
! ISO C and ISO C++ that, when turned into NFC, are not allowed in 
! identifiers.  That is, there\*(Aqs no way to use these symbols in portable
! ISO C or C++ and have all your identifiers in NFC.
  \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
  It is hoped that future versions of the standards involved will correct
  this, which is why this option is not the default.
*************** this, which is why this option is not th
*** 9563,9617 ****
  You can switch the warning off for all characters by writing
  \&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
  only do this if you are using some other normalization scheme (like
! \&\*(L"D\*(R"), because otherwise you can easily create bugs that are
  literally impossible to see.
  .Sp
! Some characters in \s-1ISO 10646\s0 have distinct meanings but look identical
  in some fonts or display methodologies, especially once formatting has
! been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT LATIN SMALL
! LETTER N\*(R",\s0 displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
! placed in a superscript.  \s-1ISO 10646\s0 defines the \fI\s-1NFKC\s0\fR
  normalization scheme to convert all these into a standard form as
! well, and \s-1GCC\s0 warns if your code is not in \s-1NFKC\s0 if you use
  \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
  about every identifier that contains the letter O because it might be
  confused with the digit 0, and so is not the default, but may be
  useful as a local coding convention if the programming environment 
  cannot be fixed to display these characters distinctly.
! .IP "\fB\-Wno\-attribute\-warning\fR" 4
  .IX Item "-Wno-attribute-warning"
  Do not warn about usage of functions
  declared with \f(CW\*(C`warning\*(C'\fR attribute.  By default, this warning is
  enabled.  \fB\-Wno\-attribute\-warning\fR can be used to disable the
  warning or \fB\-Wno\-error=attribute\-warning\fR can be used to
  disable the error when compiled with \fB\-Werror\fR flag.
! .IP "\fB\-Wno\-deprecated\fR" 4
  .IX Item "-Wno-deprecated"
  Do not warn about usage of deprecated features.
! .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
  .IX Item "-Wno-deprecated-declarations"
  Do not warn about uses of functions,
  variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
  attribute.
! .IP "\fB\-Wno\-overflow\fR" 4
  .IX Item "-Wno-overflow"
! Do not warn about compile-time overflow in constant expressions.
! .IP "\fB\-Wno\-odr\fR" 4
  .IX Item "-Wno-odr"
! Warn about One Definition Rule violations during link-time optimization.
  Enabled by default.
! .IP "\fB\-Wopenacc\-parallelism\fR" 4
  .IX Item "-Wopenacc-parallelism"
  Warn about potentially suboptimal choices related to OpenACC parallelism.
! .IP "\fB\-Wno\-openmp\fR" 4
  .IX Item "-Wno-openmp"
  Warn about suspicious OpenMP code.
! .IP "\fB\-Wopenmp\-simd\fR" 4
  .IX Item "-Wopenmp-simd"
  Warn if the vectorizer cost model overrides the OpenMP
  simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
  option can be used to relax the cost model.
! .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
  .IX Item "-Woverride-init (C and Objective-C only)"
  Warn if an initialized field without side effects is overridden when
  using designated initializers.
--- 9496,9550 ----
  You can switch the warning off for all characters by writing
  \&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
  only do this if you are using some other normalization scheme (like
! "D"), because otherwise you can easily create bugs that are
  literally impossible to see.
  .Sp
! Some characters in ISO 10646 have distinct meanings but look identical
  in some fonts or display methodologies, especially once formatting has
! been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, "SUPERSCRIPT LATIN SMALL
! LETTER N", displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
! placed in a superscript.  ISO 10646 defines the \fINFKC\fR
  normalization scheme to convert all these into a standard form as
! well, and GCC warns if your code is not in NFKC if you use
  \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
  about every identifier that contains the letter O because it might be
  confused with the digit 0, and so is not the default, but may be
  useful as a local coding convention if the programming environment 
  cannot be fixed to display these characters distinctly.
! .IP \fB\-Wno\-attribute\-warning\fR 4
  .IX Item "-Wno-attribute-warning"
  Do not warn about usage of functions
  declared with \f(CW\*(C`warning\*(C'\fR attribute.  By default, this warning is
  enabled.  \fB\-Wno\-attribute\-warning\fR can be used to disable the
  warning or \fB\-Wno\-error=attribute\-warning\fR can be used to
  disable the error when compiled with \fB\-Werror\fR flag.
! .IP \fB\-Wno\-deprecated\fR 4
  .IX Item "-Wno-deprecated"
  Do not warn about usage of deprecated features.
! .IP \fB\-Wno\-deprecated\-declarations\fR 4
  .IX Item "-Wno-deprecated-declarations"
  Do not warn about uses of functions,
  variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
  attribute.
! .IP \fB\-Wno\-overflow\fR 4
  .IX Item "-Wno-overflow"
! Do not warn about compile\-time overflow in constant expressions.
! .IP \fB\-Wno\-odr\fR 4
  .IX Item "-Wno-odr"
! Warn about One Definition Rule violations during link\-time optimization.
  Enabled by default.
! .IP \fB\-Wopenacc\-parallelism\fR 4
  .IX Item "-Wopenacc-parallelism"
  Warn about potentially suboptimal choices related to OpenACC parallelism.
! .IP \fB\-Wno\-openmp\fR 4
  .IX Item "-Wno-openmp"
  Warn about suspicious OpenMP code.
! .IP \fB\-Wopenmp\-simd\fR 4
  .IX Item "-Wopenmp-simd"
  Warn if the vectorizer cost model overrides the OpenMP
  simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
  option can be used to relax the cost model.
! .IP "\fB\-Woverride\-init\fR (C and Objective\-C only)" 4
  .IX Item "-Woverride-init (C and Objective-C only)"
  Warn if an initialized field without side effects is overridden when
  using designated initializers.
*************** using designated initializers.
*** 9619,9633 ****
  This warning is included in \fB\-Wextra\fR.  To get other
  \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
  \&\-Wno\-override\-init\fR.
! .IP "\fB\-Wno\-override\-init\-side\-effects\fR (C and Objective-C only)" 4
  .IX Item "-Wno-override-init-side-effects (C and Objective-C only)"
  Do not warn if an initialized field with side effects is overridden when
  using designated initializers.  This warning is enabled by default.
! .IP "\fB\-Wpacked\fR" 4
  .IX Item "-Wpacked"
  Warn if a structure is given the packed attribute, but the packed
  attribute has no effect on the layout or size of the structure.
! Such structures may be mis-aligned for little benefit.  For
  instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
  is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
  have the packed attribute:
--- 9552,9566 ----
  This warning is included in \fB\-Wextra\fR.  To get other
  \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
  \&\-Wno\-override\-init\fR.
! .IP "\fB\-Wno\-override\-init\-side\-effects\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-override-init-side-effects (C and Objective-C only)"
  Do not warn if an initialized field with side effects is overridden when
  using designated initializers.  This warning is enabled by default.
! .IP \fB\-Wpacked\fR 4
  .IX Item "-Wpacked"
  Warn if a structure is given the packed attribute, but the packed
  attribute has no effect on the layout or size of the structure.
! Such structures may be mis\-aligned for little benefit.  For
  instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
  is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
  have the packed attribute:
*************** have the packed attribute:
*** 9642,9653 ****
  \&          struct foo f;
  \&        };
  .Ve
! .IP "\fB\-Wnopacked\-bitfield\-compat\fR" 4
  .IX Item "-Wnopacked-bitfield-compat"
! The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
! on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This was fixed in \s-1GCC 4.4\s0 but
! the change can lead to differences in the structure layout.  \s-1GCC\s0
! informs you when the offset of such a field has changed in \s-1GCC 4.4.\s0
  For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
  and \f(CW\*(C`b\*(C'\fR in this structure:
  .Sp
--- 9575,9586 ----
  \&          struct foo f;
  \&        };
  .Ve
! .IP \fB\-Wnopacked\-bitfield\-compat\fR 4
  .IX Item "-Wnopacked-bitfield-compat"
! The 4.1, 4.2 and 4.3 series of GCC ignore the \f(CW\*(C`packed\*(C'\fR attribute
! on bit\-fields of type \f(CW\*(C`char\*(C'\fR.  This was fixed in GCC 4.4 but
! the change can lead to differences in the structure layout.  GCC
! informs you when the offset of such a field has changed in GCC 4.4.
  For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
  and \f(CW\*(C`b\*(C'\fR in this structure:
  .Sp
*************** and \f(CW\*(C`b\*(C'\fR in this structur
*** 9661,9668 ****
  .Sp
  This warning is enabled by default.  Use
  \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
! .IP "\fB\-Wpacked\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wpacked-not-aligned (C, , Objective-C and Objective- only)"
  Warn if a structure field with explicitly specified alignment in a
  packed struct or union is misaligned.  For example, a warning will
  be issued on \f(CW\*(C`struct S\*(C'\fR, like, \f(CW\*(C`warning: alignment 1 of
--- 9594,9601 ----
  .Sp
  This warning is enabled by default.  Use
  \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
! .IP "\fB\-Wpacked\-not\-aligned\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)"
  Warn if a structure field with explicitly specified alignment in a
  packed struct or union is misaligned.  For example, a warning will
  be issued on \f(CW\*(C`struct S\*(C'\fR, like, \f(CW\*(C`warning: alignment 1 of
*************** be issued on \f(CW\*(C`struct S\*(C'\fR,
*** 9676,9699 ****
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wpadded\fR" 4
  .IX Item "-Wpadded"
  Warn if padding is included in a structure, either to align an element
  of the structure or to align the whole structure.  Sometimes when this
  happens it is possible to rearrange the fields of the structure to
  reduce the padding and so make the structure smaller.
! .IP "\fB\-Wredundant\-decls\fR" 4
  .IX Item "-Wredundant-decls"
  Warn if anything is declared more than once in the same scope, even in
  cases where multiple declaration is valid and changes nothing.
! .IP "\fB\-Wrestrict\fR" 4
  .IX Item "-Wrestrict"
  Warn when an object referenced by a \f(CW\*(C`restrict\*(C'\fR\-qualified parameter
! (or, in \*(C+, a \f(CW\*(C`_\|_restrict\*(C'\fR\-qualified parameter) is aliased by another
  argument, or when copies between such objects overlap.  For example,
  the call to the \f(CW\*(C`strcpy\*(C'\fR function below attempts to truncate the string
  by replacing its initial characters with the last four.  However, because
! the call writes the terminating \s-1NUL\s0 into \f(CW\*(C`a[4]\*(C'\fR, the copies overlap and
  the call is diagnosed.
  .Sp
  .Vb 6
--- 9609,9632 ----
  .Ve
  .Sp
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wpadded\fR 4
  .IX Item "-Wpadded"
  Warn if padding is included in a structure, either to align an element
  of the structure or to align the whole structure.  Sometimes when this
  happens it is possible to rearrange the fields of the structure to
  reduce the padding and so make the structure smaller.
! .IP \fB\-Wredundant\-decls\fR 4
  .IX Item "-Wredundant-decls"
  Warn if anything is declared more than once in the same scope, even in
  cases where multiple declaration is valid and changes nothing.
! .IP \fB\-Wrestrict\fR 4
  .IX Item "-Wrestrict"
  Warn when an object referenced by a \f(CW\*(C`restrict\*(C'\fR\-qualified parameter
! (or, in C++, a \f(CW\*(C`_\|_restrict\*(C'\fR\-qualified parameter) is aliased by another
  argument, or when copies between such objects overlap.  For example,
  the call to the \f(CW\*(C`strcpy\*(C'\fR function below attempts to truncate the string
  by replacing its initial characters with the last four.  However, because
! the call writes the terminating NUL into \f(CW\*(C`a[4]\*(C'\fR, the copies overlap and
  the call is diagnosed.
  .Sp
  .Vb 6
*************** the call is diagnosed.
*** 9708,9717 ****
  The \fB\-Wrestrict\fR option detects some instances of simple overlap
  even without optimization but works best at \fB\-O2\fR and above.  It
  is included in \fB\-Wall\fR.
! .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
  .IX Item "-Wnested-externs (C and Objective-C only)"
  Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
! .IP "\fB\-Winline\fR" 4
  .IX Item "-Winline"
  Warn if a function that is declared as inline cannot be inlined.
  Even with this option, the compiler does not warn about failures to
--- 9641,9650 ----
  The \fB\-Wrestrict\fR option detects some instances of simple overlap
  even without optimization but works best at \fB\-O2\fR and above.  It
  is included in \fB\-Wall\fR.
! .IP "\fB\-Wnested\-externs\fR (C and Objective\-C only)" 4
  .IX Item "-Wnested-externs (C and Objective-C only)"
  Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
! .IP \fB\-Winline\fR 4
  .IX Item "-Winline"
  Warn if a function that is declared as inline cannot be inlined.
  Even with this option, the compiler does not warn about failures to
*************** the size of the function being inlined a
*** 9723,9732 ****
  that has already been done in the current function.  Therefore,
  seemingly insignificant changes in the source program can cause the
  warnings produced by \fB\-Winline\fR to appear or disappear.
! .IP "\fB\-Winterference\-size\fR" 4
  .IX Item "-Winterference-size"
! Warn about use of \*(C+17 \f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR
! without specifying its value with \fB\-\-param destructive-interference-size\fR.
  Also warn about questionable values for that option.
  .Sp
  This variable is intended to be used for controlling class layout, to
--- 9656,9665 ----
  that has already been done in the current function.  Therefore,
  seemingly insignificant changes in the source program can cause the
  warnings produced by \fB\-Winline\fR to appear or disappear.
! .IP \fB\-Winterference\-size\fR 4
  .IX Item "-Winterference-size"
! Warn about use of C++17 \f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR
! without specifying its value with \fB\-\-param destructive\-interference\-size\fR.
  Also warn about questionable values for that option.
  .Sp
  This variable is intended to be used for controlling class layout, to
*************** avoid false sharing in concurrent code:
*** 9742,9816 ****
  .Ve
  .Sp
  Here \fBone\fR and \fBtwo\fR are intended to be far enough apart
! that stores to one won't require accesses to the other to reload the
  cache line.
  .Sp
! By default, \fB\-\-param destructive-interference-size\fR and
! \&\fB\-\-param constructive-interference-size\fR are set based on the
  current \fB\-mtune\fR option, typically to the L1 cache line size
! for the particular target \s-1CPU,\s0 sometimes to a range if tuning for a
! generic target.  So all translation units that depend on \s-1ABI\s0
  compatibility for the use of these variables must be compiled with
  the same \fB\-mtune\fR (or \fB\-mcpu\fR).
  .Sp
! If \s-1ABI\s0 stability is important, such as if the use is in a header for a
  library, you should probably not use the hardware interference size
  variables at all.  Alternatively, you can force a particular value
  with \fB\-\-param\fR.
  .Sp
! If you are confident that your use of the variable does not affect \s-1ABI\s0
  outside a single build of your project, you can turn off the warning
  with \fB\-Wno\-interference\-size\fR.
! .IP "\fB\-Wint\-in\-bool\-context\fR" 4
  .IX Item "-Wint-in-bool-context"
  Warn for suspicious use of integer values where boolean values are expected,
! such as conditional expressions (?:) using non-boolean integer constants in
  boolean context, like \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR.  Or left shifting of signed
  integers in boolean context, like \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR.  Likewise
  for all kinds of multiplications regardless of the data type.
  This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
  .IX Item "-Wno-int-to-pointer-cast"
  Suppress warnings from casts to pointer type of an integer of a
! different size. In \*(C+, casting to a pointer type of smaller size is
! an error. \fBWint-to-pointer-cast\fR is enabled by default.
! .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
  .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
  Suppress warnings from casts from a pointer to an integer type of a
  different size.
! .IP "\fB\-Winvalid\-pch\fR" 4
  .IX Item "-Winvalid-pch"
  Warn if a precompiled header is found in
  the search path but cannot be used.
! .IP "\fB\-Winvalid\-utf8\fR" 4
  .IX Item "-Winvalid-utf8"
! Warn if an invalid \s-1UTF\-8\s0 character is found.
! This warning is on by default for \*(C+23 if \fB\-finput\-charset=UTF\-8\fR
  is used and turned into error with \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wno\-unicode\fR" 4
  .IX Item "-Wno-unicode"
! Don't diagnose invalid forms of delimited or named escape sequences which are
  treated as separate tokens.  \fBWunicode\fR is enabled by default.
! .IP "\fB\-Wlong\-long\fR" 4
  .IX Item "-Wlong-long"
  Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
! \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in \s-1ISO C90\s0 and \*(C+98
  modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wvariadic\-macros\fR" 4
  .IX Item "-Wvariadic-macros"
! Warn if variadic macros are used in \s-1ISO C90\s0 mode, or if the \s-1GNU\s0
! alternate syntax is used in \s-1ISO C99\s0 mode.  This is enabled by either
  \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
  messages, use \fB\-Wno\-variadic\-macros\fR.
! .IP "\fB\-Wno\-varargs\fR" 4
  .IX Item "-Wno-varargs"
  Do not warn upon questionable usage of the macros used to handle variable
  arguments like \f(CW\*(C`va_start\*(C'\fR.  These warnings are enabled by default.
! .IP "\fB\-Wvector\-operation\-performance\fR" 4
  .IX Item "-Wvector-operation-performance"
! Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
  architecture.  Mainly useful for the performance tuning.
  Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
  scalar operation is performed on every vector element; 
--- 9675,9749 ----
  .Ve
  .Sp
  Here \fBone\fR and \fBtwo\fR are intended to be far enough apart
! that stores to one won\*(Aqt require accesses to the other to reload the
  cache line.
  .Sp
! By default, \fB\-\-param destructive\-interference\-size\fR and
! \&\fB\-\-param constructive\-interference\-size\fR are set based on the
  current \fB\-mtune\fR option, typically to the L1 cache line size
! for the particular target CPU, sometimes to a range if tuning for a
! generic target.  So all translation units that depend on ABI
  compatibility for the use of these variables must be compiled with
  the same \fB\-mtune\fR (or \fB\-mcpu\fR).
  .Sp
! If ABI stability is important, such as if the use is in a header for a
  library, you should probably not use the hardware interference size
  variables at all.  Alternatively, you can force a particular value
  with \fB\-\-param\fR.
  .Sp
! If you are confident that your use of the variable does not affect ABI
  outside a single build of your project, you can turn off the warning
  with \fB\-Wno\-interference\-size\fR.
! .IP \fB\-Wint\-in\-bool\-context\fR 4
  .IX Item "-Wint-in-bool-context"
  Warn for suspicious use of integer values where boolean values are expected,
! such as conditional expressions (?:) using non\-boolean integer constants in
  boolean context, like \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR.  Or left shifting of signed
  integers in boolean context, like \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR.  Likewise
  for all kinds of multiplications regardless of the data type.
  This warning is enabled by \fB\-Wall\fR.
! .IP \fB\-Wno\-int\-to\-pointer\-cast\fR 4
  .IX Item "-Wno-int-to-pointer-cast"
  Suppress warnings from casts to pointer type of an integer of a
! different size. In C++, casting to a pointer type of smaller size is
! an error. \fBWint\-to\-pointer\-cast\fR is enabled by default.
! .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
  Suppress warnings from casts from a pointer to an integer type of a
  different size.
! .IP \fB\-Winvalid\-pch\fR 4
  .IX Item "-Winvalid-pch"
  Warn if a precompiled header is found in
  the search path but cannot be used.
! .IP \fB\-Winvalid\-utf8\fR 4
  .IX Item "-Winvalid-utf8"
! Warn if an invalid UTF\-8 character is found.
! This warning is on by default for C++23 if \fB\-finput\-charset=UTF\-8\fR
  is used and turned into error with \fB\-pedantic\-errors\fR.
! .IP \fB\-Wno\-unicode\fR 4
  .IX Item "-Wno-unicode"
! Don\*(Aqt diagnose invalid forms of delimited or named escape sequences which are
  treated as separate tokens.  \fBWunicode\fR is enabled by default.
! .IP \fB\-Wlong\-long\fR 4
  .IX Item "-Wlong-long"
  Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
! \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in ISO C90 and C++98
  modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wvariadic\-macros\fR 4
  .IX Item "-Wvariadic-macros"
! Warn if variadic macros are used in ISO C90 mode, or if the GNU
! alternate syntax is used in ISO C99 mode.  This is enabled by either
  \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
  messages, use \fB\-Wno\-variadic\-macros\fR.
! .IP \fB\-Wno\-varargs\fR 4
  .IX Item "-Wno-varargs"
  Do not warn upon questionable usage of the macros used to handle variable
  arguments like \f(CW\*(C`va_start\*(C'\fR.  These warnings are enabled by default.
! .IP \fB\-Wvector\-operation\-performance\fR 4
  .IX Item "-Wvector-operation-performance"
! Warn if vector operation is not implemented via SIMD capabilities of the
  architecture.  Mainly useful for the performance tuning.
  Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
  scalar operation is performed on every vector element; 
*************** scalar operation is performed on every v
*** 9818,9859 ****
  using scalars of wider type, which normally is more performance efficient;
  and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
  scalar type.
! .IP "\fB\-Wvla\fR" 4
  .IX Item "-Wvla"
! Warn if a variable-length array is used in the code.
  \&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
! the variable-length array.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wvla\-larger\-than=\fR\fIbyte-size\fR" 4
  .IX Item "-Wvla-larger-than=byte-size"
  If this option is used, the compiler warns for declarations of
! variable-length arrays whose size is either unbounded, or bounded
! by an argument that allows the array size to exceed \fIbyte-size\fR
! bytes.  This is similar to how \fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR
! works, but with variable-length arrays.
  .Sp
! Note that \s-1GCC\s0 may optimize small variable-length arrays of a known
  value into plain arrays, so this warning may not get triggered for
  such arrays.
  .Sp
! \&\fB\-Wvla\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default but
  is typically only effective when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR.
! .IP "\fB\-Wno\-vla\-larger\-than\fR" 4
  .IX Item "-Wno-vla-larger-than"
  Disable \fB\-Wvla\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wvla\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wvla\-parameter\fR" 4
  .IX Item "-Wvla-parameter"
  Warn about redeclarations of functions involving arguments of Variable
  Length Array types of inconsistent kinds or forms, and enable the detection
! of out-of-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
! If the first function declaration uses the \s-1VLA\s0 form the bound specified
  in the array is assumed to be the minimum number of elements expected to
  be provided in calls to the function and the maximum number of elements
  accessed by it.  Failing to provide arguments of sufficient size or
--- 9751,9792 ----
  using scalars of wider type, which normally is more performance efficient;
  and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
  scalar type.
! .IP \fB\-Wvla\fR 4
  .IX Item "-Wvla"
! Warn if a variable\-length array is used in the code.
  \&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
! the variable\-length array.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wvla\-larger\-than=\fR\fIbyte\-size\fR 4
  .IX Item "-Wvla-larger-than=byte-size"
  If this option is used, the compiler warns for declarations of
! variable\-length arrays whose size is either unbounded, or bounded
! by an argument that allows the array size to exceed \fIbyte\-size\fR
! bytes.  This is similar to how \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR
! works, but with variable\-length arrays.
  .Sp
! Note that GCC may optimize small variable\-length arrays of a known
  value into plain arrays, so this warning may not get triggered for
  such arrays.
  .Sp
! \&\fB\-Wvla\-larger\-than=\fR\fBPTRDIFF_MAX\fR is enabled by default but
  is typically only effective when \fB\-ftree\-vrp\fR is active (default
  for \fB\-O2\fR and above).
  .Sp
! See also \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR.
! .IP \fB\-Wno\-vla\-larger\-than\fR 4
  .IX Item "-Wno-vla-larger-than"
  Disable \fB\-Wvla\-larger\-than=\fR warnings.  The option is equivalent
! to \fB\-Wvla\-larger\-than=\fR\fBSIZE_MAX\fR or larger.
! .IP \fB\-Wvla\-parameter\fR 4
  .IX Item "-Wvla-parameter"
  Warn about redeclarations of functions involving arguments of Variable
  Length Array types of inconsistent kinds or forms, and enable the detection
! of out\-of\-bounds accesses to such parameters by warnings such as
  \&\fB\-Warray\-bounds\fR.
  .Sp
! If the first function declaration uses the VLA form the bound specified
  in the array is assumed to be the minimum number of elements expected to
  be provided in calls to the function and the maximum number of elements
  accessed by it.  Failing to provide arguments of sufficient size or
*************** accessing more than the maximum number o
*** 9862,9869 ****
  For example, the warning triggers for the following redeclarations because
  the first one allows an array of any size to be passed to \f(CW\*(C`f\*(C'\fR while
  the second one specifies that the array argument must have at least \f(CW\*(C`n\*(C'\fR
! elements.  In addition, calling \f(CW\*(C`f\*(C'\fR with the associated \s-1VLA\s0 bound
! parameter in excess of the actual \s-1VLA\s0 bound triggers a warning as well.
  .Sp
  .Vb 3
  \&        void f (int n, int[n]);
--- 9795,9802 ----
  For example, the warning triggers for the following redeclarations because
  the first one allows an array of any size to be passed to \f(CW\*(C`f\*(C'\fR while
  the second one specifies that the array argument must have at least \f(CW\*(C`n\*(C'\fR
! elements.  In addition, calling \f(CW\*(C`f\*(C'\fR with the associated VLA bound
! parameter in excess of the actual VLA bound triggers a warning as well.
  .Sp
  .Vb 3
  \&        void f (int n, int[n]);
*************** parameter in excess of the actual \s-1VL
*** 9884,9973 ****
  \&\fB\-Wvla\-parameter\fR is included in \fB\-Wall\fR.  The
  \&\fB\-Warray\-parameter\fR option triggers warnings for similar problems
  involving ordinary array arguments.
! .IP "\fB\-Wvolatile\-register\-var\fR" 4
  .IX Item "-Wvolatile-register-var"
  Warn if a register variable is declared volatile.  The volatile
  modifier does not inhibit all optimizations that may eliminate reads
  and/or writes to register variables.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wno\-xor\-used\-as\-pow\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
! .IX Item "-Wno-xor-used-as-pow (C, , Objective-C and Objective- only)"
  Disable warnings about uses of \f(CW\*(C`^\*(C'\fR, the exclusive or operator,
  where it appears the code meant exponentiation.
  Specifically, the warning occurs when the
! left-hand side is the decimal constant 2 or 10 and the right-hand side
  is also a decimal constant.
  .Sp
! In C and \*(C+, \f(CW\*(C`^\*(C'\fR means exclusive or, whereas in some other languages
! (e.g. TeX and some versions of \s-1BASIC\s0) it means exponentiation.
  .Sp
  This warning can be silenced by converting one of the operands to
  hexadecimal as well as by compiling with \fB\-Wno\-xor\-used\-as\-pow\fR.
! .IP "\fB\-Wdisabled\-optimization\fR" 4
  .IX Item "-Wdisabled-optimization"
  Warn if a requested optimization pass is disabled.  This warning does
  not generally indicate that there is anything wrong with your code; it
! merely indicates that \s-1GCC\s0's optimizers are unable to handle the code
  effectively.  Often, the problem is that your code is too big or too
! complex; \s-1GCC\s0 refuses to optimize programs when the optimization
  itself is likely to take inordinate amounts of time.
! .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
  .IX Item "-Wpointer-sign (C and Objective-C only)"
  Warn for pointer argument passing or assignment with different signedness.
! This option is only supported for C and Objective-C.  It is implied by
  \&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
  \&\fB\-Wno\-pointer\-sign\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP "\fB\-Wstack\-protector\fR" 4
  .IX Item "-Wstack-protector"
  This option is only active when \fB\-fstack\-protector\fR is active.  It
  warns about functions that are not protected against stack smashing.
! .IP "\fB\-Woverlength\-strings\fR" 4
  .IX Item "-Woverlength-strings"
! Warn about string constants that are longer than the \*(L"minimum
! maximum\*(R" length specified in the C standard.  Modern compilers
  generally allow string constants that are much longer than the
! standard's minimum limit, but very portable programs should avoid
  using longer strings.
  .Sp
  The limit applies \fIafter\fR string constant concatenation, and does
! not count the trailing \s-1NUL.\s0  In C90, the limit was 509 characters; in
! C99, it was raised to 4095.  \*(C+98 does not specify a normative
! minimum maximum, so we do not diagnose overlength strings in \*(C+.
  .Sp
  This option is implied by \fB\-Wpedantic\fR, and can be disabled with
  \&\fB\-Wno\-overlength\-strings\fR.
! .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
  .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
  Issue a warning for any floating constant that does not have
  a suffix.  When used together with \fB\-Wsystem\-headers\fR it
  warns about such constants in system header files.  This can be useful
  when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
! from the decimal floating-point extension to C99.
! .IP "\fB\-Wno\-lto\-type\-mismatch\fR" 4
  .IX Item "-Wno-lto-type-mismatch"
! During the link-time optimization, do not warn about type mismatches in
  global declarations from different compilation units.
  Requires \fB\-flto\fR to be enabled.  Enabled by default.
! .IP "\fB\-Wno\-designated\-init\fR (C and Objective-C only)" 4
  .IX Item "-Wno-designated-init (C and Objective-C only)"
  Suppress warnings when a positional initializer is used to initialize
  a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
  attribute.
  .SS "Options That Control Static Analysis"
  .IX Subsection "Options That Control Static Analysis"
! .IP "\fB\-fanalyzer\fR" 4
  .IX Item "-fanalyzer"
  This option enables an static analysis of program flow which looks
! for \*(L"interesting\*(R" interprocedural paths through the
  code, and issues warnings for problems found on them.
  .Sp
! This analysis is much more expensive than other \s-1GCC\s0 warnings.
  .Sp
! In technical terms, it performs coverage-guided symbolic execution of
  the code being compiled.  It is neither sound nor complete: it can
! have false positives and false negatives.  It is a bug-finding tool,
  rather than a tool for proving program correctness.
  .Sp
  The analyzer is only suitable for use on C code in this release.
--- 9817,9906 ----
  \&\fB\-Wvla\-parameter\fR is included in \fB\-Wall\fR.  The
  \&\fB\-Warray\-parameter\fR option triggers warnings for similar problems
  involving ordinary array arguments.
! .IP \fB\-Wvolatile\-register\-var\fR 4
  .IX Item "-Wvolatile-register-var"
  Warn if a register variable is declared volatile.  The volatile
  modifier does not inhibit all optimizations that may eliminate reads
  and/or writes to register variables.  This warning is enabled by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wno\-xor\-used\-as\-pow\fR (C, C++, Objective\-C and Objective\-C++ only)" 4
! .IX Item "-Wno-xor-used-as-pow (C, C++, Objective-C and Objective-C++ only)"
  Disable warnings about uses of \f(CW\*(C`^\*(C'\fR, the exclusive or operator,
  where it appears the code meant exponentiation.
  Specifically, the warning occurs when the
! left\-hand side is the decimal constant 2 or 10 and the right\-hand side
  is also a decimal constant.
  .Sp
! In C and C++, \f(CW\*(C`^\*(C'\fR means exclusive or, whereas in some other languages
! (e.g. TeX and some versions of BASIC) it means exponentiation.
  .Sp
  This warning can be silenced by converting one of the operands to
  hexadecimal as well as by compiling with \fB\-Wno\-xor\-used\-as\-pow\fR.
! .IP \fB\-Wdisabled\-optimization\fR 4
  .IX Item "-Wdisabled-optimization"
  Warn if a requested optimization pass is disabled.  This warning does
  not generally indicate that there is anything wrong with your code; it
! merely indicates that GCC\*(Aqs optimizers are unable to handle the code
  effectively.  Often, the problem is that your code is too big or too
! complex; GCC refuses to optimize programs when the optimization
  itself is likely to take inordinate amounts of time.
! .IP "\fB\-Wpointer\-sign\fR (C and Objective\-C only)" 4
  .IX Item "-Wpointer-sign (C and Objective-C only)"
  Warn for pointer argument passing or assignment with different signedness.
! This option is only supported for C and Objective\-C.  It is implied by
  \&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
  \&\fB\-Wno\-pointer\-sign\fR.
  .Sp
  This warning is upgraded to an error by \fB\-pedantic\-errors\fR.
! .IP \fB\-Wstack\-protector\fR 4
  .IX Item "-Wstack-protector"
  This option is only active when \fB\-fstack\-protector\fR is active.  It
  warns about functions that are not protected against stack smashing.
! .IP \fB\-Woverlength\-strings\fR 4
  .IX Item "-Woverlength-strings"
! Warn about string constants that are longer than the "minimum
! maximum" length specified in the C standard.  Modern compilers
  generally allow string constants that are much longer than the
! standard\*(Aqs minimum limit, but very portable programs should avoid
  using longer strings.
  .Sp
  The limit applies \fIafter\fR string constant concatenation, and does
! not count the trailing NUL.  In C90, the limit was 509 characters; in
! C99, it was raised to 4095.  C++98 does not specify a normative
! minimum maximum, so we do not diagnose overlength strings in C++.
  .Sp
  This option is implied by \fB\-Wpedantic\fR, and can be disabled with
  \&\fB\-Wno\-overlength\-strings\fR.
! .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective\-C only)" 4
  .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
  Issue a warning for any floating constant that does not have
  a suffix.  When used together with \fB\-Wsystem\-headers\fR it
  warns about such constants in system header files.  This can be useful
  when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
! from the decimal floating\-point extension to C99.
! .IP \fB\-Wno\-lto\-type\-mismatch\fR 4
  .IX Item "-Wno-lto-type-mismatch"
! During the link\-time optimization, do not warn about type mismatches in
  global declarations from different compilation units.
  Requires \fB\-flto\fR to be enabled.  Enabled by default.
! .IP "\fB\-Wno\-designated\-init\fR (C and Objective\-C only)" 4
  .IX Item "-Wno-designated-init (C and Objective-C only)"
  Suppress warnings when a positional initializer is used to initialize
  a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
  attribute.
  .SS "Options That Control Static Analysis"
  .IX Subsection "Options That Control Static Analysis"
! .IP \fB\-fanalyzer\fR 4
  .IX Item "-fanalyzer"
  This option enables an static analysis of program flow which looks
! for "interesting" interprocedural paths through the
  code, and issues warnings for problems found on them.
  .Sp
! This analysis is much more expensive than other GCC warnings.
  .Sp
! In technical terms, it performs coverage\-guided symbolic execution of
  the code being compiled.  It is neither sound nor complete: it can
! have false positives and false negatives.  It is a bug\-finding tool,
  rather than a tool for proving program correctness.
  .Sp
  The analyzer is only suitable for use on C code in this release.
*************** Enabling this option effectively enables
*** 10023,10031 ****
  \&\-Wanalyzer\-write\-to\-const
  \&\-Wanalyzer\-write\-to\-string\-literal\fR
  .Sp
! This option is only available if \s-1GCC\s0 was configured with analyzer
  support enabled.
! .IP "\fB\-Wanalyzer\-symbol\-too\-complex\fR" 4
  .IX Item "-Wanalyzer-symbol-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to track the state of memory, but these can be defeated by
--- 9956,9964 ----
  \&\-Wanalyzer\-write\-to\-const
  \&\-Wanalyzer\-write\-to\-string\-literal\fR
  .Sp
! This option is only available if GCC was configured with analyzer
  support enabled.
! .IP \fB\-Wanalyzer\-symbol\-too\-complex\fR 4
  .IX Item "-Wanalyzer-symbol-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to track the state of memory, but these can be defeated by
*************** if they exceed the threshold defined by
*** 10036,10042 ****
  \&\fB\-\-param analyzer\-max\-svalue\-depth=\fR\fIvalue\fR, and falls back
  to an imprecise representation for such expressions.
  The \fB\-Wanalyzer\-symbol\-too\-complex\fR option warns if this occurs.
! .IP "\fB\-Wanalyzer\-too\-complex\fR" 4
  .IX Item "-Wanalyzer-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to explore the control flow and data flow in the program,
--- 9969,9975 ----
  \&\fB\-\-param analyzer\-max\-svalue\-depth=\fR\fIvalue\fR, and falls back
  to an imprecise representation for such expressions.
  The \fB\-Wanalyzer\-symbol\-too\-complex\fR option warns if this occurs.
! .IP \fB\-Wanalyzer\-too\-complex\fR 4
  .IX Item "-Wanalyzer-too-complex"
  If \fB\-fanalyzer\fR is enabled, the analyzer uses various heuristics
  to attempt to explore the control flow and data flow in the program,
*************** but these can be defeated by sufficientl
*** 10045,10051 ****
  By default, the analysis silently stops if the code is too
  complicated for the analyzer to fully explore and it reaches an internal
  limit.  The \fB\-Wanalyzer\-too\-complex\fR option warns if this occurs.
! .IP "\fB\-Wno\-analyzer\-allocation\-size\fR" 4
  .IX Item "-Wno-analyzer-allocation-size"
  This warning requires \fB\-fanalyzer\fR, which enables it;
  to disable it, use \fB\-Wno\-analyzer\-allocation\-size\fR.
--- 9978,9984 ----
  By default, the analysis silently stops if the code is too
  complicated for the analyzer to fully explore and it reaches an internal
  limit.  The \fB\-Wanalyzer\-too\-complex\fR option warns if this occurs.
! .IP \fB\-Wno\-analyzer\-allocation\-size\fR 4
  .IX Item "-Wno-analyzer-allocation-size"
  This warning requires \fB\-fanalyzer\fR, which enables it;
  to disable it, use \fB\-Wno\-analyzer\-allocation\-size\fR.
*************** This diagnostic warns for paths through
*** 10054,10061 ****
  a buffer is assigned to point at a buffer with a size that is not a
  multiple of \f(CW\*(C`sizeof (*pointer)\*(C'\fR.
  .Sp
! See  \s-1CWE\-131:\s0 Incorrect Calculation of Buffer Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/131.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-deref\-before\-check\fR" 4
  .IX Item "-Wno-analyzer-deref-before-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-deref\-before\-check\fR
--- 9987,9994 ----
  a buffer is assigned to point at a buffer with a size that is not a
  multiple of \f(CW\*(C`sizeof (*pointer)\*(C'\fR.
  .Sp
! See  CWE\-131: Incorrect Calculation of Buffer Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/131.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-deref\-before\-check\fR 4
  .IX Item "-Wno-analyzer-deref-before-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-deref\-before\-check\fR
*************** to disable it.
*** 10063,10083 ****
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is checked for \f(CW\*(C`NULL\*(C'\fR *after* it has already been
! dereferenced, suggesting that the pointer could have been \s-1NULL.\s0
! Such cases suggest that the check for \s-1NULL\s0 is either redundant,
  or that it needs to be moved to before the pointer is dereferenced.
  .Sp
  This diagnostic also considers values passed to a function argument
! marked with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non-NULL
  value, and thus will complain if such values are checked for \f(CW\*(C`NULL\*(C'\fR
  after returning from such a function call.
  .Sp
  This diagnostic is unlikely to be reported when any level of optimization
! is enabled, as \s-1GCC\s0's optimization logic will typically consider such
! checks for \s-1NULL\s0 as being redundant, and optimize them away before the
! analyzer \*(L"sees\*(R" them.  Hence optimization should be disabled when
  attempting to trigger this diagnostic.
! .IP "\fB\-Wno\-analyzer\-double\-fclose\fR" 4
  .IX Item "-Wno-analyzer-double-fclose"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-fclose\fR to disable it.
--- 9996,10016 ----
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is checked for \f(CW\*(C`NULL\*(C'\fR *after* it has already been
! dereferenced, suggesting that the pointer could have been NULL.
! Such cases suggest that the check for NULL is either redundant,
  or that it needs to be moved to before the pointer is dereferenced.
  .Sp
  This diagnostic also considers values passed to a function argument
! marked with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non\-NULL
  value, and thus will complain if such values are checked for \f(CW\*(C`NULL\*(C'\fR
  after returning from such a function call.
  .Sp
  This diagnostic is unlikely to be reported when any level of optimization
! is enabled, as GCC\*(Aqs optimization logic will typically consider such
! checks for NULL as being redundant, and optimize them away before the
! analyzer "sees" them.  Hence optimization should be disabled when
  attempting to trigger this diagnostic.
! .IP \fB\-Wno\-analyzer\-double\-fclose\fR 4
  .IX Item "-Wno-analyzer-double-fclose"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-fclose\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10085,10092 ****
  This diagnostic warns for paths through the code in which a \f(CW\*(C`FILE *\*(C'\fR
  can have \f(CW\*(C`fclose\*(C'\fR called on it more than once.
  .Sp
! See  \s-1CWE\-1341:\s0 Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-double\-free\fR" 4
  .IX Item "-Wno-analyzer-double-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-free\fR to disable it.
--- 10018,10025 ----
  This diagnostic warns for paths through the code in which a \f(CW\*(C`FILE *\*(C'\fR
  can have \f(CW\*(C`fclose\*(C'\fR called on it more than once.
  .Sp
! See  CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-double\-free\fR 4
  .IX Item "-Wno-analyzer-double-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-double\-free\fR to disable it.
*************** This diagnostic warns for paths through
*** 10095,10139 ****
  can have a deallocator called on it more than once, either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-415:\s0 Double Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/415.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR" 4
  .IX Item "-Wno-analyzer-exposure-through-output-file"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! security-sensitive value is written to an output file
  (such as writing a password to a log file).
  .Sp
! See  \s-1CWE\-532:\s0 Information Exposure Through Log Files (\f(CW\*(C`https://cwe.mitre.org/data/definitions/532.html\*(C'\fR).
! .IP "\fB\-Wanalyzer\-exposure\-through\-uninit\-copy\fR" 4
  .IX Item "-Wanalyzer-exposure-through-uninit-copy"
  This warning requires both \fB\-fanalyzer\fR and the use of a plugin
! to specify a function that copies across a \*(L"trust boundary\*(R".  Use
  \&\fB\-Wno\-analyzer\-exposure\-through\-uninit\-copy\fR to disable it.
  .Sp
! This diagnostic warns for \*(L"infoleaks\*(R" \- paths through the code in which
  uninitialized values are copied across a security boundary
! (such as code within an \s-1OS\s0 kernel that copies a partially-initialized
  struct on the stack to user space).
  .Sp
! See  \s-1CWE\-200:\s0 Exposure of Sensitive Information to an Unauthorized Actor (\f(CW\*(C`https://cwe.mitre.org/data/definitions/200.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-fd-access-mode-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which a
! \&\f(CW\*(C`read\*(C'\fR on a write-only file descriptor is attempted, or vice versa.
  .Sp
  This diagnostic also warns for code paths in a which a function with attribute
  \&\f(CW\*(C`fd_arg_read (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_WRONLY\*(C'\fR at referenced argument \f(CW\*(C`N\*(C'\fR or a function with attribute
  \&\f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_RDONLY\*(C'\fR at referenced argument \fIN\fR.
! .IP "\fB\-Wno\-analyzer\-fd\-double\-close\fR" 4
  .IX Item "-Wno-analyzer-fd-double-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-double\-close\fR
--- 10028,10072 ----
  can have a deallocator called on it more than once, either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-415: Double Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/415.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR 4
  .IX Item "-Wno-analyzer-exposure-through-output-file"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! security\-sensitive value is written to an output file
  (such as writing a password to a log file).
  .Sp
! See  CWE\-532: Information Exposure Through Log Files (\f(CW\*(C`https://cwe.mitre.org/data/definitions/532.html\*(C'\fR).
! .IP \fB\-Wanalyzer\-exposure\-through\-uninit\-copy\fR 4
  .IX Item "-Wanalyzer-exposure-through-uninit-copy"
  This warning requires both \fB\-fanalyzer\fR and the use of a plugin
! to specify a function that copies across a "trust boundary".  Use
  \&\fB\-Wno\-analyzer\-exposure\-through\-uninit\-copy\fR to disable it.
  .Sp
! This diagnostic warns for "infoleaks" \- paths through the code in which
  uninitialized values are copied across a security boundary
! (such as code within an OS kernel that copies a partially\-initialized
  struct on the stack to user space).
  .Sp
! See  CWE\-200: Exposure of Sensitive Information to an Unauthorized Actor (\f(CW\*(C`https://cwe.mitre.org/data/definitions/200.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR 4
  .IX Item "-Wno-analyzer-fd-access-mode-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which a
! \&\f(CW\*(C`read\*(C'\fR on a write\-only file descriptor is attempted, or vice versa.
  .Sp
  This diagnostic also warns for code paths in a which a function with attribute
  \&\f(CW\*(C`fd_arg_read (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_WRONLY\*(C'\fR at referenced argument \f(CW\*(C`N\*(C'\fR or a function with attribute
  \&\f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor opened with
  \&\f(CW\*(C`O_RDONLY\*(C'\fR at referenced argument \fIN\fR.
! .IP \fB\-Wno\-analyzer\-fd\-double\-close\fR 4
  .IX Item "-Wno-analyzer-fd-double-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-double\-close\fR
*************** to disable it.
*** 10142,10149 ****
  This diagnostic warns for paths through code in which a
  file descriptor can be closed more than once.
  .Sp
! See  \s-1CWE\-1341:\s0 Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-leak\fR" 4
  .IX Item "-Wno-analyzer-fd-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-leak\fR
--- 10075,10082 ----
  This diagnostic warns for paths through code in which a
  file descriptor can be closed more than once.
  .Sp
! See  CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-leak\fR 4
  .IX Item "-Wno-analyzer-fd-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-leak\fR
*************** to disable it.
*** 10152,10171 ****
  This diagnostic warns for paths through code in which an
  open file descriptor is leaked.
  .Sp
! See  \s-1CWE\-775:\s0 Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-fd-phase-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which an operation is
! attempted in the wrong phase of a file descriptor's lifetime.
  For example, it will warn on attempts to call \f(CW\*(C`accept\*(C'\fR on a stream
  socket that has not yet had \f(CW\*(C`listen\*(C'\fR successfully called on it.
  .Sp
! See  \s-1CWE\-666:\s0 Operation on Resource in Wrong Phase of Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/666.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-fd-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR
--- 10085,10104 ----
  This diagnostic warns for paths through code in which an
  open file descriptor is leaked.
  .Sp
! See  CWE\-775: Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR 4
  .IX Item "-Wno-analyzer-fd-phase-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through code in which an operation is
! attempted in the wrong phase of a file descriptor\*(Aqs lifetime.
  For example, it will warn on attempts to call \f(CW\*(C`accept\*(C'\fR on a stream
  socket that has not yet had \f(CW\*(C`listen\*(C'\fR successfully called on it.
  .Sp
! See  CWE\-666: Operation on Resource in Wrong Phase of Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/666.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-fd\-type\-mismatch\fR 4
  .IX Item "-Wno-analyzer-fd-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR
*************** operation is attempted on the wrong type
*** 10176,10182 ****
  For example, it will warn on attempts to use socket operations
  on a file descriptor obtained via \f(CW\*(C`open\*(C'\fR, or when attempting
  to use a stream socket operation on a datagram socket.
! .IP "\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR" 4
  .IX Item "-Wno-analyzer-fd-use-after-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR
--- 10109,10115 ----
  For example, it will warn on attempts to use socket operations
  on a file descriptor obtained via \f(CW\*(C`open\*(C'\fR, or when attempting
  to use a stream socket operation on a datagram socket.
! .IP \fB\-Wno\-analyzer\-fd\-use\-after\-close\fR 4
  .IX Item "-Wno-analyzer-fd-use-after-close"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR
*************** This diagnostic also warns for paths thr
*** 10189,10195 ****
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a closed file descriptor at
  referenced argument \f(CW\*(C`N\*(C'\fR.
! .IP "\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR" 4
  .IX Item "-Wno-analyzer-fd-use-without-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR
--- 10122,10128 ----
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a closed file descriptor at
  referenced argument \f(CW\*(C`N\*(C'\fR.
! .IP \fB\-Wno\-analyzer\-fd\-use\-without\-check\fR 4
  .IX Item "-Wno-analyzer-fd-use-without-check"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR
*************** This diagnostic also warns for paths thr
*** 10202,10208 ****
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor, at referenced
  argument \f(CW\*(C`N\*(C'\fR, without being checked for validity.
! .IP "\fB\-Wno\-analyzer\-file\-leak\fR" 4
  .IX Item "-Wno-analyzer-file-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-file\-leak\fR
--- 10135,10141 ----
  a function with attribute \f(CW\*(C`fd_arg (N)\*(C'\fR or \f(CW\*(C`fd_arg_read (N)\*(C'\fR
  or \f(CW\*(C`fd_arg_write (N)\*(C'\fR is called with a file descriptor, at referenced
  argument \f(CW\*(C`N\*(C'\fR, without being checked for validity.
! .IP \fB\-Wno\-analyzer\-file\-leak\fR 4
  .IX Item "-Wno-analyzer-file-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-file\-leak\fR
*************** to disable it.
*** 10211,10238 ****
  This diagnostic warns for paths through the code in which a
  \&\f(CW\*(C`<stdio.h>\*(C'\fR \f(CW\*(C`FILE *\*(C'\fR stream object is leaked.
  .Sp
! See  \s-1CWE\-775:\s0 Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR" 4
  .IX Item "-Wno-analyzer-free-of-non-heap"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which \f(CW\*(C`free\*(C'\fR
! is called on a non-heap pointer (e.g. an on-stack buffer, or a global).
  .Sp
! See  \s-1CWE\-590:\s0 Free of Memory not on the Heap (\f(CW\*(C`https://cwe.mitre.org/data/definitions/590.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR" 4
  .IX Item "-Wno-analyzer-imprecise-fp-arithmetic"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR
  to disable it.
  .Sp
! This diagnostic warns for paths through the code in which floating-point
  arithmetic is used in locations where precise computation is needed.  This
! diagnostic only warns on use of floating-point operands inside the
  calculation of an allocation size at the moment.
! .IP "\fB\-Wno\-analyzer\-infinite\-loop\fR" 4
  .IX Item "-Wno-analyzer-infinite-loop"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-loop\fR to disable it.
--- 10144,10171 ----
  This diagnostic warns for paths through the code in which a
  \&\f(CW\*(C`<stdio.h>\*(C'\fR \f(CW\*(C`FILE *\*(C'\fR stream object is leaked.
  .Sp
! See  CWE\-775: Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-free\-of\-non\-heap\fR 4
  .IX Item "-Wno-analyzer-free-of-non-heap"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR
  to disable it.
  .Sp
  This diagnostic warns for paths through the code in which \f(CW\*(C`free\*(C'\fR
! is called on a non\-heap pointer (e.g. an on\-stack buffer, or a global).
  .Sp
! See  CWE\-590: Free of Memory not on the Heap (\f(CW\*(C`https://cwe.mitre.org/data/definitions/590.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR 4
  .IX Item "-Wno-analyzer-imprecise-fp-arithmetic"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR
  to disable it.
  .Sp
! This diagnostic warns for paths through the code in which floating\-point
  arithmetic is used in locations where precise computation is needed.  This
! diagnostic only warns on use of floating\-point operands inside the
  calculation of an allocation size at the moment.
! .IP \fB\-Wno\-analyzer\-infinite\-loop\fR 4
  .IX Item "-Wno-analyzer-infinite-loop"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-loop\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10240,10253 ****
  This diagnostics warns for paths through the code which appear to
  lead to an infinite loop.
  .Sp
! Specifically, the analyzer will issue this warning when it \*(L"sees\*(R" a loop
  in which:
  .RS 4
! .IP "*" 4
! no externally-visible work could be being done within the loop
! .IP "*" 4
  there is no way to escape from the loop
! .IP "*" 4
  the analyzer is sufficiently confident about the program state
  throughout the loop to know that the above are true
  .RE
--- 10173,10186 ----
  This diagnostics warns for paths through the code which appear to
  lead to an infinite loop.
  .Sp
! Specifically, the analyzer will issue this warning when it "sees" a loop
  in which:
  .RS 4
! .IP * 4
! no externally\-visible work could be being done within the loop
! .IP * 4
  there is no way to escape from the loop
! .IP * 4
  the analyzer is sufficiently confident about the program state
  throughout the loop to know that the above are true
  .RE
*************** For example, consider:
*** 10277,10289 ****
  .Sp
  The analyzer will complain for the above case because if \f(CW\*(C`opcode\*(C'\fR
  ever matches none of the cases, the \f(CW\*(C`switch\*(C'\fR will follow the
! implicit \f(CW\*(C`default\*(C'\fR case, making the body of the loop be a \*(L"no-op\*(R"
  with \f(CW\*(C`cpu_state.pc\*(C'\fR unchanged, and thus using the same value of
  \&\f(CW\*(C`opcode\*(C'\fR on all subseqent iterations, leading to an infinite loop.
  .Sp
! See  \s-1CWE\-835:\s0 Loop with Unreachable Exit Condition ('Infinite Loop') (\f(CW\*(C`https://cwe.mitre.org/data/definitions/835.html\*(C'\fR).
  .RE
! .IP "\fB\-Wno\-analyzer\-infinite\-recursion\fR" 4
  .IX Item "-Wno-analyzer-infinite-recursion"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-recursion\fR to disable it.
--- 10210,10222 ----
  .Sp
  The analyzer will complain for the above case because if \f(CW\*(C`opcode\*(C'\fR
  ever matches none of the cases, the \f(CW\*(C`switch\*(C'\fR will follow the
! implicit \f(CW\*(C`default\*(C'\fR case, making the body of the loop be a "no\-op"
  with \f(CW\*(C`cpu_state.pc\*(C'\fR unchanged, and thus using the same value of
  \&\f(CW\*(C`opcode\*(C'\fR on all subseqent iterations, leading to an infinite loop.
  .Sp
! See  CWE\-835: Loop with Unreachable Exit Condition (\*(AqInfinite Loop\*(Aq) (\f(CW\*(C`https://cwe.mitre.org/data/definitions/835.html\*(C'\fR).
  .RE
! .IP \fB\-Wno\-analyzer\-infinite\-recursion\fR 4
  .IX Item "-Wno-analyzer-infinite-recursion"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-infinite\-recursion\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10291,10297 ****
  This diagnostics warns for paths through the code which appear to
  lead to infinite recursion.
  .Sp
! Specifically, when the analyzer \*(L"sees\*(R" a recursive call, it will compare
  the state of memory at the entry to the new frame with that at the entry
  to the previous frame of that function on the stack.  The warning is
  issued if nothing in memory appears to be changing; any changes observed
--- 10224,10230 ----
  This diagnostics warns for paths through the code which appear to
  lead to infinite recursion.
  .Sp
! Specifically, when the analyzer "sees" a recursive call, it will compare
  the state of memory at the entry to the new frame with that at the entry
  to the previous frame of that function on the stack.  The warning is
  issued if nothing in memory appears to be changing; any changes observed
*************** to parameters or globals are assumed to
*** 10299,10313 ****
  recursion and thus suppress the warning.
  .Sp
  This diagnostic is likely to miss cases of infinite recursion that
! are convered to iteration by the optimizer before the analyzer \*(L"sees\*(R"
  them.  Hence optimization should be disabled when attempting to trigger
  this diagnostic.
  .Sp
  Compare with \fB\-Winfinite\-recursion\fR, which provides a similar
  diagnostic, but is implemented in a different way.
  .Sp
! See  \s-1CWE\-674:\s0 Uncontrolled Recursion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/674.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-jump\-through\-null\fR" 4
  .IX Item "-Wno-analyzer-jump-through-null"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-jump\-through\-null\fR
--- 10232,10246 ----
  recursion and thus suppress the warning.
  .Sp
  This diagnostic is likely to miss cases of infinite recursion that
! are convered to iteration by the optimizer before the analyzer "sees"
  them.  Hence optimization should be disabled when attempting to trigger
  this diagnostic.
  .Sp
  Compare with \fB\-Winfinite\-recursion\fR, which provides a similar
  diagnostic, but is implemented in a different way.
  .Sp
! See  CWE\-674: Uncontrolled Recursion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/674.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-jump\-through\-null\fR 4
  .IX Item "-Wno-analyzer-jump-through-null"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-jump\-through\-null\fR
*************** to disable it.
*** 10315,10321 ****
  .Sp
  This diagnostic warns for paths through the code in which a \f(CW\*(C`NULL\*(C'\fR
  function pointer is called.
! .IP "\fB\-Wno\-analyzer\-malloc\-leak\fR" 4
  .IX Item "-Wno-analyzer-malloc-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-malloc\-leak\fR
--- 10248,10254 ----
  .Sp
  This diagnostic warns for paths through the code in which a \f(CW\*(C`NULL\*(C'\fR
  function pointer is called.
! .IP \fB\-Wno\-analyzer\-malloc\-leak\fR 4
  .IX Item "-Wno-analyzer-malloc-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-malloc\-leak\fR
*************** This diagnostic warns for paths through
*** 10325,10332 ****
  pointer allocated via an allocator is leaked: either \f(CW\*(C`malloc\*(C'\fR,
  or a function marked with attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-401:\s0 Missing Release of Memory after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/401.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-mismatching\-deallocation\fR" 4
  .IX Item "-Wno-analyzer-mismatching-deallocation"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-mismatching\-deallocation\fR
--- 10258,10265 ----
  pointer allocated via an allocator is leaked: either \f(CW\*(C`malloc\*(C'\fR,
  or a function marked with attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-401: Missing Release of Memory after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/401.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-mismatching\-deallocation\fR 4
  .IX Item "-Wno-analyzer-mismatching-deallocation"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-mismatching\-deallocation\fR
*************** will warn about mismatches between \f(CW
*** 10339,10358 ****
  and vector \f(CW\*(C`delete[]\*(C'\fR, and those marked as allocator/deallocator
  pairs using attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-762:\s0 Mismatched Memory Management Routines (\f(CW\*(C`https://cwe.mitre.org/data/definitions/762.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-out\-of\-bounds\fR" 4
  .IX Item "-Wno-analyzer-out-of-bounds"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-out\-of\-bounds\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a buffer is
! definitely read or written out-of-bounds.  The diagnostic applies for
  cases where the analyzer is able to determine a constant offset and for
  accesses past the end of a buffer, also a constant capacity.  Further,
  the diagnostic does limited checking for accesses past the end when the
  offset as well as the capacity is symbolic.
  .Sp
! See  \s-1CWE\-119:\s0 Improper Restriction of Operations within the Bounds of a Memory Buffer (\f(CW\*(C`https://cwe.mitre.org/data/definitions/119.html\*(C'\fR).
  .Sp
  For cases where the analyzer is able, it will emit a text art diagram
  visualizing the spatial relationship between the memory region that the
--- 10272,10291 ----
  and vector \f(CW\*(C`delete[]\*(C'\fR, and those marked as allocator/deallocator
  pairs using attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-762: Mismatched Memory Management Routines (\f(CW\*(C`https://cwe.mitre.org/data/definitions/762.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-out\-of\-bounds\fR 4
  .IX Item "-Wno-analyzer-out-of-bounds"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-out\-of\-bounds\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a buffer is
! definitely read or written out\-of\-bounds.  The diagnostic applies for
  cases where the analyzer is able to determine a constant offset and for
  accesses past the end of a buffer, also a constant capacity.  Further,
  the diagnostic does limited checking for accesses past the end when the
  offset as well as the capacity is symbolic.
  .Sp
! See  CWE\-119: Improper Restriction of Operations within the Bounds of a Memory Buffer (\f(CW\*(C`https://cwe.mitre.org/data/definitions/119.html\*(C'\fR).
  .Sp
  For cases where the analyzer is able, it will emit a text art diagram
  visualizing the spatial relationship between the memory region that the
*************** apart; which one is before or after in m
*** 10362,10445 ****
  involved, the direction of the access (read vs write), and, in some
  cases, the values of data involved.  This diagram can be suppressed
  using \fB\-fdiagnostics\-text\-art\-charset=none\fR.
! .IP "\fB\-Wno\-analyzer\-overlapping\-buffers\fR" 4
  .IX Item "-Wno-analyzer-overlapping-buffers"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-overlapping\-buffers\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which overlapping
! buffers are passed to an \s-1API\s0 for which the behavior on such buffers
  is undefined.
  .Sp
  Specifically, the diagnostic occurs on calls to the following functions
  .RS 4
  .ie n .IP "*<""memcpy"">" 4
! .el .IP "*<\f(CWmemcpy\fR>" 4
  .IX Item "*<memcpy>"
  .PD 0
  .ie n .IP "*<""strcat"">" 4
! .el .IP "*<\f(CWstrcat\fR>" 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strcpy"">" 4
! .el .IP "*<\f(CWstrcpy\fR>" 4
  .IX Item "*<strcpy>"
  .RE
  .RS 4
- .PD
  .Sp
  for cases where the buffers are known to overlap.
  .RE
! .IP "\fB\-Wno\-analyzer\-possible\-null\-argument\fR" 4
  .IX Item "-Wno-analyzer-possible-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly-NULL value is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non-NULL
  value.
  .Sp
! See  \s-1CWE\-690:\s0 Unchecked Return Value to \s-1NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-possible\-null\-dereference\fR" 4
  .IX Item "-Wno-analyzer-possible-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly-NULL value is dereferenced.
  .Sp
! See  \s-1CWE\-690:\s0 Unchecked Return Value to \s-1NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-null\-argument\fR" 4
  .IX Item "-Wno-analyzer-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be \s-1NULL\s0 is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non-NULL
  value.
  .Sp
! See  \s-1CWE\-476: NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-null\-dereference\fR" 4
  .IX Item "-Wno-analyzer-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be \s-1NULL\s0 is dereferenced.
  .Sp
! See  \s-1CWE\-476: NULL\s0 Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR" 4
  .IX Item "-Wno-analyzer-putenv-of-auto-var"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  call to \f(CW\*(C`putenv\*(C'\fR is passed a pointer to an automatic variable
! or an on-stack buffer.
  .Sp
! See  \s-1POS34\-C.\s0 Do not call \fIputenv()\fR with a pointer to an automatic variable as the argument (\f(CW\*(C`https://wiki.sei.cmu.edu/confluence/x/6NYxBQ\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-shift\-count\-negative\fR" 4
  .IX Item "-Wno-analyzer-shift-count-negative"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-negative\fR to disable it.
--- 10295,10378 ----
  involved, the direction of the access (read vs write), and, in some
  cases, the values of data involved.  This diagram can be suppressed
  using \fB\-fdiagnostics\-text\-art\-charset=none\fR.
! .IP \fB\-Wno\-analyzer\-overlapping\-buffers\fR 4
  .IX Item "-Wno-analyzer-overlapping-buffers"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-overlapping\-buffers\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which overlapping
! buffers are passed to an API for which the behavior on such buffers
  is undefined.
  .Sp
  Specifically, the diagnostic occurs on calls to the following functions
  .RS 4
  .ie n .IP "*<""memcpy"">" 4
! .el .IP *<\f(CWmemcpy\fR> 4
  .IX Item "*<memcpy>"
  .PD 0
  .ie n .IP "*<""strcat"">" 4
! .el .IP *<\f(CWstrcat\fR> 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strcpy"">" 4
! .el .IP *<\f(CWstrcpy\fR> 4
  .IX Item "*<strcpy>"
+ .PD
  .RE
  .RS 4
  .Sp
  for cases where the buffers are known to overlap.
  .RE
! .IP \fB\-Wno\-analyzer\-possible\-null\-argument\fR 4
  .IX Item "-Wno-analyzer-possible-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly\-NULL value is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non\-NULL
  value.
  .Sp
! See  CWE\-690: Unchecked Return Value to NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-possible\-null\-dereference\fR 4
  .IX Item "-Wno-analyzer-possible-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-possible\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! possibly\-NULL value is dereferenced.
  .Sp
! See  CWE\-690: Unchecked Return Value to NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-null\-argument\fR 4
  .IX Item "-Wno-analyzer-null-argument"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-argument\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be NULL is passed to a function argument marked
! with \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR as requiring a non\-NULL
  value.
  .Sp
! See  CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-null\-dereference\fR 4
  .IX Item "-Wno-analyzer-null-dereference"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-null\-dereference\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! value known to be NULL is dereferenced.
  .Sp
! See  CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR 4
  .IX Item "-Wno-analyzer-putenv-of-auto-var"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  call to \f(CW\*(C`putenv\*(C'\fR is passed a pointer to an automatic variable
! or an on\-stack buffer.
  .Sp
! See  POS34\-C. Do not call \fBputenv()\fR with a pointer to an automatic variable as the argument (\f(CW\*(C`https://wiki.sei.cmu.edu/confluence/x/6NYxBQ\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-shift\-count\-negative\fR 4
  .IX Item "-Wno-analyzer-shift-count-negative"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-negative\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10447,10470 ****
  This diagnostic warns for paths through the code in which a
  shift is attempted with a negative count.  It is analogous to
  the \fB\-Wshift\-count\-negative\fR diagnostic implemented in
! the C/\*(C+ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-shift\-count\-overflow\fR" 4
  .IX Item "-Wno-analyzer-shift-count-overflow"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-overflow\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  shift is attempted with a count greater than or equal to the
! precision of the operand's type.  It is analogous to
  the \fB\-Wshift\-count\-overflow\fR diagnostic implemented in
! the C/\*(C+ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR" 4
  .IX Item "-Wno-analyzer-stale-setjmp-buffer"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR to disable it.
--- 10380,10403 ----
  This diagnostic warns for paths through the code in which a
  shift is attempted with a negative count.  It is analogous to
  the \fB\-Wshift\-count\-negative\fR diagnostic implemented in
! the C/C++ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-shift\-count\-overflow\fR 4
  .IX Item "-Wno-analyzer-shift-count-overflow"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-shift\-count\-overflow\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
  shift is attempted with a count greater than or equal to the
! precision of the operand\*(Aqs type.  It is analogous to
  the \fB\-Wshift\-count\-overflow\fR diagnostic implemented in
! the C/C++ front ends, but is implemented based on analyzing
  interprocedural paths, rather than merely parsing the syntax tree.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR 4
  .IX Item "-Wno-analyzer-stale-setjmp-buffer"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR to disable it.
*************** location, it records the stack frame.  T
*** 10478,10502 ****
  when the function containing the \f(CW\*(C`setjmp\*(C'\fR call returns.  Attempting
  to rewind to it via \f(CW\*(C`longjmp\*(C'\fR would reference a stack frame that
  no longer exists, and likely lead to a crash (or worse).
! .IP "\fB\-Wno\-analyzer\-tainted\-allocation\-size\fR" 4
  .IX Item "-Wno-analyzer-tainted-allocation-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the size
  of an allocation without being sanitized, so that an attacker could
  inject an excessively large allocation and potentially cause a denial
  of service attack.
  .Sp
! See  \s-1CWE\-789:\s0 Memory Allocation with Excessive Size Value (\f(CW\*(C`https://cwe.mitre.org/data/definitions/789.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-assertion\fR" 4
  .IX Item "-Wno-analyzer-tainted-assertion"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-assertion\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as part of a
  condition without being first sanitized, and that condition guards a
  call to a function marked with attribute \f(CW\*(C`noreturn\*(C'\fR
  (such as the function \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR).  Such functions
--- 10411,10435 ----
  when the function containing the \f(CW\*(C`setjmp\*(C'\fR call returns.  Attempting
  to rewind to it via \f(CW\*(C`longjmp\*(C'\fR would reference a stack frame that
  no longer exists, and likely lead to a crash (or worse).
! .IP \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR 4
  .IX Item "-Wno-analyzer-tainted-allocation-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the size
  of an allocation without being sanitized, so that an attacker could
  inject an excessively large allocation and potentially cause a denial
  of service attack.
  .Sp
! See  CWE\-789: Memory Allocation with Excessive Size Value (\f(CW\*(C`https://cwe.mitre.org/data/definitions/789.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-assertion\fR 4
  .IX Item "-Wno-analyzer-tainted-assertion"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-assertion\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as part of a
  condition without being first sanitized, and that condition guards a
  call to a function marked with attribute \f(CW\*(C`noreturn\*(C'\fR
  (such as the function \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR).  Such functions
*************** assertion failure handlers.  For example
*** 10509,10537 ****
  .Sp
  In such cases:
  .RS 4
! .IP "*" 4
! when assertion-checking is enabled: an attacker could trigger
  a denial of service by injecting an assertion failure
! .IP "*" 4
! when assertion-checking is disabled, such as by defining \f(CW\*(C`NDEBUG\*(C'\fR,
  an attacker could inject data that subverts the process, since it
  presumably violates a precondition that is being assumed by the code.
  .RE
  .RS 4
  .Sp
! Note that when assertion-checking is disabled, the assertions are
  typically removed by the preprocessor before the analyzer has a chance
! to \*(L"see\*(R" them, so this diagnostic can only generate warnings on builds
! in which assertion-checking is enabled.
  .Sp
  For the purpose of this warning, any function marked with attribute
  \&\f(CW\*(C`noreturn\*(C'\fR is considered as a possible assertion failure
  handler, including \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR.  Note that these functions
! are sometimes removed by the optimizer before the analyzer \*(L"sees\*(R" them.
  Hence optimization should be disabled when attempting to trigger this
  diagnostic.
  .Sp
! See  \s-1CWE\-617:\s0 Reachable Assertion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/617.html\*(C'\fR).
  .Sp
  The warning can also report problematic constructions such as
  .Sp
--- 10442,10470 ----
  .Sp
  In such cases:
  .RS 4
! .IP * 4
! when assertion\-checking is enabled: an attacker could trigger
  a denial of service by injecting an assertion failure
! .IP * 4
! when assertion\-checking is disabled, such as by defining \f(CW\*(C`NDEBUG\*(C'\fR,
  an attacker could inject data that subverts the process, since it
  presumably violates a precondition that is being assumed by the code.
  .RE
  .RS 4
  .Sp
! Note that when assertion\-checking is disabled, the assertions are
  typically removed by the preprocessor before the analyzer has a chance
! to "see" them, so this diagnostic can only generate warnings on builds
! in which assertion\-checking is enabled.
  .Sp
  For the purpose of this warning, any function marked with attribute
  \&\f(CW\*(C`noreturn\*(C'\fR is considered as a possible assertion failure
  handler, including \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR.  Note that these functions
! are sometimes removed by the optimizer before the analyzer "sees" them.
  Hence optimization should be disabled when attempting to trigger this
  diagnostic.
  .Sp
! See  CWE\-617: Reachable Assertion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/617.html\*(C'\fR).
  .Sp
  The warning can also report problematic constructions such as
  .Sp
*************** The warning can also report problematic
*** 10548,10598 ****
  .Sp
  despite the above not being an assertion failure, strictly speaking.
  .RE
! .IP "\fB\-Wno\-analyzer\-tainted\-array\-index\fR" 4
  .IX Item "-Wno-analyzer-tainted-array-index"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-array\-index\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the index
  of an array access without being sanitized, so that an attacker
! could inject an out-of-bounds access.
  .Sp
! See  \s-1CWE\-129:\s0 Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-divisor\fR" 4
  .IX Item "-Wno-analyzer-tainted-divisor"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-divisor\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the divisor
  in a division or modulus operation without being sanitized, so that
! an attacker could inject a division-by-zero.
  .Sp
! See  \s-1CWE\-369:\s0 Divide By Zero (\f(CW\*(C`https://cwe.mitre.org/data/definitions/369.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-offset\fR" 4
  .IX Item "-Wno-analyzer-tainted-offset"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-offset\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as a pointer offset
! without being sanitized, so that an attacker could inject an out-of-bounds
  access.
  .Sp
! See  \s-1CWE\-823:\s0 Use of Out-of-range Pointer Offset (\f(CW\*(C`https://cwe.mitre.org/data/definitions/823.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-tainted\-size\fR" 4
  .IX Item "-Wno-analyzer-tainted-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker's control is used as the size of
  an operation such as \f(CW\*(C`memset\*(C'\fR without being sanitized, so that an
! attacker could inject an out-of-bounds access.
  .Sp
! See  \s-1CWE\-129:\s0 Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR" 4
  .IX Item "-Wno-analyzer-undefined-behavior-strtok"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR to disable it.
--- 10481,10531 ----
  .Sp
  despite the above not being an assertion failure, strictly speaking.
  .RE
! .IP \fB\-Wno\-analyzer\-tainted\-array\-index\fR 4
  .IX Item "-Wno-analyzer-tainted-array-index"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-array\-index\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the index
  of an array access without being sanitized, so that an attacker
! could inject an out\-of\-bounds access.
  .Sp
! See  CWE\-129: Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-divisor\fR 4
  .IX Item "-Wno-analyzer-tainted-divisor"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-divisor\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the divisor
  in a division or modulus operation without being sanitized, so that
! an attacker could inject a division\-by\-zero.
  .Sp
! See  CWE\-369: Divide By Zero (\f(CW\*(C`https://cwe.mitre.org/data/definitions/369.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-offset\fR 4
  .IX Item "-Wno-analyzer-tainted-offset"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-offset\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as a pointer offset
! without being sanitized, so that an attacker could inject an out\-of\-bounds
  access.
  .Sp
! See  CWE\-823: Use of Out\-of\-range Pointer Offset (\f(CW\*(C`https://cwe.mitre.org/data/definitions/823.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-tainted\-size\fR 4
  .IX Item "-Wno-analyzer-tainted-size"
  This warning requires \fB\-fanalyzer\fR which enables it;
  use \fB\-Wno\-analyzer\-tainted\-size\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a value
! that could be under an attacker\*(Aqs control is used as the size of
  an operation such as \f(CW\*(C`memset\*(C'\fR without being sanitized, so that an
! attacker could inject an out\-of\-bounds access.
  .Sp
! See  CWE\-129: Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR 4
  .IX Item "-Wno-analyzer-undefined-behavior-strtok"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10600,10618 ****
  This diagnostic warns for paths through the code in which a
  call is made to \f(CW\*(C`strtok\*(C'\fR with undefined behavior.
  .Sp
! Specifically, passing \s-1NULL\s0 as the first parameter for the initial
  call to \f(CW\*(C`strtok\*(C'\fR within a process has undefined behavior.
! .IP "\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR" 4
  .IX Item "-Wno-analyzer-unsafe-call-within-signal-handler"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! function known to be async-signal-unsafe (such as \f(CW\*(C`fprintf\*(C'\fR) is
  called from a signal handler.
  .Sp
! See  \s-1CWE\-479:\s0 Signal Handler Use of a Non-reentrant Function (\f(CW\*(C`https://cwe.mitre.org/data/definitions/479.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-use\-after\-free\fR" 4
  .IX Item "-Wno-analyzer-use-after-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-after\-free\fR to disable it.
--- 10533,10551 ----
  This diagnostic warns for paths through the code in which a
  call is made to \f(CW\*(C`strtok\*(C'\fR with undefined behavior.
  .Sp
! Specifically, passing NULL as the first parameter for the initial
  call to \f(CW\*(C`strtok\*(C'\fR within a process has undefined behavior.
! .IP \fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR 4
  .IX Item "-Wno-analyzer-unsafe-call-within-signal-handler"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR to disable it.
  .Sp
  This diagnostic warns for paths through the code in which a
! function known to be async\-signal\-unsafe (such as \f(CW\*(C`fprintf\*(C'\fR) is
  called from a signal handler.
  .Sp
! See  CWE\-479: Signal Handler Use of a Non\-reentrant Function (\f(CW\*(C`https://cwe.mitre.org/data/definitions/479.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-use\-after\-free\fR 4
  .IX Item "-Wno-analyzer-use-after-free"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-after\-free\fR to disable it.
*************** This diagnostic warns for paths through
*** 10621,10628 ****
  pointer is used after a deallocator is called on it: either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  \s-1CWE\-416:\s0 Use After Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/416.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR" 4
  .IX Item "-Wno-analyzer-use-of-pointer-in-stale-stack-frame"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR
--- 10554,10561 ----
  pointer is used after a deallocator is called on it: either \f(CW\*(C`free\*(C'\fR,
  or a deallocator referenced by attribute \f(CW\*(C`malloc\*(C'\fR.
  .Sp
! See  CWE\-416: Use After Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/416.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR 4
  .IX Item "-Wno-analyzer-use-of-pointer-in-stale-stack-frame"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR
*************** to disable it.
*** 10630,10636 ****
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is dereferenced that points to a variable in a stale stack frame.
! .IP "\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR" 4
  .IX Item "-Wno-analyzer-va-arg-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR
--- 10563,10569 ----
  .Sp
  This diagnostic warns for paths through the code in which a pointer
  is dereferenced that points to a variable in a stale stack frame.
! .IP \fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR 4
  .IX Item "-Wno-analyzer-va-arg-type-mismatch"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR
*************** the analyzer detects an attempt to use \
*** 10641,10648 ****
  passed to a variadic call, but uses a type that does not match that of
  the expression passed to the call.
  .Sp
! See  \s-1CWE\-686:\s0 Function Call With Incorrect Argument Type (\f(CW\*(C`https://cwe.mitre.org/data/definitions/686.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-va\-list\-exhausted\fR" 4
  .IX Item "-Wno-analyzer-va-list-exhausted"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-exhausted\fR
--- 10574,10581 ----
  passed to a variadic call, but uses a type that does not match that of
  the expression passed to the call.
  .Sp
! See  CWE\-686: Function Call With Incorrect Argument Type (\f(CW\*(C`https://cwe.mitre.org/data/definitions/686.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-va\-list\-exhausted\fR 4
  .IX Item "-Wno-analyzer-va-list-exhausted"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-exhausted\fR
*************** the analyzer detects an attempt to use \
*** 10653,10660 ****
  value passed to a variadic call, but all of the values in the
  \&\f(CW\*(C`va_list\*(C'\fR have already been consumed.
  .Sp
! See  \s-1CWE\-685:\s0 Function Call With Incorrect Number of Arguments (\f(CW\*(C`https://cwe.mitre.org/data/definitions/685.html\*(C'\fR).
! .IP "\fB\-Wno\-analyzer\-va\-list\-leak\fR" 4
  .IX Item "-Wno-analyzer-va-list-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-leak\fR
--- 10586,10593 ----
  value passed to a variadic call, but all of the values in the
  \&\f(CW\*(C`va_list\*(C'\fR have already been consumed.
  .Sp
! See  CWE\-685: Function Call With Incorrect Number of Arguments (\f(CW\*(C`https://cwe.mitre.org/data/definitions/685.html\*(C'\fR).
! .IP \fB\-Wno\-analyzer\-va\-list\-leak\fR 4
  .IX Item "-Wno-analyzer-va-list-leak"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-leak\fR
*************** to disable it.
*** 10663,10669 ****
  This diagnostic warns for interprocedural paths through the code for which
  the analyzer detects that \f(CW\*(C`va_start\*(C'\fR or \f(CW\*(C`va_copy\*(C'\fR has been called
  on a \f(CW\*(C`va_list\*(C'\fR without a corresponding call to \f(CW\*(C`va_end\*(C'\fR.
! .IP "\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR" 4
  .IX Item "-Wno-analyzer-va-list-use-after-va-end"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR
--- 10596,10602 ----
  This diagnostic warns for interprocedural paths through the code for which
  the analyzer detects that \f(CW\*(C`va_start\*(C'\fR or \f(CW\*(C`va_copy\*(C'\fR has been called
  on a \f(CW\*(C`va_list\*(C'\fR without a corresponding call to \f(CW\*(C`va_end\*(C'\fR.
! .IP \fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR 4
  .IX Item "-Wno-analyzer-va-list-use-after-va-end"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR
*************** This diagnostic warns for interprocedura
*** 10673,10679 ****
  the analyzer detects an attempt to use a \f(CW\*(C`va_list\*(C'\fR  after
  \&\f(CW\*(C`va_end\*(C'\fR has been called on it.
  \&\f(CW\*(C`va_list\*(C'\fR.
! .IP "\fB\-Wno\-analyzer\-write\-to\-const\fR" 4
  .IX Item "-Wno-analyzer-write-to-const"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-const\fR
--- 10606,10612 ----
  the analyzer detects an attempt to use a \f(CW\*(C`va_list\*(C'\fR  after
  \&\f(CW\*(C`va_end\*(C'\fR has been called on it.
  \&\f(CW\*(C`va_list\*(C'\fR.
! .IP \fB\-Wno\-analyzer\-write\-to\-const\fR 4
  .IX Item "-Wno-analyzer-write-to-const"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-const\fR
*************** This diagnostic warns for paths through
*** 10683,10689 ****
  detects an attempt to write through a pointer to a \f(CW\*(C`const\*(C'\fR object.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR" 4
  .IX Item "-Wno-analyzer-write-to-string-literal"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR
--- 10616,10622 ----
  detects an attempt to write through a pointer to a \f(CW\*(C`const\*(C'\fR object.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-write\-to\-string\-literal\fR 4
  .IX Item "-Wno-analyzer-write-to-string-literal"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR
*************** This diagnostic warns for paths through
*** 10693,10699 ****
  detects an attempt to write through a pointer to a string literal.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP "\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR" 4
  .IX Item "-Wno-analyzer-use-of-uninitialized-value"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR to disable it.
--- 10626,10632 ----
  detects an attempt to write through a pointer to a string literal.
  However, the analyzer does not prioritize detection of such paths, so
  false negatives are more likely relative to other warnings.
! .IP \fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR 4
  .IX Item "-Wno-analyzer-use-of-uninitialized-value"
  This warning requires \fB\-fanalyzer\fR, which enables it; use
  \&\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR to disable it.
*************** This warning requires \fB\-fanalyzer\fR,
*** 10701,10716 ****
  This diagnostic warns for paths through the code in which an uninitialized
  value is used.
  .Sp
! See  \s-1CWE\-457:\s0 Use of Uninitialized Variable (\f(CW\*(C`https://cwe.mitre.org/data/definitions/457.html\*(C'\fR).
  .PP
  The analyzer has hardcoded knowledge about the behavior of the following
! memory-management functions:
  .ie n .IP "*<""alloca"">" 4
! .el .IP "*<\f(CWalloca\fR>" 4
  .IX Item "*<alloca>"
  .PD 0
! .ie n .IP "*<The built-in functions ""_\|_builtin_alloc"",>" 4
! .el .IP "*<The built-in functions \f(CW_\|_builtin_alloc\fR,>" 4
  .IX Item "*<The built-in functions __builtin_alloc,>"
  .PD
  \&\f(CW\*(C`_\|_builtin_alloc_with_align\*(C'\fR, \f(CW@item\fR \f(CW\*(C`_\|_builtin_calloc\*(C'\fR,
--- 10634,10649 ----
  This diagnostic warns for paths through the code in which an uninitialized
  value is used.
  .Sp
! See  CWE\-457: Use of Uninitialized Variable (\f(CW\*(C`https://cwe.mitre.org/data/definitions/457.html\*(C'\fR).
  .PP
  The analyzer has hardcoded knowledge about the behavior of the following
! memory\-management functions:
  .ie n .IP "*<""alloca"">" 4
! .el .IP *<\f(CWalloca\fR> 4
  .IX Item "*<alloca>"
  .PD 0
! .ie n .IP "*<The built\-in functions ""_\|_builtin_alloc"",>" 4
! .el .IP "*<The built\-in functions \f(CW_\|_builtin_alloc\fR,>" 4
  .IX Item "*<The built-in functions __builtin_alloc,>"
  .PD
  \&\f(CW\*(C`_\|_builtin_alloc_with_align\*(C'\fR, \f(CW@item\fR \f(CW\*(C`_\|_builtin_calloc\*(C'\fR,
*************** memory-management functions:
*** 10719,10735 ****
  \&\f(CW\*(C`_\|_builtin_memset_chk\*(C'\fR, \f(CW\*(C`_\|_builtin_realloc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_stack_restore\*(C'\fR, and \f(CW\*(C`_\|_builtin_stack_save\*(C'\fR
  .ie n .IP "*<""calloc"">" 4
! .el .IP "*<\f(CWcalloc\fR>" 4
  .IX Item "*<calloc>"
  .PD 0
  .ie n .IP "*<""free"">" 4
! .el .IP "*<\f(CWfree\fR>" 4
  .IX Item "*<free>"
  .ie n .IP "*<""malloc"">" 4
! .el .IP "*<\f(CWmalloc\fR>" 4
  .IX Item "*<malloc>"
  .ie n .IP "*<""memset"">" 4
! .el .IP "*<\f(CWmemset\fR>" 4
  .IX Item "*<memset>"
  .ie n .IP "*<""operator delete"">" 4
  .el .IP "*<\f(CWoperator delete\fR>" 4
--- 10652,10668 ----
  \&\f(CW\*(C`_\|_builtin_memset_chk\*(C'\fR, \f(CW\*(C`_\|_builtin_realloc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_stack_restore\*(C'\fR, and \f(CW\*(C`_\|_builtin_stack_save\*(C'\fR
  .ie n .IP "*<""calloc"">" 4
! .el .IP *<\f(CWcalloc\fR> 4
  .IX Item "*<calloc>"
  .PD 0
  .ie n .IP "*<""free"">" 4
! .el .IP *<\f(CWfree\fR> 4
  .IX Item "*<free>"
  .ie n .IP "*<""malloc"">" 4
! .el .IP *<\f(CWmalloc\fR> 4
  .IX Item "*<malloc>"
  .ie n .IP "*<""memset"">" 4
! .el .IP *<\f(CWmemset\fR> 4
  .IX Item "*<memset>"
  .ie n .IP "*<""operator delete"">" 4
  .el .IP "*<\f(CWoperator delete\fR>" 4
*************** memory-management functions:
*** 10744,10784 ****
  .el .IP "*<\f(CWoperator new []\fR>" 4
  .IX Item "*<operator new []>"
  .ie n .IP "*<""realloc"">" 4
! .el .IP "*<\f(CWrealloc\fR>" 4
  .IX Item "*<realloc>"
  .ie n .IP "*<""strdup"">" 4
! .el .IP "*<\f(CWstrdup\fR>" 4
  .IX Item "*<strdup>"
  .ie n .IP "*<""strndup"">" 4
! .el .IP "*<\f(CWstrndup\fR>" 4
  .IX Item "*<strndup>"
  .PD
  .PP
  of the following functions for working with file descriptors:
  .ie n .IP "*<""open"">" 4
! .el .IP "*<\f(CWopen\fR>" 4
  .IX Item "*<open>"
  .PD 0
  .ie n .IP "*<""close"">" 4
! .el .IP "*<\f(CWclose\fR>" 4
  .IX Item "*<close>"
  .ie n .IP "*<""creat"">" 4
! .el .IP "*<\f(CWcreat\fR>" 4
  .IX Item "*<creat>"
  .ie n .IP "*<""dup"", ""dup2"" and ""dup3"">" 4
  .el .IP "*<\f(CWdup\fR, \f(CWdup2\fR and \f(CWdup3\fR>" 4
  .IX Item "*<dup, dup2 and dup3>"
  .ie n .IP "*<""isatty"">" 4
! .el .IP "*<\f(CWisatty\fR>" 4
  .IX Item "*<isatty>"
  .ie n .IP "*<""pipe"", and ""pipe2"">" 4
  .el .IP "*<\f(CWpipe\fR, and \f(CWpipe2\fR>" 4
  .IX Item "*<pipe, and pipe2>"
  .ie n .IP "*<""read"">" 4
! .el .IP "*<\f(CWread\fR>" 4
  .IX Item "*<read>"
  .ie n .IP "*<""write"">" 4
! .el .IP "*<\f(CWwrite\fR>" 4
  .IX Item "*<write>"
  .ie n .IP "*<""socket"", ""bind"", ""listen"", ""accept"", and ""connect"">" 4
  .el .IP "*<\f(CWsocket\fR, \f(CWbind\fR, \f(CWlisten\fR, \f(CWaccept\fR, and \f(CWconnect\fR>" 4
--- 10677,10717 ----
  .el .IP "*<\f(CWoperator new []\fR>" 4
  .IX Item "*<operator new []>"
  .ie n .IP "*<""realloc"">" 4
! .el .IP *<\f(CWrealloc\fR> 4
  .IX Item "*<realloc>"
  .ie n .IP "*<""strdup"">" 4
! .el .IP *<\f(CWstrdup\fR> 4
  .IX Item "*<strdup>"
  .ie n .IP "*<""strndup"">" 4
! .el .IP *<\f(CWstrndup\fR> 4
  .IX Item "*<strndup>"
  .PD
  .PP
  of the following functions for working with file descriptors:
  .ie n .IP "*<""open"">" 4
! .el .IP *<\f(CWopen\fR> 4
  .IX Item "*<open>"
  .PD 0
  .ie n .IP "*<""close"">" 4
! .el .IP *<\f(CWclose\fR> 4
  .IX Item "*<close>"
  .ie n .IP "*<""creat"">" 4
! .el .IP *<\f(CWcreat\fR> 4
  .IX Item "*<creat>"
  .ie n .IP "*<""dup"", ""dup2"" and ""dup3"">" 4
  .el .IP "*<\f(CWdup\fR, \f(CWdup2\fR and \f(CWdup3\fR>" 4
  .IX Item "*<dup, dup2 and dup3>"
  .ie n .IP "*<""isatty"">" 4
! .el .IP *<\f(CWisatty\fR> 4
  .IX Item "*<isatty>"
  .ie n .IP "*<""pipe"", and ""pipe2"">" 4
  .el .IP "*<\f(CWpipe\fR, and \f(CWpipe2\fR>" 4
  .IX Item "*<pipe, and pipe2>"
  .ie n .IP "*<""read"">" 4
! .el .IP *<\f(CWread\fR> 4
  .IX Item "*<read>"
  .ie n .IP "*<""write"">" 4
! .el .IP *<\f(CWwrite\fR> 4
  .IX Item "*<write>"
  .ie n .IP "*<""socket"", ""bind"", ""listen"", ""accept"", and ""connect"">" 4
  .el .IP "*<\f(CWsocket\fR, \f(CWbind\fR, \f(CWlisten\fR, \f(CWaccept\fR, and \f(CWconnect\fR>" 4
*************** of the following functions for working w
*** 10786,10793 ****
  .PD
  .PP
  of the following functions for working with \f(CW\*(C`<stdio.h>\*(C'\fR streams:
! .ie n .IP "*<The built-in functions ""_\|_builtin_fprintf"",>" 4
! .el .IP "*<The built-in functions \f(CW_\|_builtin_fprintf\fR,>" 4
  .IX Item "*<The built-in functions __builtin_fprintf,>"
  \&\f(CW\*(C`_\|_builtin_fprintf_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_fputc_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputs\*(C'\fR,
--- 10719,10726 ----
  .PD
  .PP
  of the following functions for working with \f(CW\*(C`<stdio.h>\*(C'\fR streams:
! .ie n .IP "*<The built\-in functions ""_\|_builtin_fprintf"",>" 4
! .el .IP "*<The built\-in functions \f(CW_\|_builtin_fprintf\fR,>" 4
  .IX Item "*<The built-in functions __builtin_fprintf,>"
  \&\f(CW\*(C`_\|_builtin_fprintf_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputc\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_fputc_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_fputs\*(C'\fR,
*************** of the following functions for working w
*** 10799,10888 ****
  \&\f(CW\*(C`_\|_builtin_puts_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_vfprintf\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_vprintf\*(C'\fR
  .ie n .IP "*<""fopen"">" 4
! .el .IP "*<\f(CWfopen\fR>" 4
  .IX Item "*<fopen>"
  .PD 0
  .ie n .IP "*<""fclose"">" 4
! .el .IP "*<\f(CWfclose\fR>" 4
  .IX Item "*<fclose>"
  .ie n .IP "*<""ferror"">" 4
! .el .IP "*<\f(CWferror\fR>" 4
  .IX Item "*<ferror>"
  .ie n .IP "*<""fgets"">" 4
! .el .IP "*<\f(CWfgets\fR>" 4
  .IX Item "*<fgets>"
  .ie n .IP "*<""fgets_unlocked"">" 4
! .el .IP "*<\f(CWfgets_unlocked\fR>" 4
  .IX Item "*<fgets_unlocked>"
  .ie n .IP "*<""fileno"">" 4
! .el .IP "*<\f(CWfileno\fR>" 4
  .IX Item "*<fileno>"
  .ie n .IP "*<""fread"">" 4
! .el .IP "*<\f(CWfread\fR>" 4
  .IX Item "*<fread>"
  .ie n .IP "*<""getc"">" 4
! .el .IP "*<\f(CWgetc\fR>" 4
  .IX Item "*<getc>"
  .ie n .IP "*<""getchar"">" 4
! .el .IP "*<\f(CWgetchar\fR>" 4
  .IX Item "*<getchar>"
  .ie n .IP "*<""fprintf"">" 4
! .el .IP "*<\f(CWfprintf\fR>" 4
  .IX Item "*<fprintf>"
  .ie n .IP "*<""printf"">" 4
! .el .IP "*<\f(CWprintf\fR>" 4
  .IX Item "*<printf>"
  .ie n .IP "*<""fwrite"">" 4
! .el .IP "*<\f(CWfwrite\fR>" 4
  .IX Item "*<fwrite>"
  .PD
  .PP
  and of the following functions:
! .ie n .IP "*<The built-in functions ""_\|_builtin_expect"",>" 4
! .el .IP "*<The built-in functions \f(CW_\|_builtin_expect\fR,>" 4
  .IX Item "*<The built-in functions __builtin_expect,>"
  \&\f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR, \f(CW\*(C`_\|_builtin_strchr\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strcpy\*(C'\fR, \f(CW\*(C`_\|_builtin_strcpy_chk\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strlen\*(C'\fR, \f(CW\*(C`_\|_builtin_va_copy\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_va_start\*(C'\fR
! .ie n .IP "*<The \s-1GNU\s0 extensions ""error"" and ""error_at_line"">" 4
! .el .IP "*<The \s-1GNU\s0 extensions \f(CWerror\fR and \f(CWerror_at_line\fR>" 4
  .IX Item "*<The GNU extensions error and error_at_line>"
  .PD 0
  .ie n .IP "*<""getpass"">" 4
! .el .IP "*<\f(CWgetpass\fR>" 4
  .IX Item "*<getpass>"
  .ie n .IP "*<""longjmp"">" 4
! .el .IP "*<\f(CWlongjmp\fR>" 4
  .IX Item "*<longjmp>"
  .ie n .IP "*<""putenv"">" 4
! .el .IP "*<\f(CWputenv\fR>" 4
  .IX Item "*<putenv>"
  .ie n .IP "*<""setjmp"">" 4
! .el .IP "*<\f(CWsetjmp\fR>" 4
  .IX Item "*<setjmp>"
  .ie n .IP "*<""siglongjmp"">" 4
! .el .IP "*<\f(CWsiglongjmp\fR>" 4
  .IX Item "*<siglongjmp>"
  .ie n .IP "*<""signal"">" 4
! .el .IP "*<\f(CWsignal\fR>" 4
  .IX Item "*<signal>"
  .ie n .IP "*<""sigsetjmp"">" 4
! .el .IP "*<\f(CWsigsetjmp\fR>" 4
  .IX Item "*<sigsetjmp>"
  .ie n .IP "*<""strcat"">" 4
! .el .IP "*<\f(CWstrcat\fR>" 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strchr"">" 4
! .el .IP "*<\f(CWstrchr\fR>" 4
  .IX Item "*<strchr>"
  .ie n .IP "*<""strlen"">" 4
! .el .IP "*<\f(CWstrlen\fR>" 4
  .IX Item "*<strlen>"
  .PD
  .PP
  In addition, various functions with an \f(CW\*(C`_\|_analyzer_\*(C'\fR prefix have
! special meaning to the analyzer, described in the \s-1GCC\s0 Internals manual.
  .PP
  Pertinent parameters for controlling the exploration are:
  .IP "*<\fB\-\-param analyzer\-bb\-explosion\-factor=\fR\fIvalue\fR>" 4
--- 10732,10821 ----
  \&\f(CW\*(C`_\|_builtin_puts_unlocked\*(C'\fR, \f(CW\*(C`_\|_builtin_vfprintf\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_vprintf\*(C'\fR
  .ie n .IP "*<""fopen"">" 4
! .el .IP *<\f(CWfopen\fR> 4
  .IX Item "*<fopen>"
  .PD 0
  .ie n .IP "*<""fclose"">" 4
! .el .IP *<\f(CWfclose\fR> 4
  .IX Item "*<fclose>"
  .ie n .IP "*<""ferror"">" 4
! .el .IP *<\f(CWferror\fR> 4
  .IX Item "*<ferror>"
  .ie n .IP "*<""fgets"">" 4
! .el .IP *<\f(CWfgets\fR> 4
  .IX Item "*<fgets>"
  .ie n .IP "*<""fgets_unlocked"">" 4
! .el .IP *<\f(CWfgets_unlocked\fR> 4
  .IX Item "*<fgets_unlocked>"
  .ie n .IP "*<""fileno"">" 4
! .el .IP *<\f(CWfileno\fR> 4
  .IX Item "*<fileno>"
  .ie n .IP "*<""fread"">" 4
! .el .IP *<\f(CWfread\fR> 4
  .IX Item "*<fread>"
  .ie n .IP "*<""getc"">" 4
! .el .IP *<\f(CWgetc\fR> 4
  .IX Item "*<getc>"
  .ie n .IP "*<""getchar"">" 4
! .el .IP *<\f(CWgetchar\fR> 4
  .IX Item "*<getchar>"
  .ie n .IP "*<""fprintf"">" 4
! .el .IP *<\f(CWfprintf\fR> 4
  .IX Item "*<fprintf>"
  .ie n .IP "*<""printf"">" 4
! .el .IP *<\f(CWprintf\fR> 4
  .IX Item "*<printf>"
  .ie n .IP "*<""fwrite"">" 4
! .el .IP *<\f(CWfwrite\fR> 4
  .IX Item "*<fwrite>"
  .PD
  .PP
  and of the following functions:
! .ie n .IP "*<The built\-in functions ""_\|_builtin_expect"",>" 4
! .el .IP "*<The built\-in functions \f(CW_\|_builtin_expect\fR,>" 4
  .IX Item "*<The built-in functions __builtin_expect,>"
  \&\f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR, \f(CW\*(C`_\|_builtin_strchr\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strcpy\*(C'\fR, \f(CW\*(C`_\|_builtin_strcpy_chk\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_strlen\*(C'\fR, \f(CW\*(C`_\|_builtin_va_copy\*(C'\fR, and
  \&\f(CW\*(C`_\|_builtin_va_start\*(C'\fR
! .ie n .IP "*<The GNU extensions ""error"" and ""error_at_line"">" 4
! .el .IP "*<The GNU extensions \f(CWerror\fR and \f(CWerror_at_line\fR>" 4
  .IX Item "*<The GNU extensions error and error_at_line>"
  .PD 0
  .ie n .IP "*<""getpass"">" 4
! .el .IP *<\f(CWgetpass\fR> 4
  .IX Item "*<getpass>"
  .ie n .IP "*<""longjmp"">" 4
! .el .IP *<\f(CWlongjmp\fR> 4
  .IX Item "*<longjmp>"
  .ie n .IP "*<""putenv"">" 4
! .el .IP *<\f(CWputenv\fR> 4
  .IX Item "*<putenv>"
  .ie n .IP "*<""setjmp"">" 4
! .el .IP *<\f(CWsetjmp\fR> 4
  .IX Item "*<setjmp>"
  .ie n .IP "*<""siglongjmp"">" 4
! .el .IP *<\f(CWsiglongjmp\fR> 4
  .IX Item "*<siglongjmp>"
  .ie n .IP "*<""signal"">" 4
! .el .IP *<\f(CWsignal\fR> 4
  .IX Item "*<signal>"
  .ie n .IP "*<""sigsetjmp"">" 4
! .el .IP *<\f(CWsigsetjmp\fR> 4
  .IX Item "*<sigsetjmp>"
  .ie n .IP "*<""strcat"">" 4
! .el .IP *<\f(CWstrcat\fR> 4
  .IX Item "*<strcat>"
  .ie n .IP "*<""strchr"">" 4
! .el .IP *<\f(CWstrchr\fR> 4
  .IX Item "*<strchr>"
  .ie n .IP "*<""strlen"">" 4
! .el .IP *<\f(CWstrlen\fR> 4
  .IX Item "*<strlen>"
  .PD
  .PP
  In addition, various functions with an \f(CW\*(C`_\|_analyzer_\*(C'\fR prefix have
! special meaning to the analyzer, described in the GCC Internals manual.
  .PP
  Pertinent parameters for controlling the exploration are:
  .IP "*<\fB\-\-param analyzer\-bb\-explosion\-factor=\fR\fIvalue\fR>" 4
*************** Pertinent parameters for controlling the
*** 10897,10903 ****
  .PD
  .PP
  The following options control the analyzer.
! .IP "\fB\-fanalyzer\-call\-summaries\fR" 4
  .IX Item "-fanalyzer-call-summaries"
  Simplify interprocedural analysis by computing the effect of certain calls,
  rather than exploring all paths through the function from callsite to each
--- 10830,10836 ----
  .PD
  .PP
  The following options control the analyzer.
! .IP \fB\-fanalyzer\-call\-summaries\fR 4
  .IX Item "-fanalyzer-call-summaries"
  Simplify interprocedural analysis by computing the effect of certain calls,
  rather than exploring all paths through the function from callsite to each
*************** possible return.
*** 10906,10919 ****
  If enabled, call summaries are only used for functions with more than one
  call site, and that are sufficiently complicated (as per
  \&\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR).
! .IP "\fB\-fanalyzer\-checker=\fR\fIname\fR" 4
  .IX Item "-fanalyzer-checker=name"
  Restrict the analyzer to run just the named checker, and enable it.
! .IP "\fB\-fanalyzer\-debug\-text\-art\-headings\fR" 4
  .IX Item "-fanalyzer-debug-text-art-headings"
  This option is intended for analyzer developers.  If enabled,
  the analyzer will add extra annotations to any diagrams it generates.
! .IP "\fB\-fno\-analyzer\-feasibility\fR" 4
  .IX Item "-fno-analyzer-feasibility"
  This option is intended for analyzer developers.
  .Sp
--- 10839,10852 ----
  If enabled, call summaries are only used for functions with more than one
  call site, and that are sufficiently complicated (as per
  \&\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR).
! .IP \fB\-fanalyzer\-checker=\fR\fIname\fR 4
  .IX Item "-fanalyzer-checker=name"
  Restrict the analyzer to run just the named checker, and enable it.
! .IP \fB\-fanalyzer\-debug\-text\-art\-headings\fR 4
  .IX Item "-fanalyzer-debug-text-art-headings"
  This option is intended for analyzer developers.  If enabled,
  the analyzer will add extra annotations to any diagrams it generates.
! .IP \fB\-fno\-analyzer\-feasibility\fR 4
  .IX Item "-fno-analyzer-feasibility"
  This option is intended for analyzer developers.
  .Sp
*************** for each diagnostic it emits: that the c
*** 10922,11002 ****
  exclusive.  Diagnostics for which no feasible path can be found are rejected.
  This filtering can be suppressed with \fB\-fno\-analyzer\-feasibility\fR, for
  debugging issues in this code.
! .IP "\fB\-fanalyzer\-fine\-grained\fR" 4
  .IX Item "-fanalyzer-fine-grained"
  This option is intended for analyzer developers.
  .Sp
! Internally the analyzer builds an \*(L"exploded graph\*(R" that combines
  control flow graphs with data flow information.
  .Sp
  By default, an edge in this graph can contain the effects of a run
  of multiple statements within a basic block.  With
  \&\fB\-fanalyzer\-fine\-grained\fR, each statement gets its own edge.
! .IP "\fB\-fanalyzer\-show\-duplicate\-count\fR" 4
  .IX Item "-fanalyzer-show-duplicate-count"
  This option is intended for analyzer developers: if multiple diagnostics
  have been detected as being duplicates of each other, it emits a note when
  reporting the best diagnostic, giving the number of additional diagnostics
  that were suppressed by the deduplication logic.
! .IP "\fB\-fanalyzer\-show\-events\-in\-system\-headers\fR" 4
  .IX Item "-fanalyzer-show-events-in-system-headers"
  By default the analyzer emits simplified diagnostics paths by hiding
  events fully located within a system header.
  With \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR such
  events are no longer suppressed.
! .IP "\fB\-fno\-analyzer\-state\-merge\fR" 4
  .IX Item "-fno-analyzer-state-merge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by merging
  sufficiently similar states at each program point as it builds its
! \&\*(L"exploded graph\*(R".  With \fB\-fno\-analyzer\-state\-merge\fR this
! merging can be suppressed, for debugging state-handling issues.
! .IP "\fB\-fno\-analyzer\-state\-purge\fR" 4
  .IX Item "-fno-analyzer-state-purge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by purging
  aspects of state at a program point that appear to no longer be relevant
! e.g. the values of locals that aren't accessed later in the function
! and which aren't relevant to leak analysis.
  .Sp
  With \fB\-fno\-analyzer\-state\-purge\fR this purging of state can
! be suppressed, for debugging state-handling issues.
! .IP "\fB\-fno\-analyzer\-suppress\-followups\fR" 4
  .IX Item "-fno-analyzer-suppress-followups"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer will stop exploring an execution path after
  encountering certain diagnostics, in order to avoid potentially issuing a
! cascade of follow-up diagnostics.
  .Sp
  The diagnostics that terminate analysis along a path are:
  .RS 4
! .IP "*<\fB\-Wanalyzer\-null\-argument\fR>" 4
  .IX Item "*<-Wanalyzer-null-argument>"
  .PD 0
! .IP "*<\fB\-Wanalyzer\-null\-dereference\fR>" 4
  .IX Item "*<-Wanalyzer-null-dereference>"
! .IP "*<\fB\-Wanalyzer\-use\-after\-free\fR>" 4
  .IX Item "*<-Wanalyzer-use-after-free>"
! .IP "*<\fB\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR>" 4
  .IX Item "*<-Wanalyzer-use-of-pointer-in-stale-stack-frame>"
! .IP "*<\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR>" 4
  .IX Item "*<-Wanalyzer-use-of-uninitialized-value>"
  .RE
  .RS 4
- .PD
  .Sp
  With \fB\-fno\-analyzer\-suppress\-followups\fR the analyzer will
  continue to explore such paths even after such diagnostics, which may
  be helpful for debugging issues in the analyzer, or for microbenchmarks
  for detecting undefined behavior.
  .RE
! .IP "\fB\-fanalyzer\-transitivity\fR" 4
  .IX Item "-fanalyzer-transitivity"
  This option enables transitivity of constraints within the analyzer.
! .IP "\fB\-fno\-analyzer\-undo\-inlining\fR" 4
  .IX Item "-fno-analyzer-undo-inlining"
  This option is intended for analyzer developers.
  .Sp
--- 10855,10935 ----
  exclusive.  Diagnostics for which no feasible path can be found are rejected.
  This filtering can be suppressed with \fB\-fno\-analyzer\-feasibility\fR, for
  debugging issues in this code.
! .IP \fB\-fanalyzer\-fine\-grained\fR 4
  .IX Item "-fanalyzer-fine-grained"
  This option is intended for analyzer developers.
  .Sp
! Internally the analyzer builds an "exploded graph" that combines
  control flow graphs with data flow information.
  .Sp
  By default, an edge in this graph can contain the effects of a run
  of multiple statements within a basic block.  With
  \&\fB\-fanalyzer\-fine\-grained\fR, each statement gets its own edge.
! .IP \fB\-fanalyzer\-show\-duplicate\-count\fR 4
  .IX Item "-fanalyzer-show-duplicate-count"
  This option is intended for analyzer developers: if multiple diagnostics
  have been detected as being duplicates of each other, it emits a note when
  reporting the best diagnostic, giving the number of additional diagnostics
  that were suppressed by the deduplication logic.
! .IP \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR 4
  .IX Item "-fanalyzer-show-events-in-system-headers"
  By default the analyzer emits simplified diagnostics paths by hiding
  events fully located within a system header.
  With \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR such
  events are no longer suppressed.
! .IP \fB\-fno\-analyzer\-state\-merge\fR 4
  .IX Item "-fno-analyzer-state-merge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by merging
  sufficiently similar states at each program point as it builds its
! "exploded graph".  With \fB\-fno\-analyzer\-state\-merge\fR this
! merging can be suppressed, for debugging state\-handling issues.
! .IP \fB\-fno\-analyzer\-state\-purge\fR 4
  .IX Item "-fno-analyzer-state-purge"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer attempts to simplify analysis by purging
  aspects of state at a program point that appear to no longer be relevant
! e.g. the values of locals that aren\*(Aqt accessed later in the function
! and which aren\*(Aqt relevant to leak analysis.
  .Sp
  With \fB\-fno\-analyzer\-state\-purge\fR this purging of state can
! be suppressed, for debugging state\-handling issues.
! .IP \fB\-fno\-analyzer\-suppress\-followups\fR 4
  .IX Item "-fno-analyzer-suppress-followups"
  This option is intended for analyzer developers.
  .Sp
  By default the analyzer will stop exploring an execution path after
  encountering certain diagnostics, in order to avoid potentially issuing a
! cascade of follow\-up diagnostics.
  .Sp
  The diagnostics that terminate analysis along a path are:
  .RS 4
! .IP *<\fB\-Wanalyzer\-null\-argument\fR> 4
  .IX Item "*<-Wanalyzer-null-argument>"
  .PD 0
! .IP *<\fB\-Wanalyzer\-null\-dereference\fR> 4
  .IX Item "*<-Wanalyzer-null-dereference>"
! .IP *<\fB\-Wanalyzer\-use\-after\-free\fR> 4
  .IX Item "*<-Wanalyzer-use-after-free>"
! .IP *<\fB\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR> 4
  .IX Item "*<-Wanalyzer-use-of-pointer-in-stale-stack-frame>"
! .IP *<\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR> 4
  .IX Item "*<-Wanalyzer-use-of-uninitialized-value>"
+ .PD
  .RE
  .RS 4
  .Sp
  With \fB\-fno\-analyzer\-suppress\-followups\fR the analyzer will
  continue to explore such paths even after such diagnostics, which may
  be helpful for debugging issues in the analyzer, or for microbenchmarks
  for detecting undefined behavior.
  .RE
! .IP \fB\-fanalyzer\-transitivity\fR 4
  .IX Item "-fanalyzer-transitivity"
  This option enables transitivity of constraints within the analyzer.
! .IP \fB\-fno\-analyzer\-undo\-inlining\fR 4
  .IX Item "-fno-analyzer-undo-inlining"
  This option is intended for analyzer developers.
  .Sp
*************** This option is intended for analyzer dev
*** 11004,11010 ****
  tools, and some optimizations have already been applied to the code.  In
  particular function inlining may have occurred, leading to the
  interprocedural execution paths emitted by the analyzer containing
! function frames that don't correspond to those in the original source
  code.
  .Sp
  By default the analyzer attempts to reconstruct the original function
--- 10937,10943 ----
  tools, and some optimizations have already been applied to the code.  In
  particular function inlining may have occurred, leading to the
  interprocedural execution paths emitted by the analyzer containing
! function frames that don\*(Aqt correspond to those in the original source
  code.
  .Sp
  By default the analyzer attempts to reconstruct the original function
*************** frames, and to emit events showing the i
*** 11013,11140 ****
  With \fB\-fno\-analyzer\-undo\-inlining\fR this attempt to reconstruct
  the original frame information can be disabled, which may be of help
  when debugging issues in the analyzer.
! .IP "\fB\-fanalyzer\-verbose\-edges\fR" 4
  .IX Item "-fanalyzer-verbose-edges"
  This option is intended for analyzer developers.  It enables more
! verbose, lower-level detail in the descriptions of control flow
  within diagnostic paths.
! .IP "\fB\-fanalyzer\-verbose\-state\-changes\fR" 4
  .IX Item "-fanalyzer-verbose-state-changes"
  This option is intended for analyzer developers.  It enables more
! verbose, lower-level detail in the descriptions of events relating
  to state machines within diagnostic paths.
! .IP "\fB\-fanalyzer\-verbosity=\fR\fIlevel\fR" 4
  .IX Item "-fanalyzer-verbosity=level"
  This option controls the complexity of the control flow paths that are
  emitted for analyzer diagnostics.
  .Sp
  The \fIlevel\fR can be one of:
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  At this level, interprocedural call and return events are displayed,
! along with the most pertinent state-change events relating to
  a diagnostic.  For example, for a double\-\f(CW\*(C`free\*(C'\fR diagnostic,
  both calls to \f(CW\*(C`free\*(C'\fR will be shown.
! .IP "\fB1\fR" 4
  .IX Item "1"
  As per the previous level, but also show events for the entry
  to each function.
! .IP "\fB2\fR" 4
  .IX Item "2"
  As per the previous level, but also show events relating to
  control flow that are significant to triggering the issue
! (e.g. \*(L"true path taken\*(R" at a conditional).
  .Sp
  This level is the default.
! .IP "\fB3\fR" 4
  .IX Item "3"
  As per the previous level, but show all control flow events, not
  just significant ones.
! .IP "\fB4\fR" 4
  .IX Item "4"
  This level is intended for analyzer developers; it adds various
  other events intended for debugging the analyzer.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-analyzer\fR" 4
  .IX Item "-fdump-analyzer"
  Dump internal details about what the analyzer is doing to
! \&\fI\fIfile\fI.analyzer.txt\fR.
  \&\fB\-fdump\-analyzer\-stderr\fR overrides this option.
! .IP "\fB\-fdump\-analyzer\-stderr\fR" 4
  .IX Item "-fdump-analyzer-stderr"
  Dump internal details about what the analyzer is doing to stderr.
  This option overrides \fB\-fdump\-analyzer\fR.
! .IP "\fB\-fdump\-analyzer\-callgraph\fR" 4
  .IX Item "-fdump-analyzer-callgraph"
  Dump a representation of the call graph suitable for viewing with
! GraphViz to \fI\fIfile\fI.callgraph.dot\fR.
! .IP "\fB\-fdump\-analyzer\-exploded\-graph\fR" 4
  .IX Item "-fdump-analyzer-exploded-graph"
! Dump a representation of the \*(L"exploded graph\*(R" suitable for viewing with
! GraphViz to \fI\fIfile\fI.eg.dot\fR.
! Nodes are color-coded based on state-machine states to emphasize
  state changes.
! .IP "\fB\-fdump\-analyzer\-exploded\-nodes\fR" 4
  .IX Item "-fdump-analyzer-exploded-nodes"
! Emit diagnostics showing where nodes in the \*(L"exploded graph\*(R" are
  in relation to the program source.
! .IP "\fB\-fdump\-analyzer\-exploded\-nodes\-2\fR" 4
  .IX Item "-fdump-analyzer-exploded-nodes-2"
! Dump a textual representation of the \*(L"exploded graph\*(R" to
! \&\fI\fIfile\fI.eg.txt\fR.
! .IP "\fB\-fdump\-analyzer\-exploded\-nodes\-3\fR" 4
  .IX Item "-fdump-analyzer-exploded-nodes-3"
! Dump a textual representation of the \*(L"exploded graph\*(R" to
! one dump file per node, to \fI\fIfile\fI.eg\-\fIid\fI.txt\fR.
  This is typically a large number of dump files.
! .IP "\fB\-fdump\-analyzer\-exploded\-paths\fR" 4
  .IX Item "-fdump-analyzer-exploded-paths"
! Dump a textual representation of the \*(L"exploded path\*(R" for each
! diagnostic to \fI\fIfile\fI.\fIidx\fI.\fIkind\fI.epath.txt\fR.
! .IP "\fB\-fdump\-analyzer\-feasibility\fR" 4
  .IX Item "-fdump-analyzer-feasibility"
! Dump internal details about the analyzer's search for feasible paths.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fI\fIfile\fI.*.fg.dot\fR,
! \&\fI\fIfile\fI.*.tg.dot\fR, and \fI\fIfile\fI.*.fpath.txt\fR.
! .IP "\fB\-fdump\-analyzer\-infinite\-loop\fR" 4
  .IX Item "-fdump-analyzer-infinite-loop"
! Dump internal details about the analyzer's search for infinite loops.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fI\fIfile\fI.*.infinite\-loop.dot\fR.
! .IP "\fB\-fdump\-analyzer\-json\fR" 4
  .IX Item "-fdump-analyzer-json"
! Dump a compressed \s-1JSON\s0 representation of analyzer internals to
! \&\fI\fIfile\fI.analyzer.json.gz\fR.  The precise format is subject
  to change.
! .IP "\fB\-fdump\-analyzer\-state\-purge\fR" 4
  .IX Item "-fdump-analyzer-state-purge"
  As per \fB\-fdump\-analyzer\-supergraph\fR, dump a representation of the
! \&\*(L"supergraph\*(R" suitable for viewing with GraphViz, but annotate the
  graph with information on what state will be purged at each node.
! The graph is written to \fI\fIfile\fI.state\-purge.dot\fR.
! .IP "\fB\-fdump\-analyzer\-supergraph\fR" 4
  .IX Item "-fdump-analyzer-supergraph"
! Dump representations of the \*(L"supergraph\*(R" suitable for viewing with
! GraphViz to \fI\fIfile\fI.supergraph.dot\fR and to
! \&\fI\fIfile\fI.supergraph\-eg.dot\fR.  These show all of the
  control flow graphs in the program, with interprocedural edges for
  calls and returns.  The second dump contains annotations showing nodes
! in the \*(L"exploded graph\*(R" and diagnostics associated with them.
! .IP "\fB\-fdump\-analyzer\-untracked\fR" 4
  .IX Item "-fdump-analyzer-untracked"
  Emit custom warnings with internal details intended for analyzer developers.
  .SS "Options for Debugging Your Program"
  .IX Subsection "Options for Debugging Your Program"
! To tell \s-1GCC\s0 to emit extra information for use by a debugger, in almost 
  all cases you need only to add \fB\-g\fR to your other options.  Some debug
! formats can co-exist (like \s-1DWARF\s0 with \s-1CTF\s0) when each of them is enabled
  explicitly by adding the respective command line option to your other options.
  .PP
! \&\s-1GCC\s0 allows you to use \fB\-g\fR with
  \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
  be surprising: some variables you declared may not exist
  at all; flow of control may briefly move where you did not expect it;
--- 10946,11073 ----
  With \fB\-fno\-analyzer\-undo\-inlining\fR this attempt to reconstruct
  the original frame information can be disabled, which may be of help
  when debugging issues in the analyzer.
! .IP \fB\-fanalyzer\-verbose\-edges\fR 4
  .IX Item "-fanalyzer-verbose-edges"
  This option is intended for analyzer developers.  It enables more
! verbose, lower\-level detail in the descriptions of control flow
  within diagnostic paths.
! .IP \fB\-fanalyzer\-verbose\-state\-changes\fR 4
  .IX Item "-fanalyzer-verbose-state-changes"
  This option is intended for analyzer developers.  It enables more
! verbose, lower\-level detail in the descriptions of events relating
  to state machines within diagnostic paths.
! .IP \fB\-fanalyzer\-verbosity=\fR\fIlevel\fR 4
  .IX Item "-fanalyzer-verbosity=level"
  This option controls the complexity of the control flow paths that are
  emitted for analyzer diagnostics.
  .Sp
  The \fIlevel\fR can be one of:
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  At this level, interprocedural call and return events are displayed,
! along with the most pertinent state\-change events relating to
  a diagnostic.  For example, for a double\-\f(CW\*(C`free\*(C'\fR diagnostic,
  both calls to \f(CW\*(C`free\*(C'\fR will be shown.
! .IP \fB1\fR 4
  .IX Item "1"
  As per the previous level, but also show events for the entry
  to each function.
! .IP \fB2\fR 4
  .IX Item "2"
  As per the previous level, but also show events relating to
  control flow that are significant to triggering the issue
! (e.g. "true path taken" at a conditional).
  .Sp
  This level is the default.
! .IP \fB3\fR 4
  .IX Item "3"
  As per the previous level, but show all control flow events, not
  just significant ones.
! .IP \fB4\fR 4
  .IX Item "4"
  This level is intended for analyzer developers; it adds various
  other events intended for debugging the analyzer.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-analyzer\fR 4
  .IX Item "-fdump-analyzer"
  Dump internal details about what the analyzer is doing to
! \&\fIfile.analyzer.txt\fR.
  \&\fB\-fdump\-analyzer\-stderr\fR overrides this option.
! .IP \fB\-fdump\-analyzer\-stderr\fR 4
  .IX Item "-fdump-analyzer-stderr"
  Dump internal details about what the analyzer is doing to stderr.
  This option overrides \fB\-fdump\-analyzer\fR.
! .IP \fB\-fdump\-analyzer\-callgraph\fR 4
  .IX Item "-fdump-analyzer-callgraph"
  Dump a representation of the call graph suitable for viewing with
! GraphViz to \fIfile.callgraph.dot\fR.
! .IP \fB\-fdump\-analyzer\-exploded\-graph\fR 4
  .IX Item "-fdump-analyzer-exploded-graph"
! Dump a representation of the "exploded graph" suitable for viewing with
! GraphViz to \fIfile.eg.dot\fR.
! Nodes are color\-coded based on state\-machine states to emphasize
  state changes.
! .IP \fB\-fdump\-analyzer\-exploded\-nodes\fR 4
  .IX Item "-fdump-analyzer-exploded-nodes"
! Emit diagnostics showing where nodes in the "exploded graph" are
  in relation to the program source.
! .IP \fB\-fdump\-analyzer\-exploded\-nodes\-2\fR 4
  .IX Item "-fdump-analyzer-exploded-nodes-2"
! Dump a textual representation of the "exploded graph" to
! \&\fIfile.eg.txt\fR.
! .IP \fB\-fdump\-analyzer\-exploded\-nodes\-3\fR 4
  .IX Item "-fdump-analyzer-exploded-nodes-3"
! Dump a textual representation of the "exploded graph" to
! one dump file per node, to \fIfile.eg\-id.txt\fR.
  This is typically a large number of dump files.
! .IP \fB\-fdump\-analyzer\-exploded\-paths\fR 4
  .IX Item "-fdump-analyzer-exploded-paths"
! Dump a textual representation of the "exploded path" for each
! diagnostic to \fIfile.idx.kind.epath.txt\fR.
! .IP \fB\-fdump\-analyzer\-feasibility\fR 4
  .IX Item "-fdump-analyzer-feasibility"
! Dump internal details about the analyzer\*(Aqs search for feasible paths.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fIfile.*.fg.dot\fR,
! \&\fIfile.*.tg.dot\fR, and \fIfile.*.fpath.txt\fR.
! .IP \fB\-fdump\-analyzer\-infinite\-loop\fR 4
  .IX Item "-fdump-analyzer-infinite-loop"
! Dump internal details about the analyzer\*(Aqs search for infinite loops.
  The details are written in a form suitable for viewing with GraphViz
! to filenames of the form \fIfile.*.infinite\-loop.dot\fR.
! .IP \fB\-fdump\-analyzer\-json\fR 4
  .IX Item "-fdump-analyzer-json"
! Dump a compressed JSON representation of analyzer internals to
! \&\fIfile.analyzer.json.gz\fR.  The precise format is subject
  to change.
! .IP \fB\-fdump\-analyzer\-state\-purge\fR 4
  .IX Item "-fdump-analyzer-state-purge"
  As per \fB\-fdump\-analyzer\-supergraph\fR, dump a representation of the
! "supergraph" suitable for viewing with GraphViz, but annotate the
  graph with information on what state will be purged at each node.
! The graph is written to \fIfile.state\-purge.dot\fR.
! .IP \fB\-fdump\-analyzer\-supergraph\fR 4
  .IX Item "-fdump-analyzer-supergraph"
! Dump representations of the "supergraph" suitable for viewing with
! GraphViz to \fIfile.supergraph.dot\fR and to
! \&\fIfile.supergraph\-eg.dot\fR.  These show all of the
  control flow graphs in the program, with interprocedural edges for
  calls and returns.  The second dump contains annotations showing nodes
! in the "exploded graph" and diagnostics associated with them.
! .IP \fB\-fdump\-analyzer\-untracked\fR 4
  .IX Item "-fdump-analyzer-untracked"
  Emit custom warnings with internal details intended for analyzer developers.
  .SS "Options for Debugging Your Program"
  .IX Subsection "Options for Debugging Your Program"
! To tell GCC to emit extra information for use by a debugger, in almost 
  all cases you need only to add \fB\-g\fR to your other options.  Some debug
! formats can co\-exist (like DWARF with CTF) when each of them is enabled
  explicitly by adding the respective command line option to your other options.
  .PP
! GCC allows you to use \fB\-g\fR with
  \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
  be surprising: some variables you declared may not exist
  at all; flow of control may briefly move where you did not expect it;
*************** using \fB\-Og\fR with \fB\-g\fR.
*** 11149,11237 ****
  With no \fB\-O\fR option at all, some compiler passes that collect
  information useful for debugging do not run at all, so that
  \&\fB\-Og\fR may result in a better debugging experience.
! .IP "\fB\-g\fR" 4
  .IX Item "-g"
! Produce debugging information in the operating system's native format
! (stabs, \s-1COFF, XCOFF,\s0 or \s-1DWARF\s0).  \s-1GDB\s0 can work with this debugging
  information.
  .Sp
  On most systems that use stabs format, \fB\-g\fR enables use of extra
! debugging information that only \s-1GDB\s0 can use; this extra information
! makes debugging work better in \s-1GDB\s0 but probably makes other debuggers
  crash or refuse to read the program.  If you want to control for certain whether
  to generate the extra information, use \fB\-gvms\fR (see below).
! .IP "\fB\-ggdb\fR" 4
  .IX Item "-ggdb"
! Produce debugging information for use by \s-1GDB.\s0  This means to use the
! most expressive format available (\s-1DWARF,\s0 stabs, or the native format
! if neither of those are supported), including \s-1GDB\s0 extensions if at all
  possible.
! .IP "\fB\-gdwarf\fR" 4
  .IX Item "-gdwarf"
  .PD 0
! .IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
  .IX Item "-gdwarf-version"
  .PD
! Produce debugging information in \s-1DWARF\s0 format (if that is supported).
  The value of \fIversion\fR may be either 2, 3, 4 or 5; the default
! version for most targets is 5 (with the exception of VxWorks, \s-1TPF\s0 and
! Darwin / macOS, which default to version 2, and \s-1AIX,\s0 which defaults
  to version 4).
  .Sp
! Note that with \s-1DWARF\s0 Version 2, some ports require and always
! use some non-conflicting \s-1DWARF 3\s0 extensions in the unwind tables.
  .Sp
! Version 4 may require \s-1GDB 7.0\s0 and \fB\-fvar\-tracking\-assignments\fR
! for maximum benefit. Version 5 requires \s-1GDB 8.0\s0 or higher.
  .Sp
! \&\s-1GCC\s0 no longer supports \s-1DWARF\s0 Version 1, which is substantially
  different than Version 2 and later.  For historical reasons, some
! other DWARF-related options such as
! \&\fB\-fno\-dwarf2\-cfi\-asm\fR) retain a reference to \s-1DWARF\s0 Version 2
! in their names, but apply to all currently-supported versions of \s-1DWARF.\s0
! .IP "\fB\-gbtf\fR" 4
  .IX Item "-gbtf"
! Request \s-1BTF\s0 debug information.  \s-1BTF\s0 is the default debugging format for the
! eBPF target.  On other targets, like x86, \s-1BTF\s0 debug information can be
! generated along with \s-1DWARF\s0 debug information when both of the debug formats are
  enabled explicitly via their respective command line options.
! .IP "\fB\-gctf\fR" 4
  .IX Item "-gctf"
  .PD 0
! .IP "\fB\-gctf\fR\fIlevel\fR" 4
  .IX Item "-gctflevel"
  .PD
! Request \s-1CTF\s0 debug information and use level to specify how much \s-1CTF\s0 debug
  information should be produced.  If \fB\-gctf\fR is specified
! without a value for level, the default level of \s-1CTF\s0 debug information is 2.
  .Sp
! \&\s-1CTF\s0 debug information can be generated along with \s-1DWARF\s0 debug information when
  both of the debug formats are enabled explicitly via their respective command
  line options.
  .Sp
! Level 0 produces no \s-1CTF\s0 debug information at all.  Thus, \fB\-gctf0\fR
  negates \fB\-gctf\fR.
  .Sp
! Level 1 produces \s-1CTF\s0 information for tracebacks only.  This includes callsite
  information, but does not include type information.
  .Sp
  Level 2 produces type information for entities (functions, data objects etc.)
! at file-scope or global-scope only.
! .IP "\fB\-gvms\fR" 4
  .IX Item "-gvms"
  Produce debugging information in Alpha/VMS debug format (if that is
! supported).  This is the format used by \s-1DEBUG\s0 on Alpha/VMS systems.
! .IP "\fB\-gcodeview\fR" 4
  .IX Item "-gcodeview"
  Produce debugging information in CodeView debug format (if that is
! supported).  This is the format used by Microsoft Visual \*(C+ on
  Windows.
! .IP "\fB\-g\fR\fIlevel\fR" 4
  .IX Item "-glevel"
  .PD 0
! .IP "\fB\-ggdb\fR\fIlevel\fR" 4
  .IX Item "-ggdblevel"
! .IP "\fB\-gvms\fR\fIlevel\fR" 4
  .IX Item "-gvmslevel"
  .PD
  Request debugging information and also use \fIlevel\fR to specify how
--- 11082,11170 ----
  With no \fB\-O\fR option at all, some compiler passes that collect
  information useful for debugging do not run at all, so that
  \&\fB\-Og\fR may result in a better debugging experience.
! .IP \fB\-g\fR 4
  .IX Item "-g"
! Produce debugging information in the operating system\*(Aqs native format
! (stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
  information.
  .Sp
  On most systems that use stabs format, \fB\-g\fR enables use of extra
! debugging information that only GDB can use; this extra information
! makes debugging work better in GDB but probably makes other debuggers
  crash or refuse to read the program.  If you want to control for certain whether
  to generate the extra information, use \fB\-gvms\fR (see below).
! .IP \fB\-ggdb\fR 4
  .IX Item "-ggdb"
! Produce debugging information for use by GDB.  This means to use the
! most expressive format available (DWARF, stabs, or the native format
! if neither of those are supported), including GDB extensions if at all
  possible.
! .IP \fB\-gdwarf\fR 4
  .IX Item "-gdwarf"
  .PD 0
! .IP \fB\-gdwarf\-\fR\fIversion\fR 4
  .IX Item "-gdwarf-version"
  .PD
! Produce debugging information in DWARF format (if that is supported).
  The value of \fIversion\fR may be either 2, 3, 4 or 5; the default
! version for most targets is 5 (with the exception of VxWorks, TPF and
! Darwin / macOS, which default to version 2, and AIX, which defaults
  to version 4).
  .Sp
! Note that with DWARF Version 2, some ports require and always
! use some non\-conflicting DWARF 3 extensions in the unwind tables.
  .Sp
! Version 4 may require GDB 7.0 and \fB\-fvar\-tracking\-assignments\fR
! for maximum benefit. Version 5 requires GDB 8.0 or higher.
  .Sp
! GCC no longer supports DWARF Version 1, which is substantially
  different than Version 2 and later.  For historical reasons, some
! other DWARF\-related options such as
! \&\fB\-fno\-dwarf2\-cfi\-asm\fR) retain a reference to DWARF Version 2
! in their names, but apply to all currently\-supported versions of DWARF.
! .IP \fB\-gbtf\fR 4
  .IX Item "-gbtf"
! Request BTF debug information.  BTF is the default debugging format for the
! eBPF target.  On other targets, like x86, BTF debug information can be
! generated along with DWARF debug information when both of the debug formats are
  enabled explicitly via their respective command line options.
! .IP \fB\-gctf\fR 4
  .IX Item "-gctf"
  .PD 0
! .IP \fB\-gctf\fR\fIlevel\fR 4
  .IX Item "-gctflevel"
  .PD
! Request CTF debug information and use level to specify how much CTF debug
  information should be produced.  If \fB\-gctf\fR is specified
! without a value for level, the default level of CTF debug information is 2.
  .Sp
! CTF debug information can be generated along with DWARF debug information when
  both of the debug formats are enabled explicitly via their respective command
  line options.
  .Sp
! Level 0 produces no CTF debug information at all.  Thus, \fB\-gctf0\fR
  negates \fB\-gctf\fR.
  .Sp
! Level 1 produces CTF information for tracebacks only.  This includes callsite
  information, but does not include type information.
  .Sp
  Level 2 produces type information for entities (functions, data objects etc.)
! at file\-scope or global\-scope only.
! .IP \fB\-gvms\fR 4
  .IX Item "-gvms"
  Produce debugging information in Alpha/VMS debug format (if that is
! supported).  This is the format used by DEBUG on Alpha/VMS systems.
! .IP \fB\-gcodeview\fR 4
  .IX Item "-gcodeview"
  Produce debugging information in CodeView debug format (if that is
! supported).  This is the format used by Microsoft Visual C++ on
  Windows.
! .IP \fB\-g\fR\fIlevel\fR 4
  .IX Item "-glevel"
  .PD 0
! .IP \fB\-ggdb\fR\fIlevel\fR 4
  .IX Item "-ggdblevel"
! .IP \fB\-gvms\fR\fIlevel\fR 4
  .IX Item "-gvmslevel"
  .PD
  Request debugging information and also use \fIlevel\fR to specify how
*************** Level 0 produces no debug information at
*** 11241,11247 ****
  \&\fB\-g\fR.
  .Sp
  Level 1 produces minimal information, enough for making backtraces in
! parts of the program that you don't plan to debug.  This includes
  descriptions of functions and external variables, and line number
  tables, but no information about local variables.
  .Sp
--- 11174,11180 ----
  \&\fB\-g\fR.
  .Sp
  Level 1 produces minimal information, enough for making backtraces in
! parts of the program that you don\*(Aqt plan to debug.  This includes
  descriptions of functions and external variables, and line number
  tables, but no information about local variables.
  .Sp
*************** the last such option is the one that is
*** 11255,11292 ****
  \&\fB\-gdwarf\fR does not accept a concatenated debug level, to avoid
  confusion with \fB\-gdwarf\-\fR\fIlevel\fR.
  Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
! debug level for \s-1DWARF.\s0
! .IP "\fB\-fno\-eliminate\-unused\-debug\-symbols\fR" 4
  .IX Item "-fno-eliminate-unused-debug-symbols"
  By default, no debug information is produced for symbols that are not actually
  used. Use this option if you want debug information for all symbols.
! .IP "\fB\-femit\-class\-debug\-always\fR" 4
  .IX Item "-femit-class-debug-always"
! Instead of emitting debugging information for a \*(C+ class in only one
  object file, emit it in all object files using the class.  This option
! should be used only with debuggers that are unable to handle the way \s-1GCC\s0
  normally emits debugging information for classes because using this
  option increases the size of debugging information by as much as a
  factor of two.
! .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
  .IX Item "-fno-merge-debug-strings"
  Direct the linker to not merge together strings in the debugging
  information that are identical in different object files.  Merging is
  not supported by all assemblers or linkers.  Merging decreases the size
  of the debug information in the output file at the cost of increasing
  link processing time.  Merging is enabled by default.
! .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fdebug-prefix-map=old=new"
! When compiling files residing in directory \fI\fIold\fI\fR, record
  debugging information describing them as if the files resided in
! directory \fI\fInew\fI\fR instead.  This can be used to replace a
! build-time path with an install-time path in the debug info.  It can
  also be used to change an absolute path to a relative path by using
  \&\fI.\fR for \fInew\fR.  This can give more reproducible builds, which
! are location independent, but may require an extra command to tell \s-1GDB\s0
  where to find the source files. See also \fB\-ffile\-prefix\-map\fR
  and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fvar\-tracking\fR" 4
  .IX Item "-fvar-tracking"
  Run variable tracking pass.  It computes where variables are stored at each
  position in code.  Better debugging information is then generated
--- 11188,11225 ----
  \&\fB\-gdwarf\fR does not accept a concatenated debug level, to avoid
  confusion with \fB\-gdwarf\-\fR\fIlevel\fR.
  Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
! debug level for DWARF.
! .IP \fB\-fno\-eliminate\-unused\-debug\-symbols\fR 4
  .IX Item "-fno-eliminate-unused-debug-symbols"
  By default, no debug information is produced for symbols that are not actually
  used. Use this option if you want debug information for all symbols.
! .IP \fB\-femit\-class\-debug\-always\fR 4
  .IX Item "-femit-class-debug-always"
! Instead of emitting debugging information for a C++ class in only one
  object file, emit it in all object files using the class.  This option
! should be used only with debuggers that are unable to handle the way GCC
  normally emits debugging information for classes because using this
  option increases the size of debugging information by as much as a
  factor of two.
! .IP \fB\-fno\-merge\-debug\-strings\fR 4
  .IX Item "-fno-merge-debug-strings"
  Direct the linker to not merge together strings in the debugging
  information that are identical in different object files.  Merging is
  not supported by all assemblers or linkers.  Merging decreases the size
  of the debug information in the output file at the cost of increasing
  link processing time.  Merging is enabled by default.
! .IP \fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fdebug-prefix-map=old=new"
! When compiling files residing in directory \fIold\fR, record
  debugging information describing them as if the files resided in
! directory \fInew\fR instead.  This can be used to replace a
! build\-time path with an install\-time path in the debug info.  It can
  also be used to change an absolute path to a relative path by using
  \&\fI.\fR for \fInew\fR.  This can give more reproducible builds, which
! are location independent, but may require an extra command to tell GDB
  where to find the source files. See also \fB\-ffile\-prefix\-map\fR
  and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fvar\-tracking\fR 4
  .IX Item "-fvar-tracking"
  Run variable tracking pass.  It computes where variables are stored at each
  position in code.  Better debugging information is then generated
*************** position in code.  Better debugging info
*** 11295,11430 ****
  It is enabled by default when compiling with optimization (\fB\-Os\fR,
  \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
  the debug info format supports it.
! .IP "\fB\-fvar\-tracking\-assignments\fR" 4
  .IX Item "-fvar-tracking-assignments"
  Annotate assignments to user variables early in the compilation and
  attempt to carry the annotations over throughout the compilation all the
  way to the end, in an attempt to improve debug information while
  optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
  .Sp
! It can be enabled even if var-tracking is disabled, in which case
  annotations are created and maintained, but discarded at the end.
  By default, this flag is enabled together with \fB\-fvar\-tracking\fR,
  except when selective scheduling is enabled.
! .IP "\fB\-gsplit\-dwarf\fR" 4
  .IX Item "-gsplit-dwarf"
! If \s-1DWARF\s0 debugging information is enabled, separate as much debugging
  information as possible into a separate output file with the extension
  \&\fI.dwo\fR.  This option allows the build system to avoid linking files with
  debug information.  To be useful, this option requires a debugger capable of
  reading \fI.dwo\fR files.
! .IP "\fB\-gdwarf32\fR" 4
  .IX Item "-gdwarf32"
  .PD 0
! .IP "\fB\-gdwarf64\fR" 4
  .IX Item "-gdwarf64"
  .PD
! If \s-1DWARF\s0 debugging information is enabled, the \fB\-gdwarf32\fR selects
! the 32\-bit \s-1DWARF\s0 format and the \fB\-gdwarf64\fR selects the 64\-bit
! \&\s-1DWARF\s0 format.  The default is target specific, on most targets it is
! \&\fB\-gdwarf32\fR though.  The 32\-bit \s-1DWARF\s0 format is smaller, but
! can't support more than 2GiB of debug information in any of the \s-1DWARF\s0
! debug information sections.  The 64\-bit \s-1DWARF\s0 format allows larger debug
  information and might not be well supported by all consumers yet.
! .IP "\fB\-gdescribe\-dies\fR" 4
  .IX Item "-gdescribe-dies"
! Add description attributes to some \s-1DWARF\s0 DIEs that have no name attribute,
  such as artificial variables, external references and call site
  parameter DIEs.
! .IP "\fB\-gpubnames\fR" 4
  .IX Item "-gpubnames"
! Generate \s-1DWARF\s0 \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections.
! .IP "\fB\-ggnu\-pubnames\fR" 4
  .IX Item "-ggnu-pubnames"
  Generate \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections in a format
! suitable for conversion into a \s-1GDB\s0 index.  This option is only useful
! with a linker that can produce \s-1GDB\s0 index version 7.
! .IP "\fB\-fdebug\-types\-section\fR" 4
  .IX Item "-fdebug-types-section"
! When using \s-1DWARF\s0 Version 4 or higher, type DIEs can be put into
  their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
  \&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
  comdat section since the linker can then remove duplicates.
! But not all \s-1DWARF\s0 consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
  and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
  debugging information.
! .IP "\fB\-grecord\-gcc\-switches\fR" 4
  .IX Item "-grecord-gcc-switches"
  .PD 0
! .IP "\fB\-gno\-record\-gcc\-switches\fR" 4
  .IX Item "-gno-record-gcc-switches"
  .PD
! This switch causes the command-line options used to invoke the
  compiler that may affect code generation to be appended to the
! DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
  are concatenated with spaces separating them from each other and from
  the compiler version.  
  It is enabled by default.
  See also \fB\-frecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP "\fB\-gstrict\-dwarf\fR" 4
  .IX Item "-gstrict-dwarf"
! Disallow using extensions of later \s-1DWARF\s0 standard version than selected
! with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
! \&\s-1DWARF\s0 extensions from later standard versions is allowed.
! .IP "\fB\-gno\-strict\-dwarf\fR" 4
  .IX Item "-gno-strict-dwarf"
! Allow using extensions of later \s-1DWARF\s0 standard version than selected with
  \&\fB\-gdwarf\-\fR\fIversion\fR.
! .IP "\fB\-gas\-loc\-support\fR" 4
  .IX Item "-gas-loc-support"
  Inform the compiler that the assembler supports \f(CW\*(C`.loc\*(C'\fR directives.
! It may then use them for the assembler to generate \s-1DWARF2+\s0 line number
  tables.
  .Sp
! This is generally desirable, because assembler-generated line-number
  tables are a lot more compact than those the compiler can generate
  itself.
  .Sp
! This option will be enabled by default if, at \s-1GCC\s0 configure time, the
  assembler was found to support such directives.
! .IP "\fB\-gno\-as\-loc\-support\fR" 4
  .IX Item "-gno-as-loc-support"
! Force \s-1GCC\s0 to generate \s-1DWARF2+\s0 line number tables internally, if \s-1DWARF2+\s0
  line number tables are to be generated.
! .IP "\fB\-gas\-locview\-support\fR" 4
  .IX Item "-gas-locview-support"
  Inform the compiler that the assembler supports \f(CW\*(C`view\*(C'\fR assignment
  and reset assertion checking in \f(CW\*(C`.loc\*(C'\fR directives.
  .Sp
! This option will be enabled by default if, at \s-1GCC\s0 configure time, the
  assembler was found to support them.
! .IP "\fB\-gno\-as\-locview\-support\fR" 4
  .IX Item "-gno-as-locview-support"
! Force \s-1GCC\s0 to assign view numbers internally, if
  \&\fB\-gvariable\-location\-views\fR are explicitly requested.
! .IP "\fB\-gcolumn\-info\fR" 4
  .IX Item "-gcolumn-info"
  .PD 0
! .IP "\fB\-gno\-column\-info\fR" 4
  .IX Item "-gno-column-info"
  .PD
! Emit location column information into \s-1DWARF\s0 debugging information, rather
  than just file and line.
  This option is enabled by default.
! .IP "\fB\-gstatement\-frontiers\fR" 4
  .IX Item "-gstatement-frontiers"
  .PD 0
! .IP "\fB\-gno\-statement\-frontiers\fR" 4
  .IX Item "-gno-statement-frontiers"
  .PD
! This option causes \s-1GCC\s0 to create markers in the internal representation
  at the beginning of statements, and to keep them roughly in place
  throughout compilation, using them to guide the output of \f(CW\*(C`is_stmt\*(C'\fR
  markers in the line number table.  This is enabled by default when
  compiling with optimization (\fB\-Os\fR, \fB\-O1\fR, \fB\-O2\fR,
! \&...), and outputting \s-1DWARF 2\s0 debug information at the normal level.
! .IP "\fB\-gvariable\-location\-views\fR" 4
  .IX Item "-gvariable-location-views"
  .PD 0
! .IP "\fB\-gvariable\-location\-views=incompat5\fR" 4
  .IX Item "-gvariable-location-views=incompat5"
! .IP "\fB\-gno\-variable\-location\-views\fR" 4
  .IX Item "-gno-variable-location-views"
  .PD
  Augment variable location lists with progressive view numbers implied
--- 11228,11363 ----
  It is enabled by default when compiling with optimization (\fB\-Os\fR,
  \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
  the debug info format supports it.
! .IP \fB\-fvar\-tracking\-assignments\fR 4
  .IX Item "-fvar-tracking-assignments"
  Annotate assignments to user variables early in the compilation and
  attempt to carry the annotations over throughout the compilation all the
  way to the end, in an attempt to improve debug information while
  optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
  .Sp
! It can be enabled even if var\-tracking is disabled, in which case
  annotations are created and maintained, but discarded at the end.
  By default, this flag is enabled together with \fB\-fvar\-tracking\fR,
  except when selective scheduling is enabled.
! .IP \fB\-gsplit\-dwarf\fR 4
  .IX Item "-gsplit-dwarf"
! If DWARF debugging information is enabled, separate as much debugging
  information as possible into a separate output file with the extension
  \&\fI.dwo\fR.  This option allows the build system to avoid linking files with
  debug information.  To be useful, this option requires a debugger capable of
  reading \fI.dwo\fR files.
! .IP \fB\-gdwarf32\fR 4
  .IX Item "-gdwarf32"
  .PD 0
! .IP \fB\-gdwarf64\fR 4
  .IX Item "-gdwarf64"
  .PD
! If DWARF debugging information is enabled, the \fB\-gdwarf32\fR selects
! the 32\-bit DWARF format and the \fB\-gdwarf64\fR selects the 64\-bit
! DWARF format.  The default is target specific, on most targets it is
! \&\fB\-gdwarf32\fR though.  The 32\-bit DWARF format is smaller, but
! can\*(Aqt support more than 2GiB of debug information in any of the DWARF
! debug information sections.  The 64\-bit DWARF format allows larger debug
  information and might not be well supported by all consumers yet.
! .IP \fB\-gdescribe\-dies\fR 4
  .IX Item "-gdescribe-dies"
! Add description attributes to some DWARF DIEs that have no name attribute,
  such as artificial variables, external references and call site
  parameter DIEs.
! .IP \fB\-gpubnames\fR 4
  .IX Item "-gpubnames"
! Generate DWARF \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections.
! .IP \fB\-ggnu\-pubnames\fR 4
  .IX Item "-ggnu-pubnames"
  Generate \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections in a format
! suitable for conversion into a GDB index.  This option is only useful
! with a linker that can produce GDB index version 7.
! .IP \fB\-fdebug\-types\-section\fR 4
  .IX Item "-fdebug-types-section"
! When using DWARF Version 4 or higher, type DIEs can be put into
  their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
  \&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
  comdat section since the linker can then remove duplicates.
! But not all DWARF consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
  and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
  debugging information.
! .IP \fB\-grecord\-gcc\-switches\fR 4
  .IX Item "-grecord-gcc-switches"
  .PD 0
! .IP \fB\-gno\-record\-gcc\-switches\fR 4
  .IX Item "-gno-record-gcc-switches"
  .PD
! This switch causes the command\-line options used to invoke the
  compiler that may affect code generation to be appended to the
! DW_AT_producer attribute in DWARF debugging information.  The options
  are concatenated with spaces separating them from each other and from
  the compiler version.  
  It is enabled by default.
  See also \fB\-frecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP \fB\-gstrict\-dwarf\fR 4
  .IX Item "-gstrict-dwarf"
! Disallow using extensions of later DWARF standard version than selected
! with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non\-conflicting
! DWARF extensions from later standard versions is allowed.
! .IP \fB\-gno\-strict\-dwarf\fR 4
  .IX Item "-gno-strict-dwarf"
! Allow using extensions of later DWARF standard version than selected with
  \&\fB\-gdwarf\-\fR\fIversion\fR.
! .IP \fB\-gas\-loc\-support\fR 4
  .IX Item "-gas-loc-support"
  Inform the compiler that the assembler supports \f(CW\*(C`.loc\*(C'\fR directives.
! It may then use them for the assembler to generate DWARF2+ line number
  tables.
  .Sp
! This is generally desirable, because assembler\-generated line\-number
  tables are a lot more compact than those the compiler can generate
  itself.
  .Sp
! This option will be enabled by default if, at GCC configure time, the
  assembler was found to support such directives.
! .IP \fB\-gno\-as\-loc\-support\fR 4
  .IX Item "-gno-as-loc-support"
! Force GCC to generate DWARF2+ line number tables internally, if DWARF2+
  line number tables are to be generated.
! .IP \fB\-gas\-locview\-support\fR 4
  .IX Item "-gas-locview-support"
  Inform the compiler that the assembler supports \f(CW\*(C`view\*(C'\fR assignment
  and reset assertion checking in \f(CW\*(C`.loc\*(C'\fR directives.
  .Sp
! This option will be enabled by default if, at GCC configure time, the
  assembler was found to support them.
! .IP \fB\-gno\-as\-locview\-support\fR 4
  .IX Item "-gno-as-locview-support"
! Force GCC to assign view numbers internally, if
  \&\fB\-gvariable\-location\-views\fR are explicitly requested.
! .IP \fB\-gcolumn\-info\fR 4
  .IX Item "-gcolumn-info"
  .PD 0
! .IP \fB\-gno\-column\-info\fR 4
  .IX Item "-gno-column-info"
  .PD
! Emit location column information into DWARF debugging information, rather
  than just file and line.
  This option is enabled by default.
! .IP \fB\-gstatement\-frontiers\fR 4
  .IX Item "-gstatement-frontiers"
  .PD 0
! .IP \fB\-gno\-statement\-frontiers\fR 4
  .IX Item "-gno-statement-frontiers"
  .PD
! This option causes GCC to create markers in the internal representation
  at the beginning of statements, and to keep them roughly in place
  throughout compilation, using them to guide the output of \f(CW\*(C`is_stmt\*(C'\fR
  markers in the line number table.  This is enabled by default when
  compiling with optimization (\fB\-Os\fR, \fB\-O1\fR, \fB\-O2\fR,
! \&...), and outputting DWARF 2 debug information at the normal level.
! .IP \fB\-gvariable\-location\-views\fR 4
  .IX Item "-gvariable-location-views"
  .PD 0
! .IP \fB\-gvariable\-location\-views=incompat5\fR 4
  .IX Item "-gvariable-location-views=incompat5"
! .IP \fB\-gno\-variable\-location\-views\fR 4
  .IX Item "-gno-variable-location-views"
  .PD
  Augment variable location lists with progressive view numbers implied
*************** associated with the corresponding source
*** 11434,11498 ****
  point.  If the assembler lacks support for view numbers in line number
  tables, this will cause the compiler to emit the line number table,
  which generally makes them somewhat less compact.  The augmented line
! number tables and location lists are fully backward-compatible, so they
  can be consumed by debug information consumers that are not aware of
! these augmentations, but they won't derive any benefit from them either.
  .Sp
! This is enabled by default when outputting \s-1DWARF 2\s0 debug information at
  the normal level, as long as there is assembler support,
  \&\fB\-fvar\-tracking\-assignments\fR is enabled and
  \&\fB\-gstrict\-dwarf\fR is not.  When assembler support is not
! available, this may still be enabled, but it will force \s-1GCC\s0 to output
  internal line number tables, and if
  \&\fB\-ginternal\-reset\-location\-views\fR is not enabled, that will most
  certainly lead to silently mismatching location views.
  .Sp
  There is a proposed representation for view numbers that is not backward
! compatible with the location list format introduced in \s-1DWARF 5,\s0 that can
  be enabled with \fB\-gvariable\-location\-views=incompat5\fR.  This
  option may be removed in the future, is only provided as a reference
  implementation of the proposed representation.  Debug information
  consumers are not expected to support this extended format, and they
  would be rendered unable to decode location lists using it.
! .IP "\fB\-ginternal\-reset\-location\-views\fR" 4
  .IX Item "-ginternal-reset-location-views"
  .PD 0
! .IP "\fB\-gno\-internal\-reset\-location\-views\fR" 4
  .IX Item "-gno-internal-reset-location-views"
  .PD
  Attempt to determine location views that can be omitted from location
  view lists.  This requires the compiler to have very accurate insn
! length estimates, which isn't always the case, and it may cause
  incorrect view lists to be generated silently when using an assembler
! that does not support location view lists.  The \s-1GNU\s0 assembler will flag
  any such error as a \f(CW\*(C`view number mismatch\*(C'\fR.  This is only enabled
  on ports that define a reliable estimation function.
! .IP "\fB\-ginline\-points\fR" 4
  .IX Item "-ginline-points"
  .PD 0
! .IP "\fB\-gno\-inline\-points\fR" 4
  .IX Item "-gno-inline-points"
  .PD
  Generate extended debug information for inlined functions.  Location
  view tracking markers are inserted at inlined entry points, so that
  address and view numbers can be computed and output in debug
  information.  This can be enabled independently of location views, in
! which case the view numbers won't be output, but it can only be enabled
  along with statement frontiers, and it is only enabled by default if
  location views are enabled.
! .IP "\fB\-gz\fR[\fB=\fR\fItype\fR]" 4
  .IX Item "-gz[=type]"
! Produce compressed debug sections in \s-1DWARF\s0 format, if that is supported.
  If \fItype\fR is not given, the default type depends on the capabilities
  of the assembler and linker used.  \fItype\fR may be one of
! \&\fBnone\fR (don't compress debug sections), or \fBzlib\fR (use zlib
! compression in \s-1ELF\s0 gABI format).  If the linker doesn't support writing
  compressed debug sections, the option is rejected.  Otherwise, if the
  assembler does not support them, \fB\-gz\fR is silently ignored when
  producing object files.
! .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
  .IX Item "-femit-struct-debug-baseonly"
! Emit debug information for struct-like types
  only when the base name of the compilation source file
  matches the base name of file in which the struct is defined.
  .Sp
--- 11367,11431 ----
  point.  If the assembler lacks support for view numbers in line number
  tables, this will cause the compiler to emit the line number table,
  which generally makes them somewhat less compact.  The augmented line
! number tables and location lists are fully backward\-compatible, so they
  can be consumed by debug information consumers that are not aware of
! these augmentations, but they won\*(Aqt derive any benefit from them either.
  .Sp
! This is enabled by default when outputting DWARF 2 debug information at
  the normal level, as long as there is assembler support,
  \&\fB\-fvar\-tracking\-assignments\fR is enabled and
  \&\fB\-gstrict\-dwarf\fR is not.  When assembler support is not
! available, this may still be enabled, but it will force GCC to output
  internal line number tables, and if
  \&\fB\-ginternal\-reset\-location\-views\fR is not enabled, that will most
  certainly lead to silently mismatching location views.
  .Sp
  There is a proposed representation for view numbers that is not backward
! compatible with the location list format introduced in DWARF 5, that can
  be enabled with \fB\-gvariable\-location\-views=incompat5\fR.  This
  option may be removed in the future, is only provided as a reference
  implementation of the proposed representation.  Debug information
  consumers are not expected to support this extended format, and they
  would be rendered unable to decode location lists using it.
! .IP \fB\-ginternal\-reset\-location\-views\fR 4
  .IX Item "-ginternal-reset-location-views"
  .PD 0
! .IP \fB\-gno\-internal\-reset\-location\-views\fR 4
  .IX Item "-gno-internal-reset-location-views"
  .PD
  Attempt to determine location views that can be omitted from location
  view lists.  This requires the compiler to have very accurate insn
! length estimates, which isn\*(Aqt always the case, and it may cause
  incorrect view lists to be generated silently when using an assembler
! that does not support location view lists.  The GNU assembler will flag
  any such error as a \f(CW\*(C`view number mismatch\*(C'\fR.  This is only enabled
  on ports that define a reliable estimation function.
! .IP \fB\-ginline\-points\fR 4
  .IX Item "-ginline-points"
  .PD 0
! .IP \fB\-gno\-inline\-points\fR 4
  .IX Item "-gno-inline-points"
  .PD
  Generate extended debug information for inlined functions.  Location
  view tracking markers are inserted at inlined entry points, so that
  address and view numbers can be computed and output in debug
  information.  This can be enabled independently of location views, in
! which case the view numbers won\*(Aqt be output, but it can only be enabled
  along with statement frontiers, and it is only enabled by default if
  location views are enabled.
! .IP \fB\-gz\fR[\fB=\fR\fItype\fR] 4
  .IX Item "-gz[=type]"
! Produce compressed debug sections in DWARF format, if that is supported.
  If \fItype\fR is not given, the default type depends on the capabilities
  of the assembler and linker used.  \fItype\fR may be one of
! \&\fBnone\fR (don\*(Aqt compress debug sections), or \fBzlib\fR (use zlib
! compression in ELF gABI format).  If the linker doesn\*(Aqt support writing
  compressed debug sections, the option is rejected.  Otherwise, if the
  assembler does not support them, \fB\-gz\fR is silently ignored when
  producing object files.
! .IP \fB\-femit\-struct\-debug\-baseonly\fR 4
  .IX Item "-femit-struct-debug-baseonly"
! Emit debug information for struct\-like types
  only when the base name of the compilation source file
  matches the base name of file in which the struct is defined.
  .Sp
*************** but at significant potential loss in typ
*** 11501,11510 ****
  See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with \s-1DWARF\s0 debug output.
! .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
  .IX Item "-femit-struct-debug-reduced"
! Emit debug information for struct-like types
  only when the base name of the compilation source file
  matches the base name of file in which the type is defined,
  unless the struct is a template or defined in a system header.
--- 11434,11443 ----
  See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with DWARF debug output.
! .IP \fB\-femit\-struct\-debug\-reduced\fR 4
  .IX Item "-femit-struct-debug-reduced"
! Emit debug information for struct\-like types
  only when the base name of the compilation source file
  matches the base name of file in which the type is defined,
  unless the struct is a template or defined in a system header.
*************** with some potential loss in type informa
*** 11514,11523 ****
  See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with \s-1DWARF\s0 debug output.
! .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
  .IX Item "-femit-struct-debug-detailed[=spec-list]"
! Specify the struct-like types
  for which the compiler generates debug information.
  The intent is to reduce duplicate struct debug information
  between different object files within the same program.
--- 11447,11456 ----
  See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
  See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
  .Sp
! This option works only with DWARF debug output.
! .IP \fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR] 4
  .IX Item "-femit-struct-debug-detailed[=spec-list]"
! Specify the struct\-like types
  for which the compiler generates debug information.
  The intent is to reduce duplicate struct debug information
  between different object files within the same program.
*************** An example is
*** 11539,11546 ****
  The optional second word limits the specification to
  ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
  Generic structs are a bit complicated to explain.
! For \*(C+, these are non-explicit specializations of template classes,
! or non-template classes within the above.
  Other programming languages have generics,
  but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
  .Sp
--- 11472,11479 ----
  The optional second word limits the specification to
  ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
  Generic structs are a bit complicated to explain.
! For C++, these are non\-explicit specializations of template classes,
! or non\-template classes within the above.
  Other programming languages have generics,
  but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
  .Sp
*************** You may need to experiment to determine
*** 11560,11575 ****
  .Sp
  The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
  .Sp
! This option works only with \s-1DWARF\s0 debug output.
! .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
  .IX Item "-fno-dwarf2-cfi-asm"
! Emit \s-1DWARF\s0 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
! instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
! .IP "\fB\-fno\-eliminate\-unused\-debug\-types\fR" 4
  .IX Item "-fno-eliminate-unused-debug-types"
! Normally, when producing \s-1DWARF\s0 output, \s-1GCC\s0 avoids producing debug symbol 
  output for types that are nowhere used in the source file being compiled.
! Sometimes it is useful to have \s-1GCC\s0 emit debugging
  information for all types declared in a compilation
  unit, regardless of whether or not they are actually used
  in that compilation unit, for example 
--- 11493,11508 ----
  .Sp
  The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
  .Sp
! This option works only with DWARF debug output.
! .IP \fB\-fno\-dwarf2\-cfi\-asm\fR 4
  .IX Item "-fno-dwarf2-cfi-asm"
! Emit DWARF unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
! instead of using GAS \f(CW\*(C`.cfi_*\*(C'\fR directives.
! .IP \fB\-fno\-eliminate\-unused\-debug\-types\fR 4
  .IX Item "-fno-eliminate-unused-debug-types"
! Normally, when producing DWARF output, GCC avoids producing debug symbol 
  output for types that are nowhere used in the source file being compiled.
! Sometimes it is useful to have GCC emit debugging
  information for all types declared in a compilation
  unit, regardless of whether or not they are actually used
  in that compilation unit, for example 
*************** however, this results in a significant a
*** 11580,11586 ****
  .IX Subsection "Options That Control Optimization"
  These options control various sorts of optimizations.
  .PP
! Without any optimization option, the compiler's goal is to reduce the
  cost of compilation and to make debugging produce the expected
  results.  Statements are independent: if you stop the program with a
  breakpoint between statements, you can then assign a new value to any
--- 11513,11519 ----
  .IX Subsection "Options That Control Optimization"
  These options control various sorts of optimizations.
  .PP
! Without any optimization option, the compiler\*(Aqs goal is to reduce the
  cost of compilation and to make debugging produce the expected
  results.  Statements are independent: if you stop the program with a
  breakpoint between statements, you can then assign a new value to any
*************** Most optimizations are completely disabl
*** 11605,11618 ****
  optimization flags are specified.  Similarly, \fB\-Og\fR suppresses
  many optimization passes.
  .PP
! Depending on the target and how \s-1GCC\s0 was configured, a slightly different
  set of optimizations may be enabled at each \fB\-O\fR level than
! those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
  to find out the exact set of optimizations that are enabled at each level.
! .IP "\fB\-O\fR" 4
  .IX Item "-O"
  .PD 0
! .IP "\fB\-O1\fR" 4
  .IX Item "-O1"
  .PD
  Optimize.  Optimizing compilation takes somewhat more time, and a lot
--- 11538,11551 ----
  optimization flags are specified.  Similarly, \fB\-Og\fR suppresses
  many optimization passes.
  .PP
! Depending on the target and how GCC was configured, a slightly different
  set of optimizations may be enabled at each \fB\-O\fR level than
! those listed here.  You can invoke GCC with \fB\-Q \-\-help=optimizers\fR
  to find out the exact set of optimizations that are enabled at each level.
! .IP \fB\-O\fR 4
  .IX Item "-O"
  .PD 0
! .IP \fB\-O1\fR 4
  .IX Item "-O1"
  .PD
  Optimize.  Optimizing compilation takes somewhat more time, and a lot
*************** compilation time.
*** 11671,11680 ****
  \&\-ftree\-sra
  \&\-ftree\-ter
  \&\-funit\-at\-a\-time\fR
! .IP "\fB\-O2\fR" 4
  .IX Item "-O2"
! Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
! that do not involve a space-speed tradeoff.
  As compared to \fB\-O\fR, this option increases both compilation time
  and the performance of the generated code.
  .Sp
--- 11604,11613 ----
  \&\-ftree\-sra
  \&\-ftree\-ter
  \&\-funit\-at\-a\-time\fR
! .IP \fB\-O2\fR 4
  .IX Item "-O2"
! Optimize even more.  GCC performs nearly all supported optimizations
! that do not involve a space\-speed tradeoff.
  As compared to \fB\-O\fR, this option increases both compilation time
  and the performance of the generated code.
  .Sp
*************** also turns on the following optimization
*** 11722,11728 ****
  .Sp
  Please note the warning under \fB\-fgcse\fR about
  invoking \fB\-O2\fR on programs that use computed gotos.
! .IP "\fB\-O3\fR" 4
  .IX Item "-O3"
  Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
  by \fB\-O2\fR and also turns on the following optimization flags:
--- 11655,11661 ----
  .Sp
  Please note the warning under \fB\-fgcse\fR about
  invoking \fB\-O2\fR on programs that use computed gotos.
! .IP \fB\-O3\fR 4
  .IX Item "-O3"
  Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
  by \fB\-O2\fR and also turns on the following optimization flags:
*************** by \fB\-O2\fR and also turns on the foll
*** 11740,11750 ****
  \&\-funswitch\-loops
  \&\-fvect\-cost\-model=dynamic
  \&\-fversion\-loops\-for\-strides\fR
! .IP "\fB\-O0\fR" 4
  .IX Item "-O0"
  Reduce compilation time and make debugging produce the expected
  results.  This is the default.
! .IP "\fB\-Os\fR" 4
  .IX Item "-Os"
  Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations 
  except those that often increase code size:
--- 11673,11683 ----
  \&\-funswitch\-loops
  \&\-fvect\-cost\-model=dynamic
  \&\-fversion\-loops\-for\-strides\fR
! .IP \fB\-O0\fR 4
  .IX Item "-O0"
  Reduce compilation time and make debugging produce the expected
  results.  This is the default.
! .IP \fB\-Os\fR 4
  .IX Item "-Os"
  Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations 
  except those that often increase code size:
*************** except those that often increase code si
*** 11756,11774 ****
  It also enables \fB\-finline\-functions\fR, causes the compiler to tune for
  code size rather than execution speed, and performs further optimizations
  designed to reduce code size.
! .IP "\fB\-Ofast\fR" 4
  .IX Item "-Ofast"
  Disregard strict standards compliance.  \fB\-Ofast\fR enables all
  \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
! valid for all standard-compliant programs.
  It turns on \fB\-ffast\-math\fR, \fB\-fallow\-store\-data\-races\fR
! and the Fortran-specific \fB\-fstack\-arrays\fR, unless
  \&\fB\-fmax\-stack\-var\-size\fR is specified, and \fB\-fno\-protect\-parens\fR.
  It turns off \fB\-fsemantic\-interposition\fR.
! .IP "\fB\-Og\fR" 4
  .IX Item "-Og"
  Optimize debugging experience.  \fB\-Og\fR should be the optimization
! level of choice for the standard edit-compile-debug cycle, offering
  a reasonable level of optimization while maintaining fast compilation
  and a good debugging experience.  It is a better choice than \fB\-O0\fR
  for producing debuggable code because some compiler passes
--- 11689,11707 ----
  It also enables \fB\-finline\-functions\fR, causes the compiler to tune for
  code size rather than execution speed, and performs further optimizations
  designed to reduce code size.
! .IP \fB\-Ofast\fR 4
  .IX Item "-Ofast"
  Disregard strict standards compliance.  \fB\-Ofast\fR enables all
  \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
! valid for all standard\-compliant programs.
  It turns on \fB\-ffast\-math\fR, \fB\-fallow\-store\-data\-races\fR
! and the Fortran\-specific \fB\-fstack\-arrays\fR, unless
  \&\fB\-fmax\-stack\-var\-size\fR is specified, and \fB\-fno\-protect\-parens\fR.
  It turns off \fB\-fsemantic\-interposition\fR.
! .IP \fB\-Og\fR 4
  .IX Item "-Og"
  Optimize debugging experience.  \fB\-Og\fR should be the optimization
! level of choice for the standard edit\-compile\-debug cycle, offering
  a reasonable level of optimization while maintaining fast compilation
  and a good debugging experience.  It is a better choice than \fB\-O0\fR
  for producing debuggable code because some compiler passes
*************** optimization flags except for those that
*** 11784,11790 ****
  \&\-finline\-functions\-called\-once
  \&\-fmove\-loop\-invariants  \-fmove\-loop\-stores  \-fssa\-phiopt
  \&\-ftree\-bit\-ccp  \-ftree\-dse  \-ftree\-pta  \-ftree\-sra\fR
! .IP "\fB\-Oz\fR" 4
  .IX Item "-Oz"
  Optimize aggressively for size rather than speed.  This may increase
  the number of instructions executed if those instructions require
--- 11717,11723 ----
  \&\-finline\-functions\-called\-once
  \&\-fmove\-loop\-invariants  \-fmove\-loop\-stores  \-fssa\-phiopt
  \&\-ftree\-bit\-ccp  \-ftree\-dse  \-ftree\-pta  \-ftree\-sra\fR
! .IP \fB\-Oz\fR 4
  .IX Item "-Oz"
  Optimize aggressively for size rather than speed.  This may increase
  the number of instructions executed if those instructions require
*************** including enabling most \fB\-O2\fR optim
*** 11794,11800 ****
  If you use multiple \fB\-O\fR options, with or without level numbers,
  the last such option is the one that is effective.
  .PP
! Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
  flags.  Most flags have both positive and negative forms; the negative
  form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
  below, only one of the forms is listed\-\-\-the one you typically 
--- 11727,11733 ----
  If you use multiple \fB\-O\fR options, with or without level numbers,
  the last such option is the one that is effective.
  .PP
! Options of the form \fB\-f\fR\fIflag\fR specify machine\-independent
  flags.  Most flags have both positive and negative forms; the negative
  form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
  below, only one of the forms is listed\-\-\-the one you typically 
*************** or adding it.
*** 11803,11866 ****
  .PP
  The following options control specific optimizations.  They are either
  activated by \fB\-O\fR options or are related to ones that are.  You
! can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
  optimizations to be performed is desired.
! .IP "\fB\-fno\-defer\-pop\fR" 4
  .IX Item "-fno-defer-pop"
  For machines that must pop arguments after a function call, always pop 
  the arguments as soon as each function returns.  
  At levels \fB\-O1\fR and higher, \fB\-fdefer\-pop\fR is the default;
  this allows the compiler to let arguments accumulate on the stack for several
  function calls and pop them all at once.
! .IP "\fB\-fforward\-propagate\fR" 4
  .IX Item "-fforward-propagate"
! Perform a forward propagation pass on \s-1RTL.\s0  The pass tries to combine two
  instructions and checks if the result can be simplified.  If loop unrolling
  is active, two passes are performed and the second is scheduled after
  loop unrolling.
  .Sp
  This option is enabled by default at optimization levels \fB\-O1\fR,
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
  .IX Item "-ffp-contract=style"
! \&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
! \&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
! such as forming of fused multiply-add operations if the target has
  native support for them.
! \&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
! if allowed by the language standard.  This is implemented for C and \*(C+,
  where it enables contraction within one expression, but not across
  different statements.
  .Sp
  The default is \fB\-ffp\-contract=off\fR for C in a standards compliant mode
  (\fB\-std=c11\fR or similar), \fB\-ffp\-contract=fast\fR otherwise.
! .IP "\fB\-fomit\-frame\-pointer\fR" 4
  .IX Item "-fomit-frame-pointer"
! Omit the frame pointer in functions that don't need one.  This avoids the
  instructions to save, set up and restore the frame pointer; on many targets
  it also makes an extra register available.
  .Sp
  On some targets this flag has no effect because the standard calling sequence
  always uses a frame pointer, so it cannot be omitted.
  .Sp
! Note that \fB\-fno\-omit\-frame\-pointer\fR doesn't guarantee the frame pointer
  is used in all functions.  Several targets always omit the frame pointer in
  leaf functions.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-foptimize\-sibling\-calls\fR" 4
  .IX Item "-foptimize-sibling-calls"
  Optimize sibling and tail recursive calls.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-foptimize\-strlen\fR" 4
  .IX Item "-foptimize-strlen"
  Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
  \&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
  their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-finline\-stringops[=\fR\fIfn\fR\fB]\fR" 4
  .IX Item "-finline-stringops[=fn]"
  Expand memory and string operations (for now, only \f(CW\*(C`memset\*(C'\fR)
  inline, even when the length is variable or big enough as to require
--- 11736,11799 ----
  .PP
  The following options control specific optimizations.  They are either
  activated by \fB\-O\fR options or are related to ones that are.  You
! can use the following flags in the rare cases when "fine\-tuning" of
  optimizations to be performed is desired.
! .IP \fB\-fno\-defer\-pop\fR 4
  .IX Item "-fno-defer-pop"
  For machines that must pop arguments after a function call, always pop 
  the arguments as soon as each function returns.  
  At levels \fB\-O1\fR and higher, \fB\-fdefer\-pop\fR is the default;
  this allows the compiler to let arguments accumulate on the stack for several
  function calls and pop them all at once.
! .IP \fB\-fforward\-propagate\fR 4
  .IX Item "-fforward-propagate"
! Perform a forward propagation pass on RTL.  The pass tries to combine two
  instructions and checks if the result can be simplified.  If loop unrolling
  is active, two passes are performed and the second is scheduled after
  loop unrolling.
  .Sp
  This option is enabled by default at optimization levels \fB\-O1\fR,
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-ffp\-contract=\fR\fIstyle\fR 4
  .IX Item "-ffp-contract=style"
! \&\fB\-ffp\-contract=off\fR disables floating\-point expression contraction.
! \&\fB\-ffp\-contract=fast\fR enables floating\-point expression contraction
! such as forming of fused multiply\-add operations if the target has
  native support for them.
! \&\fB\-ffp\-contract=on\fR enables floating\-point expression contraction
! if allowed by the language standard.  This is implemented for C and C++,
  where it enables contraction within one expression, but not across
  different statements.
  .Sp
  The default is \fB\-ffp\-contract=off\fR for C in a standards compliant mode
  (\fB\-std=c11\fR or similar), \fB\-ffp\-contract=fast\fR otherwise.
! .IP \fB\-fomit\-frame\-pointer\fR 4
  .IX Item "-fomit-frame-pointer"
! Omit the frame pointer in functions that don\*(Aqt need one.  This avoids the
  instructions to save, set up and restore the frame pointer; on many targets
  it also makes an extra register available.
  .Sp
  On some targets this flag has no effect because the standard calling sequence
  always uses a frame pointer, so it cannot be omitted.
  .Sp
! Note that \fB\-fno\-omit\-frame\-pointer\fR doesn\*(Aqt guarantee the frame pointer
  is used in all functions.  Several targets always omit the frame pointer in
  leaf functions.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-foptimize\-sibling\-calls\fR 4
  .IX Item "-foptimize-sibling-calls"
  Optimize sibling and tail recursive calls.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-foptimize\-strlen\fR 4
  .IX Item "-foptimize-strlen"
  Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
  \&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
  their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-finline\-stringops[=\fR\fIfn\fR\fB]\fR 4
  .IX Item "-finline-stringops[=fn]"
  Expand memory and string operations (for now, only \f(CW\*(C`memset\*(C'\fR)
  inline, even when the length is variable or big enough as to require
*************** it may be less efficient than optimized
*** 11873,11879 ****
  grow code size so much that even a less performant but shared
  implementation runs faster due to better use of code caches.  This
  option is disabled by default.
! .IP "\fB\-fno\-inline\fR" 4
  .IX Item "-fno-inline"
  Do not expand any functions inline apart from those marked with
  the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
--- 11806,11812 ----
  grow code size so much that even a less performant but shared
  implementation runs faster due to better use of code caches.  This
  option is disabled by default.
! .IP \fB\-fno\-inline\fR 4
  .IX Item "-fno-inline"
  Do not expand any functions inline apart from those marked with
  the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
*************** optimizing.
*** 11881,11887 ****
  .Sp
  Single functions can be exempted from inlining by marking them
  with the \f(CW\*(C`noinline\*(C'\fR attribute.
! .IP "\fB\-finline\-small\-functions\fR" 4
  .IX Item "-finline-small-functions"
  Integrate functions into their callers when their body is smaller than expected
  function call code (so overall size of program gets smaller).  The compiler
--- 11814,11820 ----
  .Sp
  Single functions can be exempted from inlining by marking them
  with the \f(CW\*(C`noinline\*(C'\fR attribute.
! .IP \fB\-finline\-small\-functions\fR 4
  .IX Item "-finline-small-functions"
  Integrate functions into their callers when their body is smaller than expected
  function call code (so overall size of program gets smaller).  The compiler
*************** in this way.  This inlining applies to a
*** 11890,11896 ****
  inline.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-findirect\-inlining\fR" 4
  .IX Item "-findirect-inlining"
  Inline also indirect calls that are discovered to be known at compile
  time thanks to previous inlining.  This option has any effect only
--- 11823,11829 ----
  inline.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-findirect\-inlining\fR 4
  .IX Item "-findirect-inlining"
  Inline also indirect calls that are discovered to be known at compile
  time thanks to previous inlining.  This option has any effect only
*************** when inlining itself is turned on by the
*** 11898,11904 ****
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-finline\-functions\fR" 4
  .IX Item "-finline-functions"
  Consider all functions for inlining, even if they are not declared inline.
  The compiler heuristically decides which functions are worth integrating
--- 11831,11837 ----
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-finline\-functions\fR 4
  .IX Item "-finline-functions"
  Consider all functions for inlining, even if they are not declared inline.
  The compiler heuristically decides which functions are worth integrating
*************** assembler code in its own right.
*** 11910,11916 ****
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Also enabled
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-finline\-functions\-called\-once\fR" 4
  .IX Item "-finline-functions-called-once"
  Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
  caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
--- 11843,11849 ----
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Also enabled
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-finline\-functions\-called\-once\fR 4
  .IX Item "-finline-functions-called-once"
  Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
  caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
*************** in its own right.
*** 11919,11925 ****
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR,
  but not \fB\-Og\fR.
! .IP "\fB\-fearly\-inlining\fR" 4
  .IX Item "-fearly-inlining"
  Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
  smaller than the function call overhead early before doing
--- 11852,11858 ----
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR,
  but not \fB\-Og\fR.
! .IP \fB\-fearly\-inlining\fR 4
  .IX Item "-fearly-inlining"
  Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
  smaller than the function call overhead early before doing
*************** makes profiling significantly cheaper an
*** 11928,11943 ****
  having large chains of nested wrapper functions.
  .Sp
  Enabled by default.
! .IP "\fB\-fipa\-sra\fR" 4
  .IX Item "-fipa-sra"
  Perform interprocedural scalar replacement of aggregates, removal of
  unused parameters and replacement of parameters passed by reference
  by parameters passed by value.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
! .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
  .IX Item "-finline-limit=n"
! By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
  allows coarse control of this limit.  \fIn\fR is the size of functions that
  can be inlined in number of pseudo instructions.
  .Sp
--- 11861,11876 ----
  having large chains of nested wrapper functions.
  .Sp
  Enabled by default.
! .IP \fB\-fipa\-sra\fR 4
  .IX Item "-fipa-sra"
  Perform interprocedural scalar replacement of aggregates, removal of
  unused parameters and replacement of parameters passed by reference
  by parameters passed by value.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
! .IP \fB\-finline\-limit=\fR\fIn\fR 4
  .IX Item "-finline-limit=n"
! By default, GCC limits the size of functions that can be inlined.  This flag
  allows coarse control of this limit.  \fIn\fR is the size of functions that
  can be inlined in number of pseudo instructions.
  .Sp
*************** specified individually by using \fB\-\-p
*** 11946,11955 ****
  The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
  as follows:
  .RS 4
! .IP "\fBmax-inline-insns-single\fR" 4
  .IX Item "max-inline-insns-single"
  is set to \fIn\fR/2.
! .IP "\fBmax-inline-insns-auto\fR" 4
  .IX Item "max-inline-insns-auto"
  is set to \fIn\fR/2.
  .RE
--- 11879,11888 ----
  The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
  as follows:
  .RS 4
! .IP \fBmax\-inline\-insns\-single\fR 4
  .IX Item "max-inline-insns-single"
  is set to \fIn\fR/2.
! .IP \fBmax\-inline\-insns\-auto\fR 4
  .IX Item "max-inline-insns-auto"
  is set to \fIn\fR/2.
  .RE
*************** parameters controlling inlining and for
*** 11962,11998 ****
  in default behavior.
  .Sp
  \&\fINote:\fR pseudo instruction represents, in this particular context, an
! abstract measurement of function's size.  In no way does it represent a count
  of assembly instructions and as such its exact meaning might change from one
  release to an another.
  .RE
! .IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
  .IX Item "-fno-keep-inline-dllexport"
! This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
  which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
  attribute or declspec.
! .IP "\fB\-fkeep\-inline\-functions\fR" 4
  .IX Item "-fkeep-inline-functions"
  In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
  into the object file, even if the function has been inlined into all
  of its callers.  This switch does not affect functions using the
! \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU C90.\s0  In \*(C+, emit any and all
  inline functions into the object file.
! .IP "\fB\-fkeep\-static\-functions\fR" 4
  .IX Item "-fkeep-static-functions"
  Emit \f(CW\*(C`static\*(C'\fR functions into the object file, even if the function
  is never used.
! .IP "\fB\-fkeep\-static\-consts\fR" 4
  .IX Item "-fkeep-static-consts"
! Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
! on, even if the variables aren't referenced.
  .Sp
! \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
  check if a variable is referenced, regardless of whether or not
  optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
! .IP "\fB\-fmerge\-constants\fR" 4
  .IX Item "-fmerge-constants"
! Attempt to merge identical constants (string constants and floating-point
  constants) across compilation units.
  .Sp
  This option is the default for optimized compilation if the assembler and
--- 11895,11931 ----
  in default behavior.
  .Sp
  \&\fINote:\fR pseudo instruction represents, in this particular context, an
! abstract measurement of function\*(Aqs size.  In no way does it represent a count
  of assembly instructions and as such its exact meaning might change from one
  release to an another.
  .RE
! .IP \fB\-fno\-keep\-inline\-dllexport\fR 4
  .IX Item "-fno-keep-inline-dllexport"
! This is a more fine\-grained version of \fB\-fkeep\-inline\-functions\fR,
  which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
  attribute or declspec.
! .IP \fB\-fkeep\-inline\-functions\fR 4
  .IX Item "-fkeep-inline-functions"
  In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
  into the object file, even if the function has been inlined into all
  of its callers.  This switch does not affect functions using the
! \&\f(CW\*(C`extern inline\*(C'\fR extension in GNU C90.  In C++, emit any and all
  inline functions into the object file.
! .IP \fB\-fkeep\-static\-functions\fR 4
  .IX Item "-fkeep-static-functions"
  Emit \f(CW\*(C`static\*(C'\fR functions into the object file, even if the function
  is never used.
! .IP \fB\-fkeep\-static\-consts\fR 4
  .IX Item "-fkeep-static-consts"
! Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn\*(Aqt turned
! on, even if the variables aren\*(Aqt referenced.
  .Sp
! GCC enables this option by default.  If you want to force the compiler to
  check if a variable is referenced, regardless of whether or not
  optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
! .IP \fB\-fmerge\-constants\fR 4
  .IX Item "-fmerge-constants"
! Attempt to merge identical constants (string constants and floating\-point
  constants) across compilation units.
  .Sp
  This option is the default for optimized compilation if the assembler and
*************** linker support it.  Use \fB\-fno\-merge\
*** 12000,12055 ****
  behavior.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fmerge\-all\-constants\fR" 4
  .IX Item "-fmerge-all-constants"
  Attempt to merge identical constants and identical variables.
  .Sp
  This option implies \fB\-fmerge\-constants\fR.  In addition to
  \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
! arrays or initialized constant variables with integral or floating-point
! types.  Languages like C or \*(C+ require each variable, including multiple
  instances of the same variable in recursive calls, to have distinct locations,
! so using this option results in non-conforming
  behavior.
! .IP "\fB\-fmodulo\-sched\fR" 4
  .IX Item "-fmodulo-sched"
  Perform swing modulo scheduling immediately before the first scheduling
  pass.  This pass looks at innermost loops and reorders their
  instructions by overlapping different iterations.
! .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
  .IX Item "-fmodulo-sched-allow-regmoves"
! Perform more aggressive SMS-based modulo scheduling with register moves
! allowed.  By setting this flag certain anti-dependences edges are
! deleted, which triggers the generation of reg-moves based on the
! life-range analysis.  This option is effective only with
  \&\fB\-fmodulo\-sched\fR enabled.
! .IP "\fB\-fno\-branch\-count\-reg\fR" 4
  .IX Item "-fno-branch-count-reg"
  Disable the optimization pass that scans for opportunities to use 
! \&\*(L"decrement and branch\*(R" instructions on a count register instead of
  instruction sequences that decrement a register, compare it against zero, and
  then branch based upon the result.  This option is only meaningful on
  architectures that support such instructions, which include x86, PowerPC,
! \&\s-1IA\-64\s0 and S/390.  Note that the \fB\-fno\-branch\-count\-reg\fR option
! doesn't remove the decrement and branch instructions from the generated
  instruction stream introduced by other optimization passes.
  .Sp
  The default is \fB\-fbranch\-count\-reg\fR at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP "\fB\-fno\-function\-cse\fR" 4
  .IX Item "-fno-function-cse"
  Do not put function addresses in registers; make each instruction that
! calls a constant function contain the function's address explicitly.
  .Sp
  This option results in less efficient code, but some strange hacks
  that alter the assembler output may be confused by the optimizations
  performed when this option is not used.
  .Sp
  The default is \fB\-ffunction\-cse\fR
! .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
  .IX Item "-fno-zero-initialized-in-bss"
! If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
! are initialized to zero into \s-1BSS.\s0  This can save space in the resulting
  code.
  .Sp
  This option turns off this behavior because some programs explicitly
--- 11933,11988 ----
  behavior.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fmerge\-all\-constants\fR 4
  .IX Item "-fmerge-all-constants"
  Attempt to merge identical constants and identical variables.
  .Sp
  This option implies \fB\-fmerge\-constants\fR.  In addition to
  \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
! arrays or initialized constant variables with integral or floating\-point
! types.  Languages like C or C++ require each variable, including multiple
  instances of the same variable in recursive calls, to have distinct locations,
! so using this option results in non\-conforming
  behavior.
! .IP \fB\-fmodulo\-sched\fR 4
  .IX Item "-fmodulo-sched"
  Perform swing modulo scheduling immediately before the first scheduling
  pass.  This pass looks at innermost loops and reorders their
  instructions by overlapping different iterations.
! .IP \fB\-fmodulo\-sched\-allow\-regmoves\fR 4
  .IX Item "-fmodulo-sched-allow-regmoves"
! Perform more aggressive SMS\-based modulo scheduling with register moves
! allowed.  By setting this flag certain anti\-dependences edges are
! deleted, which triggers the generation of reg\-moves based on the
! life\-range analysis.  This option is effective only with
  \&\fB\-fmodulo\-sched\fR enabled.
! .IP \fB\-fno\-branch\-count\-reg\fR 4
  .IX Item "-fno-branch-count-reg"
  Disable the optimization pass that scans for opportunities to use 
! "decrement and branch" instructions on a count register instead of
  instruction sequences that decrement a register, compare it against zero, and
  then branch based upon the result.  This option is only meaningful on
  architectures that support such instructions, which include x86, PowerPC,
! IA\-64 and S/390.  Note that the \fB\-fno\-branch\-count\-reg\fR option
! doesn\*(Aqt remove the decrement and branch instructions from the generated
  instruction stream introduced by other optimization passes.
  .Sp
  The default is \fB\-fbranch\-count\-reg\fR at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP \fB\-fno\-function\-cse\fR 4
  .IX Item "-fno-function-cse"
  Do not put function addresses in registers; make each instruction that
! calls a constant function contain the function\*(Aqs address explicitly.
  .Sp
  This option results in less efficient code, but some strange hacks
  that alter the assembler output may be confused by the optimizations
  performed when this option is not used.
  .Sp
  The default is \fB\-ffunction\-cse\fR
! .IP \fB\-fno\-zero\-initialized\-in\-bss\fR 4
  .IX Item "-fno-zero-initialized-in-bss"
! If the target supports a BSS section, GCC by default puts variables that
! are initialized to zero into BSS.  This can save space in the resulting
  code.
  .Sp
  This option turns off this behavior because some programs explicitly
*************** resulting executable can find the beginn
*** 12058,12064 ****
  assumptions based on that.
  .Sp
  The default is \fB\-fzero\-initialized\-in\-bss\fR.
! .IP "\fB\-fthread\-jumps\fR" 4
  .IX Item "-fthread-jumps"
  Perform optimizations that check to see if a jump branches to a
  location where another comparison subsumed by the first is found.  If
--- 11991,11997 ----
  assumptions based on that.
  .Sp
  The default is \fB\-fzero\-initialized\-in\-bss\fR.
! .IP \fB\-fthread\-jumps\fR 4
  .IX Item "-fthread-jumps"
  Perform optimizations that check to see if a jump branches to a
  location where another comparison subsumed by the first is found.  If
*************** second branch or a point immediately fol
*** 12067,12073 ****
  the condition is known to be true or false.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fsplit\-wide\-types\fR" 4
  .IX Item "-fsplit-wide-types"
  When using a type that occupies multiple registers, such as \f(CW\*(C`long
  long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
--- 12000,12006 ----
  the condition is known to be true or false.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fsplit\-wide\-types\fR 4
  .IX Item "-fsplit-wide-types"
  When using a type that occupies multiple registers, such as \f(CW\*(C`long
  long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
*************** but may make debugging more difficult.
*** 12076,12123 ****
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR,
  \&\fB\-Os\fR.
! .IP "\fB\-fsplit\-wide\-types\-early\fR" 4
  .IX Item "-fsplit-wide-types-early"
  Fully split wide types early, instead of very late.
  This option has no effect unless \fB\-fsplit\-wide\-types\fR is turned on.
  .Sp
  This is the default on some targets.
! .IP "\fB\-fcse\-follow\-jumps\fR" 4
  .IX Item "-fcse-follow-jumps"
! In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
  when the target of the jump is not reached by any other path.  For
! example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
! \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 follows the jump when the condition
  tested is false.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fcse\-skip\-blocks\fR" 4
  .IX Item "-fcse-skip-blocks"
! This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
! follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
  encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
! \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
  body of the \f(CW\*(C`if\*(C'\fR.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
  .IX Item "-frerun-cse-after-loop"
! Re-run common subexpression elimination after loop optimizations are
  performed.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fgcse\fR" 4
  .IX Item "-fgcse"
  Perform a global common subexpression elimination pass.
  This pass also performs global constant and copy propagation.
  .Sp
! \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
! extension, you may get better run-time performance if you disable
  the global common subexpression elimination pass by adding
  \&\fB\-fno\-gcse\fR to the command line.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fgcse\-lm\fR" 4
  .IX Item "-fgcse-lm"
  When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
  attempts to move loads that are only killed by stores into themselves.  This
--- 12009,12056 ----
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR,
  \&\fB\-Os\fR.
! .IP \fB\-fsplit\-wide\-types\-early\fR 4
  .IX Item "-fsplit-wide-types-early"
  Fully split wide types early, instead of very late.
  This option has no effect unless \fB\-fsplit\-wide\-types\fR is turned on.
  .Sp
  This is the default on some targets.
! .IP \fB\-fcse\-follow\-jumps\fR 4
  .IX Item "-fcse-follow-jumps"
! In common subexpression elimination (CSE), scan through jump instructions
  when the target of the jump is not reached by any other path.  For
! example, when CSE encounters an \f(CW\*(C`if\*(C'\fR statement with an
! \&\f(CW\*(C`else\*(C'\fR clause, CSE follows the jump when the condition
  tested is false.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fcse\-skip\-blocks\fR 4
  .IX Item "-fcse-skip-blocks"
! This is similar to \fB\-fcse\-follow\-jumps\fR, but causes CSE to
! follow jumps that conditionally skip over blocks.  When CSE
  encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
! \&\fB\-fcse\-skip\-blocks\fR causes CSE to follow the jump around the
  body of the \f(CW\*(C`if\*(C'\fR.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-frerun\-cse\-after\-loop\fR 4
  .IX Item "-frerun-cse-after-loop"
! Re\-run common subexpression elimination after loop optimizations are
  performed.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fgcse\fR 4
  .IX Item "-fgcse"
  Perform a global common subexpression elimination pass.
  This pass also performs global constant and copy propagation.
  .Sp
! \&\fINote:\fR When compiling a program using computed gotos, a GCC
! extension, you may get better run\-time performance if you disable
  the global common subexpression elimination pass by adding
  \&\fB\-fno\-gcse\fR to the command line.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fgcse\-lm\fR 4
  .IX Item "-fgcse-lm"
  When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
  attempts to move loads that are only killed by stores into themselves.  This
*************** allows a loop containing a load/store se
*** 12125,12131 ****
  the loop, and a copy/store within the loop.
  .Sp
  Enabled by default when \fB\-fgcse\fR is enabled.
! .IP "\fB\-fgcse\-sm\fR" 4
  .IX Item "-fgcse-sm"
  When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
  global common subexpression elimination.  This pass attempts to move
--- 12058,12064 ----
  the loop, and a copy/store within the loop.
  .Sp
  Enabled by default when \fB\-fgcse\fR is enabled.
! .IP \fB\-fgcse\-sm\fR 4
  .IX Item "-fgcse-sm"
  When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
  global common subexpression elimination.  This pass attempts to move
*************** loops containing a load/store sequence c
*** 12134,12207 ****
  the loop and a store after the loop.
  .Sp
  Not enabled at any optimization level.
! .IP "\fB\-fgcse\-las\fR" 4
  .IX Item "-fgcse-las"
  When \fB\-fgcse\-las\fR is enabled, the global common subexpression
  elimination pass eliminates redundant loads that come after stores to the
  same memory location (both partial and full redundancies).
  .Sp
  Not enabled at any optimization level.
! .IP "\fB\-fgcse\-after\-reload\fR" 4
  .IX Item "-fgcse-after-reload"
  When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
  pass is performed after reload.  The purpose of this pass is to clean up
  redundant spilling.
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-faggressive\-loop\-optimizations\fR" 4
  .IX Item "-faggressive-loop-optimizations"
  This option tells the loop optimizer to use language constraints to
  derive bounds for the number of iterations of a loop.  This assumes that
  loop code does not invoke undefined behavior by for example causing signed
! integer overflows or out-of-bound array accesses.  The bounds for the
  number of iterations of a loop are used to guide loop unrolling and peeling
  and loop exit test optimizations.
  This option is enabled by default.
! .IP "\fB\-funconstrained\-commons\fR" 4
  .IX Item "-funconstrained-commons"
  This option tells the compiler that variables declared in common blocks
  (e.g. Fortran) may later be overridden with longer trailing arrays. This
  prevents certain optimizations that depend on knowing the array bounds.
! .IP "\fB\-fcrossjumping\fR" 4
  .IX Item "-fcrossjumping"
! Perform cross-jumping transformation.
  This transformation unifies equivalent code and saves code size.  The
! resulting code may or may not perform better than without cross-jumping.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fauto\-inc\-dec\fR" 4
  .IX Item "-fauto-inc-dec"
  Combine increments or decrements of addresses with memory accesses.
  This pass is always skipped on architectures that do not have
  instructions to support this.  Enabled by default at \fB\-O1\fR and
  higher on architectures that support this.
! .IP "\fB\-fdce\fR" 4
  .IX Item "-fdce"
! Perform dead code elimination (\s-1DCE\s0) on \s-1RTL.\s0
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fdse\fR" 4
  .IX Item "-fdse"
! Perform dead store elimination (\s-1DSE\s0) on \s-1RTL.\s0
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fif\-conversion\fR" 4
  .IX Item "-fif-conversion"
! Attempt to transform conditional jumps into branch-less equivalents.  This
  includes use of conditional moves, min, max, set flags and abs instructions, and
  some tricks doable by standard arithmetics.  The use of conditional execution
  on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP "\fB\-fif\-conversion2\fR" 4
  .IX Item "-fif-conversion2"
  Use conditional execution (where available) to transform conditional jumps into
! branch-less equivalents.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP "\fB\-fdeclone\-ctor\-dtor\fR" 4
  .IX Item "-fdeclone-ctor-dtor"
! The \*(C+ \s-1ABI\s0 requires multiple entry points for constructors and
  destructors: one for a base subobject, one for a complete object, and
  one for a virtual destructor that calls operator delete afterwards.
  For a hierarchy with virtual bases, the base and complete variants are
--- 12067,12140 ----
  the loop and a store after the loop.
  .Sp
  Not enabled at any optimization level.
! .IP \fB\-fgcse\-las\fR 4
  .IX Item "-fgcse-las"
  When \fB\-fgcse\-las\fR is enabled, the global common subexpression
  elimination pass eliminates redundant loads that come after stores to the
  same memory location (both partial and full redundancies).
  .Sp
  Not enabled at any optimization level.
! .IP \fB\-fgcse\-after\-reload\fR 4
  .IX Item "-fgcse-after-reload"
  When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
  pass is performed after reload.  The purpose of this pass is to clean up
  redundant spilling.
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-faggressive\-loop\-optimizations\fR 4
  .IX Item "-faggressive-loop-optimizations"
  This option tells the loop optimizer to use language constraints to
  derive bounds for the number of iterations of a loop.  This assumes that
  loop code does not invoke undefined behavior by for example causing signed
! integer overflows or out\-of\-bound array accesses.  The bounds for the
  number of iterations of a loop are used to guide loop unrolling and peeling
  and loop exit test optimizations.
  This option is enabled by default.
! .IP \fB\-funconstrained\-commons\fR 4
  .IX Item "-funconstrained-commons"
  This option tells the compiler that variables declared in common blocks
  (e.g. Fortran) may later be overridden with longer trailing arrays. This
  prevents certain optimizations that depend on knowing the array bounds.
! .IP \fB\-fcrossjumping\fR 4
  .IX Item "-fcrossjumping"
! Perform cross\-jumping transformation.
  This transformation unifies equivalent code and saves code size.  The
! resulting code may or may not perform better than without cross\-jumping.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fauto\-inc\-dec\fR 4
  .IX Item "-fauto-inc-dec"
  Combine increments or decrements of addresses with memory accesses.
  This pass is always skipped on architectures that do not have
  instructions to support this.  Enabled by default at \fB\-O1\fR and
  higher on architectures that support this.
! .IP \fB\-fdce\fR 4
  .IX Item "-fdce"
! Perform dead code elimination (DCE) on RTL.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fdse\fR 4
  .IX Item "-fdse"
! Perform dead store elimination (DSE) on RTL.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fif\-conversion\fR 4
  .IX Item "-fif-conversion"
! Attempt to transform conditional jumps into branch\-less equivalents.  This
  includes use of conditional moves, min, max, set flags and abs instructions, and
  some tricks doable by standard arithmetics.  The use of conditional execution
  on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP \fB\-fif\-conversion2\fR 4
  .IX Item "-fif-conversion2"
  Use conditional execution (where available) to transform conditional jumps into
! branch\-less equivalents.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
  not with \fB\-Og\fR.
! .IP \fB\-fdeclone\-ctor\-dtor\fR 4
  .IX Item "-fdeclone-ctor-dtor"
! The C++ ABI requires multiple entry points for constructors and
  destructors: one for a base subobject, one for a complete object, and
  one for a virtual destructor that calls operator delete afterwards.
  For a hierarchy with virtual bases, the base and complete variants are
*************** base and complete variants are changed t
*** 12210,12222 ****
  implementation.
  .Sp
  Enabled by \fB\-Os\fR.
! .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
  .IX Item "-fdelete-null-pointer-checks"
  Assume that programs cannot safely dereference null pointers, and that
  no code or data element resides at address zero.
  This option enables simple constant
  folding optimizations at all optimization levels.  In addition, other
! optimization passes in \s-1GCC\s0 use this flag to control global dataflow
  analyses that eliminate useless checks for null pointers; these assume
  that a memory access to address zero always results in a trap, so
  that if a pointer is checked after it has already been dereferenced,
--- 12143,12155 ----
  implementation.
  .Sp
  Enabled by \fB\-Os\fR.
! .IP \fB\-fdelete\-null\-pointer\-checks\fR 4
  .IX Item "-fdelete-null-pointer-checks"
  Assume that programs cannot safely dereference null pointers, and that
  no code or data element resides at address zero.
  This option enables simple constant
  folding optimizations at all optimization levels.  In addition, other
! optimization passes in GCC use this flag to control global dataflow
  analyses that eliminate useless checks for null pointers; these assume
  that a memory access to address zero always results in a trap, so
  that if a pointer is checked after it has already been dereferenced,
*************** Note however that in some environments t
*** 12226,12244 ****
  Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
  for programs that depend on that behavior.
  .Sp
! This option is enabled by default on most targets.  On Nios \s-1II ELF,\s0 it
! defaults to off.  On \s-1AVR\s0 and \s-1MSP430,\s0 this option is completely disabled.
  .Sp
  Passes that use the dataflow information
  are enabled independently at different optimization levels.
! .IP "\fB\-fdevirtualize\fR" 4
  .IX Item "-fdevirtualize"
  Attempt to convert calls to virtual functions to direct calls.  This
  is done both within a procedure and interprocedurally as part of
  indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
  propagation (\fB\-fipa\-cp\fR).
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fdevirtualize\-speculatively\fR" 4
  .IX Item "-fdevirtualize-speculatively"
  Attempt to convert calls to virtual functions to speculative direct calls.
  Based on the analysis of the type inheritance graph, determine for a given call
--- 12159,12177 ----
  Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
  for programs that depend on that behavior.
  .Sp
! This option is enabled by default on most targets.  On Nios II ELF, it
! defaults to off.  On AVR and MSP430, this option is completely disabled.
  .Sp
  Passes that use the dataflow information
  are enabled independently at different optimization levels.
! .IP \fB\-fdevirtualize\fR 4
  .IX Item "-fdevirtualize"
  Attempt to convert calls to virtual functions to direct calls.  This
  is done both within a procedure and interprocedurally as part of
  indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
  propagation (\fB\-fipa\-cp\fR).
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fdevirtualize\-speculatively\fR 4
  .IX Item "-fdevirtualize-speculatively"
  Attempt to convert calls to virtual functions to speculative direct calls.
  Based on the analysis of the type inheritance graph, determine for a given call
*************** the set of likely targets. If the set is
*** 12246,12274 ****
  the call into a conditional deciding between direct and indirect calls.  The
  speculative calls enable more optimizations, such as inlining.  When they seem
  useless after further optimization, they are converted back into original form.
! .IP "\fB\-fdevirtualize\-at\-ltrans\fR" 4
  .IX Item "-fdevirtualize-at-ltrans"
  Stream extra information needed for aggressive devirtualization when running
! the link-time optimizer in local transformation mode.  
  This option enables more devirtualization but
  significantly increases the size of streamed data. For this reason it is
  disabled by default.
! .IP "\fB\-fexpensive\-optimizations\fR" 4
  .IX Item "-fexpensive-optimizations"
  Perform a number of minor optimizations that are relatively expensive.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-free\fR" 4
  .IX Item "-free"
  Attempt to remove redundant extension instructions.  This is especially
! helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
  registers after writing to their lower 32\-bit half.
  .Sp
! Enabled for Alpha, AArch64, LoongArch, PowerPC, RISC-V, \s-1SPARC,\s0 h83000 and x86 at
  levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fno\-lifetime\-dse\fR" 4
  .IX Item "-fno-lifetime-dse"
! In \*(C+ the value of an object is only affected by changes within its
  lifetime: when the constructor begins, the object has an indeterminate
  value, and any changes during the lifetime of the object are dead when
  the object is destroyed.  Normally dead store elimination will take
--- 12179,12207 ----
  the call into a conditional deciding between direct and indirect calls.  The
  speculative calls enable more optimizations, such as inlining.  When they seem
  useless after further optimization, they are converted back into original form.
! .IP \fB\-fdevirtualize\-at\-ltrans\fR 4
  .IX Item "-fdevirtualize-at-ltrans"
  Stream extra information needed for aggressive devirtualization when running
! the link\-time optimizer in local transformation mode.  
  This option enables more devirtualization but
  significantly increases the size of streamed data. For this reason it is
  disabled by default.
! .IP \fB\-fexpensive\-optimizations\fR 4
  .IX Item "-fexpensive-optimizations"
  Perform a number of minor optimizations that are relatively expensive.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-free\fR 4
  .IX Item "-free"
  Attempt to remove redundant extension instructions.  This is especially
! helpful for the x86\-64 architecture, which implicitly zero\-extends in 64\-bit
  registers after writing to their lower 32\-bit half.
  .Sp
! Enabled for Alpha, AArch64, LoongArch, PowerPC, RISC\-V, SPARC, h83000 and x86 at
  levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fno\-lifetime\-dse\fR 4
  .IX Item "-fno-lifetime-dse"
! In C++ the value of an object is only affected by changes within its
  lifetime: when the constructor begins, the object has an indeterminate
  value, and any changes during the lifetime of the object are dead when
  the object is destroyed.  Normally dead store elimination will take
*************** storage) but still treat the object as d
*** 12280,12316 ****
  can use \fB\-flifetime\-dse=1\fR.  The default behavior can be
  explicitly selected with \fB\-flifetime\-dse=2\fR.
  \&\fB\-flifetime\-dse=0\fR is equivalent to \fB\-fno\-lifetime\-dse\fR.
! .IP "\fB\-flive\-range\-shrinkage\fR" 4
  .IX Item "-flive-range-shrinkage"
  Attempt to decrease register pressure through register live range
  shrinkage.  This is helpful for fast processors with small or moderate
  size register sets.
! .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
  .IX Item "-fira-algorithm=algorithm"
  Use the specified coloring algorithm for the integrated register
  allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
! specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
! Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
  for all architectures, but for those targets that do support it, it is
  the default because it generates better code.
! .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
  .IX Item "-fira-region=region"
  Use specified regions for the integrated register allocator.  The
  \&\fIregion\fR argument should be one of the following:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Use all loops as register allocation regions.
  This can give the best results for machines with a small and/or
  irregular register set.
! .IP "\fBmixed\fR" 4
  .IX Item "mixed"
  Use all loops except for loops with small register pressure 
  as the regions.  This value usually gives
  the best results in most cases and for most architectures,
  and is enabled by default when compiling with optimization for speed
  (\fB\-O\fR, \fB\-O2\fR, ...).
! .IP "\fBone\fR" 4
  .IX Item "one"
  Use all functions as a single region.  
  This typically results in the smallest code size, and is enabled by default for
--- 12213,12249 ----
  can use \fB\-flifetime\-dse=1\fR.  The default behavior can be
  explicitly selected with \fB\-flifetime\-dse=2\fR.
  \&\fB\-flifetime\-dse=0\fR is equivalent to \fB\-fno\-lifetime\-dse\fR.
! .IP \fB\-flive\-range\-shrinkage\fR 4
  .IX Item "-flive-range-shrinkage"
  Attempt to decrease register pressure through register live range
  shrinkage.  This is helpful for fast processors with small or moderate
  size register sets.
! .IP \fB\-fira\-algorithm=\fR\fIalgorithm\fR 4
  .IX Item "-fira-algorithm=algorithm"
  Use the specified coloring algorithm for the integrated register
  allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
! specifies Chow\*(Aqs priority coloring, or \fBCB\fR, which specifies
! Chaitin\-Briggs coloring.  Chaitin\-Briggs coloring is not implemented
  for all architectures, but for those targets that do support it, it is
  the default because it generates better code.
! .IP \fB\-fira\-region=\fR\fIregion\fR 4
  .IX Item "-fira-region=region"
  Use specified regions for the integrated register allocator.  The
  \&\fIregion\fR argument should be one of the following:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Use all loops as register allocation regions.
  This can give the best results for machines with a small and/or
  irregular register set.
! .IP \fBmixed\fR 4
  .IX Item "mixed"
  Use all loops except for loops with small register pressure 
  as the regions.  This value usually gives
  the best results in most cases and for most architectures,
  and is enabled by default when compiling with optimization for speed
  (\fB\-O\fR, \fB\-O2\fR, ...).
! .IP \fBone\fR 4
  .IX Item "one"
  Use all functions as a single region.  
  This typically results in the smallest code size, and is enabled by default for
*************** This typically results in the smallest c
*** 12318,12357 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fira\-hoist\-pressure\fR" 4
  .IX Item "-fira-hoist-pressure"
! Use \s-1IRA\s0 to evaluate register pressure in the code hoisting pass for
  decisions to hoist expressions.  This option usually results in smaller
  code, but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-Os\fR for all targets.
! .IP "\fB\-fira\-loop\-pressure\fR" 4
  .IX Item "-fira-loop-pressure"
! Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
  loop invariants.  This option usually results in generation
  of faster and smaller code on machines with large register files (>= 32
  registers), but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-O3\fR for some targets.
! .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
  .IX Item "-fno-ira-share-save-slots"
! Disable sharing of stack slots used for saving call-used hard
  registers living through a call.  Each hard register gets a
  separate stack slot, and as a result function stack frames are
  larger.
! .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
  .IX Item "-fno-ira-share-spill-slots"
! Disable sharing of stack slots allocated for pseudo-registers.  Each
! pseudo-register that does not get a hard register gets a separate
  stack slot, and as a result function stack frames are larger.
! .IP "\fB\-flra\-remat\fR" 4
  .IX Item "-flra-remat"
! Enable CFG-sensitive rematerialization in \s-1LRA.\s0  Instead of loading
! values of spilled pseudos, \s-1LRA\s0 tries to rematerialize (recalculate)
  values if it is profitable.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fdelayed\-branch\fR" 4
  .IX Item "-fdelayed-branch"
  If supported for the target machine, attempt to reorder instructions
  to exploit instruction slots available after delayed branch
--- 12251,12290 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fira\-hoist\-pressure\fR 4
  .IX Item "-fira-hoist-pressure"
! Use IRA to evaluate register pressure in the code hoisting pass for
  decisions to hoist expressions.  This option usually results in smaller
  code, but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-Os\fR for all targets.
! .IP \fB\-fira\-loop\-pressure\fR 4
  .IX Item "-fira-loop-pressure"
! Use IRA to evaluate register pressure in loops for decisions to move
  loop invariants.  This option usually results in generation
  of faster and smaller code on machines with large register files (>= 32
  registers), but it can slow the compiler down.
  .Sp
  This option is enabled at level \fB\-O3\fR for some targets.
! .IP \fB\-fno\-ira\-share\-save\-slots\fR 4
  .IX Item "-fno-ira-share-save-slots"
! Disable sharing of stack slots used for saving call\-used hard
  registers living through a call.  Each hard register gets a
  separate stack slot, and as a result function stack frames are
  larger.
! .IP \fB\-fno\-ira\-share\-spill\-slots\fR 4
  .IX Item "-fno-ira-share-spill-slots"
! Disable sharing of stack slots allocated for pseudo\-registers.  Each
! pseudo\-register that does not get a hard register gets a separate
  stack slot, and as a result function stack frames are larger.
! .IP \fB\-flra\-remat\fR 4
  .IX Item "-flra-remat"
! Enable CFG\-sensitive rematerialization in LRA.  Instead of loading
! values of spilled pseudos, LRA tries to rematerialize (recalculate)
  values if it is profitable.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fdelayed\-branch\fR 4
  .IX Item "-fdelayed-branch"
  If supported for the target machine, attempt to reorder instructions
  to exploit instruction slots available after delayed branch
*************** instructions.
*** 12359,12374 ****
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR,
  but not at \fB\-Og\fR.
! .IP "\fB\-fschedule\-insns\fR" 4
  .IX Item "-fschedule-insns"
  If supported for the target machine, attempt to reorder instructions to
  eliminate execution stalls due to required data being unavailable.  This
  helps machines that have slow floating point or memory load instructions
  by allowing other instructions to be issued until the result of the load
! or floating-point instruction is required.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-fschedule\-insns2\fR" 4
  .IX Item "-fschedule-insns2"
  Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
  instruction scheduling after register allocation has been done.  This is
--- 12292,12307 ----
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR,
  but not at \fB\-Og\fR.
! .IP \fB\-fschedule\-insns\fR 4
  .IX Item "-fschedule-insns"
  If supported for the target machine, attempt to reorder instructions to
  eliminate execution stalls due to required data being unavailable.  This
  helps machines that have slow floating point or memory load instructions
  by allowing other instructions to be issued until the result of the load
! or floating\-point instruction is required.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-fschedule\-insns2\fR 4
  .IX Item "-fschedule-insns2"
  Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
  instruction scheduling after register allocation has been done.  This is
*************** especially useful on machines with a rel
*** 12376,12392 ****
  registers and where memory load instructions take more than one cycle.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fno\-sched\-interblock\fR" 4
  .IX Item "-fno-sched-interblock"
  Disable instruction scheduling across basic blocks, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fno\-sched\-spec\fR" 4
  .IX Item "-fno-sched-spec"
! Disable speculative motion of non-load instructions, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-pressure\fR" 4
  .IX Item "-fsched-pressure"
  Enable register pressure sensitive insn scheduling before register
  allocation.  This only makes sense when scheduling before register
--- 12309,12325 ----
  registers and where memory load instructions take more than one cycle.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fno\-sched\-interblock\fR 4
  .IX Item "-fno-sched-interblock"
  Disable instruction scheduling across basic blocks, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fno\-sched\-spec\fR 4
  .IX Item "-fno-sched-spec"
! Disable speculative motion of non\-load instructions, which
  is normally enabled when scheduling before register allocation, i.e.
  with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-pressure\fR 4
  .IX Item "-fsched-pressure"
  Enable register pressure sensitive insn scheduling before register
  allocation.  This only makes sense when scheduling before register
*************** allocation is enabled, i.e. with \fB\-fs
*** 12395,12414 ****
  generated code and decrease its size by preventing register pressure
  increase above the number of available hard registers and subsequent
  spills in register allocation.
! .IP "\fB\-fsched\-spec\-load\fR" 4
  .IX Item "-fsched-spec-load"
  Allow speculative motion of some load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
  .IX Item "-fsched-spec-load-dangerous"
  Allow speculative motion of more load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-stalled\-insns\fR" 4
  .IX Item "-fsched-stalled-insns"
  .PD 0
! .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
  .IX Item "-fsched-stalled-insns=n"
  .PD
  Define how many insns (if any) can be moved prematurely from the queue
--- 12328,12347 ----
  generated code and decrease its size by preventing register pressure
  increase above the number of available hard registers and subsequent
  spills in register allocation.
! .IP \fB\-fsched\-spec\-load\fR 4
  .IX Item "-fsched-spec-load"
  Allow speculative motion of some load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-spec\-load\-dangerous\fR 4
  .IX Item "-fsched-spec-load-dangerous"
  Allow speculative motion of more load instructions.  This only makes
  sense when scheduling before register allocation, i.e. with
  \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-stalled\-insns\fR 4
  .IX Item "-fsched-stalled-insns"
  .PD 0
! .IP \fB\-fsched\-stalled\-insns=\fR\fIn\fR 4
  .IX Item "-fsched-stalled-insns=n"
  .PD
  Define how many insns (if any) can be moved prematurely from the queue
*************** prematurely, \fB\-fsched\-stalled\-insns
*** 12418,12427 ****
  on how many queued insns can be moved prematurely.
  \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns=1\fR.
! .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
  .IX Item "-fsched-stalled-insns-dep"
  .PD 0
! .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
  .IX Item "-fsched-stalled-insns-dep=n"
  .PD
  Define how many insn groups (cycles) are examined for a dependency
--- 12351,12360 ----
  on how many queued insns can be moved prematurely.
  \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns=1\fR.
! .IP \fB\-fsched\-stalled\-insns\-dep\fR 4
  .IX Item "-fsched-stalled-insns-dep"
  .PD 0
! .IP \fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR 4
  .IX Item "-fsched-stalled-insns-dep=n"
  .PD
  Define how many insn groups (cycles) are examined for a dependency
*************** and only if \fB\-fsched\-stalled\-insns\
*** 12432,12514 ****
  \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
  \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
! .IP "\fB\-fsched2\-use\-superblocks\fR" 4
  .IX Item "-fsched2-use-superblocks"
  When scheduling after register allocation, use superblock scheduling.
  This allows motion across basic block boundaries,
  resulting in faster schedules.  This option is experimental, as not all machine
! descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
  results from the algorithm.
  .Sp
  This only makes sense when scheduling after register allocation, i.e. with
  \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-group\-heuristic\fR" 4
  .IX Item "-fsched-group-heuristic"
  Enable the group heuristic in the scheduler.  This heuristic favors
  the instruction that belongs to a schedule group.  This is enabled
  by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
  .IX Item "-fsched-critical-path-heuristic"
! Enable the critical-path heuristic in the scheduler.  This heuristic favors
  instructions on the critical path.  This is enabled by default when
  scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
  .IX Item "-fsched-spec-insn-heuristic"
  Enable the speculative instruction heuristic in the scheduler.  This
  heuristic favors speculative instructions with greater dependency weakness.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
  or at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-rank\-heuristic\fR" 4
  .IX Item "-fsched-rank-heuristic"
  Enable the rank heuristic in the scheduler.  This heuristic favors
  the instruction belonging to a basic block with greater size or frequency.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
  .IX Item "-fsched-last-insn-heuristic"
! Enable the last-instruction heuristic in the scheduler.  This heuristic
  favors the instruction that is less dependent on the last instruction
  scheduled.  This is enabled by default when scheduling is enabled,
  i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
  .IX Item "-fsched-dep-count-heuristic"
! Enable the dependent-count heuristic in the scheduler.  This heuristic
  favors the instruction that has more instructions depending on it.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
  .IX Item "-freschedule-modulo-scheduled-loops"
  Modulo scheduling is performed before traditional scheduling.  If a loop
  is modulo scheduled, later scheduling passes may change its schedule.  
  Use this option to control that behavior.
! .IP "\fB\-fselective\-scheduling\fR" 4
  .IX Item "-fselective-scheduling"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the first scheduler pass.
! .IP "\fB\-fselective\-scheduling2\fR" 4
  .IX Item "-fselective-scheduling2"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the second scheduler pass.
! .IP "\fB\-fsel\-sched\-pipelining\fR" 4
  .IX Item "-fsel-sched-pipelining"
  Enable software pipelining of innermost loops during selective scheduling.
  This option has no effect unless one of \fB\-fselective\-scheduling\fR or
  \&\fB\-fselective\-scheduling2\fR is turned on.
! .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
  .IX Item "-fsel-sched-pipelining-outer-loops"
  When pipelining loops during selective scheduling, also pipeline outer loops.
  This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
! .IP "\fB\-fsemantic\-interposition\fR" 4
  .IX Item "-fsemantic-interposition"
! Some object formats, like \s-1ELF,\s0 allow interposing of symbols by the 
  dynamic linker.
! This means that for symbols exported from the \s-1DSO,\s0 the compiler cannot perform
  interprocedural propagation, inlining and other optimizations in anticipation
  that the function or variable in question may change. While this feature is
  useful, for example, to rewrite memory allocation functions by a debugging
--- 12365,12447 ----
  \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
  \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
  \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
! .IP \fB\-fsched2\-use\-superblocks\fR 4
  .IX Item "-fsched2-use-superblocks"
  When scheduling after register allocation, use superblock scheduling.
  This allows motion across basic block boundaries,
  resulting in faster schedules.  This option is experimental, as not all machine
! descriptions used by GCC model the CPU closely enough to avoid unreliable
  results from the algorithm.
  .Sp
  This only makes sense when scheduling after register allocation, i.e. with
  \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-group\-heuristic\fR 4
  .IX Item "-fsched-group-heuristic"
  Enable the group heuristic in the scheduler.  This heuristic favors
  the instruction that belongs to a schedule group.  This is enabled
  by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-critical\-path\-heuristic\fR 4
  .IX Item "-fsched-critical-path-heuristic"
! Enable the critical\-path heuristic in the scheduler.  This heuristic favors
  instructions on the critical path.  This is enabled by default when
  scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
  or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-spec\-insn\-heuristic\fR 4
  .IX Item "-fsched-spec-insn-heuristic"
  Enable the speculative instruction heuristic in the scheduler.  This
  heuristic favors speculative instructions with greater dependency weakness.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
  or at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-rank\-heuristic\fR 4
  .IX Item "-fsched-rank-heuristic"
  Enable the rank heuristic in the scheduler.  This heuristic favors
  the instruction belonging to a basic block with greater size or frequency.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-last\-insn\-heuristic\fR 4
  .IX Item "-fsched-last-insn-heuristic"
! Enable the last\-instruction heuristic in the scheduler.  This heuristic
  favors the instruction that is less dependent on the last instruction
  scheduled.  This is enabled by default when scheduling is enabled,
  i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP \fB\-fsched\-dep\-count\-heuristic\fR 4
  .IX Item "-fsched-dep-count-heuristic"
! Enable the dependent\-count heuristic in the scheduler.  This heuristic
  favors the instruction that has more instructions depending on it.
  This is enabled by default when scheduling is enabled, i.e.
  with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
  at \fB\-O2\fR or higher.
! .IP \fB\-freschedule\-modulo\-scheduled\-loops\fR 4
  .IX Item "-freschedule-modulo-scheduled-loops"
  Modulo scheduling is performed before traditional scheduling.  If a loop
  is modulo scheduled, later scheduling passes may change its schedule.  
  Use this option to control that behavior.
! .IP \fB\-fselective\-scheduling\fR 4
  .IX Item "-fselective-scheduling"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the first scheduler pass.
! .IP \fB\-fselective\-scheduling2\fR 4
  .IX Item "-fselective-scheduling2"
  Schedule instructions using selective scheduling algorithm.  Selective
  scheduling runs instead of the second scheduler pass.
! .IP \fB\-fsel\-sched\-pipelining\fR 4
  .IX Item "-fsel-sched-pipelining"
  Enable software pipelining of innermost loops during selective scheduling.
  This option has no effect unless one of \fB\-fselective\-scheduling\fR or
  \&\fB\-fselective\-scheduling2\fR is turned on.
! .IP \fB\-fsel\-sched\-pipelining\-outer\-loops\fR 4
  .IX Item "-fsel-sched-pipelining-outer-loops"
  When pipelining loops during selective scheduling, also pipeline outer loops.
  This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
! .IP \fB\-fsemantic\-interposition\fR 4
  .IX Item "-fsemantic-interposition"
! Some object formats, like ELF, allow interposing of symbols by the 
  dynamic linker.
! This means that for symbols exported from the DSO, the compiler cannot perform
  interprocedural propagation, inlining and other optimizations in anticipation
  that the function or variable in question may change. While this feature is
  useful, for example, to rewrite memory allocation functions by a debugging
*************** for variables, the constructor of the va
*** 12521,12538 ****
  has no effect for functions explicitly declared inline 
  (where it is never allowed for interposition to change semantics) 
  and for symbols explicitly declared weak.
! .IP "\fB\-fshrink\-wrap\fR" 4
  .IX Item "-fshrink-wrap"
  Emit function prologues only before parts of the function that need it,
  rather than at the top of the function.  This flag is enabled by default at
  \&\fB\-O\fR and higher.
! .IP "\fB\-fshrink\-wrap\-separate\fR" 4
  .IX Item "-fshrink-wrap-separate"
! Shrink-wrap separate parts of the prologue and epilogue separately, so that
  those parts are only executed when needed.
  This option is on by default, but has no effect unless \fB\-fshrink\-wrap\fR
  is also turned on and the target supports this.
! .IP "\fB\-fcaller\-saves\fR" 4
  .IX Item "-fcaller-saves"
  Enable allocation of values to registers that are clobbered by
  function calls, by emitting extra instructions to save and restore the
--- 12454,12471 ----
  has no effect for functions explicitly declared inline 
  (where it is never allowed for interposition to change semantics) 
  and for symbols explicitly declared weak.
! .IP \fB\-fshrink\-wrap\fR 4
  .IX Item "-fshrink-wrap"
  Emit function prologues only before parts of the function that need it,
  rather than at the top of the function.  This flag is enabled by default at
  \&\fB\-O\fR and higher.
! .IP \fB\-fshrink\-wrap\-separate\fR 4
  .IX Item "-fshrink-wrap-separate"
! Shrink\-wrap separate parts of the prologue and epilogue separately, so that
  those parts are only executed when needed.
  This option is on by default, but has no effect unless \fB\-fshrink\-wrap\fR
  is also turned on and the target supports this.
! .IP \fB\-fcaller\-saves\fR 4
  .IX Item "-fcaller-saves"
  Enable allocation of values to registers that are clobbered by
  function calls, by emitting extra instructions to save and restore the
*************** registers around such calls.  Such alloc
*** 12540,12555 ****
  seems to result in better code.
  .Sp
  This option is always enabled by default on certain machines, usually
! those which have no call-preserved registers to use instead.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fcombine\-stack\-adjustments\fR" 4
  .IX Item "-fcombine-stack-adjustments"
  Tracks stack adjustments (pushes and pops) and stack memory references
  and then tries to find ways to combine them.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-ra\fR" 4
  .IX Item "-fipa-ra"
  Use caller save registers for allocation if those registers are not used by
  any called function.  In that case it is not necessary to save and restore
--- 12473,12488 ----
  seems to result in better code.
  .Sp
  This option is always enabled by default on certain machines, usually
! those which have no call\-preserved registers to use instead.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fcombine\-stack\-adjustments\fR 4
  .IX Item "-fcombine-stack-adjustments"
  Tracks stack adjustments (pushes and pops) and stack memory references
  and then tries to find ways to combine them.
  .Sp
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-ra\fR 4
  .IX Item "-fipa-ra"
  Use caller save registers for allocation if those registers are not used by
  any called function.  In that case it is not necessary to save and restore
*************** same compilation unit as current functio
*** 12558,12641 ****
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, however the option
  is disabled if generated code will be instrumented for profiling
! (\fB\-p\fR, or \fB\-pg\fR) or if callee's register usage cannot be known
  exactly (this happens on targets that do not expose prologues
! and epilogues in \s-1RTL\s0).
! .IP "\fB\-fconserve\-stack\fR" 4
  .IX Item "-fconserve-stack"
  Attempt to minimize stack usage.  The compiler attempts to use less
  stack space, even if that makes the program slower.  This option
! implies setting the \fBlarge-stack-frame\fR parameter to 100
! and the \fBlarge-stack-frame-growth\fR parameter to 400.
! .IP "\fB\-ftree\-reassoc\fR" 4
  .IX Item "-ftree-reassoc"
  Perform reassociation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-fcode\-hoisting\fR" 4
  .IX Item "-fcode-hoisting"
  Perform code hoisting.  Code hoisting tries to move the
  evaluation of expressions executed on all paths to the function exit
  as early as possible.  This is especially useful as a code size
  optimization, but it often helps for code speed as well.
  This flag is enabled by default at \fB\-O2\fR and higher.
! .IP "\fB\-ftree\-pre\fR" 4
  .IX Item "-ftree-pre"
! Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
  enabled by default at \fB\-O2\fR and \fB\-O3\fR.
! .IP "\fB\-ftree\-partial\-pre\fR" 4
  .IX Item "-ftree-partial-pre"
! Make partial redundancy elimination (\s-1PRE\s0) more aggressive.  This flag is
  enabled by default at \fB\-O3\fR.
! .IP "\fB\-ftree\-forwprop\fR" 4
  .IX Item "-ftree-forwprop"
  Perform forward propagation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-fre\fR" 4
  .IX Item "-ftree-fre"
! Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
! between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
  that are computed on all paths leading to the redundant computation.
! This analysis is faster than \s-1PRE,\s0 though it exposes fewer redundancies.
  This flag is enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-phiprop\fR" 4
  .IX Item "-ftree-phiprop"
  Perform hoisting of loads from conditional pointers on trees.  This
  pass is enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fhoist\-adjacent\-loads\fR" 4
  .IX Item "-fhoist-adjacent-loads"
! Speculatively hoist loads from both branches of an if-then-else if the
  loads are from adjacent locations in the same structure and the target
  architecture has a conditional move instruction.  This flag is enabled
  by default at \fB\-O2\fR and higher.
! .IP "\fB\-ftree\-copy\-prop\fR" 4
  .IX Item "-ftree-copy-prop"
  Perform copy propagation on trees.  This pass eliminates unnecessary
  copy operations.  This flag is enabled by default at \fB\-O1\fR and
  higher.
! .IP "\fB\-fipa\-pure\-const\fR" 4
  .IX Item "-fipa-pure-const"
  Discover which functions are pure or constant.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-reference\fR" 4
  .IX Item "-fipa-reference"
  Discover which static variables do not escape the
  compilation unit.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-reference\-addressable\fR" 4
  .IX Item "-fipa-reference-addressable"
! Discover read-only, write-only and non-addressable static variables.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-stack\-alignment\fR" 4
  .IX Item "-fipa-stack-alignment"
  Reduce stack alignment on call sites if possible.
  Enabled by default.
! .IP "\fB\-fipa\-pta\fR" 4
  .IX Item "-fipa-pta"
  Perform interprocedural pointer analysis and interprocedural modification
  and reference analysis.  This option can cause excessive memory and
! compile-time usage on large compilation units.  It is not enabled by
  default at any optimization level.
! .IP "\fB\-fipa\-profile\fR" 4
  .IX Item "-fipa-profile"
  Perform interprocedural profile propagation.  The functions called only from
  cold functions are marked as cold. Also functions executed once (such as
--- 12491,12574 ----
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, however the option
  is disabled if generated code will be instrumented for profiling
! (\fB\-p\fR, or \fB\-pg\fR) or if callee\*(Aqs register usage cannot be known
  exactly (this happens on targets that do not expose prologues
! and epilogues in RTL).
! .IP \fB\-fconserve\-stack\fR 4
  .IX Item "-fconserve-stack"
  Attempt to minimize stack usage.  The compiler attempts to use less
  stack space, even if that makes the program slower.  This option
! implies setting the \fBlarge\-stack\-frame\fR parameter to 100
! and the \fBlarge\-stack\-frame\-growth\fR parameter to 400.
! .IP \fB\-ftree\-reassoc\fR 4
  .IX Item "-ftree-reassoc"
  Perform reassociation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-fcode\-hoisting\fR 4
  .IX Item "-fcode-hoisting"
  Perform code hoisting.  Code hoisting tries to move the
  evaluation of expressions executed on all paths to the function exit
  as early as possible.  This is especially useful as a code size
  optimization, but it often helps for code speed as well.
  This flag is enabled by default at \fB\-O2\fR and higher.
! .IP \fB\-ftree\-pre\fR 4
  .IX Item "-ftree-pre"
! Perform partial redundancy elimination (PRE) on trees.  This flag is
  enabled by default at \fB\-O2\fR and \fB\-O3\fR.
! .IP \fB\-ftree\-partial\-pre\fR 4
  .IX Item "-ftree-partial-pre"
! Make partial redundancy elimination (PRE) more aggressive.  This flag is
  enabled by default at \fB\-O3\fR.
! .IP \fB\-ftree\-forwprop\fR 4
  .IX Item "-ftree-forwprop"
  Perform forward propagation on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-fre\fR 4
  .IX Item "-ftree-fre"
! Perform full redundancy elimination (FRE) on trees.  The difference
! between FRE and PRE is that FRE only considers expressions
  that are computed on all paths leading to the redundant computation.
! This analysis is faster than PRE, though it exposes fewer redundancies.
  This flag is enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-phiprop\fR 4
  .IX Item "-ftree-phiprop"
  Perform hoisting of loads from conditional pointers on trees.  This
  pass is enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fhoist\-adjacent\-loads\fR 4
  .IX Item "-fhoist-adjacent-loads"
! Speculatively hoist loads from both branches of an if\-then\-else if the
  loads are from adjacent locations in the same structure and the target
  architecture has a conditional move instruction.  This flag is enabled
  by default at \fB\-O2\fR and higher.
! .IP \fB\-ftree\-copy\-prop\fR 4
  .IX Item "-ftree-copy-prop"
  Perform copy propagation on trees.  This pass eliminates unnecessary
  copy operations.  This flag is enabled by default at \fB\-O1\fR and
  higher.
! .IP \fB\-fipa\-pure\-const\fR 4
  .IX Item "-fipa-pure-const"
  Discover which functions are pure or constant.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-reference\fR 4
  .IX Item "-fipa-reference"
  Discover which static variables do not escape the
  compilation unit.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-reference\-addressable\fR 4
  .IX Item "-fipa-reference-addressable"
! Discover read\-only, write\-only and non\-addressable static variables.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-stack\-alignment\fR 4
  .IX Item "-fipa-stack-alignment"
  Reduce stack alignment on call sites if possible.
  Enabled by default.
! .IP \fB\-fipa\-pta\fR 4
  .IX Item "-fipa-pta"
  Perform interprocedural pointer analysis and interprocedural modification
  and reference analysis.  This option can cause excessive memory and
! compile\-time usage on large compilation units.  It is not enabled by
  default at any optimization level.
! .IP \fB\-fipa\-profile\fR 4
  .IX Item "-fipa-profile"
  Perform interprocedural profile propagation.  The functions called only from
  cold functions are marked as cold. Also functions executed once (such as
*************** cold functions are marked as cold. Also
*** 12643,12655 ****
  identified. Cold functions and loop less parts of functions executed once are
  then optimized for size.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-modref\fR" 4
  .IX Item "-fipa-modref"
  Perform interprocedural mod/ref analysis.  This optimization analyzes the side
  effects of functions (memory locations that are modified or referenced) and
  enables better optimization across the function call boundary.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fipa\-cp\fR" 4
  .IX Item "-fipa-cp"
  Perform interprocedural constant propagation.
  This optimization analyzes the program to determine when values passed
--- 12576,12588 ----
  identified. Cold functions and loop less parts of functions executed once are
  then optimized for size.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-modref\fR 4
  .IX Item "-fipa-modref"
  Perform interprocedural mod/ref analysis.  This optimization analyzes the side
  effects of functions (memory locations that are modified or referenced) and
  enables better optimization across the function call boundary.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fipa\-cp\fR 4
  .IX Item "-fipa-cp"
  Perform interprocedural constant propagation.
  This optimization analyzes the program to determine when values passed
*************** This optimization can substantially incr
*** 12658,12664 ****
  if the application has constants passed to functions.
  This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fipa\-cp\-clone\fR" 4
  .IX Item "-fipa-cp-clone"
  Perform function cloning to make interprocedural constant propagation stronger.
  When enabled, interprocedural constant propagation performs function cloning
--- 12591,12597 ----
  if the application has constants passed to functions.
  This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fipa\-cp\-clone\fR 4
  .IX Item "-fipa-cp-clone"
  Perform function cloning to make interprocedural constant propagation stronger.
  When enabled, interprocedural constant propagation performs function cloning
*************** it may significantly increase code size
*** 12668,12724 ****
  (see \fB\-\-param ipa\-cp\-unit\-growth=\fR\fIvalue\fR).
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fipa\-bit\-cp\fR" 4
  .IX Item "-fipa-bit-cp"
  When enabled, perform interprocedural bitwise constant
  propagation. This flag is enabled by default at \fB\-O2\fR and
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
  It requires that \fB\-fipa\-cp\fR is enabled.
! .IP "\fB\-fipa\-vrp\fR" 4
  .IX Item "-fipa-vrp"
  When enabled, perform interprocedural propagation of value
  ranges. This flag is enabled by default at \fB\-O2\fR. It requires
  that \fB\-fipa\-cp\fR is enabled.
! .IP "\fB\-fipa\-icf\fR" 4
  .IX Item "-fipa-icf"
! Perform Identical Code Folding for functions and read-only variables.
  The optimization reduces code size and may disturb unwind stacks by replacing
  a function by equivalent one with a different name. The optimization works
! more effectively with link-time optimization enabled.
  .Sp
! Although the behavior is similar to the Gold Linker's \s-1ICF\s0 optimization, \s-1GCC ICF\s0
  works on different levels and thus the optimizations are not same \- there are
! equivalences that are found only by \s-1GCC\s0 and equivalences found only by Gold.
  .Sp
  This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
! .IP "\fB\-flive\-patching=\fR\fIlevel\fR" 4
  .IX Item "-flive-patching=level"
! Control \s-1GCC\s0's optimizations to produce output suitable for live-patching.
  .Sp
! If the compiler's optimization uses a function's body or information extracted
  from its body to optimize/change another function, the latter is called an
  impacted function of the former.  If a function is patched, its impacted
  functions should be patched too.
  .Sp
! The impacted functions are determined by the compiler's interprocedural
  optimizations.  For example, a caller is impacted when inlining a function
  into its caller,
  cloning a function and changing its caller to call this new clone,
! or extracting a function's pureness/constness information to optimize
  its direct or indirect callers, etc.
  .Sp
! Usually, the more \s-1IPA\s0 optimizations enabled, the larger the number of
  impacted functions for each function.  In order to control the number of
  impacted functions and more easily compute the list of impacted function,
! \&\s-1IPA\s0 optimizations can be partially enabled at two different levels.
  .Sp
  The \fIlevel\fR argument should be one of the following:
  .RS 4
! .IP "\fBinline-clone\fR" 4
  .IX Item "inline-clone"
  Only enable inlining and cloning optimizations, which includes inlining,
  cloning, interprocedural scalar replacement of aggregates and partial inlining.
! As a result, when patching a function, all its callers and its clones'
  callers are impacted, therefore need to be patched as well.
  .Sp
  \&\fB\-flive\-patching=inline\-clone\fR disables the following optimization flags:
--- 12601,12657 ----
  (see \fB\-\-param ipa\-cp\-unit\-growth=\fR\fIvalue\fR).
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fipa\-bit\-cp\fR 4
  .IX Item "-fipa-bit-cp"
  When enabled, perform interprocedural bitwise constant
  propagation. This flag is enabled by default at \fB\-O2\fR and
  by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
  It requires that \fB\-fipa\-cp\fR is enabled.
! .IP \fB\-fipa\-vrp\fR 4
  .IX Item "-fipa-vrp"
  When enabled, perform interprocedural propagation of value
  ranges. This flag is enabled by default at \fB\-O2\fR. It requires
  that \fB\-fipa\-cp\fR is enabled.
! .IP \fB\-fipa\-icf\fR 4
  .IX Item "-fipa-icf"
! Perform Identical Code Folding for functions and read\-only variables.
  The optimization reduces code size and may disturb unwind stacks by replacing
  a function by equivalent one with a different name. The optimization works
! more effectively with link\-time optimization enabled.
  .Sp
! Although the behavior is similar to the Gold Linker\*(Aqs ICF optimization, GCC ICF
  works on different levels and thus the optimizations are not same \- there are
! equivalences that are found only by GCC and equivalences found only by Gold.
  .Sp
  This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
! .IP \fB\-flive\-patching=\fR\fIlevel\fR 4
  .IX Item "-flive-patching=level"
! Control GCC\*(Aqs optimizations to produce output suitable for live\-patching.
  .Sp
! If the compiler\*(Aqs optimization uses a function\*(Aqs body or information extracted
  from its body to optimize/change another function, the latter is called an
  impacted function of the former.  If a function is patched, its impacted
  functions should be patched too.
  .Sp
! The impacted functions are determined by the compiler\*(Aqs interprocedural
  optimizations.  For example, a caller is impacted when inlining a function
  into its caller,
  cloning a function and changing its caller to call this new clone,
! or extracting a function\*(Aqs pureness/constness information to optimize
  its direct or indirect callers, etc.
  .Sp
! Usually, the more IPA optimizations enabled, the larger the number of
  impacted functions for each function.  In order to control the number of
  impacted functions and more easily compute the list of impacted function,
! IPA optimizations can be partially enabled at two different levels.
  .Sp
  The \fIlevel\fR argument should be one of the following:
  .RS 4
! .IP \fBinline\-clone\fR 4
  .IX Item "inline-clone"
  Only enable inlining and cloning optimizations, which includes inlining,
  cloning, interprocedural scalar replacement of aggregates and partial inlining.
! As a result, when patching a function, all its callers and its clones\*(Aq
  callers are impacted, therefore need to be patched as well.
  .Sp
  \&\fB\-flive\-patching=inline\-clone\fR disables the following optimization flags:
*************** callers are impacted, therefore need to
*** 12727,12733 ****
  \&\-fipa\-bit\-cp  \-fipa\-vrp  \-fipa\-pure\-const
  \&\-fipa\-reference\-addressable
  \&\-fipa\-stack\-alignment \-fipa\-modref\fR
! .IP "\fBinline-only-static\fR" 4
  .IX Item "inline-only-static"
  Only enable inlining of static functions.
  As a result, when patching a static function, all its callers are impacted
--- 12660,12666 ----
  \&\-fipa\-bit\-cp  \-fipa\-vrp  \-fipa\-pure\-const
  \&\-fipa\-reference\-addressable
  \&\-fipa\-stack\-alignment \-fipa\-modref\fR
! .IP \fBinline\-only\-static\fR 4
  .IX Item "inline-only-static"
  Only enable inlining of static functions.
  As a result, when patching a static function, all its callers are impacted
*************** optimization flags:
*** 12742,12898 ****
  .RS 4
  .Sp
  When \fB\-flive\-patching\fR is specified without any value, the default value
! is \fIinline-clone\fR.
  .Sp
  This flag is disabled by default.
  .Sp
! Note that \fB\-flive\-patching\fR is not supported with link-time optimization
  (\fB\-flto\fR).
  .RE
! .IP "\fB\-fisolate\-erroneous\-paths\-dereference\fR" 4
  .IX Item "-fisolate-erroneous-paths-dereference"
  Detect paths that trigger erroneous or undefined behavior due to
  dereferencing a null pointer.  Isolate those paths from the main control
  flow and turn the statement with erroneous or undefined behavior into a trap.
  This flag is enabled by default at \fB\-O2\fR and higher and depends on
  \&\fB\-fdelete\-null\-pointer\-checks\fR also being enabled.
! .IP "\fB\-fisolate\-erroneous\-paths\-attribute\fR" 4
  .IX Item "-fisolate-erroneous-paths-attribute"
  Detect paths that trigger erroneous or undefined behavior due to a null value
  being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
  attribute.  Isolate those paths from the main control flow and turn the
  statement with erroneous or undefined behavior into a trap.  This is not
  currently enabled, but may be enabled by \fB\-O2\fR in the future.
! .IP "\fB\-ftree\-sink\fR" 4
  .IX Item "-ftree-sink"
  Perform forward store motion on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-bit\-ccp\fR" 4
  .IX Item "-ftree-bit-ccp"
  Perform sparse conditional bit constant propagation on trees and propagate
  pointer alignment information.
  This pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher, except for \fB\-Og\fR.
  It requires that \fB\-ftree\-ccp\fR is enabled.
! .IP "\fB\-ftree\-ccp\fR" 4
  .IX Item "-ftree-ccp"
! Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
  pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-fssa\-backprop\fR" 4
  .IX Item "-fssa-backprop"
  Propagate information about uses of a value up the definition chain
  in order to simplify the definitions.  For example, this pass strips
  sign operations if the sign of a value never matters.  The flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fssa\-phiopt\fR" 4
  .IX Item "-fssa-phiopt"
! Perform pattern matching on \s-1SSA PHI\s0 nodes to optimize conditional
  code.  This pass is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP "\fB\-ftree\-switch\-conversion\fR" 4
  .IX Item "-ftree-switch-conversion"
  Perform conversion of simple initializations in a switch to
  initializations from a scalar array.  This flag is enabled by default
  at \fB\-O2\fR and higher.
! .IP "\fB\-ftree\-tail\-merge\fR" 4
  .IX Item "-ftree-tail-merge"
  Look for identical code sequences.  When found, replace one with a jump to the
  other.  This optimization is known as tail merging or cross jumping.  This flag
  is enabled by default at \fB\-O2\fR and higher.  The compilation time
  in this pass can
! be limited using \fBmax-tail-merge-comparisons\fR parameter and
! \&\fBmax-tail-merge-iterations\fR parameter.
! .IP "\fB\-ftree\-dce\fR" 4
  .IX Item "-ftree-dce"
! Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
  default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
  .IX Item "-ftree-builtin-call-dce"
! Perform conditional dead code elimination (\s-1DCE\s0) for calls to built-in functions
  that may set \f(CW\*(C`errno\*(C'\fR but are otherwise free of side effects.  This flag is
  enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
  specified.
! .IP "\fB\-ffinite\-loops\fR" 4
  .IX Item "-ffinite-loops"
  Assume that a loop with an exit will eventually take the exit and not loop
  indefinitely.  This allows the compiler to remove loops that otherwise have
! no side-effects, not considering eventual endless looping as such.
  .Sp
! This option is enabled by default at \fB\-O2\fR for \*(C+ with \-std=c++11
  or higher.
! .IP "\fB\-ftree\-dominator\-opts\fR" 4
  .IX Item "-ftree-dominator-opts"
  Perform a variety of simple scalar cleanups (constant/copy
  propagation, redundancy elimination, range propagation and expression
  simplification) based on a dominator tree traversal.  This also
  performs jump threading (to reduce jumps to jumps). This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-dse\fR" 4
  .IX Item "-ftree-dse"
! Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
  a memory location that is later overwritten by another store without
  any intervening loads.  In this case the earlier store can be deleted.  This
  flag is enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-ch\fR" 4
  .IX Item "-ftree-ch"
  Perform loop header copying on trees.  This is beneficial since it increases
  effectiveness of code motion optimizations.  It also saves one jump.  This flag
  is enabled by default at \fB\-O1\fR and higher.  It is not enabled
  for \fB\-Os\fR, since it usually increases code size.
! .IP "\fB\-ftree\-loop\-optimize\fR" 4
  .IX Item "-ftree-loop-optimize"
  Perform loop optimizations on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-loop\-linear\fR" 4
  .IX Item "-ftree-loop-linear"
  .PD 0
! .IP "\fB\-floop\-strip\-mine\fR" 4
  .IX Item "-floop-strip-mine"
! .IP "\fB\-floop\-block\fR" 4
  .IX Item "-floop-block"
  .PD
  Perform loop nest optimizations.  Same as
! \&\fB\-floop\-nest\-optimize\fR.  To use this code transformation, \s-1GCC\s0 has
  to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
  transformation infrastructure.
! .IP "\fB\-fgraphite\-identity\fR" 4
  .IX Item "-fgraphite-identity"
  Enable the identity transformation for graphite.  For every SCoP we generate
  the polyhedral representation and transform it back to gimple.  Using
  \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
! \&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
  are also performed by the code generator isl, like index splitting and
  dead code elimination in loops.
! .IP "\fB\-floop\-nest\-optimize\fR" 4
  .IX Item "-floop-nest-optimize"
  Enable the isl based loop nest optimizer.  This is a generic loop nest
  optimizer based on the Pluto optimization algorithms.  It calculates a loop
! structure optimized for data-locality and parallelism.  This option
  is experimental.
! .IP "\fB\-floop\-parallelize\-all\fR" 4
  .IX Item "-floop-parallelize-all"
  Use the Graphite data dependence analysis to identify loops that can
  be parallelized.  Parallelize all the loops that can be analyzed to
  not contain loop carried dependences without checking that it is
  profitable to parallelize the loops.
! .IP "\fB\-ftree\-coalesce\-vars\fR" 4
  .IX Item "-ftree-coalesce-vars"
! While transforming the program out of the \s-1SSA\s0 representation, attempt to
! reduce copying by coalescing versions of different user-defined
  variables, instead of just compiler temporaries.  This may severely
  limit the ability to debug an optimized program compiled with
  \&\fB\-fno\-var\-tracking\-assignments\fR.  In the negated form, this flag
! prevents \s-1SSA\s0 coalescing of user variables.  This option is enabled by
  default if optimization is enabled, and it does very little otherwise.
! .IP "\fB\-ftree\-loop\-if\-convert\fR" 4
  .IX Item "-ftree-loop-if-convert"
  Attempt to transform conditional jumps in the innermost loops to
! branch-less equivalents.  The intent is to remove control-flow from
  the innermost loops in order to improve the ability of the
  vectorization pass to handle these loops.  This is enabled by default
  if vectorization is enabled.
! .IP "\fB\-ftree\-loop\-distribution\fR" 4
  .IX Item "-ftree-loop-distribution"
  Perform loop distribution.  This flag can improve cache performance on
  big loop bodies and allow further loop optimizations, like
--- 12675,12831 ----
  .RS 4
  .Sp
  When \fB\-flive\-patching\fR is specified without any value, the default value
! is \fIinline\-clone\fR.
  .Sp
  This flag is disabled by default.
  .Sp
! Note that \fB\-flive\-patching\fR is not supported with link\-time optimization
  (\fB\-flto\fR).
  .RE
! .IP \fB\-fisolate\-erroneous\-paths\-dereference\fR 4
  .IX Item "-fisolate-erroneous-paths-dereference"
  Detect paths that trigger erroneous or undefined behavior due to
  dereferencing a null pointer.  Isolate those paths from the main control
  flow and turn the statement with erroneous or undefined behavior into a trap.
  This flag is enabled by default at \fB\-O2\fR and higher and depends on
  \&\fB\-fdelete\-null\-pointer\-checks\fR also being enabled.
! .IP \fB\-fisolate\-erroneous\-paths\-attribute\fR 4
  .IX Item "-fisolate-erroneous-paths-attribute"
  Detect paths that trigger erroneous or undefined behavior due to a null value
  being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
  attribute.  Isolate those paths from the main control flow and turn the
  statement with erroneous or undefined behavior into a trap.  This is not
  currently enabled, but may be enabled by \fB\-O2\fR in the future.
! .IP \fB\-ftree\-sink\fR 4
  .IX Item "-ftree-sink"
  Perform forward store motion on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-bit\-ccp\fR 4
  .IX Item "-ftree-bit-ccp"
  Perform sparse conditional bit constant propagation on trees and propagate
  pointer alignment information.
  This pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher, except for \fB\-Og\fR.
  It requires that \fB\-ftree\-ccp\fR is enabled.
! .IP \fB\-ftree\-ccp\fR 4
  .IX Item "-ftree-ccp"
! Perform sparse conditional constant propagation (CCP) on trees.  This
  pass only operates on local scalar variables and is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-fssa\-backprop\fR 4
  .IX Item "-fssa-backprop"
  Propagate information about uses of a value up the definition chain
  in order to simplify the definitions.  For example, this pass strips
  sign operations if the sign of a value never matters.  The flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fssa\-phiopt\fR 4
  .IX Item "-fssa-phiopt"
! Perform pattern matching on SSA PHI nodes to optimize conditional
  code.  This pass is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP \fB\-ftree\-switch\-conversion\fR 4
  .IX Item "-ftree-switch-conversion"
  Perform conversion of simple initializations in a switch to
  initializations from a scalar array.  This flag is enabled by default
  at \fB\-O2\fR and higher.
! .IP \fB\-ftree\-tail\-merge\fR 4
  .IX Item "-ftree-tail-merge"
  Look for identical code sequences.  When found, replace one with a jump to the
  other.  This optimization is known as tail merging or cross jumping.  This flag
  is enabled by default at \fB\-O2\fR and higher.  The compilation time
  in this pass can
! be limited using \fBmax\-tail\-merge\-comparisons\fR parameter and
! \&\fBmax\-tail\-merge\-iterations\fR parameter.
! .IP \fB\-ftree\-dce\fR 4
  .IX Item "-ftree-dce"
! Perform dead code elimination (DCE) on trees.  This flag is enabled by
  default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-builtin\-call\-dce\fR 4
  .IX Item "-ftree-builtin-call-dce"
! Perform conditional dead code elimination (DCE) for calls to built\-in functions
  that may set \f(CW\*(C`errno\*(C'\fR but are otherwise free of side effects.  This flag is
  enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
  specified.
! .IP \fB\-ffinite\-loops\fR 4
  .IX Item "-ffinite-loops"
  Assume that a loop with an exit will eventually take the exit and not loop
  indefinitely.  This allows the compiler to remove loops that otherwise have
! no side\-effects, not considering eventual endless looping as such.
  .Sp
! This option is enabled by default at \fB\-O2\fR for C++ with \-std=c++11
  or higher.
! .IP \fB\-ftree\-dominator\-opts\fR 4
  .IX Item "-ftree-dominator-opts"
  Perform a variety of simple scalar cleanups (constant/copy
  propagation, redundancy elimination, range propagation and expression
  simplification) based on a dominator tree traversal.  This also
  performs jump threading (to reduce jumps to jumps). This flag is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-dse\fR 4
  .IX Item "-ftree-dse"
! Perform dead store elimination (DSE) on trees.  A dead store is a store into
  a memory location that is later overwritten by another store without
  any intervening loads.  In this case the earlier store can be deleted.  This
  flag is enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-ch\fR 4
  .IX Item "-ftree-ch"
  Perform loop header copying on trees.  This is beneficial since it increases
  effectiveness of code motion optimizations.  It also saves one jump.  This flag
  is enabled by default at \fB\-O1\fR and higher.  It is not enabled
  for \fB\-Os\fR, since it usually increases code size.
! .IP \fB\-ftree\-loop\-optimize\fR 4
  .IX Item "-ftree-loop-optimize"
  Perform loop optimizations on trees.  This flag is enabled by default
  at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-loop\-linear\fR 4
  .IX Item "-ftree-loop-linear"
  .PD 0
! .IP \fB\-floop\-strip\-mine\fR 4
  .IX Item "-floop-strip-mine"
! .IP \fB\-floop\-block\fR 4
  .IX Item "-floop-block"
  .PD
  Perform loop nest optimizations.  Same as
! \&\fB\-floop\-nest\-optimize\fR.  To use this code transformation, GCC has
  to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
  transformation infrastructure.
! .IP \fB\-fgraphite\-identity\fR 4
  .IX Item "-fgraphite-identity"
  Enable the identity transformation for graphite.  For every SCoP we generate
  the polyhedral representation and transform it back to gimple.  Using
  \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
! GIMPLE \-> GRAPHITE \-> GIMPLE transformation.  Some minimal optimizations
  are also performed by the code generator isl, like index splitting and
  dead code elimination in loops.
! .IP \fB\-floop\-nest\-optimize\fR 4
  .IX Item "-floop-nest-optimize"
  Enable the isl based loop nest optimizer.  This is a generic loop nest
  optimizer based on the Pluto optimization algorithms.  It calculates a loop
! structure optimized for data\-locality and parallelism.  This option
  is experimental.
! .IP \fB\-floop\-parallelize\-all\fR 4
  .IX Item "-floop-parallelize-all"
  Use the Graphite data dependence analysis to identify loops that can
  be parallelized.  Parallelize all the loops that can be analyzed to
  not contain loop carried dependences without checking that it is
  profitable to parallelize the loops.
! .IP \fB\-ftree\-coalesce\-vars\fR 4
  .IX Item "-ftree-coalesce-vars"
! While transforming the program out of the SSA representation, attempt to
! reduce copying by coalescing versions of different user\-defined
  variables, instead of just compiler temporaries.  This may severely
  limit the ability to debug an optimized program compiled with
  \&\fB\-fno\-var\-tracking\-assignments\fR.  In the negated form, this flag
! prevents SSA coalescing of user variables.  This option is enabled by
  default if optimization is enabled, and it does very little otherwise.
! .IP \fB\-ftree\-loop\-if\-convert\fR 4
  .IX Item "-ftree-loop-if-convert"
  Attempt to transform conditional jumps in the innermost loops to
! branch\-less equivalents.  The intent is to remove control\-flow from
  the innermost loops in order to improve the ability of the
  vectorization pass to handle these loops.  This is enabled by default
  if vectorization is enabled.
! .IP \fB\-ftree\-loop\-distribution\fR 4
  .IX Item "-ftree-loop-distribution"
  Perform loop distribution.  This flag can improve cache performance on
  big loop bodies and allow further loop optimizations, like
*************** is transformed to
*** 12918,12924 ****
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
  .IX Item "-ftree-loop-distribute-patterns"
  Perform loop distribution of patterns that can be code generated with
  calls to a library.  This flag is enabled by default at \fB\-O2\fR and
--- 12851,12857 ----
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-ftree\-loop\-distribute\-patterns\fR 4
  .IX Item "-ftree-loop-distribute-patterns"
  Perform loop distribution of patterns that can be code generated with
  calls to a library.  This flag is enabled by default at \fB\-O2\fR and
*************** is transformed to
*** 12946,12952 ****
  .Ve
  .Sp
  and the initialization loop is transformed into a call to memset zero.
! .IP "\fB\-floop\-interchange\fR" 4
  .IX Item "-floop-interchange"
  Perform loop interchange outside of graphite.  This flag can improve cache
  performance on loop nest and allow further loop optimizations, like
--- 12879,12885 ----
  .Ve
  .Sp
  and the initialization loop is transformed into a call to memset zero.
! .IP \fB\-floop\-interchange\fR 4
  .IX Item "-floop-interchange"
  Perform loop interchange outside of graphite.  This flag can improve cache
  performance on loop nest and allow further loop optimizations, like
*************** is transformed to
*** 12970,12996 ****
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-floop\-unroll\-and\-jam\fR" 4
  .IX Item "-floop-unroll-and-jam"
  Apply unroll and jam transformations on feasible loops.  In a loop
  nest this unrolls the outer loop by some factor and fuses the resulting
  multiple inner loops.  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftree\-loop\-im\fR" 4
  .IX Item "-ftree-loop-im"
  Perform loop invariant motion on trees.  This pass moves only invariants that
! are hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
  nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
  operands of conditions that are invariant out of the loop, so that we can use
  just trivial invariantness analysis in loop unswitching.  The pass also includes
  store motion.
! .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
  .IX Item "-ftree-loop-ivcanon"
  Create a canonical counter for number of iterations in loops for which
  determining number of iterations requires complicated analysis.  Later
  optimizations then may determine the number easily.  Useful especially
  in connection with unrolling.
! .IP "\fB\-ftree\-scev\-cprop\fR" 4
  .IX Item "-ftree-scev-cprop"
  Perform final value replacement.  If a variable is modified in a loop
  in such a way that its value when exiting the loop can be determined using
--- 12903,12929 ----
  .Sp
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-floop\-unroll\-and\-jam\fR 4
  .IX Item "-floop-unroll-and-jam"
  Apply unroll and jam transformations on feasible loops.  In a loop
  nest this unrolls the outer loop by some factor and fuses the resulting
  multiple inner loops.  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-ftree\-loop\-im\fR 4
  .IX Item "-ftree-loop-im"
  Perform loop invariant motion on trees.  This pass moves only invariants that
! are hard to handle at RTL level (function calls, operations that expand to
  nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
  operands of conditions that are invariant out of the loop, so that we can use
  just trivial invariantness analysis in loop unswitching.  The pass also includes
  store motion.
! .IP \fB\-ftree\-loop\-ivcanon\fR 4
  .IX Item "-ftree-loop-ivcanon"
  Create a canonical counter for number of iterations in loops for which
  determining number of iterations requires complicated analysis.  Later
  optimizations then may determine the number easily.  Useful especially
  in connection with unrolling.
! .IP \fB\-ftree\-scev\-cprop\fR 4
  .IX Item "-ftree-scev-cprop"
  Perform final value replacement.  If a variable is modified in a loop
  in such a way that its value when exiting the loop can be determined using
*************** only its initial value and the number of
*** 12998,13070 ****
  the final value by such a computation, provided it is sufficiently cheap.
  This reduces data dependencies and may allow further simplifications.
  Enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-fivopts\fR" 4
  .IX Item "-fivopts"
  Perform induction variable optimizations (strength reduction, induction
  variable merging and induction variable elimination) on trees.
! .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
  .IX Item "-ftree-parallelize-loops=n"
  Parallelize loops, i.e., split their iteration space to run in n threads.
  This is only possible for loops whose iterations are independent
  and can be arbitrarily reordered.  The optimization is only
! profitable on multiprocessor machines, for loops that are CPU-intensive,
  rather than constrained e.g. by memory bandwidth.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets
  that have support for \fB\-pthread\fR.
! .IP "\fB\-ftree\-pta\fR" 4
  .IX Item "-ftree-pta"
! Perform function-local points-to analysis on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP "\fB\-ftree\-sra\fR" 4
  .IX Item "-ftree-sra"
  Perform scalar replacement of aggregates.  This pass replaces structure
  references with scalars to prevent committing structures to memory too
  early.  This flag is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP "\fB\-fstore\-merging\fR" 4
  .IX Item "-fstore-merging"
  Perform merging of narrow stores to consecutive memory addresses.  This pass
  merges contiguous stores of immediate values narrower than a word into fewer
  wider stores to reduce the number of instructions.  This is enabled by default
  at \fB\-O2\fR and higher as well as \fB\-Os\fR.
! .IP "\fB\-ftree\-ter\fR" 4
  .IX Item "-ftree-ter"
! Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
  use/single def temporaries are replaced at their use location with their
! defining expression.  This results in non-GIMPLE code, but gives the expanders
! much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
  enabled by default at \fB\-O1\fR and higher.
! .IP "\fB\-ftree\-slsr\fR" 4
  .IX Item "-ftree-slsr"
! Perform straight-line strength reduction on trees.  This recognizes related
  expressions involving multiplications and replaces them by less expensive
  calculations when possible.  This is enabled by default at \fB\-O1\fR and
  higher.
! .IP "\fB\-ftree\-vectorize\fR" 4
  .IX Item "-ftree-vectorize"
  Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
  and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
! .IP "\fB\-ftree\-loop\-vectorize\fR" 4
  .IX Item "-ftree-loop-vectorize"
  Perform loop vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftree\-slp\-vectorize\fR" 4
  .IX Item "-ftree-slp-vectorize"
  Perform basic block vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP "\fB\-ftrivial\-auto\-var\-init=\fR\fIchoice\fR" 4
  .IX Item "-ftrivial-auto-var-init=choice"
  Initialize automatic variables with either a pattern or with zeroes to increase
  the security and predictability of a program by preventing uninitialized memory
  disclosure and use.
! \&\s-1GCC\s0 still considers an automatic variable that doesn't have an explicit
  initializer as uninitialized, \fB\-Wuninitialized\fR and
  \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR will still report
  warning messages on such automatic variables and the compiler will
  perform optimization as if the variable were uninitialized.
! With this option, \s-1GCC\s0 will also initialize any padding of automatic variables
  that have structure or union types to zeroes.
  However, the current implementation cannot initialize automatic variables that
  are declared between the controlling expression and the first case of a
--- 12931,13003 ----
  the final value by such a computation, provided it is sufficiently cheap.
  This reduces data dependencies and may allow further simplifications.
  Enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-fivopts\fR 4
  .IX Item "-fivopts"
  Perform induction variable optimizations (strength reduction, induction
  variable merging and induction variable elimination) on trees.
! .IP \fB\-ftree\-parallelize\-loops=n\fR 4
  .IX Item "-ftree-parallelize-loops=n"
  Parallelize loops, i.e., split their iteration space to run in n threads.
  This is only possible for loops whose iterations are independent
  and can be arbitrarily reordered.  The optimization is only
! profitable on multiprocessor machines, for loops that are CPU\-intensive,
  rather than constrained e.g. by memory bandwidth.  This option
  implies \fB\-pthread\fR, and thus is only supported on targets
  that have support for \fB\-pthread\fR.
! .IP \fB\-ftree\-pta\fR 4
  .IX Item "-ftree-pta"
! Perform function\-local points\-to analysis on trees.  This flag is
  enabled by default at \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP \fB\-ftree\-sra\fR 4
  .IX Item "-ftree-sra"
  Perform scalar replacement of aggregates.  This pass replaces structure
  references with scalars to prevent committing structures to memory too
  early.  This flag is enabled by default at \fB\-O1\fR and higher,
  except for \fB\-Og\fR.
! .IP \fB\-fstore\-merging\fR 4
  .IX Item "-fstore-merging"
  Perform merging of narrow stores to consecutive memory addresses.  This pass
  merges contiguous stores of immediate values narrower than a word into fewer
  wider stores to reduce the number of instructions.  This is enabled by default
  at \fB\-O2\fR and higher as well as \fB\-Os\fR.
! .IP \fB\-ftree\-ter\fR 4
  .IX Item "-ftree-ter"
! Perform temporary expression replacement during the SSA\->normal phase.  Single
  use/single def temporaries are replaced at their use location with their
! defining expression.  This results in non\-GIMPLE code, but gives the expanders
! much more complex trees to work on resulting in better RTL generation.  This is
  enabled by default at \fB\-O1\fR and higher.
! .IP \fB\-ftree\-slsr\fR 4
  .IX Item "-ftree-slsr"
! Perform straight\-line strength reduction on trees.  This recognizes related
  expressions involving multiplications and replaces them by less expensive
  calculations when possible.  This is enabled by default at \fB\-O1\fR and
  higher.
! .IP \fB\-ftree\-vectorize\fR 4
  .IX Item "-ftree-vectorize"
  Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
  and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
! .IP \fB\-ftree\-loop\-vectorize\fR 4
  .IX Item "-ftree-loop-vectorize"
  Perform loop vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP \fB\-ftree\-slp\-vectorize\fR 4
  .IX Item "-ftree-slp-vectorize"
  Perform basic block vectorization on trees. This flag is enabled by default at
  \&\fB\-O2\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
  and \fB\-fauto\-profile\fR.
! .IP \fB\-ftrivial\-auto\-var\-init=\fR\fIchoice\fR 4
  .IX Item "-ftrivial-auto-var-init=choice"
  Initialize automatic variables with either a pattern or with zeroes to increase
  the security and predictability of a program by preventing uninitialized memory
  disclosure and use.
! GCC still considers an automatic variable that doesn\*(Aqt have an explicit
  initializer as uninitialized, \fB\-Wuninitialized\fR and
  \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR will still report
  warning messages on such automatic variables and the compiler will
  perform optimization as if the variable were uninitialized.
! With this option, GCC will also initialize any padding of automatic variables
  that have structure or union types to zeroes.
  However, the current implementation cannot initialize automatic variables that
  are declared between the controlling expression and the first case of a
*************** such cases.
*** 13073,13089 ****
  .Sp
  The three values of \fIchoice\fR are:
  .RS 4
! .IP "*" 4
! \&\fBuninitialized\fR doesn't initialize any automatic variables.
! This is C and \*(C+'s default.
! .IP "*" 4
  \&\fBpattern\fR Initialize automatic variables with values which will likely
  transform logic bugs into crashes down the line, are easily recognized in a
  crash dump and without being values that programmers can rely on for useful
  program semantics.
! The current value is byte-repeatable pattern with byte \*(L"0xFE\*(R".
  The values used for pattern initialization might be changed in the future.
! .IP "*" 4
  \&\fBzero\fR Initialize automatic variables with zeroes.
  .RE
  .RS 4
--- 13006,13022 ----
  .Sp
  The three values of \fIchoice\fR are:
  .RS 4
! .IP * 4
! \&\fBuninitialized\fR doesn\*(Aqt initialize any automatic variables.
! This is C and C++\*(Aqs default.
! .IP * 4
  \&\fBpattern\fR Initialize automatic variables with values which will likely
  transform logic bugs into crashes down the line, are easily recognized in a
  crash dump and without being values that programmers can rely on for useful
  program semantics.
! The current value is byte\-repeatable pattern with byte "0xFE".
  The values used for pattern initialization might be changed in the future.
! .IP * 4
  \&\fBzero\fR Initialize automatic variables with zeroes.
  .RE
  .RS 4
*************** uses say \f(CW\*(C`0X5A\*(C'\fR and \f(C
*** 13104,13148 ****
  respectively, will trap with either \fBchoice\fR of trivial
  initializer, i.e., \fBzero\fR initialization will not convert to the
  representation for \f(CW\*(C`false\*(C'\fR, even if it would for a \f(CW\*(C`static\*(C'\fR
! variable of the same type.  This means the initializer pattern doesn't
  generally depend on the type of the initialized variable.  One notable
! exception is that (non-hardened) boolean variables that fit in registers
  are initialized with \f(CW\*(C`false\*(C'\fR (zero), even when \fBpattern\fR is
  requested.
  .Sp
  You can control this behavior for a specific variable by using the variable
  attribute \f(CW\*(C`uninitialized\*(C'\fR.
  .RE
! .IP "\fB\-fvect\-cost\-model=\fR\fImodel\fR" 4
  .IX Item "-fvect-cost-model=model"
  Alter the cost model used for vectorization.  The \fImodel\fR argument
  should be one of \fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR or
! \&\fBvery-cheap\fR.
! With the \fBunlimited\fR model the vectorized code-path is assumed
  to be profitable while with the \fBdynamic\fR model a runtime check
! guards the vectorized code-path to enable it only for iteration
  counts that will likely execute faster than when executing the original
  scalar loop.  The \fBcheap\fR model disables vectorization of
  loops where doing so would be cost prohibitive for example due to
  required runtime checks for data dependence or alignment but otherwise
! is equal to the \fBdynamic\fR model.  The \fBvery-cheap\fR model only
  allows vectorization if the vector code would entirely replace the
  scalar code that is being vectorized.  For example, if each iteration
  of a vectorized loop would only be able to handle exactly four iterations
! of the scalar loop, the \fBvery-cheap\fR model would only allow
  vectorization if the scalar iteration count is known to be a multiple
  of four.
  .Sp
  The default cost model depends on other optimization flags and is
  either \fBdynamic\fR or \fBcheap\fR.
! .IP "\fB\-fsimd\-cost\-model=\fR\fImodel\fR" 4
  .IX Item "-fsimd-cost-model=model"
  Alter the cost model used for vectorization of loops marked with the OpenMP
  simd directive.  The \fImodel\fR argument should be one of
  \&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
  have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
  default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
! .IP "\fB\-ftree\-vrp\fR" 4
  .IX Item "-ftree-vrp"
  Perform Value Range Propagation on trees.  This is similar to the
  constant propagation pass, but instead of values, ranges of values are
--- 13037,13081 ----
  respectively, will trap with either \fBchoice\fR of trivial
  initializer, i.e., \fBzero\fR initialization will not convert to the
  representation for \f(CW\*(C`false\*(C'\fR, even if it would for a \f(CW\*(C`static\*(C'\fR
! variable of the same type.  This means the initializer pattern doesn\*(Aqt
  generally depend on the type of the initialized variable.  One notable
! exception is that (non\-hardened) boolean variables that fit in registers
  are initialized with \f(CW\*(C`false\*(C'\fR (zero), even when \fBpattern\fR is
  requested.
  .Sp
  You can control this behavior for a specific variable by using the variable
  attribute \f(CW\*(C`uninitialized\*(C'\fR.
  .RE
! .IP \fB\-fvect\-cost\-model=\fR\fImodel\fR 4
  .IX Item "-fvect-cost-model=model"
  Alter the cost model used for vectorization.  The \fImodel\fR argument
  should be one of \fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR or
! \&\fBvery\-cheap\fR.
! With the \fBunlimited\fR model the vectorized code\-path is assumed
  to be profitable while with the \fBdynamic\fR model a runtime check
! guards the vectorized code\-path to enable it only for iteration
  counts that will likely execute faster than when executing the original
  scalar loop.  The \fBcheap\fR model disables vectorization of
  loops where doing so would be cost prohibitive for example due to
  required runtime checks for data dependence or alignment but otherwise
! is equal to the \fBdynamic\fR model.  The \fBvery\-cheap\fR model only
  allows vectorization if the vector code would entirely replace the
  scalar code that is being vectorized.  For example, if each iteration
  of a vectorized loop would only be able to handle exactly four iterations
! of the scalar loop, the \fBvery\-cheap\fR model would only allow
  vectorization if the scalar iteration count is known to be a multiple
  of four.
  .Sp
  The default cost model depends on other optimization flags and is
  either \fBdynamic\fR or \fBcheap\fR.
! .IP \fB\-fsimd\-cost\-model=\fR\fImodel\fR 4
  .IX Item "-fsimd-cost-model=model"
  Alter the cost model used for vectorization of loops marked with the OpenMP
  simd directive.  The \fImodel\fR argument should be one of
  \&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
  have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
  default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
! .IP \fB\-ftree\-vrp\fR 4
  .IX Item "-ftree-vrp"
  Perform Value Range Propagation on trees.  This is similar to the
  constant propagation pass, but instead of values, ranges of values are
*************** checks like array bound checks and null
*** 13151,13188 ****
  enabled by default at \fB\-O2\fR and higher.  Null pointer check
  elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
  enabled.
! .IP "\fB\-fsplit\-paths\fR" 4
  .IX Item "-fsplit-paths"
  Split paths leading to loop backedges.  This can improve dead code
  elimination and common subexpression elimination.  This is enabled by
  default at \fB\-O3\fR and above.
! .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
  .IX Item "-fsplit-ivs-in-unroller"
  Enables expression of values of induction variables in later iterations
  of the unrolled loop using the value in the first iteration.  This breaks
  long dependency chains, thus improving efficiency of the scheduling passes.
  .Sp
! A combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
  same effect.  However, that is not reliable in cases where the loop body
  is more complicated than a single basic block.  It also does not work at all
! on some architectures due to restrictions in the \s-1CSE\s0 pass.
  .Sp
  This optimization is enabled by default.
! .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
  .IX Item "-fvariable-expansion-in-unroller"
  With this option, the compiler creates multiple copies of some
  local variables when unrolling a loop, which can result in superior code.
  .Sp
  This optimization is enabled by default for PowerPC targets, but disabled
  by default otherwise.
! .IP "\fB\-fpartial\-inlining\fR" 4
  .IX Item "-fpartial-inlining"
  Inline parts of functions.  This option has any effect only
  when inlining itself is turned on by the \fB\-finline\-functions\fR
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fpredictive\-commoning\fR" 4
  .IX Item "-fpredictive-commoning"
  Perform predictive commoning optimization, i.e., reusing computations
  (especially memory loads and stores) performed in previous
--- 13084,13121 ----
  enabled by default at \fB\-O2\fR and higher.  Null pointer check
  elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
  enabled.
! .IP \fB\-fsplit\-paths\fR 4
  .IX Item "-fsplit-paths"
  Split paths leading to loop backedges.  This can improve dead code
  elimination and common subexpression elimination.  This is enabled by
  default at \fB\-O3\fR and above.
! .IP \fB\-fsplit\-ivs\-in\-unroller\fR 4
  .IX Item "-fsplit-ivs-in-unroller"
  Enables expression of values of induction variables in later iterations
  of the unrolled loop using the value in the first iteration.  This breaks
  long dependency chains, thus improving efficiency of the scheduling passes.
  .Sp
! A combination of \fB\-fweb\fR and CSE is often sufficient to obtain the
  same effect.  However, that is not reliable in cases where the loop body
  is more complicated than a single basic block.  It also does not work at all
! on some architectures due to restrictions in the CSE pass.
  .Sp
  This optimization is enabled by default.
! .IP \fB\-fvariable\-expansion\-in\-unroller\fR 4
  .IX Item "-fvariable-expansion-in-unroller"
  With this option, the compiler creates multiple copies of some
  local variables when unrolling a loop, which can result in superior code.
  .Sp
  This optimization is enabled by default for PowerPC targets, but disabled
  by default otherwise.
! .IP \fB\-fpartial\-inlining\fR 4
  .IX Item "-fpartial-inlining"
  Inline parts of functions.  This option has any effect only
  when inlining itself is turned on by the \fB\-finline\-functions\fR
  or \fB\-finline\-small\-functions\fR options.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fpredictive\-commoning\fR 4
  .IX Item "-fpredictive-commoning"
  Perform predictive commoning optimization, i.e., reusing computations
  (especially memory loads and stores) performed in previous
*************** iterations of loops.
*** 13190,13196 ****
  .Sp
  This option is enabled at level \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
  .IX Item "-fprefetch-loop-arrays"
  If supported by the target machine, generate instructions to prefetch
  memory to improve the performance of loops that access large arrays.
--- 13123,13129 ----
  .Sp
  This option is enabled at level \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fprefetch\-loop\-arrays\fR 4
  .IX Item "-fprefetch-loop-arrays"
  If supported by the target machine, generate instructions to prefetch
  memory to improve the performance of loops that access large arrays.
*************** This option may generate better or worse
*** 13199,13210 ****
  dependent on the structure of loops within the source code.
  .Sp
  Disabled at level \fB\-Os\fR.
! .IP "\fB\-fno\-printf\-return\-value\fR" 4
  .IX Item "-fno-printf-return-value"
  Do not substitute constants for known return value of formatted output
  functions such as \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`snprintf\*(C'\fR, \f(CW\*(C`vsprintf\*(C'\fR, and
  \&\f(CW\*(C`vsnprintf\*(C'\fR (but not \f(CW\*(C`printf\*(C'\fR of \f(CW\*(C`fprintf\*(C'\fR).  This
! transformation allows \s-1GCC\s0 to optimize or even eliminate branches based
  on the known return value of these functions called with arguments that
  are either constant, or whose values are known to be in a range that
  makes determining the exact return value possible.  For example, when
--- 13132,13143 ----
  dependent on the structure of loops within the source code.
  .Sp
  Disabled at level \fB\-Os\fR.
! .IP \fB\-fno\-printf\-return\-value\fR 4
  .IX Item "-fno-printf-return-value"
  Do not substitute constants for known return value of formatted output
  functions such as \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`snprintf\*(C'\fR, \f(CW\*(C`vsprintf\*(C'\fR, and
  \&\f(CW\*(C`vsnprintf\*(C'\fR (but not \f(CW\*(C`printf\*(C'\fR of \f(CW\*(C`fprintf\*(C'\fR).  This
! transformation allows GCC to optimize or even eliminate branches based
  on the known return value of these functions called with arguments that
  are either constant, or whose values are known to be in a range that
  makes determining the exact return value possible.  For example, when
*************** The \fB\-fprintf\-return\-value\fR optio
*** 13223,13246 ****
  and yields best results with \fB\-O2\fR and above.  It works in tandem
  with the \fB\-Wformat\-overflow\fR and \fB\-Wformat\-truncation\fR
  options.  The \fB\-fprintf\-return\-value\fR option is enabled by default.
! .IP "\fB\-fno\-peephole\fR" 4
  .IX Item "-fno-peephole"
  .PD 0
! .IP "\fB\-fno\-peephole2\fR" 4
  .IX Item "-fno-peephole2"
  .PD
! Disable any machine-specific peephole optimizations.  The difference
  between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
  are implemented in the compiler; some targets use one, some use the
  other, a few use both.
  .Sp
  \&\fB\-fpeephole\fR is enabled by default.
  \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
  .IX Item "-fno-guess-branch-probability"
  Do not guess branch probabilities using heuristics.
  .Sp
! \&\s-1GCC\s0 uses heuristics to guess branch probabilities if they are
  not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
  heuristics are based on the control flow graph.  If some branch probabilities
  are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
--- 13156,13179 ----
  and yields best results with \fB\-O2\fR and above.  It works in tandem
  with the \fB\-Wformat\-overflow\fR and \fB\-Wformat\-truncation\fR
  options.  The \fB\-fprintf\-return\-value\fR option is enabled by default.
! .IP \fB\-fno\-peephole\fR 4
  .IX Item "-fno-peephole"
  .PD 0
! .IP \fB\-fno\-peephole2\fR 4
  .IX Item "-fno-peephole2"
  .PD
! Disable any machine\-specific peephole optimizations.  The difference
  between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
  are implemented in the compiler; some targets use one, some use the
  other, a few use both.
  .Sp
  \&\fB\-fpeephole\fR is enabled by default.
  \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fno\-guess\-branch\-probability\fR 4
  .IX Item "-fno-guess-branch-probability"
  Do not guess branch probabilities using heuristics.
  .Sp
! GCC uses heuristics to guess branch probabilities if they are
  not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
  heuristics are based on the control flow graph.  If some branch probabilities
  are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
*************** some cases, it may be useful to disable
*** 13251,13278 ****
  of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
  .Sp
  It is also possible to specify expected probability of the expression
! with \f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR built-in function.
  .Sp
  The default is \fB\-fguess\-branch\-probability\fR at levels
  \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-freorder\-blocks\fR" 4
  .IX Item "-freorder-blocks"
  Reorder basic blocks in the compiled function in order to reduce number of
  taken branches and improve code locality.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR" 4
  .IX Item "-freorder-blocks-algorithm=algorithm"
  Use the specified algorithm for basic block reordering.  The
  \&\fIalgorithm\fR argument can be \fBsimple\fR, which does not increase
  code size (except sometimes due to secondary effects like alignment),
! or \fBstc\fR, the \*(L"software trace cache\*(R" algorithm, which tries to
  put all often executed code together, minimizing the number of branches
  executed by making extra copies of code.
  .Sp
  The default is \fBsimple\fR at levels \fB\-O1\fR, \fB\-Os\fR, and
  \&\fBstc\fR at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
  .IX Item "-freorder-blocks-and-partition"
  In addition to reordering basic blocks in the compiled function, in order
  to reduce number of taken branches, partitions hot and cold basic blocks
--- 13184,13211 ----
  of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
  .Sp
  It is also possible to specify expected probability of the expression
! with \f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR built\-in function.
  .Sp
  The default is \fB\-fguess\-branch\-probability\fR at levels
  \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-freorder\-blocks\fR 4
  .IX Item "-freorder-blocks"
  Reorder basic blocks in the compiled function in order to reduce number of
  taken branches and improve code locality.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR 4
  .IX Item "-freorder-blocks-algorithm=algorithm"
  Use the specified algorithm for basic block reordering.  The
  \&\fIalgorithm\fR argument can be \fBsimple\fR, which does not increase
  code size (except sometimes due to secondary effects like alignment),
! or \fBstc\fR, the "software trace cache" algorithm, which tries to
  put all often executed code together, minimizing the number of branches
  executed by making extra copies of code.
  .Sp
  The default is \fBsimple\fR at levels \fB\-O1\fR, \fB\-Os\fR, and
  \&\fBstc\fR at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-freorder\-blocks\-and\-partition\fR 4
  .IX Item "-freorder-blocks-and-partition"
  In addition to reordering basic blocks in the compiled function, in order
  to reduce number of taken branches, partitions hot and cold basic blocks
*************** into separate sections of the assembly a
*** 13280,13293 ****
  paging and cache locality performance.
  .Sp
  This optimization is automatically turned off in the presence of
! exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined
  section attribute and on any architecture that does not support named
  sections.  When \fB\-fsplit\-stack\fR is used this option is not
  enabled by default (to avoid linker errors), but may be enabled
  explicitly (if using a working linker).
  .Sp
  Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-freorder\-functions\fR" 4
  .IX Item "-freorder-functions"
  Reorder functions in the object file in order to
  improve code locality.  This is implemented by using special
--- 13213,13226 ----
  paging and cache locality performance.
  .Sp
  This optimization is automatically turned off in the presence of
! exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user\-defined
  section attribute and on any architecture that does not support named
  sections.  When \fB\-fsplit\-stack\fR is used this option is not
  enabled by default (to avoid linker errors), but may be enabled
  explicitly (if using a working linker).
  .Sp
  Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-freorder\-functions\fR 4
  .IX Item "-freorder-functions"
  Reorder functions in the object file in order to
  improve code locality.  This is implemented by using special
*************** subsections \f(CW\*(C`.text.hot\*(C'\fR
*** 13296,13310 ****
  the linker so object file format must support named sections and linker must
  place them in a reasonable way.
  .Sp
! This option isn't effective unless you either provide profile feedback
  (see \fB\-fprofile\-arcs\fR for details) or manually annotate functions with 
  \&\f(CW\*(C`hot\*(C'\fR or \f(CW\*(C`cold\*(C'\fR attributes.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fstrict\-aliasing\fR" 4
  .IX Item "-fstrict-aliasing"
  Allow the compiler to assume the strictest aliasing rules applicable to
! the language being compiled.  For C (and \*(C+), this activates
  optimizations based on the type of expressions.  In particular, an
  object of one type is assumed never to reside at the same address as an
  object of a different type, unless the types are almost the same.  For
--- 13229,13243 ----
  the linker so object file format must support named sections and linker must
  place them in a reasonable way.
  .Sp
! This option isn\*(Aqt effective unless you either provide profile feedback
  (see \fB\-fprofile\-arcs\fR for details) or manually annotate functions with 
  \&\f(CW\*(C`hot\*(C'\fR or \f(CW\*(C`cold\*(C'\fR attributes.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fstrict\-aliasing\fR 4
  .IX Item "-fstrict-aliasing"
  Allow the compiler to assume the strictest aliasing rules applicable to
! the language being compiled.  For C (and C++), this activates
  optimizations based on the type of expressions.  In particular, an
  object of one type is assumed never to reside at the same address as an
  object of a different type, unless the types are almost the same.  For
*************** Pay special attention to code like this:
*** 13328,13335 ****
  .Ve
  .Sp
  The practice of reading from a different union member than the one most
! recently written to (called \*(L"type-punning\*(R") is common.  Even with
! \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
  is accessed through the union type.  So, the code above works as
  expected.    However, this code might not:
  .Sp
--- 13261,13268 ----
  .Ve
  .Sp
  The practice of reading from a different union member than the one most
! recently written to (called "type\-punning") is common.  Even with
! \&\fB\-fstrict\-aliasing\fR, type\-punning is allowed, provided the memory
  is accessed through the union type.  So, the code above works as
  expected.    However, this code might not:
  .Sp
*************** uses a union type, e.g.:
*** 13356,13362 ****
  .Sp
  The \fB\-fstrict\-aliasing\fR option is enabled at levels
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fipa\-strict\-aliasing\fR" 4
  .IX Item "-fipa-strict-aliasing"
  Controls whether rules of \fB\-fstrict\-aliasing\fR are applied across
  function boundaries.  Note that if multiple functions gets inlined into a
--- 13289,13295 ----
  .Sp
  The \fB\-fstrict\-aliasing\fR option is enabled at levels
  \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fipa\-strict\-aliasing\fR 4
  .IX Item "-fipa-strict-aliasing"
  Controls whether rules of \fB\-fstrict\-aliasing\fR are applied across
  function boundaries.  Note that if multiple functions gets inlined into a
*************** function boundary.
*** 13365,13385 ****
  .Sp
  The \fB\-fipa\-strict\-aliasing\fR option is enabled by default and is
  effective only in combination with \fB\-fstrict\-aliasing\fR.
! .IP "\fB\-falign\-functions\fR" 4
  .IX Item "-falign-functions"
  .PD 0
! .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
  .IX Item "-falign-functions=n"
! .IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-functions=n:m"
! .IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-functions=n:m:n2"
! .IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-functions=n:m:n2:m2"
  .PD
! Align the start of functions to the next power-of-two greater than or
  equal to \fIn\fR, skipping up to \fIm\fR\-1 bytes.  This ensures that at
! least the first \fIm\fR bytes of the function can be fetched by the \s-1CPU\s0
  without crossing an \fIn\fR\-byte alignment boundary.
  This is an optimization of code performance and alignment is ignored for
  functions considered cold.  If alignment is required for all functions,
--- 13298,13318 ----
  .Sp
  The \fB\-fipa\-strict\-aliasing\fR option is enabled by default and is
  effective only in combination with \fB\-fstrict\-aliasing\fR.
! .IP \fB\-falign\-functions\fR 4
  .IX Item "-falign-functions"
  .PD 0
! .IP \fB\-falign\-functions=\fR\fIn\fR 4
  .IX Item "-falign-functions=n"
! .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-functions=n:m"
! .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-functions=n:m:n2"
! .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-functions=n:m:n2:m2"
  .PD
! Align the start of functions to the next power\-of\-two greater than or
  equal to \fIn\fR, skipping up to \fIm\fR\-1 bytes.  This ensures that at
! least the first \fIm\fR bytes of the function can be fetched by the CPU
  without crossing an \fIn\fR\-byte alignment boundary.
  This is an optimization of code performance and alignment is ignored for
  functions considered cold.  If alignment is required for all functions,
*************** in that case, it is rounded up.
*** 13406,13434 ****
  \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
  equivalent and mean that functions are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-flimit\-function\-alignment\fR" 4
  .IX Item "-flimit-function-alignment"
  If this option is enabled, the compiler tries to avoid unnecessarily
  overaligning functions. It attempts to instruct the assembler to align
  by the amount specified by \fB\-falign\-functions\fR, but not to
  skip more bytes than the size of the function.
! .IP "\fB\-falign\-labels\fR" 4
  .IX Item "-falign-labels"
  .PD 0
! .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
  .IX Item "-falign-labels=n"
! .IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-labels=n:m"
! .IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-labels=n:m:n2"
! .IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-labels=n:m:n2:m2"
  .PD
! Align all branch targets to a power-of-two boundary.
  .Sp
  Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
  \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
--- 13339,13367 ----
  \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
  equivalent and mean that functions are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-flimit\-function\-alignment\fR 4
  .IX Item "-flimit-function-alignment"
  If this option is enabled, the compiler tries to avoid unnecessarily
  overaligning functions. It attempts to instruct the assembler to align
  by the amount specified by \fB\-falign\-functions\fR, but not to
  skip more bytes than the size of the function.
! .IP \fB\-falign\-labels\fR 4
  .IX Item "-falign-labels"
  .PD 0
! .IP \fB\-falign\-labels=\fR\fIn\fR 4
  .IX Item "-falign-labels=n"
! .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-labels=n:m"
! .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-labels=n:m:n2"
! .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-labels=n:m:n2:m2"
  .PD
! Align all branch targets to a power\-of\-two boundary.
  .Sp
  Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
  \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
*************** equivalent and mean that labels are not
*** 13437,13460 ****
  If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
  are greater than this value, then their values are used instead.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default
  which is very likely to be \fB1\fR, meaning no alignment.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-falign\-loops\fR" 4
  .IX Item "-falign-loops"
  .PD 0
! .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
  .IX Item "-falign-loops=n"
! .IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-loops=n:m"
! .IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-loops=n:m:n2"
! .IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-loops=n:m:n2:m2"
  .PD
! Align loops to a power-of-two boundary.  If the loops are executed
  many times, this makes up for any execution of the dummy padding
  instructions.
  This is an optimization of code performance and alignment is ignored for
--- 13370,13393 ----
  If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
  are greater than this value, then their values are used instead.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default
  which is very likely to be \fB1\fR, meaning no alignment.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-falign\-loops\fR 4
  .IX Item "-falign-loops"
  .PD 0
! .IP \fB\-falign\-loops=\fR\fIn\fR 4
  .IX Item "-falign-loops=n"
! .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-loops=n:m"
! .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-loops=n:m:n2"
! .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-loops=n:m:n2:m2"
  .PD
! Align loops to a power\-of\-two boundary.  If the loops are executed
  many times, this makes up for any execution of the dummy padding
  instructions.
  This is an optimization of code performance and alignment is ignored for
*************** Parameters of this option are analogous
*** 13468,13489 ****
  equivalent and mean that loops are not aligned.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-falign\-jumps\fR" 4
  .IX Item "-falign-jumps"
  .PD 0
! .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
  .IX Item "-falign-jumps=n"
! .IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR" 4
  .IX Item "-falign-jumps=n:m"
! .IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
  .IX Item "-falign-jumps=n:m:n2"
! .IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
  .IX Item "-falign-jumps=n:m:n2:m2"
  .PD
! Align branch targets to a power-of-two boundary, for branch targets
  where the targets can only be reached by jumping.  In this case,
  no dummy operations need be executed.
  This is an optimization of code performance and alignment is ignored for
--- 13401,13422 ----
  equivalent and mean that loops are not aligned.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-falign\-jumps\fR 4
  .IX Item "-falign-jumps"
  .PD 0
! .IP \fB\-falign\-jumps=\fR\fIn\fR 4
  .IX Item "-falign-jumps=n"
! .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR 4
  .IX Item "-falign-jumps=n:m"
! .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4
  .IX Item "-falign-jumps=n:m:n2"
! .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4
  .IX Item "-falign-jumps=n:m:n2:m2"
  .PD
! Align branch targets to a power\-of\-two boundary, for branch targets
  where the targets can only be reached by jumping.  In this case,
  no dummy operations need be executed.
  This is an optimization of code performance and alignment is ignored for
*************** Parameters of this option are analogous
*** 13496,13515 ****
  \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
  equivalent and mean that loops are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-fmin\-function\-alignment\fR" 4
  .IX Item "-fmin-function-alignment"
! Specify minimal alignment of functions to the next power-of-two greater than or
  equal to \fIn\fR. Unlike \fB\-falign\-functions\fR this alignment is applied
  also to all functions (even those considered cold).  The alignment is also not
  affected by \fB\-flimit\-function\-alignment\fR
! .IP "\fB\-fno\-allocation\-dce\fR" 4
  .IX Item "-fno-allocation-dce"
! Do not remove unused \*(C+ allocations in dead code elimination.
! .IP "\fB\-fallow\-store\-data\-races\fR" 4
  .IX Item "-fallow-store-data-races"
  Allow the compiler to perform optimizations that may introduce new data races
  on stores, without proving that the variable cannot be concurrently accessed
--- 13429,13448 ----
  \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
  equivalent and mean that loops are not aligned.
  .Sp
! If \fIn\fR is not specified or is zero, use a machine\-dependent default.
  The maximum allowed \fIn\fR option value is 65536.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-fmin\-function\-alignment\fR 4
  .IX Item "-fmin-function-alignment"
! Specify minimal alignment of functions to the next power\-of\-two greater than or
  equal to \fIn\fR. Unlike \fB\-falign\-functions\fR this alignment is applied
  also to all functions (even those considered cold).  The alignment is also not
  affected by \fB\-flimit\-function\-alignment\fR
! .IP \fB\-fno\-allocation\-dce\fR 4
  .IX Item "-fno-allocation-dce"
! Do not remove unused C++ allocations in dead code elimination.
! .IP \fB\-fallow\-store\-data\-races\fR 4
  .IX Item "-fallow-store-data-races"
  Allow the compiler to perform optimizations that may introduce new data races
  on stores, without proving that the variable cannot be concurrently accessed
*************** use this option if it is known that glob
*** 13518,13540 ****
  multiple threads.
  .Sp
  Examples of optimizations enabled by \fB\-fallow\-store\-data\-races\fR include
! hoisting or if-conversions that may cause a value that was already in memory
! to be re-written with that same value.  Such re-writing is safe in a single
! threaded context but may be unsafe in a multi-threaded context.  Note that on
! some processors, if-conversions may be required in order to enable
  vectorization.
  .Sp
  Enabled at level \fB\-Ofast\fR.
! .IP "\fB\-funit\-at\-a\-time\fR" 4
  .IX Item "-funit-at-a-time"
  This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
  has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
  \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
  .Sp
  Enabled by default.
! .IP "\fB\-fno\-toplevel\-reorder\fR" 4
  .IX Item "-fno-toplevel-reorder"
! Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
  statements.  Output them in the same order that they appear in the
  input file.  When this option is used, unreferenced static variables
  are not removed.  This option is intended to support existing code
--- 13451,13473 ----
  multiple threads.
  .Sp
  Examples of optimizations enabled by \fB\-fallow\-store\-data\-races\fR include
! hoisting or if\-conversions that may cause a value that was already in memory
! to be re\-written with that same value.  Such re\-writing is safe in a single
! threaded context but may be unsafe in a multi\-threaded context.  Note that on
! some processors, if\-conversions may be required in order to enable
  vectorization.
  .Sp
  Enabled at level \fB\-Ofast\fR.
! .IP \fB\-funit\-at\-a\-time\fR 4
  .IX Item "-funit-at-a-time"
  This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
  has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
  \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
  .Sp
  Enabled by default.
! .IP \fB\-fno\-toplevel\-reorder\fR 4
  .IX Item "-fno-toplevel-reorder"
! Do not reorder top\-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
  statements.  Output them in the same order that they appear in the
  input file.  When this option is used, unreferenced static variables
  are not removed.  This option is intended to support existing code
*************** use attributes when possible.
*** 13545,13551 ****
  also at \fB\-O0\fR if \fB\-fsection\-anchors\fR is explicitly requested.
  Additionally \fB\-fno\-toplevel\-reorder\fR implies
  \&\fB\-fno\-section\-anchors\fR.
! .IP "\fB\-funreachable\-traps\fR" 4
  .IX Item "-funreachable-traps"
  With this option, the compiler turns calls to
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR into traps, instead of using them for
--- 13478,13484 ----
  also at \fB\-O0\fR if \fB\-fsection\-anchors\fR is explicitly requested.
  Additionally \fB\-fno\-toplevel\-reorder\fR implies
  \&\fB\-fno\-section\-anchors\fR.
! .IP \fB\-funreachable\-traps\fR 4
  .IX Item "-funreachable-traps"
  With this option, the compiler turns calls to
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR into traps, instead of using them for
*************** options.  If \fB\-fsanitize=unreachable\
*** 13558,13574 ****
  takes priority over this one.
  .Sp
  This option is enabled by default at \fB\-O0\fR and \fB\-Og\fR.
! .IP "\fB\-fweb\fR" 4
  .IX Item "-fweb"
  Constructs webs as commonly used for register allocation purposes and assign
  each web individual pseudo register.  This allows the register allocation pass
  to operate on pseudos directly, but also strengthens several other optimization
! passes, such as \s-1CSE,\s0 loop optimizer and trivial dead code remover.  It can,
  however, make debugging impossible, since variables no longer stay in a
! \&\*(L"home register\*(R".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP "\fB\-fwhole\-program\fR" 4
  .IX Item "-fwhole-program"
  Assume that the current compilation unit represents the whole program being
  compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
--- 13491,13507 ----
  takes priority over this one.
  .Sp
  This option is enabled by default at \fB\-O0\fR and \fB\-Og\fR.
! .IP \fB\-fweb\fR 4
  .IX Item "-fweb"
  Constructs webs as commonly used for register allocation purposes and assign
  each web individual pseudo register.  This allows the register allocation pass
  to operate on pseudos directly, but also strengthens several other optimization
! passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
  however, make debugging impossible, since variables no longer stay in a
! "home register".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP \fB\-fwhole\-program\fR 4
  .IX Item "-fwhole-program"
  Assume that the current compilation unit represents the whole program being
  compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
*************** and in effect are optimized more aggress
*** 13577,13596 ****
  .Sp
  With \fB\-flto\fR this option has a limited use.  In most cases the
  precise list of symbols used or exported from the binary is known the
! resolution info passed to the link-time optimizer by the linker plugin.  It is
  still useful if no linker plugin is used or during incremental link step when
  final code is produced (with \fB\-flto\fR
  \&\fB\-flinker\-output=nolto\-rel\fR).
! .IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
  .IX Item "-flto[=n]"
! This option runs the standard link-time optimizer.  When invoked
! with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
! representations) and writes it to special \s-1ELF\s0 sections in the object
  file.  When the object files are linked together, all the function
! bodies are read from these \s-1ELF\s0 sections and instantiated as if they
  had been part of the same translation unit.
  .Sp
! To use the link-time optimizer, \fB\-flto\fR and optimization
  options should be specified at compile time and during the final link.
  It is recommended that you compile all the files participating in the
  same link with the same options and also specify those options at
--- 13510,13529 ----
  .Sp
  With \fB\-flto\fR this option has a limited use.  In most cases the
  precise list of symbols used or exported from the binary is known the
! resolution info passed to the link\-time optimizer by the linker plugin.  It is
  still useful if no linker plugin is used or during incremental link step when
  final code is produced (with \fB\-flto\fR
  \&\fB\-flinker\-output=nolto\-rel\fR).
! .IP \fB\-flto[=\fR\fIn\fR\fB]\fR 4
  .IX Item "-flto[=n]"
! This option runs the standard link\-time optimizer.  When invoked
! with source code, it generates GIMPLE (one of GCC\*(Aqs internal
! representations) and writes it to special ELF sections in the object
  file.  When the object files are linked together, all the function
! bodies are read from these ELF sections and instantiated as if they
  had been part of the same translation unit.
  .Sp
! To use the link\-time optimizer, \fB\-flto\fR and optimization
  options should be specified at compile time and during the final link.
  It is recommended that you compile all the files participating in the
  same link with the same options and also specify those options at
*************** For example:
*** 13603,13641 ****
  \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
  .Ve
  .Sp
! The first two invocations to \s-1GCC\s0 save a bytecode representation
! of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
! \&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
  \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
  internal image, and compiles the result as usual.  Since both
  \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
! causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
  work across the two files as if they were a single one.  This means,
  for example, that the inliner is able to inline functions in
! \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
  .Sp
! Another (simpler) way to enable link-time optimization is:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
  .Ve
  .Sp
  The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
! merges them together into a single \s-1GIMPLE\s0 representation and optimizes
  them as usual to produce \fImyprog\fR.
  .Sp
! The important thing to keep in mind is that to enable link-time
! optimizations you need to use the \s-1GCC\s0 driver to perform the link step.
! \&\s-1GCC\s0 automatically performs link-time optimization if any of the
! objects involved were compiled with the \fB\-flto\fR command-line option.  
  You can always override
! the automatic decision to do link-time optimization
  by passing \fB\-fno\-lto\fR to the link command.
  .Sp
  To make whole program optimization effective, it is necessary to make
  certain whole program assumptions.  The compiler needs to know
  what functions and variables can be accessed by libraries and runtime
! outside of the link-time optimized unit.  When supported by the linker,
  the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
  to the compiler about used and externally visible symbols.  When
  the linker plugin is not available, \fB\-fwhole\-program\fR should be
--- 13536,13574 ----
  \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
  .Ve
  .Sp
! The first two invocations to GCC save a bytecode representation
! of GIMPLE into special ELF sections inside \fIfoo.o\fR and
! \&\fIbar.o\fR.  The final invocation reads the GIMPLE bytecode from
  \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
  internal image, and compiles the result as usual.  Since both
  \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
! causes all the interprocedural analyses and optimizations in GCC to
  work across the two files as if they were a single one.  This means,
  for example, that the inliner is able to inline functions in
! \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice\-versa.
  .Sp
! Another (simpler) way to enable link\-time optimization is:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
  .Ve
  .Sp
  The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
! merges them together into a single GIMPLE representation and optimizes
  them as usual to produce \fImyprog\fR.
  .Sp
! The important thing to keep in mind is that to enable link\-time
! optimizations you need to use the GCC driver to perform the link step.
! GCC automatically performs link\-time optimization if any of the
! objects involved were compiled with the \fB\-flto\fR command\-line option.  
  You can always override
! the automatic decision to do link\-time optimization
  by passing \fB\-fno\-lto\fR to the link command.
  .Sp
  To make whole program optimization effective, it is necessary to make
  certain whole program assumptions.  The compiler needs to know
  what functions and variables can be accessed by libraries and runtime
! outside of the link\-time optimized unit.  When supported by the linker,
  the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
  to the compiler about used and externally visible symbols.  When
  the linker plugin is not available, \fB\-fwhole\-program\fR should be
*************** to more aggressive optimization decision
*** 13644,13670 ****
  .Sp
  When a file is compiled with \fB\-flto\fR without
  \&\fB\-fuse\-linker\-plugin\fR, the generated object file is larger than
! a regular object file because it contains \s-1GIMPLE\s0 bytecodes and the usual
  final code (see \fB\-ffat\-lto\-objects\fR).  This means that
! object files with \s-1LTO\s0 information can be linked as normal object
  files; if \fB\-fno\-lto\fR is passed to the linker, no
  interprocedural optimizations are applied.  Note that when
  \&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile stage is faster
! but you cannot perform a regular, non-LTO link on them.
  .Sp
! When producing the final binary, \s-1GCC\s0 only
! applies link-time optimizations to those files that contain bytecode.
  Therefore, you can mix and match object files and libraries with
! \&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
! which files to optimize in \s-1LTO\s0 mode and which files to link without
  further processing.
  .Sp
  Generally, options specified at link time override those
! specified at compile time, although in some cases \s-1GCC\s0 attempts to infer
! link-time options from the settings used to compile the input files.
  .Sp
  If you do not specify an optimization level option \fB\-O\fR at
! link time, then \s-1GCC\s0 uses the highest optimization level 
  used when compiling the object files.  Note that it is generally 
  ineffective to specify an optimization level option only at link time and 
  not at compile time, for two reasons.  First, compiling without 
--- 13577,13603 ----
  .Sp
  When a file is compiled with \fB\-flto\fR without
  \&\fB\-fuse\-linker\-plugin\fR, the generated object file is larger than
! a regular object file because it contains GIMPLE bytecodes and the usual
  final code (see \fB\-ffat\-lto\-objects\fR).  This means that
! object files with LTO information can be linked as normal object
  files; if \fB\-fno\-lto\fR is passed to the linker, no
  interprocedural optimizations are applied.  Note that when
  \&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile stage is faster
! but you cannot perform a regular, non\-LTO link on them.
  .Sp
! When producing the final binary, GCC only
! applies link\-time optimizations to those files that contain bytecode.
  Therefore, you can mix and match object files and libraries with
! GIMPLE bytecodes and final object code.  GCC automatically selects
! which files to optimize in LTO mode and which files to link without
  further processing.
  .Sp
  Generally, options specified at link time override those
! specified at compile time, although in some cases GCC attempts to infer
! link\-time options from the settings used to compile the input files.
  .Sp
  If you do not specify an optimization level option \fB\-O\fR at
! link time, then GCC uses the highest optimization level 
  used when compiling the object files.  Note that it is generally 
  ineffective to specify an optimization level option only at link time and 
  not at compile time, for two reasons.  First, compiling without 
*************** needed for effective optimization at lin
*** 13673,13679 ****
  optimization passes can be performed only at compile time and 
  not at link time.
  .Sp
! There are some code generation flags preserved by \s-1GCC\s0 when
  generating bytecodes, as they need to be used during the final link.
  Currently, the following options and their settings are taken from
  the first object file that explicitly specifies them: 
--- 13606,13612 ----
  optimization passes can be performed only at compile time and 
  not at link time.
  .Sp
! There are some code generation flags preserved by GCC when
  generating bytecodes, as they need to be used during the final link.
  Currently, the following options and their settings are taken from
  the first object file that explicitly specifies them: 
*************** The following options \fB\-fPIC\fR, \fB\
*** 13692,13698 ****
  \&        B<\-fPIC/\-fpic> + B<\-fpie> = B<\-fpie>
  .Ve
  .Sp
! Certain ABI-changing flags are required to match in all compilation units,
  and trying to override this at link time with a conflicting value
  is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
  and \fB\-fpcc\-struct\-return\fR.
--- 13625,13631 ----
  \&        B<\-fPIC/\-fpic> + B<\-fpie> = B<\-fpie>
  .Ve
  .Sp
! Certain ABI\-changing flags are required to match in all compilation units,
  and trying to override this at link time with a conflicting value
  is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
  and \fB\-fpcc\-struct\-return\fR.
*************** over \fB\-ffp\-contract=fast\fR.  You ca
*** 13707,13713 ****
  .Sp
  Diagnostic options such as \fB\-Wstringop\-overflow\fR are passed
  through to the link stage and their setting matches that of the
! compile-step at function granularity.  Note that this matters only
  for diagnostics emitted during optimization.  Note that code
  transforms such as inlining can lead to warnings being enabled
  or disabled for regions if code not consistent with the setting
--- 13640,13646 ----
  .Sp
  Diagnostic options such as \fB\-Wstringop\-overflow\fR are passed
  through to the link stage and their setting matches that of the
! compile\-step at function granularity.  Note that this matters only
  for diagnostics emitted during optimization.  Note that code
  transforms such as inlining can lead to warnings being enabled
  or disabled for regions if code not consistent with the setting
*************** When you need to pass options to the ass
*** 13717,13723 ****
  \&\fB\-Xassembler\fR make sure to either compile such translation
  units with \fB\-fno\-lto\fR or consistently use the same assembler
  options on all translation units.  You can alternatively also
! specify assembler options at \s-1LTO\s0 link time.
  .Sp
  To enable debug info generation you need to supply \fB\-g\fR at
  compile time.  If any of the input files at link time were built
--- 13650,13656 ----
  \&\fB\-Xassembler\fR make sure to either compile such translation
  units with \fB\-fno\-lto\fR or consistently use the same assembler
  options on all translation units.  You can alternatively also
! specify assembler options at LTO link time.
  .Sp
  To enable debug info generation you need to supply \fB\-g\fR at
  compile time.  If any of the input files at link time were built
*************** like the dwarf level \fB\-gdwarf\-5\fR n
*** 13727,13739 ****
  at the linker command line and mixing different settings in different
  translation units is discouraged.
  .Sp
! If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
  types in separate translation units to be linked together (undefined
! behavior according to \s-1ISO C99 6.2.7\s0), a non-fatal diagnostic may be
  issued.  The behavior is still undefined at run time.  Similar
  diagnostics may be raised for other languages.
  .Sp
! Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
  optimizations on files written in different languages:
  .Sp
  .Vb 4
--- 13660,13672 ----
  at the linker command line and mixing different settings in different
  translation units is discouraged.
  .Sp
! If LTO encounters objects with C linkage declared with incompatible
  types in separate translation units to be linked together (undefined
! behavior according to ISO C99 6.2.7), a non\-fatal diagnostic may be
  issued.  The behavior is still undefined at run time.  Similar
  diagnostics may be raised for other languages.
  .Sp
! Another feature of LTO is that it is possible to apply interprocedural
  optimizations on files written in different languages:
  .Sp
  .Vb 4
*************** optimizations on files written in differ
*** 13743,13781 ****
  \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
  .Ve
  .Sp
! Notice that the final link is done with \fBg++\fR to get the \*(C+
  runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
! runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
  should use the same link command options as when mixing languages in a
! regular (non-LTO) compilation.
  .Sp
! If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
! \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
  are using a linker with plugin support.  To create static libraries suitable
! for \s-1LTO,\s0 use \fBgcc-ar\fR and \fBgcc-ranlib\fR instead of \fBar\fR
  and \fBranlib\fR; 
! to show the symbols of object files with \s-1GIMPLE\s0 bytecode, use
! \&\fBgcc-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
  and \fBnm\fR have been compiled with plugin support.  At link time, use the
  flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
! the \s-1LTO\s0 optimization process:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
  .Ve
  .Sp
  With the linker plugin enabled, the linker extracts the needed
! \&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
! to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
  .Sp
  If you are not using a linker with plugin support and/or do not
  enable the linker plugin, then the objects inside \fIlibfoo.a\fR
  are extracted and linked as usual, but they do not participate
! in the \s-1LTO\s0 optimization process.  In order to make a static library suitable
! for both \s-1LTO\s0 optimization and usual linkage, compile its object files with
  \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
  .Sp
! Link-time optimizations do not require the presence of the whole program to
  operate.  If the program does not require any symbols to be exported, it is
  possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
  the interprocedural optimizers to use more aggressive assumptions which may
--- 13676,13714 ----
  \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
  .Ve
  .Sp
! Notice that the final link is done with \fBg++\fR to get the C++
  runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
! runtime libraries.  In general, when mixing languages in LTO mode, you
  should use the same link command options as when mixing languages in a
! regular (non\-LTO) compilation.
  .Sp
! If object files containing GIMPLE bytecode are stored in a library archive, say
! \&\fIlibfoo.a\fR, it is possible to extract and use them in an LTO link if you
  are using a linker with plugin support.  To create static libraries suitable
! for LTO, use \fBgcc\-ar\fR and \fBgcc\-ranlib\fR instead of \fBar\fR
  and \fBranlib\fR; 
! to show the symbols of object files with GIMPLE bytecode, use
! \&\fBgcc\-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
  and \fBnm\fR have been compiled with plugin support.  At link time, use the
  flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
! the LTO optimization process:
  .Sp
  .Vb 1
  \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
  .Ve
  .Sp
  With the linker plugin enabled, the linker extracts the needed
! GIMPLE files from \fIlibfoo.a\fR and passes them on to the running GCC
! to make them part of the aggregated GIMPLE image to be optimized.
  .Sp
  If you are not using a linker with plugin support and/or do not
  enable the linker plugin, then the objects inside \fIlibfoo.a\fR
  are extracted and linked as usual, but they do not participate
! in the LTO optimization process.  In order to make a static library suitable
! for both LTO optimization and usual linkage, compile its object files with
  \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
  .Sp
! Link\-time optimizations do not require the presence of the whole program to
  operate.  If the program does not require any symbols to be exported, it is
  possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
  the interprocedural optimizers to use more aggressive assumptions which may
*************** lead to improved optimization opportunit
*** 13783,13818 ****
  Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
  active (see \fB\-fuse\-linker\-plugin\fR).
  .Sp
! The current implementation of \s-1LTO\s0 makes no
  attempt to generate bytecode that is portable between different
  types of hosts.  The bytecode files are versioned and there is a
  strict version check, so bytecode files generated in one version of
! \&\s-1GCC\s0 do not work with an older or newer version of \s-1GCC.\s0
  .Sp
! Link-time optimization does not work well with generation of debugging
! information on systems other than those using a combination of \s-1ELF\s0 and
! \&\s-1DWARF.\s0
  .Sp
  If you specify the optional \fIn\fR, the optimization and code
  generation done at link time is executed in parallel using \fIn\fR
  parallel jobs by utilizing an installed \fBmake\fR program.  The
! environment variable \fB\s-1MAKE\s0\fR may be used to override the program
  used.
  .Sp
! You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
  job server mode to determine the number of parallel jobs. This
! is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
  You must prepend a \fB+\fR to the command recipe in the parent Makefile
! for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
! \&\s-1GNU\s0 make.  Even without the option value, \s-1GCC\s0 tries to automatically
! detect a running \s-1GNU\s0 make's job server.
  .Sp
! Use \fB\-flto=auto\fR to use \s-1GNU\s0 make's job server, if available,
! or otherwise fall back to autodetection of the number of \s-1CPU\s0 threads
  present in your system.
! .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
  .IX Item "-flto-partition=alg"
! Specify the partitioning algorithm used by the link-time optimizer.
  The value is either \fB1to1\fR to specify a partitioning mirroring
  the original source files or \fBbalanced\fR to specify partitioning
  into equally sized chunks (whenever possible) or \fBmax\fR to create
--- 13716,13751 ----
  Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
  active (see \fB\-fuse\-linker\-plugin\fR).
  .Sp
! The current implementation of LTO makes no
  attempt to generate bytecode that is portable between different
  types of hosts.  The bytecode files are versioned and there is a
  strict version check, so bytecode files generated in one version of
! GCC do not work with an older or newer version of GCC.
  .Sp
! Link\-time optimization does not work well with generation of debugging
! information on systems other than those using a combination of ELF and
! DWARF.
  .Sp
  If you specify the optional \fIn\fR, the optimization and code
  generation done at link time is executed in parallel using \fIn\fR
  parallel jobs by utilizing an installed \fBmake\fR program.  The
! environment variable \fBMAKE\fR may be used to override the program
  used.
  .Sp
! You can also specify \fB\-flto=jobserver\fR to use GNU make\*(Aqs
  job server mode to determine the number of parallel jobs. This
! is useful when the Makefile calling GCC is already executing in parallel.
  You must prepend a \fB+\fR to the command recipe in the parent Makefile
! for this to work.  This option likely only works if \fBMAKE\fR is
! GNU make.  Even without the option value, GCC tries to automatically
! detect a running GNU make\*(Aqs job server.
  .Sp
! Use \fB\-flto=auto\fR to use GNU make\*(Aqs job server, if available,
! or otherwise fall back to autodetection of the number of CPU threads
  present in your system.
! .IP \fB\-flto\-partition=\fR\fIalg\fR 4
  .IX Item "-flto-partition=alg"
! Specify the partitioning algorithm used by the link\-time optimizer.
  The value is either \fB1to1\fR to specify a partitioning mirroring
  the original source files or \fBbalanced\fR to specify partitioning
  into equally sized chunks (whenever possible) or \fBmax\fR to create
*************** as an workaround for various code orderi
*** 13823,13883 ****
  partitioning is intended for internal testing only.
  The value \fBone\fR specifies that exactly one partition should be
  used while the value \fBnone\fR bypasses partitioning and executes
! the link-time optimization step directly from the \s-1WPA\s0 phase.
! .IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
  .IX Item "-flto-compression-level=n"
  This option specifies the level of compression used for intermediate
! language written to \s-1LTO\s0 object files, and is only meaningful in
! conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  \s-1GCC\s0 currently supports two
! \&\s-1LTO\s0 compression algorithms. For zstd, valid values are 0 (no compression)
  to 19 (maximum compression), while zlib supports values from 0 to 9.
  Values outside this range are clamped to either minimum or maximum
  of the supported values.  If the option is not given,
  a default balanced compression setting is used.
! .IP "\fB\-fuse\-linker\-plugin\fR" 4
  .IX Item "-fuse-linker-plugin"
! Enables the use of a linker plugin during link-time optimization.  This
  option relies on plugin support in the linker, which is available in gold
! or in \s-1GNU\s0 ld 2.21 or newer.
  .Sp
! This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
  of library archives. This improves the quality of optimization by exposing
! more code to the link-time optimizer.  This information specifies what
! symbols can be accessed externally (by non-LTO object or during dynamic
  linking).  Resulting code quality improvements on binaries (and shared
  libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
  See \fB\-flto\fR for a description of the effect of this flag and how to
  use it.
  .Sp
! This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
! and \s-1GCC\s0 was configured for use with
! a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
! .IP "\fB\-ffat\-lto\-objects\fR" 4
  .IX Item "-ffat-lto-objects"
! Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
! and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
  linking. This option is effective only when compiling with \fB\-flto\fR
  and is ignored at link time.
  .Sp
! \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO,\s0 but
! requires the complete toolchain to be aware of \s-1LTO.\s0 It requires a linker with
  linker plugin support for basic functionality.  Additionally,
  \&\fBnm\fR, \fBar\fR and \fBranlib\fR
! need to support linker plugins to allow a full-featured build environment
! (capable of building static libraries etc).  \s-1GCC\s0 provides the \fBgcc-ar\fR,
! \&\fBgcc-nm\fR, \fBgcc-ranlib\fR wrappers to pass the right options
! to these tools. With non fat \s-1LTO\s0 makefiles need to be modified to use them.
  .Sp
! Note that modern binutils provide plugin auto-load mechanism.
! Installing the linker plugin into \fI\f(CI$libdir\fI/bfd\-plugins\fR has the same
! effect as usage of the command wrappers (\fBgcc-ar\fR, \fBgcc-nm\fR and
! \&\fBgcc-ranlib\fR).
  .Sp
  The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
  support.
! .IP "\fB\-fcompare\-elim\fR" 4
  .IX Item "-fcompare-elim"
! After register allocation and post-register allocation instruction splitting,
  identify arithmetic instructions that compute processor flags similar to a
  comparison operation based on that arithmetic.  If possible, eliminate the
  explicit comparison operation.
--- 13756,13816 ----
  partitioning is intended for internal testing only.
  The value \fBone\fR specifies that exactly one partition should be
  used while the value \fBnone\fR bypasses partitioning and executes
! the link\-time optimization step directly from the WPA phase.
! .IP \fB\-flto\-compression\-level=\fR\fIn\fR 4
  .IX Item "-flto-compression-level=n"
  This option specifies the level of compression used for intermediate
! language written to LTO object files, and is only meaningful in
! conjunction with LTO mode (\fB\-flto\fR).  GCC currently supports two
! LTO compression algorithms. For zstd, valid values are 0 (no compression)
  to 19 (maximum compression), while zlib supports values from 0 to 9.
  Values outside this range are clamped to either minimum or maximum
  of the supported values.  If the option is not given,
  a default balanced compression setting is used.
! .IP \fB\-fuse\-linker\-plugin\fR 4
  .IX Item "-fuse-linker-plugin"
! Enables the use of a linker plugin during link\-time optimization.  This
  option relies on plugin support in the linker, which is available in gold
! or in GNU ld 2.21 or newer.
  .Sp
! This option enables the extraction of object files with GIMPLE bytecode out
  of library archives. This improves the quality of optimization by exposing
! more code to the link\-time optimizer.  This information specifies what
! symbols can be accessed externally (by non\-LTO object or during dynamic
  linking).  Resulting code quality improvements on binaries (and shared
  libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
  See \fB\-flto\fR for a description of the effect of this flag and how to
  use it.
  .Sp
! This option is enabled by default when LTO support in GCC is enabled
! and GCC was configured for use with
! a linker supporting plugins (GNU ld 2.21 or newer or gold).
! .IP \fB\-ffat\-lto\-objects\fR 4
  .IX Item "-ffat-lto-objects"
! Fat LTO objects are object files that contain both the intermediate language
! and the object code. This makes them usable for both LTO linking and normal
  linking. This option is effective only when compiling with \fB\-flto\fR
  and is ignored at link time.
  .Sp
! \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain LTO, but
! requires the complete toolchain to be aware of LTO. It requires a linker with
  linker plugin support for basic functionality.  Additionally,
  \&\fBnm\fR, \fBar\fR and \fBranlib\fR
! need to support linker plugins to allow a full\-featured build environment
! (capable of building static libraries etc).  GCC provides the \fBgcc\-ar\fR,
! \&\fBgcc\-nm\fR, \fBgcc\-ranlib\fR wrappers to pass the right options
! to these tools. With non fat LTO makefiles need to be modified to use them.
  .Sp
! Note that modern binutils provide plugin auto\-load mechanism.
! Installing the linker plugin into \fR\f(CI$libdir\fR\fI/bfd\-plugins\fR has the same
! effect as usage of the command wrappers (\fBgcc\-ar\fR, \fBgcc\-nm\fR and
! \&\fBgcc\-ranlib\fR).
  .Sp
  The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
  support.
! .IP \fB\-fcompare\-elim\fR 4
  .IX Item "-fcompare-elim"
! After register allocation and post\-register allocation instruction splitting,
  identify arithmetic instructions that compute processor flags similar to a
  comparison operation based on that arithmetic.  If possible, eliminate the
  explicit comparison operation.
*************** This pass only applies to certain target
*** 13886,13916 ****
  the comparison operation before register allocation is complete.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-ffold\-mem\-offsets\fR" 4
  .IX Item "-ffold-mem-offsets"
  .PD 0
! .IP "\fB\-fno\-fold\-mem\-offsets\fR" 4
  .IX Item "-fno-fold-mem-offsets"
  .PD
  Try to eliminate add instructions by folding them in memory loads/stores.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-fcprop\-registers\fR" 4
  .IX Item "-fcprop-registers"
! After register allocation and post-register allocation instruction splitting,
! perform a copy-propagation pass to try to reduce scheduling dependencies
  and occasionally eliminate the copy.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fprofile\-correction\fR" 4
  .IX Item "-fprofile-correction"
! Profiles collected using an instrumented binary for multi-threaded programs may
  be inconsistent due to missed counter updates. When this option is specified,
! \&\s-1GCC\s0 uses heuristics to correct or smooth out such inconsistencies. By
! default, \s-1GCC\s0 emits an error message when an inconsistent profile is detected.
  .Sp
  This option is enabled by \fB\-fauto\-profile\fR.
! .IP "\fB\-fprofile\-partial\-training\fR" 4
  .IX Item "-fprofile-partial-training"
  With \f(CW\*(C`\-fprofile\-use\*(C'\fR all portions of programs not executed during train
  run are optimized agressively for size rather than speed.  In some cases it is
--- 13819,13849 ----
  the comparison operation before register allocation is complete.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-ffold\-mem\-offsets\fR 4
  .IX Item "-ffold-mem-offsets"
  .PD 0
! .IP \fB\-fno\-fold\-mem\-offsets\fR 4
  .IX Item "-fno-fold-mem-offsets"
  .PD
  Try to eliminate add instructions by folding them in memory loads/stores.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
! .IP \fB\-fcprop\-registers\fR 4
  .IX Item "-fcprop-registers"
! After register allocation and post\-register allocation instruction splitting,
! perform a copy\-propagation pass to try to reduce scheduling dependencies
  and occasionally eliminate the copy.
  .Sp
  Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-fprofile\-correction\fR 4
  .IX Item "-fprofile-correction"
! Profiles collected using an instrumented binary for multi\-threaded programs may
  be inconsistent due to missed counter updates. When this option is specified,
! GCC uses heuristics to correct or smooth out such inconsistencies. By
! default, GCC emits an error message when an inconsistent profile is detected.
  .Sp
  This option is enabled by \fB\-fauto\-profile\fR.
! .IP \fB\-fprofile\-partial\-training\fR 4
  .IX Item "-fprofile-partial-training"
  With \f(CW\*(C`\-fprofile\-use\*(C'\fR all portions of programs not executed during train
  run are optimized agressively for size rather than speed.  In some cases it is
*************** functions not executed during the train
*** 13922,13934 ****
  they were compiled without profile feedback. This leads to better performance
  when train run is not representative but also leads to significantly bigger
  code.
! .IP "\fB\-fprofile\-use\fR" 4
  .IX Item "-fprofile-use"
  .PD 0
! .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
  .IX Item "-fprofile-use=path"
  .PD
! Enable profile feedback-directed optimizations, 
  and the following optimizations, many of which
  are generally profitable only with profile feedback available:
  .Sp
--- 13855,13867 ----
  they were compiled without profile feedback. This leads to better performance
  when train run is not representative but also leads to significantly bigger
  code.
! .IP \fB\-fprofile\-use\fR 4
  .IX Item "-fprofile-use"
  .PD 0
! .IP \fB\-fprofile\-use=\fR\fIpath\fR 4
  .IX Item "-fprofile-use=path"
  .PD
! Enable profile feedback\-directed optimizations, 
  and the following optimizations, many of which
  are generally profitable only with profile feedback available:
  .Sp
*************** are generally profitable only with profi
*** 13942,13962 ****
  .Sp
  Before you can use this option, you must first generate profiling information.
  .Sp
! By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
  match the source code.  This error can be turned into a warning by using
  \&\fB\-Wno\-error=coverage\-mismatch\fR.  Note this may result in poorly
! optimized code.  Additionally, by default, \s-1GCC\s0 also emits a warning message if
  the feedback profiles do not exist (see \fB\-Wmissing\-profile\fR).
  .Sp
! If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
! .IP "\fB\-fauto\-profile\fR" 4
  .IX Item "-fauto-profile"
  .PD 0
! .IP "\fB\-fauto\-profile=\fR\fIpath\fR" 4
  .IX Item "-fauto-profile=path"
  .PD
! Enable sampling-based feedback-directed optimizations, 
  and the following optimizations,
  many of which are generally profitable only with profile feedback available:
  .Sp
--- 13875,13895 ----
  .Sp
  Before you can use this option, you must first generate profiling information.
  .Sp
! By default, GCC emits an error message if the feedback profiles do not
  match the source code.  This error can be turned into a warning by using
  \&\fB\-Wno\-error=coverage\-mismatch\fR.  Note this may result in poorly
! optimized code.  Additionally, by default, GCC also emits a warning message if
  the feedback profiles do not exist (see \fB\-Wmissing\-profile\fR).
  .Sp
! If \fIpath\fR is specified, GCC looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
! .IP \fB\-fauto\-profile\fR 4
  .IX Item "-fauto-profile"
  .PD 0
! .IP \fB\-fauto\-profile=\fR\fIpath\fR 4
  .IX Item "-fauto-profile=path"
  .PD
! Enable sampling\-based feedback\-directed optimizations, 
  and the following optimizations,
  many of which are generally profitable only with profile feedback available:
  .Sp
*************** E.g.
*** 13983,13989 ****
  .Ve
  .Sp
  Then use the \fBcreate_gcov\fR tool to convert the raw profile data
! to a format that can be used by \s-1GCC.\s0  You must also supply the 
  unstripped binary for your program to this tool.  
  See <\fBhttps://github.com/google/autofdo\fR>.
  .Sp
--- 13916,13922 ----
  .Ve
  .Sp
  Then use the \fBcreate_gcov\fR tool to convert the raw profile data
! to a format that can be used by GCC.  You must also supply the 
  unstripped binary for your program to this tool.  
  See <\fBhttps://github.com/google/autofdo\fR>.
  .Sp
*************** E.g.
*** 13994,14029 ****
  \&            \-\-gcov=profile.afdo
  .Ve
  .PP
! The following options control compiler behavior regarding floating-point 
  arithmetic.  These options trade off between speed and
  correctness.  All must be specifically enabled.
! .IP "\fB\-ffloat\-store\fR" 4
  .IX Item "-ffloat-store"
! Do not store floating-point variables in registers, and inhibit other
! options that might change whether a floating-point value is taken from a
  register or memory.
  .Sp
  This option prevents undesirable excess precision on machines such as
  the 68000 where the floating registers (of the 68881) keep more
  precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
  x86 architecture.  For most programs, the excess precision does only
! good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
  point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
  them to store all pertinent intermediate computations into variables.
! .IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
  .IX Item "-fexcess-precision=style"
  This option allows further control over excess precision on machines
! where floating-point operations occur in a format with more precision or
! range than the \s-1IEEE\s0 standard and interchange floating-point types.  By
  default, \fB\-fexcess\-precision=fast\fR is in effect; this means that
  operations may be carried out in a wider precision than the types specified
  in the source if that would result in faster code, and it is unpredictable
  when rounding to the types specified in the source code takes place.
! When compiling C or \*(C+, if \fB\-fexcess\-precision=standard\fR is specified
! then excess precision follows the rules specified in \s-1ISO C99\s0 or \*(C+; in particular,
  both casts and assignments cause values to be rounded to their
  semantic types (whereas \fB\-ffloat\-store\fR only affects
! assignments).  This option is enabled by default for C or \*(C+ if a strict
  conformance option such as \fB\-std=c99\fR or \fB\-std=c++17\fR is used.
  \&\fB\-ffast\-math\fR enables \fB\-fexcess\-precision=fast\fR by default
  regardless of whether a strict conformance option is used.
--- 13927,13962 ----
  \&            \-\-gcov=profile.afdo
  .Ve
  .PP
! The following options control compiler behavior regarding floating\-point 
  arithmetic.  These options trade off between speed and
  correctness.  All must be specifically enabled.
! .IP \fB\-ffloat\-store\fR 4
  .IX Item "-ffloat-store"
! Do not store floating\-point variables in registers, and inhibit other
! options that might change whether a floating\-point value is taken from a
  register or memory.
  .Sp
  This option prevents undesirable excess precision on machines such as
  the 68000 where the floating registers (of the 68881) keep more
  precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
  x86 architecture.  For most programs, the excess precision does only
! good, but a few programs rely on the precise definition of IEEE floating
  point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
  them to store all pertinent intermediate computations into variables.
! .IP \fB\-fexcess\-precision=\fR\fIstyle\fR 4
  .IX Item "-fexcess-precision=style"
  This option allows further control over excess precision on machines
! where floating\-point operations occur in a format with more precision or
! range than the IEEE standard and interchange floating\-point types.  By
  default, \fB\-fexcess\-precision=fast\fR is in effect; this means that
  operations may be carried out in a wider precision than the types specified
  in the source if that would result in faster code, and it is unpredictable
  when rounding to the types specified in the source code takes place.
! When compiling C or C++, if \fB\-fexcess\-precision=standard\fR is specified
! then excess precision follows the rules specified in ISO C99 or C++; in particular,
  both casts and assignments cause values to be rounded to their
  semantic types (whereas \fB\-ffloat\-store\fR only affects
! assignments).  This option is enabled by default for C or C++ if a strict
  conformance option such as \fB\-std=c99\fR or \fB\-std=c++17\fR is used.
  \&\fB\-ffast\-math\fR enables \fB\-fexcess\-precision=fast\fR by default
  regardless of whether a strict conformance option is used.
*************** results of expressions with types \f(CW\
*** 14032,14042 ****
  are computed without excess precision.
  .Sp
  \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
! other than C or \*(C+.  On the x86, it has no effect if \fB\-mfpmath=sse\fR
! or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
  semantics apply without excess precision, and in the latter, rounding
  is unpredictable.
! .IP "\fB\-ffast\-math\fR" 4
  .IX Item "-ffast-math"
  Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
--- 13965,13975 ----
  are computed without excess precision.
  .Sp
  \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
! other than C or C++.  On the x86, it has no effect if \fB\-mfpmath=sse\fR
! or \fB\-mfpmath=sse+387\fR is specified; in the former case, IEEE
  semantics apply without excess precision, and in the latter, rounding
  is unpredictable.
! .IP \fB\-ffast\-math\fR 4
  .IX Item "-ffast-math"
  Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
*************** This option causes the preprocessor macr
*** 14047,14065 ****
  .Sp
  This option is not turned on by any \fB\-O\fR option besides
  \&\fB\-Ofast\fR since it can result in incorrect output for programs
! that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
  for math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
! .IP "\fB\-fno\-math\-errno\fR" 4
  .IX Item "-fno-math-errno"
  Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
  with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
! \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
! for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
--- 13980,13998 ----
  .Sp
  This option is not turned on by any \fB\-O\fR option besides
  \&\fB\-Ofast\fR since it can result in incorrect output for programs
! that depend on an exact implementation of IEEE or ISO rules/specifications
  for math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
! .IP \fB\-fno\-math\-errno\fR 4
  .IX Item "-fno-math-errno"
  Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
  with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
! IEEE exceptions for math error handling may want to use this flag
! for speed while maintaining IEEE arithmetic compatibility.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
*************** The default is \fB\-fmath\-errno\fR.
*** 14068,14107 ****
  On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
  therefore no reason for the compiler to consider the possibility that
  it might, and \fB\-fno\-math\-errno\fR is the default.
! .IP "\fB\-funsafe\-math\-optimizations\fR" 4
  .IX Item "-funsafe-math-optimizations"
! Allow optimizations for floating-point arithmetic that (a) assume
! that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
! \&\s-1ANSI\s0 standards.  When used at link time, it may include libraries
! or startup files that change the default \s-1FPU\s0 control word or other
  similar optimizations.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
  \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
  .Sp
  The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
! .IP "\fB\-fassociative\-math\fR" 4
  .IX Item "-fassociative-math"
! Allow re-association of operands in series of floating-point operations.
! This violates the \s-1ISO C\s0 and \*(C+ language standard by possibly changing
! computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
  well as ignore NaNs and inhibit or create underflow or overflow (and
  thus cannot be used on code that relies on rounding behavior like
! \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
  and thus may not be used when ordered comparisons are required.
  This option requires that both \fB\-fno\-signed\-zeros\fR and
! \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
  much sense with \fB\-frounding\-math\fR. For Fortran the option
  is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
  \&\fB\-fno\-trapping\-math\fR are in effect.
  .Sp
  The default is \fB\-fno\-associative\-math\fR.
! .IP "\fB\-freciprocal\-math\fR" 4
  .IX Item "-freciprocal-math"
  Allow the reciprocal of a value to be used instead of dividing by
  the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
--- 14001,14040 ----
  On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
  therefore no reason for the compiler to consider the possibility that
  it might, and \fB\-fno\-math\-errno\fR is the default.
! .IP \fB\-funsafe\-math\-optimizations\fR 4
  .IX Item "-funsafe-math-optimizations"
! Allow optimizations for floating\-point arithmetic that (a) assume
! that arguments and results are valid and (b) may violate IEEE or
! ANSI standards.  When used at link time, it may include libraries
! or startup files that change the default FPU control word or other
  similar optimizations.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
  \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
  .Sp
  The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
! .IP \fB\-fassociative\-math\fR 4
  .IX Item "-fassociative-math"
! Allow re\-association of operands in series of floating\-point operations.
! This violates the ISO C and C++ language standard by possibly changing
! computation result.  NOTE: re\-ordering may change the sign of zero as
  well as ignore NaNs and inhibit or create underflow or overflow (and
  thus cannot be used on code that relies on rounding behavior like
! \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating\-point comparisons
  and thus may not be used when ordered comparisons are required.
  This option requires that both \fB\-fno\-signed\-zeros\fR and
! \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn\*(Aqt make
  much sense with \fB\-frounding\-math\fR. For Fortran the option
  is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
  \&\fB\-fno\-trapping\-math\fR are in effect.
  .Sp
  The default is \fB\-fno\-associative\-math\fR.
! .IP \fB\-freciprocal\-math\fR 4
  .IX Item "-freciprocal-math"
  Allow the reciprocal of a value to be used instead of dividing by
  the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
*************** is subject to common subexpression elimi
*** 14110,14179 ****
  precision and increases the number of flops operating on the value.
  .Sp
  The default is \fB\-fno\-reciprocal\-math\fR.
! .IP "\fB\-ffinite\-math\-only\fR" 4
  .IX Item "-ffinite-math-only"
! Allow optimizations for floating-point arithmetic that assume
  that arguments and results are not NaNs or +\-Infs.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
  The default is \fB\-fno\-finite\-math\-only\fR.
! .IP "\fB\-fno\-signed\-zeros\fR" 4
  .IX Item "-fno-signed-zeros"
! Allow optimizations for floating-point arithmetic that ignore the
! signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
  distinct +0.0 and \-0.0 values, which then prohibits simplification
  of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
! This option implies that the sign of a zero result isn't significant.
  .Sp
  The default is \fB\-fsigned\-zeros\fR.
! .IP "\fB\-fno\-trapping\-math\fR" 4
  .IX Item "-fno-trapping-math"
! Compile code assuming that floating-point operations cannot generate
! user-visible traps.  These traps include division by zero, overflow,
  underflow, inexact result and invalid operation.  This option requires
  that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
! allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
  .Sp
  This option should never be turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
  math functions.
  .Sp
  The default is \fB\-ftrapping\-math\fR.
  .Sp
! Future versions of \s-1GCC\s0 may provide finer control of this setting
! using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
  will be used along with \fB\-frounding\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP "\fB\-frounding\-math\fR" 4
  .IX Item "-frounding-math"
! Disable transformations and optimizations that assume default floating-point
! rounding behavior.  This is round-to-zero for all floating point
! to integer conversions, and round-to-nearest for all other arithmetic
  truncations.  This option should be specified for programs that change
! the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
! non-default rounding mode.  This option disables constant folding of
! floating-point expressions at compile time (which may be affected by
  rounding mode) and arithmetic transformations that are unsafe in the
! presence of sign-dependent rounding modes.
  .Sp
  The default is \fB\-fno\-rounding\-math\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
! Future versions of \s-1GCC\s0 may provide finer control of this setting
! using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
  will be used along with \fB\-ftrapping\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP "\fB\-fsignaling\-nans\fR" 4
  .IX Item "-fsignaling-nans"
! Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
! traps during floating-point operations.  Setting this option disables
  optimizations that may change the number of exceptions visible with
  signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
  .Sp
--- 14043,14112 ----
  precision and increases the number of flops operating on the value.
  .Sp
  The default is \fB\-fno\-reciprocal\-math\fR.
! .IP \fB\-ffinite\-math\-only\fR 4
  .IX Item "-ffinite-math-only"
! Allow optimizations for floating\-point arithmetic that assume
  that arguments and results are not NaNs or +\-Infs.
  .Sp
  This option is not turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions. It may, however, yield faster code for programs
  that do not require the guarantees of these specifications.
  .Sp
  The default is \fB\-fno\-finite\-math\-only\fR.
! .IP \fB\-fno\-signed\-zeros\fR 4
  .IX Item "-fno-signed-zeros"
! Allow optimizations for floating\-point arithmetic that ignore the
! signedness of zero.  IEEE arithmetic specifies the behavior of
  distinct +0.0 and \-0.0 values, which then prohibits simplification
  of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
! This option implies that the sign of a zero result isn\*(Aqt significant.
  .Sp
  The default is \fB\-fsigned\-zeros\fR.
! .IP \fB\-fno\-trapping\-math\fR 4
  .IX Item "-fno-trapping-math"
! Compile code assuming that floating\-point operations cannot generate
! user\-visible traps.  These traps include division by zero, overflow,
  underflow, inexact result and invalid operation.  This option requires
  that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
! allow faster code if one relies on "non\-stop" IEEE arithmetic, for example.
  .Sp
  This option should never be turned on by any \fB\-O\fR option since
  it can result in incorrect output for programs that depend on
! an exact implementation of IEEE or ISO rules/specifications for
  math functions.
  .Sp
  The default is \fB\-ftrapping\-math\fR.
  .Sp
! Future versions of GCC may provide finer control of this setting
! using C99\*(Aqs \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command\-line option
  will be used along with \fB\-frounding\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP \fB\-frounding\-math\fR 4
  .IX Item "-frounding-math"
! Disable transformations and optimizations that assume default floating\-point
! rounding behavior.  This is round\-to\-zero for all floating point
! to integer conversions, and round\-to\-nearest for all other arithmetic
  truncations.  This option should be specified for programs that change
! the FP rounding mode dynamically, or that may be executed with a
! non\-default rounding mode.  This option disables constant folding of
! floating\-point expressions at compile time (which may be affected by
  rounding mode) and arithmetic transformations that are unsafe in the
! presence of sign\-dependent rounding modes.
  .Sp
  The default is \fB\-fno\-rounding\-math\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all GCC optimizations that are affected by rounding mode.
! Future versions of GCC may provide finer control of this setting
! using C99\*(Aqs \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command\-line option
  will be used along with \fB\-ftrapping\-math\fR to specify the
  default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
! .IP \fB\-fsignaling\-nans\fR 4
  .IX Item "-fsignaling-nans"
! Compile code assuming that IEEE signaling NaNs may generate user\-visible
! traps during floating\-point operations.  Setting this option disables
  optimizations that may change the number of exceptions visible with
  signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
  .Sp
*************** be defined.
*** 14183,14211 ****
  The default is \fB\-fno\-signaling\-nans\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
! .IP "\fB\-fno\-fp\-int\-builtin\-inexact\fR" 4
  .IX Item "-fno-fp-int-builtin-inexact"
! Do not allow the built-in functions \f(CW\*(C`ceil\*(C'\fR, \f(CW\*(C`floor\*(C'\fR,
  \&\f(CW\*(C`round\*(C'\fR and \f(CW\*(C`trunc\*(C'\fR, and their \f(CW\*(C`float\*(C'\fR and \f(CW\*(C`long
! double\*(C'\fR variants, to generate code that raises the \*(L"inexact\*(R"
! floating-point exception for noninteger arguments.  \s-1ISO C99\s0 and C11
! allow these functions to raise the \*(L"inexact\*(R" exception, but \s-1ISO/IEC
! TS 18661\-1:2014,\s0 the C bindings to \s-1IEEE 754\-2008,\s0 as integrated into
! \&\s-1ISO C23,\s0 does not allow these functions to do so.
  .Sp
  The default is \fB\-ffp\-int\-builtin\-inexact\fR, allowing the
  exception to be raised, unless C23 or a later C standard is selected.
  This option does nothing unless \fB\-ftrapping\-math\fR is in effect.
  .Sp
  Even if \fB\-fno\-fp\-int\-builtin\-inexact\fR is used, if the functions
! generate a call to a library function then the \*(L"inexact\*(R" exception
! may be raised if the library implementation does not follow \s-1TS 18661.\s0
! .IP "\fB\-fsingle\-precision\-constant\fR" 4
  .IX Item "-fsingle-precision-constant"
! Treat floating-point constants as single precision instead of
! implicitly converting them to double-precision constants.
! .IP "\fB\-fcx\-limited\-range\fR" 4
  .IX Item "-fcx-limited-range"
  When enabled, this option states that a range reduction step is not
  needed when performing complex division.  Also, there is no checking
--- 14116,14144 ----
  The default is \fB\-fno\-signaling\-nans\fR.
  .Sp
  This option is experimental and does not currently guarantee to
! disable all GCC optimizations that affect signaling NaN behavior.
! .IP \fB\-fno\-fp\-int\-builtin\-inexact\fR 4
  .IX Item "-fno-fp-int-builtin-inexact"
! Do not allow the built\-in functions \f(CW\*(C`ceil\*(C'\fR, \f(CW\*(C`floor\*(C'\fR,
  \&\f(CW\*(C`round\*(C'\fR and \f(CW\*(C`trunc\*(C'\fR, and their \f(CW\*(C`float\*(C'\fR and \f(CW\*(C`long
! double\*(C'\fR variants, to generate code that raises the "inexact"
! floating\-point exception for noninteger arguments.  ISO C99 and C11
! allow these functions to raise the "inexact" exception, but ISO/IEC
! TS 18661\-1:2014, the C bindings to IEEE 754\-2008, as integrated into
! ISO C23, does not allow these functions to do so.
  .Sp
  The default is \fB\-ffp\-int\-builtin\-inexact\fR, allowing the
  exception to be raised, unless C23 or a later C standard is selected.
  This option does nothing unless \fB\-ftrapping\-math\fR is in effect.
  .Sp
  Even if \fB\-fno\-fp\-int\-builtin\-inexact\fR is used, if the functions
! generate a call to a library function then the "inexact" exception
! may be raised if the library implementation does not follow TS 18661.
! .IP \fB\-fsingle\-precision\-constant\fR 4
  .IX Item "-fsingle-precision-constant"
! Treat floating\-point constants as single precision instead of
! implicitly converting them to double\-precision constants.
! .IP \fB\-fcx\-limited\-range\fR 4
  .IX Item "-fcx-limited-range"
  When enabled, this option states that a range reduction step is not
  needed when performing complex division.  Also, there is no checking
*************** whether the result of a complex multipli
*** 14214,14223 ****
  default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
  \&\fB\-ffast\-math\fR.
  .Sp
! This option controls the default setting of the \s-1ISO C99\s0
  \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
  all languages.
! .IP "\fB\-fcx\-fortran\-rules\fR" 4
  .IX Item "-fcx-fortran-rules"
  Complex multiplication and division follow Fortran rules.  Range
  reduction is done as part of complex division, but there is no checking
--- 14147,14156 ----
  default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
  \&\fB\-ffast\-math\fR.
  .Sp
! This option controls the default setting of the ISO C99
  \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
  all languages.
! .IP \fB\-fcx\-fortran\-rules\fR 4
  .IX Item "-fcx-fortran-rules"
  Complex multiplication and division follow Fortran rules.  Range
  reduction is done as part of complex division, but there is no checking
*************** The default is \fB\-fno\-cx\-fortran\-ru
*** 14229,14256 ****
  The following options control optimizations that may improve
  performance, but are not enabled by any \fB\-O\fR options.  This
  section includes experimental options that may produce broken code.
! .IP "\fB\-fbranch\-probabilities\fR" 4
  .IX Item "-fbranch-probabilities"
  After running a program compiled with \fB\-fprofile\-arcs\fR,
  you can compile it a second time using
  \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
  the number of times each branch was taken.  When a program
  compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
! counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
  file.  The information in this data file is very dependent on the
  structure of the generated code, so you must use the same source code
  and the same optimization options for both compilations.
  See details about the file naming in \fB\-fprofile\-arcs\fR.
  .Sp
! With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
! \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
  These can be used to improve optimization.  Currently, they are only
  used in one place: in \fIreorg.cc\fR, instead of guessing which path a
! branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
  exactly determine which path is taken more often.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fprofile\-values\fR" 4
  .IX Item "-fprofile-values"
  If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
  data about values of expressions in the program is gathered.
--- 14162,14189 ----
  The following options control optimizations that may improve
  performance, but are not enabled by any \fB\-O\fR options.  This
  section includes experimental options that may produce broken code.
! .IP \fB\-fbranch\-probabilities\fR 4
  .IX Item "-fbranch-probabilities"
  After running a program compiled with \fB\-fprofile\-arcs\fR,
  you can compile it a second time using
  \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
  the number of times each branch was taken.  When a program
  compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
! counts to a file called \fIsourcename.gcda\fR for each source
  file.  The information in this data file is very dependent on the
  structure of the generated code, so you must use the same source code
  and the same optimization options for both compilations.
  See details about the file naming in \fB\-fprofile\-arcs\fR.
  .Sp
! With \fB\-fbranch\-probabilities\fR, GCC puts a
! \&\fBREG_BR_PROB\fR note on each \fBJUMP_INSN\fR and \fBCALL_INSN\fR.
  These can be used to improve optimization.  Currently, they are only
  used in one place: in \fIreorg.cc\fR, instead of guessing which path a
! branch is most likely to take, the \fBREG_BR_PROB\fR values are used to
  exactly determine which path is taken more often.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fprofile\-values\fR 4
  .IX Item "-fprofile-values"
  If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
  data about values of expressions in the program is gathered.
*************** from profiling values of expressions for
*** 14260,14273 ****
  .Sp
  Enabled by \fB\-fprofile\-generate\fR, \fB\-fprofile\-use\fR, and
  \&\fB\-fauto\-profile\fR.
! .IP "\fB\-fprofile\-reorder\-functions\fR" 4
  .IX Item "-fprofile-reorder-functions"
  Function reordering based on profile instrumentation collects
  first time of execution of a function and orders these functions
  in ascending order.
  .Sp
  Enabled with \fB\-fprofile\-use\fR.
! .IP "\fB\-fvpt\fR" 4
  .IX Item "-fvpt"
  If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
  to add code to gather information about values of expressions.
--- 14193,14206 ----
  .Sp
  Enabled by \fB\-fprofile\-generate\fR, \fB\-fprofile\-use\fR, and
  \&\fB\-fauto\-profile\fR.
! .IP \fB\-fprofile\-reorder\-functions\fR 4
  .IX Item "-fprofile-reorder-functions"
  Function reordering based on profile instrumentation collects
  first time of execution of a function and orders these functions
  in ascending order.
  .Sp
  Enabled with \fB\-fprofile\-use\fR.
! .IP \fB\-fvpt\fR 4
  .IX Item "-fvpt"
  If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
  to add code to gather information about values of expressions.
*************** Currently the optimizations include spec
*** 14278,14308 ****
  using the knowledge about the value of the denominator.
  .Sp
  Enabled with \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-frename\-registers\fR" 4
  .IX Item "-frename-registers"
  Attempt to avoid false dependencies in scheduled code by making use
  of registers left over after register allocation.  This optimization
  most benefits processors with lots of registers.  Depending on the
  debug information format adopted by the target, however, it can
  make debugging impossible, since variables no longer stay in
! a \*(L"home register\*(R".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP "\fB\-fschedule\-fusion\fR" 4
  .IX Item "-fschedule-fusion"
  Performs a target dependent pass over the instruction stream to schedule
  instructions of same type together because target machine can execute them
  more efficiently if they are adjacent to each other in the instruction flow.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-ftracer\fR" 4
  .IX Item "-ftracer"
  Perform tail duplication to enlarge superblock size.  This transformation
  simplifies the control flow of the function allowing other optimizations to do
  a better job.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-funroll\-loops\fR" 4
  .IX Item "-funroll-loops"
  Unroll loops whose number of iterations can be determined at compile time or
  upon entry to the loop.  \fB\-funroll\-loops\fR implies
--- 14211,14241 ----
  using the knowledge about the value of the denominator.
  .Sp
  Enabled with \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-frename\-registers\fR 4
  .IX Item "-frename-registers"
  Attempt to avoid false dependencies in scheduled code by making use
  of registers left over after register allocation.  This optimization
  most benefits processors with lots of registers.  Depending on the
  debug information format adopted by the target, however, it can
  make debugging impossible, since variables no longer stay in
! a "home register".
  .Sp
  Enabled by default with \fB\-funroll\-loops\fR.
! .IP \fB\-fschedule\-fusion\fR 4
  .IX Item "-fschedule-fusion"
  Performs a target dependent pass over the instruction stream to schedule
  instructions of same type together because target machine can execute them
  more efficiently if they are adjacent to each other in the instruction flow.
  .Sp
  Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP \fB\-ftracer\fR 4
  .IX Item "-ftracer"
  Perform tail duplication to enlarge superblock size.  This transformation
  simplifies the control flow of the function allowing other optimizations to do
  a better job.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-funroll\-loops\fR 4
  .IX Item "-funroll-loops"
  Unroll loops whose number of iterations can be determined at compile time or
  upon entry to the loop.  \fB\-funroll\-loops\fR implies
*************** a small constant number of iterations).
*** 14312,14324 ****
  or may not make it run faster.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-funroll\-all\-loops\fR" 4
  .IX Item "-funroll-all-loops"
  Unroll all loops, even if their number of iterations is uncertain when
  the loop is entered.  This usually makes programs run more slowly.
  \&\fB\-funroll\-all\-loops\fR implies the same options as
  \&\fB\-funroll\-loops\fR.
! .IP "\fB\-fpeel\-loops\fR" 4
  .IX Item "-fpeel-loops"
  Peels loops for which there is enough information that they do not
  roll much (from profile feedback or static analysis).  It also turns on
--- 14245,14257 ----
  or may not make it run faster.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-funroll\-all\-loops\fR 4
  .IX Item "-funroll-all-loops"
  Unroll all loops, even if their number of iterations is uncertain when
  the loop is entered.  This usually makes programs run more slowly.
  \&\fB\-funroll\-all\-loops\fR implies the same options as
  \&\fB\-funroll\-loops\fR.
! .IP \fB\-fpeel\-loops\fR 4
  .IX Item "-fpeel-loops"
  Peels loops for which there is enough information that they do not
  roll much (from profile feedback or static analysis).  It also turns on
*************** complete loop peeling (i.e. complete rem
*** 14326,14356 ****
  number of iterations).
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR, and \fB\-fauto\-profile\fR.
! .IP "\fB\-fmove\-loop\-invariants\fR" 4
  .IX Item "-fmove-loop-invariants"
! Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
  at level \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP "\fB\-fmove\-loop\-stores\fR" 4
  .IX Item "-fmove-loop-stores"
! Enables the loop store motion pass in the \s-1GIMPLE\s0 loop optimizer.  This
  moves invariant stores to after the end of the loop in exchange for
  carrying the stored value in a register across the iteration.
  Note for this option to have an effect \fB\-ftree\-loop\-im\fR has to
  be enabled as well.  Enabled at level \fB\-O1\fR and higher, except
  for \fB\-Og\fR.
! .IP "\fB\-fsplit\-loops\fR" 4
  .IX Item "-fsplit-loops"
! Split a loop into two if it contains a condition that's always true
  for one side of the iteration space and false for the other.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-funswitch\-loops\fR" 4
  .IX Item "-funswitch-loops"
  Move branches with loop invariant conditions out of the loop, with duplicates
  of the loop on both branches (modified according to result of the condition).
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-fversion\-loops\-for\-strides\fR" 4
  .IX Item "-fversion-loops-for-strides"
  If a loop iterates over an array with a variable stride, create another
  version of the loop that assumes the stride is always one.  For example:
--- 14259,14289 ----
  number of iterations).
  .Sp
  Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR, and \fB\-fauto\-profile\fR.
! .IP \fB\-fmove\-loop\-invariants\fR 4
  .IX Item "-fmove-loop-invariants"
! Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
  at level \fB\-O1\fR and higher, except for \fB\-Og\fR.
! .IP \fB\-fmove\-loop\-stores\fR 4
  .IX Item "-fmove-loop-stores"
! Enables the loop store motion pass in the GIMPLE loop optimizer.  This
  moves invariant stores to after the end of the loop in exchange for
  carrying the stored value in a register across the iteration.
  Note for this option to have an effect \fB\-ftree\-loop\-im\fR has to
  be enabled as well.  Enabled at level \fB\-O1\fR and higher, except
  for \fB\-Og\fR.
! .IP \fB\-fsplit\-loops\fR 4
  .IX Item "-fsplit-loops"
! Split a loop into two if it contains a condition that\*(Aqs always true
  for one side of the iteration space and false for the other.
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-funswitch\-loops\fR 4
  .IX Item "-funswitch-loops"
  Move branches with loop invariant conditions out of the loop, with duplicates
  of the loop on both branches (modified according to result of the condition).
  .Sp
  Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-fversion\-loops\-for\-strides\fR 4
  .IX Item "-fversion-loops-for-strides"
  If a loop iterates over an array with a variable stride, create another
  version of the loop that assumes the stride is always one.  For example:
*************** becomes:
*** 14371,14402 ****
  \&            x[i * stride] = ...;
  .Ve
  .Sp
! This is particularly useful for assumed-shape arrays in Fortran where
  (for example) it allows better vectorization assuming contiguous accesses.
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP "\fB\-ffunction\-sections\fR" 4
  .IX Item "-ffunction-sections"
  .PD 0
! .IP "\fB\-fdata\-sections\fR" 4
  .IX Item "-fdata-sections"
  .PD
  Place each function or data item into its own section in the output
  file if the target supports arbitrary sections.  The name of the
! function or the name of the data item determines the section's name
  in the output file.
  .Sp
  Use these options on systems where the linker can perform optimizations to
  improve locality of reference in the instruction space.  Most systems using the
! \&\s-1ELF\s0 object format have linkers with such optimizations.  On \s-1AIX,\s0 the linker
  rearranges sections (CSECTs) based on the call graph.  The performance impact
  varies.
  .Sp
  Together with a linker garbage collection (linker \fB\-\-gc\-sections\fR
! option) these options may lead to smaller statically-linked executables (after
  stripping).
  .Sp
! On \s-1ELF/DWARF\s0 systems these options do not degenerate the quality of the debug
  information.  There could be issues with other object files/debug info formats.
  .Sp
  Only use these options when there are significant benefits from doing so.  When
--- 14304,14335 ----
  \&            x[i * stride] = ...;
  .Ve
  .Sp
! This is particularly useful for assumed\-shape arrays in Fortran where
  (for example) it allows better vectorization assuming contiguous accesses.
  This flag is enabled by default at \fB\-O3\fR.
  It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
! .IP \fB\-ffunction\-sections\fR 4
  .IX Item "-ffunction-sections"
  .PD 0
! .IP \fB\-fdata\-sections\fR 4
  .IX Item "-fdata-sections"
  .PD
  Place each function or data item into its own section in the output
  file if the target supports arbitrary sections.  The name of the
! function or the name of the data item determines the section\*(Aqs name
  in the output file.
  .Sp
  Use these options on systems where the linker can perform optimizations to
  improve locality of reference in the instruction space.  Most systems using the
! ELF object format have linkers with such optimizations.  On AIX, the linker
  rearranges sections (CSECTs) based on the call graph.  The performance impact
  varies.
  .Sp
  Together with a linker garbage collection (linker \fB\-\-gc\-sections\fR
! option) these options may lead to smaller statically\-linked executables (after
  stripping).
  .Sp
! On ELF/DWARF systems these options do not degenerate the quality of the debug
  information.  There could be issues with other object files/debug info formats.
  .Sp
  Only use these options when there are significant benefits from doing so.  When
*************** They prevent optimizations by the compil
*** 14406,14420 ****
  locations inside a translation unit since the locations are unknown until
  link time.  An example of such an optimization is relaxing calls to short call
  instructions.
! .IP "\fB\-fstdarg\-opt\fR" 4
  .IX Item "-fstdarg-opt"
  Optimize the prologue of variadic argument functions with respect to usage of
  those arguments.
! .IP "\fB\-fsection\-anchors\fR" 4
  .IX Item "-fsection-anchors"
  Try to reduce the number of symbolic address calculations by using
! shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
! can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
  targets.
  .Sp
  For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
--- 14339,14353 ----
  locations inside a translation unit since the locations are unknown until
  link time.  An example of such an optimization is relaxing calls to short call
  instructions.
! .IP \fB\-fstdarg\-opt\fR 4
  .IX Item "-fstdarg-opt"
  Optimize the prologue of variadic argument functions with respect to usage of
  those arguments.
! .IP \fB\-fsection\-anchors\fR 4
  .IX Item "-fsection-anchors"
  Try to reduce the number of symbolic address calculations by using
! shared "anchor" symbols to address nearby objects.  This transformation
! can help to reduce the number of GOT entries and GOT accesses on some
  targets.
  .Sp
  For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
*************** For example, the implementation of the f
*** 14427,14433 ****
  usually calculates the addresses of all three variables, but if you
  compile it with \fB\-fsection\-anchors\fR, it accesses the variables
  from a common anchor point instead.  The effect is similar to the
! following pseudocode (which isn't valid C):
  .Sp
  .Vb 5
  \&        int foo (void)
--- 14360,14366 ----
  usually calculates the addresses of all three variables, but if you
  compile it with \fB\-fsection\-anchors\fR, it accesses the variables
  from a common anchor point instead.  The effect is similar to the
! following pseudocode (which isn\*(Aqt valid C):
  .Sp
  .Vb 5
  \&        int foo (void)
*************** following pseudocode (which isn't valid
*** 14438,14447 ****
  .Ve
  .Sp
  Not all targets support this option.
! .IP "\fB\-fzero\-call\-used\-regs=\fR\fIchoice\fR" 4
  .IX Item "-fzero-call-used-regs=choice"
! Zero call-used registers at function return to increase program
! security by either mitigating Return-Oriented Programming (\s-1ROP\s0)
  attacks or preventing information leakage through registers.
  .Sp
  The possible values of \fIchoice\fR are the same as for the
--- 14371,14380 ----
  .Ve
  .Sp
  Not all targets support this option.
! .IP \fB\-fzero\-call\-used\-regs=\fR\fIchoice\fR 4
  .IX Item "-fzero-call-used-regs=choice"
! Zero call\-used registers at function return to increase program
! security by either mitigating Return\-Oriented Programming (ROP)
  attacks or preventing information leakage through registers.
  .Sp
  The possible values of \fIchoice\fR are the same as for the
*************** You can control this behavior for a spec
*** 14452,14459 ****
  attribute \f(CW\*(C`zero_call_used_regs\*(C'\fR.
  .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
  .IX Item "--param name=value"
! In some places, \s-1GCC\s0 uses various constants to control the amount of
! optimization that is done.  For example, \s-1GCC\s0 does not inline functions
  that contain more than a certain number of instructions.  You can
  control some of these constants on the command line using the
  \&\fB\-\-param\fR option.
--- 14385,14392 ----
  attribute \f(CW\*(C`zero_call_used_regs\*(C'\fR.
  .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
  .IX Item "--param name=value"
! In some places, GCC uses various constants to control the amount of
! optimization that is done.  For example, GCC does not inline functions
  that contain more than a certain number of instructions.  You can
  control some of these constants on the command line using the
  \&\fB\-\-param\fR option.
*************** use the \fB\-\-help=param \-Q\fR options
*** 14468,14521 ****
  In each case, the \fIvalue\fR is an integer.  The following choices
  of \fIname\fR are recognized for all targets:
  .RS 4
! .IP "\fBpredictable-branch-outcome\fR" 4
  .IX Item "predictable-branch-outcome"
  When branch is predicted to be taken with probability lower than this threshold
  (in percent), then it is considered well predictable.
! .IP "\fBmax-rtl-if-conversion-insns\fR" 4
  .IX Item "max-rtl-if-conversion-insns"
! \&\s-1RTL\s0 if-conversion tries to remove conditional branches around a block and
  replace them with conditionally executed instructions.  This parameter
  gives the maximum number of instructions in a block which should be
! considered for if-conversion.  The compiler will
! also use other heuristics to decide whether if-conversion is likely to be
  profitable.
! .IP "\fBmax-rtl-if-conversion-predictable-cost\fR" 4
  .IX Item "max-rtl-if-conversion-predictable-cost"
! \&\s-1RTL\s0 if-conversion will try to remove conditional branches around a block
  and replace them with conditionally executed instructions.  These parameters
  give the maximum permissible cost for the sequence that would be generated
! by if-conversion depending on whether the branch is statically determined
  to be predictable or not.  The units for this parameter are the same as
! those for the \s-1GCC\s0 internal seq_cost metric.  The compiler will try to
! provide a reasonable default for this parameter using the \s-1BRANCH_COST\s0
  target macro.
! .IP "\fBmax-crossjump-edges\fR" 4
  .IX Item "max-crossjump-edges"
! The maximum number of incoming edges to consider for cross-jumping.
  The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
  the number of edges incoming to each block.  Increasing values mean
  more aggressive optimization, making the compilation time increase with
  probably small improvement in executable size.
! .IP "\fBmin-crossjump-insns\fR" 4
  .IX Item "min-crossjump-insns"
  The minimum number of instructions that must be matched at the end
! of two blocks before cross-jumping is performed on them.  This
  value is ignored in the case where all instructions in the block being
! cross-jumped from are matched.
! .IP "\fBmax-grow-copy-bb-insns\fR" 4
  .IX Item "max-grow-copy-bb-insns"
  The maximum code size expansion factor when copying basic blocks
  instead of jumping.  The expansion is relative to a jump instruction.
! .IP "\fBmax-goto-duplication-insns\fR" 4
  .IX Item "max-goto-duplication-insns"
  The maximum number of instructions to duplicate to a block that jumps
  to a computed goto.  To avoid O(N^2) behavior in a number of
! passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
  and unfactors them as late as possible.  Only computed jumps at the
! end of a basic blocks with no more than max-goto-duplication-insns are
  unfactored.
! .IP "\fBmax-delay-slot-insn-search\fR" 4
  .IX Item "max-delay-slot-insn-search"
  The maximum number of instructions to consider when looking for an
  instruction to fill a delay slot.  If more than this arbitrary number of
--- 14401,14454 ----
  In each case, the \fIvalue\fR is an integer.  The following choices
  of \fIname\fR are recognized for all targets:
  .RS 4
! .IP \fBpredictable\-branch\-outcome\fR 4
  .IX Item "predictable-branch-outcome"
  When branch is predicted to be taken with probability lower than this threshold
  (in percent), then it is considered well predictable.
! .IP \fBmax\-rtl\-if\-conversion\-insns\fR 4
  .IX Item "max-rtl-if-conversion-insns"
! RTL if\-conversion tries to remove conditional branches around a block and
  replace them with conditionally executed instructions.  This parameter
  gives the maximum number of instructions in a block which should be
! considered for if\-conversion.  The compiler will
! also use other heuristics to decide whether if\-conversion is likely to be
  profitable.
! .IP \fBmax\-rtl\-if\-conversion\-predictable\-cost\fR 4
  .IX Item "max-rtl-if-conversion-predictable-cost"
! RTL if\-conversion will try to remove conditional branches around a block
  and replace them with conditionally executed instructions.  These parameters
  give the maximum permissible cost for the sequence that would be generated
! by if\-conversion depending on whether the branch is statically determined
  to be predictable or not.  The units for this parameter are the same as
! those for the GCC internal seq_cost metric.  The compiler will try to
! provide a reasonable default for this parameter using the BRANCH_COST
  target macro.
! .IP \fBmax\-crossjump\-edges\fR 4
  .IX Item "max-crossjump-edges"
! The maximum number of incoming edges to consider for cross\-jumping.
  The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
  the number of edges incoming to each block.  Increasing values mean
  more aggressive optimization, making the compilation time increase with
  probably small improvement in executable size.
! .IP \fBmin\-crossjump\-insns\fR 4
  .IX Item "min-crossjump-insns"
  The minimum number of instructions that must be matched at the end
! of two blocks before cross\-jumping is performed on them.  This
  value is ignored in the case where all instructions in the block being
! cross\-jumped from are matched.
! .IP \fBmax\-grow\-copy\-bb\-insns\fR 4
  .IX Item "max-grow-copy-bb-insns"
  The maximum code size expansion factor when copying basic blocks
  instead of jumping.  The expansion is relative to a jump instruction.
! .IP \fBmax\-goto\-duplication\-insns\fR 4
  .IX Item "max-goto-duplication-insns"
  The maximum number of instructions to duplicate to a block that jumps
  to a computed goto.  To avoid O(N^2) behavior in a number of
! passes, GCC factors computed gotos early in the compilation process,
  and unfactors them as late as possible.  Only computed jumps at the
! end of a basic blocks with no more than max\-goto\-duplication\-insns are
  unfactored.
! .IP \fBmax\-delay\-slot\-insn\-search\fR 4
  .IX Item "max-delay-slot-insn-search"
  The maximum number of instructions to consider when looking for an
  instruction to fill a delay slot.  If more than this arbitrary number of
*************** instructions are searched, the time savi
*** 14523,14694 ****
  are minimal, so stop searching.  Increasing values mean more
  aggressive optimization, making the compilation time increase with probably
  small improvement in execution time.
! .IP "\fBmax-delay-slot-live-search\fR" 4
  .IX Item "max-delay-slot-live-search"
  When trying to fill delay slots, the maximum number of instructions to
  consider when searching for a block with valid live register
  information.  Increasing this arbitrarily chosen value means more
  aggressive optimization, increasing the compilation time.  This parameter
  should be removed when the delay slot code is rewritten to maintain the
! control-flow graph.
! .IP "\fBmax-gcse-memory\fR" 4
  .IX Item "max-gcse-memory"
  The approximate maximum amount of memory in \f(CW\*(C`kB\*(C'\fR that can be allocated in
  order to perform the global common subexpression elimination
  optimization.  If more memory than specified is required, the
  optimization is not done.
! .IP "\fBmax-gcse-insertion-ratio\fR" 4
  .IX Item "max-gcse-insertion-ratio"
  If the ratio of expression insertions to deletions is larger than this value
! for any expression, then \s-1RTL PRE\s0 inserts or removes the expression and thus
  leaves partially redundant computations in the instruction stream.
! .IP "\fBmax-pending-list-length\fR" 4
  .IX Item "max-pending-list-length"
  The maximum number of pending dependencies scheduling allows
  before flushing the current state and starting over.  Large functions
  with few branches or calls can create excessively large lists which
  needlessly consume memory and resources.
! .IP "\fBmax-modulo-backtrack-attempts\fR" 4
  .IX Item "max-modulo-backtrack-attempts"
  The maximum number of backtrack attempts the scheduler should make
  when modulo scheduling a loop.  Larger values can exponentially increase
  compilation time.
! .IP "\fBmax-inline-functions-called-once-loop-depth\fR" 4
  .IX Item "max-inline-functions-called-once-loop-depth"
  Maximal loop depth of a call considered by inline heuristics that tries to
  inline all functions called once.
! .IP "\fBmax-inline-functions-called-once-insns\fR" 4
  .IX Item "max-inline-functions-called-once-insns"
  Maximal estimated size of functions produced while inlining functions called
  once.
! .IP "\fBmax-inline-insns-single\fR" 4
  .IX Item "max-inline-insns-single"
! Several parameters control the tree inliner used in \s-1GCC.\s0  This number sets the
! maximum number of instructions (counted in \s-1GCC\s0's internal representation) in a
  single function that the tree inliner considers for inlining.  This only
  affects functions declared inline and methods implemented in a class
! declaration (\*(C+).
! .IP "\fBmax-inline-insns-auto\fR" 4
  .IX Item "max-inline-insns-auto"
  When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
  a lot of functions that would otherwise not be considered for inlining
  by the compiler are investigated.  To those functions, a different
  (more restrictive) limit compared to functions declared inline can
! be applied (\fB\-\-param max-inline-insns-auto\fR).
! .IP "\fBmax-inline-insns-small\fR" 4
  .IX Item "max-inline-insns-small"
  This is bound applied to calls which are considered relevant with
  \&\fB\-finline\-small\-functions\fR.
! .IP "\fBmax-inline-insns-size\fR" 4
  .IX Item "max-inline-insns-size"
  This is bound applied to calls which are optimized for size. Small growth
  may be desirable to anticipate optimization oppurtunities exposed by inlining.
! .IP "\fBuninlined-function-insns\fR" 4
  .IX Item "uninlined-function-insns"
  Number of instructions accounted by inliner for function overhead such as
  function prologue and epilogue.
! .IP "\fBuninlined-function-time\fR" 4
  .IX Item "uninlined-function-time"
  Extra time accounted by inliner for function overhead such as time needed to
  execute function prologue and epilogue.
! .IP "\fBinline-heuristics-hint-percent\fR" 4
  .IX Item "inline-heuristics-hint-percent"
! The scale (in percents) applied to \fBinline-insns-single\fR,
! \&\fBinline\-insns\-single\-O2\fR, \fBinline-insns-auto\fR
  when inline heuristics hints that inlining is
  very profitable (will enable later optimizations).
! .IP "\fBuninlined-thunk-insns\fR" 4
  .IX Item "uninlined-thunk-insns"
  .PD 0
! .IP "\fBuninlined-thunk-time\fR" 4
  .IX Item "uninlined-thunk-time"
  .PD
! Same as \fB\-\-param uninlined-function-insns\fR and
! \&\fB\-\-param uninlined-function-time\fR but applied to function thunks.
! .IP "\fBinline-min-speedup\fR" 4
  .IX Item "inline-min-speedup"
  When estimated performance improvement of caller + callee runtime exceeds this
  threshold (in percent), the function can be inlined regardless of the limit on
! \&\fB\-\-param max-inline-insns-single\fR and \fB\-\-param
! max-inline-insns-auto\fR.
! .IP "\fBlarge-function-insns\fR" 4
  .IX Item "large-function-insns"
  The limit specifying really large functions.  For functions larger than this
  limit after inlining, inlining is constrained by
! \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
! to avoid extreme compilation time caused by non-linear algorithms used by the
  back end.
! .IP "\fBlarge-function-growth\fR" 4
  .IX Item "large-function-growth"
  Specifies maximal growth of large function caused by inlining in percents.
  For example, parameter value 100 limits large function growth to 2.0 times
  the original size.
! .IP "\fBlarge-unit-insns\fR" 4
  .IX Item "large-unit-insns"
  The limit specifying large translation unit.  Growth caused by inlining of
! units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
  For small units this might be too tight.
  For example, consider a unit consisting of function A
  that is inline and B that just calls A three times.  If B is small relative to
  A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
  large units consisting of small inlineable functions, however, the overall unit
  growth limit is needed to avoid exponential explosion of code size.  Thus for
! smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
! before applying \fB\-\-param inline-unit-growth\fR.
! .IP "\fBlazy-modules\fR" 4
  .IX Item "lazy-modules"
! Maximum number of concurrently open \*(C+ module files when lazy loading.
! .IP "\fBinline-unit-growth\fR" 4
  .IX Item "inline-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by inlining.
  For example, parameter value 20 limits unit growth to 1.2 times the original
  size. Cold functions (either marked cold via an attribute or by profile
  feedback) are not accounted into the unit size.
! .IP "\fBipa-cp-unit-growth\fR" 4
  .IX Item "ipa-cp-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by
  interprocedural constant propagation.  For example, parameter value 10 limits
  unit growth to 1.1 times the original size.
! .IP "\fBipa-cp-large-unit-insns\fR" 4
  .IX Item "ipa-cp-large-unit-insns"
! The size of translation unit that IPA-CP pass considers large.
! .IP "\fBlarge-stack-frame\fR" 4
  .IX Item "large-stack-frame"
  The limit specifying large stack frames.  While inlining the algorithm is trying
  to not grow past this limit too much.
! .IP "\fBlarge-stack-frame-growth\fR" 4
  .IX Item "large-stack-frame-growth"
  Specifies maximal growth of large stack frames caused by inlining in percents.
  For example, parameter value 1000 limits large stack frame growth to 11 times
  the original size.
! .IP "\fBmax-inline-insns-recursive\fR" 4
  .IX Item "max-inline-insns-recursive"
  .PD 0
! .IP "\fBmax-inline-insns-recursive-auto\fR" 4
  .IX Item "max-inline-insns-recursive-auto"
  .PD
! Specifies the maximum number of instructions an out-of-line copy of a
! self-recursive inline
  function can grow into by performing recursive inlining.
  .Sp
! \&\fB\-\-param max-inline-insns-recursive\fR applies to functions
  declared inline.
  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max-inline-insns-recursive-auto\fR applies instead.
! .IP "\fBmax-inline-recursive-depth\fR" 4
  .IX Item "max-inline-recursive-depth"
  .PD 0
! .IP "\fBmax-inline-recursive-depth-auto\fR" 4
  .IX Item "max-inline-recursive-depth-auto"
  .PD
  Specifies the maximum recursion depth used for recursive inlining.
  .Sp
! \&\fB\-\-param max-inline-recursive-depth\fR applies to functions
  declared inline.  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max-inline-recursive-depth-auto\fR applies instead.
! .IP "\fBmin-inline-recursive-probability\fR" 4
  .IX Item "min-inline-recursive-probability"
  Recursive inlining is profitable only for function having deep recursion
  in average and can hurt for function having little recursion depth by
--- 14456,14627 ----
  are minimal, so stop searching.  Increasing values mean more
  aggressive optimization, making the compilation time increase with probably
  small improvement in execution time.
! .IP \fBmax\-delay\-slot\-live\-search\fR 4
  .IX Item "max-delay-slot-live-search"
  When trying to fill delay slots, the maximum number of instructions to
  consider when searching for a block with valid live register
  information.  Increasing this arbitrarily chosen value means more
  aggressive optimization, increasing the compilation time.  This parameter
  should be removed when the delay slot code is rewritten to maintain the
! control\-flow graph.
! .IP \fBmax\-gcse\-memory\fR 4
  .IX Item "max-gcse-memory"
  The approximate maximum amount of memory in \f(CW\*(C`kB\*(C'\fR that can be allocated in
  order to perform the global common subexpression elimination
  optimization.  If more memory than specified is required, the
  optimization is not done.
! .IP \fBmax\-gcse\-insertion\-ratio\fR 4
  .IX Item "max-gcse-insertion-ratio"
  If the ratio of expression insertions to deletions is larger than this value
! for any expression, then RTL PRE inserts or removes the expression and thus
  leaves partially redundant computations in the instruction stream.
! .IP \fBmax\-pending\-list\-length\fR 4
  .IX Item "max-pending-list-length"
  The maximum number of pending dependencies scheduling allows
  before flushing the current state and starting over.  Large functions
  with few branches or calls can create excessively large lists which
  needlessly consume memory and resources.
! .IP \fBmax\-modulo\-backtrack\-attempts\fR 4
  .IX Item "max-modulo-backtrack-attempts"
  The maximum number of backtrack attempts the scheduler should make
  when modulo scheduling a loop.  Larger values can exponentially increase
  compilation time.
! .IP \fBmax\-inline\-functions\-called\-once\-loop\-depth\fR 4
  .IX Item "max-inline-functions-called-once-loop-depth"
  Maximal loop depth of a call considered by inline heuristics that tries to
  inline all functions called once.
! .IP \fBmax\-inline\-functions\-called\-once\-insns\fR 4
  .IX Item "max-inline-functions-called-once-insns"
  Maximal estimated size of functions produced while inlining functions called
  once.
! .IP \fBmax\-inline\-insns\-single\fR 4
  .IX Item "max-inline-insns-single"
! Several parameters control the tree inliner used in GCC.  This number sets the
! maximum number of instructions (counted in GCC\*(Aqs internal representation) in a
  single function that the tree inliner considers for inlining.  This only
  affects functions declared inline and methods implemented in a class
! declaration (C++).
! .IP \fBmax\-inline\-insns\-auto\fR 4
  .IX Item "max-inline-insns-auto"
  When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
  a lot of functions that would otherwise not be considered for inlining
  by the compiler are investigated.  To those functions, a different
  (more restrictive) limit compared to functions declared inline can
! be applied (\fB\-\-param max\-inline\-insns\-auto\fR).
! .IP \fBmax\-inline\-insns\-small\fR 4
  .IX Item "max-inline-insns-small"
  This is bound applied to calls which are considered relevant with
  \&\fB\-finline\-small\-functions\fR.
! .IP \fBmax\-inline\-insns\-size\fR 4
  .IX Item "max-inline-insns-size"
  This is bound applied to calls which are optimized for size. Small growth
  may be desirable to anticipate optimization oppurtunities exposed by inlining.
! .IP \fBuninlined\-function\-insns\fR 4
  .IX Item "uninlined-function-insns"
  Number of instructions accounted by inliner for function overhead such as
  function prologue and epilogue.
! .IP \fBuninlined\-function\-time\fR 4
  .IX Item "uninlined-function-time"
  Extra time accounted by inliner for function overhead such as time needed to
  execute function prologue and epilogue.
! .IP \fBinline\-heuristics\-hint\-percent\fR 4
  .IX Item "inline-heuristics-hint-percent"
! The scale (in percents) applied to \fBinline\-insns\-single\fR,
! \&\fBinline\-insns\-single\-O2\fR, \fBinline\-insns\-auto\fR
  when inline heuristics hints that inlining is
  very profitable (will enable later optimizations).
! .IP \fBuninlined\-thunk\-insns\fR 4
  .IX Item "uninlined-thunk-insns"
  .PD 0
! .IP \fBuninlined\-thunk\-time\fR 4
  .IX Item "uninlined-thunk-time"
  .PD
! Same as \fB\-\-param uninlined\-function\-insns\fR and
! \&\fB\-\-param uninlined\-function\-time\fR but applied to function thunks.
! .IP \fBinline\-min\-speedup\fR 4
  .IX Item "inline-min-speedup"
  When estimated performance improvement of caller + callee runtime exceeds this
  threshold (in percent), the function can be inlined regardless of the limit on
! \&\fB\-\-param max\-inline\-insns\-single\fR and \fB\-\-param
! max\-inline\-insns\-auto\fR.
! .IP \fBlarge\-function\-insns\fR 4
  .IX Item "large-function-insns"
  The limit specifying really large functions.  For functions larger than this
  limit after inlining, inlining is constrained by
! \&\fB\-\-param large\-function\-growth\fR.  This parameter is useful primarily
! to avoid extreme compilation time caused by non\-linear algorithms used by the
  back end.
! .IP \fBlarge\-function\-growth\fR 4
  .IX Item "large-function-growth"
  Specifies maximal growth of large function caused by inlining in percents.
  For example, parameter value 100 limits large function growth to 2.0 times
  the original size.
! .IP \fBlarge\-unit\-insns\fR 4
  .IX Item "large-unit-insns"
  The limit specifying large translation unit.  Growth caused by inlining of
! units larger than this limit is limited by \fB\-\-param inline\-unit\-growth\fR.
  For small units this might be too tight.
  For example, consider a unit consisting of function A
  that is inline and B that just calls A three times.  If B is small relative to
  A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
  large units consisting of small inlineable functions, however, the overall unit
  growth limit is needed to avoid exponential explosion of code size.  Thus for
! smaller units, the size is increased to \fB\-\-param large\-unit\-insns\fR
! before applying \fB\-\-param inline\-unit\-growth\fR.
! .IP \fBlazy\-modules\fR 4
  .IX Item "lazy-modules"
! Maximum number of concurrently open C++ module files when lazy loading.
! .IP \fBinline\-unit\-growth\fR 4
  .IX Item "inline-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by inlining.
  For example, parameter value 20 limits unit growth to 1.2 times the original
  size. Cold functions (either marked cold via an attribute or by profile
  feedback) are not accounted into the unit size.
! .IP \fBipa\-cp\-unit\-growth\fR 4
  .IX Item "ipa-cp-unit-growth"
  Specifies maximal overall growth of the compilation unit caused by
  interprocedural constant propagation.  For example, parameter value 10 limits
  unit growth to 1.1 times the original size.
! .IP \fBipa\-cp\-large\-unit\-insns\fR 4
  .IX Item "ipa-cp-large-unit-insns"
! The size of translation unit that IPA\-CP pass considers large.
! .IP \fBlarge\-stack\-frame\fR 4
  .IX Item "large-stack-frame"
  The limit specifying large stack frames.  While inlining the algorithm is trying
  to not grow past this limit too much.
! .IP \fBlarge\-stack\-frame\-growth\fR 4
  .IX Item "large-stack-frame-growth"
  Specifies maximal growth of large stack frames caused by inlining in percents.
  For example, parameter value 1000 limits large stack frame growth to 11 times
  the original size.
! .IP \fBmax\-inline\-insns\-recursive\fR 4
  .IX Item "max-inline-insns-recursive"
  .PD 0
! .IP \fBmax\-inline\-insns\-recursive\-auto\fR 4
  .IX Item "max-inline-insns-recursive-auto"
  .PD
! Specifies the maximum number of instructions an out\-of\-line copy of a
! self\-recursive inline
  function can grow into by performing recursive inlining.
  .Sp
! \&\fB\-\-param max\-inline\-insns\-recursive\fR applies to functions
  declared inline.
  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max\-inline\-insns\-recursive\-auto\fR applies instead.
! .IP \fBmax\-inline\-recursive\-depth\fR 4
  .IX Item "max-inline-recursive-depth"
  .PD 0
! .IP \fBmax\-inline\-recursive\-depth\-auto\fR 4
  .IX Item "max-inline-recursive-depth-auto"
  .PD
  Specifies the maximum recursion depth used for recursive inlining.
  .Sp
! \&\fB\-\-param max\-inline\-recursive\-depth\fR applies to functions
  declared inline.  For functions not declared inline, recursive inlining
  happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
! enabled; \fB\-\-param max\-inline\-recursive\-depth\-auto\fR applies instead.
! .IP \fBmin\-inline\-recursive\-probability\fR 4
  .IX Item "min-inline-recursive-probability"
  Recursive inlining is profitable only for function having deep recursion
  in average and can hurt for function having little recursion depth by
*************** When profile feedback is available (see
*** 14699,14917 ****
  recursion depth can be guessed from the probability that function recurses
  via a given call expression.  This parameter limits inlining only to call
  expressions whose probability exceeds the given threshold (in percents).
! .IP "\fBearly-inlining-insns\fR" 4
  .IX Item "early-inlining-insns"
  Specify growth that the early inliner can make.  In effect it increases
  the amount of inlining for code having a large abstraction penalty.
! .IP "\fBmax-early-inliner-iterations\fR" 4
  .IX Item "max-early-inliner-iterations"
  Limit of iterations of the early inliner.  This basically bounds
  the number of nested indirect calls the early inliner can resolve.
  Deeper chains are still handled by late inlining.
! .IP "\fBcomdat-sharing-probability\fR" 4
  .IX Item "comdat-sharing-probability"
! Probability (in percent) that \*(C+ inline function with comdat visibility
  are shared across multiple compilation units.
! .IP "\fBmodref-max-bases\fR" 4
  .IX Item "modref-max-bases"
  .PD 0
! .IP "\fBmodref-max-refs\fR" 4
  .IX Item "modref-max-refs"
! .IP "\fBmodref-max-accesses\fR" 4
  .IX Item "modref-max-accesses"
  .PD
  Specifies the maximal number of base pointers, references and accesses stored
  for a single function by mod/ref analysis.
! .IP "\fBmodref-max-tests\fR" 4
  .IX Item "modref-max-tests"
  Specifies the maxmal number of tests alias oracle can perform to disambiguate
  memory locations using the mod/ref information.  This parameter ought to be
! bigger than \fB\-\-param modref-max-bases\fR and \fB\-\-param
! modref-max-refs\fR.
! .IP "\fBmodref-max-depth\fR" 4
  .IX Item "modref-max-depth"
! Specifies the maximum depth of \s-1DFS\s0 walk used by modref escape analysis.
  Setting to 0 disables the analysis completely.
! .IP "\fBmodref-max-escape-points\fR" 4
  .IX Item "modref-max-escape-points"
! Specifies the maximum number of escape points tracked by modref per SSA-name.
! .IP "\fBmodref-max-adjustments\fR" 4
  .IX Item "modref-max-adjustments"
  Specifies the maximum number the access range is enlarged during modref dataflow
  analysis.
! .IP "\fBprofile-func-internal-id\fR" 4
  .IX Item "profile-func-internal-id"
  A parameter to control whether to use function internal id in profile
  database lookup. If the value is 0, the compiler uses an id that
  is based on function assembler name and filename, which makes old profile
  data more tolerant to source changes such as function reordering etc.
! .IP "\fBmin-vect-loop-bound\fR" 4
  .IX Item "min-vect-loop-bound"
  The minimum number of iterations under which loops are not vectorized
  when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
  vectorization needs to be greater than the value specified by this option
  to allow vectorization.
! .IP "\fBgcse-cost-distance-ratio\fR" 4
  .IX Item "gcse-cost-distance-ratio"
  Scaling factor in calculation of maximum distance an expression
! can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
  code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
  is with simple expressions, i.e., the expressions that have cost
! less than \fBgcse-unrestricted-cost\fR.  Specifying 0 disables
  hoisting of simple expressions.
! .IP "\fBgcse-unrestricted-cost\fR" 4
  .IX Item "gcse-unrestricted-cost"
  Cost, roughly measured as the cost of a single typical machine
! instruction, at which \s-1GCSE\s0 optimizations do not constrain
  the distance an expression can travel.  This is currently
  supported only in the code hoisting pass.  The lesser the cost,
  the more aggressive code hoisting is.  Specifying 0 
  allows all expressions to travel unrestricted distances.
! .IP "\fBmax-hoist-depth\fR" 4
  .IX Item "max-hoist-depth"
  The depth of search in the dominator tree for expressions to hoist.
  This is used to avoid quadratic behavior in hoisting algorithm.
  The value of 0 does not limit on the search, but may slow down compilation
  of huge functions.
! .IP "\fBmax-tail-merge-comparisons\fR" 4
  .IX Item "max-tail-merge-comparisons"
  The maximum amount of similar bbs to compare a bb with.  This is used to
  avoid quadratic behavior in tree tail merging.
! .IP "\fBmax-tail-merge-iterations\fR" 4
  .IX Item "max-tail-merge-iterations"
  The maximum amount of iterations of the pass over the function.  This is used to
  limit compilation time in tree tail merging.
! .IP "\fBstore-merging-allow-unaligned\fR" 4
  .IX Item "store-merging-allow-unaligned"
  Allow the store merging pass to introduce unaligned stores if it is legal to
  do so.
! .IP "\fBmax-stores-to-merge\fR" 4
  .IX Item "max-stores-to-merge"
  The maximum number of stores to attempt to merge into wider stores in the store
  merging pass.
! .IP "\fBmax-store-chains-to-track\fR" 4
  .IX Item "max-store-chains-to-track"
  The maximum number of store chains to track at the same time in the attempt
  to merge them into wider stores in the store merging pass.
! .IP "\fBmax-stores-to-track\fR" 4
  .IX Item "max-stores-to-track"
  The maximum number of stores to track at the same time in the attemt to
  to merge them into wider stores in the store merging pass.
! .IP "\fBmax-unrolled-insns\fR" 4
  .IX Item "max-unrolled-insns"
  The maximum number of instructions that a loop may have to be unrolled.
  If a loop is unrolled, this parameter also determines how many times
  the loop code is unrolled.
! .IP "\fBmax-average-unrolled-insns\fR" 4
  .IX Item "max-average-unrolled-insns"
  The maximum number of instructions biased by probabilities of their execution
  that a loop may have to be unrolled.  If a loop is unrolled,
  this parameter also determines how many times the loop code is unrolled.
! .IP "\fBmax-unroll-times\fR" 4
  .IX Item "max-unroll-times"
  The maximum number of unrollings of a single loop.
! .IP "\fBmax-peeled-insns\fR" 4
  .IX Item "max-peeled-insns"
  The maximum number of instructions that a loop may have to be peeled.
  If a loop is peeled, this parameter also determines how many times
  the loop code is peeled.
! .IP "\fBmax-peel-times\fR" 4
  .IX Item "max-peel-times"
  The maximum number of peelings of a single loop.
! .IP "\fBmax-peel-branches\fR" 4
  .IX Item "max-peel-branches"
  The maximum number of branches on the hot path through the peeled sequence.
! .IP "\fBmax-completely-peeled-insns\fR" 4
  .IX Item "max-completely-peeled-insns"
  The maximum number of insns of a completely peeled loop.
! .IP "\fBmax-completely-peel-times\fR" 4
  .IX Item "max-completely-peel-times"
  The maximum number of iterations of a loop to be suitable for complete peeling.
! .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
  .IX Item "max-completely-peel-loop-nest-depth"
  The maximum depth of a loop nest suitable for complete peeling.
! .IP "\fBmax-unswitch-insns\fR" 4
  .IX Item "max-unswitch-insns"
  The maximum number of insns of an unswitched loop.
! .IP "\fBmax-unswitch-depth\fR" 4
  .IX Item "max-unswitch-depth"
  The maximum depth of a loop nest to be unswitched.
! .IP "\fBlim-expensive\fR" 4
  .IX Item "lim-expensive"
  The minimum cost of an expensive expression in the loop invariant motion.
! .IP "\fBmin-loop-cond-split-prob\fR" 4
  .IX Item "min-loop-cond-split-prob"
! When \s-1FDO\s0 profile information is available, \fBmin-loop-cond-split-prob\fR
! specifies minimum threshold for probability of semi-invariant condition
  statement to trigger loop split.
! .IP "\fBiv-consider-all-candidates-bound\fR" 4
  .IX Item "iv-consider-all-candidates-bound"
  Bound on number of candidates for induction variables, below which
  all candidates are considered for each use in induction variable
  optimizations.  If there are more candidates than this,
  only the most relevant ones are considered to avoid quadratic time complexity.
! .IP "\fBiv-max-considered-uses\fR" 4
  .IX Item "iv-max-considered-uses"
  The induction variable optimizations give up on loops that contain more
  induction variable uses.
! .IP "\fBiv-always-prune-cand-set-bound\fR" 4
  .IX Item "iv-always-prune-cand-set-bound"
  If the number of candidates in the set is smaller than this value,
  always try to remove unnecessary ivs from the set
  when adding a new one.
! .IP "\fBavg-loop-niter\fR" 4
  .IX Item "avg-loop-niter"
  Average number of iterations of a loop.
! .IP "\fBdse-max-object-size\fR" 4
  .IX Item "dse-max-object-size"
  Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
  Larger values may result in larger compilation times.
! .IP "\fBdse-max-alias-queries-per-store\fR" 4
  .IX Item "dse-max-alias-queries-per-store"
  Maximum number of queries into the alias oracle per store.
  Larger values result in larger compilation times and may result in more
  removed dead stores.
! .IP "\fBscev-max-expr-size\fR" 4
  .IX Item "scev-max-expr-size"
  Bound on size of expressions used in the scalar evolutions analyzer.
  Large expressions slow the analyzer.
! .IP "\fBscev-max-expr-complexity\fR" 4
  .IX Item "scev-max-expr-complexity"
  Bound on the complexity of the expressions in the scalar evolutions analyzer.
  Complex expressions slow the analyzer.
! .IP "\fBmax-tree-if-conversion-phi-args\fR" 4
  .IX Item "max-tree-if-conversion-phi-args"
! Maximum number of arguments in a \s-1PHI\s0 supported by \s-1TREE\s0 if conversion
  unless the loop is marked with simd pragma.
! .IP "\fBvect-max-layout-candidates\fR" 4
  .IX Item "vect-max-layout-candidates"
  The maximum number of possible vector layouts (such as permutations)
! to consider when optimizing to-be-vectorized code.
! .IP "\fBvect-max-version-for-alignment-checks\fR" 4
  .IX Item "vect-max-version-for-alignment-checks"
! The maximum number of run-time checks that can be performed when
  doing loop versioning for alignment in the vectorizer.
! .IP "\fBvect-max-version-for-alias-checks\fR" 4
  .IX Item "vect-max-version-for-alias-checks"
! The maximum number of run-time checks that can be performed when
  doing loop versioning for alias in the vectorizer.
! .IP "\fBvect-max-peeling-for-alignment\fR" 4
  .IX Item "vect-max-peeling-for-alignment"
  The maximum number of loop peels to enhance access alignment
  for vectorizer. Value \-1 means no limit.
! .IP "\fBmax-iterations-to-track\fR" 4
  .IX Item "max-iterations-to-track"
! The maximum number of iterations of a loop the brute-force algorithm
  for analysis of the number of iterations of the loop tries to evaluate.
! .IP "\fBhot-bb-count-fraction\fR" 4
  .IX Item "hot-bb-count-fraction"
  The denominator n of fraction 1/n of the maximal execution count of a
  basic block in the entire program that a basic block needs to at least
  have in order to be considered hot.  The default is 10000, which means
  that a basic block is considered hot if its execution count is greater
  than 1/10000 of the maximal execution count.  0 means that it is never
! considered hot.  Used in non-LTO mode.
! .IP "\fBhot-bb-count-ws-permille\fR" 4
  .IX Item "hot-bb-count-ws-permille"
  The number of most executed permilles, ranging from 0 to 1000, of the
  profiled execution of the entire program to which the execution count
--- 14632,14850 ----
  recursion depth can be guessed from the probability that function recurses
  via a given call expression.  This parameter limits inlining only to call
  expressions whose probability exceeds the given threshold (in percents).
! .IP \fBearly\-inlining\-insns\fR 4
  .IX Item "early-inlining-insns"
  Specify growth that the early inliner can make.  In effect it increases
  the amount of inlining for code having a large abstraction penalty.
! .IP \fBmax\-early\-inliner\-iterations\fR 4
  .IX Item "max-early-inliner-iterations"
  Limit of iterations of the early inliner.  This basically bounds
  the number of nested indirect calls the early inliner can resolve.
  Deeper chains are still handled by late inlining.
! .IP \fBcomdat\-sharing\-probability\fR 4
  .IX Item "comdat-sharing-probability"
! Probability (in percent) that C++ inline function with comdat visibility
  are shared across multiple compilation units.
! .IP \fBmodref\-max\-bases\fR 4
  .IX Item "modref-max-bases"
  .PD 0
! .IP \fBmodref\-max\-refs\fR 4
  .IX Item "modref-max-refs"
! .IP \fBmodref\-max\-accesses\fR 4
  .IX Item "modref-max-accesses"
  .PD
  Specifies the maximal number of base pointers, references and accesses stored
  for a single function by mod/ref analysis.
! .IP \fBmodref\-max\-tests\fR 4
  .IX Item "modref-max-tests"
  Specifies the maxmal number of tests alias oracle can perform to disambiguate
  memory locations using the mod/ref information.  This parameter ought to be
! bigger than \fB\-\-param modref\-max\-bases\fR and \fB\-\-param
! modref\-max\-refs\fR.
! .IP \fBmodref\-max\-depth\fR 4
  .IX Item "modref-max-depth"
! Specifies the maximum depth of DFS walk used by modref escape analysis.
  Setting to 0 disables the analysis completely.
! .IP \fBmodref\-max\-escape\-points\fR 4
  .IX Item "modref-max-escape-points"
! Specifies the maximum number of escape points tracked by modref per SSA\-name.
! .IP \fBmodref\-max\-adjustments\fR 4
  .IX Item "modref-max-adjustments"
  Specifies the maximum number the access range is enlarged during modref dataflow
  analysis.
! .IP \fBprofile\-func\-internal\-id\fR 4
  .IX Item "profile-func-internal-id"
  A parameter to control whether to use function internal id in profile
  database lookup. If the value is 0, the compiler uses an id that
  is based on function assembler name and filename, which makes old profile
  data more tolerant to source changes such as function reordering etc.
! .IP \fBmin\-vect\-loop\-bound\fR 4
  .IX Item "min-vect-loop-bound"
  The minimum number of iterations under which loops are not vectorized
  when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
  vectorization needs to be greater than the value specified by this option
  to allow vectorization.
! .IP \fBgcse\-cost\-distance\-ratio\fR 4
  .IX Item "gcse-cost-distance-ratio"
  Scaling factor in calculation of maximum distance an expression
! can be moved by GCSE optimizations.  This is currently supported only in the
  code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
  is with simple expressions, i.e., the expressions that have cost
! less than \fBgcse\-unrestricted\-cost\fR.  Specifying 0 disables
  hoisting of simple expressions.
! .IP \fBgcse\-unrestricted\-cost\fR 4
  .IX Item "gcse-unrestricted-cost"
  Cost, roughly measured as the cost of a single typical machine
! instruction, at which GCSE optimizations do not constrain
  the distance an expression can travel.  This is currently
  supported only in the code hoisting pass.  The lesser the cost,
  the more aggressive code hoisting is.  Specifying 0 
  allows all expressions to travel unrestricted distances.
! .IP \fBmax\-hoist\-depth\fR 4
  .IX Item "max-hoist-depth"
  The depth of search in the dominator tree for expressions to hoist.
  This is used to avoid quadratic behavior in hoisting algorithm.
  The value of 0 does not limit on the search, but may slow down compilation
  of huge functions.
! .IP \fBmax\-tail\-merge\-comparisons\fR 4
  .IX Item "max-tail-merge-comparisons"
  The maximum amount of similar bbs to compare a bb with.  This is used to
  avoid quadratic behavior in tree tail merging.
! .IP \fBmax\-tail\-merge\-iterations\fR 4
  .IX Item "max-tail-merge-iterations"
  The maximum amount of iterations of the pass over the function.  This is used to
  limit compilation time in tree tail merging.
! .IP \fBstore\-merging\-allow\-unaligned\fR 4
  .IX Item "store-merging-allow-unaligned"
  Allow the store merging pass to introduce unaligned stores if it is legal to
  do so.
! .IP \fBmax\-stores\-to\-merge\fR 4
  .IX Item "max-stores-to-merge"
  The maximum number of stores to attempt to merge into wider stores in the store
  merging pass.
! .IP \fBmax\-store\-chains\-to\-track\fR 4
  .IX Item "max-store-chains-to-track"
  The maximum number of store chains to track at the same time in the attempt
  to merge them into wider stores in the store merging pass.
! .IP \fBmax\-stores\-to\-track\fR 4
  .IX Item "max-stores-to-track"
  The maximum number of stores to track at the same time in the attemt to
  to merge them into wider stores in the store merging pass.
! .IP \fBmax\-unrolled\-insns\fR 4
  .IX Item "max-unrolled-insns"
  The maximum number of instructions that a loop may have to be unrolled.
  If a loop is unrolled, this parameter also determines how many times
  the loop code is unrolled.
! .IP \fBmax\-average\-unrolled\-insns\fR 4
  .IX Item "max-average-unrolled-insns"
  The maximum number of instructions biased by probabilities of their execution
  that a loop may have to be unrolled.  If a loop is unrolled,
  this parameter also determines how many times the loop code is unrolled.
! .IP \fBmax\-unroll\-times\fR 4
  .IX Item "max-unroll-times"
  The maximum number of unrollings of a single loop.
! .IP \fBmax\-peeled\-insns\fR 4
  .IX Item "max-peeled-insns"
  The maximum number of instructions that a loop may have to be peeled.
  If a loop is peeled, this parameter also determines how many times
  the loop code is peeled.
! .IP \fBmax\-peel\-times\fR 4
  .IX Item "max-peel-times"
  The maximum number of peelings of a single loop.
! .IP \fBmax\-peel\-branches\fR 4
  .IX Item "max-peel-branches"
  The maximum number of branches on the hot path through the peeled sequence.
! .IP \fBmax\-completely\-peeled\-insns\fR 4
  .IX Item "max-completely-peeled-insns"
  The maximum number of insns of a completely peeled loop.
! .IP \fBmax\-completely\-peel\-times\fR 4
  .IX Item "max-completely-peel-times"
  The maximum number of iterations of a loop to be suitable for complete peeling.
! .IP \fBmax\-completely\-peel\-loop\-nest\-depth\fR 4
  .IX Item "max-completely-peel-loop-nest-depth"
  The maximum depth of a loop nest suitable for complete peeling.
! .IP \fBmax\-unswitch\-insns\fR 4
  .IX Item "max-unswitch-insns"
  The maximum number of insns of an unswitched loop.
! .IP \fBmax\-unswitch\-depth\fR 4
  .IX Item "max-unswitch-depth"
  The maximum depth of a loop nest to be unswitched.
! .IP \fBlim\-expensive\fR 4
  .IX Item "lim-expensive"
  The minimum cost of an expensive expression in the loop invariant motion.
! .IP \fBmin\-loop\-cond\-split\-prob\fR 4
  .IX Item "min-loop-cond-split-prob"
! When FDO profile information is available, \fBmin\-loop\-cond\-split\-prob\fR
! specifies minimum threshold for probability of semi\-invariant condition
  statement to trigger loop split.
! .IP \fBiv\-consider\-all\-candidates\-bound\fR 4
  .IX Item "iv-consider-all-candidates-bound"
  Bound on number of candidates for induction variables, below which
  all candidates are considered for each use in induction variable
  optimizations.  If there are more candidates than this,
  only the most relevant ones are considered to avoid quadratic time complexity.
! .IP \fBiv\-max\-considered\-uses\fR 4
  .IX Item "iv-max-considered-uses"
  The induction variable optimizations give up on loops that contain more
  induction variable uses.
! .IP \fBiv\-always\-prune\-cand\-set\-bound\fR 4
  .IX Item "iv-always-prune-cand-set-bound"
  If the number of candidates in the set is smaller than this value,
  always try to remove unnecessary ivs from the set
  when adding a new one.
! .IP \fBavg\-loop\-niter\fR 4
  .IX Item "avg-loop-niter"
  Average number of iterations of a loop.
! .IP \fBdse\-max\-object\-size\fR 4
  .IX Item "dse-max-object-size"
  Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
  Larger values may result in larger compilation times.
! .IP \fBdse\-max\-alias\-queries\-per\-store\fR 4
  .IX Item "dse-max-alias-queries-per-store"
  Maximum number of queries into the alias oracle per store.
  Larger values result in larger compilation times and may result in more
  removed dead stores.
! .IP \fBscev\-max\-expr\-size\fR 4
  .IX Item "scev-max-expr-size"
  Bound on size of expressions used in the scalar evolutions analyzer.
  Large expressions slow the analyzer.
! .IP \fBscev\-max\-expr\-complexity\fR 4
  .IX Item "scev-max-expr-complexity"
  Bound on the complexity of the expressions in the scalar evolutions analyzer.
  Complex expressions slow the analyzer.
! .IP \fBmax\-tree\-if\-conversion\-phi\-args\fR 4
  .IX Item "max-tree-if-conversion-phi-args"
! Maximum number of arguments in a PHI supported by TREE if conversion
  unless the loop is marked with simd pragma.
! .IP \fBvect\-max\-layout\-candidates\fR 4
  .IX Item "vect-max-layout-candidates"
  The maximum number of possible vector layouts (such as permutations)
! to consider when optimizing to\-be\-vectorized code.
! .IP \fBvect\-max\-version\-for\-alignment\-checks\fR 4
  .IX Item "vect-max-version-for-alignment-checks"
! The maximum number of run\-time checks that can be performed when
  doing loop versioning for alignment in the vectorizer.
! .IP \fBvect\-max\-version\-for\-alias\-checks\fR 4
  .IX Item "vect-max-version-for-alias-checks"
! The maximum number of run\-time checks that can be performed when
  doing loop versioning for alias in the vectorizer.
! .IP \fBvect\-max\-peeling\-for\-alignment\fR 4
  .IX Item "vect-max-peeling-for-alignment"
  The maximum number of loop peels to enhance access alignment
  for vectorizer. Value \-1 means no limit.
! .IP \fBmax\-iterations\-to\-track\fR 4
  .IX Item "max-iterations-to-track"
! The maximum number of iterations of a loop the brute\-force algorithm
  for analysis of the number of iterations of the loop tries to evaluate.
! .IP \fBhot\-bb\-count\-fraction\fR 4
  .IX Item "hot-bb-count-fraction"
  The denominator n of fraction 1/n of the maximal execution count of a
  basic block in the entire program that a basic block needs to at least
  have in order to be considered hot.  The default is 10000, which means
  that a basic block is considered hot if its execution count is greater
  than 1/10000 of the maximal execution count.  0 means that it is never
! considered hot.  Used in non\-LTO mode.
! .IP \fBhot\-bb\-count\-ws\-permille\fR 4
  .IX Item "hot-bb-count-ws-permille"
  The number of most executed permilles, ranging from 0 to 1000, of the
  profiled execution of the entire program to which the execution count
*************** of a basic block must be part of in orde
*** 14919,14926 ****
  default is 990, which means that a basic block is considered hot if
  its execution count contributes to the upper 990 permilles, or 99.0%,
  of the profiled execution of the entire program.  0 means that it is
! never considered hot.  Used in \s-1LTO\s0 mode.
! .IP "\fBhot-bb-frequency-fraction\fR" 4
  .IX Item "hot-bb-frequency-fraction"
  The denominator n of fraction 1/n of the execution frequency of the
  entry block of a function that a basic block of this function needs
--- 14852,14859 ----
  default is 990, which means that a basic block is considered hot if
  its execution count contributes to the upper 990 permilles, or 99.0%,
  of the profiled execution of the entire program.  0 means that it is
! never considered hot.  Used in LTO mode.
! .IP \fBhot\-bb\-frequency\-fraction\fR 4
  .IX Item "hot-bb-frequency-fraction"
  The denominator n of fraction 1/n of the execution frequency of the
  entry block of a function that a basic block of this function needs
*************** to at least have in order to be consider
*** 14928,14934 ****
  which means that a basic block is considered hot in a function if it
  is executed more frequently than 1/1000 of the frequency of the entry
  block of the function.  0 means that it is never considered hot.
! .IP "\fBunlikely-bb-count-fraction\fR" 4
  .IX Item "unlikely-bb-count-fraction"
  The denominator n of fraction 1/n of the number of profiled runs of
  the entire program below which the execution count of a basic block
--- 14861,14867 ----
  which means that a basic block is considered hot in a function if it
  is executed more frequently than 1/1000 of the frequency of the entry
  block of the function.  0 means that it is never considered hot.
! .IP \fBunlikely\-bb\-count\-fraction\fR 4
  .IX Item "unlikely-bb-count-fraction"
  The denominator n of fraction 1/n of the number of profiled runs of
  the entire program below which the execution count of a basic block
*************** must be in order for the basic block to
*** 14936,14942 ****
  The default is 20, which means that a basic block is considered unlikely
  executed if it is executed in fewer than 1/20, or 5%, of the runs of
  the program.  0 means that it is always considered unlikely executed.
! .IP "\fBmax-predicted-iterations\fR" 4
  .IX Item "max-predicted-iterations"
  The maximum number of loop iterations we predict statically.  This is useful
  in cases where a function contains a single loop with known bound and
--- 14869,14875 ----
  The default is 20, which means that a basic block is considered unlikely
  executed if it is executed in fewer than 1/20, or 5%, of the runs of
  the program.  0 means that it is always considered unlikely executed.
! .IP \fBmax\-predicted\-iterations\fR 4
  .IX Item "max-predicted-iterations"
  The maximum number of loop iterations we predict statically.  This is useful
  in cases where a function contains a single loop with known bound and
*************** another loop with unknown bound.
*** 14944,15191 ****
  The known number of iterations is predicted correctly, while
  the unknown number of iterations average to roughly 10.  This means that the
  loop without bounds appears artificially cold relative to the other one.
! .IP "\fBbuiltin-expect-probability\fR" 4
  .IX Item "builtin-expect-probability"
  Control the probability of the expression having the specified value. This
  parameter takes a percentage (i.e. 0 ... 100) as input.
! .IP "\fBbuiltin-string-cmp-inline-length\fR" 4
  .IX Item "builtin-string-cmp-inline-length"
  The maximum length of a constant string for a builtin string cmp call 
  eligible for inlining.
! .IP "\fBalign-threshold\fR" 4
  .IX Item "align-threshold"
  Select fraction of the maximal frequency of executions of a basic block in
  a function to align the basic block.
! .IP "\fBalign-loop-iterations\fR" 4
  .IX Item "align-loop-iterations"
  A loop expected to iterate at least the selected number of iterations is
  aligned.
! .IP "\fBtracer-dynamic-coverage\fR" 4
  .IX Item "tracer-dynamic-coverage"
  .PD 0
! .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
  .IX Item "tracer-dynamic-coverage-feedback"
  .PD
  This value is used to limit superblock formation once the given percentage of
  executed instructions is covered.  This limits unnecessary code size
  expansion.
  .Sp
! The \fBtracer-dynamic-coverage-feedback\fR parameter
  is used only when profile
  feedback is available.  The real profiles (as opposed to statically estimated
  ones) are much less balanced allowing the threshold to be larger value.
! .IP "\fBtracer-max-code-growth\fR" 4
  .IX Item "tracer-max-code-growth"
  Stop tail duplication once code growth has reached given percentage.  This is
  a rather artificial limit, as most of the duplicates are eliminated later in
  cross jumping, so it may be set to much higher values than is the desired code
  growth.
! .IP "\fBtracer-min-branch-ratio\fR" 4
  .IX Item "tracer-min-branch-ratio"
  Stop reverse growth when the reverse probability of best edge is less than this
  threshold (in percent).
! .IP "\fBtracer-min-branch-probability\fR" 4
  .IX Item "tracer-min-branch-probability"
  .PD 0
! .IP "\fBtracer-min-branch-probability-feedback\fR" 4
  .IX Item "tracer-min-branch-probability-feedback"
  .PD
  Stop forward growth if the best edge has probability lower than this
  threshold.
  .Sp
! Similarly to \fBtracer-dynamic-coverage\fR two parameters are
! provided.  \fBtracer-min-branch-probability-feedback\fR is used for
! compilation with profile feedback and \fBtracer-min-branch-probability\fR
  compilation without.  The value for compilation with profile feedback
  needs to be more conservative (higher) in order to make tracer
  effective.
! .IP "\fBstack-clash-protection-guard-size\fR" 4
  .IX Item "stack-clash-protection-guard-size"
  Specify the size of the operating system provided stack guard as
  2 raised to \fInum\fR bytes.  Higher values may reduce the
  number of explicit probes, but a value larger than the operating system
  provided guard will leave code vulnerable to stack clash style attacks.
! .IP "\fBstack-clash-protection-probe-interval\fR" 4
  .IX Item "stack-clash-protection-probe-interval"
  Stack clash protection involves probing stack space as it is allocated.  This
  param controls the maximum distance between probes into the stack as 2 raised
  to \fInum\fR bytes.  Higher values may reduce the number of explicit probes, but a value
  larger than the operating system provided guard will leave code vulnerable to
  stack clash style attacks.
! .IP "\fBmax-cse-path-length\fR" 4
  .IX Item "max-cse-path-length"
! The maximum number of basic blocks on path that \s-1CSE\s0 considers.
! .IP "\fBmax-cse-insns\fR" 4
  .IX Item "max-cse-insns"
! The maximum number of instructions \s-1CSE\s0 processes before flushing.
! .IP "\fBggc-min-expand\fR" 4
  .IX Item "ggc-min-expand"
! \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
  parameter specifies the minimum percentage by which the garbage
! collector's heap should be allowed to expand between collections.
  Tuning this may improve compilation speed; it has no effect on code
  generation.
  .Sp
! The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
! \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\*(R"\s0 is
! the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
! \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
  bound of 30% is used.  Setting this parameter and
! \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
  every opportunity.  This is extremely slow, but can be useful for
  debugging.
! .IP "\fBggc-min-heapsize\fR" 4
  .IX Item "ggc-min-heapsize"
! Minimum size of the garbage collector's heap before it begins bothering
  to collect garbage.  The first collection occurs after the heap expands
! by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
  tuning this may improve compilation speed, and has no effect on code
  generation.
  .Sp
! The default is the smaller of \s-1RAM/8, RLIMIT_RSS,\s0 or a limit that
! tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
  with a lower bound of 4096 (four megabytes) and an upper bound of
! 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
  particular platform, the lower bound is used.  Setting this parameter
  very large effectively disables garbage collection.  Setting this
! parameter and \fBggc-min-expand\fR to zero causes a full collection
  to occur at every opportunity.
! .IP "\fBmax-reload-search-insns\fR" 4
  .IX Item "max-reload-search-insns"
  The maximum number of instruction reload should look backward for equivalent
  register.  Increasing values mean more aggressive optimization, making the
  compilation time increase with probably slightly better performance.
! .IP "\fBmax-cselib-memory-locations\fR" 4
  .IX Item "max-cselib-memory-locations"
  The maximum number of memory locations cselib should take into account.
  Increasing values mean more aggressive optimization, making the compilation time
  increase with probably slightly better performance.
! .IP "\fBmax-sched-ready-insns\fR" 4
  .IX Item "max-sched-ready-insns"
  The maximum number of instructions ready to be issued the scheduler should
  consider at any given time during the first scheduling pass.  Increasing
  values mean more thorough searches, making the compilation time increase
  with probably little benefit.
! .IP "\fBmax-sched-region-blocks\fR" 4
  .IX Item "max-sched-region-blocks"
  The maximum number of blocks in a region to be considered for
  interblock scheduling.
! .IP "\fBmax-pipeline-region-blocks\fR" 4
  .IX Item "max-pipeline-region-blocks"
  The maximum number of blocks in a region to be considered for
  pipelining in the selective scheduler.
! .IP "\fBmax-sched-region-insns\fR" 4
  .IX Item "max-sched-region-insns"
  The maximum number of insns in a region to be considered for
  interblock scheduling.
! .IP "\fBmax-pipeline-region-insns\fR" 4
  .IX Item "max-pipeline-region-insns"
  The maximum number of insns in a region to be considered for
  pipelining in the selective scheduler.
! .IP "\fBmin-spec-prob\fR" 4
  .IX Item "min-spec-prob"
  The minimum probability (in percents) of reaching a source block
  for interblock speculative scheduling.
! .IP "\fBmax-sched-extend-regions-iters\fR" 4
  .IX Item "max-sched-extend-regions-iters"
! The maximum number of iterations through \s-1CFG\s0 to extend regions.
  A value of 0 disables region extensions.
! .IP "\fBmax-sched-insn-conflict-delay\fR" 4
  .IX Item "max-sched-insn-conflict-delay"
  The maximum conflict delay for an insn to be considered for speculative motion.
! .IP "\fBsched-spec-prob-cutoff\fR" 4
  .IX Item "sched-spec-prob-cutoff"
  The minimal probability of speculation success (in percents), so that
  speculative insns are scheduled.
! .IP "\fBsched-state-edge-prob-cutoff\fR" 4
  .IX Item "sched-state-edge-prob-cutoff"
  The minimum probability an edge must have for the scheduler to save its
  state across it.
! .IP "\fBsched-mem-true-dep-cost\fR" 4
  .IX Item "sched-mem-true-dep-cost"
! Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
  memory locations.
! .IP "\fBselsched-max-lookahead\fR" 4
  .IX Item "selsched-max-lookahead"
  The maximum size of the lookahead window of selective scheduling.  It is a
  depth of search for available instructions.
! .IP "\fBselsched-max-sched-times\fR" 4
  .IX Item "selsched-max-sched-times"
  The maximum number of times that an instruction is scheduled during
  selective scheduling.  This is the limit on the number of iterations
  through which the instruction may be pipelined.
! .IP "\fBselsched-insns-to-rename\fR" 4
  .IX Item "selsched-insns-to-rename"
  The maximum number of best instructions in the ready list that are considered
  for renaming in the selective scheduler.
! .IP "\fBsms-min-sc\fR" 4
  .IX Item "sms-min-sc"
  The minimum value of stage count that swing modulo scheduler
  generates.
! .IP "\fBmax-last-value-rtl\fR" 4
  .IX Item "max-last-value-rtl"
  The maximum size measured as number of RTLs that can be recorded in an expression
  in combiner for a pseudo register as last known value of that register.
! .IP "\fBmax-combine-insns\fR" 4
  .IX Item "max-combine-insns"
! The maximum number of instructions the \s-1RTL\s0 combiner tries to combine.
! .IP "\fBinteger-share-limit\fR" 4
  .IX Item "integer-share-limit"
  Small integer constants can use a shared data structure, reducing the
! compiler's memory usage and increasing its speed.  This sets the maximum
  value of a shared integer constant.
! .IP "\fBssp-buffer-size\fR" 4
  .IX Item "ssp-buffer-size"
  The minimum size of buffers (i.e. arrays) that receive stack smashing
  protection when \fB\-fstack\-protector\fR is used.
! .IP "\fBmin-size-for-stack-sharing\fR" 4
  .IX Item "min-size-for-stack-sharing"
  The minimum size of variables taking part in stack slot sharing when not
  optimizing.
! .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
  .IX Item "max-jump-thread-duplication-stmts"
  Maximum number of statements allowed in a block that needs to be
  duplicated when threading jumps.
! .IP "\fBmax-jump-thread-paths\fR" 4
  .IX Item "max-jump-thread-paths"
  The maximum number of paths to consider when searching for jump threading
  opportunities.  When arriving at a block, incoming edges are only considered
  if the number of paths to be searched so far multiplied by the number of
  incoming edges does not exhaust the specified maximum number of paths to
  consider.
! .IP "\fBmax-fields-for-field-sensitive\fR" 4
  .IX Item "max-fields-for-field-sensitive"
  Maximum number of fields in a structure treated in
  a field sensitive manner during pointer analysis.
! .IP "\fBprefetch-latency\fR" 4
  .IX Item "prefetch-latency"
  Estimate on average number of instructions that are executed before
  prefetch finishes.  The distance prefetched ahead is proportional
  to this constant.  Increasing this number may also lead to less
! streams being prefetched (see \fBsimultaneous-prefetches\fR).
! .IP "\fBsimultaneous-prefetches\fR" 4
  .IX Item "simultaneous-prefetches"
  Maximum number of prefetches that can run at the same time.
! .IP "\fBl1\-cache\-line\-size\fR" 4
  .IX Item "l1-cache-line-size"
  The size of cache line in L1 data cache, in bytes.
! .IP "\fBl1\-cache\-size\fR" 4
  .IX Item "l1-cache-size"
  The size of L1 data cache, in kilobytes.
! .IP "\fBl2\-cache\-size\fR" 4
  .IX Item "l2-cache-size"
  The size of L2 data cache, in kilobytes.
! .IP "\fBprefetch-dynamic-strides\fR" 4
  .IX Item "prefetch-dynamic-strides"
  Whether the loop array prefetch pass should issue software prefetch hints
! for strides that are non-constant.  In some cases this may be
! beneficial, though the fact the stride is non-constant may make it
  hard to predict when there is clear benefit to issuing these hints.
  .Sp
! Set to 1 if the prefetch hints should be issued for non-constant
  strides.  Set to 0 if prefetch hints should be issued only for strides that
! are known to be constant and below \fBprefetch-minimum-stride\fR.
! .IP "\fBprefetch-minimum-stride\fR" 4
  .IX Item "prefetch-minimum-stride"
  Minimum constant stride, in bytes, to start using prefetch hints for.  If
  the stride is less than this threshold, prefetch hints will not be issued.
--- 14877,15124 ----
  The known number of iterations is predicted correctly, while
  the unknown number of iterations average to roughly 10.  This means that the
  loop without bounds appears artificially cold relative to the other one.
! .IP \fBbuiltin\-expect\-probability\fR 4
  .IX Item "builtin-expect-probability"
  Control the probability of the expression having the specified value. This
  parameter takes a percentage (i.e. 0 ... 100) as input.
! .IP \fBbuiltin\-string\-cmp\-inline\-length\fR 4
  .IX Item "builtin-string-cmp-inline-length"
  The maximum length of a constant string for a builtin string cmp call 
  eligible for inlining.
! .IP \fBalign\-threshold\fR 4
  .IX Item "align-threshold"
  Select fraction of the maximal frequency of executions of a basic block in
  a function to align the basic block.
! .IP \fBalign\-loop\-iterations\fR 4
  .IX Item "align-loop-iterations"
  A loop expected to iterate at least the selected number of iterations is
  aligned.
! .IP \fBtracer\-dynamic\-coverage\fR 4
  .IX Item "tracer-dynamic-coverage"
  .PD 0
! .IP \fBtracer\-dynamic\-coverage\-feedback\fR 4
  .IX Item "tracer-dynamic-coverage-feedback"
  .PD
  This value is used to limit superblock formation once the given percentage of
  executed instructions is covered.  This limits unnecessary code size
  expansion.
  .Sp
! The \fBtracer\-dynamic\-coverage\-feedback\fR parameter
  is used only when profile
  feedback is available.  The real profiles (as opposed to statically estimated
  ones) are much less balanced allowing the threshold to be larger value.
! .IP \fBtracer\-max\-code\-growth\fR 4
  .IX Item "tracer-max-code-growth"
  Stop tail duplication once code growth has reached given percentage.  This is
  a rather artificial limit, as most of the duplicates are eliminated later in
  cross jumping, so it may be set to much higher values than is the desired code
  growth.
! .IP \fBtracer\-min\-branch\-ratio\fR 4
  .IX Item "tracer-min-branch-ratio"
  Stop reverse growth when the reverse probability of best edge is less than this
  threshold (in percent).
! .IP \fBtracer\-min\-branch\-probability\fR 4
  .IX Item "tracer-min-branch-probability"
  .PD 0
! .IP \fBtracer\-min\-branch\-probability\-feedback\fR 4
  .IX Item "tracer-min-branch-probability-feedback"
  .PD
  Stop forward growth if the best edge has probability lower than this
  threshold.
  .Sp
! Similarly to \fBtracer\-dynamic\-coverage\fR two parameters are
! provided.  \fBtracer\-min\-branch\-probability\-feedback\fR is used for
! compilation with profile feedback and \fBtracer\-min\-branch\-probability\fR
  compilation without.  The value for compilation with profile feedback
  needs to be more conservative (higher) in order to make tracer
  effective.
! .IP \fBstack\-clash\-protection\-guard\-size\fR 4
  .IX Item "stack-clash-protection-guard-size"
  Specify the size of the operating system provided stack guard as
  2 raised to \fInum\fR bytes.  Higher values may reduce the
  number of explicit probes, but a value larger than the operating system
  provided guard will leave code vulnerable to stack clash style attacks.
! .IP \fBstack\-clash\-protection\-probe\-interval\fR 4
  .IX Item "stack-clash-protection-probe-interval"
  Stack clash protection involves probing stack space as it is allocated.  This
  param controls the maximum distance between probes into the stack as 2 raised
  to \fInum\fR bytes.  Higher values may reduce the number of explicit probes, but a value
  larger than the operating system provided guard will leave code vulnerable to
  stack clash style attacks.
! .IP \fBmax\-cse\-path\-length\fR 4
  .IX Item "max-cse-path-length"
! The maximum number of basic blocks on path that CSE considers.
! .IP \fBmax\-cse\-insns\fR 4
  .IX Item "max-cse-insns"
! The maximum number of instructions CSE processes before flushing.
! .IP \fBggc\-min\-expand\fR 4
  .IX Item "ggc-min-expand"
! GCC uses a garbage collector to manage its own memory allocation.  This
  parameter specifies the minimum percentage by which the garbage
! collector\*(Aqs heap should be allowed to expand between collections.
  Tuning this may improve compilation speed; it has no effect on code
  generation.
  .Sp
! The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
! RAM >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of "RAM" is
! the smallest of actual RAM and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
! GCC is not able to calculate RAM on a particular platform, the lower
  bound of 30% is used.  Setting this parameter and
! \&\fBggc\-min\-heapsize\fR to zero causes a full collection to occur at
  every opportunity.  This is extremely slow, but can be useful for
  debugging.
! .IP \fBggc\-min\-heapsize\fR 4
  .IX Item "ggc-min-heapsize"
! Minimum size of the garbage collector\*(Aqs heap before it begins bothering
  to collect garbage.  The first collection occurs after the heap expands
! by \fBggc\-min\-expand\fR% beyond \fBggc\-min\-heapsize\fR.  Again,
  tuning this may improve compilation speed, and has no effect on code
  generation.
  .Sp
! The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
! tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
  with a lower bound of 4096 (four megabytes) and an upper bound of
! 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
  particular platform, the lower bound is used.  Setting this parameter
  very large effectively disables garbage collection.  Setting this
! parameter and \fBggc\-min\-expand\fR to zero causes a full collection
  to occur at every opportunity.
! .IP \fBmax\-reload\-search\-insns\fR 4
  .IX Item "max-reload-search-insns"
  The maximum number of instruction reload should look backward for equivalent
  register.  Increasing values mean more aggressive optimization, making the
  compilation time increase with probably slightly better performance.
! .IP \fBmax\-cselib\-memory\-locations\fR 4
  .IX Item "max-cselib-memory-locations"
  The maximum number of memory locations cselib should take into account.
  Increasing values mean more aggressive optimization, making the compilation time
  increase with probably slightly better performance.
! .IP \fBmax\-sched\-ready\-insns\fR 4
  .IX Item "max-sched-ready-insns"
  The maximum number of instructions ready to be issued the scheduler should
  consider at any given time during the first scheduling pass.  Increasing
  values mean more thorough searches, making the compilation time increase
  with probably little benefit.
! .IP \fBmax\-sched\-region\-blocks\fR 4
  .IX Item "max-sched-region-blocks"
  The maximum number of blocks in a region to be considered for
  interblock scheduling.
! .IP \fBmax\-pipeline\-region\-blocks\fR 4
  .IX Item "max-pipeline-region-blocks"
  The maximum number of blocks in a region to be considered for
  pipelining in the selective scheduler.
! .IP \fBmax\-sched\-region\-insns\fR 4
  .IX Item "max-sched-region-insns"
  The maximum number of insns in a region to be considered for
  interblock scheduling.
! .IP \fBmax\-pipeline\-region\-insns\fR 4
  .IX Item "max-pipeline-region-insns"
  The maximum number of insns in a region to be considered for
  pipelining in the selective scheduler.
! .IP \fBmin\-spec\-prob\fR 4
  .IX Item "min-spec-prob"
  The minimum probability (in percents) of reaching a source block
  for interblock speculative scheduling.
! .IP \fBmax\-sched\-extend\-regions\-iters\fR 4
  .IX Item "max-sched-extend-regions-iters"
! The maximum number of iterations through CFG to extend regions.
  A value of 0 disables region extensions.
! .IP \fBmax\-sched\-insn\-conflict\-delay\fR 4
  .IX Item "max-sched-insn-conflict-delay"
  The maximum conflict delay for an insn to be considered for speculative motion.
! .IP \fBsched\-spec\-prob\-cutoff\fR 4
  .IX Item "sched-spec-prob-cutoff"
  The minimal probability of speculation success (in percents), so that
  speculative insns are scheduled.
! .IP \fBsched\-state\-edge\-prob\-cutoff\fR 4
  .IX Item "sched-state-edge-prob-cutoff"
  The minimum probability an edge must have for the scheduler to save its
  state across it.
! .IP \fBsched\-mem\-true\-dep\-cost\fR 4
  .IX Item "sched-mem-true-dep-cost"
! Minimal distance (in CPU cycles) between store and load targeting same
  memory locations.
! .IP \fBselsched\-max\-lookahead\fR 4
  .IX Item "selsched-max-lookahead"
  The maximum size of the lookahead window of selective scheduling.  It is a
  depth of search for available instructions.
! .IP \fBselsched\-max\-sched\-times\fR 4
  .IX Item "selsched-max-sched-times"
  The maximum number of times that an instruction is scheduled during
  selective scheduling.  This is the limit on the number of iterations
  through which the instruction may be pipelined.
! .IP \fBselsched\-insns\-to\-rename\fR 4
  .IX Item "selsched-insns-to-rename"
  The maximum number of best instructions in the ready list that are considered
  for renaming in the selective scheduler.
! .IP \fBsms\-min\-sc\fR 4
  .IX Item "sms-min-sc"
  The minimum value of stage count that swing modulo scheduler
  generates.
! .IP \fBmax\-last\-value\-rtl\fR 4
  .IX Item "max-last-value-rtl"
  The maximum size measured as number of RTLs that can be recorded in an expression
  in combiner for a pseudo register as last known value of that register.
! .IP \fBmax\-combine\-insns\fR 4
  .IX Item "max-combine-insns"
! The maximum number of instructions the RTL combiner tries to combine.
! .IP \fBinteger\-share\-limit\fR 4
  .IX Item "integer-share-limit"
  Small integer constants can use a shared data structure, reducing the
! compiler\*(Aqs memory usage and increasing its speed.  This sets the maximum
  value of a shared integer constant.
! .IP \fBssp\-buffer\-size\fR 4
  .IX Item "ssp-buffer-size"
  The minimum size of buffers (i.e. arrays) that receive stack smashing
  protection when \fB\-fstack\-protector\fR is used.
! .IP \fBmin\-size\-for\-stack\-sharing\fR 4
  .IX Item "min-size-for-stack-sharing"
  The minimum size of variables taking part in stack slot sharing when not
  optimizing.
! .IP \fBmax\-jump\-thread\-duplication\-stmts\fR 4
  .IX Item "max-jump-thread-duplication-stmts"
  Maximum number of statements allowed in a block that needs to be
  duplicated when threading jumps.
! .IP \fBmax\-jump\-thread\-paths\fR 4
  .IX Item "max-jump-thread-paths"
  The maximum number of paths to consider when searching for jump threading
  opportunities.  When arriving at a block, incoming edges are only considered
  if the number of paths to be searched so far multiplied by the number of
  incoming edges does not exhaust the specified maximum number of paths to
  consider.
! .IP \fBmax\-fields\-for\-field\-sensitive\fR 4
  .IX Item "max-fields-for-field-sensitive"
  Maximum number of fields in a structure treated in
  a field sensitive manner during pointer analysis.
! .IP \fBprefetch\-latency\fR 4
  .IX Item "prefetch-latency"
  Estimate on average number of instructions that are executed before
  prefetch finishes.  The distance prefetched ahead is proportional
  to this constant.  Increasing this number may also lead to less
! streams being prefetched (see \fBsimultaneous\-prefetches\fR).
! .IP \fBsimultaneous\-prefetches\fR 4
  .IX Item "simultaneous-prefetches"
  Maximum number of prefetches that can run at the same time.
! .IP \fBl1\-cache\-line\-size\fR 4
  .IX Item "l1-cache-line-size"
  The size of cache line in L1 data cache, in bytes.
! .IP \fBl1\-cache\-size\fR 4
  .IX Item "l1-cache-size"
  The size of L1 data cache, in kilobytes.
! .IP \fBl2\-cache\-size\fR 4
  .IX Item "l2-cache-size"
  The size of L2 data cache, in kilobytes.
! .IP \fBprefetch\-dynamic\-strides\fR 4
  .IX Item "prefetch-dynamic-strides"
  Whether the loop array prefetch pass should issue software prefetch hints
! for strides that are non\-constant.  In some cases this may be
! beneficial, though the fact the stride is non\-constant may make it
  hard to predict when there is clear benefit to issuing these hints.
  .Sp
! Set to 1 if the prefetch hints should be issued for non\-constant
  strides.  Set to 0 if prefetch hints should be issued only for strides that
! are known to be constant and below \fBprefetch\-minimum\-stride\fR.
! .IP \fBprefetch\-minimum\-stride\fR 4
  .IX Item "prefetch-minimum-stride"
  Minimum constant stride, in bytes, to start using prefetch hints for.  If
  the stride is less than this threshold, prefetch hints will not be issued.
*************** the software prefetchers.  If the hardwa
*** 15196,15216 ****
  stride they can handle, it should be used here to improve the use of
  software prefetchers.
  .Sp
! A value of \-1 means we don't have a threshold and therefore
  prefetch hints can be issued for any constant stride.
  .Sp
  This setting is only useful for strides that are known and constant.
! .IP "\fBdestructive-interference-size\fR" 4
  .IX Item "destructive-interference-size"
  .PD 0
! .IP "\fBconstructive-interference-size\fR" 4
  .IX Item "constructive-interference-size"
  .PD
! The values for the \*(C+17 variables
  \&\f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR and
  \&\f(CW\*(C`std::hardware_constructive_interference_size\*(C'\fR.  The destructive
  interference size is the minimum recommended offset between two
! independent concurrently-accessed objects; the constructive
  interference size is the maximum recommended size of contiguous memory
  accessed together.  Typically both will be the size of an L1 cache
  line for the target, in bytes.  For a generic target covering a range of L1
--- 15129,15149 ----
  stride they can handle, it should be used here to improve the use of
  software prefetchers.
  .Sp
! A value of \-1 means we don\*(Aqt have a threshold and therefore
  prefetch hints can be issued for any constant stride.
  .Sp
  This setting is only useful for strides that are known and constant.
! .IP \fBdestructive\-interference\-size\fR 4
  .IX Item "destructive-interference-size"
  .PD 0
! .IP \fBconstructive\-interference\-size\fR 4
  .IX Item "constructive-interference-size"
  .PD
! The values for the C++17 variables
  \&\f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR and
  \&\f(CW\*(C`std::hardware_constructive_interference_size\*(C'\fR.  The destructive
  interference size is the minimum recommended offset between two
! independent concurrently\-accessed objects; the constructive
  interference size is the maximum recommended size of contiguous memory
  accessed together.  Typically both will be the size of an L1 cache
  line for the target, in bytes.  For a generic target covering a range of L1
*************** the small end of the range and the destr
*** 15219,15227 ****
  end.
  .Sp
  The destructive interference size is intended to be used for layout,
! and thus has \s-1ABI\s0 impact.  The default value is not expected to be
  stable, and on some targets varies with \fB\-mtune\fR, so use of
! this variable in a context where \s-1ABI\s0 stability is important, such as
  the public interface of a library, is strongly discouraged; if it is
  used in that context, users can stabilize the value using this
  option.
--- 15152,15160 ----
  end.
  .Sp
  The destructive interference size is intended to be used for layout,
! and thus has ABI impact.  The default value is not expected to be
  stable, and on some targets varies with \fB\-mtune\fR, so use of
! this variable in a context where ABI stability is important, such as
  the public interface of a library, is strongly discouraged; if it is
  used in that context, users can stabilize the value using this
  option.
*************** typically only used in a \fBstatic_asser
*** 15231,15263 ****
  fits within a cache line.
  .Sp
  See also \fB\-Winterference\-size\fR.
! .IP "\fBloop-interchange-max-num-stmts\fR" 4
  .IX Item "loop-interchange-max-num-stmts"
  The maximum number of stmts in a loop to be interchanged.
! .IP "\fBloop-interchange-stride-ratio\fR" 4
  .IX Item "loop-interchange-stride-ratio"
  The minimum ratio between stride of two loops for interchange to be profitable.
! .IP "\fBmin-insn-to-prefetch-ratio\fR" 4
  .IX Item "min-insn-to-prefetch-ratio"
  The minimum ratio between the number of instructions and the
  number of prefetches to enable prefetching in a loop.
! .IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
  .IX Item "prefetch-min-insn-to-mem-ratio"
  The minimum ratio between the number of instructions and the
  number of memory references to enable prefetching in a loop.
! .IP "\fBuse-canonical-types\fR" 4
  .IX Item "use-canonical-types"
! Whether the compiler should use the \*(L"canonical\*(R" type system.
  Should always be 1, which uses a more efficient internal
! mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
  bugs in the canonical type system are causing compilation failures,
  set this value to 0 to disable canonical types.
! .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
  .IX Item "switch-conversion-max-branch-ratio"
  Switch initialization conversion refuses to create arrays that are
! bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
  branches in the switch.
! .IP "\fBmax-partial-antic-length\fR" 4
  .IX Item "max-partial-antic-length"
  Maximum length of the partial antic set computed during the tree
  partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
--- 15164,15196 ----
  fits within a cache line.
  .Sp
  See also \fB\-Winterference\-size\fR.
! .IP \fBloop\-interchange\-max\-num\-stmts\fR 4
  .IX Item "loop-interchange-max-num-stmts"
  The maximum number of stmts in a loop to be interchanged.
! .IP \fBloop\-interchange\-stride\-ratio\fR 4
  .IX Item "loop-interchange-stride-ratio"
  The minimum ratio between stride of two loops for interchange to be profitable.
! .IP \fBmin\-insn\-to\-prefetch\-ratio\fR 4
  .IX Item "min-insn-to-prefetch-ratio"
  The minimum ratio between the number of instructions and the
  number of prefetches to enable prefetching in a loop.
! .IP \fBprefetch\-min\-insn\-to\-mem\-ratio\fR 4
  .IX Item "prefetch-min-insn-to-mem-ratio"
  The minimum ratio between the number of instructions and the
  number of memory references to enable prefetching in a loop.
! .IP \fBuse\-canonical\-types\fR 4
  .IX Item "use-canonical-types"
! Whether the compiler should use the "canonical" type system.
  Should always be 1, which uses a more efficient internal
! mechanism for comparing types in C++ and Objective\-C++.  However, if
  bugs in the canonical type system are causing compilation failures,
  set this value to 0 to disable canonical types.
! .IP \fBswitch\-conversion\-max\-branch\-ratio\fR 4
  .IX Item "switch-conversion-max-branch-ratio"
  Switch initialization conversion refuses to create arrays that are
! bigger than \fBswitch\-conversion\-max\-branch\-ratio\fR times the number of
  branches in the switch.
! .IP \fBmax\-partial\-antic\-length\fR 4
  .IX Item "max-partial-antic-length"
  Maximum length of the partial antic set computed during the tree
  partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
*************** consuming all of the memory available on
*** 15267,15340 ****
  parameter sets a limit on the length of the sets that are computed,
  which prevents the runaway behavior.  Setting a value of 0 for
  this parameter allows an unlimited set length.
! .IP "\fBrpo-vn-max-loop-depth\fR" 4
  .IX Item "rpo-vn-max-loop-depth"
! Maximum loop depth that is value-numbered optimistically.
  When the limit hits the innermost
! \&\fIrpo-vn-max-loop-depth\fR loops and the outermost loop in the
! loop nest are value-numbered optimistically and the remaining ones not.
! .IP "\fBsccvn-max-alias-queries-per-access\fR" 4
  .IX Item "sccvn-max-alias-queries-per-access"
! Maximum number of alias-oracle queries we perform when looking for
  redundancies for loads and stores.  If this limit is hit the search
  is aborted and the load or store is not considered redundant.  The
  number of queries is algorithmically limited to the number of
  stores on all paths from the load to the function entry.
! .IP "\fBira-max-loops-num\fR" 4
  .IX Item "ira-max-loops-num"
! \&\s-1IRA\s0 uses regional register allocation by default.  If a function
  contains more loops than the number given by this parameter, only at most
! the given number of the most frequently-executed loops form regions
  for regional register allocation.
! .IP "\fBira-max-conflict-table-size\fR" 4
  .IX Item "ira-max-conflict-table-size"
! Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
  table, the table can still require excessive amounts of memory for
  huge functions.  If the conflict table for a function could be more
! than the size in \s-1MB\s0 given by this parameter, the register allocator
! instead uses a faster, simpler, and lower-quality
! algorithm that does not require building a pseudo-register conflict table.
! .IP "\fBira-loop-reserved-regs\fR" 4
  .IX Item "ira-loop-reserved-regs"
! \&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
  for decisions to move loop invariants (see \fB\-O3\fR).  The number
  of available registers reserved for some other purposes is given
  by this parameter.  Default of the parameter
  is the best found from numerous experiments.
! .IP "\fBira-consider-dup-in-all-alts\fR" 4
  .IX Item "ira-consider-dup-in-all-alts"
! Make \s-1IRA\s0 to consider matching constraint (duplicated operand number)
  heavily in all available alternatives for preferred register class.
! If it is set as zero, it means \s-1IRA\s0 only respects the matching
! constraint when it's in the only available alternative with an
! appropriate register class.  Otherwise, it means \s-1IRA\s0 will check all
  available alternatives for preferred register class even if it has
  found some choice with an appropriate register class and respect the
  found qualified matching constraint.
! .IP "\fBira-simple-lra-insn-threshold\fR" 4
  .IX Item "ira-simple-lra-insn-threshold"
! Approximate function insn number in 1K units triggering simple local \s-1RA.\s0
! .IP "\fBlra-inheritance-ebb-probability-cutoff\fR" 4
  .IX Item "lra-inheritance-ebb-probability-cutoff"
! \&\s-1LRA\s0 tries to reuse values reloaded in registers in subsequent insns.
! This optimization is called inheritance.  \s-1EBB\s0 is used as a region to
! do this optimization.  The parameter defines a minimal fall-through
! edge probability in percentage used to add \s-1BB\s0 to inheritance \s-1EBB\s0 in
! \&\s-1LRA.\s0  The default value was chosen
! from numerous runs of \s-1SPEC2000\s0 on x86\-64.
! .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
  .IX Item "loop-invariant-max-bbs-in-loop"
  Loop invariant motion can be very expensive, both in compilation time and
! in amount of needed compile-time memory, with very large loops.  Loops
! with more basic blocks than this parameter won't have loop invariant
  motion optimization performed on them.
! .IP "\fBloop-max-datarefs-for-datadeps\fR" 4
  .IX Item "loop-max-datarefs-for-datadeps"
  Building data dependencies is expensive for very large loops.  This
  parameter limits the number of data references in loops that are
  considered for data dependence analysis.  These large loops are no
  handled by the optimizations using loop data dependencies.
! .IP "\fBmax-vartrack-size\fR" 4
  .IX Item "max-vartrack-size"
  Sets a maximum number of hash table slots to use during variable
  tracking dataflow analysis of any function.  If this limit is exceeded
--- 15200,15273 ----
  parameter sets a limit on the length of the sets that are computed,
  which prevents the runaway behavior.  Setting a value of 0 for
  this parameter allows an unlimited set length.
! .IP \fBrpo\-vn\-max\-loop\-depth\fR 4
  .IX Item "rpo-vn-max-loop-depth"
! Maximum loop depth that is value\-numbered optimistically.
  When the limit hits the innermost
! \&\fIrpo\-vn\-max\-loop\-depth\fR loops and the outermost loop in the
! loop nest are value\-numbered optimistically and the remaining ones not.
! .IP \fBsccvn\-max\-alias\-queries\-per\-access\fR 4
  .IX Item "sccvn-max-alias-queries-per-access"
! Maximum number of alias\-oracle queries we perform when looking for
  redundancies for loads and stores.  If this limit is hit the search
  is aborted and the load or store is not considered redundant.  The
  number of queries is algorithmically limited to the number of
  stores on all paths from the load to the function entry.
! .IP \fBira\-max\-loops\-num\fR 4
  .IX Item "ira-max-loops-num"
! IRA uses regional register allocation by default.  If a function
  contains more loops than the number given by this parameter, only at most
! the given number of the most frequently\-executed loops form regions
  for regional register allocation.
! .IP \fBira\-max\-conflict\-table\-size\fR 4
  .IX Item "ira-max-conflict-table-size"
! Although IRA uses a sophisticated algorithm to compress the conflict
  table, the table can still require excessive amounts of memory for
  huge functions.  If the conflict table for a function could be more
! than the size in MB given by this parameter, the register allocator
! instead uses a faster, simpler, and lower\-quality
! algorithm that does not require building a pseudo\-register conflict table.
! .IP \fBira\-loop\-reserved\-regs\fR 4
  .IX Item "ira-loop-reserved-regs"
! IRA can be used to evaluate more accurate register pressure in loops
  for decisions to move loop invariants (see \fB\-O3\fR).  The number
  of available registers reserved for some other purposes is given
  by this parameter.  Default of the parameter
  is the best found from numerous experiments.
! .IP \fBira\-consider\-dup\-in\-all\-alts\fR 4
  .IX Item "ira-consider-dup-in-all-alts"
! Make IRA to consider matching constraint (duplicated operand number)
  heavily in all available alternatives for preferred register class.
! If it is set as zero, it means IRA only respects the matching
! constraint when it\*(Aqs in the only available alternative with an
! appropriate register class.  Otherwise, it means IRA will check all
  available alternatives for preferred register class even if it has
  found some choice with an appropriate register class and respect the
  found qualified matching constraint.
! .IP \fBira\-simple\-lra\-insn\-threshold\fR 4
  .IX Item "ira-simple-lra-insn-threshold"
! Approximate function insn number in 1K units triggering simple local RA.
! .IP \fBlra\-inheritance\-ebb\-probability\-cutoff\fR 4
  .IX Item "lra-inheritance-ebb-probability-cutoff"
! LRA tries to reuse values reloaded in registers in subsequent insns.
! This optimization is called inheritance.  EBB is used as a region to
! do this optimization.  The parameter defines a minimal fall\-through
! edge probability in percentage used to add BB to inheritance EBB in
! LRA.  The default value was chosen
! from numerous runs of SPEC2000 on x86\-64.
! .IP \fBloop\-invariant\-max\-bbs\-in\-loop\fR 4
  .IX Item "loop-invariant-max-bbs-in-loop"
  Loop invariant motion can be very expensive, both in compilation time and
! in amount of needed compile\-time memory, with very large loops.  Loops
! with more basic blocks than this parameter won\*(Aqt have loop invariant
  motion optimization performed on them.
! .IP \fBloop\-max\-datarefs\-for\-datadeps\fR 4
  .IX Item "loop-max-datarefs-for-datadeps"
  Building data dependencies is expensive for very large loops.  This
  parameter limits the number of data references in loops that are
  considered for data dependence analysis.  These large loops are no
  handled by the optimizations using loop data dependencies.
! .IP \fBmax\-vartrack\-size\fR 4
  .IX Item "max-vartrack-size"
  Sets a maximum number of hash table slots to use during variable
  tracking dataflow analysis of any function.  If this limit is exceeded
*************** function is retried without it, after re
*** 15343,15349 ****
  the function.  If the limit is exceeded even without debug insns, var
  tracking analysis is completely disabled for the function.  Setting
  the parameter to zero makes it unlimited.
! .IP "\fBmax-vartrack-expr-depth\fR" 4
  .IX Item "max-vartrack-expr-depth"
  Sets a maximum number of recursion levels when attempting to map
  variable names or debug temporaries to value expressions.  This trades
--- 15276,15282 ----
  the function.  If the limit is exceeded even without debug insns, var
  tracking analysis is completely disabled for the function.  Setting
  the parameter to zero makes it unlimited.
! .IP \fBmax\-vartrack\-expr\-depth\fR 4
  .IX Item "max-vartrack-expr-depth"
  Sets a maximum number of recursion levels when attempting to map
  variable names or debug temporaries to value expressions.  This trades
*************** low, value expressions that are availabl
*** 15352,15568 ****
  debug information may end up not being used; setting this higher may
  enable the compiler to find more complex debug expressions, but compile
  time and memory use may grow.
! .IP "\fBmax-debug-marker-count\fR" 4
  .IX Item "max-debug-marker-count"
  Sets a threshold on the number of debug markers (e.g. begin stmt
! markers) to avoid complexity explosion at inlining or expanding to \s-1RTL.\s0
  If a function has more such gimple stmts than the set limit, such stmts
! will be dropped from the inlined copy of a function, and from its \s-1RTL\s0
  expansion.
! .IP "\fBmin-nondebug-insn-uid\fR" 4
  .IX Item "min-nondebug-insn-uid"
  Use uids starting at this parameter for nondebug insns.  The range below
  the parameter is reserved exclusively for debug insns created by
  \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
! (non-overlapping) uids above it if the reserved range is exhausted.
! .IP "\fBipa-sra-deref-prob-threshold\fR" 4
  .IX Item "ipa-sra-deref-prob-threshold"
! IPA-SRA replaces a pointer which is known not be \s-1NULL\s0 with one or more
  new parameters only when the probability (in percent, relative to
  function entry) of it being dereferenced is higher than this parameter.
! .IP "\fBipa-sra-ptr-growth-factor\fR" 4
  .IX Item "ipa-sra-ptr-growth-factor"
! IPA-SRA replaces a pointer to an aggregate with one or more new
  parameters only when their cumulative size is less or equal to
! \&\fBipa-sra-ptr-growth-factor\fR times the size of the original
  pointer parameter.
! .IP "\fBipa-sra-ptrwrap-growth-factor\fR" 4
  .IX Item "ipa-sra-ptrwrap-growth-factor"
  Additional maximum allowed growth of total size of new parameters
! that ipa-sra replaces a pointer to an aggregate with,
  if it points to a local variable that the caller only writes to and
  passes it as an argument to other functions.
! .IP "\fBipa-sra-max-replacements\fR" 4
  .IX Item "ipa-sra-max-replacements"
! Maximum pieces of an aggregate that IPA-SRA tracks.  As a
  consequence, it is also the maximum number of replacements of a formal
  parameter.
! .IP "\fBsra-max-scalarization-size-Ospeed\fR" 4
  .IX Item "sra-max-scalarization-size-Ospeed"
  .PD 0
! .IP "\fBsra-max-scalarization-size-Osize\fR" 4
  .IX Item "sra-max-scalarization-size-Osize"
  .PD
! The two Scalar Reduction of Aggregates passes (\s-1SRA\s0 and IPA-SRA) aim to
  replace scalar parts of aggregates with uses of independent scalar
  variables.  These parameters control the maximum size, in storage units,
  of aggregate which is considered for replacement when compiling for
  speed
! (\fBsra-max-scalarization-size-Ospeed\fR) or size
! (\fBsra-max-scalarization-size-Osize\fR) respectively.
! .IP "\fBsra-max-propagations\fR" 4
  .IX Item "sra-max-propagations"
  The maximum number of artificial accesses that Scalar Replacement of
! Aggregates (\s-1SRA\s0) will track, per one local variable, in order to
  facilitate copy propagation.
! .IP "\fBtm-max-aggregate-size\fR" 4
  .IX Item "tm-max-aggregate-size"
! When making copies of thread-local variables in a transaction, this
  parameter specifies the size in bytes after which variables are
  saved with the logging functions as opposed to save/restore code
  sequence pairs.  This option only applies when using
  \&\fB\-fgnu\-tm\fR.
! .IP "\fBgraphite-max-nb-scop-params\fR" 4
  .IX Item "graphite-max-nb-scop-params"
  To avoid exponential effects in the Graphite loop transforms, the
  number of parameters in a Static Control Part (SCoP) is bounded.
  A value of zero can be used to lift
  the bound.  A variable whose value is unknown at compilation time and
  defined outside a SCoP is a parameter of the SCoP.
! .IP "\fBhardcfr-max-blocks\fR" 4
  .IX Item "hardcfr-max-blocks"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR for functions with a
  larger number of blocks than the specified value.  Zero removes any
  limit.
! .IP "\fBhardcfr-max-inline-blocks\fR" 4
  .IX Item "hardcfr-max-inline-blocks"
! Force \fB\-fharden\-control\-flow\-redundancy\fR to use out-of-line
  checking for functions with a larger number of basic blocks than the
  specified value.
! .IP "\fBloop-block-tile-size\fR" 4
  .IX Item "loop-block-tile-size"
  Loop blocking or strip mining transforms, enabled with
  \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
  loop in the loop nest by a given number of iterations.  The strip
! length can be changed using the \fBloop-block-tile-size\fR
  parameter.
! .IP "\fBipa-jump-function-lookups\fR" 4
  .IX Item "ipa-jump-function-lookups"
  Specifies number of statements visited during jump function offset discovery.
! .IP "\fBipa-cp-value-list-size\fR" 4
  .IX Item "ipa-cp-value-list-size"
! IPA-CP attempts to track all possible values and types passed to a function's
  parameter in order to propagate them and perform devirtualization.
! \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
  stores per one formal parameter of a function.
! .IP "\fBipa-cp-eval-threshold\fR" 4
  .IX Item "ipa-cp-eval-threshold"
! IPA-CP calculates its own score of cloning profitability heuristics
  and performs those cloning opportunities with scores that exceed
! \&\fBipa-cp-eval-threshold\fR.
! .IP "\fBipa-cp-max-recursive-depth\fR" 4
  .IX Item "ipa-cp-max-recursive-depth"
! Maximum depth of recursive cloning for self-recursive function.
! .IP "\fBipa-cp-min-recursive-probability\fR" 4
  .IX Item "ipa-cp-min-recursive-probability"
  Recursive cloning only when the probability of call being executed exceeds
  the parameter.
! .IP "\fBipa-cp-profile-count-base\fR" 4
  .IX Item "ipa-cp-profile-count-base"
! When using \fB\-fprofile\-use\fR option, IPA-CP will consider the measured
  execution count of a call graph edge at this percentage position in their
  histogram as the basis for its heuristics calculation.
! .IP "\fBipa-cp-recursive-freq-factor\fR" 4
  .IX Item "ipa-cp-recursive-freq-factor"
  The number of times interprocedural copy propagation expects recursive
  functions to call themselves.
! .IP "\fBipa-cp-recursion-penalty\fR" 4
  .IX Item "ipa-cp-recursion-penalty"
  Percentage penalty the recursive functions will receive when they
  are evaluated for cloning.
! .IP "\fBipa-cp-single-call-penalty\fR" 4
  .IX Item "ipa-cp-single-call-penalty"
  Percentage penalty functions containing a single call to another
  function will receive when they are evaluated for cloning.
! .IP "\fBipa-max-agg-items\fR" 4
  .IX Item "ipa-max-agg-items"
! IPA-CP is also capable to propagate a number of scalar values passed
! in an aggregate. \fBipa-max-agg-items\fR controls the maximum
  number of such values per one parameter.
! .IP "\fBipa-cp-loop-hint-bonus\fR" 4
  .IX Item "ipa-cp-loop-hint-bonus"
! When IPA-CP determines that a cloning candidate would make the number
  of iterations of a loop known, it adds a bonus of
! \&\fBipa-cp-loop-hint-bonus\fR to the profitability score of
  the candidate.
! .IP "\fBipa-max-loop-predicates\fR" 4
  .IX Item "ipa-max-loop-predicates"
! The maximum number of different predicates \s-1IPA\s0 will use to describe when
  loops in a function have known properties.
! .IP "\fBipa-max-aa-steps\fR" 4
  .IX Item "ipa-max-aa-steps"
! During its analysis of function bodies, IPA-CP employs alias analysis
  in order to track values pointed to by function parameters.  In order
  not spend too much time analyzing huge functions, it gives up and
  consider all memory clobbered after examining
! \&\fBipa-max-aa-steps\fR statements modifying memory.
! .IP "\fBipa-max-switch-predicate-bounds\fR" 4
  .IX Item "ipa-max-switch-predicate-bounds"
  Maximal number of boundary endpoints of case ranges of switch statement.
! For switch exceeding this limit, IPA-CP will not construct cloning cost
  predicate, which is used to estimate cloning benefit, for default case
  of the switch statement.
! .IP "\fBipa-max-param-expr-ops\fR" 4
  .IX Item "ipa-max-param-expr-ops"
! IPA-CP will analyze conditional statement that references some function
  parameter to estimate benefit for cloning upon certain constant value.
  But if number of operations in a parameter expression exceeds
! \&\fBipa-max-param-expr-ops\fR, the expression is treated as complicated
! one, and is not handled by \s-1IPA\s0 analysis.
! .IP "\fBlto-partitions\fR" 4
  .IX Item "lto-partitions"
! Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
  The number of partitions should exceed the number of CPUs used for compilation.
! .IP "\fBlto-min-partition\fR" 4
  .IX Item "lto-min-partition"
! Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
  This prevents expenses of splitting very small programs into too many
  partitions.
! .IP "\fBlto-max-partition\fR" 4
  .IX Item "lto-max-partition"
! Size of max partition for \s-1WHOPR\s0 (in estimated instructions).
  to provide an upper bound for individual size of partition.
  Meant to be used only with balanced partitioning.
! .IP "\fBlto-max-streaming-parallelism\fR" 4
  .IX Item "lto-max-streaming-parallelism"
! Maximal number of parallel processes used for \s-1LTO\s0 streaming.
! .IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
  .IX Item "cxx-max-namespaces-for-diagnostic-help"
! The maximum number of namespaces to consult for suggestions when \*(C+
  name lookup fails for an identifier.
! .IP "\fBsink-frequency-threshold\fR" 4
  .IX Item "sink-frequency-threshold"
  The maximum relative execution frequency (in percents) of the target block
! relative to a statement's original block to allow statement sinking of a
  statement.  Larger numbers result in more aggressive statement sinking.
  A small positive adjustment is applied for
  statements with memory operands as those are even more profitable so sink.
! .IP "\fBmax-stores-to-sink\fR" 4
  .IX Item "max-stores-to-sink"
  The maximum number of conditional store pairs that can be sunk.  Set to 0
! if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
  (\fB\-ftree\-loop\-if\-convert\fR) is disabled.
! .IP "\fBcase-values-threshold\fR" 4
  .IX Item "case-values-threshold"
  The smallest number of different values for which it is best to use a
! jump-table instead of a tree of conditional branches.  If the value is
  0, use the default for the machine.
! .IP "\fBjump-table-max-growth-ratio-for-size\fR" 4
  .IX Item "jump-table-max-growth-ratio-for-size"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for size.
! .IP "\fBjump-table-max-growth-ratio-for-speed\fR" 4
  .IX Item "jump-table-max-growth-ratio-for-speed"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for speed.
! .IP "\fBtree-reassoc-width\fR" 4
  .IX Item "tree-reassoc-width"
  Set the maximum number of instructions executed in parallel in
  reassociated tree. This parameter overrides target dependent
  heuristics used by default if has non zero value.
! .IP "\fBsched-pressure-algorithm\fR" 4
  .IX Item "sched-pressure-algorithm"
  Choose between the two available implementations of
  \&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
--- 15285,15501 ----
  debug information may end up not being used; setting this higher may
  enable the compiler to find more complex debug expressions, but compile
  time and memory use may grow.
! .IP \fBmax\-debug\-marker\-count\fR 4
  .IX Item "max-debug-marker-count"
  Sets a threshold on the number of debug markers (e.g. begin stmt
! markers) to avoid complexity explosion at inlining or expanding to RTL.
  If a function has more such gimple stmts than the set limit, such stmts
! will be dropped from the inlined copy of a function, and from its RTL
  expansion.
! .IP \fBmin\-nondebug\-insn\-uid\fR 4
  .IX Item "min-nondebug-insn-uid"
  Use uids starting at this parameter for nondebug insns.  The range below
  the parameter is reserved exclusively for debug insns created by
  \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
! (non\-overlapping) uids above it if the reserved range is exhausted.
! .IP \fBipa\-sra\-deref\-prob\-threshold\fR 4
  .IX Item "ipa-sra-deref-prob-threshold"
! IPA\-SRA replaces a pointer which is known not be NULL with one or more
  new parameters only when the probability (in percent, relative to
  function entry) of it being dereferenced is higher than this parameter.
! .IP \fBipa\-sra\-ptr\-growth\-factor\fR 4
  .IX Item "ipa-sra-ptr-growth-factor"
! IPA\-SRA replaces a pointer to an aggregate with one or more new
  parameters only when their cumulative size is less or equal to
! \&\fBipa\-sra\-ptr\-growth\-factor\fR times the size of the original
  pointer parameter.
! .IP \fBipa\-sra\-ptrwrap\-growth\-factor\fR 4
  .IX Item "ipa-sra-ptrwrap-growth-factor"
  Additional maximum allowed growth of total size of new parameters
! that ipa\-sra replaces a pointer to an aggregate with,
  if it points to a local variable that the caller only writes to and
  passes it as an argument to other functions.
! .IP \fBipa\-sra\-max\-replacements\fR 4
  .IX Item "ipa-sra-max-replacements"
! Maximum pieces of an aggregate that IPA\-SRA tracks.  As a
  consequence, it is also the maximum number of replacements of a formal
  parameter.
! .IP \fBsra\-max\-scalarization\-size\-Ospeed\fR 4
  .IX Item "sra-max-scalarization-size-Ospeed"
  .PD 0
! .IP \fBsra\-max\-scalarization\-size\-Osize\fR 4
  .IX Item "sra-max-scalarization-size-Osize"
  .PD
! The two Scalar Reduction of Aggregates passes (SRA and IPA\-SRA) aim to
  replace scalar parts of aggregates with uses of independent scalar
  variables.  These parameters control the maximum size, in storage units,
  of aggregate which is considered for replacement when compiling for
  speed
! (\fBsra\-max\-scalarization\-size\-Ospeed\fR) or size
! (\fBsra\-max\-scalarization\-size\-Osize\fR) respectively.
! .IP \fBsra\-max\-propagations\fR 4
  .IX Item "sra-max-propagations"
  The maximum number of artificial accesses that Scalar Replacement of
! Aggregates (SRA) will track, per one local variable, in order to
  facilitate copy propagation.
! .IP \fBtm\-max\-aggregate\-size\fR 4
  .IX Item "tm-max-aggregate-size"
! When making copies of thread\-local variables in a transaction, this
  parameter specifies the size in bytes after which variables are
  saved with the logging functions as opposed to save/restore code
  sequence pairs.  This option only applies when using
  \&\fB\-fgnu\-tm\fR.
! .IP \fBgraphite\-max\-nb\-scop\-params\fR 4
  .IX Item "graphite-max-nb-scop-params"
  To avoid exponential effects in the Graphite loop transforms, the
  number of parameters in a Static Control Part (SCoP) is bounded.
  A value of zero can be used to lift
  the bound.  A variable whose value is unknown at compilation time and
  defined outside a SCoP is a parameter of the SCoP.
! .IP \fBhardcfr\-max\-blocks\fR 4
  .IX Item "hardcfr-max-blocks"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR for functions with a
  larger number of blocks than the specified value.  Zero removes any
  limit.
! .IP \fBhardcfr\-max\-inline\-blocks\fR 4
  .IX Item "hardcfr-max-inline-blocks"
! Force \fB\-fharden\-control\-flow\-redundancy\fR to use out\-of\-line
  checking for functions with a larger number of basic blocks than the
  specified value.
! .IP \fBloop\-block\-tile\-size\fR 4
  .IX Item "loop-block-tile-size"
  Loop blocking or strip mining transforms, enabled with
  \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
  loop in the loop nest by a given number of iterations.  The strip
! length can be changed using the \fBloop\-block\-tile\-size\fR
  parameter.
! .IP \fBipa\-jump\-function\-lookups\fR 4
  .IX Item "ipa-jump-function-lookups"
  Specifies number of statements visited during jump function offset discovery.
! .IP \fBipa\-cp\-value\-list\-size\fR 4
  .IX Item "ipa-cp-value-list-size"
! IPA\-CP attempts to track all possible values and types passed to a function\*(Aqs
  parameter in order to propagate them and perform devirtualization.
! \&\fBipa\-cp\-value\-list\-size\fR is the maximum number of values and types it
  stores per one formal parameter of a function.
! .IP \fBipa\-cp\-eval\-threshold\fR 4
  .IX Item "ipa-cp-eval-threshold"
! IPA\-CP calculates its own score of cloning profitability heuristics
  and performs those cloning opportunities with scores that exceed
! \&\fBipa\-cp\-eval\-threshold\fR.
! .IP \fBipa\-cp\-max\-recursive\-depth\fR 4
  .IX Item "ipa-cp-max-recursive-depth"
! Maximum depth of recursive cloning for self\-recursive function.
! .IP \fBipa\-cp\-min\-recursive\-probability\fR 4
  .IX Item "ipa-cp-min-recursive-probability"
  Recursive cloning only when the probability of call being executed exceeds
  the parameter.
! .IP \fBipa\-cp\-profile\-count\-base\fR 4
  .IX Item "ipa-cp-profile-count-base"
! When using \fB\-fprofile\-use\fR option, IPA\-CP will consider the measured
  execution count of a call graph edge at this percentage position in their
  histogram as the basis for its heuristics calculation.
! .IP \fBipa\-cp\-recursive\-freq\-factor\fR 4
  .IX Item "ipa-cp-recursive-freq-factor"
  The number of times interprocedural copy propagation expects recursive
  functions to call themselves.
! .IP \fBipa\-cp\-recursion\-penalty\fR 4
  .IX Item "ipa-cp-recursion-penalty"
  Percentage penalty the recursive functions will receive when they
  are evaluated for cloning.
! .IP \fBipa\-cp\-single\-call\-penalty\fR 4
  .IX Item "ipa-cp-single-call-penalty"
  Percentage penalty functions containing a single call to another
  function will receive when they are evaluated for cloning.
! .IP \fBipa\-max\-agg\-items\fR 4
  .IX Item "ipa-max-agg-items"
! IPA\-CP is also capable to propagate a number of scalar values passed
! in an aggregate. \fBipa\-max\-agg\-items\fR controls the maximum
  number of such values per one parameter.
! .IP \fBipa\-cp\-loop\-hint\-bonus\fR 4
  .IX Item "ipa-cp-loop-hint-bonus"
! When IPA\-CP determines that a cloning candidate would make the number
  of iterations of a loop known, it adds a bonus of
! \&\fBipa\-cp\-loop\-hint\-bonus\fR to the profitability score of
  the candidate.
! .IP \fBipa\-max\-loop\-predicates\fR 4
  .IX Item "ipa-max-loop-predicates"
! The maximum number of different predicates IPA will use to describe when
  loops in a function have known properties.
! .IP \fBipa\-max\-aa\-steps\fR 4
  .IX Item "ipa-max-aa-steps"
! During its analysis of function bodies, IPA\-CP employs alias analysis
  in order to track values pointed to by function parameters.  In order
  not spend too much time analyzing huge functions, it gives up and
  consider all memory clobbered after examining
! \&\fBipa\-max\-aa\-steps\fR statements modifying memory.
! .IP \fBipa\-max\-switch\-predicate\-bounds\fR 4
  .IX Item "ipa-max-switch-predicate-bounds"
  Maximal number of boundary endpoints of case ranges of switch statement.
! For switch exceeding this limit, IPA\-CP will not construct cloning cost
  predicate, which is used to estimate cloning benefit, for default case
  of the switch statement.
! .IP \fBipa\-max\-param\-expr\-ops\fR 4
  .IX Item "ipa-max-param-expr-ops"
! IPA\-CP will analyze conditional statement that references some function
  parameter to estimate benefit for cloning upon certain constant value.
  But if number of operations in a parameter expression exceeds
! \&\fBipa\-max\-param\-expr\-ops\fR, the expression is treated as complicated
! one, and is not handled by IPA analysis.
! .IP \fBlto\-partitions\fR 4
  .IX Item "lto-partitions"
! Specify desired number of partitions produced during WHOPR compilation.
  The number of partitions should exceed the number of CPUs used for compilation.
! .IP \fBlto\-min\-partition\fR 4
  .IX Item "lto-min-partition"
! Size of minimal partition for WHOPR (in estimated instructions).
  This prevents expenses of splitting very small programs into too many
  partitions.
! .IP \fBlto\-max\-partition\fR 4
  .IX Item "lto-max-partition"
! Size of max partition for WHOPR (in estimated instructions).
  to provide an upper bound for individual size of partition.
  Meant to be used only with balanced partitioning.
! .IP \fBlto\-max\-streaming\-parallelism\fR 4
  .IX Item "lto-max-streaming-parallelism"
! Maximal number of parallel processes used for LTO streaming.
! .IP \fBcxx\-max\-namespaces\-for\-diagnostic\-help\fR 4
  .IX Item "cxx-max-namespaces-for-diagnostic-help"
! The maximum number of namespaces to consult for suggestions when C++
  name lookup fails for an identifier.
! .IP \fBsink\-frequency\-threshold\fR 4
  .IX Item "sink-frequency-threshold"
  The maximum relative execution frequency (in percents) of the target block
! relative to a statement\*(Aqs original block to allow statement sinking of a
  statement.  Larger numbers result in more aggressive statement sinking.
  A small positive adjustment is applied for
  statements with memory operands as those are even more profitable so sink.
! .IP \fBmax\-stores\-to\-sink\fR 4
  .IX Item "max-stores-to-sink"
  The maximum number of conditional store pairs that can be sunk.  Set to 0
! if either vectorization (\fB\-ftree\-vectorize\fR) or if\-conversion
  (\fB\-ftree\-loop\-if\-convert\fR) is disabled.
! .IP \fBcase\-values\-threshold\fR 4
  .IX Item "case-values-threshold"
  The smallest number of different values for which it is best to use a
! jump\-table instead of a tree of conditional branches.  If the value is
  0, use the default for the machine.
! .IP \fBjump\-table\-max\-growth\-ratio\-for\-size\fR 4
  .IX Item "jump-table-max-growth-ratio-for-size"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for size.
! .IP \fBjump\-table\-max\-growth\-ratio\-for\-speed\fR 4
  .IX Item "jump-table-max-growth-ratio-for-speed"
  The maximum code size growth ratio when expanding
  into a jump table (in percent).  The parameter is used when
  optimizing for speed.
! .IP \fBtree\-reassoc\-width\fR 4
  .IX Item "tree-reassoc-width"
  Set the maximum number of instructions executed in parallel in
  reassociated tree. This parameter overrides target dependent
  heuristics used by default if has non zero value.
! .IP \fBsched\-pressure\-algorithm\fR 4
  .IX Item "sched-pressure-algorithm"
  Choose between the two available implementations of
  \&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
*************** Algorithm 2 was designed to be a comprom
*** 15571,15643 ****
  conservative approach taken by algorithm 1 and the rather aggressive
  approach taken by the default scheduler.  It relies more heavily on
  having a regular register file and accurate register pressure classes.
! See \fIhaifa\-sched.cc\fR in the \s-1GCC\s0 sources for more details.
  .Sp
  The default choice depends on the target.
! .IP "\fBmax-slsr-cand-scan\fR" 4
  .IX Item "max-slsr-cand-scan"
  Set the maximum number of existing candidates that are considered when
! seeking a basis for a new straight-line strength reduction candidate.
! .IP "\fBasan-globals\fR" 4
  .IX Item "asan-globals"
  Enable buffer overflow detection for global objects.  This kind
  of protection is enabled by default if you are using
  \&\fB\-fsanitize=address\fR option.
  To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
! .IP "\fBasan-stack\fR" 4
  .IX Item "asan-stack"
  Enable buffer overflow detection for stack objects.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
! .IP "\fBasan-instrument-reads\fR" 4
  .IX Item "asan-instrument-reads"
  Enable buffer overflow detection for memory reads.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory reads protection use
  \&\fB\-\-param asan\-instrument\-reads=0\fR.
! .IP "\fBasan-instrument-writes\fR" 4
  .IX Item "asan-instrument-writes"
  Enable buffer overflow detection for memory writes.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory writes protection use
  \&\fB\-\-param asan\-instrument\-writes=0\fR option.
! .IP "\fBasan-memintrin\fR" 4
  .IX Item "asan-memintrin"
! Enable detection for built-in functions.  This kind of protection
  is enabled by default when using \fB\-fsanitize=address\fR.
! To disable built-in functions protection use
  \&\fB\-\-param asan\-memintrin=0\fR.
! .IP "\fBasan-use-after-return\fR" 4
  .IX Item "asan-use-after-return"
! Enable detection of use-after-return.  This kind of protection
  is enabled by default when using the \fB\-fsanitize=address\fR option.
  To disable it use \fB\-\-param asan\-use\-after\-return=0\fR.
  .Sp
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_stack_use_after_return=1\*(C'\fR to the environment variable
! \&\fB\s-1ASAN_OPTIONS\s0\fR.
! .IP "\fBasan-instrumentation-with-call-threshold\fR" 4
  .IX Item "asan-instrumentation-with-call-threshold"
  If number of memory accesses in function being instrumented
  is greater or equal to this number, use callbacks instead of inline checks.
  E.g. to disable inline code use
  \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
! .IP "\fBasan-kernel-mem-intrinsic-prefix\fR" 4
  .IX Item "asan-kernel-mem-intrinsic-prefix"
  If nonzero, prefix calls to \f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`memset\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR
  with \fB_\|_asan_\fR or \fB_\|_hwasan_\fR
  for \fB\-fsanitize=kernel\-address\fR or \fB\-fsanitize=kernel\-hwaddress\fR,
  respectively.
! .IP "\fBhwasan-instrument-stack\fR" 4
  .IX Item "hwasan-instrument-stack"
! Enable hwasan instrumentation of statically sized stack-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable stack instrumentation use
  \&\fB\-\-param hwasan\-instrument\-stack=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR.
! .IP "\fBhwasan-random-frame-tag\fR" 4
  .IX Item "hwasan-random-frame-tag"
  When using stack instrumentation, decide tags for stack variables using a
  deterministic sequence beginning at a random tag for each frame.  With this
--- 15504,15576 ----
  conservative approach taken by algorithm 1 and the rather aggressive
  approach taken by the default scheduler.  It relies more heavily on
  having a regular register file and accurate register pressure classes.
! See \fIhaifa\-sched.cc\fR in the GCC sources for more details.
  .Sp
  The default choice depends on the target.
! .IP \fBmax\-slsr\-cand\-scan\fR 4
  .IX Item "max-slsr-cand-scan"
  Set the maximum number of existing candidates that are considered when
! seeking a basis for a new straight\-line strength reduction candidate.
! .IP \fBasan\-globals\fR 4
  .IX Item "asan-globals"
  Enable buffer overflow detection for global objects.  This kind
  of protection is enabled by default if you are using
  \&\fB\-fsanitize=address\fR option.
  To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
! .IP \fBasan\-stack\fR 4
  .IX Item "asan-stack"
  Enable buffer overflow detection for stack objects.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
! .IP \fBasan\-instrument\-reads\fR 4
  .IX Item "asan-instrument-reads"
  Enable buffer overflow detection for memory reads.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory reads protection use
  \&\fB\-\-param asan\-instrument\-reads=0\fR.
! .IP \fBasan\-instrument\-writes\fR 4
  .IX Item "asan-instrument-writes"
  Enable buffer overflow detection for memory writes.  This kind of
  protection is enabled by default when using \fB\-fsanitize=address\fR.
  To disable memory writes protection use
  \&\fB\-\-param asan\-instrument\-writes=0\fR option.
! .IP \fBasan\-memintrin\fR 4
  .IX Item "asan-memintrin"
! Enable detection for built\-in functions.  This kind of protection
  is enabled by default when using \fB\-fsanitize=address\fR.
! To disable built\-in functions protection use
  \&\fB\-\-param asan\-memintrin=0\fR.
! .IP \fBasan\-use\-after\-return\fR 4
  .IX Item "asan-use-after-return"
! Enable detection of use\-after\-return.  This kind of protection
  is enabled by default when using the \fB\-fsanitize=address\fR option.
  To disable it use \fB\-\-param asan\-use\-after\-return=0\fR.
  .Sp
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_stack_use_after_return=1\*(C'\fR to the environment variable
! \&\fBASAN_OPTIONS\fR.
! .IP \fBasan\-instrumentation\-with\-call\-threshold\fR 4
  .IX Item "asan-instrumentation-with-call-threshold"
  If number of memory accesses in function being instrumented
  is greater or equal to this number, use callbacks instead of inline checks.
  E.g. to disable inline code use
  \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
! .IP \fBasan\-kernel\-mem\-intrinsic\-prefix\fR 4
  .IX Item "asan-kernel-mem-intrinsic-prefix"
  If nonzero, prefix calls to \f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`memset\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR
  with \fB_\|_asan_\fR or \fB_\|_hwasan_\fR
  for \fB\-fsanitize=kernel\-address\fR or \fB\-fsanitize=kernel\-hwaddress\fR,
  respectively.
! .IP \fBhwasan\-instrument\-stack\fR 4
  .IX Item "hwasan-instrument-stack"
! Enable hwasan instrumentation of statically sized stack\-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable stack instrumentation use
  \&\fB\-\-param hwasan\-instrument\-stack=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR.
! .IP \fBhwasan\-random\-frame\-tag\fR 4
  .IX Item "hwasan-random-frame-tag"
  When using stack instrumentation, decide tags for stack variables using a
  deterministic sequence beginning at a random tag for each frame.  With this
*************** parameter unset tags are chosen using th
*** 15645,15765 ****
  This is enabled by default for \fB\-fsanitize=hwaddress\fR and unavailable
  for \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable it use \fB\-\-param hwasan\-random\-frame\-tag=0\fR.
! .IP "\fBhwasan-instrument-allocas\fR" 4
  .IX Item "hwasan-instrument-allocas"
! Enable hwasan instrumentation of dynamically sized stack-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of such variables use
  \&\fB\-\-param hwasan\-instrument\-allocas=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR.
! .IP "\fBhwasan-instrument-reads\fR" 4
  .IX Item "hwasan-instrument-reads"
  Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory reads use
  \&\fB\-\-param hwasan\-instrument\-reads=0\fR.
! .IP "\fBhwasan-instrument-writes\fR" 4
  .IX Item "hwasan-instrument-writes"
  Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory writes use
  \&\fB\-\-param hwasan\-instrument\-writes=0\fR.
! .IP "\fBhwasan-instrument-mem-intrinsics\fR" 4
  .IX Item "hwasan-instrument-mem-intrinsics"
  Enable hwasan instrumentation of builtin functions.  Instrumentation of these
  builtin functions is enabled by default for both \fB\-fsanitize=hwaddress\fR
  and \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of builtin functions use
  \&\fB\-\-param hwasan\-instrument\-mem\-intrinsics=0\fR.
! .IP "\fBuse-after-scope-direct-emission-threshold\fR" 4
  .IX Item "use-after-scope-direct-emission-threshold"
  If the size of a local variable in bytes is smaller or equal to this
  number, directly poison (or unpoison) shadow memory instead of using
! run-time callbacks.
! .IP "\fBtsan-distinguish-volatile\fR" 4
  .IX Item "tsan-distinguish-volatile"
  Emit special instrumentation for accesses to volatiles.
! .IP "\fBtsan-instrument-func-entry-exit\fR" 4
  .IX Item "tsan-instrument-func-entry-exit"
! Emit instrumentation calls to _\|\fI_tsan_func_entry()\fR and _\|\fI_tsan_func_exit()\fR.
! .IP "\fBmax-fsm-thread-path-insns\fR" 4
  .IX Item "max-fsm-thread-path-insns"
  Maximum number of instructions to copy when duplicating blocks on a
  finite state automaton jump thread path.
! .IP "\fBthreader-debug\fR" 4
  .IX Item "threader-debug"
  threader\-debug=[none|all] Enables verbose dumping of the threader solver.
! .IP "\fBparloops-chunk-size\fR" 4
  .IX Item "parloops-chunk-size"
  Chunk size of omp schedule for loops parallelized by parloops.
! .IP "\fBparloops-schedule\fR" 4
  .IX Item "parloops-schedule"
  Schedule type of omp schedule for loops parallelized by parloops (static,
  dynamic, guided, auto, runtime).
! .IP "\fBparloops-min-per-thread\fR" 4
  .IX Item "parloops-min-per-thread"
  The minimum number of iterations per thread of an innermost parallelized
  loop for which the parallelized variant is preferred over the single threaded
  one.  Note that for a parallelized loop nest the
  minimum number of iterations of the outermost loop per thread is two.
! .IP "\fBmax-ssa-name-query-depth\fR" 4
  .IX Item "max-ssa-name-query-depth"
! Maximum depth of recursion when querying properties of \s-1SSA\s0 names in things
  like fold routines.  One level of recursion corresponds to following a
! use-def chain.
! .IP "\fBmax-speculative-devirt-maydefs\fR" 4
  .IX Item "max-speculative-devirt-maydefs"
! The maximum number of may-defs we analyze when looking for a must-def
  specifying the dynamic type of an object that invokes a virtual call
  we may be able to devirtualize speculatively.
! .IP "\fBranger-debug\fR" 4
  .IX Item "ranger-debug"
  Specifies the type of debug output to be issued for ranges.
! .IP "\fBunroll-jam-min-percent\fR" 4
  .IX Item "unroll-jam-min-percent"
  The minimum percentage of memory references that must be optimized
! away for the unroll-and-jam transformation to be considered profitable.
! .IP "\fBunroll-jam-max-unroll\fR" 4
  .IX Item "unroll-jam-max-unroll"
  The maximum number of times the outer loop should be unrolled by
! the unroll-and-jam transformation.
! .IP "\fBmax-rtl-if-conversion-unpredictable-cost\fR" 4
  .IX Item "max-rtl-if-conversion-unpredictable-cost"
  Maximum permissible cost for the sequence that would be generated
! by the \s-1RTL\s0 if-conversion pass for a branch that is considered unpredictable.
! .IP "\fBmax-variable-expansions-in-unroller\fR" 4
  .IX Item "max-variable-expansions-in-unroller"
  If \fB\-fvariable\-expansion\-in\-unroller\fR is used, the maximum number
  of times that an individual variable will be expanded during loop unrolling.
! .IP "\fBpartial-inlining-entry-probability\fR" 4
  .IX Item "partial-inlining-entry-probability"
! Maximum probability of the entry \s-1BB\s0 of split region
! (in percent relative to entry \s-1BB\s0 of the function)
  to make partial inlining happen.
! .IP "\fBmax-tracked-strlens\fR" 4
  .IX Item "max-tracked-strlens"
  Maximum number of strings for which strlen optimization pass will
  track string lengths.
! .IP "\fBgcse-after-reload-partial-fraction\fR" 4
  .IX Item "gcse-after-reload-partial-fraction"
  The threshold ratio for performing partial redundancy
  elimination after reload.
! .IP "\fBgcse-after-reload-critical-fraction\fR" 4
  .IX Item "gcse-after-reload-critical-fraction"
  The threshold ratio of critical edges execution count that
  permit performing redundancy elimination after reload.
! .IP "\fBmax-loop-header-insns\fR" 4
  .IX Item "max-loop-header-insns"
  The maximum number of insns in loop header duplicated
  by the copy loop headers pass.
! .IP "\fBvect-epilogues-nomask\fR" 4
  .IX Item "vect-epilogues-nomask"
  Enable loop epilogue vectorization using smaller vector size.
! .IP "\fBvect-partial-vector-usage\fR" 4
  .IX Item "vect-partial-vector-usage"
  Controls when the loop vectorizer considers using partial vector loads
  and stores as an alternative to falling back to scalar code.  0 stops
--- 15578,15698 ----
  This is enabled by default for \fB\-fsanitize=hwaddress\fR and unavailable
  for \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable it use \fB\-\-param hwasan\-random\-frame\-tag=0\fR.
! .IP \fBhwasan\-instrument\-allocas\fR 4
  .IX Item "hwasan-instrument-allocas"
! Enable hwasan instrumentation of dynamically sized stack\-allocated variables.
  This kind of instrumentation is enabled by default when using
  \&\fB\-fsanitize=hwaddress\fR and disabled by default when using
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of such variables use
  \&\fB\-\-param hwasan\-instrument\-allocas=0\fR, and to enable it use
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR.
! .IP \fBhwasan\-instrument\-reads\fR 4
  .IX Item "hwasan-instrument-reads"
  Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory reads use
  \&\fB\-\-param hwasan\-instrument\-reads=0\fR.
! .IP \fBhwasan\-instrument\-writes\fR 4
  .IX Item "hwasan-instrument-writes"
  Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
  default for both \fB\-fsanitize=hwaddress\fR and
  \&\fB\-fsanitize=kernel\-hwaddress\fR.
  To disable checking memory writes use
  \&\fB\-\-param hwasan\-instrument\-writes=0\fR.
! .IP \fBhwasan\-instrument\-mem\-intrinsics\fR 4
  .IX Item "hwasan-instrument-mem-intrinsics"
  Enable hwasan instrumentation of builtin functions.  Instrumentation of these
  builtin functions is enabled by default for both \fB\-fsanitize=hwaddress\fR
  and \fB\-fsanitize=kernel\-hwaddress\fR.
  To disable instrumentation of builtin functions use
  \&\fB\-\-param hwasan\-instrument\-mem\-intrinsics=0\fR.
! .IP \fBuse\-after\-scope\-direct\-emission\-threshold\fR 4
  .IX Item "use-after-scope-direct-emission-threshold"
  If the size of a local variable in bytes is smaller or equal to this
  number, directly poison (or unpoison) shadow memory instead of using
! run\-time callbacks.
! .IP \fBtsan\-distinguish\-volatile\fR 4
  .IX Item "tsan-distinguish-volatile"
  Emit special instrumentation for accesses to volatiles.
! .IP \fBtsan\-instrument\-func\-entry\-exit\fR 4
  .IX Item "tsan-instrument-func-entry-exit"
! Emit instrumentation calls to _\|\fB_tsan_func_entry()\fR and _\|\fB_tsan_func_exit()\fR.
! .IP \fBmax\-fsm\-thread\-path\-insns\fR 4
  .IX Item "max-fsm-thread-path-insns"
  Maximum number of instructions to copy when duplicating blocks on a
  finite state automaton jump thread path.
! .IP \fBthreader\-debug\fR 4
  .IX Item "threader-debug"
  threader\-debug=[none|all] Enables verbose dumping of the threader solver.
! .IP \fBparloops\-chunk\-size\fR 4
  .IX Item "parloops-chunk-size"
  Chunk size of omp schedule for loops parallelized by parloops.
! .IP \fBparloops\-schedule\fR 4
  .IX Item "parloops-schedule"
  Schedule type of omp schedule for loops parallelized by parloops (static,
  dynamic, guided, auto, runtime).
! .IP \fBparloops\-min\-per\-thread\fR 4
  .IX Item "parloops-min-per-thread"
  The minimum number of iterations per thread of an innermost parallelized
  loop for which the parallelized variant is preferred over the single threaded
  one.  Note that for a parallelized loop nest the
  minimum number of iterations of the outermost loop per thread is two.
! .IP \fBmax\-ssa\-name\-query\-depth\fR 4
  .IX Item "max-ssa-name-query-depth"
! Maximum depth of recursion when querying properties of SSA names in things
  like fold routines.  One level of recursion corresponds to following a
! use\-def chain.
! .IP \fBmax\-speculative\-devirt\-maydefs\fR 4
  .IX Item "max-speculative-devirt-maydefs"
! The maximum number of may\-defs we analyze when looking for a must\-def
  specifying the dynamic type of an object that invokes a virtual call
  we may be able to devirtualize speculatively.
! .IP \fBranger\-debug\fR 4
  .IX Item "ranger-debug"
  Specifies the type of debug output to be issued for ranges.
! .IP \fBunroll\-jam\-min\-percent\fR 4
  .IX Item "unroll-jam-min-percent"
  The minimum percentage of memory references that must be optimized
! away for the unroll\-and\-jam transformation to be considered profitable.
! .IP \fBunroll\-jam\-max\-unroll\fR 4
  .IX Item "unroll-jam-max-unroll"
  The maximum number of times the outer loop should be unrolled by
! the unroll\-and\-jam transformation.
! .IP \fBmax\-rtl\-if\-conversion\-unpredictable\-cost\fR 4
  .IX Item "max-rtl-if-conversion-unpredictable-cost"
  Maximum permissible cost for the sequence that would be generated
! by the RTL if\-conversion pass for a branch that is considered unpredictable.
! .IP \fBmax\-variable\-expansions\-in\-unroller\fR 4
  .IX Item "max-variable-expansions-in-unroller"
  If \fB\-fvariable\-expansion\-in\-unroller\fR is used, the maximum number
  of times that an individual variable will be expanded during loop unrolling.
! .IP \fBpartial\-inlining\-entry\-probability\fR 4
  .IX Item "partial-inlining-entry-probability"
! Maximum probability of the entry BB of split region
! (in percent relative to entry BB of the function)
  to make partial inlining happen.
! .IP \fBmax\-tracked\-strlens\fR 4
  .IX Item "max-tracked-strlens"
  Maximum number of strings for which strlen optimization pass will
  track string lengths.
! .IP \fBgcse\-after\-reload\-partial\-fraction\fR 4
  .IX Item "gcse-after-reload-partial-fraction"
  The threshold ratio for performing partial redundancy
  elimination after reload.
! .IP \fBgcse\-after\-reload\-critical\-fraction\fR 4
  .IX Item "gcse-after-reload-critical-fraction"
  The threshold ratio of critical edges execution count that
  permit performing redundancy elimination after reload.
! .IP \fBmax\-loop\-header\-insns\fR 4
  .IX Item "max-loop-header-insns"
  The maximum number of insns in loop header duplicated
  by the copy loop headers pass.
! .IP \fBvect\-epilogues\-nomask\fR 4
  .IX Item "vect-epilogues-nomask"
  Enable loop epilogue vectorization using smaller vector size.
! .IP \fBvect\-partial\-vector\-usage\fR 4
  .IX Item "vect-partial-vector-usage"
  Controls when the loop vectorizer considers using partial vector loads
  and stores as an alternative to falling back to scalar code.  0 stops
*************** partial vector loads and stores if vecto
*** 15768,16027 ****
  code to iterate.  2 allows partial vector loads and stores in all loops.
  The parameter only has an effect on targets that support partial
  vector loads and stores.
! .IP "\fBvect-inner-loop-cost-factor\fR" 4
  .IX Item "vect-inner-loop-cost-factor"
  The maximum factor which the loop vectorizer applies to the cost of statements
  in an inner loop relative to the loop being vectorized.  The factor applied
  is the maximum of the estimated number of iterations of the inner loop and
  this parameter.  The default value of this parameter is 50.
! .IP "\fBvect-induction-float\fR" 4
  .IX Item "vect-induction-float"
  Enable loop vectorization of floating point inductions.
! .IP "\fBvrp-sparse-threshold\fR" 4
  .IX Item "vrp-sparse-threshold"
! Maximum number of basic blocks before \s-1VRP\s0 uses a sparse bitmap cache.
! .IP "\fBvrp-switch-limit\fR" 4
  .IX Item "vrp-switch-limit"
! Maximum number of outgoing edges in a switch before \s-1VRP\s0 will not process it.
! .IP "\fBvrp-vector-threshold\fR" 4
  .IX Item "vrp-vector-threshold"
! Maximum number of basic blocks for \s-1VRP\s0 to use a basic cache vector.
! .IP "\fBavoid-fma-max-bits\fR" 4
  .IX Item "avoid-fma-max-bits"
  Maximum number of bits for which we avoid creating FMAs.
! .IP "\fBfully-pipelined-fma\fR" 4
  .IX Item "fully-pipelined-fma"
! Whether the target fully pipelines \s-1FMA\s0 instructions.  If non-zero,
! reassociation considers the benefit of parallelizing \s-1FMA\s0's multiplication
! part and addition part, assuming \s-1FMUL\s0 and \s-1FMA\s0 use the same units that can
! also do \s-1FADD.\s0
! .IP "\fBsms-loop-average-count-threshold\fR" 4
  .IX Item "sms-loop-average-count-threshold"
  A threshold on the average loop count considered by the swing modulo scheduler.
! .IP "\fBsms-dfa-history\fR" 4
  .IX Item "sms-dfa-history"
  The number of cycles the swing modulo scheduler considers when checking
! conflicts using \s-1DFA.\s0
! .IP "\fBgraphite-allow-codegen-errors\fR" 4
  .IX Item "graphite-allow-codegen-errors"
  Whether codegen errors should be ICEs when \fB\-fchecking\fR.
! .IP "\fBsms-max-ii-factor\fR" 4
  .IX Item "sms-max-ii-factor"
  A factor for tuning the upper bound that swing modulo scheduler
  uses for scheduling a loop.
! .IP "\fBlra-max-considered-reload-pseudos\fR" 4
  .IX Item "lra-max-considered-reload-pseudos"
  The max number of reload pseudos which are considered during
! spilling a non-reload pseudo.
! .IP "\fBmax-pow-sqrt-depth\fR" 4
  .IX Item "max-pow-sqrt-depth"
  Maximum depth of sqrt chains to use when synthesizing exponentiation
  by a real constant.
! .IP "\fBmax-dse-active-local-stores\fR" 4
  .IX Item "max-dse-active-local-stores"
! Maximum number of active local stores in \s-1RTL\s0 dead store elimination.
! .IP "\fBasan-instrument-allocas\fR" 4
  .IX Item "asan-instrument-allocas"
  Enable asan allocas/VLAs protection.
! .IP "\fBmax-iterations-computation-cost\fR" 4
  .IX Item "max-iterations-computation-cost"
  Bound on the cost of an expression to compute the number of iterations.
! .IP "\fBmax-isl-operations\fR" 4
  .IX Item "max-isl-operations"
  Maximum number of isl operations, 0 means unlimited.
! .IP "\fBgraphite-max-arrays-per-scop\fR" 4
  .IX Item "graphite-max-arrays-per-scop"
  Maximum number of arrays per scop.
! .IP "\fBmax-vartrack-reverse-op-size\fR" 4
  .IX Item "max-vartrack-reverse-op-size"
  Max. size of loc list for which reverse ops should be added.
! .IP "\fBfsm-scale-path-stmts\fR" 4
  .IX Item "fsm-scale-path-stmts"
  Scale factor to apply to the number of statements in a threading path
  crossing a loop backedge when comparing to
  \&\fB\-\-param=max\-jump\-thread\-duplication\-stmts\fR.
! .IP "\fBuninit-control-dep-attempts\fR" 4
  .IX Item "uninit-control-dep-attempts"
  Maximum number of nested calls to search for control dependencies
  during uninitialized variable analysis.
! .IP "\fBuninit-max-chain-len\fR" 4
  .IX Item "uninit-max-chain-len"
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
! .IP "\fBuninit-max-num-chains\fR" 4
  .IX Item "uninit-max-num-chains"
  Maximum number of predicates ored in the normalized predicate chain.
! .IP "\fBsched-autopref-queue-depth\fR" 4
  .IX Item "sched-autopref-queue-depth"
  Hardware autoprefetcher scheduler model control flag.
! Number of lookahead cycles the model looks into; at '
! \&' only enable instruction sorting heuristic.
! .IP "\fBloop-versioning-max-inner-insns\fR" 4
  .IX Item "loop-versioning-max-inner-insns"
  The maximum number of instructions that an inner loop can have
  before the loop versioning pass considers it too big to copy.
! .IP "\fBloop-versioning-max-outer-insns\fR" 4
  .IX Item "loop-versioning-max-outer-insns"
  The maximum number of instructions that an outer loop can have
  before the loop versioning pass considers it too big to copy,
  discounting any instructions in inner loops that directly benefit
  from versioning.
! .IP "\fBssa-name-def-chain-limit\fR" 4
  .IX Item "ssa-name-def-chain-limit"
! The maximum number of \s-1SSA_NAME\s0 assignments to follow in determining
  a property of a variable such as its value.  This limits the number
! of iterations or recursive calls \s-1GCC\s0 performs when optimizing certain
  statements or when determining their validity prior to issuing
  diagnostics.
! .IP "\fBstore-merging-max-size\fR" 4
  .IX Item "store-merging-max-size"
  Maximum size of a single store merging region in bytes.
! .IP "\fBhash-table-verification-limit\fR" 4
  .IX Item "hash-table-verification-limit"
  The number of elements for which hash table verification is done
  for each searched element.
! .IP "\fBmax-find-base-term-values\fR" 4
  .IX Item "max-find-base-term-values"
  Maximum number of VALUEs handled during a single find_base_term call.
! .IP "\fBanalyzer-max-enodes-per-program-point\fR" 4
  .IX Item "analyzer-max-enodes-per-program-point"
  The maximum number of exploded nodes per program point within
  the analyzer, before terminating analysis of that point.
! .IP "\fBanalyzer-max-constraints\fR" 4
  .IX Item "analyzer-max-constraints"
  The maximum number of constraints per state.
! .IP "\fBanalyzer-min-snodes-for-call-summary\fR" 4
  .IX Item "analyzer-min-snodes-for-call-summary"
  The minimum number of supernodes within a function for the
  analyzer to consider summarizing its effects at call sites.
! .IP "\fBanalyzer-max-enodes-for-full-dump\fR" 4
  .IX Item "analyzer-max-enodes-for-full-dump"
  The maximum depth of exploded nodes that should appear in a dot dump
  before switching to a less verbose format.
! .IP "\fBanalyzer-max-recursion-depth\fR" 4
  .IX Item "analyzer-max-recursion-depth"
  The maximum number of times a callsite can appear in a call stack
  within the analyzer, before terminating analysis of a call that would
  recurse deeper.
! .IP "\fBanalyzer-max-svalue-depth\fR" 4
  .IX Item "analyzer-max-svalue-depth"
  The maximum depth of a symbolic value, before approximating
  the value as unknown.
! .IP "\fBanalyzer-max-infeasible-edges\fR" 4
  .IX Item "analyzer-max-infeasible-edges"
  The maximum number of infeasible edges to reject before declaring
  a diagnostic as infeasible.
! .IP "\fBgimple-fe-computed-hot-bb-threshold\fR" 4
  .IX Item "gimple-fe-computed-hot-bb-threshold"
  The number of executions of a basic block which is considered hot.
! The parameter is used only in \s-1GIMPLE FE.\s0
! .IP "\fBanalyzer-bb-explosion-factor\fR" 4
  .IX Item "analyzer-bb-explosion-factor"
! The maximum number of 'after supernode' exploded nodes within the analyzer
  per supernode, before terminating analysis.
! .IP "\fBanalyzer-text-art-string-ellipsis-threshold\fR" 4
  .IX Item "analyzer-text-art-string-ellipsis-threshold"
  The number of bytes at which to ellipsize string literals in analyzer text art diagrams.
! .IP "\fBanalyzer-text-art-ideal-canvas-width\fR" 4
  .IX Item "analyzer-text-art-ideal-canvas-width"
  The ideal width in characters of text art diagrams generated by the analyzer.
! .IP "\fBanalyzer-text-art-string-ellipsis-head-len\fR" 4
  .IX Item "analyzer-text-art-string-ellipsis-head-len"
  The number of literal bytes to show at the head of a string literal in text art when ellipsizing it.
! .IP "\fBanalyzer-text-art-string-ellipsis-tail-len\fR" 4
  .IX Item "analyzer-text-art-string-ellipsis-tail-len"
  The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it.
! .IP "\fBranger-logical-depth\fR" 4
  .IX Item "ranger-logical-depth"
  Maximum depth of logical expression evaluation ranger will look through
  when evaluating outgoing edge ranges.
! .IP "\fBranger-recompute-depth\fR" 4
  .IX Item "ranger-recompute-depth"
  Maximum depth of instruction chains to consider for recomputation
  in the outgoing range calculator.
! .IP "\fBrelation-block-limit\fR" 4
  .IX Item "relation-block-limit"
  Maximum number of relations the oracle will register in a basic block.
! .IP "\fBmin-pagesize\fR" 4
  .IX Item "min-pagesize"
  Minimum page size for warning purposes.
! .IP "\fBopenacc-kernels\fR" 4
  .IX Item "openacc-kernels"
! Specify mode of OpenACC `kernels' constructs handling.
! With \fB\-\-param=openacc\-kernels=decompose\fR, OpenACC `kernels'
  constructs are decomposed into parts, a sequence of compute
  constructs, each then handled individually.
  This is work in progress.
! With \fB\-\-param=openacc\-kernels=parloops\fR, OpenACC `kernels'
  constructs are handled by the \fBparloops\fR pass, en bloc.
  This is the current default.
! .IP "\fBopenacc-privatization\fR" 4
  .IX Item "openacc-privatization"
  Control whether the \fB\-fopt\-info\-omp\-note\fR and applicable
  \&\fB\-fdump\-tree\-*\-details\fR options emit OpenACC privatization diagnostics.
! With \fB\-\-param=openacc\-privatization=quiet\fR, don't diagnose.
  This is the current default.
  With \fB\-\-param=openacc\-privatization=noisy\fR, do diagnose.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on AArch64 targets:
! .IP "\fBaarch64\-vect\-compare\-costs\fR" 4
  .IX Item "aarch64-vect-compare-costs"
  When vectorizing, consider using multiple different approaches and use
  the cost model to choose the cheapest one.  This includes:
  .RS 4
! .IP "*" 4
! Trying both \s-1SVE\s0 and Advanced \s-1SIMD,\s0 when \s-1SVE\s0 is available.
! .IP "*" 4
! Trying to use 64\-bit Advanced \s-1SIMD\s0 vectors for the smallest data elements,
  rather than using 128\-bit vectors for everything.
! .IP "*" 4
! Trying to use \*(L"unpacked\*(R" \s-1SVE\s0 vectors for smaller elements.  This includes
  storing smaller elements in larger containers and accessing elements with
  extending loads and truncating stores.
  .RE
  .RS 4
  .RE
! .IP "\fBaarch64\-float\-recp\-precision\fR" 4
  .IX Item "aarch64-float-recp-precision"
  The number of Newton iterations for calculating the reciprocal for float type.
  The precision of division is proportional to this param when division
  approximation is enabled.  The default value is 1.
! .IP "\fBaarch64\-double\-recp\-precision\fR" 4
  .IX Item "aarch64-double-recp-precision"
  The number of Newton iterations for calculating the reciprocal for double type.
  The precision of division is propotional to this param when division
  approximation is enabled.  The default value is 2.
! .IP "\fBaarch64\-autovec\-preference\fR" 4
  .IX Item "aarch64-autovec-preference"
! Force an \s-1ISA\s0 selection strategy for auto-vectorization.  Accepts values from
  0 to 4, inclusive.
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  Use the default heuristics.
! .IP "\fB1\fR" 4
  .IX Item "1"
! Use only Advanced \s-1SIMD\s0 for auto-vectorization.
! .IP "\fB2\fR" 4
  .IX Item "2"
! Use only \s-1SVE\s0 for auto-vectorization.
! .IP "\fB3\fR" 4
  .IX Item "3"
! Use both Advanced \s-1SIMD\s0 and \s-1SVE.\s0  Prefer Advanced \s-1SIMD\s0 when the costs are
  deemed equal.
! .IP "\fB4\fR" 4
  .IX Item "4"
! Use both Advanced \s-1SIMD\s0 and \s-1SVE.\s0  Prefer \s-1SVE\s0 when the costs are deemed equal.
  .RE
  .RS 4
  .Sp
  The default value is 0.
  .RE
! .IP "\fBaarch64\-ldp\-policy\fR" 4
  .IX Item "aarch64-ldp-policy"
! Fine-grained policy for load pairs.
  With \fB\-\-param=aarch64\-ldp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-ldp\-policy=always\fR, emit ldp regardless
--- 15701,15960 ----
  code to iterate.  2 allows partial vector loads and stores in all loops.
  The parameter only has an effect on targets that support partial
  vector loads and stores.
! .IP \fBvect\-inner\-loop\-cost\-factor\fR 4
  .IX Item "vect-inner-loop-cost-factor"
  The maximum factor which the loop vectorizer applies to the cost of statements
  in an inner loop relative to the loop being vectorized.  The factor applied
  is the maximum of the estimated number of iterations of the inner loop and
  this parameter.  The default value of this parameter is 50.
! .IP \fBvect\-induction\-float\fR 4
  .IX Item "vect-induction-float"
  Enable loop vectorization of floating point inductions.
! .IP \fBvrp\-sparse\-threshold\fR 4
  .IX Item "vrp-sparse-threshold"
! Maximum number of basic blocks before VRP uses a sparse bitmap cache.
! .IP \fBvrp\-switch\-limit\fR 4
  .IX Item "vrp-switch-limit"
! Maximum number of outgoing edges in a switch before VRP will not process it.
! .IP \fBvrp\-vector\-threshold\fR 4
  .IX Item "vrp-vector-threshold"
! Maximum number of basic blocks for VRP to use a basic cache vector.
! .IP \fBavoid\-fma\-max\-bits\fR 4
  .IX Item "avoid-fma-max-bits"
  Maximum number of bits for which we avoid creating FMAs.
! .IP \fBfully\-pipelined\-fma\fR 4
  .IX Item "fully-pipelined-fma"
! Whether the target fully pipelines FMA instructions.  If non\-zero,
! reassociation considers the benefit of parallelizing FMA\*(Aqs multiplication
! part and addition part, assuming FMUL and FMA use the same units that can
! also do FADD.
! .IP \fBsms\-loop\-average\-count\-threshold\fR 4
  .IX Item "sms-loop-average-count-threshold"
  A threshold on the average loop count considered by the swing modulo scheduler.
! .IP \fBsms\-dfa\-history\fR 4
  .IX Item "sms-dfa-history"
  The number of cycles the swing modulo scheduler considers when checking
! conflicts using DFA.
! .IP \fBgraphite\-allow\-codegen\-errors\fR 4
  .IX Item "graphite-allow-codegen-errors"
  Whether codegen errors should be ICEs when \fB\-fchecking\fR.
! .IP \fBsms\-max\-ii\-factor\fR 4
  .IX Item "sms-max-ii-factor"
  A factor for tuning the upper bound that swing modulo scheduler
  uses for scheduling a loop.
! .IP \fBlra\-max\-considered\-reload\-pseudos\fR 4
  .IX Item "lra-max-considered-reload-pseudos"
  The max number of reload pseudos which are considered during
! spilling a non\-reload pseudo.
! .IP \fBmax\-pow\-sqrt\-depth\fR 4
  .IX Item "max-pow-sqrt-depth"
  Maximum depth of sqrt chains to use when synthesizing exponentiation
  by a real constant.
! .IP \fBmax\-dse\-active\-local\-stores\fR 4
  .IX Item "max-dse-active-local-stores"
! Maximum number of active local stores in RTL dead store elimination.
! .IP \fBasan\-instrument\-allocas\fR 4
  .IX Item "asan-instrument-allocas"
  Enable asan allocas/VLAs protection.
! .IP \fBmax\-iterations\-computation\-cost\fR 4
  .IX Item "max-iterations-computation-cost"
  Bound on the cost of an expression to compute the number of iterations.
! .IP \fBmax\-isl\-operations\fR 4
  .IX Item "max-isl-operations"
  Maximum number of isl operations, 0 means unlimited.
! .IP \fBgraphite\-max\-arrays\-per\-scop\fR 4
  .IX Item "graphite-max-arrays-per-scop"
  Maximum number of arrays per scop.
! .IP \fBmax\-vartrack\-reverse\-op\-size\fR 4
  .IX Item "max-vartrack-reverse-op-size"
  Max. size of loc list for which reverse ops should be added.
! .IP \fBfsm\-scale\-path\-stmts\fR 4
  .IX Item "fsm-scale-path-stmts"
  Scale factor to apply to the number of statements in a threading path
  crossing a loop backedge when comparing to
  \&\fB\-\-param=max\-jump\-thread\-duplication\-stmts\fR.
! .IP \fBuninit\-control\-dep\-attempts\fR 4
  .IX Item "uninit-control-dep-attempts"
  Maximum number of nested calls to search for control dependencies
  during uninitialized variable analysis.
! .IP \fBuninit\-max\-chain\-len\fR 4
  .IX Item "uninit-max-chain-len"
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
! .IP \fBuninit\-max\-num\-chains\fR 4
  .IX Item "uninit-max-num-chains"
  Maximum number of predicates ored in the normalized predicate chain.
! .IP \fBsched\-autopref\-queue\-depth\fR 4
  .IX Item "sched-autopref-queue-depth"
  Hardware autoprefetcher scheduler model control flag.
! Number of lookahead cycles the model looks into; at \*(Aq
! \&\*(Aq only enable instruction sorting heuristic.
! .IP \fBloop\-versioning\-max\-inner\-insns\fR 4
  .IX Item "loop-versioning-max-inner-insns"
  The maximum number of instructions that an inner loop can have
  before the loop versioning pass considers it too big to copy.
! .IP \fBloop\-versioning\-max\-outer\-insns\fR 4
  .IX Item "loop-versioning-max-outer-insns"
  The maximum number of instructions that an outer loop can have
  before the loop versioning pass considers it too big to copy,
  discounting any instructions in inner loops that directly benefit
  from versioning.
! .IP \fBssa\-name\-def\-chain\-limit\fR 4
  .IX Item "ssa-name-def-chain-limit"
! The maximum number of SSA_NAME assignments to follow in determining
  a property of a variable such as its value.  This limits the number
! of iterations or recursive calls GCC performs when optimizing certain
  statements or when determining their validity prior to issuing
  diagnostics.
! .IP \fBstore\-merging\-max\-size\fR 4
  .IX Item "store-merging-max-size"
  Maximum size of a single store merging region in bytes.
! .IP \fBhash\-table\-verification\-limit\fR 4
  .IX Item "hash-table-verification-limit"
  The number of elements for which hash table verification is done
  for each searched element.
! .IP \fBmax\-find\-base\-term\-values\fR 4
  .IX Item "max-find-base-term-values"
  Maximum number of VALUEs handled during a single find_base_term call.
! .IP \fBanalyzer\-max\-enodes\-per\-program\-point\fR 4
  .IX Item "analyzer-max-enodes-per-program-point"
  The maximum number of exploded nodes per program point within
  the analyzer, before terminating analysis of that point.
! .IP \fBanalyzer\-max\-constraints\fR 4
  .IX Item "analyzer-max-constraints"
  The maximum number of constraints per state.
! .IP \fBanalyzer\-min\-snodes\-for\-call\-summary\fR 4
  .IX Item "analyzer-min-snodes-for-call-summary"
  The minimum number of supernodes within a function for the
  analyzer to consider summarizing its effects at call sites.
! .IP \fBanalyzer\-max\-enodes\-for\-full\-dump\fR 4
  .IX Item "analyzer-max-enodes-for-full-dump"
  The maximum depth of exploded nodes that should appear in a dot dump
  before switching to a less verbose format.
! .IP \fBanalyzer\-max\-recursion\-depth\fR 4
  .IX Item "analyzer-max-recursion-depth"
  The maximum number of times a callsite can appear in a call stack
  within the analyzer, before terminating analysis of a call that would
  recurse deeper.
! .IP \fBanalyzer\-max\-svalue\-depth\fR 4
  .IX Item "analyzer-max-svalue-depth"
  The maximum depth of a symbolic value, before approximating
  the value as unknown.
! .IP \fBanalyzer\-max\-infeasible\-edges\fR 4
  .IX Item "analyzer-max-infeasible-edges"
  The maximum number of infeasible edges to reject before declaring
  a diagnostic as infeasible.
! .IP \fBgimple\-fe\-computed\-hot\-bb\-threshold\fR 4
  .IX Item "gimple-fe-computed-hot-bb-threshold"
  The number of executions of a basic block which is considered hot.
! The parameter is used only in GIMPLE FE.
! .IP \fBanalyzer\-bb\-explosion\-factor\fR 4
  .IX Item "analyzer-bb-explosion-factor"
! The maximum number of \*(Aqafter supernode\*(Aq exploded nodes within the analyzer
  per supernode, before terminating analysis.
! .IP \fBanalyzer\-text\-art\-string\-ellipsis\-threshold\fR 4
  .IX Item "analyzer-text-art-string-ellipsis-threshold"
  The number of bytes at which to ellipsize string literals in analyzer text art diagrams.
! .IP \fBanalyzer\-text\-art\-ideal\-canvas\-width\fR 4
  .IX Item "analyzer-text-art-ideal-canvas-width"
  The ideal width in characters of text art diagrams generated by the analyzer.
! .IP \fBanalyzer\-text\-art\-string\-ellipsis\-head\-len\fR 4
  .IX Item "analyzer-text-art-string-ellipsis-head-len"
  The number of literal bytes to show at the head of a string literal in text art when ellipsizing it.
! .IP \fBanalyzer\-text\-art\-string\-ellipsis\-tail\-len\fR 4
  .IX Item "analyzer-text-art-string-ellipsis-tail-len"
  The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it.
! .IP \fBranger\-logical\-depth\fR 4
  .IX Item "ranger-logical-depth"
  Maximum depth of logical expression evaluation ranger will look through
  when evaluating outgoing edge ranges.
! .IP \fBranger\-recompute\-depth\fR 4
  .IX Item "ranger-recompute-depth"
  Maximum depth of instruction chains to consider for recomputation
  in the outgoing range calculator.
! .IP \fBrelation\-block\-limit\fR 4
  .IX Item "relation-block-limit"
  Maximum number of relations the oracle will register in a basic block.
! .IP \fBmin\-pagesize\fR 4
  .IX Item "min-pagesize"
  Minimum page size for warning purposes.
! .IP \fBopenacc\-kernels\fR 4
  .IX Item "openacc-kernels"
! Specify mode of OpenACC \`kernels\*(Aq constructs handling.
! With \fB\-\-param=openacc\-kernels=decompose\fR, OpenACC \`kernels\*(Aq
  constructs are decomposed into parts, a sequence of compute
  constructs, each then handled individually.
  This is work in progress.
! With \fB\-\-param=openacc\-kernels=parloops\fR, OpenACC \`kernels\*(Aq
  constructs are handled by the \fBparloops\fR pass, en bloc.
  This is the current default.
! .IP \fBopenacc\-privatization\fR 4
  .IX Item "openacc-privatization"
  Control whether the \fB\-fopt\-info\-omp\-note\fR and applicable
  \&\fB\-fdump\-tree\-*\-details\fR options emit OpenACC privatization diagnostics.
! With \fB\-\-param=openacc\-privatization=quiet\fR, don\*(Aqt diagnose.
  This is the current default.
  With \fB\-\-param=openacc\-privatization=noisy\fR, do diagnose.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on AArch64 targets:
! .IP \fBaarch64\-vect\-compare\-costs\fR 4
  .IX Item "aarch64-vect-compare-costs"
  When vectorizing, consider using multiple different approaches and use
  the cost model to choose the cheapest one.  This includes:
  .RS 4
! .IP * 4
! Trying both SVE and Advanced SIMD, when SVE is available.
! .IP * 4
! Trying to use 64\-bit Advanced SIMD vectors for the smallest data elements,
  rather than using 128\-bit vectors for everything.
! .IP * 4
! Trying to use "unpacked" SVE vectors for smaller elements.  This includes
  storing smaller elements in larger containers and accessing elements with
  extending loads and truncating stores.
  .RE
  .RS 4
  .RE
! .IP \fBaarch64\-float\-recp\-precision\fR 4
  .IX Item "aarch64-float-recp-precision"
  The number of Newton iterations for calculating the reciprocal for float type.
  The precision of division is proportional to this param when division
  approximation is enabled.  The default value is 1.
! .IP \fBaarch64\-double\-recp\-precision\fR 4
  .IX Item "aarch64-double-recp-precision"
  The number of Newton iterations for calculating the reciprocal for double type.
  The precision of division is propotional to this param when division
  approximation is enabled.  The default value is 2.
! .IP \fBaarch64\-autovec\-preference\fR 4
  .IX Item "aarch64-autovec-preference"
! Force an ISA selection strategy for auto\-vectorization.  Accepts values from
  0 to 4, inclusive.
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  Use the default heuristics.
! .IP \fB1\fR 4
  .IX Item "1"
! Use only Advanced SIMD for auto\-vectorization.
! .IP \fB2\fR 4
  .IX Item "2"
! Use only SVE for auto\-vectorization.
! .IP \fB3\fR 4
  .IX Item "3"
! Use both Advanced SIMD and SVE.  Prefer Advanced SIMD when the costs are
  deemed equal.
! .IP \fB4\fR 4
  .IX Item "4"
! Use both Advanced SIMD and SVE.  Prefer SVE when the costs are deemed equal.
  .RE
  .RS 4
  .Sp
  The default value is 0.
  .RE
! .IP \fBaarch64\-ldp\-policy\fR 4
  .IX Item "aarch64-ldp-policy"
! Fine\-grained policy for load pairs.
  With \fB\-\-param=aarch64\-ldp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-ldp\-policy=always\fR, emit ldp regardless
*************** of alignment.
*** 16029,16037 ****
  With \fB\-\-param=aarch64\-ldp\-policy=never\fR, do not emit ldp.
  With \fB\-\-param=aarch64\-ldp\-policy=aligned\fR, emit ldp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP "\fBaarch64\-stp\-policy\fR" 4
  .IX Item "aarch64-stp-policy"
! Fine-grained policy for store pairs.
  With \fB\-\-param=aarch64\-stp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-stp\-policy=always\fR, emit stp regardless
--- 15962,15970 ----
  With \fB\-\-param=aarch64\-ldp\-policy=never\fR, do not emit ldp.
  With \fB\-\-param=aarch64\-ldp\-policy=aligned\fR, emit ldp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP \fBaarch64\-stp\-policy\fR 4
  .IX Item "aarch64-stp-policy"
! Fine\-grained policy for store pairs.
  With \fB\-\-param=aarch64\-stp\-policy=default\fR, use the policy of the
  tuning structure.  This is the current default.
  With \fB\-\-param=aarch64\-stp\-policy=always\fR, emit stp regardless
*************** of alignment.
*** 16039,16051 ****
  With \fB\-\-param=aarch64\-stp\-policy=never\fR, do not emit stp.
  With \fB\-\-param=aarch64\-stp\-policy=aligned\fR, emit stp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP "\fBaarch64\-ldp\-alias\-check\-limit\fR" 4
  .IX Item "aarch64-ldp-alias-check-limit"
  Limit on the number of alias checks performed by the AArch64 load/store pair
  fusion pass when attempting to form an ldp/stp.  Higher values make the pass
! more aggressive at re-ordering loads over stores, at the expense of increased
  compile time.
! .IP "\fBaarch64\-ldp\-writeback\fR" 4
  .IX Item "aarch64-ldp-writeback"
  Param to control which writeback opportunities we try to handle in the AArch64
  load/store pair fusion pass.  A value of zero disables writeback handling.  One
--- 15972,15984 ----
  With \fB\-\-param=aarch64\-stp\-policy=never\fR, do not emit stp.
  With \fB\-\-param=aarch64\-stp\-policy=aligned\fR, emit stp only if the
  source pointer is aligned to at least double the alignment of the type.
! .IP \fBaarch64\-ldp\-alias\-check\-limit\fR 4
  .IX Item "aarch64-ldp-alias-check-limit"
  Limit on the number of alias checks performed by the AArch64 load/store pair
  fusion pass when attempting to form an ldp/stp.  Higher values make the pass
! more aggressive at re\-ordering loads over stores, at the expense of increased
  compile time.
! .IP \fBaarch64\-ldp\-writeback\fR 4
  .IX Item "aarch64-ldp-writeback"
  Param to control which writeback opportunities we try to handle in the AArch64
  load/store pair fusion pass.  A value of zero disables writeback handling.  One
*************** means we try to form pairs involving one
*** 16053,16111 ****
  accesses where possible.  A value of two means we also try to opportunistically
  form writeback opportunities by folding in trailing destructive updates of the
  base register used by a pair.
! .IP "\fBaarch64\-loop\-vect\-issue\-rate\-niters\fR" 4
  .IX Item "aarch64-loop-vect-issue-rate-niters"
  The tuning for some AArch64 CPUs tries to take both latencies and issue
  rates into account when deciding whether a loop should be vectorized
! using \s-1SVE,\s0 vectorized using Advanced \s-1SIMD,\s0 or not vectorized at all.
! If this parameter is set to \fIn\fR, \s-1GCC\s0 will not use this heuristic
  for loops that are known to execute in fewer than \fIn\fR Advanced
! \&\s-1SIMD\s0 iterations.
! .IP "\fBaarch64\-vect\-unroll\-limit\fR" 4
  .IX Item "aarch64-vect-unroll-limit"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set's the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .RE
  .RS 4
  .Sp
! The following choices of \fIname\fR are available on \s-1GCN\s0 targets:
! .IP "\fBgcn-preferred-vectorization-factor\fR" 4
  .IX Item "gcn-preferred-vectorization-factor"
  Preferred vectorization factor: \fBdefault\fR, \fB32\fR, \fB64\fR.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on i386 and x86_64 targets:
! .IP "\fBx86\-stlf\-window\-ninsns\fR" 4
  .IX Item "x86-stlf-window-ninsns"
! Instructions number above which \s-1STFL\s0 stall penalty can be compensated.
! .IP "\fBx86\-stv\-max\-visits\fR" 4
  .IX Item "x86-stv-max-visits"
! The maximum number of use and def visits when discovering a \s-1STV\s0 chain before
  the discovery is aborted.
  .RE
  .RS 4
  .RE
  .SS "Program Instrumentation Options"
  .IX Subsection "Program Instrumentation Options"
! \&\s-1GCC\s0 supports a number of command-line options that control adding
! run-time instrumentation to the code it normally generates.  
  For example, one purpose of instrumentation is collect profiling
  statistics for use in finding program hot spots, code coverage
! analysis, or profile-guided optimizations.
! Another class of program instrumentation is adding run-time checking 
  to detect programming errors like invalid pointer
! dereferences or out-of-bounds array accesses, as well as deliberately
! hostile attacks such as stack smashing or \*(C+ vtable hijacking.
  There is also a general hook which can be used to implement other
! forms of tracing or function-level instrumentation for debug or
  program analysis purposes.
! .IP "\fB\-p\fR" 4
  .IX Item "-p"
  .PD 0
! .IP "\fB\-pg\fR" 4
  .IX Item "-pg"
  .PD
  Generate extra code to write profile information suitable for the
--- 15986,16044 ----
  accesses where possible.  A value of two means we also try to opportunistically
  form writeback opportunities by folding in trailing destructive updates of the
  base register used by a pair.
! .IP \fBaarch64\-loop\-vect\-issue\-rate\-niters\fR 4
  .IX Item "aarch64-loop-vect-issue-rate-niters"
  The tuning for some AArch64 CPUs tries to take both latencies and issue
  rates into account when deciding whether a loop should be vectorized
! using SVE, vectorized using Advanced SIMD, or not vectorized at all.
! If this parameter is set to \fIn\fR, GCC will not use this heuristic
  for loops that are known to execute in fewer than \fIn\fR Advanced
! SIMD iterations.
! .IP \fBaarch64\-vect\-unroll\-limit\fR 4
  .IX Item "aarch64-vect-unroll-limit"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set\*(Aqs the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .RE
  .RS 4
  .Sp
! The following choices of \fIname\fR are available on GCN targets:
! .IP \fBgcn\-preferred\-vectorization\-factor\fR 4
  .IX Item "gcn-preferred-vectorization-factor"
  Preferred vectorization factor: \fBdefault\fR, \fB32\fR, \fB64\fR.
  .RE
  .RS 4
  .Sp
  The following choices of \fIname\fR are available on i386 and x86_64 targets:
! .IP \fBx86\-stlf\-window\-ninsns\fR 4
  .IX Item "x86-stlf-window-ninsns"
! Instructions number above which STFL stall penalty can be compensated.
! .IP \fBx86\-stv\-max\-visits\fR 4
  .IX Item "x86-stv-max-visits"
! The maximum number of use and def visits when discovering a STV chain before
  the discovery is aborted.
  .RE
  .RS 4
  .RE
  .SS "Program Instrumentation Options"
  .IX Subsection "Program Instrumentation Options"
! GCC supports a number of command\-line options that control adding
! run\-time instrumentation to the code it normally generates.  
  For example, one purpose of instrumentation is collect profiling
  statistics for use in finding program hot spots, code coverage
! analysis, or profile\-guided optimizations.
! Another class of program instrumentation is adding run\-time checking 
  to detect programming errors like invalid pointer
! dereferences or out\-of\-bounds array accesses, as well as deliberately
! hostile attacks such as stack smashing or C++ vtable hijacking.
  There is also a general hook which can be used to implement other
! forms of tracing or function\-level instrumentation for debug or
  program analysis purposes.
! .IP \fB\-p\fR 4
  .IX Item "-p"
  .PD 0
! .IP \fB\-pg\fR 4
  .IX Item "-pg"
  .PD
  Generate extra code to write profile information suitable for the
*************** linking.
*** 16116,16135 ****
  .Sp
  You can use the function attribute \f(CW\*(C`no_instrument_function\*(C'\fR to
  suppress profiling of individual functions when compiling with these options.
! .IP "\fB\-fprofile\-arcs\fR" 4
  .IX Item "-fprofile-arcs"
  Add code so that program flow \fIarcs\fR are instrumented.  During
  execution the program records how many times each branch and call is
  executed and how many times it is taken or returns.  On targets that support
  constructors with priority support, profiling properly handles constructors,
! destructors and \*(C+ constructors (and destructors) of classes which are used
  as a type of a global variable.
  .Sp
  When the compiled
  program exits it saves this data to a file called
! \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
! profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
! test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
  \&\fIauxname\fR is generated from the name of the output file, if
  explicitly specified and it is not the final executable, otherwise it is
  the basename of the source file.  In both cases any suffix is removed
--- 16049,16068 ----
  .Sp
  You can use the function attribute \f(CW\*(C`no_instrument_function\*(C'\fR to
  suppress profiling of individual functions when compiling with these options.
! .IP \fB\-fprofile\-arcs\fR 4
  .IX Item "-fprofile-arcs"
  Add code so that program flow \fIarcs\fR are instrumented.  During
  execution the program records how many times each branch and call is
  executed and how many times it is taken or returns.  On targets that support
  constructors with priority support, profiling properly handles constructors,
! destructors and C++ constructors (and destructors) of classes which are used
  as a type of a global variable.
  .Sp
  When the compiled
  program exits it saves this data to a file called
! \&\fIauxname.gcda\fR for each source file.  The data may be used for
! profile\-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
! test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file\*(Aqs
  \&\fIauxname\fR is generated from the name of the output file, if
  explicitly specified and it is not the final executable, otherwise it is
  the basename of the source file.  In both cases any suffix is removed
*************** Note that if a command line directly lin
*** 16140,16195 ****
  \&\fI.gcda\fR files will be prefixed with the unsuffixed name of the output file.
  E.g. \f(CW\*(C`gcc a.c b.c \-o binary\*(C'\fR would generate \fIbinary\-a.gcda\fR and
  \&\fIbinary\-b.gcda\fR files.
! .IP "\fB\-fcondition\-coverage\fR" 4
  .IX Item "-fcondition-coverage"
  Add code so that program conditions are instrumented.  During execution the
  program records what terms in a conditional contributes to a decision, which
  can be used to verify that all terms in a Boolean function are tested and have
  an independent effect on the outcome of a decision.  The result can be read
  with \f(CW\*(C`gcov \-\-conditions\*(C'\fR.
! .IP "\fB\-\-coverage\fR" 4
  .IX Item "--coverage"
  This option is used to compile and link code instrumented for coverage
  analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
  \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
  linking).  See the documentation for those options for more details.
  .RS 4
! .IP "*" 4
  Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
  and code generation options.  For test coverage analysis, use the
  additional \fB\-ftest\-coverage\fR option.  You do not need to profile
  every source file in a program.
! .IP "*" 4
  Compile the source files additionally with \fB\-fprofile\-abs\-path\fR
  to create absolute path names in the \fI.gcno\fR files.  This allows
  \&\fBgcov\fR to find the correct sources in projects where compilations
  occur with different working directories.
! .IP "*" 4
  Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
  (the latter implies the former).
! .IP "*" 4
  Run the program on a representative workload to generate the arc profile
  information.  This may be repeated any number of times.  You can run
  concurrent instances of your program, and provided that the file system
  supports locking, the data files will be correctly updated.  Unless
! a strict \s-1ISO C\s0 dialect option is in effect, \f(CW\*(C`fork\*(C'\fR calls are
  detected and correctly handled without double counting.
  .Sp
  Moreover, an object file can be recompiled multiple times
  and the corresponding \fI.gcda\fR file merges as long as
  the source file and the compiler options are unchanged.
! .IP "*" 4
! For profile-directed optimizations, compile the source files again with
  the same optimization and code generation options plus
  \&\fB\-fbranch\-probabilities\fR.
! .IP "*" 4
  For test coverage analysis, use \fBgcov\fR to produce human readable
  information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
  \&\fBgcov\fR documentation for further information.
  .RE
  .RS 4
  .Sp
! With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
  creates a program flow graph, then finds a spanning tree for the graph.
  Only arcs that are not on the spanning tree have to be instrumented: the
  compiler adds code to count the number of times that these arcs are
--- 16073,16128 ----
  \&\fI.gcda\fR files will be prefixed with the unsuffixed name of the output file.
  E.g. \f(CW\*(C`gcc a.c b.c \-o binary\*(C'\fR would generate \fIbinary\-a.gcda\fR and
  \&\fIbinary\-b.gcda\fR files.
! .IP \fB\-fcondition\-coverage\fR 4
  .IX Item "-fcondition-coverage"
  Add code so that program conditions are instrumented.  During execution the
  program records what terms in a conditional contributes to a decision, which
  can be used to verify that all terms in a Boolean function are tested and have
  an independent effect on the outcome of a decision.  The result can be read
  with \f(CW\*(C`gcov \-\-conditions\*(C'\fR.
! .IP \fB\-\-coverage\fR 4
  .IX Item "--coverage"
  This option is used to compile and link code instrumented for coverage
  analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
  \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
  linking).  See the documentation for those options for more details.
  .RS 4
! .IP * 4
  Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
  and code generation options.  For test coverage analysis, use the
  additional \fB\-ftest\-coverage\fR option.  You do not need to profile
  every source file in a program.
! .IP * 4
  Compile the source files additionally with \fB\-fprofile\-abs\-path\fR
  to create absolute path names in the \fI.gcno\fR files.  This allows
  \&\fBgcov\fR to find the correct sources in projects where compilations
  occur with different working directories.
! .IP * 4
  Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
  (the latter implies the former).
! .IP * 4
  Run the program on a representative workload to generate the arc profile
  information.  This may be repeated any number of times.  You can run
  concurrent instances of your program, and provided that the file system
  supports locking, the data files will be correctly updated.  Unless
! a strict ISO C dialect option is in effect, \f(CW\*(C`fork\*(C'\fR calls are
  detected and correctly handled without double counting.
  .Sp
  Moreover, an object file can be recompiled multiple times
  and the corresponding \fI.gcda\fR file merges as long as
  the source file and the compiler options are unchanged.
! .IP * 4
! For profile\-directed optimizations, compile the source files again with
  the same optimization and code generation options plus
  \&\fB\-fbranch\-probabilities\fR.
! .IP * 4
  For test coverage analysis, use \fBgcov\fR to produce human readable
  information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
  \&\fBgcov\fR documentation for further information.
  .RE
  .RS 4
  .Sp
! With \fB\-fprofile\-arcs\fR, for each function of your program GCC
  creates a program flow graph, then finds a spanning tree for the graph.
  Only arcs that are not on the spanning tree have to be instrumented: the
  compiler adds code to count the number of times that these arcs are
*************** executed.  When an arc is the only exit
*** 16197,16252 ****
  instrumentation code can be added to the block; otherwise, a new basic
  block must be created to hold the instrumentation code.
  .Sp
! With \fB\-fcondition\-coverage\fR, for each conditional in your program \s-1GCC\s0
  creates a bitset and records the exercised boolean values that have an
  independent effect on the outcome of that expression.
  .RE
! .IP "\fB\-ftest\-coverage\fR" 4
  .IX Item "-ftest-coverage"
! Produce a notes file that the \fBgcov\fR code-coverage utility can use to
! show program coverage.  Each source file's note file is called
! \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
  above for a description of \fIauxname\fR and instructions on how to
  generate test coverage data.  Coverage data matches the source files
  more closely if you do not optimize.
! .IP "\fB\-fprofile\-abs\-path\fR" 4
  .IX Item "-fprofile-abs-path"
  Automatically convert relative source file names to absolute path names
  in the \fI.gcno\fR files.  This allows \fBgcov\fR to find the correct
  sources in projects where compilations occur with different working
  directories.
! .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
  .IX Item "-fprofile-dir=path"
  Set the directory to search for the profile data files in to \fIpath\fR.
  This option affects only the profile data generated by
  \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
  and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
  and its related options.  Both absolute and relative paths can be used.
! By default, \s-1GCC\s0 uses the current directory as \fIpath\fR, thus the
  profile data file appears in the same directory as the object file.
  In order to prevent the file name clashing, if the object file name is
  not an absolute path, we mangle the absolute path of the
! \&\fI\fIsourcename\fI.gcda\fR file and use it as the file name of a
  \&\fI.gcda\fR file.  See details about the file naming in \fB\-fprofile\-arcs\fR.
  See similar option \fB\-fprofile\-note\fR.
  .Sp
  When an executable is run in a massive parallel environment, it is recommended
  to save profile to different folders.  That can be done with variables
! in \fIpath\fR that are exported during run-time:
  .RS 4
! .IP "\fB\f(CB%p\fB\fR" 4
  .IX Item "%p"
! process \s-1ID.\s0
! .IP "\fB\f(CB%q\fB{\s-1VAR\s0}\fR" 4
  .IX Item "%q{VAR}"
! value of environment variable \fI\s-1VAR\s0\fR
  .RE
  .RS 4
  .RE
! .IP "\fB\-fprofile\-generate\fR" 4
  .IX Item "-fprofile-generate"
  .PD 0
! .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
  .IX Item "-fprofile-generate=path"
  .PD
  Enable options usually used for instrumenting application to produce
--- 16130,16187 ----
  instrumentation code can be added to the block; otherwise, a new basic
  block must be created to hold the instrumentation code.
  .Sp
! With \fB\-fcondition\-coverage\fR, for each conditional in your program GCC
  creates a bitset and records the exercised boolean values that have an
  independent effect on the outcome of that expression.
  .RE
! .IP \fB\-ftest\-coverage\fR 4
  .IX Item "-ftest-coverage"
! Produce a notes file that the \fBgcov\fR code\-coverage utility can use to
! show program coverage.  Each source file\*(Aqs note file is called
! \&\fIauxname.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
  above for a description of \fIauxname\fR and instructions on how to
  generate test coverage data.  Coverage data matches the source files
  more closely if you do not optimize.
! .IP \fB\-fprofile\-abs\-path\fR 4
  .IX Item "-fprofile-abs-path"
  Automatically convert relative source file names to absolute path names
  in the \fI.gcno\fR files.  This allows \fBgcov\fR to find the correct
  sources in projects where compilations occur with different working
  directories.
! .IP \fB\-fprofile\-dir=\fR\fIpath\fR 4
  .IX Item "-fprofile-dir=path"
  Set the directory to search for the profile data files in to \fIpath\fR.
  This option affects only the profile data generated by
  \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
  and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
  and its related options.  Both absolute and relative paths can be used.
! By default, GCC uses the current directory as \fIpath\fR, thus the
  profile data file appears in the same directory as the object file.
  In order to prevent the file name clashing, if the object file name is
  not an absolute path, we mangle the absolute path of the
! \&\fIsourcename.gcda\fR file and use it as the file name of a
  \&\fI.gcda\fR file.  See details about the file naming in \fB\-fprofile\-arcs\fR.
  See similar option \fB\-fprofile\-note\fR.
  .Sp
  When an executable is run in a massive parallel environment, it is recommended
  to save profile to different folders.  That can be done with variables
! in \fIpath\fR that are exported during run\-time:
  .RS 4
! .ie n .IP \fR\fB%p\fR\fB\fR 4
! .el .IP \fR\f(CB%p\fR\fB\fR 4
  .IX Item "%p"
! process ID.
! .ie n .IP \fR\fB%q\fR\fB{VAR}\fR 4
! .el .IP \fR\f(CB%q\fR\fB{VAR}\fR 4
  .IX Item "%q{VAR}"
! value of environment variable \fIVAR\fR
  .RE
  .RS 4
  .RE
! .IP \fB\-fprofile\-generate\fR 4
  .IX Item "-fprofile-generate"
  .PD 0
! .IP \fB\-fprofile\-generate=\fR\fIpath\fR 4
  .IX Item "-fprofile-generate=path"
  .PD
  Enable options usually used for instrumenting application to produce
*************** The following options are enabled:
*** 16258,16272 ****
  \&\fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR,
  \&\fB\-finline\-functions\fR, and \fB\-fipa\-bit\-cp\fR.
  .Sp
! If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
  .Sp
  To optimize the program based on the collected profile information, use
  \&\fB\-fprofile\-use\fR.
! .IP "\fB\-fprofile\-info\-section\fR" 4
  .IX Item "-fprofile-info-section"
  .PD 0
! .IP "\fB\-fprofile\-info\-section=\fR\fIname\fR" 4
  .IX Item "-fprofile-info-section=name"
  .PD
  Register the profile information in the specified section instead of using a
--- 16193,16207 ----
  \&\fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR,
  \&\fB\-finline\-functions\fR, and \fB\-fipa\-bit\-cp\fR.
  .Sp
! If \fIpath\fR is specified, GCC looks at the \fIpath\fR to find
  the profile feedback data files. See \fB\-fprofile\-dir\fR.
  .Sp
  To optimize the program based on the collected profile information, use
  \&\fB\-fprofile\-use\fR.
! .IP \fB\-fprofile\-info\-section\fR 4
  .IX Item "-fprofile-info-section"
  .PD 0
! .IP \fB\-fprofile\-info\-section=\fR\fIname\fR 4
  .IX Item "-fprofile-info-section=name"
  .PD
  Register the profile information in the specified section instead of using a
*************** environments (for example embedded syste
*** 16281,16287 ****
  support constructors/destructors or the C library file I/O.
  .Sp
  The linker could collect the input sections in a continuous memory block and
! define start and end symbols.  A \s-1GNU\s0 linker script example which defines a
  linker output section follows:
  .Sp
  .Vb 6
--- 16216,16222 ----
  support constructors/destructors or the C library file I/O.
  .Sp
  The linker could collect the input sections in a continuous memory block and
! define start and end symbols.  A GNU linker script example which defines a
  linker output section follows:
  .Sp
  .Vb 6
*************** for example like this:
*** 16351,16370 ****
  \&        }
  .Ve
  .Sp
! The \fBmerge-stream\fR subcommand of \fBgcov-tool\fR may be used to
  deserialize the data stream generated by the \f(CW\*(C`_\|_gcov_filename_to_gcfn\*(C'\fR and
  \&\f(CW\*(C`_\|_gcov_info_to_gcda\*(C'\fR functions and merge the profile information into
  \&\fI.gcda\fR files on the host filesystem.
! .IP "\fB\-fprofile\-note=\fR\fIpath\fR" 4
  .IX Item "-fprofile-note=path"
! If \fIpath\fR is specified, \s-1GCC\s0 saves \fI.gcno\fR file into \fIpath\fR
  location.  If you combine the option with multiple source files,
  the \fI.gcno\fR file will be overwritten.
! .IP "\fB\-fprofile\-prefix\-path=\fR\fIpath\fR" 4
  .IX Item "-fprofile-prefix-path=path"
  This option can be used in combination with
  \&\fBprofile\-generate=\fR\fIprofile_dir\fR and
! \&\fBprofile\-use=\fR\fIprofile_dir\fR to inform \s-1GCC\s0 where is the base
  directory of built source tree.  By default \fIprofile_dir\fR will contain
  files with mangled absolute paths of all object files in the built project.
  This is not desirable when directory used to build the instrumented binary
--- 16286,16305 ----
  \&        }
  .Ve
  .Sp
! The \fBmerge\-stream\fR subcommand of \fBgcov\-tool\fR may be used to
  deserialize the data stream generated by the \f(CW\*(C`_\|_gcov_filename_to_gcfn\*(C'\fR and
  \&\f(CW\*(C`_\|_gcov_info_to_gcda\*(C'\fR functions and merge the profile information into
  \&\fI.gcda\fR files on the host filesystem.
! .IP \fB\-fprofile\-note=\fR\fIpath\fR 4
  .IX Item "-fprofile-note=path"
! If \fIpath\fR is specified, GCC saves \fI.gcno\fR file into \fIpath\fR
  location.  If you combine the option with multiple source files,
  the \fI.gcno\fR file will be overwritten.
! .IP \fB\-fprofile\-prefix\-path=\fR\fIpath\fR 4
  .IX Item "-fprofile-prefix-path=path"
  This option can be used in combination with
  \&\fBprofile\-generate=\fR\fIprofile_dir\fR and
! \&\fBprofile\-use=\fR\fIprofile_dir\fR to inform GCC where is the base
  directory of built source tree.  By default \fIprofile_dir\fR will contain
  files with mangled absolute paths of all object files in the built project.
  This is not desirable when directory used to build the instrumented binary
*************** feedback because the profile data will n
*** 16373,16410 ****
  In such setups \fB\-fprofile\-prefix\-path=\fR\fIpath\fR with \fIpath\fR
  pointing to the base directory of the build can be used to strip the irrelevant
  part of the path and keep all file names relative to the main build directory.
! .IP "\fB\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fprofile-prefix-map=old=new"
! When compiling files residing in directory \fI\fIold\fI\fR, record
  profiling information (with \fB\-\-coverage\fR)
  describing them as if the files resided in
! directory \fI\fInew\fI\fR instead.
  See also \fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fprofile\-update=\fR\fImethod\fR" 4
  .IX Item "-fprofile-update=method"
  Alter the update method for an application instrumented for profile
  feedback based optimization.  The \fImethod\fR argument should be one of
! \&\fBsingle\fR, \fBatomic\fR or \fBprefer-atomic\fR.
! The first one is useful for single-threaded applications,
! while the second one prevents profile corruption by emitting thread-safe code.
  .Sp
  \&\fBWarning:\fR When an application does not properly join all threads
  (or creates an detached thread), a profile file can be still corrupted.
  .Sp
! Using \fBprefer-atomic\fR would be transformed either to \fBatomic\fR,
! when supported by a target, or to \fBsingle\fR otherwise.  The \s-1GCC\s0 driver
! automatically selects \fBprefer-atomic\fR when \fB\-pthread\fR
  is present in the command line, otherwise the default method is \fBsingle\fR.
  .Sp
  If \fBatomic\fR is selected, then the profile information is updated using
! atomic operations on a best-effort basis.  Ideally, the profile information is
  updated through atomic operations in hardware.  If the target platform does not
  support the required atomic operations in hardware, however, \fIlibatomic\fR
  is available, then the profile information is updated through calls to
  \&\fIlibatomic\fR.  If the target platform neither supports the required atomic
  operations in hardware nor \fIlibatomic\fR, then the profile information is
  not atomically updated and a warning is issued.  In this case, the obtained
! profiling information may be corrupt for multi-threaded applications.
  .Sp
  For performance reasons, if 64\-bit counters are used for the profiling
  information and the target platform only supports 32\-bit atomic operations in
--- 16308,16345 ----
  In such setups \fB\-fprofile\-prefix\-path=\fR\fIpath\fR with \fIpath\fR
  pointing to the base directory of the build can be used to strip the irrelevant
  part of the path and keep all file names relative to the main build directory.
! .IP \fB\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fprofile-prefix-map=old=new"
! When compiling files residing in directory \fIold\fR, record
  profiling information (with \fB\-\-coverage\fR)
  describing them as if the files resided in
! directory \fInew\fR instead.
  See also \fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fprofile\-update=\fR\fImethod\fR 4
  .IX Item "-fprofile-update=method"
  Alter the update method for an application instrumented for profile
  feedback based optimization.  The \fImethod\fR argument should be one of
! \&\fBsingle\fR, \fBatomic\fR or \fBprefer\-atomic\fR.
! The first one is useful for single\-threaded applications,
! while the second one prevents profile corruption by emitting thread\-safe code.
  .Sp
  \&\fBWarning:\fR When an application does not properly join all threads
  (or creates an detached thread), a profile file can be still corrupted.
  .Sp
! Using \fBprefer\-atomic\fR would be transformed either to \fBatomic\fR,
! when supported by a target, or to \fBsingle\fR otherwise.  The GCC driver
! automatically selects \fBprefer\-atomic\fR when \fB\-pthread\fR
  is present in the command line, otherwise the default method is \fBsingle\fR.
  .Sp
  If \fBatomic\fR is selected, then the profile information is updated using
! atomic operations on a best\-effort basis.  Ideally, the profile information is
  updated through atomic operations in hardware.  If the target platform does not
  support the required atomic operations in hardware, however, \fIlibatomic\fR
  is available, then the profile information is updated through calls to
  \&\fIlibatomic\fR.  If the target platform neither supports the required atomic
  operations in hardware nor \fIlibatomic\fR, then the profile information is
  not atomically updated and a warning is issued.  In this case, the obtained
! profiling information may be corrupt for multi\-threaded applications.
  .Sp
  For performance reasons, if 64\-bit counters are used for the profiling
  information and the target platform only supports 32\-bit atomic operations in
*************** hardware, then the performance critical
*** 16412,16432 ****
  32\-bit atomic operations for each counter update.  If a signal interrupts these
  two operations updating a counter, then the profiling information may be in an
  inconsistent state.
! .IP "\fB\-fprofile\-filter\-files=\fR\fIregex\fR" 4
  .IX Item "-fprofile-filter-files=regex"
  Instrument only functions from files whose name matches
! any of the regular expressions (separated by semi-colons).
  .Sp
  For example, \fB\-fprofile\-filter\-files=main\e.c;module.*\e.c\fR will instrument
! only \fImain.c\fR and all C files starting with 'module'.
! .IP "\fB\-fprofile\-exclude\-files=\fR\fIregex\fR" 4
  .IX Item "-fprofile-exclude-files=regex"
  Instrument only functions from files whose name does not match
! any of the regular expressions (separated by semi-colons).
  .Sp
  For example, \fB\-fprofile\-exclude\-files=/usr/.*\fR will prevent instrumentation
  of all files that are located in the \fI/usr/\fR folder.
! .IP "\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel-runs\fR|\fBserial\fR]" 4
  .IX Item "-fprofile-reproducible=[multithreaded|parallel-runs|serial]"
  Control level of reproducibility of profile gathered by
  \&\f(CW\*(C`\-fprofile\-generate\*(C'\fR.  This makes it possible to rebuild program
--- 16347,16367 ----
  32\-bit atomic operations for each counter update.  If a signal interrupts these
  two operations updating a counter, then the profiling information may be in an
  inconsistent state.
! .IP \fB\-fprofile\-filter\-files=\fR\fIregex\fR 4
  .IX Item "-fprofile-filter-files=regex"
  Instrument only functions from files whose name matches
! any of the regular expressions (separated by semi\-colons).
  .Sp
  For example, \fB\-fprofile\-filter\-files=main\e.c;module.*\e.c\fR will instrument
! only \fImain.c\fR and all C files starting with \*(Aqmodule\*(Aq.
! .IP \fB\-fprofile\-exclude\-files=\fR\fIregex\fR 4
  .IX Item "-fprofile-exclude-files=regex"
  Instrument only functions from files whose name does not match
! any of the regular expressions (separated by semi\-colons).
  .Sp
  For example, \fB\-fprofile\-exclude\-files=/usr/.*\fR will prevent instrumentation
  of all files that are located in the \fI/usr/\fR folder.
! .IP \fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] 4
  .IX Item "-fprofile-reproducible=[multithreaded|parallel-runs|serial]"
  Control level of reproducibility of profile gathered by
  \&\f(CW\*(C`\-fprofile\-generate\*(C'\fR.  This makes it possible to rebuild program
*************** packages.
*** 16436,16450 ****
  With \fB\-fprofile\-reproducible=serial\fR the profile gathered by
  \&\fB\-fprofile\-generate\fR is reproducible provided the trained program
  behaves the same at each invocation of the train run, it is not
! multi-threaded and profile data streaming is always done in the same
  order.  Note that profile streaming happens at the end of program run but
  also before \f(CW\*(C`fork\*(C'\fR function is invoked.
  .Sp
  Note that it is quite common that execution counts of some part of
  programs depends, for example, on length of temporary file names or
! memory space randomization (that may affect hash-table collision rate).
! Such non-reproducible part of programs may be annotated by
! \&\f(CW\*(C`no_instrument_function\*(C'\fR function attribute. \fBgcov-dump\fR with
  \&\fB\-l\fR can be used to dump gathered data and verify that they are
  indeed reproducible.
  .Sp
--- 16371,16385 ----
  With \fB\-fprofile\-reproducible=serial\fR the profile gathered by
  \&\fB\-fprofile\-generate\fR is reproducible provided the trained program
  behaves the same at each invocation of the train run, it is not
! multi\-threaded and profile data streaming is always done in the same
  order.  Note that profile streaming happens at the end of program run but
  also before \f(CW\*(C`fork\*(C'\fR function is invoked.
  .Sp
  Note that it is quite common that execution counts of some part of
  programs depends, for example, on length of temporary file names or
! memory space randomization (that may affect hash\-table collision rate).
! Such non\-reproducible part of programs may be annotated by
! \&\f(CW\*(C`no_instrument_function\*(C'\fR function attribute. \fBgcov\-dump\fR with
  \&\fB\-l\fR can be used to dump gathered data and verify that they are
  indeed reproducible.
  .Sp
*************** gcda files.  This setting makes it possi
*** 16454,16468 ****
  instrumented program in parallel (such as with \f(CW\*(C`make \-j\*(C'\fR). This
  reduces quality of gathered data, in particular of indirect call
  profiling.
! .IP "\fB\-fsanitize=address\fR" 4
  .IX Item "-fsanitize=address"
  Enable AddressSanitizer, a fast memory error detector.
  Memory access instructions are instrumented to detect
! out-of-bounds and use-after-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> for
! more details.  The run-time behavior can be influenced using the
! \&\fB\s-1ASAN_OPTIONS\s0\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
--- 16389,16403 ----
  instrumented program in parallel (such as with \f(CW\*(C`make \-j\*(C'\fR). This
  reduces quality of gathered data, in particular of indirect call
  profiling.
! .IP \fB\-fsanitize=address\fR 4
  .IX Item "-fsanitize=address"
  Enable AddressSanitizer, a fast memory error detector.
  Memory access instructions are instrumented to detect
! out\-of\-bounds and use\-after\-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> for
! more details.  The run\-time behavior can be influenced using the
! \&\fBASAN_OPTIONS\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
*************** most function inlining), \fB\-fno\-optim
*** 16478,16508 ****
  optimizing sibling and tail recursive calls; this option is implicit for
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR), or \fB\-fno\-ipa\-icf\fR (which
  disables Identical Code Folding for functions).  Since multiple runs of the
! program may yield backtraces with different addresses due to \s-1ASLR\s0 (Address
! Space Layout Randomization), it may be desirable to turn \s-1ASLR\s0 off.  On Linux,
! this can be achieved with \fBsetarch `uname \-m` \-R ./prog\fR.
! .IP "\fB\-fsanitize=kernel\-address\fR" 4
  .IX Item "-fsanitize=kernel-address"
  Enable AddressSanitizer for Linux kernel.
  See <\fBhttps://github.com/google/kernel\-sanitizers\fR> for more details.
! .IP "\fB\-fsanitize=hwaddress\fR" 4
  .IX Item "-fsanitize=hwaddress"
! Enable Hardware-assisted AddressSanitizer, which uses a hardware ability to
  ignore the top byte of a pointer to allow the detection of memory errors with
  a low memory overhead.
! Memory access instructions are instrumented to detect out-of-bounds and
! use-after-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See
  <\fBhttps://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html\fR>
! for more details.  The run-time behavior can be influenced using the
! \&\fB\s-1HWASAN_OPTIONS\s0\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
  \&\fB\-fsanitize=address\fR, and is currently only available on AArch64.
! .IP "\fB\-fsanitize=kernel\-hwaddress\fR" 4
  .IX Item "-fsanitize=kernel-hwaddress"
! Enable Hardware-assisted AddressSanitizer for compilation of the Linux kernel.
  Similar to \fB\-fsanitize=kernel\-address\fR but using an alternate
  instrumentation method, and similar to \fB\-fsanitize=hwaddress\fR but with
  instrumentation differences necessary for compiling the Linux kernel.
--- 16413,16443 ----
  optimizing sibling and tail recursive calls; this option is implicit for
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR), or \fB\-fno\-ipa\-icf\fR (which
  disables Identical Code Folding for functions).  Since multiple runs of the
! program may yield backtraces with different addresses due to ASLR (Address
! Space Layout Randomization), it may be desirable to turn ASLR off.  On Linux,
! this can be achieved with \fBsetarch \`uname \-m\` \-R ./prog\fR.
! .IP \fB\-fsanitize=kernel\-address\fR 4
  .IX Item "-fsanitize=kernel-address"
  Enable AddressSanitizer for Linux kernel.
  See <\fBhttps://github.com/google/kernel\-sanitizers\fR> for more details.
! .IP \fB\-fsanitize=hwaddress\fR 4
  .IX Item "-fsanitize=hwaddress"
! Enable Hardware\-assisted AddressSanitizer, which uses a hardware ability to
  ignore the top byte of a pointer to allow the detection of memory errors with
  a low memory overhead.
! Memory access instructions are instrumented to detect out\-of\-bounds and
! use\-after\-free bugs.
  The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
  See
  <\fBhttps://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html\fR>
! for more details.  The run\-time behavior can be influenced using the
! \&\fBHWASAN_OPTIONS\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
  the available options are shown at startup of the instrumented program.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
  \&\fB\-fsanitize=address\fR, and is currently only available on AArch64.
! .IP \fB\-fsanitize=kernel\-hwaddress\fR 4
  .IX Item "-fsanitize=kernel-hwaddress"
! Enable Hardware\-assisted AddressSanitizer for compilation of the Linux kernel.
  Similar to \fB\-fsanitize=kernel\-address\fR but using an alternate
  instrumentation method, and similar to \fB\-fsanitize=hwaddress\fR but with
  instrumentation differences necessary for compiling the Linux kernel.
*************** account for the stack pointer having a d
*** 16511,16521 ****
  .Sp
  \&\fINote:\fR This option has different defaults to the \fB\-fsanitize=hwaddress\fR.
  Instrumenting the stack and alloca calls are not on by default but are still
! possible by specifying the command-line options
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR and
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR respectively. Using a random frame
  tag is not implemented for kernel instrumentation.
! .IP "\fB\-fsanitize=pointer\-compare\fR" 4
  .IX Item "-fsanitize=pointer-compare"
  Instrument comparison operation (<, <=, >, >=) with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
--- 16446,16456 ----
  .Sp
  \&\fINote:\fR This option has different defaults to the \fB\-fsanitize=hwaddress\fR.
  Instrumenting the stack and alloca calls are not on by default but are still
! possible by specifying the command\-line options
  \&\fB\-\-param hwasan\-instrument\-stack=1\fR and
  \&\fB\-\-param hwasan\-instrument\-allocas=1\fR respectively. Using a random frame
  tag is not implemented for kernel instrumentation.
! .IP \fB\-fsanitize=pointer\-compare\fR 4
  .IX Item "-fsanitize=pointer-compare"
  Instrument comparison operation (<, <=, >, >=) with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
*************** The option must be combined with either
*** 16523,16531 ****
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fB\s-1ASAN_OPTIONS\s0\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non-null.
! .IP "\fB\-fsanitize=pointer\-subtract\fR" 4
  .IX Item "-fsanitize=pointer-subtract"
  Instrument subtraction with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
--- 16458,16466 ----
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fBASAN_OPTIONS\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non\-null.
! .IP \fB\-fsanitize=pointer\-subtract\fR 4
  .IX Item "-fsanitize=pointer-subtract"
  Instrument subtraction with pointer operands.
  The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
*************** The option must be combined with either
*** 16533,16555 ****
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fB\s-1ASAN_OPTIONS\s0\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non-null.
! .IP "\fB\-fsanitize=shadow\-call\-stack\fR" 4
  .IX Item "-fsanitize=shadow-call-stack"
  Enable ShadowCallStack, a security enhancement mechanism used to protect
  programs against return address overwrites (e.g. stack buffer overflows.)
! It works by saving a function's return address to a separately allocated
  shadow call stack in the function prologue and restoring the return address
  from the shadow call stack in the function epilogue.  Instrumentation only
  occurs in functions that need to save the return address to the stack.
  .Sp
  Currently it only supports the aarch64 platform.  It is specifically
! designed for linux kernels that enable the \s-1CONFIG_SHADOW_CALL_STACK\s0 option.
  For the user space programs, runtime support is not currently provided
  in libc and libgcc.  Users who want to use this feature in user space need
  to provide their own support for the runtime.  It should be noted that
! this may cause the \s-1ABI\s0 rules to be broken.
  .Sp
  On aarch64, the instrumentation makes use of the platform register \f(CW\*(C`x18\*(C'\fR.
  This generally means that any code that may run on the same thread as code
--- 16468,16490 ----
  The option cannot be combined with \fB\-fsanitize=thread\fR.
  Note: By default the check is disabled at run time.  To enable it,
  add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
! \&\fBASAN_OPTIONS\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
! invalid operation only when both pointers are non\-null.
! .IP \fB\-fsanitize=shadow\-call\-stack\fR 4
  .IX Item "-fsanitize=shadow-call-stack"
  Enable ShadowCallStack, a security enhancement mechanism used to protect
  programs against return address overwrites (e.g. stack buffer overflows.)
! It works by saving a function\*(Aqs return address to a separately allocated
  shadow call stack in the function prologue and restoring the return address
  from the shadow call stack in the function epilogue.  Instrumentation only
  occurs in functions that need to save the return address to the stack.
  .Sp
  Currently it only supports the aarch64 platform.  It is specifically
! designed for linux kernels that enable the CONFIG_SHADOW_CALL_STACK option.
  For the user space programs, runtime support is not currently provided
  in libc and libgcc.  Users who want to use this feature in user space need
  to provide their own support for the runtime.  It should be noted that
! this may cause the ABI rules to be broken.
  .Sp
  On aarch64, the instrumentation makes use of the platform register \f(CW\*(C`x18\*(C'\fR.
  This generally means that any code that may run on the same thread as code
*************** to turn off exceptions.
*** 16564,16575 ****
  .Sp
  See <\fBhttps://clang.llvm.org/docs/ShadowCallStack.html\fR> for more
  details.
! .IP "\fB\-fsanitize=thread\fR" 4
  .IX Item "-fsanitize=thread"
  Enable ThreadSanitizer, a fast data race detector.
  Memory access instructions are instrumented to detect
  data race bugs.  See <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> for more
! details. The run-time behavior can be influenced using the \fB\s-1TSAN_OPTIONS\s0\fR
  environment variable; see
  <\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> for a list of
  supported options.
--- 16499,16510 ----
  .Sp
  See <\fBhttps://clang.llvm.org/docs/ShadowCallStack.html\fR> for more
  details.
! .IP \fB\-fsanitize=thread\fR 4
  .IX Item "-fsanitize=thread"
  Enable ThreadSanitizer, a fast data race detector.
  Memory access instructions are instrumented to detect
  data race bugs.  See <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> for more
! details. The run\-time behavior can be influenced using the \fBTSAN_OPTIONS\fR
  environment variable; see
  <\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> for a list of
  supported options.
*************** The option cannot be combined with \fB\-
*** 16577,16645 ****
  \&\fB\-fsanitize=leak\fR.
  .Sp
  Note that sanitized atomic builtins cannot throw exceptions when
! operating on invalid memory addresses with non-call exceptions
  (\fB\-fnon\-call\-exceptions\fR).
! .IP "\fB\-fsanitize=leak\fR" 4
  .IX Item "-fsanitize=leak"
  Enable LeakSanitizer, a memory leak detector.
  This option only matters for linking of executables.
  The executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
  and other allocator functions.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> for more
! details.  The run-time behavior can be influenced using the
! \&\fB\s-1LSAN_OPTIONS\s0\fR environment variable.
  The option cannot be combined with \fB\-fsanitize=thread\fR.
! .IP "\fB\-fsanitize=undefined\fR" 4
  .IX Item "-fsanitize=undefined"
  Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
  Various computations are instrumented to detect undefined behavior
! at runtime.  See <\fBhttps://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html\fR> for more details.   The run-time behavior can be influenced using the
! \&\fB\s-1UBSAN_OPTIONS\s0\fR environment variable.  Current suboptions are:
  .RS 4
! .IP "\fB\-fsanitize=shift\fR" 4
  .IX Item "-fsanitize=shift"
  This option enables checking that the result of a shift operation is
  not undefined.  Note that what exactly is considered undefined differs
! slightly between C and \*(C+, as well as between \s-1ISO C90\s0 and C99, etc.
  This option has two suboptions, \fB\-fsanitize=shift\-base\fR and
  \&\fB\-fsanitize=shift\-exponent\fR.
! .IP "\fB\-fsanitize=shift\-exponent\fR" 4
  .IX Item "-fsanitize=shift-exponent"
  This option enables checking that the second argument of a shift operation
  is not negative and is smaller than the precision of the promoted first
  argument.
! .IP "\fB\-fsanitize=shift\-base\fR" 4
  .IX Item "-fsanitize=shift-base"
  If the second argument of a shift operation is within range, check that the
  result of a shift operation is not undefined.  Note that what exactly is
! considered undefined differs slightly between C and \*(C+, as well as between
! \&\s-1ISO C90\s0 and C99, etc.
! .IP "\fB\-fsanitize=integer\-divide\-by\-zero\fR" 4
  .IX Item "-fsanitize=integer-divide-by-zero"
  Detect integer division by zero.
! .IP "\fB\-fsanitize=unreachable\fR" 4
  .IX Item "-fsanitize=unreachable"
  With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
  call into a diagnostics message call instead.  When reaching the
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
! .IP "\fB\-fsanitize=vla\-bound\fR" 4
  .IX Item "-fsanitize=vla-bound"
  This option instructs the compiler to check that the size of a variable
  length array is positive.
! .IP "\fB\-fsanitize=null\fR" 4
  .IX Item "-fsanitize=null"
  This option enables pointer checking.  Particularly, the application
  built with this option turned on will issue an error message when it
! tries to dereference a \s-1NULL\s0 pointer, or if a reference (possibly an
! rvalue reference) is bound to a \s-1NULL\s0 pointer, or if a method is invoked
! on an object pointed by a \s-1NULL\s0 pointer.
! .IP "\fB\-fsanitize=return\fR" 4
  .IX Item "-fsanitize=return"
  This option enables return statement checking.  Programs
  built with this option turned on will issue an error message
! when the end of a non-void function is reached without actually
! returning a value.  This option works in \*(C+ only.
! .IP "\fB\-fsanitize=signed\-integer\-overflow\fR" 4
  .IX Item "-fsanitize=signed-integer-overflow"
  This option enables signed integer overflow checking.  We check that
  the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
--- 16512,16580 ----
  \&\fB\-fsanitize=leak\fR.
  .Sp
  Note that sanitized atomic builtins cannot throw exceptions when
! operating on invalid memory addresses with non\-call exceptions
  (\fB\-fnon\-call\-exceptions\fR).
! .IP \fB\-fsanitize=leak\fR 4
  .IX Item "-fsanitize=leak"
  Enable LeakSanitizer, a memory leak detector.
  This option only matters for linking of executables.
  The executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
  and other allocator functions.  See
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> for more
! details.  The run\-time behavior can be influenced using the
! \&\fBLSAN_OPTIONS\fR environment variable.
  The option cannot be combined with \fB\-fsanitize=thread\fR.
! .IP \fB\-fsanitize=undefined\fR 4
  .IX Item "-fsanitize=undefined"
  Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
  Various computations are instrumented to detect undefined behavior
! at runtime.  See <\fBhttps://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html\fR> for more details.   The run\-time behavior can be influenced using the
! \&\fBUBSAN_OPTIONS\fR environment variable.  Current suboptions are:
  .RS 4
! .IP \fB\-fsanitize=shift\fR 4
  .IX Item "-fsanitize=shift"
  This option enables checking that the result of a shift operation is
  not undefined.  Note that what exactly is considered undefined differs
! slightly between C and C++, as well as between ISO C90 and C99, etc.
  This option has two suboptions, \fB\-fsanitize=shift\-base\fR and
  \&\fB\-fsanitize=shift\-exponent\fR.
! .IP \fB\-fsanitize=shift\-exponent\fR 4
  .IX Item "-fsanitize=shift-exponent"
  This option enables checking that the second argument of a shift operation
  is not negative and is smaller than the precision of the promoted first
  argument.
! .IP \fB\-fsanitize=shift\-base\fR 4
  .IX Item "-fsanitize=shift-base"
  If the second argument of a shift operation is within range, check that the
  result of a shift operation is not undefined.  Note that what exactly is
! considered undefined differs slightly between C and C++, as well as between
! ISO C90 and C99, etc.
! .IP \fB\-fsanitize=integer\-divide\-by\-zero\fR 4
  .IX Item "-fsanitize=integer-divide-by-zero"
  Detect integer division by zero.
! .IP \fB\-fsanitize=unreachable\fR 4
  .IX Item "-fsanitize=unreachable"
  With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
  call into a diagnostics message call instead.  When reaching the
  \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
! .IP \fB\-fsanitize=vla\-bound\fR 4
  .IX Item "-fsanitize=vla-bound"
  This option instructs the compiler to check that the size of a variable
  length array is positive.
! .IP \fB\-fsanitize=null\fR 4
  .IX Item "-fsanitize=null"
  This option enables pointer checking.  Particularly, the application
  built with this option turned on will issue an error message when it
! tries to dereference a NULL pointer, or if a reference (possibly an
! rvalue reference) is bound to a NULL pointer, or if a method is invoked
! on an object pointed by a NULL pointer.
! .IP \fB\-fsanitize=return\fR 4
  .IX Item "-fsanitize=return"
  This option enables return statement checking.  Programs
  built with this option turned on will issue an error message
! when the end of a non\-void function is reached without actually
! returning a value.  This option works in C++ only.
! .IP \fB\-fsanitize=signed\-integer\-overflow\fR 4
  .IX Item "-fsanitize=signed-integer-overflow"
  This option enables signed integer overflow checking.  We check that
  the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
*************** overflow:
*** 16652,16726 ****
  \&        signed char a = SCHAR_MAX;
  \&        a++;
  .Ve
! .IP "\fB\-fsanitize=bounds\fR" 4
  .IX Item "-fsanitize=bounds"
  This option enables instrumentation of array bounds.  Various out of bounds
! accesses are detected.  Flexible array members, flexible array member-like
  arrays, and initializers of variables with static storage are not
! instrumented, with the exception of flexible array member-like arrays
  for which \f(CW\*(C`\-fstrict\-flex\-arrays\*(C'\fR or \f(CW\*(C`\-fstrict\-flex\-arrays=\*(C'\fR
! options or \f(CW\*(C`strict_flex_array\*(C'\fR attributes say they shouldn't be treated
! like flexible array member-like arrays.
! .IP "\fB\-fsanitize=bounds\-strict\fR" 4
  .IX Item "-fsanitize=bounds-strict"
  This option enables strict instrumentation of array bounds.  Most out of bounds
! accesses are detected, including flexible array member-like arrays.
  Initializers of variables with static storage are not instrumented.
! .IP "\fB\-fsanitize=alignment\fR" 4
  .IX Item "-fsanitize=alignment"
  This option enables checking of alignment of pointers when they are
  dereferenced, or when a reference is bound to insufficiently aligned target,
  or when a method or constructor is invoked on insufficiently aligned object.
! .IP "\fB\-fsanitize=object\-size\fR" 4
  .IX Item "-fsanitize=object-size"
  This option enables instrumentation of memory references using the
  \&\f(CW\*(C`_\|_builtin_dynamic_object_size\*(C'\fR function.  Various out of bounds
  pointer accesses are detected.
! .IP "\fB\-fsanitize=float\-divide\-by\-zero\fR" 4
  .IX Item "-fsanitize=float-divide-by-zero"
! Detect floating-point division by zero.  Unlike other similar options,
  \&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
! \&\fB\-fsanitize=undefined\fR, since floating-point division by zero can
  be a legitimate way of obtaining infinities and NaNs.
! .IP "\fB\-fsanitize=float\-cast\-overflow\fR" 4
  .IX Item "-fsanitize=float-cast-overflow"
! This option enables floating-point type to integer conversion checking.
  We check that the result of the conversion does not overflow.
  Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
  not enabled by \fB\-fsanitize=undefined\fR.
  This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
! .IP "\fB\-fsanitize=nonnull\-attribute\fR" 4
  .IX Item "-fsanitize=nonnull-attribute"
  This option enables instrumentation of calls, checking whether null values
! are not passed to arguments marked as requiring a non-null value by the
  \&\f(CW\*(C`nonnull\*(C'\fR function attribute.
! .IP "\fB\-fsanitize=returns\-nonnull\-attribute\fR" 4
  .IX Item "-fsanitize=returns-nonnull-attribute"
  This option enables instrumentation of return statements in functions
  marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
  of null values from such functions.
! .IP "\fB\-fsanitize=bool\fR" 4
  .IX Item "-fsanitize=bool"
  This option enables instrumentation of loads from bool.  If a value other
! than 0/1 is loaded, a run-time error is issued.
! .IP "\fB\-fsanitize=enum\fR" 4
  .IX Item "-fsanitize=enum"
  This option enables instrumentation of loads from an enum type.  If
  a value outside the range of values for the enum type is loaded,
! a run-time error is issued.
! .IP "\fB\-fsanitize=vptr\fR" 4
  .IX Item "-fsanitize=vptr"
! This option enables instrumentation of \*(C+ member function calls, member
  accesses and some conversions between pointers to base and derived classes,
  to verify the referenced object has the correct dynamic type.
! .IP "\fB\-fsanitize=pointer\-overflow\fR" 4
  .IX Item "-fsanitize=pointer-overflow"
  This option enables instrumentation of pointer arithmetics.  If the pointer
! arithmetics overflows, a run-time error is issued.
! .IP "\fB\-fsanitize=builtin\fR" 4
  .IX Item "-fsanitize=builtin"
  This option enables instrumentation of arguments to selected builtin
! functions.  If an invalid value is passed to such arguments, a run-time
  error is issued.  E.g. passing 0 as the argument to \f(CW\*(C`_\|_builtin_ctz\*(C'\fR
  or \f(CW\*(C`_\|_builtin_clz\*(C'\fR invokes undefined behavior and is diagnosed
  by this option.
--- 16587,16661 ----
  \&        signed char a = SCHAR_MAX;
  \&        a++;
  .Ve
! .IP \fB\-fsanitize=bounds\fR 4
  .IX Item "-fsanitize=bounds"
  This option enables instrumentation of array bounds.  Various out of bounds
! accesses are detected.  Flexible array members, flexible array member\-like
  arrays, and initializers of variables with static storage are not
! instrumented, with the exception of flexible array member\-like arrays
  for which \f(CW\*(C`\-fstrict\-flex\-arrays\*(C'\fR or \f(CW\*(C`\-fstrict\-flex\-arrays=\*(C'\fR
! options or \f(CW\*(C`strict_flex_array\*(C'\fR attributes say they shouldn\*(Aqt be treated
! like flexible array member\-like arrays.
! .IP \fB\-fsanitize=bounds\-strict\fR 4
  .IX Item "-fsanitize=bounds-strict"
  This option enables strict instrumentation of array bounds.  Most out of bounds
! accesses are detected, including flexible array member\-like arrays.
  Initializers of variables with static storage are not instrumented.
! .IP \fB\-fsanitize=alignment\fR 4
  .IX Item "-fsanitize=alignment"
  This option enables checking of alignment of pointers when they are
  dereferenced, or when a reference is bound to insufficiently aligned target,
  or when a method or constructor is invoked on insufficiently aligned object.
! .IP \fB\-fsanitize=object\-size\fR 4
  .IX Item "-fsanitize=object-size"
  This option enables instrumentation of memory references using the
  \&\f(CW\*(C`_\|_builtin_dynamic_object_size\*(C'\fR function.  Various out of bounds
  pointer accesses are detected.
! .IP \fB\-fsanitize=float\-divide\-by\-zero\fR 4
  .IX Item "-fsanitize=float-divide-by-zero"
! Detect floating\-point division by zero.  Unlike other similar options,
  \&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
! \&\fB\-fsanitize=undefined\fR, since floating\-point division by zero can
  be a legitimate way of obtaining infinities and NaNs.
! .IP \fB\-fsanitize=float\-cast\-overflow\fR 4
  .IX Item "-fsanitize=float-cast-overflow"
! This option enables floating\-point type to integer conversion checking.
  We check that the result of the conversion does not overflow.
  Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
  not enabled by \fB\-fsanitize=undefined\fR.
  This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
! .IP \fB\-fsanitize=nonnull\-attribute\fR 4
  .IX Item "-fsanitize=nonnull-attribute"
  This option enables instrumentation of calls, checking whether null values
! are not passed to arguments marked as requiring a non\-null value by the
  \&\f(CW\*(C`nonnull\*(C'\fR function attribute.
! .IP \fB\-fsanitize=returns\-nonnull\-attribute\fR 4
  .IX Item "-fsanitize=returns-nonnull-attribute"
  This option enables instrumentation of return statements in functions
  marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
  of null values from such functions.
! .IP \fB\-fsanitize=bool\fR 4
  .IX Item "-fsanitize=bool"
  This option enables instrumentation of loads from bool.  If a value other
! than 0/1 is loaded, a run\-time error is issued.
! .IP \fB\-fsanitize=enum\fR 4
  .IX Item "-fsanitize=enum"
  This option enables instrumentation of loads from an enum type.  If
  a value outside the range of values for the enum type is loaded,
! a run\-time error is issued.
! .IP \fB\-fsanitize=vptr\fR 4
  .IX Item "-fsanitize=vptr"
! This option enables instrumentation of C++ member function calls, member
  accesses and some conversions between pointers to base and derived classes,
  to verify the referenced object has the correct dynamic type.
! .IP \fB\-fsanitize=pointer\-overflow\fR 4
  .IX Item "-fsanitize=pointer-overflow"
  This option enables instrumentation of pointer arithmetics.  If the pointer
! arithmetics overflows, a run\-time error is issued.
! .IP \fB\-fsanitize=builtin\fR 4
  .IX Item "-fsanitize=builtin"
  This option enables instrumentation of arguments to selected builtin
! functions.  If an invalid value is passed to such arguments, a run\-time
  error is issued.  E.g. passing 0 as the argument to \f(CW\*(C`_\|_builtin_ctz\*(C'\fR
  or \f(CW\*(C`_\|_builtin_clz\*(C'\fR invokes undefined behavior and is diagnosed
  by this option.
*************** While \fB\-ftrapv\fR causes traps for si
*** 16736,16759 ****
  \&\fB\-fsanitize=undefined\fR gives a diagnostic message.
  This currently works only for the C family of languages.
  .RE
! .IP "\fB\-fno\-sanitize=all\fR" 4
  .IX Item "-fno-sanitize=all"
  This option disables all previously enabled sanitizers.
  \&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
  together.
! .IP "\fB\-fasan\-shadow\-offset=\fR\fInumber\fR" 4
  .IX Item "-fasan-shadow-offset=number"
! This option forces \s-1GCC\s0 to use custom shadow offset in AddressSanitizer checks.
  It is useful for experimenting with different shadow memory layouts in
  Kernel AddressSanitizer.
! .IP "\fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR" 4
  .IX Item "-fsanitize-sections=s1,s2,..."
! Sanitize global variables in selected user-defined sections.  \fIsi\fR may
  contain wildcards.
! .IP "\fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR]" 4
  .IX Item "-fsanitize-recover[=opts]"
  \&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
! mentioned in comma-separated list of \fIopts\fR.  Enabling this option
  for a sanitizer component causes it to attempt to continue
  running the program as if no error happened.  This means multiple
  runtime errors can be reported in a single program run, and the exit
--- 16671,16694 ----
  \&\fB\-fsanitize=undefined\fR gives a diagnostic message.
  This currently works only for the C family of languages.
  .RE
! .IP \fB\-fno\-sanitize=all\fR 4
  .IX Item "-fno-sanitize=all"
  This option disables all previously enabled sanitizers.
  \&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
  together.
! .IP \fB\-fasan\-shadow\-offset=\fR\fInumber\fR 4
  .IX Item "-fasan-shadow-offset=number"
! This option forces GCC to use custom shadow offset in AddressSanitizer checks.
  It is useful for experimenting with different shadow memory layouts in
  Kernel AddressSanitizer.
! .IP \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR 4
  .IX Item "-fsanitize-sections=s1,s2,..."
! Sanitize global variables in selected user\-defined sections.  \fIsi\fR may
  contain wildcards.
! .IP \fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR] 4
  .IX Item "-fsanitize-recover[=opts]"
  \&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
! mentioned in comma\-separated list of \fIopts\fR.  Enabling this option
  for a sanitizer component causes it to attempt to continue
  running the program as if no error happened.  This means multiple
  runtime errors can be reported in a single program run, and the exit
*************** code of the program may indicate success
*** 16761,16767 ****
  have been reported.  The \fB\-fno\-sanitize\-recover=\fR option
  can be used to alter
  this behavior: only the first detected error is reported
! and program then exits with a non-zero exit code.
  .Sp
  Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
  except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
--- 16696,16702 ----
  have been reported.  The \fB\-fno\-sanitize\-recover=\fR option
  can be used to alter
  this behavior: only the first detected error is reported
! and program then exits with a non\-zero exit code.
  .Sp
  Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
  except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
*************** equivalent to specifying an \fIopts\fR l
*** 16787,16800 ****
  .Vb 1
  \&        undefined,float\-cast\-overflow,float\-divide\-by\-zero,bounds\-strict
  .Ve
! .IP "\fB\-fsanitize\-address\-use\-after\-scope\fR" 4
  .IX Item "-fsanitize-address-use-after-scope"
! Enable sanitization of local variables to detect use-after-scope bugs.
  The option sets \fB\-fstack\-reuse\fR to \fBnone\fR.
! .IP "\fB\-fsanitize\-trap\fR[\fB=\fR\fIopts\fR]" 4
  .IX Item "-fsanitize-trap[=opts]"
  The \fB\-fsanitize\-trap=\fR option instructs the compiler to
! report for sanitizers mentioned in comma-separated list of \fIopts\fR
  undefined behavior using \f(CW\*(C`_\|_builtin_trap\*(C'\fR rather than a \f(CW\*(C`libubsan\*(C'\fR
  library routine.  If this option is enabled for certain sanitizer,
  it takes precedence over the \fB\-fsanitizer\-recover=\fR for that
--- 16722,16735 ----
  .Vb 1
  \&        undefined,float\-cast\-overflow,float\-divide\-by\-zero,bounds\-strict
  .Ve
! .IP \fB\-fsanitize\-address\-use\-after\-scope\fR 4
  .IX Item "-fsanitize-address-use-after-scope"
! Enable sanitization of local variables to detect use\-after\-scope bugs.
  The option sets \fB\-fstack\-reuse\fR to \fBnone\fR.
! .IP \fB\-fsanitize\-trap\fR[\fB=\fR\fIopts\fR] 4
  .IX Item "-fsanitize-trap[=opts]"
  The \fB\-fsanitize\-trap=\fR option instructs the compiler to
! report for sanitizers mentioned in comma\-separated list of \fIopts\fR
  undefined behavior using \f(CW\*(C`_\|_builtin_trap\*(C'\fR rather than a \f(CW\*(C`libubsan\*(C'\fR
  library routine.  If this option is enabled for certain sanitizer,
  it takes precedence over the \fB\-fsanitizer\-recover=\fR for that
*************** If \f(CW\*(C`\-fsanitize\-trap=undefined
*** 16816,16830 ****
  and \f(CW\*(C`\-fsanitize=vptr\*(C'\fR is enabled on the command line, the
  instrumentation is silently ignored as the instrumentation always needs
  \&\f(CW\*(C`libubsan\*(C'\fR support, \fB\-fsanitize\-trap=vptr\fR is not allowed.
! .IP "\fB\-fsanitize\-undefined\-trap\-on\-error\fR" 4
  .IX Item "-fsanitize-undefined-trap-on-error"
  The \fB\-fsanitize\-undefined\-trap\-on\-error\fR option is deprecated
  equivalent of \fB\-fsanitize\-trap=all\fR.
! .IP "\fB\-fsanitize\-coverage=trace\-pc\fR" 4
  .IX Item "-fsanitize-coverage=trace-pc"
! Enable coverage-guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_pc\*(C'\fR into every basic block.
! .IP "\fB\-fsanitize\-coverage=trace\-cmp\fR" 4
  .IX Item "-fsanitize-coverage=trace-cmp"
  Enable dataflow guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_cmp1\*(C'\fR,
--- 16751,16765 ----
  and \f(CW\*(C`\-fsanitize=vptr\*(C'\fR is enabled on the command line, the
  instrumentation is silently ignored as the instrumentation always needs
  \&\f(CW\*(C`libubsan\*(C'\fR support, \fB\-fsanitize\-trap=vptr\fR is not allowed.
! .IP \fB\-fsanitize\-undefined\-trap\-on\-error\fR 4
  .IX Item "-fsanitize-undefined-trap-on-error"
  The \fB\-fsanitize\-undefined\-trap\-on\-error\fR option is deprecated
  equivalent of \fB\-fsanitize\-trap=all\fR.
! .IP \fB\-fsanitize\-coverage=trace\-pc\fR 4
  .IX Item "-fsanitize-coverage=trace-pc"
! Enable coverage\-guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_pc\*(C'\fR into every basic block.
! .IP \fB\-fsanitize\-coverage=trace\-cmp\fR 4
  .IX Item "-fsanitize-coverage=trace-cmp"
  Enable dataflow guided fuzzing code instrumentation.
  Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_cmp1\*(C'\fR,
*************** variable or \f(CW\*(C`_\|_sanitizer_cov_
*** 16837,16854 ****
  operand constant, \f(CW\*(C`_\|_sanitizer_cov_trace_cmpf\*(C'\fR or
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmpd\*(C'\fR for float or double comparisons and
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_switch\*(C'\fR for switch statements.
! .IP "\fB\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR]" 4
  .IX Item "-fcf-protection=[full|branch|return|none|check]"
! Enable code instrumentation of control-flow transfers to increase
! program security by checking that target addresses of control-flow
  transfer instructions (such as indirect function call, function return,
  indirect jump) are valid.  This prevents diverting the flow of control
  to an unexpected target.  This is intended to protect against such
! threats as Return-oriented Programming (\s-1ROP\s0), and similarly
! call/jmp\-oriented programming (\s-1COP/JOP\s0).
  .Sp
  The value \f(CW\*(C`branch\*(C'\fR tells the compiler to implement checking of
! validity of control-flow transfer at the point of indirect branch
  instructions, i.e. call/jmp instructions.  The value \f(CW\*(C`return\*(C'\fR
  implements checking of validity at the point of returning from a
  function.  The value \f(CW\*(C`full\*(C'\fR is an alias for specifying both
--- 16772,16789 ----
  operand constant, \f(CW\*(C`_\|_sanitizer_cov_trace_cmpf\*(C'\fR or
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmpd\*(C'\fR for float or double comparisons and
  \&\f(CW\*(C`_\|_sanitizer_cov_trace_switch\*(C'\fR for switch statements.
! .IP \fB\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR] 4
  .IX Item "-fcf-protection=[full|branch|return|none|check]"
! Enable code instrumentation of control\-flow transfers to increase
! program security by checking that target addresses of control\-flow
  transfer instructions (such as indirect function call, function return,
  indirect jump) are valid.  This prevents diverting the flow of control
  to an unexpected target.  This is intended to protect against such
! threats as Return\-oriented Programming (ROP), and similarly
! call/jmp\-oriented programming (COP/JOP).
  .Sp
  The value \f(CW\*(C`branch\*(C'\fR tells the compiler to implement checking of
! validity of control\-flow transfer at the point of indirect branch
  instructions, i.e. call/jmp instructions.  The value \f(CW\*(C`return\*(C'\fR
  implements checking of validity at the point of returning from a
  function.  The value \f(CW\*(C`full\*(C'\fR is an alias for specifying both
*************** instrumentation.
*** 16858,16865 ****
  To override \fB\-fcf\-protection\fR, \fB\-fcf\-protection=none\fR
  needs to be added and then with \fB\-fcf\-protection=xxx\fR.
  .Sp
! The value \f(CW\*(C`check\*(C'\fR is used for the final link with link-time
! optimization (\s-1LTO\s0).  An error is issued if \s-1LTO\s0 object files are
  compiled with different \fB\-fcf\-protection\fR values.  The
  value \f(CW\*(C`check\*(C'\fR is ignored at the compile time.
  .Sp
--- 16793,16800 ----
  To override \fB\-fcf\-protection\fR, \fB\-fcf\-protection=none\fR
  needs to be added and then with \fB\-fcf\-protection=xxx\fR.
  .Sp
! The value \f(CW\*(C`check\*(C'\fR is used for the final link with link\-time
! optimization (LTO).  An error is issued if LTO object files are
  compiled with different \fB\-fcf\-protection\fR values.  The
  value \f(CW\*(C`check\*(C'\fR is ignored at the compile time.
  .Sp
*************** You can also use the \f(CW\*(C`nocf_chec
*** 16872,16880 ****
  which functions and calls should be skipped from instrumentation.
  .Sp
  Currently the x86 GNU/Linux target provides an implementation based
! on Intel Control-flow Enforcement Technology (\s-1CET\s0) which works for
  i686 processor or newer.
! .IP "\fB\-fharden\-compares\fR" 4
  .IX Item "-fharden-compares"
  For every logical test that survives gimple optimizations and is
  \&\fInot\fR the condition in a conditional branch (for example,
--- 16807,16815 ----
  which functions and calls should be skipped from instrumentation.
  .Sp
  Currently the x86 GNU/Linux target provides an implementation based
! on Intel Control\-flow Enforcement Technology (CET) which works for
  i686 processor or newer.
! .IP \fB\-fharden\-compares\fR 4
  .IX Item "-fharden-compares"
  For every logical test that survives gimple optimizations and is
  \&\fInot\fR the condition in a conditional branch (for example,
*************** variables), emit extra code to compute a
*** 16883,16896 ****
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the results do not
  match.  Use with \fB\-fharden\-conditional\-branches\fR to cover all
  conditionals.
! .IP "\fB\-fharden\-conditional\-branches\fR" 4
  .IX Item "-fharden-conditional-branches"
! For every non-vectorized conditional branch that survives gimple
  optimizations, emit extra code to compute and verify the reversed
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the result is
  unexpected.  Use with \fB\-fharden\-compares\fR to cover all
  conditionals.
! .IP "\fB\-fharden\-control\-flow\-redundancy\fR" 4
  .IX Item "-fharden-control-flow-redundancy"
  Emit extra code to set booleans when entering basic blocks, and to
  verify and trap, at function exits, when the booleans do not form an
--- 16818,16831 ----
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the results do not
  match.  Use with \fB\-fharden\-conditional\-branches\fR to cover all
  conditionals.
! .IP \fB\-fharden\-conditional\-branches\fR 4
  .IX Item "-fharden-conditional-branches"
! For every non\-vectorized conditional branch that survives gimple
  optimizations, emit extra code to compute and verify the reversed
  condition, and to call \f(CW\*(C`_\|_builtin_trap\*(C'\fR if the result is
  unexpected.  Use with \fB\-fharden\-compares\fR to cover all
  conditionals.
! .IP \fB\-fharden\-control\-flow\-redundancy\fR 4
  .IX Item "-fharden-control-flow-redundancy"
  Emit extra code to set booleans when entering basic blocks, and to
  verify and trap, at function exits, when the booleans do not form an
*************** Verification takes place before returns,
*** 16901,16944 ****
  \&\fB\-fhardcfr\-check\-exceptions\fR, before returning calls with
  \&\fB\-fhardcfr\-check\-returning\-calls\fR, and before noreturn calls with
  \&\fB\-fhardcfr\-check\-noreturn\-calls\fR).  Tuning options
! \&\fB\-\-param hardcfr-max-blocks\fR and \fB\-\-param
! hardcfr-max-inline-blocks\fR are available.
  .Sp
  Tail call optimization takes place too late to affect control flow
  redundancy, but calls annotated as mandatory tail calls by language
! front-ends, and any calls marked early enough as potential tail calls
  would also have verification issued before the call, but these
  possibilities are merely theoretical, as these conditions can only be
  met when using custom compiler plugins.
! .IP "\fB\-fhardcfr\-skip\-leaf\fR" 4
  .IX Item "-fhardcfr-skip-leaf"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR in leaf functions.
! .IP "\fB\-fhardcfr\-check\-exceptions\fR" 4
  .IX Item "-fhardcfr-check-exceptions"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph at exception
  escape points, as if the function body was wrapped with a cleanup
  handler that performed the check and reraised.  This option is enabled
  by default; use \fB\-fno\-hardcfr\-check\-exceptions\fR to disable it.
! .IP "\fB\-fhardcfr\-check\-returning\-calls\fR" 4
  .IX Item "-fhardcfr-check-returning-calls"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before any
  function call immediately followed by a return of its result, if any, so
! as to not prevent tail-call optimization, whether or not it is
  ultimately optimized to a tail call.
  .Sp
  This option is enabled by default whenever sibling call optimizations
  are enabled (see \fB\-foptimize\-sibling\-calls\fR), but it can be
  enabled (or disabled, using its negated form) explicitly, regardless of
  the optimizations.
! .IP "\fB\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno-xthrow\fR|\fBnothrow\fR|\fBnever\fR]" 4
  .IX Item "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before
  \&\f(CW\*(C`noreturn\*(C'\fR calls, either all of them (\fBalways\fR), those that
! aren't expected to return control to the caller through an exception
! (\fBno-xthrow\fR, the default), those that may not return control to
  the caller through an exception either (\fBnothrow\fR), or none of
  them (\fBnever\fR).
  .Sp
--- 16836,16879 ----
  \&\fB\-fhardcfr\-check\-exceptions\fR, before returning calls with
  \&\fB\-fhardcfr\-check\-returning\-calls\fR, and before noreturn calls with
  \&\fB\-fhardcfr\-check\-noreturn\-calls\fR).  Tuning options
! \&\fB\-\-param hardcfr\-max\-blocks\fR and \fB\-\-param
! hardcfr\-max\-inline\-blocks\fR are available.
  .Sp
  Tail call optimization takes place too late to affect control flow
  redundancy, but calls annotated as mandatory tail calls by language
! front\-ends, and any calls marked early enough as potential tail calls
  would also have verification issued before the call, but these
  possibilities are merely theoretical, as these conditions can only be
  met when using custom compiler plugins.
! .IP \fB\-fhardcfr\-skip\-leaf\fR 4
  .IX Item "-fhardcfr-skip-leaf"
  Disable \fB\-fharden\-control\-flow\-redundancy\fR in leaf functions.
! .IP \fB\-fhardcfr\-check\-exceptions\fR 4
  .IX Item "-fhardcfr-check-exceptions"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph at exception
  escape points, as if the function body was wrapped with a cleanup
  handler that performed the check and reraised.  This option is enabled
  by default; use \fB\-fno\-hardcfr\-check\-exceptions\fR to disable it.
! .IP \fB\-fhardcfr\-check\-returning\-calls\fR 4
  .IX Item "-fhardcfr-check-returning-calls"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before any
  function call immediately followed by a return of its result, if any, so
! as to not prevent tail\-call optimization, whether or not it is
  ultimately optimized to a tail call.
  .Sp
  This option is enabled by default whenever sibling call optimizations
  are enabled (see \fB\-foptimize\-sibling\-calls\fR), but it can be
  enabled (or disabled, using its negated form) explicitly, regardless of
  the optimizations.
! .IP \fB\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] 4
  .IX Item "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]"
  When \fB\-fharden\-control\-flow\-redundancy\fR is active, check the
  recorded execution path against the control flow graph before
  \&\f(CW\*(C`noreturn\*(C'\fR calls, either all of them (\fBalways\fR), those that
! aren\*(Aqt expected to return control to the caller through an exception
! (\fBno\-xthrow\fR, the default), those that may not return control to
  the caller through an exception either (\fBnothrow\fR), or none of
  them (\fBnever\fR).
  .Sp
*************** the caller through an exception may caus
*** 16947,16953 ****
  than once, if the exception is caught in the caller, whether by a
  handler or a cleanup.  When \fB\-fhardcfr\-check\-exceptions\fR is also
  enabled, the compiler will avoid associating a \f(CW\*(C`noreturn\*(C'\fR call with
! the implicitly-added cleanup handler, since it would be redundant with
  the check performed before the call, but other handlers or cleanups in
  the function, if activated, will modify the recorded execution path and
  check it again when another checkpoint is hit.  The checkpoint may even
--- 16882,16888 ----
  than once, if the exception is caught in the caller, whether by a
  handler or a cleanup.  When \fB\-fhardcfr\-check\-exceptions\fR is also
  enabled, the compiler will avoid associating a \f(CW\*(C`noreturn\*(C'\fR call with
! the implicitly\-added cleanup handler, since it would be redundant with
  the check performed before the call, but other handlers or cleanups in
  the function, if activated, will modify the recorded execution path and
  check it again when another checkpoint is hit.  The checkpoint may even
*************** attributes, which may affect the placeme
*** 16960,16973 ****
  well as the addition of implicit cleanup handlers for them.  This
  unpredictability, and the fact that raising and reraising exceptions
  frequently amounts to implicitly calling \f(CW\*(C`noreturn\*(C'\fR functions, have
! made \fBno-xthrow\fR the default setting for this option: it excludes
  from the \f(CW\*(C`noreturn\*(C'\fR treatment only internal functions used to
  (re)raise exceptions, that are not affected by these optimizations.
! .IP "\fB\-fhardened\fR" 4
  .IX Item "-fhardened"
! Enable a set of flags for C and \*(C+ that improve the security of the
! generated code without affecting its \s-1ABI.\s0  The precise flags enabled
! may change between major releases of \s-1GCC,\s0 but are currently:
  .Sp
  \&\fB\-D_FORTIFY_SOURCE=3
  \&\-D_GLIBCXX_ASSERTIONS
--- 16895,16908 ----
  well as the addition of implicit cleanup handlers for them.  This
  unpredictability, and the fact that raising and reraising exceptions
  frequently amounts to implicitly calling \f(CW\*(C`noreturn\*(C'\fR functions, have
! made \fBno\-xthrow\fR the default setting for this option: it excludes
  from the \f(CW\*(C`noreturn\*(C'\fR treatment only internal functions used to
  (re)raise exceptions, that are not affected by these optimizations.
! .IP \fB\-fhardened\fR 4
  .IX Item "-fhardened"
! Enable a set of flags for C and C++ that improve the security of the
! generated code without affecting its ABI.  The precise flags enabled
! may change between major releases of GCC, but are currently:
  .Sp
  \&\fB\-D_FORTIFY_SOURCE=3
  \&\-D_GLIBCXX_ASSERTIONS
*************** in debug builds.
*** 16988,16998 ****
  .Sp
  Currently, \fB\-fhardened\fR is only supported on GNU/Linux targets.
  .Sp
! \&\fB\-fhardened\fR only enables a particular option if it wasn't
  already specified anywhere on the command line.  For instance,
  \&\fB\-fhardened\fR \fB\-fstack\-protector\fR will only enable
  \&\fB\-fstack\-protector\fR, but not \fB\-fstack\-protector\-strong\fR.
! .IP "\fB\-fstack\-protector\fR" 4
  .IX Item "-fstack-protector"
  Emit extra code to check for buffer overflows, such as stack smashing
  attacks.  This is done by adding a guard variable to functions with
--- 16923,16933 ----
  .Sp
  Currently, \fB\-fhardened\fR is only supported on GNU/Linux targets.
  .Sp
! \&\fB\-fhardened\fR only enables a particular option if it wasn\*(Aqt
  already specified anywhere on the command line.  For instance,
  \&\fB\-fhardened\fR \fB\-fstack\-protector\fR will only enable
  \&\fB\-fstack\-protector\fR, but not \fB\-fstack\-protector\-strong\fR.
! .IP \fB\-fstack\-protector\fR 4
  .IX Item "-fstack-protector"
  Emit extra code to check for buffer overflows, such as stack smashing
  attacks.  This is done by adding a guard variable to functions with
*************** initialized when a function is entered a
*** 17002,17028 ****
  exits.  If a guard check fails, an error message is printed and the program
  exits.  Only variables that are actually allocated on the stack are
  considered, optimized away variables or variables allocated in registers
! don't count.
! .IP "\fB\-fstack\-protector\-all\fR" 4
  .IX Item "-fstack-protector-all"
  Like \fB\-fstack\-protector\fR except that all functions are protected.
! .IP "\fB\-fstack\-protector\-strong\fR" 4
  .IX Item "-fstack-protector-strong"
  Like \fB\-fstack\-protector\fR but includes additional functions to
  be protected \-\-\- those that have local array definitions, or have
  references to local frame addresses.  Only variables that are actually
  allocated on the stack are considered, optimized away variables or variables
! allocated in registers don't count.
! .IP "\fB\-fstack\-protector\-explicit\fR" 4
  .IX Item "-fstack-protector-explicit"
  Like \fB\-fstack\-protector\fR but only protects those functions which
  have the \f(CW\*(C`stack_protect\*(C'\fR attribute.
! .IP "\fB\-fstack\-check\fR" 4
  .IX Item "-fstack-check"
  Generate code to verify that you do not go beyond the boundary of the
  stack.  You should specify this flag if you are running in an
  environment with multiple threads, but you only rarely need to specify it in
! a single-threaded environment since stack overflow is automatically
  detected on nearly all systems if there is only one stack.
  .Sp
  Note that this switch does not actually cause checking to be done; the
--- 16937,16963 ----
  exits.  If a guard check fails, an error message is printed and the program
  exits.  Only variables that are actually allocated on the stack are
  considered, optimized away variables or variables allocated in registers
! don\*(Aqt count.
! .IP \fB\-fstack\-protector\-all\fR 4
  .IX Item "-fstack-protector-all"
  Like \fB\-fstack\-protector\fR except that all functions are protected.
! .IP \fB\-fstack\-protector\-strong\fR 4
  .IX Item "-fstack-protector-strong"
  Like \fB\-fstack\-protector\fR but includes additional functions to
  be protected \-\-\- those that have local array definitions, or have
  references to local frame addresses.  Only variables that are actually
  allocated on the stack are considered, optimized away variables or variables
! allocated in registers don\*(Aqt count.
! .IP \fB\-fstack\-protector\-explicit\fR 4
  .IX Item "-fstack-protector-explicit"
  Like \fB\-fstack\-protector\fR but only protects those functions which
  have the \f(CW\*(C`stack_protect\*(C'\fR attribute.
! .IP \fB\-fstack\-check\fR 4
  .IX Item "-fstack-check"
  Generate code to verify that you do not go beyond the boundary of the
  stack.  You should specify this flag if you are running in an
  environment with multiple threads, but you only rarely need to specify it in
! a single\-threaded environment since stack overflow is automatically
  detected on nearly all systems if there is only one stack.
  .Sp
  Note that this switch does not actually cause checking to be done; the
*************** operating system or the language runtime
*** 17030,17068 ****
  generation of code to ensure that they see the stack being extended.
  .Sp
  You can additionally specify a string parameter: \fBno\fR means no
! checking, \fBgeneric\fR means force the use of old-style checking,
  \&\fBspecific\fR means use the best checking method and is equivalent
  to bare \fB\-fstack\-check\fR.
  .Sp
! Old-style checking is a generic mechanism that requires no specific
  target support in the compiler but comes with the following drawbacks:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  Modified allocation strategy for large objects: they are always
  allocated dynamically if their size exceeds a fixed threshold.  Note this
  may change the semantics of some code.
! .IP "2." 4
  .IX Item "2."
  Fixed limit on the size of the static frame of functions: when it is
  topped by a particular function, stack checking is not reliable and
  a warning is issued by the compiler.
! .IP "3." 4
  .IX Item "3."
  Inefficiency: because of both the modified allocation strategy and the
  generic implementation, code performance is hampered.
  .RE
  .RS 4
  .Sp
! Note that old-style stack checking is also the fallback method for
  \&\fBspecific\fR if no target support has been added in the compiler.
  .Sp
! \&\fB\-fstack\-check=\fR is designed for Ada's needs to detect infinite recursion
  and stack overflows.  \fBspecific\fR is an excellent choice when compiling
! Ada code.  It is not generally sufficient to protect against stack-clash
  attacks.  To protect against those you want \fB\-fstack\-clash\-protection\fR.
  .RE
! .IP "\fB\-fstack\-clash\-protection\fR" 4
  .IX Item "-fstack-clash-protection"
  Generate code to prevent stack clash style attacks.  When this option is
  enabled, the compiler will only allocate one page of stack space at a time
--- 16965,17003 ----
  generation of code to ensure that they see the stack being extended.
  .Sp
  You can additionally specify a string parameter: \fBno\fR means no
! checking, \fBgeneric\fR means force the use of old\-style checking,
  \&\fBspecific\fR means use the best checking method and is equivalent
  to bare \fB\-fstack\-check\fR.
  .Sp
! Old\-style checking is a generic mechanism that requires no specific
  target support in the compiler but comes with the following drawbacks:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  Modified allocation strategy for large objects: they are always
  allocated dynamically if their size exceeds a fixed threshold.  Note this
  may change the semantics of some code.
! .IP 2. 4
  .IX Item "2."
  Fixed limit on the size of the static frame of functions: when it is
  topped by a particular function, stack checking is not reliable and
  a warning is issued by the compiler.
! .IP 3. 4
  .IX Item "3."
  Inefficiency: because of both the modified allocation strategy and the
  generic implementation, code performance is hampered.
  .RE
  .RS 4
  .Sp
! Note that old\-style stack checking is also the fallback method for
  \&\fBspecific\fR if no target support has been added in the compiler.
  .Sp
! \&\fB\-fstack\-check=\fR is designed for Ada\*(Aqs needs to detect infinite recursion
  and stack overflows.  \fBspecific\fR is an excellent choice when compiling
! Ada code.  It is not generally sufficient to protect against stack\-clash
  attacks.  To protect against those you want \fB\-fstack\-clash\-protection\fR.
  .RE
! .IP \fB\-fstack\-clash\-protection\fR 4
  .IX Item "-fstack-clash-protection"
  Generate code to prevent stack clash style attacks.  When this option is
  enabled, the compiler will only allocate one page of stack space at a time
*************** those targets \fB\-fstack\-clash\-protec
*** 17075,17086 ****
  allocations.  \fB\-fstack\-clash\-protection\fR may also provide limited
  protection for static stack allocations if the target supports
  \&\fB\-fstack\-check=specific\fR.
! .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
  .IX Item "-fstack-limit-register=reg"
  .PD 0
! .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
  .IX Item "-fstack-limit-symbol=sym"
! .IP "\fB\-fno\-stack\-limit\fR" 4
  .IX Item "-fno-stack-limit"
  .PD
  Generate code to ensure that the stack does not grow beyond a certain value,
--- 17010,17021 ----
  allocations.  \fB\-fstack\-clash\-protection\fR may also provide limited
  protection for static stack allocations if the target supports
  \&\fB\-fstack\-check=specific\fR.
! .IP \fB\-fstack\-limit\-register=\fR\fIreg\fR 4
  .IX Item "-fstack-limit-register=reg"
  .PD 0
! .IP \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 4
  .IX Item "-fstack-limit-symbol=sym"
! .IP \fB\-fno\-stack\-limit\fR 4
  .IX Item "-fno-stack-limit"
  .PD
  Generate code to ensure that the stack does not grow beyond a certain value,
*************** For instance, if the stack starts at abs
*** 17093,17103 ****
  and grows downwards, you can use the flags
  \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
  \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
! of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
  .Sp
  You can locally override stack limit checking by using the
  \&\f(CW\*(C`no_stack_limit\*(C'\fR function attribute.
! .IP "\fB\-fsplit\-stack\fR" 4
  .IX Item "-fsplit-stack"
  Generate code to automatically split the stack before it overflows.
  The resulting program has a discontiguous stack which can only
--- 17028,17038 ----
  and grows downwards, you can use the flags
  \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
  \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
! of 128KB.  Note that this may only work with the GNU linker.
  .Sp
  You can locally override stack limit checking by using the
  \&\f(CW\*(C`no_stack_limit\*(C'\fR function attribute.
! .IP \fB\-fsplit\-stack\fR 4
  .IX Item "-fsplit-stack"
  Generate code to automatically split the stack before it overflows.
  The resulting program has a discontiguous stack which can only
*************** available for the latter code to run.  I
*** 17113,17132 ****
  including library code, with \fB\-fsplit\-stack\fR is not an option,
  then the linker can fix up these calls so that the code compiled
  without \fB\-fsplit\-stack\fR always has a large stack.  Support for
! this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
  and later.
! .IP "\fB\-fstrub=disable\fR" 4
  .IX Item "-fstrub=disable"
  Disable stack scrubbing entirely, ignoring any \f(CW\*(C`strub\*(C'\fR attributes.
  See
! .IP "\fB\-fstrub=strict\fR" 4
  .IX Item "-fstrub=strict"
  Functions default to \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR, and apply
  \&\fBstrict\fRly the restriction that only functions associated with
  \&\f(CW\*(C`strub\*(C'\fR\-\f(CW\*(C`callable\*(C'\fR modes (\f(CW\*(C`at\-calls\*(C'\fR, \f(CW\*(C`callable\*(C'\fR and
  \&\f(CW\*(C`always_inline\*(C'\fR \f(CW\*(C`internal\*(C'\fR) are \f(CW\*(C`callable\*(C'\fR by functions
  with \f(CW\*(C`strub\*(C'\fR\-enabled modes (\f(CW\*(C`at\-calls\*(C'\fR and \f(CW\*(C`internal\*(C'\fR).
! .IP "\fB\-fstrub=relaxed\fR" 4
  .IX Item "-fstrub=relaxed"
  Restore the default stack scrub (\f(CW\*(C`strub\*(C'\fR) setting, namely,
  \&\f(CW\*(C`strub\*(C'\fR is only enabled as required by \f(CW\*(C`strub\*(C'\fR attributes
--- 17048,17067 ----
  including library code, with \fB\-fsplit\-stack\fR is not an option,
  then the linker can fix up these calls so that the code compiled
  without \fB\-fsplit\-stack\fR always has a large stack.  Support for
! this is implemented in the gold linker in GNU binutils release 2.21
  and later.
! .IP \fB\-fstrub=disable\fR 4
  .IX Item "-fstrub=disable"
  Disable stack scrubbing entirely, ignoring any \f(CW\*(C`strub\*(C'\fR attributes.
  See
! .IP \fB\-fstrub=strict\fR 4
  .IX Item "-fstrub=strict"
  Functions default to \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR, and apply
  \&\fBstrict\fRly the restriction that only functions associated with
  \&\f(CW\*(C`strub\*(C'\fR\-\f(CW\*(C`callable\*(C'\fR modes (\f(CW\*(C`at\-calls\*(C'\fR, \f(CW\*(C`callable\*(C'\fR and
  \&\f(CW\*(C`always_inline\*(C'\fR \f(CW\*(C`internal\*(C'\fR) are \f(CW\*(C`callable\*(C'\fR by functions
  with \f(CW\*(C`strub\*(C'\fR\-enabled modes (\f(CW\*(C`at\-calls\*(C'\fR and \f(CW\*(C`internal\*(C'\fR).
! .IP \fB\-fstrub=relaxed\fR 4
  .IX Item "-fstrub=relaxed"
  Restore the default stack scrub (\f(CW\*(C`strub\*(C'\fR) setting, namely,
  \&\f(CW\*(C`strub\*(C'\fR is only enabled as required by \f(CW\*(C`strub\*(C'\fR attributes
*************** strub contexts are only prevented from c
*** 17135,17141 ****
  associated with \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR.  This option is only
  useful to override other \fB\-fstrub=*\fR options that precede it in
  the command line.
! .IP "\fB\-fstrub=at\-calls\fR" 4
  .IX Item "-fstrub=at-calls"
  Enable \f(CW\*(C`at\-calls\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  It exercises the \f(CW\*(C`strub\*(C'\fR machinery
--- 17070,17076 ----
  associated with \f(CW\*(C`strub\*(C'\fR mode \f(CW\*(C`disabled\*(C'\fR.  This option is only
  useful to override other \fB\-fstrub=*\fR options that precede it in
  the command line.
! .IP \fB\-fstrub=at\-calls\fR 4
  .IX Item "-fstrub=at-calls"
  Enable \f(CW\*(C`at\-calls\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  It exercises the \f(CW\*(C`strub\*(C'\fR machinery
*************** other translation units, or that has its
*** 17145,17167 ****
  be affected by this option.  Optimization options may also affect
  viability.  See the \f(CW\*(C`strub\*(C'\fR attribute documentation for details on
  viability and eligibility requirements.
! .IP "\fB\-fstrub=internal\fR" 4
  .IX Item "-fstrub=internal"
  Enable \f(CW\*(C`internal\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  This option is intended to exercise
  thoroughly parts of the \f(CW\*(C`strub\*(C'\fR machinery that implement the less
! efficient, but interface-preserving \f(CW\*(C`strub\*(C'\fR mode.  Functions that
  would not be affected by this option are quite uncommon.
! .IP "\fB\-fstrub=all\fR" 4
  .IX Item "-fstrub=all"
  Enable some \f(CW\*(C`strub\*(C'\fR mode where viable.  When both strub modes are
  viable, \f(CW\*(C`at\-calls\*(C'\fR is preferred.  \fB\-fdump\-ipa\-strubm\fR adds
  function attributes that tell which mode was selected for each function.
  The primary use of this option is for testing, to exercise thoroughly
  the \f(CW\*(C`strub\*(C'\fR machinery.
! .IP "\fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR]" 4
  .IX Item "-fvtable-verify=[std|preinit|none]"
! This option is only available when compiling \*(C+ code.
  It turns on (or off, if using \fB\-fvtable\-verify=none\fR) the security
  feature that verifies at run time, for every virtual call, that
  the vtable pointer through which the call is made is valid for the type of
--- 17080,17102 ----
  be affected by this option.  Optimization options may also affect
  viability.  See the \f(CW\*(C`strub\*(C'\fR attribute documentation for details on
  viability and eligibility requirements.
! .IP \fB\-fstrub=internal\fR 4
  .IX Item "-fstrub=internal"
  Enable \f(CW\*(C`internal\*(C'\fR \f(CW\*(C`strub\*(C'\fR mode where viable.  The primary use
  of this option is for testing.  This option is intended to exercise
  thoroughly parts of the \f(CW\*(C`strub\*(C'\fR machinery that implement the less
! efficient, but interface\-preserving \f(CW\*(C`strub\*(C'\fR mode.  Functions that
  would not be affected by this option are quite uncommon.
! .IP \fB\-fstrub=all\fR 4
  .IX Item "-fstrub=all"
  Enable some \f(CW\*(C`strub\*(C'\fR mode where viable.  When both strub modes are
  viable, \f(CW\*(C`at\-calls\*(C'\fR is preferred.  \fB\-fdump\-ipa\-strubm\fR adds
  function attributes that tell which mode was selected for each function.
  The primary use of this option is for testing, to exercise thoroughly
  the \f(CW\*(C`strub\*(C'\fR machinery.
! .IP \fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 4
  .IX Item "-fvtable-verify=[std|preinit|none]"
! This option is only available when compiling C++ code.
  It turns on (or off, if using \fB\-fvtable\-verify=none\fR) the security
  feature that verifies at run time, for every virtual call, that
  the vtable pointer through which the call is made is valid for the type of
*************** the object, and has not been corrupted o
*** 17169,17175 ****
  pointer is detected at run time, an error is reported and execution of the
  program is immediately halted.
  .Sp
! This option causes run-time data structures to be built at program startup,
  which are used for verifying the vtable pointers.  
  The options \fBstd\fR and \fBpreinit\fR
  control the timing of when these data structures are built.  In both cases the
--- 17104,17110 ----
  pointer is detected at run time, an error is reported and execution of the
  program is immediately halted.
  .Sp
! This option causes run\-time data structures to be built at program startup,
  which are used for verifying the vtable pointers.  
  The options \fBstd\fR and \fBpreinit\fR
  control the timing of when these data structures are built.  In both cases the
*************** libraries have been loaded and initializ
*** 17182,17188 ****
  If this option appears multiple times in the command line with different
  values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
  \&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
! .IP "\fB\-fvtv\-debug\fR" 4
  .IX Item "-fvtv-debug"
  When used in conjunction with \fB\-fvtable\-verify=std\fR or 
  \&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
--- 17117,17123 ----
  If this option appears multiple times in the command line with different
  values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
  \&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
! .IP \fB\-fvtv\-debug\fR 4
  .IX Item "-fvtv-debug"
  When used in conjunction with \fB\-fvtable\-verify=std\fR or 
  \&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
*************** runtime functions for the vtable verific
*** 17190,17218 ****
  This flag also causes the compiler to log information about which 
  vtable pointers it finds for each class.
  This information is written to a file named \fIvtv_set_ptr_data.log\fR 
! in the directory named by the environment variable \fB\s-1VTV_LOGS_DIR\s0\fR 
  if that is defined or the current working directory otherwise.
  .Sp
  Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
  file, be sure to delete any existing one.
! .IP "\fB\-fvtv\-counts\fR" 4
  .IX Item "-fvtv-counts"
  This is a debugging flag.  When used in conjunction with
  \&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
  causes the compiler to keep track of the total number of virtual calls
  it encounters and the number of verifications it inserts.  It also
! counts the number of calls to certain run-time library functions
  that it inserts and logs this information for each compilation unit.
  The compiler writes this information to a file named
  \&\fIvtv_count_data.log\fR in the directory named by the environment
! variable \fB\s-1VTV_LOGS_DIR\s0\fR if that is defined or the current working
  directory otherwise.  It also counts the size of the vtable pointer sets
  for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
  in the same directory.
  .Sp
  Note:  This feature \fIappends\fR data to the log files.  To get fresh log
  files, be sure to delete any existing ones.
! .IP "\fB\-finstrument\-functions\fR" 4
  .IX Item "-finstrument-functions"
  Generate instrumentation calls for entry and exit to functions.  Just
  after function entry and just before function exit, the following
--- 17125,17153 ----
  This flag also causes the compiler to log information about which 
  vtable pointers it finds for each class.
  This information is written to a file named \fIvtv_set_ptr_data.log\fR 
! in the directory named by the environment variable \fBVTV_LOGS_DIR\fR 
  if that is defined or the current working directory otherwise.
  .Sp
  Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
  file, be sure to delete any existing one.
! .IP \fB\-fvtv\-counts\fR 4
  .IX Item "-fvtv-counts"
  This is a debugging flag.  When used in conjunction with
  \&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
  causes the compiler to keep track of the total number of virtual calls
  it encounters and the number of verifications it inserts.  It also
! counts the number of calls to certain run\-time library functions
  that it inserts and logs this information for each compilation unit.
  The compiler writes this information to a file named
  \&\fIvtv_count_data.log\fR in the directory named by the environment
! variable \fBVTV_LOGS_DIR\fR if that is defined or the current working
  directory otherwise.  It also counts the size of the vtable pointer sets
  for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
  in the same directory.
  .Sp
  Note:  This feature \fIappends\fR data to the log files.  To get fresh log
  files, be sure to delete any existing ones.
! .IP \fB\-finstrument\-functions\fR 4
  .IX Item "-finstrument-functions"
  Generate instrumentation calls for entry and exit to functions.  Just
  after function entry and just before function exit, the following
*************** providing static copies.)
*** 17245,17255 ****
  .Sp
  A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
  which case this instrumentation is not done.  This can be used, for
! example, for the profiling functions listed above, high-priority
  interrupt routines, and any functions from which the profiling functions
  cannot safely be called (perhaps signal handlers, if the profiling
  routines generate output or allocate memory).
! .IP "\fB\-finstrument\-functions\-once\fR" 4
  .IX Item "-finstrument-functions-once"
  This is similar to \fB\-finstrument\-functions\fR, but the profiling
  functions are called only once per instrumented function, i.e. the first
--- 17180,17190 ----
  .Sp
  A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
  which case this instrumentation is not done.  This can be used, for
! example, for the profiling functions listed above, high\-priority
  interrupt routines, and any functions from which the profiling functions
  cannot safely be called (perhaps signal handlers, if the profiling
  routines generate output or allocate memory).
! .IP \fB\-finstrument\-functions\-once\fR 4
  .IX Item "-finstrument-functions-once"
  This is similar to \fB\-finstrument\-functions\fR, but the profiling
  functions are called only once per instrumented function, i.e. the first
*************** functions are called at \fIleast\fR once
*** 17264,17270 ****
  once per thread, but the calls are always paired, that is to say, if a
  thread calls the first function, then it will call the second function,
  unless it never reaches the exit of the instrumented function.
! .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
  .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
  Set the list of functions that are excluded from instrumentation (see
  the description of \fB\-finstrument\-functions\fR).  If the file that
--- 17199,17205 ----
  once per thread, but the calls are always paired, that is to say, if a
  thread calls the first function, then it will call the second function,
  unless it never reaches the exit of the instrumented function.
! .IP \fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR 4
  .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
  Set the list of functions that are excluded from instrumentation (see
  the description of \fB\-finstrument\-functions\fR).  If the file that
*************** contain \fI/bits/stl\fR or \fIinclude/sy
*** 17284,17334 ****
  .Sp
  If, for some reason, you want to include letter \fB,\fR in one of
  \&\fIsym\fR, write \fB,\fR. For example,
! \&\fB\-finstrument\-functions\-exclude\-file\-list=',,tmp'\fR
  (note the single quote surrounding the option).
! .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
  .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
  This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
  but this option sets the list of function names to be excluded from
! instrumentation.  The function name to be matched is its user-visible
  name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
  internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
  match is done on substrings: if the \fIsym\fR parameter is a substring
! of the function name, it is considered to be a match.  For C99 and \*(C+
! extended identifiers, the function name must be given in \s-1UTF\-8,\s0 not
  using universal character names.
! .IP "\fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR" 4
  .IX Item "-fpatchable-function-entry=N[,M]"
  Generate \fIN\fR NOPs right at the beginning
! of each function, with the function entry point before the \fIM\fRth \s-1NOP.\s0
  If \fIM\fR is omitted, it defaults to \f(CW0\fR so the
! function entry points to the address just at the first \s-1NOP.\s0
! The \s-1NOP\s0 instructions reserve extra space which can be used to patch in
  any desired instrumentation at run time, provided that the code segment
  is writable.  The amount of space is controllable indirectly via
! the number of NOPs; the \s-1NOP\s0 instruction used corresponds to the instruction
! emitted by the internal \s-1GCC\s0 back-end interface \f(CW\*(C`gen_nop\*(C'\fR.  This behavior
! is target-specific and may also depend on the architecture variant and/or
  other compilation options.
  .Sp
! For run-time identification, the starting addresses of these areas,
  which correspond to their respective function entries minus \fIM\fR,
  are additionally collected in the \f(CW\*(C`_\|_patchable_function_entries\*(C'\fR
  section of the resulting binary.
  .Sp
  Note that the value of \f(CW\*(C`_\|_attribute_\|_ ((patchable_function_entry
! (N,M)))\*(C'\fR takes precedence over command-line option
  \&\fB\-fpatchable\-function\-entry=N,M\fR.  This can be used to increase
  the area size or to remove it completely on a single function.
  If \f(CW\*(C`N=0\*(C'\fR, no pad location is recorded.
  .Sp
! The \s-1NOP\s0 instructions are inserted at\-\-\-and maybe before, depending on
  \&\fIM\fR\-\-\-the function entry address, even before the prologue.  On
! PowerPC with the ELFv2 \s-1ABI,\s0 for a function with dual entry points,
  the local entry point is this function entry address.
  .Sp
  The maximum value of \fIN\fR and \fIM\fR is 65535.  On PowerPC with the
! ELFv2 \s-1ABI,\s0 for a function with dual entry points, the supported values
  for \fIM\fR are 0, 2, 6 and 14.
  .SS "Options Controlling the Preprocessor"
  .IX Subsection "Options Controlling the Preprocessor"
--- 17219,17269 ----
  .Sp
  If, for some reason, you want to include letter \fB,\fR in one of
  \&\fIsym\fR, write \fB,\fR. For example,
! \&\fB\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\fR
  (note the single quote surrounding the option).
! .IP \fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR 4
  .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
  This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
  but this option sets the list of function names to be excluded from
! instrumentation.  The function name to be matched is its user\-visible
  name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
  internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
  match is done on substrings: if the \fIsym\fR parameter is a substring
! of the function name, it is considered to be a match.  For C99 and C++
! extended identifiers, the function name must be given in UTF\-8, not
  using universal character names.
! .IP \fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR 4
  .IX Item "-fpatchable-function-entry=N[,M]"
  Generate \fIN\fR NOPs right at the beginning
! of each function, with the function entry point before the \fIM\fRth NOP.
  If \fIM\fR is omitted, it defaults to \f(CW0\fR so the
! function entry points to the address just at the first NOP.
! The NOP instructions reserve extra space which can be used to patch in
  any desired instrumentation at run time, provided that the code segment
  is writable.  The amount of space is controllable indirectly via
! the number of NOPs; the NOP instruction used corresponds to the instruction
! emitted by the internal GCC back\-end interface \f(CW\*(C`gen_nop\*(C'\fR.  This behavior
! is target\-specific and may also depend on the architecture variant and/or
  other compilation options.
  .Sp
! For run\-time identification, the starting addresses of these areas,
  which correspond to their respective function entries minus \fIM\fR,
  are additionally collected in the \f(CW\*(C`_\|_patchable_function_entries\*(C'\fR
  section of the resulting binary.
  .Sp
  Note that the value of \f(CW\*(C`_\|_attribute_\|_ ((patchable_function_entry
! (N,M)))\*(C'\fR takes precedence over command\-line option
  \&\fB\-fpatchable\-function\-entry=N,M\fR.  This can be used to increase
  the area size or to remove it completely on a single function.
  If \f(CW\*(C`N=0\*(C'\fR, no pad location is recorded.
  .Sp
! The NOP instructions are inserted at\-\-\-and maybe before, depending on
  \&\fIM\fR\-\-\-the function entry address, even before the prologue.  On
! PowerPC with the ELFv2 ABI, for a function with dual entry points,
  the local entry point is this function entry address.
  .Sp
  The maximum value of \fIN\fR and \fIM\fR is 65535.  On PowerPC with the
! ELFv2 ABI, for a function with dual entry points, the supported values
  for \fIM\fR are 0, 2, 6 and 14.
  .SS "Options Controlling the Preprocessor"
  .IX Subsection "Options Controlling the Preprocessor"
*************** they appeared during translation phase t
*** 17355,17369 ****
  directive.  In particular, the definition is truncated by
  embedded newline characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell-like
! program you may need to use the shell's quoting syntax to protect
  characters such as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any).  Parentheses are meaningful to most shells, so you should
  quote the option.  With \fBsh\fR and \fBcsh\fR,
! \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
  .Sp
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
  are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
--- 17290,17304 ----
  directive.  In particular, the definition is truncated by
  embedded newline characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell\-like
! program you may need to use the shell\*(Aqs quoting syntax to protect
  characters such as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function\-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any).  Parentheses are meaningful to most shells, so you should
  quote the option.  With \fBsh\fR and \fBcsh\fR,
! \&\fB\-D\*(Aq\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB\*(Aq\fR works.
  .Sp
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
  are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
*************** provided with a \fB\-D\fR option.
*** 17377,17383 ****
  .IX Item "-include file"
  Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
  line of the primary source file.  However, the first directory searched
! for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
  the directory containing the main source file.  If not found there, it
  is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
  chain as normal.
--- 17312,17318 ----
  .IX Item "-include file"
  Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
  line of the primary source file.  However, the first directory searched
! for \fIfile\fR is the preprocessor\*(Aqs working directory \fIinstead of\fR
  the directory containing the main source file.  If not found there, it
  is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
  chain as normal.
*************** processing its declarations.
*** 17393,17416 ****
  .Sp
  All files specified by \fB\-imacros\fR are processed before all files
  specified by \fB\-include\fR.
! .IP "\fB\-undef\fR" 4
  .IX Item "-undef"
! Do not predefine any system-specific or GCC-specific macros.  The
  standard predefined macros remain defined.
! .IP "\fB\-pthread\fR" 4
  .IX Item "-pthread"
! Define additional macros required for using the \s-1POSIX\s0 threads library.
  You should use this option consistently for both compilation and linking.
  This option is supported on GNU/Linux targets, most other Unix derivatives,
  and also on x86 Cygwin and MinGW targets.
! .IP "\fB\-M\fR" 4
  .IX Item "-M"
  Instead of outputting the result of preprocessing, output a rule
  suitable for \fBmake\fR describing the dependencies of the main
  source file.  The preprocessor outputs one \fBmake\fR rule containing
  the object file name for that source file, a colon, and the names of all
  the included files, including those coming from \fB\-include\fR or
! \&\fB\-imacros\fR command-line options.
  .Sp
  Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
  object file name consists of the name of the source file with any
--- 17328,17351 ----
  .Sp
  All files specified by \fB\-imacros\fR are processed before all files
  specified by \fB\-include\fR.
! .IP \fB\-undef\fR 4
  .IX Item "-undef"
! Do not predefine any system\-specific or GCC\-specific macros.  The
  standard predefined macros remain defined.
! .IP \fB\-pthread\fR 4
  .IX Item "-pthread"
! Define additional macros required for using the POSIX threads library.
  You should use this option consistently for both compilation and linking.
  This option is supported on GNU/Linux targets, most other Unix derivatives,
  and also on x86 Cygwin and MinGW targets.
! .IP \fB\-M\fR 4
  .IX Item "-M"
  Instead of outputting the result of preprocessing, output a rule
  suitable for \fBmake\fR describing the dependencies of the main
  source file.  The preprocessor outputs one \fBmake\fR rule containing
  the object file name for that source file, a colon, and the names of all
  the included files, including those coming from \fB\-include\fR or
! \&\fB\-imacros\fR command\-line options.
  .Sp
  Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
  object file name consists of the name of the source file with any
*************** parts removed.  If there are many includ
*** 17419,17434 ****
  split into several lines using \fB\e\fR\-newline.  The rule has no
  commands.
  .Sp
! This option does not suppress the preprocessor's debug output, such as
  \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
  rules you should explicitly specify the dependency output file with
  \&\fB\-MF\fR, or use an environment variable like
! \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
  is still sent to the regular output stream as normal.
  .Sp
  Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
  warnings with an implicit \fB\-w\fR.
! .IP "\fB\-MM\fR" 4
  .IX Item "-MM"
  Like \fB\-M\fR but do not mention header files that are found in
  system header directories, nor header files that are included,
--- 17354,17369 ----
  split into several lines using \fB\e\fR\-newline.  The rule has no
  commands.
  .Sp
! This option does not suppress the preprocessor\*(Aqs debug output, such as
  \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
  rules you should explicitly specify the dependency output file with
  \&\fB\-MF\fR, or use an environment variable like
! \&\fBDEPENDENCIES_OUTPUT\fR.  Debug output
  is still sent to the regular output stream as normal.
  .Sp
  Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
  warnings with an implicit \fB\-w\fR.
! .IP \fB\-MM\fR 4
  .IX Item "-MM"
  Like \fB\-M\fR but do not mention header files that are found in
  system header directories, nor header files that are included,
*************** When used with the driver options \fB\-M
*** 17448,17454 ****
  \&\fB\-MF\fR overrides the default dependency output file.
  .Sp
  If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
! .IP "\fB\-MG\fR" 4
  .IX Item "-MG"
  In conjunction with an option such as \fB\-M\fR requesting
  dependency generation, \fB\-MG\fR assumes missing header files are
--- 17383,17389 ----
  \&\fB\-MF\fR overrides the default dependency output file.
  .Sp
  If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
! .IP \fB\-MG\fR 4
  .IX Item "-MG"
  In conjunction with an option such as \fB\-M\fR requesting
  dependency generation, \fB\-MG\fR assumes missing header files are
*************** also suppresses preprocessed output, as
*** 17459,17470 ****
  this useless.
  .Sp
  This feature is used in automatic updating of makefiles.
! .IP "\fB\-Mno\-modules\fR" 4
  .IX Item "-Mno-modules"
  Disable dependency generation for compiled module interfaces.
! .IP "\fB\-MP\fR" 4
  .IX Item "-MP"
! This option instructs \s-1CPP\s0 to add a phony target for each dependency
  other than the main file, causing each to depend on nothing.  These
  dummy rules work around errors \fBmake\fR gives if you remove header
  files without updating the \fIMakefile\fR to match.
--- 17394,17405 ----
  this useless.
  .Sp
  This feature is used in automatic updating of makefiles.
! .IP \fB\-Mno\-modules\fR 4
  .IX Item "-Mno-modules"
  Disable dependency generation for compiled module interfaces.
! .IP \fB\-MP\fR 4
  .IX Item "-MP"
! This option instructs CPP to add a phony target for each dependency
  other than the main file, causing each to depend on nothing.  These
  dummy rules work around errors \fBmake\fR gives if you remove header
  files without updating the \fIMakefile\fR to match.
*************** This is typical output:
*** 17479,17493 ****
  .IP "\fB\-MT\fR \fItarget\fR" 4
  .IX Item "-MT target"
  Change the target of the rule emitted by dependency generation.  By
! default \s-1CPP\s0 takes the name of the main input file, deletes any
  directory components and any file suffix such as \fB.c\fR, and
! appends the platform's usual object suffix.  The result is the target.
  .Sp
  An \fB\-MT\fR option sets the target to be exactly the string you
  specify.  If you want multiple targets, you can specify them as a single
  argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
  .Sp
! For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
  .Sp
  .Vb 1
  \&        $(objpfx)foo.o: foo.c
--- 17414,17428 ----
  .IP "\fB\-MT\fR \fItarget\fR" 4
  .IX Item "-MT target"
  Change the target of the rule emitted by dependency generation.  By
! default CPP takes the name of the main input file, deletes any
  directory components and any file suffix such as \fB.c\fR, and
! appends the platform\*(Aqs usual object suffix.  The result is the target.
  .Sp
  An \fB\-MT\fR option sets the target to be exactly the string you
  specify.  If you want multiple targets, you can specify them as a single
  argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
  .Sp
! For example, \fB\-MT\ \*(Aq$(objpfx)foo.o\*(Aq\fR might give
  .Sp
  .Vb 1
  \&        $(objpfx)foo.o: foo.c
*************** For example, \fB\-MT\ '$(objpfx)foo.o'\f
*** 17495,17501 ****
  .IP "\fB\-MQ\fR \fItarget\fR" 4
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
! Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
  .Sp
  .Vb 1
  \&        $$(objpfx)foo.o: foo.c
--- 17430,17436 ----
  .IP "\fB\-MQ\fR \fItarget\fR" 4
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
! Make.  \fB\-MQ\ \*(Aq$(objpfx)foo.o\*(Aq\fR gives
  .Sp
  .Vb 1
  \&        $$(objpfx)foo.o: foo.c
*************** Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR give
*** 17503,17509 ****
  .Sp
  The default target is automatically quoted, as if it were given with
  \&\fB\-MQ\fR.
! .IP "\fB\-MD\fR" 4
  .IX Item "-MD"
  \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
  \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
--- 17438,17444 ----
  .Sp
  The default target is automatically quoted, as if it were given with
  \&\fB\-MQ\fR.
! .IP \fB\-MD\fR 4
  .IX Item "-MD"
  \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
  \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
*************** is understood to specify a target object
*** 17518,17528 ****
  .Sp
  Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
  a dependency output file as a side effect of the compilation process.
! .IP "\fB\-MMD\fR" 4
  .IX Item "-MMD"
  Like \fB\-MD\fR except mention only user header files, not system
  header files.
! .IP "\fB\-fpreprocessed\fR" 4
  .IX Item "-fpreprocessed"
  Indicate to the preprocessor that the input file has already been
  preprocessed.  This suppresses things like macro expansion, trigraph
--- 17453,17463 ----
  .Sp
  Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
  a dependency output file as a side effect of the compilation process.
! .IP \fB\-MMD\fR 4
  .IX Item "-MMD"
  Like \fB\-MD\fR except mention only user header files, not system
  header files.
! .IP \fB\-fpreprocessed\fR 4
  .IX Item "-fpreprocessed"
  Indicate to the preprocessor that the input file has already been
  preprocessed.  This suppresses things like macro expansion, trigraph
*************** a tokenizer for the front ends.
*** 17534,17546 ****
  .Sp
  \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
  extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
! extensions that \s-1GCC\s0 uses for preprocessed files created by
  \&\fB\-save\-temps\fR.
! .IP "\fB\-fdirectives\-only\fR" 4
  .IX Item "-fdirectives-only"
  When preprocessing, handle directives, but do not expand macros.
  .Sp
! The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
  options.
  .Sp
  With \fB\-E\fR, preprocessing is limited to the handling of directives
--- 17469,17481 ----
  .Sp
  \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
  extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
! extensions that GCC uses for preprocessed files created by
  \&\fB\-save\-temps\fR.
! .IP \fB\-fdirectives\-only\fR 4
  .IX Item "-fdirectives-only"
  When preprocessing, handle directives, but do not expand macros.
  .Sp
! The option\*(Aqs behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
  options.
  .Sp
  With \fB\-E\fR, preprocessing is limited to the handling of directives
*************** files previously preprocessed with \f(CW
*** 17557,17583 ****
  With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
  \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
  files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
! .IP "\fB\-fdollars\-in\-identifiers\fR" 4
  .IX Item "-fdollars-in-identifiers"
  Accept \fB$\fR in identifiers.
! .IP "\fB\-fextended\-identifiers\fR" 4
  .IX Item "-fextended-identifiers"
  Accept universal character names and extended characters in
  identifiers.  This option is enabled by default for C99 (and later C
! standard versions) and \*(C+.
! .IP "\fB\-fno\-canonical\-system\-headers\fR" 4
  .IX Item "-fno-canonical-system-headers"
  When preprocessing, do not shorten system header paths with canonicalization.
! .IP "\fB\-fmax\-include\-depth=\fR\fIdepth\fR" 4
  .IX Item "-fmax-include-depth=depth"
  Set the maximum depth of the nested #include. The default is 200.
! .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
  .IX Item "-ftabstop=width"
  Set the distance between tab stops.  This helps the preprocessor report
  correct column numbers in warnings or errors, even if tabs appear on the
  line.  If the value is less than 1 or greater than 100, the option is
  ignored.  The default is 8.
! .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
  .IX Item "-ftrack-macro-expansion[=level]"
  Track locations of tokens across macro expansions. This allows the
  compiler to emit diagnostic about the current macro expansion stack
--- 17492,17518 ----
  With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
  \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
  files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
! .IP \fB\-fdollars\-in\-identifiers\fR 4
  .IX Item "-fdollars-in-identifiers"
  Accept \fB$\fR in identifiers.
! .IP \fB\-fextended\-identifiers\fR 4
  .IX Item "-fextended-identifiers"
  Accept universal character names and extended characters in
  identifiers.  This option is enabled by default for C99 (and later C
! standard versions) and C++.
! .IP \fB\-fno\-canonical\-system\-headers\fR 4
  .IX Item "-fno-canonical-system-headers"
  When preprocessing, do not shorten system header paths with canonicalization.
! .IP \fB\-fmax\-include\-depth=\fR\fIdepth\fR 4
  .IX Item "-fmax-include-depth=depth"
  Set the maximum depth of the nested #include. The default is 200.
! .IP \fB\-ftabstop=\fR\fIwidth\fR 4
  .IX Item "-ftabstop=width"
  Set the distance between tab stops.  This helps the preprocessor report
  correct column numbers in warnings or errors, even if tabs appear on the
  line.  If the value is less than 1 or greater than 100, the option is
  ignored.  The default is 8.
! .IP \fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR] 4
  .IX Item "-ftrack-macro-expansion[=level]"
  Track locations of tokens across macro expansions. This allows the
  compiler to emit diagnostic about the current macro expansion stack
*************** when a compilation error occurs in a mac
*** 17585,17665 ****
  option makes the preprocessor and the compiler consume more
  memory. The \fIlevel\fR parameter can be used to choose the level of
  precision of token location tracking thus decreasing the memory
! consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
  this option. Value \fB1\fR tracks tokens locations in a
  degraded mode for the sake of minimal memory overhead. In this mode
  all tokens resulting from the expansion of an argument of a
! function-like macro have the same location. Value \fB2\fR tracks
  tokens locations completely. This value is the most memory hungry.
  When this option is given no argument, the default parameter value is
  \&\fB2\fR.
  .Sp
  Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
! .IP "\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
  .IX Item "-fmacro-prefix-map=old=new"
! When preprocessing files residing in directory \fI\fIold\fI\fR,
  expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
! files resided in directory \fI\fInew\fI\fR instead.  This can be used
  to change an absolute path to a relative path by using \fI.\fR for
  \&\fInew\fR which can result in more reproducible builds that are
  location independent.  This option also affects
  \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
  \&\fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
  .IX Item "-fexec-charset=charset"
  Set the execution character set, used for string and character
! constants.  The default is \s-1UTF\-8.\s0  \fIcharset\fR can be any encoding
! supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
  .IX Item "-fwide-exec-charset=charset"
  Set the wide execution character set, used for wide string and
! character constants.  The default is one of \s-1UTF\-32BE, UTF\-32LE, UTF\-16BE,\s0
! or \s-1UTF\-16LE,\s0 whichever corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR and the
! big-endian or little-endian byte order being used for code generation.  As
  with \fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
! by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
  problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
! .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
  .IX Item "-finput-charset=charset"
  Set the input character set, used for translation from the character
! set of the input file to the source character set used by \s-1GCC.\s0  If the
! locale does not specify, or \s-1GCC\s0 cannot get this information from the
! locale, the default is \s-1UTF\-8.\s0  This can be overridden by either the locale
! or this command-line option.  Currently the command-line option takes
! precedence if there's a conflict.  \fIcharset\fR can be any encoding
! supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP "\fB\-fpch\-deps\fR" 4
  .IX Item "-fpch-deps"
  When using precompiled headers, this flag
! causes the dependency-output flags to also list the files from the
! precompiled header's dependencies.  If not specified, only the
  precompiled header are listed and not the files that were used to
  create it, because those files are not consulted when a precompiled
  header is used.
! .IP "\fB\-fpch\-preprocess\fR" 4
  .IX Item "-fpch-preprocess"
  This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
! \&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
  the place where the precompiled header was found, and its \fIfilename\fR.
! When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
! and loads the \s-1PCH.\s0
  .Sp
  This option is off by default, because the resulting preprocessed output
! is only really suitable as input to \s-1GCC.\s0  It is switched on by
  \&\fB\-save\-temps\fR.
  .Sp
  You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
! safe to edit the filename if the \s-1PCH\s0 file is available in a different
! location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
  current directory.
! .IP "\fB\-fworking\-directory\fR" 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that
  let the compiler know the current working directory at the time of
  preprocessing.  When this option is enabled, the preprocessor
  emits, after the initial linemarker, a second linemarker with the
! current working directory followed by two slashes.  \s-1GCC\s0 uses this
! directory, when it's present in the preprocessed input, as the
  directory emitted as the current working directory in some debugging
  information formats.  This option is implicitly enabled if debugging
  information is enabled, but this can be inhibited with the negated
--- 17520,17600 ----
  option makes the preprocessor and the compiler consume more
  memory. The \fIlevel\fR parameter can be used to choose the level of
  precision of token location tracking thus decreasing the memory
! consumption if necessary. Value \fB0\fR of \fIlevel\fR de\-activates
  this option. Value \fB1\fR tracks tokens locations in a
  degraded mode for the sake of minimal memory overhead. In this mode
  all tokens resulting from the expansion of an argument of a
! function\-like macro have the same location. Value \fB2\fR tracks
  tokens locations completely. This value is the most memory hungry.
  When this option is given no argument, the default parameter value is
  \&\fB2\fR.
  .Sp
  Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
! .IP \fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4
  .IX Item "-fmacro-prefix-map=old=new"
! When preprocessing files residing in directory \fIold\fR,
  expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
! files resided in directory \fInew\fR instead.  This can be used
  to change an absolute path to a relative path by using \fI.\fR for
  \&\fInew\fR which can result in more reproducible builds that are
  location independent.  This option also affects
  \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
  \&\fB\-ffile\-prefix\-map\fR and \fB\-fcanon\-prefix\-map\fR.
! .IP \fB\-fexec\-charset=\fR\fIcharset\fR 4
  .IX Item "-fexec-charset=charset"
  Set the execution character set, used for string and character
! constants.  The default is UTF\-8.  \fIcharset\fR can be any encoding
! supported by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP \fB\-fwide\-exec\-charset=\fR\fIcharset\fR 4
  .IX Item "-fwide-exec-charset=charset"
  Set the wide execution character set, used for wide string and
! character constants.  The default is one of UTF\-32BE, UTF\-32LE, UTF\-16BE,
! or UTF\-16LE, whichever corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR and the
! big\-endian or little\-endian byte order being used for code generation.  As
  with \fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
! by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
  problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
! .IP \fB\-finput\-charset=\fR\fIcharset\fR 4
  .IX Item "-finput-charset=charset"
  Set the input character set, used for translation from the character
! set of the input file to the source character set used by GCC.  If the
! locale does not specify, or GCC cannot get this information from the
! locale, the default is UTF\-8.  This can be overridden by either the locale
! or this command\-line option.  Currently the command\-line option takes
! precedence if there\*(Aqs a conflict.  \fIcharset\fR can be any encoding
! supported by the system\*(Aqs \f(CW\*(C`iconv\*(C'\fR library routine.
! .IP \fB\-fpch\-deps\fR 4
  .IX Item "-fpch-deps"
  When using precompiled headers, this flag
! causes the dependency\-output flags to also list the files from the
! precompiled header\*(Aqs dependencies.  If not specified, only the
  precompiled header are listed and not the files that were used to
  create it, because those files are not consulted when a precompiled
  header is used.
! .IP \fB\-fpch\-preprocess\fR 4
  .IX Item "-fpch-preprocess"
  This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
! \&\f(CW\*(C`#pragma GCC pch_preprocess "\fR\f(CIfilename\fR\f(CW"\*(C'\fR in the output to mark
  the place where the precompiled header was found, and its \fIfilename\fR.
! When \fB\-fpreprocessed\fR is in use, GCC recognizes this \f(CW\*(C`#pragma\*(C'\fR
! and loads the PCH.
  .Sp
  This option is off by default, because the resulting preprocessed output
! is only really suitable as input to GCC.  It is switched on by
  \&\fB\-save\-temps\fR.
  .Sp
  You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
! safe to edit the filename if the PCH file is available in a different
! location.  The filename may be absolute or it may be relative to GCC\*(Aqs
  current directory.
! .IP \fB\-fworking\-directory\fR 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that
  let the compiler know the current working directory at the time of
  preprocessing.  When this option is enabled, the preprocessor
  emits, after the initial linemarker, a second linemarker with the
! current working directory followed by two slashes.  GCC uses this
! directory, when it\*(Aqs present in the preprocessed input, as the
  directory emitted as the current working directory in some debugging
  information formats.  This option is implicitly enabled if debugging
  information is enabled, but this can be inhibited with the negated
*************** it does not use shell special characters
*** 17676,17682 ****
  .IX Item "-A -predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer
  \&\fIanswer\fR.
! .IP "\fB\-C\fR" 4
  .IX Item "-C"
  Do not discard comments.  All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
--- 17611,17617 ----
  .IX Item "-A -predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer
  \&\fIanswer\fR.
! .IP \fB\-C\fR 4
  .IX Item "-C"
  Do not discard comments.  All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
*************** causes the preprocessor to treat comment
*** 17687,17730 ****
  For example, comments appearing at the start of what would be a
  directive line have the effect of turning that line into an ordinary
  source line, since the first token on the line is no longer a \fB#\fR.
! .IP "\fB\-CC\fR" 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion.  This is
  like \fB\-C\fR, except that comments contained within macros are
  also passed through to the output file where the macro is expanded.
  .Sp
  In addition to the side effects of the \fB\-C\fR option, the
! \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
  to be converted to C\-style comments.  This is to prevent later use
  of that macro from inadvertently commenting out the remainder of
  the source line.
  .Sp
  The \fB\-CC\fR option is generally used to support lint comments.
! .IP "\fB\-P\fR" 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that is
  not C code, and will be sent to a program which might be confused by the
  linemarkers.
! .IP "\fB\-traditional\fR" 4
  .IX Item "-traditional"
  .PD 0
! .IP "\fB\-traditional\-cpp\fR" 4
  .IX Item "-traditional-cpp"
  .PD
! Try to imitate the behavior of pre-standard C preprocessors, as
! opposed to \s-1ISO C\s0 preprocessors.
! See the \s-1GNU CPP\s0 manual for details.
  .Sp
! Note that \s-1GCC\s0 does not otherwise attempt to emulate a pre-standard 
  C compiler, and these options are only supported with the \fB\-E\fR 
! switch, or when invoking \s-1CPP\s0 explicitly.
! .IP "\fB\-trigraphs\fR" 4
  .IX Item "-trigraphs"
! Support \s-1ISO C\s0 trigraphs.
! These are three-character sequences, all starting with \fB??\fR, that
! are defined by \s-1ISO C\s0 to stand for single characters.  For example,
! \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
  constant for a newline.
  .Sp
  The nine trigraphs and their replacements are
--- 17622,17665 ----
  For example, comments appearing at the start of what would be a
  directive line have the effect of turning that line into an ordinary
  source line, since the first token on the line is no longer a \fB#\fR.
! .IP \fB\-CC\fR 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion.  This is
  like \fB\-C\fR, except that comments contained within macros are
  also passed through to the output file where the macro is expanded.
  .Sp
  In addition to the side effects of the \fB\-C\fR option, the
! \&\fB\-CC\fR option causes all C++\-style comments inside a macro
  to be converted to C\-style comments.  This is to prevent later use
  of that macro from inadvertently commenting out the remainder of
  the source line.
  .Sp
  The \fB\-CC\fR option is generally used to support lint comments.
! .IP \fB\-P\fR 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that is
  not C code, and will be sent to a program which might be confused by the
  linemarkers.
! .IP \fB\-traditional\fR 4
  .IX Item "-traditional"
  .PD 0
! .IP \fB\-traditional\-cpp\fR 4
  .IX Item "-traditional-cpp"
  .PD
! Try to imitate the behavior of pre\-standard C preprocessors, as
! opposed to ISO C preprocessors.
! See the GNU CPP manual for details.
  .Sp
! Note that GCC does not otherwise attempt to emulate a pre\-standard 
  C compiler, and these options are only supported with the \fB\-E\fR 
! switch, or when invoking CPP explicitly.
! .IP \fB\-trigraphs\fR 4
  .IX Item "-trigraphs"
! Support ISO C trigraphs.
! These are three\-character sequences, all starting with \fB??\fR, that
! are defined by ISO C to stand for single characters.  For example,
! \&\fB??/\fR stands for \fB\e\fR, so \fB\*(Aq??/n\*(Aq\fR is a character
  constant for a newline.
  .Sp
  The nine trigraphs and their replacements are
*************** The nine trigraphs and their replacement
*** 17734,17763 ****
  \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
  .Ve
  .Sp
! By default, \s-1GCC\s0 ignores trigraphs, but in
! standard-conforming modes it converts them.  See the \fB\-std\fR and
  \&\fB\-ansi\fR options.
! .IP "\fB\-remap\fR" 4
  .IX Item "-remap"
  Enable special code to work around file systems which only permit very
! short file names, such as MS-DOS.
! .IP "\fB\-H\fR" 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities.  Each name is indented to show how deep in the
  \&\fB#include\fR stack it is.  Precompiled header files are also
  printed, even if they are found to be invalid; an invalid precompiled
  header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
! .IP "\fB\-d\fR\fIletters\fR" 4
  .IX Item "-dletters"
  Says to make debugging dumps during compilation as specified by
  \&\fIletters\fR.  The flags documented here are those relevant to the
  preprocessor.  Other \fIletters\fR are interpreted
! by the compiler proper, or reserved for future versions of \s-1GCC,\s0 and so
  are silently ignored.  If you specify \fIletters\fR whose behavior
  conflicts, the result is undefined.
  .RS 4
! .IP "\fB\-dM\fR" 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \fB#define\fR
  directives for all the macros defined during the execution of the
--- 17669,17698 ----
  \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
  .Ve
  .Sp
! By default, GCC ignores trigraphs, but in
! standard\-conforming modes it converts them.  See the \fB\-std\fR and
  \&\fB\-ansi\fR options.
! .IP \fB\-remap\fR 4
  .IX Item "-remap"
  Enable special code to work around file systems which only permit very
! short file names, such as MS\-DOS.
! .IP \fB\-H\fR 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities.  Each name is indented to show how deep in the
  \&\fB#include\fR stack it is.  Precompiled header files are also
  printed, even if they are found to be invalid; an invalid precompiled
  header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
! .IP \fB\-d\fR\fIletters\fR 4
  .IX Item "-dletters"
  Says to make debugging dumps during compilation as specified by
  \&\fIletters\fR.  The flags documented here are those relevant to the
  preprocessor.  Other \fIletters\fR are interpreted
! by the compiler proper, or reserved for future versions of GCC, and so
  are silently ignored.  If you specify \fIletters\fR whose behavior
  conflicts, the result is undefined.
  .RS 4
! .IP \fB\-dM\fR 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \fB#define\fR
  directives for all the macros defined during the execution of the
*************** shows all the predefined macros.
*** 17773,17791 ****
  .Sp
  If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
  interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
! .IP "\fB\-dD\fR" 4
  .IX Item "-dD"
  Like \fB\-dM\fR except that it outputs \fIboth\fR the \fB#define\fR
  directives and the result of preprocessing.  Both kinds of output go to
  the standard output file.
! .IP "\fB\-dN\fR" 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP "\fB\-dI\fR" 4
  .IX Item "-dI"
  Output \fB#include\fR directives in addition to the result of
  preprocessing.
! .IP "\fB\-dU\fR" 4
  .IX Item "-dU"
  Like \fB\-dD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the
--- 17708,17726 ----
  .Sp
  If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
  interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
! .IP \fB\-dD\fR 4
  .IX Item "-dD"
  Like \fB\-dM\fR except that it outputs \fIboth\fR the \fB#define\fR
  directives and the result of preprocessing.  Both kinds of output go to
  the standard output file.
! .IP \fB\-dN\fR 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP \fB\-dI\fR 4
  .IX Item "-dI"
  Output \fB#include\fR directives in addition to the result of
  preprocessing.
! .IP \fB\-dU\fR 4
  .IX Item "-dU"
  Like \fB\-dD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the
*************** undefined at the time.
*** 17795,17847 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdebug\-cpp\fR" 4
  .IX Item "-fdebug-cpp"
! This option is only useful for debugging \s-1GCC.\s0  When used from \s-1CPP\s0 or with
  \&\fB\-E\fR, it dumps debugging information about location maps.  Every
  token in the output is preceded by the dump of the map its location
  belongs to.
  .Sp
! When used from \s-1GCC\s0 without \fB\-E\fR, this option has no effect.
! .IP "\fB\-Wp,\fR\fIoption\fR" 4
  .IX Item "-Wp,option"
  You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
  and pass \fIoption\fR directly through to the preprocessor.  If
  \&\fIoption\fR contains commas, it is split into multiple options at the
  commas.  However, many options are modified, translated or interpreted
  by the compiler driver before being passed to the preprocessor, and
! \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
  interface is undocumented and subject to change, so whenever possible
  you should avoid using \fB\-Wp\fR and let the driver handle the
  options instead.
  .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
  .IX Item "-Xpreprocessor option"
  Pass \fIoption\fR as an option to the preprocessor.  You can use this to
! supply system-specific preprocessor options that \s-1GCC\s0 does not 
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
  \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
! .IP "\fB\-no\-integrated\-cpp\fR" 4
  .IX Item "-no-integrated-cpp"
  Perform preprocessing as a separate pass before compilation.
! By default, \s-1GCC\s0 performs preprocessing as an integrated part of
  input tokenization and parsing.
  If this option is provided, the appropriate language front end
! (\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, \*(C+,
! and Objective-C, respectively) is instead invoked twice,
  once for preprocessing only and once for actual compilation
  of the preprocessed input.
  This option may be useful in conjunction with the \fB\-B\fR or
  \&\fB\-wrapper\fR options to specify an alternate preprocessor or
  perform additional processing of the program source between
  normal preprocessing and compilation.
! .IP "\fB\-flarge\-source\-files\fR" 4
  .IX Item "-flarge-source-files"
! Adjust \s-1GCC\s0 to expect large source files, at the expense of slower
  compilation and higher memory usage.
  .Sp
! Specifically, \s-1GCC\s0 normally tracks both column numbers and line numbers
  within source files and it normally prints both of these numbers in
  diagnostics.  However, once it has processed a certain number of source
  lines, it stops tracking column numbers and only tracks line numbers.
--- 17730,17782 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-fdebug\-cpp\fR 4
  .IX Item "-fdebug-cpp"
! This option is only useful for debugging GCC.  When used from CPP or with
  \&\fB\-E\fR, it dumps debugging information about location maps.  Every
  token in the output is preceded by the dump of the map its location
  belongs to.
  .Sp
! When used from GCC without \fB\-E\fR, this option has no effect.
! .IP \fB\-Wp,\fR\fIoption\fR 4
  .IX Item "-Wp,option"
  You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
  and pass \fIoption\fR directly through to the preprocessor.  If
  \&\fIoption\fR contains commas, it is split into multiple options at the
  commas.  However, many options are modified, translated or interpreted
  by the compiler driver before being passed to the preprocessor, and
! \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor\*(Aqs direct
  interface is undocumented and subject to change, so whenever possible
  you should avoid using \fB\-Wp\fR and let the driver handle the
  options instead.
  .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
  .IX Item "-Xpreprocessor option"
  Pass \fIoption\fR as an option to the preprocessor.  You can use this to
! supply system\-specific preprocessor options that GCC does not 
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
  \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
! .IP \fB\-no\-integrated\-cpp\fR 4
  .IX Item "-no-integrated-cpp"
  Perform preprocessing as a separate pass before compilation.
! By default, GCC performs preprocessing as an integrated part of
  input tokenization and parsing.
  If this option is provided, the appropriate language front end
! (\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, C++,
! and Objective\-C, respectively) is instead invoked twice,
  once for preprocessing only and once for actual compilation
  of the preprocessed input.
  This option may be useful in conjunction with the \fB\-B\fR or
  \&\fB\-wrapper\fR options to specify an alternate preprocessor or
  perform additional processing of the program source between
  normal preprocessing and compilation.
! .IP \fB\-flarge\-source\-files\fR 4
  .IX Item "-flarge-source-files"
! Adjust GCC to expect large source files, at the expense of slower
  compilation and higher memory usage.
  .Sp
! Specifically, GCC normally tracks both column numbers and line numbers
  within source files and it normally prints both of these numbers in
  diagnostics.  However, once it has processed a certain number of source
  lines, it stops tracking column numbers and only tracks line numbers.
*************** This means that diagnostics for later li
*** 17849,17866 ****
  It also means that options like \fB\-Wmisleading\-indentation\fR cease to work
  at that point, although the compiler prints a note if this happens.
  Passing \fB\-flarge\-source\-files\fR significantly increases the number
! of source lines that \s-1GCC\s0 can process before it stops tracking columns.
  .SS "Passing Options to the Assembler"
  .IX Subsection "Passing Options to the Assembler"
  You can pass options to the assembler.
! .IP "\fB\-Wa,\fR\fIoption\fR" 4
  .IX Item "-Wa,option"
  Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
  contains commas, it is split into multiple options at the commas.
  .IP "\fB\-Xassembler\fR \fIoption\fR" 4
  .IX Item "-Xassembler option"
  Pass \fIoption\fR as an option to the assembler.  You can use this to
! supply system-specific assembler options that \s-1GCC\s0 does not
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
--- 17784,17801 ----
  It also means that options like \fB\-Wmisleading\-indentation\fR cease to work
  at that point, although the compiler prints a note if this happens.
  Passing \fB\-flarge\-source\-files\fR significantly increases the number
! of source lines that GCC can process before it stops tracking columns.
  .SS "Passing Options to the Assembler"
  .IX Subsection "Passing Options to the Assembler"
  You can pass options to the assembler.
! .IP \fB\-Wa,\fR\fIoption\fR 4
  .IX Item "-Wa,option"
  Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
  contains commas, it is split into multiple options at the commas.
  .IP "\fB\-Xassembler\fR \fIoption\fR" 4
  .IX Item "-Xassembler option"
  Pass \fIoption\fR as an option to the assembler.  You can use this to
! supply system\-specific assembler options that GCC does not
  recognize.
  .Sp
  If you want to pass an option that takes an argument, you must use
*************** If you want to pass an option that takes
*** 17870,17898 ****
  These options come into play when the compiler links object files into
  an executable output file.  They are meaningless if the compiler is
  not doing a link step.
! .IP "\fIobject-file-name\fR" 4
  .IX Item "object-file-name"
  A file name that does not end in a special recognized suffix is
  considered to name an object file or library.  (Object files are
  distinguished from libraries by the linker according to the file
  contents.)  If linking is done, these object files are used as input
  to the linker.
! .IP "\fB\-c\fR" 4
  .IX Item "-c"
  .PD 0
! .IP "\fB\-S\fR" 4
  .IX Item "-S"
! .IP "\fB\-E\fR" 4
  .IX Item "-E"
  .PD
  If any of these options is used, then the linker is not run, and
  object file names should not be used as arguments.
! .IP "\fB\-flinker\-output=\fR\fItype\fR" 4
  .IX Item "-flinker-output=type"
! This option controls code generation of the link-time optimizer.  By
  default the linker output is automatically determined by the linker
  plugin.  For debugging the compiler and if incremental linking with a 
! non-LTO object file is desired, it may be useful to control the type
  manually.
  .Sp
  If \fItype\fR is \fBexec\fR, code generation produces a static
--- 17805,17833 ----
  These options come into play when the compiler links object files into
  an executable output file.  They are meaningless if the compiler is
  not doing a link step.
! .IP \fIobject\-file\-name\fR 4
  .IX Item "object-file-name"
  A file name that does not end in a special recognized suffix is
  considered to name an object file or library.  (Object files are
  distinguished from libraries by the linker according to the file
  contents.)  If linking is done, these object files are used as input
  to the linker.
! .IP \fB\-c\fR 4
  .IX Item "-c"
  .PD 0
! .IP \fB\-S\fR 4
  .IX Item "-S"
! .IP \fB\-E\fR 4
  .IX Item "-E"
  .PD
  If any of these options is used, then the linker is not run, and
  object file names should not be used as arguments.
! .IP \fB\-flinker\-output=\fR\fItype\fR 4
  .IX Item "-flinker-output=type"
! This option controls code generation of the link\-time optimizer.  By
  default the linker output is automatically determined by the linker
  plugin.  For debugging the compiler and if incremental linking with a 
! non\-LTO object file is desired, it may be useful to control the type
  manually.
  .Sp
  If \fItype\fR is \fBexec\fR, code generation produces a static
*************** disabled.
*** 17902,17908 ****
  If \fItype\fR is \fBdyn\fR, code generation produces a shared
  library.  In this case \fB\-fpic\fR or \fB\-fPIC\fR is preserved,
  but not enabled automatically.  This allows to build shared libraries
! without position-independent code on architectures where this is
  possible, i.e. on x86.
  .Sp
  If \fItype\fR is \fBpie\fR, code generation produces an \fB\-fpie\fR
--- 17837,17843 ----
  If \fItype\fR is \fBdyn\fR, code generation produces a shared
  library.  In this case \fB\-fpic\fR or \fB\-fPIC\fR is preserved,
  but not enabled automatically.  This allows to build shared libraries
! without position\-independent code on architectures where this is
  possible, i.e. on x86.
  .Sp
  If \fItype\fR is \fBpie\fR, code generation produces an \fB\-fpie\fR
*************** except that \fB\-fpie\fR is not disabled
*** 17911,17952 ****
  time.
  .Sp
  If \fItype\fR is \fBrel\fR, the compiler assumes that incremental linking is
! done.  The sections containing intermediate code for link-time optimization are
! merged, pre-optimized, and output to the resulting object file. In addition, if
  \&\fB\-ffat\-lto\-objects\fR is specified, binary code is produced for future
! non-LTO linking. The object file produced by incremental linking is smaller
  than a static library produced from the same object files.  At link time the
  result of incremental linking also loads faster than a static
  library assuming that the majority of objects in the library are used.
  .Sp
! Finally \fBnolto-rel\fR configures the compiler for incremental linking where
  code generation is forced, a final binary is produced, and the intermediate
! code for later link-time optimization is stripped. When multiple object files
  are linked together the resulting code is better optimized than with
! link-time optimizations disabled (for example, cross-module inlining 
  happens), but most of benefits of whole program optimizations are lost.
  .Sp
  During the incremental link (by \fB\-r\fR) the linker plugin defaults to
! \&\fBrel\fR. With current interfaces to \s-1GNU\s0 Binutils it is however not
! possible to incrementally link \s-1LTO\s0 objects and non-LTO objects into a single
  mixed object file.  If any of object files in incremental link cannot
! be used for link-time optimization, the linker plugin issues a warning and
! uses \fBnolto-rel\fR. To maintain whole program optimization, it is
  recommended to link such objects into static library instead. Alternatively it
! is possible to use H.J. Lu's binutils with support for mixed objects.
! .IP "\fB\-fuse\-ld=bfd\fR" 4
  .IX Item "-fuse-ld=bfd"
  Use the \fBbfd\fR linker instead of the default linker.
! .IP "\fB\-fuse\-ld=gold\fR" 4
  .IX Item "-fuse-ld=gold"
  Use the \fBgold\fR linker instead of the default linker.
! .IP "\fB\-fuse\-ld=lld\fR" 4
  .IX Item "-fuse-ld=lld"
! Use the \s-1LLVM\s0 \fBlld\fR linker instead of the default linker.
! .IP "\fB\-fuse\-ld=mold\fR" 4
  .IX Item "-fuse-ld=mold"
  Use the Modern Linker (\fBmold\fR) instead of the default linker.
! .IP "\fB\-l\fR\fIlibrary\fR" 4
  .IX Item "-llibrary"
  .PD 0
  .IP "\fB\-l\fR \fIlibrary\fR" 4
--- 17846,17887 ----
  time.
  .Sp
  If \fItype\fR is \fBrel\fR, the compiler assumes that incremental linking is
! done.  The sections containing intermediate code for link\-time optimization are
! merged, pre\-optimized, and output to the resulting object file. In addition, if
  \&\fB\-ffat\-lto\-objects\fR is specified, binary code is produced for future
! non\-LTO linking. The object file produced by incremental linking is smaller
  than a static library produced from the same object files.  At link time the
  result of incremental linking also loads faster than a static
  library assuming that the majority of objects in the library are used.
  .Sp
! Finally \fBnolto\-rel\fR configures the compiler for incremental linking where
  code generation is forced, a final binary is produced, and the intermediate
! code for later link\-time optimization is stripped. When multiple object files
  are linked together the resulting code is better optimized than with
! link\-time optimizations disabled (for example, cross\-module inlining 
  happens), but most of benefits of whole program optimizations are lost.
  .Sp
  During the incremental link (by \fB\-r\fR) the linker plugin defaults to
! \&\fBrel\fR. With current interfaces to GNU Binutils it is however not
! possible to incrementally link LTO objects and non\-LTO objects into a single
  mixed object file.  If any of object files in incremental link cannot
! be used for link\-time optimization, the linker plugin issues a warning and
! uses \fBnolto\-rel\fR. To maintain whole program optimization, it is
  recommended to link such objects into static library instead. Alternatively it
! is possible to use H.J. Lu\*(Aqs binutils with support for mixed objects.
! .IP \fB\-fuse\-ld=bfd\fR 4
  .IX Item "-fuse-ld=bfd"
  Use the \fBbfd\fR linker instead of the default linker.
! .IP \fB\-fuse\-ld=gold\fR 4
  .IX Item "-fuse-ld=gold"
  Use the \fBgold\fR linker instead of the default linker.
! .IP \fB\-fuse\-ld=lld\fR 4
  .IX Item "-fuse-ld=lld"
! Use the LLVM \fBlld\fR linker instead of the default linker.
! .IP \fB\-fuse\-ld=mold\fR 4
  .IX Item "-fuse-ld=mold"
  Use the Modern Linker (\fBmold\fR) instead of the default linker.
! .IP \fB\-l\fR\fIlibrary\fR 4
  .IX Item "-llibrary"
  .PD 0
  .IP "\fB\-l\fR \fIlibrary\fR" 4
*************** Use the Modern Linker (\fBmold\fR) inste
*** 17954,17972 ****
  .PD
  Search the library named \fIlibrary\fR when linking.  (The second
  alternative with the library as a separate argument is only for
! \&\s-1POSIX\s0 compliance and is not recommended.)
  .Sp
! The \fB\-l\fR option is passed directly to the linker by \s-1GCC.\s0  Refer
  to your linker documentation for exact details.  The general
! description below applies to the \s-1GNU\s0 linker.
  .Sp
  The linker searches a standard list of directories for the library.
  The directories searched include several standard system directories
  plus any that you specify with \fB\-L\fR.
  .Sp
  Static libraries are archives of object files, and have file names
! like \fIlib\fIlibrary\fI.a\fR.  Some targets also support shared
! libraries, which typically have names like \fIlib\fIlibrary\fI.so\fR.
  If both static and shared libraries are found, the linker gives
  preference to linking with the shared library unless the
  \&\fB\-static\fR option is used.
--- 17889,17907 ----
  .PD
  Search the library named \fIlibrary\fR when linking.  (The second
  alternative with the library as a separate argument is only for
! POSIX compliance and is not recommended.)
  .Sp
! The \fB\-l\fR option is passed directly to the linker by GCC.  Refer
  to your linker documentation for exact details.  The general
! description below applies to the GNU linker.
  .Sp
  The linker searches a standard list of directories for the library.
  The directories searched include several standard system directories
  plus any that you specify with \fB\-L\fR.
  .Sp
  Static libraries are archives of object files, and have file names
! like \fIliblibrary.a\fR.  Some targets also support shared
! libraries, which typically have names like \fIliblibrary.so\fR.
  If both static and shared libraries are found, the linker gives
  preference to linking with the shared library unless the
  \&\fB\-static\fR option is used.
*************** linker searches and processes libraries
*** 17976,17991 ****
  are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
  after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
  to functions in \fBz\fR, those functions may not be loaded.
! .IP "\fB\-lobjc\fR" 4
  .IX Item "-lobjc"
  You need this special case of the \fB\-l\fR option in order to
! link an Objective-C or Objective\-\*(C+ program.
! .IP "\fB\-nostartfiles\fR" 4
  .IX Item "-nostartfiles"
  Do not use the standard system startup files when linking.
  The standard system libraries are used normally, unless \fB\-nostdlib\fR,
  \&\fB\-nolibc\fR, or \fB\-nodefaultlibs\fR is used.
! .IP "\fB\-nodefaultlibs\fR" 4
  .IX Item "-nodefaultlibs"
  Do not use the standard system libraries when linking.
  Only the libraries you specify are passed to the linker, and options
--- 17911,17926 ----
  are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
  after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
  to functions in \fBz\fR, those functions may not be loaded.
! .IP \fB\-lobjc\fR 4
  .IX Item "-lobjc"
  You need this special case of the \fB\-l\fR option in order to
! link an Objective\-C or Objective\-C++ program.
! .IP \fB\-nostartfiles\fR 4
  .IX Item "-nostartfiles"
  Do not use the standard system startup files when linking.
  The standard system libraries are used normally, unless \fB\-nostdlib\fR,
  \&\fB\-nolibc\fR, or \fB\-nodefaultlibs\fR is used.
! .IP \fB\-nodefaultlibs\fR 4
  .IX Item "-nodefaultlibs"
  Do not use the standard system libraries when linking.
  Only the libraries you specify are passed to the linker, and options
*************** The compiler may generate calls to \f(CW
*** 17999,18005 ****
  These entries are usually resolved by entries in
  libc.  These entry points should be supplied through some other
  mechanism when this option is specified.
! .IP "\fB\-nolibc\fR" 4
  .IX Item "-nolibc"
  Do not use the C library or system libraries tightly coupled with it when
  linking.  Still link with the startup files, \fIlibgcc\fR or toolchain
--- 17934,17940 ----
  These entries are usually resolved by entries in
  libc.  These entry points should be supplied through some other
  mechanism when this option is specified.
! .IP \fB\-nolibc\fR 4
  .IX Item "-nolibc"
  Do not use the C library or system libraries tightly coupled with it when
  linking.  Still link with the startup files, \fIlibgcc\fR or toolchain
*************** or \fIlibstdc++\fR unless options preven
*** 18008,18016 ****
  well.  This typically removes \fB\-lc\fR from the link command line, as well
  as system libraries that normally go with it and become meaningless when
  absence of a C library is assumed, for example \fB\-lpthread\fR or
! \&\fB\-lm\fR in some configurations.  This is intended for bare-board
  targets when there is indeed no C library available.
! .IP "\fB\-nostdlib\fR" 4
  .IX Item "-nostdlib"
  Do not use the standard system startup files or libraries when linking.
  No startup files and only the libraries you specify are passed to
--- 17943,17951 ----
  well.  This typically removes \fB\-lc\fR from the link command line, as well
  as system libraries that normally go with it and become meaningless when
  absence of a C library is assumed, for example \fB\-lpthread\fR or
! \&\fB\-lm\fR in some configurations.  This is intended for bare\-board
  targets when there is indeed no C library available.
! .IP \fB\-nostdlib\fR 4
  .IX Item "-nostdlib"
  Do not use the standard system startup files or libraries when linking.
  No startup files and only the libraries you specify are passed to
*************** mechanism when this option is specified.
*** 18025,18062 ****
  .Sp
  One of the standard libraries bypassed by \fB\-nostdlib\fR and
  \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
! which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
  needs for some languages.
  .Sp
  In most cases, you need \fIlibgcc.a\fR even when you want to avoid
  other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
  or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
! This ensures that you have no unresolved references to internal \s-1GCC\s0
  library subroutines.
! (An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure \*(C+
  constructors are called.)
! .IP "\fB\-nostdlib++\fR" 4
  .IX Item "-nostdlib++"
! Do not implicitly link with standard \*(C+ libraries.
  .IP "\fB\-e\fR \fIentry\fR" 4
  .IX Item "-e entry"
  .PD 0
! .IP "\fB\-\-entry=\fR\fIentry\fR" 4
  .IX Item "--entry=entry"
  .PD
  Specify that the program entry point is \fIentry\fR.  The argument is
! interpreted by the linker; the \s-1GNU\s0 linker accepts either a symbol name
  or an address.
! .IP "\fB\-pie\fR" 4
  .IX Item "-pie"
  Produce a dynamically linked position independent executable on targets
  that support it.  For predictable results, you must also specify the same
  set of options used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
  or model suboptions) when you specify this linker option.
! .IP "\fB\-no\-pie\fR" 4
  .IX Item "-no-pie"
! Don't produce a dynamically linked position independent executable.
! .IP "\fB\-static\-pie\fR" 4
  .IX Item "-static-pie"
  Produce a static position independent executable on targets that support
  it.  A static position independent executable is similar to a static
--- 17960,17997 ----
  .Sp
  One of the standard libraries bypassed by \fB\-nostdlib\fR and
  \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
! which GCC uses to overcome shortcomings of particular machines, or special
  needs for some languages.
  .Sp
  In most cases, you need \fIlibgcc.a\fR even when you want to avoid
  other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
  or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
! This ensures that you have no unresolved references to internal GCC
  library subroutines.
! (An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure C++
  constructors are called.)
! .IP \fB\-nostdlib++\fR 4
  .IX Item "-nostdlib++"
! Do not implicitly link with standard C++ libraries.
  .IP "\fB\-e\fR \fIentry\fR" 4
  .IX Item "-e entry"
  .PD 0
! .IP \fB\-\-entry=\fR\fIentry\fR 4
  .IX Item "--entry=entry"
  .PD
  Specify that the program entry point is \fIentry\fR.  The argument is
! interpreted by the linker; the GNU linker accepts either a symbol name
  or an address.
! .IP \fB\-pie\fR 4
  .IX Item "-pie"
  Produce a dynamically linked position independent executable on targets
  that support it.  For predictable results, you must also specify the same
  set of options used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
  or model suboptions) when you specify this linker option.
! .IP \fB\-no\-pie\fR 4
  .IX Item "-no-pie"
! Don\*(Aqt produce a dynamically linked position independent executable.
! .IP \fB\-static\-pie\fR 4
  .IX Item "-static-pie"
  Produce a static position independent executable on targets that support
  it.  A static position independent executable is similar to a static
*************** executable, but can be loaded at any add
*** 18064,18106 ****
  For predictable results, you must also specify the same set of options
  used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR, or model
  suboptions) when you specify this linker option.
! .IP "\fB\-pthread\fR" 4
  .IX Item "-pthread"
! Link with the \s-1POSIX\s0 threads library.  This option is supported on 
  GNU/Linux targets, most other Unix derivatives, and also on 
  x86 Cygwin and MinGW targets.  On some targets this option also sets 
  flags for the preprocessor, so it should be used consistently for both
  compilation and linking.
! .IP "\fB\-r\fR" 4
  .IX Item "-r"
  Produce a relocatable object as output.  This is also known as partial
  linking.
! .IP "\fB\-rdynamic\fR" 4
  .IX Item "-rdynamic"
! Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
  that support it. This instructs the linker to add all symbols, not
  only used ones, to the dynamic symbol table. This option is needed
  for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
  from within a program.
! .IP "\fB\-s\fR" 4
  .IX Item "-s"
  Remove all symbol table and relocation information from the executable.
! .IP "\fB\-static\fR" 4
  .IX Item "-static"
  On systems that support dynamic linking, this overrides \fB\-pie\fR
  and prevents linking with the shared libraries.  On other systems, this
  option has no effect.
! .IP "\fB\-shared\fR" 4
  .IX Item "-shared"
  Produce a shared object which can then be linked with other objects to
  form an executable.  Not all systems support this option.  For predictable
  results, you must also specify the same set of options used for compilation
  (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
  you specify this linker option.[1]
! .IP "\fB\-shared\-libgcc\fR" 4
  .IX Item "-shared-libgcc"
  .PD 0
! .IP "\fB\-static\-libgcc\fR" 4
  .IX Item "-static-libgcc"
  .PD
  On systems that provide \fIlibgcc\fR as a shared library, these options
--- 17999,18041 ----
  For predictable results, you must also specify the same set of options
  used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR, or model
  suboptions) when you specify this linker option.
! .IP \fB\-pthread\fR 4
  .IX Item "-pthread"
! Link with the POSIX threads library.  This option is supported on 
  GNU/Linux targets, most other Unix derivatives, and also on 
  x86 Cygwin and MinGW targets.  On some targets this option also sets 
  flags for the preprocessor, so it should be used consistently for both
  compilation and linking.
! .IP \fB\-r\fR 4
  .IX Item "-r"
  Produce a relocatable object as output.  This is also known as partial
  linking.
! .IP \fB\-rdynamic\fR 4
  .IX Item "-rdynamic"
! Pass the flag \fB\-export\-dynamic\fR to the ELF linker, on targets
  that support it. This instructs the linker to add all symbols, not
  only used ones, to the dynamic symbol table. This option is needed
  for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
  from within a program.
! .IP \fB\-s\fR 4
  .IX Item "-s"
  Remove all symbol table and relocation information from the executable.
! .IP \fB\-static\fR 4
  .IX Item "-static"
  On systems that support dynamic linking, this overrides \fB\-pie\fR
  and prevents linking with the shared libraries.  On other systems, this
  option has no effect.
! .IP \fB\-shared\fR 4
  .IX Item "-shared"
  Produce a shared object which can then be linked with other objects to
  form an executable.  Not all systems support this option.  For predictable
  results, you must also specify the same set of options used for compilation
  (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
  you specify this linker option.[1]
! .IP \fB\-shared\-libgcc\fR 4
  .IX Item "-shared-libgcc"
  .PD 0
! .IP \fB\-static\-libgcc\fR 4
  .IX Item "-static-libgcc"
  .PD
  On systems that provide \fIlibgcc\fR as a shared library, these options
*************** across different shared libraries.  In t
*** 18115,18127 ****
  as well as the application itself should use the shared \fIlibgcc\fR.
  .Sp
  Therefore, the G++ driver automatically adds \fB\-shared\-libgcc\fR
! whenever you build a shared library or a main executable, because \*(C+
  programs typically use exceptions, so this is the right thing to do.
  .Sp
! If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
  find that they are not always linked with the shared \fIlibgcc\fR.
! If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
! or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
  it links the shared version of \fIlibgcc\fR into shared libraries
  by default.  Otherwise, it takes advantage of the linker and optimizes
  away the linking with the shared version of \fIlibgcc\fR, linking with
--- 18050,18062 ----
  as well as the application itself should use the shared \fIlibgcc\fR.
  .Sp
  Therefore, the G++ driver automatically adds \fB\-shared\-libgcc\fR
! whenever you build a shared library or a main executable, because C++
  programs typically use exceptions, so this is the right thing to do.
  .Sp
! If, instead, you use the GCC driver to create shared libraries, you may
  find that they are not always linked with the shared \fIlibgcc\fR.
! If GCC finds, at its configuration time, that you have a non\-GNU linker
! or a GNU linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
  it links the shared version of \fIlibgcc\fR into shared libraries
  by default.  Otherwise, it takes advantage of the linker and optimizes
  away the linking with the shared version of \fIlibgcc\fR, linking with
*************** However, if a library or main executable
*** 18133,18177 ****
  exceptions, you must link it using the G++ driver, or using the option
  \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
  \&\fIlibgcc\fR.
! .IP "\fB\-static\-libasan\fR" 4
  .IX Item "-static-libasan"
  When the \fB\-fsanitize=address\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBlibasan\fR.  If
  \&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the \s-1GCC\s0
  driver to link \fIlibasan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-libtsan\fR" 4
  .IX Item "-static-libtsan"
  When the \fB\-fsanitize=thread\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBlibtsan\fR.  If
  \&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the \s-1GCC\s0
  driver to link \fIlibtsan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-liblsan\fR" 4
  .IX Item "-static-liblsan"
  When the \fB\-fsanitize=leak\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBliblsan\fR.  If
  \&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the \s-1GCC\s0
  driver to link \fIliblsan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-libubsan\fR" 4
  .IX Item "-static-libubsan"
  When the \fB\-fsanitize=undefined\fR option is used to link a program,
! the \s-1GCC\s0 driver automatically links against \fBlibubsan\fR.  If
  \&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the \s-1GCC\s0
  driver to link \fIlibubsan\fR statically, without necessarily linking
  other libraries statically.
! .IP "\fB\-static\-libstdc++\fR" 4
  .IX Item "-static-libstdc++"
! When the \fBg++\fR program is used to link a \*(C+ program, it
  normally automatically links against \fBlibstdc++\fR.  If
  \&\fIlibstdc++\fR is available as a shared library, and the
  \&\fB\-static\fR option is not used, then this links against the
--- 18068,18112 ----
  exceptions, you must link it using the G++ driver, or using the option
  \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
  \&\fIlibgcc\fR.
! .IP \fB\-static\-libasan\fR 4
  .IX Item "-static-libasan"
  When the \fB\-fsanitize=address\fR option is used to link a program,
! the GCC driver automatically links against \fBlibasan\fR.  If
  \&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the GCC
  driver to link \fIlibasan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-libtsan\fR 4
  .IX Item "-static-libtsan"
  When the \fB\-fsanitize=thread\fR option is used to link a program,
! the GCC driver automatically links against \fBlibtsan\fR.  If
  \&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the GCC
  driver to link \fIlibtsan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-liblsan\fR 4
  .IX Item "-static-liblsan"
  When the \fB\-fsanitize=leak\fR option is used to link a program,
! the GCC driver automatically links against \fBliblsan\fR.  If
  \&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the GCC
  driver to link \fIliblsan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-libubsan\fR 4
  .IX Item "-static-libubsan"
  When the \fB\-fsanitize=undefined\fR option is used to link a program,
! the GCC driver automatically links against \fBlibubsan\fR.  If
  \&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
  option is not used, then this links against the shared version of
! \&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the GCC
  driver to link \fIlibubsan\fR statically, without necessarily linking
  other libraries statically.
! .IP \fB\-static\-libstdc++\fR 4
  .IX Item "-static-libstdc++"
! When the \fBg++\fR program is used to link a C++ program, it
  normally automatically links against \fBlibstdc++\fR.  If
  \&\fIlibstdc++\fR is available as a shared library, and the
  \&\fB\-static\fR option is not used, then this links against the
*************** the program without going all the way to
*** 18181,18187 ****
  \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
  link \fIlibstdc++\fR statically, without necessarily linking other
  libraries statically.
! .IP "\fB\-symbolic\fR" 4
  .IX Item "-symbolic"
  Bind references to global symbols when building a shared object.  Warn
  about any unresolved references (unless overridden by the link editor
--- 18116,18122 ----
  \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
  link \fIlibstdc++\fR statically, without necessarily linking other
  libraries statically.
! .IP \fB\-symbolic\fR 4
  .IX Item "-symbolic"
  Bind references to global symbols when building a shared object.  Warn
  about any unresolved references (unless overridden by the link editor
*************** this option.
*** 18190,18223 ****
  .IP "\fB\-T\fR \fIscript\fR" 4
  .IX Item "-T script"
  Use \fIscript\fR as the linker script.  This option is supported by most
! systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
  targets without an operating system, the \fB\-T\fR option may be required
  when linking to avoid references to undefined symbols.
  .IP "\fB\-Xlinker\fR \fIoption\fR" 4
  .IX Item "-Xlinker option"
  Pass \fIoption\fR as an option to the linker.  You can use this to
! supply system-specific linker options that \s-1GCC\s0 does not recognize.
  .Sp
  If you want to pass an option that takes a separate argument, you must use
  \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
  For example, to pass \fB\-assert definitions\fR, you must write
  \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
! \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
  string as a single argument, which is not what the linker expects.
  .Sp
! When using the \s-1GNU\s0 linker, it is usually more convenient to pass
  arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
  syntax than as separate arguments.  For example, you can specify
  \&\fB\-Xlinker \-Map=output.map\fR rather than
  \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
! this syntax for command-line options.
! .IP "\fB\-Wl,\fR\fIoption\fR" 4
  .IX Item "-Wl,option"
  Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
  commas, it is split into multiple options at the commas.  You can use this
  syntax to pass an argument to the option.
  For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
! linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
  \&\fB\-Wl,\-Map=output.map\fR.
  .IP "\fB\-u\fR \fIsymbol\fR" 4
  .IX Item "-u symbol"
--- 18125,18158 ----
  .IP "\fB\-T\fR \fIscript\fR" 4
  .IX Item "-T script"
  Use \fIscript\fR as the linker script.  This option is supported by most
! systems using the GNU linker.  On some targets, such as bare\-board
  targets without an operating system, the \fB\-T\fR option may be required
  when linking to avoid references to undefined symbols.
  .IP "\fB\-Xlinker\fR \fIoption\fR" 4
  .IX Item "-Xlinker option"
  Pass \fIoption\fR as an option to the linker.  You can use this to
! supply system\-specific linker options that GCC does not recognize.
  .Sp
  If you want to pass an option that takes a separate argument, you must use
  \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
  For example, to pass \fB\-assert definitions\fR, you must write
  \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
! \&\fB\-Xlinker "\-assert definitions"\fR, because this passes the entire
  string as a single argument, which is not what the linker expects.
  .Sp
! When using the GNU linker, it is usually more convenient to pass
  arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
  syntax than as separate arguments.  For example, you can specify
  \&\fB\-Xlinker \-Map=output.map\fR rather than
  \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
! this syntax for command\-line options.
! .IP \fB\-Wl,\fR\fIoption\fR 4
  .IX Item "-Wl,option"
  Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
  commas, it is split into multiple options at the commas.  You can use this
  syntax to pass an argument to the option.
  For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
! linker.  When using the GNU linker, you can also get the same effect with
  \&\fB\-Wl,\-Map=output.map\fR.
  .IP "\fB\-u\fR \fIsymbol\fR" 4
  .IX Item "-u symbol"
*************** or \f(CW$SYSROOT\fR is replaced by the s
*** 18250,18289 ****
  \&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .Sp
  Directories specified with \fB\-iquote\fR apply only to the quote 
! form of the directive, \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
  Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
  or \fB\-idirafter\fR apply to lookup for both the
! \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR and
! \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR directives.
  .Sp
  You can specify any number or combination of these options on the 
  command line to search for header files in several directories.  
  The lookup order is as follows:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  For the quote form of the include directive, the directory of the current
  file is searched first.
! .IP "2." 4
  .IX Item "2."
  For the quote form of the include directive, the directories specified
! by \fB\-iquote\fR options are searched in left-to-right order,
  as they appear on the command line.
! .IP "3." 4
  .IX Item "3."
  Directories specified with \fB\-I\fR options are scanned in
! left-to-right order.
! .IP "4." 4
  .IX Item "4."
  Directories specified with \fB\-isystem\fR options are scanned in
! left-to-right order.
! .IP "5." 4
  .IX Item "5."
  Standard system directories are scanned.
! .IP "6." 4
  .IX Item "6."
  Directories specified with \fB\-idirafter\fR options are scanned in
! left-to-right order.
  .RE
  .RS 4
  .Sp
--- 18185,18224 ----
  \&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .Sp
  Directories specified with \fB\-iquote\fR apply only to the quote 
! form of the directive, \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR.
  Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
  or \fB\-idirafter\fR apply to lookup for both the
! \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR and
! \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR directives.
  .Sp
  You can specify any number or combination of these options on the 
  command line to search for header files in several directories.  
  The lookup order is as follows:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  For the quote form of the include directive, the directory of the current
  file is searched first.
! .IP 2. 4
  .IX Item "2."
  For the quote form of the include directive, the directories specified
! by \fB\-iquote\fR options are searched in left\-to\-right order,
  as they appear on the command line.
! .IP 3. 4
  .IX Item "3."
  Directories specified with \fB\-I\fR options are scanned in
! left\-to\-right order.
! .IP 4. 4
  .IX Item "4."
  Directories specified with \fB\-isystem\fR options are scanned in
! left\-to\-right order.
! .IP 5. 4
  .IX Item "5."
  Standard system directories are scanned.
! .IP 6. 4
  .IX Item "6."
  Directories specified with \fB\-idirafter\fR options are scanned in
! left\-to\-right order.
  .RE
  .RS 4
  .Sp
*************** You can use \fB\-I\fR to override a syst
*** 18291,18297 ****
  file, substituting your own version, since these directories are
  searched before the standard system header file directories.  
  However, you should
! not use this option to add directories that contain vendor-supplied
  system header files; use \fB\-isystem\fR for that.
  .Sp
  The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
--- 18226,18232 ----
  file, substituting your own version, since these directories are
  searched before the standard system header file directories.  
  However, you should
! not use this option to add directories that contain vendor\-supplied
  system header files; use \fB\-isystem\fR for that.
  .Sp
  The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
*************** If a standard system include directory,
*** 18302,18314 ****
  \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
  option is ignored.  The directory is still searched but as a
  system directory at its normal position in the system include chain.
! This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
  the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
  changed.
  If you really need to change the search order for system directories,
  use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
  .RE
! .IP "\fB\-I\-\fR" 4
  .IX Item "-I-"
  Split the include path.
  This option has been deprecated.  Please use \fB\-iquote\fR instead for
--- 18237,18249 ----
  \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
  option is ignored.  The directory is still searched but as a
  system directory at its normal position in the system include chain.
! This is to ensure that GCC\*(Aqs procedure to fix buggy system headers and
  the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
  changed.
  If you really need to change the search order for system directories,
  use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
  .RE
! .IP \fB\-I\-\fR 4
  .IX Item "-I-"
  Split the include path.
  This option has been deprecated.  Please use \fB\-iquote\fR instead for
*************** option.
*** 18317,18329 ****
  .Sp
  Any directories specified with \fB\-I\fR
  options before \fB\-I\-\fR are searched only for headers requested with
! \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
! \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
  specified with \fB\-I\fR options after the \fB\-I\-\fR, those
  directories are searched for all \fB#include\fR directives.
  .Sp
  In addition, \fB\-I\-\fR inhibits the use of the directory of the current
! file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
--- 18252,18264 ----
  .Sp
  Any directories specified with \fB\-I\fR
  options before \fB\-I\-\fR are searched only for headers requested with
! \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR; they are not searched for
! \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR.  If additional directories are
  specified with \fB\-I\fR options after the \fB\-I\-\fR, those
  directories are searched for all \fB#include\fR directives.
  .Sp
  In addition, \fB\-I\-\fR inhibits the use of the directory of the current
! file directory as the first search directory for \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
*************** information.
*** 18348,18377 ****
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the directory containing
! target-specific \*(C+ headers.
! .IP "\fB\-nostdinc\fR" 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files.
  Only the directories explicitly specified with \fB\-I\fR,
  \&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
  options (and the directory of the current file, if appropriate) 
  are searched.
! .IP "\fB\-nostdinc++\fR" 4
  .IX Item "-nostdinc++"
! Do not search for header files in the \*(C+\-specific standard directories,
  but do still search the other standard directories.  (This option is
! used when building the \*(C+ library.)
! .IP "\fB\-iplugindir=\fR\fIdir\fR" 4
  .IX Item "-iplugindir=dir"
  Set the directory to search for plugins that are passed
  by \fB\-fplugin=\fR\fIname\fR instead of
  \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
  to be used by the user, but only passed by the driver.
! .IP "\fB\-L\fR\fIdir\fR" 4
  .IX Item "-Ldir"
  Add directory \fIdir\fR to the list of directories to be searched
  for \fB\-l\fR.
! .IP "\fB\-B\fR\fIprefix\fR" 4
  .IX Item "-Bprefix"
  This option specifies where to find the executables, libraries,
  include files, and data files of the compiler itself.
--- 18283,18312 ----
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the directory containing
! target\-specific C++ headers.
! .IP \fB\-nostdinc\fR 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files.
  Only the directories explicitly specified with \fB\-I\fR,
  \&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
  options (and the directory of the current file, if appropriate) 
  are searched.
! .IP \fB\-nostdinc++\fR 4
  .IX Item "-nostdinc++"
! Do not search for header files in the C++\-specific standard directories,
  but do still search the other standard directories.  (This option is
! used when building the C++ library.)
! .IP \fB\-iplugindir=\fR\fIdir\fR 4
  .IX Item "-iplugindir=dir"
  Set the directory to search for plugins that are passed
  by \fB\-fplugin=\fR\fIname\fR instead of
  \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
  to be used by the user, but only passed by the driver.
! .IP \fB\-L\fR\fIdir\fR 4
  .IX Item "-Ldir"
  Add directory \fIdir\fR to the list of directories to be searched
  for \fB\-l\fR.
! .IP \fB\-B\fR\fIprefix\fR 4
  .IX Item "-Bprefix"
  This option specifies where to find the executables, libraries,
  include files, and data files of the compiler itself.
*************** is not specified, the driver tries two s
*** 18388,18394 ****
  \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
  those results in a file name that is found, the unmodified program
  name is searched for using the directories specified in your
! \&\fB\s-1PATH\s0\fR environment variable.
  .Sp
  The compiler checks to see if the path provided by \fB\-B\fR
  refers to a directory, and if necessary it adds a directory
--- 18323,18329 ----
  \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
  those results in a file name that is found, the unmodified program
  name is searched for using the directories specified in your
! \&\fBPATH\fR environment variable.
  .Sp
  The compiler checks to see if the path provided by \fB\-B\fR
  refers to a directory, and if necessary it adds a directory
*************** standard prefixes above are tried, and t
*** 18407,18449 ****
  out of the link if it is not found by those means.
  .Sp
  Another way to specify a prefix much like the \fB\-B\fR prefix is to use
! the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
  .Sp
  As a special kludge, if the path provided by \fB\-B\fR is
! \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
  9, then it is replaced by \fI[dir/]include\fR.  This is to help
! with boot-strapping the compiler.
! .IP "\fB\-no\-canonical\-prefixes\fR" 4
  .IX Item "-no-canonical-prefixes"
  Do not expand any symbolic links, resolve references to \fB/../\fR
  or \fB/./\fR, or make the path absolute when generating a relative
  prefix.
! .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
  .IX Item "--sysroot=dir"
  Use \fIdir\fR as the logical root directory for headers and libraries.
  For example, if the compiler normally searches for headers in
  \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
! searches \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
  .Sp
  If you use both this option and the \fB\-isysroot\fR option, then
  the \fB\-\-sysroot\fR option applies to libraries, but the
  \&\fB\-isysroot\fR option applies to header files.
  .Sp
! The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
  for this option.  If your linker does not support this option, the
  header file aspect of \fB\-\-sysroot\fR still works, but the
  library aspect does not.
! .IP "\fB\-\-no\-sysroot\-suffix\fR" 4
  .IX Item "--no-sysroot-suffix"
  For some targets, a suffix is added to the root directory specified
  with \fB\-\-sysroot\fR, depending on the other options used, so that
  headers may for example be found in
! \&\fI\fIdir\fI/\fIsuffix\fI/usr/include\fR instead of
! \&\fI\fIdir\fI/usr/include\fR.  This option disables the addition of
  such a suffix.
  .SS "Options for Code Generation Conventions"
  .IX Subsection "Options for Code Generation Conventions"
! These machine-independent options control the interface conventions
  used in code generation.
  .PP
  Most of them have both positive and negative forms; the negative form
--- 18342,18384 ----
  out of the link if it is not found by those means.
  .Sp
  Another way to specify a prefix much like the \fB\-B\fR prefix is to use
! the environment variable \fBGCC_EXEC_PREFIX\fR.
  .Sp
  As a special kludge, if the path provided by \fB\-B\fR is
! \&\fI[dir/]stageN/\fR, where \fIN\fR is a number in the range 0 to
  9, then it is replaced by \fI[dir/]include\fR.  This is to help
! with boot\-strapping the compiler.
! .IP \fB\-no\-canonical\-prefixes\fR 4
  .IX Item "-no-canonical-prefixes"
  Do not expand any symbolic links, resolve references to \fB/../\fR
  or \fB/./\fR, or make the path absolute when generating a relative
  prefix.
! .IP \fB\-\-sysroot=\fR\fIdir\fR 4
  .IX Item "--sysroot=dir"
  Use \fIdir\fR as the logical root directory for headers and libraries.
  For example, if the compiler normally searches for headers in
  \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
! searches \fIdir/usr/include\fR and \fIdir/usr/lib\fR.
  .Sp
  If you use both this option and the \fB\-isysroot\fR option, then
  the \fB\-\-sysroot\fR option applies to libraries, but the
  \&\fB\-isysroot\fR option applies to header files.
  .Sp
! The GNU linker (beginning with version 2.16) has the necessary support
  for this option.  If your linker does not support this option, the
  header file aspect of \fB\-\-sysroot\fR still works, but the
  library aspect does not.
! .IP \fB\-\-no\-sysroot\-suffix\fR 4
  .IX Item "--no-sysroot-suffix"
  For some targets, a suffix is added to the root directory specified
  with \fB\-\-sysroot\fR, depending on the other options used, so that
  headers may for example be found in
! \&\fIdir/suffix/usr/include\fR instead of
! \&\fIdir/usr/include\fR.  This option disables the addition of
  such a suffix.
  .SS "Options for Code Generation Conventions"
  .IX Subsection "Options for Code Generation Conventions"
! These machine\-independent options control the interface conventions
  used in code generation.
  .PP
  Most of them have both positive and negative forms; the negative form
*************** of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In
*** 18451,18457 ****
  one of the forms is listed\-\-\-the one that is not the default.  You
  can figure out the other form by either removing \fBno\-\fR or adding
  it.
! .IP "\fB\-fstack\-reuse=\fR\fIreuse-level\fR" 4
  .IX Item "-fstack-reuse=reuse-level"
  This option controls stack space reuse for user declared local/auto variables
  and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
--- 18386,18392 ----
  one of the forms is listed\-\-\-the one that is not the default.  You
  can figure out the other form by either removing \fBno\-\fR or adding
  it.
! .IP \fB\-fstack\-reuse=\fR\fIreuse\-level\fR 4
  .IX Item "-fstack-reuse=reuse-level"
  This option controls stack space reuse for user declared local/auto variables
  and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
*************** Another example:
*** 18519,18607 ****
  \&           }
  .Ve
  .Sp
! The lifetime of a compiler generated temporary is well defined by the \*(C+
  standard. When a lifetime of a temporary ends, and if the temporary lives
  in memory, the optimizing compiler has the freedom to reuse its stack
  space with other temporaries or scoped local variables whose live range
  does not overlap with it. However some of the legacy code relies on
! the behavior of older compilers in which temporaries' stack space is
  not reused, the aggressive stack reuse can lead to runtime errors. This
  option is used to control the temporary stack reuse optimization.
! .IP "\fB\-ftrapv\fR" 4
  .IX Item "-ftrapv"
  This option generates traps for signed overflow on addition, subtraction,
  multiplication operations.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command-line
  results in \fB\-ftrapv\fR being effective.
! .IP "\fB\-fwrapv\fR" 4
  .IX Item "-fwrapv"
  This option instructs the compiler to assume that signed arithmetic
  overflow of addition, subtraction and multiplication wraps around
! using twos-complement representation.  This flag enables some optimizations
  and disables others.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command-line
  results in \fB\-ftrapv\fR being effective.
! .IP "\fB\-fwrapv\-pointer\fR" 4
  .IX Item "-fwrapv-pointer"
  This option instructs the compiler to assume that pointer arithmetic
! overflow on addition and subtraction wraps around using twos-complement
  representation.  This flag disables some optimizations which assume
  pointer overflow is invalid.
! .IP "\fB\-fstrict\-overflow\fR" 4
  .IX Item "-fstrict-overflow"
  This option implies \fB\-fno\-wrapv\fR \fB\-fno\-wrapv\-pointer\fR and when
  negated implies \fB\-fwrapv\fR \fB\-fwrapv\-pointer\fR.
! .IP "\fB\-fexceptions\fR" 4
  .IX Item "-fexceptions"
  Enable exception handling.  Generates extra code needed to propagate
! exceptions.  For some targets, this implies \s-1GCC\s0 generates frame
  unwind information for all functions, which can produce significant data
  size overhead, although it does not affect execution.  If you do not
! specify this option, \s-1GCC\s0 enables it by default for languages like
! \&\*(C+ that normally require exception handling, and disables it for
  languages like C that do not normally require it.  However, you may need
  to enable this option when compiling C code that needs to interoperate
! properly with exception handlers written in \*(C+.  You may also wish to
! disable this option if you are compiling older \*(C+ programs that don't
  use exception handling.
! .IP "\fB\-fnon\-call\-exceptions\fR" 4
  .IX Item "-fnon-call-exceptions"
  Generate code that allows trapping instructions to throw exceptions.
! Note that this requires platform-specific runtime support that does
  not exist everywhere.  Moreover, it only allows \fItrapping\fR
! instructions to throw exceptions, i.e. memory references or floating-point
  instructions.  It does not allow exceptions to be thrown from
  arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.  This enables
  \&\fB\-fexceptions\fR.
! .IP "\fB\-fdelete\-dead\-exceptions\fR" 4
  .IX Item "-fdelete-dead-exceptions"
! Consider that instructions that may throw exceptions but don't otherwise
  contribute to the execution of the program can be optimized away.
  This does not affect calls to functions except those with the
  \&\f(CW\*(C`pure\*(C'\fR or \f(CW\*(C`const\*(C'\fR attributes.
! This option is enabled by default for the Ada and \*(C+ compilers, as permitted by
  the language specifications.
  Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
! .IP "\fB\-funwind\-tables\fR" 4
  .IX Item "-funwind-tables"
  Similar to \fB\-fexceptions\fR, except that it just generates any needed
  static data, but does not affect the generated code in any other way.
  You normally do not need to enable this option; instead, a language processor
  that needs this handling enables it on your behalf.
! .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
  .IX Item "-fasynchronous-unwind-tables"
! Generate unwind table in \s-1DWARF\s0 format, if supported by target machine.  The
  table is exact at each instruction boundary, so it can be used for stack
  unwinding from asynchronous events (such as debugger or garbage collector).
! .IP "\fB\-fno\-gnu\-unique\fR" 4
  .IX Item "-fno-gnu-unique"
! On systems with recent \s-1GNU\s0 assembler and C library, the \*(C+ compiler
  uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
  of template static data members and static local variables in inline
  functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
--- 18454,18542 ----
  \&           }
  .Ve
  .Sp
! The lifetime of a compiler generated temporary is well defined by the C++
  standard. When a lifetime of a temporary ends, and if the temporary lives
  in memory, the optimizing compiler has the freedom to reuse its stack
  space with other temporaries or scoped local variables whose live range
  does not overlap with it. However some of the legacy code relies on
! the behavior of older compilers in which temporaries\*(Aq stack space is
  not reused, the aggressive stack reuse can lead to runtime errors. This
  option is used to control the temporary stack reuse optimization.
! .IP \fB\-ftrapv\fR 4
  .IX Item "-ftrapv"
  This option generates traps for signed overflow on addition, subtraction,
  multiplication operations.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command\-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command\-line
  results in \fB\-ftrapv\fR being effective.
! .IP \fB\-fwrapv\fR 4
  .IX Item "-fwrapv"
  This option instructs the compiler to assume that signed arithmetic
  overflow of addition, subtraction and multiplication wraps around
! using twos\-complement representation.  This flag enables some optimizations
  and disables others.
  The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
! \&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command\-line results in
  \&\fB\-fwrapv\fR being effective.  Note that only active options override, so
! using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command\-line
  results in \fB\-ftrapv\fR being effective.
! .IP \fB\-fwrapv\-pointer\fR 4
  .IX Item "-fwrapv-pointer"
  This option instructs the compiler to assume that pointer arithmetic
! overflow on addition and subtraction wraps around using twos\-complement
  representation.  This flag disables some optimizations which assume
  pointer overflow is invalid.
! .IP \fB\-fstrict\-overflow\fR 4
  .IX Item "-fstrict-overflow"
  This option implies \fB\-fno\-wrapv\fR \fB\-fno\-wrapv\-pointer\fR and when
  negated implies \fB\-fwrapv\fR \fB\-fwrapv\-pointer\fR.
! .IP \fB\-fexceptions\fR 4
  .IX Item "-fexceptions"
  Enable exception handling.  Generates extra code needed to propagate
! exceptions.  For some targets, this implies GCC generates frame
  unwind information for all functions, which can produce significant data
  size overhead, although it does not affect execution.  If you do not
! specify this option, GCC enables it by default for languages like
! C++ that normally require exception handling, and disables it for
  languages like C that do not normally require it.  However, you may need
  to enable this option when compiling C code that needs to interoperate
! properly with exception handlers written in C++.  You may also wish to
! disable this option if you are compiling older C++ programs that don\*(Aqt
  use exception handling.
! .IP \fB\-fnon\-call\-exceptions\fR 4
  .IX Item "-fnon-call-exceptions"
  Generate code that allows trapping instructions to throw exceptions.
! Note that this requires platform\-specific runtime support that does
  not exist everywhere.  Moreover, it only allows \fItrapping\fR
! instructions to throw exceptions, i.e. memory references or floating\-point
  instructions.  It does not allow exceptions to be thrown from
  arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.  This enables
  \&\fB\-fexceptions\fR.
! .IP \fB\-fdelete\-dead\-exceptions\fR 4
  .IX Item "-fdelete-dead-exceptions"
! Consider that instructions that may throw exceptions but don\*(Aqt otherwise
  contribute to the execution of the program can be optimized away.
  This does not affect calls to functions except those with the
  \&\f(CW\*(C`pure\*(C'\fR or \f(CW\*(C`const\*(C'\fR attributes.
! This option is enabled by default for the Ada and C++ compilers, as permitted by
  the language specifications.
  Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
! .IP \fB\-funwind\-tables\fR 4
  .IX Item "-funwind-tables"
  Similar to \fB\-fexceptions\fR, except that it just generates any needed
  static data, but does not affect the generated code in any other way.
  You normally do not need to enable this option; instead, a language processor
  that needs this handling enables it on your behalf.
! .IP \fB\-fasynchronous\-unwind\-tables\fR 4
  .IX Item "-fasynchronous-unwind-tables"
! Generate unwind table in DWARF format, if supported by target machine.  The
  table is exact at each instruction boundary, so it can be used for stack
  unwinding from asynchronous events (such as debugger or garbage collector).
! .IP \fB\-fno\-gnu\-unique\fR 4
  .IX Item "-fno-gnu-unique"
! On systems with recent GNU assembler and C library, the C++ compiler
  uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
  of template static data members and static local variables in inline
  functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
*************** is necessary to avoid problems with a li
*** 18609,18623 ****
  \&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
  therefore disagreeing with the other one about the binding of the
  symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
! DSOs; if your program relies on reinitialization of a \s-1DSO\s0 via
  \&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
  \&\fB\-fno\-gnu\-unique\fR.
! .IP "\fB\-fpcc\-struct\-return\fR" 4
  .IX Item "-fpcc-struct-return"
! Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
  longer ones, rather than in registers.  This convention is less
  efficient, but it has the advantage of allowing intercallability between
! GCC-compiled files and files compiled with other compilers, particularly
  the Portable C Compiler (pcc).
  .Sp
  The precise convention for returning structures in memory depends
--- 18544,18558 ----
  \&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
  therefore disagreeing with the other one about the binding of the
  symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
! DSOs; if your program relies on reinitialization of a DSO via
  \&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
  \&\fB\-fno\-gnu\-unique\fR.
! .IP \fB\-fpcc\-struct\-return\fR 4
  .IX Item "-fpcc-struct-return"
! Return "short" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
  longer ones, rather than in registers.  This convention is less
  efficient, but it has the advantage of allowing intercallability between
! GCC\-compiled files and files compiled with other compilers, particularly
  the Portable C Compiler (pcc).
  .Sp
  The precise convention for returning structures in memory depends
*************** that of some integer type.
*** 18629,18653 ****
  \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-freg\-struct\-return\fR switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-freg\-struct\-return\fR" 4
  .IX Item "-freg-struct-return"
  Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
  This is more efficient for small structures than
  \&\fB\-fpcc\-struct\-return\fR.
  .Sp
  If you specify neither \fB\-fpcc\-struct\-return\fR nor
! \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
! standard for the target.  If there is no standard convention, \s-1GCC\s0
! defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
  the principal compiler.  In those cases, we can choose the standard, and
  we chose the more efficient register return alternative.
  .Sp
  \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-fpcc\-struct\-return\fR switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fshort\-enums\fR" 4
  .IX Item "-fshort-enums"
  Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
  declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
--- 18564,18588 ----
  \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-freg\-struct\-return\fR switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-freg\-struct\-return\fR 4
  .IX Item "-freg-struct-return"
  Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
  This is more efficient for small structures than
  \&\fB\-fpcc\-struct\-return\fR.
  .Sp
  If you specify neither \fB\-fpcc\-struct\-return\fR nor
! \&\fB\-freg\-struct\-return\fR, GCC defaults to whichever convention is
! standard for the target.  If there is no standard convention, GCC
! defaults to \fB\-fpcc\-struct\-return\fR, except on targets where GCC is
  the principal compiler.  In those cases, we can choose the standard, and
  we chose the more efficient register return alternative.
  .Sp
  \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
  switch is not binary compatible with code compiled with the
  \&\fB\-fpcc\-struct\-return\fR switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fshort\-enums\fR 4
  .IX Item "-fshort-enums"
  Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
  declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
*************** is equivalent to the smallest integer ty
*** 18655,18673 ****
  This option has no effect for an enumeration type with a fixed underlying
  type.
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fshort\-wchar\fR" 4
  .IX Item "-fshort-wchar"
  Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
  unsigned int\*(C'\fR instead of the default for the target.  This option is
! useful for building programs to run under \s-1WINE.\s0
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fcommon\fR" 4
  .IX Item "-fcommon"
  In C code, this option controls the placement of global variables
  defined without an initializer, known as \fItentative definitions\fR
--- 18590,18608 ----
  This option has no effect for an enumeration type with a fixed underlying
  type.
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes GCC to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fshort\-wchar\fR 4
  .IX Item "-fshort-wchar"
  Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
  unsigned int\*(C'\fR instead of the default for the target.  This option is
! useful for building programs to run under WINE.
  .Sp
! \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes GCC to generate
  code that is not binary compatible with code generated without that switch.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fcommon\fR 4
  .IX Item "-fcommon"
  In C code, this option controls the placement of global variables
  defined without an initializer, known as \fItentative definitions\fR
*************** in the C standard.  Tentative definition
*** 18675,18702 ****
  of a variable with the \f(CW\*(C`extern\*(C'\fR keyword, which do not allocate storage.
  .Sp
  The default is \fB\-fno\-common\fR, which specifies that the compiler places
! uninitialized global variables in the \s-1BSS\s0 section of the object file.
  This inhibits the merging of tentative definitions by the linker so you get a
! multiple-definition error if the same variable is accidentally defined in more
  than one compilation unit.
  .Sp
  The \fB\-fcommon\fR places uninitialized global variables in a common block.
  This allows the linker to resolve all tentative definitions of the same variable
! in different compilation units to the same object, or to a non-tentative
! definition.  This behavior is inconsistent with \*(C+, and on many targets implies
  a speed and code size penalty on global variable references.  It is mainly
  useful to enable legacy code to link without errors.
! .IP "\fB\-fno\-ident\fR" 4
  .IX Item "-fno-ident"
  Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
! .IP "\fB\-finhibit\-size\-directive\fR" 4
  .IX Item "-finhibit-size-directive"
! Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
  would cause trouble if the function is split in the middle, and the
  two halves are placed at locations far apart in memory.  This option is
  used when compiling \fIcrtstuff.c\fR; you should not need to use it
  for anything else.
! .IP "\fB\-fverbose\-asm\fR" 4
  .IX Item "-fverbose-asm"
  Put extra commentary information in the generated assembly code to
  make it more readable.  This option is generally only of use to those
--- 18610,18637 ----
  of a variable with the \f(CW\*(C`extern\*(C'\fR keyword, which do not allocate storage.
  .Sp
  The default is \fB\-fno\-common\fR, which specifies that the compiler places
! uninitialized global variables in the BSS section of the object file.
  This inhibits the merging of tentative definitions by the linker so you get a
! multiple\-definition error if the same variable is accidentally defined in more
  than one compilation unit.
  .Sp
  The \fB\-fcommon\fR places uninitialized global variables in a common block.
  This allows the linker to resolve all tentative definitions of the same variable
! in different compilation units to the same object, or to a non\-tentative
! definition.  This behavior is inconsistent with C++, and on many targets implies
  a speed and code size penalty on global variable references.  It is mainly
  useful to enable legacy code to link without errors.
! .IP \fB\-fno\-ident\fR 4
  .IX Item "-fno-ident"
  Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
! .IP \fB\-finhibit\-size\-directive\fR 4
  .IX Item "-finhibit-size-directive"
! Don\*(Aqt output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
  would cause trouble if the function is split in the middle, and the
  two halves are placed at locations far apart in memory.  This option is
  used when compiling \fIcrtstuff.c\fR; you should not need to use it
  for anything else.
! .IP \fB\-fverbose\-asm\fR 4
  .IX Item "-fverbose-asm"
  Put extra commentary information in the generated assembly code to
  make it more readable.  This option is generally only of use to those
*************** files.
*** 18709,18721 ****
  .Sp
  The added comments include:
  .RS 4
! .IP "*" 4
! information on the compiler version and command-line options,
! .IP "*" 4
  the source code lines associated with the assembly instructions,
! in the form \s-1FILENAME:LINENUMBER:CONTENT OF LINE,\s0
! .IP "*" 4
! hints on which high-level expressions correspond to
  the various assembly instruction operands.
  .RE
  .RS 4
--- 18644,18656 ----
  .Sp
  The added comments include:
  .RS 4
! .IP * 4
! information on the compiler version and command\-line options,
! .IP * 4
  the source code lines associated with the assembly instructions,
! in the form FILENAME:LINENUMBER:CONTENT OF LINE,
! .IP * 4
! hints on which high\-level expressions correspond to
  the various assembly instruction operands.
  .RE
  .RS 4
*************** gives output similar to this:
*** 18786,18890 ****
  The comments are intended for humans rather than machines and hence the
  precise format of the comments is subject to change.
  .RE
! .IP "\fB\-frecord\-gcc\-switches\fR" 4
  .IX Item "-frecord-gcc-switches"
  This switch causes the command line used to invoke the
  compiler to be recorded into the object file that is being created.
  This switch is only implemented on some targets and the exact format
  of the recording is target and binary file format dependent, but it
! usually takes the form of a section containing \s-1ASCII\s0 text.  This
  switch is related to the \fB\-fverbose\-asm\fR switch, but that
  switch only records information in the assembler output file as
  comments, so it never reaches the object file.
  See also \fB\-grecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP "\fB\-fpic\fR" 4
  .IX Item "-fpic"
! Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
  library, if supported for the target machine.  Such code accesses all
! constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
! loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
! loader is not part of \s-1GCC\s0; it is part of the operating system).  If
! the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
  maximum size, you get an error message from the linker indicating that
  \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
! instead.  (These maximums are 8k on the \s-1SPARC,\s0 28k on AArch64 and 32k
! on the m68k and \s-1RS/6000.\s0  The x86 has no such limit.)
  .Sp
! Position-independent code requires special support, and therefore works
! only on certain machines.  For the x86, \s-1GCC\s0 supports \s-1PIC\s0 for System V
! but not for the Sun 386i.  Code generated for the \s-1IBM RS/6000\s0 is always
! position-independent.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 1.
! .IP "\fB\-fPIC\fR" 4
  .IX Item "-fPIC"
! If supported for the target machine, emit position-independent code,
  suitable for dynamic linking and avoiding any limit on the size of the
  global offset table.  This option makes a difference on AArch64, m68k,
! PowerPC and \s-1SPARC.\s0
  .Sp
! Position-independent code requires special support, and therefore works
  only on certain machines.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 2.
! .IP "\fB\-fpie\fR" 4
  .IX Item "-fpie"
  .PD 0
! .IP "\fB\-fPIE\fR" 4
  .IX Item "-fPIE"
  .PD
  These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but the
! generated position-independent code can be only linked into executables.
  Usually these options are used to compile code that will be linked using
! the \fB\-pie\fR \s-1GCC\s0 option.
  .Sp
  \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
  \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
  for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
! .IP "\fB\-fno\-plt\fR" 4
  .IX Item "-fno-plt"
! Do not use the \s-1PLT\s0 for external function calls in position-independent code.
! Instead, load the callee address at call sites from the \s-1GOT\s0 and branch to it.
! This leads to more efficient code by eliminating \s-1PLT\s0 stubs and exposing
! \&\s-1GOT\s0 loads to optimizations.  On architectures such as 32\-bit x86 where
! \&\s-1PLT\s0 stubs expect the \s-1GOT\s0 pointer in a specific register, this gives more
  register allocation freedom to the compiler.
! Lazy binding requires use of the \s-1PLT\s0; 
  with \fB\-fno\-plt\fR all external symbols are resolved at load time.
  .Sp
  Alternatively, the function attribute \f(CW\*(C`noplt\*(C'\fR can be used to avoid calls
! through the \s-1PLT\s0 for specific external functions.
  .Sp
! In position-dependent code, a few targets also convert calls to
! functions that are marked to not use the \s-1PLT\s0 to use the \s-1GOT\s0 instead.
! .IP "\fB\-fno\-jump\-tables\fR" 4
  .IX Item "-fno-jump-tables"
  Do not use jump tables for switch statements even where it would be
  more efficient than other code generation strategies.  This option is
  of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
  building code that forms part of a dynamic linker and cannot
  reference the address of a jump table.  On some targets, jump tables
! do not require a \s-1GOT\s0 and this option is not needed.
! .IP "\fB\-fno\-bit\-tests\fR" 4
  .IX Item "-fno-bit-tests"
  Do not use bit tests for switch statements even where it would be
  more efficient than other code generation strategies.
! .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
  .IX Item "-ffixed-reg"
  Treat the register named \fIreg\fR as a fixed register; generated code
  should never refer to it (except perhaps as a stack pointer, frame
  pointer or in some other fixed role).
  .Sp
  \&\fIreg\fR must be the name of a register.  The register names accepted
! are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
  macro in the machine description macro file.
  .Sp
  This flag does not have a negative form, because it specifies a
! three-way choice.
! .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
  .IX Item "-fcall-used-reg"
  Treat the register named \fIreg\fR as an allocable register that is
  clobbered by function calls.  It may be allocated for temporaries or
--- 18721,18825 ----
  The comments are intended for humans rather than machines and hence the
  precise format of the comments is subject to change.
  .RE
! .IP \fB\-frecord\-gcc\-switches\fR 4
  .IX Item "-frecord-gcc-switches"
  This switch causes the command line used to invoke the
  compiler to be recorded into the object file that is being created.
  This switch is only implemented on some targets and the exact format
  of the recording is target and binary file format dependent, but it
! usually takes the form of a section containing ASCII text.  This
  switch is related to the \fB\-fverbose\-asm\fR switch, but that
  switch only records information in the assembler output file as
  comments, so it never reaches the object file.
  See also \fB\-grecord\-gcc\-switches\fR for another
  way of storing compiler options into the object file.
! .IP \fB\-fpic\fR 4
  .IX Item "-fpic"
! Generate position\-independent code (PIC) suitable for use in a shared
  library, if supported for the target machine.  Such code accesses all
! constant addresses through a global offset table (GOT).  The dynamic
! loader resolves the GOT entries when the program starts (the dynamic
! loader is not part of GCC; it is part of the operating system).  If
! the GOT size for the linked executable exceeds a machine\-specific
  maximum size, you get an error message from the linker indicating that
  \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
! instead.  (These maximums are 8k on the SPARC, 28k on AArch64 and 32k
! on the m68k and RS/6000.  The x86 has no such limit.)
  .Sp
! Position\-independent code requires special support, and therefore works
! only on certain machines.  For the x86, GCC supports PIC for System V
! but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
! position\-independent.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 1.
! .IP \fB\-fPIC\fR 4
  .IX Item "-fPIC"
! If supported for the target machine, emit position\-independent code,
  suitable for dynamic linking and avoiding any limit on the size of the
  global offset table.  This option makes a difference on AArch64, m68k,
! PowerPC and SPARC.
  .Sp
! Position\-independent code requires special support, and therefore works
  only on certain machines.
  .Sp
  When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
  are defined to 2.
! .IP \fB\-fpie\fR 4
  .IX Item "-fpie"
  .PD 0
! .IP \fB\-fPIE\fR 4
  .IX Item "-fPIE"
  .PD
  These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but the
! generated position\-independent code can be only linked into executables.
  Usually these options are used to compile code that will be linked using
! the \fB\-pie\fR GCC option.
  .Sp
  \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
  \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
  for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
! .IP \fB\-fno\-plt\fR 4
  .IX Item "-fno-plt"
! Do not use the PLT for external function calls in position\-independent code.
! Instead, load the callee address at call sites from the GOT and branch to it.
! This leads to more efficient code by eliminating PLT stubs and exposing
! GOT loads to optimizations.  On architectures such as 32\-bit x86 where
! PLT stubs expect the GOT pointer in a specific register, this gives more
  register allocation freedom to the compiler.
! Lazy binding requires use of the PLT; 
  with \fB\-fno\-plt\fR all external symbols are resolved at load time.
  .Sp
  Alternatively, the function attribute \f(CW\*(C`noplt\*(C'\fR can be used to avoid calls
! through the PLT for specific external functions.
  .Sp
! In position\-dependent code, a few targets also convert calls to
! functions that are marked to not use the PLT to use the GOT instead.
! .IP \fB\-fno\-jump\-tables\fR 4
  .IX Item "-fno-jump-tables"
  Do not use jump tables for switch statements even where it would be
  more efficient than other code generation strategies.  This option is
  of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
  building code that forms part of a dynamic linker and cannot
  reference the address of a jump table.  On some targets, jump tables
! do not require a GOT and this option is not needed.
! .IP \fB\-fno\-bit\-tests\fR 4
  .IX Item "-fno-bit-tests"
  Do not use bit tests for switch statements even where it would be
  more efficient than other code generation strategies.
! .IP \fB\-ffixed\-\fR\fIreg\fR 4
  .IX Item "-ffixed-reg"
  Treat the register named \fIreg\fR as a fixed register; generated code
  should never refer to it (except perhaps as a stack pointer, frame
  pointer or in some other fixed role).
  .Sp
  \&\fIreg\fR must be the name of a register.  The register names accepted
! are machine\-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
  macro in the machine description macro file.
  .Sp
  This flag does not have a negative form, because it specifies a
! three\-way choice.
! .IP \fB\-fcall\-used\-\fR\fIreg\fR 4
  .IX Item "-fcall-used-reg"
  Treat the register named \fIreg\fR as an allocable register that is
  clobbered by function calls.  It may be allocated for temporaries or
*************** do not save and restore the register \fI
*** 18893,18903 ****
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine's execution model produces disastrous results.
  .Sp
  This flag does not have a negative form, because it specifies a
! three-way choice.
! .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
  .IX Item "-fcall-saved-reg"
  Treat the register named \fIreg\fR as an allocable register saved by
  functions.  It may be allocated even for temporaries or variables that
--- 18828,18838 ----
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine\*(Aqs execution model produces disastrous results.
  .Sp
  This flag does not have a negative form, because it specifies a
! three\-way choice.
! .IP \fB\-fcall\-saved\-\fR\fIreg\fR 4
  .IX Item "-fcall-saved-reg"
  Treat the register named \fIreg\fR as an allocable register saved by
  functions.  It may be allocated even for temporaries or variables that
*************** the register \fIreg\fR if they use it.
*** 18906,18919 ****
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine's execution model produces disastrous results.
  .Sp
  A different sort of disaster results from the use of this flag for
  a register in which function values may be returned.
  .Sp
  This flag does not have a negative form, because it specifies a
! three-way choice.
! .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
  .IX Item "-fpack-struct[=n]"
  Without a value specified, pack all structure members together without
  holes.  When a value is specified (which must be a small power of two), pack
--- 18841,18854 ----
  .Sp
  It is an error to use this flag with the frame pointer or stack pointer.
  Use of this flag for other registers that have fixed pervasive roles in
! the machine\*(Aqs execution model produces disastrous results.
  .Sp
  A different sort of disaster results from the use of this flag for
  a register in which function values may be returned.
  .Sp
  This flag does not have a negative form, because it specifies a
! three\-way choice.
! .IP \fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR 4
  .IX Item "-fpack-struct[=n]"
  Without a value specified, pack all structure members together without
  holes.  When a value is specified (which must be a small power of two), pack
*************** structure members according to this valu
*** 18921,18956 ****
  alignment (that is, objects with default alignment requirements larger than
  this are output potentially unaligned at the next fitting location.
  .Sp
! \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
  code that is not binary compatible with code generated without that switch.
  Additionally, it makes the code suboptimal.
! Use it to conform to a non-default application binary interface.
! .IP "\fB\-fleading\-underscore\fR" 4
  .IX Item "-fleading-underscore"
  This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
  change the way C symbols are represented in the object file.  One use
  is to help link with legacy assembly code.
  .Sp
! \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
  generate code that is not binary compatible with code generated without that
! switch.  Use it to conform to a non-default application binary interface.
  Not all targets provide complete support for this switch.
! .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
  .IX Item "-ftls-model=model"
! Alter the thread-local storage model to be used.
! The \fImodel\fR argument should be one of \fBglobal-dynamic\fR,
! \&\fBlocal-dynamic\fR, \fBinitial-exec\fR or \fBlocal-exec\fR.
  Note that the choice is subject to optimization: the compiler may use
  a more efficient model for symbols not visible outside of the translation
  unit, or if \fB\-fpic\fR is not given on the command line.
  .Sp
! The default without \fB\-fpic\fR is \fBinitial-exec\fR; with
! \&\fB\-fpic\fR the default is \fBglobal-dynamic\fR.
! .IP "\fB\-ftrampolines\fR" 4
  .IX Item "-ftrampolines"
  For targets that normally need trampolines for nested functions, always
  generate them instead of using descriptors.  Otherwise, for targets that
! do not need them, like for example HP-PA or \s-1IA\-64,\s0 do nothing.
  .Sp
  A trampoline is a small piece of code that is created at run time on the
  stack when the address of a nested function is taken, and is used to call
--- 18856,18891 ----
  alignment (that is, objects with default alignment requirements larger than
  this are output potentially unaligned at the next fitting location.
  .Sp
! \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes GCC to generate
  code that is not binary compatible with code generated without that switch.
  Additionally, it makes the code suboptimal.
! Use it to conform to a non\-default application binary interface.
! .IP \fB\-fleading\-underscore\fR 4
  .IX Item "-fleading-underscore"
  This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
  change the way C symbols are represented in the object file.  One use
  is to help link with legacy assembly code.
  .Sp
! \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes GCC to
  generate code that is not binary compatible with code generated without that
! switch.  Use it to conform to a non\-default application binary interface.
  Not all targets provide complete support for this switch.
! .IP \fB\-ftls\-model=\fR\fImodel\fR 4
  .IX Item "-ftls-model=model"
! Alter the thread\-local storage model to be used.
! The \fImodel\fR argument should be one of \fBglobal\-dynamic\fR,
! \&\fBlocal\-dynamic\fR, \fBinitial\-exec\fR or \fBlocal\-exec\fR.
  Note that the choice is subject to optimization: the compiler may use
  a more efficient model for symbols not visible outside of the translation
  unit, or if \fB\-fpic\fR is not given on the command line.
  .Sp
! The default without \fB\-fpic\fR is \fBinitial\-exec\fR; with
! \&\fB\-fpic\fR the default is \fBglobal\-dynamic\fR.
! .IP \fB\-ftrampolines\fR 4
  .IX Item "-ftrampolines"
  For targets that normally need trampolines for nested functions, always
  generate them instead of using descriptors.  Otherwise, for targets that
! do not need them, like for example HP\-PA or IA\-64, do nothing.
  .Sp
  A trampoline is a small piece of code that is created at run time on the
  stack when the address of a nested function is taken, and is used to call
*************** writing, \fB\-fno\-trampolines\fR is ena
*** 18965,18978 ****
  .Sp
  Moreover, code compiled with \fB\-ftrampolines\fR and code compiled with
  \&\fB\-fno\-trampolines\fR are not binary compatible if nested functions are
! present.  This option must therefore be used on a program-wide basis and be
  manipulated with extreme care.
  .Sp
  For languages other than Ada, the \f(CW\*(C`\-ftrampolines\*(C'\fR and
  \&\f(CW\*(C`\-fno\-trampolines\*(C'\fR options currently have no effect, and
  trampolines are always generated on platforms that need them
  for nested functions.
! .IP "\fB\-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR]" 4
  .IX Item "-ftrampoline-impl=[stack|heap]"
  By default, trampolines are generated on stack.  However, certain platforms
  (such as the Apple M1) do not permit an executable stack.  Compiling with
--- 18900,18913 ----
  .Sp
  Moreover, code compiled with \fB\-ftrampolines\fR and code compiled with
  \&\fB\-fno\-trampolines\fR are not binary compatible if nested functions are
! present.  This option must therefore be used on a program\-wide basis and be
  manipulated with extreme care.
  .Sp
  For languages other than Ada, the \f(CW\*(C`\-ftrampolines\*(C'\fR and
  \&\f(CW\*(C`\-fno\-trampolines\*(C'\fR options currently have no effect, and
  trampolines are always generated on platforms that need them
  for nested functions.
! .IP \fB\-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR] 4
  .IX Item "-ftrampoline-impl=[stack|heap]"
  By default, trampolines are generated on stack.  However, certain platforms
  (such as the Apple M1) do not permit an executable stack.  Compiling with
*************** By default, trampolines are generated on
*** 18981,19010 ****
  \&\f(CW\*(C`_\|_gcc_nested_func_ptr_deleted\*(C'\fR in order to allocate and
  deallocate trampoline space on the executable heap.  These functions are
  implemented in libgcc, and will only be provided on specific targets:
! x86_64 Darwin, x86_64 and aarch64 Linux.  \fI\s-1PLEASE NOTE\s0\fR: Heap
  trampolines are \fInot\fR guaranteed to be correctly deallocated if you
  \&\f(CW\*(C`setjmp\*(C'\fR, instantiate nested functions, and then \f(CW\*(C`longjmp\*(C'\fR back
  to a state prior to having allocated those nested functions.
! .IP "\fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR]" 4
  .IX Item "-fvisibility=[default|internal|hidden|protected]"
! Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
  symbols are marked with this unless overridden within the code.
  Using this feature can very substantially improve linking and
  load times of shared object libraries, produce more optimized
! code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
  It is \fBstrongly\fR recommended that you use this in any shared objects
  you distribute.
  .Sp
  Despite the nomenclature, \fBdefault\fR always means public; i.e.,
  available to be linked against from outside the shared object.
! \&\fBprotected\fR and \fBinternal\fR are pretty useless in real-world
  usage so the only other commonly used option is \fBhidden\fR.
! The default if \fB\-fvisibility\fR isn't specified is
  \&\fBdefault\fR, i.e., make every symbol public.
  .Sp
! A good explanation of the benefits offered by ensuring \s-1ELF\s0
! symbols have the correct visibility is given by \*(L"How To Write
! Shared Libraries\*(R" by Ulrich Drepper (which can be found at
  <\fBhttps://www.akkadia.org/drepper/\fR>)\-\-\-however a superior
  solution made possible by this option to marking things hidden when
  the default is public is to make the default hidden and mark things
--- 18916,18945 ----
  \&\f(CW\*(C`_\|_gcc_nested_func_ptr_deleted\*(C'\fR in order to allocate and
  deallocate trampoline space on the executable heap.  These functions are
  implemented in libgcc, and will only be provided on specific targets:
! x86_64 Darwin, x86_64 and aarch64 Linux.  \fIPLEASE NOTE\fR: Heap
  trampolines are \fInot\fR guaranteed to be correctly deallocated if you
  \&\f(CW\*(C`setjmp\*(C'\fR, instantiate nested functions, and then \f(CW\*(C`longjmp\*(C'\fR back
  to a state prior to having allocated those nested functions.
! .IP \fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 4
  .IX Item "-fvisibility=[default|internal|hidden|protected]"
! Set the default ELF image symbol visibility to the specified option\-\-\-all
  symbols are marked with this unless overridden within the code.
  Using this feature can very substantially improve linking and
  load times of shared object libraries, produce more optimized
! code, provide near\-perfect API export and prevent symbol clashes.
  It is \fBstrongly\fR recommended that you use this in any shared objects
  you distribute.
  .Sp
  Despite the nomenclature, \fBdefault\fR always means public; i.e.,
  available to be linked against from outside the shared object.
! \&\fBprotected\fR and \fBinternal\fR are pretty useless in real\-world
  usage so the only other commonly used option is \fBhidden\fR.
! The default if \fB\-fvisibility\fR isn\*(Aqt specified is
  \&\fBdefault\fR, i.e., make every symbol public.
  .Sp
! A good explanation of the benefits offered by ensuring ELF
! symbols have the correct visibility is given by "How To Write
! Shared Libraries" by Ulrich Drepper (which can be found at
  <\fBhttps://www.akkadia.org/drepper/\fR>)\-\-\-however a superior
  solution made possible by this option to marking things hidden when
  the default is public is to make the default hidden and mark things
*************** public.  This is the norm with DLLs on W
*** 19012,19018 ****
  and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
  \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
  identical syntax.  This is a great boon to those working with
! cross-platform projects.
  .Sp
  For those adding visibility support to existing code, you may find
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
--- 18947,18953 ----
  and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
  \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
  identical syntax.  This is a great boon to those working with
! cross\-platform projects.
  .Sp
  For those adding visibility support to existing code, you may find
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
*************** the declarations you wish to set visibil
*** 19020,19031 ****
  \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
  \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
  Bear in mind that symbol visibility should be viewed \fBas
! part of the \s-1API\s0 interface contract\fR and thus all new code should
  always specify visibility when it is not the default; i.e., declarations
! only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
! as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
! abundantly clear also aids readability and self-documentation of the code.
! Note that due to \s-1ISO \*(C+\s0 specification requirements, \f(CW\*(C`operator new\*(C'\fR and
  \&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
  .Sp
  Be aware that headers from outside your project, in particular system
--- 18955,18966 ----
  \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
  \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
  Bear in mind that symbol visibility should be viewed \fBas
! part of the API interface contract\fR and thus all new code should
  always specify visibility when it is not the default; i.e., declarations
! only for use within the local DSO should \fBalways\fR be marked explicitly
! as hidden as so to avoid PLT indirection overheads\-\-\-making this
! abundantly clear also aids readability and self\-documentation of the code.
! Note that due to ISO C++ specification requirements, \f(CW\*(C`operator new\*(C'\fR and
  \&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
  .Sp
  Be aware that headers from outside your project, in particular system
*************** before including any such headers.
*** 19037,19048 ****
  \&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
  a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
  no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
! functions with no explicit visibility use the \s-1PLT,\s0 so it is more
  effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
  declarations should be treated as hidden.
  .Sp
! Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
  entities. This means that, for instance, an exception class that is
  be thrown between DSOs must be explicitly marked with default
  visibility so that the \fBtype_info\fR nodes are unified between
--- 18972,18983 ----
  \&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
  a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
  no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
! functions with no explicit visibility use the PLT, so it is more
  effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
  \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
  declarations should be treated as hidden.
  .Sp
! Note that \fB\-fvisibility\fR does affect C++ vague linkage
  entities. This means that, for instance, an exception class that is
  be thrown between DSOs must be explicitly marked with default
  visibility so that the \fBtype_info\fR nodes are unified between
*************** the DSOs.
*** 19050,19107 ****
  .Sp
  An overview of these techniques, their benefits and how to use them
  is at <\fBhttps://gcc.gnu.org/wiki/Visibility\fR>.
! .IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
  .IX Item "-fstrict-volatile-bitfields"
! This option should be used if accesses to volatile bit-fields (or other
  structure fields, although the compiler usually honors those types
  anyway) should use a single access of the width of the
! field's type, aligned to a natural alignment if possible.  For
! example, targets with memory-mapped peripheral registers might require
  all such accesses to be 16 bits wide; with this flag you can
! declare all peripheral bit-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
! is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
  instead of, perhaps, a more efficient 32\-bit access.
  .Sp
  If this option is disabled, the compiler uses the most efficient
  instruction.  In the previous example, that might be a 32\-bit load
  instruction, even though that accesses bytes that do not contain
! any portion of the bit-field, or memory-mapped registers unrelated to
  the one being updated.
  .Sp
  In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
  structure field, it may not be possible to access the field with a single
  read or write that is correctly aligned for the target machine.  In this
! case \s-1GCC\s0 falls back to generating multiple accesses rather than code that 
  will fault or truncate the result at run time.
  .Sp
! Note:  Due to restrictions of the C/\*(C+11 memory model, write accesses are
! not allowed to touch non bit-field members.  It is therefore recommended
! to define all bits of the field's type as bit-field members.
  .Sp
  The default value of this option is determined by the application binary
  interface for the target processor.
! .IP "\fB\-fsync\-libcalls\fR" 4
  .IX Item "-fsync-libcalls"
! This option controls whether any out-of-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
! family of functions may be used to implement the \*(C+11 \f(CW\*(C`_\|_atomic\*(C'\fR
  family of functions.
  .Sp
  The default value of this option is enabled, thus the only useful form
  of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
  the implementation of the \fIlibatomic\fR runtime library.
! .SS "\s-1GCC\s0 Developer Options"
  .IX Subsection "GCC Developer Options"
! This section describes command-line options that are primarily of
! interest to \s-1GCC\s0 developers, including options to support compiler
! testing and investigation of compiler bugs and compile-time
  performance problems.  This includes options that produce debug dumps
  at various points in the compilation; that print statistics such as
! memory use and execution time; and that print information about \s-1GCC\s0's
  configuration, such as where it searches for libraries.  You should
  rarely need to use any of these options for ordinary compilation and
  linking tasks.
  .PP
! Many developer options that cause \s-1GCC\s0 to dump output to a file take an
  optional \fB=\fR\fIfilename\fR suffix. You can specify \fBstdout\fR
  or \fB\-\fR to dump to standard output, and \fBstderr\fR for standard
  error.
--- 18985,19042 ----
  .Sp
  An overview of these techniques, their benefits and how to use them
  is at <\fBhttps://gcc.gnu.org/wiki/Visibility\fR>.
! .IP \fB\-fstrict\-volatile\-bitfields\fR 4
  .IX Item "-fstrict-volatile-bitfields"
! This option should be used if accesses to volatile bit\-fields (or other
  structure fields, although the compiler usually honors those types
  anyway) should use a single access of the width of the
! field\*(Aqs type, aligned to a natural alignment if possible.  For
! example, targets with memory\-mapped peripheral registers might require
  all such accesses to be 16 bits wide; with this flag you can
! declare all peripheral bit\-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
! is 16 bits on these targets) to force GCC to use 16\-bit accesses
  instead of, perhaps, a more efficient 32\-bit access.
  .Sp
  If this option is disabled, the compiler uses the most efficient
  instruction.  In the previous example, that might be a 32\-bit load
  instruction, even though that accesses bytes that do not contain
! any portion of the bit\-field, or memory\-mapped registers unrelated to
  the one being updated.
  .Sp
  In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
  structure field, it may not be possible to access the field with a single
  read or write that is correctly aligned for the target machine.  In this
! case GCC falls back to generating multiple accesses rather than code that 
  will fault or truncate the result at run time.
  .Sp
! Note:  Due to restrictions of the C/C++11 memory model, write accesses are
! not allowed to touch non bit\-field members.  It is therefore recommended
! to define all bits of the field\*(Aqs type as bit\-field members.
  .Sp
  The default value of this option is determined by the application binary
  interface for the target processor.
! .IP \fB\-fsync\-libcalls\fR 4
  .IX Item "-fsync-libcalls"
! This option controls whether any out\-of\-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
! family of functions may be used to implement the C++11 \f(CW\*(C`_\|_atomic\*(C'\fR
  family of functions.
  .Sp
  The default value of this option is enabled, thus the only useful form
  of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
  the implementation of the \fIlibatomic\fR runtime library.
! .SS "GCC Developer Options"
  .IX Subsection "GCC Developer Options"
! This section describes command\-line options that are primarily of
! interest to GCC developers, including options to support compiler
! testing and investigation of compiler bugs and compile\-time
  performance problems.  This includes options that produce debug dumps
  at various points in the compilation; that print statistics such as
! memory use and execution time; and that print information about GCC\*(Aqs
  configuration, such as where it searches for libraries.  You should
  rarely need to use any of these options for ordinary compilation and
  linking tasks.
  .PP
! Many developer options that cause GCC to dump output to a file take an
  optional \fB=\fR\fIfilename\fR suffix. You can specify \fBstdout\fR
  or \fB\-\fR to dump to standard output, and \fBstderr\fR for standard
  error.
*************** phase letter, and pass name.  The base d
*** 19112,19135 ****
  output file produced by the compiler if explicitly specified and not
  an executable; otherwise it is the source file name.
  The pass number is determined by the order passes are registered with
! the compiler's pass manager. 
  This is generally the same as the order of execution, but passes
! registered by plugins, target-specific passes, or passes that are
  otherwise registered late are numbered higher than the pass named
  \&\fBfinal\fR, even if they are executed earlier.  The phase letter is
! one of \fBi\fR (inter-procedural analysis), \fBl\fR
! (language-specific), \fBr\fR (\s-1RTL\s0), or \fBt\fR (tree). 
  The files are created in the directory of the output file.
! .IP "\fB\-fcallgraph\-info\fR" 4
  .IX Item "-fcallgraph-info"
  .PD 0
! .IP "\fB\-fcallgraph\-info=\fR\fI\s-1MARKERS\s0\fR" 4
  .IX Item "-fcallgraph-info=MARKERS"
  .PD
  Makes the compiler output callgraph information for the program, on a
! per-object-file basis.  The information is generated in the common \s-1VCG\s0
! format.  It can be decorated with additional, per-node and/or per-edge
! information, if a list of comma-separated markers is additionally
  specified.  When the \f(CW\*(C`su\*(C'\fR marker is specified, the callgraph is
  decorated with stack usage information; it is equivalent to
  \&\fB\-fstack\-usage\fR.  When the \f(CW\*(C`da\*(C'\fR marker is specified, the
--- 19047,19070 ----
  output file produced by the compiler if explicitly specified and not
  an executable; otherwise it is the source file name.
  The pass number is determined by the order passes are registered with
! the compiler\*(Aqs pass manager. 
  This is generally the same as the order of execution, but passes
! registered by plugins, target\-specific passes, or passes that are
  otherwise registered late are numbered higher than the pass named
  \&\fBfinal\fR, even if they are executed earlier.  The phase letter is
! one of \fBi\fR (inter\-procedural analysis), \fBl\fR
! (language\-specific), \fBr\fR (RTL), or \fBt\fR (tree). 
  The files are created in the directory of the output file.
! .IP \fB\-fcallgraph\-info\fR 4
  .IX Item "-fcallgraph-info"
  .PD 0
! .IP \fB\-fcallgraph\-info=\fR\fIMARKERS\fR 4
  .IX Item "-fcallgraph-info=MARKERS"
  .PD
  Makes the compiler output callgraph information for the program, on a
! per\-object\-file basis.  The information is generated in the common VCG
! format.  It can be decorated with additional, per\-node and/or per\-edge
! information, if a list of comma\-separated markers is additionally
  specified.  When the \f(CW\*(C`su\*(C'\fR marker is specified, the callgraph is
  decorated with stack usage information; it is equivalent to
  \&\fB\-fstack\-usage\fR.  When the \f(CW\*(C`da\*(C'\fR marker is specified, the
*************** callgraph is decorated with information
*** 19137,19155 ****
  objects.
  .Sp
  When compiling with \fB\-flto\fR, no callgraph information is output
! along with the object file.  At \s-1LTO\s0 link time, \fB\-fcallgraph\-info\fR
  may generate multiple callgraph information files next to intermediate
! \&\s-1LTO\s0 output files.
! .IP "\fB\-d\fR\fIletters\fR" 4
  .IX Item "-dletters"
  .PD 0
! .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
  .IX Item "-fdump-rtl-pass"
! .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fdump-rtl-pass=filename"
  .PD
  Says to make debugging dumps during compilation at times specified by
! \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
  compiler.
  .Sp
  Some \fB\-d\fR\fIletters\fR switches have different meaning when
--- 19072,19090 ----
  objects.
  .Sp
  When compiling with \fB\-flto\fR, no callgraph information is output
! along with the object file.  At LTO link time, \fB\-fcallgraph\-info\fR
  may generate multiple callgraph information files next to intermediate
! LTO output files.
! .IP \fB\-d\fR\fIletters\fR 4
  .IX Item "-dletters"
  .PD 0
! .IP \fB\-fdump\-rtl\-\fR\fIpass\fR 4
  .IX Item "-fdump-rtl-pass"
! .IP \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fdump-rtl-pass=filename"
  .PD
  Says to make debugging dumps during compilation at times specified by
! \&\fIletters\fR.  This is used for debugging the RTL\-based passes of the
  compiler.
  .Sp
  Some \fB\-d\fR\fIletters\fR switches have different meaning when
*************** Debug dumps can be enabled with a \fB\-f
*** 19159,19470 ****
  \&\fB\-d\fR option \fIletters\fR.  Here are the possible
  letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
  .RS 4
! .IP "\fB\-fdump\-rtl\-alignments\fR" 4
  .IX Item "-fdump-rtl-alignments"
  Dump after branch alignments have been computed.
! .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
  .IX Item "-fdump-rtl-asmcons"
  Dump after fixing rtl statements that have unsatisfied in/out constraints.
! .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
  .IX Item "-fdump-rtl-auto_inc_dec"
! Dump after auto-inc-dec discovery.  This pass is only run on
  architectures that have auto inc or auto dec instructions.
! .IP "\fB\-fdump\-rtl\-barriers\fR" 4
  .IX Item "-fdump-rtl-barriers"
  Dump after cleaning up the barrier instructions.
! .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
  .IX Item "-fdump-rtl-bbpart"
  Dump after partitioning hot and cold basic blocks.
! .IP "\fB\-fdump\-rtl\-bbro\fR" 4
  .IX Item "-fdump-rtl-bbro"
  Dump after block reordering.
! .IP "\fB\-fdump\-rtl\-btl1\fR" 4
  .IX Item "-fdump-rtl-btl1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-btl2\fR" 4
  .IX Item "-fdump-rtl-btl2"
  .PD
  \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
  after the two branch
  target load optimization passes.
! .IP "\fB\-fdump\-rtl\-bypass\fR" 4
  .IX Item "-fdump-rtl-bypass"
  Dump after jump bypassing and control flow optimizations.
! .IP "\fB\-fdump\-rtl\-combine\fR" 4
  .IX Item "-fdump-rtl-combine"
! Dump after the \s-1RTL\s0 instruction combination pass.
! .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
  .IX Item "-fdump-rtl-compgotos"
  Dump after duplicating the computed gotos.
! .IP "\fB\-fdump\-rtl\-ce1\fR" 4
  .IX Item "-fdump-rtl-ce1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-ce2\fR" 4
  .IX Item "-fdump-rtl-ce2"
! .IP "\fB\-fdump\-rtl\-ce3\fR" 4
  .IX Item "-fdump-rtl-ce3"
  .PD
  \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
  \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
  if conversion passes.
! .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
  .IX Item "-fdump-rtl-cprop_hardreg"
  Dump after hard register copy propagation.
! .IP "\fB\-fdump\-rtl\-csa\fR" 4
  .IX Item "-fdump-rtl-csa"
  Dump after combining stack adjustments.
! .IP "\fB\-fdump\-rtl\-cse1\fR" 4
  .IX Item "-fdump-rtl-cse1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-cse2\fR" 4
  .IX Item "-fdump-rtl-cse2"
  .PD
  \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
  the two common subexpression elimination passes.
! .IP "\fB\-fdump\-rtl\-dce\fR" 4
  .IX Item "-fdump-rtl-dce"
  Dump after the standalone dead code elimination passes.
! .IP "\fB\-fdump\-rtl\-dbr\fR" 4
  .IX Item "-fdump-rtl-dbr"
  Dump after delayed branch scheduling.
! .IP "\fB\-fdump\-rtl\-dce1\fR" 4
  .IX Item "-fdump-rtl-dce1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-dce2\fR" 4
  .IX Item "-fdump-rtl-dce2"
  .PD
  \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
  the two dead store elimination passes.
! .IP "\fB\-fdump\-rtl\-eh\fR" 4
  .IX Item "-fdump-rtl-eh"
! Dump after finalization of \s-1EH\s0 handling code.
! .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
  .IX Item "-fdump-rtl-eh_ranges"
! Dump after conversion of \s-1EH\s0 handling range regions.
! .IP "\fB\-fdump\-rtl\-expand\fR" 4
  .IX Item "-fdump-rtl-expand"
! Dump after \s-1RTL\s0 generation.
! .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
  .IX Item "-fdump-rtl-fwprop1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
  .IX Item "-fdump-rtl-fwprop2"
  .PD
  \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
  dumping after the two forward propagation passes.
! .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
  .IX Item "-fdump-rtl-gcse1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
  .IX Item "-fdump-rtl-gcse2"
  .PD
  \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
  after global common subexpression elimination.
! .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
  .IX Item "-fdump-rtl-init-regs"
  Dump after the initialization of the registers.
! .IP "\fB\-fdump\-rtl\-initvals\fR" 4
  .IX Item "-fdump-rtl-initvals"
  Dump after the computation of the initial value sets.
! .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
  .IX Item "-fdump-rtl-into_cfglayout"
  Dump after converting to cfglayout mode.
! .IP "\fB\-fdump\-rtl\-ira\fR" 4
  .IX Item "-fdump-rtl-ira"
  Dump after iterated register allocation.
! .IP "\fB\-fdump\-rtl\-jump\fR" 4
  .IX Item "-fdump-rtl-jump"
  Dump after the second jump optimization.
! .IP "\fB\-fdump\-rtl\-loop2\fR" 4
  .IX Item "-fdump-rtl-loop2"
  \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
  loop optimization passes.
! .IP "\fB\-fdump\-rtl\-mach\fR" 4
  .IX Item "-fdump-rtl-mach"
  Dump after performing the machine dependent reorganization pass, if that
  pass exists.
! .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
  .IX Item "-fdump-rtl-mode_sw"
  Dump after removing redundant mode switches.
! .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
  .IX Item "-fdump-rtl-rnreg"
  Dump after register renumbering.
! .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
  .IX Item "-fdump-rtl-outof_cfglayout"
  Dump after converting from cfglayout mode.
! .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
  .IX Item "-fdump-rtl-peephole2"
  Dump after the peephole pass.
! .IP "\fB\-fdump\-rtl\-postreload\fR" 4
  .IX Item "-fdump-rtl-postreload"
! Dump after post-reload optimizations.
! .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
  .IX Item "-fdump-rtl-pro_and_epilogue"
  Dump after generating the function prologues and epilogues.
! .IP "\fB\-fdump\-rtl\-sched1\fR" 4
  .IX Item "-fdump-rtl-sched1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-sched2\fR" 4
  .IX Item "-fdump-rtl-sched2"
  .PD
  \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
  after the basic block scheduling passes.
! .IP "\fB\-fdump\-rtl\-ree\fR" 4
  .IX Item "-fdump-rtl-ree"
  Dump after sign/zero extension elimination.
! .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
  .IX Item "-fdump-rtl-seqabstr"
  Dump after common sequence discovery.
! .IP "\fB\-fdump\-rtl\-shorten\fR" 4
  .IX Item "-fdump-rtl-shorten"
  Dump after shortening branches.
! .IP "\fB\-fdump\-rtl\-sibling\fR" 4
  .IX Item "-fdump-rtl-sibling"
  Dump after sibling call optimizations.
! .IP "\fB\-fdump\-rtl\-split1\fR" 4
  .IX Item "-fdump-rtl-split1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-split2\fR" 4
  .IX Item "-fdump-rtl-split2"
! .IP "\fB\-fdump\-rtl\-split3\fR" 4
  .IX Item "-fdump-rtl-split3"
! .IP "\fB\-fdump\-rtl\-split4\fR" 4
  .IX Item "-fdump-rtl-split4"
! .IP "\fB\-fdump\-rtl\-split5\fR" 4
  .IX Item "-fdump-rtl-split5"
  .PD
  These options enable dumping after five rounds of
  instruction splitting.
! .IP "\fB\-fdump\-rtl\-sms\fR" 4
  .IX Item "-fdump-rtl-sms"
  Dump after modulo scheduling.  This pass is only run on some
  architectures.
! .IP "\fB\-fdump\-rtl\-stack\fR" 4
  .IX Item "-fdump-rtl-stack"
! Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
! x87's stack-like registers.  This pass is only run on x86 variants.
! .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
  .IX Item "-fdump-rtl-subreg1"
  .PD 0
! .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
  .IX Item "-fdump-rtl-subreg2"
  .PD
  \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
  the two subreg expansion passes.
! .IP "\fB\-fdump\-rtl\-unshare\fR" 4
  .IX Item "-fdump-rtl-unshare"
  Dump after all rtl has been unshared.
! .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
  .IX Item "-fdump-rtl-vartrack"
  Dump after variable tracking.
! .IP "\fB\-fdump\-rtl\-vregs\fR" 4
  .IX Item "-fdump-rtl-vregs"
  Dump after converting virtual registers to hard registers.
! .IP "\fB\-fdump\-rtl\-web\fR" 4
  .IX Item "-fdump-rtl-web"
  Dump after live range splitting.
! .IP "\fB\-fdump\-rtl\-regclass\fR" 4
  .IX Item "-fdump-rtl-regclass"
  .PD 0
! .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
  .IX Item "-fdump-rtl-subregs_of_mode_init"
! .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
  .IX Item "-fdump-rtl-subregs_of_mode_finish"
! .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
  .IX Item "-fdump-rtl-dfinit"
! .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
  .IX Item "-fdump-rtl-dfinish"
  .PD
  These dumps are defined but always produce empty files.
! .IP "\fB\-da\fR" 4
  .IX Item "-da"
  .PD 0
! .IP "\fB\-fdump\-rtl\-all\fR" 4
  .IX Item "-fdump-rtl-all"
  .PD
  Produce all the dumps listed above.
! .IP "\fB\-dA\fR" 4
  .IX Item "-dA"
  Annotate the assembler output with miscellaneous debugging information.
! .IP "\fB\-dD\fR" 4
  .IX Item "-dD"
  Dump all macro definitions, at the end of preprocessing, in addition to
  normal output.
! .IP "\fB\-dH\fR" 4
  .IX Item "-dH"
  Produce a core dump whenever an error occurs.
! .IP "\fB\-dp\fR" 4
  .IX Item "-dp"
  Annotate the assembler output with a comment indicating which
  pattern and alternative is used.  The length and cost of each instruction are
  also printed.
! .IP "\fB\-dP\fR" 4
  .IX Item "-dP"
! Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
  Also turns on \fB\-dp\fR annotation.
! .IP "\fB\-dx\fR" 4
  .IX Item "-dx"
! Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
  with \fB\-fdump\-rtl\-expand\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-debug\fR" 4
  .IX Item "-fdump-debug"
  Dump debugging information generated during the debug
  generation phase.
! .IP "\fB\-fdump\-earlydebug\fR" 4
  .IX Item "-fdump-earlydebug"
  Dump debugging information generated during the early debug
  generation phase.
! .IP "\fB\-fdump\-noaddr\fR" 4
  .IX Item "-fdump-noaddr"
  When doing debugging dumps, suppress address output.  This makes it more
  feasible to use diff on debugging dumps for compiler invocations with
  different compiler binaries and/or different
  text / bss / data / heap / stack / dso start locations.
! .IP "\fB\-freport\-bug\fR" 4
  .IX Item "-freport-bug"
  Collect and dump debug information into a temporary file if an
! internal compiler error (\s-1ICE\s0) occurs.
! .IP "\fB\-fdump\-unnumbered\fR" 4
  .IX Item "-fdump-unnumbered"
  When doing debugging dumps, suppress instruction numbers and address output.
  This makes it more feasible to use diff on debugging dumps for compiler
  invocations with different options, in particular with and without
  \&\fB\-g\fR.
! .IP "\fB\-fdump\-unnumbered\-links\fR" 4
  .IX Item "-fdump-unnumbered-links"
  When doing debugging dumps (see \fB\-d\fR option above), suppress
  instruction numbers for the links to the previous and next instructions
  in a sequence.
! .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
  .IX Item "-fdump-ipa-switch"
  .PD 0
! .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
  .IX Item "-fdump-ipa-switch-options"
  .PD
! Control the dumping at various stages of inter-procedural analysis
  language tree to a file.  The file name is generated by appending a
  switch specific suffix to the source file name, and the file is created
  in the same directory as the output file.  The following dumps are
  possible:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
! Enables all inter-procedural analysis dumps.
! .IP "\fBcgraph\fR" 4
  .IX Item "cgraph"
! Dumps information about call-graph optimization, unused function removal,
  and inlining decisions.
! .IP "\fBinline\fR" 4
  .IX Item "inline"
  Dump after function inlining.
! .IP "\fBstrubm\fR" 4
  .IX Item "strubm"
  Dump after selecting \f(CW\*(C`strub\*(C'\fR modes, and recording the selections as
  function attributes.
! .IP "\fBstrub\fR" 4
  .IX Item "strub"
  Dump \f(CW\*(C`strub\*(C'\fR transformations: interface changes, function wrapping,
  and insertion of builtin calls for stack scrubbing and watermarking.
--- 19094,19405 ----
  \&\fB\-d\fR option \fIletters\fR.  Here are the possible
  letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
  .RS 4
! .IP \fB\-fdump\-rtl\-alignments\fR 4
  .IX Item "-fdump-rtl-alignments"
  Dump after branch alignments have been computed.
! .IP \fB\-fdump\-rtl\-asmcons\fR 4
  .IX Item "-fdump-rtl-asmcons"
  Dump after fixing rtl statements that have unsatisfied in/out constraints.
! .IP \fB\-fdump\-rtl\-auto_inc_dec\fR 4
  .IX Item "-fdump-rtl-auto_inc_dec"
! Dump after auto\-inc\-dec discovery.  This pass is only run on
  architectures that have auto inc or auto dec instructions.
! .IP \fB\-fdump\-rtl\-barriers\fR 4
  .IX Item "-fdump-rtl-barriers"
  Dump after cleaning up the barrier instructions.
! .IP \fB\-fdump\-rtl\-bbpart\fR 4
  .IX Item "-fdump-rtl-bbpart"
  Dump after partitioning hot and cold basic blocks.
! .IP \fB\-fdump\-rtl\-bbro\fR 4
  .IX Item "-fdump-rtl-bbro"
  Dump after block reordering.
! .IP \fB\-fdump\-rtl\-btl1\fR 4
  .IX Item "-fdump-rtl-btl1"
  .PD 0
! .IP \fB\-fdump\-rtl\-btl2\fR 4
  .IX Item "-fdump-rtl-btl2"
  .PD
  \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
  after the two branch
  target load optimization passes.
! .IP \fB\-fdump\-rtl\-bypass\fR 4
  .IX Item "-fdump-rtl-bypass"
  Dump after jump bypassing and control flow optimizations.
! .IP \fB\-fdump\-rtl\-combine\fR 4
  .IX Item "-fdump-rtl-combine"
! Dump after the RTL instruction combination pass.
! .IP \fB\-fdump\-rtl\-compgotos\fR 4
  .IX Item "-fdump-rtl-compgotos"
  Dump after duplicating the computed gotos.
! .IP \fB\-fdump\-rtl\-ce1\fR 4
  .IX Item "-fdump-rtl-ce1"
  .PD 0
! .IP \fB\-fdump\-rtl\-ce2\fR 4
  .IX Item "-fdump-rtl-ce2"
! .IP \fB\-fdump\-rtl\-ce3\fR 4
  .IX Item "-fdump-rtl-ce3"
  .PD
  \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
  \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
  if conversion passes.
! .IP \fB\-fdump\-rtl\-cprop_hardreg\fR 4
  .IX Item "-fdump-rtl-cprop_hardreg"
  Dump after hard register copy propagation.
! .IP \fB\-fdump\-rtl\-csa\fR 4
  .IX Item "-fdump-rtl-csa"
  Dump after combining stack adjustments.
! .IP \fB\-fdump\-rtl\-cse1\fR 4
  .IX Item "-fdump-rtl-cse1"
  .PD 0
! .IP \fB\-fdump\-rtl\-cse2\fR 4
  .IX Item "-fdump-rtl-cse2"
  .PD
  \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
  the two common subexpression elimination passes.
! .IP \fB\-fdump\-rtl\-dce\fR 4
  .IX Item "-fdump-rtl-dce"
  Dump after the standalone dead code elimination passes.
! .IP \fB\-fdump\-rtl\-dbr\fR 4
  .IX Item "-fdump-rtl-dbr"
  Dump after delayed branch scheduling.
! .IP \fB\-fdump\-rtl\-dce1\fR 4
  .IX Item "-fdump-rtl-dce1"
  .PD 0
! .IP \fB\-fdump\-rtl\-dce2\fR 4
  .IX Item "-fdump-rtl-dce2"
  .PD
  \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
  the two dead store elimination passes.
! .IP \fB\-fdump\-rtl\-eh\fR 4
  .IX Item "-fdump-rtl-eh"
! Dump after finalization of EH handling code.
! .IP \fB\-fdump\-rtl\-eh_ranges\fR 4
  .IX Item "-fdump-rtl-eh_ranges"
! Dump after conversion of EH handling range regions.
! .IP \fB\-fdump\-rtl\-expand\fR 4
  .IX Item "-fdump-rtl-expand"
! Dump after RTL generation.
! .IP \fB\-fdump\-rtl\-fwprop1\fR 4
  .IX Item "-fdump-rtl-fwprop1"
  .PD 0
! .IP \fB\-fdump\-rtl\-fwprop2\fR 4
  .IX Item "-fdump-rtl-fwprop2"
  .PD
  \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
  dumping after the two forward propagation passes.
! .IP \fB\-fdump\-rtl\-gcse1\fR 4
  .IX Item "-fdump-rtl-gcse1"
  .PD 0
! .IP \fB\-fdump\-rtl\-gcse2\fR 4
  .IX Item "-fdump-rtl-gcse2"
  .PD
  \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
  after global common subexpression elimination.
! .IP \fB\-fdump\-rtl\-init\-regs\fR 4
  .IX Item "-fdump-rtl-init-regs"
  Dump after the initialization of the registers.
! .IP \fB\-fdump\-rtl\-initvals\fR 4
  .IX Item "-fdump-rtl-initvals"
  Dump after the computation of the initial value sets.
! .IP \fB\-fdump\-rtl\-into_cfglayout\fR 4
  .IX Item "-fdump-rtl-into_cfglayout"
  Dump after converting to cfglayout mode.
! .IP \fB\-fdump\-rtl\-ira\fR 4
  .IX Item "-fdump-rtl-ira"
  Dump after iterated register allocation.
! .IP \fB\-fdump\-rtl\-jump\fR 4
  .IX Item "-fdump-rtl-jump"
  Dump after the second jump optimization.
! .IP \fB\-fdump\-rtl\-loop2\fR 4
  .IX Item "-fdump-rtl-loop2"
  \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
  loop optimization passes.
! .IP \fB\-fdump\-rtl\-mach\fR 4
  .IX Item "-fdump-rtl-mach"
  Dump after performing the machine dependent reorganization pass, if that
  pass exists.
! .IP \fB\-fdump\-rtl\-mode_sw\fR 4
  .IX Item "-fdump-rtl-mode_sw"
  Dump after removing redundant mode switches.
! .IP \fB\-fdump\-rtl\-rnreg\fR 4
  .IX Item "-fdump-rtl-rnreg"
  Dump after register renumbering.
! .IP \fB\-fdump\-rtl\-outof_cfglayout\fR 4
  .IX Item "-fdump-rtl-outof_cfglayout"
  Dump after converting from cfglayout mode.
! .IP \fB\-fdump\-rtl\-peephole2\fR 4
  .IX Item "-fdump-rtl-peephole2"
  Dump after the peephole pass.
! .IP \fB\-fdump\-rtl\-postreload\fR 4
  .IX Item "-fdump-rtl-postreload"
! Dump after post\-reload optimizations.
! .IP \fB\-fdump\-rtl\-pro_and_epilogue\fR 4
  .IX Item "-fdump-rtl-pro_and_epilogue"
  Dump after generating the function prologues and epilogues.
! .IP \fB\-fdump\-rtl\-sched1\fR 4
  .IX Item "-fdump-rtl-sched1"
  .PD 0
! .IP \fB\-fdump\-rtl\-sched2\fR 4
  .IX Item "-fdump-rtl-sched2"
  .PD
  \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
  after the basic block scheduling passes.
! .IP \fB\-fdump\-rtl\-ree\fR 4
  .IX Item "-fdump-rtl-ree"
  Dump after sign/zero extension elimination.
! .IP \fB\-fdump\-rtl\-seqabstr\fR 4
  .IX Item "-fdump-rtl-seqabstr"
  Dump after common sequence discovery.
! .IP \fB\-fdump\-rtl\-shorten\fR 4
  .IX Item "-fdump-rtl-shorten"
  Dump after shortening branches.
! .IP \fB\-fdump\-rtl\-sibling\fR 4
  .IX Item "-fdump-rtl-sibling"
  Dump after sibling call optimizations.
! .IP \fB\-fdump\-rtl\-split1\fR 4
  .IX Item "-fdump-rtl-split1"
  .PD 0
! .IP \fB\-fdump\-rtl\-split2\fR 4
  .IX Item "-fdump-rtl-split2"
! .IP \fB\-fdump\-rtl\-split3\fR 4
  .IX Item "-fdump-rtl-split3"
! .IP \fB\-fdump\-rtl\-split4\fR 4
  .IX Item "-fdump-rtl-split4"
! .IP \fB\-fdump\-rtl\-split5\fR 4
  .IX Item "-fdump-rtl-split5"
  .PD
  These options enable dumping after five rounds of
  instruction splitting.
! .IP \fB\-fdump\-rtl\-sms\fR 4
  .IX Item "-fdump-rtl-sms"
  Dump after modulo scheduling.  This pass is only run on some
  architectures.
! .IP \fB\-fdump\-rtl\-stack\fR 4
  .IX Item "-fdump-rtl-stack"
! Dump after conversion from GCC\*(Aqs "flat register file" registers to the
! x87\*(Aqs stack\-like registers.  This pass is only run on x86 variants.
! .IP \fB\-fdump\-rtl\-subreg1\fR 4
  .IX Item "-fdump-rtl-subreg1"
  .PD 0
! .IP \fB\-fdump\-rtl\-subreg2\fR 4
  .IX Item "-fdump-rtl-subreg2"
  .PD
  \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
  the two subreg expansion passes.
! .IP \fB\-fdump\-rtl\-unshare\fR 4
  .IX Item "-fdump-rtl-unshare"
  Dump after all rtl has been unshared.
! .IP \fB\-fdump\-rtl\-vartrack\fR 4
  .IX Item "-fdump-rtl-vartrack"
  Dump after variable tracking.
! .IP \fB\-fdump\-rtl\-vregs\fR 4
  .IX Item "-fdump-rtl-vregs"
  Dump after converting virtual registers to hard registers.
! .IP \fB\-fdump\-rtl\-web\fR 4
  .IX Item "-fdump-rtl-web"
  Dump after live range splitting.
! .IP \fB\-fdump\-rtl\-regclass\fR 4
  .IX Item "-fdump-rtl-regclass"
  .PD 0
! .IP \fB\-fdump\-rtl\-subregs_of_mode_init\fR 4
  .IX Item "-fdump-rtl-subregs_of_mode_init"
! .IP \fB\-fdump\-rtl\-subregs_of_mode_finish\fR 4
  .IX Item "-fdump-rtl-subregs_of_mode_finish"
! .IP \fB\-fdump\-rtl\-dfinit\fR 4
  .IX Item "-fdump-rtl-dfinit"
! .IP \fB\-fdump\-rtl\-dfinish\fR 4
  .IX Item "-fdump-rtl-dfinish"
  .PD
  These dumps are defined but always produce empty files.
! .IP \fB\-da\fR 4
  .IX Item "-da"
  .PD 0
! .IP \fB\-fdump\-rtl\-all\fR 4
  .IX Item "-fdump-rtl-all"
  .PD
  Produce all the dumps listed above.
! .IP \fB\-dA\fR 4
  .IX Item "-dA"
  Annotate the assembler output with miscellaneous debugging information.
! .IP \fB\-dD\fR 4
  .IX Item "-dD"
  Dump all macro definitions, at the end of preprocessing, in addition to
  normal output.
! .IP \fB\-dH\fR 4
  .IX Item "-dH"
  Produce a core dump whenever an error occurs.
! .IP \fB\-dp\fR 4
  .IX Item "-dp"
  Annotate the assembler output with a comment indicating which
  pattern and alternative is used.  The length and cost of each instruction are
  also printed.
! .IP \fB\-dP\fR 4
  .IX Item "-dP"
! Dump the RTL in the assembler output as a comment before each instruction.
  Also turns on \fB\-dp\fR annotation.
! .IP \fB\-dx\fR 4
  .IX Item "-dx"
! Just generate RTL for a function instead of compiling it.  Usually used
  with \fB\-fdump\-rtl\-expand\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-debug\fR 4
  .IX Item "-fdump-debug"
  Dump debugging information generated during the debug
  generation phase.
! .IP \fB\-fdump\-earlydebug\fR 4
  .IX Item "-fdump-earlydebug"
  Dump debugging information generated during the early debug
  generation phase.
! .IP \fB\-fdump\-noaddr\fR 4
  .IX Item "-fdump-noaddr"
  When doing debugging dumps, suppress address output.  This makes it more
  feasible to use diff on debugging dumps for compiler invocations with
  different compiler binaries and/or different
  text / bss / data / heap / stack / dso start locations.
! .IP \fB\-freport\-bug\fR 4
  .IX Item "-freport-bug"
  Collect and dump debug information into a temporary file if an
! internal compiler error (ICE) occurs.
! .IP \fB\-fdump\-unnumbered\fR 4
  .IX Item "-fdump-unnumbered"
  When doing debugging dumps, suppress instruction numbers and address output.
  This makes it more feasible to use diff on debugging dumps for compiler
  invocations with different options, in particular with and without
  \&\fB\-g\fR.
! .IP \fB\-fdump\-unnumbered\-links\fR 4
  .IX Item "-fdump-unnumbered-links"
  When doing debugging dumps (see \fB\-d\fR option above), suppress
  instruction numbers for the links to the previous and next instructions
  in a sequence.
! .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR 4
  .IX Item "-fdump-ipa-switch"
  .PD 0
! .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4
  .IX Item "-fdump-ipa-switch-options"
  .PD
! Control the dumping at various stages of inter\-procedural analysis
  language tree to a file.  The file name is generated by appending a
  switch specific suffix to the source file name, and the file is created
  in the same directory as the output file.  The following dumps are
  possible:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
! Enables all inter\-procedural analysis dumps.
! .IP \fBcgraph\fR 4
  .IX Item "cgraph"
! Dumps information about call\-graph optimization, unused function removal,
  and inlining decisions.
! .IP \fBinline\fR 4
  .IX Item "inline"
  Dump after function inlining.
! .IP \fBstrubm\fR 4
  .IX Item "strubm"
  Dump after selecting \f(CW\*(C`strub\*(C'\fR modes, and recording the selections as
  function attributes.
! .IP \fBstrub\fR 4
  .IX Item "strub"
  Dump \f(CW\*(C`strub\*(C'\fR transformations: interface changes, function wrapping,
  and insertion of builtin calls for stack scrubbing and watermarking.
*************** that were not inlined.
*** 19481,19495 ****
  .Sp
  By default, the dump will contain messages about successful
  optimizations (equivalent to \fB\-optimized\fR) together with
! low-level details about the analysis.
  .RE
! .IP "\fB\-fdump\-ipa\-clones\fR" 4
  .IX Item "-fdump-ipa-clones"
  Create a dump file containing information about creation of call graph
! node clones and removals of call graph nodes during inter-procedural
  optimizations and transformations.  Its main intended use is that tools
! that create live-patches can determine the set of functions that need to
! be live-patched to completely replace a particular function (see
  \&\fB\-flive\-patching\fR).  The file name is generated by appending
  suffix \f(CW\*(C`ipa\-clones\*(C'\fR to the source file name, and the file is
  created in the same directory as the output file.  Each entry in the
--- 19416,19430 ----
  .Sp
  By default, the dump will contain messages about successful
  optimizations (equivalent to \fB\-optimized\fR) together with
! low\-level details about the analysis.
  .RE
! .IP \fB\-fdump\-ipa\-clones\fR 4
  .IX Item "-fdump-ipa-clones"
  Create a dump file containing information about creation of call graph
! node clones and removals of call graph nodes during inter\-procedural
  optimizations and transformations.  Its main intended use is that tools
! that create live\-patches can determine the set of functions that need to
! be live\-patched to completely replace a particular function (see
  \&\fB\-flive\-patching\fR).  The file name is generated by appending
  suffix \f(CW\*(C`ipa\-clones\*(C'\fR to the source file name, and the file is
  created in the same directory as the output file.  Each entry in the
*************** file is on a separate line containing se
*** 19497,19618 ****
  .Sp
  In the case of call graph clone creation, the individual fields are:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph clone\*(C'\fR.
! .IP "2." 4
  .IX Item "2."
  Name of the function being cloned as it is presented to the assembler.
! .IP "3." 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole-program analysis but is likely to be different in the two
  phases.
! .IP "4." 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP "5." 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP "6." 4
  .IX Item "6."
  The column where the function definition is located.
! .IP "7." 4
  .IX Item "7."
  Name of the new function clone as it is presented to the assembler.
! .IP "8." 4
  .IX Item "8."
  A number that uniquely represents the new function clone in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole-program analysis but is likely to be different in the two
  phases.
! .IP "9." 4
  .IX Item "9."
  The file name of the source file where the source code location of the
  new clone points to.
! .IP "10." 4
  .IX Item "10."
  The line to which the source code location of the new clone points to.
! .IP "11." 4
  .IX Item "11."
  The column to which the source code location of the new clone points to.
! .IP "12." 4
  .IX Item "12."
  A string that determines the reason for cloning.
  .RE
  .RS 4
  .Sp
  In the case of call graph clone removal, the individual fields are:
! .IP "1." 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph removal\*(C'\fR.
! .IP "2." 4
  .IX Item "2."
  Name of the function being removed as it would be presented to the assembler.
! .IP "3." 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole-program analysis but is likely to be different in the two
  phases.
! .IP "4." 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP "5." 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP "6." 4
  .IX Item "6."
  The column where the function definition is located.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-lang\fR" 4
  .IX Item "-fdump-lang"
! Dump language-specific information.  The file name is made by appending
  \&\fI.lang\fR to the source file name.
! .IP "\fB\-fdump\-lang\-all\fR" 4
  .IX Item "-fdump-lang-all"
  .PD 0
! .IP "\fB\-fdump\-lang\-\fR\fIswitch\fR" 4
  .IX Item "-fdump-lang-switch"
! .IP "\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
  .IX Item "-fdump-lang-switch-options"
! .IP "\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fdump-lang-switch-options=filename"
  .PD
! Control the dumping of language-specific information.  The \fIoptions\fR
  and \fIfilename\fR portions behave as described in the
  \&\fB\-fdump\-tree\fR option.  The following \fIswitch\fR values are
  accepted:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
! Enable all language-specific dumps.
! .IP "\fBclass\fR" 4
  .IX Item "class"
  Dump class hierarchy information.  Virtual table information is emitted
! unless '\fBslim\fR' is specified.  This option is applicable to \*(C+ only.
! .IP "\fBmodule\fR" 4
  .IX Item "module"
  Dump module information.  Options \fBlineno\fR (locations),
  \&\fBgraph\fR (reachability), \fBblocks\fR (clusters),
  \&\fBuid\fR (serialization), \fBalias\fR (mergeable),
  \&\fBasmname\fR (Elrond), \fBeh\fR (mapper) & \fBvops\fR
  (macros) may provide additional information.  This option is
! applicable to \*(C+ only.
! .IP "\fBraw\fR" 4
  .IX Item "raw"
! Dump the raw internal tree data.  This option is applicable to \*(C+ only.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdump\-passes\fR" 4
  .IX Item "-fdump-passes"
  Print on \fIstderr\fR the list of optimization passes that are turned
! on and off by the current command-line options.
! .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
  .IX Item "-fdump-statistics-option"
  Enable and control dumping of pass statistics in a separate file.  The
  file name is generated by appending a suffix ending in
--- 19432,19553 ----
  .Sp
  In the case of call graph clone creation, the individual fields are:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph clone\*(C'\fR.
! .IP 2. 4
  .IX Item "2."
  Name of the function being cloned as it is presented to the assembler.
! .IP 3. 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole\-program analysis but is likely to be different in the two
  phases.
! .IP 4. 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP 5. 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP 6. 4
  .IX Item "6."
  The column where the function definition is located.
! .IP 7. 4
  .IX Item "7."
  Name of the new function clone as it is presented to the assembler.
! .IP 8. 4
  .IX Item "8."
  A number that uniquely represents the new function clone in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole\-program analysis but is likely to be different in the two
  phases.
! .IP 9. 4
  .IX Item "9."
  The file name of the source file where the source code location of the
  new clone points to.
! .IP 10. 4
  .IX Item "10."
  The line to which the source code location of the new clone points to.
! .IP 11. 4
  .IX Item "11."
  The column to which the source code location of the new clone points to.
! .IP 12. 4
  .IX Item "12."
  A string that determines the reason for cloning.
  .RE
  .RS 4
  .Sp
  In the case of call graph clone removal, the individual fields are:
! .IP 1. 4
  .IX Item "1."
  String \f(CW\*(C`Callgraph removal\*(C'\fR.
! .IP 2. 4
  .IX Item "2."
  Name of the function being removed as it would be presented to the assembler.
! .IP 3. 4
  .IX Item "3."
  A number that uniquely represents the function being cloned in the call
  graph.  Note that the number is unique only within a compilation unit or
! within whole\-program analysis but is likely to be different in the two
  phases.
! .IP 4. 4
  .IX Item "4."
  The file name of the source file where the function is defined.
! .IP 5. 4
  .IX Item "5."
  The line on which the function definition is located.
! .IP 6. 4
  .IX Item "6."
  The column where the function definition is located.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-lang\fR 4
  .IX Item "-fdump-lang"
! Dump language\-specific information.  The file name is made by appending
  \&\fI.lang\fR to the source file name.
! .IP \fB\-fdump\-lang\-all\fR 4
  .IX Item "-fdump-lang-all"
  .PD 0
! .IP \fB\-fdump\-lang\-\fR\fIswitch\fR 4
  .IX Item "-fdump-lang-switch"
! .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4
  .IX Item "-fdump-lang-switch-options"
! .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fdump-lang-switch-options=filename"
  .PD
! Control the dumping of language\-specific information.  The \fIoptions\fR
  and \fIfilename\fR portions behave as described in the
  \&\fB\-fdump\-tree\fR option.  The following \fIswitch\fR values are
  accepted:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
! Enable all language\-specific dumps.
! .IP \fBclass\fR 4
  .IX Item "class"
  Dump class hierarchy information.  Virtual table information is emitted
! unless \*(Aq\fBslim\fR\*(Aq is specified.  This option is applicable to C++ only.
! .IP \fBmodule\fR 4
  .IX Item "module"
  Dump module information.  Options \fBlineno\fR (locations),
  \&\fBgraph\fR (reachability), \fBblocks\fR (clusters),
  \&\fBuid\fR (serialization), \fBalias\fR (mergeable),
  \&\fBasmname\fR (Elrond), \fBeh\fR (mapper) & \fBvops\fR
  (macros) may provide additional information.  This option is
! applicable to C++ only.
! .IP \fBraw\fR 4
  .IX Item "raw"
! Dump the raw internal tree data.  This option is applicable to C++ only.
  .RE
  .RS 4
  .RE
! .IP \fB\-fdump\-passes\fR 4
  .IX Item "-fdump-passes"
  Print on \fIstderr\fR the list of optimization passes that are turned
! on and off by the current command\-line options.
! .IP \fB\-fdump\-statistics\-\fR\fIoption\fR 4
  .IX Item "-fdump-statistics-option"
  Enable and control dumping of pass statistics in a separate file.  The
  file name is generated by appending a suffix ending in
*************** form is used, \fB\-stats\fR causes count
*** 19622,19635 ****
  whole compilation unit while \fB\-details\fR dumps every event as
  the passes generate them.  The default with no option is to sum
  counters for each function compiled.
! .IP "\fB\-fdump\-tree\-all\fR" 4
  .IX Item "-fdump-tree-all"
  .PD 0
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
  .IX Item "-fdump-tree-switch"
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
  .IX Item "-fdump-tree-switch-options"
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fdump-tree-switch-options=filename"
  .PD
  Control the dumping at various stages of processing the intermediate
--- 19557,19570 ----
  whole compilation unit while \fB\-details\fR dumps every event as
  the passes generate them.  The default with no option is to sum
  counters for each function compiled.
! .IP \fB\-fdump\-tree\-all\fR 4
  .IX Item "-fdump-tree-all"
  .PD 0
! .IP \fB\-fdump\-tree\-\fR\fIswitch\fR 4
  .IX Item "-fdump-tree-switch"
! .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4
  .IX Item "-fdump-tree-switch-options"
! .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fdump-tree-switch-options=filename"
  .PD
  Control the dumping at various stages of processing the intermediate
*************** which control the details of the dump.
*** 19639,19726 ****
  to all dumps; those that are not meaningful are ignored.  The
  following options are available
  .RS 4
! .IP "\fBaddress\fR" 4
  .IX Item "address"
  Print the address of each node.  Usually this is not meaningful as it
  changes according to the environment and source file.  Its primary use
  is for tying up a dump file with a debug environment.
! .IP "\fBasmname\fR" 4
  .IX Item "asmname"
  If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
  in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
  use working backward from mangled names in the assembly file.
! .IP "\fBslim\fR" 4
  .IX Item "slim"
! When dumping front-end intermediate representations, inhibit dumping
  of members of a scope or body of a function merely because that scope
  has been reached.  Only dump such items when they are directly reachable
  by some other path.
  .Sp
! When dumping pretty-printed trees, this option inhibits dumping the
  bodies of control structures.
  .Sp
! When dumping \s-1RTL,\s0 print the \s-1RTL\s0 in slim (condensed) form instead of
! the default LISP-like representation.
! .IP "\fBraw\fR" 4
  .IX Item "raw"
  Print a raw representation of the tree.  By default, trees are
! pretty-printed into a C\-like representation.
! .IP "\fBdetails\fR" 4
  .IX Item "details"
  Enable more detailed dumps (not honored by every dump option). Also
  include information from the optimization passes.
! .IP "\fBstats\fR" 4
  .IX Item "stats"
  Enable dumping various statistics about the pass (not honored by every dump
  option).
! .IP "\fBblocks\fR" 4
  .IX Item "blocks"
  Enable showing basic block boundaries (disabled in raw dumps).
! .IP "\fBgraph\fR" 4
  .IX Item "graph"
  For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
  dump a representation of the control flow graph suitable for viewing with
! GraphViz to \fI\fIfile\fI.\fIpassid\fI.\fIpass\fI.dot\fR.  Each function in
! the file is pretty-printed as a subgraph, so that GraphViz can render them
  all in a single plot.
  .Sp
! This option currently only works for \s-1RTL\s0 dumps, and the \s-1RTL\s0 is always
  dumped in slim form.
! .IP "\fBvops\fR" 4
  .IX Item "vops"
  Enable showing virtual operands for every statement.
! .IP "\fBlineno\fR" 4
  .IX Item "lineno"
  Enable showing line numbers for statements.
! .IP "\fBuid\fR" 4
  .IX Item "uid"
! Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
! .IP "\fBverbose\fR" 4
  .IX Item "verbose"
  Enable showing the tree dump for each statement.
! .IP "\fBeh\fR" 4
  .IX Item "eh"
! Enable showing the \s-1EH\s0 region number holding each statement.
! .IP "\fBscev\fR" 4
  .IX Item "scev"
  Enable showing scalar evolution analysis details.
! .IP "\fBoptimized\fR" 4
  .IX Item "optimized"
  Enable showing optimization information (only available in certain
  passes).
! .IP "\fBmissed\fR" 4
  .IX Item "missed"
  Enable showing missed optimization information (only available in certain
  passes).
! .IP "\fBnote\fR" 4
  .IX Item "note"
  Enable other detailed optimization information (only available in
  certain passes).
! .IP "\fBall\fR" 4
  .IX Item "all"
  Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
  and \fBlineno\fR.
! .IP "\fBoptall\fR" 4
  .IX Item "optall"
  Turn on all optimization options, i.e., \fBoptimized\fR,
  \&\fBmissed\fR, and \fBnote\fR.
--- 19574,19661 ----
  to all dumps; those that are not meaningful are ignored.  The
  following options are available
  .RS 4
! .IP \fBaddress\fR 4
  .IX Item "address"
  Print the address of each node.  Usually this is not meaningful as it
  changes according to the environment and source file.  Its primary use
  is for tying up a dump file with a debug environment.
! .IP \fBasmname\fR 4
  .IX Item "asmname"
  If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
  in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
  use working backward from mangled names in the assembly file.
! .IP \fBslim\fR 4
  .IX Item "slim"
! When dumping front\-end intermediate representations, inhibit dumping
  of members of a scope or body of a function merely because that scope
  has been reached.  Only dump such items when they are directly reachable
  by some other path.
  .Sp
! When dumping pretty\-printed trees, this option inhibits dumping the
  bodies of control structures.
  .Sp
! When dumping RTL, print the RTL in slim (condensed) form instead of
! the default LISP\-like representation.
! .IP \fBraw\fR 4
  .IX Item "raw"
  Print a raw representation of the tree.  By default, trees are
! pretty\-printed into a C\-like representation.
! .IP \fBdetails\fR 4
  .IX Item "details"
  Enable more detailed dumps (not honored by every dump option). Also
  include information from the optimization passes.
! .IP \fBstats\fR 4
  .IX Item "stats"
  Enable dumping various statistics about the pass (not honored by every dump
  option).
! .IP \fBblocks\fR 4
  .IX Item "blocks"
  Enable showing basic block boundaries (disabled in raw dumps).
! .IP \fBgraph\fR 4
  .IX Item "graph"
  For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
  dump a representation of the control flow graph suitable for viewing with
! GraphViz to \fIfile.passid.pass.dot\fR.  Each function in
! the file is pretty\-printed as a subgraph, so that GraphViz can render them
  all in a single plot.
  .Sp
! This option currently only works for RTL dumps, and the RTL is always
  dumped in slim form.
! .IP \fBvops\fR 4
  .IX Item "vops"
  Enable showing virtual operands for every statement.
! .IP \fBlineno\fR 4
  .IX Item "lineno"
  Enable showing line numbers for statements.
! .IP \fBuid\fR 4
  .IX Item "uid"
! Enable showing the unique ID (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
! .IP \fBverbose\fR 4
  .IX Item "verbose"
  Enable showing the tree dump for each statement.
! .IP \fBeh\fR 4
  .IX Item "eh"
! Enable showing the EH region number holding each statement.
! .IP \fBscev\fR 4
  .IX Item "scev"
  Enable showing scalar evolution analysis details.
! .IP \fBoptimized\fR 4
  .IX Item "optimized"
  Enable showing optimization information (only available in certain
  passes).
! .IP \fBmissed\fR 4
  .IX Item "missed"
  Enable showing missed optimization information (only available in certain
  passes).
! .IP \fBnote\fR 4
  .IX Item "note"
  Enable other detailed optimization information (only available in
  certain passes).
! .IP \fBall\fR 4
  .IX Item "all"
  Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
  and \fBlineno\fR.
! .IP \fBoptall\fR 4
  .IX Item "optall"
  Turn on all optimization options, i.e., \fBoptimized\fR,
  \&\fBmissed\fR, and \fBnote\fR.
*************** Turn on all optimization options, i.e.,
*** 19729,19768 ****
  .Sp
  To determine what tree dumps are available or find the dump for a pass
  of interest follow the steps below.
! .IP "1." 4
  .IX Item "1."
! Invoke \s-1GCC\s0 with \fB\-fdump\-passes\fR and in the \fIstderr\fR output
  look for a code that corresponds to the pass you are interested in.
  For example, the codes \f(CW\*(C`tree\-evrp\*(C'\fR, \f(CW\*(C`tree\-vrp1\*(C'\fR, and
  \&\f(CW\*(C`tree\-vrp2\*(C'\fR correspond to the three Value Range Propagation passes.
  The number at the end distinguishes distinct invocations of the same pass.
! .IP "2." 4
  .IX Item "2."
  To enable the creation of the dump file, append the pass code to
! the \fB\-fdump\-\fR option prefix and invoke \s-1GCC\s0 with it.  For example,
  to enable the dump from the Early Value Range Propagation pass, invoke
! \&\s-1GCC\s0 with the \fB\-fdump\-tree\-evrp\fR option.  Optionally, you may
! specify the name of the dump file.  If you don't specify one, \s-1GCC\s0
  creates as described below.
! .IP "3." 4
  .IX Item "3."
  Find the pass dump in a file whose name is composed of three components
! separated by a period: the name of the source file \s-1GCC\s0 was invoked to
  compile, a numeric suffix indicating the pass number followed by the
! letter \fBt\fR for tree passes (and the letter \fBr\fR for \s-1RTL\s0 passes),
! and finally the pass code.  For example, the Early \s-1VRP\s0 pass dump might
  be in a file named \fImyfile.c.038t.evrp\fR in the current working
  directory.  Note that the numeric codes are not stable and may change
! from one version of \s-1GCC\s0 to another.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fopt\-info\fR" 4
  .IX Item "-fopt-info"
  .PD 0
! .IP "\fB\-fopt\-info\-\fR\fIoptions\fR" 4
  .IX Item "-fopt-info-options"
! .IP "\fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
  .IX Item "-fopt-info-options=filename"
  .PD
  Controls optimization dumps from various optimization passes. If the
--- 19664,19703 ----
  .Sp
  To determine what tree dumps are available or find the dump for a pass
  of interest follow the steps below.
! .IP 1. 4
  .IX Item "1."
! Invoke GCC with \fB\-fdump\-passes\fR and in the \fIstderr\fR output
  look for a code that corresponds to the pass you are interested in.
  For example, the codes \f(CW\*(C`tree\-evrp\*(C'\fR, \f(CW\*(C`tree\-vrp1\*(C'\fR, and
  \&\f(CW\*(C`tree\-vrp2\*(C'\fR correspond to the three Value Range Propagation passes.
  The number at the end distinguishes distinct invocations of the same pass.
! .IP 2. 4
  .IX Item "2."
  To enable the creation of the dump file, append the pass code to
! the \fB\-fdump\-\fR option prefix and invoke GCC with it.  For example,
  to enable the dump from the Early Value Range Propagation pass, invoke
! GCC with the \fB\-fdump\-tree\-evrp\fR option.  Optionally, you may
! specify the name of the dump file.  If you don\*(Aqt specify one, GCC
  creates as described below.
! .IP 3. 4
  .IX Item "3."
  Find the pass dump in a file whose name is composed of three components
! separated by a period: the name of the source file GCC was invoked to
  compile, a numeric suffix indicating the pass number followed by the
! letter \fBt\fR for tree passes (and the letter \fBr\fR for RTL passes),
! and finally the pass code.  For example, the Early VRP pass dump might
  be in a file named \fImyfile.c.038t.evrp\fR in the current working
  directory.  Note that the numeric codes are not stable and may change
! from one version of GCC to another.
  .RE
  .RS 4
  .RE
! .IP \fB\-fopt\-info\fR 4
  .IX Item "-fopt-info"
  .PD 0
! .IP \fB\-fopt\-info\-\fR\fIoptions\fR 4
  .IX Item "-fopt-info-options"
! .IP \fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4
  .IX Item "-fopt-info-options=filename"
  .PD
  Controls optimization dumps from various optimization passes. If the
*************** optimizations.
*** 19772,19810 ****
  .Sp
  The \fIoptions\fR can be divided into three groups:
  .RS 4
! .IP "1." 4
  .IX Item "1."
  options describing what kinds of messages should be emitted,
! .IP "2." 4
  .IX Item "2."
  options describing the verbosity of the dump, and
! .IP "3." 4
  .IX Item "3."
  options describing which optimizations should be included.
  .RE
  .RS 4
  .Sp
  The options from each group can be freely mixed as they are
! non-overlapping. However, in case of any conflicts,
  the later options override the earlier options on the command
  line.
  .Sp
  The following options control which kinds of messages should be emitted:
! .IP "\fBoptimized\fR" 4
  .IX Item "optimized"
  Print information when an optimization is successfully applied. It is
  up to a pass to decide which information is relevant. For example, the
  vectorizer passes print the source location of loops which are
  successfully vectorized.
! .IP "\fBmissed\fR" 4
  .IX Item "missed"
  Print information about missed optimizations. Individual passes
  control which information to include in the output.
! .IP "\fBnote\fR" 4
  .IX Item "note"
  Print verbose information about optimizations, such as certain
  transformations, more detailed messages about decisions etc.
! .IP "\fBall\fR" 4
  .IX Item "all"
  Print detailed optimization information. This includes
  \&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
--- 19707,19745 ----
  .Sp
  The \fIoptions\fR can be divided into three groups:
  .RS 4
! .IP 1. 4
  .IX Item "1."
  options describing what kinds of messages should be emitted,
! .IP 2. 4
  .IX Item "2."
  options describing the verbosity of the dump, and
! .IP 3. 4
  .IX Item "3."
  options describing which optimizations should be included.
  .RE
  .RS 4
  .Sp
  The options from each group can be freely mixed as they are
! non\-overlapping. However, in case of any conflicts,
  the later options override the earlier options on the command
  line.
  .Sp
  The following options control which kinds of messages should be emitted:
! .IP \fBoptimized\fR 4
  .IX Item "optimized"
  Print information when an optimization is successfully applied. It is
  up to a pass to decide which information is relevant. For example, the
  vectorizer passes print the source location of loops which are
  successfully vectorized.
! .IP \fBmissed\fR 4
  .IX Item "missed"
  Print information about missed optimizations. Individual passes
  control which information to include in the output.
! .IP \fBnote\fR 4
  .IX Item "note"
  Print verbose information about optimizations, such as certain
  transformations, more detailed messages about decisions etc.
! .IP \fBall\fR 4
  .IX Item "all"
  Print detailed optimization information. This includes
  \&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
*************** Print detailed optimization information.
*** 19812,19843 ****
  .RS 4
  .Sp
  The following option controls the dump verbosity:
! .IP "\fBinternals\fR" 4
  .IX Item "internals"
! By default, only \*(L"high-level\*(R" messages are emitted. This option enables
  additional, more detailed, messages, which are likely to only be of interest
! to \s-1GCC\s0 developers.
  .RE
  .RS 4
  .Sp
  One or more of the following option keywords can be used to describe a
  group of optimizations:
! .IP "\fBipa\fR" 4
  .IX Item "ipa"
  Enable dumps from all interprocedural optimizations.
! .IP "\fBloop\fR" 4
  .IX Item "loop"
  Enable dumps from all loop optimizations.
! .IP "\fBinline\fR" 4
  .IX Item "inline"
  Enable dumps from all inlining optimizations.
! .IP "\fBomp\fR" 4
  .IX Item "omp"
! Enable dumps from all \s-1OMP\s0 (Offloading and Multi Processing) optimizations.
! .IP "\fBvec\fR" 4
  .IX Item "vec"
  Enable dumps from all vectorization optimizations.
! .IP "\fBoptall\fR" 4
  .IX Item "optall"
  Enable dumps from all optimizations. This is a superset of
  the optimization groups listed above.
--- 19747,19778 ----
  .RS 4
  .Sp
  The following option controls the dump verbosity:
! .IP \fBinternals\fR 4
  .IX Item "internals"
! By default, only "high\-level" messages are emitted. This option enables
  additional, more detailed, messages, which are likely to only be of interest
! to GCC developers.
  .RE
  .RS 4
  .Sp
  One or more of the following option keywords can be used to describe a
  group of optimizations:
! .IP \fBipa\fR 4
  .IX Item "ipa"
  Enable dumps from all interprocedural optimizations.
! .IP \fBloop\fR 4
  .IX Item "loop"
  Enable dumps from all loop optimizations.
! .IP \fBinline\fR 4
  .IX Item "inline"
  Enable dumps from all inlining optimizations.
! .IP \fBomp\fR 4
  .IX Item "omp"
! Enable dumps from all OMP (Offloading and Multi Processing) optimizations.
! .IP \fBvec\fR 4
  .IX Item "vec"
  Enable dumps from all vectorization optimizations.
! .IP \fBoptall\fR 4
  .IX Item "optall"
  Enable dumps from all optimizations. This is a superset of
  the optimization groups listed above.
*************** the optimization groups listed above.
*** 19845,19853 ****
  .RS 4
  .Sp
  If \fIoptions\fR is
! omitted, it defaults to \fBoptimized-optall\fR, which means to dump messages
  about successful optimizations from all the passes, omitting messages
! that are treated as \*(L"internals\*(R".
  .Sp
  If the \fIfilename\fR is provided, then the dumps from all the
  applicable optimizations are concatenated into the \fIfilename\fR.
--- 19780,19788 ----
  .RS 4
  .Sp
  If \fIoptions\fR is
! omitted, it defaults to \fBoptimized\-optall\fR, which means to dump messages
  about successful optimizations from all the passes, omitting messages
! that are treated as "internals".
  .Sp
  If the \fIfilename\fR is provided, then the dumps from all the
  applicable optimizations are concatenated into the \fIfilename\fR.
*************** the first option takes effect and the su
*** 19909,19945 ****
  ignored. Thus only \fIvec.miss\fR is produced which contains
  dumps from the vectorizer about missed opportunities.
  .RE
! .IP "\fB\-fsave\-optimization\-record\fR" 4
  .IX Item "-fsave-optimization-record"
! Write a \s-1SRCFILE\s0.opt\-record.json.gz file detailing what optimizations
  were performed, for those optimizations that support \fB\-fopt\-info\fR.
  .Sp
  This option is experimental and the format of the data within the
! compressed \s-1JSON\s0 file is subject to change.
  .Sp
! It is roughly equivalent to a machine-readable version of
  \&\fB\-fopt\-info\-all\fR, as a collection of messages with source file,
  line number and column number, with the following additional data for
  each message:
  .RS 4
! .IP "*" 4
  the execution count of the code being optimized, along with metadata about
  whether this was from actual profile data, or just an estimate, allowing
  consumers to prioritize messages by code hotness,
! .IP "*" 4
  the function name of the code being optimized, where applicable,
! .IP "*" 4
! the \*(L"inlining chain\*(R" for the code being optimized, so that when
  a function is inlined into several different places (which might
  themselves be inlined), the reader can distinguish between the copies,
! .IP "*" 4
  objects identifying those parts of the message that refer to expressions,
! statements or symbol-table nodes, which of these categories they are, and,
  when available, their source code location,
! .IP "*" 4
! the \s-1GCC\s0 pass that emitted the message, and
! .IP "*" 4
! the location in \s-1GCC\s0's own code from which the message was emitted
  .RE
  .RS 4
  .Sp
--- 19844,19880 ----
  ignored. Thus only \fIvec.miss\fR is produced which contains
  dumps from the vectorizer about missed opportunities.
  .RE
! .IP \fB\-fsave\-optimization\-record\fR 4
  .IX Item "-fsave-optimization-record"
! Write a SRCFILE.opt\-record.json.gz file detailing what optimizations
  were performed, for those optimizations that support \fB\-fopt\-info\fR.
  .Sp
  This option is experimental and the format of the data within the
! compressed JSON file is subject to change.
  .Sp
! It is roughly equivalent to a machine\-readable version of
  \&\fB\-fopt\-info\-all\fR, as a collection of messages with source file,
  line number and column number, with the following additional data for
  each message:
  .RS 4
! .IP * 4
  the execution count of the code being optimized, along with metadata about
  whether this was from actual profile data, or just an estimate, allowing
  consumers to prioritize messages by code hotness,
! .IP * 4
  the function name of the code being optimized, where applicable,
! .IP * 4
! the "inlining chain" for the code being optimized, so that when
  a function is inlined into several different places (which might
  themselves be inlined), the reader can distinguish between the copies,
! .IP * 4
  objects identifying those parts of the message that refer to expressions,
! statements or symbol\-table nodes, which of these categories they are, and,
  when available, their source code location,
! .IP * 4
! the GCC pass that emitted the message, and
! .IP * 4
! the location in GCC\*(Aqs own code from which the message was emitted
  .RE
  .RS 4
  .Sp
*************** Additionally, some messages are logicall
*** 19947,19953 ****
  messages, reflecting implementation details of the optimization
  passes.
  .RE
! .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
  .IX Item "-fsched-verbose=n"
  On targets that use instruction scheduling, this option controls the
  amount of debugging output the scheduler prints to the dump files.
--- 19882,19888 ----
  messages, reflecting implementation details of the optimization
  passes.
  .RE
! .IP \fB\-fsched\-verbose=\fR\fIn\fR 4
  .IX Item "-fsched-verbose=n"
  On targets that use instruction scheduling, this option controls the
  amount of debugging output the scheduler prints to the dump files.
*************** For \fIn\fR greater than zero, \fB\-fsch
*** 19956,20021 ****
  same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
  For \fIn\fR greater than one, it also output basic block probabilities,
  detailed ready list information and unit/insn info.  For \fIn\fR greater
! than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
  And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
  dependence info.
! .IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
  .IX Item "-fenable-kind-pass"
  .PD 0
! .IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fdisable-kind-pass=range-list"
  .PD
  This is a set of options that are used to explicitly disable/enable
! optimization passes.  These options are intended for use for debugging \s-1GCC.\s0
  Compiler users should use regular options for enabling/disabling
  passes instead.
  .RS 4
! .IP "\fB\-fdisable\-ipa\-\fR\fIpass\fR" 4
  .IX Item "-fdisable-ipa-pass"
! Disable \s-1IPA\s0 pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR" 4
  .IX Item "-fdisable-rtl-pass"
  .PD 0
! .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fdisable-rtl-pass=range-list"
  .PD
! Disable \s-1RTL\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
! appended with a sequential number starting from 1.  \fIrange-list\fR is a 
! comma-separated list of function ranges or assembler names.  Each range is a number
  pair separated by a colon.  The range is inclusive in both ends.  If the range
  is trivial, the number pair can be simplified as a single number.  If the
! function's call graph node's \fIuid\fR falls within one of the specified ranges,
  the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
  function header of a dump file, and the pass names can be dumped by using
  option \fB\-fdump\-passes\fR.
! .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR" 4
  .IX Item "-fdisable-tree-pass"
  .PD 0
! .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fdisable-tree-pass=range-list"
  .PD
  Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
  option arguments.
! .IP "\fB\-fenable\-ipa\-\fR\fIpass\fR" 4
  .IX Item "-fenable-ipa-pass"
! Enable \s-1IPA\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR" 4
  .IX Item "-fenable-rtl-pass"
  .PD 0
! .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fenable-rtl-pass=range-list"
  .PD
! Enable \s-1RTL\s0 pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
  description and examples.
! .IP "\fB\-fenable\-tree\-\fR\fIpass\fR" 4
  .IX Item "-fenable-tree-pass"
  .PD 0
! .IP "\fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
  .IX Item "-fenable-tree-pass=range-list"
  .PD
  Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
--- 19891,19956 ----
  same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
  For \fIn\fR greater than one, it also output basic block probabilities,
  detailed ready list information and unit/insn info.  For \fIn\fR greater
! than two, it includes RTL at abort point, control\-flow and regions info.
  And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
  dependence info.
! .IP \fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 4
  .IX Item "-fenable-kind-pass"
  .PD 0
! .IP \fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fdisable-kind-pass=range-list"
  .PD
  This is a set of options that are used to explicitly disable/enable
! optimization passes.  These options are intended for use for debugging GCC.
  Compiler users should use regular options for enabling/disabling
  passes instead.
  .RS 4
! .IP \fB\-fdisable\-ipa\-\fR\fIpass\fR 4
  .IX Item "-fdisable-ipa-pass"
! Disable IPA pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP \fB\-fdisable\-rtl\-\fR\fIpass\fR 4
  .IX Item "-fdisable-rtl-pass"
  .PD 0
! .IP \fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fdisable-rtl-pass=range-list"
  .PD
! Disable RTL pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
! appended with a sequential number starting from 1.  \fIrange\-list\fR is a 
! comma\-separated list of function ranges or assembler names.  Each range is a number
  pair separated by a colon.  The range is inclusive in both ends.  If the range
  is trivial, the number pair can be simplified as a single number.  If the
! function\*(Aqs call graph node\*(Aqs \fIuid\fR falls within one of the specified ranges,
  the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
  function header of a dump file, and the pass names can be dumped by using
  option \fB\-fdump\-passes\fR.
! .IP \fB\-fdisable\-tree\-\fR\fIpass\fR 4
  .IX Item "-fdisable-tree-pass"
  .PD 0
! .IP \fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fdisable-tree-pass=range-list"
  .PD
  Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
  option arguments.
! .IP \fB\-fenable\-ipa\-\fR\fIpass\fR 4
  .IX Item "-fenable-ipa-pass"
! Enable IPA pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
  statically invoked in the compiler multiple times, the pass name should be
  appended with a sequential number starting from 1.
! .IP \fB\-fenable\-rtl\-\fR\fIpass\fR 4
  .IX Item "-fenable-rtl-pass"
  .PD 0
! .IP \fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fenable-rtl-pass=range-list"
  .PD
! Enable RTL pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
  description and examples.
! .IP \fB\-fenable\-tree\-\fR\fIpass\fR 4
  .IX Item "-fenable-tree-pass"
  .PD 0
! .IP \fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4
  .IX Item "-fenable-tree-pass=range-list"
  .PD
  Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
*************** Here are some examples showing uses of t
*** 20042,20059 ****
  \&           \-fenable\-tree\-unroll
  .Ve
  .RE
! .IP "\fB\-fchecking\fR" 4
  .IX Item "-fchecking"
  .PD 0
! .IP "\fB\-fchecking=\fR\fIn\fR" 4
  .IX Item "-fchecking=n"
  .PD
  Enable internal consistency checking.  The default depends on
  the compiler configuration.  \fB\-fchecking=2\fR enables further
  internal consistency checking that might affect code generation.
! .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
  .IX Item "-frandom-seed=string"
! This option provides a seed that \s-1GCC\s0 uses in place of
  random numbers in generating certain symbol names
  that have to be different in every compiled file.  It is also used to
  place unique stamps in coverage data files and the object files that
--- 19977,19994 ----
  \&           \-fenable\-tree\-unroll
  .Ve
  .RE
! .IP \fB\-fchecking\fR 4
  .IX Item "-fchecking"
  .PD 0
! .IP \fB\-fchecking=\fR\fIn\fR 4
  .IX Item "-fchecking=n"
  .PD
  Enable internal consistency checking.  The default depends on
  the compiler configuration.  \fB\-fchecking=2\fR enables further
  internal consistency checking that might affect code generation.
! .IP \fB\-frandom\-seed=\fR\fIstring\fR 4
  .IX Item "-frandom-seed=string"
! This option provides a seed that GCC uses in place of
  random numbers in generating certain symbol names
  that have to be different in every compiled file.  It is also used to
  place unique stamps in coverage data files and the object files that
*************** produce them.  You can use the \fB\-fran
*** 20061,20094 ****
  reproducibly identical object files.
  .Sp
  The \fIstring\fR can either be a number (decimal, octal or hex) or an
! arbitrary string (in which case it's converted to a number by
! computing \s-1CRC32\s0).
  .Sp
  The \fIstring\fR should be different for every file you compile.
! .IP "\fB\-save\-temps\fR" 4
  .IX Item "-save-temps"
! Store the usual \*(L"temporary\*(R" intermediate files permanently; name them
  as auxiliary output files, as specified described under
  \&\fB\-dumpbase\fR and \fB\-dumpdir\fR.
  .Sp
! When used in combination with the \fB\-x\fR command-line option,
  \&\fB\-save\-temps\fR is sensible enough to avoid overwriting an
  input source file with the same extension as an intermediate file.
  The corresponding intermediate file may be obtained by renaming the
  source file before using \fB\-save\-temps\fR.
! .IP "\fB\-save\-temps=cwd\fR" 4
  .IX Item "-save-temps=cwd"
  Equivalent to \fB\-save\-temps \-dumpdir ./\fR.
! .IP "\fB\-save\-temps=obj\fR" 4
  .IX Item "-save-temps=obj"
! Equivalent to \fB\-save\-temps \-dumpdir \f(BIoutdir/\fB\fR, where
  \&\fIoutdir/\fR is the directory of the output file specified after the
  \&\fB\-o\fR option, including any directory separators.  If the
  \&\fB\-o\fR option is not used, the \fB\-save\-temps=obj\fR switch
  behaves like \fB\-save\-temps=cwd\fR.
! .IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
  .IX Item "-time[=file]"
! Report the \s-1CPU\s0 time taken by each subprocess in the compilation
  sequence.  For C source files, this is the compiler proper and assembler
  (plus the linker if linking is done).
  .Sp
--- 19996,20029 ----
  reproducibly identical object files.
  .Sp
  The \fIstring\fR can either be a number (decimal, octal or hex) or an
! arbitrary string (in which case it\*(Aqs converted to a number by
! computing CRC32).
  .Sp
  The \fIstring\fR should be different for every file you compile.
! .IP \fB\-save\-temps\fR 4
  .IX Item "-save-temps"
! Store the usual "temporary" intermediate files permanently; name them
  as auxiliary output files, as specified described under
  \&\fB\-dumpbase\fR and \fB\-dumpdir\fR.
  .Sp
! When used in combination with the \fB\-x\fR command\-line option,
  \&\fB\-save\-temps\fR is sensible enough to avoid overwriting an
  input source file with the same extension as an intermediate file.
  The corresponding intermediate file may be obtained by renaming the
  source file before using \fB\-save\-temps\fR.
! .IP \fB\-save\-temps=cwd\fR 4
  .IX Item "-save-temps=cwd"
  Equivalent to \fB\-save\-temps \-dumpdir ./\fR.
! .IP \fB\-save\-temps=obj\fR 4
  .IX Item "-save-temps=obj"
! Equivalent to \fB\-save\-temps \-dumpdir \fR\f(BIoutdir/\fR, where
  \&\fIoutdir/\fR is the directory of the output file specified after the
  \&\fB\-o\fR option, including any directory separators.  If the
  \&\fB\-o\fR option is not used, the \fB\-save\-temps=obj\fR switch
  behaves like \fB\-save\-temps=cwd\fR.
! .IP \fB\-time\fR[\fB=\fR\fIfile\fR] 4
  .IX Item "-time[=file]"
! Report the CPU time taken by each subprocess in the compilation
  sequence.  For C source files, this is the compiler proper and assembler
  (plus the linker if linking is done).
  .Sp
*************** Without the specification of an output f
*** 20099,20106 ****
  \&        # as 0.00 0.01
  .Ve
  .Sp
! The first number on each line is the \*(L"user time\*(R", that is time spent
! executing the program itself.  The second number is \*(L"system time\*(R",
  time spent executing operating system routines on behalf of the program.
  Both numbers are in seconds.
  .Sp
--- 20034,20041 ----
  \&        # as 0.00 0.01
  .Ve
  .Sp
! The first number on each line is the "user time", that is time spent
! executing the program itself.  The second number is "system time",
  time spent executing operating system routines on behalf of the program.
  Both numbers are in seconds.
  .Sp
*************** named file, and it looks like this:
*** 20112,20127 ****
  \&        0.00 0.01 as <options>
  .Ve
  .Sp
! The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
  name, and the options passed to the program are displayed, so that one
  can later tell what file was being compiled, and with which options.
! .IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
  .IX Item "-fdump-final-insns[=file]"
! Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
  optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
  of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
  dump base name, see \fB\-dumpbase\fR.
! .IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
  .IX Item "-fcompare-debug[=opts]"
  If no error occurs during compilation, run the compiler a second time,
  adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
--- 20047,20062 ----
  \&        0.00 0.01 as <options>
  .Ve
  .Sp
! The "user time" and the "system time" are moved before the program
  name, and the options passed to the program are displayed, so that one
  can later tell what file was being compiled, and with which options.
! .IP \fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] 4
  .IX Item "-fdump-final-insns[=file]"
! Dump the final internal representation (RTL) to \fIfile\fR.  If the
  optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
  of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
  dump base name, see \fB\-dumpbase\fR.
! .IP \fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR] 4
  .IX Item "-fcompare-debug[=opts]"
  If no error occurs during compilation, run the compiler a second time,
  adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
*************** representation in both compilations, and
*** 20130,20153 ****
  .Sp
  If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
  .Sp
! The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
  and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
! \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
  then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
  is used.
  .Sp
  \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
  is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
  of the final representation and the second compilation, preventing even
! \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
  .Sp
  To verify full coverage during \fB\-fcompare\-debug\fR testing, set
! \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
! which \s-1GCC\s0 rejects as an invalid option in any actual compilation
  (rather than preprocessing, assembly or linking).  To get just a
! warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
  not overridden\fR will do.
! .IP "\fB\-fcompare\-debug\-second\fR" 4
  .IX Item "-fcompare-debug-second"
  This option is implicitly passed to the compiler for the second
  compilation requested by \fB\-fcompare\-debug\fR, along with options to
--- 20065,20088 ----
  .Sp
  If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
  .Sp
! The environment variable \fBGCC_COMPARE_DEBUG\fR, if defined, non\-empty
  and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
! \&\fBGCC_COMPARE_DEBUG\fR is defined to a string starting with a dash,
  then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
  is used.
  .Sp
  \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
  is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
  of the final representation and the second compilation, preventing even
! \&\fBGCC_COMPARE_DEBUG\fR from taking effect.
  .Sp
  To verify full coverage during \fB\-fcompare\-debug\fR testing, set
! \&\fBGCC_COMPARE_DEBUG\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
! which GCC rejects as an invalid option in any actual compilation
  (rather than preprocessing, assembly or linking).  To get just a
! warning, setting \fBGCC_COMPARE_DEBUG\fR to \fB\-w%n\-fcompare\-debug
  not overridden\fR will do.
! .IP \fB\-fcompare\-debug\-second\fR 4
  .IX Item "-fcompare-debug-second"
  This option is implicitly passed to the compiler for the second
  compilation requested by \fB\-fcompare\-debug\fR, along with options to
*************** overwriting those generated by the first
*** 20160,20166 ****
  When this option is passed to the compiler driver, it causes the
  \&\fIfirst\fR compilation to be skipped, which makes it useful for little
  other than debugging the compiler proper.
! .IP "\fB\-gtoggle\fR" 4
  .IX Item "-gtoggle"
  Turn off generation of debug info, if leaving out this option
  generates it, or turn it on at level 2 otherwise.  The position of this
--- 20095,20101 ----
  When this option is passed to the compiler driver, it causes the
  \&\fIfirst\fR compilation to be skipped, which makes it useful for little
  other than debugging the compiler proper.
! .IP \fB\-gtoggle\fR 4
  .IX Item "-gtoggle"
  Turn off generation of debug info, if leaving out this option
  generates it, or turn it on at level 2 otherwise.  The position of this
*************** argument in the command line does not ma
*** 20168,20239 ****
  other options are processed, and it does so only once, no matter how
  many times it is given.  This is mainly intended to be used with
  \&\fB\-fcompare\-debug\fR.
! .IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
  .IX Item "-fvar-tracking-assignments-toggle"
  Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
  \&\fB\-gtoggle\fR toggles \fB\-g\fR.
! .IP "\fB\-Q\fR" 4
  .IX Item "-Q"
  Makes the compiler print out each function name as it is compiled, and
  print some statistics about each pass when it finishes.
! .IP "\fB\-ftime\-report\fR" 4
  .IX Item "-ftime-report"
  Makes the compiler print some statistics to stderr about the time consumed
  by each pass when it finishes.
  .Sp
! If \s-1SARIF\s0 output of diagnostics was requested via
  \&\fB\-fdiagnostics\-format=sarif\-file\fR or
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR then the \fB\-ftime\-report\fR
! information is instead emitted in \s-1JSON\s0 form as part of \s-1SARIF\s0 output.  The
! precise format of this \s-1JSON\s0 data is subject to change, and the values may
  not exactly match those emitted to stderr due to being written out at a
  slightly different place within the compiler.
! .IP "\fB\-ftime\-report\-details\fR" 4
  .IX Item "-ftime-report-details"
  Record the time consumed by infrastructure parts separately for each pass.
! .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
  .IX Item "-fira-verbose=n"
  Control the verbosity of the dump file for the integrated register allocator.
  The default value is 5.  If the value \fIn\fR is greater or equal to 10,
  the dump output is sent to stderr using the same format as \fIn\fR minus 10.
! .IP "\fB\-flto\-report\fR" 4
  .IX Item "-flto-report"
! Prints a report with internal details on the workings of the link-time
  optimizer.  The contents of this report vary from version to version.
! It is meant to be useful to \s-1GCC\s0 developers when processing object
! files in \s-1LTO\s0 mode (via \fB\-flto\fR).
  .Sp
  Disabled by default.
! .IP "\fB\-flto\-report\-wpa\fR" 4
  .IX Item "-flto-report-wpa"
! Like \fB\-flto\-report\fR, but only print for the \s-1WPA\s0 phase of link-time
  optimization.
! .IP "\fB\-fmem\-report\fR" 4
  .IX Item "-fmem-report"
  Makes the compiler print some statistics about permanent memory
  allocation when it finishes.
! .IP "\fB\-fmem\-report\-wpa\fR" 4
  .IX Item "-fmem-report-wpa"
  Makes the compiler print some statistics about permanent memory
! allocation for the \s-1WPA\s0 phase only.
! .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
  .IX Item "-fpre-ipa-mem-report"
  .PD 0
! .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
  .IX Item "-fpost-ipa-mem-report"
  .PD
  Makes the compiler print some statistics about permanent memory
  allocation before or after interprocedural optimization.
! .IP "\fB\-fmultiflags\fR" 4
  .IX Item "-fmultiflags"
! This option enables multilib-aware \f(CW\*(C`TFLAGS\*(C'\fR to be used to build
  target libraries with options different from those the compiler is
  configured to use by default, through the use of specs set up by compiler internals, by the target, or by builders at
  configure time.
  .Sp
  Like \f(CW\*(C`TFLAGS\*(C'\fR, this allows the target libraries to be built for
  portable baseline environments, while the compiler defaults to more
! demanding ones.  That's useful because users can easily override the
  defaults the compiler is configured to use to build their own programs,
  if the defaults are not ideal for their target environment, whereas
  rebuilding the runtime libraries is usually not as easy or desirable.
--- 20103,20174 ----
  other options are processed, and it does so only once, no matter how
  many times it is given.  This is mainly intended to be used with
  \&\fB\-fcompare\-debug\fR.
! .IP \fB\-fvar\-tracking\-assignments\-toggle\fR 4
  .IX Item "-fvar-tracking-assignments-toggle"
  Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
  \&\fB\-gtoggle\fR toggles \fB\-g\fR.
! .IP \fB\-Q\fR 4
  .IX Item "-Q"
  Makes the compiler print out each function name as it is compiled, and
  print some statistics about each pass when it finishes.
! .IP \fB\-ftime\-report\fR 4
  .IX Item "-ftime-report"
  Makes the compiler print some statistics to stderr about the time consumed
  by each pass when it finishes.
  .Sp
! If SARIF output of diagnostics was requested via
  \&\fB\-fdiagnostics\-format=sarif\-file\fR or
  \&\fB\-fdiagnostics\-format=sarif\-stderr\fR then the \fB\-ftime\-report\fR
! information is instead emitted in JSON form as part of SARIF output.  The
! precise format of this JSON data is subject to change, and the values may
  not exactly match those emitted to stderr due to being written out at a
  slightly different place within the compiler.
! .IP \fB\-ftime\-report\-details\fR 4
  .IX Item "-ftime-report-details"
  Record the time consumed by infrastructure parts separately for each pass.
! .IP \fB\-fira\-verbose=\fR\fIn\fR 4
  .IX Item "-fira-verbose=n"
  Control the verbosity of the dump file for the integrated register allocator.
  The default value is 5.  If the value \fIn\fR is greater or equal to 10,
  the dump output is sent to stderr using the same format as \fIn\fR minus 10.
! .IP \fB\-flto\-report\fR 4
  .IX Item "-flto-report"
! Prints a report with internal details on the workings of the link\-time
  optimizer.  The contents of this report vary from version to version.
! It is meant to be useful to GCC developers when processing object
! files in LTO mode (via \fB\-flto\fR).
  .Sp
  Disabled by default.
! .IP \fB\-flto\-report\-wpa\fR 4
  .IX Item "-flto-report-wpa"
! Like \fB\-flto\-report\fR, but only print for the WPA phase of link\-time
  optimization.
! .IP \fB\-fmem\-report\fR 4
  .IX Item "-fmem-report"
  Makes the compiler print some statistics about permanent memory
  allocation when it finishes.
! .IP \fB\-fmem\-report\-wpa\fR 4
  .IX Item "-fmem-report-wpa"
  Makes the compiler print some statistics about permanent memory
! allocation for the WPA phase only.
! .IP \fB\-fpre\-ipa\-mem\-report\fR 4
  .IX Item "-fpre-ipa-mem-report"
  .PD 0
! .IP \fB\-fpost\-ipa\-mem\-report\fR 4
  .IX Item "-fpost-ipa-mem-report"
  .PD
  Makes the compiler print some statistics about permanent memory
  allocation before or after interprocedural optimization.
! .IP \fB\-fmultiflags\fR 4
  .IX Item "-fmultiflags"
! This option enables multilib\-aware \f(CW\*(C`TFLAGS\*(C'\fR to be used to build
  target libraries with options different from those the compiler is
  configured to use by default, through the use of specs set up by compiler internals, by the target, or by builders at
  configure time.
  .Sp
  Like \f(CW\*(C`TFLAGS\*(C'\fR, this allows the target libraries to be built for
  portable baseline environments, while the compiler defaults to more
! demanding ones.  That\*(Aqs useful because users can easily override the
  defaults the compiler is configured to use to build their own programs,
  if the defaults are not ideal for their target environment, whereas
  rebuilding the runtime libraries is usually not as easy or desirable.
*************** selected for different multilibs.  The w
*** 20243,20273 ****
  build with \fBmake TFLAGS=\-fmultiflags\fR, after configuring
  \&\fB\-\-with\-specs=%{fmultiflags:...}\fR.
  .Sp
! This option is discarded by the driver once it's done processing driver
  self spec.
  .Sp
  It is also useful to check that \f(CW\*(C`TFLAGS\*(C'\fR are being used to build
! all target libraries, by configuring a non-bootstrap compiler
! \&\fB\-\-with\-specs='%{!fmultiflags:%emissing \s-1TFLAGS\s0}'\fR and building
  the compiler and target libraries.
! .IP "\fB\-fprofile\-report\fR" 4
  .IX Item "-fprofile-report"
  Makes the compiler print some statistics about consistency of the
  (estimated) profile and effect of individual passes.
! .IP "\fB\-fstack\-usage\fR" 4
  .IX Item "-fstack-usage"
  Makes the compiler output stack usage information for the program, on a
! per-function basis.  The filename for the dump is made by appending
  \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
  the output file, if explicitly specified and it is not an executable,
  otherwise it is the basename of the source file.  An entry is made up
  of three fields:
  .RS 4
! .IP "*" 4
  The name of the function.
! .IP "*" 4
  A number of bytes.
! .IP "*" 4
  One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
  .RE
  .RS 4
--- 20178,20208 ----
  build with \fBmake TFLAGS=\-fmultiflags\fR, after configuring
  \&\fB\-\-with\-specs=%{fmultiflags:...}\fR.
  .Sp
! This option is discarded by the driver once it\*(Aqs done processing driver
  self spec.
  .Sp
  It is also useful to check that \f(CW\*(C`TFLAGS\*(C'\fR are being used to build
! all target libraries, by configuring a non\-bootstrap compiler
! \&\fB\-\-with\-specs=\*(Aq%{!fmultiflags:%emissing TFLAGS}\*(Aq\fR and building
  the compiler and target libraries.
! .IP \fB\-fprofile\-report\fR 4
  .IX Item "-fprofile-report"
  Makes the compiler print some statistics about consistency of the
  (estimated) profile and effect of individual passes.
! .IP \fB\-fstack\-usage\fR 4
  .IX Item "-fstack-usage"
  Makes the compiler output stack usage information for the program, on a
! per\-function basis.  The filename for the dump is made by appending
  \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
  the output file, if explicitly specified and it is not an executable,
  otherwise it is the basename of the source file.  An entry is made up
  of three fields:
  .RS 4
! .IP * 4
  The name of the function.
! .IP * 4
  A number of bytes.
! .IP * 4
  One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
  .RE
  .RS 4
*************** the function.  If it is not present, the
*** 20287,20347 ****
  not bounded at compile time and the second field only represents the
  bounded part.
  .RE
! .IP "\fB\-fstats\fR" 4
  .IX Item "-fstats"
! Emit statistics about front-end processing at the end of the compilation.
! This option is supported only by the \*(C+ front end, and
  the information is generally only useful to the G++ development team.
! .IP "\fB\-fdbg\-cnt\-list\fR" 4
  .IX Item "-fdbg-cnt-list"
  Print the name and the counter upper bound for all debug counters.
! .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
  .IX Item "-fdbg-cnt=counter-value-list"
! Set the internal debug counter lower and upper bound.  \fIcounter-value-list\fR
! is a comma-separated list of \fIname\fR:\fIlower_bound1\fR\-\fIupper_bound1\fR
  [:\fIlower_bound2\fR\-\fIupper_bound2\fR...] tuples which sets
  the name of the counter and list of closed intervals.
  The \fIlower_bound\fR is optional and is zero
  initialized if not set.
  For example, with \fB\-fdbg\-cnt=dce:2\-4:10\-11,tail_call:10\fR,
! \&\f(CW\*(C`dbg_cnt(dce)\*(C'\fR returns true only for second, third, fourth, tenth and
  eleventh invocation.
! For \f(CW\*(C`dbg_cnt(tail_call)\*(C'\fR true is returned for first 10 invocations.
! .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
  .IX Item "-print-file-name=library"
  Print the full absolute name of the library file \fIlibrary\fR that
! would be used when linking\-\-\-and don't do anything else.  With this
! option, \s-1GCC\s0 does not compile or link anything; it just prints the
  file name.
! .IP "\fB\-print\-multi\-directory\fR" 4
  .IX Item "-print-multi-directory"
  Print the directory name corresponding to the multilib selected by any
  other switches present in the command line.  This directory is supposed
! to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
! .IP "\fB\-print\-multi\-lib\fR" 4
  .IX Item "-print-multi-lib"
  Print the mapping from multilib directory names to compiler switches
  that enable them.  The directory name is separated from the switches by
  \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
  \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
  ease shell processing.
! .IP "\fB\-print\-multi\-os\-directory\fR" 4
  .IX Item "-print-multi-os-directory"
! Print the path to \s-1OS\s0 libraries for the selected
! multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
  present in the \fIlib\fR subdirectory and no multilibs are used, this is
! usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
  sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
! \&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
  subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
! .IP "\fB\-print\-multiarch\fR" 4
  .IX Item "-print-multiarch"
! Print the path to \s-1OS\s0 libraries for the selected multiarch,
  relative to some \fIlib\fR subdirectory.
! .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
  .IX Item "-print-prog-name=program"
  Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
! .IP "\fB\-print\-libgcc\-file\-name\fR" 4
  .IX Item "-print-libgcc-file-name"
  Same as \fB\-print\-file\-name=libgcc.a\fR.
  .Sp
--- 20222,20282 ----
  not bounded at compile time and the second field only represents the
  bounded part.
  .RE
! .IP \fB\-fstats\fR 4
  .IX Item "-fstats"
! Emit statistics about front\-end processing at the end of the compilation.
! This option is supported only by the C++ front end, and
  the information is generally only useful to the G++ development team.
! .IP \fB\-fdbg\-cnt\-list\fR 4
  .IX Item "-fdbg-cnt-list"
  Print the name and the counter upper bound for all debug counters.
! .IP \fB\-fdbg\-cnt=\fR\fIcounter\-value\-list\fR 4
  .IX Item "-fdbg-cnt=counter-value-list"
! Set the internal debug counter lower and upper bound.  \fIcounter\-value\-list\fR
! is a comma\-separated list of \fIname\fR:\fIlower_bound1\fR\-\fIupper_bound1\fR
  [:\fIlower_bound2\fR\-\fIupper_bound2\fR...] tuples which sets
  the name of the counter and list of closed intervals.
  The \fIlower_bound\fR is optional and is zero
  initialized if not set.
  For example, with \fB\-fdbg\-cnt=dce:2\-4:10\-11,tail_call:10\fR,
! \&\f(CWdbg_cnt(dce)\fR returns true only for second, third, fourth, tenth and
  eleventh invocation.
! For \f(CWdbg_cnt(tail_call)\fR true is returned for first 10 invocations.
! .IP \fB\-print\-file\-name=\fR\fIlibrary\fR 4
  .IX Item "-print-file-name=library"
  Print the full absolute name of the library file \fIlibrary\fR that
! would be used when linking\-\-\-and don\*(Aqt do anything else.  With this
! option, GCC does not compile or link anything; it just prints the
  file name.
! .IP \fB\-print\-multi\-directory\fR 4
  .IX Item "-print-multi-directory"
  Print the directory name corresponding to the multilib selected by any
  other switches present in the command line.  This directory is supposed
! to exist in \fBGCC_EXEC_PREFIX\fR.
! .IP \fB\-print\-multi\-lib\fR 4
  .IX Item "-print-multi-lib"
  Print the mapping from multilib directory names to compiler switches
  that enable them.  The directory name is separated from the switches by
  \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
  \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
  ease shell processing.
! .IP \fB\-print\-multi\-os\-directory\fR 4
  .IX Item "-print-multi-os-directory"
! Print the path to OS libraries for the selected
! multilib, relative to some \fIlib\fR subdirectory.  If OS libraries are
  present in the \fIlib\fR subdirectory and no multilibs are used, this is
! usually just \fI.\fR, if OS libraries are present in \fIlibsuffix\fR
  sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
! \&\fI../lib32\fR, or if OS libraries are present in \fIlib/subdir\fR
  subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
! .IP \fB\-print\-multiarch\fR 4
  .IX Item "-print-multiarch"
! Print the path to OS libraries for the selected multiarch,
  relative to some \fIlib\fR subdirectory.
! .IP \fB\-print\-prog\-name=\fR\fIprogram\fR 4
  .IX Item "-print-prog-name=program"
  Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
! .IP \fB\-print\-libgcc\-file\-name\fR 4
  .IX Item "-print-libgcc-file-name"
  Same as \fB\-print\-file\-name=libgcc.a\fR.
  .Sp
*************** but you do want to link with \fIlibgcc.a
*** 20351,20408 ****
  .Vb 1
  \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
  .Ve
! .IP "\fB\-print\-search\-dirs\fR" 4
  .IX Item "-print-search-dirs"
  Print the name of the configured installation directory and a list of
! program and library directories \fBgcc\fR searches\-\-\-and don't do anything else.
  .Sp
  This is useful when \fBgcc\fR prints the error message
  \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
  To resolve this you either need to put \fIcpp0\fR and the other compiler
  components where \fBgcc\fR expects to find them, or you can set the environment
! variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
! Don't forget the trailing \fB/\fR.
! .IP "\fB\-print\-sysroot\fR" 4
  .IX Item "-print-sysroot"
  Print the target sysroot directory that is used during
  compilation.  This is the target sysroot specified either at configure
  time or using the \fB\-\-sysroot\fR option, possibly with an extra
  suffix that depends on compilation options.  If no target sysroot is
  specified, the option prints nothing.
! .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
  .IX Item "-print-sysroot-headers-suffix"
  Print the suffix added to the target sysroot when searching for
  headers, or give an error if the compiler is not configured with such
! a suffix\-\-\-and don't do anything else.
! .IP "\fB\-dumpmachine\fR" 4
  .IX Item "-dumpmachine"
! Print the compiler's target machine (for example,
! \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
! .IP "\fB\-dumpversion\fR" 4
  .IX Item "-dumpversion"
! Print the compiler version (for example, \f(CW3.0\fR, \f(CW6.3.0\fR or \f(CW7\fR)\-\-\-and don't do
  anything else.  This is the compiler version used in filesystem paths and
  specs. Depending on how the compiler has been configured it can be just
  a single number (major version), two numbers separated by a dot (major and
  minor version) or three numbers separated by dots (major, minor and patchlevel
  version).
! .IP "\fB\-dumpfullversion\fR" 4
  .IX Item "-dumpfullversion"
! Print the full compiler version\-\-\-and don't do anything else. The output is
  always three numbers separated by dots, major, minor and patchlevel version.
! .IP "\fB\-dumpspecs\fR" 4
  .IX Item "-dumpspecs"
! Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
! is used when \s-1GCC\s0 itself is being built.)
! .SS "Machine-Dependent Options"
  .IX Subsection "Machine-Dependent Options"
! Each target machine supported by \s-1GCC\s0 can have its own options\-\-\-for
  example, to allow you to compile for a particular processor variant or
! \&\s-1ABI,\s0 or to control optimizations specific to that machine.  By
! convention, the names of machine-specific options start with
  \&\fB\-m\fR.
  .PP
! Some configurations of the compiler also support additional target-specific
  options, usually for compatibility with other compilers on the same
  platform.
  .PP
--- 20286,20343 ----
  .Vb 1
  \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
  .Ve
! .IP \fB\-print\-search\-dirs\fR 4
  .IX Item "-print-search-dirs"
  Print the name of the configured installation directory and a list of
! program and library directories \fBgcc\fR searches\-\-\-and don\*(Aqt do anything else.
  .Sp
  This is useful when \fBgcc\fR prints the error message
  \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
  To resolve this you either need to put \fIcpp0\fR and the other compiler
  components where \fBgcc\fR expects to find them, or you can set the environment
! variable \fBGCC_EXEC_PREFIX\fR to the directory where you installed them.
! Don\*(Aqt forget the trailing \fB/\fR.
! .IP \fB\-print\-sysroot\fR 4
  .IX Item "-print-sysroot"
  Print the target sysroot directory that is used during
  compilation.  This is the target sysroot specified either at configure
  time or using the \fB\-\-sysroot\fR option, possibly with an extra
  suffix that depends on compilation options.  If no target sysroot is
  specified, the option prints nothing.
! .IP \fB\-print\-sysroot\-headers\-suffix\fR 4
  .IX Item "-print-sysroot-headers-suffix"
  Print the suffix added to the target sysroot when searching for
  headers, or give an error if the compiler is not configured with such
! a suffix\-\-\-and don\*(Aqt do anything else.
! .IP \fB\-dumpmachine\fR 4
  .IX Item "-dumpmachine"
! Print the compiler\*(Aqs target machine (for example,
! \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don\*(Aqt do anything else.
! .IP \fB\-dumpversion\fR 4
  .IX Item "-dumpversion"
! Print the compiler version (for example, \f(CW3.0\fR, \f(CW6.3.0\fR or \f(CW7\fR)\-\-\-and don\*(Aqt do
  anything else.  This is the compiler version used in filesystem paths and
  specs. Depending on how the compiler has been configured it can be just
  a single number (major version), two numbers separated by a dot (major and
  minor version) or three numbers separated by dots (major, minor and patchlevel
  version).
! .IP \fB\-dumpfullversion\fR 4
  .IX Item "-dumpfullversion"
! Print the full compiler version\-\-\-and don\*(Aqt do anything else. The output is
  always three numbers separated by dots, major, minor and patchlevel version.
! .IP \fB\-dumpspecs\fR 4
  .IX Item "-dumpspecs"
! Print the compiler\*(Aqs built\-in specs\-\-\-and don\*(Aqt do anything else.  (This
! is used when GCC itself is being built.)
! .SS "Machine\-Dependent Options"
  .IX Subsection "Machine-Dependent Options"
! Each target machine supported by GCC can have its own options\-\-\-for
  example, to allow you to compile for a particular processor variant or
! ABI, or to control optimizations specific to that machine.  By
! convention, the names of machine\-specific options start with
  \&\fB\-m\fR.
  .PP
! Some configurations of the compiler also support additional target\-specific
  options, usually for compatibility with other compilers on the same
  platform.
  .PP
*************** platform.
*** 20410,20455 ****
  .IX Subsection "AArch64 Options"
  .PP
  These options are defined for AArch64 implementations:
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
  Generate code for the specified data model.  Permissible values
! are \fBilp32\fR for SysV-like data model where int, long int and pointers
! are 32 bits, and \fBlp64\fR for SysV-like data model where int is 32 bits,
  but long int and pointers are 64 bits.
  .Sp
  The default depends on the specific target configuration.  Note that
! the \s-1LP64\s0 and \s-1ILP32\s0 ABIs are not link-compatible; you must compile your
! entire program with the same \s-1ABI,\s0 and link with a compatible set of libraries.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for an
  \&\fBaarch64_be\-*\-*\fR target.
! .IP "\fB\-mgeneral\-regs\-only\fR" 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general-purpose registers.  This will prevent
! the compiler from using floating-point and Advanced \s-1SIMD\s0 registers but will not
  impose any restrictions on the assembler.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for an
  \&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
! .IP "\fB\-mcmodel=tiny\fR" 4
  .IX Item "-mcmodel=tiny"
  Generate code for the tiny code model.  The program and its statically defined
  symbols must be within 1MB of each other.  Programs can be statically or
  dynamically linked.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model.  The program and its statically defined
  symbols must be within 4GB of each other.  Programs can be statically or
  dynamically linked.  This is the default code model.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
  Generate code for the large code model.  This makes no assumptions about
  addresses and sizes of sections.  Programs can be statically linked only.  The
  \&\fB\-mcmodel=large\fR option is incompatible with \fB\-mabi=ilp32\fR,
  \&\fB\-fpic\fR and \fB\-fPIC\fR.
! .IP "\fB\-mtp=\fR\fIname\fR" 4
  .IX Item "-mtp=name"
  Specify the system register to use as a thread pointer.  The valid values
  are \fBtpidr_el0\fR, \fBtpidrro_el0\fR, \fBtpidr_el1\fR, \fBtpidr_el2\fR,
--- 20345,20390 ----
  .IX Subsection "AArch64 Options"
  .PP
  These options are defined for AArch64 implementations:
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
  Generate code for the specified data model.  Permissible values
! are \fBilp32\fR for SysV\-like data model where int, long int and pointers
! are 32 bits, and \fBlp64\fR for SysV\-like data model where int is 32 bits,
  but long int and pointers are 64 bits.
  .Sp
  The default depends on the specific target configuration.  Note that
! the LP64 and ILP32 ABIs are not link\-compatible; you must compile your
! entire program with the same ABI, and link with a compatible set of libraries.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate big\-endian code.  This is the default when GCC is configured for an
  \&\fBaarch64_be\-*\-*\fR target.
! .IP \fB\-mgeneral\-regs\-only\fR 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general\-purpose registers.  This will prevent
! the compiler from using floating\-point and Advanced SIMD registers but will not
  impose any restrictions on the assembler.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate little\-endian code.  This is the default when GCC is configured for an
  \&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
! .IP \fB\-mcmodel=tiny\fR 4
  .IX Item "-mcmodel=tiny"
  Generate code for the tiny code model.  The program and its statically defined
  symbols must be within 1MB of each other.  Programs can be statically or
  dynamically linked.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model.  The program and its statically defined
  symbols must be within 4GB of each other.  Programs can be statically or
  dynamically linked.  This is the default code model.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
  Generate code for the large code model.  This makes no assumptions about
  addresses and sizes of sections.  Programs can be statically linked only.  The
  \&\fB\-mcmodel=large\fR option is incompatible with \fB\-mabi=ilp32\fR,
  \&\fB\-fpic\fR and \fB\-fPIC\fR.
! .IP \fB\-mtp=\fR\fIname\fR 4
  .IX Item "-mtp=name"
  Specify the system register to use as a thread pointer.  The valid values
  are \fBtpidr_el0\fR, \fBtpidrro_el0\fR, \fBtpidr_el1\fR, \fBtpidr_el2\fR,
*************** are \fBtpidr_el0\fR, \fBtpidrro_el0\fR,
*** 20458,20485 ****
  The default setting is \fBtpidr_el0\fR.  It is recommended to compile all
  code intended to interoperate with the same value of this option to avoid
  accessing a different thread pointer from the wrong exception level.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification.
! .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-momit-leaf-frame-pointer"
  .PD 0
! .IP "\fB\-mno\-omit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-mno-omit-leaf-frame-pointer"
  .PD
  Omit or keep the frame pointer in leaf functions.  The former behavior is the
  default.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
--- 20393,20420 ----
  The default setting is \fBtpidr_el0\fR.  It is recommended to compile all
  code intended to interoperate with the same value of this option to avoid
  accessing a different thread pointer from the wrong exception level.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification.
! .IP \fB\-momit\-leaf\-frame\-pointer\fR 4
  .IX Item "-momit-leaf-frame-pointer"
  .PD 0
! .IP \fB\-mno\-omit\-leaf\-frame\-pointer\fR 4
  .IX Item "-mno-omit-leaf-frame-pointer"
  .PD
  Omit or keep the frame pointer in leaf functions.  The former behavior is the
  default.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
*************** which system register to use as base reg
*** 20493,20532 ****
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP "\fB\-mtls\-dialect=desc\fR" 4
  .IX Item "-mtls-dialect=desc"
! Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.  This is the default.
! .IP "\fB\-mtls\-dialect=traditional\fR" 4
  .IX Item "-mtls-dialect=traditional"
! Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.
! .IP "\fB\-mtls\-size=\fR\fIsize\fR" 4
  .IX Item "-mtls-size=size"
! Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 12, 24, 32, 48.
  This option requires binutils 2.26 or newer.
! .IP "\fB\-mfix\-cortex\-a53\-835769\fR" 4
  .IX Item "-mfix-cortex-a53-835769"
  .PD 0
! .IP "\fB\-mno\-fix\-cortex\-a53\-835769\fR" 4
  .IX Item "-mno-fix-cortex-a53-835769"
  .PD
! Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
! This involves inserting a \s-1NOP\s0 instruction between memory instructions and
! 64\-bit integer multiply-accumulate instructions.
! .IP "\fB\-mfix\-cortex\-a53\-843419\fR" 4
  .IX Item "-mfix-cortex-a53-843419"
  .PD 0
! .IP "\fB\-mno\-fix\-cortex\-a53\-843419\fR" 4
  .IX Item "-mno-fix-cortex-a53-843419"
  .PD
! Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 843419.
  This erratum workaround is made at link time and this will only pass the
  corresponding flag to the linker.
! .IP "\fB\-mlow\-precision\-recip\-sqrt\fR" 4
  .IX Item "-mlow-precision-recip-sqrt"
  .PD 0
! .IP "\fB\-mno\-low\-precision\-recip\-sqrt\fR" 4
  .IX Item "-mno-low-precision-recip-sqrt"
  .PD
  Enable or disable the reciprocal square root approximation.
--- 20428,20467 ----
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP \fB\-mtls\-dialect=desc\fR 4
  .IX Item "-mtls-dialect=desc"
! Use TLS descriptors as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.  This is the default.
! .IP \fB\-mtls\-dialect=traditional\fR 4
  .IX Item "-mtls-dialect=traditional"
! Use traditional TLS as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.
! .IP \fB\-mtls\-size=\fR\fIsize\fR 4
  .IX Item "-mtls-size=size"
! Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
  This option requires binutils 2.26 or newer.
! .IP \fB\-mfix\-cortex\-a53\-835769\fR 4
  .IX Item "-mfix-cortex-a53-835769"
  .PD 0
! .IP \fB\-mno\-fix\-cortex\-a53\-835769\fR 4
  .IX Item "-mno-fix-cortex-a53-835769"
  .PD
! Enable or disable the workaround for the ARM Cortex\-A53 erratum number 835769.
! This involves inserting a NOP instruction between memory instructions and
! 64\-bit integer multiply\-accumulate instructions.
! .IP \fB\-mfix\-cortex\-a53\-843419\fR 4
  .IX Item "-mfix-cortex-a53-843419"
  .PD 0
! .IP \fB\-mno\-fix\-cortex\-a53\-843419\fR 4
  .IX Item "-mno-fix-cortex-a53-843419"
  .PD
! Enable or disable the workaround for the ARM Cortex\-A53 erratum number 843419.
  This erratum workaround is made at link time and this will only pass the
  corresponding flag to the linker.
! .IP \fB\-mlow\-precision\-recip\-sqrt\fR 4
  .IX Item "-mlow-precision-recip-sqrt"
  .PD 0
! .IP \fB\-mno\-low\-precision\-recip\-sqrt\fR 4
  .IX Item "-mno-low-precision-recip-sqrt"
  .PD
  Enable or disable the reciprocal square root approximation.
*************** This option only has an effect if \fB\-f
*** 20534,20543 ****
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of reciprocal square root results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP "\fB\-mlow\-precision\-sqrt\fR" 4
  .IX Item "-mlow-precision-sqrt"
  .PD 0
! .IP "\fB\-mno\-low\-precision\-sqrt\fR" 4
  .IX Item "-mno-low-precision-sqrt"
  .PD
  Enable or disable the square root approximation.
--- 20469,20478 ----
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of reciprocal square root results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP \fB\-mlow\-precision\-sqrt\fR 4
  .IX Item "-mlow-precision-sqrt"
  .PD 0
! .IP \fB\-mno\-low\-precision\-sqrt\fR 4
  .IX Item "-mno-low-precision-sqrt"
  .PD
  Enable or disable the square root approximation.
*************** This option only has an effect if \fB\-f
*** 20546,20555 ****
  precision of square root results to about 16 bits for
  single precision and to 32 bits for double precision.
  If enabled, it implies \fB\-mlow\-precision\-recip\-sqrt\fR.
! .IP "\fB\-mlow\-precision\-div\fR" 4
  .IX Item "-mlow-precision-div"
  .PD 0
! .IP "\fB\-mno\-low\-precision\-div\fR" 4
  .IX Item "-mno-low-precision-div"
  .PD
  Enable or disable the division approximation.
--- 20481,20490 ----
  precision of square root results to about 16 bits for
  single precision and to 32 bits for double precision.
  If enabled, it implies \fB\-mlow\-precision\-recip\-sqrt\fR.
! .IP \fB\-mlow\-precision\-div\fR 4
  .IX Item "-mlow-precision-div"
  .PD 0
! .IP \fB\-mno\-low\-precision\-div\fR 4
  .IX Item "-mno-low-precision-div"
  .PD
  Enable or disable the division approximation.
*************** This option only has an effect if \fB\-f
*** 20557,20566 ****
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of division results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP "\fB\-mtrack\-speculation\fR" 4
  .IX Item "-mtrack-speculation"
  .PD 0
! .IP "\fB\-mno\-track\-speculation\fR" 4
  .IX Item "-mno-track-speculation"
  .PD
  Enable or disable generation of additional code to track speculative
--- 20492,20501 ----
  \&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
  precision of division results to about 16 bits for
  single precision and to 32 bits for double precision.
! .IP \fB\-mtrack\-speculation\fR 4
  .IX Item "-mtrack-speculation"
  .PD 0
! .IP \fB\-mno\-track\-speculation\fR 4
  .IX Item "-mno-track-speculation"
  .PD
  Enable or disable generation of additional code to track speculative
*************** execution through conditional branches.
*** 20568,20583 ****
  be used by the compiler when expanding calls to
  \&\f(CW\*(C`_\|_builtin_speculation_safe_copy\*(C'\fR to permit a more efficient code
  sequence to be generated.
! .IP "\fB\-moutline\-atomics\fR" 4
  .IX Item "-moutline-atomics"
  .PD 0
! .IP "\fB\-mno\-outline\-atomics\fR" 4
  .IX Item "-mno-outline-atomics"
  .PD
! Enable or disable calls to out-of-line helpers to implement atomic operations.
! These helpers will, at runtime, determine if the \s-1LSE\s0 instructions from
  ARMv8.1\-A can be used; if not, they will use the load/store\-exclusive
! instructions that are present in the base ARMv8.0 \s-1ISA.\s0
  .Sp
  This option is only applicable when compiling for the base ARMv8.0
  instruction set.  If using a later revision, e.g. \fB\-march=armv8.1\-a\fR
--- 20503,20518 ----
  be used by the compiler when expanding calls to
  \&\f(CW\*(C`_\|_builtin_speculation_safe_copy\*(C'\fR to permit a more efficient code
  sequence to be generated.
! .IP \fB\-moutline\-atomics\fR 4
  .IX Item "-moutline-atomics"
  .PD 0
! .IP \fB\-mno\-outline\-atomics\fR 4
  .IX Item "-mno-outline-atomics"
  .PD
! Enable or disable calls to out\-of\-line helpers to implement atomic operations.
! These helpers will, at runtime, determine if the LSE instructions from
  ARMv8.1\-A can be used; if not, they will use the load/store\-exclusive
! instructions that are present in the base ARMv8.0 ISA.
  .Sp
  This option is only applicable when compiling for the base ARMv8.0
  instruction set.  If using a later revision, e.g. \fB\-march=armv8.1\-a\fR
*************** or \fB\-march=armv8\-a+lse\fR, the ARMv8
*** 20585,20591 ****
  used directly.  The same applies when using \fB\-mcpu=\fR when the
  selected cpu supports the \fBlse\fR feature.
  This option is on by default.
! .IP "\fB\-march=\fR\fIname\fR" 4
  .IX Item "-march=name"
  Specify the name of the target architecture and, optionally, one or
  more feature modifiers.  This option has the form
--- 20520,20526 ----
  used directly.  The same applies when using \fB\-mcpu=\fR when the
  selected cpu supports the \fBlse\fR feature.
  This option is on by default.
! .IP \fB\-march=\fR\fIname\fR 4
  .IX Item "-march=name"
  Specify the name of the target architecture and, optionally, one or
  more feature modifiers.  This option has the form
*************** and the features that they enable by def
*** 20629,20657 ****
  .IX Item "armv9.4-a : Armv9.4-A : armv9.3-a"
  .IP "\fBarmv8\-r\fR : Armv8\-R : \fBarmv8\-r\fR" 4
  .IX Item "armv8-r : Armv8-R : armv8-r"
  .RE
  .RS 4
- .PD
  .Sp
  The value \fBnative\fR is available on native AArch64 GNU/Linux and
  causes the compiler to pick the architecture of the host system.  This
  option has no effect if the compiler is unable to recognize the
  architecture of the host system,
  .Sp
! The permissible values for \fIfeature\fR are listed in the sub-section
  on \fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right-most feature is used.
  .Sp
! \&\s-1GCC\s0 uses \fIname\fR to determine what kind of instructions it can emit
  when generating assembly code.  If \fB\-march\fR is specified
  without either of \fB\-mtune\fR or \fB\-mcpu\fR also being
  specified, the code is tuned to perform well across a range of target
  processors implementing the target architecture.
  .RE
! .IP "\fB\-mtune=\fR\fIname\fR" 4
  .IX Item "-mtune=name"
! Specify the name of the target processor for which \s-1GCC\s0 should tune the
  performance of the code.  Permissible values for this option are:
  \&\fBgeneric\fR, \fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR,
  \&\fBcortex\-a57\fR, \fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR,
--- 20564,20592 ----
  .IX Item "armv9.4-a : Armv9.4-A : armv9.3-a"
  .IP "\fBarmv8\-r\fR : Armv8\-R : \fBarmv8\-r\fR" 4
  .IX Item "armv8-r : Armv8-R : armv8-r"
+ .PD
  .RE
  .RS 4
  .Sp
  The value \fBnative\fR is available on native AArch64 GNU/Linux and
  causes the compiler to pick the architecture of the host system.  This
  option has no effect if the compiler is unable to recognize the
  architecture of the host system,
  .Sp
! The permissible values for \fIfeature\fR are listed in the sub\-section
  on \fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right\-most feature is used.
  .Sp
! GCC uses \fIname\fR to determine what kind of instructions it can emit
  when generating assembly code.  If \fB\-march\fR is specified
  without either of \fB\-mtune\fR or \fB\-mcpu\fR also being
  specified, the code is tuned to perform well across a range of target
  processors implementing the target architecture.
  .RE
! .IP \fB\-mtune=\fR\fIname\fR 4
  .IX Item "-mtune=name"
! Specify the name of the target processor for which GCC should tune the
  performance of the code.  Permissible values for this option are:
  \&\fBgeneric\fR, \fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR,
  \&\fBcortex\-a57\fR, \fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR,
*************** performance of the code.  Permissible va
*** 20667,20675 ****
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
  \&\fBocteontx2f95mm\fR,
! \&\fBa64fx\fR, \fBfujitsu-monaka\fR,
  \&\fBthunderx\fR, \fBthunderxt88\fR,
! \&\fBthunderxt88p1\fR, \fBthunderxt81\fR, \fBtsv110\fR,
  \&\fBthunderxt83\fR, \fBthunderx2t99\fR, \fBthunderx3t110\fR, \fBzeus\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
--- 20602,20610 ----
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
  \&\fBocteontx2f95mm\fR,
! \&\fBa64fx\fR, \fBfujitsu\-monaka\fR,
  \&\fBthunderx\fR, \fBthunderxt88\fR,
! \&\fBthunderxt88p1\fR, \fBthunderxt81\fR, \fBtsv110\fR, \fBhip12\fR,
  \&\fBthunderxt83\fR, \fBthunderx2t99\fR, \fBthunderx3t110\fR, \fBzeus\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
*************** performance of the code.  Permissible va
*** 20682,20696 ****
  .Sp
  The values \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
! \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR specify that \s-1GCC\s0
  should tune for a big.LITTLE system.
  .Sp
! The value \fBneoverse\-512tvb\fR specifies that \s-1GCC\s0 should tune
! for Neoverse cores that (a) implement \s-1SVE\s0 and (b) have a total vector
! bandwidth of 512 bits per cycle.  In other words, the option tells \s-1GCC\s0 to
! tune for Neoverse cores that can execute 4 128\-bit Advanced \s-1SIMD\s0 arithmetic
! instructions a cycle and that can execute an equivalent number of \s-1SVE\s0
! arithmetic instructions per cycle (2 for 256\-bit \s-1SVE, 4\s0 for 128\-bit \s-1SVE\s0).
  This is more general than tuning for a specific core like Neoverse V1
  but is more specific than the default tuning described below.
  .Sp
--- 20617,20631 ----
  .Sp
  The values \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
! \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR specify that GCC
  should tune for a big.LITTLE system.
  .Sp
! The value \fBneoverse\-512tvb\fR specifies that GCC should tune
! for Neoverse cores that (a) implement SVE and (b) have a total vector
! bandwidth of 512 bits per cycle.  In other words, the option tells GCC to
! tune for Neoverse cores that can execute 4 128\-bit Advanced SIMD arithmetic
! instructions a cycle and that can execute an equivalent number of SVE
! arithmetic instructions per cycle (2 for 256\-bit SVE, 4 for 128\-bit SVE).
  This is more general than tuning for a specific core like Neoverse V1
  but is more specific than the default tuning described below.
  .Sp
*************** are specified, the code is tuned to perf
*** 20703,20721 ****
  of target processors.
  .Sp
  This option cannot be suffixed by feature modifiers.
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
  .IX Item "-mcpu=name"
  Specify the name of the target processor, optionally suffixed by one
  or more feature modifiers.  This option has the form
  \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where
  the permissible values for \fIcpu\fR are the same as those available
  for \fB\-mtune\fR.  The permissible values for \fIfeature\fR are
! documented in the sub-section on
  \&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right-most feature is used.
  .Sp
! \&\s-1GCC\s0 uses \fIname\fR to determine what kind of instructions it can emit when
  generating assembly code (as if by \fB\-march\fR) and to determine
  the target processor for which to tune for performance (as if
  by \fB\-mtune\fR).  Where this option is used in conjunction
--- 20638,20656 ----
  of target processors.
  .Sp
  This option cannot be suffixed by feature modifiers.
! .IP \fB\-mcpu=\fR\fIname\fR 4
  .IX Item "-mcpu=name"
  Specify the name of the target processor, optionally suffixed by one
  or more feature modifiers.  This option has the form
  \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where
  the permissible values for \fIcpu\fR are the same as those available
  for \fB\-mtune\fR.  The permissible values for \fIfeature\fR are
! documented in the sub\-section on
  \&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
  \&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
! specified, the right\-most feature is used.
  .Sp
! GCC uses \fIname\fR to determine what kind of instructions it can emit when
  generating assembly code (as if by \fB\-march\fR) and to determine
  the target processor for which to tune for performance (as if
  by \fB\-mtune\fR).  Where this option is used in conjunction
*************** over the appropriate part of this option
*** 20724,20767 ****
  .Sp
  \&\fB\-mcpu=neoverse\-512tvb\fR is special in that it does not refer
  to a specific core, but instead refers to all Neoverse cores that
! (a) implement \s-1SVE\s0 and (b) have a total vector bandwidth of 512 bits
  a cycle.  Unless overridden by \fB\-march\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR generates code that can run on a
  Neoverse V1 core, since Neoverse V1 is the first Neoverse core with
  these properties.  Unless overridden by \fB\-mtune\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR tunes code in the same way as for
  \&\fB\-mtune=neoverse\-512tvb\fR.
! .IP "\fB\-moverride=\fR\fIstring\fR" 4
  .IX Item "-moverride=string"
! Override tuning decisions made by the back-end in response to a
  \&\fB\-mtune=\fR switch.  The syntax, semantics, and accepted values
  for \fIstring\fR in this option are not guaranteed to be consistent
  across releases.
  .Sp
! This option is only intended to be useful when developing \s-1GCC.\s0
! .IP "\fB\-mverbose\-cost\-dump\fR" 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP "\fB\-mpc\-relative\-literal\-loads\fR" 4
  .IX Item "-mpc-relative-literal-loads"
  .PD 0
! .IP "\fB\-mno\-pc\-relative\-literal\-loads\fR" 4
  .IX Item "-mno-pc-relative-literal-loads"
  .PD
! Enable or disable PC-relative literal loads.  With this option literal pools are
  accessed using a single instruction and emitted after each function.  This
  limits the maximum size of functions to 1MB.  This is enabled by default for
  \&\fB\-mcmodel=tiny\fR.
! .IP "\fB\-msign\-return\-address=\fR\fIscope\fR" 4
  .IX Item "-msign-return-address=scope"
  Select the function scope on which return address signing will be applied.
  Permissible values are \fBnone\fR, which disables return address signing,
! \&\fBnon-leaf\fR, which enables pointer signing for functions which are not leaf
  functions, and \fBall\fR, which enables pointer signing for all functions.  The
  default value is \fBnone\fR. This option has been deprecated by
  \&\-mbranch\-protection.
! .IP "\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR" 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti"
  Select the branch protection features to use.
  \&\fBnone\fR is the default and turns off all types of branch protection.
--- 20659,20702 ----
  .Sp
  \&\fB\-mcpu=neoverse\-512tvb\fR is special in that it does not refer
  to a specific core, but instead refers to all Neoverse cores that
! (a) implement SVE and (b) have a total vector bandwidth of 512 bits
  a cycle.  Unless overridden by \fB\-march\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR generates code that can run on a
  Neoverse V1 core, since Neoverse V1 is the first Neoverse core with
  these properties.  Unless overridden by \fB\-mtune\fR,
  \&\fB\-mcpu=neoverse\-512tvb\fR tunes code in the same way as for
  \&\fB\-mtune=neoverse\-512tvb\fR.
! .IP \fB\-moverride=\fR\fIstring\fR 4
  .IX Item "-moverride=string"
! Override tuning decisions made by the back\-end in response to a
  \&\fB\-mtune=\fR switch.  The syntax, semantics, and accepted values
  for \fIstring\fR in this option are not guaranteed to be consistent
  across releases.
  .Sp
! This option is only intended to be useful when developing GCC.
! .IP \fB\-mverbose\-cost\-dump\fR 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP \fB\-mpc\-relative\-literal\-loads\fR 4
  .IX Item "-mpc-relative-literal-loads"
  .PD 0
! .IP \fB\-mno\-pc\-relative\-literal\-loads\fR 4
  .IX Item "-mno-pc-relative-literal-loads"
  .PD
! Enable or disable PC\-relative literal loads.  With this option literal pools are
  accessed using a single instruction and emitted after each function.  This
  limits the maximum size of functions to 1MB.  This is enabled by default for
  \&\fB\-mcmodel=tiny\fR.
! .IP \fB\-msign\-return\-address=\fR\fIscope\fR 4
  .IX Item "-msign-return-address=scope"
  Select the function scope on which return address signing will be applied.
  Permissible values are \fBnone\fR, which disables return address signing,
! \&\fBnon\-leaf\fR, which enables pointer signing for functions which are not leaf
  functions, and \fBall\fR, which enables pointer signing for all functions.  The
  default value is \fBnone\fR. This option has been deprecated by
  \&\-mbranch\-protection.
! .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti"
  Select the branch protection features to use.
  \&\fBnone\fR is the default and turns off all types of branch protection.
*************** Select the branch protection features to
*** 20769,21019 ****
  has additional tuning options, then \fBstandard\fR sets it to its standard
  level.
  \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR turns on return address signing to its standard
! level: signing functions that save the return address to memory (non-leaf
  functions will practically always do this) using the a\-key.  The optional
  argument \fBleaf\fR can be used to extend the signing to include leaf
  functions.  The optional argument \fBb\-key\fR can be used to sign the functions
  with the B\-key instead of the A\-key.
  \&\fBbti\fR turns on branch target identification mechanism.
! .IP "\fB\-mharden\-sls=\fR\fIopts\fR" 4
  .IX Item "-mharden-sls=opts"
! Enable compiler hardening against straight line speculation (\s-1SLS\s0).
! \&\fIopts\fR is a comma-separated list of the following options:
  .RS 4
! .IP "\fBretbr\fR" 4
  .IX Item "retbr"
  .PD 0
! .IP "\fBblr\fR" 4
  .IX Item "blr"
  .RE
  .RS 4
- .PD
  .Sp
! In addition, \fB\-mharden\-sls=all\fR enables all \s-1SLS\s0 hardening while
! \&\fB\-mharden\-sls=none\fR disables all \s-1SLS\s0 hardening.
  .RE
! .IP "\fB\-mearly\-ra=\fR\fIscope\fR" 4
  .IX Item "-mearly-ra=scope"
  Determine when to enable an early register allocation pass.  This pass runs
! before instruction scheduling and tries to find a spill-free allocation of
! floating-point and vector code.  It also tries to make use of strided
! multi-register instructions, such as \s-1SME2\s0's strided \s-1LD1\s0 and \s-1ST1.\s0
  .Sp
  The possible values of \fIscope\fR are: \fIall\fR, which runs the pass on
  all functions; \fIstrided\fR, which runs the pass on functions that have
! access to strided multi-register instructions; and \fInone\fR, which
  disables the pass.
  .Sp
  \&\fB\-mearly\-ra=all\fR is the default for \fB\-O2\fR and above, and for
  \&\fB\-Os\fR.  \fB\-mearly\-ra=none\fR is the default otherwise.
! .IP "\fB\-mearly\-ldp\-fusion\fR" 4
  .IX Item "-mearly-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs before
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP "\fB\-mlate\-ldp\-fusion\fR" 4
  .IX Item "-mlate-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs after
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP "\fB\-msve\-vector\-bits=\fR\fIbits\fR" 4
  .IX Item "-msve-vector-bits=bits"
! Specify the number of bits in an \s-1SVE\s0 vector register.  This option only has
! an effect when \s-1SVE\s0 is enabled.
  .Sp
! \&\s-1GCC\s0 supports two forms of \s-1SVE\s0 code generation: \*(L"vector-length
! agnostic\*(R" output that works with any size of vector register and
! \&\*(L"vector-length specific\*(R" output that allows \s-1GCC\s0 to make assumptions
  about the vector length when it is useful for optimization reasons.
  The possible values of \fBbits\fR are: \fBscalable\fR, \fB128\fR,
  \&\fB256\fR, \fB512\fR, \fB1024\fR and \fB2048\fR.
! Specifying \fBscalable\fR selects vector-length agnostic
! output.  At present \fB\-msve\-vector\-bits=128\fR also generates vector-length
! agnostic output for big-endian targets.  All other values generate
! vector-length specific code.  The behavior of these values may change
  in future releases and no value except \fBscalable\fR should be
  relied on for producing code that is portable across different
! hardware \s-1SVE\s0 vector lengths.
  .Sp
  The default is \fB\-msve\-vector\-bits=scalable\fR, which produces
! vector-length agnostic code.
  .PP
  \fB\-march\fR and \fB\-mcpu\fR Feature Modifiers
  .IX Subsection "-march and -mcpu Feature Modifiers"
  .PP
  Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be any of
  the following and their inverses \fBno\fR\fIfeature\fR:
! .IP "\fBcrc\fR" 4
  .IX Item "crc"
! Enable \s-1CRC\s0 extension.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP "\fBcrypto\fR" 4
  .IX Item "crypto"
! Enable Crypto extension.  This also enables Advanced \s-1SIMD\s0 and floating-point
  instructions.
! .IP "\fBfp\fR" 4
  .IX Item "fp"
! Enable floating-point instructions.  This is on by default for all possible
  values for options \fB\-march\fR and \fB\-mcpu\fR.
! .IP "\fBsimd\fR" 4
  .IX Item "simd"
! Enable Advanced \s-1SIMD\s0 instructions.  This also enables floating-point
  instructions.  This is on by default for all possible values for options
  \&\fB\-march\fR and \fB\-mcpu\fR.
! .IP "\fBsve\fR" 4
  .IX Item "sve"
  Enable Scalable Vector Extension instructions.  This also enables Advanced
! \&\s-1SIMD\s0 and floating-point instructions.
! .IP "\fBlse\fR" 4
  .IX Item "lse"
  Enable Large System Extension instructions.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP "\fBrdma\fR" 4
  .IX Item "rdma"
  Enable Round Double Multiply Accumulate instructions.  This is on by default
  for \fB\-march=armv8.1\-a\fR.
! .IP "\fBfp16\fR" 4
  .IX Item "fp16"
! Enable \s-1FP16\s0 extension.  This also enables floating-point instructions.
! .IP "\fBfp16fml\fR" 4
  .IX Item "fp16fml"
! Enable \s-1FP16\s0 fmla extension.  This also enables \s-1FP16\s0 extensions and
! floating-point instructions. This option is enabled by default for \fB\-march=armv8.4\-a\fR. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP "\fBrcpc\fR" 4
  .IX Item "rcpc"
! Enable the RCpc extension.  This enables the use of the \s-1LDAPR\s0 instructions for
! load-acquire atomic semantics, and passes it on to the assembler, enabling
  inline asm statements to use instructions from the RCpc extension.
! .IP "\fBdotprod\fR" 4
  .IX Item "dotprod"
! Enable the Dot Product extension.  This also enables Advanced \s-1SIMD\s0 instructions.
! .IP "\fBaes\fR" 4
  .IX Item "aes"
  Enable the Armv8\-a aes and pmull crypto extension.  This also enables Advanced
! \&\s-1SIMD\s0 instructions.
! .IP "\fBsha2\fR" 4
  .IX Item "sha2"
! Enable the Armv8\-a sha2 crypto extension.  This also enables Advanced \s-1SIMD\s0 instructions.
! .IP "\fBsha3\fR" 4
  .IX Item "sha3"
! Enable the sha512 and sha3 crypto extension.  This also enables Advanced \s-1SIMD\s0
  instructions. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP "\fBsm4\fR" 4
  .IX Item "sm4"
! Enable the sm3 and sm4 crypto extension.  This also enables Advanced \s-1SIMD\s0 instructions.
  Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP "\fBprofile\fR" 4
  .IX Item "profile"
  Enable the Statistical Profiling extension.  This option is only to enable the
  extension at the assembler level and does not affect code generation.
! .IP "\fBrng\fR" 4
  .IX Item "rng"
  Enable the Armv8.5\-a Random Number instructions.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.
! .IP "\fBmemtag\fR" 4
  .IX Item "memtag"
  Enable the Armv8.5\-a Memory Tagging Extensions.
  Use of this option with architectures prior to Armv8.5\-A is not supported.
! .IP "\fBsb\fR" 4
  .IX Item "sb"
  Enable the Armv8\-a Speculation Barrier instruction.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP "\fBssbs\fR" 4
  .IX Item "ssbs"
  Enable the Armv8\-a Speculative Store Bypass Safe instruction.  This option
  is only to enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP "\fBpredres\fR" 4
  .IX Item "predres"
  Enable the Armv8\-a Execution and Data Prediction Restriction instructions.
  This option is only to enable the extension at the assembler level and does
  not affect code generation.  This option is enabled by default for
  \&\fB\-march=armv8.5\-a\fR.
! .IP "\fBsve2\fR" 4
  .IX Item "sve2"
! Enable the Armv8\-a Scalable Vector Extension 2.  This also enables \s-1SVE\s0
  instructions.
! .IP "\fBsve2\-bitperm\fR" 4
  .IX Item "sve2-bitperm"
! Enable \s-1SVE2\s0 bitperm instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBsve2\-sm4\fR" 4
  .IX Item "sve2-sm4"
! Enable \s-1SVE2\s0 sm4 instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBsve2\-aes\fR" 4
  .IX Item "sve2-aes"
! Enable \s-1SVE2\s0 aes instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBsve2\-sha3\fR" 4
  .IX Item "sve2-sha3"
! Enable \s-1SVE2\s0 sha3 instructions.  This also enables \s-1SVE2\s0 instructions.
! .IP "\fBtme\fR" 4
  .IX Item "tme"
  Enable the Transactional Memory Extension.
! .IP "\fBi8mm\fR" 4
  .IX Item "i8mm"
  Enable 8\-bit Integer Matrix Multiply instructions.  This also enables
! Advanced \s-1SIMD\s0 and floating-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP "\fBf32mm\fR" 4
  .IX Item "f32mm"
  Enable 32\-bit Floating point Matrix Multiply instructions.  This also enables
! \&\s-1SVE\s0 instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP "\fBf64mm\fR" 4
  .IX Item "f64mm"
  Enable 64\-bit Floating point Matrix Multiply instructions.  This also enables
! \&\s-1SVE\s0 instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP "\fBbf16\fR" 4
  .IX Item "bf16"
! Enable brain half-precision floating-point instructions.  This also enables
! Advanced \s-1SIMD\s0 and floating-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP "\fBls64\fR" 4
  .IX Item "ls64"
  Enable the 64\-byte atomic load and store instructions for accelerators.
  This option is enabled by default for \fB\-march=armv8.7\-a\fR.
! .IP "\fBmops\fR" 4
  .IX Item "mops"
  Enable the instructions to accelerate memory operations like \f(CW\*(C`memcpy\*(C'\fR,
  \&\f(CW\*(C`memmove\*(C'\fR, \f(CW\*(C`memset\*(C'\fR.  This option is enabled by default for
  \&\fB\-march=armv8.8\-a\fR
! .IP "\fBflagm\fR" 4
  .IX Item "flagm"
  Enable the Flag Manipulation instructions Extension.
! .IP "\fBpauth\fR" 4
  .IX Item "pauth"
  Enable the Pointer Authentication Extension.
! .IP "\fBcssc\fR" 4
  .IX Item "cssc"
  Enable the Common Short Sequence Compression instructions.
! .IP "\fBsme\fR" 4
  .IX Item "sme"
  Enable the Scalable Matrix Extension.
! .IP "\fBsme\-i16i64\fR" 4
  .IX Item "sme-i16i64"
! Enable the \s-1FEAT_SME_I16I64\s0 extension to \s-1SME.\s0
! .IP "\fBsme\-f64f64\fR" 4
  .IX Item "sme-f64f64"
! Enable the \s-1FEAT_SME_F64F64\s0 extension to \s-1SME.\s0
  +@item sme2
! Enable the Scalable Matrix Extension 2.  This also enables \s-1SME\s0 instructions.
! .IP "\fBlse128\fR" 4
  .IX Item "lse128"
! Enable the \s-1LSE128\s0 128\-bit atomic instructions extension.  This also
! enables \s-1LSE\s0 instructions.
! .IP "\fBd128\fR" 4
  .IX Item "d128"
  Enable support for 128\-bit system register read/write instructions.
! This also enables the \s-1LSE128\s0 extension.
! .IP "\fBgcs\fR" 4
  .IX Item "gcs"
  Enable support for Armv9.4\-a Guarded Control Stack extension.
! .IP "\fBthe\fR" 4
  .IX Item "the"
  Enable support for Armv8.9\-a/9.4\-a translation hardening extension.
! .IP "\fBrcpc3\fR" 4
  .IX Item "rcpc3"
  Enable the RCpc3 (Release Consistency) extension.
  .PP
--- 20704,20954 ----
  has additional tuning options, then \fBstandard\fR sets it to its standard
  level.
  \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR turns on return address signing to its standard
! level: signing functions that save the return address to memory (non\-leaf
  functions will practically always do this) using the a\-key.  The optional
  argument \fBleaf\fR can be used to extend the signing to include leaf
  functions.  The optional argument \fBb\-key\fR can be used to sign the functions
  with the B\-key instead of the A\-key.
  \&\fBbti\fR turns on branch target identification mechanism.
! .IP \fB\-mharden\-sls=\fR\fIopts\fR 4
  .IX Item "-mharden-sls=opts"
! Enable compiler hardening against straight line speculation (SLS).
! \&\fIopts\fR is a comma\-separated list of the following options:
  .RS 4
! .IP \fBretbr\fR 4
  .IX Item "retbr"
  .PD 0
! .IP \fBblr\fR 4
  .IX Item "blr"
+ .PD
  .RE
  .RS 4
  .Sp
! In addition, \fB\-mharden\-sls=all\fR enables all SLS hardening while
! \&\fB\-mharden\-sls=none\fR disables all SLS hardening.
  .RE
! .IP \fB\-mearly\-ra=\fR\fIscope\fR 4
  .IX Item "-mearly-ra=scope"
  Determine when to enable an early register allocation pass.  This pass runs
! before instruction scheduling and tries to find a spill\-free allocation of
! floating\-point and vector code.  It also tries to make use of strided
! multi\-register instructions, such as SME2\*(Aqs strided LD1 and ST1.
  .Sp
  The possible values of \fIscope\fR are: \fIall\fR, which runs the pass on
  all functions; \fIstrided\fR, which runs the pass on functions that have
! access to strided multi\-register instructions; and \fInone\fR, which
  disables the pass.
  .Sp
  \&\fB\-mearly\-ra=all\fR is the default for \fB\-O2\fR and above, and for
  \&\fB\-Os\fR.  \fB\-mearly\-ra=none\fR is the default otherwise.
! .IP \fB\-mearly\-ldp\-fusion\fR 4
  .IX Item "-mearly-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs before
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP \fB\-mlate\-ldp\-fusion\fR 4
  .IX Item "-mlate-ldp-fusion"
  Enable the copy of the AArch64 load/store pair fusion pass that runs after
  register allocation.  Enabled by default at \fB\-O\fR and above.
! .IP \fB\-msve\-vector\-bits=\fR\fIbits\fR 4
  .IX Item "-msve-vector-bits=bits"
! Specify the number of bits in an SVE vector register.  This option only has
! an effect when SVE is enabled.
  .Sp
! GCC supports two forms of SVE code generation: "vector\-length
! agnostic" output that works with any size of vector register and
! "vector\-length specific" output that allows GCC to make assumptions
  about the vector length when it is useful for optimization reasons.
  The possible values of \fBbits\fR are: \fBscalable\fR, \fB128\fR,
  \&\fB256\fR, \fB512\fR, \fB1024\fR and \fB2048\fR.
! Specifying \fBscalable\fR selects vector\-length agnostic
! output.  At present \fB\-msve\-vector\-bits=128\fR also generates vector\-length
! agnostic output for big\-endian targets.  All other values generate
! vector\-length specific code.  The behavior of these values may change
  in future releases and no value except \fBscalable\fR should be
  relied on for producing code that is portable across different
! hardware SVE vector lengths.
  .Sp
  The default is \fB\-msve\-vector\-bits=scalable\fR, which produces
! vector\-length agnostic code.
  .PP
  \fB\-march\fR and \fB\-mcpu\fR Feature Modifiers
  .IX Subsection "-march and -mcpu Feature Modifiers"
  .PP
  Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be any of
  the following and their inverses \fBno\fR\fIfeature\fR:
! .IP \fBcrc\fR 4
  .IX Item "crc"
! Enable CRC extension.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP \fBcrypto\fR 4
  .IX Item "crypto"
! Enable Crypto extension.  This also enables Advanced SIMD and floating\-point
  instructions.
! .IP \fBfp\fR 4
  .IX Item "fp"
! Enable floating\-point instructions.  This is on by default for all possible
  values for options \fB\-march\fR and \fB\-mcpu\fR.
! .IP \fBsimd\fR 4
  .IX Item "simd"
! Enable Advanced SIMD instructions.  This also enables floating\-point
  instructions.  This is on by default for all possible values for options
  \&\fB\-march\fR and \fB\-mcpu\fR.
! .IP \fBsve\fR 4
  .IX Item "sve"
  Enable Scalable Vector Extension instructions.  This also enables Advanced
! SIMD and floating\-point instructions.
! .IP \fBlse\fR 4
  .IX Item "lse"
  Enable Large System Extension instructions.  This is on by default for
  \&\fB\-march=armv8.1\-a\fR.
! .IP \fBrdma\fR 4
  .IX Item "rdma"
  Enable Round Double Multiply Accumulate instructions.  This is on by default
  for \fB\-march=armv8.1\-a\fR.
! .IP \fBfp16\fR 4
  .IX Item "fp16"
! Enable FP16 extension.  This also enables floating\-point instructions.
! .IP \fBfp16fml\fR 4
  .IX Item "fp16fml"
! Enable FP16 fmla extension.  This also enables FP16 extensions and
! floating\-point instructions. This option is enabled by default for \fB\-march=armv8.4\-a\fR. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP \fBrcpc\fR 4
  .IX Item "rcpc"
! Enable the RCpc extension.  This enables the use of the LDAPR instructions for
! load\-acquire atomic semantics, and passes it on to the assembler, enabling
  inline asm statements to use instructions from the RCpc extension.
! .IP \fBdotprod\fR 4
  .IX Item "dotprod"
! Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
! .IP \fBaes\fR 4
  .IX Item "aes"
  Enable the Armv8\-a aes and pmull crypto extension.  This also enables Advanced
! SIMD instructions.
! .IP \fBsha2\fR 4
  .IX Item "sha2"
! Enable the Armv8\-a sha2 crypto extension.  This also enables Advanced SIMD instructions.
! .IP \fBsha3\fR 4
  .IX Item "sha3"
! Enable the sha512 and sha3 crypto extension.  This also enables Advanced SIMD
  instructions. Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP \fBsm4\fR 4
  .IX Item "sm4"
! Enable the sm3 and sm4 crypto extension.  This also enables Advanced SIMD instructions.
  Use of this option with architectures prior to Armv8.2\-A is not supported.
! .IP \fBprofile\fR 4
  .IX Item "profile"
  Enable the Statistical Profiling extension.  This option is only to enable the
  extension at the assembler level and does not affect code generation.
! .IP \fBrng\fR 4
  .IX Item "rng"
  Enable the Armv8.5\-a Random Number instructions.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.
! .IP \fBmemtag\fR 4
  .IX Item "memtag"
  Enable the Armv8.5\-a Memory Tagging Extensions.
  Use of this option with architectures prior to Armv8.5\-A is not supported.
! .IP \fBsb\fR 4
  .IX Item "sb"
  Enable the Armv8\-a Speculation Barrier instruction.  This option is only to
  enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP \fBssbs\fR 4
  .IX Item "ssbs"
  Enable the Armv8\-a Speculative Store Bypass Safe instruction.  This option
  is only to enable the extension at the assembler level and does not affect code
  generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
! .IP \fBpredres\fR 4
  .IX Item "predres"
  Enable the Armv8\-a Execution and Data Prediction Restriction instructions.
  This option is only to enable the extension at the assembler level and does
  not affect code generation.  This option is enabled by default for
  \&\fB\-march=armv8.5\-a\fR.
! .IP \fBsve2\fR 4
  .IX Item "sve2"
! Enable the Armv8\-a Scalable Vector Extension 2.  This also enables SVE
  instructions.
! .IP \fBsve2\-bitperm\fR 4
  .IX Item "sve2-bitperm"
! Enable SVE2 bitperm instructions.  This also enables SVE2 instructions.
! .IP \fBsve2\-sm4\fR 4
  .IX Item "sve2-sm4"
! Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
! .IP \fBsve2\-aes\fR 4
  .IX Item "sve2-aes"
! Enable SVE2 aes instructions.  This also enables SVE2 instructions.
! .IP \fBsve2\-sha3\fR 4
  .IX Item "sve2-sha3"
! Enable SVE2 sha3 instructions.  This also enables SVE2 instructions.
! .IP \fBtme\fR 4
  .IX Item "tme"
  Enable the Transactional Memory Extension.
! .IP \fBi8mm\fR 4
  .IX Item "i8mm"
  Enable 8\-bit Integer Matrix Multiply instructions.  This also enables
! Advanced SIMD and floating\-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP \fBf32mm\fR 4
  .IX Item "f32mm"
  Enable 32\-bit Floating point Matrix Multiply instructions.  This also enables
! SVE instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP \fBf64mm\fR 4
  .IX Item "f64mm"
  Enable 64\-bit Floating point Matrix Multiply instructions.  This also enables
! SVE instructions.  Use of this option with architectures prior to Armv8.2\-A is
  not supported.
! .IP \fBbf16\fR 4
  .IX Item "bf16"
! Enable brain half\-precision floating\-point instructions.  This also enables
! Advanced SIMD and floating\-point instructions.  This option is enabled by
  default for \fB\-march=armv8.6\-a\fR.  Use of this option with architectures
  prior to Armv8.2\-A is not supported.
! .IP \fBls64\fR 4
  .IX Item "ls64"
  Enable the 64\-byte atomic load and store instructions for accelerators.
  This option is enabled by default for \fB\-march=armv8.7\-a\fR.
! .IP \fBmops\fR 4
  .IX Item "mops"
  Enable the instructions to accelerate memory operations like \f(CW\*(C`memcpy\*(C'\fR,
  \&\f(CW\*(C`memmove\*(C'\fR, \f(CW\*(C`memset\*(C'\fR.  This option is enabled by default for
  \&\fB\-march=armv8.8\-a\fR
! .IP \fBflagm\fR 4
  .IX Item "flagm"
  Enable the Flag Manipulation instructions Extension.
! .IP \fBpauth\fR 4
  .IX Item "pauth"
  Enable the Pointer Authentication Extension.
! .IP \fBcssc\fR 4
  .IX Item "cssc"
  Enable the Common Short Sequence Compression instructions.
! .IP \fBsme\fR 4
  .IX Item "sme"
  Enable the Scalable Matrix Extension.
! .IP \fBsme\-i16i64\fR 4
  .IX Item "sme-i16i64"
! Enable the FEAT_SME_I16I64 extension to SME.
! .IP \fBsme\-f64f64\fR 4
  .IX Item "sme-f64f64"
! Enable the FEAT_SME_F64F64 extension to SME.
  +@item sme2
! Enable the Scalable Matrix Extension 2.  This also enables SME instructions.
! .IP \fBlse128\fR 4
  .IX Item "lse128"
! Enable the LSE128 128\-bit atomic instructions extension.  This also
! enables LSE instructions.
! .IP \fBd128\fR 4
  .IX Item "d128"
  Enable support for 128\-bit system register read/write instructions.
! This also enables the LSE128 extension.
! .IP \fBgcs\fR 4
  .IX Item "gcs"
  Enable support for Armv9.4\-a Guarded Control Stack extension.
! .IP \fBthe\fR 4
  .IX Item "the"
  Enable support for Armv8.9\-a/9.4\-a translation hardening extension.
! .IP \fBrcpc3\fR 4
  .IX Item "rcpc3"
  Enable the RCpc3 (Release Consistency) extension.
  .PP
*************** Conversely, \fBnofp\fR implies \fBnosimd
*** 21026,21159 ****
  .IX Subsection "Adapteva Epiphany Options"
  .PP
  These \fB\-m\fR options are defined for Adapteva Epiphany:
! .IP "\fB\-mhalf\-reg\-file\fR" 4
  .IX Item "-mhalf-reg-file"
! Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
  That allows code to run on hardware variants that lack these registers.
! .IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
  .IX Item "-mprefer-short-insn-regs"
  Preferentially allocate registers that allow short instruction generation.
  This can result in increased instruction count, so this may either reduce or
  increase overall code size.
! .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.
! .IP "\fB\-mcmove\fR" 4
  .IX Item "-mcmove"
  Enable the generation of conditional moves.
! .IP "\fB\-mnops=\fR\fInum\fR" 4
  .IX Item "-mnops=num"
  Emit \fInum\fR NOPs before every other generated instruction.
! .IP "\fB\-mno\-soft\-cmpsf\fR" 4
  .IX Item "-mno-soft-cmpsf"
! For single-precision floating-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
  and test the flags.  This is faster than a software comparison, but can
  get incorrect results in the presence of NaNs, or when two different small
  numbers are compared such that their difference is calculated as zero.
! The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
  software comparisons.
! .IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
  .IX Item "-mstack-offset=num"
  Set the offset between the top of the stack and the stack pointer.
  E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
  can be used by leaf functions without stack allocation.
  Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
! Note also that this option changes the \s-1ABI\s0; compiling a program with a
  different stack offset than the libraries have been compiled with
  generally does not work.
  This option can be useful if you want to evaluate if a different stack
  offset would give you better code, but to actually use a different stack
  offset to build working programs, it is recommended to configure the
  toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
! .IP "\fB\-mno\-round\-nearest\fR" 4
  .IX Item "-mno-round-nearest"
  Make the scheduler assume that the rounding mode has been set to
  truncating.  The default is \fB\-mround\-nearest\fR.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  If not otherwise specified by an attribute, assume all calls might be beyond
  the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
  function address into a register before performing a (otherwise direct) call.
  This is the default.
! .IP "\fB\-mshort\-calls\fR" 4
  .IX Item "-mshort-calls"
  If not otherwise specified by an attribute, assume all direct calls are
  in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
  for direct calls.  The default is \fB\-mlong\-calls\fR.
! .IP "\fB\-msmall16\fR" 4
  .IX Item "-msmall16"
  Assume addresses can be loaded as 16\-bit unsigned values.  This does not
  apply to function addresses for which \fB\-mlong\-calls\fR semantics
  are in effect.
! .IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
  .IX Item "-mfp-mode=mode"
! Set the prevailing mode of the floating-point unit.
! This determines the floating-point mode that is provided and expected
  at function call and return time.  Making this mode match the mode you
  predominantly need at function start can make your programs smaller and
  faster by avoiding unnecessary mode switches.
  .Sp
  \&\fImode\fR can be set to one the following values:
  .RS 4
! .IP "\fBcaller\fR" 4
  .IX Item "caller"
  Any mode at function entry is valid, and retained or restored when
  the function returns, and when it calls other functions.
  This mode is useful for compiling libraries or other compilation units
  you might want to incorporate into different programs with different
! prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
  object file outweighs the size and speed overhead for any extra
  mode switching that might be needed, compared with what would be needed
! with a more specific choice of prevailing \s-1FPU\s0 mode.
! .IP "\fBtruncate\fR" 4
  .IX Item "truncate"
! This is the mode used for floating-point calculations with
  truncating (i.e. round towards zero) rounding mode.  That includes
  conversion from floating point to integer.
! .IP "\fBround-nearest\fR" 4
  .IX Item "round-nearest"
! This is the mode used for floating-point calculations with
! round-to-nearest-or-even rounding mode.
! .IP "\fBint\fR" 4
  .IX Item "int"
! This is the mode used to perform integer calculations in the \s-1FPU,\s0 e.g.
! integer multiply, or integer multiply-and-accumulate.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mfp\-mode=caller\fR
  .RE
! .IP "\fB\-mno\-split\-lohi\fR" 4
  .IX Item "-mno-split-lohi"
  .PD 0
! .IP "\fB\-mno\-postinc\fR" 4
  .IX Item "-mno-postinc"
! .IP "\fB\-mno\-postmodify\fR" 4
  .IX Item "-mno-postmodify"
  .PD
  Code generation tweaks that disable, respectively, splitting of 32\-bit
! loads, generation of post-increment addresses, and generation of
! post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
  \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
! .IP "\fB\-mnovect\-double\fR" 4
  .IX Item "-mnovect-double"
! Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
! \&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
! .IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
  .IX Item "-max-vect-align=num"
! The maximum alignment for \s-1SIMD\s0 vector mode types.
  \&\fInum\fR may be 4 or 8.  The default is 8.
! Note that this is an \s-1ABI\s0 change, even though many library function
! interfaces are unaffected if they don't use \s-1SIMD\s0 vector modes
  in places that affect size and/or alignment of relevant types.
! .IP "\fB\-msplit\-vecmove\-early\fR" 4
  .IX Item "-msplit-vecmove-early"
  Split vector moves into single word moves before reload.  In theory this
  can give better register allocation, but so far the reverse seems to be
  generally the case.
! .IP "\fB\-m1reg\-\fR\fIreg\fR" 4
  .IX Item "-m1reg-reg"
  Specify a register to hold the constant \-1, which makes loading small negative
  constants and certain bitmasks faster.
--- 20961,21094 ----
  .IX Subsection "Adapteva Epiphany Options"
  .PP
  These \fB\-m\fR options are defined for Adapteva Epiphany:
! .IP \fB\-mhalf\-reg\-file\fR 4
  .IX Item "-mhalf-reg-file"
! Don\*(Aqt allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
  That allows code to run on hardware variants that lack these registers.
! .IP \fB\-mprefer\-short\-insn\-regs\fR 4
  .IX Item "-mprefer-short-insn-regs"
  Preferentially allocate registers that allow short instruction generation.
  This can result in increased instruction count, so this may either reduce or
  increase overall code size.
! .IP \fB\-mbranch\-cost=\fR\fInum\fR 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR "simple" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.
! .IP \fB\-mcmove\fR 4
  .IX Item "-mcmove"
  Enable the generation of conditional moves.
! .IP \fB\-mnops=\fR\fInum\fR 4
  .IX Item "-mnops=num"
  Emit \fInum\fR NOPs before every other generated instruction.
! .IP \fB\-mno\-soft\-cmpsf\fR 4
  .IX Item "-mno-soft-cmpsf"
! For single\-precision floating\-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
  and test the flags.  This is faster than a software comparison, but can
  get incorrect results in the presence of NaNs, or when two different small
  numbers are compared such that their difference is calculated as zero.
! The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE\-compliant,
  software comparisons.
! .IP \fB\-mstack\-offset=\fR\fInum\fR 4
  .IX Item "-mstack-offset=num"
  Set the offset between the top of the stack and the stack pointer.
  E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
  can be used by leaf functions without stack allocation.
  Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
! Note also that this option changes the ABI; compiling a program with a
  different stack offset than the libraries have been compiled with
  generally does not work.
  This option can be useful if you want to evaluate if a different stack
  offset would give you better code, but to actually use a different stack
  offset to build working programs, it is recommended to configure the
  toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
! .IP \fB\-mno\-round\-nearest\fR 4
  .IX Item "-mno-round-nearest"
  Make the scheduler assume that the rounding mode has been set to
  truncating.  The default is \fB\-mround\-nearest\fR.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  If not otherwise specified by an attribute, assume all calls might be beyond
  the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
  function address into a register before performing a (otherwise direct) call.
  This is the default.
! .IP \fB\-mshort\-calls\fR 4
  .IX Item "-mshort-calls"
  If not otherwise specified by an attribute, assume all direct calls are
  in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
  for direct calls.  The default is \fB\-mlong\-calls\fR.
! .IP \fB\-msmall16\fR 4
  .IX Item "-msmall16"
  Assume addresses can be loaded as 16\-bit unsigned values.  This does not
  apply to function addresses for which \fB\-mlong\-calls\fR semantics
  are in effect.
! .IP \fB\-mfp\-mode=\fR\fImode\fR 4
  .IX Item "-mfp-mode=mode"
! Set the prevailing mode of the floating\-point unit.
! This determines the floating\-point mode that is provided and expected
  at function call and return time.  Making this mode match the mode you
  predominantly need at function start can make your programs smaller and
  faster by avoiding unnecessary mode switches.
  .Sp
  \&\fImode\fR can be set to one the following values:
  .RS 4
! .IP \fBcaller\fR 4
  .IX Item "caller"
  Any mode at function entry is valid, and retained or restored when
  the function returns, and when it calls other functions.
  This mode is useful for compiling libraries or other compilation units
  you might want to incorporate into different programs with different
! prevailing FPU modes, and the convenience of being able to use a single
  object file outweighs the size and speed overhead for any extra
  mode switching that might be needed, compared with what would be needed
! with a more specific choice of prevailing FPU mode.
! .IP \fBtruncate\fR 4
  .IX Item "truncate"
! This is the mode used for floating\-point calculations with
  truncating (i.e. round towards zero) rounding mode.  That includes
  conversion from floating point to integer.
! .IP \fBround\-nearest\fR 4
  .IX Item "round-nearest"
! This is the mode used for floating\-point calculations with
! round\-to\-nearest\-or\-even rounding mode.
! .IP \fBint\fR 4
  .IX Item "int"
! This is the mode used to perform integer calculations in the FPU, e.g.
! integer multiply, or integer multiply\-and\-accumulate.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mfp\-mode=caller\fR
  .RE
! .IP \fB\-mno\-split\-lohi\fR 4
  .IX Item "-mno-split-lohi"
  .PD 0
! .IP \fB\-mno\-postinc\fR 4
  .IX Item "-mno-postinc"
! .IP \fB\-mno\-postmodify\fR 4
  .IX Item "-mno-postmodify"
  .PD
  Code generation tweaks that disable, respectively, splitting of 32\-bit
! loads, generation of post\-increment addresses, and generation of
! post\-modify addresses.  The defaults are \fBmsplit\-lohi\fR,
  \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
! .IP \fB\-mnovect\-double\fR 4
  .IX Item "-mnovect-double"
! Change the preferred SIMD mode to SImode.  The default is
! \&\fB\-mvect\-double\fR, which uses DImode as preferred SIMD mode.
! .IP \fB\-max\-vect\-align=\fR\fInum\fR 4
  .IX Item "-max-vect-align=num"
! The maximum alignment for SIMD vector mode types.
  \&\fInum\fR may be 4 or 8.  The default is 8.
! Note that this is an ABI change, even though many library function
! interfaces are unaffected if they don\*(Aqt use SIMD vector modes
  in places that affect size and/or alignment of relevant types.
! .IP \fB\-msplit\-vecmove\-early\fR 4
  .IX Item "-msplit-vecmove-early"
  Split vector moves into single word moves before reload.  In theory this
  can give better register allocation, but so far the reverse seems to be
  generally the case.
! .IP \fB\-m1reg\-\fR\fIreg\fR 4
  .IX Item "-m1reg-reg"
  Specify a register to hold the constant \-1, which makes loading small negative
  constants and certain bitmasks faster.
*************** which specify use of that register as a
*** 21162,21694 ****
  and \fBnone\fR, which means that no register is used for this
  purpose.  The default is \fB\-m1reg\-none\fR.
  .PP
! \fI\s-1AMD GCN\s0 Options\fR
  .IX Subsection "AMD GCN Options"
  .PP
! These options are defined specifically for the \s-1AMD GCN\s0 port.
! .IP "\fB\-march=\fR\fIgpu\fR" 4
  .IX Item "-march=gpu"
  .PD 0
! .IP "\fB\-mtune=\fR\fIgpu\fR" 4
  .IX Item "-mtune=gpu"
  .PD
  Set architecture type or tuning for \fIgpu\fR. Supported values for \fIgpu\fR
  are
  .RS 4
! .IP "\fBfiji\fR" 4
  .IX Item "fiji"
! Compile for \s-1GCN3\s0 Fiji devices (gfx803).  Support deprecated; availablility
! depends on how \s-1GCC\s0 has been configured, see \fB\-\-with\-arch\fR and
  \&\fB\-\-with\-multilib\-list\fR.
! .IP "\fBgfx900\fR" 4
  .IX Item "gfx900"
! Compile for \s-1GCN5\s0 Vega 10 devices (gfx900).
! .IP "\fBgfx906\fR" 4
  .IX Item "gfx906"
! Compile for \s-1GCN5\s0 Vega 20 devices (gfx906).
! .IP "\fBgfx908\fR" 4
  .IX Item "gfx908"
! Compile for \s-1CDNA1\s0 Instinct \s-1MI100\s0 series devices (gfx908).
! .IP "\fBgfx90a\fR" 4
  .IX Item "gfx90a"
! Compile for \s-1CDNA2\s0 Instinct \s-1MI200\s0 series devices (gfx90a).
! .IP "\fBgfx90c\fR" 4
  .IX Item "gfx90c"
! Compile for \s-1GCN5\s0 Vega 7 devices (gfx90c).
! .IP "\fBgfx1030\fR" 4
  .IX Item "gfx1030"
! Compile for \s-1RDNA2\s0 gfx1030 devices (\s-1GFX10\s0 series).
! .IP "\fBgfx1036\fR" 4
  .IX Item "gfx1036"
! Compile for \s-1RDNA2\s0 gfx1036 devices (\s-1GFX10\s0 series).
! .IP "\fBgfx1100\fR" 4
  .IX Item "gfx1100"
! Compile for \s-1RDNA3\s0 gfx1100 devices (\s-1GFX11\s0 series).
! .IP "\fBgfx1103\fR" 4
  .IX Item "gfx1103"
! Compile for \s-1RDNA3\s0 gfx1103 devices (\s-1GFX11\s0 series).
  .RE
  .RS 4
  .RE
! .IP "\fB\-msram\-ecc=on\fR" 4
  .IX Item "-msram-ecc=on"
  .PD 0
! .IP "\fB\-msram\-ecc=off\fR" 4
  .IX Item "-msram-ecc=off"
! .IP "\fB\-msram\-ecc=any\fR" 4
  .IX Item "-msram-ecc=any"
  .PD
! Compile binaries suitable for devices with the SRAM-ECC feature enabled,
! disabled, or either mode.  This feature can be enabled per-process on some
  devices.  The compiled code must match the device mode. The default is
  \&\fBany\fR, for devices that support it.
! .IP "\fB\-mstack\-size=\fR\fIbytes\fR" 4
  .IX Item "-mstack-size=bytes"
! Specify how many \fIbytes\fR of stack space will be requested for each \s-1GPU\s0
! thread (wave-front).  Beware that there may be many threads and limited memory
  available.  The size of the stack allocation may also have an impact on
! run-time performance.  The default is 32KB when using OpenACC or OpenMP, and
  1MB otherwise.
! .IP "\fB\-mxnack=on\fR" 4
  .IX Item "-mxnack=on"
  .PD 0
! .IP "\fB\-mxnack=off\fR" 4
  .IX Item "-mxnack=off"
! .IP "\fB\-mxnack=any\fR" 4
  .IX Item "-mxnack=any"
  .PD
! Compile binaries suitable for devices with the \s-1XNACK\s0 feature enabled, disabled,
! or either mode.  Some devices always require \s-1XNACK\s0 and some allow the user to
! configure \s-1XNACK.\s0  The compiled code must match the device mode.
  The default is \fB\-mxnack=any\fR on devices that support Unified Shared
  Memory, and \fB\-mxnack=no\fR otherwise.
  .PP
! \fI\s-1ARC\s0 Options\fR
  .IX Subsection "ARC Options"
  .PP
  The following options control the architecture variant for which code
  is being compiled:
! .IP "\fB\-mbarrel\-shifter\fR" 4
  .IX Item "-mbarrel-shifter"
  Generate instructions supported by barrel shifter.  This is the default
  unless \fB\-mcpu=ARC601\fR or \fB\-mcpu=ARCEM\fR is in effect.
! .IP "\fB\-mjli\-always\fR" 4
  .IX Item "-mjli-always"
  Force to call a function using jli_s instruction.  This option is
  valid only for ARCv2 architecture.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Set architecture type, register usage, and instruction scheduling
  parameters for \fIcpu\fR.  There are also shortcut alias options
  available for backward compatibility and convenience.  Supported
  values for \fIcpu\fR are
  .RS 4
! .IP "\fBarc600\fR" 4
  .IX Item "arc600"
! Compile for \s-1ARC600.\s0  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
! .IP "\fBarc601\fR" 4
  .IX Item "arc601"
! Compile for \s-1ARC601.\s0  Alias: \fB\-mARC601\fR.
! .IP "\fBarc700\fR" 4
  .IX Item "arc700"
! Compile for \s-1ARC700.\s0  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
  This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
! .IP "\fBarcem\fR" 4
  .IX Item "arcem"
! Compile for \s-1ARC EM.\s0
! .IP "\fBarchs\fR" 4
  .IX Item "archs"
! Compile for \s-1ARC HS.\s0
! .IP "\fBem\fR" 4
  .IX Item "em"
! Compile for \s-1ARC EM CPU\s0 with no hardware extensions.
! .IP "\fBem4\fR" 4
  .IX Item "em4"
! Compile for \s-1ARC EM4 CPU.\s0
! .IP "\fBem4_dmips\fR" 4
  .IX Item "em4_dmips"
! Compile for \s-1ARC EM4 DMIPS CPU.\s0
! .IP "\fBem4_fpus\fR" 4
  .IX Item "em4_fpus"
! Compile for \s-1ARC EM4 DMIPS CPU\s0 with the single-precision floating-point
  extension.
! .IP "\fBem4_fpuda\fR" 4
  .IX Item "em4_fpuda"
! Compile for \s-1ARC EM4 DMIPS CPU\s0 with single-precision floating-point and
  double assist instructions.
! .IP "\fBhs\fR" 4
  .IX Item "hs"
! Compile for \s-1ARC HS CPU\s0 with no hardware extensions except the atomic
  instructions.
! .IP "\fBhs34\fR" 4
  .IX Item "hs34"
! Compile for \s-1ARC HS34 CPU.\s0
! .IP "\fBhs38\fR" 4
  .IX Item "hs38"
! Compile for \s-1ARC HS38 CPU.\s0
! .IP "\fBhs38_linux\fR" 4
  .IX Item "hs38_linux"
! Compile for \s-1ARC HS38 CPU\s0 with all hardware extensions on.
! .IP "\fBhs4x\fR" 4
  .IX Item "hs4x"
! Compile for \s-1ARC\s0 HS4x \s-1CPU.\s0
! .IP "\fBhs4xd\fR" 4
  .IX Item "hs4xd"
! Compile for \s-1ARC\s0 HS4xD \s-1CPU.\s0
! .IP "\fBhs4x_rel31\fR" 4
  .IX Item "hs4x_rel31"
! Compile for \s-1ARC\s0 HS4x \s-1CPU\s0 release 3.10a.
! .IP "\fBarc600_norm\fR" 4
  .IX Item "arc600_norm"
! Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP "\fBarc600_mul32x16\fR" 4
  .IX Item "arc600_mul32x16"
! Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply 
  instructions enabled.
! .IP "\fBarc600_mul64\fR" 4
  .IX Item "arc600_mul64"
! Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family 
  instructions enabled.
! .IP "\fBarc601_norm\fR" 4
  .IX Item "arc601_norm"
! Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP "\fBarc601_mul32x16\fR" 4
  .IX Item "arc601_mul32x16"
! Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply
  instructions enabled.
! .IP "\fBarc601_mul64\fR" 4
  .IX Item "arc601_mul64"
! Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family
  instructions enabled.
! .IP "\fBnps400\fR" 4
  .IX Item "nps400"
! Compile for \s-1ARC 700\s0 on \s-1NPS400\s0 chip.
! .IP "\fBem_mini\fR" 4
  .IX Item "em_mini"
! Compile for \s-1ARC EM\s0 minimalist configuration featuring reduced register
  set.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mdpfp\fR" 4
  .IX Item "-mdpfp"
  .PD 0
! .IP "\fB\-mdpfp\-compact\fR" 4
  .IX Item "-mdpfp-compact"
  .PD
! Generate double-precision \s-1FPX\s0 instructions, tuned for the compact
  implementation.
! .IP "\fB\-mdpfp\-fast\fR" 4
  .IX Item "-mdpfp-fast"
! Generate double-precision \s-1FPX\s0 instructions, tuned for the fast
  implementation.
! .IP "\fB\-mno\-dpfp\-lrsr\fR" 4
  .IX Item "-mno-dpfp-lrsr"
! Disable \f(CW\*(C`lr\*(C'\fR and \f(CW\*(C`sr\*(C'\fR instructions from using \s-1FPX\s0 extension
  aux registers.
! .IP "\fB\-mea\fR" 4
  .IX Item "-mea"
  Generate extended arithmetic instructions.  Currently only
  \&\f(CW\*(C`divaw\*(C'\fR, \f(CW\*(C`adds\*(C'\fR, \f(CW\*(C`subs\*(C'\fR, and \f(CW\*(C`sat16\*(C'\fR are
  supported.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP "\fB\-mno\-mpy\fR" 4
  .IX Item "-mno-mpy"
! Do not generate \f(CW\*(C`mpy\*(C'\fR\-family instructions for \s-1ARC700.\s0  This option is
  deprecated.
! .IP "\fB\-mmul32x16\fR" 4
  .IX Item "-mmul32x16"
! Generate 32x16\-bit multiply and multiply-accumulate instructions.
! .IP "\fB\-mmul64\fR" 4
  .IX Item "-mmul64"
  Generate \f(CW\*(C`mul64\*(C'\fR and \f(CW\*(C`mulu64\*(C'\fR instructions.  
  Only valid for \fB\-mcpu=ARC600\fR.
! .IP "\fB\-mnorm\fR" 4
  .IX Item "-mnorm"
  Generate \f(CW\*(C`norm\*(C'\fR instructions.  This is the default if \fB\-mcpu=ARC700\fR
  is in effect.
! .IP "\fB\-mspfp\fR" 4
  .IX Item "-mspfp"
  .PD 0
! .IP "\fB\-mspfp\-compact\fR" 4
  .IX Item "-mspfp-compact"
  .PD
! Generate single-precision \s-1FPX\s0 instructions, tuned for the compact
  implementation.
! .IP "\fB\-mspfp\-fast\fR" 4
  .IX Item "-mspfp-fast"
! Generate single-precision \s-1FPX\s0 instructions, tuned for the fast
  implementation.
! .IP "\fB\-msimd\fR" 4
  .IX Item "-msimd"
! Enable generation of \s-1ARC SIMD\s0 instructions via target-specific
  builtins.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  This option ignored; it is provided for compatibility purposes only.
! Software floating-point code is emitted by default, and this default
! can overridden by \s-1FPX\s0 options; \fB\-mspfp\fR, \fB\-mspfp\-compact\fR, or
  \&\fB\-mspfp\-fast\fR for single precision, and \fB\-mdpfp\fR,
  \&\fB\-mdpfp\-compact\fR, or \fB\-mdpfp\-fast\fR for double precision.
! .IP "\fB\-mswap\fR" 4
  .IX Item "-mswap"
  Generate \f(CW\*(C`swap\*(C'\fR instructions.
! .IP "\fB\-matomic\fR" 4
  .IX Item "-matomic"
  This enables use of the locked load/store conditional extension to implement
! atomic memory built-in functions.  Not available for \s-1ARC\s0 6xx or \s-1ARC
! EM\s0 cores.
! .IP "\fB\-mdiv\-rem\fR" 4
  .IX Item "-mdiv-rem"
  Enable \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`rem\*(C'\fR instructions for ARCv2 cores.
! .IP "\fB\-mcode\-density\fR" 4
  .IX Item "-mcode-density"
! Enable code density instructions for \s-1ARC EM.\s0  
! This option is on by default for \s-1ARC HS.\s0
! .IP "\fB\-mll64\fR" 4
  .IX Item "-mll64"
! Enable double load/store operations for \s-1ARC HS\s0 cores.
! .IP "\fB\-mtp\-regno=\fR\fIregno\fR" 4
  .IX Item "-mtp-regno=regno"
  Specify thread pointer register number.
! .IP "\fB\-mmpy\-option=\fR\fImulto\fR" 4
  .IX Item "-mmpy-option=multo"
  Compile ARCv2 code with a multiplier design option.  You can specify 
  the option using either a string or numeric value for \fImulto\fR.  
  \&\fBwlh1\fR is the default value.  The recognized values are:
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  .PD 0
! .IP "\fBnone\fR" 4
  .IX Item "none"
  .PD
  No multiplier available.
! .IP "\fB1\fR" 4
  .IX Item "1"
  .PD 0
! .IP "\fBw\fR" 4
  .IX Item "w"
  .PD
  16x16 multiplier, fully pipelined.
  The following instructions are enabled: \f(CW\*(C`mpyw\*(C'\fR and \f(CW\*(C`mpyuw\*(C'\fR.
! .IP "\fB2\fR" 4
  .IX Item "2"
  .PD 0
! .IP "\fBwlh1\fR" 4
  .IX Item "wlh1"
  .PD
  32x32 multiplier, fully
  pipelined (1 stage).  The following instructions are additionally
  enabled: \f(CW\*(C`mpy\*(C'\fR, \f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB3\fR" 4
  .IX Item "3"
  .PD 0
! .IP "\fBwlh2\fR" 4
  .IX Item "wlh2"
  .PD
  32x32 multiplier, fully pipelined
  (2 stages).  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB4\fR" 4
  .IX Item "4"
  .PD 0
! .IP "\fBwlh3\fR" 4
  .IX Item "wlh3"
  .PD
  Two 16x16 multipliers, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB5\fR" 4
  .IX Item "5"
  .PD 0
! .IP "\fBwlh4\fR" 4
  .IX Item "wlh4"
  .PD
  One 16x16 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB6\fR" 4
  .IX Item "6"
  .PD 0
! .IP "\fBwlh5\fR" 4
  .IX Item "wlh5"
  .PD
  One 32x4 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP "\fB7\fR" 4
  .IX Item "7"
  .PD 0
! .IP "\fBplus_dmpy\fR" 4
  .IX Item "plus_dmpy"
  .PD
! \&\s-1ARC HS SIMD\s0 support.
! .IP "\fB8\fR" 4
  .IX Item "8"
  .PD 0
! .IP "\fBplus_macd\fR" 4
  .IX Item "plus_macd"
  .PD
! \&\s-1ARC HS SIMD\s0 support.
! .IP "\fB9\fR" 4
  .IX Item "9"
  .PD 0
! .IP "\fBplus_qmacw\fR" 4
  .IX Item "plus_qmacw"
  .PD
! \&\s-1ARC HS SIMD\s0 support.
  .RE
  .RS 4
  .Sp
  This option is only available for ARCv2 cores.
  .RE
! .IP "\fB\-mfpu=\fR\fIfpu\fR" 4
  .IX Item "-mfpu=fpu"
! Enables support for specific floating-point hardware extensions for ARCv2
  cores.  Supported values for \fIfpu\fR are:
  .RS 4
! .IP "\fBfpus\fR" 4
  .IX Item "fpus"
! Enables support for single-precision floating-point hardware
  extensions.
! .IP "\fBfpud\fR" 4
  .IX Item "fpud"
! Enables support for double-precision floating-point hardware
! extensions.  The single-precision floating-point extension is also
! enabled.  Not available for \s-1ARC EM.\s0
! .IP "\fBfpuda\fR" 4
  .IX Item "fpuda"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.  The single-precision
! floating-point extension is also enabled.  This option is
! only available for \s-1ARC EM.\s0
! .IP "\fBfpuda_div\fR" 4
  .IX Item "fpuda_div"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.
! The single-precision floating-point, square-root, and divide 
  extensions are also enabled.  This option is
! only available for \s-1ARC EM.\s0
! .IP "\fBfpuda_fma\fR" 4
  .IX Item "fpuda_fma"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.
! The single-precision floating-point and fused multiply and add 
  hardware extensions are also enabled.  This option is
! only available for \s-1ARC EM.\s0
! .IP "\fBfpuda_all\fR" 4
  .IX Item "fpuda_all"
! Enables support for double-precision floating-point hardware
! extensions using double-precision assist instructions.
! All single-precision floating-point hardware extensions are also
! enabled.  This option is only available for \s-1ARC EM.\s0
! .IP "\fBfpus_div\fR" 4
  .IX Item "fpus_div"
! Enables support for single-precision floating-point, square-root and divide 
  hardware extensions.
! .IP "\fBfpud_div\fR" 4
  .IX Item "fpud_div"
! Enables support for double-precision floating-point, square-root and divide 
  hardware extensions.  This option
! includes option \fBfpus_div\fR. Not available for \s-1ARC EM.\s0
! .IP "\fBfpus_fma\fR" 4
  .IX Item "fpus_fma"
! Enables support for single-precision floating-point and 
  fused multiply and add hardware extensions.
! .IP "\fBfpud_fma\fR" 4
  .IX Item "fpud_fma"
! Enables support for double-precision floating-point and 
  fused multiply and add hardware extensions.  This option
! includes option \fBfpus_fma\fR.  Not available for \s-1ARC EM.\s0
! .IP "\fBfpus_all\fR" 4
  .IX Item "fpus_all"
! Enables support for all single-precision floating-point hardware
  extensions.
! .IP "\fBfpud_all\fR" 4
  .IX Item "fpud_all"
! Enables support for all single\- and double-precision floating-point
! hardware extensions.  Not available for \s-1ARC EM.\s0
  .RE
  .RS 4
  .RE
! .IP "\fB\-mirq\-ctrl\-saved=\fR\fIregister-range\fR\fB,\fR \fIblink\fR\fB,\fR \fIlp_count\fR" 4
  .IX Item "-mirq-ctrl-saved=register-range, blink, lp_count"
! Specifies general-purposes registers that the processor automatically
! saves/restores on interrupt entry and exit.  \fIregister-range\fR is
  specified as two registers separated by a dash.  The register range
  always starts with \f(CW\*(C`r0\*(C'\fR, the upper limit is \f(CW\*(C`fp\*(C'\fR register.
  \&\fIblink\fR and \fIlp_count\fR are optional.  This option is only
! valid for \s-1ARC EM\s0 and \s-1ARC HS\s0 cores.
! .IP "\fB\-mrgf\-banked\-regs=\fR\fInumber\fR" 4
  .IX Item "-mrgf-banked-regs=number"
  Specifies the number of registers replicated in second register bank
  on entry to fast interrupt.  Fast interrupts are interrupts with the
! highest priority level P0.  These interrupts save only \s-1PC\s0 and \s-1STATUS32\s0
  registers to avoid memory transactions during interrupt entry and exit
  sequences.  Use this option when you are using fast interrupts in an
! \&\s-1ARC V2\s0 family processor.  Permitted values are 4, 8, 16, and 32.
! .IP "\fB\-mlpc\-width=\fR\fIwidth\fR" 4
  .IX Item "-mlpc-width=width"
  Specify the width of the \f(CW\*(C`lp_count\*(C'\fR register.  Valid values for
  \&\fIwidth\fR are 8, 16, 20, 24, 28 and 32 bits.  The default width is
  fixed to 32 bits.  If the width is less than 32, the compiler does not
! attempt to transform loops in your program to use the zero-delay loop
  mechanism unless it is known that the \f(CW\*(C`lp_count\*(C'\fR register can
! hold the required loop-counter value.  Depending on the width
! specified, the compiler and run-time library might continue to use the
  loop mechanism for various needs.  This option defines macro
  \&\f(CW\*(C`_\|_ARC_LPC_WIDTH_\|_\*(C'\fR with the value of \fIwidth\fR.
! .IP "\fB\-mrf16\fR" 4
  .IX Item "-mrf16"
  This option instructs the compiler to generate code for a 16\-entry
  register file.  This option defines the \f(CW\*(C`_\|_ARC_RF16_\|_\*(C'\fR
  preprocessor macro.
! .IP "\fB\-mbranch\-index\fR" 4
  .IX Item "-mbranch-index"
  Enable use of \f(CW\*(C`bi\*(C'\fR or \f(CW\*(C`bih\*(C'\fR instructions to implement jump
  tables.
  .PP
  The following options are passed through to the assembler, and also
  define preprocessor macro symbols.
! .IP "\fB\-mdsp\-packa\fR" 4
  .IX Item "-mdsp-packa"
! Passed down to the assembler to enable the \s-1DSP\s0 Pack A extensions.
  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.  This option is
  deprecated.
! .IP "\fB\-mdvbf\fR" 4
  .IX Item "-mdvbf"
  Passed down to the assembler to enable the dual Viterbi butterfly
  extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.  This
  option is deprecated.
! .IP "\fB\-mlock\fR" 4
  .IX Item "-mlock"
  Passed down to the assembler to enable the locked load/store
  conditional extension.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xlock\*(C'\fR.
! .IP "\fB\-mmac\-d16\fR" 4
  .IX Item "-mmac-d16"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mmac\-24\fR" 4
  .IX Item "-mmac-24"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mrtsc\fR" 4
  .IX Item "-mrtsc"
! Passed down to the assembler to enable the 64\-bit time-stamp counter
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mswape\fR" 4
  .IX Item "-mswape"
  Passed down to the assembler to enable the swap byte ordering
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xswape\*(C'\fR.
! .IP "\fB\-mtelephony\fR" 4
  .IX Item "-mtelephony"
! Passed down to the assembler to enable dual\- and single-operand
  instructions for telephony.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.  This option is deprecated.
! .IP "\fB\-mxy\fR" 4
  .IX Item "-mxy"
! Passed down to the assembler to enable the \s-1XY\s0 memory extension.  Also
  sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
  .PP
  The following options control how the assembly code is annotated:
! .IP "\fB\-misize\fR" 4
  .IX Item "-misize"
  Annotate assembler instructions with estimated addresses.
! .IP "\fB\-mannotate\-align\fR" 4
  .IX Item "-mannotate-align"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are passed through to the linker:
! .IP "\fB\-marclinux\fR" 4
  .IX Item "-marclinux"
  Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
  This option is enabled by default in tool chains built for
  \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
  when profiling is not requested.
! .IP "\fB\-marclinux_prof\fR" 4
  .IX Item "-marclinux_prof"
  Passed through to the linker, to specify use of the
  \&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
--- 21097,21629 ----
  and \fBnone\fR, which means that no register is used for this
  purpose.  The default is \fB\-m1reg\-none\fR.
  .PP
! \fIAMD GCN Options\fR
  .IX Subsection "AMD GCN Options"
  .PP
! These options are defined specifically for the AMD GCN port.
! .IP \fB\-march=\fR\fIgpu\fR 4
  .IX Item "-march=gpu"
  .PD 0
! .IP \fB\-mtune=\fR\fIgpu\fR 4
  .IX Item "-mtune=gpu"
  .PD
  Set architecture type or tuning for \fIgpu\fR. Supported values for \fIgpu\fR
  are
  .RS 4
! .IP \fBfiji\fR 4
  .IX Item "fiji"
! Compile for GCN3 Fiji devices (gfx803).  Support deprecated; availablility
! depends on how GCC has been configured, see \fB\-\-with\-arch\fR and
  \&\fB\-\-with\-multilib\-list\fR.
! .IP \fBgfx900\fR 4
  .IX Item "gfx900"
! Compile for GCN5 Vega 10 devices (gfx900).
! .IP \fBgfx906\fR 4
  .IX Item "gfx906"
! Compile for GCN5 Vega 20 devices (gfx906).
! .IP \fBgfx908\fR 4
  .IX Item "gfx908"
! Compile for CDNA1 Instinct MI100 series devices (gfx908).
! .IP \fBgfx90a\fR 4
  .IX Item "gfx90a"
! Compile for CDNA2 Instinct MI200 series devices (gfx90a).
! .IP \fBgfx90c\fR 4
  .IX Item "gfx90c"
! Compile for GCN5 Vega 7 devices (gfx90c).
! .IP \fBgfx1030\fR 4
  .IX Item "gfx1030"
! Compile for RDNA2 gfx1030 devices (GFX10 series).
! .IP \fBgfx1036\fR 4
  .IX Item "gfx1036"
! Compile for RDNA2 gfx1036 devices (GFX10 series).
! .IP \fBgfx1100\fR 4
  .IX Item "gfx1100"
! Compile for RDNA3 gfx1100 devices (GFX11 series).
! .IP \fBgfx1103\fR 4
  .IX Item "gfx1103"
! Compile for RDNA3 gfx1103 devices (GFX11 series).
  .RE
  .RS 4
  .RE
! .IP \fB\-msram\-ecc=on\fR 4
  .IX Item "-msram-ecc=on"
  .PD 0
! .IP \fB\-msram\-ecc=off\fR 4
  .IX Item "-msram-ecc=off"
! .IP \fB\-msram\-ecc=any\fR 4
  .IX Item "-msram-ecc=any"
  .PD
! Compile binaries suitable for devices with the SRAM\-ECC feature enabled,
! disabled, or either mode.  This feature can be enabled per\-process on some
  devices.  The compiled code must match the device mode. The default is
  \&\fBany\fR, for devices that support it.
! .IP \fB\-mstack\-size=\fR\fIbytes\fR 4
  .IX Item "-mstack-size=bytes"
! Specify how many \fIbytes\fR of stack space will be requested for each GPU
! thread (wave\-front).  Beware that there may be many threads and limited memory
  available.  The size of the stack allocation may also have an impact on
! run\-time performance.  The default is 32KB when using OpenACC or OpenMP, and
  1MB otherwise.
! .IP \fB\-mxnack=on\fR 4
  .IX Item "-mxnack=on"
  .PD 0
! .IP \fB\-mxnack=off\fR 4
  .IX Item "-mxnack=off"
! .IP \fB\-mxnack=any\fR 4
  .IX Item "-mxnack=any"
  .PD
! Compile binaries suitable for devices with the XNACK feature enabled, disabled,
! or either mode.  Some devices always require XNACK and some allow the user to
! configure XNACK.  The compiled code must match the device mode.
  The default is \fB\-mxnack=any\fR on devices that support Unified Shared
  Memory, and \fB\-mxnack=no\fR otherwise.
  .PP
! \fIARC Options\fR
  .IX Subsection "ARC Options"
  .PP
  The following options control the architecture variant for which code
  is being compiled:
! .IP \fB\-mbarrel\-shifter\fR 4
  .IX Item "-mbarrel-shifter"
  Generate instructions supported by barrel shifter.  This is the default
  unless \fB\-mcpu=ARC601\fR or \fB\-mcpu=ARCEM\fR is in effect.
! .IP \fB\-mjli\-always\fR 4
  .IX Item "-mjli-always"
  Force to call a function using jli_s instruction.  This option is
  valid only for ARCv2 architecture.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Set architecture type, register usage, and instruction scheduling
  parameters for \fIcpu\fR.  There are also shortcut alias options
  available for backward compatibility and convenience.  Supported
  values for \fIcpu\fR are
  .RS 4
! .IP \fBarc600\fR 4
  .IX Item "arc600"
! Compile for ARC600.  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
! .IP \fBarc601\fR 4
  .IX Item "arc601"
! Compile for ARC601.  Alias: \fB\-mARC601\fR.
! .IP \fBarc700\fR 4
  .IX Item "arc700"
! Compile for ARC700.  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
  This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
! .IP \fBarcem\fR 4
  .IX Item "arcem"
! Compile for ARC EM.
! .IP \fBarchs\fR 4
  .IX Item "archs"
! Compile for ARC HS.
! .IP \fBem\fR 4
  .IX Item "em"
! Compile for ARC EM CPU with no hardware extensions.
! .IP \fBem4\fR 4
  .IX Item "em4"
! Compile for ARC EM4 CPU.
! .IP \fBem4_dmips\fR 4
  .IX Item "em4_dmips"
! Compile for ARC EM4 DMIPS CPU.
! .IP \fBem4_fpus\fR 4
  .IX Item "em4_fpus"
! Compile for ARC EM4 DMIPS CPU with the single\-precision floating\-point
  extension.
! .IP \fBem4_fpuda\fR 4
  .IX Item "em4_fpuda"
! Compile for ARC EM4 DMIPS CPU with single\-precision floating\-point and
  double assist instructions.
! .IP \fBhs\fR 4
  .IX Item "hs"
! Compile for ARC HS CPU with no hardware extensions except the atomic
  instructions.
! .IP \fBhs34\fR 4
  .IX Item "hs34"
! Compile for ARC HS34 CPU.
! .IP \fBhs38\fR 4
  .IX Item "hs38"
! Compile for ARC HS38 CPU.
! .IP \fBhs38_linux\fR 4
  .IX Item "hs38_linux"
! Compile for ARC HS38 CPU with all hardware extensions on.
! .IP \fBhs4x\fR 4
  .IX Item "hs4x"
! Compile for ARC HS4x CPU.
! .IP \fBhs4xd\fR 4
  .IX Item "hs4xd"
! Compile for ARC HS4xD CPU.
! .IP \fBhs4x_rel31\fR 4
  .IX Item "hs4x_rel31"
! Compile for ARC HS4x CPU release 3.10a.
! .IP \fBarc600_norm\fR 4
  .IX Item "arc600_norm"
! Compile for ARC 600 CPU with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP \fBarc600_mul32x16\fR 4
  .IX Item "arc600_mul32x16"
! Compile for ARC 600 CPU with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply 
  instructions enabled.
! .IP \fBarc600_mul64\fR 4
  .IX Item "arc600_mul64"
! Compile for ARC 600 CPU with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family 
  instructions enabled.
! .IP \fBarc601_norm\fR 4
  .IX Item "arc601_norm"
! Compile for ARC 601 CPU with \f(CW\*(C`norm\*(C'\fR instructions enabled.
! .IP \fBarc601_mul32x16\fR 4
  .IX Item "arc601_mul32x16"
! Compile for ARC 601 CPU with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply
  instructions enabled.
! .IP \fBarc601_mul64\fR 4
  .IX Item "arc601_mul64"
! Compile for ARC 601 CPU with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family
  instructions enabled.
! .IP \fBnps400\fR 4
  .IX Item "nps400"
! Compile for ARC 700 on NPS400 chip.
! .IP \fBem_mini\fR 4
  .IX Item "em_mini"
! Compile for ARC EM minimalist configuration featuring reduced register
  set.
  .RE
  .RS 4
  .RE
! .IP \fB\-mdpfp\fR 4
  .IX Item "-mdpfp"
  .PD 0
! .IP \fB\-mdpfp\-compact\fR 4
  .IX Item "-mdpfp-compact"
  .PD
! Generate double\-precision FPX instructions, tuned for the compact
  implementation.
! .IP \fB\-mdpfp\-fast\fR 4
  .IX Item "-mdpfp-fast"
! Generate double\-precision FPX instructions, tuned for the fast
  implementation.
! .IP \fB\-mno\-dpfp\-lrsr\fR 4
  .IX Item "-mno-dpfp-lrsr"
! Disable \f(CW\*(C`lr\*(C'\fR and \f(CW\*(C`sr\*(C'\fR instructions from using FPX extension
  aux registers.
! .IP \fB\-mea\fR 4
  .IX Item "-mea"
  Generate extended arithmetic instructions.  Currently only
  \&\f(CW\*(C`divaw\*(C'\fR, \f(CW\*(C`adds\*(C'\fR, \f(CW\*(C`subs\*(C'\fR, and \f(CW\*(C`sat16\*(C'\fR are
  supported.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP \fB\-mno\-mpy\fR 4
  .IX Item "-mno-mpy"
! Do not generate \f(CW\*(C`mpy\*(C'\fR\-family instructions for ARC700.  This option is
  deprecated.
! .IP \fB\-mmul32x16\fR 4
  .IX Item "-mmul32x16"
! Generate 32x16\-bit multiply and multiply\-accumulate instructions.
! .IP \fB\-mmul64\fR 4
  .IX Item "-mmul64"
  Generate \f(CW\*(C`mul64\*(C'\fR and \f(CW\*(C`mulu64\*(C'\fR instructions.  
  Only valid for \fB\-mcpu=ARC600\fR.
! .IP \fB\-mnorm\fR 4
  .IX Item "-mnorm"
  Generate \f(CW\*(C`norm\*(C'\fR instructions.  This is the default if \fB\-mcpu=ARC700\fR
  is in effect.
! .IP \fB\-mspfp\fR 4
  .IX Item "-mspfp"
  .PD 0
! .IP \fB\-mspfp\-compact\fR 4
  .IX Item "-mspfp-compact"
  .PD
! Generate single\-precision FPX instructions, tuned for the compact
  implementation.
! .IP \fB\-mspfp\-fast\fR 4
  .IX Item "-mspfp-fast"
! Generate single\-precision FPX instructions, tuned for the fast
  implementation.
! .IP \fB\-msimd\fR 4
  .IX Item "-msimd"
! Enable generation of ARC SIMD instructions via target\-specific
  builtins.  Only valid for \fB\-mcpu=ARC700\fR.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  This option ignored; it is provided for compatibility purposes only.
! Software floating\-point code is emitted by default, and this default
! can overridden by FPX options; \fB\-mspfp\fR, \fB\-mspfp\-compact\fR, or
  \&\fB\-mspfp\-fast\fR for single precision, and \fB\-mdpfp\fR,
  \&\fB\-mdpfp\-compact\fR, or \fB\-mdpfp\-fast\fR for double precision.
! .IP \fB\-mswap\fR 4
  .IX Item "-mswap"
  Generate \f(CW\*(C`swap\*(C'\fR instructions.
! .IP \fB\-matomic\fR 4
  .IX Item "-matomic"
  This enables use of the locked load/store conditional extension to implement
! atomic memory built\-in functions.  Not available for ARC 6xx or ARC
! EM cores.
! .IP \fB\-mdiv\-rem\fR 4
  .IX Item "-mdiv-rem"
  Enable \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`rem\*(C'\fR instructions for ARCv2 cores.
! .IP \fB\-mcode\-density\fR 4
  .IX Item "-mcode-density"
! Enable code density instructions for ARC EM.  
! This option is on by default for ARC HS.
! .IP \fB\-mll64\fR 4
  .IX Item "-mll64"
! Enable double load/store operations for ARC HS cores.
! .IP \fB\-mtp\-regno=\fR\fIregno\fR 4
  .IX Item "-mtp-regno=regno"
  Specify thread pointer register number.
! .IP \fB\-mmpy\-option=\fR\fImulto\fR 4
  .IX Item "-mmpy-option=multo"
  Compile ARCv2 code with a multiplier design option.  You can specify 
  the option using either a string or numeric value for \fImulto\fR.  
  \&\fBwlh1\fR is the default value.  The recognized values are:
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  .PD 0
! .IP \fBnone\fR 4
  .IX Item "none"
  .PD
  No multiplier available.
! .IP \fB1\fR 4
  .IX Item "1"
  .PD 0
! .IP \fBw\fR 4
  .IX Item "w"
  .PD
  16x16 multiplier, fully pipelined.
  The following instructions are enabled: \f(CW\*(C`mpyw\*(C'\fR and \f(CW\*(C`mpyuw\*(C'\fR.
! .IP \fB2\fR 4
  .IX Item "2"
  .PD 0
! .IP \fBwlh1\fR 4
  .IX Item "wlh1"
  .PD
  32x32 multiplier, fully
  pipelined (1 stage).  The following instructions are additionally
  enabled: \f(CW\*(C`mpy\*(C'\fR, \f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB3\fR 4
  .IX Item "3"
  .PD 0
! .IP \fBwlh2\fR 4
  .IX Item "wlh2"
  .PD
  32x32 multiplier, fully pipelined
  (2 stages).  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB4\fR 4
  .IX Item "4"
  .PD 0
! .IP \fBwlh3\fR 4
  .IX Item "wlh3"
  .PD
  Two 16x16 multipliers, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB5\fR 4
  .IX Item "5"
  .PD 0
! .IP \fBwlh4\fR 4
  .IX Item "wlh4"
  .PD
  One 16x16 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB6\fR 4
  .IX Item "6"
  .PD 0
! .IP \fBwlh5\fR 4
  .IX Item "wlh5"
  .PD
  One 32x4 multiplier, blocking,
  sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
  \&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
! .IP \fB7\fR 4
  .IX Item "7"
  .PD 0
! .IP \fBplus_dmpy\fR 4
  .IX Item "plus_dmpy"
  .PD
! ARC HS SIMD support.
! .IP \fB8\fR 4
  .IX Item "8"
  .PD 0
! .IP \fBplus_macd\fR 4
  .IX Item "plus_macd"
  .PD
! ARC HS SIMD support.
! .IP \fB9\fR 4
  .IX Item "9"
  .PD 0
! .IP \fBplus_qmacw\fR 4
  .IX Item "plus_qmacw"
  .PD
! ARC HS SIMD support.
  .RE
  .RS 4
  .Sp
  This option is only available for ARCv2 cores.
  .RE
! .IP \fB\-mfpu=\fR\fIfpu\fR 4
  .IX Item "-mfpu=fpu"
! Enables support for specific floating\-point hardware extensions for ARCv2
  cores.  Supported values for \fIfpu\fR are:
  .RS 4
! .IP \fBfpus\fR 4
  .IX Item "fpus"
! Enables support for single\-precision floating\-point hardware
  extensions.
! .IP \fBfpud\fR 4
  .IX Item "fpud"
! Enables support for double\-precision floating\-point hardware
! extensions.  The single\-precision floating\-point extension is also
! enabled.  Not available for ARC EM.
! .IP \fBfpuda\fR 4
  .IX Item "fpuda"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.  The single\-precision
! floating\-point extension is also enabled.  This option is
! only available for ARC EM.
! .IP \fBfpuda_div\fR 4
  .IX Item "fpuda_div"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.
! The single\-precision floating\-point, square\-root, and divide 
  extensions are also enabled.  This option is
! only available for ARC EM.
! .IP \fBfpuda_fma\fR 4
  .IX Item "fpuda_fma"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.
! The single\-precision floating\-point and fused multiply and add 
  hardware extensions are also enabled.  This option is
! only available for ARC EM.
! .IP \fBfpuda_all\fR 4
  .IX Item "fpuda_all"
! Enables support for double\-precision floating\-point hardware
! extensions using double\-precision assist instructions.
! All single\-precision floating\-point hardware extensions are also
! enabled.  This option is only available for ARC EM.
! .IP \fBfpus_div\fR 4
  .IX Item "fpus_div"
! Enables support for single\-precision floating\-point, square\-root and divide 
  hardware extensions.
! .IP \fBfpud_div\fR 4
  .IX Item "fpud_div"
! Enables support for double\-precision floating\-point, square\-root and divide 
  hardware extensions.  This option
! includes option \fBfpus_div\fR. Not available for ARC EM.
! .IP \fBfpus_fma\fR 4
  .IX Item "fpus_fma"
! Enables support for single\-precision floating\-point and 
  fused multiply and add hardware extensions.
! .IP \fBfpud_fma\fR 4
  .IX Item "fpud_fma"
! Enables support for double\-precision floating\-point and 
  fused multiply and add hardware extensions.  This option
! includes option \fBfpus_fma\fR.  Not available for ARC EM.
! .IP \fBfpus_all\fR 4
  .IX Item "fpus_all"
! Enables support for all single\-precision floating\-point hardware
  extensions.
! .IP \fBfpud_all\fR 4
  .IX Item "fpud_all"
! Enables support for all single\- and double\-precision floating\-point
! hardware extensions.  Not available for ARC EM.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mirq\-ctrl\-saved=\fR\fIregister\-range\fR\fB,\fR \fIblink\fR\fB,\fR \fIlp_count\fR" 4
  .IX Item "-mirq-ctrl-saved=register-range, blink, lp_count"
! Specifies general\-purposes registers that the processor automatically
! saves/restores on interrupt entry and exit.  \fIregister\-range\fR is
  specified as two registers separated by a dash.  The register range
  always starts with \f(CW\*(C`r0\*(C'\fR, the upper limit is \f(CW\*(C`fp\*(C'\fR register.
  \&\fIblink\fR and \fIlp_count\fR are optional.  This option is only
! valid for ARC EM and ARC HS cores.
! .IP \fB\-mrgf\-banked\-regs=\fR\fInumber\fR 4
  .IX Item "-mrgf-banked-regs=number"
  Specifies the number of registers replicated in second register bank
  on entry to fast interrupt.  Fast interrupts are interrupts with the
! highest priority level P0.  These interrupts save only PC and STATUS32
  registers to avoid memory transactions during interrupt entry and exit
  sequences.  Use this option when you are using fast interrupts in an
! ARC V2 family processor.  Permitted values are 4, 8, 16, and 32.
! .IP \fB\-mlpc\-width=\fR\fIwidth\fR 4
  .IX Item "-mlpc-width=width"
  Specify the width of the \f(CW\*(C`lp_count\*(C'\fR register.  Valid values for
  \&\fIwidth\fR are 8, 16, 20, 24, 28 and 32 bits.  The default width is
  fixed to 32 bits.  If the width is less than 32, the compiler does not
! attempt to transform loops in your program to use the zero\-delay loop
  mechanism unless it is known that the \f(CW\*(C`lp_count\*(C'\fR register can
! hold the required loop\-counter value.  Depending on the width
! specified, the compiler and run\-time library might continue to use the
  loop mechanism for various needs.  This option defines macro
  \&\f(CW\*(C`_\|_ARC_LPC_WIDTH_\|_\*(C'\fR with the value of \fIwidth\fR.
! .IP \fB\-mrf16\fR 4
  .IX Item "-mrf16"
  This option instructs the compiler to generate code for a 16\-entry
  register file.  This option defines the \f(CW\*(C`_\|_ARC_RF16_\|_\*(C'\fR
  preprocessor macro.
! .IP \fB\-mbranch\-index\fR 4
  .IX Item "-mbranch-index"
  Enable use of \f(CW\*(C`bi\*(C'\fR or \f(CW\*(C`bih\*(C'\fR instructions to implement jump
  tables.
  .PP
  The following options are passed through to the assembler, and also
  define preprocessor macro symbols.
! .IP \fB\-mdsp\-packa\fR 4
  .IX Item "-mdsp-packa"
! Passed down to the assembler to enable the DSP Pack A extensions.
  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.  This option is
  deprecated.
! .IP \fB\-mdvbf\fR 4
  .IX Item "-mdvbf"
  Passed down to the assembler to enable the dual Viterbi butterfly
  extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.  This
  option is deprecated.
! .IP \fB\-mlock\fR 4
  .IX Item "-mlock"
  Passed down to the assembler to enable the locked load/store
  conditional extension.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xlock\*(C'\fR.
! .IP \fB\-mmac\-d16\fR 4
  .IX Item "-mmac-d16"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.  This option is deprecated.
! .IP \fB\-mmac\-24\fR 4
  .IX Item "-mmac-24"
  Passed down to the assembler.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.  This option is deprecated.
! .IP \fB\-mrtsc\fR 4
  .IX Item "-mrtsc"
! Passed down to the assembler to enable the 64\-bit time\-stamp counter
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.  This option is deprecated.
! .IP \fB\-mswape\fR 4
  .IX Item "-mswape"
  Passed down to the assembler to enable the swap byte ordering
  extension instruction.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xswape\*(C'\fR.
! .IP \fB\-mtelephony\fR 4
  .IX Item "-mtelephony"
! Passed down to the assembler to enable dual\- and single\-operand
  instructions for telephony.  Also sets the preprocessor symbol
  \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.  This option is deprecated.
! .IP \fB\-mxy\fR 4
  .IX Item "-mxy"
! Passed down to the assembler to enable the XY memory extension.  Also
  sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
  .PP
  The following options control how the assembly code is annotated:
! .IP \fB\-misize\fR 4
  .IX Item "-misize"
  Annotate assembler instructions with estimated addresses.
! .IP \fB\-mannotate\-align\fR 4
  .IX Item "-mannotate-align"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are passed through to the linker:
! .IP \fB\-marclinux\fR 4
  .IX Item "-marclinux"
  Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
  This option is enabled by default in tool chains built for
  \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
  when profiling is not requested.
! .IP \fB\-marclinux_prof\fR 4
  .IX Item "-marclinux_prof"
  Passed through to the linker, to specify use of the
  \&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
*************** tool chains built for \f(CW\*(C`arc\-lin
*** 21696,21765 ****
  \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
  .PP
  The following options control the semantics of generated code:
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  Generate calls as register indirect calls, thus providing access
  to the full 32\-bit address range.
! .IP "\fB\-mmedium\-calls\fR" 4
  .IX Item "-mmedium-calls"
! Don't use less than 25\-bit addressing range for calls, which is the
! offset available for an unconditional branch-and-link
  instruction.  Conditional execution of function calls is suppressed, to
  allow use of the 25\-bit range, rather than the 21\-bit range with
! conditional branch-and-link.  This is the default for tool chains built
  for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally-visible data in a small data section if
  that data is no bigger than \fInum\fR bytes.  The default value of
! \&\fInum\fR is 4 for any \s-1ARC\s0 configuration, or 8 when we have double
  load/store operations.
! .IP "\fB\-mno\-sdata\fR" 4
  .IX Item "-mno-sdata"
  Do not generate sdata references.  This is the default for tool chains
  built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
  targets.
! .IP "\fB\-mvolatile\-cache\fR" 4
  .IX Item "-mvolatile-cache"
  Use ordinarily cached memory accesses for volatile references.  This is the
  default.
! .IP "\fB\-mno\-volatile\-cache\fR" 4
  .IX Item "-mno-volatile-cache"
  Enable cache bypass for volatile references.
  .PP
  The following options fine tune code generation:
! .IP "\fB\-malign\-call\fR" 4
  .IX Item "-malign-call"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mauto\-modify\-reg\fR" 4
  .IX Item "-mauto-modify-reg"
  Enable the use of pre/post modify with register displacement.
! .IP "\fB\-mbbit\-peephole\fR" 4
  .IX Item "-mbbit-peephole"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mno\-brcc\fR" 4
  .IX Item "-mno-brcc"
! This option disables a target-specific pass in \fIarc_reorg\fR to
! generate compare-and-branch (\f(CW\*(C`br\f(CIcc\f(CW\*(C'\fR) instructions.  
  It has no effect on
  generation of these instructions driven by the combiner pass.
! .IP "\fB\-mcase\-vector\-pcrel\fR" 4
  .IX Item "-mcase-vector-pcrel"
! Use PC-relative switch case tables to enable case table shortening.
  This is the default for \fB\-Os\fR.
! .IP "\fB\-mcompact\-casesi\fR" 4
  .IX Item "-mcompact-casesi"
  Enable compact \f(CW\*(C`casesi\*(C'\fR pattern.  This is the default for \fB\-Os\fR,
  and only available for ARCv1 cores.  This option is deprecated.
! .IP "\fB\-mno\-cond\-exec\fR" 4
  .IX Item "-mno-cond-exec"
! Disable the ARCompact-specific pass to generate conditional 
  execution instructions.
  .Sp
  Due to delay slot scheduling and interactions between operand numbers,
  literal sizes, instruction lengths, and the support for conditional execution,
! the target-independent pass to generate conditional execution is often lacking,
! so the \s-1ARC\s0 port has kept a special pass around that tries to find more
  conditional execution generation opportunities after register allocation,
  branch shortening, and delay slot scheduling have been done.  This pass
  generally, but not always, improves performance and code size, at the cost of
--- 21631,21700 ----
  \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
  .PP
  The following options control the semantics of generated code:
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  Generate calls as register indirect calls, thus providing access
  to the full 32\-bit address range.
! .IP \fB\-mmedium\-calls\fR 4
  .IX Item "-mmedium-calls"
! Don\*(Aqt use less than 25\-bit addressing range for calls, which is the
! offset available for an unconditional branch\-and\-link
  instruction.  Conditional execution of function calls is suppressed, to
  allow use of the 25\-bit range, rather than the 21\-bit range with
! conditional branch\-and\-link.  This is the default for tool chains built
  for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally\-visible data in a small data section if
  that data is no bigger than \fInum\fR bytes.  The default value of
! \&\fInum\fR is 4 for any ARC configuration, or 8 when we have double
  load/store operations.
! .IP \fB\-mno\-sdata\fR 4
  .IX Item "-mno-sdata"
  Do not generate sdata references.  This is the default for tool chains
  built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
  targets.
! .IP \fB\-mvolatile\-cache\fR 4
  .IX Item "-mvolatile-cache"
  Use ordinarily cached memory accesses for volatile references.  This is the
  default.
! .IP \fB\-mno\-volatile\-cache\fR 4
  .IX Item "-mno-volatile-cache"
  Enable cache bypass for volatile references.
  .PP
  The following options fine tune code generation:
! .IP \fB\-malign\-call\fR 4
  .IX Item "-malign-call"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mauto\-modify\-reg\fR 4
  .IX Item "-mauto-modify-reg"
  Enable the use of pre/post modify with register displacement.
! .IP \fB\-mbbit\-peephole\fR 4
  .IX Item "-mbbit-peephole"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mno\-brcc\fR 4
  .IX Item "-mno-brcc"
! This option disables a target\-specific pass in \fIarc_reorg\fR to
! generate compare\-and\-branch (\f(CW\*(C`br\fR\f(CIcc\fR\f(CW\*(C'\fR) instructions.  
  It has no effect on
  generation of these instructions driven by the combiner pass.
! .IP \fB\-mcase\-vector\-pcrel\fR 4
  .IX Item "-mcase-vector-pcrel"
! Use PC\-relative switch case tables to enable case table shortening.
  This is the default for \fB\-Os\fR.
! .IP \fB\-mcompact\-casesi\fR 4
  .IX Item "-mcompact-casesi"
  Enable compact \f(CW\*(C`casesi\*(C'\fR pattern.  This is the default for \fB\-Os\fR,
  and only available for ARCv1 cores.  This option is deprecated.
! .IP \fB\-mno\-cond\-exec\fR 4
  .IX Item "-mno-cond-exec"
! Disable the ARCompact\-specific pass to generate conditional 
  execution instructions.
  .Sp
  Due to delay slot scheduling and interactions between operand numbers,
  literal sizes, instruction lengths, and the support for conditional execution,
! the target\-independent pass to generate conditional execution is often lacking,
! so the ARC port has kept a special pass around that tries to find more
  conditional execution generation opportunities after register allocation,
  branch shortening, and delay slot scheduling have been done.  This pass
  generally, but not always, improves performance and code size, at the cost of
*************** extra compilation time, which is why the
*** 21767,21799 ****
  If you have a problem with call instructions exceeding their allowable
  offset range because they are conditionalized, you should consider using
  \&\fB\-mmedium\-calls\fR instead.
! .IP "\fB\-mearly\-cbranchsi\fR" 4
  .IX Item "-mearly-cbranchsi"
! Enable pre-reload use of the \f(CW\*(C`cbranchsi\*(C'\fR pattern.
! .IP "\fB\-mexpand\-adddi\fR" 4
  .IX Item "-mexpand-adddi"
! Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at \s-1RTL\s0 generation time into
  \&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.  This option is deprecated.
! .IP "\fB\-mindexed\-loads\fR" 4
  .IX Item "-mindexed-loads"
  Enable the use of indexed loads.  This can be problematic because some
  optimizers then assume that indexed stores exist, which is not
  the case.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for \s-1ARC,\s0
  so by default the compiler uses standard reload
  (i.e. \fB\-mno\-lra\fR).
! .IP "\fB\-mlra\-priority\-none\fR" 4
  .IX Item "-mlra-priority-none"
! Don't indicate any priority for target registers.
! .IP "\fB\-mlra\-priority\-compact\fR" 4
  .IX Item "-mlra-priority-compact"
  Indicate target register priority for r0..r3 / r12..r15.
! .IP "\fB\-mlra\-priority\-noncompact\fR" 4
  .IX Item "-mlra-priority-noncompact"
  Reduce target register priority for r0..r3 / r12..r15.
! .IP "\fB\-mmillicode\fR" 4
  .IX Item "-mmillicode"
  When optimizing for size (using \fB\-Os\fR), prologues and epilogues
  that have to save or restore a large number of registers are often
--- 21702,21734 ----
  If you have a problem with call instructions exceeding their allowable
  offset range because they are conditionalized, you should consider using
  \&\fB\-mmedium\-calls\fR instead.
! .IP \fB\-mearly\-cbranchsi\fR 4
  .IX Item "-mearly-cbranchsi"
! Enable pre\-reload use of the \f(CW\*(C`cbranchsi\*(C'\fR pattern.
! .IP \fB\-mexpand\-adddi\fR 4
  .IX Item "-mexpand-adddi"
! Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at RTL generation time into
  \&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.  This option is deprecated.
! .IP \fB\-mindexed\-loads\fR 4
  .IX Item "-mindexed-loads"
  Enable the use of indexed loads.  This can be problematic because some
  optimizers then assume that indexed stores exist, which is not
  the case.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for ARC,
  so by default the compiler uses standard reload
  (i.e. \fB\-mno\-lra\fR).
! .IP \fB\-mlra\-priority\-none\fR 4
  .IX Item "-mlra-priority-none"
! Don\*(Aqt indicate any priority for target registers.
! .IP \fB\-mlra\-priority\-compact\fR 4
  .IX Item "-mlra-priority-compact"
  Indicate target register priority for r0..r3 / r12..r15.
! .IP \fB\-mlra\-priority\-noncompact\fR 4
  .IX Item "-mlra-priority-noncompact"
  Reduce target register priority for r0..r3 / r12..r15.
! .IP \fB\-mmillicode\fR 4
  .IX Item "-mmillicode"
  When optimizing for size (using \fB\-Os\fR), prologues and epilogues
  that have to save or restore a large number of registers are often
*************** referred to as a \fImillicode\fR call.
*** 21802,21840 ****
  performance issues, and/or cause linking issues when linking in a
  nonstandard way, this option is provided to turn on or off millicode
  call generation.
! .IP "\fB\-mcode\-density\-frame\fR" 4
  .IX Item "-mcode-density-frame"
  This option enable the compiler to emit \f(CW\*(C`enter\*(C'\fR and \f(CW\*(C`leave\*(C'\fR
  instructions.  These instructions are only valid for CPUs with
! code-density feature.
! .IP "\fB\-mmixed\-code\fR" 4
  .IX Item "-mmixed-code"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mq\-class\fR" 4
  .IX Item "-mq-class"
  Ths option is deprecated.  Enable \fBq\fR instruction alternatives.
  This is the default for \fB\-Os\fR.
! .IP "\fB\-mRcq\fR" 4
  .IX Item "-mRcq"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mRcw\fR" 4
  .IX Item "-mRcw"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-msize\-level=\fR\fIlevel\fR" 4
  .IX Item "-msize-level=level"
! Fine-tune size optimization with regards to instruction lengths and alignment.
  The recognized values for \fIlevel\fR are:
  .RS 4
! .IP "\fB0\fR" 4
  .IX Item "0"
  No size optimization.  This level is deprecated and treated like \fB1\fR.
! .IP "\fB1\fR" 4
  .IX Item "1"
  Short instructions are used opportunistically.
! .IP "\fB2\fR" 4
  .IX Item "2"
  In addition, alignment of loops and of code after barriers are dropped.
! .IP "\fB3\fR" 4
  .IX Item "3"
  In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
  .RE
--- 21737,21775 ----
  performance issues, and/or cause linking issues when linking in a
  nonstandard way, this option is provided to turn on or off millicode
  call generation.
! .IP \fB\-mcode\-density\-frame\fR 4
  .IX Item "-mcode-density-frame"
  This option enable the compiler to emit \f(CW\*(C`enter\*(C'\fR and \f(CW\*(C`leave\*(C'\fR
  instructions.  These instructions are only valid for CPUs with
! code\-density feature.
! .IP \fB\-mmixed\-code\fR 4
  .IX Item "-mmixed-code"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mq\-class\fR 4
  .IX Item "-mq-class"
  Ths option is deprecated.  Enable \fBq\fR instruction alternatives.
  This is the default for \fB\-Os\fR.
! .IP \fB\-mRcq\fR 4
  .IX Item "-mRcq"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mRcw\fR 4
  .IX Item "-mRcw"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-msize\-level=\fR\fIlevel\fR 4
  .IX Item "-msize-level=level"
! Fine\-tune size optimization with regards to instruction lengths and alignment.
  The recognized values for \fIlevel\fR are:
  .RS 4
! .IP \fB0\fR 4
  .IX Item "0"
  No size optimization.  This level is deprecated and treated like \fB1\fR.
! .IP \fB1\fR 4
  .IX Item "1"
  Short instructions are used opportunistically.
! .IP \fB2\fR 4
  .IX Item "2"
  In addition, alignment of loops and of code after barriers are dropped.
! .IP \fB3\fR 4
  .IX Item "3"
  In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
  .RE
*************** In addition, optional data alignment is
*** 21843,22031 ****
  This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
  the behavior when this is not set is equivalent to level \fB1\fR.
  .RE
! .IP "\fB\-mtune=\fR\fIcpu\fR" 4
  .IX Item "-mtune=cpu"
  Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
  by \fB\-mcpu=\fR.
  .Sp
  Supported values for \fIcpu\fR are
  .RS 4
! .IP "\fB\s-1ARC600\s0\fR" 4
  .IX Item "ARC600"
! Tune for \s-1ARC600 CPU.\s0
! .IP "\fB\s-1ARC601\s0\fR" 4
  .IX Item "ARC601"
! Tune for \s-1ARC601 CPU.\s0
! .IP "\fB\s-1ARC700\s0\fR" 4
  .IX Item "ARC700"
! Tune for \s-1ARC700 CPU\s0 with standard multiplier block.
! .IP "\fBARC700\-xmac\fR" 4
  .IX Item "ARC700-xmac"
! Tune for \s-1ARC700 CPU\s0 with \s-1XMAC\s0 block.
! .IP "\fB\s-1ARC725D\s0\fR" 4
  .IX Item "ARC725D"
! Tune for \s-1ARC725D CPU.\s0
! .IP "\fB\s-1ARC750D\s0\fR" 4
  .IX Item "ARC750D"
! Tune for \s-1ARC750D CPU.\s0
! .IP "\fBcore3\fR" 4
  .IX Item "core3"
! Tune for ARCv2 core3 type \s-1CPU.\s0  This option enable usage of
  \&\f(CW\*(C`dbnz\*(C'\fR instruction.
! .IP "\fBrelease31a\fR" 4
  .IX Item "release31a"
  Tune for ARC4x release 3.10a.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mmultcost=\fR\fInum\fR" 4
  .IX Item "-mmultcost=num"
  Cost to assume for a multiply instruction, with \fB4\fR being equal to a
  normal instruction.
! .IP "\fB\-munalign\-prob\-threshold=\fR\fIprobability\fR" 4
  .IX Item "-munalign-prob-threshold=probability"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are maintained for backward compatibility, but
  are now deprecated and will be removed in a future release:
! .IP "\fB\-margonaut\fR" 4
  .IX Item "-margonaut"
! Obsolete \s-1FPX.\s0
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP "\fB\-EB\fR" 4
  .IX Item "-EB"
  .PD
! Compile code for big-endian targets.  Use of these options is now
! deprecated.  Big-endian code is supported by configuring \s-1GCC\s0 to build
  \&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets,
  for which big endian is the default.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP "\fB\-EL\fR" 4
  .IX Item "-EL"
  .PD
! Compile code for little-endian targets.  Use of these options is now
! deprecated.  Little-endian code is supported by configuring \s-1GCC\s0 to build 
  \&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets,
  for which little endian is the default.
! .IP "\fB\-mbarrel_shifter\fR" 4
  .IX Item "-mbarrel_shifter"
  Replaced by \fB\-mbarrel\-shifter\fR.
! .IP "\fB\-mdpfp_compact\fR" 4
  .IX Item "-mdpfp_compact"
  Replaced by \fB\-mdpfp\-compact\fR.
! .IP "\fB\-mdpfp_fast\fR" 4
  .IX Item "-mdpfp_fast"
  Replaced by \fB\-mdpfp\-fast\fR.
! .IP "\fB\-mdsp_packa\fR" 4
  .IX Item "-mdsp_packa"
  Replaced by \fB\-mdsp\-packa\fR.
! .IP "\fB\-mEA\fR" 4
  .IX Item "-mEA"
  Replaced by \fB\-mea\fR.
! .IP "\fB\-mmac_24\fR" 4
  .IX Item "-mmac_24"
  Replaced by \fB\-mmac\-24\fR.
! .IP "\fB\-mmac_d16\fR" 4
  .IX Item "-mmac_d16"
  Replaced by \fB\-mmac\-d16\fR.
! .IP "\fB\-mspfp_compact\fR" 4
  .IX Item "-mspfp_compact"
  Replaced by \fB\-mspfp\-compact\fR.
! .IP "\fB\-mspfp_fast\fR" 4
  .IX Item "-mspfp_fast"
  Replaced by \fB\-mspfp\-fast\fR.
! .IP "\fB\-mtune=\fR\fIcpu\fR" 4
  .IX Item "-mtune=cpu"
  Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
! \&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fB\s-1ARC600\s0\fR,
! \&\fB\s-1ARC601\s0\fR, \fB\s-1ARC700\s0\fR and \fBARC700\-xmac\fR respectively.
! .IP "\fB\-multcost=\fR\fInum\fR" 4
  .IX Item "-multcost=num"
  Replaced by \fB\-mmultcost\fR.
  .PP
! \fI\s-1ARM\s0 Options\fR
  .IX Subsection "ARM Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1ARM\s0 port:
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
! Generate code for the specified \s-1ABI.\s0  Permissible values are: \fBapcs-gnu\fR,
! \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
! .IP "\fB\-mapcs\-frame\fR" 4
  .IX Item "-mapcs-frame"
! Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
  Standard for all functions, even if this is not strictly necessary for
  correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
  with this option causes the stack frames not to be generated for
  leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
  This option is deprecated.
! .IP "\fB\-mapcs\fR" 4
  .IX Item "-mapcs"
  This is a synonym for \fB\-mapcs\-frame\fR and is deprecated.
! .IP "\fB\-mthumb\-interwork\fR" 4
  .IX Item "-mthumb-interwork"
! Generate code that supports calling between the \s-1ARM\s0 and Thumb
  instruction sets.  Without this option, on pre\-v5 architectures, the
  two instruction sets cannot be reliably used inside one program.  The
  default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
! is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
  configurations this option is meaningless.
! .IP "\fB\-mno\-sched\-prolog\fR" 4
  .IX Item "-mno-sched-prolog"
  Prevent the reordering of instructions in the function prologue, or the
! merging of those instruction with the instructions in the function's
  body.  This means that all functions start with a recognizable set
  of instructions (or in fact one of a choice from a small set of
  different function prologues), and this information can be used to
  locate the start of functions inside an executable piece of code.  The
  default is \fB\-msched\-prolog\fR.
! .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
! library calls for floating-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating-point
! instructions, but still uses the soft-float calling conventions.
! \&\fBhard\fR allows generation of floating-point instructions
! and uses FPU-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard-float and soft-float ABIs are not link-compatible; you must
! compile your entire program with the same \s-1ABI,\s0 and link with a
  compatible set of libraries.
! .IP "\fB\-mgeneral\-regs\-only\fR" 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general-purpose registers.  This will prevent
! the compiler from using floating-point and Advanced \s-1SIMD\s0 registers but will not
  impose any restrictions on the assembler.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a processor running in little-endian mode.  This is
  the default for all standard configurations.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a processor running in big-endian mode; the default is
! to compile code for a little-endian processor.
! .IP "\fB\-mbe8\fR" 4
  .IX Item "-mbe8"
  .PD 0
! .IP "\fB\-mbe32\fR" 4
  .IX Item "-mbe32"
  .PD
! When linking a big-endian image select between \s-1BE8\s0 and \s-1BE32\s0 formats.
! The option has no effect for little-endian images and is ignored.  The
  default is dependent on the selected target architecture.  For ARMv6
! and later architectures the default is \s-1BE8,\s0 for older architectures
! the default is \s-1BE32.\s0  \s-1BE32\s0 format has been deprecated by \s-1ARM.\s0
! .IP "\fB\-march=\fR\fIname\fR[\fB+extension...\fR]" 4
  .IX Item "-march=name[+extension...]"
! This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  This option can be used in conjunction with or instead
  of the \fB\-mcpu=\fR option.
--- 21778,21966 ----
  This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
  the behavior when this is not set is equivalent to level \fB1\fR.
  .RE
! .IP \fB\-mtune=\fR\fIcpu\fR 4
  .IX Item "-mtune=cpu"
  Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
  by \fB\-mcpu=\fR.
  .Sp
  Supported values for \fIcpu\fR are
  .RS 4
! .IP \fBARC600\fR 4
  .IX Item "ARC600"
! Tune for ARC600 CPU.
! .IP \fBARC601\fR 4
  .IX Item "ARC601"
! Tune for ARC601 CPU.
! .IP \fBARC700\fR 4
  .IX Item "ARC700"
! Tune for ARC700 CPU with standard multiplier block.
! .IP \fBARC700\-xmac\fR 4
  .IX Item "ARC700-xmac"
! Tune for ARC700 CPU with XMAC block.
! .IP \fBARC725D\fR 4
  .IX Item "ARC725D"
! Tune for ARC725D CPU.
! .IP \fBARC750D\fR 4
  .IX Item "ARC750D"
! Tune for ARC750D CPU.
! .IP \fBcore3\fR 4
  .IX Item "core3"
! Tune for ARCv2 core3 type CPU.  This option enable usage of
  \&\f(CW\*(C`dbnz\*(C'\fR instruction.
! .IP \fBrelease31a\fR 4
  .IX Item "release31a"
  Tune for ARC4x release 3.10a.
  .RE
  .RS 4
  .RE
! .IP \fB\-mmultcost=\fR\fInum\fR 4
  .IX Item "-mmultcost=num"
  Cost to assume for a multiply instruction, with \fB4\fR being equal to a
  normal instruction.
! .IP \fB\-munalign\-prob\-threshold=\fR\fIprobability\fR 4
  .IX Item "-munalign-prob-threshold=probability"
  Does nothing.  Preserved for backward compatibility.
  .PP
  The following options are maintained for backward compatibility, but
  are now deprecated and will be removed in a future release:
! .IP \fB\-margonaut\fR 4
  .IX Item "-margonaut"
! Obsolete FPX.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP \fB\-EB\fR 4
  .IX Item "-EB"
  .PD
! Compile code for big\-endian targets.  Use of these options is now
! deprecated.  Big\-endian code is supported by configuring GCC to build
  \&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets,
  for which big endian is the default.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP \fB\-EL\fR 4
  .IX Item "-EL"
  .PD
! Compile code for little\-endian targets.  Use of these options is now
! deprecated.  Little\-endian code is supported by configuring GCC to build 
  \&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets,
  for which little endian is the default.
! .IP \fB\-mbarrel_shifter\fR 4
  .IX Item "-mbarrel_shifter"
  Replaced by \fB\-mbarrel\-shifter\fR.
! .IP \fB\-mdpfp_compact\fR 4
  .IX Item "-mdpfp_compact"
  Replaced by \fB\-mdpfp\-compact\fR.
! .IP \fB\-mdpfp_fast\fR 4
  .IX Item "-mdpfp_fast"
  Replaced by \fB\-mdpfp\-fast\fR.
! .IP \fB\-mdsp_packa\fR 4
  .IX Item "-mdsp_packa"
  Replaced by \fB\-mdsp\-packa\fR.
! .IP \fB\-mEA\fR 4
  .IX Item "-mEA"
  Replaced by \fB\-mea\fR.
! .IP \fB\-mmac_24\fR 4
  .IX Item "-mmac_24"
  Replaced by \fB\-mmac\-24\fR.
! .IP \fB\-mmac_d16\fR 4
  .IX Item "-mmac_d16"
  Replaced by \fB\-mmac\-d16\fR.
! .IP \fB\-mspfp_compact\fR 4
  .IX Item "-mspfp_compact"
  Replaced by \fB\-mspfp\-compact\fR.
! .IP \fB\-mspfp_fast\fR 4
  .IX Item "-mspfp_fast"
  Replaced by \fB\-mspfp\-fast\fR.
! .IP \fB\-mtune=\fR\fIcpu\fR 4
  .IX Item "-mtune=cpu"
  Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
! \&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fBARC600\fR,
! \&\fBARC601\fR, \fBARC700\fR and \fBARC700\-xmac\fR respectively.
! .IP \fB\-multcost=\fR\fInum\fR 4
  .IX Item "-multcost=num"
  Replaced by \fB\-mmultcost\fR.
  .PP
! \fIARM Options\fR
  .IX Subsection "ARM Options"
  .PP
! These \fB\-m\fR options are defined for the ARM port:
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
! Generate code for the specified ABI.  Permissible values are: \fBapcs\-gnu\fR,
! \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs\-linux\fR and \fBiwmmxt\fR.
! .IP \fB\-mapcs\-frame\fR 4
  .IX Item "-mapcs-frame"
! Generate a stack frame that is compliant with the ARM Procedure Call
  Standard for all functions, even if this is not strictly necessary for
  correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
  with this option causes the stack frames not to be generated for
  leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
  This option is deprecated.
! .IP \fB\-mapcs\fR 4
  .IX Item "-mapcs"
  This is a synonym for \fB\-mapcs\-frame\fR and is deprecated.
! .IP \fB\-mthumb\-interwork\fR 4
  .IX Item "-mthumb-interwork"
! Generate code that supports calling between the ARM and Thumb
  instruction sets.  Without this option, on pre\-v5 architectures, the
  two instruction sets cannot be reliably used inside one program.  The
  default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
! is generated when \fB\-mthumb\-interwork\fR is specified.  In AAPCS
  configurations this option is meaningless.
! .IP \fB\-mno\-sched\-prolog\fR 4
  .IX Item "-mno-sched-prolog"
  Prevent the reordering of instructions in the function prologue, or the
! merging of those instruction with the instructions in the function\*(Aqs
  body.  This means that all functions start with a recognizable set
  of instructions (or in fact one of a choice from a small set of
  different function prologues), and this information can be used to
  locate the start of functions inside an executable piece of code.  The
  default is \fB\-msched\-prolog\fR.
! .IP \fB\-mfloat\-abi=\fR\fIname\fR 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating\-point ABI to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes GCC to generate output containing
! library calls for floating\-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating\-point
! instructions, but still uses the soft\-float calling conventions.
! \&\fBhard\fR allows generation of floating\-point instructions
! and uses FPU\-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard\-float and soft\-float ABIs are not link\-compatible; you must
! compile your entire program with the same ABI, and link with a
  compatible set of libraries.
! .IP \fB\-mgeneral\-regs\-only\fR 4
  .IX Item "-mgeneral-regs-only"
! Generate code which uses only the general\-purpose registers.  This will prevent
! the compiler from using floating\-point and Advanced SIMD registers but will not
  impose any restrictions on the assembler.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a processor running in little\-endian mode.  This is
  the default for all standard configurations.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a processor running in big\-endian mode; the default is
! to compile code for a little\-endian processor.
! .IP \fB\-mbe8\fR 4
  .IX Item "-mbe8"
  .PD 0
! .IP \fB\-mbe32\fR 4
  .IX Item "-mbe32"
  .PD
! When linking a big\-endian image select between BE8 and BE32 formats.
! The option has no effect for little\-endian images and is ignored.  The
  default is dependent on the selected target architecture.  For ARMv6
! and later architectures the default is BE8, for older architectures
! the default is BE32.  BE32 format has been deprecated by ARM.
! .IP \fB\-march=\fR\fIname\fR[\fB+extension...\fR] 4
  .IX Item "-march=name[+extension...]"
! This specifies the name of the target ARM architecture.  GCC uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  This option can be used in conjunction with or instead
  of the \fB\-mcpu=\fR option.
*************** Most extension names are generically nam
*** 22072,22612 ****
  dependent upon the architecture to which it is applied.  For example,
  the \fB+simd\fR option can be applied to both \fBarmv7\-a\fR and
  \&\fBarmv8\-a\fR architectures, but will enable the original ARMv7\-A
! Advanced \s-1SIMD\s0 (Neon) extensions for \fBarmv7\-a\fR and the ARMv8\-A
  variant for \fBarmv8\-a\fR.
  .Sp
  The table below lists the supported extensions for each architecture.
  Architectures not mentioned do not support any extensions.
  .RS 4
! .IP "\fBarmv5te\fR" 4
  .IX Item "armv5te"
  .PD 0
! .IP "\fBarmv6\fR" 4
  .IX Item "armv6"
! .IP "\fBarmv6j\fR" 4
  .IX Item "armv6j"
! .IP "\fBarmv6k\fR" 4
  .IX Item "armv6k"
! .IP "\fBarmv6kz\fR" 4
  .IX Item "armv6kz"
! .IP "\fBarmv6t2\fR" 4
  .IX Item "armv6t2"
! .IP "\fBarmv6z\fR" 4
  .IX Item "armv6z"
! .IP "\fBarmv6zk\fR" 4
  .IX Item "armv6zk"
  .RS 4
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
  .PD
! The VFPv2 floating-point instructions.  The extension \fB+vfpv2\fR can be
  used as an alias for this extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7\fR" 4
  .IX Item "armv7"
  The common subset of the ARMv7\-A, ARMv7\-R and ARMv7\-M architectures.
  .RS 4
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv3 floating-point instructions, with 16 double-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
! for this extension.  Note that floating-point is not supported by the
  base ARMv7\-M architecture, but is compatible with both the ARMv7\-A and
  ARMv7\-R architectures.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7\-a\fR" 4
  .IX Item "armv7-a"
  .RS 4
  .PD 0
! .IP "\fB+mp\fR" 4
  .IX Item "+mp"
  .PD
  The multiprocessing extension.
! .IP "\fB+sec\fR" 4
  .IX Item "+sec"
  The security extension.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv3 floating-point instructions, with 16 double-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
  for this extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions.
  The extensions \fB+neon\fR and \fB+neon\-vfpv3\fR can be used as aliases
  for this extension.
! .IP "\fB+vfpv3\fR" 4
  .IX Item "+vfpv3"
! The VFPv3 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+vfpv3\-d16\-fp16\fR" 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating-point instructions, with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv3\-fp16\fR" 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating-point instructions, with 32 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv4\-d16\fR" 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating-point instructions, with 16 double-precision
  registers.
! .IP "\fB+vfpv4\fR" 4
  .IX Item "+vfpv4"
! The VFPv4 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+neon\-fp16\fR" 4
  .IX Item "+neon-fp16"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions, with
! the half-precision floating-point conversion operations.
! .IP "\fB+neon\-vfpv4\fR" 4
  .IX Item "+neon-vfpv4"
! The Advanced \s-1SIMD\s0 (Neon) v2 and the VFPv4 floating-point instructions.
! .IP "\fB+nosimd\fR" 4
  .IX Item "+nosimd"
! Disable the Advanced \s-1SIMD\s0 instructions (does not disable floating point).
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point and Advanced \s-1SIMD\s0 instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7ve\fR" 4
  .IX Item "armv7ve"
  The extended version of the ARMv7\-A architecture with support for
  virtualization.
  .RS 4
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv4 floating-point instructions, with 16 double-precision registers.
  The extension \fB+vfpv4\-d16\fR can be used as an alias for this extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The Advanced \s-1SIMD\s0 (Neon) v2 and the VFPv4 floating-point instructions.  The
  extension \fB+neon\-vfpv4\fR can be used as an alias for this extension.
! .IP "\fB+vfpv3\-d16\fR" 4
  .IX Item "+vfpv3-d16"
! The VFPv3 floating-point instructions, with 16 double-precision
  registers.
! .IP "\fB+vfpv3\fR" 4
  .IX Item "+vfpv3"
! The VFPv3 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+vfpv3\-d16\-fp16\fR" 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating-point instructions, with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv3\-fp16\fR" 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating-point instructions, with 32 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv4\-d16\fR" 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating-point instructions, with 16 double-precision
  registers.
! .IP "\fB+vfpv4\fR" 4
  .IX Item "+vfpv4"
! The VFPv4 floating-point instructions, with 32 double-precision
  registers.
! .IP "\fB+neon\fR" 4
  .IX Item "+neon"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions.
  The extension \fB+neon\-vfpv3\fR can be used as an alias for this extension.
! .IP "\fB+neon\-fp16\fR" 4
  .IX Item "+neon-fp16"
! The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions, with
! the half-precision floating-point conversion operations.
! .IP "\fB+nosimd\fR" 4
  .IX Item "+nosimd"
! Disable the Advanced \s-1SIMD\s0 instructions (does not disable floating point).
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point and Advanced \s-1SIMD\s0 instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8\-a\fR" 4
  .IX Item "armv8-a"
  .RS 4
  .PD 0
! .IP "\fB+crc\fR" 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (\s-1CRC\s0) instructions.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.1\-a\fR" 4
  .IX Item "armv8.1-a"
  .RS 4
  .PD 0
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
  .PD
! The ARMv8.1\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.2\-a\fR" 4
  .IX Item "armv8.2-a"
  .PD 0
! .IP "\fBarmv8.3\-a\fR" 4
  .IX Item "armv8.3-a"
  .RS 4
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+fp16fml\fR" 4
  .IX Item "+fp16fml"
! The half-precision floating-point fmla extension.  This also enables
! the half-precision floating-point extension and Advanced \s-1SIMD\s0 and
! floating-point instructions.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.1\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions.
! .IP "\fB+dotprod\fR" 4
  .IX Item "+dotprod"
! Enable the Dot Product extension.  This also enables Advanced \s-1SIMD\s0 instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.4\-a\fR" 4
  .IX Item "armv8.4-a"
  .RS 4
  .PD 0
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
! as the Dot Product extension and the half-precision floating-point fmla
  extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
  Dot Product extension.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions as well as the Dot Product extension.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+sb\fR" 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP "\fB+predres\fR" 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.5\-a\fR" 4
  .IX Item "armv8.5-a"
  .RS 4
  .PD 0
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
! as the Dot Product extension and the half-precision floating-point fmla
  extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
  Dot Product extension.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions as well as the Dot Product extension.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.6\-a\fR" 4
  .IX Item "armv8.6-a"
  .RS 4
  .PD 0
! .IP "\fB+fp16\fR" 4
  .IX Item "+fp16"
  .PD
! The half-precision floating-point data processing instructions.
! This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
! as the Dot Product extension and the half-precision floating-point fmla
  extension.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
  Dot Product extension.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
! floating-point instructions as well as the Dot Product extension.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
! .IP "\fB+i8mm\fR" 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+bf16\fR" 4
  .IX Item "+bf16"
! Brain half-precision floating-point instructions.
! This also enables Advanced \s-1SIMD\s0 and floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7\-r\fR" 4
  .IX Item "armv7-r"
  .RS 4
  .PD 0
! .IP "\fB+fp.sp\fR" 4
  .IX Item "+fp.sp"
  .PD
! The single-precision VFPv3 floating-point instructions.  The extension
  \&\fB+vfpv3xd\fR can be used as an alias for this extension.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The VFPv3 floating-point instructions with 16 double-precision registers.
  The extension +vfpv3\-d16 can be used as an alias for this extension.
! .IP "\fB+vfpv3xd\-d16\-fp16\fR" 4
  .IX Item "+vfpv3xd-d16-fp16"
! The single-precision VFPv3 floating-point instructions with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+vfpv3\-d16\-fp16\fR" 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating-point instructions with 16 double-precision
! registers and the half-precision floating-point conversion operations.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extension.
! .IP "\fB+idiv\fR" 4
  .IX Item "+idiv"
! The ARM-state integer division instructions.
! .IP "\fB+noidiv\fR" 4
  .IX Item "+noidiv"
! Disable the ARM-state integer division extension.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv7e\-m\fR" 4
  .IX Item "armv7e-m"
  .RS 4
  .PD 0
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
  .PD
! The single-precision VFPv4 floating-point instructions.
! .IP "\fB+fpv5\fR" 4
  .IX Item "+fpv5"
! The single-precision FPv5 floating-point instructions.
! .IP "\fB+fp.dp\fR" 4
  .IX Item "+fp.dp"
! The single\- and double-precision FPv5 floating-point instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extensions.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8.1\-m.main\fR" 4
  .IX Item "armv8.1-m.main"
  .RS 4
  .PD 0
! .IP "\fB+dsp\fR" 4
  .IX Item "+dsp"
  .PD
! The \s-1DSP\s0 instructions.
! .IP "\fB+mve\fR" 4
  .IX Item "+mve"
! The M\-Profile Vector Extension (\s-1MVE\s0) integer instructions.
! .IP "\fB+mve.fp\fR" 4
  .IX Item "+mve.fp"
! The M\-Profile Vector Extension (\s-1MVE\s0) integer and single precision
! floating-point instructions.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The single-precision floating-point instructions.
! .IP "\fB+fp.dp\fR" 4
  .IX Item "+fp.dp"
! The single\- and double-precision floating-point instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (\s-1CDE\s0) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
! .IP "\fB+pacbti\fR" 4
  .IX Item "+pacbti"
  Enable the Pointer Authentication and Branch Target Identification Extension.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8\-m.main\fR" 4
  .IX Item "armv8-m.main"
  .RS 4
  .PD 0
! .IP "\fB+dsp\fR" 4
  .IX Item "+dsp"
  .PD
! The \s-1DSP\s0 instructions.
! .IP "\fB+nodsp\fR" 4
  .IX Item "+nodsp"
! Disable the \s-1DSP\s0 extension.
! .IP "\fB+fp\fR" 4
  .IX Item "+fp"
! The single-precision floating-point instructions.
! .IP "\fB+fp.dp\fR" 4
  .IX Item "+fp.dp"
! The single\- and double-precision floating-point instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (\s-1CDE\s0) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
  .RE
  .RS 4
  .RE
! .IP "\fBarmv8\-r\fR" 4
  .IX Item "armv8-r"
  .RS 4
  .PD 0
! .IP "\fB+crc\fR" 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (\s-1CRC\s0) instructions.
! .IP "\fB+fp.sp\fR" 4
  .IX Item "+fp.sp"
! The single-precision FPv5 floating-point instructions.
! .IP "\fB+simd\fR" 4
  .IX Item "+simd"
! The ARMv8\-A Advanced \s-1SIMD\s0 and floating-point instructions.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP "\fB+nocrypto\fR" 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .Sp
! \&\fB\-march=native\fR causes the compiler to auto-detect the architecture
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto-detect
  is unsuccessful the option has no effect.
  .RE
! .IP "\fB\-mtune=\fR\fIname\fR" 4
  .IX Item "-mtune=name"
! This option specifies the name of the target \s-1ARM\s0 processor for
! which \s-1GCC\s0 should tune the performance of the code.
! For some \s-1ARM\s0 implementations better performance can be obtained by using
  this option.
  Permissible names are: \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR, \fBarm710t\fR,
  \&\fBarm720t\fR, \fBarm740t\fR, \fBstrongarm\fR, \fBstrongarm110\fR,
--- 22007,22547 ----
  dependent upon the architecture to which it is applied.  For example,
  the \fB+simd\fR option can be applied to both \fBarmv7\-a\fR and
  \&\fBarmv8\-a\fR architectures, but will enable the original ARMv7\-A
! Advanced SIMD (Neon) extensions for \fBarmv7\-a\fR and the ARMv8\-A
  variant for \fBarmv8\-a\fR.
  .Sp
  The table below lists the supported extensions for each architecture.
  Architectures not mentioned do not support any extensions.
  .RS 4
! .IP \fBarmv5te\fR 4
  .IX Item "armv5te"
  .PD 0
! .IP \fBarmv6\fR 4
  .IX Item "armv6"
! .IP \fBarmv6j\fR 4
  .IX Item "armv6j"
! .IP \fBarmv6k\fR 4
  .IX Item "armv6k"
! .IP \fBarmv6kz\fR 4
  .IX Item "armv6kz"
! .IP \fBarmv6t2\fR 4
  .IX Item "armv6t2"
! .IP \fBarmv6z\fR 4
  .IX Item "armv6z"
! .IP \fBarmv6zk\fR 4
  .IX Item "armv6zk"
  .RS 4
! .IP \fB+fp\fR 4
  .IX Item "+fp"
  .PD
! The VFPv2 floating\-point instructions.  The extension \fB+vfpv2\fR can be
  used as an alias for this extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7\fR 4
  .IX Item "armv7"
  The common subset of the ARMv7\-A, ARMv7\-R and ARMv7\-M architectures.
  .RS 4
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv3 floating\-point instructions, with 16 double\-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
! for this extension.  Note that floating\-point is not supported by the
  base ARMv7\-M architecture, but is compatible with both the ARMv7\-A and
  ARMv7\-R architectures.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7\-a\fR 4
  .IX Item "armv7-a"
  .RS 4
  .PD 0
! .IP \fB+mp\fR 4
  .IX Item "+mp"
  .PD
  The multiprocessing extension.
! .IP \fB+sec\fR 4
  .IX Item "+sec"
  The security extension.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv3 floating\-point instructions, with 16 double\-precision
  registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
  for this extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions.
  The extensions \fB+neon\fR and \fB+neon\-vfpv3\fR can be used as aliases
  for this extension.
! .IP \fB+vfpv3\fR 4
  .IX Item "+vfpv3"
! The VFPv3 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+vfpv3\-d16\-fp16\fR 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating\-point instructions, with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv3\-fp16\fR 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating\-point instructions, with 32 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv4\-d16\fR 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating\-point instructions, with 16 double\-precision
  registers.
! .IP \fB+vfpv4\fR 4
  .IX Item "+vfpv4"
! The VFPv4 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+neon\-fp16\fR 4
  .IX Item "+neon-fp16"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions, with
! the half\-precision floating\-point conversion operations.
! .IP \fB+neon\-vfpv4\fR 4
  .IX Item "+neon-vfpv4"
! The Advanced SIMD (Neon) v2 and the VFPv4 floating\-point instructions.
! .IP \fB+nosimd\fR 4
  .IX Item "+nosimd"
! Disable the Advanced SIMD instructions (does not disable floating point).
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point and Advanced SIMD instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7ve\fR 4
  .IX Item "armv7ve"
  The extended version of the ARMv7\-A architecture with support for
  virtualization.
  .RS 4
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv4 floating\-point instructions, with 16 double\-precision registers.
  The extension \fB+vfpv4\-d16\fR can be used as an alias for this extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The Advanced SIMD (Neon) v2 and the VFPv4 floating\-point instructions.  The
  extension \fB+neon\-vfpv4\fR can be used as an alias for this extension.
! .IP \fB+vfpv3\-d16\fR 4
  .IX Item "+vfpv3-d16"
! The VFPv3 floating\-point instructions, with 16 double\-precision
  registers.
! .IP \fB+vfpv3\fR 4
  .IX Item "+vfpv3"
! The VFPv3 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+vfpv3\-d16\-fp16\fR 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating\-point instructions, with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv3\-fp16\fR 4
  .IX Item "+vfpv3-fp16"
! The VFPv3 floating\-point instructions, with 32 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv4\-d16\fR 4
  .IX Item "+vfpv4-d16"
! The VFPv4 floating\-point instructions, with 16 double\-precision
  registers.
! .IP \fB+vfpv4\fR 4
  .IX Item "+vfpv4"
! The VFPv4 floating\-point instructions, with 32 double\-precision
  registers.
! .IP \fB+neon\fR 4
  .IX Item "+neon"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions.
  The extension \fB+neon\-vfpv3\fR can be used as an alias for this extension.
! .IP \fB+neon\-fp16\fR 4
  .IX Item "+neon-fp16"
! The Advanced SIMD (Neon) v1 and the VFPv3 floating\-point instructions, with
! the half\-precision floating\-point conversion operations.
! .IP \fB+nosimd\fR 4
  .IX Item "+nosimd"
! Disable the Advanced SIMD instructions (does not disable floating point).
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point and Advanced SIMD instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8\-a\fR 4
  .IX Item "armv8-a"
  .RS 4
  .PD 0
! .IP \fB+crc\fR 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (CRC) instructions.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.1\-a\fR 4
  .IX Item "armv8.1-a"
  .RS 4
  .PD 0
! .IP \fB+simd\fR 4
  .IX Item "+simd"
  .PD
! The ARMv8.1\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.2\-a\fR 4
  .IX Item "armv8.2-a"
  .PD 0
! .IP \fBarmv8.3\-a\fR 4
  .IX Item "armv8.3-a"
  .RS 4
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions.
! .IP \fB+fp16fml\fR 4
  .IX Item "+fp16fml"
! The half\-precision floating\-point fmla extension.  This also enables
! the half\-precision floating\-point extension and Advanced SIMD and
! floating\-point instructions.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.1\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions.
! .IP \fB+dotprod\fR 4
  .IX Item "+dotprod"
! Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.4\-a\fR 4
  .IX Item "armv8.4-a"
  .RS 4
  .PD 0
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions as well
! as the Dot Product extension and the half\-precision floating\-point fmla
  extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced SIMD and floating\-point instructions as well as the
  Dot Product extension.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions as well as the Dot Product extension.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+sb\fR 4
  .IX Item "+sb"
  Speculation Barrier Instruction.
! .IP \fB+predres\fR 4
  .IX Item "+predres"
  Execution and Data Prediction Restriction Instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.5\-a\fR 4
  .IX Item "armv8.5-a"
  .RS 4
  .PD 0
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions as well
! as the Dot Product extension and the half\-precision floating\-point fmla
  extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced SIMD and floating\-point instructions as well as the
  Dot Product extension.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions as well as the Dot Product extension.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.6\-a\fR 4
  .IX Item "armv8.6-a"
  .RS 4
  .PD 0
! .IP \fB+fp16\fR 4
  .IX Item "+fp16"
  .PD
! The half\-precision floating\-point data processing instructions.
! This also enables the Advanced SIMD and floating\-point instructions as well
! as the Dot Product extension and the half\-precision floating\-point fmla
  extension.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8.3\-A Advanced SIMD and floating\-point instructions as well as the
  Dot Product extension.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
! The cryptographic instructions.  This also enables the Advanced SIMD and
! floating\-point instructions as well as the Dot Product extension.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic extension.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
! .IP \fB+i8mm\fR 4
  .IX Item "+i8mm"
  8\-bit Integer Matrix Multiply instructions.
! This also enables Advanced SIMD and floating\-point instructions.
! .IP \fB+bf16\fR 4
  .IX Item "+bf16"
! Brain half\-precision floating\-point instructions.
! This also enables Advanced SIMD and floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7\-r\fR 4
  .IX Item "armv7-r"
  .RS 4
  .PD 0
! .IP \fB+fp.sp\fR 4
  .IX Item "+fp.sp"
  .PD
! The single\-precision VFPv3 floating\-point instructions.  The extension
  \&\fB+vfpv3xd\fR can be used as an alias for this extension.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The VFPv3 floating\-point instructions with 16 double\-precision registers.
  The extension +vfpv3\-d16 can be used as an alias for this extension.
! .IP \fB+vfpv3xd\-d16\-fp16\fR 4
  .IX Item "+vfpv3xd-d16-fp16"
! The single\-precision VFPv3 floating\-point instructions with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+vfpv3\-d16\-fp16\fR 4
  .IX Item "+vfpv3-d16-fp16"
! The VFPv3 floating\-point instructions with 16 double\-precision
! registers and the half\-precision floating\-point conversion operations.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extension.
! .IP \fB+idiv\fR 4
  .IX Item "+idiv"
! The ARM\-state integer division instructions.
! .IP \fB+noidiv\fR 4
  .IX Item "+noidiv"
! Disable the ARM\-state integer division extension.
  .RE
  .RS 4
  .RE
! .IP \fBarmv7e\-m\fR 4
  .IX Item "armv7e-m"
  .RS 4
  .PD 0
! .IP \fB+fp\fR 4
  .IX Item "+fp"
  .PD
! The single\-precision VFPv4 floating\-point instructions.
! .IP \fB+fpv5\fR 4
  .IX Item "+fpv5"
! The single\-precision FPv5 floating\-point instructions.
! .IP \fB+fp.dp\fR 4
  .IX Item "+fp.dp"
! The single\- and double\-precision FPv5 floating\-point instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extensions.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8.1\-m.main\fR 4
  .IX Item "armv8.1-m.main"
  .RS 4
  .PD 0
! .IP \fB+dsp\fR 4
  .IX Item "+dsp"
  .PD
! The DSP instructions.
! .IP \fB+mve\fR 4
  .IX Item "+mve"
! The M\-Profile Vector Extension (MVE) integer instructions.
! .IP \fB+mve.fp\fR 4
  .IX Item "+mve.fp"
! The M\-Profile Vector Extension (MVE) integer and single precision
! floating\-point instructions.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The single\-precision floating\-point instructions.
! .IP \fB+fp.dp\fR 4
  .IX Item "+fp.dp"
! The single\- and double\-precision floating\-point instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (CDE) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
! .IP \fB+pacbti\fR 4
  .IX Item "+pacbti"
  Enable the Pointer Authentication and Branch Target Identification Extension.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8\-m.main\fR 4
  .IX Item "armv8-m.main"
  .RS 4
  .PD 0
! .IP \fB+dsp\fR 4
  .IX Item "+dsp"
  .PD
! The DSP instructions.
! .IP \fB+nodsp\fR 4
  .IX Item "+nodsp"
! Disable the DSP extension.
! .IP \fB+fp\fR 4
  .IX Item "+fp"
! The single\-precision floating\-point instructions.
! .IP \fB+fp.dp\fR 4
  .IX Item "+fp.dp"
! The single\- and double\-precision floating\-point instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point extension.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (CDE) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7.
  .RE
  .RS 4
  .RE
! .IP \fBarmv8\-r\fR 4
  .IX Item "armv8-r"
  .RS 4
  .PD 0
! .IP \fB+crc\fR 4
  .IX Item "+crc"
  .PD
! The Cyclic Redundancy Check (CRC) instructions.
! .IP \fB+fp.sp\fR 4
  .IX Item "+fp.sp"
! The single\-precision FPv5 floating\-point instructions.
! .IP \fB+simd\fR 4
  .IX Item "+simd"
! The ARMv8\-A Advanced SIMD and floating\-point instructions.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
  The cryptographic instructions.
! .IP \fB+nocrypto\fR 4
  .IX Item "+nocrypto"
  Disable the cryptographic instructions.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disable the floating\-point, Advanced SIMD and cryptographic instructions.
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .Sp
! \&\fB\-march=native\fR causes the compiler to auto\-detect the architecture
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto\-detect
  is unsuccessful the option has no effect.
  .RE
! .IP \fB\-mtune=\fR\fIname\fR 4
  .IX Item "-mtune=name"
! This option specifies the name of the target ARM processor for
! which GCC should tune the performance of the code.
! For some ARM implementations better performance can be obtained by using
  this option.
  Permissible names are: \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR, \fBarm710t\fR,
  \&\fBarm720t\fR, \fBarm740t\fR, \fBstrongarm\fR, \fBstrongarm110\fR,
*************** Permissible names are: \fBarm7tdmi\fR, \
*** 22635,22666 ****
  \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR, \fBstar\-mc1\fR,
  \&\fBxgene1\fR.
  .Sp
! Additionally, this option can specify that \s-1GCC\s0 should tune the performance
  of the code for a big.LITTLE system.  Permissible names are:
  \&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a17.cortex\-a7\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a72.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
  \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR.
  .Sp
! \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
  performance for a blend of processors within architecture \fIarch\fR.
  The aim is to generate code that run well on the current most popular
  processors, balancing between optimizations that benefit some CPUs in the
  range, and avoiding performance pitfalls of other CPUs.  The effects of
! this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
  .Sp
  \&\fB\-mtune\fR permits the same extension options as \fB\-mcpu\fR, but
  the extension options do not affect the tuning of the generated code.
  .Sp
! \&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto-detect is
  unsuccessful the option has no effect.
! .IP "\fB\-mcpu=\fR\fIname\fR[\fB+extension...\fR]" 4
  .IX Item "-mcpu=name[+extension...]"
! This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
! to derive the name of the target \s-1ARM\s0 architecture (as if specified
! by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
  performance (as if specified by \fB\-mtune\fR).  Where this option
  is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
  those options take precedence over the appropriate part of this option.
--- 22570,22601 ----
  \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR, \fBstar\-mc1\fR,
  \&\fBxgene1\fR.
  .Sp
! Additionally, this option can specify that GCC should tune the performance
  of the code for a big.LITTLE system.  Permissible names are:
  \&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a17.cortex\-a7\fR,
  \&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
  \&\fBcortex\-a72.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
  \&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR.
  .Sp
! \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that GCC should tune the
  performance for a blend of processors within architecture \fIarch\fR.
  The aim is to generate code that run well on the current most popular
  processors, balancing between optimizations that benefit some CPUs in the
  range, and avoiding performance pitfalls of other CPUs.  The effects of
! this option may change in future GCC versions as CPU models come and go.
  .Sp
  \&\fB\-mtune\fR permits the same extension options as \fB\-mcpu\fR, but
  the extension options do not affect the tuning of the generated code.
  .Sp
! \&\fB\-mtune=native\fR causes the compiler to auto\-detect the CPU
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto\-detect is
  unsuccessful the option has no effect.
! .IP \fB\-mcpu=\fR\fIname\fR[\fB+extension...\fR] 4
  .IX Item "-mcpu=name[+extension...]"
! This specifies the name of the target ARM processor.  GCC uses this name
! to derive the name of the target ARM architecture (as if specified
! by \fB\-march\fR) and the ARM processor type for which to tune for
  performance (as if specified by \fB\-mtune\fR).  Where this option
  is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
  those options take precedence over the appropriate part of this option.
*************** Many of the supported CPUs implement opt
*** 22669,22687 ****
  extensions.  Where this is so the architectural extensions are
  normally enabled by default.  If implementations that lack the
  extension exist, then the extension syntax can be used to disable
! those extensions that have been omitted.  For floating-point and
! Advanced \s-1SIMD\s0 (Neon) instructions, the settings of the options
  \&\fB\-mfloat\-abi\fR and \fB\-mfpu\fR must also be considered:
! floating-point and Advanced \s-1SIMD\s0 instructions will only be used if
  \&\fB\-mfloat\-abi\fR is not set to \fBsoft\fR; and any setting of
  \&\fB\-mfpu\fR other than \fBauto\fR will override the available
! floating-point and \s-1SIMD\s0 extension instructions.
  .Sp
  For example, \fBcortex\-a9\fR can be found in three major
! configurations: integer only, with just a floating-point unit or with
! floating-point and Advanced \s-1SIMD.\s0  The default is to enable all the
  instructions, but the extensions \fB+nosimd\fR and \fB+nofp\fR can
! be used to disable just the \s-1SIMD\s0 or both the \s-1SIMD\s0 and floating-point
  instructions respectively.
  .Sp
  Permissible names for this option are the same as those for
--- 22604,22622 ----
  extensions.  Where this is so the architectural extensions are
  normally enabled by default.  If implementations that lack the
  extension exist, then the extension syntax can be used to disable
! those extensions that have been omitted.  For floating\-point and
! Advanced SIMD (Neon) instructions, the settings of the options
  \&\fB\-mfloat\-abi\fR and \fB\-mfpu\fR must also be considered:
! floating\-point and Advanced SIMD instructions will only be used if
  \&\fB\-mfloat\-abi\fR is not set to \fBsoft\fR; and any setting of
  \&\fB\-mfpu\fR other than \fBauto\fR will override the available
! floating\-point and SIMD extension instructions.
  .Sp
  For example, \fBcortex\-a9\fR can be found in three major
! configurations: integer only, with just a floating\-point unit or with
! floating\-point and Advanced SIMD.  The default is to enable all the
  instructions, but the extensions \fB+nosimd\fR and \fB+nofp\fR can
! be used to disable just the SIMD or both the SIMD and floating\-point
  instructions respectively.
  .Sp
  Permissible names for this option are the same as those for
*************** Permissible names for this option are th
*** 22689,22742 ****
  .Sp
  The following extension options are common to the listed CPUs:
  .RS 4
! .IP "\fB+nodsp\fR" 4
  .IX Item "+nodsp"
! Disable the \s-1DSP\s0 instructions on \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Also disable the M\-Profile Vector Extension (\s-1MVE\s0) integer and
! single precision floating-point instructions on
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP "\fB+nopacbti\fR" 4
  .IX Item "+nopacbti"
  Disable the Pointer Authentication and Branch Target Identification Extension
  on \fBcortex\-m52\fR and \fBcortex\-m85\fR.
! .IP "\fB+nomve\fR" 4
  .IX Item "+nomve"
! Disable the M\-Profile Vector Extension (\s-1MVE\s0) integer and single precision
! floating-point instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP "\fB+nomve.fp\fR" 4
  .IX Item "+nomve.fp"
! Disable the M\-Profile Vector Extension (\s-1MVE\s0) single precision floating-point
  instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (\s-1CDE\s0) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7 on \fBcortex\-m52\fR and \fBcortex\-m55\fR.
! .IP "\fB+nofp\fR" 4
  .IX Item "+nofp"
! Disables the floating-point instructions on \fBarm9e\fR,
  \&\fBarm946e\-s\fR, \fBarm966e\-s\fR, \fBarm968e\-s\fR, \fBarm10e\fR,
  \&\fBarm1020e\fR, \fBarm1022e\fR, \fBarm926ej\-s\fR,
  \&\fBarm1026ej\-s\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR,
  \&\fBcortex\-m4\fR, \fBcortex\-m7\fR, \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Disables the floating-point and \s-1SIMD\s0 instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR,
  \&\fBcortex\-a8\fR, \fBcortex\-a9\fR, \fBcortex\-a12\fR,
  \&\fBcortex\-a15\fR, \fBcortex\-a17\fR, \fBcortex\-a15.cortex\-a7\fR,
  \&\fBcortex\-a17.cortex\-a7\fR, \fBcortex\-a32\fR, \fBcortex\-a35\fR,
  \&\fBcortex\-a53\fR and \fBcortex\-a55\fR.
! .IP "\fB+nofp.dp\fR" 4
  .IX Item "+nofp.dp"
! Disables the double-precision component of the floating-point instructions
  on \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR, \fBcortex\-r52\fR,
  \&\fBcortex\-r52plus\fR and \fBcortex\-m7\fR.
! .IP "\fB+nosimd\fR" 4
  .IX Item "+nosimd"
! Disables the \s-1SIMD\s0 (but not floating-point) instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR
  and \fBcortex\-a9\fR.
! .IP "\fB+crypto\fR" 4
  .IX Item "+crypto"
  Enables the cryptographic instructions on \fBcortex\-a32\fR,
  \&\fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR, \fBcortex\-a57\fR,
--- 22624,22677 ----
  .Sp
  The following extension options are common to the listed CPUs:
  .RS 4
! .IP \fB+nodsp\fR 4
  .IX Item "+nodsp"
! Disable the DSP instructions on \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Also disable the M\-Profile Vector Extension (MVE) integer and
! single precision floating\-point instructions on
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP \fB+nopacbti\fR 4
  .IX Item "+nopacbti"
  Disable the Pointer Authentication and Branch Target Identification Extension
  on \fBcortex\-m52\fR and \fBcortex\-m85\fR.
! .IP \fB+nomve\fR 4
  .IX Item "+nomve"
! Disable the M\-Profile Vector Extension (MVE) integer and single precision
! floating\-point instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! .IP \fB+nomve.fp\fR 4
  .IX Item "+nomve.fp"
! Disable the M\-Profile Vector Extension (MVE) single precision floating\-point
  instructions on \fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
  .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4
  .IX Item "+cdecp0, +cdecp1, ... , +cdecp7"
! Enable the Custom Datapath Extension (CDE) on selected coprocessors according
  to the numbers given in the options in the range 0 to 7 on \fBcortex\-m52\fR and \fBcortex\-m55\fR.
! .IP \fB+nofp\fR 4
  .IX Item "+nofp"
! Disables the floating\-point instructions on \fBarm9e\fR,
  \&\fBarm946e\-s\fR, \fBarm966e\-s\fR, \fBarm968e\-s\fR, \fBarm10e\fR,
  \&\fBarm1020e\fR, \fBarm1022e\fR, \fBarm926ej\-s\fR,
  \&\fBarm1026ej\-s\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR,
  \&\fBcortex\-m4\fR, \fBcortex\-m7\fR, \fBcortex\-m33\fR, \fBcortex\-m35p\fR,
  \&\fBcortex\-m52\fR, \fBcortex\-m55\fR and \fBcortex\-m85\fR.
! Disables the floating\-point and SIMD instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR,
  \&\fBcortex\-a8\fR, \fBcortex\-a9\fR, \fBcortex\-a12\fR,
  \&\fBcortex\-a15\fR, \fBcortex\-a17\fR, \fBcortex\-a15.cortex\-a7\fR,
  \&\fBcortex\-a17.cortex\-a7\fR, \fBcortex\-a32\fR, \fBcortex\-a35\fR,
  \&\fBcortex\-a53\fR and \fBcortex\-a55\fR.
! .IP \fB+nofp.dp\fR 4
  .IX Item "+nofp.dp"
! Disables the double\-precision component of the floating\-point instructions
  on \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR, \fBcortex\-r52\fR,
  \&\fBcortex\-r52plus\fR and \fBcortex\-m7\fR.
! .IP \fB+nosimd\fR 4
  .IX Item "+nosimd"
! Disables the SIMD (but not floating\-point) instructions on
  \&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR
  and \fBcortex\-a9\fR.
! .IP \fB+crypto\fR 4
  .IX Item "+crypto"
  Enables the cryptographic instructions on \fBcortex\-a32\fR,
  \&\fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR, \fBcortex\-a57\fR,
*************** Enables the cryptographic instructions o
*** 22748,22754 ****
  .RS 4
  .Sp
  Additionally the \fBgeneric\-armv7\-a\fR pseudo target defaults to
! VFPv3 with 16 double-precision registers.  It supports the following
  extension options: \fBmp\fR, \fBsec\fR, \fBvfpv3\-d16\fR,
  \&\fBvfpv3\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3\-fp16\fR,
  \&\fBvfpv4\-d16\fR, \fBvfpv4\fR, \fBneon\fR, \fBneon\-vfpv3\fR,
--- 22683,22689 ----
  .RS 4
  .Sp
  Additionally the \fBgeneric\-armv7\-a\fR pseudo target defaults to
! VFPv3 with 16 double\-precision registers.  It supports the following
  extension options: \fBmp\fR, \fBsec\fR, \fBvfpv3\-d16\fR,
  \&\fBvfpv3\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3\-fp16\fR,
  \&\fBvfpv4\-d16\fR, \fBvfpv4\fR, \fBneon\fR, \fBneon\-vfpv3\fR,
*************** the extensions to \fB\-march=armv7\-a\fR
*** 22759,22772 ****
  equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
  See \fB\-mtune\fR for more information.
  .Sp
! \&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto-detect
  is unsuccessful the option has no effect.
  .RE
! .IP "\fB\-mfpu=\fR\fIname\fR" 4
  .IX Item "-mfpu=name"
! This specifies what floating-point hardware (or hardware emulation) is
  available on the target.  Permissible names are: \fBauto\fR, \fBvfpv2\fR,
  \&\fBvfpv3\fR,
  \&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
--- 22694,22707 ----
  equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
  See \fB\-mtune\fR for more information.
  .Sp
! \&\fB\-mcpu=native\fR causes the compiler to auto\-detect the CPU
  of the build computer.  At present, this feature is only supported on
! GNU/Linux, and not all architectures are recognized.  If the auto\-detect
  is unsuccessful the option has no effect.
  .RE
! .IP \fB\-mfpu=\fR\fIname\fR 4
  .IX Item "-mfpu=name"
! This specifies what floating\-point hardware (or hardware emulation) is
  available on the target.  Permissible names are: \fBauto\fR, \fBvfpv2\fR,
  \&\fBvfpv3\fR,
  \&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
*************** Note that \fBneon\fR is an alias for \fB
*** 22778,22808 ****
  is an alias for \fBvfpv2\fR.
  .Sp
  The setting \fBauto\fR is the default and is special.  It causes the
! compiler to select the floating-point and Advanced \s-1SIMD\s0 instructions
  based on the settings of \fB\-mcpu\fR and \fB\-march\fR.
  .Sp
! If the selected floating-point hardware includes the \s-1NEON\s0 extension
! (e.g. \fB\-mfpu=neon\fR), note that floating-point
! operations are not generated by \s-1GCC\s0's auto-vectorization pass unless
  \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
! because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE 754\s0 standard for
! floating-point arithmetic (in particular denormal values are treated as
! zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
  .Sp
! You can also set the fpu name at function level by using the \f(CW\*(C`target("fpu=")\*(C'\fR function attributes or pragmas.
! .IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
  .IX Item "-mfp16-format=name"
! Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
  Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
  the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
  defined.
! .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
  .IX Item "-mstructure-size-boundary=n"
  The sizes of all structures and unions are rounded up to a multiple
  of the number of bits set by this option.  Permissible values are 8, 32
! and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
  targeted toolchain the default value is 8.  A value of 64 is only allowed
! if the underlying \s-1ABI\s0 supports it.
  .Sp
  Specifying a larger number can produce faster, more efficient code, but
  can also increase the size of the program.  Different values are potentially
--- 22713,22743 ----
  is an alias for \fBvfpv2\fR.
  .Sp
  The setting \fBauto\fR is the default and is special.  It causes the
! compiler to select the floating\-point and Advanced SIMD instructions
  based on the settings of \fB\-mcpu\fR and \fB\-march\fR.
  .Sp
! If the selected floating\-point hardware includes the NEON extension
! (e.g. \fB\-mfpu=neon\fR), note that floating\-point
! operations are not generated by GCC\*(Aqs auto\-vectorization pass unless
  \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
! because NEON hardware does not fully implement the IEEE 754 standard for
! floating\-point arithmetic (in particular denormal values are treated as
! zero), so the use of NEON instructions may lead to a loss of precision.
  .Sp
! You can also set the fpu name at function level by using the \f(CWtarget("fpu=")\fR function attributes or pragmas.
! .IP \fB\-mfp16\-format=\fR\fIname\fR 4
  .IX Item "-mfp16-format=name"
! Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half\-precision floating\-point type.
  Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
  the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
  defined.
! .IP \fB\-mstructure\-size\-boundary=\fR\fIn\fR 4
  .IX Item "-mstructure-size-boundary=n"
  The sizes of all structures and unions are rounded up to a multiple
  of the number of bits set by this option.  Permissible values are 8, 32
! and 64.  The default value varies for different toolchains.  For the COFF
  targeted toolchain the default value is 8.  A value of 64 is only allowed
! if the underlying ABI supports it.
  .Sp
  Specifying a larger number can produce faster, more efficient code, but
  can also increase the size of the program.  Different values are potentially
*************** work with code or libraries compiled wit
*** 22811,22831 ****
  information using structures or unions.
  .Sp
  This option is deprecated.
! .IP "\fB\-mabort\-on\-noreturn\fR" 4
  .IX Item "-mabort-on-noreturn"
  Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
  \&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
  return.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 64\-megabyte addressing range of the offset-based
  version of subroutine call instruction.
  .Sp
  Even if this switch is enabled, not all function calls are turned
--- 22746,22766 ----
  information using structures or unions.
  .Sp
  This option is deprecated.
! .IP \fB\-mabort\-on\-noreturn\fR 4
  .IX Item "-mabort-on-noreturn"
  Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
  \&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
  return.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 64\-megabyte addressing range of the offset\-based
  version of subroutine call instruction.
  .Sp
  Even if this switch is enabled, not all function calls are turned
*************** placing the function calls within the sc
*** 22845,22872 ****
  long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
  the compiler generates code to handle function calls via function
  pointers.
! .IP "\fB\-msingle\-pic\-base\fR" 4
  .IX Item "-msingle-pic-base"
! Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
  .IX Item "-mpic-register=reg"
! Specify the register to be used for \s-1PIC\s0 addressing.
! For standard \s-1PIC\s0 base case, the default is any suitable register
! determined by compiler.  For single \s-1PIC\s0 base case, the default is
! \&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
  otherwise the default is \fBR10\fR.
! .IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
! at static link time.  This permits using PC-relative addressing
  operations to access data known to be in the data segment.  For
! non-VxWorks \s-1RTP\s0 targets, this option is enabled by default.  When
  disabled on such targets, it will enable \fB\-msingle\-pic\-base\fR by
  default.
! .IP "\fB\-mpoke\-function\-name\fR" 4
  .IX Item "-mpoke-function-name"
  Write the name of each function into the text section, directly
  preceding the function prologue.  The generated code is similar to this:
--- 22780,22807 ----
  long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
  the compiler generates code to handle function calls via function
  pointers.
! .IP \fB\-msingle\-pic\-base\fR 4
  .IX Item "-msingle-pic-base"
! Treat the register used for PIC addressing as read\-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP \fB\-mpic\-register=\fR\fIreg\fR 4
  .IX Item "-mpic-register=reg"
! Specify the register to be used for PIC addressing.
! For standard PIC base case, the default is any suitable register
! determined by compiler.  For single PIC base case, the default is
! \&\fBR9\fR if target is EABI based or stack\-checking is enabled,
  otherwise the default is \fBR10\fR.
! .IP \fB\-mpic\-data\-is\-text\-relative\fR 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
! at static link time.  This permits using PC\-relative addressing
  operations to access data known to be in the data segment.  For
! non\-VxWorks RTP targets, this option is enabled by default.  When
  disabled on such targets, it will enable \fB\-msingle\-pic\-base\fR by
  default.
! .IP \fB\-mpoke\-function\-name\fR 4
  .IX Item "-mpoke-function-name"
  Write the name of each function into the text section, directly
  preceding the function prologue.  The generated code is similar to this:
*************** When performing a stack backtrace, code
*** 22888,22989 ****
  location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
  there is a function name embedded immediately preceding this location
  and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
! .IP "\fB\-mthumb\fR" 4
  .IX Item "-mthumb"
  .PD 0
! .IP "\fB\-marm\fR" 4
  .IX Item "-marm"
  .PD
! Select between generating code that executes in \s-1ARM\s0 and Thumb
  states.  The default for most configurations is to generate code
! that executes in \s-1ARM\s0 state, but the default can be changed by
! configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
  configure option.
  .Sp
! You can also override the \s-1ARM\s0 and Thumb mode for each function
! by using the \f(CW\*(C`target("thumb")\*(C'\fR and \f(CW\*(C`target("arm")\*(C'\fR function attributes or pragmas.
! .IP "\fB\-mflip\-thumb\fR" 4
  .IX Item "-mflip-thumb"
  Switch ARM/Thumb modes on alternating functions.
  This option is provided for regression testing of mixed Thumb/ARM code
  generation, and is not intended for ordinary use in compiling code.
! .IP "\fB\-mtpcs\-frame\fR" 4
  .IX Item "-mtpcs-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
! Standard for all non-leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
! .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
  .IX Item "-mtpcs-leaf-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
  Standard for all leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
! .IP "\fB\-mcallee\-super\-interworking\fR" 4
  .IX Item "-mcallee-super-interworking"
! Gives all externally visible functions in the file being compiled an \s-1ARM\s0
  instruction set header which switches to Thumb mode before executing the
  rest of the function.  This allows these functions to be called from
! non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
  because interworking is enabled by default.
! .IP "\fB\-mcaller\-super\-interworking\fR" 4
  .IX Item "-mcaller-super-interworking"
  Allows calls via function pointers (including virtual functions) to
  execute correctly regardless of whether the target code has been
  compiled for interworking or not.  There is a small overhead in the cost
  of executing a function pointer if this option is enabled.  This option
! is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
  by default.
! .IP "\fB\-mtp=\fR\fIname\fR" 4
  .IX Item "-mtp=name"
  Specify the access model for the thread local storage pointer.  The model
  \&\fBsoft\fR generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR.  Other accepted
  models are \fBtpidrurw\fR, \fBtpidruro\fR and \fBtpidrprw\fR which fetch
  the thread pointer from the corresponding system register directly
  (supported from the arm6k architecture and later).  These system registers
! are accessed through the \s-1CP15\s0 co-processor interface and the argument
  \&\fBcp15\fR is also accepted as a convenience alias of \fBtpidruro\fR.
  The argument \fBauto\fR uses the best available method for the selected
  processor.  The default setting is \fBauto\fR.
! .IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
  .IX Item "-mtls-dialect=dialect"
  Specify the dialect to use for accessing thread local storage.  Two
  \&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
! \&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
! local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
! selects the \s-1GNU\s0 descriptor scheme, which provides better performance
! for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
  the original scheme, but does require new assembler, linker and
! library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
  this option and always use the original scheme.
! .IP "\fB\-mword\-relocations\fR" 4
  .IX Item "-mword-relocations"
! Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
  This is enabled by default on targets (uClinux, SymbianOS) where the runtime
  loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
  is specified. This option conflicts with \fB\-mslow\-flash\-data\fR.
! .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
  .IX Item "-mfix-cortex-m3-ldrd"
  Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
  with overlapping destination and base registers are used.  This option avoids
  generating these instructions.  This option is enabled by default when
  \&\fB\-mcpu=cortex\-m3\fR is specified.
! .IP "\fB\-mfix\-cortex\-a57\-aes\-1742098\fR" 4
  .IX Item "-mfix-cortex-a57-aes-1742098"
  .PD 0
! .IP "\fB\-mno\-fix\-cortex\-a57\-aes\-1742098\fR" 4
  .IX Item "-mno-fix-cortex-a57-aes-1742098"
! .IP "\fB\-mfix\-cortex\-a72\-aes\-1655431\fR" 4
  .IX Item "-mfix-cortex-a72-aes-1655431"
! .IP "\fB\-mno\-fix\-cortex\-a72\-aes\-1655431\fR" 4
  .IX Item "-mno-fix-cortex-a72-aes-1655431"
  .PD
  Enable (disable) mitigation for an erratum on Cortex\-A57 and
! Cortex\-A72 that affects the \s-1AES\s0 cryptographic instructions.  This
  option is enabled by default when either \fB\-mcpu=cortex\-a57\fR or
  \&\fB\-mcpu=cortex\-a72\fR is specified.
! .IP "\fB\-munaligned\-access\fR" 4
  .IX Item "-munaligned-access"
  .PD 0
! .IP "\fB\-mno\-unaligned\-access\fR" 4
  .IX Item "-mno-unaligned-access"
  .PD
  Enables (or disables) reading and writing of 16\- and 32\- bit values
--- 22823,22924 ----
  location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
  there is a function name embedded immediately preceding this location
  and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
! .IP \fB\-mthumb\fR 4
  .IX Item "-mthumb"
  .PD 0
! .IP \fB\-marm\fR 4
  .IX Item "-marm"
  .PD
! Select between generating code that executes in ARM and Thumb
  states.  The default for most configurations is to generate code
! that executes in ARM state, but the default can be changed by
! configuring GCC with the \fB\-\-with\-mode=\fR\fIstate\fR
  configure option.
  .Sp
! You can also override the ARM and Thumb mode for each function
! by using the \f(CWtarget("thumb")\fR and \f(CWtarget("arm")\fR function attributes or pragmas.
! .IP \fB\-mflip\-thumb\fR 4
  .IX Item "-mflip-thumb"
  Switch ARM/Thumb modes on alternating functions.
  This option is provided for regression testing of mixed Thumb/ARM code
  generation, and is not intended for ordinary use in compiling code.
! .IP \fB\-mtpcs\-frame\fR 4
  .IX Item "-mtpcs-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
! Standard for all non\-leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
! .IP \fB\-mtpcs\-leaf\-frame\fR 4
  .IX Item "-mtpcs-leaf-frame"
  Generate a stack frame that is compliant with the Thumb Procedure Call
  Standard for all leaf functions.  (A leaf function is one that does
  not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
! .IP \fB\-mcallee\-super\-interworking\fR 4
  .IX Item "-mcallee-super-interworking"
! Gives all externally visible functions in the file being compiled an ARM
  instruction set header which switches to Thumb mode before executing the
  rest of the function.  This allows these functions to be called from
! non\-interworking code.  This option is not valid in AAPCS configurations
  because interworking is enabled by default.
! .IP \fB\-mcaller\-super\-interworking\fR 4
  .IX Item "-mcaller-super-interworking"
  Allows calls via function pointers (including virtual functions) to
  execute correctly regardless of whether the target code has been
  compiled for interworking or not.  There is a small overhead in the cost
  of executing a function pointer if this option is enabled.  This option
! is not valid in AAPCS configurations because interworking is enabled
  by default.
! .IP \fB\-mtp=\fR\fIname\fR 4
  .IX Item "-mtp=name"
  Specify the access model for the thread local storage pointer.  The model
  \&\fBsoft\fR generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR.  Other accepted
  models are \fBtpidrurw\fR, \fBtpidruro\fR and \fBtpidrprw\fR which fetch
  the thread pointer from the corresponding system register directly
  (supported from the arm6k architecture and later).  These system registers
! are accessed through the CP15 co\-processor interface and the argument
  \&\fBcp15\fR is also accepted as a convenience alias of \fBtpidruro\fR.
  The argument \fBauto\fR uses the best available method for the selected
  processor.  The default setting is \fBauto\fR.
! .IP \fB\-mtls\-dialect=\fR\fIdialect\fR 4
  .IX Item "-mtls-dialect=dialect"
  Specify the dialect to use for accessing thread local storage.  Two
  \&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
! \&\fBgnu\fR dialect selects the original GNU scheme for supporting
! local and global dynamic TLS models.  The \fBgnu2\fR dialect
! selects the GNU descriptor scheme, which provides better performance
! for shared libraries.  The GNU descriptor scheme is compatible with
  the original scheme, but does require new assembler, linker and
! library support.  Initial and local exec TLS models are unaffected by
  this option and always use the original scheme.
! .IP \fB\-mword\-relocations\fR 4
  .IX Item "-mword-relocations"
! Only generate absolute relocations on word\-sized values (i.e. R_ARM_ABS32).
  This is enabled by default on targets (uClinux, SymbianOS) where the runtime
  loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
  is specified. This option conflicts with \fB\-mslow\-flash\-data\fR.
! .IP \fB\-mfix\-cortex\-m3\-ldrd\fR 4
  .IX Item "-mfix-cortex-m3-ldrd"
  Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
  with overlapping destination and base registers are used.  This option avoids
  generating these instructions.  This option is enabled by default when
  \&\fB\-mcpu=cortex\-m3\fR is specified.
! .IP \fB\-mfix\-cortex\-a57\-aes\-1742098\fR 4
  .IX Item "-mfix-cortex-a57-aes-1742098"
  .PD 0
! .IP \fB\-mno\-fix\-cortex\-a57\-aes\-1742098\fR 4
  .IX Item "-mno-fix-cortex-a57-aes-1742098"
! .IP \fB\-mfix\-cortex\-a72\-aes\-1655431\fR 4
  .IX Item "-mfix-cortex-a72-aes-1655431"
! .IP \fB\-mno\-fix\-cortex\-a72\-aes\-1655431\fR 4
  .IX Item "-mno-fix-cortex-a72-aes-1655431"
  .PD
  Enable (disable) mitigation for an erratum on Cortex\-A57 and
! Cortex\-A72 that affects the AES cryptographic instructions.  This
  option is enabled by default when either \fB\-mcpu=cortex\-a57\fR or
  \&\fB\-mcpu=cortex\-a72\fR is specified.
! .IP \fB\-munaligned\-access\fR 4
  .IX Item "-munaligned-access"
  .PD 0
! .IP \fB\-mno\-unaligned\-access\fR 4
  .IX Item "-mno-unaligned-access"
  .PD
  Enables (or disables) reading and writing of 16\- and 32\- bit values
*************** ARMv8\-M Baseline architectures, and ena
*** 22993,23085 ****
  architectures.  If unaligned access is not enabled then words in packed
  data structures are accessed a byte at a time.
  .Sp
! The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
  generated object file to either true or false, depending upon the
  setting of this option.  If unaligned access is enabled then the
  preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
  defined.
! .IP "\fB\-mneon\-for\-64bits\fR" 4
  .IX Item "-mneon-for-64bits"
  This option is deprecated and has no effect.
! .IP "\fB\-mslow\-flash\-data\fR" 4
  .IX Item "-mslow-flash-data"
  Assume loading data from flash is slower than fetching instruction.
  Therefore literal load is minimized for better performance.
  This option is only supported when compiling for ARMv7 M\-profile and
  off by default. It conflicts with \fB\-mword\-relocations\fR.
! .IP "\fB\-masm\-syntax\-unified\fR" 4
  .IX Item "-masm-syntax-unified"
  Assume inline assembler is using unified asm syntax.  The default is
  currently off which implies divided syntax.  This option has no impact
! on Thumb2. However, this may change in future releases of \s-1GCC.\s0
  Divided syntax should be considered deprecated.
! .IP "\fB\-mrestrict\-it\fR" 4
  .IX Item "-mrestrict-it"
! Restricts generation of \s-1IT\s0 blocks to conform to the rules of ARMv8\-A.
! \&\s-1IT\s0 blocks can only contain a single 16\-bit instruction from a select
  set of instructions. This option is on by default for ARMv8\-A Thumb mode.
! .IP "\fB\-mprint\-tune\-info\fR" 4
  .IX Item "-mprint-tune-info"
! Print \s-1CPU\s0 tuning information as comment in assembler file.  This is
  an option used only for regression testing of the compiler and not
  intended for ordinary use in compiling code.  This option is disabled
  by default.
! .IP "\fB\-mverbose\-cost\-dump\fR" 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP "\fB\-mpure\-code\fR" 4
  .IX Item "-mpure-code"
  Do not allow constant data to be placed in code sections.
! Additionally, when compiling for \s-1ELF\s0 object format give all text sections the
! \&\s-1ELF\s0 processor-specific section attribute \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR.  This option
! is only available when generating non-pic code for M\-profile targets.
! .IP "\fB\-mcmse\fR" 4
  .IX Item "-mcmse"
! Generate secure code as per the \*(L"ARMv8\-M Security Extensions: Requirements on
! Development Tools Engineering Specification\*(R", which can be found on
  <\fBhttps://developer.arm.com/documentation/ecm0359818/latest/\fR>.
! .IP "\fB\-mfix\-cmse\-cve\-2021\-35465\fR" 4
  .IX Item "-mfix-cmse-cve-2021-35465"
  Mitigate against a potential security issue with the \f(CW\*(C`VLLDM\*(C'\fR instruction
! in some M\-profile devices when using \s-1CMSE\s0 (\s-1CVE\-2021\-365465\s0).  This option is
  enabled by default when the option \fB\-mcpu=\fR is used with
  \&\f(CW\*(C`cortex\-m33\*(C'\fR, \f(CW\*(C`cortex\-m35p\*(C'\fR, \f(CW\*(C`cortex\-m52\*(C'\fR, \f(CW\*(C`cortex\-m55\*(C'\fR,
  \&\f(CW\*(C`cortex\-m85\*(C'\fR or \f(CW\*(C`star\-mc1\*(C'\fR. The option \fB\-mno\-fix\-cmse\-cve\-2021\-35465\fR
  can be used to disable the mitigation.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
  locations are \fBglobal\fR for a global canary or \fBtls\fR for a
! canary accessible via the \s-1TLS\s0 register. The option
  \&\fB\-mstack\-protector\-guard\-offset=\fR is for use with
! \&\fB\-fstack\-protector\-guard=tls\fR and not for use in user-land code.
! .IP "\fB\-mfdpic\fR" 4
  .IX Item "-mfdpic"
  .PD 0
! .IP "\fB\-mno\-fdpic\fR" 4
  .IX Item "-mno-fdpic"
  .PD
! Select the \s-1FDPIC ABI,\s0 which uses 64\-bit function descriptors to
  represent pointers to functions.  When the compiler is configured for
  \&\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR targets, this option is on by default
  and implies \fB\-fPIE\fR if none of the PIC/PIE\-related options is
! provided.  On other targets, it only enables the FDPIC-specific code
  generation features, and the user should explicitly provide the
  PIC/PIE\-related options as needed.
  .Sp
  Note that static linking is not supported because it would still
! involve the dynamic linker when the program self-relocates.  If such
  behavior is acceptable, use \-static and \-Wl,\-dynamic\-linker options.
  .Sp
  The opposite \fB\-mno\-fdpic\fR option is useful (and required) to
  build the Linux kernel using the same (\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR)
  toolchain as the one used to build the userland programs.
! .IP "\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB][+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR" 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf][+bti]|bti[+pac-ret[+leaf]]"
  Enable branch protection features (armv8.1\-m.main only).
  \&\fBnone\fR generate code without branch protection or return address
--- 22928,23020 ----
  architectures.  If unaligned access is not enabled then words in packed
  data structures are accessed a byte at a time.
  .Sp
! The ARM attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
  generated object file to either true or false, depending upon the
  setting of this option.  If unaligned access is enabled then the
  preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
  defined.
! .IP \fB\-mneon\-for\-64bits\fR 4
  .IX Item "-mneon-for-64bits"
  This option is deprecated and has no effect.
! .IP \fB\-mslow\-flash\-data\fR 4
  .IX Item "-mslow-flash-data"
  Assume loading data from flash is slower than fetching instruction.
  Therefore literal load is minimized for better performance.
  This option is only supported when compiling for ARMv7 M\-profile and
  off by default. It conflicts with \fB\-mword\-relocations\fR.
! .IP \fB\-masm\-syntax\-unified\fR 4
  .IX Item "-masm-syntax-unified"
  Assume inline assembler is using unified asm syntax.  The default is
  currently off which implies divided syntax.  This option has no impact
! on Thumb2. However, this may change in future releases of GCC.
  Divided syntax should be considered deprecated.
! .IP \fB\-mrestrict\-it\fR 4
  .IX Item "-mrestrict-it"
! Restricts generation of IT blocks to conform to the rules of ARMv8\-A.
! IT blocks can only contain a single 16\-bit instruction from a select
  set of instructions. This option is on by default for ARMv8\-A Thumb mode.
! .IP \fB\-mprint\-tune\-info\fR 4
  .IX Item "-mprint-tune-info"
! Print CPU tuning information as comment in assembler file.  This is
  an option used only for regression testing of the compiler and not
  intended for ordinary use in compiling code.  This option is disabled
  by default.
! .IP \fB\-mverbose\-cost\-dump\fR 4
  .IX Item "-mverbose-cost-dump"
  Enable verbose cost model dumping in the debug dump files.  This option is
  provided for use in debugging the compiler.
! .IP \fB\-mpure\-code\fR 4
  .IX Item "-mpure-code"
  Do not allow constant data to be placed in code sections.
! Additionally, when compiling for ELF object format give all text sections the
! ELF processor\-specific section attribute \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR.  This option
! is only available when generating non\-pic code for M\-profile targets.
! .IP \fB\-mcmse\fR 4
  .IX Item "-mcmse"
! Generate secure code as per the "ARMv8\-M Security Extensions: Requirements on
! Development Tools Engineering Specification", which can be found on
  <\fBhttps://developer.arm.com/documentation/ecm0359818/latest/\fR>.
! .IP \fB\-mfix\-cmse\-cve\-2021\-35465\fR 4
  .IX Item "-mfix-cmse-cve-2021-35465"
  Mitigate against a potential security issue with the \f(CW\*(C`VLLDM\*(C'\fR instruction
! in some M\-profile devices when using CMSE (CVE\-2021\-365465).  This option is
  enabled by default when the option \fB\-mcpu=\fR is used with
  \&\f(CW\*(C`cortex\-m33\*(C'\fR, \f(CW\*(C`cortex\-m35p\*(C'\fR, \f(CW\*(C`cortex\-m52\*(C'\fR, \f(CW\*(C`cortex\-m55\*(C'\fR,
  \&\f(CW\*(C`cortex\-m85\*(C'\fR or \f(CW\*(C`star\-mc1\*(C'\fR. The option \fB\-mno\-fix\-cmse\-cve\-2021\-35465\fR
  can be used to disable the mitigation.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
  locations are \fBglobal\fR for a global canary or \fBtls\fR for a
! canary accessible via the TLS register. The option
  \&\fB\-mstack\-protector\-guard\-offset=\fR is for use with
! \&\fB\-fstack\-protector\-guard=tls\fR and not for use in user\-land code.
! .IP \fB\-mfdpic\fR 4
  .IX Item "-mfdpic"
  .PD 0
! .IP \fB\-mno\-fdpic\fR 4
  .IX Item "-mno-fdpic"
  .PD
! Select the FDPIC ABI, which uses 64\-bit function descriptors to
  represent pointers to functions.  When the compiler is configured for
  \&\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR targets, this option is on by default
  and implies \fB\-fPIE\fR if none of the PIC/PIE\-related options is
! provided.  On other targets, it only enables the FDPIC\-specific code
  generation features, and the user should explicitly provide the
  PIC/PIE\-related options as needed.
  .Sp
  Note that static linking is not supported because it would still
! involve the dynamic linker when the program self\-relocates.  If such
  behavior is acceptable, use \-static and \-Wl,\-dynamic\-linker options.
  .Sp
  The opposite \fB\-mno\-fdpic\fR option is useful (and required) to
  build the Linux kernel using the same (\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR)
  toolchain as the one used to build the userland programs.
! .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB][+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR 4
  .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf][+bti]|bti[+pac-ret[+leaf]]"
  Enable branch protection features (armv8.1\-m.main only).
  \&\fBnone\fR generate code without branch protection or return address
*************** set to its standard level, which is to s
*** 23091,23108 ****
  the return address to memory.
  \&\fBleaf\fR When return address signing is enabled, also sign leaf
  functions even if they do not write the return address to memory.
! +\fBbti\fR Add landing-pad instructions at the permitted targets of
  indirect branch instructions.
  .Sp
  If the \fB+pacbti\fR architecture extension is not enabled, then all
  branch protection and return address signing operations are
  constrained to use only the instructions defined in the
! architectural-NOP space. The generated code will remain
! backwards-compatible with earlier versions of the architecture, but
  the additional security can be enabled at run time on processors that
! support the \fB\s-1PACBTI\s0\fR extension.
  .Sp
! Branch target enforcement using \s-1BTI\s0 can only be enabled at runtime if
  all code in the application has been compiled with at least
  \&\fB\-mbranch\-protection=bti\fR.
  .Sp
--- 23026,23043 ----
  the return address to memory.
  \&\fBleaf\fR When return address signing is enabled, also sign leaf
  functions even if they do not write the return address to memory.
! +\fBbti\fR Add landing\-pad instructions at the permitted targets of
  indirect branch instructions.
  .Sp
  If the \fB+pacbti\fR architecture extension is not enabled, then all
  branch protection and return address signing operations are
  constrained to use only the instructions defined in the
! architectural\-NOP space. The generated code will remain
! backwards\-compatible with earlier versions of the architecture, but
  the additional security can be enabled at run time on processors that
! support the \fBPACBTI\fR extension.
  .Sp
! Branch target enforcement using BTI can only be enabled at runtime if
  all code in the application has been compiled with at least
  \&\fB\-mbranch\-protection=bti\fR.
  .Sp
*************** or later.
*** 23112,23232 ****
  The default is to generate code without branch protection or return
  address signing.
  .PP
! \fI\s-1AVR\s0 Options\fR
  .IX Subsection "AVR Options"
  .PP
! These options are defined for \s-1AVR\s0 implementations:
! .IP "\fB\-mmcu=\fR\fImcu\fR" 4
  .IX Item "-mmcu=mcu"
! Specify the \s-1AVR\s0 instruction set architecture (\s-1ISA\s0) or device type.
  The default for this option is \f(CW\*(C`avr2\*(C'\fR.
  .Sp
! The following \s-1AVR\s0 devices and ISAs are supported.
  \&\fINote:\fR A complete device support consists of
! startup code \f(CW\*(C`crt\f(CImcu\f(CW.o\*(C'\fR, a device header \f(CW\*(C`avr/io*.h\*(C'\fR,
! a device library \f(CW\*(C`lib\f(CImcu\f(CW.a\*(C'\fR and a
! device-specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) file
! \&\f(CW\*(C`specs\-\f(CImcu\f(CW\*(C'\fR. Only the latter is provided by the compiler
! according the supported \f(CW\*(C`\f(CImcu\f(CW\*(C'\fRs below.  The rest is supported
! by AVR-LibC (\f(CW\*(C`https://www.nongnu.org/avr\-libc/\*(C'\fR), or by means of
  \&\f(CW\*(C`atpack\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#atpack\*(C'\fR) files
  from the hardware manufacturer.
  .RS 4
  .ie n .IP """avr2""" 4
! .el .IP "\f(CWavr2\fR" 4
  .IX Item "avr2"
! \&\*(L"Classic\*(R" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
  .ie n .IP """avr25""" 4
! .el .IP "\f(CWavr25\fR" 4
  .IX Item "avr25"
! \&\*(L"Classic\*(R" devices with up to 8 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
  .ie n .IP """avr3""" 4
! .el .IP "\f(CWavr3\fR" 4
  .IX Item "avr3"
! \&\*(L"Classic\*(R" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`at76c711\*(C'\fR, \f(CW\*(C`at43usb355\*(C'\fR.
  .ie n .IP """avr31""" 4
! .el .IP "\f(CWavr31\fR" 4
  .IX Item "avr31"
! \&\*(L"Classic\*(R" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
  .ie n .IP """avr35""" 4
! .el .IP "\f(CWavr35\fR" 4
  .IX Item "avr35"
! \&\*(L"Classic\*(R" devices with 16 KiB up to 64 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR.
  .ie n .IP """avr4""" 4
! .el .IP "\f(CWavr4\fR" 4
  .IX Item "avr4"
! \&\*(L"Enhanced\*(R" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
  .ie n .IP """avr5""" 4
! .el .IP "\f(CWavr5\fR" 4
  .IX Item "avr5"
! \&\*(L"Enhanced\*(R" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega324pb\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`ata5787\*(C'\fR, \f(CW\*(C`ata5835\*(C'\fR, \f(CW\*(C`ata5700m322\*(C'\fR, \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
  .ie n .IP """avr51""" 4
! .el .IP "\f(CWavr51\fR" 4
  .IX Item "avr51"
! \&\*(L"Enhanced\*(R" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
  .ie n .IP """avr6""" 4
! .el .IP "\f(CWavr6\fR" 4
  .IX Item "avr6"
! \&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC,\s0 i.e. with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR.
  .ie n .IP """avrxmega2""" 4
! .el .IP "\f(CWavrxmega2\fR" 4
  .IX Item "avrxmega2"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
! .el .IP "\f(CWavrxmega3\fR" 4
  .IX Item "avrxmega3"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64 KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
! .el .IP "\f(CWavrxmega4\fR" 4
  .IX Item "avrxmega4"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 64 KiB and up to 128 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR, \f(CW\*(C`avr128da28\*(C'\fR, \f(CW\*(C`avr128da32\*(C'\fR, \f(CW\*(C`avr128da48\*(C'\fR, \f(CW\*(C`avr128da64\*(C'\fR, \f(CW\*(C`avr128db28\*(C'\fR, \f(CW\*(C`avr128db32\*(C'\fR, \f(CW\*(C`avr128db48\*(C'\fR, \f(CW\*(C`avr128db64\*(C'\fR.
  .ie n .IP """avrxmega5""" 4
! .el .IP "\f(CWavrxmega5\fR" 4
  .IX Item "avrxmega5"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 64 KiB and up to 128 KiB of program memory and more than 64 KiB of \s-1RAM.\s0
  \&\fImcu\fR = \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
  .ie n .IP """avrxmega6""" 4
! .el .IP "\f(CWavrxmega6\fR" 4
  .IX Item "avrxmega6"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR.
  .ie n .IP """avrxmega7""" 4
! .el .IP "\f(CWavrxmega7\fR" 4
  .IX Item "avrxmega7"
! \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 128 KiB of program memory and more than 64 KiB of \s-1RAM.\s0
  \&\fImcu\fR = \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
  .ie n .IP """avrtiny""" 4
! .el .IP "\f(CWavrtiny\fR" 4
  .IX Item "avrtiny"
! \&\*(L"Reduced Tiny\*(R" Tiny core devices with only 16 general purpose registers and 512 B up to 4 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR, \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny102\*(C'\fR, \f(CW\*(C`attiny104\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR.
  .ie n .IP """avr1""" 4
! .el .IP "\f(CWavr1\fR" 4
  .IX Item "avr1"
! This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for assembler only.
  \&\fImcu\fR = \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mabsdata\fR" 4
  .IX Item "-mabsdata"
! Assume that all data in static storage can be accessed by \s-1LDS / STS\s0
  instructions.  This option has only an effect on reduced Tiny devices like
  ATtiny40.  See also the \f(CW\*(C`absdata\*(C'\fR
! \&\fB\s-1AVR\s0 Variable Attributes,variable attribute\fR.
! .IP "\fB\-maccumulate\-args\fR" 4
  .IX Item "-maccumulate-args"
  Accumulate outgoing function arguments and acquire/release the needed
  stack space for outgoing function arguments once in function
--- 23047,23167 ----
  The default is to generate code without branch protection or return
  address signing.
  .PP
! \fIAVR Options\fR
  .IX Subsection "AVR Options"
  .PP
! These options are defined for AVR implementations:
! .IP \fB\-mmcu=\fR\fImcu\fR 4
  .IX Item "-mmcu=mcu"
! Specify the AVR instruction set architecture (ISA) or device type.
  The default for this option is \f(CW\*(C`avr2\*(C'\fR.
  .Sp
! The following AVR devices and ISAs are supported.
  \&\fINote:\fR A complete device support consists of
! startup code \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW.o\*(C'\fR, a device header \f(CW\*(C`avr/io*.h\*(C'\fR,
! a device library \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR and a
! device\-specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) file
! \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR. Only the latter is provided by the compiler
! according the supported \f(CW\*(C`\fR\f(CImcu\fR\f(CW\*(C'\fRs below.  The rest is supported
! by AVR\-LibC (\f(CW\*(C`https://www.nongnu.org/avr\-libc/\*(C'\fR), or by means of
  \&\f(CW\*(C`atpack\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#atpack\*(C'\fR) files
  from the hardware manufacturer.
  .RS 4
  .ie n .IP """avr2""" 4
! .el .IP \f(CWavr2\fR 4
  .IX Item "avr2"
! "Classic" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
  .ie n .IP """avr25""" 4
! .el .IP \f(CWavr25\fR 4
  .IX Item "avr25"
! "Classic" devices with up to 8 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
  .ie n .IP """avr3""" 4
! .el .IP \f(CWavr3\fR 4
  .IX Item "avr3"
! "Classic" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`at76c711\*(C'\fR, \f(CW\*(C`at43usb355\*(C'\fR.
  .ie n .IP """avr31""" 4
! .el .IP \f(CWavr31\fR 4
  .IX Item "avr31"
! "Classic" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
  .ie n .IP """avr35""" 4
! .el .IP \f(CWavr35\fR 4
  .IX Item "avr35"
! "Classic" devices with 16 KiB up to 64 KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
  \&\fImcu\fR = \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR.
  .ie n .IP """avr4""" 4
! .el .IP \f(CWavr4\fR 4
  .IX Item "avr4"
! "Enhanced" devices with up to 8 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
  .ie n .IP """avr5""" 4
! .el .IP \f(CWavr5\fR 4
  .IX Item "avr5"
! "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega324pb\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`ata5787\*(C'\fR, \f(CW\*(C`ata5835\*(C'\fR, \f(CW\*(C`ata5700m322\*(C'\fR, \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
  .ie n .IP """avr51""" 4
! .el .IP \f(CWavr51\fR 4
  .IX Item "avr51"
! "Enhanced" devices with 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
  .ie n .IP """avr6""" 4
! .el .IP \f(CWavr6\fR 4
  .IX Item "avr6"
! "Enhanced" devices with 3\-byte PC, i.e. with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR.
  .ie n .IP """avrxmega2""" 4
! .el .IP \f(CWavrxmega2\fR 4
  .IX Item "avrxmega2"
! "XMEGA" devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da28s\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da32s\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da48s\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64da64s\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
! .el .IP \f(CWavrxmega3\fR 4
  .IX Item "avrxmega3"
! "XMEGA" devices with up to 64 KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr16la14\*(C'\fR, \f(CW\*(C`avr16la20\*(C'\fR, \f(CW\*(C`avr16la28\*(C'\fR, \f(CW\*(C`avr16la32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da28s\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da32s\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32da48s\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32eb14\*(C'\fR, \f(CW\*(C`avr32eb20\*(C'\fR, \f(CW\*(C`avr32eb28\*(C'\fR, \f(CW\*(C`avr32eb32\*(C'\fR, \f(CW\*(C`avr32la14\*(C'\fR, \f(CW\*(C`avr32la20\*(C'\fR, \f(CW\*(C`avr32la28\*(C'\fR, \f(CW\*(C`avr32la32\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
! .el .IP \f(CWavrxmega4\fR 4
  .IX Item "avrxmega4"
! "XMEGA" devices with more than 64 KiB and up to 128 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR, \f(CW\*(C`avr128da28\*(C'\fR, \f(CW\*(C`avr128da28s\*(C'\fR, \f(CW\*(C`avr128da32\*(C'\fR, \f(CW\*(C`avr128da32s\*(C'\fR, \f(CW\*(C`avr128da48\*(C'\fR, \f(CW\*(C`avr128da48s\*(C'\fR, \f(CW\*(C`avr128da64\*(C'\fR, \f(CW\*(C`avr128da64s\*(C'\fR, \f(CW\*(C`avr128db28\*(C'\fR, \f(CW\*(C`avr128db32\*(C'\fR, \f(CW\*(C`avr128db48\*(C'\fR, \f(CW\*(C`avr128db64\*(C'\fR.
  .ie n .IP """avrxmega5""" 4
! .el .IP \f(CWavrxmega5\fR 4
  .IX Item "avrxmega5"
! "XMEGA" devices with more than 64 KiB and up to 128 KiB of program memory and more than 64 KiB of RAM.
  \&\fImcu\fR = \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
  .ie n .IP """avrxmega6""" 4
! .el .IP \f(CWavrxmega6\fR 4
  .IX Item "avrxmega6"
! "XMEGA" devices with more than 128 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR.
  .ie n .IP """avrxmega7""" 4
! .el .IP \f(CWavrxmega7\fR 4
  .IX Item "avrxmega7"
! "XMEGA" devices with more than 128 KiB of program memory and more than 64 KiB of RAM.
  \&\fImcu\fR = \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
  .ie n .IP """avrtiny""" 4
! .el .IP \f(CWavrtiny\fR 4
  .IX Item "avrtiny"
! "Reduced Tiny" Tiny core devices with only 16 general purpose registers and 512 B up to 4 KiB of program memory.
  \&\fImcu\fR = \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR, \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny102\*(C'\fR, \f(CW\*(C`attiny104\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR.
  .ie n .IP """avr1""" 4
! .el .IP \f(CWavr1\fR 4
  .IX Item "avr1"
! This ISA is implemented by the minimal AVR core and supported for assembler only.
  \&\fImcu\fR = \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-mabsdata\fR 4
  .IX Item "-mabsdata"
! Assume that all data in static storage can be accessed by LDS / STS
  instructions.  This option has only an effect on reduced Tiny devices like
  ATtiny40.  See also the \f(CW\*(C`absdata\*(C'\fR
! \&\fBAVR Variable Attributes,variable attribute\fR.
! .IP \fB\-maccumulate\-args\fR 4
  .IX Item "-maccumulate-args"
  Accumulate outgoing function arguments and acquire/release the needed
  stack space for outgoing function arguments once in function
*************** prologue/epilogue.  Without this option,
*** 23234,23271 ****
  before calling a function and popped afterwards.
  .Sp
  Popping the arguments after the function call can be expensive on
! \&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
  executables because arguments need not be removed from the
  stack after such a function call.
  .Sp
  This option can lead to reduced code size for functions that perform
  several calls to functions that get their arguments on the stack like
! calls to printf-like functions.
! .IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
  .IX Item "-mbranch-cost=cost"
  Set the branch costs for conditional branch instructions to
! \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
  integers. The default branch cost is 0.
! .IP "\fB\-mcall\-prologues\fR" 4
  .IX Item "-mcall-prologues"
  Functions prologues/epilogues are expanded as calls to appropriate
  subroutines.  Code size is smaller.
! .IP "\fB\-mfuse\-add\fR" 4
  .IX Item "-mfuse-add"
  .PD 0
! .IP "\fB\-mno\-fuse\-add\fR" 4
  .IX Item "-mno-fuse-add"
! .IP "\fB\-mfuse\-add=\fR\fIlevel\fR" 4
  .IX Item "-mfuse-add=level"
  .PD
  Optimize indirect memory accesses on reduced Tiny devices.
! The default uses \f(CW\*(C`\f(CIlevel\f(CW=1\*(C'\fR for optimizations \fB\-Og\fR
! and \fB\-O1\fR, and \f(CW\*(C`\f(CIlevel\f(CW=2\*(C'\fR for higher optimizations.
  Valid values for \fIlevel\fR are \f(CW0\fR, \f(CW1\fR and \f(CW2\fR.
! .IP "\fB\-mdouble=\fR\fIbits\fR" 4
  .IX Item "-mdouble=bits"
  .PD 0
! .IP "\fB\-mlong\-double=\fR\fIbits\fR" 4
  .IX Item "-mlong-double=bits"
  .PD
  Set the size (in bits) of the \f(CW\*(C`double\*(C'\fR or \f(CW\*(C`long double\*(C'\fR type,
--- 23169,23206 ----
  before calling a function and popped afterwards.
  .Sp
  Popping the arguments after the function call can be expensive on
! AVR so that accumulating the stack space might lead to smaller
  executables because arguments need not be removed from the
  stack after such a function call.
  .Sp
  This option can lead to reduced code size for functions that perform
  several calls to functions that get their arguments on the stack like
! calls to printf\-like functions.
! .IP \fB\-mbranch\-cost=\fR\fIcost\fR 4
  .IX Item "-mbranch-cost=cost"
  Set the branch costs for conditional branch instructions to
! \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non\-negative
  integers. The default branch cost is 0.
! .IP \fB\-mcall\-prologues\fR 4
  .IX Item "-mcall-prologues"
  Functions prologues/epilogues are expanded as calls to appropriate
  subroutines.  Code size is smaller.
! .IP \fB\-mfuse\-add\fR 4
  .IX Item "-mfuse-add"
  .PD 0
! .IP \fB\-mno\-fuse\-add\fR 4
  .IX Item "-mno-fuse-add"
! .IP \fB\-mfuse\-add=\fR\fIlevel\fR 4
  .IX Item "-mfuse-add=level"
  .PD
  Optimize indirect memory accesses on reduced Tiny devices.
! The default uses \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=1\*(C'\fR for optimizations \fB\-Og\fR
! and \fB\-O1\fR, and \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=2\*(C'\fR for higher optimizations.
  Valid values for \fIlevel\fR are \f(CW0\fR, \f(CW1\fR and \f(CW2\fR.
! .IP \fB\-mdouble=\fR\fIbits\fR 4
  .IX Item "-mdouble=bits"
  .PD 0
! .IP \fB\-mlong\-double=\fR\fIbits\fR 4
  .IX Item "-mlong-double=bits"
  .PD
  Set the size (in bits) of the \f(CW\*(C`double\*(C'\fR or \f(CW\*(C`long double\*(C'\fR type,
*************** Whether or not a specific value for \fIb
*** 23274,23311 ****
  the \f(CW\*(C`\-\-with\-double=\*(C'\fR and \f(CW\*(C`\-\-with\-long\-double=\*(C'\fR
  configure\ options (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR),
  and the same applies for the default values of the options.
! .IP "\fB\-mgas\-isr\-prologues\fR" 4
  .IX Item "-mgas-isr-prologues"
  Interrupt service routines (ISRs) may use the \f(CW\*(C`_\|_gcc_isr\*(C'\fR pseudo
! instruction supported by \s-1GNU\s0 Binutils.
  If this option is on, the feature can still be disabled for individual
! ISRs by means of the \fB\s-1AVR\s0 Function Attributes,,\f(CB\*(C`no_gccisr\*(C'\fB\fR
  function attribute.  This feature is activated per default
  if optimization is on (but not with \fB\-Og\fR, \f(CW@pxref\fR{Optimize Options}),
! and if \s-1GNU\s0 Binutils support \s-1PR21683\s0 (\f(CW\*(C`https://sourceware.org/PR21683\*(C'\fR).
! .IP "\fB\-mint8\fR" 4
  .IX Item "-mint8"
  Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
  \&\f(CW\*(C`char\*(C'\fR is 1 byte, an \f(CW\*(C`int\*(C'\fR is 1 byte, a \f(CW\*(C`long\*(C'\fR is 2 bytes,
  and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
  conform to the C standards, but it results in smaller code
  size.
! .IP "\fB\-mmain\-is\-OS_task\fR" 4
  .IX Item "-mmain-is-OS_task"
  Do not save registers in \f(CW\*(C`main\*(C'\fR.  The effect is the same like
! attaching attribute \fB\s-1AVR\s0 Function Attributes,,\f(CB\*(C`OS_task\*(C'\fB\fR
  to \f(CW\*(C`main\*(C'\fR. It is activated per default if optimization is on.
! .IP "\fB\-mno\-interrupts\fR" 4
  .IX Item "-mno-interrupts"
  Generated code is not compatible with hardware interrupts.
  Code size is smaller.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
  \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
  Setting \fB\-mrelax\fR just adds the \fB\-\-mlink\-relax\fR option to
! the assembler's command line and the \fB\-\-relax\fR option to the
! linker's command line.
  .Sp
  Jump relaxing is performed by the linker because jump offsets are not
  known before code is located. Therefore, the assembler code generated by the
--- 23209,23246 ----
  the \f(CW\*(C`\-\-with\-double=\*(C'\fR and \f(CW\*(C`\-\-with\-long\-double=\*(C'\fR
  configure\ options (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR),
  and the same applies for the default values of the options.
! .IP \fB\-mgas\-isr\-prologues\fR 4
  .IX Item "-mgas-isr-prologues"
  Interrupt service routines (ISRs) may use the \f(CW\*(C`_\|_gcc_isr\*(C'\fR pseudo
! instruction supported by GNU Binutils.
  If this option is on, the feature can still be disabled for individual
! ISRs by means of the \fBAVR Function Attributes,,\fR\f(CB\*(C`no_gccisr\*(C'\fR
  function attribute.  This feature is activated per default
  if optimization is on (but not with \fB\-Og\fR, \f(CW@pxref\fR{Optimize Options}),
! and if GNU Binutils support PR21683 (\f(CW\*(C`https://sourceware.org/PR21683\*(C'\fR).
! .IP \fB\-mint8\fR 4
  .IX Item "-mint8"
  Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
  \&\f(CW\*(C`char\*(C'\fR is 1 byte, an \f(CW\*(C`int\*(C'\fR is 1 byte, a \f(CW\*(C`long\*(C'\fR is 2 bytes,
  and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
  conform to the C standards, but it results in smaller code
  size.
! .IP \fB\-mmain\-is\-OS_task\fR 4
  .IX Item "-mmain-is-OS_task"
  Do not save registers in \f(CW\*(C`main\*(C'\fR.  The effect is the same like
! attaching attribute \fBAVR Function Attributes,,\fR\f(CB\*(C`OS_task\*(C'\fR
  to \f(CW\*(C`main\*(C'\fR. It is activated per default if optimization is on.
! .IP \fB\-mno\-interrupts\fR 4
  .IX Item "-mno-interrupts"
  Generated code is not compatible with hardware interrupts.
  Code size is smaller.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
  \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
  Setting \fB\-mrelax\fR just adds the \fB\-\-mlink\-relax\fR option to
! the assembler\*(Aqs command line and the \fB\-\-relax\fR option to the
! linker\*(Aqs command line.
  .Sp
  Jump relaxing is performed by the linker because jump offsets are not
  known before code is located. Therefore, the assembler code generated by the
*************** differ from instructions in the assemble
*** 23314,23346 ****
  .Sp
  Relaxing must be turned on if linker stubs are needed, see the
  section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
! .IP "\fB\-mrodata\-in\-ram\fR" 4
  .IX Item "-mrodata-in-ram"
  .PD 0
! .IP "\fB\-mno\-rodata\-in\-ram\fR" 4
  .IX Item "-mno-rodata-in-ram"
  .PD
! Locate the \f(CW\*(C`.rodata\*(C'\fR sections for read-only data in \s-1RAM\s0 resp.
  in program memory.
  For most devices, there is no choice and this option acts rather
  like an assertion.
  .Sp
  Since v14 and for the AVR64* and AVR128* devices, \f(CW\*(C`.rodata\*(C'\fR
! is located in flash memory per default, provided the required \s-1GNU\s0 Binutils
! support (\s-1PR31124\s0 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR)) is available.
  In that case, \fB\-mrodata\-in\-ram\fR can be used to return to the old
! layout with \f(CW\*(C`.rodata\*(C'\fR in \s-1RAM.\s0
! .IP "\fB\-mstrict\-X\fR" 4
  .IX Item "-mstrict-X"
  Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
! that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
! pre-decrement addressing.
  .Sp
  Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
  as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
  instructions.  
  For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
! small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
  performed as
  .Sp
  .Vb 3
--- 23249,23281 ----
  .Sp
  Relaxing must be turned on if linker stubs are needed, see the
  section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
! .IP \fB\-mrodata\-in\-ram\fR 4
  .IX Item "-mrodata-in-ram"
  .PD 0
! .IP \fB\-mno\-rodata\-in\-ram\fR 4
  .IX Item "-mno-rodata-in-ram"
  .PD
! Locate the \f(CW\*(C`.rodata\*(C'\fR sections for read\-only data in RAM resp.
  in program memory.
  For most devices, there is no choice and this option acts rather
  like an assertion.
  .Sp
  Since v14 and for the AVR64* and AVR128* devices, \f(CW\*(C`.rodata\*(C'\fR
! is located in flash memory per default, provided the required GNU Binutils
! support (PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR)) is available.
  In that case, \fB\-mrodata\-in\-ram\fR can be used to return to the old
! layout with \f(CW\*(C`.rodata\*(C'\fR in RAM.
! .IP \fB\-mstrict\-X\fR 4
  .IX Item "-mstrict-X"
  Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
! that \f(CW\*(C`X\*(C'\fR is only used in indirect, post\-increment or
! pre\-decrement addressing.
  .Sp
  Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
  as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
  instructions.  
  For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
! small non\-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
  performed as
  .Sp
  .Vb 3
*************** performed as
*** 23348,23382 ****
  \&        ld   <Rn>, X        ; <Rn> = *X
  \&        sbiw r26, const   ; X \-= const
  .Ve
! .IP "\fB\-mtiny\-stack\fR" 4
  .IX Item "-mtiny-stack"
  Only change the lower 8 bits of the stack pointer.
! .IP "\fB\-mfract\-convert\-truncate\fR" 4
  .IX Item "-mfract-convert-truncate"
! Allow to use truncation instead of rounding towards zero for fractional fixed-point types.
! .IP "\fB\-nodevicelib\fR" 4
  .IX Item "-nodevicelib"
! Don't link against AVR-LibC's device specific library \f(CW\*(C`lib<mcu>.a\*(C'\fR.
! .IP "\fB\-nodevicespecs\fR" 4
  .IX Item "-nodevicespecs"
! Don't add \fB\-specs=device\-specs/specs\-\fR\fImcu\fR to the compiler driver's
! command line.  The user takes responsibility for supplying the sub-processes
  like compiler proper, assembler and linker with appropriate command line
  options.  This means that the user has to supply her private device specs
! file by means of \fB\-specs=\fR\fIpath-to-specs-file\fR.  There is no
  more need for option \fB\-mmcu=\fR\fImcu\fR.
  .Sp
  This option can also serve as a replacement for the older way of
! specifying custom device-specs files that needed \fB\-B\fR \fIsome-path\fR to point to a directory
  which contains a folder named \f(CW\*(C`device\-specs\*(C'\fR which contains a specs file named
! \&\f(CW\*(C`specs\-\f(CImcu\f(CW\*(C'\fR, where \fImcu\fR was specified by \fB\-mmcu=\fR\fImcu\fR.
! .IP "\fB\-Waddr\-space\-convert\fR" 4
  .IX Item "-Waddr-space-convert"
  Warn about conversions between address spaces in the case where the
  resulting address space is not contained in the incoming address space.
! .IP "\fB\-Wmisspelled\-isr\fR" 4
  .IX Item "-Wmisspelled-isr"
! Warn if the \s-1ISR\s0 is misspelled, i.e. without _\|_vector prefix.
  Enabled by default.
  .PP
  \f(CW\*(C`EIND\*(C'\fR and Devices with More Than 128 Ki Bytes of Flash
--- 23283,23317 ----
  \&        ld   <Rn>, X        ; <Rn> = *X
  \&        sbiw r26, const   ; X \-= const
  .Ve
! .IP \fB\-mtiny\-stack\fR 4
  .IX Item "-mtiny-stack"
  Only change the lower 8 bits of the stack pointer.
! .IP \fB\-mfract\-convert\-truncate\fR 4
  .IX Item "-mfract-convert-truncate"
! Allow to use truncation instead of rounding towards zero for fractional fixed\-point types.
! .IP \fB\-nodevicelib\fR 4
  .IX Item "-nodevicelib"
! Don\*(Aqt link against AVR\-LibC\*(Aqs device specific library \f(CW\*(C`lib<mcu>.a\*(C'\fR.
! .IP \fB\-nodevicespecs\fR 4
  .IX Item "-nodevicespecs"
! Don\*(Aqt add \fB\-specs=device\-specs/specs\-\fR\fImcu\fR to the compiler driver\*(Aqs
! command line.  The user takes responsibility for supplying the sub\-processes
  like compiler proper, assembler and linker with appropriate command line
  options.  This means that the user has to supply her private device specs
! file by means of \fB\-specs=\fR\fIpath\-to\-specs\-file\fR.  There is no
  more need for option \fB\-mmcu=\fR\fImcu\fR.
  .Sp
  This option can also serve as a replacement for the older way of
! specifying custom device\-specs files that needed \fB\-B\fR \fIsome\-path\fR to point to a directory
  which contains a folder named \f(CW\*(C`device\-specs\*(C'\fR which contains a specs file named
! \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR, where \fImcu\fR was specified by \fB\-mmcu=\fR\fImcu\fR.
! .IP \fB\-Waddr\-space\-convert\fR 4
  .IX Item "-Waddr-space-convert"
  Warn about conversions between address spaces in the case where the
  resulting address space is not contained in the incoming address space.
! .IP \fB\-Wmisspelled\-isr\fR 4
  .IX Item "-Wmisspelled-isr"
! Warn if the ISR is misspelled, i.e. without _\|_vector prefix.
  Enabled by default.
  .PP
  \f(CW\*(C`EIND\*(C'\fR and Devices with More Than 128 Ki Bytes of Flash
*************** when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*
*** 23394,23438 ****
  .PP
  Indirect jumps and calls on these devices are handled as follows by
  the compiler and are subject to some limitations:
! .IP "*" 4
  The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
! .IP "*" 4
  The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitly in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
  instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
  indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
! .IP "*" 4
  The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
  code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
  saved/restored in function or interrupt service routine
  prologue/epilogue.
! .IP "*" 4
  For indirect calls to functions and computed goto, the linker
  generates \fIstubs\fR. Stubs are jump pads sometimes also called
  \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
  The stub contains a direct jump to the desired address.
! .IP "*" 4
  Linker relaxation must be turned on so that the linker generates
  the stubs correctly in all situations. See the compiler option
  \&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
  There are corner cases where the linker is supposed to generate stubs
  but aborts without relaxation and without a helpful error message.
! .IP "*" 4
  The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
  If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
  linker script has to be used in order to place the sections whose
  name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
  points to.
! .IP "*" 4
  The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
! Notice that startup code is a blend of code from libgcc and AVR-LibC.
! For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
! AVR-LibC\ user\ manual (\f(CW\*(C`https://www.nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
! .IP "*" 4
! It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
  early, for example by means of initialization code located in
  section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
! that initializes \s-1RAM\s0 and calls constructors, but after the bit
! of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
  where the vector table is located.
  .Sp
  .Vb 1
--- 23329,23373 ----
  .PP
  Indirect jumps and calls on these devices are handled as follows by
  the compiler and are subject to some limitations:
! .IP * 4
  The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
! .IP * 4
  The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitly in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
  instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
  indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
! .IP * 4
  The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
  code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
  saved/restored in function or interrupt service routine
  prologue/epilogue.
! .IP * 4
  For indirect calls to functions and computed goto, the linker
  generates \fIstubs\fR. Stubs are jump pads sometimes also called
  \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
  The stub contains a direct jump to the desired address.
! .IP * 4
  Linker relaxation must be turned on so that the linker generates
  the stubs correctly in all situations. See the compiler option
  \&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
  There are corner cases where the linker is supposed to generate stubs
  but aborts without relaxation and without a helpful error message.
! .IP * 4
  The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
  If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
  linker script has to be used in order to place the sections whose
  name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
  points to.
! .IP * 4
  The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
! Notice that startup code is a blend of code from libgcc and AVR\-LibC.
! For the impact of AVR\-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
! AVR\-LibC\ user\ manual (\f(CW\*(C`https://www.nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
! .IP * 4
! It is legitimate for user\-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
  early, for example by means of initialization code located in
  section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
! that initializes RAM and calls constructors, but after the bit
! of startup code from AVR\-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
  where the vector table is located.
  .Sp
  .Vb 1
*************** where the vector table is located.
*** 23448,23454 ****
  .Ve
  .Sp
  The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
! .IP "*" 4
  Stubs are generated automatically by the linker if
  the following two conditions are met:
  .RS 4
--- 23383,23389 ----
  .Ve
  .Sp
  The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
! .IP * 4
  Stubs are generated automatically by the linker if
  the following two conditions are met:
  .RS 4
*************** the following two conditions are met:
*** 23467,23473 ****
  .RE
  .RS 4
  .RE
! .IP "*" 4
  The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
  following situations:
  .RS 4
--- 23402,23408 ----
  .RE
  .RS 4
  .RE
! .IP * 4
  The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
  following situations:
  .RS 4
*************** following situations:
*** 23476,23500 ****
  .PD 0
  .IP "\-<Computed goto.>" 4
  .IX Item "-<Computed goto.>"
! .IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
  .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
  .PD
! command-line option.
  .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
  .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
! tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
! .IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
! .IX Item "-<C and constructors/destructors called during startup/shutdown.>"
  .PD 0
! .ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
  .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
  .IX Item "-<If the tools hit a gs() modifier explained above.>"
  .RE
  .RS 4
  .RE
! .IP "*" 4
! .PD
! Jumping to non-symbolic addresses like so is \fInot\fR supported:
  .Sp
  .Vb 5
  \&        int main (void)
--- 23411,23435 ----
  .PD 0
  .IP "\-<Computed goto.>" 4
  .IX Item "-<Computed goto.>"
! .IP "\-<If prologue\-save function is used, see \fB\-mcall\-prologues\fR>" 4
  .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
  .PD
! command\-line option.
  .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
  .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
! tables you can specify the \fB\-fno\-jump\-tables\fR command\-line option.
! .IP "\-<C and C++ constructors/destructors called during startup/shutdown.>" 4
! .IX Item "-<C and C++ constructors/destructors called during startup/shutdown.>"
  .PD 0
! .ie n .IP "\-<If the tools hit a gs() modifier explained above.>" 4
  .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
  .IX Item "-<If the tools hit a gs() modifier explained above.>"
+ .PD
  .RE
  .RS 4
  .RE
! .IP * 4
! Jumping to non\-symbolic addresses like so is \fInot\fR supported:
  .Sp
  .Vb 5
  \&        int main (void)
*************** Alternatively, \f(CW\*(C`func_4\*(C'\fR
*** 23523,23529 ****
  Handling of the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR and \f(CW\*(C`RAMPZ\*(C'\fR Special Function Registers
  .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
  .PP
! Some \s-1AVR\s0 devices support memories larger than the 64 KiB range
  that can be accessed with 16\-bit pointers.  To access memory locations
  outside this 64 KiB range, the content of a \f(CW\*(C`RAMP\*(C'\fR
  register is used as high part of the address:
--- 23458,23464 ----
  Handling of the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR and \f(CW\*(C`RAMPZ\*(C'\fR Special Function Registers
  .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
  .PP
! Some AVR devices support memories larger than the 64 KiB range
  that can be accessed with 16\-bit pointers.  To access memory locations
  outside this 64 KiB range, the content of a \f(CW\*(C`RAMP\*(C'\fR
  register is used as high part of the address:
*************** The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C
*** 23531,23571 ****
  with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
  register, respectively, to get a wide address. Similarly,
  \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
! .IP "*" 4
  The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
  registers with zero.
! .IP "*" 4
! If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
  generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
  as needed before the operation.
! .IP "*" 4
! If the device supports \s-1RAM\s0 larger than 64 KiB and the compiler
  needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
  is reset to zero after the operation.
! .IP "*" 4
! If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
! prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
! zero in case the \s-1ISR\s0 code might (implicitly) use it.
! .IP "*" 4
! \&\s-1RAM\s0 larger than 64 KiB is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
  If you use inline assembler to read from locations outside the
  16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
  you must reset it to zero after the access.
  .PP
! \s-1AVR\s0 Built-in Macros
  .IX Subsection "AVR Built-in Macros"
  .PP
! \&\s-1GCC\s0 defines several built-in macros so that the user code can test
  for the presence or absence of features.  Almost any of the following
! built-in macros are deduced from device capabilities and thus
! triggered by the \fB\-mmcu=\fR command-line option.
  .PP
! For even more AVR-specific built-in macros see
! \&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
  .ie n .IP """_\|_AVR_ARCH_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ARCH_\|_\fR" 4
  .IX Item "__AVR_ARCH__"
! Build-in macro that resolves to a decimal number that identifies the
  architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
  Possible values are:
  .Sp
--- 23466,23506 ----
  with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
  register, respectively, to get a wide address. Similarly,
  \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
! .IP * 4
  The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
  registers with zero.
! .IP * 4
! If a \fBAVR Named Address Spaces,named address space\fR other than
  generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
  as needed before the operation.
! .IP * 4
! If the device supports RAM larger than 64 KiB and the compiler
  needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
  is reset to zero after the operation.
! .IP * 4
! If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the ISR
! prologue/epilogue saves/restores that SFR and initializes it with
! zero in case the ISR code might (implicitly) use it.
! .IP * 4
! RAM larger than 64 KiB is not supported by GCC for AVR targets.
  If you use inline assembler to read from locations outside the
  16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
  you must reset it to zero after the access.
  .PP
! AVR Built\-in Macros
  .IX Subsection "AVR Built-in Macros"
  .PP
! GCC defines several built\-in macros so that the user code can test
  for the presence or absence of features.  Almost any of the following
! built\-in macros are deduced from device capabilities and thus
! triggered by the \fB\-mmcu=\fR command\-line option.
  .PP
! For even more AVR\-specific built\-in macros see
! \&\fBAVR Named Address Spaces\fR and \fBAVR Built\-in Functions\fR.
  .ie n .IP """_\|_AVR_ARCH_\|_""" 4
! .el .IP \f(CW_\|_AVR_ARCH_\|_\fR 4
  .IX Item "__AVR_ARCH__"
! Build\-in macro that resolves to a decimal number that identifies the
  architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
  Possible values are:
  .Sp
*************** respectively and
*** 23584,23760 ****
  for \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR,
  \&\f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega3\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR,
  \&\f(CW\*(C`avrxmega5\*(C'\fR, \f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
! If \fImcu\fR specifies a device, this built-in macro is set
  accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
  defined to \f(CW4\fR.
! .ie n .IP """_\|_AVR_\fIDevice\fP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
  .IX Item "__AVR_Device__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro which reflects
! the device's name. For example, \fB\-mmcu=atmega8\fR defines the
! built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
  \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
  .Sp
! The built-in macros' names follow
! the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
! the device name as from the \s-1AVR\s0 user manual. The difference between
! \&\fIDevice\fR in the built-in macro and \fIdevice\fR in
  \&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
! .el .IP "\f(CW_\|_AVR_DEVICE_NAME_\|_\fR" 4
  .IX Item "__AVR_DEVICE_NAME__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro to
! the device's name. For example, with \fB\-mmcu=atmega8\fR the macro
  is defined to \f(CW\*(C`atmega8\*(C'\fR.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
! .el .IP "\f(CW_\|_AVR_XMEGA_\|_\fR" 4
  .IX Item "__AVR_XMEGA__"
! The device / architecture belongs to the \s-1XMEGA\s0 family of devices.
  .ie n .IP """_\|_AVR_HAVE_ADIW_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_ADIW_\|_\fR" 4
  .IX Item "__AVR_HAVE_ADIW__"
  The device has the \f(CW\*(C`ADIW\*(C'\fR and \f(CW\*(C`SBIW\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
  .IX Item "__AVR_HAVE_ELPM__"
  The device has the \f(CW\*(C`ELPM\*(C'\fR instruction.
  .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
  .IX Item "__AVR_HAVE_ELPMX__"
! The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
! R\f(CIn\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
  .IX Item "__AVR_HAVE_LPMX__"
! The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
! \&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
  .IX Item "__AVR_HAVE_MOVW__"
  The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
! register-register moves.
  .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
  .IX Item "__AVR_HAVE_MUL__"
  The device has a hardware multiplier.
  .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
  .IX Item "__AVR_HAVE_JMP_CALL__"
  The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
  This is the case for devices with more than 8 KiB of program
  memory.
  .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
  .IX Item "__AVR_HAVE_EIJMP_EICALL__"
  .PD 0
  .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
! .el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
  .IX Item "__AVR_3_BYTE_PC__"
  .PD
  The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
  This is the case for devices with more than 128 KiB of program memory.
  This also means that the program counter
! (\s-1PC\s0) is 3 bytes wide.
  .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
! .el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
  .IX Item "__AVR_2_BYTE_PC__"
! The program counter (\s-1PC\s0) is 2 bytes wide. This is the case for devices
  with up to 128 KiB of program memory.
  .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
  .IX Item "__AVR_HAVE_8BIT_SP__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
  .IX Item "__AVR_HAVE_16BIT_SP__"
  .PD
! The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
  16\-bit register by the compiler.
  The definition of these macros is affected by \fB\-mtiny\-stack\fR.
  .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
  .IX Item "__AVR_HAVE_SPH__"
  .PD 0
  .ie n .IP """_\|_AVR_SP8_\|_""" 4
! .el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
  .IX Item "__AVR_SP8__"
  .PD
! The device has the \s-1SPH\s0 (high part of stack pointer) special function
  register or has an 8\-bit stack pointer, respectively.
  The definition of these macros is affected by \fB\-mmcu=\fR and
  in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
  by \fB\-msp8\fR.
  .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPD__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPX__"
  .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPY__"
  .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
  .IX Item "__AVR_HAVE_RAMPZ__"
  .PD
  The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
  \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
  .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
! .el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
  .IX Item "__NO_INTERRUPTS__"
! This macro reflects the \fB\-mno\-interrupts\fR command-line option.
  .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
  .IX Item "__AVR_ERRATA_SKIP__"
  .PD 0
  .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
  .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
  .PD
! Some \s-1AVR\s0 devices (\s-1AT90S8515,\s0 ATmega103) must not skip 32\-bit
  instructions because of a hardware erratum.  Skip instructions are
  \&\f(CW\*(C`SBRS\*(C'\fR, \f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR and \f(CW\*(C`CPSE\*(C'\fR.
  The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
  set.
  .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
! .el .IP "\f(CW_\|_AVR_ISA_RMW_\|_\fR" 4
  .IX Item "__AVR_ISA_RMW__"
! The device has Read-Modify-Write instructions (\s-1XCH, LAC, LAS\s0 and \s-1LAT\s0).
! .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fP""" 4
! .el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
  .IX Item "__AVR_SFR_OFFSET__=offset"
  Instructions that can address I/O special function registers directly
  like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
! address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
  or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
! to be subtracted from the \s-1RAM\s0 address in order to get the
  respective I/O address.
  .ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4
! .el .IP "\f(CW_\|_AVR_SHORT_CALLS_\|_\fR" 4
  .IX Item "__AVR_SHORT_CALLS__"
  The \fB\-mshort\-calls\fR command line option is set.
! .ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fP""" 4
! .el .IP "\f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\f(CIaddr\f(CW\fR" 4
  .IX Item "__AVR_PM_BASE_ADDRESS__=addr"
  Some devices support reading from flash memory by means of \f(CW\*(C`LD*\*(C'\fR
  instructions.  The flash memory is seen in the data address space
  at an offset of \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR.  If this macro
  is not defined, this feature is not available.  If defined,
  the address space is linear and there is no need to put
! \&\f(CW\*(C`.rodata\*(C'\fR into \s-1RAM.\s0  This is handled by the default linker
  description file, and is currently available for
  \&\f(CW\*(C`avrtiny\*(C'\fR and \f(CW\*(C`avrxmega3\*(C'\fR.  Even more convenient,
  there is no need to use address spaces like \f(CW\*(C`_\|_flash\*(C'\fR or
  features like attribute \f(CW\*(C`progmem\*(C'\fR and \f(CW\*(C`pgm_read_*\*(C'\fR.
  .ie n .IP """_\|_AVR_HAVE_FLMAP_\|_""" 4
! .el .IP "\f(CW_\|_AVR_HAVE_FLMAP_\|_\fR" 4
  .IX Item "__AVR_HAVE_FLMAP__"
  This macro is defined provided the following conditions are met:
  .RS 4
--- 23519,23695 ----
  for \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR,
  \&\f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega3\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR,
  \&\f(CW\*(C`avrxmega5\*(C'\fR, \f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
! If \fImcu\fR specifies a device, this built\-in macro is set
  accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
  defined to \f(CW4\fR.
! .ie n .IP """_\|_AVR_\fIDevice\fR_\|_""" 4
! .el .IP \f(CW_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\fR 4
  .IX Item "__AVR_Device__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built\-in macro which reflects
! the device\*(Aqs name. For example, \fB\-mmcu=atmega8\fR defines the
! built\-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
  \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
  .Sp
! The built\-in macros\*(Aq names follow
! the scheme \f(CW\*(C`_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\*(C'\fR where \fIDevice\fR is
! the device name as from the AVR user manual. The difference between
! \&\fIDevice\fR in the built\-in macro and \fIdevice\fR in
  \&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
! .el .IP \f(CW_\|_AVR_DEVICE_NAME_\|_\fR 4
  .IX Item "__AVR_DEVICE_NAME__"
! Setting \fB\-mmcu=\fR\fIdevice\fR defines this built\-in macro to
! the device\*(Aqs name. For example, with \fB\-mmcu=atmega8\fR the macro
  is defined to \f(CW\*(C`atmega8\*(C'\fR.
  .Sp
  If \fIdevice\fR is not a device but only a core architecture like
  \&\fBavr51\fR, this macro is not defined.
  .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
! .el .IP \f(CW_\|_AVR_XMEGA_\|_\fR 4
  .IX Item "__AVR_XMEGA__"
! The device / architecture belongs to the XMEGA family of devices.
  .ie n .IP """_\|_AVR_HAVE_ADIW_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_ADIW_\|_\fR 4
  .IX Item "__AVR_HAVE_ADIW__"
  The device has the \f(CW\*(C`ADIW\*(C'\fR and \f(CW\*(C`SBIW\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_ELPM_\|_\fR 4
  .IX Item "__AVR_HAVE_ELPM__"
  The device has the \f(CW\*(C`ELPM\*(C'\fR instruction.
  .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_ELPMX_\|_\fR 4
  .IX Item "__AVR_HAVE_ELPMX__"
! The device has the \f(CW\*(C`ELPM R\fR\f(CIn\fR\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
! R\fR\f(CIn\fR\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_LPMX_\|_\fR 4
  .IX Item "__AVR_HAVE_LPMX__"
! The device has the \f(CW\*(C`LPM R\fR\f(CIn\fR\f(CW,Z\*(C'\fR and
! \&\f(CW\*(C`LPM R\fR\f(CIn\fR\f(CW,Z+\*(C'\fR instructions.
  .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_MOVW_\|_\fR 4
  .IX Item "__AVR_HAVE_MOVW__"
  The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
! register\-register moves.
  .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_MUL_\|_\fR 4
  .IX Item "__AVR_HAVE_MUL__"
  The device has a hardware multiplier.
  .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR 4
  .IX Item "__AVR_HAVE_JMP_CALL__"
  The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
  This is the case for devices with more than 8 KiB of program
  memory.
  .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR 4
  .IX Item "__AVR_HAVE_EIJMP_EICALL__"
  .PD 0
  .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
! .el .IP \f(CW_\|_AVR_3_BYTE_PC_\|_\fR 4
  .IX Item "__AVR_3_BYTE_PC__"
  .PD
  The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
  This is the case for devices with more than 128 KiB of program memory.
  This also means that the program counter
! (PC) is 3 bytes wide.
  .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
! .el .IP \f(CW_\|_AVR_2_BYTE_PC_\|_\fR 4
  .IX Item "__AVR_2_BYTE_PC__"
! The program counter (PC) is 2 bytes wide. This is the case for devices
  with up to 128 KiB of program memory.
  .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR 4
  .IX Item "__AVR_HAVE_8BIT_SP__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR 4
  .IX Item "__AVR_HAVE_16BIT_SP__"
  .PD
! The stack pointer (SP) register is treated as 8\-bit respectively
  16\-bit register by the compiler.
  The definition of these macros is affected by \fB\-mtiny\-stack\fR.
  .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_SPH_\|_\fR 4
  .IX Item "__AVR_HAVE_SPH__"
  .PD 0
  .ie n .IP """_\|_AVR_SP8_\|_""" 4
! .el .IP \f(CW_\|_AVR_SP8_\|_\fR 4
  .IX Item "__AVR_SP8__"
  .PD
! The device has the SPH (high part of stack pointer) special function
  register or has an 8\-bit stack pointer, respectively.
  The definition of these macros is affected by \fB\-mmcu=\fR and
  in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
  by \fB\-msp8\fR.
  .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPD_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPD__"
  .PD 0
  .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPX_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPX__"
  .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPY_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPY__"
  .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR 4
  .IX Item "__AVR_HAVE_RAMPZ__"
  .PD
  The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
  \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
  .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
! .el .IP \f(CW_\|_NO_INTERRUPTS_\|_\fR 4
  .IX Item "__NO_INTERRUPTS__"
! This macro reflects the \fB\-mno\-interrupts\fR command\-line option.
  .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
! .el .IP \f(CW_\|_AVR_ERRATA_SKIP_\|_\fR 4
  .IX Item "__AVR_ERRATA_SKIP__"
  .PD 0
  .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
! .el .IP \f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR 4
  .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
  .PD
! Some AVR devices (AT90S8515, ATmega103) must not skip 32\-bit
  instructions because of a hardware erratum.  Skip instructions are
  \&\f(CW\*(C`SBRS\*(C'\fR, \f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR and \f(CW\*(C`CPSE\*(C'\fR.
  The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
  set.
  .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
! .el .IP \f(CW_\|_AVR_ISA_RMW_\|_\fR 4
  .IX Item "__AVR_ISA_RMW__"
! The device has Read\-Modify\-Write instructions (XCH, LAC, LAS and LAT).
! .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fR""" 4
! .el .IP \f(CW_\|_AVR_SFR_OFFSET_\|_=\fR\f(CIoffset\fR\f(CW\fR 4
  .IX Item "__AVR_SFR_OFFSET__=offset"
  Instructions that can address I/O special function registers directly
  like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
! address as if addressed by an instruction to access RAM like \f(CW\*(C`LD\*(C'\fR
  or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
! to be subtracted from the RAM address in order to get the
  respective I/O address.
  .ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4
! .el .IP \f(CW_\|_AVR_SHORT_CALLS_\|_\fR 4
  .IX Item "__AVR_SHORT_CALLS__"
  The \fB\-mshort\-calls\fR command line option is set.
! .ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fR""" 4
! .el .IP \f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\fR\f(CIaddr\fR\f(CW\fR 4
  .IX Item "__AVR_PM_BASE_ADDRESS__=addr"
  Some devices support reading from flash memory by means of \f(CW\*(C`LD*\*(C'\fR
  instructions.  The flash memory is seen in the data address space
  at an offset of \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR.  If this macro
  is not defined, this feature is not available.  If defined,
  the address space is linear and there is no need to put
! \&\f(CW\*(C`.rodata\*(C'\fR into RAM.  This is handled by the default linker
  description file, and is currently available for
  \&\f(CW\*(C`avrtiny\*(C'\fR and \f(CW\*(C`avrxmega3\*(C'\fR.  Even more convenient,
  there is no need to use address spaces like \f(CW\*(C`_\|_flash\*(C'\fR or
  features like attribute \f(CW\*(C`progmem\*(C'\fR and \f(CW\*(C`pgm_read_*\*(C'\fR.
  .ie n .IP """_\|_AVR_HAVE_FLMAP_\|_""" 4
! .el .IP \f(CW_\|_AVR_HAVE_FLMAP_\|_\fR 4
  .IX Item "__AVR_HAVE_FLMAP__"
  This macro is defined provided the following conditions are met:
  .RS 4
*************** This macro is defined provided the follo
*** 23762,23876 ****
  .el .IP "*<The device has the \f(CWNVMCTRL_CTRLB.FLMAP\fR bitfield.>" 4
  .IX Item "*<The device has the NVMCTRL_CTRLB.FLMAP bitfield.>"
  This applies to the AVR64* and AVR128* devices.
! .IP "*<It's not known at assembler-time which emulation will be used.>" 4
  .IX Item "*<It's not known at assembler-time which emulation will be used.>"
  .RE
  .RS 4
  .Sp
! This implies the compiler was configured with \s-1GNU\s0 Binutils that implement
! \&\s-1PR31124\s0 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR).
  .RE
  .ie n .IP """_\|_AVR_RODATA_IN_RAM_\|_""" 4
! .el .IP "\f(CW_\|_AVR_RODATA_IN_RAM_\|_\fR" 4
  .IX Item "__AVR_RODATA_IN_RAM__"
  This macro is undefined when the code is compiled for a core architecture.
  .Sp
  When the code is compiled for a device, the macro is defined to 1
! when the \f(CW\*(C`.rodata\*(C'\fR sections for read-only data is located in \s-1RAM\s0;
  and defined to 0, otherwise.
  .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
! .el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
  .IX Item "__WITH_AVRLIBC__"
! The compiler is configured to be used together with AVR-Libc.
  See the \fB\-\-with\-avrlibc\fR configure option.
  .ie n .IP """_\|_HAVE_DOUBLE_MULTILIB_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_DOUBLE_MULTILIB_\|_\fR" 4
  .IX Item "__HAVE_DOUBLE_MULTILIB__"
  Defined if \fB\-mdouble=\fR acts as a multilib option.
  .ie n .IP """_\|_HAVE_DOUBLE32_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_DOUBLE32_\|_\fR" 4
  .IX Item "__HAVE_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_DOUBLE64_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_DOUBLE64_\|_\fR" 4
  .IX Item "__HAVE_DOUBLE64__"
  .PD
  Defined if the compiler supports 32\-bit double resp. 64\-bit double.
  The actual layout is specified by option \fB\-mdouble=\fR.
  .ie n .IP """_\|_DEFAULT_DOUBLE_\|_""" 4
! .el .IP "\f(CW_\|_DEFAULT_DOUBLE_\|_\fR" 4
  .IX Item "__DEFAULT_DOUBLE__"
  The size in bits of \f(CW\*(C`double\*(C'\fR if \fB\-mdouble=\fR is not set.
! To test the layout of \f(CW\*(C`double\*(C'\fR in a program, use the built-in
  macro \f(CW\*(C`_\|_SIZEOF_DOUBLE_\|_\*(C'\fR.
  .ie n .IP """_\|_HAVE_LONG_DOUBLE32_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_LONG_DOUBLE32_\|_\fR" 4
  .IX Item "__HAVE_LONG_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_LONG_DOUBLE64_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_LONG_DOUBLE64_\|_\fR" 4
  .IX Item "__HAVE_LONG_DOUBLE64__"
  .ie n .IP """_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_""" 4
! .el .IP "\f(CW_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_\fR" 4
  .IX Item "__HAVE_LONG_DOUBLE_MULTILIB__"
  .ie n .IP """_\|_DEFAULT_LONG_DOUBLE_\|_""" 4
! .el .IP "\f(CW_\|_DEFAULT_LONG_DOUBLE_\|_\fR" 4
  .IX Item "__DEFAULT_LONG_DOUBLE__"
  .PD
  Same as above, but for \f(CW\*(C`long double\*(C'\fR instead of \f(CW\*(C`double\*(C'\fR.
  .ie n .IP """_\|_WITH_DOUBLE_COMPARISON_\|_""" 4
! .el .IP "\f(CW_\|_WITH_DOUBLE_COMPARISON_\|_\fR" 4
  .IX Item "__WITH_DOUBLE_COMPARISON__"
  Reflects the \f(CW\*(C`\-\-with\-double\-comparison={tristate|bool|libf7}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR)
  and is defined to \f(CW2\fR or \f(CW3\fR.
  .ie n .IP """_\|_WITH_LIBF7_LIBGCC_\|_""" 4
! .el .IP "\f(CW_\|_WITH_LIBF7_LIBGCC_\|_\fR" 4
  .IX Item "__WITH_LIBF7_LIBGCC__"
  .PD 0
  .ie n .IP """_\|_WITH_LIBF7_MATH_\|_""" 4
! .el .IP "\f(CW_\|_WITH_LIBF7_MATH_\|_\fR" 4
  .IX Item "__WITH_LIBF7_MATH__"
  .ie n .IP """_\|_WITH_LIBF7_MATH_SYMBOLS_\|_""" 4
! .el .IP "\f(CW_\|_WITH_LIBF7_MATH_SYMBOLS_\|_\fR" 4
  .IX Item "__WITH_LIBF7_MATH_SYMBOLS__"
  .PD
  Reflects the \f(CW\*(C`\-\-with\-libf7={libgcc|math|math\-symbols}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR).
  .PP
! \s-1AVR\s0 Internal Options
  .IX Subsection "AVR Internal Options"
  .PP
  The following options are used internally by the compiler and to communicate
! between device specs files and the compiler proper. You don't need to set these
  options by hand, in particular they are not optimization options.
! Using these options in the wrong way may lead to sub-optimal or wrong code.
  They are documented for completeness, and in order to get a better
  understanding of
  device\ specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR)
  files.
! .IP "\fB\-mn\-flash=\fR\fInum\fR" 4
  .IX Item "-mn-flash=num"
  Assume that the flash memory has a size of \fInum\fR times 64 KiB.
! This determines which \f(CW\*(C`_\|_flash\f(CIN\f(CW\*(C'\fR address spaces are available.
! .IP "\fB\-mflmap\fR" 4
  .IX Item "-mflmap"
  The device has the \f(CW\*(C`FLMAP\*(C'\fR bit field located in special function
  register \f(CW\*(C`NVMCTRL_CTRLB\*(C'\fR.
! .IP "\fB\-mrmw\fR" 4
  .IX Item "-mrmw"
! Assume that the device supports the Read-Modify-Write
  instructions \f(CW\*(C`XCH\*(C'\fR, \f(CW\*(C`LAC\*(C'\fR, \f(CW\*(C`LAS\*(C'\fR and \f(CW\*(C`LAT\*(C'\fR.
! .IP "\fB\-mshort\-calls\fR" 4
  .IX Item "-mshort-calls"
  Assume that \f(CW\*(C`RJMP\*(C'\fR and \f(CW\*(C`RCALL\*(C'\fR can target the whole
  program memory. This option is used for multilib generation and selection
  for the devices from architecture \f(CW\*(C`avrxmega3\*(C'\fR.
! .IP "\fB\-mskip\-bug\fR" 4
  .IX Item "-mskip-bug"
  Generate code without skips (\f(CW\*(C`CPSE\*(C'\fR, \f(CW\*(C`SBRS\*(C'\fR,
  \&\f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR) over 32\-bit instructions.
! .IP "\fB\-msp8\fR" 4
  .IX Item "-msp8"
  Treat the stack pointer register as an 8\-bit register,
  i.e. assume the high byte of the stack pointer is zero.
--- 23697,23811 ----
  .el .IP "*<The device has the \f(CWNVMCTRL_CTRLB.FLMAP\fR bitfield.>" 4
  .IX Item "*<The device has the NVMCTRL_CTRLB.FLMAP bitfield.>"
  This applies to the AVR64* and AVR128* devices.
! .IP "*<It\*(Aqs not known at assembler\-time which emulation will be used.>" 4
  .IX Item "*<It's not known at assembler-time which emulation will be used.>"
  .RE
  .RS 4
  .Sp
! This implies the compiler was configured with GNU Binutils that implement
! PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR).
  .RE
  .ie n .IP """_\|_AVR_RODATA_IN_RAM_\|_""" 4
! .el .IP \f(CW_\|_AVR_RODATA_IN_RAM_\|_\fR 4
  .IX Item "__AVR_RODATA_IN_RAM__"
  This macro is undefined when the code is compiled for a core architecture.
  .Sp
  When the code is compiled for a device, the macro is defined to 1
! when the \f(CW\*(C`.rodata\*(C'\fR sections for read\-only data is located in RAM;
  and defined to 0, otherwise.
  .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
! .el .IP \f(CW_\|_WITH_AVRLIBC_\|_\fR 4
  .IX Item "__WITH_AVRLIBC__"
! The compiler is configured to be used together with AVR\-Libc.
  See the \fB\-\-with\-avrlibc\fR configure option.
  .ie n .IP """_\|_HAVE_DOUBLE_MULTILIB_\|_""" 4
! .el .IP \f(CW_\|_HAVE_DOUBLE_MULTILIB_\|_\fR 4
  .IX Item "__HAVE_DOUBLE_MULTILIB__"
  Defined if \fB\-mdouble=\fR acts as a multilib option.
  .ie n .IP """_\|_HAVE_DOUBLE32_\|_""" 4
! .el .IP \f(CW_\|_HAVE_DOUBLE32_\|_\fR 4
  .IX Item "__HAVE_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_DOUBLE64_\|_""" 4
! .el .IP \f(CW_\|_HAVE_DOUBLE64_\|_\fR 4
  .IX Item "__HAVE_DOUBLE64__"
  .PD
  Defined if the compiler supports 32\-bit double resp. 64\-bit double.
  The actual layout is specified by option \fB\-mdouble=\fR.
  .ie n .IP """_\|_DEFAULT_DOUBLE_\|_""" 4
! .el .IP \f(CW_\|_DEFAULT_DOUBLE_\|_\fR 4
  .IX Item "__DEFAULT_DOUBLE__"
  The size in bits of \f(CW\*(C`double\*(C'\fR if \fB\-mdouble=\fR is not set.
! To test the layout of \f(CW\*(C`double\*(C'\fR in a program, use the built\-in
  macro \f(CW\*(C`_\|_SIZEOF_DOUBLE_\|_\*(C'\fR.
  .ie n .IP """_\|_HAVE_LONG_DOUBLE32_\|_""" 4
! .el .IP \f(CW_\|_HAVE_LONG_DOUBLE32_\|_\fR 4
  .IX Item "__HAVE_LONG_DOUBLE32__"
  .PD 0
  .ie n .IP """_\|_HAVE_LONG_DOUBLE64_\|_""" 4
! .el .IP \f(CW_\|_HAVE_LONG_DOUBLE64_\|_\fR 4
  .IX Item "__HAVE_LONG_DOUBLE64__"
  .ie n .IP """_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_""" 4
! .el .IP \f(CW_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_\fR 4
  .IX Item "__HAVE_LONG_DOUBLE_MULTILIB__"
  .ie n .IP """_\|_DEFAULT_LONG_DOUBLE_\|_""" 4
! .el .IP \f(CW_\|_DEFAULT_LONG_DOUBLE_\|_\fR 4
  .IX Item "__DEFAULT_LONG_DOUBLE__"
  .PD
  Same as above, but for \f(CW\*(C`long double\*(C'\fR instead of \f(CW\*(C`double\*(C'\fR.
  .ie n .IP """_\|_WITH_DOUBLE_COMPARISON_\|_""" 4
! .el .IP \f(CW_\|_WITH_DOUBLE_COMPARISON_\|_\fR 4
  .IX Item "__WITH_DOUBLE_COMPARISON__"
  Reflects the \f(CW\*(C`\-\-with\-double\-comparison={tristate|bool|libf7}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR)
  and is defined to \f(CW2\fR or \f(CW3\fR.
  .ie n .IP """_\|_WITH_LIBF7_LIBGCC_\|_""" 4
! .el .IP \f(CW_\|_WITH_LIBF7_LIBGCC_\|_\fR 4
  .IX Item "__WITH_LIBF7_LIBGCC__"
  .PD 0
  .ie n .IP """_\|_WITH_LIBF7_MATH_\|_""" 4
! .el .IP \f(CW_\|_WITH_LIBF7_MATH_\|_\fR 4
  .IX Item "__WITH_LIBF7_MATH__"
  .ie n .IP """_\|_WITH_LIBF7_MATH_SYMBOLS_\|_""" 4
! .el .IP \f(CW_\|_WITH_LIBF7_MATH_SYMBOLS_\|_\fR 4
  .IX Item "__WITH_LIBF7_MATH_SYMBOLS__"
  .PD
  Reflects the \f(CW\*(C`\-\-with\-libf7={libgcc|math|math\-symbols}\*(C'\fR
  configure\ option (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR).
  .PP
! AVR Internal Options
  .IX Subsection "AVR Internal Options"
  .PP
  The following options are used internally by the compiler and to communicate
! between device specs files and the compiler proper. You don\*(Aqt need to set these
  options by hand, in particular they are not optimization options.
! Using these options in the wrong way may lead to sub\-optimal or wrong code.
  They are documented for completeness, and in order to get a better
  understanding of
  device\ specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR)
  files.
! .IP \fB\-mn\-flash=\fR\fInum\fR 4
  .IX Item "-mn-flash=num"
  Assume that the flash memory has a size of \fInum\fR times 64 KiB.
! This determines which \f(CW\*(C`_\|_flash\fR\f(CIN\fR\f(CW\*(C'\fR address spaces are available.
! .IP \fB\-mflmap\fR 4
  .IX Item "-mflmap"
  The device has the \f(CW\*(C`FLMAP\*(C'\fR bit field located in special function
  register \f(CW\*(C`NVMCTRL_CTRLB\*(C'\fR.
! .IP \fB\-mrmw\fR 4
  .IX Item "-mrmw"
! Assume that the device supports the Read\-Modify\-Write
  instructions \f(CW\*(C`XCH\*(C'\fR, \f(CW\*(C`LAC\*(C'\fR, \f(CW\*(C`LAS\*(C'\fR and \f(CW\*(C`LAT\*(C'\fR.
! .IP \fB\-mshort\-calls\fR 4
  .IX Item "-mshort-calls"
  Assume that \f(CW\*(C`RJMP\*(C'\fR and \f(CW\*(C`RCALL\*(C'\fR can target the whole
  program memory. This option is used for multilib generation and selection
  for the devices from architecture \f(CW\*(C`avrxmega3\*(C'\fR.
! .IP \fB\-mskip\-bug\fR 4
  .IX Item "-mskip-bug"
  Generate code without skips (\f(CW\*(C`CPSE\*(C'\fR, \f(CW\*(C`SBRS\*(C'\fR,
  \&\f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR) over 32\-bit instructions.
! .IP \fB\-msp8\fR 4
  .IX Item "-msp8"
  Treat the stack pointer register as an 8\-bit register,
  i.e. assume the high byte of the stack pointer is zero.
*************** These architectures mix devices with and
*** 23880,23886 ****
  .PP
  \fIBlackfin Options\fR
  .IX Subsection "Blackfin Options"
! .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
  .IX Item "-mcpu=cpu[-sirevision]"
  Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
  can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
--- 23815,23821 ----
  .PP
  \fIBlackfin Options\fR
  .IX Subsection "Blackfin Options"
! .IP \fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 4
  .IX Item "-mcpu=cpu[-sirevision]"
  Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
  can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
*************** hexadecimal digits representing the majo
*** 23900,24018 ****
  revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
  is not defined.  If \fIsirevision\fR is \fBany\fR, the
  \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
! If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
  silicon revision of the targeted Blackfin processor.
  .Sp
! \&\s-1GCC\s0 defines a preprocessor macro for the specified \fIcpu\fR.
! For the \fBbfin-elf\fR toolchain, this option causes the hardware \s-1BSP\s0
  provided by libgloss to be linked in if \fB\-msim\fR is not given.
  .Sp
  Without this option, \fBbf532\fR is used as the processor by default.
  .Sp
  Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
  only the preprocessor macro is defined.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
! the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
! has effect only for \fBbfin-elf\fR toolchain.
  Certain other options, such as \fB\-mid\-shared\-library\fR and
  \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
! .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-momit-leaf-frame-pointer"
! Don't keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up and restore frame pointers and
  makes an extra register available in leaf functions.
! .IP "\fB\-mspecld\-anomaly\fR" 4
  .IX Item "-mspecld-anomaly"
  When enabled, the compiler ensures that the generated code does not
  contain speculative loads after jump instructions. If this option is used,
  \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
! .IP "\fB\-mno\-specld\-anomaly\fR" 4
  .IX Item "-mno-specld-anomaly"
! Don't generate extra code to prevent speculative loads from occurring.
! .IP "\fB\-mcsync\-anomaly\fR" 4
  .IX Item "-mcsync-anomaly"
  When enabled, the compiler ensures that the generated code does not
! contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
  If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
! .IP "\fB\-mno\-csync\-anomaly\fR" 4
  .IX Item "-mno-csync-anomaly"
! Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
  occurring too soon after a conditional branch.
! .IP "\fB\-mlow64k\fR" 4
  .IX Item "-mlow64k"
  When enabled, the compiler is free to take advantage of the knowledge that
  the entire program fits into the low 64k of memory.
! .IP "\fB\-mno\-low64k\fR" 4
  .IX Item "-mno-low64k"
  Assume that the program is arbitrarily large.  This is the default.
! .IP "\fB\-mstack\-check\-l1\fR" 4
  .IX Item "-mstack-check-l1"
  Do stack checking using information placed into L1 scratchpad memory by the
  uClinux kernel.
! .IP "\fB\-mid\-shared\-library\fR" 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library \s-1ID\s0 method.
  This allows for execute in place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
! .IP "\fB\-mno\-id\-shared\-library\fR" 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn't assume ID-based shared libraries are being used.
  This is the default.
! .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
  .IX Item "-mleaf-id-shared-library"
! Generate code that supports shared libraries via the library \s-1ID\s0 method,
! but assumes that this library or executable won't link against any other
! \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
  and calls.
! .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
  .IX Item "-mno-leaf-id-shared-library"
! Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
  libraries.  Slower code is generated for jump and call insns.
! .IP "\fB\-mshared\-library\-id=n\fR" 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library but is no more space\- or time-efficient than omitting this option.
! .IP "\fB\-msep\-data\fR" 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
  area of memory from the text segment.  This allows for execute in place in
  an environment without virtual memory management by eliminating relocations
  against the text section.
! .IP "\fB\-mno\-sep\-data\fR" 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 24\-bit addressing range of the offset-based
  version of subroutine call instruction.
  .Sp
  This feature is not enabled by default.  Specifying
  \&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
  switches have no effect on how the compiler generates code to handle
  function calls via function pointers.
! .IP "\fB\-mfast\-fp\fR" 4
  .IX Item "-mfast-fp"
! Link with the fast floating-point library. This library relaxes some of
! the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
! Not-a-Number (\s-1NAN\s0), in the interest of performance.
! .IP "\fB\-minline\-plt\fR" 4
  .IX Item "-minline-plt"
! Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! .IP "\fB\-mmulticore\fR" 4
  .IX Item "-mmulticore"
  Build a standalone application for multicore Blackfin processors. 
  This option causes proper start files and link scripts supporting 
--- 23835,23953 ----
  revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
  is not defined.  If \fIsirevision\fR is \fBany\fR, the
  \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
! If this optional \fIsirevision\fR is not used, GCC assumes the latest known
  silicon revision of the targeted Blackfin processor.
  .Sp
! GCC defines a preprocessor macro for the specified \fIcpu\fR.
! For the \fBbfin\-elf\fR toolchain, this option causes the hardware BSP
  provided by libgloss to be linked in if \fB\-msim\fR is not given.
  .Sp
  Without this option, \fBbf532\fR is used as the processor by default.
  .Sp
  Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
  only the preprocessor macro is defined.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
! the simulator BSP provided by libgloss to be linked in.  This option
! has effect only for \fBbfin\-elf\fR toolchain.
  Certain other options, such as \fB\-mid\-shared\-library\fR and
  \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
! .IP \fB\-momit\-leaf\-frame\-pointer\fR 4
  .IX Item "-momit-leaf-frame-pointer"
! Don\*(Aqt keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up and restore frame pointers and
  makes an extra register available in leaf functions.
! .IP \fB\-mspecld\-anomaly\fR 4
  .IX Item "-mspecld-anomaly"
  When enabled, the compiler ensures that the generated code does not
  contain speculative loads after jump instructions. If this option is used,
  \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
! .IP \fB\-mno\-specld\-anomaly\fR 4
  .IX Item "-mno-specld-anomaly"
! Don\*(Aqt generate extra code to prevent speculative loads from occurring.
! .IP \fB\-mcsync\-anomaly\fR 4
  .IX Item "-mcsync-anomaly"
  When enabled, the compiler ensures that the generated code does not
! contain CSYNC or SSYNC instructions too soon after conditional branches.
  If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
! .IP \fB\-mno\-csync\-anomaly\fR 4
  .IX Item "-mno-csync-anomaly"
! Don\*(Aqt generate extra code to prevent CSYNC or SSYNC instructions from
  occurring too soon after a conditional branch.
! .IP \fB\-mlow64k\fR 4
  .IX Item "-mlow64k"
  When enabled, the compiler is free to take advantage of the knowledge that
  the entire program fits into the low 64k of memory.
! .IP \fB\-mno\-low64k\fR 4
  .IX Item "-mno-low64k"
  Assume that the program is arbitrarily large.  This is the default.
! .IP \fB\-mstack\-check\-l1\fR 4
  .IX Item "-mstack-check-l1"
  Do stack checking using information placed into L1 scratchpad memory by the
  uClinux kernel.
! .IP \fB\-mid\-shared\-library\fR 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library ID method.
  This allows for execute in place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! With a \fBbfin\-elf\fR target, this option implies \fB\-msim\fR.
! .IP \fB\-mno\-id\-shared\-library\fR 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn\*(Aqt assume ID\-based shared libraries are being used.
  This is the default.
! .IP \fB\-mleaf\-id\-shared\-library\fR 4
  .IX Item "-mleaf-id-shared-library"
! Generate code that supports shared libraries via the library ID method,
! but assumes that this library or executable won\*(Aqt link against any other
! ID shared libraries.  That allows the compiler to use faster code for jumps
  and calls.
! .IP \fB\-mno\-leaf\-id\-shared\-library\fR 4
  .IX Item "-mno-leaf-id-shared-library"
! Do not assume that the code being compiled won\*(Aqt link against any ID shared
  libraries.  Slower code is generated for jump and call insns.
! .IP \fB\-mshared\-library\-id=n\fR 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID\-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library but is no more space\- or time\-efficient than omitting this option.
! .IP \fB\-msep\-data\fR 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
  area of memory from the text segment.  This allows for execute in place in
  an environment without virtual memory management by eliminating relocations
  against the text section.
! .IP \fB\-mno\-sep\-data\fR 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Tells the compiler to perform function calls by first loading the
  address of the function into a register and then performing a subroutine
  call on this register.  This switch is needed if the target function
! lies outside of the 24\-bit addressing range of the offset\-based
  version of subroutine call instruction.
  .Sp
  This feature is not enabled by default.  Specifying
  \&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
  switches have no effect on how the compiler generates code to handle
  function calls via function pointers.
! .IP \fB\-mfast\-fp\fR 4
  .IX Item "-mfast-fp"
! Link with the fast floating\-point library. This library relaxes some of
! the IEEE floating\-point standard\*(Aqs rules for checking inputs against
! Not\-a\-Number (NAN), in the interest of performance.
! .IP \fB\-minline\-plt\fR 4
  .IX Item "-minline-plt"
! Enable inlining of PLT entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! .IP \fB\-mmulticore\fR 4
  .IX Item "-mmulticore"
  Build a standalone application for multicore Blackfin processors. 
  This option causes proper start files and link scripts supporting 
*************** multicore to be used, and defines the ma
*** 24020,24054 ****
  It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
  .Sp
  This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
! selects the one-application-per-core programming model.  Without
  \&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
  programming model is used. In this model, the main function of Core B
  should be named as \f(CW\*(C`coreb_main\*(C'\fR.
  .Sp
! If this option is not used, the single-core application programming
  model is used.
! .IP "\fB\-mcorea\fR" 4
  .IX Item "-mcorea"
! Build a standalone application for Core A of \s-1BF561\s0 when using
! the one-application-per-core programming model. Proper start files
  and link scripts are used to support Core A, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP "\fB\-mcoreb\fR" 4
  .IX Item "-mcoreb"
! Build a standalone application for Core B of \s-1BF561\s0 when using
! the one-application-per-core programming model. Proper start files
  and link scripts are used to support Core B, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
  should be used instead of \f(CW\*(C`main\*(C'\fR. 
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP "\fB\-msdram\fR" 4
  .IX Item "-msdram"
! Build a standalone application for \s-1SDRAM.\s0 Proper start files and
! link scripts are used to put the application into \s-1SDRAM,\s0 and the macro
  \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
! The loader should initialize \s-1SDRAM\s0 before loading the application.
! .IP "\fB\-micplb\fR" 4
  .IX Item "-micplb"
  Assume that ICPLBs are enabled at run time.  This has an effect on certain
  anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
--- 23955,23989 ----
  It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
  .Sp
  This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
! selects the one\-application\-per\-core programming model.  Without
  \&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
  programming model is used. In this model, the main function of Core B
  should be named as \f(CW\*(C`coreb_main\*(C'\fR.
  .Sp
! If this option is not used, the single\-core application programming
  model is used.
! .IP \fB\-mcorea\fR 4
  .IX Item "-mcorea"
! Build a standalone application for Core A of BF561 when using
! the one\-application\-per\-core programming model. Proper start files
  and link scripts are used to support Core A, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP \fB\-mcoreb\fR 4
  .IX Item "-mcoreb"
! Build a standalone application for Core B of BF561 when using
! the one\-application\-per\-core programming model. Proper start files
  and link scripts are used to support Core B, and the macro
  \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
  should be used instead of \f(CW\*(C`main\*(C'\fR. 
  This option can only be used in conjunction with \fB\-mmulticore\fR.
! .IP \fB\-msdram\fR 4
  .IX Item "-msdram"
! Build a standalone application for SDRAM. Proper start files and
! link scripts are used to put the application into SDRAM, and the macro
  \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
! The loader should initialize SDRAM before loading the application.
! .IP \fB\-micplb\fR 4
  .IX Item "-micplb"
  Assume that ICPLBs are enabled at run time.  This has an effect on certain
  anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
*************** are enabled; for standalone applications
*** 24056,24090 ****
  .PP
  \fIC6X Options\fR
  .IX Subsection "C6X Options"
! .IP "\fB\-march=\fR\fIname\fR" 4
  .IX Item "-march=name"
! This specifies the name of the target architecture.  \s-1GCC\s0 uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBc62x\fR,
  \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.  This is the default.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
! .IP "\fB\-msdata=default\fR" 4
  .IX Item "-msdata=default"
  Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
  which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
  global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
! to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read-only data into the
  \&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
  pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
! .IP "\fB\-msdata=all\fR" 4
  .IX Item "-msdata=all"
  Put all data, not just small objects, into the sections reserved for
  small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
  access them.
! .IP "\fB\-msdata=none\fR" 4
  .IX Item "-msdata=none"
  Make no use of the sections reserved for small data, and use absolute
  addresses to access all data.  Put all initialized global and static
--- 23991,24025 ----
  .PP
  \fIC6X Options\fR
  .IX Subsection "C6X Options"
! .IP \fB\-march=\fR\fIname\fR 4
  .IX Item "-march=name"
! This specifies the name of the target architecture.  GCC uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBc62x\fR,
  \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.  This is the default.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
! .IP \fB\-msdata=default\fR 4
  .IX Item "-msdata=default"
  Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
  which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
  global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
! to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read\-only data into the
  \&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
  pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
! .IP \fB\-msdata=all\fR 4
  .IX Item "-msdata=all"
  Put all data, not just small objects, into the sections reserved for
  small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
  access them.
! .IP \fB\-msdata=none\fR 4
  .IX Item "-msdata=none"
  Make no use of the sections reserved for small data, and use absolute
  addresses to access all data.  Put all initialized global and static
*************** data in the \f(CW\*(C`.fardata\*(C'\fR s
*** 24092,24215 ****
  \&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
  section.
  .PP
! \fI\s-1CRIS\s0 Options\fR
  .IX Subsection "CRIS Options"
  .PP
! These options are defined specifically for the \s-1CRIS\s0 ports.
! .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
  .IX Item "-march=architecture-type"
  .PD 0
! .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
  .IX Item "-mcpu=architecture-type"
  .PD
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
! respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX.\s0
  Default is \fBv0\fR.
! .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
  .IX Item "-mtune=architecture-type"
! Tune to \fIarchitecture-type\fR everything applicable about the generated
! code, except for the \s-1ABI\s0 and the set of available instructions.  The
! choices for \fIarchitecture-type\fR are the same as for
! \&\fB\-march=\fR\fIarchitecture-type\fR.
! .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
  .IX Item "-mmax-stack-frame=n"
  Warn when the stack frame of a function exceeds \fIn\fR bytes.
! .IP "\fB\-metrax4\fR" 4
  .IX Item "-metrax4"
  .PD 0
! .IP "\fB\-metrax100\fR" 4
  .IX Item "-metrax100"
  .PD
  The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
  \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
! .IP "\fB\-mmul\-bug\-workaround\fR" 4
  .IX Item "-mmul-bug-workaround"
  .PD 0
! .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
  .IX Item "-mno-mul-bug-workaround"
  .PD
! Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
  models where it applies.  This option is disabled by default.
! .IP "\fB\-mpdebug\fR" 4
  .IX Item "-mpdebug"
! Enable CRIS-specific verbose debug-related information in the assembly
  code.  This option also has the effect of turning off the \fB#NO_APP\fR
! formatted-code indicator to the assembler at the beginning of the
  assembly file.
! .IP "\fB\-mcc\-init\fR" 4
  .IX Item "-mcc-init"
! Do not use condition-code results from previous instruction; always emit
  compare and test instructions before use of condition codes.
! .IP "\fB\-mno\-side\-effects\fR" 4
  .IX Item "-mno-side-effects"
  Do not emit instructions with side effects in addressing modes other than
! post-increment.
! .IP "\fB\-mstack\-align\fR" 4
  .IX Item "-mstack-align"
  .PD 0
! .IP "\fB\-mno\-stack\-align\fR" 4
  .IX Item "-mno-stack-align"
! .IP "\fB\-mdata\-align\fR" 4
  .IX Item "-mdata-align"
! .IP "\fB\-mno\-data\-align\fR" 4
  .IX Item "-mno-data-align"
! .IP "\fB\-mconst\-align\fR" 4
  .IX Item "-mconst-align"
! .IP "\fB\-mno\-const\-align\fR" 4
  .IX Item "-mno-const-align"
  .PD
  These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
  stack frame, individual data and constants to be aligned for the maximum
! single data access size for the chosen \s-1CPU\s0 model.  The default is to
! arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
  not affected by these options.
! .IP "\fB\-m32\-bit\fR" 4
  .IX Item "-m32-bit"
  .PD 0
! .IP "\fB\-m16\-bit\fR" 4
  .IX Item "-m16-bit"
! .IP "\fB\-m8\-bit\fR" 4
  .IX Item "-m8-bit"
  .PD
! Similar to the stack\- data\- and const-align options above, these options
  arrange for stack frame, writable data and constants to all be 32\-bit,
  16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
! .IP "\fB\-mno\-prologue\-epilogue\fR" 4
  .IX Item "-mno-prologue-epilogue"
  .PD 0
! .IP "\fB\-mprologue\-epilogue\fR" 4
  .IX Item "-mprologue-epilogue"
  .PD
  With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
  epilogue which set up the stack frame are omitted and no return
  instructions or return sequences are generated in the code.  Use this
  option only together with visual inspection of the compiled code: no
! warnings or errors are generated when call-saved registers must be saved,
  or storage for local variables needs to be allocated.
! .IP "\fB\-melf\fR" 4
  .IX Item "-melf"
! Legacy no-op option.
! .IP "\fB\-sim\fR" 4
  .IX Item "-sim"
  This option arranges
! to link with input-output functions from a simulator library.  Code,
! initialized data and zero-initialized data are allocated consecutively.
! .IP "\fB\-sim2\fR" 4
  .IX Item "-sim2"
  Like \fB\-sim\fR, but pass linker options to locate initialized data at
! 0x40000000 and zero-initialized data at 0x80000000.
  .PP
  \fIC\-SKY Options\fR
  .IX Subsection "C-SKY Options"
  .PP
! \&\s-1GCC\s0 supports these options when compiling for C\-SKY V2 processors.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Specify the C\-SKY target architecture.  Valid values for \fIarch\fR are:
  \&\fBck801\fR, \fBck802\fR, \fBck803\fR, \fBck807\fR, and \fBck810\fR.
  The default is \fBck810\fR.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Specify the C\-SKY target processor.  Valid values for \fIcpu\fR are:
  \&\fBck801\fR, \fBck801t\fR,
--- 24027,24150 ----
  \&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
  section.
  .PP
! \fICRIS Options\fR
  .IX Subsection "CRIS Options"
  .PP
! These options are defined specifically for the CRIS ports.
! .IP \fB\-march=\fR\fIarchitecture\-type\fR 4
  .IX Item "-march=architecture-type"
  .PD 0
! .IP \fB\-mcpu=\fR\fIarchitecture\-type\fR 4
  .IX Item "-mcpu=architecture-type"
  .PD
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture\-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
! respectively ETRAX\ 4, ETRAX\ 100, and ETRAX\ 100\ LX.
  Default is \fBv0\fR.
! .IP \fB\-mtune=\fR\fIarchitecture\-type\fR 4
  .IX Item "-mtune=architecture-type"
! Tune to \fIarchitecture\-type\fR everything applicable about the generated
! code, except for the ABI and the set of available instructions.  The
! choices for \fIarchitecture\-type\fR are the same as for
! \&\fB\-march=\fR\fIarchitecture\-type\fR.
! .IP \fB\-mmax\-stack\-frame=\fR\fIn\fR 4
  .IX Item "-mmax-stack-frame=n"
  Warn when the stack frame of a function exceeds \fIn\fR bytes.
! .IP \fB\-metrax4\fR 4
  .IX Item "-metrax4"
  .PD 0
! .IP \fB\-metrax100\fR 4
  .IX Item "-metrax100"
  .PD
  The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
  \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
! .IP \fB\-mmul\-bug\-workaround\fR 4
  .IX Item "-mmul-bug-workaround"
  .PD 0
! .IP \fB\-mno\-mul\-bug\-workaround\fR 4
  .IX Item "-mno-mul-bug-workaround"
  .PD
! Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for CPU
  models where it applies.  This option is disabled by default.
! .IP \fB\-mpdebug\fR 4
  .IX Item "-mpdebug"
! Enable CRIS\-specific verbose debug\-related information in the assembly
  code.  This option also has the effect of turning off the \fB#NO_APP\fR
! formatted\-code indicator to the assembler at the beginning of the
  assembly file.
! .IP \fB\-mcc\-init\fR 4
  .IX Item "-mcc-init"
! Do not use condition\-code results from previous instruction; always emit
  compare and test instructions before use of condition codes.
! .IP \fB\-mno\-side\-effects\fR 4
  .IX Item "-mno-side-effects"
  Do not emit instructions with side effects in addressing modes other than
! post\-increment.
! .IP \fB\-mstack\-align\fR 4
  .IX Item "-mstack-align"
  .PD 0
! .IP \fB\-mno\-stack\-align\fR 4
  .IX Item "-mno-stack-align"
! .IP \fB\-mdata\-align\fR 4
  .IX Item "-mdata-align"
! .IP \fB\-mno\-data\-align\fR 4
  .IX Item "-mno-data-align"
! .IP \fB\-mconst\-align\fR 4
  .IX Item "-mconst-align"
! .IP \fB\-mno\-const\-align\fR 4
  .IX Item "-mno-const-align"
  .PD
  These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
  stack frame, individual data and constants to be aligned for the maximum
! single data access size for the chosen CPU model.  The default is to
! arrange for 32\-bit alignment.  ABI details such as structure layout are
  not affected by these options.
! .IP \fB\-m32\-bit\fR 4
  .IX Item "-m32-bit"
  .PD 0
! .IP \fB\-m16\-bit\fR 4
  .IX Item "-m16-bit"
! .IP \fB\-m8\-bit\fR 4
  .IX Item "-m8-bit"
  .PD
! Similar to the stack\- data\- and const\-align options above, these options
  arrange for stack frame, writable data and constants to all be 32\-bit,
  16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
! .IP \fB\-mno\-prologue\-epilogue\fR 4
  .IX Item "-mno-prologue-epilogue"
  .PD 0
! .IP \fB\-mprologue\-epilogue\fR 4
  .IX Item "-mprologue-epilogue"
  .PD
  With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
  epilogue which set up the stack frame are omitted and no return
  instructions or return sequences are generated in the code.  Use this
  option only together with visual inspection of the compiled code: no
! warnings or errors are generated when call\-saved registers must be saved,
  or storage for local variables needs to be allocated.
! .IP \fB\-melf\fR 4
  .IX Item "-melf"
! Legacy no\-op option.
! .IP \fB\-sim\fR 4
  .IX Item "-sim"
  This option arranges
! to link with input\-output functions from a simulator library.  Code,
! initialized data and zero\-initialized data are allocated consecutively.
! .IP \fB\-sim2\fR 4
  .IX Item "-sim2"
  Like \fB\-sim\fR, but pass linker options to locate initialized data at
! 0x40000000 and zero\-initialized data at 0x80000000.
  .PP
  \fIC\-SKY Options\fR
  .IX Subsection "C-SKY Options"
  .PP
! GCC supports these options when compiling for C\-SKY V2 processors.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Specify the C\-SKY target architecture.  Valid values for \fIarch\fR are:
  \&\fBck801\fR, \fBck802\fR, \fBck803\fR, \fBck807\fR, and \fBck810\fR.
  The default is \fBck810\fR.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Specify the C\-SKY target processor.  Valid values for \fIcpu\fR are:
  \&\fBck801\fR, \fBck801t\fR,
*************** Specify the C\-SKY target processor.  Va
*** 24228,24432 ****
  \&\fBck810e\fR, \fBck810et\fR, \fBck810ef\fR, \fBck810eft\fR,
  \&\fBck810\fR, \fBck810v\fR, \fBck810f\fR, \fBck810t\fR, \fBck810fv\fR,
  \&\fBck810tv\fR, \fBck810ft\fR, and \fBck810ftv\fR.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP "\fB\-EB\fR" 4
  .IX Item "-EB"
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! .IP "\fB\-EL\fR" 4
  .IX Item "-EL"
  .PD
! Select big\- or little-endian code.  The default is little-endian.
! .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
! library calls for floating-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating-point
! instructions, but still uses the soft-float calling conventions.
! \&\fBhard\fR allows generation of floating-point instructions
! and uses FPU-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard-float and soft-float ABIs are not link-compatible; you must
! compile your entire program with the same \s-1ABI,\s0 and link with a
  compatible set of libraries.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Select hardware or software floating-point implementations.
  The default is soft float.
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
  .PD 0
! .IP "\fB\-mno\-double\-float\fR" 4
  .IX Item "-mno-double-float"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
! double-precision float instructions.  This is the default except
! when compiling for \s-1CK803.\s0
! .IP "\fB\-mfdivdu\fR" 4
  .IX Item "-mfdivdu"
  .PD 0
! .IP "\fB\-mno\-fdivdu\fR" 4
  .IX Item "-mno-fdivdu"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
  \&\f(CW\*(C`frecipd\*(C'\fR, \f(CW\*(C`fsqrtd\*(C'\fR, and \f(CW\*(C`fdivd\*(C'\fR instructions.
! This is the default except when compiling for \s-1CK803.\s0
! .IP "\fB\-mfpu=\fR\fIfpu\fR" 4
  .IX Item "-mfpu=fpu"
! Select the floating-point processor.  This option can only be used with
  \&\fB\-mhard\-float\fR.
  Values for \fIfpu\fR are
  \&\fBfpv2_sf\fR (equivalent to \fB\-mno\-double\-float \-mno\-fdivdu\fR),
  \&\fBfpv2\fR (\fB\-mdouble\-float \-mno\-divdu\fR), and
  \&\fBfpv2_divd\fR (\fB\-mdouble\-float \-mdivdu\fR).
! .IP "\fB\-melrw\fR" 4
  .IX Item "-melrw"
  .PD 0
! .IP "\fB\-mno\-elrw\fR" 4
  .IX Item "-mno-elrw"
  .PD
  Enable the extended \f(CW\*(C`lrw\*(C'\fR instruction.  This option defaults to on
! for \s-1CK801\s0 and off otherwise.
! .IP "\fB\-mistack\fR" 4
  .IX Item "-mistack"
  .PD 0
! .IP "\fB\-mno\-istack\fR" 4
  .IX Item "-mno-istack"
  .PD
  Enable interrupt stack instructions; the default is off.
  .Sp
  The \fB\-mistack\fR option is required to handle the
  \&\f(CW\*(C`interrupt\*(C'\fR and \f(CW\*(C`isr\*(C'\fR function attributes.
! .IP "\fB\-mmp\fR" 4
  .IX Item "-mmp"
  Enable multiprocessor instructions; the default is off.
! .IP "\fB\-mcp\fR" 4
  .IX Item "-mcp"
  Enable coprocessor instructions; the default is off.
! .IP "\fB\-mcache\fR" 4
  .IX Item "-mcache"
  Enable coprocessor instructions; the default is off.
! .IP "\fB\-msecurity\fR" 4
  .IX Item "-msecurity"
  Enable C\-SKY security instructions; the default is off.
! .IP "\fB\-mtrust\fR" 4
  .IX Item "-mtrust"
  Enable C\-SKY trust instructions; the default is off.
! .IP "\fB\-mdsp\fR" 4
  .IX Item "-mdsp"
  .PD 0
! .IP "\fB\-medsp\fR" 4
  .IX Item "-medsp"
! .IP "\fB\-mvdsp\fR" 4
  .IX Item "-mvdsp"
  .PD
! Enable C\-SKY \s-1DSP,\s0 Enhanced \s-1DSP,\s0 or Vector \s-1DSP\s0 instructions, respectively.
  All of these options default to off.
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
  Generate divide instructions.  Default is off.
! .IP "\fB\-msmart\fR" 4
  .IX Item "-msmart"
  .PD 0
! .IP "\fB\-mno\-smart\fR" 4
  .IX Item "-mno-smart"
  .PD
  Generate code for Smart Mode, using only registers numbered 0\-7 to allow
! use of 16\-bit instructions.  This option is ignored for \s-1CK801\s0 where this
! is the required behavior, and it defaults to on for \s-1CK802.\s0
  For other targets, the default is off.
! .IP "\fB\-mhigh\-registers\fR" 4
  .IX Item "-mhigh-registers"
  .PD 0
! .IP "\fB\-mno\-high\-registers\fR" 4
  .IX Item "-mno-high-registers"
  .PD
  Generate code using the high registers numbered 16\-31.  This option
! is not supported on \s-1CK801, CK802,\s0 or \s-1CK803,\s0 and is enabled by default
  for other processors.
! .IP "\fB\-manchor\fR" 4
  .IX Item "-manchor"
  .PD 0
! .IP "\fB\-mno\-anchor\fR" 4
  .IX Item "-mno-anchor"
  .PD
  Generate code using global anchor symbol addresses.
! .IP "\fB\-mpushpop\fR" 4
  .IX Item "-mpushpop"
  .PD 0
! .IP "\fB\-mno\-pushpop\fR" 4
  .IX Item "-mno-pushpop"
  .PD
  Generate code using \f(CW\*(C`push\*(C'\fR and \f(CW\*(C`pop\*(C'\fR instructions.  This option
  defaults to on.
! .IP "\fB\-mmultiple\-stld\fR" 4
  .IX Item "-mmultiple-stld"
  .PD 0
! .IP "\fB\-mstm\fR" 4
  .IX Item "-mstm"
! .IP "\fB\-mno\-multiple\-stld\fR" 4
  .IX Item "-mno-multiple-stld"
! .IP "\fB\-mno\-stm\fR" 4
  .IX Item "-mno-stm"
  .PD
  Generate code using \f(CW\*(C`stm\*(C'\fR and \f(CW\*(C`ldm\*(C'\fR instructions.  This option
! isn't supported on \s-1CK801\s0 but is enabled by default on other processors.
! .IP "\fB\-mconstpool\fR" 4
  .IX Item "-mconstpool"
  .PD 0
! .IP "\fB\-mno\-constpool\fR" 4
  .IX Item "-mno-constpool"
  .PD
  Create constant pools in the compiler instead of deferring it to the
  assembler.  This option is the default and required for correct code
! generation on \s-1CK801\s0 and \s-1CK802,\s0 and is optional on other processors.
! .IP "\fB\-mstack\-size\fR" 4
  .IX Item "-mstack-size"
  .PD 0
! .IP "\fB\-mno\-stack\-size\fR" 4
  .IX Item "-mno-stack-size"
  .PD
  Emit \f(CW\*(C`.stack_size\*(C'\fR directives for each function in the assembly
  output.  This option defaults to off.
! .IP "\fB\-mccrt\fR" 4
  .IX Item "-mccrt"
  .PD 0
! .IP "\fB\-mno\-ccrt\fR" 4
  .IX Item "-mno-ccrt"
  .PD
  Generate code for the C\-SKY compiler runtime instead of libgcc.  This
  option defaults to off.
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
  .IX Item "-mbranch-cost=n"
  Set the branch costs to roughly \f(CW\*(C`n\*(C'\fR instructions.  The default is 1.
! .IP "\fB\-msched\-prolog\fR" 4
  .IX Item "-msched-prolog"
  .PD 0
! .IP "\fB\-mno\-sched\-prolog\fR" 4
  .IX Item "-mno-sched-prolog"
  .PD
  Permit scheduling of function prologue and epilogue sequences.  Using
! this option can result in code that is not compliant with the C\-SKY V2 \s-1ABI\s0
  prologue requirements and that cannot be debugged or backtraced.
  It is disabled by default.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Links the library libsemi.a which is in compatible with simulator. Applicable
! to \s-1ELF\s0 compiler only.
  .PP
  \fIDarwin Options\fR
  .IX Subsection "Darwin Options"
--- 24163,24367 ----
  \&\fBck810e\fR, \fBck810et\fR, \fBck810ef\fR, \fBck810eft\fR,
  \&\fBck810\fR, \fBck810v\fR, \fBck810f\fR, \fBck810t\fR, \fBck810fv\fR,
  \&\fBck810tv\fR, \fBck810ft\fR, and \fBck810ftv\fR.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD 0
! .IP \fB\-EB\fR 4
  .IX Item "-EB"
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! .IP \fB\-EL\fR 4
  .IX Item "-EL"
  .PD
! Select big\- or little\-endian code.  The default is little\-endian.
! .IP \fB\-mfloat\-abi=\fR\fIname\fR 4
  .IX Item "-mfloat-abi=name"
! Specifies which floating\-point ABI to use.  Permissible values
  are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
  .Sp
! Specifying \fBsoft\fR causes GCC to generate output containing
! library calls for floating\-point operations.
! \&\fBsoftfp\fR allows the generation of code using hardware floating\-point
! instructions, but still uses the soft\-float calling conventions.
! \&\fBhard\fR allows generation of floating\-point instructions
! and uses FPU\-specific calling conventions.
  .Sp
  The default depends on the specific target configuration.  Note that
! the hard\-float and soft\-float ABIs are not link\-compatible; you must
! compile your entire program with the same ABI, and link with a
  compatible set of libraries.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Select hardware or software floating\-point implementations.
  The default is soft float.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
  .PD 0
! .IP \fB\-mno\-double\-float\fR 4
  .IX Item "-mno-double-float"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
! double\-precision float instructions.  This is the default except
! when compiling for CK803.
! .IP \fB\-mfdivdu\fR 4
  .IX Item "-mfdivdu"
  .PD 0
! .IP \fB\-mno\-fdivdu\fR 4
  .IX Item "-mno-fdivdu"
  .PD
  When \fB\-mhard\-float\fR is in effect, enable generation of
  \&\f(CW\*(C`frecipd\*(C'\fR, \f(CW\*(C`fsqrtd\*(C'\fR, and \f(CW\*(C`fdivd\*(C'\fR instructions.
! This is the default except when compiling for CK803.
! .IP \fB\-mfpu=\fR\fIfpu\fR 4
  .IX Item "-mfpu=fpu"
! Select the floating\-point processor.  This option can only be used with
  \&\fB\-mhard\-float\fR.
  Values for \fIfpu\fR are
  \&\fBfpv2_sf\fR (equivalent to \fB\-mno\-double\-float \-mno\-fdivdu\fR),
  \&\fBfpv2\fR (\fB\-mdouble\-float \-mno\-divdu\fR), and
  \&\fBfpv2_divd\fR (\fB\-mdouble\-float \-mdivdu\fR).
! .IP \fB\-melrw\fR 4
  .IX Item "-melrw"
  .PD 0
! .IP \fB\-mno\-elrw\fR 4
  .IX Item "-mno-elrw"
  .PD
  Enable the extended \f(CW\*(C`lrw\*(C'\fR instruction.  This option defaults to on
! for CK801 and off otherwise.
! .IP \fB\-mistack\fR 4
  .IX Item "-mistack"
  .PD 0
! .IP \fB\-mno\-istack\fR 4
  .IX Item "-mno-istack"
  .PD
  Enable interrupt stack instructions; the default is off.
  .Sp
  The \fB\-mistack\fR option is required to handle the
  \&\f(CW\*(C`interrupt\*(C'\fR and \f(CW\*(C`isr\*(C'\fR function attributes.
! .IP \fB\-mmp\fR 4
  .IX Item "-mmp"
  Enable multiprocessor instructions; the default is off.
! .IP \fB\-mcp\fR 4
  .IX Item "-mcp"
  Enable coprocessor instructions; the default is off.
! .IP \fB\-mcache\fR 4
  .IX Item "-mcache"
  Enable coprocessor instructions; the default is off.
! .IP \fB\-msecurity\fR 4
  .IX Item "-msecurity"
  Enable C\-SKY security instructions; the default is off.
! .IP \fB\-mtrust\fR 4
  .IX Item "-mtrust"
  Enable C\-SKY trust instructions; the default is off.
! .IP \fB\-mdsp\fR 4
  .IX Item "-mdsp"
  .PD 0
! .IP \fB\-medsp\fR 4
  .IX Item "-medsp"
! .IP \fB\-mvdsp\fR 4
  .IX Item "-mvdsp"
  .PD
! Enable C\-SKY DSP, Enhanced DSP, or Vector DSP instructions, respectively.
  All of these options default to off.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
  Generate divide instructions.  Default is off.
! .IP \fB\-msmart\fR 4
  .IX Item "-msmart"
  .PD 0
! .IP \fB\-mno\-smart\fR 4
  .IX Item "-mno-smart"
  .PD
  Generate code for Smart Mode, using only registers numbered 0\-7 to allow
! use of 16\-bit instructions.  This option is ignored for CK801 where this
! is the required behavior, and it defaults to on for CK802.
  For other targets, the default is off.
! .IP \fB\-mhigh\-registers\fR 4
  .IX Item "-mhigh-registers"
  .PD 0
! .IP \fB\-mno\-high\-registers\fR 4
  .IX Item "-mno-high-registers"
  .PD
  Generate code using the high registers numbered 16\-31.  This option
! is not supported on CK801, CK802, or CK803, and is enabled by default
  for other processors.
! .IP \fB\-manchor\fR 4
  .IX Item "-manchor"
  .PD 0
! .IP \fB\-mno\-anchor\fR 4
  .IX Item "-mno-anchor"
  .PD
  Generate code using global anchor symbol addresses.
! .IP \fB\-mpushpop\fR 4
  .IX Item "-mpushpop"
  .PD 0
! .IP \fB\-mno\-pushpop\fR 4
  .IX Item "-mno-pushpop"
  .PD
  Generate code using \f(CW\*(C`push\*(C'\fR and \f(CW\*(C`pop\*(C'\fR instructions.  This option
  defaults to on.
! .IP \fB\-mmultiple\-stld\fR 4
  .IX Item "-mmultiple-stld"
  .PD 0
! .IP \fB\-mstm\fR 4
  .IX Item "-mstm"
! .IP \fB\-mno\-multiple\-stld\fR 4
  .IX Item "-mno-multiple-stld"
! .IP \fB\-mno\-stm\fR 4
  .IX Item "-mno-stm"
  .PD
  Generate code using \f(CW\*(C`stm\*(C'\fR and \f(CW\*(C`ldm\*(C'\fR instructions.  This option
! isn\*(Aqt supported on CK801 but is enabled by default on other processors.
! .IP \fB\-mconstpool\fR 4
  .IX Item "-mconstpool"
  .PD 0
! .IP \fB\-mno\-constpool\fR 4
  .IX Item "-mno-constpool"
  .PD
  Create constant pools in the compiler instead of deferring it to the
  assembler.  This option is the default and required for correct code
! generation on CK801 and CK802, and is optional on other processors.
! .IP \fB\-mstack\-size\fR 4
  .IX Item "-mstack-size"
  .PD 0
! .IP \fB\-mno\-stack\-size\fR 4
  .IX Item "-mno-stack-size"
  .PD
  Emit \f(CW\*(C`.stack_size\*(C'\fR directives for each function in the assembly
  output.  This option defaults to off.
! .IP \fB\-mccrt\fR 4
  .IX Item "-mccrt"
  .PD 0
! .IP \fB\-mno\-ccrt\fR 4
  .IX Item "-mno-ccrt"
  .PD
  Generate code for the C\-SKY compiler runtime instead of libgcc.  This
  option defaults to off.
! .IP \fB\-mbranch\-cost=\fR\fIn\fR 4
  .IX Item "-mbranch-cost=n"
  Set the branch costs to roughly \f(CW\*(C`n\*(C'\fR instructions.  The default is 1.
! .IP \fB\-msched\-prolog\fR 4
  .IX Item "-msched-prolog"
  .PD 0
! .IP \fB\-mno\-sched\-prolog\fR 4
  .IX Item "-mno-sched-prolog"
  .PD
  Permit scheduling of function prologue and epilogue sequences.  Using
! this option can result in code that is not compliant with the C\-SKY V2 ABI
  prologue requirements and that cannot be debugged or backtraced.
  It is disabled by default.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Links the library libsemi.a which is in compatible with simulator. Applicable
! to ELF compiler only.
  .PP
  \fIDarwin Options\fR
  .IX Subsection "Darwin Options"
*************** to \s-1ELF\s0 compiler only.
*** 24434,24452 ****
  These options are defined for all architectures running the Darwin operating
  system.
  .PP
! \&\s-1FSF GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it creates
! an object file for the single architecture that \s-1GCC\s0 was built to
! target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
  \&\fB\-arch\fR options are used; it does so by running the compiler or
  linker multiple times and joining the results together with
  \&\fIlipo\fR.
  .PP
  The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
! \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
! that \s-1GCC\s0 is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
  \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
  .PP
! The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
  mismatch.  The assembler, \fIas\fR, only permits instructions to
  be used that are valid for the subtype of the file it is generating,
  so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
--- 24369,24387 ----
  These options are defined for all architectures running the Darwin operating
  system.
  .PP
! FSF GCC on Darwin does not create "fat" object files; it creates
! an object file for the single architecture that GCC was built to
! target.  Apple\*(Aqs GCC on Darwin does create "fat" files if multiple
  \&\fB\-arch\fR options are used; it does so by running the compiler or
  linker multiple times and joining the results together with
  \&\fIlipo\fR.
  .PP
  The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
! \&\fBi686\fR) is determined by the flags that specify the ISA
! that GCC is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
  \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
  .PP
! The Darwin tools vary in their behavior when presented with an ISA
  mismatch.  The assembler, \fIas\fR, only permits instructions to
  be used that are valid for the subtype of the file it is generating,
  so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
*************** restrictive subtype than its input files
*** 24456,24467 ****
  a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
  for executables, \fBld\fR, quietly gives the executable the most
  restrictive subtype of any of its input files.
! .IP "\fB\-F\fR\fIdir\fR" 4
  .IX Item "-Fdir"
  Add the framework directory \fIdir\fR to the head of the list of
  directories to be searched for header files.  These directories are
  interleaved with those specified by \fB\-I\fR options and are
! scanned in a left-to-right order.
  .Sp
  A framework directory is a directory with frameworks in it.  A
  framework is a directory with a \fIHeaders\fR and/or
--- 24391,24402 ----
  a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
  for executables, \fBld\fR, quietly gives the executable the most
  restrictive subtype of any of its input files.
! .IP \fB\-F\fR\fIdir\fR 4
  .IX Item "-Fdir"
  Add the framework directory \fIdir\fR to the head of the list of
  directories to be searched for header files.  These directories are
  interleaved with those specified by \fB\-I\fR options and are
! scanned in a left\-to\-right order.
  .Sp
  A framework directory is a directory with frameworks in it.  A
  framework is a directory with a \fIHeaders\fR and/or
*************** in \fI.framework\fR.  The name of a fram
*** 24470,24476 ****
  directory excluding the \fI.framework\fR.  Headers associated with
  the framework are found in one of those two directories, with
  \&\fIHeaders\fR being searched first.  A subframework is a framework
! directory that is in a framework's \fIFrameworks\fR directory.
  Includes of subframework headers can only appear in a header of a
  framework that contains the subframework, or in a sibling subframework
  header.  Two subframeworks are siblings if they occur in the same
--- 24405,24411 ----
  directory excluding the \fI.framework\fR.  Headers associated with
  the framework are found in one of those two directories, with
  \&\fIHeaders\fR being searched first.  A subframework is a framework
! directory that is in a framework\*(Aqs \fIFrameworks\fR directory.
  Includes of subframework headers can only appear in a header of a
  framework that contains the subframework, or in a sibling subframework
  header.  Two subframeworks are siblings if they occur in the same
*************** in \fI/System/Library/Frameworks\fR and
*** 24483,24522 ****
  \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
  the name of the framework and \fIheader.h\fR is found in the
  \&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
! .IP "\fB\-iframework\fR\fIdir\fR" 4
  .IX Item "-iframeworkdir"
  Like \fB\-F\fR except the directory is a treated as a system
  directory.  The main difference between this \fB\-iframework\fR and
  \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
  warn about constructs contained within header files found via
  \&\fIdir\fR.  This option is valid only for the C family of languages.
! .IP "\fB\-gused\fR" 4
  .IX Item "-gused"
  Emit debugging information for symbols that are used.  For stabs
  debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
! This is by default \s-1ON.\s0
! .IP "\fB\-gfull\fR" 4
  .IX Item "-gfull"
  Emit debugging information for all symbols and types.
! .IP "\fB\-fconstant\-cfstrings\fR" 4
  .IX Item "-fconstant-cfstrings"
  The \fB\-fconstant\-cfstrings\fR is an alias for \fB\-mconstant\-cfstrings\fR.
! .IP "\fB\-mconstant\-cfstrings\fR" 4
  .IX Item "-mconstant-cfstrings"
  When the NeXT runtime is being used (the default on these systems), override
  any \fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR
  literals to be laid out as constant CoreFoundation strings.
! .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
  .IX Item "-mmacosx-version-min=version"
  The earliest version of MacOS X that this executable will run on is
  \&\fIversion\fR.  Typical values supported for \fIversion\fR include \f(CW12\fR,
  \&\f(CW10.12\fR, and \f(CW10.5.8\fR.
  .Sp
! If the compiler was built to use the system's headers by default,
  then the default for this option is the system version on which the
  compiler is running, otherwise the default is to make choices that
  are compatible with as many systems and code bases as possible.
! .IP "\fB\-mkernel\fR" 4
  .IX Item "-mkernel"
  Enable kernel development mode.  The \fB\-mkernel\fR option sets
  \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
--- 24418,24457 ----
  \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
  the name of the framework and \fIheader.h\fR is found in the
  \&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
! .IP \fB\-iframework\fR\fIdir\fR 4
  .IX Item "-iframeworkdir"
  Like \fB\-F\fR except the directory is a treated as a system
  directory.  The main difference between this \fB\-iframework\fR and
  \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
  warn about constructs contained within header files found via
  \&\fIdir\fR.  This option is valid only for the C family of languages.
! .IP \fB\-gused\fR 4
  .IX Item "-gused"
  Emit debugging information for symbols that are used.  For stabs
  debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
! This is by default ON.
! .IP \fB\-gfull\fR 4
  .IX Item "-gfull"
  Emit debugging information for all symbols and types.
! .IP \fB\-fconstant\-cfstrings\fR 4
  .IX Item "-fconstant-cfstrings"
  The \fB\-fconstant\-cfstrings\fR is an alias for \fB\-mconstant\-cfstrings\fR.
! .IP \fB\-mconstant\-cfstrings\fR 4
  .IX Item "-mconstant-cfstrings"
  When the NeXT runtime is being used (the default on these systems), override
  any \fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR
  literals to be laid out as constant CoreFoundation strings.
! .IP \fB\-mmacosx\-version\-min=\fR\fIversion\fR 4
  .IX Item "-mmacosx-version-min=version"
  The earliest version of MacOS X that this executable will run on is
  \&\fIversion\fR.  Typical values supported for \fIversion\fR include \f(CW12\fR,
  \&\f(CW10.12\fR, and \f(CW10.5.8\fR.
  .Sp
! If the compiler was built to use the system\*(Aqs headers by default,
  then the default for this option is the system version on which the
  compiler is running, otherwise the default is to make choices that
  are compatible with as many systems and code bases as possible.
! .IP \fB\-mkernel\fR 4
  .IX Item "-mkernel"
  Enable kernel development mode.  The \fB\-mkernel\fR option sets
  \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
*************** Enable kernel development mode.  The \fB
*** 24525,24583 ****
  applicable.  This mode also sets \fB\-mno\-altivec\fR,
  \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
  \&\fB\-mlong\-branch\fR for PowerPC targets.
! .IP "\fB\-mone\-byte\-bool\fR" 4
  .IX Item "-mone-byte-bool"
  Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
! By default \f(CW\*(C`sizeof(bool)\*(C'\fR is \f(CW4\fR when compiling for
  Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
  option has no effect on x86.
  .Sp
! \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
  to generate code that is not binary compatible with code generated
  without that switch.  Using this switch may require recompiling all
  other modules in a program, including system libraries.  Use this
! switch to conform to a non-default data model.
! .IP "\fB\-mfix\-and\-continue\fR" 4
  .IX Item "-mfix-and-continue"
  .PD 0
! .IP "\fB\-ffix\-and\-continue\fR" 4
  .IX Item "-ffix-and-continue"
! .IP "\fB\-findirect\-data\fR" 4
  .IX Item "-findirect-data"
  .PD
  Generate code suitable for fast turnaround development, such as to
! allow \s-1GDB\s0 to dynamically load \fI.o\fR files into already-running
  programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
  are provided for backwards compatibility.
! .IP "\fB\-all_load\fR" 4
  .IX Item "-all_load"
  Loads all members of static archive libraries.
! See man \fIld\fR\|(1) for more information.
! .IP "\fB\-arch_errors_fatal\fR" 4
  .IX Item "-arch_errors_fatal"
  Cause the errors having to do with files that have the wrong architecture
  to be fatal.
! .IP "\fB\-bind_at_load\fR" 4
  .IX Item "-bind_at_load"
  Causes the output file to be marked such that the dynamic linker will
  bind all undefined references when the file is loaded or launched.
! .IP "\fB\-bundle\fR" 4
  .IX Item "-bundle"
! Produce a Mach-o bundle format file.
! See man \fIld\fR\|(1) for more information.
  .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
  .IX Item "-bundle_loader executable"
  This option specifies the \fIexecutable\fR that will load the build
! output file being linked.  See man \fIld\fR\|(1) for more information.
! .IP "\fB\-dynamiclib\fR" 4
  .IX Item "-dynamiclib"
! When passed this option, \s-1GCC\s0 produces a dynamic library instead of
  an executable when linking, using the Darwin \fIlibtool\fR command.
! .IP "\fB\-force_cpusubtype_ALL\fR" 4
  .IX Item "-force_cpusubtype_ALL"
! This causes \s-1GCC\s0's output file to have the \fB\s-1ALL\s0\fR subtype, instead of
  one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
! .IP "\fB\-nodefaultrpaths\fR" 4
  .IX Item "-nodefaultrpaths"
  Do not add default run paths for the compiler library directories to
  executables, modules or dynamic libraries. On macOS 10.5 and later,
--- 24460,24518 ----
  applicable.  This mode also sets \fB\-mno\-altivec\fR,
  \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
  \&\fB\-mlong\-branch\fR for PowerPC targets.
! .IP \fB\-mone\-byte\-bool\fR 4
  .IX Item "-mone-byte-bool"
  Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
! By default \f(CWsizeof(bool)\fR is \f(CW4\fR when compiling for
  Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
  option has no effect on x86.
  .Sp
! \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes GCC
  to generate code that is not binary compatible with code generated
  without that switch.  Using this switch may require recompiling all
  other modules in a program, including system libraries.  Use this
! switch to conform to a non\-default data model.
! .IP \fB\-mfix\-and\-continue\fR 4
  .IX Item "-mfix-and-continue"
  .PD 0
! .IP \fB\-ffix\-and\-continue\fR 4
  .IX Item "-ffix-and-continue"
! .IP \fB\-findirect\-data\fR 4
  .IX Item "-findirect-data"
  .PD
  Generate code suitable for fast turnaround development, such as to
! allow GDB to dynamically load \fI.o\fR files into already\-running
  programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
  are provided for backwards compatibility.
! .IP \fB\-all_load\fR 4
  .IX Item "-all_load"
  Loads all members of static archive libraries.
! See man \fBld\fR\|(1) for more information.
! .IP \fB\-arch_errors_fatal\fR 4
  .IX Item "-arch_errors_fatal"
  Cause the errors having to do with files that have the wrong architecture
  to be fatal.
! .IP \fB\-bind_at_load\fR 4
  .IX Item "-bind_at_load"
  Causes the output file to be marked such that the dynamic linker will
  bind all undefined references when the file is loaded or launched.
! .IP \fB\-bundle\fR 4
  .IX Item "-bundle"
! Produce a Mach\-o bundle format file.
! See man \fBld\fR\|(1) for more information.
  .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
  .IX Item "-bundle_loader executable"
  This option specifies the \fIexecutable\fR that will load the build
! output file being linked.  See man \fBld\fR\|(1) for more information.
! .IP \fB\-dynamiclib\fR 4
  .IX Item "-dynamiclib"
! When passed this option, GCC produces a dynamic library instead of
  an executable when linking, using the Darwin \fIlibtool\fR command.
! .IP \fB\-force_cpusubtype_ALL\fR 4
  .IX Item "-force_cpusubtype_ALL"
! This causes GCC\*(Aqs output file to have the \fBALL\fR subtype, instead of
  one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
! .IP \fB\-nodefaultrpaths\fR 4
  .IX Item "-nodefaultrpaths"
  Do not add default run paths for the compiler library directories to
  executables, modules or dynamic libraries. On macOS 10.5 and later,
*************** the embedded runpath is added by default
*** 24587,24817 ****
  .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
  .IX Item "-allowable_client client_name"
  .PD 0
! .IP "\fB\-client_name\fR" 4
  .IX Item "-client_name"
! .IP "\fB\-compatibility_version\fR" 4
  .IX Item "-compatibility_version"
! .IP "\fB\-current_version\fR" 4
  .IX Item "-current_version"
! .IP "\fB\-dead_strip\fR" 4
  .IX Item "-dead_strip"
! .IP "\fB\-dependency\-file\fR" 4
  .IX Item "-dependency-file"
! .IP "\fB\-dylib_file\fR" 4
  .IX Item "-dylib_file"
! .IP "\fB\-dylinker_install_name\fR" 4
  .IX Item "-dylinker_install_name"
! .IP "\fB\-dynamic\fR" 4
  .IX Item "-dynamic"
! .IP "\fB\-exported_symbols_list\fR" 4
  .IX Item "-exported_symbols_list"
! .IP "\fB\-filelist\fR" 4
  .IX Item "-filelist"
! .IP "\fB\-flat_namespace\fR" 4
  .IX Item "-flat_namespace"
! .IP "\fB\-force_flat_namespace\fR" 4
  .IX Item "-force_flat_namespace"
! .IP "\fB\-headerpad_max_install_names\fR" 4
  .IX Item "-headerpad_max_install_names"
! .IP "\fB\-image_base\fR" 4
  .IX Item "-image_base"
! .IP "\fB\-init\fR" 4
  .IX Item "-init"
! .IP "\fB\-install_name\fR" 4
  .IX Item "-install_name"
! .IP "\fB\-keep_private_externs\fR" 4
  .IX Item "-keep_private_externs"
! .IP "\fB\-multi_module\fR" 4
  .IX Item "-multi_module"
! .IP "\fB\-multiply_defined\fR" 4
  .IX Item "-multiply_defined"
! .IP "\fB\-multiply_defined_unused\fR" 4
  .IX Item "-multiply_defined_unused"
! .IP "\fB\-noall_load\fR" 4
  .IX Item "-noall_load"
! .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
  .IX Item "-no_dead_strip_inits_and_terms"
! .IP "\fB\-nofixprebinding\fR" 4
  .IX Item "-nofixprebinding"
! .IP "\fB\-nomultidefs\fR" 4
  .IX Item "-nomultidefs"
! .IP "\fB\-noprebind\fR" 4
  .IX Item "-noprebind"
! .IP "\fB\-noseglinkedit\fR" 4
  .IX Item "-noseglinkedit"
! .IP "\fB\-pagezero_size\fR" 4
  .IX Item "-pagezero_size"
! .IP "\fB\-prebind\fR" 4
  .IX Item "-prebind"
! .IP "\fB\-prebind_all_twolevel_modules\fR" 4
  .IX Item "-prebind_all_twolevel_modules"
! .IP "\fB\-private_bundle\fR" 4
  .IX Item "-private_bundle"
! .IP "\fB\-read_only_relocs\fR" 4
  .IX Item "-read_only_relocs"
! .IP "\fB\-sectalign\fR" 4
  .IX Item "-sectalign"
! .IP "\fB\-sectobjectsymbols\fR" 4
  .IX Item "-sectobjectsymbols"
! .IP "\fB\-whyload\fR" 4
  .IX Item "-whyload"
! .IP "\fB\-seg1addr\fR" 4
  .IX Item "-seg1addr"
! .IP "\fB\-sectcreate\fR" 4
  .IX Item "-sectcreate"
! .IP "\fB\-sectobjectsymbols\fR" 4
  .IX Item "-sectobjectsymbols"
! .IP "\fB\-sectorder\fR" 4
  .IX Item "-sectorder"
! .IP "\fB\-segaddr\fR" 4
  .IX Item "-segaddr"
! .IP "\fB\-segs_read_only_addr\fR" 4
  .IX Item "-segs_read_only_addr"
! .IP "\fB\-segs_read_write_addr\fR" 4
  .IX Item "-segs_read_write_addr"
! .IP "\fB\-seg_addr_table\fR" 4
  .IX Item "-seg_addr_table"
! .IP "\fB\-seg_addr_table_filename\fR" 4
  .IX Item "-seg_addr_table_filename"
! .IP "\fB\-seglinkedit\fR" 4
  .IX Item "-seglinkedit"
! .IP "\fB\-segprot\fR" 4
  .IX Item "-segprot"
! .IP "\fB\-segs_read_only_addr\fR" 4
  .IX Item "-segs_read_only_addr"
! .IP "\fB\-segs_read_write_addr\fR" 4
  .IX Item "-segs_read_write_addr"
! .IP "\fB\-single_module\fR" 4
  .IX Item "-single_module"
! .IP "\fB\-static\fR" 4
  .IX Item "-static"
! .IP "\fB\-sub_library\fR" 4
  .IX Item "-sub_library"
! .IP "\fB\-sub_umbrella\fR" 4
  .IX Item "-sub_umbrella"
! .IP "\fB\-twolevel_namespace\fR" 4
  .IX Item "-twolevel_namespace"
! .IP "\fB\-umbrella\fR" 4
  .IX Item "-umbrella"
! .IP "\fB\-undefined\fR" 4
  .IX Item "-undefined"
! .IP "\fB\-unexported_symbols_list\fR" 4
  .IX Item "-unexported_symbols_list"
! .IP "\fB\-weak_reference_mismatches\fR" 4
  .IX Item "-weak_reference_mismatches"
! .IP "\fB\-whatsloaded\fR" 4
  .IX Item "-whatsloaded"
  .PD
  These options are passed to the Darwin linker.  The Darwin linker man page
  describes them in detail.
  .PP
! \fI\s-1DEC\s0 Alpha Options\fR
  .IX Subsection "DEC Alpha Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
! .IP "\fB\-mno\-soft\-float\fR" 4
  .IX Item "-mno-soft-float"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating-point instructions for
! floating-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating-point
  operations.  Unless they are replaced by routines that emulate the
! floating-point operations, or compiled in such a way as to call such
! emulations routines, these routines issue floating-point
! operations.   If you are compiling for an Alpha without floating-point
  operations, you must ensure that the library is built so as not to call
  them.
  .Sp
! Note that Alpha implementations without floating-point operations are
! required to have floating-point registers.
! .IP "\fB\-mfp\-reg\fR" 4
  .IX Item "-mfp-reg"
  .PD 0
! .IP "\fB\-mno\-fp\-regs\fR" 4
  .IX Item "-mno-fp-regs"
  .PD
! Generate code that uses (does not use) the floating-point register set.
! \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
! register set is not used, floating-point operands are passed in integer
! registers as if they were integers and floating-point results are passed
! in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
! so any function with a floating-point argument or return value called by code
  compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
  option.
  .Sp
  A typical use of this option is building a kernel that does not use,
! and hence need not save and restore, any floating-point registers.
! .IP "\fB\-mieee\fR" 4
  .IX Item "-mieee"
! The Alpha architecture implements floating-point hardware optimized for
! maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
  standard.  However, for full compliance, software assistance is
! required.  This option generates code fully IEEE-compliant code
! \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
  If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
  defined during compilation.  The resulting code is less efficient but is
! able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
! values such as not-a-number and plus/minus infinity.  Other Alpha
  compilers call this option \fB\-ieee_with_no_inexact\fR.
! .IP "\fB\-mieee\-with\-inexact\fR" 4
  .IX Item "-mieee-with-inexact"
  This is like \fB\-mieee\fR except the generated code also maintains
! the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
! generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
  \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
  macro.  On some Alpha implementations the resulting code may execute
  significantly slower than the code generated by default.  Since there is
! very little code that depends on the \fIinexact-flag\fR, you should
  normally not specify this option.  Other Alpha compilers call this
  option \fB\-ieee_with_inexact\fR.
! .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
  .IX Item "-mfp-trap-mode=trap-mode"
! This option controls what floating-point related traps are enabled.
! Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
  The trap mode can be set to one of four values:
  .RS 4
! .IP "\fBn\fR" 4
  .IX Item "n"
  This is the default (normal) setting.  The only traps that are enabled
  are the ones that cannot be disabled in software (e.g., division by zero
  trap).
! .IP "\fBu\fR" 4
  .IX Item "u"
  In addition to the traps enabled by \fBn\fR, underflow traps are enabled
  as well.
! .IP "\fBsu\fR" 4
  .IX Item "su"
  Like \fBu\fR, but the instructions are marked to be safe for software
  completion (see Alpha architecture manual for details).
! .IP "\fBsui\fR" 4
  .IX Item "sui"
  Like \fBsu\fR, but inexact traps are enabled as well.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
  .IX Item "-mfp-rounding-mode=rounding-mode"
! Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
! \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
  of:
  .RS 4
! .IP "\fBn\fR" 4
  .IX Item "n"
! Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
  the nearest machine number or towards the even machine number in case
  of a tie.
! .IP "\fBm\fR" 4
  .IX Item "m"
  Round towards minus infinity.
! .IP "\fBc\fR" 4
  .IX Item "c"
! Chopped rounding mode.  Floating-point numbers are rounded towards zero.
! .IP "\fBd\fR" 4
  .IX Item "d"
! Dynamic rounding mode.  A field in the floating-point control register
  (\fIfpcr\fR, see Alpha architecture reference manual) controls the
  rounding mode in effect.  The C library initializes this register for
  rounding towards plus infinity.  Thus, unless your program modifies the
--- 24522,24752 ----
  .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
  .IX Item "-allowable_client client_name"
  .PD 0
! .IP \fB\-client_name\fR 4
  .IX Item "-client_name"
! .IP \fB\-compatibility_version\fR 4
  .IX Item "-compatibility_version"
! .IP \fB\-current_version\fR 4
  .IX Item "-current_version"
! .IP \fB\-dead_strip\fR 4
  .IX Item "-dead_strip"
! .IP \fB\-dependency\-file\fR 4
  .IX Item "-dependency-file"
! .IP \fB\-dylib_file\fR 4
  .IX Item "-dylib_file"
! .IP \fB\-dylinker_install_name\fR 4
  .IX Item "-dylinker_install_name"
! .IP \fB\-dynamic\fR 4
  .IX Item "-dynamic"
! .IP \fB\-exported_symbols_list\fR 4
  .IX Item "-exported_symbols_list"
! .IP \fB\-filelist\fR 4
  .IX Item "-filelist"
! .IP \fB\-flat_namespace\fR 4
  .IX Item "-flat_namespace"
! .IP \fB\-force_flat_namespace\fR 4
  .IX Item "-force_flat_namespace"
! .IP \fB\-headerpad_max_install_names\fR 4
  .IX Item "-headerpad_max_install_names"
! .IP \fB\-image_base\fR 4
  .IX Item "-image_base"
! .IP \fB\-init\fR 4
  .IX Item "-init"
! .IP \fB\-install_name\fR 4
  .IX Item "-install_name"
! .IP \fB\-keep_private_externs\fR 4
  .IX Item "-keep_private_externs"
! .IP \fB\-multi_module\fR 4
  .IX Item "-multi_module"
! .IP \fB\-multiply_defined\fR 4
  .IX Item "-multiply_defined"
! .IP \fB\-multiply_defined_unused\fR 4
  .IX Item "-multiply_defined_unused"
! .IP \fB\-noall_load\fR 4
  .IX Item "-noall_load"
! .IP \fB\-no_dead_strip_inits_and_terms\fR 4
  .IX Item "-no_dead_strip_inits_and_terms"
! .IP \fB\-nofixprebinding\fR 4
  .IX Item "-nofixprebinding"
! .IP \fB\-nomultidefs\fR 4
  .IX Item "-nomultidefs"
! .IP \fB\-noprebind\fR 4
  .IX Item "-noprebind"
! .IP \fB\-noseglinkedit\fR 4
  .IX Item "-noseglinkedit"
! .IP \fB\-pagezero_size\fR 4
  .IX Item "-pagezero_size"
! .IP \fB\-prebind\fR 4
  .IX Item "-prebind"
! .IP \fB\-prebind_all_twolevel_modules\fR 4
  .IX Item "-prebind_all_twolevel_modules"
! .IP \fB\-private_bundle\fR 4
  .IX Item "-private_bundle"
! .IP \fB\-read_only_relocs\fR 4
  .IX Item "-read_only_relocs"
! .IP \fB\-sectalign\fR 4
  .IX Item "-sectalign"
! .IP \fB\-sectobjectsymbols\fR 4
  .IX Item "-sectobjectsymbols"
! .IP \fB\-whyload\fR 4
  .IX Item "-whyload"
! .IP \fB\-seg1addr\fR 4
  .IX Item "-seg1addr"
! .IP \fB\-sectcreate\fR 4
  .IX Item "-sectcreate"
! .IP \fB\-sectobjectsymbols\fR 4
  .IX Item "-sectobjectsymbols"
! .IP \fB\-sectorder\fR 4
  .IX Item "-sectorder"
! .IP \fB\-segaddr\fR 4
  .IX Item "-segaddr"
! .IP \fB\-segs_read_only_addr\fR 4
  .IX Item "-segs_read_only_addr"
! .IP \fB\-segs_read_write_addr\fR 4
  .IX Item "-segs_read_write_addr"
! .IP \fB\-seg_addr_table\fR 4
  .IX Item "-seg_addr_table"
! .IP \fB\-seg_addr_table_filename\fR 4
  .IX Item "-seg_addr_table_filename"
! .IP \fB\-seglinkedit\fR 4
  .IX Item "-seglinkedit"
! .IP \fB\-segprot\fR 4
  .IX Item "-segprot"
! .IP \fB\-segs_read_only_addr\fR 4
  .IX Item "-segs_read_only_addr"
! .IP \fB\-segs_read_write_addr\fR 4
  .IX Item "-segs_read_write_addr"
! .IP \fB\-single_module\fR 4
  .IX Item "-single_module"
! .IP \fB\-static\fR 4
  .IX Item "-static"
! .IP \fB\-sub_library\fR 4
  .IX Item "-sub_library"
! .IP \fB\-sub_umbrella\fR 4
  .IX Item "-sub_umbrella"
! .IP \fB\-twolevel_namespace\fR 4
  .IX Item "-twolevel_namespace"
! .IP \fB\-umbrella\fR 4
  .IX Item "-umbrella"
! .IP \fB\-undefined\fR 4
  .IX Item "-undefined"
! .IP \fB\-unexported_symbols_list\fR 4
  .IX Item "-unexported_symbols_list"
! .IP \fB\-weak_reference_mismatches\fR 4
  .IX Item "-weak_reference_mismatches"
! .IP \fB\-whatsloaded\fR 4
  .IX Item "-whatsloaded"
  .PD
  These options are passed to the Darwin linker.  The Darwin linker man page
  describes them in detail.
  .PP
! \fIDEC Alpha Options\fR
  .IX Subsection "DEC Alpha Options"
  .PP
! These \fB\-m\fR options are defined for the DEC Alpha implementations:
! .IP \fB\-mno\-soft\-float\fR 4
  .IX Item "-mno-soft-float"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating\-point instructions for
! floating\-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating\-point
  operations.  Unless they are replaced by routines that emulate the
! floating\-point operations, or compiled in such a way as to call such
! emulations routines, these routines issue floating\-point
! operations.   If you are compiling for an Alpha without floating\-point
  operations, you must ensure that the library is built so as not to call
  them.
  .Sp
! Note that Alpha implementations without floating\-point operations are
! required to have floating\-point registers.
! .IP \fB\-mfp\-reg\fR 4
  .IX Item "-mfp-reg"
  .PD 0
! .IP \fB\-mno\-fp\-regs\fR 4
  .IX Item "-mno-fp-regs"
  .PD
! Generate code that uses (does not use) the floating\-point register set.
! \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating\-point
! register set is not used, floating\-point operands are passed in integer
! registers as if they were integers and floating\-point results are passed
! in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non\-standard calling sequence,
! so any function with a floating\-point argument or return value called by code
  compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
  option.
  .Sp
  A typical use of this option is building a kernel that does not use,
! and hence need not save and restore, any floating\-point registers.
! .IP \fB\-mieee\fR 4
  .IX Item "-mieee"
! The Alpha architecture implements floating\-point hardware optimized for
! maximum performance.  It is mostly compliant with the IEEE floating\-point
  standard.  However, for full compliance, software assistance is
! required.  This option generates code fully IEEE\-compliant code
! \&\fIexcept\fR that the \fIinexact\-flag\fR is not maintained (see below).
  If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
  defined during compilation.  The resulting code is less efficient but is
! able to correctly support denormalized numbers and exceptional IEEE
! values such as not\-a\-number and plus/minus infinity.  Other Alpha
  compilers call this option \fB\-ieee_with_no_inexact\fR.
! .IP \fB\-mieee\-with\-inexact\fR 4
  .IX Item "-mieee-with-inexact"
  This is like \fB\-mieee\fR except the generated code also maintains
! the IEEE \fIinexact\-flag\fR.  Turning on this option causes the
! generated code to implement fully\-compliant IEEE math.  In addition to
  \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
  macro.  On some Alpha implementations the resulting code may execute
  significantly slower than the code generated by default.  Since there is
! very little code that depends on the \fIinexact\-flag\fR, you should
  normally not specify this option.  Other Alpha compilers call this
  option \fB\-ieee_with_inexact\fR.
! .IP \fB\-mfp\-trap\-mode=\fR\fItrap\-mode\fR 4
  .IX Item "-mfp-trap-mode=trap-mode"
! This option controls what floating\-point related traps are enabled.
! Other Alpha compilers call this option \fB\-fptm\fR \fItrap\-mode\fR.
  The trap mode can be set to one of four values:
  .RS 4
! .IP \fBn\fR 4
  .IX Item "n"
  This is the default (normal) setting.  The only traps that are enabled
  are the ones that cannot be disabled in software (e.g., division by zero
  trap).
! .IP \fBu\fR 4
  .IX Item "u"
  In addition to the traps enabled by \fBn\fR, underflow traps are enabled
  as well.
! .IP \fBsu\fR 4
  .IX Item "su"
  Like \fBu\fR, but the instructions are marked to be safe for software
  completion (see Alpha architecture manual for details).
! .IP \fBsui\fR 4
  .IX Item "sui"
  Like \fBsu\fR, but inexact traps are enabled as well.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfp\-rounding\-mode=\fR\fIrounding\-mode\fR 4
  .IX Item "-mfp-rounding-mode=rounding-mode"
! Selects the IEEE rounding mode.  Other Alpha compilers call this option
! \&\fB\-fprm\fR \fIrounding\-mode\fR.  The \fIrounding\-mode\fR can be one
  of:
  .RS 4
! .IP \fBn\fR 4
  .IX Item "n"
! Normal IEEE rounding mode.  Floating\-point numbers are rounded towards
  the nearest machine number or towards the even machine number in case
  of a tie.
! .IP \fBm\fR 4
  .IX Item "m"
  Round towards minus infinity.
! .IP \fBc\fR 4
  .IX Item "c"
! Chopped rounding mode.  Floating\-point numbers are rounded towards zero.
! .IP \fBd\fR 4
  .IX Item "d"
! Dynamic rounding mode.  A field in the floating\-point control register
  (\fIfpcr\fR, see Alpha architecture reference manual) controls the
  rounding mode in effect.  The C library initializes this register for
  rounding towards plus infinity.  Thus, unless your program modifies the
*************** rounding towards plus infinity.  Thus, u
*** 24819,24923 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
  .IX Item "-mtrap-precision=trap-precision"
! In the Alpha architecture, floating-point traps are imprecise.  This
  means without software assistance it is impossible to recover from a
  floating trap and program execution normally needs to be terminated.
! \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
! in determining the exact location that caused a floating-point trap.
  Depending on the requirements of an application, different levels of
  precisions can be selected:
  .RS 4
! .IP "\fBp\fR" 4
  .IX Item "p"
  Program precision.  This option is the default and means a trap handler
! can only identify which program caused a floating-point exception.
! .IP "\fBf\fR" 4
  .IX Item "f"
  Function precision.  The trap handler can determine the function that
! caused a floating-point exception.
! .IP "\fBi\fR" 4
  .IX Item "i"
  Instruction precision.  The trap handler can determine the exact
! instruction that caused a floating-point exception.
  .RE
  .RS 4
  .Sp
  Other Alpha compilers provide the equivalent options called
  \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
  .RE
! .IP "\fB\-mieee\-conformant\fR" 4
  .IX Item "-mieee-conformant"
! This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
  use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
  \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
  is to emit the line \fB.eflag 48\fR in the function prologue of the
  generated assembly file.
! .IP "\fB\-mbuild\-constants\fR" 4
  .IX Item "-mbuild-constants"
! Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
  see if it can construct it from smaller constants in two or three
  instructions.  If it cannot, it outputs the constant as a literal and
  generates code to load it from the data segment at run time.
  .Sp
! Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
  using code, even if it takes more instructions (the maximum is six).
  .Sp
  You typically use this option to build a shared library dynamic
  loader.  Itself a shared library, it must relocate itself in memory
  before it can find the variables and constants in its own data segment.
! .IP "\fB\-mbwx\fR" 4
  .IX Item "-mbwx"
  .PD 0
! .IP "\fB\-mno\-bwx\fR" 4
  .IX Item "-mno-bwx"
! .IP "\fB\-mcix\fR" 4
  .IX Item "-mcix"
! .IP "\fB\-mno\-cix\fR" 4
  .IX Item "-mno-cix"
! .IP "\fB\-mfix\fR" 4
  .IX Item "-mfix"
! .IP "\fB\-mno\-fix\fR" 4
  .IX Item "-mno-fix"
! .IP "\fB\-mmax\fR" 4
  .IX Item "-mmax"
! .IP "\fB\-mno\-max\fR" 4
  .IX Item "-mno-max"
  .PD
! Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX,
! CIX, FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
! sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
! of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none is specified.
! .IP "\fB\-mfloat\-vax\fR" 4
  .IX Item "-mfloat-vax"
  .PD 0
! .IP "\fB\-mfloat\-ieee\fR" 4
  .IX Item "-mfloat-ieee"
  .PD
! Generate code that uses (does not use) \s-1VAX F\s0 and G floating-point
! arithmetic instead of \s-1IEEE\s0 single and double precision.
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP "\fB\-mno\-explicit\-relocs\fR" 4
  .IX Item "-mno-explicit-relocs"
  .PD
  Older Alpha assemblers provided no way to generate symbol relocations
  except via assembler macros.  Use of these macros does not allow
! optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
  supports a new syntax that allows the compiler to explicitly mark
  which relocations should apply to which instructions.  This option
! is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
  the assembler when it is built and sets the default accordingly.
! .IP "\fB\-msmall\-data\fR" 4
  .IX Item "-msmall-data"
  .PD 0
! .IP "\fB\-mlarge\-data\fR" 4
  .IX Item "-mlarge-data"
  .PD
  When \fB\-mexplicit\-relocs\fR is in effect, static data is
! accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
  is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
  (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
  16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
--- 24754,24858 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mtrap\-precision=\fR\fItrap\-precision\fR 4
  .IX Item "-mtrap-precision=trap-precision"
! In the Alpha architecture, floating\-point traps are imprecise.  This
  means without software assistance it is impossible to recover from a
  floating trap and program execution normally needs to be terminated.
! GCC can generate code that can assist operating system trap handlers
! in determining the exact location that caused a floating\-point trap.
  Depending on the requirements of an application, different levels of
  precisions can be selected:
  .RS 4
! .IP \fBp\fR 4
  .IX Item "p"
  Program precision.  This option is the default and means a trap handler
! can only identify which program caused a floating\-point exception.
! .IP \fBf\fR 4
  .IX Item "f"
  Function precision.  The trap handler can determine the function that
! caused a floating\-point exception.
! .IP \fBi\fR 4
  .IX Item "i"
  Instruction precision.  The trap handler can determine the exact
! instruction that caused a floating\-point exception.
  .RE
  .RS 4
  .Sp
  Other Alpha compilers provide the equivalent options called
  \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
  .RE
! .IP \fB\-mieee\-conformant\fR 4
  .IX Item "-mieee-conformant"
! This option marks the generated code as IEEE conformant.  You must not
  use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
  \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
  is to emit the line \fB.eflag 48\fR in the function prologue of the
  generated assembly file.
! .IP \fB\-mbuild\-constants\fR 4
  .IX Item "-mbuild-constants"
! Normally GCC examines a 32\- or 64\-bit integer constant to
  see if it can construct it from smaller constants in two or three
  instructions.  If it cannot, it outputs the constant as a literal and
  generates code to load it from the data segment at run time.
  .Sp
! Use this option to require GCC to construct \fIall\fR integer constants
  using code, even if it takes more instructions (the maximum is six).
  .Sp
  You typically use this option to build a shared library dynamic
  loader.  Itself a shared library, it must relocate itself in memory
  before it can find the variables and constants in its own data segment.
! .IP \fB\-mbwx\fR 4
  .IX Item "-mbwx"
  .PD 0
! .IP \fB\-mno\-bwx\fR 4
  .IX Item "-mno-bwx"
! .IP \fB\-mcix\fR 4
  .IX Item "-mcix"
! .IP \fB\-mno\-cix\fR 4
  .IX Item "-mno-cix"
! .IP \fB\-mfix\fR 4
  .IX Item "-mfix"
! .IP \fB\-mno\-fix\fR 4
  .IX Item "-mno-fix"
! .IP \fB\-mmax\fR 4
  .IX Item "-mmax"
! .IP \fB\-mno\-max\fR 4
  .IX Item "-mno-max"
  .PD
! Indicate whether GCC should generate code to use the optional BWX,
! CIX, FIX and MAX instruction sets.  The default is to use the instruction
! sets supported by the CPU type specified via \fB\-mcpu=\fR option or that
! of the CPU on which GCC was built if none is specified.
! .IP \fB\-mfloat\-vax\fR 4
  .IX Item "-mfloat-vax"
  .PD 0
! .IP \fB\-mfloat\-ieee\fR 4
  .IX Item "-mfloat-ieee"
  .PD
! Generate code that uses (does not use) VAX F and G floating\-point
! arithmetic instead of IEEE single and double precision.
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP \fB\-mno\-explicit\-relocs\fR 4
  .IX Item "-mno-explicit-relocs"
  .PD
  Older Alpha assemblers provided no way to generate symbol relocations
  except via assembler macros.  Use of these macros does not allow
! optimal instruction scheduling.  GNU binutils as of version 2.12
  supports a new syntax that allows the compiler to explicitly mark
  which relocations should apply to which instructions.  This option
! is mostly useful for debugging, as GCC detects the capabilities of
  the assembler when it is built and sets the default accordingly.
! .IP \fB\-msmall\-data\fR 4
  .IX Item "-msmall-data"
  .PD 0
! .IP \fB\-mlarge\-data\fR 4
  .IX Item "-mlarge-data"
  .PD
  When \fB\-mexplicit\-relocs\fR is in effect, static data is
! accessed via \fIgp\-relative\fR relocations.  When \fB\-msmall\-data\fR
  is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
  (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
  16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
*************** directly accessed via a single instructi
*** 24927,24940 ****
  The default is \fB\-mlarge\-data\fR.  With this option the data area
  is limited to just below 2GB.  Programs that require more than 2GB of
  data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
! heap instead of in the program's data segment.
  .Sp
  When generating code for shared libraries, \fB\-fpic\fR implies
  \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
! .IP "\fB\-msmall\-text\fR" 4
  .IX Item "-msmall-text"
  .PD 0
! .IP "\fB\-mlarge\-text\fR" 4
  .IX Item "-mlarge-text"
  .PD
  When \fB\-msmall\-text\fR is used, the compiler assumes that the
--- 24862,24875 ----
  The default is \fB\-mlarge\-data\fR.  With this option the data area
  is limited to just below 2GB.  Programs that require more than 2GB of
  data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
! heap instead of in the program\*(Aqs data segment.
  .Sp
  When generating code for shared libraries, \fB\-fpic\fR implies
  \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
! .IP \fB\-msmall\-text\fR 4
  .IX Item "-msmall-text"
  .PD 0
! .IP \fB\-mlarge\-text\fR 4
  .IX Item "-mlarge-text"
  .PD
  When \fB\-msmall\-text\fR is used, the compiler assumes that the
*************** same \f(CW$gp\fR value, and thus reduce
*** 24945,25026 ****
  required for a function call from 4 to 1.
  .Sp
  The default is \fB\-mlarge\-text\fR.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set and instruction scheduling parameters for
! machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
! style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
! parameters for the \s-1EV4, EV5\s0 and \s-1EV6\s0 family of processors and
  chooses the default values for the instruction set from the processor
! you specify.  If you do not specify a processor type, \s-1GCC\s0 defaults
  to the processor on which the compiler was built.
  .Sp
  Supported values for \fIcpu_type\fR are
  .RS 4
! .IP "\fBev4\fR" 4
  .IX Item "ev4"
  .PD 0
! .IP "\fBev45\fR" 4
  .IX Item "ev45"
! .IP "\fB21064\fR" 4
  .IX Item "21064"
  .PD
! Schedules as an \s-1EV4\s0 and has no instruction set extensions.
! .IP "\fBev5\fR" 4
  .IX Item "ev5"
  .PD 0
! .IP "\fB21164\fR" 4
  .IX Item "21164"
  .PD
! Schedules as an \s-1EV5\s0 and has no instruction set extensions.
! .IP "\fBev56\fR" 4
  .IX Item "ev56"
  .PD 0
! .IP "\fB21164a\fR" 4
  .IX Item "21164a"
  .PD
! Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
! .IP "\fBpca56\fR" 4
  .IX Item "pca56"
  .PD 0
! .IP "\fB21164pc\fR" 4
  .IX Item "21164pc"
! .IP "\fB21164PC\fR" 4
  .IX Item "21164PC"
  .PD
! Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
! .IP "\fBev6\fR" 4
  .IX Item "ev6"
  .PD 0
! .IP "\fB21264\fR" 4
  .IX Item "21264"
  .PD
! Schedules as an \s-1EV6\s0 and supports the \s-1BWX, FIX,\s0 and \s-1MAX\s0 extensions.
! .IP "\fBev67\fR" 4
  .IX Item "ev67"
  .PD 0
! .IP "\fB21264a\fR" 4
  .IX Item "21264a"
  .PD
! Schedules as an \s-1EV6\s0 and supports the \s-1BWX, CIX, FIX,\s0 and \s-1MAX\s0 extensions.
  .RE
  .RS 4
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
  .RE
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set only the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR.  The instruction set is not changed.
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
! .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
  .IX Item "-mmemory-latency=time"
  Sets the latency the scheduler should assume for typical memory
  references as seen by the application.  This number is highly
--- 24880,24961 ----
  required for a function call from 4 to 1.
  .Sp
  The default is \fB\-mlarge\-text\fR.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set and instruction scheduling parameters for
! machine type \fIcpu_type\fR.  You can specify either the \fBEV\fR
! style name or the corresponding chip number.  GCC supports scheduling
! parameters for the EV4, EV5 and EV6 family of processors and
  chooses the default values for the instruction set from the processor
! you specify.  If you do not specify a processor type, GCC defaults
  to the processor on which the compiler was built.
  .Sp
  Supported values for \fIcpu_type\fR are
  .RS 4
! .IP \fBev4\fR 4
  .IX Item "ev4"
  .PD 0
! .IP \fBev45\fR 4
  .IX Item "ev45"
! .IP \fB21064\fR 4
  .IX Item "21064"
  .PD
! Schedules as an EV4 and has no instruction set extensions.
! .IP \fBev5\fR 4
  .IX Item "ev5"
  .PD 0
! .IP \fB21164\fR 4
  .IX Item "21164"
  .PD
! Schedules as an EV5 and has no instruction set extensions.
! .IP \fBev56\fR 4
  .IX Item "ev56"
  .PD 0
! .IP \fB21164a\fR 4
  .IX Item "21164a"
  .PD
! Schedules as an EV5 and supports the BWX extension.
! .IP \fBpca56\fR 4
  .IX Item "pca56"
  .PD 0
! .IP \fB21164pc\fR 4
  .IX Item "21164pc"
! .IP \fB21164PC\fR 4
  .IX Item "21164PC"
  .PD
! Schedules as an EV5 and supports the BWX and MAX extensions.
! .IP \fBev6\fR 4
  .IX Item "ev6"
  .PD 0
! .IP \fB21264\fR 4
  .IX Item "21264"
  .PD
! Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
! .IP \fBev67\fR 4
  .IX Item "ev67"
  .PD 0
! .IP \fB21264a\fR 4
  .IX Item "21264a"
  .PD
! Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
  .RE
  .RS 4
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if GCC does not recognize
  the processor.
  .RE
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set only the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR.  The instruction set is not changed.
  .Sp
  Native toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mtune=native\fR has no effect if GCC does not recognize
  the processor.
! .IP \fB\-mmemory\-latency=\fR\fItime\fR 4
  .IX Item "-mmemory-latency=time"
  Sets the latency the scheduler should assume for typical memory
  references as seen by the application.  This number is highly
*************** and the size of the external cache on th
*** 25029,25154 ****
  .Sp
  Valid options for \fItime\fR are
  .RS 4
! .IP "\fInumber\fR" 4
  .IX Item "number"
  A decimal number representing clock cycles.
! .IP "\fBL1\fR" 4
  .IX Item "L1"
  .PD 0
! .IP "\fBL2\fR" 4
  .IX Item "L2"
! .IP "\fBL3\fR" 4
  .IX Item "L3"
! .IP "\fBmain\fR" 4
  .IX Item "main"
  .PD
  The compiler contains estimates of the number of clock cycles for
! \&\*(L"typical\*(R" \s-1EV4 & EV5\s0 hardware for the Level 1, 2 & 3 caches
  (also called Dcache, Scache, and Bcache), as well as to main memory.
! Note that L3 is only valid for \s-1EV5.\s0
  .RE
  .RS 4
  .RE
  .PP
  \fIeBPF Options\fR
  .IX Subsection "eBPF Options"
! .IP "\fB\-mframe\-limit=\fR\fIbytes\fR" 4
  .IX Item "-mframe-limit=bytes"
  This specifies the hard limit for frame sizes, in bytes.  Currently,
  the value that can be specified should be less than or equal to
  \&\fB32767\fR.  Defaults to whatever limit is imposed by the version of
  the Linux kernel targeted.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.  This is the default.
! .IP "\fB\-mjmpext\fR" 4
  .IX Item "-mjmpext"
  .PD 0
! .IP "\fB\-mno\-jmpext\fR" 4
  .IX Item "-mno-jmpext"
  .PD
! Enable or disable generation of extra conditional-branch instructions.
! Enabled for \s-1CPU\s0 v2 and above.
! .IP "\fB\-mjmp32\fR" 4
  .IX Item "-mjmp32"
  .PD 0
! .IP "\fB\-mno\-jmp32\fR" 4
  .IX Item "-mno-jmp32"
  .PD
  Enable or disable generation of 32\-bit jump instructions.
! Enabled for \s-1CPU\s0 v3 and above.
! .IP "\fB\-malu32\fR" 4
  .IX Item "-malu32"
  .PD 0
! .IP "\fB\-mno\-alu32\fR" 4
  .IX Item "-mno-alu32"
  .PD
! Enable or disable generation of 32\-bit \s-1ALU\s0 instructions.
! Enabled for \s-1CPU\s0 v3 and above.
! .IP "\fB\-mv3\-atomics\fR" 4
  .IX Item "-mv3-atomics"
  .PD 0
! .IP "\fB\-mno\-v3\-atomics\fR" 4
  .IX Item "-mno-v3-atomics"
  .PD
  Enable or disable instructions for general atomic operations introduced
! in \s-1CPU\s0 v3.  Enabled for \s-1CPU\s0 v3 and above.
! .IP "\fB\-mbswap\fR" 4
  .IX Item "-mbswap"
  .PD 0
! .IP "\fB\-mno\-bswap\fR" 4
  .IX Item "-mno-bswap"
  .PD
! Enable or disable byte swap instructions.  Enabled for \s-1CPU\s0 v4 and above.
! .IP "\fB\-msdiv\fR" 4
  .IX Item "-msdiv"
  .PD 0
! .IP "\fB\-mno\-sdiv\fR" 4
  .IX Item "-mno-sdiv"
  .PD
  Enable or disable signed division and modulus instructions.  Enabled for
! \&\s-1CPU\s0 v4 and above.
! .IP "\fB\-msmov\fR" 4
  .IX Item "-msmov"
  .PD 0
! .IP "\fB\-mno\-smov\fR" 4
  .IX Item "-mno-smov"
  .PD
! Enable or disable sign-extending move and memory load instructions.
! Enabled for \s-1CPU\s0 v4 and above.
! .IP "\fB\-mcpu=\fR\fIversion\fR" 4
  .IX Item "-mcpu=version"
! This specifies which version of the eBPF \s-1ISA\s0 to target. Newer versions
  may not be supported by all kernels. The default is \fBv4\fR.
  .Sp
  Supported values for \fIversion\fR are:
  .RS 4
! .IP "\fBv1\fR" 4
  .IX Item "v1"
! The first stable eBPF \s-1ISA\s0 with no special features or extensions.
! .IP "\fBv2\fR" 4
  .IX Item "v2"
  Supports the jump extensions, as in \fB\-mjmpext\fR.
! .IP "\fBv3\fR" 4
  .IX Item "v3"
  All features of v2, plus:
  .RS 4
  .IP "\-<32\-bit jump operations, as in \fB\-mjmp32\fR>" 4
  .IX Item "-<32-bit jump operations, as in -mjmp32>"
  .PD 0
! .IP "\-<32\-bit \s-1ALU\s0 operations, as in \fB\-malu32\fR>" 4
  .IX Item "-<32-bit ALU operations, as in -malu32>"
  .IP "\-<general atomic operations, as in \fB\-mv3\-atomics\fR>" 4
  .IX Item "-<general atomic operations, as in -mv3-atomics>"
  .RE
  .RS 4
  .RE
! .IP "\fBv4\fR" 4
  .IX Item "v4"
- .PD
  All features of v3, plus:
  .RS 4
  .IP "\-<Byte swap instructions, as in \fB\-mbswap\fR>" 4
--- 24964,25089 ----
  .Sp
  Valid options for \fItime\fR are
  .RS 4
! .IP \fInumber\fR 4
  .IX Item "number"
  A decimal number representing clock cycles.
! .IP \fBL1\fR 4
  .IX Item "L1"
  .PD 0
! .IP \fBL2\fR 4
  .IX Item "L2"
! .IP \fBL3\fR 4
  .IX Item "L3"
! .IP \fBmain\fR 4
  .IX Item "main"
  .PD
  The compiler contains estimates of the number of clock cycles for
! "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
  (also called Dcache, Scache, and Bcache), as well as to main memory.
! Note that L3 is only valid for EV5.
  .RE
  .RS 4
  .RE
  .PP
  \fIeBPF Options\fR
  .IX Subsection "eBPF Options"
! .IP \fB\-mframe\-limit=\fR\fIbytes\fR 4
  .IX Item "-mframe-limit=bytes"
  This specifies the hard limit for frame sizes, in bytes.  Currently,
  the value that can be specified should be less than or equal to
  \&\fB32767\fR.  Defaults to whatever limit is imposed by the version of
  the Linux kernel targeted.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.  This is the default.
! .IP \fB\-mjmpext\fR 4
  .IX Item "-mjmpext"
  .PD 0
! .IP \fB\-mno\-jmpext\fR 4
  .IX Item "-mno-jmpext"
  .PD
! Enable or disable generation of extra conditional\-branch instructions.
! Enabled for CPU v2 and above.
! .IP \fB\-mjmp32\fR 4
  .IX Item "-mjmp32"
  .PD 0
! .IP \fB\-mno\-jmp32\fR 4
  .IX Item "-mno-jmp32"
  .PD
  Enable or disable generation of 32\-bit jump instructions.
! Enabled for CPU v3 and above.
! .IP \fB\-malu32\fR 4
  .IX Item "-malu32"
  .PD 0
! .IP \fB\-mno\-alu32\fR 4
  .IX Item "-mno-alu32"
  .PD
! Enable or disable generation of 32\-bit ALU instructions.
! Enabled for CPU v3 and above.
! .IP \fB\-mv3\-atomics\fR 4
  .IX Item "-mv3-atomics"
  .PD 0
! .IP \fB\-mno\-v3\-atomics\fR 4
  .IX Item "-mno-v3-atomics"
  .PD
  Enable or disable instructions for general atomic operations introduced
! in CPU v3.  Enabled for CPU v3 and above.
! .IP \fB\-mbswap\fR 4
  .IX Item "-mbswap"
  .PD 0
! .IP \fB\-mno\-bswap\fR 4
  .IX Item "-mno-bswap"
  .PD
! Enable or disable byte swap instructions.  Enabled for CPU v4 and above.
! .IP \fB\-msdiv\fR 4
  .IX Item "-msdiv"
  .PD 0
! .IP \fB\-mno\-sdiv\fR 4
  .IX Item "-mno-sdiv"
  .PD
  Enable or disable signed division and modulus instructions.  Enabled for
! CPU v4 and above.
! .IP \fB\-msmov\fR 4
  .IX Item "-msmov"
  .PD 0
! .IP \fB\-mno\-smov\fR 4
  .IX Item "-mno-smov"
  .PD
! Enable or disable sign\-extending move and memory load instructions.
! Enabled for CPU v4 and above.
! .IP \fB\-mcpu=\fR\fIversion\fR 4
  .IX Item "-mcpu=version"
! This specifies which version of the eBPF ISA to target. Newer versions
  may not be supported by all kernels. The default is \fBv4\fR.
  .Sp
  Supported values for \fIversion\fR are:
  .RS 4
! .IP \fBv1\fR 4
  .IX Item "v1"
! The first stable eBPF ISA with no special features or extensions.
! .IP \fBv2\fR 4
  .IX Item "v2"
  Supports the jump extensions, as in \fB\-mjmpext\fR.
! .IP \fBv3\fR 4
  .IX Item "v3"
  All features of v2, plus:
  .RS 4
  .IP "\-<32\-bit jump operations, as in \fB\-mjmp32\fR>" 4
  .IX Item "-<32-bit jump operations, as in -mjmp32>"
  .PD 0
! .IP "\-<32\-bit ALU operations, as in \fB\-malu32\fR>" 4
  .IX Item "-<32-bit ALU operations, as in -malu32>"
  .IP "\-<general atomic operations, as in \fB\-mv3\-atomics\fR>" 4
  .IX Item "-<general atomic operations, as in -mv3-atomics>"
+ .PD
  .RE
  .RS 4
  .RE
! .IP \fBv4\fR 4
  .IX Item "v4"
  All features of v3, plus:
  .RS 4
  .IP "\-<Byte swap instructions, as in \fB\-mbswap\fR>" 4
*************** All features of v3, plus:
*** 25158,25467 ****
  .IX Item "-<Signed division and modulus instructions, as in -msdiv>"
  .IP "\-<Sign\-extending move and memory load instructions, as in \fB\-msmov\fR>" 4
  .IX Item "-<Sign-extending move and memory load instructions, as in -msmov>"
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .RE
! .IP "\fB\-mco\-re\fR" 4
  .IX Item "-mco-re"
! .PD
! Enable \s-1BPF\s0 Compile Once \- Run Everywhere (CO-RE) support. Requires and
  is implied by \fB\-gbtf\fR.
! .IP "\fB\-mno\-co\-re\fR" 4
  .IX Item "-mno-co-re"
! Disable \s-1BPF\s0 Compile Once \- Run Everywhere (CO-RE) support. \s-1BPF\s0 CO-RE
! support is enabled by default when generating \s-1BTF\s0 debug information for
! the \s-1BPF\s0 target.
! .IP "\fB\-mxbpf\fR" 4
  .IX Item "-mxbpf"
! Generate code for an expanded version of \s-1BPF,\s0 which relaxes some of
! the restrictions imposed by the \s-1BPF\s0 architecture:
  .RS 4
! .IP "\-<Save and restore callee-saved registers at function entry and>" 4
  .IX Item "-<Save and restore callee-saved registers at function entry and>"
  exit, respectively.
  .RE
  .RS 4
  .RE
! .IP "\fB\-masm=\fR\fIdialect\fR" 4
  .IX Item "-masm=dialect"
  Outputs assembly instructions using eBPF selected \fIdialect\fR.  The default
  is \fBpseudoc\fR.
  .Sp
  Supported values for \fIdialect\fR are:
  .RS 4
! .IP "\fBnormal\fR" 4
  .IX Item "normal"
  Outputs normal assembly dialect.
! .IP "\fBpseudoc\fR" 4
  .IX Item "pseudoc"
! Outputs pseudo-c assembly dialect.
  .RE
  .RS 4
  .RE
! .IP "\fB\-minline\-memops\-threshold=\fR\fIbytes\fR" 4
  .IX Item "-minline-memops-threshold=bytes"
  Specifies a size threshold in bytes at or below which memmove, memcpy
  and memset shall always be expanded inline.  Operations dealing with
  sizes larger than this threshold would have to be implemented using
! a library call instead of being expanded inline, but since \s-1BPF\s0 doesn't
! allow libcalls, exceeding this threshold results in a compile-time
  error.  The default is \fB1024\fR bytes.
  .PP
! \fI\s-1FR30\s0 Options\fR
  .IX Subsection "FR30 Options"
  .PP
! These options are defined specifically for the \s-1FR30\s0 port.
! .IP "\fB\-msmall\-model\fR" 4
  .IX Item "-msmall-model"
  Use the small address space model.  This can produce smaller code, but
  it does assume that all symbolic values and addresses fit into a
  20\-bit range.
! .IP "\fB\-mno\-lsim\fR" 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so there is no need
  to include the simulator library (\fIlibsim.a\fR) on the linker
  command line.
  .PP
! \fI\s-1FT32\s0 Options\fR
  .IX Subsection "FT32 Options"
  .PP
! These options are defined specifically for the \s-1FT32\s0 port.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime startup and library to be linked.
  You must not use this option when generating programs that will run on
  real hardware; you must provide your own runtime library for whatever
  I/O functions are needed.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for \s-1FT32,\s0
  so by default the compiler uses standard reload.
! .IP "\fB\-mnodiv\fR" 4
  .IX Item "-mnodiv"
  Do not use div and mod instructions.
! .IP "\fB\-mft32b\fR" 4
  .IX Item "-mft32b"
! Enable use of the extended instructions of the \s-1FT32B\s0 processor.
! .IP "\fB\-mcompress\fR" 4
  .IX Item "-mcompress"
  Compress all code using the Ft32B code compression scheme.
! .IP "\fB\-mnopm\fR" 4
  .IX Item "-mnopm"
  Do not generate code that reads program memory.
  .PP
! \fI\s-1FRV\s0 Options\fR
  .IX Subsection "FRV Options"
! .IP "\fB\-mgpr\-32\fR" 4
  .IX Item "-mgpr-32"
! Only use the first 32 general-purpose registers.
! .IP "\fB\-mgpr\-64\fR" 4
  .IX Item "-mgpr-64"
! Use all 64 general-purpose registers.
! .IP "\fB\-mfpr\-32\fR" 4
  .IX Item "-mfpr-32"
! Use only the first 32 floating-point registers.
! .IP "\fB\-mfpr\-64\fR" 4
  .IX Item "-mfpr-64"
! Use all 64 floating-point registers.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
! Use hardware instructions for floating-point operations.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Use library routines for floating-point operations.
! .IP "\fB\-malloc\-cc\fR" 4
  .IX Item "-malloc-cc"
  Dynamically allocate condition code registers.
! .IP "\fB\-mfixed\-cc\fR" 4
  .IX Item "-mfixed-cc"
  Do not try to dynamically allocate condition code registers, only
  use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
! .IP "\fB\-mdword\fR" 4
  .IX Item "-mdword"
! Change \s-1ABI\s0 to use double word insns.
! .IP "\fB\-mno\-dword\fR" 4
  .IX Item "-mno-dword"
  Do not use double word instructions.
! .IP "\fB\-mdouble\fR" 4
  .IX Item "-mdouble"
! Use floating-point double instructions.
! .IP "\fB\-mno\-double\fR" 4
  .IX Item "-mno-double"
! Do not use floating-point double instructions.
! .IP "\fB\-mmedia\fR" 4
  .IX Item "-mmedia"
  Use media instructions.
! .IP "\fB\-mno\-media\fR" 4
  .IX Item "-mno-media"
  Do not use media instructions.
! .IP "\fB\-mmuladd\fR" 4
  .IX Item "-mmuladd"
  Use multiply and add/subtract instructions.
! .IP "\fB\-mno\-muladd\fR" 4
  .IX Item "-mno-muladd"
  Do not use multiply and add/subtract instructions.
! .IP "\fB\-mfdpic\fR" 4
  .IX Item "-mfdpic"
! Select the \s-1FDPIC ABI,\s0 which uses function descriptors to represent
  pointers to functions.  Without any PIC/PIE\-related options, it
  implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
! assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
! \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
  are computed with 32 bits.
! With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
! .IP "\fB\-minline\-plt\fR" 4
  .IX Item "-minline-plt"
! Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! It's enabled by default if optimizing for speed and compiling for
  shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
  optimization option such as \fB\-O3\fR or above is present in the
  command line.
! .IP "\fB\-mTLS\fR" 4
  .IX Item "-mTLS"
! Assume a large \s-1TLS\s0 segment when generating thread-local code.
! .IP "\fB\-mtls\fR" 4
  .IX Item "-mtls"
! Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
! .IP "\fB\-mgprel\-ro\fR" 4
  .IX Item "-mgprel-ro"
! Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC ABI\s0 for data
! that is known to be in read-only sections.  It's enabled by default,
  except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
  make the global offset table smaller, it trades 1 instruction for 4.
  With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
  one of which may be shared by multiple symbols, and it avoids the need
! for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
  win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
! .IP "\fB\-multilib\-library\-pic\fR" 4
  .IX Item "-multilib-library-pic"
! Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
  \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
  \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
  it explicitly.
! .IP "\fB\-mlinked\-fp\fR" 4
  .IX Item "-mlinked-fp"
! Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
  a stack frame is allocated.  This option is enabled by default and can
  be disabled with \fB\-mno\-linked\-fp\fR.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  Use indirect addressing to call functions outside the current
  compilation unit.  This allows the functions to be placed anywhere
  within the 32\-bit address space.
! .IP "\fB\-malign\-labels\fR" 4
  .IX Item "-malign-labels"
  Try to align labels to an 8\-byte boundary by inserting NOPs into the
! previous packet.  This option only has an effect when \s-1VLIW\s0 packing
! is enabled.  It doesn't create new packets; it merely adds NOPs to
  existing ones.
! .IP "\fB\-mlibrary\-pic\fR" 4
  .IX Item "-mlibrary-pic"
! Generate position-independent \s-1EABI\s0 code.
! .IP "\fB\-macc\-4\fR" 4
  .IX Item "-macc-4"
  Use only the first four media accumulator registers.
! .IP "\fB\-macc\-8\fR" 4
  .IX Item "-macc-8"
  Use all eight media accumulator registers.
! .IP "\fB\-mpack\fR" 4
  .IX Item "-mpack"
! Pack \s-1VLIW\s0 instructions.
! .IP "\fB\-mno\-pack\fR" 4
  .IX Item "-mno-pack"
! Do not pack \s-1VLIW\s0 instructions.
! .IP "\fB\-mno\-eflags\fR" 4
  .IX Item "-mno-eflags"
! Do not mark \s-1ABI\s0 switches in e_flags.
! .IP "\fB\-mcond\-move\fR" 4
  .IX Item "-mcond-move"
! Enable the use of conditional-move instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-cond\-move\fR" 4
  .IX Item "-mno-cond-move"
! Disable the use of conditional-move instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mscc\fR" 4
  .IX Item "-mscc"
  Enable the use of conditional set instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-scc\fR" 4
  .IX Item "-mno-scc"
  Disable the use of conditional set instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mcond\-exec\fR" 4
  .IX Item "-mcond-exec"
  Enable the use of conditional execution (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-cond\-exec\fR" 4
  .IX Item "-mno-cond-exec"
  Disable the use of conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mvliw\-branch\fR" 4
  .IX Item "-mvliw-branch"
! Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-vliw\-branch\fR" 4
  .IX Item "-mno-vliw-branch"
! Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mmulti\-cond\-exec\fR" 4
  .IX Item "-mmulti-cond-exec"
  Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
  (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
  .IX Item "-mno-multi-cond-exec"
  Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mnested\-cond\-exec\fR" 4
  .IX Item "-mnested-cond-exec"
  Enable nested conditional execution optimizations (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
  .IX Item "-mno-nested-cond-exec"
  Disable nested conditional execution optimizations.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP "\fB\-moptimize\-membar\fR" 4
  .IX Item "-moptimize-membar"
  This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
! compiler-generated code.  It is enabled by default.
! .IP "\fB\-mno\-optimize\-membar\fR" 4
  .IX Item "-mno-optimize-membar"
  This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
  instructions from the generated code.
! .IP "\fB\-mtomcat\-stats\fR" 4
  .IX Item "-mtomcat-stats"
  Cause gas to print out tomcat statistics.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Select the processor type for which to generate code.  Possible values are
  \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
--- 25093,25402 ----
  .IX Item "-<Signed division and modulus instructions, as in -msdiv>"
  .IP "\-<Sign\-extending move and memory load instructions, as in \fB\-msmov\fR>" 4
  .IX Item "-<Sign-extending move and memory load instructions, as in -msmov>"
+ .PD
  .RE
  .RS 4
  .RE
  .RE
  .RS 4
  .RE
! .IP \fB\-mco\-re\fR 4
  .IX Item "-mco-re"
! Enable BPF Compile Once \- Run Everywhere (CO\-RE) support. Requires and
  is implied by \fB\-gbtf\fR.
! .IP \fB\-mno\-co\-re\fR 4
  .IX Item "-mno-co-re"
! Disable BPF Compile Once \- Run Everywhere (CO\-RE) support. BPF CO\-RE
! support is enabled by default when generating BTF debug information for
! the BPF target.
! .IP \fB\-mxbpf\fR 4
  .IX Item "-mxbpf"
! Generate code for an expanded version of BPF, which relaxes some of
! the restrictions imposed by the BPF architecture:
  .RS 4
! .IP "\-<Save and restore callee\-saved registers at function entry and>" 4
  .IX Item "-<Save and restore callee-saved registers at function entry and>"
  exit, respectively.
  .RE
  .RS 4
  .RE
! .IP \fB\-masm=\fR\fIdialect\fR 4
  .IX Item "-masm=dialect"
  Outputs assembly instructions using eBPF selected \fIdialect\fR.  The default
  is \fBpseudoc\fR.
  .Sp
  Supported values for \fIdialect\fR are:
  .RS 4
! .IP \fBnormal\fR 4
  .IX Item "normal"
  Outputs normal assembly dialect.
! .IP \fBpseudoc\fR 4
  .IX Item "pseudoc"
! Outputs pseudo\-c assembly dialect.
  .RE
  .RS 4
  .RE
! .IP \fB\-minline\-memops\-threshold=\fR\fIbytes\fR 4
  .IX Item "-minline-memops-threshold=bytes"
  Specifies a size threshold in bytes at or below which memmove, memcpy
  and memset shall always be expanded inline.  Operations dealing with
  sizes larger than this threshold would have to be implemented using
! a library call instead of being expanded inline, but since BPF doesn\*(Aqt
! allow libcalls, exceeding this threshold results in a compile\-time
  error.  The default is \fB1024\fR bytes.
  .PP
! \fIFR30 Options\fR
  .IX Subsection "FR30 Options"
  .PP
! These options are defined specifically for the FR30 port.
! .IP \fB\-msmall\-model\fR 4
  .IX Item "-msmall-model"
  Use the small address space model.  This can produce smaller code, but
  it does assume that all symbolic values and addresses fit into a
  20\-bit range.
! .IP \fB\-mno\-lsim\fR 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so there is no need
  to include the simulator library (\fIlibsim.a\fR) on the linker
  command line.
  .PP
! \fIFT32 Options\fR
  .IX Subsection "FT32 Options"
  .PP
! These options are defined specifically for the FT32 port.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime startup and library to be linked.
  You must not use this option when generating programs that will run on
  real hardware; you must provide your own runtime library for whatever
  I/O functions are needed.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
! Enable Local Register Allocation.  This is still experimental for FT32,
  so by default the compiler uses standard reload.
! .IP \fB\-mnodiv\fR 4
  .IX Item "-mnodiv"
  Do not use div and mod instructions.
! .IP \fB\-mft32b\fR 4
  .IX Item "-mft32b"
! Enable use of the extended instructions of the FT32B processor.
! .IP \fB\-mcompress\fR 4
  .IX Item "-mcompress"
  Compress all code using the Ft32B code compression scheme.
! .IP \fB\-mnopm\fR 4
  .IX Item "-mnopm"
  Do not generate code that reads program memory.
  .PP
! \fIFRV Options\fR
  .IX Subsection "FRV Options"
! .IP \fB\-mgpr\-32\fR 4
  .IX Item "-mgpr-32"
! Only use the first 32 general\-purpose registers.
! .IP \fB\-mgpr\-64\fR 4
  .IX Item "-mgpr-64"
! Use all 64 general\-purpose registers.
! .IP \fB\-mfpr\-32\fR 4
  .IX Item "-mfpr-32"
! Use only the first 32 floating\-point registers.
! .IP \fB\-mfpr\-64\fR 4
  .IX Item "-mfpr-64"
! Use all 64 floating\-point registers.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
! Use hardware instructions for floating\-point operations.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Use library routines for floating\-point operations.
! .IP \fB\-malloc\-cc\fR 4
  .IX Item "-malloc-cc"
  Dynamically allocate condition code registers.
! .IP \fB\-mfixed\-cc\fR 4
  .IX Item "-mfixed-cc"
  Do not try to dynamically allocate condition code registers, only
  use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
! .IP \fB\-mdword\fR 4
  .IX Item "-mdword"
! Change ABI to use double word insns.
! .IP \fB\-mno\-dword\fR 4
  .IX Item "-mno-dword"
  Do not use double word instructions.
! .IP \fB\-mdouble\fR 4
  .IX Item "-mdouble"
! Use floating\-point double instructions.
! .IP \fB\-mno\-double\fR 4
  .IX Item "-mno-double"
! Do not use floating\-point double instructions.
! .IP \fB\-mmedia\fR 4
  .IX Item "-mmedia"
  Use media instructions.
! .IP \fB\-mno\-media\fR 4
  .IX Item "-mno-media"
  Do not use media instructions.
! .IP \fB\-mmuladd\fR 4
  .IX Item "-mmuladd"
  Use multiply and add/subtract instructions.
! .IP \fB\-mno\-muladd\fR 4
  .IX Item "-mno-muladd"
  Do not use multiply and add/subtract instructions.
! .IP \fB\-mfdpic\fR 4
  .IX Item "-mfdpic"
! Select the FDPIC ABI, which uses function descriptors to represent
  pointers to functions.  Without any PIC/PIE\-related options, it
  implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
! assumes GOT entries and small data are within a 12\-bit range from the
! GOT base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, GOT offsets
  are computed with 32 bits.
! With a \fBbfin\-elf\fR target, this option implies \fB\-msim\fR.
! .IP \fB\-minline\-plt\fR 4
  .IX Item "-minline-plt"
! Enable inlining of PLT entries in function calls to functions that are
  not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
! It\*(Aqs enabled by default if optimizing for speed and compiling for
  shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
  optimization option such as \fB\-O3\fR or above is present in the
  command line.
! .IP \fB\-mTLS\fR 4
  .IX Item "-mTLS"
! Assume a large TLS segment when generating thread\-local code.
! .IP \fB\-mtls\fR 4
  .IX Item "-mtls"
! Do not assume a large TLS segment when generating thread\-local code.
! .IP \fB\-mgprel\-ro\fR 4
  .IX Item "-mgprel-ro"
! Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the FDPIC ABI for data
! that is known to be in read\-only sections.  It\*(Aqs enabled by default,
  except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
  make the global offset table smaller, it trades 1 instruction for 4.
  With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
  one of which may be shared by multiple symbols, and it avoids the need
! for a GOT entry for the referenced symbol, so it\*(Aqs more likely to be a
  win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
! .IP \fB\-multilib\-library\-pic\fR 4
  .IX Item "-multilib-library-pic"
! Link with the (library, not FD) pic libraries.  It\*(Aqs implied by
  \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
  \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
  it explicitly.
! .IP \fB\-mlinked\-fp\fR 4
  .IX Item "-mlinked-fp"
! Follow the EABI requirement of always creating a frame pointer whenever
  a stack frame is allocated.  This option is enabled by default and can
  be disabled with \fB\-mno\-linked\-fp\fR.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  Use indirect addressing to call functions outside the current
  compilation unit.  This allows the functions to be placed anywhere
  within the 32\-bit address space.
! .IP \fB\-malign\-labels\fR 4
  .IX Item "-malign-labels"
  Try to align labels to an 8\-byte boundary by inserting NOPs into the
! previous packet.  This option only has an effect when VLIW packing
! is enabled.  It doesn\*(Aqt create new packets; it merely adds NOPs to
  existing ones.
! .IP \fB\-mlibrary\-pic\fR 4
  .IX Item "-mlibrary-pic"
! Generate position\-independent EABI code.
! .IP \fB\-macc\-4\fR 4
  .IX Item "-macc-4"
  Use only the first four media accumulator registers.
! .IP \fB\-macc\-8\fR 4
  .IX Item "-macc-8"
  Use all eight media accumulator registers.
! .IP \fB\-mpack\fR 4
  .IX Item "-mpack"
! Pack VLIW instructions.
! .IP \fB\-mno\-pack\fR 4
  .IX Item "-mno-pack"
! Do not pack VLIW instructions.
! .IP \fB\-mno\-eflags\fR 4
  .IX Item "-mno-eflags"
! Do not mark ABI switches in e_flags.
! .IP \fB\-mcond\-move\fR 4
  .IX Item "-mcond-move"
! Enable the use of conditional\-move instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-cond\-move\fR 4
  .IX Item "-mno-cond-move"
! Disable the use of conditional\-move instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mscc\fR 4
  .IX Item "-mscc"
  Enable the use of conditional set instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-scc\fR 4
  .IX Item "-mno-scc"
  Disable the use of conditional set instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mcond\-exec\fR 4
  .IX Item "-mcond-exec"
  Enable the use of conditional execution (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-cond\-exec\fR 4
  .IX Item "-mno-cond-exec"
  Disable the use of conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mvliw\-branch\fR 4
  .IX Item "-mvliw-branch"
! Run a pass to pack branches into VLIW instructions (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-vliw\-branch\fR 4
  .IX Item "-mno-vliw-branch"
! Do not run a pass to pack branches into VLIW instructions.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mmulti\-cond\-exec\fR 4
  .IX Item "-mmulti-cond-exec"
  Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
  (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-multi\-cond\-exec\fR 4
  .IX Item "-mno-multi-cond-exec"
  Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mnested\-cond\-exec\fR 4
  .IX Item "-mnested-cond-exec"
  Enable nested conditional execution optimizations (default).
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-mno\-nested\-cond\-exec\fR 4
  .IX Item "-mno-nested-cond-exec"
  Disable nested conditional execution optimizations.
  .Sp
  This switch is mainly for debugging the compiler and will likely be removed
  in a future version.
! .IP \fB\-moptimize\-membar\fR 4
  .IX Item "-moptimize-membar"
  This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
! compiler\-generated code.  It is enabled by default.
! .IP \fB\-mno\-optimize\-membar\fR 4
  .IX Item "-mno-optimize-membar"
  This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
  instructions from the generated code.
! .IP \fB\-mtomcat\-stats\fR 4
  .IX Item "-mtomcat-stats"
  Cause gas to print out tomcat statistics.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Select the processor type for which to generate code.  Possible values are
  \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
*************** Select the processor type for which to g
*** 25471,25509 ****
  .IX Subsection "GNU/Linux Options"
  .PP
  These \fB\-m\fR options are defined for GNU/Linux targets:
! .IP "\fB\-mglibc\fR" 4
  .IX Item "-mglibc"
! Use the \s-1GNU C\s0 library.  This is the default except
  on \fB*\-*\-linux\-*uclibc*\fR, \fB*\-*\-linux\-*musl*\fR and
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP "\fB\-muclibc\fR" 4
  .IX Item "-muclibc"
  Use uClibc C library.  This is the default on
  \&\fB*\-*\-linux\-*uclibc*\fR targets.
! .IP "\fB\-mmusl\fR" 4
  .IX Item "-mmusl"
  Use the musl C library.  This is the default on
  \&\fB*\-*\-linux\-*musl*\fR targets.
! .IP "\fB\-mbionic\fR" 4
  .IX Item "-mbionic"
  Use Bionic C library.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP "\fB\-mandroid\fR" 4
  .IX Item "-mandroid"
  Compile code compatible with Android platform.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
  .Sp
  When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
  \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
! this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
  Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
  to be defined.
! .IP "\fB\-tno\-android\-cc\fR" 4
  .IX Item "-tno-android-cc"
  Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
  \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
  \&\fB\-fno\-rtti\fR by default.
! .IP "\fB\-tno\-android\-ld\fR" 4
  .IX Item "-tno-android-ld"
  Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
  linking options to the linker.
--- 25406,25444 ----
  .IX Subsection "GNU/Linux Options"
  .PP
  These \fB\-m\fR options are defined for GNU/Linux targets:
! .IP \fB\-mglibc\fR 4
  .IX Item "-mglibc"
! Use the GNU C library.  This is the default except
  on \fB*\-*\-linux\-*uclibc*\fR, \fB*\-*\-linux\-*musl*\fR and
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP \fB\-muclibc\fR 4
  .IX Item "-muclibc"
  Use uClibc C library.  This is the default on
  \&\fB*\-*\-linux\-*uclibc*\fR targets.
! .IP \fB\-mmusl\fR 4
  .IX Item "-mmusl"
  Use the musl C library.  This is the default on
  \&\fB*\-*\-linux\-*musl*\fR targets.
! .IP \fB\-mbionic\fR 4
  .IX Item "-mbionic"
  Use Bionic C library.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
! .IP \fB\-mandroid\fR 4
  .IX Item "-mandroid"
  Compile code compatible with Android platform.  This is the default on
  \&\fB*\-*\-linux\-*android*\fR targets.
  .Sp
  When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
  \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
! this option makes the GCC driver pass Android\-specific options to the linker.
  Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
  to be defined.
! .IP \fB\-tno\-android\-cc\fR 4
  .IX Item "-tno-android-cc"
  Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
  \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
  \&\fB\-fno\-rtti\fR by default.
! .IP \fB\-tno\-android\-ld\fR 4
  .IX Item "-tno-android-ld"
  Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
  linking options to the linker.
*************** linking options to the linker.
*** 25512,25548 ****
  .IX Subsection "H8/300 Options"
  .PP
  These \fB\-m\fR options are defined for the H8/300 implementations:
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP "\fB\-mh\fR" 4
  .IX Item "-mh"
  Generate code for the H8/300H.
! .IP "\fB\-ms\fR" 4
  .IX Item "-ms"
  Generate code for the H8S.
! .IP "\fB\-mn\fR" 4
  .IX Item "-mn"
  Generate code for the H8S and H8/300H in the normal mode.  This switch
  must be used either with \fB\-mh\fR or \fB\-ms\fR.
! .IP "\fB\-ms2600\fR" 4
  .IX Item "-ms2600"
  Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
! .IP "\fB\-mexr\fR" 4
  .IX Item "-mexr"
  Extended registers are stored on stack before execution of function
  with monitor attribute. Default option is \fB\-mexr\fR.
  This option is valid only for H8S targets.
! .IP "\fB\-mno\-exr\fR" 4
  .IX Item "-mno-exr"
  Extended registers are not stored on stack before execution of function 
  with monitor attribute. Default option is \fB\-mno\-exr\fR. 
  This option is valid only for H8S targets.
! .IP "\fB\-mint32\fR" 4
  .IX Item "-mint32"
  Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
! .IP "\fB\-malign\-300\fR" 4
  .IX Item "-malign-300"
  On the H8/300H and H8S, use the same alignment rules as for the H8/300.
  The default for the H8/300H and H8S is to align longs and floats on
--- 25447,25483 ----
  .IX Subsection "H8/300 Options"
  .PP
  These \fB\-m\fR options are defined for the H8/300 implementations:
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP \fB\-mh\fR 4
  .IX Item "-mh"
  Generate code for the H8/300H.
! .IP \fB\-ms\fR 4
  .IX Item "-ms"
  Generate code for the H8S.
! .IP \fB\-mn\fR 4
  .IX Item "-mn"
  Generate code for the H8S and H8/300H in the normal mode.  This switch
  must be used either with \fB\-mh\fR or \fB\-ms\fR.
! .IP \fB\-ms2600\fR 4
  .IX Item "-ms2600"
  Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
! .IP \fB\-mexr\fR 4
  .IX Item "-mexr"
  Extended registers are stored on stack before execution of function
  with monitor attribute. Default option is \fB\-mexr\fR.
  This option is valid only for H8S targets.
! .IP \fB\-mno\-exr\fR 4
  .IX Item "-mno-exr"
  Extended registers are not stored on stack before execution of function 
  with monitor attribute. Default option is \fB\-mno\-exr\fR. 
  This option is valid only for H8S targets.
! .IP \fB\-mint32\fR 4
  .IX Item "-mint32"
  Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
! .IP \fB\-malign\-300\fR 4
  .IX Item "-malign-300"
  On the H8/300H and H8S, use the same alignment rules as for the H8/300.
  The default for the H8/300H and H8S is to align longs and floats on
*************** The default for the H8/300H and H8S is t
*** 25550,25582 ****
  \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
  This option has no effect on the H8/300.
  .PP
! \fI\s-1HPPA\s0 Options\fR
  .IX Subsection "HPPA Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
! .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
  .IX Item "-march=architecture-type"
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA 1.0,\s0 \fB1.1\fR for \s-1PA
! 1.1,\s0 and \fB2.0\fR for \s-1PA 2.0\s0 processors.  Refer to
! \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
  architecture option for your machine.  Code compiled for lower numbered
  architectures runs on higher numbered architectures, but not the
  other way around.
! .IP "\fB\-mpa\-risc\-1\-0\fR" 4
  .IX Item "-mpa-risc-1-0"
  .PD 0
! .IP "\fB\-mpa\-risc\-1\-1\fR" 4
  .IX Item "-mpa-risc-1-1"
! .IP "\fB\-mpa\-risc\-2\-0\fR" 4
  .IX Item "-mpa-risc-2-0"
  .PD
  Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
! .IP "\fB\-matomic\-libcalls\fR" 4
  .IX Item "-matomic-libcalls"
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  This option is enabled by default.  It only affects the generation of
! atomic libcalls by the \s-1HPPA\s0 backend.
  .Sp
  Both the sync and \fIlibatomic\fR libcall implementations use locking.
  As a result, processor stores are not atomic with respect to other
--- 25485,25517 ----
  \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
  This option has no effect on the H8/300.
  .PP
! \fIHPPA Options\fR
  .IX Subsection "HPPA Options"
  .PP
! These \fB\-m\fR options are defined for the HPPA family of computers:
! .IP \fB\-march=\fR\fIarchitecture\-type\fR 4
  .IX Item "-march=architecture-type"
  Generate code for the specified architecture.  The choices for
! \&\fIarchitecture\-type\fR are \fB1.0\fR for PA 1.0, \fB1.1\fR for PA
! 1.1, and \fB2.0\fR for PA 2.0 processors.  Refer to
! \&\fI/usr/lib/sched.models\fR on an HP\-UX system to determine the proper
  architecture option for your machine.  Code compiled for lower numbered
  architectures runs on higher numbered architectures, but not the
  other way around.
! .IP \fB\-mpa\-risc\-1\-0\fR 4
  .IX Item "-mpa-risc-1-0"
  .PD 0
! .IP \fB\-mpa\-risc\-1\-1\fR 4
  .IX Item "-mpa-risc-1-1"
! .IP \fB\-mpa\-risc\-2\-0\fR 4
  .IX Item "-mpa-risc-2-0"
  .PD
  Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
! .IP \fB\-matomic\-libcalls\fR 4
  .IX Item "-matomic-libcalls"
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  This option is enabled by default.  It only affects the generation of
! atomic libcalls by the HPPA backend.
  .Sp
  Both the sync and \fIlibatomic\fR libcall implementations use locking.
  As a result, processor stores are not atomic with respect to other
*************** atomic operations.  Processor loads up t
*** 25584,25590 ****
  respect to other atomic operations provided they are implemented as
  a single access.
  .Sp
! The PA-RISC architecture does not support any atomic operations in
  hardware except for the \f(CW\*(C`ldcw\*(C'\fR instruction.  Thus, all atomic
  support is implemented using sync and atomic libcalls.  Sync libcall
  support is in \fIlibgcc.a\fR.  Atomic libcall support is in
--- 25519,25525 ----
  respect to other atomic operations provided they are implemented as
  a single access.
  .Sp
! The PA\-RISC architecture does not support any atomic operations in
  hardware except for the \f(CW\*(C`ldcw\*(C'\fR instruction.  Thus, all atomic
  support is implemented using sync and atomic libcalls.  Sync libcall
  support is in \fIlibgcc.a\fR.  Atomic libcall support is in
*************** support is in \fIlibgcc.a\fR.  Atomic li
*** 25593,25668 ****
  This option generates \f(CW\*(C`_\|_atomic_exchange\*(C'\fR calls for atomic stores.
  It also provides special handling for atomic DImode accesses on 32\-bit
  targets.
! .IP "\fB\-mbig\-switch\fR" 4
  .IX Item "-mbig-switch"
  Does nothing.  Preserved for backward compatibility.
! .IP "\fB\-mcaller\-copies\fR" 4
  .IX Item "-mcaller-copies"
  The caller copies function arguments passed by hidden reference.  This
  option should be used with care as it is not compatible with the default
  32\-bit runtime.  However, only aggregates larger than eight bytes are
  passed by hidden reference and the option provides better compatibility
  with OpenMP.
! .IP "\fB\-mcoherent\-ldcw\fR" 4
  .IX Item "-mcoherent-ldcw"
! Use ldcw/ldcd coherent cache-control hint.
! .IP "\fB\-mdisable\-fpregs\fR" 4
  .IX Item "-mdisable-fpregs"
! Disable floating-point registers.  Equivalent to \f(CW\*(C`\-msoft\-float\*(C'\fR.
! .IP "\fB\-mdisable\-indexing\fR" 4
  .IX Item "-mdisable-indexing"
  Prevent the compiler from using indexing address modes.  This avoids some
! rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH.\s0
! .IP "\fB\-mfast\-indirect\-calls\fR" 4
  .IX Item "-mfast-indirect-calls"
  Generate code that assumes calls never cross space boundaries.  This
! allows \s-1GCC\s0 to emit code that performs faster indirect calls.
  .Sp
  This option does not work in the presence of shared libraries or nested
  functions.
! .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP "\fB\-mgas\fR" 4
  .IX Item "-mgas"
! Enable the use of assembler directives only \s-1GAS\s0 understands.
! .IP "\fB\-mgnu\-ld\fR" 4
  .IX Item "-mgnu-ld"
! Use options specific to \s-1GNU\s0 \fBld\fR.
  This passes \fB\-shared\fR to \fBld\fR when
! building a shared library.  It is the default when \s-1GCC\s0 is configured,
! explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
  affect which \fBld\fR is called; it only changes what parameters
  are passed to that \fBld\fR.
  The \fBld\fR that is called is determined by the
! \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
! finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
! using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
! on the 64\-bit HP-UX \s-1GCC,\s0 i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP "\fB\-mhp\-ld\fR" 4
  .IX Item "-mhp-ld"
! Use options specific to \s-1HP\s0 \fBld\fR.
  This passes \fB\-b\fR to \fBld\fR when building
  a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
! links.  It is the default when \s-1GCC\s0 is configured, explicitly or
! implicitly, with the \s-1HP\s0 linker.  This option does not affect
  which \fBld\fR is called; it only changes what parameters are passed to that
  \&\fBld\fR.
  The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
! configure option, \s-1GCC\s0's program search path, and finally by the user's
! \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
! `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
! HP-UX \s-1GCC,\s0 i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP "\fB\-mlinker\-opt\fR" 4
  .IX Item "-mlinker-opt"
! Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
! debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
  linkers in which they give bogus error messages when linking some programs.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  Generate code that uses long call sequences.  This ensures that a call
  is always able to reach linker generated stubs.  The default is to generate
--- 25528,25603 ----
  This option generates \f(CW\*(C`_\|_atomic_exchange\*(C'\fR calls for atomic stores.
  It also provides special handling for atomic DImode accesses on 32\-bit
  targets.
! .IP \fB\-mbig\-switch\fR 4
  .IX Item "-mbig-switch"
  Does nothing.  Preserved for backward compatibility.
! .IP \fB\-mcaller\-copies\fR 4
  .IX Item "-mcaller-copies"
  The caller copies function arguments passed by hidden reference.  This
  option should be used with care as it is not compatible with the default
  32\-bit runtime.  However, only aggregates larger than eight bytes are
  passed by hidden reference and the option provides better compatibility
  with OpenMP.
! .IP \fB\-mcoherent\-ldcw\fR 4
  .IX Item "-mcoherent-ldcw"
! Use ldcw/ldcd coherent cache\-control hint.
! .IP \fB\-mdisable\-fpregs\fR 4
  .IX Item "-mdisable-fpregs"
! Disable floating\-point registers.  Equivalent to \f(CW\*(C`\-msoft\-float\*(C'\fR.
! .IP \fB\-mdisable\-indexing\fR 4
  .IX Item "-mdisable-indexing"
  Prevent the compiler from using indexing address modes.  This avoids some
! rather obscure problems when compiling MIG generated code under MACH.
! .IP \fB\-mfast\-indirect\-calls\fR 4
  .IX Item "-mfast-indirect-calls"
  Generate code that assumes calls never cross space boundaries.  This
! allows GCC to emit code that performs faster indirect calls.
  .Sp
  This option does not work in the presence of shared libraries or nested
  functions.
! .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP \fB\-mgas\fR 4
  .IX Item "-mgas"
! Enable the use of assembler directives only GAS understands.
! .IP \fB\-mgnu\-ld\fR 4
  .IX Item "-mgnu-ld"
! Use options specific to GNU \fBld\fR.
  This passes \fB\-shared\fR to \fBld\fR when
! building a shared library.  It is the default when GCC is configured,
! explicitly or implicitly, with the GNU linker.  This option does not
  affect which \fBld\fR is called; it only changes what parameters
  are passed to that \fBld\fR.
  The \fBld\fR that is called is determined by the
! \&\fB\-\-with\-ld\fR configure option, GCC\*(Aqs program search path, and
! finally by the user\*(Aqs \fBPATH\fR.  The linker used by GCC can be printed
! using \fBwhich \`gcc \-print\-prog\-name=ld\`\fR.  This option is only available
! on the 64\-bit HP\-UX GCC, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP \fB\-mhp\-ld\fR 4
  .IX Item "-mhp-ld"
! Use options specific to HP \fBld\fR.
  This passes \fB\-b\fR to \fBld\fR when building
  a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
! links.  It is the default when GCC is configured, explicitly or
! implicitly, with the HP linker.  This option does not affect
  which \fBld\fR is called; it only changes what parameters are passed to that
  \&\fBld\fR.
  The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
! configure option, GCC\*(Aqs program search path, and finally by the user\*(Aqs
! \&\fBPATH\fR.  The linker used by GCC can be printed using \fBwhich
! \&\`gcc \-print\-prog\-name=ld\`\fR.  This option is only available on the 64\-bit
! HP\-UX GCC, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
! .IP \fB\-mlinker\-opt\fR 4
  .IX Item "-mlinker-opt"
! Enable the optimization pass in the HP\-UX linker.  Note this makes symbolic
! debugging impossible.  It also triggers a bug in the HP\-UX 8 and HP\-UX 9
  linkers in which they give bogus error messages when linking some programs.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  Generate code that uses long call sequences.  This ensures that a call
  is always able to reach linker generated stubs.  The default is to generate
*************** long calls only when the distance from t
*** 25670,25682 ****
  of the function or translation unit, as the case may be, exceeds a
  predefined limit set by the branch type being used.  The limits for
  normal calls are 7,600,000 and 240,000 bytes, respectively for the
! \&\s-1PA 2.0\s0 and \s-1PA 1.X\s0 architectures.  Sibcalls are always limited at
  240,000 bytes.
  .Sp
  Distances are measured from the beginning of functions when using the
  \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
! and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
! the \s-1SOM\s0 linker.
  .Sp
  It is normally not desirable to use this option as it degrades
  performance.  However, it may be useful in large applications,
--- 25605,25617 ----
  of the function or translation unit, as the case may be, exceeds a
  predefined limit set by the branch type being used.  The limits for
  normal calls are 7,600,000 and 240,000 bytes, respectively for the
! PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
  240,000 bytes.
  .Sp
  Distances are measured from the beginning of functions when using the
  \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
! and \fB\-mno\-portable\-runtime\fR options together under HP\-UX with
! the SOM linker.
  .Sp
  It is normally not desirable to use this option as it degrades
  performance.  However, it may be useful in large applications,
*************** particularly when partial linking is use
*** 25685,25757 ****
  The types of long calls used depends on the capabilities of the
  assembler and linker, and the type of code being generated.  The
  impact on systems that support long absolute calls, and long pic
! symbol-difference or pc-relative calls should be relatively small.
! However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
  and it is quite long.
! .IP "\fB\-mlong\-load\-store\fR" 4
  .IX Item "-mlong-load-store"
  Generate 3\-instruction load and store sequences as sometimes required by
! the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
! the \s-1HP\s0 compilers.
! .IP "\fB\-mjump\-in\-delay\fR" 4
  .IX Item "-mjump-in-delay"
  This option is ignored and provided for compatibility purposes only.
! .IP "\fB\-mno\-space\-regs\fR" 4
  .IX Item "-mno-space-regs"
  Generate code that assumes the target has no space registers.  This allows
! \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
  .Sp
! Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
! .IP "\fB\-mordered\fR" 4
  .IX Item "-mordered"
  Assume memory references are ordered and barriers are not needed.
! .IP "\fB\-mportable\-runtime\fR" 4
  .IX Item "-mportable-runtime"
! Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
! .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
  .IX Item "-mschedule=cpu-type"
  Schedule code according to the constraints for the machine type
! \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
  \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
! to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
  proper scheduling option for your machine.  The default scheduling is
  \&\fB8000\fR.
! .IP "\fB\-msio\fR" 4
  .IX Item "-msio"
! Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO.\s0  The default is
  \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
! \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO.\s0  These
! options are available under HP-UX and HI-UX.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
! targets.  Normally the facilities of the machine's usual C compiler are
! used, but this cannot be done directly in cross-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross-compilation.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
  this to work.
! .IP "\fB\-msoft\-mult\fR" 4
  .IX Item "-msoft-mult"
  Use software integer multiplication.
  .Sp
  This disables the use of the \f(CW\*(C`xmpyu\*(C'\fR instruction.
! .IP "\fB\-munix=\fR\fIunix-std\fR" 4
  .IX Item "-munix=unix-std"
  Generate compiler predefines and select a startfile for the specified
! \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
! and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
! is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
! 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
! \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
  and later.
  .Sp
! \&\fB\-munix=93\fR provides the same predefines as \s-1GCC 3.3\s0 and 3.4.
  \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
  and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
  \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
--- 25620,25692 ----
  The types of long calls used depends on the capabilities of the
  assembler and linker, and the type of code being generated.  The
  impact on systems that support long absolute calls, and long pic
! symbol\-difference or pc\-relative calls should be relatively small.
! However, an indirect call is used on 32\-bit ELF systems in pic code
  and it is quite long.
! .IP \fB\-mlong\-load\-store\fR 4
  .IX Item "-mlong-load-store"
  Generate 3\-instruction load and store sequences as sometimes required by
! the HP\-UX 10 linker.  This is equivalent to the \fB+k\fR option to
! the HP compilers.
! .IP \fB\-mjump\-in\-delay\fR 4
  .IX Item "-mjump-in-delay"
  This option is ignored and provided for compatibility purposes only.
! .IP \fB\-mno\-space\-regs\fR 4
  .IX Item "-mno-space-regs"
  Generate code that assumes the target has no space registers.  This allows
! GCC to generate faster indirect calls and use unscaled index address modes.
  .Sp
! Such code is suitable for level 0 PA systems and kernels.
! .IP \fB\-mordered\fR 4
  .IX Item "-mordered"
  Assume memory references are ordered and barriers are not needed.
! .IP \fB\-mportable\-runtime\fR 4
  .IX Item "-mportable-runtime"
! Use the portable calling conventions proposed by HP for ELF systems.
! .IP \fB\-mschedule=\fR\fIcpu\-type\fR 4
  .IX Item "-mschedule=cpu-type"
  Schedule code according to the constraints for the machine type
! \&\fIcpu\-type\fR.  The choices for \fIcpu\-type\fR are \fB700\fR
  \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
! to \fI/usr/lib/sched.models\fR on an HP\-UX system to determine the
  proper scheduling option for your machine.  The default scheduling is
  \&\fB8000\fR.
! .IP \fB\-msio\fR 4
  .IX Item "-msio"
! Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server IO.  The default is
  \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
! \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation IO.  These
! options are available under HP\-UX and HI\-UX.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all HPPA
! targets.  Normally the facilities of the machine\*(Aqs usual C compiler are
! used, but this cannot be done directly in cross\-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross\-compilation.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with GCC, with \fB\-msoft\-float\fR in order for
  this to work.
! .IP \fB\-msoft\-mult\fR 4
  .IX Item "-msoft-mult"
  Use software integer multiplication.
  .Sp
  This disables the use of the \f(CW\*(C`xmpyu\*(C'\fR instruction.
! .IP \fB\-munix=\fR\fIunix\-std\fR 4
  .IX Item "-munix=unix-std"
  Generate compiler predefines and select a startfile for the specified
! UNIX standard.  The choices for \fIunix\-std\fR are \fB93\fR, \fB95\fR
! and \fB98\fR.  \fB93\fR is supported on all HP\-UX versions.  \fB95\fR
! is available on HP\-UX 10.10 and later.  \fB98\fR is available on HP\-UX
! 11.11 and later.  The default values are \fB93\fR for HP\-UX 10.00,
! \&\fB95\fR for HP\-UX 10.10 though to 11.00, and \fB98\fR for HP\-UX 11.11
  and later.
  .Sp
! \&\fB\-munix=93\fR provides the same predefines as GCC 3.3 and 3.4.
  \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
  and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
  \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
*************** for various library routines.  It also a
*** 25763,25963 ****
  of the C library.  Thus, \fIextreme\fR care is needed in using this
  option.
  .Sp
! Library code that is intended to operate with more than one \s-1UNIX\s0
  standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
! as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
! .IP "\fB\-nolibdld\fR" 4
  .IX Item "-nolibdld"
  Suppress the generation of link options to search libdld.sl when the
! \&\fB\-static\fR option is specified on HP-UX 10 and later.
! .IP "\fB\-static\fR" 4
  .IX Item "-static"
! The HP-UX implementation of setlocale in libc has a dependency on
! libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
  when the \fB\-static\fR option is specified, special link options
  are needed to resolve this dependency.
  .Sp
! On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
  link with libdld.sl when the \fB\-static\fR option is specified.
  This causes the resulting binary to be dynamic.  On the 64\-bit port,
  the linkers generate dynamic binaries by default in any case.  The
! \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
  adding these link options.
! .IP "\fB\-threads\fR" 4
  .IX Item "-threads"
  Add support for multithreading with the \fIdce thread\fR library
! under HP-UX.  This option sets flags for both the preprocessor and
  linker.
  .PP
! \fI\s-1IA\-64\s0 Options\fR
  .IX Subsection "IA-64 Options"
  .PP
! These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.  This is the default for HP-UX.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
  and GNU/Linux.
! .IP "\fB\-mgnu\-as\fR" 4
  .IX Item "-mgnu-as"
  .PD 0
! .IP "\fB\-mno\-gnu\-as\fR" 4
  .IX Item "-mno-gnu-as"
  .PD
! Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
! .IP "\fB\-mgnu\-ld\fR" 4
  .IX Item "-mgnu-ld"
  .PD 0
! .IP "\fB\-mno\-gnu\-ld\fR" 4
  .IX Item "-mno-gnu-ld"
  .PD
! Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
! .IP "\fB\-mno\-pic\fR" 4
  .IX Item "-mno-pic"
  Generate code that does not use a global pointer register.  The result
! is not position independent code, and violates the \s-1IA\-64 ABI.\s0
! .IP "\fB\-mvolatile\-asm\-stop\fR" 4
  .IX Item "-mvolatile-asm-stop"
  .PD 0
! .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
  .IX Item "-mno-volatile-asm-stop"
  .PD
! Generate (or don't) a stop bit immediately before and after volatile asm
  statements.
! .IP "\fB\-mregister\-names\fR" 4
  .IX Item "-mregister-names"
  .PD 0
! .IP "\fB\-mno\-register\-names\fR" 4
  .IX Item "-mno-register-names"
  .PD
! Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
  the stacked registers.  This may make assembler output more readable.
! .IP "\fB\-mno\-sdata\fR" 4
  .IX Item "-mno-sdata"
  .PD 0
! .IP "\fB\-msdata\fR" 4
  .IX Item "-msdata"
  .PD
  Disable (or enable) optimizations that use the small data section.  This may
  be useful for working around optimizer bugs.
! .IP "\fB\-mconstant\-gp\fR" 4
  .IX Item "-mconstant-gp"
  Generate code that uses a single constant global pointer value.  This is
  useful when compiling kernel code.
! .IP "\fB\-mauto\-pic\fR" 4
  .IX Item "-mauto-pic"
! Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
  This is useful when compiling firmware code.
! .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
  .IX Item "-minline-float-divide-min-latency"
! Generate code for inline divides of floating-point values
  using the minimum latency algorithm.
! .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
  .IX Item "-minline-float-divide-max-throughput"
! Generate code for inline divides of floating-point values
  using the maximum throughput algorithm.
! .IP "\fB\-mno\-inline\-float\-divide\fR" 4
  .IX Item "-mno-inline-float-divide"
! Do not generate inline code for divides of floating-point values.
! .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
  .IX Item "-minline-int-divide-min-latency"
  Generate code for inline divides of integer values
  using the minimum latency algorithm.
! .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
  .IX Item "-minline-int-divide-max-throughput"
  Generate code for inline divides of integer values
  using the maximum throughput algorithm.
! .IP "\fB\-mno\-inline\-int\-divide\fR" 4
  .IX Item "-mno-inline-int-divide"
  Do not generate inline code for divides of integer values.
! .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
  .IX Item "-minline-sqrt-min-latency"
  Generate code for inline square roots
  using the minimum latency algorithm.
! .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
  .IX Item "-minline-sqrt-max-throughput"
  Generate code for inline square roots
  using the maximum throughput algorithm.
! .IP "\fB\-mno\-inline\-sqrt\fR" 4
  .IX Item "-mno-inline-sqrt"
  Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Do (don't) generate code that uses the fused multiply/add or multiply/subtract
  instructions.  The default is to use these instructions.
! .IP "\fB\-mno\-dwarf2\-asm\fR" 4
  .IX Item "-mno-dwarf2-asm"
  .PD 0
! .IP "\fB\-mdwarf2\-asm\fR" 4
  .IX Item "-mdwarf2-asm"
  .PD
! Don't (or do) generate assembler code for the \s-1DWARF\s0 line number debugging
! info.  This may be useful when not using the \s-1GNU\s0 assembler.
! .IP "\fB\-mearly\-stop\-bits\fR" 4
  .IX Item "-mearly-stop-bits"
  .PD 0
! .IP "\fB\-mno\-early\-stop\-bits\fR" 4
  .IX Item "-mno-early-stop-bits"
  .PD
  Allow stop bits to be placed earlier than immediately preceding the
  instruction that triggered the stop bit.  This can improve instruction
  scheduling, but does not always do so.
! .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
  .IX Item "-mtls-size=tls-size"
! Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
  64.
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Tune the instruction scheduling for a particular \s-1CPU,\s0 Valid values are
  \&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
  and \fBmckinley\fR.
! .IP "\fB\-milp32\fR" 4
  .IX Item "-milp32"
  .PD 0
! .IP "\fB\-mlp64\fR" 4
  .IX Item "-mlp64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
! to 64 bits.  These are HP-UX specific flags.
! .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
  .IX Item "-mno-sched-br-data-spec"
  .PD 0
! .IP "\fB\-msched\-br\-data\-spec\fR" 4
  .IX Item "-msched-br-data-spec"
  .PD
  (Dis/En)able data speculative scheduling before reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is disabled.
! .IP "\fB\-msched\-ar\-data\-spec\fR" 4
  .IX Item "-msched-ar-data-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
  .IX Item "-mno-sched-ar-data-spec"
  .PD
  (En/Dis)able data speculative scheduling after reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is enabled.
! .IP "\fB\-mno\-sched\-control\-spec\fR" 4
  .IX Item "-mno-sched-control-spec"
  .PD 0
! .IP "\fB\-msched\-control\-spec\fR" 4
  .IX Item "-msched-control-spec"
  .PD
  (Dis/En)able control speculative scheduling.  This feature is
--- 25698,25898 ----
  of the C library.  Thus, \fIextreme\fR care is needed in using this
  option.
  .Sp
! Library code that is intended to operate with more than one UNIX
  standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
! as appropriate.  Most GNU software doesn\*(Aqt provide this capability.
! .IP \fB\-nolibdld\fR 4
  .IX Item "-nolibdld"
  Suppress the generation of link options to search libdld.sl when the
! \&\fB\-static\fR option is specified on HP\-UX 10 and later.
! .IP \fB\-static\fR 4
  .IX Item "-static"
! The HP\-UX implementation of setlocale in libc has a dependency on
! libdld.sl.  There isn\*(Aqt an archive version of libdld.sl.  Thus,
  when the \fB\-static\fR option is specified, special link options
  are needed to resolve this dependency.
  .Sp
! On HP\-UX 10 and later, the GCC driver adds the necessary options to
  link with libdld.sl when the \fB\-static\fR option is specified.
  This causes the resulting binary to be dynamic.  On the 64\-bit port,
  the linkers generate dynamic binaries by default in any case.  The
! \&\fB\-nolibdld\fR option can be used to prevent the GCC driver from
  adding these link options.
! .IP \fB\-threads\fR 4
  .IX Item "-threads"
  Add support for multithreading with the \fIdce thread\fR library
! under HP\-UX.  This option sets flags for both the preprocessor and
  linker.
  .PP
! \fIIA\-64 Options\fR
  .IX Subsection "IA-64 Options"
  .PP
! These are the \fB\-m\fR options defined for the Intel IA\-64 architecture.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.  This is the default for HP\-UX.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.  This is the default for AIX5
  and GNU/Linux.
! .IP \fB\-mgnu\-as\fR 4
  .IX Item "-mgnu-as"
  .PD 0
! .IP \fB\-mno\-gnu\-as\fR 4
  .IX Item "-mno-gnu-as"
  .PD
! Generate (or don\*(Aqt) code for the GNU assembler.  This is the default.
! .IP \fB\-mgnu\-ld\fR 4
  .IX Item "-mgnu-ld"
  .PD 0
! .IP \fB\-mno\-gnu\-ld\fR 4
  .IX Item "-mno-gnu-ld"
  .PD
! Generate (or don\*(Aqt) code for the GNU linker.  This is the default.
! .IP \fB\-mno\-pic\fR 4
  .IX Item "-mno-pic"
  Generate code that does not use a global pointer register.  The result
! is not position independent code, and violates the IA\-64 ABI.
! .IP \fB\-mvolatile\-asm\-stop\fR 4
  .IX Item "-mvolatile-asm-stop"
  .PD 0
! .IP \fB\-mno\-volatile\-asm\-stop\fR 4
  .IX Item "-mno-volatile-asm-stop"
  .PD
! Generate (or don\*(Aqt) a stop bit immediately before and after volatile asm
  statements.
! .IP \fB\-mregister\-names\fR 4
  .IX Item "-mregister-names"
  .PD 0
! .IP \fB\-mno\-register\-names\fR 4
  .IX Item "-mno-register-names"
  .PD
! Generate (or don\*(Aqt) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
  the stacked registers.  This may make assembler output more readable.
! .IP \fB\-mno\-sdata\fR 4
  .IX Item "-mno-sdata"
  .PD 0
! .IP \fB\-msdata\fR 4
  .IX Item "-msdata"
  .PD
  Disable (or enable) optimizations that use the small data section.  This may
  be useful for working around optimizer bugs.
! .IP \fB\-mconstant\-gp\fR 4
  .IX Item "-mconstant-gp"
  Generate code that uses a single constant global pointer value.  This is
  useful when compiling kernel code.
! .IP \fB\-mauto\-pic\fR 4
  .IX Item "-mauto-pic"
! Generate code that is self\-relocatable.  This implies \fB\-mconstant\-gp\fR.
  This is useful when compiling firmware code.
! .IP \fB\-minline\-float\-divide\-min\-latency\fR 4
  .IX Item "-minline-float-divide-min-latency"
! Generate code for inline divides of floating\-point values
  using the minimum latency algorithm.
! .IP \fB\-minline\-float\-divide\-max\-throughput\fR 4
  .IX Item "-minline-float-divide-max-throughput"
! Generate code for inline divides of floating\-point values
  using the maximum throughput algorithm.
! .IP \fB\-mno\-inline\-float\-divide\fR 4
  .IX Item "-mno-inline-float-divide"
! Do not generate inline code for divides of floating\-point values.
! .IP \fB\-minline\-int\-divide\-min\-latency\fR 4
  .IX Item "-minline-int-divide-min-latency"
  Generate code for inline divides of integer values
  using the minimum latency algorithm.
! .IP \fB\-minline\-int\-divide\-max\-throughput\fR 4
  .IX Item "-minline-int-divide-max-throughput"
  Generate code for inline divides of integer values
  using the maximum throughput algorithm.
! .IP \fB\-mno\-inline\-int\-divide\fR 4
  .IX Item "-mno-inline-int-divide"
  Do not generate inline code for divides of integer values.
! .IP \fB\-minline\-sqrt\-min\-latency\fR 4
  .IX Item "-minline-sqrt-min-latency"
  Generate code for inline square roots
  using the minimum latency algorithm.
! .IP \fB\-minline\-sqrt\-max\-throughput\fR 4
  .IX Item "-minline-sqrt-max-throughput"
  Generate code for inline square roots
  using the maximum throughput algorithm.
! .IP \fB\-mno\-inline\-sqrt\fR 4
  .IX Item "-mno-inline-sqrt"
  Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Do (don\*(Aqt) generate code that uses the fused multiply/add or multiply/subtract
  instructions.  The default is to use these instructions.
! .IP \fB\-mno\-dwarf2\-asm\fR 4
  .IX Item "-mno-dwarf2-asm"
  .PD 0
! .IP \fB\-mdwarf2\-asm\fR 4
  .IX Item "-mdwarf2-asm"
  .PD
! Don\*(Aqt (or do) generate assembler code for the DWARF line number debugging
! info.  This may be useful when not using the GNU assembler.
! .IP \fB\-mearly\-stop\-bits\fR 4
  .IX Item "-mearly-stop-bits"
  .PD 0
! .IP \fB\-mno\-early\-stop\-bits\fR 4
  .IX Item "-mno-early-stop-bits"
  .PD
  Allow stop bits to be placed earlier than immediately preceding the
  instruction that triggered the stop bit.  This can improve instruction
  scheduling, but does not always do so.
! .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP \fB\-mtls\-size=\fR\fItls\-size\fR 4
  .IX Item "-mtls-size=tls-size"
! Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
  64.
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Tune the instruction scheduling for a particular CPU, Valid values are
  \&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
  and \fBmckinley\fR.
! .IP \fB\-milp32\fR 4
  .IX Item "-milp32"
  .PD 0
! .IP \fB\-mlp64\fR 4
  .IX Item "-mlp64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
! to 64 bits.  These are HP\-UX specific flags.
! .IP \fB\-mno\-sched\-br\-data\-spec\fR 4
  .IX Item "-mno-sched-br-data-spec"
  .PD 0
! .IP \fB\-msched\-br\-data\-spec\fR 4
  .IX Item "-msched-br-data-spec"
  .PD
  (Dis/En)able data speculative scheduling before reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is disabled.
! .IP \fB\-msched\-ar\-data\-spec\fR 4
  .IX Item "-msched-ar-data-spec"
  .PD 0
! .IP \fB\-mno\-sched\-ar\-data\-spec\fR 4
  .IX Item "-mno-sched-ar-data-spec"
  .PD
  (En/Dis)able data speculative scheduling after reload.
  This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
  the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
  The default setting is enabled.
! .IP \fB\-mno\-sched\-control\-spec\fR 4
  .IX Item "-mno-sched-control-spec"
  .PD 0
! .IP \fB\-msched\-control\-spec\fR 4
  .IX Item "-msched-control-spec"
  .PD
  (Dis/En)able control speculative scheduling.  This feature is
*************** available only during region scheduling
*** 25965,26318 ****
  This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
  the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
  The default setting is disabled.
! .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
  .IX Item "-msched-br-in-data-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
  .IX Item "-mno-sched-br-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads before reload.
  This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
  .IX Item "-msched-ar-in-data-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
  .IX Item "-mno-sched-ar-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads after reload.
  This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP "\fB\-msched\-in\-control\-spec\fR" 4
  .IX Item "-msched-in-control-spec"
  .PD 0
! .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
  .IX Item "-mno-sched-in-control-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the control speculative loads.
  This is effective only with \fB\-msched\-control\-spec\fR enabled.
  The default setting is enabled.
! .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
  .IX Item "-mno-sched-prefer-non-data-spec-insns"
  .PD 0
! .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
  .IX Item "-msched-prefer-non-data-spec-insns"
  .PD
! If enabled, data-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the data speculation much more conservative.
  The default setting is disabled.
! .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
  .IX Item "-mno-sched-prefer-non-control-spec-insns"
  .PD 0
! .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
  .IX Item "-msched-prefer-non-control-spec-insns"
  .PD
! If enabled, control-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the control speculation much more conservative.
  The default setting is disabled.
! .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
  .IX Item "-mno-sched-count-spec-in-critical-path"
  .PD 0
! .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
  .IX Item "-msched-count-spec-in-critical-path"
  .PD
  If enabled, speculative dependencies are considered during
  computation of the instructions priorities.  This makes the use of the
  speculation a bit more conservative.
  The default setting is disabled.
! .IP "\fB\-msched\-spec\-ldc\fR" 4
  .IX Item "-msched-spec-ldc"
  Use a simple data speculation check.  This option is on by default.
! .IP "\fB\-msched\-control\-spec\-ldc\fR" 4
  .IX Item "-msched-control-spec-ldc"
  Use a simple check for control speculation.  This option is on by default.
! .IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
  .IX Item "-msched-stop-bits-after-every-cycle"
  Place a stop bit after every cycle when scheduling.  This option is on
  by default.
! .IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
  .IX Item "-msched-fp-mem-deps-zero-cost"
! Assume that floating-point stores and loads are not likely to cause a conflict
  when placed into the same instruction group.  This option is disabled by
  default.
! .IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
  .IX Item "-msel-sched-dont-check-control-spec"
  Generate checks for control speculation in selective scheduling.
  This flag is disabled by default.
! .IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
  .IX Item "-msched-max-memory-insns=max-insns"
  Limit on the number of memory insns per instruction group, giving lower
  priority to subsequent memory insns attempting to schedule in the same
  instruction group. Frequently useful to prevent cache bank conflicts.
  The default value is 1.
! .IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
  .IX Item "-msched-max-memory-insns-hard-limit"
! Makes the limit specified by \fBmsched-max-memory-insns\fR a hard limit,
  disallowing more than that number in an instruction group.
! Otherwise, the limit is \*(L"soft\*(R", meaning that non-memory operations
  are preferred when the limit is reached, but memory operations may still
  be scheduled.
  .PP
! \fI\s-1LM32\s0 Options\fR
  .IX Subsection "LM32 Options"
  .PP
  These \fB\-m\fR options are defined for the LatticeMico32 architecture:
! .IP "\fB\-mbarrel\-shift\-enabled\fR" 4
  .IX Item "-mbarrel-shift-enabled"
! Enable barrel-shift instructions.
! .IP "\fB\-mdivide\-enabled\fR" 4
  .IX Item "-mdivide-enabled"
  Enable divide and modulus instructions.
! .IP "\fB\-mmultiply\-enabled\fR" 4
  .IX Item "-mmultiply-enabled"
  Enable multiply instructions.
! .IP "\fB\-msign\-extend\-enabled\fR" 4
  .IX Item "-msign-extend-enabled"
  Enable sign extend instructions.
! .IP "\fB\-muser\-enabled\fR" 4
  .IX Item "-muser-enabled"
! Enable user-defined instructions.
  .PP
  \fILoongArch Options\fR
  .IX Subsection "LoongArch Options"
  .PP
! These command-line options are defined for LoongArch targets:
! .IP "\fB\-march=\fR\fIarch-type\fR" 4
  .IX Item "-march=arch-type"
! Generate instructions for the machine type \fIarch-type\fR.
! \&\fB\-march=\fR\fIarch-type\fR allows \s-1GCC\s0 to generate code that
  may not run at all on processors other than the one indicated.
  .Sp
! The choices for \fIarch-type\fR are:
  .RS 4
! .IP "\fBnative\fR" 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP "\fBloongarch64\fR" 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP "\fBla464\fR" 4
  .IX Item "la464"
! LoongArch LA464\-based processor with \s-1LSX, LASX.\s0
! .IP "\fBla664\fR" 4
  .IX Item "la664"
! LoongArch LA664\-based processor with \s-1LSX, LASX\s0
  and all LoongArch v1.1 instructions.
! .IP "\fBla64v1.0\fR" 4
  .IX Item "la64v1.0"
! LoongArch64 \s-1ISA\s0 version 1.0.
! .IP "\fBla64v1.1\fR" 4
  .IX Item "la64v1.1"
! LoongArch64 \s-1ISA\s0 version 1.1.
  .RE
  .RS 4
  .Sp
! More information about LoongArch \s-1ISA\s0 versions can be found at
  <\fBhttps://github.com/loongson/la\-toolchain\-conventions\fR>.
  .RE
! .IP "\fB\-mtune=\fR\fItune-type\fR" 4
  .IX Item "-mtune=tune-type"
  Optimize the generated code for the given processor target.
  .Sp
! The choices for \fItune-type\fR are:
  .RS 4
! .IP "\fBnative\fR" 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP "\fBgeneric\fR" 4
  .IX Item "generic"
  Generic LoongArch processor.
! .IP "\fBloongarch64\fR" 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP "\fBla464\fR" 4
  .IX Item "la464"
! LoongArch \s-1LA464\s0 core.
! .IP "\fBla664\fR" 4
  .IX Item "la664"
! LoongArch \s-1LA664\s0 core.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mabi=\fR\fIbase-abi-type\fR" 4
  .IX Item "-mabi=base-abi-type"
  Generate code for the specified calling convention.
! \&\fIbase-abi-type\fR can be one of:
  .RS 4
! .IP "\fBlp64d\fR" 4
  .IX Item "lp64d"
! Uses 64\-bit general purpose registers and 32/64\-bit floating-point
! registers for parameter passing.  Data model is \s-1LP64,\s0 where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP "\fBlp64f\fR" 4
  .IX Item "lp64f"
! Uses 64\-bit general purpose registers and 32\-bit floating-point
! registers for parameter passing.  Data model is \s-1LP64,\s0 where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP "\fBlp64s\fR" 4
  .IX Item "lp64s"
! Uses 64\-bit general purpose registers and no floating-point
! registers for parameter passing.  Data model is \s-1LP64,\s0 where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfpu=\fR\fIfpu-type\fR" 4
  .IX Item "-mfpu=fpu-type"
! Generate code for the specified \s-1FPU\s0 type, which can be one of:
  .RS 4
! .IP "\fB64\fR" 4
  .IX Item "64"
! Allow the use of hardware floating-point instructions for 32\-bit
  and 64\-bit operations.
! .IP "\fB32\fR" 4
  .IX Item "32"
! Allow the use of hardware floating-point instructions for 32\-bit
  operations.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  .PD 0
! .IP "\fB0\fR" 4
  .IX Item "0"
  .PD
! Prevent the use of hardware floating-point instructions.
  .RE
  .RS 4
  .RE
! .IP "\fB\-msimd=\fR\fIsimd-type\fR" 4
  .IX Item "-msimd=simd-type"
! Enable generation of LoongArch \s-1SIMD\s0 instructions for vectorization
  and via builtin functions.  The value can be one of:
  .RS 4
! .IP "\fBlasx\fR" 4
  .IX Item "lasx"
  Enable generating instructions from the 256\-bit LoongArch Advanced
! \&\s-1SIMD\s0 Extension (\s-1LASX\s0) and the 128\-bit LoongArch \s-1SIMD\s0 Extension (\s-1LSX\s0).
! .IP "\fBlsx\fR" 4
  .IX Item "lsx"
! Enable generating instructions from the 128\-bit LoongArch \s-1SIMD\s0
! Extension (\s-1LSX\s0).
! .IP "\fBnone\fR" 4
  .IX Item "none"
! No LoongArch \s-1SIMD\s0 instruction may be generated.
  .RE
  .RS 4
  .RE
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Force \fB\-mfpu=none\fR and prevents the use of floating-point
  registers for parameter passing.  This option may change the target
! \&\s-1ABI.\s0
! .IP "\fB\-msingle\-float\fR" 4
  .IX Item "-msingle-float"
! Force \fB\-mfpu=32\fR and allow the use of 32\-bit floating-point
  registers for parameter passing.  This option may change the target
! \&\s-1ABI.\s0
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
! Force \fB\-mfpu=64\fR and allow the use of 32/64\-bit floating-point
  registers for parameter passing.  This option may change the target
! \&\s-1ABI.\s0
! .IP "\fB\-mlasx\fR" 4
  .IX Item "-mlasx"
  .PD 0
! .IP "\fB\-mno\-lasx\fR" 4
  .IX Item "-mno-lasx"
! .IP "\fB\-mlsx\fR" 4
  .IX Item "-mlsx"
! .IP "\fB\-mno\-lsx\fR" 4
  .IX Item "-mno-lsx"
  .PD
! Incrementally adjust the scope of the \s-1SIMD\s0 extensions (none / \s-1LSX / LASX\s0)
! that can be used by the compiler for code generation.  Enabling \s-1LASX\s0 with
! \&\fBmlasx\fR automatically enables \s-1LSX,\s0 and diabling \s-1LSX\s0 with \fBmno-lsx\fR
! automatically disables \s-1LASX.\s0  These driver-only options act upon the final
  \&\fBmsimd\fR configuration state and make incremental chagnes in the order
! they appear on the \s-1GCC\s0 driver's command line, deriving the final / canonicalized
  \&\fBmsimd\fR option that is passed to the compiler proper.
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP "\fB\-mcheck\-zero\-division\fR" 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP "\fB\-mno\-check\-zero\-divison\fR" 4
  .IX Item "-mno-check-zero-divison"
  .PD
  Trap (do not trap) on integer division by zero.  The default is
  \&\fB\-mcheck\-zero\-division\fR for \fB\-O0\fR or \fB\-Og\fR, and
  \&\fB\-mno\-check\-zero\-division\fR for other optimization levels.
! .IP "\fB\-mcond\-move\-int\fR" 4
  .IX Item "-mcond-move-int"
  .PD 0
! .IP "\fB\-mno\-cond\-move\-int\fR" 4
  .IX Item "-mno-cond-move-int"
  .PD
! Conditional moves for integral data in general-purpose registers
  are enabled (disabled).  The default is \fB\-mcond\-move\-int\fR.
! .IP "\fB\-mcond\-move\-float\fR" 4
  .IX Item "-mcond-move-float"
  .PD 0
! .IP "\fB\-mno\-cond\-move\-float\fR" 4
  .IX Item "-mno-cond-move-float"
  .PD
! Conditional moves for floating-point registers are enabled (disabled).
  The default is \fB\-mcond\-move\-float\fR.
! .IP "\fB\-mmemcpy\fR" 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP "\fB\-mno\-memcpy\fR" 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non-trivial block moves.
! The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline most
! constant-sized copies.  Setting optimization level to \fB\-Os\fR also
  forces the use of \f(CW\*(C`memcpy\*(C'\fR, but \fB\-mno\-memcpy\fR may override this
  behavior if explicitly specified, regardless of the order these options on
  the command line.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification. The default is
  \&\fB\-mno\-strict\-align\fR.
! .IP "\fB\-msmall\-data\-limit=\fR\fInumber\fR" 4
  .IX Item "-msmall-data-limit=number"
  Put global and static data smaller than \fInumber\fR bytes into a special
  section (on some targets).  The default value is 0.
! .IP "\fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR" 4
  .IX Item "-mmax-inline-memcpy-size=n"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure copies)
  less than or equal to \fIn\fR bytes.  The default value of \fIn\fR is 1024.
! .IP "\fB\-mcmodel=\fR\fIcode-model\fR" 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of:
  .RS 4
! .IP "\fBtiny-static (Not implemented yet)\fR" 4
  .IX Item "tiny-static (Not implemented yet)"
  .PD 0
  .IP "\fBtiny (Not implemented yet)\fR" 4
  .IX Item "tiny (Not implemented yet)"
! .IP "\fBnormal\fR" 4
  .IX Item "normal"
  .PD
  The text segment must be within 128MB addressing space.  The data segment must
  be within 2GB addressing space.
! .IP "\fBmedium\fR" 4
  .IX Item "medium"
  The text segment and data segment must be within 2GB addressing space.
  .IP "\fBlarge (Not implemented yet)\fR" 4
  .IX Item "large (Not implemented yet)"
  .PD 0
! .IP "\fBextreme\fR" 4
  .IX Item "extreme"
  .PD
  This mode does not limit the size of the code segment and data segment.
--- 25900,26253 ----
  This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
  the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
  The default setting is disabled.
! .IP \fB\-msched\-br\-in\-data\-spec\fR 4
  .IX Item "-msched-br-in-data-spec"
  .PD 0
! .IP \fB\-mno\-sched\-br\-in\-data\-spec\fR 4
  .IX Item "-mno-sched-br-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads before reload.
  This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP \fB\-msched\-ar\-in\-data\-spec\fR 4
  .IX Item "-msched-ar-in-data-spec"
  .PD 0
! .IP \fB\-mno\-sched\-ar\-in\-data\-spec\fR 4
  .IX Item "-mno-sched-ar-in-data-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the data speculative loads after reload.
  This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
  The default setting is enabled.
! .IP \fB\-msched\-in\-control\-spec\fR 4
  .IX Item "-msched-in-control-spec"
  .PD 0
! .IP \fB\-mno\-sched\-in\-control\-spec\fR 4
  .IX Item "-mno-sched-in-control-spec"
  .PD
  (En/Dis)able speculative scheduling of the instructions that
  are dependent on the control speculative loads.
  This is effective only with \fB\-msched\-control\-spec\fR enabled.
  The default setting is enabled.
! .IP \fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR 4
  .IX Item "-mno-sched-prefer-non-data-spec-insns"
  .PD 0
! .IP \fB\-msched\-prefer\-non\-data\-spec\-insns\fR 4
  .IX Item "-msched-prefer-non-data-spec-insns"
  .PD
! If enabled, data\-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the data speculation much more conservative.
  The default setting is disabled.
! .IP \fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR 4
  .IX Item "-mno-sched-prefer-non-control-spec-insns"
  .PD 0
! .IP \fB\-msched\-prefer\-non\-control\-spec\-insns\fR 4
  .IX Item "-msched-prefer-non-control-spec-insns"
  .PD
! If enabled, control\-speculative instructions are chosen for schedule
  only if there are no other choices at the moment.  This makes
  the use of the control speculation much more conservative.
  The default setting is disabled.
! .IP \fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR 4
  .IX Item "-mno-sched-count-spec-in-critical-path"
  .PD 0
! .IP \fB\-msched\-count\-spec\-in\-critical\-path\fR 4
  .IX Item "-msched-count-spec-in-critical-path"
  .PD
  If enabled, speculative dependencies are considered during
  computation of the instructions priorities.  This makes the use of the
  speculation a bit more conservative.
  The default setting is disabled.
! .IP \fB\-msched\-spec\-ldc\fR 4
  .IX Item "-msched-spec-ldc"
  Use a simple data speculation check.  This option is on by default.
! .IP \fB\-msched\-control\-spec\-ldc\fR 4
  .IX Item "-msched-control-spec-ldc"
  Use a simple check for control speculation.  This option is on by default.
! .IP \fB\-msched\-stop\-bits\-after\-every\-cycle\fR 4
  .IX Item "-msched-stop-bits-after-every-cycle"
  Place a stop bit after every cycle when scheduling.  This option is on
  by default.
! .IP \fB\-msched\-fp\-mem\-deps\-zero\-cost\fR 4
  .IX Item "-msched-fp-mem-deps-zero-cost"
! Assume that floating\-point stores and loads are not likely to cause a conflict
  when placed into the same instruction group.  This option is disabled by
  default.
! .IP \fB\-msel\-sched\-dont\-check\-control\-spec\fR 4
  .IX Item "-msel-sched-dont-check-control-spec"
  Generate checks for control speculation in selective scheduling.
  This flag is disabled by default.
! .IP \fB\-msched\-max\-memory\-insns=\fR\fImax\-insns\fR 4
  .IX Item "-msched-max-memory-insns=max-insns"
  Limit on the number of memory insns per instruction group, giving lower
  priority to subsequent memory insns attempting to schedule in the same
  instruction group. Frequently useful to prevent cache bank conflicts.
  The default value is 1.
! .IP \fB\-msched\-max\-memory\-insns\-hard\-limit\fR 4
  .IX Item "-msched-max-memory-insns-hard-limit"
! Makes the limit specified by \fBmsched\-max\-memory\-insns\fR a hard limit,
  disallowing more than that number in an instruction group.
! Otherwise, the limit is "soft", meaning that non\-memory operations
  are preferred when the limit is reached, but memory operations may still
  be scheduled.
  .PP
! \fILM32 Options\fR
  .IX Subsection "LM32 Options"
  .PP
  These \fB\-m\fR options are defined for the LatticeMico32 architecture:
! .IP \fB\-mbarrel\-shift\-enabled\fR 4
  .IX Item "-mbarrel-shift-enabled"
! Enable barrel\-shift instructions.
! .IP \fB\-mdivide\-enabled\fR 4
  .IX Item "-mdivide-enabled"
  Enable divide and modulus instructions.
! .IP \fB\-mmultiply\-enabled\fR 4
  .IX Item "-mmultiply-enabled"
  Enable multiply instructions.
! .IP \fB\-msign\-extend\-enabled\fR 4
  .IX Item "-msign-extend-enabled"
  Enable sign extend instructions.
! .IP \fB\-muser\-enabled\fR 4
  .IX Item "-muser-enabled"
! Enable user\-defined instructions.
  .PP
  \fILoongArch Options\fR
  .IX Subsection "LoongArch Options"
  .PP
! These command\-line options are defined for LoongArch targets:
! .IP \fB\-march=\fR\fIarch\-type\fR 4
  .IX Item "-march=arch-type"
! Generate instructions for the machine type \fIarch\-type\fR.
! \&\fB\-march=\fR\fIarch\-type\fR allows GCC to generate code that
  may not run at all on processors other than the one indicated.
  .Sp
! The choices for \fIarch\-type\fR are:
  .RS 4
! .IP \fBnative\fR 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP \fBloongarch64\fR 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP \fBla464\fR 4
  .IX Item "la464"
! LoongArch LA464\-based processor with LSX, LASX.
! .IP \fBla664\fR 4
  .IX Item "la664"
! LoongArch LA664\-based processor with LSX, LASX
  and all LoongArch v1.1 instructions.
! .IP \fBla64v1.0\fR 4
  .IX Item "la64v1.0"
! LoongArch64 ISA version 1.0.
! .IP \fBla64v1.1\fR 4
  .IX Item "la64v1.1"
! LoongArch64 ISA version 1.1.
  .RE
  .RS 4
  .Sp
! More information about LoongArch ISA versions can be found at
  <\fBhttps://github.com/loongson/la\-toolchain\-conventions\fR>.
  .RE
! .IP \fB\-mtune=\fR\fItune\-type\fR 4
  .IX Item "-mtune=tune-type"
  Optimize the generated code for the given processor target.
  .Sp
! The choices for \fItune\-type\fR are:
  .RS 4
! .IP \fBnative\fR 4
  .IX Item "native"
  Local processor type detected by the native compiler.
! .IP \fBgeneric\fR 4
  .IX Item "generic"
  Generic LoongArch processor.
! .IP \fBloongarch64\fR 4
  .IX Item "loongarch64"
  Generic LoongArch 64\-bit processor.
! .IP \fBla464\fR 4
  .IX Item "la464"
! LoongArch LA464 core.
! .IP \fBla664\fR 4
  .IX Item "la664"
! LoongArch LA664 core.
  .RE
  .RS 4
  .RE
! .IP \fB\-mabi=\fR\fIbase\-abi\-type\fR 4
  .IX Item "-mabi=base-abi-type"
  Generate code for the specified calling convention.
! \&\fIbase\-abi\-type\fR can be one of:
  .RS 4
! .IP \fBlp64d\fR 4
  .IX Item "lp64d"
! Uses 64\-bit general purpose registers and 32/64\-bit floating\-point
! registers for parameter passing.  Data model is LP64, where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP \fBlp64f\fR 4
  .IX Item "lp64f"
! Uses 64\-bit general purpose registers and 32\-bit floating\-point
! registers for parameter passing.  Data model is LP64, where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
! .IP \fBlp64s\fR 4
  .IX Item "lp64s"
! Uses 64\-bit general purpose registers and no floating\-point
! registers for parameter passing.  Data model is LP64, where \fBint\fR
  is 32 bits, while \fBlong int\fR and pointers are 64 bits.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfpu=\fR\fIfpu\-type\fR 4
  .IX Item "-mfpu=fpu-type"
! Generate code for the specified FPU type, which can be one of:
  .RS 4
! .IP \fB64\fR 4
  .IX Item "64"
! Allow the use of hardware floating\-point instructions for 32\-bit
  and 64\-bit operations.
! .IP \fB32\fR 4
  .IX Item "32"
! Allow the use of hardware floating\-point instructions for 32\-bit
  operations.
! .IP \fBnone\fR 4
  .IX Item "none"
  .PD 0
! .IP \fB0\fR 4
  .IX Item "0"
  .PD
! Prevent the use of hardware floating\-point instructions.
  .RE
  .RS 4
  .RE
! .IP \fB\-msimd=\fR\fIsimd\-type\fR 4
  .IX Item "-msimd=simd-type"
! Enable generation of LoongArch SIMD instructions for vectorization
  and via builtin functions.  The value can be one of:
  .RS 4
! .IP \fBlasx\fR 4
  .IX Item "lasx"
  Enable generating instructions from the 256\-bit LoongArch Advanced
! SIMD Extension (LASX) and the 128\-bit LoongArch SIMD Extension (LSX).
! .IP \fBlsx\fR 4
  .IX Item "lsx"
! Enable generating instructions from the 128\-bit LoongArch SIMD
! Extension (LSX).
! .IP \fBnone\fR 4
  .IX Item "none"
! No LoongArch SIMD instruction may be generated.
  .RE
  .RS 4
  .RE
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Force \fB\-mfpu=none\fR and prevents the use of floating\-point
  registers for parameter passing.  This option may change the target
! ABI.
! .IP \fB\-msingle\-float\fR 4
  .IX Item "-msingle-float"
! Force \fB\-mfpu=32\fR and allow the use of 32\-bit floating\-point
  registers for parameter passing.  This option may change the target
! ABI.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
! Force \fB\-mfpu=64\fR and allow the use of 32/64\-bit floating\-point
  registers for parameter passing.  This option may change the target
! ABI.
! .IP \fB\-mlasx\fR 4
  .IX Item "-mlasx"
  .PD 0
! .IP \fB\-mno\-lasx\fR 4
  .IX Item "-mno-lasx"
! .IP \fB\-mlsx\fR 4
  .IX Item "-mlsx"
! .IP \fB\-mno\-lsx\fR 4
  .IX Item "-mno-lsx"
  .PD
! Incrementally adjust the scope of the SIMD extensions (none / LSX / LASX)
! that can be used by the compiler for code generation.  Enabling LASX with
! \&\fBmlasx\fR automatically enables LSX, and diabling LSX with \fBmno\-lsx\fR
! automatically disables LASX.  These driver\-only options act upon the final
  \&\fBmsimd\fR configuration state and make incremental chagnes in the order
! they appear on the GCC driver\*(Aqs command line, deriving the final / canonicalized
  \&\fBmsimd\fR option that is passed to the compiler proper.
! .IP \fB\-mbranch\-cost=\fR\fIn\fR 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP \fB\-mcheck\-zero\-division\fR 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP \fB\-mno\-check\-zero\-divison\fR 4
  .IX Item "-mno-check-zero-divison"
  .PD
  Trap (do not trap) on integer division by zero.  The default is
  \&\fB\-mcheck\-zero\-division\fR for \fB\-O0\fR or \fB\-Og\fR, and
  \&\fB\-mno\-check\-zero\-division\fR for other optimization levels.
! .IP \fB\-mcond\-move\-int\fR 4
  .IX Item "-mcond-move-int"
  .PD 0
! .IP \fB\-mno\-cond\-move\-int\fR 4
  .IX Item "-mno-cond-move-int"
  .PD
! Conditional moves for integral data in general\-purpose registers
  are enabled (disabled).  The default is \fB\-mcond\-move\-int\fR.
! .IP \fB\-mcond\-move\-float\fR 4
  .IX Item "-mcond-move-float"
  .PD 0
! .IP \fB\-mno\-cond\-move\-float\fR 4
  .IX Item "-mno-cond-move-float"
  .PD
! Conditional moves for floating\-point registers are enabled (disabled).
  The default is \fB\-mcond\-move\-float\fR.
! .IP \fB\-mmemcpy\fR 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP \fB\-mno\-memcpy\fR 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non\-trivial block moves.
! The default is \fB\-mno\-memcpy\fR, which allows GCC to inline most
! constant\-sized copies.  Setting optimization level to \fB\-Os\fR also
  forces the use of \f(CW\*(C`memcpy\*(C'\fR, but \fB\-mno\-memcpy\fR may override this
  behavior if explicitly specified, regardless of the order these options on
  the command line.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
  object boundary as described in the architecture specification. The default is
  \&\fB\-mno\-strict\-align\fR.
! .IP \fB\-msmall\-data\-limit=\fR\fInumber\fR 4
  .IX Item "-msmall-data-limit=number"
  Put global and static data smaller than \fInumber\fR bytes into a special
  section (on some targets).  The default value is 0.
! .IP \fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR 4
  .IX Item "-mmax-inline-memcpy-size=n"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure copies)
  less than or equal to \fIn\fR bytes.  The default value of \fIn\fR is 1024.
! .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of:
  .RS 4
! .IP "\fBtiny\-static (Not implemented yet)\fR" 4
  .IX Item "tiny-static (Not implemented yet)"
  .PD 0
  .IP "\fBtiny (Not implemented yet)\fR" 4
  .IX Item "tiny (Not implemented yet)"
! .IP \fBnormal\fR 4
  .IX Item "normal"
  .PD
  The text segment must be within 128MB addressing space.  The data segment must
  be within 2GB addressing space.
! .IP \fBmedium\fR 4
  .IX Item "medium"
  The text segment and data segment must be within 2GB addressing space.
  .IP "\fBlarge (Not implemented yet)\fR" 4
  .IX Item "large (Not implemented yet)"
  .PD 0
! .IP \fBextreme\fR 4
  .IX Item "extreme"
  .PD
  This mode does not limit the size of the code segment and data segment.
*************** and/or \fB\-mexplicit\-relocs=none\fR.
*** 26323,26329 ****
  .Sp
  The default code model is \f(CW\*(C`normal\*(C'\fR.
  .RE
! .IP "\fB\-mexplicit\-relocs=\fR\fIstyle\fR" 4
  .IX Item "-mexplicit-relocs=style"
  Set when to use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
--- 26258,26264 ----
  .Sp
  The default code model is \f(CW\*(C`normal\*(C'\fR.
  .RE
! .IP \fB\-mexplicit\-relocs=\fR\fIstyle\fR 4
  .IX Item "-mexplicit-relocs=style"
  Set when to use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
*************** are always used, with \fB\-mexplicit\-re
*** 26334,26441 ****
  use the relocation operators where the linker relaxation is impossible to
  improve the code quality, and macros elsewhere.  The default
  value for the option is determined with the assembler capability detected
! during \s-1GCC\s0 build-time and the setting of \fB\-mrelax\fR:
  \&\fB\-mexplicit\-relocs=none\fR if the assembler does not support
  relocation operators at all,
  \&\fB\-mexplicit\-relocs=always\fR if the assembler supports relocation
  operators but \fB\-mrelax\fR is not enabled,
  \&\fB\-mexplicit\-relocs=auto\fR if the assembler supports relocation
  operators and \fB\-mrelax\fR is enabled.
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
  An alias of \fB\-mexplicit\-relocs=always\fR for backward compatibility.
! .IP "\fB\-mno\-explicit\-relocs\fR" 4
  .IX Item "-mno-explicit-relocs"
  An alias of \fB\-mexplicit\-relocs=none\fR for backward compatibility.
! .IP "\fB\-mdirect\-extern\-access\fR" 4
  .IX Item "-mdirect-extern-access"
  .PD 0
! .IP "\fB\-mno\-direct\-extern\-access\fR" 4
  .IX Item "-mno-direct-extern-access"
  .PD
! Do not use or use \s-1GOT\s0 to access external symbols.  The default is
! \&\fB\-mno\-direct\-extern\-access\fR: \s-1GOT\s0 is used for external symbols with
  default visibility, but not used for other external symbols.
  .Sp
! With \fB\-mdirect\-extern\-access\fR, \s-1GOT\s0 is not used and all external
! symbols are PC-relatively addressed.  It is \fBonly\fR suitable for
! environments where no dynamic link is performed, like firmwares, \s-1OS\s0
  kernels, executables linked with \fB\-static\fR or \fB\-static\-pie\fR.
  \&\fB\-mdirect\-extern\-access\fR is not compatible with \fB\-fPIC\fR or
  \&\fB\-fpic\fR.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  .PD 0
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
  .PD
  Take (do not take) advantage of linker relaxations.  If
  \&\fB\-mpass\-mrelax\-to\-as\fR is enabled, this option is also passed to
! the assembler.  The default is determined during \s-1GCC\s0 build-time by
  detecting corresponding assembler support:
  \&\fB\-mrelax\fR if the assembler supports both the \fB\-mrelax\fR
! option and the conditional branch relaxation (it's required or the
  \&\f(CW\*(C`.align\*(C'\fR directives and conditional branch instructions in the
! assembly code outputted by \s-1GCC\s0 may be rejected by the assembler because
  of a relocation overflow), \fB\-mno\-relax\fR otherwise.
! .IP "\fB\-mpass\-mrelax\-to\-as\fR" 4
  .IX Item "-mpass-mrelax-to-as"
  .PD 0
! .IP "\fB\-mno\-pass\-mrelax\-to\-as\fR" 4
  .IX Item "-mno-pass-mrelax-to-as"
  .PD
  Pass (do not pass) the \fB\-mrelax\fR or \fB\-mno\-relax\fR option
! to the assembler.  The default is determined during \s-1GCC\s0 build-time by
  detecting corresponding assembler support:
  \&\fB\-mpass\-mrelax\-to\-as\fR if the assembler supports the
  \&\fB\-mrelax\fR option, \fB\-mno\-pass\-mrelax\-to\-as\fR otherwise.
  This option is mostly useful for debugging, or interoperation with
! assemblers different from the build-time one.
! .IP "\fB\-mrecip\fR" 4
  .IX Item "-mrecip"
  This option enables use of the reciprocal estimate and reciprocal square
! root estimate instructions with additional Newton-Raphson steps to increase
  precision instead of doing a divide or square root and divide for
! floating-point arguments.
  These instructions are generated only when \fB\-funsafe\-math\-optimizations\fR
  is enabled together with \fB\-ffinite\-math\-only\fR and
  \&\fB\-fno\-trapping\-math\fR.
  This option is off by default. Before you can use this option, you must sure the
! target \s-1CPU\s0 supports frecipe and frsqrte instructions.
  Note that while the throughput of the sequence is higher than the throughput of
! the non-reciprocal instruction, the precision of the sequence can be decreased
  by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
! .IP "\fB\-mrecip=\fR\fIopt\fR" 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP "\fBdiv\fR" 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP "\fBvec-div\fR" 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP "\fBsqrt\fR" 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP "\fBvec-sqrt\fR" 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
! .IP "\fBrsqrt\fR" 4
  .IX Item "rsqrt"
  Enable the approximation for scalar reciprocal square root.
! .IP "\fBvec-rsqrt\fR" 4
  .IX Item "vec-rsqrt"
  Enable the approximation for vectorized reciprocal square root.
  .RE
--- 26269,26376 ----
  use the relocation operators where the linker relaxation is impossible to
  improve the code quality, and macros elsewhere.  The default
  value for the option is determined with the assembler capability detected
! during GCC build\-time and the setting of \fB\-mrelax\fR:
  \&\fB\-mexplicit\-relocs=none\fR if the assembler does not support
  relocation operators at all,
  \&\fB\-mexplicit\-relocs=always\fR if the assembler supports relocation
  operators but \fB\-mrelax\fR is not enabled,
  \&\fB\-mexplicit\-relocs=auto\fR if the assembler supports relocation
  operators and \fB\-mrelax\fR is enabled.
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
  An alias of \fB\-mexplicit\-relocs=always\fR for backward compatibility.
! .IP \fB\-mno\-explicit\-relocs\fR 4
  .IX Item "-mno-explicit-relocs"
  An alias of \fB\-mexplicit\-relocs=none\fR for backward compatibility.
! .IP \fB\-mdirect\-extern\-access\fR 4
  .IX Item "-mdirect-extern-access"
  .PD 0
! .IP \fB\-mno\-direct\-extern\-access\fR 4
  .IX Item "-mno-direct-extern-access"
  .PD
! Do not use or use GOT to access external symbols.  The default is
! \&\fB\-mno\-direct\-extern\-access\fR: GOT is used for external symbols with
  default visibility, but not used for other external symbols.
  .Sp
! With \fB\-mdirect\-extern\-access\fR, GOT is not used and all external
! symbols are PC\-relatively addressed.  It is \fBonly\fR suitable for
! environments where no dynamic link is performed, like firmwares, OS
  kernels, executables linked with \fB\-static\fR or \fB\-static\-pie\fR.
  \&\fB\-mdirect\-extern\-access\fR is not compatible with \fB\-fPIC\fR or
  \&\fB\-fpic\fR.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  .PD 0
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
  .PD
  Take (do not take) advantage of linker relaxations.  If
  \&\fB\-mpass\-mrelax\-to\-as\fR is enabled, this option is also passed to
! the assembler.  The default is determined during GCC build\-time by
  detecting corresponding assembler support:
  \&\fB\-mrelax\fR if the assembler supports both the \fB\-mrelax\fR
! option and the conditional branch relaxation (it\*(Aqs required or the
  \&\f(CW\*(C`.align\*(C'\fR directives and conditional branch instructions in the
! assembly code outputted by GCC may be rejected by the assembler because
  of a relocation overflow), \fB\-mno\-relax\fR otherwise.
! .IP \fB\-mpass\-mrelax\-to\-as\fR 4
  .IX Item "-mpass-mrelax-to-as"
  .PD 0
! .IP \fB\-mno\-pass\-mrelax\-to\-as\fR 4
  .IX Item "-mno-pass-mrelax-to-as"
  .PD
  Pass (do not pass) the \fB\-mrelax\fR or \fB\-mno\-relax\fR option
! to the assembler.  The default is determined during GCC build\-time by
  detecting corresponding assembler support:
  \&\fB\-mpass\-mrelax\-to\-as\fR if the assembler supports the
  \&\fB\-mrelax\fR option, \fB\-mno\-pass\-mrelax\-to\-as\fR otherwise.
  This option is mostly useful for debugging, or interoperation with
! assemblers different from the build\-time one.
! .IP \fB\-mrecip\fR 4
  .IX Item "-mrecip"
  This option enables use of the reciprocal estimate and reciprocal square
! root estimate instructions with additional Newton\-Raphson steps to increase
  precision instead of doing a divide or square root and divide for
! floating\-point arguments.
  These instructions are generated only when \fB\-funsafe\-math\-optimizations\fR
  is enabled together with \fB\-ffinite\-math\-only\fR and
  \&\fB\-fno\-trapping\-math\fR.
  This option is off by default. Before you can use this option, you must sure the
! target CPU supports frecipe and frsqrte instructions.
  Note that while the throughput of the sequence is higher than the throughput of
! the non\-reciprocal instruction, the precision of the sequence can be decreased
  by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
! .IP \fB\-mrecip=\fR\fIopt\fR 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma\-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP \fBdefault\fR 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP \fBdiv\fR 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP \fBvec\-div\fR 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP \fBsqrt\fR 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP \fBvec\-sqrt\fR 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
! .IP \fBrsqrt\fR 4
  .IX Item "rsqrt"
  Enable the approximation for scalar reciprocal square root.
! .IP \fBvec\-rsqrt\fR 4
  .IX Item "vec-rsqrt"
  Enable the approximation for vectorized reciprocal square root.
  .RE
*************** Enable the approximation for vectorized
*** 26444,26505 ****
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for scalar square root.
  .RE
! .IP "\fB\-mfrecipe\fR" 4
  .IX Item "-mfrecipe"
  .PD 0
! .IP "\fB\-mno\-frecipe\fR" 4
  .IX Item "-mno-frecipe"
  .PD
  Use (do not use) \f(CW\*(C`frecipe.{s/d}\*(C'\fR and \f(CW\*(C`frsqrte.{s/d}\*(C'\fR
  instructions.  When build with \fB\-march=la664\fR, it is enabled by default.
  The default is \fB\-mno\-frecipe\fR.
! .IP "\fB\-mdiv32\fR" 4
  .IX Item "-mdiv32"
  .PD 0
! .IP "\fB\-mno\-div32\fR" 4
  .IX Item "-mno-div32"
  .PD
  Use (do not use) \f(CW\*(C`div.w[u]\*(C'\fR and \f(CW\*(C`mod.w[u]\*(C'\fR instructions with input
! not sign-extended.  When build with \fB\-march=la664\fR, it is enabled by
  default.  The default is \fB\-mno\-div32\fR.
! .IP "\fB\-mlam\-bh\fR" 4
  .IX Item "-mlam-bh"
  .PD 0
! .IP "\fB\-mno\-lam\-bh\fR" 4
  .IX Item "-mno-lam-bh"
  .PD
  Use (do not use) \f(CW\*(C`am{swap/add}[_db].{b/h}\*(C'\fR instructions.  When build
  with \fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lam\-bh\fR.
! .IP "\fB\-mlamcas\fR" 4
  .IX Item "-mlamcas"
  .PD 0
! .IP "\fB\-mno\-lamcas\fR" 4
  .IX Item "-mno-lamcas"
  .PD
  Use (do not use) \f(CW\*(C`amcas[_db].{b/h/w/d}\*(C'\fR instructions.  When build with
  \&\fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lamcas\fR.
! .IP "\fB\-mld\-seq\-sa\fR" 4
  .IX Item "-mld-seq-sa"
  .PD 0
! .IP "\fB\-mno\-ld\-seq\-sa\fR" 4
  .IX Item "-mno-ld-seq-sa"
  .PD
! Whether a same-address load-load barrier (\f(CW\*(C`dbar 0x700\*(C'\fR) is needed.  When
  build with \fB\-march=la664\fR, it is enabled by default.  The default is
! \&\fB\-mno\-ld\-seq\-sa\fR, the load-load barrier is needed.
! .IP "\fB\-mtls\-dialect=\fR\fIopt\fR" 4
  .IX Item "-mtls-dialect=opt"
  This option controls which tls dialect may be used for general dynamic and
! local dynamic \s-1TLS\s0 models.
  .RS 4
! .IP "\fBtrad\fR" 4
  .IX Item "trad"
! Use traditional \s-1TLS.\s0 This is the default.
! .IP "\fBdesc\fR" 4
  .IX Item "desc"
! Use \s-1TLS\s0 descriptors.
  .RE
  .RS 4
  .RE
--- 26379,26440 ----
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for scalar square root.
  .RE
! .IP \fB\-mfrecipe\fR 4
  .IX Item "-mfrecipe"
  .PD 0
! .IP \fB\-mno\-frecipe\fR 4
  .IX Item "-mno-frecipe"
  .PD
  Use (do not use) \f(CW\*(C`frecipe.{s/d}\*(C'\fR and \f(CW\*(C`frsqrte.{s/d}\*(C'\fR
  instructions.  When build with \fB\-march=la664\fR, it is enabled by default.
  The default is \fB\-mno\-frecipe\fR.
! .IP \fB\-mdiv32\fR 4
  .IX Item "-mdiv32"
  .PD 0
! .IP \fB\-mno\-div32\fR 4
  .IX Item "-mno-div32"
  .PD
  Use (do not use) \f(CW\*(C`div.w[u]\*(C'\fR and \f(CW\*(C`mod.w[u]\*(C'\fR instructions with input
! not sign\-extended.  When build with \fB\-march=la664\fR, it is enabled by
  default.  The default is \fB\-mno\-div32\fR.
! .IP \fB\-mlam\-bh\fR 4
  .IX Item "-mlam-bh"
  .PD 0
! .IP \fB\-mno\-lam\-bh\fR 4
  .IX Item "-mno-lam-bh"
  .PD
  Use (do not use) \f(CW\*(C`am{swap/add}[_db].{b/h}\*(C'\fR instructions.  When build
  with \fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lam\-bh\fR.
! .IP \fB\-mlamcas\fR 4
  .IX Item "-mlamcas"
  .PD 0
! .IP \fB\-mno\-lamcas\fR 4
  .IX Item "-mno-lamcas"
  .PD
  Use (do not use) \f(CW\*(C`amcas[_db].{b/h/w/d}\*(C'\fR instructions.  When build with
  \&\fB\-march=la664\fR, it is enabled by default.  The default is
  \&\fB\-mno\-lamcas\fR.
! .IP \fB\-mld\-seq\-sa\fR 4
  .IX Item "-mld-seq-sa"
  .PD 0
! .IP \fB\-mno\-ld\-seq\-sa\fR 4
  .IX Item "-mno-ld-seq-sa"
  .PD
! Whether a same\-address load\-load barrier (\f(CW\*(C`dbar 0x700\*(C'\fR) is needed.  When
  build with \fB\-march=la664\fR, it is enabled by default.  The default is
! \&\fB\-mno\-ld\-seq\-sa\fR, the load\-load barrier is needed.
! .IP \fB\-mtls\-dialect=\fR\fIopt\fR 4
  .IX Item "-mtls-dialect=opt"
  This option controls which tls dialect may be used for general dynamic and
! local dynamic TLS models.
  .RS 4
! .IP \fBtrad\fR 4
  .IX Item "trad"
! Use traditional TLS. This is the default.
! .IP \fBdesc\fR 4
  .IX Item "desc"
! Use TLS descriptors.
  .RE
  .RS 4
  .RE
*************** Use \s-1TLS\s0 descriptors.
*** 26507,26554 ****
  .IX Item "--param loongarch-vect-unroll-limit=n"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set's the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is six.
  .PP
  \fIM32C Options\fR
  .IX Subsection "M32C Options"
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
  .IX Item "-mcpu=name"
! Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
  \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
  /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
  the M32C/80 series.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime library to be linked in which supports, for
  example, file I/O.  You must not use this option when generating
  programs that will run on real hardware; you must provide your own
  runtime library for whatever I/O functions are needed.
! .IP "\fB\-memregs=\fR\fInumber\fR" 4
  .IX Item "-memregs=number"
! Specifies the number of memory-based pseudo-registers \s-1GCC\s0 uses
! during code generation.  These pseudo-registers are used like real
! registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
  code into available registers, and the performance penalty of using
  memory instead of registers.  Note that all modules in a program must
  be compiled with the same value for this option.  Because of that, you
! must not use this option with \s-1GCC\s0's default runtime libraries.
  .PP
  \fIM32R/D Options\fR
  .IX Subsection "M32R/D Options"
  .PP
  These \fB\-m\fR options are defined for Renesas M32R/D architectures:
! .IP "\fB\-m32r2\fR" 4
  .IX Item "-m32r2"
  Generate code for the M32R/2.
! .IP "\fB\-m32rx\fR" 4
  .IX Item "-m32rx"
  Generate code for the M32R/X.
! .IP "\fB\-m32r\fR" 4
  .IX Item "-m32r"
  Generate code for the M32R.  This is the default.
! .IP "\fB\-mmodel=small\fR" 4
  .IX Item "-mmodel=small"
  Assume all objects live in the lower 16MB of memory (so that their addresses
  can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
--- 26442,26489 ----
  .IX Item "--param loongarch-vect-unroll-limit=n"
  The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set\*(Aqs the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is six.
  .PP
  \fIM32C Options\fR
  .IX Subsection "M32C Options"
! .IP \fB\-mcpu=\fR\fIname\fR 4
  .IX Item "-mcpu=name"
! Select the CPU for which code is generated.  \fIname\fR may be one of
  \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
  /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
  the M32C/80 series.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime library to be linked in which supports, for
  example, file I/O.  You must not use this option when generating
  programs that will run on real hardware; you must provide your own
  runtime library for whatever I/O functions are needed.
! .IP \fB\-memregs=\fR\fInumber\fR 4
  .IX Item "-memregs=number"
! Specifies the number of memory\-based pseudo\-registers GCC uses
! during code generation.  These pseudo\-registers are used like real
! registers, so there is a tradeoff between GCC\*(Aqs ability to fit the
  code into available registers, and the performance penalty of using
  memory instead of registers.  Note that all modules in a program must
  be compiled with the same value for this option.  Because of that, you
! must not use this option with GCC\*(Aqs default runtime libraries.
  .PP
  \fIM32R/D Options\fR
  .IX Subsection "M32R/D Options"
  .PP
  These \fB\-m\fR options are defined for Renesas M32R/D architectures:
! .IP \fB\-m32r2\fR 4
  .IX Item "-m32r2"
  Generate code for the M32R/2.
! .IP \fB\-m32rx\fR 4
  .IX Item "-m32rx"
  Generate code for the M32R/X.
! .IP \fB\-m32r\fR 4
  .IX Item "-m32r"
  Generate code for the M32R.  This is the default.
! .IP \fB\-mmodel=small\fR 4
  .IX Item "-mmodel=small"
  Assume all objects live in the lower 16MB of memory (so that their addresses
  can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
*************** This is the default.
*** 26557,26575 ****
  .Sp
  The addressability of a particular object can be set with the
  \&\f(CW\*(C`model\*(C'\fR attribute.
! .IP "\fB\-mmodel=medium\fR" 4
  .IX Item "-mmodel=medium"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
! .IP "\fB\-mmodel=large\fR" 4
  .IX Item "-mmodel=large"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
  (the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
  instruction sequence).
! .IP "\fB\-msdata=none\fR" 4
  .IX Item "-msdata=none"
  Disable use of the small data area.  Variables are put into
  one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
--- 26492,26510 ----
  .Sp
  The addressability of a particular object can be set with the
  \&\f(CW\*(C`model\*(C'\fR attribute.
! .IP \fB\-mmodel=medium\fR 4
  .IX Item "-mmodel=medium"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
! .IP \fB\-mmodel=large\fR 4
  .IX Item "-mmodel=large"
  Assume objects may be anywhere in the 32\-bit address space (the compiler
  generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
  assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
  (the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
  instruction sequence).
! .IP \fB\-msdata=none\fR 4
  .IX Item "-msdata=none"
  Disable use of the small data area.  Variables are put into
  one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
*************** This is the default.
*** 26579,26637 ****
  The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
  Objects may be explicitly put in the small data area with the
  \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
! .IP "\fB\-msdata=sdata\fR" 4
  .IX Item "-msdata=sdata"
  Put small global and static data in the small data area, but do not
  generate special code to reference them.
! .IP "\fB\-msdata=use\fR" 4
  .IX Item "-msdata=use"
  Put small global and static data in the small data area, and generate
  special instructions to reference them.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
  sections.  The default value of \fInum\fR is 8.
  The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
  for this option to have any effect.
  .Sp
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
  Compiling with different values of \fInum\fR may or may not work; if it
! doesn't the linker gives an error message\-\-\-incorrect code is not
  generated.
! .IP "\fB\-mdebug\fR" 4
  .IX Item "-mdebug"
  Makes the M32R\-specific code in the compiler display some statistics
  that might help in debugging programs.
! .IP "\fB\-malign\-loops\fR" 4
  .IX Item "-malign-loops"
  Align all loops to a 32\-byte boundary.
! .IP "\fB\-mno\-align\-loops\fR" 4
  .IX Item "-mno-align-loops"
  Do not enforce a 32\-byte alignment for loops.  This is the default.
! .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
  .IX Item "-missue-rate=number"
  Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
  or 2.
! .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
  .IX Item "-mbranch-cost=number"
  \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
  preferred over conditional code, if it is 2, then the opposite applies.
! .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
  .IX Item "-mflush-trap=number"
  Specifies the trap number to use to flush the cache.  The default is
  12.  Valid numbers are between 0 and 15 inclusive.
! .IP "\fB\-mno\-flush\-trap\fR" 4
  .IX Item "-mno-flush-trap"
  Specifies that the cache cannot be flushed by using a trap.
! .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
  .IX Item "-mflush-func=name"
  Specifies the name of the operating system function to call to flush
  the cache.  The default is \fB_flush_cache\fR, but a function call
  is only used if a trap is not available.
! .IP "\fB\-mno\-flush\-func\fR" 4
  .IX Item "-mno-flush-func"
! Indicates that there is no \s-1OS\s0 function for flushing the cache.
  .PP
  \fIM680x0 Options\fR
  .IX Subsection "M680x0 Options"
--- 26514,26572 ----
  The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
  Objects may be explicitly put in the small data area with the
  \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
! .IP \fB\-msdata=sdata\fR 4
  .IX Item "-msdata=sdata"
  Put small global and static data in the small data area, but do not
  generate special code to reference them.
! .IP \fB\-msdata=use\fR 4
  .IX Item "-msdata=use"
  Put small global and static data in the small data area, and generate
  special instructions to reference them.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or BSS sections instead of the normal data or BSS
  sections.  The default value of \fInum\fR is 8.
  The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
  for this option to have any effect.
  .Sp
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
  Compiling with different values of \fInum\fR may or may not work; if it
! doesn\*(Aqt the linker gives an error message\-\-\-incorrect code is not
  generated.
! .IP \fB\-mdebug\fR 4
  .IX Item "-mdebug"
  Makes the M32R\-specific code in the compiler display some statistics
  that might help in debugging programs.
! .IP \fB\-malign\-loops\fR 4
  .IX Item "-malign-loops"
  Align all loops to a 32\-byte boundary.
! .IP \fB\-mno\-align\-loops\fR 4
  .IX Item "-mno-align-loops"
  Do not enforce a 32\-byte alignment for loops.  This is the default.
! .IP \fB\-missue\-rate=\fR\fInumber\fR 4
  .IX Item "-missue-rate=number"
  Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
  or 2.
! .IP \fB\-mbranch\-cost=\fR\fInumber\fR 4
  .IX Item "-mbranch-cost=number"
  \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
  preferred over conditional code, if it is 2, then the opposite applies.
! .IP \fB\-mflush\-trap=\fR\fInumber\fR 4
  .IX Item "-mflush-trap=number"
  Specifies the trap number to use to flush the cache.  The default is
  12.  Valid numbers are between 0 and 15 inclusive.
! .IP \fB\-mno\-flush\-trap\fR 4
  .IX Item "-mno-flush-trap"
  Specifies that the cache cannot be flushed by using a trap.
! .IP \fB\-mflush\-func=\fR\fIname\fR 4
  .IX Item "-mflush-func=name"
  Specifies the name of the operating system function to call to flush
  the cache.  The default is \fB_flush_cache\fR, but a function call
  is only used if a trap is not available.
! .IP \fB\-mno\-flush\-func\fR 4
  .IX Item "-mno-flush-func"
! Indicates that there is no OS function for flushing the cache.
  .PP
  \fIM680x0 Options\fR
  .IX Subsection "M680x0 Options"
*************** These are the \fB\-m\fR options defined
*** 26640,26663 ****
  The default settings depend on which architecture was selected when
  the compiler was configured; the defaults for the most common choices
  are given below.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Generate code for a specific M680x0 or ColdFire instruction set
  architecture.  Permissible values of \fIarch\fR for M680x0
  architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
  \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
! architectures are selected according to Freescale's \s-1ISA\s0 classification
  and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
  \&\fBisab\fR and \fBisac\fR.
  .Sp
! \&\s-1GCC\s0 defines a macro \f(CW\*(C`_\|_mcf\f(CIarch\f(CW_\|_\*(C'\fR whenever it is generating
  code for a ColdFire target.  The \fIarch\fR in this macro is one of the
  \&\fB\-march\fR arguments given above.
  .Sp
  When used together, \fB\-march\fR and \fB\-mtune\fR select code
  that runs on a family of similar processors but that is optimized
  for a particular microarchitecture.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
  .IX Item "-mcpu=cpu"
  Generate code for a specific M680x0 or ColdFire processor.
  The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
--- 26575,26598 ----
  The default settings depend on which architecture was selected when
  the compiler was configured; the defaults for the most common choices
  are given below.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Generate code for a specific M680x0 or ColdFire instruction set
  architecture.  Permissible values of \fIarch\fR for M680x0
  architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
  \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
! architectures are selected according to Freescale\*(Aqs ISA classification
  and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
  \&\fBisab\fR and \fBisac\fR.
  .Sp
! GCC defines a macro \f(CW\*(C`_\|_mcf\fR\f(CIarch\fR\f(CW_\|_\*(C'\fR whenever it is generating
  code for a ColdFire target.  The \fIarch\fR in this macro is one of the
  \&\fB\-march\fR arguments given above.
  .Sp
  When used together, \fB\-march\fR and \fB\-mtune\fR select code
  that runs on a family of similar processors but that is optimized
  for a particular microarchitecture.
! .IP \fB\-mcpu=\fR\fIcpu\fR 4
  .IX Item "-mcpu=cpu"
  Generate code for a specific M680x0 or ColdFire processor.
  The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
*************** below, which also classifies the CPUs in
*** 26714,26732 ****
  .IX Item "5407 : 5407"
  .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
  .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
  .RE
  .RS 4
- .PD
  .Sp
  \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
  \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
  \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
  .Sp
! \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcf_cpu_\f(CIcpu\f(CW\*(C'\fR when ColdFire target
! \&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\f(CIfamily\f(CW\*(C'\fR,
  where the value of \fIfamily\fR is given by the table above.
  .RE
! .IP "\fB\-mtune=\fR\fItune\fR" 4
  .IX Item "-mtune=tune"
  Tune the code for a particular microarchitecture within the
  constraints set by \fB\-march\fR and \fB\-mcpu\fR.
--- 26649,26667 ----
  .IX Item "5407 : 5407"
  .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
  .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
+ .PD
  .RE
  .RS 4
  .Sp
  \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
  \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
  \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
  .Sp
! GCC defines the macro \f(CW\*(C`_\|_mcf_cpu_\fR\f(CIcpu\fR\f(CW\*(C'\fR when ColdFire target
! \&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\fR\f(CIfamily\fR\f(CW\*(C'\fR,
  where the value of \fIfamily\fR is given by the table above.
  .RE
! .IP \fB\-mtune=\fR\fItune\fR 4
  .IX Item "-mtune=tune"
  Tune the code for a particular microarchitecture within the
  constraints set by \fB\-march\fR and \fB\-mcpu\fR.
*************** to run relatively well on 68020, 68030 a
*** 26741,26788 ****
  as well.  These two options select the same tuning decisions as
  \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
  .Sp
! \&\s-1GCC\s0 defines the macros \f(CW\*(C`_\|_mc\f(CIarch\f(CW\*(C'\fR and \f(CW\*(C`_\|_mc\f(CIarch\f(CW_\|_\*(C'\fR
  when tuning for 680x0 architecture \fIarch\fR.  It also defines
! \&\f(CW\*(C`mc\f(CIarch\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
! option is used.  If \s-1GCC\s0 is tuning for a range of architectures,
  as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
  it defines the macros for every architecture in the range.
  .Sp
! \&\s-1GCC\s0 also defines the macro \f(CW\*(C`_\|_m\f(CIuarch\f(CW_\|_\*(C'\fR when tuning for
  ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
  of the arguments given above.
! .IP "\fB\-m68000\fR" 4
  .IX Item "-m68000"
  .PD 0
! .IP "\fB\-mc68000\fR" 4
  .IX Item "-mc68000"
  .PD
  Generate output for a 68000.  This is the default
  when the compiler is configured for 68000\-based systems.
  It is equivalent to \fB\-march=68000\fR.
  .Sp
! Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
  including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
! .IP "\fB\-m68010\fR" 4
  .IX Item "-m68010"
  Generate output for a 68010.  This is the default
  when the compiler is configured for 68010\-based systems.
  It is equivalent to \fB\-march=68010\fR.
! .IP "\fB\-m68020\fR" 4
  .IX Item "-m68020"
  .PD 0
! .IP "\fB\-mc68020\fR" 4
  .IX Item "-mc68020"
  .PD
  Generate output for a 68020.  This is the default
  when the compiler is configured for 68020\-based systems.
  It is equivalent to \fB\-march=68020\fR.
! .IP "\fB\-m68030\fR" 4
  .IX Item "-m68030"
  Generate output for a 68030.  This is the default when the compiler is
  configured for 68030\-based systems.  It is equivalent to
  \&\fB\-march=68030\fR.
! .IP "\fB\-m68040\fR" 4
  .IX Item "-m68040"
  Generate output for a 68040.  This is the default when the compiler is
  configured for 68040\-based systems.  It is equivalent to
--- 26676,26723 ----
  as well.  These two options select the same tuning decisions as
  \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
  .Sp
! GCC defines the macros \f(CW\*(C`_\|_mc\fR\f(CIarch\fR\f(CW\*(C'\fR and \f(CW\*(C`_\|_mc\fR\f(CIarch\fR\f(CW_\|_\*(C'\fR
  when tuning for 680x0 architecture \fIarch\fR.  It also defines
! \&\f(CW\*(C`mc\fR\f(CIarch\fR\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non\-GNU \fB\-std\fR
! option is used.  If GCC is tuning for a range of architectures,
  as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
  it defines the macros for every architecture in the range.
  .Sp
! GCC also defines the macro \f(CW\*(C`_\|_m\fR\f(CIuarch\fR\f(CW_\|_\*(C'\fR when tuning for
  ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
  of the arguments given above.
! .IP \fB\-m68000\fR 4
  .IX Item "-m68000"
  .PD 0
! .IP \fB\-mc68000\fR 4
  .IX Item "-mc68000"
  .PD
  Generate output for a 68000.  This is the default
  when the compiler is configured for 68000\-based systems.
  It is equivalent to \fB\-march=68000\fR.
  .Sp
! Use this option for microcontrollers with a 68000 or EC000 core,
  including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
! .IP \fB\-m68010\fR 4
  .IX Item "-m68010"
  Generate output for a 68010.  This is the default
  when the compiler is configured for 68010\-based systems.
  It is equivalent to \fB\-march=68010\fR.
! .IP \fB\-m68020\fR 4
  .IX Item "-m68020"
  .PD 0
! .IP \fB\-mc68020\fR 4
  .IX Item "-mc68020"
  .PD
  Generate output for a 68020.  This is the default
  when the compiler is configured for 68020\-based systems.
  It is equivalent to \fB\-march=68020\fR.
! .IP \fB\-m68030\fR 4
  .IX Item "-m68030"
  Generate output for a 68030.  This is the default when the compiler is
  configured for 68030\-based systems.  It is equivalent to
  \&\fB\-march=68030\fR.
! .IP \fB\-m68040\fR 4
  .IX Item "-m68040"
  Generate output for a 68040.  This is the default when the compiler is
  configured for 68040\-based systems.  It is equivalent to
*************** configured for 68040\-based systems.  It
*** 26791,26797 ****
  This option inhibits the use of 68881/68882 instructions that have to be
  emulated by software on the 68040.  Use this option if your 68040 does not
  have code to emulate those instructions.
! .IP "\fB\-m68060\fR" 4
  .IX Item "-m68060"
  Generate output for a 68060.  This is the default when the compiler is
  configured for 68060\-based systems.  It is equivalent to
--- 26726,26732 ----
  This option inhibits the use of 68881/68882 instructions that have to be
  emulated by software on the 68040.  Use this option if your 68040 does not
  have code to emulate those instructions.
! .IP \fB\-m68060\fR 4
  .IX Item "-m68060"
  Generate output for a 68060.  This is the default when the compiler is
  configured for 68060\-based systems.  It is equivalent to
*************** configured for 68060\-based systems.  It
*** 26800,26847 ****
  This option inhibits the use of 68020 and 68881/68882 instructions that
  have to be emulated by software on the 68060.  Use this option if your 68060
  does not have code to emulate those instructions.
! .IP "\fB\-mcpu32\fR" 4
  .IX Item "-mcpu32"
! Generate output for a \s-1CPU32.\s0  This is the default
  when the compiler is configured for CPU32\-based systems.
  It is equivalent to \fB\-march=cpu32\fR.
  .Sp
  Use this option for microcontrollers with a
! \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
  68336, 68340, 68341, 68349 and 68360.
! .IP "\fB\-m5200\fR" 4
  .IX Item "-m5200"
! Generate output for a 520X ColdFire \s-1CPU.\s0  This is the default
  when the compiler is configured for 520X\-based systems.
  It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
  in favor of that option.
  .Sp
  Use this option for microcontroller with a 5200 core, including
! the \s-1MCF5202, MCF5203, MCF5204\s0 and \s-1MCF5206.\s0
! .IP "\fB\-m5206e\fR" 4
  .IX Item "-m5206e"
! Generate output for a 5206e ColdFire \s-1CPU.\s0  The option is now
  deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
! .IP "\fB\-m528x\fR" 4
  .IX Item "-m528x"
  Generate output for a member of the ColdFire 528X family.
  The option is now deprecated in favor of the equivalent
  \&\fB\-mcpu=528x\fR.
! .IP "\fB\-m5307\fR" 4
  .IX Item "-m5307"
! Generate output for a ColdFire 5307 \s-1CPU.\s0  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5307\fR.
! .IP "\fB\-m5407\fR" 4
  .IX Item "-m5407"
! Generate output for a ColdFire 5407 \s-1CPU.\s0  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5407\fR.
! .IP "\fB\-mcfv4e\fR" 4
  .IX Item "-mcfv4e"
! Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
! This includes use of hardware floating-point instructions.
  The option is equivalent to \fB\-mcpu=547x\fR, and is now
  deprecated in favor of that option.
! .IP "\fB\-m68020\-40\fR" 4
  .IX Item "-m68020-40"
  Generate output for a 68040, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
--- 26735,26782 ----
  This option inhibits the use of 68020 and 68881/68882 instructions that
  have to be emulated by software on the 68060.  Use this option if your 68060
  does not have code to emulate those instructions.
! .IP \fB\-mcpu32\fR 4
  .IX Item "-mcpu32"
! Generate output for a CPU32.  This is the default
  when the compiler is configured for CPU32\-based systems.
  It is equivalent to \fB\-march=cpu32\fR.
  .Sp
  Use this option for microcontrollers with a
! CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
  68336, 68340, 68341, 68349 and 68360.
! .IP \fB\-m5200\fR 4
  .IX Item "-m5200"
! Generate output for a 520X ColdFire CPU.  This is the default
  when the compiler is configured for 520X\-based systems.
  It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
  in favor of that option.
  .Sp
  Use this option for microcontroller with a 5200 core, including
! the MCF5202, MCF5203, MCF5204 and MCF5206.
! .IP \fB\-m5206e\fR 4
  .IX Item "-m5206e"
! Generate output for a 5206e ColdFire CPU.  The option is now
  deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
! .IP \fB\-m528x\fR 4
  .IX Item "-m528x"
  Generate output for a member of the ColdFire 528X family.
  The option is now deprecated in favor of the equivalent
  \&\fB\-mcpu=528x\fR.
! .IP \fB\-m5307\fR 4
  .IX Item "-m5307"
! Generate output for a ColdFire 5307 CPU.  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5307\fR.
! .IP \fB\-m5407\fR 4
  .IX Item "-m5407"
! Generate output for a ColdFire 5407 CPU.  The option is now deprecated
  in favor of the equivalent \fB\-mcpu=5407\fR.
! .IP \fB\-mcfv4e\fR 4
  .IX Item "-mcfv4e"
! Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
! This includes use of hardware floating\-point instructions.
  The option is equivalent to \fB\-mcpu=547x\fR, and is now
  deprecated in favor of that option.
! .IP \fB\-m68020\-40\fR 4
  .IX Item "-m68020-40"
  Generate output for a 68040, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
*************** This results in code that can run relati
*** 26849,26855 ****
  68881 instructions that are emulated on the 68040.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
! .IP "\fB\-m68020\-60\fR" 4
  .IX Item "-m68020-60"
  Generate output for a 68060, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
--- 26784,26790 ----
  68881 instructions that are emulated on the 68040.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
! .IP \fB\-m68020\-60\fR 4
  .IX Item "-m68020-60"
  Generate output for a 68060, without using any of the new instructions.
  This results in code that can run relatively efficiently on either a
*************** This results in code that can run relati
*** 26857,26916 ****
  68881 instructions that are emulated on the 68060.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD 0
! .IP "\fB\-m68881\fR" 4
  .IX Item "-m68881"
  .PD
! Generate floating-point instructions.  This is the default for 68020
! and above, and for ColdFire devices that have an \s-1FPU.\s0  It defines the
  macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
  on ColdFire targets.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Do not generate floating-point instructions; use library calls instead.
  This is the default for 68000, 68010, and 68832 targets.  It is also
! the default for ColdFire devices that have no \s-1FPU.\s0
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
  Generate (do not generate) ColdFire hardware divide and remainder
  instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
! the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
! architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
! (either the default \s-1CPU,\s0 or the one specified by \fB\-mcpu\fR).  For
! example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
  \&\fB\-mcpu=5206e\fR.
  .Sp
! \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
! .IP "\fB\-mshort\fR" 4
  .IX Item "-mshort"
  Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
  Additionally, parameters passed on the stack are also aligned to a
! 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
! .IP "\fB\-mno\-short\fR" 4
  .IX Item "-mno-short"
  Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
! .IP "\fB\-mnobitfield\fR" 4
  .IX Item "-mnobitfield"
  .PD 0
! .IP "\fB\-mno\-bitfield\fR" 4
  .IX Item "-mno-bitfield"
  .PD
! Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
  and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
! .IP "\fB\-mbitfield\fR" 4
  .IX Item "-mbitfield"
! Do use the bit-field instructions.  The \fB\-m68020\fR option implies
  \&\fB\-mbitfield\fR.  This is the default if you use a configuration
  designed for a 68020.
! .IP "\fB\-mrtd\fR" 4
  .IX Item "-mrtd"
! Use a different function-calling convention, in which functions
  that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
  instruction, which pops their arguments while returning.  This
  saves one instruction in the caller since there is no need to pop
--- 26792,26851 ----
  68881 instructions that are emulated on the 68060.
  .Sp
  The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD 0
! .IP \fB\-m68881\fR 4
  .IX Item "-m68881"
  .PD
! Generate floating\-point instructions.  This is the default for 68020
! and above, and for ColdFire devices that have an FPU.  It defines the
  macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
  on ColdFire targets.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Do not generate floating\-point instructions; use library calls instead.
  This is the default for 68000, 68010, and 68832 targets.  It is also
! the default for ColdFire devices that have no FPU.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
  Generate (do not generate) ColdFire hardware divide and remainder
  instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
! the default is "on" for ColdFire architectures and "off" for M680x0
! architectures.  Otherwise, the default is taken from the target CPU
! (either the default CPU, or the one specified by \fB\-mcpu\fR).  For
! example, the default is "off" for \fB\-mcpu=5206\fR and "on" for
  \&\fB\-mcpu=5206e\fR.
  .Sp
! GCC defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
! .IP \fB\-mshort\fR 4
  .IX Item "-mshort"
  Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
  Additionally, parameters passed on the stack are also aligned to a
! 16\-bit boundary even on targets whose API mandates promotion to 32\-bit.
! .IP \fB\-mno\-short\fR 4
  .IX Item "-mno-short"
  Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
! .IP \fB\-mnobitfield\fR 4
  .IX Item "-mnobitfield"
  .PD 0
! .IP \fB\-mno\-bitfield\fR 4
  .IX Item "-mno-bitfield"
  .PD
! Do not use the bit\-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
  and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
! .IP \fB\-mbitfield\fR 4
  .IX Item "-mbitfield"
! Do use the bit\-field instructions.  The \fB\-m68020\fR option implies
  \&\fB\-mbitfield\fR.  This is the default if you use a configuration
  designed for a 68020.
! .IP \fB\-mrtd\fR 4
  .IX Item "-mrtd"
! Use a different function\-calling convention, in which functions
  that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
  instruction, which pops their arguments while returning.  This
  saves one instruction in the caller since there is no need to pop
*************** function with too many arguments.  (Norm
*** 26930,27005 ****
  harmlessly ignored.)
  .Sp
  The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
! 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
  .Sp
  The default is \fB\-mno\-rtd\fR.
! .IP "\fB\-malign\-int\fR" 4
  .IX Item "-malign-int"
  .PD 0
! .IP "\fB\-mno\-align\-int\fR" 4
  .IX Item "-mno-align-int"
  .PD
! Control whether \s-1GCC\s0 aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
  \&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
  boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
  Aligning variables on 32\-bit boundaries produces code that runs somewhat
  faster on processors with 32\-bit busses at the expense of more memory.
  .Sp
! \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0
  aligns structures containing the above types differently than
  most published application binary interface specifications for the m68k.
  .Sp
! Use the pc-relative addressing mode of the 68000 directly, instead of
  using a global offset table.  At present, this option implies \fB\-fpic\fR,
! allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
  not presently supported with \fB\-mpcrel\fR, though this could be supported for
  68020 and higher processors.
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD
  Do not (do) assume that unaligned memory references are handled by
  the system.
! .IP "\fB\-msep\-data\fR" 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
! area of memory from the text segment.  This allows for execute-in-place in
  an environment without virtual memory management.  This option implies
  \&\fB\-fPIC\fR.
! .IP "\fB\-mno\-sep\-data\fR" 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP "\fB\-mid\-shared\-library\fR" 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library \s-1ID\s0 method.
! This allows for execute-in-place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! .IP "\fB\-mno\-id\-shared\-library\fR" 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn't assume ID-based shared libraries are being used.
  This is the default.
! .IP "\fB\-mshared\-library\-id=n\fR" 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library, but is no more space\- or time-efficient than omitting this option.
! .IP "\fB\-mxgot\fR" 4
  .IX Item "-mxgot"
  .PD 0
! .IP "\fB\-mno\-xgot\fR" 4
  .IX Item "-mno-xgot"
  .PD
! When generating position-independent code for ColdFire, generate code
! that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
  larger and slower than code generated without this option.  On M680x0
  processors, this option is not needed; \fB\-fPIC\fR suffices.
  .Sp
! \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT.\s0
! While this is relatively efficient, it only works if the \s-1GOT\s0
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
--- 26865,26940 ----
  harmlessly ignored.)
  .Sp
  The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
! 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
  .Sp
  The default is \fB\-mno\-rtd\fR.
! .IP \fB\-malign\-int\fR 4
  .IX Item "-malign-int"
  .PD 0
! .IP \fB\-mno\-align\-int\fR 4
  .IX Item "-mno-align-int"
  .PD
! Control whether GCC aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
  \&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
  boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
  Aligning variables on 32\-bit boundaries produces code that runs somewhat
  faster on processors with 32\-bit busses at the expense of more memory.
  .Sp
! \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, GCC
  aligns structures containing the above types differently than
  most published application binary interface specifications for the m68k.
  .Sp
! Use the pc\-relative addressing mode of the 68000 directly, instead of
  using a global offset table.  At present, this option implies \fB\-fpic\fR,
! allowing at most a 16\-bit offset for pc\-relative addressing.  \fB\-fPIC\fR is
  not presently supported with \fB\-mpcrel\fR, though this could be supported for
  68020 and higher processors.
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD
  Do not (do) assume that unaligned memory references are handled by
  the system.
! .IP \fB\-msep\-data\fR 4
  .IX Item "-msep-data"
  Generate code that allows the data segment to be located in a different
! area of memory from the text segment.  This allows for execute\-in\-place in
  an environment without virtual memory management.  This option implies
  \&\fB\-fPIC\fR.
! .IP \fB\-mno\-sep\-data\fR 4
  .IX Item "-mno-sep-data"
  Generate code that assumes that the data segment follows the text segment.
  This is the default.
! .IP \fB\-mid\-shared\-library\fR 4
  .IX Item "-mid-shared-library"
! Generate code that supports shared libraries via the library ID method.
! This allows for execute\-in\-place and shared libraries in an environment
  without virtual memory management.  This option implies \fB\-fPIC\fR.
! .IP \fB\-mno\-id\-shared\-library\fR 4
  .IX Item "-mno-id-shared-library"
! Generate code that doesn\*(Aqt assume ID\-based shared libraries are being used.
  This is the default.
! .IP \fB\-mshared\-library\-id=n\fR 4
  .IX Item "-mshared-library-id=n"
! Specifies the identification number of the ID\-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
! library, but is no more space\- or time\-efficient than omitting this option.
! .IP \fB\-mxgot\fR 4
  .IX Item "-mxgot"
  .PD 0
! .IP \fB\-mno\-xgot\fR 4
  .IX Item "-mno-xgot"
  .PD
! When generating position\-independent code for ColdFire, generate code
! that works if the GOT has more than 8192 entries.  This code is
  larger and slower than code generated without this option.  On M680x0
  processors, this option is not needed; \fB\-fPIC\fR suffices.
  .Sp
! GCC normally uses a single instruction to load values from the GOT.
! While this is relatively efficient, it only works if the GOT
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
*************** It should then work with very large GOTs
*** 27012,27025 ****
  \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
  the value of a global symbol.
  .Sp
! Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
! can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
  you should only need to use \fB\-mxgot\fR when compiling a single
! object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
  .Sp
! These options have no effect unless \s-1GCC\s0 is generating
! position-independent code.
! .IP "\fB\-mlong\-jump\-table\-offsets\fR" 4
  .IX Item "-mlong-jump-table-offsets"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
--- 26947,26960 ----
  \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
  the value of a global symbol.
  .Sp
! Note that some linkers, including newer versions of the GNU linker,
! can create multiple GOTs and sort GOT entries.  If you have such a linker,
  you should only need to use \fB\-mxgot\fR when compiling a single
! object file that accesses more than 8192 GOT entries.  Very few do.
  .Sp
! These options have no effect unless GCC is generating
! position\-independent code.
! .IP \fB\-mlong\-jump\-table\-offsets\fR 4
  .IX Item "-mlong-jump-table-offsets"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
*************** Use 32\-bit offsets in \f(CW\*(C`switch\
*** 27029,27103 ****
  .PP
  These are the \fB\-m\fR options defined for the Motorola M*Core
  processors.
! .IP "\fB\-mhardlit\fR" 4
  .IX Item "-mhardlit"
  .PD 0
! .IP "\fB\-mno\-hardlit\fR" 4
  .IX Item "-mno-hardlit"
  .PD
  Inline constants into the code stream if it can be done in two
  instructions or less.
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
  Use the divide instruction.  (Enabled by default).
! .IP "\fB\-mrelax\-immediate\fR" 4
  .IX Item "-mrelax-immediate"
  .PD 0
! .IP "\fB\-mno\-relax\-immediate\fR" 4
  .IX Item "-mno-relax-immediate"
  .PD
! Allow arbitrary-sized immediates in bit operations.
! .IP "\fB\-mwide\-bitfields\fR" 4
  .IX Item "-mwide-bitfields"
  .PD 0
! .IP "\fB\-mno\-wide\-bitfields\fR" 4
  .IX Item "-mno-wide-bitfields"
  .PD
! Always treat bit-fields as \f(CW\*(C`int\*(C'\fR\-sized.
! .IP "\fB\-m4byte\-functions\fR" 4
  .IX Item "-m4byte-functions"
  .PD 0
! .IP "\fB\-mno\-4byte\-functions\fR" 4
  .IX Item "-mno-4byte-functions"
  .PD
  Force all functions to be aligned to a 4\-byte boundary.
! .IP "\fB\-mcallgraph\-data\fR" 4
  .IX Item "-mcallgraph-data"
  .PD 0
! .IP "\fB\-mno\-callgraph\-data\fR" 4
  .IX Item "-mno-callgraph-data"
  .PD
  Emit callgraph information.
! .IP "\fB\-mslow\-bytes\fR" 4
  .IX Item "-mslow-bytes"
  .PD 0
! .IP "\fB\-mno\-slow\-bytes\fR" 4
  .IX Item "-mno-slow-bytes"
  .PD
  Prefer word access when reading byte quantities.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD
! Generate code for a little-endian target.
! .IP "\fB\-m210\fR" 4
  .IX Item "-m210"
  .PD 0
! .IP "\fB\-m340\fR" 4
  .IX Item "-m340"
  .PD
  Generate code for the 210 processor.
! .IP "\fB\-mno\-lsim\fR" 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so omit the
  simulator library (\fIlibsim.a)\fR from the linker command line.
! .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
  .IX Item "-mstack-increment=size"
  Set the maximum amount for a single stack increment operation.  Large
  values can increase the speed of programs that contain functions
--- 26964,27038 ----
  .PP
  These are the \fB\-m\fR options defined for the Motorola M*Core
  processors.
! .IP \fB\-mhardlit\fR 4
  .IX Item "-mhardlit"
  .PD 0
! .IP \fB\-mno\-hardlit\fR 4
  .IX Item "-mno-hardlit"
  .PD
  Inline constants into the code stream if it can be done in two
  instructions or less.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
  Use the divide instruction.  (Enabled by default).
! .IP \fB\-mrelax\-immediate\fR 4
  .IX Item "-mrelax-immediate"
  .PD 0
! .IP \fB\-mno\-relax\-immediate\fR 4
  .IX Item "-mno-relax-immediate"
  .PD
! Allow arbitrary\-sized immediates in bit operations.
! .IP \fB\-mwide\-bitfields\fR 4
  .IX Item "-mwide-bitfields"
  .PD 0
! .IP \fB\-mno\-wide\-bitfields\fR 4
  .IX Item "-mno-wide-bitfields"
  .PD
! Always treat bit\-fields as \f(CW\*(C`int\*(C'\fR\-sized.
! .IP \fB\-m4byte\-functions\fR 4
  .IX Item "-m4byte-functions"
  .PD 0
! .IP \fB\-mno\-4byte\-functions\fR 4
  .IX Item "-mno-4byte-functions"
  .PD
  Force all functions to be aligned to a 4\-byte boundary.
! .IP \fB\-mcallgraph\-data\fR 4
  .IX Item "-mcallgraph-data"
  .PD 0
! .IP \fB\-mno\-callgraph\-data\fR 4
  .IX Item "-mno-callgraph-data"
  .PD
  Emit callgraph information.
! .IP \fB\-mslow\-bytes\fR 4
  .IX Item "-mslow-bytes"
  .PD 0
! .IP \fB\-mno\-slow\-bytes\fR 4
  .IX Item "-mno-slow-bytes"
  .PD
  Prefer word access when reading byte quantities.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
  .PD 0
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD
! Generate code for a little\-endian target.
! .IP \fB\-m210\fR 4
  .IX Item "-m210"
  .PD 0
! .IP \fB\-m340\fR 4
  .IX Item "-m340"
  .PD
  Generate code for the 210 processor.
! .IP \fB\-mno\-lsim\fR 4
  .IX Item "-mno-lsim"
  Assume that runtime support has been provided and so omit the
  simulator library (\fIlibsim.a)\fR from the linker command line.
! .IP \fB\-mstack\-increment=\fR\fIsize\fR 4
  .IX Item "-mstack-increment=size"
  Set the maximum amount for a single stack increment operation.  Large
  values can increase the speed of programs that contain functions
*************** value is 0x1000.
*** 27107,27189 ****
  .PP
  \fIMicroBlaze Options\fR
  .IX Subsection "MicroBlaze Options"
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  Use software emulation for floating point (default).
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
! Use hardware floating-point instructions.
! .IP "\fB\-mmemcpy\fR" 4
  .IX Item "-mmemcpy"
  Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
! .IP "\fB\-mno\-clearbss\fR" 4
  .IX Item "-mno-clearbss"
  This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
! .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
  .IX Item "-mcpu=cpu-type"
! Use features of, and schedule code for, the given \s-1CPU.\s0
! Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
! where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
  \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
  \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
! .IP "\fB\-mxl\-soft\-mul\fR" 4
  .IX Item "-mxl-soft-mul"
  Use software multiply emulation (default).
! .IP "\fB\-mxl\-soft\-div\fR" 4
  .IX Item "-mxl-soft-div"
  Use software emulation for divides (default).
! .IP "\fB\-mxl\-barrel\-shift\fR" 4
  .IX Item "-mxl-barrel-shift"
  Use the hardware barrel shifter.
! .IP "\fB\-mxl\-pattern\-compare\fR" 4
  .IX Item "-mxl-pattern-compare"
  Use pattern compare instructions.
! .IP "\fB\-msmall\-divides\fR" 4
  .IX Item "-msmall-divides"
  Use table lookup optimization for small signed integer divisions.
! .IP "\fB\-mxl\-stack\-check\fR" 4
  .IX Item "-mxl-stack-check"
  This option is deprecated.  Use \fB\-fstack\-check\fR instead.
! .IP "\fB\-mxl\-gp\-opt\fR" 4
  .IX Item "-mxl-gp-opt"
! Use GP-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
! .IP "\fB\-mxl\-multiply\-high\fR" 4
  .IX Item "-mxl-multiply-high"
  Use multiply high instructions for high part of 32x32 multiply.
! .IP "\fB\-mxl\-float\-convert\fR" 4
  .IX Item "-mxl-float-convert"
! Use hardware floating-point conversion instructions.
! .IP "\fB\-mxl\-float\-sqrt\fR" 4
  .IX Item "-mxl-float-sqrt"
! Use hardware floating-point square root instruction.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code for a big-endian target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code for a little-endian target.
! .IP "\fB\-mxl\-reorder\fR" 4
  .IX Item "-mxl-reorder"
  Use reorder instructions (swap and byte reversed load/store).
! .IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
  .IX Item "-mxl-mode-app-model"
! Select application model \fIapp-model\fR.  Valid models are
  .RS 4
! .IP "\fBexecutable\fR" 4
  .IX Item "executable"
  normal executable (default), uses startup code \fIcrt0.o\fR.
! .IP "\fBxmdstub\fR" 4
  .IX Item "xmdstub"
! for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
  software intrusive debug agent called xmdstub. This uses startup file
  \&\fIcrt1.o\fR and sets the start address of the program to 0x800.
! .IP "\fBbootstrap\fR" 4
  .IX Item "bootstrap"
  for applications that are loaded using a bootloader.
  This model uses startup file \fIcrt2.o\fR which does not contain a processor
  reset vector handler. This is suitable for transferring control on a
  processor reset to the bootloader rather than the application.
! .IP "\fBnovectors\fR" 4
  .IX Item "novectors"
  for applications that do not require any of the
  MicroBlaze vectors. This option may be useful for applications running
--- 27042,27124 ----
  .PP
  \fIMicroBlaze Options\fR
  .IX Subsection "MicroBlaze Options"
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  Use software emulation for floating point (default).
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
! Use hardware floating\-point instructions.
! .IP \fB\-mmemcpy\fR 4
  .IX Item "-mmemcpy"
  Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
! .IP \fB\-mno\-clearbss\fR 4
  .IX Item "-mno-clearbss"
  This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
! .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4
  .IX Item "-mcpu=cpu-type"
! Use features of, and schedule code for, the given CPU.
! Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fIYY\fR\fB.\fR\fIZ\fR,
! where \fIX\fR is a major version, \fIYY\fR is the minor version, and
  \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
  \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
! .IP \fB\-mxl\-soft\-mul\fR 4
  .IX Item "-mxl-soft-mul"
  Use software multiply emulation (default).
! .IP \fB\-mxl\-soft\-div\fR 4
  .IX Item "-mxl-soft-div"
  Use software emulation for divides (default).
! .IP \fB\-mxl\-barrel\-shift\fR 4
  .IX Item "-mxl-barrel-shift"
  Use the hardware barrel shifter.
! .IP \fB\-mxl\-pattern\-compare\fR 4
  .IX Item "-mxl-pattern-compare"
  Use pattern compare instructions.
! .IP \fB\-msmall\-divides\fR 4
  .IX Item "-msmall-divides"
  Use table lookup optimization for small signed integer divisions.
! .IP \fB\-mxl\-stack\-check\fR 4
  .IX Item "-mxl-stack-check"
  This option is deprecated.  Use \fB\-fstack\-check\fR instead.
! .IP \fB\-mxl\-gp\-opt\fR 4
  .IX Item "-mxl-gp-opt"
! Use GP\-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
! .IP \fB\-mxl\-multiply\-high\fR 4
  .IX Item "-mxl-multiply-high"
  Use multiply high instructions for high part of 32x32 multiply.
! .IP \fB\-mxl\-float\-convert\fR 4
  .IX Item "-mxl-float-convert"
! Use hardware floating\-point conversion instructions.
! .IP \fB\-mxl\-float\-sqrt\fR 4
  .IX Item "-mxl-float-sqrt"
! Use hardware floating\-point square root instruction.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code for a big\-endian target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code for a little\-endian target.
! .IP \fB\-mxl\-reorder\fR 4
  .IX Item "-mxl-reorder"
  Use reorder instructions (swap and byte reversed load/store).
! .IP \fB\-mxl\-mode\-\fR\fIapp\-model\fR 4
  .IX Item "-mxl-mode-app-model"
! Select application model \fIapp\-model\fR.  Valid models are
  .RS 4
! .IP \fBexecutable\fR 4
  .IX Item "executable"
  normal executable (default), uses startup code \fIcrt0.o\fR.
! .IP \fBxmdstub\fR 4
  .IX Item "xmdstub"
! for use with Xilinx Microprocessor Debugger (XMD) based
  software intrusive debug agent called xmdstub. This uses startup file
  \&\fIcrt1.o\fR and sets the start address of the program to 0x800.
! .IP \fBbootstrap\fR 4
  .IX Item "bootstrap"
  for applications that are loaded using a bootloader.
  This model uses startup file \fIcrt2.o\fR which does not contain a processor
  reset vector handler. This is suitable for transferring control on a
  processor reset to the bootloader rather than the application.
! .IP \fBnovectors\fR 4
  .IX Item "novectors"
  for applications that do not require any of the
  MicroBlaze vectors. This option may be useful for applications running
*************** within a monitoring application. This mo
*** 27191,27219 ****
  .RE
  .RS 4
  .Sp
! Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
! \&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
  .RE
! .IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
  at static link time.  This allows data to be referenced by offset from start of
! text address instead of \s-1GOT\s0 since PC-relative addressing is not supported.
  .PP
! \fI\s-1MIPS\s0 Options\fR
  .IX Subsection "MIPS Options"
! .IP "\fB\-EB\fR" 4
  .IX Item "-EB"
! Generate big-endian code.
! .IP "\fB\-EL\fR" 4
  .IX Item "-EL"
! Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
  configurations.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Generate code that runs on \fIarch\fR, which can be the name of a
! generic \s-1MIPS ISA,\s0 or the name of a particular processor.
! The \s-1ISA\s0 names are:
  \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
  \&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
  \&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
--- 27126,27154 ----
  .RE
  .RS 4
  .Sp
! Option \fB\-xl\-mode\-\fR\fIapp\-model\fR is a deprecated alias for
! \&\fB\-mxl\-mode\-\fR\fIapp\-model\fR.
  .RE
! .IP \fB\-mpic\-data\-is\-text\-relative\fR 4
  .IX Item "-mpic-data-is-text-relative"
  Assume that the displacement between the text and data segments is fixed
  at static link time.  This allows data to be referenced by offset from start of
! text address instead of GOT since PC\-relative addressing is not supported.
  .PP
! \fIMIPS Options\fR
  .IX Subsection "MIPS Options"
! .IP \fB\-EB\fR 4
  .IX Item "-EB"
! Generate big\-endian code.
! .IP \fB\-EL\fR 4
  .IX Item "-EL"
! Generate little\-endian code.  This is the default for \fBmips*el\-*\-*\fR
  configurations.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Generate code that runs on \fIarch\fR, which can be the name of a
! generic MIPS ISA, or the name of a particular processor.
! The ISA names are:
  \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
  \&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
  \&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
*************** The processor names are:
*** 27248,27260 ****
  \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
  \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
  \&\fBxlr\fR and \fBxlp\fR.
! The special value \fBfrom-abi\fR selects the
! most compatible architecture for the selected \s-1ABI\s0 (that is,
  \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
  .Sp
  The native Linux/GNU toolchain also supports the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
  .Sp
  In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
--- 27183,27195 ----
  \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
  \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
  \&\fBxlr\fR and \fBxlp\fR.
! The special value \fBfrom\-abi\fR selects the
! most compatible architecture for the selected ABI (that is,
  \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
  .Sp
  The native Linux/GNU toolchain also supports the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if GCC does not recognize
  the processor.
  .Sp
  In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
*************** For compatibility reasons, \fIn\fR\fBf\f
*** 27270,27493 ****
  for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
  accepted as synonyms for \fIn\fR\fBf1_1\fR.
  .Sp
! \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
  is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
! a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\f(CIfoo\f(CW\*(C'\fR,
  where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
  For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
  to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
  .Sp
  Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
  above.  In other words, it has the full prefix and does not
! abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
  the macro names the resolved architecture (either \f(CW"mips1"\fR or
  \&\f(CW"mips3"\fR).  It names the default architecture when no
  \&\fB\-march\fR option is given.
! .IP "\fB\-mtune=\fR\fIarch\fR" 4
  .IX Item "-mtune=arch"
  Optimize for \fIarch\fR.  Among other things, this option controls
  the way instructions are scheduled, and the perceived cost of arithmetic
  operations.  The list of \fIarch\fR values is the same as for
  \&\fB\-march\fR.
  .Sp
! When this option is not used, \s-1GCC\s0 optimizes for the processor
  specified by \fB\-march\fR.  By using \fB\-march\fR and
  \&\fB\-mtune\fR together, it is possible to generate code that
  runs on a family of processors, but optimize the code for one
  particular member of that family.
  .Sp
  \&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
! \&\f(CW\*(C`_MIPS_TUNE_\f(CIfoo\f(CW\*(C'\fR, which work in the same way as the
  \&\fB\-march\fR ones described above.
! .IP "\fB\-mips1\fR" 4
  .IX Item "-mips1"
  Equivalent to \fB\-march=mips1\fR.
! .IP "\fB\-mips2\fR" 4
  .IX Item "-mips2"
  Equivalent to \fB\-march=mips2\fR.
! .IP "\fB\-mips3\fR" 4
  .IX Item "-mips3"
  Equivalent to \fB\-march=mips3\fR.
! .IP "\fB\-mips4\fR" 4
  .IX Item "-mips4"
  Equivalent to \fB\-march=mips4\fR.
! .IP "\fB\-mips32\fR" 4
  .IX Item "-mips32"
  Equivalent to \fB\-march=mips32\fR.
! .IP "\fB\-mips32r3\fR" 4
  .IX Item "-mips32r3"
  Equivalent to \fB\-march=mips32r3\fR.
! .IP "\fB\-mips32r5\fR" 4
  .IX Item "-mips32r5"
  Equivalent to \fB\-march=mips32r5\fR.
! .IP "\fB\-mips32r6\fR" 4
  .IX Item "-mips32r6"
  Equivalent to \fB\-march=mips32r6\fR.
! .IP "\fB\-mips64\fR" 4
  .IX Item "-mips64"
  Equivalent to \fB\-march=mips64\fR.
! .IP "\fB\-mips64r2\fR" 4
  .IX Item "-mips64r2"
  Equivalent to \fB\-march=mips64r2\fR.
! .IP "\fB\-mips64r3\fR" 4
  .IX Item "-mips64r3"
  Equivalent to \fB\-march=mips64r3\fR.
! .IP "\fB\-mips64r5\fR" 4
  .IX Item "-mips64r5"
  Equivalent to \fB\-march=mips64r5\fR.
! .IP "\fB\-mips64r6\fR" 4
  .IX Item "-mips64r6"
  Equivalent to \fB\-march=mips64r6\fR.
! .IP "\fB\-mips16\fR" 4
  .IX Item "-mips16"
  .PD 0
! .IP "\fB\-mno\-mips16\fR" 4
  .IX Item "-mno-mips16"
  .PD
! Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targeting a
! \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it makes use of the MIPS16e \s-1ASE.\s0
  .Sp
! \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
  by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
! .IP "\fB\-mmips16e2\fR" 4
  .IX Item "-mmips16e2"
  .PD 0
! .IP "\fB\-mno\-mips16e2\fR" 4
  .IX Item "-mno-mips16e2"
  .PD
! Use (do not use) the MIPS16e2 \s-1ASE.\s0  This option modifies the behavior
! of the \fB\-mips16\fR option such that it targets the MIPS16e2 \s-1ASE.\s0
! .IP "\fB\-mflip\-mips16\fR" 4
  .IX Item "-mflip-mips16"
! Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
  for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
  not intended for ordinary use in compiling user code.
! .IP "\fB\-minterlink\-compressed\fR" 4
  .IX Item "-minterlink-compressed"
  .PD 0
! .IP "\fB\-mno\-interlink\-compressed\fR" 4
  .IX Item "-mno-interlink-compressed"
  .PD
! Require (do not require) that code using the standard (uncompressed) \s-1MIPS ISA\s0
! be link-compatible with \s-1MIPS16\s0 and microMIPS code, and vice versa.
  .Sp
! For example, code using the standard \s-1ISA\s0 encoding cannot jump directly
! to \s-1MIPS16\s0 or microMIPS code; it must either use a call or an indirect jump.
! \&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless \s-1GCC\s0
  knows that the target of the jump is not compressed.
! .IP "\fB\-minterlink\-mips16\fR" 4
  .IX Item "-minterlink-mips16"
  .PD 0
! .IP "\fB\-mno\-interlink\-mips16\fR" 4
  .IX Item "-mno-interlink-mips16"
  .PD
  Aliases of \fB\-minterlink\-compressed\fR and
! \&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS \s-1ASE\s0
  and are retained for backwards compatibility.
! .IP "\fB\-mabi=32\fR" 4
  .IX Item "-mabi=32"
  .PD 0
! .IP "\fB\-mabi=o64\fR" 4
  .IX Item "-mabi=o64"
! .IP "\fB\-mabi=n32\fR" 4
  .IX Item "-mabi=n32"
! .IP "\fB\-mabi=64\fR" 4
  .IX Item "-mabi=64"
! .IP "\fB\-mabi=eabi\fR" 4
  .IX Item "-mabi=eabi"
  .PD
! Generate code for the given \s-1ABI.\s0
  .Sp
! Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
  generates 64\-bit code when you select a 64\-bit architecture, but you
  can use \fB\-mgp32\fR to get 32\-bit code instead.
  .Sp
! For information about the O64 \s-1ABI,\s0 see
  <\fBhttps://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
  .Sp
! \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
  are 64 rather than 32 bits wide.  You can select this combination with
! \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \f(CW\*(C`mthc1\*(C'\fR
  and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
! \&\s-1MIPS32R2, MIPS32R3\s0 and \s-1MIPS32R5\s0 processors.
  .Sp
  The register assignments for arguments and return values remain the
  same, but each scalar value is passed in a single 64\-bit register
  rather than a pair of 32\-bit registers.  For example, scalar
! floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
! \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
! remains the same in that the even-numbered double-precision registers
  are saved.
  .Sp
! Two additional variants of the o32 \s-1ABI\s0 are supported to enable
! a transition from 32\-bit to 64\-bit registers.  These are \s-1FPXX\s0
! (\fB\-mfpxx\fR) and \s-1FP64A\s0 (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
! The \s-1FPXX\s0 extension mandates that all code must execute correctly
  when run using 32\-bit or 64\-bit registers.  The code can be interlinked
! with either \s-1FP32\s0 or \s-1FP64,\s0 but not both.
! The \s-1FP64A\s0 extension is similar to the \s-1FP64\s0 extension but forbids the
! use of odd-numbered single-precision registers.  This can be used
! in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in \s-1MIPS32R5\s0
! processors and allows both \s-1FP32\s0 and \s-1FP64A\s0 code to interlink and
! run in the same process without changing \s-1FPU\s0 modes.
! .IP "\fB\-mabicalls\fR" 4
  .IX Item "-mabicalls"
  .PD 0
! .IP "\fB\-mno\-abicalls\fR" 4
  .IX Item "-mno-abicalls"
  .PD
  Generate (do not generate) code that is suitable for SVR4\-style
  dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
  systems.
! .IP "\fB\-mshared\fR" 4
  .IX Item "-mshared"
  .PD 0
! .IP "\fB\-mno\-shared\fR" 4
  .IX Item "-mno-shared"
  .PD
! Generate (do not generate) code that is fully position-independent,
  and that can therefore be linked into shared libraries.  This option
  only affects \fB\-mabicalls\fR.
  .Sp
! All \fB\-mabicalls\fR code has traditionally been position-independent,
  regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
! as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
! accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
! initialization sequences and generate direct calls to locally-defined
  functions.  This mode is selected by \fB\-mno\-shared\fR.
  .Sp
  \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
! objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
! does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
  of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
  executables both smaller and quicker.
  .Sp
  \&\fB\-mshared\fR is the default.
! .IP "\fB\-mplt\fR" 4
  .IX Item "-mplt"
  .PD 0
! .IP "\fB\-mno\-plt\fR" 4
  .IX Item "-mno-plt"
  .PD
  Assume (do not assume) that the static and dynamic linkers
  support PLTs and copy relocations.  This option only affects
! \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI,\s0 this option
  has no effect without \fB\-msym32\fR.
  .Sp
  You can make \fB\-mplt\fR the default by configuring
! \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
  \&\fB\-mno\-plt\fR otherwise.
! .IP "\fB\-mxgot\fR" 4
  .IX Item "-mxgot"
  .PD 0
! .IP "\fB\-mno\-xgot\fR" 4
  .IX Item "-mno-xgot"
  .PD
  Lift (do not lift) the usual restrictions on the size of the global
  offset table.
  .Sp
! \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT.\s0
! While this is relatively efficient, it only works if the \s-1GOT\s0
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
--- 27205,27428 ----
  for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
  accepted as synonyms for \fIn\fR\fBf1_1\fR.
  .Sp
! GCC defines two macros based on the value of this option.  The first
  is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
! a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\fR\f(CIfoo\fR\f(CW\*(C'\fR,
  where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
  For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
  to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
  .Sp
  Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
  above.  In other words, it has the full prefix and does not
! abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom\-abi\fR,
  the macro names the resolved architecture (either \f(CW"mips1"\fR or
  \&\f(CW"mips3"\fR).  It names the default architecture when no
  \&\fB\-march\fR option is given.
! .IP \fB\-mtune=\fR\fIarch\fR 4
  .IX Item "-mtune=arch"
  Optimize for \fIarch\fR.  Among other things, this option controls
  the way instructions are scheduled, and the perceived cost of arithmetic
  operations.  The list of \fIarch\fR values is the same as for
  \&\fB\-march\fR.
  .Sp
! When this option is not used, GCC optimizes for the processor
  specified by \fB\-march\fR.  By using \fB\-march\fR and
  \&\fB\-mtune\fR together, it is possible to generate code that
  runs on a family of processors, but optimize the code for one
  particular member of that family.
  .Sp
  \&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
! \&\f(CW\*(C`_MIPS_TUNE_\fR\f(CIfoo\fR\f(CW\*(C'\fR, which work in the same way as the
  \&\fB\-march\fR ones described above.
! .IP \fB\-mips1\fR 4
  .IX Item "-mips1"
  Equivalent to \fB\-march=mips1\fR.
! .IP \fB\-mips2\fR 4
  .IX Item "-mips2"
  Equivalent to \fB\-march=mips2\fR.
! .IP \fB\-mips3\fR 4
  .IX Item "-mips3"
  Equivalent to \fB\-march=mips3\fR.
! .IP \fB\-mips4\fR 4
  .IX Item "-mips4"
  Equivalent to \fB\-march=mips4\fR.
! .IP \fB\-mips32\fR 4
  .IX Item "-mips32"
  Equivalent to \fB\-march=mips32\fR.
! .IP \fB\-mips32r3\fR 4
  .IX Item "-mips32r3"
  Equivalent to \fB\-march=mips32r3\fR.
! .IP \fB\-mips32r5\fR 4
  .IX Item "-mips32r5"
  Equivalent to \fB\-march=mips32r5\fR.
! .IP \fB\-mips32r6\fR 4
  .IX Item "-mips32r6"
  Equivalent to \fB\-march=mips32r6\fR.
! .IP \fB\-mips64\fR 4
  .IX Item "-mips64"
  Equivalent to \fB\-march=mips64\fR.
! .IP \fB\-mips64r2\fR 4
  .IX Item "-mips64r2"
  Equivalent to \fB\-march=mips64r2\fR.
! .IP \fB\-mips64r3\fR 4
  .IX Item "-mips64r3"
  Equivalent to \fB\-march=mips64r3\fR.
! .IP \fB\-mips64r5\fR 4
  .IX Item "-mips64r5"
  Equivalent to \fB\-march=mips64r5\fR.
! .IP \fB\-mips64r6\fR 4
  .IX Item "-mips64r6"
  Equivalent to \fB\-march=mips64r6\fR.
! .IP \fB\-mips16\fR 4
  .IX Item "-mips16"
  .PD 0
! .IP \fB\-mno\-mips16\fR 4
  .IX Item "-mno-mips16"
  .PD
! Generate (do not generate) MIPS16 code.  If GCC is targeting a
! MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
  .Sp
! MIPS16 code generation can also be controlled on a per\-function basis
  by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
! .IP \fB\-mmips16e2\fR 4
  .IX Item "-mmips16e2"
  .PD 0
! .IP \fB\-mno\-mips16e2\fR 4
  .IX Item "-mno-mips16e2"
  .PD
! Use (do not use) the MIPS16e2 ASE.  This option modifies the behavior
! of the \fB\-mips16\fR option such that it targets the MIPS16e2 ASE.
! .IP \fB\-mflip\-mips16\fR 4
  .IX Item "-mflip-mips16"
! Generate MIPS16 code on alternating functions.  This option is provided
  for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
  not intended for ordinary use in compiling user code.
! .IP \fB\-minterlink\-compressed\fR 4
  .IX Item "-minterlink-compressed"
  .PD 0
! .IP \fB\-mno\-interlink\-compressed\fR 4
  .IX Item "-mno-interlink-compressed"
  .PD
! Require (do not require) that code using the standard (uncompressed) MIPS ISA
! be link\-compatible with MIPS16 and microMIPS code, and vice versa.
  .Sp
! For example, code using the standard ISA encoding cannot jump directly
! to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
! \&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless GCC
  knows that the target of the jump is not compressed.
! .IP \fB\-minterlink\-mips16\fR 4
  .IX Item "-minterlink-mips16"
  .PD 0
! .IP \fB\-mno\-interlink\-mips16\fR 4
  .IX Item "-mno-interlink-mips16"
  .PD
  Aliases of \fB\-minterlink\-compressed\fR and
! \&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS ASE
  and are retained for backwards compatibility.
! .IP \fB\-mabi=32\fR 4
  .IX Item "-mabi=32"
  .PD 0
! .IP \fB\-mabi=o64\fR 4
  .IX Item "-mabi=o64"
! .IP \fB\-mabi=n32\fR 4
  .IX Item "-mabi=n32"
! .IP \fB\-mabi=64\fR 4
  .IX Item "-mabi=64"
! .IP \fB\-mabi=eabi\fR 4
  .IX Item "-mabi=eabi"
  .PD
! Generate code for the given ABI.
  .Sp
! Note that the EABI has a 32\-bit and a 64\-bit variant.  GCC normally
  generates 64\-bit code when you select a 64\-bit architecture, but you
  can use \fB\-mgp32\fR to get 32\-bit code instead.
  .Sp
! For information about the O64 ABI, see
  <\fBhttps://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
  .Sp
! GCC supports a variant of the o32 ABI in which floating\-point registers
  are 64 rather than 32 bits wide.  You can select this combination with
! \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This ABI relies on the \f(CW\*(C`mthc1\*(C'\fR
  and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
! MIPS32R2, MIPS32R3 and MIPS32R5 processors.
  .Sp
  The register assignments for arguments and return values remain the
  same, but each scalar value is passed in a single 64\-bit register
  rather than a pair of 32\-bit registers.  For example, scalar
! floating\-point values are returned in \fR\f(CB$f0\fR\fB\fR only, not a
! \&\fB\fR\f(CB$f0\fR\fB\fR/\fB\fR\f(CB$f1\fR\fB\fR pair.  The set of call\-saved registers also
! remains the same in that the even\-numbered double\-precision registers
  are saved.
  .Sp
! Two additional variants of the o32 ABI are supported to enable
! a transition from 32\-bit to 64\-bit registers.  These are FPXX
! (\fB\-mfpxx\fR) and FP64A (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
! The FPXX extension mandates that all code must execute correctly
  when run using 32\-bit or 64\-bit registers.  The code can be interlinked
! with either FP32 or FP64, but not both.
! The FP64A extension is similar to the FP64 extension but forbids the
! use of odd\-numbered single\-precision registers.  This can be used
! in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in MIPS32R5
! processors and allows both FP32 and FP64A code to interlink and
! run in the same process without changing FPU modes.
! .IP \fB\-mabicalls\fR 4
  .IX Item "-mabicalls"
  .PD 0
! .IP \fB\-mno\-abicalls\fR 4
  .IX Item "-mno-abicalls"
  .PD
  Generate (do not generate) code that is suitable for SVR4\-style
  dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
  systems.
! .IP \fB\-mshared\fR 4
  .IX Item "-mshared"
  .PD 0
! .IP \fB\-mno\-shared\fR 4
  .IX Item "-mno-shared"
  .PD
! Generate (do not generate) code that is fully position\-independent,
  and that can therefore be linked into shared libraries.  This option
  only affects \fB\-mabicalls\fR.
  .Sp
! All \fB\-mabicalls\fR code has traditionally been position\-independent,
  regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
! as an extension, the GNU toolchain allows executables to use absolute
! accesses for locally\-binding symbols.  It can also use shorter GP
! initialization sequences and generate direct calls to locally\-defined
  functions.  This mode is selected by \fB\-mno\-shared\fR.
  .Sp
  \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
! objects that can only be linked by the GNU linker.  However, the option
! does not affect the ABI of the final executable; it only affects the ABI
  of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
  executables both smaller and quicker.
  .Sp
  \&\fB\-mshared\fR is the default.
! .IP \fB\-mplt\fR 4
  .IX Item "-mplt"
  .PD 0
! .IP \fB\-mno\-plt\fR 4
  .IX Item "-mno-plt"
  .PD
  Assume (do not assume) that the static and dynamic linkers
  support PLTs and copy relocations.  This option only affects
! \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 ABI, this option
  has no effect without \fB\-msym32\fR.
  .Sp
  You can make \fB\-mplt\fR the default by configuring
! GCC with \fB\-\-with\-mips\-plt\fR.  The default is
  \&\fB\-mno\-plt\fR otherwise.
! .IP \fB\-mxgot\fR 4
  .IX Item "-mxgot"
  .PD 0
! .IP \fB\-mno\-xgot\fR 4
  .IX Item "-mno-xgot"
  .PD
  Lift (do not lift) the usual restrictions on the size of the global
  offset table.
  .Sp
! GCC normally uses a single instruction to load values from the GOT.
! While this is relatively efficient, it only works if the GOT
  is smaller than about 64k.  Anything larger causes the linker
  to report an error such as:
  .Sp
*************** value of a global symbol.
*** 27502,27791 ****
  .Sp
  Note that some linkers can create multiple GOTs.  If you have such a
  linker, you should only need to use \fB\-mxgot\fR when a single object
! file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
  .Sp
! These options have no effect unless \s-1GCC\s0 is generating position
  independent code.
! .IP "\fB\-mgp32\fR" 4
  .IX Item "-mgp32"
! Assume that general-purpose registers are 32 bits wide.
! .IP "\fB\-mgp64\fR" 4
  .IX Item "-mgp64"
! Assume that general-purpose registers are 64 bits wide.
! .IP "\fB\-mfp32\fR" 4
  .IX Item "-mfp32"
! Assume that floating-point registers are 32 bits wide.
! .IP "\fB\-mfp64\fR" 4
  .IX Item "-mfp64"
! Assume that floating-point registers are 64 bits wide.
! .IP "\fB\-mfpxx\fR" 4
  .IX Item "-mfpxx"
! Do not assume the width of floating-point registers.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
! Use floating-point coprocessor instructions.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
! Do not use floating-point coprocessor instructions.  Implement
! floating-point calculations using library calls instead.
! .IP "\fB\-mno\-float\fR" 4
  .IX Item "-mno-float"
  Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
! program being compiled does not perform any floating-point operations.
! This option is presently supported only by some bare-metal \s-1MIPS\s0
  configurations, where it may select a special set of libraries
! that lack all floating-point support (including, for example, the
! floating-point \f(CW\*(C`printf\*(C'\fR formats).  
  If code compiled with \fB\-mno\-float\fR accidentally contains
! floating-point operations, it is likely to suffer a link-time
! or run-time failure.
! .IP "\fB\-msingle\-float\fR" 4
  .IX Item "-msingle-float"
! Assume that the floating-point coprocessor only supports single-precision
  operations.
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
! Assume that the floating-point coprocessor supports double-precision
  operations.  This is the default.
! .IP "\fB\-modd\-spreg\fR" 4
  .IX Item "-modd-spreg"
  .PD 0
! .IP "\fB\-mno\-odd\-spreg\fR" 4
  .IX Item "-mno-odd-spreg"
  .PD
! Enable the use of odd-numbered single-precision floating-point registers
! for the o32 \s-1ABI.\s0  This is the default for processors that are known to
! support these registers.  When using the o32 \s-1FPXX ABI,\s0 \fB\-mno\-odd\-spreg\fR
  is set by default.
! .IP "\fB\-mabs=2008\fR" 4
  .IX Item "-mabs=2008"
  .PD 0
! .IP "\fB\-mabs=legacy\fR" 4
  .IX Item "-mabs=legacy"
  .PD
! These options control the treatment of the special not-a-number (NaN)
! \&\s-1IEEE 754\s0 floating-point data with the \f(CW\*(C`abs.\f(CIfmt\f(CW\*(C'\fR and
! \&\f(CW\*(C`neg.\f(CIfmt\f(CW\*(C'\fR machine instructions.
  .Sp
  By default or when \fB\-mabs=legacy\fR is used the legacy
  treatment is selected.  In this case these instructions are considered
  arithmetic and avoided where correct operation is required and the
  input operand might be a NaN.  A longer sequence of instructions that
! manipulate the sign bit of floating-point datum manually is used
  instead unless the \fB\-ffinite\-math\-only\fR option has also been
  specified.
  .Sp
! The \fB\-mabs=2008\fR option selects the \s-1IEEE 754\-2008\s0 treatment.  In
! this case these instructions are considered non-arithmetic and therefore
  operating correctly in all cases, including in particular where the
  input operand is a NaN.  These instructions are therefore always used
  for the respective operations.
! .IP "\fB\-mnan=2008\fR" 4
  .IX Item "-mnan=2008"
  .PD 0
! .IP "\fB\-mnan=legacy\fR" 4
  .IX Item "-mnan=legacy"
  .PD
! These options control the encoding of the special not-a-number (NaN)
! \&\s-1IEEE 754\s0 floating-point data.
  .Sp
  The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
  case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
  significand field being 0, whereas signaling NaNs (sNaNs) are denoted
  by the first bit of their trailing significand field being 1.
  .Sp
! The \fB\-mnan=2008\fR option selects the \s-1IEEE 754\-2008\s0 encoding.  In
  this case qNaNs are denoted by the first bit of their trailing
  significand field being 1, whereas sNaNs are denoted by the first bit of
  their trailing significand field being 0.
  .Sp
! The default is \fB\-mnan=legacy\fR unless \s-1GCC\s0 has been configured with
  \&\fB\-\-with\-nan=2008\fR.
! .IP "\fB\-mllsc\fR" 4
  .IX Item "-mllsc"
  .PD 0
! .IP "\fB\-mno\-llsc\fR" 4
  .IX Item "-mno-llsc"
  .PD
  Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
! implement atomic memory built-in functions.  When neither option is
! specified, \s-1GCC\s0 uses the instructions if the target architecture
  supports them.
  .Sp
  \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
  instructions and \fB\-mno\-llsc\fR can be useful when compiling for
  nonstandard ISAs.  You can make either option the default by
! configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
  respectively.  \fB\-\-with\-llsc\fR is the default for some
  configurations; see the installation documentation for details.
! .IP "\fB\-mdsp\fR" 4
  .IX Item "-mdsp"
  .PD 0
! .IP "\fB\-mno\-dsp\fR" 4
  .IX Item "-mno-dsp"
  .PD
! Use (do not use) revision 1 of the \s-1MIPS DSP ASE.\s0
    This option defines the
  preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
  \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
! .IP "\fB\-mdspr2\fR" 4
  .IX Item "-mdspr2"
  .PD 0
! .IP "\fB\-mno\-dspr2\fR" 4
  .IX Item "-mno-dspr2"
  .PD
! Use (do not use) revision 2 of the \s-1MIPS DSP ASE.\s0
    This option defines the
  preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
  It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
! .IP "\fB\-msmartmips\fR" 4
  .IX Item "-msmartmips"
  .PD 0
! .IP "\fB\-mno\-smartmips\fR" 4
  .IX Item "-mno-smartmips"
  .PD
! Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE.\s0
! .IP "\fB\-mpaired\-single\fR" 4
  .IX Item "-mpaired-single"
  .PD 0
! .IP "\fB\-mno\-paired\-single\fR" 4
  .IX Item "-mno-paired-single"
  .PD
! Use (do not use) paired-single floating-point instructions.
    This option requires
! hardware floating-point support to be enabled.
! .IP "\fB\-mdmx\fR" 4
  .IX Item "-mdmx"
  .PD 0
! .IP "\fB\-mno\-mdmx\fR" 4
  .IX Item "-mno-mdmx"
  .PD
! Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
  This option can only be used when generating 64\-bit code and requires
! hardware floating-point support to be enabled.
! .IP "\fB\-mips3d\fR" 4
  .IX Item "-mips3d"
  .PD 0
! .IP "\fB\-mno\-mips3d\fR" 4
  .IX Item "-mno-mips3d"
  .PD
! Use (do not use) the \s-1MIPS\-3D ASE.\s0  
  The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
! .IP "\fB\-mmicromips\fR" 4
  .IX Item "-mmicromips"
  .PD 0
! .IP "\fB\-mno\-micromips\fR" 4
  .IX Item "-mno-micromips"
  .PD
  Generate (do not generate) microMIPS code.
  .Sp
! MicroMIPS code generation can also be controlled on a per-function basis
  by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
! .IP "\fB\-mmt\fR" 4
  .IX Item "-mmt"
  .PD 0
! .IP "\fB\-mno\-mt\fR" 4
  .IX Item "-mno-mt"
  .PD
! Use (do not use) \s-1MT\s0 Multithreading instructions.
! .IP "\fB\-mmcu\fR" 4
  .IX Item "-mmcu"
  .PD 0
! .IP "\fB\-mno\-mcu\fR" 4
  .IX Item "-mno-mcu"
  .PD
! Use (do not use) the \s-1MIPS MCU ASE\s0 instructions.
! .IP "\fB\-meva\fR" 4
  .IX Item "-meva"
  .PD 0
! .IP "\fB\-mno\-eva\fR" 4
  .IX Item "-mno-eva"
  .PD
! Use (do not use) the \s-1MIPS\s0 Enhanced Virtual Addressing instructions.
! .IP "\fB\-mvirt\fR" 4
  .IX Item "-mvirt"
  .PD 0
! .IP "\fB\-mno\-virt\fR" 4
  .IX Item "-mno-virt"
  .PD
! Use (do not use) the \s-1MIPS\s0 Virtualization (\s-1VZ\s0) instructions.
! .IP "\fB\-mxpa\fR" 4
  .IX Item "-mxpa"
  .PD 0
! .IP "\fB\-mno\-xpa\fR" 4
  .IX Item "-mno-xpa"
  .PD
! Use (do not use) the \s-1MIPS\s0 eXtended Physical Address (\s-1XPA\s0) instructions.
! .IP "\fB\-mcrc\fR" 4
  .IX Item "-mcrc"
  .PD 0
! .IP "\fB\-mno\-crc\fR" 4
  .IX Item "-mno-crc"
  .PD
! Use (do not use) the \s-1MIPS\s0 Cyclic Redundancy Check (\s-1CRC\s0) instructions.
! .IP "\fB\-mginv\fR" 4
  .IX Item "-mginv"
  .PD 0
! .IP "\fB\-mno\-ginv\fR" 4
  .IX Item "-mno-ginv"
  .PD
! Use (do not use) the \s-1MIPS\s0 Global INValidate (\s-1GINV\s0) instructions.
! .IP "\fB\-mloongson\-mmi\fR" 4
  .IX Item "-mloongson-mmi"
  .PD 0
! .IP "\fB\-mno\-loongson\-mmi\fR" 4
  .IX Item "-mno-loongson-mmi"
  .PD
! Use (do not use) the \s-1MIPS\s0 Loongson MultiMedia extensions Instructions (\s-1MMI\s0).
! .IP "\fB\-mloongson\-ext\fR" 4
  .IX Item "-mloongson-ext"
  .PD 0
! .IP "\fB\-mno\-loongson\-ext\fR" 4
  .IX Item "-mno-loongson-ext"
  .PD
! Use (do not use) the \s-1MIPS\s0 Loongson EXTensions (\s-1EXT\s0) instructions.
! .IP "\fB\-mloongson\-ext2\fR" 4
  .IX Item "-mloongson-ext2"
  .PD 0
! .IP "\fB\-mno\-loongson\-ext2\fR" 4
  .IX Item "-mno-loongson-ext2"
  .PD
! Use (do not use) the \s-1MIPS\s0 Loongson EXTensions r2 (\s-1EXT2\s0) instructions.
! .IP "\fB\-mlong64\fR" 4
  .IX Item "-mlong64"
  Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
  an explanation of the default and the way that the pointer size is
  determined.
! .IP "\fB\-mlong32\fR" 4
  .IX Item "-mlong32"
  Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
  .Sp
  The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
! the \s-1ABI.\s0  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
! uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
  32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
  or the same size as integer registers, whichever is smaller.
! .IP "\fB\-msym32\fR" 4
  .IX Item "-msym32"
  .PD 0
! .IP "\fB\-mno\-sym32\fR" 4
  .IX Item "-mno-sym32"
  .PD
  Assume (do not assume) that all symbols have 32\-bit values, regardless
! of the selected \s-1ABI.\s0  This option is useful in combination with
! \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
  to generate shorter and faster references to symbolic addresses.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally-visible data in a small data section
! if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then generate
  more efficient accesses to the data; see \fB\-mgpopt\fR for details.
  .Sp
  The default \fB\-G\fR option depends on the configuration.
! .IP "\fB\-mlocal\-sdata\fR" 4
  .IX Item "-mlocal-sdata"
  .PD 0
! .IP "\fB\-mno\-local\-sdata\fR" 4
  .IX Item "-mno-local-sdata"
  .PD
  Extend (do not extend) the \fB\-G\fR behavior to local data too,
--- 27437,27726 ----
  .Sp
  Note that some linkers can create multiple GOTs.  If you have such a
  linker, you should only need to use \fB\-mxgot\fR when a single object
! file accesses more than 64k\*(Aqs worth of GOT entries.  Very few do.
  .Sp
! These options have no effect unless GCC is generating position
  independent code.
! .IP \fB\-mgp32\fR 4
  .IX Item "-mgp32"
! Assume that general\-purpose registers are 32 bits wide.
! .IP \fB\-mgp64\fR 4
  .IX Item "-mgp64"
! Assume that general\-purpose registers are 64 bits wide.
! .IP \fB\-mfp32\fR 4
  .IX Item "-mfp32"
! Assume that floating\-point registers are 32 bits wide.
! .IP \fB\-mfp64\fR 4
  .IX Item "-mfp64"
! Assume that floating\-point registers are 64 bits wide.
! .IP \fB\-mfpxx\fR 4
  .IX Item "-mfpxx"
! Do not assume the width of floating\-point registers.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
! Use floating\-point coprocessor instructions.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
! Do not use floating\-point coprocessor instructions.  Implement
! floating\-point calculations using library calls instead.
! .IP \fB\-mno\-float\fR 4
  .IX Item "-mno-float"
  Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
! program being compiled does not perform any floating\-point operations.
! This option is presently supported only by some bare\-metal MIPS
  configurations, where it may select a special set of libraries
! that lack all floating\-point support (including, for example, the
! floating\-point \f(CW\*(C`printf\*(C'\fR formats).  
  If code compiled with \fB\-mno\-float\fR accidentally contains
! floating\-point operations, it is likely to suffer a link\-time
! or run\-time failure.
! .IP \fB\-msingle\-float\fR 4
  .IX Item "-msingle-float"
! Assume that the floating\-point coprocessor only supports single\-precision
  operations.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
! Assume that the floating\-point coprocessor supports double\-precision
  operations.  This is the default.
! .IP \fB\-modd\-spreg\fR 4
  .IX Item "-modd-spreg"
  .PD 0
! .IP \fB\-mno\-odd\-spreg\fR 4
  .IX Item "-mno-odd-spreg"
  .PD
! Enable the use of odd\-numbered single\-precision floating\-point registers
! for the o32 ABI.  This is the default for processors that are known to
! support these registers.  When using the o32 FPXX ABI, \fB\-mno\-odd\-spreg\fR
  is set by default.
! .IP \fB\-mabs=2008\fR 4
  .IX Item "-mabs=2008"
  .PD 0
! .IP \fB\-mabs=legacy\fR 4
  .IX Item "-mabs=legacy"
  .PD
! These options control the treatment of the special not\-a\-number (NaN)
! IEEE 754 floating\-point data with the \f(CW\*(C`abs.\fR\f(CIfmt\fR\f(CW\*(C'\fR and
! \&\f(CW\*(C`neg.\fR\f(CIfmt\fR\f(CW\*(C'\fR machine instructions.
  .Sp
  By default or when \fB\-mabs=legacy\fR is used the legacy
  treatment is selected.  In this case these instructions are considered
  arithmetic and avoided where correct operation is required and the
  input operand might be a NaN.  A longer sequence of instructions that
! manipulate the sign bit of floating\-point datum manually is used
  instead unless the \fB\-ffinite\-math\-only\fR option has also been
  specified.
  .Sp
! The \fB\-mabs=2008\fR option selects the IEEE 754\-2008 treatment.  In
! this case these instructions are considered non\-arithmetic and therefore
  operating correctly in all cases, including in particular where the
  input operand is a NaN.  These instructions are therefore always used
  for the respective operations.
! .IP \fB\-mnan=2008\fR 4
  .IX Item "-mnan=2008"
  .PD 0
! .IP \fB\-mnan=legacy\fR 4
  .IX Item "-mnan=legacy"
  .PD
! These options control the encoding of the special not\-a\-number (NaN)
! IEEE 754 floating\-point data.
  .Sp
  The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
  case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
  significand field being 0, whereas signaling NaNs (sNaNs) are denoted
  by the first bit of their trailing significand field being 1.
  .Sp
! The \fB\-mnan=2008\fR option selects the IEEE 754\-2008 encoding.  In
  this case qNaNs are denoted by the first bit of their trailing
  significand field being 1, whereas sNaNs are denoted by the first bit of
  their trailing significand field being 0.
  .Sp
! The default is \fB\-mnan=legacy\fR unless GCC has been configured with
  \&\fB\-\-with\-nan=2008\fR.
! .IP \fB\-mllsc\fR 4
  .IX Item "-mllsc"
  .PD 0
! .IP \fB\-mno\-llsc\fR 4
  .IX Item "-mno-llsc"
  .PD
  Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
! implement atomic memory built\-in functions.  When neither option is
! specified, GCC uses the instructions if the target architecture
  supports them.
  .Sp
  \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
  instructions and \fB\-mno\-llsc\fR can be useful when compiling for
  nonstandard ISAs.  You can make either option the default by
! configuring GCC with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
  respectively.  \fB\-\-with\-llsc\fR is the default for some
  configurations; see the installation documentation for details.
! .IP \fB\-mdsp\fR 4
  .IX Item "-mdsp"
  .PD 0
! .IP \fB\-mno\-dsp\fR 4
  .IX Item "-mno-dsp"
  .PD
! Use (do not use) revision 1 of the MIPS DSP ASE.
    This option defines the
  preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
  \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
! .IP \fB\-mdspr2\fR 4
  .IX Item "-mdspr2"
  .PD 0
! .IP \fB\-mno\-dspr2\fR 4
  .IX Item "-mno-dspr2"
  .PD
! Use (do not use) revision 2 of the MIPS DSP ASE.
    This option defines the
  preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
  It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
! .IP \fB\-msmartmips\fR 4
  .IX Item "-msmartmips"
  .PD 0
! .IP \fB\-mno\-smartmips\fR 4
  .IX Item "-mno-smartmips"
  .PD
! Use (do not use) the MIPS SmartMIPS ASE.
! .IP \fB\-mpaired\-single\fR 4
  .IX Item "-mpaired-single"
  .PD 0
! .IP \fB\-mno\-paired\-single\fR 4
  .IX Item "-mno-paired-single"
  .PD
! Use (do not use) paired\-single floating\-point instructions.
    This option requires
! hardware floating\-point support to be enabled.
! .IP \fB\-mdmx\fR 4
  .IX Item "-mdmx"
  .PD 0
! .IP \fB\-mno\-mdmx\fR 4
  .IX Item "-mno-mdmx"
  .PD
! Use (do not use) MIPS Digital Media Extension instructions.
  This option can only be used when generating 64\-bit code and requires
! hardware floating\-point support to be enabled.
! .IP \fB\-mips3d\fR 4
  .IX Item "-mips3d"
  .PD 0
! .IP \fB\-mno\-mips3d\fR 4
  .IX Item "-mno-mips3d"
  .PD
! Use (do not use) the MIPS\-3D ASE.  
  The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
! .IP \fB\-mmicromips\fR 4
  .IX Item "-mmicromips"
  .PD 0
! .IP \fB\-mno\-micromips\fR 4
  .IX Item "-mno-micromips"
  .PD
  Generate (do not generate) microMIPS code.
  .Sp
! MicroMIPS code generation can also be controlled on a per\-function basis
  by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
! .IP \fB\-mmt\fR 4
  .IX Item "-mmt"
  .PD 0
! .IP \fB\-mno\-mt\fR 4
  .IX Item "-mno-mt"
  .PD
! Use (do not use) MT Multithreading instructions.
! .IP \fB\-mmcu\fR 4
  .IX Item "-mmcu"
  .PD 0
! .IP \fB\-mno\-mcu\fR 4
  .IX Item "-mno-mcu"
  .PD
! Use (do not use) the MIPS MCU ASE instructions.
! .IP \fB\-meva\fR 4
  .IX Item "-meva"
  .PD 0
! .IP \fB\-mno\-eva\fR 4
  .IX Item "-mno-eva"
  .PD
! Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
! .IP \fB\-mvirt\fR 4
  .IX Item "-mvirt"
  .PD 0
! .IP \fB\-mno\-virt\fR 4
  .IX Item "-mno-virt"
  .PD
! Use (do not use) the MIPS Virtualization (VZ) instructions.
! .IP \fB\-mxpa\fR 4
  .IX Item "-mxpa"
  .PD 0
! .IP \fB\-mno\-xpa\fR 4
  .IX Item "-mno-xpa"
  .PD
! Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.
! .IP \fB\-mcrc\fR 4
  .IX Item "-mcrc"
  .PD 0
! .IP \fB\-mno\-crc\fR 4
  .IX Item "-mno-crc"
  .PD
! Use (do not use) the MIPS Cyclic Redundancy Check (CRC) instructions.
! .IP \fB\-mginv\fR 4
  .IX Item "-mginv"
  .PD 0
! .IP \fB\-mno\-ginv\fR 4
  .IX Item "-mno-ginv"
  .PD
! Use (do not use) the MIPS Global INValidate (GINV) instructions.
! .IP \fB\-mloongson\-mmi\fR 4
  .IX Item "-mloongson-mmi"
  .PD 0
! .IP \fB\-mno\-loongson\-mmi\fR 4
  .IX Item "-mno-loongson-mmi"
  .PD
! Use (do not use) the MIPS Loongson MultiMedia extensions Instructions (MMI).
! .IP \fB\-mloongson\-ext\fR 4
  .IX Item "-mloongson-ext"
  .PD 0
! .IP \fB\-mno\-loongson\-ext\fR 4
  .IX Item "-mno-loongson-ext"
  .PD
! Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
! .IP \fB\-mloongson\-ext2\fR 4
  .IX Item "-mloongson-ext2"
  .PD 0
! .IP \fB\-mno\-loongson\-ext2\fR 4
  .IX Item "-mno-loongson-ext2"
  .PD
! Use (do not use) the MIPS Loongson EXTensions r2 (EXT2) instructions.
! .IP \fB\-mlong64\fR 4
  .IX Item "-mlong64"
  Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
  an explanation of the default and the way that the pointer size is
  determined.
! .IP \fB\-mlong32\fR 4
  .IX Item "-mlong32"
  Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
  .Sp
  The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
! the ABI.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 ABI
! uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit EABI; the others use
  32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
  or the same size as integer registers, whichever is smaller.
! .IP \fB\-msym32\fR 4
  .IX Item "-msym32"
  .PD 0
! .IP \fB\-mno\-sym32\fR 4
  .IX Item "-mno-sym32"
  .PD
  Assume (do not assume) that all symbols have 32\-bit values, regardless
! of the selected ABI.  This option is useful in combination with
! \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows GCC
  to generate shorter and faster references to symbolic addresses.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
! Put definitions of externally\-visible data in a small data section
! if that data is no bigger than \fInum\fR bytes.  GCC can then generate
  more efficient accesses to the data; see \fB\-mgpopt\fR for details.
  .Sp
  The default \fB\-G\fR option depends on the configuration.
! .IP \fB\-mlocal\-sdata\fR 4
  .IX Item "-mlocal-sdata"
  .PD 0
! .IP \fB\-mno\-local\-sdata\fR 4
  .IX Item "-mno-local-sdata"
  .PD
  Extend (do not extend) the \fB\-G\fR behavior to local data too,
*************** such as to static variables in C.  \fB\-
*** 27793,27809 ****
  default for all configurations.
  .Sp
  If the linker complains that an application is using too much small data,
! you might want to try rebuilding the less performance-critical parts with
  \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
  libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
  more room for the main program.
! .IP "\fB\-mextern\-sdata\fR" 4
  .IX Item "-mextern-sdata"
  .PD 0
! .IP "\fB\-mno\-extern\-sdata\fR" 4
  .IX Item "-mno-extern-sdata"
  .PD
! Assume (do not assume) that externally-defined data is in
  a small data section if the size of that data is within the \fB\-G\fR limit.
  \&\fB\-mextern\-sdata\fR is the default for all configurations.
  .Sp
--- 27728,27744 ----
  default for all configurations.
  .Sp
  If the linker complains that an application is using too much small data,
! you might want to try rebuilding the less performance\-critical parts with
  \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
  libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
  more room for the main program.
! .IP \fB\-mextern\-sdata\fR 4
  .IX Item "-mextern-sdata"
  .PD 0
! .IP \fB\-mno\-extern\-sdata\fR 4
  .IX Item "-mno-extern-sdata"
  .PD
! Assume (do not assume) that externally\-defined data is in
  a small data section if the size of that data is within the \fB\-G\fR limit.
  \&\fB\-mextern\-sdata\fR is the default for all configurations.
  .Sp
*************** If you compile a module \fIMod\fR with \
*** 27811,27820 ****
  \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
  that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
  is placed in a small data section.  If \fIVar\fR is defined by another
! module, you must either compile that module with a high-enough
! \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
  definition.  If \fIVar\fR is common, you must link the application
! with a high-enough \fB\-G\fR setting.
  .Sp
  The easiest way of satisfying these restrictions is to compile
  and link every module with the same \fB\-G\fR option.  However,
--- 27746,27755 ----
  \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
  that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
  is placed in a small data section.  If \fIVar\fR is defined by another
! module, you must either compile that module with a high\-enough
! \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR\*(Aqs
  definition.  If \fIVar\fR is common, you must link the application
! with a high\-enough \fB\-G\fR setting.
  .Sp
  The easiest way of satisfying these restrictions is to compile
  and link every module with the same \fB\-G\fR option.  However,
*************** you may wish to build a library that sup
*** 27822,27835 ****
  small data limits.  You can do this by compiling the library with
  the highest supported \fB\-G\fR setting and additionally using
  \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
! about externally-defined data.
! .IP "\fB\-mgpopt\fR" 4
  .IX Item "-mgpopt"
  .PD 0
! .IP "\fB\-mno\-gpopt\fR" 4
  .IX Item "-mno-gpopt"
  .PD
! Use (do not use) GP-relative accesses for symbols that are known to be
  in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
  \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
  configurations.
--- 27757,27770 ----
  small data limits.  You can do this by compiling the library with
  the highest supported \fB\-G\fR setting and additionally using
  \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
! about externally\-defined data.
! .IP \fB\-mgpopt\fR 4
  .IX Item "-mgpopt"
  .PD 0
! .IP \fB\-mno\-gpopt\fR 4
  .IX Item "-mno-gpopt"
  .PD
! Use (do not use) GP\-relative accesses for symbols that are known to be
  in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
  \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
  configurations.
*************** with \fB\-G0\fR.)
*** 27843,27937 ****
  .Sp
  \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
  \&\fB\-mno\-extern\-sdata\fR.
! .IP "\fB\-membedded\-data\fR" 4
  .IX Item "-membedded-data"
  .PD 0
! .IP "\fB\-mno\-embedded\-data\fR" 4
  .IX Item "-mno-embedded-data"
  .PD
! Allocate variables to the read-only data section first if possible, then
  next in the small data section if possible, otherwise in data.  This gives
! slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
  when executing, and thus may be preferred for some embedded systems.
! .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
  .IX Item "-muninit-const-in-rodata"
  .PD 0
! .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
  .IX Item "-mno-uninit-const-in-rodata"
  .PD
! Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
  This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
! .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
  .IX Item "-mcode-readable=setting"
! Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
  There are three possible settings:
  .RS 4
! .IP "\fB\-mcode\-readable=yes\fR" 4
  .IX Item "-mcode-readable=yes"
  Instructions may freely access executable sections.  This is the
  default setting.
! .IP "\fB\-mcode\-readable=pcrel\fR" 4
  .IX Item "-mcode-readable=pcrel"
! \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
  but other instructions must not do so.  This option is useful on 4KSc
  and 4KSd processors when the code TLBs have the Read Inhibit bit set.
  It is also useful on processors that can be configured to have a dual
! instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
! redirect PC-relative loads to the instruction \s-1RAM.\s0
! .IP "\fB\-mcode\-readable=no\fR" 4
  .IX Item "-mcode-readable=no"
  Instructions must not access executable sections.  This option can be
  useful on targets that are configured to have a dual instruction/data
! \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
! PC-relative loads to the instruction \s-1RAM.\s0
  .RE
  .RS 4
  .RE
! .IP "\fB\-msplit\-addresses\fR" 4
  .IX Item "-msplit-addresses"
  .PD 0
! .IP "\fB\-mno\-split\-addresses\fR" 4
  .IX Item "-mno-split-addresses"
  .PD
! Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
  relocation operators.  This option has been superseded by
  \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
! .IP "\fB\-mexplicit\-relocs=none\fR" 4
  .IX Item "-mexplicit-relocs=none"
  .PD 0
! .IP "\fB\-mexplicit\-relocs=base\fR" 4
  .IX Item "-mexplicit-relocs=base"
! .IP "\fB\-mexplicit\-relocs=pcrel\fR" 4
  .IX Item "-mexplicit-relocs=pcrel"
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
! .IP "\fB\-mno\-explicit\-relocs\fR" 4
  .IX Item "-mno-explicit-relocs"
  .PD
  These options control whether explicit relocs (such as \f(CW%gp_rel\fR) are used.
! The default value depends on the version of \s-1GAS\s0 when \s-1GCC\s0 itself was built.
  .Sp
! The \f(CW\*(C`base\*(C'\fR explicit-relocs support introdunced into \s-1GAS\s0 in 2001.
! The \f(CW\*(C`pcrel\*(C'\fR explicit-relocs support introdunced into \s-1GAS\s0 in 2014,
  which supports \f(CW%pcrel_hi\fR and \f(CW%pcrel_lo\fR.
! .IP "\fB\-mcheck\-zero\-division\fR" 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP "\fB\-mno\-check\-zero\-division\fR" 4
  .IX Item "-mno-check-zero-division"
  .PD
  Trap (do not trap) on integer division by zero.
  .Sp
  The default is \fB\-mcheck\-zero\-division\fR.
! .IP "\fB\-mdivide\-traps\fR" 4
  .IX Item "-mdivide-traps"
  .PD 0
! .IP "\fB\-mdivide\-breaks\fR" 4
  .IX Item "-mdivide-breaks"
  .PD
! \&\s-1MIPS\s0 systems check for division by zero by generating either a
  conditional trap or a break instruction.  Using traps results in
! smaller code, but is only supported on \s-1MIPS II\s0 and later.  Also, some
  versions of the Linux kernel have a bug that prevents trap from
  generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
  allow conditional traps on architectures that support them and
--- 27778,27872 ----
  .Sp
  \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
  \&\fB\-mno\-extern\-sdata\fR.
! .IP \fB\-membedded\-data\fR 4
  .IX Item "-membedded-data"
  .PD 0
! .IP \fB\-mno\-embedded\-data\fR 4
  .IX Item "-mno-embedded-data"
  .PD
! Allocate variables to the read\-only data section first if possible, then
  next in the small data section if possible, otherwise in data.  This gives
! slightly slower code than the default, but reduces the amount of RAM required
  when executing, and thus may be preferred for some embedded systems.
! .IP \fB\-muninit\-const\-in\-rodata\fR 4
  .IX Item "-muninit-const-in-rodata"
  .PD 0
! .IP \fB\-mno\-uninit\-const\-in\-rodata\fR 4
  .IX Item "-mno-uninit-const-in-rodata"
  .PD
! Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read\-only data section.
  This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
! .IP \fB\-mcode\-readable=\fR\fIsetting\fR 4
  .IX Item "-mcode-readable=setting"
! Specify whether GCC may generate code that reads from executable sections.
  There are three possible settings:
  .RS 4
! .IP \fB\-mcode\-readable=yes\fR 4
  .IX Item "-mcode-readable=yes"
  Instructions may freely access executable sections.  This is the
  default setting.
! .IP \fB\-mcode\-readable=pcrel\fR 4
  .IX Item "-mcode-readable=pcrel"
! MIPS16 PC\-relative load instructions can access executable sections,
  but other instructions must not do so.  This option is useful on 4KSc
  and 4KSd processors when the code TLBs have the Read Inhibit bit set.
  It is also useful on processors that can be configured to have a dual
! instruction/data SRAM interface and that, like the M4K, automatically
! redirect PC\-relative loads to the instruction RAM.
! .IP \fB\-mcode\-readable=no\fR 4
  .IX Item "-mcode-readable=no"
  Instructions must not access executable sections.  This option can be
  useful on targets that are configured to have a dual instruction/data
! SRAM interface but that (unlike the M4K) do not automatically redirect
! PC\-relative loads to the instruction RAM.
  .RE
  .RS 4
  .RE
! .IP \fB\-msplit\-addresses\fR 4
  .IX Item "-msplit-addresses"
  .PD 0
! .IP \fB\-mno\-split\-addresses\fR 4
  .IX Item "-mno-split-addresses"
  .PD
! Enable (disable) use of the \f(CW%hi()\fR and \f(CW%lo()\fR assembler
  relocation operators.  This option has been superseded by
  \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
! .IP \fB\-mexplicit\-relocs=none\fR 4
  .IX Item "-mexplicit-relocs=none"
  .PD 0
! .IP \fB\-mexplicit\-relocs=base\fR 4
  .IX Item "-mexplicit-relocs=base"
! .IP \fB\-mexplicit\-relocs=pcrel\fR 4
  .IX Item "-mexplicit-relocs=pcrel"
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
! .IP \fB\-mno\-explicit\-relocs\fR 4
  .IX Item "-mno-explicit-relocs"
  .PD
  These options control whether explicit relocs (such as \f(CW%gp_rel\fR) are used.
! The default value depends on the version of GAS when GCC itself was built.
  .Sp
! The \f(CW\*(C`base\*(C'\fR explicit\-relocs support introdunced into GAS in 2001.
! The \f(CW\*(C`pcrel\*(C'\fR explicit\-relocs support introdunced into GAS in 2014,
  which supports \f(CW%pcrel_hi\fR and \f(CW%pcrel_lo\fR.
! .IP \fB\-mcheck\-zero\-division\fR 4
  .IX Item "-mcheck-zero-division"
  .PD 0
! .IP \fB\-mno\-check\-zero\-division\fR 4
  .IX Item "-mno-check-zero-division"
  .PD
  Trap (do not trap) on integer division by zero.
  .Sp
  The default is \fB\-mcheck\-zero\-division\fR.
! .IP \fB\-mdivide\-traps\fR 4
  .IX Item "-mdivide-traps"
  .PD 0
! .IP \fB\-mdivide\-breaks\fR 4
  .IX Item "-mdivide-breaks"
  .PD
! MIPS systems check for division by zero by generating either a
  conditional trap or a break instruction.  Using traps results in
! smaller code, but is only supported on MIPS II and later.  Also, some
  versions of the Linux kernel have a bug that prevents trap from
  generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
  allow conditional traps on architectures that support them and
*************** allow conditional traps on architectures
*** 27939,27984 ****
  .Sp
  The default is usually \fB\-mdivide\-traps\fR, but this can be
  overridden at configure time using \fB\-\-with\-divide=breaks\fR.
! Divide-by-zero checks can be completely disabled using
  \&\fB\-mno\-check\-zero\-division\fR.
! .IP "\fB\-mload\-store\-pairs\fR" 4
  .IX Item "-mload-store-pairs"
  .PD 0
! .IP "\fB\-mno\-load\-store\-pairs\fR" 4
  .IX Item "-mno-load-store-pairs"
  .PD
  Enable (disable) an optimization that pairs consecutive load or store
  instructions to enable load/store bonding.  This option is enabled by
  default but only takes effect when the selected architecture is known
  to support bonding.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
! .IP "\fB\-munaligned\-access\fR" 4
  .IX Item "-munaligned-access"
! .IP "\fB\-mno\-unaligned\-access\fR" 4
  .IX Item "-mno-unaligned-access"
  .PD
! Disable (enable) direct unaligned access for \s-1MIPS\s0 Release 6.
! MIPSr6 requires load/store unaligned-access support, by hardware or
  trap&emulate.  So \fB\-mstrict\-align\fR may be needed by kernel.  The
  options \fB\-munaligned\-access\fR and \fB\-mno\-unaligned\-access\fR
! are obsoleted, and only for backward-compatible.
! .IP "\fB\-mmemcpy\fR" 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP "\fB\-mno\-memcpy\fR" 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non-trivial block
! moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
! most constant-sized copies.
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
--- 27874,27919 ----
  .Sp
  The default is usually \fB\-mdivide\-traps\fR, but this can be
  overridden at configure time using \fB\-\-with\-divide=breaks\fR.
! Divide\-by\-zero checks can be completely disabled using
  \&\fB\-mno\-check\-zero\-division\fR.
! .IP \fB\-mload\-store\-pairs\fR 4
  .IX Item "-mload-store-pairs"
  .PD 0
! .IP \fB\-mno\-load\-store\-pairs\fR 4
  .IX Item "-mno-load-store-pairs"
  .PD
  Enable (disable) an optimization that pairs consecutive load or store
  instructions to enable load/store bonding.  This option is enabled by
  default but only takes effect when the selected architecture is known
  to support bonding.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
! .IP \fB\-munaligned\-access\fR 4
  .IX Item "-munaligned-access"
! .IP \fB\-mno\-unaligned\-access\fR 4
  .IX Item "-mno-unaligned-access"
  .PD
! Disable (enable) direct unaligned access for MIPS Release 6.
! MIPSr6 requires load/store unaligned\-access support, by hardware or
  trap&emulate.  So \fB\-mstrict\-align\fR may be needed by kernel.  The
  options \fB\-munaligned\-access\fR and \fB\-mno\-unaligned\-access\fR
! are obsoleted, and only for backward\-compatible.
! .IP \fB\-mmemcpy\fR 4
  .IX Item "-mmemcpy"
  .PD 0
! .IP \fB\-mno\-memcpy\fR 4
  .IX Item "-mno-memcpy"
  .PD
! Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non\-trivial block
! moves.  The default is \fB\-mno\-memcpy\fR, which allows GCC to inline
! most constant\-sized copies.
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
*************** and callee to be in the same 256 megabyt
*** 27987,28095 ****
  .Sp
  This option has no effect on abicalls code.  The default is
  \&\fB\-mno\-long\-calls\fR.
! .IP "\fB\-mmad\fR" 4
  .IX Item "-mmad"
  .PD 0
! .IP "\fB\-mno\-mad\fR" 4
  .IX Item "-mno-mad"
  .PD
  Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
! instructions, as provided by the R4650 \s-1ISA.\s0
! .IP "\fB\-mimadd\fR" 4
  .IX Item "-mimadd"
  .PD 0
! .IP "\fB\-mno\-imadd\fR" 4
  .IX Item "-mno-imadd"
  .PD
  Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
  instructions.  The default is \fB\-mimadd\fR on architectures
  that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
  architecture where it was found to generate slower code.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Enable (disable) use of the floating-point multiply-accumulate
  instructions, when they are available.  The default is
  \&\fB\-mfused\-madd\fR.
  .Sp
! On the R8000 \s-1CPU\s0 when multiply-accumulate instructions are used,
  the intermediate product is calculated to infinite precision
! and is not subject to the \s-1FCSR\s0 Flush to Zero bit.  This may be
  undesirable in some circumstances.  On other processors the result
  is numerically identical to the equivalent computation using
  separate multiply, add, subtract and negate instructions.
! .IP "\fB\-nocpp\fR" 4
  .IX Item "-nocpp"
! Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
  assembler files (with a \fB.s\fR suffix) when assembling them.
! .IP "\fB\-mfix\-24k\fR" 4
  .IX Item "-mfix-24k"
  .PD 0
! .IP "\fB\-mno\-fix\-24k\fR" 4
  .IX Item "-mno-fix-24k"
  .PD
  Work around the 24K E48 (lost data on stores during refill) errata.
! The workarounds are implemented by the assembler rather than by \s-1GCC.\s0
! .IP "\fB\-mfix\-r4000\fR" 4
  .IX Item "-mfix-r4000"
  .PD 0
! .IP "\fB\-mno\-fix\-r4000\fR" 4
  .IX Item "-mno-fix-r4000"
  .PD
! Work around certain R4000 \s-1CPU\s0 errata:
  .RS 4
! .IP "\-" 4
! A double-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
! .IP "\-" 4
! A double-word or a variable shift may give an incorrect result if executed
  while an integer multiplication is in progress.
! .IP "\-" 4
  An integer division may give an incorrect result if started in a delay slot
  of a taken branch or a jump.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfix\-r4400\fR" 4
  .IX Item "-mfix-r4400"
  .PD 0
! .IP "\fB\-mno\-fix\-r4400\fR" 4
  .IX Item "-mno-fix-r4400"
  .PD
! Work around certain R4400 \s-1CPU\s0 errata:
  .RS 4
! .IP "\-" 4
! A double-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mfix\-r10000\fR" 4
  .IX Item "-mfix-r10000"
  .PD 0
! .IP "\fB\-mno\-fix\-r10000\fR" 4
  .IX Item "-mno-fix-r10000"
  .PD
  Work around certain R10000 errata:
  .RS 4
! .IP "\-" 4
  \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
  prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
  .RE
  .RS 4
  .Sp
  This option can only be used if the target architecture supports
! branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
  \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
  otherwise.
  .RE
! .IP "\fB\-mfix\-r5900\fR" 4
  .IX Item "-mfix-r5900"
  .PD 0
! .IP "\fB\-mno\-fix\-r5900\fR" 4
  .IX Item "-mno-fix-r5900"
  .PD
  Do not attempt to schedule the preceding instruction into the delay slot
--- 27922,28030 ----
  .Sp
  This option has no effect on abicalls code.  The default is
  \&\fB\-mno\-long\-calls\fR.
! .IP \fB\-mmad\fR 4
  .IX Item "-mmad"
  .PD 0
! .IP \fB\-mno\-mad\fR 4
  .IX Item "-mno-mad"
  .PD
  Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
! instructions, as provided by the R4650 ISA.
! .IP \fB\-mimadd\fR 4
  .IX Item "-mimadd"
  .PD 0
! .IP \fB\-mno\-imadd\fR 4
  .IX Item "-mno-imadd"
  .PD
  Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
  instructions.  The default is \fB\-mimadd\fR on architectures
  that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
  architecture where it was found to generate slower code.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Enable (disable) use of the floating\-point multiply\-accumulate
  instructions, when they are available.  The default is
  \&\fB\-mfused\-madd\fR.
  .Sp
! On the R8000 CPU when multiply\-accumulate instructions are used,
  the intermediate product is calculated to infinite precision
! and is not subject to the FCSR Flush to Zero bit.  This may be
  undesirable in some circumstances.  On other processors the result
  is numerically identical to the equivalent computation using
  separate multiply, add, subtract and negate instructions.
! .IP \fB\-nocpp\fR 4
  .IX Item "-nocpp"
! Tell the MIPS assembler to not run its preprocessor over user
  assembler files (with a \fB.s\fR suffix) when assembling them.
! .IP \fB\-mfix\-24k\fR 4
  .IX Item "-mfix-24k"
  .PD 0
! .IP \fB\-mno\-fix\-24k\fR 4
  .IX Item "-mno-fix-24k"
  .PD
  Work around the 24K E48 (lost data on stores during refill) errata.
! The workarounds are implemented by the assembler rather than by GCC.
! .IP \fB\-mfix\-r4000\fR 4
  .IX Item "-mfix-r4000"
  .PD 0
! .IP \fB\-mno\-fix\-r4000\fR 4
  .IX Item "-mno-fix-r4000"
  .PD
! Work around certain R4000 CPU errata:
  .RS 4
! .IP \- 4
! A double\-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
! .IP \- 4
! A double\-word or a variable shift may give an incorrect result if executed
  while an integer multiplication is in progress.
! .IP \- 4
  An integer division may give an incorrect result if started in a delay slot
  of a taken branch or a jump.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfix\-r4400\fR 4
  .IX Item "-mfix-r4400"
  .PD 0
! .IP \fB\-mno\-fix\-r4400\fR 4
  .IX Item "-mno-fix-r4400"
  .PD
! Work around certain R4400 CPU errata:
  .RS 4
! .IP \- 4
! A double\-word or a variable shift may give an incorrect result if executed
  immediately after starting an integer division.
  .RE
  .RS 4
  .RE
! .IP \fB\-mfix\-r10000\fR 4
  .IX Item "-mfix-r10000"
  .PD 0
! .IP \fB\-mno\-fix\-r10000\fR 4
  .IX Item "-mno-fix-r10000"
  .PD
  Work around certain R10000 errata:
  .RS 4
! .IP \- 4
  \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
  prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
  .RE
  .RS 4
  .Sp
  This option can only be used if the target architecture supports
! branch\-likely instructions.  \fB\-mfix\-r10000\fR is the default when
  \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
  otherwise.
  .RE
! .IP \fB\-mfix\-r5900\fR 4
  .IX Item "-mfix-r5900"
  .PD 0
! .IP \fB\-mno\-fix\-r5900\fR 4
  .IX Item "-mno-fix-r5900"
  .PD
  Do not attempt to schedule the preceding instruction into the delay slot
*************** of a branch instruction placed at the en
*** 28097,28122 ****
  instructions or fewer and always schedule a \f(CW\*(C`nop\*(C'\fR instruction there
  instead.  The short loop bug under certain conditions causes loops to
  execute only once or twice, due to a hardware bug in the R5900 chip.  The
! workaround is implemented by the assembler rather than by \s-1GCC.\s0
! .IP "\fB\-mfix\-rm7000\fR" 4
  .IX Item "-mfix-rm7000"
  .PD 0
! .IP "\fB\-mno\-fix\-rm7000\fR" 4
  .IX Item "-mno-fix-rm7000"
  .PD
! Work around the \s-1RM7000\s0 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by \s-1GCC.\s0
! .IP "\fB\-mfix\-vr4120\fR" 4
  .IX Item "-mfix-vr4120"
  .PD 0
! .IP "\fB\-mno\-fix\-vr4120\fR" 4
  .IX Item "-mno-fix-vr4120"
  .PD
! Work around certain \s-1VR4120\s0 errata:
  .RS 4
! .IP "\-" 4
  \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
! .IP "\-" 4
  \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
  of the operands is negative.
  .RE
--- 28032,28057 ----
  instructions or fewer and always schedule a \f(CW\*(C`nop\*(C'\fR instruction there
  instead.  The short loop bug under certain conditions causes loops to
  execute only once or twice, due to a hardware bug in the R5900 chip.  The
! workaround is implemented by the assembler rather than by GCC.
! .IP \fB\-mfix\-rm7000\fR 4
  .IX Item "-mfix-rm7000"
  .PD 0
! .IP \fB\-mno\-fix\-rm7000\fR 4
  .IX Item "-mno-fix-rm7000"
  .PD
! Work around the RM7000 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by GCC.
! .IP \fB\-mfix\-vr4120\fR 4
  .IX Item "-mfix-vr4120"
  .PD 0
! .IP \fB\-mno\-fix\-vr4120\fR 4
  .IX Item "-mno-fix-vr4120"
  .PD
! Work around certain VR4120 errata:
  .RS 4
! .IP \- 4
  \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
! .IP \- 4
  \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
  of the operands is negative.
  .RE
*************** The workarounds for the division errata
*** 28126,28189 ****
  \&\fIlibgcc.a\fR.  At present, these functions are only provided by
  the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
  .Sp
! Other \s-1VR4120\s0 errata require a \s-1NOP\s0 to be inserted between certain pairs of
! instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
  .RE
! .IP "\fB\-mfix\-vr4130\fR" 4
  .IX Item "-mfix-vr4130"
! Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by \s-1GCC,\s0
! although \s-1GCC\s0 avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
! \&\s-1VR4130\s0 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
  instructions are available instead.
! .IP "\fB\-mfix\-sb1\fR" 4
  .IX Item "-mfix-sb1"
  .PD 0
! .IP "\fB\-mno\-fix\-sb1\fR" 4
  .IX Item "-mno-fix-sb1"
  .PD
! Work around certain \s-1SB\-1 CPU\s0 core errata.
! (This flag currently works around the \s-1SB\-1\s0 revision 2
! \&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
! .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
  .IX Item "-mr10k-cache-barrier=setting"
! Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
  side effects of speculation on R10K processors.
  .Sp
  In common with many processors, the R10K tries to predict the outcome
  of a conditional branch and speculatively executes instructions from
! the \*(L"taken\*(R" branch.  It later aborts these instructions if the
  predicted outcome is wrong.  However, on the R10K, even aborted
  instructions can have side effects.
  .Sp
  This problem only affects kernel stores and, depending on the system,
! kernel loads.  As an example, a speculatively-executed store may load
  the target memory into cache and mark the cache line as dirty, even if
! the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
! same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
! data overwrites the DMA-ed data.  See the R10K processor manual
  for a full description, including other potential problems.
  .Sp
  One workaround is to insert cache barrier instructions before every memory
  access that might be speculatively executed and that might have side
  effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
! controls \s-1GCC\s0's implementation of this workaround.  It assumes that
  aborted accesses to any byte in the following regions does not have
  side effects:
  .RS 4
! .IP "1." 4
  .IX Item "1."
! the memory occupied by the current function's stack frame;
! .IP "2." 4
  .IX Item "2."
  the memory occupied by an incoming stack argument;
! .IP "3." 4
  .IX Item "3."
! the memory occupied by an object with a link-time-constant address.
  .RE
  .RS 4
  .Sp
! It is the kernel's responsibility to ensure that speculative
  accesses to these regions are indeed safe.
  .Sp
  If the input program contains a function declaration such as:
--- 28061,28124 ----
  \&\fIlibgcc.a\fR.  At present, these functions are only provided by
  the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
  .Sp
! Other VR4120 errata require a NOP to be inserted between certain pairs of
! instructions.  These errata are handled by the assembler, not by GCC itself.
  .RE
! .IP \fB\-mfix\-vr4130\fR 4
  .IX Item "-mfix-vr4130"
! Work around the VR4130 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
! workarounds are implemented by the assembler rather than by GCC,
! although GCC avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
! VR4130 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
  instructions are available instead.
! .IP \fB\-mfix\-sb1\fR 4
  .IX Item "-mfix-sb1"
  .PD 0
! .IP \fB\-mno\-fix\-sb1\fR 4
  .IX Item "-mno-fix-sb1"
  .PD
! Work around certain SB\-1 CPU core errata.
! (This flag currently works around the SB\-1 revision 2
! "F1" and "F2" floating\-point errata.)
! .IP \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR 4
  .IX Item "-mr10k-cache-barrier=setting"
! Specify whether GCC should insert cache barriers to avoid the
  side effects of speculation on R10K processors.
  .Sp
  In common with many processors, the R10K tries to predict the outcome
  of a conditional branch and speculatively executes instructions from
! the "taken" branch.  It later aborts these instructions if the
  predicted outcome is wrong.  However, on the R10K, even aborted
  instructions can have side effects.
  .Sp
  This problem only affects kernel stores and, depending on the system,
! kernel loads.  As an example, a speculatively\-executed store may load
  the target memory into cache and mark the cache line as dirty, even if
! the store itself is later aborted.  If a DMA operation writes to the
! same area of memory before the "dirty" line is flushed, the cached
! data overwrites the DMA\-ed data.  See the R10K processor manual
  for a full description, including other potential problems.
  .Sp
  One workaround is to insert cache barrier instructions before every memory
  access that might be speculatively executed and that might have side
  effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
! controls GCC\*(Aqs implementation of this workaround.  It assumes that
  aborted accesses to any byte in the following regions does not have
  side effects:
  .RS 4
! .IP 1. 4
  .IX Item "1."
! the memory occupied by the current function\*(Aqs stack frame;
! .IP 2. 4
  .IX Item "2."
  the memory occupied by an incoming stack argument;
! .IP 3. 4
  .IX Item "3."
! the memory occupied by an object with a link\-time\-constant address.
  .RE
  .RS 4
  .Sp
! It is the kernel\*(Aqs responsibility to ensure that speculative
  accesses to these regions are indeed safe.
  .Sp
  If the input program contains a function declaration such as:
*************** If the input program contains a function
*** 28193,28222 ****
  .Ve
  .Sp
  then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
! \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
! restriction for functions it compiles itself.  It expects non-GCC
! functions (such as hand-written assembly code) to do the same.
  .Sp
  The option has three forms:
! .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
  .IX Item "-mr10k-cache-barrier=load-store"
  Insert a cache barrier before a load or store that might be
  speculatively executed and that might have side effects even
  if aborted.
! .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
  .IX Item "-mr10k-cache-barrier=store"
  Insert a cache barrier before a store that might be speculatively
  executed and that might have side effects even if aborted.
! .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
  .IX Item "-mr10k-cache-barrier=none"
  Disable the insertion of cache barriers.  This is the default setting.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
  .IX Item "-mflush-func=func"
  .PD 0
! .IP "\fB\-mno\-flush\-func\fR" 4
  .IX Item "-mno-flush-func"
  .PD
  Specifies the function to call to flush the I and D caches, or to not
--- 28128,28157 ----
  .Ve
  .Sp
  then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
! \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  GCC honors this
! restriction for functions it compiles itself.  It expects non\-GCC
! functions (such as hand\-written assembly code) to do the same.
  .Sp
  The option has three forms:
! .IP \fB\-mr10k\-cache\-barrier=load\-store\fR 4
  .IX Item "-mr10k-cache-barrier=load-store"
  Insert a cache barrier before a load or store that might be
  speculatively executed and that might have side effects even
  if aborted.
! .IP \fB\-mr10k\-cache\-barrier=store\fR 4
  .IX Item "-mr10k-cache-barrier=store"
  Insert a cache barrier before a store that might be speculatively
  executed and that might have side effects even if aborted.
! .IP \fB\-mr10k\-cache\-barrier=none\fR 4
  .IX Item "-mr10k-cache-barrier=none"
  Disable the insertion of cache barriers.  This is the default setting.
  .RE
  .RS 4
  .RE
! .IP \fB\-mflush\-func=\fR\fIfunc\fR 4
  .IX Item "-mflush-func=func"
  .PD 0
! .IP \fB\-mno\-flush\-func\fR 4
  .IX Item "-mno-flush-func"
  .PD
  Specifies the function to call to flush the I and D caches, or to not
*************** call any such function.  If called, the
*** 28224,28256 ****
  arguments as the common \f(CW\*(C`_flush_func\*(C'\fR, that is, the address of the
  memory range for which the cache is being flushed, the size of the
  memory range, and the number 3 (to flush both caches).  The default
! depends on the target \s-1GCC\s0 was configured for, but commonly is either
  \&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
! .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.  A zero cost redundantly selects
  the default, which is based on the \fB\-mtune\fR setting.
! .IP "\fB\-mbranch\-likely\fR" 4
  .IX Item "-mbranch-likely"
  .PD 0
! .IP "\fB\-mno\-branch\-likely\fR" 4
  .IX Item "-mno-branch-likely"
  .PD
  Enable or disable use of Branch Likely instructions, regardless of the
  default for the selected architecture.  By default, Branch Likely
  instructions may be generated if they are supported by the selected
! architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
  and processors that implement those architectures; for those, Branch
! Likely instructions are not be generated by default because the \s-1MIPS32\s0
! and \s-1MIPS64\s0 architectures specifically deprecate their use.
! .IP "\fB\-mcompact\-branches=never\fR" 4
  .IX Item "-mcompact-branches=never"
  .PD 0
! .IP "\fB\-mcompact\-branches=optimal\fR" 4
  .IX Item "-mcompact-branches=optimal"
! .IP "\fB\-mcompact\-branches=always\fR" 4
  .IX Item "-mcompact-branches=always"
  .PD
  These options control which form of branches will be generated.  The
--- 28159,28191 ----
  arguments as the common \f(CW\*(C`_flush_func\*(C'\fR, that is, the address of the
  memory range for which the cache is being flushed, the size of the
  memory range, and the number 3 (to flush both caches).  The default
! depends on the target GCC was configured for, but commonly is either
  \&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
! .IP \fB\-mbranch\-cost=\fR\fInum\fR 4
  .IX Item "-mbranch-cost=num"
! Set the cost of branches to roughly \fInum\fR "simple" instructions.
  This cost is only a heuristic and is not guaranteed to produce
  consistent results across releases.  A zero cost redundantly selects
  the default, which is based on the \fB\-mtune\fR setting.
! .IP \fB\-mbranch\-likely\fR 4
  .IX Item "-mbranch-likely"
  .PD 0
! .IP \fB\-mno\-branch\-likely\fR 4
  .IX Item "-mno-branch-likely"
  .PD
  Enable or disable use of Branch Likely instructions, regardless of the
  default for the selected architecture.  By default, Branch Likely
  instructions may be generated if they are supported by the selected
! architecture.  An exception is for the MIPS32 and MIPS64 architectures
  and processors that implement those architectures; for those, Branch
! Likely instructions are not be generated by default because the MIPS32
! and MIPS64 architectures specifically deprecate their use.
! .IP \fB\-mcompact\-branches=never\fR 4
  .IX Item "-mcompact-branches=never"
  .PD 0
! .IP \fB\-mcompact\-branches=optimal\fR 4
  .IX Item "-mcompact-branches=optimal"
! .IP \fB\-mcompact\-branches=always\fR 4
  .IX Item "-mcompact-branches=always"
  .PD
  These options control which form of branches will be generated.  The
*************** The \fB\-mcompact\-branches=never\fR opt
*** 28260,28266 ****
  instructions will never be generated.
  .Sp
  The \fB\-mcompact\-branches=always\fR option ensures that a compact
! branch instruction will be generated if available for \s-1MIPS\s0 Release 6 onwards.
  If a compact branch instruction is not available (or pre\-R6),
  a delay slot form of the branch will be used instead.
  .Sp
--- 28195,28201 ----
  instructions will never be generated.
  .Sp
  The \fB\-mcompact\-branches=always\fR option ensures that a compact
! branch instruction will be generated if available for MIPS Release 6 onwards.
  If a compact branch instruction is not available (or pre\-R6),
  a delay slot form of the branch will be used instead.
  .Sp
*************** The behaviour for MIPS16/microMIPS may c
*** 28269,28309 ****
  since they do have some compact branch instructions.
  .Sp
  The \fB\-mcompact\-branches=optimal\fR option will cause a delay slot
! branch to be used if one is available in the current \s-1ISA\s0 and the delay
  slot is successfully filled.  If the delay slot is not filled, a compact
  branch will be chosen if one is available.
! .IP "\fB\-mfp\-exceptions\fR" 4
  .IX Item "-mfp-exceptions"
  .PD 0
! .IP "\fB\-mno\-fp\-exceptions\fR" 4
  .IX Item "-mno-fp-exceptions"
  .PD
! Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how
! \&\s-1FP\s0 instructions are scheduled for some processors.
! The default is that \s-1FP\s0 exceptions are
  enabled.
  .Sp
! For instance, on the \s-1SB\-1,\s0 if \s-1FP\s0 exceptions are disabled, and we are emitting
! 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
! \&\s-1FP\s0 pipe.
! .IP "\fB\-mvr4130\-align\fR" 4
  .IX Item "-mvr4130-align"
  .PD 0
! .IP "\fB\-mno\-vr4130\-align\fR" 4
  .IX Item "-mno-vr4130-align"
  .PD
! The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
  instructions together if the first one is 8\-byte aligned.  When this
! option is enabled, \s-1GCC\s0 aligns pairs of instructions that it
  thinks should execute in parallel.
  .Sp
! This option only has an effect when optimizing for the \s-1VR4130.\s0
  It normally makes code faster, but at the expense of making it bigger.
  It is enabled by default at optimization level \fB\-O3\fR.
! .IP "\fB\-msynci\fR" 4
  .IX Item "-msynci"
  .PD 0
! .IP "\fB\-mno\-synci\fR" 4
  .IX Item "-mno-synci"
  .PD
  Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
--- 28204,28244 ----
  since they do have some compact branch instructions.
  .Sp
  The \fB\-mcompact\-branches=optimal\fR option will cause a delay slot
! branch to be used if one is available in the current ISA and the delay
  slot is successfully filled.  If the delay slot is not filled, a compact
  branch will be chosen if one is available.
! .IP \fB\-mfp\-exceptions\fR 4
  .IX Item "-mfp-exceptions"
  .PD 0
! .IP \fB\-mno\-fp\-exceptions\fR 4
  .IX Item "-mno-fp-exceptions"
  .PD
! Specifies whether FP exceptions are enabled.  This affects how
! FP instructions are scheduled for some processors.
! The default is that FP exceptions are
  enabled.
  .Sp
! For instance, on the SB\-1, if FP exceptions are disabled, and we are emitting
! 64\-bit code, then we can use both FP pipes.  Otherwise, we can only use one
! FP pipe.
! .IP \fB\-mvr4130\-align\fR 4
  .IX Item "-mvr4130-align"
  .PD 0
! .IP \fB\-mno\-vr4130\-align\fR 4
  .IX Item "-mno-vr4130-align"
  .PD
! The VR4130 pipeline is two\-way superscalar, but can only issue two
  instructions together if the first one is 8\-byte aligned.  When this
! option is enabled, GCC aligns pairs of instructions that it
  thinks should execute in parallel.
  .Sp
! This option only has an effect when optimizing for the VR4130.
  It normally makes code faster, but at the expense of making it bigger.
  It is enabled by default at optimization level \fB\-O3\fR.
! .IP \fB\-msynci\fR 4
  .IX Item "-msynci"
  .PD 0
! .IP \fB\-mno\-synci\fR 4
  .IX Item "-mno-synci"
  .PD
  Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
*************** enabled) are generated when \f(CW\*(C`_\
*** 28312,28464 ****
  compiled.
  .Sp
  This option defaults to \fB\-mno\-synci\fR, but the default can be
! overridden by configuring \s-1GCC\s0 with \fB\-\-with\-synci\fR.
  .Sp
  When compiling code for single processor systems, it is generally safe
! to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
  does not invalidate the instruction caches on all cores and may lead
  to undefined behavior.
! .IP "\fB\-mrelax\-pic\-calls\fR" 4
  .IX Item "-mrelax-pic-calls"
  .PD 0
! .IP "\fB\-mno\-relax\-pic\-calls\fR" 4
  .IX Item "-mno-relax-pic-calls"
  .PD
! Try to turn \s-1PIC\s0 calls that are normally dispatched via register
  \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
  resolve the destination at link time and if the destination is within
  range for a direct call.
  .Sp
! \&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
  an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
  directive and \fB\-mexplicit\-relocs\fR is in effect.  With
  \&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
  assembler and the linker alone without help from the compiler.
! .IP "\fB\-mmcount\-ra\-address\fR" 4
  .IX Item "-mmcount-ra-address"
  .PD 0
! .IP "\fB\-mno\-mcount\-ra\-address\fR" 4
  .IX Item "-mno-mcount-ra-address"
  .PD
  Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
! calling function's return address.  When enabled, this option extends
! the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
  parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
  \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
  doing both of the following:
  .RS 4
! .IP "*" 4
  Returning the new address in register \f(CW$31\fR.
! .IP "*" 4
! Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
! if \fIra-address\fR is nonnull.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mno\-mcount\-ra\-address\fR.
  .RE
! .IP "\fB\-mframe\-header\-opt\fR" 4
  .IX Item "-mframe-header-opt"
  .PD 0
! .IP "\fB\-mno\-frame\-header\-opt\fR" 4
  .IX Item "-mno-frame-header-opt"
  .PD
! Enable (disable) frame header optimization in the o32 \s-1ABI.\s0  When using the
! o32 \s-1ABI,\s0 calling functions will allocate 16 bytes on the stack for the called
  function to write out register arguments.  When enabled, this optimization
  will suppress the allocation of the frame header if it can be determined that
  it is unused.
  .Sp
  This optimization is off by default at all optimization levels.
! .IP "\fB\-mlxc1\-sxc1\fR" 4
  .IX Item "-mlxc1-sxc1"
  .PD 0
! .IP "\fB\-mno\-lxc1\-sxc1\fR" 4
  .IX Item "-mno-lxc1-sxc1"
  .PD
  When applicable, enable (disable) the generation of \f(CW\*(C`lwxc1\*(C'\fR,
  \&\f(CW\*(C`swxc1\*(C'\fR, \f(CW\*(C`ldxc1\*(C'\fR, \f(CW\*(C`sdxc1\*(C'\fR instructions.  Enabled by default.
! .IP "\fB\-mmadd4\fR" 4
  .IX Item "-mmadd4"
  .PD 0
! .IP "\fB\-mno\-madd4\fR" 4
  .IX Item "-mno-madd4"
  .PD
  When applicable, enable (disable) the generation of 4\-operand \f(CW\*(C`madd.s\*(C'\fR,
  \&\f(CW\*(C`madd.d\*(C'\fR and related instructions.  Enabled by default.
  .PP
! \fI\s-1MMIX\s0 Options\fR
  .IX Subsection "MMIX Options"
  .PP
! These options are defined for the \s-1MMIX:\s0
! .IP "\fB\-mlibfuncs\fR" 4
  .IX Item "-mlibfuncs"
  .PD 0
! .IP "\fB\-mno\-libfuncs\fR" 4
  .IX Item "-mno-libfuncs"
  .PD
  Specify that intrinsic library functions are being compiled, passing all
  values in registers, no matter the size.
! .IP "\fB\-mepsilon\fR" 4
  .IX Item "-mepsilon"
  .PD 0
! .IP "\fB\-mno\-epsilon\fR" 4
  .IX Item "-mno-epsilon"
  .PD
! Generate floating-point comparison instructions that compare with respect
  to the \f(CW\*(C`rE\*(C'\fR epsilon register.
! .IP "\fB\-mabi=mmixware\fR" 4
  .IX Item "-mabi=mmixware"
  .PD 0
! .IP "\fB\-mabi=gnu\fR" 4
  .IX Item "-mabi=gnu"
  .PD
  Generate code that passes function parameters and return values that (in
  the called function) are seen as registers \f(CW$0\fR and up, as opposed to
! the \s-1GNU ABI\s0 which uses global registers \f(CW$231\fR and up.
! .IP "\fB\-mzero\-extend\fR" 4
  .IX Item "-mzero-extend"
  .PD 0
! .IP "\fB\-mno\-zero\-extend\fR" 4
  .IX Item "-mno-zero-extend"
  .PD
  When reading data from memory in sizes shorter than 64 bits, use (do not
! use) zero-extending load instructions by default, rather than
! sign-extending ones.
! .IP "\fB\-mknuthdiv\fR" 4
  .IX Item "-mknuthdiv"
  .PD 0
! .IP "\fB\-mno\-knuthdiv\fR" 4
  .IX Item "-mno-knuthdiv"
  .PD
  Make the result of a division yielding a remainder have the same sign as
  the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
  remainder follows the sign of the dividend.  Both methods are
  arithmetically valid, the latter being almost exclusively used.
! .IP "\fB\-mtoplevel\-symbols\fR" 4
  .IX Item "-mtoplevel-symbols"
  .PD 0
! .IP "\fB\-mno\-toplevel\-symbols\fR" 4
  .IX Item "-mno-toplevel-symbols"
  .PD
  Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
  code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
! .IP "\fB\-melf\fR" 4
  .IX Item "-melf"
! Generate an executable in the \s-1ELF\s0 format, rather than the default
  \&\fBmmo\fR format used by the \fBmmix\fR simulator.
! .IP "\fB\-mbranch\-predict\fR" 4
  .IX Item "-mbranch-predict"
  .PD 0
! .IP "\fB\-mno\-branch\-predict\fR" 4
  .IX Item "-mno-branch-predict"
  .PD
! Use (do not use) the probable-branch instructions, when static branch
  prediction indicates a probable branch.
! .IP "\fB\-mbase\-addresses\fR" 4
  .IX Item "-mbase-addresses"
  .PD 0
! .IP "\fB\-mno\-base\-addresses\fR" 4
  .IX Item "-mno-base-addresses"
  .PD
  Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
--- 28247,28399 ----
  compiled.
  .Sp
  This option defaults to \fB\-mno\-synci\fR, but the default can be
! overridden by configuring GCC with \fB\-\-with\-synci\fR.
  .Sp
  When compiling code for single processor systems, it is generally safe
! to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi\-core (SMP) systems, it
  does not invalidate the instruction caches on all cores and may lead
  to undefined behavior.
! .IP \fB\-mrelax\-pic\-calls\fR 4
  .IX Item "-mrelax-pic-calls"
  .PD 0
! .IP \fB\-mno\-relax\-pic\-calls\fR 4
  .IX Item "-mno-relax-pic-calls"
  .PD
! Try to turn PIC calls that are normally dispatched via register
  \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
  resolve the destination at link time and if the destination is within
  range for a direct call.
  .Sp
! \&\fB\-mrelax\-pic\-calls\fR is the default if GCC was configured to use
  an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
  directive and \fB\-mexplicit\-relocs\fR is in effect.  With
  \&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
  assembler and the linker alone without help from the compiler.
! .IP \fB\-mmcount\-ra\-address\fR 4
  .IX Item "-mmcount-ra-address"
  .PD 0
! .IP \fB\-mno\-mcount\-ra\-address\fR 4
  .IX Item "-mno-mcount-ra-address"
  .PD
  Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
! calling function\*(Aqs return address.  When enabled, this option extends
! the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra\-address\fR
  parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
  \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
  doing both of the following:
  .RS 4
! .IP * 4
  Returning the new address in register \f(CW$31\fR.
! .IP * 4
! Storing the new address in \f(CW\*(C`*\fR\f(CIra\-address\fR\f(CW\*(C'\fR,
! if \fIra\-address\fR is nonnull.
  .RE
  .RS 4
  .Sp
  The default is \fB\-mno\-mcount\-ra\-address\fR.
  .RE
! .IP \fB\-mframe\-header\-opt\fR 4
  .IX Item "-mframe-header-opt"
  .PD 0
! .IP \fB\-mno\-frame\-header\-opt\fR 4
  .IX Item "-mno-frame-header-opt"
  .PD
! Enable (disable) frame header optimization in the o32 ABI.  When using the
! o32 ABI, calling functions will allocate 16 bytes on the stack for the called
  function to write out register arguments.  When enabled, this optimization
  will suppress the allocation of the frame header if it can be determined that
  it is unused.
  .Sp
  This optimization is off by default at all optimization levels.
! .IP \fB\-mlxc1\-sxc1\fR 4
  .IX Item "-mlxc1-sxc1"
  .PD 0
! .IP \fB\-mno\-lxc1\-sxc1\fR 4
  .IX Item "-mno-lxc1-sxc1"
  .PD
  When applicable, enable (disable) the generation of \f(CW\*(C`lwxc1\*(C'\fR,
  \&\f(CW\*(C`swxc1\*(C'\fR, \f(CW\*(C`ldxc1\*(C'\fR, \f(CW\*(C`sdxc1\*(C'\fR instructions.  Enabled by default.
! .IP \fB\-mmadd4\fR 4
  .IX Item "-mmadd4"
  .PD 0
! .IP \fB\-mno\-madd4\fR 4
  .IX Item "-mno-madd4"
  .PD
  When applicable, enable (disable) the generation of 4\-operand \f(CW\*(C`madd.s\*(C'\fR,
  \&\f(CW\*(C`madd.d\*(C'\fR and related instructions.  Enabled by default.
  .PP
! \fIMMIX Options\fR
  .IX Subsection "MMIX Options"
  .PP
! These options are defined for the MMIX:
! .IP \fB\-mlibfuncs\fR 4
  .IX Item "-mlibfuncs"
  .PD 0
! .IP \fB\-mno\-libfuncs\fR 4
  .IX Item "-mno-libfuncs"
  .PD
  Specify that intrinsic library functions are being compiled, passing all
  values in registers, no matter the size.
! .IP \fB\-mepsilon\fR 4
  .IX Item "-mepsilon"
  .PD 0
! .IP \fB\-mno\-epsilon\fR 4
  .IX Item "-mno-epsilon"
  .PD
! Generate floating\-point comparison instructions that compare with respect
  to the \f(CW\*(C`rE\*(C'\fR epsilon register.
! .IP \fB\-mabi=mmixware\fR 4
  .IX Item "-mabi=mmixware"
  .PD 0
! .IP \fB\-mabi=gnu\fR 4
  .IX Item "-mabi=gnu"
  .PD
  Generate code that passes function parameters and return values that (in
  the called function) are seen as registers \f(CW$0\fR and up, as opposed to
! the GNU ABI which uses global registers \f(CW$231\fR and up.
! .IP \fB\-mzero\-extend\fR 4
  .IX Item "-mzero-extend"
  .PD 0
! .IP \fB\-mno\-zero\-extend\fR 4
  .IX Item "-mno-zero-extend"
  .PD
  When reading data from memory in sizes shorter than 64 bits, use (do not
! use) zero\-extending load instructions by default, rather than
! sign\-extending ones.
! .IP \fB\-mknuthdiv\fR 4
  .IX Item "-mknuthdiv"
  .PD 0
! .IP \fB\-mno\-knuthdiv\fR 4
  .IX Item "-mno-knuthdiv"
  .PD
  Make the result of a division yielding a remainder have the same sign as
  the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
  remainder follows the sign of the dividend.  Both methods are
  arithmetically valid, the latter being almost exclusively used.
! .IP \fB\-mtoplevel\-symbols\fR 4
  .IX Item "-mtoplevel-symbols"
  .PD 0
! .IP \fB\-mno\-toplevel\-symbols\fR 4
  .IX Item "-mno-toplevel-symbols"
  .PD
  Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
  code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
! .IP \fB\-melf\fR 4
  .IX Item "-melf"
! Generate an executable in the ELF format, rather than the default
  \&\fBmmo\fR format used by the \fBmmix\fR simulator.
! .IP \fB\-mbranch\-predict\fR 4
  .IX Item "-mbranch-predict"
  .PD 0
! .IP \fB\-mno\-branch\-predict\fR 4
  .IX Item "-mno-branch-predict"
  .PD
! Use (do not use) the probable\-branch instructions, when static branch
  prediction indicates a probable branch.
! .IP \fB\-mbase\-addresses\fR 4
  .IX Item "-mbase-addresses"
  .PD 0
! .IP \fB\-mno\-base\-addresses\fR 4
  .IX Item "-mno-base-addresses"
  .PD
  Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
*************** to 255 from the value held in the regist
*** 28469,28603 ****
  and fast code, but the number of different data items that can be
  addressed is limited.  This means that a program that uses lots of static
  data may require \fB\-mno\-base\-addresses\fR.
! .IP "\fB\-msingle\-exit\fR" 4
  .IX Item "-msingle-exit"
  .PD 0
! .IP "\fB\-mno\-single\-exit\fR" 4
  .IX Item "-mno-single-exit"
  .PD
  Force (do not force) generated code to have a single exit point in each
  function.
  .PP
! \fI\s-1MN10300\s0 Options\fR
  .IX Subsection "MN10300 Options"
  .PP
! These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
! .IP "\fB\-mmult\-bug\fR" 4
  .IX Item "-mmult-bug"
! Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
  processors.  This is the default.
! .IP "\fB\-mno\-mult\-bug\fR" 4
  .IX Item "-mno-mult-bug"
  Do not generate code to avoid bugs in the multiply instructions for the
! \&\s-1MN10300\s0 processors.
! .IP "\fB\-mam33\fR" 4
  .IX Item "-mam33"
! Generate code using features specific to the \s-1AM33\s0 processor.
! .IP "\fB\-mno\-am33\fR" 4
  .IX Item "-mno-am33"
! Do not generate code using features specific to the \s-1AM33\s0 processor.  This
  is the default.
! .IP "\fB\-mam33\-2\fR" 4
  .IX Item "-mam33-2"
! Generate code using features specific to the \s-1AM33/2.0\s0 processor.
! .IP "\fB\-mam34\fR" 4
  .IX Item "-mam34"
! Generate code using features specific to the \s-1AM34\s0 processor.
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Use the timing characteristics of the indicated \s-1CPU\s0 type when
  scheduling instructions.  This does not change the targeted processor
! type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
  \&\fBam33\-2\fR or \fBam34\fR.
! .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
  .IX Item "-mreturn-pointer-on-d0"
  When generating a function that returns a pointer, return the pointer
  in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
  only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
  result in errors.  Note that this option is on by default; use
  \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
! .IP "\fB\-mno\-crt0\fR" 4
  .IX Item "-mno-crt0"
! Do not link in the C run-time initialization object file.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Indicate to the linker that it should perform a relaxation optimization pass
  to shorten branches, calls and absolute memory addresses.  This option only
  has an effect when used on the command line for the final link step.
  .Sp
  This option makes symbolic debugging impossible.
! .IP "\fB\-mliw\fR" 4
  .IX Item "-mliw"
  Allow the compiler to generate \fILong Instruction Word\fR
! instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
! .IP "\fB\-mno\-liw\fR" 4
  .IX Item "-mno-liw"
  Do not allow the compiler to generate \fILong Instruction Word\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
! .IP "\fB\-msetlb\fR" 4
  .IX Item "-msetlb"
! Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
! instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
! .IP "\fB\-mno\-setlb\fR" 4
  .IX Item "-mno-setlb"
! Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
  .PP
  \fIMoxie Options\fR
  .IX Subsection "Moxie Options"
! .IP "\fB\-meb\fR" 4
  .IX Item "-meb"
! Generate big-endian code.  This is the default for \fBmoxie\-*\-*\fR
  configurations.
! .IP "\fB\-mel\fR" 4
  .IX Item "-mel"
! Generate little-endian code.
! .IP "\fB\-mmul.x\fR" 4
  .IX Item "-mmul.x"
  Generate mul.x and umul.x instructions.  This is the default for
  \&\fBmoxiebox\-*\-*\fR configurations.
! .IP "\fB\-mno\-crt0\fR" 4
  .IX Item "-mno-crt0"
! Do not link in the C run-time initialization object file.
  .PP
! \fI\s-1MSP430\s0 Options\fR
  .IX Subsection "MSP430 Options"
  .PP
! These options are defined for the \s-1MSP430:\s0
! .IP "\fB\-masm\-hex\fR" 4
  .IX Item "-masm-hex"
  Force assembly output to always use hex constants.  Normally such
  constants are signed decimals, but this option is available for
  testsuite and/or aesthetic purposes.
! .IP "\fB\-mmcu=\fR" 4
  .IX Item "-mmcu="
! Select the \s-1MCU\s0 to target.  This is used to create a C preprocessor
! symbol based upon the \s-1MCU\s0 name, converted to upper case and pre\- and
! post-fixed with \fB_\|_\fR.  This in turn is used by the
! \&\fImsp430.h\fR header file to select an MCU-specific supplementary
  header file.
  .Sp
! The option also sets the \s-1ISA\s0 to use.  If the \s-1MCU\s0 name is one that is
! known to only support the 430 \s-1ISA\s0 then that is selected, otherwise the
! 430X \s-1ISA\s0 is selected.  A generic \s-1MCU\s0 name of \fBmsp430\fR can also be
! used to select the 430 \s-1ISA.\s0  Similarly the generic \fBmsp430x\fR \s-1MCU\s0
! name selects the 430X \s-1ISA.\s0
  .Sp
! In addition an MCU-specific linker script is added to the linker
! command line.  The script's name is the name of the \s-1MCU\s0 with
  \&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
  command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
  cause the linker to search for a script called \fIxxx.ld\fR.
  .Sp
! The \s-1ISA\s0 and hardware multiply supported for the different MCUs is hard-coded
! into \s-1GCC.\s0  However, an external \fBdevices.csv\fR file can be used to
! extend device support beyond those that have been hard-coded.
  .Sp
! \&\s-1GCC\s0 searches for the \fBdevices.csv\fR file using the following methods in the
  given precedence order, where the first method takes precendence over the
  second which takes precedence over the third.
  .RS 4
--- 28404,28538 ----
  and fast code, but the number of different data items that can be
  addressed is limited.  This means that a program that uses lots of static
  data may require \fB\-mno\-base\-addresses\fR.
! .IP \fB\-msingle\-exit\fR 4
  .IX Item "-msingle-exit"
  .PD 0
! .IP \fB\-mno\-single\-exit\fR 4
  .IX Item "-mno-single-exit"
  .PD
  Force (do not force) generated code to have a single exit point in each
  function.
  .PP
! \fIMN10300 Options\fR
  .IX Subsection "MN10300 Options"
  .PP
! These \fB\-m\fR options are defined for Matsushita MN10300 architectures:
! .IP \fB\-mmult\-bug\fR 4
  .IX Item "-mmult-bug"
! Generate code to avoid bugs in the multiply instructions for the MN10300
  processors.  This is the default.
! .IP \fB\-mno\-mult\-bug\fR 4
  .IX Item "-mno-mult-bug"
  Do not generate code to avoid bugs in the multiply instructions for the
! MN10300 processors.
! .IP \fB\-mam33\fR 4
  .IX Item "-mam33"
! Generate code using features specific to the AM33 processor.
! .IP \fB\-mno\-am33\fR 4
  .IX Item "-mno-am33"
! Do not generate code using features specific to the AM33 processor.  This
  is the default.
! .IP \fB\-mam33\-2\fR 4
  .IX Item "-mam33-2"
! Generate code using features specific to the AM33/2.0 processor.
! .IP \fB\-mam34\fR 4
  .IX Item "-mam34"
! Generate code using features specific to the AM34 processor.
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Use the timing characteristics of the indicated CPU type when
  scheduling instructions.  This does not change the targeted processor
! type.  The CPU type must be one of \fBmn10300\fR, \fBam33\fR,
  \&\fBam33\-2\fR or \fBam34\fR.
! .IP \fB\-mreturn\-pointer\-on\-d0\fR 4
  .IX Item "-mreturn-pointer-on-d0"
  When generating a function that returns a pointer, return the pointer
  in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
  only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
  result in errors.  Note that this option is on by default; use
  \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
! .IP \fB\-mno\-crt0\fR 4
  .IX Item "-mno-crt0"
! Do not link in the C run\-time initialization object file.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Indicate to the linker that it should perform a relaxation optimization pass
  to shorten branches, calls and absolute memory addresses.  This option only
  has an effect when used on the command line for the final link step.
  .Sp
  This option makes symbolic debugging impossible.
! .IP \fB\-mliw\fR 4
  .IX Item "-mliw"
  Allow the compiler to generate \fILong Instruction Word\fR
! instructions if the target is the \fBAM33\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
! .IP \fB\-mno\-liw\fR 4
  .IX Item "-mno-liw"
  Do not allow the compiler to generate \fILong Instruction Word\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
! .IP \fB\-msetlb\fR 4
  .IX Item "-msetlb"
! Allow the compiler to generate the \fISETLB\fR and \fILcc\fR
! instructions if the target is the \fBAM33\fR or later.  This is the
  default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
! .IP \fB\-mno\-setlb\fR 4
  .IX Item "-mno-setlb"
! Do not allow the compiler to generate \fISETLB\fR or \fILcc\fR
  instructions.  This option defines the preprocessor macro
  \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
  .PP
  \fIMoxie Options\fR
  .IX Subsection "Moxie Options"
! .IP \fB\-meb\fR 4
  .IX Item "-meb"
! Generate big\-endian code.  This is the default for \fBmoxie\-*\-*\fR
  configurations.
! .IP \fB\-mel\fR 4
  .IX Item "-mel"
! Generate little\-endian code.
! .IP \fB\-mmul.x\fR 4
  .IX Item "-mmul.x"
  Generate mul.x and umul.x instructions.  This is the default for
  \&\fBmoxiebox\-*\-*\fR configurations.
! .IP \fB\-mno\-crt0\fR 4
  .IX Item "-mno-crt0"
! Do not link in the C run\-time initialization object file.
  .PP
! \fIMSP430 Options\fR
  .IX Subsection "MSP430 Options"
  .PP
! These options are defined for the MSP430:
! .IP \fB\-masm\-hex\fR 4
  .IX Item "-masm-hex"
  Force assembly output to always use hex constants.  Normally such
  constants are signed decimals, but this option is available for
  testsuite and/or aesthetic purposes.
! .IP \fB\-mmcu=\fR 4
  .IX Item "-mmcu="
! Select the MCU to target.  This is used to create a C preprocessor
! symbol based upon the MCU name, converted to upper case and pre\- and
! post\-fixed with \fB_\|_\fR.  This in turn is used by the
! \&\fImsp430.h\fR header file to select an MCU\-specific supplementary
  header file.
  .Sp
! The option also sets the ISA to use.  If the MCU name is one that is
! known to only support the 430 ISA then that is selected, otherwise the
! 430X ISA is selected.  A generic MCU name of \fBmsp430\fR can also be
! used to select the 430 ISA.  Similarly the generic \fBmsp430x\fR MCU
! name selects the 430X ISA.
  .Sp
! In addition an MCU\-specific linker script is added to the linker
! command line.  The script\*(Aqs name is the name of the MCU with
  \&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
  command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
  cause the linker to search for a script called \fIxxx.ld\fR.
  .Sp
! The ISA and hardware multiply supported for the different MCUs is hard\-coded
! into GCC.  However, an external \fBdevices.csv\fR file can be used to
! extend device support beyond those that have been hard\-coded.
  .Sp
! GCC searches for the \fBdevices.csv\fR file using the following methods in the
  given precedence order, where the first method takes precendence over the
  second which takes precedence over the third.
  .RS 4
*************** second which takes precedence over the t
*** 28606,28675 ****
  .IX Item "Include path specified with -I and -L"
  \&\fBdevices.csv\fR will be searched for in each of the directories specified by
  include paths and linker library search paths.
! .IP "Path specified by the environment variable \fB\s-1MSP430_GCC_INCLUDE_DIR\s0\fR" 4
  .IX Item "Path specified by the environment variable MSP430_GCC_INCLUDE_DIR"
  Define the value of the global environment variable
! \&\fB\s-1MSP430_GCC_INCLUDE_DIR\s0\fR
! to the full path to the directory containing devices.csv, and \s-1GCC\s0 will search
  this directory for devices.csv.  If devices.csv is found, this directory will
  also be registered as an include path, and linker library path.  Header files
  and linker scripts in this directory can therefore be used without manually
  specifying \f(CW\*(C`\-I\*(C'\fR and \f(CW\*(C`\-L\*(C'\fR on the command line.
  .IP "The \fBmsp430\-elf{,bare}/include/devices\fR directory" 4
  .IX Item "The msp430-elf{,bare}/include/devices directory"
! Finally, \s-1GCC\s0 will examine \fBmsp430\-elf{,bare}/include/devices\fR from the
  toolchain root directory.  This directory does not exist in a default
  installation, but if the user has created it and copied \fBdevices.csv\fR
! there, then the \s-1MCU\s0 data will be read.  As above, this directory will
  also be registered as an include path, and linker library path.
  .RE
  .RS 4
  .Sp
  If none of the above search methods find \fBdevices.csv\fR, then the
! hard-coded \s-1MCU\s0 data is used.
  .RE
! .IP "\fB\-mwarn\-mcu\fR" 4
  .IX Item "-mwarn-mcu"
  .PD 0
! .IP "\fB\-mno\-warn\-mcu\fR" 4
  .IX Item "-mno-warn-mcu"
  .PD
  This option enables or disables warnings about conflicts between the
! \&\s-1MCU\s0 name specified by the \fB\-mmcu\fR option and the \s-1ISA\s0 set by the
  \&\fB\-mcpu\fR option and/or the hardware multiply support set by the
  \&\fB\-mhwmult\fR option.  It also toggles warnings about unrecognized
! \&\s-1MCU\s0 names.  This option is on by default.
! .IP "\fB\-mcpu=\fR" 4
  .IX Item "-mcpu="
! Specifies the \s-1ISA\s0 to use.  Accepted values are \fBmsp430\fR,
  \&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
! \&\fB\-mmcu=\fR option should be used to select the \s-1ISA.\s0
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Link to the simulator runtime libraries and linker script.  Overrides
  any scripts that would be selected by the \fB\-mmcu=\fR option.
! .IP "\fB\-mlarge\fR" 4
  .IX Item "-mlarge"
! Use large-model addressing (20\-bit pointers, 20\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP "\fB\-msmall\fR" 4
  .IX Item "-msmall"
! Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  This option is passed to the assembler and linker, and allows the
  linker to perform certain optimizations that cannot be done until
  the final link.
! .IP "\fBmhwmult=\fR" 4
  .IX Item "mhwmult="
  Describes the type of hardware multiply supported by the target.
  Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
  for the original 16\-bit\-only multiply supported by early MCUs.
  \&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
  \&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
! A value of \fBauto\fR can also be given.  This tells \s-1GCC\s0 to deduce
! the hardware multiply support based upon the \s-1MCU\s0 name provided by the
  \&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified or if
! the \s-1MCU\s0 name is not recognized then no hardware multiply support is
  assumed.  \f(CW\*(C`auto\*(C'\fR is the default setting.
  .Sp
  Hardware multiplies are normally performed by calling a library
--- 28541,28610 ----
  .IX Item "Include path specified with -I and -L"
  \&\fBdevices.csv\fR will be searched for in each of the directories specified by
  include paths and linker library search paths.
! .IP "Path specified by the environment variable \fBMSP430_GCC_INCLUDE_DIR\fR" 4
  .IX Item "Path specified by the environment variable MSP430_GCC_INCLUDE_DIR"
  Define the value of the global environment variable
! \&\fBMSP430_GCC_INCLUDE_DIR\fR
! to the full path to the directory containing devices.csv, and GCC will search
  this directory for devices.csv.  If devices.csv is found, this directory will
  also be registered as an include path, and linker library path.  Header files
  and linker scripts in this directory can therefore be used without manually
  specifying \f(CW\*(C`\-I\*(C'\fR and \f(CW\*(C`\-L\*(C'\fR on the command line.
  .IP "The \fBmsp430\-elf{,bare}/include/devices\fR directory" 4
  .IX Item "The msp430-elf{,bare}/include/devices directory"
! Finally, GCC will examine \fBmsp430\-elf{,bare}/include/devices\fR from the
  toolchain root directory.  This directory does not exist in a default
  installation, but if the user has created it and copied \fBdevices.csv\fR
! there, then the MCU data will be read.  As above, this directory will
  also be registered as an include path, and linker library path.
  .RE
  .RS 4
  .Sp
  If none of the above search methods find \fBdevices.csv\fR, then the
! hard\-coded MCU data is used.
  .RE
! .IP \fB\-mwarn\-mcu\fR 4
  .IX Item "-mwarn-mcu"
  .PD 0
! .IP \fB\-mno\-warn\-mcu\fR 4
  .IX Item "-mno-warn-mcu"
  .PD
  This option enables or disables warnings about conflicts between the
! MCU name specified by the \fB\-mmcu\fR option and the ISA set by the
  \&\fB\-mcpu\fR option and/or the hardware multiply support set by the
  \&\fB\-mhwmult\fR option.  It also toggles warnings about unrecognized
! MCU names.  This option is on by default.
! .IP \fB\-mcpu=\fR 4
  .IX Item "-mcpu="
! Specifies the ISA to use.  Accepted values are \fBmsp430\fR,
  \&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
! \&\fB\-mmcu=\fR option should be used to select the ISA.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Link to the simulator runtime libraries and linker script.  Overrides
  any scripts that would be selected by the \fB\-mmcu=\fR option.
! .IP \fB\-mlarge\fR 4
  .IX Item "-mlarge"
! Use large\-model addressing (20\-bit pointers, 20\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP \fB\-msmall\fR 4
  .IX Item "-msmall"
! Use small\-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  This option is passed to the assembler and linker, and allows the
  linker to perform certain optimizations that cannot be done until
  the final link.
! .IP \fBmhwmult=\fR 4
  .IX Item "mhwmult="
  Describes the type of hardware multiply supported by the target.
  Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
  for the original 16\-bit\-only multiply supported by early MCUs.
  \&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
  \&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
! A value of \fBauto\fR can also be given.  This tells GCC to deduce
! the hardware multiply support based upon the MCU name provided by the
  \&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified or if
! the MCU name is not recognized then no hardware multiply support is
  assumed.  \f(CW\*(C`auto\*(C'\fR is the default setting.
  .Sp
  Hardware multiplies are normally performed by calling a library
*************** inline.  This makes for bigger, but fast
*** 28680,28704 ****
  The hardware multiply routines disable interrupts whilst running and
  restore the previous interrupt state when they finish.  This makes
  them safe to use inside interrupt handlers as well as in normal code.
! .IP "\fB\-minrt\fR" 4
  .IX Item "-minrt"
  Enable the use of a minimum runtime environment \- no static
! initializers or constructors.  This is intended for memory-constrained
  devices.  The compiler includes special symbols in some objects
  that tell the linker and runtime which code fragments are required.
! .IP "\fB\-mtiny\-printf\fR" 4
  .IX Item "-mtiny-printf"
  Enable reduced code size \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`puts\*(C'\fR library functions.
  The \fBtiny\fR implementations of these functions are not reentrant, so
! must be used with caution in multi-threaded applications.
  .Sp
  Support for streams has been removed and the string to be printed will
  always be sent to stdout via the \f(CW\*(C`write\*(C'\fR syscall.  The string is not
  buffered before it is sent to write.
  .Sp
! This option requires Newlib Nano \s-1IO,\s0 so \s-1GCC\s0 must be configured with
  \&\fB\-\-enable\-newlib\-nano\-formatted\-io\fR.
! .IP "\fB\-mmax\-inline\-shift=\fR" 4
  .IX Item "-mmax-inline-shift="
  This option takes an integer between 0 and 64 inclusive, and sets
  the maximum number of inline shift instructions which should be emitted to
--- 28615,28639 ----
  The hardware multiply routines disable interrupts whilst running and
  restore the previous interrupt state when they finish.  This makes
  them safe to use inside interrupt handlers as well as in normal code.
! .IP \fB\-minrt\fR 4
  .IX Item "-minrt"
  Enable the use of a minimum runtime environment \- no static
! initializers or constructors.  This is intended for memory\-constrained
  devices.  The compiler includes special symbols in some objects
  that tell the linker and runtime which code fragments are required.
! .IP \fB\-mtiny\-printf\fR 4
  .IX Item "-mtiny-printf"
  Enable reduced code size \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`puts\*(C'\fR library functions.
  The \fBtiny\fR implementations of these functions are not reentrant, so
! must be used with caution in multi\-threaded applications.
  .Sp
  Support for streams has been removed and the string to be printed will
  always be sent to stdout via the \f(CW\*(C`write\*(C'\fR syscall.  The string is not
  buffered before it is sent to write.
  .Sp
! This option requires Newlib Nano IO, so GCC must be configured with
  \&\fB\-\-enable\-newlib\-nano\-formatted\-io\fR.
! .IP \fB\-mmax\-inline\-shift=\fR 4
  .IX Item "-mmax-inline-shift="
  This option takes an integer between 0 and 64 inclusive, and sets
  the maximum number of inline shift instructions which should be emitted to
*************** perform a shift operation by a constant
*** 28706,28719 ****
  exceeded, an mspabi helper function is used instead.  The default value is 4.
  .Sp
  This only affects cases where a shift by multiple positions cannot be
! completed with a single instruction (e.g. all shifts >1 on the 430 \s-1ISA\s0).
  .Sp
  Shifts of a 32\-bit value are at least twice as costly, so the value passed for
  this option is divided by 2 and the resulting value used instead.
! .IP "\fB\-mcode\-region=\fR" 4
  .IX Item "-mcode-region="
  .PD 0
! .IP "\fB\-mdata\-region=\fR" 4
  .IX Item "-mdata-region="
  .PD
  These options tell the compiler where to place functions and data that
--- 28641,28654 ----
  exceeded, an mspabi helper function is used instead.  The default value is 4.
  .Sp
  This only affects cases where a shift by multiple positions cannot be
! completed with a single instruction (e.g. all shifts >1 on the 430 ISA).
  .Sp
  Shifts of a 32\-bit value are at least twice as costly, so the value passed for
  this option is divided by 2 and the resulting value used instead.
! .IP \fB\-mcode\-region=\fR 4
  .IX Item "-mcode-region="
  .PD 0
! .IP \fB\-mdata\-region=\fR 4
  .IX Item "-mdata-region="
  .PD
  These options tell the compiler where to place functions and data that
*************** like the corresponding attribute.  The f
*** 28724,28881 ****
  \&\f(CW\*(C`any\*(C'\fR \- is the default.  It leaves placement entirely up to the
  linker script and how it assigns the standard sections
  (\f(CW\*(C`.text\*(C'\fR, \f(CW\*(C`.data\*(C'\fR, etc) to the memory regions.
! .IP "\fB\-msilicon\-errata=\fR" 4
  .IX Item "-msilicon-errata="
  This option passes on a request to assembler to enable the fixes for
  the named silicon errata.
! .IP "\fB\-msilicon\-errata\-warn=\fR" 4
  .IX Item "-msilicon-errata-warn="
  This option passes on a request to the assembler to enable warning
  messages when a silicon errata might need to be applied.
! .IP "\fB\-mwarn\-devices\-csv\fR" 4
  .IX Item "-mwarn-devices-csv"
  .PD 0
! .IP "\fB\-mno\-warn\-devices\-csv\fR" 4
  .IX Item "-mno-warn-devices-csv"
  .PD
  Warn if \fBdevices.csv\fR is not found or there are problem parsing it
  (default: on).
  .PP
! \fI\s-1NDS32\s0 Options\fR
  .IX Subsection "NDS32 Options"
  .PP
! These options are defined for \s-1NDS32\s0 implementations:
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate code in big-endian mode.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate code in little-endian mode.
! .IP "\fB\-mreduced\-regs\fR" 4
  .IX Item "-mreduced-regs"
! Use reduced-set registers for register allocation.
! .IP "\fB\-mfull\-regs\fR" 4
  .IX Item "-mfull-regs"
! Use full-set registers for register allocation.
! .IP "\fB\-mcmov\fR" 4
  .IX Item "-mcmov"
  Generate conditional move instructions.
! .IP "\fB\-mno\-cmov\fR" 4
  .IX Item "-mno-cmov"
  Do not generate conditional move instructions.
! .IP "\fB\-mext\-perf\fR" 4
  .IX Item "-mext-perf"
  Generate performance extension instructions.
! .IP "\fB\-mno\-ext\-perf\fR" 4
  .IX Item "-mno-ext-perf"
  Do not generate performance extension instructions.
! .IP "\fB\-mext\-perf2\fR" 4
  .IX Item "-mext-perf2"
  Generate performance extension 2 instructions.
! .IP "\fB\-mno\-ext\-perf2\fR" 4
  .IX Item "-mno-ext-perf2"
  Do not generate performance extension 2 instructions.
! .IP "\fB\-mext\-string\fR" 4
  .IX Item "-mext-string"
  Generate string extension instructions.
! .IP "\fB\-mno\-ext\-string\fR" 4
  .IX Item "-mno-ext-string"
  Do not generate string extension instructions.
! .IP "\fB\-mv3push\fR" 4
  .IX Item "-mv3push"
  Generate v3 push25/pop25 instructions.
! .IP "\fB\-mno\-v3push\fR" 4
  .IX Item "-mno-v3push"
  Do not generate v3 push25/pop25 instructions.
! .IP "\fB\-m16\-bit\fR" 4
  .IX Item "-m16-bit"
  Generate 16\-bit instructions.
! .IP "\fB\-mno\-16\-bit\fR" 4
  .IX Item "-mno-16-bit"
  Do not generate 16\-bit instructions.
! .IP "\fB\-misr\-vector\-size=\fR\fInum\fR" 4
  .IX Item "-misr-vector-size=num"
  Specify the size of each interrupt vector, which must be 4 or 16.
! .IP "\fB\-mcache\-block\-size=\fR\fInum\fR" 4
  .IX Item "-mcache-block-size=num"
  Specify the size of each cache block,
  which must be a power of 2 between 4 and 512.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
  Specify the name of the target architecture.
! .IP "\fB\-mcmodel=\fR\fIcode-model\fR" 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of
  .RS 4
! .IP "\fBsmall\fR" 4
  .IX Item "small"
! All the data and read-only data segments must be within 512KB addressing space.
  The text segment must be within 16MB addressing space.
! .IP "\fBmedium\fR" 4
  .IX Item "medium"
! The data segment must be within 512KB while the read-only data segment can be
  within 4GB addressing space.  The text segment should be still within 16MB
  addressing space.
! .IP "\fBlarge\fR" 4
  .IX Item "large"
  All the text and data segments can be within 4GB addressing space.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mctor\-dtor\fR" 4
  .IX Item "-mctor-dtor"
  Enable constructor/destructor feature.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Guide linker to relax instructions.
  .PP
! \fINios \s-1II\s0 Options\fR
  .IX Subsection "Nios II Options"
  .PP
! These are the options defined for the Altera Nios \s-1II\s0 processor.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
  sections.  The default value of \fInum\fR is 8.
! .IP "\fB\-mgpopt=\fR\fIoption\fR" 4
  .IX Item "-mgpopt=option"
  .PD 0
! .IP "\fB\-mgpopt\fR" 4
  .IX Item "-mgpopt"
! .IP "\fB\-mno\-gpopt\fR" 4
  .IX Item "-mno-gpopt"
  .PD
! Generate (do not generate) GP-relative accesses.  The following 
  \&\fIoption\fR names are recognized:
  .RS 4
! .IP "\fBnone\fR" 4
  .IX Item "none"
! Do not generate GP-relative accesses.
! .IP "\fBlocal\fR" 4
  .IX Item "local"
! Generate GP-relative accesses for small data objects that are not 
  external, weak, or uninitialized common symbols.  
! Also use GP-relative addressing for objects that
  have been explicitly placed in a small data section via a \f(CW\*(C`section\*(C'\fR
  attribute.
! .IP "\fBglobal\fR" 4
  .IX Item "global"
! As for \fBlocal\fR, but also generate GP-relative accesses for
  small data objects that are external, weak, or common.  If you use this option,
  you must ensure that all parts of your program (including libraries) are
  compiled with the same \fB\-G\fR setting.
! .IP "\fBdata\fR" 4
  .IX Item "data"
! Generate GP-relative accesses for all data objects in the program.  If you
! use this option, the entire data and \s-1BSS\s0 segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
! .IP "\fBall\fR" 4
  .IX Item "all"
! Generate GP-relative addresses for function pointers as well as data
! pointers.  If you use this option, the entire text, data, and \s-1BSS\s0 segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
--- 28659,28816 ----
  \&\f(CW\*(C`any\*(C'\fR \- is the default.  It leaves placement entirely up to the
  linker script and how it assigns the standard sections
  (\f(CW\*(C`.text\*(C'\fR, \f(CW\*(C`.data\*(C'\fR, etc) to the memory regions.
! .IP \fB\-msilicon\-errata=\fR 4
  .IX Item "-msilicon-errata="
  This option passes on a request to assembler to enable the fixes for
  the named silicon errata.
! .IP \fB\-msilicon\-errata\-warn=\fR 4
  .IX Item "-msilicon-errata-warn="
  This option passes on a request to the assembler to enable warning
  messages when a silicon errata might need to be applied.
! .IP \fB\-mwarn\-devices\-csv\fR 4
  .IX Item "-mwarn-devices-csv"
  .PD 0
! .IP \fB\-mno\-warn\-devices\-csv\fR 4
  .IX Item "-mno-warn-devices-csv"
  .PD
  Warn if \fBdevices.csv\fR is not found or there are problem parsing it
  (default: on).
  .PP
! \fINDS32 Options\fR
  .IX Subsection "NDS32 Options"
  .PP
! These options are defined for NDS32 implementations:
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate code in big\-endian mode.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate code in little\-endian mode.
! .IP \fB\-mreduced\-regs\fR 4
  .IX Item "-mreduced-regs"
! Use reduced\-set registers for register allocation.
! .IP \fB\-mfull\-regs\fR 4
  .IX Item "-mfull-regs"
! Use full\-set registers for register allocation.
! .IP \fB\-mcmov\fR 4
  .IX Item "-mcmov"
  Generate conditional move instructions.
! .IP \fB\-mno\-cmov\fR 4
  .IX Item "-mno-cmov"
  Do not generate conditional move instructions.
! .IP \fB\-mext\-perf\fR 4
  .IX Item "-mext-perf"
  Generate performance extension instructions.
! .IP \fB\-mno\-ext\-perf\fR 4
  .IX Item "-mno-ext-perf"
  Do not generate performance extension instructions.
! .IP \fB\-mext\-perf2\fR 4
  .IX Item "-mext-perf2"
  Generate performance extension 2 instructions.
! .IP \fB\-mno\-ext\-perf2\fR 4
  .IX Item "-mno-ext-perf2"
  Do not generate performance extension 2 instructions.
! .IP \fB\-mext\-string\fR 4
  .IX Item "-mext-string"
  Generate string extension instructions.
! .IP \fB\-mno\-ext\-string\fR 4
  .IX Item "-mno-ext-string"
  Do not generate string extension instructions.
! .IP \fB\-mv3push\fR 4
  .IX Item "-mv3push"
  Generate v3 push25/pop25 instructions.
! .IP \fB\-mno\-v3push\fR 4
  .IX Item "-mno-v3push"
  Do not generate v3 push25/pop25 instructions.
! .IP \fB\-m16\-bit\fR 4
  .IX Item "-m16-bit"
  Generate 16\-bit instructions.
! .IP \fB\-mno\-16\-bit\fR 4
  .IX Item "-mno-16-bit"
  Do not generate 16\-bit instructions.
! .IP \fB\-misr\-vector\-size=\fR\fInum\fR 4
  .IX Item "-misr-vector-size=num"
  Specify the size of each interrupt vector, which must be 4 or 16.
! .IP \fB\-mcache\-block\-size=\fR\fInum\fR 4
  .IX Item "-mcache-block-size=num"
  Specify the size of each cache block,
  which must be a power of 2 between 4 and 512.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
  Specify the name of the target architecture.
! .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4
  .IX Item "-mcmodel=code-model"
  Set the code model to one of
  .RS 4
! .IP \fBsmall\fR 4
  .IX Item "small"
! All the data and read\-only data segments must be within 512KB addressing space.
  The text segment must be within 16MB addressing space.
! .IP \fBmedium\fR 4
  .IX Item "medium"
! The data segment must be within 512KB while the read\-only data segment can be
  within 4GB addressing space.  The text segment should be still within 16MB
  addressing space.
! .IP \fBlarge\fR 4
  .IX Item "large"
  All the text and data segments can be within 4GB addressing space.
  .RE
  .RS 4
  .RE
! .IP \fB\-mctor\-dtor\fR 4
  .IX Item "-mctor-dtor"
  Enable constructor/destructor feature.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Guide linker to relax instructions.
  .PP
! \fINios II Options\fR
  .IX Subsection "Nios II Options"
  .PP
! These are the options defined for the Altera Nios II processor.
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  Put global and static objects less than or equal to \fInum\fR bytes
! into the small data or BSS sections instead of the normal data or BSS
  sections.  The default value of \fInum\fR is 8.
! .IP \fB\-mgpopt=\fR\fIoption\fR 4
  .IX Item "-mgpopt=option"
  .PD 0
! .IP \fB\-mgpopt\fR 4
  .IX Item "-mgpopt"
! .IP \fB\-mno\-gpopt\fR 4
  .IX Item "-mno-gpopt"
  .PD
! Generate (do not generate) GP\-relative accesses.  The following 
  \&\fIoption\fR names are recognized:
  .RS 4
! .IP \fBnone\fR 4
  .IX Item "none"
! Do not generate GP\-relative accesses.
! .IP \fBlocal\fR 4
  .IX Item "local"
! Generate GP\-relative accesses for small data objects that are not 
  external, weak, or uninitialized common symbols.  
! Also use GP\-relative addressing for objects that
  have been explicitly placed in a small data section via a \f(CW\*(C`section\*(C'\fR
  attribute.
! .IP \fBglobal\fR 4
  .IX Item "global"
! As for \fBlocal\fR, but also generate GP\-relative accesses for
  small data objects that are external, weak, or common.  If you use this option,
  you must ensure that all parts of your program (including libraries) are
  compiled with the same \fB\-G\fR setting.
! .IP \fBdata\fR 4
  .IX Item "data"
! Generate GP\-relative accesses for all data objects in the program.  If you
! use this option, the entire data and BSS segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
! .IP \fBall\fR 4
  .IX Item "all"
! Generate GP\-relative addresses for function pointers as well as data
! pointers.  If you use this option, the entire text, data, and BSS segments
  of your program must fit in 64K of memory and you must use an appropriate
  linker script to allocate them within the addressable range of the
  global pointer.
*************** global pointer.
*** 28886,29021 ****
  \&\fB\-mno\-gpopt\fR is equivalent to \fB\-mgpopt=none\fR.
  .Sp
  The default is \fB\-mgpopt\fR except when \fB\-fpic\fR or
! \&\fB\-fPIC\fR is specified to generate position-independent code.
! Note that the Nios \s-1II ABI\s0 does not permit GP-relative accesses from
  shared libraries.
  .Sp
  You may need to specify \fB\-mno\-gpopt\fR explicitly when building
  programs that include large amounts of small data, including large
! \&\s-1GOT\s0 data sections.  In this case, the 16\-bit offset for GP-relative
  addressing may not be large enough to allow access to the entire 
  small data section.
  .RE
! .IP "\fB\-mgprel\-sec=\fR\fIregexp\fR" 4
  .IX Item "-mgprel-sec=regexp"
  This option specifies additional section names that can be accessed via
! GP-relative addressing.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a \s-1POSIX\s0 Extended Regular Expression.
  .Sp
  This option does not affect the behavior of the \fB\-G\fR option, and 
  the specified sections are in addition to the standard \f(CW\*(C`.sdata\*(C'\fR
! and \f(CW\*(C`.sbss\*(C'\fR small-data sections that are recognized by \fB\-mgpopt\fR.
! .IP "\fB\-mr0rel\-sec=\fR\fIregexp\fR" 4
  .IX Item "-mr0rel-sec=regexp"
  This option specifies names of sections that can be accessed via a 
  16\-bit offset from \f(CW\*(C`r0\*(C'\fR; that is, in the low 32K or high 32K 
  of the 32\-bit address space.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a \s-1POSIX\s0 Extended Regular Expression.
  .Sp
! In contrast to the use of GP-relative addressing for small data, 
! zero-based addressing is never generated by default and there are no 
  conventional section names used in standard linker scripts for sections
  in the low or high areas of memory.
! .IP "\fB\-mel\fR" 4
  .IX Item "-mel"
  .PD 0
! .IP "\fB\-meb\fR" 4
  .IX Item "-meb"
  .PD
! Generate little-endian (default) or big-endian (experimental) code,
  respectively.
! .IP "\fB\-march=\fR\fIarch\fR" 4
  .IX Item "-march=arch"
! This specifies the name of the target Nios \s-1II\s0 architecture.  \s-1GCC\s0 uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBr1\fR, \fBr2\fR.
  .Sp
  The preprocessor macro \f(CW\*(C`_\|_nios2_arch_\|_\*(C'\fR is available to programs,
! with value 1 or 2, indicating the targeted \s-1ISA\s0 level.
! .IP "\fB\-mbypass\-cache\fR" 4
  .IX Item "-mbypass-cache"
  .PD 0
! .IP "\fB\-mno\-bypass\-cache\fR" 4
  .IX Item "-mno-bypass-cache"
  .PD
  Force all load and store instructions to always bypass cache by 
  using I/O variants of the instructions. The default is not to
  bypass the cache.
! .IP "\fB\-mno\-cache\-volatile\fR" 4
  .IX Item "-mno-cache-volatile"
  .PD 0
! .IP "\fB\-mcache\-volatile\fR" 4
  .IX Item "-mcache-volatile"
  .PD
  Volatile memory access bypass the cache using the I/O variants of 
  the load and store instructions. The default is not to bypass the cache.
! .IP "\fB\-mno\-fast\-sw\-div\fR" 4
  .IX Item "-mno-fast-sw-div"
  .PD 0
! .IP "\fB\-mfast\-sw\-div\fR" 4
  .IX Item "-mfast-sw-div"
  .PD
! Do not use table-based fast divide for small numbers. The default 
  is to use the fast divide at \fB\-O3\fR and above.
! .IP "\fB\-mno\-hw\-mul\fR" 4
  .IX Item "-mno-hw-mul"
  .PD 0
! .IP "\fB\-mhw\-mul\fR" 4
  .IX Item "-mhw-mul"
! .IP "\fB\-mno\-hw\-mulx\fR" 4
  .IX Item "-mno-hw-mulx"
! .IP "\fB\-mhw\-mulx\fR" 4
  .IX Item "-mhw-mulx"
! .IP "\fB\-mno\-hw\-div\fR" 4
  .IX Item "-mno-hw-div"
! .IP "\fB\-mhw\-div\fR" 4
  .IX Item "-mhw-div"
  .PD
  Enable or disable emitting \f(CW\*(C`mul\*(C'\fR, \f(CW\*(C`mulx\*(C'\fR and \f(CW\*(C`div\*(C'\fR family of 
  instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
  and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
! .IP "\fB\-mbmx\fR" 4
  .IX Item "-mbmx"
  .PD 0
! .IP "\fB\-mno\-bmx\fR" 4
  .IX Item "-mno-bmx"
! .IP "\fB\-mcdx\fR" 4
  .IX Item "-mcdx"
! .IP "\fB\-mno\-cdx\fR" 4
  .IX Item "-mno-cdx"
  .PD
! Enable or disable generation of Nios \s-1II R2 BMX\s0 (bit manipulation) and
! \&\s-1CDX\s0 (code density) instructions.  Enabling these instructions also
  requires \fB\-march=r2\fR.  Since these instructions are optional
  extensions to the R2 architecture, the default is not to emit them.
! .IP "\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR" 4
  .IX Item "-mcustom-insn=N"
  .PD 0
! .IP "\fB\-mno\-custom\-\fR\fIinsn\fR" 4
  .IX Item "-mno-custom-insn"
  .PD
  Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
  custom instruction with encoding \fIN\fR when generating code that uses 
  \&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
! instruction 253 for single-precision floating-point add operations instead
  of the default behavior of using a library call.
  .Sp
  The following values of \fIinsn\fR are supported.  Except as otherwise
! noted, floating-point operations are expected to be implemented with
! normal \s-1IEEE 754\s0 semantics and correspond directly to the C operators or the
! equivalent \s-1GCC\s0 built-in functions.
  .Sp
! Single-precision floating point:
  .RS 4
  .IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
  .IX Item "fadds, fsubs, fdivs, fmuls"
  Binary arithmetic operations.
! .IP "\fBfnegs\fR" 4
  .IX Item "fnegs"
  Unary negation.
! .IP "\fBfabss\fR" 4
  .IX Item "fabss"
  Unary absolute value.
  .IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
--- 28821,28956 ----
  \&\fB\-mno\-gpopt\fR is equivalent to \fB\-mgpopt=none\fR.
  .Sp
  The default is \fB\-mgpopt\fR except when \fB\-fpic\fR or
! \&\fB\-fPIC\fR is specified to generate position\-independent code.
! Note that the Nios II ABI does not permit GP\-relative accesses from
  shared libraries.
  .Sp
  You may need to specify \fB\-mno\-gpopt\fR explicitly when building
  programs that include large amounts of small data, including large
! GOT data sections.  In this case, the 16\-bit offset for GP\-relative
  addressing may not be large enough to allow access to the entire 
  small data section.
  .RE
! .IP \fB\-mgprel\-sec=\fR\fIregexp\fR 4
  .IX Item "-mgprel-sec=regexp"
  This option specifies additional section names that can be accessed via
! GP\-relative addressing.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a POSIX Extended Regular Expression.
  .Sp
  This option does not affect the behavior of the \fB\-G\fR option, and 
  the specified sections are in addition to the standard \f(CW\*(C`.sdata\*(C'\fR
! and \f(CW\*(C`.sbss\*(C'\fR small\-data sections that are recognized by \fB\-mgpopt\fR.
! .IP \fB\-mr0rel\-sec=\fR\fIregexp\fR 4
  .IX Item "-mr0rel-sec=regexp"
  This option specifies names of sections that can be accessed via a 
  16\-bit offset from \f(CW\*(C`r0\*(C'\fR; that is, in the low 32K or high 32K 
  of the 32\-bit address space.  It is most useful in conjunction with 
  \&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
! The \fIregexp\fR is a POSIX Extended Regular Expression.
  .Sp
! In contrast to the use of GP\-relative addressing for small data, 
! zero\-based addressing is never generated by default and there are no 
  conventional section names used in standard linker scripts for sections
  in the low or high areas of memory.
! .IP \fB\-mel\fR 4
  .IX Item "-mel"
  .PD 0
! .IP \fB\-meb\fR 4
  .IX Item "-meb"
  .PD
! Generate little\-endian (default) or big\-endian (experimental) code,
  respectively.
! .IP \fB\-march=\fR\fIarch\fR 4
  .IX Item "-march=arch"
! This specifies the name of the target Nios II architecture.  GCC uses this
  name to determine what kind of instructions it can emit when generating
  assembly code.  Permissible names are: \fBr1\fR, \fBr2\fR.
  .Sp
  The preprocessor macro \f(CW\*(C`_\|_nios2_arch_\|_\*(C'\fR is available to programs,
! with value 1 or 2, indicating the targeted ISA level.
! .IP \fB\-mbypass\-cache\fR 4
  .IX Item "-mbypass-cache"
  .PD 0
! .IP \fB\-mno\-bypass\-cache\fR 4
  .IX Item "-mno-bypass-cache"
  .PD
  Force all load and store instructions to always bypass cache by 
  using I/O variants of the instructions. The default is not to
  bypass the cache.
! .IP \fB\-mno\-cache\-volatile\fR 4
  .IX Item "-mno-cache-volatile"
  .PD 0
! .IP \fB\-mcache\-volatile\fR 4
  .IX Item "-mcache-volatile"
  .PD
  Volatile memory access bypass the cache using the I/O variants of 
  the load and store instructions. The default is not to bypass the cache.
! .IP \fB\-mno\-fast\-sw\-div\fR 4
  .IX Item "-mno-fast-sw-div"
  .PD 0
! .IP \fB\-mfast\-sw\-div\fR 4
  .IX Item "-mfast-sw-div"
  .PD
! Do not use table\-based fast divide for small numbers. The default 
  is to use the fast divide at \fB\-O3\fR and above.
! .IP \fB\-mno\-hw\-mul\fR 4
  .IX Item "-mno-hw-mul"
  .PD 0
! .IP \fB\-mhw\-mul\fR 4
  .IX Item "-mhw-mul"
! .IP \fB\-mno\-hw\-mulx\fR 4
  .IX Item "-mno-hw-mulx"
! .IP \fB\-mhw\-mulx\fR 4
  .IX Item "-mhw-mulx"
! .IP \fB\-mno\-hw\-div\fR 4
  .IX Item "-mno-hw-div"
! .IP \fB\-mhw\-div\fR 4
  .IX Item "-mhw-div"
  .PD
  Enable or disable emitting \f(CW\*(C`mul\*(C'\fR, \f(CW\*(C`mulx\*(C'\fR and \f(CW\*(C`div\*(C'\fR family of 
  instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
  and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
! .IP \fB\-mbmx\fR 4
  .IX Item "-mbmx"
  .PD 0
! .IP \fB\-mno\-bmx\fR 4
  .IX Item "-mno-bmx"
! .IP \fB\-mcdx\fR 4
  .IX Item "-mcdx"
! .IP \fB\-mno\-cdx\fR 4
  .IX Item "-mno-cdx"
  .PD
! Enable or disable generation of Nios II R2 BMX (bit manipulation) and
! CDX (code density) instructions.  Enabling these instructions also
  requires \fB\-march=r2\fR.  Since these instructions are optional
  extensions to the R2 architecture, the default is not to emit them.
! .IP \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR 4
  .IX Item "-mcustom-insn=N"
  .PD 0
! .IP \fB\-mno\-custom\-\fR\fIinsn\fR 4
  .IX Item "-mno-custom-insn"
  .PD
  Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
  custom instruction with encoding \fIN\fR when generating code that uses 
  \&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
! instruction 253 for single\-precision floating\-point add operations instead
  of the default behavior of using a library call.
  .Sp
  The following values of \fIinsn\fR are supported.  Except as otherwise
! noted, floating\-point operations are expected to be implemented with
! normal IEEE 754 semantics and correspond directly to the C operators or the
! equivalent GCC built\-in functions.
  .Sp
! Single\-precision floating point:
  .RS 4
  .IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
  .IX Item "fadds, fsubs, fdivs, fmuls"
  Binary arithmetic operations.
! .IP \fBfnegs\fR 4
  .IX Item "fnegs"
  Unary negation.
! .IP \fBfabss\fR 4
  .IX Item "fabss"
  Unary absolute value.
  .IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
*************** Unary absolute value.
*** 29023,29048 ****
  Comparison operations.
  .IP "\fBfmins\fR, \fBfmaxs\fR" 4
  .IX Item "fmins, fmaxs"
! Floating-point minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP "\fBfsqrts\fR" 4
  .IX Item "fsqrts"
  Unary square root operation.
  .IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
  .IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
! Floating-point trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
! Double-precision floating point:
  .IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
  .IX Item "faddd, fsubd, fdivd, fmuld"
  Binary arithmetic operations.
! .IP "\fBfnegd\fR" 4
  .IX Item "fnegd"
  Unary negation.
! .IP "\fBfabsd\fR" 4
  .IX Item "fabsd"
  Unary absolute value.
  .IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
--- 28958,28983 ----
  Comparison operations.
  .IP "\fBfmins\fR, \fBfmaxs\fR" 4
  .IX Item "fmins, fmaxs"
! Floating\-point minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP \fBfsqrts\fR 4
  .IX Item "fsqrts"
  Unary square root operation.
  .IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
  .IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
! Floating\-point trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
! Double\-precision floating point:
  .IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
  .IX Item "faddd, fsubd, fdivd, fmuld"
  Binary arithmetic operations.
! .IP \fBfnegd\fR 4
  .IX Item "fnegd"
  Unary negation.
! .IP \fBfabsd\fR 4
  .IX Item "fabsd"
  Unary absolute value.
  .IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
*************** Unary absolute value.
*** 29050,29126 ****
  Comparison operations.
  .IP "\fBfmind\fR, \fBfmaxd\fR" 4
  .IX Item "fmind, fmaxd"
! Double-precision minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP "\fBfsqrtd\fR" 4
  .IX Item "fsqrtd"
  Unary square root operation.
  .IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
  .IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
! Double-precision trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
  Conversions:
! .IP "\fBfextsd\fR" 4
  .IX Item "fextsd"
  Conversion from single precision to double precision.
! .IP "\fBftruncds\fR" 4
  .IX Item "ftruncds"
  Conversion from double precision to single precision.
  .IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
  .IX Item "fixsi, fixsu, fixdi, fixdu"
  Conversion from floating point to signed or unsigned integer types, with
  truncation towards zero.
! .IP "\fBround\fR" 4
  .IX Item "round"
! Conversion from single-precision floating point to signed integer,
  rounding to the nearest integer and ties away from zero.
  This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
  \&\fB\-fno\-math\-errno\fR is used.
  .IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
  .IX Item "floatis, floatus, floatid, floatud"
! Conversion from signed or unsigned integer types to floating-point types.
  .RE
  .RS 4
  .Sp
  In addition, all of the following transfer instructions for internal
! registers X and Y must be provided to use any of the double-precision
! floating-point instructions.  Custom instructions taking two
! double-precision source operands expect the first operand in the
  64\-bit register X.  The other operand (or only operand of a unary
  operation) is given to the custom arithmetic instruction with the
  least significant half in source register \fIsrc1\fR and the most
  significant half in \fIsrc2\fR.  A custom instruction that returns a
! double-precision result returns the most significant 32 bits in the
  destination register and the other half in 32\-bit register Y.  
! \&\s-1GCC\s0 automatically generates the necessary code sequences to write
! register X and/or read register Y when double-precision floating-point
  instructions are used.
! .IP "\fBfwrx\fR" 4
  .IX Item "fwrx"
  Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
  the most significant half of X.
! .IP "\fBfwry\fR" 4
  .IX Item "fwry"
  Write \fIsrc1\fR into Y.
  .IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
  .IX Item "frdxhi, frdxlo"
  Read the most or least (respectively) significant half of X and store it in
  \&\fIdest\fR.
! .IP "\fBfrdy\fR" 4
  .IX Item "frdy"
  Read the value of Y and store it into \fIdest\fR.
  .RE
  .RS 4
  .Sp
! Note that you can gain more local control over generation of Nios \s-1II\s0 custom
! instructions by using the \f(CW\*(C`target("custom\-\f(CIinsn\f(CW=\f(CIN\f(CW")\*(C'\fR
! and \f(CW\*(C`target("no\-custom\-\f(CIinsn\f(CW")\*(C'\fR function attributes
  or pragmas.
  .RE
! .IP "\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR" 4
  .IX Item "-mcustom-fpu-cfg=name"
  This option enables a predefined, named set of custom instruction encodings
  (see \fB\-mcustom\-\fR\fIinsn\fR above).  
--- 28985,29061 ----
  Comparison operations.
  .IP "\fBfmind\fR, \fBfmaxd\fR" 4
  .IX Item "fmind, fmaxd"
! Double\-precision minimum and maximum.  These instructions are only
  generated if \fB\-ffinite\-math\-only\fR is specified.
! .IP \fBfsqrtd\fR 4
  .IX Item "fsqrtd"
  Unary square root operation.
  .IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
  .IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
! Double\-precision trigonometric and exponential functions.  These instructions
  are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
  .RE
  .RS 4
  .Sp
  Conversions:
! .IP \fBfextsd\fR 4
  .IX Item "fextsd"
  Conversion from single precision to double precision.
! .IP \fBftruncds\fR 4
  .IX Item "ftruncds"
  Conversion from double precision to single precision.
  .IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
  .IX Item "fixsi, fixsu, fixdi, fixdu"
  Conversion from floating point to signed or unsigned integer types, with
  truncation towards zero.
! .IP \fBround\fR 4
  .IX Item "round"
! Conversion from single\-precision floating point to signed integer,
  rounding to the nearest integer and ties away from zero.
  This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
  \&\fB\-fno\-math\-errno\fR is used.
  .IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
  .IX Item "floatis, floatus, floatid, floatud"
! Conversion from signed or unsigned integer types to floating\-point types.
  .RE
  .RS 4
  .Sp
  In addition, all of the following transfer instructions for internal
! registers X and Y must be provided to use any of the double\-precision
! floating\-point instructions.  Custom instructions taking two
! double\-precision source operands expect the first operand in the
  64\-bit register X.  The other operand (or only operand of a unary
  operation) is given to the custom arithmetic instruction with the
  least significant half in source register \fIsrc1\fR and the most
  significant half in \fIsrc2\fR.  A custom instruction that returns a
! double\-precision result returns the most significant 32 bits in the
  destination register and the other half in 32\-bit register Y.  
! GCC automatically generates the necessary code sequences to write
! register X and/or read register Y when double\-precision floating\-point
  instructions are used.
! .IP \fBfwrx\fR 4
  .IX Item "fwrx"
  Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
  the most significant half of X.
! .IP \fBfwry\fR 4
  .IX Item "fwry"
  Write \fIsrc1\fR into Y.
  .IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
  .IX Item "frdxhi, frdxlo"
  Read the most or least (respectively) significant half of X and store it in
  \&\fIdest\fR.
! .IP \fBfrdy\fR 4
  .IX Item "frdy"
  Read the value of Y and store it into \fIdest\fR.
  .RE
  .RS 4
  .Sp
! Note that you can gain more local control over generation of Nios II custom
! instructions by using the \f(CWtarget("custom\-\fR\f(CIinsn\fR\f(CW=\fR\f(CIN\fR\f(CW")\fR
! and \f(CWtarget("no\-custom\-\fR\f(CIinsn\fR\f(CW")\fR function attributes
  or pragmas.
  .RE
! .IP \fB\-mcustom\-fpu\-cfg=\fR\fIname\fR 4
  .IX Item "-mcustom-fpu-cfg=name"
  This option enables a predefined, named set of custom instruction encodings
  (see \fB\-mcustom\-\fR\fIinsn\fR above).  
*************** Custom instruction assignments given by
*** 29178,29189 ****
  \&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
  order of the options on the command line.
  .Sp
! Note that you can gain more local control over selection of a \s-1FPU\s0
! configuration by using the \f(CW\*(C`target("custom\-fpu\-cfg=\f(CIname\f(CW")\*(C'\fR
  function attribute
  or pragma.
  .Sp
! The name \fIfph2\fR is an abbreviation for \fINios \s-1II\s0 Floating Point
  Hardware 2 Component\fR.  Please note that the custom instructions enabled by
  \&\fB\-mcustom\-fmins=233\fR and \fB\-mcustom\-fmaxs=234\fR are only generated
  if \fB\-ffinite\-math\-only\fR is specified.  The custom instruction enabled by
--- 29113,29124 ----
  \&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
  order of the options on the command line.
  .Sp
! Note that you can gain more local control over selection of a FPU
! configuration by using the \f(CWtarget("custom\-fpu\-cfg=\fR\f(CIname\fR\f(CW")\fR
  function attribute
  or pragma.
  .Sp
! The name \fIfph2\fR is an abbreviation for \fINios II Floating Point
  Hardware 2 Component\fR.  Please note that the custom instructions enabled by
  \&\fB\-mcustom\-fmins=233\fR and \fB\-mcustom\-fmaxs=234\fR are only generated
  if \fB\-ffinite\-math\-only\fR is specified.  The custom instruction enabled by
*************** if \fB\-ffinite\-math\-only\fR is specif
*** 29191,29230 ****
  specified.  In contrast to the other configurations,
  \&\fB\-fsingle\-precision\-constant\fR is not set.
  .PP
! These additional \fB\-m\fR options are available for the Altera Nios \s-1II
! ELF\s0 (bare-metal) target:
! .IP "\fB\-mhal\fR" 4
  .IX Item "-mhal"
! Link with \s-1HAL BSP.\s0  This suppresses linking with the GCC-provided C runtime
  startup and termination code, and is typically used in conjunction with
  \&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
! provided by the \s-1HAL BSP.\s0
! .IP "\fB\-msmallc\fR" 4
  .IX Item "-msmallc"
  Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
  Newlib.
! .IP "\fB\-msys\-crt0=\fR\fIstartfile\fR" 4
  .IX Item "-msys-crt0=startfile"
  \&\fIstartfile\fR is the file name of the startfile (crt0) to use 
  when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
! .IP "\fB\-msys\-lib=\fR\fIsystemlib\fR" 4
  .IX Item "-msys-lib=systemlib"
  \&\fIsystemlib\fR is the library name of the library that provides
! low-level system calls required by the C library,
  e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
! This option is typically used to link with a library provided by a \s-1HAL BSP.\s0
  .PP
! \fINvidia \s-1PTX\s0 Options\fR
  .IX Subsection "Nvidia PTX Options"
  .PP
! These options are defined for Nvidia \s-1PTX:\s0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
! Ignored, but preserved for backward compatibility.  Only 64\-bit \s-1ABI\s0 is
  supported.
! .IP "\fB\-march=\fR\fIarchitecture-string\fR" 4
  .IX Item "-march=architecture-string"
! Generate code for the specified \s-1PTX ISA\s0 target architecture
  (e.g. \fBsm_35\fR).  Valid architecture strings are \fBsm_30\fR,
  \&\fBsm_35\fR, \fBsm_53\fR, \fBsm_70\fR, \fBsm_75\fR and
  \&\fBsm_80\fR.
--- 29126,29165 ----
  specified.  In contrast to the other configurations,
  \&\fB\-fsingle\-precision\-constant\fR is not set.
  .PP
! These additional \fB\-m\fR options are available for the Altera Nios II
! ELF (bare\-metal) target:
! .IP \fB\-mhal\fR 4
  .IX Item "-mhal"
! Link with HAL BSP.  This suppresses linking with the GCC\-provided C runtime
  startup and termination code, and is typically used in conjunction with
  \&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
! provided by the HAL BSP.
! .IP \fB\-msmallc\fR 4
  .IX Item "-msmallc"
  Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
  Newlib.
! .IP \fB\-msys\-crt0=\fR\fIstartfile\fR 4
  .IX Item "-msys-crt0=startfile"
  \&\fIstartfile\fR is the file name of the startfile (crt0) to use 
  when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
! .IP \fB\-msys\-lib=\fR\fIsystemlib\fR 4
  .IX Item "-msys-lib=systemlib"
  \&\fIsystemlib\fR is the library name of the library that provides
! low\-level system calls required by the C library,
  e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
! This option is typically used to link with a library provided by a HAL BSP.
  .PP
! \fINvidia PTX Options\fR
  .IX Subsection "Nvidia PTX Options"
  .PP
! These options are defined for Nvidia PTX:
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
! Ignored, but preserved for backward compatibility.  Only 64\-bit ABI is
  supported.
! .IP \fB\-march=\fR\fIarchitecture\-string\fR 4
  .IX Item "-march=architecture-string"
! Generate code for the specified PTX ISA target architecture
  (e.g. \fBsm_35\fR).  Valid architecture strings are \fBsm_30\fR,
  \&\fBsm_35\fR, \fBsm_53\fR, \fBsm_70\fR, \fBsm_75\fR and
  \&\fBsm_80\fR.
*************** The default depends on how the compiler
*** 29234,29293 ****
  This option sets the value of the preprocessor macro
  \&\f(CW\*(C`_\|_PTX_SM_\|_\*(C'\fR; for instance, for \fBsm_35\fR, it has the value
  \&\fB350\fR.
! .IP "\fB\-misa=\fR\fIarchitecture-string\fR" 4
  .IX Item "-misa=architecture-string"
  Alias of \fB\-march=\fR.
! .IP "\fB\-march\-map=\fR\fIarchitecture-string\fR" 4
  .IX Item "-march-map=architecture-string"
  Select the closest available \fB\-march=\fR value that is not more
  capable.  For instance, for \fB\-march\-map=sm_50\fR select
  \&\fB\-march=sm_35\fR, and for \fB\-march\-map=sm_53\fR select
  \&\fB\-march=sm_53\fR.
! .IP "\fB\-mptx=\fR\fIversion-string\fR" 4
  .IX Item "-mptx=version-string"
! Generate code for the specified \s-1PTX ISA\s0 version (e.g. \fB7.0\fR).
  Valid version strings include \fB3.1\fR, \fB6.0\fR, \fB6.3\fR, and
! \&\fB7.0\fR.  The default \s-1PTX ISA\s0 version is 6.0, unless a higher
! version is required for specified \s-1PTX ISA\s0 target architecture via
  option \fB\-march=\fR.
  .Sp
  This option sets the values of the preprocessor macros
  \&\f(CW\*(C`_\|_PTX_ISA_VERSION_MAJOR_\|_\*(C'\fR and \f(CW\*(C`_\|_PTX_ISA_VERSION_MINOR_\|_\*(C'\fR;
  for instance, for \fB3.1\fR the macros have the values \fB3\fR and
  \&\fB1\fR, respectively.
! .IP "\fB\-mmainkernel\fR" 4
  .IX Item "-mmainkernel"
! Link in code for a _\|_main kernel.  This is for stand-alone instead of
  offloading execution.
! .IP "\fB\-moptimize\fR" 4
  .IX Item "-moptimize"
  Apply partitioned execution optimizations.  This is the default when any
  level of optimization is selected.
! .IP "\fB\-msoft\-stack\fR" 4
  .IX Item "-msoft-stack"
  Generate code that does not use \f(CW\*(C`.local\*(C'\fR memory
! directly for stack storage. Instead, a per-warp stack pointer is
! maintained explicitly. This enables variable-length stack allocation (with
! variable-length arrays or \f(CW\*(C`alloca\*(C'\fR), and when global memory is used for
  underlying storage, makes it possible to access automatic variables from other
  threads, or with atomic instructions. This code generation variant is used
  for OpenMP offloading, but the option is exposed on its own for the purpose
  of testing the compiler; to generate code suitable for linking into programs
  using OpenMP offloading, use option \fB\-mgomp\fR.
! .IP "\fB\-muniform\-simt\fR" 4
  .IX Item "-muniform-simt"
  Switch to code generation variant that allows to execute all threads in each
  warp, while maintaining memory state and side effects as if only one thread
! in each warp was active outside of OpenMP \s-1SIMD\s0 regions.  All atomic operations
  and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
  current lane index equals the master lane index), and the register being
  assigned is copied via a shuffle instruction from the master lane.  Outside of
! \&\s-1SIMD\s0 regions lane 0 is the master; inside, each thread sees itself as the
! master.  Shared memory array \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR stores all-zeros or
! all-ones bitmasks for each warp, indicating current mode (0 outside of \s-1SIMD\s0
! regions).  Each thread can bitwise-and the bitmask at position \f(CW\*(C`tid.y\*(C'\fR
  with current lane index to compute the master lane index.
! .IP "\fB\-mgomp\fR" 4
  .IX Item "-mgomp"
  Generate code for use in OpenMP offloading: enables \fB\-msoft\-stack\fR and
  \&\fB\-muniform\-simt\fR options, and selects corresponding multilib variant.
--- 29169,29228 ----
  This option sets the value of the preprocessor macro
  \&\f(CW\*(C`_\|_PTX_SM_\|_\*(C'\fR; for instance, for \fBsm_35\fR, it has the value
  \&\fB350\fR.
! .IP \fB\-misa=\fR\fIarchitecture\-string\fR 4
  .IX Item "-misa=architecture-string"
  Alias of \fB\-march=\fR.
! .IP \fB\-march\-map=\fR\fIarchitecture\-string\fR 4
  .IX Item "-march-map=architecture-string"
  Select the closest available \fB\-march=\fR value that is not more
  capable.  For instance, for \fB\-march\-map=sm_50\fR select
  \&\fB\-march=sm_35\fR, and for \fB\-march\-map=sm_53\fR select
  \&\fB\-march=sm_53\fR.
! .IP \fB\-mptx=\fR\fIversion\-string\fR 4
  .IX Item "-mptx=version-string"
! Generate code for the specified PTX ISA version (e.g. \fB7.0\fR).
  Valid version strings include \fB3.1\fR, \fB6.0\fR, \fB6.3\fR, and
! \&\fB7.0\fR.  The default PTX ISA version is 6.0, unless a higher
! version is required for specified PTX ISA target architecture via
  option \fB\-march=\fR.
  .Sp
  This option sets the values of the preprocessor macros
  \&\f(CW\*(C`_\|_PTX_ISA_VERSION_MAJOR_\|_\*(C'\fR and \f(CW\*(C`_\|_PTX_ISA_VERSION_MINOR_\|_\*(C'\fR;
  for instance, for \fB3.1\fR the macros have the values \fB3\fR and
  \&\fB1\fR, respectively.
! .IP \fB\-mmainkernel\fR 4
  .IX Item "-mmainkernel"
! Link in code for a _\|_main kernel.  This is for stand\-alone instead of
  offloading execution.
! .IP \fB\-moptimize\fR 4
  .IX Item "-moptimize"
  Apply partitioned execution optimizations.  This is the default when any
  level of optimization is selected.
! .IP \fB\-msoft\-stack\fR 4
  .IX Item "-msoft-stack"
  Generate code that does not use \f(CW\*(C`.local\*(C'\fR memory
! directly for stack storage. Instead, a per\-warp stack pointer is
! maintained explicitly. This enables variable\-length stack allocation (with
! variable\-length arrays or \f(CW\*(C`alloca\*(C'\fR), and when global memory is used for
  underlying storage, makes it possible to access automatic variables from other
  threads, or with atomic instructions. This code generation variant is used
  for OpenMP offloading, but the option is exposed on its own for the purpose
  of testing the compiler; to generate code suitable for linking into programs
  using OpenMP offloading, use option \fB\-mgomp\fR.
! .IP \fB\-muniform\-simt\fR 4
  .IX Item "-muniform-simt"
  Switch to code generation variant that allows to execute all threads in each
  warp, while maintaining memory state and side effects as if only one thread
! in each warp was active outside of OpenMP SIMD regions.  All atomic operations
  and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
  current lane index equals the master lane index), and the register being
  assigned is copied via a shuffle instruction from the master lane.  Outside of
! SIMD regions lane 0 is the master; inside, each thread sees itself as the
! master.  Shared memory array \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR stores all\-zeros or
! all\-ones bitmasks for each warp, indicating current mode (0 outside of SIMD
! regions).  Each thread can bitwise\-and the bitmask at position \f(CW\*(C`tid.y\*(C'\fR
  with current lane index to compute the master lane index.
! .IP \fB\-mgomp\fR 4
  .IX Item "-mgomp"
  Generate code for use in OpenMP offloading: enables \fB\-msoft\-stack\fR and
  \&\fB\-muniform\-simt\fR options, and selects corresponding multilib variant.
*************** Generate code for use in OpenMP offloadi
*** 29296,29434 ****
  .IX Subsection "OpenRISC Options"
  .PP
  These options are defined for OpenRISC:
! .IP "\fB\-mboard=\fR\fIname\fR" 4
  .IX Item "-mboard=name"
  Configure a board specific runtime.  This will be passed to the linker for
  newlib board library linking.  The default is \f(CW\*(C`or1ksim\*(C'\fR.
! .IP "\fB\-mnewlib\fR" 4
  .IX Item "-mnewlib"
  This option is ignored; it is for compatibility purposes only.  This used to
  select linker and preprocessor options for use with newlib.
! .IP "\fB\-msoft\-div\fR" 4
  .IX Item "-msoft-div"
  .PD 0
! .IP "\fB\-mhard\-div\fR" 4
  .IX Item "-mhard-div"
  .PD
  Select software or hardware divide (\f(CW\*(C`l.div\*(C'\fR, \f(CW\*(C`l.divu\*(C'\fR) instructions.
  This default is hardware divide.
! .IP "\fB\-msoft\-mul\fR" 4
  .IX Item "-msoft-mul"
  .PD 0
! .IP "\fB\-mhard\-mul\fR" 4
  .IX Item "-mhard-mul"
  .PD
  Select software or hardware multiply (\f(CW\*(C`l.mul\*(C'\fR, \f(CW\*(C`l.muli\*(C'\fR) instructions.
  This default is hardware multiply.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
  Select software or hardware for floating point operations.
  The default is software.
! .IP "\fB\-mdouble\-float\fR" 4
  .IX Item "-mdouble-float"
! When \fB\-mhard\-float\fR is selected, enables generation of double-precision
  floating point instructions.  By default functions from \fIlibgcc\fR are used
! to perform double-precision floating point operations.
! .IP "\fB\-munordered\-float\fR" 4
  .IX Item "-munordered-float"
  When \fB\-mhard\-float\fR is selected, enables generation of unordered
  floating point compare and set flag (\f(CW\*(C`lf.sfun*\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform unordered floating point
  compare and set flag operations.
! .IP "\fB\-mcmov\fR" 4
  .IX Item "-mcmov"
  Enable generation of conditional move (\f(CW\*(C`l.cmov\*(C'\fR) instructions.  By
  default the equivalent will be generated using set and branch.
! .IP "\fB\-mror\fR" 4
  .IX Item "-mror"
  Enable generation of rotate right (\f(CW\*(C`l.ror\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform rotate right operations.
! .IP "\fB\-mrori\fR" 4
  .IX Item "-mrori"
  Enable generation of rotate right with immediate (\f(CW\*(C`l.rori\*(C'\fR) instructions.
  By default functions from \fIlibgcc\fR are used to perform rotate right with
  immediate operations.
! .IP "\fB\-msext\fR" 4
  .IX Item "-msext"
  Enable generation of sign extension (\f(CW\*(C`l.ext*\*(C'\fR) instructions.  By default
  memory loads are used to perform sign extension.
! .IP "\fB\-msfimm\fR" 4
  .IX Item "-msfimm"
  Enable generation of compare and set flag with immediate (\f(CW\*(C`l.sf*i\*(C'\fR)
  instructions.  By default extra instructions will be generated to store the
  immediate to a register first.
! .IP "\fB\-mshftimm\fR" 4
  .IX Item "-mshftimm"
  Enable generation of shift with immediate (\f(CW\*(C`l.srai\*(C'\fR, \f(CW\*(C`l.srli\*(C'\fR,
  \&\f(CW\*(C`l.slli\*(C'\fR) instructions.  By default extra instructions will be generated
  to store the immediate to a register first.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
! Generate OpenRISC code for the small model: The \s-1GOT\s0 is limited to 64k. This is
  the default model.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
! Generate OpenRISC code for the large model: The \s-1GOT\s0 may grow up to 4G in size.
  .PP
! \fI\s-1PDP\-11\s0 Options\fR
  .IX Subsection "PDP-11 Options"
  .PP
! These options are defined for the \s-1PDP\-11:\s0
! .IP "\fB\-mfpu\fR" 4
  .IX Item "-mfpu"
! Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
! point on the \s-1PDP\-11/40\s0 is not supported.)  Implies \-m45.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  Do not use hardware floating point.
! .IP "\fB\-mac0\fR" 4
  .IX Item "-mac0"
! Return floating-point results in ac0 (fr0 in Unix assembler syntax).
! .IP "\fB\-mno\-ac0\fR" 4
  .IX Item "-mno-ac0"
! Return floating-point results in memory.  This is the default.
! .IP "\fB\-m40\fR" 4
  .IX Item "-m40"
! Generate code for a \s-1PDP\-11/40.\s0  Implies \-msoft\-float \-mno\-split.
! .IP "\fB\-m45\fR" 4
  .IX Item "-m45"
! Generate code for a \s-1PDP\-11/45.\s0  This is the default.
! .IP "\fB\-m10\fR" 4
  .IX Item "-m10"
! Generate code for a \s-1PDP\-11/10.\s0  Implies \-msoft\-float \-mno\-split.
! .IP "\fB\-mint16\fR" 4
  .IX Item "-mint16"
  .PD 0
! .IP "\fB\-mno\-int32\fR" 4
  .IX Item "-mno-int32"
  .PD
  Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
! .IP "\fB\-mint32\fR" 4
  .IX Item "-mint32"
  .PD 0
! .IP "\fB\-mno\-int16\fR" 4
  .IX Item "-mno-int16"
  .PD
  Use 32\-bit \f(CW\*(C`int\*(C'\fR.
! .IP "\fB\-msplit\fR" 4
  .IX Item "-msplit"
  Target has split instruction and data space.  Implies \-m45.
! .IP "\fB\-munix\-asm\fR" 4
  .IX Item "-munix-asm"
  Use Unix assembler syntax.
! .IP "\fB\-mdec\-asm\fR" 4
  .IX Item "-mdec-asm"
! Use \s-1DEC\s0 assembler syntax.
! .IP "\fB\-mgnu\-asm\fR" 4
  .IX Item "-mgnu-asm"
! Use \s-1GNU\s0 assembler syntax.  This is the default.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
! Use the new \s-1LRA\s0 register allocator.  By default, the old \*(L"reload\*(R"
  allocator is used.
  .PP
  \fIPowerPC Options\fR
--- 29231,29369 ----
  .IX Subsection "OpenRISC Options"
  .PP
  These options are defined for OpenRISC:
! .IP \fB\-mboard=\fR\fIname\fR 4
  .IX Item "-mboard=name"
  Configure a board specific runtime.  This will be passed to the linker for
  newlib board library linking.  The default is \f(CW\*(C`or1ksim\*(C'\fR.
! .IP \fB\-mnewlib\fR 4
  .IX Item "-mnewlib"
  This option is ignored; it is for compatibility purposes only.  This used to
  select linker and preprocessor options for use with newlib.
! .IP \fB\-msoft\-div\fR 4
  .IX Item "-msoft-div"
  .PD 0
! .IP \fB\-mhard\-div\fR 4
  .IX Item "-mhard-div"
  .PD
  Select software or hardware divide (\f(CW\*(C`l.div\*(C'\fR, \f(CW\*(C`l.divu\*(C'\fR) instructions.
  This default is hardware divide.
! .IP \fB\-msoft\-mul\fR 4
  .IX Item "-msoft-mul"
  .PD 0
! .IP \fB\-mhard\-mul\fR 4
  .IX Item "-mhard-mul"
  .PD
  Select software or hardware multiply (\f(CW\*(C`l.mul\*(C'\fR, \f(CW\*(C`l.muli\*(C'\fR) instructions.
  This default is hardware multiply.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
  Select software or hardware for floating point operations.
  The default is software.
! .IP \fB\-mdouble\-float\fR 4
  .IX Item "-mdouble-float"
! When \fB\-mhard\-float\fR is selected, enables generation of double\-precision
  floating point instructions.  By default functions from \fIlibgcc\fR are used
! to perform double\-precision floating point operations.
! .IP \fB\-munordered\-float\fR 4
  .IX Item "-munordered-float"
  When \fB\-mhard\-float\fR is selected, enables generation of unordered
  floating point compare and set flag (\f(CW\*(C`lf.sfun*\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform unordered floating point
  compare and set flag operations.
! .IP \fB\-mcmov\fR 4
  .IX Item "-mcmov"
  Enable generation of conditional move (\f(CW\*(C`l.cmov\*(C'\fR) instructions.  By
  default the equivalent will be generated using set and branch.
! .IP \fB\-mror\fR 4
  .IX Item "-mror"
  Enable generation of rotate right (\f(CW\*(C`l.ror\*(C'\fR) instructions.  By default
  functions from \fIlibgcc\fR are used to perform rotate right operations.
! .IP \fB\-mrori\fR 4
  .IX Item "-mrori"
  Enable generation of rotate right with immediate (\f(CW\*(C`l.rori\*(C'\fR) instructions.
  By default functions from \fIlibgcc\fR are used to perform rotate right with
  immediate operations.
! .IP \fB\-msext\fR 4
  .IX Item "-msext"
  Enable generation of sign extension (\f(CW\*(C`l.ext*\*(C'\fR) instructions.  By default
  memory loads are used to perform sign extension.
! .IP \fB\-msfimm\fR 4
  .IX Item "-msfimm"
  Enable generation of compare and set flag with immediate (\f(CW\*(C`l.sf*i\*(C'\fR)
  instructions.  By default extra instructions will be generated to store the
  immediate to a register first.
! .IP \fB\-mshftimm\fR 4
  .IX Item "-mshftimm"
  Enable generation of shift with immediate (\f(CW\*(C`l.srai\*(C'\fR, \f(CW\*(C`l.srli\*(C'\fR,
  \&\f(CW\*(C`l.slli\*(C'\fR) instructions.  By default extra instructions will be generated
  to store the immediate to a register first.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
! Generate OpenRISC code for the small model: The GOT is limited to 64k. This is
  the default model.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
! Generate OpenRISC code for the large model: The GOT may grow up to 4G in size.
  .PP
! \fIPDP\-11 Options\fR
  .IX Subsection "PDP-11 Options"
  .PP
! These options are defined for the PDP\-11:
! .IP \fB\-mfpu\fR 4
  .IX Item "-mfpu"
! Use hardware FPP floating point.  This is the default.  (FIS floating
! point on the PDP\-11/40 is not supported.)  Implies \-m45.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  Do not use hardware floating point.
! .IP \fB\-mac0\fR 4
  .IX Item "-mac0"
! Return floating\-point results in ac0 (fr0 in Unix assembler syntax).
! .IP \fB\-mno\-ac0\fR 4
  .IX Item "-mno-ac0"
! Return floating\-point results in memory.  This is the default.
! .IP \fB\-m40\fR 4
  .IX Item "-m40"
! Generate code for a PDP\-11/40.  Implies \-msoft\-float \-mno\-split.
! .IP \fB\-m45\fR 4
  .IX Item "-m45"
! Generate code for a PDP\-11/45.  This is the default.
! .IP \fB\-m10\fR 4
  .IX Item "-m10"
! Generate code for a PDP\-11/10.  Implies \-msoft\-float \-mno\-split.
! .IP \fB\-mint16\fR 4
  .IX Item "-mint16"
  .PD 0
! .IP \fB\-mno\-int32\fR 4
  .IX Item "-mno-int32"
  .PD
  Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
! .IP \fB\-mint32\fR 4
  .IX Item "-mint32"
  .PD 0
! .IP \fB\-mno\-int16\fR 4
  .IX Item "-mno-int16"
  .PD
  Use 32\-bit \f(CW\*(C`int\*(C'\fR.
! .IP \fB\-msplit\fR 4
  .IX Item "-msplit"
  Target has split instruction and data space.  Implies \-m45.
! .IP \fB\-munix\-asm\fR 4
  .IX Item "-munix-asm"
  Use Unix assembler syntax.
! .IP \fB\-mdec\-asm\fR 4
  .IX Item "-mdec-asm"
! Use DEC assembler syntax.
! .IP \fB\-mgnu\-asm\fR 4
  .IX Item "-mgnu-asm"
! Use GNU assembler syntax.  This is the default.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
! Use the new LRA register allocator.  By default, the old "reload"
  allocator is used.
  .PP
  \fIPowerPC Options\fR
*************** allocator is used.
*** 29436,29449 ****
  .PP
  These are listed under
  .PP
! \fI\s-1PRU\s0 Options\fR
  .IX Subsection "PRU Options"
  .PP
! These command-line options are defined for \s-1PRU\s0 target:
! .IP "\fB\-minrt\fR" 4
  .IX Item "-minrt"
  Link with a minimum runtime environment.  This can significantly reduce
! the size of the final \s-1ELF\s0 binary, but some standard C runtime features
  are removed.
  .Sp
  This option disables support for static initializers and constructors.
--- 29371,29384 ----
  .PP
  These are listed under
  .PP
! \fIPRU Options\fR
  .IX Subsection "PRU Options"
  .PP
! These command\-line options are defined for PRU target:
! .IP \fB\-minrt\fR 4
  .IX Item "-minrt"
  Link with a minimum runtime environment.  This can significantly reduce
! the size of the final ELF binary, but some standard C runtime features
  are removed.
  .Sp
  This option disables support for static initializers and constructors.
*************** program will not use those features.
*** 29454,29492 ****
  The minimal startup code would not pass \f(CW\*(C`argc\*(C'\fR and \f(CW\*(C`argv\*(C'\fR arguments
  to \f(CW\*(C`main\*(C'\fR, so the latter must be declared as \f(CW\*(C`int main (void)\*(C'\fR.
  This is already the norm for most firmware projects.
! .IP "\fB\-mmcu=\fR\fImcu\fR" 4
  .IX Item "-mmcu=mcu"
! Specify the \s-1PRU\s0 hardware variant to use.  A correspondingly named
  spec file would be loaded, passing the memory region sizes to
! the linker and defining hardware-specific C macros.
  .Sp
  Newlib provides only the \f(CW\*(C`sim\*(C'\fR spec, intended for running
  regression tests using a simulator.  Specs for real hardware can be
  obtained by installing the
  GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu/\*(C'\fR) package.
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
! Make \s-1GCC\s0 pass the \fB\-\-no\-relax\fR command-line option to the linker
  instead of the \fB\-\-relax\fR option.
! .IP "\fB\-mloop\fR" 4
  .IX Item "-mloop"
! Allow (or do not allow) \s-1GCC\s0 to use the \s-1LOOP\s0 instruction.
! .IP "\fB\-mabi=\fR\fIvariant\fR" 4
  .IX Item "-mabi=variant"
! Specify the \s-1ABI\s0 variant to output code for.  \fB\-mabi=ti\fR selects the
! unmodified \s-1TI ABI\s0 while \fB\-mabi=gnu\fR selects a \s-1GNU\s0 variant that copes
! more naturally with certain \s-1GCC\s0 assumptions.  These are the differences:
  .RS 4
  .IP "\fBFunction Pointer Size\fR" 4
  .IX Item "Function Pointer Size"
! \&\s-1TI ABI\s0 specifies that function (code) pointers are 16\-bit, whereas \s-1GNU\s0
  supports only 32\-bit data and code pointers.
  .IP "\fBOptional Return Value Pointer\fR" 4
  .IX Item "Optional Return Value Pointer"
  Function return values larger than 64 bits are passed by using a hidden
! pointer as the first argument of the function.  \s-1TI ABI,\s0 though, mandates that
! the pointer can be \s-1NULL\s0 in case the caller is not using the returned value.
! \&\s-1GNU\s0 always passes and expects a valid return value pointer.
  .RE
  .RS 4
  .Sp
--- 29389,29427 ----
  The minimal startup code would not pass \f(CW\*(C`argc\*(C'\fR and \f(CW\*(C`argv\*(C'\fR arguments
  to \f(CW\*(C`main\*(C'\fR, so the latter must be declared as \f(CW\*(C`int main (void)\*(C'\fR.
  This is already the norm for most firmware projects.
! .IP \fB\-mmcu=\fR\fImcu\fR 4
  .IX Item "-mmcu=mcu"
! Specify the PRU hardware variant to use.  A correspondingly named
  spec file would be loaded, passing the memory region sizes to
! the linker and defining hardware\-specific C macros.
  .Sp
  Newlib provides only the \f(CW\*(C`sim\*(C'\fR spec, intended for running
  regression tests using a simulator.  Specs for real hardware can be
  obtained by installing the
  GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu/\*(C'\fR) package.
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
! Make GCC pass the \fB\-\-no\-relax\fR command\-line option to the linker
  instead of the \fB\-\-relax\fR option.
! .IP \fB\-mloop\fR 4
  .IX Item "-mloop"
! Allow (or do not allow) GCC to use the LOOP instruction.
! .IP \fB\-mabi=\fR\fIvariant\fR 4
  .IX Item "-mabi=variant"
! Specify the ABI variant to output code for.  \fB\-mabi=ti\fR selects the
! unmodified TI ABI while \fB\-mabi=gnu\fR selects a GNU variant that copes
! more naturally with certain GCC assumptions.  These are the differences:
  .RS 4
  .IP "\fBFunction Pointer Size\fR" 4
  .IX Item "Function Pointer Size"
! TI ABI specifies that function (code) pointers are 16\-bit, whereas GNU
  supports only 32\-bit data and code pointers.
  .IP "\fBOptional Return Value Pointer\fR" 4
  .IX Item "Optional Return Value Pointer"
  Function return values larger than 64 bits are passed by using a hidden
! pointer as the first argument of the function.  TI ABI, though, mandates that
! the pointer can be NULL in case the caller is not using the returned value.
! GNU always passes and expects a valid return value pointer.
  .RE
  .RS 4
  .Sp
*************** when any of the above code constructs is
*** 29495,29532 ****
  the standard C library cannot be built and it is omitted when linking with
  \&\fB\-mabi=ti\fR.
  .Sp
! Relaxation is a \s-1GNU\s0 feature and for safety reasons is disabled when using
! \&\fB\-mabi=ti\fR.  The \s-1TI\s0 toolchain does not emit relocations for QBBx
! instructions, so the \s-1GNU\s0 linker cannot adjust them when shortening adjacent
! \&\s-1LDI32\s0 pseudo instructions.
  .RE
  .PP
! \fIRISC-V Options\fR
  .IX Subsection "RISC-V Options"
  .PP
! These command-line options are defined for RISC-V targets:
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP "\fB\-mplt\fR" 4
  .IX Item "-mplt"
  .PD 0
! .IP "\fB\-mno\-plt\fR" 4
  .IX Item "-mno-plt"
  .PD
! When generating \s-1PIC\s0 code, do or don't allow the use of PLTs. Ignored for
! non-PIC.  The default is \fB\-mplt\fR.
! .IP "\fB\-mabi=\fR\fIABI-string\fR" 4
  .IX Item "-mabi=ABI-string"
! Specify integer and floating-point calling convention.  \fIABI-string\fR
  contains two parts: the size of integer types and the registers used for
! floating-point types.  For example \fB\-march=rv64ifd \-mabi=lp64d\fR means that
  \&\fBlong\fR and pointers are 64\-bit (implicitly defining \fBint\fR to be
! 32\-bit), and that floating-point values up to 64 bits wide are passed in F
  registers.  Contrast this with \fB\-march=rv64ifd \-mabi=lp64f\fR, which still
  allows the compiler to generate code that uses the F and D extensions but only
! allows floating-point values up to 32 bits long to be passed in registers; or
! \&\fB\-march=rv64ifd \-mabi=lp64\fR, in which no floating-point arguments will be
  passed in registers.
  .Sp
  The default for this argument is system dependent, users who want a specific
--- 29430,29467 ----
  the standard C library cannot be built and it is omitted when linking with
  \&\fB\-mabi=ti\fR.
  .Sp
! Relaxation is a GNU feature and for safety reasons is disabled when using
! \&\fB\-mabi=ti\fR.  The TI toolchain does not emit relocations for QBBx
! instructions, so the GNU linker cannot adjust them when shortening adjacent
! LDI32 pseudo instructions.
  .RE
  .PP
! \fIRISC\-V Options\fR
  .IX Subsection "RISC-V Options"
  .PP
! These command\-line options are defined for RISC\-V targets:
! .IP \fB\-mbranch\-cost=\fR\fIn\fR 4
  .IX Item "-mbranch-cost=n"
  Set the cost of branches to roughly \fIn\fR instructions.
! .IP \fB\-mplt\fR 4
  .IX Item "-mplt"
  .PD 0
! .IP \fB\-mno\-plt\fR 4
  .IX Item "-mno-plt"
  .PD
! When generating PIC code, do or don\*(Aqt allow the use of PLTs. Ignored for
! non\-PIC.  The default is \fB\-mplt\fR.
! .IP \fB\-mabi=\fR\fIABI\-string\fR 4
  .IX Item "-mabi=ABI-string"
! Specify integer and floating\-point calling convention.  \fIABI\-string\fR
  contains two parts: the size of integer types and the registers used for
! floating\-point types.  For example \fB\-march=rv64ifd \-mabi=lp64d\fR means that
  \&\fBlong\fR and pointers are 64\-bit (implicitly defining \fBint\fR to be
! 32\-bit), and that floating\-point values up to 64 bits wide are passed in F
  registers.  Contrast this with \fB\-march=rv64ifd \-mabi=lp64f\fR, which still
  allows the compiler to generate code that uses the F and D extensions but only
! allows floating\-point values up to 32 bits long to be passed in registers; or
! \&\fB\-march=rv64ifd \-mabi=lp64\fR, in which no floating\-point arguments will be
  passed in registers.
  .Sp
  The default for this argument is system dependent, users who want a specific
*************** calling convention should specify one ex
*** 29534,29605 ****
  conventions are: \fBilp32\fR, \fBilp32f\fR, \fBilp32d\fR, \fBlp64\fR,
  \&\fBlp64f\fR, and \fBlp64d\fR.  Some calling conventions are impossible to
  implement on some ISAs: for example, \fB\-march=rv32if \-mabi=ilp32d\fR is
! invalid because the \s-1ABI\s0 requires 64\-bit values be passed in F registers, but F
! registers are only 32 bits wide.  There are also the \fBilp32e\fR \s-1ABI\s0 that can
! only be used with the \fBrv32e\fR architecture and the \fBlp64e\fR \s-1ABI\s0 that
  can only be used with the \fBrv64e\fR.  Those ABIs are not well specified at
  present, and are subject to change.
! .IP "\fB\-mfdiv\fR" 4
  .IX Item "-mfdiv"
  .PD 0
! .IP "\fB\-mno\-fdiv\fR" 4
  .IX Item "-mno-fdiv"
  .PD
! Do or don't use hardware floating-point divide and square root instructions.
! This requires the F or D extensions for floating-point registers.  The default
  is to use them if the specified architecture has these instructions.
! .IP "\fB\-mdiv\fR" 4
  .IX Item "-mdiv"
  .PD 0
! .IP "\fB\-mno\-div\fR" 4
  .IX Item "-mno-div"
  .PD
! Do or don't use hardware instructions for integer division.  This requires the
  M extension.  The default is to use them if the specified architecture has
  these instructions.
! .IP "\fB\-misa\-spec=\fR\fIISA-spec-string\fR" 4
  .IX Item "-misa-spec=ISA-spec-string"
! Specify the version of the RISC-V Unprivileged (formerly User-Level)
! \&\s-1ISA\s0 specification to produce code conforming to.  The possibilities
! for \fIISA-spec-string\fR are:
  .RS 4
! .ie n .IP "2.2" 4
! .el .IP "\f(CW2.2\fR" 4
  .IX Item "2.2"
  Produce code conforming to version 2.2.
! .ie n .IP "20190608" 4
! .el .IP "\f(CW20190608\fR" 4
  .IX Item "20190608"
  Produce code conforming to version 20190608.
! .ie n .IP "20191213" 4
! .el .IP "\f(CW20191213\fR" 4
  .IX Item "20191213"
  Produce code conforming to version 20191213.
  .RE
  .RS 4
  .Sp
! The default is \fB\-misa\-spec=20191213\fR unless \s-1GCC\s0 has been configured
  with \fB\-\-with\-isa\-spec=\fR specifying a different default version.
  .RE
! .IP "\fB\-march=\fR\fIISA-string\fR" 4
  .IX Item "-march=ISA-string"
! Generate code for given RISC-V \s-1ISA\s0 (e.g. \fBrv64im\fR).  \s-1ISA\s0 strings must be
! lower-case.  Examples include \fBrv64i\fR, \fBrv32g\fR, \fBrv32e\fR, and
  \&\fBrv32imaf\fR. Additionally, a special value \fBhelp\fR
  (\fB\-march=help\fR) is accepted to list all supported extensions.
  .Sp
! The syntax of the \s-1ISA\s0 string is defined as follows:
  .RS 4
! .ie n .IP """The string must start with \fBrv32\fP or \fBrv64\fP, followed by""" 4
! .el .IP "\f(CWThe string must start with \f(CBrv32\f(CW or \f(CBrv64\f(CW, followed by\fR" 4
  .IX Item "The string must start with rv32 or rv64, followed by"
! \&\fBi\fR, \fBe\fR, or \fBg\fR, referred to as the base \s-1ISA.\s0
  .ie n .IP """The subsequent part of the string is a list of extension names. Extension""" 4
  .el .IP "\f(CWThe subsequent part of the string is a list of extension names. Extension\fR" 4
  .IX Item "The subsequent part of the string is a list of extension names. Extension"
! names can be categorized as multi-letter (e.g. \fBzba\fR) and single-letter
! (e.g. \fBv\fR). Single-letter extensions can appear consecutively,
! but multi-letter extensions must be separated by underscores.
  .ie n .IP """An underscore can appear anywhere after the base ISA. It has no specific""" 4
  .el .IP "\f(CWAn underscore can appear anywhere after the base ISA. It has no specific\fR" 4
  .IX Item "An underscore can appear anywhere after the base ISA. It has no specific"
--- 29469,29540 ----
  conventions are: \fBilp32\fR, \fBilp32f\fR, \fBilp32d\fR, \fBlp64\fR,
  \&\fBlp64f\fR, and \fBlp64d\fR.  Some calling conventions are impossible to
  implement on some ISAs: for example, \fB\-march=rv32if \-mabi=ilp32d\fR is
! invalid because the ABI requires 64\-bit values be passed in F registers, but F
! registers are only 32 bits wide.  There are also the \fBilp32e\fR ABI that can
! only be used with the \fBrv32e\fR architecture and the \fBlp64e\fR ABI that
  can only be used with the \fBrv64e\fR.  Those ABIs are not well specified at
  present, and are subject to change.
! .IP \fB\-mfdiv\fR 4
  .IX Item "-mfdiv"
  .PD 0
! .IP \fB\-mno\-fdiv\fR 4
  .IX Item "-mno-fdiv"
  .PD
! Do or don\*(Aqt use hardware floating\-point divide and square root instructions.
! This requires the F or D extensions for floating\-point registers.  The default
  is to use them if the specified architecture has these instructions.
! .IP \fB\-mdiv\fR 4
  .IX Item "-mdiv"
  .PD 0
! .IP \fB\-mno\-div\fR 4
  .IX Item "-mno-div"
  .PD
! Do or don\*(Aqt use hardware instructions for integer division.  This requires the
  M extension.  The default is to use them if the specified architecture has
  these instructions.
! .IP \fB\-misa\-spec=\fR\fIISA\-spec\-string\fR 4
  .IX Item "-misa-spec=ISA-spec-string"
! Specify the version of the RISC\-V Unprivileged (formerly User\-Level)
! ISA specification to produce code conforming to.  The possibilities
! for \fIISA\-spec\-string\fR are:
  .RS 4
! .ie n .IP 2.2 4
! .el .IP \f(CW2.2\fR 4
  .IX Item "2.2"
  Produce code conforming to version 2.2.
! .ie n .IP 20190608 4
! .el .IP \f(CW20190608\fR 4
  .IX Item "20190608"
  Produce code conforming to version 20190608.
! .ie n .IP 20191213 4
! .el .IP \f(CW20191213\fR 4
  .IX Item "20191213"
  Produce code conforming to version 20191213.
  .RE
  .RS 4
  .Sp
! The default is \fB\-misa\-spec=20191213\fR unless GCC has been configured
  with \fB\-\-with\-isa\-spec=\fR specifying a different default version.
  .RE
! .IP \fB\-march=\fR\fIISA\-string\fR 4
  .IX Item "-march=ISA-string"
! Generate code for given RISC\-V ISA (e.g. \fBrv64im\fR).  ISA strings must be
! lower\-case.  Examples include \fBrv64i\fR, \fBrv32g\fR, \fBrv32e\fR, and
  \&\fBrv32imaf\fR. Additionally, a special value \fBhelp\fR
  (\fB\-march=help\fR) is accepted to list all supported extensions.
  .Sp
! The syntax of the ISA string is defined as follows:
  .RS 4
! .ie n .IP """The string must start with \fBrv32\fR or \fBrv64\fR, followed by""" 4
! .el .IP "\f(CWThe string must start with \fR\f(CBrv32\fR\f(CW or \fR\f(CBrv64\fR\f(CW, followed by\fR" 4
  .IX Item "The string must start with rv32 or rv64, followed by"
! \&\fBi\fR, \fBe\fR, or \fBg\fR, referred to as the base ISA.
  .ie n .IP """The subsequent part of the string is a list of extension names. Extension""" 4
  .el .IP "\f(CWThe subsequent part of the string is a list of extension names. Extension\fR" 4
  .IX Item "The subsequent part of the string is a list of extension names. Extension"
! names can be categorized as multi\-letter (e.g. \fBzba\fR) and single\-letter
! (e.g. \fBv\fR). Single\-letter extensions can appear consecutively,
! but multi\-letter extensions must be separated by underscores.
  .ie n .IP """An underscore can appear anywhere after the base ISA. It has no specific""" 4
  .el .IP "\f(CWAn underscore can appear anywhere after the base ISA. It has no specific\fR" 4
  .IX Item "An underscore can appear anywhere after the base ISA. It has no specific"
*************** Supported extension are listed below:
*** 29616,30103 ****
  .IP "\fIExtension Name\fR : \fISupported Version\fR : \fIDescription\fR" 4
  .IX Item "Extension Name : Supported Version : Description"
  .PD 0
! .IP "i" 4
  .IX Item "i"
  .PD
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Base integer extension.
! .IP "e" 4
  .IX Item "e"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Reduced base integer extension.
! .IP "g" 4
  .IX Item "g"
  \&\f(CW@tab\fR \-
! \&\f(CW@tab\fR General-purpose computing base extension, \fBg\fR will expand to
  \&\fBi\fR, \fBm\fR, \fBa\fR, \fBf\fR, \fBd\fR, \fBzicsr\fR and
  \&\fBzifencei\fR.
! .IP "m" 4
  .IX Item "m"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Integer multiplication and division extension.
! .IP "a" 4
  .IX Item "a"
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Atomic extension.
! .IP "f" 4
  .IX Item "f"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Single-precision floating-point extension.
! .IP "d" 4
  .IX Item "d"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Double-precision floating-point extension.
! .IP "c" 4
  .IX Item "c"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Compressed extension.
! .IP "h" 4
  .IX Item "h"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hypervisor extension.
! .IP "v" 4
  .IX Item "v"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extension.
! .IP "zicsr" 4
  .IX Item "zicsr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Control and status register access extension.
! .IP "zifencei" 4
  .IX Item "zifencei"
  \&\f(CW@tab\fR 2.0
! \&\f(CW@tab\fR Instruction-fetch fence extension.
! .IP "zicond" 4
  .IX Item "zicond"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer conditional operations extension.
! .IP "za64rs" 4
  .IX Item "za64rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 64 bytes.
! .IP "za128rs" 4
  .IX Item "za128rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 128 bytes.
! .IP "zawrs" 4
  .IX Item "zawrs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Wait-on-reservation-set extension.
! .IP "zba" 4
  .IX Item "zba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Address calculation extension.
! .IP "zbb" 4
  .IX Item "zbb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Basic bit manipulation extension.
! .IP "zbc" 4
  .IX Item "zbc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Carry-less multiplication extension.
! .IP "zbs" 4
  .IX Item "zbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single-bit operation extension.
! .IP "zfinx" 4
  .IX Item "zfinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single-precision floating-point in integer registers extension.
! .IP "zdinx" 4
  .IX Item "zdinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Double-precision floating-point in integer registers extension.
! .IP "zhinx" 4
  .IX Item "zhinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half-precision floating-point in integer registers extension.
! .IP "zhinxmin" 4
  .IX Item "zhinxmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half-precision floating-point in integer registers extension.
! .IP "zbkb" 4
  .IX Item "zbkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography bit-manipulation extension.
! .IP "zbkc" 4
  .IX Item "zbkc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography carry-less multiply extension.
! .IP "zbkx" 4
  .IX Item "zbkx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cryptography crossbar permutation extension.
! .IP "zkne" 4
  .IX Item "zkne"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1AES\s0 Encryption extension.
! .IP "zknd" 4
  .IX Item "zknd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1AES\s0 Decryption extension.
! .IP "zknh" 4
  .IX Item "zknh"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hash function extension.
! .IP "zkr" 4
  .IX Item "zkr"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Entropy source extension.
! .IP "zksed" 4
  .IX Item "zksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1SM4\s0 block cipher extension.
! .IP "zksh" 4
  .IX Item "zksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1SM3\s0 hash function extension.
! .IP "zkt" 4
  .IX Item "zkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Data independent execution latency extension.
! .IP "zk" 4
  .IX Item "zk"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Standard scalar cryptography extension.
! .IP "zkn" 4
  .IX Item "zkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1NIST\s0 algorithm suite extension.
! .IP "zks" 4
  .IX Item "zks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR ShangMi algorithm suite extension.
! .IP "zihintntl" 4
  .IX Item "zihintntl"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Non-temporal locality hints extension.
! .IP "zihintpause" 4
  .IX Item "zihintpause"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Pause hint extension.
! .IP "zicboz" 4
  .IX Item "zicboz"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache-block zero extension.
! .IP "zicbom" 4
  .IX Item "zicbom"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache-block management extension.
! .IP "zicbop" 4
  .IX Item "zicbop"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache-block prefetch extension.
! .IP "zic64b" 4
  .IX Item "zic64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cache block size isf 64 bytes.
! .IP "ziccamoa" 4
  .IX Item "ziccamoa"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports all atomics in A.
! .IP "ziccif" 4
  .IX Item "ziccif"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports instruction fetch with atomicity requirement.
! .IP "zicclsm" 4
  .IX Item "zicclsm"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports misaligned loads/stores.
! .IP "ziccrse" 4
  .IX Item "ziccrse"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Main memory supports forward progress on \s-1LR/SC\s0 sequences.
! .IP "zicntr" 4
  .IX Item "zicntr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for base counters and timers.
! .IP "zihpm" 4
  .IX Item "zihpm"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for hardware performance counters.
! .IP "ztso" 4
  .IX Item "ztso"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Total store ordering extension.
! .IP "zve32x" 4
  .IX Item "zve32x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve32f" 4
  .IX Item "zve32f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve64x" 4
  .IX Item "zve64x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve64f" 4
  .IX Item "zve64f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zve64d" 4
  .IX Item "zve64d"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP "zvl32b" 4
  .IX Item "zvl32b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl64b" 4
  .IX Item "zvl64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl128b" 4
  .IX Item "zvl128b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl256b" 4
  .IX Item "zvl256b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl512b" 4
  .IX Item "zvl512b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl1024b" 4
  .IX Item "zvl1024b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl2048b" 4
  .IX Item "zvl2048b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvl4096b" 4
  .IX Item "zvl4096b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP "zvbb" 4
  .IX Item "zvbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector basic bit-manipulation extension.
! .IP "zvbc" 4
  .IX Item "zvbc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector carryless multiplication extension.
! .IP "zvkb" 4
  .IX Item "zvkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector cryptography bit-manipulation extension.
! .IP "zvkg" 4
  .IX Item "zvkg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1GCM/GMAC\s0 extension.
! .IP "zvkned" 4
  .IX Item "zvkned"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1AES\s0 block cipher extension.
! .IP "zvknha" 4
  .IX Item "zvknha"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SHA\-2\s0 secure hash extension.
! .IP "zvknhb" 4
  .IX Item "zvknhb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SHA\-2\s0 secure hash extension.
! .IP "zvksed" 4
  .IX Item "zvksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SM4\s0 Block Cipher extension.
! .IP "zvksh" 4
  .IX Item "zvksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1SM3\s0 Secure Hash extension.
! .IP "zvkn" 4
  .IX Item "zvkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1NIST\s0 Algorithm Suite extension, \fBzvkn\fR will expand to
  \&\fBzvkned\fR, \fBzvknhb\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP "zvknc" 4
  .IX Item "zvknc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1NIST\s0 Algorithm Suite with carryless multiply extension, \fBzvknc\fR
  will expand to \fBzvkn\fR and \fBzvbc\fR.
! .IP "zvkng" 4
  .IX Item "zvkng"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1NIST\s0 Algorithm Suite with \s-1GCM\s0 extension, \fBzvkng\fR will expand
  to \fBzvkn\fR and \fBzvkg\fR.
! .IP "zvks" 4
  .IX Item "zvks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite extension, \fBzvks\fR will expand
  to \fBzvksed\fR, \fBzvksh\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP "zvksc" 4
  .IX Item "zvksc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite with carryless multiplication extension,
  \&\fBzvksc\fR will expand to \fBzvks\fR and \fBzvbc\fR.
! .IP "zvksg" 4
  .IX Item "zvksg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector ShangMi algorithm suite with \s-1GCM\s0 extension, \fBzvksg\fR will expand
  to \fBzvks\fR and \fBzvkg\fR.
! .IP "zvkt" 4
  .IX Item "zvkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector data independent execution latency extension.
! .IP "zfh" 4
  .IX Item "zfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half-precision floating-point extension.
! .IP "zfhmin" 4
  .IX Item "zfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half-precision floating-point extension.
! .IP "zvfh" 4
  .IX Item "zvfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector half-precision floating-point extension.
! .IP "zvfhmin" 4
  .IX Item "zvfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector minimal half-precision floating-point extension.
! .IP "zvfbfmin" 4
  .IX Item "zvfbfmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector \s-1BF16\s0 converts extension.
! .IP "zfa" 4
  .IX Item "zfa"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Additional floating-point extension.
! .IP "zmmul" 4
  .IX Item "zmmul"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer multiplication extension.
! .IP "zca" 4
  .IX Item "zca"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer compressed instruction extension.
! .IP "zcf" 4
  .IX Item "zcf"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed single-precision floating point loads and stores extension.
! .IP "zcd" 4
  .IX Item "zcd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed double-precision floating point loads and stores extension.
! .IP "zcb" 4
  .IX Item "zcb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Simple compressed instruction extension.
! .IP "zce" 4
  .IX Item "zce"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed instruction extensions for embedded processors.
! .IP "zcmp" 4
  .IX Item "zcmp"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed push pop extension.
! .IP "zcmt" 4
  .IX Item "zcmt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Table jump instruction extension.
! .IP "smaia" 4
  .IX Item "smaia"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Advanced interrupt architecture extension.
! .IP "smepmp" 4
  .IX Item "smepmp"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1PMP\s0 Enhancements for memory access and execution prevention on Machine mode.
! .IP "smstateen" 4
  .IX Item "smstateen"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR State enable extension.
! .IP "ssaia" 4
  .IX Item "ssaia"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Advanced interrupt architecture extension for supervisor-mode.
! .IP "sscofpmf" 4
  .IX Item "sscofpmf"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Count overflow & filtering extension.
! .IP "ssstateen" 4
  .IX Item "ssstateen"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR State-enable extension for supervisor-mode.
! .IP "sstc" 4
  .IX Item "sstc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Supervisor-mode timer interrupts extension.
! .IP "svinval" 4
  .IX Item "svinval"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Fine-grained address-translation cache invalidation extension.
! .IP "svnapot" 4
  .IX Item "svnapot"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR \s-1NAPOT\s0 translation contiguity extension.
! .IP "svpbmt" 4
  .IX Item "svpbmt"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Page-based memory types extension.
! .IP "xcvmac" 4
  .IX Item "xcvmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core-V multiply-accumulate extension.
! .IP "xcvalu" 4
  .IX Item "xcvalu"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core-V miscellaneous \s-1ALU\s0 extension.
! .IP "xcvelw" 4
  .IX Item "xcvelw"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core-V event load word extension.
! .IP "xtheadba" 4
  .IX Item "xtheadba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head address calculation extension.
! .IP "xtheadbb" 4
  .IX Item "xtheadbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head basic bit-manipulation extension.
! .IP "xtheadbs" 4
  .IX Item "xtheadbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head single-bit instructions extension.
! .IP "xtheadcmo" 4
  .IX Item "xtheadcmo"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head cache management operations extension.
! .IP "xtheadcondmov" 4
  .IX Item "xtheadcondmov"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head conditional move extension.
! .IP "xtheadfmemidx" 4
  .IX Item "xtheadfmemidx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head indexed memory operations for floating-point registers extension.
! .IP "xtheadfmv" 4
  .IX Item "xtheadfmv"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head double floating-point high-bit data transmission extension.
! .IP "xtheadint" 4
  .IX Item "xtheadint"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head acceleration interruption extension.
! .IP "xtheadmac" 4
  .IX Item "xtheadmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multiply-accumulate extension.
! .IP "xtheadmemidx" 4
  .IX Item "xtheadmemidx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head indexed memory operation extension.
! .IP "xtheadmempair" 4
  .IX Item "xtheadmempair"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head two-GPR memory operation extension.
! .IP "xtheadsync" 4
  .IX Item "xtheadsync"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multi-core synchronization extension.
! .IP "xventanacondops" 4
  .IX Item "xventanacondops"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Ventana integer conditional operations extension.
--- 29551,30038 ----
  .IP "\fIExtension Name\fR : \fISupported Version\fR : \fIDescription\fR" 4
  .IX Item "Extension Name : Supported Version : Description"
  .PD 0
! .IP i 4
  .IX Item "i"
  .PD
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Base integer extension.
! .IP e 4
  .IX Item "e"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Reduced base integer extension.
! .IP g 4
  .IX Item "g"
  \&\f(CW@tab\fR \-
! \&\f(CW@tab\fR General\-purpose computing base extension, \fBg\fR will expand to
  \&\fBi\fR, \fBm\fR, \fBa\fR, \fBf\fR, \fBd\fR, \fBzicsr\fR and
  \&\fBzifencei\fR.
! .IP m 4
  .IX Item "m"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Integer multiplication and division extension.
! .IP a 4
  .IX Item "a"
  \&\f(CW@tab\fR 2.0, 2.1
  \&\f(CW@tab\fR Atomic extension.
! .IP f 4
  .IX Item "f"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Single\-precision floating\-point extension.
! .IP d 4
  .IX Item "d"
  \&\f(CW@tab\fR 2.0, 2.2
! \&\f(CW@tab\fR Double\-precision floating\-point extension.
! .IP c 4
  .IX Item "c"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Compressed extension.
! .IP h 4
  .IX Item "h"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hypervisor extension.
! .IP v 4
  .IX Item "v"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extension.
! .IP zicsr 4
  .IX Item "zicsr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Control and status register access extension.
! .IP zifencei 4
  .IX Item "zifencei"
  \&\f(CW@tab\fR 2.0
! \&\f(CW@tab\fR Instruction\-fetch fence extension.
! .IP zicond 4
  .IX Item "zicond"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer conditional operations extension.
! .IP za64rs 4
  .IX Item "za64rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 64 bytes.
! .IP za128rs 4
  .IX Item "za128rs"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Reservation set size of 128 bytes.
! .IP zawrs 4
  .IX Item "zawrs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Wait\-on\-reservation\-set extension.
! .IP zba 4
  .IX Item "zba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Address calculation extension.
! .IP zbb 4
  .IX Item "zbb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Basic bit manipulation extension.
! .IP zbc 4
  .IX Item "zbc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Carry\-less multiplication extension.
! .IP zbs 4
  .IX Item "zbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single\-bit operation extension.
! .IP zfinx 4
  .IX Item "zfinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Single\-precision floating\-point in integer registers extension.
! .IP zdinx 4
  .IX Item "zdinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Double\-precision floating\-point in integer registers extension.
! .IP zhinx 4
  .IX Item "zhinx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half\-precision floating\-point in integer registers extension.
! .IP zhinxmin 4
  .IX Item "zhinxmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half\-precision floating\-point in integer registers extension.
! .IP zbkb 4
  .IX Item "zbkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography bit\-manipulation extension.
! .IP zbkc 4
  .IX Item "zbkc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cryptography carry\-less multiply extension.
! .IP zbkx 4
  .IX Item "zbkx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cryptography crossbar permutation extension.
! .IP zkne 4
  .IX Item "zkne"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR AES Encryption extension.
! .IP zknd 4
  .IX Item "zknd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR AES Decryption extension.
! .IP zknh 4
  .IX Item "zknh"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Hash function extension.
! .IP zkr 4
  .IX Item "zkr"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Entropy source extension.
! .IP zksed 4
  .IX Item "zksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR SM4 block cipher extension.
! .IP zksh 4
  .IX Item "zksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR SM3 hash function extension.
! .IP zkt 4
  .IX Item "zkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Data independent execution latency extension.
! .IP zk 4
  .IX Item "zk"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Standard scalar cryptography extension.
! .IP zkn 4
  .IX Item "zkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR NIST algorithm suite extension.
! .IP zks 4
  .IX Item "zks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR ShangMi algorithm suite extension.
! .IP zihintntl 4
  .IX Item "zihintntl"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Non\-temporal locality hints extension.
! .IP zihintpause 4
  .IX Item "zihintpause"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Pause hint extension.
! .IP zicboz 4
  .IX Item "zicboz"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache\-block zero extension.
! .IP zicbom 4
  .IX Item "zicbom"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache\-block management extension.
! .IP zicbop 4
  .IX Item "zicbop"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Cache\-block prefetch extension.
! .IP zic64b 4
  .IX Item "zic64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Cache block size isf 64 bytes.
! .IP ziccamoa 4
  .IX Item "ziccamoa"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports all atomics in A.
! .IP ziccif 4
  .IX Item "ziccif"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports instruction fetch with atomicity requirement.
! .IP zicclsm 4
  .IX Item "zicclsm"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Main memory supports misaligned loads/stores.
! .IP ziccrse 4
  .IX Item "ziccrse"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Main memory supports forward progress on LR/SC sequences.
! .IP zicntr 4
  .IX Item "zicntr"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for base counters and timers.
! .IP zihpm 4
  .IX Item "zihpm"
  \&\f(CW@tab\fR 2.0
  \&\f(CW@tab\fR Standard extension for hardware performance counters.
! .IP ztso 4
  .IX Item "ztso"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Total store ordering extension.
! .IP zve32x 4
  .IX Item "zve32x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve32f 4
  .IX Item "zve32f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve64x 4
  .IX Item "zve64x"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve64f 4
  .IX Item "zve64f"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zve64d 4
  .IX Item "zve64d"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector extensions for embedded processors.
! .IP zvl32b 4
  .IX Item "zvl32b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl64b 4
  .IX Item "zvl64b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl128b 4
  .IX Item "zvl128b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl256b 4
  .IX Item "zvl256b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl512b 4
  .IX Item "zvl512b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl1024b 4
  .IX Item "zvl1024b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl2048b 4
  .IX Item "zvl2048b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvl4096b 4
  .IX Item "zvl4096b"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Minimum vector length standard extensions
! .IP zvbb 4
  .IX Item "zvbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector basic bit\-manipulation extension.
! .IP zvbc 4
  .IX Item "zvbc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector carryless multiplication extension.
! .IP zvkb 4
  .IX Item "zvkb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector cryptography bit\-manipulation extension.
! .IP zvkg 4
  .IX Item "zvkg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector GCM/GMAC extension.
! .IP zvkned 4
  .IX Item "zvkned"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector AES block cipher extension.
! .IP zvknha 4
  .IX Item "zvknha"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SHA\-2 secure hash extension.
! .IP zvknhb 4
  .IX Item "zvknhb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SHA\-2 secure hash extension.
! .IP zvksed 4
  .IX Item "zvksed"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SM4 Block Cipher extension.
! .IP zvksh 4
  .IX Item "zvksh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector SM3 Secure Hash extension.
! .IP zvkn 4
  .IX Item "zvkn"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector NIST Algorithm Suite extension, \fBzvkn\fR will expand to
  \&\fBzvkned\fR, \fBzvknhb\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP zvknc 4
  .IX Item "zvknc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector NIST Algorithm Suite with carryless multiply extension, \fBzvknc\fR
  will expand to \fBzvkn\fR and \fBzvbc\fR.
! .IP zvkng 4
  .IX Item "zvkng"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector NIST Algorithm Suite with GCM extension, \fBzvkng\fR will expand
  to \fBzvkn\fR and \fBzvkg\fR.
! .IP zvks 4
  .IX Item "zvks"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite extension, \fBzvks\fR will expand
  to \fBzvksed\fR, \fBzvksh\fR, \fBzvkb\fR and \fBzvkt\fR.
! .IP zvksc 4
  .IX Item "zvksc"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector ShangMi algorithm suite with carryless multiplication extension,
  \&\fBzvksc\fR will expand to \fBzvks\fR and \fBzvbc\fR.
! .IP zvksg 4
  .IX Item "zvksg"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector ShangMi algorithm suite with GCM extension, \fBzvksg\fR will expand
  to \fBzvks\fR and \fBzvkg\fR.
! .IP zvkt 4
  .IX Item "zvkt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Vector data independent execution latency extension.
! .IP zfh 4
  .IX Item "zfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Half\-precision floating\-point extension.
! .IP zfhmin 4
  .IX Item "zfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Minimal half\-precision floating\-point extension.
! .IP zvfh 4
  .IX Item "zvfh"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector half\-precision floating\-point extension.
! .IP zvfhmin 4
  .IX Item "zvfhmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector minimal half\-precision floating\-point extension.
! .IP zvfbfmin 4
  .IX Item "zvfbfmin"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Vector BF16 converts extension.
! .IP zfa 4
  .IX Item "zfa"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Additional floating\-point extension.
! .IP zmmul 4
  .IX Item "zmmul"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer multiplication extension.
! .IP zca 4
  .IX Item "zca"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Integer compressed instruction extension.
! .IP zcf 4
  .IX Item "zcf"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed single\-precision floating point loads and stores extension.
! .IP zcd 4
  .IX Item "zcd"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Compressed double\-precision floating point loads and stores extension.
! .IP zcb 4
  .IX Item "zcb"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Simple compressed instruction extension.
! .IP zce 4
  .IX Item "zce"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed instruction extensions for embedded processors.
! .IP zcmp 4
  .IX Item "zcmp"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Compressed push pop extension.
! .IP zcmt 4
  .IX Item "zcmt"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Table jump instruction extension.
! .IP smaia 4
  .IX Item "smaia"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Advanced interrupt architecture extension.
! .IP smepmp 4
  .IX Item "smepmp"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR PMP Enhancements for memory access and execution prevention on Machine mode.
! .IP smstateen 4
  .IX Item "smstateen"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR State enable extension.
! .IP ssaia 4
  .IX Item "ssaia"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Advanced interrupt architecture extension for supervisor\-mode.
! .IP sscofpmf 4
  .IX Item "sscofpmf"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Count overflow & filtering extension.
! .IP ssstateen 4
  .IX Item "ssstateen"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR State\-enable extension for supervisor\-mode.
! .IP sstc 4
  .IX Item "sstc"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Supervisor\-mode timer interrupts extension.
! .IP svinval 4
  .IX Item "svinval"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Fine\-grained address\-translation cache invalidation extension.
! .IP svnapot 4
  .IX Item "svnapot"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR NAPOT translation contiguity extension.
! .IP svpbmt 4
  .IX Item "svpbmt"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Page\-based memory types extension.
! .IP xcvmac 4
  .IX Item "xcvmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core\-V multiply\-accumulate extension.
! .IP xcvalu 4
  .IX Item "xcvalu"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core\-V miscellaneous ALU extension.
! .IP xcvelw 4
  .IX Item "xcvelw"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR Core\-V event load word extension.
! .IP xtheadba 4
  .IX Item "xtheadba"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head address calculation extension.
! .IP xtheadbb 4
  .IX Item "xtheadbb"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head basic bit\-manipulation extension.
! .IP xtheadbs 4
  .IX Item "xtheadbs"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head single\-bit instructions extension.
! .IP xtheadcmo 4
  .IX Item "xtheadcmo"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head cache management operations extension.
! .IP xtheadcondmov 4
  .IX Item "xtheadcondmov"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head conditional move extension.
! .IP xtheadfmemidx 4
  .IX Item "xtheadfmemidx"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head indexed memory operations for floating\-point registers extension.
! .IP xtheadfmv 4
  .IX Item "xtheadfmv"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head double floating\-point high\-bit data transmission extension.
! .IP xtheadint 4
  .IX Item "xtheadint"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head acceleration interruption extension.
! .IP xtheadmac 4
  .IX Item "xtheadmac"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multiply\-accumulate extension.
! .IP xtheadmemidx 4
  .IX Item "xtheadmemidx"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR T\-head indexed memory operation extension.
! .IP xtheadmempair 4
  .IX Item "xtheadmempair"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head two\-GPR memory operation extension.
! .IP xtheadsync 4
  .IX Item "xtheadsync"
  \&\f(CW@tab\fR 1.0
! \&\f(CW@tab\fR T\-head multi\-core synchronization extension.
! .IP xventanacondops 4
  .IX Item "xventanacondops"
  \&\f(CW@tab\fR 1.0
  \&\f(CW@tab\fR Ventana integer conditional operations extension.
*************** If both \fB\-march\fR and \fB\-mcpu=\fR
*** 30110,30119 ****
  this argument is system dependent, users who want a specific architecture
  extensions should specify one explicitly.
  .RE
! .IP "\fB\-mcpu=\fR\fIprocessor-string\fR" 4
  .IX Item "-mcpu=processor-string"
  Use architecture of and optimize the output for the given processor, specified
! by particular \s-1CPU\s0 name.
  Permissible values for this option are: \fBsifive\-e20\fR, \fBsifive\-e21\fR,
  \&\fBsifive\-e24\fR, \fBsifive\-e31\fR, \fBsifive\-e34\fR, \fBsifive\-e76\fR,
  \&\fBsifive\-s21\fR, \fBsifive\-s51\fR, \fBsifive\-s54\fR, \fBsifive\-s76\fR,
--- 30045,30054 ----
  this argument is system dependent, users who want a specific architecture
  extensions should specify one explicitly.
  .RE
! .IP \fB\-mcpu=\fR\fIprocessor\-string\fR 4
  .IX Item "-mcpu=processor-string"
  Use architecture of and optimize the output for the given processor, specified
! by particular CPU name.
  Permissible values for this option are: \fBsifive\-e20\fR, \fBsifive\-e21\fR,
  \&\fBsifive\-e24\fR, \fBsifive\-e31\fR, \fBsifive\-e34\fR, \fBsifive\-e76\fR,
  \&\fBsifive\-s21\fR, \fBsifive\-s51\fR, \fBsifive\-s54\fR, \fBsifive\-s76\fR,
*************** Permissible values for this option are:
*** 30121,30130 ****
  \&\fBsifive\-x670\fR.
  .Sp
  Note that \fB\-mcpu\fR does not override \fB\-march\fR or \fB\-mtune\fR.
! .IP "\fB\-mtune=\fR\fIprocessor-string\fR" 4
  .IX Item "-mtune=processor-string"
  Optimize the output for the given processor, specified by microarchitecture or
! particular \s-1CPU\s0 name.  Permissible values for this option are: \fBrocket\fR,
  \&\fBsifive\-3\-series\fR, \fBsifive\-5\-series\fR, \fBsifive\-7\-series\fR,
  \&\fBthead\-c906\fR, \fBsize\fR, \fBsifive\-p400\-series\fR,
  \&\fBsifive\-p600\-series\fR, and all valid options for \fB\-mcpu=\fR.
--- 30056,30065 ----
  \&\fBsifive\-x670\fR.
  .Sp
  Note that \fB\-mcpu\fR does not override \fB\-march\fR or \fB\-mtune\fR.
! .IP \fB\-mtune=\fR\fIprocessor\-string\fR 4
  .IX Item "-mtune=processor-string"
  Optimize the output for the given processor, specified by microarchitecture or
! particular CPU name.  Permissible values for this option are: \fBrocket\fR,
  \&\fBsifive\-3\-series\fR, \fBsifive\-5\-series\fR, \fBsifive\-7\-series\fR,
  \&\fBthead\-c906\fR, \fBsize\fR, \fBsifive\-p400\-series\fR,
  \&\fBsifive\-p600\-series\fR, and all valid options for \fB\-mcpu=\fR.
*************** particular \s-1CPU\s0 name.  Permissible
*** 30132,30142 ****
  When \fB\-mtune=\fR is not specified, use the setting from \fB\-mcpu\fR,
  the default is \fBrocket\fR if both are not specified.
  .Sp
! The \fBsize\fR choice is not intended for use by end-users.  This is used
  when \fB\-Os\fR is specified.  It overrides the instruction cost info
  provided by \fB\-mtune=\fR, but does not override the pipeline info.  This
  helps reduce code size while still giving good performance.
! .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
--- 30067,30077 ----
  When \fB\-mtune=\fR is not specified, use the setting from \fB\-mcpu\fR,
  the default is \fBrocket\fR if both are not specified.
  .Sp
! The \fBsize\fR choice is not intended for use by end\-users.  This is used
  when \fB\-Os\fR is specified.  It overrides the instruction cost info
  provided by \fB\-mtune=\fR, but does not override the pipeline info.  This
  helps reduce code size while still giving good performance.
! .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
*************** the default is 4 (16 bytes or 128\-bits)
*** 30145,30196 ****
  \&\fBWarning:\fR If you use this switch, then you must build all modules with
  the same value, including any libraries.  This includes the system libraries
  and startup modules.
! .IP "\fB\-msmall\-data\-limit=\fR\fIn\fR" 4
  .IX Item "-msmall-data-limit=n"
  Put global and static data smaller than \fIn\fR bytes into a special section
  (on some targets).
! .IP "\fB\-msave\-restore\fR" 4
  .IX Item "-msave-restore"
  .PD 0
! .IP "\fB\-mno\-save\-restore\fR" 4
  .IX Item "-mno-save-restore"
  .PD
! Do or don't use smaller but slower prologue and epilogue code that uses
  library function calls.  The default is to use fast inline prologues and
  epilogues.
! .IP "\fB\-mmovcc\fR" 4
  .IX Item "-mmovcc"
  .PD 0
! .IP "\fB\-mno\-movcc\fR" 4
  .IX Item "-mno-movcc"
  .PD
! Do or don't produce branchless conditional-move code sequences even with
  targets that do not have specific instructions for conditional operations.
! If enabled, sequences of \s-1ALU\s0 operations are produced using base integer
! \&\s-1ISA\s0 instructions where profitable.
! .IP "\fB\-minline\-atomics\fR" 4
  .IX Item "-minline-atomics"
  .PD 0
! .IP "\fB\-mno\-inline\-atomics\fR" 4
  .IX Item "-mno-inline-atomics"
  .PD
! Do or don't use smaller but slower subword atomic emulation code that uses
  libatomic function calls.  The default is to use fast inline subword atomics
  that do not require libatomic.
! .IP "\fB\-minline\-strlen\fR" 4
  .IX Item "-minline-strlen"
  .PD 0
! .IP "\fB\-mno\-inline\-strlen\fR" 4
  .IX Item "-mno-inline-strlen"
  .PD
  Do or do not attempt to inline strlen calls if possible.
  Inlining will only be done if the string is properly aligned
  and instructions for accelerated processing are available.
  The default is to not inline strlen calls.
! .IP "\fB\-minline\-strcmp\fR" 4
  .IX Item "-minline-strcmp"
  .PD 0
! .IP "\fB\-mno\-inline\-strcmp\fR" 4
  .IX Item "-mno-inline-strcmp"
  .PD
  Do or do not attempt to inline strcmp calls if possible.
--- 30080,30131 ----
  \&\fBWarning:\fR If you use this switch, then you must build all modules with
  the same value, including any libraries.  This includes the system libraries
  and startup modules.
! .IP \fB\-msmall\-data\-limit=\fR\fIn\fR 4
  .IX Item "-msmall-data-limit=n"
  Put global and static data smaller than \fIn\fR bytes into a special section
  (on some targets).
! .IP \fB\-msave\-restore\fR 4
  .IX Item "-msave-restore"
  .PD 0
! .IP \fB\-mno\-save\-restore\fR 4
  .IX Item "-mno-save-restore"
  .PD
! Do or don\*(Aqt use smaller but slower prologue and epilogue code that uses
  library function calls.  The default is to use fast inline prologues and
  epilogues.
! .IP \fB\-mmovcc\fR 4
  .IX Item "-mmovcc"
  .PD 0
! .IP \fB\-mno\-movcc\fR 4
  .IX Item "-mno-movcc"
  .PD
! Do or don\*(Aqt produce branchless conditional\-move code sequences even with
  targets that do not have specific instructions for conditional operations.
! If enabled, sequences of ALU operations are produced using base integer
! ISA instructions where profitable.
! .IP \fB\-minline\-atomics\fR 4
  .IX Item "-minline-atomics"
  .PD 0
! .IP \fB\-mno\-inline\-atomics\fR 4
  .IX Item "-mno-inline-atomics"
  .PD
! Do or don\*(Aqt use smaller but slower subword atomic emulation code that uses
  libatomic function calls.  The default is to use fast inline subword atomics
  that do not require libatomic.
! .IP \fB\-minline\-strlen\fR 4
  .IX Item "-minline-strlen"
  .PD 0
! .IP \fB\-mno\-inline\-strlen\fR 4
  .IX Item "-mno-inline-strlen"
  .PD
  Do or do not attempt to inline strlen calls if possible.
  Inlining will only be done if the string is properly aligned
  and instructions for accelerated processing are available.
  The default is to not inline strlen calls.
! .IP \fB\-minline\-strcmp\fR 4
  .IX Item "-minline-strcmp"
  .PD 0
! .IP \fB\-mno\-inline\-strcmp\fR 4
  .IX Item "-mno-inline-strcmp"
  .PD
  Do or do not attempt to inline strcmp calls if possible.
*************** The default is to not inline strcmp call
*** 30201,30210 ****
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP "\fB\-minline\-strncmp\fR" 4
  .IX Item "-minline-strncmp"
  .PD 0
! .IP "\fB\-mno\-inline\-strncmp\fR" 4
  .IX Item "-mno-inline-strncmp"
  .PD
  Do or do not attempt to inline strncmp calls if possible.
--- 30136,30145 ----
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP \fB\-minline\-strncmp\fR 4
  .IX Item "-minline-strncmp"
  .PD 0
! .IP \fB\-mno\-inline\-strncmp\fR 4
  .IX Item "-mno-inline-strncmp"
  .PD
  Do or do not attempt to inline strncmp calls if possible.
*************** The default is to not inline strncmp cal
*** 30215,30314 ****
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP "\fB\-mshorten\-memrefs\fR" 4
  .IX Item "-mshorten-memrefs"
  .PD 0
! .IP "\fB\-mno\-shorten\-memrefs\fR" 4
  .IX Item "-mno-shorten-memrefs"
  .PD
  Do or do not attempt to make more use of compressed load/store instructions by
! replacing a load/store of 'base register + large offset' with a new load/store
! of 'new base + small offset'.  If the new base gets stored in a compressed
  register, then the new load/store can be compressed.  Currently targets 32\-bit
  integer load/stores only.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Do not or do generate unaligned memory accesses.  The default is set depending
  on whether the processor we are optimizing for supports fast unaligned access
  or not.
! .IP "\fB\-mcmodel=medlow\fR" 4
  .IX Item "-mcmodel=medlow"
! Generate code for the medium-low code model. The program and its statically
  defined symbols must lie within a single 2 GiB address range and must lie
  between absolute addresses \-2 GiB and +2 GiB. Programs can be
  statically or dynamically linked. This is the default code model.
! .IP "\fB\-mcmodel=medany\fR" 4
  .IX Item "-mcmodel=medany"
! Generate code for the medium-any code model. The program and its statically
  defined symbols must be within any single 2 GiB address range. Programs can be
  statically or dynamically linked.
  .Sp
! The code generated by the medium-any code model is position-independent, but is
! not guaranteed to function correctly when linked into position-independent
  executables or libraries.
! .IP "\fB\-mexplicit\-relocs\fR" 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP "\fB\-mno\-exlicit\-relocs\fR" 4
  .IX Item "-mno-exlicit-relocs"
  .PD
  Use or do not use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit optimization.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  .PD 0
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
  .PD
  Take advantage of linker relaxations to reduce the number of instructions
  required to materialize symbol addresses. The default is to take advantage of
  linker relaxations.
! .IP "\fB\-mriscv\-attribute\fR" 4
  .IX Item "-mriscv-attribute"
  .PD 0
! .IP "\fB\-mno\-riscv\-attribute\fR" 4
  .IX Item "-mno-riscv-attribute"
  .PD
! Emit (do not emit) RISC-V attribute to record extra information into \s-1ELF\s0
  objects.  This feature requires at least binutils 2.32.
! .IP "\fB\-mcsr\-check\fR" 4
  .IX Item "-mcsr-check"
  .PD 0
! .IP "\fB\-mno\-csr\-check\fR" 4
  .IX Item "-mno-csr-check"
  .PD
! Enables or disables the \s-1CSR\s0 checking.
! .IP "\fB\-malign\-data=\fR\fItype\fR" 4
  .IX Item "-malign-data=type"
! Control how \s-1GCC\s0 aligns variables and constants of array, structure, or union
  types.  Supported values for \fItype\fR are \fBxlen\fR which uses x register
  width as the alignment value, and \fBnatural\fR which uses natural alignment.
  \&\fBxlen\fR is the default.
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
! Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for a
  \&\fBriscv64be\-*\-*\fR or \fBriscv32be\-*\-*\fR target.
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
! Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for a
  \&\fBriscv64\-*\-*\fR or \fBriscv32\-*\-*\fR but not a \fBriscv64be\-*\-*\fR or
  \&\fBriscv32be\-*\-*\fR target.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for a global canary or \fBtls\fR for per-thread
! canary in the \s-1TLS\s0 block.
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
--- 30150,30249 ----
  The \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
! .IP \fB\-mshorten\-memrefs\fR 4
  .IX Item "-mshorten-memrefs"
  .PD 0
! .IP \fB\-mno\-shorten\-memrefs\fR 4
  .IX Item "-mno-shorten-memrefs"
  .PD
  Do or do not attempt to make more use of compressed load/store instructions by
! replacing a load/store of \*(Aqbase register + large offset\*(Aq with a new load/store
! of \*(Aqnew base + small offset\*(Aq.  If the new base gets stored in a compressed
  register, then the new load/store can be compressed.  Currently targets 32\-bit
  integer load/stores only.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Do not or do generate unaligned memory accesses.  The default is set depending
  on whether the processor we are optimizing for supports fast unaligned access
  or not.
! .IP \fB\-mcmodel=medlow\fR 4
  .IX Item "-mcmodel=medlow"
! Generate code for the medium\-low code model. The program and its statically
  defined symbols must lie within a single 2 GiB address range and must lie
  between absolute addresses \-2 GiB and +2 GiB. Programs can be
  statically or dynamically linked. This is the default code model.
! .IP \fB\-mcmodel=medany\fR 4
  .IX Item "-mcmodel=medany"
! Generate code for the medium\-any code model. The program and its statically
  defined symbols must be within any single 2 GiB address range. Programs can be
  statically or dynamically linked.
  .Sp
! The code generated by the medium\-any code model is position\-independent, but is
! not guaranteed to function correctly when linked into position\-independent
  executables or libraries.
! .IP \fB\-mexplicit\-relocs\fR 4
  .IX Item "-mexplicit-relocs"
  .PD 0
! .IP \fB\-mno\-exlicit\-relocs\fR 4
  .IX Item "-mno-exlicit-relocs"
  .PD
  Use or do not use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit optimization.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  .PD 0
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
  .PD
  Take advantage of linker relaxations to reduce the number of instructions
  required to materialize symbol addresses. The default is to take advantage of
  linker relaxations.
! .IP \fB\-mriscv\-attribute\fR 4
  .IX Item "-mriscv-attribute"
  .PD 0
! .IP \fB\-mno\-riscv\-attribute\fR 4
  .IX Item "-mno-riscv-attribute"
  .PD
! Emit (do not emit) RISC\-V attribute to record extra information into ELF
  objects.  This feature requires at least binutils 2.32.
! .IP \fB\-mcsr\-check\fR 4
  .IX Item "-mcsr-check"
  .PD 0
! .IP \fB\-mno\-csr\-check\fR 4
  .IX Item "-mno-csr-check"
  .PD
! Enables or disables the CSR checking.
! .IP \fB\-malign\-data=\fR\fItype\fR 4
  .IX Item "-malign-data=type"
! Control how GCC aligns variables and constants of array, structure, or union
  types.  Supported values for \fItype\fR are \fBxlen\fR which uses x register
  width as the alignment value, and \fBnatural\fR which uses natural alignment.
  \&\fBxlen\fR is the default.
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
! Generate big\-endian code.  This is the default when GCC is configured for a
  \&\fBriscv64be\-*\-*\fR or \fBriscv32be\-*\-*\fR target.
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
! Generate little\-endian code.  This is the default when GCC is configured for a
  \&\fBriscv64\-*\-*\fR or \fBriscv32\-*\-*\fR but not a \fBriscv64be\-*\-*\fR or
  \&\fBriscv32be\-*\-*\fR target.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for a global canary or \fBtls\fR for per\-thread
! canary in the TLS block.
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
*************** which register to use as base register f
*** 30317,30373 ****
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP "\fB\-mtls\-dialect=desc\fR" 4
  .IX Item "-mtls-dialect=desc"
! Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.
! .IP "\fB\-mtls\-dialect=trad\fR" 4
  .IX Item "-mtls-dialect=trad"
! Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
! of \s-1TLS\s0 variables.  This is the default.
  .PP
! \fI\s-1RL78\s0 Options\fR
  .IX Subsection "RL78 Options"
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Links in additional target libraries to support operation within a
  simulator.
! .IP "\fB\-mmul=none\fR" 4
  .IX Item "-mmul=none"
  .PD 0
! .IP "\fB\-mmul=g10\fR" 4
  .IX Item "-mmul=g10"
! .IP "\fB\-mmul=g13\fR" 4
  .IX Item "-mmul=g13"
! .IP "\fB\-mmul=g14\fR" 4
  .IX Item "-mmul=g14"
! .IP "\fB\-mmul=rl78\fR" 4
  .IX Item "-mmul=rl78"
  .PD
  Specifies the type of hardware multiplication and division support to
  be used.  The simplest is \f(CW\*(C`none\*(C'\fR, which uses software for both
  multiplication and division.  This is the default.  The \f(CW\*(C`g13\*(C'\fR
  value is for the hardware multiply/divide peripheral found on the
! \&\s-1RL78/G13\s0 (S2 core) targets.  The \f(CW\*(C`g14\*(C'\fR value selects the use of
! the multiplication and division instructions supported by the \s-1RL78/G14\s0
  (S3 core) parts.  The value \f(CW\*(C`rl78\*(C'\fR is an alias for \f(CW\*(C`g14\*(C'\fR and
  the value \f(CW\*(C`mg10\*(C'\fR is an alias for \f(CW\*(C`none\*(C'\fR.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR.
! .IP "\fB\-mcpu=g10\fR" 4
  .IX Item "-mcpu=g10"
  .PD 0
! .IP "\fB\-mcpu=g13\fR" 4
  .IX Item "-mcpu=g13"
! .IP "\fB\-mcpu=g14\fR" 4
  .IX Item "-mcpu=g14"
! .IP "\fB\-mcpu=rl78\fR" 4
  .IX Item "-mcpu=rl78"
  .PD
! Specifies the \s-1RL78\s0 core to target.  The default is the G14 core, also
! known as an S3 core or just \s-1RL78.\s0  The G13 or S2 core does not have
  multiply or divide instructions, instead it uses a hardware peripheral
  for these operations.  The G10 or S1 core does not have register
  banks, so it uses a different calling convention.
--- 30252,30308 ----
  and from what offset from that base register. There is no default
  register or offset as this is entirely for use within the Linux
  kernel.
! .IP \fB\-mtls\-dialect=desc\fR 4
  .IX Item "-mtls-dialect=desc"
! Use TLS descriptors as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.
! .IP \fB\-mtls\-dialect=trad\fR 4
  .IX Item "-mtls-dialect=trad"
! Use traditional TLS as the thread\-local storage mechanism for dynamic accesses
! of TLS variables.  This is the default.
  .PP
! \fIRL78 Options\fR
  .IX Subsection "RL78 Options"
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Links in additional target libraries to support operation within a
  simulator.
! .IP \fB\-mmul=none\fR 4
  .IX Item "-mmul=none"
  .PD 0
! .IP \fB\-mmul=g10\fR 4
  .IX Item "-mmul=g10"
! .IP \fB\-mmul=g13\fR 4
  .IX Item "-mmul=g13"
! .IP \fB\-mmul=g14\fR 4
  .IX Item "-mmul=g14"
! .IP \fB\-mmul=rl78\fR 4
  .IX Item "-mmul=rl78"
  .PD
  Specifies the type of hardware multiplication and division support to
  be used.  The simplest is \f(CW\*(C`none\*(C'\fR, which uses software for both
  multiplication and division.  This is the default.  The \f(CW\*(C`g13\*(C'\fR
  value is for the hardware multiply/divide peripheral found on the
! RL78/G13 (S2 core) targets.  The \f(CW\*(C`g14\*(C'\fR value selects the use of
! the multiplication and division instructions supported by the RL78/G14
  (S3 core) parts.  The value \f(CW\*(C`rl78\*(C'\fR is an alias for \f(CW\*(C`g14\*(C'\fR and
  the value \f(CW\*(C`mg10\*(C'\fR is an alias for \f(CW\*(C`none\*(C'\fR.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR.
! .IP \fB\-mcpu=g10\fR 4
  .IX Item "-mcpu=g10"
  .PD 0
! .IP \fB\-mcpu=g13\fR 4
  .IX Item "-mcpu=g13"
! .IP \fB\-mcpu=g14\fR 4
  .IX Item "-mcpu=g14"
! .IP \fB\-mcpu=rl78\fR 4
  .IX Item "-mcpu=rl78"
  .PD
! Specifies the RL78 core to target.  The default is the G14 core, also
! known as an S3 core or just RL78.  The G13 or S2 core does not have
  multiply or divide instructions, instead it uses a hardware peripheral
  for these operations.  The G10 or S1 core does not have register
  banks, so it uses a different calling convention.
*************** support to use, unless this is overridde
*** 30379,30520 ****
  peripheral and specifying \fB\-mcpu=g10\fR disables the use of
  hardware multiplications altogether.
  .Sp
! Note, although the \s-1RL78/G14\s0 core is the default target, specifying
  \&\fB\-mcpu=g14\fR or \fB\-mcpu=rl78\fR on the command line does
  change the behavior of the toolchain since it also enables G14
  hardware multiply support.  If these options are not specified on the
  command line then software multiplication routines will be used even
! though the code targets the \s-1RL78\s0 core.  This is for backwards
  compatibility with older toolchains which did not have hardware
  multiply and divide support.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_G10_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_G14_\|_\*(C'\fR.
! .IP "\fB\-mg10\fR" 4
  .IX Item "-mg10"
  .PD 0
! .IP "\fB\-mg13\fR" 4
  .IX Item "-mg13"
! .IP "\fB\-mg14\fR" 4
  .IX Item "-mg14"
! .IP "\fB\-mrl78\fR" 4
  .IX Item "-mrl78"
  .PD
  These are aliases for the corresponding \fB\-mcpu=\fR option.  They
  are provided for backwards compatibility.
! .IP "\fB\-mallregs\fR" 4
  .IX Item "-mallregs"
  Allow the compiler to use all of the available registers.  By default
  registers \f(CW\*(C`r24..r31\*(C'\fR are reserved for use in interrupt handlers.
  With this option enabled these registers can be used in ordinary
  functions as well.
! .IP "\fB\-m64bit\-doubles\fR" 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP "\fB\-m32bit\-doubles\fR" 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
  \&\fB\-m32bit\-doubles\fR.
! .IP "\fB\-msave\-mduc\-in\-interrupts\fR" 4
  .IX Item "-msave-mduc-in-interrupts"
  .PD 0
! .IP "\fB\-mno\-save\-mduc\-in\-interrupts\fR" 4
  .IX Item "-mno-save-mduc-in-interrupts"
  .PD
  Specifies that interrupt handler functions should preserve the
! \&\s-1MDUC\s0 registers.  This is only necessary if normal code might use
! the \s-1MDUC\s0 registers, for example because it performs multiplication
! and division operations.  The default is to ignore the \s-1MDUC\s0 registers
  as this makes the interrupt handlers faster.  The target option \-mg13
  needs to be passed for this to work as this feature is only available
! on the G13 target (S2 core).  The \s-1MDUC\s0 registers will only be saved
  if the interrupt handler performs a multiplication or division
  operation or it calls another function.
  .PP
! \fI\s-1IBM RS/6000\s0 and PowerPC Options\fR
  .IX Subsection "IBM RS/6000 and PowerPC Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1IBM RS/6000\s0 and PowerPC:
! .IP "\fB\-mpowerpc\-gpopt\fR" 4
  .IX Item "-mpowerpc-gpopt"
  .PD 0
! .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
  .IX Item "-mno-powerpc-gpopt"
! .IP "\fB\-mpowerpc\-gfxopt\fR" 4
  .IX Item "-mpowerpc-gfxopt"
! .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
  .IX Item "-mno-powerpc-gfxopt"
! .IP "\fB\-mpowerpc64\fR" 4
  .IX Item "-mpowerpc64"
! .IP "\fB\-mno\-powerpc64\fR" 4
  .IX Item "-mno-powerpc64"
! .IP "\fB\-mmfcrf\fR" 4
  .IX Item "-mmfcrf"
! .IP "\fB\-mno\-mfcrf\fR" 4
  .IX Item "-mno-mfcrf"
! .IP "\fB\-mpopcntb\fR" 4
  .IX Item "-mpopcntb"
! .IP "\fB\-mno\-popcntb\fR" 4
  .IX Item "-mno-popcntb"
! .IP "\fB\-mpopcntd\fR" 4
  .IX Item "-mpopcntd"
! .IP "\fB\-mno\-popcntd\fR" 4
  .IX Item "-mno-popcntd"
! .IP "\fB\-mfprnd\fR" 4
  .IX Item "-mfprnd"
! .IP "\fB\-mno\-fprnd\fR" 4
  .IX Item "-mno-fprnd"
! .IP "\fB\-mcmpb\fR" 4
  .IX Item "-mcmpb"
! .IP "\fB\-mno\-cmpb\fR" 4
  .IX Item "-mno-cmpb"
! .IP "\fB\-mhard\-dfp\fR" 4
  .IX Item "-mhard-dfp"
! .IP "\fB\-mno\-hard\-dfp\fR" 4
  .IX Item "-mno-hard-dfp"
  .PD
  You use these options to specify which instructions are available on the
  processor you are using.  The default value of these options is
! determined when configuring \s-1GCC.\s0  Specifying the
  \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
  options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
  rather than the options listed above.
  .Sp
  Specifying \fB\-mpowerpc\-gpopt\fR allows
! \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
! General Purpose group, including floating-point square root.  Specifying
! \&\fB\-mpowerpc\-gfxopt\fR allows \s-1GCC\s0 to
  use the optional PowerPC architecture instructions in the Graphics
! group, including floating-point select.
  .Sp
! The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
! condition register field instruction implemented on the \s-1POWER4\s0
  processor and other processors that support the PowerPC V2.01
  architecture.
! The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
! double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
! \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
  architecture.
! The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
! instruction implemented on the \s-1POWER7\s0 processor and other processors
  that support the PowerPC V2.06 architecture.
! The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
! integer instructions implemented on the \s-1POWER5+\s0 processor and other
  processors that support the PowerPC V2.03 architecture.
! The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
! instruction implemented on the \s-1POWER6\s0 processor and other processors
  that support the PowerPC V2.05 architecture.
! The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
! floating-point instructions implemented on some \s-1POWER\s0 processors.
  .Sp
! The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
  64\-bit instructions that are found in the full PowerPC64 architecture
! and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
  \&\fB\-mno\-powerpc64\fR.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set architecture type, register usage, and
  instruction scheduling parameters for machine type \fIcpu_type\fR.
--- 30314,30455 ----
  peripheral and specifying \fB\-mcpu=g10\fR disables the use of
  hardware multiplications altogether.
  .Sp
! Note, although the RL78/G14 core is the default target, specifying
  \&\fB\-mcpu=g14\fR or \fB\-mcpu=rl78\fR on the command line does
  change the behavior of the toolchain since it also enables G14
  hardware multiply support.  If these options are not specified on the
  command line then software multiplication routines will be used even
! though the code targets the RL78 core.  This is for backwards
  compatibility with older toolchains which did not have hardware
  multiply and divide support.
  .Sp
  In addition a C preprocessor macro is defined, based upon the setting
  of this option.  Possible values are: \f(CW\*(C`_\|_RL78_G10_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_RL78_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_G14_\|_\*(C'\fR.
! .IP \fB\-mg10\fR 4
  .IX Item "-mg10"
  .PD 0
! .IP \fB\-mg13\fR 4
  .IX Item "-mg13"
! .IP \fB\-mg14\fR 4
  .IX Item "-mg14"
! .IP \fB\-mrl78\fR 4
  .IX Item "-mrl78"
  .PD
  These are aliases for the corresponding \fB\-mcpu=\fR option.  They
  are provided for backwards compatibility.
! .IP \fB\-mallregs\fR 4
  .IX Item "-mallregs"
  Allow the compiler to use all of the available registers.  By default
  registers \f(CW\*(C`r24..r31\*(C'\fR are reserved for use in interrupt handlers.
  With this option enabled these registers can be used in ordinary
  functions as well.
! .IP \fB\-m64bit\-doubles\fR 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP \fB\-m32bit\-doubles\fR 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
  \&\fB\-m32bit\-doubles\fR.
! .IP \fB\-msave\-mduc\-in\-interrupts\fR 4
  .IX Item "-msave-mduc-in-interrupts"
  .PD 0
! .IP \fB\-mno\-save\-mduc\-in\-interrupts\fR 4
  .IX Item "-mno-save-mduc-in-interrupts"
  .PD
  Specifies that interrupt handler functions should preserve the
! MDUC registers.  This is only necessary if normal code might use
! the MDUC registers, for example because it performs multiplication
! and division operations.  The default is to ignore the MDUC registers
  as this makes the interrupt handlers faster.  The target option \-mg13
  needs to be passed for this to work as this feature is only available
! on the G13 target (S2 core).  The MDUC registers will only be saved
  if the interrupt handler performs a multiplication or division
  operation or it calls another function.
  .PP
! \fIIBM RS/6000 and PowerPC Options\fR
  .IX Subsection "IBM RS/6000 and PowerPC Options"
  .PP
! These \fB\-m\fR options are defined for the IBM RS/6000 and PowerPC:
! .IP \fB\-mpowerpc\-gpopt\fR 4
  .IX Item "-mpowerpc-gpopt"
  .PD 0
! .IP \fB\-mno\-powerpc\-gpopt\fR 4
  .IX Item "-mno-powerpc-gpopt"
! .IP \fB\-mpowerpc\-gfxopt\fR 4
  .IX Item "-mpowerpc-gfxopt"
! .IP \fB\-mno\-powerpc\-gfxopt\fR 4
  .IX Item "-mno-powerpc-gfxopt"
! .IP \fB\-mpowerpc64\fR 4
  .IX Item "-mpowerpc64"
! .IP \fB\-mno\-powerpc64\fR 4
  .IX Item "-mno-powerpc64"
! .IP \fB\-mmfcrf\fR 4
  .IX Item "-mmfcrf"
! .IP \fB\-mno\-mfcrf\fR 4
  .IX Item "-mno-mfcrf"
! .IP \fB\-mpopcntb\fR 4
  .IX Item "-mpopcntb"
! .IP \fB\-mno\-popcntb\fR 4
  .IX Item "-mno-popcntb"
! .IP \fB\-mpopcntd\fR 4
  .IX Item "-mpopcntd"
! .IP \fB\-mno\-popcntd\fR 4
  .IX Item "-mno-popcntd"
! .IP \fB\-mfprnd\fR 4
  .IX Item "-mfprnd"
! .IP \fB\-mno\-fprnd\fR 4
  .IX Item "-mno-fprnd"
! .IP \fB\-mcmpb\fR 4
  .IX Item "-mcmpb"
! .IP \fB\-mno\-cmpb\fR 4
  .IX Item "-mno-cmpb"
! .IP \fB\-mhard\-dfp\fR 4
  .IX Item "-mhard-dfp"
! .IP \fB\-mno\-hard\-dfp\fR 4
  .IX Item "-mno-hard-dfp"
  .PD
  You use these options to specify which instructions are available on the
  processor you are using.  The default value of these options is
! determined when configuring GCC.  Specifying the
  \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
  options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
  rather than the options listed above.
  .Sp
  Specifying \fB\-mpowerpc\-gpopt\fR allows
! GCC to use the optional PowerPC architecture instructions in the
! General Purpose group, including floating\-point square root.  Specifying
! \&\fB\-mpowerpc\-gfxopt\fR allows GCC to
  use the optional PowerPC architecture instructions in the Graphics
! group, including floating\-point select.
  .Sp
! The \fB\-mmfcrf\fR option allows GCC to generate the move from
! condition register field instruction implemented on the POWER4
  processor and other processors that support the PowerPC V2.01
  architecture.
! The \fB\-mpopcntb\fR option allows GCC to generate the popcount and
! double\-precision FP reciprocal estimate instruction implemented on the
! POWER5 processor and other processors that support the PowerPC V2.02
  architecture.
! The \fB\-mpopcntd\fR option allows GCC to generate the popcount
! instruction implemented on the POWER7 processor and other processors
  that support the PowerPC V2.06 architecture.
! The \fB\-mfprnd\fR option allows GCC to generate the FP round to
! integer instructions implemented on the POWER5+ processor and other
  processors that support the PowerPC V2.03 architecture.
! The \fB\-mcmpb\fR option allows GCC to generate the compare bytes
! instruction implemented on the POWER6 processor and other processors
  that support the PowerPC V2.05 architecture.
! The \fB\-mhard\-dfp\fR option allows GCC to generate the decimal
! floating\-point instructions implemented on some POWER processors.
  .Sp
! The \fB\-mpowerpc64\fR option allows GCC to generate the additional
  64\-bit instructions that are found in the full PowerPC64 architecture
! and to treat GPRs as 64\-bit, doubleword quantities.  GCC defaults to
  \&\fB\-mno\-powerpc64\fR.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set architecture type, register usage, and
  instruction scheduling parameters for machine type \fIcpu_type\fR.
*************** model assumed for scheduling purposes.
*** 30540,30546 ****
  Specifying \fBnative\fR as cpu type detects and selects the
  architecture option that corresponds to the host processor of the
  system performing the compilation.
! \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize the
  processor.
  .Sp
  The other options specify a specific processor.  Code generated under
--- 30475,30481 ----
  Specifying \fBnative\fR as cpu type detects and selects the
  architecture option that corresponds to the host processor of the
  system performing the compilation.
! \&\fB\-mcpu=native\fR has no effect if GCC does not recognize the
  processor.
  .Sp
  The other options specify a specific processor.  Code generated under
*************** following options:
*** 30559,30577 ****
  \&\-mfloat128\-hardware \-mprefixed \-mpcrel \-mmma
  \&\-mrop\-protect\fR
  .Sp
! The particular options set for any particular \s-1CPU\s0 varies between
  compiler versions, depending on what setting seems to produce optimal
! code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
  capabilities.  If you wish to set an individual option to a particular
  value, you may specify it after the \fB\-mcpu\fR option, like
  \&\fB\-mcpu=970 \-mno\-altivec\fR.
  .Sp
! On \s-1AIX,\s0 the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
  not enabled or disabled by the \fB\-mcpu\fR option at present because
! \&\s-1AIX\s0 does not have full support for these options.  You may still
! enable or disable them individually if you're sure it'll work in your
  environment.
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the architecture type or register usage,
--- 30494,30512 ----
  \&\-mfloat128\-hardware \-mprefixed \-mpcrel \-mmma
  \&\-mrop\-protect\fR
  .Sp
! The particular options set for any particular CPU varies between
  compiler versions, depending on what setting seems to produce optimal
! code for that CPU; it doesn\*(Aqt necessarily reflect the actual hardware\*(Aqs
  capabilities.  If you wish to set an individual option to a particular
  value, you may specify it after the \fB\-mcpu\fR option, like
  \&\fB\-mcpu=970 \-mno\-altivec\fR.
  .Sp
! On AIX, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
  not enabled or disabled by the \fB\-mcpu\fR option at present because
! AIX does not have full support for these options.  You may still
! enable or disable them individually if you\*(Aqre sure it\*(Aqll work in your
  environment.
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the architecture type or register usage,
*************** values for \fIcpu_type\fR are used for \
*** 30580,30864 ****
  \&\fB\-mcpu\fR.  If both are specified, the code generated uses the
  architecture and registers set by \fB\-mcpu\fR, but the
  scheduling parameters set by \fB\-mtune\fR.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
! Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
  64k.
! .IP "\fB\-mcmodel=medium\fR" 4
  .IX Item "-mcmodel=medium"
! Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
  data may be up to a total of 4G in size.  This is the default for 64\-bit
  Linux.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
! Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
  in size.  Other data and code is only limited by the 64\-bit address
  space.
! .IP "\fB\-maltivec\fR" 4
  .IX Item "-maltivec"
  .PD 0
! .IP "\fB\-mno\-altivec\fR" 4
  .IX Item "-mno-altivec"
  .PD
  Generate code that uses (does not use) AltiVec instructions, and also
! enable the use of built-in functions that allow more direct access to
  the AltiVec instruction set.  You may also need to set
! \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
  enhancements.
  .Sp
  When \fB\-maltivec\fR is used, the element order for AltiVec intrinsics
  such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
  match array element order corresponding to the endianness of the
  target.  That is, element zero identifies the leftmost element in a
! vector register when targeting a big-endian platform, and identifies
  the rightmost element in a vector register when targeting a
! little-endian platform.
! .IP "\fB\-mvrsave\fR" 4
  .IX Item "-mvrsave"
  .PD 0
! .IP "\fB\-mno\-vrsave\fR" 4
  .IX Item "-mno-vrsave"
  .PD
! Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
! .IP "\fB\-msecure\-plt\fR" 4
  .IX Item "-msecure-plt"
  Generate code that allows \fBld\fR and \fBld.so\fR
  to build executables and shared
! libraries with non-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
  This is a PowerPC
! 32\-bit \s-1SYSV ABI\s0 option.
! .IP "\fB\-mbss\-plt\fR" 4
  .IX Item "-mbss-plt"
! Generate code that uses a \s-1BSS\s0 \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
  fills in, and
  requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
  sections that are both writable and executable.
! This is a PowerPC 32\-bit \s-1SYSV ABI\s0 option.
! .IP "\fB\-misel\fR" 4
  .IX Item "-misel"
  .PD 0
! .IP "\fB\-mno\-isel\fR" 4
  .IX Item "-mno-isel"
  .PD
! This switch enables or disables the generation of \s-1ISEL\s0 instructions.
! .IP "\fB\-mvsx\fR" 4
  .IX Item "-mvsx"
  .PD 0
! .IP "\fB\-mno\-vsx\fR" 4
  .IX Item "-mno-vsx"
  .PD
! Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
! instructions, and also enable the use of built-in functions that allow
! more direct access to the \s-1VSX\s0 instruction set.
! .IP "\fB\-mcrypto\fR" 4
  .IX Item "-mcrypto"
  .PD 0
! .IP "\fB\-mno\-crypto\fR" 4
  .IX Item "-mno-crypto"
  .PD
! Enable the use (disable) of the built-in functions that allow direct
  access to the cryptographic instructions that were added in version
! 2.07 of the PowerPC \s-1ISA.\s0
! .IP "\fB\-mhtm\fR" 4
  .IX Item "-mhtm"
  .PD 0
! .IP "\fB\-mno\-htm\fR" 4
  .IX Item "-mno-htm"
  .PD
! Enable (disable) the use of the built-in functions that allow direct
! access to the Hardware Transactional Memory (\s-1HTM\s0) instructions that
! were added in version 2.07 of the PowerPC \s-1ISA.\s0
! .IP "\fB\-mpower8\-fusion\fR" 4
  .IX Item "-mpower8-fusion"
  .PD 0
! .IP "\fB\-mno\-power8\-fusion\fR" 4
  .IX Item "-mno-power8-fusion"
  .PD
  Generate code that keeps (does not keeps) some integer operations
  adjacent so that the instructions can be fused together on power8 and
  later processors.
! .IP "\fB\-mquad\-memory\fR" 4
  .IX Item "-mquad-memory"
  .PD 0
! .IP "\fB\-mno\-quad\-memory\fR" 4
  .IX Item "-mno-quad-memory"
  .PD
! Generate code that uses (does not use) the non-atomic quad word memory
  instructions.  The \fB\-mquad\-memory\fR option requires use of
  64\-bit mode.
! .IP "\fB\-mquad\-memory\-atomic\fR" 4
  .IX Item "-mquad-memory-atomic"
  .PD 0
! .IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
  .IX Item "-mno-quad-memory-atomic"
  .PD
  Generate code that uses (does not use) the atomic quad word memory
  instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
  64\-bit mode.
! .IP "\fB\-mfloat128\fR" 4
  .IX Item "-mfloat128"
  .PD 0
! .IP "\fB\-mno\-float128\fR" 4
  .IX Item "-mno-float128"
  .PD
! Enable/disable the \fI_\|_float128\fR keyword for \s-1IEEE\s0 128\-bit floating point
! and use either software emulation for \s-1IEEE\s0 128\-bit floating point or
  hardware instructions.
  .Sp
! The \s-1VSX\s0 instruction set (\fB\-mvsx\fR) must be enabled to use the \s-1IEEE\s0
! 128\-bit floating point support.  The \s-1IEEE\s0 128\-bit floating point is only
  supported on Linux.
  .Sp
  The default for \fB\-mfloat128\fR is enabled on PowerPC Linux
! systems using the \s-1VSX\s0 instruction set, and disabled on other systems.
  .Sp
! If you use the \s-1ISA 3.0\s0 instruction set (\fB\-mcpu=power9\fR) on a
! 64\-bit system, the \s-1IEEE\s0 128\-bit floating point support will also enable
! the generation of \s-1ISA 3.0 IEEE\s0 128\-bit floating point instructions.
! Otherwise, if you do not specify to generate \s-1ISA 3.0\s0 instructions or you
! are targeting a 32\-bit big endian system, \s-1IEEE\s0 128\-bit floating point
  will be done with software emulation.
! .IP "\fB\-mfloat128\-hardware\fR" 4
  .IX Item "-mfloat128-hardware"
  .PD 0
! .IP "\fB\-mno\-float128\-hardware\fR" 4
  .IX Item "-mno-float128-hardware"
  .PD
! Enable/disable using \s-1ISA 3.0\s0 hardware instructions to support the
  \&\fI_\|_float128\fR data type.
  .Sp
  The default for \fB\-mfloat128\-hardware\fR is enabled on PowerPC
! Linux systems using the \s-1ISA 3.0\s0 instruction set, and disabled on other
  systems.
! .IP "\fB\-m32\fR" 4
  .IX Item "-m32"
  .PD 0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
  .PD
! Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
  targets (including GNU/Linux).  The 32\-bit environment sets int, long
  and pointer to 32 bits and generates code that runs on any PowerPC
  variant.  The 64\-bit environment sets int to 32 bits and long and
  pointer to 64 bits, and generates code for PowerPC64, as for
  \&\fB\-mpowerpc64\fR.
! .IP "\fB\-mfull\-toc\fR" 4
  .IX Item "-mfull-toc"
  .PD 0
! .IP "\fB\-mno\-fp\-in\-toc\fR" 4
  .IX Item "-mno-fp-in-toc"
! .IP "\fB\-mno\-sum\-in\-toc\fR" 4
  .IX Item "-mno-sum-in-toc"
! .IP "\fB\-mminimal\-toc\fR" 4
  .IX Item "-mminimal-toc"
  .PD
! Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
  every executable file.  The \fB\-mfull\-toc\fR option is selected by
! default.  In that case, \s-1GCC\s0 allocates at least one \s-1TOC\s0 entry for
! each unique non-automatic variable reference in your program.  \s-1GCC\s0
! also places floating-point constants in the \s-1TOC.\s0  However, only
! 16,384 entries are available in the \s-1TOC.\s0
  .Sp
  If you receive a linker error message that saying you have overflowed
! the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
  with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
! \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
! constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
  generate code to calculate the sum of an address and a constant at
! run time instead of putting that sum into the \s-1TOC.\s0  You may specify one
! or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
! slower and larger code at the expense of conserving \s-1TOC\s0 space.
  .Sp
! If you still run out of space in the \s-1TOC\s0 even when you specify both of
  these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
! \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
! option, \s-1GCC\s0 produces code that is slower and larger but which
! uses extremely little \s-1TOC\s0 space.  You may wish to use this option
! only on files that contain less frequently-executed code.
! .IP "\fB\-maix64\fR" 4
  .IX Item "-maix64"
  .PD 0
! .IP "\fB\-maix32\fR" 4
  .IX Item "-maix32"
  .PD
! Enable 64\-bit \s-1AIX ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
  \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
  Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
! while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
! implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
! .IP "\fB\-mxl\-compat\fR" 4
  .IX Item "-mxl-compat"
  .PD 0
! .IP "\fB\-mno\-xl\-compat\fR" 4
  .IX Item "-mno-xl-compat"
  .PD
! Produce code that conforms more closely to \s-1IBM XL\s0 compiler semantics
! when using AIX-compatible \s-1ABI.\s0  Pass floating-point arguments to
! prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
  in addition to argument FPRs.  Do not assume that most significant
  double in 128\-bit long double value is properly rounded when comparing
! values and converting to double.  Use \s-1XL\s0 symbol names for long double
  support routines.
  .Sp
! The \s-1AIX\s0 calling convention was extended but not initially documented to
  handle an obscure K&R C case of calling a function that takes the
! address of its arguments with fewer arguments than declared.  \s-1IBM XL\s0
! compilers access floating-point arguments that do not fit in the
! \&\s-1RSA\s0 from the stack when a subroutine is compiled without
! optimization.  Because always storing floating-point arguments on the
  stack is inefficient and rarely needed, this option is not enabled by
! default and only is necessary when calling subroutines compiled by \s-1IBM
! XL\s0 compilers without optimization.
! .IP "\fB\-mpe\fR" 4
  .IX Item "-mpe"
! Support \fI\s-1IBM RS/6000 SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
  application written to use message passing with special startup code to
! enable the application to run.  The system must have \s-1PE\s0 installed in the
  standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
  must be overridden with the \fB\-specs=\fR option to specify the
  appropriate directory location.  The Parallel Environment does not
  support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
  option are incompatible.
! .IP "\fB\-malign\-natural\fR" 4
  .IX Item "-malign-natural"
  .PD 0
! .IP "\fB\-malign\-power\fR" 4
  .IX Item "-malign-power"
  .PD
! On \s-1AIX,\s0 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
! \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
! types, such as floating-point doubles, on their natural size-based boundary.
! The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
! alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI.\s0
  .Sp
  On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
  is not supported.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Generate code that does not use (uses) the floating-point register set.
! Software floating-point emulation is provided if you use the
! \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
! .IP "\fB\-mmultiple\fR" 4
  .IX Item "-mmultiple"
  .PD 0
! .IP "\fB\-mno\-multiple\fR" 4
  .IX Item "-mno-multiple"
  .PD
  Generate code that uses (does not use) the load multiple word
  instructions and the store multiple word instructions.  These
! instructions are generated by default on \s-1POWER\s0 systems, and not
! generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
  PowerPC systems, since those instructions do not work when the
! processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
! \&\s-1PPC750\s0 which permit these instructions in little-endian mode.
! .IP "\fB\-mupdate\fR" 4
  .IX Item "-mupdate"
  .PD 0
! .IP "\fB\-mno\-update\fR" 4
  .IX Item "-mno-update"
  .PD
  Generate code that uses (does not use) the load or store instructions
--- 30515,30799 ----
  \&\fB\-mcpu\fR.  If both are specified, the code generated uses the
  architecture and registers set by \fB\-mcpu\fR, but the
  scheduling parameters set by \fB\-mtune\fR.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
! Generate PowerPC64 code for the small model: The TOC is limited to
  64k.
! .IP \fB\-mcmodel=medium\fR 4
  .IX Item "-mcmodel=medium"
! Generate PowerPC64 code for the medium model: The TOC and other static
  data may be up to a total of 4G in size.  This is the default for 64\-bit
  Linux.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
! Generate PowerPC64 code for the large model: The TOC may be up to 4G
  in size.  Other data and code is only limited by the 64\-bit address
  space.
! .IP \fB\-maltivec\fR 4
  .IX Item "-maltivec"
  .PD 0
! .IP \fB\-mno\-altivec\fR 4
  .IX Item "-mno-altivec"
  .PD
  Generate code that uses (does not use) AltiVec instructions, and also
! enable the use of built\-in functions that allow more direct access to
  the AltiVec instruction set.  You may also need to set
! \&\fB\-mabi=altivec\fR to adjust the current ABI with AltiVec ABI
  enhancements.
  .Sp
  When \fB\-maltivec\fR is used, the element order for AltiVec intrinsics
  such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
  match array element order corresponding to the endianness of the
  target.  That is, element zero identifies the leftmost element in a
! vector register when targeting a big\-endian platform, and identifies
  the rightmost element in a vector register when targeting a
! little\-endian platform.
! .IP \fB\-mvrsave\fR 4
  .IX Item "-mvrsave"
  .PD 0
! .IP \fB\-mno\-vrsave\fR 4
  .IX Item "-mno-vrsave"
  .PD
! Generate VRSAVE instructions when generating AltiVec code.
! .IP \fB\-msecure\-plt\fR 4
  .IX Item "-msecure-plt"
  Generate code that allows \fBld\fR and \fBld.so\fR
  to build executables and shared
! libraries with non\-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
  This is a PowerPC
! 32\-bit SYSV ABI option.
! .IP \fB\-mbss\-plt\fR 4
  .IX Item "-mbss-plt"
! Generate code that uses a BSS \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
  fills in, and
  requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
  sections that are both writable and executable.
! This is a PowerPC 32\-bit SYSV ABI option.
! .IP \fB\-misel\fR 4
  .IX Item "-misel"
  .PD 0
! .IP \fB\-mno\-isel\fR 4
  .IX Item "-mno-isel"
  .PD
! This switch enables or disables the generation of ISEL instructions.
! .IP \fB\-mvsx\fR 4
  .IX Item "-mvsx"
  .PD 0
! .IP \fB\-mno\-vsx\fR 4
  .IX Item "-mno-vsx"
  .PD
! Generate code that uses (does not use) vector/scalar (VSX)
! instructions, and also enable the use of built\-in functions that allow
! more direct access to the VSX instruction set.
! .IP \fB\-mcrypto\fR 4
  .IX Item "-mcrypto"
  .PD 0
! .IP \fB\-mno\-crypto\fR 4
  .IX Item "-mno-crypto"
  .PD
! Enable the use (disable) of the built\-in functions that allow direct
  access to the cryptographic instructions that were added in version
! 2.07 of the PowerPC ISA.
! .IP \fB\-mhtm\fR 4
  .IX Item "-mhtm"
  .PD 0
! .IP \fB\-mno\-htm\fR 4
  .IX Item "-mno-htm"
  .PD
! Enable (disable) the use of the built\-in functions that allow direct
! access to the Hardware Transactional Memory (HTM) instructions that
! were added in version 2.07 of the PowerPC ISA.
! .IP \fB\-mpower8\-fusion\fR 4
  .IX Item "-mpower8-fusion"
  .PD 0
! .IP \fB\-mno\-power8\-fusion\fR 4
  .IX Item "-mno-power8-fusion"
  .PD
  Generate code that keeps (does not keeps) some integer operations
  adjacent so that the instructions can be fused together on power8 and
  later processors.
! .IP \fB\-mquad\-memory\fR 4
  .IX Item "-mquad-memory"
  .PD 0
! .IP \fB\-mno\-quad\-memory\fR 4
  .IX Item "-mno-quad-memory"
  .PD
! Generate code that uses (does not use) the non\-atomic quad word memory
  instructions.  The \fB\-mquad\-memory\fR option requires use of
  64\-bit mode.
! .IP \fB\-mquad\-memory\-atomic\fR 4
  .IX Item "-mquad-memory-atomic"
  .PD 0
! .IP \fB\-mno\-quad\-memory\-atomic\fR 4
  .IX Item "-mno-quad-memory-atomic"
  .PD
  Generate code that uses (does not use) the atomic quad word memory
  instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
  64\-bit mode.
! .IP \fB\-mfloat128\fR 4
  .IX Item "-mfloat128"
  .PD 0
! .IP \fB\-mno\-float128\fR 4
  .IX Item "-mno-float128"
  .PD
! Enable/disable the \fI_\|_float128\fR keyword for IEEE 128\-bit floating point
! and use either software emulation for IEEE 128\-bit floating point or
  hardware instructions.
  .Sp
! The VSX instruction set (\fB\-mvsx\fR) must be enabled to use the IEEE
! 128\-bit floating point support.  The IEEE 128\-bit floating point is only
  supported on Linux.
  .Sp
  The default for \fB\-mfloat128\fR is enabled on PowerPC Linux
! systems using the VSX instruction set, and disabled on other systems.
  .Sp
! If you use the ISA 3.0 instruction set (\fB\-mcpu=power9\fR) on a
! 64\-bit system, the IEEE 128\-bit floating point support will also enable
! the generation of ISA 3.0 IEEE 128\-bit floating point instructions.
! Otherwise, if you do not specify to generate ISA 3.0 instructions or you
! are targeting a 32\-bit big endian system, IEEE 128\-bit floating point
  will be done with software emulation.
! .IP \fB\-mfloat128\-hardware\fR 4
  .IX Item "-mfloat128-hardware"
  .PD 0
! .IP \fB\-mno\-float128\-hardware\fR 4
  .IX Item "-mno-float128-hardware"
  .PD
! Enable/disable using ISA 3.0 hardware instructions to support the
  \&\fI_\|_float128\fR data type.
  .Sp
  The default for \fB\-mfloat128\-hardware\fR is enabled on PowerPC
! Linux systems using the ISA 3.0 instruction set, and disabled on other
  systems.
! .IP \fB\-m32\fR 4
  .IX Item "-m32"
  .PD 0
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
  .PD
! Generate code for 32\-bit or 64\-bit environments of Darwin and SVR4
  targets (including GNU/Linux).  The 32\-bit environment sets int, long
  and pointer to 32 bits and generates code that runs on any PowerPC
  variant.  The 64\-bit environment sets int to 32 bits and long and
  pointer to 64 bits, and generates code for PowerPC64, as for
  \&\fB\-mpowerpc64\fR.
! .IP \fB\-mfull\-toc\fR 4
  .IX Item "-mfull-toc"
  .PD 0
! .IP \fB\-mno\-fp\-in\-toc\fR 4
  .IX Item "-mno-fp-in-toc"
! .IP \fB\-mno\-sum\-in\-toc\fR 4
  .IX Item "-mno-sum-in-toc"
! .IP \fB\-mminimal\-toc\fR 4
  .IX Item "-mminimal-toc"
  .PD
! Modify generation of the TOC (Table Of Contents), which is created for
  every executable file.  The \fB\-mfull\-toc\fR option is selected by
! default.  In that case, GCC allocates at least one TOC entry for
! each unique non\-automatic variable reference in your program.  GCC
! also places floating\-point constants in the TOC.  However, only
! 16,384 entries are available in the TOC.
  .Sp
  If you receive a linker error message that saying you have overflowed
! the available TOC space, you can reduce the amount of TOC space used
  with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
! \&\fB\-mno\-fp\-in\-toc\fR prevents GCC from putting floating\-point
! constants in the TOC and \fB\-mno\-sum\-in\-toc\fR forces GCC to
  generate code to calculate the sum of an address and a constant at
! run time instead of putting that sum into the TOC.  You may specify one
! or both of these options.  Each causes GCC to produce very slightly
! slower and larger code at the expense of conserving TOC space.
  .Sp
! If you still run out of space in the TOC even when you specify both of
  these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
! GCC to make only one TOC entry for every file.  When you specify this
! option, GCC produces code that is slower and larger but which
! uses extremely little TOC space.  You may wish to use this option
! only on files that contain less frequently\-executed code.
! .IP \fB\-maix64\fR 4
  .IX Item "-maix64"
  .PD 0
! .IP \fB\-maix32\fR 4
  .IX Item "-maix32"
  .PD
! Enable 64\-bit AIX ABI and calling convention: 64\-bit pointers, 64\-bit
  \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
  Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
! while \fB\-maix32\fR disables the 64\-bit ABI and
! implies \fB\-mno\-powerpc64\fR.  GCC defaults to \fB\-maix32\fR.
! .IP \fB\-mxl\-compat\fR 4
  .IX Item "-mxl-compat"
  .PD 0
! .IP \fB\-mno\-xl\-compat\fR 4
  .IX Item "-mno-xl-compat"
  .PD
! Produce code that conforms more closely to IBM XL compiler semantics
! when using AIX\-compatible ABI.  Pass floating\-point arguments to
! prototyped functions beyond the register save area (RSA) on the stack
  in addition to argument FPRs.  Do not assume that most significant
  double in 128\-bit long double value is properly rounded when comparing
! values and converting to double.  Use XL symbol names for long double
  support routines.
  .Sp
! The AIX calling convention was extended but not initially documented to
  handle an obscure K&R C case of calling a function that takes the
! address of its arguments with fewer arguments than declared.  IBM XL
! compilers access floating\-point arguments that do not fit in the
! RSA from the stack when a subroutine is compiled without
! optimization.  Because always storing floating\-point arguments on the
  stack is inefficient and rarely needed, this option is not enabled by
! default and only is necessary when calling subroutines compiled by IBM
! XL compilers without optimization.
! .IP \fB\-mpe\fR 4
  .IX Item "-mpe"
! Support \fIIBM RS/6000 SP\fR \fIParallel Environment\fR (PE).  Link an
  application written to use message passing with special startup code to
! enable the application to run.  The system must have PE installed in the
  standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
  must be overridden with the \fB\-specs=\fR option to specify the
  appropriate directory location.  The Parallel Environment does not
  support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
  option are incompatible.
! .IP \fB\-malign\-natural\fR 4
  .IX Item "-malign-natural"
  .PD 0
! .IP \fB\-malign\-power\fR 4
  .IX Item "-malign-power"
  .PD
! On AIX, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
! \&\fB\-malign\-natural\fR overrides the ABI\-defined alignment of larger
! types, such as floating\-point doubles, on their natural size\-based boundary.
! The option \fB\-malign\-power\fR instructs GCC to follow the ABI\-specified
! alignment rules.  GCC defaults to the standard alignment defined in the ABI.
  .Sp
  On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
  is not supported.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Generate code that does not use (uses) the floating\-point register set.
! Software floating\-point emulation is provided if you use the
! \&\fB\-msoft\-float\fR option, and pass the option to GCC when linking.
! .IP \fB\-mmultiple\fR 4
  .IX Item "-mmultiple"
  .PD 0
! .IP \fB\-mno\-multiple\fR 4
  .IX Item "-mno-multiple"
  .PD
  Generate code that uses (does not use) the load multiple word
  instructions and the store multiple word instructions.  These
! instructions are generated by default on POWER systems, and not
! generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little\-endian
  PowerPC systems, since those instructions do not work when the
! processor is in little\-endian mode.  The exceptions are PPC740 and
! PPC750 which permit these instructions in little\-endian mode.
! .IP \fB\-mupdate\fR 4
  .IX Item "-mupdate"
  .PD 0
! .IP \fB\-mno\-update\fR 4
  .IX Item "-mno-update"
  .PD
  Generate code that uses (does not use) the load or store instructions
*************** location.  These instructions are genera
*** 30868,30877 ****
  stack pointer is updated and the address of the previous frame is
  stored, which means code that walks the stack frame across interrupts or
  signals may get corrupted data.
! .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
  .IX Item "-mavoid-indexed-addresses"
  .PD 0
! .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
  .IX Item "-mno-avoid-indexed-addresses"
  .PD
  Generate code that tries to avoid (not avoid) the use of indexed load
--- 30803,30812 ----
  stack pointer is updated and the address of the previous frame is
  stored, which means code that walks the stack frame across interrupts or
  signals may get corrupted data.
! .IP \fB\-mavoid\-indexed\-addresses\fR 4
  .IX Item "-mavoid-indexed-addresses"
  .PD 0
! .IP \fB\-mno\-avoid\-indexed\-addresses\fR 4
  .IX Item "-mno-avoid-indexed-addresses"
  .PD
  Generate code that tries to avoid (not avoid) the use of indexed load
*************** or store instructions. These instruction
*** 30879,30942 ****
  penalty on Power6 processors in certain situations, such as when
  stepping through large arrays that cross a 16M boundary.  This option
  is enabled by default when targeting Power6 and disabled otherwise.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP "\fB\-mmulhw\fR" 4
  .IX Item "-mmulhw"
  .PD 0
! .IP "\fB\-mno\-mulhw\fR" 4
  .IX Item "-mno-mulhw"
  .PD
! Generate code that uses (does not use) the half-word multiply and
! multiply-accumulate instructions on the \s-1IBM 405, 440, 464\s0 and 476 processors.
  These instructions are generated by default when targeting those
  processors.
! .IP "\fB\-mdlmzb\fR" 4
  .IX Item "-mdlmzb"
  .PD 0
! .IP "\fB\-mno\-dlmzb\fR" 4
  .IX Item "-mno-dlmzb"
  .PD
! Generate code that uses (does not use) the string-search \fBdlmzb\fR
! instruction on the \s-1IBM 405, 440, 464\s0 and 476 processors.  This instruction is
  generated by default when targeting those processors.
! .IP "\fB\-mno\-bit\-align\fR" 4
  .IX Item "-mno-bit-align"
  .PD 0
! .IP "\fB\-mbit\-align\fR" 4
  .IX Item "-mbit-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) force structures
! and unions that contain bit-fields to be aligned to the base type of the
! bit-field.
  .Sp
  For example, by default a structure containing nothing but 8
! \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
  boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
  the structure is aligned to a 1\-byte boundary and is 1 byte in
  size.
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  unaligned memory references are handled by the system.
! .IP "\fB\-mrelocatable\fR" 4
  .IX Item "-mrelocatable"
  .PD 0
! .IP "\fB\-mno\-relocatable\fR" 4
  .IX Item "-mno-relocatable"
  .PD
  Generate code that allows (does not allow) a static executable to be
--- 30814,30877 ----
  penalty on Power6 processors in certain situations, such as when
  stepping through large arrays that cross a 16M boundary.  This option
  is enabled by default when targeting Power6 and disabled otherwise.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating\-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine\-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine\-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP \fB\-mmulhw\fR 4
  .IX Item "-mmulhw"
  .PD 0
! .IP \fB\-mno\-mulhw\fR 4
  .IX Item "-mno-mulhw"
  .PD
! Generate code that uses (does not use) the half\-word multiply and
! multiply\-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
  These instructions are generated by default when targeting those
  processors.
! .IP \fB\-mdlmzb\fR 4
  .IX Item "-mdlmzb"
  .PD 0
! .IP \fB\-mno\-dlmzb\fR 4
  .IX Item "-mno-dlmzb"
  .PD
! Generate code that uses (does not use) the string\-search \fBdlmzb\fR
! instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
  generated by default when targeting those processors.
! .IP \fB\-mno\-bit\-align\fR 4
  .IX Item "-mno-bit-align"
  .PD 0
! .IP \fB\-mbit\-align\fR 4
  .IX Item "-mbit-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) force structures
! and unions that contain bit\-fields to be aligned to the base type of the
! bit\-field.
  .Sp
  For example, by default a structure containing nothing but 8
! \&\f(CW\*(C`unsigned\*(C'\fR bit\-fields of length 1 is aligned to a 4\-byte
  boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
  the structure is aligned to a 1\-byte boundary and is 1 byte in
  size.
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD 0
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  unaligned memory references are handled by the system.
! .IP \fB\-mrelocatable\fR 4
  .IX Item "-mrelocatable"
  .PD 0
! .IP \fB\-mno\-relocatable\fR 4
  .IX Item "-mno-relocatable"
  .PD
  Generate code that allows (does not allow) a static executable to be
*************** a table of 32\-bit addresses generated b
*** 30947,30956 ****
  work, all objects linked together must be compiled with
  \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
  \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
! .IP "\fB\-mrelocatable\-lib\fR" 4
  .IX Item "-mrelocatable-lib"
  .PD 0
! .IP "\fB\-mno\-relocatable\-lib\fR" 4
  .IX Item "-mno-relocatable-lib"
  .PD
  Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
--- 30882,30891 ----
  work, all objects linked together must be compiled with
  \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
  \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
! .IP \fB\-mrelocatable\-lib\fR 4
  .IX Item "-mrelocatable-lib"
  .PD 0
! .IP \fB\-mno\-relocatable\-lib\fR 4
  .IX Item "-mno-relocatable-lib"
  .PD
  Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
*************** run time, but \fB\-mrelocatable\-lib\fR
*** 30959,31214 ****
  alignment of \fB\-mrelocatable\fR.  Objects compiled with
  \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
  any combination of the \fB\-mrelocatable\fR options.
! .IP "\fB\-mno\-toc\fR" 4
  .IX Item "-mno-toc"
  .PD 0
! .IP "\fB\-mtoc\fR" 4
  .IX Item "-mtoc"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  register 2 contains a pointer to a global area pointing to the addresses
  used in the program.
! .IP "\fB\-mlittle\fR" 4
  .IX Item "-mlittle"
  .PD 0
! .IP "\fB\-mlittle\-endian\fR" 4
  .IX Item "-mlittle-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
  the same as \fB\-mlittle\fR.
! .IP "\fB\-mbig\fR" 4
  .IX Item "-mbig"
  .PD 0
! .IP "\fB\-mbig\-endian\fR" 4
  .IX Item "-mbig-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
  the same as \fB\-mbig\fR.
! .IP "\fB\-mdynamic\-no\-pic\fR" 4
  .IX Item "-mdynamic-no-pic"
  On Darwin / macOS systems, compile code so that it is not
  relocatable, but that its external references are relocatable.  The
  resulting code is suitable for applications, but not shared
  libraries.
! .IP "\fB\-msingle\-pic\-base\fR" 4
  .IX Item "-msingle-pic-base"
! Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
  .IX Item "-mprioritize-restricted-insns=priority"
  This option controls the priority that is assigned to
! dispatch-slot restricted instructions during the second scheduling
  pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
! or \fB2\fR to assign no, highest, or second-highest (respectively) 
! priority to dispatch-slot restricted
  instructions.
! .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
  .IX Item "-msched-costly-dep=dependence_type"
  This option controls which dependences are considered costly
  by the target during instruction scheduling.  The argument
  \&\fIdependence_type\fR takes one of the following values:
  .RS 4
! .IP "\fBno\fR" 4
  .IX Item "no"
  No dependence is costly.
! .IP "\fBall\fR" 4
  .IX Item "all"
  All dependences are costly.
! .IP "\fBtrue_store_to_load\fR" 4
  .IX Item "true_store_to_load"
  A true dependence from store to load is costly.
! .IP "\fBstore_to_load\fR" 4
  .IX Item "store_to_load"
  Any dependence from store to load is costly.
! .IP "\fInumber\fR" 4
  .IX Item "number"
  Any dependence for which the latency is greater than or equal to 
  \&\fInumber\fR is costly.
  .RE
  .RS 4
  .RE
! .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
  .IX Item "-minsert-sched-nops=scheme"
! This option controls which \s-1NOP\s0 insertion scheme is used during
  the second scheduling pass.  The argument \fIscheme\fR takes one of the
  following values:
  .RS 4
! .IP "\fBno\fR" 4
  .IX Item "no"
! Don't insert NOPs.
! .IP "\fBpad\fR" 4
  .IX Item "pad"
  Pad with NOPs any dispatch group that has vacant issue slots,
! according to the scheduler's grouping.
! .IP "\fBregroup_exact\fR" 4
  .IX Item "regroup_exact"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert exactly as many NOPs as needed to force an insn
  to a new group, according to the estimated processor grouping.
! .IP "\fInumber\fR" 4
  .IX Item "number"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mcall\-sysv\fR" 4
  .IX Item "-mcall-sysv"
  On System V.4 and embedded PowerPC systems compile code using calling
  conventions that adhere to the March 1995 draft of the System V
  Application Binary Interface, PowerPC processor supplement.  This is the
! default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
! .IP "\fB\-mcall\-sysv\-eabi\fR" 4
  .IX Item "-mcall-sysv-eabi"
  .PD 0
! .IP "\fB\-mcall\-eabi\fR" 4
  .IX Item "-mcall-eabi"
  .PD
  Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
! .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
  .IX Item "-mcall-sysv-noeabi"
  Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
! .IP "\fB\-mcall\-aixdesc\fR" 4
  .IX Item "-mcall-aixdesc"
! On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
  operating system.
! .IP "\fB\-mcall\-linux\fR" 4
  .IX Item "-mcall-linux"
  On System V.4 and embedded PowerPC systems compile code for the
! Linux-based \s-1GNU\s0 system.
! .IP "\fB\-mcall\-freebsd\fR" 4
  .IX Item "-mcall-freebsd"
  On System V.4 and embedded PowerPC systems compile code for the
  FreeBSD operating system.
! .IP "\fB\-mcall\-netbsd\fR" 4
  .IX Item "-mcall-netbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  NetBSD operating system.
! .IP "\fB\-mcall\-openbsd\fR" 4
  .IX Item "-mcall-openbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  OpenBSD operating system.
! .IP "\fB\-mtraceback=\fR\fItraceback_type\fR" 4
  .IX Item "-mtraceback=traceback_type"
  Select the type of traceback table. Valid values for \fItraceback_type\fR
  are \fBfull\fR, \fBpart\fR, and \fBno\fR.
! .IP "\fB\-maix\-struct\-return\fR" 4
  .IX Item "-maix-struct-return"
! Return all structures in memory (as specified by the \s-1AIX ABI\s0).
! .IP "\fB\-msvr4\-struct\-return\fR" 4
  .IX Item "-msvr4-struct-return"
  Return structures smaller than 8 bytes in registers (as specified by the
! \&\s-1SVR4 ABI\s0).
! .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
  .IX Item "-mabi=abi-type"
! Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
! Valid values are: \fBaltivec\fR, \fBno-altivec\fR,
  \&\fBibmlongdouble\fR, \fBieeelongdouble\fR,
  \&\fBelfv1\fR, \fBelfv2\fR,
! and for \s-1AIX:\s0 \fBvec-extabi\fR, \fBvec-default\fR.
! .IP "\fB\-mabi=ibmlongdouble\fR" 4
  .IX Item "-mabi=ibmlongdouble"
! Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
! This is not likely to work if your system defaults to using \s-1IEEE\s0
! extended-precision long double.  If you change the long double type
! from \s-1IEEE\s0 extended-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP "\fB\-mabi=ieeelongdouble\fR" 4
  .IX Item "-mabi=ieeelongdouble"
! Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
! This is not likely to work if your system defaults to using \s-1IBM\s0
! extended-precision long double.  If you change the long double type
! from \s-1IBM\s0 extended-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP "\fB\-mabi=elfv1\fR" 4
  .IX Item "-mabi=elfv1"
! Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI.\s0
! This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
! Overriding the default \s-1ABI\s0 requires special system support and is
  likely to fail in spectacular ways.
! .IP "\fB\-mabi=elfv2\fR" 4
  .IX Item "-mabi=elfv2"
! Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI.\s0
! This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
! Overriding the default \s-1ABI\s0 requires special system support and is
  likely to fail in spectacular ways.
! .IP "\fB\-mgnu\-attribute\fR" 4
  .IX Item "-mgnu-attribute"
  .PD 0
! .IP "\fB\-mno\-gnu\-attribute\fR" 4
  .IX Item "-mno-gnu-attribute"
  .PD
  Emit .gnu_attribute assembly directives to set tag/value pairs in a
! \&.gnu.attributes section that specify \s-1ABI\s0 variations in function
  parameters or return values.
! .IP "\fB\-mprototype\fR" 4
  .IX Item "-mprototype"
  .PD 0
! .IP "\fB\-mno\-prototype\fR" 4
  .IX Item "-mno-prototype"
  .PD
  On System V.4 and embedded PowerPC systems assume that all calls to
  variable argument functions are properly prototyped.  Otherwise, the
! compiler must insert an instruction before every non-prototyped call to
  set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
! indicate whether floating-point values are passed in the floating-point
  registers in case the function takes variable arguments.  With
  \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
  set or clear the bit.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
  \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
  configurations.
! .IP "\fB\-mmvme\fR" 4
  .IX Item "-mmvme"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
  \&\fIlibc.a\fR.
! .IP "\fB\-mads\fR" 4
  .IX Item "-mads"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
  \&\fIlibc.a\fR.
! .IP "\fB\-myellowknife\fR" 4
  .IX Item "-myellowknife"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
  \&\fIlibc.a\fR.
! .IP "\fB\-mvxworks\fR" 4
  .IX Item "-mvxworks"
  On System V.4 and embedded PowerPC systems, specify that you are
  compiling for a VxWorks system.
! .IP "\fB\-memb\fR" 4
  .IX Item "-memb"
! On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the \s-1ELF\s0 flags
  header to indicate that \fBeabi\fR extended relocations are used.
! .IP "\fB\-meabi\fR" 4
  .IX Item "-meabi"
  .PD 0
! .IP "\fB\-mno\-eabi\fR" 4
  .IX Item "-mno-eabi"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) adhere to the
! Embedded Applications Binary Interface (\s-1EABI\s0), which is a set of
  modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
  means that the stack is aligned to an 8\-byte boundary, a function
! \&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the \s-1EABI\s0
  environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
  \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
  \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
! no \s-1EABI\s0 initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
  \&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
  small data area.  The \fB\-meabi\fR option is on by default if you
! configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
! .IP "\fB\-msdata=eabi\fR" 4
  .IX Item "-msdata=eabi"
  On System V.4 and embedded PowerPC systems, put small initialized
  \&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
--- 30894,31149 ----
  alignment of \fB\-mrelocatable\fR.  Objects compiled with
  \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
  any combination of the \fB\-mrelocatable\fR options.
! .IP \fB\-mno\-toc\fR 4
  .IX Item "-mno-toc"
  .PD 0
! .IP \fB\-mtoc\fR 4
  .IX Item "-mtoc"
  .PD
  On System V.4 and embedded PowerPC systems do not (do) assume that
  register 2 contains a pointer to a global area pointing to the addresses
  used in the program.
! .IP \fB\-mlittle\fR 4
  .IX Item "-mlittle"
  .PD 0
! .IP \fB\-mlittle\-endian\fR 4
  .IX Item "-mlittle-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in little\-endian mode.  The \fB\-mlittle\-endian\fR option is
  the same as \fB\-mlittle\fR.
! .IP \fB\-mbig\fR 4
  .IX Item "-mbig"
  .PD 0
! .IP \fB\-mbig\-endian\fR 4
  .IX Item "-mbig-endian"
  .PD
  On System V.4 and embedded PowerPC systems compile code for the
! processor in big\-endian mode.  The \fB\-mbig\-endian\fR option is
  the same as \fB\-mbig\fR.
! .IP \fB\-mdynamic\-no\-pic\fR 4
  .IX Item "-mdynamic-no-pic"
  On Darwin / macOS systems, compile code so that it is not
  relocatable, but that its external references are relocatable.  The
  resulting code is suitable for applications, but not shared
  libraries.
! .IP \fB\-msingle\-pic\-base\fR 4
  .IX Item "-msingle-pic-base"
! Treat the register used for PIC addressing as read\-only, rather than
  loading it in the prologue for each function.  The runtime system is
  responsible for initializing this register with an appropriate value
  before execution begins.
! .IP \fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 4
  .IX Item "-mprioritize-restricted-insns=priority"
  This option controls the priority that is assigned to
! dispatch\-slot restricted instructions during the second scheduling
  pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
! or \fB2\fR to assign no, highest, or second\-highest (respectively) 
! priority to dispatch\-slot restricted
  instructions.
! .IP \fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 4
  .IX Item "-msched-costly-dep=dependence_type"
  This option controls which dependences are considered costly
  by the target during instruction scheduling.  The argument
  \&\fIdependence_type\fR takes one of the following values:
  .RS 4
! .IP \fBno\fR 4
  .IX Item "no"
  No dependence is costly.
! .IP \fBall\fR 4
  .IX Item "all"
  All dependences are costly.
! .IP \fBtrue_store_to_load\fR 4
  .IX Item "true_store_to_load"
  A true dependence from store to load is costly.
! .IP \fBstore_to_load\fR 4
  .IX Item "store_to_load"
  Any dependence from store to load is costly.
! .IP \fInumber\fR 4
  .IX Item "number"
  Any dependence for which the latency is greater than or equal to 
  \&\fInumber\fR is costly.
  .RE
  .RS 4
  .RE
! .IP \fB\-minsert\-sched\-nops=\fR\fIscheme\fR 4
  .IX Item "-minsert-sched-nops=scheme"
! This option controls which NOP insertion scheme is used during
  the second scheduling pass.  The argument \fIscheme\fR takes one of the
  following values:
  .RS 4
! .IP \fBno\fR 4
  .IX Item "no"
! Don\*(Aqt insert NOPs.
! .IP \fBpad\fR 4
  .IX Item "pad"
  Pad with NOPs any dispatch group that has vacant issue slots,
! according to the scheduler\*(Aqs grouping.
! .IP \fBregroup_exact\fR 4
  .IX Item "regroup_exact"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert exactly as many NOPs as needed to force an insn
  to a new group, according to the estimated processor grouping.
! .IP \fInumber\fR 4
  .IX Item "number"
  Insert NOPs to force costly dependent insns into
  separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
  .RE
  .RS 4
  .RE
! .IP \fB\-mcall\-sysv\fR 4
  .IX Item "-mcall-sysv"
  On System V.4 and embedded PowerPC systems compile code using calling
  conventions that adhere to the March 1995 draft of the System V
  Application Binary Interface, PowerPC processor supplement.  This is the
! default unless you configured GCC using \fBpowerpc\-*\-eabiaix\fR.
! .IP \fB\-mcall\-sysv\-eabi\fR 4
  .IX Item "-mcall-sysv-eabi"
  .PD 0
! .IP \fB\-mcall\-eabi\fR 4
  .IX Item "-mcall-eabi"
  .PD
  Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
! .IP \fB\-mcall\-sysv\-noeabi\fR 4
  .IX Item "-mcall-sysv-noeabi"
  Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
! .IP \fB\-mcall\-aixdesc\fR 4
  .IX Item "-mcall-aixdesc"
! On System V.4 and embedded PowerPC systems compile code for the AIX
  operating system.
! .IP \fB\-mcall\-linux\fR 4
  .IX Item "-mcall-linux"
  On System V.4 and embedded PowerPC systems compile code for the
! Linux\-based GNU system.
! .IP \fB\-mcall\-freebsd\fR 4
  .IX Item "-mcall-freebsd"
  On System V.4 and embedded PowerPC systems compile code for the
  FreeBSD operating system.
! .IP \fB\-mcall\-netbsd\fR 4
  .IX Item "-mcall-netbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  NetBSD operating system.
! .IP \fB\-mcall\-openbsd\fR 4
  .IX Item "-mcall-openbsd"
  On System V.4 and embedded PowerPC systems compile code for the
  OpenBSD operating system.
! .IP \fB\-mtraceback=\fR\fItraceback_type\fR 4
  .IX Item "-mtraceback=traceback_type"
  Select the type of traceback table. Valid values for \fItraceback_type\fR
  are \fBfull\fR, \fBpart\fR, and \fBno\fR.
! .IP \fB\-maix\-struct\-return\fR 4
  .IX Item "-maix-struct-return"
! Return all structures in memory (as specified by the AIX ABI).
! .IP \fB\-msvr4\-struct\-return\fR 4
  .IX Item "-msvr4-struct-return"
  Return structures smaller than 8 bytes in registers (as specified by the
! SVR4 ABI).
! .IP \fB\-mabi=\fR\fIabi\-type\fR 4
  .IX Item "-mabi=abi-type"
! Extend the current ABI with a particular extension, or remove such extension.
! Valid values are: \fBaltivec\fR, \fBno\-altivec\fR,
  \&\fBibmlongdouble\fR, \fBieeelongdouble\fR,
  \&\fBelfv1\fR, \fBelfv2\fR,
! and for AIX: \fBvec\-extabi\fR, \fBvec\-default\fR.
! .IP \fB\-mabi=ibmlongdouble\fR 4
  .IX Item "-mabi=ibmlongdouble"
! Change the current ABI to use IBM extended\-precision long double.
! This is not likely to work if your system defaults to using IEEE
! extended\-precision long double.  If you change the long double type
! from IEEE extended\-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP \fB\-mabi=ieeelongdouble\fR 4
  .IX Item "-mabi=ieeelongdouble"
! Change the current ABI to use IEEE extended\-precision long double.
! This is not likely to work if your system defaults to using IBM
! extended\-precision long double.  If you change the long double type
! from IBM extended\-precision, the compiler will issue a warning unless
  you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
  to be enabled.
! .IP \fB\-mabi=elfv1\fR 4
  .IX Item "-mabi=elfv1"
! Change the current ABI to use the ELFv1 ABI.
! This is the default ABI for big\-endian PowerPC 64\-bit Linux.
! Overriding the default ABI requires special system support and is
  likely to fail in spectacular ways.
! .IP \fB\-mabi=elfv2\fR 4
  .IX Item "-mabi=elfv2"
! Change the current ABI to use the ELFv2 ABI.
! This is the default ABI for little\-endian PowerPC 64\-bit Linux.
! Overriding the default ABI requires special system support and is
  likely to fail in spectacular ways.
! .IP \fB\-mgnu\-attribute\fR 4
  .IX Item "-mgnu-attribute"
  .PD 0
! .IP \fB\-mno\-gnu\-attribute\fR 4
  .IX Item "-mno-gnu-attribute"
  .PD
  Emit .gnu_attribute assembly directives to set tag/value pairs in a
! \&.gnu.attributes section that specify ABI variations in function
  parameters or return values.
! .IP \fB\-mprototype\fR 4
  .IX Item "-mprototype"
  .PD 0
! .IP \fB\-mno\-prototype\fR 4
  .IX Item "-mno-prototype"
  .PD
  On System V.4 and embedded PowerPC systems assume that all calls to
  variable argument functions are properly prototyped.  Otherwise, the
! compiler must insert an instruction before every non\-prototyped call to
  set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
! indicate whether floating\-point values are passed in the floating\-point
  registers in case the function takes variable arguments.  With
  \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
  set or clear the bit.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
  \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
  configurations.
! .IP \fB\-mmvme\fR 4
  .IX Item "-mmvme"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
  \&\fIlibc.a\fR.
! .IP \fB\-mads\fR 4
  .IX Item "-mads"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
  \&\fIlibc.a\fR.
! .IP \fB\-myellowknife\fR 4
  .IX Item "-myellowknife"
  On embedded PowerPC systems, assume that the startup module is called
  \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
  \&\fIlibc.a\fR.
! .IP \fB\-mvxworks\fR 4
  .IX Item "-mvxworks"
  On System V.4 and embedded PowerPC systems, specify that you are
  compiling for a VxWorks system.
! .IP \fB\-memb\fR 4
  .IX Item "-memb"
! On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the ELF flags
  header to indicate that \fBeabi\fR extended relocations are used.
! .IP \fB\-meabi\fR 4
  .IX Item "-meabi"
  .PD 0
! .IP \fB\-mno\-eabi\fR 4
  .IX Item "-mno-eabi"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) adhere to the
! Embedded Applications Binary Interface (EABI), which is a set of
  modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
  means that the stack is aligned to an 8\-byte boundary, a function
! \&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the EABI
  environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
  \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
  \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
! no EABI initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
  \&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
  small data area.  The \fB\-meabi\fR option is on by default if you
! configured GCC using one of the \fBpowerpc*\-*\-eabi*\fR options.
! .IP \fB\-msdata=eabi\fR 4
  .IX Item "-msdata=eabi"
  On System V.4 and embedded PowerPC systems, put small initialized
  \&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
*************** global and static data in the \f(CW\*(C`
*** 31219,31225 ****
  the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
  incompatible with the \fB\-mrelocatable\fR option.  The
  \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
! .IP "\fB\-msdata=sysv\fR" 4
  .IX Item "-msdata=sysv"
  On System V.4 and embedded PowerPC systems, put small global and static
  data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
--- 31154,31160 ----
  the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
  incompatible with the \fB\-mrelocatable\fR option.  The
  \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
! .IP \fB\-msdata=sysv\fR 4
  .IX Item "-msdata=sysv"
  On System V.4 and embedded PowerPC systems, put small global and static
  data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
*************** data in the \f(CW\*(C`.sdata\*(C'\fR sec
*** 31227,31282 ****
  \&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
  The \fB\-msdata=sysv\fR option is incompatible with the
  \&\fB\-mrelocatable\fR option.
! .IP "\fB\-msdata=default\fR" 4
  .IX Item "-msdata=default"
  .PD 0
! .IP "\fB\-msdata\fR" 4
  .IX Item "-msdata"
  .PD
  On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
  compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
  same as \fB\-msdata=sysv\fR.
! .IP "\fB\-msdata=data\fR" 4
  .IX Item "-msdata=data"
  On System V.4 and embedded PowerPC systems, put small global
  data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
  data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
  to address small data however.  This is the default behavior unless
  other \fB\-msdata\fR options are used.
! .IP "\fB\-msdata=none\fR" 4
  .IX Item "-msdata=none"
  .PD 0
! .IP "\fB\-mno\-sdata\fR" 4
  .IX Item "-mno-sdata"
  .PD
  On embedded PowerPC systems, put all initialized global and static data
  in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
  \&\f(CW\*(C`.bss\*(C'\fR section.
! .IP "\fB\-mreadonly\-in\-sdata\fR" 4
  .IX Item "-mreadonly-in-sdata"
! Put read-only objects in the \f(CW\*(C`.sdata\*(C'\fR section as well.  This is the
  default.
! .IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
  .IX Item "-mblock-move-inline-limit=num"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
  copies) less than or equal to \fInum\fR bytes.  The minimum value for
  \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
! targets.  The default value is target-specific.
! .IP "\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR" 4
  .IX Item "-mblock-compare-inline-limit=num"
! Generate non-looping inline code for all block compares (such as calls
  to \f(CW\*(C`memcmp\*(C'\fR or structure compares) less than or equal to \fInum\fR
! bytes. If \fInum\fR is 0, all inline expansion (non-loop and loop) of
! block compare is disabled. The default value is target-specific.
! .IP "\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR" 4
  .IX Item "-mblock-compare-inline-loop-limit=num"
  Generate an inline expansion using loop code for all block compares that
  are less than or equal to \fInum\fR bytes, but greater than the limit
! for non-loop inline block compare expansion. If the block length is not
  constant, at most \fInum\fR bytes will be compared before \f(CW\*(C`memcmp\*(C'\fR
  is called to compare the remainder of the block. The default value is
! target-specific.
! .IP "\fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR" 4
  .IX Item "-mstring-compare-inline-limit=num"
  Compare at most \fInum\fR string bytes with inline code.
  If the difference or end of string is not found at the
--- 31162,31217 ----
  \&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
  The \fB\-msdata=sysv\fR option is incompatible with the
  \&\fB\-mrelocatable\fR option.
! .IP \fB\-msdata=default\fR 4
  .IX Item "-msdata=default"
  .PD 0
! .IP \fB\-msdata\fR 4
  .IX Item "-msdata"
  .PD
  On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
  compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
  same as \fB\-msdata=sysv\fR.
! .IP \fB\-msdata=data\fR 4
  .IX Item "-msdata=data"
  On System V.4 and embedded PowerPC systems, put small global
  data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
  data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
  to address small data however.  This is the default behavior unless
  other \fB\-msdata\fR options are used.
! .IP \fB\-msdata=none\fR 4
  .IX Item "-msdata=none"
  .PD 0
! .IP \fB\-mno\-sdata\fR 4
  .IX Item "-mno-sdata"
  .PD
  On embedded PowerPC systems, put all initialized global and static data
  in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
  \&\f(CW\*(C`.bss\*(C'\fR section.
! .IP \fB\-mreadonly\-in\-sdata\fR 4
  .IX Item "-mreadonly-in-sdata"
! Put read\-only objects in the \f(CW\*(C`.sdata\*(C'\fR section as well.  This is the
  default.
! .IP \fB\-mblock\-move\-inline\-limit=\fR\fInum\fR 4
  .IX Item "-mblock-move-inline-limit=num"
  Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
  copies) less than or equal to \fInum\fR bytes.  The minimum value for
  \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
! targets.  The default value is target\-specific.
! .IP \fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR 4
  .IX Item "-mblock-compare-inline-limit=num"
! Generate non\-looping inline code for all block compares (such as calls
  to \f(CW\*(C`memcmp\*(C'\fR or structure compares) less than or equal to \fInum\fR
! bytes. If \fInum\fR is 0, all inline expansion (non\-loop and loop) of
! block compare is disabled. The default value is target\-specific.
! .IP \fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR 4
  .IX Item "-mblock-compare-inline-loop-limit=num"
  Generate an inline expansion using loop code for all block compares that
  are less than or equal to \fInum\fR bytes, but greater than the limit
! for non\-loop inline block compare expansion. If the block length is not
  constant, at most \fInum\fR bytes will be compared before \f(CW\*(C`memcmp\*(C'\fR
  is called to compare the remainder of the block. The default value is
! target\-specific.
! .IP \fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR 4
  .IX Item "-mstring-compare-inline-limit=num"
  Compare at most \fInum\fR string bytes with inline code.
  If the difference or end of string is not found at the
*************** take care of the rest of the comparison.
*** 31285,31306 ****
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  On embedded PowerPC systems, put global and static items less than or
! equal to \fInum\fR bytes into the small data or \s-1BSS\s0 sections instead of
! the normal data or \s-1BSS\s0 section.  By default, \fInum\fR is 8.  The
  \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
! .IP "\fB\-mregnames\fR" 4
  .IX Item "-mregnames"
  .PD 0
! .IP "\fB\-mno\-regnames\fR" 4
  .IX Item "-mno-regnames"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) emit register
  names in the assembly language output using symbolic forms.
! .IP "\fB\-mlongcall\fR" 4
  .IX Item "-mlongcall"
  .PD 0
! .IP "\fB\-mno\-longcall\fR" 4
  .IX Item "-mno-longcall"
  .PD
  By default assume that all calls are far away so that a longer and more
--- 31220,31241 ----
  .IP "\fB\-G\fR \fInum\fR" 4
  .IX Item "-G num"
  On embedded PowerPC systems, put global and static items less than or
! equal to \fInum\fR bytes into the small data or BSS sections instead of
! the normal data or BSS section.  By default, \fInum\fR is 8.  The
  \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
  All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
! .IP \fB\-mregnames\fR 4
  .IX Item "-mregnames"
  .PD 0
! .IP \fB\-mno\-regnames\fR 4
  .IX Item "-mno-regnames"
  .PD
  On System V.4 and embedded PowerPC systems do (do not) emit register
  names in the assembly language output using symbolic forms.
! .IP \fB\-mlongcall\fR 4
  .IX Item "-mlongcall"
  .PD 0
! .IP \fB\-mno\-longcall\fR 4
  .IX Item "-mno-longcall"
  .PD
  By default assume that all calls are far away so that a longer and more
*************** expensive calling sequence is required.
*** 31308,31450 ****
  farther than 32 megabytes (33,554,432 bytes) from the current location.
  A short call is generated if the compiler knows
  the call cannot be that far away.  This setting can be overridden by
! the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
! longcall(0)\*(C'\fR.
  .Sp
! Some linkers are capable of detecting out-of-range calls and generating
  glue code on the fly.  On these systems, long calls are unnecessary and
! generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
! as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
! to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
  .Sp
! On PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer \s-1GNU\s0 linkers,
! \&\s-1GCC\s0 can generate long calls using an inline \s-1PLT\s0 call sequence (see
  \&\fB\-mpltseq\fR).  PowerPC with \fB\-mbss\-plt\fR and PowerPC64
! ELFv1 (big-endian) do not support inline \s-1PLT\s0 calls.
  .Sp
  On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
  callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
  addresses represent the callee and the branch island.  The
  Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
! callee\*(C'\fR if the \s-1PPC\s0 \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
  otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
  island.  The branch island is appended to the body of the
  calling function; it computes the full 32\-bit address of the callee
  and jumps to it.
  .Sp
! On Mach-O (Darwin) systems, this option directs the compiler emit to
  the glue for every direct call, and the Darwin linker decides whether
  to use or discard it.
  .Sp
! In the future, \s-1GCC\s0 may ignore all longcall specifications
  when the linker is known to generate glue.
! .IP "\fB\-mpltseq\fR" 4
  .IX Item "-mpltseq"
  .PD 0
! .IP "\fB\-mno\-pltseq\fR" 4
  .IX Item "-mno-pltseq"
  .PD
  Implement (do not implement) \-fno\-plt and long calls using an inline
! \&\s-1PLT\s0 call sequence that supports lazy linking and long calls to
! functions in dlopen'd shared libraries.  Inline \s-1PLT\s0 calls are only
! supported on PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer \s-1GNU\s0
  linkers, and are enabled by default if the support is detected when
! configuring \s-1GCC,\s0 and, in the case of 32\-bit PowerPC, if \s-1GCC\s0 is
  configured with \fB\-\-enable\-secureplt\fR.  \fB\-mpltseq\fR code
  and \fB\-mbss\-plt\fR 32\-bit PowerPC relocatable objects may not be
  linked together.
! .IP "\fB\-mtls\-markers\fR" 4
  .IX Item "-mtls-markers"
  .PD 0
! .IP "\fB\-mno\-tls\-markers\fR" 4
  .IX Item "-mno-tls-markers"
  .PD
  Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
  specifying the function argument.  The relocation allows the linker to
  reliably associate function call with argument setup instructions for
! \&\s-1TLS\s0 optimization, which in turn allows \s-1GCC\s0 to better schedule the
  sequence.
! .IP "\fB\-mrecip\fR" 4
  .IX Item "-mrecip"
  .PD 0
! .IP "\fB\-mno\-recip\fR" 4
  .IX Item "-mno-recip"
  .PD
  This option enables use of the reciprocal estimate and
  reciprocal square root estimate instructions with additional
! Newton-Raphson steps to increase precision instead of doing a divide or
! square root and divide for floating-point arguments.  You should use
  the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
  least \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-freciprocal\-math\fR and
  \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
! sequence is generally higher than the throughput of the non-reciprocal
  instruction, the precision of the sequence can be decreased by up to 2
  ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
  roots.
! .IP "\fB\-mrecip=\fR\fIopt\fR" 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma-separated list of options, which may
  be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP "\fBdiv\fR" 4
  .IX Item "div"
  Enable the reciprocal approximation instructions for both 
  single and double precision.
! .IP "\fBdivf\fR" 4
  .IX Item "divf"
! Enable the single-precision reciprocal approximation instructions.
! .IP "\fBdivd\fR" 4
  .IX Item "divd"
! Enable the double-precision reciprocal approximation instructions.
! .IP "\fBrsqrt\fR" 4
  .IX Item "rsqrt"
  Enable the reciprocal square root approximation instructions for both
  single and double precision.
! .IP "\fBrsqrtf\fR" 4
  .IX Item "rsqrtf"
! Enable the single-precision reciprocal square root approximation instructions.
! .IP "\fBrsqrtd\fR" 4
  .IX Item "rsqrtd"
! Enable the double-precision reciprocal square root approximation instructions.
  .RE
  .RS 4
  .Sp
  So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
  all of the reciprocal estimate instructions, except for the
  \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
! which handle the double-precision reciprocal square root calculations.
  .RE
! .IP "\fB\-mrecip\-precision\fR" 4
  .IX Item "-mrecip-precision"
  .PD 0
! .IP "\fB\-mno\-recip\-precision\fR" 4
  .IX Item "-mno-recip-precision"
  .PD
  Assume (do not assume) that the reciprocal estimate instructions
! provide higher-precision estimates than is mandated by the PowerPC
! \&\s-1ABI.\s0  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
  \&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
! The double-precision square root estimate instructions are not generated by
! default on low-precision machines, since they do not provide an
  estimate that converges after three steps.
! .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
  .IX Item "-mveclibabi=type"
! Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
  external library.  The only type supported at present is \fBmass\fR,
! which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
! (\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
! \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
  \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
  \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
  \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
--- 31243,31385 ----
  farther than 32 megabytes (33,554,432 bytes) from the current location.
  A short call is generated if the compiler knows
  the call cannot be that far away.  This setting can be overridden by
! the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW#pragma
! longcall(0)\fR.
  .Sp
! Some linkers are capable of detecting out\-of\-range calls and generating
  glue code on the fly.  On these systems, long calls are unnecessary and
! generate slower code.  As of this writing, the AIX linker can do this,
! as can the GNU linker for PowerPC/64.  It is planned to add this feature
! to the GNU linker for 32\-bit PowerPC systems as well.
  .Sp
! On PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer GNU linkers,
! GCC can generate long calls using an inline PLT call sequence (see
  \&\fB\-mpltseq\fR).  PowerPC with \fB\-mbss\-plt\fR and PowerPC64
! ELFv1 (big\-endian) do not support inline PLT calls.
  .Sp
  On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
  callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
  addresses represent the callee and the branch island.  The
  Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
! callee\*(C'\fR if the PPC \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
  otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
  island.  The branch island is appended to the body of the
  calling function; it computes the full 32\-bit address of the callee
  and jumps to it.
  .Sp
! On Mach\-O (Darwin) systems, this option directs the compiler emit to
  the glue for every direct call, and the Darwin linker decides whether
  to use or discard it.
  .Sp
! In the future, GCC may ignore all longcall specifications
  when the linker is known to generate glue.
! .IP \fB\-mpltseq\fR 4
  .IX Item "-mpltseq"
  .PD 0
! .IP \fB\-mno\-pltseq\fR 4
  .IX Item "-mno-pltseq"
  .PD
  Implement (do not implement) \-fno\-plt and long calls using an inline
! PLT call sequence that supports lazy linking and long calls to
! functions in dlopen\*(Aqd shared libraries.  Inline PLT calls are only
! supported on PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer GNU
  linkers, and are enabled by default if the support is detected when
! configuring GCC, and, in the case of 32\-bit PowerPC, if GCC is
  configured with \fB\-\-enable\-secureplt\fR.  \fB\-mpltseq\fR code
  and \fB\-mbss\-plt\fR 32\-bit PowerPC relocatable objects may not be
  linked together.
! .IP \fB\-mtls\-markers\fR 4
  .IX Item "-mtls-markers"
  .PD 0
! .IP \fB\-mno\-tls\-markers\fR 4
  .IX Item "-mno-tls-markers"
  .PD
  Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
  specifying the function argument.  The relocation allows the linker to
  reliably associate function call with argument setup instructions for
! TLS optimization, which in turn allows GCC to better schedule the
  sequence.
! .IP \fB\-mrecip\fR 4
  .IX Item "-mrecip"
  .PD 0
! .IP \fB\-mno\-recip\fR 4
  .IX Item "-mno-recip"
  .PD
  This option enables use of the reciprocal estimate and
  reciprocal square root estimate instructions with additional
! Newton\-Raphson steps to increase precision instead of doing a divide or
! square root and divide for floating\-point arguments.  You should use
  the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
  least \fB\-funsafe\-math\-optimizations\fR,
  \&\fB\-ffinite\-math\-only\fR, \fB\-freciprocal\-math\fR and
  \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
! sequence is generally higher than the throughput of the non\-reciprocal
  instruction, the precision of the sequence can be decreased by up to 2
  ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
  roots.
! .IP \fB\-mrecip=\fR\fIopt\fR 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma\-separated list of options, which may
  be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP \fBdefault\fR 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP \fBdiv\fR 4
  .IX Item "div"
  Enable the reciprocal approximation instructions for both 
  single and double precision.
! .IP \fBdivf\fR 4
  .IX Item "divf"
! Enable the single\-precision reciprocal approximation instructions.
! .IP \fBdivd\fR 4
  .IX Item "divd"
! Enable the double\-precision reciprocal approximation instructions.
! .IP \fBrsqrt\fR 4
  .IX Item "rsqrt"
  Enable the reciprocal square root approximation instructions for both
  single and double precision.
! .IP \fBrsqrtf\fR 4
  .IX Item "rsqrtf"
! Enable the single\-precision reciprocal square root approximation instructions.
! .IP \fBrsqrtd\fR 4
  .IX Item "rsqrtd"
! Enable the double\-precision reciprocal square root approximation instructions.
  .RE
  .RS 4
  .Sp
  So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
  all of the reciprocal estimate instructions, except for the
  \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
! which handle the double\-precision reciprocal square root calculations.
  .RE
! .IP \fB\-mrecip\-precision\fR 4
  .IX Item "-mrecip-precision"
  .PD 0
! .IP \fB\-mno\-recip\-precision\fR 4
  .IX Item "-mno-recip-precision"
  .PD
  Assume (do not assume) that the reciprocal estimate instructions
! provide higher\-precision estimates than is mandated by the PowerPC
! ABI.  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
  \&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
! The double\-precision square root estimate instructions are not generated by
! default on low\-precision machines, since they do not provide an
  estimate that converges after three steps.
! .IP \fB\-mveclibabi=\fR\fItype\fR 4
  .IX Item "-mveclibabi=type"
! Specifies the ABI type to use for vectorizing intrinsics using an
  external library.  The only type supported at present is \fBmass\fR,
! which specifies to use IBM\*(Aqs Mathematical Acceleration Subsystem
! (MASS) libraries for vectorizing intrinsics using external libraries.
! GCC currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
  \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
  \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
  \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
*************** which specifies to use \s-1IBM\s0's Math
*** 31459,31589 ****
  \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
  \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
  for power7.  Both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The \s-1MASS\s0
  libraries must be specified at link time.
! .IP "\fB\-mfriz\fR" 4
  .IX Item "-mfriz"
  .PD 0
! .IP "\fB\-mno\-friz\fR" 4
  .IX Item "-mno-friz"
  .PD
  Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
  \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
! rounding of floating-point values to 64\-bit integer and back to floating
  point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
! the floating-point number is too large to fit in an integer.
! .IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
  .IX Item "-mpointers-to-nested-functions"
  .PD 0
! .IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
  .IX Item "-mno-pointers-to-nested-functions"
  .PD
  Generate (do not generate) code to load up the static chain register
! (\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
  systems where a function pointer points to a 3\-word descriptor giving
! the function address, \s-1TOC\s0 value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
  static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
  \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
  call through pointers to nested functions or pointers
  to functions compiled in other languages that use the static chain if
  you use \fB\-mno\-pointers\-to\-nested\-functions\fR.
! .IP "\fB\-msave\-toc\-indirect\fR" 4
  .IX Item "-msave-toc-indirect"
  .PD 0
! .IP "\fB\-mno\-save\-toc\-indirect\fR" 4
  .IX Item "-mno-save-toc-indirect"
  .PD
! Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
  stack location in the function prologue if the function calls through
! a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
  saved in the prologue, it is saved just before the call through the
  pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
! .IP "\fB\-mcompat\-align\-parm\fR" 4
  .IX Item "-mcompat-align-parm"
  .PD 0
! .IP "\fB\-mno\-compat\-align\-parm\fR" 4
  .IX Item "-mno-compat-align-parm"
  .PD
  Generate (do not generate) code to pass structure parameters with a
  maximum alignment of 64 bits, for compatibility with older versions
! of \s-1GCC.\s0
  .Sp
! Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
  structure parameter on a 128\-bit boundary when that structure contained
  a member requiring 128\-bit alignment.  This is corrected in more
! recent versions of \s-1GCC.\s0  This option may be used to generate code
  that is compatible with functions compiled with older versions of
! \&\s-1GCC.\s0
  .Sp
  The \fB\-mno\-compat\-align\-parm\fR option is the default.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
! .IP "\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR" 4
  .IX Item "-mstack-protector-guard-symbol=symbol"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
! canary in the \s-1TLS\s0 block (the default with \s-1GNU\s0 libc version 2.4 or later).
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which register to use as base register for reading the canary, and from what
  offset from that base register. The default for those is as specified in the
! relevant \s-1ABI.\s0  \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR overrides
! the offset with a symbol reference to a canary in the \s-1TLS\s0 block.
! .IP "\fB\-mpcrel\fR" 4
  .IX Item "-mpcrel"
  .PD 0
! .IP "\fB\-mno\-pcrel\fR" 4
  .IX Item "-mno-pcrel"
  .PD
! Generate (do not generate) pc-relative addressing.  The \fB\-mpcrel\fR
  option requires that the medium code model (\fB\-mcmodel=medium\fR)
  and prefixed addressing (\fB\-mprefixed\fR) options are enabled.
! .IP "\fB\-mprefixed\fR" 4
  .IX Item "-mprefixed"
  .PD 0
! .IP "\fB\-mno\-prefixed\fR" 4
  .IX Item "-mno-prefixed"
  .PD
  Generate (do not generate) addressing modes using prefixed load and
  store instructions.  The \fB\-mprefixed\fR option requires that
  the option \fB\-mcpu=power10\fR (or later) is enabled.
! .IP "\fB\-mmma\fR" 4
  .IX Item "-mmma"
  .PD 0
! .IP "\fB\-mno\-mma\fR" 4
  .IX Item "-mno-mma"
  .PD
! Generate (do not generate) the \s-1MMA\s0 instructions.  The \fB\-mma\fR
  option requires that the option \fB\-mcpu=power10\fR (or later)
  is enabled.
! .IP "\fB\-mrop\-protect\fR" 4
  .IX Item "-mrop-protect"
  .PD 0
! .IP "\fB\-mno\-rop\-protect\fR" 4
  .IX Item "-mno-rop-protect"
  .PD
! Generate (do not generate) \s-1ROP\s0 protection instructions when the target
! processor supports them.  Currently this option disables the shrink-wrap
  optimization (\fB\-fshrink\-wrap\fR).
! .IP "\fB\-mprivileged\fR" 4
  .IX Item "-mprivileged"
  .PD 0
! .IP "\fB\-mno\-privileged\fR" 4
  .IX Item "-mno-privileged"
  .PD
  Generate (do not generate) code that will run in privileged state.
! .IP "\fB\-mblock\-ops\-unaligned\-vsx\fR" 4
  .IX Item "-mblock-ops-unaligned-vsx"
  .PD 0
! .IP "\fB\-mno\-block\-ops\-unaligned\-vsx\fR" 4
  .IX Item "-mno-block-ops-unaligned-vsx"
  .PD
  Generate (do not generate) unaligned vsx loads and stores for
--- 31394,31524 ----
  \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
  \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
  for power7.  Both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The MASS
  libraries must be specified at link time.
! .IP \fB\-mfriz\fR 4
  .IX Item "-mfriz"
  .PD 0
! .IP \fB\-mno\-friz\fR 4
  .IX Item "-mno-friz"
  .PD
  Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
  \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
! rounding of floating\-point values to 64\-bit integer and back to floating
  point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
! the floating\-point number is too large to fit in an integer.
! .IP \fB\-mpointers\-to\-nested\-functions\fR 4
  .IX Item "-mpointers-to-nested-functions"
  .PD 0
! .IP \fB\-mno\-pointers\-to\-nested\-functions\fR 4
  .IX Item "-mno-pointers-to-nested-functions"
  .PD
  Generate (do not generate) code to load up the static chain register
! (\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on AIX and 64\-bit Linux
  systems where a function pointer points to a 3\-word descriptor giving
! the function address, TOC value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
  static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
  \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
  call through pointers to nested functions or pointers
  to functions compiled in other languages that use the static chain if
  you use \fB\-mno\-pointers\-to\-nested\-functions\fR.
! .IP \fB\-msave\-toc\-indirect\fR 4
  .IX Item "-msave-toc-indirect"
  .PD 0
! .IP \fB\-mno\-save\-toc\-indirect\fR 4
  .IX Item "-mno-save-toc-indirect"
  .PD
! Generate (do not generate) code to save the TOC value in the reserved
  stack location in the function prologue if the function calls through
! a pointer on AIX and 64\-bit Linux systems.  If the TOC value is not
  saved in the prologue, it is saved just before the call through the
  pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
! .IP \fB\-mcompat\-align\-parm\fR 4
  .IX Item "-mcompat-align-parm"
  .PD 0
! .IP \fB\-mno\-compat\-align\-parm\fR 4
  .IX Item "-mno-compat-align-parm"
  .PD
  Generate (do not generate) code to pass structure parameters with a
  maximum alignment of 64 bits, for compatibility with older versions
! of GCC.
  .Sp
! Older versions of GCC (prior to 4.9.0) incorrectly did not align a
  structure parameter on a 128\-bit boundary when that structure contained
  a member requiring 128\-bit alignment.  This is corrected in more
! recent versions of GCC.  This option may be used to generate code
  that is compatible with functions compiled with older versions of
! GCC.
  .Sp
  The \fB\-mno\-compat\-align\-parm\fR option is the default.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
! .IP \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR 4
  .IX Item "-mstack-protector-guard-symbol=symbol"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per\-thread
! canary in the TLS block (the default with GNU libc version 2.4 or later).
  .Sp
  With the latter choice the options
  \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which register to use as base register for reading the canary, and from what
  offset from that base register. The default for those is as specified in the
! relevant ABI.  \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR overrides
! the offset with a symbol reference to a canary in the TLS block.
! .IP \fB\-mpcrel\fR 4
  .IX Item "-mpcrel"
  .PD 0
! .IP \fB\-mno\-pcrel\fR 4
  .IX Item "-mno-pcrel"
  .PD
! Generate (do not generate) pc\-relative addressing.  The \fB\-mpcrel\fR
  option requires that the medium code model (\fB\-mcmodel=medium\fR)
  and prefixed addressing (\fB\-mprefixed\fR) options are enabled.
! .IP \fB\-mprefixed\fR 4
  .IX Item "-mprefixed"
  .PD 0
! .IP \fB\-mno\-prefixed\fR 4
  .IX Item "-mno-prefixed"
  .PD
  Generate (do not generate) addressing modes using prefixed load and
  store instructions.  The \fB\-mprefixed\fR option requires that
  the option \fB\-mcpu=power10\fR (or later) is enabled.
! .IP \fB\-mmma\fR 4
  .IX Item "-mmma"
  .PD 0
! .IP \fB\-mno\-mma\fR 4
  .IX Item "-mno-mma"
  .PD
! Generate (do not generate) the MMA instructions.  The \fB\-mma\fR
  option requires that the option \fB\-mcpu=power10\fR (or later)
  is enabled.
! .IP \fB\-mrop\-protect\fR 4
  .IX Item "-mrop-protect"
  .PD 0
! .IP \fB\-mno\-rop\-protect\fR 4
  .IX Item "-mno-rop-protect"
  .PD
! Generate (do not generate) ROP protection instructions when the target
! processor supports them.  Currently this option disables the shrink\-wrap
  optimization (\fB\-fshrink\-wrap\fR).
! .IP \fB\-mprivileged\fR 4
  .IX Item "-mprivileged"
  .PD 0
! .IP \fB\-mno\-privileged\fR 4
  .IX Item "-mno-privileged"
  .PD
  Generate (do not generate) code that will run in privileged state.
! .IP \fB\-mblock\-ops\-unaligned\-vsx\fR 4
  .IX Item "-mblock-ops-unaligned-vsx"
  .PD 0
! .IP \fB\-mno\-block\-ops\-unaligned\-vsx\fR 4
  .IX Item "-mno-block-ops-unaligned-vsx"
  .PD
  Generate (do not generate) unaligned vsx loads and stores for
*************** would be beneficial to unroll the main v
*** 31595,31660 ****
  parameter sets the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .PP
! \fI\s-1RX\s0 Options\fR
  .IX Subsection "RX Options"
  .PP
! These command-line options are defined for \s-1RX\s0 targets:
! .IP "\fB\-m64bit\-doubles\fR" 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP "\fB\-m32bit\-doubles\fR" 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
! \&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
  works on 32\-bit values, which is why the default is
  \&\fB\-m32bit\-doubles\fR.
! .IP "\fB\-fpu\fR" 4
  .IX Item "-fpu"
  .PD 0
! .IP "\fB\-nofpu\fR" 4
  .IX Item "-nofpu"
  .PD
! Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
! floating-point hardware.  The default is enabled for the \s-1RX600\s0
! series and disabled for the \s-1RX200\s0 series.
  .Sp
! Floating-point instructions are only generated for 32\-bit floating-point 
! values, however, so the \s-1FPU\s0 hardware is not used for doubles if the
  \&\fB\-m64bit\-doubles\fR option is used.
  .Sp
  \&\fINote\fR If the \fB\-fpu\fR option is enabled then
  \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
! This is because the \s-1RX FPU\s0 instructions are themselves unsafe.
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
  .IX Item "-mcpu=name"
! Selects the type of \s-1RX CPU\s0 to be targeted.  Currently three types are
! supported, the generic \fB\s-1RX600\s0\fR and \fB\s-1RX200\s0\fR series hardware and
! the specific \fB\s-1RX610\s0\fR \s-1CPU.\s0  The default is \fB\s-1RX600\s0\fR.
  .Sp
! The only difference between \fB\s-1RX600\s0\fR and \fB\s-1RX610\s0\fR is that the
! \&\fB\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
  .Sp
! The \fB\s-1RX200\s0\fR series does not have a hardware floating-point unit
  and so \fB\-nofpu\fR is enabled by default when this type is
  selected.
! .IP "\fB\-mbig\-endian\-data\fR" 4
  .IX Item "-mbig-endian-data"
  .PD 0
! .IP "\fB\-mlittle\-endian\-data\fR" 4
  .IX Item "-mlittle-endian-data"
  .PD
! Store data (but not code) in the big-endian format.  The default is
! \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
  format.
! .IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
  .IX Item "-msmall-data-limit=N"
  Specifies the maximum size in bytes of global and static variables
  which can be placed into the small data area.  Using the small data
  area can lead to smaller and faster code, but the size of area is
  limited and it is up to the programmer to ensure that the area does
! not overflow.  Also when the small data area is used one of the \s-1RX\s0's
  registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
  area, so it is no longer available for use by the compiler.  This
  could result in slower and/or larger code if variables are pushed onto
--- 31530,31595 ----
  parameter sets the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is four.
  .PP
! \fIRX Options\fR
  .IX Subsection "RX Options"
  .PP
! These command\-line options are defined for RX targets:
! .IP \fB\-m64bit\-doubles\fR 4
  .IX Item "-m64bit-doubles"
  .PD 0
! .IP \fB\-m32bit\-doubles\fR 4
  .IX Item "-m32bit-doubles"
  .PD
  Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
  or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
! \&\fB\-m32bit\-doubles\fR.  \fINote\fR RX floating\-point hardware only
  works on 32\-bit values, which is why the default is
  \&\fB\-m32bit\-doubles\fR.
! .IP \fB\-fpu\fR 4
  .IX Item "-fpu"
  .PD 0
! .IP \fB\-nofpu\fR 4
  .IX Item "-nofpu"
  .PD
! Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of RX
! floating\-point hardware.  The default is enabled for the RX600
! series and disabled for the RX200 series.
  .Sp
! Floating\-point instructions are only generated for 32\-bit floating\-point 
! values, however, so the FPU hardware is not used for doubles if the
  \&\fB\-m64bit\-doubles\fR option is used.
  .Sp
  \&\fINote\fR If the \fB\-fpu\fR option is enabled then
  \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
! This is because the RX FPU instructions are themselves unsafe.
! .IP \fB\-mcpu=\fR\fIname\fR 4
  .IX Item "-mcpu=name"
! Selects the type of RX CPU to be targeted.  Currently three types are
! supported, the generic \fBRX600\fR and \fBRX200\fR series hardware and
! the specific \fBRX610\fR CPU.  The default is \fBRX600\fR.
  .Sp
! The only difference between \fBRX600\fR and \fBRX610\fR is that the
! \&\fBRX610\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
  .Sp
! The \fBRX200\fR series does not have a hardware floating\-point unit
  and so \fB\-nofpu\fR is enabled by default when this type is
  selected.
! .IP \fB\-mbig\-endian\-data\fR 4
  .IX Item "-mbig-endian-data"
  .PD 0
! .IP \fB\-mlittle\-endian\-data\fR 4
  .IX Item "-mlittle-endian-data"
  .PD
! Store data (but not code) in the big\-endian format.  The default is
! \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little\-endian
  format.
! .IP \fB\-msmall\-data\-limit=\fR\fIN\fR 4
  .IX Item "-msmall-data-limit=N"
  Specifies the maximum size in bytes of global and static variables
  which can be placed into the small data area.  Using the small data
  area can lead to smaller and faster code, but the size of area is
  limited and it is up to the programmer to ensure that the area does
! not overflow.  Also when the small data area is used one of the RX\*(Aqs
  registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
  area, so it is no longer available for use by the compiler.  This
  could result in slower and/or larger code if variables are pushed onto
*************** reserving a register.  It is up to the p
*** 31671,31697 ****
  discover whether this feature is of benefit to their program.  See the
  description of the \fB\-mpid\fR option for a description of how the
  actual register to hold the small data area pointer is chosen.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  .PD 0
! .IP "\fB\-mno\-sim\fR" 4
  .IX Item "-mno-sim"
  .PD
  Use the simulator runtime.  The default is to use the libgloss
! board-specific runtime.
! .IP "\fB\-mas100\-syntax\fR" 4
  .IX Item "-mas100-syntax"
  .PD 0
! .IP "\fB\-mno\-as100\-syntax\fR" 4
  .IX Item "-mno-as100-syntax"
  .PD
  When generating assembler output use a syntax that is compatible with
! Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
  assembler, but it has some restrictions so it is not generated by default.
! .IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
  .IX Item "-mmax-constant-size=N"
  Specifies the maximum size, in bytes, of a constant that can be used as
! an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
  allow constants of up to 4 bytes in length to be used in instructions,
  a longer value equates to a longer instruction.  Thus in some
  circumstances it can be beneficial to restrict the size of constants
--- 31606,31632 ----
  discover whether this feature is of benefit to their program.  See the
  description of the \fB\-mpid\fR option for a description of how the
  actual register to hold the small data area pointer is chosen.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  .PD 0
! .IP \fB\-mno\-sim\fR 4
  .IX Item "-mno-sim"
  .PD
  Use the simulator runtime.  The default is to use the libgloss
! board\-specific runtime.
! .IP \fB\-mas100\-syntax\fR 4
  .IX Item "-mas100-syntax"
  .PD 0
! .IP \fB\-mno\-as100\-syntax\fR 4
  .IX Item "-mno-as100-syntax"
  .PD
  When generating assembler output use a syntax that is compatible with
! Renesas\*(Aqs AS100 assembler.  This syntax can also be handled by the GAS
  assembler, but it has some restrictions so it is not generated by default.
! .IP \fB\-mmax\-constant\-size=\fR\fIN\fR 4
  .IX Item "-mmax-constant-size=N"
  Specifies the maximum size, in bytes, of a constant that can be used as
! an operand in a RX instruction.  Although the RX instruction set does
  allow constants of up to 4 bytes in length to be used in instructions,
  a longer value equates to a longer instruction.  Thus in some
  circumstances it can be beneficial to restrict the size of constants
*************** placed into a constant pool and referenc
*** 31700,31711 ****
  .Sp
  The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
  or 4 means that constants of any size are allowed.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Enable linker relaxation.  Linker relaxation is a process whereby the
  linker attempts to reduce the size of a program by finding shorter
  versions of various instructions.  Disabled by default.
! .IP "\fB\-mint\-register=\fR\fIN\fR" 4
  .IX Item "-mint-register=N"
  Specify the number of registers to reserve for fast interrupt handler
  functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
--- 31635,31646 ----
  .Sp
  The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
  or 4 means that constants of any size are allowed.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Enable linker relaxation.  Linker relaxation is a process whereby the
  linker attempts to reduce the size of a program by finding shorter
  versions of various instructions.  Disabled by default.
! .IP \fB\-mint\-register=\fR\fIN\fR 4
  .IX Item "-mint-register=N"
  Specify the number of registers to reserve for fast interrupt handler
  functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
*************** of fast interrupt handlers.  A value of
*** 31714,31730 ****
  \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
  \&\f(CW\*(C`r11\*(C'\fR, and a value of 4 reserves \f(CW\*(C`r13\*(C'\fR through \f(CW\*(C`r10\*(C'\fR.
  A value of 0, the default, does not reserve any registers.
! .IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
  .IX Item "-msave-acc-in-interrupts"
  Specifies that interrupt handler functions should preserve the
  accumulator register.  This is only necessary if normal code might use
  the accumulator register, for example because it performs 64\-bit
  multiplications.  The default is to ignore the accumulator as this
  makes the interrupt handlers faster.
! .IP "\fB\-mpid\fR" 4
  .IX Item "-mpid"
  .PD 0
! .IP "\fB\-mno\-pid\fR" 4
  .IX Item "-mno-pid"
  .PD
  Enables the generation of position independent data.  When enabled any
--- 31649,31665 ----
  \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
  \&\f(CW\*(C`r11\*(C'\fR, and a value of 4 reserves \f(CW\*(C`r13\*(C'\fR through \f(CW\*(C`r10\*(C'\fR.
  A value of 0, the default, does not reserve any registers.
! .IP \fB\-msave\-acc\-in\-interrupts\fR 4
  .IX Item "-msave-acc-in-interrupts"
  Specifies that interrupt handler functions should preserve the
  accumulator register.  This is only necessary if normal code might use
  the accumulator register, for example because it performs 64\-bit
  multiplications.  The default is to ignore the accumulator as this
  makes the interrupt handlers faster.
! .IP \fB\-mpid\fR 4
  .IX Item "-mpid"
  .PD 0
! .IP \fB\-mno\-pid\fR 4
  .IX Item "-mno-pid"
  .PD
  Enables the generation of position independent data.  When enabled any
*************** larger code, especially in complicated f
*** 31741,31747 ****
  .Sp
  The actual register chosen to hold the constant data base address
  depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
! \&\fB\-mint\-register\fR command-line options are enabled.  Starting
  with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
  allocated first to satisfy the requirements of \fB\-mint\-register\fR,
  then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
--- 31676,31682 ----
  .Sp
  The actual register chosen to hold the constant data base address
  depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
! \&\fB\-mint\-register\fR command\-line options are enabled.  Starting
  with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
  allocated first to satisfy the requirements of \fB\-mint\-register\fR,
  then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
*************** is possible for the small data area regi
*** 31750,31793 ****
  command line.
  .Sp
  By default this feature is not enabled.  The default can be restored
! via the \fB\-mno\-pid\fR command-line option.
! .IP "\fB\-mno\-warn\-multiple\-fast\-interrupts\fR" 4
  .IX Item "-mno-warn-multiple-fast-interrupts"
  .PD 0
! .IP "\fB\-mwarn\-multiple\-fast\-interrupts\fR" 4
  .IX Item "-mwarn-multiple-fast-interrupts"
  .PD
! Prevents \s-1GCC\s0 from issuing a warning message if it finds more than one
  fast interrupt handler when it is compiling a file.  The default is to
! issue a warning for each extra fast interrupt handler found, as the \s-1RX\s0
  only supports one such interrupt.
! .IP "\fB\-mallow\-string\-insns\fR" 4
  .IX Item "-mallow-string-insns"
  .PD 0
! .IP "\fB\-mno\-allow\-string\-insns\fR" 4
  .IX Item "-mno-allow-string-insns"
  .PD
  Enables or disables the use of the string manipulation instructions
  \&\f(CW\*(C`SMOVF\*(C'\fR, \f(CW\*(C`SCMPU\*(C'\fR, \f(CW\*(C`SMOVB\*(C'\fR, \f(CW\*(C`SMOVU\*(C'\fR, \f(CW\*(C`SUNTIL\*(C'\fR
  \&\f(CW\*(C`SWHILE\*(C'\fR and also the \f(CW\*(C`RMPA\*(C'\fR instruction.  These
  instructions may prefetch data, which is not safe to do if accessing
! an I/O register.  (See section 12.2.7 of the \s-1RX62N\s0 Group User's Manual
  for more information).
  .Sp
  The default is to allow these instructions, but it is not possible for
! \&\s-1GCC\s0 to reliably detect all circumstances where a string instruction
  might be used to access an I/O register, so their use cannot be
  disabled automatically.  Instead it is reliant upon the programmer to
  use the \fB\-mno\-allow\-string\-insns\fR option if their program
  accesses I/O space.
  .Sp
! When the instructions are enabled \s-1GCC\s0 defines the C preprocessor
  symbol \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR, otherwise it defines the
  symbol \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR.
! .IP "\fB\-mjsr\fR" 4
  .IX Item "-mjsr"
  .PD 0
! .IP "\fB\-mno\-jsr\fR" 4
  .IX Item "-mno-jsr"
  .PD
  Use only (or not only) \f(CW\*(C`JSR\*(C'\fR instructions to access functions.
--- 31685,31728 ----
  command line.
  .Sp
  By default this feature is not enabled.  The default can be restored
! via the \fB\-mno\-pid\fR command\-line option.
! .IP \fB\-mno\-warn\-multiple\-fast\-interrupts\fR 4
  .IX Item "-mno-warn-multiple-fast-interrupts"
  .PD 0
! .IP \fB\-mwarn\-multiple\-fast\-interrupts\fR 4
  .IX Item "-mwarn-multiple-fast-interrupts"
  .PD
! Prevents GCC from issuing a warning message if it finds more than one
  fast interrupt handler when it is compiling a file.  The default is to
! issue a warning for each extra fast interrupt handler found, as the RX
  only supports one such interrupt.
! .IP \fB\-mallow\-string\-insns\fR 4
  .IX Item "-mallow-string-insns"
  .PD 0
! .IP \fB\-mno\-allow\-string\-insns\fR 4
  .IX Item "-mno-allow-string-insns"
  .PD
  Enables or disables the use of the string manipulation instructions
  \&\f(CW\*(C`SMOVF\*(C'\fR, \f(CW\*(C`SCMPU\*(C'\fR, \f(CW\*(C`SMOVB\*(C'\fR, \f(CW\*(C`SMOVU\*(C'\fR, \f(CW\*(C`SUNTIL\*(C'\fR
  \&\f(CW\*(C`SWHILE\*(C'\fR and also the \f(CW\*(C`RMPA\*(C'\fR instruction.  These
  instructions may prefetch data, which is not safe to do if accessing
! an I/O register.  (See section 12.2.7 of the RX62N Group User\*(Aqs Manual
  for more information).
  .Sp
  The default is to allow these instructions, but it is not possible for
! GCC to reliably detect all circumstances where a string instruction
  might be used to access an I/O register, so their use cannot be
  disabled automatically.  Instead it is reliant upon the programmer to
  use the \fB\-mno\-allow\-string\-insns\fR option if their program
  accesses I/O space.
  .Sp
! When the instructions are enabled GCC defines the C preprocessor
  symbol \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR, otherwise it defines the
  symbol \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR.
! .IP \fB\-mjsr\fR 4
  .IX Item "-mjsr"
  .PD 0
! .IP \fB\-mno\-jsr\fR 4
  .IX Item "-mno-jsr"
  .PD
  Use only (or not only) \f(CW\*(C`JSR\*(C'\fR instructions to access functions.
*************** This option can be used when code size e
*** 31795,31862 ****
  instructions.  Note that \fB\-mno\-jsr\fR does not mean to not use
  \&\f(CW\*(C`JSR\*(C'\fR but instead means that any type of branch may be used.
  .PP
! \&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
! has special significance to the \s-1RX\s0 port when used with the
  \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
! function intended to process fast interrupts.  \s-1GCC\s0 ensures
  that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
  and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
  corresponding registers have been restricted via the
! \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
  options.
  .PP
  \fIS/390 and zSeries Options\fR
  .IX Subsection "S/390 and zSeries Options"
  .PP
  These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating-point instructions and registers
! for floating-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating-point
  operations.  When \fB\-mhard\-float\fR is specified, the compiler
! generates \s-1IEEE\s0 floating-point instructions.  This is the default.
! .IP "\fB\-mhard\-dfp\fR" 4
  .IX Item "-mhard-dfp"
  .PD 0
! .IP "\fB\-mno\-hard\-dfp\fR" 4
  .IX Item "-mno-hard-dfp"
  .PD
! Use (do not use) the hardware decimal-floating-point instructions for
! decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
  specified, functions in \fIlibgcc.a\fR are used to perform
! decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
! specified, the compiler generates decimal-floating-point hardware
  instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
! .IP "\fB\-mlong\-double\-64\fR" 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP "\fB\-mlong\-double\-128\fR" 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
  of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
  type. This is the default.
! .IP "\fB\-mbackchain\fR" 4
  .IX Item "-mbackchain"
  .PD 0
! .IP "\fB\-mno\-backchain\fR" 4
  .IX Item "-mno-backchain"
  .PD
! Store (do not store) the address of the caller's frame as backchain pointer
! into the callee's stack frame.
  A backchain may be needed to allow debugging using tools that do not understand
! \&\s-1DWARF\s0 call frame information.
  When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
  at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
  the backchain is placed into the topmost word of the 96/160 byte register
  save area.
  .Sp
! In general, code compiled with \fB\-mbackchain\fR is call-compatible with
  code compiled with \fB\-mno\-backchain\fR; however, use of the backchain
  for debugging purposes usually requires that the whole binary is built with
  \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
--- 31730,31797 ----
  instructions.  Note that \fB\-mno\-jsr\fR does not mean to not use
  \&\f(CW\*(C`JSR\*(C'\fR but instead means that any type of branch may be used.
  .PP
! \&\fINote:\fR The generic GCC command\-line option \fB\-ffixed\-\fR\fIreg\fR
! has special significance to the RX port when used with the
  \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
! function intended to process fast interrupts.  GCC ensures
  that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
  and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
  corresponding registers have been restricted via the
! \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command\-line
  options.
  .PP
  \fIS/390 and zSeries Options\fR
  .IX Subsection "S/390 and zSeries Options"
  .PP
  These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Use (do not use) the hardware floating\-point instructions and registers
! for floating\-point operations.  When \fB\-msoft\-float\fR is specified,
! functions in \fIlibgcc.a\fR are used to perform floating\-point
  operations.  When \fB\-mhard\-float\fR is specified, the compiler
! generates IEEE floating\-point instructions.  This is the default.
! .IP \fB\-mhard\-dfp\fR 4
  .IX Item "-mhard-dfp"
  .PD 0
! .IP \fB\-mno\-hard\-dfp\fR 4
  .IX Item "-mno-hard-dfp"
  .PD
! Use (do not use) the hardware decimal\-floating\-point instructions for
! decimal\-floating\-point operations.  When \fB\-mno\-hard\-dfp\fR is
  specified, functions in \fIlibgcc.a\fR are used to perform
! decimal\-floating\-point operations.  When \fB\-mhard\-dfp\fR is
! specified, the compiler generates decimal\-floating\-point hardware
  instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
! .IP \fB\-mlong\-double\-64\fR 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP \fB\-mlong\-double\-128\fR 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
  of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
  type. This is the default.
! .IP \fB\-mbackchain\fR 4
  .IX Item "-mbackchain"
  .PD 0
! .IP \fB\-mno\-backchain\fR 4
  .IX Item "-mno-backchain"
  .PD
! Store (do not store) the address of the caller\*(Aqs frame as backchain pointer
! into the callee\*(Aqs stack frame.
  A backchain may be needed to allow debugging using tools that do not understand
! DWARF call frame information.
  When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
  at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
  the backchain is placed into the topmost word of the 96/160 byte register
  save area.
  .Sp
! In general, code compiled with \fB\-mbackchain\fR is call\-compatible with
  code compiled with \fB\-mno\-backchain\fR; however, use of the backchain
  for debugging purposes usually requires that the whole binary is built with
  \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
*************** for debugging purposes usually requires
*** 31864,31873 ****
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not maintain the backchain.
! .IP "\fB\-mpacked\-stack\fR" 4
  .IX Item "-mpacked-stack"
  .PD 0
! .IP "\fB\-mno\-packed\-stack\fR" 4
  .IX Item "-mno-packed-stack"
  .PD
  Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
--- 31799,31808 ----
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not maintain the backchain.
! .IP \fB\-mpacked\-stack\fR 4
  .IX Item "-mpacked-stack"
  .PD 0
! .IP \fB\-mno\-packed\-stack\fR 4
  .IX Item "-mno-packed-stack"
  .PD
  Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
*************** the save area is always used to store th
*** 31881,31900 ****
  register is always saved two words below the backchain.
  .Sp
  As long as the stack frame backchain is not used, code generated with
! \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
! \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC 2.95\s0 for
  S/390 or zSeries generated code that uses the stack frame backchain at run
! time, not just for debugging purposes.  Such code is not call-compatible
  with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
  combination of \fB\-mbackchain\fR,
  \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not use the packed stack layout.
! .IP "\fB\-msmall\-exec\fR" 4
  .IX Item "-msmall-exec"
  .PD 0
! .IP "\fB\-mno\-small\-exec\fR" 4
  .IX Item "-mno-small-exec"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
--- 31816,31835 ----
  register is always saved two words below the backchain.
  .Sp
  As long as the stack frame backchain is not used, code generated with
! \&\fB\-mpacked\-stack\fR is call\-compatible with code generated with
! \&\fB\-mno\-packed\-stack\fR.  Note that some non\-FSF releases of GCC 2.95 for
  S/390 or zSeries generated code that uses the stack frame backchain at run
! time, not just for debugging purposes.  Such code is not call\-compatible
  with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
  combination of \fB\-mbackchain\fR,
  \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
  to build a linux kernel use \fB\-msoft\-float\fR.
  .Sp
  The default is to not use the packed stack layout.
! .IP \fB\-msmall\-exec\fR 4
  .IX Item "-msmall-exec"
  .PD 0
! .IP \fB\-mno\-small\-exec\fR 4
  .IX Item "-mno-small-exec"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
*************** to do subroutine calls.
*** 31902,31999 ****
  This only works reliably if the total executable size does not
  exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
  which does not have this limitation.
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
  .PD 0
! .IP "\fB\-m31\fR" 4
  .IX Item "-m31"
  .PD
  When \fB\-m31\fR is specified, generate code compliant to the
! GNU/Linux for S/390 \s-1ABI.\s0  When \fB\-m64\fR is specified, generate
! code compliant to the GNU/Linux for zSeries \s-1ABI.\s0  This allows \s-1GCC\s0 in
  particular to generate 64\-bit instructions.  For the \fBs390\fR
  targets, the default is \fB\-m31\fR, while the \fBs390x\fR
  targets default to \fB\-m64\fR.
! .IP "\fB\-mzarch\fR" 4
  .IX Item "-mzarch"
  .PD 0
! .IP "\fB\-mesa\fR" 4
  .IX Item "-mesa"
  .PD
  When \fB\-mzarch\fR is specified, generate code using the
  instructions available on z/Architecture.
  When \fB\-mesa\fR is specified, generate code using the
! instructions available on \s-1ESA/390.\s0  Note that \fB\-mesa\fR is
  not possible with \fB\-m64\fR.
! When generating code compliant to the GNU/Linux for S/390 \s-1ABI,\s0
  the default is \fB\-mesa\fR.  When generating code compliant
! to the GNU/Linux for zSeries \s-1ABI,\s0 the default is \fB\-mzarch\fR.
! .IP "\fB\-mhtm\fR" 4
  .IX Item "-mhtm"
  .PD 0
! .IP "\fB\-mno\-htm\fR" 4
  .IX Item "-mno-htm"
  .PD
  The \fB\-mhtm\fR option enables a set of builtins making use of
  instructions available with the transactional execution facility
! introduced with the \s-1IBM\s0 zEnterprise \s-1EC12\s0 machine generation
! \&\fBS/390 System z Built-in Functions\fR.
  \&\fB\-mhtm\fR is enabled by default when using \fB\-march=zEC12\fR.
! .IP "\fB\-mvx\fR" 4
  .IX Item "-mvx"
  .PD 0
! .IP "\fB\-mno\-vx\fR" 4
  .IX Item "-mno-vx"
  .PD
  When \fB\-mvx\fR is specified, generate code using the instructions
! available with the vector extension facility introduced with the \s-1IBM\s0
  z13 machine generation.
! This option changes the \s-1ABI\s0 for some vector type values with regard to
  alignment and calling conventions.  In case vector type values are
! being used in an ABI-relevant context a \s-1GAS\s0 \fB.gnu_attribute\fR
! command will be added to mark the resulting binary with the \s-1ABI\s0 used.
  \&\fB\-mvx\fR is enabled by default when using \fB\-march=z13\fR.
! .IP "\fB\-mzvector\fR" 4
  .IX Item "-mzvector"
  .PD 0
! .IP "\fB\-mno\-zvector\fR" 4
  .IX Item "-mno-zvector"
  .PD
  The \fB\-mzvector\fR option enables vector language extensions and
  builtins using instructions available with the vector extension
! facility introduced with the \s-1IBM\s0 z13 machine generation.
  This option adds support for \fBvector\fR to be used as a keyword to
  define vector type variables and arguments.  \fBvector\fR is only
! available when \s-1GNU\s0 extensions are enabled.  It will not be expanded
  when requesting strict standard compliance e.g. with \fB\-std=c99\fR.
! In addition to the \s-1GCC\s0 low-level builtins \fB\-mzvector\fR enables
! a set of builtins added for compatibility with AltiVec-style
  implementations like Power and Cell.  In order to make use of these
  builtins the header file \fIvecintrin.h\fR needs to be included.
  \&\fB\-mzvector\fR is disabled by default.
! .IP "\fB\-mmvcle\fR" 4
  .IX Item "-mmvcle"
  .PD 0
! .IP "\fB\-mno\-mvcle\fR" 4
  .IX Item "-mno-mvcle"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
  to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
  use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
  size.
! .IP "\fB\-mdebug\fR" 4
  .IX Item "-mdebug"
  .PD 0
! .IP "\fB\-mno\-debug\fR" 4
  .IX Item "-mno-debug"
  .PD
  Print (or do not print) additional debug information when compiling.
  The default is to not print debug information.
! .IP "\fB\-march=\fR\fIcpu-type\fR" 4
  .IX Item "-march=cpu-type"
! Generate code that runs on \fIcpu-type\fR, which is the name of a
  system representing a certain processor type.  Possible values for
! \&\fIcpu-type\fR are \fBz900\fR/\fBarch5\fR, \fBz990\fR/\fBarch6\fR,
  \&\fBz9\-109\fR, \fBz9\-ec\fR/\fBarch7\fR, \fBz10\fR/\fBarch8\fR,
  \&\fBz196\fR/\fBarch9\fR, \fBzEC12\fR, \fBz13\fR/\fBarch11\fR,
  \&\fBz14\fR/\fBarch12\fR, \fBz15\fR/\fBarch13\fR,
--- 31837,31934 ----
  This only works reliably if the total executable size does not
  exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
  which does not have this limitation.
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
  .PD 0
! .IP \fB\-m31\fR 4
  .IX Item "-m31"
  .PD
  When \fB\-m31\fR is specified, generate code compliant to the
! GNU/Linux for S/390 ABI.  When \fB\-m64\fR is specified, generate
! code compliant to the GNU/Linux for zSeries ABI.  This allows GCC in
  particular to generate 64\-bit instructions.  For the \fBs390\fR
  targets, the default is \fB\-m31\fR, while the \fBs390x\fR
  targets default to \fB\-m64\fR.
! .IP \fB\-mzarch\fR 4
  .IX Item "-mzarch"
  .PD 0
! .IP \fB\-mesa\fR 4
  .IX Item "-mesa"
  .PD
  When \fB\-mzarch\fR is specified, generate code using the
  instructions available on z/Architecture.
  When \fB\-mesa\fR is specified, generate code using the
! instructions available on ESA/390.  Note that \fB\-mesa\fR is
  not possible with \fB\-m64\fR.
! When generating code compliant to the GNU/Linux for S/390 ABI,
  the default is \fB\-mesa\fR.  When generating code compliant
! to the GNU/Linux for zSeries ABI, the default is \fB\-mzarch\fR.
! .IP \fB\-mhtm\fR 4
  .IX Item "-mhtm"
  .PD 0
! .IP \fB\-mno\-htm\fR 4
  .IX Item "-mno-htm"
  .PD
  The \fB\-mhtm\fR option enables a set of builtins making use of
  instructions available with the transactional execution facility
! introduced with the IBM zEnterprise EC12 machine generation
! \&\fBS/390 System z Built\-in Functions\fR.
  \&\fB\-mhtm\fR is enabled by default when using \fB\-march=zEC12\fR.
! .IP \fB\-mvx\fR 4
  .IX Item "-mvx"
  .PD 0
! .IP \fB\-mno\-vx\fR 4
  .IX Item "-mno-vx"
  .PD
  When \fB\-mvx\fR is specified, generate code using the instructions
! available with the vector extension facility introduced with the IBM
  z13 machine generation.
! This option changes the ABI for some vector type values with regard to
  alignment and calling conventions.  In case vector type values are
! being used in an ABI\-relevant context a GAS \fB.gnu_attribute\fR
! command will be added to mark the resulting binary with the ABI used.
  \&\fB\-mvx\fR is enabled by default when using \fB\-march=z13\fR.
! .IP \fB\-mzvector\fR 4
  .IX Item "-mzvector"
  .PD 0
! .IP \fB\-mno\-zvector\fR 4
  .IX Item "-mno-zvector"
  .PD
  The \fB\-mzvector\fR option enables vector language extensions and
  builtins using instructions available with the vector extension
! facility introduced with the IBM z13 machine generation.
  This option adds support for \fBvector\fR to be used as a keyword to
  define vector type variables and arguments.  \fBvector\fR is only
! available when GNU extensions are enabled.  It will not be expanded
  when requesting strict standard compliance e.g. with \fB\-std=c99\fR.
! In addition to the GCC low\-level builtins \fB\-mzvector\fR enables
! a set of builtins added for compatibility with AltiVec\-style
  implementations like Power and Cell.  In order to make use of these
  builtins the header file \fIvecintrin.h\fR needs to be included.
  \&\fB\-mzvector\fR is disabled by default.
! .IP \fB\-mmvcle\fR 4
  .IX Item "-mmvcle"
  .PD 0
! .IP \fB\-mno\-mvcle\fR 4
  .IX Item "-mno-mvcle"
  .PD
  Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
  to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
  use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
  size.
! .IP \fB\-mdebug\fR 4
  .IX Item "-mdebug"
  .PD 0
! .IP \fB\-mno\-debug\fR 4
  .IX Item "-mno-debug"
  .PD
  Print (or do not print) additional debug information when compiling.
  The default is to not print debug information.
! .IP \fB\-march=\fR\fIcpu\-type\fR 4
  .IX Item "-march=cpu-type"
! Generate code that runs on \fIcpu\-type\fR, which is the name of a
  system representing a certain processor type.  Possible values for
! \&\fIcpu\-type\fR are \fBz900\fR/\fBarch5\fR, \fBz990\fR/\fBarch6\fR,
  \&\fBz9\-109\fR, \fBz9\-ec\fR/\fBarch7\fR, \fBz10\fR/\fBarch8\fR,
  \&\fBz196\fR/\fBarch9\fR, \fBzEC12\fR, \fBz13\fR/\fBarch11\fR,
  \&\fBz14\fR/\fBarch12\fR, \fBz15\fR/\fBarch13\fR,
*************** The default is \fB\-march=z900\fR.
*** 32003,32083 ****
  .Sp
  Specifying \fBnative\fR as cpu type can be used to select the best
  architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize the
  processor.
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu-type\fR everything applicable about the generated code,
! except for the \s-1ABI\s0 and the set of available instructions.
! The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
  The default is the value used for \fB\-march\fR.
! .IP "\fB\-mtpf\-trace\fR" 4
  .IX Item "-mtpf-trace"
  .PD 0
! .IP "\fB\-mno\-tpf\-trace\fR" 4
  .IX Item "-mno-tpf-trace"
  .PD
! Generate code that adds (does not add) in \s-1TPF OS\s0 specific branches to trace
  routines in the operating system.  This option is off by default, even
! when compiling for the \s-1TPF OS.\s0
! .IP "\fB\-mtpf\-trace\-skip\fR" 4
  .IX Item "-mtpf-trace-skip"
  .PD 0
! .IP "\fB\-mno\-tpf\-trace\-skip\fR" 4
  .IX Item "-mno-tpf-trace-skip"
  .PD
  Generate code that changes (does not change) the default branch
  targets enabled by \fB\-mtpf\-trace\fR to point to specialized trace
  routines providing the ability of selectively skipping function trace
! entries for the \s-1TPF OS.\s0  This option is off by default, even when
! compiling for the \s-1TPF OS\s0 and specifying \fB\-mtpf\-trace\fR.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating-point multiply and
  accumulate instructions.  These instructions are generated by default if
  hardware floating point is used.
! .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
  .IX Item "-mwarn-framesize=framesize"
  Emit a warning if the current function exceeds the given frame size.  Because
! this is a compile-time check it doesn't need to be a real problem when the program
  runs.  It is intended to identify functions that most probably cause
  a stack overflow.  It is useful to be used in an environment with limited stack
  size e.g. the linux kernel.
! .IP "\fB\-mwarn\-dynamicstack\fR" 4
  .IX Item "-mwarn-dynamicstack"
! Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically-sized
  arrays.  This is generally a bad idea with a limited stack size.
! .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
  .IX Item "-mstack-guard=stack-guard"
  .PD 0
! .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
  .IX Item "-mstack-size=stack-size"
  .PD
  If these options are provided the S/390 back end emits additional instructions in
! the function prologue that trigger a trap if the stack size is \fIstack-guard\fR
! bytes above the \fIstack-size\fR (remember that the stack on S/390 grows downward).
! If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
  the frame size of the compiled function is chosen.
  These options are intended to be used to help debugging stack overflow problems.
  The additionally emitted code causes only little overhead and hence can also be
! used in production-like systems without greater performance degradation.  The given
! values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
! \&\fIstack-guard\fR without exceeding 64k.
  In order to be efficient the extra code makes the assumption that the stack starts
! at an address aligned to the value given by \fIstack-size\fR.
! The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
! .IP "\fB\-mhotpatch=\fR\fIpre-halfwords\fR\fB,\fR\fIpost-halfwords\fR" 4
  .IX Item "-mhotpatch=pre-halfwords,post-halfwords"
! If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
  prologue is generated for all functions in the compilation unit.
! The funtion label is prepended with the given number of two-byte
! \&\s-1NOP\s0 instructions (\fIpre-halfwords\fR, maximum 1000000).  After
! the label, 2 * \fIpost-halfwords\fR bytes are appended, using the
! largest \s-1NOP\s0 like instructions the architecture allows (maximum
  1000000).
  .Sp
  If both arguments are zero, hotpatching is disabled.
--- 31938,32018 ----
  .Sp
  Specifying \fBnative\fR as cpu type can be used to select the best
  architecture option for the host processor.
! \&\fB\-march=native\fR has no effect if GCC does not recognize the
  processor.
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu\-type\fR everything applicable about the generated code,
! except for the ABI and the set of available instructions.
! The list of \fIcpu\-type\fR values is the same as for \fB\-march\fR.
  The default is the value used for \fB\-march\fR.
! .IP \fB\-mtpf\-trace\fR 4
  .IX Item "-mtpf-trace"
  .PD 0
! .IP \fB\-mno\-tpf\-trace\fR 4
  .IX Item "-mno-tpf-trace"
  .PD
! Generate code that adds (does not add) in TPF OS specific branches to trace
  routines in the operating system.  This option is off by default, even
! when compiling for the TPF OS.
! .IP \fB\-mtpf\-trace\-skip\fR 4
  .IX Item "-mtpf-trace-skip"
  .PD 0
! .IP \fB\-mno\-tpf\-trace\-skip\fR 4
  .IX Item "-mno-tpf-trace-skip"
  .PD
  Generate code that changes (does not change) the default branch
  targets enabled by \fB\-mtpf\-trace\fR to point to specialized trace
  routines providing the ability of selectively skipping function trace
! entries for the TPF OS.  This option is off by default, even when
! compiling for the TPF OS and specifying \fB\-mtpf\-trace\fR.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating\-point multiply and
  accumulate instructions.  These instructions are generated by default if
  hardware floating point is used.
! .IP \fB\-mwarn\-framesize=\fR\fIframesize\fR 4
  .IX Item "-mwarn-framesize=framesize"
  Emit a warning if the current function exceeds the given frame size.  Because
! this is a compile\-time check it doesn\*(Aqt need to be a real problem when the program
  runs.  It is intended to identify functions that most probably cause
  a stack overflow.  It is useful to be used in an environment with limited stack
  size e.g. the linux kernel.
! .IP \fB\-mwarn\-dynamicstack\fR 4
  .IX Item "-mwarn-dynamicstack"
! Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically\-sized
  arrays.  This is generally a bad idea with a limited stack size.
! .IP \fB\-mstack\-guard=\fR\fIstack\-guard\fR 4
  .IX Item "-mstack-guard=stack-guard"
  .PD 0
! .IP \fB\-mstack\-size=\fR\fIstack\-size\fR 4
  .IX Item "-mstack-size=stack-size"
  .PD
  If these options are provided the S/390 back end emits additional instructions in
! the function prologue that trigger a trap if the stack size is \fIstack\-guard\fR
! bytes above the \fIstack\-size\fR (remember that the stack on S/390 grows downward).
! If the \fIstack\-guard\fR option is omitted the smallest power of 2 larger than
  the frame size of the compiled function is chosen.
  These options are intended to be used to help debugging stack overflow problems.
  The additionally emitted code causes only little overhead and hence can also be
! used in production\-like systems without greater performance degradation.  The given
! values have to be exact powers of 2 and \fIstack\-size\fR has to be greater than
! \&\fIstack\-guard\fR without exceeding 64k.
  In order to be efficient the extra code makes the assumption that the stack starts
! at an address aligned to the value given by \fIstack\-size\fR.
! The \fIstack\-guard\fR option can only be used in conjunction with \fIstack\-size\fR.
! .IP \fB\-mhotpatch=\fR\fIpre\-halfwords\fR\fB,\fR\fIpost\-halfwords\fR 4
  .IX Item "-mhotpatch=pre-halfwords,post-halfwords"
! If the hotpatch option is enabled, a "hot\-patching" function
  prologue is generated for all functions in the compilation unit.
! The funtion label is prepended with the given number of two\-byte
! NOP instructions (\fIpre\-halfwords\fR, maximum 1000000).  After
! the label, 2 * \fIpost\-halfwords\fR bytes are appended, using the
! largest NOP like instructions the architecture allows (maximum
  1000000).
  .Sp
  If both arguments are zero, hotpatching is disabled.
*************** If both arguments are zero, hotpatching
*** 32085,32262 ****
  This option can be overridden for individual functions with the
  \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
  .PP
! \fI\s-1SH\s0 Options\fR
  .IX Subsection "SH Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
! .IP "\fB\-m1\fR" 4
  .IX Item "-m1"
! Generate code for the \s-1SH1.\s0
! .IP "\fB\-m2\fR" 4
  .IX Item "-m2"
! Generate code for the \s-1SH2.\s0
! .IP "\fB\-m2e\fR" 4
  .IX Item "-m2e"
  Generate code for the SH2e.
! .IP "\fB\-m2a\-nofpu\fR" 4
  .IX Item "-m2a-nofpu"
! Generate code for the SH2a without \s-1FPU,\s0 or for a SH2a\-FPU in such a way
! that the floating-point unit is not used.
! .IP "\fB\-m2a\-single\-only\fR" 4
  .IX Item "-m2a-single-only"
! Generate code for the SH2a\-FPU, in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m2a\-single\fR" 4
  .IX Item "-m2a-single"
! Generate code for the SH2a\-FPU assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m2a\fR" 4
  .IX Item "-m2a"
! Generate code for the SH2a\-FPU assuming the floating-point unit is in
! double-precision mode by default.
! .IP "\fB\-m3\fR" 4
  .IX Item "-m3"
! Generate code for the \s-1SH3.\s0
! .IP "\fB\-m3e\fR" 4
  .IX Item "-m3e"
  Generate code for the SH3e.
! .IP "\fB\-m4\-nofpu\fR" 4
  .IX Item "-m4-nofpu"
! Generate code for the \s-1SH4\s0 without a floating-point unit.
! .IP "\fB\-m4\-single\-only\fR" 4
  .IX Item "-m4-single-only"
! Generate code for the \s-1SH4\s0 with a floating-point unit that only
! supports single-precision arithmetic.
! .IP "\fB\-m4\-single\fR" 4
  .IX Item "-m4-single"
! Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4\fR" 4
  .IX Item "-m4"
! Generate code for the \s-1SH4.\s0
! .IP "\fB\-m4\-100\fR" 4
  .IX Item "-m4-100"
! Generate code for \s-1SH4\-100.\s0
! .IP "\fB\-m4\-100\-nofpu\fR" 4
  .IX Item "-m4-100-nofpu"
! Generate code for \s-1SH4\-100\s0 in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4\-100\-single\fR" 4
  .IX Item "-m4-100-single"
! Generate code for \s-1SH4\-100\s0 assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4\-100\-single\-only\fR" 4
  .IX Item "-m4-100-single-only"
! Generate code for \s-1SH4\-100\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-200\fR" 4
  .IX Item "-m4-200"
! Generate code for \s-1SH4\-200.\s0
! .IP "\fB\-m4\-200\-nofpu\fR" 4
  .IX Item "-m4-200-nofpu"
! Generate code for \s-1SH4\-200\s0 without in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4\-200\-single\fR" 4
  .IX Item "-m4-200-single"
! Generate code for \s-1SH4\-200\s0 assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4\-200\-single\-only\fR" 4
  .IX Item "-m4-200-single-only"
! Generate code for \s-1SH4\-200\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-300\fR" 4
  .IX Item "-m4-300"
! Generate code for \s-1SH4\-300.\s0
! .IP "\fB\-m4\-300\-nofpu\fR" 4
  .IX Item "-m4-300-nofpu"
! Generate code for \s-1SH4\-300\s0 without in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4\-300\-single\fR" 4
  .IX Item "-m4-300-single"
! Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-300\-single\-only\fR" 4
  .IX Item "-m4-300-single-only"
! Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4\-340\fR" 4
  .IX Item "-m4-340"
! Generate code for \s-1SH4\-340\s0 (no \s-1MMU,\s0 no \s-1FPU\s0).
! .IP "\fB\-m4\-500\fR" 4
  .IX Item "-m4-500"
! Generate code for \s-1SH4\-500\s0 (no \s-1FPU\s0).  Passes \fB\-isa=sh4\-nofpu\fR to the
  assembler.
! .IP "\fB\-m4a\-nofpu\fR" 4
  .IX Item "-m4a-nofpu"
  Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
! floating-point unit is not used.
! .IP "\fB\-m4a\-single\-only\fR" 4
  .IX Item "-m4a-single-only"
! Generate code for the SH4a, in such a way that no double-precision
! floating-point operations are used.
! .IP "\fB\-m4a\-single\fR" 4
  .IX Item "-m4a-single"
! Generate code for the SH4a assuming the floating-point unit is in
! single-precision mode by default.
! .IP "\fB\-m4a\fR" 4
  .IX Item "-m4a"
  Generate code for the SH4a.
! .IP "\fB\-m4al\fR" 4
  .IX Item "-m4al"
  Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
! \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
  instructions at the moment.
! .IP "\fB\-mb\fR" 4
  .IX Item "-mb"
! Compile code for the processor in big-endian mode.
! .IP "\fB\-ml\fR" 4
  .IX Item "-ml"
! Compile code for the processor in little-endian mode.
! .IP "\fB\-mdalign\fR" 4
  .IX Item "-mdalign"
  Align doubles at 64\-bit boundaries.  Note that this changes the calling
  conventions, and thus some functions from the standard C library do
  not work unless you recompile it first with \fB\-mdalign\fR.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP "\fB\-mbigtable\fR" 4
  .IX Item "-mbigtable"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
! .IP "\fB\-mbitops\fR" 4
  .IX Item "-mbitops"
! Enable the use of bit manipulation instructions on \s-1SH2A.\s0
! .IP "\fB\-mfmovd\fR" 4
  .IX Item "-mfmovd"
  Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
  alignment constraints.
! .IP "\fB\-mrenesas\fR" 4
  .IX Item "-mrenesas"
  Comply with the calling conventions defined by Renesas.
! .IP "\fB\-mno\-renesas\fR" 4
  .IX Item "-mno-renesas"
! Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
  conventions were available.  This option is the default for all
! targets of the \s-1SH\s0 toolchain.
! .IP "\fB\-mnomacsave\fR" 4
  .IX Item "-mnomacsave"
! Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
  \&\fB\-mrenesas\fR is given.
! .IP "\fB\-mieee\fR" 4
  .IX Item "-mieee"
  .PD 0
! .IP "\fB\-mno\-ieee\fR" 4
  .IX Item "-mno-ieee"
  .PD
! Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
  handling of cases where the result of a comparison is unordered.  By default
  \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
  enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
! floating-point greater-equal and less-equal comparisons.  The implicit settings
  can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
! .IP "\fB\-minline\-ic_invalidate\fR" 4
  .IX Item "-minline-ic_invalidate"
  Inline code to invalidate instruction cache entries after setting up
  nested function trampolines.
--- 32020,32197 ----
  This option can be overridden for individual functions with the
  \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
  .PP
! \fISH Options\fR
  .IX Subsection "SH Options"
  .PP
! These \fB\-m\fR options are defined for the SH implementations:
! .IP \fB\-m1\fR 4
  .IX Item "-m1"
! Generate code for the SH1.
! .IP \fB\-m2\fR 4
  .IX Item "-m2"
! Generate code for the SH2.
! .IP \fB\-m2e\fR 4
  .IX Item "-m2e"
  Generate code for the SH2e.
! .IP \fB\-m2a\-nofpu\fR 4
  .IX Item "-m2a-nofpu"
! Generate code for the SH2a without FPU, or for a SH2a\-FPU in such a way
! that the floating\-point unit is not used.
! .IP \fB\-m2a\-single\-only\fR 4
  .IX Item "-m2a-single-only"
! Generate code for the SH2a\-FPU, in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m2a\-single\fR 4
  .IX Item "-m2a-single"
! Generate code for the SH2a\-FPU assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m2a\fR 4
  .IX Item "-m2a"
! Generate code for the SH2a\-FPU assuming the floating\-point unit is in
! double\-precision mode by default.
! .IP \fB\-m3\fR 4
  .IX Item "-m3"
! Generate code for the SH3.
! .IP \fB\-m3e\fR 4
  .IX Item "-m3e"
  Generate code for the SH3e.
! .IP \fB\-m4\-nofpu\fR 4
  .IX Item "-m4-nofpu"
! Generate code for the SH4 without a floating\-point unit.
! .IP \fB\-m4\-single\-only\fR 4
  .IX Item "-m4-single-only"
! Generate code for the SH4 with a floating\-point unit that only
! supports single\-precision arithmetic.
! .IP \fB\-m4\-single\fR 4
  .IX Item "-m4-single"
! Generate code for the SH4 assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4\fR 4
  .IX Item "-m4"
! Generate code for the SH4.
! .IP \fB\-m4\-100\fR 4
  .IX Item "-m4-100"
! Generate code for SH4\-100.
! .IP \fB\-m4\-100\-nofpu\fR 4
  .IX Item "-m4-100-nofpu"
! Generate code for SH4\-100 in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4\-100\-single\fR 4
  .IX Item "-m4-100-single"
! Generate code for SH4\-100 assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4\-100\-single\-only\fR 4
  .IX Item "-m4-100-single-only"
! Generate code for SH4\-100 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-200\fR 4
  .IX Item "-m4-200"
! Generate code for SH4\-200.
! .IP \fB\-m4\-200\-nofpu\fR 4
  .IX Item "-m4-200-nofpu"
! Generate code for SH4\-200 without in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4\-200\-single\fR 4
  .IX Item "-m4-200-single"
! Generate code for SH4\-200 assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4\-200\-single\-only\fR 4
  .IX Item "-m4-200-single-only"
! Generate code for SH4\-200 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-300\fR 4
  .IX Item "-m4-300"
! Generate code for SH4\-300.
! .IP \fB\-m4\-300\-nofpu\fR 4
  .IX Item "-m4-300-nofpu"
! Generate code for SH4\-300 without in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4\-300\-single\fR 4
  .IX Item "-m4-300-single"
! Generate code for SH4\-300 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-300\-single\-only\fR 4
  .IX Item "-m4-300-single-only"
! Generate code for SH4\-300 in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4\-340\fR 4
  .IX Item "-m4-340"
! Generate code for SH4\-340 (no MMU, no FPU).
! .IP \fB\-m4\-500\fR 4
  .IX Item "-m4-500"
! Generate code for SH4\-500 (no FPU).  Passes \fB\-isa=sh4\-nofpu\fR to the
  assembler.
! .IP \fB\-m4a\-nofpu\fR 4
  .IX Item "-m4a-nofpu"
  Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
! floating\-point unit is not used.
! .IP \fB\-m4a\-single\-only\fR 4
  .IX Item "-m4a-single-only"
! Generate code for the SH4a, in such a way that no double\-precision
! floating\-point operations are used.
! .IP \fB\-m4a\-single\fR 4
  .IX Item "-m4a-single"
! Generate code for the SH4a assuming the floating\-point unit is in
! single\-precision mode by default.
! .IP \fB\-m4a\fR 4
  .IX Item "-m4a"
  Generate code for the SH4a.
! .IP \fB\-m4al\fR 4
  .IX Item "-m4al"
  Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
! \&\fB\-dsp\fR to the assembler.  GCC doesn\*(Aqt generate any DSP
  instructions at the moment.
! .IP \fB\-mb\fR 4
  .IX Item "-mb"
! Compile code for the processor in big\-endian mode.
! .IP \fB\-ml\fR 4
  .IX Item "-ml"
! Compile code for the processor in little\-endian mode.
! .IP \fB\-mdalign\fR 4
  .IX Item "-mdalign"
  Align doubles at 64\-bit boundaries.  Note that this changes the calling
  conventions, and thus some functions from the standard C library do
  not work unless you recompile it first with \fB\-mdalign\fR.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  Shorten some address references at link time, when possible; uses the
  linker option \fB\-relax\fR.
! .IP \fB\-mbigtable\fR 4
  .IX Item "-mbigtable"
  Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
  16\-bit offsets.
! .IP \fB\-mbitops\fR 4
  .IX Item "-mbitops"
! Enable the use of bit manipulation instructions on SH2A.
! .IP \fB\-mfmovd\fR 4
  .IX Item "-mfmovd"
  Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
  alignment constraints.
! .IP \fB\-mrenesas\fR 4
  .IX Item "-mrenesas"
  Comply with the calling conventions defined by Renesas.
! .IP \fB\-mno\-renesas\fR 4
  .IX Item "-mno-renesas"
! Comply with the calling conventions defined for GCC before the Renesas
  conventions were available.  This option is the default for all
! targets of the SH toolchain.
! .IP \fB\-mnomacsave\fR 4
  .IX Item "-mnomacsave"
! Mark the \f(CW\*(C`MAC\*(C'\fR register as call\-clobbered, even if
  \&\fB\-mrenesas\fR is given.
! .IP \fB\-mieee\fR 4
  .IX Item "-mieee"
  .PD 0
! .IP \fB\-mno\-ieee\fR 4
  .IX Item "-mno-ieee"
  .PD
! Control the IEEE compliance of floating\-point comparisons, which affects the
  handling of cases where the result of a comparison is unordered.  By default
  \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
  enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
! floating\-point greater\-equal and less\-equal comparisons.  The implicit settings
  can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
! .IP \fB\-minline\-ic_invalidate\fR 4
  .IX Item "-minline-ic_invalidate"
  Inline code to invalidate instruction cache entries after setting up
  nested function trampolines.
*************** If the selected code generation option d
*** 32267,32334 ****
  instruction, and \fB\-musermode\fR is not in effect, the inlined code
  manipulates the instruction cache address array directly with an associative
  write.  This not only requires privileged mode at run time, but it also
! fails if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
! .IP "\fB\-misize\fR" 4
  .IX Item "-misize"
  Dump instruction size and location in the assembly code.
! .IP "\fB\-mpadstruct\fR" 4
  .IX Item "-mpadstruct"
  This option is deprecated.  It pads structures to multiple of 4 bytes,
! which is incompatible with the \s-1SH ABI.\s0
! .IP "\fB\-matomic\-model=\fR\fImodel\fR" 4
  .IX Item "-matomic-model=model"
  Sets the model of atomic operations and additional parameters as a comma
! separated list.  For details on the atomic built-in functions see
  \&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
  .RS 4
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable compiler generated atomic sequences and emit library calls for atomic
  operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
! .IP "\fBsoft-gusa\fR" 4
  .IX Item "soft-gusa"
  Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
! built-in functions.  The generated atomic sequences require additional support
  from the interrupt/exception handling code of the system and are only suitable
! for SH3* and SH4* single-core systems.  This option is enabled by default when
! the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is \s-1SH4A,\s0
  this option also partially utilizes the hardware atomic instructions
  \&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
  \&\fBstrict\fR is specified.
! .IP "\fBsoft-tcb\fR" 4
  .IX Item "soft-tcb"
  Generate software atomic sequences that use a variable in the thread control
  block.  This is a variation of the gUSA sequences which can also be used on
  SH1* and SH2* targets.  The generated atomic sequences require additional
  support from the interrupt/exception handling code of the system and are only
! suitable for single-core systems.  When using this model, the \fBgbr\-offset=\fR
  parameter has to be specified as well.
! .IP "\fBsoft-imask\fR" 4
  .IX Item "soft-imask"
  Generate software atomic sequences that temporarily disable interrupts by
  setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
! in privileged mode and is only suitable for single-core systems.  Additional
  support from the interrupt/exception handling code of the system is not
  required.  This model is enabled by default when the target is
  \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
! .IP "\fBhard-llcs\fR" 4
  .IX Item "hard-llcs"
  Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
! instructions only.  This is only available on \s-1SH4A\s0 and is suitable for
! multi-core systems.  Since the hardware instructions support only 32 bit atomic
  variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
  Code compiled with this option is also compatible with other software
! atomic model interrupt/exception handling systems if executed on an \s-1SH4A\s0
  system.  Additional support from the interrupt/exception handling code of the
  system is not required for this model.
! .IP "\fBgbr\-offset=\fR" 4
  .IX Item "gbr-offset="
  This parameter specifies the offset in bytes of the variable in the thread
  control block structure that should be used by the generated atomic sequences
! when the \fBsoft-tcb\fR model has been selected.  For other models this
  parameter is ignored.  The specified value must be an integer multiple of four
  and in the range 0\-1020.
! .IP "\fBstrict\fR" 4
  .IX Item "strict"
  This parameter prevents mixed usage of multiple atomic models, even if they
  are compatible, and makes the compiler generate atomic sequences of the
--- 32202,32269 ----
  instruction, and \fB\-musermode\fR is not in effect, the inlined code
  manipulates the instruction cache address array directly with an associative
  write.  This not only requires privileged mode at run time, but it also
! fails if the cache line had been mapped via the TLB and has become unmapped.
! .IP \fB\-misize\fR 4
  .IX Item "-misize"
  Dump instruction size and location in the assembly code.
! .IP \fB\-mpadstruct\fR 4
  .IX Item "-mpadstruct"
  This option is deprecated.  It pads structures to multiple of 4 bytes,
! which is incompatible with the SH ABI.
! .IP \fB\-matomic\-model=\fR\fImodel\fR 4
  .IX Item "-matomic-model=model"
  Sets the model of atomic operations and additional parameters as a comma
! separated list.  For details on the atomic built\-in functions see
  \&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
  .RS 4
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable compiler generated atomic sequences and emit library calls for atomic
  operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
! .IP \fBsoft\-gusa\fR 4
  .IX Item "soft-gusa"
  Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
! built\-in functions.  The generated atomic sequences require additional support
  from the interrupt/exception handling code of the system and are only suitable
! for SH3* and SH4* single\-core systems.  This option is enabled by default when
! the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is SH4A,
  this option also partially utilizes the hardware atomic instructions
  \&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
  \&\fBstrict\fR is specified.
! .IP \fBsoft\-tcb\fR 4
  .IX Item "soft-tcb"
  Generate software atomic sequences that use a variable in the thread control
  block.  This is a variation of the gUSA sequences which can also be used on
  SH1* and SH2* targets.  The generated atomic sequences require additional
  support from the interrupt/exception handling code of the system and are only
! suitable for single\-core systems.  When using this model, the \fBgbr\-offset=\fR
  parameter has to be specified as well.
! .IP \fBsoft\-imask\fR 4
  .IX Item "soft-imask"
  Generate software atomic sequences that temporarily disable interrupts by
  setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
! in privileged mode and is only suitable for single\-core systems.  Additional
  support from the interrupt/exception handling code of the system is not
  required.  This model is enabled by default when the target is
  \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
! .IP \fBhard\-llcs\fR 4
  .IX Item "hard-llcs"
  Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
! instructions only.  This is only available on SH4A and is suitable for
! multi\-core systems.  Since the hardware instructions support only 32 bit atomic
  variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
  Code compiled with this option is also compatible with other software
! atomic model interrupt/exception handling systems if executed on an SH4A
  system.  Additional support from the interrupt/exception handling code of the
  system is not required for this model.
! .IP \fBgbr\-offset=\fR 4
  .IX Item "gbr-offset="
  This parameter specifies the offset in bytes of the variable in the thread
  control block structure that should be used by the generated atomic sequences
! when the \fBsoft\-tcb\fR model has been selected.  For other models this
  parameter is ignored.  The specified value must be an integer multiple of four
  and in the range 0\-1020.
! .IP \fBstrict\fR 4
  .IX Item "strict"
  This parameter prevents mixed usage of multiple atomic models, even if they
  are compatible, and makes the compiler generate atomic sequences of the
*************** specified model only.
*** 32336,32647 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mtas\fR" 4
  .IX Item "-mtas"
  Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
  Notice that depending on the particular hardware and software configuration
  this can degrade overall performance due to the operand cache line flushes
! that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi-core \s-1SH4A\s0
  processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
  can result in data corruption for certain cache configurations.
! .IP "\fB\-mprefergot\fR" 4
  .IX Item "-mprefergot"
! When generating position-independent code, emit function calls using
  the Global Offset Table instead of the Procedure Linkage Table.
! .IP "\fB\-musermode\fR" 4
  .IX Item "-musermode"
  .PD 0
! .IP "\fB\-mno\-usermode\fR" 4
  .IX Item "-mno-usermode"
  .PD
! Don't allow (allow) the compiler generating privileged mode code.  Specifying
  \&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
  inlined code would not work in user mode.  \fB\-musermode\fR is the default
  when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
  \&\fB\-musermode\fR has no effect, since there is no user mode.
! .IP "\fB\-multcost=\fR\fInumber\fR" 4
  .IX Item "-multcost=number"
  Set the cost to assume for a multiply insn.
! .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
  .IX Item "-mdiv=strategy"
  Set the division strategy to be used for integer division operations.
  \&\fIstrategy\fR can be one of:
  .RS 4
! .IP "\fBcall\-div1\fR" 4
  .IX Item "call-div1"
! Calls a library function that uses the single-step division instruction
  \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
! unspecified result and does not trap.  This is the default except for \s-1SH4,
! SH2A\s0 and SHcompact.
! .IP "\fBcall-fp\fR" 4
  .IX Item "call-fp"
  Calls a library function that performs the operation in double precision
! floating point.  Division by zero causes a floating-point exception.  This is
! the default for SHcompact with \s-1FPU.\s0  Specifying this for targets that do not
! have a double precision \s-1FPU\s0 defaults to \f(CW\*(C`call\-div1\*(C'\fR.
! .IP "\fBcall-table\fR" 4
  .IX Item "call-table"
  Calls a library function that uses a lookup table for small divisors and
  the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
  by zero calculates an unspecified result and does not trap.  This is the default
! for \s-1SH4.\s0  Specifying this for targets that do not have dynamic shift
  instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
  .RE
  .RS 4
  .Sp
  When a division strategy has not been specified the default strategy is
! selected based on the current target.  For \s-1SH2A\s0 the default strategy is to
  use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
  calls.
  .RE
! .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
  .IX Item "-maccumulate-outgoing-args"
  Reserve space once for outgoing arguments in the function prologue rather
  than around each call.  Generally beneficial for performance and size.  Also
  needed for unwinding to avoid changing the stack frame around conditional code.
! .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
  .IX Item "-mdivsi3_libfunc=name"
  Set the name of the library function used for 32\-bit signed division to
  \&\fIname\fR.
  This only affects the name used in the \fBcall\fR division strategies, and
  the compiler still expects the same sets of input/output/clobbered registers as
  if this option were not present.
! .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
  .IX Item "-mbranch-cost=num"
  Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
! make the compiler try to generate more branch-free code if possible.  
  If not specified the value is selected depending on the processor type that
  is being compiled for.
! .IP "\fB\-mzdcbranch\fR" 4
  .IX Item "-mzdcbranch"
  .PD 0
! .IP "\fB\-mno\-zdcbranch\fR" 4
  .IX Item "-mno-zdcbranch"
  .PD
  Assume (do not assume) that zero displacement conditional branch instructions
  \&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
  compiler prefers zero displacement branch code sequences.  This is
! enabled by default when generating code for \s-1SH4\s0 and \s-1SH4A.\s0  It can be explicitly
  disabled by specifying \fB\-mno\-zdcbranch\fR.
! .IP "\fB\-mcbranch\-force\-delay\-slot\fR" 4
  .IX Item "-mcbranch-force-delay-slot"
  Force the usage of delay slots for conditional branches, which stuffs the delay
  slot with a \f(CW\*(C`nop\*(C'\fR if a suitable instruction cannot be found.  By default
  this option is disabled.  It can be enabled to work around hardware bugs as
! found in the original \s-1SH7055.\s0
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP "\fB\-mfsca\fR" 4
  .IX Item "-mfsca"
  .PD 0
! .IP "\fB\-mno\-fsca\fR" 4
  .IX Item "-mno-fsca"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
  and cosine approximations.  The option \fB\-mfsca\fR must be used in
  combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
! when generating code for \s-1SH4A.\s0  Using \fB\-mno\-fsca\fR disables sine and cosine
  approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
! .IP "\fB\-mfsrra\fR" 4
  .IX Item "-mfsrra"
  .PD 0
! .IP "\fB\-mno\-fsrra\fR" 4
  .IX Item "-mno-fsrra"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
  reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
  in combination with \fB\-funsafe\-math\-optimizations\fR and
  \&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
! \&\s-1SH4A.\s0  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
  even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
  in effect.
! .IP "\fB\-mpretend\-cmove\fR" 4
  .IX Item "-mpretend-cmove"
! Prefer zero-displacement conditional branches for conditional move instruction
! patterns.  This can result in faster code on the \s-1SH4\s0 processor.
! .IP "\fB\-mfdpic\fR" 4
  .IX Item "-mfdpic"
! Generate code using the \s-1FDPIC ABI.\s0
  .PP
  \fISolaris 2 Options\fR
  .IX Subsection "Solaris 2 Options"
  .PP
  These \fB\-m\fR options are supported on Solaris 2:
! .IP "\fB\-mclear\-hwcap\fR" 4
  .IX Item "-mclear-hwcap"
  \&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
  capabilities generated by the Solaris assembler.  This is only necessary
! when object files use \s-1ISA\s0 extensions not supported by the current
  machine, but check at runtime whether or not to use them.
! .IP "\fB\-mimpure\-text\fR" 4
  .IX Item "-mimpure-text"
  \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
  the compiler to not pass \fB\-z text\fR to the linker when linking a
! shared object.  Using this option, you can link position-dependent
  code into a shared object.
  .Sp
! \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
! allocatable but non-writable sections\*(R" linker error message.
! However, the necessary relocations trigger copy-on-write, and the
  shared object is not actually shared across processes.  Instead of
  using \fB\-mimpure\-text\fR, you should compile all source code with
  \&\fB\-fpic\fR or \fB\-fPIC\fR.
  .PP
  These switches are supported in addition to the above on Solaris 2:
! .IP "\fB\-pthreads\fR" 4
  .IX Item "-pthreads"
  This is a synonym for \fB\-pthread\fR.
  .PP
! \fI\s-1SPARC\s0 Options\fR
  .IX Subsection "SPARC Options"
  .PP
! These \fB\-m\fR options are supported on the \s-1SPARC:\s0
! .IP "\fB\-mno\-app\-regs\fR" 4
  .IX Item "-mno-app-regs"
  .PD 0
! .IP "\fB\-mapp\-regs\fR" 4
  .IX Item "-mapp-regs"
  .PD
  Specify \fB\-mapp\-regs\fR to generate output using the global registers
! 2 through 4, which the \s-1SPARC SVR4 ABI\s0 reserves for applications.  Like the
  global register 1, each global register 2 through 4 is then treated as an
  allocable register that is clobbered by function calls.  This is the default.
  .Sp
! To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
  specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
  software with this option.
! .IP "\fB\-mflat\fR" 4
  .IX Item "-mflat"
  .PD 0
! .IP "\fB\-mno\-flat\fR" 4
  .IX Item "-mno-flat"
  .PD
  With \fB\-mflat\fR, the compiler does not generate save/restore instructions
! and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
  with the regular register window model.  The local registers and the input
! registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and are
  saved on the stack as needed.
  .Sp
  With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
  instructions (except for leaf functions).  This is the normal operating mode.
! .IP "\fB\-mfpu\fR" 4
  .IX Item "-mfpu"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Generate output containing floating-point instructions.  This is the
  default.
! .IP "\fB\-mno\-fpu\fR" 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
! targets.  Normally the facilities of the machine's usual C compiler are
! used, but this cannot be done directly in cross-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
! \&\fBsparclite\-*\-*\fR do provide software floating-point support.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
  this to work.
! .IP "\fB\-mhard\-quad\-float\fR" 4
  .IX Item "-mhard-quad-float"
! Generate output containing quad-word (long double) floating-point
  instructions.
! .IP "\fB\-msoft\-quad\-float\fR" 4
  .IX Item "-msoft-quad-float"
! Generate output containing library calls for quad-word (long double)
! floating-point instructions.  The functions called are those specified
! in the \s-1SPARC ABI.\s0  This is the default.
  .Sp
! As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
! support for the quad-word floating-point instructions.  They all invoke
  a trap handler for one of these instructions, and then the trap handler
  emulates the effect of the instruction.  Because of the trap handler overhead,
! this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
  \&\fB\-msoft\-quad\-float\fR option is the default.
! .IP "\fB\-mno\-unaligned\-doubles\fR" 4
  .IX Item "-mno-unaligned-doubles"
  .PD 0
! .IP "\fB\-munaligned\-doubles\fR" 4
  .IX Item "-munaligned-doubles"
  .PD
  Assume that doubles have 8\-byte alignment.  This is the default.
  .Sp
! With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
  alignment only if they are contained in another type, or if they have an
  absolute address.  Otherwise, it assumes they have 4\-byte alignment.
  Specifying this option avoids some rare compatibility problems with code
  generated by other compilers.  It is not the default because it results
! in a performance loss, especially for floating-point code.
! .IP "\fB\-muser\-mode\fR" 4
  .IX Item "-muser-mode"
  .PD 0
! .IP "\fB\-mno\-user\-mode\fR" 4
  .IX Item "-mno-user-mode"
  .PD
  Do not generate code that can only run in supervisor mode.  This is relevant
! only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  This
  is the default.
! .IP "\fB\-mfaster\-structs\fR" 4
  .IX Item "-mfaster-structs"
  .PD 0
! .IP "\fB\-mno\-faster\-structs\fR" 4
  .IX Item "-mno-faster-structs"
  .PD
  With \fB\-mfaster\-structs\fR, the compiler assumes that structures
  should have 8\-byte alignment.  This enables the use of pairs of
  \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
  assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
! However, the use of this changed alignment directly violates the \s-1SPARC
! ABI.\s0  Thus, it's intended only for use on targets where the developer
  acknowledges that their resulting code is not directly in line with
! the rules of the \s-1ABI.\s0
! .IP "\fB\-mstd\-struct\-return\fR" 4
  .IX Item "-mstd-struct-return"
  .PD 0
! .IP "\fB\-mno\-std\-struct\-return\fR" 4
  .IX Item "-mno-std-struct-return"
  .PD
  With \fB\-mstd\-struct\-return\fR, the compiler generates checking code
  in functions returning structures or unions to detect size mismatches
! between the two sides of function calls, as per the 32\-bit \s-1ABI.\s0
  .Sp
  The default is \fB\-mno\-std\-struct\-return\fR.  This option has no effect
  in 64\-bit mode.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
  .PD 0
! .IP "\fB\-mno\-lra\fR" 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is the default for \s-1SPARC\s0 since \s-1GCC 7\s0
  so \fB\-mno\-lra\fR needs to be passed to get old Reload.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
--- 32271,32582 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mtas\fR 4
  .IX Item "-mtas"
  Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
  Notice that depending on the particular hardware and software configuration
  this can degrade overall performance due to the operand cache line flushes
! that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi\-core SH4A
  processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
  can result in data corruption for certain cache configurations.
! .IP \fB\-mprefergot\fR 4
  .IX Item "-mprefergot"
! When generating position\-independent code, emit function calls using
  the Global Offset Table instead of the Procedure Linkage Table.
! .IP \fB\-musermode\fR 4
  .IX Item "-musermode"
  .PD 0
! .IP \fB\-mno\-usermode\fR 4
  .IX Item "-mno-usermode"
  .PD
! Don\*(Aqt allow (allow) the compiler generating privileged mode code.  Specifying
  \&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
  inlined code would not work in user mode.  \fB\-musermode\fR is the default
  when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
  \&\fB\-musermode\fR has no effect, since there is no user mode.
! .IP \fB\-multcost=\fR\fInumber\fR 4
  .IX Item "-multcost=number"
  Set the cost to assume for a multiply insn.
! .IP \fB\-mdiv=\fR\fIstrategy\fR 4
  .IX Item "-mdiv=strategy"
  Set the division strategy to be used for integer division operations.
  \&\fIstrategy\fR can be one of:
  .RS 4
! .IP \fBcall\-div1\fR 4
  .IX Item "call-div1"
! Calls a library function that uses the single\-step division instruction
  \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
! unspecified result and does not trap.  This is the default except for SH4,
! SH2A and SHcompact.
! .IP \fBcall\-fp\fR 4
  .IX Item "call-fp"
  Calls a library function that performs the operation in double precision
! floating point.  Division by zero causes a floating\-point exception.  This is
! the default for SHcompact with FPU.  Specifying this for targets that do not
! have a double precision FPU defaults to \f(CW\*(C`call\-div1\*(C'\fR.
! .IP \fBcall\-table\fR 4
  .IX Item "call-table"
  Calls a library function that uses a lookup table for small divisors and
  the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
  by zero calculates an unspecified result and does not trap.  This is the default
! for SH4.  Specifying this for targets that do not have dynamic shift
  instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
  .RE
  .RS 4
  .Sp
  When a division strategy has not been specified the default strategy is
! selected based on the current target.  For SH2A the default strategy is to
  use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
  calls.
  .RE
! .IP \fB\-maccumulate\-outgoing\-args\fR 4
  .IX Item "-maccumulate-outgoing-args"
  Reserve space once for outgoing arguments in the function prologue rather
  than around each call.  Generally beneficial for performance and size.  Also
  needed for unwinding to avoid changing the stack frame around conditional code.
! .IP \fB\-mdivsi3_libfunc=\fR\fIname\fR 4
  .IX Item "-mdivsi3_libfunc=name"
  Set the name of the library function used for 32\-bit signed division to
  \&\fIname\fR.
  This only affects the name used in the \fBcall\fR division strategies, and
  the compiler still expects the same sets of input/output/clobbered registers as
  if this option were not present.
! .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4
  .IX Item "-mfixed-range=register-range"
  Generate code treating the given register range as fixed registers.
  A fixed register is one that the register allocator cannot use.  This is
  useful when compiling kernel code.  A register range is specified as
  two registers separated by a dash.  Multiple register ranges can be
  specified separated by a comma.
! .IP \fB\-mbranch\-cost=\fR\fInum\fR 4
  .IX Item "-mbranch-cost=num"
  Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
! make the compiler try to generate more branch\-free code if possible.  
  If not specified the value is selected depending on the processor type that
  is being compiled for.
! .IP \fB\-mzdcbranch\fR 4
  .IX Item "-mzdcbranch"
  .PD 0
! .IP \fB\-mno\-zdcbranch\fR 4
  .IX Item "-mno-zdcbranch"
  .PD
  Assume (do not assume) that zero displacement conditional branch instructions
  \&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
  compiler prefers zero displacement branch code sequences.  This is
! enabled by default when generating code for SH4 and SH4A.  It can be explicitly
  disabled by specifying \fB\-mno\-zdcbranch\fR.
! .IP \fB\-mcbranch\-force\-delay\-slot\fR 4
  .IX Item "-mcbranch-force-delay-slot"
  Force the usage of delay slots for conditional branches, which stuffs the delay
  slot with a \f(CW\*(C`nop\*(C'\fR if a suitable instruction cannot be found.  By default
  this option is disabled.  It can be enabled to work around hardware bugs as
! found in the original SH7055.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
! Generate code that uses (does not use) the floating\-point multiply and
  accumulate instructions.  These instructions are generated by default
! if hardware floating point is used.  The machine\-dependent
! \&\fB\-mfused\-madd\fR option is now mapped to the machine\-independent
  \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
  mapped to \fB\-ffp\-contract=off\fR.
! .IP \fB\-mfsca\fR 4
  .IX Item "-mfsca"
  .PD 0
! .IP \fB\-mno\-fsca\fR 4
  .IX Item "-mno-fsca"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
  and cosine approximations.  The option \fB\-mfsca\fR must be used in
  combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
! when generating code for SH4A.  Using \fB\-mno\-fsca\fR disables sine and cosine
  approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
! .IP \fB\-mfsrra\fR 4
  .IX Item "-mfsrra"
  .PD 0
! .IP \fB\-mno\-fsrra\fR 4
  .IX Item "-mno-fsrra"
  .PD
  Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
  reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
  in combination with \fB\-funsafe\-math\-optimizations\fR and
  \&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
! SH4A.  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
  even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
  in effect.
! .IP \fB\-mpretend\-cmove\fR 4
  .IX Item "-mpretend-cmove"
! Prefer zero\-displacement conditional branches for conditional move instruction
! patterns.  This can result in faster code on the SH4 processor.
! .IP \fB\-mfdpic\fR 4
  .IX Item "-mfdpic"
! Generate code using the FDPIC ABI.
  .PP
  \fISolaris 2 Options\fR
  .IX Subsection "Solaris 2 Options"
  .PP
  These \fB\-m\fR options are supported on Solaris 2:
! .IP \fB\-mclear\-hwcap\fR 4
  .IX Item "-mclear-hwcap"
  \&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
  capabilities generated by the Solaris assembler.  This is only necessary
! when object files use ISA extensions not supported by the current
  machine, but check at runtime whether or not to use them.
! .IP \fB\-mimpure\-text\fR 4
  .IX Item "-mimpure-text"
  \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
  the compiler to not pass \fB\-z text\fR to the linker when linking a
! shared object.  Using this option, you can link position\-dependent
  code into a shared object.
  .Sp
! \&\fB\-mimpure\-text\fR suppresses the "relocations remain against
! allocatable but non\-writable sections" linker error message.
! However, the necessary relocations trigger copy\-on\-write, and the
  shared object is not actually shared across processes.  Instead of
  using \fB\-mimpure\-text\fR, you should compile all source code with
  \&\fB\-fpic\fR or \fB\-fPIC\fR.
  .PP
  These switches are supported in addition to the above on Solaris 2:
! .IP \fB\-pthreads\fR 4
  .IX Item "-pthreads"
  This is a synonym for \fB\-pthread\fR.
  .PP
! \fISPARC Options\fR
  .IX Subsection "SPARC Options"
  .PP
! These \fB\-m\fR options are supported on the SPARC:
! .IP \fB\-mno\-app\-regs\fR 4
  .IX Item "-mno-app-regs"
  .PD 0
! .IP \fB\-mapp\-regs\fR 4
  .IX Item "-mapp-regs"
  .PD
  Specify \fB\-mapp\-regs\fR to generate output using the global registers
! 2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
  global register 1, each global register 2 through 4 is then treated as an
  allocable register that is clobbered by function calls.  This is the default.
  .Sp
! To be fully SVR4 ABI\-compliant at the cost of some performance loss,
  specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
  software with this option.
! .IP \fB\-mflat\fR 4
  .IX Item "-mflat"
  .PD 0
! .IP \fB\-mno\-flat\fR 4
  .IX Item "-mno-flat"
  .PD
  With \fB\-mflat\fR, the compiler does not generate save/restore instructions
! and uses a "flat" or single register window model.  This model is compatible
  with the regular register window model.  The local registers and the input
! registers (0\-\-5) are still treated as "call\-saved" registers and are
  saved on the stack as needed.
  .Sp
  With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
  instructions (except for leaf functions).  This is the normal operating mode.
! .IP \fB\-mfpu\fR 4
  .IX Item "-mfpu"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Generate output containing floating\-point instructions.  This is the
  default.
! .IP \fB\-mno\-fpu\fR 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
! \&\fBWarning:\fR the requisite libraries are not available for all SPARC
! targets.  Normally the facilities of the machine\*(Aqs usual C compiler are
! used, but this cannot be done directly in cross\-compilation.  You must make
  your own arrangements to provide suitable library functions for
! cross\-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
! \&\fBsparclite\-*\-*\fR do provide software floating\-point support.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with GCC, with \fB\-msoft\-float\fR in order for
  this to work.
! .IP \fB\-mhard\-quad\-float\fR 4
  .IX Item "-mhard-quad-float"
! Generate output containing quad\-word (long double) floating\-point
  instructions.
! .IP \fB\-msoft\-quad\-float\fR 4
  .IX Item "-msoft-quad-float"
! Generate output containing library calls for quad\-word (long double)
! floating\-point instructions.  The functions called are those specified
! in the SPARC ABI.  This is the default.
  .Sp
! As of this writing, there are no SPARC implementations that have hardware
! support for the quad\-word floating\-point instructions.  They all invoke
  a trap handler for one of these instructions, and then the trap handler
  emulates the effect of the instruction.  Because of the trap handler overhead,
! this is much slower than calling the ABI library routines.  Thus the
  \&\fB\-msoft\-quad\-float\fR option is the default.
! .IP \fB\-mno\-unaligned\-doubles\fR 4
  .IX Item "-mno-unaligned-doubles"
  .PD 0
! .IP \fB\-munaligned\-doubles\fR 4
  .IX Item "-munaligned-doubles"
  .PD
  Assume that doubles have 8\-byte alignment.  This is the default.
  .Sp
! With \fB\-munaligned\-doubles\fR, GCC assumes that doubles have 8\-byte
  alignment only if they are contained in another type, or if they have an
  absolute address.  Otherwise, it assumes they have 4\-byte alignment.
  Specifying this option avoids some rare compatibility problems with code
  generated by other compilers.  It is not the default because it results
! in a performance loss, especially for floating\-point code.
! .IP \fB\-muser\-mode\fR 4
  .IX Item "-muser-mode"
  .PD 0
! .IP \fB\-mno\-user\-mode\fR 4
  .IX Item "-mno-user-mode"
  .PD
  Do not generate code that can only run in supervisor mode.  This is relevant
! only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the LEON3 processor.  This
  is the default.
! .IP \fB\-mfaster\-structs\fR 4
  .IX Item "-mfaster-structs"
  .PD 0
! .IP \fB\-mno\-faster\-structs\fR 4
  .IX Item "-mno-faster-structs"
  .PD
  With \fB\-mfaster\-structs\fR, the compiler assumes that structures
  should have 8\-byte alignment.  This enables the use of pairs of
  \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
  assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
! However, the use of this changed alignment directly violates the SPARC
! ABI.  Thus, it\*(Aqs intended only for use on targets where the developer
  acknowledges that their resulting code is not directly in line with
! the rules of the ABI.
! .IP \fB\-mstd\-struct\-return\fR 4
  .IX Item "-mstd-struct-return"
  .PD 0
! .IP \fB\-mno\-std\-struct\-return\fR 4
  .IX Item "-mno-std-struct-return"
  .PD
  With \fB\-mstd\-struct\-return\fR, the compiler generates checking code
  in functions returning structures or unions to detect size mismatches
! between the two sides of function calls, as per the 32\-bit ABI.
  .Sp
  The default is \fB\-mno\-std\-struct\-return\fR.  This option has no effect
  in 64\-bit mode.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
  .PD 0
! .IP \fB\-mno\-lra\fR 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is the default for SPARC since GCC 7
  so \fB\-mno\-lra\fR needs to be passed to get old Reload.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
*************** for machine type \fIcpu_type\fR.  Suppor
*** 32654,32660 ****
  .Sp
  Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
  the processor.
  .Sp
  Default instruction scheduling parameters are used for values that select
--- 32589,32595 ----
  .Sp
  Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
  which selects the best architecture option for the host processor.
! \&\fB\-mcpu=native\fR has no effect if GCC does not recognize
  the processor.
  .Sp
  Default instruction scheduling parameters are used for values that select
*************** an architecture and not an implementatio
*** 32664,32718 ****
  Here is a list of each supported architecture and their supported
  implementations.
  .RS 4
! .IP "v7" 4
  .IX Item "v7"
  cypress, leon3v7
! .IP "v8" 4
  .IX Item "v8"
  supersparc, hypersparc, leon, leon3, leon5
! .IP "sparclite" 4
  .IX Item "sparclite"
  f930, f934, sparclite86x
! .IP "sparclet" 4
  .IX Item "sparclet"
  tsc701
! .IP "v9" 4
  .IX Item "v9"
  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
  niagara7, m8
  .RE
  .RS 4
  .Sp
! By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
! variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
! additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
  SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
! SPARCStation 1, 2, \s-1IPX\s0 etc.
  .Sp
! With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
  architecture.  The only difference from V7 code is that the compiler emits
! the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
! but not in \s-1SPARC\-V7.\s0  With \fB\-mcpu=supersparc\fR, the compiler additionally
  optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
  2000 series.
  .Sp
! With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
! the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
! and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7.\s0
  With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
! Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU.\s0  With
  \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
! \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU.\s0
  .Sp
! With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
! the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
  integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
! but not in \s-1SPARC\-V7.\s0  With \fB\-mcpu=tsc701\fR, the compiler additionally
! optimizes it for the \s-1TEMIC\s0 SPARClet chip.
  .Sp
! With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
! architecture.  This adds 64\-bit integer and floating-point move instructions,
! 3 additional floating-point condition code registers and conditional move
  instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
  optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
  \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
--- 32599,32653 ----
  Here is a list of each supported architecture and their supported
  implementations.
  .RS 4
! .IP v7 4
  .IX Item "v7"
  cypress, leon3v7
! .IP v8 4
  .IX Item "v8"
  supersparc, hypersparc, leon, leon3, leon5
! .IP sparclite 4
  .IX Item "sparclite"
  f930, f934, sparclite86x
! .IP sparclet 4
  .IX Item "sparclet"
  tsc701
! .IP v9 4
  .IX Item "v9"
  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
  niagara7, m8
  .RE
  .RS 4
  .Sp
! By default (unless configured otherwise), GCC generates code for the V7
! variant of the SPARC architecture.  With \fB\-mcpu=cypress\fR, the compiler
! additionally optimizes it for the Cypress CY7C602 chip, as used in the
  SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
! SPARCStation 1, 2, IPX etc.
  .Sp
! With \fB\-mcpu=v8\fR, GCC generates code for the V8 variant of the SPARC
  architecture.  The only difference from V7 code is that the compiler emits
! the integer multiply and integer divide instructions which exist in SPARC\-V8
! but not in SPARC\-V7.  With \fB\-mcpu=supersparc\fR, the compiler additionally
  optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
  2000 series.
  .Sp
! With \fB\-mcpu=sparclite\fR, GCC generates code for the SPARClite variant of
! the SPARC architecture.  This adds the integer multiply, integer divide step
! and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in SPARC\-V7.
  With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
! Fujitsu MB86930 chip, which is the original SPARClite, with no FPU.  With
  \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
! MB86934 chip, which is the more recent SPARClite with FPU.
  .Sp
! With \fB\-mcpu=sparclet\fR, GCC generates code for the SPARClet variant of
! the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
  integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
! but not in SPARC\-V7.  With \fB\-mcpu=tsc701\fR, the compiler additionally
! optimizes it for the TEMIC SPARClet chip.
  .Sp
! With \fB\-mcpu=v9\fR, GCC generates code for the V9 variant of the SPARC
! architecture.  This adds 64\-bit integer and floating\-point move instructions,
! 3 additional floating\-point condition code registers and conditional move
  instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
  optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
  \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
*************** additionally optimizes it for Sun UltraS
*** 32724,32733 ****
  UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
  additionally optimizes it for Sun UltraSPARC T4 chips.  With
  \&\fB\-mcpu=niagara7\fR, the compiler additionally optimizes it for
! Oracle \s-1SPARC M7\s0 chips.  With \fB\-mcpu=m8\fR, the compiler
  additionally optimizes it for Oracle M8 chips.
  .RE
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the instruction set or register set that the
--- 32659,32668 ----
  UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
  additionally optimizes it for Sun UltraSPARC T4 chips.  With
  \&\fB\-mcpu=niagara7\fR, the compiler additionally optimizes it for
! Oracle SPARC M7 chips.  With \fB\-mcpu=m8\fR, the compiler
  additionally optimizes it for Oracle M8 chips.
  .RE
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type
  \&\fIcpu_type\fR, but do not set the instruction set or register set that the
*************** option \fB\-mcpu=\fR\fIcpu_type\fR does.
*** 32735,32953 ****
  .Sp
  The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
  \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
! that select a particular \s-1CPU\s0 implementation.  Those are
  \&\fBcypress\fR, \fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR,
  \&\fBleon3\fR, \fBleon3v7\fR, \fBleon5\fR, \fBf930\fR, \fBf934\fR,
  \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
  \&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
  \&\fBniagara4\fR, \fBniagara7\fR and \fBm8\fR.  With native Solaris
  and GNU/Linux toolchains, \fBnative\fR can also be used.
! .IP "\fB\-mv8plus\fR" 4
  .IX Item "-mv8plus"
  .PD 0
! .IP "\fB\-mno\-v8plus\fR" 4
  .IX Item "-mno-v8plus"
  .PD
! With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+ ABI.\s0  The
! difference from the V8 \s-1ABI\s0 is that the global and out registers are
  considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
! mode for all \s-1SPARC\-V9\s0 processors.
! .IP "\fB\-mvis\fR" 4
  .IX Item "-mvis"
  .PD 0
! .IP "\fB\-mno\-vis\fR" 4
  .IX Item "-mno-vis"
  .PD
! With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
  Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
! .IP "\fB\-mvis2\fR" 4
  .IX Item "-mvis2"
  .PD 0
! .IP "\fB\-mno\-vis2\fR" 4
  .IX Item "-mno-vis2"
  .PD
! With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
  version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis2\fR when targeting a cpu that supports such
! instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
  also sets \fB\-mvis\fR.
! .IP "\fB\-mvis3\fR" 4
  .IX Item "-mvis3"
  .PD 0
! .IP "\fB\-mno\-vis3\fR" 4
  .IX Item "-mno-vis3"
  .PD
! With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
  version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis3\fR when targeting a cpu that supports such
  instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
  also sets \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP "\fB\-mvis4\fR" 4
  .IX Item "-mvis4"
  .PD 0
! .IP "\fB\-mno\-vis4\fR" 4
  .IX Item "-mno-vis4"
  .PD
! With \fB\-mvis4\fR, \s-1GCC\s0 generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis4\fR when targeting a cpu that supports such
  instructions, such as niagara\-7 and later.  Setting \fB\-mvis4\fR
  also sets \fB\-mvis3\fR, \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP "\fB\-mvis4b\fR" 4
  .IX Item "-mvis4b"
  .PD 0
! .IP "\fB\-mno\-vis4b\fR" 4
  .IX Item "-mno-vis4b"
  .PD
! With \fB\-mvis4b\fR, \s-1GCC\s0 generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
! the additional \s-1VIS\s0 instructions introduced in the Oracle \s-1SPARC\s0
  Architecture 2017.  The default is \fB\-mvis4b\fR when targeting a
  cpu that supports such instructions, such as m8 and later.  Setting
  \&\fB\-mvis4b\fR also sets \fB\-mvis4\fR, \fB\-mvis3\fR,
  \&\fB\-mvis2\fR and \fB\-mvis\fR.
! .IP "\fB\-mcbcond\fR" 4
  .IX Item "-mcbcond"
  .PD 0
! .IP "\fB\-mno\-cbcond\fR" 4
  .IX Item "-mno-cbcond"
  .PD
! With \fB\-mcbcond\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
! Compare-and-Branch-on-Condition instructions.  The default is \fB\-mcbcond\fR
! when targeting a \s-1CPU\s0 that supports such instructions, such as Niagara\-4 and
  later.
! .IP "\fB\-mfmaf\fR" 4
  .IX Item "-mfmaf"
  .PD 0
! .IP "\fB\-mno\-fmaf\fR" 4
  .IX Item "-mno-fmaf"
  .PD
! With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
! Fused Multiply-Add Floating-point instructions.  The default is \fB\-mfmaf\fR
! when targeting a \s-1CPU\s0 that supports such instructions, such as Niagara\-3 and
  later.
! .IP "\fB\-mfsmuld\fR" 4
  .IX Item "-mfsmuld"
  .PD 0
! .IP "\fB\-mno\-fsmuld\fR" 4
  .IX Item "-mno-fsmuld"
  .PD
! With \fB\-mfsmuld\fR, \s-1GCC\s0 generates code that takes advantage of the
! Floating-point Multiply Single to Double (FsMULd) instruction.  The default is
! \&\fB\-mfsmuld\fR when targeting a \s-1CPU\s0 supporting the architecture versions V8
! or V9 with \s-1FPU\s0 except \fB\-mcpu=leon\fR.
! .IP "\fB\-mpopc\fR" 4
  .IX Item "-mpopc"
  .PD 0
! .IP "\fB\-mno\-popc\fR" 4
  .IX Item "-mno-popc"
  .PD
! With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
  Population Count instruction.  The default is \fB\-mpopc\fR
! when targeting a \s-1CPU\s0 that supports such an instruction, such as Niagara\-2 and
  later.
! .IP "\fB\-msubxc\fR" 4
  .IX Item "-msubxc"
  .PD 0
! .IP "\fB\-mno\-subxc\fR" 4
  .IX Item "-mno-subxc"
  .PD
! With \fB\-msubxc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
! Subtract-Extended-with-Carry instruction.  The default is \fB\-msubxc\fR
! when targeting a \s-1CPU\s0 that supports such an instruction, such as Niagara\-7 and
  later.
! .IP "\fB\-mfix\-at697f\fR" 4
  .IX Item "-mfix-at697f"
! Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
! processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
! .IP "\fB\-mfix\-ut699\fR" 4
  .IX Item "-mfix-ut699"
! Enable the documented workarounds for the floating-point errata and the data
! cache nullify errata of the \s-1UT699\s0 processor.
! .IP "\fB\-mfix\-ut700\fR" 4
  .IX Item "-mfix-ut700"
! Enable the documented workaround for the back-to-back store errata of
! the \s-1UT699E/UT700\s0 processor.
! .IP "\fB\-mfix\-gr712rc\fR" 4
  .IX Item "-mfix-gr712rc"
! Enable the documented workaround for the back-to-back store errata of
! the \s-1GR712RC\s0 processor.
  .PP
  These \fB\-m\fR options are supported in addition to the above
! on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
! .IP "\fB\-m32\fR" 4
  .IX Item "-m32"
  .PD 0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
  to 64 bits.
! .IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
  .IX Item "-mcmodel=which"
  Set the code model to one of
  .RS 4
! .IP "\fBmedlow\fR" 4
  .IX Item "medlow"
  The Medium/Low code model: 64\-bit addresses, programs
  must be linked in the low 32 bits of memory.  Programs can be statically
  or dynamically linked.
! .IP "\fBmedmid\fR" 4
  .IX Item "medmid"
  The Medium/Middle code model: 64\-bit addresses, programs
  must be linked in the low 44 bits of memory, the text and data segments must
  be less than 2GB in size and the data segment must be located within 2GB of
  the text segment.
! .IP "\fBmedany\fR" 4
  .IX Item "medany"
  The Medium/Anywhere code model: 64\-bit addresses, programs
  may be linked anywhere in memory, the text and data segments must be less
  than 2GB in size and the data segment must be located within 2GB of the
  text segment.
! .IP "\fBembmedany\fR" 4
  .IX Item "embmedany"
  The Medium/Anywhere code model for embedded systems:
  64\-bit addresses, the text and data segments must be less than 2GB in
  size, both starting anywhere in memory (determined at link time).  The
  global register \f(CW%g4\fR points to the base of the data segment.  Programs
! are statically linked and \s-1PIC\s0 is not supported.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
  .IX Item "-mmemory-model=mem-model"
  Set the memory model in force on the processor to one of
  .RS 4
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  The default memory model for the processor and operating system.
! .IP "\fBrmo\fR" 4
  .IX Item "rmo"
  Relaxed Memory Order
! .IP "\fBpso\fR" 4
  .IX Item "pso"
  Partial Store Order
! .IP "\fBtso\fR" 4
  .IX Item "tso"
  Total Store Order
! .IP "\fBsc\fR" 4
  .IX Item "sc"
  Sequential Consistency
  .RE
  .RS 4
  .Sp
! These memory models are formally defined in Appendix D of the \s-1SPARC\-V9\s0
! architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
  .RE
! .IP "\fB\-mstack\-bias\fR" 4
  .IX Item "-mstack-bias"
  .PD 0
! .IP "\fB\-mno\-stack\-bias\fR" 4
  .IX Item "-mno-stack-bias"
  .PD
! With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
  frame pointer if present, are offset by \-2047 which must be added back
  when making stack frame references.  This is the default in 64\-bit mode.
  Otherwise, assume no such offset is present.
--- 32670,32888 ----
  .Sp
  The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
  \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
! that select a particular CPU implementation.  Those are
  \&\fBcypress\fR, \fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR,
  \&\fBleon3\fR, \fBleon3v7\fR, \fBleon5\fR, \fBf930\fR, \fBf934\fR,
  \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
  \&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
  \&\fBniagara4\fR, \fBniagara7\fR and \fBm8\fR.  With native Solaris
  and GNU/Linux toolchains, \fBnative\fR can also be used.
! .IP \fB\-mv8plus\fR 4
  .IX Item "-mv8plus"
  .PD 0
! .IP \fB\-mno\-v8plus\fR 4
  .IX Item "-mno-v8plus"
  .PD
! With \fB\-mv8plus\fR, GCC generates code for the SPARC\-V8+ ABI.  The
! difference from the V8 ABI is that the global and out registers are
  considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
! mode for all SPARC\-V9 processors.
! .IP \fB\-mvis\fR 4
  .IX Item "-mvis"
  .PD 0
! .IP \fB\-mno\-vis\fR 4
  .IX Item "-mno-vis"
  .PD
! With \fB\-mvis\fR, GCC generates code that takes advantage of the UltraSPARC
  Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
! .IP \fB\-mvis2\fR 4
  .IX Item "-mvis2"
  .PD 0
! .IP \fB\-mno\-vis2\fR 4
  .IX Item "-mno-vis2"
  .PD
! With \fB\-mvis2\fR, GCC generates code that takes advantage of
  version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis2\fR when targeting a cpu that supports such
! instructions, such as UltraSPARC\-III and later.  Setting \fB\-mvis2\fR
  also sets \fB\-mvis\fR.
! .IP \fB\-mvis3\fR 4
  .IX Item "-mvis3"
  .PD 0
! .IP \fB\-mno\-vis3\fR 4
  .IX Item "-mno-vis3"
  .PD
! With \fB\-mvis3\fR, GCC generates code that takes advantage of
  version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis3\fR when targeting a cpu that supports such
  instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
  also sets \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP \fB\-mvis4\fR 4
  .IX Item "-mvis4"
  .PD 0
! .IP \fB\-mno\-vis4\fR 4
  .IX Item "-mno-vis4"
  .PD
! With \fB\-mvis4\fR, GCC generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
  default is \fB\-mvis4\fR when targeting a cpu that supports such
  instructions, such as niagara\-7 and later.  Setting \fB\-mvis4\fR
  also sets \fB\-mvis3\fR, \fB\-mvis2\fR and \fB\-mvis\fR.
! .IP \fB\-mvis4b\fR 4
  .IX Item "-mvis4b"
  .PD 0
! .IP \fB\-mno\-vis4b\fR 4
  .IX Item "-mno-vis4b"
  .PD
! With \fB\-mvis4b\fR, GCC generates code that takes advantage of
  version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
! the additional VIS instructions introduced in the Oracle SPARC
  Architecture 2017.  The default is \fB\-mvis4b\fR when targeting a
  cpu that supports such instructions, such as m8 and later.  Setting
  \&\fB\-mvis4b\fR also sets \fB\-mvis4\fR, \fB\-mvis3\fR,
  \&\fB\-mvis2\fR and \fB\-mvis\fR.
! .IP \fB\-mcbcond\fR 4
  .IX Item "-mcbcond"
  .PD 0
! .IP \fB\-mno\-cbcond\fR 4
  .IX Item "-mno-cbcond"
  .PD
! With \fB\-mcbcond\fR, GCC generates code that takes advantage of the UltraSPARC
! Compare\-and\-Branch\-on\-Condition instructions.  The default is \fB\-mcbcond\fR
! when targeting a CPU that supports such instructions, such as Niagara\-4 and
  later.
! .IP \fB\-mfmaf\fR 4
  .IX Item "-mfmaf"
  .PD 0
! .IP \fB\-mno\-fmaf\fR 4
  .IX Item "-mno-fmaf"
  .PD
! With \fB\-mfmaf\fR, GCC generates code that takes advantage of the UltraSPARC
! Fused Multiply\-Add Floating\-point instructions.  The default is \fB\-mfmaf\fR
! when targeting a CPU that supports such instructions, such as Niagara\-3 and
  later.
! .IP \fB\-mfsmuld\fR 4
  .IX Item "-mfsmuld"
  .PD 0
! .IP \fB\-mno\-fsmuld\fR 4
  .IX Item "-mno-fsmuld"
  .PD
! With \fB\-mfsmuld\fR, GCC generates code that takes advantage of the
! Floating\-point Multiply Single to Double (FsMULd) instruction.  The default is
! \&\fB\-mfsmuld\fR when targeting a CPU supporting the architecture versions V8
! or V9 with FPU except \fB\-mcpu=leon\fR.
! .IP \fB\-mpopc\fR 4
  .IX Item "-mpopc"
  .PD 0
! .IP \fB\-mno\-popc\fR 4
  .IX Item "-mno-popc"
  .PD
! With \fB\-mpopc\fR, GCC generates code that takes advantage of the UltraSPARC
  Population Count instruction.  The default is \fB\-mpopc\fR
! when targeting a CPU that supports such an instruction, such as Niagara\-2 and
  later.
! .IP \fB\-msubxc\fR 4
  .IX Item "-msubxc"
  .PD 0
! .IP \fB\-mno\-subxc\fR 4
  .IX Item "-mno-subxc"
  .PD
! With \fB\-msubxc\fR, GCC generates code that takes advantage of the UltraSPARC
! Subtract\-Extended\-with\-Carry instruction.  The default is \fB\-msubxc\fR
! when targeting a CPU that supports such an instruction, such as Niagara\-7 and
  later.
! .IP \fB\-mfix\-at697f\fR 4
  .IX Item "-mfix-at697f"
! Enable the documented workaround for the single erratum of the Atmel AT697F
! processor (which corresponds to erratum #13 of the AT697E processor).
! .IP \fB\-mfix\-ut699\fR 4
  .IX Item "-mfix-ut699"
! Enable the documented workarounds for the floating\-point errata and the data
! cache nullify errata of the UT699 processor.
! .IP \fB\-mfix\-ut700\fR 4
  .IX Item "-mfix-ut700"
! Enable the documented workaround for the back\-to\-back store errata of
! the UT699E/UT700 processor.
! .IP \fB\-mfix\-gr712rc\fR 4
  .IX Item "-mfix-gr712rc"
! Enable the documented workaround for the back\-to\-back store errata of
! the GR712RC processor.
  .PP
  These \fB\-m\fR options are supported in addition to the above
! on SPARC\-V9 processors in 64\-bit environments:
! .IP \fB\-m32\fR 4
  .IX Item "-m32"
  .PD 0
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
  .PD
  Generate code for a 32\-bit or 64\-bit environment.
  The 32\-bit environment sets int, long and pointer to 32 bits.
  The 64\-bit environment sets int to 32 bits and long and pointer
  to 64 bits.
! .IP \fB\-mcmodel=\fR\fIwhich\fR 4
  .IX Item "-mcmodel=which"
  Set the code model to one of
  .RS 4
! .IP \fBmedlow\fR 4
  .IX Item "medlow"
  The Medium/Low code model: 64\-bit addresses, programs
  must be linked in the low 32 bits of memory.  Programs can be statically
  or dynamically linked.
! .IP \fBmedmid\fR 4
  .IX Item "medmid"
  The Medium/Middle code model: 64\-bit addresses, programs
  must be linked in the low 44 bits of memory, the text and data segments must
  be less than 2GB in size and the data segment must be located within 2GB of
  the text segment.
! .IP \fBmedany\fR 4
  .IX Item "medany"
  The Medium/Anywhere code model: 64\-bit addresses, programs
  may be linked anywhere in memory, the text and data segments must be less
  than 2GB in size and the data segment must be located within 2GB of the
  text segment.
! .IP \fBembmedany\fR 4
  .IX Item "embmedany"
  The Medium/Anywhere code model for embedded systems:
  64\-bit addresses, the text and data segments must be less than 2GB in
  size, both starting anywhere in memory (determined at link time).  The
  global register \f(CW%g4\fR points to the base of the data segment.  Programs
! are statically linked and PIC is not supported.
  .RE
  .RS 4
  .RE
! .IP \fB\-mmemory\-model=\fR\fImem\-model\fR 4
  .IX Item "-mmemory-model=mem-model"
  Set the memory model in force on the processor to one of
  .RS 4
! .IP \fBdefault\fR 4
  .IX Item "default"
  The default memory model for the processor and operating system.
! .IP \fBrmo\fR 4
  .IX Item "rmo"
  Relaxed Memory Order
! .IP \fBpso\fR 4
  .IX Item "pso"
  Partial Store Order
! .IP \fBtso\fR 4
  .IX Item "tso"
  Total Store Order
! .IP \fBsc\fR 4
  .IX Item "sc"
  Sequential Consistency
  .RE
  .RS 4
  .Sp
! These memory models are formally defined in Appendix D of the SPARC\-V9
! architecture manual, as set in the processor\*(Aqs \f(CW\*(C`PSTATE.MM\*(C'\fR field.
  .RE
! .IP \fB\-mstack\-bias\fR 4
  .IX Item "-mstack-bias"
  .PD 0
! .IP \fB\-mno\-stack\-bias\fR 4
  .IX Item "-mno-stack-bias"
  .PD
! With \fB\-mstack\-bias\fR, GCC assumes that the stack pointer, and
  frame pointer if present, are offset by \-2047 which must be added back
  when making stack frame references.  This is the default in 64\-bit mode.
  Otherwise, assume no such offset is present.
*************** Otherwise, assume no such offset is pres
*** 32957,32979 ****
  .PP
  These additional options are available on System V Release 4 for
  compatibility with other compilers on those systems:
! .IP "\fB\-G\fR" 4
  .IX Item "-G"
  Create a shared object.
  It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
! .IP "\fB\-Qy\fR" 4
  .IX Item "-Qy"
  Identify the versions of each tool used by the compiler, in a
  \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
! .IP "\fB\-Qn\fR" 4
  .IX Item "-Qn"
  Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
  the default).
! .IP "\fB\-YP,\fR\fIdirs\fR" 4
  .IX Item "-YP,dirs"
  Search the directories \fIdirs\fR, and no others, for libraries
  specified with \fB\-l\fR.
! .IP "\fB\-Ym,\fR\fIdir\fR" 4
  .IX Item "-Ym,dir"
  Look in the directory \fIdir\fR to find the M4 preprocessor.
  The assembler uses this option.
--- 32892,32914 ----
  .PP
  These additional options are available on System V Release 4 for
  compatibility with other compilers on those systems:
! .IP \fB\-G\fR 4
  .IX Item "-G"
  Create a shared object.
  It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
! .IP \fB\-Qy\fR 4
  .IX Item "-Qy"
  Identify the versions of each tool used by the compiler, in a
  \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
! .IP \fB\-Qn\fR 4
  .IX Item "-Qn"
  Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
  the default).
! .IP \fB\-YP,\fR\fIdirs\fR 4
  .IX Item "-YP,dirs"
  Search the directories \fIdirs\fR, and no others, for libraries
  specified with \fB\-l\fR.
! .IP \fB\-Ym,\fR\fIdir\fR 4
  .IX Item "-Ym,dir"
  Look in the directory \fIdir\fR to find the M4 preprocessor.
  The assembler uses this option.
*************** The assembler uses this option.
*** 32982,33010 ****
  .IX Subsection "V850 Options"
  .PP
  These \fB\-m\fR options are defined for V850 implementations:
! .IP "\fB\-mlong\-calls\fR" 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP "\fB\-mno\-long\-calls\fR" 4
  .IX Item "-mno-long-calls"
  .PD
  Treat all calls as being far away (near).  If calls are assumed to be
! far away, the compiler always loads the function's address into a
  register, and calls indirect through the pointer.
! .IP "\fB\-mno\-ep\fR" 4
  .IX Item "-mno-ep"
  .PD 0
! .IP "\fB\-mep\fR" 4
  .IX Item "-mep"
  .PD
  Do not optimize (do optimize) basic blocks that use the same index
  pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
  use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
  option is on by default if you optimize.
! .IP "\fB\-mno\-prolog\-function\fR" 4
  .IX Item "-mno-prolog-function"
  .PD 0
! .IP "\fB\-mprolog\-function\fR" 4
  .IX Item "-mprolog-function"
  .PD
  Do not use (do use) external functions to save and restore registers
--- 32917,32945 ----
  .IX Subsection "V850 Options"
  .PP
  These \fB\-m\fR options are defined for V850 implementations:
! .IP \fB\-mlong\-calls\fR 4
  .IX Item "-mlong-calls"
  .PD 0
! .IP \fB\-mno\-long\-calls\fR 4
  .IX Item "-mno-long-calls"
  .PD
  Treat all calls as being far away (near).  If calls are assumed to be
! far away, the compiler always loads the function\*(Aqs address into a
  register, and calls indirect through the pointer.
! .IP \fB\-mno\-ep\fR 4
  .IX Item "-mno-ep"
  .PD 0
! .IP \fB\-mep\fR 4
  .IX Item "-mep"
  .PD
  Do not optimize (do optimize) basic blocks that use the same index
  pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
  use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
  option is on by default if you optimize.
! .IP \fB\-mno\-prolog\-function\fR 4
  .IX Item "-mno-prolog-function"
  .PD 0
! .IP \fB\-mprolog\-function\fR 4
  .IX Item "-mprolog-function"
  .PD
  Do not use (do use) external functions to save and restore registers
*************** at the prologue and epilogue of a functi
*** 33012,33064 ****
  are slower, but use less code space if more than one function saves
  the same number of registers.  The \fB\-mprolog\-function\fR option
  is on by default if you optimize.
! .IP "\fB\-mspace\fR" 4
  .IX Item "-mspace"
  Try to make the code as small as possible.  At present, this just turns
  on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
! .IP "\fB\-mtda=\fR\fIn\fR" 4
  .IX Item "-mtda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
  area can hold up to 256 bytes in total (128 bytes for byte references).
! .IP "\fB\-msda=\fR\fIn\fR" 4
  .IX Item "-msda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
  area can hold up to 64 kilobytes.
! .IP "\fB\-mzda=\fR\fIn\fR" 4
  .IX Item "-mzda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the first 32 kilobytes of memory.
! .IP "\fB\-mv850\fR" 4
  .IX Item "-mv850"
  Specify that the target processor is the V850.
! .IP "\fB\-mv850e3v5\fR" 4
  .IX Item "-mv850e3v5"
  Specify that the target processor is the V850E3V5.  The preprocessor
  constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
! .IP "\fB\-mv850e2v4\fR" 4
  .IX Item "-mv850e2v4"
  Specify that the target processor is the V850E3V5.  This is an alias for
  the \fB\-mv850e3v5\fR option.
! .IP "\fB\-mv850e2v3\fR" 4
  .IX Item "-mv850e2v3"
  Specify that the target processor is the V850E2V3.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
! .IP "\fB\-mv850e2\fR" 4
  .IX Item "-mv850e2"
  Specify that the target processor is the V850E2.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
! .IP "\fB\-mv850e1\fR" 4
  .IX Item "-mv850e1"
  Specify that the target processor is the V850E1.  The preprocessor
  constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
  this option is used.
! .IP "\fB\-mv850es\fR" 4
  .IX Item "-mv850es"
  Specify that the target processor is the V850ES.  This is an alias for
  the \fB\-mv850e1\fR option.
! .IP "\fB\-mv850e\fR" 4
  .IX Item "-mv850e"
  Specify that the target processor is the V850E.  The preprocessor
  constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
--- 32947,32999 ----
  are slower, but use less code space if more than one function saves
  the same number of registers.  The \fB\-mprolog\-function\fR option
  is on by default if you optimize.
! .IP \fB\-mspace\fR 4
  .IX Item "-mspace"
  Try to make the code as small as possible.  At present, this just turns
  on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
! .IP \fB\-mtda=\fR\fIn\fR 4
  .IX Item "-mtda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
  area can hold up to 256 bytes in total (128 bytes for byte references).
! .IP \fB\-msda=\fR\fIn\fR 4
  .IX Item "-msda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
  area can hold up to 64 kilobytes.
! .IP \fB\-mzda=\fR\fIn\fR 4
  .IX Item "-mzda=n"
  Put static or global variables whose size is \fIn\fR bytes or less into
  the first 32 kilobytes of memory.
! .IP \fB\-mv850\fR 4
  .IX Item "-mv850"
  Specify that the target processor is the V850.
! .IP \fB\-mv850e3v5\fR 4
  .IX Item "-mv850e3v5"
  Specify that the target processor is the V850E3V5.  The preprocessor
  constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
! .IP \fB\-mv850e2v4\fR 4
  .IX Item "-mv850e2v4"
  Specify that the target processor is the V850E3V5.  This is an alias for
  the \fB\-mv850e3v5\fR option.
! .IP \fB\-mv850e2v3\fR 4
  .IX Item "-mv850e2v3"
  Specify that the target processor is the V850E2V3.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
! .IP \fB\-mv850e2\fR 4
  .IX Item "-mv850e2"
  Specify that the target processor is the V850E2.  The preprocessor
  constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
! .IP \fB\-mv850e1\fR 4
  .IX Item "-mv850e1"
  Specify that the target processor is the V850E1.  The preprocessor
  constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
  this option is used.
! .IP \fB\-mv850es\fR 4
  .IX Item "-mv850es"
  Specify that the target processor is the V850ES.  This is an alias for
  the \fB\-mv850e1\fR option.
! .IP \fB\-mv850e\fR 4
  .IX Item "-mv850e"
  Specify that the target processor is the V850E.  The preprocessor
  constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
*************** relevant \fB_\|_v850*_\|_\fR preprocesso
*** 33070,33178 ****
  .Sp
  The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
  defined, regardless of which processor variant is the target.
! .IP "\fB\-mdisable\-callt\fR" 4
  .IX Item "-mdisable-callt"
  .PD 0
! .IP "\fB\-mno\-disable\-callt\fR" 4
  .IX Item "-mno-disable-callt"
  .PD
  This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
  v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
  architecture.
  .Sp
! This option is enabled by default when the \s-1RH850 ABI\s0 is
  in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
! \&\s-1GCC ABI\s0 is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
  then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
! .IP "\fB\-mrelax\fR" 4
  .IX Item "-mrelax"
  .PD 0
! .IP "\fB\-mno\-relax\fR" 4
  .IX Item "-mno-relax"
  .PD
! Pass on (or do not pass on) the \fB\-mrelax\fR command-line option
  to the assembler.
! .IP "\fB\-mlong\-jumps\fR" 4
  .IX Item "-mlong-jumps"
  .PD 0
! .IP "\fB\-mno\-long\-jumps\fR" 4
  .IX Item "-mno-long-jumps"
  .PD
! Disable (or re-enable) the generation of PC-relative jump instructions.
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Disable (or re-enable) the generation of hardware floating point
  instructions.  This option is only significant when the target
  architecture is \fBV850E2V3\fR or higher.  If hardware floating point
  instructions are being generated then the C preprocessor symbol
  \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
  \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
! .IP "\fB\-mloop\fR" 4
  .IX Item "-mloop"
! Enables the use of the e3v5 \s-1LOOP\s0 instruction.  The use of this
  instruction is not enabled by default when the e3v5 architecture is
  selected because its use is still experimental.
! .IP "\fB\-mrh850\-abi\fR" 4
  .IX Item "-mrh850-abi"
  .PD 0
! .IP "\fB\-mghs\fR" 4
  .IX Item "-mghs"
  .PD
! Enables support for the \s-1RH850\s0 version of the V850 \s-1ABI.\s0  This is the
! default.  With this version of the \s-1ABI\s0 the following rules apply:
  .RS 4
! .IP "*" 4
  Integer sized structures and unions are returned via a memory pointer
  rather than a register.
! .IP "*" 4
  Large structures and unions (more than 8 bytes in size) are passed by
  value.
! .IP "*" 4
  Functions are aligned to 16\-bit boundaries.
! .IP "*" 4
! The \fB\-m8byte\-align\fR command-line option is supported.
! .IP "*" 4
! The \fB\-mdisable\-callt\fR command-line option is enabled by
! default.  The \fB\-mno\-disable\-callt\fR command-line option is not
  supported.
  .RE
  .RS 4
  .Sp
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP "\fB\-mgcc\-abi\fR" 4
  .IX Item "-mgcc-abi"
! Enables support for the old \s-1GCC\s0 version of the V850 \s-1ABI.\s0  With this
! version of the \s-1ABI\s0 the following rules apply:
  .RS 4
! .IP "*" 4
  Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
! .IP "*" 4
  Large structures and unions (more than 8 bytes in size) are passed by
  reference.
! .IP "*" 4
  Functions are aligned to 32\-bit boundaries, unless optimizing for
  size.
! .IP "*" 4
! The \fB\-m8byte\-align\fR command-line option is not supported.
! .IP "*" 4
! The \fB\-mdisable\-callt\fR command-line option is supported but not
  enabled by default.
  .RE
  .RS 4
  .Sp
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP "\fB\-m8byte\-align\fR" 4
  .IX Item "-m8byte-align"
  .PD 0
! .IP "\fB\-mno\-8byte\-align\fR" 4
  .IX Item "-mno-8byte-align"
  .PD
  Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
--- 33005,33113 ----
  .Sp
  The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
  defined, regardless of which processor variant is the target.
! .IP \fB\-mdisable\-callt\fR 4
  .IX Item "-mdisable-callt"
  .PD 0
! .IP \fB\-mno\-disable\-callt\fR 4
  .IX Item "-mno-disable-callt"
  .PD
  This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
  v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
  architecture.
  .Sp
! This option is enabled by default when the RH850 ABI is
  in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
! GCC ABI is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
  then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
! .IP \fB\-mrelax\fR 4
  .IX Item "-mrelax"
  .PD 0
! .IP \fB\-mno\-relax\fR 4
  .IX Item "-mno-relax"
  .PD
! Pass on (or do not pass on) the \fB\-mrelax\fR command\-line option
  to the assembler.
! .IP \fB\-mlong\-jumps\fR 4
  .IX Item "-mlong-jumps"
  .PD 0
! .IP \fB\-mno\-long\-jumps\fR 4
  .IX Item "-mno-long-jumps"
  .PD
! Disable (or re\-enable) the generation of PC\-relative jump instructions.
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Disable (or re\-enable) the generation of hardware floating point
  instructions.  This option is only significant when the target
  architecture is \fBV850E2V3\fR or higher.  If hardware floating point
  instructions are being generated then the C preprocessor symbol
  \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
  \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
! .IP \fB\-mloop\fR 4
  .IX Item "-mloop"
! Enables the use of the e3v5 LOOP instruction.  The use of this
  instruction is not enabled by default when the e3v5 architecture is
  selected because its use is still experimental.
! .IP \fB\-mrh850\-abi\fR 4
  .IX Item "-mrh850-abi"
  .PD 0
! .IP \fB\-mghs\fR 4
  .IX Item "-mghs"
  .PD
! Enables support for the RH850 version of the V850 ABI.  This is the
! default.  With this version of the ABI the following rules apply:
  .RS 4
! .IP * 4
  Integer sized structures and unions are returned via a memory pointer
  rather than a register.
! .IP * 4
  Large structures and unions (more than 8 bytes in size) are passed by
  value.
! .IP * 4
  Functions are aligned to 16\-bit boundaries.
! .IP * 4
! The \fB\-m8byte\-align\fR command\-line option is supported.
! .IP * 4
! The \fB\-mdisable\-callt\fR command\-line option is enabled by
! default.  The \fB\-mno\-disable\-callt\fR command\-line option is not
  supported.
  .RE
  .RS 4
  .Sp
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP \fB\-mgcc\-abi\fR 4
  .IX Item "-mgcc-abi"
! Enables support for the old GCC version of the V850 ABI.  With this
! version of the ABI the following rules apply:
  .RS 4
! .IP * 4
  Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
! .IP * 4
  Large structures and unions (more than 8 bytes in size) are passed by
  reference.
! .IP * 4
  Functions are aligned to 32\-bit boundaries, unless optimizing for
  size.
! .IP * 4
! The \fB\-m8byte\-align\fR command\-line option is not supported.
! .IP * 4
! The \fB\-mdisable\-callt\fR command\-line option is supported but not
  enabled by default.
  .RE
  .RS 4
  .Sp
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
  .RE
! .IP \fB\-m8byte\-align\fR 4
  .IX Item "-m8byte-align"
  .PD 0
! .IP \fB\-mno\-8byte\-align\fR 4
  .IX Item "-mno-8byte-align"
  .PD
  Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
*************** aligned on 8\-byte boundaries.  The defa
*** 33180,33258 ****
  alignment of all objects to at most 4\-bytes.  When
  \&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
! .IP "\fB\-mbig\-switch\fR" 4
  .IX Item "-mbig-switch"
  Generate code suitable for big switch tables.  Use this option only if
  the assembler/linker complain about out of range branches within a switch
  table.
! .IP "\fB\-mapp\-regs\fR" 4
  .IX Item "-mapp-regs"
  This option causes r2 and r5 to be used in the code generated by
  the compiler.  This setting is the default.
! .IP "\fB\-mno\-app\-regs\fR" 4
  .IX Item "-mno-app-regs"
  This option causes r2 and r5 to be treated as fixed registers.
  .PP
! \fI\s-1VAX\s0 Options\fR
  .IX Subsection "VAX Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1VAX:\s0
! .IP "\fB\-munix\fR" 4
  .IX Item "-munix"
  Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
! that the Unix assembler for the \s-1VAX\s0 cannot handle across long
  ranges.
! .IP "\fB\-mgnu\fR" 4
  .IX Item "-mgnu"
  Do output those jump instructions, on the assumption that the
! \&\s-1GNU\s0 assembler is being used.
! .IP "\fB\-mg\fR" 4
  .IX Item "-mg"
! Output code for G\-format floating-point numbers instead of D\-format.
! .IP "\fB\-mlra\fR" 4
  .IX Item "-mlra"
  .PD 0
! .IP "\fB\-mno\-lra\fR" 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is still experimental for the \s-1VAX,\s0
  so by default the compiler uses standard reload.
  .PP
  \fIVisium Options\fR
  .IX Subsection "Visium Options"
! .IP "\fB\-mdebug\fR" 4
  .IX Item "-mdebug"
! A program which performs file I/O and is destined to run on an \s-1MCM\s0 target
  should be linked with this option.  It causes the libraries libc.a and
  libdebug.a to be linked.  The program should be run on the target under
! the control of the \s-1GDB\s0 remote debugging stub.
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  A program which performs file I/O and is destined to run on the simulator
  should be linked with option.  This causes libraries libc.a and libsim.a to
  be linked.
! .IP "\fB\-mfpu\fR" 4
  .IX Item "-mfpu"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
! Generate code containing floating-point instructions.  This is the
  default.
! .IP "\fB\-mno\-fpu\fR" 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
! Generate code containing library calls for floating-point.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
  this to work.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
--- 33115,33193 ----
  alignment of all objects to at most 4\-bytes.  When
  \&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
  \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
! .IP \fB\-mbig\-switch\fR 4
  .IX Item "-mbig-switch"
  Generate code suitable for big switch tables.  Use this option only if
  the assembler/linker complain about out of range branches within a switch
  table.
! .IP \fB\-mapp\-regs\fR 4
  .IX Item "-mapp-regs"
  This option causes r2 and r5 to be used in the code generated by
  the compiler.  This setting is the default.
! .IP \fB\-mno\-app\-regs\fR 4
  .IX Item "-mno-app-regs"
  This option causes r2 and r5 to be treated as fixed registers.
  .PP
! \fIVAX Options\fR
  .IX Subsection "VAX Options"
  .PP
! These \fB\-m\fR options are defined for the VAX:
! .IP \fB\-munix\fR 4
  .IX Item "-munix"
  Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
! that the Unix assembler for the VAX cannot handle across long
  ranges.
! .IP \fB\-mgnu\fR 4
  .IX Item "-mgnu"
  Do output those jump instructions, on the assumption that the
! GNU assembler is being used.
! .IP \fB\-mg\fR 4
  .IX Item "-mg"
! Output code for G\-format floating\-point numbers instead of D\-format.
! .IP \fB\-mlra\fR 4
  .IX Item "-mlra"
  .PD 0
! .IP \fB\-mno\-lra\fR 4
  .IX Item "-mno-lra"
  .PD
! Enable Local Register Allocation.  This is still experimental for the VAX,
  so by default the compiler uses standard reload.
  .PP
  \fIVisium Options\fR
  .IX Subsection "Visium Options"
! .IP \fB\-mdebug\fR 4
  .IX Item "-mdebug"
! A program which performs file I/O and is destined to run on an MCM target
  should be linked with this option.  It causes the libraries libc.a and
  libdebug.a to be linked.  The program should be run on the target under
! the control of the GDB remote debugging stub.
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  A program which performs file I/O and is destined to run on the simulator
  should be linked with option.  This causes libraries libc.a and libsim.a to
  be linked.
! .IP \fB\-mfpu\fR 4
  .IX Item "-mfpu"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
! Generate code containing floating\-point instructions.  This is the
  default.
! .IP \fB\-mno\-fpu\fR 4
  .IX Item "-mno-fpu"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
! Generate code containing library calls for floating\-point.
  .Sp
  \&\fB\-msoft\-float\fR changes the calling convention in the output file;
  therefore, it is only useful if you compile \fIall\fR of a program with
  this option.  In particular, you need to compile \fIlibgcc.a\fR, the
! library that comes with GCC, with \fB\-msoft\-float\fR in order for
  this to work.
! .IP \fB\-mcpu=\fR\fIcpu_type\fR 4
  .IX Item "-mcpu=cpu_type"
  Set the instruction set, register set, and instruction scheduling parameters
  for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
*************** for machine type \fIcpu_type\fR.  Suppor
*** 33260,33302 ****
  .Sp
  \&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
  .Sp
! By default (unless configured otherwise), \s-1GCC\s0 generates code for the \s-1GR5\s0
  variant of the Visium architecture.
  .Sp
! With \fB\-mcpu=gr6\fR, \s-1GCC\s0 generates code for the \s-1GR6\s0 variant of the Visium
! architecture.  The only difference from \s-1GR5\s0 code is that the compiler will
  generate block move instructions.
! .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
  but do not set the instruction set or register set that the option
  \&\fB\-mcpu=\fR\fIcpu_type\fR would.
! .IP "\fB\-msv\-mode\fR" 4
  .IX Item "-msv-mode"
  Generate code for the supervisor mode, where there are no restrictions on
  the access to general registers.  This is the default.
! .IP "\fB\-muser\-mode\fR" 4
  .IX Item "-muser-mode"
  Generate code for the user mode, where the access to some general registers
! is forbidden: on the \s-1GR5,\s0 registers r24 to r31 cannot be accessed in this
! mode; on the \s-1GR6,\s0 only registers r29 to r31 are affected.
  .PP
! \fI\s-1VMS\s0 Options\fR
  .IX Subsection "VMS Options"
  .PP
! These \fB\-m\fR options are defined for the \s-1VMS\s0 implementations:
! .IP "\fB\-mvms\-return\-codes\fR" 4
  .IX Item "-mvms-return-codes"
! Return \s-1VMS\s0 condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX-style
  condition (e.g. error) codes.
! .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
  .IX Item "-mdebug-main=prefix"
  Flag the first routine whose name starts with \fIprefix\fR as the main
  routine for the debugger.
! .IP "\fB\-mmalloc64\fR" 4
  .IX Item "-mmalloc64"
  Default to 64\-bit memory allocation routines.
! .IP "\fB\-mpointer\-size=\fR\fIsize\fR" 4
  .IX Item "-mpointer-size=size"
  Set the default size of pointers. Possible options for \fIsize\fR are
  \&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
--- 33195,33237 ----
  .Sp
  \&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
  .Sp
! By default (unless configured otherwise), GCC generates code for the GR5
  variant of the Visium architecture.
  .Sp
! With \fB\-mcpu=gr6\fR, GCC generates code for the GR6 variant of the Visium
! architecture.  The only difference from GR5 code is that the compiler will
  generate block move instructions.
! .IP \fB\-mtune=\fR\fIcpu_type\fR 4
  .IX Item "-mtune=cpu_type"
  Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
  but do not set the instruction set or register set that the option
  \&\fB\-mcpu=\fR\fIcpu_type\fR would.
! .IP \fB\-msv\-mode\fR 4
  .IX Item "-msv-mode"
  Generate code for the supervisor mode, where there are no restrictions on
  the access to general registers.  This is the default.
! .IP \fB\-muser\-mode\fR 4
  .IX Item "-muser-mode"
  Generate code for the user mode, where the access to some general registers
! is forbidden: on the GR5, registers r24 to r31 cannot be accessed in this
! mode; on the GR6, only registers r29 to r31 are affected.
  .PP
! \fIVMS Options\fR
  .IX Subsection "VMS Options"
  .PP
! These \fB\-m\fR options are defined for the VMS implementations:
! .IP \fB\-mvms\-return\-codes\fR 4
  .IX Item "-mvms-return-codes"
! Return VMS condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX\-style
  condition (e.g. error) codes.
! .IP \fB\-mdebug\-main=\fR\fIprefix\fR 4
  .IX Item "-mdebug-main=prefix"
  Flag the first routine whose name starts with \fIprefix\fR as the main
  routine for the debugger.
! .IP \fB\-mmalloc64\fR 4
  .IX Item "-mmalloc64"
  Default to 64\-bit memory allocation routines.
! .IP \fB\-mpointer\-size=\fR\fIsize\fR 4
  .IX Item "-mpointer-size=size"
  Set the default size of pointers. Possible options for \fIsize\fR are
  \&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
*************** The later option disables \f(CW\*(C`prag
*** 33309,33344 ****
  The options in this section are defined for all VxWorks targets.
  Options specific to the target hardware are listed with the other
  options for that target.
! .IP "\fB\-mrtp\fR" 4
  .IX Item "-mrtp"
! \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
  (RTPs).  This option switches from the former to the latter.  It also
  defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
! .IP "\fB\-msmp\fR" 4
  .IX Item "-msmp"
! Select \s-1SMP\s0 runtimes for linking.  Not available on architectures other
  than PowerPC, nor on VxWorks version 7 or later, in which the selection
  is part of the VxWorks build configuration and the library paths are the
  same for either choice.
! .IP "\fB\-non\-static\fR" 4
  .IX Item "-non-static"
! Link an \s-1RTP\s0 executable against shared libraries rather than static
  libraries.  The options \fB\-static\fR and \fB\-shared\fR can
  also be used for RTPs; \fB\-static\fR
  is the default.
! .IP "\fB\-Bstatic\fR" 4
  .IX Item "-Bstatic"
  .PD 0
! .IP "\fB\-Bdynamic\fR" 4
  .IX Item "-Bdynamic"
  .PD
  These options are passed down to the linker.  They are defined for
  compatibility with Diab.
! .IP "\fB\-Xbind\-lazy\fR" 4
  .IX Item "-Xbind-lazy"
  Enable lazy binding of function calls.  This option is equivalent to
  \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
! .IP "\fB\-Xbind\-now\fR" 4
  .IX Item "-Xbind-now"
  Disable lazy binding of function calls.  This option is the default and
  is defined for compatibility with Diab.
--- 33244,33279 ----
  The options in this section are defined for all VxWorks targets.
  Options specific to the target hardware are listed with the other
  options for that target.
! .IP \fB\-mrtp\fR 4
  .IX Item "-mrtp"
! GCC can generate code for both VxWorks kernels and real time processes
  (RTPs).  This option switches from the former to the latter.  It also
  defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
! .IP \fB\-msmp\fR 4
  .IX Item "-msmp"
! Select SMP runtimes for linking.  Not available on architectures other
  than PowerPC, nor on VxWorks version 7 or later, in which the selection
  is part of the VxWorks build configuration and the library paths are the
  same for either choice.
! .IP \fB\-non\-static\fR 4
  .IX Item "-non-static"
! Link an RTP executable against shared libraries rather than static
  libraries.  The options \fB\-static\fR and \fB\-shared\fR can
  also be used for RTPs; \fB\-static\fR
  is the default.
! .IP \fB\-Bstatic\fR 4
  .IX Item "-Bstatic"
  .PD 0
! .IP \fB\-Bdynamic\fR 4
  .IX Item "-Bdynamic"
  .PD
  These options are passed down to the linker.  They are defined for
  compatibility with Diab.
! .IP \fB\-Xbind\-lazy\fR 4
  .IX Item "-Xbind-lazy"
  Enable lazy binding of function calls.  This option is equivalent to
  \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
! .IP \fB\-Xbind\-now\fR 4
  .IX Item "-Xbind-now"
  Disable lazy binding of function calls.  This option is the default and
  is defined for compatibility with Diab.
*************** is defined for compatibility with Diab.
*** 33347,33990 ****
  .IX Subsection "x86 Options"
  .PP
  These \fB\-m\fR options are defined for the x86 family of computers.
! .IP "\fB\-march=\fR\fIcpu-type\fR" 4
  .IX Item "-march=cpu-type"
! Generate instructions for the machine type \fIcpu-type\fR.  In contrast to
! \&\fB\-mtune=\fR\fIcpu-type\fR, which merely tunes the generated code 
! for the specified \fIcpu-type\fR, \fB\-march=\fR\fIcpu-type\fR allows \s-1GCC\s0
  to generate code that may not run at all on processors other than the one
! indicated.  Specifying \fB\-march=\fR\fIcpu-type\fR implies 
! \&\fB\-mtune=\fR\fIcpu-type\fR, except where noted otherwise.
  .Sp
! The choices for \fIcpu-type\fR are:
  .RS 4
! .IP "\fBnative\fR" 4
  .IX Item "native"
! This selects the \s-1CPU\s0 to generate code for at compilation time by determining
  the processor type of the compiling machine.  Using \fB\-march=native\fR
  enables all instruction subsets supported by the local machine (hence
  the result might not run on different machines).  Using \fB\-mtune=native\fR
  produces code optimized for the local machine under the constraints
  of the selected instruction set.
! .IP "\fBx86\-64\fR" 4
  .IX Item "x86-64"
! A generic \s-1CPU\s0 with 64\-bit extensions.
! .IP "\fBx86\-64\-v2\fR" 4
  .IX Item "x86-64-v2"
  .PD 0
! .IP "\fBx86\-64\-v3\fR" 4
  .IX Item "x86-64-v3"
! .IP "\fBx86\-64\-v4\fR" 4
  .IX Item "x86-64-v4"
  .PD
! These choices for \fIcpu-type\fR select the corresponding
! micro-architecture level from the x86\-64 psABI.  On ABIs other than
! the x86\-64 psABI they select the same \s-1CPU\s0 features as the x86\-64 psABI
! documents for the particular micro-architecture level.
  .Sp
! Since these \fIcpu-type\fR values do not have a corresponding
  \&\fB\-mtune\fR setting, using \fB\-march\fR with these values enables
  generic tuning.  Specific tuning can be enabled using the
! \&\fB\-mtune=\fR\fIother-cpu-type\fR option with an appropriate
! \&\fIother-cpu-type\fR value.
! .IP "\fBi386\fR" 4
  .IX Item "i386"
! Original Intel i386 \s-1CPU.\s0
! .IP "\fBi486\fR" 4
  .IX Item "i486"
! Intel i486 \s-1CPU.\s0  (No scheduling is implemented for this chip.)
! .IP "\fBi586\fR" 4
  .IX Item "i586"
  .PD 0
! .IP "\fBpentium\fR" 4
  .IX Item "pentium"
  .PD
! Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
! .IP "\fBlakemont\fR" 4
  .IX Item "lakemont"
! Intel Lakemont \s-1MCU,\s0 based on Intel Pentium \s-1CPU.\s0
! .IP "\fBpentium-mmx\fR" 4
  .IX Item "pentium-mmx"
! Intel Pentium \s-1MMX CPU,\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
! .IP "\fBpentiumpro\fR" 4
  .IX Item "pentiumpro"
! Intel Pentium Pro \s-1CPU.\s0
! .IP "\fBi686\fR" 4
  .IX Item "i686"
  When used with \fB\-march\fR, the Pentium Pro
  instruction set is used, so the code runs on all i686 family chips.
  When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
! .IP "\fBpentium2\fR" 4
  .IX Item "pentium2"
! Intel Pentium \s-1II CPU,\s0 based on Pentium Pro core with \s-1MMX\s0 and \s-1FXSR\s0 instruction
  set support.
! .IP "\fBpentium3\fR" 4
  .IX Item "pentium3"
  .PD 0
! .IP "\fBpentium3m\fR" 4
  .IX Item "pentium3m"
  .PD
! Intel Pentium \s-1III CPU,\s0 based on Pentium Pro core with \s-1MMX, FXSR\s0 and \s-1SSE\s0
  instruction set support.
! .IP "\fBpentium-m\fR" 4
  .IX Item "pentium-m"
! Intel Pentium M; low-power version of Intel Pentium \s-1III CPU\s0
! with \s-1MMX, SSE, SSE2\s0 and \s-1FXSR\s0 instruction set support.  Used by Centrino
  notebooks.
! .IP "\fBpentium4\fR" 4
  .IX Item "pentium4"
  .PD 0
! .IP "\fBpentium4m\fR" 4
  .IX Item "pentium4m"
  .PD
! Intel Pentium 4 \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBprescott\fR" 4
  .IX Item "prescott"
! Improved version of Intel Pentium 4 \s-1CPU\s0 with \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1FXSR\s0
  instruction set support.
! .IP "\fBnocona\fR" 4
  .IX Item "nocona"
! Improved version of Intel Pentium 4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
! SSE2, SSE3\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBcore2\fR" 4
  .IX Item "core2"
! Intel Core 2 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, CX16,
! SAHF\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBnehalem\fR" 4
  .IX Item "nehalem"
  .PD 0
! .IP "\fBcorei7\fR" 4
  .IX Item "corei7"
  .PD
! Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF\s0 and \s-1FXSR\s0 instruction set support.
! .IP "\fBwestmere\fR" 4
  .IX Item "westmere"
! Intel Westmere \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support.
! .IP "\fBsandybridge\fR" 4
  .IX Item "sandybridge"
  .PD 0
! .IP "\fBcorei7\-avx\fR" 4
  .IX Item "corei7-avx"
  .PD
! Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set
  support.
! .IP "\fBivybridge\fR" 4
  .IX Item "ivybridge"
  .PD 0
! .IP "\fBcore-avx-i\fR" 4
  .IX Item "core-avx-i"
  .PD
! Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0
  and F16C instruction set support.
! .IP "\fBhaswell\fR" 4
  .IX Item "haswell"
  .PD 0
! .IP "\fBcore\-avx2\fR" 4
  .IX Item "core-avx2"
  .PD
! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support.
! .IP "\fBbroadwell\fR" 4
  .IX Item "broadwell"
! Intel Broadwell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX\s0 and \s-1PREFETCHW\s0
  instruction set support.
! .IP "\fBskylake\fR" 4
  .IX Item "skylake"
! Intel Skylake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
! CLFLUSHOPT, XSAVEC, XSAVES\s0 and \s-1SGX\s0 instruction set support.
! .IP "\fBskylake\-avx512\fR" 4
  .IX Item "skylake-avx512"
! Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
! AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
! .IP "\fBcascadelake\fR" 4
  .IX Item "cascadelake"
! Intel Cascade Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
! .IP "\fBcannonlake\fR" 4
  .IX Item "cannonlake"
! Intel Cannon Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
! AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set
  support.
! .IP "\fBcooperlake\fR" 4
  .IX Item "cooperlake"
! Intel Cooper Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support.
! .IP "\fBicelake-client\fR" 4
  .IX Item "icelake-client"
! Intel Ice Lake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
! .IP "\fBicelake-server\fR" 4
  .IX Item "icelake-server"
! Intel Ice Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0
  instruction set support.
! .IP "\fBtigerlake\fR" 4
  .IX Item "tigerlake"
! Intel Tiger Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
! AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support.
! .IP "\fBrocketlake\fR" 4
  .IX Item "rocketlake"
! Intel Rocket Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
! VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
! .IP "\fBalderlake\fR" 4
  .IX Item "alderlake"
  .PD 0
! .IP "\fBraptorlake\fR" 4
  .IX Item "raptorlake"
! .IP "\fBmeteorlake\fR" 4
  .IX Item "meteorlake"
! .IP "\fBgracemont\fR" 4
  .IX Item "gracemont"
  .PD
! Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont \s-1CPU\s0 with 64\-bit extensions,
! \&\s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
! PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0
! GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI,
! BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
! WIDEKL\s0 and AVX-VNNI instruction set support.
! .IP "\fBarrowlake\fR" 4
  .IX Item "arrowlake"
! Intel Arrow Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
! MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT\s0 and \s-1CMPCCXADD\s0 instruction set
! support.
! .IP "\fBarrowlake-s\fR" 4
  .IX Item "arrowlake-s"
  .PD 0
! .IP "\fBlunarlake\fR" 4
  .IX Item "lunarlake"
  .PD
! Intel Arrow Lake S/Lunar Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
! XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB,
! MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3\s0 and \s-1SM4\s0 instruction set support.
! .IP "\fBpantherlake\fR" 4
  .IX Item "pantherlake"
! Intel Panther Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
! MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4\s0 and \s-1PREFETCHI\s0 instruction set support.
! .IP "\fBsapphirerapids\fR" 4
  .IX Item "sapphirerapids"
  .PD 0
! .IP "\fBemeraldrapids\fR" 4
  .IX Item "emeraldrapids"
  .PD
! Intel Sapphire Rapids/Emerald Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
  AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
  WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
! SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0
! and \s-1AVX512BF16\s0 instruction set support.
! .IP "\fBgraniterapids\fR" 4
  .IX Item "graniterapids"
! Intel Granite Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16, AVX512BF16, AMX\-FP16\s0
! and \s-1PREFETCHI\s0 instruction set support.
! .IP "\fBgraniterapids-d\fR" 4
  .IX Item "graniterapids-d"
! Intel Granite Rapids D \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512FP16, AVX512BF16, AMX\-FP16,
! PREFETCHI\s0 and AMX-COMPLEX instruction set support.
! .IP "\fBbonnell\fR" 4
  .IX Item "bonnell"
  .PD 0
! .IP "\fBatom\fR" 4
  .IX Item "atom"
  .PD
! Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
! .IP "\fBsilvermont\fR" 4
  .IX Item "silvermont"
  .PD 0
! .IP "\fBslm\fR" 4
  .IX Item "slm"
  .PD
! Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0
  instruction set support.
! .IP "\fBgoldmont\fR" 4
  .IX Item "goldmont"
! Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction
  set support.
! .IP "\fBgoldmont-plus\fR" 4
  .IX Item "goldmont-plus"
! Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
  SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
! RDPID\s0 and \s-1SGX\s0 instruction set support.
! .IP "\fBtremont\fR" 4
  .IX Item "tremont"
! Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
  RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
! SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set
  support.
! .IP "\fBsierraforest\fR" 4
  .IX Item "sierraforest"
! Intel Sierra Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
  support.
! .IP "\fBgrandridge\fR" 4
  .IX Item "grandridge"
! Intel Grand Ridge \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
  support.
! .IP "\fBclearwaterforest\fR" 4
  .IX Item "clearwaterforest"
! Intel Clearwater Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
! XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
! \&\s-1ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16,
! SHA512, SM3, SM4, USER_MSR\s0 and \s-1PREFETCHI\s0 instruction set support.
! .IP "\fBknl\fR" 4
  .IX Item "knl"
! Intel Knights Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support.
! .IP "\fBknm\fR" 4
  .IX Item "knm"
! Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW,
! AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
! .IP "\fBk6\fR" 4
  .IX Item "k6"
! \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support.
! .IP "\fBk6\-2\fR" 4
  .IX Item "k6-2"
  .PD 0
! .IP "\fBk6\-3\fR" 4
  .IX Item "k6-3"
  .PD
! Improved versions of \s-1AMD K6 CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
! .IP "\fBathlon\fR" 4
  .IX Item "athlon"
  .PD 0
! .IP "\fBathlon-tbird\fR" 4
  .IX Item "athlon-tbird"
  .PD
! \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX,\s0 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
  support.
! .IP "\fBathlon\-4\fR" 4
  .IX Item "athlon-4"
  .PD 0
! .IP "\fBathlon-xp\fR" 4
  .IX Item "athlon-xp"
! .IP "\fBathlon-mp\fR" 4
  .IX Item "athlon-mp"
  .PD
! Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX,\s0 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
  instruction set support.
! .IP "\fBk8\fR" 4
  .IX Item "k8"
  .PD 0
! .IP "\fBopteron\fR" 4
  .IX Item "opteron"
! .IP "\fBathlon64\fR" 4
  .IX Item "athlon64"
! .IP "\fBathlon-fx\fR" 4
  .IX Item "athlon-fx"
  .PD
! Processors based on the \s-1AMD K8\s0 core with x86\-64 instruction set support,
! including the \s-1AMD\s0 Opteron, Athlon 64, and Athlon 64 \s-1FX\s0 processors.
! (This supersets \s-1MMX, SSE, SSE2,\s0 3DNow!, enhanced 3DNow! and 64\-bit
  instruction set extensions.)
! .IP "\fBk8\-sse3\fR" 4
  .IX Item "k8-sse3"
  .PD 0
! .IP "\fBopteron\-sse3\fR" 4
  .IX Item "opteron-sse3"
! .IP "\fBathlon64\-sse3\fR" 4
  .IX Item "athlon64-sse3"
  .PD
! Improved versions of \s-1AMD K8\s0 cores with \s-1SSE3\s0 instruction set support.
! .IP "\fBamdfam10\fR" 4
  .IX Item "amdfam10"
  .PD 0
! .IP "\fBbarcelona\fR" 4
  .IX Item "barcelona"
  .PD
! CPUs based on \s-1AMD\s0 Family 10h cores with x86\-64 instruction set support.  (This
! supersets \s-1MMX, SSE, SSE2, SSE3, SSE4A,\s0 3DNow!, enhanced 3DNow!, \s-1ABM\s0 and 64\-bit
  instruction set extensions.)
! .IP "\fBbdver1\fR" 4
  .IX Item "bdver1"
! CPUs based on \s-1AMD\s0 Family 15h cores with x86\-64 instruction set support.  (This
! supersets \s-1FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
! SSSE3, SSE4.1, SSE4.2, ABM\s0 and 64\-bit instruction set extensions.)
! .IP "\fBbdver2\fR" 4
  .IX Item "bdver2"
! \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX,
! SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM\s0 and 64\-bit instruction set 
  extensions.)
! .IP "\fBbdver3\fR" 4
  .IX Item "bdver3"
! \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES,\s0 
! \&\s-1PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM\s0 and
  64\-bit instruction set extensions.)
! .IP "\fBbdver4\fR" 4
  .IX Item "bdver4"
! \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP,\s0 
! \&\s-1AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
! SSE4.2, ABM\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver1\fR" 4
  .IX Item "znver1"
! \&\s-1AMD\s0 Family 17h core based CPUs with x86\-64 instruction set support.  (This
! supersets \s-1BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
  SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
! SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,\s0 and 64\-bit
  instruction set extensions.)
! .IP "\fBznver2\fR" 4
  .IX Item "znver2"
! \&\s-1AMD\s0 Family 17h core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD,\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver3\fR" 4
  .IX Item "znver3"
! \&\s-1AMD\s0 Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD, PKU, VPCLMULQDQ, VAES,\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver4\fR" 4
  .IX Item "znver4"
! \&\s-1AMD\s0 Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
! AVX512BITALG, AVX512VPOPCNTDQ, GFNI\s0 and 64\-bit instruction set extensions.)
! .IP "\fBznver5\fR" 4
  .IX Item "znver5"
! \&\s-1AMD\s0 Family 1ah core based CPUs with x86\-64 instruction set support. (This
! supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
! AVX512VP2INTERSECT, PREFETCHI\s0 and 64\-bit instruction set extensions.)
! .IP "\fBbtver1\fR" 4
  .IX Item "btver1"
! CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
! supersets \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM\s0 and 64\-bit
  instruction set extensions.)
! .IP "\fBbtver2\fR" 4
  .IX Item "btver2"
! CPUs based on \s-1AMD\s0 Family 16h cores with x86\-64 instruction set support. This
! includes \s-1MOVBE, F16C, BMI, AVX, PCLMUL, AES, SSE4.2, SSE4.1, CX16, ABM,
! SSE4A, SSSE3, SSE3, SSE2, SSE, MMX\s0 and 64\-bit instruction set extensions.
! .IP "\fBwinchip\-c6\fR" 4
  .IX Item "winchip-c6"
! \&\s-1IDT\s0 WinChip C6 \s-1CPU,\s0 dealt in same way as i486 with additional \s-1MMX\s0 instruction
  set support.
! .IP "\fBwinchip2\fR" 4
  .IX Item "winchip2"
! \&\s-1IDT\s0 WinChip 2 \s-1CPU,\s0 dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
  instruction set support.
! .IP "\fBc3\fR" 4
  .IX Item "c3"
! \&\s-1VIA C3 CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBc3\-2\fR" 4
  .IX Item "c3-2"
! \&\s-1VIA C3\-2\s0 (Nehemiah/C5XL) \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBc7\fR" 4
  .IX Item "c7"
! \&\s-1VIA C7\s0 (Esther) \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBsamuel\-2\fR" 4
  .IX Item "samuel-2"
! \&\s-1VIA\s0 Eden Samuel 2 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnehemiah\fR" 4
  .IX Item "nehemiah"
! \&\s-1VIA\s0 Eden Nehemiah \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBesther\fR" 4
  .IX Item "esther"
! \&\s-1VIA\s0 Eden Esther \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBeden\-x2\fR" 4
  .IX Item "eden-x2"
! \&\s-1VIA\s0 Eden X2 \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBeden\-x4\fR" 4
  .IX Item "eden-x4"
! \&\s-1VIA\s0 Eden X4 \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
! AVX\s0 and \s-1AVX2\s0 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\fR" 4
  .IX Item "nano"
! Generic \s-1VIA\s0 Nano \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-1000\fR" 4
  .IX Item "nano-1000"
! \&\s-1VIA\s0 Nano 1xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-2000\fR" 4
  .IX Item "nano-2000"
! \&\s-1VIA\s0 Nano 2xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-3000\fR" 4
  .IX Item "nano-3000"
! \&\s-1VIA\s0 Nano 3xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-x2\fR" 4
  .IX Item "nano-x2"
! \&\s-1VIA\s0 Nano Dual Core \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBnano\-x4\fR" 4
  .IX Item "nano-x4"
! \&\s-1VIA\s0 Nano Quad Core \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP "\fBlujiazui\fR" 4
  .IX Item "lujiazui"
! \&\s-1ZHAOXIN\s0 lujiazui \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED\s0 instruction set support.  While the CPUs
! do support \s-1AVX\s0 and F16C, these aren't enabled by \f(CW\*(C`\-march=lujiazui\*(C'\fR
  for performance reasons.
! .IP "\fByongfeng\fR" 4
  .IX Item "yongfeng"
! \&\s-1ZHAOXIN\s0 yongfeng \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED, AVX2, FMA, SHA, LZCNT\s0
  instruction set support.
! .IP "\fBgeode\fR" 4
  .IX Item "geode"
! \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu-type\fR everything applicable about the generated code, except
! for the \s-1ABI\s0 and the set of available instructions.  
! While picking a specific \fIcpu-type\fR schedules things appropriately
  for that particular chip, the compiler does not generate any code that
  cannot run on the default machine type unless you use a
! \&\fB\-march=\fR\fIcpu-type\fR option.
! For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
  then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
  but still runs on i686 machines.
  .Sp
! The choices for \fIcpu-type\fR are the same as for \fB\-march\fR.
! In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu-type\fR:
  .RS 4
! .IP "\fBgeneric\fR" 4
  .IX Item "generic"
! Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
! If you know the \s-1CPU\s0 on which your code will run, then you should use
  the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
! \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
  of your application will have, then you should use this option.
  .Sp
  As new processors are deployed in the marketplace, the behavior of this
  option will change.  Therefore, if you upgrade to a newer version of
! \&\s-1GCC,\s0 code generation controlled by this option will change to reflect
  the processors
! that are most common at the time that version of \s-1GCC\s0 is released.
  .Sp
  There is no \fB\-march=generic\fR option because \fB\-march\fR
  indicates the instruction set the compiler can use, and there is no
  generic instruction set applicable to all processors.  In contrast,
  \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
  processors) for which the code is optimized.
! .IP "\fBintel\fR" 4
  .IX Item "intel"
  Produce code optimized for the most current Intel processors, which are
! Haswell and Silvermont for this version of \s-1GCC.\s0  If you know the \s-1CPU\s0
  on which your code will run, then you should use the corresponding
  \&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
  But, if you want your application performs better on both Haswell and
--- 33282,33924 ----
  .IX Subsection "x86 Options"
  .PP
  These \fB\-m\fR options are defined for the x86 family of computers.
! .IP \fB\-march=\fR\fIcpu\-type\fR 4
  .IX Item "-march=cpu-type"
! Generate instructions for the machine type \fIcpu\-type\fR.  In contrast to
! \&\fB\-mtune=\fR\fIcpu\-type\fR, which merely tunes the generated code 
! for the specified \fIcpu\-type\fR, \fB\-march=\fR\fIcpu\-type\fR allows GCC
  to generate code that may not run at all on processors other than the one
! indicated.  Specifying \fB\-march=\fR\fIcpu\-type\fR implies 
! \&\fB\-mtune=\fR\fIcpu\-type\fR, except where noted otherwise.
  .Sp
! The choices for \fIcpu\-type\fR are:
  .RS 4
! .IP \fBnative\fR 4
  .IX Item "native"
! This selects the CPU to generate code for at compilation time by determining
  the processor type of the compiling machine.  Using \fB\-march=native\fR
  enables all instruction subsets supported by the local machine (hence
  the result might not run on different machines).  Using \fB\-mtune=native\fR
  produces code optimized for the local machine under the constraints
  of the selected instruction set.
! .IP \fBx86\-64\fR 4
  .IX Item "x86-64"
! A generic CPU with 64\-bit extensions.
! .IP \fBx86\-64\-v2\fR 4
  .IX Item "x86-64-v2"
  .PD 0
! .IP \fBx86\-64\-v3\fR 4
  .IX Item "x86-64-v3"
! .IP \fBx86\-64\-v4\fR 4
  .IX Item "x86-64-v4"
  .PD
! These choices for \fIcpu\-type\fR select the corresponding
! micro\-architecture level from the x86\-64 psABI.  On ABIs other than
! the x86\-64 psABI they select the same CPU features as the x86\-64 psABI
! documents for the particular micro\-architecture level.
  .Sp
! Since these \fIcpu\-type\fR values do not have a corresponding
  \&\fB\-mtune\fR setting, using \fB\-march\fR with these values enables
  generic tuning.  Specific tuning can be enabled using the
! \&\fB\-mtune=\fR\fIother\-cpu\-type\fR option with an appropriate
! \&\fIother\-cpu\-type\fR value.
! .IP \fBi386\fR 4
  .IX Item "i386"
! Original Intel i386 CPU.
! .IP \fBi486\fR 4
  .IX Item "i486"
! Intel i486 CPU.  (No scheduling is implemented for this chip.)
! .IP \fBi586\fR 4
  .IX Item "i586"
  .PD 0
! .IP \fBpentium\fR 4
  .IX Item "pentium"
  .PD
! Intel Pentium CPU with no MMX support.
! .IP \fBlakemont\fR 4
  .IX Item "lakemont"
! Intel Lakemont MCU, based on Intel Pentium CPU.
! .IP \fBpentium\-mmx\fR 4
  .IX Item "pentium-mmx"
! Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
! .IP \fBpentiumpro\fR 4
  .IX Item "pentiumpro"
! Intel Pentium Pro CPU.
! .IP \fBi686\fR 4
  .IX Item "i686"
  When used with \fB\-march\fR, the Pentium Pro
  instruction set is used, so the code runs on all i686 family chips.
  When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
! .IP \fBpentium2\fR 4
  .IX Item "pentium2"
! Intel Pentium II CPU, based on Pentium Pro core with MMX and FXSR instruction
  set support.
! .IP \fBpentium3\fR 4
  .IX Item "pentium3"
  .PD 0
! .IP \fBpentium3m\fR 4
  .IX Item "pentium3m"
  .PD
! Intel Pentium III CPU, based on Pentium Pro core with MMX, FXSR and SSE
  instruction set support.
! .IP \fBpentium\-m\fR 4
  .IX Item "pentium-m"
! Intel Pentium M; low\-power version of Intel Pentium III CPU
! with MMX, SSE, SSE2 and FXSR instruction set support.  Used by Centrino
  notebooks.
! .IP \fBpentium4\fR 4
  .IX Item "pentium4"
  .PD 0
! .IP \fBpentium4m\fR 4
  .IX Item "pentium4m"
  .PD
! Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction set support.
! .IP \fBprescott\fR 4
  .IX Item "prescott"
! Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2, SSE3 and FXSR
  instruction set support.
! .IP \fBnocona\fR 4
  .IX Item "nocona"
! Improved version of Intel Pentium 4 CPU with 64\-bit extensions, MMX, SSE,
! SSE2, SSE3 and FXSR instruction set support.
! .IP \fBcore2\fR 4
  .IX Item "core2"
! Intel Core 2 CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, CX16,
! SAHF and FXSR instruction set support.
! .IP \fBnehalem\fR 4
  .IX Item "nehalem"
  .PD 0
! .IP \fBcorei7\fR 4
  .IX Item "corei7"
  .PD
! Intel Nehalem CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction set support.
! .IP \fBwestmere\fR 4
  .IX Item "westmere"
! Intel Westmere CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and PCLMUL instruction set support.
! .IP \fBsandybridge\fR 4
  .IX Item "sandybridge"
  .PD 0
! .IP \fBcorei7\-avx\fR 4
  .IX Item "corei7-avx"
  .PD
! Intel Sandy Bridge CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set
  support.
! .IP \fBivybridge\fR 4
  .IX Item "ivybridge"
  .PD 0
! .IP \fBcore\-avx\-i\fR 4
  .IX Item "core-avx-i"
  .PD
! Intel Ivy Bridge CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND
  and F16C instruction set support.
! .IP \fBhaswell\fR 4
  .IX Item "haswell"
  .PD 0
! .IP \fBcore\-avx2\fR 4
  .IX Item "core-avx2"
  .PD
! Intel Haswell CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support.
! .IP \fBbroadwell\fR 4
  .IX Item "broadwell"
! Intel Broadwell CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX and PREFETCHW
  instruction set support.
! .IP \fBskylake\fR 4
  .IX Item "skylake"
! Intel Skylake CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
! CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
! .IP \fBskylake\-avx512\fR 4
  .IX Item "skylake-avx512"
! Intel Skylake Server CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
! AVX512DQ and AVX512CD instruction set support.
! .IP \fBcascadelake\fR 4
  .IX Item "cascadelake"
! Intel Cascade Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD and AVX512VNNI instruction set support.
! .IP \fBcannonlake\fR 4
  .IX Item "cannonlake"
! Intel Cannon Lake Server CPU with 64\-bit extensions, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
! AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA instruction set
  support.
! .IP \fBcooperlake\fR 4
  .IX Item "cooperlake"
! Intel Cooper Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
! AVX512CD, AVX512VNNI and AVX512BF16 instruction set support.
! .IP \fBicelake\-client\fR 4
  .IX Item "icelake-client"
! Intel Ice Lake Client CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
! .IP \fBicelake\-server\fR 4
  .IX Item "icelake-server"
! Intel Ice Lake Server CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
! , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB
  instruction set support.
! .IP \fBtigerlake\fR 4
  .IX Item "tigerlake"
! Intel Tiger Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
! AVX512VP2INTERSECT and KEYLOCKER instruction set support.
! .IP \fBrocketlake\fR 4
  .IX Item "rocketlake"
! Intel Rocket Lake CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
! VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
! .IP \fBalderlake\fR 4
  .IX Item "alderlake"
  .PD 0
! .IP \fBraptorlake\fR 4
  .IX Item "raptorlake"
! .IP \fBmeteorlake\fR 4
  .IX Item "meteorlake"
! .IP \fBgracemont\fR 4
  .IX Item "gracemont"
  .PD
! Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont CPU with 64\-bit extensions,
! MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
! PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,
! GFNI\-SSE, CLWB, MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C,
! FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and
! AVX\-VNNI instruction set support.
! .IP \fBarrowlake\fR 4
  .IX Item "arrowlake"
! Intel Arrow Lake CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
! MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI, UINTR, AVXIFMA,
! AVXVNNIINT8, AVXNECONVERT and CMPCCXADD instruction set support.
! .IP \fBarrowlake\-s\fR 4
  .IX Item "arrowlake-s"
  .PD 0
! .IP \fBlunarlake\fR 4
  .IX Item "lunarlake"
  .PD
! Intel Arrow Lake S/Lunar Lake CPU with 64\-bit extensions, MOVBE, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
! XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB,
! MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI, UINTR,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and
! SM4 instruction set support.
! .IP \fBpantherlake\fR 4
  .IX Item "pantherlake"
! Intel Panther Lake CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
! MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX\-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
! AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and SM4 instruction set
! support.
! .IP \fBsapphirerapids\fR 4
  .IX Item "sapphirerapids"
  .PD 0
! .IP \fBemeraldrapids\fR 4
  .IX Item "emeraldrapids"
  .PD
! Intel Sapphire Rapids/Emerald Rapids CPU with 64\-bit extensions, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
  AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
  WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
! SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16, AMX\-TILE, AMX\-INT8, AVX\-VNNI, AVX512\-FP16
! and AVX512BF16 instruction set support.
! .IP \fBgraniterapids\fR 4
  .IX Item "graniterapids"
! Intel Granite Rapids CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16, AMX\-TILE, AMX\-INT8, AVX\-VNNI, AVX512\-FP16, AVX512BF16, AMX\-FP16
! and PREFETCHI instruction set support.
! .IP \fBgraniterapids\-d\fR 4
  .IX Item "graniterapids-d"
! Intel Granite Rapids D CPU with 64\-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
! UINTR, AMX\-BF16, AMX\-TILE, AMX\-INT8, AVX\-VNNI, AVX512FP16, AVX512BF16, AMX\-FP16,
! PREFETCHI and AMX\-COMPLEX instruction set support.
! .IP \fBbonnell\fR 4
  .IX Item "bonnell"
  .PD 0
! .IP \fBatom\fR 4
  .IX Item "atom"
  .PD
! Intel Bonnell CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
! .IP \fBsilvermont\fR 4
  .IX Item "silvermont"
  .PD 0
! .IP \fBslm\fR 4
  .IX Item "slm"
  .PD
! Intel Silvermont CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND
  instruction set support.
! .IP \fBgoldmont\fR 4
  .IX Item "goldmont"
! Intel Goldmont CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction
  set support.
! .IP \fBgoldmont\-plus\fR 4
  .IX Item "goldmont-plus"
! Intel Goldmont Plus CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
  SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
! RDPID and SGX instruction set support.
! .IP \fBtremont\fR 4
  .IX Item "tremont"
! Intel Tremont CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
  RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
! SGX, CLWB, GFNI\-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set
  support.
! .IP \fBsierraforest\fR 4
  .IX Item "sierraforest"
! Intel Sierra Forest CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
  support.
! .IP \fBgrandridge\fR 4
  .IX Item "grandridge"
! Intel Grand Ridge CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
! XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB, MOVDIRI,
  MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX\-VNNI,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
  support.
! .IP \fBclearwaterforest\fR 4
  .IX Item "clearwaterforest"
! Intel Clearwater Forest CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
! XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI\-SSE, CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX\-VNNI, ENQCMD,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4, USER_MSR and PREFETCHI instruction set support.
! .IP \fBknl\fR 4
  .IX Item "knl"
! Intel Knights Landing CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support.
! .IP \fBknm\fR 4
  .IX Item "knm"
! Intel Knights Mill CPU with 64\-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
! AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW,
! AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
! .IP \fBk6\fR 4
  .IX Item "k6"
! AMD K6 CPU with MMX instruction set support.
! .IP \fBk6\-2\fR 4
  .IX Item "k6-2"
  .PD 0
! .IP \fBk6\-3\fR 4
  .IX Item "k6-3"
  .PD
! Improved versions of AMD K6 CPU with MMX and 3DNow! instruction set support.
! .IP \fBathlon\fR 4
  .IX Item "athlon"
  .PD 0
! .IP \fBathlon\-tbird\fR 4
  .IX Item "athlon-tbird"
  .PD
! AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE prefetch instructions
  support.
! .IP \fBathlon\-4\fR 4
  .IX Item "athlon-4"
  .PD 0
! .IP \fBathlon\-xp\fR 4
  .IX Item "athlon-xp"
! .IP \fBathlon\-mp\fR 4
  .IX Item "athlon-mp"
  .PD
! Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and full SSE
  instruction set support.
! .IP \fBk8\fR 4
  .IX Item "k8"
  .PD 0
! .IP \fBopteron\fR 4
  .IX Item "opteron"
! .IP \fBathlon64\fR 4
  .IX Item "athlon64"
! .IP \fBathlon\-fx\fR 4
  .IX Item "athlon-fx"
  .PD
! Processors based on the AMD K8 core with x86\-64 instruction set support,
! including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
! (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 64\-bit
  instruction set extensions.)
! .IP \fBk8\-sse3\fR 4
  .IX Item "k8-sse3"
  .PD 0
! .IP \fBopteron\-sse3\fR 4
  .IX Item "opteron-sse3"
! .IP \fBathlon64\-sse3\fR 4
  .IX Item "athlon64-sse3"
  .PD
! Improved versions of AMD K8 cores with SSE3 instruction set support.
! .IP \fBamdfam10\fR 4
  .IX Item "amdfam10"
  .PD 0
! .IP \fBbarcelona\fR 4
  .IX Item "barcelona"
  .PD
! CPUs based on AMD Family 10h cores with x86\-64 instruction set support.  (This
! supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64\-bit
  instruction set extensions.)
! .IP \fBbdver1\fR 4
  .IX Item "bdver1"
! CPUs based on AMD Family 15h cores with x86\-64 instruction set support.  (This
! supersets FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
! SSSE3, SSE4.1, SSE4.2, ABM and 64\-bit instruction set extensions.)
! .IP \fBbdver2\fR 4
  .IX Item "bdver2"
! AMD Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX,
! SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64\-bit instruction set 
  extensions.)
! .IP \fBbdver3\fR 4
  .IX Item "bdver3"
! AMD Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
! PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and
  64\-bit instruction set extensions.)
! .IP \fBbdver4\fR 4
  .IX Item "bdver4"
! AMD Family 15h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
! AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
! SSE4.2, ABM and 64\-bit instruction set extensions.)
! .IP \fBznver1\fR 4
  .IX Item "znver1"
! AMD Family 17h core based CPUs with x86\-64 instruction set support.  (This
! supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
  SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
! SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64\-bit
  instruction set extensions.)
! .IP \fBznver2\fR 4
  .IX Item "znver2"
! AMD Family 17h core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD, and 64\-bit instruction set extensions.)
! .IP \fBznver3\fR 4
  .IX Item "znver3"
! AMD Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
! WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64\-bit instruction set extensions.)
! .IP \fBznver4\fR 4
  .IX Item "znver4"
! AMD Family 19h core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
! AVX512BITALG, AVX512VPOPCNTDQ, GFNI and 64\-bit instruction set extensions.)
! .IP \fBznver5\fR 4
  .IX Item "znver5"
! AMD Family 1ah core based CPUs with x86\-64 instruction set support. (This
! supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
  MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
  SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
! AVX512VP2INTERSECT, PREFETCHI and 64\-bit instruction set extensions.)
! .IP \fBbtver1\fR 4
  .IX Item "btver1"
! CPUs based on AMD Family 14h cores with x86\-64 instruction set support.  (This
! supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64\-bit
  instruction set extensions.)
! .IP \fBbtver2\fR 4
  .IX Item "btver2"
! CPUs based on AMD Family 16h cores with x86\-64 instruction set support. This
! includes MOVBE, F16C, BMI, AVX, PCLMUL, AES, SSE4.2, SSE4.1, CX16, ABM,
! SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64\-bit instruction set extensions.
! .IP \fBwinchip\-c6\fR 4
  .IX Item "winchip-c6"
! IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
  set support.
! .IP \fBwinchip2\fR 4
  .IX Item "winchip2"
! IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!
  instruction set support.
! .IP \fBc3\fR 4
  .IX Item "c3"
! VIA C3 CPU with MMX and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBc3\-2\fR 4
  .IX Item "c3-2"
! VIA C3\-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBc7\fR 4
  .IX Item "c7"
! VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBsamuel\-2\fR 4
  .IX Item "samuel-2"
! VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnehemiah\fR 4
  .IX Item "nehemiah"
! VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBesther\fR 4
  .IX Item "esther"
! VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBeden\-x2\fR 4
  .IX Item "eden-x2"
! VIA Eden X2 CPU with x86\-64, MMX, SSE, SSE2 and SSE3 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBeden\-x4\fR 4
  .IX Item "eden-x4"
! VIA Eden X4 CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
! AVX and AVX2 instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\fR 4
  .IX Item "nano"
! Generic VIA Nano CPU with x86\-64, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-1000\fR 4
  .IX Item "nano-1000"
! VIA Nano 1xxx CPU with x86\-64, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-2000\fR 4
  .IX Item "nano-2000"
! VIA Nano 2xxx CPU with x86\-64, MMX, SSE, SSE2, SSE3 and SSSE3
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-3000\fR 4
  .IX Item "nano-3000"
! VIA Nano 3xxx CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-x2\fR 4
  .IX Item "nano-x2"
! VIA Nano Dual Core CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBnano\-x4\fR 4
  .IX Item "nano-x4"
! VIA Nano Quad Core CPU with x86\-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
  instruction set support.
  (No scheduling is implemented for this chip.)
! .IP \fBlujiazui\fR 4
  .IX Item "lujiazui"
! ZHAOXIN lujiazui CPU with x86\-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED instruction set support.  While the CPUs
! do support AVX and F16C, these aren\*(Aqt enabled by \f(CW\*(C`\-march=lujiazui\*(C'\fR
  for performance reasons.
! .IP \fByongfeng\fR 4
  .IX Item "yongfeng"
! ZHAOXIN yongfeng CPU with x86\-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
  SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED, AVX2, FMA, SHA, LZCNT
  instruction set support.
! .IP \fBgeode\fR 4
  .IX Item "geode"
! AMD Geode embedded processor with MMX and 3DNow! instruction set support.
  .RE
  .RS 4
  .RE
! .IP \fB\-mtune=\fR\fIcpu\-type\fR 4
  .IX Item "-mtune=cpu-type"
! Tune to \fIcpu\-type\fR everything applicable about the generated code, except
! for the ABI and the set of available instructions.  
! While picking a specific \fIcpu\-type\fR schedules things appropriately
  for that particular chip, the compiler does not generate any code that
  cannot run on the default machine type unless you use a
! \&\fB\-march=\fR\fIcpu\-type\fR option.
! For example, if GCC is configured for i686\-pc\-linux\-gnu
  then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
  but still runs on i686 machines.
  .Sp
! The choices for \fIcpu\-type\fR are the same as for \fB\-march\fR.
! In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu\-type\fR:
  .RS 4
! .IP \fBgeneric\fR 4
  .IX Item "generic"
! Produce code optimized for the most common IA32/AMD64/EM64T processors.
! If you know the CPU on which your code will run, then you should use
  the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
! \&\fB\-mtune=generic\fR.  But, if you do not know exactly what CPU users
  of your application will have, then you should use this option.
  .Sp
  As new processors are deployed in the marketplace, the behavior of this
  option will change.  Therefore, if you upgrade to a newer version of
! GCC, code generation controlled by this option will change to reflect
  the processors
! that are most common at the time that version of GCC is released.
  .Sp
  There is no \fB\-march=generic\fR option because \fB\-march\fR
  indicates the instruction set the compiler can use, and there is no
  generic instruction set applicable to all processors.  In contrast,
  \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
  processors) for which the code is optimized.
! .IP \fBintel\fR 4
  .IX Item "intel"
  Produce code optimized for the most current Intel processors, which are
! Haswell and Silvermont for this version of GCC.  If you know the CPU
  on which your code will run, then you should use the corresponding
  \&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
  But, if you want your application performs better on both Haswell and
*************** Silvermont, then you should use this opt
*** 33992,33999 ****
  .Sp
  As new Intel processors are deployed in the marketplace, the behavior of
  this option will change.  Therefore, if you upgrade to a newer version of
! \&\s-1GCC,\s0 code generation controlled by this option will change to reflect
! the most current Intel processors at the time that version of \s-1GCC\s0 is
  released.
  .Sp
  There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
--- 33926,33933 ----
  .Sp
  As new Intel processors are deployed in the marketplace, the behavior of
  this option will change.  Therefore, if you upgrade to a newer version of
! GCC, code generation controlled by this option will change to reflect
! the most current Intel processors at the time that version of GCC is
  released.
  .Sp
  There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
*************** processors) for which the code is optimi
*** 34004,34039 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
  .IX Item "-mcpu=cpu-type"
  A deprecated synonym for \fB\-mtune\fR.
! .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
  .IX Item "-mfpmath=unit"
! Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
  for \fIunit\fR are:
  .RS 4
! .IP "\fB387\fR" 4
  .IX Item "387"
! Use the standard 387 floating-point coprocessor present on the majority of chips and
  emulated otherwise.  Code compiled with this option runs almost everywhere.
  The temporary results are computed in 80\-bit precision instead of the precision
  specified by the type, resulting in slightly different results compared to most
  of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
  .Sp
! This is the default choice for non-Darwin x86\-32 targets.
! .IP "\fBsse\fR" 4
  .IX Item "sse"
! Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
! This instruction set is supported by Pentium \s-1III\s0 and newer chips,
! and in the \s-1AMD\s0 line
! by Athlon\-4, Athlon \s-1XP\s0 and Athlon \s-1MP\s0 chips.  The earlier version of the \s-1SSE\s0
! instruction set supports only single-precision arithmetic, thus the double and
! extended-precision arithmetic are still done using 387.  A later version, present
! only in Pentium 4 and \s-1AMD\s0 x86\-64 chips, supports double-precision
  arithmetic too.
  .Sp
! For the x86\-32 compiler, you must use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
! or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
  effective.  For the x86\-64 compiler, these extensions are enabled by default.
  .Sp
  The resulting code should be considerably faster in the majority of cases and avoid
--- 33938,33973 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4
  .IX Item "-mcpu=cpu-type"
  A deprecated synonym for \fB\-mtune\fR.
! .IP \fB\-mfpmath=\fR\fIunit\fR 4
  .IX Item "-mfpmath=unit"
! Generate floating\-point arithmetic for selected unit \fIunit\fR.  The choices
  for \fIunit\fR are:
  .RS 4
! .IP \fB387\fR 4
  .IX Item "387"
! Use the standard 387 floating\-point coprocessor present on the majority of chips and
  emulated otherwise.  Code compiled with this option runs almost everywhere.
  The temporary results are computed in 80\-bit precision instead of the precision
  specified by the type, resulting in slightly different results compared to most
  of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
  .Sp
! This is the default choice for non\-Darwin x86\-32 targets.
! .IP \fBsse\fR 4
  .IX Item "sse"
! Use scalar floating\-point instructions present in the SSE instruction set.
! This instruction set is supported by Pentium III and newer chips,
! and in the AMD line
! by Athlon\-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
! instruction set supports only single\-precision arithmetic, thus the double and
! extended\-precision arithmetic are still done using 387.  A later version, present
! only in Pentium 4 and AMD x86\-64 chips, supports double\-precision
  arithmetic too.
  .Sp
! For the x86\-32 compiler, you must use \fB\-march=\fR\fIcpu\-type\fR, \fB\-msse\fR
! or \fB\-msse2\fR switches to enable SSE extensions and make this option
  effective.  For the x86\-64 compiler, these extensions are enabled by default.
  .Sp
  The resulting code should be considerably faster in the majority of cases and avoid
*************** the numerical instability problems of 38
*** 34041,34134 ****
  code that expects temporaries to be 80 bits.
  .Sp
  This is the default choice for the x86\-64 compiler, Darwin x86\-32 targets,
! and the default choice for x86\-32 targets with the \s-1SSE2\s0 instruction set
  when \fB\-ffast\-math\fR is enabled.
! .IP "\fBsse,387\fR" 4
  .IX Item "sse,387"
  .PD 0
! .IP "\fBsse+387\fR" 4
  .IX Item "sse+387"
! .IP "\fBboth\fR" 4
  .IX Item "both"
  .PD
  Attempt to utilize both instruction sets at once.  This effectively doubles the
  amount of available registers, and on chips with separate execution units for
! 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
! still experimental, because the \s-1GCC\s0 register allocator does not model separate
  functional units well, resulting in unstable performance.
  .RE
  .RS 4
  .RE
! .IP "\fB\-masm=\fR\fIdialect\fR" 4
  .IX Item "-masm=dialect"
  Output assembly instructions using selected \fIdialect\fR.  Also affects
  which dialect is used for basic \f(CW\*(C`asm\*(C'\fR and
  extended \f(CW\*(C`asm\*(C'\fR. Supported choices (in dialect
  order) are \fBatt\fR or \fBintel\fR. The default is \fBatt\fR. Darwin does
  not support \fBintel\fR.
! .IP "\fB\-mieee\-fp\fR" 4
  .IX Item "-mieee-fp"
  .PD 0
! .IP "\fB\-mno\-ieee\-fp\fR" 4
  .IX Item "-mno-ieee-fp"
  .PD
! Control whether or not the compiler uses \s-1IEEE\s0 floating-point
  comparisons.  These correctly handle the case where the result of a
  comparison is unordered.
! .IP "\fB\-m80387\fR" 4
  .IX Item "-m80387"
  .PD 0
! .IP "\fB\-mhard\-float\fR" 4
  .IX Item "-mhard-float"
  .PD
  Generate output containing 80387 instructions for floating point.
! .IP "\fB\-mno\-80387\fR" 4
  .IX Item "-mno-80387"
  .PD 0
! .IP "\fB\-msoft\-float\fR" 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
  .Sp
! \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC.\s0
! Normally the facilities of the machine's usual C compiler are used, but
! this cannot be done directly in cross-compilation.  You must make your
  own arrangements to provide suitable library functions for
! cross-compilation.
  .Sp
! On machines where a function returns floating-point results in the 80387
! register stack, some floating-point opcodes may be emitted even if
  \&\fB\-msoft\-float\fR is used.
! .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
  .IX Item "-mno-fp-ret-in-387"
! Do not use the \s-1FPU\s0 registers for return values of functions.
  .Sp
  The usual calling convention has functions return values of types
! \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
! is no \s-1FPU.\s0  The idea is that the operating system should emulate
! an \s-1FPU.\s0
  .Sp
  The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
! in ordinary \s-1CPU\s0 registers instead.
! .IP "\fB\-mno\-fancy\-math\-387\fR" 4
  .IX Item "-mno-fancy-math-387"
  Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
  \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
  generating those instructions.
  This option is overridden when \fB\-march\fR
! indicates that the target \s-1CPU\s0 always has an \s-1FPU\s0 and so the
  instruction does not need emulation.  These
  instructions are not generated unless you also use the
  \&\fB\-funsafe\-math\-optimizations\fR switch.
! .IP "\fB\-malign\-double\fR" 4
  .IX Item "-malign-double"
  .PD 0
! .IP "\fB\-mno\-align\-double\fR" 4
  .IX Item "-mno-align-double"
  .PD
! Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
! \&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
! boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
  produces code that runs somewhat faster on a Pentium at the
  expense of more memory.
  .Sp
--- 33975,34068 ----
  code that expects temporaries to be 80 bits.
  .Sp
  This is the default choice for the x86\-64 compiler, Darwin x86\-32 targets,
! and the default choice for x86\-32 targets with the SSE2 instruction set
  when \fB\-ffast\-math\fR is enabled.
! .IP \fBsse,387\fR 4
  .IX Item "sse,387"
  .PD 0
! .IP \fBsse+387\fR 4
  .IX Item "sse+387"
! .IP \fBboth\fR 4
  .IX Item "both"
  .PD
  Attempt to utilize both instruction sets at once.  This effectively doubles the
  amount of available registers, and on chips with separate execution units for
! 387 and SSE the execution resources too.  Use this option with care, as it is
! still experimental, because the GCC register allocator does not model separate
  functional units well, resulting in unstable performance.
  .RE
  .RS 4
  .RE
! .IP \fB\-masm=\fR\fIdialect\fR 4
  .IX Item "-masm=dialect"
  Output assembly instructions using selected \fIdialect\fR.  Also affects
  which dialect is used for basic \f(CW\*(C`asm\*(C'\fR and
  extended \f(CW\*(C`asm\*(C'\fR. Supported choices (in dialect
  order) are \fBatt\fR or \fBintel\fR. The default is \fBatt\fR. Darwin does
  not support \fBintel\fR.
! .IP \fB\-mieee\-fp\fR 4
  .IX Item "-mieee-fp"
  .PD 0
! .IP \fB\-mno\-ieee\-fp\fR 4
  .IX Item "-mno-ieee-fp"
  .PD
! Control whether or not the compiler uses IEEE floating\-point
  comparisons.  These correctly handle the case where the result of a
  comparison is unordered.
! .IP \fB\-m80387\fR 4
  .IX Item "-m80387"
  .PD 0
! .IP \fB\-mhard\-float\fR 4
  .IX Item "-mhard-float"
  .PD
  Generate output containing 80387 instructions for floating point.
! .IP \fB\-mno\-80387\fR 4
  .IX Item "-mno-80387"
  .PD 0
! .IP \fB\-msoft\-float\fR 4
  .IX Item "-msoft-float"
  .PD
  Generate output containing library calls for floating point.
  .Sp
! \&\fBWarning:\fR the requisite libraries are not part of GCC.
! Normally the facilities of the machine\*(Aqs usual C compiler are used, but
! this cannot be done directly in cross\-compilation.  You must make your
  own arrangements to provide suitable library functions for
! cross\-compilation.
  .Sp
! On machines where a function returns floating\-point results in the 80387
! register stack, some floating\-point opcodes may be emitted even if
  \&\fB\-msoft\-float\fR is used.
! .IP \fB\-mno\-fp\-ret\-in\-387\fR 4
  .IX Item "-mno-fp-ret-in-387"
! Do not use the FPU registers for return values of functions.
  .Sp
  The usual calling convention has functions return values of types
! \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an FPU register, even if there
! is no FPU.  The idea is that the operating system should emulate
! an FPU.
  .Sp
  The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
! in ordinary CPU registers instead.
! .IP \fB\-mno\-fancy\-math\-387\fR 4
  .IX Item "-mno-fancy-math-387"
  Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
  \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
  generating those instructions.
  This option is overridden when \fB\-march\fR
! indicates that the target CPU always has an FPU and so the
  instruction does not need emulation.  These
  instructions are not generated unless you also use the
  \&\fB\-funsafe\-math\-optimizations\fR switch.
! .IP \fB\-malign\-double\fR 4
  .IX Item "-malign-double"
  .PD 0
! .IP \fB\-mno\-align\-double\fR 4
  .IX Item "-mno-align-double"
  .PD
! Control whether GCC aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
! \&\f(CW\*(C`long long\*(C'\fR variables on a two\-word boundary or a one\-word
! boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two\-word boundary
  produces code that runs somewhat faster on a Pentium at the
  expense of more memory.
  .Sp
*************** structures containing the above types ar
*** 34139,34148 ****
  the published application binary interface specifications for the x86\-32
  and are not binary compatible with structures in code compiled
  without that switch.
! .IP "\fB\-m96bit\-long\-double\fR" 4
  .IX Item "-m96bit-long-double"
  .PD 0
! .IP "\fB\-m128bit\-long\-double\fR" 4
  .IX Item "-m128bit-long-double"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The x86\-32
--- 34073,34082 ----
  the published application binary interface specifications for the x86\-32
  and are not binary compatible with structures in code compiled
  without that switch.
! .IP \fB\-m96bit\-long\-double\fR 4
  .IX Item "-m96bit-long-double"
  .PD 0
! .IP \fB\-m128bit\-long\-double\fR 4
  .IX Item "-m128bit-long-double"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The x86\-32
*************** so \fB\-m96bit\-long\-double\fR is the d
*** 34151,34179 ****
  .Sp
  Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
  to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
! conforming to the \s-1ABI,\s0 this is not possible.  So specifying
  \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
  to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
  32\-bit zero.
  .Sp
  In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
! its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
  .Sp
  Notice that neither of these options enable any extra precision over the x87
  standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target \s-1ABI,\s0 this
  changes the size of 
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
  with code compiled without that switch.
! .IP "\fB\-mlong\-double\-64\fR" 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP "\fB\-mlong\-double\-80\fR" 4
  .IX Item "-mlong-double-80"
! .IP "\fB\-mlong\-double\-128\fR" 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
--- 34085,34113 ----
  .Sp
  Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
  to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
! conforming to the ABI, this is not possible.  So specifying
  \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
  to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
  32\-bit zero.
  .Sp
  In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
! its ABI specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
  .Sp
  Notice that neither of these options enable any extra precision over the x87
  standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target ABI, this
  changes the size of 
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary\-compatible
  with code compiled without that switch.
! .IP \fB\-mlong\-double\-64\fR 4
  .IX Item "-mlong-double-64"
  .PD 0
! .IP \fB\-mlong\-double\-80\fR 4
  .IX Item "-mlong-double-80"
! .IP \fB\-mlong\-double\-128\fR 4
  .IX Item "-mlong-double-128"
  .PD
  These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
*************** type. This is the default for 32\-bit Bi
*** 34182,34209 ****
  of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
  \&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target \s-1ABI,\s0 this
  changes the size of
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
  with code compiled without that switch.
! .IP "\fB\-malign\-data=\fR\fItype\fR" 4
  .IX Item "-malign-data=type"
! Control how \s-1GCC\s0 aligns variables.  Supported values for \fItype\fR are
! \&\fBcompat\fR uses increased alignment value compatible uses \s-1GCC 4.8\s0
  and earlier, \fBabi\fR uses alignment value as specified by the
  psABI, and \fBcacheline\fR uses increased alignment value to match
  the cache line size.  \fBcompat\fR is the default.
! .IP "\fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR" 4
  .IX Item "-mlarge-data-threshold=threshold"
  When \fB\-mcmodel=medium\fR or \fB\-mcmodel=large\fR is specified, data
  objects larger than \fIthreshold\fR are placed in large data sections.  The
  default is 65535.
! .IP "\fB\-mrtd\fR" 4
  .IX Item "-mrtd"
! Use a different function-calling convention, in which functions that
! take a fixed number of arguments return with the \f(CW\*(C`ret \f(CInum\f(CW\*(C'\fR
  instruction, which pops their arguments while returning.  This saves one
  instruction in the caller since there is no need to pop the arguments
  there.
--- 34116,34143 ----
  of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
  \&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
  .Sp
! \&\fBWarning:\fR if you override the default value for your target ABI, this
  changes the size of
  structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
  as well as modifying the function calling convention for functions taking
! \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary\-compatible
  with code compiled without that switch.
! .IP \fB\-malign\-data=\fR\fItype\fR 4
  .IX Item "-malign-data=type"
! Control how GCC aligns variables.  Supported values for \fItype\fR are
! \&\fBcompat\fR uses increased alignment value compatible uses GCC 4.8
  and earlier, \fBabi\fR uses alignment value as specified by the
  psABI, and \fBcacheline\fR uses increased alignment value to match
  the cache line size.  \fBcompat\fR is the default.
! .IP \fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR 4
  .IX Item "-mlarge-data-threshold=threshold"
  When \fB\-mcmodel=medium\fR or \fB\-mcmodel=large\fR is specified, data
  objects larger than \fIthreshold\fR are placed in large data sections.  The
  default is 65535.
! .IP \fB\-mrtd\fR 4
  .IX Item "-mrtd"
! Use a different function\-calling convention, in which functions that
! take a fixed number of arguments return with the \f(CW\*(C`ret \fR\f(CInum\fR\f(CW\*(C'\fR
  instruction, which pops their arguments while returning.  This saves one
  instruction in the caller since there is no need to pop the arguments
  there.
*************** functions.
*** 34225,34231 ****
  In addition, seriously incorrect code results if you call a
  function with too many arguments.  (Normally, extra arguments are
  harmlessly ignored.)
! .IP "\fB\-mregparm=\fR\fInum\fR" 4
  .IX Item "-mregparm=num"
  Control how many registers are used to pass integer arguments.  By
  default, no registers are used to pass arguments, and at most 3
--- 34159,34165 ----
  In addition, seriously incorrect code results if you call a
  function with too many arguments.  (Normally, extra arguments are
  harmlessly ignored.)
! .IP \fB\-mregparm=\fR\fInum\fR 4
  .IX Item "-mregparm=num"
  Control how many registers are used to pass integer arguments.  By
  default, no registers are used to pass arguments, and at most 3
*************** function by using the function attribute
*** 34236,34318 ****
  \&\fInum\fR is nonzero, then you must build all modules with the same
  value, including any libraries.  This includes the system libraries and
  startup modules.
! .IP "\fB\-msseregparm\fR" 4
  .IX Item "-msseregparm"
! Use \s-1SSE\s0 register passing conventions for float and double arguments
  and return values.  You can control this behavior for a specific
  function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
  .Sp
  \&\fBWarning:\fR if you use this switch then you must build all
  modules with the same value, including any libraries.  This includes
  the system libraries and startup modules.
! .IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
  .IX Item "-mvect8-ret-in-mem"
! Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
! default on VxWorks to match the \s-1ABI\s0 of the Sun Studio compilers until
  version 12.  \fIOnly\fR use this option if you need to remain
  compatible with existing code produced by those previous compiler
! versions or older versions of \s-1GCC.\s0
! .IP "\fB\-mpc32\fR" 4
  .IX Item "-mpc32"
  .PD 0
! .IP "\fB\-mpc64\fR" 4
  .IX Item "-mpc64"
! .IP "\fB\-mpc80\fR" 4
  .IX Item "-mpc80"
  .PD
! Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
! is specified, the significands of results of floating-point operations are
  rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
! significands of results of floating-point operations to 53 bits (double
  precision) and \fB\-mpc80\fR rounds the significands of results of
! floating-point operations to 64 bits (extended double precision), which is
! the default.  When this option is used, floating-point operations in higher
! precisions are not available to the programmer without setting the \s-1FPU\s0
  control word explicitly.
  .Sp
! Setting the rounding of floating-point operations to less than the default
  80 bits can speed some programs by 2% or more.  Note that some mathematical
! libraries assume that extended-precision (80\-bit) floating-point operations
  are enabled by default; routines in such libraries could suffer significant
! loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
  when this option is used to set the precision to less than extended precision.
! .IP "\fB\-mdaz\-ftz\fR" 4
  .IX Item "-mdaz-ftz"
! The flush-to-zero (\s-1FTZ\s0) and denormals-are-zero (\s-1DAZ\s0) flags in the \s-1MXCSR\s0 register
! are used to control floating-point calculations.SSE and \s-1AVX\s0 instructions
! including scalar and vector instructions could benefit from enabling the \s-1FTZ\s0
! and \s-1DAZ\s0 flags when \fB\-mdaz\-ftz\fR is specified. Don't set \s-1FTZ/DAZ\s0 flags
  when \fB\-mno\-daz\-ftz\fR or \fB\-shared\fR is specified, \fB\-mdaz\-ftz\fR
! will set \s-1FTZ/DAZ\s0 flags even with \fB\-shared\fR.
! .IP "\fB\-mstackrealign\fR" 4
  .IX Item "-mstackrealign"
  Realign the stack at entry.  On the x86, the \fB\-mstackrealign\fR
  option generates an alternate prologue and epilogue that realigns the
! run-time stack if necessary.  This supports mixing legacy codes that keep
  4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
! \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
  applicable to individual functions.
! .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
  the default is 4 (16 bytes or 128 bits).
  .Sp
  \&\fBWarning:\fR When generating code for the x86\-64 architecture with
! \&\s-1SSE\s0 extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
  used to keep the stack boundary aligned to 8 byte boundary.  Since
! x86\-64 \s-1ABI\s0 require 16 byte stack alignment, this is \s-1ABI\s0 incompatible and
  intended to be used in controlled environment where stack space is
  important limitation.  This option leads to wrong code when functions
  compiled with 16 byte stack alignment (such as functions from a standard
! library) are called with misaligned stack.  In this case, \s-1SSE\s0
  instructions may lead to misaligned memory access traps.  In addition,
  variable arguments are handled incorrectly for 16 byte aligned
  objects (including x87 long double and _\|_int128), leading to wrong
  results.  You must build all modules with
  \&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
  includes the system libraries and startup modules.
! .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
  .IX Item "-mincoming-stack-boundary=num"
  Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
  boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
--- 34170,34252 ----
  \&\fInum\fR is nonzero, then you must build all modules with the same
  value, including any libraries.  This includes the system libraries and
  startup modules.
! .IP \fB\-msseregparm\fR 4
  .IX Item "-msseregparm"
! Use SSE register passing conventions for float and double arguments
  and return values.  You can control this behavior for a specific
  function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
  .Sp
  \&\fBWarning:\fR if you use this switch then you must build all
  modules with the same value, including any libraries.  This includes
  the system libraries and startup modules.
! .IP \fB\-mvect8\-ret\-in\-mem\fR 4
  .IX Item "-mvect8-ret-in-mem"
! Return 8\-byte vectors in memory instead of MMX registers.  This is the
! default on VxWorks to match the ABI of the Sun Studio compilers until
  version 12.  \fIOnly\fR use this option if you need to remain
  compatible with existing code produced by those previous compiler
! versions or older versions of GCC.
! .IP \fB\-mpc32\fR 4
  .IX Item "-mpc32"
  .PD 0
! .IP \fB\-mpc64\fR 4
  .IX Item "-mpc64"
! .IP \fB\-mpc80\fR 4
  .IX Item "-mpc80"
  .PD
! Set 80387 floating\-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
! is specified, the significands of results of floating\-point operations are
  rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
! significands of results of floating\-point operations to 53 bits (double
  precision) and \fB\-mpc80\fR rounds the significands of results of
! floating\-point operations to 64 bits (extended double precision), which is
! the default.  When this option is used, floating\-point operations in higher
! precisions are not available to the programmer without setting the FPU
  control word explicitly.
  .Sp
! Setting the rounding of floating\-point operations to less than the default
  80 bits can speed some programs by 2% or more.  Note that some mathematical
! libraries assume that extended\-precision (80\-bit) floating\-point operations
  are enabled by default; routines in such libraries could suffer significant
! loss of accuracy, typically through so\-called "catastrophic cancellation",
  when this option is used to set the precision to less than extended precision.
! .IP \fB\-mdaz\-ftz\fR 4
  .IX Item "-mdaz-ftz"
! The flush\-to\-zero (FTZ) and denormals\-are\-zero (DAZ) flags in the MXCSR register
! are used to control floating\-point calculations.SSE and AVX instructions
! including scalar and vector instructions could benefit from enabling the FTZ
! and DAZ flags when \fB\-mdaz\-ftz\fR is specified. Don\*(Aqt set FTZ/DAZ flags
  when \fB\-mno\-daz\-ftz\fR or \fB\-shared\fR is specified, \fB\-mdaz\-ftz\fR
! will set FTZ/DAZ flags even with \fB\-shared\fR.
! .IP \fB\-mstackrealign\fR 4
  .IX Item "-mstackrealign"
  Realign the stack at entry.  On the x86, the \fB\-mstackrealign\fR
  option generates an alternate prologue and epilogue that realigns the
! run\-time stack if necessary.  This supports mixing legacy codes that keep
  4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
! SSE compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
  applicable to individual functions.
! .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4
  .IX Item "-mpreferred-stack-boundary=num"
  Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
  byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
  the default is 4 (16 bytes or 128 bits).
  .Sp
  \&\fBWarning:\fR When generating code for the x86\-64 architecture with
! SSE extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
  used to keep the stack boundary aligned to 8 byte boundary.  Since
! x86\-64 ABI require 16 byte stack alignment, this is ABI incompatible and
  intended to be used in controlled environment where stack space is
  important limitation.  This option leads to wrong code when functions
  compiled with 16 byte stack alignment (such as functions from a standard
! library) are called with misaligned stack.  In this case, SSE
  instructions may lead to misaligned memory access traps.  In addition,
  variable arguments are handled incorrectly for 16 byte aligned
  objects (including x87 long double and _\|_int128), leading to wrong
  results.  You must build all modules with
  \&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
  includes the system libraries and startup modules.
! .IP \fB\-mincoming\-stack\-boundary=\fR\fInum\fR 4
  .IX Item "-mincoming-stack-boundary=num"
  Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
  boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
*************** the one specified by \fB\-mpreferred\-st
*** 34320,34327 ****
  .Sp
  On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
  should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
! suffer significant run time performance penalties.  On Pentium \s-1III,\s0 the
! Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
  properly if it is not 16\-byte aligned.
  .Sp
  To ensure proper alignment of this values on the stack, the stack boundary
--- 34254,34261 ----
  .Sp
  On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
  should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
! suffer significant run time performance penalties.  On Pentium III, the
! Streaming SIMD Extension (SSE) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
  properly if it is not 16\-byte aligned.
  .Sp
  To ensure proper alignment of this values on the stack, the stack boundary
*************** This extra alignment does consume extra
*** 34336,34759 ****
  increases code size.  Code that is sensitive to stack space usage, such
  as embedded systems and operating system kernels, may want to reduce the
  preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
! .IP "\fB\-mmmx\fR" 4
  .IX Item "-mmmx"
  .PD 0
! .IP "\fB\-msse\fR" 4
  .IX Item "-msse"
! .IP "\fB\-msse2\fR" 4
  .IX Item "-msse2"
! .IP "\fB\-msse3\fR" 4
  .IX Item "-msse3"
! .IP "\fB\-mssse3\fR" 4
  .IX Item "-mssse3"
! .IP "\fB\-msse4\fR" 4
  .IX Item "-msse4"
! .IP "\fB\-msse4a\fR" 4
  .IX Item "-msse4a"
! .IP "\fB\-msse4.1\fR" 4
  .IX Item "-msse4.1"
! .IP "\fB\-msse4.2\fR" 4
  .IX Item "-msse4.2"
! .IP "\fB\-mavx\fR" 4
  .IX Item "-mavx"
! .IP "\fB\-mavx2\fR" 4
  .IX Item "-mavx2"
! .IP "\fB\-mavx512f\fR" 4
  .IX Item "-mavx512f"
! .IP "\fB\-mavx512pf\fR" 4
  .IX Item "-mavx512pf"
! .IP "\fB\-mavx512er\fR" 4
  .IX Item "-mavx512er"
! .IP "\fB\-mavx512cd\fR" 4
  .IX Item "-mavx512cd"
! .IP "\fB\-mavx512vl\fR" 4
  .IX Item "-mavx512vl"
! .IP "\fB\-mavx512bw\fR" 4
  .IX Item "-mavx512bw"
! .IP "\fB\-mavx512dq\fR" 4
  .IX Item "-mavx512dq"
! .IP "\fB\-mavx512ifma\fR" 4
  .IX Item "-mavx512ifma"
! .IP "\fB\-mavx512vbmi\fR" 4
  .IX Item "-mavx512vbmi"
! .IP "\fB\-msha\fR" 4
  .IX Item "-msha"
! .IP "\fB\-maes\fR" 4
  .IX Item "-maes"
! .IP "\fB\-mpclmul\fR" 4
  .IX Item "-mpclmul"
! .IP "\fB\-mclflushopt\fR" 4
  .IX Item "-mclflushopt"
! .IP "\fB\-mclwb\fR" 4
  .IX Item "-mclwb"
! .IP "\fB\-mfsgsbase\fR" 4
  .IX Item "-mfsgsbase"
! .IP "\fB\-mptwrite\fR" 4
  .IX Item "-mptwrite"
! .IP "\fB\-mrdrnd\fR" 4
  .IX Item "-mrdrnd"
! .IP "\fB\-mf16c\fR" 4
  .IX Item "-mf16c"
! .IP "\fB\-mfma\fR" 4
  .IX Item "-mfma"
! .IP "\fB\-mpconfig\fR" 4
  .IX Item "-mpconfig"
! .IP "\fB\-mwbnoinvd\fR" 4
  .IX Item "-mwbnoinvd"
! .IP "\fB\-mfma4\fR" 4
  .IX Item "-mfma4"
! .IP "\fB\-mprfchw\fR" 4
  .IX Item "-mprfchw"
! .IP "\fB\-mrdpid\fR" 4
  .IX Item "-mrdpid"
! .IP "\fB\-mprefetchwt1\fR" 4
  .IX Item "-mprefetchwt1"
! .IP "\fB\-mrdseed\fR" 4
  .IX Item "-mrdseed"
! .IP "\fB\-msgx\fR" 4
  .IX Item "-msgx"
! .IP "\fB\-mxop\fR" 4
  .IX Item "-mxop"
! .IP "\fB\-mlwp\fR" 4
  .IX Item "-mlwp"
! .IP "\fB\-m3dnow\fR" 4
  .IX Item "-m3dnow"
! .IP "\fB\-m3dnowa\fR" 4
  .IX Item "-m3dnowa"
! .IP "\fB\-mpopcnt\fR" 4
  .IX Item "-mpopcnt"
! .IP "\fB\-mabm\fR" 4
  .IX Item "-mabm"
! .IP "\fB\-madx\fR" 4
  .IX Item "-madx"
! .IP "\fB\-mbmi\fR" 4
  .IX Item "-mbmi"
! .IP "\fB\-mbmi2\fR" 4
  .IX Item "-mbmi2"
! .IP "\fB\-mlzcnt\fR" 4
  .IX Item "-mlzcnt"
! .IP "\fB\-mfxsr\fR" 4
  .IX Item "-mfxsr"
! .IP "\fB\-mxsave\fR" 4
  .IX Item "-mxsave"
! .IP "\fB\-mxsaveopt\fR" 4
  .IX Item "-mxsaveopt"
! .IP "\fB\-mxsavec\fR" 4
  .IX Item "-mxsavec"
! .IP "\fB\-mxsaves\fR" 4
  .IX Item "-mxsaves"
! .IP "\fB\-mrtm\fR" 4
  .IX Item "-mrtm"
! .IP "\fB\-mhle\fR" 4
  .IX Item "-mhle"
! .IP "\fB\-mtbm\fR" 4
  .IX Item "-mtbm"
! .IP "\fB\-mmwaitx\fR" 4
  .IX Item "-mmwaitx"
! .IP "\fB\-mclzero\fR" 4
  .IX Item "-mclzero"
! .IP "\fB\-mpku\fR" 4
  .IX Item "-mpku"
! .IP "\fB\-mavx512vbmi2\fR" 4
  .IX Item "-mavx512vbmi2"
! .IP "\fB\-mavx512bf16\fR" 4
  .IX Item "-mavx512bf16"
! .IP "\fB\-mavx512fp16\fR" 4
  .IX Item "-mavx512fp16"
! .IP "\fB\-mgfni\fR" 4
  .IX Item "-mgfni"
! .IP "\fB\-mvaes\fR" 4
  .IX Item "-mvaes"
! .IP "\fB\-mwaitpkg\fR" 4
  .IX Item "-mwaitpkg"
! .IP "\fB\-mvpclmulqdq\fR" 4
  .IX Item "-mvpclmulqdq"
! .IP "\fB\-mavx512bitalg\fR" 4
  .IX Item "-mavx512bitalg"
! .IP "\fB\-mmovdiri\fR" 4
  .IX Item "-mmovdiri"
! .IP "\fB\-mmovdir64b\fR" 4
  .IX Item "-mmovdir64b"
! .IP "\fB\-menqcmd\fR" 4
  .IX Item "-menqcmd"
! .IP "\fB\-muintr\fR" 4
  .IX Item "-muintr"
! .IP "\fB\-mtsxldtrk\fR" 4
  .IX Item "-mtsxldtrk"
! .IP "\fB\-mavx512vpopcntdq\fR" 4
  .IX Item "-mavx512vpopcntdq"
! .IP "\fB\-mavx512vp2intersect\fR" 4
  .IX Item "-mavx512vp2intersect"
! .IP "\fB\-mavx5124fmaps\fR" 4
  .IX Item "-mavx5124fmaps"
! .IP "\fB\-mavx512vnni\fR" 4
  .IX Item "-mavx512vnni"
! .IP "\fB\-mavxvnni\fR" 4
  .IX Item "-mavxvnni"
! .IP "\fB\-mavx5124vnniw\fR" 4
  .IX Item "-mavx5124vnniw"
! .IP "\fB\-mcldemote\fR" 4
  .IX Item "-mcldemote"
! .IP "\fB\-mserialize\fR" 4
  .IX Item "-mserialize"
! .IP "\fB\-mamx\-tile\fR" 4
  .IX Item "-mamx-tile"
! .IP "\fB\-mamx\-int8\fR" 4
  .IX Item "-mamx-int8"
! .IP "\fB\-mamx\-bf16\fR" 4
  .IX Item "-mamx-bf16"
! .IP "\fB\-mhreset\fR" 4
  .IX Item "-mhreset"
! .IP "\fB\-mkl\fR" 4
  .IX Item "-mkl"
! .IP "\fB\-mwidekl\fR" 4
  .IX Item "-mwidekl"
! .IP "\fB\-mavxifma\fR" 4
  .IX Item "-mavxifma"
! .IP "\fB\-mavxvnniint8\fR" 4
  .IX Item "-mavxvnniint8"
! .IP "\fB\-mavxneconvert\fR" 4
  .IX Item "-mavxneconvert"
! .IP "\fB\-mcmpccxadd\fR" 4
  .IX Item "-mcmpccxadd"
! .IP "\fB\-mamx\-fp16\fR" 4
  .IX Item "-mamx-fp16"
! .IP "\fB\-mprefetchi\fR" 4
  .IX Item "-mprefetchi"
! .IP "\fB\-mraoint\fR" 4
  .IX Item "-mraoint"
! .IP "\fB\-mamx\-complex\fR" 4
  .IX Item "-mamx-complex"
! .IP "\fB\-mavxvnniint16\fR" 4
  .IX Item "-mavxvnniint16"
! .IP "\fB\-msm3\fR" 4
  .IX Item "-msm3"
! .IP "\fB\-msha512\fR" 4
  .IX Item "-msha512"
! .IP "\fB\-msm4\fR" 4
  .IX Item "-msm4"
! .IP "\fB\-mapxf\fR" 4
  .IX Item "-mapxf"
! .IP "\fB\-musermsr\fR" 4
  .IX Item "-musermsr"
! .IP "\fB\-mavx10.1\fR" 4
  .IX Item "-mavx10.1"
! .IP "\fB\-mavx10.1\-256\fR" 4
  .IX Item "-mavx10.1-256"
! .IP "\fB\-mavx10.1\-512\fR" 4
  .IX Item "-mavx10.1-512"
  .PD
! These switches enable the use of instructions in the \s-1MMX, SSE,
  AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
  AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG,
! WBNOINVD, FMA4, PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP,\s0
! 3DNow!, enhanced 3DNow!, \s-1POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
  XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
  GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B, AVX512BF16,
  ENQCMD, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE,
  UINTR, HRESET, AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512\-FP16,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AMX\-FP16, PREFETCHI, RAOINT,\s0
! AMX-COMPLEX, \s-1AVXVNNIINT16, SM3, SHA512, SM4, APX_F, USER_MSR, AVX10.1\s0 or
! \&\s-1CLDEMOTE\s0 extended instruction sets.  Each has a corresponding \fB\-mno\-\fR
  option to disable use of these instructions.
  .Sp
! These extensions are also available as built-in functions: see
! \&\fBx86 Built-in Functions\fR, for details of the functions enabled and
  disabled by these switches.
  .Sp
! To generate \s-1SSE/SSE2\s0 instructions automatically from floating-point
  code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
  .Sp
! \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
! generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
  when needed.
  .Sp
! These options enable \s-1GCC\s0 to use these extended instructions in
  generated code, even without \fB\-mfpmath=sse\fR.  Applications that
! perform run-time \s-1CPU\s0 detection must compile separate files for each
  supported architecture, using the appropriate flags.  In particular,
! the file containing the \s-1CPU\s0 detection code should be compiled without
  these options.
! .IP "\fB\-mdump\-tune\-features\fR" 4
  .IX Item "-mdump-tune-features"
! This option instructs \s-1GCC\s0 to dump the names of the x86 performance 
  tuning features and default settings. The names can be used in 
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR.
! .IP "\fB\-mtune\-ctrl=\fR\fIfeature-list\fR" 4
  .IX Item "-mtune-ctrl=feature-list"
  This option is used to do fine grain control of x86 code generation features.
! \&\fIfeature-list\fR is a comma separated list of \fIfeature\fR names. See also
  \&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
  on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR is intended to be used by \s-1GCC\s0
  developers. Using it may lead to code paths not covered by testing and can
  potentially result in compiler ICEs or runtime errors.
! .IP "\fB\-mno\-default\fR" 4
  .IX Item "-mno-default"
! This option instructs \s-1GCC\s0 to turn off all tunable features. See also 
! \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR and \fB\-mdump\-tune\-features\fR.
! .IP "\fB\-mcld\fR" 4
  .IX Item "-mcld"
! This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
  of functions that use string instructions.  String instructions depend on
! the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
! \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
! systems violate this specification by not clearing the \s-1DF\s0 flag in their
! exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
  set, which leads to wrong direction mode when string instructions are used.
  This option can be enabled by default on 32\-bit x86 targets by configuring
! \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
  instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
  in this case.
! .IP "\fB\-mvzeroupper\fR" 4
  .IX Item "-mvzeroupper"
! This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
  before a transfer of control flow out of the function to minimize
! the \s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
  intrinsics.
! .IP "\fB\-mprefer\-avx128\fR" 4
  .IX Item "-mprefer-avx128"
! This option instructs \s-1GCC\s0 to use 128\-bit \s-1AVX\s0 instructions instead of
! 256\-bit \s-1AVX\s0 instructions in the auto-vectorizer.
! .IP "\fB\-mprefer\-vector\-width=\fR\fIopt\fR" 4
  .IX Item "-mprefer-vector-width=opt"
! This option instructs \s-1GCC\s0 to use \fIopt\fR\-bit vector width in instructions
  instead of default on the selected platform.
! .IP "\fB\-mpartial\-vector\-fp\-math\fR" 4
  .IX Item "-mpartial-vector-fp-math"
! This option enables \s-1GCC\s0 to generate floating-point operations that might
! affect the set of floating-point status flags on partial vectors, where
! vector elements reside in the low part of the 128\-bit \s-1SSE\s0 register.  Unless
  \&\fB\-fno\-trapping\-math\fR is specified, the compiler guarantees correct
  behavior by sanitizing all input operands to have zeroes in the unused
! upper part of the vector register.  Note that by using built-in functions
  or inline assembly with partial vector arguments, NaNs, denormal or invalid
  values can leak into the upper part of the vector, causing possible
  performance issues when \fB\-fno\-trapping\-math\fR is in effect.  These
  issues can be mitigated by manually sanitizing the upper part of the partial
  vector argument register or by using \fB\-mdaz\-ftz\fR to set
! denormals-are-zero (\s-1DAZ\s0) flag in the \s-1MXCSR\s0 register.
  .Sp
  This option is enabled by default.
! .IP "\fB\-mmove\-max=\fR\fIbits\fR" 4
  .IX Item "-mmove-max=bits"
! This option instructs \s-1GCC\s0 to set the maximum number of bits can be
  moved from memory to memory efficiently to \fIbits\fR.  The valid
  \&\fIbits\fR are 128, 256 and 512.
! .IP "\fB\-mstore\-max=\fR\fIbits\fR" 4
  .IX Item "-mstore-max=bits"
! This option instructs \s-1GCC\s0 to set the maximum number of bits can be
  stored to memory efficiently to \fIbits\fR.  The valid \fIbits\fR are
  128, 256 and 512.
  .RS 4
! .IP "\fBnone\fR" 4
  .IX Item "none"
! No extra limitations applied to \s-1GCC\s0 other than defined by the selected platform.
! .IP "\fB128\fR" 4
  .IX Item "128"
  Prefer 128\-bit vector width for instructions.
! .IP "\fB256\fR" 4
  .IX Item "256"
  Prefer 256\-bit vector width for instructions.
! .IP "\fB512\fR" 4
  .IX Item "512"
  Prefer 512\-bit vector width for instructions.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mnoreturn\-no\-callee\-saved\-registers\fR" 4
  .IX Item "-mnoreturn-no-callee-saved-registers"
  This option optimizes functions with \f(CW\*(C`noreturn\*(C'\fR attribute or
! \&\f(CW\*(C`_Noreturn\*(C'\fR specifier by not saving in the function prologue callee-saved
  registers which are used in the function (except for the \f(CW\*(C`BP\*(C'\fR
  register).  This option can interfere with debugging of the caller of the
  \&\f(CW\*(C`noreturn\*(C'\fR function or any function further up in the call stack, so it
  is not enabled by default.
! .IP "\fB\-mcx16\fR" 4
  .IX Item "-mcx16"
! This option enables \s-1GCC\s0 to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions in 64\-bit
! code to implement compare-and-exchange operations on 16\-byte aligned 128\-bit
  objects.  This is useful for atomic updates of data structures exceeding one
  machine word in size.  The compiler uses this instruction to implement
  \&\fB_\|_sync Builtins\fR.  However, for \fB_\|_atomic Builtins\fR operating on
  128\-bit integers, a library call is always used.
! .IP "\fB\-msahf\fR" 4
  .IX Item "-msahf"
  This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
  Early Intel Pentium 4 CPUs with Intel 64 support,
  prior to the introduction of Pentium 4 G1 step in December 2005,
  lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
! which are supported by \s-1AMD64.\s0
  These are load and store instructions, respectively, for certain status flags.
  In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
! \&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built-in functions;
  see \fBOther Builtins\fR for details.
! .IP "\fB\-mmovbe\fR" 4
  .IX Item "-mmovbe"
  This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to optimize
  byte swapping of four and eight byte entities.
! .IP "\fB\-mshstk\fR" 4
  .IX Item "-mshstk"
! The \fB\-mshstk\fR option enables shadow stack built-in functions
! from x86 Control-flow Enforcement Technology (\s-1CET\s0).
! .IP "\fB\-mcrc32\fR" 4
  .IX Item "-mcrc32"
! This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
  \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
! .IP "\fB\-mmwait\fR" 4
  .IX Item "-mmwait"
! This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_monitor\*(C'\fR,
  and \f(CW\*(C`_\|_builtin_ia32_mwait\*(C'\fR to generate the \f(CW\*(C`monitor\*(C'\fR and
  \&\f(CW\*(C`mwait\*(C'\fR machine instructions.
! .IP "\fB\-mrecip\fR" 4
  .IX Item "-mrecip"
  This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
  (and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
! with an additional Newton-Raphson step
  to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
  (and their vectorized
! variants) for single-precision floating-point arguments.  These instructions
  are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
  together with \fB\-ffinite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
  Note that while the throughput of the sequence is higher than the throughput
! of the non-reciprocal instruction, the precision of the sequence can be
  decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
  .Sp
! Note that \s-1GCC\s0 implements \f(CW\*(C`1.0f/sqrtf(\f(CIx\f(CW)\*(C'\fR in terms of \f(CW\*(C`RSQRTSS\*(C'\fR
  (or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
! combination), and doesn't need \fB\-mrecip\fR.
  .Sp
! Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
! for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
  already with \fB\-ffast\-math\fR (or the above option combination), and
! doesn't need \fB\-mrecip\fR.
! .IP "\fB\-mrecip=\fR\fIopt\fR" 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP "\fBdefault\fR" 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP "\fBnone\fR" 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP "\fBdiv\fR" 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP "\fBvec-div\fR" 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP "\fBsqrt\fR" 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP "\fBvec-sqrt\fR" 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
  .RE
--- 34270,34693 ----
  increases code size.  Code that is sensitive to stack space usage, such
  as embedded systems and operating system kernels, may want to reduce the
  preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
! .IP \fB\-mmmx\fR 4
  .IX Item "-mmmx"
  .PD 0
! .IP \fB\-msse\fR 4
  .IX Item "-msse"
! .IP \fB\-msse2\fR 4
  .IX Item "-msse2"
! .IP \fB\-msse3\fR 4
  .IX Item "-msse3"
! .IP \fB\-mssse3\fR 4
  .IX Item "-mssse3"
! .IP \fB\-msse4\fR 4
  .IX Item "-msse4"
! .IP \fB\-msse4a\fR 4
  .IX Item "-msse4a"
! .IP \fB\-msse4.1\fR 4
  .IX Item "-msse4.1"
! .IP \fB\-msse4.2\fR 4
  .IX Item "-msse4.2"
! .IP \fB\-mavx\fR 4
  .IX Item "-mavx"
! .IP \fB\-mavx2\fR 4
  .IX Item "-mavx2"
! .IP \fB\-mavx512f\fR 4
  .IX Item "-mavx512f"
! .IP \fB\-mavx512pf\fR 4
  .IX Item "-mavx512pf"
! .IP \fB\-mavx512er\fR 4
  .IX Item "-mavx512er"
! .IP \fB\-mavx512cd\fR 4
  .IX Item "-mavx512cd"
! .IP \fB\-mavx512vl\fR 4
  .IX Item "-mavx512vl"
! .IP \fB\-mavx512bw\fR 4
  .IX Item "-mavx512bw"
! .IP \fB\-mavx512dq\fR 4
  .IX Item "-mavx512dq"
! .IP \fB\-mavx512ifma\fR 4
  .IX Item "-mavx512ifma"
! .IP \fB\-mavx512vbmi\fR 4
  .IX Item "-mavx512vbmi"
! .IP \fB\-msha\fR 4
  .IX Item "-msha"
! .IP \fB\-maes\fR 4
  .IX Item "-maes"
! .IP \fB\-mpclmul\fR 4
  .IX Item "-mpclmul"
! .IP \fB\-mclflushopt\fR 4
  .IX Item "-mclflushopt"
! .IP \fB\-mclwb\fR 4
  .IX Item "-mclwb"
! .IP \fB\-mfsgsbase\fR 4
  .IX Item "-mfsgsbase"
! .IP \fB\-mptwrite\fR 4
  .IX Item "-mptwrite"
! .IP \fB\-mrdrnd\fR 4
  .IX Item "-mrdrnd"
! .IP \fB\-mf16c\fR 4
  .IX Item "-mf16c"
! .IP \fB\-mfma\fR 4
  .IX Item "-mfma"
! .IP \fB\-mpconfig\fR 4
  .IX Item "-mpconfig"
! .IP \fB\-mwbnoinvd\fR 4
  .IX Item "-mwbnoinvd"
! .IP \fB\-mfma4\fR 4
  .IX Item "-mfma4"
! .IP \fB\-mprfchw\fR 4
  .IX Item "-mprfchw"
! .IP \fB\-mrdpid\fR 4
  .IX Item "-mrdpid"
! .IP \fB\-mprefetchwt1\fR 4
  .IX Item "-mprefetchwt1"
! .IP \fB\-mrdseed\fR 4
  .IX Item "-mrdseed"
! .IP \fB\-msgx\fR 4
  .IX Item "-msgx"
! .IP \fB\-mxop\fR 4
  .IX Item "-mxop"
! .IP \fB\-mlwp\fR 4
  .IX Item "-mlwp"
! .IP \fB\-m3dnow\fR 4
  .IX Item "-m3dnow"
! .IP \fB\-m3dnowa\fR 4
  .IX Item "-m3dnowa"
! .IP \fB\-mpopcnt\fR 4
  .IX Item "-mpopcnt"
! .IP \fB\-mabm\fR 4
  .IX Item "-mabm"
! .IP \fB\-madx\fR 4
  .IX Item "-madx"
! .IP \fB\-mbmi\fR 4
  .IX Item "-mbmi"
! .IP \fB\-mbmi2\fR 4
  .IX Item "-mbmi2"
! .IP \fB\-mlzcnt\fR 4
  .IX Item "-mlzcnt"
! .IP \fB\-mfxsr\fR 4
  .IX Item "-mfxsr"
! .IP \fB\-mxsave\fR 4
  .IX Item "-mxsave"
! .IP \fB\-mxsaveopt\fR 4
  .IX Item "-mxsaveopt"
! .IP \fB\-mxsavec\fR 4
  .IX Item "-mxsavec"
! .IP \fB\-mxsaves\fR 4
  .IX Item "-mxsaves"
! .IP \fB\-mrtm\fR 4
  .IX Item "-mrtm"
! .IP \fB\-mhle\fR 4
  .IX Item "-mhle"
! .IP \fB\-mtbm\fR 4
  .IX Item "-mtbm"
! .IP \fB\-mmwaitx\fR 4
  .IX Item "-mmwaitx"
! .IP \fB\-mclzero\fR 4
  .IX Item "-mclzero"
! .IP \fB\-mpku\fR 4
  .IX Item "-mpku"
! .IP \fB\-mavx512vbmi2\fR 4
  .IX Item "-mavx512vbmi2"
! .IP \fB\-mavx512bf16\fR 4
  .IX Item "-mavx512bf16"
! .IP \fB\-mavx512fp16\fR 4
  .IX Item "-mavx512fp16"
! .IP \fB\-mgfni\fR 4
  .IX Item "-mgfni"
! .IP \fB\-mvaes\fR 4
  .IX Item "-mvaes"
! .IP \fB\-mwaitpkg\fR 4
  .IX Item "-mwaitpkg"
! .IP \fB\-mvpclmulqdq\fR 4
  .IX Item "-mvpclmulqdq"
! .IP \fB\-mavx512bitalg\fR 4
  .IX Item "-mavx512bitalg"
! .IP \fB\-mmovdiri\fR 4
  .IX Item "-mmovdiri"
! .IP \fB\-mmovdir64b\fR 4
  .IX Item "-mmovdir64b"
! .IP \fB\-menqcmd\fR 4
  .IX Item "-menqcmd"
! .IP \fB\-muintr\fR 4
  .IX Item "-muintr"
! .IP \fB\-mtsxldtrk\fR 4
  .IX Item "-mtsxldtrk"
! .IP \fB\-mavx512vpopcntdq\fR 4
  .IX Item "-mavx512vpopcntdq"
! .IP \fB\-mavx512vp2intersect\fR 4
  .IX Item "-mavx512vp2intersect"
! .IP \fB\-mavx5124fmaps\fR 4
  .IX Item "-mavx5124fmaps"
! .IP \fB\-mavx512vnni\fR 4
  .IX Item "-mavx512vnni"
! .IP \fB\-mavxvnni\fR 4
  .IX Item "-mavxvnni"
! .IP \fB\-mavx5124vnniw\fR 4
  .IX Item "-mavx5124vnniw"
! .IP \fB\-mcldemote\fR 4
  .IX Item "-mcldemote"
! .IP \fB\-mserialize\fR 4
  .IX Item "-mserialize"
! .IP \fB\-mamx\-tile\fR 4
  .IX Item "-mamx-tile"
! .IP \fB\-mamx\-int8\fR 4
  .IX Item "-mamx-int8"
! .IP \fB\-mamx\-bf16\fR 4
  .IX Item "-mamx-bf16"
! .IP \fB\-mhreset\fR 4
  .IX Item "-mhreset"
! .IP \fB\-mkl\fR 4
  .IX Item "-mkl"
! .IP \fB\-mwidekl\fR 4
  .IX Item "-mwidekl"
! .IP \fB\-mavxifma\fR 4
  .IX Item "-mavxifma"
! .IP \fB\-mavxvnniint8\fR 4
  .IX Item "-mavxvnniint8"
! .IP \fB\-mavxneconvert\fR 4
  .IX Item "-mavxneconvert"
! .IP \fB\-mcmpccxadd\fR 4
  .IX Item "-mcmpccxadd"
! .IP \fB\-mamx\-fp16\fR 4
  .IX Item "-mamx-fp16"
! .IP \fB\-mprefetchi\fR 4
  .IX Item "-mprefetchi"
! .IP \fB\-mraoint\fR 4
  .IX Item "-mraoint"
! .IP \fB\-mamx\-complex\fR 4
  .IX Item "-mamx-complex"
! .IP \fB\-mavxvnniint16\fR 4
  .IX Item "-mavxvnniint16"
! .IP \fB\-msm3\fR 4
  .IX Item "-msm3"
! .IP \fB\-msha512\fR 4
  .IX Item "-msha512"
! .IP \fB\-msm4\fR 4
  .IX Item "-msm4"
! .IP \fB\-mapxf\fR 4
  .IX Item "-mapxf"
! .IP \fB\-musermsr\fR 4
  .IX Item "-musermsr"
! .IP \fB\-mavx10.1\fR 4
  .IX Item "-mavx10.1"
! .IP \fB\-mavx10.1\-256\fR 4
  .IX Item "-mavx10.1-256"
! .IP \fB\-mavx10.1\-512\fR 4
  .IX Item "-mavx10.1-512"
  .PD
! These switches enable the use of instructions in the MMX, SSE,
  AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
  AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG,
! WBNOINVD, FMA4, PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP,
! 3DNow!, enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
  XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
  GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B, AVX512BF16,
  ENQCMD, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE,
  UINTR, HRESET, AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512\-FP16,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AMX\-FP16, PREFETCHI, RAOINT,
! AMX\-COMPLEX, AVXVNNIINT16, SM3, SHA512, SM4, APX_F, USER_MSR, AVX10.1 or
! CLDEMOTE extended instruction sets.  Each has a corresponding \fB\-mno\-\fR
  option to disable use of these instructions.
  .Sp
! These extensions are also available as built\-in functions: see
! \&\fBx86 Built\-in Functions\fR, for details of the functions enabled and
  disabled by these switches.
  .Sp
! To generate SSE/SSE2 instructions automatically from floating\-point
  code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
  .Sp
! GCC depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
! generates new AVX instructions or AVX equivalence for all SSEx instructions
  when needed.
  .Sp
! These options enable GCC to use these extended instructions in
  generated code, even without \fB\-mfpmath=sse\fR.  Applications that
! perform run\-time CPU detection must compile separate files for each
  supported architecture, using the appropriate flags.  In particular,
! the file containing the CPU detection code should be compiled without
  these options.
! .IP \fB\-mdump\-tune\-features\fR 4
  .IX Item "-mdump-tune-features"
! This option instructs GCC to dump the names of the x86 performance 
  tuning features and default settings. The names can be used in 
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR.
! .IP \fB\-mtune\-ctrl=\fR\fIfeature\-list\fR 4
  .IX Item "-mtune-ctrl=feature-list"
  This option is used to do fine grain control of x86 code generation features.
! \&\fIfeature\-list\fR is a comma separated list of \fIfeature\fR names. See also
  \&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
  on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR is intended to be used by GCC
  developers. Using it may lead to code paths not covered by testing and can
  potentially result in compiler ICEs or runtime errors.
! .IP \fB\-mno\-default\fR 4
  .IX Item "-mno-default"
! This option instructs GCC to turn off all tunable features. See also 
! \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR and \fB\-mdump\-tune\-features\fR.
! .IP \fB\-mcld\fR 4
  .IX Item "-mcld"
! This option instructs GCC to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
  of functions that use string instructions.  String instructions depend on
! the DF flag to select between autoincrement or autodecrement mode.  While the
! ABI specifies the DF flag to be cleared on function entry, some operating
! systems violate this specification by not clearing the DF flag in their
! exception dispatchers.  The exception handler can be invoked with the DF flag
  set, which leads to wrong direction mode when string instructions are used.
  This option can be enabled by default on 32\-bit x86 targets by configuring
! GCC with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
  instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
  in this case.
! .IP \fB\-mvzeroupper\fR 4
  .IX Item "-mvzeroupper"
! This option instructs GCC to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
  before a transfer of control flow out of the function to minimize
! the AVX to SSE transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
  intrinsics.
! .IP \fB\-mprefer\-avx128\fR 4
  .IX Item "-mprefer-avx128"
! This option instructs GCC to use 128\-bit AVX instructions instead of
! 256\-bit AVX instructions in the auto\-vectorizer.
! .IP \fB\-mprefer\-vector\-width=\fR\fIopt\fR 4
  .IX Item "-mprefer-vector-width=opt"
! This option instructs GCC to use \fIopt\fR\-bit vector width in instructions
  instead of default on the selected platform.
! .IP \fB\-mpartial\-vector\-fp\-math\fR 4
  .IX Item "-mpartial-vector-fp-math"
! This option enables GCC to generate floating\-point operations that might
! affect the set of floating\-point status flags on partial vectors, where
! vector elements reside in the low part of the 128\-bit SSE register.  Unless
  \&\fB\-fno\-trapping\-math\fR is specified, the compiler guarantees correct
  behavior by sanitizing all input operands to have zeroes in the unused
! upper part of the vector register.  Note that by using built\-in functions
  or inline assembly with partial vector arguments, NaNs, denormal or invalid
  values can leak into the upper part of the vector, causing possible
  performance issues when \fB\-fno\-trapping\-math\fR is in effect.  These
  issues can be mitigated by manually sanitizing the upper part of the partial
  vector argument register or by using \fB\-mdaz\-ftz\fR to set
! denormals\-are\-zero (DAZ) flag in the MXCSR register.
  .Sp
  This option is enabled by default.
! .IP \fB\-mmove\-max=\fR\fIbits\fR 4
  .IX Item "-mmove-max=bits"
! This option instructs GCC to set the maximum number of bits can be
  moved from memory to memory efficiently to \fIbits\fR.  The valid
  \&\fIbits\fR are 128, 256 and 512.
! .IP \fB\-mstore\-max=\fR\fIbits\fR 4
  .IX Item "-mstore-max=bits"
! This option instructs GCC to set the maximum number of bits can be
  stored to memory efficiently to \fIbits\fR.  The valid \fIbits\fR are
  128, 256 and 512.
  .RS 4
! .IP \fBnone\fR 4
  .IX Item "none"
! No extra limitations applied to GCC other than defined by the selected platform.
! .IP \fB128\fR 4
  .IX Item "128"
  Prefer 128\-bit vector width for instructions.
! .IP \fB256\fR 4
  .IX Item "256"
  Prefer 256\-bit vector width for instructions.
! .IP \fB512\fR 4
  .IX Item "512"
  Prefer 512\-bit vector width for instructions.
  .RE
  .RS 4
  .RE
! .IP \fB\-mnoreturn\-no\-callee\-saved\-registers\fR 4
  .IX Item "-mnoreturn-no-callee-saved-registers"
  This option optimizes functions with \f(CW\*(C`noreturn\*(C'\fR attribute or
! \&\f(CW\*(C`_Noreturn\*(C'\fR specifier by not saving in the function prologue callee\-saved
  registers which are used in the function (except for the \f(CW\*(C`BP\*(C'\fR
  register).  This option can interfere with debugging of the caller of the
  \&\f(CW\*(C`noreturn\*(C'\fR function or any function further up in the call stack, so it
  is not enabled by default.
! .IP \fB\-mcx16\fR 4
  .IX Item "-mcx16"
! This option enables GCC to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions in 64\-bit
! code to implement compare\-and\-exchange operations on 16\-byte aligned 128\-bit
  objects.  This is useful for atomic updates of data structures exceeding one
  machine word in size.  The compiler uses this instruction to implement
  \&\fB_\|_sync Builtins\fR.  However, for \fB_\|_atomic Builtins\fR operating on
  128\-bit integers, a library call is always used.
! .IP \fB\-msahf\fR 4
  .IX Item "-msahf"
  This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
  Early Intel Pentium 4 CPUs with Intel 64 support,
  prior to the introduction of Pentium 4 G1 step in December 2005,
  lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
! which are supported by AMD64.
  These are load and store instructions, respectively, for certain status flags.
  In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
! \&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built\-in functions;
  see \fBOther Builtins\fR for details.
! .IP \fB\-mmovbe\fR 4
  .IX Item "-mmovbe"
  This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to optimize
  byte swapping of four and eight byte entities.
! .IP \fB\-mshstk\fR 4
  .IX Item "-mshstk"
! The \fB\-mshstk\fR option enables shadow stack built\-in functions
! from x86 Control\-flow Enforcement Technology (CET).
! .IP \fB\-mcrc32\fR 4
  .IX Item "-mcrc32"
! This option enables built\-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
  \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
  \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
! .IP \fB\-mmwait\fR 4
  .IX Item "-mmwait"
! This option enables built\-in functions \f(CW\*(C`_\|_builtin_ia32_monitor\*(C'\fR,
  and \f(CW\*(C`_\|_builtin_ia32_mwait\*(C'\fR to generate the \f(CW\*(C`monitor\*(C'\fR and
  \&\f(CW\*(C`mwait\*(C'\fR machine instructions.
! .IP \fB\-mrecip\fR 4
  .IX Item "-mrecip"
  This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
  (and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
! with an additional Newton\-Raphson step
  to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
  (and their vectorized
! variants) for single\-precision floating\-point arguments.  These instructions
  are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
  together with \fB\-ffinite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
  Note that while the throughput of the sequence is higher than the throughput
! of the non\-reciprocal instruction, the precision of the sequence can be
  decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
  .Sp
! Note that GCC implements \f(CW\*(C`1.0f/sqrtf(\fR\f(CIx\fR\f(CW)\*(C'\fR in terms of \f(CW\*(C`RSQRTSS\*(C'\fR
  (or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
! combination), and doesn\*(Aqt need \fB\-mrecip\fR.
  .Sp
! Also note that GCC emits the above sequence with additional Newton\-Raphson step
! for vectorized single\-float division and vectorized \f(CWsqrtf(\fR\f(CIx\fR\f(CW)\fR
  already with \fB\-ffast\-math\fR (or the above option combination), and
! doesn\*(Aqt need \fB\-mrecip\fR.
! .IP \fB\-mrecip=\fR\fIopt\fR 4
  .IX Item "-mrecip=opt"
  This option controls which reciprocal estimate instructions
! may be used.  \fIopt\fR is a comma\-separated list of options, which may
  be preceded by a \fB!\fR to invert the option:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Enable all estimate instructions.
! .IP \fBdefault\fR 4
  .IX Item "default"
  Enable the default instructions, equivalent to \fB\-mrecip\fR.
! .IP \fBnone\fR 4
  .IX Item "none"
  Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
! .IP \fBdiv\fR 4
  .IX Item "div"
  Enable the approximation for scalar division.
! .IP \fBvec\-div\fR 4
  .IX Item "vec-div"
  Enable the approximation for vectorized division.
! .IP \fBsqrt\fR 4
  .IX Item "sqrt"
  Enable the approximation for scalar square root.
! .IP \fBvec\-sqrt\fR 4
  .IX Item "vec-sqrt"
  Enable the approximation for vectorized square root.
  .RE
*************** Enable the approximation for vectorized
*** 34762,34778 ****
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for square root.
  .RE
! .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
  .IX Item "-mveclibabi=type"
! Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
  external library.  Supported values for \fItype\fR are \fBsvml\fR 
  for the Intel short
! vector math library and \fBacml\fR for the \s-1AMD\s0 math core library.
  To use this option, both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an \s-1SVML\s0 or \s-1ACML\s0 
! ABI-compatible library must be specified at link time.
  .Sp
! \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
  \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
  \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
  \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
--- 34696,34712 ----
  So, for example, \fB\-mrecip=all,!sqrt\fR enables
  all of the reciprocal approximations, except for square root.
  .RE
! .IP \fB\-mveclibabi=\fR\fItype\fR 4
  .IX Item "-mveclibabi=type"
! Specifies the ABI type to use for vectorizing intrinsics using an
  external library.  Supported values for \fItype\fR are \fBsvml\fR 
  for the Intel short
! vector math library and \fBacml\fR for the AMD math core library.
  To use this option, both \fB\-ftree\-vectorize\fR and
! \&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an SVML or ACML 
! ABI\-compatible library must be specified at link time.
  .Sp
! GCC currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
  \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
  \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
  \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
*************** function type when \fB\-mveclibabi=svml\
*** 34788,34874 ****
  \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
  \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
  when \fB\-mveclibabi=acml\fR is used.
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
  Generate code for the specified calling convention.  Permissible values
! are \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems, and
! \&\fBms\fR for the Microsoft \s-1ABI.\s0  The default is to use the Microsoft
! \&\s-1ABI\s0 when targeting Microsoft Windows and the SysV \s-1ABI\s0 on all other systems.
  You can control this behavior for specific functions by
  using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
! .IP "\fB\-mforce\-indirect\-call\fR" 4
  .IX Item "-mforce-indirect-call"
  Force all calls to functions to be indirect. This is useful
  when using Intel Processor Trace where it generates more precise timing
  information for function calls.
! .IP "\fB\-mmanual\-endbr\fR" 4
  .IX Item "-mmanual-endbr"
! Insert \s-1ENDBR\s0 instruction at function entry only via the \f(CW\*(C`cf_check\*(C'\fR
  function attribute. This is useful when used with the option
! \&\fB\-fcf\-protection=branch\fR to control \s-1ENDBR\s0 insertion at the
  function entry.
! .IP "\fB\-mcet\-switch\fR" 4
  .IX Item "-mcet-switch"
! By default, \s-1CET\s0 instrumentation is turned off on switch statements that
  use a jump table and indirect branch track is disabled.  Since jump
! tables are stored in read-only memory, this does not result in a direct
! loss of hardening.  But if the jump table index is attacker-controlled,
! the indirect jump may not be constrained by \s-1CET.\s0  This option turns on
! \&\s-1CET\s0 instrumentation to enable indirect branch track for switch statements
  with jump tables which leads to the jump targets reachable via any indirect
  jumps.
! .IP "\fB\-mcall\-ms2sysv\-xlogues\fR" 4
  .IX Item "-mcall-ms2sysv-xlogues"
! Due to differences in 64\-bit ABIs, any Microsoft \s-1ABI\s0 function that calls a
! System V \s-1ABI\s0 function must consider \s-1RSI, RDI\s0 and \s-1XMM6\-15\s0 as clobbered.  By
  default, the code for saving and restoring these registers is emitted inline,
  resulting in fairly lengthy prologues and epilogues.  Using
  \&\fB\-mcall\-ms2sysv\-xlogues\fR emits prologues and epilogues that
  use stubs in the static portion of libgcc to perform these saves and restores,
  thus reducing function size at the cost of a few extra instructions.
! .IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
  .IX Item "-mtls-dialect=type"
! Generate code to access thread-local storage using the \fBgnu\fR or
  \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
! \&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
  requirements that cannot be satisfied on all systems.
! .IP "\fB\-mpush\-args\fR" 4
  .IX Item "-mpush-args"
  .PD 0
! .IP "\fB\-mno\-push\-args\fR" 4
  .IX Item "-mno-push-args"
  .PD
! Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
! and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
  by default.  In some cases disabling it may improve performance because of
  improved scheduling and reduced dependencies.
! .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
  .IX Item "-maccumulate-outgoing-args"
  If enabled, the maximum amount of space required for outgoing arguments is
  computed in the function prologue.  This is faster on most modern CPUs
  because of reduced dependencies, improved scheduling and reduced stack usage
  when the preferred stack boundary is not equal to 2.  The drawback is a notable
  increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
! .IP "\fB\-mthreads\fR" 4
  .IX Item "-mthreads"
! Support thread-safe exception handling on MinGW.  Programs that rely
! on thread-safe exception handling must compile and link all code with the
  \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
  \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
! \&\fB\-lmingwthrd\fR which cleans up per-thread exception-handling data.
! .IP "\fB\-mms\-bitfields\fR" 4
  .IX Item "-mms-bitfields"
  .PD 0
! .IP "\fB\-mno\-ms\-bitfields\fR" 4
  .IX Item "-mno-ms-bitfields"
  .PD
! Enable/disable bit-field layout compatible with the native Microsoft
  Windows compiler.
  .Sp
! If \f(CW\*(C`packed\*(C'\fR is used on a structure, or if bit-fields are used,
! it may be that the Microsoft \s-1ABI\s0 lays out the structure differently
! than the way \s-1GCC\s0 normally does.  Particularly when moving packed
! data between functions compiled with \s-1GCC\s0 and the native Microsoft compiler
  (either via function call or as data in a file), it may be necessary to access
  either format.
  .Sp
--- 34722,34808 ----
  \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
  \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
  when \fB\-mveclibabi=acml\fR is used.
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
  Generate code for the specified calling convention.  Permissible values
! are \fBsysv\fR for the ABI used on GNU/Linux and other systems, and
! \&\fBms\fR for the Microsoft ABI.  The default is to use the Microsoft
! ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
  You can control this behavior for specific functions by
  using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
! .IP \fB\-mforce\-indirect\-call\fR 4
  .IX Item "-mforce-indirect-call"
  Force all calls to functions to be indirect. This is useful
  when using Intel Processor Trace where it generates more precise timing
  information for function calls.
! .IP \fB\-mmanual\-endbr\fR 4
  .IX Item "-mmanual-endbr"
! Insert ENDBR instruction at function entry only via the \f(CW\*(C`cf_check\*(C'\fR
  function attribute. This is useful when used with the option
! \&\fB\-fcf\-protection=branch\fR to control ENDBR insertion at the
  function entry.
! .IP \fB\-mcet\-switch\fR 4
  .IX Item "-mcet-switch"
! By default, CET instrumentation is turned off on switch statements that
  use a jump table and indirect branch track is disabled.  Since jump
! tables are stored in read\-only memory, this does not result in a direct
! loss of hardening.  But if the jump table index is attacker\-controlled,
! the indirect jump may not be constrained by CET.  This option turns on
! CET instrumentation to enable indirect branch track for switch statements
  with jump tables which leads to the jump targets reachable via any indirect
  jumps.
! .IP \fB\-mcall\-ms2sysv\-xlogues\fR 4
  .IX Item "-mcall-ms2sysv-xlogues"
! Due to differences in 64\-bit ABIs, any Microsoft ABI function that calls a
! System V ABI function must consider RSI, RDI and XMM6\-15 as clobbered.  By
  default, the code for saving and restoring these registers is emitted inline,
  resulting in fairly lengthy prologues and epilogues.  Using
  \&\fB\-mcall\-ms2sysv\-xlogues\fR emits prologues and epilogues that
  use stubs in the static portion of libgcc to perform these saves and restores,
  thus reducing function size at the cost of a few extra instructions.
! .IP \fB\-mtls\-dialect=\fR\fItype\fR 4
  .IX Item "-mtls-dialect=type"
! Generate code to access thread\-local storage using the \fBgnu\fR or
  \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
! \&\fBgnu2\fR is more efficient, but it may add compile\- and run\-time
  requirements that cannot be satisfied on all systems.
! .IP \fB\-mpush\-args\fR 4
  .IX Item "-mpush-args"
  .PD 0
! .IP \fB\-mno\-push\-args\fR 4
  .IX Item "-mno-push-args"
  .PD
! Use PUSH operations to store outgoing parameters.  This method is shorter
! and usually equally fast as method using SUB/MOV operations and is enabled
  by default.  In some cases disabling it may improve performance because of
  improved scheduling and reduced dependencies.
! .IP \fB\-maccumulate\-outgoing\-args\fR 4
  .IX Item "-maccumulate-outgoing-args"
  If enabled, the maximum amount of space required for outgoing arguments is
  computed in the function prologue.  This is faster on most modern CPUs
  because of reduced dependencies, improved scheduling and reduced stack usage
  when the preferred stack boundary is not equal to 2.  The drawback is a notable
  increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
! .IP \fB\-mthreads\fR 4
  .IX Item "-mthreads"
! Support thread\-safe exception handling on MinGW.  Programs that rely
! on thread\-safe exception handling must compile and link all code with the
  \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
  \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
! \&\fB\-lmingwthrd\fR which cleans up per\-thread exception\-handling data.
! .IP \fB\-mms\-bitfields\fR 4
  .IX Item "-mms-bitfields"
  .PD 0
! .IP \fB\-mno\-ms\-bitfields\fR 4
  .IX Item "-mno-ms-bitfields"
  .PD
! Enable/disable bit\-field layout compatible with the native Microsoft
  Windows compiler.
  .Sp
! If \f(CW\*(C`packed\*(C'\fR is used on a structure, or if bit\-fields are used,
! it may be that the Microsoft ABI lays out the structure differently
! than the way GCC normally does.  Particularly when moving packed
! data between functions compiled with GCC and the native Microsoft compiler
  (either via function call or as data in a file), it may be necessary to access
  either format.
  .Sp
*************** or type attributes.  For more informatio
*** 34878,34886 ****
  and \fBx86 Type Attributes\fR.
  .Sp
  The Microsoft structure layout algorithm is fairly simple with the exception
! of the bit-field packing.  
! The padding and alignment of members of structures and whether a bit-field 
! can straddle a storage-unit boundary are determine by these rules:
  .RS 4
  .IP "1. Structure members are stored sequentially in the order in which they are" 4
  .IX Item "1. Structure members are stored sequentially in the order in which they are"
--- 34812,34820 ----
  and \fBx86 Type Attributes\fR.
  .Sp
  The Microsoft structure layout algorithm is fairly simple with the exception
! of the bit\-field packing.  
! The padding and alignment of members of structures and whether a bit\-field 
! can straddle a storage\-unit boundary are determine by these rules:
  .RS 4
  .IP "1. Structure members are stored sequentially in the order in which they are" 4
  .IX Item "1. Structure members are stored sequentially in the order in which they are"
*************** Every object is allocated an offset so t
*** 34898,34915 ****
  .Vb 1
  \&        offset % alignment_requirement == 0
  .Ve
! .IP "3. Adjacent bit-fields are packed into the same 1\-, 2\-, or 4\-byte allocation" 4
  .IX Item "3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation"
! unit if the integral types are the same size and if the next bit-field fits
  into the current allocation unit without crossing the boundary imposed by the
! common alignment requirements of the bit-fields.
  .RE
  .RS 4
  .Sp
! \&\s-1MSVC\s0 interprets zero-length bit-fields in the following ways:
! .IP "1. If a zero-length bit-field is inserted between two bit-fields that" 4
  .IX Item "1. If a zero-length bit-field is inserted between two bit-fields that"
! are normally coalesced, the bit-fields are not coalesced.
  .Sp
  For example:
  .Sp
--- 34832,34849 ----
  .Vb 1
  \&        offset % alignment_requirement == 0
  .Ve
! .IP "3. Adjacent bit\-fields are packed into the same 1\-, 2\-, or 4\-byte allocation" 4
  .IX Item "3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation"
! unit if the integral types are the same size and if the next bit\-field fits
  into the current allocation unit without crossing the boundary imposed by the
! common alignment requirements of the bit\-fields.
  .RE
  .RS 4
  .Sp
! MSVC interprets zero\-length bit\-fields in the following ways:
! .IP "1. If a zero\-length bit\-field is inserted between two bit\-fields that" 4
  .IX Item "1. If a zero-length bit-field is inserted between two bit-fields that"
! are normally coalesced, the bit\-fields are not coalesced.
  .Sp
  For example:
  .Sp
*************** For example:
*** 34922,34934 ****
  \&         } t1;
  .Ve
  .Sp
! The size of \f(CW\*(C`t1\*(C'\fR is 8 bytes with the zero-length bit-field.  If the
! zero-length bit-field were removed, \f(CW\*(C`t1\*(C'\fR's size would be 4 bytes.
! .ie n .IP "2. If a zero-length bit-field is inserted after a bit-field, ""foo"", and the" 4
! .el .IP "2. If a zero-length bit-field is inserted after a bit-field, \f(CWfoo\fR, and the" 4
  .IX Item "2. If a zero-length bit-field is inserted after a bit-field, foo, and the"
! alignment of the zero-length bit-field is greater than the member that follows it,
! \&\f(CW\*(C`bar\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is aligned as the type of the zero-length bit-field.
  .Sp
  For example:
  .Sp
--- 34856,34868 ----
  \&         } t1;
  .Ve
  .Sp
! The size of \f(CW\*(C`t1\*(C'\fR is 8 bytes with the zero\-length bit\-field.  If the
! zero\-length bit\-field were removed, \f(CW\*(C`t1\*(C'\fR\*(Aqs size would be 4 bytes.
! .ie n .IP "2. If a zero\-length bit\-field is inserted after a bit\-field, ""foo"", and the" 4
! .el .IP "2. If a zero\-length bit\-field is inserted after a bit\-field, \f(CWfoo\fR, and the" 4
  .IX Item "2. If a zero-length bit-field is inserted after a bit-field, foo, and the"
! alignment of the zero\-length bit\-field is greater than the member that follows it,
! \&\f(CW\*(C`bar\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is aligned as the type of the zero\-length bit\-field.
  .Sp
  For example:
  .Sp
*************** For example:
*** 34949,34966 ****
  .Ve
  .Sp
  For \f(CW\*(C`t2\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is placed at offset 2, rather than offset 1.
! Accordingly, the size of \f(CW\*(C`t2\*(C'\fR is 4.  For \f(CW\*(C`t3\*(C'\fR, the zero-length
! bit-field does not affect the alignment of \f(CW\*(C`bar\*(C'\fR or, as a result, the size
  of the structure.
  .Sp
  Taking this into account, it is important to note the following:
  .RS 4
! .IP "1. If a zero-length bit-field follows a normal bit-field, the type of the" 4
  .IX Item "1. If a zero-length bit-field follows a normal bit-field, the type of the"
! zero-length bit-field may affect the alignment of the structure as whole. For
! example, \f(CW\*(C`t2\*(C'\fR has a size of 4 bytes, since the zero-length bit-field follows a
! normal bit-field, and is of type short.
! .IP "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may" 4
  .IX Item "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may"
  still affect the alignment of the structure:
  .Sp
--- 34883,34900 ----
  .Ve
  .Sp
  For \f(CW\*(C`t2\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is placed at offset 2, rather than offset 1.
! Accordingly, the size of \f(CW\*(C`t2\*(C'\fR is 4.  For \f(CW\*(C`t3\*(C'\fR, the zero\-length
! bit\-field does not affect the alignment of \f(CW\*(C`bar\*(C'\fR or, as a result, the size
  of the structure.
  .Sp
  Taking this into account, it is important to note the following:
  .RS 4
! .IP "1. If a zero\-length bit\-field follows a normal bit\-field, the type of the" 4
  .IX Item "1. If a zero-length bit-field follows a normal bit-field, the type of the"
! zero\-length bit\-field may affect the alignment of the structure as whole. For
! example, \f(CW\*(C`t2\*(C'\fR has a size of 4 bytes, since the zero\-length bit\-field follows a
! normal bit\-field, and is of type short.
! .IP "2. Even if a zero\-length bit\-field is not followed by a normal bit\-field, it may" 4
  .IX Item "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may"
  still affect the alignment of the structure:
  .Sp
*************** Here, \f(CW\*(C`t4\*(C'\fR takes up 4 by
*** 34976,34982 ****
  .RE
  .RS 4
  .RE
! .IP "3. Zero-length bit-fields following non-bit-field members are ignored:" 4
  .IX Item "3. Zero-length bit-fields following non-bit-field members are ignored:"
  .Vb 6
  \&        struct
--- 34910,34916 ----
  .RE
  .RS 4
  .RE
! .IP "3. Zero\-length bit\-fields following non\-bit\-field members are ignored:" 4
  .IX Item "3. Zero-length bit-fields following non-bit-field members are ignored:"
  .Vb 6
  \&        struct
*************** Here, \f(CW\*(C`t5\*(C'\fR takes up 2 by
*** 34991,35180 ****
  .RE
  .RS 4
  .RE
! .IP "\fB\-mno\-align\-stringops\fR" 4
  .IX Item "-mno-align-stringops"
  Do not align the destination of inlined string operations.  This switch reduces
  code size and improves performance in case the destination is already aligned,
! but \s-1GCC\s0 doesn't know about it.
! .IP "\fB\-minline\-all\-stringops\fR" 4
  .IX Item "-minline-all-stringops"
! By default \s-1GCC\s0 inlines string operations only when the destination is 
  known to be aligned to least a 4\-byte boundary.  
  This enables more inlining and increases code
  size, but may improve performance of code that depends on fast
  \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memset\*(C'\fR for short lengths.
  The option enables inline expansion of \f(CW\*(C`strlen\*(C'\fR for all
  pointer alignments.
! .IP "\fB\-minline\-stringops\-dynamically\fR" 4
  .IX Item "-minline-stringops-dynamically"
! For string operations of unknown size, use run-time checks with
  inline code for small blocks and a library call for large blocks.
! .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
  .IX Item "-mstringop-strategy=alg"
  Override the internal decision heuristic for the particular algorithm to use
  for inlining string operations.  The allowed values for \fIalg\fR are:
  .RS 4
! .IP "\fBrep_byte\fR" 4
  .IX Item "rep_byte"
  .PD 0
! .IP "\fBrep_4byte\fR" 4
  .IX Item "rep_4byte"
! .IP "\fBrep_8byte\fR" 4
  .IX Item "rep_8byte"
  .PD
  Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
! .IP "\fBbyte_loop\fR" 4
  .IX Item "byte_loop"
  .PD 0
! .IP "\fBloop\fR" 4
  .IX Item "loop"
! .IP "\fBunrolled_loop\fR" 4
  .IX Item "unrolled_loop"
  .PD
  Expand into an inline loop.
! .IP "\fBlibcall\fR" 4
  .IX Item "libcall"
  Always use a library call.
  .RE
  .RS 4
  .RE
! .IP "\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR" 4
  .IX Item "-mmemcpy-strategy=strategy"
  Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
  should be inlined and what inline algorithm to use when the expected size
  of the copy operation is known. \fIstrategy\fR 
! is a comma-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
  \&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
  the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
! triplet, the \fImax_size\fR must be \f(CW\*(C`\-1\*(C'\fR. The \fImax_size\fR of the triplets
  in the list must be specified in increasing order.  The minimal byte size for 
! \&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\f(CImax_size\f(CW + 1\*(C'\fR of the 
  preceding range.
! .IP "\fB\-mmemset\-strategy=\fR\fIstrategy\fR" 4
  .IX Item "-mmemset-strategy=strategy"
  The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
  \&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
! .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
  .IX Item "-momit-leaf-frame-pointer"
! Don't keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up, and restore frame pointers and
  makes an extra register available in leaf functions.  The option
  \&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
  which might make debugging harder.
! .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
  .IX Item "-mtls-direct-seg-refs"
  .PD 0
! .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
  .IX Item "-mno-tls-direct-seg-refs"
  .PD
! Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
! \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
  or whether the thread base pointer must be added.  Whether or not this
  is valid depends on the operating system, and whether it maps the
! segment to cover the entire \s-1TLS\s0 area.
  .Sp
! For systems that use the \s-1GNU C\s0 Library, the default is on.
! .IP "\fB\-msse2avx\fR" 4
  .IX Item "-msse2avx"
  .PD 0
! .IP "\fB\-mno\-sse2avx\fR" 4
  .IX Item "-mno-sse2avx"
  .PD
! Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
  prefix.  The option \fB\-mavx\fR turns this on by default.
! .IP "\fB\-mfentry\fR" 4
  .IX Item "-mfentry"
  .PD 0
! .IP "\fB\-mno\-fentry\fR" 4
  .IX Item "-mno-fentry"
  .PD
  If profiling is active (\fB\-pg\fR), put the profiling
  counter call before the prologue.
  Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
! isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
! .IP "\fB\-mrecord\-mcount\fR" 4
  .IX Item "-mrecord-mcount"
  .PD 0
! .IP "\fB\-mno\-record\-mcount\fR" 4
  .IX Item "-mno-record-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
  that contains pointers to each profiling call. This is useful for
  automatically patching and out calls.
! .IP "\fB\-mnop\-mcount\fR" 4
  .IX Item "-mnop-mcount"
  .PD 0
! .IP "\fB\-mno\-nop\-mcount\fR" 4
  .IX Item "-mno-nop-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate the calls to
  the profiling functions as NOPs. This is useful when they
  should be patched in later dynamically. This is likely only
  useful together with \fB\-mrecord\-mcount\fR.
! .IP "\fB\-minstrument\-return=\fR\fItype\fR" 4
  .IX Item "-minstrument-return=type"
  Instrument function exit in \-pg \-mfentry instrumented functions with
  call to specified function. This only instruments true returns ending
  with ret, but not sibling calls ending with jump. Valid types
  are \fInone\fR to not instrument, \fIcall\fR to generate a call to _\|_return_\|_,
  or \fInop5\fR to generate a 5 byte nop.
! .IP "\fB\-mrecord\-return\fR" 4
  .IX Item "-mrecord-return"
  .PD 0
! .IP "\fB\-mno\-record\-return\fR" 4
  .IX Item "-mno-record-return"
  .PD
  Generate a _\|_return_loc section pointing to all return instrumentation code.
! .IP "\fB\-mfentry\-name=\fR\fIname\fR" 4
  .IX Item "-mfentry-name=name"
  Set name of _\|_fentry_\|_ symbol called at function entry for \-pg \-mfentry functions.
! .IP "\fB\-mfentry\-section=\fR\fIname\fR" 4
  .IX Item "-mfentry-section=name"
  Set name of section to record \-mrecord\-mcount calls (default _\|_mcount_loc).
! .IP "\fB\-mskip\-rax\-setup\fR" 4
  .IX Item "-mskip-rax-setup"
  .PD 0
! .IP "\fB\-mno\-skip\-rax\-setup\fR" 4
  .IX Item "-mno-skip-rax-setup"
  .PD
! When generating code for the x86\-64 architecture with \s-1SSE\s0 extensions
! disabled, \fB\-mskip\-rax\-setup\fR can be used to skip setting up \s-1RAX\s0
  register when there are no variable arguments passed in vector registers.
  .Sp
! \&\fBWarning:\fR Since \s-1RAX\s0 register is used to avoid unnecessarily
  saving vector registers on stack when passing variable arguments, the
  impacts of this option are callees may waste some stack space,
! misbehave or jump to a random location.  \s-1GCC 4.4\s0 or newer don't have
! those issues, regardless the \s-1RAX\s0 register value.
! .IP "\fB\-m8bit\-idiv\fR" 4
  .IX Item "-m8bit-idiv"
  .PD 0
! .IP "\fB\-mno\-8bit\-idiv\fR" 4
  .IX Item "-mno-8bit-idiv"
  .PD
  On some processors, like Intel Atom, 8\-bit unsigned integer divide is
  much faster than 32\-bit/64\-bit integer divide.  This option generates a
! run-time check.  If both dividend and divisor are within range of 0
  to 255, 8\-bit unsigned integer divide is used instead of
  32\-bit/64\-bit integer divide.
! .IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
  .IX Item "-mavx256-split-unaligned-load"
  .PD 0
! .IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
  .IX Item "-mavx256-split-unaligned-store"
  .PD
! Split 32\-byte \s-1AVX\s0 unaligned load and store.
! .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
! canary in the \s-1TLS\s0 block (the default).  This option has effect only when
  \&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
  .Sp
  With the latter choice the options
--- 34925,35114 ----
  .RE
  .RS 4
  .RE
! .IP \fB\-mno\-align\-stringops\fR 4
  .IX Item "-mno-align-stringops"
  Do not align the destination of inlined string operations.  This switch reduces
  code size and improves performance in case the destination is already aligned,
! but GCC doesn\*(Aqt know about it.
! .IP \fB\-minline\-all\-stringops\fR 4
  .IX Item "-minline-all-stringops"
! By default GCC inlines string operations only when the destination is 
  known to be aligned to least a 4\-byte boundary.  
  This enables more inlining and increases code
  size, but may improve performance of code that depends on fast
  \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memset\*(C'\fR for short lengths.
  The option enables inline expansion of \f(CW\*(C`strlen\*(C'\fR for all
  pointer alignments.
! .IP \fB\-minline\-stringops\-dynamically\fR 4
  .IX Item "-minline-stringops-dynamically"
! For string operations of unknown size, use run\-time checks with
  inline code for small blocks and a library call for large blocks.
! .IP \fB\-mstringop\-strategy=\fR\fIalg\fR 4
  .IX Item "-mstringop-strategy=alg"
  Override the internal decision heuristic for the particular algorithm to use
  for inlining string operations.  The allowed values for \fIalg\fR are:
  .RS 4
! .IP \fBrep_byte\fR 4
  .IX Item "rep_byte"
  .PD 0
! .IP \fBrep_4byte\fR 4
  .IX Item "rep_4byte"
! .IP \fBrep_8byte\fR 4
  .IX Item "rep_8byte"
  .PD
  Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
! .IP \fBbyte_loop\fR 4
  .IX Item "byte_loop"
  .PD 0
! .IP \fBloop\fR 4
  .IX Item "loop"
! .IP \fBunrolled_loop\fR 4
  .IX Item "unrolled_loop"
  .PD
  Expand into an inline loop.
! .IP \fBlibcall\fR 4
  .IX Item "libcall"
  Always use a library call.
  .RE
  .RS 4
  .RE
! .IP \fB\-mmemcpy\-strategy=\fR\fIstrategy\fR 4
  .IX Item "-mmemcpy-strategy=strategy"
  Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
  should be inlined and what inline algorithm to use when the expected size
  of the copy operation is known. \fIstrategy\fR 
! is a comma\-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
  \&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
  the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
! triplet, the \fImax_size\fR must be \f(CW\-1\fR. The \fImax_size\fR of the triplets
  in the list must be specified in increasing order.  The minimal byte size for 
! \&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\fR\f(CImax_size\fR\f(CW + 1\*(C'\fR of the 
  preceding range.
! .IP \fB\-mmemset\-strategy=\fR\fIstrategy\fR 4
  .IX Item "-mmemset-strategy=strategy"
  The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
  \&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
! .IP \fB\-momit\-leaf\-frame\-pointer\fR 4
  .IX Item "-momit-leaf-frame-pointer"
! Don\*(Aqt keep the frame pointer in a register for leaf functions.  This
  avoids the instructions to save, set up, and restore frame pointers and
  makes an extra register available in leaf functions.  The option
  \&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
  which might make debugging harder.
! .IP \fB\-mtls\-direct\-seg\-refs\fR 4
  .IX Item "-mtls-direct-seg-refs"
  .PD 0
! .IP \fB\-mno\-tls\-direct\-seg\-refs\fR 4
  .IX Item "-mno-tls-direct-seg-refs"
  .PD
! Controls whether TLS variables may be accessed with offsets from the
! TLS segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
  or whether the thread base pointer must be added.  Whether or not this
  is valid depends on the operating system, and whether it maps the
! segment to cover the entire TLS area.
  .Sp
! For systems that use the GNU C Library, the default is on.
! .IP \fB\-msse2avx\fR 4
  .IX Item "-msse2avx"
  .PD 0
! .IP \fB\-mno\-sse2avx\fR 4
  .IX Item "-mno-sse2avx"
  .PD
! Specify that the assembler should encode SSE instructions with VEX
  prefix.  The option \fB\-mavx\fR turns this on by default.
! .IP \fB\-mfentry\fR 4
  .IX Item "-mfentry"
  .PD 0
! .IP \fB\-mno\-fentry\fR 4
  .IX Item "-mno-fentry"
  .PD
  If profiling is active (\fB\-pg\fR), put the profiling
  counter call before the prologue.
  Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
! isn\*(Aqt possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
! .IP \fB\-mrecord\-mcount\fR 4
  .IX Item "-mrecord-mcount"
  .PD 0
! .IP \fB\-mno\-record\-mcount\fR 4
  .IX Item "-mno-record-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
  that contains pointers to each profiling call. This is useful for
  automatically patching and out calls.
! .IP \fB\-mnop\-mcount\fR 4
  .IX Item "-mnop-mcount"
  .PD 0
! .IP \fB\-mno\-nop\-mcount\fR 4
  .IX Item "-mno-nop-mcount"
  .PD
  If profiling is active (\fB\-pg\fR), generate the calls to
  the profiling functions as NOPs. This is useful when they
  should be patched in later dynamically. This is likely only
  useful together with \fB\-mrecord\-mcount\fR.
! .IP \fB\-minstrument\-return=\fR\fItype\fR 4
  .IX Item "-minstrument-return=type"
  Instrument function exit in \-pg \-mfentry instrumented functions with
  call to specified function. This only instruments true returns ending
  with ret, but not sibling calls ending with jump. Valid types
  are \fInone\fR to not instrument, \fIcall\fR to generate a call to _\|_return_\|_,
  or \fInop5\fR to generate a 5 byte nop.
! .IP \fB\-mrecord\-return\fR 4
  .IX Item "-mrecord-return"
  .PD 0
! .IP \fB\-mno\-record\-return\fR 4
  .IX Item "-mno-record-return"
  .PD
  Generate a _\|_return_loc section pointing to all return instrumentation code.
! .IP \fB\-mfentry\-name=\fR\fIname\fR 4
  .IX Item "-mfentry-name=name"
  Set name of _\|_fentry_\|_ symbol called at function entry for \-pg \-mfentry functions.
! .IP \fB\-mfentry\-section=\fR\fIname\fR 4
  .IX Item "-mfentry-section=name"
  Set name of section to record \-mrecord\-mcount calls (default _\|_mcount_loc).
! .IP \fB\-mskip\-rax\-setup\fR 4
  .IX Item "-mskip-rax-setup"
  .PD 0
! .IP \fB\-mno\-skip\-rax\-setup\fR 4
  .IX Item "-mno-skip-rax-setup"
  .PD
! When generating code for the x86\-64 architecture with SSE extensions
! disabled, \fB\-mskip\-rax\-setup\fR can be used to skip setting up RAX
  register when there are no variable arguments passed in vector registers.
  .Sp
! \&\fBWarning:\fR Since RAX register is used to avoid unnecessarily
  saving vector registers on stack when passing variable arguments, the
  impacts of this option are callees may waste some stack space,
! misbehave or jump to a random location.  GCC 4.4 or newer don\*(Aqt have
! those issues, regardless the RAX register value.
! .IP \fB\-m8bit\-idiv\fR 4
  .IX Item "-m8bit-idiv"
  .PD 0
! .IP \fB\-mno\-8bit\-idiv\fR 4
  .IX Item "-mno-8bit-idiv"
  .PD
  On some processors, like Intel Atom, 8\-bit unsigned integer divide is
  much faster than 32\-bit/64\-bit integer divide.  This option generates a
! run\-time check.  If both dividend and divisor are within range of 0
  to 255, 8\-bit unsigned integer divide is used instead of
  32\-bit/64\-bit integer divide.
! .IP \fB\-mavx256\-split\-unaligned\-load\fR 4
  .IX Item "-mavx256-split-unaligned-load"
  .PD 0
! .IP \fB\-mavx256\-split\-unaligned\-store\fR 4
  .IX Item "-mavx256-split-unaligned-store"
  .PD
! Split 32\-byte AVX unaligned load and store.
! .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4
  .IX Item "-mstack-protector-guard=guard"
  .PD 0
! .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4
  .IX Item "-mstack-protector-guard-reg=reg"
! .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4
  .IX Item "-mstack-protector-guard-offset=offset"
  .PD
  Generate stack protection code using canary at \fIguard\fR.  Supported
! locations are \fBglobal\fR for global canary or \fBtls\fR for per\-thread
! canary in the TLS block (the default).  This option has effect only when
  \&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
  .Sp
  With the latter choice the options
*************** With the latter choice the options
*** 35182,35207 ****
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which segment register (\f(CW%fs\fR or \f(CW%gs\fR) to use as base register
  for reading the canary, and from what offset from that base register.
! The default for those is as specified in the relevant \s-1ABI.\s0
! .IP "\fB\-mgeneral\-regs\-only\fR" 4
  .IX Item "-mgeneral-regs-only"
! Generate code that uses only the general-purpose registers.  This
! prevents the compiler from using floating-point, vector, mask and bound
  registers.
! .IP "\fB\-mrelax\-cmpxchg\-loop\fR" 4
  .IX Item "-mrelax-cmpxchg-loop"
! When emitting a compare-and-swap loop for \fB_\|_sync Builtins\fR
  and \fB_\|_atomic Builtins\fR lacking a native instruction, optimize
  for the highly contended case by issuing an atomic load before the
  \&\f(CW\*(C`CMPXCHG\*(C'\fR instruction, and using the \f(CW\*(C`PAUSE\*(C'\fR instruction
! to save \s-1CPU\s0 power when restarting the loop.
! .IP "\fB\-mindirect\-branch=\fR\fIchoice\fR" 4
  .IX Item "-mindirect-branch=choice"
  Convert indirect call and jump with \fIchoice\fR.  The default is
  \&\fBkeep\fR, which keeps indirect call and jump unmodified.
  \&\fBthunk\fR converts indirect call and jump to call and return thunk.
! \&\fBthunk-inline\fR converts indirect call and jump to inlined call
! and return thunk.  \fBthunk-extern\fR converts indirect call and jump
  to external call and return thunk provided in a separate object file.
  You can control this behavior for a specific function by using the
  function attribute \f(CW\*(C`indirect_branch\*(C'\fR.
--- 35116,35141 ----
  \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
  which segment register (\f(CW%fs\fR or \f(CW%gs\fR) to use as base register
  for reading the canary, and from what offset from that base register.
! The default for those is as specified in the relevant ABI.
! .IP \fB\-mgeneral\-regs\-only\fR 4
  .IX Item "-mgeneral-regs-only"
! Generate code that uses only the general\-purpose registers.  This
! prevents the compiler from using floating\-point, vector, mask and bound
  registers.
! .IP \fB\-mrelax\-cmpxchg\-loop\fR 4
  .IX Item "-mrelax-cmpxchg-loop"
! When emitting a compare\-and\-swap loop for \fB_\|_sync Builtins\fR
  and \fB_\|_atomic Builtins\fR lacking a native instruction, optimize
  for the highly contended case by issuing an atomic load before the
  \&\f(CW\*(C`CMPXCHG\*(C'\fR instruction, and using the \f(CW\*(C`PAUSE\*(C'\fR instruction
! to save CPU power when restarting the loop.
! .IP \fB\-mindirect\-branch=\fR\fIchoice\fR 4
  .IX Item "-mindirect-branch=choice"
  Convert indirect call and jump with \fIchoice\fR.  The default is
  \&\fBkeep\fR, which keeps indirect call and jump unmodified.
  \&\fBthunk\fR converts indirect call and jump to call and return thunk.
! \&\fBthunk\-inline\fR converts indirect call and jump to inlined call
! and return thunk.  \fBthunk\-extern\fR converts indirect call and jump
  to external call and return thunk provided in a separate object file.
  You can control this behavior for a specific function by using the
  function attribute \f(CW\*(C`indirect_branch\*(C'\fR.
*************** not be reachable in the large code model
*** 35213,35280 ****
  .Sp
  Note that \fB\-mindirect\-branch=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control-flow check.
! .IP "\fB\-mfunction\-return=\fR\fIchoice\fR" 4
  .IX Item "-mfunction-return=choice"
  Convert function return with \fIchoice\fR.  The default is \fBkeep\fR,
  which keeps function return unmodified.  \fBthunk\fR converts function
! return to call and return thunk.  \fBthunk-inline\fR converts function
! return to inlined call and return thunk.  \fBthunk-extern\fR converts
  function return to external call and return thunk provided in a separate
  object file.  You can control this behavior for a specific function by
  using the function attribute \f(CW\*(C`function_return\*(C'\fR.
  .Sp
  Note that \fB\-mindirect\-return=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control-flow check.
  .Sp
  Note that \fB\-mcmodel=large\fR is incompatible with
  \&\fB\-mfunction\-return=thunk\fR and
  \&\fB\-mfunction\-return=thunk\-extern\fR since the thunk function may
  not be reachable in the large code model.
! .IP "\fB\-mindirect\-branch\-register\fR" 4
  .IX Item "-mindirect-branch-register"
  Force indirect call and jump via register.
! .IP "\fB\-mharden\-sls=\fR\fIchoice\fR" 4
  .IX Item "-mharden-sls=choice"
! Generate code to mitigate against straight line speculation (\s-1SLS\s0) with
! \&\fIchoice\fR.  The default is \fBnone\fR which disables all \s-1SLS\s0
! hardening.  \fBreturn\fR enables \s-1SLS\s0 hardening for function returns.
! \&\fBindirect-jmp\fR enables \s-1SLS\s0 hardening for indirect jumps.
! \&\fBall\fR enables all \s-1SLS\s0 hardening.
! .IP "\fB\-mindirect\-branch\-cs\-prefix\fR" 4
  .IX Item "-mindirect-branch-cs-prefix"
! Add \s-1CS\s0 prefix to call and jmp to indirect thunk with branch target in
  r8\-r15 registers so that the call and jmp instruction length is 6 bytes
  to allow them to be replaced with \fBlfence; call *%r8\-r15\fR or
! \&\fBlfence; jmp *%r8\-r15\fR at run-time.
! .IP "\fB\-mapx\-inline\-asm\-use\-gpr32\fR" 4
  .IX Item "-mapx-inline-asm-use-gpr32"
! For inline asm support with \s-1APX,\s0 by default the \s-1EGPR\s0 feature was
! disabled to prevent potential illegal instruction with \s-1EGPR\s0 occurs.
  To invoke egpr usage in inline asm, use new compiler option
  \&\-mapx\-inline\-asm\-use\-gpr32 and user should ensure the instruction
! supports \s-1EGPR.\s0
! .IP "\fB\-mevex512\fR" 4
  .IX Item "-mevex512"
  .PD 0
! .IP "\fB\-mno\-evex512\fR" 4
  .IX Item "-mno-evex512"
  .PD
! Enables/disables 512\-bit vector. It will be default on if \s-1AVX512F\s0 is enabled.
  .PP
  These \fB\-m\fR switches are supported in addition to the above
  on x86\-64 processors in 64\-bit environments.
! .IP "\fB\-m32\fR" 4
  .IX Item "-m32"
  .PD 0
! .IP "\fB\-m64\fR" 4
  .IX Item "-m64"
! .IP "\fB\-mx32\fR" 4
  .IX Item "-mx32"
! .IP "\fB\-m16\fR" 4
  .IX Item "-m16"
! .IP "\fB\-miamcu\fR" 4
  .IX Item "-miamcu"
  .PD
  Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
--- 35147,35214 ----
  .Sp
  Note that \fB\-mindirect\-branch=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control\-flow check.
! .IP \fB\-mfunction\-return=\fR\fIchoice\fR 4
  .IX Item "-mfunction-return=choice"
  Convert function return with \fIchoice\fR.  The default is \fBkeep\fR,
  which keeps function return unmodified.  \fBthunk\fR converts function
! return to call and return thunk.  \fBthunk\-inline\fR converts function
! return to inlined call and return thunk.  \fBthunk\-extern\fR converts
  function return to external call and return thunk provided in a separate
  object file.  You can control this behavior for a specific function by
  using the function attribute \f(CW\*(C`function_return\*(C'\fR.
  .Sp
  Note that \fB\-mindirect\-return=thunk\-extern\fR is compatible with
  \&\fB\-fcf\-protection=branch\fR since the external thunk can be made
! to enable control\-flow check.
  .Sp
  Note that \fB\-mcmodel=large\fR is incompatible with
  \&\fB\-mfunction\-return=thunk\fR and
  \&\fB\-mfunction\-return=thunk\-extern\fR since the thunk function may
  not be reachable in the large code model.
! .IP \fB\-mindirect\-branch\-register\fR 4
  .IX Item "-mindirect-branch-register"
  Force indirect call and jump via register.
! .IP \fB\-mharden\-sls=\fR\fIchoice\fR 4
  .IX Item "-mharden-sls=choice"
! Generate code to mitigate against straight line speculation (SLS) with
! \&\fIchoice\fR.  The default is \fBnone\fR which disables all SLS
! hardening.  \fBreturn\fR enables SLS hardening for function returns.
! \&\fBindirect\-jmp\fR enables SLS hardening for indirect jumps.
! \&\fBall\fR enables all SLS hardening.
! .IP \fB\-mindirect\-branch\-cs\-prefix\fR 4
  .IX Item "-mindirect-branch-cs-prefix"
! Add CS prefix to call and jmp to indirect thunk with branch target in
  r8\-r15 registers so that the call and jmp instruction length is 6 bytes
  to allow them to be replaced with \fBlfence; call *%r8\-r15\fR or
! \&\fBlfence; jmp *%r8\-r15\fR at run\-time.
! .IP \fB\-mapx\-inline\-asm\-use\-gpr32\fR 4
  .IX Item "-mapx-inline-asm-use-gpr32"
! For inline asm support with APX, by default the EGPR feature was
! disabled to prevent potential illegal instruction with EGPR occurs.
  To invoke egpr usage in inline asm, use new compiler option
  \&\-mapx\-inline\-asm\-use\-gpr32 and user should ensure the instruction
! supports EGPR.
! .IP \fB\-mevex512\fR 4
  .IX Item "-mevex512"
  .PD 0
! .IP \fB\-mno\-evex512\fR 4
  .IX Item "-mno-evex512"
  .PD
! Enables/disables 512\-bit vector. It will be default on if AVX512F is enabled.
  .PP
  These \fB\-m\fR switches are supported in addition to the above
  on x86\-64 processors in 64\-bit environments.
! .IP \fB\-m32\fR 4
  .IX Item "-m32"
  .PD 0
! .IP \fB\-m64\fR 4
  .IX Item "-m64"
! .IP \fB\-mx32\fR 4
  .IX Item "-mx32"
! .IP \fB\-m16\fR 4
  .IX Item "-m16"
! .IP \fB\-miamcu\fR 4
  .IX Item "-miamcu"
  .PD
  Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
*************** The \fB\-m16\fR option is the same as \f
*** 35295,35352 ****
  it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
  the assembly output so that the binary can run in 16\-bit mode.
  .Sp
! The \fB\-miamcu\fR option generates code which conforms to Intel \s-1MCU\s0
  psABI.  It requires the \fB\-m32\fR option to be turned on.
! .IP "\fB\-mno\-red\-zone\fR" 4
  .IX Item "-mno-red-zone"
! Do not use a so-called \*(L"red zone\*(R" for x86\-64 code.  The red zone is mandated
! by the x86\-64 \s-1ABI\s0; it is a 128\-byte area beyond the location of the
  stack pointer that is not modified by signal or interrupt handlers
  and therefore can be used for temporary data without adjusting the stack
  pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
! .IP "\fB\-mcmodel=small\fR" 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model: the program and its symbols must
! be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
  Programs can be statically or dynamically linked.  This is the default
  code model.
! .IP "\fB\-mcmodel=kernel\fR" 4
  .IX Item "-mcmodel=kernel"
  Generate code for the kernel code model.  The kernel runs in the
! negative 2 \s-1GB\s0 of the address space.
  This model has to be used for Linux kernel code.
! .IP "\fB\-mcmodel=medium\fR" 4
  .IX Item "-mcmodel=medium"
  Generate code for the medium model: the program is linked in the lower 2
! \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
  with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
! large data or \s-1BSS\s0 sections and can be located above 2GB.  Programs can
  be statically or dynamically linked.
! .IP "\fB\-mcmodel=large\fR" 4
  .IX Item "-mcmodel=large"
  Generate code for the large model.  This model makes no assumptions
  about addresses and sizes of sections.
! .IP "\fB\-maddress\-mode=long\fR" 4
  .IX Item "-maddress-mode=long"
  Generate code for long address mode.  This is only supported for 64\-bit
  and x32 environments.  It is the default address mode for 64\-bit
  environments.
! .IP "\fB\-maddress\-mode=short\fR" 4
  .IX Item "-maddress-mode=short"
  Generate code for short address mode.  This is only supported for 32\-bit
  and x32 environments.  It is the default address mode for 32\-bit and
  x32 environments.
! .IP "\fB\-mneeded\fR" 4
  .IX Item "-mneeded"
  .PD 0
! .IP "\fB\-mno\-needed\fR" 4
  .IX Item "-mno-needed"
  .PD
! Emit \s-1GNU_PROPERTY_X86_ISA_1_NEEDED GNU\s0 property for Linux target to
! indicate the micro-architecture \s-1ISA\s0 level required to execute the binary.
! .IP "\fB\-mno\-direct\-extern\-access\fR" 4
  .IX Item "-mno-direct-extern-access"
! Without \fB\-fpic\fR nor \fB\-fPIC\fR, always use the \s-1GOT\s0 pointer
  to access external symbols.  With \fB\-fpic\fR or \fB\-fPIC\fR,
  treat access to protected symbols as local symbols.  The default is
  \&\fB\-mdirect\-extern\-access\fR.
--- 35229,35286 ----
  it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
  the assembly output so that the binary can run in 16\-bit mode.
  .Sp
! The \fB\-miamcu\fR option generates code which conforms to Intel MCU
  psABI.  It requires the \fB\-m32\fR option to be turned on.
! .IP \fB\-mno\-red\-zone\fR 4
  .IX Item "-mno-red-zone"
! Do not use a so\-called "red zone" for x86\-64 code.  The red zone is mandated
! by the x86\-64 ABI; it is a 128\-byte area beyond the location of the
  stack pointer that is not modified by signal or interrupt handlers
  and therefore can be used for temporary data without adjusting the stack
  pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
! .IP \fB\-mcmodel=small\fR 4
  .IX Item "-mcmodel=small"
  Generate code for the small code model: the program and its symbols must
! be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
  Programs can be statically or dynamically linked.  This is the default
  code model.
! .IP \fB\-mcmodel=kernel\fR 4
  .IX Item "-mcmodel=kernel"
  Generate code for the kernel code model.  The kernel runs in the
! negative 2 GB of the address space.
  This model has to be used for Linux kernel code.
! .IP \fB\-mcmodel=medium\fR 4
  .IX Item "-mcmodel=medium"
  Generate code for the medium model: the program is linked in the lower 2
! GB of the address space.  Small symbols are also placed there.  Symbols
  with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
! large data or BSS sections and can be located above 2GB.  Programs can
  be statically or dynamically linked.
! .IP \fB\-mcmodel=large\fR 4
  .IX Item "-mcmodel=large"
  Generate code for the large model.  This model makes no assumptions
  about addresses and sizes of sections.
! .IP \fB\-maddress\-mode=long\fR 4
  .IX Item "-maddress-mode=long"
  Generate code for long address mode.  This is only supported for 64\-bit
  and x32 environments.  It is the default address mode for 64\-bit
  environments.
! .IP \fB\-maddress\-mode=short\fR 4
  .IX Item "-maddress-mode=short"
  Generate code for short address mode.  This is only supported for 32\-bit
  and x32 environments.  It is the default address mode for 32\-bit and
  x32 environments.
! .IP \fB\-mneeded\fR 4
  .IX Item "-mneeded"
  .PD 0
! .IP \fB\-mno\-needed\fR 4
  .IX Item "-mno-needed"
  .PD
! Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
! indicate the micro\-architecture ISA level required to execute the binary.
! .IP \fB\-mno\-direct\-extern\-access\fR 4
  .IX Item "-mno-direct-extern-access"
! Without \fB\-fpic\fR nor \fB\-fPIC\fR, always use the GOT pointer
  to access external symbols.  With \fB\-fpic\fR or \fB\-fPIC\fR,
  treat access to protected symbols as local symbols.  The default is
  \&\fB\-mdirect\-extern\-access\fR.
*************** treat access to protected symbols as loc
*** 35355,35369 ****
  \&\fB\-mno\-direct\-extern\-access\fR and executable compiled with
  \&\fB\-mdirect\-extern\-access\fR may not be binary compatible if
  protected symbols are used in shared libraries and executable.
! .IP "\fB\-munroll\-only\-small\-loops\fR" 4
  .IX Item "-munroll-only-small-loops"
  Controls conservative small loop unrolling. It is default enabled by
  O2, and unrolls loop with less than 4 insns by 1 time. Explicit
  \&\-f[no\-]unroll\-[all\-]loops would disable this flag to avoid any
  unintended unrolling behavior that user does not want.
! .IP "\fB\-mlam=\fR\fIchoice\fR" 4
  .IX Item "-mlam=choice"
! \&\s-1LAM\s0(linear\-address masking) allows special bits in the pointer to be used
  for metadata. The default is \fBnone\fR. With \fBu48\fR, pointer bits in
  positions 62:48 can be used for metadata; With \fBu57\fR, pointer bits in
  positions 62:57 can be used for metadata.
--- 35289,35303 ----
  \&\fB\-mno\-direct\-extern\-access\fR and executable compiled with
  \&\fB\-mdirect\-extern\-access\fR may not be binary compatible if
  protected symbols are used in shared libraries and executable.
! .IP \fB\-munroll\-only\-small\-loops\fR 4
  .IX Item "-munroll-only-small-loops"
  Controls conservative small loop unrolling. It is default enabled by
  O2, and unrolls loop with less than 4 insns by 1 time. Explicit
  \&\-f[no\-]unroll\-[all\-]loops would disable this flag to avoid any
  unintended unrolling behavior that user does not want.
! .IP \fB\-mlam=\fR\fIchoice\fR 4
  .IX Item "-mlam=choice"
! LAM(linear\-address masking) allows special bits in the pointer to be used
  for metadata. The default is \fBnone\fR. With \fBu48\fR, pointer bits in
  positions 62:48 can be used for metadata; With \fBu57\fR, pointer bits in
  positions 62:57 can be used for metadata.
*************** positions 62:57 can be used for metadata
*** 35372,35392 ****
  .IX Subsection "x86 Windows Options"
  .PP
  These additional options are available for Microsoft Windows targets:
! .IP "\fB\-mconsole\fR" 4
  .IX Item "-mconsole"
  This option
  specifies that a console application is to be generated, by
! instructing the linker to set the \s-1PE\s0 header subsystem type
  required for console applications.
  This option is available for Cygwin and MinGW targets and is
  enabled by default on those targets.
! .IP "\fB\-mcrtdll=\fR\fIlibrary\fR" 4
  .IX Item "-mcrtdll=library"
! Preprocess, compile or link with specified C RunTime \s-1DLL\s0 \fIlibrary\fR.
  This option adjust predefined macros \f(CW\*(C`_\|_CRTDLL_\|_\*(C'\fR, \f(CW\*(C`_\|_MSVCRT_\|_\*(C'\fR,
! \&\f(CW\*(C`_UCRT\*(C'\fR and \f(CW\*(C`_\|_MSVCRT_VERSION_\|_\*(C'\fR for specified \s-1CRT\s0 \fIlibrary\fR,
! choose start file for \s-1CRT\s0 \fIlibrary\fR and link with \s-1CRT\s0 \fIlibrary\fR.
! Recognized \s-1CRT\s0 library names for proprocessor are:
  \&\f(CW\*(C`crtdll*\*(C'\fR, \f(CW\*(C`msvcrt10*\*(C'\fR, \f(CW\*(C`msvcrt20*\*(C'\fR, \f(CW\*(C`msvcrt40*\*(C'\fR,
  \&\f(CW\*(C`msvcr40*\*(C'\fR, \f(CW\*(C`msvcrtd*\*(C'\fR, \f(CW\*(C`msvcrt\-os*\*(C'\fR,
  \&\f(CW\*(C`msvcr70*\*(C'\fR, \f(CW\*(C`msvcr71*\*(C'\fR, \f(CW\*(C`msvcr80*\*(C'\fR, \f(CW\*(C`msvcr90*\*(C'\fR,
--- 35306,35326 ----
  .IX Subsection "x86 Windows Options"
  .PP
  These additional options are available for Microsoft Windows targets:
! .IP \fB\-mconsole\fR 4
  .IX Item "-mconsole"
  This option
  specifies that a console application is to be generated, by
! instructing the linker to set the PE header subsystem type
  required for console applications.
  This option is available for Cygwin and MinGW targets and is
  enabled by default on those targets.
! .IP \fB\-mcrtdll=\fR\fIlibrary\fR 4
  .IX Item "-mcrtdll=library"
! Preprocess, compile or link with specified C RunTime DLL \fIlibrary\fR.
  This option adjust predefined macros \f(CW\*(C`_\|_CRTDLL_\|_\*(C'\fR, \f(CW\*(C`_\|_MSVCRT_\|_\*(C'\fR,
! \&\f(CW\*(C`_UCRT\*(C'\fR and \f(CW\*(C`_\|_MSVCRT_VERSION_\|_\*(C'\fR for specified CRT \fIlibrary\fR,
! choose start file for CRT \fIlibrary\fR and link with CRT \fIlibrary\fR.
! Recognized CRT library names for proprocessor are:
  \&\f(CW\*(C`crtdll*\*(C'\fR, \f(CW\*(C`msvcrt10*\*(C'\fR, \f(CW\*(C`msvcrt20*\*(C'\fR, \f(CW\*(C`msvcrt40*\*(C'\fR,
  \&\f(CW\*(C`msvcr40*\*(C'\fR, \f(CW\*(C`msvcrtd*\*(C'\fR, \f(CW\*(C`msvcrt\-os*\*(C'\fR,
  \&\f(CW\*(C`msvcr70*\*(C'\fR, \f(CW\*(C`msvcr71*\*(C'\fR, \f(CW\*(C`msvcr80*\*(C'\fR, \f(CW\*(C`msvcr90*\*(C'\fR,
*************** Recognized \s-1CRT\s0 library names for
*** 35394,35458 ****
  If this options is not specified then the default MinGW import library
  \&\f(CW\*(C`msvcrt\*(C'\fR is used for linking and no other adjustment for
  preprocessor is done. MinGW import library \f(CW\*(C`msvcrt\*(C'\fR is just a
! symlink to (or a copy of) another MinGW \s-1CRT\s0 import library
  chosen during MinGW compilation. MinGW import library \f(CW\*(C`msvcrt\-os\*(C'\fR
! is for Windows system \s-1CRT DLL\s0 library \f(CW\*(C`msvcrt.dll\*(C'\fR and
  in most cases is the default MinGW import library.
! Generally speaking, changing the \s-1CRT DLL\s0 requires recompiling
! the entire MinGW \s-1CRT.\s0 This option is for experimental and testing
  purposes only.
  This option is available for MinGW targets.
! .IP "\fB\-mdll\fR" 4
  .IX Item "-mdll"
  This option is available for Cygwin and MinGW targets.  It
  specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
  generated, enabling the selection of the required runtime
  startup object and entry point.
! .IP "\fB\-mnop\-fun\-dllimport\fR" 4
  .IX Item "-mnop-fun-dllimport"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
! .IP "\fB\-mthreads\fR" 4
  .IX Item "-mthreads"
  This option is available for MinGW targets. It specifies
! that MinGW-specific thread support is to be used.
! .IP "\fB\-municode\fR" 4
  .IX Item "-municode"
  This option is available for MinGW\-w64 targets.  It causes
  the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
! chooses Unicode-capable runtime startup code.
! .IP "\fB\-mwin32\fR" 4
  .IX Item "-mwin32"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the typical Microsoft Windows predefined macros are to
! be set in the pre-processor, but does not influence the choice
  of runtime library/startup code.
! .IP "\fB\-mwindows\fR" 4
  .IX Item "-mwindows"
  This option is available for Cygwin and MinGW targets.  It
! specifies that a \s-1GUI\s0 application is to be generated by
! instructing the linker to set the \s-1PE\s0 header subsystem type
  appropriately.
! .IP "\fB\-fno\-set\-stack\-executable\fR" 4
  .IX Item "-fno-set-stack-executable"
  This option is available for MinGW targets. It specifies that
! the executable flag for the stack used by nested functions isn't
  set. This is necessary for binaries running in kernel mode of
! Microsoft Windows, as there the User32 \s-1API,\s0 which is used to set executable
! privileges, isn't available.
! .IP "\fB\-fwritable\-relocated\-rdata\fR" 4
  .IX Item "-fwritable-relocated-rdata"
  This option is available for MinGW and Cygwin targets.  It specifies
! that relocated-data in read-only section is put into the \f(CW\*(C`.data\*(C'\fR
  section.  This is a necessary for older runtimes not supporting
! modification of \f(CW\*(C`.rdata\*(C'\fR sections for pseudo-relocation.
! .IP "\fB\-mpe\-aligned\-commons\fR" 4
  .IX Item "-mpe-aligned-commons"
  This option is available for Cygwin and MinGW targets.  It
! specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
! permits the correct alignment of \s-1COMMON\s0 variables should be
  used when generating code.  It is enabled by default if
! \&\s-1GCC\s0 detects that the target assembler found during configuration
  supports the feature.
  .PP
  See also under \fBx86 Options\fR for standard options.
--- 35328,35392 ----
  If this options is not specified then the default MinGW import library
  \&\f(CW\*(C`msvcrt\*(C'\fR is used for linking and no other adjustment for
  preprocessor is done. MinGW import library \f(CW\*(C`msvcrt\*(C'\fR is just a
! symlink to (or a copy of) another MinGW CRT import library
  chosen during MinGW compilation. MinGW import library \f(CW\*(C`msvcrt\-os\*(C'\fR
! is for Windows system CRT DLL library \f(CW\*(C`msvcrt.dll\*(C'\fR and
  in most cases is the default MinGW import library.
! Generally speaking, changing the CRT DLL requires recompiling
! the entire MinGW CRT. This option is for experimental and testing
  purposes only.
  This option is available for MinGW targets.
! .IP \fB\-mdll\fR 4
  .IX Item "-mdll"
  This option is available for Cygwin and MinGW targets.  It
  specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
  generated, enabling the selection of the required runtime
  startup object and entry point.
! .IP \fB\-mnop\-fun\-dllimport\fR 4
  .IX Item "-mnop-fun-dllimport"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
! .IP \fB\-mthreads\fR 4
  .IX Item "-mthreads"
  This option is available for MinGW targets. It specifies
! that MinGW\-specific thread support is to be used.
! .IP \fB\-municode\fR 4
  .IX Item "-municode"
  This option is available for MinGW\-w64 targets.  It causes
  the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
! chooses Unicode\-capable runtime startup code.
! .IP \fB\-mwin32\fR 4
  .IX Item "-mwin32"
  This option is available for Cygwin and MinGW targets.  It
  specifies that the typical Microsoft Windows predefined macros are to
! be set in the pre\-processor, but does not influence the choice
  of runtime library/startup code.
! .IP \fB\-mwindows\fR 4
  .IX Item "-mwindows"
  This option is available for Cygwin and MinGW targets.  It
! specifies that a GUI application is to be generated by
! instructing the linker to set the PE header subsystem type
  appropriately.
! .IP \fB\-fno\-set\-stack\-executable\fR 4
  .IX Item "-fno-set-stack-executable"
  This option is available for MinGW targets. It specifies that
! the executable flag for the stack used by nested functions isn\*(Aqt
  set. This is necessary for binaries running in kernel mode of
! Microsoft Windows, as there the User32 API, which is used to set executable
! privileges, isn\*(Aqt available.
! .IP \fB\-fwritable\-relocated\-rdata\fR 4
  .IX Item "-fwritable-relocated-rdata"
  This option is available for MinGW and Cygwin targets.  It specifies
! that relocated\-data in read\-only section is put into the \f(CW\*(C`.data\*(C'\fR
  section.  This is a necessary for older runtimes not supporting
! modification of \f(CW\*(C`.rdata\*(C'\fR sections for pseudo\-relocation.
! .IP \fB\-mpe\-aligned\-commons\fR 4
  .IX Item "-mpe-aligned-commons"
  This option is available for Cygwin and MinGW targets.  It
! specifies that the GNU extension to the PE file format that
! permits the correct alignment of COMMON variables should be
  used when generating code.  It is enabled by default if
! GCC detects that the target assembler found during configuration
  supports the feature.
  .PP
  See also under \fBx86 Options\fR for standard options.
*************** See also under \fBx86 Options\fR for sta
*** 35461,35467 ****
  .IX Subsection "Xstormy16 Options"
  .PP
  These options are defined for Xstormy16:
! .IP "\fB\-msim\fR" 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
  .PP
--- 35395,35401 ----
  .IX Subsection "Xstormy16 Options"
  .PP
  These options are defined for Xstormy16:
! .IP \fB\-msim\fR 4
  .IX Item "-msim"
  Choose startup files and linker script suitable for the simulator.
  .PP
*************** Choose startup files and linker script s
*** 35469,35478 ****
  .IX Subsection "Xtensa Options"
  .PP
  These options are supported for Xtensa targets:
! .IP "\fB\-mconst16\fR" 4
  .IX Item "-mconst16"
  .PD 0
! .IP "\fB\-mno\-const16\fR" 4
  .IX Item "-mno-const16"
  .PD
  Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
--- 35403,35412 ----
  .IX Subsection "Xtensa Options"
  .PP
  These options are supported for Xtensa targets:
! .IP \fB\-mconst16\fR 4
  .IX Item "-mconst16"
  .PD 0
! .IP \fB\-mno\-const16\fR 4
  .IX Item "-mno-const16"
  .PD
  Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
*************** standard option from Tensilica.  When en
*** 35481,35538 ****
  instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
  instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
  the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
! .IP "\fB\-mfused\-madd\fR" 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP "\fB\-mno\-fused\-madd\fR" 4
  .IX Item "-mno-fused-madd"
  .PD
  Enable or disable use of fused multiply/add and multiply/subtract
! instructions in the floating-point option.  This has no effect if the
! floating-point option is not also enabled.  Disabling fused multiply/add
  and multiply/subtract instructions forces the compiler to use separate
  instructions for the multiply and add/subtract operations.  This may be
! desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
  required: the fused multiply add/subtract instructions do not round the
  intermediate result, thereby producing results with \fImore\fR bits of
! precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
  add/subtract instructions also ensures that the program output is not
! sensitive to the compiler's ability to combine multiply and add/subtract
  operations.
! .IP "\fB\-mserialize\-volatile\fR" 4
  .IX Item "-mserialize-volatile"
  .PD 0
! .IP "\fB\-mno\-serialize\-volatile\fR" 4
  .IX Item "-mno-serialize-volatile"
  .PD
! When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
  \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
  The default is \fB\-mserialize\-volatile\fR.  Use
  \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
! .IP "\fB\-mforce\-no\-pic\fR" 4
  .IX Item "-mforce-no-pic"
! For targets, like GNU/Linux, where all user-mode Xtensa code must be
! position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
  kernel code.
! .IP "\fB\-mtext\-section\-literals\fR" 4
  .IX Item "-mtext-section-literals"
  .PD 0
! .IP "\fB\-mno\-text\-section\-literals\fR" 4
  .IX Item "-mno-text-section-literals"
  .PD
  These options control the treatment of literal pools.  The default is
  \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
  section in the output file.  This allows the literal pool to be placed
! in a data \s-1RAM/ROM,\s0 and it also allows the linker to combine literal
  pools from separate object files to remove redundant literals and
  improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
  are interspersed in the text section in order to keep them as close as
  possible to their references.  This may be necessary for large assembly
  files.  Literals for each function are placed right before that function.
! .IP "\fB\-mauto\-litpools\fR" 4
  .IX Item "-mauto-litpools"
  .PD 0
! .IP "\fB\-mno\-auto\-litpools\fR" 4
  .IX Item "-mno-auto-litpools"
  .PD
  These options control the treatment of literal pools.  The default is
--- 35415,35472 ----
  instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
  instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
  the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
! .IP \fB\-mfused\-madd\fR 4
  .IX Item "-mfused-madd"
  .PD 0
! .IP \fB\-mno\-fused\-madd\fR 4
  .IX Item "-mno-fused-madd"
  .PD
  Enable or disable use of fused multiply/add and multiply/subtract
! instructions in the floating\-point option.  This has no effect if the
! floating\-point option is not also enabled.  Disabling fused multiply/add
  and multiply/subtract instructions forces the compiler to use separate
  instructions for the multiply and add/subtract operations.  This may be
! desirable in some cases where strict IEEE 754\-compliant results are
  required: the fused multiply add/subtract instructions do not round the
  intermediate result, thereby producing results with \fImore\fR bits of
! precision than specified by the IEEE standard.  Disabling fused multiply
  add/subtract instructions also ensures that the program output is not
! sensitive to the compiler\*(Aqs ability to combine multiply and add/subtract
  operations.
! .IP \fB\-mserialize\-volatile\fR 4
  .IX Item "-mserialize-volatile"
  .PD 0
! .IP \fB\-mno\-serialize\-volatile\fR 4
  .IX Item "-mno-serialize-volatile"
  .PD
! When this option is enabled, GCC inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
  \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
  The default is \fB\-mserialize\-volatile\fR.  Use
  \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
! .IP \fB\-mforce\-no\-pic\fR 4
  .IX Item "-mforce-no-pic"
! For targets, like GNU/Linux, where all user\-mode Xtensa code must be
! position\-independent code (PIC), this option disables PIC for compiling
  kernel code.
! .IP \fB\-mtext\-section\-literals\fR 4
  .IX Item "-mtext-section-literals"
  .PD 0
! .IP \fB\-mno\-text\-section\-literals\fR 4
  .IX Item "-mno-text-section-literals"
  .PD
  These options control the treatment of literal pools.  The default is
  \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
  section in the output file.  This allows the literal pool to be placed
! in a data RAM/ROM, and it also allows the linker to combine literal
  pools from separate object files to remove redundant literals and
  improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
  are interspersed in the text section in order to keep them as close as
  possible to their references.  This may be necessary for large assembly
  files.  Literals for each function are placed right before that function.
! .IP \fB\-mauto\-litpools\fR 4
  .IX Item "-mauto-litpools"
  .PD 0
! .IP \fB\-mno\-auto\-litpools\fR 4
  .IX Item "-mno-auto-litpools"
  .PD
  These options control the treatment of literal pools.  The default is
*************** do relaxation and place literals as nece
*** 35546,35574 ****
  assembler to create several literal pools per function and assemble
  very big functions, which may not be possible with
  \&\fB\-mtext\-section\-literals\fR.
! .IP "\fB\-mtarget\-align\fR" 4
  .IX Item "-mtarget-align"
  .PD 0
! .IP "\fB\-mno\-target\-align\fR" 4
  .IX Item "-mno-target-align"
  .PD
! When this option is enabled, \s-1GCC\s0 instructs the assembler to
  automatically align instructions to reduce branch penalties at the
  expense of some code density.  The assembler attempts to widen density
  instructions to align branch targets and the instructions following call
  instructions.  If there are not enough preceding safe density
  instructions to align a target, no widening is performed.  The
  default is \fB\-mtarget\-align\fR.  These options do not affect the
! treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
  assembler always aligns, either by widening density instructions or
! by inserting \s-1NOP\s0 instructions.
! .IP "\fB\-mlongcalls\fR" 4
  .IX Item "-mlongcalls"
  .PD 0
! .IP "\fB\-mno\-longcalls\fR" 4
  .IX Item "-mno-longcalls"
  .PD
! When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
  direct calls to indirect calls unless it can determine that the target
  of a direct call is in the range allowed by the call instruction.  This
  translation typically occurs for calls to functions in other source
--- 35480,35508 ----
  assembler to create several literal pools per function and assemble
  very big functions, which may not be possible with
  \&\fB\-mtext\-section\-literals\fR.
! .IP \fB\-mtarget\-align\fR 4
  .IX Item "-mtarget-align"
  .PD 0
! .IP \fB\-mno\-target\-align\fR 4
  .IX Item "-mno-target-align"
  .PD
! When this option is enabled, GCC instructs the assembler to
  automatically align instructions to reduce branch penalties at the
  expense of some code density.  The assembler attempts to widen density
  instructions to align branch targets and the instructions following call
  instructions.  If there are not enough preceding safe density
  instructions to align a target, no widening is performed.  The
  default is \fB\-mtarget\-align\fR.  These options do not affect the
! treatment of auto\-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
  assembler always aligns, either by widening density instructions or
! by inserting NOP instructions.
! .IP \fB\-mlongcalls\fR 4
  .IX Item "-mlongcalls"
  .PD 0
! .IP \fB\-mno\-longcalls\fR 4
  .IX Item "-mno-longcalls"
  .PD
! When this option is enabled, GCC instructs the assembler to translate
  direct calls to indirect calls unless it can determine that the target
  of a direct call is in the range allowed by the call instruction.  This
  translation typically occurs for calls to functions in other source
*************** instruction into an \f(CW\*(C`L32R\*(C'\
*** 35577,35617 ****
  The default is \fB\-mno\-longcalls\fR.  This option should be used in
  programs where the call target can potentially be out of range.  This
  option is implemented in the assembler, not the compiler, so the
! assembly code generated by \s-1GCC\s0 still shows direct call
  instructions\-\-\-look at the disassembled object code to see the actual
  instructions.  Note that the assembler uses an indirect call for
! every cross-file call, not just those that really are out of range.
! .IP "\fB\-mabi=\fR\fIname\fR" 4
  .IX Item "-mabi=name"
! Generate code for the specified \s-1ABI.\s0  Permissible values are: \fBcall0\fR,
! \&\fBwindowed\fR.  Default \s-1ABI\s0 is chosen by the Xtensa core configuration.
! .IP "\fB\-mabi=call0\fR" 4
  .IX Item "-mabi=call0"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR, registers \f(CW\*(C`a12\*(C'\fR through \f(CW\*(C`a15\*(C'\fR are
! caller-saved, and register \f(CW\*(C`a15\*(C'\fR may be used as a frame pointer.
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_CALL0_ABI_\|_\*(C'\fR is defined.
! .IP "\fB\-mabi=windowed\fR" 4
  .IX Item "-mabi=windowed"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a10\*(C'\fR through \f(CW\*(C`a15\*(C'\fR, and called function rotates register window
  by 8 registers on entry so that its arguments are found in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR.  Register \f(CW\*(C`a7\*(C'\fR may be used as a frame
  pointer.  Register window is rotated 8 registers back upon return.
! When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_WINDOWED_ABI_\|_\*(C'\fR is defined.
! .IP "\fB\-mextra\-l32r\-costs=\fR\fIn\fR" 4
  .IX Item "-mextra-l32r-costs=n"
! Specify an extra cost of instruction \s-1RAM/ROM\s0 access for \f(CW\*(C`L32R\*(C'\fR
  instructions, in clock cycles.  This affects, when optimizing for speed,
  whether loading a constant from literal pool using \f(CW\*(C`L32R\*(C'\fR or
  synthesizing the constant from a small one with a couple of arithmetic
  instructions.  The default value is 0.
! .IP "\fB\-mstrict\-align\fR" 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP "\fB\-mno\-strict\-align\fR" 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
--- 35511,35551 ----
  The default is \fB\-mno\-longcalls\fR.  This option should be used in
  programs where the call target can potentially be out of range.  This
  option is implemented in the assembler, not the compiler, so the
! assembly code generated by GCC still shows direct call
  instructions\-\-\-look at the disassembled object code to see the actual
  instructions.  Note that the assembler uses an indirect call for
! every cross\-file call, not just those that really are out of range.
! .IP \fB\-mabi=\fR\fIname\fR 4
  .IX Item "-mabi=name"
! Generate code for the specified ABI.  Permissible values are: \fBcall0\fR,
! \&\fBwindowed\fR.  Default ABI is chosen by the Xtensa core configuration.
! .IP \fB\-mabi=call0\fR 4
  .IX Item "-mabi=call0"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR, registers \f(CW\*(C`a12\*(C'\fR through \f(CW\*(C`a15\*(C'\fR are
! caller\-saved, and register \f(CW\*(C`a15\*(C'\fR may be used as a frame pointer.
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_CALL0_ABI_\|_\*(C'\fR is defined.
! .IP \fB\-mabi=windowed\fR 4
  .IX Item "-mabi=windowed"
  When this option is enabled function parameters are passed in registers
  \&\f(CW\*(C`a10\*(C'\fR through \f(CW\*(C`a15\*(C'\fR, and called function rotates register window
  by 8 registers on entry so that its arguments are found in registers
  \&\f(CW\*(C`a2\*(C'\fR through \f(CW\*(C`a7\*(C'\fR.  Register \f(CW\*(C`a7\*(C'\fR may be used as a frame
  pointer.  Register window is rotated 8 registers back upon return.
! When this version of the ABI is enabled the C preprocessor symbol
  \&\f(CW\*(C`_\|_XTENSA_WINDOWED_ABI_\|_\*(C'\fR is defined.
! .IP \fB\-mextra\-l32r\-costs=\fR\fIn\fR 4
  .IX Item "-mextra-l32r-costs=n"
! Specify an extra cost of instruction RAM/ROM access for \f(CW\*(C`L32R\*(C'\fR
  instructions, in clock cycles.  This affects, when optimizing for speed,
  whether loading a constant from literal pool using \f(CW\*(C`L32R\*(C'\fR or
  synthesizing the constant from a small one with a couple of arithmetic
  instructions.  The default value is 0.
! .IP \fB\-mstrict\-align\fR 4
  .IX Item "-mstrict-align"
  .PD 0
! .IP \fB\-mno\-strict\-align\fR 4
  .IX Item "-mno-strict-align"
  .PD
  Avoid or allow generating memory accesses that may not be aligned on a natural
*************** other cores.
*** 35624,35632 ****
  .IX Subsection "zSeries Options"
  .PP
  These are listed under
! .SH "ENVIRONMENT"
  .IX Header "ENVIRONMENT"
! This section describes several environment variables that affect how \s-1GCC\s0
  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
  aspects of the compilation environment.
--- 35558,35566 ----
  .IX Subsection "zSeries Options"
  .PP
  These are listed under
! .SH ENVIRONMENT
  .IX Header "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
  aspects of the compilation environment.
*************** aspects of the compilation environment.
*** 35634,35699 ****
  Note that you can also specify places to search using options such as
  \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
  take precedence over places specified using environment variables, which
! in turn take precedence over those specified by the configuration of \s-1GCC.\s0
! .IP "\fB\s-1LANG\s0\fR" 4
  .IX Item "LANG"
  .PD 0
! .IP "\fB\s-1LC_CTYPE\s0\fR" 4
  .IX Item "LC_CTYPE"
! .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
  .IX Item "LC_MESSAGES"
! .IP "\fB\s-1LC_ALL\s0\fR" 4
  .IX Item "LC_ALL"
  .PD
! These environment variables control the way that \s-1GCC\s0 uses
! localization information which allows \s-1GCC\s0 to work with different
! national conventions.  \s-1GCC\s0 inspects the locale categories
! \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
  so.  These locale categories can be set to any value supported by your
  installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
! Kingdom encoded in \s-1UTF\-8.\s0
  .Sp
! The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
! classification.  \s-1GCC\s0 uses it to determine the character boundaries in
  a string; this is needed for some multibyte encodings that contain quote
  and escape characters that are otherwise interpreted as a string
  end or escape.
  .Sp
! The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
  use in diagnostic messages.
  .Sp
! If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
! of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
! and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
! environment variable.  If none of these variables are set, \s-1GCC\s0
  defaults to traditional C English behavior.
! .IP "\fB\s-1TMPDIR\s0\fR" 4
  .IX Item "TMPDIR"
! If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
! files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
  compilation which is to be used as input to the next stage: for example,
  the output of the preprocessor, which is the input to the compiler
  proper.
! .IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
  .IX Item "GCC_COMPARE_DEBUG"
! Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
  \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
  of this option for more details.
! .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
  .IX Item "GCC_EXEC_PREFIX"
! If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
  names of the subprograms executed by the compiler.  No slash is added
  when this prefix is combined with the name of a subprogram, but you can
  specify a prefix that ends with a slash if you wish.
  .Sp
! If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 attempts to figure out
  an appropriate prefix to use based on the pathname it is invoked with.
  .Sp
! If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
  tries looking in the usual places for the subprogram.
  .Sp
! The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
! \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
  the installed compiler. In many cases \fIprefix\fR is the value
  of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
  .Sp
--- 35568,35633 ----
  Note that you can also specify places to search using options such as
  \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
  take precedence over places specified using environment variables, which
! in turn take precedence over those specified by the configuration of GCC.
! .IP \fBLANG\fR 4
  .IX Item "LANG"
  .PD 0
! .IP \fBLC_CTYPE\fR 4
  .IX Item "LC_CTYPE"
! .IP \fBLC_MESSAGES\fR 4
  .IX Item "LC_MESSAGES"
! .IP \fBLC_ALL\fR 4
  .IX Item "LC_ALL"
  .PD
! These environment variables control the way that GCC uses
! localization information which allows GCC to work with different
! national conventions.  GCC inspects the locale categories
! \&\fBLC_CTYPE\fR and \fBLC_MESSAGES\fR if it has been configured to do
  so.  These locale categories can be set to any value supported by your
  installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
! Kingdom encoded in UTF\-8.
  .Sp
! The \fBLC_CTYPE\fR environment variable specifies character
! classification.  GCC uses it to determine the character boundaries in
  a string; this is needed for some multibyte encodings that contain quote
  and escape characters that are otherwise interpreted as a string
  end or escape.
  .Sp
! The \fBLC_MESSAGES\fR environment variable specifies the language to
  use in diagnostic messages.
  .Sp
! If the \fBLC_ALL\fR environment variable is set, it overrides the value
! of \fBLC_CTYPE\fR and \fBLC_MESSAGES\fR; otherwise, \fBLC_CTYPE\fR
! and \fBLC_MESSAGES\fR default to the value of the \fBLANG\fR
! environment variable.  If none of these variables are set, GCC
  defaults to traditional C English behavior.
! .IP \fBTMPDIR\fR 4
  .IX Item "TMPDIR"
! If \fBTMPDIR\fR is set, it specifies the directory to use for temporary
! files.  GCC uses temporary files to hold the output of one stage of
  compilation which is to be used as input to the next stage: for example,
  the output of the preprocessor, which is the input to the compiler
  proper.
! .IP \fBGCC_COMPARE_DEBUG\fR 4
  .IX Item "GCC_COMPARE_DEBUG"
! Setting \fBGCC_COMPARE_DEBUG\fR is nearly equivalent to passing
  \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
  of this option for more details.
! .IP \fBGCC_EXEC_PREFIX\fR 4
  .IX Item "GCC_EXEC_PREFIX"
! If \fBGCC_EXEC_PREFIX\fR is set, it specifies a prefix to use in the
  names of the subprograms executed by the compiler.  No slash is added
  when this prefix is combined with the name of a subprogram, but you can
  specify a prefix that ends with a slash if you wish.
  .Sp
! If \fBGCC_EXEC_PREFIX\fR is not set, GCC attempts to figure out
  an appropriate prefix to use based on the pathname it is invoked with.
  .Sp
! If GCC cannot find the subprogram using the specified prefix, it
  tries looking in the usual places for the subprogram.
  .Sp
! The default value of \fBGCC_EXEC_PREFIX\fR is
! \&\fIprefix/lib/gcc/\fR where \fIprefix\fR is the prefix to
  the installed compiler. In many cases \fIprefix\fR is the value
  of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
  .Sp
*************** used for linking.
*** 35705,35771 ****
  In addition, the prefix is used in an unusual way in finding the
  directories to search for header files.  For each of the standard
  directories whose name normally begins with \fB/usr/local/lib/gcc\fR
! (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
  replacing that beginning with the specified prefix to produce an
! alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 searches
  \&\fIfoo/bar\fR just before it searches the standard directory 
  \&\fI/usr/local/lib/bar\fR.
  If a standard directory begins with the configured
  \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
! \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
! .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
  .IX Item "COMPILER_PATH"
! The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
! directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
  specified when searching for subprograms, if it cannot find the
! subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
! .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
  .IX Item "LIBRARY_PATH"
! The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
! directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
! \&\s-1GCC\s0 tries the directories thus specified when searching for special
! linker files, if it cannot find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
! using \s-1GCC\s0 also uses these directories when searching for ordinary
  libraries for the \fB\-l\fR option (but directories specified with
  \&\fB\-L\fR come first).
! .IP "\fB\s-1LANG\s0\fR" 4
  .IX Item "LANG"
  This variable is used to pass locale information to the compiler.  One way in
  which this information is used is to determine the character set to be used
! when character literals, string literals and comments are parsed in C and \*(C+.
  When the compiler is configured to allow multibyte characters,
! the following values for \fB\s-1LANG\s0\fR are recognized:
  .RS 4
! .IP "\fBC\-JIS\fR" 4
  .IX Item "C-JIS"
! Recognize \s-1JIS\s0 characters.
! .IP "\fBC\-SJIS\fR" 4
  .IX Item "C-SJIS"
! Recognize \s-1SJIS\s0 characters.
! .IP "\fBC\-EUCJP\fR" 4
  .IX Item "C-EUCJP"
! Recognize \s-1EUCJP\s0 characters.
  .RE
  .RS 4
  .Sp
! If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
  compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
  recognize and translate multibyte characters.
  .RE
! .IP "\fB\s-1GCC_EXTRA_DIAGNOSTIC_OUTPUT\s0\fR" 4
  .IX Item "GCC_EXTRA_DIAGNOSTIC_OUTPUT"
! If \fB\s-1GCC_EXTRA_DIAGNOSTIC_OUTPUT\s0\fR is set to one of the following values,
! then additional text will be emitted to stderr when fix-it hints are
  emitted.  \fB\-fdiagnostics\-parseable\-fixits\fR and
  \&\fB\-fno\-diagnostics\-parseable\-fixits\fR take precedence over this
  environment variable.
  .RS 4
! .IP "\fBfixits\-v1\fR" 4
  .IX Item "fixits-v1"
! Emit parseable fix-it hints, equivalent to
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  In particular, columns are
  expressed as a count of bytes, starting at byte 1 for the initial column.
! .IP "\fBfixits\-v2\fR" 4
  .IX Item "fixits-v2"
  As \f(CW\*(C`fixits\-v1\*(C'\fR, but columns are expressed as display columns,
  as per \fB\-fdiagnostics\-column\-unit=display\fR.
--- 35639,35705 ----
  In addition, the prefix is used in an unusual way in finding the
  directories to search for header files.  For each of the standard
  directories whose name normally begins with \fB/usr/local/lib/gcc\fR
! (more precisely, with the value of \fBGCC_INCLUDE_DIR\fR), GCC tries
  replacing that beginning with the specified prefix to produce an
! alternate directory name.  Thus, with \fB\-Bfoo/\fR, GCC searches
  \&\fIfoo/bar\fR just before it searches the standard directory 
  \&\fI/usr/local/lib/bar\fR.
  If a standard directory begins with the configured
  \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
! \&\fBGCC_EXEC_PREFIX\fR when looking for header files.
! .IP \fBCOMPILER_PATH\fR 4
  .IX Item "COMPILER_PATH"
! The value of \fBCOMPILER_PATH\fR is a colon\-separated list of
! directories, much like \fBPATH\fR.  GCC tries the directories thus
  specified when searching for subprograms, if it cannot find the
! subprograms using \fBGCC_EXEC_PREFIX\fR.
! .IP \fBLIBRARY_PATH\fR 4
  .IX Item "LIBRARY_PATH"
! The value of \fBLIBRARY_PATH\fR is a colon\-separated list of
! directories, much like \fBPATH\fR.  When configured as a native compiler,
! GCC tries the directories thus specified when searching for special
! linker files, if it cannot find them using \fBGCC_EXEC_PREFIX\fR.  Linking
! using GCC also uses these directories when searching for ordinary
  libraries for the \fB\-l\fR option (but directories specified with
  \&\fB\-L\fR come first).
! .IP \fBLANG\fR 4
  .IX Item "LANG"
  This variable is used to pass locale information to the compiler.  One way in
  which this information is used is to determine the character set to be used
! when character literals, string literals and comments are parsed in C and C++.
  When the compiler is configured to allow multibyte characters,
! the following values for \fBLANG\fR are recognized:
  .RS 4
! .IP \fBC\-JIS\fR 4
  .IX Item "C-JIS"
! Recognize JIS characters.
! .IP \fBC\-SJIS\fR 4
  .IX Item "C-SJIS"
! Recognize SJIS characters.
! .IP \fBC\-EUCJP\fR 4
  .IX Item "C-EUCJP"
! Recognize EUCJP characters.
  .RE
  .RS 4
  .Sp
! If \fBLANG\fR is not defined, or if it has some other value, then the
  compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
  recognize and translate multibyte characters.
  .RE
! .IP \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR 4
  .IX Item "GCC_EXTRA_DIAGNOSTIC_OUTPUT"
! If \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR is set to one of the following values,
! then additional text will be emitted to stderr when fix\-it hints are
  emitted.  \fB\-fdiagnostics\-parseable\-fixits\fR and
  \&\fB\-fno\-diagnostics\-parseable\-fixits\fR take precedence over this
  environment variable.
  .RS 4
! .IP \fBfixits\-v1\fR 4
  .IX Item "fixits-v1"
! Emit parseable fix\-it hints, equivalent to
  \&\fB\-fdiagnostics\-parseable\-fixits\fR.  In particular, columns are
  expressed as a count of bytes, starting at byte 1 for the initial column.
! .IP \fBfixits\-v2\fR 4
  .IX Item "fixits-v2"
  As \f(CW\*(C`fixits\-v1\*(C'\fR, but columns are expressed as display columns,
  as per \fB\-fdiagnostics\-column\-unit=display\fR.
*************** as per \fB\-fdiagnostics\-column\-unit=d
*** 35775,35797 ****
  .PP
  Some additional environment variables affect the behavior of the
  preprocessor.
! .IP "\fB\s-1CPATH\s0\fR" 4
  .IX Item "CPATH"
  .PD 0
! .IP "\fBC_INCLUDE_PATH\fR" 4
  .IX Item "C_INCLUDE_PATH"
! .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
  .IX Item "CPLUS_INCLUDE_PATH"
! .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
  .IX Item "OBJC_INCLUDE_PATH"
  .PD
! Each variable's value is a list of directories separated by a special
! character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
! The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
! determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
  semicolon, and for almost all other targets it is a colon.
  .Sp
! \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
  specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
  options on the command line.  This environment variable is used
  regardless of which language is being preprocessed.
--- 35709,35731 ----
  .PP
  Some additional environment variables affect the behavior of the
  preprocessor.
! .IP \fBCPATH\fR 4
  .IX Item "CPATH"
  .PD 0
! .IP \fBC_INCLUDE_PATH\fR 4
  .IX Item "C_INCLUDE_PATH"
! .IP \fBCPLUS_INCLUDE_PATH\fR 4
  .IX Item "CPLUS_INCLUDE_PATH"
! .IP \fBOBJC_INCLUDE_PATH\fR 4
  .IX Item "OBJC_INCLUDE_PATH"
  .PD
! Each variable\*(Aqs value is a list of directories separated by a special
! character, much like \fBPATH\fR, in which to look for header files.
! The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target\-dependent and
! determined at GCC build time.  For Microsoft Windows\-based targets it is a
  semicolon, and for almost all other targets it is a colon.
  .Sp
! \&\fBCPATH\fR specifies a list of directories to be searched as if
  specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
  options on the command line.  This environment variable is used
  regardless of which language is being preprocessed.
*************** paths given with \fB\-isystem\fR options
*** 35804,35819 ****
  In all these variables, an empty element instructs the compiler to
  search its current working directory.  Empty elements can appear at the
  beginning or end of a path.  For instance, if the value of
! \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
  effect as \fB\-I.\ \-I/special/include\fR.
! .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
  .IX Item "DEPENDENCIES_OUTPUT"
  If this variable is set, its value specifies how to output
! dependencies for Make based on the non-system header files processed
  by the compiler.  System header files are ignored in the dependency
  output.
  .Sp
! The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
  which case the Make rules are written to that file, guessing the target
  name from the source file name.  Or the value can have the form
  \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
--- 35738,35753 ----
  In all these variables, an empty element instructs the compiler to
  search its current working directory.  Empty elements can appear at the
  beginning or end of a path.  For instance, if the value of
! \&\fBCPATH\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
  effect as \fB\-I.\ \-I/special/include\fR.
! .IP \fBDEPENDENCIES_OUTPUT\fR 4
  .IX Item "DEPENDENCIES_OUTPUT"
  If this variable is set, its value specifies how to output
! dependencies for Make based on the non\-system header files processed
  by the compiler.  System header files are ignored in the dependency
  output.
  .Sp
! The value of \fBDEPENDENCIES_OUTPUT\fR can be just a file name, in
  which case the Make rules are written to that file, guessing the target
  name from the source file name.  Or the value can have the form
  \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
*************** file \fIfile\fR using \fItarget\fR as th
*** 35822,35894 ****
  In other words, this environment variable is equivalent to combining
  the options \fB\-MM\fR and \fB\-MF\fR,
  with an optional \fB\-MT\fR switch too.
! .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
  .IX Item "SUNPRO_DEPENDENCIES"
! This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
  except that system header files are not ignored, so it implies
  \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
  main input file is omitted.
! .IP "\fB\s-1SOURCE_DATE_EPOCH\s0\fR" 4
  .IX Item "SOURCE_DATE_EPOCH"
! If this variable is set, its value specifies a \s-1UNIX\s0 timestamp to be
  used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
  and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
  reproducible.
  .Sp
! The value of \fB\s-1SOURCE_DATE_EPOCH\s0\fR must be a \s-1UNIX\s0 timestamp,
  defined as the number of seconds (excluding leap seconds) since
! 01 Jan 1970 00:00:00 represented in \s-1ASCII\s0; identical to the output of
  \&\f(CW\*(C`date +%s\*(C'\fR on GNU/Linux and other systems that support the
  \&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
  .Sp
  The value should be a known timestamp such as the last modification
  time of the source or package and it should be set by the build
  process.
! .SH "BUGS"
  .IX Header "BUGS"
  For instructions on reporting bugs, see
  <\fBhttps://gcc.gnu.org/bugs/\fR>.
! .SH "FOOTNOTES"
  .IX Header "FOOTNOTES"
! .IP "1." 4
  On some systems, \fBgcc \-shared\fR
  needs to build supplementary stub code for constructors to work.  On
! multi-libbed systems, \fBgcc \-shared\fR must select the correct support
  libraries to link against.  Failing to supply the correct flags may lead
  to subtle defects.  Supplying them in cases where they are not necessary
  is innocuous.  \fB\-shared\fR suppresses the addition of startup code
! to alter the floating-point environment as done with \fB\-ffast\-math\fR,
  \&\fB\-Ofast\fR or \fB\-funsafe\-math\-optimizations\fR on some targets.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1)
  and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
  \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
! .SH "AUTHOR"
  .IX Header "AUTHOR"
  See the Info entry for \fBgcc\fR, or
  <\fBhttps://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
! for contributors to \s-1GCC.\s0
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 1988\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
! Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 35756,35828 ----
  In other words, this environment variable is equivalent to combining
  the options \fB\-MM\fR and \fB\-MF\fR,
  with an optional \fB\-MT\fR switch too.
! .IP \fBSUNPRO_DEPENDENCIES\fR 4
  .IX Item "SUNPRO_DEPENDENCIES"
! This variable is the same as \fBDEPENDENCIES_OUTPUT\fR (see above),
  except that system header files are not ignored, so it implies
  \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
  main input file is omitted.
! .IP \fBSOURCE_DATE_EPOCH\fR 4
  .IX Item "SOURCE_DATE_EPOCH"
! If this variable is set, its value specifies a UNIX timestamp to be
  used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
  and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
  reproducible.
  .Sp
! The value of \fBSOURCE_DATE_EPOCH\fR must be a UNIX timestamp,
  defined as the number of seconds (excluding leap seconds) since
! 01 Jan 1970 00:00:00 represented in ASCII; identical to the output of
  \&\f(CW\*(C`date +%s\*(C'\fR on GNU/Linux and other systems that support the
  \&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
  .Sp
  The value should be a known timestamp such as the last modification
  time of the source or package and it should be set by the build
  process.
! .SH BUGS
  .IX Header "BUGS"
  For instructions on reporting bugs, see
  <\fBhttps://gcc.gnu.org/bugs/\fR>.
! .SH FOOTNOTES
  .IX Header "FOOTNOTES"
! .IP 1. 4
  On some systems, \fBgcc \-shared\fR
  needs to build supplementary stub code for constructors to work.  On
! multi\-libbed systems, \fBgcc \-shared\fR must select the correct support
  libraries to link against.  Failing to supply the correct flags may lead
  to subtle defects.  Supplying them in cases where they are not necessary
  is innocuous.  \fB\-shared\fR suppresses the addition of startup code
! to alter the floating\-point environment as done with \fB\-ffast\-math\fR,
  \&\fB\-Ofast\fR or \fB\-funsafe\-math\-optimizations\fR on some targets.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7),
! \&\fBcpp\fR\|(1), \fBgcov\fR\|(1), \fBas\fR\|(1), \fBld\fR\|(1), \fBgdb\fR\|(1)
  and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
  \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
! .SH AUTHOR
  .IX Header "AUTHOR"
  See the Info entry for \fBgcc\fR, or
  <\fBhttps://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
! for contributors to GCC.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 1988\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gcc.info gcc-14.3.0-RC-20260619/gcc/doc/gcc.info
*** gcc-14.3.0/gcc/doc/gcc.info	Fri May 23 11:19:50 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gcc.info	Fri Jun 19 07:07:46 2026
***************
*** 1,8 ****
! This is gcc.info, produced by makeinfo version 6.5 from gcc.texi.
  
  This file documents the use of the GNU compilers.
  
!  Copyright (C) 1988-2024 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
--- 1,8 ----
! This is gcc.info, produced by makeinfo version 7.1 from gcc.texi.
  
  This file documents the use of the GNU compilers.
  
!  Copyright © 1988-2024 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
*************** INFO-DIR-SECTION Software development
*** 25,41 ****
  START-INFO-DIR-ENTRY
  * gcc: (gcc).                  The GNU Compiler Collection.
  * g++: (gcc).                  The GNU C++ compiler.
! * gcov: (gcc) Gcov.            'gcov'--a test coverage program.
! * gcov-tool: (gcc) Gcov-tool.  'gcov-tool'--an offline gcda profile processing program.
! * gcov-dump: (gcc) Gcov-dump.  'gcov-dump'--an offline gcda and gcno profile dump tool.
! * lto-dump: (gcc) lto-dump.    'lto-dump'--Tool for
  dumping LTO object files.
  END-INFO-DIR-ENTRY
  
  
   This file documents the use of the GNU compilers.
  
!  Copyright (C) 1988-2024 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
--- 25,41 ----
  START-INFO-DIR-ENTRY
  * gcc: (gcc).                  The GNU Compiler Collection.
  * g++: (gcc).                  The GNU C++ compiler.
! * gcov: (gcc) Gcov.            ‘gcov’--a test coverage program.
! * gcov-tool: (gcc) Gcov-tool.  ‘gcov-tool’--an offline gcda profile processing program.
! * gcov-dump: (gcc) Gcov-dump.  ‘gcov-dump’--an offline gcda and gcno profile dump tool.
! * lto-dump: (gcc) lto-dump.    ‘lto-dump’--Tool for
  dumping LTO object files.
  END-INFO-DIR-ENTRY
  
  
   This file documents the use of the GNU compilers.
  
!  Copyright © 1988-2024 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
*************** Free Documentation License".
*** 56,69 ****
       funds for GNU development.
  
  
! File: gcc.info,  Node: Top,  Next: G++ and GCC
  
  Introduction
  ************
  
  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 (GCC) version 14.3.0.  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.  *Note Introduction: (gccint)Top.
--- 56,69 ----
       funds for GNU development.
  
  
! File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (dir)
  
  Introduction
  ************
  
  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 (GCC) version 14.3.1.  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.  *Note Introduction: (gccint)Top.
*************** documented in a separate manual.  *Note
*** 72,88 ****
  
  * G++ and GCC::     You can compile C or C++ programs.
  * Standards::       Language standards supported by GCC.
! * Invoking GCC::    Command options supported by 'gcc'.
  * C Implementation:: How GCC implements the ISO C specification.
  * C++ Implementation:: How GCC implements the ISO C++ specification.
  * C Extensions::    GNU extensions to the C language family.
  * C++ Extensions::  GNU extensions to the C++ language.
  * Objective-C::     GNU Objective-C runtime features.
  * Compatibility::   Binary Compatibility
! * Gcov::            'gcov'--a test coverage program.
! * Gcov-tool::       'gcov-tool'--an offline gcda profile processing program.
! * Gcov-dump::       'gcov-dump'--an offline gcda and gcno profile dump tool.
! * lto-dump::        'lto-dump'--Tool for dumping LTO
  object files.
  * Trouble::         If you have trouble using GCC.
  * Bugs::            How, why and where to report bugs.
--- 72,88 ----
  
  * G++ and GCC::     You can compile C or C++ programs.
  * Standards::       Language standards supported by GCC.
! * Invoking GCC::    Command options supported by ‘gcc’.
  * C Implementation:: How GCC implements the ISO C specification.
  * C++ Implementation:: How GCC implements the ISO C++ specification.
  * C Extensions::    GNU extensions to the C language family.
  * C++ Extensions::  GNU extensions to the C++ language.
  * Objective-C::     GNU Objective-C runtime features.
  * Compatibility::   Binary Compatibility
! * Gcov::            ‘gcov’--a test coverage program.
! * Gcov-tool::       ‘gcov-tool’--an offline gcda profile processing program.
! * Gcov-dump::       ‘gcov-dump’--an offline gcda and gcno profile dump tool.
! * lto-dump::        ‘lto-dump’--Tool for dumping LTO
  object files.
  * Trouble::         If you have trouble using GCC.
  * Bugs::            How, why and where to report bugs.
*************** distribution of compilers for several ma
*** 110,121 ****
  These languages currently include C, C++, Objective-C, Objective-C++,
  Fortran, Ada, D, and Go.
  
!  The abbreviation "GCC" has multiple meanings in common use.  The
  current official meaning is "GNU Compiler Collection", which refers
  generically to the complete suite of tools.  The name historically stood
  for "GNU C Compiler", and this usage is still common when the emphasis
  is on compiling C programs.  Finally, the name is also used when
! speaking of the "language-independent" component of GCC: code shared
  among the compilers for all supported languages.
  
   The language-independent component of GCC includes the majority of the
--- 110,121 ----
  These languages currently include C, C++, Objective-C, Objective-C++,
  Fortran, Ada, D, and Go.
  
!  The abbreviation “GCC” has multiple meanings in common use.  The
  current official meaning is "GNU Compiler Collection", which refers
  generically to the complete suite of tools.  The name historically stood
  for "GNU C Compiler", and this usage is still common when the emphasis
  is on compiling C programs.  Finally, the name is also used when
! speaking of the “language-independent” component of GCC: code shared
  among the compilers for all supported languages.
  
   The language-independent component of GCC includes the majority of the
*************** compiler by its own name, or as GCC.  Ei
*** 137,143 ****
  have been implemented as "preprocessors" which emit another high level
  language such as C.  None of the compilers included in GCC are
  implemented this way; they all generate machine code directly.  This
! sort of preprocessor should not be confused with the "C preprocessor",
  which is an integral feature of the C, C++, Objective-C and
  Objective-C++ languages.
  
--- 137,143 ----
  have been implemented as "preprocessors" which emit another high level
  language such as C.  None of the compilers included in GCC are
  implemented this way; they all generate machine code directly.  This
! sort of preprocessor should not be confused with the “C preprocessor”,
  which is an integral feature of the C, C++, Objective-C and
  Objective-C++ languages.
  
*************** published in 1990.  This standard was ra
*** 160,170 ****
  between these publications, although the sections of the ANSI standard
  were renumbered and became clauses in the ISO standard.  The ANSI
  standard, but not the ISO standard, also came with a Rationale document.
! This standard, in both its forms, is commonly known as "C89", or
! occasionally as "C90", from the dates of ratification.  To select this
! standard in GCC, use one of the options '-ansi', '-std=c90' or
! '-std=iso9899:1990'; to obtain all the diagnostics required by the
! standard, you should also specify '-pedantic' (or '-pedantic-errors' if
  you want them to be errors rather than warnings).  *Note Options
  Controlling C Dialect: C Dialect Options.
  
--- 160,170 ----
  between these publications, although the sections of the ANSI standard
  were renumbered and became clauses in the ISO standard.  The ANSI
  standard, but not the ISO standard, also came with a Rationale document.
! This standard, in both its forms, is commonly known as “C89”, or
! occasionally as “C90”, from the dates of ratification.  To select this
! standard in GCC, use one of the options ‘-ansi’, ‘-std=c90’ or
! ‘-std=iso9899:1990’; to obtain all the diagnostics required by the
! standard, you should also specify ‘-pedantic’ (or ‘-pedantic-errors’ if
  you want them to be errors rather than warnings).  *Note Options
  Controlling C Dialect: C Dialect Options.
  
*************** Corrigenda published in 1994 and 1996.
*** 173,243 ****
  uncorrected version.
  
   An amendment to the 1990 standard was published in 1995.  This
! amendment added digraphs and '__STDC_VERSION__' to the language, but
  otherwise concerned the library.  This amendment is commonly known as
! "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
! select this standard in GCC, use the option '-std=iso9899:199409' (with,
! as for other standard versions, '-pedantic' to receive all required
  diagnostics).
  
   A new edition of the ISO C standard was published in 1999 as ISO/IEC
! 9899:1999, and is commonly known as "C99".  (While in development,
! drafts of this standard version were referred to as "C9X".) GCC has
  substantially complete support for this standard version; see
  <https://gcc.gnu.org/c99status.html> for details.  To select this
! standard, use '-std=c99' or '-std=iso9899:1999'.
  
   Errors in the 1999 ISO C standard were corrected in three Technical
  Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
  uncorrected version.
  
!  A fourth version of the C standard, known as "C11", was published in
  2011 as ISO/IEC 9899:2011.  (While in development, drafts of this
! standard version were referred to as "C1X".) GCC has substantially
! complete support for this standard, enabled with '-std=c11' or
! '-std=iso9899:2011'.  A version with corrections integrated was prepared
! in 2017 and published in 2018 as ISO/IEC 9899:2018; it is known as "C17"
! and is supported with '-std=c17' or '-std=iso9899:2017'; the corrections
! are also applied with '-std=c11', and the only difference between the
! options is the value of '__STDC_VERSION__'.
  
!  A further version of the C standard, known as "C23", is under
  development and expected to be published in 2024 as ISO/IEC 9899:2024.
  (While in development, drafts of this standard version were referred to
! as "C2X".) Experimental and incomplete support for this is enabled with
! '-std=c23' or '-std=iso9899:2024'.
  
   By default, GCC provides some extensions to the C language that, on
  rare occasions conflict with the C standard.  *Note Extensions to the C
  Language Family: C Extensions.  Some features that are part of the C99
  standard are accepted as extensions in C90 mode, and some features that
  are part of the C11 standard are accepted as extensions in C90 and C99
! modes.  Use of the '-std' options listed above disables these extensions
  where they conflict with the C standard version selected.  You may also
  select an extended version of the C language explicitly with
! '-std=gnu90' (for C90 with GNU extensions), '-std=gnu99' (for C99 with
! GNU extensions) or '-std=gnu11' (for C11 with GNU extensions).
  
   The default, if no C language dialect options are given, is
! '-std=gnu17'.
  
   The ISO C standard defines (in clause 4) two classes of conforming
! implementation.  A "conforming hosted implementation" supports the whole
! standard including all the library facilities; a "conforming
! freestanding implementation" is only required to provide certain library
! facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
! '<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
! those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
! '<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
  in C99, are not required for freestanding implementations.
  
   The standard also defines two environments for programs, a
! "freestanding environment", required of all implementations and which
  may not have library facilities beyond those required of freestanding
  implementations, where the handling of program startup and termination
! are implementation-defined; and a "hosted environment", which is not
  required, in which all the library facilities are provided and startup
! is through a function 'int main (void)' or 'int main (int, char *[])'.
  An OS kernel is an example of a program running in a freestanding
  environment; a program using the facilities of an operating system is an
  example of a program running in a hosted environment.
--- 173,243 ----
  uncorrected version.
  
   An amendment to the 1990 standard was published in 1995.  This
! amendment added digraphs and ‘__STDC_VERSION__’ to the language, but
  otherwise concerned the library.  This amendment is commonly known as
! “AMD1”; the amended standard is sometimes known as “C94” or “C95”.  To
! select this standard in GCC, use the option ‘-std=iso9899:199409’ (with,
! as for other standard versions, ‘-pedantic’ to receive all required
  diagnostics).
  
   A new edition of the ISO C standard was published in 1999 as ISO/IEC
! 9899:1999, and is commonly known as “C99”.  (While in development,
! drafts of this standard version were referred to as “C9X”.) GCC has
  substantially complete support for this standard version; see
  <https://gcc.gnu.org/c99status.html> for details.  To select this
! standard, use ‘-std=c99’ or ‘-std=iso9899:1999’.
  
   Errors in the 1999 ISO C standard were corrected in three Technical
  Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
  uncorrected version.
  
!  A fourth version of the C standard, known as “C11”, was published in
  2011 as ISO/IEC 9899:2011.  (While in development, drafts of this
! standard version were referred to as “C1X”.) GCC has substantially
! complete support for this standard, enabled with ‘-std=c11’ or
! ‘-std=iso9899:2011’.  A version with corrections integrated was prepared
! in 2017 and published in 2018 as ISO/IEC 9899:2018; it is known as “C17”
! and is supported with ‘-std=c17’ or ‘-std=iso9899:2017’; the corrections
! are also applied with ‘-std=c11’, and the only difference between the
! options is the value of ‘__STDC_VERSION__’.
  
!  A further version of the C standard, known as “C23”, is under
  development and expected to be published in 2024 as ISO/IEC 9899:2024.
  (While in development, drafts of this standard version were referred to
! as “C2X”.) Experimental and incomplete support for this is enabled with
! ‘-std=c23’ or ‘-std=iso9899:2024’.
  
   By default, GCC provides some extensions to the C language that, on
  rare occasions conflict with the C standard.  *Note Extensions to the C
  Language Family: C Extensions.  Some features that are part of the C99
  standard are accepted as extensions in C90 mode, and some features that
  are part of the C11 standard are accepted as extensions in C90 and C99
! modes.  Use of the ‘-std’ options listed above disables these extensions
  where they conflict with the C standard version selected.  You may also
  select an extended version of the C language explicitly with
! ‘-std=gnu90’ (for C90 with GNU extensions), ‘-std=gnu99’ (for C99 with
! GNU extensions) or ‘-std=gnu11’ (for C11 with GNU extensions).
  
   The default, if no C language dialect options are given, is
! ‘-std=gnu17’.
  
   The ISO C standard defines (in clause 4) two classes of conforming
! implementation.  A “conforming hosted implementation” supports the whole
! standard including all the library facilities; a “conforming
! freestanding implementation” is only required to provide certain library
! facilities: those in ‘<float.h>’, ‘<limits.h>’, ‘<stdarg.h>’, and
! ‘<stddef.h>’; since AMD1, also those in ‘<iso646.h>’; since C99, also
! those in ‘<stdbool.h>’ and ‘<stdint.h>’; and since C11, also those in
! ‘<stdalign.h>’ and ‘<stdnoreturn.h>’.  In addition, complex types, added
  in C99, are not required for freestanding implementations.
  
   The standard also defines two environments for programs, a
! “freestanding environment”, required of all implementations and which
  may not have library facilities beyond those required of freestanding
  implementations, where the handling of program startup and termination
! are implementation-defined; and a “hosted environment”, which is not
  required, in which all the library facilities are provided and startup
! is through a function ‘int main (void)’ or ‘int main (int, char *[])’.
  An OS kernel is an example of a program running in a freestanding
  environment; a program using the facilities of an operating system is an
  example of a program running in a hosted environment.
*************** example of a program running in a hosted
*** 245,255 ****
   GCC aims towards being usable as a conforming freestanding
  implementation, or as the compiler for a conforming hosted
  implementation.  By default, it acts as the compiler for a hosted
! implementation, defining '__STDC_HOSTED__' as '1' and presuming that
  when the names of ISO C functions are used, they have the semantics
  defined in the standard.  To make it act as a conforming freestanding
  implementation for a freestanding environment, use the option
! '-ffreestanding'; it then defines '__STDC_HOSTED__' to '0' and does not
  make assumptions about the meanings of function names from the standard
  library, with exceptions noted below.  To build an OS kernel, you may
  well still need to make your own arrangements for linking and startup.
--- 245,255 ----
   GCC aims towards being usable as a conforming freestanding
  implementation, or as the compiler for a conforming hosted
  implementation.  By default, it acts as the compiler for a hosted
! implementation, defining ‘__STDC_HOSTED__’ as ‘1’ and presuming that
  when the names of ISO C functions are used, they have the semantics
  defined in the standard.  To make it act as a conforming freestanding
  implementation for a freestanding environment, use the option
! ‘-ffreestanding’; it then defines ‘__STDC_HOSTED__’ to ‘0’ and does not
  make assumptions about the meanings of function names from the standard
  library, with exceptions noted below.  To build an OS kernel, you may
  well still need to make your own arrangements for linking and startup.
*************** a hosted environment, you need to find t
*** 262,273 ****
  the GNU C library).  *Note Standard Libraries: Standard Libraries.
  
   Most of the compiler support routines used by GCC are present in
! 'libgcc', but there are a few exceptions.  GCC requires the freestanding
! environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
! Contrary to the standards covering 'memcpy' GCC expects the case of an
  exact overlap of source and destination to work and not invoke undefined
! behavior.  Finally, if '__builtin_trap' is used, and the target does not
! implement the 'trap' pattern, then GCC emits a call to 'abort'.
  
   For references to Technical Corrigenda, Rationale documents and
  information concerning the history of C that is available online, see
--- 262,273 ----
  the GNU C library).  *Note Standard Libraries: Standard Libraries.
  
   Most of the compiler support routines used by GCC are present in
! ‘libgcc’, but there are a few exceptions.  GCC requires the freestanding
! environment provide ‘memcpy’, ‘memmove’, ‘memset’ and ‘memcmp’.
! Contrary to the standards covering ‘memcpy’ GCC expects the case of an
  exact overlap of source and destination to work and not invoke undefined
! behavior.  Finally, if ‘__builtin_trap’ is used, and the target does not
! implement the ‘trap’ pattern, then GCC emits a call to ‘abort’.
  
   For references to Technical Corrigenda, Rationale documents and
  information concerning the history of C that is available online, see
*************** GCC supports the original ISO C++ standa
*** 282,292 ****
   The original ISO C++ standard was published as the ISO standard
  (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
  2003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
! C++03, respectively.  GCC implements the majority of C++98 ('export' is
  a notable exception) and most of the changes in C++03.  To select this
! standard in GCC, use one of the options '-ansi', '-std=c++98', or
! '-std=c++03'; to obtain all the diagnostics required by the standard,
! you should also specify '-pedantic' (or '-pedantic-errors' if you want
  them to be errors rather than warnings).
  
   A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
--- 282,292 ----
   The original ISO C++ standard was published as the ISO standard
  (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
  2003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
! C++03, respectively.  GCC implements the majority of C++98 (‘export’ is
  a notable exception) and most of the changes in C++03.  To select this
! standard in GCC, use one of the options ‘-ansi’, ‘-std=c++98’, or
! ‘-std=c++03’; to obtain all the diagnostics required by the standard,
! you should also specify ‘-pedantic’ (or ‘-pedantic-errors’ if you want
  them to be errors rather than warnings).
  
   A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
*************** and is referred to as C++11; before its
*** 294,343 ****
  referred to as C++0x.  C++11 contains several changes to the C++
  language, all of which have been implemented in GCC.  For details see
  <https://gcc.gnu.org/projects/cxx-status.html#cxx11>.  To select this
! standard in GCC, use the option '-std=c++11'.
  
   Another revised ISO C++ standard was published in 2014 as ISO/IEC
  14882:2014, and is referred to as C++14; before its publication it was
  sometimes referred to as C++1y.  C++14 contains several further changes
  to the C++ language, all of which have been implemented in GCC.  For
  details see <https://gcc.gnu.org/projects/cxx-status.html#cxx14>.  To
! select this standard in GCC, use the option '-std=c++14'.
  
   The C++ language was further revised in 2017 and ISO/IEC 14882:2017 was
  published.  This is referred to as C++17, and before publication was
  often referred to as C++1z.  GCC supports all the changes in that
  specification.  For further details see
  <https://gcc.gnu.org/projects/cxx-status.html#cxx17>.  Use the option
! '-std=c++17' to select this variant of C++.
  
   Another revised ISO C++ standard was published in 2020 as ISO/IEC
  14882:2020, and is referred to as C++20; before its publication it was
  sometimes referred to as C++2a.  GCC supports most of the changes in the
  new specification.  For further details see
  <https://gcc.gnu.org/projects/cxx-status.html#cxx20>.  To select this
! standard in GCC, use the option '-std=c++20'.
  
   More information about the C++ standards is available on the ISO C++
  committee's web site at <https://www.open-std.org/jtc1/sc22/wg21/>.
  
   To obtain all the diagnostics required by any of the standard versions
! described above you should specify '-pedantic' or '-pedantic-errors',
  otherwise GCC will allow some non-ISO C++ features as extensions.  *Note
  Warning Options::.
  
   By default, GCC also provides some additional extensions to the C++
  language that on rare occasions conflict with the C++ standard.  *Note
! Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
  options listed above disables these extensions where they they conflict
  with the C++ standard version selected.  You may also select an extended
! version of the C++ language explicitly with '-std=gnu++98' (for C++98
! with GNU extensions), or '-std=gnu++11' (for C++11 with GNU extensions),
! or '-std=gnu++14' (for C++14 with GNU extensions), or '-std=gnu++17'
! (for C++17 with GNU extensions), or '-std=gnu++20' (for C++20 with GNU
  extensions).
  
   The default, if no C++ language dialect options are given, is
! '-std=gnu++17'.
  
  2.3 Objective-C and Objective-C++ Languages
  ===========================================
--- 294,343 ----
  referred to as C++0x.  C++11 contains several changes to the C++
  language, all of which have been implemented in GCC.  For details see
  <https://gcc.gnu.org/projects/cxx-status.html#cxx11>.  To select this
! standard in GCC, use the option ‘-std=c++11’.
  
   Another revised ISO C++ standard was published in 2014 as ISO/IEC
  14882:2014, and is referred to as C++14; before its publication it was
  sometimes referred to as C++1y.  C++14 contains several further changes
  to the C++ language, all of which have been implemented in GCC.  For
  details see <https://gcc.gnu.org/projects/cxx-status.html#cxx14>.  To
! select this standard in GCC, use the option ‘-std=c++14’.
  
   The C++ language was further revised in 2017 and ISO/IEC 14882:2017 was
  published.  This is referred to as C++17, and before publication was
  often referred to as C++1z.  GCC supports all the changes in that
  specification.  For further details see
  <https://gcc.gnu.org/projects/cxx-status.html#cxx17>.  Use the option
! ‘-std=c++17’ to select this variant of C++.
  
   Another revised ISO C++ standard was published in 2020 as ISO/IEC
  14882:2020, and is referred to as C++20; before its publication it was
  sometimes referred to as C++2a.  GCC supports most of the changes in the
  new specification.  For further details see
  <https://gcc.gnu.org/projects/cxx-status.html#cxx20>.  To select this
! standard in GCC, use the option ‘-std=c++20’.
  
   More information about the C++ standards is available on the ISO C++
  committee's web site at <https://www.open-std.org/jtc1/sc22/wg21/>.
  
   To obtain all the diagnostics required by any of the standard versions
! described above you should specify ‘-pedantic’ or ‘-pedantic-errors’,
  otherwise GCC will allow some non-ISO C++ features as extensions.  *Note
  Warning Options::.
  
   By default, GCC also provides some additional extensions to the C++
  language that on rare occasions conflict with the C++ standard.  *Note
! Options Controlling C++ Dialect: C++ Dialect Options.  Use of the ‘-std’
  options listed above disables these extensions where they they conflict
  with the C++ standard version selected.  You may also select an extended
! version of the C++ language explicitly with ‘-std=gnu++98’ (for C++98
! with GNU extensions), or ‘-std=gnu++11’ (for C++11 with GNU extensions),
! or ‘-std=gnu++14’ (for C++14 with GNU extensions), or ‘-std=gnu++17’
! (for C++17 with GNU extensions), or ‘-std=gnu++20’ (for C++20 with GNU
  extensions).
  
   The default, if no C++ language dialect options are given, is
! ‘-std=gnu++17’.
  
  2.3 Objective-C and Objective-C++ Languages
  ===========================================
*************** Objective-C are also available in Object
*** 353,359 ****
   GCC by default uses the GNU Objective-C runtime library, which is part
  of GCC and is not the same as the Apple/NeXT Objective-C runtime library
  used on Apple systems.  There are a number of differences documented in
! this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
  to switch between producing output that works with the GNU Objective-C
  runtime library and output that works with the Apple/NeXT Objective-C
  runtime library.
--- 353,359 ----
   GCC by default uses the GNU Objective-C runtime library, which is part
  of GCC and is not the same as the Apple/NeXT Objective-C runtime library
  used on Apple systems.  There are a number of differences documented in
! this manual.  The options ‘-fgnu-runtime’ and ‘-fnext-runtime’ allow you
  to switch between producing output that works with the GNU Objective-C
  runtime library and output that works with the Apple/NeXT Objective-C
  runtime library.
*************** The authoritative manual on traditional
*** 365,390 ****
  the original NeXTstep document.
  
   The Objective-C exception and synchronization syntax (that is, the
! keywords '@try', '@throw', '@catch', '@finally' and '@synchronized') is
! supported by GCC and is enabled with the option '-fobjc-exceptions'.
  The syntax is briefly documented in this manual and in the Objective-C
  2.0 manuals from Apple.
  
   The Objective-C 2.0 language extensions and features are automatically
! enabled; they include properties (via the '@property', '@synthesize' and
! '@dynamic keywords'), fast enumeration (not available in Objective-C++),
! attributes for methods (such as 'deprecated', 'noreturn', 'sentinel',
! 'format'), the 'unused' attribute for method arguments, the '@package'
! keyword for instance variables and the '@optional' and '@required'
  keywords in protocols.  You can disable all these Objective-C 2.0
! language extensions with the option '-fobjc-std=objc1', which causes the
  compiler to recognize the same Objective-C language syntax recognized by
  GCC 4.0, and to produce an error if one of the new features is used.
  
   GCC has currently no support for non-fragile instance variables.
  
   The authoritative manual on Objective-C 2.0 is available from Apple:
!    * 
       <https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html>
  
   For more information concerning the history of Objective-C that is
--- 365,390 ----
  the original NeXTstep document.
  
   The Objective-C exception and synchronization syntax (that is, the
! keywords ‘@try’, ‘@throw’, ‘@catch’, ‘@finally’ and ‘@synchronized’) is
! supported by GCC and is enabled with the option ‘-fobjc-exceptions’.
  The syntax is briefly documented in this manual and in the Objective-C
  2.0 manuals from Apple.
  
   The Objective-C 2.0 language extensions and features are automatically
! enabled; they include properties (via the ‘@property’, ‘@synthesize’ and
! ‘@dynamic keywords’), fast enumeration (not available in Objective-C++),
! attributes for methods (such as ‘deprecated’, ‘noreturn’, ‘sentinel’,
! ‘format’), the ‘unused’ attribute for method arguments, the ‘@package’
! keyword for instance variables and the ‘@optional’ and ‘@required’
  keywords in protocols.  You can disable all these Objective-C 2.0
! language extensions with the option ‘-fobjc-std=objc1’, which causes the
  compiler to recognize the same Objective-C language syntax recognized by
  GCC 4.0, and to produce an error if one of the new features is used.
  
   GCC has currently no support for non-fragile instance variables.
  
   The authoritative manual on Objective-C 2.0 is available from Apple:
!    • 
       <https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html>
  
   For more information concerning the history of Objective-C that is
*************** File: gcc.info,  Node: Invoking GCC,  Ne
*** 432,438 ****
  
  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 '-c' option says not
  to run the linker.  Then the output consists of object files output by
  the assembler.  *Note Options Controlling the Kind of Output: Overall
  Options.
--- 432,438 ----
  
  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 ‘-c’ option says not
  to run the linker.  Then the output consists of object files output by
  the assembler.  *Note Options Controlling the Kind of Output: Overall
  Options.
*************** for C programs; when an option is only u
*** 448,486 ****
  for a particular option does not mention a source language, you can use
  that option with all supported languages.
  
!  The usual way to run GCC is to run the executable called 'gcc', or
! 'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
  specific version of GCC. When you compile C++ programs, you should
! invoke GCC as 'g++' instead.  *Note Compiling C++ Programs: Invoking
! G++, for information about the differences in behavior between 'gcc' and
! 'g++' when compiling C++ programs.
  
!  The 'gcc' program accepts options and file names as operands.  Many
  options have multi-letter names; therefore multiple single-letter
! options may _not_ be grouped: '-dv' is very different from '-d -v'.
  
   You can mix options and other arguments.  For the most part, the order
  you use doesn't matter.  Order does matter when you use several options
! of the same kind; for example, if you specify '-L' more than once, the
  directories are searched in the order specified.  Also, the placement of
! the '-l' option is significant.
  
!  Many options have long names starting with '-f' or with '-W'--for
! example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
! have both positive and negative forms; the negative form of '-ffoo' is
! '-fno-foo'.  This manual documents only one of these two forms,
  whichever one is not the default.
  
   Some options take one or more arguments typically separated either by a
! space or by the equals sign ('=') from the option name.  Unless
  documented otherwise, an argument can be either numeric or a string.
  Numeric arguments must typically be small unsigned decimal or
! hexadecimal integers.  Hexadecimal arguments must begin with the '0x'
  prefix.  Arguments to options that specify a size threshold of some sort
  may be arbitrarily large decimal or hexadecimal integers followed by a
! byte size suffix designating a multiple of bytes such as 'kB' and 'KiB'
! for kilobyte and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
! mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on.  Such
  arguments are designated by 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
--- 448,486 ----
  for a particular option does not mention a source language, you can use
  that option with all supported languages.
  
!  The usual way to run GCC is to run the executable called ‘gcc’, or
! ‘MACHINE-gcc’ when cross-compiling, or ‘MACHINE-gcc-VERSION’ to run a
  specific version of GCC. When you compile C++ programs, you should
! invoke GCC as ‘g++’ instead.  *Note Compiling C++ Programs: Invoking
! G++, for information about the differences in behavior between ‘gcc’ and
! ‘g++’ when compiling C++ programs.
  
!  The ‘gcc’ program accepts options and file names as operands.  Many
  options have multi-letter names; therefore multiple single-letter
! options may _not_ be grouped: ‘-dv’ is very different from ‘-d -v’.
  
   You can mix options and other arguments.  For the most part, the order
  you use doesn't matter.  Order does matter when you use several options
! of the same kind; for example, if you specify ‘-L’ more than once, the
  directories are searched in the order specified.  Also, the placement of
! the ‘-l’ option is significant.
  
!  Many options have long names starting with ‘-f’ or with ‘-W’--for
! example, ‘-fmove-loop-invariants’, ‘-Wformat’ and so on.  Most of these
! have both positive and negative forms; the negative form of ‘-ffoo’ is
! ‘-fno-foo’.  This manual documents only one of these two forms,
  whichever one is not the default.
  
   Some options take one or more arguments typically separated either by a
! space or by the equals sign (‘=’) from the option name.  Unless
  documented otherwise, an argument can be either numeric or a string.
  Numeric arguments must typically be small unsigned decimal or
! hexadecimal integers.  Hexadecimal arguments must begin with the ‘0x’
  prefix.  Arguments to options that specify a size threshold of some sort
  may be arbitrarily large decimal or hexadecimal integers followed by a
! byte size suffix designating a multiple of bytes such as ‘kB’ and ‘KiB’
! for kilobyte and kibibyte, respectively, ‘MB’ and ‘MiB’ for megabyte and
! mebibyte, ‘GB’ and ‘GiB’ for gigabyte and gigibyte, and so on.  Such
  arguments are designated by 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
*************** file.
*** 1882,2076 ****
   For any given input file, the file name suffix determines what kind of
  compilation is done:
  
! 'FILE.c'
       C source code that must be preprocessed.
  
! 'FILE.i'
       C source code that should not be preprocessed.
  
! 'FILE.ii'
       C++ source code that should not be preprocessed.
  
! 'FILE.m'
       Objective-C source code.  Note that you must link with the
!      'libobjc' library to make an Objective-C program work.
  
! 'FILE.mi'
       Objective-C source code that should not be preprocessed.
  
! 'FILE.mm'
! 'FILE.M'
       Objective-C++ source code.  Note that you must link with the
!      'libobjc' library to make an Objective-C++ program work.  Note that
!      '.M' refers to a literal capital M.
  
! 'FILE.mii'
       Objective-C++ source code that should not be preprocessed.
  
! 'FILE.h'
       C, C++, Objective-C or Objective-C++ header file to be turned into
       a precompiled header (default), or C, C++ header file to be turned
!      into an Ada spec (via the '-fdump-ada-spec' switch).
  
! 'FILE.cc'
! 'FILE.cp'
! 'FILE.cxx'
! 'FILE.cpp'
! 'FILE.CPP'
! 'FILE.c++'
! 'FILE.C'
!      C++ source code that must be preprocessed.  Note that in '.cxx',
!      the last two letters must both be literally 'x'.  Likewise, '.C'
       refers to a literal capital C.
  
! 'FILE.mm'
! 'FILE.M'
       Objective-C++ source code that must be preprocessed.
  
! 'FILE.mii'
       Objective-C++ source code that should not be preprocessed.
  
! 'FILE.hh'
! 'FILE.H'
! 'FILE.hp'
! 'FILE.hxx'
! 'FILE.hpp'
! 'FILE.HPP'
! 'FILE.h++'
! 'FILE.tcc'
       C++ header file to be turned into a precompiled header or Ada spec.
  
! 'FILE.f'
! 'FILE.for'
! 'FILE.ftn'
! 'FILE.fi'
       Fixed form Fortran source code that should not be preprocessed.
  
! 'FILE.F'
! 'FILE.FOR'
! 'FILE.fpp'
! 'FILE.FPP'
! 'FILE.FTN'
       Fixed form Fortran source code that must be preprocessed (with the
       traditional preprocessor).
  
! 'FILE.f90'
! 'FILE.f95'
! 'FILE.f03'
! 'FILE.f08'
! 'FILE.fii'
       Free form Fortran source code that should not be preprocessed.
  
! 'FILE.F90'
! 'FILE.F95'
! 'FILE.F03'
! 'FILE.F08'
       Free form Fortran source code that must be preprocessed (with the
       traditional preprocessor).
  
! 'FILE.go'
       Go source code.
  
! 'FILE.d'
       D source code.
  
! 'FILE.di'
       D interface file.
  
! 'FILE.dd'
       D documentation code (Ddoc).
  
! 'FILE.ads'
       Ada source code file that contains a library unit declaration (a
       declaration of a package, subprogram, or generic, or a generic
       instantiation), or a library unit renaming declaration (a package,
       generic, or subprogram renaming declaration).  Such files are also
!      called "specs".
  
! 'FILE.adb'
       Ada source code file containing a library unit body (a subprogram
!      or package body).  Such files are also called "bodies".
  
! 'FILE.s'
       Assembler code.
  
! 'FILE.S'
! 'FILE.sx'
       Assembler code that must be preprocessed.
  
! 'OTHER'
       An object file to be fed straight into linking.  Any file name with
       no recognized suffix is treated this way.
  
!  You can specify the input language explicitly with the '-x' option:
  
! '-x LANGUAGE'
       Specify explicitly the LANGUAGE for the following input files
       (rather than letting the compiler choose a default based on the
       file name suffix).  This option applies to all following input
!      files until the next '-x' option.  Possible values for LANGUAGE
       are:
            c  c-header  cpp-output
            c++  c++-header  c++-system-header c++-user-header c++-cpp-output
!           objective-c  objective-c-header  objective-c-cpp-output
!           objective-c++ objective-c++-header objective-c++-cpp-output
            assembler  assembler-with-cpp
!           ada
            d
!           f77  f77-cpp-input f95  f95-cpp-input
            go
  
! '-x none'
       Turn off any specification of a language, so that subsequent files
       are handled according to their file name suffixes (as they are if
!      '-x' has not been used at all).
  
!  If you only want some of the stages of compilation, you can use '-x'
! (or filename suffixes) to tell 'gcc' where to start, and one of the
! options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
! some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
  nothing at all.
  
! '-c'
       Compile or assemble the source files, but do not link.  The linking
       stage simply is not done.  The ultimate output is in the form of an
       object file for each source file.
  
       By default, the object file name for a source file is made by
!      replacing the suffix '.c', '.i', '.s', etc., with '.o'.
  
       Unrecognized input files, not requiring compilation or assembly,
       are ignored.
  
! '-S'
       Stop after the stage of compilation proper; do not assemble.  The
       output is in the form of an assembler code file for each
       non-assembler input file specified.
  
       By default, the assembler file name for a source file is made by
!      replacing the suffix '.c', '.i', etc., with '.s'.
  
       Input files that don't require compilation are ignored.
  
! '-E'
       Stop after the preprocessing stage; do not run the compiler proper.
       The output is in the form of preprocessed source code, which is
       sent to the standard output.
  
       Input files that don't require preprocessing are ignored.
  
! '-o FILE'
       Place the primary output in file FILE.  This applies to whatever
       sort of output is being produced, whether it be an executable file,
       an object file, an assembler file or preprocessed C code.
  
!      If '-o' is not specified, the default is to put an executable file
!      in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
!      assembler file in 'SOURCE.s', a precompiled header file in
!      'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
       output.
  
!      Though '-o' names only the primary output, it also affects the
       naming of auxiliary and dump outputs.  See the examples below.
       Unless overridden, both auxiliary outputs and dump outputs are
       placed in the same directory as the primary output.  In auxiliary
--- 1882,2080 ----
   For any given input file, the file name suffix determines what kind of
  compilation is done:
  
! ‘FILE.c’
       C source code that must be preprocessed.
  
! ‘FILE.i’
       C source code that should not be preprocessed.
  
! ‘FILE.ii’
       C++ source code that should not be preprocessed.
  
! ‘FILE.m’
       Objective-C source code.  Note that you must link with the
!      ‘libobjc’ library to make an Objective-C program work.
  
! ‘FILE.mi’
       Objective-C source code that should not be preprocessed.
  
! ‘FILE.mm’
! ‘FILE.M’
       Objective-C++ source code.  Note that you must link with the
!      ‘libobjc’ library to make an Objective-C++ program work.  Note that
!      ‘.M’ refers to a literal capital M.
  
! ‘FILE.mii’
       Objective-C++ source code that should not be preprocessed.
  
! ‘FILE.h’
       C, C++, Objective-C or Objective-C++ header file to be turned into
       a precompiled header (default), or C, C++ header file to be turned
!      into an Ada spec (via the ‘-fdump-ada-spec’ switch).
  
! ‘FILE.cc’
! ‘FILE.cp’
! ‘FILE.cxx’
! ‘FILE.cpp’
! ‘FILE.CPP’
! ‘FILE.c++’
! ‘FILE.C’
!      C++ source code that must be preprocessed.  Note that in ‘.cxx’,
!      the last two letters must both be literally ‘x’.  Likewise, ‘.C’
       refers to a literal capital C.
  
! ‘FILE.mm’
! ‘FILE.M’
       Objective-C++ source code that must be preprocessed.
  
! ‘FILE.mii’
       Objective-C++ source code that should not be preprocessed.
  
! ‘FILE.hh’
! ‘FILE.H’
! ‘FILE.hp’
! ‘FILE.hxx’
! ‘FILE.hpp’
! ‘FILE.HPP’
! ‘FILE.h++’
! ‘FILE.tcc’
       C++ header file to be turned into a precompiled header or Ada spec.
  
! ‘FILE.f’
! ‘FILE.for’
! ‘FILE.ftn’
! ‘FILE.fi’
       Fixed form Fortran source code that should not be preprocessed.
  
! ‘FILE.F’
! ‘FILE.FOR’
! ‘FILE.fpp’
! ‘FILE.FPP’
! ‘FILE.FTN’
       Fixed form Fortran source code that must be preprocessed (with the
       traditional preprocessor).
  
! ‘FILE.f90’
! ‘FILE.f95’
! ‘FILE.f03’
! ‘FILE.f08’
! ‘FILE.fii’
       Free form Fortran source code that should not be preprocessed.
  
! ‘FILE.F90’
! ‘FILE.F95’
! ‘FILE.F03’
! ‘FILE.F08’
       Free form Fortran source code that must be preprocessed (with the
       traditional preprocessor).
  
! ‘FILE.go’
       Go source code.
  
! ‘FILE.d’
       D source code.
  
! ‘FILE.di’
       D interface file.
  
! ‘FILE.dd’
       D documentation code (Ddoc).
  
! ‘FILE.ads’
       Ada source code file that contains a library unit declaration (a
       declaration of a package, subprogram, or generic, or a generic
       instantiation), or a library unit renaming declaration (a package,
       generic, or subprogram renaming declaration).  Such files are also
!      called “specs”.
  
! ‘FILE.adb’
       Ada source code file containing a library unit body (a subprogram
!      or package body).  Such files are also called “bodies”.
  
! ‘FILE.s’
       Assembler code.
  
! ‘FILE.S’
! ‘FILE.sx’
       Assembler code that must be preprocessed.
  
! ‘OTHER’
       An object file to be fed straight into linking.  Any file name with
       no recognized suffix is treated this way.
  
!  You can specify the input language explicitly with the ‘-x’ option:
  
! ‘-x LANGUAGE’
       Specify explicitly the LANGUAGE for the following input files
       (rather than letting the compiler choose a default based on the
       file name suffix).  This option applies to all following input
!      files until the next ‘-x’ option.  Possible values for LANGUAGE
       are:
            c  c-header  cpp-output
            c++  c++-header  c++-system-header c++-user-header c++-cpp-output
!           objective-c  objective-c-header  objective-c-cpp-output  objc-cpp-output
!           objective-c++  objective-c++-header  objective-c++-cpp-output
!           objc++-cpp-output
            assembler  assembler-with-cpp
!           ada  adascil  adawhy
            d
!           f77  f77-cpp-input  f95  f95-cpp-input
            go
+           modula-2  modula-2-cpp-output
+           rust
+           lto
  
! ‘-x none’
       Turn off any specification of a language, so that subsequent files
       are handled according to their file name suffixes (as they are if
!      ‘-x’ has not been used at all).
  
!  If you only want some of the stages of compilation, you can use ‘-x’
! (or filename suffixes) to tell ‘gcc’ where to start, and one of the
! options ‘-c’, ‘-S’, or ‘-E’ to say where ‘gcc’ is to stop.  Note that
! some combinations (for example, ‘-x cpp-output -E’) instruct ‘gcc’ to do
  nothing at all.
  
! ‘-c’
       Compile or assemble the source files, but do not link.  The linking
       stage simply is not done.  The ultimate output is in the form of an
       object file for each source file.
  
       By default, the object file name for a source file is made by
!      replacing the suffix ‘.c’, ‘.i’, ‘.s’, etc., with ‘.o’.
  
       Unrecognized input files, not requiring compilation or assembly,
       are ignored.
  
! ‘-S’
       Stop after the stage of compilation proper; do not assemble.  The
       output is in the form of an assembler code file for each
       non-assembler input file specified.
  
       By default, the assembler file name for a source file is made by
!      replacing the suffix ‘.c’, ‘.i’, etc., with ‘.s’.
  
       Input files that don't require compilation are ignored.
  
! ‘-E’
       Stop after the preprocessing stage; do not run the compiler proper.
       The output is in the form of preprocessed source code, which is
       sent to the standard output.
  
       Input files that don't require preprocessing are ignored.
  
! ‘-o FILE’
       Place the primary output in file FILE.  This applies to whatever
       sort of output is being produced, whether it be an executable file,
       an object file, an assembler file or preprocessed C code.
  
!      If ‘-o’ is not specified, the default is to put an executable file
!      in ‘a.out’, the object file for ‘SOURCE.SUFFIX’ in ‘SOURCE.o’, its
!      assembler file in ‘SOURCE.s’, a precompiled header file in
!      ‘SOURCE.SUFFIX.gch’, and all preprocessed C source on standard
       output.
  
!      Though ‘-o’ names only the primary output, it also affects the
       naming of auxiliary and dump outputs.  See the examples below.
       Unless overridden, both auxiliary outputs and dump outputs are
       placed in the same directory as the primary output.  In auxiliary
*************** nothing at all.
*** 2086,2124 ****
  
            gcc -c foo.c ...
  
!      will use 'foo.o' as the primary output, and place aux outputs and
!      dumps next to it, e.g., aux file 'foo.dwo' for '-gsplit-dwarf', and
!      dump file 'foo.c.???r.final' for '-fdump-rtl-final'.
  
       If a non-linker output file is explicitly specified, aux and dump
       files by default take the same base name:
  
            gcc -c foo.c -o dir/foobar.o ...
  
!      will name aux outputs 'dir/foobar.*' and dump outputs
!      'dir/foobar.c.*'.
  
       A linker output will instead prefix aux and dump outputs:
  
            gcc foo.c bar.c -o dir/foobar ...
  
!      will generally name aux outputs 'dir/foobar-foo.*' and
!      'dir/foobar-bar.*', and dump outputs 'dir/foobar-foo.c.*' and
!      'dir/foobar-bar.c.*'.
  
       The one exception to the above is when the executable shares the
       base name with the single input:
  
            gcc foo.c -o dir/foo ...
  
!      in which case aux outputs are named 'dir/foo.*' and dump outputs
!      named 'dir/foo.c.*'.
  
       The location and the names of auxiliary and dump outputs can be
!      adjusted by the options '-dumpbase', '-dumpbase-ext', '-dumpdir',
!      '-save-temps=cwd', and '-save-temps=obj'.
  
! '-dumpbase DUMPBASE'
       This option sets the base name for auxiliary and dump output files.
       It does not affect the name of the primary output file.
       Intermediate outputs, when preserved, are not regarded as primary
--- 2090,2128 ----
  
            gcc -c foo.c ...
  
!      will use ‘foo.o’ as the primary output, and place aux outputs and
!      dumps next to it, e.g., aux file ‘foo.dwo’ for ‘-gsplit-dwarf’, and
!      dump file ‘foo.c.???r.final’ for ‘-fdump-rtl-final’.
  
       If a non-linker output file is explicitly specified, aux and dump
       files by default take the same base name:
  
            gcc -c foo.c -o dir/foobar.o ...
  
!      will name aux outputs ‘dir/foobar.*’ and dump outputs
!      ‘dir/foobar.c.*’.
  
       A linker output will instead prefix aux and dump outputs:
  
            gcc foo.c bar.c -o dir/foobar ...
  
!      will generally name aux outputs ‘dir/foobar-foo.*’ and
!      ‘dir/foobar-bar.*’, and dump outputs ‘dir/foobar-foo.c.*’ and
!      ‘dir/foobar-bar.c.*’.
  
       The one exception to the above is when the executable shares the
       base name with the single input:
  
            gcc foo.c -o dir/foo ...
  
!      in which case aux outputs are named ‘dir/foo.*’ and dump outputs
!      named ‘dir/foo.c.*’.
  
       The location and the names of auxiliary and dump outputs can be
!      adjusted by the options ‘-dumpbase’, ‘-dumpbase-ext’, ‘-dumpdir’,
!      ‘-save-temps=cwd’, and ‘-save-temps=obj’.
  
! ‘-dumpbase DUMPBASE’
       This option sets the base name for auxiliary and dump output files.
       It does not affect the name of the primary output file.
       Intermediate outputs, when preserved, are not regarded as primary
*************** nothing at all.
*** 2126,2175 ****
  
            gcc -save-temps -S foo.c
  
!      saves the (no longer) temporary preprocessed file in 'foo.i', and
!      then compiles to the (implied) output file 'foo.s', whereas:
  
            gcc -save-temps -dumpbase save-foo -c foo.c
  
!      preprocesses to in 'save-foo.i', compiles to 'save-foo.s' (now an
       intermediate, thus auxiliary output), and then assembles to the
!      (implied) output file 'foo.o'.
  
       Absent this option, dump and aux files take their names from the
       input file, or from the (non-linker) output file, if one is
       explicitly specified: dump output files (e.g.  those requested by
!      '-fdump-*' options) with the input name suffix, and aux output
       files (those requested by other non-dump options, e.g.
!      '-save-temps', '-gsplit-dwarf', '-fcallgraph-info') without it.
  
       Similar suffix differentiation of dump and aux outputs can be
!      attained for explicitly-given '-dumpbase basename.suf' by also
!      specifying '-dumpbase-ext .suf'.
  
       If DUMPBASE is explicitly specified with any directory component,
!      any DUMPPFX specification (e.g.  '-dumpdir' or '-save-temps=*') is
       ignored, and instead of appending to it, DUMPBASE fully overrides
       it:
  
            gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \
              -dumpdir pfx- -save-temps=cwd ...
  
!      creates auxiliary and dump outputs named 'alt/foo.*', disregarding
!      'dir/' in '-o', the './' prefix implied by '-save-temps=cwd', and
!      'pfx-' in '-dumpdir'.
  
!      When '-dumpbase' is specified in a command that compiles multiple
       inputs, or that compiles and then links, it may be combined with
!      DUMPPFX, as specified under '-dumpdir'.  Then, each input file is
       compiled using the combined DUMPPFX, and default values for
       DUMPBASE and AUXDROPSUF are computed for each input file:
  
            gcc foo.c bar.c -c -dumpbase main ...
  
!      creates 'foo.o' and 'bar.o' as primary outputs, and avoids
       overwriting the auxiliary and dump outputs by using the DUMPBASE as
!      a prefix, creating auxiliary and dump outputs named 'main-foo.*'
!      and 'main-bar.*'.
  
       An empty string specified as DUMPBASE avoids the influence of the
       output basename in the naming of auxiliary and dump outputs during
--- 2130,2179 ----
  
            gcc -save-temps -S foo.c
  
!      saves the (no longer) temporary preprocessed file in ‘foo.i’, and
!      then compiles to the (implied) output file ‘foo.s’, whereas:
  
            gcc -save-temps -dumpbase save-foo -c foo.c
  
!      preprocesses to in ‘save-foo.i’, compiles to ‘save-foo.s’ (now an
       intermediate, thus auxiliary output), and then assembles to the
!      (implied) output file ‘foo.o’.
  
       Absent this option, dump and aux files take their names from the
       input file, or from the (non-linker) output file, if one is
       explicitly specified: dump output files (e.g.  those requested by
!      ‘-fdump-*’ options) with the input name suffix, and aux output
       files (those requested by other non-dump options, e.g.
!      ‘-save-temps’, ‘-gsplit-dwarf’, ‘-fcallgraph-info’) without it.
  
       Similar suffix differentiation of dump and aux outputs can be
!      attained for explicitly-given ‘-dumpbase basename.suf’ by also
!      specifying ‘-dumpbase-ext .suf’.
  
       If DUMPBASE is explicitly specified with any directory component,
!      any DUMPPFX specification (e.g.  ‘-dumpdir’ or ‘-save-temps=*’) is
       ignored, and instead of appending to it, DUMPBASE fully overrides
       it:
  
            gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \
              -dumpdir pfx- -save-temps=cwd ...
  
!      creates auxiliary and dump outputs named ‘alt/foo.*’, disregarding
!      ‘dir/’ in ‘-o’, the ‘./’ prefix implied by ‘-save-temps=cwd’, and
!      ‘pfx-’ in ‘-dumpdir’.
  
!      When ‘-dumpbase’ is specified in a command that compiles multiple
       inputs, or that compiles and then links, it may be combined with
!      DUMPPFX, as specified under ‘-dumpdir’.  Then, each input file is
       compiled using the combined DUMPPFX, and default values for
       DUMPBASE and AUXDROPSUF are computed for each input file:
  
            gcc foo.c bar.c -c -dumpbase main ...
  
!      creates ‘foo.o’ and ‘bar.o’ as primary outputs, and avoids
       overwriting the auxiliary and dump outputs by using the DUMPBASE as
!      a prefix, creating auxiliary and dump outputs named ‘main-foo.*’
!      and ‘main-bar.*’.
  
       An empty string specified as DUMPBASE avoids the influence of the
       output basename in the naming of auxiliary and dump outputs during
*************** nothing at all.
*** 2177,2183 ****
  
            gcc -c foo.c -o dir/foobar.o -dumpbase '' ...
  
!      will name aux outputs 'dir/foo.*' and dump outputs 'dir/foo.c.*'.
       Note how their basenames are taken from the input name, but the
       directory still defaults to that of the output.
  
--- 2181,2187 ----
  
            gcc -c foo.c -o dir/foobar.o -dumpbase '' ...
  
!      will name aux outputs ‘dir/foo.*’ and dump outputs ‘dir/foo.c.*’.
       Note how their basenames are taken from the input name, but the
       directory still defaults to that of the output.
  
*************** nothing at all.
*** 2187,2210 ****
            gcc foo.c bar.c -o dir/foobar -dumpbase '' -flto ...
  
       The compilation of the source files will name auxiliary outputs
!      'dir/foo.*' and 'dir/bar.*', and dump outputs 'dir/foo.c.*' and
!      'dir/bar.c.*'.  LTO recompilation during linking will use
!      'dir/foobar.' as the prefix for dumps and auxiliary files.
  
! '-dumpbase-ext AUXDROPSUF'
       When forming the name of an auxiliary (but not a dump) output file,
       drop trailing AUXDROPSUF from DUMPBASE before appending any
       suffixes.  If not specified, this option defaults to the suffix of
       a default DUMPBASE, i.e., the suffix of the input file when
!      '-dumpbase' is not present in the command line, or DUMPBASE is
       combined with DUMPPFX.
  
            gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
  
!      creates 'dir/foo.o' as the main output, and generates auxiliary
!      outputs in 'dir/x-foo.*', taking the location of the primary
!      output, and dropping the '.c' suffix from the DUMPBASE.  Dump
!      outputs retain the suffix: 'dir/x-foo.c.*'.
  
       This option is disregarded if it does not match the suffix of a
       specified DUMPBASE, except as an alternative to the executable
--- 2191,2214 ----
            gcc foo.c bar.c -o dir/foobar -dumpbase '' -flto ...
  
       The compilation of the source files will name auxiliary outputs
!      ‘dir/foo.*’ and ‘dir/bar.*’, and dump outputs ‘dir/foo.c.*’ and
!      ‘dir/bar.c.*’.  LTO recompilation during linking will use
!      ‘dir/foobar.’ as the prefix for dumps and auxiliary files.
  
! ‘-dumpbase-ext AUXDROPSUF’
       When forming the name of an auxiliary (but not a dump) output file,
       drop trailing AUXDROPSUF from DUMPBASE before appending any
       suffixes.  If not specified, this option defaults to the suffix of
       a default DUMPBASE, i.e., the suffix of the input file when
!      ‘-dumpbase’ is not present in the command line, or DUMPBASE is
       combined with DUMPPFX.
  
            gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
  
!      creates ‘dir/foo.o’ as the main output, and generates auxiliary
!      outputs in ‘dir/x-foo.*’, taking the location of the primary
!      output, and dropping the ‘.c’ suffix from the DUMPBASE.  Dump
!      outputs retain the suffix: ‘dir/x-foo.c.*’.
  
       This option is disregarded if it does not match the suffix of a
       specified DUMPBASE, except as an alternative to the executable
*************** nothing at all.
*** 2213,2261 ****
  
            gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
  
!      creates 'main.out' as the primary output, and avoids overwriting
       the auxiliary and dump outputs by using the executable name minus
       AUXDROPSUF as a prefix, creating auxiliary outputs named
!      'main-foo.*' and 'main-bar.*' and dump outputs named 'main-foo.c.*'
!      and 'main-bar.c.*'.
  
! '-dumpdir DUMPPFX'
       When forming the name of an auxiliary or dump output file, use
       DUMPPFX as a prefix:
  
            gcc -dumpdir pfx- -c foo.c ...
  
!      creates 'foo.o' as the primary output, and auxiliary outputs named
!      'pfx-foo.*', combining the given DUMPPFX with the default DUMPBASE
       derived from the default primary output, derived in turn from the
       input name.  Dump outputs also take the input name suffix:
!      'pfx-foo.c.*'.
  
       If DUMPPFX is to be used as a directory name, it must end with a
       directory separator:
  
            gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
  
!      creates 'obj/bar.o' as the primary output, and auxiliary outputs
!      named 'dir/bar.*', combining the given DUMPPFX with the default
       DUMPBASE derived from the primary output name.  Dump outputs also
!      take the input name suffix: 'dir/bar.c.*'.
  
       It defaults to the location of the output file, unless the output
!      file is a special file like '/dev/null'.  Options '-save-temps=cwd'
!      and '-save-temps=obj' override this default, just like an explicit
!      '-dumpdir' option.  In case multiple such options are given, the
       last one prevails:
  
            gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
  
!      outputs 'foo.o', with auxiliary outputs named 'foo.*' because
!      '-save-temps=*' overrides the DUMPPFX given by the earlier
!      '-dumpdir' option.  It does not matter that '=obj' is the default
!      for '-save-temps', nor that the output directory is implicitly the
!      current directory.  Dump outputs are named 'foo.c.*'.
  
!      When compiling from multiple input files, if '-dumpbase' is
       specified, DUMPBASE, minus a AUXDROPSUF suffix, and a dash are
       appended to (or override, if containing any directory components)
       an explicit or defaulted DUMPPFX, so that each of the multiple
--- 2217,2265 ----
  
            gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
  
!      creates ‘main.out’ as the primary output, and avoids overwriting
       the auxiliary and dump outputs by using the executable name minus
       AUXDROPSUF as a prefix, creating auxiliary outputs named
!      ‘main-foo.*’ and ‘main-bar.*’ and dump outputs named ‘main-foo.c.*’
!      and ‘main-bar.c.*’.
  
! ‘-dumpdir DUMPPFX’
       When forming the name of an auxiliary or dump output file, use
       DUMPPFX as a prefix:
  
            gcc -dumpdir pfx- -c foo.c ...
  
!      creates ‘foo.o’ as the primary output, and auxiliary outputs named
!      ‘pfx-foo.*’, combining the given DUMPPFX with the default DUMPBASE
       derived from the default primary output, derived in turn from the
       input name.  Dump outputs also take the input name suffix:
!      ‘pfx-foo.c.*’.
  
       If DUMPPFX is to be used as a directory name, it must end with a
       directory separator:
  
            gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
  
!      creates ‘obj/bar.o’ as the primary output, and auxiliary outputs
!      named ‘dir/bar.*’, combining the given DUMPPFX with the default
       DUMPBASE derived from the primary output name.  Dump outputs also
!      take the input name suffix: ‘dir/bar.c.*’.
  
       It defaults to the location of the output file, unless the output
!      file is a special file like ‘/dev/null’.  Options ‘-save-temps=cwd’
!      and ‘-save-temps=obj’ override this default, just like an explicit
!      ‘-dumpdir’ option.  In case multiple such options are given, the
       last one prevails:
  
            gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
  
!      outputs ‘foo.o’, with auxiliary outputs named ‘foo.*’ because
!      ‘-save-temps=*’ overrides the DUMPPFX given by the earlier
!      ‘-dumpdir’ option.  It does not matter that ‘=obj’ is the default
!      for ‘-save-temps’, nor that the output directory is implicitly the
!      current directory.  Dump outputs are named ‘foo.c.*’.
  
!      When compiling from multiple input files, if ‘-dumpbase’ is
       specified, DUMPBASE, minus a AUXDROPSUF suffix, and a dash are
       appended to (or override, if containing any directory components)
       an explicit or defaulted DUMPPFX, so that each of the multiple
*************** nothing at all.
*** 2263,2316 ****
  
            gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
  
!      outputs auxiliary dumps to 'dir/pfx-main-foo.*' and
!      'dir/pfx-main-bar.*', appending DUMPBASE- to DUMPPFX.  Dump outputs
!      retain the input file suffix: 'dir/pfx-main-foo.c.*' and
!      'dir/pfx-main-bar.c.*', respectively.  Contrast with the
       single-input compilation:
  
            gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
  
!      that, applying '-dumpbase' to a single source, does not compute and
       append a separate DUMPBASE per input file.  Its auxiliary and dump
!      outputs go in 'dir/pfx-main.*'.
  
       When compiling and then linking from multiple input files, a
       defaulted or explicitly specified DUMPPFX also undergoes the
!      DUMPBASE- transformation above (e.g.  the compilation of 'foo.c'
!      and 'bar.c' above, but without '-c').  If neither '-dumpdir' nor
!      '-dumpbase' are given, the linker output base name, minus
       AUXDROPSUF, if specified, or the executable suffix otherwise, plus
       a dash is appended to the default DUMPPFX instead.  Note, however,
       that unlike earlier cases of linking:
  
            gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
  
!      does not append the output name 'main' to DUMPPFX, because
!      '-dumpdir' is explicitly specified.  The goal is that the
       explicitly-specified DUMPPFX may contain the specified output name
       as part of the prefix, if desired; only an explicitly-specified
!      '-dumpbase' would be combined with it, in order to avoid simply
       discarding a meaningful option.
  
       When compiling and then linking from a single input file, the
       linker output base name will only be appended to the default
       DUMPPFX as above if it does not share the base name with the single
       input file name.  This has been covered in single-input linking
!      cases above, but not with an explicit '-dumpdir' that inhibits the
!      combination, even if overridden by '-save-temps=*':
  
            gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
  
!      Auxiliary outputs are named 'foo.*', and dump outputs 'foo.c.*', in
       the current working directory as ultimately requested by
!      '-save-temps=cwd'.
  
       Summing it all up for an intuitive though slightly imprecise data
       flow: the primary output name is broken into a directory part and a
       basename part; DUMPPFX is set to the former, unless overridden by
!      '-dumpdir' or '-save-temps=*', and DUMPBASE is set to the latter,
!      unless overriden by '-dumpbase'.  If there are multiple inputs or
       linking, this DUMPBASE may be combined with DUMPPFX and taken from
       each input file.  Auxiliary output names for each input are formed
       by combining DUMPPFX, DUMPBASE minus suffix, and the auxiliary
--- 2267,2320 ----
  
            gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
  
!      outputs auxiliary dumps to ‘dir/pfx-main-foo.*’ and
!      ‘dir/pfx-main-bar.*’, appending DUMPBASE- to DUMPPFX.  Dump outputs
!      retain the input file suffix: ‘dir/pfx-main-foo.c.*’ and
!      ‘dir/pfx-main-bar.c.*’, respectively.  Contrast with the
       single-input compilation:
  
            gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
  
!      that, applying ‘-dumpbase’ to a single source, does not compute and
       append a separate DUMPBASE per input file.  Its auxiliary and dump
!      outputs go in ‘dir/pfx-main.*’.
  
       When compiling and then linking from multiple input files, a
       defaulted or explicitly specified DUMPPFX also undergoes the
!      DUMPBASE- transformation above (e.g.  the compilation of ‘foo.c’
!      and ‘bar.c’ above, but without ‘-c’).  If neither ‘-dumpdir’ nor
!      ‘-dumpbase’ are given, the linker output base name, minus
       AUXDROPSUF, if specified, or the executable suffix otherwise, plus
       a dash is appended to the default DUMPPFX instead.  Note, however,
       that unlike earlier cases of linking:
  
            gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
  
!      does not append the output name ‘main’ to DUMPPFX, because
!      ‘-dumpdir’ is explicitly specified.  The goal is that the
       explicitly-specified DUMPPFX may contain the specified output name
       as part of the prefix, if desired; only an explicitly-specified
!      ‘-dumpbase’ would be combined with it, in order to avoid simply
       discarding a meaningful option.
  
       When compiling and then linking from a single input file, the
       linker output base name will only be appended to the default
       DUMPPFX as above if it does not share the base name with the single
       input file name.  This has been covered in single-input linking
!      cases above, but not with an explicit ‘-dumpdir’ that inhibits the
!      combination, even if overridden by ‘-save-temps=*’:
  
            gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
  
!      Auxiliary outputs are named ‘foo.*’, and dump outputs ‘foo.c.*’, in
       the current working directory as ultimately requested by
!      ‘-save-temps=cwd’.
  
       Summing it all up for an intuitive though slightly imprecise data
       flow: the primary output name is broken into a directory part and a
       basename part; DUMPPFX is set to the former, unless overridden by
!      ‘-dumpdir’ or ‘-save-temps=*’, and DUMPBASE is set to the latter,
!      unless overriden by ‘-dumpbase’.  If there are multiple inputs or
       linking, this DUMPBASE may be combined with DUMPPFX and taken from
       each input file.  Auxiliary output names for each input are formed
       by combining DUMPPFX, DUMPBASE minus suffix, and the auxiliary
*************** nothing at all.
*** 2322,2407 ****
       as derived from the linker output name but not from inputs, even in
       cases in which this combination would not otherwise be used as
       such, is passed down with a trailing period replacing the
!      compiler-added dash, if any, as a '-dumpdir' option to
!      'lto-wrapper'; being involved in linking, this program does not
!      normally get any '-dumpbase' and '-dumpbase-ext', and it ignores
       them.
  
!      When running sub-compilers, 'lto-wrapper' appends LTO stage names
       to the received DUMPPFX, ensures it contains a directory component
!      so that it overrides any '-dumpdir', and passes that as '-dumpbase'
       to sub-compilers.
  
! '-v'
       Print (on standard error output) the commands executed to run the
       stages of compilation.  Also print the version number of the
       compiler driver program and of the preprocessor and the compiler
       proper.
  
! '-###'
!      Like '-v' except the commands are not executed and arguments are
!      quoted unless they contain only alphanumeric characters or './-_'.
       This is useful for shell scripts to capture the driver-generated
       command lines.
  
! '--help'
       Print (on the standard output) a description of the command-line
!      options understood by 'gcc'.  If the '-v' option is also specified
!      then '--help' is also passed on to the various processes invoked by
!      'gcc', so that they can display the command-line options they
!      accept.  If the '-Wextra' option has also been specified (prior to
!      the '--help' option), then command-line options that have no
       documentation associated with them are also displayed.
  
! '--target-help'
       Print (on the standard output) a description of target-specific
       command-line options for each tool.  For some targets extra
       target-specific information may also be printed.
  
! '--help={CLASS|[^]QUALIFIER}[,...]'
       Print (on the standard output) a description of the command-line
       options understood by the compiler that fit into all specified
       classes and qualifiers.  These are the supported classes:
  
!      'optimizers'
            Display all of the optimization options supported by the
            compiler.
  
!      'warnings'
            Display all of the options controlling warning messages
            produced by the compiler.
  
!      'target'
!           Display target-specific options.  Unlike the '--target-help'
            option however, target-specific options of the linker and
            assembler are not displayed.  This is because those tools do
!           not currently support the extended '--help=' syntax.
  
!      'params'
!           Display the values recognized by the '--param' option.
  
       LANGUAGE
            Display the options supported for LANGUAGE, where LANGUAGE is
            the name of one of the languages supported in this version of
            GCC.  If an option is supported by all languages, one needs to
!           select 'common' class.
  
!      'common'
            Display the options that are common to all languages.
  
       These are the supported qualifiers:
  
!      'undocumented'
            Display only those options that are undocumented.
  
!      'joined'
            Display options taking an argument that appears after an equal
            sign in the same continuous piece of text, such as:
!           '--help=target'.
  
!      'separate'
            Display options taking an argument that appears as a separate
!           word following the original option, such as: '-o output-file'.
  
       Thus for example to display all the undocumented target-specific
       switches supported by the compiler, use:
--- 2326,2411 ----
       as derived from the linker output name but not from inputs, even in
       cases in which this combination would not otherwise be used as
       such, is passed down with a trailing period replacing the
!      compiler-added dash, if any, as a ‘-dumpdir’ option to
!      ‘lto-wrapper’; being involved in linking, this program does not
!      normally get any ‘-dumpbase’ and ‘-dumpbase-ext’, and it ignores
       them.
  
!      When running sub-compilers, ‘lto-wrapper’ appends LTO stage names
       to the received DUMPPFX, ensures it contains a directory component
!      so that it overrides any ‘-dumpdir’, and passes that as ‘-dumpbase’
       to sub-compilers.
  
! ‘-v’
       Print (on standard error output) the commands executed to run the
       stages of compilation.  Also print the version number of the
       compiler driver program and of the preprocessor and the compiler
       proper.
  
! ‘-###’
!      Like ‘-v’ except the commands are not executed and arguments are
!      quoted unless they contain only alphanumeric characters or ‘./-_’.
       This is useful for shell scripts to capture the driver-generated
       command lines.
  
! ‘--help’
       Print (on the standard output) a description of the command-line
!      options understood by ‘gcc’.  If the ‘-v’ option is also specified
!      then ‘--help’ is also passed on to the various processes invoked by
!      ‘gcc’, so that they can display the command-line options they
!      accept.  If the ‘-Wextra’ option has also been specified (prior to
!      the ‘--help’ option), then command-line options that have no
       documentation associated with them are also displayed.
  
! ‘--target-help’
       Print (on the standard output) a description of target-specific
       command-line options for each tool.  For some targets extra
       target-specific information may also be printed.
  
! ‘--help={CLASS|[^]QUALIFIER}[,...]’
       Print (on the standard output) a description of the command-line
       options understood by the compiler that fit into all specified
       classes and qualifiers.  These are the supported classes:
  
!      ‘optimizers’
            Display all of the optimization options supported by the
            compiler.
  
!      ‘warnings’
            Display all of the options controlling warning messages
            produced by the compiler.
  
!      ‘target’
!           Display target-specific options.  Unlike the ‘--target-help’
            option however, target-specific options of the linker and
            assembler are not displayed.  This is because those tools do
!           not currently support the extended ‘--help=’ syntax.
  
!      ‘params’
!           Display the values recognized by the ‘--param’ option.
  
       LANGUAGE
            Display the options supported for LANGUAGE, where LANGUAGE is
            the name of one of the languages supported in this version of
            GCC.  If an option is supported by all languages, one needs to
!           select ‘common’ class.
  
!      ‘common’
            Display the options that are common to all languages.
  
       These are the supported qualifiers:
  
!      ‘undocumented’
            Display only those options that are undocumented.
  
!      ‘joined’
            Display options taking an argument that appears after an equal
            sign in the same continuous piece of text, such as:
!           ‘--help=target’.
  
!      ‘separate’
            Display options taking an argument that appears as a separate
!           word following the original option, such as: ‘-o output-file’.
  
       Thus for example to display all the undocumented target-specific
       switches supported by the compiler, use:
*************** nothing at all.
*** 2409,2421 ****
            --help=target,undocumented
  
       The sense of a qualifier can be inverted by prefixing it with the
!      '^' character, so for example to display all binary warning options
       (i.e., ones that are either on or off and that do not take an
       argument) that have a description, use:
  
            --help=warnings,^joined,^undocumented
  
!      The argument to '--help=' should not consist solely of inverted
       qualifiers.
  
       Combining several classes is possible, although this usually
--- 2413,2425 ----
            --help=target,undocumented
  
       The sense of a qualifier can be inverted by prefixing it with the
!      ‘^’ character, so for example to display all binary warning options
       (i.e., ones that are either on or off and that do not take an
       argument) that have a description, use:
  
            --help=warnings,^joined,^undocumented
  
!      The argument to ‘--help=’ should not consist solely of inverted
       qualifiers.
  
       Combining several classes is possible, although this usually
*************** nothing at all.
*** 2426,2445 ****
  
            --help=target,optimizers
  
!      The '--help=' option can be repeated on the command line.  Each
       successive use displays its requested class of options, skipping
!      those that have already been displayed.  If '--help' is also
       specified anywhere on the command line then this takes precedence
!      over any '--help=' option.
  
!      If the '-Q' option appears on the command line before the '--help='
!      option, then the descriptive text displayed by '--help=' is
       changed.  Instead of describing the displayed options, an
       indication is given as to whether the option is enabled, disabled
       or set to a specific value (assuming that the compiler knows this
!      at the point where the '--help=' option is used).
  
!      Here is a truncated example from the ARM port of 'gcc':
  
              % gcc -Q -mabi=2 --help=target -c
              The following options are target specific:
--- 2430,2449 ----
  
            --help=target,optimizers
  
!      The ‘--help=’ option can be repeated on the command line.  Each
       successive use displays its requested class of options, skipping
!      those that have already been displayed.  If ‘--help’ is also
       specified anywhere on the command line then this takes precedence
!      over any ‘--help=’ option.
  
!      If the ‘-Q’ option appears on the command line before the ‘--help=’
!      option, then the descriptive text displayed by ‘--help=’ is
       changed.  Instead of describing the displayed options, an
       indication is given as to whether the option is enabled, disabled
       or set to a specific value (assuming that the compiler knows this
!      at the point where the ‘--help=’ option is used).
  
!      Here is a truncated example from the ARM port of ‘gcc’:
  
              % gcc -Q -mabi=2 --help=target -c
              The following options are target specific:
*************** nothing at all.
*** 2449,2549 ****
  
       The output is sensitive to the effects of previous command-line
       options, so for example it is possible to find out which
!      optimizations are enabled at '-O2' by using:
  
            -Q -O2 --help=optimizers
  
       Alternatively you can discover which binary optimizations are
!      enabled by '-O3' by using:
  
            gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
            gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
            diff /tmp/O2-opts /tmp/O3-opts | grep enabled
  
! '--version'
       Display the version number and copyrights of the invoked GCC.
  
! '-pass-exit-codes'
!      Normally the 'gcc' program exits with the code of 1 if any phase of
       the compiler returns a non-success return code.  If you specify
!      '-pass-exit-codes', the 'gcc' program instead returns with the
       numerically highest error produced by any phase returning an error
       indication.  The C, C++, and Fortran front ends return 4 if an
       internal compiler error is encountered.
  
! '-pipe'
       Use pipes rather than temporary files for communication between the
       various stages of compilation.  This fails to work on some systems
       where the assembler is unable to read from a pipe; but the GNU
       assembler has no trouble.
  
! '-specs=FILE'
!      Process FILE after the compiler reads in the standard 'specs' file,
!      in order to override the defaults which the 'gcc' driver program
!      uses when determining what switches to pass to 'cc1', 'cc1plus',
!      'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
       the command line, and they are processed in order, from left to
       right.  *Note Spec Files::, for information about the format of the
       FILE.
  
! '-wrapper'
       Invoke all subcommands under a wrapper program.  The name of the
       wrapper program and its parameters are passed as a comma separated
       list.
  
            gcc -c t.c -wrapper gdb,--args
  
!      This invokes all subprograms of 'gcc' under 'gdb --args', thus the
!      invocation of 'cc1' is 'gdb --args cc1 ...'.
  
! '-ffile-prefix-map=OLD=NEW'
!      When compiling files residing in directory 'OLD', record any
       references to them in the result of the compilation as if the files
!      resided in directory 'NEW' instead.  Specifying this option is
!      equivalent to specifying all the individual '-f*-prefix-map'
       options.  This can be used to make reproducible builds that are
       location independent.  Directories referenced by directives are not
!      affected by these options.  See also '-fmacro-prefix-map',
!      '-fdebug-prefix-map', '-fprofile-prefix-map' and
!      '-fcanon-prefix-map'.
  
! '-fcanon-prefix-map'
!      For the '-f*-prefix-map' options normally comparison of 'OLD'
       prefix against the filename that would be normally referenced in
       the result of the compilation is done using textual comparison of
       the prefixes, or ignoring character case for case insensitive
       filesystems and considering slashes and backslashes as equal on DOS
!      based filesystems.  The '-fcanon-prefix-map' causes such
!      comparisons to be done on canonicalized paths of 'OLD' and the
       referenced filename.
  
! '-fplugin=NAME.so'
       Load the plugin code in file NAME.so, assumed to be a shared object
       to be dlopen'd by the compiler.  The base name of the shared object
       file is used to identify the plugin for the purposes of argument
!      parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
       should define the callback functions specified in the Plugins API.
  
! '-fplugin-arg-NAME-KEY=VALUE'
       Define an argument called KEY with a value of VALUE for the plugin
       called NAME.
  
! '-fdump-ada-spec[-slim]'
       For C and C++ source and include files, generate corresponding Ada
       specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
       headers::, which provides detailed documentation on this feature.
  
! '-fada-spec-parent=UNIT'
!      In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
       specs as child units of parent UNIT.
  
! '-fdump-go-spec=FILE'
       For input files in any language, generate corresponding Go
!      declarations in FILE.  This generates Go 'const', 'type', 'var',
!      and 'func' declarations which may be a useful way to start writing
       a Go interface to code written in some other language.
  
! '@FILE'
       Read command-line options from FILE.  The options read are inserted
       in place of the original @FILE option.  If FILE does not exist, or
       cannot be read, then the option will be treated literally, and not
--- 2453,2553 ----
  
       The output is sensitive to the effects of previous command-line
       options, so for example it is possible to find out which
!      optimizations are enabled at ‘-O2’ by using:
  
            -Q -O2 --help=optimizers
  
       Alternatively you can discover which binary optimizations are
!      enabled by ‘-O3’ by using:
  
            gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
            gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
            diff /tmp/O2-opts /tmp/O3-opts | grep enabled
  
! ‘--version’
       Display the version number and copyrights of the invoked GCC.
  
! ‘-pass-exit-codes’
!      Normally the ‘gcc’ program exits with the code of 1 if any phase of
       the compiler returns a non-success return code.  If you specify
!      ‘-pass-exit-codes’, the ‘gcc’ program instead returns with the
       numerically highest error produced by any phase returning an error
       indication.  The C, C++, and Fortran front ends return 4 if an
       internal compiler error is encountered.
  
! ‘-pipe’
       Use pipes rather than temporary files for communication between the
       various stages of compilation.  This fails to work on some systems
       where the assembler is unable to read from a pipe; but the GNU
       assembler has no trouble.
  
! ‘-specs=FILE’
!      Process FILE after the compiler reads in the standard ‘specs’ file,
!      in order to override the defaults which the ‘gcc’ driver program
!      uses when determining what switches to pass to ‘cc1’, ‘cc1plus’,
!      ‘as’, ‘ld’, etc.  More than one ‘-specs=FILE’ can be specified on
       the command line, and they are processed in order, from left to
       right.  *Note Spec Files::, for information about the format of the
       FILE.
  
! ‘-wrapper’
       Invoke all subcommands under a wrapper program.  The name of the
       wrapper program and its parameters are passed as a comma separated
       list.
  
            gcc -c t.c -wrapper gdb,--args
  
!      This invokes all subprograms of ‘gcc’ under ‘gdb --args’, thus the
!      invocation of ‘cc1’ is ‘gdb --args cc1 ...’.
  
! ‘-ffile-prefix-map=OLD=NEW’
!      When compiling files residing in directory ‘OLD’, record any
       references to them in the result of the compilation as if the files
!      resided in directory ‘NEW’ instead.  Specifying this option is
!      equivalent to specifying all the individual ‘-f*-prefix-map’
       options.  This can be used to make reproducible builds that are
       location independent.  Directories referenced by directives are not
!      affected by these options.  See also ‘-fmacro-prefix-map’,
!      ‘-fdebug-prefix-map’, ‘-fprofile-prefix-map’ and
!      ‘-fcanon-prefix-map’.
  
! ‘-fcanon-prefix-map’
!      For the ‘-f*-prefix-map’ options normally comparison of ‘OLD’
       prefix against the filename that would be normally referenced in
       the result of the compilation is done using textual comparison of
       the prefixes, or ignoring character case for case insensitive
       filesystems and considering slashes and backslashes as equal on DOS
!      based filesystems.  The ‘-fcanon-prefix-map’ causes such
!      comparisons to be done on canonicalized paths of ‘OLD’ and the
       referenced filename.
  
! ‘-fplugin=NAME.so’
       Load the plugin code in file NAME.so, assumed to be a shared object
       to be dlopen'd by the compiler.  The base name of the shared object
       file is used to identify the plugin for the purposes of argument
!      parsing (See ‘-fplugin-arg-NAME-KEY=VALUE’ below).  Each plugin
       should define the callback functions specified in the Plugins API.
  
! ‘-fplugin-arg-NAME-KEY=VALUE’
       Define an argument called KEY with a value of VALUE for the plugin
       called NAME.
  
! ‘-fdump-ada-spec[-slim]’
       For C and C++ source and include files, generate corresponding Ada
       specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
       headers::, which provides detailed documentation on this feature.
  
! ‘-fada-spec-parent=UNIT’
!      In conjunction with ‘-fdump-ada-spec[-slim]’ above, generate Ada
       specs as child units of parent UNIT.
  
! ‘-fdump-go-spec=FILE’
       For input files in any language, generate corresponding Go
!      declarations in FILE.  This generates Go ‘const’, ‘type’, ‘var’,
!      and ‘func’ declarations which may be a useful way to start writing
       a Go interface to code written in some other language.
  
! ‘@FILE’
       Read command-line options from FILE.  The options read are inserted
       in place of the original @FILE option.  If FILE does not exist, or
       cannot be read, then the option will be treated literally, and not
*************** File: gcc.info,  Node: Invoking G++,  Ne
*** 2562,2582 ****
  3.3 Compiling C++ Programs
  ==========================
  
! C++ source files conventionally use one of the suffixes '.C', '.cc',
! '.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
! '.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
! preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
  these names and compiles them as C++ programs even if you call the
  compiler the same way as for compiling C programs (usually with the name
! 'gcc').
  
!  However, the use of 'gcc' does not add the C++ library.  'g++' is a
  program that calls GCC and automatically specifies linking against the
! C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
! instead of C source files unless '-x' is used.  This program is also
! useful when precompiling a C header file with a '.h' extension for use
! in C++ compilations.  On many systems, 'g++' is also installed with the
! name 'c++'.
  
   When you compile C++ programs, you may specify many of the same
  command-line options that you use for compiling programs in any
--- 2566,2586 ----
  3.3 Compiling C++ Programs
  ==========================
  
! C++ source files conventionally use one of the suffixes ‘.C’, ‘.cc’,
! ‘.cpp’, ‘.CPP’, ‘.c++’, ‘.cp’, or ‘.cxx’; C++ header files often use
! ‘.hh’, ‘.hpp’, ‘.H’, or (for shared template code) ‘.tcc’; and
! preprocessed C++ files use the suffix ‘.ii’.  GCC recognizes files with
  these names and compiles them as C++ programs even if you call the
  compiler the same way as for compiling C programs (usually with the name
! ‘gcc’).
  
!  However, the use of ‘gcc’ does not add the C++ library.  ‘g++’ is a
  program that calls GCC and automatically specifies linking against the
! C++ library.  It treats ‘.c’, ‘.h’ and ‘.i’ files as C++ source files
! instead of C source files unless ‘-x’ is used.  This program is also
! useful when precompiling a C header file with a ‘.h’ extension for use
! in C++ compilations.  On many systems, ‘g++’ is also installed with the
! name ‘c++’.
  
   When you compile C++ programs, you may specify many of the same
  command-line options that you use for compiling programs in any
*************** The following options control the dialec
*** 2597,2810 ****
  from C, such as C++, Objective-C and Objective-C++) that the compiler
  accepts:
  
! '-ansi'
!      In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
!      equivalent to '-std=c++98'.
  
       This turns off certain features of GCC that are incompatible with
       ISO C90 (when compiling C code), or of standard C++ (when compiling
!      C++ code), such as the 'asm' and 'typeof' keywords, and predefined
!      macros such as 'unix' and 'vax' that identify the type of system
       you are using.  It also enables the undesirable and rarely used ISO
       trigraph feature.  For the C compiler, it disables recognition of
!      C++ style '//' comments as well as the 'inline' keyword.
  
!      The alternate keywords '__asm__', '__extension__', '__inline__' and
!      '__typeof__' continue to work despite '-ansi'.  You would not want
       to use them in an ISO C program, of course, but it is useful to put
       them in header files that might be included in compilations done
!      with '-ansi'.  Alternate predefined macros such as '__unix__' and
!      '__vax__' are also available, with or without '-ansi'.
  
!      The '-ansi' option does not cause non-ISO programs to be rejected
!      gratuitously.  For that, '-Wpedantic' is required in addition to
!      '-ansi'.  *Note Warning Options::.
  
!      The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
       is used.  Some header files may notice this macro and refrain from
       declaring certain functions or defining certain macros that the ISO
       standard doesn't call for; this is to avoid interfering with any
       programs that might use these names for other things.
  
       Functions that are normally built in but do not have semantics
!      defined by ISO C (such as 'alloca' and 'ffs') are not built-in
!      functions when '-ansi' is used.  *Note Other built-in functions
       provided by GCC: Other Builtins, for details of the functions
       affected.
  
! '-std='
       Determine the language standard.  *Note Language Standards
       Supported by GCC: Standards, for details of these standard
       versions.  This option is currently only supported when compiling C
       or C++.
  
!      The compiler can accept several base standards, such as 'c90' or
!      'c++98', and GNU dialects of those standards, such as 'gnu90' or
!      'gnu++98'.  When a base standard is specified, the compiler accepts
       all programs following that standard plus those using GNU
!      extensions that do not contradict it.  For example, '-std=c90'
       turns off certain features of GCC that are incompatible with ISO
!      C90, such as the 'asm' and 'typeof' keywords, but not other GNU
       extensions that do not have a meaning in ISO C90, such as omitting
!      the middle term of a '?:' expression.  On the other hand, when a
       GNU dialect of a standard is specified, all features supported by
       the compiler are enabled, even when those features change the
       meaning of the base standard.  As a result, some strict-conforming
       programs may be rejected.  The particular standard is used by
!      '-Wpedantic' to identify which features are GNU extensions given
!      that version of the standard.  For example '-std=gnu90 -Wpedantic'
!      warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
       does not.
  
       A value for this option must be provided; possible values are
  
!      'c90'
!      'c89'
!      'iso9899:1990'
            Support all ISO C90 programs (certain GNU extensions that
!           conflict with ISO C90 are disabled).  Same as '-ansi' for C
            code.
  
!      'iso9899:199409'
            ISO C90 as modified in amendment 1.
  
!      'c99'
!      'c9x'
!      'iso9899:1999'
!      'iso9899:199x'
            ISO C99.  This standard is substantially completely supported,
            modulo bugs and floating-point issues (mainly but not entirely
            relating to optional C99 features from Annexes F and G). See
            <https://gcc.gnu.org/c99status.html> for more information.
!           The names 'c9x' and 'iso9899:199x' are deprecated.
  
!      'c11'
!      'c1x'
!      'iso9899:2011'
            ISO C11, the 2011 revision of the ISO C standard.  This
            standard is substantially completely supported, modulo bugs,
            floating-point issues (mainly but not entirely relating to
            optional C11 features from Annexes F and G) and the optional
            Annexes K (Bounds-checking interfaces) and L (Analyzability).
!           The name 'c1x' is deprecated.
  
!      'c17'
!      'c18'
!      'iso9899:2017'
!      'iso9899:2018'
            ISO C17, the 2017 revision of the ISO C standard (published in
            2018).  This standard is same as C11 except for corrections of
!           defects (all of which are also applied with '-std=c11') and a
!           new value of '__STDC_VERSION__', and so is supported to the
            same extent as C11.
  
!      'c23'
!      'c2x'
!      'iso9899:2024'
            ISO C23, the 2023 revision of the ISO C standard (expected to
            be published in 2024).  The support for this version is
!           experimental and incomplete.  The name 'c2x' is deprecated.
  
!      'gnu90'
!      'gnu89'
            GNU dialect of ISO C90 (including some C99 features).
  
!      'gnu99'
!      'gnu9x'
!           GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
  
!      'gnu11'
!      'gnu1x'
!           GNU dialect of ISO C11.  The name 'gnu1x' is deprecated.
  
!      'gnu17'
!      'gnu18'
            GNU dialect of ISO C17.  This is the default for C code.
  
!      'gnu23'
!      'gnu2x'
            The next version of the ISO C standard, still under
            development, plus GNU extensions.  The support for this
!           version is experimental and incomplete.  The name 'gnu2x' is
            deprecated.
  
!      'c++98'
!      'c++03'
            The 1998 ISO C++ standard plus the 2003 technical corrigendum
!           and some additional defect reports.  Same as '-ansi' for C++
            code.
  
!      'gnu++98'
!      'gnu++03'
!           GNU dialect of '-std=c++98'.
  
!      'c++11'
!      'c++0x'
!           The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
            is deprecated.
  
!      'gnu++11'
!      'gnu++0x'
!           GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
            deprecated.
  
!      'c++14'
!      'c++1y'
!           The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
            is deprecated.
  
!      'gnu++14'
!      'gnu++1y'
!           GNU dialect of '-std=c++14'.  The name 'gnu++1y' is
            deprecated.
  
!      'c++17'
!      'c++1z'
!           The 2017 ISO C++ standard plus amendments.  The name 'c++1z'
            is deprecated.
  
!      'gnu++17'
!      'gnu++1z'
!           GNU dialect of '-std=c++17'.  This is the default for C++
!           code.  The name 'gnu++1z' is deprecated.
  
!      'c++20'
!      'c++2a'
            The 2020 ISO C++ standard plus amendments.  Support is
            experimental, and could change in incompatible ways in future
!           releases.  The name 'c++2a' is deprecated.
  
!      'gnu++20'
!      'gnu++2a'
!           GNU dialect of '-std=c++20'.  Support is experimental, and
            could change in incompatible ways in future releases.  The
!           name 'gnu++2a' is deprecated.
  
!      'c++2b'
!      'c++23'
            The next revision of the ISO C++ standard, planned for 2023.
            Support is highly experimental, and will almost certainly
            change in incompatible ways in future releases.
  
!      'gnu++2b'
!      'gnu++23'
!           GNU dialect of '-std=c++2b'.  Support is highly experimental,
            and will almost certainly change in incompatible ways in
            future releases.
  
!      'c++2c'
!      'c++26'
            The next revision of the ISO C++ standard, planned for 2026.
            Support is highly experimental, and will almost certainly
            change in incompatible ways in future releases.
  
!      'gnu++2c'
!      'gnu++26'
!           GNU dialect of '-std=c++2c'.  Support is highly experimental,
            and will almost certainly change in incompatible ways in
            future releases.
  
! '-aux-info FILENAME'
       Output to the given filename prototyped declarations for all
       functions declared and/or defined in a translation unit, including
       those in header files.  This option is silently ignored in any
--- 2601,2814 ----
  from C, such as C++, Objective-C and Objective-C++) that the compiler
  accepts:
  
! ‘-ansi’
!      In C mode, this is equivalent to ‘-std=c90’.  In C++ mode, it is
!      equivalent to ‘-std=c++98’.
  
       This turns off certain features of GCC that are incompatible with
       ISO C90 (when compiling C code), or of standard C++ (when compiling
!      C++ code), such as the ‘asm’ and ‘typeof’ keywords, and predefined
!      macros such as ‘unix’ and ‘vax’ that identify the type of system
       you are using.  It also enables the undesirable and rarely used ISO
       trigraph feature.  For the C compiler, it disables recognition of
!      C++ style ‘//’ comments as well as the ‘inline’ keyword.
  
!      The alternate keywords ‘__asm__’, ‘__extension__’, ‘__inline__’ and
!      ‘__typeof__’ continue to work despite ‘-ansi’.  You would not want
       to use them in an ISO C program, of course, but it is useful to put
       them in header files that might be included in compilations done
!      with ‘-ansi’.  Alternate predefined macros such as ‘__unix__’ and
!      ‘__vax__’ are also available, with or without ‘-ansi’.
  
!      The ‘-ansi’ option does not cause non-ISO programs to be rejected
!      gratuitously.  For that, ‘-Wpedantic’ is required in addition to
!      ‘-ansi’.  *Note Warning Options::.
  
!      The macro ‘__STRICT_ANSI__’ is predefined when the ‘-ansi’ option
       is used.  Some header files may notice this macro and refrain from
       declaring certain functions or defining certain macros that the ISO
       standard doesn't call for; this is to avoid interfering with any
       programs that might use these names for other things.
  
       Functions that are normally built in but do not have semantics
!      defined by ISO C (such as ‘alloca’ and ‘ffs’) are not built-in
!      functions when ‘-ansi’ is used.  *Note Other built-in functions
       provided by GCC: Other Builtins, for details of the functions
       affected.
  
! ‘-std=’
       Determine the language standard.  *Note Language Standards
       Supported by GCC: Standards, for details of these standard
       versions.  This option is currently only supported when compiling C
       or C++.
  
!      The compiler can accept several base standards, such as ‘c90’ or
!      ‘c++98’, and GNU dialects of those standards, such as ‘gnu90’ or
!      ‘gnu++98’.  When a base standard is specified, the compiler accepts
       all programs following that standard plus those using GNU
!      extensions that do not contradict it.  For example, ‘-std=c90’
       turns off certain features of GCC that are incompatible with ISO
!      C90, such as the ‘asm’ and ‘typeof’ keywords, but not other GNU
       extensions that do not have a meaning in ISO C90, such as omitting
!      the middle term of a ‘?:’ expression.  On the other hand, when a
       GNU dialect of a standard is specified, all features supported by
       the compiler are enabled, even when those features change the
       meaning of the base standard.  As a result, some strict-conforming
       programs may be rejected.  The particular standard is used by
!      ‘-Wpedantic’ to identify which features are GNU extensions given
!      that version of the standard.  For example ‘-std=gnu90 -Wpedantic’
!      warns about C++ style ‘//’ comments, while ‘-std=gnu99 -Wpedantic’
       does not.
  
       A value for this option must be provided; possible values are
  
!      ‘c90’
!      ‘c89’
!      ‘iso9899:1990’
            Support all ISO C90 programs (certain GNU extensions that
!           conflict with ISO C90 are disabled).  Same as ‘-ansi’ for C
            code.
  
!      ‘iso9899:199409’
            ISO C90 as modified in amendment 1.
  
!      ‘c99’
!      ‘c9x’
!      ‘iso9899:1999’
!      ‘iso9899:199x’
            ISO C99.  This standard is substantially completely supported,
            modulo bugs and floating-point issues (mainly but not entirely
            relating to optional C99 features from Annexes F and G). See
            <https://gcc.gnu.org/c99status.html> for more information.
!           The names ‘c9x’ and ‘iso9899:199x’ are deprecated.
  
!      ‘c11’
!      ‘c1x’
!      ‘iso9899:2011’
            ISO C11, the 2011 revision of the ISO C standard.  This
            standard is substantially completely supported, modulo bugs,
            floating-point issues (mainly but not entirely relating to
            optional C11 features from Annexes F and G) and the optional
            Annexes K (Bounds-checking interfaces) and L (Analyzability).
!           The name ‘c1x’ is deprecated.
  
!      ‘c17’
!      ‘c18’
!      ‘iso9899:2017’
!      ‘iso9899:2018’
            ISO C17, the 2017 revision of the ISO C standard (published in
            2018).  This standard is same as C11 except for corrections of
!           defects (all of which are also applied with ‘-std=c11’) and a
!           new value of ‘__STDC_VERSION__’, and so is supported to the
            same extent as C11.
  
!      ‘c23’
!      ‘c2x’
!      ‘iso9899:2024’
            ISO C23, the 2023 revision of the ISO C standard (expected to
            be published in 2024).  The support for this version is
!           experimental and incomplete.  The name ‘c2x’ is deprecated.
  
!      ‘gnu90’
!      ‘gnu89’
            GNU dialect of ISO C90 (including some C99 features).
  
!      ‘gnu99’
!      ‘gnu9x’
!           GNU dialect of ISO C99.  The name ‘gnu9x’ is deprecated.
  
!      ‘gnu11’
!      ‘gnu1x’
!           GNU dialect of ISO C11.  The name ‘gnu1x’ is deprecated.
  
!      ‘gnu17’
!      ‘gnu18’
            GNU dialect of ISO C17.  This is the default for C code.
  
!      ‘gnu23’
!      ‘gnu2x’
            The next version of the ISO C standard, still under
            development, plus GNU extensions.  The support for this
!           version is experimental and incomplete.  The name ‘gnu2x’ is
            deprecated.
  
!      ‘c++98’
!      ‘c++03’
            The 1998 ISO C++ standard plus the 2003 technical corrigendum
!           and some additional defect reports.  Same as ‘-ansi’ for C++
            code.
  
!      ‘gnu++98’
!      ‘gnu++03’
!           GNU dialect of ‘-std=c++98’.
  
!      ‘c++11’
!      ‘c++0x’
!           The 2011 ISO C++ standard plus amendments.  The name ‘c++0x’
            is deprecated.
  
!      ‘gnu++11’
!      ‘gnu++0x’
!           GNU dialect of ‘-std=c++11’.  The name ‘gnu++0x’ is
            deprecated.
  
!      ‘c++14’
!      ‘c++1y’
!           The 2014 ISO C++ standard plus amendments.  The name ‘c++1y’
            is deprecated.
  
!      ‘gnu++14’
!      ‘gnu++1y’
!           GNU dialect of ‘-std=c++14’.  The name ‘gnu++1y’ is
            deprecated.
  
!      ‘c++17’
!      ‘c++1z’
!           The 2017 ISO C++ standard plus amendments.  The name ‘c++1z’
            is deprecated.
  
!      ‘gnu++17’
!      ‘gnu++1z’
!           GNU dialect of ‘-std=c++17’.  This is the default for C++
!           code.  The name ‘gnu++1z’ is deprecated.
  
!      ‘c++20’
!      ‘c++2a’
            The 2020 ISO C++ standard plus amendments.  Support is
            experimental, and could change in incompatible ways in future
!           releases.  The name ‘c++2a’ is deprecated.
  
!      ‘gnu++20’
!      ‘gnu++2a’
!           GNU dialect of ‘-std=c++20’.  Support is experimental, and
            could change in incompatible ways in future releases.  The
!           name ‘gnu++2a’ is deprecated.
  
!      ‘c++2b’
!      ‘c++23’
            The next revision of the ISO C++ standard, planned for 2023.
            Support is highly experimental, and will almost certainly
            change in incompatible ways in future releases.
  
!      ‘gnu++2b’
!      ‘gnu++23’
!           GNU dialect of ‘-std=c++2b’.  Support is highly experimental,
            and will almost certainly change in incompatible ways in
            future releases.
  
!      ‘c++2c’
!      ‘c++26’
            The next revision of the ISO C++ standard, planned for 2026.
            Support is highly experimental, and will almost certainly
            change in incompatible ways in future releases.
  
!      ‘gnu++2c’
!      ‘gnu++26’
!           GNU dialect of ‘-std=c++2c’.  Support is highly experimental,
            and will almost certainly change in incompatible ways in
            future releases.
  
! ‘-aux-info FILENAME’
       Output to the given filename prototyped declarations for all
       functions declared and/or defined in a translation unit, including
       those in header files.  This option is silently ignored in any
*************** accepts:
*** 2812,2853 ****
  
       Besides declarations, the file indicates, in comments, the origin
       of each declaration (source file and line), whether the declaration
!      was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
       for old, respectively, in the first character after the line number
       and the colon), and whether it came from a declaration or a
!      definition ('C' or 'F', respectively, in the following character).
       In the case of function definitions, a K&R-style list of arguments
       followed by their declarations is also provided, inside comments,
       after the declaration.
  
! '-fno-asm'
!      Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
       code can use these words as identifiers.  You can use the keywords
!      '__asm__', '__inline__' and '__typeof__' instead.  In C, '-ansi'
!      implies '-fno-asm'.
  
!      In C++, 'inline' is a standard keyword and is not affected by this
!      switch.  You may want to use the '-fno-gnu-keywords' flag instead,
!      which disables 'typeof' but not 'asm' and 'inline'.  In C99 mode
!      ('-std=c99' or '-std=gnu99'), this switch only affects the 'asm'
!      and 'typeof' keywords, since 'inline' is a standard keyword in ISO
!      C99.  In C23 mode ('-std=c23' or '-std=gnu23'), this switch only
!      affects the 'asm' keyword, since 'typeof' is a standard keyword in
       ISO C23.
  
! '-fno-builtin'
! '-fno-builtin-FUNCTION'
       Don't recognize built-in functions that do not begin with
!      '__builtin_' as prefix.  *Note Other built-in functions provided by
       GCC: Other Builtins, for details of the functions affected,
!      including those which are not built-in functions when '-ansi' or
!      '-std' options for strict ISO C conformance are used because they
       do not have an ISO standard meaning.
  
       GCC normally generates special code to handle certain built-in
!      functions more efficiently; for instance, calls to 'alloca' may
       become single instructions which adjust the stack directly, and
!      calls to 'memcpy' may become inline copy loops.  The resulting code
       is often both smaller and faster, but since the function calls no
       longer appear as such, you cannot set a breakpoint on those calls,
       nor can you change the behavior of the functions by linking with a
--- 2816,2857 ----
  
       Besides declarations, the file indicates, in comments, the origin
       of each declaration (source file and line), whether the declaration
!      was implicit, prototyped or unprototyped (‘I’, ‘N’ for new or ‘O’
       for old, respectively, in the first character after the line number
       and the colon), and whether it came from a declaration or a
!      definition (‘C’ or ‘F’, respectively, in the following character).
       In the case of function definitions, a K&R-style list of arguments
       followed by their declarations is also provided, inside comments,
       after the declaration.
  
! ‘-fno-asm’
!      Do not recognize ‘asm’, ‘inline’ or ‘typeof’ as a keyword, so that
       code can use these words as identifiers.  You can use the keywords
!      ‘__asm__’, ‘__inline__’ and ‘__typeof__’ instead.  In C, ‘-ansi’
!      implies ‘-fno-asm’.
  
!      In C++, ‘inline’ is a standard keyword and is not affected by this
!      switch.  You may want to use the ‘-fno-gnu-keywords’ flag instead,
!      which disables ‘typeof’ but not ‘asm’ and ‘inline’.  In C99 mode
!      (‘-std=c99’ or ‘-std=gnu99’), this switch only affects the ‘asm’
!      and ‘typeof’ keywords, since ‘inline’ is a standard keyword in ISO
!      C99.  In C23 mode (‘-std=c23’ or ‘-std=gnu23’), this switch only
!      affects the ‘asm’ keyword, since ‘typeof’ is a standard keyword in
       ISO C23.
  
! ‘-fno-builtin’
! ‘-fno-builtin-FUNCTION’
       Don't recognize built-in functions that do not begin with
!      ‘__builtin_’ as prefix.  *Note Other built-in functions provided by
       GCC: Other Builtins, for details of the functions affected,
!      including those which are not built-in functions when ‘-ansi’ or
!      ‘-std’ options for strict ISO C conformance are used because they
       do not have an ISO standard meaning.
  
       GCC normally generates special code to handle certain built-in
!      functions more efficiently; for instance, calls to ‘alloca’ may
       become single instructions which adjust the stack directly, and
!      calls to ‘memcpy’ may become inline copy loops.  The resulting code
       is often both smaller and faster, but since the function calls no
       longer appear as such, you cannot set a breakpoint on those calls,
       nor can you change the behavior of the functions by linking with a
*************** accepts:
*** 2856,2899 ****
       warn about problems with calls to that function, or to generate
       more efficient code, even if the resulting code still contains
       calls to that function.  For example, warnings are given with
!      '-Wformat' for bad calls to 'printf' when 'printf' is built in and
!      'strlen' is known not to modify global memory.
  
!      With the '-fno-builtin-FUNCTION' option only the built-in function
!      FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
       If a function is named that is not built-in in this version of GCC,
       this option is ignored.  There is no corresponding
!      '-fbuiltin-FUNCTION' option; if you wish to enable built-in
!      functions selectively when using '-fno-builtin' or
!      '-ffreestanding', you may define macros such as:
  
            #define abs(n)          __builtin_abs ((n))
            #define strcpy(d, s)    __builtin_strcpy ((d), (s))
  
! '-fcond-mismatch'
       Allow conditional expressions with mismatched types in the second
       and third arguments.  The value of such an expression is void.
       This option is not supported for C++.
  
! '-ffreestanding'
  
       Assert that compilation targets a freestanding environment.  This
!      implies '-fno-builtin'.  A freestanding environment is one in which
       the standard library may not exist, and program startup may not
!      necessarily be at 'main'.  The most obvious example is an OS
!      kernel.  This is equivalent to '-fno-hosted'.
  
       *Note Language Standards Supported by GCC: Standards, for details
       of freestanding and hosted environments.
  
! '-fgimple'
  
!      Enable parsing of function definitions marked with '__GIMPLE'.
       This is an experimental feature that allows unit testing of GIMPLE
       passes.
  
! '-fgnu-tm'
!      When the option '-fgnu-tm' is specified, the compiler generates
       code for the Linux variant of Intel's current Transactional Memory
       ABI specification document (Revision 1.1, May 6 2009).  This is an
       experimental feature whose interface may change in future versions
--- 2860,2903 ----
       warn about problems with calls to that function, or to generate
       more efficient code, even if the resulting code still contains
       calls to that function.  For example, warnings are given with
!      ‘-Wformat’ for bad calls to ‘printf’ when ‘printf’ is built in and
!      ‘strlen’ is known not to modify global memory.
  
!      With the ‘-fno-builtin-FUNCTION’ option only the built-in function
!      FUNCTION is disabled.  FUNCTION must not begin with ‘__builtin_’.
       If a function is named that is not built-in in this version of GCC,
       this option is ignored.  There is no corresponding
!      ‘-fbuiltin-FUNCTION’ option; if you wish to enable built-in
!      functions selectively when using ‘-fno-builtin’ or
!      ‘-ffreestanding’, you may define macros such as:
  
            #define abs(n)          __builtin_abs ((n))
            #define strcpy(d, s)    __builtin_strcpy ((d), (s))
  
! ‘-fcond-mismatch’
       Allow conditional expressions with mismatched types in the second
       and third arguments.  The value of such an expression is void.
       This option is not supported for C++.
  
! ‘-ffreestanding’
  
       Assert that compilation targets a freestanding environment.  This
!      implies ‘-fno-builtin’.  A freestanding environment is one in which
       the standard library may not exist, and program startup may not
!      necessarily be at ‘main’.  The most obvious example is an OS
!      kernel.  This is equivalent to ‘-fno-hosted’.
  
       *Note Language Standards Supported by GCC: Standards, for details
       of freestanding and hosted environments.
  
! ‘-fgimple’
  
!      Enable parsing of function definitions marked with ‘__GIMPLE’.
       This is an experimental feature that allows unit testing of GIMPLE
       passes.
  
! ‘-fgnu-tm’
!      When the option ‘-fgnu-tm’ is specified, the compiler generates
       code for the Linux variant of Intel's current Transactional Memory
       ABI specification document (Revision 1.1, May 6 2009).  This is an
       experimental feature whose interface may change in future versions
*************** accepts:
*** 2905,2943 ****
       libitm.
  
       Note that the transactional memory feature is not supported with
!      non-call exceptions ('-fnon-call-exceptions').
  
! '-fgnu89-inline'
!      The option '-fgnu89-inline' tells GCC to use the traditional GNU
!      semantics for 'inline' functions when in C99 mode.  *Note An Inline
       Function is As Fast As a Macro: Inline.  Using this option is
!      roughly equivalent to adding the 'gnu_inline' function attribute to
       all inline functions (*note Function Attributes::).
  
!      The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
!      semantics for 'inline' when in C99 or gnu99 mode (i.e., it
       specifies the default behavior).  This option is not supported in
!      '-std=c90' or '-std=gnu90' mode.
  
!      The preprocessor macros '__GNUC_GNU_INLINE__' and
!      '__GNUC_STDC_INLINE__' may be used to check which semantics are in
!      effect for 'inline' functions.  *Note (cpp)Common Predefined
       Macros::.
  
! '-fhosted'
  
       Assert that compilation targets a hosted environment.  This implies
!      '-fbuiltin'.  A hosted environment is one in which the entire
!      standard library is available, and in which 'main' has a return
!      type of 'int'.  Examples are nearly everything except a kernel.
!      This is equivalent to '-fno-freestanding'.
  
! '-flax-vector-conversions'
       Allow implicit conversions between vectors with differing numbers
       of elements and/or incompatible element types.  This option should
       not be used for new code.
  
! '-fms-extensions'
       Accept some non-standard constructs used in Microsoft header files.
  
       In C++ code, this allows member names in structures to be similar
--- 2909,2947 ----
       libitm.
  
       Note that the transactional memory feature is not supported with
!      non-call exceptions (‘-fnon-call-exceptions’).
  
! ‘-fgnu89-inline’
!      The option ‘-fgnu89-inline’ tells GCC to use the traditional GNU
!      semantics for ‘inline’ functions when in C99 mode.  *Note An Inline
       Function is As Fast As a Macro: Inline.  Using this option is
!      roughly equivalent to adding the ‘gnu_inline’ function attribute to
       all inline functions (*note Function Attributes::).
  
!      The option ‘-fno-gnu89-inline’ explicitly tells GCC to use the C99
!      semantics for ‘inline’ when in C99 or gnu99 mode (i.e., it
       specifies the default behavior).  This option is not supported in
!      ‘-std=c90’ or ‘-std=gnu90’ mode.
  
!      The preprocessor macros ‘__GNUC_GNU_INLINE__’ and
!      ‘__GNUC_STDC_INLINE__’ may be used to check which semantics are in
!      effect for ‘inline’ functions.  *Note (cpp)Common Predefined
       Macros::.
  
! ‘-fhosted’
  
       Assert that compilation targets a hosted environment.  This implies
!      ‘-fbuiltin’.  A hosted environment is one in which the entire
!      standard library is available, and in which ‘main’ has a return
!      type of ‘int’.  Examples are nearly everything except a kernel.
!      This is equivalent to ‘-fno-freestanding’.
  
! ‘-flax-vector-conversions’
       Allow implicit conversions between vectors with differing numbers
       of elements and/or incompatible element types.  This option should
       not be used for new code.
  
! ‘-fms-extensions’
       Accept some non-standard constructs used in Microsoft header files.
  
       In C++ code, this allows member names in structures to be similar
*************** accepts:
*** 2955,3070 ****
       Note that this option is off for all targets except for x86 targets
       using ms-abi.
  
! '-foffload=disable'
! '-foffload=default'
! '-foffload=TARGET-LIST'
       Specify for which OpenMP and OpenACC offload targets code should be
       generated.  The default behavior, equivalent to
!      '-foffload=default', is to generate code for all supported offload
!      targets.  The '-foffload=disable' form generates code only for the
!      host fallback, while '-foffload=TARGET-LIST' generates code only
       for the specified comma-separated list of offload targets.
  
       Offload targets are specified in GCC's internal target-triplet
!      format.  You can run the compiler with '-v' to show the list of
!      configured offload targets under 'OFFLOAD_TARGET_NAMES'.
  
! '-foffload-options=OPTIONS'
! '-foffload-options=TARGET-TRIPLET-LIST=OPTIONS'
  
!      With '-foffload-options=OPTIONS', GCC passes the specified OPTIONS
       to the compilers for all enabled offloading targets.  You can
       specify options that apply only to a specific target or targets by
!      using the '-foffload-options=TARGET-LIST=OPTIONS' form.  The
       TARGET-LIST is a comma-separated list in the same format as for the
!      '-foffload=' option.
  
       Typical command lines are
  
            -foffload-options='-fno-math-errno -ffinite-math-only' -foffload-options=nvptx-none=-latomic
            -foffload-options=amdgcn-amdhsa=-march=gfx906
  
! '-fopenacc'
!      Enable handling of OpenACC directives '#pragma acc' in C/C++ and
!      '!$acc' in free-form Fortran and '!$acc', 'c$acc' and '*$acc' in
!      fixed-form Fortran.  When '-fopenacc' is specified, the compiler
       generates accelerated code according to the OpenACC Application
       Programming Interface v2.6 <https://www.openacc.org>.  This option
!      implies '-pthread', and thus is only supported on targets that have
!      support for '-pthread'.
  
! '-fopenacc-dim=GEOM'
       Specify default compute dimensions for parallel offload regions
       that do not explicitly specify.  The GEOM value is a triple of
       ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
       size can be omitted, to use a target-specific default value.
  
! '-fopenmp'
!      Enable handling of OpenMP directives '#pragma omp',
!      '[[omp::directive(...)]]', '[[omp::sequence(...)]]' and
!      '[[omp::decl(...)]]' in C/C++ and '!$omp' in Fortran.  It
!      additionally enables the conditional compilation sentinel '!$' in
       Fortran.  In fixed source form Fortran, the sentinels can also
!      start with 'c' or '*'.  When '-fopenmp' is specified, the compiler
       generates parallel code according to the OpenMP Application Program
       Interface v4.5 <https://www.openmp.org>.  This option implies
!      '-pthread', and thus is only supported on targets that have support
!      for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
  
! '-fopenmp-simd'
!      Enable handling of OpenMP's 'simd', 'declare simd', 'declare
!      reduction', 'assume', 'ordered', 'scan' and 'loop' directive, and
!      of combined or composite directives with 'simd' as constituent with
!      '#pragma omp', '[[omp::directive(...)]]', '[[omp::sequence(...)]]'
!      and '[[omp::decl(...)]]' in C/C++ and '!$omp' in Fortran.  It
!      additionally enables the conditional compilation sentinel '!$' in
       Fortran.  In fixed source form Fortran, the sentinels can also
!      start with 'c' or '*'.  Other OpenMP directives are ignored.
!      Unless '-fopenmp' is additionally specified, the 'loop' region
       binds to the current task region, independent of the specified
!      'bind' clause.
  
! '-fopenmp-target-simd-clone'
! '-fopenmp-target-simd-clone=DEVICE-TYPE'
       In addition to generating SIMD clones for functions marked with the
!      'declare simd' directive, GCC also generates clones for functions
!      marked with the OpenMP 'declare target' directive that are suitable
       for vectorization when this option is in effect.  The DEVICE-TYPE
!      may be one of 'none', 'host', 'nohost', and 'any', which correspond
!      to keywords for the 'device_type' clause of the 'declare target'
       directive; clones are generated for the intersection of devices
!      specified.  '-fopenmp-target-simd-clone' is equivalent to
!      '-fopenmp-target-simd-clone=any' and
!      '-fno-openmp-target-simd-clone' is equivalent to
!      '-fopenmp-target-simd-clone=none'.
  
!      At '-O2' and higher (but not '-Os' or '-Og') this optimization
!      defaults to '-fopenmp-target-simd-clone=nohost'; otherwise it is
       disabled by default.
  
! '-fpermitted-flt-eval-methods=STYLE'
       ISO/IEC TS 18661-3 defines new permissible values for
!      'FLT_EVAL_METHOD' that indicate that operations and constants with
       a semantic type that is an interchange or extended format should be
       evaluated to the precision and range of that type.  These new
       values are a superset of those permitted under C99/C11, which does
       not specify the meaning of other positive values of
!      'FLT_EVAL_METHOD'.  As such, code conforming to C11 may not have
       been written expecting the possibility of the new values.
  
!      '-fpermitted-flt-eval-methods' specifies whether the compiler
!      should allow only the values of 'FLT_EVAL_METHOD' specified in
       C99/C11, or the extended set of values specified in ISO/IEC TS
       18661-3.
  
!      STYLE is either 'c11' or 'ts-18661-3' as appropriate.
  
!      The default when in a standards compliant mode ('-std=c11' or
!      similar) is '-fpermitted-flt-eval-methods=c11'.  The default when
!      in a GNU dialect ('-std=gnu11' or similar) is
!      '-fpermitted-flt-eval-methods=ts-18661-3'.
  
!      The '-fdeps-*' options are used to extract structured dependency
       information for a source.  This involves determining what resources
       provided by other source files will be required to compile the
       source as well as what resources are provided by the source.  This
--- 2959,3074 ----
       Note that this option is off for all targets except for x86 targets
       using ms-abi.
  
! ‘-foffload=disable’
! ‘-foffload=default’
! ‘-foffload=TARGET-LIST’
       Specify for which OpenMP and OpenACC offload targets code should be
       generated.  The default behavior, equivalent to
!      ‘-foffload=default’, is to generate code for all supported offload
!      targets.  The ‘-foffload=disable’ form generates code only for the
!      host fallback, while ‘-foffload=TARGET-LIST’ generates code only
       for the specified comma-separated list of offload targets.
  
       Offload targets are specified in GCC's internal target-triplet
!      format.  You can run the compiler with ‘-v’ to show the list of
!      configured offload targets under ‘OFFLOAD_TARGET_NAMES’.
  
! ‘-foffload-options=OPTIONS’
! ‘-foffload-options=TARGET-TRIPLET-LIST=OPTIONS’
  
!      With ‘-foffload-options=OPTIONS’, GCC passes the specified OPTIONS
       to the compilers for all enabled offloading targets.  You can
       specify options that apply only to a specific target or targets by
!      using the ‘-foffload-options=TARGET-LIST=OPTIONS’ form.  The
       TARGET-LIST is a comma-separated list in the same format as for the
!      ‘-foffload=’ option.
  
       Typical command lines are
  
            -foffload-options='-fno-math-errno -ffinite-math-only' -foffload-options=nvptx-none=-latomic
            -foffload-options=amdgcn-amdhsa=-march=gfx906
  
! ‘-fopenacc’
!      Enable handling of OpenACC directives ‘#pragma acc’ in C/C++ and
!      ‘!$acc’ in free-form Fortran and ‘!$acc’, ‘c$acc’ and ‘*$acc’ in
!      fixed-form Fortran.  When ‘-fopenacc’ is specified, the compiler
       generates accelerated code according to the OpenACC Application
       Programming Interface v2.6 <https://www.openacc.org>.  This option
!      implies ‘-pthread’, and thus is only supported on targets that have
!      support for ‘-pthread’.
  
! ‘-fopenacc-dim=GEOM’
       Specify default compute dimensions for parallel offload regions
       that do not explicitly specify.  The GEOM value is a triple of
       ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
       size can be omitted, to use a target-specific default value.
  
! ‘-fopenmp’
!      Enable handling of OpenMP directives ‘#pragma omp’,
!      ‘[[omp::directive(...)]]’, ‘[[omp::sequence(...)]]’ and
!      ‘[[omp::decl(...)]]’ in C/C++ and ‘!$omp’ in Fortran.  It
!      additionally enables the conditional compilation sentinel ‘!$’ in
       Fortran.  In fixed source form Fortran, the sentinels can also
!      start with ‘c’ or ‘*’.  When ‘-fopenmp’ is specified, the compiler
       generates parallel code according to the OpenMP Application Program
       Interface v4.5 <https://www.openmp.org>.  This option implies
!      ‘-pthread’, and thus is only supported on targets that have support
!      for ‘-pthread’.  ‘-fopenmp’ implies ‘-fopenmp-simd’.
  
! ‘-fopenmp-simd’
!      Enable handling of OpenMP's ‘simd’, ‘declare simd’, ‘declare
!      reduction’, ‘assume’, ‘ordered’, ‘scan’ and ‘loop’ directive, and
!      of combined or composite directives with ‘simd’ as constituent with
!      ‘#pragma omp’, ‘[[omp::directive(...)]]’, ‘[[omp::sequence(...)]]’
!      and ‘[[omp::decl(...)]]’ in C/C++ and ‘!$omp’ in Fortran.  It
!      additionally enables the conditional compilation sentinel ‘!$’ in
       Fortran.  In fixed source form Fortran, the sentinels can also
!      start with ‘c’ or ‘*’.  Other OpenMP directives are ignored.
!      Unless ‘-fopenmp’ is additionally specified, the ‘loop’ region
       binds to the current task region, independent of the specified
!      ‘bind’ clause.
  
! ‘-fopenmp-target-simd-clone’
! ‘-fopenmp-target-simd-clone=DEVICE-TYPE’
       In addition to generating SIMD clones for functions marked with the
!      ‘declare simd’ directive, GCC also generates clones for functions
!      marked with the OpenMP ‘declare target’ directive that are suitable
       for vectorization when this option is in effect.  The DEVICE-TYPE
!      may be one of ‘none’, ‘host’, ‘nohost’, and ‘any’, which correspond
!      to keywords for the ‘device_type’ clause of the ‘declare target’
       directive; clones are generated for the intersection of devices
!      specified.  ‘-fopenmp-target-simd-clone’ is equivalent to
!      ‘-fopenmp-target-simd-clone=any’ and
!      ‘-fno-openmp-target-simd-clone’ is equivalent to
!      ‘-fopenmp-target-simd-clone=none’.
  
!      At ‘-O2’ and higher (but not ‘-Os’ or ‘-Og’) this optimization
!      defaults to ‘-fopenmp-target-simd-clone=nohost’; otherwise it is
       disabled by default.
  
! ‘-fpermitted-flt-eval-methods=STYLE’
       ISO/IEC TS 18661-3 defines new permissible values for
!      ‘FLT_EVAL_METHOD’ that indicate that operations and constants with
       a semantic type that is an interchange or extended format should be
       evaluated to the precision and range of that type.  These new
       values are a superset of those permitted under C99/C11, which does
       not specify the meaning of other positive values of
!      ‘FLT_EVAL_METHOD’.  As such, code conforming to C11 may not have
       been written expecting the possibility of the new values.
  
!      ‘-fpermitted-flt-eval-methods’ specifies whether the compiler
!      should allow only the values of ‘FLT_EVAL_METHOD’ specified in
       C99/C11, or the extended set of values specified in ISO/IEC TS
       18661-3.
  
!      STYLE is either ‘c11’ or ‘ts-18661-3’ as appropriate.
  
!      The default when in a standards compliant mode (‘-std=c11’ or
!      similar) is ‘-fpermitted-flt-eval-methods=c11’.  The default when
!      in a GNU dialect (‘-std=gnu11’ or similar) is
!      ‘-fpermitted-flt-eval-methods=ts-18661-3’.
  
!      The ‘-fdeps-*’ options are used to extract structured dependency
       information for a source.  This involves determining what resources
       provided by other source files will be required to compile the
       source as well as what resources are provided by the source.  This
*************** accepts:
*** 3073,3172 ****
       rather than requiring such information be reflected within the
       build tools as well.
  
! '-fdeps-file=FILE'
       Where to write structured dependency information.
  
! '-fdeps-format=FORMAT'
!      The format to use for structured dependency information.  'p1689r5'
       is the only supported format right now.  Note that when this
!      argument is specified, the output of '-MF' is stripped of some
       information (namely C++ modules) so that it does not use extended
       makefile syntax not understood by most tools.
  
! '-fdeps-target=FILE'
!      Analogous to '-MT' but for structured dependency information.  This
       indicates the target which will ultimately need any required
       resources and provide any resources extracted from the source that
       may be required by other sources.
  
! '-fplan9-extensions'
       Accept some non-standard constructs used in Plan 9 code.
  
!      This enables '-fms-extensions', permits passing pointers to
       structures with anonymous fields to functions that expect pointers
       to elements of the type of the field, and permits referring to
       anonymous fields declared using a typedef.  *Note Unnamed
       struct/union fields within structs/unions: Unnamed Fields, for
       details.  This is only supported for C, not C++.
  
! '-fsigned-bitfields'
! '-funsigned-bitfields'
! '-fno-signed-bitfields'
! '-fno-unsigned-bitfields'
       These options control whether a bit-field is signed or unsigned,
!      when the declaration does not use either 'signed' or 'unsigned'.
       By default, such a bit-field is signed, because this is consistent:
!      the basic integer types such as 'int' are signed types.
  
! '-fsigned-char'
!      Let the type 'char' be signed, like 'signed char'.
  
!      Note that this is equivalent to '-fno-unsigned-char', which is the
!      negative form of '-funsigned-char'.  Likewise, the option
!      '-fno-signed-char' is equivalent to '-funsigned-char'.
  
! '-funsigned-char'
!      Let the type 'char' be unsigned, like 'unsigned char'.
  
!      Each kind of machine has a default for what 'char' should be.  It
!      is either like 'unsigned char' by default or like 'signed char' by
       default.
  
!      Ideally, a portable program should always use 'signed char' or
!      'unsigned char' when it depends on the signedness of an object.
!      But many programs have been written to use plain 'char' and expect
       it to be signed, or expect it to be unsigned, depending on the
       machines they were written for.  This option, and its inverse, let
       you make such a program work with the opposite default.
  
!      The type 'char' is always a distinct type from each of 'signed
!      char' or 'unsigned char', even though its behavior is always just
       like one of those two.
  
! '-fstrict-flex-arrays (C and C++ only)'
! '-fstrict-flex-arrays=LEVEL (C and C++ only)'
       Control when to treat the trailing array of a structure as a
       flexible array member for the purpose of accessing the elements of
       such an array.  The value of LEVEL controls the level of
       strictness.
  
!      '-fstrict-flex-arrays' is equivalent to '-fstrict-flex-arrays=3',
       which is the strictest; all trailing arrays of structures are
       treated as flexible array members.
  
!      The negative form '-fno-strict-flex-arrays' is equivalent to
!      '-fstrict-flex-arrays=0', which is the least strict.  In this case
       a trailing array is treated as a flexible array member only when it
       is declared as a flexible array member per C99 standard onwards.
  
       The possible values of LEVEL are the same as for the
!      'strict_flex_array' attribute (*note Variable Attributes::).
  
       You can control this behavior for a specific trailing array field
!      of a structure by using the variable attribute 'strict_flex_array'
       attribute (*note Variable Attributes::).
  
!      The '-fstrict_flex_arrays' option interacts with the
!      '-Wstrict-flex-arrays' option.  *Note Warning Options::, for more
       information.
  
! '-fsso-struct=ENDIANNESS'
       Set the default scalar storage order of structures and unions to
!      the specified endianness.  The accepted values are 'big-endian',
!      'little-endian' and 'native' for the native endianness of the
       target (the default).  This option is not supported for C++.
  
!      *Warning:* the '-fsso-struct' switch causes GCC to generate code
       that is not binary compatible with code generated without it if the
       specified endianness is not the native endianness of the target.
  
--- 3077,3176 ----
       rather than requiring such information be reflected within the
       build tools as well.
  
! ‘-fdeps-file=FILE’
       Where to write structured dependency information.
  
! ‘-fdeps-format=FORMAT’
!      The format to use for structured dependency information.  ‘p1689r5’
       is the only supported format right now.  Note that when this
!      argument is specified, the output of ‘-MF’ is stripped of some
       information (namely C++ modules) so that it does not use extended
       makefile syntax not understood by most tools.
  
! ‘-fdeps-target=FILE’
!      Analogous to ‘-MT’ but for structured dependency information.  This
       indicates the target which will ultimately need any required
       resources and provide any resources extracted from the source that
       may be required by other sources.
  
! ‘-fplan9-extensions’
       Accept some non-standard constructs used in Plan 9 code.
  
!      This enables ‘-fms-extensions’, permits passing pointers to
       structures with anonymous fields to functions that expect pointers
       to elements of the type of the field, and permits referring to
       anonymous fields declared using a typedef.  *Note Unnamed
       struct/union fields within structs/unions: Unnamed Fields, for
       details.  This is only supported for C, not C++.
  
! ‘-fsigned-bitfields’
! ‘-funsigned-bitfields’
! ‘-fno-signed-bitfields’
! ‘-fno-unsigned-bitfields’
       These options control whether a bit-field is signed or unsigned,
!      when the declaration does not use either ‘signed’ or ‘unsigned’.
       By default, such a bit-field is signed, because this is consistent:
!      the basic integer types such as ‘int’ are signed types.
  
! ‘-fsigned-char’
!      Let the type ‘char’ be signed, like ‘signed char’.
  
!      Note that this is equivalent to ‘-fno-unsigned-char’, which is the
!      negative form of ‘-funsigned-char’.  Likewise, the option
!      ‘-fno-signed-char’ is equivalent to ‘-funsigned-char’.
  
! ‘-funsigned-char’
!      Let the type ‘char’ be unsigned, like ‘unsigned char’.
  
!      Each kind of machine has a default for what ‘char’ should be.  It
!      is either like ‘unsigned char’ by default or like ‘signed char’ by
       default.
  
!      Ideally, a portable program should always use ‘signed char’ or
!      ‘unsigned char’ when it depends on the signedness of an object.
!      But many programs have been written to use plain ‘char’ and expect
       it to be signed, or expect it to be unsigned, depending on the
       machines they were written for.  This option, and its inverse, let
       you make such a program work with the opposite default.
  
!      The type ‘char’ is always a distinct type from each of ‘signed
!      char’ or ‘unsigned char’, even though its behavior is always just
       like one of those two.
  
! ‘-fstrict-flex-arrays (C and C++ only)’
! ‘-fstrict-flex-arrays=LEVEL (C and C++ only)’
       Control when to treat the trailing array of a structure as a
       flexible array member for the purpose of accessing the elements of
       such an array.  The value of LEVEL controls the level of
       strictness.
  
!      ‘-fstrict-flex-arrays’ is equivalent to ‘-fstrict-flex-arrays=3’,
       which is the strictest; all trailing arrays of structures are
       treated as flexible array members.
  
!      The negative form ‘-fno-strict-flex-arrays’ is equivalent to
!      ‘-fstrict-flex-arrays=0’, which is the least strict.  In this case
       a trailing array is treated as a flexible array member only when it
       is declared as a flexible array member per C99 standard onwards.
  
       The possible values of LEVEL are the same as for the
!      ‘strict_flex_array’ attribute (*note Variable Attributes::).
  
       You can control this behavior for a specific trailing array field
!      of a structure by using the variable attribute ‘strict_flex_array’
       attribute (*note Variable Attributes::).
  
!      The ‘-fstrict_flex_arrays’ option interacts with the
!      ‘-Wstrict-flex-arrays’ option.  *Note Warning Options::, for more
       information.
  
! ‘-fsso-struct=ENDIANNESS’
       Set the default scalar storage order of structures and unions to
!      the specified endianness.  The accepted values are ‘big-endian’,
!      ‘little-endian’ and ‘native’ for the native endianness of the
       target (the default).  This option is not supported for C++.
  
!      *Warning:* the ‘-fsso-struct’ switch causes GCC to generate code
       that is not binary compatible with code generated without it if the
       specified endianness is not the native endianness of the target.
  
*************** File: gcc.info,  Node: C++ Dialect Optio
*** 3179,3199 ****
  This section describes the command-line options that are only meaningful
  for C++ programs.  You can also use most of the GNU compiler options
  regardless of what language your program is in.  For example, you might
! compile a file 'firstClass.C' like this:
  
       g++ -g -fstrict-enums -O -c firstClass.C
  
! In this example, only '-fstrict-enums' is an option meant only for C++
  programs; you can use the other options with any language supported by
  GCC.
  
!  Some options for compiling C programs, such as '-std', are also
  relevant for C++ programs.  *Note Options Controlling C Dialect: C
  Dialect Options.
  
   Here is a list of options that are _only_ for compiling C++ programs:
  
! '-fabi-version=N'
       Use version N of the C++ ABI.  The default is version 0.
  
       Version 0 refers to the version conforming most closely to the C++
--- 3183,3203 ----
  This section describes the command-line options that are only meaningful
  for C++ programs.  You can also use most of the GNU compiler options
  regardless of what language your program is in.  For example, you might
! compile a file ‘firstClass.C’ like this:
  
       g++ -g -fstrict-enums -O -c firstClass.C
  
! In this example, only ‘-fstrict-enums’ is an option meant only for C++
  programs; you can use the other options with any language supported by
  GCC.
  
!  Some options for compiling C programs, such as ‘-std’, are also
  relevant for C++ programs.  *Note Options Controlling C Dialect: C
  Dialect Options.
  
   Here is a list of options that are _only_ for compiling C++ programs:
  
! ‘-fabi-version=N’
       Use version N of the C++ ABI.  The default is version 0.
  
       Version 0 refers to the version conforming most closely to the C++
*************** Dialect Options.
*** 3231,3247 ****
       function-cv-qualifiers.
  
       Version 9, which first appeared in G++ 5.2, corrects the alignment
!      of 'nullptr_t'.
  
       Version 10, which first appeared in G++ 6.1, adds mangling of
       attributes that affect type identity, such as ia32 calling
!      convention attributes (e.g. 'stdcall').
  
       Version 11, which first appeared in G++ 7, corrects the mangling of
       sizeof...  expressions and operator names.  For multiple entities
       with the same name within a function, that are declared in
       different scopes, the mangling now changes starting with the
!      twelfth occurrence.  It also implies '-fnew-inheriting-ctors'.
  
       Version 12, which first appeared in G++ 8, corrects the calling
       conventions for empty classes on the x86_64 target and for classes
--- 3235,3251 ----
       function-cv-qualifiers.
  
       Version 9, which first appeared in G++ 5.2, corrects the alignment
!      of ‘nullptr_t’.
  
       Version 10, which first appeared in G++ 6.1, adds mangling of
       attributes that affect type identity, such as ia32 calling
!      convention attributes (e.g. ‘stdcall’).
  
       Version 11, which first appeared in G++ 7, corrects the mangling of
       sizeof...  expressions and operator names.  For multiple entities
       with the same name within a function, that are declared in
       different scopes, the mangling now changes starting with the
!      twelfth occurrence.  It also implies ‘-fnew-inheriting-ctors’.
  
       Version 12, which first appeared in G++ 8, corrects the calling
       conventions for empty classes on the x86_64 target and for classes
*************** Dialect Options.
*** 3259,3265 ****
       tag regression.
  
       Version 16, which first appeared in G++ 11, changes the mangling of
!      '__alignof__' to be distinct from that of 'alignof', and dependent
       operator names.
  
       Version 17, which first appeared in G++ 12, fixes layout of classes
--- 3263,3269 ----
       tag regression.
  
       Version 16, which first appeared in G++ 11, changes the mangling of
!      ‘__alignof__’ to be distinct from that of ‘alignof’, and dependent
       operator names.
  
       Version 17, which first appeared in G++ 12, fixes layout of classes
*************** Dialect Options.
*** 3272,3315 ****
       Version 19, which first appeard in G++ 14, fixes manglings of
       structured bindings to include ABI tags.
  
!      See also '-Wabi'.
  
! '-fabi-compat-version=N'
       On targets that support strong aliases, G++ works around mangling
       changes by creating an alias with the correct mangled name when
       defining a symbol with an incorrect mangled name.  This switch
       specifies which ABI version to use for the alias.
  
!      With '-fabi-version=0' (the default), this defaults to 13 (GCC 8.2
       compatibility).  If another ABI version is explicitly selected,
       this defaults to 0.  For compatibility with GCC versions 3.2
!      through 4.9, use '-fabi-compat-version=2'.
  
!      If this option is not provided but '-Wabi=N' is, that version is
       used for compatibility aliases.  If this option is provided along
!      with '-Wabi' (without the version), the version from this option is
       used for the warning.
  
! '-fno-access-control'
       Turn off all access checking.  This switch is mainly useful for
       working around bugs in the access control code.
  
! '-faligned-new'
!      Enable support for C++17 'new' of types that require more alignment
!      than 'void* ::operator new(std::size_t)' provides.  A numeric
!      argument such as '-faligned-new=32' can be used to specify how much
       alignment (in bytes) is provided by that function, but few users
!      will need to override the default of 'alignof(std::max_align_t)'.
  
!      This flag is enabled by default for '-std=c++17'.
  
! '-fchar8_t'
! '-fno-char8_t'
!      Enable support for 'char8_t' as adopted for C++20.  This includes
!      the addition of a new 'char8_t' fundamental type, changes to the
       types of UTF-8 string and character literals, new signatures for
       user-defined literals, associated standard library updates, and new
!      '__cpp_char8_t' and '__cpp_lib_char8_t' feature test macros.
  
       This option enables functions to be overloaded for ordinary and
       UTF-8 strings:
--- 3276,3319 ----
       Version 19, which first appeard in G++ 14, fixes manglings of
       structured bindings to include ABI tags.
  
!      See also ‘-Wabi’.
  
! ‘-fabi-compat-version=N’
       On targets that support strong aliases, G++ works around mangling
       changes by creating an alias with the correct mangled name when
       defining a symbol with an incorrect mangled name.  This switch
       specifies which ABI version to use for the alias.
  
!      With ‘-fabi-version=0’ (the default), this defaults to 13 (GCC 8.2
       compatibility).  If another ABI version is explicitly selected,
       this defaults to 0.  For compatibility with GCC versions 3.2
!      through 4.9, use ‘-fabi-compat-version=2’.
  
!      If this option is not provided but ‘-Wabi=N’ is, that version is
       used for compatibility aliases.  If this option is provided along
!      with ‘-Wabi’ (without the version), the version from this option is
       used for the warning.
  
! ‘-fno-access-control’
       Turn off all access checking.  This switch is mainly useful for
       working around bugs in the access control code.
  
! ‘-faligned-new’
!      Enable support for C++17 ‘new’ of types that require more alignment
!      than ‘void* ::operator new(std::size_t)’ provides.  A numeric
!      argument such as ‘-faligned-new=32’ can be used to specify how much
       alignment (in bytes) is provided by that function, but few users
!      will need to override the default of ‘alignof(std::max_align_t)’.
  
!      This flag is enabled by default for ‘-std=c++17’.
  
! ‘-fchar8_t’
! ‘-fno-char8_t’
!      Enable support for ‘char8_t’ as adopted for C++20.  This includes
!      the addition of a new ‘char8_t’ fundamental type, changes to the
       types of UTF-8 string and character literals, new signatures for
       user-defined literals, associated standard library updates, and new
!      ‘__cpp_char8_t’ and ‘__cpp_lib_char8_t’ feature test macros.
  
       This option enables functions to be overloaded for ordinary and
       UTF-8 strings:
*************** Dialect Options.
*** 3331,3337 ****
       The change to the types of UTF-8 string and character literals
       introduces incompatibilities with ISO C++11 and later standards.
       For example, the following code is well-formed under ISO C++11, but
!      is ill-formed when '-fchar8_t' is specified.
  
            const char *cp = u8"xx";// error: invalid conversion from
                                    //        `const char8_t*' to `const char*'
--- 3335,3341 ----
       The change to the types of UTF-8 string and character literals
       introduces incompatibilities with ISO C++11 and later standards.
       For example, the following code is well-formed under ISO C++11, but
!      is ill-formed when ‘-fchar8_t’ is specified.
  
            const char *cp = u8"xx";// error: invalid conversion from
                                    //        `const char8_t*' to `const char*'
*************** Dialect Options.
*** 3345,3380 ****
                                    //        `basic_string<char8_t>' to non-scalar
                                    //        type `basic_string<char>' requested
  
! '-fcheck-new'
!      Check that the pointer returned by 'operator new' is non-null
       before attempting to modify the storage allocated.  This check is
       normally unnecessary because the C++ standard specifies that
!      'operator new' only returns '0' if it is declared 'throw()', in
       which case the compiler always checks the return value even without
!      this option.  In all other cases, when 'operator new' has a
       non-empty exception specification, memory exhaustion is signalled
!      by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
  
! '-fconcepts'
! '-fconcepts-ts'
       Enable support for the C++ Concepts feature for constraining
!      template arguments.  With '-std=c++20' and above, Concepts are part
!      of the language standard, so '-fconcepts' defaults to on.
  
       Some constructs that were allowed by the earlier C++ Extensions for
       Concepts Technical Specification, ISO 19217 (2015), but didn't make
       it into the standard, can additionally be enabled by
!      '-fconcepts-ts'.  The option '-fconcepts-ts' was deprecated in GCC
       14 and may be removed in GCC 15; users are expected to convert
       their code to C++20 concepts.
  
! '-fconstexpr-depth=N'
       Set the maximum nested evaluation depth for C++11 constexpr
       functions to N.  A limit is needed to detect endless recursion
       during constant expression evaluation.  The minimum specified by
       the standard is 512.
  
! '-fconstexpr-cache-depth=N'
       Set the maximum level of nested evaluation depth for C++11
       constexpr functions that will be cached to N.  This is a heuristic
       that trades off compilation speed (when the cache avoids repeated
--- 3349,3384 ----
                                    //        `basic_string<char8_t>' to non-scalar
                                    //        type `basic_string<char>' requested
  
! ‘-fcheck-new’
!      Check that the pointer returned by ‘operator new’ is non-null
       before attempting to modify the storage allocated.  This check is
       normally unnecessary because the C++ standard specifies that
!      ‘operator new’ only returns ‘0’ if it is declared ‘throw()’, in
       which case the compiler always checks the return value even without
!      this option.  In all other cases, when ‘operator new’ has a
       non-empty exception specification, memory exhaustion is signalled
!      by throwing ‘std::bad_alloc’.  See also ‘new (nothrow)’.
  
! ‘-fconcepts’
! ‘-fconcepts-ts’
       Enable support for the C++ Concepts feature for constraining
!      template arguments.  With ‘-std=c++20’ and above, Concepts are part
!      of the language standard, so ‘-fconcepts’ defaults to on.
  
       Some constructs that were allowed by the earlier C++ Extensions for
       Concepts Technical Specification, ISO 19217 (2015), but didn't make
       it into the standard, can additionally be enabled by
!      ‘-fconcepts-ts’.  The option ‘-fconcepts-ts’ was deprecated in GCC
       14 and may be removed in GCC 15; users are expected to convert
       their code to C++20 concepts.
  
! ‘-fconstexpr-depth=N’
       Set the maximum nested evaluation depth for C++11 constexpr
       functions to N.  A limit is needed to detect endless recursion
       during constant expression evaluation.  The minimum specified by
       the standard is 512.
  
! ‘-fconstexpr-cache-depth=N’
       Set the maximum level of nested evaluation depth for C++11
       constexpr functions that will be cached to N.  This is a heuristic
       that trades off compilation speed (when the cache avoids repeated
*************** Dialect Options.
*** 3384,3390 ****
       heavy constexpr calculations you might want to experiment to find
       which value works best for you.
  
! '-fconstexpr-fp-except'
       Annex F of the C standard specifies that IEC559 floating point
       exceptions encountered at compile time should not stop compilation.
       C++ compilers have historically not followed this guidance, instead
--- 3388,3394 ----
       heavy constexpr calculations you might want to experiment to find
       which value works best for you.
  
! ‘-fconstexpr-fp-except’
       Annex F of the C standard specifies that IEC559 floating point
       exceptions encountered at compile time should not stop compilation.
       C++ compilers have historically not followed this guidance, instead
*************** Dialect Options.
*** 3395,3406 ****
  
            constexpr float inf = 1./0.; // OK with -fconstexpr-fp-except
  
! '-fconstexpr-loop-limit=N'
       Set the maximum number of iterations for a loop in C++14 constexpr
       functions to N.  A limit is needed to detect infinite loops during
       constant expression evaluation.  The default is 262144 (1<<18).
  
! '-fconstexpr-ops-limit=N'
       Set the maximum number of operations during a single constexpr
       evaluation.  Even when number of iterations of a single loop is
       limited with the above limit, if there are several nested loops and
--- 3399,3410 ----
  
            constexpr float inf = 1./0.; // OK with -fconstexpr-fp-except
  
! ‘-fconstexpr-loop-limit=N’
       Set the maximum number of iterations for a loop in C++14 constexpr
       functions to N.  A limit is needed to detect infinite loops during
       constant expression evaluation.  The default is 262144 (1<<18).
  
! ‘-fconstexpr-ops-limit=N’
       Set the maximum number of operations during a single constexpr
       evaluation.  Even when number of iterations of a single loop is
       limited with the above limit, if there are several nested loops and
*************** Dialect Options.
*** 3409,3415 ****
       many expressions need to be evaluated, the resulting constexpr
       evaluation might take too long.  The default is 33554432 (1<<25).
  
! '-fcontracts'
       Enable experimental support for the C++ Contracts feature, as
       briefly added to and then removed from the C++20 working paper
       (N4820).  The implementation also includes proposed enhancements
--- 3413,3419 ----
       many expressions need to be evaluated, the resulting constexpr
       evaluation might take too long.  The default is 33554432 (1<<25).
  
! ‘-fcontracts’
       Enable experimental support for the C++ Contracts feature, as
       briefly added to and then removed from the C++20 working paper
       (N4820).  The implementation also includes proposed enhancements
*************** Dialect Options.
*** 3428,3493 ****
       N4820 contracts, P1332 contracts, or P1429 contracts; these sets
       cannot be used together.
  
!      '-fcontract-mode=[on|off]'
            Control whether any contracts have any semantics at all.
            Defaults to on.
  
!      '-fcontract-assumption-mode=[on|off]'
!           [N4820] Control whether contracts with level 'axiom' should
            have the assume semantic.  Defaults to on.
  
!      '-fcontract-build-level=[off|default|audit]'
            [N4820] Specify which level of contracts to generate checks
!           for.  Defaults to 'default'.
  
!      '-fcontract-continuation-mode=[on|off]'
            [N4820] Control whether to allow the program to continue
            executing after a contract violation.  That is, do checked
!           contracts have the 'maybe' semantic described below rather
!           than the 'never' semantic.  Defaults to off.
  
!      '-fcontract-role=<name>:<default>,<audit>,<axiom>'
            [P1332] Specify the concrete semantics for each contract level
            of a particular contract role.
  
!      '-fcontract-semantic=[default|audit|axiom]:<semantic>'
            [P1429] Specify the concrete semantic for a particular
            contract level.
  
!      '-fcontract-strict-declarations=[on|off]'
            Control whether to reject adding contracts to a function after
            its first declaration.  Defaults to off.
  
       The possible concrete semantics for that can be specified with
!      '-fcontract-role' or '-fcontract-semantic' are:
  
!      'ignore'
            This contract has no effect.
  
!      'assume'
!           This contract is treated like C++23 '[[assume]]'.
  
!      'check_never_continue'
!      'never'
!      'abort'
            This contract is checked.  If it fails, the violation handler
!           is called.  If the handler returns, 'std::terminate' is
            called.
  
!      'check_maybe_continue'
!      'maybe'
            This contract is checked.  If it fails, the violation handler
            is called.  If the handler returns, execution continues
            normally.
  
! '-fcoroutines'
       Enable support for the C++ coroutines extension (experimental).
  
! '-fdiagnostics-all-candidates'
       Permit the C++ front end to note all candidates during overload
       resolution failure, including when a deleted function is selected.
  
! '-fno-elide-constructors'
       The C++ standard allows an implementation to omit creating a
       temporary that is only used to initialize another object of the
       same type.  Specifying this option disables that optimization, and
--- 3432,3497 ----
       N4820 contracts, P1332 contracts, or P1429 contracts; these sets
       cannot be used together.
  
!      ‘-fcontract-mode=[on|off]’
            Control whether any contracts have any semantics at all.
            Defaults to on.
  
!      ‘-fcontract-assumption-mode=[on|off]’
!           [N4820] Control whether contracts with level ‘axiom’ should
            have the assume semantic.  Defaults to on.
  
!      ‘-fcontract-build-level=[off|default|audit]’
            [N4820] Specify which level of contracts to generate checks
!           for.  Defaults to ‘default’.
  
!      ‘-fcontract-continuation-mode=[on|off]’
            [N4820] Control whether to allow the program to continue
            executing after a contract violation.  That is, do checked
!           contracts have the ‘maybe’ semantic described below rather
!           than the ‘never’ semantic.  Defaults to off.
  
!      ‘-fcontract-role=<name>:<default>,<audit>,<axiom>’
            [P1332] Specify the concrete semantics for each contract level
            of a particular contract role.
  
!      ‘-fcontract-semantic=[default|audit|axiom]:<semantic>’
            [P1429] Specify the concrete semantic for a particular
            contract level.
  
!      ‘-fcontract-strict-declarations=[on|off]’
            Control whether to reject adding contracts to a function after
            its first declaration.  Defaults to off.
  
       The possible concrete semantics for that can be specified with
!      ‘-fcontract-role’ or ‘-fcontract-semantic’ are:
  
!      ‘ignore’
            This contract has no effect.
  
!      ‘assume’
!           This contract is treated like C++23 ‘[[assume]]’.
  
!      ‘check_never_continue’
!      ‘never’
!      ‘abort’
            This contract is checked.  If it fails, the violation handler
!           is called.  If the handler returns, ‘std::terminate’ is
            called.
  
!      ‘check_maybe_continue’
!      ‘maybe’
            This contract is checked.  If it fails, the violation handler
            is called.  If the handler returns, execution continues
            normally.
  
! ‘-fcoroutines’
       Enable support for the C++ coroutines extension (experimental).
  
! ‘-fdiagnostics-all-candidates’
       Permit the C++ front end to note all candidates during overload
       resolution failure, including when a deleted function is selected.
  
! ‘-fno-elide-constructors’
       The C++ standard allows an implementation to omit creating a
       temporary that is only used to initialize another object of the
       same type.  Specifying this option disables that optimization, and
*************** Dialect Options.
*** 3498,3516 ****
       In C++17, the compiler is required to omit these temporaries, but
       this option still affects trivial member functions.
  
! '-fno-enforce-eh-specs'
       Don't generate code to check for violation of exception
       specifications at run time.  This option violates the C++ standard,
       but may be useful for reducing code size in production builds, much
!      like defining 'NDEBUG'.  This does not give user code permission to
       throw exceptions in violation of the exception specifications; the
       compiler still optimizes based on the specifications, so throwing
       an unexpected exception results in undefined behavior at run time.
  
! '-fextern-tls-init'
! '-fno-extern-tls-init'
!      The C++11 and OpenMP standards allow 'thread_local' and
!      'threadprivate' variables to have dynamic (runtime) initialization.
       To support this, any use of such a variable goes through a wrapper
       function that performs any necessary initialization.  When the use
       and definition of the variable are in the same translation unit,
--- 3502,3520 ----
       In C++17, the compiler is required to omit these temporaries, but
       this option still affects trivial member functions.
  
! ‘-fno-enforce-eh-specs’
       Don't generate code to check for violation of exception
       specifications at run time.  This option violates the C++ standard,
       but may be useful for reducing code size in production builds, much
!      like defining ‘NDEBUG’.  This does not give user code permission to
       throw exceptions in violation of the exception specifications; the
       compiler still optimizes based on the specifications, so throwing
       an unexpected exception results in undefined behavior at run time.
  
! ‘-fextern-tls-init’
! ‘-fno-extern-tls-init’
!      The C++11 and OpenMP standards allow ‘thread_local’ and
!      ‘threadprivate’ variables to have dynamic (runtime) initialization.
       To support this, any use of such a variable goes through a wrapper
       function that performs any necessary initialization.  When the use
       and definition of the variable are in the same translation unit,
*************** Dialect Options.
*** 3522,3548 ****
       because the variable is statically initialized, or a use of the
       variable in the defining TU will be executed before any uses in
       another TU), they can avoid this overhead with the
!      '-fno-extern-tls-init' option.
  
       On targets that support symbol aliases, the default is
!      '-fextern-tls-init'.  On targets that do not support symbol
!      aliases, the default is '-fno-extern-tls-init'.
  
! '-ffold-simple-inlines'
! '-fno-fold-simple-inlines'
!      Permit the C++ frontend to fold calls to 'std::move',
!      'std::forward', 'std::addressof' and 'std::as_const'.  In contrast
       to inlining, this means no debug information will be generated for
       such calls.  Since these functions are rarely interesting to debug,
!      this flag is enabled by default unless '-fno-inline' is active.
  
! '-fno-gnu-keywords'
!      Do not recognize 'typeof' as a keyword, so that code can use this
!      word as an identifier.  You can use the keyword '__typeof__'
       instead.  This option is implied by the strict ISO C++ dialects:
!      '-ansi', '-std=c++98', '-std=c++11', etc.
  
! '-fno-immediate-escalation'
       Do not enable immediate function escalation whereby certain
       functions can be promoted to consteval, as specified in P2564R3.
       For example:
--- 3526,3552 ----
       because the variable is statically initialized, or a use of the
       variable in the defining TU will be executed before any uses in
       another TU), they can avoid this overhead with the
!      ‘-fno-extern-tls-init’ option.
  
       On targets that support symbol aliases, the default is
!      ‘-fextern-tls-init’.  On targets that do not support symbol
!      aliases, the default is ‘-fno-extern-tls-init’.
  
! ‘-ffold-simple-inlines’
! ‘-fno-fold-simple-inlines’
!      Permit the C++ frontend to fold calls to ‘std::move’,
!      ‘std::forward’, ‘std::addressof’ and ‘std::as_const’.  In contrast
       to inlining, this means no debug information will be generated for
       such calls.  Since these functions are rarely interesting to debug,
!      this flag is enabled by default unless ‘-fno-inline’ is active.
  
! ‘-fno-gnu-keywords’
!      Do not recognize ‘typeof’ as a keyword, so that code can use this
!      word as an identifier.  You can use the keyword ‘__typeof__’
       instead.  This option is implied by the strict ISO C++ dialects:
!      ‘-ansi’, ‘-std=c++98’, ‘-std=c++11’, etc.
  
! ‘-fno-immediate-escalation’
       Do not enable immediate function escalation whereby certain
       functions can be promoted to consteval, as specified in P2564R3.
       For example:
*************** Dialect Options.
*** 3559,3584 ****
              f (3);
            }
  
!      compiles in C++20: 'f' is an immediate-escalating function (due to
!      the 'auto' it is a function template and is declared 'constexpr')
!      and 'id(t)' is an immediate-escalating expression, so 'f' is
!      promoted to 'consteval'.  Consequently, the call to 'id(t)' is in
       an immediate context, so doesn't have to produce a constant (that
       is the mechanism allowing consteval function composition).
!      However, with '-fno-immediate-escalation', 'f' is not promoted to
!      'consteval', and since the call to consteval function 'id(t)' is
       not a constant expression, the compiler rejects the code.
  
       This option is turned on by default; it is only effective in C++20
       mode or later.
  
! '-fimplicit-constexpr'
       Make inline functions implicitly constexpr, if they satisfy the
       requirements for a constexpr function.  This option can be used in
       C++14 mode or later.  This can result in initialization changing
       from dynamic to static and other optimizations.
  
! '-fno-implicit-templates'
       Never emit code for non-inline templates that are instantiated
       implicitly (i.e. by use); only emit code for explicit
       instantiations.  If you use this option, you must take care to
--- 3563,3588 ----
              f (3);
            }
  
!      compiles in C++20: ‘f’ is an immediate-escalating function (due to
!      the ‘auto’ it is a function template and is declared ‘constexpr’)
!      and ‘id(t)’ is an immediate-escalating expression, so ‘f’ is
!      promoted to ‘consteval’.  Consequently, the call to ‘id(t)’ is in
       an immediate context, so doesn't have to produce a constant (that
       is the mechanism allowing consteval function composition).
!      However, with ‘-fno-immediate-escalation’, ‘f’ is not promoted to
!      ‘consteval’, and since the call to consteval function ‘id(t)’ is
       not a constant expression, the compiler rejects the code.
  
       This option is turned on by default; it is only effective in C++20
       mode or later.
  
! ‘-fimplicit-constexpr’
       Make inline functions implicitly constexpr, if they satisfy the
       requirements for a constexpr function.  This option can be used in
       C++14 mode or later.  This can result in initialization changing
       from dynamic to static and other optimizations.
  
! ‘-fno-implicit-templates’
       Never emit code for non-inline templates that are instantiated
       implicitly (i.e. by use); only emit code for explicit
       instantiations.  If you use this option, you must take care to
*************** Dialect Options.
*** 3586,3615 ****
       instantiations to avoid getting undefined symbols at link time.
       *Note Template Instantiation::, for more information.
  
! '-fno-implicit-inline-templates'
       Don't emit code for implicit instantiations of inline templates,
       either.  The default is to handle inlines differently so that
       compiles with and without optimization need the same set of
       explicit instantiations.
  
! '-fno-implement-inlines'
       To save space, do not emit out-of-line copies of inline functions
!      controlled by '#pragma implementation'.  This causes linker errors
       if these functions are not inlined everywhere they are called.
  
! '-fmodules-ts'
! '-fno-modules-ts'
       Enable support for C++20 modules (*note C++ Modules::).  The
!      '-fno-modules-ts' is usually not needed, as that is the default.
       Even though this is a C++20 feature, it is not currently implicitly
       enabled by selecting that standard version.
  
! '-fmodule-header'
! '-fmodule-header=user'
! '-fmodule-header=system'
       Compile a header file to create an importable header unit.
  
! '-fmodule-implicit-inline'
       Member functions defined in their class definitions are not
       implicitly inline for modular code.  This is different to
       traditional C++ behavior, for good reasons.  However, it may result
--- 3590,3619 ----
       instantiations to avoid getting undefined symbols at link time.
       *Note Template Instantiation::, for more information.
  
! ‘-fno-implicit-inline-templates’
       Don't emit code for implicit instantiations of inline templates,
       either.  The default is to handle inlines differently so that
       compiles with and without optimization need the same set of
       explicit instantiations.
  
! ‘-fno-implement-inlines’
       To save space, do not emit out-of-line copies of inline functions
!      controlled by ‘#pragma implementation’.  This causes linker errors
       if these functions are not inlined everywhere they are called.
  
! ‘-fmodules-ts’
! ‘-fno-modules-ts’
       Enable support for C++20 modules (*note C++ Modules::).  The
!      ‘-fno-modules-ts’ is usually not needed, as that is the default.
       Even though this is a C++20 feature, it is not currently implicitly
       enabled by selecting that standard version.
  
! ‘-fmodule-header’
! ‘-fmodule-header=user’
! ‘-fmodule-header=system’
       Compile a header file to create an importable header unit.
  
! ‘-fmodule-implicit-inline’
       Member functions defined in their class definitions are not
       implicitly inline for modular code.  This is different to
       traditional C++ behavior, for good reasons.  However, it may result
*************** Dialect Options.
*** 3619,3722 ****
       (Such definitions outside of a named module remain implicitly
       inline, regardless.)
  
! '-fno-module-lazy'
       Disable lazy module importing and module mapper creation.
  
! '-fmodule-mapper=[HOSTNAME]:PORT[?IDENT]'
! '-fmodule-mapper=|PROGRAM[?IDENT] ARGS...'
! '-fmodule-mapper==SOCKET[?IDENT]'
! '-fmodule-mapper=<>[INOUT][?IDENT]'
! '-fmodule-mapper=<IN>OUT[?IDENT]'
! '-fmodule-mapper=FILE[?IDENT]'
       An oracle to query for module name to filename mappings.  If
!      unspecified the 'CXX_MODULE_MAPPER' environment variable is used,
       and if that is unset, an in-process default is provided.
  
! '-fmodule-only'
       Only emit the Compiled Module Interface, inhibiting any object
       file.
  
! '-fms-extensions'
       Disable Wpedantic warnings about constructs used in MFC, such as
       implicit int and getting a pointer to member function via
       non-standard syntax.
  
! '-fnew-inheriting-ctors'
       Enable the P0136 adjustment to the semantics of C++11 constructor
       inheritance.  This is part of C++17 but also considered to be a
       Defect Report against C++11 and C++14.  This flag is enabled by
!      default unless '-fabi-version=10' or lower is specified.
  
! '-fnew-ttp-matching'
       Enable the P0522 resolution to Core issue 150, template template
       parameters and default arguments: this allows a template with
       default template arguments as an argument for a template template
       parameter with fewer template parameters.  This flag is enabled by
!      default for '-std=c++17'.
  
! '-fno-nonansi-builtins'
       Disable built-in declarations of functions that are not mandated by
!      ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
!      'bzero', 'conjf', and other related functions.
  
! '-fnothrow-opt'
!      Treat a 'throw()' exception specification as if it were a
!      'noexcept' specification to reduce or eliminate the text size
       overhead relative to a function with no exception specification.
       If the function has local variables of types with non-trivial
       destructors, the exception specification actually makes the
       function smaller because the EH cleanups for those variables can be
       optimized away.  The semantic effect is that an exception thrown
       out of a function with such an exception specification results in a
!      call to 'terminate' rather than 'unexpected'.
  
! '-fno-operator-names'
!      Do not treat the operator name keywords 'and', 'bitand', 'bitor',
!      'compl', 'not', 'or' and 'xor' as synonyms as keywords.
  
! '-fno-optional-diags'
       Disable diagnostics that the standard says a compiler does not need
       to issue.  Currently, the only such diagnostic issued by G++ is the
       one for a name having multiple meanings within a class.
  
! '-fno-pretty-templates'
       When an error message refers to a specialization of a function
       template, the compiler normally prints the signature of the
       template followed by the template arguments and any typedefs or
!      typenames in the signature (e.g. 'void f(T) [with T = int]' rather
!      than 'void f(int)') so that it's clear which template is involved.
       When an error message refers to a specialization of a class
       template, the compiler omits any template arguments that match the
       default template arguments for that template.  If either of these
       behaviors make it harder to understand the error message rather
!      than easier, you can use '-fno-pretty-templates' to disable them.
  
! '-fno-rtti'
       Disable generation of information about every class with virtual
       functions for use by the C++ run-time type identification features
!      ('dynamic_cast' and 'typeid').  If you don't use those parts of the
       language, you can save some space by using this flag.  Note that
       exception handling uses the same information, but G++ generates it
!      as needed.  The 'dynamic_cast' operator can still be used for casts
!      that do not require run-time type information, i.e. casts to 'void
!      *' or to unambiguous base classes.
  
!      Mixing code compiled with '-frtti' with that compiled with
!      '-fno-rtti' may not work.  For example, programs may fail to link
!      if a class compiled with '-fno-rtti' is used as a base for a class
!      compiled with '-frtti'.
  
! '-fsized-deallocation'
       Enable the built-in global declarations
            void operator delete (void *, std::size_t) noexcept;
            void operator delete[] (void *, std::size_t) noexcept;
       as introduced in C++14.  This is useful for user-defined
       replacement deallocation functions that, for example, use the size
       of the object to make deallocation faster.  Enabled by default
!      under '-std=c++14' and above.  The flag '-Wsized-deallocation'
       warns about places that might want to add a definition.
  
! '-fstrict-enums'
       Allow the compiler to optimize using the assumption that a value of
       enumerated type can only be one of the values of the enumeration
       (as defined in the C++ standard; basically, a value that can be
--- 3623,3726 ----
       (Such definitions outside of a named module remain implicitly
       inline, regardless.)
  
! ‘-fno-module-lazy’
       Disable lazy module importing and module mapper creation.
  
! ‘-fmodule-mapper=[HOSTNAME]:PORT[?IDENT]’
! ‘-fmodule-mapper=|PROGRAM[?IDENT] ARGS...’
! ‘-fmodule-mapper==SOCKET[?IDENT]’
! ‘-fmodule-mapper=<>[INOUT][?IDENT]’
! ‘-fmodule-mapper=<IN>OUT[?IDENT]’
! ‘-fmodule-mapper=FILE[?IDENT]’
       An oracle to query for module name to filename mappings.  If
!      unspecified the ‘CXX_MODULE_MAPPER’ environment variable is used,
       and if that is unset, an in-process default is provided.
  
! ‘-fmodule-only’
       Only emit the Compiled Module Interface, inhibiting any object
       file.
  
! ‘-fms-extensions’
       Disable Wpedantic warnings about constructs used in MFC, such as
       implicit int and getting a pointer to member function via
       non-standard syntax.
  
! ‘-fnew-inheriting-ctors’
       Enable the P0136 adjustment to the semantics of C++11 constructor
       inheritance.  This is part of C++17 but also considered to be a
       Defect Report against C++11 and C++14.  This flag is enabled by
!      default unless ‘-fabi-version=10’ or lower is specified.
  
! ‘-fnew-ttp-matching’
       Enable the P0522 resolution to Core issue 150, template template
       parameters and default arguments: this allows a template with
       default template arguments as an argument for a template template
       parameter with fewer template parameters.  This flag is enabled by
!      default for ‘-std=c++17’.
  
! ‘-fno-nonansi-builtins’
       Disable built-in declarations of functions that are not mandated by
!      ANSI/ISO C.  These include ‘ffs’, ‘alloca’, ‘_exit’, ‘index’,
!      ‘bzero’, ‘conjf’, and other related functions.
  
! ‘-fnothrow-opt’
!      Treat a ‘throw()’ exception specification as if it were a
!      ‘noexcept’ specification to reduce or eliminate the text size
       overhead relative to a function with no exception specification.
       If the function has local variables of types with non-trivial
       destructors, the exception specification actually makes the
       function smaller because the EH cleanups for those variables can be
       optimized away.  The semantic effect is that an exception thrown
       out of a function with such an exception specification results in a
!      call to ‘terminate’ rather than ‘unexpected’.
  
! ‘-fno-operator-names’
!      Do not treat the operator name keywords ‘and’, ‘bitand’, ‘bitor’,
!      ‘compl’, ‘not’, ‘or’ and ‘xor’ as synonyms as keywords.
  
! ‘-fno-optional-diags’
       Disable diagnostics that the standard says a compiler does not need
       to issue.  Currently, the only such diagnostic issued by G++ is the
       one for a name having multiple meanings within a class.
  
! ‘-fno-pretty-templates’
       When an error message refers to a specialization of a function
       template, the compiler normally prints the signature of the
       template followed by the template arguments and any typedefs or
!      typenames in the signature (e.g. ‘void f(T) [with T = int]’ rather
!      than ‘void f(int)’) so that it's clear which template is involved.
       When an error message refers to a specialization of a class
       template, the compiler omits any template arguments that match the
       default template arguments for that template.  If either of these
       behaviors make it harder to understand the error message rather
!      than easier, you can use ‘-fno-pretty-templates’ to disable them.
  
! ‘-fno-rtti’
       Disable generation of information about every class with virtual
       functions for use by the C++ run-time type identification features
!      (‘dynamic_cast’ and ‘typeid’).  If you don't use those parts of the
       language, you can save some space by using this flag.  Note that
       exception handling uses the same information, but G++ generates it
!      as needed.  The ‘dynamic_cast’ operator can still be used for casts
!      that do not require run-time type information, i.e. casts to ‘void
!      *’ or to unambiguous base classes.
  
!      Mixing code compiled with ‘-frtti’ with that compiled with
!      ‘-fno-rtti’ may not work.  For example, programs may fail to link
!      if a class compiled with ‘-fno-rtti’ is used as a base for a class
!      compiled with ‘-frtti’.
  
! ‘-fsized-deallocation’
       Enable the built-in global declarations
            void operator delete (void *, std::size_t) noexcept;
            void operator delete[] (void *, std::size_t) noexcept;
       as introduced in C++14.  This is useful for user-defined
       replacement deallocation functions that, for example, use the size
       of the object to make deallocation faster.  Enabled by default
!      under ‘-std=c++14’ and above.  The flag ‘-Wsized-deallocation’
       warns about places that might want to add a definition.
  
! ‘-fstrict-enums’
       Allow the compiler to optimize using the assumption that a value of
       enumerated type can only be one of the values of the enumeration
       (as defined in the C++ standard; basically, a value that can be
*************** Dialect Options.
*** 3726,3744 ****
       type.  This option has no effect for an enumeration type with a
       fixed underlying type.
  
! '-fstrong-eval-order'
       Evaluate member access, array subscripting, and shift expressions
       in left-to-right order, and evaluate assignment in right-to-left
!      order, as adopted for C++17.  Enabled by default with '-std=c++17'.
!      '-fstrong-eval-order=some' enables just the ordering of member
       access and shift expressions, and is the default without
!      '-std=c++17'.
  
! '-ftemplate-backtrace-limit=N'
       Set the maximum number of template instantiation notes for a single
       warning or error to N.  The default value is 10.
  
! '-ftemplate-depth=N'
       Set the maximum instantiation depth for template classes to N.  A
       limit on the template instantiation depth is needed to detect
       endless recursions during template class instantiation.  ANSI/ISO
--- 3730,3748 ----
       type.  This option has no effect for an enumeration type with a
       fixed underlying type.
  
! ‘-fstrong-eval-order’
       Evaluate member access, array subscripting, and shift expressions
       in left-to-right order, and evaluate assignment in right-to-left
!      order, as adopted for C++17.  Enabled by default with ‘-std=c++17’.
!      ‘-fstrong-eval-order=some’ enables just the ordering of member
       access and shift expressions, and is the default without
!      ‘-std=c++17’.
  
! ‘-ftemplate-backtrace-limit=N’
       Set the maximum number of template instantiation notes for a single
       warning or error to N.  The default value is 10.
  
! ‘-ftemplate-depth=N’
       Set the maximum instantiation depth for template classes to N.  A
       limit on the template instantiation depth is needed to detect
       endless recursions during template class instantiation.  ANSI/ISO
*************** Dialect Options.
*** 3747,3777 ****
       the compiler can run out of stack space before hitting 1024 in some
       situations.
  
! '-fno-threadsafe-statics'
       Do not emit the extra code to use the routines specified in the C++
       ABI for thread-safe initialization of local statics.  You can use
       this option to reduce code size slightly in code that doesn't need
       to be thread-safe.
  
! '-fuse-cxa-atexit'
       Register destructors for objects with static storage duration with
!      the '__cxa_atexit' function rather than the 'atexit' function.
       This option is required for fully standards-compliant handling of
       static destructors, but only works if your C library supports
!      '__cxa_atexit'.
  
! '-fno-use-cxa-get-exception-ptr'
!      Don't use the '__cxa_get_exception_ptr' runtime routine.  This
!      causes 'std::uncaught_exception' to be incorrect, but is necessary
       if the runtime routine is not available.
  
! '-fvisibility-inlines-hidden'
       This switch declares that the user does not attempt to compare
       pointers to inline functions or methods where the addresses of the
       two functions are taken in different shared objects.
  
       The effect of this is that GCC may, effectively, mark inline
!      methods with '__attribute__ ((visibility ("hidden")))' so that they
       do not appear in the export table of a DSO and do not require a PLT
       indirection when used within the DSO.  Enabling this option can
       have a dramatic effect on load and link times of a DSO as it
--- 3751,3781 ----
       the compiler can run out of stack space before hitting 1024 in some
       situations.
  
! ‘-fno-threadsafe-statics’
       Do not emit the extra code to use the routines specified in the C++
       ABI for thread-safe initialization of local statics.  You can use
       this option to reduce code size slightly in code that doesn't need
       to be thread-safe.
  
! ‘-fuse-cxa-atexit’
       Register destructors for objects with static storage duration with
!      the ‘__cxa_atexit’ function rather than the ‘atexit’ function.
       This option is required for fully standards-compliant handling of
       static destructors, but only works if your C library supports
!      ‘__cxa_atexit’.
  
! ‘-fno-use-cxa-get-exception-ptr’
!      Don't use the ‘__cxa_get_exception_ptr’ runtime routine.  This
!      causes ‘std::uncaught_exception’ to be incorrect, but is necessary
       if the runtime routine is not available.
  
! ‘-fvisibility-inlines-hidden’
       This switch declares that the user does not attempt to compare
       pointers to inline functions or methods where the addresses of the
       two functions are taken in different shared objects.
  
       The effect of this is that GCC may, effectively, mark inline
!      methods with ‘__attribute__ ((visibility ("hidden")))’ so that they
       do not appear in the export table of a DSO and do not require a PLT
       indirection when used within the DSO.  Enabling this option can
       have a dramatic effect on load and link times of a DSO as it
*************** Dialect Options.
*** 3793,3806 ****
       option as their linkage might otherwise cross a shared library
       boundary.  *Note Template Instantiation::.
  
! '-fvisibility-ms-compat'
       This flag attempts to use visibility settings to make GCC's C++
       linkage model compatible with that of Microsoft Visual Studio.
  
       The flag makes these changes to GCC's linkage model:
  
!        1. It sets the default visibility to 'hidden', like
!           '-fvisibility=hidden'.
  
         2. Types, but not their members, are not hidden by default.
  
--- 3797,3810 ----
       option as their linkage might otherwise cross a shared library
       boundary.  *Note Template Instantiation::.
  
! ‘-fvisibility-ms-compat’
       This flag attempts to use visibility settings to make GCC's C++
       linkage model compatible with that of Microsoft Visual Studio.
  
       The flag makes these changes to GCC's linkage model:
  
!        1. It sets the default visibility to ‘hidden’, like
!           ‘-fvisibility=hidden’.
  
         2. Types, but not their members, are not hidden by default.
  
*************** Dialect Options.
*** 3809,3815 ****
            shared object: those declarations are permitted if they are
            permitted when this option is not used.
  
!      In new code it is better to use '-fvisibility=hidden' and export
       those classes that are intended to be externally visible.
       Unfortunately it is possible for code to rely, perhaps
       accidentally, on the Visual Studio behavior.
--- 3813,3819 ----
            shared object: those declarations are permitted if they are
            permitted when this option is not used.
  
!      In new code it is better to use ‘-fvisibility=hidden’ and export
       those classes that are intended to be externally visible.
       Unfortunately it is possible for code to rely, perhaps
       accidentally, on the Visual Studio behavior.
*************** Dialect Options.
*** 3822,3887 ****
       given, it is a violation of the ODR to define types with the same
       name differently.
  
! '-fno-weak'
       Do not use weak symbol support, even if it is provided by the
       linker.  By default, G++ uses weak symbols if they are available.
       This option exists only for testing, and should not be used by
       end-users; it results in inferior code and has no benefits.  This
       option may be removed in a future release of G++.
  
! '-fext-numeric-literals (C++ and Objective-C++ only)'
       Accept imaginary, fixed-point, or machine-defined literal number
       suffixes as GNU extensions.  When this option is turned off these
       suffixes are treated as C++11 user-defined literal numeric
       suffixes.  This is on by default for all pre-C++11 dialects and all
!      GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
!      '-std=gnu++14'.  This option is off by default for ISO C++11
!      onwards ('-std=c++11', ...).
  
! '-nostdinc++'
       Do not search for header files in the standard directories specific
       to C++, but do still search the other standard directories.  (This
       option is used when building the C++ library.)
  
! '-flang-info-include-translate'
! '-flang-info-include-translate-not'
! '-flang-info-include-translate=HEADER'
       Inform of include translation events.  The first will note accepted
       include translations, the second will note declined include
       translations.  The HEADER form will inform of include translations
       relating to that specific header.  If HEADER is of the form
!      '"user"' or '<system>' it will be resolved to a specific user or
       system header using the include path.
  
! '-flang-info-module-cmi'
! '-flang-info-module-cmi=MODULE'
       Inform of Compiled Module Interface pathnames.  The first will note
       all read CMI pathnames.  The MODULE form will not reading a
       specific module's CMI. MODULE may be a named module or a
       header-unit (the latter indicated by either being a pathname
!      containing directory separators or enclosed in '<>' or '""').
  
! '-stdlib=LIBSTDC++,LIBC++'
       When G++ is configured to support this option, it allows
       specification of alternate C++ runtime libraries.  Two options are
       available: LIBSTDC++ (the default, native C++ runtime for G++) and
       LIBC++ which is the C++ runtime installed on some operating systems
       (e.g.  Darwin versions from Darwin11 onwards).  The option switches
       G++ to use the headers from the specified library and to emit
!      '-lstdc++' or '-lc++' respectively, when a C++ runtime is required
       for linking.
  
   In addition, these warning options have meanings only for C++ programs:
  
! '-Wabi-tag (C++ and Objective-C++ only)'
       Warn when a type with an ABI tag is used in a context that does not
       have that ABI tag.  See *note C++ Attributes:: for more information
       about ABI tags.
  
! '-Wcomma-subscript (C++ and Objective-C++ only)'
       Warn about uses of a comma expression within a subscripting
       expression.  This usage was deprecated in C++20 and is going to be
!      removed in C++23.  However, a comma expression wrapped in '( )' is
       not deprecated.  Example:
  
            void f(int *a, int b, int c) {
--- 3826,3891 ----
       given, it is a violation of the ODR to define types with the same
       name differently.
  
! ‘-fno-weak’
       Do not use weak symbol support, even if it is provided by the
       linker.  By default, G++ uses weak symbols if they are available.
       This option exists only for testing, and should not be used by
       end-users; it results in inferior code and has no benefits.  This
       option may be removed in a future release of G++.
  
! ‘-fext-numeric-literals (C++ and Objective-C++ only)’
       Accept imaginary, fixed-point, or machine-defined literal number
       suffixes as GNU extensions.  When this option is turned off these
       suffixes are treated as C++11 user-defined literal numeric
       suffixes.  This is on by default for all pre-C++11 dialects and all
!      GNU dialects: ‘-std=c++98’, ‘-std=gnu++98’, ‘-std=gnu++11’,
!      ‘-std=gnu++14’.  This option is off by default for ISO C++11
!      onwards (‘-std=c++11’, ...).
  
! ‘-nostdinc++’
       Do not search for header files in the standard directories specific
       to C++, but do still search the other standard directories.  (This
       option is used when building the C++ library.)
  
! ‘-flang-info-include-translate’
! ‘-flang-info-include-translate-not’
! ‘-flang-info-include-translate=HEADER’
       Inform of include translation events.  The first will note accepted
       include translations, the second will note declined include
       translations.  The HEADER form will inform of include translations
       relating to that specific header.  If HEADER is of the form
!      ‘"user"’ or ‘<system>’ it will be resolved to a specific user or
       system header using the include path.
  
! ‘-flang-info-module-cmi’
! ‘-flang-info-module-cmi=MODULE’
       Inform of Compiled Module Interface pathnames.  The first will note
       all read CMI pathnames.  The MODULE form will not reading a
       specific module's CMI. MODULE may be a named module or a
       header-unit (the latter indicated by either being a pathname
!      containing directory separators or enclosed in ‘<>’ or ‘""’).
  
! ‘-stdlib=LIBSTDC++,LIBC++’
       When G++ is configured to support this option, it allows
       specification of alternate C++ runtime libraries.  Two options are
       available: LIBSTDC++ (the default, native C++ runtime for G++) and
       LIBC++ which is the C++ runtime installed on some operating systems
       (e.g.  Darwin versions from Darwin11 onwards).  The option switches
       G++ to use the headers from the specified library and to emit
!      ‘-lstdc++’ or ‘-lc++’ respectively, when a C++ runtime is required
       for linking.
  
   In addition, these warning options have meanings only for C++ programs:
  
! ‘-Wabi-tag (C++ and Objective-C++ only)’
       Warn when a type with an ABI tag is used in a context that does not
       have that ABI tag.  See *note C++ Attributes:: for more information
       about ABI tags.
  
! ‘-Wcomma-subscript (C++ and Objective-C++ only)’
       Warn about uses of a comma expression within a subscripting
       expression.  This usage was deprecated in C++20 and is going to be
!      removed in C++23.  However, a comma expression wrapped in ‘( )’ is
       not deprecated.  Example:
  
            void f(int *a, int b, int c) {
*************** Dialect Options.
*** 3894,3908 ****
       supports the right number and types of arguments.  G++ will accept
       the formerly valid syntax for code that is not valid in C++23 but
       used to be valid but deprecated in C++20 with a pedantic warning
!      that can be disabled with '-Wno-comma-subscript'.
  
!      Enabled by default with '-std=c++20' unless '-Wno-deprecated', and
!      with '-std=c++23' regardless of '-Wno-deprecated'.
  
!      This warning is upgraded to an error by '-pedantic-errors' in C++23
       mode or later.
  
! '-Wctad-maybe-unsupported (C++ and Objective-C++ only)'
       Warn when performing class template argument deduction (CTAD) on a
       type with no explicitly written deduction guides.  This warning
       will point out cases where CTAD succeeded only because the compiler
--- 3898,3912 ----
       supports the right number and types of arguments.  G++ will accept
       the formerly valid syntax for code that is not valid in C++23 but
       used to be valid but deprecated in C++20 with a pedantic warning
!      that can be disabled with ‘-Wno-comma-subscript’.
  
!      Enabled by default with ‘-std=c++20’ unless ‘-Wno-deprecated’, and
!      with ‘-std=c++23’ regardless of ‘-Wno-deprecated’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’ in C++23
       mode or later.
  
! ‘-Wctad-maybe-unsupported (C++ and Objective-C++ only)’
       Warn when performing class template argument deduction (CTAD) on a
       type with no explicitly written deduction guides.  This warning
       will point out cases where CTAD succeeded only because the compiler
*************** Dialect Options.
*** 3919,3932 ****
            // Guide with incomplete parameter type will never be considered.
            S(allow_ctad_t) -> S<void>;
  
! '-Wctor-dtor-privacy (C++ and Objective-C++ only)'
       Warn when a class seems unusable because all the constructors or
       destructors in that class are private, and it has neither friends
       nor public static member functions.  Also warn if there are no
       non-private methods, and there's at least one private member
       function that isn't a constructor or destructor.
  
! '-Wdangling-reference (C++ and Objective-C++ only)'
       Warn when a reference is bound to a temporary whose lifetime has
       ended.  For example:
  
--- 3923,3936 ----
            // Guide with incomplete parameter type will never be considered.
            S(allow_ctad_t) -> S<void>;
  
! ‘-Wctor-dtor-privacy (C++ and Objective-C++ only)’
       Warn when a class seems unusable because all the constructors or
       destructors in that class are private, and it has neither friends
       nor public static member functions.  Also warn if there are no
       non-private methods, and there's at least one private member
       function that isn't a constructor or destructor.
  
! ‘-Wdangling-reference (C++ and Objective-C++ only)’
       Warn when a reference is bound to a temporary whose lifetime has
       ended.  For example:
  
*************** Dialect Options.
*** 3936,3942 ****
       In the example above, two temporaries are created, one for each
       argument, and a reference to one of the temporaries is returned.
       However, both temporaries are destroyed at the end of the full
!      expression, so the reference 'r' is dangling.  This warning also
       detects dangling references in member initializer lists:
  
            const int& f(const int& i) { return i; }
--- 3940,3946 ----
       In the example above, two temporaries are created, one for each
       argument, and a reference to one of the temporaries is returned.
       However, both temporaries are destroyed at the end of the full
!      expression, so the reference ‘r’ is dangling.  This warning also
       detects dangling references in member initializer lists:
  
            const int& f(const int& i) { return i; }
*************** Dialect Options.
*** 3954,3981 ****
            const S& s = S().self(); // s is dangling
  
       Certain functions are safe in this respect, for example
!      'std::use_facet': they take and return a reference, but they don't
       return one of its arguments, which can fool the warning.  Such
       functions can be excluded from the warning by wrapping them in a
!      '#pragma':
  
            #pragma GCC diagnostic push
            #pragma GCC diagnostic ignored "-Wdangling-reference"
            const T& foo (const T&) { ... }
            #pragma GCC diagnostic pop
  
!      The '#pragma' can also surround the class; in that case, the
       warning will be disabled for all the member functions.
  
!      '-Wdangling-reference' also warns about code like
  
            auto p = std::minmax(1, 2);
  
!      where 'std::minmax' returns 'std::pair<const int&, const int&>',
       and both references dangle after the end of the full expression
!      that contains the call to 'std::minmax'.
  
!      The warning does not warn for 'std::span'-like classes.  We
       consider classes of the form:
  
            template<typename T>
--- 3958,3985 ----
            const S& s = S().self(); // s is dangling
  
       Certain functions are safe in this respect, for example
!      ‘std::use_facet’: they take and return a reference, but they don't
       return one of its arguments, which can fool the warning.  Such
       functions can be excluded from the warning by wrapping them in a
!      ‘#pragma’:
  
            #pragma GCC diagnostic push
            #pragma GCC diagnostic ignored "-Wdangling-reference"
            const T& foo (const T&) { ... }
            #pragma GCC diagnostic pop
  
!      The ‘#pragma’ can also surround the class; in that case, the
       warning will be disabled for all the member functions.
  
!      ‘-Wdangling-reference’ also warns about code like
  
            auto p = std::minmax(1, 2);
  
!      where ‘std::minmax’ returns ‘std::pair<const int&, const int&>’,
       and both references dangle after the end of the full expression
!      that contains the call to ‘std::minmax’.
  
!      The warning does not warn for ‘std::span’-like classes.  We
       consider classes of the form:
  
            template<typename T>
*************** Dialect Options.
*** 3984,4013 ****
              std::size len_;
            };
  
!      as 'std::span'-like; that is, the class is a non-union class that
       has a pointer data member and a trivial destructor.
  
!      The warning can be disabled by using the 'gnu::no_dangling'
       attribute (*note C++ Attributes::).
  
!      This warning is enabled by '-Wall'.
  
! '-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
!      Warn when 'delete' is used to destroy an instance of a class that
       has virtual functions and non-virtual destructor.  It is unsafe to
       delete an instance of a derived class through a pointer to a base
       class if the base class does not have a virtual destructor.  This
!      warning is enabled by '-Wall'.
  
! '-Wdeprecated-copy (C++ and Objective-C++ only)'
       Warn that the implicit declaration of a copy constructor or copy
       assignment operator is deprecated if the class has a user-provided
       copy constructor or copy assignment operator, in C++11 and up.
!      This warning is enabled by '-Wextra'.  With
!      '-Wdeprecated-copy-dtor', also deprecate if the class has a
       user-provided destructor.
  
! '-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)'
       Disable the warning about the case when the usual arithmetic
       conversions are applied on operands where one is of enumeration
       type and the other is of a different enumeration type.  This
--- 3988,4017 ----
              std::size len_;
            };
  
!      as ‘std::span’-like; that is, the class is a non-union class that
       has a pointer data member and a trivial destructor.
  
!      The warning can be disabled by using the ‘gnu::no_dangling’
       attribute (*note C++ Attributes::).
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)’
!      Warn when ‘delete’ is used to destroy an instance of a class that
       has virtual functions and non-virtual destructor.  It is unsafe to
       delete an instance of a derived class through a pointer to a base
       class if the base class does not have a virtual destructor.  This
!      warning is enabled by ‘-Wall’.
  
! ‘-Wdeprecated-copy (C++ and Objective-C++ only)’
       Warn that the implicit declaration of a copy constructor or copy
       assignment operator is deprecated if the class has a user-provided
       copy constructor or copy assignment operator, in C++11 and up.
!      This warning is enabled by ‘-Wextra’.  With
!      ‘-Wdeprecated-copy-dtor’, also deprecate if the class has a
       user-provided destructor.
  
! ‘-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)’
       Disable the warning about the case when the usual arithmetic
       conversions are applied on operands where one is of enumeration
       type and the other is of a different enumeration type.  This
*************** Dialect Options.
*** 4017,4027 ****
            enum E2 { f };
            int k = f - e;
  
!      '-Wdeprecated-enum-enum-conversion' is enabled by default with
!      '-std=c++20'.  In pre-C++20 dialects, this warning can be enabled
!      by '-Wenum-conversion'.
  
! '-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)'
       Disable the warning about the case when the usual arithmetic
       conversions are applied on operands where one is of enumeration
       type and the other is of a floating-point type.  This conversion
--- 4021,4031 ----
            enum E2 { f };
            int k = f - e;
  
!      ‘-Wdeprecated-enum-enum-conversion’ is enabled by default with
!      ‘-std=c++20’.  In pre-C++20 dialects, this warning can be enabled
!      by ‘-Wenum-conversion’.
  
! ‘-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)’
       Disable the warning about the case when the usual arithmetic
       conversions are applied on operands where one is of enumeration
       type and the other is of a floating-point type.  This conversion
*************** Dialect Options.
*** 4031,4041 ****
            enum E2 { f };
            bool b = e <= 3.7;
  
!      '-Wdeprecated-enum-float-conversion' is enabled by default with
!      '-std=c++20'.  In pre-C++20 dialects, this warning can be enabled
!      by '-Wenum-conversion'.
  
! '-Wno-elaborated-enum-base'
       For C++11 and above, warn if an (invalid) additional enum-base is
       used in an elaborated-type-specifier.  That is, if an enum with
       given underlying type and no enumerator list is used in a
--- 4035,4045 ----
            enum E2 { f };
            bool b = e <= 3.7;
  
!      ‘-Wdeprecated-enum-float-conversion’ is enabled by default with
!      ‘-std=c++20’.  In pre-C++20 dialects, this warning can be enabled
!      by ‘-Wenum-conversion’.
  
! ‘-Wno-elaborated-enum-base’
       For C++11 and above, warn if an (invalid) additional enum-base is
       used in an elaborated-type-specifier.  That is, if an enum with
       given underlying type and no enumerator list is used in a
*************** Dialect Options.
*** 4043,4069 ****
       Enabled by default.  This warning is upgraded to an error with
       -pedantic-errors.
  
! '-Wno-init-list-lifetime (C++ and Objective-C++ only)'
!      Do not warn about uses of 'std::initializer_list' that are likely
       to result in dangling pointers.  Since the underlying array for an
!      'initializer_list' is handled like a normal C++ temporary object,
       it is easy to inadvertently keep a pointer to the array past the
       end of the array's lifetime.  For example:
  
!         * If a function returns a temporary 'initializer_list', or a
!           local 'initializer_list' variable, the array's lifetime ends
            at the end of the return statement, so the value returned has
            a dangling pointer.
  
!         * If a new-expression creates an 'initializer_list', the array
            only lives until the end of the enclosing full-expression, so
!           the 'initializer_list' in the heap has a dangling pointer.
  
!         * When an 'initializer_list' variable is assigned from a
            brace-enclosed initializer list, the temporary array created
            for the right side of the assignment only lives until the end
            of the full-expression, so at the next statement the
!           'initializer_list' variable has a dangling pointer.
  
                 // li's initial underlying array lives as long as li
                 std::initializer_list<int> li = { 1,2,3 };
--- 4047,4073 ----
       Enabled by default.  This warning is upgraded to an error with
       -pedantic-errors.
  
! ‘-Wno-init-list-lifetime (C++ and Objective-C++ only)’
!      Do not warn about uses of ‘std::initializer_list’ that are likely
       to result in dangling pointers.  Since the underlying array for an
!      ‘initializer_list’ is handled like a normal C++ temporary object,
       it is easy to inadvertently keep a pointer to the array past the
       end of the array's lifetime.  For example:
  
!         • If a function returns a temporary ‘initializer_list’, or a
!           local ‘initializer_list’ variable, the array's lifetime ends
            at the end of the return statement, so the value returned has
            a dangling pointer.
  
!         • If a new-expression creates an ‘initializer_list’, the array
            only lives until the end of the enclosing full-expression, so
!           the ‘initializer_list’ in the heap has a dangling pointer.
  
!         • When an ‘initializer_list’ variable is assigned from a
            brace-enclosed initializer list, the temporary array created
            for the right side of the assignment only lives until the end
            of the full-expression, so at the next statement the
!           ‘initializer_list’ variable has a dangling pointer.
  
                 // li's initial underlying array lives as long as li
                 std::initializer_list<int> li = { 1,2,3 };
*************** Dialect Options.
*** 4072,4097 ****
                 // now the temporary is gone and li has a dangling pointer
                 int i = li.begin()[0] // undefined behavior
  
!         * When a list constructor stores the 'begin' pointer from the
!           'initializer_list' argument, this doesn't extend the lifetime
            of the array, so if a class variable is constructed from a
!           temporary 'initializer_list', the pointer is left dangling by
            the end of the variable declaration statement.
  
! '-Winvalid-constexpr'
  
       Warn when a function never produces a constant expression.  In
!      C++20 and earlier, for every 'constexpr' function and function
       template, there must be at least one set of function arguments in
       at least one instantiation such that an invocation of the function
       or constructor could be an evaluated subexpression of a core
       constant expression.  C++23 removed this restriction, so it's
       possible to have a function or a function template marked
!      'constexpr' for which no invocation satisfies the requirements of a
       core constant expression.
  
       This warning is enabled as a pedantic warning by default in C++20
!      and earlier.  In C++23, '-Winvalid-constexpr' can be turned on, in
       which case it will be an ordinary warning.  For example:
  
            void f (int& i);
--- 4076,4101 ----
                 // now the temporary is gone and li has a dangling pointer
                 int i = li.begin()[0] // undefined behavior
  
!         • When a list constructor stores the ‘begin’ pointer from the
!           ‘initializer_list’ argument, this doesn't extend the lifetime
            of the array, so if a class variable is constructed from a
!           temporary ‘initializer_list’, the pointer is left dangling by
            the end of the variable declaration statement.
  
! ‘-Winvalid-constexpr’
  
       Warn when a function never produces a constant expression.  In
!      C++20 and earlier, for every ‘constexpr’ function and function
       template, there must be at least one set of function arguments in
       at least one instantiation such that an invocation of the function
       or constructor could be an evaluated subexpression of a core
       constant expression.  C++23 removed this restriction, so it's
       possible to have a function or a function template marked
!      ‘constexpr’ for which no invocation satisfies the requirements of a
       core constant expression.
  
       This warning is enabled as a pedantic warning by default in C++20
!      and earlier.  In C++23, ‘-Winvalid-constexpr’ can be turned on, in
       which case it will be an ordinary warning.  For example:
  
            void f (int& i);
*************** Dialect Options.
*** 4102,4119 ****
              f(i);
            }
  
! '-Winvalid-imported-macros'
       Verify all imported macro definitions are valid at the end of
       compilation.  This is not enabled by default, as it requires
       additional processing to determine.  It may be useful when
       preparing sets of header-units to ensure consistent macros.
  
! '-Wno-literal-suffix (C++ and Objective-C++ only)'
       Do not warn when a string or character literal is followed by a
       ud-suffix which does not begin with an underscore.  As a conforming
       extension, GCC treats such suffixes as separate preprocessing
       tokens in order to maintain backwards compatibility with code that
!      uses formatting macros from '<inttypes.h>'.  For example:
  
            #define __STDC_FORMAT_MACROS
            #include <inttypes.h>
--- 4106,4123 ----
              f(i);
            }
  
! ‘-Winvalid-imported-macros’
       Verify all imported macro definitions are valid at the end of
       compilation.  This is not enabled by default, as it requires
       additional processing to determine.  It may be useful when
       preparing sets of header-units to ensure consistent macros.
  
! ‘-Wno-literal-suffix (C++ and Objective-C++ only)’
       Do not warn when a string or character literal is followed by a
       ud-suffix which does not begin with an underscore.  As a conforming
       extension, GCC treats such suffixes as separate preprocessing
       tokens in order to maintain backwards compatibility with code that
!      uses formatting macros from ‘<inttypes.h>’.  For example:
  
            #define __STDC_FORMAT_MACROS
            #include <inttypes.h>
*************** Dialect Options.
*** 4124,4130 ****
              printf("My int64: %" PRId64"\n", i64);
            }
  
!      In this case, 'PRId64' is treated as a separate preprocessing
       token.
  
       This option also controls warnings when a user-defined literal
--- 4128,4134 ----
              printf("My int64: %" PRId64"\n", i64);
            }
  
!      In this case, ‘PRId64’ is treated as a separate preprocessing
       token.
  
       This option also controls warnings when a user-defined literal
*************** Dialect Options.
*** 4134,4165 ****
  
       These warnings are enabled by default.
  
! '-Wno-narrowing (C++ and Objective-C++ only)'
       For C++11 and later standards, narrowing conversions are diagnosed
       by default, as required by the standard.  A narrowing conversion
       from a constant produces an error, and a narrowing conversion from
!      a non-constant produces a warning, but '-Wno-narrowing' suppresses
       the diagnostic.  Note that this does not affect the meaning of
       well-formed code; narrowing conversions are still considered
       ill-formed in SFINAE contexts.
  
!      With '-Wnarrowing' in C++98, warn when a narrowing conversion
!      prohibited by C++11 occurs within '{ }', e.g.
  
            int i = { 2.2 }; // error: narrowing from double to int
  
!      This flag is included in '-Wall' and '-Wc++11-compat'.
  
! '-Wnoexcept (C++ and Objective-C++ only)'
       Warn when a noexcept-expression evaluates to false because of a
       call to a function that does not have a non-throwing exception
!      specification (i.e.  'throw()' or 'noexcept') but is known by the
       compiler to never throw an exception.
  
! '-Wnoexcept-type (C++ and Objective-C++ only)'
!      Warn if the C++17 feature making 'noexcept' part of a function type
       changes the mangled name of a symbol relative to C++14.  Enabled by
!      '-Wabi' and '-Wc++17-compat'.
  
       As an example:
  
--- 4138,4169 ----
  
       These warnings are enabled by default.
  
! ‘-Wno-narrowing (C++ and Objective-C++ only)’
       For C++11 and later standards, narrowing conversions are diagnosed
       by default, as required by the standard.  A narrowing conversion
       from a constant produces an error, and a narrowing conversion from
!      a non-constant produces a warning, but ‘-Wno-narrowing’ suppresses
       the diagnostic.  Note that this does not affect the meaning of
       well-formed code; narrowing conversions are still considered
       ill-formed in SFINAE contexts.
  
!      With ‘-Wnarrowing’ in C++98, warn when a narrowing conversion
!      prohibited by C++11 occurs within ‘{ }’, e.g.
  
            int i = { 2.2 }; // error: narrowing from double to int
  
!      This flag is included in ‘-Wall’ and ‘-Wc++11-compat’.
  
! ‘-Wnoexcept (C++ and Objective-C++ only)’
       Warn when a noexcept-expression evaluates to false because of a
       call to a function that does not have a non-throwing exception
!      specification (i.e.  ‘throw()’ or ‘noexcept’) but is known by the
       compiler to never throw an exception.
  
! ‘-Wnoexcept-type (C++ and Objective-C++ only)’
!      Warn if the C++17 feature making ‘noexcept’ part of a function type
       changes the mangled name of a symbol relative to C++14.  Enabled by
!      ‘-Wabi’ and ‘-Wc++17-compat’.
  
       As an example:
  
*************** Dialect Options.
*** 4167,4183 ****
            void g() noexcept;
            void h() { f(g); }
  
!      In C++14, 'f' calls 'f<void(*)()>', but in C++17 it calls
!      'f<void(*)()noexcept>'.
  
! '-Wclass-memaccess (C++ and Objective-C++ only)'
       Warn when the destination of a call to a raw memory function such
!      as 'memset' or 'memcpy' is an object of class type, and when
       writing into such an object might bypass the class non-trivial or
       deleted constructor or copy assignment, violate const-correctness
       or encapsulation, or corrupt virtual table pointers.  Modifying the
       representation of such objects may violate invariants maintained by
!      member functions of the class.  For example, the call to 'memset'
       below is undefined because it modifies a non-trivial class object
       and is, therefore, diagnosed.  The safe way to either initialize or
       clear the storage of objects of such types is by using the
--- 4171,4187 ----
            void g() noexcept;
            void h() { f(g); }
  
!      In C++14, ‘f’ calls ‘f<void(*)()>’, but in C++17 it calls
!      ‘f<void(*)()noexcept>’.
  
! ‘-Wclass-memaccess (C++ and Objective-C++ only)’
       Warn when the destination of a call to a raw memory function such
!      as ‘memset’ or ‘memcpy’ is an object of class type, and when
       writing into such an object might bypass the class non-trivial or
       deleted constructor or copy assignment, violate const-correctness
       or encapsulation, or corrupt virtual table pointers.  Modifying the
       representation of such objects may violate invariants maintained by
!      member functions of the class.  For example, the call to ‘memset’
       below is undefined because it modifies a non-trivial class object
       and is, therefore, diagnosed.  The safe way to either initialize or
       clear the storage of objects of such types is by using the
*************** Dialect Options.
*** 4185,4213 ****
       available.
            std::string str = "abc";
            memset (&str, 0, sizeof str);
!      The '-Wclass-memaccess' option is enabled by '-Wall'.  Explicitly
!      casting the pointer to the class object to 'void *' or to a type
       that can be safely accessed by the raw memory function suppresses
       the warning.
  
! '-Wnon-virtual-dtor (C++ and Objective-C++ only)'
       Warn when a class has virtual functions and an accessible
       non-virtual destructor itself or in an accessible polymorphic base
       class, in which case it is possible but unsafe to delete an
       instance of a derived class through a pointer to the class itself
!      or base class.  This warning is automatically enabled if '-Weffc++'
!      is specified.  The '-Wdelete-non-virtual-dtor' option (enabled by
!      '-Wall') should be preferred because it warns about the unsafe
       cases without false positives.
  
! '-Wregister (C++ and Objective-C++ only)'
!      Warn on uses of the 'register' storage class specifier, except when
       it is part of the GNU *note Explicit Register Variables::
!      extension.  The use of the 'register' keyword as storage class
       specifier has been deprecated in C++11 and removed in C++17.
!      Enabled by default with '-std=c++17'.
  
! '-Wreorder (C++ and Objective-C++ only)'
       Warn when the order of member initializers given in the code does
       not match the order in which they must be executed.  For instance:
  
--- 4189,4217 ----
       available.
            std::string str = "abc";
            memset (&str, 0, sizeof str);
!      The ‘-Wclass-memaccess’ option is enabled by ‘-Wall’.  Explicitly
!      casting the pointer to the class object to ‘void *’ or to a type
       that can be safely accessed by the raw memory function suppresses
       the warning.
  
! ‘-Wnon-virtual-dtor (C++ and Objective-C++ only)’
       Warn when a class has virtual functions and an accessible
       non-virtual destructor itself or in an accessible polymorphic base
       class, in which case it is possible but unsafe to delete an
       instance of a derived class through a pointer to the class itself
!      or base class.  This warning is automatically enabled if ‘-Weffc++’
!      is specified.  The ‘-Wdelete-non-virtual-dtor’ option (enabled by
!      ‘-Wall’) should be preferred because it warns about the unsafe
       cases without false positives.
  
! ‘-Wregister (C++ and Objective-C++ only)’
!      Warn on uses of the ‘register’ storage class specifier, except when
       it is part of the GNU *note Explicit Register Variables::
!      extension.  The use of the ‘register’ keyword as storage class
       specifier has been deprecated in C++11 and removed in C++17.
!      Enabled by default with ‘-std=c++17’.
  
! ‘-Wreorder (C++ and Objective-C++ only)’
       Warn when the order of member initializers given in the code does
       not match the order in which they must be executed.  For instance:
  
*************** Dialect Options.
*** 4217,4228 ****
              A(): j (0), i (1) { }
            };
  
!      The compiler rearranges the member initializers for 'i' and 'j' to
       match the declaration order of the members, emitting a warning to
!      that effect.  This warning is enabled by '-Wall'.
  
! '-Wno-pessimizing-move (C++ and Objective-C++ only)'
!      This warning warns when a call to 'std::move' prevents copy
       elision.  A typical scenario when copy elision can occur is when
       returning in a function with a class return type, when the
       expression being returned is the name of a non-volatile automatic
--- 4221,4232 ----
              A(): j (0), i (1) { }
            };
  
!      The compiler rearranges the member initializers for ‘i’ and ‘j’ to
       match the declaration order of the members, emitting a warning to
!      that effect.  This warning is enabled by ‘-Wall’.
  
! ‘-Wno-pessimizing-move (C++ and Objective-C++ only)’
!      This warning warns when a call to ‘std::move’ prevents copy
       elision.  A typical scenario when copy elision can occur is when
       returning in a function with a class return type, when the
       expression being returned is the name of a non-volatile automatic
*************** Dialect Options.
*** 4239,4252 ****
              return std::move (t);
            }
  
!      But in this example, the 'std::move' call prevents copy elision.
  
!      This warning is enabled by '-Wall'.
  
! '-Wno-redundant-move (C++ and Objective-C++ only)'
!      This warning warns about redundant calls to 'std::move'; that is,
       when a move operation would have been performed even without the
!      'std::move' call.  This happens because the compiler is forced to
       treat the object as if it were an rvalue in certain situations such
       as returning a local variable, where copy elision isn't applicable.
       Consider:
--- 4243,4256 ----
              return std::move (t);
            }
  
!      But in this example, the ‘std::move’ call prevents copy elision.
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wno-redundant-move (C++ and Objective-C++ only)’
!      This warning warns about redundant calls to ‘std::move’; that is,
       when a move operation would have been performed even without the
!      ‘std::move’ call.  This happens because the compiler is forced to
       treat the object as if it were an rvalue in certain situations such
       as returning a local variable, where copy elision isn't applicable.
       Consider:
*************** Dialect Options.
*** 4260,4266 ****
              return std::move (t);
            }
  
!      Here, the 'std::move' call is redundant.  Because G++ implements
       Core Issue 1579, another example is:
  
            struct T { // convertible to U
--- 4264,4270 ----
              return std::move (t);
            }
  
!      Here, the ‘std::move’ call is redundant.  Because G++ implements
       Core Issue 1579, another example is:
  
            struct T { // convertible to U
*************** Dialect Options.
*** 4280,4288 ****
       yet G++ treats the return value as if it were designated by an
       rvalue.
  
!      This warning is enabled by '-Wextra'.
  
! '-Wrange-loop-construct (C++ and Objective-C++ only)'
       This warning warns when a C++ range-based for-loop is creating an
       unnecessary copy.  This can happen when the range declaration is
       not a reference, but probably should be.  For example:
--- 4284,4292 ----
       yet G++ treats the return value as if it were designated by an
       rvalue.
  
!      This warning is enabled by ‘-Wextra’.
  
! ‘-Wrange-loop-construct (C++ and Objective-C++ only)’
       This warning warns when a C++ range-based for-loop is creating an
       unnecessary copy.  This can happen when the range declaration is
       not a reference, but probably should be.  For example:
*************** Dialect Options.
*** 4306,4317 ****
            }
  
       In the example above, in every iteration of the loop a temporary
!      value of type 'double' is created and destroyed, to which the
!      reference 'const double &' is bound.
  
!      This warning is enabled by '-Wall'.
  
! '-Wredundant-tags (C++ and Objective-C++ only)'
       Warn about redundant class-key and enum-key in references to class
       types and enumerated types in contexts where the key can be
       eliminated without causing an ambiguity.  For example:
--- 4310,4321 ----
            }
  
       In the example above, in every iteration of the loop a temporary
!      value of type ‘double’ is created and destroyed, to which the
!      reference ‘const double &’ is bound.
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wredundant-tags (C++ and Objective-C++ only)’
       Warn about redundant class-key and enum-key in references to class
       types and enumerated types in contexts where the key can be
       eliminated without causing an ambiguity.  For example:
*************** Dialect Options.
*** 4325,4331 ****
            void foo ();   // "hides" struct foo
            void bar (struct foo&);  // no warning, keyword struct is necessary
  
! '-Wno-subobject-linkage (C++ and Objective-C++ only)'
       Do not warn if a class type has a base or a field whose type uses
       the anonymous namespace or depends on a type with no linkage.  If a
       type A depends on a type B with no or internal linkage, defining it
--- 4329,4335 ----
            void foo ();   // "hides" struct foo
            void bar (struct foo&);  // no warning, keyword struct is necessary
  
! ‘-Wno-subobject-linkage (C++ and Objective-C++ only)’
       Do not warn if a class type has a base or a field whose type uses
       the anonymous namespace or depends on a type with no linkage.  If a
       type A depends on a type B with no or internal linkage, defining it
*************** Dialect Options.
*** 4335,4400 ****
       warning is to give it internal linkage by putting it in an
       anonymous namespace as well.  The compiler doesn't give this
       warning for types defined in the main .C file, as those are
!      unlikely to have multiple definitions.  '-Wsubobject-linkage' is
       enabled by default.
  
! '-Weffc++ (C++ and Objective-C++ only)'
       Warn about violations of the following style guidelines from Scott
!      Meyers' 'Effective C++' series of books:
  
!         * Define a copy constructor and an assignment operator for
            classes with dynamically-allocated memory.
  
!         * Prefer initialization to assignment in constructors.
  
!         * Have 'operator=' return a reference to '*this'.
  
!         * Don't try to return a reference when you must return an
            object.
  
!         * Distinguish between prefix and postfix forms of increment and
            decrement operators.
  
!         * Never overload '&&', '||', or ','.
  
!      This option also enables '-Wnon-virtual-dtor', which is also one of
       the effective C++ recommendations.  However, the check is extended
       to warn about the lack of virtual destructor in accessible
       non-polymorphic bases classes too.
  
       When selecting this option, be aware that the standard library
!      headers do not obey all of these guidelines; use 'grep -v' to
       filter out those warnings.
  
! '-Wno-exceptions (C++ and Objective-C++ only)'
       Disable the warning about the case when an exception handler is
       shadowed by another handler, which can point out a wrong ordering
       of exception handlers.
  
! '-Wstrict-null-sentinel (C++ and Objective-C++ only)'
!      Warn about the use of an uncasted 'NULL' as sentinel.  When
!      compiling only with GCC this is a valid sentinel, as 'NULL' is
!      defined to '__null'.  Although it is a null pointer constant rather
       than a null pointer, it is guaranteed to be of the same size as a
       pointer.  But this use is not portable across different compilers.
  
! '-Wno-non-template-friend (C++ and Objective-C++ only)'
       Disable warnings when non-template friend functions are declared
       within a template.  In very old versions of GCC that predate
!      implementation of the ISO standard, declarations such as 'friend
!      int foo(int)', where the name of the friend is an unqualified-id,
       could be interpreted as a particular specialization of a template
       function; the warning exists to diagnose compatibility problems,
       and is enabled by default.
  
! '-Wold-style-cast (C++ and Objective-C++ only)'
       Warn if an old-style (C-style) cast to a non-void type is used
!      within a C++ program.  The new-style casts ('dynamic_cast',
!      'static_cast', 'reinterpret_cast', and 'const_cast') are less
       vulnerable to unintended effects and much easier to search for.
  
! '-Woverloaded-virtual (C++ and Objective-C++ only)'
! '-Woverloaded-virtual=N'
       Warn when a function declaration hides virtual functions from a
       base class.  For example, in:
  
--- 4339,4404 ----
       warning is to give it internal linkage by putting it in an
       anonymous namespace as well.  The compiler doesn't give this
       warning for types defined in the main .C file, as those are
!      unlikely to have multiple definitions.  ‘-Wsubobject-linkage’ is
       enabled by default.
  
! ‘-Weffc++ (C++ and Objective-C++ only)’
       Warn about violations of the following style guidelines from Scott
!      Meyers' ‘Effective C++’ series of books:
  
!         • Define a copy constructor and an assignment operator for
            classes with dynamically-allocated memory.
  
!         • Prefer initialization to assignment in constructors.
  
!         • Have ‘operator=’ return a reference to ‘*this’.
  
!         • Don't try to return a reference when you must return an
            object.
  
!         • Distinguish between prefix and postfix forms of increment and
            decrement operators.
  
!         • Never overload ‘&&’, ‘||’, or ‘,’.
  
!      This option also enables ‘-Wnon-virtual-dtor’, which is also one of
       the effective C++ recommendations.  However, the check is extended
       to warn about the lack of virtual destructor in accessible
       non-polymorphic bases classes too.
  
       When selecting this option, be aware that the standard library
!      headers do not obey all of these guidelines; use ‘grep -v’ to
       filter out those warnings.
  
! ‘-Wno-exceptions (C++ and Objective-C++ only)’
       Disable the warning about the case when an exception handler is
       shadowed by another handler, which can point out a wrong ordering
       of exception handlers.
  
! ‘-Wstrict-null-sentinel (C++ and Objective-C++ only)’
!      Warn about the use of an uncasted ‘NULL’ as sentinel.  When
!      compiling only with GCC this is a valid sentinel, as ‘NULL’ is
!      defined to ‘__null’.  Although it is a null pointer constant rather
       than a null pointer, it is guaranteed to be of the same size as a
       pointer.  But this use is not portable across different compilers.
  
! ‘-Wno-non-template-friend (C++ and Objective-C++ only)’
       Disable warnings when non-template friend functions are declared
       within a template.  In very old versions of GCC that predate
!      implementation of the ISO standard, declarations such as ‘friend
!      int foo(int)’, where the name of the friend is an unqualified-id,
       could be interpreted as a particular specialization of a template
       function; the warning exists to diagnose compatibility problems,
       and is enabled by default.
  
! ‘-Wold-style-cast (C++ and Objective-C++ only)’
       Warn if an old-style (C-style) cast to a non-void type is used
!      within a C++ program.  The new-style casts (‘dynamic_cast’,
!      ‘static_cast’, ‘reinterpret_cast’, and ‘const_cast’) are less
       vulnerable to unintended effects and much easier to search for.
  
! ‘-Woverloaded-virtual (C++ and Objective-C++ only)’
! ‘-Woverloaded-virtual=N’
       Warn when a function declaration hides virtual functions from a
       base class.  For example, in:
  
*************** Dialect Options.
*** 4406,4412 ****
              void f(int); // does not override
            };
  
!      the 'A' class version of 'f' is hidden in 'B', and code like:
  
            B* b;
            b->f();
--- 4410,4416 ----
              void f(int); // does not override
            };
  
!      the ‘A’ class version of ‘f’ is hidden in ‘B’, and code like:
  
            B* b;
            b->f();
*************** Dialect Options.
*** 4415,4421 ****
  
       In cases where the different signatures are not an accident, the
       simplest solution is to add a using-declaration to the derived
!      class to un-hide the base function, e.g.  add 'using A::f;' to 'B'.
  
       The optional level suffix controls the behavior when all the
       declarations in the derived class override virtual functions in the
--- 4419,4425 ----
  
       In cases where the different signatures are not an accident, the
       simplest solution is to add a using-declaration to the derived
!      class to un-hide the base function, e.g.  add ‘using A::f;’ to ‘B’.
  
       The optional level suffix controls the behavior when all the
       declarations in the derived class override virtual functions in the
*************** Dialect Options.
*** 4435,4475 ****
       semantics for some of the overloads are fine.
  
       At level 1, this case does not warn; at level 2, it does.
!      '-Woverloaded-virtual' by itself selects level 2.  Level 1 is
!      included in '-Wall'.
  
! '-Wno-pmf-conversions (C++ and Objective-C++ only)'
       Disable the diagnostic for converting a bound pointer to member
       function to a plain pointer.
  
! '-Wsign-promo (C++ and Objective-C++ only)'
       Warn when overload resolution chooses a promotion from unsigned or
       enumerated type to a signed type, over a conversion to an unsigned
       type of the same size.  Previous versions of G++ tried to preserve
       unsignedness, but the standard mandates the current behavior.
  
! '-Wtemplates (C++ and Objective-C++ only)'
       Warn when a primary template declaration is encountered.  Some
       coding rules disallow templates, and this may be used to enforce
       that rule.  The warning is inactive inside a system header file,
       such as the STL, so one can still use the STL. One may also
       instantiate or specialize templates.
  
! '-Wmismatched-new-delete (C++ and Objective-C++ only)'
!      Warn for mismatches between calls to 'operator new' or 'operator
!      delete' and the corresponding call to the allocation or
!      deallocation function.  This includes invocations of C++ 'operator
!      delete' with pointers returned from either mismatched forms of
!      'operator new', or from other functions that allocate objects for
!      which the 'operator delete' isn't a suitable deallocator, as well
       as calls to other deallocation functions with pointers returned
!      from 'operator new' for which the deallocation function isn't
       suitable.
  
!      For example, the 'delete' expression in the function below is
!      diagnosed because it doesn't match the array form of the 'new'
       expression the pointer argument was returned from.  Similarly, the
!      call to 'free' is also diagnosed.
  
            void f ()
            {
--- 4439,4479 ----
       semantics for some of the overloads are fine.
  
       At level 1, this case does not warn; at level 2, it does.
!      ‘-Woverloaded-virtual’ by itself selects level 2.  Level 1 is
!      included in ‘-Wall’.
  
! ‘-Wno-pmf-conversions (C++ and Objective-C++ only)’
       Disable the diagnostic for converting a bound pointer to member
       function to a plain pointer.
  
! ‘-Wsign-promo (C++ and Objective-C++ only)’
       Warn when overload resolution chooses a promotion from unsigned or
       enumerated type to a signed type, over a conversion to an unsigned
       type of the same size.  Previous versions of G++ tried to preserve
       unsignedness, but the standard mandates the current behavior.
  
! ‘-Wtemplates (C++ and Objective-C++ only)’
       Warn when a primary template declaration is encountered.  Some
       coding rules disallow templates, and this may be used to enforce
       that rule.  The warning is inactive inside a system header file,
       such as the STL, so one can still use the STL. One may also
       instantiate or specialize templates.
  
! ‘-Wmismatched-new-delete (C++ and Objective-C++ only)’
!      Warn for mismatches between calls to ‘operator new’ or ‘operator
!      delete’ and the corresponding call to the allocation or
!      deallocation function.  This includes invocations of C++ ‘operator
!      delete’ with pointers returned from either mismatched forms of
!      ‘operator new’, or from other functions that allocate objects for
!      which the ‘operator delete’ isn't a suitable deallocator, as well
       as calls to other deallocation functions with pointers returned
!      from ‘operator new’ for which the deallocation function isn't
       suitable.
  
!      For example, the ‘delete’ expression in the function below is
!      diagnosed because it doesn't match the array form of the ‘new’
       expression the pointer argument was returned from.  Similarly, the
!      call to ‘free’ is also diagnosed.
  
            void f ()
            {
*************** Dialect Options.
*** 4480,4500 ****
              free (p);   // warning: mismatch between new and free
            }
  
!      The related option '-Wmismatched-dealloc' diagnoses mismatches
       involving allocation and deallocation functions other than
!      'operator new' and 'operator delete'.
  
!      '-Wmismatched-new-delete' is included in '-Wall'.
  
! '-Wmismatched-tags (C++ and Objective-C++ only)'
       Warn for declarations of structs, classes, and class templates and
       their specializations with a class-key that does not match either
       the definition or the first declaration if no definition is
       provided.
  
!      For example, the declaration of 'struct Object' in the argument
!      list of 'draw' triggers the warning.  To avoid it, either remove
!      the redundant class-key 'struct' or replace it with 'class' to
       match its definition.
            class Object {
            public:
--- 4484,4504 ----
              free (p);   // warning: mismatch between new and free
            }
  
!      The related option ‘-Wmismatched-dealloc’ diagnoses mismatches
       involving allocation and deallocation functions other than
!      ‘operator new’ and ‘operator delete’.
  
!      ‘-Wmismatched-new-delete’ is included in ‘-Wall’.
  
! ‘-Wmismatched-tags (C++ and Objective-C++ only)’
       Warn for declarations of structs, classes, and class templates and
       their specializations with a class-key that does not match either
       the definition or the first declaration if no definition is
       provided.
  
!      For example, the declaration of ‘struct Object’ in the argument
!      list of ‘draw’ triggers the warning.  To avoid it, either remove
!      the redundant class-key ‘struct’ or replace it with ‘class’ to
       match its definition.
            class Object {
            public:
*************** Dialect Options.
*** 4502,4531 ****
            };
            void draw (struct Object*);
  
!      It is not wrong to declare a class with the class-key 'struct' as
!      the example above shows.  The '-Wmismatched-tags' option is
       intended to help achieve a consistent style of class declarations.
       In code that is intended to be portable to Windows-based compilers
       the warning helps prevent unresolved references due to the
       difference in the mangling of symbols declared with different
       class-keys.  The option can be used either on its own or in
!      conjunction with '-Wredundant-tags'.
  
! '-Wmultiple-inheritance (C++ and Objective-C++ only)'
       Warn when a class is defined with multiple direct base classes.
       Some coding rules disallow multiple inheritance, and this may be
       used to enforce that rule.  The warning is inactive inside a system
       header file, such as the STL, so one can still use the STL. One may
       also define classes that indirectly use multiple inheritance.
  
! '-Wvirtual-inheritance'
       Warn when a class is defined with a virtual direct base class.
       Some coding rules disallow multiple inheritance, and this may be
       used to enforce that rule.  The warning is inactive inside a system
       header file, such as the STL, so one can still use the STL. One may
       also define classes that indirectly use virtual inheritance.
  
! '-Wno-virtual-move-assign'
       Suppress warnings about inheriting from a virtual base with a
       non-trivial C++11 move assignment operator.  This is dangerous
       because if the virtual base is reachable along more than one path,
--- 4506,4535 ----
            };
            void draw (struct Object*);
  
!      It is not wrong to declare a class with the class-key ‘struct’ as
!      the example above shows.  The ‘-Wmismatched-tags’ option is
       intended to help achieve a consistent style of class declarations.
       In code that is intended to be portable to Windows-based compilers
       the warning helps prevent unresolved references due to the
       difference in the mangling of symbols declared with different
       class-keys.  The option can be used either on its own or in
!      conjunction with ‘-Wredundant-tags’.
  
! ‘-Wmultiple-inheritance (C++ and Objective-C++ only)’
       Warn when a class is defined with multiple direct base classes.
       Some coding rules disallow multiple inheritance, and this may be
       used to enforce that rule.  The warning is inactive inside a system
       header file, such as the STL, so one can still use the STL. One may
       also define classes that indirectly use multiple inheritance.
  
! ‘-Wvirtual-inheritance’
       Warn when a class is defined with a virtual direct base class.
       Some coding rules disallow multiple inheritance, and this may be
       used to enforce that rule.  The warning is inactive inside a system
       header file, such as the STL, so one can still use the STL. One may
       also define classes that indirectly use virtual inheritance.
  
! ‘-Wno-virtual-move-assign’
       Suppress warnings about inheriting from a virtual base with a
       non-trivial C++11 move assignment operator.  This is dangerous
       because if the virtual base is reachable along more than one path,
*************** Dialect Options.
*** 4534,4547 ****
       to avoid moving from a moved-from object, this warning can be
       disabled.
  
! '-Wnamespaces'
       Warn when a namespace definition is opened.  Some coding rules
       disallow namespaces, and this may be used to enforce that rule.
       The warning is inactive inside a system header file, such as the
       STL, so one can still use the STL. One may also use using
       directives and qualified names.
  
! '-Wno-template-id-cdtor (C++ and Objective-C++ only)'
       Disable the warning about the use of simple-template-id as the
       declarator-id of a constructor or destructor, which became invalid
       in C++20 via DR 2237.  For example:
--- 4538,4551 ----
       to avoid moving from a moved-from object, this warning can be
       disabled.
  
! ‘-Wnamespaces’
       Warn when a namespace definition is opened.  Some coding rules
       disallow namespaces, and this may be used to enforce that rule.
       The warning is inactive inside a system header file, such as the
       STL, so one can still use the STL. One may also use using
       directives and qualified names.
  
! ‘-Wno-template-id-cdtor (C++ and Objective-C++ only)’
       Disable the warning about the use of simple-template-id as the
       declarator-id of a constructor or destructor, which became invalid
       in C++20 via DR 2237.  For example:
*************** Dialect Options.
*** 4551,4564 ****
              ~S<T>();  // should be ~S();
            };
  
!      '-Wtemplate-id-cdtor' is enabled by default with '-std=c++20'; it
!      is also enabled by '-Wc++20-compat'.
  
! '-Wno-terminate (C++ and Objective-C++ only)'
       Disable the warning about a throw-expression that will immediately
!      result in a call to 'terminate'.
  
! '-Wno-vexing-parse (C++ and Objective-C++ only)'
       Warn about the most vexing parse syntactic ambiguity.  This warns
       about the cases when a declaration looks like a variable
       definition, but the C++ language requires it to be interpreted as a
--- 4555,4568 ----
              ~S<T>();  // should be ~S();
            };
  
!      ‘-Wtemplate-id-cdtor’ is enabled by default with ‘-std=c++20’; it
!      is also enabled by ‘-Wc++20-compat’.
  
! ‘-Wno-terminate (C++ and Objective-C++ only)’
       Disable the warning about a throw-expression that will immediately
!      result in a call to ‘terminate’.
  
! ‘-Wno-vexing-parse (C++ and Objective-C++ only)’
       Warn about the most vexing parse syntactic ambiguity.  This warns
       about the cases when a declaration looks like a variable
       definition, but the C++ language requires it to be interpreted as a
*************** Dialect Options.
*** 4584,4623 ****
  
       This warning is enabled by default.
  
! '-Wno-class-conversion (C++ and Objective-C++ only)'
       Do not warn when a conversion function converts an object to the
       same type, to a base class of that type, or to void; such a
       conversion function will never be called.
  
! '-Wvolatile (C++ and Objective-C++ only)'
!      Warn about deprecated uses of the 'volatile' qualifier.  This
!      includes postfix and prefix '++' and '--' expressions of
!      'volatile'-qualified types, using simple assignments where the left
!      operand is a 'volatile'-qualified non-class type for their value,
       compound assignments where the left operand is a
!      'volatile'-qualified non-class type, 'volatile'-qualified function
!      return type, 'volatile'-qualified parameter type, and structured
!      bindings of a 'volatile'-qualified type.  This usage was deprecated
       in C++20.
  
!      Enabled by default with '-std=c++20'.
  
! '-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
!      Warn when a literal '0' is used as null pointer constant.  This can
!      be useful to facilitate the conversion to 'nullptr' in C++11.
  
! '-Waligned-new'
       Warn about a new-expression of a type that requires greater
!      alignment than the 'alignof(std::max_align_t)' but uses an
       allocation function without an explicit alignment parameter.  This
!      option is enabled by '-Wall'.
  
       Normally this only warns about global allocation functions, but
!      '-Waligned-new=all' also warns about class member allocation
       functions.
  
! '-Wno-placement-new'
! '-Wplacement-new=N'
       Warn about placement new expressions with undefined behavior, such
       as constructing an object in a buffer that is smaller than the type
       of the object.  For example, the placement new expression below is
--- 4588,4627 ----
  
       This warning is enabled by default.
  
! ‘-Wno-class-conversion (C++ and Objective-C++ only)’
       Do not warn when a conversion function converts an object to the
       same type, to a base class of that type, or to void; such a
       conversion function will never be called.
  
! ‘-Wvolatile (C++ and Objective-C++ only)’
!      Warn about deprecated uses of the ‘volatile’ qualifier.  This
!      includes postfix and prefix ‘++’ and ‘--’ expressions of
!      ‘volatile’-qualified types, using simple assignments where the left
!      operand is a ‘volatile’-qualified non-class type for their value,
       compound assignments where the left operand is a
!      ‘volatile’-qualified non-class type, ‘volatile’-qualified function
!      return type, ‘volatile’-qualified parameter type, and structured
!      bindings of a ‘volatile’-qualified type.  This usage was deprecated
       in C++20.
  
!      Enabled by default with ‘-std=c++20’.
  
! ‘-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)’
!      Warn when a literal ‘0’ is used as null pointer constant.  This can
!      be useful to facilitate the conversion to ‘nullptr’ in C++11.
  
! ‘-Waligned-new’
       Warn about a new-expression of a type that requires greater
!      alignment than the ‘alignof(std::max_align_t)’ but uses an
       allocation function without an explicit alignment parameter.  This
!      option is enabled by ‘-Wall’.
  
       Normally this only warns about global allocation functions, but
!      ‘-Waligned-new=all’ also warns about class member allocation
       functions.
  
! ‘-Wno-placement-new’
! ‘-Wplacement-new=N’
       Warn about placement new expressions with undefined behavior, such
       as constructing an object in a buffer that is smaller than the type
       of the object.  For example, the placement new expression below is
*************** Dialect Options.
*** 4627,4645 ****
            new (buf) int[64];
       This warning is enabled by default.
  
!      '-Wplacement-new=1'
!           This is the default warning level of '-Wplacement-new'.  At
            this level the warning is not issued for some strictly
            undefined constructs that GCC allows as extensions for
            compatibility with legacy code.  For example, the following
!           'new' expression is not diagnosed at this level even though it
            has undefined behavior according to the C++ standard because
            it writes past the end of the one-element array.
                 struct S { int n, a[1]; };
                 S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
                 new (s->a)int [32]();
  
!      '-Wplacement-new=2'
            At this level, in addition to diagnosing all the same
            constructs as at level 1, a diagnostic is also issued for
            placement new expressions that construct an object in the last
--- 4631,4649 ----
            new (buf) int[64];
       This warning is enabled by default.
  
!      ‘-Wplacement-new=1’
!           This is the default warning level of ‘-Wplacement-new’.  At
            this level the warning is not issued for some strictly
            undefined constructs that GCC allows as extensions for
            compatibility with legacy code.  For example, the following
!           ‘new’ expression is not diagnosed at this level even though it
            has undefined behavior according to the C++ standard because
            it writes past the end of the one-element array.
                 struct S { int n, a[1]; };
                 S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
                 new (s->a)int [32]();
  
!      ‘-Wplacement-new=2’
            At this level, in addition to diagnosing all the same
            constructs as at level 1, a diagnostic is also issued for
            placement new expressions that construct an object in the last
*************** Dialect Options.
*** 4652,4711 ****
                 S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
                 new (s->a)int [32]();
  
! '-Wcatch-value'
! '-Wcatch-value=N (C++ and Objective-C++ only)'
       Warn about catch handlers that do not catch via reference.  With
!      '-Wcatch-value=1' (or '-Wcatch-value' for short) warn about
       polymorphic class types that are caught by value.  With
!      '-Wcatch-value=2' warn about all class types that are caught by
!      value.  With '-Wcatch-value=3' warn about all types that are not
!      caught by reference.  '-Wcatch-value' is enabled by '-Wall'.
  
! '-Wconditionally-supported (C++ and Objective-C++ only)'
       Warn for conditionally-supported (C++11 [intro.defs]) constructs.
  
! '-Wno-delete-incomplete (C++ and Objective-C++ only)'
       Do not warn when deleting a pointer to incomplete type, which may
       cause undefined behavior at runtime.  This warning is enabled by
       default.
  
! '-Wextra-semi (C++, Objective-C++ only)'
       Warn about redundant semicolons after in-class function
       definitions.
  
! '-Wno-global-module (C++ and Objective-C++ only)'
       Disable the diagnostic for when the global module fragment of a
       module unit does not consist only of preprocessor directives.
  
! '-Wno-inaccessible-base (C++, Objective-C++ only)'
       This option controls warnings when a base class is inaccessible in
       a class derived from it due to ambiguity.  The warning is enabled
       by default.  Note that the warning for ambiguous virtual bases is
!      enabled by the '-Wextra' option.
            struct A { int a; };
  
            struct B : A { };
  
            struct C : B, A { };
  
! '-Wno-inherited-variadic-ctor'
       Suppress warnings about use of C++11 inheriting constructors when
       the base class inherited from has a C variadic constructor; the
       warning is on by default because the ellipsis is not inherited.
  
! '-Wno-invalid-offsetof (C++ and Objective-C++ only)'
!      Suppress warnings from applying the 'offsetof' macro to a non-POD
!      type.  According to the 2014 ISO C++ standard, applying 'offsetof'
       to a non-standard-layout type is undefined.  In existing C++
!      implementations, however, 'offsetof' typically gives meaningful
       results.  This flag is for users who are aware that they are
       writing nonportable code and who have deliberately chosen to ignore
       the warning about it.
  
!      The restrictions on 'offsetof' may be relaxed in a future version
       of the C++ standard.
  
! '-Wsized-deallocation (C++ and Objective-C++ only)'
       Warn about a definition of an unsized deallocation function
            void operator delete (void *) noexcept;
            void operator delete[] (void *) noexcept;
--- 4656,4715 ----
                 S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
                 new (s->a)int [32]();
  
! ‘-Wcatch-value’
! ‘-Wcatch-value=N (C++ and Objective-C++ only)’
       Warn about catch handlers that do not catch via reference.  With
!      ‘-Wcatch-value=1’ (or ‘-Wcatch-value’ for short) warn about
       polymorphic class types that are caught by value.  With
!      ‘-Wcatch-value=2’ warn about all class types that are caught by
!      value.  With ‘-Wcatch-value=3’ warn about all types that are not
!      caught by reference.  ‘-Wcatch-value’ is enabled by ‘-Wall’.
  
! ‘-Wconditionally-supported (C++ and Objective-C++ only)’
       Warn for conditionally-supported (C++11 [intro.defs]) constructs.
  
! ‘-Wno-delete-incomplete (C++ and Objective-C++ only)’
       Do not warn when deleting a pointer to incomplete type, which may
       cause undefined behavior at runtime.  This warning is enabled by
       default.
  
! ‘-Wextra-semi (C++, Objective-C++ only)’
       Warn about redundant semicolons after in-class function
       definitions.
  
! ‘-Wno-global-module (C++ and Objective-C++ only)’
       Disable the diagnostic for when the global module fragment of a
       module unit does not consist only of preprocessor directives.
  
! ‘-Wno-inaccessible-base (C++, Objective-C++ only)’
       This option controls warnings when a base class is inaccessible in
       a class derived from it due to ambiguity.  The warning is enabled
       by default.  Note that the warning for ambiguous virtual bases is
!      enabled by the ‘-Wextra’ option.
            struct A { int a; };
  
            struct B : A { };
  
            struct C : B, A { };
  
! ‘-Wno-inherited-variadic-ctor’
       Suppress warnings about use of C++11 inheriting constructors when
       the base class inherited from has a C variadic constructor; the
       warning is on by default because the ellipsis is not inherited.
  
! ‘-Wno-invalid-offsetof (C++ and Objective-C++ only)’
!      Suppress warnings from applying the ‘offsetof’ macro to a non-POD
!      type.  According to the 2014 ISO C++ standard, applying ‘offsetof’
       to a non-standard-layout type is undefined.  In existing C++
!      implementations, however, ‘offsetof’ typically gives meaningful
       results.  This flag is for users who are aware that they are
       writing nonportable code and who have deliberately chosen to ignore
       the warning about it.
  
!      The restrictions on ‘offsetof’ may be relaxed in a future version
       of the C++ standard.
  
! ‘-Wsized-deallocation (C++ and Objective-C++ only)’
       Warn about a definition of an unsized deallocation function
            void operator delete (void *) noexcept;
            void operator delete[] (void *) noexcept;
*************** Dialect Options.
*** 4713,4747 ****
       function
            void operator delete (void *, std::size_t) noexcept;
            void operator delete[] (void *, std::size_t) noexcept;
!      or vice versa.  Enabled by '-Wextra' along with
!      '-fsized-deallocation'.
  
! '-Wsuggest-final-types'
       Warn about types with virtual methods where code quality would be
!      improved if the type were declared with the C++11 'final'
       specifier, or, if possible, declared in an anonymous namespace.
       This allows GCC to more aggressively devirtualize the polymorphic
       calls.  This warning is more effective with link-time optimization,
       where the information about the class hierarchy graph is more
       complete.
  
! '-Wsuggest-final-methods'
       Warn about virtual methods where code quality would be improved if
!      the method were declared with the C++11 'final' specifier, or, if
       possible, its type were declared in an anonymous namespace or with
!      the 'final' specifier.  This warning is more effective with
       link-time optimization, where the information about the class
       hierarchy graph is more complete.  It is recommended to first
!      consider suggestions of '-Wsuggest-final-types' and then rebuild
       with new annotations.
  
! '-Wsuggest-override'
       Warn about overriding virtual functions that are not marked with
!      the 'override' keyword.
  
! '-Wno-conversion-null (C++ and Objective-C++ only)'
!      Do not warn for conversions between 'NULL' and non-pointer types.
!      '-Wconversion-null' is enabled by default.
  
  
  File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
--- 4717,4751 ----
       function
            void operator delete (void *, std::size_t) noexcept;
            void operator delete[] (void *, std::size_t) noexcept;
!      or vice versa.  Enabled by ‘-Wextra’ along with
!      ‘-fsized-deallocation’.
  
! ‘-Wsuggest-final-types’
       Warn about types with virtual methods where code quality would be
!      improved if the type were declared with the C++11 ‘final’
       specifier, or, if possible, declared in an anonymous namespace.
       This allows GCC to more aggressively devirtualize the polymorphic
       calls.  This warning is more effective with link-time optimization,
       where the information about the class hierarchy graph is more
       complete.
  
! ‘-Wsuggest-final-methods’
       Warn about virtual methods where code quality would be improved if
!      the method were declared with the C++11 ‘final’ specifier, or, if
       possible, its type were declared in an anonymous namespace or with
!      the ‘final’ specifier.  This warning is more effective with
       link-time optimization, where the information about the class
       hierarchy graph is more complete.  It is recommended to first
!      consider suggestions of ‘-Wsuggest-final-types’ and then rebuild
       with new annotations.
  
! ‘-Wsuggest-override’
       Warn about overriding virtual functions that are not marked with
!      the ‘override’ keyword.
  
! ‘-Wno-conversion-null (C++ and Objective-C++ only)’
!      Do not warn for conversions between ‘NULL’ and non-pointer types.
!      ‘-Wconversion-null’ is enabled by default.
  
  
  File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
*************** Standards, for references.)
*** 4756,4806 ****
   This section describes the command-line options that are only
  meaningful for Objective-C and Objective-C++ programs.  You can also use
  most of the language-independent GNU compiler options.  For example, you
! might compile a file 'some_class.m' like this:
  
       gcc -g -fgnu-runtime -O -c some_class.m
  
! In this example, '-fgnu-runtime' is an option meant only for Objective-C
  and Objective-C++ programs; you can use the other options with any
  language supported by GCC.
  
   Note that since Objective-C is an extension of the C language,
  Objective-C compilations may also use options specific to the C
! front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
! compilations may use C++-specific options (e.g., '-Wabi').
  
   Here is a list of options that are _only_ for compiling Objective-C and
  Objective-C++ programs:
  
! '-fconstant-string-class=CLASS-NAME'
       Use CLASS-NAME as the name of the class to instantiate for each
!      literal string specified with the syntax '@"..."'.  The default
!      class name is 'NXConstantString' if the GNU runtime is being used,
!      and 'NSConstantString' if the NeXT runtime is being used (see
!      below).  On Darwin / macOS platforms, the '-fconstant-cfstrings'
!      option, if also present, overrides the '-fconstant-string-class'
!      setting and cause '@"..."' literals to be laid out as constant
!      CoreFoundation strings.  Note that '-fconstant-cfstrings' is an
!      alias for the target-specific '-mconstant-cfstrings' equivalent.
  
! '-fgnu-runtime'
       Generate object code compatible with the standard GNU Objective-C
       runtime.  This is the default for most types of systems.
  
! '-fnext-runtime'
       Generate output compatible with the NeXT runtime.  This is the
       default for NeXT-based systems, including Darwin / macOS. The macro
!      '__NEXT_RUNTIME__' is predefined if (and only if) this option is
       used.
  
! '-fno-nil-receivers'
!      Assume that all Objective-C message dispatches ('[receiver
!      message:arg]') in this translation unit ensure that the receiver is
!      not 'nil'.  This allows for more efficient entry points in the
       runtime to be used.  This option is only available in conjunction
       with the NeXT runtime and ABI version 0 or 1.
  
! '-fobjc-abi-version=N'
       Use version N of the Objective-C ABI for the selected runtime.
       This option is currently supported only for the NeXT runtime.  In
       that case, Version 0 is the traditional (32-bit) ABI without
--- 4760,4810 ----
   This section describes the command-line options that are only
  meaningful for Objective-C and Objective-C++ programs.  You can also use
  most of the language-independent GNU compiler options.  For example, you
! might compile a file ‘some_class.m’ like this:
  
       gcc -g -fgnu-runtime -O -c some_class.m
  
! In this example, ‘-fgnu-runtime’ is an option meant only for Objective-C
  and Objective-C++ programs; you can use the other options with any
  language supported by GCC.
  
   Note that since Objective-C is an extension of the C language,
  Objective-C compilations may also use options specific to the C
! front-end (e.g., ‘-Wtraditional’).  Similarly, Objective-C++
! compilations may use C++-specific options (e.g., ‘-Wabi’).
  
   Here is a list of options that are _only_ for compiling Objective-C and
  Objective-C++ programs:
  
! ‘-fconstant-string-class=CLASS-NAME’
       Use CLASS-NAME as the name of the class to instantiate for each
!      literal string specified with the syntax ‘@"..."’.  The default
!      class name is ‘NXConstantString’ if the GNU runtime is being used,
!      and ‘NSConstantString’ if the NeXT runtime is being used (see
!      below).  On Darwin / macOS platforms, the ‘-fconstant-cfstrings’
!      option, if also present, overrides the ‘-fconstant-string-class’
!      setting and cause ‘@"..."’ literals to be laid out as constant
!      CoreFoundation strings.  Note that ‘-fconstant-cfstrings’ is an
!      alias for the target-specific ‘-mconstant-cfstrings’ equivalent.
  
! ‘-fgnu-runtime’
       Generate object code compatible with the standard GNU Objective-C
       runtime.  This is the default for most types of systems.
  
! ‘-fnext-runtime’
       Generate output compatible with the NeXT runtime.  This is the
       default for NeXT-based systems, including Darwin / macOS. The macro
!      ‘__NEXT_RUNTIME__’ is predefined if (and only if) this option is
       used.
  
! ‘-fno-nil-receivers’
!      Assume that all Objective-C message dispatches (‘[receiver
!      message:arg]’) in this translation unit ensure that the receiver is
!      not ‘nil’.  This allows for more efficient entry points in the
       runtime to be used.  This option is only available in conjunction
       with the NeXT runtime and ABI version 0 or 1.
  
! ‘-fobjc-abi-version=N’
       Use version N of the Objective-C ABI for the selected runtime.
       This option is currently supported only for the NeXT runtime.  In
       that case, Version 0 is the traditional (32-bit) ABI without
*************** Objective-C++ programs:
*** 4811,4869 ****
       Version 0 on 32-bit target machines, and Version 2 on 64-bit target
       machines.
  
! '-fobjc-call-cxx-cdtors'
       For each Objective-C class, check if any of its instance variables
       is a C++ object with a non-trivial default constructor.  If so,
!      synthesize a special '- (id) .cxx_construct' instance method which
       runs non-trivial default constructors on any such instance
!      variables, in order, and then return 'self'.  Similarly, check if
       any instance variable is a C++ object with a non-trivial
!      destructor, and if so, synthesize a special '- (void)
!      .cxx_destruct' method which runs all such default destructors, in
       reverse order.
  
!      The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
       thusly generated only operate on instance variables declared in the
       current Objective-C class, and not those inherited from
       superclasses.  It is the responsibility of the Objective-C runtime
       to invoke all such methods in an object's inheritance hierarchy.
!      The '- (id) .cxx_construct' methods are invoked by the runtime
!      immediately after a new object instance is allocated; the '- (void)
!      .cxx_destruct' methods are invoked immediately before the runtime
       deallocates an object instance.
  
       As of this writing, only the NeXT runtime on Mac OS X 10.4 and
!      later has support for invoking the '- (id) .cxx_construct' and '-
!      (void) .cxx_destruct' methods.
  
! '-fobjc-direct-dispatch'
       Allow fast jumps to the message dispatcher.  On Darwin this is
       accomplished via the comm page.
  
! '-fobjc-exceptions'
       Enable syntactic support for structured exception handling in
       Objective-C, similar to what is offered by C++.  This option is
!      required to use the Objective-C keywords '@try', '@throw',
!      '@catch', '@finally' and '@synchronized'.  This option is available
       with both the GNU runtime and the NeXT runtime (but not available
       in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
  
! '-fobjc-gc'
       Enable garbage collection (GC) in Objective-C and Objective-C++
       programs.  This option is only available with the NeXT runtime; the
       GNU runtime has a different garbage collection implementation that
       does not require special compiler flags.
  
! '-fobjc-nilcheck'
       For the NeXT runtime with version 2 of the ABI, check for a nil
       receiver in method invocations before doing the actual method call.
!      This is the default and can be disabled using '-fno-objc-nilcheck'.
       Class methods and super calls are never checked for nil in this way
       no matter what this flag is set to.  Currently this flag does
       nothing when the GNU runtime, or an older version of the NeXT
       runtime ABI, is used.
  
! '-fobjc-std=objc1'
       Conform to the language syntax of Objective-C 1.0, the language
       recognized by GCC 4.0.  This only affects the Objective-C additions
       to the C/C++ language; it does not affect conformance to C/C++
--- 4815,4873 ----
       Version 0 on 32-bit target machines, and Version 2 on 64-bit target
       machines.
  
! ‘-fobjc-call-cxx-cdtors’
       For each Objective-C class, check if any of its instance variables
       is a C++ object with a non-trivial default constructor.  If so,
!      synthesize a special ‘- (id) .cxx_construct’ instance method which
       runs non-trivial default constructors on any such instance
!      variables, in order, and then return ‘self’.  Similarly, check if
       any instance variable is a C++ object with a non-trivial
!      destructor, and if so, synthesize a special ‘- (void)
!      .cxx_destruct’ method which runs all such default destructors, in
       reverse order.
  
!      The ‘- (id) .cxx_construct’ and ‘- (void) .cxx_destruct’ methods
       thusly generated only operate on instance variables declared in the
       current Objective-C class, and not those inherited from
       superclasses.  It is the responsibility of the Objective-C runtime
       to invoke all such methods in an object's inheritance hierarchy.
!      The ‘- (id) .cxx_construct’ methods are invoked by the runtime
!      immediately after a new object instance is allocated; the ‘- (void)
!      .cxx_destruct’ methods are invoked immediately before the runtime
       deallocates an object instance.
  
       As of this writing, only the NeXT runtime on Mac OS X 10.4 and
!      later has support for invoking the ‘- (id) .cxx_construct’ and ‘-
!      (void) .cxx_destruct’ methods.
  
! ‘-fobjc-direct-dispatch’
       Allow fast jumps to the message dispatcher.  On Darwin this is
       accomplished via the comm page.
  
! ‘-fobjc-exceptions’
       Enable syntactic support for structured exception handling in
       Objective-C, similar to what is offered by C++.  This option is
!      required to use the Objective-C keywords ‘@try’, ‘@throw’,
!      ‘@catch’, ‘@finally’ and ‘@synchronized’.  This option is available
       with both the GNU runtime and the NeXT runtime (but not available
       in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
  
! ‘-fobjc-gc’
       Enable garbage collection (GC) in Objective-C and Objective-C++
       programs.  This option is only available with the NeXT runtime; the
       GNU runtime has a different garbage collection implementation that
       does not require special compiler flags.
  
! ‘-fobjc-nilcheck’
       For the NeXT runtime with version 2 of the ABI, check for a nil
       receiver in method invocations before doing the actual method call.
!      This is the default and can be disabled using ‘-fno-objc-nilcheck’.
       Class methods and super calls are never checked for nil in this way
       no matter what this flag is set to.  Currently this flag does
       nothing when the GNU runtime, or an older version of the NeXT
       runtime ABI, is used.
  
! ‘-fobjc-std=objc1’
       Conform to the language syntax of Objective-C 1.0, the language
       recognized by GCC 4.0.  This only affects the Objective-C additions
       to the C/C++ language; it does not affect conformance to C/C++
*************** Objective-C++ programs:
*** 4874,4882 ****
       make sure that your Objective-C code can be compiled with older
       versions of GCC.
  
! '-freplace-objc-classes'
!      Emit a special marker instructing 'ld(1)' not to statically link in
!      the resulting object file, and allow 'dyld(1)' to load it in at run
       time instead.  This is used in conjunction with the
       Fix-and-Continue debugging mode, where the object file in question
       may be recompiled and dynamically reloaded in the course of program
--- 4878,4886 ----
       make sure that your Objective-C code can be compiled with older
       versions of GCC.
  
! ‘-freplace-objc-classes’
!      Emit a special marker instructing ‘ld(1)’ not to statically link in
!      the resulting object file, and allow ‘dyld(1)’ to load it in at run
       time instead.  This is used in conjunction with the
       Fix-and-Continue debugging mode, where the object file in question
       may be recompiled and dynamically reloaded in the course of program
*************** Objective-C++ programs:
*** 4884,4977 ****
       Currently, Fix-and-Continue functionality is only available in
       conjunction with the NeXT runtime on Mac OS X 10.3 and later.
  
! '-fzero-link'
       When compiling for the NeXT runtime, the compiler ordinarily
!      replaces calls to 'objc_getClass("...")' (when the name of the
       class is known at compile time) with static class references that
       get initialized at load time, which improves run-time performance.
!      Specifying the '-fzero-link' flag suppresses this behavior and
!      causes calls to 'objc_getClass("...")' to be retained.  This is
       useful in Zero-Link debugging mode, since it allows for individual
       class implementations to be modified during program execution.  The
       GNU runtime currently always retains calls to
!      'objc_get_class("...")' regardless of command-line options.
  
! '-fno-local-ivars'
       By default instance variables in Objective-C can be accessed as if
       they were local variables from within the methods of the class
       they're declared in.  This can lead to shadowing between instance
       variables and other variables declared either locally inside a
       class method or globally with the same name.  Specifying the
!      '-fno-local-ivars' flag disables this behavior thus avoiding
       variable shadowing issues.
  
! '-fivar-visibility=[public|protected|private|package]'
       Set the default instance variable visibility to the specified
       option so that instance variables declared outside the scope of any
       access modifier directives default to the specified visibility.
  
! '-gen-decls'
       Dump interface declarations for all classes seen in the source file
!      to a file named 'SOURCENAME.decl'.
  
! '-Wassign-intercept (Objective-C and Objective-C++ only)'
       Warn whenever an Objective-C assignment is being intercepted by the
       garbage collector.
  
! '-Wno-property-assign-default (Objective-C and Objective-C++ only)'
       Do not warn if a property for an Objective-C object has no assign
       semantics specified.
  
! '-Wno-protocol (Objective-C and Objective-C++ only)'
       If a class is declared to implement a protocol, a warning is issued
       for every method in the protocol that is not implemented by the
       class.  The default behavior is to issue a warning for every method
       not explicitly implemented in the class, even if a method
       implementation is inherited from the superclass.  If you use the
!      '-Wno-protocol' option, then methods inherited from the superclass
       are considered to be implemented, and no warning is issued for
       them.
  
! '-Wobjc-root-class (Objective-C and Objective-C++ only)'
       Warn if a class interface lacks a superclass.  Most classes will
!      inherit from 'NSObject' (or 'Object') for example.  When declaring
       classes intended to be root classes, the warning can be suppressed
       by marking their interfaces with
!      '__attribute__((objc_root_class))'.
  
! '-Wselector (Objective-C and Objective-C++ only)'
       Warn if multiple methods of different types for the same selector
       are found during compilation.  The check is performed on the list
       of methods in the final stage of compilation.  Additionally, a
       check is performed for each selector appearing in a
!      '@selector(...)' expression, and a corresponding method for that
       selector has been found during compilation.  Because these checks
       scan the method table only at the end of compilation, these
       warnings are not produced if the final stage of compilation is not
       reached, for example because an error is found during compilation,
!      or because the '-fsyntax-only' option is being used.
  
! '-Wstrict-selector-match (Objective-C and Objective-C++ only)'
       Warn if multiple methods with differing argument and/or return
       types are found for a given selector when attempting to send a
!      message using this selector to a receiver of type 'id' or 'Class'.
       When this flag is off (which is the default behavior), the compiler
       omits such warnings if any differences found are confined to types
       that share the same size and alignment.
  
! '-Wundeclared-selector (Objective-C and Objective-C++ only)'
!      Warn if a '@selector(...)' expression referring to an undeclared
       selector is found.  A selector is considered undeclared if no
!      method with that name has been declared before the '@selector(...)'
!      expression, either explicitly in an '@interface' or '@protocol'
!      declaration, or implicitly in an '@implementation' section.  This
!      option always performs its checks as soon as a '@selector(...)'
!      expression is found, while '-Wselector' only performs its checks in
       the final stage of compilation.  This also enforces the coding
       style convention that methods and selectors must be declared before
       being used.
  
! '-print-objc-runtime-info'
       Generate C header describing the largest structure that is passed
       by value, if any.
  
--- 4888,4981 ----
       Currently, Fix-and-Continue functionality is only available in
       conjunction with the NeXT runtime on Mac OS X 10.3 and later.
  
! ‘-fzero-link’
       When compiling for the NeXT runtime, the compiler ordinarily
!      replaces calls to ‘objc_getClass("...")’ (when the name of the
       class is known at compile time) with static class references that
       get initialized at load time, which improves run-time performance.
!      Specifying the ‘-fzero-link’ flag suppresses this behavior and
!      causes calls to ‘objc_getClass("...")’ to be retained.  This is
       useful in Zero-Link debugging mode, since it allows for individual
       class implementations to be modified during program execution.  The
       GNU runtime currently always retains calls to
!      ‘objc_get_class("...")’ regardless of command-line options.
  
! ‘-fno-local-ivars’
       By default instance variables in Objective-C can be accessed as if
       they were local variables from within the methods of the class
       they're declared in.  This can lead to shadowing between instance
       variables and other variables declared either locally inside a
       class method or globally with the same name.  Specifying the
!      ‘-fno-local-ivars’ flag disables this behavior thus avoiding
       variable shadowing issues.
  
! ‘-fivar-visibility=[public|protected|private|package]’
       Set the default instance variable visibility to the specified
       option so that instance variables declared outside the scope of any
       access modifier directives default to the specified visibility.
  
! ‘-gen-decls’
       Dump interface declarations for all classes seen in the source file
!      to a file named ‘SOURCENAME.decl’.
  
! ‘-Wassign-intercept (Objective-C and Objective-C++ only)’
       Warn whenever an Objective-C assignment is being intercepted by the
       garbage collector.
  
! ‘-Wno-property-assign-default (Objective-C and Objective-C++ only)’
       Do not warn if a property for an Objective-C object has no assign
       semantics specified.
  
! ‘-Wno-protocol (Objective-C and Objective-C++ only)’
       If a class is declared to implement a protocol, a warning is issued
       for every method in the protocol that is not implemented by the
       class.  The default behavior is to issue a warning for every method
       not explicitly implemented in the class, even if a method
       implementation is inherited from the superclass.  If you use the
!      ‘-Wno-protocol’ option, then methods inherited from the superclass
       are considered to be implemented, and no warning is issued for
       them.
  
! ‘-Wobjc-root-class (Objective-C and Objective-C++ only)’
       Warn if a class interface lacks a superclass.  Most classes will
!      inherit from ‘NSObject’ (or ‘Object’) for example.  When declaring
       classes intended to be root classes, the warning can be suppressed
       by marking their interfaces with
!      ‘__attribute__((objc_root_class))’.
  
! ‘-Wselector (Objective-C and Objective-C++ only)’
       Warn if multiple methods of different types for the same selector
       are found during compilation.  The check is performed on the list
       of methods in the final stage of compilation.  Additionally, a
       check is performed for each selector appearing in a
!      ‘@selector(...)’ expression, and a corresponding method for that
       selector has been found during compilation.  Because these checks
       scan the method table only at the end of compilation, these
       warnings are not produced if the final stage of compilation is not
       reached, for example because an error is found during compilation,
!      or because the ‘-fsyntax-only’ option is being used.
  
! ‘-Wstrict-selector-match (Objective-C and Objective-C++ only)’
       Warn if multiple methods with differing argument and/or return
       types are found for a given selector when attempting to send a
!      message using this selector to a receiver of type ‘id’ or ‘Class’.
       When this flag is off (which is the default behavior), the compiler
       omits such warnings if any differences found are confined to types
       that share the same size and alignment.
  
! ‘-Wundeclared-selector (Objective-C and Objective-C++ only)’
!      Warn if a ‘@selector(...)’ expression referring to an undeclared
       selector is found.  A selector is considered undeclared if no
!      method with that name has been declared before the ‘@selector(...)’
!      expression, either explicitly in an ‘@interface’ or ‘@protocol’
!      declaration, or implicitly in an ‘@implementation’ section.  This
!      option always performs its checks as soon as a ‘@selector(...)’
!      expression is found, while ‘-Wselector’ only performs its checks in
       the final stage of compilation.  This also enforces the coding
       style convention that methods and selectors must be declared before
       being used.
  
! ‘-print-objc-runtime-info’
       Generate C header describing the largest structure that is passed
       by value, if any.
  
*************** diagnostic messages, e.g. how many chara
*** 4988,5009 ****
  location information should be reported.  Note that some language front
  ends may not honor these options.
  
! '-fmessage-length=N'
       Try to format error messages so that they fit on lines of about N
       characters.  If N is zero, then no line-wrapping is done; each
       error message appears on a single line.  This is the default for
       all front ends.
  
!      Note - this option also affects the display of the '#error' and
!      '#warning' pre-processor directives, and the 'deprecated'
       function/type/variable attribute.  It does not however affect the
!      'pragma GCC warning' and 'pragma GCC error' pragmas.
  
! '-fdiagnostics-plain-output'
       This option requests that diagnostic output look as plain as
!      possible, which may be useful when running 'dejagnu' or other
       utilities that need to parse diagnostics output and prefer that it
!      remain more stable over time.  '-fdiagnostics-plain-output' is
       currently equivalent to the following options:
            -fno-diagnostics-show-caret
            -fno-diagnostics-show-line-numbers
--- 4992,5013 ----
  location information should be reported.  Note that some language front
  ends may not honor these options.
  
! ‘-fmessage-length=N’
       Try to format error messages so that they fit on lines of about N
       characters.  If N is zero, then no line-wrapping is done; each
       error message appears on a single line.  This is the default for
       all front ends.
  
!      Note - this option also affects the display of the ‘#error’ and
!      ‘#warning’ pre-processor directives, and the ‘deprecated’
       function/type/variable attribute.  It does not however affect the
!      ‘pragma GCC warning’ and ‘pragma GCC error’ pragmas.
  
! ‘-fdiagnostics-plain-output’
       This option requests that diagnostic output look as plain as
!      possible, which may be useful when running ‘dejagnu’ or other
       utilities that need to parse diagnostics output and prefer that it
!      remain more stable over time.  ‘-fdiagnostics-plain-output’ is
       currently equivalent to the following options:
            -fno-diagnostics-show-caret
            -fno-diagnostics-show-line-numbers
*************** ends may not honor these options.
*** 5015,5021 ****
       diagnostics, the corresponding option to disable the new behavior
       will be added to this list.
  
! '-fdiagnostics-show-location=once'
       Only meaningful in line-wrapping mode.  Instructs the diagnostic
       messages reporter to emit source location information _once_; that
       is, in case the message is too long to fit on a single physical
--- 5019,5025 ----
       diagnostics, the corresponding option to disable the new behavior
       will be added to this list.
  
! ‘-fdiagnostics-show-location=once’
       Only meaningful in line-wrapping mode.  Instructs the diagnostic
       messages reporter to emit source location information _once_; that
       is, in case the message is too long to fit on a single physical
*************** ends may not honor these options.
*** 5023,5145 ****
       (as prefix) again, over and over, in subsequent continuation lines.
       This is the default behavior.
  
! '-fdiagnostics-show-location=every-line'
       Only meaningful in line-wrapping mode.  Instructs the diagnostic
       messages reporter to emit the same source location information (as
       prefix) for physical lines that result from the process of breaking
       a message which is too long to fit on a single line.
  
! '-fdiagnostics-color[=WHEN]'
! '-fno-diagnostics-color'
!      Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
       The default depends on how the compiler has been configured, it can
!      be any of the above WHEN options or also 'never' if 'GCC_COLORS'
!      environment variable isn't present in the environment, and 'auto'
!      otherwise.  'auto' makes GCC use color only when the standard error
       is a terminal, and when not executing in an emacs shell.  The forms
!      '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for
!      '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
       respectively.
  
!      The colors are defined by the environment variable 'GCC_COLORS'.
       Its value is a colon-separated list of capabilities and Select
       Graphic Rendition (SGR) substrings.  SGR commands are interpreted
       by the terminal or terminal emulator.  (See the section in the
       documentation of your text terminal for permitted values and their
       meanings as character attributes.)  These substring values are
       integers in decimal representation and can be concatenated with
!      semicolons.  Common values to concatenate include '1' for bold, '4'
!      for underline, '5' for blink, '7' for inverse, '39' for default
!      foreground color, '30' to '37' for foreground colors, '90' to '97'
!      for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
!      88-color and 256-color modes foreground colors, '49' for default
!      background color, '40' to '47' for background colors, '100' to
!      '107' for 16-color mode background colors, and '48;5;0' to
!      '48;5;255' for 88-color and 256-color modes background colors.
  
!      The default 'GCC_COLORS' is
            error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
            quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
            diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
            type-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32
!      where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
!      cyan, '32' is green, '34' is blue, '01' is bold, and '31' is red.
!      Setting 'GCC_COLORS' to the empty string disables colors.
       Supported capabilities are as follows.
  
!      'error='
            SGR substring for error: markers.
  
!      'warning='
            SGR substring for warning: markers.
  
!      'note='
            SGR substring for note: markers.
  
!      'path='
            SGR substring for colorizing paths of control-flow events as
!           printed via '-fdiagnostics-path-format=', such as the
            identifiers of individual events and lines indicating
            interprocedural calls and returns.
  
!      'range1='
            SGR substring for first additional range.
  
!      'range2='
            SGR substring for second additional range.
  
!      'locus='
!           SGR substring for location information, 'file:line' or
!           'file:line:column' etc.
  
!      'quote='
            SGR substring for information printed within quotes.
  
!      'fnname='
            SGR substring for names of C++ functions.
  
!      'targs='
            SGR substring for C++ function template parameter bindings.
  
!      'fixit-insert='
            SGR substring for fix-it hints suggesting text to be inserted
            or replaced.
  
!      'fixit-delete='
            SGR substring for fix-it hints suggesting text to be deleted.
  
!      'diff-filename='
            SGR substring for filename headers within generated patches.
  
!      'diff-hunk='
            SGR substring for the starts of hunks within generated
            patches.
  
!      'diff-delete='
            SGR substring for deleted lines within generated patches.
  
!      'diff-insert='
            SGR substring for inserted lines within generated patches.
  
!      'type-diff='
            SGR substring for highlighting mismatching types within
            template arguments in the C++ frontend.
  
!      'valid='
            SGR substring for highlighting valid elements within text art
            diagrams.
  
!      'invalid='
            SGR substring for highlighting invalid elements within text
            art diagrams.
  
! '-fdiagnostics-urls[=WHEN]'
       Use escape sequences to embed URLs in diagnostics.  For example,
!      when '-fdiagnostics-show-option' emits text showing the
       command-line option controlling a diagnostic, embed a URL for
       documentation of that option.
  
!      WHEN is 'never', 'always', or 'auto'.  'auto' makes GCC use URL
       escape sequences only when the standard error is a terminal, and
       when not executing in an emacs shell or any graphical terminal
       which is known to be incompatible with this feature, see below.
--- 5027,5149 ----
       (as prefix) again, over and over, in subsequent continuation lines.
       This is the default behavior.
  
! ‘-fdiagnostics-show-location=every-line’
       Only meaningful in line-wrapping mode.  Instructs the diagnostic
       messages reporter to emit the same source location information (as
       prefix) for physical lines that result from the process of breaking
       a message which is too long to fit on a single line.
  
! ‘-fdiagnostics-color[=WHEN]’
! ‘-fno-diagnostics-color’
!      Use color in diagnostics.  WHEN is ‘never’, ‘always’, or ‘auto’.
       The default depends on how the compiler has been configured, it can
!      be any of the above WHEN options or also ‘never’ if ‘GCC_COLORS’
!      environment variable isn't present in the environment, and ‘auto’
!      otherwise.  ‘auto’ makes GCC use color only when the standard error
       is a terminal, and when not executing in an emacs shell.  The forms
!      ‘-fdiagnostics-color’ and ‘-fno-diagnostics-color’ are aliases for
!      ‘-fdiagnostics-color=always’ and ‘-fdiagnostics-color=never’,
       respectively.
  
!      The colors are defined by the environment variable ‘GCC_COLORS’.
       Its value is a colon-separated list of capabilities and Select
       Graphic Rendition (SGR) substrings.  SGR commands are interpreted
       by the terminal or terminal emulator.  (See the section in the
       documentation of your text terminal for permitted values and their
       meanings as character attributes.)  These substring values are
       integers in decimal representation and can be concatenated with
!      semicolons.  Common values to concatenate include ‘1’ for bold, ‘4’
!      for underline, ‘5’ for blink, ‘7’ for inverse, ‘39’ for default
!      foreground color, ‘30’ to ‘37’ for foreground colors, ‘90’ to ‘97’
!      for 16-color mode foreground colors, ‘38;5;0’ to ‘38;5;255’ for
!      88-color and 256-color modes foreground colors, ‘49’ for default
!      background color, ‘40’ to ‘47’ for background colors, ‘100’ to
!      ‘107’ for 16-color mode background colors, and ‘48;5;0’ to
!      ‘48;5;255’ for 88-color and 256-color modes background colors.
  
!      The default ‘GCC_COLORS’ is
            error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
            quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
            diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
            type-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32
!      where ‘01;31’ is bold red, ‘01;35’ is bold magenta, ‘01;36’ is bold
!      cyan, ‘32’ is green, ‘34’ is blue, ‘01’ is bold, and ‘31’ is red.
!      Setting ‘GCC_COLORS’ to the empty string disables colors.
       Supported capabilities are as follows.
  
!      ‘error=’
            SGR substring for error: markers.
  
!      ‘warning=’
            SGR substring for warning: markers.
  
!      ‘note=’
            SGR substring for note: markers.
  
!      ‘path=’
            SGR substring for colorizing paths of control-flow events as
!           printed via ‘-fdiagnostics-path-format=’, such as the
            identifiers of individual events and lines indicating
            interprocedural calls and returns.
  
!      ‘range1=’
            SGR substring for first additional range.
  
!      ‘range2=’
            SGR substring for second additional range.
  
!      ‘locus=’
!           SGR substring for location information, ‘file:line’ or
!           ‘file:line:column’ etc.
  
!      ‘quote=’
            SGR substring for information printed within quotes.
  
!      ‘fnname=’
            SGR substring for names of C++ functions.
  
!      ‘targs=’
            SGR substring for C++ function template parameter bindings.
  
!      ‘fixit-insert=’
            SGR substring for fix-it hints suggesting text to be inserted
            or replaced.
  
!      ‘fixit-delete=’
            SGR substring for fix-it hints suggesting text to be deleted.
  
!      ‘diff-filename=’
            SGR substring for filename headers within generated patches.
  
!      ‘diff-hunk=’
            SGR substring for the starts of hunks within generated
            patches.
  
!      ‘diff-delete=’
            SGR substring for deleted lines within generated patches.
  
!      ‘diff-insert=’
            SGR substring for inserted lines within generated patches.
  
!      ‘type-diff=’
            SGR substring for highlighting mismatching types within
            template arguments in the C++ frontend.
  
!      ‘valid=’
            SGR substring for highlighting valid elements within text art
            diagrams.
  
!      ‘invalid=’
            SGR substring for highlighting invalid elements within text
            art diagrams.
  
! ‘-fdiagnostics-urls[=WHEN]’
       Use escape sequences to embed URLs in diagnostics.  For example,
!      when ‘-fdiagnostics-show-option’ emits text showing the
       command-line option controlling a diagnostic, embed a URL for
       documentation of that option.
  
!      WHEN is ‘never’, ‘always’, or ‘auto’.  ‘auto’ makes GCC use URL
       escape sequences only when the standard error is a terminal, and
       when not executing in an emacs shell or any graphical terminal
       which is known to be incompatible with this feature, see below.
*************** ends may not honor these options.
*** 5148,5166 ****
       can be any of the above WHEN options.
  
       GCC can also be configured (via the
!      '--with-diagnostics-urls=auto-if-env' configure-time option) so
       that the default is affected by environment variables.  Under such
!      a configuration, GCC defaults to using 'auto' if either 'GCC_URLS'
!      or 'TERM_URLS' environment variables are present and non-empty in
!      the environment of the compiler, or 'never' if neither are.
  
!      However, even with '-fdiagnostics-urls=always' the behavior is
!      dependent on those environment variables: If 'GCC_URLS' is set to
!      empty or 'no', do not embed URLs in diagnostics.  If set to 'st',
!      URLs use ST escape sequences.  If set to 'bel', the default, URLs
       use BEL escape sequences.  Any other non-empty value enables the
!      feature.  If 'GCC_URLS' is not set, use 'TERM_URLS' as a fallback.
!      Note: ST is an ANSI escape sequence, string terminator 'ESC \', BEL
       is an ASCII character, CTRL-G that usually sounds like a beep.
  
       At this time GCC tries to detect also a few terminals that are
--- 5152,5170 ----
       can be any of the above WHEN options.
  
       GCC can also be configured (via the
!      ‘--with-diagnostics-urls=auto-if-env’ configure-time option) so
       that the default is affected by environment variables.  Under such
!      a configuration, GCC defaults to using ‘auto’ if either ‘GCC_URLS’
!      or ‘TERM_URLS’ environment variables are present and non-empty in
!      the environment of the compiler, or ‘never’ if neither are.
  
!      However, even with ‘-fdiagnostics-urls=always’ the behavior is
!      dependent on those environment variables: If ‘GCC_URLS’ is set to
!      empty or ‘no’, do not embed URLs in diagnostics.  If set to ‘st’,
!      URLs use ST escape sequences.  If set to ‘bel’, the default, URLs
       use BEL escape sequences.  Any other non-empty value enables the
!      feature.  If ‘GCC_URLS’ is not set, use ‘TERM_URLS’ as a fallback.
!      Note: ST is an ANSI escape sequence, string terminator ‘ESC \’, BEL
       is an ASCII character, CTRL-G that usually sounds like a beep.
  
       At this time GCC tries to detect also a few terminals that are
*************** ends may not honor these options.
*** 5169,5194 ****
       escapes are likely to misbehave, i.e.  print garbage on the screen.
       That list is currently xfce4-terminal, certain known to be buggy
       gnome-terminal versions, the linux console, and mingw.  This check
!      can be skipped with the '-fdiagnostics-urls=always'.
  
! '-fno-diagnostics-show-option'
       By default, each diagnostic emitted includes text indicating the
       command-line option that directly controls the diagnostic (if such
       an option is known to the diagnostic machinery).  Specifying the
!      '-fno-diagnostics-show-option' flag suppresses that behavior.
  
! '-fno-diagnostics-show-caret'
       By default, each diagnostic emitted includes the original source
!      line and a caret '^' indicating the column.  This option suppresses
       this information.  The source line is truncated to N characters, if
!      the '-fmessage-length=n' option is given.  When the output is done
       to the terminal, the width is limited to the width given by the
!      'COLUMNS' environment variable or, if not set, to the terminal
       width.
  
! '-fno-diagnostics-show-labels'
       By default, when printing source code (via
!      '-fdiagnostics-show-caret'), diagnostics can label ranges of source
       code with pertinent information, such as the types of expressions:
  
                printf ("foo %s bar", long_i + long_j);
--- 5173,5198 ----
       escapes are likely to misbehave, i.e.  print garbage on the screen.
       That list is currently xfce4-terminal, certain known to be buggy
       gnome-terminal versions, the linux console, and mingw.  This check
!      can be skipped with the ‘-fdiagnostics-urls=always’.
  
! ‘-fno-diagnostics-show-option’
       By default, each diagnostic emitted includes text indicating the
       command-line option that directly controls the diagnostic (if such
       an option is known to the diagnostic machinery).  Specifying the
!      ‘-fno-diagnostics-show-option’ flag suppresses that behavior.
  
! ‘-fno-diagnostics-show-caret’
       By default, each diagnostic emitted includes the original source
!      line and a caret ‘^’ indicating the column.  This option suppresses
       this information.  The source line is truncated to N characters, if
!      the ‘-fmessage-length=n’ option is given.  When the output is done
       to the terminal, the width is limited to the width given by the
!      ‘COLUMNS’ environment variable or, if not set, to the terminal
       width.
  
! ‘-fno-diagnostics-show-labels’
       By default, when printing source code (via
!      ‘-fdiagnostics-show-caret’), diagnostics can label ranges of source
       code with pertinent information, such as the types of expressions:
  
                printf ("foo %s bar", long_i + long_j);
*************** ends may not honor these options.
*** 5199,5214 ****
       This option suppresses the printing of these labels (in the example
       above, the vertical bars and the "char *" and "long int" text).
  
! '-fno-diagnostics-show-cwe'
       Diagnostic messages can optionally have an associated CWE
       (https://cwe.mitre.org/index.html) identifier.  GCC itself only
!      provides such metadata for some of the '-fanalyzer' diagnostics.
       GCC plugins may also provide diagnostics with such metadata.  By
       default, if this information is present, it will be printed with
       the diagnostic.  This option suppresses the printing of this
       metadata.
  
! '-fno-diagnostics-show-rules'
       Diagnostic messages can optionally have rules associated with them,
       such as from a coding standard, or a specification.  GCC itself
       does not do this for any of its diagnostics, but plugins may do so.
--- 5203,5218 ----
       This option suppresses the printing of these labels (in the example
       above, the vertical bars and the "char *" and "long int" text).
  
! ‘-fno-diagnostics-show-cwe’
       Diagnostic messages can optionally have an associated CWE
       (https://cwe.mitre.org/index.html) identifier.  GCC itself only
!      provides such metadata for some of the ‘-fanalyzer’ diagnostics.
       GCC plugins may also provide diagnostics with such metadata.  By
       default, if this information is present, it will be printed with
       the diagnostic.  This option suppresses the printing of this
       metadata.
  
! ‘-fno-diagnostics-show-rules’
       Diagnostic messages can optionally have rules associated with them,
       such as from a coding standard, or a specification.  GCC itself
       does not do this for any of its diagnostics, but plugins may do so.
*************** ends may not honor these options.
*** 5216,5231 ****
       the diagnostic.  This option suppresses the printing of this
       metadata.
  
! '-fno-diagnostics-show-line-numbers'
       By default, when printing source code (via
!      '-fdiagnostics-show-caret'), a left margin is printed, showing line
       numbers.  This option suppresses this left margin.
  
! '-fdiagnostics-minimum-margin-width=WIDTH'
       This option controls the minimum width of the left margin printed
!      by '-fdiagnostics-show-line-numbers'.  It defaults to 6.
  
! '-fdiagnostics-parseable-fixits'
       Emit fix-it hints in a machine-parseable format, suitable for
       consumption by IDEs.  For each fix-it, a line will be printed after
       the relevant diagnostic, starting with the string "fix-it:".  For
--- 5220,5235 ----
       the diagnostic.  This option suppresses the printing of this
       metadata.
  
! ‘-fno-diagnostics-show-line-numbers’
       By default, when printing source code (via
!      ‘-fdiagnostics-show-caret’), a left margin is printed, showing line
       numbers.  This option suppresses this left margin.
  
! ‘-fdiagnostics-minimum-margin-width=WIDTH’
       This option controls the minimum width of the left margin printed
!      by ‘-fdiagnostics-show-line-numbers’.  It defaults to 6.
  
! ‘-fdiagnostics-parseable-fixits’
       Emit fix-it hints in a machine-parseable format, suitable for
       consumption by IDEs.  For each fix-it, a line will be printed after
       the relevant diagnostic, starting with the string "fix-it:".  For
*************** ends may not honor these options.
*** 5252,5258 ****
       removed.  An empty range (e.g.  "45:3-45:3") indicates that the
       string is to be inserted at the given position.
  
! '-fdiagnostics-generate-patch'
       Print fix-it hints to stderr in unified diff format, after any
       diagnostics are printed.  For example:
  
--- 5256,5262 ----
       removed.  An empty range (e.g.  "45:3-45:3") indicates that the
       string is to be inserted at the given position.
  
! ‘-fdiagnostics-generate-patch’
       Print fix-it hints to stderr in unified diff format, after any
       diagnostics are printed.  For example:
  
*************** ends may not honor these options.
*** 5268,5276 ****
  
  
       The diff may or may not be colorized, following the same rules as
!      for diagnostics (see '-fdiagnostics-color').
  
! '-fdiagnostics-show-template-tree'
  
       In the C++ frontend, when printing diagnostics showing mismatching
       template types, such as:
--- 5272,5280 ----
  
  
       The diff may or may not be colorized, following the same rules as
!      for diagnostics (see ‘-fdiagnostics-color’).
  
! ‘-fdiagnostics-show-template-tree’
  
       In the C++ frontend, when printing diagnostics showing mismatching
       template types, such as:
*************** ends may not honor these options.
*** 5278,5284 ****
              could not convert 'std::map<int, std::vector<double> >()'
                from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
  
!      the '-fdiagnostics-show-template-tree' flag enables printing a
       tree-like structure showing the common and differing parts of the
       types, such as:
  
--- 5282,5288 ----
              could not convert 'std::map<int, std::vector<double> >()'
                from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
  
!      the ‘-fdiagnostics-show-template-tree’ flag enables printing a
       tree-like structure showing the common and differing parts of the
       types, such as:
  
*************** ends may not honor these options.
*** 5290,5296 ****
       The parts that differ are highlighted with color ("double" and
       "float" in this case).
  
! '-fno-elide-type'
       By default when the C++ frontend prints diagnostics showing
       mismatching template types, common parts of the types are printed
       as "[...]"  to simplify the error message.  For example:
--- 5294,5300 ----
       The parts that differ are highlighted with color ("double" and
       "float" in this case).
  
! ‘-fno-elide-type’
       By default when the C++ frontend prints diagnostics showing
       mismatching template types, common parts of the types are printed
       as "[...]"  to simplify the error message.  For example:
*************** ends may not honor these options.
*** 5298,5316 ****
              could not convert 'std::map<int, std::vector<double> >()'
                from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
  
!      Specifying the '-fno-elide-type' flag suppresses that behavior.
       This flag also affects the output of the
!      '-fdiagnostics-show-template-tree' flag.
  
! '-fdiagnostics-path-format=KIND'
       Specify how to print paths of control-flow events for diagnostics
       that have such a path associated with them.
  
!      KIND is 'none', 'separate-events', or 'inline-events', the default.
  
!      'none' means to not print diagnostic paths.
  
!      'separate-events' means to print a separate "note" diagnostic for
       each event within the diagnostic.  For example:
  
            test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
--- 5302,5320 ----
              could not convert 'std::map<int, std::vector<double> >()'
                from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
  
!      Specifying the ‘-fno-elide-type’ flag suppresses that behavior.
       This flag also affects the output of the
!      ‘-fdiagnostics-show-template-tree’ flag.
  
! ‘-fdiagnostics-path-format=KIND’
       Specify how to print paths of control-flow events for diagnostics
       that have such a path associated with them.
  
!      KIND is ‘none’, ‘separate-events’, or ‘inline-events’, the default.
  
!      ‘none’ means to not print diagnostic paths.
  
!      ‘separate-events’ means to print a separate "note" diagnostic for
       each event within the diagnostic.  For example:
  
            test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
*************** ends may not honor these options.
*** 5318,5324 ****
            test.c:27:3: note: (2) when 'i < count'
            test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
  
!      'inline-events' means to print the events "inline" within the
       source code.  This view attempts to consolidate the events into
       runs of sufficiently-close events, printing them as labelled ranges
       within the source.
--- 5322,5328 ----
            test.c:27:3: note: (2) when 'i < count'
            test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
  
!      ‘inline-events’ means to print the events "inline" within the
       source code.  This view attempts to consolidate the events into
       runs of sufficiently-close events, printing them as labelled ranges
       within the source.
*************** ends may not honor these options.
*** 5393,5423 ****
                |
            (etc)
  
! '-fdiagnostics-show-path-depths'
       This option provides additional information when printing
       control-flow paths associated with a diagnostic.
  
       If this is option is provided then the stack depth will be printed
       for each run of events within
!      '-fdiagnostics-path-format=inline-events'.  If provided with
!      '-fdiagnostics-path-format=separate-events', then the stack depth
       and function declaration will be appended when printing each event.
  
       This is intended for use by GCC developers and plugin developers
       when debugging diagnostics that report interprocedural control
       flow.
  
! '-fno-show-column'
       Do not print column numbers in diagnostics.  This may be necessary
       if diagnostics are being scanned by a program that does not
!      understand the column numbers, such as 'dejagnu'.
  
! '-fdiagnostics-column-unit=UNIT'
       Select the units for the column number.  This affects traditional
!      diagnostics (in the absence of '-fno-show-column'), as well as JSON
       format diagnostics if requested.
  
!      The default UNIT, 'display', considers the number of display
       columns occupied by each character.  This may be larger than the
       number of bytes required to encode the character, in the case of
       tab characters, or it may be smaller, in the case of multibyte
--- 5397,5427 ----
                |
            (etc)
  
! ‘-fdiagnostics-show-path-depths’
       This option provides additional information when printing
       control-flow paths associated with a diagnostic.
  
       If this is option is provided then the stack depth will be printed
       for each run of events within
!      ‘-fdiagnostics-path-format=inline-events’.  If provided with
!      ‘-fdiagnostics-path-format=separate-events’, then the stack depth
       and function declaration will be appended when printing each event.
  
       This is intended for use by GCC developers and plugin developers
       when debugging diagnostics that report interprocedural control
       flow.
  
! ‘-fno-show-column’
       Do not print column numbers in diagnostics.  This may be necessary
       if diagnostics are being scanned by a program that does not
!      understand the column numbers, such as ‘dejagnu’.
  
! ‘-fdiagnostics-column-unit=UNIT’
       Select the units for the column number.  This affects traditional
!      diagnostics (in the absence of ‘-fno-show-column’), as well as JSON
       format diagnostics if requested.
  
!      The default UNIT, ‘display’, considers the number of display
       columns occupied by each character.  This may be larger than the
       number of bytes required to encode the character, in the case of
       tab characters, or it may be smaller, in the case of multibyte
*************** ends may not honor these options.
*** 5427,5444 ****
       occupies two display columns, and its UTF-8 encoding requires four
       bytes.
  
!      Setting UNIT to 'byte' changes the column number to the raw byte
       count in all cases, as was traditionally output by GCC prior to
       version 11.1.0.
  
! '-fdiagnostics-column-origin=ORIGIN'
       Select the origin for column numbers, i.e.  the column number
       assigned to the first column.  The default value of 1 corresponds
       to traditional GCC behavior and to the GNU style guide.  Some
       utilities may perform better with an origin of 0; any non-negative
       value may be specified.
  
! '-fdiagnostics-escape-format=FORMAT'
       When GCC prints pertinent source lines for a diagnostic it normally
       attempts to print the source bytes directly.  However, some
       diagnostics relate to encoding issues in the source file, such as
--- 5431,5448 ----
       occupies two display columns, and its UTF-8 encoding requires four
       bytes.
  
!      Setting UNIT to ‘byte’ changes the column number to the raw byte
       count in all cases, as was traditionally output by GCC prior to
       version 11.1.0.
  
! ‘-fdiagnostics-column-origin=ORIGIN’
       Select the origin for column numbers, i.e.  the column number
       assigned to the first column.  The default value of 1 corresponds
       to traditional GCC behavior and to the GNU style guide.  Some
       utilities may perform better with an origin of 0; any non-negative
       value may be specified.
  
! ‘-fdiagnostics-escape-format=FORMAT’
       When GCC prints pertinent source lines for a diagnostic it normally
       attempts to print the source bytes directly.  However, some
       diagnostics relate to encoding issues in the source file, such as
*************** ends may not honor these options.
*** 5448,5508 ****
  
       This option controls how such bytes should be escaped.
  
!      The default FORMAT, 'unicode' displays Unicode characters that are
!      not printable ASCII in the form '<U+XXXX>', and bytes that do not
       correspond to a Unicode character validly-encoded in UTF-8-encoded
!      will be displayed as hexadecimal in the form '<XX>'.
  
!      For example, a source line containing the string 'before' followed
       by the Unicode character U+03C0 ("GREEK SMALL LETTER PI", with
       UTF-8 encoding 0xCF 0x80) followed by the byte 0xBF (a stray UTF-8
!      trailing byte), followed by the string 'after' will be printed for
       such a diagnostic as:
  
             before<U+03C0><BF>after
  
!      Setting FORMAT to 'bytes' will display all non-printable-ASCII
!      bytes in the form '<XX>', thus showing the underlying encoding of
       non-ASCII Unicode characters.  For the example above, the following
       will be printed:
  
             before<CF><80><BF>after
  
! '-fdiagnostics-text-art-charset=CHARSET'
       Some diagnostics can contain "text art" diagrams: visualizations
       created from text, intended to be viewed in a monospaced font.
  
       This option selects which characters should be used for printing
!      such diagrams, if any.  CHARSET is 'none', 'ascii', 'unicode', or
!      'emoji'.
  
!      The 'none' value suppresses the printing of such diagrams.  The
!      'ascii' value will ensure that such diagrams are pure ASCII ("ASCII
!      art").  The 'unicode' value will allow for conservative use of
       unicode drawing characters (such as box-drawing characters).  The
!      'emoji' value further adds the possibility of emoji in the output
       (such as emitting U+26A0 WARNING SIGN followed by U+FE0F VARIATION
       SELECTOR-16 to select the emoji variant of the character).
  
!      The default is 'emoji', except when the environment variable 'LANG'
!      is set to 'C', in which case the default is 'ascii'.
  
! '-fdiagnostics-format=FORMAT'
       Select a different format for printing diagnostics.  FORMAT is
!      'text', 'sarif-stderr', 'sarif-file', 'json', 'json-stderr', or
!      'json-file'.
  
!      The default is 'text'.
  
!      The 'sarif-stderr' and 'sarif-file' formats both emit diagnostics
       in SARIF Version 2.1.0 format, either to stderr, or to a file named
!      'SOURCE.sarif', respectively.
  
!      The 'json' format is a synonym for 'json-stderr'.  The
!      'json-stderr' and 'json-file' formats are identical, apart from
       where the JSON is emitted to - with the former, the JSON is emitted
!      to stderr, whereas with 'json-file' it is written to
!      'SOURCE.gcc.json'.
  
       The emitted JSON consists of a top-level JSON array containing JSON
       objects representing the diagnostics.
--- 5452,5512 ----
  
       This option controls how such bytes should be escaped.
  
!      The default FORMAT, ‘unicode’ displays Unicode characters that are
!      not printable ASCII in the form ‘<U+XXXX>’, and bytes that do not
       correspond to a Unicode character validly-encoded in UTF-8-encoded
!      will be displayed as hexadecimal in the form ‘<XX>’.
  
!      For example, a source line containing the string ‘before’ followed
       by the Unicode character U+03C0 ("GREEK SMALL LETTER PI", with
       UTF-8 encoding 0xCF 0x80) followed by the byte 0xBF (a stray UTF-8
!      trailing byte), followed by the string ‘after’ will be printed for
       such a diagnostic as:
  
             before<U+03C0><BF>after
  
!      Setting FORMAT to ‘bytes’ will display all non-printable-ASCII
!      bytes in the form ‘<XX>’, thus showing the underlying encoding of
       non-ASCII Unicode characters.  For the example above, the following
       will be printed:
  
             before<CF><80><BF>after
  
! ‘-fdiagnostics-text-art-charset=CHARSET’
       Some diagnostics can contain "text art" diagrams: visualizations
       created from text, intended to be viewed in a monospaced font.
  
       This option selects which characters should be used for printing
!      such diagrams, if any.  CHARSET is ‘none’, ‘ascii’, ‘unicode’, or
!      ‘emoji’.
  
!      The ‘none’ value suppresses the printing of such diagrams.  The
!      ‘ascii’ value will ensure that such diagrams are pure ASCII ("ASCII
!      art").  The ‘unicode’ value will allow for conservative use of
       unicode drawing characters (such as box-drawing characters).  The
!      ‘emoji’ value further adds the possibility of emoji in the output
       (such as emitting U+26A0 WARNING SIGN followed by U+FE0F VARIATION
       SELECTOR-16 to select the emoji variant of the character).
  
!      The default is ‘emoji’, except when the environment variable ‘LANG’
!      is set to ‘C’, in which case the default is ‘ascii’.
  
! ‘-fdiagnostics-format=FORMAT’
       Select a different format for printing diagnostics.  FORMAT is
!      ‘text’, ‘sarif-stderr’, ‘sarif-file’, ‘json’, ‘json-stderr’, or
!      ‘json-file’.
  
!      The default is ‘text’.
  
!      The ‘sarif-stderr’ and ‘sarif-file’ formats both emit diagnostics
       in SARIF Version 2.1.0 format, either to stderr, or to a file named
!      ‘SOURCE.sarif’, respectively.
  
!      The ‘json’ format is a synonym for ‘json-stderr’.  The
!      ‘json-stderr’ and ‘json-file’ formats are identical, apart from
       where the JSON is emitted to - with the former, the JSON is emitted
!      to stderr, whereas with ‘json-file’ it is written to
!      ‘SOURCE.gcc.json’.
  
       The emitted JSON consists of a top-level JSON array containing JSON
       objects representing the diagnostics.
*************** ends may not honor these options.
*** 5568,5598 ****
                }
            ]
  
!      where the 'note' is a child of the 'warning'.
  
!      A diagnostic has a 'kind'.  If this is 'warning', then there is an
!      'option' key describing the command-line option controlling the
       warning.
  
       A diagnostic can contain zero or more locations.  Each location has
!      an optional 'label' string and up to three positions within it: a
!      'caret' position and optional 'start' and 'finish' positions.  A
!      position is described by a 'file' name, a 'line' number, and three
       numbers indicating a column position:
  
!         * 'display-column' counts display columns, accounting for tabs
            and multibyte characters.
  
!         * 'byte-column' counts raw bytes.
  
!         * 'column' is equal to one of the previous two, as dictated by
!           the '-fdiagnostics-column-unit' option.
  
       All three columns are relative to the origin specified by
!      '-fdiagnostics-column-origin', which is typically equal to 1 but
       may be set, for instance, to 0 for compatibility with other
       utilities that number columns from 0.  The column origin is
!      recorded in the JSON output in the 'column-origin' tag.  In the
       remaining examples below, the extra column number outputs have been
       omitted for brevity.
  
--- 5572,5602 ----
                }
            ]
  
!      where the ‘note’ is a child of the ‘warning’.
  
!      A diagnostic has a ‘kind’.  If this is ‘warning’, then there is an
!      ‘option’ key describing the command-line option controlling the
       warning.
  
       A diagnostic can contain zero or more locations.  Each location has
!      an optional ‘label’ string and up to three positions within it: a
!      ‘caret’ position and optional ‘start’ and ‘finish’ positions.  A
!      position is described by a ‘file’ name, a ‘line’ number, and three
       numbers indicating a column position:
  
!         • ‘display-column’ counts display columns, accounting for tabs
            and multibyte characters.
  
!         • ‘byte-column’ counts raw bytes.
  
!         • ‘column’ is equal to one of the previous two, as dictated by
!           the ‘-fdiagnostics-column-unit’ option.
  
       All three columns are relative to the origin specified by
!      ‘-fdiagnostics-column-origin’, which is typically equal to 1 but
       may be set, for instance, to 0 for compatibility with other
       utilities that number columns from 0.  The column origin is
!      recorded in the JSON output in the ‘column-origin’ tag.  In the
       remaining examples below, the extra column number outputs have been
       omitted for brevity.
  
*************** ends may not honor these options.
*** 5643,5651 ****
                    "message": "invalid operands to binary + ..."
                }
  
!      If a diagnostic contains fix-it hints, it has a 'fixits' array,
       consisting of half-open intervals, similar to the output of
!      '-fdiagnostics-parseable-fixits'.  For example, this diagnostic
       with a replacement fix-it hint:
  
            demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
--- 5647,5655 ----
                    "message": "invalid operands to binary + ..."
                }
  
!      If a diagnostic contains fix-it hints, it has a ‘fixits’ array,
       consisting of half-open intervals, similar to the output of
!      ‘-fdiagnostics-parseable-fixits’.  For example, this diagnostic
       with a replacement fix-it hint:
  
            demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
*************** ends may not honor these options.
*** 5692,5713 ****
                    "message": "\u2018struct s\u2019 has no member named ..."
                }
  
!      where the fix-it hint suggests replacing the text from 'start' up
!      to but not including 'next' with 'string''s value.  Deletions are
!      expressed via an empty value for 'string', insertions by having
!      'start' equal 'next'.
  
       If the diagnostic has a path of control-flow events associated with
!      it, it has a 'path' array of objects representing the events.  Each
!      event object has a 'description' string, a 'location' object, along
!      with a 'function' string and a 'depth' number for representing
!      interprocedural paths.  The 'function' represents the current
!      function at that event, and the 'depth' represents the stack depth
       relative to some baseline: the higher, the more frames are within
       the stack.
  
       For example, the intraprocedural example shown for
!      '-fdiagnostics-path-format=' might have this JSON for its path:
  
                "path": [
                    {
--- 5696,5717 ----
                    "message": "\u2018struct s\u2019 has no member named ..."
                }
  
!      where the fix-it hint suggests replacing the text from ‘start’ up
!      to but not including ‘next’ with ‘string’'s value.  Deletions are
!      expressed via an empty value for ‘string’, insertions by having
!      ‘start’ equal ‘next’.
  
       If the diagnostic has a path of control-flow events associated with
!      it, it has a ‘path’ array of objects representing the events.  Each
!      event object has a ‘description’ string, a ‘location’ object, along
!      with a ‘function’ string and a ‘depth’ number for representing
!      interprocedural paths.  The ‘function’ represents the current
!      function at that event, and the ‘depth’ represents the stack depth
       relative to some baseline: the higher, the more frames are within
       the stack.
  
       For example, the intraprocedural example shown for
!      ‘-fdiagnostics-path-format=’ might have this JSON for its path:
  
                "path": [
                    {
*************** ends may not honor these options.
*** 5742,5762 ****
                    }
                ]
  
!      Diagnostics have a boolean attribute 'escape-source', hinting
       whether non-ASCII bytes should be escaped when printing the
!      pertinent lines of source code ('true' for diagnostics involving
       source encoding issues).
  
! '-fno-diagnostics-json-formatting'
       By default, when JSON is emitted for diagnostics (via
!      '-fdiagnostics-format=sarif-stderr',
!      '-fdiagnostics-format=sarif-file', '-fdiagnostics-format=json',
!      '-fdiagnostics-format=json-stderr',
!      '-fdiagnostics-format=json-file'), GCC will add newlines and
       indentation to visually emphasize the hierarchical structure of the
       JSON.
  
!      Use '-fno-diagnostics-json-formatting' to suppress this whitespace.
       It must be passed before the option it is to affect.
  
       This is intended for compatibility with tools that do not expect
--- 5746,5766 ----
                    }
                ]
  
!      Diagnostics have a boolean attribute ‘escape-source’, hinting
       whether non-ASCII bytes should be escaped when printing the
!      pertinent lines of source code (‘true’ for diagnostics involving
       source encoding issues).
  
! ‘-fno-diagnostics-json-formatting’
       By default, when JSON is emitted for diagnostics (via
!      ‘-fdiagnostics-format=sarif-stderr’,
!      ‘-fdiagnostics-format=sarif-file’, ‘-fdiagnostics-format=json’,
!      ‘-fdiagnostics-format=json-stderr’,
!      ‘-fdiagnostics-format=json-file’), GCC will add newlines and
       indentation to visually emphasize the hierarchical structure of the
       JSON.
  
!      Use ‘-fno-diagnostics-json-formatting’ to suppress this whitespace.
       It must be passed before the option it is to affect.
  
       This is intended for compatibility with tools that do not expect
*************** an error.
*** 5776,5833 ****
   The following language-independent options do not enable specific
  warnings but control the kinds of diagnostics produced by GCC.
  
! '-fsyntax-only'
       Check the code for syntax errors, but don't do anything beyond
       that.
  
! '-fmax-errors=N'
       Limits the maximum number of error messages to N, at which point
       GCC bails out rather than attempting to continue processing the
       source code.  If N is 0 (the default), there is no limit on the
!      number of error messages produced.  If '-Wfatal-errors' is also
!      specified, then '-Wfatal-errors' takes precedence over this option.
  
! '-w'
       Inhibit all warning messages.
  
! '-Werror'
       Make all warnings into errors.
  
! '-Werror='
       Make the specified warning into an error.  The specifier for a
!      warning is appended; for example '-Werror=switch' turns the
!      warnings controlled by '-Wswitch' into errors.  This switch takes a
!      negative form, to be used to negate '-Werror' for specific
!      warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
!      not be errors, even when '-Werror' is in effect.
  
       The warning message for each controllable warning includes the
       option that controls the warning.  That option can then be used
!      with '-Werror=' and '-Wno-error=' as described above.  (Printing of
       the option in the warning message can be disabled using the
!      '-fno-diagnostics-show-option' flag.)
  
!      Note that specifying '-Werror='FOO automatically implies '-W'FOO.
!      However, '-Wno-error='FOO does not imply anything.
  
! '-Wfatal-errors'
       This option causes the compiler to abort compilation on the first
       error occurred rather than trying to keep going and printing
       further error messages.
  
   You can request many specific warnings with options beginning with
! '-W', for example '-Wimplicit' to request warnings on implicit
  declarations.  Each of these specific warning options also has a
! negative form beginning '-Wno-' to turn off warnings; for example,
! '-Wno-implicit'.  This manual lists only one of the two forms, whichever
  is not the default.  For further language-specific options also refer to
  *note C++ Dialect Options:: and *note Objective-C and Objective-C++
  Dialect Options::.  Additional warnings can be produced by enabling the
  static analyzer; *Note Static Analyzer Options::.
  
!  Some options, such as '-Wall' and '-Wextra', turn on other options,
! such as '-Wunused', which may turn on further options, such as
! '-Wunused-value'.  The combined effect of positive and negative forms is
  that more specific options have priority over less specific ones,
  independently of their position in the command-line.  For options of the
  same specificity, the last one takes effect.  Options enabled or
--- 5780,5837 ----
   The following language-independent options do not enable specific
  warnings but control the kinds of diagnostics produced by GCC.
  
! ‘-fsyntax-only’
       Check the code for syntax errors, but don't do anything beyond
       that.
  
! ‘-fmax-errors=N’
       Limits the maximum number of error messages to N, at which point
       GCC bails out rather than attempting to continue processing the
       source code.  If N is 0 (the default), there is no limit on the
!      number of error messages produced.  If ‘-Wfatal-errors’ is also
!      specified, then ‘-Wfatal-errors’ takes precedence over this option.
  
! ‘-w’
       Inhibit all warning messages.
  
! ‘-Werror’
       Make all warnings into errors.
  
! ‘-Werror=’
       Make the specified warning into an error.  The specifier for a
!      warning is appended; for example ‘-Werror=switch’ turns the
!      warnings controlled by ‘-Wswitch’ into errors.  This switch takes a
!      negative form, to be used to negate ‘-Werror’ for specific
!      warnings; for example ‘-Wno-error=switch’ makes ‘-Wswitch’ warnings
!      not be errors, even when ‘-Werror’ is in effect.
  
       The warning message for each controllable warning includes the
       option that controls the warning.  That option can then be used
!      with ‘-Werror=’ and ‘-Wno-error=’ as described above.  (Printing of
       the option in the warning message can be disabled using the
!      ‘-fno-diagnostics-show-option’ flag.)
  
!      Note that specifying ‘-Werror=’FOO automatically implies ‘-W’FOO.
!      However, ‘-Wno-error=’FOO does not imply anything.
  
! ‘-Wfatal-errors’
       This option causes the compiler to abort compilation on the first
       error occurred rather than trying to keep going and printing
       further error messages.
  
   You can request many specific warnings with options beginning with
! ‘-W’, for example ‘-Wimplicit’ to request warnings on implicit
  declarations.  Each of these specific warning options also has a
! negative form beginning ‘-Wno-’ to turn off warnings; for example,
! ‘-Wno-implicit’.  This manual lists only one of the two forms, whichever
  is not the default.  For further language-specific options also refer to
  *note C++ Dialect Options:: and *note Objective-C and Objective-C++
  Dialect Options::.  Additional warnings can be produced by enabling the
  static analyzer; *Note Static Analyzer Options::.
  
!  Some options, such as ‘-Wall’ and ‘-Wextra’, turn on other options,
! such as ‘-Wunused’, which may turn on further options, such as
! ‘-Wunused-value’.  The combined effect of positive and negative forms is
  that more specific options have priority over less specific ones,
  independently of their position in the command-line.  For options of the
  same specificity, the last one takes effect.  Options enabled or
*************** disabled via pragmas (*note Diagnostic P
*** 5835,5917 ****
  appeared at the end of the command-line.
  
   When an unrecognized warning option is requested (e.g.,
! '-Wunknown-warning'), GCC emits a diagnostic stating that the option is
! not recognized.  However, if the '-Wno-' form is used, the behavior is
! slightly different: no diagnostic is produced for '-Wno-unknown-warning'
  unless other diagnostics are being produced.  This allows the use of new
! '-Wno-' options with old compilers, but if something goes wrong, the
  compiler warns that an unrecognized option is present.
  
   The effectiveness of some warnings depends on optimizations also being
! enabled.  For example '-Wsuggest-final-types' is more effective with
  link-time optimization and some instances of other warnings may not be
  issued at all unless optimization is enabled.  While optimization in
  general improves the efficacy of control and data flow sensitive
  warnings, in some cases it may also cause false positives.
  
! '-Wpedantic'
! '-pedantic'
       Issue all the warnings demanded by strict ISO C and ISO C++;
       diagnose all programs that use forbidden extensions, and some other
       programs that do not follow ISO C and ISO C++.  This follows the
!      version of the ISO C or C++ standard specified by any '-std' option
       used.
  
       Valid ISO C and ISO C++ programs should compile properly with or
!      without this option (though a rare few require '-ansi' or a '-std'
       option specifying the version of the standard).  However, without
       this option, certain GNU extensions and traditional C and C++
       features are supported as well.  With this option, they are
!      diagnosed (or rejected with '-pedantic-errors').
  
!      '-Wpedantic' does not cause warning messages for use of the
!      alternate keywords whose names begin and end with '__'.  This
       alternate format can also be used to disable warnings for non-ISO
!      '__intN' types, i.e.  '__intN__'.  Pedantic warnings are also
!      disabled in the expression that follows '__extension__'.  However,
       only system header files should use these escape routes;
       application programs should avoid them.  *Note Alternate
       Keywords::.
  
       Some warnings about non-conforming programs are controlled by
!      options other than '-Wpedantic'; in many cases they are implied by
!      '-Wpedantic' but can be disabled separately by their specific
!      option, e.g.  '-Wpedantic -Wno-pointer-sign'.
  
!      Where the standard specified with '-std' represents a GNU extended
!      dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
!      "base standard", the version of ISO C on which the GNU extended
!      dialect is based.  Warnings from '-Wpedantic' are given where they
       are required by the base standard.  (It does not make sense for
       such warnings to be given only for features not in the specified
       GNU C dialect, since by definition the GNU dialects of C include
       all features the compiler supports with the given option, and there
       would be nothing to warn about.)
  
! '-pedantic-errors'
!      Give an error whenever the "base standard" (see '-Wpedantic')
       requires a diagnostic, in some cases where there is undefined
       behavior at compile-time and in some other cases that do not
       prevent compilation of programs that are valid according to the
!      standard.  This is not equivalent to '-Werror=pedantic': the latter
       option is unlikely to be useful, as it only makes errors of the
!      diagnostics that are controlled by '-Wpedantic', whereas this
       option also affects required diagnostics that are always enabled or
!      controlled by options other than '-Wpedantic'.
  
       If you want the required diagnostics that are warnings by default
       to be errors instead, but don't also want to enable the
!      '-Wpedantic' diagnostics, you can specify '-pedantic-errors
!      -Wno-pedantic' (or '-pedantic-errors -Wno-error=pedantic' to enable
       them but only as warnings).
  
       Some required diagnostics are errors by default, but can be reduced
!      to warnings using '-fpermissive' or their specific warning option,
!      e.g.  '-Wno-error=narrowing'.
  
       Some diagnostics for non-ISO practices are controlled by specific
!      warning options other than '-Wpedantic', but are also made errors
!      by '-pedantic-errors'.  For instance:
  
            -Wattributes (for standard attributes)
            -Wchanges-meaning (C++)
--- 5839,5921 ----
  appeared at the end of the command-line.
  
   When an unrecognized warning option is requested (e.g.,
! ‘-Wunknown-warning’), GCC emits a diagnostic stating that the option is
! not recognized.  However, if the ‘-Wno-’ form is used, the behavior is
! slightly different: no diagnostic is produced for ‘-Wno-unknown-warning’
  unless other diagnostics are being produced.  This allows the use of new
! ‘-Wno-’ options with old compilers, but if something goes wrong, the
  compiler warns that an unrecognized option is present.
  
   The effectiveness of some warnings depends on optimizations also being
! enabled.  For example ‘-Wsuggest-final-types’ is more effective with
  link-time optimization and some instances of other warnings may not be
  issued at all unless optimization is enabled.  While optimization in
  general improves the efficacy of control and data flow sensitive
  warnings, in some cases it may also cause false positives.
  
! ‘-Wpedantic’
! ‘-pedantic’
       Issue all the warnings demanded by strict ISO C and ISO C++;
       diagnose all programs that use forbidden extensions, and some other
       programs that do not follow ISO C and ISO C++.  This follows the
!      version of the ISO C or C++ standard specified by any ‘-std’ option
       used.
  
       Valid ISO C and ISO C++ programs should compile properly with or
!      without this option (though a rare few require ‘-ansi’ or a ‘-std’
       option specifying the version of the standard).  However, without
       this option, certain GNU extensions and traditional C and C++
       features are supported as well.  With this option, they are
!      diagnosed (or rejected with ‘-pedantic-errors’).
  
!      ‘-Wpedantic’ does not cause warning messages for use of the
!      alternate keywords whose names begin and end with ‘__’.  This
       alternate format can also be used to disable warnings for non-ISO
!      ‘__intN’ types, i.e.  ‘__intN__’.  Pedantic warnings are also
!      disabled in the expression that follows ‘__extension__’.  However,
       only system header files should use these escape routes;
       application programs should avoid them.  *Note Alternate
       Keywords::.
  
       Some warnings about non-conforming programs are controlled by
!      options other than ‘-Wpedantic’; in many cases they are implied by
!      ‘-Wpedantic’ but can be disabled separately by their specific
!      option, e.g.  ‘-Wpedantic -Wno-pointer-sign’.
  
!      Where the standard specified with ‘-std’ represents a GNU extended
!      dialect of C, such as ‘gnu90’ or ‘gnu99’, there is a corresponding
!      “base standard”, the version of ISO C on which the GNU extended
!      dialect is based.  Warnings from ‘-Wpedantic’ are given where they
       are required by the base standard.  (It does not make sense for
       such warnings to be given only for features not in the specified
       GNU C dialect, since by definition the GNU dialects of C include
       all features the compiler supports with the given option, and there
       would be nothing to warn about.)
  
! ‘-pedantic-errors’
!      Give an error whenever the “base standard” (see ‘-Wpedantic’)
       requires a diagnostic, in some cases where there is undefined
       behavior at compile-time and in some other cases that do not
       prevent compilation of programs that are valid according to the
!      standard.  This is not equivalent to ‘-Werror=pedantic’: the latter
       option is unlikely to be useful, as it only makes errors of the
!      diagnostics that are controlled by ‘-Wpedantic’, whereas this
       option also affects required diagnostics that are always enabled or
!      controlled by options other than ‘-Wpedantic’.
  
       If you want the required diagnostics that are warnings by default
       to be errors instead, but don't also want to enable the
!      ‘-Wpedantic’ diagnostics, you can specify ‘-pedantic-errors
!      -Wno-pedantic’ (or ‘-pedantic-errors -Wno-error=pedantic’ to enable
       them but only as warnings).
  
       Some required diagnostics are errors by default, but can be reduced
!      to warnings using ‘-fpermissive’ or their specific warning option,
!      e.g.  ‘-Wno-error=narrowing’.
  
       Some diagnostics for non-ISO practices are controlled by specific
!      warning options other than ‘-Wpedantic’, but are also made errors
!      by ‘-pedantic-errors’.  For instance:
  
            -Wattributes (for standard attributes)
            -Wchanges-meaning (C++)
*************** warnings, in some cases it may also caus
*** 5933,5941 ****
            -Wwrite-strings (C++11 or later)
  
  
! '-fpermissive'
       Downgrade some required diagnostics about nonconformant code from
!      errors to warnings.  Thus, using '-fpermissive' allows some
       nonconforming code to compile.  Some C++ diagnostics are controlled
       only by this flag, but it also downgrades some C and C++
       diagnostics that have their own flag:
--- 5937,5945 ----
            -Wwrite-strings (C++11 or later)
  
  
! ‘-fpermissive’
       Downgrade some required diagnostics about nonconformant code from
!      errors to warnings.  Thus, using ‘-fpermissive’ allows some
       nonconforming code to compile.  Some C++ diagnostics are controlled
       only by this flag, but it also downgrades some C and C++
       diagnostics that have their own flag:
*************** warnings, in some cases it may also caus
*** 5949,5958 ****
            -Wreturn-mismatch (C and Objective-C only)
  
  
!      The '-fpermissive' option is the default for historic C language
!      modes ('-std=c89', '-std=gnu89', '-std=c90', '-std=gnu90').
  
! '-Wall'
       This enables all the warnings about constructions that some users
       consider questionable, and that are easy to avoid (or modify to
       prevent the warning), even in conjunction with macros.  This also
--- 5953,5962 ----
            -Wreturn-mismatch (C and Objective-C only)
  
  
!      The ‘-fpermissive’ option is the default for historic C language
!      modes (‘-std=c89’, ‘-std=gnu89’, ‘-std=c90’, ‘-std=gnu90’).
  
! ‘-Wall’
       This enables all the warnings about constructions that some users
       consider questionable, and that are easy to avoid (or modify to
       prevent the warning), even in conjunction with macros.  This also
*************** warnings, in some cases it may also caus
*** 5960,5966 ****
       Dialect Options:: and *note Objective-C and Objective-C++ Dialect
       Options::.
  
!      '-Wall' turns on the following warning flags:
  
            -Waddress
            -Waligned-new (C++ and Objective-C++ only)
--- 5964,5970 ----
       Dialect Options:: and *note Objective-C and Objective-C++ Dialect
       Options::.
  
!      ‘-Wall’ turns on the following warning flags:
  
            -Waddress
            -Waligned-new (C++ and Objective-C++ only)
*************** warnings, in some cases it may also caus
*** 6044,6060 ****
            -Wvolatile-register-var
            -Wzero-length-bounds
  
!      Note that some warning flags are not implied by '-Wall'.  Some of
       them warn about constructions that users generally do not consider
       questionable, but which occasionally you might wish to check for;
       others warn about constructions that are necessary or hard to avoid
       in some cases, and there is no simple way to modify the code to
!      suppress the warning.  Some of them are enabled by '-Wextra' but
       many of them must be enabled individually.
  
! '-Wextra'
       This enables some extra warning flags that are not enabled by
!      '-Wall'.  (This option used to be called '-W'.  The older name is
       still supported, but the newer name is more descriptive.)
  
            -Wabsolute-value (only for C/ObjC)
--- 6048,6064 ----
            -Wvolatile-register-var
            -Wzero-length-bounds
  
!      Note that some warning flags are not implied by ‘-Wall’.  Some of
       them warn about constructions that users generally do not consider
       questionable, but which occasionally you might wish to check for;
       others warn about constructions that are necessary or hard to avoid
       in some cases, and there is no simple way to modify the code to
!      suppress the warning.  Some of them are enabled by ‘-Wextra’ but
       many of them must be enabled individually.
  
! ‘-Wextra’
       This enables some extra warning flags that are not enabled by
!      ‘-Wall’.  (This option used to be called ‘-W’.  The older name is
       still supported, but the newer name is more descriptive.)
  
            -Wabsolute-value (only for C/ObjC)
*************** warnings, in some cases it may also caus
*** 6083,6131 ****
            -Wunused-parameter (only with -Wunused or -Wall)
            -Wunused-but-set-parameter (only with -Wunused or -Wall)
  
!      The option '-Wextra' also prints warning messages for the following
       cases:
  
!         * A pointer is compared against integer zero with '<', '<=',
!           '>', or '>='.
  
!         * (C++ only) An enumerator and a non-enumerator both appear in a
            conditional expression.
  
!         * (C++ only) Ambiguous virtual bases.
  
!         * (C++ only) Subscripting an array that has been declared
!           'register'.
  
!         * (C++ only) Taking the address of a variable that has been
!           declared 'register'.
  
!         * (C++ only) A base class is not initialized in the copy
            constructor of a derived class.
  
! '-Wabi (C, Objective-C, C++ and Objective-C++ only)'
  
       Warn about code affected by ABI changes.  This includes code that
       may not be compatible with the vendor-neutral C++ ABI as well as
       the psABI for the particular target.
  
       Since G++ now defaults to updating the ABI with each major release,
!      normally '-Wabi' warns only about C++ ABI compatibility problems if
       there is a check added later in a release series for an ABI issue
!      discovered since the initial release.  '-Wabi' warns about more
       things if an older ABI version is selected (with
!      '-fabi-version=N').
  
!      '-Wabi' can also be used with an explicit version number to warn
!      about C++ ABI compatibility with a particular '-fabi-version'
!      level, e.g. '-Wabi=2' to warn about changes relative to
!      '-fabi-version=2'.
  
       If an explicit version number is provided and
!      '-fabi-compat-version' is not specified, the version number from
       this option is used for compatibility aliases.  If no explicit
       version number is provided with this option, but
!      '-fabi-compat-version' is specified, that version number is used
       for C++ ABI warnings.
  
       Although an effort has been made to warn about all such cases,
--- 6087,6135 ----
            -Wunused-parameter (only with -Wunused or -Wall)
            -Wunused-but-set-parameter (only with -Wunused or -Wall)
  
!      The option ‘-Wextra’ also prints warning messages for the following
       cases:
  
!         • A pointer is compared against integer zero with ‘<’, ‘<=’,
!           ‘>’, or ‘>=’.
  
!         • (C++ only) An enumerator and a non-enumerator both appear in a
            conditional expression.
  
!         • (C++ only) Ambiguous virtual bases.
  
!         • (C++ only) Subscripting an array that has been declared
!           ‘register’.
  
!         • (C++ only) Taking the address of a variable that has been
!           declared ‘register’.
  
!         • (C++ only) A base class is not initialized in the copy
            constructor of a derived class.
  
! ‘-Wabi (C, Objective-C, C++ and Objective-C++ only)’
  
       Warn about code affected by ABI changes.  This includes code that
       may not be compatible with the vendor-neutral C++ ABI as well as
       the psABI for the particular target.
  
       Since G++ now defaults to updating the ABI with each major release,
!      normally ‘-Wabi’ warns only about C++ ABI compatibility problems if
       there is a check added later in a release series for an ABI issue
!      discovered since the initial release.  ‘-Wabi’ warns about more
       things if an older ABI version is selected (with
!      ‘-fabi-version=N’).
  
!      ‘-Wabi’ can also be used with an explicit version number to warn
!      about C++ ABI compatibility with a particular ‘-fabi-version’
!      level, e.g. ‘-Wabi=2’ to warn about changes relative to
!      ‘-fabi-version=2’.
  
       If an explicit version number is provided and
!      ‘-fabi-compat-version’ is not specified, the version number from
       this option is used for compatibility aliases.  If no explicit
       version number is provided with this option, but
!      ‘-fabi-compat-version’ is specified, that version number is used
       for C++ ABI warnings.
  
       Although an effort has been made to warn about all such cases,
*************** warnings, in some cases it may also caus
*** 6138,6208 ****
       concerned about the fact that code generated by G++ may not be
       binary compatible with code generated by other compilers.
  
!      Known incompatibilities in '-fabi-version=2' (which was the default
       from GCC 3.4 to 4.9) include:
  
!         * A template with a non-type template parameter of reference
            type was mangled incorrectly:
                 extern int N;
                 template <int &> struct S {};
                 void n (S<N>) {2}
  
!           This was fixed in '-fabi-version=3'.
  
!         * SIMD vector types declared using '__attribute ((vector_size))'
            were mangled in a non-standard way that does not allow for
            overloading of functions taking vectors of different sizes.
  
!           The mangling was changed in '-fabi-version=4'.
  
!         * '__attribute ((const))' and 'noreturn' were mangled as type
!           qualifiers, and 'decltype' of a plain declaration was folded
            away.
  
!           These mangling issues were fixed in '-fabi-version=5'.
  
!         * Scoped enumerators passed as arguments to a variadic function
!           are promoted like unscoped enumerators, causing 'va_arg' to
            complain.  On most targets this does not actually affect the
            parameter passing ABI, as there is no way to pass an argument
!           smaller than 'int'.
  
            Also, the ABI changed the mangling of template argument packs,
!           'const_cast', 'static_cast', prefix increment/decrement, and a
            class scope function used as a template argument.
  
!           These issues were corrected in '-fabi-version=6'.
  
!         * Lambdas in default argument scope were mangled incorrectly,
!           and the ABI changed the mangling of 'nullptr_t'.
  
!           These issues were corrected in '-fabi-version=7'.
  
!         * When mangling a function type with function-cv-qualifiers, the
            un-qualified function type was incorrectly treated as a
            substitution candidate.
  
!           This was fixed in '-fabi-version=8', the default for GCC 5.1.
  
!         * 'decltype(nullptr)' incorrectly had an alignment of 1, leading
            to unaligned accesses.  Note that this did not affect the ABI
!           of a function with a 'nullptr_t' parameter, as parameters have
            a minimum alignment.
  
!           This was fixed in '-fabi-version=9', the default for GCC 5.2.
  
!         * Target-specific attributes that affect the identity of a type,
            such as ia32 calling conventions on a function type (stdcall,
            regparm, etc.), did not affect the mangled name, leading to
            name collisions when function pointers were used as template
            arguments.
  
!           This was fixed in '-fabi-version=10', the default for GCC 6.1.
  
       This option also enables warnings about psABI-related changes.  The
       known psABI changes at this point include:
  
!         * For SysV/x86-64, unions with 'long double' members are passed
            in memory as specified in psABI. Prior to GCC 4.4, this was
            not the case.  For example:
  
--- 6142,6212 ----
       concerned about the fact that code generated by G++ may not be
       binary compatible with code generated by other compilers.
  
!      Known incompatibilities in ‘-fabi-version=2’ (which was the default
       from GCC 3.4 to 4.9) include:
  
!         • A template with a non-type template parameter of reference
            type was mangled incorrectly:
                 extern int N;
                 template <int &> struct S {};
                 void n (S<N>) {2}
  
!           This was fixed in ‘-fabi-version=3’.
  
!         • SIMD vector types declared using ‘__attribute ((vector_size))’
            were mangled in a non-standard way that does not allow for
            overloading of functions taking vectors of different sizes.
  
!           The mangling was changed in ‘-fabi-version=4’.
  
!         • ‘__attribute ((const))’ and ‘noreturn’ were mangled as type
!           qualifiers, and ‘decltype’ of a plain declaration was folded
            away.
  
!           These mangling issues were fixed in ‘-fabi-version=5’.
  
!         • Scoped enumerators passed as arguments to a variadic function
!           are promoted like unscoped enumerators, causing ‘va_arg’ to
            complain.  On most targets this does not actually affect the
            parameter passing ABI, as there is no way to pass an argument
!           smaller than ‘int’.
  
            Also, the ABI changed the mangling of template argument packs,
!           ‘const_cast’, ‘static_cast’, prefix increment/decrement, and a
            class scope function used as a template argument.
  
!           These issues were corrected in ‘-fabi-version=6’.
  
!         • Lambdas in default argument scope were mangled incorrectly,
!           and the ABI changed the mangling of ‘nullptr_t’.
  
!           These issues were corrected in ‘-fabi-version=7’.
  
!         • When mangling a function type with function-cv-qualifiers, the
            un-qualified function type was incorrectly treated as a
            substitution candidate.
  
!           This was fixed in ‘-fabi-version=8’, the default for GCC 5.1.
  
!         • ‘decltype(nullptr)’ incorrectly had an alignment of 1, leading
            to unaligned accesses.  Note that this did not affect the ABI
!           of a function with a ‘nullptr_t’ parameter, as parameters have
            a minimum alignment.
  
!           This was fixed in ‘-fabi-version=9’, the default for GCC 5.2.
  
!         • Target-specific attributes that affect the identity of a type,
            such as ia32 calling conventions on a function type (stdcall,
            regparm, etc.), did not affect the mangled name, leading to
            name collisions when function pointers were used as template
            arguments.
  
!           This was fixed in ‘-fabi-version=10’, the default for GCC 6.1.
  
       This option also enables warnings about psABI-related changes.  The
       known psABI changes at this point include:
  
!         • For SysV/x86-64, unions with ‘long double’ members are passed
            in memory as specified in psABI. Prior to GCC 4.4, this was
            not the case.  For example:
  
*************** warnings, in some cases it may also caus
*** 6211,6219 ****
                   int i;
                 };
  
!           'union U' is now always passed in memory.
  
! '-Wno-changes-meaning (C++ and Objective-C++ only)'
       C++ requires that unqualified uses of a name within a class have
       the same meaning in the complete scope of the class, so declaring
       the name after using it is ill-formed:
--- 6215,6223 ----
                   int i;
                 };
  
!           ‘union U’ is now always passed in memory.
  
! ‘-Wno-changes-meaning (C++ and Objective-C++ only)’
       C++ requires that unqualified uses of a name within a class have
       the same meaning in the complete scope of the class, so declaring
       the name after using it is ill-formed:
*************** warnings, in some cases it may also caus
*** 6222,6306 ****
            struct B2 { A a; struct A { }; }; // error, 'A' changes meaning
       By default, the B1 case is only a warning because the two
       declarations have the same type, while the B2 case is an error.
!      Both diagnostics can be disabled with '-Wno-changes-meaning'.
       Alternately, the error case can be reduced to a warning with
!      '-Wno-error=changes-meaning' or '-fpermissive'.
  
!      Both diagnostics are also suppressed by '-fms-extensions'.
  
! '-Wchar-subscripts'
!      Warn if an array subscript has type 'char'.  This is a common cause
       of error, as programmers often forget that this type is signed on
!      some machines.  This warning is enabled by '-Wall'.
  
! '-Wno-coverage-mismatch'
       Warn if feedback profiles do not match when using the
!      '-fprofile-use' option.  If a source file is changed between
!      compiling with '-fprofile-generate' and with '-fprofile-use', the
       files with the profile feedback can fail to match the source file
       and GCC cannot use the profile feedback information.  By default,
       this warning is enabled and is treated as an error.
!      '-Wno-coverage-mismatch' can be used to disable the warning or
!      '-Wno-error=coverage-mismatch' can be used to disable the error.
       Disabling the error for this warning can result in poorly optimized
       code and is useful only in the case of very minor changes such as
       bug fixes to an existing code-base.  Completely disabling the
       warning is not recommended.
  
! '-Wno-coverage-too-many-conditions'
!      Warn if '-fcondition-coverage' is used and an expression have too
       many terms and GCC gives up coverage.  Coverage is given up when
       there are more terms in the conditional than there are bits in a
!      'gcov_type_unsigned'.  This warning is enabled by default.
  
! '-Wno-coverage-invalid-line-number'
       Warn in case a function ends earlier than it begins due to an
       invalid linenum macros.  The warning is emitted only with
!      '--coverage' enabled.
  
       By default, this warning is enabled and is treated as an error.
!      '-Wno-coverage-invalid-line-number' can be used to disable the
!      warning or '-Wno-error=coverage-invalid-line-number' can be used to
       disable the error.
  
! '-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)'
!      Suppress warning messages emitted by '#warning' directives.
  
! '-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
!      Give a warning when a value of type 'float' is implicitly promoted
!      to 'double'.  CPUs with a 32-bit "single-precision" floating-point
!      unit implement 'float' in hardware, but emulate 'double' in
!      software.  On such a machine, doing computations using 'double'
       values is much more expensive because of the overhead required for
       software emulation.
  
!      It is easy to accidentally do computations with 'double' because
!      floating-point literals are implicitly of type 'double'.  For
       example, in:
            float area(float radius)
            {
               return 3.14159 * radius * radius;
            }
!      the compiler performs the entire computation with 'double' because
!      the floating-point literal is a 'double'.
  
! '-Wduplicate-decl-specifier (C and Objective-C only)'
!      Warn if a declaration has duplicate 'const', 'volatile', 'restrict'
!      or '_Atomic' specifier.  This warning is enabled by '-Wall'.
  
! '-Wformat'
! '-Wformat=N'
!      Check calls to 'printf' and 'scanf', etc., to make sure that the
       arguments supplied have types appropriate to the format string
       specified, and that the conversions specified in the format string
       make sense.  This includes standard functions, and others specified
       by format attributes (*note Function Attributes::), in the
!      'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
       not in the C standard) families (or other target-specific
       families).  Which functions are checked without format attributes
       having been specified depends on the standard version selected, and
       such checks of functions without the attribute specified are
!      disabled by '-ffreestanding' or '-fno-builtin'.
  
       The formats are checked against the format features supported by
       GNU libc version 2.2.  These include all ISO C90 and C99 features,
--- 6226,6310 ----
            struct B2 { A a; struct A { }; }; // error, 'A' changes meaning
       By default, the B1 case is only a warning because the two
       declarations have the same type, while the B2 case is an error.
!      Both diagnostics can be disabled with ‘-Wno-changes-meaning’.
       Alternately, the error case can be reduced to a warning with
!      ‘-Wno-error=changes-meaning’ or ‘-fpermissive’.
  
!      Both diagnostics are also suppressed by ‘-fms-extensions’.
  
! ‘-Wchar-subscripts’
!      Warn if an array subscript has type ‘char’.  This is a common cause
       of error, as programmers often forget that this type is signed on
!      some machines.  This warning is enabled by ‘-Wall’.
  
! ‘-Wno-coverage-mismatch’
       Warn if feedback profiles do not match when using the
!      ‘-fprofile-use’ option.  If a source file is changed between
!      compiling with ‘-fprofile-generate’ and with ‘-fprofile-use’, the
       files with the profile feedback can fail to match the source file
       and GCC cannot use the profile feedback information.  By default,
       this warning is enabled and is treated as an error.
!      ‘-Wno-coverage-mismatch’ can be used to disable the warning or
!      ‘-Wno-error=coverage-mismatch’ can be used to disable the error.
       Disabling the error for this warning can result in poorly optimized
       code and is useful only in the case of very minor changes such as
       bug fixes to an existing code-base.  Completely disabling the
       warning is not recommended.
  
! ‘-Wno-coverage-too-many-conditions’
!      Warn if ‘-fcondition-coverage’ is used and an expression have too
       many terms and GCC gives up coverage.  Coverage is given up when
       there are more terms in the conditional than there are bits in a
!      ‘gcov_type_unsigned’.  This warning is enabled by default.
  
! ‘-Wno-coverage-invalid-line-number’
       Warn in case a function ends earlier than it begins due to an
       invalid linenum macros.  The warning is emitted only with
!      ‘--coverage’ enabled.
  
       By default, this warning is enabled and is treated as an error.
!      ‘-Wno-coverage-invalid-line-number’ can be used to disable the
!      warning or ‘-Wno-error=coverage-invalid-line-number’ can be used to
       disable the error.
  
! ‘-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)’
!      Suppress warning messages emitted by ‘#warning’ directives.
  
! ‘-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)’
!      Give a warning when a value of type ‘float’ is implicitly promoted
!      to ‘double’.  CPUs with a 32-bit "single-precision" floating-point
!      unit implement ‘float’ in hardware, but emulate ‘double’ in
!      software.  On such a machine, doing computations using ‘double’
       values is much more expensive because of the overhead required for
       software emulation.
  
!      It is easy to accidentally do computations with ‘double’ because
!      floating-point literals are implicitly of type ‘double’.  For
       example, in:
            float area(float radius)
            {
               return 3.14159 * radius * radius;
            }
!      the compiler performs the entire computation with ‘double’ because
!      the floating-point literal is a ‘double’.
  
! ‘-Wduplicate-decl-specifier (C and Objective-C only)’
!      Warn if a declaration has duplicate ‘const’, ‘volatile’, ‘restrict’
!      or ‘_Atomic’ specifier.  This warning is enabled by ‘-Wall’.
  
! ‘-Wformat’
! ‘-Wformat=N’
!      Check calls to ‘printf’ and ‘scanf’, etc., to make sure that the
       arguments supplied have types appropriate to the format string
       specified, and that the conversions specified in the format string
       make sense.  This includes standard functions, and others specified
       by format attributes (*note Function Attributes::), in the
!      ‘printf’, ‘scanf’, ‘strftime’ and ‘strfmon’ (an X/Open extension,
       not in the C standard) families (or other target-specific
       families).  Which functions are checked without format attributes
       having been specified depends on the standard version selected, and
       such checks of functions without the attribute specified are
!      disabled by ‘-ffreestanding’ or ‘-fno-builtin’.
  
       The formats are checked against the format features supported by
       GNU libc version 2.2.  These include all ISO C90 and C99 features,
*************** warnings, in some cases it may also caus
*** 6308,6354 ****
       and GNU extensions.  Other library implementations may not support
       all these features; GCC does not support warning about features
       that go beyond a particular library's limitations.  However, if
!      '-Wpedantic' is used with '-Wformat', warnings are given about
       format features not in the selected standard version (but not for
!      'strfmon' formats, since those are not in any version of the C
       standard).  *Note Options Controlling C Dialect: C Dialect Options.
  
!      '-Wformat=1'
!      '-Wformat'
!           Option '-Wformat' is equivalent to '-Wformat=1', and
!           '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
            also checks for null format arguments for several functions,
!           '-Wformat' also implies '-Wnonnull'.  Some aspects of this
            level of format checking can be disabled by the options:
!           '-Wno-format-contains-nul', '-Wno-format-extra-args', and
!           '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
  
!      '-Wformat=2'
!           Enable '-Wformat' plus additional format checks.  Currently
!           equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
!           -Wformat-y2k'.
  
! '-Wno-format-contains-nul'
!      If '-Wformat' is specified, do not warn about format strings that
       contain NUL bytes.
  
! '-Wno-format-extra-args'
!      If '-Wformat' is specified, do not warn about excess arguments to a
!      'printf' or 'scanf' format function.  The C standard specifies that
       such arguments are ignored.
  
       Where the unused arguments lie between used arguments that are
!      specified with '$' operand number specifications, normally warnings
       are still given, since the implementation could not know what type
!      to pass to 'va_arg' to skip the unused arguments.  However, in the
!      case of 'scanf' formats, this option suppresses the warning if the
       unused arguments are all pointers, since the Single Unix
       Specification says that such unused arguments are allowed.
  
! '-Wformat-overflow'
! '-Wformat-overflow=LEVEL'
       Warn about calls to formatted input/output functions such as
!      'sprintf' and 'vsprintf' that might overflow the destination
       buffer.  When the exact number of bytes written by a format
       directive cannot be determined at compile-time it is estimated
       based on heuristics that depend on the LEVEL argument and on
--- 6312,6358 ----
       and GNU extensions.  Other library implementations may not support
       all these features; GCC does not support warning about features
       that go beyond a particular library's limitations.  However, if
!      ‘-Wpedantic’ is used with ‘-Wformat’, warnings are given about
       format features not in the selected standard version (but not for
!      ‘strfmon’ formats, since those are not in any version of the C
       standard).  *Note Options Controlling C Dialect: C Dialect Options.
  
!      ‘-Wformat=1’
!      ‘-Wformat’
!           Option ‘-Wformat’ is equivalent to ‘-Wformat=1’, and
!           ‘-Wno-format’ is equivalent to ‘-Wformat=0’.  Since ‘-Wformat’
            also checks for null format arguments for several functions,
!           ‘-Wformat’ also implies ‘-Wnonnull’.  Some aspects of this
            level of format checking can be disabled by the options:
!           ‘-Wno-format-contains-nul’, ‘-Wno-format-extra-args’, and
!           ‘-Wno-format-zero-length’.  ‘-Wformat’ is enabled by ‘-Wall’.
  
!      ‘-Wformat=2’
!           Enable ‘-Wformat’ plus additional format checks.  Currently
!           equivalent to ‘-Wformat -Wformat-nonliteral -Wformat-security
!           -Wformat-y2k’.
  
! ‘-Wno-format-contains-nul’
!      If ‘-Wformat’ is specified, do not warn about format strings that
       contain NUL bytes.
  
! ‘-Wno-format-extra-args’
!      If ‘-Wformat’ is specified, do not warn about excess arguments to a
!      ‘printf’ or ‘scanf’ format function.  The C standard specifies that
       such arguments are ignored.
  
       Where the unused arguments lie between used arguments that are
!      specified with ‘$’ operand number specifications, normally warnings
       are still given, since the implementation could not know what type
!      to pass to ‘va_arg’ to skip the unused arguments.  However, in the
!      case of ‘scanf’ formats, this option suppresses the warning if the
       unused arguments are all pointers, since the Single Unix
       Specification says that such unused arguments are allowed.
  
! ‘-Wformat-overflow’
! ‘-Wformat-overflow=LEVEL’
       Warn about calls to formatted input/output functions such as
!      ‘sprintf’ and ‘vsprintf’ that might overflow the destination
       buffer.  When the exact number of bytes written by a format
       directive cannot be determined at compile-time it is estimated
       based on heuristics that depend on the LEVEL argument and on
*************** warnings, in some cases it may also caus
*** 6356,6364 ****
       improve the accuracy of the warning, it may also result in false
       positives.
  
!      '-Wformat-overflow'
!      '-Wformat-overflow=1'
!           Level 1 of '-Wformat-overflow' enabled by '-Wformat' employs a
            conservative approach that warns only about calls that most
            likely overflow the buffer.  At this level, numeric arguments
            to format directives with unknown values are assumed to have
--- 6360,6368 ----
       improve the accuracy of the warning, it may also result in false
       positives.
  
!      ‘-Wformat-overflow’
!      ‘-Wformat-overflow=1’
!           Level 1 of ‘-Wformat-overflow’ enabled by ‘-Wformat’ employs a
            conservative approach that warns only about calls that most
            likely overflow the buffer.  At this level, numeric arguments
            to format directives with unknown values are assumed to have
*************** warnings, in some cases it may also caus
*** 6368,6376 ****
            either by their directive's precision or by a finite set of
            string literals, are assumed to take on the value within the
            range that results in the most bytes on output.  For example,
!           the call to 'sprintf' below is diagnosed because even with
            both A and B equal to zero, the terminating NUL character
!           (''\0'') appended by the function to the destination buffer
            will be written past its end.  Increasing the size of the
            buffer by a single byte is sufficient to avoid the warning,
            though it may not be sufficient to avoid the overflow.
--- 6372,6380 ----
            either by their directive's precision or by a finite set of
            string literals, are assumed to take on the value within the
            range that results in the most bytes on output.  For example,
!           the call to ‘sprintf’ below is diagnosed because even with
            both A and B equal to zero, the terminating NUL character
!           (‘'\0'’) appended by the function to the destination buffer
            will be written past its end.  Increasing the size of the
            buffer by a single byte is sufficient to avoid the warning,
            though it may not be sufficient to avoid the overflow.
*************** warnings, in some cases it may also caus
*** 6381,6387 ****
                   sprintf (buf, "a = %i, b = %i\n", a, b);
                 }
  
!      '-Wformat-overflow=2'
            Level 2 warns also about calls that might overflow the
            destination buffer given an argument of sufficient length or
            magnitude.  At level 2, unknown numeric arguments are assumed
--- 6385,6391 ----
                   sprintf (buf, "a = %i, b = %i\n", a, b);
                 }
  
!      ‘-Wformat-overflow=2’
            Level 2 warns also about calls that might overflow the
            destination buffer given an argument of sufficient length or
            magnitude.  At level 2, unknown numeric arguments are assumed
*************** warnings, in some cases it may also caus
*** 6394,6401 ****
            character long.
  
            At level 2, the call in the example above is again diagnosed,
!           but this time because with A equal to a 32-bit 'INT_MIN' the
!           first '%i' directive will write some of its digits beyond the
            end of the destination buffer.  To make the call safe
            regardless of the values of the two variables, the size of the
            destination buffer must be increased to at least 34 bytes.
--- 6398,6405 ----
            character long.
  
            At level 2, the call in the example above is again diagnosed,
!           but this time because with A equal to a 32-bit ‘INT_MIN’ the
!           first ‘%i’ directive will write some of its digits beyond the
            end of the destination buffer.  To make the call safe
            regardless of the values of the two variables, the size of the
            destination buffer must be increased to at least 34 bytes.
*************** warnings, in some cases it may also caus
*** 6411,6418 ****
            appropriate length modifier to the format specifier will
            reduce the required buffer size.  For example, if A and B in
            the example above can be assumed to be within the precision of
!           the 'short int' type then using either the '%hi' format
!           directive or casting the argument to 'short' reduces the
            maximum required size of the buffer to 24 bytes.
  
                 void f (int a, int b)
--- 6415,6422 ----
            appropriate length modifier to the format specifier will
            reduce the required buffer size.  For example, if A and B in
            the example above can be assumed to be within the precision of
!           the ‘short int’ type then using either the ‘%hi’ format
!           directive or casting the argument to ‘short’ reduces the
            maximum required size of the buffer to 24 bytes.
  
                 void f (int a, int b)
*************** warnings, in some cases it may also caus
*** 6421,6500 ****
                   sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
                 }
  
! '-Wno-format-zero-length'
!      If '-Wformat' is specified, do not warn about zero-length formats.
       The C standard specifies that zero-length formats are allowed.
  
! '-Wformat-nonliteral'
!      If '-Wformat' is specified, also warn if the format string is not a
       string literal and so cannot be checked, unless the format function
!      takes its format arguments as a 'va_list'.
  
! '-Wformat-security'
!      If '-Wformat' is specified, also warn about uses of format
       functions that represent possible security problems.  At present,
!      this warns about calls to 'printf' and 'scanf' functions where the
       format string is not a string literal and there are no format
!      arguments, as in 'printf (foo);'.  This may be a security hole if
!      the format string came from untrusted input and contains '%n'.
!      (This is currently a subset of what '-Wformat-nonliteral' warns
!      about, but in future warnings may be added to '-Wformat-security'
!      that are not included in '-Wformat-nonliteral'.)
  
! '-Wformat-signedness'
!      If '-Wformat' is specified, also warn if the format string requires
       an unsigned argument and the argument is signed and vice versa.
  
! '-Wformat-truncation'
! '-Wformat-truncation=LEVEL'
       Warn about calls to formatted input/output functions such as
!      'snprintf' and 'vsnprintf' that might result in output truncation.
       When the exact number of bytes written by a format directive cannot
       be determined at compile-time it is estimated based on heuristics
       that depend on the LEVEL argument and on optimization.  While
       enabling optimization will in most cases improve the accuracy of
       the warning, it may also result in false positives.  Except as
       noted otherwise, the option uses the same logic
!      '-Wformat-overflow'.
  
!      '-Wformat-truncation'
!      '-Wformat-truncation=1'
!           Level 1 of '-Wformat-truncation' enabled by '-Wformat' employs
            a conservative approach that warns only about calls to bounded
            functions whose return value is unused and that will most
            likely result in output truncation.
  
!      '-Wformat-truncation=2'
            Level 2 warns also about calls to bounded functions whose
            return value is used and that might result in truncation given
            an argument of sufficient length or magnitude.
  
! '-Wformat-y2k'
!      If '-Wformat' is specified, also warn about 'strftime' formats that
       may yield only a two-digit year.
  
! '-Wnonnull'
       Warn about passing a null pointer for arguments marked as requiring
!      a non-null value by the 'nonnull' function attribute.
  
!      '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
!      disabled with the '-Wno-nonnull' option.
  
! '-Wnonnull-compare'
!      Warn when comparing an argument marked with the 'nonnull' function
       attribute against null inside the function.
  
!      '-Wnonnull-compare' is included in '-Wall'.  It can be disabled
!      with the '-Wno-nonnull-compare' option.
  
! '-Wnull-dereference'
       Warn if the compiler detects paths that trigger erroneous or
       undefined behavior due to dereferencing a null pointer.  This
!      option is only active when '-fdelete-null-pointer-checks' is
       active, which is enabled by optimizations in most targets.  The
       precision of the warnings depends on the optimization options used.
  
! '-Wnrvo (C++ and Objective-C++ only)'
       Warn if the compiler does not elide the copy from a local variable
       to the return value of a function in a context where it is allowed
       by [class.copy.elision].  This elision is commonly known as the
--- 6425,6504 ----
                   sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
                 }
  
! ‘-Wno-format-zero-length’
!      If ‘-Wformat’ is specified, do not warn about zero-length formats.
       The C standard specifies that zero-length formats are allowed.
  
! ‘-Wformat-nonliteral’
!      If ‘-Wformat’ is specified, also warn if the format string is not a
       string literal and so cannot be checked, unless the format function
!      takes its format arguments as a ‘va_list’.
  
! ‘-Wformat-security’
!      If ‘-Wformat’ is specified, also warn about uses of format
       functions that represent possible security problems.  At present,
!      this warns about calls to ‘printf’ and ‘scanf’ functions where the
       format string is not a string literal and there are no format
!      arguments, as in ‘printf (foo);’.  This may be a security hole if
!      the format string came from untrusted input and contains ‘%n’.
!      (This is currently a subset of what ‘-Wformat-nonliteral’ warns
!      about, but in future warnings may be added to ‘-Wformat-security’
!      that are not included in ‘-Wformat-nonliteral’.)
  
! ‘-Wformat-signedness’
!      If ‘-Wformat’ is specified, also warn if the format string requires
       an unsigned argument and the argument is signed and vice versa.
  
! ‘-Wformat-truncation’
! ‘-Wformat-truncation=LEVEL’
       Warn about calls to formatted input/output functions such as
!      ‘snprintf’ and ‘vsnprintf’ that might result in output truncation.
       When the exact number of bytes written by a format directive cannot
       be determined at compile-time it is estimated based on heuristics
       that depend on the LEVEL argument and on optimization.  While
       enabling optimization will in most cases improve the accuracy of
       the warning, it may also result in false positives.  Except as
       noted otherwise, the option uses the same logic
!      ‘-Wformat-overflow’.
  
!      ‘-Wformat-truncation’
!      ‘-Wformat-truncation=1’
!           Level 1 of ‘-Wformat-truncation’ enabled by ‘-Wformat’ employs
            a conservative approach that warns only about calls to bounded
            functions whose return value is unused and that will most
            likely result in output truncation.
  
!      ‘-Wformat-truncation=2’
            Level 2 warns also about calls to bounded functions whose
            return value is used and that might result in truncation given
            an argument of sufficient length or magnitude.
  
! ‘-Wformat-y2k’
!      If ‘-Wformat’ is specified, also warn about ‘strftime’ formats that
       may yield only a two-digit year.
  
! ‘-Wnonnull’
       Warn about passing a null pointer for arguments marked as requiring
!      a non-null value by the ‘nonnull’ function attribute.
  
!      ‘-Wnonnull’ is included in ‘-Wall’ and ‘-Wformat’.  It can be
!      disabled with the ‘-Wno-nonnull’ option.
  
! ‘-Wnonnull-compare’
!      Warn when comparing an argument marked with the ‘nonnull’ function
       attribute against null inside the function.
  
!      ‘-Wnonnull-compare’ is included in ‘-Wall’.  It can be disabled
!      with the ‘-Wno-nonnull-compare’ option.
  
! ‘-Wnull-dereference’
       Warn if the compiler detects paths that trigger erroneous or
       undefined behavior due to dereferencing a null pointer.  This
!      option is only active when ‘-fdelete-null-pointer-checks’ is
       active, which is enabled by optimizations in most targets.  The
       precision of the warnings depends on the optimization options used.
  
! ‘-Wnrvo (C++ and Objective-C++ only)’
       Warn if the compiler does not elide the copy from a local variable
       to the return value of a function in a context where it is allowed
       by [class.copy.elision].  This elision is commonly known as the
*************** warnings, in some cases it may also caus
*** 6510,6580 ****
              else return v2; // warning: not eliding copy
            }
  
! '-Winfinite-recursion'
       Warn about infinitely recursive calls.  The warning is effective at
       all optimization levels but requires optimization in order to
       detect infinite recursion in calls between two or more functions.
!      '-Winfinite-recursion' is included in '-Wall'.
  
!      Compare with '-Wanalyzer-infinite-recursion' which provides a
       similar diagnostic, but is implemented in a different way (as part
!      of '-fanalyzer').
  
! '-Winit-self (C, C++, Objective-C and Objective-C++ only)'
       Warn about uninitialized variables that are initialized with
       themselves.  Note this option can only be used with the
!      '-Wuninitialized' option.
  
!      For example, GCC warns about 'i' being uninitialized in the
!      following snippet only when '-Winit-self' has been specified:
            int f()
            {
              int i = i;
              return i;
            }
  
!      This warning is enabled by '-Wall' in C++.
  
! '-Wno-implicit-int (C and Objective-C only)'
       This option controls warnings when a declaration does not specify a
       type.  This warning is enabled by default, as an error, in C99 and
!      later dialects of C, and also by '-Wall'.  The error can be
!      downgraded to a warning using '-fpermissive' (along with certain
       other errors), or for this error alone, with
!      '-Wno-error=implicit-int'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wno-implicit-function-declaration (C and Objective-C only)'
       This option controls warnings when a function is used before being
       declared.  This warning is enabled by default, as an error, in C99
!      and later dialects of C, and also by '-Wall'.  The error can be
!      downgraded to a warning using '-fpermissive' (along with certain
       other errors), or for this error alone, with
!      '-Wno-error=implicit-function-declaration'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wimplicit (C and Objective-C only)'
!      Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
!      This warning is enabled by '-Wall'.
  
! '-Whardened'
!      Warn when '-fhardened' did not enable an option from its set (for
!      which see '-fhardened').  For instance, using '-fhardened' and
!      '-fstack-protector' at the same time on the command line causes
!      '-Whardened' to warn because '-fstack-protector-strong' will not be
!      enabled by '-fhardened'.
  
       This warning is enabled by default and has effect only when
!      '-fhardened' is enabled.
  
! '-Wimplicit-fallthrough'
!      '-Wimplicit-fallthrough' is the same as '-Wimplicit-fallthrough=3'
!      and '-Wno-implicit-fallthrough' is the same as
!      '-Wimplicit-fallthrough=0'.
  
! '-Wimplicit-fallthrough=N'
       Warn when a switch case falls through.  For example:
  
            switch (cond)
--- 6514,6584 ----
              else return v2; // warning: not eliding copy
            }
  
! ‘-Winfinite-recursion’
       Warn about infinitely recursive calls.  The warning is effective at
       all optimization levels but requires optimization in order to
       detect infinite recursion in calls between two or more functions.
!      ‘-Winfinite-recursion’ is included in ‘-Wall’.
  
!      Compare with ‘-Wanalyzer-infinite-recursion’ which provides a
       similar diagnostic, but is implemented in a different way (as part
!      of ‘-fanalyzer’).
  
! ‘-Winit-self (C, C++, Objective-C and Objective-C++ only)’
       Warn about uninitialized variables that are initialized with
       themselves.  Note this option can only be used with the
!      ‘-Wuninitialized’ option.
  
!      For example, GCC warns about ‘i’ being uninitialized in the
!      following snippet only when ‘-Winit-self’ has been specified:
            int f()
            {
              int i = i;
              return i;
            }
  
!      This warning is enabled by ‘-Wall’ in C++.
  
! ‘-Wno-implicit-int (C and Objective-C only)’
       This option controls warnings when a declaration does not specify a
       type.  This warning is enabled by default, as an error, in C99 and
!      later dialects of C, and also by ‘-Wall’.  The error can be
!      downgraded to a warning using ‘-fpermissive’ (along with certain
       other errors), or for this error alone, with
!      ‘-Wno-error=implicit-int’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wno-implicit-function-declaration (C and Objective-C only)’
       This option controls warnings when a function is used before being
       declared.  This warning is enabled by default, as an error, in C99
!      and later dialects of C, and also by ‘-Wall’.  The error can be
!      downgraded to a warning using ‘-fpermissive’ (along with certain
       other errors), or for this error alone, with
!      ‘-Wno-error=implicit-function-declaration’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wimplicit (C and Objective-C only)’
!      Same as ‘-Wimplicit-int’ and ‘-Wimplicit-function-declaration’.
!      This warning is enabled by ‘-Wall’.
  
! ‘-Whardened’
!      Warn when ‘-fhardened’ did not enable an option from its set (for
!      which see ‘-fhardened’).  For instance, using ‘-fhardened’ and
!      ‘-fstack-protector’ at the same time on the command line causes
!      ‘-Whardened’ to warn because ‘-fstack-protector-strong’ will not be
!      enabled by ‘-fhardened’.
  
       This warning is enabled by default and has effect only when
!      ‘-fhardened’ is enabled.
  
! ‘-Wimplicit-fallthrough’
!      ‘-Wimplicit-fallthrough’ is the same as ‘-Wimplicit-fallthrough=3’
!      and ‘-Wno-implicit-fallthrough’ is the same as
!      ‘-Wimplicit-fallthrough=0’.
  
! ‘-Wimplicit-fallthrough=N’
       Warn when a switch case falls through.  For example:
  
            switch (cond)
*************** warnings, in some cases it may also caus
*** 6592,6598 ****
       This warning does not warn when the last statement of a case cannot
       fall through, e.g.  when there is a return statement or a call to
       function declared with the noreturn attribute.
!      '-Wimplicit-fallthrough=' also takes into account control flow
       statements, such as ifs, and only warns when appropriate.  E.g.
  
            switch (cond)
--- 6596,6602 ----
       This warning does not warn when the last statement of a case cannot
       fall through, e.g.  when there is a return statement or a call to
       function declared with the noreturn attribute.
!      ‘-Wimplicit-fallthrough=’ also takes into account control flow
       statements, such as ifs, and only warns when appropriate.  E.g.
  
            switch (cond)
*************** warnings, in some cases it may also caus
*** 6610,6617 ****
              }
  
       Since there are occasions where a switch case fall through is
!      desirable, GCC provides an attribute, '__attribute__
!      ((fallthrough))', that is to be used along with a null statement to
       suppress this warning that would normally occur:
  
            switch (cond)
--- 6614,6621 ----
              }
  
       Since there are occasions where a switch case fall through is
!      desirable, GCC provides an attribute, ‘__attribute__
!      ((fallthrough))’, that is to be used along with a null statement to
       suppress this warning that would normally occur:
  
            switch (cond)
*************** warnings, in some cases it may also caus
*** 6624,6680 ****
              }
  
       C++17 provides a standard way to suppress the
!      '-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
       of the GNU attribute.  In C++11 or C++14 users can use
!      '[[gnu::fallthrough]];', which is a GNU extension.  Instead of
       these attributes, it is also possible to add a fallthrough comment
       to silence the warning.  The whole body of the C or C++ style
       comment should match the given regular expressions listed below.
       The option argument N specifies what kind of comments are accepted:
  
!         * '-Wimplicit-fallthrough=0' disables the warning altogether.
  
!         * '-Wimplicit-fallthrough=1' matches '.*' regular expression,
            any comment is used as fallthrough comment.
  
!         * '-Wimplicit-fallthrough=2' case insensitively matches
!           '.*falls?[ \t-]*thr(ough|u).*' regular expression.
  
!         * '-Wimplicit-fallthrough=3' case sensitively matches one of the
            following regular expressions:
  
!              * '-fallthrough'
  
!              * '@fallthrough@'
  
!              * 'lint -fallthrough[ \t]*'
  
!              * '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
!                FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
  
!              * '[ \t.!]*(Else,? |Intentional(ly)? )?
!                Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
  
!              * '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
!                fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
  
!         * '-Wimplicit-fallthrough=4' case sensitively matches one of the
            following regular expressions:
  
!              * '-fallthrough'
  
!              * '@fallthrough@'
  
!              * 'lint -fallthrough[ \t]*'
  
!              * '[ \t]*FALLTHR(OUGH|U)[ \t]*'
  
!         * '-Wimplicit-fallthrough=5' doesn't recognize any comments as
            fallthrough comments, only attributes disable the warning.
  
       The comment needs to be followed after optional whitespace and
!      other comments by 'case' or 'default' keywords or by a user label
!      that precedes some 'case' or 'default' label.
  
            switch (cond)
              {
--- 6628,6684 ----
              }
  
       C++17 provides a standard way to suppress the
!      ‘-Wimplicit-fallthrough’ warning using ‘[[fallthrough]];’ instead
       of the GNU attribute.  In C++11 or C++14 users can use
!      ‘[[gnu::fallthrough]];’, which is a GNU extension.  Instead of
       these attributes, it is also possible to add a fallthrough comment
       to silence the warning.  The whole body of the C or C++ style
       comment should match the given regular expressions listed below.
       The option argument N specifies what kind of comments are accepted:
  
!         • ‘-Wimplicit-fallthrough=0’ disables the warning altogether.
  
!         • ‘-Wimplicit-fallthrough=1’ matches ‘.*’ regular expression,
            any comment is used as fallthrough comment.
  
!         • ‘-Wimplicit-fallthrough=2’ case insensitively matches
!           ‘.*falls?[ \t-]*thr(ough|u).*’ regular expression.
  
!         • ‘-Wimplicit-fallthrough=3’ case sensitively matches one of the
            following regular expressions:
  
!              • ‘-fallthrough’
  
!              • ‘@fallthrough@’
  
!              • ‘lint -fallthrough[ \t]*’
  
!              • ‘[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
!                FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?’
  
!              • ‘[ \t.!]*(Else,? |Intentional(ly)? )?
!                Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?’
  
!              • ‘[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
!                fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?’
  
!         • ‘-Wimplicit-fallthrough=4’ case sensitively matches one of the
            following regular expressions:
  
!              • ‘-fallthrough’
  
!              • ‘@fallthrough@’
  
!              • ‘lint -fallthrough[ \t]*’
  
!              • ‘[ \t]*FALLTHR(OUGH|U)[ \t]*’
  
!         • ‘-Wimplicit-fallthrough=5’ doesn't recognize any comments as
            fallthrough comments, only attributes disable the warning.
  
       The comment needs to be followed after optional whitespace and
!      other comments by ‘case’ or ‘default’ keywords or by a user label
!      that precedes some ‘case’ or ‘default’ label.
  
            switch (cond)
              {
*************** warnings, in some cases it may also caus
*** 6685,6727 ****
                ...
              }
  
!      The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
  
! '-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)'
!      Control if warnings triggered by the 'warn_if_not_aligned'
       attribute should be issued.  These warnings are enabled by default.
  
! '-Wignored-qualifiers (C and C++ only)'
       Warn if the return type of a function has a type qualifier such as
!      'const'.  For ISO C such a type qualifier has no effect, since the
       value returned by a function is not an lvalue.  For C++, the
!      warning is only emitted for scalar types or 'void'.  ISO C
!      prohibits qualified 'void' return types on function definitions, so
       such return types always receive a warning even without this
       option.
  
!      This warning is also enabled by '-Wextra'.
  
! '-Wno-ignored-attributes (C and C++ only)'
       This option controls warnings when an attribute is ignored.  This
!      is different from the '-Wattributes' option in that it warns
       whenever the compiler decides to drop an attribute, not that the
       attribute is either unknown, used in a wrong place, etc.  This
       warning is enabled by default.
  
! '-Wmain'
!      Warn if the type of 'main' is suspicious.  'main' should be a
       function with external linkage, returning int, taking either zero
       arguments, two, or three arguments of appropriate types.  This
       warning is enabled by default in C++ and is enabled by either
!      '-Wall' or '-Wpedantic'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wmisleading-indentation (C and C++ only)'
       Warn when the indentation of the code does not reflect the block
!      structure.  Specifically, a warning is issued for 'if', 'else',
!      'while', and 'for' clauses with a guarded statement that does not
       use braces, followed by an unguarded statement with the same
       indentation.
  
--- 6689,6731 ----
                ...
              }
  
!      The ‘-Wimplicit-fallthrough=3’ warning is enabled by ‘-Wextra’.
  
! ‘-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)’
!      Control if warnings triggered by the ‘warn_if_not_aligned’
       attribute should be issued.  These warnings are enabled by default.
  
! ‘-Wignored-qualifiers (C and C++ only)’
       Warn if the return type of a function has a type qualifier such as
!      ‘const’.  For ISO C such a type qualifier has no effect, since the
       value returned by a function is not an lvalue.  For C++, the
!      warning is only emitted for scalar types or ‘void’.  ISO C
!      prohibits qualified ‘void’ return types on function definitions, so
       such return types always receive a warning even without this
       option.
  
!      This warning is also enabled by ‘-Wextra’.
  
! ‘-Wno-ignored-attributes (C and C++ only)’
       This option controls warnings when an attribute is ignored.  This
!      is different from the ‘-Wattributes’ option in that it warns
       whenever the compiler decides to drop an attribute, not that the
       attribute is either unknown, used in a wrong place, etc.  This
       warning is enabled by default.
  
! ‘-Wmain’
!      Warn if the type of ‘main’ is suspicious.  ‘main’ should be a
       function with external linkage, returning int, taking either zero
       arguments, two, or three arguments of appropriate types.  This
       warning is enabled by default in C++ and is enabled by either
!      ‘-Wall’ or ‘-Wpedantic’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wmisleading-indentation (C and C++ only)’
       Warn when the indentation of the code does not reflect the block
!      structure.  Specifically, a warning is issued for ‘if’, ‘else’,
!      ‘while’, and ‘for’ clauses with a guarded statement that does not
       use braces, followed by an unguarded statement with the same
       indentation.
  
*************** warnings, in some cases it may also caus
*** 6733,6739 ****
                bar ();  /* Gotcha: this is not guarded by the "if".  */
  
       In the case of mixed tabs and spaces, the warning uses the
!      '-ftabstop=' option to determine if the statements line up
       (defaulting to 8).
  
       The warning is not issued for code involving multiline preprocessor
--- 6737,6743 ----
                bar ();  /* Gotcha: this is not guarded by the "if".  */
  
       In the case of mixed tabs and spaces, the warning uses the
!      ‘-ftabstop=’ option to determine if the statements line up
       (defaulting to 8).
  
       The warning is not issued for code involving multiline preprocessor
*************** warnings, in some cases it may also caus
*** 6746,6758 ****
            #endif
                foo (1);
  
!      The warning is not issued after a '#line' directive, since this
       typically indicates autogenerated code, and no assumptions can be
       made about the layout of the file that the directive references.
  
!      This warning is enabled by '-Wall' in C and C++.
  
! '-Wmissing-attributes'
       Warn when a declaration of a function is missing one or more
       attributes that a related function is declared with and whose
       absence may adversely affect the correctness or efficiency of
--- 6750,6762 ----
            #endif
                foo (1);
  
!      The warning is not issued after a ‘#line’ directive, since this
       typically indicates autogenerated code, and no assumptions can be
       made about the layout of the file that the directive references.
  
!      This warning is enabled by ‘-Wall’ in C and C++.
  
! ‘-Wmissing-attributes’
       Warn when a declaration of a function is missing one or more
       attributes that a related function is declared with and whose
       absence may adversely affect the correctness or efficiency of
*************** warnings, in some cases it may also caus
*** 6760,6790 ****
       declarations of aliases that use attributes to specify less
       restrictive requirements than those of their targets.  This
       typically represents a potential optimization opportunity.  By
!      contrast, the '-Wattribute-alias=2' option controls warnings issued
       when the alias is more restrictive than the target, which could
       lead to incorrect code generation.  Attributes considered include
!      'alloc_align', 'alloc_size', 'cold', 'const', 'hot', 'leaf',
!      'malloc', 'nonnull', 'noreturn', 'nothrow', 'pure',
!      'returns_nonnull', and 'returns_twice'.
  
       In C++, the warning is issued when an explicit specialization of a
!      primary template declared with attribute 'alloc_align',
!      'alloc_size', 'assume_aligned', 'format', 'format_arg', 'malloc',
!      or 'nonnull' is declared without it.  Attributes 'deprecated',
!      'error', and 'warning' suppress the warning.  (*note Function
       Attributes::).
  
!      You can use the 'copy' attribute to apply the same set of
       attributes to a declaration as that on another declaration without
       explicitly enumerating the attributes.  This attribute can be
       applied to declarations of functions (*note Common Function
       Attributes::), variables (*note Common Variable Attributes::), or
       types (*note Common Type Attributes::).
  
!      '-Wmissing-attributes' is enabled by '-Wall'.
  
       For example, since the declaration of the primary function template
!      below makes use of both attribute 'malloc' and 'alloc_size' the
       declaration of the explicit specialization of the template is
       diagnosed because it is missing one of the attributes.
  
--- 6764,6794 ----
       declarations of aliases that use attributes to specify less
       restrictive requirements than those of their targets.  This
       typically represents a potential optimization opportunity.  By
!      contrast, the ‘-Wattribute-alias=2’ option controls warnings issued
       when the alias is more restrictive than the target, which could
       lead to incorrect code generation.  Attributes considered include
!      ‘alloc_align’, ‘alloc_size’, ‘cold’, ‘const’, ‘hot’, ‘leaf’,
!      ‘malloc’, ‘nonnull’, ‘noreturn’, ‘nothrow’, ‘pure’,
!      ‘returns_nonnull’, and ‘returns_twice’.
  
       In C++, the warning is issued when an explicit specialization of a
!      primary template declared with attribute ‘alloc_align’,
!      ‘alloc_size’, ‘assume_aligned’, ‘format’, ‘format_arg’, ‘malloc’,
!      or ‘nonnull’ is declared without it.  Attributes ‘deprecated’,
!      ‘error’, and ‘warning’ suppress the warning.  (*note Function
       Attributes::).
  
!      You can use the ‘copy’ attribute to apply the same set of
       attributes to a declaration as that on another declaration without
       explicitly enumerating the attributes.  This attribute can be
       applied to declarations of functions (*note Common Function
       Attributes::), variables (*note Common Variable Attributes::), or
       types (*note Common Type Attributes::).
  
!      ‘-Wmissing-attributes’ is enabled by ‘-Wall’.
  
       For example, since the declaration of the primary function template
!      below makes use of both attribute ‘malloc’ and ‘alloc_size’ the
       declaration of the explicit specialization of the template is
       diagnosed because it is missing one of the attributes.
  
*************** warnings, in some cases it may also caus
*** 6796,6822 ****
            void* __attribute__ ((malloc))   // missing alloc_size
            allocate<void> (size_t);
  
! '-Wmissing-braces'
       Warn if an aggregate or union initializer is not fully bracketed.
!      In the following example, the initializer for 'a' is not fully
!      bracketed, but that for 'b' is fully bracketed.
  
            int a[2][2] = { 0, 1, 2, 3 };
            int b[2][2] = { { 0, 1 }, { 2, 3 } };
  
!      This warning is enabled by '-Wall'.
  
! '-Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran only)'
       Warn if a user-supplied include directory does not exist.  This
       option is disabled by default for C, C++, Objective-C and
       Objective-C++.  For Fortran, it is partially enabled by default by
       warning for -I and -J, only.
  
! '-Wno-missing-profile'
       This option controls warnings if feedback profiles are missing when
!      using the '-fprofile-use' option.  This option diagnoses those
       cases where a new function or a new file is added between compiling
!      with '-fprofile-generate' and with '-fprofile-use', without
       regenerating the profiles.  In these cases, the profile feedback
       data files do not contain any profile feedback information for the
       newly added function or file respectively.  Also, in the case when
--- 6800,6826 ----
            void* __attribute__ ((malloc))   // missing alloc_size
            allocate<void> (size_t);
  
! ‘-Wmissing-braces’
       Warn if an aggregate or union initializer is not fully bracketed.
!      In the following example, the initializer for ‘a’ is not fully
!      bracketed, but that for ‘b’ is fully bracketed.
  
            int a[2][2] = { 0, 1, 2, 3 };
            int b[2][2] = { { 0, 1 }, { 2, 3 } };
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran only)’
       Warn if a user-supplied include directory does not exist.  This
       option is disabled by default for C, C++, Objective-C and
       Objective-C++.  For Fortran, it is partially enabled by default by
       warning for -I and -J, only.
  
! ‘-Wno-missing-profile’
       This option controls warnings if feedback profiles are missing when
!      using the ‘-fprofile-use’ option.  This option diagnoses those
       cases where a new function or a new file is added between compiling
!      with ‘-fprofile-generate’ and with ‘-fprofile-use’, without
       regenerating the profiles.  In these cases, the profile feedback
       data files do not contain any profile feedback information for the
       newly added function or file respectively.  Also, in the case when
*************** warnings, in some cases it may also caus
*** 6824,6845 ****
       profile feedback information.  In all these cases, warnings are
       issued to inform you that a profile generation step is due.
       Ignoring the warning can result in poorly optimized code.
!      '-Wno-missing-profile' can be used to disable the warning, but this
       is not recommended and should be done only when non-existent
       profile data is justified.
  
! '-Wmismatched-dealloc'
  
       Warn for calls to deallocation functions with pointer arguments
       returned from allocation functions for which the former isn't a
       suitable deallocator.  A pair of functions can be associated as
!      matching allocators and deallocators by use of attribute 'malloc'.
!      Unless disabled by the '-fno-builtin' option the standard functions
!      'calloc', 'malloc', 'realloc', and 'free', as well as the
!      corresponding forms of C++ 'operator new' and 'operator delete' are
       implicitly associated as matching allocators and deallocators.  In
!      the following example 'mydealloc' is the deallocator for pointers
!      returned from 'myalloc'.
  
            void mydealloc (void*);
  
--- 6828,6849 ----
       profile feedback information.  In all these cases, warnings are
       issued to inform you that a profile generation step is due.
       Ignoring the warning can result in poorly optimized code.
!      ‘-Wno-missing-profile’ can be used to disable the warning, but this
       is not recommended and should be done only when non-existent
       profile data is justified.
  
! ‘-Wmismatched-dealloc’
  
       Warn for calls to deallocation functions with pointer arguments
       returned from allocation functions for which the former isn't a
       suitable deallocator.  A pair of functions can be associated as
!      matching allocators and deallocators by use of attribute ‘malloc’.
!      Unless disabled by the ‘-fno-builtin’ option the standard functions
!      ‘calloc’, ‘malloc’, ‘realloc’, and ‘free’, as well as the
!      corresponding forms of C++ ‘operator new’ and ‘operator delete’ are
       implicitly associated as matching allocators and deallocators.  In
!      the following example ‘mydealloc’ is the deallocator for pointers
!      returned from ‘myalloc’.
  
            void mydealloc (void*);
  
*************** warnings, in some cases it may also caus
*** 6854,6868 ****
              mydealloc (p);   // ok
            }
  
!      In C++, the related option '-Wmismatched-new-delete' diagnoses
!      mismatches involving either 'operator new' or 'operator delete'.
  
!      Option '-Wmismatched-dealloc' is included in '-Wall'.
  
! '-Wmultistatement-macros'
       Warn about unsafe multiple statement macros that appear to be
!      guarded by a clause such as 'if', 'else', 'for', 'switch', or
!      'while', in which only the first statement is actually guarded
       after the macro is expanded.
  
       For example:
--- 6858,6872 ----
              mydealloc (p);   // ok
            }
  
!      In C++, the related option ‘-Wmismatched-new-delete’ diagnoses
!      mismatches involving either ‘operator new’ or ‘operator delete’.
  
!      Option ‘-Wmismatched-dealloc’ is included in ‘-Wall’.
  
! ‘-Wmultistatement-macros’
       Warn about unsafe multiple statement macros that appear to be
!      guarded by a clause such as ‘if’, ‘else’, ‘for’, ‘switch’, or
!      ‘while’, in which only the first statement is actually guarded
       after the macro is expanded.
  
       For example:
*************** warnings, in some cases it may also caus
*** 6871,6896 ****
            if (c)
              DOIT;
  
!      will increment 'y' unconditionally, not just when 'c' holds.  The
       can usually be fixed by wrapping the macro in a do-while loop:
            #define DOIT do { x++; y++; } while (0)
            if (c)
              DOIT;
  
!      This warning is enabled by '-Wall' in C and C++.
  
! '-Wparentheses'
       Warn if parentheses are omitted in certain contexts, such as when
       there is an assignment in a context where a truth value is
       expected, or when operators are nested whose precedence people
       often get confused about.
  
!      Also warn if a comparison like 'x<=y<=z' appears; this is
!      equivalent to '(x<=y ? 1 : 0) <= z', which is a different
       interpretation from that of ordinary mathematical notation.
  
!      Also warn for dangerous uses of the GNU extension to '?:' with
!      omitted middle operand.  When the condition in the '?': operator is
       a boolean expression, the omitted value is always 1.  Often
       programmers expect it to be a value computed inside the conditional
       expression instead.
--- 6875,6900 ----
            if (c)
              DOIT;
  
!      will increment ‘y’ unconditionally, not just when ‘c’ holds.  The
       can usually be fixed by wrapping the macro in a do-while loop:
            #define DOIT do { x++; y++; } while (0)
            if (c)
              DOIT;
  
!      This warning is enabled by ‘-Wall’ in C and C++.
  
! ‘-Wparentheses’
       Warn if parentheses are omitted in certain contexts, such as when
       there is an assignment in a context where a truth value is
       expected, or when operators are nested whose precedence people
       often get confused about.
  
!      Also warn if a comparison like ‘x<=y<=z’ appears; this is
!      equivalent to ‘(x<=y ? 1 : 0) <= z’, which is a different
       interpretation from that of ordinary mathematical notation.
  
!      Also warn for dangerous uses of the GNU extension to ‘?:’ with
!      omitted middle operand.  When the condition in the ‘?’: operator is
       a boolean expression, the omitted value is always 1.  Often
       programmers expect it to be a value computed inside the conditional
       expression instead.
*************** warnings, in some cases it may also caus
*** 6904,6914 ****
              // User meant std::unique_lock<std::mutex> lock (mymutex);
            }
  
!      This warning is enabled by '-Wall'.
  
! '-Wno-self-move (C++ and Objective-C++ only)'
       This warning warns when a value is moved to itself with
!      'std::move'.  Such a 'std::move' typically has no effect.
  
            struct T {
            ...
--- 6908,6918 ----
              // User meant std::unique_lock<std::mutex> lock (mymutex);
            }
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wno-self-move (C++ and Objective-C++ only)’
       This warning warns when a value is moved to itself with
!      ‘std::move’.  Such a ‘std::move’ typically has no effect.
  
            struct T {
            ...
*************** warnings, in some cases it may also caus
*** 6920,6938 ****
              t = std::move (t);
            }
  
!      This warning is enabled by '-Wall'.
  
! '-Wsequence-point'
       Warn about code that may have undefined semantics because of
       violations of sequence point rules in the C and C++ standards.
  
       The C and C++ standards define the order in which expressions in a
!      C/C++ program are evaluated in terms of "sequence points", which
       represent a partial ordering between the execution of parts of the
       program: those executed before the sequence point, and those
       executed after it.  These occur after the evaluation of a full
       expression (one which is not part of a larger expression), after
!      the evaluation of the first operand of a '&&', '||', '? :' or ','
       (comma) operator, before a function is called (but after the
       evaluation of its arguments and the expression denoting the called
       function), and in certain other places.  Other than as expressed by
--- 6924,6942 ----
              t = std::move (t);
            }
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wsequence-point’
       Warn about code that may have undefined semantics because of
       violations of sequence point rules in the C and C++ standards.
  
       The C and C++ standards define the order in which expressions in a
!      C/C++ program are evaluated in terms of “sequence points”, which
       represent a partial ordering between the execution of parts of the
       program: those executed before the sequence point, and those
       executed after it.  These occur after the evaluation of a full
       expression (one which is not part of a larger expression), after
!      the evaluation of the first operand of a ‘&&’, ‘||’, ‘? :’ or ‘,’
       (comma) operator, before a function is called (but after the
       evaluation of its arguments and the expression denoting the called
       function), and in certain other places.  Other than as expressed by
*************** warnings, in some cases it may also caus
*** 6954,6961 ****
       rules, the results on any particular implementation are entirely
       unpredictable.
  
!      Examples of code with undefined behavior are 'a = a++;', 'a[n] =
!      b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
       diagnosed by this option, and it may give an occasional false
       positive result, but in general it has been found fairly effective
       at detecting this sort of problem in programs.
--- 6958,6965 ----
       rules, the results on any particular implementation are entirely
       unpredictable.
  
!      Examples of code with undefined behavior are ‘a = a++;’, ‘a[n] =
!      b[n++]’ and ‘a[i++] = i;’.  Some more complicated cases are not
       diagnosed by this option, and it may give an occasional false
       positive result, but in general it has been found fairly effective
       at detecting this sort of problem in programs.
*************** warnings, in some cases it may also caus
*** 6973,7037 ****
       formal definitions, may be found on the GCC readings page, at
       <https://gcc.gnu.org/readings.html>.
  
!      This warning is enabled by '-Wall' for C and C++.
  
! '-Wno-return-local-addr'
       Do not warn about returning a pointer (or in C++, a reference) to a
       variable that goes out of scope after the function returns.
  
! '-Wreturn-mismatch'
       Warn about return statements without an expressions in functions
!      which do not return 'void'.  Also warn about a 'return' statement
!      with an expression in a function whose return type is 'void',
!      unless the expression type is also 'void'.  As a GNU extension, the
!      latter case is accepted without a warning unless '-Wpedantic' is
       used.
  
!      Attempting to use the return value of a non-'void' function other
!      than 'main' that flows off the end by reaching the closing curly
       brace that terminates the function is undefined.
  
       This warning is specific to C and enabled by default.  In C99 and
       later language dialects, it is treated as an error.  It can be
!      downgraded to a warning using '-fpermissive' (along with other
       warnings), or for just this warning, with
!      '-Wno-error=return-mismatch'.
  
! '-Wreturn-type'
       Warn whenever a function is defined with a return type that
!      defaults to 'int' (unless '-Wimplicit-int' is active, which takes
       precedence).  Also warn if execution may reach the end of the
       function body, or if the function does not contain any return
       statement at all.
  
!      Attempting to use the return value of a non-'void' function other
!      than 'main' that flows off the end by reaching the closing curly
       brace that terminates the function is undefined.
  
!      Unlike in C, in C++, flowing off the end of a non-'void' function
!      other than 'main' results in undefined behavior even when the value
       of the function is not used.
  
!      This warning is enabled by default in C++ and by '-Wall' otherwise.
  
! '-Wno-shift-count-negative'
       Controls warnings if a shift count is negative.  This warning is
       enabled by default.
  
! '-Wno-shift-count-overflow'
       Controls warnings if a shift count is greater than or equal to the
       bit width of the type.  This warning is enabled by default.
  
! '-Wshift-negative-value'
       Warn if left shifting a negative value.  This warning is enabled by
!      '-Wextra' in C99 (and newer) and C++11 to C++17 modes.
  
! '-Wno-shift-overflow'
! '-Wshift-overflow=N'
       These options control warnings about left shift overflows.
  
!      '-Wshift-overflow=1'
!           This is the warning level of '-Wshift-overflow' and is enabled
            by default in C99 and C++11 modes (and newer).  This warning
            level does not warn about left-shifting 1 into the sign bit.
            (However, in C, such an overflow is still rejected in contexts
--- 6977,7041 ----
       formal definitions, may be found on the GCC readings page, at
       <https://gcc.gnu.org/readings.html>.
  
!      This warning is enabled by ‘-Wall’ for C and C++.
  
! ‘-Wno-return-local-addr’
       Do not warn about returning a pointer (or in C++, a reference) to a
       variable that goes out of scope after the function returns.
  
! ‘-Wreturn-mismatch’
       Warn about return statements without an expressions in functions
!      which do not return ‘void’.  Also warn about a ‘return’ statement
!      with an expression in a function whose return type is ‘void’,
!      unless the expression type is also ‘void’.  As a GNU extension, the
!      latter case is accepted without a warning unless ‘-Wpedantic’ is
       used.
  
!      Attempting to use the return value of a non-‘void’ function other
!      than ‘main’ that flows off the end by reaching the closing curly
       brace that terminates the function is undefined.
  
       This warning is specific to C and enabled by default.  In C99 and
       later language dialects, it is treated as an error.  It can be
!      downgraded to a warning using ‘-fpermissive’ (along with other
       warnings), or for just this warning, with
!      ‘-Wno-error=return-mismatch’.
  
! ‘-Wreturn-type’
       Warn whenever a function is defined with a return type that
!      defaults to ‘int’ (unless ‘-Wimplicit-int’ is active, which takes
       precedence).  Also warn if execution may reach the end of the
       function body, or if the function does not contain any return
       statement at all.
  
!      Attempting to use the return value of a non-‘void’ function other
!      than ‘main’ that flows off the end by reaching the closing curly
       brace that terminates the function is undefined.
  
!      Unlike in C, in C++, flowing off the end of a non-‘void’ function
!      other than ‘main’ results in undefined behavior even when the value
       of the function is not used.
  
!      This warning is enabled by default in C++ and by ‘-Wall’ otherwise.
  
! ‘-Wno-shift-count-negative’
       Controls warnings if a shift count is negative.  This warning is
       enabled by default.
  
! ‘-Wno-shift-count-overflow’
       Controls warnings if a shift count is greater than or equal to the
       bit width of the type.  This warning is enabled by default.
  
! ‘-Wshift-negative-value’
       Warn if left shifting a negative value.  This warning is enabled by
!      ‘-Wextra’ in C99 (and newer) and C++11 to C++17 modes.
  
! ‘-Wno-shift-overflow’
! ‘-Wshift-overflow=N’
       These options control warnings about left shift overflows.
  
!      ‘-Wshift-overflow=1’
!           This is the warning level of ‘-Wshift-overflow’ and is enabled
            by default in C99 and C++11 modes (and newer).  This warning
            level does not warn about left-shifting 1 into the sign bit.
            (However, in C, such an overflow is still rejected in contexts
*************** warnings, in some cases it may also caus
*** 7039,7086 ****
            is emitted in C++20 mode (and newer), as signed left shifts
            always wrap.
  
!      '-Wshift-overflow=2'
            This warning level also warns about left-shifting 1 into the
            sign bit, unless C++14 mode (or newer) is active.
  
! '-Wswitch'
!      Warn whenever a 'switch' statement has an index of enumerated type
!      and lacks a 'case' for one or more of the named codes of that
!      enumeration.  (The presence of a 'default' label prevents this
!      warning.)  'case' labels outside the enumeration range also provoke
!      warnings when this option is used (even if there is a 'default'
!      label).  This warning is enabled by '-Wall'.
  
! '-Wswitch-default'
!      Warn whenever a 'switch' statement does not have a 'default' case.
  
! '-Wswitch-enum'
!      Warn whenever a 'switch' statement has an index of enumerated type
!      and lacks a 'case' for one or more of the named codes of that
!      enumeration.  'case' labels outside the enumeration range also
       provoke warnings when this option is used.  The only difference
!      between '-Wswitch' and this option is that this option gives a
       warning about an omitted enumeration code even if there is a
!      'default' label.
  
! '-Wno-switch-bool'
!      Do not warn when a 'switch' statement has an index of boolean type
       and the case values are outside the range of a boolean type.  It is
       possible to suppress this warning by casting the controlling
!      expression to a type other than 'bool'.  For example:
            switch ((int) (a == 4))
              {
              ...
              }
       This warning is enabled by default for C and C++ programs.
  
! '-Wno-switch-outside-range'
!      This option controls warnings when a 'switch' case has a value that
       is outside of its respective type range.  This warning is enabled
       by default for C and C++ programs.
  
! '-Wno-switch-unreachable'
!      Do not warn when a 'switch' statement contains statements between
       the controlling expression and the first case label, which will
       never be executed.  For example:
            switch (cond)
--- 7043,7090 ----
            is emitted in C++20 mode (and newer), as signed left shifts
            always wrap.
  
!      ‘-Wshift-overflow=2’
            This warning level also warns about left-shifting 1 into the
            sign bit, unless C++14 mode (or newer) is active.
  
! ‘-Wswitch’
!      Warn whenever a ‘switch’ statement has an index of enumerated type
!      and lacks a ‘case’ for one or more of the named codes of that
!      enumeration.  (The presence of a ‘default’ label prevents this
!      warning.)  ‘case’ labels outside the enumeration range also provoke
!      warnings when this option is used (even if there is a ‘default’
!      label).  This warning is enabled by ‘-Wall’.
  
! ‘-Wswitch-default’
!      Warn whenever a ‘switch’ statement does not have a ‘default’ case.
  
! ‘-Wswitch-enum’
!      Warn whenever a ‘switch’ statement has an index of enumerated type
!      and lacks a ‘case’ for one or more of the named codes of that
!      enumeration.  ‘case’ labels outside the enumeration range also
       provoke warnings when this option is used.  The only difference
!      between ‘-Wswitch’ and this option is that this option gives a
       warning about an omitted enumeration code even if there is a
!      ‘default’ label.
  
! ‘-Wno-switch-bool’
!      Do not warn when a ‘switch’ statement has an index of boolean type
       and the case values are outside the range of a boolean type.  It is
       possible to suppress this warning by casting the controlling
!      expression to a type other than ‘bool’.  For example:
            switch ((int) (a == 4))
              {
              ...
              }
       This warning is enabled by default for C and C++ programs.
  
! ‘-Wno-switch-outside-range’
!      This option controls warnings when a ‘switch’ case has a value that
       is outside of its respective type range.  This warning is enabled
       by default for C and C++ programs.
  
! ‘-Wno-switch-unreachable’
!      Do not warn when a ‘switch’ statement contains statements between
       the controlling expression and the first case label, which will
       never be executed.  For example:
            switch (cond)
*************** warnings, in some cases it may also caus
*** 7090,7096 ****
               case 5:
              ...
              }
!      '-Wswitch-unreachable' does not warn if the statement between the
       controlling expression and the first case label is just a
       declaration:
            switch (cond)
--- 7094,7100 ----
               case 5:
              ...
              }
!      ‘-Wswitch-unreachable’ does not warn if the statement between the
       controlling expression and the first case label is just a
       declaration:
            switch (cond)
*************** warnings, in some cases it may also caus
*** 7103,7244 ****
              }
       This warning is enabled by default for C and C++ programs.
  
! '-Wsync-nand (C and C++ only)'
!      Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
       built-in functions are used.  These functions changed semantics in
       GCC 4.4.
  
! '-Wtrivial-auto-var-init'
!      Warn when '-ftrivial-auto-var-init' cannot initialize the automatic
       variable.  A common situation is an automatic variable that is
       declared between the controlling expression and the first case
!      label of a 'switch' statement.
  
! '-Wunused-but-set-parameter'
       Warn whenever a function parameter is assigned to, but otherwise
       unused (aside from its declaration).
  
!      To suppress this warning use the 'unused' attribute (*note Variable
       Attributes::).
  
!      This warning is also enabled by '-Wunused' together with '-Wextra'.
  
! '-Wunused-but-set-variable'
       Warn whenever a local variable is assigned to, but otherwise unused
!      (aside from its declaration).  This warning is enabled by '-Wall'.
  
!      To suppress this warning use the 'unused' attribute (*note Variable
       Attributes::).
  
!      This warning is also enabled by '-Wunused', which is enabled by
!      '-Wall'.
  
! '-Wunused-function'
       Warn whenever a static function is declared but not defined or a
       non-inline static function is unused.  This warning is enabled by
!      '-Wall'.
  
! '-Wunused-label'
       Warn whenever a label is declared but not used.  This warning is
!      enabled by '-Wall'.
  
!      To suppress this warning use the 'unused' attribute (*note Variable
       Attributes::).
  
! '-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
       Warn when a typedef locally defined in a function is not used.
!      This warning is enabled by '-Wall'.
  
! '-Wunused-parameter'
       Warn whenever a function parameter is unused aside from its
!      declaration.  This option is not enabled by '-Wunused' unless
!      '-Wextra' is also specified.
  
!      To suppress this warning use the 'unused' attribute (*note Variable
       Attributes::).
  
! '-Wno-unused-result'
       Do not warn if a caller of a function marked with attribute
!      'warn_unused_result' (*note Function Attributes::) does not use its
!      return value.  The default is '-Wunused-result'.
  
! '-Wunused-variable'
       Warn whenever a local or static variable is unused aside from its
!      declaration.  This option implies '-Wunused-const-variable=1' for
!      C, but not for C++.  This warning is enabled by '-Wall'.
  
!      To suppress this warning use the 'unused' attribute (*note Variable
       Attributes::).
  
! '-Wunused-const-variable'
! '-Wunused-const-variable=N'
       Warn whenever a constant static variable is unused aside from its
       declaration.
  
!      To suppress this warning use the 'unused' attribute (*note Variable
       Attributes::).
  
!      '-Wunused-const-variable=1'
            Warn about unused static const variables defined in the main
            compilation unit, but not about static const variables
            declared in any header included.
  
!           '-Wunused-const-variable=1' is enabled by either
!           '-Wunused-variable' or '-Wunused' for C, but not for C++.  In
            C this declares variable storage, but in C++ this is not an
!           error since const variables take the place of '#define's.
  
!      '-Wunused-const-variable=2'
            This warning level also warns for unused constant static
            variables in headers (excluding system headers).  It is
!           equivalent to the short form '-Wunused-const-variable'.  This
            level must be explicitly requested in both C and C++ because
            it might be hard to clean up all headers included.
  
! '-Wunused-value'
       Warn whenever a statement computes a result that is explicitly not
       used.  To suppress this warning cast the unused expression to
!      'void'.  This includes an expression-statement or the left-hand
       side of a comma expression that contains no side effects.  For
!      example, an expression such as 'x[i,j]' causes a warning, while
!      'x[(void)i,j]' does not.
  
!      This warning is enabled by '-Wall'.
  
! '-Wunused'
!      All the above '-Wunused' options combined, except those documented
       as needing to be specified explicitly.
  
       In order to get a warning about an unused function parameter, you
!      must either specify '-Wextra -Wunused' (note that '-Wall' implies
!      '-Wunused'), or separately specify '-Wunused-parameter' and/or
!      '-Wunused-but-set-parameter'.
  
!      '-Wunused' enables only '-Wunused-const-variable=1' rather than
!      '-Wunused-const-variable', and only for C, not C++.
  
! '-Wuse-after-free (C, Objective-C, C++ and Objective-C++ only)'
! '-Wuse-after-free=N'
       Warn about uses of pointers to dynamically allocated objects that
       have been rendered indeterminate by a call to a deallocation
       function.  The warning is enabled at all optimization levels but
       may yield different results with optimization than without.
  
!      '-Wuse-after-free=1'
            At level 1 the warning attempts to diagnose only unconditional
            uses of pointers made indeterminate by a deallocation call or
!           a successful call to 'realloc', regardless of whether or not
            the call resulted in an actual reallocation of memory.  This
!           includes double-'free' calls as well as uses in arithmetic and
            relational expressions.  Although undefined, uses of
            indeterminate pointers in equality (or inequality) expressions
            are not diagnosed at this level.
!      '-Wuse-after-free=2'
            At level 2, in addition to unconditional uses, the warning
            also diagnoses conditional uses of pointers made indeterminate
            by a deallocation call.  As at level 2, uses in equality (or
            inequality) expressions are not diagnosed.  For example, the
!           second call to 'free' in the following function is diagnosed
            at this level:
                 struct A { int refcount; void *data; };
  
--- 7107,7248 ----
              }
       This warning is enabled by default for C and C++ programs.
  
! ‘-Wsync-nand (C and C++ only)’
!      Warn when ‘__sync_fetch_and_nand’ and ‘__sync_nand_and_fetch’
       built-in functions are used.  These functions changed semantics in
       GCC 4.4.
  
! ‘-Wtrivial-auto-var-init’
!      Warn when ‘-ftrivial-auto-var-init’ cannot initialize the automatic
       variable.  A common situation is an automatic variable that is
       declared between the controlling expression and the first case
!      label of a ‘switch’ statement.
  
! ‘-Wunused-but-set-parameter’
       Warn whenever a function parameter is assigned to, but otherwise
       unused (aside from its declaration).
  
!      To suppress this warning use the ‘unused’ attribute (*note Variable
       Attributes::).
  
!      This warning is also enabled by ‘-Wunused’ together with ‘-Wextra’.
  
! ‘-Wunused-but-set-variable’
       Warn whenever a local variable is assigned to, but otherwise unused
!      (aside from its declaration).  This warning is enabled by ‘-Wall’.
  
!      To suppress this warning use the ‘unused’ attribute (*note Variable
       Attributes::).
  
!      This warning is also enabled by ‘-Wunused’, which is enabled by
!      ‘-Wall’.
  
! ‘-Wunused-function’
       Warn whenever a static function is declared but not defined or a
       non-inline static function is unused.  This warning is enabled by
!      ‘-Wall’.
  
! ‘-Wunused-label’
       Warn whenever a label is declared but not used.  This warning is
!      enabled by ‘-Wall’.
  
!      To suppress this warning use the ‘unused’ attribute (*note Variable
       Attributes::).
  
! ‘-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)’
       Warn when a typedef locally defined in a function is not used.
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wunused-parameter’
       Warn whenever a function parameter is unused aside from its
!      declaration.  This option is not enabled by ‘-Wunused’ unless
!      ‘-Wextra’ is also specified.
  
!      To suppress this warning use the ‘unused’ attribute (*note Variable
       Attributes::).
  
! ‘-Wno-unused-result’
       Do not warn if a caller of a function marked with attribute
!      ‘warn_unused_result’ (*note Function Attributes::) does not use its
!      return value.  The default is ‘-Wunused-result’.
  
! ‘-Wunused-variable’
       Warn whenever a local or static variable is unused aside from its
!      declaration.  This option implies ‘-Wunused-const-variable=1’ for
!      C, but not for C++.  This warning is enabled by ‘-Wall’.
  
!      To suppress this warning use the ‘unused’ attribute (*note Variable
       Attributes::).
  
! ‘-Wunused-const-variable’
! ‘-Wunused-const-variable=N’
       Warn whenever a constant static variable is unused aside from its
       declaration.
  
!      To suppress this warning use the ‘unused’ attribute (*note Variable
       Attributes::).
  
!      ‘-Wunused-const-variable=1’
            Warn about unused static const variables defined in the main
            compilation unit, but not about static const variables
            declared in any header included.
  
!           ‘-Wunused-const-variable=1’ is enabled by either
!           ‘-Wunused-variable’ or ‘-Wunused’ for C, but not for C++.  In
            C this declares variable storage, but in C++ this is not an
!           error since const variables take the place of ‘#define’s.
  
!      ‘-Wunused-const-variable=2’
            This warning level also warns for unused constant static
            variables in headers (excluding system headers).  It is
!           equivalent to the short form ‘-Wunused-const-variable’.  This
            level must be explicitly requested in both C and C++ because
            it might be hard to clean up all headers included.
  
! ‘-Wunused-value’
       Warn whenever a statement computes a result that is explicitly not
       used.  To suppress this warning cast the unused expression to
!      ‘void’.  This includes an expression-statement or the left-hand
       side of a comma expression that contains no side effects.  For
!      example, an expression such as ‘x[i,j]’ causes a warning, while
!      ‘x[(void)i,j]’ does not.
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wunused’
!      All the above ‘-Wunused’ options combined, except those documented
       as needing to be specified explicitly.
  
       In order to get a warning about an unused function parameter, you
!      must either specify ‘-Wextra -Wunused’ (note that ‘-Wall’ implies
!      ‘-Wunused’), or separately specify ‘-Wunused-parameter’ and/or
!      ‘-Wunused-but-set-parameter’.
  
!      ‘-Wunused’ enables only ‘-Wunused-const-variable=1’ rather than
!      ‘-Wunused-const-variable’, and only for C, not C++.
  
! ‘-Wuse-after-free (C, Objective-C, C++ and Objective-C++ only)’
! ‘-Wuse-after-free=N’
       Warn about uses of pointers to dynamically allocated objects that
       have been rendered indeterminate by a call to a deallocation
       function.  The warning is enabled at all optimization levels but
       may yield different results with optimization than without.
  
!      ‘-Wuse-after-free=1’
            At level 1 the warning attempts to diagnose only unconditional
            uses of pointers made indeterminate by a deallocation call or
!           a successful call to ‘realloc’, regardless of whether or not
            the call resulted in an actual reallocation of memory.  This
!           includes double-‘free’ calls as well as uses in arithmetic and
            relational expressions.  Although undefined, uses of
            indeterminate pointers in equality (or inequality) expressions
            are not diagnosed at this level.
!      ‘-Wuse-after-free=2’
            At level 2, in addition to unconditional uses, the warning
            also diagnoses conditional uses of pointers made indeterminate
            by a deallocation call.  As at level 2, uses in equality (or
            inequality) expressions are not diagnosed.  For example, the
!           second call to ‘free’ in the following function is diagnosed
            at this level:
                 struct A { int refcount; void *data; };
  
*************** warnings, in some cases it may also caus
*** 7249,7259 ****
                   if (refcount == 0)
                     free (p->data);   // warning: p may be used after free
                 }
!      '-Wuse-after-free=3'
            At level 3, the warning also diagnoses uses of indeterminate
            pointers in equality expressions.  All uses of indeterminate
            pointers are undefined but equality tests sometimes appear
!           after calls to 'realloc' as an attempt to determine whether
            the call resulted in relocating the object to a different
            address.  They are diagnosed at a separate level to aid
            gradually transitioning legacy code to safe alternatives.  For
--- 7253,7263 ----
                   if (refcount == 0)
                     free (p->data);   // warning: p may be used after free
                 }
!      ‘-Wuse-after-free=3’
            At level 3, the warning also diagnoses uses of indeterminate
            pointers in equality expressions.  All uses of indeterminate
            pointers are undefined but equality tests sometimes appear
!           after calls to ‘realloc’ as an attempt to determine whether
            the call resulted in relocating the object to a different
            address.  They are diagnosed at a separate level to aid
            gradually transitioning legacy code to safe alternatives.  For
*************** warnings, in some cases it may also caus
*** 7272,7280 ****
            allocated memory instead of pointers.  This approach obviates
            needing to adjust the stored pointers after reallocation.
  
!      '-Wuse-after-free=2' is included in '-Wall'.
  
! '-Wuseless-cast (C, Objective-C, C++ and Objective-C++ only)'
       Warn when an expression is cast to its own type.  This warning does
       not occur when a class object is converted to a non-reference type
       as that is a way to create a temporary:
--- 7276,7284 ----
            allocated memory instead of pointers.  This approach obviates
            needing to adjust the stored pointers after reallocation.
  
!      ‘-Wuse-after-free=2’ is included in ‘-Wall’.
  
! ‘-Wuseless-cast (C, Objective-C, C++ and Objective-C++ only)’
       Warn when an expression is cast to its own type.  This warning does
       not occur when a class object is converted to a non-reference type
       as that is a way to create a temporary:
*************** warnings, in some cases it may also caus
*** 7286,7310 ****
              g (S(arg)); // make arg prvalue so that it can bind to S&&
            }
  
! '-Wuninitialized'
       Warn if an object with automatic or allocated storage duration is
       used without having been initialized.  In C++, also warn if a
!      non-static reference or non-static 'const' member appears in a
       class without constructors.
  
       In addition, passing a pointer (or in C++, a reference) to an
!      uninitialized object to a 'const'-qualified argument of a built-in
       function known to read the object is also diagnosed by this
!      warning.  ('-Wmaybe-uninitialized' is issued for ordinary
       functions.)
  
       If you want to warn about code that uses the uninitialized value of
!      the variable in its own initializer, use the '-Winit-self' option.
  
       These warnings occur for individual uninitialized elements of
       structure, union or array variables as well as for variables that
       are uninitialized as a whole.  They do not occur for variables or
!      elements declared 'volatile'.  Because these warnings depend on
       optimization, the exact variables or elements for which there are
       warnings depend on the precise optimization options and version of
       GCC used.
--- 7290,7314 ----
              g (S(arg)); // make arg prvalue so that it can bind to S&&
            }
  
! ‘-Wuninitialized’
       Warn if an object with automatic or allocated storage duration is
       used without having been initialized.  In C++, also warn if a
!      non-static reference or non-static ‘const’ member appears in a
       class without constructors.
  
       In addition, passing a pointer (or in C++, a reference) to an
!      uninitialized object to a ‘const’-qualified argument of a built-in
       function known to read the object is also diagnosed by this
!      warning.  (‘-Wmaybe-uninitialized’ is issued for ordinary
       functions.)
  
       If you want to warn about code that uses the uninitialized value of
!      the variable in its own initializer, use the ‘-Winit-self’ option.
  
       These warnings occur for individual uninitialized elements of
       structure, union or array variables as well as for variables that
       are uninitialized as a whole.  They do not occur for variables or
!      elements declared ‘volatile’.  Because these warnings depend on
       optimization, the exact variables or elements for which there are
       warnings depend on the precise optimization options and version of
       GCC used.
*************** warnings, in some cases it may also caus
*** 7315,7321 ****
       warnings are printed.
  
       In C++, this warning also warns about using uninitialized objects
!      in member-initializer-lists.  For example, GCC warns about 'b'
       being uninitialized in the following snippet:
  
            struct A {
--- 7319,7325 ----
       warnings are printed.
  
       In C++, this warning also warns about using uninitialized objects
!      in member-initializer-lists.  For example, GCC warns about ‘b’
       being uninitialized in the following snippet:
  
            struct A {
*************** warnings, in some cases it may also caus
*** 7324,7336 ****
              A() : a(b) { }
            };
  
! '-Wno-invalid-memory-model'
       This option controls warnings for invocations of *note __atomic
       Builtins::, *note __sync Builtins::, and the C11 atomic generic
       functions with a memory consistency argument that is either invalid
       for the operation or outside the range of values of the
!      'memory_order' enumeration.  For example, since the
!      '__atomic_store' and '__atomic_store_n' built-ins are only defined
       for the relaxed, release, and sequentially consistent memory orders
       the following code is diagnosed:
  
--- 7328,7340 ----
              A() : a(b) { }
            };
  
! ‘-Wno-invalid-memory-model’
       This option controls warnings for invocations of *note __atomic
       Builtins::, *note __sync Builtins::, and the C11 atomic generic
       functions with a memory consistency argument that is either invalid
       for the operation or outside the range of values of the
!      ‘memory_order’ enumeration.  For example, since the
!      ‘__atomic_store’ and ‘__atomic_store_n’ built-ins are only defined
       for the relaxed, release, and sequentially consistent memory orders
       the following code is diagnosed:
  
*************** warnings, in some cases it may also caus
*** 7339,7347 ****
              __atomic_store_n (i, 0, memory_order_consume);
            }
  
!      '-Winvalid-memory-model' is enabled by default.
  
! '-Wmaybe-uninitialized'
       For an object with automatic or allocated storage duration, if
       there exists a path from the function entry to a use of the object
       that is initialized, but there exist some other paths for which the
--- 7343,7351 ----
              __atomic_store_n (i, 0, memory_order_consume);
            }
  
!      ‘-Winvalid-memory-model’ is enabled by default.
  
! ‘-Wmaybe-uninitialized’
       For an object with automatic or allocated storage duration, if
       there exists a path from the function entry to a use of the object
       that is initialized, but there exist some other paths for which the
*************** warnings, in some cases it may also caus
*** 7349,7358 ****
       cannot prove the uninitialized paths are not executed at run time.
  
       In addition, passing a pointer (or in C++, a reference) to an
!      uninitialized object to a 'const'-qualified function argument is
!      also diagnosed by this warning.  ('-Wuninitialized' is issued for
       built-in functions known to read the object.)  Annotating the
!      function with attribute 'access (none)' indicates that the argument
       isn't used to access the object and avoids the warning (*note
       Common Function Attributes::).
  
--- 7353,7362 ----
       cannot prove the uninitialized paths are not executed at run time.
  
       In addition, passing a pointer (or in C++, a reference) to an
!      uninitialized object to a ‘const’-qualified function argument is
!      also diagnosed by this warning.  (‘-Wuninitialized’ is issued for
       built-in functions known to read the object.)  Annotating the
!      function with attribute ‘access (none)’ indicates that the argument
       isn't used to access the object and avoids the warning (*note
       Common Function Attributes::).
  
*************** warnings, in some cases it may also caus
*** 7376,7436 ****
              foo (x);
            }
  
!      If the value of 'y' is always 1, 2 or 3, then 'x' is always
       initialized, but GCC doesn't know this.  To suppress the warning,
       you need to provide a default case with assert(0) or similar code.
  
       This option also warns when a non-volatile automatic variable might
!      be changed by a call to 'longjmp'.  The compiler sees only the
!      calls to 'setjmp'.  It cannot know where 'longjmp' will be called;
       in fact, a signal handler could call it at any point in the code.
       As a result, you may get a warning even when there is in fact no
!      problem because 'longjmp' cannot in fact be called at the place
       that would cause a problem.
  
       Some spurious warnings can be avoided if you declare all the
!      functions you use that never return as 'noreturn'.  *Note Function
       Attributes::.
  
!      This warning is enabled by '-Wall' or '-Wextra'.
  
! '-Wunknown-pragmas'
!      Warn when a '#pragma' directive is encountered that is not
       understood by GCC.  If this command-line option is used, warnings
       are even issued for unknown pragmas in system header files.  This
!      is not the case if the warnings are only enabled by the '-Wall'
       command-line option.
  
! '-Wno-pragmas'
       Do not warn about misuses of pragmas, such as incorrect parameters,
       invalid syntax, or conflicts between pragmas.  See also
!      '-Wunknown-pragmas'.
  
! '-Wno-prio-ctor-dtor'
       Do not warn if a priority from 0 to 100 is used for constructor or
       destructor.  The use of constructor and destructor attributes allow
       you to assign a priority to the constructor/destructor to control
!      its order of execution before 'main' is called or after it returns.
       The priority values must be greater than 100 as the compiler
       reserves priority values between 0-100 for the implementation.
  
! '-Wstrict-aliasing'
!      This option is only active when '-fstrict-aliasing' is active.  It
       warns about code that might break the strict aliasing rules that
       the compiler is using for optimization.  The warning does not catch
       all cases, but does attempt to catch the more common pitfalls.  It
!      is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
  
! '-Wstrict-aliasing=n'
!      This option is only active when '-fstrict-aliasing' is active.  It
       warns about code that might break the strict aliasing rules that
       the compiler is using for optimization.  Higher levels correspond
       to higher accuracy (fewer false positives).  Higher levels also
!      correspond to more effort, similar to the way '-O' works.
!      '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
  
       Level 1: Most aggressive, quick, least accurate.  Possibly useful
!      when higher levels do not warn but '-fstrict-aliasing' still breaks
       the code, as it has very few false negatives.  However, it has many
       false positives.  Warns for all pointer conversions between
       possibly incompatible types, even if never dereferenced.  Runs in
--- 7380,7440 ----
              foo (x);
            }
  
!      If the value of ‘y’ is always 1, 2 or 3, then ‘x’ is always
       initialized, but GCC doesn't know this.  To suppress the warning,
       you need to provide a default case with assert(0) or similar code.
  
       This option also warns when a non-volatile automatic variable might
!      be changed by a call to ‘longjmp’.  The compiler sees only the
!      calls to ‘setjmp’.  It cannot know where ‘longjmp’ will be called;
       in fact, a signal handler could call it at any point in the code.
       As a result, you may get a warning even when there is in fact no
!      problem because ‘longjmp’ cannot in fact be called at the place
       that would cause a problem.
  
       Some spurious warnings can be avoided if you declare all the
!      functions you use that never return as ‘noreturn’.  *Note Function
       Attributes::.
  
!      This warning is enabled by ‘-Wall’ or ‘-Wextra’.
  
! ‘-Wunknown-pragmas’
!      Warn when a ‘#pragma’ directive is encountered that is not
       understood by GCC.  If this command-line option is used, warnings
       are even issued for unknown pragmas in system header files.  This
!      is not the case if the warnings are only enabled by the ‘-Wall’
       command-line option.
  
! ‘-Wno-pragmas’
       Do not warn about misuses of pragmas, such as incorrect parameters,
       invalid syntax, or conflicts between pragmas.  See also
!      ‘-Wunknown-pragmas’.
  
! ‘-Wno-prio-ctor-dtor’
       Do not warn if a priority from 0 to 100 is used for constructor or
       destructor.  The use of constructor and destructor attributes allow
       you to assign a priority to the constructor/destructor to control
!      its order of execution before ‘main’ is called or after it returns.
       The priority values must be greater than 100 as the compiler
       reserves priority values between 0-100 for the implementation.
  
! ‘-Wstrict-aliasing’
!      This option is only active when ‘-fstrict-aliasing’ is active.  It
       warns about code that might break the strict aliasing rules that
       the compiler is using for optimization.  The warning does not catch
       all cases, but does attempt to catch the more common pitfalls.  It
!      is included in ‘-Wall’.  It is equivalent to ‘-Wstrict-aliasing=3’
  
! ‘-Wstrict-aliasing=n’
!      This option is only active when ‘-fstrict-aliasing’ is active.  It
       warns about code that might break the strict aliasing rules that
       the compiler is using for optimization.  Higher levels correspond
       to higher accuracy (fewer false positives).  Higher levels also
!      correspond to more effort, similar to the way ‘-O’ works.
!      ‘-Wstrict-aliasing’ is equivalent to ‘-Wstrict-aliasing=3’.
  
       Level 1: Most aggressive, quick, least accurate.  Possibly useful
!      when higher levels do not warn but ‘-fstrict-aliasing’ still breaks
       the code, as it has very few false negatives.  However, it has many
       false positives.  Warns for all pointer conversions between
       possibly incompatible types, even if never dereferenced.  Runs in
*************** warnings, in some cases it may also caus
*** 7442,7459 ****
       only warns when an address is taken.  Warns about incomplete types.
       Runs in the front end only.
  
!      Level 3 (default for '-Wstrict-aliasing'): Should have very few
       false positives and few false negatives.  Slightly slower than
       levels 1 or 2 when optimization is enabled.  Takes care of the
       common pun+dereference pattern in the front end:
!      '*(int*)&some_float'.  If optimization is enabled, it also runs in
       the back end, where it deals with multiple statement cases using
       flow-sensitive points-to information.  Only warns when the
       converted pointer is dereferenced.  Does not warn about incomplete
       types.
  
! '-Wstrict-overflow'
! '-Wstrict-overflow=N'
       This option is only active when signed overflow is undefined.  It
       warns about cases where the compiler optimizes based on the
       assumption that signed overflow does not occur.  Note that it does
--- 7446,7463 ----
       only warns when an address is taken.  Warns about incomplete types.
       Runs in the front end only.
  
!      Level 3 (default for ‘-Wstrict-aliasing’): Should have very few
       false positives and few false negatives.  Slightly slower than
       levels 1 or 2 when optimization is enabled.  Takes care of the
       common pun+dereference pattern in the front end:
!      ‘*(int*)&some_float’.  If optimization is enabled, it also runs in
       the back end, where it deals with multiple statement cases using
       flow-sensitive points-to information.  Only warns when the
       converted pointer is dereferenced.  Does not warn about incomplete
       types.
  
! ‘-Wstrict-overflow’
! ‘-Wstrict-overflow=N’
       This option is only active when signed overflow is undefined.  It
       warns about cases where the compiler optimizes based on the
       assumption that signed overflow does not occur.  Note that it does
*************** warnings, in some cases it may also caus
*** 7471,7514 ****
       loop requires, in particular when determining whether a loop will
       be executed at all.
  
!      '-Wstrict-overflow=1'
            Warn about cases that are both questionable and easy to avoid.
!           For example the compiler simplifies 'x + 1 > x' to '1'.  This
!           level of '-Wstrict-overflow' is enabled by '-Wall'; higher
            levels are not, and must be explicitly requested.
  
!      '-Wstrict-overflow=2'
            Also warn about other cases where a comparison is simplified
!           to a constant.  For example: 'abs (x) >= 0'.  This can only be
            simplified when signed integer overflow is undefined, because
!           'abs (INT_MIN)' overflows to 'INT_MIN', which is less than
!           zero.  '-Wstrict-overflow' (with no level) is the same as
!           '-Wstrict-overflow=2'.
  
!      '-Wstrict-overflow=3'
            Also warn about other cases where a comparison is simplified.
!           For example: 'x + 1 > 1' is simplified to 'x > 0'.
  
!      '-Wstrict-overflow=4'
            Also warn about other simplifications not covered by the above
!           cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
  
!      '-Wstrict-overflow=5'
            Also warn about cases where the compiler reduces the magnitude
!           of a constant involved in a comparison.  For example: 'x + 2 >
!           y' is simplified to 'x + 1 >= y'.  This is reported only at
            the highest warning level because this simplification applies
            to many comparisons, so this warning level gives a very large
            number of false positives.
  
! '-Wstring-compare'
!      Warn for calls to 'strcmp' and 'strncmp' whose result is determined
       to be either zero or non-zero in tests for such equality owing to
       the length of one argument being greater than the size of the array
       the other argument is stored in (or the bound in the case of
!      'strncmp').  Such calls could be mistakes.  For example, the call
!      to 'strcmp' below is diagnosed because its result is necessarily
!      non-zero irrespective of the contents of the array 'a'.
  
            extern char a[4];
            void f (char *d)
--- 7475,7518 ----
       loop requires, in particular when determining whether a loop will
       be executed at all.
  
!      ‘-Wstrict-overflow=1’
            Warn about cases that are both questionable and easy to avoid.
!           For example the compiler simplifies ‘x + 1 > x’ to ‘1’.  This
!           level of ‘-Wstrict-overflow’ is enabled by ‘-Wall’; higher
            levels are not, and must be explicitly requested.
  
!      ‘-Wstrict-overflow=2’
            Also warn about other cases where a comparison is simplified
!           to a constant.  For example: ‘abs (x) >= 0’.  This can only be
            simplified when signed integer overflow is undefined, because
!           ‘abs (INT_MIN)’ overflows to ‘INT_MIN’, which is less than
!           zero.  ‘-Wstrict-overflow’ (with no level) is the same as
!           ‘-Wstrict-overflow=2’.
  
!      ‘-Wstrict-overflow=3’
            Also warn about other cases where a comparison is simplified.
!           For example: ‘x + 1 > 1’ is simplified to ‘x > 0’.
  
!      ‘-Wstrict-overflow=4’
            Also warn about other simplifications not covered by the above
!           cases.  For example: ‘(x * 10) / 5’ is simplified to ‘x * 2’.
  
!      ‘-Wstrict-overflow=5’
            Also warn about cases where the compiler reduces the magnitude
!           of a constant involved in a comparison.  For example: ‘x + 2 >
!           y’ is simplified to ‘x + 1 >= y’.  This is reported only at
            the highest warning level because this simplification applies
            to many comparisons, so this warning level gives a very large
            number of false positives.
  
! ‘-Wstring-compare’
!      Warn for calls to ‘strcmp’ and ‘strncmp’ whose result is determined
       to be either zero or non-zero in tests for such equality owing to
       the length of one argument being greater than the size of the array
       the other argument is stored in (or the bound in the case of
!      ‘strncmp’).  Such calls could be mistakes.  For example, the call
!      to ‘strcmp’ below is diagnosed because its result is necessarily
!      non-zero irrespective of the contents of the array ‘a’.
  
            extern char a[4];
            void f (char *d)
*************** warnings, in some cases it may also caus
*** 7519,7547 ****
                puts ("a and d are the same");
            }
  
!      '-Wstring-compare' is enabled by '-Wextra'.
  
! '-Wno-stringop-overflow'
! '-Wstringop-overflow'
! '-Wstringop-overflow=TYPE'
!      Warn for calls to string manipulation functions such as 'memcpy'
!      and 'strcpy' that are determined to overflow the destination
       buffer.  The optional argument is one greater than the type of
       Object Size Checking to perform to determine the size of the
       destination.  *Note Object Size Checking::.  The argument is
       meaningful only for functions that operate on character arrays but
!      not for raw memory functions like 'memcpy' which always make use of
       Object Size type-0.  The option also warns for calls that specify a
!      size in excess of the largest possible object or at most 'SIZE_MAX
!      / 2' bytes.  The option produces the best results with optimization
       enabled but can detect a small subset of simple buffer overflows
       even without optimization in calls to the GCC built-in functions
!      like '__builtin_memcpy' that correspond to the standard functions.
       In any case, the option warns about just a subset of buffer
       overflows detected by the corresponding overflow checking
       built-ins.  For example, the option issues a warning for the
!      'strcpy' call below because it copies at least 5 characters (the
!      string '"blue"' including the terminating NUL) into the buffer of
       size 4.
  
            enum Color { blue, purple, yellow };
--- 7523,7551 ----
                puts ("a and d are the same");
            }
  
!      ‘-Wstring-compare’ is enabled by ‘-Wextra’.
  
! ‘-Wno-stringop-overflow’
! ‘-Wstringop-overflow’
! ‘-Wstringop-overflow=TYPE’
!      Warn for calls to string manipulation functions such as ‘memcpy’
!      and ‘strcpy’ that are determined to overflow the destination
       buffer.  The optional argument is one greater than the type of
       Object Size Checking to perform to determine the size of the
       destination.  *Note Object Size Checking::.  The argument is
       meaningful only for functions that operate on character arrays but
!      not for raw memory functions like ‘memcpy’ which always make use of
       Object Size type-0.  The option also warns for calls that specify a
!      size in excess of the largest possible object or at most ‘SIZE_MAX
!      / 2’ bytes.  The option produces the best results with optimization
       enabled but can detect a small subset of simple buffer overflows
       even without optimization in calls to the GCC built-in functions
!      like ‘__builtin_memcpy’ that correspond to the standard functions.
       In any case, the option warns about just a subset of buffer
       overflows detected by the corresponding overflow checking
       built-ins.  For example, the option issues a warning for the
!      ‘strcpy’ call below because it copies at least 5 characters (the
!      string ‘"blue"’ including the terminating NUL) into the buffer of
       size 4.
  
            enum Color { blue, purple, yellow };
*************** warnings, in some cases it may also caus
*** 7559,7569 ****
              return strcpy (buf, str);   // warning here
            }
  
!      Option '-Wstringop-overflow=2' is enabled by default.
  
!      '-Wstringop-overflow'
!      '-Wstringop-overflow=1'
!           The '-Wstringop-overflow=1' option uses type-zero Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option does not warn for writes past the end
            of subobjects of larger objects accessed by pointers unless
--- 7563,7573 ----
              return strcpy (buf, str);   // warning here
            }
  
!      Option ‘-Wstringop-overflow=2’ is enabled by default.
  
!      ‘-Wstringop-overflow’
!      ‘-Wstringop-overflow=1’
!           The ‘-Wstringop-overflow=1’ option uses type-zero Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option does not warn for writes past the end
            of subobjects of larger objects accessed by pointers unless
*************** warnings, in some cases it may also caus
*** 7571,7581 ****
            destination may be one of several objects it is assumed to be
            the largest one of them.  On Linux systems, when optimization
            is enabled at this setting the option warns for the same code
!           as when the '_FORTIFY_SOURCE' macro is defined to a non-zero
            value.
  
!      '-Wstringop-overflow=2'
!           The '-Wstringop-overflow=2' option uses type-one Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option warns about overflows when writing to
            members of the largest complete objects whose exact size is
--- 7575,7585 ----
            destination may be one of several objects it is assumed to be
            the largest one of them.  On Linux systems, when optimization
            is enabled at this setting the option warns for the same code
!           as when the ‘_FORTIFY_SOURCE’ macro is defined to a non-zero
            value.
  
!      ‘-Wstringop-overflow=2’
!           The ‘-Wstringop-overflow=2’ option uses type-one Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option warns about overflows when writing to
            members of the largest complete objects whose exact size is
*************** warnings, in some cases it may also caus
*** 7584,7621 ****
            they may point to arrays containing unknown numbers of
            elements.  This is the default setting of the option.
  
!      '-Wstringop-overflow=3'
!           The '-Wstringop-overflow=3' option uses type-two Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option warns about overflowing the smallest
            object or data member.  This is the most restrictive setting
            of the option that may result in warnings for safe code.
  
!      '-Wstringop-overflow=4'
!           The '-Wstringop-overflow=4' option uses type-three Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option warns about overflowing any data
            members, and when the destination is one of several objects it
            uses the size of the largest of them to decide whether to
!           issue a warning.  Similarly to '-Wstringop-overflow=3' this
            setting of the option may result in warnings for benign code.
  
! '-Wno-stringop-overread'
!      Warn for calls to string manipulation functions such as 'memchr',
!      or 'strcpy' that are determined to read past the end of the source
       sequence.
  
!      Option '-Wstringop-overread' is enabled by default.
  
! '-Wno-stringop-truncation'
       Do not warn for calls to bounded string manipulation functions such
!      as 'strncat', 'strncpy', and 'stpncpy' that may either truncate the
       copied string or leave the destination unchanged.
  
!      In the following example, the call to 'strncat' specifies a bound
       that is less than the length of the source string.  As a result,
       the copy of the source will be truncated and so the call is
!      diagnosed.  To avoid the warning use 'bufsize - strlen (buf) - 1)'
       as the bound.
  
            void append (char *buf, size_t bufsize)
--- 7588,7625 ----
            they may point to arrays containing unknown numbers of
            elements.  This is the default setting of the option.
  
!      ‘-Wstringop-overflow=3’
!           The ‘-Wstringop-overflow=3’ option uses type-two Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option warns about overflowing the smallest
            object or data member.  This is the most restrictive setting
            of the option that may result in warnings for safe code.
  
!      ‘-Wstringop-overflow=4’
!           The ‘-Wstringop-overflow=4’ option uses type-three Object Size
            Checking to determine the sizes of destination objects.  At
            this setting the option warns about overflowing any data
            members, and when the destination is one of several objects it
            uses the size of the largest of them to decide whether to
!           issue a warning.  Similarly to ‘-Wstringop-overflow=3’ this
            setting of the option may result in warnings for benign code.
  
! ‘-Wno-stringop-overread’
!      Warn for calls to string manipulation functions such as ‘memchr’,
!      or ‘strcpy’ that are determined to read past the end of the source
       sequence.
  
!      Option ‘-Wstringop-overread’ is enabled by default.
  
! ‘-Wno-stringop-truncation’
       Do not warn for calls to bounded string manipulation functions such
!      as ‘strncat’, ‘strncpy’, and ‘stpncpy’ that may either truncate the
       copied string or leave the destination unchanged.
  
!      In the following example, the call to ‘strncat’ specifies a bound
       that is less than the length of the source string.  As a result,
       the copy of the source will be truncated and so the call is
!      diagnosed.  To avoid the warning use ‘bufsize - strlen (buf) - 1)’
       as the bound.
  
            void append (char *buf, size_t bufsize)
*************** warnings, in some cases it may also caus
*** 7623,7634 ****
              strncat (buf, ".txt", 3);
            }
  
!      As another example, the following call to 'strncpy' results in
!      copying to 'd' just the characters preceding the terminating NUL,
       without appending the NUL to the end.  Assuming the result of
!      'strncpy' is necessarily a NUL-terminated string is a common
       mistake, and so the call is diagnosed.  To avoid the warning when
!      the result is not expected to be NUL-terminated, call 'memcpy'
       instead.
  
            void copy (char *d, const char *s)
--- 7627,7638 ----
              strncat (buf, ".txt", 3);
            }
  
!      As another example, the following call to ‘strncpy’ results in
!      copying to ‘d’ just the characters preceding the terminating NUL,
       without appending the NUL to the end.  Assuming the result of
!      ‘strncpy’ is necessarily a NUL-terminated string is a common
       mistake, and so the call is diagnosed.  To avoid the warning when
!      the result is not expected to be NUL-terminated, call ‘memcpy’
       instead.
  
            void copy (char *d, const char *s)
*************** warnings, in some cases it may also caus
*** 7636,7647 ****
              strncpy (d, s, strlen (s));
            }
  
!      In the following example, the call to 'strncpy' specifies the size
       of the destination buffer as the bound.  If the length of the
       source string is equal to or greater than this size the result of
       the copy will not be NUL-terminated.  Therefore, the call is also
!      diagnosed.  To avoid the warning, specify 'sizeof buf - 1' as the
!      bound and set the last element of the buffer to 'NUL'.
  
            void copy (const char *s)
            {
--- 7640,7651 ----
              strncpy (d, s, strlen (s));
            }
  
!      In the following example, the call to ‘strncpy’ specifies the size
       of the destination buffer as the bound.  If the length of the
       source string is equal to or greater than this size the result of
       the copy will not be NUL-terminated.  Therefore, the call is also
!      diagnosed.  To avoid the warning, specify ‘sizeof buf - 1’ as the
!      bound and set the last element of the buffer to ‘NUL’.
  
            void copy (const char *s)
            {
*************** warnings, in some cases it may also caus
*** 7651,7672 ****
            }
  
       In situations where a character array is intended to store a
!      sequence of bytes with no terminating 'NUL' such an array may be
!      annotated with attribute 'nonstring' to avoid this warning.  Such
       arrays, however, are not suitable arguments to functions that
!      expect 'NUL'-terminated strings.  To help detect accidental misuses
       of such arrays GCC issues warnings unless it can prove that the use
       is safe.  *Note Common Variable Attributes::.
  
! '-Wstrict-flex-arrays (C and C++ only)'
       Warn about improper usages of flexible array members according to
!      the LEVEL of the 'strict_flex_array (LEVEL)' attribute attached to
       the trailing array field of a structure if it's available,
       otherwise according to the LEVEL of the option
!      '-fstrict-flex-arrays=LEVEL'.  *Note Common Variable Attributes::,
       for more information about the attribute, and *note C Dialect
       Options:: for more information about the option.
!      '-Wstrict-flex-arrays' is effective only when LEVEL is greater than
       0.
  
       When LEVEL=1, warnings are issued for a trailing array reference of
--- 7655,7676 ----
            }
  
       In situations where a character array is intended to store a
!      sequence of bytes with no terminating ‘NUL’ such an array may be
!      annotated with attribute ‘nonstring’ to avoid this warning.  Such
       arrays, however, are not suitable arguments to functions that
!      expect ‘NUL’-terminated strings.  To help detect accidental misuses
       of such arrays GCC issues warnings unless it can prove that the use
       is safe.  *Note Common Variable Attributes::.
  
! ‘-Wstrict-flex-arrays (C and C++ only)’
       Warn about improper usages of flexible array members according to
!      the LEVEL of the ‘strict_flex_array (LEVEL)’ attribute attached to
       the trailing array field of a structure if it's available,
       otherwise according to the LEVEL of the option
!      ‘-fstrict-flex-arrays=LEVEL’.  *Note Common Variable Attributes::,
       for more information about the attribute, and *note C Dialect
       Options:: for more information about the option.
!      ‘-Wstrict-flex-arrays’ is effective only when LEVEL is greater than
       0.
  
       When LEVEL=1, warnings are issued for a trailing array reference of
*************** warnings, in some cases it may also caus
*** 7681,7800 ****
       issued for a trailing zero-length array reference of a structure if
       the array is referenced as a flexible array member.
  
!      This option is more effective when '-ftree-vrp' is active (the
!      default for '-O2' and above) but some warnings may be diagnosed
       even without optimization.
  
! '-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]returns_nonnull|'
       Warn for cases where adding an attribute may be beneficial.  The
       attributes currently supported are listed below.
  
!      '-Wsuggest-attribute=pure'
!      '-Wsuggest-attribute=const'
!      '-Wsuggest-attribute=noreturn'
!      '-Wmissing-noreturn'
!      '-Wsuggest-attribute=malloc'
!      '-Wsuggest-attribute=returns_nonnull'
!      '-Wno-suggest-attribute=returns_nonnull'
  
            Warn about functions that might be candidates for attributes
!           'pure', 'const', 'noreturn', 'malloc' or 'returns_nonnull'.
            The compiler only warns for functions visible in other
!           compilation units or (in the case of 'pure' and 'const') if it
            cannot prove that the function returns normally.  A function
            returns normally if it doesn't contain an infinite loop or
!           return abnormally by throwing, calling 'abort' or trapping.
!           This analysis requires option '-fipa-pure-const', which is
!           enabled by default at '-O' and higher.  Higher optimization
            levels improve the accuracy of the analysis.
  
!      '-Wsuggest-attribute=format'
!      '-Wmissing-format-attribute'
  
            Warn about function pointers that might be candidates for
!           'format' attributes.  Note these are only possible candidates,
            not absolute ones.  GCC guesses that function pointers with
!           'format' attributes that are used in assignment,
            initialization, parameter passing or return statements should
!           have a corresponding 'format' attribute in the resulting type.
            I.e. the left-hand side of the assignment or initialization,
            the type of the parameter variable, or the return type of the
!           containing function respectively should also have a 'format'
            attribute to avoid the warning.
  
            GCC also warns about function definitions that might be
!           candidates for 'format' attributes.  Again, these are only
!           possible candidates.  GCC guesses that 'format' attributes
            might be appropriate for any function that calls a function
!           like 'vprintf' or 'vscanf', but this might not always be the
!           case, and some functions for which 'format' attributes are
            appropriate may not be detected.
  
!      '-Wsuggest-attribute=cold'
  
!           Warn about functions that might be candidates for 'cold'
            attribute.  This is based on static detection and generally
            only warns about functions which always leads to a call to
!           another 'cold' function such as wrappers of C++ 'throw' or
!           fatal error reporting functions leading to 'abort'.
  
! '-Walloc-size'
       Warn about calls to allocation functions decorated with attribute
!      'alloc_size' that specify insufficient size for the target type of
       the pointer the result is assigned to, including those to the
!      built-in forms of the functions 'aligned_alloc', 'alloca',
!      'calloc', 'malloc', and 'realloc'.
  
! '-Walloc-zero'
       Warn about calls to allocation functions decorated with attribute
!      'alloc_size' that specify zero bytes, including those to the
!      built-in forms of the functions 'aligned_alloc', 'alloca',
!      'calloc', 'malloc', and 'realloc'.  Because the behavior of these
       functions when called with a zero size differs among
!      implementations (and in the case of 'realloc' has been deprecated)
       relying on it may result in subtle portability bugs and should be
       avoided.
  
! '-Wcalloc-transposed-args'
       Warn about calls to allocation functions decorated with attribute
!      'alloc_size' with two arguments, which use 'sizeof' operator as the
       earlier size argument and don't use it as the later size argument.
!      This is a coding style warning.  The first argument to 'calloc' is
       documented to be number of elements in array, while the second
!      argument is size of each element, so 'calloc (N, sizeof (int))' is
!      preferred over 'calloc (sizeof (int), N)'.  If 'sizeof' in the
       earlier argument and not the latter is intentional, the warning can
!      be suppressed by using 'calloc (sizeof (struct S) + 0, n)' or
!      'calloc (1 * sizeof (struct S), 4)' or using 'sizeof' in the later
       argument as well.
  
! '-Walloc-size-larger-than=BYTE-SIZE'
!      Warn about calls to functions decorated with attribute 'alloc_size'
       that attempt to allocate objects larger than the specified number
       of bytes, or where the result of the size computation in an integer
       type with infinite precision would exceed the value of
!      'PTRDIFF_MAX' on the target.
!      '-Walloc-size-larger-than=''PTRDIFF_MAX' is enabled by default.
       Warnings controlled by the option can be disabled either by
!      specifying BYTE-SIZE of 'SIZE_MAX' or more or by
!      '-Wno-alloc-size-larger-than'.  *Note Function Attributes::.
  
! '-Wno-alloc-size-larger-than'
!      Disable '-Walloc-size-larger-than=' warnings.  The option is
!      equivalent to '-Walloc-size-larger-than=''SIZE_MAX' or larger.
  
! '-Walloca'
!      This option warns on all uses of 'alloca' in the source.
  
! '-Walloca-larger-than=BYTE-SIZE'
!      This option warns on calls to 'alloca' with an integer argument
       whose value is either zero, or that is not bounded by a controlling
       predicate that limits its value to at most BYTE-SIZE.  It also
!      warns for calls to 'alloca' where the bound value is unknown.
       Arguments of non-integer types are considered unbounded even if
       they appear to be constrained to the expected range.
  
!      For example, a bounded case of 'alloca' could be:
  
            void func (size_t n)
            {
--- 7685,7804 ----
       issued for a trailing zero-length array reference of a structure if
       the array is referenced as a flexible array member.
  
!      This option is more effective when ‘-ftree-vrp’ is active (the
!      default for ‘-O2’ and above) but some warnings may be diagnosed
       even without optimization.
  
! ‘-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]returns_nonnull|’
       Warn for cases where adding an attribute may be beneficial.  The
       attributes currently supported are listed below.
  
!      ‘-Wsuggest-attribute=pure’
!      ‘-Wsuggest-attribute=const’
!      ‘-Wsuggest-attribute=noreturn’
!      ‘-Wmissing-noreturn’
!      ‘-Wsuggest-attribute=malloc’
!      ‘-Wsuggest-attribute=returns_nonnull’
!      ‘-Wno-suggest-attribute=returns_nonnull’
  
            Warn about functions that might be candidates for attributes
!           ‘pure’, ‘const’, ‘noreturn’, ‘malloc’ or ‘returns_nonnull’.
            The compiler only warns for functions visible in other
!           compilation units or (in the case of ‘pure’ and ‘const’) if it
            cannot prove that the function returns normally.  A function
            returns normally if it doesn't contain an infinite loop or
!           return abnormally by throwing, calling ‘abort’ or trapping.
!           This analysis requires option ‘-fipa-pure-const’, which is
!           enabled by default at ‘-O’ and higher.  Higher optimization
            levels improve the accuracy of the analysis.
  
!      ‘-Wsuggest-attribute=format’
!      ‘-Wmissing-format-attribute’
  
            Warn about function pointers that might be candidates for
!           ‘format’ attributes.  Note these are only possible candidates,
            not absolute ones.  GCC guesses that function pointers with
!           ‘format’ attributes that are used in assignment,
            initialization, parameter passing or return statements should
!           have a corresponding ‘format’ attribute in the resulting type.
            I.e. the left-hand side of the assignment or initialization,
            the type of the parameter variable, or the return type of the
!           containing function respectively should also have a ‘format’
            attribute to avoid the warning.
  
            GCC also warns about function definitions that might be
!           candidates for ‘format’ attributes.  Again, these are only
!           possible candidates.  GCC guesses that ‘format’ attributes
            might be appropriate for any function that calls a function
!           like ‘vprintf’ or ‘vscanf’, but this might not always be the
!           case, and some functions for which ‘format’ attributes are
            appropriate may not be detected.
  
!      ‘-Wsuggest-attribute=cold’
  
!           Warn about functions that might be candidates for ‘cold’
            attribute.  This is based on static detection and generally
            only warns about functions which always leads to a call to
!           another ‘cold’ function such as wrappers of C++ ‘throw’ or
!           fatal error reporting functions leading to ‘abort’.
  
! ‘-Walloc-size’
       Warn about calls to allocation functions decorated with attribute
!      ‘alloc_size’ that specify insufficient size for the target type of
       the pointer the result is assigned to, including those to the
!      built-in forms of the functions ‘aligned_alloc’, ‘alloca’,
!      ‘calloc’, ‘malloc’, and ‘realloc’.
  
! ‘-Walloc-zero’
       Warn about calls to allocation functions decorated with attribute
!      ‘alloc_size’ that specify zero bytes, including those to the
!      built-in forms of the functions ‘aligned_alloc’, ‘alloca’,
!      ‘calloc’, ‘malloc’, and ‘realloc’.  Because the behavior of these
       functions when called with a zero size differs among
!      implementations (and in the case of ‘realloc’ has been deprecated)
       relying on it may result in subtle portability bugs and should be
       avoided.
  
! ‘-Wcalloc-transposed-args’
       Warn about calls to allocation functions decorated with attribute
!      ‘alloc_size’ with two arguments, which use ‘sizeof’ operator as the
       earlier size argument and don't use it as the later size argument.
!      This is a coding style warning.  The first argument to ‘calloc’ is
       documented to be number of elements in array, while the second
!      argument is size of each element, so ‘calloc (N, sizeof (int))’ is
!      preferred over ‘calloc (sizeof (int), N)’.  If ‘sizeof’ in the
       earlier argument and not the latter is intentional, the warning can
!      be suppressed by using ‘calloc (sizeof (struct S) + 0, n)’ or
!      ‘calloc (1 * sizeof (struct S), 4)’ or using ‘sizeof’ in the later
       argument as well.
  
! ‘-Walloc-size-larger-than=BYTE-SIZE’
!      Warn about calls to functions decorated with attribute ‘alloc_size’
       that attempt to allocate objects larger than the specified number
       of bytes, or where the result of the size computation in an integer
       type with infinite precision would exceed the value of
!      ‘PTRDIFF_MAX’ on the target.
!      ‘-Walloc-size-larger-than=’‘PTRDIFF_MAX’ is enabled by default.
       Warnings controlled by the option can be disabled either by
!      specifying BYTE-SIZE of ‘SIZE_MAX’ or more or by
!      ‘-Wno-alloc-size-larger-than’.  *Note Function Attributes::.
  
! ‘-Wno-alloc-size-larger-than’
!      Disable ‘-Walloc-size-larger-than=’ warnings.  The option is
!      equivalent to ‘-Walloc-size-larger-than=’‘SIZE_MAX’ or larger.
  
! ‘-Walloca’
!      This option warns on all uses of ‘alloca’ in the source.
  
! ‘-Walloca-larger-than=BYTE-SIZE’
!      This option warns on calls to ‘alloca’ with an integer argument
       whose value is either zero, or that is not bounded by a controlling
       predicate that limits its value to at most BYTE-SIZE.  It also
!      warns for calls to ‘alloca’ where the bound value is unknown.
       Arguments of non-integer types are considered unbounded even if
       they appear to be constrained to the expected range.
  
!      For example, a bounded case of ‘alloca’ could be:
  
            void func (size_t n)
            {
*************** warnings, in some cases it may also caus
*** 7806,7817 ****
              f (p);
            }
  
!      In the above example, passing '-Walloca-larger-than=1000' would not
!      issue a warning because the call to 'alloca' is known to be at most
!      1000 bytes.  However, if '-Walloca-larger-than=500' were passed,
       the compiler would emit a warning.
  
!      Unbounded uses, on the other hand, are uses of 'alloca' with no
       controlling predicate constraining its integer argument.  For
       example:
  
--- 7810,7821 ----
              f (p);
            }
  
!      In the above example, passing ‘-Walloca-larger-than=1000’ would not
!      issue a warning because the call to ‘alloca’ is known to be at most
!      1000 bytes.  However, if ‘-Walloca-larger-than=500’ were passed,
       the compiler would emit a warning.
  
!      Unbounded uses, on the other hand, are uses of ‘alloca’ with no
       controlling predicate constraining its integer argument.  For
       example:
  
*************** warnings, in some cases it may also caus
*** 7821,7827 ****
              f (p);
            }
  
!      If '-Walloca-larger-than=500' were passed, the above would trigger
       a warning, but this time because of the lack of bounds checking.
  
       Note, that even seemingly correct code involving signed integers
--- 7825,7831 ----
              f (p);
            }
  
!      If ‘-Walloca-larger-than=500’ were passed, the above would trigger
       a warning, but this time because of the lack of bounds checking.
  
       Note, that even seemingly correct code involving signed integers
*************** warnings, in some cases it may also caus
*** 7837,7861 ****
            }
  
       In the above example, N could be negative, causing a larger than
!      expected argument to be implicitly cast into the 'alloca' call.
  
!      This option also warns when 'alloca' is used in a loop.
  
!      '-Walloca-larger-than=''PTRDIFF_MAX' is enabled by default but is
!      usually only effective when '-ftree-vrp' is active (default for
!      '-O2' and above).
  
!      See also '-Wvla-larger-than=''byte-size'.
  
! '-Wno-alloca-larger-than'
!      Disable '-Walloca-larger-than=' warnings.  The option is equivalent
!      to '-Walloca-larger-than=''SIZE_MAX' or larger.
  
! '-Warith-conversion'
       Do warn about implicit conversions from arithmetic operations even
       when conversion of the operands to the same type cannot change
!      their values.  This affects warnings from '-Wconversion',
!      '-Wfloat-conversion', and '-Wsign-conversion'.
  
            void f (char c, int i)
            {
--- 7841,7865 ----
            }
  
       In the above example, N could be negative, causing a larger than
!      expected argument to be implicitly cast into the ‘alloca’ call.
  
!      This option also warns when ‘alloca’ is used in a loop.
  
!      ‘-Walloca-larger-than=’‘PTRDIFF_MAX’ is enabled by default but is
!      usually only effective when ‘-ftree-vrp’ is active (default for
!      ‘-O2’ and above).
  
!      See also ‘-Wvla-larger-than=’‘byte-size’.
  
! ‘-Wno-alloca-larger-than’
!      Disable ‘-Walloca-larger-than=’ warnings.  The option is equivalent
!      to ‘-Walloca-larger-than=’‘SIZE_MAX’ or larger.
  
! ‘-Warith-conversion’
       Do warn about implicit conversions from arithmetic operations even
       when conversion of the operands to the same type cannot change
!      their values.  This affects warnings from ‘-Wconversion’,
!      ‘-Wfloat-conversion’, and ‘-Wsign-conversion’.
  
            void f (char c, int i)
            {
*************** warnings, in some cases it may also caus
*** 7863,7885 ****
              c = c + 1; // only warns with -Warith-conversion
            }
  
! '-Warray-bounds'
! '-Warray-bounds=N'
       Warn about out of bounds subscripts or offsets into arrays.  This
!      warning is enabled by '-Wall'.  It is more effective when
!      '-ftree-vrp' is active (the default for '-O2' and above) but a
       subset of instances are issued even without optimization.
  
       By default, the trailing array of a structure will be treated as a
!      flexible array member by '-Warray-bounds' or '-Warray-bounds=N' if
       it is declared as either a flexible array member per C99 standard
!      onwards ('[]'), a GCC zero-length array extension ('[0]'), or an
!      one-element array ('[1]').  As a result, out of bounds subscripts
       or offsets into zero-length arrays or one-element arrays are not
       warned by default.
  
!      You can add the option '-fstrict-flex-arrays' or
!      '-fstrict-flex-arrays=LEVEL' to control how this option treat
       trailing array of a structure as a flexible array member:
  
       when LEVEL<=1, no change to the default behavior.
--- 7867,7889 ----
              c = c + 1; // only warns with -Warith-conversion
            }
  
! ‘-Warray-bounds’
! ‘-Warray-bounds=N’
       Warn about out of bounds subscripts or offsets into arrays.  This
!      warning is enabled by ‘-Wall’.  It is more effective when
!      ‘-ftree-vrp’ is active (the default for ‘-O2’ and above) but a
       subset of instances are issued even without optimization.
  
       By default, the trailing array of a structure will be treated as a
!      flexible array member by ‘-Warray-bounds’ or ‘-Warray-bounds=N’ if
       it is declared as either a flexible array member per C99 standard
!      onwards (‘[]’), a GCC zero-length array extension (‘[0]’), or an
!      one-element array (‘[1]’).  As a result, out of bounds subscripts
       or offsets into zero-length arrays or one-element arrays are not
       warned by default.
  
!      You can add the option ‘-fstrict-flex-arrays’ or
!      ‘-fstrict-flex-arrays=LEVEL’ to control how this option treat
       trailing array of a structure as a flexible array member:
  
       when LEVEL<=1, no change to the default behavior.
*************** warnings, in some cases it may also caus
*** 7891,7908 ****
       issued for out of bounds subscripts or offsets into zero-length
       arrays.
  
!      '-Warray-bounds=1'
!           This is the default warning level of '-Warray-bounds' and is
!           enabled by '-Wall'; higher levels are not, and must be
            explicitly requested.
  
!      '-Warray-bounds=2'
            This warning level also warns about the intermediate results
            of pointer arithmetic that may yield out of bounds values.
            This warning level may give a larger number of false positives
            and is deactivated by default.
  
! '-Warray-compare'
       Warn about equality and relational comparisons between two operands
       of array type.  This comparison was deprecated in C++20.  For
       example:
--- 7895,7912 ----
       issued for out of bounds subscripts or offsets into zero-length
       arrays.
  
!      ‘-Warray-bounds=1’
!           This is the default warning level of ‘-Warray-bounds’ and is
!           enabled by ‘-Wall’; higher levels are not, and must be
            explicitly requested.
  
!      ‘-Warray-bounds=2’
            This warning level also warns about the intermediate results
            of pointer arithmetic that may yield out of bounds values.
            This warning level may give a larger number of false positives
            and is deactivated by default.
  
! ‘-Warray-compare’
       Warn about equality and relational comparisons between two operands
       of array type.  This comparison was deprecated in C++20.  For
       example:
*************** warnings, in some cases it may also caus
*** 7911,7924 ****
            int arr2[5];
            bool same = arr1 == arr2;
  
!      '-Warray-compare' is enabled by '-Wall'.
  
! '-Warray-parameter'
! '-Warray-parameter=N'
       Warn about redeclarations of functions involving parameters of
       array or pointer types of inconsistent kinds or forms, and enable
       the detection of out-of-bounds accesses to such parameters by
!      warnings such as '-Warray-bounds'.
  
       If the first function declaration uses the array form for a
       parameter declaration, the bound specified in the array is assumed
--- 7915,7928 ----
            int arr2[5];
            bool same = arr1 == arr2;
  
!      ‘-Warray-compare’ is enabled by ‘-Wall’.
  
! ‘-Warray-parameter’
! ‘-Warray-parameter=N’
       Warn about redeclarations of functions involving parameters of
       array or pointer types of inconsistent kinds or forms, and enable
       the detection of out-of-bounds accesses to such parameters by
!      warnings such as ‘-Warray-bounds’.
  
       If the first function declaration uses the array form for a
       parameter declaration, the bound specified in the array is assumed
*************** warnings, in some cases it may also caus
*** 7926,7939 ****
       calls to the function and the maximum number of elements accessed
       by it.  Failing to provide arguments of sufficient size or
       accessing more than the maximum number of elements may be diagnosed
!      by warnings such as '-Warray-bounds' or '-Wstringop-overflow'.  At
       level 1, the warning diagnoses inconsistencies involving array
!      parameters declared using the 'T[static N]' form.
  
!      For example, the warning triggers for the second declaration of 'f'
!      because the first one with the keyword 'static' specifies that the
       array argument must have at least four elements, while the second
!      allows an array of any size to be passed to 'f'.
  
            void f (int[static 4]);
            void f (int[]);           // warning (inconsistent array form)
--- 7930,7943 ----
       calls to the function and the maximum number of elements accessed
       by it.  Failing to provide arguments of sufficient size or
       accessing more than the maximum number of elements may be diagnosed
!      by warnings such as ‘-Warray-bounds’ or ‘-Wstringop-overflow’.  At
       level 1, the warning diagnoses inconsistencies involving array
!      parameters declared using the ‘T[static N]’ form.
  
!      For example, the warning triggers for the second declaration of ‘f’
!      because the first one with the keyword ‘static’ specifies that the
       array argument must have at least four elements, while the second
!      allows an array of any size to be passed to ‘f’.
  
            void f (int[static 4]);
            void f (int[]);           // warning (inconsistent array form)
*************** warnings, in some cases it may also caus
*** 7954,8001 ****
            void g (int[]);     // no warning
            void g (int[8]);    // warning (inconsistent array bound)
  
!      '-Warray-parameter=2' is included in '-Wall'.  The
!      '-Wvla-parameter' option triggers warnings for similar
       inconsistencies involving Variable Length Array arguments.
  
!      The short form of the option '-Warray-parameter' is equivalent to
!      '-Warray-parameter=2'.  The negative form '-Wno-array-parameter' is
!      equivalent to '-Warray-parameter=0'.
  
! '-Wattribute-alias=N'
! '-Wno-attribute-alias'
!      Warn about declarations using the 'alias' and similar attributes
       whose target is incompatible with the type of the alias.  *Note
       Declaring Attributes of Functions: Function Attributes.
  
!      '-Wattribute-alias=1'
!           The default warning level of the '-Wattribute-alias' option
            diagnoses incompatibilities between the type of the alias
            declaration and that of its target.  Such incompatibilities
            are typically indicative of bugs.
  
!      '-Wattribute-alias=2'
  
!           At this level '-Wattribute-alias' also diagnoses cases where
            the attributes of the alias declaration are more restrictive
            than the attributes applied to its target.  These mismatches
            can potentially result in incorrect code generation.  In other
            cases they may be benign and could be resolved simply by
            adding the missing attribute to the target.  For comparison,
!           see the '-Wmissing-attributes' option, which controls
            diagnostics when the alias declaration is less restrictive
            than the target, rather than more restrictive.
  
!           Attributes considered include 'alloc_align', 'alloc_size',
!           'cold', 'const', 'hot', 'leaf', 'malloc', 'nonnull',
!           'noreturn', 'nothrow', 'pure', 'returns_nonnull', and
!           'returns_twice'.
  
!      '-Wattribute-alias' is equivalent to '-Wattribute-alias=1'.  This
       is the default.  You can disable these warnings with either
!      '-Wno-attribute-alias' or '-Wattribute-alias=0'.
  
! '-Wbidi-chars=[none|unpaired|any|ucn]'
       Warn about possibly misleading UTF-8 bidirectional control
       characters in comments, string literals, character constants, and
       identifiers.  Such characters can change left-to-right writing
--- 7958,8005 ----
            void g (int[]);     // no warning
            void g (int[8]);    // warning (inconsistent array bound)
  
!      ‘-Warray-parameter=2’ is included in ‘-Wall’.  The
!      ‘-Wvla-parameter’ option triggers warnings for similar
       inconsistencies involving Variable Length Array arguments.
  
!      The short form of the option ‘-Warray-parameter’ is equivalent to
!      ‘-Warray-parameter=2’.  The negative form ‘-Wno-array-parameter’ is
!      equivalent to ‘-Warray-parameter=0’.
  
! ‘-Wattribute-alias=N’
! ‘-Wno-attribute-alias’
!      Warn about declarations using the ‘alias’ and similar attributes
       whose target is incompatible with the type of the alias.  *Note
       Declaring Attributes of Functions: Function Attributes.
  
!      ‘-Wattribute-alias=1’
!           The default warning level of the ‘-Wattribute-alias’ option
            diagnoses incompatibilities between the type of the alias
            declaration and that of its target.  Such incompatibilities
            are typically indicative of bugs.
  
!      ‘-Wattribute-alias=2’
  
!           At this level ‘-Wattribute-alias’ also diagnoses cases where
            the attributes of the alias declaration are more restrictive
            than the attributes applied to its target.  These mismatches
            can potentially result in incorrect code generation.  In other
            cases they may be benign and could be resolved simply by
            adding the missing attribute to the target.  For comparison,
!           see the ‘-Wmissing-attributes’ option, which controls
            diagnostics when the alias declaration is less restrictive
            than the target, rather than more restrictive.
  
!           Attributes considered include ‘alloc_align’, ‘alloc_size’,
!           ‘cold’, ‘const’, ‘hot’, ‘leaf’, ‘malloc’, ‘nonnull’,
!           ‘noreturn’, ‘nothrow’, ‘pure’, ‘returns_nonnull’, and
!           ‘returns_twice’.
  
!      ‘-Wattribute-alias’ is equivalent to ‘-Wattribute-alias=1’.  This
       is the default.  You can disable these warnings with either
!      ‘-Wno-attribute-alias’ or ‘-Wattribute-alias=0’.
  
! ‘-Wbidi-chars=[none|unpaired|any|ucn]’
       Warn about possibly misleading UTF-8 bidirectional control
       characters in comments, string literals, character constants, and
       identifiers.  Such characters can change left-to-right writing
*************** warnings, in some cases it may also caus
*** 8005,8032 ****
       commented out, whereas it in fact is.
  
       There are three levels of warning supported by GCC.  The default is
!      '-Wbidi-chars=unpaired', which warns about improperly terminated
!      bidi contexts.  '-Wbidi-chars=none' turns the warning off.
!      '-Wbidi-chars=any' warns about any use of bidirectional control
       characters.
  
       By default, this warning does not warn about UCNs.  It is, however,
       possible to turn on such checking by using
!      '-Wbidi-chars=unpaired,ucn' or '-Wbidi-chars=any,ucn'.  Using
!      '-Wbidi-chars=ucn' is valid, and is equivalent to
!      '-Wbidi-chars=unpaired,ucn', if no previous '-Wbidi-chars=any' was
       specified.
  
! '-Wbool-compare'
       Warn about boolean expression compared with an integer value
!      different from 'true'/'false'.  For instance, the following
       comparison is always false:
            int n = 5;
            ...
            if ((n > 1) == 2) { ... }
!      This warning is enabled by '-Wall'.
  
! '-Wbool-operation'
       Warn about suspicious operations on expressions of a boolean type.
       For instance, bitwise negation of a boolean is very likely a bug in
       the program.  For C, this warning also warns about incrementing or
--- 8009,8036 ----
       commented out, whereas it in fact is.
  
       There are three levels of warning supported by GCC.  The default is
!      ‘-Wbidi-chars=unpaired’, which warns about improperly terminated
!      bidi contexts.  ‘-Wbidi-chars=none’ turns the warning off.
!      ‘-Wbidi-chars=any’ warns about any use of bidirectional control
       characters.
  
       By default, this warning does not warn about UCNs.  It is, however,
       possible to turn on such checking by using
!      ‘-Wbidi-chars=unpaired,ucn’ or ‘-Wbidi-chars=any,ucn’.  Using
!      ‘-Wbidi-chars=ucn’ is valid, and is equivalent to
!      ‘-Wbidi-chars=unpaired,ucn’, if no previous ‘-Wbidi-chars=any’ was
       specified.
  
! ‘-Wbool-compare’
       Warn about boolean expression compared with an integer value
!      different from ‘true’/‘false’.  For instance, the following
       comparison is always false:
            int n = 5;
            ...
            if ((n > 1) == 2) { ... }
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wbool-operation’
       Warn about suspicious operations on expressions of a boolean type.
       For instance, bitwise negation of a boolean is very likely a bug in
       the program.  For C, this warning also warns about incrementing or
*************** warnings, in some cases it may also caus
*** 8034,8042 ****
       decrementing a boolean is always invalid.  Incrementing a boolean
       is invalid in C++17, and deprecated otherwise.)
  
!      This warning is enabled by '-Wall'.
  
! '-Wduplicated-branches'
       Warn when an if-else has identical branches.  This warning detects
       cases like
            if (p != NULL)
--- 8038,8046 ----
       decrementing a boolean is always invalid.  Incrementing a boolean
       is invalid in C++17, and deprecated otherwise.)
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wduplicated-branches’
       Warn when an if-else has identical branches.  This warning detects
       cases like
            if (p != NULL)
*************** warnings, in some cases it may also caus
*** 8047,8111 ****
       This warning also warn for conditional operators:
              int i = x ? *p : *p;
  
! '-Wduplicated-cond'
       Warn about duplicated conditions in an if-else-if chain.  For
       instance, warn for the following code:
            if (p->q != NULL) { ... }
            else if (p->q != NULL) { ... }
  
! '-Wframe-address'
!      Warn when the '__builtin_frame_address' or
!      '__builtin_return_address' is called with an argument greater than
       0.  Such calls may return indeterminate values or crash the
!      program.  The warning is included in '-Wall'.
  
! '-Wno-discarded-qualifiers (C and Objective-C only)'
       Do not warn if type qualifiers on pointers are being discarded.
!      Typically, the compiler warns if a 'const char *' variable is
!      passed to a function that takes a 'char *' parameter.  This option
       can be used to suppress such a warning.
  
! '-Wno-discarded-array-qualifiers (C and Objective-C only)'
       Do not warn if type qualifiers on arrays which are pointer targets
!      are being discarded.  Typically, the compiler warns if a 'const int
!      (*)[]' variable is passed to a function that takes a 'int (*)[]'
       parameter.  This option can be used to suppress such a warning.
  
! '-Wno-incompatible-pointer-types (C and Objective-C only)'
       Do not warn when there is a conversion between pointers that have
       incompatible types.  This warning is for cases not covered by
!      '-Wno-pointer-sign', which warns for pointer argument passing or
       assignment with different signedness.
  
       By default, in C99 and later dialects of C, GCC treats this issue
       as an error.  The error can be downgraded to a warning using
!      '-fpermissive' (along with certain other errors), or for this error
!      alone, with '-Wno-error=incompatible-pointer-types'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wno-int-conversion (C and Objective-C only)'
       Do not warn about incompatible integer to pointer and pointer to
       integer conversions.  This warning is about implicit conversions;
!      for explicit conversions the warnings '-Wno-int-to-pointer-cast'
!      and '-Wno-pointer-to-int-cast' may be used.
  
       By default, in C99 and later dialects of C, GCC treats this issue
       as an error.  The error can be downgraded to a warning using
!      '-fpermissive' (along with certain other errors), or for this error
!      alone, with '-Wno-error=int-conversion'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wzero-length-bounds'
       Warn about accesses to elements of zero-length array members that
       might overlap other members of the same object.  Declaring interior
       zero-length arrays is discouraged because accesses to them are
       undefined.  *Note Zero Length::.
  
!      For example, the first two stores in function 'bad' are diagnosed
!      because the array elements overlap the subsequent members 'b' and
!      'c'.  The third store is diagnosed by '-Warray-bounds' because it
       is beyond the bounds of the enclosing object.
  
            struct X { int a[0]; int b, c; };
--- 8051,8115 ----
       This warning also warn for conditional operators:
              int i = x ? *p : *p;
  
! ‘-Wduplicated-cond’
       Warn about duplicated conditions in an if-else-if chain.  For
       instance, warn for the following code:
            if (p->q != NULL) { ... }
            else if (p->q != NULL) { ... }
  
! ‘-Wframe-address’
!      Warn when the ‘__builtin_frame_address’ or
!      ‘__builtin_return_address’ is called with an argument greater than
       0.  Such calls may return indeterminate values or crash the
!      program.  The warning is included in ‘-Wall’.
  
! ‘-Wno-discarded-qualifiers (C and Objective-C only)’
       Do not warn if type qualifiers on pointers are being discarded.
!      Typically, the compiler warns if a ‘const char *’ variable is
!      passed to a function that takes a ‘char *’ parameter.  This option
       can be used to suppress such a warning.
  
! ‘-Wno-discarded-array-qualifiers (C and Objective-C only)’
       Do not warn if type qualifiers on arrays which are pointer targets
!      are being discarded.  Typically, the compiler warns if a ‘const int
!      (*)[]’ variable is passed to a function that takes a ‘int (*)[]’
       parameter.  This option can be used to suppress such a warning.
  
! ‘-Wno-incompatible-pointer-types (C and Objective-C only)’
       Do not warn when there is a conversion between pointers that have
       incompatible types.  This warning is for cases not covered by
!      ‘-Wno-pointer-sign’, which warns for pointer argument passing or
       assignment with different signedness.
  
       By default, in C99 and later dialects of C, GCC treats this issue
       as an error.  The error can be downgraded to a warning using
!      ‘-fpermissive’ (along with certain other errors), or for this error
!      alone, with ‘-Wno-error=incompatible-pointer-types’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wno-int-conversion (C and Objective-C only)’
       Do not warn about incompatible integer to pointer and pointer to
       integer conversions.  This warning is about implicit conversions;
!      for explicit conversions the warnings ‘-Wno-int-to-pointer-cast’
!      and ‘-Wno-pointer-to-int-cast’ may be used.
  
       By default, in C99 and later dialects of C, GCC treats this issue
       as an error.  The error can be downgraded to a warning using
!      ‘-fpermissive’ (along with certain other errors), or for this error
!      alone, with ‘-Wno-error=int-conversion’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wzero-length-bounds’
       Warn about accesses to elements of zero-length array members that
       might overlap other members of the same object.  Declaring interior
       zero-length arrays is discouraged because accesses to them are
       undefined.  *Note Zero Length::.
  
!      For example, the first two stores in function ‘bad’ are diagnosed
!      because the array elements overlap the subsequent members ‘b’ and
!      ‘c’.  The third store is diagnosed by ‘-Warray-bounds’ because it
       is beyond the bounds of the enclosing object.
  
            struct X { int a[0]; int b, c; };
*************** warnings, in some cases it may also caus
*** 8118,8142 ****
              x.a[2] = 2;   // -Warray-bounds
            }
  
!      Option '-Wzero-length-bounds' is enabled by '-Warray-bounds'.
  
! '-Wno-div-by-zero'
       Do not warn about compile-time integer division by zero.
       Floating-point division by zero is not warned about, as it can be a
       legitimate way of obtaining infinities and NaNs.
  
! '-Wsystem-headers'
       Print warning messages for constructs found in system header files.
       Warnings from system headers are normally suppressed, on the
       assumption that they usually do not indicate real problems and
       would only make the compiler output harder to read.  Using this
       command-line option tells GCC to emit warnings from system headers
!      as if they occurred in user code.  However, note that using '-Wall'
       in conjunction with this option does _not_ warn about unknown
!      pragmas in system headers--for that, '-Wunknown-pragmas' must also
       be used.
  
! '-Wtautological-compare'
       Warn if a self-comparison always evaluates to true or false.  This
       warning detects various mistakes such as:
            int i = 1;
--- 8122,8146 ----
              x.a[2] = 2;   // -Warray-bounds
            }
  
!      Option ‘-Wzero-length-bounds’ is enabled by ‘-Warray-bounds’.
  
! ‘-Wno-div-by-zero’
       Do not warn about compile-time integer division by zero.
       Floating-point division by zero is not warned about, as it can be a
       legitimate way of obtaining infinities and NaNs.
  
! ‘-Wsystem-headers’
       Print warning messages for constructs found in system header files.
       Warnings from system headers are normally suppressed, on the
       assumption that they usually do not indicate real problems and
       would only make the compiler output harder to read.  Using this
       command-line option tells GCC to emit warnings from system headers
!      as if they occurred in user code.  However, note that using ‘-Wall’
       in conjunction with this option does _not_ warn about unknown
!      pragmas in system headers--for that, ‘-Wunknown-pragmas’ must also
       be used.
  
! ‘-Wtautological-compare’
       Warn if a self-comparison always evaluates to true or false.  This
       warning detects various mistakes such as:
            int i = 1;
*************** warnings, in some cases it may also caus
*** 8148,8156 ****
            if ((a & 16) == 10) { ... }
       will always be false.
  
!      This warning is enabled by '-Wall'.
  
! '-Wtrampolines'
       Warn about trampolines generated for pointers to nested functions.
       A trampoline is a small piece of data or code that is created at
       run time on the stack when the address of a nested function is
--- 8152,8160 ----
            if ((a & 16) == 10) { ... }
       will always be false.
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wtrampolines’
       Warn about trampolines generated for pointers to nested functions.
       A trampoline is a small piece of data or code that is created at
       run time on the stack when the address of a nested function is
*************** warnings, in some cases it may also caus
*** 8160,8166 ****
       and thus requires the stack to be made executable in order for the
       program to work properly.
  
! '-Wfloat-equal'
       Warn if floating-point values are used in equality comparisons.
  
       The idea behind this is that sometimes it is convenient (for the
--- 8164,8170 ----
       and thus requires the stack to be made executable in order for the
       program to work properly.
  
! ‘-Wfloat-equal’
       Warn if floating-point values are used in equality comparisons.
  
       The idea behind this is that sometimes it is convenient (for the
*************** warnings, in some cases it may also caus
*** 8175,8258 ****
       relational operators, so equality comparisons are probably
       mistaken.
  
! '-Wtraditional (C and Objective-C only)'
       Warn about certain constructs that behave differently in
       traditional and ISO C.  Also warn about ISO C constructs that have
       no traditional C equivalent, and/or problematic constructs that
       should be avoided.
  
!         * Macro parameters that appear within string literals in the
            macro body.  In traditional C macro replacement takes place
            within string literals, but in ISO C it does not.
  
!         * In traditional C, some preprocessor directives did not exist.
            Traditional preprocessors only considered a line to be a
!           directive if the '#' appeared in column 1 on the line.
!           Therefore '-Wtraditional' warns about directives that
!           traditional C understands but ignores because the '#' does not
            appear as the first character on the line.  It also suggests
!           you hide directives like '#pragma' not understood by
            traditional C by indenting them.  Some traditional
!           implementations do not recognize '#elif', so this option
            suggests avoiding it altogether.
  
!         * A function-like macro that appears without arguments.
  
!         * The unary plus operator.
  
!         * The 'U' integer constant suffix, or the 'F' or 'L'
            floating-point constant suffixes.  (Traditional C does support
!           the 'L' suffix on integer constants.)  Note, these suffixes
            appear in macros defined in the system headers of most modern
!           systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
            of these macros in user code might normally lead to spurious
            warnings, however GCC's integrated preprocessor has enough
            context to avoid warning in these cases.
  
!         * A function declared external in one block and then used after
            the end of the block.
  
!         * A 'switch' statement has an operand of type 'long'.
  
!         * A non-'static' function declaration follows a 'static' one.
            This construct is not accepted by some traditional C
            compilers.
  
!         * The ISO type of an integer constant has a different width or
            signedness from its traditional type.  This warning is only
            issued if the base of the constant is ten.  I.e. hexadecimal
            or octal values, which typically represent bit patterns, are
            not warned about.
  
!         * Usage of ISO string concatenation is detected.
  
!         * Initialization of automatic aggregates.
  
!         * Identifier conflicts with labels.  Traditional C lacks a
            separate namespace for labels.
  
!         * Initialization of unions.  If the initializer is zero, the
            warning is omitted.  This is done under the assumption that
            the zero initializer in user code appears conditioned on e.g.
!           '__STDC__' to avoid missing initializer warnings and relies on
            default initialization to zero in the traditional C case.
  
!         * Conversions by prototypes between fixed/floating-point values
            and vice versa.  The absence of these prototypes when
            compiling with traditional C causes serious problems.  This is
            a subset of the possible conversion warnings; for the full set
!           use '-Wtraditional-conversion'.
  
!         * Use of ISO C style function definitions.  This warning
            intentionally is _not_ issued for prototype declarations or
            variadic functions because these ISO C features appear in your
            code when using libiberty's traditional C compatibility
!           macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
            for nested functions because that feature is already a GCC
            extension and thus not relevant to traditional C
            compatibility.
  
! '-Wtraditional-conversion (C and Objective-C only)'
       Warn if a prototype causes a type conversion that is different from
       what would happen to the same argument in the absence of a
       prototype.  This includes conversions of fixed point to floating
--- 8179,8262 ----
       relational operators, so equality comparisons are probably
       mistaken.
  
! ‘-Wtraditional (C and Objective-C only)’
       Warn about certain constructs that behave differently in
       traditional and ISO C.  Also warn about ISO C constructs that have
       no traditional C equivalent, and/or problematic constructs that
       should be avoided.
  
!         • Macro parameters that appear within string literals in the
            macro body.  In traditional C macro replacement takes place
            within string literals, but in ISO C it does not.
  
!         • In traditional C, some preprocessor directives did not exist.
            Traditional preprocessors only considered a line to be a
!           directive if the ‘#’ appeared in column 1 on the line.
!           Therefore ‘-Wtraditional’ warns about directives that
!           traditional C understands but ignores because the ‘#’ does not
            appear as the first character on the line.  It also suggests
!           you hide directives like ‘#pragma’ not understood by
            traditional C by indenting them.  Some traditional
!           implementations do not recognize ‘#elif’, so this option
            suggests avoiding it altogether.
  
!         • A function-like macro that appears without arguments.
  
!         • The unary plus operator.
  
!         • The ‘U’ integer constant suffix, or the ‘F’ or ‘L’
            floating-point constant suffixes.  (Traditional C does support
!           the ‘L’ suffix on integer constants.)  Note, these suffixes
            appear in macros defined in the system headers of most modern
!           systems, e.g. the ‘_MIN’/‘_MAX’ macros in ‘<limits.h>’.  Use
            of these macros in user code might normally lead to spurious
            warnings, however GCC's integrated preprocessor has enough
            context to avoid warning in these cases.
  
!         • A function declared external in one block and then used after
            the end of the block.
  
!         • A ‘switch’ statement has an operand of type ‘long’.
  
!         • A non-‘static’ function declaration follows a ‘static’ one.
            This construct is not accepted by some traditional C
            compilers.
  
!         • The ISO type of an integer constant has a different width or
            signedness from its traditional type.  This warning is only
            issued if the base of the constant is ten.  I.e. hexadecimal
            or octal values, which typically represent bit patterns, are
            not warned about.
  
!         • Usage of ISO string concatenation is detected.
  
!         • Initialization of automatic aggregates.
  
!         • Identifier conflicts with labels.  Traditional C lacks a
            separate namespace for labels.
  
!         • Initialization of unions.  If the initializer is zero, the
            warning is omitted.  This is done under the assumption that
            the zero initializer in user code appears conditioned on e.g.
!           ‘__STDC__’ to avoid missing initializer warnings and relies on
            default initialization to zero in the traditional C case.
  
!         • Conversions by prototypes between fixed/floating-point values
            and vice versa.  The absence of these prototypes when
            compiling with traditional C causes serious problems.  This is
            a subset of the possible conversion warnings; for the full set
!           use ‘-Wtraditional-conversion’.
  
!         • Use of ISO C style function definitions.  This warning
            intentionally is _not_ issued for prototype declarations or
            variadic functions because these ISO C features appear in your
            code when using libiberty's traditional C compatibility
!           macros, ‘PARAMS’ and ‘VPARAMS’.  This warning is also bypassed
            for nested functions because that feature is already a GCC
            extension and thus not relevant to traditional C
            compatibility.
  
! ‘-Wtraditional-conversion (C and Objective-C only)’
       Warn if a prototype causes a type conversion that is different from
       what would happen to the same argument in the absence of a
       prototype.  This includes conversions of fixed point to floating
*************** warnings, in some cases it may also caus
*** 8260,8274 ****
       a fixed-point argument except when the same as the default
       promotion.
  
! '-Wdeclaration-after-statement (C and Objective-C only)'
       Warn when a declaration is found after a statement in a block.
       This construct, known from C++, was introduced with ISO C99 and is
       by default allowed in GCC.  It is not supported by ISO C90.  *Note
       Mixed Labels and Declarations::.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wshadow'
       Warn whenever a local variable or type declaration shadows another
       variable, parameter, type, class member (in C++), or instance
       variable (in Objective-C) or whenever a built-in function is
--- 8264,8278 ----
       a fixed-point argument except when the same as the default
       promotion.
  
! ‘-Wdeclaration-after-statement (C and Objective-C only)’
       Warn when a declaration is found after a statement in a block.
       This construct, known from C++, was introduced with ISO C99 and is
       by default allowed in GCC.  It is not supported by ISO C90.  *Note
       Mixed Labels and Declarations::.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wshadow’
       Warn whenever a local variable or type declaration shadows another
       variable, parameter, type, class member (in C++), or instance
       variable (in Objective-C) or whenever a built-in function is
*************** warnings, in some cases it may also caus
*** 8276,8302 ****
       shadows an explicit typedef, but not if it shadows a
       struct/class/enum.  If this warning is enabled, it includes also
       all instances of local shadowing.  This means that
!      '-Wno-shadow=local' and '-Wno-shadow=compatible-local' are ignored
!      when '-Wshadow' is used.  Same as '-Wshadow=global'.
  
! '-Wno-shadow-ivar (Objective-C only)'
       Do not warn whenever a local variable shadows an instance variable
       in an Objective-C method.
  
! '-Wshadow=global'
!      Warn for any shadowing.  Same as '-Wshadow'.
  
! '-Wshadow=local'
       Warn when a local variable shadows another local variable or
       parameter.
  
! '-Wshadow=compatible-local'
       Warn when a local variable shadows another local variable or
       parameter whose type is compatible with that of the shadowing
       variable.  In C++, type compatibility here means the type of the
       shadowing variable can be converted to that of the shadowed
       variable.  The creation of this flag (in addition to
!      '-Wshadow=local') is based on the idea that when a local variable
       shadows another one of incompatible type, it is most likely
       intentional, not a bug or typo, as shown in the following example:
  
--- 8280,8306 ----
       shadows an explicit typedef, but not if it shadows a
       struct/class/enum.  If this warning is enabled, it includes also
       all instances of local shadowing.  This means that
!      ‘-Wno-shadow=local’ and ‘-Wno-shadow=compatible-local’ are ignored
!      when ‘-Wshadow’ is used.  Same as ‘-Wshadow=global’.
  
! ‘-Wno-shadow-ivar (Objective-C only)’
       Do not warn whenever a local variable shadows an instance variable
       in an Objective-C method.
  
! ‘-Wshadow=global’
!      Warn for any shadowing.  Same as ‘-Wshadow’.
  
! ‘-Wshadow=local’
       Warn when a local variable shadows another local variable or
       parameter.
  
! ‘-Wshadow=compatible-local’
       Warn when a local variable shadows another local variable or
       parameter whose type is compatible with that of the shadowing
       variable.  In C++, type compatibility here means the type of the
       shadowing variable can be converted to that of the shadowed
       variable.  The creation of this flag (in addition to
!      ‘-Wshadow=local’) is based on the idea that when a local variable
       shadows another one of incompatible type, it is most likely
       intentional, not a bug or typo, as shown in the following example:
  
*************** warnings, in some cases it may also caus
*** 8309,8365 ****
              ...
            }
  
!      Since the two variable 'i' in the example above have incompatible
!      types, enabling only '-Wshadow=compatible-local' does not emit a
       warning.  Because their types are incompatible, if a programmer
       accidentally uses one in place of the other, type checking is
       expected to catch that and emit an error or warning.  Use of this
!      flag instead of '-Wshadow=local' can possibly reduce the number of
       warnings triggered by intentional shadowing.  Note that this also
!      means that shadowing 'const char *i' by 'char *i' does not emit a
       warning.
  
!      This warning is also enabled by '-Wshadow=local'.
  
! '-Wlarger-than=BYTE-SIZE'
       Warn whenever an object is defined whose size exceeds BYTE-SIZE.
!      '-Wlarger-than=''PTRDIFF_MAX' is enabled by default.  Warnings
       controlled by the option can be disabled either by specifying
!      BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-larger-than'.
  
!      Also warn for calls to bounded functions such as 'memchr' or
!      'strnlen' that specify a bound greater than the largest possible
!      object, which is 'PTRDIFF_MAX' bytes by default.  These warnings
!      can only be disabled by '-Wno-larger-than'.
  
! '-Wno-larger-than'
!      Disable '-Wlarger-than=' warnings.  The option is equivalent to
!      '-Wlarger-than=''SIZE_MAX' or larger.
  
! '-Wframe-larger-than=BYTE-SIZE'
       Warn if the size of a function frame exceeds BYTE-SIZE.  The
       computation done to determine the stack frame size is approximate
       and not conservative.  The actual requirements may be somewhat
       greater than BYTE-SIZE even if you do not get a warning.  In
!      addition, any space allocated via 'alloca', variable-length arrays,
       or related constructs is not included by the compiler when
       determining whether or not to issue a warning.
!      '-Wframe-larger-than=''PTRDIFF_MAX' is enabled by default.
       Warnings controlled by the option can be disabled either by
!      specifying BYTE-SIZE of 'SIZE_MAX' or more or by
!      '-Wno-frame-larger-than'.
  
! '-Wno-frame-larger-than'
!      Disable '-Wframe-larger-than=' warnings.  The option is equivalent
!      to '-Wframe-larger-than=''SIZE_MAX' or larger.
  
! '-Wfree-nonheap-object'
       Warn when attempting to deallocate an object that was either not
       allocated on the heap, or by using a pointer that was not returned
       from a prior call to the corresponding allocation function.  For
!      example, because the call to 'stpcpy' returns a pointer to the
       terminating nul character and not to the beginning of the object,
!      the call to 'free' below is diagnosed.
  
            void f (char *p)
            {
--- 8313,8369 ----
              ...
            }
  
!      Since the two variable ‘i’ in the example above have incompatible
!      types, enabling only ‘-Wshadow=compatible-local’ does not emit a
       warning.  Because their types are incompatible, if a programmer
       accidentally uses one in place of the other, type checking is
       expected to catch that and emit an error or warning.  Use of this
!      flag instead of ‘-Wshadow=local’ can possibly reduce the number of
       warnings triggered by intentional shadowing.  Note that this also
!      means that shadowing ‘const char *i’ by ‘char *i’ does not emit a
       warning.
  
!      This warning is also enabled by ‘-Wshadow=local’.
  
! ‘-Wlarger-than=BYTE-SIZE’
       Warn whenever an object is defined whose size exceeds BYTE-SIZE.
!      ‘-Wlarger-than=’‘PTRDIFF_MAX’ is enabled by default.  Warnings
       controlled by the option can be disabled either by specifying
!      BYTE-SIZE of ‘SIZE_MAX’ or more or by ‘-Wno-larger-than’.
  
!      Also warn for calls to bounded functions such as ‘memchr’ or
!      ‘strnlen’ that specify a bound greater than the largest possible
!      object, which is ‘PTRDIFF_MAX’ bytes by default.  These warnings
!      can only be disabled by ‘-Wno-larger-than’.
  
! ‘-Wno-larger-than’
!      Disable ‘-Wlarger-than=’ warnings.  The option is equivalent to
!      ‘-Wlarger-than=’‘SIZE_MAX’ or larger.
  
! ‘-Wframe-larger-than=BYTE-SIZE’
       Warn if the size of a function frame exceeds BYTE-SIZE.  The
       computation done to determine the stack frame size is approximate
       and not conservative.  The actual requirements may be somewhat
       greater than BYTE-SIZE even if you do not get a warning.  In
!      addition, any space allocated via ‘alloca’, variable-length arrays,
       or related constructs is not included by the compiler when
       determining whether or not to issue a warning.
!      ‘-Wframe-larger-than=’‘PTRDIFF_MAX’ is enabled by default.
       Warnings controlled by the option can be disabled either by
!      specifying BYTE-SIZE of ‘SIZE_MAX’ or more or by
!      ‘-Wno-frame-larger-than’.
  
! ‘-Wno-frame-larger-than’
!      Disable ‘-Wframe-larger-than=’ warnings.  The option is equivalent
!      to ‘-Wframe-larger-than=’‘SIZE_MAX’ or larger.
  
! ‘-Wfree-nonheap-object’
       Warn when attempting to deallocate an object that was either not
       allocated on the heap, or by using a pointer that was not returned
       from a prior call to the corresponding allocation function.  For
!      example, because the call to ‘stpcpy’ returns a pointer to the
       terminating nul character and not to the beginning of the object,
!      the call to ‘free’ below is diagnosed.
  
            void f (char *p)
            {
*************** warnings, in some cases it may also caus
*** 8368,8425 ****
              free (p);   // warning
            }
  
!      '-Wfree-nonheap-object' is included in '-Wall'.
  
! '-Wstack-usage=BYTE-SIZE'
       Warn if the stack usage of a function might exceed BYTE-SIZE.  The
       computation done to determine the stack usage is conservative.  Any
!      space allocated via 'alloca', variable-length arrays, or related
       constructs is included by the compiler when determining whether or
       not to issue a warning.
  
!      The message is in keeping with the output of '-fstack-usage'.
  
!         * If the stack usage is fully static but exceeds the specified
            amount, it's:
  
                   warning: stack usage is 1120 bytes
!         * If the stack usage is (partly) dynamic but bounded, it's:
  
                   warning: stack usage might be 1648 bytes
!         * If the stack usage is (partly) dynamic and not bounded, it's:
  
                   warning: stack usage might be unbounded
  
!      '-Wstack-usage=''PTRDIFF_MAX' is enabled by default.  Warnings
       controlled by the option can be disabled either by specifying
!      BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-stack-usage'.
  
! '-Wno-stack-usage'
!      Disable '-Wstack-usage=' warnings.  The option is equivalent to
!      '-Wstack-usage=''SIZE_MAX' or larger.
  
! '-Wunsafe-loop-optimizations'
       Warn if the loop cannot be optimized because the compiler cannot
       assume anything on the bounds of the loop indices.  With
!      '-funsafe-loop-optimizations' warn if the compiler makes such
       assumptions.
  
! '-Wno-pedantic-ms-format (MinGW targets only)'
!      When used in combination with '-Wformat' and '-pedantic' without
       GNU extensions, this option disables the warnings about non-ISO
!      'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
       used on Windows targets, which depend on the MS runtime.
  
! '-Wpointer-arith'
       Warn about anything that depends on the "size of" a function type
!      or of 'void'.  GNU C assigns these types a size of 1, for
!      convenience in calculations with 'void *' pointers and pointers to
       functions.  In C++, warn also when an arithmetic operation involves
!      'NULL'.  This warning is also enabled by '-Wpedantic'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wno-pointer-compare'
       Do not warn if a pointer is compared with a zero character
       constant.  This usually means that the pointer was meant to be
       dereferenced.  For example:
--- 8372,8429 ----
              free (p);   // warning
            }
  
!      ‘-Wfree-nonheap-object’ is included in ‘-Wall’.
  
! ‘-Wstack-usage=BYTE-SIZE’
       Warn if the stack usage of a function might exceed BYTE-SIZE.  The
       computation done to determine the stack usage is conservative.  Any
!      space allocated via ‘alloca’, variable-length arrays, or related
       constructs is included by the compiler when determining whether or
       not to issue a warning.
  
!      The message is in keeping with the output of ‘-fstack-usage’.
  
!         • If the stack usage is fully static but exceeds the specified
            amount, it's:
  
                   warning: stack usage is 1120 bytes
!         • If the stack usage is (partly) dynamic but bounded, it's:
  
                   warning: stack usage might be 1648 bytes
!         • If the stack usage is (partly) dynamic and not bounded, it's:
  
                   warning: stack usage might be unbounded
  
!      ‘-Wstack-usage=’‘PTRDIFF_MAX’ is enabled by default.  Warnings
       controlled by the option can be disabled either by specifying
!      BYTE-SIZE of ‘SIZE_MAX’ or more or by ‘-Wno-stack-usage’.
  
! ‘-Wno-stack-usage’
!      Disable ‘-Wstack-usage=’ warnings.  The option is equivalent to
!      ‘-Wstack-usage=’‘SIZE_MAX’ or larger.
  
! ‘-Wunsafe-loop-optimizations’
       Warn if the loop cannot be optimized because the compiler cannot
       assume anything on the bounds of the loop indices.  With
!      ‘-funsafe-loop-optimizations’ warn if the compiler makes such
       assumptions.
  
! ‘-Wno-pedantic-ms-format (MinGW targets only)’
!      When used in combination with ‘-Wformat’ and ‘-pedantic’ without
       GNU extensions, this option disables the warnings about non-ISO
!      ‘printf’ / ‘scanf’ format width specifiers ‘I32’, ‘I64’, and ‘I’
       used on Windows targets, which depend on the MS runtime.
  
! ‘-Wpointer-arith’
       Warn about anything that depends on the "size of" a function type
!      or of ‘void’.  GNU C assigns these types a size of 1, for
!      convenience in calculations with ‘void *’ pointers and pointers to
       functions.  In C++, warn also when an arithmetic operation involves
!      ‘NULL’.  This warning is also enabled by ‘-Wpedantic’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wno-pointer-compare’
       Do not warn if a pointer is compared with a zero character
       constant.  This usually means that the pointer was meant to be
       dereferenced.  For example:
*************** warnings, in some cases it may also caus
*** 8432,8490 ****
  
       This warning is enabled by default.
  
! '-Wno-tsan'
  
       Disable warnings about unsupported features in ThreadSanitizer.
  
!      ThreadSanitizer does not support 'std::atomic_thread_fence' and can
       report false positives.
  
! '-Wtype-limits'
       Warn if a comparison is always true or always false due to the
       limited range of the data type, but do not warn for constant
       expressions.  For example, warn if an unsigned variable is compared
!      against zero with '<' or '>='.  This warning is also enabled by
!      '-Wextra'.
  
! '-Wabsolute-value (C and Objective-C only)'
       Warn for calls to standard functions that compute the absolute
       value of an argument when a more appropriate standard function is
!      available.  For example, calling 'abs(3.14)' triggers the warning
       because the appropriate function to call to compute the absolute
!      value of a double argument is 'fabs'.  The option also triggers
       warnings when the argument in a call to such a function has an
       unsigned type.  This warning can be suppressed with an explicit
!      type cast and it is also enabled by '-Wextra'.
  
! '-Wcomment'
! '-Wcomments'
!      Warn whenever a comment-start sequence '/*' appears in a '/*'
!      comment, or whenever a backslash-newline appears in a '//' comment.
!      This warning is enabled by '-Wall'.
  
! '-Wtrigraphs'
       Warn if any trigraphs are encountered that might change the meaning
       of the program.  Trigraphs within comments are not warned about,
       except those that would form escaped newlines.
  
!      This option is implied by '-Wall'.  If '-Wall' is not given, this
       option is still enabled unless trigraphs are enabled.  To get
!      trigraph conversion without warnings, but get the other '-Wall'
!      warnings, use '-trigraphs -Wall -Wno-trigraphs'.
  
! '-Wundef'
!      Warn if an undefined identifier is evaluated in an '#if' directive.
       Such identifiers are replaced with zero.
  
! '-Wexpansion-to-defined'
!      Warn whenever 'defined' is encountered in the expansion of a macro
!      (including the case where the macro is expanded by an '#if'
       directive).  Such usage is not portable.  This warning is also
!      enabled by '-Wpedantic' and '-Wextra'.
  
! '-Wunused-macros'
       Warn about macros defined in the main file that are unused.  A
!      macro is "used" if it is expanded or tested for existence at least
       once.  The preprocessor also warns if the macro has not been used
       at the time it is redefined or undefined.
  
--- 8436,8494 ----
  
       This warning is enabled by default.
  
! ‘-Wno-tsan’
  
       Disable warnings about unsupported features in ThreadSanitizer.
  
!      ThreadSanitizer does not support ‘std::atomic_thread_fence’ and can
       report false positives.
  
! ‘-Wtype-limits’
       Warn if a comparison is always true or always false due to the
       limited range of the data type, but do not warn for constant
       expressions.  For example, warn if an unsigned variable is compared
!      against zero with ‘<’ or ‘>=’.  This warning is also enabled by
!      ‘-Wextra’.
  
! ‘-Wabsolute-value (C and Objective-C only)’
       Warn for calls to standard functions that compute the absolute
       value of an argument when a more appropriate standard function is
!      available.  For example, calling ‘abs(3.14)’ triggers the warning
       because the appropriate function to call to compute the absolute
!      value of a double argument is ‘fabs’.  The option also triggers
       warnings when the argument in a call to such a function has an
       unsigned type.  This warning can be suppressed with an explicit
!      type cast and it is also enabled by ‘-Wextra’.
  
! ‘-Wcomment’
! ‘-Wcomments’
!      Warn whenever a comment-start sequence ‘/*’ appears in a ‘/*’
!      comment, or whenever a backslash-newline appears in a ‘//’ comment.
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wtrigraphs’
       Warn if any trigraphs are encountered that might change the meaning
       of the program.  Trigraphs within comments are not warned about,
       except those that would form escaped newlines.
  
!      This option is implied by ‘-Wall’.  If ‘-Wall’ is not given, this
       option is still enabled unless trigraphs are enabled.  To get
!      trigraph conversion without warnings, but get the other ‘-Wall’
!      warnings, use ‘-trigraphs -Wall -Wno-trigraphs’.
  
! ‘-Wundef’
!      Warn if an undefined identifier is evaluated in an ‘#if’ directive.
       Such identifiers are replaced with zero.
  
! ‘-Wexpansion-to-defined’
!      Warn whenever ‘defined’ is encountered in the expansion of a macro
!      (including the case where the macro is expanded by an ‘#if’
       directive).  Such usage is not portable.  This warning is also
!      enabled by ‘-Wpedantic’ and ‘-Wextra’.
  
! ‘-Wunused-macros’
       Warn about macros defined in the main file that are unused.  A
!      macro is “used” if it is expanded or tested for existence at least
       once.  The preprocessor also warns if the macro has not been used
       at the time it is redefined or undefined.
  
*************** warnings, in some cases it may also caus
*** 8501,8508 ****
            #if defined the_macro_causing_the_warning
            #endif
  
! '-Wno-endif-labels'
!      Do not warn whenever an '#else' or an '#endif' are followed by
       text.  This sometimes happens in older programs with code of the
       form
  
--- 8505,8512 ----
            #if defined the_macro_causing_the_warning
            #endif
  
! ‘-Wno-endif-labels’
!      Do not warn whenever an ‘#else’ or an ‘#endif’ are followed by
       text.  This sometimes happens in older programs with code of the
       form
  
*************** warnings, in some cases it may also caus
*** 8512,8612 ****
            ...
            #endif FOO
  
!      The second and third 'FOO' should be in comments.  This warning is
       on by default.
  
! '-Wbad-function-cast (C and Objective-C only)'
       Warn when a function call is cast to a non-matching type.  For
       example, warn if a call to a function returning an integer type is
       cast to a pointer type.
  
! '-Wc90-c99-compat (C and Objective-C only)'
       Warn about features not present in ISO C90, but present in ISO C99.
!      For instance, warn about use of variable length arrays, 'long long'
!      type, 'bool' type, compound literals, designated initializers, and
       so on.  This option is independent of the standards mode.  Warnings
!      are disabled in the expression that follows '__extension__'.
  
! '-Wc99-c11-compat (C and Objective-C only)'
       Warn about features not present in ISO C99, but present in ISO C11.
       For instance, warn about use of anonymous structures and unions,
!      '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
!      '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
       so on.  This option is independent of the standards mode.  Warnings
!      are disabled in the expression that follows '__extension__'.
  
! '-Wc11-c23-compat (C and Objective-C only)'
! '-Wc11-c2x-compat (C and Objective-C only)'
       Warn about features not present in ISO C11, but present in ISO C23.
!      For instance, warn about omitting the string in '_Static_assert',
!      use of '[[]]' syntax for attributes, use of decimal floating-point
       types, and so on.  This option is independent of the standards
       mode.  Warnings are disabled in the expression that follows
!      '__extension__'.  The name '-Wc11-c2x-compat' is deprecated.
  
       When not compiling in C23 mode, these warnings are upgraded to
!      errors by '-pedantic-errors'.
  
! '-Wc++-compat (C and Objective-C only)'
       Warn about ISO C constructs that are outside of the common subset
       of ISO C and ISO C++, e.g. request for implicit conversion from
!      'void *' to a pointer to non-'void' type.
  
! '-Wc++11-compat (C++ and Objective-C++ only)'
       Warn about C++ constructs whose meaning differs between ISO C++
       1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
!      keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
!      is enabled by '-Wall'.
  
! '-Wc++14-compat (C++ and Objective-C++ only)'
       Warn about C++ constructs whose meaning differs between ISO C++
!      2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.
  
! '-Wc++17-compat (C++ and Objective-C++ only)'
       Warn about C++ constructs whose meaning differs between ISO C++
!      2014 and ISO C++ 2017.  This warning is enabled by '-Wall'.
  
! '-Wc++20-compat (C++ and Objective-C++ only)'
       Warn about C++ constructs whose meaning differs between ISO C++
!      2017 and ISO C++ 2020.  This warning is enabled by '-Wall'.
  
! '-Wno-c++11-extensions (C++ and Objective-C++ only)'
       Do not warn about C++11 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++11
!      constructs will only be diagnosed if '-Wpedantic' is used.
  
! '-Wno-c++14-extensions (C++ and Objective-C++ only)'
       Do not warn about C++14 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++14
!      constructs will only be diagnosed if '-Wpedantic' is used.
  
! '-Wno-c++17-extensions (C++ and Objective-C++ only)'
       Do not warn about C++17 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++17
!      constructs will only be diagnosed if '-Wpedantic' is used.
  
! '-Wno-c++20-extensions (C++ and Objective-C++ only)'
       Do not warn about C++20 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++20
!      constructs will only be diagnosed if '-Wpedantic' is used.
  
! '-Wno-c++23-extensions (C++ and Objective-C++ only)'
       Do not warn about C++23 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++23
!      constructs will only be diagnosed if '-Wpedantic' is used.
  
! '-Wno-c++26-extensions (C++ and Objective-C++ only)'
       Do not warn about C++26 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++26
!      constructs will only be diagnosed if '-Wpedantic' is used.
  
! '-Wcast-qual'
       Warn whenever a pointer is cast so as to remove a type qualifier
!      from the target type.  For example, warn if a 'const char *' is
!      cast to an ordinary 'char *'.
  
       Also warn when making a cast that introduces a type qualifier in an
!      unsafe way.  For example, casting 'char **' to 'const char **' is
       unsafe, as in this example:
  
              /* p is char ** value.  */
--- 8516,8616 ----
            ...
            #endif FOO
  
!      The second and third ‘FOO’ should be in comments.  This warning is
       on by default.
  
! ‘-Wbad-function-cast (C and Objective-C only)’
       Warn when a function call is cast to a non-matching type.  For
       example, warn if a call to a function returning an integer type is
       cast to a pointer type.
  
! ‘-Wc90-c99-compat (C and Objective-C only)’
       Warn about features not present in ISO C90, but present in ISO C99.
!      For instance, warn about use of variable length arrays, ‘long long’
!      type, ‘bool’ type, compound literals, designated initializers, and
       so on.  This option is independent of the standards mode.  Warnings
!      are disabled in the expression that follows ‘__extension__’.
  
! ‘-Wc99-c11-compat (C and Objective-C only)’
       Warn about features not present in ISO C99, but present in ISO C11.
       For instance, warn about use of anonymous structures and unions,
!      ‘_Atomic’ type qualifier, ‘_Thread_local’ storage-class specifier,
!      ‘_Alignas’ specifier, ‘Alignof’ operator, ‘_Generic’ keyword, and
       so on.  This option is independent of the standards mode.  Warnings
!      are disabled in the expression that follows ‘__extension__’.
  
! ‘-Wc11-c23-compat (C and Objective-C only)’
! ‘-Wc11-c2x-compat (C and Objective-C only)’
       Warn about features not present in ISO C11, but present in ISO C23.
!      For instance, warn about omitting the string in ‘_Static_assert’,
!      use of ‘[[]]’ syntax for attributes, use of decimal floating-point
       types, and so on.  This option is independent of the standards
       mode.  Warnings are disabled in the expression that follows
!      ‘__extension__’.  The name ‘-Wc11-c2x-compat’ is deprecated.
  
       When not compiling in C23 mode, these warnings are upgraded to
!      errors by ‘-pedantic-errors’.
  
! ‘-Wc++-compat (C and Objective-C only)’
       Warn about ISO C constructs that are outside of the common subset
       of ISO C and ISO C++, e.g. request for implicit conversion from
!      ‘void *’ to a pointer to non-‘void’ type.
  
! ‘-Wc++11-compat (C++ and Objective-C++ only)’
       Warn about C++ constructs whose meaning differs between ISO C++
       1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
!      keywords in ISO C++ 2011.  This warning turns on ‘-Wnarrowing’ and
!      is enabled by ‘-Wall’.
  
! ‘-Wc++14-compat (C++ and Objective-C++ only)’
       Warn about C++ constructs whose meaning differs between ISO C++
!      2011 and ISO C++ 2014.  This warning is enabled by ‘-Wall’.
  
! ‘-Wc++17-compat (C++ and Objective-C++ only)’
       Warn about C++ constructs whose meaning differs between ISO C++
!      2014 and ISO C++ 2017.  This warning is enabled by ‘-Wall’.
  
! ‘-Wc++20-compat (C++ and Objective-C++ only)’
       Warn about C++ constructs whose meaning differs between ISO C++
!      2017 and ISO C++ 2020.  This warning is enabled by ‘-Wall’.
  
! ‘-Wno-c++11-extensions (C++ and Objective-C++ only)’
       Do not warn about C++11 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++11
!      constructs will only be diagnosed if ‘-Wpedantic’ is used.
  
! ‘-Wno-c++14-extensions (C++ and Objective-C++ only)’
       Do not warn about C++14 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++14
!      constructs will only be diagnosed if ‘-Wpedantic’ is used.
  
! ‘-Wno-c++17-extensions (C++ and Objective-C++ only)’
       Do not warn about C++17 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++17
!      constructs will only be diagnosed if ‘-Wpedantic’ is used.
  
! ‘-Wno-c++20-extensions (C++ and Objective-C++ only)’
       Do not warn about C++20 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++20
!      constructs will only be diagnosed if ‘-Wpedantic’ is used.
  
! ‘-Wno-c++23-extensions (C++ and Objective-C++ only)’
       Do not warn about C++23 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++23
!      constructs will only be diagnosed if ‘-Wpedantic’ is used.
  
! ‘-Wno-c++26-extensions (C++ and Objective-C++ only)’
       Do not warn about C++26 constructs in code being compiled using an
       older C++ standard.  Even without this option, some C++26
!      constructs will only be diagnosed if ‘-Wpedantic’ is used.
  
! ‘-Wcast-qual’
       Warn whenever a pointer is cast so as to remove a type qualifier
!      from the target type.  For example, warn if a ‘const char *’ is
!      cast to an ordinary ‘char *’.
  
       Also warn when making a cast that introduces a type qualifier in an
!      unsafe way.  For example, casting ‘char **’ to ‘const char **’ is
       unsafe, as in this example:
  
              /* p is char ** value.  */
*************** warnings, in some cases it may also caus
*** 8616,8646 ****
              /* Now char** pointer points to read-only memory.  */
              **p = 'b';
  
! '-Wcast-align'
       Warn whenever a pointer is cast such that the required alignment of
!      the target is increased.  For example, warn if a 'char *' is cast
!      to an 'int *' on machines where integers can only be accessed at
       two- or four-byte boundaries.
  
! '-Wcast-align=strict'
       Warn whenever a pointer is cast such that the required alignment of
!      the target is increased.  For example, warn if a 'char *' is cast
!      to an 'int *' regardless of the target machine.
  
! '-Wcast-function-type'
       Warn when a function pointer is cast to an incompatible function
       pointer.  In a cast involving function types with a variable
       argument list only the types of initial arguments that are provided
       are considered.  Any parameter of pointer-type matches any other
       pointer-type.  Any benign differences in integral types are
!      ignored, like 'int' vs. 'long' on ILP32 targets.  Likewise type
!      qualifiers are ignored.  The function type 'void (*) (void)' is
       special and matches everything, which can be used to suppress this
       warning.  In a cast involving pointer to member types this warning
       warns whenever the type cast is changing the pointer to member
!      type.  This warning is enabled by '-Wextra'.
  
! '-Wcast-user-defined'
       Warn when a cast to reference type does not involve a user-defined
       conversion that the programmer might expect to be called.
  
--- 8620,8650 ----
              /* Now char** pointer points to read-only memory.  */
              **p = 'b';
  
! ‘-Wcast-align’
       Warn whenever a pointer is cast such that the required alignment of
!      the target is increased.  For example, warn if a ‘char *’ is cast
!      to an ‘int *’ on machines where integers can only be accessed at
       two- or four-byte boundaries.
  
! ‘-Wcast-align=strict’
       Warn whenever a pointer is cast such that the required alignment of
!      the target is increased.  For example, warn if a ‘char *’ is cast
!      to an ‘int *’ regardless of the target machine.
  
! ‘-Wcast-function-type’
       Warn when a function pointer is cast to an incompatible function
       pointer.  In a cast involving function types with a variable
       argument list only the types of initial arguments that are provided
       are considered.  Any parameter of pointer-type matches any other
       pointer-type.  Any benign differences in integral types are
!      ignored, like ‘int’ vs. ‘long’ on ILP32 targets.  Likewise type
!      qualifiers are ignored.  The function type ‘void (*) (void)’ is
       special and matches everything, which can be used to suppress this
       warning.  In a cast involving pointer to member types this warning
       warns whenever the type cast is changing the pointer to member
!      type.  This warning is enabled by ‘-Wextra’.
  
! ‘-Wcast-user-defined’
       Warn when a cast to reference type does not involve a user-defined
       conversion that the programmer might expect to be called.
  
*************** warnings, in some cases it may also caus
*** 8649,8717 ****
  
       This warning is enabled by default.
  
! '-Wwrite-strings'
!      When compiling C, give string constants the type 'const
!      char[LENGTH]' so that copying the address of one into a non-'const'
!      'char *' pointer produces a warning.  These warnings help you find
       at compile time code that can try to write into a string constant,
!      but only if you have been very careful about using 'const' in
       declarations and prototypes.  Otherwise, it is just a nuisance.
!      This is why we did not make '-Wall' request these warnings.
  
       When compiling C++, warn about the deprecated conversion from
!      string literals to 'char *'.  This warning is enabled by default
       for C++ programs.
  
!      This warning is upgraded to an error by '-pedantic-errors' in C++11
       mode or later.
  
! '-Wclobbered'
!      Warn for variables that might be changed by 'longjmp' or 'vfork'.
!      This warning is also enabled by '-Wextra'.
  
! '-Wno-complain-wrong-lang'
       By default, language front ends complain when a command-line option
       is valid, but not applicable to that front end.  This may be
!      disabled with '-Wno-complain-wrong-lang', which is mostly useful
       when invoking a single compiler driver for multiple source files
       written in different languages, for example:
  
            $ g++ -fno-rtti a.cc b.f90
  
!      The driver 'g++' invokes the C++ front end to compile 'a.cc' and
!      the Fortran front end to compile 'b.f90'.  The latter front end
!      diagnoses 'f951: Warning: command-line option '-fno-rtti' is valid
!      for C++/D/ObjC++ but not for Fortran', which may be disabled with
!      '-Wno-complain-wrong-lang'.
  
! '-Wcompare-distinct-pointer-types (C and Objective-C only)'
       Warn if pointers of distinct types are compared without a cast.
       This warning is enabled by default.
  
! '-Wconversion'
       Warn for implicit conversions that may alter a value.  This
!      includes conversions between real and integer, like 'abs (x)' when
!      'x' is 'double'; conversions between signed and unsigned, like
!      'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
!      (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
!      'ui = (unsigned) -1', or if the value is not changed by the
!      conversion like in 'abs (2.0)'.  Warnings about conversions between
       signed and unsigned integers can be disabled by using
!      '-Wno-sign-conversion'.
  
       For C++, also warn for confusing overload resolution for
       user-defined conversions; and conversions that never use a type
!      conversion operator: conversions to 'void', the same type, a base
       class or a reference to them.  Warnings about conversions between
       signed and unsigned integers are disabled by default in C++ unless
!      '-Wsign-conversion' is explicitly enabled.
  
       Warnings about conversion from arithmetic on a small type back to
!      that type are only given with '-Warith-conversion'.
  
! '-Wdangling-else'
!      Warn about constructions where there may be confusion to which 'if'
!      statement an 'else' branch belongs.  Here is an example of such a
       case:
  
            {
--- 8653,8721 ----
  
       This warning is enabled by default.
  
! ‘-Wwrite-strings’
!      When compiling C, give string constants the type ‘const
!      char[LENGTH]’ so that copying the address of one into a non-‘const’
!      ‘char *’ pointer produces a warning.  These warnings help you find
       at compile time code that can try to write into a string constant,
!      but only if you have been very careful about using ‘const’ in
       declarations and prototypes.  Otherwise, it is just a nuisance.
!      This is why we did not make ‘-Wall’ request these warnings.
  
       When compiling C++, warn about the deprecated conversion from
!      string literals to ‘char *’.  This warning is enabled by default
       for C++ programs.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’ in C++11
       mode or later.
  
! ‘-Wclobbered’
!      Warn for variables that might be changed by ‘longjmp’ or ‘vfork’.
!      This warning is also enabled by ‘-Wextra’.
  
! ‘-Wno-complain-wrong-lang’
       By default, language front ends complain when a command-line option
       is valid, but not applicable to that front end.  This may be
!      disabled with ‘-Wno-complain-wrong-lang’, which is mostly useful
       when invoking a single compiler driver for multiple source files
       written in different languages, for example:
  
            $ g++ -fno-rtti a.cc b.f90
  
!      The driver ‘g++’ invokes the C++ front end to compile ‘a.cc’ and
!      the Fortran front end to compile ‘b.f90’.  The latter front end
!      diagnoses ‘f951: Warning: command-line option '-fno-rtti' is valid
!      for C++/D/ObjC++ but not for Fortran’, which may be disabled with
!      ‘-Wno-complain-wrong-lang’.
  
! ‘-Wcompare-distinct-pointer-types (C and Objective-C only)’
       Warn if pointers of distinct types are compared without a cast.
       This warning is enabled by default.
  
! ‘-Wconversion’
       Warn for implicit conversions that may alter a value.  This
!      includes conversions between real and integer, like ‘abs (x)’ when
!      ‘x’ is ‘double’; conversions between signed and unsigned, like
!      ‘unsigned ui = -1’; and conversions to smaller types, like ‘sqrtf
!      (M_PI)’.  Do not warn for explicit casts like ‘abs ((int) x)’ and
!      ‘ui = (unsigned) -1’, or if the value is not changed by the
!      conversion like in ‘abs (2.0)’.  Warnings about conversions between
       signed and unsigned integers can be disabled by using
!      ‘-Wno-sign-conversion’.
  
       For C++, also warn for confusing overload resolution for
       user-defined conversions; and conversions that never use a type
!      conversion operator: conversions to ‘void’, the same type, a base
       class or a reference to them.  Warnings about conversions between
       signed and unsigned integers are disabled by default in C++ unless
!      ‘-Wsign-conversion’ is explicitly enabled.
  
       Warnings about conversion from arithmetic on a small type back to
!      that type are only given with ‘-Warith-conversion’.
  
! ‘-Wdangling-else’
!      Warn about constructions where there may be confusion to which ‘if’
!      statement an ‘else’ branch belongs.  Here is an example of such a
       case:
  
            {
*************** warnings, in some cases it may also caus
*** 8722,8735 ****
                bar ();
            }
  
!      In C/C++, every 'else' branch belongs to the innermost possible
!      'if' statement, which in this example is 'if (b)'.  This is often
       not what the programmer expected, as illustrated in the above
       example by indentation the programmer chose.  When there is the
       potential for this confusion, GCC issues a warning when this flag
       is specified.  To eliminate the warning, add explicit braces around
!      the innermost 'if' statement so there is no way the 'else' can
!      belong to the enclosing 'if'.  The resulting code looks like this:
  
            {
              if (a)
--- 8726,8739 ----
                bar ();
            }
  
!      In C/C++, every ‘else’ branch belongs to the innermost possible
!      ‘if’ statement, which in this example is ‘if (b)’.  This is often
       not what the programmer expected, as illustrated in the above
       example by indentation the programmer chose.  When there is the
       potential for this confusion, GCC issues a warning when this flag
       is specified.  To eliminate the warning, add explicit braces around
!      the innermost ‘if’ statement so there is no way the ‘else’ can
!      belong to the enclosing ‘if’.  The resulting code looks like this:
  
            {
              if (a)
*************** warnings, in some cases it may also caus
*** 8741,8750 ****
                }
            }
  
!      This warning is enabled by '-Wparentheses'.
  
! '-Wdangling-pointer'
! '-Wdangling-pointer=N'
       Warn about uses of pointers (or C++ references) to objects with
       automatic storage duration after their lifetime has ended.  This
       includes local variables declared in nested blocks, compound
--- 8745,8754 ----
                }
            }
  
!      This warning is enabled by ‘-Wparentheses’.
  
! ‘-Wdangling-pointer’
! ‘-Wdangling-pointer=N’
       Warn about uses of pointers (or C++ references) to objects with
       automatic storage duration after their lifetime has ended.  This
       includes local variables declared in nested blocks, compound
*************** warnings, in some cases it may also caus
*** 8753,8770 ****
       warning is enabled at all optimization levels but may yield
       different results with optimization than without.
  
!      '-Wdangling-pointer=1'
            At level 1, the warning diagnoses only unconditional uses of
            dangling pointers.
  
!      '-Wdangling-pointer=2'
            At level 2, in addition to unconditional uses the warning also
            diagnoses conditional uses of dangling pointers.
  
!      The short form '-Wdangling-pointer' is equivalent to
!      '-Wdangling-pointer=2', while '-Wno-dangling-pointer' and
!      '-Wdangling-pointer=0' have the same effect of disabling the
!      warnings.  '-Wdangling-pointer=2' is included in '-Wall'.
  
       This example triggers the warning at level 1; the address of the
       unnamed temporary is unconditionally referenced outside of its
--- 8757,8774 ----
       warning is enabled at all optimization levels but may yield
       different results with optimization than without.
  
!      ‘-Wdangling-pointer=1’
            At level 1, the warning diagnoses only unconditional uses of
            dangling pointers.
  
!      ‘-Wdangling-pointer=2’
            At level 2, in addition to unconditional uses the warning also
            diagnoses conditional uses of dangling pointers.
  
!      The short form ‘-Wdangling-pointer’ is equivalent to
!      ‘-Wdangling-pointer=2’, while ‘-Wno-dangling-pointer’ and
!      ‘-Wdangling-pointer=0’ have the same effect of disabling the
!      warnings.  ‘-Wdangling-pointer=2’ is included in ‘-Wall’.
  
       This example triggers the warning at level 1; the address of the
       unnamed temporary is unconditionally referenced outside of its
*************** warnings, in some cases it may also caus
*** 8781,8787 ****
            }
  
       In the following function the store of the address of the local
!      variable 'x' in the escaped pointer '*p' triggers the warning at
       level 1.
  
            void g (int **p)
--- 8785,8791 ----
            }
  
       In the following function the store of the address of the local
!      variable ‘x’ in the escaped pointer ‘*p’ triggers the warning at
       level 1.
  
            void g (int **p)
*************** warnings, in some cases it may also caus
*** 8792,8798 ****
            }
  
       In this example, the array A is out of scope when the pointer S is
!      used.  Since the code that sets 's' is conditional, the warning
       triggers at level 2.
  
            extern void frob (const char *);
--- 8796,8802 ----
            }
  
       In this example, the array A is out of scope when the pointer S is
!      used.  Since the code that sets ‘s’ is conditional, the warning
       triggers at level 2.
  
            extern void frob (const char *);
*************** warnings, in some cases it may also caus
*** 8807,8836 ****
              frob (s);
            }
  
! '-Wdate-time'
!      Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
       encountered as they might prevent bit-wise-identical reproducible
       compilations.
  
! '-Wempty-body'
!      Warn if an empty body occurs in an 'if', 'else' or 'do while'
!      statement.  This warning is also enabled by '-Wextra'.
  
! '-Wno-endif-labels'
!      Do not warn about stray tokens after '#else' and '#endif'.
  
! '-Wenum-compare'
       Warn about a comparison between values of different enumerated
       types.  In C++ enumerated type mismatches in conditional
       expressions are also diagnosed and the warning is enabled by
!      default.  In C this warning is enabled by '-Wall'.
  
! '-Wenum-conversion'
       Warn when a value of enumerated type is implicitly converted to a
!      different enumerated type.  This warning is enabled by '-Wextra' in
       C.
  
! '-Wenum-int-mismatch (C and Objective-C only)'
       Warn about mismatches between an enumerated type and an integer
       type in declarations.  For example:
  
--- 8811,8840 ----
              frob (s);
            }
  
! ‘-Wdate-time’
!      Warn when macros ‘__TIME__’, ‘__DATE__’ or ‘__TIMESTAMP__’ are
       encountered as they might prevent bit-wise-identical reproducible
       compilations.
  
! ‘-Wempty-body’
!      Warn if an empty body occurs in an ‘if’, ‘else’ or ‘do while’
!      statement.  This warning is also enabled by ‘-Wextra’.
  
! ‘-Wno-endif-labels’
!      Do not warn about stray tokens after ‘#else’ and ‘#endif’.
  
! ‘-Wenum-compare’
       Warn about a comparison between values of different enumerated
       types.  In C++ enumerated type mismatches in conditional
       expressions are also diagnosed and the warning is enabled by
!      default.  In C this warning is enabled by ‘-Wall’.
  
! ‘-Wenum-conversion’
       Warn when a value of enumerated type is implicitly converted to a
!      different enumerated type.  This warning is enabled by ‘-Wextra’ in
       C.
  
! ‘-Wenum-int-mismatch (C and Objective-C only)’
       Warn about mismatches between an enumerated type and an integer
       type in declarations.  For example:
  
*************** warnings, in some cases it may also caus
*** 8838,8874 ****
            int foo(void);
            enum E foo(void);
  
!      In C, an enumerated type is compatible with 'char', a signed
       integer type, or an unsigned integer type.  However, since the
       choice of the underlying type of an enumerated type is
       implementation-defined, such mismatches may cause portability
       issues.  In C++, such mismatches are an error.  In C, this warning
!      is enabled by '-Wall' and '-Wc++-compat'.
  
! '-Wjump-misses-init (C, Objective-C only)'
!      Warn if a 'goto' statement or a 'switch' statement jumps forward
       across the initialization of a variable, or jumps backward to a
       label after the variable has been initialized.  This only warns
       about variables that are initialized when they are declared.  This
       warning is only supported for C and Objective-C; in C++ this sort
       of branch is an error in any case.
  
!      '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
!      disabled with the '-Wno-jump-misses-init' option.
  
! '-Wsign-compare'
       Warn when a comparison between signed and unsigned values could
       produce an incorrect result when the signed value is converted to
!      unsigned.  In C++, this warning is also enabled by '-Wall'.  In C,
!      it is also enabled by '-Wextra'.
  
! '-Wsign-conversion'
       Warn for implicit conversions that may change the sign of an
       integer value, like assigning a signed integer expression to an
       unsigned integer variable.  An explicit cast silences the warning.
!      In C, this option is enabled also by '-Wconversion'.
  
! '-Wflex-array-member-not-at-end (C and C++ only)'
       Warn when a structure containing a C99 flexible array member as the
       last field is not at the end of another structure.  This warning
       warns e.g.  about
--- 8842,8878 ----
            int foo(void);
            enum E foo(void);
  
!      In C, an enumerated type is compatible with ‘char’, a signed
       integer type, or an unsigned integer type.  However, since the
       choice of the underlying type of an enumerated type is
       implementation-defined, such mismatches may cause portability
       issues.  In C++, such mismatches are an error.  In C, this warning
!      is enabled by ‘-Wall’ and ‘-Wc++-compat’.
  
! ‘-Wjump-misses-init (C, Objective-C only)’
!      Warn if a ‘goto’ statement or a ‘switch’ statement jumps forward
       across the initialization of a variable, or jumps backward to a
       label after the variable has been initialized.  This only warns
       about variables that are initialized when they are declared.  This
       warning is only supported for C and Objective-C; in C++ this sort
       of branch is an error in any case.
  
!      ‘-Wjump-misses-init’ is included in ‘-Wc++-compat’.  It can be
!      disabled with the ‘-Wno-jump-misses-init’ option.
  
! ‘-Wsign-compare’
       Warn when a comparison between signed and unsigned values could
       produce an incorrect result when the signed value is converted to
!      unsigned.  In C++, this warning is also enabled by ‘-Wall’.  In C,
!      it is also enabled by ‘-Wextra’.
  
! ‘-Wsign-conversion’
       Warn for implicit conversions that may change the sign of an
       integer value, like assigning a signed integer expression to an
       unsigned integer variable.  An explicit cast silences the warning.
!      In C, this option is enabled also by ‘-Wconversion’.
  
! ‘-Wflex-array-member-not-at-end (C and C++ only)’
       Warn when a structure containing a C99 flexible array member as the
       last field is not at the end of another structure.  This warning
       warns e.g.  about
*************** warnings, in some cases it may also caus
*** 8876,8892 ****
            struct flex  { int length; char data[]; };
            struct mid_flex { int m; struct flex flex_data; int n; };
  
! '-Wfloat-conversion'
       Warn for implicit conversions that reduce the precision of a real
       value.  This includes conversions from real to integer, and from
       higher precision real to lower precision real values.  This option
!      is also enabled by '-Wconversion'.
  
! '-Wno-scalar-storage-order'
       Do not warn on suspicious constructs involving reverse scalar
       storage order.
  
! '-Wsizeof-array-div'
       Warn about divisions of two sizeof operators when the first one is
       applied to an array and the divisor does not equal the size of the
       array element.  In such a case, the computation will not yield the
--- 8880,8896 ----
            struct flex  { int length; char data[]; };
            struct mid_flex { int m; struct flex flex_data; int n; };
  
! ‘-Wfloat-conversion’
       Warn for implicit conversions that reduce the precision of a real
       value.  This includes conversions from real to integer, and from
       higher precision real to lower precision real values.  This option
!      is also enabled by ‘-Wconversion’.
  
! ‘-Wno-scalar-storage-order’
       Do not warn on suspicious constructs involving reverse scalar
       storage order.
  
! ‘-Wsizeof-array-div’
       Warn about divisions of two sizeof operators when the first one is
       applied to an array and the divisor does not equal the size of the
       array element.  In such a case, the computation will not yield the
*************** warnings, in some cases it may also caus
*** 8898,8923 ****
              return sizeof (arr) / sizeof (short);
            }
  
!      This warning is enabled by '-Wall'.
  
! '-Wsizeof-pointer-div'
       Warn for suspicious divisions of two sizeof expressions that divide
       the pointer size by the element size, which is the usual way to
       compute the array size but won't work out correctly with pointers.
!      This warning warns e.g. about 'sizeof (ptr) / sizeof (ptr[0])' if
!      'ptr' is not an array, but a pointer.  This warning is enabled by
!      '-Wall'.
  
! '-Wsizeof-pointer-memaccess'
       Warn for suspicious length parameters to certain string and memory
!      built-in functions if the argument uses 'sizeof'.  This warning
!      triggers for example for 'memset (ptr, 0, sizeof (ptr));' if 'ptr'
       is not an array, but a pointer, and suggests a possible fix, or
!      about 'memcpy (&foo, ptr, sizeof (&foo));'.
!      '-Wsizeof-pointer-memaccess' also warns about calls to bounded
!      string copy functions like 'strncat' or 'strncpy' that specify as
!      the bound a 'sizeof' expression of the source array.  For example,
!      in the following function the call to 'strncat' specifies the size
       of the source string as the bound.  That is almost certainly a
       mistake and so the call is diagnosed.
            void make_file (const char *name)
--- 8902,8927 ----
              return sizeof (arr) / sizeof (short);
            }
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wsizeof-pointer-div’
       Warn for suspicious divisions of two sizeof expressions that divide
       the pointer size by the element size, which is the usual way to
       compute the array size but won't work out correctly with pointers.
!      This warning warns e.g. about ‘sizeof (ptr) / sizeof (ptr[0])’ if
!      ‘ptr’ is not an array, but a pointer.  This warning is enabled by
!      ‘-Wall’.
  
! ‘-Wsizeof-pointer-memaccess’
       Warn for suspicious length parameters to certain string and memory
!      built-in functions if the argument uses ‘sizeof’.  This warning
!      triggers for example for ‘memset (ptr, 0, sizeof (ptr));’ if ‘ptr’
       is not an array, but a pointer, and suggests a possible fix, or
!      about ‘memcpy (&foo, ptr, sizeof (&foo));’.
!      ‘-Wsizeof-pointer-memaccess’ also warns about calls to bounded
!      string copy functions like ‘strncat’ or ‘strncpy’ that specify as
!      the bound a ‘sizeof’ expression of the source array.  For example,
!      in the following function the call to ‘strncat’ specifies the size
       of the source string as the bound.  That is almost certainly a
       mistake and so the call is diagnosed.
            void make_file (const char *name)
*************** warnings, in some cases it may also caus
*** 8928,8960 ****
              ...
            }
  
!      The '-Wsizeof-pointer-memaccess' option is enabled by '-Wall'.
  
! '-Wno-sizeof-array-argument'
!      Do not warn when the 'sizeof' operator is applied to a parameter
       that is declared as an array in a function definition.  This
       warning is enabled by default for C and C++ programs.
  
! '-Wmemset-elt-size'
!      Warn for suspicious calls to the 'memset' built-in function, if the
       first argument references an array, and the third argument is a
       number equal to the number of elements, but not equal to the size
       of the array in memory.  This indicates that the user has omitted a
       multiplication by the element size.  This warning is enabled by
!      '-Wall'.
  
! '-Wmemset-transposed-args'
!      Warn for suspicious calls to the 'memset' built-in function where
       the second argument is not zero and the third argument is zero.
!      For example, the call 'memset (buf, sizeof buf, 0)' is diagnosed
!      because 'memset (buf, 0, sizeof buf)' was meant instead.  The
       diagnostic is only emitted if the third argument is a literal zero.
       Otherwise, if it is an expression that is folded to zero, or a cast
       of zero to some type, it is far less likely that the arguments have
       been mistakenly transposed and no warning is emitted.  This warning
!      is enabled by '-Wall'.
  
! '-Waddress'
       Warn about suspicious uses of address expressions.  These include
       comparing the address of a function or a declared object to the
       null pointer constant such as in
--- 8932,8964 ----
              ...
            }
  
!      The ‘-Wsizeof-pointer-memaccess’ option is enabled by ‘-Wall’.
  
! ‘-Wno-sizeof-array-argument’
!      Do not warn when the ‘sizeof’ operator is applied to a parameter
       that is declared as an array in a function definition.  This
       warning is enabled by default for C and C++ programs.
  
! ‘-Wmemset-elt-size’
!      Warn for suspicious calls to the ‘memset’ built-in function, if the
       first argument references an array, and the third argument is a
       number equal to the number of elements, but not equal to the size
       of the array in memory.  This indicates that the user has omitted a
       multiplication by the element size.  This warning is enabled by
!      ‘-Wall’.
  
! ‘-Wmemset-transposed-args’
!      Warn for suspicious calls to the ‘memset’ built-in function where
       the second argument is not zero and the third argument is zero.
!      For example, the call ‘memset (buf, sizeof buf, 0)’ is diagnosed
!      because ‘memset (buf, 0, sizeof buf)’ was meant instead.  The
       diagnostic is only emitted if the third argument is a literal zero.
       Otherwise, if it is an expression that is folded to zero, or a cast
       of zero to some type, it is far less likely that the arguments have
       been mistakenly transposed and no warning is emitted.  This warning
!      is enabled by ‘-Wall’.
  
! ‘-Waddress’
       Warn about suspicious uses of address expressions.  These include
       comparing the address of a function or a declared object to the
       null pointer constant such as in
*************** warnings, in some cases it may also caus
*** 8982,8999 ****
       indicate missing parentheses in a function call or a missing
       dereference in an array expression.  The subset of the warning for
       object pointers can be suppressed by casting the pointer operand to
!      an integer type such as 'intptr_t' or 'uintptr_t'.  Comparisons
       against string literals result in unspecified behavior and are not
!      portable, and suggest the intent was to call 'strcmp'.  The warning
       is suppressed if the suspicious expression is the result of macro
!      expansion.  '-Waddress' warning is enabled by '-Wall'.
  
! '-Wno-address-of-packed-member'
       Do not warn when the address of packed member of struct or union is
       taken, which usually results in an unaligned pointer value.  This
       is enabled by default.
  
! '-Wlogical-op'
       Warn about suspicious uses of logical operators in expressions.
       This includes using logical operators in contexts where a bit-wise
       operator is likely to be expected.  Also warns when the operands of
--- 8986,9003 ----
       indicate missing parentheses in a function call or a missing
       dereference in an array expression.  The subset of the warning for
       object pointers can be suppressed by casting the pointer operand to
!      an integer type such as ‘intptr_t’ or ‘uintptr_t’.  Comparisons
       against string literals result in unspecified behavior and are not
!      portable, and suggest the intent was to call ‘strcmp’.  The warning
       is suppressed if the suspicious expression is the result of macro
!      expansion.  ‘-Waddress’ warning is enabled by ‘-Wall’.
  
! ‘-Wno-address-of-packed-member’
       Do not warn when the address of packed member of struct or union is
       taken, which usually results in an unaligned pointer value.  This
       is enabled by default.
  
! ‘-Wlogical-op’
       Warn about suspicious uses of logical operators in expressions.
       This includes using logical operators in contexts where a bit-wise
       operator is likely to be expected.  Also warns when the operands of
*************** warnings, in some cases it may also caus
*** 9001,9007 ****
            extern int a;
            if (a < 0 && a < 0) { ... }
  
! '-Wlogical-not-parentheses'
       Warn about logical not used on the left hand side operand of a
       comparison.  This option does not warn if the right operand is
       considered to be a boolean expression.  Its purpose is to detect
--- 9005,9011 ----
            extern int a;
            if (a < 0 && a < 0) { ... }
  
! ‘-Wlogical-not-parentheses’
       Warn about logical not used on the left hand side operand of a
       comparison.  This option does not warn if the right operand is
       considered to be a boolean expression.  Its purpose is to detect
*************** warnings, in some cases it may also caus
*** 9014,9070 ****
       parentheses:
            if ((!a) > 1) { ... }
  
!      This warning is enabled by '-Wall'.
  
! '-Waggregate-return'
       Warn if any functions that return structures or unions are defined
       or called.  (In languages where you can return an array, this also
       elicits a warning.)
  
! '-Wno-aggressive-loop-optimizations'
       Warn if in a loop with constant number of iterations the compiler
       detects undefined behavior in some statement during one or more of
       the iterations.
  
! '-Wno-attributes'
!      Do not warn if an unexpected '__attribute__' is used, such as
       unrecognized attributes, function attributes applied to variables,
       etc.  This does not stop errors for incorrect use of supported
       attributes.
  
       Warnings about ill-formed uses of standard attributes are upgraded
!      to errors by '-pedantic-errors'.
  
!      Additionally, using '-Wno-attributes=', it is possible to suppress
       warnings about unknown scoped attributes (in C++11 and C23).  For
!      example, '-Wno-attributes=vendor::attr' disables warning about the
       following declaration:
  
            [[vendor::attr]] void f();
  
       It is also possible to disable warning about all attributes in a
!      namespace using '-Wno-attributes=vendor::' which prevents warning
       about both of these declarations:
  
            [[vendor::safe]] void f();
            [[vendor::unsafe]] void f2();
  
!      Note that '-Wno-attributes=' does not imply '-Wno-attributes'.
  
! '-Wno-builtin-declaration-mismatch'
       Warn if a built-in function is declared with an incompatible
       signature or as a non-function, or when a built-in function
       declared with a type that does not include a prototype is called
       with arguments whose promoted types do not match those expected by
!      the function.  When '-Wextra' is specified, also warn when a
       built-in function that takes arguments is declared without a
!      prototype.  The '-Wbuiltin-declaration-mismatch' warning is enabled
       by default.  To avoid the warning include the appropriate header to
       bring the prototypes of built-in functions into scope.
  
!      For example, the call to 'memset' below is diagnosed by the warning
!      because the function expects a value of type 'size_t' as its
!      argument but the type of '32' is 'int'.  With '-Wextra', the
       declaration of the function is diagnosed as well.
            extern void* memset ();
            void f (void *d)
--- 9018,9074 ----
       parentheses:
            if ((!a) > 1) { ... }
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Waggregate-return’
       Warn if any functions that return structures or unions are defined
       or called.  (In languages where you can return an array, this also
       elicits a warning.)
  
! ‘-Wno-aggressive-loop-optimizations’
       Warn if in a loop with constant number of iterations the compiler
       detects undefined behavior in some statement during one or more of
       the iterations.
  
! ‘-Wno-attributes’
!      Do not warn if an unexpected ‘__attribute__’ is used, such as
       unrecognized attributes, function attributes applied to variables,
       etc.  This does not stop errors for incorrect use of supported
       attributes.
  
       Warnings about ill-formed uses of standard attributes are upgraded
!      to errors by ‘-pedantic-errors’.
  
!      Additionally, using ‘-Wno-attributes=’, it is possible to suppress
       warnings about unknown scoped attributes (in C++11 and C23).  For
!      example, ‘-Wno-attributes=vendor::attr’ disables warning about the
       following declaration:
  
            [[vendor::attr]] void f();
  
       It is also possible to disable warning about all attributes in a
!      namespace using ‘-Wno-attributes=vendor::’ which prevents warning
       about both of these declarations:
  
            [[vendor::safe]] void f();
            [[vendor::unsafe]] void f2();
  
!      Note that ‘-Wno-attributes=’ does not imply ‘-Wno-attributes’.
  
! ‘-Wno-builtin-declaration-mismatch’
       Warn if a built-in function is declared with an incompatible
       signature or as a non-function, or when a built-in function
       declared with a type that does not include a prototype is called
       with arguments whose promoted types do not match those expected by
!      the function.  When ‘-Wextra’ is specified, also warn when a
       built-in function that takes arguments is declared without a
!      prototype.  The ‘-Wbuiltin-declaration-mismatch’ warning is enabled
       by default.  To avoid the warning include the appropriate header to
       bring the prototypes of built-in functions into scope.
  
!      For example, the call to ‘memset’ below is diagnosed by the warning
!      because the function expects a value of type ‘size_t’ as its
!      argument but the type of ‘32’ is ‘int’.  With ‘-Wextra’, the
       declaration of the function is diagnosed as well.
            extern void* memset ();
            void f (void *d)
*************** warnings, in some cases it may also caus
*** 9072,9110 ****
              memset (d, '\0', 32);
            }
  
! '-Wno-builtin-macro-redefined'
       Do not warn if certain built-in macros are redefined.  This
!      suppresses warnings for redefinition of '__TIMESTAMP__',
!      '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
  
! '-Wstrict-prototypes (C and Objective-C only)'
       Warn if a function is declared or defined without specifying the
       argument types.  (An old-style function definition is permitted
       without a warning if preceded by a declaration that specifies the
       argument types.)
  
! '-Wold-style-declaration (C and Objective-C only)'
       Warn for obsolescent usages, according to the C Standard, in a
       declaration.  For example, warn if storage-class specifiers like
!      'static' are not the first things in a declaration.  This warning
!      is also enabled by '-Wextra'.
  
! '-Wold-style-definition (C and Objective-C only)'
       Warn if an old-style function definition is used.  A warning is
       given even if there is a previous prototype.  A definition using
!      '()' is not considered an old-style definition in C23 mode, because
!      it is equivalent to '(void)' in that case, but is considered an
       old-style definition for older standards.
  
! '-Wmissing-parameter-type (C and Objective-C only)'
       A function parameter is declared without a type specifier in
       K&R-style functions:
  
            void foo(bar) { }
  
!      This warning is also enabled by '-Wextra'.
  
! '-Wno-declaration-missing-parameter-type (C and Objective-C only)'
       Do not warn if a function declaration contains a parameter name
       without a type.  Such function declarations do not provide a
       function prototype and prevent most type checking in function
--- 9076,9114 ----
              memset (d, '\0', 32);
            }
  
! ‘-Wno-builtin-macro-redefined’
       Do not warn if certain built-in macros are redefined.  This
!      suppresses warnings for redefinition of ‘__TIMESTAMP__’,
!      ‘__TIME__’, ‘__DATE__’, ‘__FILE__’, and ‘__BASE_FILE__’.
  
! ‘-Wstrict-prototypes (C and Objective-C only)’
       Warn if a function is declared or defined without specifying the
       argument types.  (An old-style function definition is permitted
       without a warning if preceded by a declaration that specifies the
       argument types.)
  
! ‘-Wold-style-declaration (C and Objective-C only)’
       Warn for obsolescent usages, according to the C Standard, in a
       declaration.  For example, warn if storage-class specifiers like
!      ‘static’ are not the first things in a declaration.  This warning
!      is also enabled by ‘-Wextra’.
  
! ‘-Wold-style-definition (C and Objective-C only)’
       Warn if an old-style function definition is used.  A warning is
       given even if there is a previous prototype.  A definition using
!      ‘()’ is not considered an old-style definition in C23 mode, because
!      it is equivalent to ‘(void)’ in that case, but is considered an
       old-style definition for older standards.
  
! ‘-Wmissing-parameter-type (C and Objective-C only)’
       A function parameter is declared without a type specifier in
       K&R-style functions:
  
            void foo(bar) { }
  
!      This warning is also enabled by ‘-Wextra’.
  
! ‘-Wno-declaration-missing-parameter-type (C and Objective-C only)’
       Do not warn if a function declaration contains a parameter name
       without a type.  Such function declarations do not provide a
       function prototype and prevent most type checking in function
*************** warnings, in some cases it may also caus
*** 9112,9124 ****
  
       This warning is enabled by default.  In C99 and later dialects of
       C, it is treated as an error.  The error can be downgraded to a
!      warning using '-fpermissive' (along with certain other errors), or
       for this error alone, with
!      '-Wno-error=declaration-missing-parameter-type'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wmissing-prototypes (C and Objective-C only)'
       Warn if a global function is defined without a previous prototype
       declaration.  This warning is issued even if the definition itself
       provides a prototype.  Use this option to detect global functions
--- 9116,9128 ----
  
       This warning is enabled by default.  In C99 and later dialects of
       C, it is treated as an error.  The error can be downgraded to a
!      warning using ‘-fpermissive’ (along with certain other errors), or
       for this error alone, with
!      ‘-Wno-error=declaration-missing-parameter-type’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wmissing-prototypes (C and Objective-C only)’
       Warn if a global function is defined without a previous prototype
       declaration.  This warning is issued even if the definition itself
       provides a prototype.  Use this option to detect global functions
*************** warnings, in some cases it may also caus
*** 9126,9151 ****
       This option is not valid for C++ because all function declarations
       provide prototypes and a non-matching declaration declares an
       overload rather than conflict with an earlier declaration.  Use
!      '-Wmissing-declarations' to detect missing declarations in C++.
  
! '-Wmissing-variable-declarations (C and Objective-C only)'
       Warn if a global variable is defined without a previous
       declaration.  Use this option to detect global variables that do
       not have a matching extern declaration in a header file.
  
! '-Wmissing-declarations'
       Warn if a global function is defined without a previous
       declaration.  Do so even if the definition itself provides a
       prototype.  Use this option to detect global functions that are not
       declared in header files.  In C, no warnings are issued for
       functions with previous non-prototype declarations; use
!      '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
       warnings are issued for function templates, or for inline
       functions, or for functions in anonymous namespaces.
  
! '-Wmissing-field-initializers'
       Warn if a structure's initializer has some fields missing.  For
!      example, the following code causes such a warning, because 'x.h' is
       implicitly zero:
  
            struct s { int f, g, h; };
--- 9130,9155 ----
       This option is not valid for C++ because all function declarations
       provide prototypes and a non-matching declaration declares an
       overload rather than conflict with an earlier declaration.  Use
!      ‘-Wmissing-declarations’ to detect missing declarations in C++.
  
! ‘-Wmissing-variable-declarations (C and Objective-C only)’
       Warn if a global variable is defined without a previous
       declaration.  Use this option to detect global variables that do
       not have a matching extern declaration in a header file.
  
! ‘-Wmissing-declarations’
       Warn if a global function is defined without a previous
       declaration.  Do so even if the definition itself provides a
       prototype.  Use this option to detect global functions that are not
       declared in header files.  In C, no warnings are issued for
       functions with previous non-prototype declarations; use
!      ‘-Wmissing-prototypes’ to detect missing prototypes.  In C++, no
       warnings are issued for function templates, or for inline
       functions, or for functions in anonymous namespaces.
  
! ‘-Wmissing-field-initializers’
       Warn if a structure's initializer has some fields missing.  For
!      example, the following code causes such a warning, because ‘x.h’ is
       implicitly zero:
  
            struct s { int f, g, h; };
*************** warnings, in some cases it may also caus
*** 9158,9164 ****
            struct s x = { .f = 3, .g = 4 };
  
       In C this option does not warn about the universal zero initializer
!      '{ 0 }':
  
            struct s { int f, g, h; };
            struct s x = { 0 };
--- 9162,9168 ----
            struct s x = { .f = 3, .g = 4 };
  
       In C this option does not warn about the universal zero initializer
!      ‘{ 0 }’:
  
            struct s { int f, g, h; };
            struct s x = { 0 };
*************** warnings, in some cases it may also caus
*** 9169,9199 ****
            struct s { int f, g, h; };
            s x = { };
  
!      This warning is included in '-Wextra'.  To get other '-Wextra'
!      warnings without this one, use '-Wextra
!      -Wno-missing-field-initializers'.
  
! '-Wno-missing-requires'
  
       By default, the compiler warns about a concept-id appearing as a
       C++20 simple-requirement:
  
            bool satisfied = requires { C<T> };
  
!      Here 'satisfied' will be true if 'C<T>' is a valid expression,
       which it is for all T. Presumably the user meant to write
  
            bool satisfied = requires { requires C<T> };
  
!      so 'satisfied' is only true if concept 'C' is satisfied for type
!      'T'.
  
!      This warning can be disabled with '-Wno-missing-requires'.
  
! '-Wno-missing-template-keyword'
  
       The member access tokens ., -> and :: must be followed by the
!      'template' keyword if the parent object is dependent and the member
       being named is a template.
  
            template <class X>
--- 9173,9203 ----
            struct s { int f, g, h; };
            s x = { };
  
!      This warning is included in ‘-Wextra’.  To get other ‘-Wextra’
!      warnings without this one, use ‘-Wextra
!      -Wno-missing-field-initializers’.
  
! ‘-Wno-missing-requires’
  
       By default, the compiler warns about a concept-id appearing as a
       C++20 simple-requirement:
  
            bool satisfied = requires { C<T> };
  
!      Here ‘satisfied’ will be true if ‘C<T>’ is a valid expression,
       which it is for all T. Presumably the user meant to write
  
            bool satisfied = requires { requires C<T> };
  
!      so ‘satisfied’ is only true if concept ‘C’ is satisfied for type
!      ‘T’.
  
!      This warning can be disabled with ‘-Wno-missing-requires’.
  
! ‘-Wno-missing-template-keyword’
  
       The member access tokens ., -> and :: must be followed by the
!      ‘template’ keyword if the parent object is dependent and the member
       being named is a template.
  
            template <class X>
*************** warnings, in some cases it may also caus
*** 9216,9327 ****
              test = (t.m < N) > (0); // Same meaning, but not treated as a template.
            }
  
!      This warning can be disabled with '-Wno-missing-template-keyword'.
  
! '-Wno-multichar'
!      Do not warn if a multicharacter constant (''FOOF'') is used.
       Usually they indicate a typo in the user's code, as they have
       implementation-defined values, and should not be used in portable
       code.
  
! '-Wnormalized=[none|id|nfc|nfkc]'
       In ISO C and ISO C++, two identifiers are different if they are
       different sequences of characters.  However, sometimes when
       characters outside the basic ASCII character set are used, you can
       have two different character sequences that look the same.  To
       avoid confusion, the ISO 10646 standard sets out some
!      "normalization rules" which when applied ensure that two sequences
       that look the same are turned into the same sequence.  GCC can warn
       you if you are using identifiers that have not been normalized;
       this option controls that warning.
  
       There are four levels of warning supported by GCC.  The default is
!      '-Wnormalized=nfc', which warns about any identifier that is not in
!      the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
!      form for most uses.  It is equivalent to '-Wnormalized'.
  
       Unfortunately, there are some characters allowed in identifiers by
       ISO C and ISO C++ that, when turned into NFC, are not allowed in
       identifiers.  That is, there's no way to use these symbols in
       portable ISO C or C++ and have all your identifiers in NFC.
!      '-Wnormalized=id' suppresses the warning for these characters.  It
       is hoped that future versions of the standards involved will
       correct this, which is why this option is not the default.
  
       You can switch the warning off for all characters by writing
!      '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
       if you are using some other normalization scheme (like "D"),
       because otherwise you can easily create bugs that are literally
       impossible to see.
  
       Some characters in ISO 10646 have distinct meanings but look
       identical in some fonts or display methodologies, especially once
!      formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
!      LATIN SMALL LETTER N", displays just like a regular 'n' that has
!      been placed in a superscript.  ISO 10646 defines the "NFKC"
       normalization scheme to convert all these into a standard form as
       well, and GCC warns if your code is not in NFKC if you use
!      '-Wnormalized=nfkc'.  This warning is comparable to warning about
       every identifier that contains the letter O because it might be
       confused with the digit 0, and so is not the default, but may be
       useful as a local coding convention if the programming environment
       cannot be fixed to display these characters distinctly.
  
! '-Wno-attribute-warning'
       Do not warn about usage of functions (*note Function Attributes::)
!      declared with 'warning' attribute.  By default, this warning is
!      enabled.  '-Wno-attribute-warning' can be used to disable the
!      warning or '-Wno-error=attribute-warning' can be used to disable
!      the error when compiled with '-Werror' flag.
  
! '-Wno-deprecated'
       Do not warn about usage of deprecated features.  *Note Deprecated
       Features::.
  
! '-Wno-deprecated-declarations'
       Do not warn about uses of functions (*note Function Attributes::),
       variables (*note Variable Attributes::), and types (*note Type
!      Attributes::) marked as deprecated by using the 'deprecated'
       attribute.
  
! '-Wno-overflow'
       Do not warn about compile-time overflow in constant expressions.
  
! '-Wno-odr'
       Warn about One Definition Rule violations during link-time
       optimization.  Enabled by default.
  
! '-Wopenacc-parallelism'
       Warn about potentially suboptimal choices related to OpenACC
       parallelism.
  
! '-Wno-openmp'
       Warn about suspicious OpenMP code.
  
! '-Wopenmp-simd'
       Warn if the vectorizer cost model overrides the OpenMP simd
!      directive set by user.  The '-fsimd-cost-model=unlimited' option
       can be used to relax the cost model.
  
! '-Woverride-init (C and Objective-C only)'
       Warn if an initialized field without side effects is overridden
       when using designated initializers (*note Designated Initializers:
       Designated Inits.).
  
!      This warning is included in '-Wextra'.  To get other '-Wextra'
!      warnings without this one, use '-Wextra -Wno-override-init'.
  
! '-Wno-override-init-side-effects (C and Objective-C only)'
       Do not warn if an initialized field with side effects is overridden
       when using designated initializers (*note Designated Initializers:
       Designated Inits.).  This warning is enabled by default.
  
! '-Wpacked'
       Warn if a structure is given the packed attribute, but the packed
       attribute has no effect on the layout or size of the structure.
       Such structures may be mis-aligned for little benefit.  For
!      instance, in this code, the variable 'f.x' in 'struct bar' is
!      misaligned even though 'struct bar' does not itself have the packed
       attribute:
  
            struct foo {
--- 9220,9331 ----
              test = (t.m < N) > (0); // Same meaning, but not treated as a template.
            }
  
!      This warning can be disabled with ‘-Wno-missing-template-keyword’.
  
! ‘-Wno-multichar’
!      Do not warn if a multicharacter constant (‘'FOOF'’) is used.
       Usually they indicate a typo in the user's code, as they have
       implementation-defined values, and should not be used in portable
       code.
  
! ‘-Wnormalized=[none|id|nfc|nfkc]’
       In ISO C and ISO C++, two identifiers are different if they are
       different sequences of characters.  However, sometimes when
       characters outside the basic ASCII character set are used, you can
       have two different character sequences that look the same.  To
       avoid confusion, the ISO 10646 standard sets out some
!      “normalization rules” which when applied ensure that two sequences
       that look the same are turned into the same sequence.  GCC can warn
       you if you are using identifiers that have not been normalized;
       this option controls that warning.
  
       There are four levels of warning supported by GCC.  The default is
!      ‘-Wnormalized=nfc’, which warns about any identifier that is not in
!      the ISO 10646 "C" normalized form, “NFC”. NFC is the recommended
!      form for most uses.  It is equivalent to ‘-Wnormalized’.
  
       Unfortunately, there are some characters allowed in identifiers by
       ISO C and ISO C++ that, when turned into NFC, are not allowed in
       identifiers.  That is, there's no way to use these symbols in
       portable ISO C or C++ and have all your identifiers in NFC.
!      ‘-Wnormalized=id’ suppresses the warning for these characters.  It
       is hoped that future versions of the standards involved will
       correct this, which is why this option is not the default.
  
       You can switch the warning off for all characters by writing
!      ‘-Wnormalized=none’ or ‘-Wno-normalized’.  You should only do this
       if you are using some other normalization scheme (like "D"),
       because otherwise you can easily create bugs that are literally
       impossible to see.
  
       Some characters in ISO 10646 have distinct meanings but look
       identical in some fonts or display methodologies, especially once
!      formatting has been applied.  For instance ‘\u207F’, "SUPERSCRIPT
!      LATIN SMALL LETTER N", displays just like a regular ‘n’ that has
!      been placed in a superscript.  ISO 10646 defines the “NFKC”
       normalization scheme to convert all these into a standard form as
       well, and GCC warns if your code is not in NFKC if you use
!      ‘-Wnormalized=nfkc’.  This warning is comparable to warning about
       every identifier that contains the letter O because it might be
       confused with the digit 0, and so is not the default, but may be
       useful as a local coding convention if the programming environment
       cannot be fixed to display these characters distinctly.
  
! ‘-Wno-attribute-warning’
       Do not warn about usage of functions (*note Function Attributes::)
!      declared with ‘warning’ attribute.  By default, this warning is
!      enabled.  ‘-Wno-attribute-warning’ can be used to disable the
!      warning or ‘-Wno-error=attribute-warning’ can be used to disable
!      the error when compiled with ‘-Werror’ flag.
  
! ‘-Wno-deprecated’
       Do not warn about usage of deprecated features.  *Note Deprecated
       Features::.
  
! ‘-Wno-deprecated-declarations’
       Do not warn about uses of functions (*note Function Attributes::),
       variables (*note Variable Attributes::), and types (*note Type
!      Attributes::) marked as deprecated by using the ‘deprecated’
       attribute.
  
! ‘-Wno-overflow’
       Do not warn about compile-time overflow in constant expressions.
  
! ‘-Wno-odr’
       Warn about One Definition Rule violations during link-time
       optimization.  Enabled by default.
  
! ‘-Wopenacc-parallelism’
       Warn about potentially suboptimal choices related to OpenACC
       parallelism.
  
! ‘-Wno-openmp’
       Warn about suspicious OpenMP code.
  
! ‘-Wopenmp-simd’
       Warn if the vectorizer cost model overrides the OpenMP simd
!      directive set by user.  The ‘-fsimd-cost-model=unlimited’ option
       can be used to relax the cost model.
  
! ‘-Woverride-init (C and Objective-C only)’
       Warn if an initialized field without side effects is overridden
       when using designated initializers (*note Designated Initializers:
       Designated Inits.).
  
!      This warning is included in ‘-Wextra’.  To get other ‘-Wextra’
!      warnings without this one, use ‘-Wextra -Wno-override-init’.
  
! ‘-Wno-override-init-side-effects (C and Objective-C only)’
       Do not warn if an initialized field with side effects is overridden
       when using designated initializers (*note Designated Initializers:
       Designated Inits.).  This warning is enabled by default.
  
! ‘-Wpacked’
       Warn if a structure is given the packed attribute, but the packed
       attribute has no effect on the layout or size of the structure.
       Such structures may be mis-aligned for little benefit.  For
!      instance, in this code, the variable ‘f.x’ in ‘struct bar’ is
!      misaligned even though ‘struct bar’ does not itself have the packed
       attribute:
  
            struct foo {
*************** warnings, in some cases it may also caus
*** 9333,9345 ****
              struct foo f;
            };
  
! '-Wnopacked-bitfield-compat'
!      The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
!      bit-fields of type 'char'.  This was fixed in GCC 4.4 but the
       change can lead to differences in the structure layout.  GCC
       informs you when the offset of such a field has changed in GCC 4.4.
!      For example there is no longer a 4-bit padding between field 'a'
!      and 'b' in this structure:
  
            struct foo
            {
--- 9337,9349 ----
              struct foo f;
            };
  
! ‘-Wnopacked-bitfield-compat’
!      The 4.1, 4.2 and 4.3 series of GCC ignore the ‘packed’ attribute on
!      bit-fields of type ‘char’.  This was fixed in GCC 4.4 but the
       change can lead to differences in the structure layout.  GCC
       informs you when the offset of such a field has changed in GCC 4.4.
!      For example there is no longer a 4-bit padding between field ‘a’
!      and ‘b’ in this structure:
  
            struct foo
            {
*************** warnings, in some cases it may also caus
*** 9348,9387 ****
            } __attribute__ ((packed));
  
       This warning is enabled by default.  Use
!      '-Wno-packed-bitfield-compat' to disable this warning.
  
! '-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)'
       Warn if a structure field with explicitly specified alignment in a
       packed struct or union is misaligned.  For example, a warning will
!      be issued on 'struct S', like, 'warning: alignment 1 of 'struct S'
!      is less than 8', in this code:
  
            struct __attribute__ ((aligned (8))) S8 { char a[8]; };
            struct __attribute__ ((packed)) S {
              struct S8 s8;
            };
  
!      This warning is enabled by '-Wall'.
  
! '-Wpadded'
       Warn if padding is included in a structure, either to align an
       element of the structure or to align the whole structure.
       Sometimes when this happens it is possible to rearrange the fields
       of the structure to reduce the padding and so make the structure
       smaller.
  
! '-Wredundant-decls'
       Warn if anything is declared more than once in the same scope, even
       in cases where multiple declaration is valid and changes nothing.
  
! '-Wrestrict'
!      Warn when an object referenced by a 'restrict'-qualified parameter
!      (or, in C++, a '__restrict'-qualified parameter) is aliased by
       another argument, or when copies between such objects overlap.  For
!      example, the call to the 'strcpy' function below attempts to
       truncate the string by replacing its initial characters with the
       last four.  However, because the call writes the terminating NUL
!      into 'a[4]', the copies overlap and the call is diagnosed.
  
            void foo (void)
            {
--- 9352,9391 ----
            } __attribute__ ((packed));
  
       This warning is enabled by default.  Use
!      ‘-Wno-packed-bitfield-compat’ to disable this warning.
  
! ‘-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)’
       Warn if a structure field with explicitly specified alignment in a
       packed struct or union is misaligned.  For example, a warning will
!      be issued on ‘struct S’, like, ‘warning: alignment 1 of 'struct S'
!      is less than 8’, in this code:
  
            struct __attribute__ ((aligned (8))) S8 { char a[8]; };
            struct __attribute__ ((packed)) S {
              struct S8 s8;
            };
  
!      This warning is enabled by ‘-Wall’.
  
! ‘-Wpadded’
       Warn if padding is included in a structure, either to align an
       element of the structure or to align the whole structure.
       Sometimes when this happens it is possible to rearrange the fields
       of the structure to reduce the padding and so make the structure
       smaller.
  
! ‘-Wredundant-decls’
       Warn if anything is declared more than once in the same scope, even
       in cases where multiple declaration is valid and changes nothing.
  
! ‘-Wrestrict’
!      Warn when an object referenced by a ‘restrict’-qualified parameter
!      (or, in C++, a ‘__restrict’-qualified parameter) is aliased by
       another argument, or when copies between such objects overlap.  For
!      example, the call to the ‘strcpy’ function below attempts to
       truncate the string by replacing its initial characters with the
       last four.  However, because the call writes the terminating NUL
!      into ‘a[4]’, the copies overlap and the call is diagnosed.
  
            void foo (void)
            {
*************** warnings, in some cases it may also caus
*** 9389,9402 ****
              strcpy (a, a + 4);
              ...
            }
!      The '-Wrestrict' option detects some instances of simple overlap
!      even without optimization but works best at '-O2' and above.  It is
!      included in '-Wall'.
  
! '-Wnested-externs (C and Objective-C only)'
!      Warn if an 'extern' declaration is encountered within a function.
  
! '-Winline'
       Warn if a function that is declared as inline cannot be inlined.
       Even with this option, the compiler does not warn about failures to
       inline functions declared in system headers.
--- 9393,9406 ----
              strcpy (a, a + 4);
              ...
            }
!      The ‘-Wrestrict’ option detects some instances of simple overlap
!      even without optimization but works best at ‘-O2’ and above.  It is
!      included in ‘-Wall’.
  
! ‘-Wnested-externs (C and Objective-C only)’
!      Warn if an ‘extern’ declaration is encountered within a function.
  
! ‘-Winline’
       Warn if a function that is declared as inline cannot be inlined.
       Even with this option, the compiler does not warn about failures to
       inline functions declared in system headers.
*************** warnings, in some cases it may also caus
*** 9406,9418 ****
       account the size of the function being inlined and the amount of
       inlining that has already been done in the current function.
       Therefore, seemingly insignificant changes in the source program
!      can cause the warnings produced by '-Winline' to appear or
       disappear.
  
! '-Winterference-size'
       Warn about use of C++17
!      'std::hardware_destructive_interference_size' without specifying
!      its value with '--param destructive-interference-size'.  Also warn
       about questionable values for that option.
  
       This variable is intended to be used for controlling class layout,
--- 9410,9422 ----
       account the size of the function being inlined and the amount of
       inlining that has already been done in the current function.
       Therefore, seemingly insignificant changes in the source program
!      can cause the warnings produced by ‘-Winline’ to appear or
       disappear.
  
! ‘-Winterference-size’
       Warn about use of C++17
!      ‘std::hardware_destructive_interference_size’ without specifying
!      its value with ‘--param destructive-interference-size’.  Also warn
       about questionable values for that option.
  
       This variable is intended to be used for controlling class layout,
*************** warnings, in some cases it may also caus
*** 9425,9542 ****
                std::atomic<int> two;
            };
  
!      Here 'one' and 'two' are intended to be far enough apart that
       stores to one won't require accesses to the other to reload the
       cache line.
  
!      By default, '--param destructive-interference-size' and '--param
!      constructive-interference-size' are set based on the current
!      '-mtune' option, typically to the L1 cache line size for the
       particular target CPU, sometimes to a range if tuning for a generic
       target.  So all translation units that depend on ABI compatibility
       for the use of these variables must be compiled with the same
!      '-mtune' (or '-mcpu').
  
       If ABI stability is important, such as if the use is in a header
       for a library, you should probably not use the hardware
       interference size variables at all.  Alternatively, you can force a
!      particular value with '--param'.
  
       If you are confident that your use of the variable does not affect
       ABI outside a single build of your project, you can turn off the
!      warning with '-Wno-interference-size'.
  
! '-Wint-in-bool-context'
       Warn for suspicious use of integer values where boolean values are
       expected, such as conditional expressions (?:) using non-boolean
!      integer constants in boolean context, like 'if (a <= b ? 2 : 3)'.
!      Or left shifting of signed integers in boolean context, like 'for
!      (a = 0; 1 << a; a++);'.  Likewise for all kinds of multiplications
!      regardless of the data type.  This warning is enabled by '-Wall'.
  
! '-Wno-int-to-pointer-cast'
       Suppress warnings from casts to pointer type of an integer of a
       different size.  In C++, casting to a pointer type of smaller size
!      is an error.  'Wint-to-pointer-cast' is enabled by default.
  
! '-Wno-pointer-to-int-cast (C and Objective-C only)'
       Suppress warnings from casts from a pointer to an integer type of a
       different size.
  
! '-Winvalid-pch'
       Warn if a precompiled header (*note Precompiled Headers::) is found
       in the search path but cannot be used.
  
! '-Winvalid-utf8'
       Warn if an invalid UTF-8 character is found.  This warning is on by
!      default for C++23 if '-finput-charset=UTF-8' is used and turned
!      into error with '-pedantic-errors'.
  
! '-Wno-unicode'
       Don't diagnose invalid forms of delimited or named escape sequences
!      which are treated as separate tokens.  'Wunicode' is enabled by
       default.
  
! '-Wlong-long'
!      Warn if 'long long' type is used.  This is enabled by either
!      '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
!      inhibit the warning messages, use '-Wno-long-long'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wvariadic-macros'
       Warn if variadic macros are used in ISO C90 mode, or if the GNU
       alternate syntax is used in ISO C99 mode.  This is enabled by
!      either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
!      messages, use '-Wno-variadic-macros'.
  
! '-Wno-varargs'
       Do not warn upon questionable usage of the macros used to handle
!      variable arguments like 'va_start'.  These warnings are enabled by
       default.
  
! '-Wvector-operation-performance'
       Warn if vector operation is not implemented via SIMD capabilities
       of the architecture.  Mainly useful for the performance tuning.
!      Vector operation can be implemented 'piecewise', which means that
!      the scalar operation is performed on every vector element; 'in
!      parallel', which means that the vector operation is implemented
       using scalars of wider type, which normally is more performance
!      efficient; and 'as a single scalar', which means that vector fits
       into a scalar type.
  
! '-Wvla'
!      Warn if a variable-length array is used in the code.  '-Wno-vla'
!      prevents the '-Wpedantic' warning of the variable-length array.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wvla-larger-than=BYTE-SIZE'
       If this option is used, the compiler warns for declarations of
       variable-length arrays whose size is either unbounded, or bounded
       by an argument that allows the array size to exceed BYTE-SIZE
!      bytes.  This is similar to how '-Walloca-larger-than='BYTE-SIZE
       works, but with variable-length arrays.
  
       Note that GCC may optimize small variable-length arrays of a known
       value into plain arrays, so this warning may not get triggered for
       such arrays.
  
!      '-Wvla-larger-than=''PTRDIFF_MAX' is enabled by default but is
!      typically only effective when '-ftree-vrp' is active (default for
!      '-O2' and above).
  
!      See also '-Walloca-larger-than=BYTE-SIZE'.
  
! '-Wno-vla-larger-than'
!      Disable '-Wvla-larger-than=' warnings.  The option is equivalent to
!      '-Wvla-larger-than=''SIZE_MAX' or larger.
  
! '-Wvla-parameter'
       Warn about redeclarations of functions involving arguments of
       Variable Length Array types of inconsistent kinds or forms, and
       enable the detection of out-of-bounds accesses to such parameters
!      by warnings such as '-Warray-bounds'.
  
       If the first function declaration uses the VLA form the bound
       specified in the array is assumed to be the minimum number of
--- 9429,9546 ----
                std::atomic<int> two;
            };
  
!      Here ‘one’ and ‘two’ are intended to be far enough apart that
       stores to one won't require accesses to the other to reload the
       cache line.
  
!      By default, ‘--param destructive-interference-size’ and ‘--param
!      constructive-interference-size’ are set based on the current
!      ‘-mtune’ option, typically to the L1 cache line size for the
       particular target CPU, sometimes to a range if tuning for a generic
       target.  So all translation units that depend on ABI compatibility
       for the use of these variables must be compiled with the same
!      ‘-mtune’ (or ‘-mcpu’).
  
       If ABI stability is important, such as if the use is in a header
       for a library, you should probably not use the hardware
       interference size variables at all.  Alternatively, you can force a
!      particular value with ‘--param’.
  
       If you are confident that your use of the variable does not affect
       ABI outside a single build of your project, you can turn off the
!      warning with ‘-Wno-interference-size’.
  
! ‘-Wint-in-bool-context’
       Warn for suspicious use of integer values where boolean values are
       expected, such as conditional expressions (?:) using non-boolean
!      integer constants in boolean context, like ‘if (a <= b ? 2 : 3)’.
!      Or left shifting of signed integers in boolean context, like ‘for
!      (a = 0; 1 << a; a++);’.  Likewise for all kinds of multiplications
!      regardless of the data type.  This warning is enabled by ‘-Wall’.
  
! ‘-Wno-int-to-pointer-cast’
       Suppress warnings from casts to pointer type of an integer of a
       different size.  In C++, casting to a pointer type of smaller size
!      is an error.  ‘Wint-to-pointer-cast’ is enabled by default.
  
! ‘-Wno-pointer-to-int-cast (C and Objective-C only)’
       Suppress warnings from casts from a pointer to an integer type of a
       different size.
  
! ‘-Winvalid-pch’
       Warn if a precompiled header (*note Precompiled Headers::) is found
       in the search path but cannot be used.
  
! ‘-Winvalid-utf8’
       Warn if an invalid UTF-8 character is found.  This warning is on by
!      default for C++23 if ‘-finput-charset=UTF-8’ is used and turned
!      into error with ‘-pedantic-errors’.
  
! ‘-Wno-unicode’
       Don't diagnose invalid forms of delimited or named escape sequences
!      which are treated as separate tokens.  ‘Wunicode’ is enabled by
       default.
  
! ‘-Wlong-long’
!      Warn if ‘long long’ type is used.  This is enabled by either
!      ‘-Wpedantic’ or ‘-Wtraditional’ in ISO C90 and C++98 modes.  To
!      inhibit the warning messages, use ‘-Wno-long-long’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wvariadic-macros’
       Warn if variadic macros are used in ISO C90 mode, or if the GNU
       alternate syntax is used in ISO C99 mode.  This is enabled by
!      either ‘-Wpedantic’ or ‘-Wtraditional’.  To inhibit the warning
!      messages, use ‘-Wno-variadic-macros’.
  
! ‘-Wno-varargs’
       Do not warn upon questionable usage of the macros used to handle
!      variable arguments like ‘va_start’.  These warnings are enabled by
       default.
  
! ‘-Wvector-operation-performance’
       Warn if vector operation is not implemented via SIMD capabilities
       of the architecture.  Mainly useful for the performance tuning.
!      Vector operation can be implemented ‘piecewise’, which means that
!      the scalar operation is performed on every vector element; ‘in
!      parallel’, which means that the vector operation is implemented
       using scalars of wider type, which normally is more performance
!      efficient; and ‘as a single scalar’, which means that vector fits
       into a scalar type.
  
! ‘-Wvla’
!      Warn if a variable-length array is used in the code.  ‘-Wno-vla’
!      prevents the ‘-Wpedantic’ warning of the variable-length array.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wvla-larger-than=BYTE-SIZE’
       If this option is used, the compiler warns for declarations of
       variable-length arrays whose size is either unbounded, or bounded
       by an argument that allows the array size to exceed BYTE-SIZE
!      bytes.  This is similar to how ‘-Walloca-larger-than=’BYTE-SIZE
       works, but with variable-length arrays.
  
       Note that GCC may optimize small variable-length arrays of a known
       value into plain arrays, so this warning may not get triggered for
       such arrays.
  
!      ‘-Wvla-larger-than=’‘PTRDIFF_MAX’ is enabled by default but is
!      typically only effective when ‘-ftree-vrp’ is active (default for
!      ‘-O2’ and above).
  
!      See also ‘-Walloca-larger-than=BYTE-SIZE’.
  
! ‘-Wno-vla-larger-than’
!      Disable ‘-Wvla-larger-than=’ warnings.  The option is equivalent to
!      ‘-Wvla-larger-than=’‘SIZE_MAX’ or larger.
  
! ‘-Wvla-parameter’
       Warn about redeclarations of functions involving arguments of
       Variable Length Array types of inconsistent kinds or forms, and
       enable the detection of out-of-bounds accesses to such parameters
!      by warnings such as ‘-Warray-bounds’.
  
       If the first function declaration uses the VLA form the bound
       specified in the array is assumed to be the minimum number of
*************** warnings, in some cases it may also caus
*** 9547,9554 ****
  
       For example, the warning triggers for the following redeclarations
       because the first one allows an array of any size to be passed to
!      'f' while the second one specifies that the array argument must
!      have at least 'n' elements.  In addition, calling 'f' with the
       associated VLA bound parameter in excess of the actual VLA bound
       triggers a warning as well.
  
--- 9551,9558 ----
  
       For example, the warning triggers for the following redeclarations
       because the first one allows an array of any size to be passed to
!      ‘f’ while the second one specifies that the array argument must
!      have at least ‘n’ elements.  In addition, calling ‘f’ with the
       associated VLA bound parameter in excess of the actual VLA bound
       triggers a warning as well.
  
*************** warnings, in some cases it may also caus
*** 9567,9596 ****
            }
  
  
!      '-Wvla-parameter' is included in '-Wall'.  The '-Warray-parameter'
       option triggers warnings for similar problems involving ordinary
       array arguments.
  
! '-Wvolatile-register-var'
       Warn if a register variable is declared volatile.  The volatile
       modifier does not inhibit all optimizations that may eliminate
       reads and/or writes to register variables.  This warning is enabled
!      by '-Wall'.
  
! '-Wno-xor-used-as-pow (C, C++, Objective-C and Objective-C++ only)'
!      Disable warnings about uses of '^', the exclusive or operator,
       where it appears the code meant exponentiation.  Specifically, the
       warning occurs when the left-hand side is the decimal constant 2 or
       10 and the right-hand side is also a decimal constant.
  
!      In C and C++, '^' means exclusive or, whereas in some other
       languages (e.g.  TeX and some versions of BASIC) it means
       exponentiation.
  
       This warning can be silenced by converting one of the operands to
!      hexadecimal as well as by compiling with '-Wno-xor-used-as-pow'.
  
! '-Wdisabled-optimization'
       Warn if a requested optimization pass is disabled.  This warning
       does not generally indicate that there is anything wrong with your
       code; it merely indicates that GCC's optimizers are unable to
--- 9571,9600 ----
            }
  
  
!      ‘-Wvla-parameter’ is included in ‘-Wall’.  The ‘-Warray-parameter’
       option triggers warnings for similar problems involving ordinary
       array arguments.
  
! ‘-Wvolatile-register-var’
       Warn if a register variable is declared volatile.  The volatile
       modifier does not inhibit all optimizations that may eliminate
       reads and/or writes to register variables.  This warning is enabled
!      by ‘-Wall’.
  
! ‘-Wno-xor-used-as-pow (C, C++, Objective-C and Objective-C++ only)’
!      Disable warnings about uses of ‘^’, the exclusive or operator,
       where it appears the code meant exponentiation.  Specifically, the
       warning occurs when the left-hand side is the decimal constant 2 or
       10 and the right-hand side is also a decimal constant.
  
!      In C and C++, ‘^’ means exclusive or, whereas in some other
       languages (e.g.  TeX and some versions of BASIC) it means
       exponentiation.
  
       This warning can be silenced by converting one of the operands to
!      hexadecimal as well as by compiling with ‘-Wno-xor-used-as-pow’.
  
! ‘-Wdisabled-optimization’
       Warn if a requested optimization pass is disabled.  This warning
       does not generally indicate that there is anything wrong with your
       code; it merely indicates that GCC's optimizers are unable to
*************** warnings, in some cases it may also caus
*** 9599,9618 ****
       the optimization itself is likely to take inordinate amounts of
       time.
  
! '-Wpointer-sign (C and Objective-C only)'
       Warn for pointer argument passing or assignment with different
       signedness.  This option is only supported for C and Objective-C.
!      It is implied by '-Wall' and by '-Wpedantic', which can be disabled
!      with '-Wno-pointer-sign'.
  
!      This warning is upgraded to an error by '-pedantic-errors'.
  
! '-Wstack-protector'
!      This option is only active when '-fstack-protector' is active.  It
       warns about functions that are not protected against stack
       smashing.
  
! '-Woverlength-strings'
       Warn about string constants that are longer than the "minimum
       maximum" length specified in the C standard.  Modern compilers
       generally allow string constants that are much longer than the
--- 9603,9622 ----
       the optimization itself is likely to take inordinate amounts of
       time.
  
! ‘-Wpointer-sign (C and Objective-C only)’
       Warn for pointer argument passing or assignment with different
       signedness.  This option is only supported for C and Objective-C.
!      It is implied by ‘-Wall’ and by ‘-Wpedantic’, which can be disabled
!      with ‘-Wno-pointer-sign’.
  
!      This warning is upgraded to an error by ‘-pedantic-errors’.
  
! ‘-Wstack-protector’
!      This option is only active when ‘-fstack-protector’ is active.  It
       warns about functions that are not protected against stack
       smashing.
  
! ‘-Woverlength-strings’
       Warn about string constants that are longer than the "minimum
       maximum" length specified in the C standard.  Modern compilers
       generally allow string constants that are much longer than the
*************** warnings, in some cases it may also caus
*** 9624,9650 ****
       in C99, it was raised to 4095.  C++98 does not specify a normative
       minimum maximum, so we do not diagnose overlength strings in C++.
  
!      This option is implied by '-Wpedantic', and can be disabled with
!      '-Wno-overlength-strings'.
  
! '-Wunsuffixed-float-constants (C and Objective-C only)'
  
       Issue a warning for any floating constant that does not have a
!      suffix.  When used together with '-Wsystem-headers' it warns about
       such constants in system header files.  This can be useful when
!      preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
       the decimal floating-point extension to C99.
  
! '-Wno-lto-type-mismatch'
  
       During the link-time optimization, do not warn about type
       mismatches in global declarations from different compilation units.
!      Requires '-flto' to be enabled.  Enabled by default.
  
! '-Wno-designated-init (C and Objective-C only)'
       Suppress warnings when a positional initializer is used to
       initialize a structure that has been marked with the
!      'designated_init' attribute.
  
  
  File: gcc.info,  Node: Static Analyzer Options,  Next: Debugging Options,  Prev: Warning Options,  Up: Invoking GCC
--- 9628,9654 ----
       in C99, it was raised to 4095.  C++98 does not specify a normative
       minimum maximum, so we do not diagnose overlength strings in C++.
  
!      This option is implied by ‘-Wpedantic’, and can be disabled with
!      ‘-Wno-overlength-strings’.
  
! ‘-Wunsuffixed-float-constants (C and Objective-C only)’
  
       Issue a warning for any floating constant that does not have a
!      suffix.  When used together with ‘-Wsystem-headers’ it warns about
       such constants in system header files.  This can be useful when
!      preparing code to use with the ‘FLOAT_CONST_DECIMAL64’ pragma from
       the decimal floating-point extension to C99.
  
! ‘-Wno-lto-type-mismatch’
  
       During the link-time optimization, do not warn about type
       mismatches in global declarations from different compilation units.
!      Requires ‘-flto’ to be enabled.  Enabled by default.
  
! ‘-Wno-designated-init (C and Objective-C only)’
       Suppress warnings when a positional initializer is used to
       initialize a structure that has been marked with the
!      ‘designated_init’ attribute.
  
  
  File: gcc.info,  Node: Static Analyzer Options,  Next: Debugging Options,  Prev: Warning Options,  Up: Invoking GCC
*************** File: gcc.info,  Node: Static Analyzer O
*** 9652,9658 ****
  3.9 Options That Control Static Analysis
  ========================================
  
! '-fanalyzer'
       This option enables an static analysis of program flow which looks
       for "interesting" interprocedural paths through the code, and
       issues warnings for problems found on them.
--- 9656,9662 ----
  3.9 Options That Control Static Analysis
  ========================================
  
! ‘-fanalyzer’
       This option enables an static analysis of program flow which looks
       for "interesting" interprocedural paths through the code, and
       issues warnings for problems found on them.
*************** File: gcc.info,  Node: Static Analyzer O
*** 9721,9771 ****
       This option is only available if GCC was configured with analyzer
       support enabled.
  
! '-Wanalyzer-symbol-too-complex'
!      If '-fanalyzer' is enabled, the analyzer uses various heuristics to
       attempt to track the state of memory, but these can be defeated by
       sufficiently complicated code.
  
       By default, the analysis silently stops tracking values of
!      expressions if they exceed the threshold defined by '--param
!      analyzer-max-svalue-depth=VALUE', and falls back to an imprecise
       representation for such expressions.  The
!      '-Wanalyzer-symbol-too-complex' option warns if this occurs.
  
! '-Wanalyzer-too-complex'
!      If '-fanalyzer' is enabled, the analyzer uses various heuristics to
       attempt to explore the control flow and data flow in the program,
       but these can be defeated by sufficiently complicated code.
  
       By default, the analysis silently stops if the code is too
       complicated for the analyzer to fully explore and it reaches an
!      internal limit.  The '-Wanalyzer-too-complex' option warns if this
       occurs.
  
! '-Wno-analyzer-allocation-size'
!      This warning requires '-fanalyzer', which enables it; to disable
!      it, use '-Wno-analyzer-allocation-size'.
  
       This diagnostic warns for paths through the code in which a pointer
       to a buffer is assigned to point at a buffer with a size that is
!      not a multiple of 'sizeof (*pointer)'.
  
       See CWE-131: Incorrect Calculation of Buffer Size
       (https://cwe.mitre.org/data/definitions/131.html).
  
! '-Wno-analyzer-deref-before-check'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-deref-before-check' to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      is checked for 'NULL' *after* it has already been dereferenced,
       suggesting that the pointer could have been NULL. Such cases
       suggest that the check for NULL is either redundant, or that it
       needs to be moved to before the pointer is dereferenced.
  
       This diagnostic also considers values passed to a function argument
!      marked with '__attribute__((nonnull))' as requiring a non-NULL
!      value, and thus will complain if such values are checked for 'NULL'
       after returning from such a function call.
  
       This diagnostic is unlikely to be reported when any level of
--- 9725,9775 ----
       This option is only available if GCC was configured with analyzer
       support enabled.
  
! ‘-Wanalyzer-symbol-too-complex’
!      If ‘-fanalyzer’ is enabled, the analyzer uses various heuristics to
       attempt to track the state of memory, but these can be defeated by
       sufficiently complicated code.
  
       By default, the analysis silently stops tracking values of
!      expressions if they exceed the threshold defined by ‘--param
!      analyzer-max-svalue-depth=VALUE’, and falls back to an imprecise
       representation for such expressions.  The
!      ‘-Wanalyzer-symbol-too-complex’ option warns if this occurs.
  
! ‘-Wanalyzer-too-complex’
!      If ‘-fanalyzer’ is enabled, the analyzer uses various heuristics to
       attempt to explore the control flow and data flow in the program,
       but these can be defeated by sufficiently complicated code.
  
       By default, the analysis silently stops if the code is too
       complicated for the analyzer to fully explore and it reaches an
!      internal limit.  The ‘-Wanalyzer-too-complex’ option warns if this
       occurs.
  
! ‘-Wno-analyzer-allocation-size’
!      This warning requires ‘-fanalyzer’, which enables it; to disable
!      it, use ‘-Wno-analyzer-allocation-size’.
  
       This diagnostic warns for paths through the code in which a pointer
       to a buffer is assigned to point at a buffer with a size that is
!      not a multiple of ‘sizeof (*pointer)’.
  
       See CWE-131: Incorrect Calculation of Buffer Size
       (https://cwe.mitre.org/data/definitions/131.html).
  
! ‘-Wno-analyzer-deref-before-check’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-deref-before-check’ to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      is checked for ‘NULL’ *after* it has already been dereferenced,
       suggesting that the pointer could have been NULL. Such cases
       suggest that the check for NULL is either redundant, or that it
       needs to be moved to before the pointer is dereferenced.
  
       This diagnostic also considers values passed to a function argument
!      marked with ‘__attribute__((nonnull))’ as requiring a non-NULL
!      value, and thus will complain if such values are checked for ‘NULL’
       after returning from such a function call.
  
       This diagnostic is unlikely to be reported when any level of
*************** File: gcc.info,  Node: Static Analyzer O
*** 9774,9803 ****
       away before the analyzer "sees" them.  Hence optimization should be
       disabled when attempting to trigger this diagnostic.
  
! '-Wno-analyzer-double-fclose'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-double-fclose' to disable it.
  
!      This diagnostic warns for paths through the code in which a 'FILE
!      *' can have 'fclose' called on it more than once.
  
       See CWE-1341: Multiple Releases of Same Resource or Handle
       (https://cwe.mitre.org/data/definitions/1341.html).
  
! '-Wno-analyzer-double-free'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-double-free' to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      can have a deallocator called on it more than once, either 'free',
!      or a deallocator referenced by attribute 'malloc'.
  
       See CWE-415: Double Free
       (https://cwe.mitre.org/data/definitions/415.html).
  
! '-Wno-analyzer-exposure-through-output-file'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-exposure-through-output-file' to disable it.
  
       This diagnostic warns for paths through the code in which a
       security-sensitive value is written to an output file (such as
--- 9778,9807 ----
       away before the analyzer "sees" them.  Hence optimization should be
       disabled when attempting to trigger this diagnostic.
  
! ‘-Wno-analyzer-double-fclose’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-double-fclose’ to disable it.
  
!      This diagnostic warns for paths through the code in which a ‘FILE
!      *’ can have ‘fclose’ called on it more than once.
  
       See CWE-1341: Multiple Releases of Same Resource or Handle
       (https://cwe.mitre.org/data/definitions/1341.html).
  
! ‘-Wno-analyzer-double-free’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-double-free’ to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      can have a deallocator called on it more than once, either ‘free’,
!      or a deallocator referenced by attribute ‘malloc’.
  
       See CWE-415: Double Free
       (https://cwe.mitre.org/data/definitions/415.html).
  
! ‘-Wno-analyzer-exposure-through-output-file’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-exposure-through-output-file’ to disable it.
  
       This diagnostic warns for paths through the code in which a
       security-sensitive value is written to an output file (such as
*************** File: gcc.info,  Node: Static Analyzer O
*** 9806,9815 ****
       See CWE-532: Information Exposure Through Log Files
       (https://cwe.mitre.org/data/definitions/532.html).
  
! '-Wanalyzer-exposure-through-uninit-copy'
!      This warning requires both '-fanalyzer' and the use of a plugin to
       specify a function that copies across a "trust boundary".  Use
!      '-Wno-analyzer-exposure-through-uninit-copy' to disable it.
  
       This diagnostic warns for "infoleaks" - paths through the code in
       which uninitialized values are copied across a security boundary
--- 9810,9819 ----
       See CWE-532: Information Exposure Through Log Files
       (https://cwe.mitre.org/data/definitions/532.html).
  
! ‘-Wanalyzer-exposure-through-uninit-copy’
!      This warning requires both ‘-fanalyzer’ and the use of a plugin to
       specify a function that copies across a "trust boundary".  Use
!      ‘-Wno-analyzer-exposure-through-uninit-copy’ to disable it.
  
       This diagnostic warns for "infoleaks" - paths through the code in
       which uninitialized values are copied across a security boundary
*************** File: gcc.info,  Node: Static Analyzer O
*** 9819,9840 ****
       See CWE-200: Exposure of Sensitive Information to an Unauthorized
       Actor (https://cwe.mitre.org/data/definitions/200.html).
  
! '-Wno-analyzer-fd-access-mode-mismatch'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-access-mode-mismatch' to disable it.
  
!      This diagnostic warns for paths through code in which a 'read' on a
       write-only file descriptor is attempted, or vice versa.
  
       This diagnostic also warns for code paths in a which a function
!      with attribute 'fd_arg_read (N)' is called with a file descriptor
!      opened with 'O_WRONLY' at referenced argument 'N' or a function
!      with attribute 'fd_arg_write (N)' is called with a file descriptor
!      opened with 'O_RDONLY' at referenced argument N.
  
! '-Wno-analyzer-fd-double-close'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-double-close' to disable it.
  
       This diagnostic warns for paths through code in which a file
       descriptor can be closed more than once.
--- 9823,9844 ----
       See CWE-200: Exposure of Sensitive Information to an Unauthorized
       Actor (https://cwe.mitre.org/data/definitions/200.html).
  
! ‘-Wno-analyzer-fd-access-mode-mismatch’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-access-mode-mismatch’ to disable it.
  
!      This diagnostic warns for paths through code in which a ‘read’ on a
       write-only file descriptor is attempted, or vice versa.
  
       This diagnostic also warns for code paths in a which a function
!      with attribute ‘fd_arg_read (N)’ is called with a file descriptor
!      opened with ‘O_WRONLY’ at referenced argument ‘N’ or a function
!      with attribute ‘fd_arg_write (N)’ is called with a file descriptor
!      opened with ‘O_RDONLY’ at referenced argument N.
  
! ‘-Wno-analyzer-fd-double-close’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-double-close’ to disable it.
  
       This diagnostic warns for paths through code in which a file
       descriptor can be closed more than once.
*************** File: gcc.info,  Node: Static Analyzer O
*** 9842,9850 ****
       See CWE-1341: Multiple Releases of Same Resource or Handle
       (https://cwe.mitre.org/data/definitions/1341.html).
  
! '-Wno-analyzer-fd-leak'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-leak' to disable it.
  
       This diagnostic warns for paths through code in which an open file
       descriptor is leaked.
--- 9846,9854 ----
       See CWE-1341: Multiple Releases of Same Resource or Handle
       (https://cwe.mitre.org/data/definitions/1341.html).
  
! ‘-Wno-analyzer-fd-leak’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-leak’ to disable it.
  
       This diagnostic warns for paths through code in which an open file
       descriptor is leaked.
*************** File: gcc.info,  Node: Static Analyzer O
*** 9853,9929 ****
       Effective Lifetime
       (https://cwe.mitre.org/data/definitions/775.html).
  
! '-Wno-analyzer-fd-phase-mismatch'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-phase-mismatch' to disable it.
  
       This diagnostic warns for paths through code in which an operation
       is attempted in the wrong phase of a file descriptor's lifetime.
!      For example, it will warn on attempts to call 'accept' on a stream
!      socket that has not yet had 'listen' successfully called on it.
  
       See CWE-666: Operation on Resource in Wrong Phase of Lifetime
       (https://cwe.mitre.org/data/definitions/666.html).
  
! '-Wno-analyzer-fd-type-mismatch'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-type-mismatch' to disable it.
  
       This diagnostic warns for paths through code in which an operation
       is attempted on the wrong type of file descriptor.  For example, it
       will warn on attempts to use socket operations on a file descriptor
!      obtained via 'open', or when attempting to use a stream socket
       operation on a datagram socket.
  
! '-Wno-analyzer-fd-use-after-close'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-use-after-close' to disable it.
  
       This diagnostic warns for paths through code in which a read or
       write is called on a closed file descriptor.
  
       This diagnostic also warns for paths through code in which a
!      function with attribute 'fd_arg (N)' or 'fd_arg_read (N)' or
!      'fd_arg_write (N)' is called with a closed file descriptor at
!      referenced argument 'N'.
  
! '-Wno-analyzer-fd-use-without-check'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-fd-use-without-check' to disable it.
  
       This diagnostic warns for paths through code in which a file
       descriptor is used without being checked for validity.
  
       This diagnostic also warns for paths through code in which a
!      function with attribute 'fd_arg (N)' or 'fd_arg_read (N)' or
!      'fd_arg_write (N)' is called with a file descriptor, at referenced
!      argument 'N', without being checked for validity.
  
! '-Wno-analyzer-file-leak'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-file-leak' to disable it.
  
       This diagnostic warns for paths through the code in which a
!      '<stdio.h>' 'FILE *' stream object is leaked.
  
       See CWE-775: Missing Release of File Descriptor or Handle after
       Effective Lifetime
       (https://cwe.mitre.org/data/definitions/775.html).
  
! '-Wno-analyzer-free-of-non-heap'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-free-of-non-heap' to disable it.
  
!      This diagnostic warns for paths through the code in which 'free' is
       called on a non-heap pointer (e.g.  an on-stack buffer, or a
       global).
  
       See CWE-590: Free of Memory not on the Heap
       (https://cwe.mitre.org/data/definitions/590.html).
  
! '-Wno-analyzer-imprecise-fp-arithmetic'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-imprecise-fp-arithmetic' to disable it.
  
       This diagnostic warns for paths through the code in which
       floating-point arithmetic is used in locations where precise
--- 9857,9933 ----
       Effective Lifetime
       (https://cwe.mitre.org/data/definitions/775.html).
  
! ‘-Wno-analyzer-fd-phase-mismatch’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-phase-mismatch’ to disable it.
  
       This diagnostic warns for paths through code in which an operation
       is attempted in the wrong phase of a file descriptor's lifetime.
!      For example, it will warn on attempts to call ‘accept’ on a stream
!      socket that has not yet had ‘listen’ successfully called on it.
  
       See CWE-666: Operation on Resource in Wrong Phase of Lifetime
       (https://cwe.mitre.org/data/definitions/666.html).
  
! ‘-Wno-analyzer-fd-type-mismatch’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-type-mismatch’ to disable it.
  
       This diagnostic warns for paths through code in which an operation
       is attempted on the wrong type of file descriptor.  For example, it
       will warn on attempts to use socket operations on a file descriptor
!      obtained via ‘open’, or when attempting to use a stream socket
       operation on a datagram socket.
  
! ‘-Wno-analyzer-fd-use-after-close’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-use-after-close’ to disable it.
  
       This diagnostic warns for paths through code in which a read or
       write is called on a closed file descriptor.
  
       This diagnostic also warns for paths through code in which a
!      function with attribute ‘fd_arg (N)’ or ‘fd_arg_read (N)’ or
!      ‘fd_arg_write (N)’ is called with a closed file descriptor at
!      referenced argument ‘N’.
  
! ‘-Wno-analyzer-fd-use-without-check’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-fd-use-without-check’ to disable it.
  
       This diagnostic warns for paths through code in which a file
       descriptor is used without being checked for validity.
  
       This diagnostic also warns for paths through code in which a
!      function with attribute ‘fd_arg (N)’ or ‘fd_arg_read (N)’ or
!      ‘fd_arg_write (N)’ is called with a file descriptor, at referenced
!      argument ‘N’, without being checked for validity.
  
! ‘-Wno-analyzer-file-leak’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-file-leak’ to disable it.
  
       This diagnostic warns for paths through the code in which a
!      ‘<stdio.h>’ ‘FILE *’ stream object is leaked.
  
       See CWE-775: Missing Release of File Descriptor or Handle after
       Effective Lifetime
       (https://cwe.mitre.org/data/definitions/775.html).
  
! ‘-Wno-analyzer-free-of-non-heap’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-free-of-non-heap’ to disable it.
  
!      This diagnostic warns for paths through the code in which ‘free’ is
       called on a non-heap pointer (e.g.  an on-stack buffer, or a
       global).
  
       See CWE-590: Free of Memory not on the Heap
       (https://cwe.mitre.org/data/definitions/590.html).
  
! ‘-Wno-analyzer-imprecise-fp-arithmetic’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-imprecise-fp-arithmetic’ to disable it.
  
       This diagnostic warns for paths through the code in which
       floating-point arithmetic is used in locations where precise
*************** File: gcc.info,  Node: Static Analyzer O
*** 9931,9948 ****
       floating-point operands inside the calculation of an allocation
       size at the moment.
  
! '-Wno-analyzer-infinite-loop'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-infinite-loop' to disable it.
  
       This diagnostics warns for paths through the code which appear to
       lead to an infinite loop.
  
       Specifically, the analyzer will issue this warning when it "sees" a
       loop in which:
!         * no externally-visible work could be being done within the loop
!         * there is no way to escape from the loop
!         * the analyzer is sufficiently confident about the program state
            throughout the loop to know that the above are true
  
       One way for this warning to be emitted is when there is an
--- 9935,9952 ----
       floating-point operands inside the calculation of an allocation
       size at the moment.
  
! ‘-Wno-analyzer-infinite-loop’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-infinite-loop’ to disable it.
  
       This diagnostics warns for paths through the code which appear to
       lead to an infinite loop.
  
       Specifically, the analyzer will issue this warning when it "sees" a
       loop in which:
!         • no externally-visible work could be being done within the loop
!         • there is no way to escape from the loop
!         • the analyzer is sufficiently confident about the program state
            throughout the loop to know that the above are true
  
       One way for this warning to be emitted is when there is an
*************** File: gcc.info,  Node: Static Analyzer O
*** 9966,9983 ****
                   }
                }
  
!      The analyzer will complain for the above case because if 'opcode'
!      ever matches none of the cases, the 'switch' will follow the
!      implicit 'default' case, making the body of the loop be a "no-op"
!      with 'cpu_state.pc' unchanged, and thus using the same value of
!      'opcode' on all subseqent iterations, leading to an infinite loop.
  
       See CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')
       (https://cwe.mitre.org/data/definitions/835.html).
  
! '-Wno-analyzer-infinite-recursion'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-infinite-recursion' to disable it.
  
       This diagnostics warns for paths through the code which appear to
       lead to infinite recursion.
--- 9970,9987 ----
                   }
                }
  
!      The analyzer will complain for the above case because if ‘opcode’
!      ever matches none of the cases, the ‘switch’ will follow the
!      implicit ‘default’ case, making the body of the loop be a "no-op"
!      with ‘cpu_state.pc’ unchanged, and thus using the same value of
!      ‘opcode’ on all subseqent iterations, leading to an infinite loop.
  
       See CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')
       (https://cwe.mitre.org/data/definitions/835.html).
  
! ‘-Wno-analyzer-infinite-recursion’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-infinite-recursion’ to disable it.
  
       This diagnostics warns for paths through the code which appear to
       lead to infinite recursion.
*************** File: gcc.info,  Node: Static Analyzer O
*** 9994,10040 ****
       "sees" them.  Hence optimization should be disabled when attempting
       to trigger this diagnostic.
  
!      Compare with '-Winfinite-recursion', which provides a similar
       diagnostic, but is implemented in a different way.
  
       See CWE-674: Uncontrolled Recursion
       (https://cwe.mitre.org/data/definitions/674.html).
  
! '-Wno-analyzer-jump-through-null'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-jump-through-null' to disable it.
  
!      This diagnostic warns for paths through the code in which a 'NULL'
       function pointer is called.
  
! '-Wno-analyzer-malloc-leak'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-malloc-leak' to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      allocated via an allocator is leaked: either 'malloc', or a
!      function marked with attribute 'malloc'.
  
       See CWE-401: Missing Release of Memory after Effective Lifetime
       (https://cwe.mitre.org/data/definitions/401.html).
  
! '-Wno-analyzer-mismatching-deallocation'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-mismatching-deallocation' to disable it.
  
       This diagnostic warns for paths through the code in which the wrong
       deallocation function is called on a pointer value, based on which
       function was used to allocate the pointer value.  The diagnostic
!      will warn about mismatches between 'free', scalar 'delete' and
!      vector 'delete[]', and those marked as allocator/deallocator pairs
!      using attribute 'malloc'.
  
       See CWE-762: Mismatched Memory Management Routines
       (https://cwe.mitre.org/data/definitions/762.html).
  
! '-Wno-analyzer-out-of-bounds'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-out-of-bounds' to disable it.
  
       This diagnostic warns for paths through the code in which a buffer
       is definitely read or written out-of-bounds.  The diagnostic
--- 9998,10044 ----
       "sees" them.  Hence optimization should be disabled when attempting
       to trigger this diagnostic.
  
!      Compare with ‘-Winfinite-recursion’, which provides a similar
       diagnostic, but is implemented in a different way.
  
       See CWE-674: Uncontrolled Recursion
       (https://cwe.mitre.org/data/definitions/674.html).
  
! ‘-Wno-analyzer-jump-through-null’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-jump-through-null’ to disable it.
  
!      This diagnostic warns for paths through the code in which a ‘NULL’
       function pointer is called.
  
! ‘-Wno-analyzer-malloc-leak’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-malloc-leak’ to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      allocated via an allocator is leaked: either ‘malloc’, or a
!      function marked with attribute ‘malloc’.
  
       See CWE-401: Missing Release of Memory after Effective Lifetime
       (https://cwe.mitre.org/data/definitions/401.html).
  
! ‘-Wno-analyzer-mismatching-deallocation’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-mismatching-deallocation’ to disable it.
  
       This diagnostic warns for paths through the code in which the wrong
       deallocation function is called on a pointer value, based on which
       function was used to allocate the pointer value.  The diagnostic
!      will warn about mismatches between ‘free’, scalar ‘delete’ and
!      vector ‘delete[]’, and those marked as allocator/deallocator pairs
!      using attribute ‘malloc’.
  
       See CWE-762: Mismatched Memory Management Routines
       (https://cwe.mitre.org/data/definitions/762.html).
  
! ‘-Wno-analyzer-out-of-bounds’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-out-of-bounds’ to disable it.
  
       This diagnostic warns for paths through the code in which a buffer
       is definitely read or written out-of-bounds.  The diagnostic
*************** File: gcc.info,  Node: Static Analyzer O
*** 10056,10066 ****
       memory, the relative sizes involved, the direction of the access
       (read vs write), and, in some cases, the values of data involved.
       This diagram can be suppressed using
!      '-fdiagnostics-text-art-charset=none'.
  
! '-Wno-analyzer-overlapping-buffers'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-overlapping-buffers' to disable it.
  
       This diagnostic warns for paths through the code in which
       overlapping buffers are passed to an API for which the behavior on
--- 10060,10070 ----
       memory, the relative sizes involved, the direction of the access
       (read vs write), and, in some cases, the values of data involved.
       This diagram can be suppressed using
!      ‘-fdiagnostics-text-art-charset=none’.
  
! ‘-Wno-analyzer-overlapping-buffers’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-overlapping-buffers’ to disable it.
  
       This diagnostic warns for paths through the code in which
       overlapping buffers are passed to an API for which the behavior on
*************** File: gcc.info,  Node: Static Analyzer O
*** 10068,10092 ****
  
       Specifically, the diagnostic occurs on calls to the following
       functions
!         * 'memcpy'
!         * 'strcat'
!         * 'strcpy'
       for cases where the buffers are known to overlap.
  
! '-Wno-analyzer-possible-null-argument'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-possible-null-argument' to disable it.
  
       This diagnostic warns for paths through the code in which a
       possibly-NULL value is passed to a function argument marked with
!      '__attribute__((nonnull))' as requiring a non-NULL value.
  
       See CWE-690: Unchecked Return Value to NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/690.html).
  
! '-Wno-analyzer-possible-null-dereference'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-possible-null-dereference' to disable it.
  
       This diagnostic warns for paths through the code in which a
       possibly-NULL value is dereferenced.
--- 10072,10096 ----
  
       Specifically, the diagnostic occurs on calls to the following
       functions
!         • ‘memcpy’
!         • ‘strcat’
!         • ‘strcpy’
       for cases where the buffers are known to overlap.
  
! ‘-Wno-analyzer-possible-null-argument’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-possible-null-argument’ to disable it.
  
       This diagnostic warns for paths through the code in which a
       possibly-NULL value is passed to a function argument marked with
!      ‘__attribute__((nonnull))’ as requiring a non-NULL value.
  
       See CWE-690: Unchecked Return Value to NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/690.html).
  
! ‘-Wno-analyzer-possible-null-dereference’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-possible-null-dereference’ to disable it.
  
       This diagnostic warns for paths through the code in which a
       possibly-NULL value is dereferenced.
*************** File: gcc.info,  Node: Static Analyzer O
*** 10094,10113 ****
       See CWE-690: Unchecked Return Value to NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/690.html).
  
! '-Wno-analyzer-null-argument'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-null-argument' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       known to be NULL is passed to a function argument marked with
!      '__attribute__((nonnull))' as requiring a non-NULL value.
  
       See CWE-476: NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/476.html).
  
! '-Wno-analyzer-null-dereference'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-null-dereference' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       known to be NULL is dereferenced.
--- 10098,10117 ----
       See CWE-690: Unchecked Return Value to NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/690.html).
  
! ‘-Wno-analyzer-null-argument’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-null-argument’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       known to be NULL is passed to a function argument marked with
!      ‘__attribute__((nonnull))’ as requiring a non-NULL value.
  
       See CWE-476: NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/476.html).
  
! ‘-Wno-analyzer-null-dereference’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-null-dereference’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       known to be NULL is dereferenced.
*************** File: gcc.info,  Node: Static Analyzer O
*** 10115,10174 ****
       See CWE-476: NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/476.html).
  
! '-Wno-analyzer-putenv-of-auto-var'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-putenv-of-auto-var' to disable it.
  
       This diagnostic warns for paths through the code in which a call to
!      'putenv' is passed a pointer to an automatic variable or an
       on-stack buffer.
  
       See POS34-C. Do not call putenv() with a pointer to an automatic
       variable as the argument
       (https://wiki.sei.cmu.edu/confluence/x/6NYxBQ).
  
! '-Wno-analyzer-shift-count-negative'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-shift-count-negative' to disable it.
  
       This diagnostic warns for paths through the code in which a shift
       is attempted with a negative count.  It is analogous to the
!      '-Wshift-count-negative' diagnostic implemented in the C/C++ front
       ends, but is implemented based on analyzing interprocedural paths,
       rather than merely parsing the syntax tree.  However, the analyzer
       does not prioritize detection of such paths, so false negatives are
       more likely relative to other warnings.
  
! '-Wno-analyzer-shift-count-overflow'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-shift-count-overflow' to disable it.
  
       This diagnostic warns for paths through the code in which a shift
       is attempted with a count greater than or equal to the precision of
       the operand's type.  It is analogous to the
!      '-Wshift-count-overflow' diagnostic implemented in the C/C++ front
       ends, but is implemented based on analyzing interprocedural paths,
       rather than merely parsing the syntax tree.  However, the analyzer
       does not prioritize detection of such paths, so false negatives are
       more likely relative to other warnings.
  
! '-Wno-analyzer-stale-setjmp-buffer'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-stale-setjmp-buffer' to disable it.
  
!      This diagnostic warns for paths through the code in which 'longjmp'
!      is called to rewind to a 'jmp_buf' relating to a 'setjmp' call in a
       function that has returned.
  
!      When 'setjmp' is called on a 'jmp_buf' to record a rewind location,
       it records the stack frame.  The stack frame becomes invalid when
!      the function containing the 'setjmp' call returns.  Attempting to
!      rewind to it via 'longjmp' would reference a stack frame that no
       longer exists, and likely lead to a crash (or worse).
  
! '-Wno-analyzer-tainted-allocation-size'
!      This warning requires '-fanalyzer' which enables it; use
!      '-Wno-analyzer-tainted-allocation-size' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the size of an
--- 10119,10178 ----
       See CWE-476: NULL Pointer Dereference
       (https://cwe.mitre.org/data/definitions/476.html).
  
! ‘-Wno-analyzer-putenv-of-auto-var’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-putenv-of-auto-var’ to disable it.
  
       This diagnostic warns for paths through the code in which a call to
!      ‘putenv’ is passed a pointer to an automatic variable or an
       on-stack buffer.
  
       See POS34-C. Do not call putenv() with a pointer to an automatic
       variable as the argument
       (https://wiki.sei.cmu.edu/confluence/x/6NYxBQ).
  
! ‘-Wno-analyzer-shift-count-negative’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-shift-count-negative’ to disable it.
  
       This diagnostic warns for paths through the code in which a shift
       is attempted with a negative count.  It is analogous to the
!      ‘-Wshift-count-negative’ diagnostic implemented in the C/C++ front
       ends, but is implemented based on analyzing interprocedural paths,
       rather than merely parsing the syntax tree.  However, the analyzer
       does not prioritize detection of such paths, so false negatives are
       more likely relative to other warnings.
  
! ‘-Wno-analyzer-shift-count-overflow’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-shift-count-overflow’ to disable it.
  
       This diagnostic warns for paths through the code in which a shift
       is attempted with a count greater than or equal to the precision of
       the operand's type.  It is analogous to the
!      ‘-Wshift-count-overflow’ diagnostic implemented in the C/C++ front
       ends, but is implemented based on analyzing interprocedural paths,
       rather than merely parsing the syntax tree.  However, the analyzer
       does not prioritize detection of such paths, so false negatives are
       more likely relative to other warnings.
  
! ‘-Wno-analyzer-stale-setjmp-buffer’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-stale-setjmp-buffer’ to disable it.
  
!      This diagnostic warns for paths through the code in which ‘longjmp’
!      is called to rewind to a ‘jmp_buf’ relating to a ‘setjmp’ call in a
       function that has returned.
  
!      When ‘setjmp’ is called on a ‘jmp_buf’ to record a rewind location,
       it records the stack frame.  The stack frame becomes invalid when
!      the function containing the ‘setjmp’ call returns.  Attempting to
!      rewind to it via ‘longjmp’ would reference a stack frame that no
       longer exists, and likely lead to a crash (or worse).
  
! ‘-Wno-analyzer-tainted-allocation-size’
!      This warning requires ‘-fanalyzer’ which enables it; use
!      ‘-Wno-analyzer-tainted-allocation-size’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the size of an
*************** File: gcc.info,  Node: Static Analyzer O
*** 10179,10194 ****
       See CWE-789: Memory Allocation with Excessive Size Value
       (https://cwe.mitre.org/data/definitions/789.html).
  
! '-Wno-analyzer-tainted-assertion'
  
!      This warning requires '-fanalyzer' which enables it; use
!      '-Wno-analyzer-tainted-assertion' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as part of a
       condition without being first sanitized, and that condition guards
!      a call to a function marked with attribute 'noreturn' (such as the
!      function '__builtin_unreachable').  Such functions typically
       indicate abnormal termination of the program, such as for assertion
       failure handlers.  For example:
  
--- 10183,10198 ----
       See CWE-789: Memory Allocation with Excessive Size Value
       (https://cwe.mitre.org/data/definitions/789.html).
  
! ‘-Wno-analyzer-tainted-assertion’
  
!      This warning requires ‘-fanalyzer’ which enables it; use
!      ‘-Wno-analyzer-tainted-assertion’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as part of a
       condition without being first sanitized, and that condition guards
!      a call to a function marked with attribute ‘noreturn’ (such as the
!      function ‘__builtin_unreachable’).  Such functions typically
       indicate abnormal termination of the program, such as for assertion
       failure handlers.  For example:
  
*************** File: gcc.info,  Node: Static Analyzer O
*** 10196,10206 ****
  
       In such cases:
  
!         * when assertion-checking is enabled: an attacker could trigger
            a denial of service by injecting an assertion failure
  
!         * when assertion-checking is disabled, such as by defining
!           'NDEBUG', an attacker could inject data that subverts the
            process, since it presumably violates a precondition that is
            being assumed by the code.
  
--- 10200,10210 ----
  
       In such cases:
  
!         • when assertion-checking is enabled: an attacker could trigger
            a denial of service by injecting an assertion failure
  
!         • when assertion-checking is disabled, such as by defining
!           ‘NDEBUG’, an attacker could inject data that subverts the
            process, since it presumably violates a precondition that is
            being assumed by the code.
  
*************** File: gcc.info,  Node: Static Analyzer O
*** 10210,10217 ****
       on builds in which assertion-checking is enabled.
  
       For the purpose of this warning, any function marked with attribute
!      'noreturn' is considered as a possible assertion failure handler,
!      including '__builtin_unreachable'.  Note that these functions are
       sometimes removed by the optimizer before the analyzer "sees" them.
       Hence optimization should be disabled when attempting to trigger
       this diagnostic.
--- 10214,10221 ----
       on builds in which assertion-checking is enabled.
  
       For the purpose of this warning, any function marked with attribute
!      ‘noreturn’ is considered as a possible assertion failure handler,
!      including ‘__builtin_unreachable’.  Note that these functions are
       sometimes removed by the optimizer before the analyzer "sees" them.
       Hence optimization should be disabled when attempting to trigger
       this diagnostic.
*************** File: gcc.info,  Node: Static Analyzer O
*** 10233,10241 ****
       despite the above not being an assertion failure, strictly
       speaking.
  
! '-Wno-analyzer-tainted-array-index'
!      This warning requires '-fanalyzer' which enables it; use
!      '-Wno-analyzer-tainted-array-index' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the index of
--- 10237,10245 ----
       despite the above not being an assertion failure, strictly
       speaking.
  
! ‘-Wno-analyzer-tainted-array-index’
!      This warning requires ‘-fanalyzer’ which enables it; use
!      ‘-Wno-analyzer-tainted-array-index’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the index of
*************** File: gcc.info,  Node: Static Analyzer O
*** 10245,10253 ****
       See CWE-129: Improper Validation of Array Index
       (https://cwe.mitre.org/data/definitions/129.html).
  
! '-Wno-analyzer-tainted-divisor'
!      This warning requires '-fanalyzer' which enables it; use
!      '-Wno-analyzer-tainted-divisor' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the divisor in
--- 10249,10257 ----
       See CWE-129: Improper Validation of Array Index
       (https://cwe.mitre.org/data/definitions/129.html).
  
! ‘-Wno-analyzer-tainted-divisor’
!      This warning requires ‘-fanalyzer’ which enables it; use
!      ‘-Wno-analyzer-tainted-divisor’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the divisor in
*************** File: gcc.info,  Node: Static Analyzer O
*** 10257,10265 ****
       See CWE-369: Divide By Zero
       (https://cwe.mitre.org/data/definitions/369.html).
  
! '-Wno-analyzer-tainted-offset'
!      This warning requires '-fanalyzer' which enables it; use
!      '-Wno-analyzer-tainted-offset' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as a pointer
--- 10261,10269 ----
       See CWE-369: Divide By Zero
       (https://cwe.mitre.org/data/definitions/369.html).
  
! ‘-Wno-analyzer-tainted-offset’
!      This warning requires ‘-fanalyzer’ which enables it; use
!      ‘-Wno-analyzer-tainted-offset’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as a pointer
*************** File: gcc.info,  Node: Static Analyzer O
*** 10269,10379 ****
       See CWE-823: Use of Out-of-range Pointer Offset
       (https://cwe.mitre.org/data/definitions/823.html).
  
! '-Wno-analyzer-tainted-size'
!      This warning requires '-fanalyzer' which enables it; use
!      '-Wno-analyzer-tainted-size' to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the size of an
!      operation such as 'memset' without being sanitized, so that an
       attacker could inject an out-of-bounds access.
  
       See CWE-129: Improper Validation of Array Index
       (https://cwe.mitre.org/data/definitions/129.html).
  
! '-Wno-analyzer-undefined-behavior-strtok'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-undefined-behavior-strtok' to disable it.
  
       This diagnostic warns for paths through the code in which a call is
!      made to 'strtok' with undefined behavior.
  
       Specifically, passing NULL as the first parameter for the initial
!      call to 'strtok' within a process has undefined behavior.
  
! '-Wno-analyzer-unsafe-call-within-signal-handler'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-unsafe-call-within-signal-handler' to disable it.
  
       This diagnostic warns for paths through the code in which a
!      function known to be async-signal-unsafe (such as 'fprintf') is
       called from a signal handler.
  
       See CWE-479: Signal Handler Use of a Non-reentrant Function
       (https://cwe.mitre.org/data/definitions/479.html).
  
! '-Wno-analyzer-use-after-free'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-use-after-free' to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      is used after a deallocator is called on it: either 'free', or a
!      deallocator referenced by attribute 'malloc'.
  
       See CWE-416: Use After Free
       (https://cwe.mitre.org/data/definitions/416.html).
  
! '-Wno-analyzer-use-of-pointer-in-stale-stack-frame'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-use-of-pointer-in-stale-stack-frame' to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
       is dereferenced that points to a variable in a stale stack frame.
  
! '-Wno-analyzer-va-arg-type-mismatch'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-va-arg-type-mismatch' to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects an attempt to use 'va_arg' to
       extract a value passed to a variadic call, but uses a type that
       does not match that of the expression passed to the call.
  
       See CWE-686: Function Call With Incorrect Argument Type
       (https://cwe.mitre.org/data/definitions/686.html).
  
! '-Wno-analyzer-va-list-exhausted'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-va-list-exhausted' to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects an attempt to use 'va_arg' to access
       the next value passed to a variadic call, but all of the values in
!      the 'va_list' have already been consumed.
  
       See CWE-685: Function Call With Incorrect Number of Arguments
       (https://cwe.mitre.org/data/definitions/685.html).
  
! '-Wno-analyzer-va-list-leak'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-va-list-leak' to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects that 'va_start' or 'va_copy' has
!      been called on a 'va_list' without a corresponding call to
!      'va_end'.
  
! '-Wno-analyzer-va-list-use-after-va-end'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-va-list-use-after-va-end' to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects an attempt to use a 'va_list' after
!      'va_end' has been called on it.  'va_list'.
  
! '-Wno-analyzer-write-to-const'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-write-to-const' to disable it.
  
       This diagnostic warns for paths through the code in which the
!      analyzer detects an attempt to write through a pointer to a 'const'
       object.  However, the analyzer does not prioritize detection of
       such paths, so false negatives are more likely relative to other
       warnings.
  
! '-Wno-analyzer-write-to-string-literal'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-write-to-string-literal' to disable it.
  
       This diagnostic warns for paths through the code in which the
       analyzer detects an attempt to write through a pointer to a string
--- 10273,10383 ----
       See CWE-823: Use of Out-of-range Pointer Offset
       (https://cwe.mitre.org/data/definitions/823.html).
  
! ‘-Wno-analyzer-tainted-size’
!      This warning requires ‘-fanalyzer’ which enables it; use
!      ‘-Wno-analyzer-tainted-size’ to disable it.
  
       This diagnostic warns for paths through the code in which a value
       that could be under an attacker's control is used as the size of an
!      operation such as ‘memset’ without being sanitized, so that an
       attacker could inject an out-of-bounds access.
  
       See CWE-129: Improper Validation of Array Index
       (https://cwe.mitre.org/data/definitions/129.html).
  
! ‘-Wno-analyzer-undefined-behavior-strtok’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-undefined-behavior-strtok’ to disable it.
  
       This diagnostic warns for paths through the code in which a call is
!      made to ‘strtok’ with undefined behavior.
  
       Specifically, passing NULL as the first parameter for the initial
!      call to ‘strtok’ within a process has undefined behavior.
  
! ‘-Wno-analyzer-unsafe-call-within-signal-handler’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-unsafe-call-within-signal-handler’ to disable it.
  
       This diagnostic warns for paths through the code in which a
!      function known to be async-signal-unsafe (such as ‘fprintf’) is
       called from a signal handler.
  
       See CWE-479: Signal Handler Use of a Non-reentrant Function
       (https://cwe.mitre.org/data/definitions/479.html).
  
! ‘-Wno-analyzer-use-after-free’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-use-after-free’ to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
!      is used after a deallocator is called on it: either ‘free’, or a
!      deallocator referenced by attribute ‘malloc’.
  
       See CWE-416: Use After Free
       (https://cwe.mitre.org/data/definitions/416.html).
  
! ‘-Wno-analyzer-use-of-pointer-in-stale-stack-frame’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-use-of-pointer-in-stale-stack-frame’ to disable it.
  
       This diagnostic warns for paths through the code in which a pointer
       is dereferenced that points to a variable in a stale stack frame.
  
! ‘-Wno-analyzer-va-arg-type-mismatch’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-va-arg-type-mismatch’ to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects an attempt to use ‘va_arg’ to
       extract a value passed to a variadic call, but uses a type that
       does not match that of the expression passed to the call.
  
       See CWE-686: Function Call With Incorrect Argument Type
       (https://cwe.mitre.org/data/definitions/686.html).
  
! ‘-Wno-analyzer-va-list-exhausted’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-va-list-exhausted’ to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects an attempt to use ‘va_arg’ to access
       the next value passed to a variadic call, but all of the values in
!      the ‘va_list’ have already been consumed.
  
       See CWE-685: Function Call With Incorrect Number of Arguments
       (https://cwe.mitre.org/data/definitions/685.html).
  
! ‘-Wno-analyzer-va-list-leak’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-va-list-leak’ to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects that ‘va_start’ or ‘va_copy’ has
!      been called on a ‘va_list’ without a corresponding call to
!      ‘va_end’.
  
! ‘-Wno-analyzer-va-list-use-after-va-end’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-va-list-use-after-va-end’ to disable it.
  
       This diagnostic warns for interprocedural paths through the code
!      for which the analyzer detects an attempt to use a ‘va_list’ after
!      ‘va_end’ has been called on it.  ‘va_list’.
  
! ‘-Wno-analyzer-write-to-const’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-write-to-const’ to disable it.
  
       This diagnostic warns for paths through the code in which the
!      analyzer detects an attempt to write through a pointer to a ‘const’
       object.  However, the analyzer does not prioritize detection of
       such paths, so false negatives are more likely relative to other
       warnings.
  
! ‘-Wno-analyzer-write-to-string-literal’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-write-to-string-literal’ to disable it.
  
       This diagnostic warns for paths through the code in which the
       analyzer detects an attempt to write through a pointer to a string
*************** File: gcc.info,  Node: Static Analyzer O
*** 10381,10389 ****
       such paths, so false negatives are more likely relative to other
       warnings.
  
! '-Wno-analyzer-use-of-uninitialized-value'
!      This warning requires '-fanalyzer', which enables it; use
!      '-Wno-analyzer-use-of-uninitialized-value' to disable it.
  
       This diagnostic warns for paths through the code in which an
       uninitialized value is used.
--- 10385,10393 ----
       such paths, so false negatives are more likely relative to other
       warnings.
  
! ‘-Wno-analyzer-use-of-uninitialized-value’
!      This warning requires ‘-fanalyzer’, which enables it; use
!      ‘-Wno-analyzer-use-of-uninitialized-value’ to disable it.
  
       This diagnostic warns for paths through the code in which an
       uninitialized value is used.
*************** File: gcc.info,  Node: Static Analyzer O
*** 10394,10509 ****
   The analyzer has hardcoded knowledge about the behavior of the
  following memory-management functions:
  
!    * 'alloca'
!    * The built-in functions '__builtin_alloc',
!      '__builtin_alloc_with_align',
!    * '__builtin_calloc', '__builtin_free', '__builtin_malloc',
!      '__builtin_memcpy', '__builtin_memcpy_chk', '__builtin_memset',
!      '__builtin_memset_chk', '__builtin_realloc',
!      '__builtin_stack_restore', and '__builtin_stack_save'
!    * 'calloc'
!    * 'free'
!    * 'malloc'
!    * 'memset'
!    * 'operator delete'
!    * 'operator delete []'
!    * 'operator new'
!    * 'operator new []'
!    * 'realloc'
!    * 'strdup'
!    * 'strndup'
  
  of the following functions for working with file descriptors:
  
!    * 'open'
!    * 'close'
!    * 'creat'
!    * 'dup', 'dup2' and 'dup3'
!    * 'isatty'
!    * 'pipe', and 'pipe2'
!    * 'read'
!    * 'write'
!    * 'socket', 'bind', 'listen', 'accept', and 'connect'
  
! of the following functions for working with '<stdio.h>' streams:
!    * The built-in functions '__builtin_fprintf',
!      '__builtin_fprintf_unlocked', '__builtin_fputc',
!      '__builtin_fputc_unlocked', '__builtin_fputs',
!      '__builtin_fputs_unlocked', '__builtin_fwrite',
!      '__builtin_fwrite_unlocked', '__builtin_printf',
!      '__builtin_printf_unlocked', '__builtin_putc', '__builtin_putchar',
!      '__builtin_putchar_unlocked', '__builtin_putc_unlocked',
!      '__builtin_puts', '__builtin_puts_unlocked', '__builtin_vfprintf',
!      and '__builtin_vprintf'
!    * 'fopen'
!    * 'fclose'
!    * 'ferror'
!    * 'fgets'
!    * 'fgets_unlocked'
!    * 'fileno'
!    * 'fread'
!    * 'getc'
!    * 'getchar'
!    * 'fprintf'
!    * 'printf'
!    * 'fwrite'
  
  and of the following functions:
  
!    * The built-in functions '__builtin_expect',
!      '__builtin_expect_with_probability', '__builtin_strchr',
!      '__builtin_strcpy', '__builtin_strcpy_chk', '__builtin_strlen',
!      '__builtin_va_copy', and '__builtin_va_start'
!    * The GNU extensions 'error' and 'error_at_line'
!    * 'getpass'
!    * 'longjmp'
!    * 'putenv'
!    * 'setjmp'
!    * 'siglongjmp'
!    * 'signal'
!    * 'sigsetjmp'
!    * 'strcat'
!    * 'strchr'
!    * 'strlen'
  
!  In addition, various functions with an '__analyzer_' prefix have
  special meaning to the analyzer, described in the GCC Internals manual.
  
   Pertinent parameters for controlling the exploration are:
!    * '--param analyzer-bb-explosion-factor=VALUE'
!    * '--param analyzer-max-enodes-per-program-point=VALUE'
!    * '--param analyzer-max-recursion-depth=VALUE'
!    * '--param analyzer-min-snodes-for-call-summary=VALUE'
  
   The following options control the analyzer.
  
! '-fanalyzer-call-summaries'
       Simplify interprocedural analysis by computing the effect of
       certain calls, rather than exploring all paths through the function
       from callsite to each possible return.
  
       If enabled, call summaries are only used for functions with more
       than one call site, and that are sufficiently complicated (as per
!      '--param analyzer-min-snodes-for-call-summary=VALUE').
  
! '-fanalyzer-checker=NAME'
       Restrict the analyzer to run just the named checker, and enable it.
  
! '-fanalyzer-debug-text-art-headings'
       This option is intended for analyzer developers.  If enabled, the
       analyzer will add extra annotations to any diagrams it generates.
  
! '-fno-analyzer-feasibility'
       This option is intended for analyzer developers.
  
       By default the analyzer verifies that there is a feasible control
       flow path for each diagnostic it emits: that the conditions that
       hold are not mutually exclusive.  Diagnostics for which no feasible
       path can be found are rejected.  This filtering can be suppressed
!      with '-fno-analyzer-feasibility', for debugging issues in this
       code.
  
! '-fanalyzer-fine-grained'
       This option is intended for analyzer developers.
  
       Internally the analyzer builds an "exploded graph" that combines
--- 10398,10513 ----
   The analyzer has hardcoded knowledge about the behavior of the
  following memory-management functions:
  
!    • ‘alloca’
!    • The built-in functions ‘__builtin_alloc’,
!      ‘__builtin_alloc_with_align’,
!    • ‘__builtin_calloc’, ‘__builtin_free’, ‘__builtin_malloc’,
!      ‘__builtin_memcpy’, ‘__builtin_memcpy_chk’, ‘__builtin_memset’,
!      ‘__builtin_memset_chk’, ‘__builtin_realloc’,
!      ‘__builtin_stack_restore’, and ‘__builtin_stack_save’
!    • ‘calloc’
!    • ‘free’
!    • ‘malloc’
!    • ‘memset’
!    • ‘operator delete’
!    • ‘operator delete []’
!    • ‘operator new’
!    • ‘operator new []’
!    • ‘realloc’
!    • ‘strdup’
!    • ‘strndup’
  
  of the following functions for working with file descriptors:
  
!    • ‘open’
!    • ‘close’
!    • ‘creat’
!    • ‘dup’, ‘dup2’ and ‘dup3’
!    • ‘isatty’
!    • ‘pipe’, and ‘pipe2’
!    • ‘read’
!    • ‘write’
!    • ‘socket’, ‘bind’, ‘listen’, ‘accept’, and ‘connect’
  
! of the following functions for working with ‘<stdio.h>’ streams:
!    • The built-in functions ‘__builtin_fprintf’,
!      ‘__builtin_fprintf_unlocked’, ‘__builtin_fputc’,
!      ‘__builtin_fputc_unlocked’, ‘__builtin_fputs’,
!      ‘__builtin_fputs_unlocked’, ‘__builtin_fwrite’,
!      ‘__builtin_fwrite_unlocked’, ‘__builtin_printf’,
!      ‘__builtin_printf_unlocked’, ‘__builtin_putc’, ‘__builtin_putchar’,
!      ‘__builtin_putchar_unlocked’, ‘__builtin_putc_unlocked’,
!      ‘__builtin_puts’, ‘__builtin_puts_unlocked’, ‘__builtin_vfprintf’,
!      and ‘__builtin_vprintf’
!    • ‘fopen’
!    • ‘fclose’
!    • ‘ferror’
!    • ‘fgets’
!    • ‘fgets_unlocked’
!    • ‘fileno’
!    • ‘fread’
!    • ‘getc’
!    • ‘getchar’
!    • ‘fprintf’
!    • ‘printf’
!    • ‘fwrite’
  
  and of the following functions:
  
!    • The built-in functions ‘__builtin_expect’,
!      ‘__builtin_expect_with_probability’, ‘__builtin_strchr’,
!      ‘__builtin_strcpy’, ‘__builtin_strcpy_chk’, ‘__builtin_strlen’,
!      ‘__builtin_va_copy’, and ‘__builtin_va_start’
!    • The GNU extensions ‘error’ and ‘error_at_line’
!    • ‘getpass’
!    • ‘longjmp’
!    • ‘putenv’
!    • ‘setjmp’
!    • ‘siglongjmp’
!    • ‘signal’
!    • ‘sigsetjmp’
!    • ‘strcat’
!    • ‘strchr’
!    • ‘strlen’
  
!  In addition, various functions with an ‘__analyzer_’ prefix have
  special meaning to the analyzer, described in the GCC Internals manual.
  
   Pertinent parameters for controlling the exploration are:
!    • ‘--param analyzer-bb-explosion-factor=VALUE’
!    • ‘--param analyzer-max-enodes-per-program-point=VALUE’
!    • ‘--param analyzer-max-recursion-depth=VALUE’
!    • ‘--param analyzer-min-snodes-for-call-summary=VALUE’
  
   The following options control the analyzer.
  
! ‘-fanalyzer-call-summaries’
       Simplify interprocedural analysis by computing the effect of
       certain calls, rather than exploring all paths through the function
       from callsite to each possible return.
  
       If enabled, call summaries are only used for functions with more
       than one call site, and that are sufficiently complicated (as per
!      ‘--param analyzer-min-snodes-for-call-summary=VALUE’).
  
! ‘-fanalyzer-checker=NAME’
       Restrict the analyzer to run just the named checker, and enable it.
  
! ‘-fanalyzer-debug-text-art-headings’
       This option is intended for analyzer developers.  If enabled, the
       analyzer will add extra annotations to any diagrams it generates.
  
! ‘-fno-analyzer-feasibility’
       This option is intended for analyzer developers.
  
       By default the analyzer verifies that there is a feasible control
       flow path for each diagnostic it emits: that the conditions that
       hold are not mutually exclusive.  Diagnostics for which no feasible
       path can be found are rejected.  This filtering can be suppressed
!      with ‘-fno-analyzer-feasibility’, for debugging issues in this
       code.
  
! ‘-fanalyzer-fine-grained’
       This option is intended for analyzer developers.
  
       Internally the analyzer builds an "exploded graph" that combines
*************** special meaning to the analyzer, describ
*** 10511,10540 ****
  
       By default, an edge in this graph can contain the effects of a run
       of multiple statements within a basic block.  With
!      '-fanalyzer-fine-grained', each statement gets its own edge.
  
! '-fanalyzer-show-duplicate-count'
       This option is intended for analyzer developers: if multiple
       diagnostics have been detected as being duplicates of each other,
       it emits a note when reporting the best diagnostic, giving the
       number of additional diagnostics that were suppressed by the
       deduplication logic.
  
! '-fanalyzer-show-events-in-system-headers'
       By default the analyzer emits simplified diagnostics paths by
       hiding events fully located within a system header.  With
!      '-fanalyzer-show-events-in-system-headers' such events are no
       longer suppressed.
  
! '-fno-analyzer-state-merge'
       This option is intended for analyzer developers.
  
       By default the analyzer attempts to simplify analysis by merging
       sufficiently similar states at each program point as it builds its
!      "exploded graph".  With '-fno-analyzer-state-merge' this merging
       can be suppressed, for debugging state-handling issues.
  
! '-fno-analyzer-state-purge'
       This option is intended for analyzer developers.
  
       By default the analyzer attempts to simplify analysis by purging
--- 10515,10544 ----
  
       By default, an edge in this graph can contain the effects of a run
       of multiple statements within a basic block.  With
!      ‘-fanalyzer-fine-grained’, each statement gets its own edge.
  
! ‘-fanalyzer-show-duplicate-count’
       This option is intended for analyzer developers: if multiple
       diagnostics have been detected as being duplicates of each other,
       it emits a note when reporting the best diagnostic, giving the
       number of additional diagnostics that were suppressed by the
       deduplication logic.
  
! ‘-fanalyzer-show-events-in-system-headers’
       By default the analyzer emits simplified diagnostics paths by
       hiding events fully located within a system header.  With
!      ‘-fanalyzer-show-events-in-system-headers’ such events are no
       longer suppressed.
  
! ‘-fno-analyzer-state-merge’
       This option is intended for analyzer developers.
  
       By default the analyzer attempts to simplify analysis by merging
       sufficiently similar states at each program point as it builds its
!      "exploded graph".  With ‘-fno-analyzer-state-merge’ this merging
       can be suppressed, for debugging state-handling issues.
  
! ‘-fno-analyzer-state-purge’
       This option is intended for analyzer developers.
  
       By default the analyzer attempts to simplify analysis by purging
*************** special meaning to the analyzer, describ
*** 10542,10551 ****
       relevant e.g.  the values of locals that aren't accessed later in
       the function and which aren't relevant to leak analysis.
  
!      With '-fno-analyzer-state-purge' this purging of state can be
       suppressed, for debugging state-handling issues.
  
! '-fno-analyzer-suppress-followups'
       This option is intended for analyzer developers.
  
       By default the analyzer will stop exploring an execution path after
--- 10546,10555 ----
       relevant e.g.  the values of locals that aren't accessed later in
       the function and which aren't relevant to leak analysis.
  
!      With ‘-fno-analyzer-state-purge’ this purging of state can be
       suppressed, for debugging state-handling issues.
  
! ‘-fno-analyzer-suppress-followups’
       This option is intended for analyzer developers.
  
       By default the analyzer will stop exploring an execution path after
*************** special meaning to the analyzer, describ
*** 10554,10578 ****
  
       The diagnostics that terminate analysis along a path are:
  
!         * '-Wanalyzer-null-argument'
!         * '-Wanalyzer-null-dereference'
!         * '-Wanalyzer-use-after-free'
!         * '-Wanalyzer-use-of-pointer-in-stale-stack-frame'
!         * '-Wanalyzer-use-of-uninitialized-value'
  
!      With '-fno-analyzer-suppress-followups' the analyzer will continue
       to explore such paths even after such diagnostics, which may be
       helpful for debugging issues in the analyzer, or for
       microbenchmarks for detecting undefined behavior.
  
! '-fanalyzer-transitivity'
       This option enables transitivity of constraints within the
       analyzer.
  
! '-fno-analyzer-undo-inlining'
       This option is intended for analyzer developers.
  
!      '-fanalyzer' runs relatively late compared to other code analysis
       tools, and some optimizations have already been applied to the
       code.  In particular function inlining may have occurred, leading
       to the interprocedural execution paths emitted by the analyzer
--- 10558,10582 ----
  
       The diagnostics that terminate analysis along a path are:
  
!         • ‘-Wanalyzer-null-argument’
!         • ‘-Wanalyzer-null-dereference’
!         • ‘-Wanalyzer-use-after-free’
!         • ‘-Wanalyzer-use-of-pointer-in-stale-stack-frame’
!         • ‘-Wanalyzer-use-of-uninitialized-value’
  
!      With ‘-fno-analyzer-suppress-followups’ the analyzer will continue
       to explore such paths even after such diagnostics, which may be
       helpful for debugging issues in the analyzer, or for
       microbenchmarks for detecting undefined behavior.
  
! ‘-fanalyzer-transitivity’
       This option enables transitivity of constraints within the
       analyzer.
  
! ‘-fno-analyzer-undo-inlining’
       This option is intended for analyzer developers.
  
!      ‘-fanalyzer’ runs relatively late compared to other code analysis
       tools, and some optimizations have already been applied to the
       code.  In particular function inlining may have occurred, leading
       to the interprocedural execution paths emitted by the analyzer
*************** special meaning to the analyzer, describ
*** 10582,10697 ****
       By default the analyzer attempts to reconstruct the original
       function frames, and to emit events showing the inlined calls.
  
!      With '-fno-analyzer-undo-inlining' this attempt to reconstruct the
       original frame information can be disabled, which may be of help
       when debugging issues in the analyzer.
  
! '-fanalyzer-verbose-edges'
       This option is intended for analyzer developers.  It enables more
       verbose, lower-level detail in the descriptions of control flow
       within diagnostic paths.
  
! '-fanalyzer-verbose-state-changes'
       This option is intended for analyzer developers.  It enables more
       verbose, lower-level detail in the descriptions of events relating
       to state machines within diagnostic paths.
  
! '-fanalyzer-verbosity=LEVEL'
       This option controls the complexity of the control flow paths that
       are emitted for analyzer diagnostics.
  
       The LEVEL can be one of:
  
!      '0'
            At this level, interprocedural call and return events are
            displayed, along with the most pertinent state-change events
!           relating to a diagnostic.  For example, for a double-'free'
!           diagnostic, both calls to 'free' will be shown.
  
!      '1'
            As per the previous level, but also show events for the entry
            to each function.
  
!      '2'
            As per the previous level, but also show events relating to
            control flow that are significant to triggering the issue
            (e.g.  "true path taken" at a conditional).
  
            This level is the default.
  
!      '3'
            As per the previous level, but show all control flow events,
            not just significant ones.
  
!      '4'
            This level is intended for analyzer developers; it adds
            various other events intended for debugging the analyzer.
  
! '-fdump-analyzer'
       Dump internal details about what the analyzer is doing to
!      'FILE.analyzer.txt'.  '-fdump-analyzer-stderr' overrides this
       option.
  
! '-fdump-analyzer-stderr'
       Dump internal details about what the analyzer is doing to stderr.
!      This option overrides '-fdump-analyzer'.
  
! '-fdump-analyzer-callgraph'
       Dump a representation of the call graph suitable for viewing with
!      GraphViz to 'FILE.callgraph.dot'.
  
! '-fdump-analyzer-exploded-graph'
       Dump a representation of the "exploded graph" suitable for viewing
!      with GraphViz to 'FILE.eg.dot'.  Nodes are color-coded based on
       state-machine states to emphasize state changes.
  
! '-fdump-analyzer-exploded-nodes'
       Emit diagnostics showing where nodes in the "exploded graph" are in
       relation to the program source.
  
! '-fdump-analyzer-exploded-nodes-2'
       Dump a textual representation of the "exploded graph" to
!      'FILE.eg.txt'.
  
! '-fdump-analyzer-exploded-nodes-3'
       Dump a textual representation of the "exploded graph" to one dump
!      file per node, to 'FILE.eg-ID.txt'.  This is typically a large
       number of dump files.
  
! '-fdump-analyzer-exploded-paths'
       Dump a textual representation of the "exploded path" for each
!      diagnostic to 'FILE.IDX.KIND.epath.txt'.
  
! '-fdump-analyzer-feasibility'
       Dump internal details about the analyzer's search for feasible
       paths.  The details are written in a form suitable for viewing with
!      GraphViz to filenames of the form 'FILE.*.fg.dot', 'FILE.*.tg.dot',
!      and 'FILE.*.fpath.txt'.
  
! '-fdump-analyzer-infinite-loop'
       Dump internal details about the analyzer's search for infinite
       loops.  The details are written in a form suitable for viewing with
!      GraphViz to filenames of the form 'FILE.*.infinite-loop.dot'.
  
! '-fdump-analyzer-json'
       Dump a compressed JSON representation of analyzer internals to
!      'FILE.analyzer.json.gz'.  The precise format is subject to change.
  
! '-fdump-analyzer-state-purge'
!      As per '-fdump-analyzer-supergraph', dump a representation of the
       "supergraph" suitable for viewing with GraphViz, but annotate the
       graph with information on what state will be purged at each node.
!      The graph is written to 'FILE.state-purge.dot'.
  
! '-fdump-analyzer-supergraph'
       Dump representations of the "supergraph" suitable for viewing with
!      GraphViz to 'FILE.supergraph.dot' and to 'FILE.supergraph-eg.dot'.
       These show all of the control flow graphs in the program, with
       interprocedural edges for calls and returns.  The second dump
       contains annotations showing nodes in the "exploded graph" and
       diagnostics associated with them.
  
! '-fdump-analyzer-untracked'
       Emit custom warnings with internal details intended for analyzer
       developers.
  
--- 10586,10701 ----
       By default the analyzer attempts to reconstruct the original
       function frames, and to emit events showing the inlined calls.
  
!      With ‘-fno-analyzer-undo-inlining’ this attempt to reconstruct the
       original frame information can be disabled, which may be of help
       when debugging issues in the analyzer.
  
! ‘-fanalyzer-verbose-edges’
       This option is intended for analyzer developers.  It enables more
       verbose, lower-level detail in the descriptions of control flow
       within diagnostic paths.
  
! ‘-fanalyzer-verbose-state-changes’
       This option is intended for analyzer developers.  It enables more
       verbose, lower-level detail in the descriptions of events relating
       to state machines within diagnostic paths.
  
! ‘-fanalyzer-verbosity=LEVEL’
       This option controls the complexity of the control flow paths that
       are emitted for analyzer diagnostics.
  
       The LEVEL can be one of:
  
!      ‘0’
            At this level, interprocedural call and return events are
            displayed, along with the most pertinent state-change events
!           relating to a diagnostic.  For example, for a double-‘free’
!           diagnostic, both calls to ‘free’ will be shown.
  
!      ‘1’
            As per the previous level, but also show events for the entry
            to each function.
  
!      ‘2’
            As per the previous level, but also show events relating to
            control flow that are significant to triggering the issue
            (e.g.  "true path taken" at a conditional).
  
            This level is the default.
  
!      ‘3’
            As per the previous level, but show all control flow events,
            not just significant ones.
  
!      ‘4’
            This level is intended for analyzer developers; it adds
            various other events intended for debugging the analyzer.
  
! ‘-fdump-analyzer’
       Dump internal details about what the analyzer is doing to
!      ‘FILE.analyzer.txt’.  ‘-fdump-analyzer-stderr’ overrides this
       option.
  
! ‘-fdump-analyzer-stderr’
       Dump internal details about what the analyzer is doing to stderr.
!      This option overrides ‘-fdump-analyzer’.
  
! ‘-fdump-analyzer-callgraph’
       Dump a representation of the call graph suitable for viewing with
!      GraphViz to ‘FILE.callgraph.dot’.
  
! ‘-fdump-analyzer-exploded-graph’
       Dump a representation of the "exploded graph" suitable for viewing
!      with GraphViz to ‘FILE.eg.dot’.  Nodes are color-coded based on
       state-machine states to emphasize state changes.
  
! ‘-fdump-analyzer-exploded-nodes’
       Emit diagnostics showing where nodes in the "exploded graph" are in
       relation to the program source.
  
! ‘-fdump-analyzer-exploded-nodes-2’
       Dump a textual representation of the "exploded graph" to
!      ‘FILE.eg.txt’.
  
! ‘-fdump-analyzer-exploded-nodes-3’
       Dump a textual representation of the "exploded graph" to one dump
!      file per node, to ‘FILE.eg-ID.txt’.  This is typically a large
       number of dump files.
  
! ‘-fdump-analyzer-exploded-paths’
       Dump a textual representation of the "exploded path" for each
!      diagnostic to ‘FILE.IDX.KIND.epath.txt’.
  
! ‘-fdump-analyzer-feasibility’
       Dump internal details about the analyzer's search for feasible
       paths.  The details are written in a form suitable for viewing with
!      GraphViz to filenames of the form ‘FILE.*.fg.dot’, ‘FILE.*.tg.dot’,
!      and ‘FILE.*.fpath.txt’.
  
! ‘-fdump-analyzer-infinite-loop’
       Dump internal details about the analyzer's search for infinite
       loops.  The details are written in a form suitable for viewing with
!      GraphViz to filenames of the form ‘FILE.*.infinite-loop.dot’.
  
! ‘-fdump-analyzer-json’
       Dump a compressed JSON representation of analyzer internals to
!      ‘FILE.analyzer.json.gz’.  The precise format is subject to change.
  
! ‘-fdump-analyzer-state-purge’
!      As per ‘-fdump-analyzer-supergraph’, dump a representation of the
       "supergraph" suitable for viewing with GraphViz, but annotate the
       graph with information on what state will be purged at each node.
!      The graph is written to ‘FILE.state-purge.dot’.
  
! ‘-fdump-analyzer-supergraph’
       Dump representations of the "supergraph" suitable for viewing with
!      GraphViz to ‘FILE.supergraph.dot’ and to ‘FILE.supergraph-eg.dot’.
       These show all of the control flow graphs in the program, with
       interprocedural edges for calls and returns.  The second dump
       contains annotations showing nodes in the "exploded graph" and
       diagnostics associated with them.
  
! ‘-fdump-analyzer-untracked’
       Emit custom warnings with internal details intended for analyzer
       developers.
  
*************** File: gcc.info,  Node: Debugging Options
*** 10702,10713 ****
  =======================================
  
  To tell GCC to emit extra information for use by a debugger, in almost
! all cases you need only to add '-g' to your other options.  Some debug
  formats can co-exist (like DWARF with CTF) when each of them is enabled
  explicitly by adding the respective command line option to your other
  options.
  
!  GCC allows you to use '-g' with '-O'.  The shortcuts taken by optimized
  code may occasionally be surprising: some variables you declared may not
  exist at all; flow of control may briefly move where you did not expect
  it; some statements may not be executed because they compute constant
--- 10706,10717 ----
  =======================================
  
  To tell GCC to emit extra information for use by a debugger, in almost
! all cases you need only to add ‘-g’ to your other options.  Some debug
  formats can co-exist (like DWARF with CTF) when each of them is enabled
  explicitly by adding the respective command line option to your other
  options.
  
!  GCC allows you to use ‘-g’ with ‘-O’.  The shortcuts taken by optimized
  code may occasionally be surprising: some variables you declared may not
  exist at all; flow of control may briefly move where you did not expect
  it; some statements may not be executed because they compute constant
*************** Nevertheless it is possible to debug opt
*** 10717,10747 ****
  reasonable to use the optimizer for programs that might have bugs.
  
   If you are not using some other optimization option, consider using
! '-Og' (*note Optimize Options::) with '-g'.  With no '-O' option at all,
  some compiler passes that collect information useful for debugging do
! not run at all, so that '-Og' may result in a better debugging
  experience.
  
! '-g'
       Produce debugging information in the operating system's native
       format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
       debugging information.
  
!      On most systems that use stabs format, '-g' enables use of extra
       debugging information that only GDB can use; this extra information
       makes debugging work better in GDB but probably makes other
       debuggers crash or refuse to read the program.  If you want to
       control for certain whether to generate the extra information, use
!      '-gvms' (see below).
  
! '-ggdb'
       Produce debugging information for use by GDB.  This means to use
       the most expressive format available (DWARF, stabs, or the native
       format if neither of those are supported), including GDB extensions
       if at all possible.
  
! '-gdwarf'
! '-gdwarf-VERSION'
       Produce debugging information in DWARF format (if that is
       supported).  The value of VERSION may be either 2, 3, 4 or 5; the
       default version for most targets is 5 (with the exception of
--- 10721,10751 ----
  reasonable to use the optimizer for programs that might have bugs.
  
   If you are not using some other optimization option, consider using
! ‘-Og’ (*note Optimize Options::) with ‘-g’.  With no ‘-O’ option at all,
  some compiler passes that collect information useful for debugging do
! not run at all, so that ‘-Og’ may result in a better debugging
  experience.
  
! ‘-g’
       Produce debugging information in the operating system's native
       format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
       debugging information.
  
!      On most systems that use stabs format, ‘-g’ enables use of extra
       debugging information that only GDB can use; this extra information
       makes debugging work better in GDB but probably makes other
       debuggers crash or refuse to read the program.  If you want to
       control for certain whether to generate the extra information, use
!      ‘-gvms’ (see below).
  
! ‘-ggdb’
       Produce debugging information for use by GDB.  This means to use
       the most expressive format available (DWARF, stabs, or the native
       format if neither of those are supported), including GDB extensions
       if at all possible.
  
! ‘-gdwarf’
! ‘-gdwarf-VERSION’
       Produce debugging information in DWARF format (if that is
       supported).  The value of VERSION may be either 2, 3, 4 or 5; the
       default version for most targets is 5 (with the exception of
*************** experience.
*** 10751,10776 ****
       Note that with DWARF Version 2, some ports require and always use
       some non-conflicting DWARF 3 extensions in the unwind tables.
  
!      Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
       maximum benefit.  Version 5 requires GDB 8.0 or higher.
  
       GCC no longer supports DWARF Version 1, which is substantially
       different than Version 2 and later.  For historical reasons, some
!      other DWARF-related options such as '-fno-dwarf2-cfi-asm') retain a
       reference to DWARF Version 2 in their names, but apply to all
       currently-supported versions of DWARF.
  
! '-gbtf'
       Request BTF debug information.  BTF is the default debugging format
       for the eBPF target.  On other targets, like x86, BTF debug
       information can be generated along with DWARF debug information
       when both of the debug formats are enabled explicitly via their
       respective command line options.
  
! '-gctf'
! '-gctfLEVEL'
       Request CTF debug information and use level to specify how much CTF
!      debug information should be produced.  If '-gctf' is specified
       without a value for level, the default level of CTF debug
       information is 2.
  
--- 10755,10780 ----
       Note that with DWARF Version 2, some ports require and always use
       some non-conflicting DWARF 3 extensions in the unwind tables.
  
!      Version 4 may require GDB 7.0 and ‘-fvar-tracking-assignments’ for
       maximum benefit.  Version 5 requires GDB 8.0 or higher.
  
       GCC no longer supports DWARF Version 1, which is substantially
       different than Version 2 and later.  For historical reasons, some
!      other DWARF-related options such as ‘-fno-dwarf2-cfi-asm’) retain a
       reference to DWARF Version 2 in their names, but apply to all
       currently-supported versions of DWARF.
  
! ‘-gbtf’
       Request BTF debug information.  BTF is the default debugging format
       for the eBPF target.  On other targets, like x86, BTF debug
       information can be generated along with DWARF debug information
       when both of the debug formats are enabled explicitly via their
       respective command line options.
  
! ‘-gctf’
! ‘-gctfLEVEL’
       Request CTF debug information and use level to specify how much CTF
!      debug information should be produced.  If ‘-gctf’ is specified
       without a value for level, the default level of CTF debug
       information is 2.
  
*************** experience.
*** 10778,10785 ****
       information when both of the debug formats are enabled explicitly
       via their respective command line options.
  
!      Level 0 produces no CTF debug information at all.  Thus, '-gctf0'
!      negates '-gctf'.
  
       Level 1 produces CTF information for tracebacks only.  This
       includes callsite information, but does not include type
--- 10782,10789 ----
       information when both of the debug formats are enabled explicitly
       via their respective command line options.
  
!      Level 0 produces no CTF debug information at all.  Thus, ‘-gctf0’
!      negates ‘-gctf’.
  
       Level 1 produces CTF information for tracebacks only.  This
       includes callsite information, but does not include type
*************** experience.
*** 10788,10810 ****
       Level 2 produces type information for entities (functions, data
       objects etc.)  at file-scope or global-scope only.
  
! '-gvms'
       Produce debugging information in Alpha/VMS debug format (if that is
       supported).  This is the format used by DEBUG on Alpha/VMS systems.
  
! '-gcodeview'
       Produce debugging information in CodeView debug format (if that is
       supported).  This is the format used by Microsoft Visual C++ on
       Windows.
  
! '-gLEVEL'
! '-ggdbLEVEL'
! '-gvmsLEVEL'
       Request debugging information and also use LEVEL to specify how
       much information.  The default level is 2.
  
!      Level 0 produces no debug information at all.  Thus, '-g0' negates
!      '-g'.
  
       Level 1 produces minimal information, enough for making backtraces
       in parts of the program that you don't plan to debug.  This
--- 10792,10814 ----
       Level 2 produces type information for entities (functions, data
       objects etc.)  at file-scope or global-scope only.
  
! ‘-gvms’
       Produce debugging information in Alpha/VMS debug format (if that is
       supported).  This is the format used by DEBUG on Alpha/VMS systems.
  
! ‘-gcodeview’
       Produce debugging information in CodeView debug format (if that is
       supported).  This is the format used by Microsoft Visual C++ on
       Windows.
  
! ‘-gLEVEL’
! ‘-ggdbLEVEL’
! ‘-gvmsLEVEL’
       Request debugging information and also use LEVEL to specify how
       much information.  The default level is 2.
  
!      Level 0 produces no debug information at all.  Thus, ‘-g0’ negates
!      ‘-g’.
  
       Level 1 produces minimal information, enough for making backtraces
       in parts of the program that you don't plan to debug.  This
*************** experience.
*** 10813,10833 ****
  
       Level 3 includes extra information, such as all the macro
       definitions present in the program.  Some debuggers support macro
!      expansion when you use '-g3'.
  
!      If you use multiple '-g' options, with or without level numbers,
       the last such option is the one that is effective.
  
!      '-gdwarf' does not accept a concatenated debug level, to avoid
!      confusion with '-gdwarf-LEVEL'.  Instead use an additional
!      '-gLEVEL' option to change the debug level for DWARF.
  
! '-fno-eliminate-unused-debug-symbols'
       By default, no debug information is produced for symbols that are
       not actually used.  Use this option if you want debug information
       for all symbols.
  
! '-femit-class-debug-always'
       Instead of emitting debugging information for a C++ class in only
       one object file, emit it in all object files using the class.  This
       option should be used only with debuggers that are unable to handle
--- 10817,10837 ----
  
       Level 3 includes extra information, such as all the macro
       definitions present in the program.  Some debuggers support macro
!      expansion when you use ‘-g3’.
  
!      If you use multiple ‘-g’ options, with or without level numbers,
       the last such option is the one that is effective.
  
!      ‘-gdwarf’ does not accept a concatenated debug level, to avoid
!      confusion with ‘-gdwarf-LEVEL’.  Instead use an additional
!      ‘-gLEVEL’ option to change the debug level for DWARF.
  
! ‘-fno-eliminate-unused-debug-symbols’
       By default, no debug information is produced for symbols that are
       not actually used.  Use this option if you want debug information
       for all symbols.
  
! ‘-femit-class-debug-always’
       Instead of emitting debugging information for a C++ class in only
       one object file, emit it in all object files using the class.  This
       option should be used only with debuggers that are unable to handle
*************** experience.
*** 10835,10941 ****
       because using this option increases the size of debugging
       information by as much as a factor of two.
  
! '-fno-merge-debug-strings'
       Direct the linker to not merge together strings in the debugging
       information that are identical in different object files.  Merging
       is not supported by all assemblers or linkers.  Merging decreases
       the size of the debug information in the output file at the cost of
       increasing link processing time.  Merging is enabled by default.
  
! '-fdebug-prefix-map=OLD=NEW'
!      When compiling files residing in directory 'OLD', record debugging
       information describing them as if the files resided in directory
!      'NEW' instead.  This can be used to replace a build-time path with
       an install-time path in the debug info.  It can also be used to
!      change an absolute path to a relative path by using '.' for NEW.
       This can give more reproducible builds, which are location
       independent, but may require an extra command to tell GDB where to
!      find the source files.  See also '-ffile-prefix-map' and
!      '-fcanon-prefix-map'.
  
! '-fvar-tracking'
       Run variable tracking pass.  It computes where variables are stored
       at each position in code.  Better debugging information is then
       generated (if the debugging information format supports this
       information).
  
!      It is enabled by default when compiling with optimization ('-Os',
!      '-O', '-O2', ...), debugging information ('-g') and the debug info
       format supports it.
  
! '-fvar-tracking-assignments'
       Annotate assignments to user variables early in the compilation and
       attempt to carry the annotations over throughout the compilation
       all the way to the end, in an attempt to improve debug information
!      while optimizing.  Use of '-gdwarf-4' is recommended along with it.
  
       It can be enabled even if var-tracking is disabled, in which case
       annotations are created and maintained, but discarded at the end.
!      By default, this flag is enabled together with '-fvar-tracking',
       except when selective scheduling is enabled.
  
! '-gsplit-dwarf'
       If DWARF debugging information is enabled, separate as much
       debugging information as possible into a separate output file with
!      the extension '.dwo'.  This option allows the build system to avoid
       linking files with debug information.  To be useful, this option
!      requires a debugger capable of reading '.dwo' files.
  
! '-gdwarf32'
! '-gdwarf64'
!      If DWARF debugging information is enabled, the '-gdwarf32' selects
!      the 32-bit DWARF format and the '-gdwarf64' selects the 64-bit
       DWARF format.  The default is target specific, on most targets it
!      is '-gdwarf32' though.  The 32-bit DWARF format is smaller, but
       can't support more than 2GiB of debug information in any of the
       DWARF debug information sections.  The 64-bit DWARF format allows
       larger debug information and might not be well supported by all
       consumers yet.
  
! '-gdescribe-dies'
       Add description attributes to some DWARF DIEs that have no name
       attribute, such as artificial variables, external references and
       call site parameter DIEs.
  
! '-gpubnames'
!      Generate DWARF '.debug_pubnames' and '.debug_pubtypes' sections.
  
! '-ggnu-pubnames'
!      Generate '.debug_pubnames' and '.debug_pubtypes' sections in a
       format suitable for conversion into a GDB index.  This option is
       only useful with a linker that can produce GDB index version 7.
  
! '-fdebug-types-section'
       When using DWARF Version 4 or higher, type DIEs can be put into
!      their own '.debug_types' section instead of making them part of the
!      '.debug_info' section.  It is more efficient to put them in a
       separate comdat section since the linker can then remove
!      duplicates.  But not all DWARF consumers support '.debug_types'
!      sections yet and on some objects '.debug_types' produces larger
       instead of smaller debugging information.
  
! '-grecord-gcc-switches'
! '-gno-record-gcc-switches'
       This switch causes the command-line options used to invoke the
       compiler that may affect code generation to be appended to the
       DW_AT_producer attribute in DWARF debugging information.  The
       options are concatenated with spaces separating them from each
       other and from the compiler version.  It is enabled by default.
!      See also '-frecord-gcc-switches' for another way of storing
       compiler options into the object file.
  
! '-gstrict-dwarf'
       Disallow using extensions of later DWARF standard version than
!      selected with '-gdwarf-VERSION'.  On most targets using
       non-conflicting DWARF extensions from later standard versions is
       allowed.
  
! '-gno-strict-dwarf'
       Allow using extensions of later DWARF standard version than
!      selected with '-gdwarf-VERSION'.
  
! '-gas-loc-support'
!      Inform the compiler that the assembler supports '.loc' directives.
       It may then use them for the assembler to generate DWARF2+ line
       number tables.
  
--- 10839,10945 ----
       because using this option increases the size of debugging
       information by as much as a factor of two.
  
! ‘-fno-merge-debug-strings’
       Direct the linker to not merge together strings in the debugging
       information that are identical in different object files.  Merging
       is not supported by all assemblers or linkers.  Merging decreases
       the size of the debug information in the output file at the cost of
       increasing link processing time.  Merging is enabled by default.
  
! ‘-fdebug-prefix-map=OLD=NEW’
!      When compiling files residing in directory ‘OLD’, record debugging
       information describing them as if the files resided in directory
!      ‘NEW’ instead.  This can be used to replace a build-time path with
       an install-time path in the debug info.  It can also be used to
!      change an absolute path to a relative path by using ‘.’ for NEW.
       This can give more reproducible builds, which are location
       independent, but may require an extra command to tell GDB where to
!      find the source files.  See also ‘-ffile-prefix-map’ and
!      ‘-fcanon-prefix-map’.
  
! ‘-fvar-tracking’
       Run variable tracking pass.  It computes where variables are stored
       at each position in code.  Better debugging information is then
       generated (if the debugging information format supports this
       information).
  
!      It is enabled by default when compiling with optimization (‘-Os’,
!      ‘-O’, ‘-O2’, ...), debugging information (‘-g’) and the debug info
       format supports it.
  
! ‘-fvar-tracking-assignments’
       Annotate assignments to user variables early in the compilation and
       attempt to carry the annotations over throughout the compilation
       all the way to the end, in an attempt to improve debug information
!      while optimizing.  Use of ‘-gdwarf-4’ is recommended along with it.
  
       It can be enabled even if var-tracking is disabled, in which case
       annotations are created and maintained, but discarded at the end.
!      By default, this flag is enabled together with ‘-fvar-tracking’,
       except when selective scheduling is enabled.
  
! ‘-gsplit-dwarf’
       If DWARF debugging information is enabled, separate as much
       debugging information as possible into a separate output file with
!      the extension ‘.dwo’.  This option allows the build system to avoid
       linking files with debug information.  To be useful, this option
!      requires a debugger capable of reading ‘.dwo’ files.
  
! ‘-gdwarf32’
! ‘-gdwarf64’
!      If DWARF debugging information is enabled, the ‘-gdwarf32’ selects
!      the 32-bit DWARF format and the ‘-gdwarf64’ selects the 64-bit
       DWARF format.  The default is target specific, on most targets it
!      is ‘-gdwarf32’ though.  The 32-bit DWARF format is smaller, but
       can't support more than 2GiB of debug information in any of the
       DWARF debug information sections.  The 64-bit DWARF format allows
       larger debug information and might not be well supported by all
       consumers yet.
  
! ‘-gdescribe-dies’
       Add description attributes to some DWARF DIEs that have no name
       attribute, such as artificial variables, external references and
       call site parameter DIEs.
  
! ‘-gpubnames’
!      Generate DWARF ‘.debug_pubnames’ and ‘.debug_pubtypes’ sections.
  
! ‘-ggnu-pubnames’
!      Generate ‘.debug_pubnames’ and ‘.debug_pubtypes’ sections in a
       format suitable for conversion into a GDB index.  This option is
       only useful with a linker that can produce GDB index version 7.
  
! ‘-fdebug-types-section’
       When using DWARF Version 4 or higher, type DIEs can be put into
!      their own ‘.debug_types’ section instead of making them part of the
!      ‘.debug_info’ section.  It is more efficient to put them in a
       separate comdat section since the linker can then remove
!      duplicates.  But not all DWARF consumers support ‘.debug_types’
!      sections yet and on some objects ‘.debug_types’ produces larger
       instead of smaller debugging information.
  
! ‘-grecord-gcc-switches’
! ‘-gno-record-gcc-switches’
       This switch causes the command-line options used to invoke the
       compiler that may affect code generation to be appended to the
       DW_AT_producer attribute in DWARF debugging information.  The
       options are concatenated with spaces separating them from each
       other and from the compiler version.  It is enabled by default.
!      See also ‘-frecord-gcc-switches’ for another way of storing
       compiler options into the object file.
  
! ‘-gstrict-dwarf’
       Disallow using extensions of later DWARF standard version than
!      selected with ‘-gdwarf-VERSION’.  On most targets using
       non-conflicting DWARF extensions from later standard versions is
       allowed.
  
! ‘-gno-strict-dwarf’
       Allow using extensions of later DWARF standard version than
!      selected with ‘-gdwarf-VERSION’.
  
! ‘-gas-loc-support’
!      Inform the compiler that the assembler supports ‘.loc’ directives.
       It may then use them for the assembler to generate DWARF2+ line
       number tables.
  
*************** experience.
*** 10946,10984 ****
       This option will be enabled by default if, at GCC configure time,
       the assembler was found to support such directives.
  
! '-gno-as-loc-support'
       Force GCC to generate DWARF2+ line number tables internally, if
       DWARF2+ line number tables are to be generated.
  
! '-gas-locview-support'
!      Inform the compiler that the assembler supports 'view' assignment
!      and reset assertion checking in '.loc' directives.
  
       This option will be enabled by default if, at GCC configure time,
       the assembler was found to support them.
  
! '-gno-as-locview-support'
       Force GCC to assign view numbers internally, if
!      '-gvariable-location-views' are explicitly requested.
  
! '-gcolumn-info'
! '-gno-column-info'
       Emit location column information into DWARF debugging information,
       rather than just file and line.  This option is enabled by default.
  
! '-gstatement-frontiers'
! '-gno-statement-frontiers'
       This option causes GCC to create markers in the internal
       representation at the beginning of statements, and to keep them
       roughly in place throughout compilation, using them to guide the
!      output of 'is_stmt' markers in the line number table.  This is
!      enabled by default when compiling with optimization ('-Os', '-O1',
!      '-O2', ...), and outputting DWARF 2 debug information at the normal
       level.
  
! '-gvariable-location-views'
! '-gvariable-location-views=incompat5'
! '-gno-variable-location-views'
       Augment variable location lists with progressive view numbers
       implied from the line number table.  This enables debug information
       consumers to inspect state at certain points of the program, even
--- 10950,10988 ----
       This option will be enabled by default if, at GCC configure time,
       the assembler was found to support such directives.
  
! ‘-gno-as-loc-support’
       Force GCC to generate DWARF2+ line number tables internally, if
       DWARF2+ line number tables are to be generated.
  
! ‘-gas-locview-support’
!      Inform the compiler that the assembler supports ‘view’ assignment
!      and reset assertion checking in ‘.loc’ directives.
  
       This option will be enabled by default if, at GCC configure time,
       the assembler was found to support them.
  
! ‘-gno-as-locview-support’
       Force GCC to assign view numbers internally, if
!      ‘-gvariable-location-views’ are explicitly requested.
  
! ‘-gcolumn-info’
! ‘-gno-column-info’
       Emit location column information into DWARF debugging information,
       rather than just file and line.  This option is enabled by default.
  
! ‘-gstatement-frontiers’
! ‘-gno-statement-frontiers’
       This option causes GCC to create markers in the internal
       representation at the beginning of statements, and to keep them
       roughly in place throughout compilation, using them to guide the
!      output of ‘is_stmt’ markers in the line number table.  This is
!      enabled by default when compiling with optimization (‘-Os’, ‘-O1’,
!      ‘-O2’, ...), and outputting DWARF 2 debug information at the normal
       level.
  
! ‘-gvariable-location-views’
! ‘-gvariable-location-views=incompat5’
! ‘-gno-variable-location-views’
       Augment variable location lists with progressive view numbers
       implied from the line number table.  This enables debug information
       consumers to inspect state at certain points of the program, even
*************** experience.
*** 10993,11027 ****
  
       This is enabled by default when outputting DWARF 2 debug
       information at the normal level, as long as there is assembler
!      support, '-fvar-tracking-assignments' is enabled and
!      '-gstrict-dwarf' is not.  When assembler support is not available,
       this may still be enabled, but it will force GCC to output internal
!      line number tables, and if '-ginternal-reset-location-views' is not
       enabled, that will most certainly lead to silently mismatching
       location views.
  
       There is a proposed representation for view numbers that is not
       backward compatible with the location list format introduced in
       DWARF 5, that can be enabled with
!      '-gvariable-location-views=incompat5'.  This option may be removed
       in the future, is only provided as a reference implementation of
       the proposed representation.  Debug information consumers are not
       expected to support this extended format, and they would be
       rendered unable to decode location lists using it.
  
! '-ginternal-reset-location-views'
! '-gno-internal-reset-location-views'
       Attempt to determine location views that can be omitted from
       location view lists.  This requires the compiler to have very
       accurate insn length estimates, which isn't always the case, and it
       may cause incorrect view lists to be generated silently when using
       an assembler that does not support location view lists.  The GNU
!      assembler will flag any such error as a 'view number mismatch'.
       This is only enabled on ports that define a reliable estimation
       function.
  
! '-ginline-points'
! '-gno-inline-points'
       Generate extended debug information for inlined functions.
       Location view tracking markers are inserted at inlined entry
       points, so that address and view numbers can be computed and output
--- 10997,11031 ----
  
       This is enabled by default when outputting DWARF 2 debug
       information at the normal level, as long as there is assembler
!      support, ‘-fvar-tracking-assignments’ is enabled and
!      ‘-gstrict-dwarf’ is not.  When assembler support is not available,
       this may still be enabled, but it will force GCC to output internal
!      line number tables, and if ‘-ginternal-reset-location-views’ is not
       enabled, that will most certainly lead to silently mismatching
       location views.
  
       There is a proposed representation for view numbers that is not
       backward compatible with the location list format introduced in
       DWARF 5, that can be enabled with
!      ‘-gvariable-location-views=incompat5’.  This option may be removed
       in the future, is only provided as a reference implementation of
       the proposed representation.  Debug information consumers are not
       expected to support this extended format, and they would be
       rendered unable to decode location lists using it.
  
! ‘-ginternal-reset-location-views’
! ‘-gno-internal-reset-location-views’
       Attempt to determine location views that can be omitted from
       location view lists.  This requires the compiler to have very
       accurate insn length estimates, which isn't always the case, and it
       may cause incorrect view lists to be generated silently when using
       an assembler that does not support location view lists.  The GNU
!      assembler will flag any such error as a ‘view number mismatch’.
       This is only enabled on ports that define a reliable estimation
       function.
  
! ‘-ginline-points’
! ‘-gno-inline-points’
       Generate extended debug information for inlined functions.
       Location view tracking markers are inserted at inlined entry
       points, so that address and view numbers can be computed and output
*************** experience.
*** 11030,11059 ****
       it can only be enabled along with statement frontiers, and it is
       only enabled by default if location views are enabled.
  
! '-gz[=TYPE]'
       Produce compressed debug sections in DWARF format, if that is
       supported.  If TYPE is not given, the default type depends on the
       capabilities of the assembler and linker used.  TYPE may be one of
!      'none' (don't compress debug sections), or 'zlib' (use zlib
       compression in ELF gABI format).  If the linker doesn't support
       writing compressed debug sections, the option is rejected.
!      Otherwise, if the assembler does not support them, '-gz' is
       silently ignored when producing object files.
  
! '-femit-struct-debug-baseonly'
       Emit debug information for struct-like types only when the base
       name of the compilation source file matches the base name of file
       in which the struct is defined.
  
       This option substantially reduces the size of debugging
       information, but at significant potential loss in type information
!      to the debugger.  See '-femit-struct-debug-reduced' for a less
!      aggressive option.  See '-femit-struct-debug-detailed' for more
       detailed control.
  
       This option works only with DWARF debug output.
  
! '-femit-struct-debug-reduced'
       Emit debug information for struct-like types only when the base
       name of the compilation source file matches the base name of file
       in which the type is defined, unless the struct is a template or
--- 11034,11063 ----
       it can only be enabled along with statement frontiers, and it is
       only enabled by default if location views are enabled.
  
! ‘-gz[=TYPE]’
       Produce compressed debug sections in DWARF format, if that is
       supported.  If TYPE is not given, the default type depends on the
       capabilities of the assembler and linker used.  TYPE may be one of
!      ‘none’ (don't compress debug sections), or ‘zlib’ (use zlib
       compression in ELF gABI format).  If the linker doesn't support
       writing compressed debug sections, the option is rejected.
!      Otherwise, if the assembler does not support them, ‘-gz’ is
       silently ignored when producing object files.
  
! ‘-femit-struct-debug-baseonly’
       Emit debug information for struct-like types only when the base
       name of the compilation source file matches the base name of file
       in which the struct is defined.
  
       This option substantially reduces the size of debugging
       information, but at significant potential loss in type information
!      to the debugger.  See ‘-femit-struct-debug-reduced’ for a less
!      aggressive option.  See ‘-femit-struct-debug-detailed’ for more
       detailed control.
  
       This option works only with DWARF debug output.
  
! ‘-femit-struct-debug-reduced’
       Emit debug information for struct-like types only when the base
       name of the compilation source file matches the base name of file
       in which the type is defined, unless the struct is a template or
*************** experience.
*** 11061,11119 ****
  
       This option significantly reduces the size of debugging
       information, with some potential loss in type information to the
!      debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
!      option.  See '-femit-struct-debug-detailed' for more detailed
       control.
  
       This option works only with DWARF debug output.
  
! '-femit-struct-debug-detailed[=SPEC-LIST]'
       Specify the struct-like types for which the compiler generates
       debug information.  The intent is to reduce duplicate struct debug
       information between different object files within the same program.
  
!      This option is a detailed version of '-femit-struct-debug-reduced'
!      and '-femit-struct-debug-baseonly', which serves for most needs.
  
       A specification has the syntax
!      ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
  
       The optional first word limits the specification to structs that
!      are used directly ('dir:') or used indirectly ('ind:').  A struct
       type is used directly when it is the type of a variable, member.
       Indirect uses arise through pointers to structs.  That is, when use
       of an incomplete struct is valid, the use is indirect.  An example
!      is 'struct one direct; struct two * indirect;'.
  
       The optional second word limits the specification to ordinary
!      structs ('ord:') or generic structs ('gen:').  Generic structs are
       a bit complicated to explain.  For C++, these are non-explicit
       specializations of template classes, or non-template classes within
       the above.  Other programming languages have generics, but
!      '-femit-struct-debug-detailed' does not yet implement them.
  
       The third word specifies the source files for those structs for
       which the compiler should emit debug information.  The values
!      'none' and 'any' have the normal meaning.  The value 'base' means
       that the base of name of the file in which the type declaration
       appears must match the base of the name of the main compilation
!      file.  In practice, this means that when compiling 'foo.c', debug
       information is generated for types declared in that file and
!      'foo.h', but not other header files.  The value 'sys' means those
!      types satisfying 'base' or declared in system or compiler headers.
  
       You may need to experiment to determine the best settings for your
       application.
  
!      The default is '-femit-struct-debug-detailed=all'.
  
       This option works only with DWARF debug output.
  
! '-fno-dwarf2-cfi-asm'
!      Emit DWARF unwind info as compiler generated '.eh_frame' section
!      instead of using GAS '.cfi_*' directives.
  
! '-fno-eliminate-unused-debug-types'
       Normally, when producing DWARF output, GCC avoids producing debug
       symbol output for types that are nowhere used in the source file
       being compiled.  Sometimes it is useful to have GCC emit debugging
--- 11065,11123 ----
  
       This option significantly reduces the size of debugging
       information, with some potential loss in type information to the
!      debugger.  See ‘-femit-struct-debug-baseonly’ for a more aggressive
!      option.  See ‘-femit-struct-debug-detailed’ for more detailed
       control.
  
       This option works only with DWARF debug output.
  
! ‘-femit-struct-debug-detailed[=SPEC-LIST]’
       Specify the struct-like types for which the compiler generates
       debug information.  The intent is to reduce duplicate struct debug
       information between different object files within the same program.
  
!      This option is a detailed version of ‘-femit-struct-debug-reduced’
!      and ‘-femit-struct-debug-baseonly’, which serves for most needs.
  
       A specification has the syntax
!      [‘dir:’|‘ind:’][‘ord:’|‘gen:’](‘any’|‘sys’|‘base’|‘none’)
  
       The optional first word limits the specification to structs that
!      are used directly (‘dir:’) or used indirectly (‘ind:’).  A struct
       type is used directly when it is the type of a variable, member.
       Indirect uses arise through pointers to structs.  That is, when use
       of an incomplete struct is valid, the use is indirect.  An example
!      is ‘struct one direct; struct two * indirect;’.
  
       The optional second word limits the specification to ordinary
!      structs (‘ord:’) or generic structs (‘gen:’).  Generic structs are
       a bit complicated to explain.  For C++, these are non-explicit
       specializations of template classes, or non-template classes within
       the above.  Other programming languages have generics, but
!      ‘-femit-struct-debug-detailed’ does not yet implement them.
  
       The third word specifies the source files for those structs for
       which the compiler should emit debug information.  The values
!      ‘none’ and ‘any’ have the normal meaning.  The value ‘base’ means
       that the base of name of the file in which the type declaration
       appears must match the base of the name of the main compilation
!      file.  In practice, this means that when compiling ‘foo.c’, debug
       information is generated for types declared in that file and
!      ‘foo.h’, but not other header files.  The value ‘sys’ means those
!      types satisfying ‘base’ or declared in system or compiler headers.
  
       You may need to experiment to determine the best settings for your
       application.
  
!      The default is ‘-femit-struct-debug-detailed=all’.
  
       This option works only with DWARF debug output.
  
! ‘-fno-dwarf2-cfi-asm’
!      Emit DWARF unwind info as compiler generated ‘.eh_frame’ section
!      instead of using GAS ‘.cfi_*’ directives.
  
! ‘-fno-eliminate-unused-debug-types’
       Normally, when producing DWARF output, GCC avoids producing debug
       symbol output for types that are nowhere used in the source file
       being compiled.  Sometimes it is useful to have GCC emit debugging
*************** compiling each of them.
*** 11151,11176 ****
   Not all optimizations are controlled directly by a flag.  Only
  optimizations that have a flag are listed in this section.
  
!  Most optimizations are completely disabled at '-O0' or if an '-O' level
  is not set on the command line, even if individual optimization flags
! are specified.  Similarly, '-Og' suppresses many optimization passes.
  
   Depending on the target and how GCC was configured, a slightly
! different set of optimizations may be enabled at each '-O' level than
! those listed here.  You can invoke GCC with '-Q --help=optimizers' to
  find out the exact set of optimizations that are enabled at each level.
  *Note Overall Options::, for examples.
  
! '-O'
! '-O1'
       Optimize.  Optimizing compilation takes somewhat more time, and a
       lot more memory for a large function.
  
!      With '-O', the compiler tries to reduce code size and execution
       time, without performing any optimizations that take a great deal
       of compilation time.
  
!      '-O' turns on the following optimization flags:
  
            -fauto-inc-dec
            -fbranch-count-reg
--- 11155,11180 ----
   Not all optimizations are controlled directly by a flag.  Only
  optimizations that have a flag are listed in this section.
  
!  Most optimizations are completely disabled at ‘-O0’ or if an ‘-O’ level
  is not set on the command line, even if individual optimization flags
! are specified.  Similarly, ‘-Og’ suppresses many optimization passes.
  
   Depending on the target and how GCC was configured, a slightly
! different set of optimizations may be enabled at each ‘-O’ level than
! those listed here.  You can invoke GCC with ‘-Q --help=optimizers’ to
  find out the exact set of optimizations that are enabled at each level.
  *Note Overall Options::, for examples.
  
! ‘-O’
! ‘-O1’
       Optimize.  Optimizing compilation takes somewhat more time, and a
       lot more memory for a large function.
  
!      With ‘-O’, the compiler tries to reduce code size and execution
       time, without performing any optimizations that take a great deal
       of compilation time.
  
!      ‘-O’ turns on the following optimization flags:
  
            -fauto-inc-dec
            -fbranch-count-reg
*************** find out the exact set of optimizations
*** 11220,11232 ****
            -ftree-ter
            -funit-at-a-time
  
! '-O2'
       Optimize even more.  GCC performs nearly all supported
       optimizations that do not involve a space-speed tradeoff.  As
!      compared to '-O', this option increases both compilation time and
       the performance of the generated code.
  
!      '-O2' turns on all optimization flags specified by '-O1'.  It also
       turns on the following optimization flags:
  
            -falign-functions  -falign-jumps
--- 11224,11236 ----
            -ftree-ter
            -funit-at-a-time
  
! ‘-O2’
       Optimize even more.  GCC performs nearly all supported
       optimizations that do not involve a space-speed tradeoff.  As
!      compared to ‘-O’, this option increases both compilation time and
       the performance of the generated code.
  
!      ‘-O2’ turns on all optimization flags specified by ‘-O1’.  It also
       turns on the following optimization flags:
  
            -falign-functions  -falign-jumps
*************** find out the exact set of optimizations
*** 11268,11279 ****
            -ftree-vrp
            -fvect-cost-model=very-cheap
  
!      Please note the warning under '-fgcse' about invoking '-O2' on
       programs that use computed gotos.
  
! '-O3'
!      Optimize yet more.  '-O3' turns on all optimizations specified by
!      '-O2' and also turns on the following optimization flags:
  
            -fgcse-after-reload
            -fipa-cp-clone
--- 11272,11283 ----
            -ftree-vrp
            -fvect-cost-model=very-cheap
  
!      Please note the warning under ‘-fgcse’ about invoking ‘-O2’ on
       programs that use computed gotos.
  
! ‘-O3’
!      Optimize yet more.  ‘-O3’ turns on all optimizations specified by
!      ‘-O2’ and also turns on the following optimization flags:
  
            -fgcse-after-reload
            -fipa-cp-clone
*************** find out the exact set of optimizations
*** 11289,11329 ****
            -fvect-cost-model=dynamic
            -fversion-loops-for-strides
  
! '-O0'
       Reduce compilation time and make debugging produce the expected
       results.  This is the default.
  
! '-Os'
!      Optimize for size.  '-Os' enables all '-O2' optimizations except
       those that often increase code size:
  
            -falign-functions  -falign-jumps
            -falign-labels  -falign-loops
            -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
  
!      It also enables '-finline-functions', causes the compiler to tune
       for code size rather than execution speed, and performs further
       optimizations designed to reduce code size.
  
! '-Ofast'
!      Disregard strict standards compliance.  '-Ofast' enables all '-O3'
       optimizations.  It also enables optimizations that are not valid
!      for all standard-compliant programs.  It turns on '-ffast-math',
!      '-fallow-store-data-races' and the Fortran-specific
!      '-fstack-arrays', unless '-fmax-stack-var-size' is specified, and
!      '-fno-protect-parens'.  It turns off '-fsemantic-interposition'.
  
! '-Og'
!      Optimize debugging experience.  '-Og' should be the optimization
       level of choice for the standard edit-compile-debug cycle, offering
       a reasonable level of optimization while maintaining fast
       compilation and a good debugging experience.  It is a better choice
!      than '-O0' for producing debuggable code because some compiler
!      passes that collect debug information are disabled at '-O0'.
  
!      Like '-O0', '-Og' completely disables a number of optimization
       passes so that individual options controlling them have no effect.
!      Otherwise '-Og' enables all '-O1' optimization flags except for
       those that may interfere with debugging:
  
            -fbranch-count-reg  -fdelayed-branch
--- 11293,11333 ----
            -fvect-cost-model=dynamic
            -fversion-loops-for-strides
  
! ‘-O0’
       Reduce compilation time and make debugging produce the expected
       results.  This is the default.
  
! ‘-Os’
!      Optimize for size.  ‘-Os’ enables all ‘-O2’ optimizations except
       those that often increase code size:
  
            -falign-functions  -falign-jumps
            -falign-labels  -falign-loops
            -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
  
!      It also enables ‘-finline-functions’, causes the compiler to tune
       for code size rather than execution speed, and performs further
       optimizations designed to reduce code size.
  
! ‘-Ofast’
!      Disregard strict standards compliance.  ‘-Ofast’ enables all ‘-O3’
       optimizations.  It also enables optimizations that are not valid
!      for all standard-compliant programs.  It turns on ‘-ffast-math’,
!      ‘-fallow-store-data-races’ and the Fortran-specific
!      ‘-fstack-arrays’, unless ‘-fmax-stack-var-size’ is specified, and
!      ‘-fno-protect-parens’.  It turns off ‘-fsemantic-interposition’.
  
! ‘-Og’
!      Optimize debugging experience.  ‘-Og’ should be the optimization
       level of choice for the standard edit-compile-debug cycle, offering
       a reasonable level of optimization while maintaining fast
       compilation and a good debugging experience.  It is a better choice
!      than ‘-O0’ for producing debuggable code because some compiler
!      passes that collect debug information are disabled at ‘-O0’.
  
!      Like ‘-O0’, ‘-Og’ completely disables a number of optimization
       passes so that individual options controlling them have no effect.
!      Otherwise ‘-Og’ enables all ‘-O1’ optimization flags except for
       those that may interfere with debugging:
  
            -fbranch-count-reg  -fdelayed-branch
*************** find out the exact set of optimizations
*** 11332,11386 ****
            -fmove-loop-invariants  -fmove-loop-stores  -fssa-phiopt
            -ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra
  
! '-Oz'
       Optimize aggressively for size rather than speed.  This may
       increase the number of instructions executed if those instructions
!      require fewer bytes to encode.  '-Oz' behaves similarly to '-Os'
!      including enabling most '-O2' optimizations.
  
!  If you use multiple '-O' options, with or without level numbers, the
  last such option is the one that is effective.
  
!  Options of the form '-fFLAG' specify machine-independent flags.  Most
  flags have both positive and negative forms; the negative form of
! '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
  listed--the one you typically use.  You can figure out the other form by
! either removing 'no-' or adding it.
  
   The following options control specific optimizations.  They are either
! activated by '-O' options or are related to ones that are.  You can use
  the following flags in the rare cases when "fine-tuning" of
  optimizations to be performed is desired.
  
! '-fno-defer-pop'
       For machines that must pop arguments after a function call, always
       pop the arguments as soon as each function returns.  At levels
!      '-O1' and higher, '-fdefer-pop' is the default; this allows the
       compiler to let arguments accumulate on the stack for several
       function calls and pop them all at once.
  
! '-fforward-propagate'
       Perform a forward propagation pass on RTL.  The pass tries to
       combine two instructions and checks if the result can be
       simplified.  If loop unrolling is active, two passes are performed
       and the second is scheduled after loop unrolling.
  
!      This option is enabled by default at optimization levels '-O1',
!      '-O2', '-O3', '-Os'.
  
! '-ffp-contract=STYLE'
!      '-ffp-contract=off' disables floating-point expression contraction.
!      '-ffp-contract=fast' enables floating-point expression contraction
       such as forming of fused multiply-add operations if the target has
!      native support for them.  '-ffp-contract=on' enables floating-point
       expression contraction if allowed by the language standard.  This
       is implemented for C and C++, where it enables contraction within
       one expression, but not across different statements.
  
!      The default is '-ffp-contract=off' for C in a standards compliant
!      mode ('-std=c11' or similar), '-ffp-contract=fast' otherwise.
  
! '-fomit-frame-pointer'
       Omit the frame pointer in functions that don't need one.  This
       avoids the instructions to save, set up and restore the frame
       pointer; on many targets it also makes an extra register available.
--- 11336,11390 ----
            -fmove-loop-invariants  -fmove-loop-stores  -fssa-phiopt
            -ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra
  
! ‘-Oz’
       Optimize aggressively for size rather than speed.  This may
       increase the number of instructions executed if those instructions
!      require fewer bytes to encode.  ‘-Oz’ behaves similarly to ‘-Os’
!      including enabling most ‘-O2’ optimizations.
  
!  If you use multiple ‘-O’ options, with or without level numbers, the
  last such option is the one that is effective.
  
!  Options of the form ‘-fFLAG’ specify machine-independent flags.  Most
  flags have both positive and negative forms; the negative form of
! ‘-ffoo’ is ‘-fno-foo’.  In the table below, only one of the forms is
  listed--the one you typically use.  You can figure out the other form by
! either removing ‘no-’ or adding it.
  
   The following options control specific optimizations.  They are either
! activated by ‘-O’ options or are related to ones that are.  You can use
  the following flags in the rare cases when "fine-tuning" of
  optimizations to be performed is desired.
  
! ‘-fno-defer-pop’
       For machines that must pop arguments after a function call, always
       pop the arguments as soon as each function returns.  At levels
!      ‘-O1’ and higher, ‘-fdefer-pop’ is the default; this allows the
       compiler to let arguments accumulate on the stack for several
       function calls and pop them all at once.
  
! ‘-fforward-propagate’
       Perform a forward propagation pass on RTL.  The pass tries to
       combine two instructions and checks if the result can be
       simplified.  If loop unrolling is active, two passes are performed
       and the second is scheduled after loop unrolling.
  
!      This option is enabled by default at optimization levels ‘-O1’,
!      ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-ffp-contract=STYLE’
!      ‘-ffp-contract=off’ disables floating-point expression contraction.
!      ‘-ffp-contract=fast’ enables floating-point expression contraction
       such as forming of fused multiply-add operations if the target has
!      native support for them.  ‘-ffp-contract=on’ enables floating-point
       expression contraction if allowed by the language standard.  This
       is implemented for C and C++, where it enables contraction within
       one expression, but not across different statements.
  
!      The default is ‘-ffp-contract=off’ for C in a standards compliant
!      mode (‘-std=c11’ or similar), ‘-ffp-contract=fast’ otherwise.
  
! ‘-fomit-frame-pointer’
       Omit the frame pointer in functions that don't need one.  This
       avoids the instructions to save, set up and restore the frame
       pointer; on many targets it also makes an extra register available.
*************** optimizations to be performed is desired
*** 11389,11417 ****
       calling sequence always uses a frame pointer, so it cannot be
       omitted.
  
!      Note that '-fno-omit-frame-pointer' doesn't guarantee the frame
       pointer is used in all functions.  Several targets always omit the
       frame pointer in leaf functions.
  
!      Enabled by default at '-O1' and higher.
  
! '-foptimize-sibling-calls'
       Optimize sibling and tail recursive calls.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-foptimize-strlen'
!      Optimize various standard C string functions (e.g. 'strlen',
!      'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
       faster alternatives.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-finline-stringops[=FN]'
!      Expand memory and string operations (for now, only 'memset')
       inline, even when the length is variable or big enough as to
!      require looping.  This is most useful along with '-ffreestanding'
!      and '-fno-builtin'.
  
       In some circumstances, it enables the compiler to generate code
       that takes advantage of known alignment and length multipliers, but
--- 11393,11421 ----
       calling sequence always uses a frame pointer, so it cannot be
       omitted.
  
!      Note that ‘-fno-omit-frame-pointer’ doesn't guarantee the frame
       pointer is used in all functions.  Several targets always omit the
       frame pointer in leaf functions.
  
!      Enabled by default at ‘-O1’ and higher.
  
! ‘-foptimize-sibling-calls’
       Optimize sibling and tail recursive calls.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-foptimize-strlen’
!      Optimize various standard C string functions (e.g. ‘strlen’,
!      ‘strchr’ or ‘strcpy’) and their ‘_FORTIFY_SOURCE’ counterparts into
       faster alternatives.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-finline-stringops[=FN]’
!      Expand memory and string operations (for now, only ‘memset’)
       inline, even when the length is variable or big enough as to
!      require looping.  This is most useful along with ‘-ffreestanding’
!      and ‘-fno-builtin’.
  
       In some circumstances, it enables the compiler to generate code
       that takes advantage of known alignment and length multipliers, but
*************** optimizations to be performed is desired
*** 11420,11504 ****
       performant but shared implementation runs faster due to better use
       of code caches.  This option is disabled by default.
  
! '-fno-inline'
       Do not expand any functions inline apart from those marked with the
!      'always_inline' attribute.  This is the default when not
       optimizing.
  
       Single functions can be exempted from inlining by marking them with
!      the 'noinline' attribute.
  
! '-finline-small-functions'
       Integrate functions into their callers when their body is smaller
       than expected function call code (so overall size of program gets
       smaller).  The compiler heuristically decides which functions are
       simple enough to be worth integrating in this way.  This inlining
       applies to all functions, even those not declared inline.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-findirect-inlining'
       Inline also indirect calls that are discovered to be known at
       compile time thanks to previous inlining.  This option has any
       effect only when inlining itself is turned on by the
!      '-finline-functions' or '-finline-small-functions' options.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-finline-functions'
       Consider all functions for inlining, even if they are not declared
       inline.  The compiler heuristically decides which functions are
       worth integrating in this way.
  
       If all calls to a given function are integrated, and the function
!      is declared 'static', then the function is normally not output as
       assembler code in its own right.
  
!      Enabled at levels '-O2', '-O3', '-Os'.  Also enabled by
!      '-fprofile-use' and '-fauto-profile'.
  
! '-finline-functions-called-once'
!      Consider all 'static' functions called once for inlining into their
!      caller even if they are not marked 'inline'.  If a call to a given
       function is integrated, then the function is not output as
       assembler code in its own right.
  
!      Enabled at levels '-O1', '-O2', '-O3' and '-Os', but not '-Og'.
  
! '-fearly-inlining'
!      Inline functions marked by 'always_inline' and functions whose body
       seems smaller than the function call overhead early before doing
!      '-fprofile-generate' instrumentation and real inlining pass.  Doing
       so makes profiling significantly cheaper and usually inlining
       faster on programs having large chains of nested wrapper functions.
  
       Enabled by default.
  
! '-fipa-sra'
       Perform interprocedural scalar replacement of aggregates, removal
       of unused parameters and replacement of parameters passed by
       reference by parameters passed by value.
  
!      Enabled at levels '-O2', '-O3' and '-Os'.
  
! '-finline-limit=N'
       By default, GCC limits the size of functions that can be inlined.
       This flag allows coarse control of this limit.  N is the size of
       functions that can be inlined in number of pseudo instructions.
  
       Inlining is actually controlled by a number of parameters, which
!      may be specified individually by using '--param NAME=VALUE'.  The
!      '-finline-limit=N' option sets some of these parameters as follows:
  
!      'max-inline-insns-single'
            is set to N/2.
!      'max-inline-insns-auto'
            is set to N/2.
  
       See below for a documentation of the individual parameters
       controlling inlining and for the defaults of these parameters.
  
!      _Note:_ there may be no value to '-finline-limit' that results in
       default behavior.
  
       _Note:_ pseudo instruction represents, in this particular context,
--- 11424,11508 ----
       performant but shared implementation runs faster due to better use
       of code caches.  This option is disabled by default.
  
! ‘-fno-inline’
       Do not expand any functions inline apart from those marked with the
!      ‘always_inline’ attribute.  This is the default when not
       optimizing.
  
       Single functions can be exempted from inlining by marking them with
!      the ‘noinline’ attribute.
  
! ‘-finline-small-functions’
       Integrate functions into their callers when their body is smaller
       than expected function call code (so overall size of program gets
       smaller).  The compiler heuristically decides which functions are
       simple enough to be worth integrating in this way.  This inlining
       applies to all functions, even those not declared inline.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-findirect-inlining’
       Inline also indirect calls that are discovered to be known at
       compile time thanks to previous inlining.  This option has any
       effect only when inlining itself is turned on by the
!      ‘-finline-functions’ or ‘-finline-small-functions’ options.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-finline-functions’
       Consider all functions for inlining, even if they are not declared
       inline.  The compiler heuristically decides which functions are
       worth integrating in this way.
  
       If all calls to a given function are integrated, and the function
!      is declared ‘static’, then the function is normally not output as
       assembler code in its own right.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.  Also enabled by
!      ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-finline-functions-called-once’
!      Consider all ‘static’ functions called once for inlining into their
!      caller even if they are not marked ‘inline’.  If a call to a given
       function is integrated, then the function is not output as
       assembler code in its own right.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’ and ‘-Os’, but not ‘-Og’.
  
! ‘-fearly-inlining’
!      Inline functions marked by ‘always_inline’ and functions whose body
       seems smaller than the function call overhead early before doing
!      ‘-fprofile-generate’ instrumentation and real inlining pass.  Doing
       so makes profiling significantly cheaper and usually inlining
       faster on programs having large chains of nested wrapper functions.
  
       Enabled by default.
  
! ‘-fipa-sra’
       Perform interprocedural scalar replacement of aggregates, removal
       of unused parameters and replacement of parameters passed by
       reference by parameters passed by value.
  
!      Enabled at levels ‘-O2’, ‘-O3’ and ‘-Os’.
  
! ‘-finline-limit=N’
       By default, GCC limits the size of functions that can be inlined.
       This flag allows coarse control of this limit.  N is the size of
       functions that can be inlined in number of pseudo instructions.
  
       Inlining is actually controlled by a number of parameters, which
!      may be specified individually by using ‘--param NAME=VALUE’.  The
!      ‘-finline-limit=N’ option sets some of these parameters as follows:
  
!      ‘max-inline-insns-single’
            is set to N/2.
!      ‘max-inline-insns-auto’
            is set to N/2.
  
       See below for a documentation of the individual parameters
       controlling inlining and for the defaults of these parameters.
  
!      _Note:_ there may be no value to ‘-finline-limit’ that results in
       default behavior.
  
       _Note:_ pseudo instruction represents, in this particular context,
*************** optimizations to be performed is desired
*** 11506,11585 ****
       represent a count of assembly instructions and as such its exact
       meaning might change from one release to an another.
  
! '-fno-keep-inline-dllexport'
!      This is a more fine-grained version of '-fkeep-inline-functions',
       which applies only to functions that are declared using the
!      'dllexport' attribute or declspec.  *Note Declaring Attributes of
       Functions: Function Attributes.
  
! '-fkeep-inline-functions'
!      In C, emit 'static' functions that are declared 'inline' into the
       object file, even if the function has been inlined into all of its
!      callers.  This switch does not affect functions using the 'extern
!      inline' extension in GNU C90.  In C++, emit any and all inline
       functions into the object file.
  
! '-fkeep-static-functions'
!      Emit 'static' functions into the object file, even if the function
       is never used.
  
! '-fkeep-static-consts'
!      Emit variables declared 'static const' when optimization isn't
       turned on, even if the variables aren't referenced.
  
       GCC enables this option by default.  If you want to force the
       compiler to check if a variable is referenced, regardless of
       whether or not optimization is turned on, use the
!      '-fno-keep-static-consts' option.
  
! '-fmerge-constants'
       Attempt to merge identical constants (string constants and
       floating-point constants) across compilation units.
  
       This option is the default for optimized compilation if the
!      assembler and linker support it.  Use '-fno-merge-constants' to
       inhibit this behavior.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os'.
  
! '-fmerge-all-constants'
       Attempt to merge identical constants and identical variables.
  
!      This option implies '-fmerge-constants'.  In addition to
!      '-fmerge-constants' this considers e.g. even constant initialized
       arrays or initialized constant variables with integral or
       floating-point types.  Languages like C or C++ require each
       variable, including multiple instances of the same variable in
       recursive calls, to have distinct locations, so using this option
       results in non-conforming behavior.
  
! '-fmodulo-sched'
       Perform swing modulo scheduling immediately before the first
       scheduling pass.  This pass looks at innermost loops and reorders
       their instructions by overlapping different iterations.
  
! '-fmodulo-sched-allow-regmoves'
       Perform more aggressive SMS-based modulo scheduling with register
       moves allowed.  By setting this flag certain anti-dependences edges
       are deleted, which triggers the generation of reg-moves based on
       the life-range analysis.  This option is effective only with
!      '-fmodulo-sched' enabled.
  
! '-fno-branch-count-reg'
       Disable the optimization pass that scans for opportunities to use
       "decrement and branch" instructions on a count register instead of
       instruction sequences that decrement a register, compare it against
       zero, and then branch based upon the result.  This option is only
       meaningful on architectures that support such instructions, which
       include x86, PowerPC, IA-64 and S/390.  Note that the
!      '-fno-branch-count-reg' option doesn't remove the decrement and
       branch instructions from the generated instruction stream
       introduced by other optimization passes.
  
!      The default is '-fbranch-count-reg' at '-O1' and higher, except for
!      '-Og'.
  
! '-fno-function-cse'
       Do not put function addresses in registers; make each instruction
       that calls a constant function contain the function's address
       explicitly.
--- 11510,11589 ----
       represent a count of assembly instructions and as such its exact
       meaning might change from one release to an another.
  
! ‘-fno-keep-inline-dllexport’
!      This is a more fine-grained version of ‘-fkeep-inline-functions’,
       which applies only to functions that are declared using the
!      ‘dllexport’ attribute or declspec.  *Note Declaring Attributes of
       Functions: Function Attributes.
  
! ‘-fkeep-inline-functions’
!      In C, emit ‘static’ functions that are declared ‘inline’ into the
       object file, even if the function has been inlined into all of its
!      callers.  This switch does not affect functions using the ‘extern
!      inline’ extension in GNU C90.  In C++, emit any and all inline
       functions into the object file.
  
! ‘-fkeep-static-functions’
!      Emit ‘static’ functions into the object file, even if the function
       is never used.
  
! ‘-fkeep-static-consts’
!      Emit variables declared ‘static const’ when optimization isn't
       turned on, even if the variables aren't referenced.
  
       GCC enables this option by default.  If you want to force the
       compiler to check if a variable is referenced, regardless of
       whether or not optimization is turned on, use the
!      ‘-fno-keep-static-consts’ option.
  
! ‘-fmerge-constants’
       Attempt to merge identical constants (string constants and
       floating-point constants) across compilation units.
  
       This option is the default for optimized compilation if the
!      assembler and linker support it.  Use ‘-fno-merge-constants’ to
       inhibit this behavior.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fmerge-all-constants’
       Attempt to merge identical constants and identical variables.
  
!      This option implies ‘-fmerge-constants’.  In addition to
!      ‘-fmerge-constants’ this considers e.g. even constant initialized
       arrays or initialized constant variables with integral or
       floating-point types.  Languages like C or C++ require each
       variable, including multiple instances of the same variable in
       recursive calls, to have distinct locations, so using this option
       results in non-conforming behavior.
  
! ‘-fmodulo-sched’
       Perform swing modulo scheduling immediately before the first
       scheduling pass.  This pass looks at innermost loops and reorders
       their instructions by overlapping different iterations.
  
! ‘-fmodulo-sched-allow-regmoves’
       Perform more aggressive SMS-based modulo scheduling with register
       moves allowed.  By setting this flag certain anti-dependences edges
       are deleted, which triggers the generation of reg-moves based on
       the life-range analysis.  This option is effective only with
!      ‘-fmodulo-sched’ enabled.
  
! ‘-fno-branch-count-reg’
       Disable the optimization pass that scans for opportunities to use
       "decrement and branch" instructions on a count register instead of
       instruction sequences that decrement a register, compare it against
       zero, and then branch based upon the result.  This option is only
       meaningful on architectures that support such instructions, which
       include x86, PowerPC, IA-64 and S/390.  Note that the
!      ‘-fno-branch-count-reg’ option doesn't remove the decrement and
       branch instructions from the generated instruction stream
       introduced by other optimization passes.
  
!      The default is ‘-fbranch-count-reg’ at ‘-O1’ and higher, except for
!      ‘-Og’.
  
! ‘-fno-function-cse’
       Do not put function addresses in registers; make each instruction
       that calls a constant function contain the function's address
       explicitly.
*************** optimizations to be performed is desired
*** 11588,11596 ****
       that alter the assembler output may be confused by the
       optimizations performed when this option is not used.
  
!      The default is '-ffunction-cse'
  
! '-fno-zero-initialized-in-bss'
       If the target supports a BSS section, GCC by default puts variables
       that are initialized to zero into BSS.  This can save space in the
       resulting code.
--- 11592,11600 ----
       that alter the assembler output may be confused by the
       optimizations performed when this option is not used.
  
!      The default is ‘-ffunction-cse’
  
! ‘-fno-zero-initialized-in-bss’
       If the target supports a BSS section, GCC by default puts variables
       that are initialized to zero into BSS.  This can save space in the
       resulting code.
*************** optimizations to be performed is desired
*** 11600,11697 ****
       that the resulting executable can find the beginning of that
       section and/or make assumptions based on that.
  
!      The default is '-fzero-initialized-in-bss'.
  
! '-fthread-jumps'
       Perform optimizations that check to see if a jump branches to a
       location where another comparison subsumed by the first is found.
       If so, the first branch is redirected to either the destination of
       the second branch or a point immediately following it, depending on
       whether the condition is known to be true or false.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os'.
  
! '-fsplit-wide-types'
!      When using a type that occupies multiple registers, such as 'long
!      long' on a 32-bit system, split the registers apart and allocate
       them independently.  This normally generates better code for those
       types, but may make debugging more difficult.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os'.
  
! '-fsplit-wide-types-early'
       Fully split wide types early, instead of very late.  This option
!      has no effect unless '-fsplit-wide-types' is turned on.
  
       This is the default on some targets.
  
! '-fcse-follow-jumps'
       In common subexpression elimination (CSE), scan through jump
       instructions when the target of the jump is not reached by any
!      other path.  For example, when CSE encounters an 'if' statement
!      with an 'else' clause, CSE follows the jump when the condition
       tested is false.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fcse-skip-blocks'
!      This is similar to '-fcse-follow-jumps', but causes CSE to follow
       jumps that conditionally skip over blocks.  When CSE encounters a
!      simple 'if' statement with no else clause, '-fcse-skip-blocks'
!      causes CSE to follow the jump around the body of the 'if'.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-frerun-cse-after-loop'
       Re-run common subexpression elimination after loop optimizations
       are performed.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fgcse'
       Perform a global common subexpression elimination pass.  This pass
       also performs global constant and copy propagation.
  
       _Note:_ When compiling a program using computed gotos, a GCC
       extension, you may get better run-time performance if you disable
       the global common subexpression elimination pass by adding
!      '-fno-gcse' to the command line.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fgcse-lm'
!      When '-fgcse-lm' is enabled, global common subexpression
       elimination attempts to move loads that are only killed by stores
       into themselves.  This allows a loop containing a load/store
       sequence to be changed to a load outside the loop, and a copy/store
       within the loop.
  
!      Enabled by default when '-fgcse' is enabled.
  
! '-fgcse-sm'
!      When '-fgcse-sm' is enabled, a store motion pass is run after
       global common subexpression elimination.  This pass attempts to
       move stores out of loops.  When used in conjunction with
!      '-fgcse-lm', loops containing a load/store sequence can be changed
       to a load before the loop and a store after the loop.
  
       Not enabled at any optimization level.
  
! '-fgcse-las'
!      When '-fgcse-las' is enabled, the global common subexpression
       elimination pass eliminates redundant loads that come after stores
       to the same memory location (both partial and full redundancies).
  
       Not enabled at any optimization level.
  
! '-fgcse-after-reload'
!      When '-fgcse-after-reload' is enabled, a redundant load elimination
       pass is performed after reload.  The purpose of this pass is to
       clean up redundant spilling.
  
!      Enabled by '-O3', '-fprofile-use' and '-fauto-profile'.
  
! '-faggressive-loop-optimizations'
       This option tells the loop optimizer to use language constraints to
       derive bounds for the number of iterations of a loop.  This assumes
       that loop code does not invoke undefined behavior by for example
--- 11604,11701 ----
       that the resulting executable can find the beginning of that
       section and/or make assumptions based on that.
  
!      The default is ‘-fzero-initialized-in-bss’.
  
! ‘-fthread-jumps’
       Perform optimizations that check to see if a jump branches to a
       location where another comparison subsumed by the first is found.
       If so, the first branch is redirected to either the destination of
       the second branch or a point immediately following it, depending on
       whether the condition is known to be true or false.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fsplit-wide-types’
!      When using a type that occupies multiple registers, such as ‘long
!      long’ on a 32-bit system, split the registers apart and allocate
       them independently.  This normally generates better code for those
       types, but may make debugging more difficult.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fsplit-wide-types-early’
       Fully split wide types early, instead of very late.  This option
!      has no effect unless ‘-fsplit-wide-types’ is turned on.
  
       This is the default on some targets.
  
! ‘-fcse-follow-jumps’
       In common subexpression elimination (CSE), scan through jump
       instructions when the target of the jump is not reached by any
!      other path.  For example, when CSE encounters an ‘if’ statement
!      with an ‘else’ clause, CSE follows the jump when the condition
       tested is false.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fcse-skip-blocks’
!      This is similar to ‘-fcse-follow-jumps’, but causes CSE to follow
       jumps that conditionally skip over blocks.  When CSE encounters a
!      simple ‘if’ statement with no else clause, ‘-fcse-skip-blocks’
!      causes CSE to follow the jump around the body of the ‘if’.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-frerun-cse-after-loop’
       Re-run common subexpression elimination after loop optimizations
       are performed.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fgcse’
       Perform a global common subexpression elimination pass.  This pass
       also performs global constant and copy propagation.
  
       _Note:_ When compiling a program using computed gotos, a GCC
       extension, you may get better run-time performance if you disable
       the global common subexpression elimination pass by adding
!      ‘-fno-gcse’ to the command line.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fgcse-lm’
!      When ‘-fgcse-lm’ is enabled, global common subexpression
       elimination attempts to move loads that are only killed by stores
       into themselves.  This allows a loop containing a load/store
       sequence to be changed to a load outside the loop, and a copy/store
       within the loop.
  
!      Enabled by default when ‘-fgcse’ is enabled.
  
! ‘-fgcse-sm’
!      When ‘-fgcse-sm’ is enabled, a store motion pass is run after
       global common subexpression elimination.  This pass attempts to
       move stores out of loops.  When used in conjunction with
!      ‘-fgcse-lm’, loops containing a load/store sequence can be changed
       to a load before the loop and a store after the loop.
  
       Not enabled at any optimization level.
  
! ‘-fgcse-las’
!      When ‘-fgcse-las’ is enabled, the global common subexpression
       elimination pass eliminates redundant loads that come after stores
       to the same memory location (both partial and full redundancies).
  
       Not enabled at any optimization level.
  
! ‘-fgcse-after-reload’
!      When ‘-fgcse-after-reload’ is enabled, a redundant load elimination
       pass is performed after reload.  The purpose of this pass is to
       clean up redundant spilling.
  
!      Enabled by ‘-O3’, ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-faggressive-loop-optimizations’
       This option tells the loop optimizer to use language constraints to
       derive bounds for the number of iterations of a loop.  This assumes
       that loop code does not invoke undefined behavior by for example
*************** optimizations to be performed is desired
*** 11700,11748 ****
       loop unrolling and peeling and loop exit test optimizations.  This
       option is enabled by default.
  
! '-funconstrained-commons'
       This option tells the compiler that variables declared in common
       blocks (e.g. Fortran) may later be overridden with longer trailing
       arrays.  This prevents certain optimizations that depend on knowing
       the array bounds.
  
! '-fcrossjumping'
       Perform cross-jumping transformation.  This transformation unifies
       equivalent code and saves code size.  The resulting code may or may
       not perform better than without cross-jumping.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fauto-inc-dec'
       Combine increments or decrements of addresses with memory accesses.
       This pass is always skipped on architectures that do not have
!      instructions to support this.  Enabled by default at '-O1' and
       higher on architectures that support this.
  
! '-fdce'
       Perform dead code elimination (DCE) on RTL.  Enabled by default at
!      '-O1' and higher.
  
! '-fdse'
       Perform dead store elimination (DSE) on RTL.  Enabled by default at
!      '-O1' and higher.
  
! '-fif-conversion'
       Attempt to transform conditional jumps into branch-less
       equivalents.  This includes use of conditional moves, min, max, set
       flags and abs instructions, and some tricks doable by standard
       arithmetics.  The use of conditional execution on chips where it is
!      available is controlled by '-fif-conversion2'.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os', but not with '-Og'.
  
! '-fif-conversion2'
       Use conditional execution (where available) to transform
       conditional jumps into branch-less equivalents.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os', but not with '-Og'.
  
! '-fdeclone-ctor-dtor'
       The C++ ABI requires multiple entry points for constructors and
       destructors: one for a base subobject, one for a complete object,
       and one for a virtual destructor that calls operator delete
--- 11704,11752 ----
       loop unrolling and peeling and loop exit test optimizations.  This
       option is enabled by default.
  
! ‘-funconstrained-commons’
       This option tells the compiler that variables declared in common
       blocks (e.g. Fortran) may later be overridden with longer trailing
       arrays.  This prevents certain optimizations that depend on knowing
       the array bounds.
  
! ‘-fcrossjumping’
       Perform cross-jumping transformation.  This transformation unifies
       equivalent code and saves code size.  The resulting code may or may
       not perform better than without cross-jumping.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fauto-inc-dec’
       Combine increments or decrements of addresses with memory accesses.
       This pass is always skipped on architectures that do not have
!      instructions to support this.  Enabled by default at ‘-O1’ and
       higher on architectures that support this.
  
! ‘-fdce’
       Perform dead code elimination (DCE) on RTL.  Enabled by default at
!      ‘-O1’ and higher.
  
! ‘-fdse’
       Perform dead store elimination (DSE) on RTL.  Enabled by default at
!      ‘-O1’ and higher.
  
! ‘-fif-conversion’
       Attempt to transform conditional jumps into branch-less
       equivalents.  This includes use of conditional moves, min, max, set
       flags and abs instructions, and some tricks doable by standard
       arithmetics.  The use of conditional execution on chips where it is
!      available is controlled by ‘-fif-conversion2’.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’, but not with ‘-Og’.
  
! ‘-fif-conversion2’
       Use conditional execution (where available) to transform
       conditional jumps into branch-less equivalents.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’, but not with ‘-Og’.
  
! ‘-fdeclone-ctor-dtor’
       The C++ ABI requires multiple entry points for constructors and
       destructors: one for a base subobject, one for a complete object,
       and one for a virtual destructor that calls operator delete
*************** optimizations to be performed is desired
*** 11751,11759 ****
       function.  With this option, the base and complete variants are
       changed to be thunks that call a common implementation.
  
!      Enabled by '-Os'.
  
! '-fdelete-null-pointer-checks'
       Assume that programs cannot safely dereference null pointers, and
       that no code or data element resides at address zero.  This option
       enables simple constant folding optimizations at all optimization
--- 11755,11763 ----
       function.  With this option, the base and complete variants are
       changed to be thunks that call a common implementation.
  
!      Enabled by ‘-Os’.
  
! ‘-fdelete-null-pointer-checks’
       Assume that programs cannot safely dereference null pointers, and
       that no code or data element resides at address zero.  This option
       enables simple constant folding optimizations at all optimization
*************** optimizations to be performed is desired
*** 11764,11770 ****
       checked after it has already been dereferenced, it cannot be null.
  
       Note however that in some environments this assumption is not true.
!      Use '-fno-delete-null-pointer-checks' to disable this optimization
       for programs that depend on that behavior.
  
       This option is enabled by default on most targets.  On Nios II ELF,
--- 11768,11774 ----
       checked after it has already been dereferenced, it cannot be null.
  
       Note however that in some environments this assumption is not true.
!      Use ‘-fno-delete-null-pointer-checks’ to disable this optimization
       for programs that depend on that behavior.
  
       This option is enabled by default on most targets.  On Nios II ELF,
*************** optimizations to be performed is desired
*** 11774,11787 ****
       Passes that use the dataflow information are enabled independently
       at different optimization levels.
  
! '-fdevirtualize'
       Attempt to convert calls to virtual functions to direct calls.
       This is done both within a procedure and interprocedurally as part
!      of indirect inlining ('-findirect-inlining') and interprocedural
!      constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
!      '-Os'.
  
! '-fdevirtualize-speculatively'
       Attempt to convert calls to virtual functions to speculative direct
       calls.  Based on the analysis of the type inheritance graph,
       determine for a given call the set of likely targets.  If the set
--- 11778,11791 ----
       Passes that use the dataflow information are enabled independently
       at different optimization levels.
  
! ‘-fdevirtualize’
       Attempt to convert calls to virtual functions to direct calls.
       This is done both within a procedure and interprocedurally as part
!      of indirect inlining (‘-findirect-inlining’) and interprocedural
!      constant propagation (‘-fipa-cp’).  Enabled at levels ‘-O2’, ‘-O3’,
!      ‘-Os’.
  
! ‘-fdevirtualize-speculatively’
       Attempt to convert calls to virtual functions to speculative direct
       calls.  Based on the analysis of the type inheritance graph,
       determine for a given call the set of likely targets.  If the set
*************** optimizations to be performed is desired
*** 11791,11819 ****
       useless after further optimization, they are converted back into
       original form.
  
! '-fdevirtualize-at-ltrans'
       Stream extra information needed for aggressive devirtualization
       when running the link-time optimizer in local transformation mode.
       This option enables more devirtualization but significantly
       increases the size of streamed data.  For this reason it is
       disabled by default.
  
! '-fexpensive-optimizations'
       Perform a number of minor optimizations that are relatively
       expensive.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-free'
       Attempt to remove redundant extension instructions.  This is
       especially helpful for the x86-64 architecture, which implicitly
       zero-extends in 64-bit registers after writing to their lower
       32-bit half.
  
       Enabled for Alpha, AArch64, LoongArch, PowerPC, RISC-V, SPARC,
!      h83000 and x86 at levels '-O2', '-O3', '-Os'.
  
! '-fno-lifetime-dse'
       In C++ the value of an object is only affected by changes within
       its lifetime: when the constructor begins, the object has an
       indeterminate value, and any changes during the lifetime of the
--- 11795,11823 ----
       useless after further optimization, they are converted back into
       original form.
  
! ‘-fdevirtualize-at-ltrans’
       Stream extra information needed for aggressive devirtualization
       when running the link-time optimizer in local transformation mode.
       This option enables more devirtualization but significantly
       increases the size of streamed data.  For this reason it is
       disabled by default.
  
! ‘-fexpensive-optimizations’
       Perform a number of minor optimizations that are relatively
       expensive.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-free’
       Attempt to remove redundant extension instructions.  This is
       especially helpful for the x86-64 architecture, which implicitly
       zero-extends in 64-bit registers after writing to their lower
       32-bit half.
  
       Enabled for Alpha, AArch64, LoongArch, PowerPC, RISC-V, SPARC,
!      h83000 and x86 at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fno-lifetime-dse’
       In C++ the value of an object is only affected by changes within
       its lifetime: when the constructor begins, the object has an
       indeterminate value, and any changes during the lifetime of the
*************** optimizations to be performed is desired
*** 11823,11909 ****
       object, you can use this flag to disable this optimization.  To
       preserve stores before the constructor starts (e.g. because your
       operator new clears the object storage) but still treat the object
!      as dead after the destructor, you can use '-flifetime-dse=1'.  The
       default behavior can be explicitly selected with
!      '-flifetime-dse=2'.  '-flifetime-dse=0' is equivalent to
!      '-fno-lifetime-dse'.
  
! '-flive-range-shrinkage'
       Attempt to decrease register pressure through register live range
       shrinkage.  This is helpful for fast processors with small or
       moderate size register sets.
  
! '-fira-algorithm=ALGORITHM'
       Use the specified coloring algorithm for the integrated register
!      allocator.  The ALGORITHM argument can be 'priority', which
!      specifies Chow's priority coloring, or 'CB', which specifies
       Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
       implemented for all architectures, but for those targets that do
       support it, it is the default because it generates better code.
  
! '-fira-region=REGION'
       Use specified regions for the integrated register allocator.  The
       REGION argument should be one of the following:
  
!      'all'
            Use all loops as register allocation regions.  This can give
            the best results for machines with a small and/or irregular
            register set.
  
!      'mixed'
            Use all loops except for loops with small register pressure as
            the regions.  This value usually gives the best results in
            most cases and for most architectures, and is enabled by
!           default when compiling with optimization for speed ('-O',
!           '-O2', ...).
  
!      'one'
            Use all functions as a single region.  This typically results
!           in the smallest code size, and is enabled by default for '-Os'
!           or '-O0'.
  
! '-fira-hoist-pressure'
       Use IRA to evaluate register pressure in the code hoisting pass for
       decisions to hoist expressions.  This option usually results in
       smaller code, but it can slow the compiler down.
  
!      This option is enabled at level '-Os' for all targets.
  
! '-fira-loop-pressure'
       Use IRA to evaluate register pressure in loops for decisions to
       move loop invariants.  This option usually results in generation of
       faster and smaller code on machines with large register files (>=
       32 registers), but it can slow the compiler down.
  
!      This option is enabled at level '-O3' for some targets.
  
! '-fno-ira-share-save-slots'
       Disable sharing of stack slots used for saving call-used hard
       registers living through a call.  Each hard register gets a
       separate stack slot, and as a result function stack frames are
       larger.
  
! '-fno-ira-share-spill-slots'
       Disable sharing of stack slots allocated for pseudo-registers.
       Each pseudo-register that does not get a hard register gets a
       separate stack slot, and as a result function stack frames are
       larger.
  
! '-flra-remat'
       Enable CFG-sensitive rematerialization in LRA. Instead of loading
       values of spilled pseudos, LRA tries to rematerialize (recalculate)
       values if it is profitable.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fdelayed-branch'
       If supported for the target machine, attempt to reorder
       instructions to exploit instruction slots available after delayed
       branch instructions.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os', but not at '-Og'.
  
! '-fschedule-insns'
       If supported for the target machine, attempt to reorder
       instructions to eliminate execution stalls due to required data
       being unavailable.  This helps machines that have slow floating
--- 11827,11913 ----
       object, you can use this flag to disable this optimization.  To
       preserve stores before the constructor starts (e.g. because your
       operator new clears the object storage) but still treat the object
!      as dead after the destructor, you can use ‘-flifetime-dse=1’.  The
       default behavior can be explicitly selected with
!      ‘-flifetime-dse=2’.  ‘-flifetime-dse=0’ is equivalent to
!      ‘-fno-lifetime-dse’.
  
! ‘-flive-range-shrinkage’
       Attempt to decrease register pressure through register live range
       shrinkage.  This is helpful for fast processors with small or
       moderate size register sets.
  
! ‘-fira-algorithm=ALGORITHM’
       Use the specified coloring algorithm for the integrated register
!      allocator.  The ALGORITHM argument can be ‘priority’, which
!      specifies Chow's priority coloring, or ‘CB’, which specifies
       Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
       implemented for all architectures, but for those targets that do
       support it, it is the default because it generates better code.
  
! ‘-fira-region=REGION’
       Use specified regions for the integrated register allocator.  The
       REGION argument should be one of the following:
  
!      ‘all’
            Use all loops as register allocation regions.  This can give
            the best results for machines with a small and/or irregular
            register set.
  
!      ‘mixed’
            Use all loops except for loops with small register pressure as
            the regions.  This value usually gives the best results in
            most cases and for most architectures, and is enabled by
!           default when compiling with optimization for speed (‘-O’,
!           ‘-O2’, ...).
  
!      ‘one’
            Use all functions as a single region.  This typically results
!           in the smallest code size, and is enabled by default for ‘-Os’
!           or ‘-O0’.
  
! ‘-fira-hoist-pressure’
       Use IRA to evaluate register pressure in the code hoisting pass for
       decisions to hoist expressions.  This option usually results in
       smaller code, but it can slow the compiler down.
  
!      This option is enabled at level ‘-Os’ for all targets.
  
! ‘-fira-loop-pressure’
       Use IRA to evaluate register pressure in loops for decisions to
       move loop invariants.  This option usually results in generation of
       faster and smaller code on machines with large register files (>=
       32 registers), but it can slow the compiler down.
  
!      This option is enabled at level ‘-O3’ for some targets.
  
! ‘-fno-ira-share-save-slots’
       Disable sharing of stack slots used for saving call-used hard
       registers living through a call.  Each hard register gets a
       separate stack slot, and as a result function stack frames are
       larger.
  
! ‘-fno-ira-share-spill-slots’
       Disable sharing of stack slots allocated for pseudo-registers.
       Each pseudo-register that does not get a hard register gets a
       separate stack slot, and as a result function stack frames are
       larger.
  
! ‘-flra-remat’
       Enable CFG-sensitive rematerialization in LRA. Instead of loading
       values of spilled pseudos, LRA tries to rematerialize (recalculate)
       values if it is profitable.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fdelayed-branch’
       If supported for the target machine, attempt to reorder
       instructions to exploit instruction slots available after delayed
       branch instructions.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’, but not at ‘-Og’.
  
! ‘-fschedule-insns’
       If supported for the target machine, attempt to reorder
       instructions to eliminate execution stalls due to required data
       being unavailable.  This helps machines that have slow floating
*************** optimizations to be performed is desired
*** 11911,11977 ****
       be issued until the result of the load or floating-point
       instruction is required.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-fschedule-insns2'
!      Similar to '-fschedule-insns', but requests an additional pass of
       instruction scheduling after register allocation has been done.
       This is especially useful on machines with a relatively small
       number of registers and where memory load instructions take more
       than one cycle.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fno-sched-interblock'
       Disable instruction scheduling across basic blocks, which is
       normally enabled when scheduling before register allocation, i.e.
!      with '-fschedule-insns' or at '-O2' or higher.
  
! '-fno-sched-spec'
       Disable speculative motion of non-load instructions, which is
       normally enabled when scheduling before register allocation, i.e.
!      with '-fschedule-insns' or at '-O2' or higher.
  
! '-fsched-pressure'
       Enable register pressure sensitive insn scheduling before register
       allocation.  This only makes sense when scheduling before register
!      allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
       higher.  Usage of this option can improve the generated code and
       decrease its size by preventing register pressure increase above
       the number of available hard registers and subsequent spills in
       register allocation.
  
! '-fsched-spec-load'
       Allow speculative motion of some load instructions.  This only
       makes sense when scheduling before register allocation, i.e. with
!      '-fschedule-insns' or at '-O2' or higher.
  
! '-fsched-spec-load-dangerous'
       Allow speculative motion of more load instructions.  This only
       makes sense when scheduling before register allocation, i.e. with
!      '-fschedule-insns' or at '-O2' or higher.
  
! '-fsched-stalled-insns'
! '-fsched-stalled-insns=N'
       Define how many insns (if any) can be moved prematurely from the
       queue of stalled insns into the ready list during the second
!      scheduling pass.  '-fno-sched-stalled-insns' means that no insns
!      are moved prematurely, '-fsched-stalled-insns=0' means there is no
       limit on how many queued insns can be moved prematurely.
!      '-fsched-stalled-insns' without a value is equivalent to
!      '-fsched-stalled-insns=1'.
  
! '-fsched-stalled-insns-dep'
! '-fsched-stalled-insns-dep=N'
       Define how many insn groups (cycles) are examined for a dependency
       on a stalled insn that is a candidate for premature removal from
       the queue of stalled insns.  This has an effect only during the
!      second scheduling pass, and only if '-fsched-stalled-insns' is
!      used.  '-fno-sched-stalled-insns-dep' is equivalent to
!      '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
!      a value is equivalent to '-fsched-stalled-insns-dep=1'.
  
! '-fsched2-use-superblocks'
       When scheduling after register allocation, use superblock
       scheduling.  This allows motion across basic block boundaries,
       resulting in faster schedules.  This option is experimental, as not
--- 11915,11981 ----
       be issued until the result of the load or floating-point
       instruction is required.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-fschedule-insns2’
!      Similar to ‘-fschedule-insns’, but requests an additional pass of
       instruction scheduling after register allocation has been done.
       This is especially useful on machines with a relatively small
       number of registers and where memory load instructions take more
       than one cycle.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fno-sched-interblock’
       Disable instruction scheduling across basic blocks, which is
       normally enabled when scheduling before register allocation, i.e.
!      with ‘-fschedule-insns’ or at ‘-O2’ or higher.
  
! ‘-fno-sched-spec’
       Disable speculative motion of non-load instructions, which is
       normally enabled when scheduling before register allocation, i.e.
!      with ‘-fschedule-insns’ or at ‘-O2’ or higher.
  
! ‘-fsched-pressure’
       Enable register pressure sensitive insn scheduling before register
       allocation.  This only makes sense when scheduling before register
!      allocation is enabled, i.e. with ‘-fschedule-insns’ or at ‘-O2’ or
       higher.  Usage of this option can improve the generated code and
       decrease its size by preventing register pressure increase above
       the number of available hard registers and subsequent spills in
       register allocation.
  
! ‘-fsched-spec-load’
       Allow speculative motion of some load instructions.  This only
       makes sense when scheduling before register allocation, i.e. with
!      ‘-fschedule-insns’ or at ‘-O2’ or higher.
  
! ‘-fsched-spec-load-dangerous’
       Allow speculative motion of more load instructions.  This only
       makes sense when scheduling before register allocation, i.e. with
!      ‘-fschedule-insns’ or at ‘-O2’ or higher.
  
! ‘-fsched-stalled-insns’
! ‘-fsched-stalled-insns=N’
       Define how many insns (if any) can be moved prematurely from the
       queue of stalled insns into the ready list during the second
!      scheduling pass.  ‘-fno-sched-stalled-insns’ means that no insns
!      are moved prematurely, ‘-fsched-stalled-insns=0’ means there is no
       limit on how many queued insns can be moved prematurely.
!      ‘-fsched-stalled-insns’ without a value is equivalent to
!      ‘-fsched-stalled-insns=1’.
  
! ‘-fsched-stalled-insns-dep’
! ‘-fsched-stalled-insns-dep=N’
       Define how many insn groups (cycles) are examined for a dependency
       on a stalled insn that is a candidate for premature removal from
       the queue of stalled insns.  This has an effect only during the
!      second scheduling pass, and only if ‘-fsched-stalled-insns’ is
!      used.  ‘-fno-sched-stalled-insns-dep’ is equivalent to
!      ‘-fsched-stalled-insns-dep=0’.  ‘-fsched-stalled-insns-dep’ without
!      a value is equivalent to ‘-fsched-stalled-insns-dep=1’.
  
! ‘-fsched2-use-superblocks’
       When scheduling after register allocation, use superblock
       scheduling.  This allows motion across basic block boundaries,
       resulting in faster schedules.  This option is experimental, as not
*************** optimizations to be performed is desired
*** 11979,12050 ****
       to avoid unreliable results from the algorithm.
  
       This only makes sense when scheduling after register allocation,
!      i.e. with '-fschedule-insns2' or at '-O2' or higher.
  
! '-fsched-group-heuristic'
       Enable the group heuristic in the scheduler.  This heuristic favors
       the instruction that belongs to a schedule group.  This is enabled
!      by default when scheduling is enabled, i.e. with '-fschedule-insns'
!      or '-fschedule-insns2' or at '-O2' or higher.
  
! '-fsched-critical-path-heuristic'
       Enable the critical-path heuristic in the scheduler.  This
       heuristic favors instructions on the critical path.  This is
       enabled by default when scheduling is enabled, i.e. with
!      '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
  
! '-fsched-spec-insn-heuristic'
       Enable the speculative instruction heuristic in the scheduler.
       This heuristic favors speculative instructions with greater
       dependency weakness.  This is enabled by default when scheduling is
!      enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
!      '-O2' or higher.
  
! '-fsched-rank-heuristic'
       Enable the rank heuristic in the scheduler.  This heuristic favors
       the instruction belonging to a basic block with greater size or
       frequency.  This is enabled by default when scheduling is enabled,
!      i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
       higher.
  
! '-fsched-last-insn-heuristic'
       Enable the last-instruction heuristic in the scheduler.  This
       heuristic favors the instruction that is less dependent on the last
       instruction scheduled.  This is enabled by default when scheduling
!      is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
!      at '-O2' or higher.
  
! '-fsched-dep-count-heuristic'
       Enable the dependent-count heuristic in the scheduler.  This
       heuristic favors the instruction that has more instructions
       depending on it.  This is enabled by default when scheduling is
!      enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
!      '-O2' or higher.
  
! '-freschedule-modulo-scheduled-loops'
       Modulo scheduling is performed before traditional scheduling.  If a
       loop is modulo scheduled, later scheduling passes may change its
       schedule.  Use this option to control that behavior.
  
! '-fselective-scheduling'
       Schedule instructions using selective scheduling algorithm.
       Selective scheduling runs instead of the first scheduler pass.
  
! '-fselective-scheduling2'
       Schedule instructions using selective scheduling algorithm.
       Selective scheduling runs instead of the second scheduler pass.
  
! '-fsel-sched-pipelining'
       Enable software pipelining of innermost loops during selective
       scheduling.  This option has no effect unless one of
!      '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
  
! '-fsel-sched-pipelining-outer-loops'
       When pipelining loops during selective scheduling, also pipeline
       outer loops.  This option has no effect unless
!      '-fsel-sched-pipelining' is turned on.
  
! '-fsemantic-interposition'
       Some object formats, like ELF, allow interposing of symbols by the
       dynamic linker.  This means that for symbols exported from the DSO,
       the compiler cannot perform interprocedural propagation, inlining
--- 11983,12054 ----
       to avoid unreliable results from the algorithm.
  
       This only makes sense when scheduling after register allocation,
!      i.e. with ‘-fschedule-insns2’ or at ‘-O2’ or higher.
  
! ‘-fsched-group-heuristic’
       Enable the group heuristic in the scheduler.  This heuristic favors
       the instruction that belongs to a schedule group.  This is enabled
!      by default when scheduling is enabled, i.e. with ‘-fschedule-insns’
!      or ‘-fschedule-insns2’ or at ‘-O2’ or higher.
  
! ‘-fsched-critical-path-heuristic’
       Enable the critical-path heuristic in the scheduler.  This
       heuristic favors instructions on the critical path.  This is
       enabled by default when scheduling is enabled, i.e. with
!      ‘-fschedule-insns’ or ‘-fschedule-insns2’ or at ‘-O2’ or higher.
  
! ‘-fsched-spec-insn-heuristic’
       Enable the speculative instruction heuristic in the scheduler.
       This heuristic favors speculative instructions with greater
       dependency weakness.  This is enabled by default when scheduling is
!      enabled, i.e. with ‘-fschedule-insns’ or ‘-fschedule-insns2’ or at
!      ‘-O2’ or higher.
  
! ‘-fsched-rank-heuristic’
       Enable the rank heuristic in the scheduler.  This heuristic favors
       the instruction belonging to a basic block with greater size or
       frequency.  This is enabled by default when scheduling is enabled,
!      i.e. with ‘-fschedule-insns’ or ‘-fschedule-insns2’ or at ‘-O2’ or
       higher.
  
! ‘-fsched-last-insn-heuristic’
       Enable the last-instruction heuristic in the scheduler.  This
       heuristic favors the instruction that is less dependent on the last
       instruction scheduled.  This is enabled by default when scheduling
!      is enabled, i.e. with ‘-fschedule-insns’ or ‘-fschedule-insns2’ or
!      at ‘-O2’ or higher.
  
! ‘-fsched-dep-count-heuristic’
       Enable the dependent-count heuristic in the scheduler.  This
       heuristic favors the instruction that has more instructions
       depending on it.  This is enabled by default when scheduling is
!      enabled, i.e. with ‘-fschedule-insns’ or ‘-fschedule-insns2’ or at
!      ‘-O2’ or higher.
  
! ‘-freschedule-modulo-scheduled-loops’
       Modulo scheduling is performed before traditional scheduling.  If a
       loop is modulo scheduled, later scheduling passes may change its
       schedule.  Use this option to control that behavior.
  
! ‘-fselective-scheduling’
       Schedule instructions using selective scheduling algorithm.
       Selective scheduling runs instead of the first scheduler pass.
  
! ‘-fselective-scheduling2’
       Schedule instructions using selective scheduling algorithm.
       Selective scheduling runs instead of the second scheduler pass.
  
! ‘-fsel-sched-pipelining’
       Enable software pipelining of innermost loops during selective
       scheduling.  This option has no effect unless one of
!      ‘-fselective-scheduling’ or ‘-fselective-scheduling2’ is turned on.
  
! ‘-fsel-sched-pipelining-outer-loops’
       When pipelining loops during selective scheduling, also pipeline
       outer loops.  This option has no effect unless
!      ‘-fsel-sched-pipelining’ is turned on.
  
! ‘-fsemantic-interposition’
       Some object formats, like ELF, allow interposing of symbols by the
       dynamic linker.  This means that for symbols exported from the DSO,
       the compiler cannot perform interprocedural propagation, inlining
*************** optimizations to be performed is desired
*** 12052,12058 ****
       variable in question may change.  While this feature is useful, for
       example, to rewrite memory allocation functions by a debugging
       implementation, it is expensive in the terms of code quality.  With
!      '-fno-semantic-interposition' the compiler assumes that if
       interposition happens for functions the overwriting function will
       have precisely the same semantics (and side effects).  Similarly if
       interposition happens for variables, the constructor of the
--- 12056,12062 ----
       variable in question may change.  While this feature is useful, for
       example, to rewrite memory allocation functions by a debugging
       implementation, it is expensive in the terms of code quality.  With
!      ‘-fno-semantic-interposition’ the compiler assumes that if
       interposition happens for functions the overwriting function will
       have precisely the same semantics (and side effects).  Similarly if
       interposition happens for variables, the constructor of the
*************** optimizations to be performed is desired
*** 12061,12078 ****
       interposition to change semantics) and for symbols explicitly
       declared weak.
  
! '-fshrink-wrap'
       Emit function prologues only before parts of the function that need
       it, rather than at the top of the function.  This flag is enabled
!      by default at '-O' and higher.
  
! '-fshrink-wrap-separate'
       Shrink-wrap separate parts of the prologue and epilogue separately,
       so that those parts are only executed when needed.  This option is
!      on by default, but has no effect unless '-fshrink-wrap' is also
       turned on and the target supports this.
  
! '-fcaller-saves'
       Enable allocation of values to registers that are clobbered by
       function calls, by emitting extra instructions to save and restore
       the registers around such calls.  Such allocation is done only when
--- 12065,12082 ----
       interposition to change semantics) and for symbols explicitly
       declared weak.
  
! ‘-fshrink-wrap’
       Emit function prologues only before parts of the function that need
       it, rather than at the top of the function.  This flag is enabled
!      by default at ‘-O’ and higher.
  
! ‘-fshrink-wrap-separate’
       Shrink-wrap separate parts of the prologue and epilogue separately,
       so that those parts are only executed when needed.  This option is
!      on by default, but has no effect unless ‘-fshrink-wrap’ is also
       turned on and the target supports this.
  
! ‘-fcaller-saves’
       Enable allocation of values to registers that are clobbered by
       function calls, by emitting extra instructions to save and restore
       the registers around such calls.  Such allocation is done only when
*************** optimizations to be performed is desired
*** 12082,12226 ****
       usually those which have no call-preserved registers to use
       instead.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fcombine-stack-adjustments'
       Tracks stack adjustments (pushes and pops) and stack memory
       references and then tries to find ways to combine them.
  
!      Enabled by default at '-O1' and higher.
  
! '-fipa-ra'
       Use caller save registers for allocation if those registers are not
       used by any called function.  In that case it is not necessary to
       save and restore them around calls.  This is only possible if
       called functions are part of same compilation unit as current
       function and they are compiled before it.
  
!      Enabled at levels '-O2', '-O3', '-Os', however the option is
       disabled if generated code will be instrumented for profiling
!      ('-p', or '-pg') or if callee's register usage cannot be known
       exactly (this happens on targets that do not expose prologues and
       epilogues in RTL).
  
! '-fconserve-stack'
       Attempt to minimize stack usage.  The compiler attempts to use less
       stack space, even if that makes the program slower.  This option
!      implies setting the 'large-stack-frame' parameter to 100 and the
!      'large-stack-frame-growth' parameter to 400.
  
! '-ftree-reassoc'
       Perform reassociation on trees.  This flag is enabled by default at
!      '-O1' and higher.
  
! '-fcode-hoisting'
       Perform code hoisting.  Code hoisting tries to move the evaluation
       of expressions executed on all paths to the function exit as early
       as possible.  This is especially useful as a code size
       optimization, but it often helps for code speed as well.  This flag
!      is enabled by default at '-O2' and higher.
  
! '-ftree-pre'
       Perform partial redundancy elimination (PRE) on trees.  This flag
!      is enabled by default at '-O2' and '-O3'.
  
! '-ftree-partial-pre'
       Make partial redundancy elimination (PRE) more aggressive.  This
!      flag is enabled by default at '-O3'.
  
! '-ftree-forwprop'
       Perform forward propagation on trees.  This flag is enabled by
!      default at '-O1' and higher.
  
! '-ftree-fre'
       Perform full redundancy elimination (FRE) on trees.  The difference
       between FRE and PRE is that FRE only considers expressions that are
       computed on all paths leading to the redundant computation.  This
       analysis is faster than PRE, though it exposes fewer redundancies.
!      This flag is enabled by default at '-O1' and higher.
  
! '-ftree-phiprop'
       Perform hoisting of loads from conditional pointers on trees.  This
!      pass is enabled by default at '-O1' and higher.
  
! '-fhoist-adjacent-loads'
       Speculatively hoist loads from both branches of an if-then-else if
       the loads are from adjacent locations in the same structure and the
       target architecture has a conditional move instruction.  This flag
!      is enabled by default at '-O2' and higher.
  
! '-ftree-copy-prop'
       Perform copy propagation on trees.  This pass eliminates
       unnecessary copy operations.  This flag is enabled by default at
!      '-O1' and higher.
  
! '-fipa-pure-const'
       Discover which functions are pure or constant.  Enabled by default
!      at '-O1' and higher.
  
! '-fipa-reference'
       Discover which static variables do not escape the compilation unit.
!      Enabled by default at '-O1' and higher.
  
! '-fipa-reference-addressable'
       Discover read-only, write-only and non-addressable static
!      variables.  Enabled by default at '-O1' and higher.
  
! '-fipa-stack-alignment'
       Reduce stack alignment on call sites if possible.  Enabled by
       default.
  
! '-fipa-pta'
       Perform interprocedural pointer analysis and interprocedural
       modification and reference analysis.  This option can cause
       excessive memory and compile-time usage on large compilation units.
       It is not enabled by default at any optimization level.
  
! '-fipa-profile'
       Perform interprocedural profile propagation.  The functions called
       only from cold functions are marked as cold.  Also functions
!      executed once (such as 'cold', 'noreturn', static constructors or
       destructors) are identified.  Cold functions and loop less parts of
       functions executed once are then optimized for size.  Enabled by
!      default at '-O1' and higher.
  
! '-fipa-modref'
       Perform interprocedural mod/ref analysis.  This optimization
       analyzes the side effects of functions (memory locations that are
       modified or referenced) and enables better optimization across the
!      function call boundary.  This flag is enabled by default at '-O1'
       and higher.
  
! '-fipa-cp'
       Perform interprocedural constant propagation.  This optimization
       analyzes the program to determine when values passed to functions
       are constants and then optimizes accordingly.  This optimization
       can substantially increase performance if the application has
       constants passed to functions.  This flag is enabled by default at
!      '-O2', '-Os' and '-O3'.  It is also enabled by '-fprofile-use' and
!      '-fauto-profile'.
  
! '-fipa-cp-clone'
       Perform function cloning to make interprocedural constant
       propagation stronger.  When enabled, interprocedural constant
       propagation performs function cloning when externally visible
       function can be called with constant arguments.  Because this
       optimization can create multiple copies of functions, it may
!      significantly increase code size (see '--param
!      ipa-cp-unit-growth=VALUE').  This flag is enabled by default at
!      '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-fipa-bit-cp'
       When enabled, perform interprocedural bitwise constant propagation.
!      This flag is enabled by default at '-O2' and by '-fprofile-use' and
!      '-fauto-profile'.  It requires that '-fipa-cp' is enabled.
  
! '-fipa-vrp'
       When enabled, perform interprocedural propagation of value ranges.
!      This flag is enabled by default at '-O2'.  It requires that
!      '-fipa-cp' is enabled.
  
! '-fipa-icf'
       Perform Identical Code Folding for functions and read-only
       variables.  The optimization reduces code size and may disturb
       unwind stacks by replacing a function by equivalent one with a
--- 12086,12230 ----
       usually those which have no call-preserved registers to use
       instead.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fcombine-stack-adjustments’
       Tracks stack adjustments (pushes and pops) and stack memory
       references and then tries to find ways to combine them.
  
!      Enabled by default at ‘-O1’ and higher.
  
! ‘-fipa-ra’
       Use caller save registers for allocation if those registers are not
       used by any called function.  In that case it is not necessary to
       save and restore them around calls.  This is only possible if
       called functions are part of same compilation unit as current
       function and they are compiled before it.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’, however the option is
       disabled if generated code will be instrumented for profiling
!      (‘-p’, or ‘-pg’) or if callee's register usage cannot be known
       exactly (this happens on targets that do not expose prologues and
       epilogues in RTL).
  
! ‘-fconserve-stack’
       Attempt to minimize stack usage.  The compiler attempts to use less
       stack space, even if that makes the program slower.  This option
!      implies setting the ‘large-stack-frame’ parameter to 100 and the
!      ‘large-stack-frame-growth’ parameter to 400.
  
! ‘-ftree-reassoc’
       Perform reassociation on trees.  This flag is enabled by default at
!      ‘-O1’ and higher.
  
! ‘-fcode-hoisting’
       Perform code hoisting.  Code hoisting tries to move the evaluation
       of expressions executed on all paths to the function exit as early
       as possible.  This is especially useful as a code size
       optimization, but it often helps for code speed as well.  This flag
!      is enabled by default at ‘-O2’ and higher.
  
! ‘-ftree-pre’
       Perform partial redundancy elimination (PRE) on trees.  This flag
!      is enabled by default at ‘-O2’ and ‘-O3’.
  
! ‘-ftree-partial-pre’
       Make partial redundancy elimination (PRE) more aggressive.  This
!      flag is enabled by default at ‘-O3’.
  
! ‘-ftree-forwprop’
       Perform forward propagation on trees.  This flag is enabled by
!      default at ‘-O1’ and higher.
  
! ‘-ftree-fre’
       Perform full redundancy elimination (FRE) on trees.  The difference
       between FRE and PRE is that FRE only considers expressions that are
       computed on all paths leading to the redundant computation.  This
       analysis is faster than PRE, though it exposes fewer redundancies.
!      This flag is enabled by default at ‘-O1’ and higher.
  
! ‘-ftree-phiprop’
       Perform hoisting of loads from conditional pointers on trees.  This
!      pass is enabled by default at ‘-O1’ and higher.
  
! ‘-fhoist-adjacent-loads’
       Speculatively hoist loads from both branches of an if-then-else if
       the loads are from adjacent locations in the same structure and the
       target architecture has a conditional move instruction.  This flag
!      is enabled by default at ‘-O2’ and higher.
  
! ‘-ftree-copy-prop’
       Perform copy propagation on trees.  This pass eliminates
       unnecessary copy operations.  This flag is enabled by default at
!      ‘-O1’ and higher.
  
! ‘-fipa-pure-const’
       Discover which functions are pure or constant.  Enabled by default
!      at ‘-O1’ and higher.
  
! ‘-fipa-reference’
       Discover which static variables do not escape the compilation unit.
!      Enabled by default at ‘-O1’ and higher.
  
! ‘-fipa-reference-addressable’
       Discover read-only, write-only and non-addressable static
!      variables.  Enabled by default at ‘-O1’ and higher.
  
! ‘-fipa-stack-alignment’
       Reduce stack alignment on call sites if possible.  Enabled by
       default.
  
! ‘-fipa-pta’
       Perform interprocedural pointer analysis and interprocedural
       modification and reference analysis.  This option can cause
       excessive memory and compile-time usage on large compilation units.
       It is not enabled by default at any optimization level.
  
! ‘-fipa-profile’
       Perform interprocedural profile propagation.  The functions called
       only from cold functions are marked as cold.  Also functions
!      executed once (such as ‘cold’, ‘noreturn’, static constructors or
       destructors) are identified.  Cold functions and loop less parts of
       functions executed once are then optimized for size.  Enabled by
!      default at ‘-O1’ and higher.
  
! ‘-fipa-modref’
       Perform interprocedural mod/ref analysis.  This optimization
       analyzes the side effects of functions (memory locations that are
       modified or referenced) and enables better optimization across the
!      function call boundary.  This flag is enabled by default at ‘-O1’
       and higher.
  
! ‘-fipa-cp’
       Perform interprocedural constant propagation.  This optimization
       analyzes the program to determine when values passed to functions
       are constants and then optimizes accordingly.  This optimization
       can substantially increase performance if the application has
       constants passed to functions.  This flag is enabled by default at
!      ‘-O2’, ‘-Os’ and ‘-O3’.  It is also enabled by ‘-fprofile-use’ and
!      ‘-fauto-profile’.
  
! ‘-fipa-cp-clone’
       Perform function cloning to make interprocedural constant
       propagation stronger.  When enabled, interprocedural constant
       propagation performs function cloning when externally visible
       function can be called with constant arguments.  Because this
       optimization can create multiple copies of functions, it may
!      significantly increase code size (see ‘--param
!      ipa-cp-unit-growth=VALUE’).  This flag is enabled by default at
!      ‘-O3’.  It is also enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-fipa-bit-cp’
       When enabled, perform interprocedural bitwise constant propagation.
!      This flag is enabled by default at ‘-O2’ and by ‘-fprofile-use’ and
!      ‘-fauto-profile’.  It requires that ‘-fipa-cp’ is enabled.
  
! ‘-fipa-vrp’
       When enabled, perform interprocedural propagation of value ranges.
!      This flag is enabled by default at ‘-O2’.  It requires that
!      ‘-fipa-cp’ is enabled.
  
! ‘-fipa-icf’
       Perform Identical Code Folding for functions and read-only
       variables.  The optimization reduces code size and may disturb
       unwind stacks by replacing a function by equivalent one with a
*************** optimizations to be performed is desired
*** 12232,12240 ****
       optimizations are not same - there are equivalences that are found
       only by GCC and equivalences found only by Gold.
  
!      This flag is enabled by default at '-O2' and '-Os'.
  
! '-flive-patching=LEVEL'
       Control GCC's optimizations to produce output suitable for
       live-patching.
  
--- 12236,12244 ----
       optimizations are not same - there are equivalences that are found
       only by GCC and equivalences found only by Gold.
  
!      This flag is enabled by default at ‘-O2’ and ‘-Os’.
  
! ‘-flive-patching=LEVEL’
       Control GCC's optimizations to produce output suitable for
       live-patching.
  
*************** optimizations to be performed is desired
*** 12259,12265 ****
  
       The LEVEL argument should be one of the following:
  
!      'inline-clone'
  
            Only enable inlining and cloning optimizations, which includes
            inlining, cloning, interprocedural scalar replacement of
--- 12263,12269 ----
  
       The LEVEL argument should be one of the following:
  
!      ‘inline-clone’
  
            Only enable inlining and cloning optimizations, which includes
            inlining, cloning, interprocedural scalar replacement of
*************** optimizations to be performed is desired
*** 12267,12273 ****
            function, all its callers and its clones' callers are
            impacted, therefore need to be patched as well.
  
!           '-flive-patching=inline-clone' disables the following
            optimization flags:
                 -fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra
                 -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
--- 12271,12277 ----
            function, all its callers and its clones' callers are
            impacted, therefore need to be patched as well.
  
!           ‘-flive-patching=inline-clone’ disables the following
            optimization flags:
                 -fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra
                 -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
*************** optimizations to be performed is desired
*** 12275,12446 ****
                 -fipa-reference-addressable
                 -fipa-stack-alignment -fipa-modref
  
!      'inline-only-static'
  
            Only enable inlining of static functions.  As a result, when
            patching a static function, all its callers are impacted and
            so need to be patched as well.
  
            In addition to all the flags that
!           '-flive-patching=inline-clone' disables,
!           '-flive-patching=inline-only-static' disables the following
            additional optimization flags:
                 -fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp
  
!      When '-flive-patching' is specified without any value, the default
       value is INLINE-CLONE.
  
       This flag is disabled by default.
  
!      Note that '-flive-patching' is not supported with link-time
!      optimization ('-flto').
  
! '-fisolate-erroneous-paths-dereference'
       Detect paths that trigger erroneous or undefined behavior due to
       dereferencing a null pointer.  Isolate those paths from the main
       control flow and turn the statement with erroneous or undefined
!      behavior into a trap.  This flag is enabled by default at '-O2' and
!      higher and depends on '-fdelete-null-pointer-checks' also being
       enabled.
  
! '-fisolate-erroneous-paths-attribute'
       Detect paths that trigger erroneous or undefined behavior due to a
!      null value being used in a way forbidden by a 'returns_nonnull' or
!      'nonnull' attribute.  Isolate those paths from the main control
       flow and turn the statement with erroneous or undefined behavior
       into a trap.  This is not currently enabled, but may be enabled by
!      '-O2' in the future.
  
! '-ftree-sink'
       Perform forward store motion on trees.  This flag is enabled by
!      default at '-O1' and higher.
  
! '-ftree-bit-ccp'
       Perform sparse conditional bit constant propagation on trees and
       propagate pointer alignment information.  This pass only operates
!      on local scalar variables and is enabled by default at '-O1' and
!      higher, except for '-Og'.  It requires that '-ftree-ccp' is
       enabled.
  
! '-ftree-ccp'
       Perform sparse conditional constant propagation (CCP) on trees.
       This pass only operates on local scalar variables and is enabled by
!      default at '-O1' and higher.
  
! '-fssa-backprop'
       Propagate information about uses of a value up the definition chain
       in order to simplify the definitions.  For example, this pass
       strips sign operations if the sign of a value never matters.  The
!      flag is enabled by default at '-O1' and higher.
  
! '-fssa-phiopt'
       Perform pattern matching on SSA PHI nodes to optimize conditional
!      code.  This pass is enabled by default at '-O1' and higher, except
!      for '-Og'.
  
! '-ftree-switch-conversion'
       Perform conversion of simple initializations in a switch to
       initializations from a scalar array.  This flag is enabled by
!      default at '-O2' and higher.
  
! '-ftree-tail-merge'
       Look for identical code sequences.  When found, replace one with a
       jump to the other.  This optimization is known as tail merging or
!      cross jumping.  This flag is enabled by default at '-O2' and
       higher.  The compilation time in this pass can be limited using
!      'max-tail-merge-comparisons' parameter and
!      'max-tail-merge-iterations' parameter.
  
! '-ftree-dce'
       Perform dead code elimination (DCE) on trees.  This flag is enabled
!      by default at '-O1' and higher.
  
! '-ftree-builtin-call-dce'
       Perform conditional dead code elimination (DCE) for calls to
!      built-in functions that may set 'errno' but are otherwise free of
!      side effects.  This flag is enabled by default at '-O2' and higher
!      if '-Os' is not also specified.
  
! '-ffinite-loops'
       Assume that a loop with an exit will eventually take the exit and
       not loop indefinitely.  This allows the compiler to remove loops
       that otherwise have no side-effects, not considering eventual
       endless looping as such.
  
!      This option is enabled by default at '-O2' for C++ with -std=c++11
       or higher.
  
! '-ftree-dominator-opts'
       Perform a variety of simple scalar cleanups (constant/copy
       propagation, redundancy elimination, range propagation and
       expression simplification) based on a dominator tree traversal.
       This also performs jump threading (to reduce jumps to jumps).  This
!      flag is enabled by default at '-O1' and higher.
  
! '-ftree-dse'
       Perform dead store elimination (DSE) on trees.  A dead store is a
       store into a memory location that is later overwritten by another
       store without any intervening loads.  In this case the earlier
!      store can be deleted.  This flag is enabled by default at '-O1' and
       higher.
  
! '-ftree-ch'
       Perform loop header copying on trees.  This is beneficial since it
       increases effectiveness of code motion optimizations.  It also
!      saves one jump.  This flag is enabled by default at '-O1' and
!      higher.  It is not enabled for '-Os', since it usually increases
       code size.
  
! '-ftree-loop-optimize'
       Perform loop optimizations on trees.  This flag is enabled by
!      default at '-O1' and higher.
  
! '-ftree-loop-linear'
! '-floop-strip-mine'
! '-floop-block'
!      Perform loop nest optimizations.  Same as '-floop-nest-optimize'.
       To use this code transformation, GCC has to be configured with
!      '--with-isl' to enable the Graphite loop transformation
       infrastructure.
  
! '-fgraphite-identity'
       Enable the identity transformation for graphite.  For every SCoP we
       generate the polyhedral representation and transform it back to
!      gimple.  Using '-fgraphite-identity' we can check the costs or
       benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
       minimal optimizations are also performed by the code generator isl,
       like index splitting and dead code elimination in loops.
  
! '-floop-nest-optimize'
       Enable the isl based loop nest optimizer.  This is a generic loop
       nest optimizer based on the Pluto optimization algorithms.  It
       calculates a loop structure optimized for data-locality and
       parallelism.  This option is experimental.
  
! '-floop-parallelize-all'
       Use the Graphite data dependence analysis to identify loops that
       can be parallelized.  Parallelize all the loops that can be
       analyzed to not contain loop carried dependences without checking
       that it is profitable to parallelize the loops.
  
! '-ftree-coalesce-vars'
       While transforming the program out of the SSA representation,
       attempt to reduce copying by coalescing versions of different
       user-defined variables, instead of just compiler temporaries.  This
       may severely limit the ability to debug an optimized program
!      compiled with '-fno-var-tracking-assignments'.  In the negated
       form, this flag prevents SSA coalescing of user variables.  This
       option is enabled by default if optimization is enabled, and it
       does very little otherwise.
  
! '-ftree-loop-if-convert'
       Attempt to transform conditional jumps in the innermost loops to
       branch-less equivalents.  The intent is to remove control-flow from
       the innermost loops in order to improve the ability of the
       vectorization pass to handle these loops.  This is enabled by
       default if vectorization is enabled.
  
! '-ftree-loop-distribution'
       Perform loop distribution.  This flag can improve cache performance
       on big loop bodies and allow further loop optimizations, like
       parallelization or vectorization, to take place.  For example, the
--- 12279,12450 ----
                 -fipa-reference-addressable
                 -fipa-stack-alignment -fipa-modref
  
!      ‘inline-only-static’
  
            Only enable inlining of static functions.  As a result, when
            patching a static function, all its callers are impacted and
            so need to be patched as well.
  
            In addition to all the flags that
!           ‘-flive-patching=inline-clone’ disables,
!           ‘-flive-patching=inline-only-static’ disables the following
            additional optimization flags:
                 -fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp
  
!      When ‘-flive-patching’ is specified without any value, the default
       value is INLINE-CLONE.
  
       This flag is disabled by default.
  
!      Note that ‘-flive-patching’ is not supported with link-time
!      optimization (‘-flto’).
  
! ‘-fisolate-erroneous-paths-dereference’
       Detect paths that trigger erroneous or undefined behavior due to
       dereferencing a null pointer.  Isolate those paths from the main
       control flow and turn the statement with erroneous or undefined
!      behavior into a trap.  This flag is enabled by default at ‘-O2’ and
!      higher and depends on ‘-fdelete-null-pointer-checks’ also being
       enabled.
  
! ‘-fisolate-erroneous-paths-attribute’
       Detect paths that trigger erroneous or undefined behavior due to a
!      null value being used in a way forbidden by a ‘returns_nonnull’ or
!      ‘nonnull’ attribute.  Isolate those paths from the main control
       flow and turn the statement with erroneous or undefined behavior
       into a trap.  This is not currently enabled, but may be enabled by
!      ‘-O2’ in the future.
  
! ‘-ftree-sink’
       Perform forward store motion on trees.  This flag is enabled by
!      default at ‘-O1’ and higher.
  
! ‘-ftree-bit-ccp’
       Perform sparse conditional bit constant propagation on trees and
       propagate pointer alignment information.  This pass only operates
!      on local scalar variables and is enabled by default at ‘-O1’ and
!      higher, except for ‘-Og’.  It requires that ‘-ftree-ccp’ is
       enabled.
  
! ‘-ftree-ccp’
       Perform sparse conditional constant propagation (CCP) on trees.
       This pass only operates on local scalar variables and is enabled by
!      default at ‘-O1’ and higher.
  
! ‘-fssa-backprop’
       Propagate information about uses of a value up the definition chain
       in order to simplify the definitions.  For example, this pass
       strips sign operations if the sign of a value never matters.  The
!      flag is enabled by default at ‘-O1’ and higher.
  
! ‘-fssa-phiopt’
       Perform pattern matching on SSA PHI nodes to optimize conditional
!      code.  This pass is enabled by default at ‘-O1’ and higher, except
!      for ‘-Og’.
  
! ‘-ftree-switch-conversion’
       Perform conversion of simple initializations in a switch to
       initializations from a scalar array.  This flag is enabled by
!      default at ‘-O2’ and higher.
  
! ‘-ftree-tail-merge’
       Look for identical code sequences.  When found, replace one with a
       jump to the other.  This optimization is known as tail merging or
!      cross jumping.  This flag is enabled by default at ‘-O2’ and
       higher.  The compilation time in this pass can be limited using
!      ‘max-tail-merge-comparisons’ parameter and
!      ‘max-tail-merge-iterations’ parameter.
  
! ‘-ftree-dce’
       Perform dead code elimination (DCE) on trees.  This flag is enabled
!      by default at ‘-O1’ and higher.
  
! ‘-ftree-builtin-call-dce’
       Perform conditional dead code elimination (DCE) for calls to
!      built-in functions that may set ‘errno’ but are otherwise free of
!      side effects.  This flag is enabled by default at ‘-O2’ and higher
!      if ‘-Os’ is not also specified.
  
! ‘-ffinite-loops’
       Assume that a loop with an exit will eventually take the exit and
       not loop indefinitely.  This allows the compiler to remove loops
       that otherwise have no side-effects, not considering eventual
       endless looping as such.
  
!      This option is enabled by default at ‘-O2’ for C++ with -std=c++11
       or higher.
  
! ‘-ftree-dominator-opts’
       Perform a variety of simple scalar cleanups (constant/copy
       propagation, redundancy elimination, range propagation and
       expression simplification) based on a dominator tree traversal.
       This also performs jump threading (to reduce jumps to jumps).  This
!      flag is enabled by default at ‘-O1’ and higher.
  
! ‘-ftree-dse’
       Perform dead store elimination (DSE) on trees.  A dead store is a
       store into a memory location that is later overwritten by another
       store without any intervening loads.  In this case the earlier
!      store can be deleted.  This flag is enabled by default at ‘-O1’ and
       higher.
  
! ‘-ftree-ch’
       Perform loop header copying on trees.  This is beneficial since it
       increases effectiveness of code motion optimizations.  It also
!      saves one jump.  This flag is enabled by default at ‘-O1’ and
!      higher.  It is not enabled for ‘-Os’, since it usually increases
       code size.
  
! ‘-ftree-loop-optimize’
       Perform loop optimizations on trees.  This flag is enabled by
!      default at ‘-O1’ and higher.
  
! ‘-ftree-loop-linear’
! ‘-floop-strip-mine’
! ‘-floop-block’
!      Perform loop nest optimizations.  Same as ‘-floop-nest-optimize’.
       To use this code transformation, GCC has to be configured with
!      ‘--with-isl’ to enable the Graphite loop transformation
       infrastructure.
  
! ‘-fgraphite-identity’
       Enable the identity transformation for graphite.  For every SCoP we
       generate the polyhedral representation and transform it back to
!      gimple.  Using ‘-fgraphite-identity’ we can check the costs or
       benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
       minimal optimizations are also performed by the code generator isl,
       like index splitting and dead code elimination in loops.
  
! ‘-floop-nest-optimize’
       Enable the isl based loop nest optimizer.  This is a generic loop
       nest optimizer based on the Pluto optimization algorithms.  It
       calculates a loop structure optimized for data-locality and
       parallelism.  This option is experimental.
  
! ‘-floop-parallelize-all’
       Use the Graphite data dependence analysis to identify loops that
       can be parallelized.  Parallelize all the loops that can be
       analyzed to not contain loop carried dependences without checking
       that it is profitable to parallelize the loops.
  
! ‘-ftree-coalesce-vars’
       While transforming the program out of the SSA representation,
       attempt to reduce copying by coalescing versions of different
       user-defined variables, instead of just compiler temporaries.  This
       may severely limit the ability to debug an optimized program
!      compiled with ‘-fno-var-tracking-assignments’.  In the negated
       form, this flag prevents SSA coalescing of user variables.  This
       option is enabled by default if optimization is enabled, and it
       does very little otherwise.
  
! ‘-ftree-loop-if-convert’
       Attempt to transform conditional jumps in the innermost loops to
       branch-less equivalents.  The intent is to remove control-flow from
       the innermost loops in order to improve the ability of the
       vectorization pass to handle these loops.  This is enabled by
       default if vectorization is enabled.
  
! ‘-ftree-loop-distribution’
       Perform loop distribution.  This flag can improve cache performance
       on big loop bodies and allow further loop optimizations, like
       parallelization or vectorization, to take place.  For example, the
*************** optimizations to be performed is desired
*** 12456,12468 ****
            DO I = 1, N
               D(I) = E(I) * F
            ENDDO
!      This flag is enabled by default at '-O3'.  It is also enabled by
!      '-fprofile-use' and '-fauto-profile'.
  
! '-ftree-loop-distribute-patterns'
       Perform loop distribution of patterns that can be code generated
!      with calls to a library.  This flag is enabled by default at '-O2'
!      and higher, and by '-fprofile-use' and '-fauto-profile'.
  
       This pass distributes the initialization loops and generates a call
       to memset zero.  For example, the loop
--- 12460,12472 ----
            DO I = 1, N
               D(I) = E(I) * F
            ENDDO
!      This flag is enabled by default at ‘-O3’.  It is also enabled by
!      ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-ftree-loop-distribute-patterns’
       Perform loop distribution of patterns that can be code generated
!      with calls to a library.  This flag is enabled by default at ‘-O2’
!      and higher, and by ‘-fprofile-use’ and ‘-fauto-profile’.
  
       This pass distributes the initialization loops and generates a call
       to memset zero.  For example, the loop
*************** optimizations to be performed is desired
*** 12480,12486 ****
       and the initialization loop is transformed into a call to memset
       zero.
  
! '-floop-interchange'
       Perform loop interchange outside of graphite.  This flag can
       improve cache performance on loop nest and allow further loop
       optimizations, like vectorization, to take place.  For example, the
--- 12484,12490 ----
       and the initialization loop is transformed into a call to memset
       zero.
  
! ‘-floop-interchange’
       Perform loop interchange outside of graphite.  This flag can
       improve cache performance on loop nest and allow further loop
       optimizations, like vectorization, to take place.  For example, the
*************** optimizations to be performed is desired
*** 12494,12614 ****
              for (int k = 0; k < N; k++)
                for (int j = 0; j < N; j++)
                  c[i][j] = c[i][j] + a[i][k]*b[k][j];
!      This flag is enabled by default at '-O3'.  It is also enabled by
!      '-fprofile-use' and '-fauto-profile'.
  
! '-floop-unroll-and-jam'
       Apply unroll and jam transformations on feasible loops.  In a loop
       nest this unrolls the outer loop by some factor and fuses the
       resulting multiple inner loops.  This flag is enabled by default at
!      '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-ftree-loop-im'
       Perform loop invariant motion on trees.  This pass moves only
       invariants that are hard to handle at RTL level (function calls,
       operations that expand to nontrivial sequences of insns).  With
!      '-funswitch-loops' it also moves operands of conditions that are
       invariant out of the loop, so that we can use just trivial
       invariantness analysis in loop unswitching.  The pass also includes
       store motion.
  
! '-ftree-loop-ivcanon'
       Create a canonical counter for number of iterations in loops for
       which determining number of iterations requires complicated
       analysis.  Later optimizations then may determine the number
       easily.  Useful especially in connection with unrolling.
  
! '-ftree-scev-cprop'
       Perform final value replacement.  If a variable is modified in a
       loop in such a way that its value when exiting the loop can be
       determined using only its initial value and the number of loop
       iterations, replace uses of the final value by such a computation,
       provided it is sufficiently cheap.  This reduces data dependencies
!      and may allow further simplifications.  Enabled by default at '-O1'
       and higher.
  
! '-fivopts'
       Perform induction variable optimizations (strength reduction,
       induction variable merging and induction variable elimination) on
       trees.
  
! '-ftree-parallelize-loops=n'
       Parallelize loops, i.e., split their iteration space to run in n
       threads.  This is only possible for loops whose iterations are
       independent and can be arbitrarily reordered.  The optimization is
       only profitable on multiprocessor machines, for loops that are
       CPU-intensive, rather than constrained e.g. by memory bandwidth.
!      This option implies '-pthread', and thus is only supported on
!      targets that have support for '-pthread'.
  
! '-ftree-pta'
       Perform function-local points-to analysis on trees.  This flag is
!      enabled by default at '-O1' and higher, except for '-Og'.
  
! '-ftree-sra'
       Perform scalar replacement of aggregates.  This pass replaces
       structure references with scalars to prevent committing structures
!      to memory too early.  This flag is enabled by default at '-O1' and
!      higher, except for '-Og'.
  
! '-fstore-merging'
       Perform merging of narrow stores to consecutive memory addresses.
       This pass merges contiguous stores of immediate values narrower
       than a word into fewer wider stores to reduce the number of
!      instructions.  This is enabled by default at '-O2' and higher as
!      well as '-Os'.
  
! '-ftree-ter'
       Perform temporary expression replacement during the SSA->normal
       phase.  Single use/single def temporaries are replaced at their use
       location with their defining expression.  This results in
       non-GIMPLE code, but gives the expanders much more complex trees to
       work on resulting in better RTL generation.  This is enabled by
!      default at '-O1' and higher.
  
! '-ftree-slsr'
       Perform straight-line strength reduction on trees.  This recognizes
       related expressions involving multiplications and replaces them by
       less expensive calculations when possible.  This is enabled by
!      default at '-O1' and higher.
  
! '-ftree-vectorize'
       Perform vectorization on trees.  This flag enables
!      '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
       explicitly specified.
  
! '-ftree-loop-vectorize'
       Perform loop vectorization on trees.  This flag is enabled by
!      default at '-O2' and by '-ftree-vectorize', '-fprofile-use', and
!      '-fauto-profile'.
  
! '-ftree-slp-vectorize'
       Perform basic block vectorization on trees.  This flag is enabled
!      by default at '-O2' and by '-ftree-vectorize', '-fprofile-use', and
!      '-fauto-profile'.
  
! '-ftrivial-auto-var-init=CHOICE'
       Initialize automatic variables with either a pattern or with zeroes
       to increase the security and predictability of a program by
       preventing uninitialized memory disclosure and use.  GCC still
       considers an automatic variable that doesn't have an explicit
!      initializer as uninitialized, '-Wuninitialized' and
!      '-Wanalyzer-use-of-uninitialized-value' will still report warning
       messages on such automatic variables and the compiler will perform
       optimization as if the variable were uninitialized.  With this
       option, GCC will also initialize any padding of automatic variables
       that have structure or union types to zeroes.  However, the current
       implementation cannot initialize automatic variables that are
       declared between the controlling expression and the first case of a
!      'switch' statement.  Using '-Wtrivial-auto-var-init' to report all
       such cases.
  
       The three values of CHOICE are:
  
!         * 'uninitialized' doesn't initialize any automatic variables.
            This is C and C++'s default.
  
!         * 'pattern' Initialize automatic variables with values which
            will likely transform logic bugs into crashes down the line,
            are easily recognized in a crash dump and without being values
            that programmers can rely on for useful program semantics.
--- 12498,12618 ----
              for (int k = 0; k < N; k++)
                for (int j = 0; j < N; j++)
                  c[i][j] = c[i][j] + a[i][k]*b[k][j];
!      This flag is enabled by default at ‘-O3’.  It is also enabled by
!      ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-floop-unroll-and-jam’
       Apply unroll and jam transformations on feasible loops.  In a loop
       nest this unrolls the outer loop by some factor and fuses the
       resulting multiple inner loops.  This flag is enabled by default at
!      ‘-O3’.  It is also enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-ftree-loop-im’
       Perform loop invariant motion on trees.  This pass moves only
       invariants that are hard to handle at RTL level (function calls,
       operations that expand to nontrivial sequences of insns).  With
!      ‘-funswitch-loops’ it also moves operands of conditions that are
       invariant out of the loop, so that we can use just trivial
       invariantness analysis in loop unswitching.  The pass also includes
       store motion.
  
! ‘-ftree-loop-ivcanon’
       Create a canonical counter for number of iterations in loops for
       which determining number of iterations requires complicated
       analysis.  Later optimizations then may determine the number
       easily.  Useful especially in connection with unrolling.
  
! ‘-ftree-scev-cprop’
       Perform final value replacement.  If a variable is modified in a
       loop in such a way that its value when exiting the loop can be
       determined using only its initial value and the number of loop
       iterations, replace uses of the final value by such a computation,
       provided it is sufficiently cheap.  This reduces data dependencies
!      and may allow further simplifications.  Enabled by default at ‘-O1’
       and higher.
  
! ‘-fivopts’
       Perform induction variable optimizations (strength reduction,
       induction variable merging and induction variable elimination) on
       trees.
  
! ‘-ftree-parallelize-loops=n’
       Parallelize loops, i.e., split their iteration space to run in n
       threads.  This is only possible for loops whose iterations are
       independent and can be arbitrarily reordered.  The optimization is
       only profitable on multiprocessor machines, for loops that are
       CPU-intensive, rather than constrained e.g. by memory bandwidth.
!      This option implies ‘-pthread’, and thus is only supported on
!      targets that have support for ‘-pthread’.
  
! ‘-ftree-pta’
       Perform function-local points-to analysis on trees.  This flag is
!      enabled by default at ‘-O1’ and higher, except for ‘-Og’.
  
! ‘-ftree-sra’
       Perform scalar replacement of aggregates.  This pass replaces
       structure references with scalars to prevent committing structures
!      to memory too early.  This flag is enabled by default at ‘-O1’ and
!      higher, except for ‘-Og’.
  
! ‘-fstore-merging’
       Perform merging of narrow stores to consecutive memory addresses.
       This pass merges contiguous stores of immediate values narrower
       than a word into fewer wider stores to reduce the number of
!      instructions.  This is enabled by default at ‘-O2’ and higher as
!      well as ‘-Os’.
  
! ‘-ftree-ter’
       Perform temporary expression replacement during the SSA->normal
       phase.  Single use/single def temporaries are replaced at their use
       location with their defining expression.  This results in
       non-GIMPLE code, but gives the expanders much more complex trees to
       work on resulting in better RTL generation.  This is enabled by
!      default at ‘-O1’ and higher.
  
! ‘-ftree-slsr’
       Perform straight-line strength reduction on trees.  This recognizes
       related expressions involving multiplications and replaces them by
       less expensive calculations when possible.  This is enabled by
!      default at ‘-O1’ and higher.
  
! ‘-ftree-vectorize’
       Perform vectorization on trees.  This flag enables
!      ‘-ftree-loop-vectorize’ and ‘-ftree-slp-vectorize’ if not
       explicitly specified.
  
! ‘-ftree-loop-vectorize’
       Perform loop vectorization on trees.  This flag is enabled by
!      default at ‘-O2’ and by ‘-ftree-vectorize’, ‘-fprofile-use’, and
!      ‘-fauto-profile’.
  
! ‘-ftree-slp-vectorize’
       Perform basic block vectorization on trees.  This flag is enabled
!      by default at ‘-O2’ and by ‘-ftree-vectorize’, ‘-fprofile-use’, and
!      ‘-fauto-profile’.
  
! ‘-ftrivial-auto-var-init=CHOICE’
       Initialize automatic variables with either a pattern or with zeroes
       to increase the security and predictability of a program by
       preventing uninitialized memory disclosure and use.  GCC still
       considers an automatic variable that doesn't have an explicit
!      initializer as uninitialized, ‘-Wuninitialized’ and
!      ‘-Wanalyzer-use-of-uninitialized-value’ will still report warning
       messages on such automatic variables and the compiler will perform
       optimization as if the variable were uninitialized.  With this
       option, GCC will also initialize any padding of automatic variables
       that have structure or union types to zeroes.  However, the current
       implementation cannot initialize automatic variables that are
       declared between the controlling expression and the first case of a
!      ‘switch’ statement.  Using ‘-Wtrivial-auto-var-init’ to report all
       such cases.
  
       The three values of CHOICE are:
  
!         • ‘uninitialized’ doesn't initialize any automatic variables.
            This is C and C++'s default.
  
!         • ‘pattern’ Initialize automatic variables with values which
            will likely transform logic bugs into crashes down the line,
            are easily recognized in a crash dump and without being values
            that programmers can rely on for useful program semantics.
*************** optimizations to be performed is desired
*** 12616,12698 ****
            The values used for pattern initialization might be changed in
            the future.
  
!         * 'zero' Initialize automatic variables with zeroes.
  
!      The default is 'uninitialized'.
  
!      Note that the initializer values, whether 'zero' or 'pattern',
       refer to data representation (in memory or machine registers),
       rather than to their interpretation as numerical values.  This
       distinction may be important in languages that support types with
       biases or implicit multipliers, and with such extensions as
!      'hardbool' (*note Type Attributes::).  For example, a variable that
!      uses 8 bits to represent (biased) quantities in the 'range
!      160..400' will be initialized with the bit patterns '0x00' or
!      '0xFE', depending on CHOICE, whether or not these representations
       stand for values in that range, and even if they do, the
       interpretation of the value held by the variable will depend on the
!      bias.  A 'hardbool' variable that uses say '0X5A' and '0xA5' for
!      'false' and 'true', respectively, will trap with either 'choice' of
!      trivial initializer, i.e., 'zero' initialization will not convert
!      to the representation for 'false', even if it would for a 'static'
       variable of the same type.  This means the initializer pattern
       doesn't generally depend on the type of the initialized variable.
       One notable exception is that (non-hardened) boolean variables that
!      fit in registers are initialized with 'false' (zero), even when
!      'pattern' is requested.
  
       You can control this behavior for a specific variable by using the
!      variable attribute 'uninitialized' (*note Variable Attributes::).
  
! '-fvect-cost-model=MODEL'
       Alter the cost model used for vectorization.  The MODEL argument
!      should be one of 'unlimited', 'dynamic', 'cheap' or 'very-cheap'.
!      With the 'unlimited' model the vectorized code-path is assumed to
!      be profitable while with the 'dynamic' model a runtime check guards
       the vectorized code-path to enable it only for iteration counts
       that will likely execute faster than when executing the original
!      scalar loop.  The 'cheap' model disables vectorization of loops
       where doing so would be cost prohibitive for example due to
       required runtime checks for data dependence or alignment but
!      otherwise is equal to the 'dynamic' model.  The 'very-cheap' model
       only allows vectorization if the vector code would entirely replace
       the scalar code that is being vectorized.  For example, if each
       iteration of a vectorized loop would only be able to handle exactly
!      four iterations of the scalar loop, the 'very-cheap' model would
       only allow vectorization if the scalar iteration count is known to
       be a multiple of four.
  
       The default cost model depends on other optimization flags and is
!      either 'dynamic' or 'cheap'.
  
! '-fsimd-cost-model=MODEL'
       Alter the cost model used for vectorization of loops marked with
       the OpenMP simd directive.  The MODEL argument should be one of
!      'unlimited', 'dynamic', 'cheap'.  All values of MODEL have the same
!      meaning as described in '-fvect-cost-model' and by default a cost
!      model defined with '-fvect-cost-model' is used.
  
! '-ftree-vrp'
       Perform Value Range Propagation on trees.  This is similar to the
       constant propagation pass, but instead of values, ranges of values
       are propagated.  This allows the optimizers to remove unnecessary
       range checks like array bound checks and null pointer checks.  This
!      is enabled by default at '-O2' and higher.  Null pointer check
!      elimination is only done if '-fdelete-null-pointer-checks' is
       enabled.
  
! '-fsplit-paths'
       Split paths leading to loop backedges.  This can improve dead code
       elimination and common subexpression elimination.  This is enabled
!      by default at '-O3' and above.
  
! '-fsplit-ivs-in-unroller'
       Enables expression of values of induction variables in later
       iterations of the unrolled loop using the value in the first
       iteration.  This breaks long dependency chains, thus improving
       efficiency of the scheduling passes.
  
!      A combination of '-fweb' and CSE is often sufficient to obtain the
       same effect.  However, that is not reliable in cases where the loop
       body is more complicated than a single basic block.  It also does
       not work at all on some architectures due to restrictions in the
--- 12620,12702 ----
            The values used for pattern initialization might be changed in
            the future.
  
!         • ‘zero’ Initialize automatic variables with zeroes.
  
!      The default is ‘uninitialized’.
  
!      Note that the initializer values, whether ‘zero’ or ‘pattern’,
       refer to data representation (in memory or machine registers),
       rather than to their interpretation as numerical values.  This
       distinction may be important in languages that support types with
       biases or implicit multipliers, and with such extensions as
!      ‘hardbool’ (*note Type Attributes::).  For example, a variable that
!      uses 8 bits to represent (biased) quantities in the ‘range
!      160..400’ will be initialized with the bit patterns ‘0x00’ or
!      ‘0xFE’, depending on CHOICE, whether or not these representations
       stand for values in that range, and even if they do, the
       interpretation of the value held by the variable will depend on the
!      bias.  A ‘hardbool’ variable that uses say ‘0X5A’ and ‘0xA5’ for
!      ‘false’ and ‘true’, respectively, will trap with either ‘choice’ of
!      trivial initializer, i.e., ‘zero’ initialization will not convert
!      to the representation for ‘false’, even if it would for a ‘static’
       variable of the same type.  This means the initializer pattern
       doesn't generally depend on the type of the initialized variable.
       One notable exception is that (non-hardened) boolean variables that
!      fit in registers are initialized with ‘false’ (zero), even when
!      ‘pattern’ is requested.
  
       You can control this behavior for a specific variable by using the
!      variable attribute ‘uninitialized’ (*note Variable Attributes::).
  
! ‘-fvect-cost-model=MODEL’
       Alter the cost model used for vectorization.  The MODEL argument
!      should be one of ‘unlimited’, ‘dynamic’, ‘cheap’ or ‘very-cheap’.
!      With the ‘unlimited’ model the vectorized code-path is assumed to
!      be profitable while with the ‘dynamic’ model a runtime check guards
       the vectorized code-path to enable it only for iteration counts
       that will likely execute faster than when executing the original
!      scalar loop.  The ‘cheap’ model disables vectorization of loops
       where doing so would be cost prohibitive for example due to
       required runtime checks for data dependence or alignment but
!      otherwise is equal to the ‘dynamic’ model.  The ‘very-cheap’ model
       only allows vectorization if the vector code would entirely replace
       the scalar code that is being vectorized.  For example, if each
       iteration of a vectorized loop would only be able to handle exactly
!      four iterations of the scalar loop, the ‘very-cheap’ model would
       only allow vectorization if the scalar iteration count is known to
       be a multiple of four.
  
       The default cost model depends on other optimization flags and is
!      either ‘dynamic’ or ‘cheap’.
  
! ‘-fsimd-cost-model=MODEL’
       Alter the cost model used for vectorization of loops marked with
       the OpenMP simd directive.  The MODEL argument should be one of
!      ‘unlimited’, ‘dynamic’, ‘cheap’.  All values of MODEL have the same
!      meaning as described in ‘-fvect-cost-model’ and by default a cost
!      model defined with ‘-fvect-cost-model’ is used.
  
! ‘-ftree-vrp’
       Perform Value Range Propagation on trees.  This is similar to the
       constant propagation pass, but instead of values, ranges of values
       are propagated.  This allows the optimizers to remove unnecessary
       range checks like array bound checks and null pointer checks.  This
!      is enabled by default at ‘-O2’ and higher.  Null pointer check
!      elimination is only done if ‘-fdelete-null-pointer-checks’ is
       enabled.
  
! ‘-fsplit-paths’
       Split paths leading to loop backedges.  This can improve dead code
       elimination and common subexpression elimination.  This is enabled
!      by default at ‘-O3’ and above.
  
! ‘-fsplit-ivs-in-unroller’
       Enables expression of values of induction variables in later
       iterations of the unrolled loop using the value in the first
       iteration.  This breaks long dependency chains, thus improving
       efficiency of the scheduling passes.
  
!      A combination of ‘-fweb’ and CSE is often sufficient to obtain the
       same effect.  However, that is not reliable in cases where the loop
       body is more complicated than a single basic block.  It also does
       not work at all on some architectures due to restrictions in the
*************** optimizations to be performed is desired
*** 12700,12706 ****
  
       This optimization is enabled by default.
  
! '-fvariable-expansion-in-unroller'
       With this option, the compiler creates multiple copies of some
       local variables when unrolling a loop, which can result in superior
       code.
--- 12704,12710 ----
  
       This optimization is enabled by default.
  
! ‘-fvariable-expansion-in-unroller’
       With this option, the compiler creates multiple copies of some
       local variables when unrolling a loop, which can result in superior
       code.
*************** optimizations to be performed is desired
*** 12708,12729 ****
       This optimization is enabled by default for PowerPC targets, but
       disabled by default otherwise.
  
! '-fpartial-inlining'
       Inline parts of functions.  This option has any effect only when
!      inlining itself is turned on by the '-finline-functions' or
!      '-finline-small-functions' options.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fpredictive-commoning'
       Perform predictive commoning optimization, i.e., reusing
       computations (especially memory loads and stores) performed in
       previous iterations of loops.
  
!      This option is enabled at level '-O3'.  It is also enabled by
!      '-fprofile-use' and '-fauto-profile'.
  
! '-fprefetch-loop-arrays'
       If supported by the target machine, generate instructions to
       prefetch memory to improve the performance of loops that access
       large arrays.
--- 12712,12733 ----
       This optimization is enabled by default for PowerPC targets, but
       disabled by default otherwise.
  
! ‘-fpartial-inlining’
       Inline parts of functions.  This option has any effect only when
!      inlining itself is turned on by the ‘-finline-functions’ or
!      ‘-finline-small-functions’ options.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fpredictive-commoning’
       Perform predictive commoning optimization, i.e., reusing
       computations (especially memory loads and stores) performed in
       previous iterations of loops.
  
!      This option is enabled at level ‘-O3’.  It is also enabled by
!      ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-fprefetch-loop-arrays’
       If supported by the target machine, generate instructions to
       prefetch memory to improve the performance of loops that access
       large arrays.
*************** optimizations to be performed is desired
*** 12731,12812 ****
       This option may generate better or worse code; results are highly
       dependent on the structure of loops within the source code.
  
!      Disabled at level '-Os'.
  
! '-fno-printf-return-value'
       Do not substitute constants for known return value of formatted
!      output functions such as 'sprintf', 'snprintf', 'vsprintf', and
!      'vsnprintf' (but not 'printf' of 'fprintf').  This transformation
       allows GCC to optimize or even eliminate branches based on the
       known return value of these functions called with arguments that
       are either constant, or whose values are known to be in a range
       that makes determining the exact return value possible.  For
!      example, when '-fprintf-return-value' is in effect, both the branch
!      and the body of the 'if' statement (but not the call to 'snprint')
!      can be optimized away when 'i' is a 32-bit or smaller integer
       because the return value is guaranteed to be at most 8.
  
            char buf[9];
            if (snprintf (buf, "%08x", i) >= sizeof buf)
              ...
  
!      The '-fprintf-return-value' option relies on other optimizations
!      and yields best results with '-O2' and above.  It works in tandem
!      with the '-Wformat-overflow' and '-Wformat-truncation' options.
!      The '-fprintf-return-value' option is enabled by default.
  
! '-fno-peephole'
! '-fno-peephole2'
       Disable any machine-specific peephole optimizations.  The
!      difference between '-fno-peephole' and '-fno-peephole2' is in how
       they are implemented in the compiler; some targets use one, some
       use the other, a few use both.
  
!      '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
!      levels '-O2', '-O3', '-Os'.
  
! '-fno-guess-branch-probability'
       Do not guess branch probabilities using heuristics.
  
       GCC uses heuristics to guess branch probabilities if they are not
!      provided by profiling feedback ('-fprofile-arcs').  These
       heuristics are based on the control flow graph.  If some branch
!      probabilities are specified by '__builtin_expect', then the
       heuristics are used to guess branch probabilities for the rest of
!      the control flow graph, taking the '__builtin_expect' info into
       account.  The interactions between the heuristics and
!      '__builtin_expect' can be complex, and in some cases, it may be
       useful to disable the heuristics so that the effects of
!      '__builtin_expect' are easier to understand.
  
       It is also possible to specify expected probability of the
!      expression with '__builtin_expect_with_probability' built-in
       function.
  
!      The default is '-fguess-branch-probability' at levels '-O', '-O2',
!      '-O3', '-Os'.
  
! '-freorder-blocks'
       Reorder basic blocks in the compiled function in order to reduce
       number of taken branches and improve code locality.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os'.
  
! '-freorder-blocks-algorithm=ALGORITHM'
       Use the specified algorithm for basic block reordering.  The
!      ALGORITHM argument can be 'simple', which does not increase code
       size (except sometimes due to secondary effects like alignment), or
!      'stc', the "software trace cache" algorithm, which tries to put all
       often executed code together, minimizing the number of branches
       executed by making extra copies of code.
  
!      The default is 'simple' at levels '-O1', '-Os', and 'stc' at levels
!      '-O2', '-O3'.
  
! '-freorder-blocks-and-partition'
       In addition to reordering basic blocks in the compiled function, in
       order to reduce number of taken branches, partitions hot and cold
!      basic blocks into separate sections of the assembly and '.o' files,
       to improve paging and cache locality performance.
  
       This optimization is automatically turned off in the presence of
--- 12735,12816 ----
       This option may generate better or worse code; results are highly
       dependent on the structure of loops within the source code.
  
!      Disabled at level ‘-Os’.
  
! ‘-fno-printf-return-value’
       Do not substitute constants for known return value of formatted
!      output functions such as ‘sprintf’, ‘snprintf’, ‘vsprintf’, and
!      ‘vsnprintf’ (but not ‘printf’ of ‘fprintf’).  This transformation
       allows GCC to optimize or even eliminate branches based on the
       known return value of these functions called with arguments that
       are either constant, or whose values are known to be in a range
       that makes determining the exact return value possible.  For
!      example, when ‘-fprintf-return-value’ is in effect, both the branch
!      and the body of the ‘if’ statement (but not the call to ‘snprint’)
!      can be optimized away when ‘i’ is a 32-bit or smaller integer
       because the return value is guaranteed to be at most 8.
  
            char buf[9];
            if (snprintf (buf, "%08x", i) >= sizeof buf)
              ...
  
!      The ‘-fprintf-return-value’ option relies on other optimizations
!      and yields best results with ‘-O2’ and above.  It works in tandem
!      with the ‘-Wformat-overflow’ and ‘-Wformat-truncation’ options.
!      The ‘-fprintf-return-value’ option is enabled by default.
  
! ‘-fno-peephole’
! ‘-fno-peephole2’
       Disable any machine-specific peephole optimizations.  The
!      difference between ‘-fno-peephole’ and ‘-fno-peephole2’ is in how
       they are implemented in the compiler; some targets use one, some
       use the other, a few use both.
  
!      ‘-fpeephole’ is enabled by default.  ‘-fpeephole2’ enabled at
!      levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fno-guess-branch-probability’
       Do not guess branch probabilities using heuristics.
  
       GCC uses heuristics to guess branch probabilities if they are not
!      provided by profiling feedback (‘-fprofile-arcs’).  These
       heuristics are based on the control flow graph.  If some branch
!      probabilities are specified by ‘__builtin_expect’, then the
       heuristics are used to guess branch probabilities for the rest of
!      the control flow graph, taking the ‘__builtin_expect’ info into
       account.  The interactions between the heuristics and
!      ‘__builtin_expect’ can be complex, and in some cases, it may be
       useful to disable the heuristics so that the effects of
!      ‘__builtin_expect’ are easier to understand.
  
       It is also possible to specify expected probability of the
!      expression with ‘__builtin_expect_with_probability’ built-in
       function.
  
!      The default is ‘-fguess-branch-probability’ at levels ‘-O’, ‘-O2’,
!      ‘-O3’, ‘-Os’.
  
! ‘-freorder-blocks’
       Reorder basic blocks in the compiled function in order to reduce
       number of taken branches and improve code locality.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-freorder-blocks-algorithm=ALGORITHM’
       Use the specified algorithm for basic block reordering.  The
!      ALGORITHM argument can be ‘simple’, which does not increase code
       size (except sometimes due to secondary effects like alignment), or
!      ‘stc’, the "software trace cache" algorithm, which tries to put all
       often executed code together, minimizing the number of branches
       executed by making extra copies of code.
  
!      The default is ‘simple’ at levels ‘-O1’, ‘-Os’, and ‘stc’ at levels
!      ‘-O2’, ‘-O3’.
  
! ‘-freorder-blocks-and-partition’
       In addition to reordering basic blocks in the compiled function, in
       order to reduce number of taken branches, partitions hot and cold
!      basic blocks into separate sections of the assembly and ‘.o’ files,
       to improve paging and cache locality performance.
  
       This optimization is automatically turned off in the presence of
*************** optimizations to be performed is desired
*** 12814,12848 ****
       setjump/longjump or target specific scheme), for linkonce sections,
       for functions with a user-defined section attribute and on any
       architecture that does not support named sections.  When
!      '-fsplit-stack' is used this option is not enabled by default (to
       avoid linker errors), but may be enabled explicitly (if using a
       working linker).
  
!      Enabled for x86 at levels '-O2', '-O3', '-Os'.
  
! '-freorder-functions'
       Reorder functions in the object file in order to improve code
       locality.  This is implemented by using special subsections
!      '.text.hot' for most frequently executed functions and
!      '.text.unlikely' for unlikely executed functions.  Reordering is
       done by the linker so object file format must support named
       sections and linker must place them in a reasonable way.
  
       This option isn't effective unless you either provide profile
!      feedback (see '-fprofile-arcs' for details) or manually annotate
!      functions with 'hot' or 'cold' attributes (*note Common Function
       Attributes::).
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-fstrict-aliasing'
       Allow the compiler to assume the strictest aliasing rules
       applicable to the language being compiled.  For C (and C++), this
       activates optimizations based on the type of expressions.  In
       particular, an object of one type is assumed never to reside at the
       same address as an object of a different type, unless the types are
!      almost the same.  For example, an 'unsigned int' can alias an
!      'int', but not a 'void*' or a 'double'.  A character type may alias
       any other type.
  
       Pay special attention to code like this:
--- 12818,12852 ----
       setjump/longjump or target specific scheme), for linkonce sections,
       for functions with a user-defined section attribute and on any
       architecture that does not support named sections.  When
!      ‘-fsplit-stack’ is used this option is not enabled by default (to
       avoid linker errors), but may be enabled explicitly (if using a
       working linker).
  
!      Enabled for x86 at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-freorder-functions’
       Reorder functions in the object file in order to improve code
       locality.  This is implemented by using special subsections
!      ‘.text.hot’ for most frequently executed functions and
!      ‘.text.unlikely’ for unlikely executed functions.  Reordering is
       done by the linker so object file format must support named
       sections and linker must place them in a reasonable way.
  
       This option isn't effective unless you either provide profile
!      feedback (see ‘-fprofile-arcs’ for details) or manually annotate
!      functions with ‘hot’ or ‘cold’ attributes (*note Common Function
       Attributes::).
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fstrict-aliasing’
       Allow the compiler to assume the strictest aliasing rules
       applicable to the language being compiled.  For C (and C++), this
       activates optimizations based on the type of expressions.  In
       particular, an object of one type is assumed never to reside at the
       same address as an object of a different type, unless the types are
!      almost the same.  For example, an ‘unsigned int’ can alias an
!      ‘int’, but not a ‘void*’ or a ‘double’.  A character type may alias
       any other type.
  
       Pay special attention to code like this:
*************** optimizations to be performed is desired
*** 12858,12864 ****
            }
       The practice of reading from a different union member than the one
       most recently written to (called "type-punning") is common.  Even
!      with '-fstrict-aliasing', type-punning is allowed, provided the
       memory is accessed through the union type.  So, the code above
       works as expected.  *Note Structures unions enumerations and
       bit-fields implementation::.  However, this code might not:
--- 12862,12868 ----
            }
       The practice of reading from a different union member than the one
       most recently written to (called "type-punning") is common.  Even
!      with ‘-fstrict-aliasing’, type-punning is allowed, provided the
       memory is accessed through the union type.  So, the code above
       works as expected.  *Note Structures unions enumerations and
       bit-fields implementation::.  However, this code might not:
*************** optimizations to be performed is desired
*** 12878,12918 ****
              return ((union a_union *) &d)->i;
            }
  
!      The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
!      '-Os'.
  
! '-fipa-strict-aliasing'
!      Controls whether rules of '-fstrict-aliasing' are applied across
       function boundaries.  Note that if multiple functions gets inlined
       into a single function the memory accesses are no longer considered
       to be crossing a function boundary.
  
!      The '-fipa-strict-aliasing' option is enabled by default and is
!      effective only in combination with '-fstrict-aliasing'.
  
! '-falign-functions'
! '-falign-functions=N'
! '-falign-functions=N:M'
! '-falign-functions=N:M:N2'
! '-falign-functions=N:M:N2:M2'
       Align the start of functions to the next power-of-two greater than
       or equal to N, skipping up to M-1 bytes.  This ensures that at
       least the first M bytes of the function can be fetched by the CPU
       without crossing an N-byte alignment boundary.  This is an
       optimization of code performance and alignment is ignored for
       functions considered cold.  If alignment is required for all
!      functions, use '-fmin-function-alignment'.
  
       If M is not specified, it defaults to N.
  
!      Examples: '-falign-functions=32' aligns functions to the next
!      32-byte boundary, '-falign-functions=24' aligns to the next 32-byte
       boundary only if this can be done by skipping 23 bytes or less,
!      '-falign-functions=32:7' aligns to the next 32-byte boundary only
       if this can be done by skipping 6 bytes or less.
  
       The second pair of N2:M2 values allows you to specify a secondary
!      alignment: '-falign-functions=64:7:32:3' aligns to the next 64-byte
       boundary if this can be done by skipping 6 bytes or less, otherwise
       aligns to the next 32-byte boundary if this can be done by skipping
       2 bytes or less.  If M2 is not specified, it defaults to N2.
--- 12882,12922 ----
              return ((union a_union *) &d)->i;
            }
  
!      The ‘-fstrict-aliasing’ option is enabled at levels ‘-O2’, ‘-O3’,
!      ‘-Os’.
  
! ‘-fipa-strict-aliasing’
!      Controls whether rules of ‘-fstrict-aliasing’ are applied across
       function boundaries.  Note that if multiple functions gets inlined
       into a single function the memory accesses are no longer considered
       to be crossing a function boundary.
  
!      The ‘-fipa-strict-aliasing’ option is enabled by default and is
!      effective only in combination with ‘-fstrict-aliasing’.
  
! ‘-falign-functions’
! ‘-falign-functions=N’
! ‘-falign-functions=N:M’
! ‘-falign-functions=N:M:N2’
! ‘-falign-functions=N:M:N2:M2’
       Align the start of functions to the next power-of-two greater than
       or equal to N, skipping up to M-1 bytes.  This ensures that at
       least the first M bytes of the function can be fetched by the CPU
       without crossing an N-byte alignment boundary.  This is an
       optimization of code performance and alignment is ignored for
       functions considered cold.  If alignment is required for all
!      functions, use ‘-fmin-function-alignment’.
  
       If M is not specified, it defaults to N.
  
!      Examples: ‘-falign-functions=32’ aligns functions to the next
!      32-byte boundary, ‘-falign-functions=24’ aligns to the next 32-byte
       boundary only if this can be done by skipping 23 bytes or less,
!      ‘-falign-functions=32:7’ aligns to the next 32-byte boundary only
       if this can be done by skipping 6 bytes or less.
  
       The second pair of N2:M2 values allows you to specify a secondary
!      alignment: ‘-falign-functions=64:7:32:3’ aligns to the next 64-byte
       boundary if this can be done by skipping 6 bytes or less, otherwise
       aligns to the next 32-byte boundary if this can be done by skipping
       2 bytes or less.  If M2 is not specified, it defaults to N2.
*************** optimizations to be performed is desired
*** 12920,13063 ****
       Some assemblers only support this flag when N is a power of two; in
       that case, it is rounded up.
  
!      '-fno-align-functions' and '-falign-functions=1' are equivalent and
       mean that functions are not aligned.
  
       If N is not specified or is zero, use a machine-dependent default.
       The maximum allowed N option value is 65536.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-flimit-function-alignment'
       If this option is enabled, the compiler tries to avoid
       unnecessarily overaligning functions.  It attempts to instruct the
!      assembler to align by the amount specified by '-falign-functions',
       but not to skip more bytes than the size of the function.
  
! '-falign-labels'
! '-falign-labels=N'
! '-falign-labels=N:M'
! '-falign-labels=N:M:N2'
! '-falign-labels=N:M:N2:M2'
       Align all branch targets to a power-of-two boundary.
  
!      Parameters of this option are analogous to the '-falign-functions'
!      option.  '-fno-align-labels' and '-falign-labels=1' are equivalent
       and mean that labels are not aligned.
  
!      If '-falign-loops' or '-falign-jumps' are applicable and are
       greater than this value, then their values are used instead.
  
       If N is not specified or is zero, use a machine-dependent default
!      which is very likely to be '1', meaning no alignment.  The maximum
       allowed N option value is 65536.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-falign-loops'
! '-falign-loops=N'
! '-falign-loops=N:M'
! '-falign-loops=N:M:N2'
! '-falign-loops=N:M:N2:M2'
       Align loops to a power-of-two boundary.  If the loops are executed
       many times, this makes up for any execution of the dummy padding
       instructions.  This is an optimization of code performance and
       alignment is ignored for loops considered cold.
  
!      If '-falign-labels' is greater than this value, then its value is
       used instead.
  
!      Parameters of this option are analogous to the '-falign-functions'
!      option.  '-fno-align-loops' and '-falign-loops=1' are equivalent
       and mean that loops are not aligned.  The maximum allowed N option
       value is 65536.
  
       If N is not specified or is zero, use a machine-dependent default.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-falign-jumps'
! '-falign-jumps=N'
! '-falign-jumps=N:M'
! '-falign-jumps=N:M:N2'
! '-falign-jumps=N:M:N2:M2'
       Align branch targets to a power-of-two boundary, for branch targets
       where the targets can only be reached by jumping.  In this case, no
       dummy operations need be executed.  This is an optimization of code
       performance and alignment is ignored for jumps considered cold.
  
!      If '-falign-labels' is greater than this value, then its value is
       used instead.
  
!      Parameters of this option are analogous to the '-falign-functions'
!      option.  '-fno-align-jumps' and '-falign-jumps=1' are equivalent
       and mean that loops are not aligned.
  
       If N is not specified or is zero, use a machine-dependent default.
       The maximum allowed N option value is 65536.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-fmin-function-alignment'
       Specify minimal alignment of functions to the next power-of-two
!      greater than or equal to N.  Unlike '-falign-functions' this
       alignment is applied also to all functions (even those considered
       cold).  The alignment is also not affected by
!      '-flimit-function-alignment'
  
! '-fno-allocation-dce'
       Do not remove unused C++ allocations in dead code elimination.
  
! '-fallow-store-data-races'
       Allow the compiler to perform optimizations that may introduce new
       data races on stores, without proving that the variable cannot be
       concurrently accessed by other threads.  Does not affect
       optimization of local data.  It is safe to use this option if it is
       known that global data will not be accessed by multiple threads.
  
!      Examples of optimizations enabled by '-fallow-store-data-races'
       include hoisting or if-conversions that may cause a value that was
       already in memory to be re-written with that same value.  Such
       re-writing is safe in a single threaded context but may be unsafe
       in a multi-threaded context.  Note that on some processors,
       if-conversions may be required in order to enable vectorization.
  
!      Enabled at level '-Ofast'.
  
! '-funit-at-a-time'
!      This option is left for compatibility reasons.  '-funit-at-a-time'
!      has no effect, while '-fno-unit-at-a-time' implies
!      '-fno-toplevel-reorder' and '-fno-section-anchors'.
  
       Enabled by default.
  
! '-fno-toplevel-reorder'
!      Do not reorder top-level functions, variables, and 'asm'
       statements.  Output them in the same order that they appear in the
       input file.  When this option is used, unreferenced static
       variables are not removed.  This option is intended to support
       existing code that relies on a particular ordering.  For new code,
       it is better to use attributes when possible.
  
!      '-ftoplevel-reorder' is the default at '-O1' and higher, and also
!      at '-O0' if '-fsection-anchors' is explicitly requested.
!      Additionally '-fno-toplevel-reorder' implies
!      '-fno-section-anchors'.
  
! '-funreachable-traps'
       With this option, the compiler turns calls to
!      '__builtin_unreachable' into traps, instead of using them for
       optimization.  This also affects any such calls implicitly
       generated by the compiler.
  
!      This option has the same effect as '-fsanitize=unreachable
!      -fsanitize-trap=unreachable', but does not affect the values of
!      those options.  If '-fsanitize=unreachable' is enabled, that option
       takes priority over this one.
  
!      This option is enabled by default at '-O0' and '-Og'.
  
! '-fweb'
       Constructs webs as commonly used for register allocation purposes
       and assign each web individual pseudo register.  This allows the
       register allocation pass to operate on pseudos directly, but also
--- 12924,13067 ----
       Some assemblers only support this flag when N is a power of two; in
       that case, it is rounded up.
  
!      ‘-fno-align-functions’ and ‘-falign-functions=1’ are equivalent and
       mean that functions are not aligned.
  
       If N is not specified or is zero, use a machine-dependent default.
       The maximum allowed N option value is 65536.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-flimit-function-alignment’
       If this option is enabled, the compiler tries to avoid
       unnecessarily overaligning functions.  It attempts to instruct the
!      assembler to align by the amount specified by ‘-falign-functions’,
       but not to skip more bytes than the size of the function.
  
! ‘-falign-labels’
! ‘-falign-labels=N’
! ‘-falign-labels=N:M’
! ‘-falign-labels=N:M:N2’
! ‘-falign-labels=N:M:N2:M2’
       Align all branch targets to a power-of-two boundary.
  
!      Parameters of this option are analogous to the ‘-falign-functions’
!      option.  ‘-fno-align-labels’ and ‘-falign-labels=1’ are equivalent
       and mean that labels are not aligned.
  
!      If ‘-falign-loops’ or ‘-falign-jumps’ are applicable and are
       greater than this value, then their values are used instead.
  
       If N is not specified or is zero, use a machine-dependent default
!      which is very likely to be ‘1’, meaning no alignment.  The maximum
       allowed N option value is 65536.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-falign-loops’
! ‘-falign-loops=N’
! ‘-falign-loops=N:M’
! ‘-falign-loops=N:M:N2’
! ‘-falign-loops=N:M:N2:M2’
       Align loops to a power-of-two boundary.  If the loops are executed
       many times, this makes up for any execution of the dummy padding
       instructions.  This is an optimization of code performance and
       alignment is ignored for loops considered cold.
  
!      If ‘-falign-labels’ is greater than this value, then its value is
       used instead.
  
!      Parameters of this option are analogous to the ‘-falign-functions’
!      option.  ‘-fno-align-loops’ and ‘-falign-loops=1’ are equivalent
       and mean that loops are not aligned.  The maximum allowed N option
       value is 65536.
  
       If N is not specified or is zero, use a machine-dependent default.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-falign-jumps’
! ‘-falign-jumps=N’
! ‘-falign-jumps=N:M’
! ‘-falign-jumps=N:M:N2’
! ‘-falign-jumps=N:M:N2:M2’
       Align branch targets to a power-of-two boundary, for branch targets
       where the targets can only be reached by jumping.  In this case, no
       dummy operations need be executed.  This is an optimization of code
       performance and alignment is ignored for jumps considered cold.
  
!      If ‘-falign-labels’ is greater than this value, then its value is
       used instead.
  
!      Parameters of this option are analogous to the ‘-falign-functions’
!      option.  ‘-fno-align-jumps’ and ‘-falign-jumps=1’ are equivalent
       and mean that loops are not aligned.
  
       If N is not specified or is zero, use a machine-dependent default.
       The maximum allowed N option value is 65536.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-fmin-function-alignment’
       Specify minimal alignment of functions to the next power-of-two
!      greater than or equal to N.  Unlike ‘-falign-functions’ this
       alignment is applied also to all functions (even those considered
       cold).  The alignment is also not affected by
!      ‘-flimit-function-alignment’
  
! ‘-fno-allocation-dce’
       Do not remove unused C++ allocations in dead code elimination.
  
! ‘-fallow-store-data-races’
       Allow the compiler to perform optimizations that may introduce new
       data races on stores, without proving that the variable cannot be
       concurrently accessed by other threads.  Does not affect
       optimization of local data.  It is safe to use this option if it is
       known that global data will not be accessed by multiple threads.
  
!      Examples of optimizations enabled by ‘-fallow-store-data-races’
       include hoisting or if-conversions that may cause a value that was
       already in memory to be re-written with that same value.  Such
       re-writing is safe in a single threaded context but may be unsafe
       in a multi-threaded context.  Note that on some processors,
       if-conversions may be required in order to enable vectorization.
  
!      Enabled at level ‘-Ofast’.
  
! ‘-funit-at-a-time’
!      This option is left for compatibility reasons.  ‘-funit-at-a-time’
!      has no effect, while ‘-fno-unit-at-a-time’ implies
!      ‘-fno-toplevel-reorder’ and ‘-fno-section-anchors’.
  
       Enabled by default.
  
! ‘-fno-toplevel-reorder’
!      Do not reorder top-level functions, variables, and ‘asm’
       statements.  Output them in the same order that they appear in the
       input file.  When this option is used, unreferenced static
       variables are not removed.  This option is intended to support
       existing code that relies on a particular ordering.  For new code,
       it is better to use attributes when possible.
  
!      ‘-ftoplevel-reorder’ is the default at ‘-O1’ and higher, and also
!      at ‘-O0’ if ‘-fsection-anchors’ is explicitly requested.
!      Additionally ‘-fno-toplevel-reorder’ implies
!      ‘-fno-section-anchors’.
  
! ‘-funreachable-traps’
       With this option, the compiler turns calls to
!      ‘__builtin_unreachable’ into traps, instead of using them for
       optimization.  This also affects any such calls implicitly
       generated by the compiler.
  
!      This option has the same effect as ‘-fsanitize=unreachable
!      -fsanitize-trap=unreachable’, but does not affect the values of
!      those options.  If ‘-fsanitize=unreachable’ is enabled, that option
       takes priority over this one.
  
!      This option is enabled by default at ‘-O0’ and ‘-Og’.
  
! ‘-fweb’
       Constructs webs as commonly used for register allocation purposes
       and assign each web individual pseudo register.  This allows the
       register allocation pass to operate on pseudos directly, but also
*************** optimizations to be performed is desired
*** 13066,13088 ****
       debugging impossible, since variables no longer stay in a "home
       register".
  
!      Enabled by default with '-funroll-loops'.
  
! '-fwhole-program'
       Assume that the current compilation unit represents the whole
       program being compiled.  All public functions and variables with
!      the exception of 'main' and those merged by attribute
!      'externally_visible' become static functions and in effect are
       optimized more aggressively by interprocedural optimizers.
  
!      With '-flto' this option has a limited use.  In most cases the
       precise list of symbols used or exported from the binary is known
       the resolution info passed to the link-time optimizer by the linker
       plugin.  It is still useful if no linker plugin is used or during
!      incremental link step when final code is produced (with '-flto'
!      '-flinker-output=nolto-rel').
  
! '-flto[=N]'
       This option runs the standard link-time optimizer.  When invoked
       with source code, it generates GIMPLE (one of GCC's internal
       representations) and writes it to special ELF sections in the
--- 13070,13092 ----
       debugging impossible, since variables no longer stay in a "home
       register".
  
!      Enabled by default with ‘-funroll-loops’.
  
! ‘-fwhole-program’
       Assume that the current compilation unit represents the whole
       program being compiled.  All public functions and variables with
!      the exception of ‘main’ and those merged by attribute
!      ‘externally_visible’ become static functions and in effect are
       optimized more aggressively by interprocedural optimizers.
  
!      With ‘-flto’ this option has a limited use.  In most cases the
       precise list of symbols used or exported from the binary is known
       the resolution info passed to the link-time optimizer by the linker
       plugin.  It is still useful if no linker plugin is used or during
!      incremental link step when final code is produced (with ‘-flto’
!      ‘-flinker-output=nolto-rel’).
  
! ‘-flto[=N]’
       This option runs the standard link-time optimizer.  When invoked
       with source code, it generates GIMPLE (one of GCC's internal
       representations) and writes it to special ELF sections in the
*************** optimizations to be performed is desired
*** 13090,13096 ****
       function bodies are read from these ELF sections and instantiated
       as if they had been part of the same translation unit.
  
!      To use the link-time optimizer, '-flto' and optimization options
       should be specified at compile time and during the final link.  It
       is recommended that you compile all the files participating in the
       same link with the same options and also specify those options at
--- 13094,13100 ----
       function bodies are read from these ELF sections and instantiated
       as if they had been part of the same translation unit.
  
!      To use the link-time optimizer, ‘-flto’ and optimization options
       should be specified at compile time and during the final link.  It
       is recommended that you compile all the files participating in the
       same link with the same options and also specify those options at
*************** optimizations to be performed is desired
*** 13101,13149 ****
            gcc -o myprog -flto -O2 foo.o bar.o
  
       The first two invocations to GCC save a bytecode representation of
!      GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
!      final invocation reads the GIMPLE bytecode from 'foo.o' and
!      'bar.o', merges the two files into a single internal image, and
!      compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
       merged into a single image, this causes all the interprocedural
       analyses and optimizations in GCC to work across the two files as
       if they were a single one.  This means, for example, that the
!      inliner is able to inline functions in 'bar.o' into functions in
!      'foo.o' and vice-versa.
  
       Another (simpler) way to enable link-time optimization is:
  
            gcc -o myprog -flto -O2 foo.c bar.c
  
!      The above generates bytecode for 'foo.c' and 'bar.c', merges them
       together into a single GIMPLE representation and optimizes them as
!      usual to produce 'myprog'.
  
       The important thing to keep in mind is that to enable link-time
       optimizations you need to use the GCC driver to perform the link
       step.  GCC automatically performs link-time optimization if any of
!      the objects involved were compiled with the '-flto' command-line
       option.  You can always override the automatic decision to do
!      link-time optimization by passing '-fno-lto' to the link command.
  
       To make whole program optimization effective, it is necessary to
       make certain whole program assumptions.  The compiler needs to know
       what functions and variables can be accessed by libraries and
       runtime outside of the link-time optimized unit.  When supported by
!      the linker, the linker plugin (see '-fuse-linker-plugin') passes
       information to the compiler about used and externally visible
       symbols.  When the linker plugin is not available,
!      '-fwhole-program' should be used to allow the compiler to make
       these assumptions, which leads to more aggressive optimization
       decisions.
  
!      When a file is compiled with '-flto' without '-fuse-linker-plugin',
       the generated object file is larger than a regular object file
       because it contains GIMPLE bytecodes and the usual final code (see
!      '-ffat-lto-objects').  This means that object files with LTO
!      information can be linked as normal object files; if '-fno-lto' is
       passed to the linker, no interprocedural optimizations are applied.
!      Note that when '-fno-fat-lto-objects' is enabled the compile stage
       is faster but you cannot perform a regular, non-LTO link on them.
  
       When producing the final binary, GCC only applies link-time
--- 13105,13153 ----
            gcc -o myprog -flto -O2 foo.o bar.o
  
       The first two invocations to GCC save a bytecode representation of
!      GIMPLE into special ELF sections inside ‘foo.o’ and ‘bar.o’.  The
!      final invocation reads the GIMPLE bytecode from ‘foo.o’ and
!      ‘bar.o’, merges the two files into a single internal image, and
!      compiles the result as usual.  Since both ‘foo.o’ and ‘bar.o’ are
       merged into a single image, this causes all the interprocedural
       analyses and optimizations in GCC to work across the two files as
       if they were a single one.  This means, for example, that the
!      inliner is able to inline functions in ‘bar.o’ into functions in
!      ‘foo.o’ and vice-versa.
  
       Another (simpler) way to enable link-time optimization is:
  
            gcc -o myprog -flto -O2 foo.c bar.c
  
!      The above generates bytecode for ‘foo.c’ and ‘bar.c’, merges them
       together into a single GIMPLE representation and optimizes them as
!      usual to produce ‘myprog’.
  
       The important thing to keep in mind is that to enable link-time
       optimizations you need to use the GCC driver to perform the link
       step.  GCC automatically performs link-time optimization if any of
!      the objects involved were compiled with the ‘-flto’ command-line
       option.  You can always override the automatic decision to do
!      link-time optimization by passing ‘-fno-lto’ to the link command.
  
       To make whole program optimization effective, it is necessary to
       make certain whole program assumptions.  The compiler needs to know
       what functions and variables can be accessed by libraries and
       runtime outside of the link-time optimized unit.  When supported by
!      the linker, the linker plugin (see ‘-fuse-linker-plugin’) passes
       information to the compiler about used and externally visible
       symbols.  When the linker plugin is not available,
!      ‘-fwhole-program’ should be used to allow the compiler to make
       these assumptions, which leads to more aggressive optimization
       decisions.
  
!      When a file is compiled with ‘-flto’ without ‘-fuse-linker-plugin’,
       the generated object file is larger than a regular object file
       because it contains GIMPLE bytecodes and the usual final code (see
!      ‘-ffat-lto-objects’).  This means that object files with LTO
!      information can be linked as normal object files; if ‘-fno-lto’ is
       passed to the linker, no interprocedural optimizations are applied.
!      Note that when ‘-fno-fat-lto-objects’ is enabled the compile stage
       is faster but you cannot perform a regular, non-LTO link on them.
  
       When producing the final binary, GCC only applies link-time
*************** optimizations to be performed is desired
*** 13158,13164 ****
       link-time options from the settings used to compile the input
       files.
  
!      If you do not specify an optimization level option '-O' at link
       time, then GCC uses the highest optimization level used when
       compiling the object files.  Note that it is generally ineffective
       to specify an optimization level option only at link time and not
--- 13162,13168 ----
       link-time options from the settings used to compile the input
       files.
  
!      If you do not specify an optimization level option ‘-O’ at link
       time, then GCC uses the highest optimization level used when
       compiling the object files.  Note that it is generally ineffective
       to specify an optimization level option only at link time and not
*************** optimizations to be performed is desired
*** 13172,13181 ****
       generating bytecodes, as they need to be used during the final
       link.  Currently, the following options and their settings are
       taken from the first object file that explicitly specifies them:
!      '-fcommon', '-fexceptions', '-fnon-call-exceptions', '-fgnu-tm' and
!      all the '-m' target flags.
  
!      The following options '-fPIC', '-fpic', '-fpie' and '-fPIE' are
       combined based on the following scheme:
  
            -fPIC + -fpic = -fpic
--- 13176,13185 ----
       generating bytecodes, as they need to be used during the final
       link.  Currently, the following options and their settings are
       taken from the first object file that explicitly specifies them:
!      ‘-fcommon’, ‘-fexceptions’, ‘-fnon-call-exceptions’, ‘-fgnu-tm’ and
!      all the ‘-m’ target flags.
  
!      The following options ‘-fPIC’, ‘-fpic’, ‘-fpie’ and ‘-fPIE’ are
       combined based on the following scheme:
  
            -fPIC + -fpic = -fpic
*************** optimizations to be performed is desired
*** 13188,13204 ****
       Certain ABI-changing flags are required to match in all compilation
       units, and trying to override this at link time with a conflicting
       value is ignored.  This includes options such as
!      '-freg-struct-return' and '-fpcc-struct-return'.
  
!      Other options such as '-ffp-contract', '-fno-strict-overflow',
!      '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
       through to the link stage and merged conservatively for conflicting
!      translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
!      and '-fno-trapv' take precedence; and for example
!      '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
       You can override them at link time.
  
!      Diagnostic options such as '-Wstringop-overflow' are passed through
       to the link stage and their setting matches that of the
       compile-step at function granularity.  Note that this matters only
       for diagnostics emitted during optimization.  Note that code
--- 13192,13208 ----
       Certain ABI-changing flags are required to match in all compilation
       units, and trying to override this at link time with a conflicting
       value is ignored.  This includes options such as
!      ‘-freg-struct-return’ and ‘-fpcc-struct-return’.
  
!      Other options such as ‘-ffp-contract’, ‘-fno-strict-overflow’,
!      ‘-fwrapv’, ‘-fno-trapv’ or ‘-fno-strict-aliasing’ are passed
       through to the link stage and merged conservatively for conflicting
!      translation units.  Specifically ‘-fno-strict-overflow’, ‘-fwrapv’
!      and ‘-fno-trapv’ take precedence; and for example
!      ‘-ffp-contract=off’ takes precedence over ‘-ffp-contract=fast’.
       You can override them at link time.
  
!      Diagnostic options such as ‘-Wstringop-overflow’ are passed through
       to the link stage and their setting matches that of the
       compile-step at function granularity.  Note that this matters only
       for diagnostics emitted during optimization.  Note that code
*************** optimizations to be performed is desired
*** 13206,13222 ****
       disabled for regions if code not consistent with the setting at
       compile time.
  
!      When you need to pass options to the assembler via '-Wa' or
!      '-Xassembler' make sure to either compile such translation units
!      with '-fno-lto' or consistently use the same assembler options on
       all translation units.  You can alternatively also specify
       assembler options at LTO link time.
  
!      To enable debug info generation you need to supply '-g' at compile
       time.  If any of the input files at link time were built with debug
       info generation enabled the link will enable debug info generation
       as well.  Any elaborate debug info settings like the dwarf level
!      '-gdwarf-5' need to be explicitly repeated at the linker command
       line and mixing different settings in different translation units
       is discouraged.
  
--- 13210,13226 ----
       disabled for regions if code not consistent with the setting at
       compile time.
  
!      When you need to pass options to the assembler via ‘-Wa’ or
!      ‘-Xassembler’ make sure to either compile such translation units
!      with ‘-fno-lto’ or consistently use the same assembler options on
       all translation units.  You can alternatively also specify
       assembler options at LTO link time.
  
!      To enable debug info generation you need to supply ‘-g’ at compile
       time.  If any of the input files at link time were built with debug
       info generation enabled the link will enable debug info generation
       as well.  Any elaborate debug info settings like the dwarf level
!      ‘-gdwarf-5’ need to be explicitly repeated at the linker command
       line and mixing different settings in different translation units
       is discouraged.
  
*************** optimizations to be performed is desired
*** 13235,13277 ****
            gfortran -c -flto baz.f90
            g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
  
!      Notice that the final link is done with 'g++' to get the C++
!      runtime libraries and '-lgfortran' is added to get the Fortran
       runtime libraries.  In general, when mixing languages in LTO mode,
       you should use the same link command options as when mixing
       languages in a regular (non-LTO) compilation.
  
       If object files containing GIMPLE bytecode are stored in a library
!      archive, say 'libfoo.a', it is possible to extract and use them in
       an LTO link if you are using a linker with plugin support.  To
!      create static libraries suitable for LTO, use 'gcc-ar' and
!      'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
!      object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
!      require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
!      support.  At link time, use the flag '-fuse-linker-plugin' to
       ensure that the library participates in the LTO optimization
       process:
  
            gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
  
       With the linker plugin enabled, the linker extracts the needed
!      GIMPLE files from 'libfoo.a' and passes them on to the running GCC
       to make them part of the aggregated GIMPLE image to be optimized.
  
       If you are not using a linker with plugin support and/or do not
!      enable the linker plugin, then the objects inside 'libfoo.a' are
       extracted and linked as usual, but they do not participate in the
       LTO optimization process.  In order to make a static library
       suitable for both LTO optimization and usual linkage, compile its
!      object files with '-flto' '-ffat-lto-objects'.
  
       Link-time optimizations do not require the presence of the whole
       program to operate.  If the program does not require any symbols to
!      be exported, it is possible to combine '-flto' and
!      '-fwhole-program' to allow the interprocedural optimizers to use
       more aggressive assumptions which may lead to improved optimization
!      opportunities.  Use of '-fwhole-program' is not needed when linker
!      plugin is active (see '-fuse-linker-plugin').
  
       The current implementation of LTO makes no attempt to generate
       bytecode that is portable between different types of hosts.  The
--- 13239,13281 ----
            gfortran -c -flto baz.f90
            g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
  
!      Notice that the final link is done with ‘g++’ to get the C++
!      runtime libraries and ‘-lgfortran’ is added to get the Fortran
       runtime libraries.  In general, when mixing languages in LTO mode,
       you should use the same link command options as when mixing
       languages in a regular (non-LTO) compilation.
  
       If object files containing GIMPLE bytecode are stored in a library
!      archive, say ‘libfoo.a’, it is possible to extract and use them in
       an LTO link if you are using a linker with plugin support.  To
!      create static libraries suitable for LTO, use ‘gcc-ar’ and
!      ‘gcc-ranlib’ instead of ‘ar’ and ‘ranlib’; to show the symbols of
!      object files with GIMPLE bytecode, use ‘gcc-nm’.  Those commands
!      require that ‘ar’, ‘ranlib’ and ‘nm’ have been compiled with plugin
!      support.  At link time, use the flag ‘-fuse-linker-plugin’ to
       ensure that the library participates in the LTO optimization
       process:
  
            gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
  
       With the linker plugin enabled, the linker extracts the needed
!      GIMPLE files from ‘libfoo.a’ and passes them on to the running GCC
       to make them part of the aggregated GIMPLE image to be optimized.
  
       If you are not using a linker with plugin support and/or do not
!      enable the linker plugin, then the objects inside ‘libfoo.a’ are
       extracted and linked as usual, but they do not participate in the
       LTO optimization process.  In order to make a static library
       suitable for both LTO optimization and usual linkage, compile its
!      object files with ‘-flto’ ‘-ffat-lto-objects’.
  
       Link-time optimizations do not require the presence of the whole
       program to operate.  If the program does not require any symbols to
!      be exported, it is possible to combine ‘-flto’ and
!      ‘-fwhole-program’ to allow the interprocedural optimizers to use
       more aggressive assumptions which may lead to improved optimization
!      opportunities.  Use of ‘-fwhole-program’ is not needed when linker
!      plugin is active (see ‘-fuse-linker-plugin’).
  
       The current implementation of LTO makes no attempt to generate
       bytecode that is portable between different types of hosts.  The
*************** optimizations to be performed is desired
*** 13285,13323 ****
  
       If you specify the optional N, the optimization and code generation
       done at link time is executed in parallel using N parallel jobs by
!      utilizing an installed 'make' program.  The environment variable
!      'MAKE' may be used to override the program used.
  
!      You can also specify '-flto=jobserver' to use GNU make's job server
       mode to determine the number of parallel jobs.  This is useful when
       the Makefile calling GCC is already executing in parallel.  You
!      must prepend a '+' to the command recipe in the parent Makefile for
!      this to work.  This option likely only works if 'MAKE' is GNU make.
       Even without the option value, GCC tries to automatically detect a
       running GNU make's job server.
  
!      Use '-flto=auto' to use GNU make's job server, if available, or
       otherwise fall back to autodetection of the number of CPU threads
       present in your system.
  
! '-flto-partition=ALG'
       Specify the partitioning algorithm used by the link-time optimizer.
!      The value is either '1to1' to specify a partitioning mirroring the
!      original source files or 'balanced' to specify partitioning into
!      equally sized chunks (whenever possible) or 'max' to create new
!      partition for every symbol where possible.  Specifying 'none' as an
       algorithm disables partitioning and streaming completely.  The
!      default value is 'balanced'.  While '1to1' can be used as an
!      workaround for various code ordering issues, the 'max' partitioning
!      is intended for internal testing only.  The value 'one' specifies
!      that exactly one partition should be used while the value 'none'
       bypasses partitioning and executes the link-time optimization step
       directly from the WPA phase.
  
! '-flto-compression-level=N'
       This option specifies the level of compression used for
       intermediate language written to LTO object files, and is only
!      meaningful in conjunction with LTO mode ('-flto').  GCC currently
       supports two LTO compression algorithms.  For zstd, valid values
       are 0 (no compression) to 19 (maximum compression), while zlib
       supports values from 0 to 9.  Values outside this range are clamped
--- 13289,13327 ----
  
       If you specify the optional N, the optimization and code generation
       done at link time is executed in parallel using N parallel jobs by
!      utilizing an installed ‘make’ program.  The environment variable
!      ‘MAKE’ may be used to override the program used.
  
!      You can also specify ‘-flto=jobserver’ to use GNU make's job server
       mode to determine the number of parallel jobs.  This is useful when
       the Makefile calling GCC is already executing in parallel.  You
!      must prepend a ‘+’ to the command recipe in the parent Makefile for
!      this to work.  This option likely only works if ‘MAKE’ is GNU make.
       Even without the option value, GCC tries to automatically detect a
       running GNU make's job server.
  
!      Use ‘-flto=auto’ to use GNU make's job server, if available, or
       otherwise fall back to autodetection of the number of CPU threads
       present in your system.
  
! ‘-flto-partition=ALG’
       Specify the partitioning algorithm used by the link-time optimizer.
!      The value is either ‘1to1’ to specify a partitioning mirroring the
!      original source files or ‘balanced’ to specify partitioning into
!      equally sized chunks (whenever possible) or ‘max’ to create new
!      partition for every symbol where possible.  Specifying ‘none’ as an
       algorithm disables partitioning and streaming completely.  The
!      default value is ‘balanced’.  While ‘1to1’ can be used as an
!      workaround for various code ordering issues, the ‘max’ partitioning
!      is intended for internal testing only.  The value ‘one’ specifies
!      that exactly one partition should be used while the value ‘none’
       bypasses partitioning and executes the link-time optimization step
       directly from the WPA phase.
  
! ‘-flto-compression-level=N’
       This option specifies the level of compression used for
       intermediate language written to LTO object files, and is only
!      meaningful in conjunction with LTO mode (‘-flto’).  GCC currently
       supports two LTO compression algorithms.  For zstd, valid values
       are 0 (no compression) to 19 (maximum compression), while zlib
       supports values from 0 to 9.  Values outside this range are clamped
*************** optimizations to be performed is desired
*** 13325,13331 ****
       option is not given, a default balanced compression setting is
       used.
  
! '-fuse-linker-plugin'
       Enables the use of a linker plugin during link-time optimization.
       This option relies on plugin support in the linker, which is
       available in gold or in GNU ld 2.21 or newer.
--- 13329,13335 ----
       option is not given, a default balanced compression setting is
       used.
  
! ‘-fuse-linker-plugin’
       Enables the use of a linker plugin during link-time optimization.
       This option relies on plugin support in the linker, which is
       available in gold or in GNU ld 2.21 or newer.
*************** optimizations to be performed is desired
*** 13336,13372 ****
       This information specifies what symbols can be accessed externally
       (by non-LTO object or during dynamic linking).  Resulting code
       quality improvements on binaries (and shared libraries that use
!      hidden visibility) are similar to '-fwhole-program'.  See '-flto'
       for a description of the effect of this flag and how to use it.
  
       This option is enabled by default when LTO support in GCC is
       enabled and GCC was configured for use with a linker supporting
       plugins (GNU ld 2.21 or newer or gold).
  
! '-ffat-lto-objects'
       Fat LTO objects are object files that contain both the intermediate
       language and the object code.  This makes them usable for both LTO
       linking and normal linking.  This option is effective only when
!      compiling with '-flto' and is ignored at link time.
  
!      '-fno-fat-lto-objects' improves compilation time over plain LTO,
       but requires the complete toolchain to be aware of LTO. It requires
       a linker with linker plugin support for basic functionality.
!      Additionally, 'nm', 'ar' and 'ranlib' need to support linker
       plugins to allow a full-featured build environment (capable of
!      building static libraries etc).  GCC provides the 'gcc-ar',
!      'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
       tools.  With non fat LTO makefiles need to be modified to use them.
  
       Note that modern binutils provide plugin auto-load mechanism.
!      Installing the linker plugin into '$libdir/bfd-plugins' has the
!      same effect as usage of the command wrappers ('gcc-ar', 'gcc-nm'
!      and 'gcc-ranlib').
  
!      The default is '-fno-fat-lto-objects' on targets with linker plugin
       support.
  
! '-fcompare-elim'
       After register allocation and post-register allocation instruction
       splitting, identify arithmetic instructions that compute processor
       flags similar to a comparison operation based on that arithmetic.
--- 13340,13376 ----
       This information specifies what symbols can be accessed externally
       (by non-LTO object or during dynamic linking).  Resulting code
       quality improvements on binaries (and shared libraries that use
!      hidden visibility) are similar to ‘-fwhole-program’.  See ‘-flto’
       for a description of the effect of this flag and how to use it.
  
       This option is enabled by default when LTO support in GCC is
       enabled and GCC was configured for use with a linker supporting
       plugins (GNU ld 2.21 or newer or gold).
  
! ‘-ffat-lto-objects’
       Fat LTO objects are object files that contain both the intermediate
       language and the object code.  This makes them usable for both LTO
       linking and normal linking.  This option is effective only when
!      compiling with ‘-flto’ and is ignored at link time.
  
!      ‘-fno-fat-lto-objects’ improves compilation time over plain LTO,
       but requires the complete toolchain to be aware of LTO. It requires
       a linker with linker plugin support for basic functionality.
!      Additionally, ‘nm’, ‘ar’ and ‘ranlib’ need to support linker
       plugins to allow a full-featured build environment (capable of
!      building static libraries etc).  GCC provides the ‘gcc-ar’,
!      ‘gcc-nm’, ‘gcc-ranlib’ wrappers to pass the right options to these
       tools.  With non fat LTO makefiles need to be modified to use them.
  
       Note that modern binutils provide plugin auto-load mechanism.
!      Installing the linker plugin into ‘$libdir/bfd-plugins’ has the
!      same effect as usage of the command wrappers (‘gcc-ar’, ‘gcc-nm’
!      and ‘gcc-ranlib’).
  
!      The default is ‘-fno-fat-lto-objects’ on targets with linker plugin
       support.
  
! ‘-fcompare-elim’
       After register allocation and post-register allocation instruction
       splitting, identify arithmetic instructions that compute processor
       flags similar to a comparison operation based on that arithmetic.
*************** optimizations to be performed is desired
*** 13376,13421 ****
       represent the comparison operation before register allocation is
       complete.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os'.
  
! '-ffold-mem-offsets'
! '-fno-fold-mem-offsets'
       Try to eliminate add instructions by folding them in memory
       loads/stores.
  
!      Enabled at levels '-O2', '-O3'.
  
! '-fcprop-registers'
       After register allocation and post-register allocation instruction
       splitting, perform a copy-propagation pass to try to reduce
       scheduling dependencies and occasionally eliminate the copy.
  
!      Enabled at levels '-O1', '-O2', '-O3', '-Os'.
  
! '-fprofile-correction'
       Profiles collected using an instrumented binary for multi-threaded
       programs may be inconsistent due to missed counter updates.  When
       this option is specified, GCC uses heuristics to correct or smooth
       out such inconsistencies.  By default, GCC emits an error message
       when an inconsistent profile is detected.
  
!      This option is enabled by '-fauto-profile'.
  
! '-fprofile-partial-training'
!      With '-fprofile-use' all portions of programs not executed during
       train run are optimized agressively for size rather than speed.  In
       some cases it is not practical to train all possible hot paths in
       the program.  (For example, program may contain functions specific
       for a given hardware and trianing may not cover all hardware
       configurations program is run on.)  With
!      '-fprofile-partial-training' profile feedback will be ignored for
       all functions not executed during the train run leading them to be
       optimized as if they were compiled without profile feedback.  This
       leads to better performance when train run is not representative
       but also leads to significantly bigger code.
  
! '-fprofile-use'
! '-fprofile-use=PATH'
       Enable profile feedback-directed optimizations, and the following
       optimizations, many of which are generally profitable only with
       profile feedback available:
--- 13380,13425 ----
       represent the comparison operation before register allocation is
       complete.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-ffold-mem-offsets’
! ‘-fno-fold-mem-offsets’
       Try to eliminate add instructions by folding them in memory
       loads/stores.
  
!      Enabled at levels ‘-O2’, ‘-O3’.
  
! ‘-fcprop-registers’
       After register allocation and post-register allocation instruction
       splitting, perform a copy-propagation pass to try to reduce
       scheduling dependencies and occasionally eliminate the copy.
  
!      Enabled at levels ‘-O1’, ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-fprofile-correction’
       Profiles collected using an instrumented binary for multi-threaded
       programs may be inconsistent due to missed counter updates.  When
       this option is specified, GCC uses heuristics to correct or smooth
       out such inconsistencies.  By default, GCC emits an error message
       when an inconsistent profile is detected.
  
!      This option is enabled by ‘-fauto-profile’.
  
! ‘-fprofile-partial-training’
!      With ‘-fprofile-use’ all portions of programs not executed during
       train run are optimized agressively for size rather than speed.  In
       some cases it is not practical to train all possible hot paths in
       the program.  (For example, program may contain functions specific
       for a given hardware and trianing may not cover all hardware
       configurations program is run on.)  With
!      ‘-fprofile-partial-training’ profile feedback will be ignored for
       all functions not executed during the train run leading them to be
       optimized as if they were compiled without profile feedback.  This
       leads to better performance when train run is not representative
       but also leads to significantly bigger code.
  
! ‘-fprofile-use’
! ‘-fprofile-use=PATH’
       Enable profile feedback-directed optimizations, and the following
       optimizations, many of which are generally profitable only with
       profile feedback available:
*************** optimizations to be performed is desired
*** 13430,13449 ****
  
       Before you can use this option, you must first generate profiling
       information.  *Note Instrumentation Options::, for information
!      about the '-fprofile-generate' option.
  
       By default, GCC emits an error message if the feedback profiles do
       not match the source code.  This error can be turned into a warning
!      by using '-Wno-error=coverage-mismatch'.  Note this may result in
       poorly optimized code.  Additionally, by default, GCC also emits a
       warning message if the feedback profiles do not exist (see
!      '-Wmissing-profile').
  
       If PATH is specified, GCC looks at the PATH to find the profile
!      feedback data files.  See '-fprofile-dir'.
  
! '-fauto-profile'
! '-fauto-profile=PATH'
       Enable sampling-based feedback-directed optimizations, and the
       following optimizations, many of which are generally profitable
       only with profile feedback available:
--- 13434,13453 ----
  
       Before you can use this option, you must first generate profiling
       information.  *Note Instrumentation Options::, for information
!      about the ‘-fprofile-generate’ option.
  
       By default, GCC emits an error message if the feedback profiles do
       not match the source code.  This error can be turned into a warning
!      by using ‘-Wno-error=coverage-mismatch’.  Note this may result in
       poorly optimized code.  Additionally, by default, GCC also emits a
       warning message if the feedback profiles do not exist (see
!      ‘-Wmissing-profile’).
  
       If PATH is specified, GCC looks at the PATH to find the profile
!      feedback data files.  See ‘-fprofile-dir’.
  
! ‘-fauto-profile’
! ‘-fauto-profile=PATH’
       Enable sampling-based feedback-directed optimizations, and the
       following optimizations, many of which are generally profitable
       only with profile feedback available:
*************** optimizations to be performed is desired
*** 13457,13473 ****
            -fprofile-correction
  
       PATH is the name of a file containing AutoFDO profile information.
!      If omitted, it defaults to 'fbdata.afdo' in the current directory.
  
       Producing an AutoFDO profile data file requires running your
!      program with the 'perf' utility on a supported GNU/Linux target
       system.  For more information, see <https://perf.wiki.kernel.org/>.
  
       E.g.
            perf record -e br_inst_retired:near_taken -b -o perf.data \
                -- your_program
  
!      Then use the 'create_gcov' tool to convert the raw profile data to
       a format that can be used by GCC.  You must also supply the
       unstripped binary for your program to this tool.  See
       <https://github.com/google/autofdo>.
--- 13461,13477 ----
            -fprofile-correction
  
       PATH is the name of a file containing AutoFDO profile information.
!      If omitted, it defaults to ‘fbdata.afdo’ in the current directory.
  
       Producing an AutoFDO profile data file requires running your
!      program with the ‘perf’ utility on a supported GNU/Linux target
       system.  For more information, see <https://perf.wiki.kernel.org/>.
  
       E.g.
            perf record -e br_inst_retired:near_taken -b -o perf.data \
                -- your_program
  
!      Then use the ‘create_gcov’ tool to convert the raw profile data to
       a format that can be used by GCC.  You must also supply the
       unstripped binary for your program to this tool.  See
       <https://github.com/google/autofdo>.
*************** optimizations to be performed is desired
*** 13480,13559 ****
  floating-point arithmetic.  These options trade off between speed and
  correctness.  All must be specifically enabled.
  
! '-ffloat-store'
       Do not store floating-point variables in registers, and inhibit
       other options that might change whether a floating-point value is
       taken from a register or memory.
  
       This option prevents undesirable excess precision on machines such
       as the 68000 where the floating registers (of the 68881) keep more
!      precision than a 'double' is supposed to have.  Similarly for the
       x86 architecture.  For most programs, the excess precision does
       only good, but a few programs rely on the precise definition of
!      IEEE floating point.  Use '-ffloat-store' for such programs, after
       modifying them to store all pertinent intermediate computations
       into variables.
  
! '-fexcess-precision=STYLE'
       This option allows further control over excess precision on
       machines where floating-point operations occur in a format with
       more precision or range than the IEEE standard and interchange
!      floating-point types.  By default, '-fexcess-precision=fast' is in
       effect; this means that operations may be carried out in a wider
       precision than the types specified in the source if that would
       result in faster code, and it is unpredictable when rounding to the
       types specified in the source code takes place.  When compiling C
!      or C++, if '-fexcess-precision=standard' is specified then excess
       precision follows the rules specified in ISO C99 or C++; in
       particular, both casts and assignments cause values to be rounded
!      to their semantic types (whereas '-ffloat-store' only affects
       assignments).  This option is enabled by default for C or C++ if a
!      strict conformance option such as '-std=c99' or '-std=c++17' is
!      used.  '-ffast-math' enables '-fexcess-precision=fast' by default
       regardless of whether a strict conformance option is used.  If
!      '-fexcess-precision=16' is specified, constants and the results of
!      expressions with types '_Float16' and '__bf16' are computed without
       excess precision.
  
!      '-fexcess-precision=standard' is not implemented for languages
       other than C or C++.  On the x86, it has no effect if
!      '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former
       case, IEEE semantics apply without excess precision, and in the
       latter, rounding is unpredictable.
  
! '-ffast-math'
!      Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
!      '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans',
!      '-fcx-limited-range' and '-fexcess-precision=fast'.
  
!      This option causes the preprocessor macro '__FAST_MATH__' to be
       defined.
  
!      This option is not turned on by any '-O' option besides '-Ofast'
       since it can result in incorrect output for programs that depend on
       an exact implementation of IEEE or ISO rules/specifications for
       math functions.  It may, however, yield faster code for programs
       that do not require the guarantees of these specifications.
  
! '-fno-math-errno'
!      Do not set 'errno' after calling math functions that are executed
!      with a single instruction, e.g., 'sqrt'.  A program that relies on
       IEEE exceptions for math error handling may want to use this flag
       for speed while maintaining IEEE arithmetic compatibility.
  
!      This option is not turned on by any '-O' option since it can result
       in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.  It may, however, yield faster code for programs that do
       not require the guarantees of these specifications.
  
!      The default is '-fmath-errno'.
  
!      On Darwin systems, the math library never sets 'errno'.  There is
       therefore no reason for the compiler to consider the possibility
!      that it might, and '-fno-math-errno' is the default.
  
! '-funsafe-math-optimizations'
  
       Allow optimizations for floating-point arithmetic that (a) assume
       that arguments and results are valid and (b) may violate IEEE or
--- 13484,13563 ----
  floating-point arithmetic.  These options trade off between speed and
  correctness.  All must be specifically enabled.
  
! ‘-ffloat-store’
       Do not store floating-point variables in registers, and inhibit
       other options that might change whether a floating-point value is
       taken from a register or memory.
  
       This option prevents undesirable excess precision on machines such
       as the 68000 where the floating registers (of the 68881) keep more
!      precision than a ‘double’ is supposed to have.  Similarly for the
       x86 architecture.  For most programs, the excess precision does
       only good, but a few programs rely on the precise definition of
!      IEEE floating point.  Use ‘-ffloat-store’ for such programs, after
       modifying them to store all pertinent intermediate computations
       into variables.
  
! ‘-fexcess-precision=STYLE’
       This option allows further control over excess precision on
       machines where floating-point operations occur in a format with
       more precision or range than the IEEE standard and interchange
!      floating-point types.  By default, ‘-fexcess-precision=fast’ is in
       effect; this means that operations may be carried out in a wider
       precision than the types specified in the source if that would
       result in faster code, and it is unpredictable when rounding to the
       types specified in the source code takes place.  When compiling C
!      or C++, if ‘-fexcess-precision=standard’ is specified then excess
       precision follows the rules specified in ISO C99 or C++; in
       particular, both casts and assignments cause values to be rounded
!      to their semantic types (whereas ‘-ffloat-store’ only affects
       assignments).  This option is enabled by default for C or C++ if a
!      strict conformance option such as ‘-std=c99’ or ‘-std=c++17’ is
!      used.  ‘-ffast-math’ enables ‘-fexcess-precision=fast’ by default
       regardless of whether a strict conformance option is used.  If
!      ‘-fexcess-precision=16’ is specified, constants and the results of
!      expressions with types ‘_Float16’ and ‘__bf16’ are computed without
       excess precision.
  
!      ‘-fexcess-precision=standard’ is not implemented for languages
       other than C or C++.  On the x86, it has no effect if
!      ‘-mfpmath=sse’ or ‘-mfpmath=sse+387’ is specified; in the former
       case, IEEE semantics apply without excess precision, and in the
       latter, rounding is unpredictable.
  
! ‘-ffast-math’
!      Sets the options ‘-fno-math-errno’, ‘-funsafe-math-optimizations’,
!      ‘-ffinite-math-only’, ‘-fno-rounding-math’, ‘-fno-signaling-nans’,
!      ‘-fcx-limited-range’ and ‘-fexcess-precision=fast’.
  
!      This option causes the preprocessor macro ‘__FAST_MATH__’ to be
       defined.
  
!      This option is not turned on by any ‘-O’ option besides ‘-Ofast’
       since it can result in incorrect output for programs that depend on
       an exact implementation of IEEE or ISO rules/specifications for
       math functions.  It may, however, yield faster code for programs
       that do not require the guarantees of these specifications.
  
! ‘-fno-math-errno’
!      Do not set ‘errno’ after calling math functions that are executed
!      with a single instruction, e.g., ‘sqrt’.  A program that relies on
       IEEE exceptions for math error handling may want to use this flag
       for speed while maintaining IEEE arithmetic compatibility.
  
!      This option is not turned on by any ‘-O’ option since it can result
       in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.  It may, however, yield faster code for programs that do
       not require the guarantees of these specifications.
  
!      The default is ‘-fmath-errno’.
  
!      On Darwin systems, the math library never sets ‘errno’.  There is
       therefore no reason for the compiler to consider the possibility
!      that it might, and ‘-fno-math-errno’ is the default.
  
! ‘-funsafe-math-optimizations’
  
       Allow optimizations for floating-point arithmetic that (a) assume
       that arguments and results are valid and (b) may violate IEEE or
*************** correctness.  All must be specifically e
*** 13561,13646 ****
       or startup files that change the default FPU control word or other
       similar optimizations.
  
!      This option is not turned on by any '-O' option since it can result
       in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.  It may, however, yield faster code for programs that do
       not require the guarantees of these specifications.  Enables
!      '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
!      '-freciprocal-math'.
  
!      The default is '-fno-unsafe-math-optimizations'.
  
! '-fassociative-math'
  
       Allow re-association of operands in series of floating-point
       operations.  This violates the ISO C and C++ language standard by
       possibly changing computation result.  NOTE: re-ordering may change
       the sign of zero as well as ignore NaNs and inhibit or create
       underflow or overflow (and thus cannot be used on code that relies
!      on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
       floating-point comparisons and thus may not be used when ordered
       comparisons are required.  This option requires that both
!      '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
!      Moreover, it doesn't make much sense with '-frounding-math'.  For
       Fortran the option is automatically enabled when both
!      '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
  
!      The default is '-fno-associative-math'.
  
! '-freciprocal-math'
  
       Allow the reciprocal of a value to be used instead of dividing by
!      the value if this enables optimizations.  For example 'x / y' can
!      be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
       to common subexpression elimination.  Note that this loses
       precision and increases the number of flops operating on the value.
  
!      The default is '-fno-reciprocal-math'.
  
! '-ffinite-math-only'
       Allow optimizations for floating-point arithmetic that assume that
       arguments and results are not NaNs or +-Infs.
  
!      This option is not turned on by any '-O' option since it can result
       in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.  It may, however, yield faster code for programs that do
       not require the guarantees of these specifications.
  
!      The default is '-fno-finite-math-only'.
  
! '-fno-signed-zeros'
       Allow optimizations for floating-point arithmetic that ignore the
       signedness of zero.  IEEE arithmetic specifies the behavior of
!      distinct +0.0 and -0.0 values, which then prohibits simplification
       of expressions such as x+0.0 or 0.0*x (even with
!      '-ffinite-math-only').  This option implies that the sign of a zero
       result isn't significant.
  
!      The default is '-fsigned-zeros'.
  
! '-fno-trapping-math'
       Compile code assuming that floating-point operations cannot
       generate user-visible traps.  These traps include division by zero,
       overflow, underflow, inexact result and invalid operation.  This
!      option requires that '-fno-signaling-nans' be in effect.  Setting
       this option may allow faster code if one relies on "non-stop" IEEE
       arithmetic, for example.
  
!      This option should never be turned on by any '-O' option since it
       can result in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.
  
!      The default is '-ftrapping-math'.
  
       Future versions of GCC may provide finer control of this setting
!      using C99's 'FENV_ACCESS' pragma.  This command-line option will be
!      used along with '-frounding-math' to specify the default state for
!      'FENV_ACCESS'.
  
! '-frounding-math'
       Disable transformations and optimizations that assume default
       floating-point rounding behavior.  This is round-to-zero for all
       floating point to integer conversions, and round-to-nearest for all
--- 13565,13650 ----
       or startup files that change the default FPU control word or other
       similar optimizations.
  
!      This option is not turned on by any ‘-O’ option since it can result
       in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.  It may, however, yield faster code for programs that do
       not require the guarantees of these specifications.  Enables
!      ‘-fno-signed-zeros’, ‘-fno-trapping-math’, ‘-fassociative-math’ and
!      ‘-freciprocal-math’.
  
!      The default is ‘-fno-unsafe-math-optimizations’.
  
! ‘-fassociative-math’
  
       Allow re-association of operands in series of floating-point
       operations.  This violates the ISO C and C++ language standard by
       possibly changing computation result.  NOTE: re-ordering may change
       the sign of zero as well as ignore NaNs and inhibit or create
       underflow or overflow (and thus cannot be used on code that relies
!      on rounding behavior like ‘(x + 2**52) - 2**52’.  May also reorder
       floating-point comparisons and thus may not be used when ordered
       comparisons are required.  This option requires that both
!      ‘-fno-signed-zeros’ and ‘-fno-trapping-math’ be in effect.
!      Moreover, it doesn't make much sense with ‘-frounding-math’.  For
       Fortran the option is automatically enabled when both
!      ‘-fno-signed-zeros’ and ‘-fno-trapping-math’ are in effect.
  
!      The default is ‘-fno-associative-math’.
  
! ‘-freciprocal-math’
  
       Allow the reciprocal of a value to be used instead of dividing by
!      the value if this enables optimizations.  For example ‘x / y’ can
!      be replaced with ‘x * (1/y)’, which is useful if ‘(1/y)’ is subject
       to common subexpression elimination.  Note that this loses
       precision and increases the number of flops operating on the value.
  
!      The default is ‘-fno-reciprocal-math’.
  
! ‘-ffinite-math-only’
       Allow optimizations for floating-point arithmetic that assume that
       arguments and results are not NaNs or +-Infs.
  
!      This option is not turned on by any ‘-O’ option since it can result
       in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.  It may, however, yield faster code for programs that do
       not require the guarantees of these specifications.
  
!      The default is ‘-fno-finite-math-only’.
  
! ‘-fno-signed-zeros’
       Allow optimizations for floating-point arithmetic that ignore the
       signedness of zero.  IEEE arithmetic specifies the behavior of
!      distinct +0.0 and −0.0 values, which then prohibits simplification
       of expressions such as x+0.0 or 0.0*x (even with
!      ‘-ffinite-math-only’).  This option implies that the sign of a zero
       result isn't significant.
  
!      The default is ‘-fsigned-zeros’.
  
! ‘-fno-trapping-math’
       Compile code assuming that floating-point operations cannot
       generate user-visible traps.  These traps include division by zero,
       overflow, underflow, inexact result and invalid operation.  This
!      option requires that ‘-fno-signaling-nans’ be in effect.  Setting
       this option may allow faster code if one relies on "non-stop" IEEE
       arithmetic, for example.
  
!      This option should never be turned on by any ‘-O’ option since it
       can result in incorrect output for programs that depend on an exact
       implementation of IEEE or ISO rules/specifications for math
       functions.
  
!      The default is ‘-ftrapping-math’.
  
       Future versions of GCC may provide finer control of this setting
!      using C99's ‘FENV_ACCESS’ pragma.  This command-line option will be
!      used along with ‘-frounding-math’ to specify the default state for
!      ‘FENV_ACCESS’.
  
! ‘-frounding-math’
       Disable transformations and optimizations that assume default
       floating-point rounding behavior.  This is round-to-zero for all
       floating point to integer conversions, and round-to-nearest for all
*************** correctness.  All must be specifically e
*** 13652,13779 ****
       transformations that are unsafe in the presence of sign-dependent
       rounding modes.
  
!      The default is '-fno-rounding-math'.
  
       This option is experimental and does not currently guarantee to
       disable all GCC optimizations that are affected by rounding mode.
       Future versions of GCC may provide finer control of this setting
!      using C99's 'FENV_ACCESS' pragma.  This command-line option will be
!      used along with '-ftrapping-math' to specify the default state for
!      'FENV_ACCESS'.
  
! '-fsignaling-nans'
       Compile code assuming that IEEE signaling NaNs may generate
       user-visible traps during floating-point operations.  Setting this
       option disables optimizations that may change the number of
       exceptions visible with signaling NaNs.  This option implies
!      '-ftrapping-math'.
  
!      This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
       defined.
  
!      The default is '-fno-signaling-nans'.
  
       This option is experimental and does not currently guarantee to
       disable all GCC optimizations that affect signaling NaN behavior.
  
! '-fno-fp-int-builtin-inexact'
!      Do not allow the built-in functions 'ceil', 'floor', 'round' and
!      'trunc', and their 'float' and 'long double' variants, to generate
       code that raises the "inexact" floating-point exception for
       noninteger arguments.  ISO C99 and C11 allow these functions to
       raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
       bindings to IEEE 754-2008, as integrated into ISO C23, does not
       allow these functions to do so.
  
!      The default is '-ffp-int-builtin-inexact', allowing the exception
       to be raised, unless C23 or a later C standard is selected.  This
!      option does nothing unless '-ftrapping-math' is in effect.
  
!      Even if '-fno-fp-int-builtin-inexact' is used, if the functions
       generate a call to a library function then the "inexact" exception
       may be raised if the library implementation does not follow TS
       18661.
  
! '-fsingle-precision-constant'
       Treat floating-point constants as single precision instead of
       implicitly converting them to double-precision constants.
  
! '-fcx-limited-range'
       When enabled, this option states that a range reduction step is not
       needed when performing complex division.  Also, there is no
       checking whether the result of a complex multiplication or division
!      is 'NaN + I*NaN', with an attempt to rescue the situation in that
!      case.  The default is '-fno-cx-limited-range', but is enabled by
!      '-ffast-math'.
  
       This option controls the default setting of the ISO C99
!      'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
       languages.
  
! '-fcx-fortran-rules'
       Complex multiplication and division follow Fortran rules.  Range
       reduction is done as part of complex division, but there is no
       checking whether the result of a complex multiplication or division
!      is 'NaN + I*NaN', with an attempt to rescue the situation in that
       case.
  
!      The default is '-fno-cx-fortran-rules'.
  
   The following options control optimizations that may improve
! performance, but are not enabled by any '-O' options.  This section
  includes experimental options that may produce broken code.
  
! '-fbranch-probabilities'
!      After running a program compiled with '-fprofile-arcs' (*note
       Instrumentation Options::), you can compile it a second time using
!      '-fbranch-probabilities', to improve optimizations based on the
       number of times each branch was taken.  When a program compiled
!      with '-fprofile-arcs' exits, it saves arc execution counts to a
!      file called 'SOURCENAME.gcda' for each source file.  The
       information in this data file is very dependent on the structure of
       the generated code, so you must use the same source code and the
       same optimization options for both compilations.  See details about
!      the file naming in '-fprofile-arcs'.
  
!      With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
!      each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
       optimization.  Currently, they are only used in one place: in
!      'reorg.cc', instead of guessing which path a branch is most likely
!      to take, the 'REG_BR_PROB' values are used to exactly determine
       which path is taken more often.
  
!      Enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-fprofile-values'
!      If combined with '-fprofile-arcs', it adds code so that some data
       about values of expressions in the program is gathered.
  
!      With '-fbranch-probabilities', it reads back the data gathered from
       profiling values of expressions for usage in optimizations.
  
!      Enabled by '-fprofile-generate', '-fprofile-use', and
!      '-fauto-profile'.
  
! '-fprofile-reorder-functions'
       Function reordering based on profile instrumentation collects first
       time of execution of a function and orders these functions in
       ascending order.
  
!      Enabled with '-fprofile-use'.
  
! '-fvpt'
!      If combined with '-fprofile-arcs', this option instructs the
       compiler to add code to gather information about values of
       expressions.
  
!      With '-fbranch-probabilities', it reads back the data gathered and
       actually performs the optimizations based on them.  Currently the
       optimizations include specialization of division operations using
       the knowledge about the value of the denominator.
  
!      Enabled with '-fprofile-use' and '-fauto-profile'.
  
! '-frename-registers'
       Attempt to avoid false dependencies in scheduled code by making use
       of registers left over after register allocation.  This
       optimization most benefits processors with lots of registers.
--- 13656,13783 ----
       transformations that are unsafe in the presence of sign-dependent
       rounding modes.
  
!      The default is ‘-fno-rounding-math’.
  
       This option is experimental and does not currently guarantee to
       disable all GCC optimizations that are affected by rounding mode.
       Future versions of GCC may provide finer control of this setting
!      using C99's ‘FENV_ACCESS’ pragma.  This command-line option will be
!      used along with ‘-ftrapping-math’ to specify the default state for
!      ‘FENV_ACCESS’.
  
! ‘-fsignaling-nans’
       Compile code assuming that IEEE signaling NaNs may generate
       user-visible traps during floating-point operations.  Setting this
       option disables optimizations that may change the number of
       exceptions visible with signaling NaNs.  This option implies
!      ‘-ftrapping-math’.
  
!      This option causes the preprocessor macro ‘__SUPPORT_SNAN__’ to be
       defined.
  
!      The default is ‘-fno-signaling-nans’.
  
       This option is experimental and does not currently guarantee to
       disable all GCC optimizations that affect signaling NaN behavior.
  
! ‘-fno-fp-int-builtin-inexact’
!      Do not allow the built-in functions ‘ceil’, ‘floor’, ‘round’ and
!      ‘trunc’, and their ‘float’ and ‘long double’ variants, to generate
       code that raises the "inexact" floating-point exception for
       noninteger arguments.  ISO C99 and C11 allow these functions to
       raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
       bindings to IEEE 754-2008, as integrated into ISO C23, does not
       allow these functions to do so.
  
!      The default is ‘-ffp-int-builtin-inexact’, allowing the exception
       to be raised, unless C23 or a later C standard is selected.  This
!      option does nothing unless ‘-ftrapping-math’ is in effect.
  
!      Even if ‘-fno-fp-int-builtin-inexact’ is used, if the functions
       generate a call to a library function then the "inexact" exception
       may be raised if the library implementation does not follow TS
       18661.
  
! ‘-fsingle-precision-constant’
       Treat floating-point constants as single precision instead of
       implicitly converting them to double-precision constants.
  
! ‘-fcx-limited-range’
       When enabled, this option states that a range reduction step is not
       needed when performing complex division.  Also, there is no
       checking whether the result of a complex multiplication or division
!      is ‘NaN + I*NaN’, with an attempt to rescue the situation in that
!      case.  The default is ‘-fno-cx-limited-range’, but is enabled by
!      ‘-ffast-math’.
  
       This option controls the default setting of the ISO C99
!      ‘CX_LIMITED_RANGE’ pragma.  Nevertheless, the option applies to all
       languages.
  
! ‘-fcx-fortran-rules’
       Complex multiplication and division follow Fortran rules.  Range
       reduction is done as part of complex division, but there is no
       checking whether the result of a complex multiplication or division
!      is ‘NaN + I*NaN’, with an attempt to rescue the situation in that
       case.
  
!      The default is ‘-fno-cx-fortran-rules’.
  
   The following options control optimizations that may improve
! performance, but are not enabled by any ‘-O’ options.  This section
  includes experimental options that may produce broken code.
  
! ‘-fbranch-probabilities’
!      After running a program compiled with ‘-fprofile-arcs’ (*note
       Instrumentation Options::), you can compile it a second time using
!      ‘-fbranch-probabilities’, to improve optimizations based on the
       number of times each branch was taken.  When a program compiled
!      with ‘-fprofile-arcs’ exits, it saves arc execution counts to a
!      file called ‘SOURCENAME.gcda’ for each source file.  The
       information in this data file is very dependent on the structure of
       the generated code, so you must use the same source code and the
       same optimization options for both compilations.  See details about
!      the file naming in ‘-fprofile-arcs’.
  
!      With ‘-fbranch-probabilities’, GCC puts a ‘REG_BR_PROB’ note on
!      each ‘JUMP_INSN’ and ‘CALL_INSN’.  These can be used to improve
       optimization.  Currently, they are only used in one place: in
!      ‘reorg.cc’, instead of guessing which path a branch is most likely
!      to take, the ‘REG_BR_PROB’ values are used to exactly determine
       which path is taken more often.
  
!      Enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-fprofile-values’
!      If combined with ‘-fprofile-arcs’, it adds code so that some data
       about values of expressions in the program is gathered.
  
!      With ‘-fbranch-probabilities’, it reads back the data gathered from
       profiling values of expressions for usage in optimizations.
  
!      Enabled by ‘-fprofile-generate’, ‘-fprofile-use’, and
!      ‘-fauto-profile’.
  
! ‘-fprofile-reorder-functions’
       Function reordering based on profile instrumentation collects first
       time of execution of a function and orders these functions in
       ascending order.
  
!      Enabled with ‘-fprofile-use’.
  
! ‘-fvpt’
!      If combined with ‘-fprofile-arcs’, this option instructs the
       compiler to add code to gather information about values of
       expressions.
  
!      With ‘-fbranch-probabilities’, it reads back the data gathered and
       actually performs the optimizations based on them.  Currently the
       optimizations include specialization of division operations using
       the knowledge about the value of the denominator.
  
!      Enabled with ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-frename-registers’
       Attempt to avoid false dependencies in scheduled code by making use
       of registers left over after register allocation.  This
       optimization most benefits processors with lots of registers.
*************** includes experimental options that may p
*** 13781,13853 ****
       however, it can make debugging impossible, since variables no
       longer stay in a "home register".
  
!      Enabled by default with '-funroll-loops'.
  
! '-fschedule-fusion'
       Performs a target dependent pass over the instruction stream to
       schedule instructions of same type together because target machine
       can execute them more efficiently if they are adjacent to each
       other in the instruction flow.
  
!      Enabled at levels '-O2', '-O3', '-Os'.
  
! '-ftracer'
       Perform tail duplication to enlarge superblock size.  This
       transformation simplifies the control flow of the function allowing
       other optimizations to do a better job.
  
!      Enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-funroll-loops'
       Unroll loops whose number of iterations can be determined at
!      compile time or upon entry to the loop.  '-funroll-loops' implies
!      '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
       also turns on complete loop peeling (i.e. complete removal of loops
       with a small constant number of iterations).  This option makes
       code larger, and may or may not make it run faster.
  
!      Enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-funroll-all-loops'
       Unroll all loops, even if their number of iterations is uncertain
       when the loop is entered.  This usually makes programs run more
!      slowly.  '-funroll-all-loops' implies the same options as
!      '-funroll-loops'.
  
! '-fpeel-loops'
       Peels loops for which there is enough information that they do not
       roll much (from profile feedback or static analysis).  It also
       turns on complete loop peeling (i.e. complete removal of loops with
       small constant number of iterations).
  
!      Enabled by '-O3', '-fprofile-use', and '-fauto-profile'.
  
! '-fmove-loop-invariants'
       Enables the loop invariant motion pass in the RTL loop optimizer.
!      Enabled at level '-O1' and higher, except for '-Og'.
  
! '-fmove-loop-stores'
       Enables the loop store motion pass in the GIMPLE loop optimizer.
       This moves invariant stores to after the end of the loop in
       exchange for carrying the stored value in a register across the
!      iteration.  Note for this option to have an effect '-ftree-loop-im'
!      has to be enabled as well.  Enabled at level '-O1' and higher,
!      except for '-Og'.
  
! '-fsplit-loops'
       Split a loop into two if it contains a condition that's always true
       for one side of the iteration space and false for the other.
  
!      Enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-funswitch-loops'
       Move branches with loop invariant conditions out of the loop, with
       duplicates of the loop on both branches (modified according to
       result of the condition).
  
!      Enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-fversion-loops-for-strides'
       If a loop iterates over an array with a variable stride, create
       another version of the loop that assumes the stride is always one.
       For example:
--- 13785,13857 ----
       however, it can make debugging impossible, since variables no
       longer stay in a "home register".
  
!      Enabled by default with ‘-funroll-loops’.
  
! ‘-fschedule-fusion’
       Performs a target dependent pass over the instruction stream to
       schedule instructions of same type together because target machine
       can execute them more efficiently if they are adjacent to each
       other in the instruction flow.
  
!      Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
  
! ‘-ftracer’
       Perform tail duplication to enlarge superblock size.  This
       transformation simplifies the control flow of the function allowing
       other optimizations to do a better job.
  
!      Enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-funroll-loops’
       Unroll loops whose number of iterations can be determined at
!      compile time or upon entry to the loop.  ‘-funroll-loops’ implies
!      ‘-frerun-cse-after-loop’, ‘-fweb’ and ‘-frename-registers’.  It
       also turns on complete loop peeling (i.e. complete removal of loops
       with a small constant number of iterations).  This option makes
       code larger, and may or may not make it run faster.
  
!      Enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-funroll-all-loops’
       Unroll all loops, even if their number of iterations is uncertain
       when the loop is entered.  This usually makes programs run more
!      slowly.  ‘-funroll-all-loops’ implies the same options as
!      ‘-funroll-loops’.
  
! ‘-fpeel-loops’
       Peels loops for which there is enough information that they do not
       roll much (from profile feedback or static analysis).  It also
       turns on complete loop peeling (i.e. complete removal of loops with
       small constant number of iterations).
  
!      Enabled by ‘-O3’, ‘-fprofile-use’, and ‘-fauto-profile’.
  
! ‘-fmove-loop-invariants’
       Enables the loop invariant motion pass in the RTL loop optimizer.
!      Enabled at level ‘-O1’ and higher, except for ‘-Og’.
  
! ‘-fmove-loop-stores’
       Enables the loop store motion pass in the GIMPLE loop optimizer.
       This moves invariant stores to after the end of the loop in
       exchange for carrying the stored value in a register across the
!      iteration.  Note for this option to have an effect ‘-ftree-loop-im’
!      has to be enabled as well.  Enabled at level ‘-O1’ and higher,
!      except for ‘-Og’.
  
! ‘-fsplit-loops’
       Split a loop into two if it contains a condition that's always true
       for one side of the iteration space and false for the other.
  
!      Enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-funswitch-loops’
       Move branches with loop invariant conditions out of the loop, with
       duplicates of the loop on both branches (modified according to
       result of the condition).
  
!      Enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-fversion-loops-for-strides’
       If a loop iterates over an array with a variable stride, create
       another version of the loop that assumes the stride is always one.
       For example:
*************** includes experimental options that may p
*** 13866,13876 ****
  
       This is particularly useful for assumed-shape arrays in Fortran
       where (for example) it allows better vectorization assuming
!      contiguous accesses.  This flag is enabled by default at '-O3'.  It
!      is also enabled by '-fprofile-use' and '-fauto-profile'.
  
! '-ffunction-sections'
! '-fdata-sections'
       Place each function or data item into its own section in the output
       file if the target supports arbitrary sections.  The name of the
       function or the name of the data item determines the section's name
--- 13870,13880 ----
  
       This is particularly useful for assumed-shape arrays in Fortran
       where (for example) it allows better vectorization assuming
!      contiguous accesses.  This flag is enabled by default at ‘-O3’.  It
!      is also enabled by ‘-fprofile-use’ and ‘-fauto-profile’.
  
! ‘-ffunction-sections’
! ‘-fdata-sections’
       Place each function or data item into its own section in the output
       file if the target supports arbitrary sections.  The name of the
       function or the name of the data item determines the section's name
*************** includes experimental options that may p
*** 13882,13888 ****
       such optimizations.  On AIX, the linker rearranges sections
       (CSECTs) based on the call graph.  The performance impact varies.
  
!      Together with a linker garbage collection (linker '--gc-sections'
       option) these options may lead to smaller statically-linked
       executables (after stripping).
  
--- 13886,13892 ----
       such optimizations.  On AIX, the linker rearranges sections
       (CSECTs) based on the call graph.  The performance impact varies.
  
!      Together with a linker garbage collection (linker ‘--gc-sections’
       option) these options may lead to smaller statically-linked
       executables (after stripping).
  
*************** includes experimental options that may p
*** 13899,13921 ****
       An example of such an optimization is relaxing calls to short call
       instructions.
  
! '-fstdarg-opt'
       Optimize the prologue of variadic argument functions with respect
       to usage of those arguments.
  
! '-fsection-anchors'
       Try to reduce the number of symbolic address calculations by using
       shared "anchor" symbols to address nearby objects.  This
       transformation can help to reduce the number of GOT entries and GOT
       accesses on some targets.
  
!      For example, the implementation of the following function 'foo':
  
            static int a, b, c;
            int foo (void) { return a + b + c; }
  
       usually calculates the addresses of all three variables, but if you
!      compile it with '-fsection-anchors', it accesses the variables from
       a common anchor point instead.  The effect is similar to the
       following pseudocode (which isn't valid C):
  
--- 13903,13925 ----
       An example of such an optimization is relaxing calls to short call
       instructions.
  
! ‘-fstdarg-opt’
       Optimize the prologue of variadic argument functions with respect
       to usage of those arguments.
  
! ‘-fsection-anchors’
       Try to reduce the number of symbolic address calculations by using
       shared "anchor" symbols to address nearby objects.  This
       transformation can help to reduce the number of GOT entries and GOT
       accesses on some targets.
  
!      For example, the implementation of the following function ‘foo’:
  
            static int a, b, c;
            int foo (void) { return a + b + c; }
  
       usually calculates the addresses of all three variables, but if you
!      compile it with ‘-fsection-anchors’, it accesses the variables from
       a common anchor point instead.  The effect is similar to the
       following pseudocode (which isn't valid C):
  
*************** includes experimental options that may p
*** 13927,13968 ****
  
       Not all targets support this option.
  
! '-fzero-call-used-regs=CHOICE'
       Zero call-used registers at function return to increase program
       security by either mitigating Return-Oriented Programming (ROP)
       attacks or preventing information leakage through registers.
  
       The possible values of CHOICE are the same as for the
!      'zero_call_used_regs' attribute (*note Function Attributes::).  The
!      default is 'skip'.
  
       You can control this behavior for a specific function by using the
!      function attribute 'zero_call_used_regs' (*note Function
       Attributes::).
  
! '--param NAME=VALUE'
       In some places, GCC uses various constants to control the amount of
       optimization that is done.  For example, GCC does not inline
       functions that contain more than a certain number of instructions.
       You can control some of these constants on the command line using
!      the '--param' option.
  
       The names of specific parameters, and the meaning of the values,
       are tied to the internals of the compiler, and are subject to
       change without notice in future releases.
  
       In order to get the minimal, maximal and default values of a
!      parameter, use the '--help=param -Q' options.
  
       In each case, the VALUE is an integer.  The following choices of
       NAME are recognized for all targets:
  
!      'predictable-branch-outcome'
            When branch is predicted to be taken with probability lower
            than this threshold (in percent), then it is considered well
            predictable.
  
!      'max-rtl-if-conversion-insns'
            RTL if-conversion tries to remove conditional branches around
            a block and replace them with conditionally executed
            instructions.  This parameter gives the maximum number of
--- 13931,13972 ----
  
       Not all targets support this option.
  
! ‘-fzero-call-used-regs=CHOICE’
       Zero call-used registers at function return to increase program
       security by either mitigating Return-Oriented Programming (ROP)
       attacks or preventing information leakage through registers.
  
       The possible values of CHOICE are the same as for the
!      ‘zero_call_used_regs’ attribute (*note Function Attributes::).  The
!      default is ‘skip’.
  
       You can control this behavior for a specific function by using the
!      function attribute ‘zero_call_used_regs’ (*note Function
       Attributes::).
  
! ‘--param NAME=VALUE’
       In some places, GCC uses various constants to control the amount of
       optimization that is done.  For example, GCC does not inline
       functions that contain more than a certain number of instructions.
       You can control some of these constants on the command line using
!      the ‘--param’ option.
  
       The names of specific parameters, and the meaning of the values,
       are tied to the internals of the compiler, and are subject to
       change without notice in future releases.
  
       In order to get the minimal, maximal and default values of a
!      parameter, use the ‘--help=param -Q’ options.
  
       In each case, the VALUE is an integer.  The following choices of
       NAME are recognized for all targets:
  
!      ‘predictable-branch-outcome’
            When branch is predicted to be taken with probability lower
            than this threshold (in percent), then it is considered well
            predictable.
  
!      ‘max-rtl-if-conversion-insns’
            RTL if-conversion tries to remove conditional branches around
            a block and replace them with conditionally executed
            instructions.  This parameter gives the maximum number of
*************** includes experimental options that may p
*** 13970,13976 ****
            if-conversion.  The compiler will also use other heuristics to
            decide whether if-conversion is likely to be profitable.
  
!      'max-rtl-if-conversion-predictable-cost'
            RTL if-conversion will try to remove conditional branches
            around a block and replace them with conditionally executed
            instructions.  These parameters give the maximum permissible
--- 13974,13980 ----
            if-conversion.  The compiler will also use other heuristics to
            decide whether if-conversion is likely to be profitable.
  
!      ‘max-rtl-if-conversion-predictable-cost’
            RTL if-conversion will try to remove conditional branches
            around a block and replace them with conditionally executed
            instructions.  These parameters give the maximum permissible
*************** includes experimental options that may p
*** 13981,14006 ****
            will try to provide a reasonable default for this parameter
            using the BRANCH_COST target macro.
  
!      'max-crossjump-edges'
            The maximum number of incoming edges to consider for
!           cross-jumping.  The algorithm used by '-fcrossjumping' is
            O(N^2) in the number of edges incoming to each block.
            Increasing values mean more aggressive optimization, making
            the compilation time increase with probably small improvement
            in executable size.
  
!      'min-crossjump-insns'
            The minimum number of instructions that must be matched at the
            end of two blocks before cross-jumping is performed on them.
            This value is ignored in the case where all instructions in
            the block being cross-jumped from are matched.
  
!      'max-grow-copy-bb-insns'
            The maximum code size expansion factor when copying basic
            blocks instead of jumping.  The expansion is relative to a
            jump instruction.
  
!      'max-goto-duplication-insns'
            The maximum number of instructions to duplicate to a block
            that jumps to a computed goto.  To avoid O(N^2) behavior in a
            number of passes, GCC factors computed gotos early in the
--- 13985,14010 ----
            will try to provide a reasonable default for this parameter
            using the BRANCH_COST target macro.
  
!      ‘max-crossjump-edges’
            The maximum number of incoming edges to consider for
!           cross-jumping.  The algorithm used by ‘-fcrossjumping’ is
            O(N^2) in the number of edges incoming to each block.
            Increasing values mean more aggressive optimization, making
            the compilation time increase with probably small improvement
            in executable size.
  
!      ‘min-crossjump-insns’
            The minimum number of instructions that must be matched at the
            end of two blocks before cross-jumping is performed on them.
            This value is ignored in the case where all instructions in
            the block being cross-jumped from are matched.
  
!      ‘max-grow-copy-bb-insns’
            The maximum code size expansion factor when copying basic
            blocks instead of jumping.  The expansion is relative to a
            jump instruction.
  
!      ‘max-goto-duplication-insns’
            The maximum number of instructions to duplicate to a block
            that jumps to a computed goto.  To avoid O(N^2) behavior in a
            number of passes, GCC factors computed gotos early in the
*************** includes experimental options that may p
*** 14008,14014 ****
            Only computed jumps at the end of a basic blocks with no more
            than max-goto-duplication-insns are unfactored.
  
!      'max-delay-slot-insn-search'
            The maximum number of instructions to consider when looking
            for an instruction to fill a delay slot.  If more than this
            arbitrary number of instructions are searched, the time
--- 14012,14018 ----
            Only computed jumps at the end of a basic blocks with no more
            than max-goto-duplication-insns are unfactored.
  
!      ‘max-delay-slot-insn-search’
            The maximum number of instructions to consider when looking
            for an instruction to fill a delay slot.  If more than this
            arbitrary number of instructions are searched, the time
*************** includes experimental options that may p
*** 14017,14023 ****
            optimization, making the compilation time increase with
            probably small improvement in execution time.
  
!      'max-delay-slot-live-search'
            When trying to fill delay slots, the maximum number of
            instructions to consider when searching for a block with valid
            live register information.  Increasing this arbitrarily chosen
--- 14021,14027 ----
            optimization, making the compilation time increase with
            probably small improvement in execution time.
  
!      ‘max-delay-slot-live-search’
            When trying to fill delay slots, the maximum number of
            instructions to consider when searching for a block with valid
            live register information.  Increasing this arbitrarily chosen
*************** includes experimental options that may p
*** 14026,14063 ****
            delay slot code is rewritten to maintain the control-flow
            graph.
  
!      'max-gcse-memory'
!           The approximate maximum amount of memory in 'kB' that can be
            allocated in order to perform the global common subexpression
            elimination optimization.  If more memory than specified is
            required, the optimization is not done.
  
!      'max-gcse-insertion-ratio'
            If the ratio of expression insertions to deletions is larger
            than this value for any expression, then RTL PRE inserts or
            removes the expression and thus leaves partially redundant
            computations in the instruction stream.
  
!      'max-pending-list-length'
            The maximum number of pending dependencies scheduling allows
            before flushing the current state and starting over.  Large
            functions with few branches or calls can create excessively
            large lists which needlessly consume memory and resources.
  
!      'max-modulo-backtrack-attempts'
            The maximum number of backtrack attempts the scheduler should
            make when modulo scheduling a loop.  Larger values can
            exponentially increase compilation time.
  
!      'max-inline-functions-called-once-loop-depth'
            Maximal loop depth of a call considered by inline heuristics
            that tries to inline all functions called once.
  
!      'max-inline-functions-called-once-insns'
            Maximal estimated size of functions produced while inlining
            functions called once.
  
!      'max-inline-insns-single'
            Several parameters control the tree inliner used in GCC.  This
            number sets the maximum number of instructions (counted in
            GCC's internal representation) in a single function that the
--- 14030,14067 ----
            delay slot code is rewritten to maintain the control-flow
            graph.
  
!      ‘max-gcse-memory’
!           The approximate maximum amount of memory in ‘kB’ that can be
            allocated in order to perform the global common subexpression
            elimination optimization.  If more memory than specified is
            required, the optimization is not done.
  
!      ‘max-gcse-insertion-ratio’
            If the ratio of expression insertions to deletions is larger
            than this value for any expression, then RTL PRE inserts or
            removes the expression and thus leaves partially redundant
            computations in the instruction stream.
  
!      ‘max-pending-list-length’
            The maximum number of pending dependencies scheduling allows
            before flushing the current state and starting over.  Large
            functions with few branches or calls can create excessively
            large lists which needlessly consume memory and resources.
  
!      ‘max-modulo-backtrack-attempts’
            The maximum number of backtrack attempts the scheduler should
            make when modulo scheduling a loop.  Larger values can
            exponentially increase compilation time.
  
!      ‘max-inline-functions-called-once-loop-depth’
            Maximal loop depth of a call considered by inline heuristics
            that tries to inline all functions called once.
  
!      ‘max-inline-functions-called-once-insns’
            Maximal estimated size of functions produced while inlining
            functions called once.
  
!      ‘max-inline-insns-single’
            Several parameters control the tree inliner used in GCC.  This
            number sets the maximum number of instructions (counted in
            GCC's internal representation) in a single function that the
*************** includes experimental options that may p
*** 14065,14128 ****
            functions declared inline and methods implemented in a class
            declaration (C++).
  
!      'max-inline-insns-auto'
!           When you use '-finline-functions' (included in '-O3'), a lot
            of functions that would otherwise not be considered for
            inlining by the compiler are investigated.  To those
            functions, a different (more restrictive) limit compared to
!           functions declared inline can be applied ('--param
!           max-inline-insns-auto').
  
!      'max-inline-insns-small'
            This is bound applied to calls which are considered relevant
!           with '-finline-small-functions'.
  
!      'max-inline-insns-size'
            This is bound applied to calls which are optimized for size.
            Small growth may be desirable to anticipate optimization
            oppurtunities exposed by inlining.
  
!      'uninlined-function-insns'
            Number of instructions accounted by inliner for function
            overhead such as function prologue and epilogue.
  
!      'uninlined-function-time'
            Extra time accounted by inliner for function overhead such as
            time needed to execute function prologue and epilogue.
  
!      'inline-heuristics-hint-percent'
!           The scale (in percents) applied to 'inline-insns-single',
!           'inline-insns-single-O2', 'inline-insns-auto' when inline
            heuristics hints that inlining is very profitable (will enable
            later optimizations).
  
!      'uninlined-thunk-insns'
!      'uninlined-thunk-time'
!           Same as '--param uninlined-function-insns' and '--param
!           uninlined-function-time' but applied to function thunks.
  
!      'inline-min-speedup'
            When estimated performance improvement of caller + callee
            runtime exceeds this threshold (in percent), the function can
!           be inlined regardless of the limit on '--param
!           max-inline-insns-single' and '--param max-inline-insns-auto'.
  
!      'large-function-insns'
            The limit specifying really large functions.  For functions
            larger than this limit after inlining, inlining is constrained
!           by '--param large-function-growth'.  This parameter is useful
            primarily to avoid extreme compilation time caused by
            non-linear algorithms used by the back end.
  
!      'large-function-growth'
            Specifies maximal growth of large function caused by inlining
            in percents.  For example, parameter value 100 limits large
            function growth to 2.0 times the original size.
  
!      'large-unit-insns'
            The limit specifying large translation unit.  Growth caused by
            inlining of units larger than this limit is limited by
!           '--param inline-unit-growth'.  For small units this might be
            too tight.  For example, consider a unit consisting of
            function A that is inline and B that just calls A three times.
            If B is small relative to A, the growth of unit is 300\% and
--- 14069,14132 ----
            functions declared inline and methods implemented in a class
            declaration (C++).
  
!      ‘max-inline-insns-auto’
!           When you use ‘-finline-functions’ (included in ‘-O3’), a lot
            of functions that would otherwise not be considered for
            inlining by the compiler are investigated.  To those
            functions, a different (more restrictive) limit compared to
!           functions declared inline can be applied (‘--param
!           max-inline-insns-auto’).
  
!      ‘max-inline-insns-small’
            This is bound applied to calls which are considered relevant
!           with ‘-finline-small-functions’.
  
!      ‘max-inline-insns-size’
            This is bound applied to calls which are optimized for size.
            Small growth may be desirable to anticipate optimization
            oppurtunities exposed by inlining.
  
!      ‘uninlined-function-insns’
            Number of instructions accounted by inliner for function
            overhead such as function prologue and epilogue.
  
!      ‘uninlined-function-time’
            Extra time accounted by inliner for function overhead such as
            time needed to execute function prologue and epilogue.
  
!      ‘inline-heuristics-hint-percent’
!           The scale (in percents) applied to ‘inline-insns-single’,
!           ‘inline-insns-single-O2’, ‘inline-insns-auto’ when inline
            heuristics hints that inlining is very profitable (will enable
            later optimizations).
  
!      ‘uninlined-thunk-insns’
!      ‘uninlined-thunk-time’
!           Same as ‘--param uninlined-function-insns’ and ‘--param
!           uninlined-function-time’ but applied to function thunks.
  
!      ‘inline-min-speedup’
            When estimated performance improvement of caller + callee
            runtime exceeds this threshold (in percent), the function can
!           be inlined regardless of the limit on ‘--param
!           max-inline-insns-single’ and ‘--param max-inline-insns-auto’.
  
!      ‘large-function-insns’
            The limit specifying really large functions.  For functions
            larger than this limit after inlining, inlining is constrained
!           by ‘--param large-function-growth’.  This parameter is useful
            primarily to avoid extreme compilation time caused by
            non-linear algorithms used by the back end.
  
!      ‘large-function-growth’
            Specifies maximal growth of large function caused by inlining
            in percents.  For example, parameter value 100 limits large
            function growth to 2.0 times the original size.
  
!      ‘large-unit-insns’
            The limit specifying large translation unit.  Growth caused by
            inlining of units larger than this limit is limited by
!           ‘--param inline-unit-growth’.  For small units this might be
            too tight.  For example, consider a unit consisting of
            function A that is inline and B that just calls A three times.
            If B is small relative to A, the growth of unit is 300\% and
*************** includes experimental options that may p
*** 14130,14264 ****
            consisting of small inlineable functions, however, the overall
            unit growth limit is needed to avoid exponential explosion of
            code size.  Thus for smaller units, the size is increased to
!           '--param large-unit-insns' before applying '--param
!           inline-unit-growth'.
  
!      'lazy-modules'
            Maximum number of concurrently open C++ module files when lazy
            loading.
  
!      'inline-unit-growth'
            Specifies maximal overall growth of the compilation unit
            caused by inlining.  For example, parameter value 20 limits
            unit growth to 1.2 times the original size.  Cold functions
            (either marked cold via an attribute or by profile feedback)
            are not accounted into the unit size.
  
!      'ipa-cp-unit-growth'
            Specifies maximal overall growth of the compilation unit
            caused by interprocedural constant propagation.  For example,
            parameter value 10 limits unit growth to 1.1 times the
            original size.
  
!      'ipa-cp-large-unit-insns'
            The size of translation unit that IPA-CP pass considers large.
  
!      'large-stack-frame'
            The limit specifying large stack frames.  While inlining the
            algorithm is trying to not grow past this limit too much.
  
!      'large-stack-frame-growth'
            Specifies maximal growth of large stack frames caused by
            inlining in percents.  For example, parameter value 1000
            limits large stack frame growth to 11 times the original size.
  
!      'max-inline-insns-recursive'
!      'max-inline-insns-recursive-auto'
            Specifies the maximum number of instructions an out-of-line
            copy of a self-recursive inline function can grow into by
            performing recursive inlining.
  
!           '--param max-inline-insns-recursive' applies to functions
            declared inline.  For functions not declared inline, recursive
!           inlining happens only when '-finline-functions' (included in
!           '-O3') is enabled; '--param max-inline-insns-recursive-auto'
            applies instead.
  
!      'max-inline-recursive-depth'
!      'max-inline-recursive-depth-auto'
            Specifies the maximum recursion depth used for recursive
            inlining.
  
!           '--param max-inline-recursive-depth' applies to functions
            declared inline.  For functions not declared inline, recursive
!           inlining happens only when '-finline-functions' (included in
!           '-O3') is enabled; '--param max-inline-recursive-depth-auto'
            applies instead.
  
!      'min-inline-recursive-probability'
            Recursive inlining is profitable only for function having deep
            recursion in average and can hurt for function having little
            recursion depth by increasing the prologue size or complexity
            of function body to other optimizers.
  
!           When profile feedback is available (see '-fprofile-generate')
            the actual recursion depth can be guessed from the probability
            that function recurses via a given call expression.  This
            parameter limits inlining only to call expressions whose
            probability exceeds the given threshold (in percents).
  
!      'early-inlining-insns'
            Specify growth that the early inliner can make.  In effect it
            increases the amount of inlining for code having a large
            abstraction penalty.
  
!      'max-early-inliner-iterations'
            Limit of iterations of the early inliner.  This basically
            bounds the number of nested indirect calls the early inliner
            can resolve.  Deeper chains are still handled by late
            inlining.
  
!      'comdat-sharing-probability'
            Probability (in percent) that C++ inline function with comdat
            visibility are shared across multiple compilation units.
  
!      'modref-max-bases'
!      'modref-max-refs'
!      'modref-max-accesses'
            Specifies the maximal number of base pointers, references and
            accesses stored for a single function by mod/ref analysis.
  
!      'modref-max-tests'
            Specifies the maxmal number of tests alias oracle can perform
            to disambiguate memory locations using the mod/ref
!           information.  This parameter ought to be bigger than '--param
!           modref-max-bases' and '--param modref-max-refs'.
  
!      'modref-max-depth'
            Specifies the maximum depth of DFS walk used by modref escape
            analysis.  Setting to 0 disables the analysis completely.
  
!      'modref-max-escape-points'
            Specifies the maximum number of escape points tracked by
            modref per SSA-name.
  
!      'modref-max-adjustments'
            Specifies the maximum number the access range is enlarged
            during modref dataflow analysis.
  
!      'profile-func-internal-id'
            A parameter to control whether to use function internal id in
            profile database lookup.  If the value is 0, the compiler uses
            an id that is based on function assembler name and filename,
            which makes old profile data more tolerant to source changes
            such as function reordering etc.
  
!      'min-vect-loop-bound'
            The minimum number of iterations under which loops are not
!           vectorized when '-ftree-vectorize' is used.  The number of
            iterations after vectorization needs to be greater than the
            value specified by this option to allow vectorization.
  
!      'gcse-cost-distance-ratio'
            Scaling factor in calculation of maximum distance an
            expression can be moved by GCSE optimizations.  This is
            currently supported only in the code hoisting pass.  The
            bigger the ratio, the more aggressive code hoisting is with
            simple expressions, i.e., the expressions that have cost less
!           than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
            of simple expressions.
  
!      'gcse-unrestricted-cost'
            Cost, roughly measured as the cost of a single typical machine
            instruction, at which GCSE optimizations do not constrain the
            distance an expression can travel.  This is currently
--- 14134,14268 ----
            consisting of small inlineable functions, however, the overall
            unit growth limit is needed to avoid exponential explosion of
            code size.  Thus for smaller units, the size is increased to
!           ‘--param large-unit-insns’ before applying ‘--param
!           inline-unit-growth’.
  
!      ‘lazy-modules’
            Maximum number of concurrently open C++ module files when lazy
            loading.
  
!      ‘inline-unit-growth’
            Specifies maximal overall growth of the compilation unit
            caused by inlining.  For example, parameter value 20 limits
            unit growth to 1.2 times the original size.  Cold functions
            (either marked cold via an attribute or by profile feedback)
            are not accounted into the unit size.
  
!      ‘ipa-cp-unit-growth’
            Specifies maximal overall growth of the compilation unit
            caused by interprocedural constant propagation.  For example,
            parameter value 10 limits unit growth to 1.1 times the
            original size.
  
!      ‘ipa-cp-large-unit-insns’
            The size of translation unit that IPA-CP pass considers large.
  
!      ‘large-stack-frame’
            The limit specifying large stack frames.  While inlining the
            algorithm is trying to not grow past this limit too much.
  
!      ‘large-stack-frame-growth’
            Specifies maximal growth of large stack frames caused by
            inlining in percents.  For example, parameter value 1000
            limits large stack frame growth to 11 times the original size.
  
!      ‘max-inline-insns-recursive’
!      ‘max-inline-insns-recursive-auto’
            Specifies the maximum number of instructions an out-of-line
            copy of a self-recursive inline function can grow into by
            performing recursive inlining.
  
!           ‘--param max-inline-insns-recursive’ applies to functions
            declared inline.  For functions not declared inline, recursive
!           inlining happens only when ‘-finline-functions’ (included in
!           ‘-O3’) is enabled; ‘--param max-inline-insns-recursive-auto’
            applies instead.
  
!      ‘max-inline-recursive-depth’
!      ‘max-inline-recursive-depth-auto’
            Specifies the maximum recursion depth used for recursive
            inlining.
  
!           ‘--param max-inline-recursive-depth’ applies to functions
            declared inline.  For functions not declared inline, recursive
!           inlining happens only when ‘-finline-functions’ (included in
!           ‘-O3’) is enabled; ‘--param max-inline-recursive-depth-auto’
            applies instead.
  
!      ‘min-inline-recursive-probability’
            Recursive inlining is profitable only for function having deep
            recursion in average and can hurt for function having little
            recursion depth by increasing the prologue size or complexity
            of function body to other optimizers.
  
!           When profile feedback is available (see ‘-fprofile-generate’)
            the actual recursion depth can be guessed from the probability
            that function recurses via a given call expression.  This
            parameter limits inlining only to call expressions whose
            probability exceeds the given threshold (in percents).
  
!      ‘early-inlining-insns’
            Specify growth that the early inliner can make.  In effect it
            increases the amount of inlining for code having a large
            abstraction penalty.
  
!      ‘max-early-inliner-iterations’
            Limit of iterations of the early inliner.  This basically
            bounds the number of nested indirect calls the early inliner
            can resolve.  Deeper chains are still handled by late
            inlining.
  
!      ‘comdat-sharing-probability’
            Probability (in percent) that C++ inline function with comdat
            visibility are shared across multiple compilation units.
  
!      ‘modref-max-bases’
!      ‘modref-max-refs’
!      ‘modref-max-accesses’
            Specifies the maximal number of base pointers, references and
            accesses stored for a single function by mod/ref analysis.
  
!      ‘modref-max-tests’
            Specifies the maxmal number of tests alias oracle can perform
            to disambiguate memory locations using the mod/ref
!           information.  This parameter ought to be bigger than ‘--param
!           modref-max-bases’ and ‘--param modref-max-refs’.
  
!      ‘modref-max-depth’
            Specifies the maximum depth of DFS walk used by modref escape
            analysis.  Setting to 0 disables the analysis completely.
  
!      ‘modref-max-escape-points’
            Specifies the maximum number of escape points tracked by
            modref per SSA-name.
  
!      ‘modref-max-adjustments’
            Specifies the maximum number the access range is enlarged
            during modref dataflow analysis.
  
!      ‘profile-func-internal-id’
            A parameter to control whether to use function internal id in
            profile database lookup.  If the value is 0, the compiler uses
            an id that is based on function assembler name and filename,
            which makes old profile data more tolerant to source changes
            such as function reordering etc.
  
!      ‘min-vect-loop-bound’
            The minimum number of iterations under which loops are not
!           vectorized when ‘-ftree-vectorize’ is used.  The number of
            iterations after vectorization needs to be greater than the
            value specified by this option to allow vectorization.
  
!      ‘gcse-cost-distance-ratio’
            Scaling factor in calculation of maximum distance an
            expression can be moved by GCSE optimizations.  This is
            currently supported only in the code hoisting pass.  The
            bigger the ratio, the more aggressive code hoisting is with
            simple expressions, i.e., the expressions that have cost less
!           than ‘gcse-unrestricted-cost’.  Specifying 0 disables hoisting
            of simple expressions.
  
!      ‘gcse-unrestricted-cost’
            Cost, roughly measured as the cost of a single typical machine
            instruction, at which GCSE optimizations do not constrain the
            distance an expression can travel.  This is currently
*************** includes experimental options that may p
*** 14266,14421 ****
            cost, the more aggressive code hoisting is.  Specifying 0
            allows all expressions to travel unrestricted distances.
  
!      'max-hoist-depth'
            The depth of search in the dominator tree for expressions to
            hoist.  This is used to avoid quadratic behavior in hoisting
            algorithm.  The value of 0 does not limit on the search, but
            may slow down compilation of huge functions.
  
!      'max-tail-merge-comparisons'
            The maximum amount of similar bbs to compare a bb with.  This
            is used to avoid quadratic behavior in tree tail merging.
  
!      'max-tail-merge-iterations'
            The maximum amount of iterations of the pass over the
            function.  This is used to limit compilation time in tree tail
            merging.
  
!      'store-merging-allow-unaligned'
            Allow the store merging pass to introduce unaligned stores if
            it is legal to do so.
  
!      'max-stores-to-merge'
            The maximum number of stores to attempt to merge into wider
            stores in the store merging pass.
  
!      'max-store-chains-to-track'
            The maximum number of store chains to track at the same time
            in the attempt to merge them into wider stores in the store
            merging pass.
  
!      'max-stores-to-track'
            The maximum number of stores to track at the same time in the
            attemt to to merge them into wider stores in the store merging
            pass.
  
!      'max-unrolled-insns'
            The maximum number of instructions that a loop may have to be
            unrolled.  If a loop is unrolled, this parameter also
            determines how many times the loop code is unrolled.
  
!      'max-average-unrolled-insns'
            The maximum number of instructions biased by probabilities of
            their execution that a loop may have to be unrolled.  If a
            loop is unrolled, this parameter also determines how many
            times the loop code is unrolled.
  
!      'max-unroll-times'
            The maximum number of unrollings of a single loop.
  
!      'max-peeled-insns'
            The maximum number of instructions that a loop may have to be
            peeled.  If a loop is peeled, this parameter also determines
            how many times the loop code is peeled.
  
!      'max-peel-times'
            The maximum number of peelings of a single loop.
  
!      'max-peel-branches'
            The maximum number of branches on the hot path through the
            peeled sequence.
  
!      'max-completely-peeled-insns'
            The maximum number of insns of a completely peeled loop.
  
!      'max-completely-peel-times'
            The maximum number of iterations of a loop to be suitable for
            complete peeling.
  
!      'max-completely-peel-loop-nest-depth'
            The maximum depth of a loop nest suitable for complete
            peeling.
  
!      'max-unswitch-insns'
            The maximum number of insns of an unswitched loop.
  
!      'max-unswitch-depth'
            The maximum depth of a loop nest to be unswitched.
  
!      'lim-expensive'
            The minimum cost of an expensive expression in the loop
            invariant motion.
  
!      'min-loop-cond-split-prob'
            When FDO profile information is available,
!           'min-loop-cond-split-prob' specifies minimum threshold for
            probability of semi-invariant condition statement to trigger
            loop split.
  
!      'iv-consider-all-candidates-bound'
            Bound on number of candidates for induction variables, below
            which all candidates are considered for each use in induction
            variable optimizations.  If there are more candidates than
            this, only the most relevant ones are considered to avoid
            quadratic time complexity.
  
!      'iv-max-considered-uses'
            The induction variable optimizations give up on loops that
            contain more induction variable uses.
  
!      'iv-always-prune-cand-set-bound'
            If the number of candidates in the set is smaller than this
            value, always try to remove unnecessary ivs from the set when
            adding a new one.
  
!      'avg-loop-niter'
            Average number of iterations of a loop.
  
!      'dse-max-object-size'
            Maximum size (in bytes) of objects tracked bytewise by dead
            store elimination.  Larger values may result in larger
            compilation times.
  
!      'dse-max-alias-queries-per-store'
            Maximum number of queries into the alias oracle per store.
            Larger values result in larger compilation times and may
            result in more removed dead stores.
  
!      'scev-max-expr-size'
            Bound on size of expressions used in the scalar evolutions
            analyzer.  Large expressions slow the analyzer.
  
!      'scev-max-expr-complexity'
            Bound on the complexity of the expressions in the scalar
            evolutions analyzer.  Complex expressions slow the analyzer.
  
!      'max-tree-if-conversion-phi-args'
            Maximum number of arguments in a PHI supported by TREE if
            conversion unless the loop is marked with simd pragma.
  
!      'vect-max-layout-candidates'
            The maximum number of possible vector layouts (such as
            permutations) to consider when optimizing to-be-vectorized
            code.
  
!      'vect-max-version-for-alignment-checks'
            The maximum number of run-time checks that can be performed
            when doing loop versioning for alignment in the vectorizer.
  
!      'vect-max-version-for-alias-checks'
            The maximum number of run-time checks that can be performed
            when doing loop versioning for alias in the vectorizer.
  
!      'vect-max-peeling-for-alignment'
            The maximum number of loop peels to enhance access alignment
            for vectorizer.  Value -1 means no limit.
  
!      'max-iterations-to-track'
            The maximum number of iterations of a loop the brute-force
            algorithm for analysis of the number of iterations of the loop
            tries to evaluate.
  
!      'hot-bb-count-fraction'
            The denominator n of fraction 1/n of the maximal execution
            count of a basic block in the entire program that a basic
            block needs to at least have in order to be considered hot.
--- 14270,14425 ----
            cost, the more aggressive code hoisting is.  Specifying 0
            allows all expressions to travel unrestricted distances.
  
!      ‘max-hoist-depth’
            The depth of search in the dominator tree for expressions to
            hoist.  This is used to avoid quadratic behavior in hoisting
            algorithm.  The value of 0 does not limit on the search, but
            may slow down compilation of huge functions.
  
!      ‘max-tail-merge-comparisons’
            The maximum amount of similar bbs to compare a bb with.  This
            is used to avoid quadratic behavior in tree tail merging.
  
!      ‘max-tail-merge-iterations’
            The maximum amount of iterations of the pass over the
            function.  This is used to limit compilation time in tree tail
            merging.
  
!      ‘store-merging-allow-unaligned’
            Allow the store merging pass to introduce unaligned stores if
            it is legal to do so.
  
!      ‘max-stores-to-merge’
            The maximum number of stores to attempt to merge into wider
            stores in the store merging pass.
  
!      ‘max-store-chains-to-track’
            The maximum number of store chains to track at the same time
            in the attempt to merge them into wider stores in the store
            merging pass.
  
!      ‘max-stores-to-track’
            The maximum number of stores to track at the same time in the
            attemt to to merge them into wider stores in the store merging
            pass.
  
!      ‘max-unrolled-insns’
            The maximum number of instructions that a loop may have to be
            unrolled.  If a loop is unrolled, this parameter also
            determines how many times the loop code is unrolled.
  
!      ‘max-average-unrolled-insns’
            The maximum number of instructions biased by probabilities of
            their execution that a loop may have to be unrolled.  If a
            loop is unrolled, this parameter also determines how many
            times the loop code is unrolled.
  
!      ‘max-unroll-times’
            The maximum number of unrollings of a single loop.
  
!      ‘max-peeled-insns’
            The maximum number of instructions that a loop may have to be
            peeled.  If a loop is peeled, this parameter also determines
            how many times the loop code is peeled.
  
!      ‘max-peel-times’
            The maximum number of peelings of a single loop.
  
!      ‘max-peel-branches’
            The maximum number of branches on the hot path through the
            peeled sequence.
  
!      ‘max-completely-peeled-insns’
            The maximum number of insns of a completely peeled loop.
  
!      ‘max-completely-peel-times’
            The maximum number of iterations of a loop to be suitable for
            complete peeling.
  
!      ‘max-completely-peel-loop-nest-depth’
            The maximum depth of a loop nest suitable for complete
            peeling.
  
!      ‘max-unswitch-insns’
            The maximum number of insns of an unswitched loop.
  
!      ‘max-unswitch-depth’
            The maximum depth of a loop nest to be unswitched.
  
!      ‘lim-expensive’
            The minimum cost of an expensive expression in the loop
            invariant motion.
  
!      ‘min-loop-cond-split-prob’
            When FDO profile information is available,
!           ‘min-loop-cond-split-prob’ specifies minimum threshold for
            probability of semi-invariant condition statement to trigger
            loop split.
  
!      ‘iv-consider-all-candidates-bound’
            Bound on number of candidates for induction variables, below
            which all candidates are considered for each use in induction
            variable optimizations.  If there are more candidates than
            this, only the most relevant ones are considered to avoid
            quadratic time complexity.
  
!      ‘iv-max-considered-uses’
            The induction variable optimizations give up on loops that
            contain more induction variable uses.
  
!      ‘iv-always-prune-cand-set-bound’
            If the number of candidates in the set is smaller than this
            value, always try to remove unnecessary ivs from the set when
            adding a new one.
  
!      ‘avg-loop-niter’
            Average number of iterations of a loop.
  
!      ‘dse-max-object-size’
            Maximum size (in bytes) of objects tracked bytewise by dead
            store elimination.  Larger values may result in larger
            compilation times.
  
!      ‘dse-max-alias-queries-per-store’
            Maximum number of queries into the alias oracle per store.
            Larger values result in larger compilation times and may
            result in more removed dead stores.
  
!      ‘scev-max-expr-size’
            Bound on size of expressions used in the scalar evolutions
            analyzer.  Large expressions slow the analyzer.
  
!      ‘scev-max-expr-complexity’
            Bound on the complexity of the expressions in the scalar
            evolutions analyzer.  Complex expressions slow the analyzer.
  
!      ‘max-tree-if-conversion-phi-args’
            Maximum number of arguments in a PHI supported by TREE if
            conversion unless the loop is marked with simd pragma.
  
!      ‘vect-max-layout-candidates’
            The maximum number of possible vector layouts (such as
            permutations) to consider when optimizing to-be-vectorized
            code.
  
!      ‘vect-max-version-for-alignment-checks’
            The maximum number of run-time checks that can be performed
            when doing loop versioning for alignment in the vectorizer.
  
!      ‘vect-max-version-for-alias-checks’
            The maximum number of run-time checks that can be performed
            when doing loop versioning for alias in the vectorizer.
  
!      ‘vect-max-peeling-for-alignment’
            The maximum number of loop peels to enhance access alignment
            for vectorizer.  Value -1 means no limit.
  
!      ‘max-iterations-to-track’
            The maximum number of iterations of a loop the brute-force
            algorithm for analysis of the number of iterations of the loop
            tries to evaluate.
  
!      ‘hot-bb-count-fraction’
            The denominator n of fraction 1/n of the maximal execution
            count of a basic block in the entire program that a basic
            block needs to at least have in order to be considered hot.
*************** includes experimental options that may p
*** 14424,14430 ****
            of the maximal execution count.  0 means that it is never
            considered hot.  Used in non-LTO mode.
  
!      'hot-bb-count-ws-permille'
            The number of most executed permilles, ranging from 0 to 1000,
            of the profiled execution of the entire program to which the
            execution count of a basic block must be part of in order to
--- 14428,14434 ----
            of the maximal execution count.  0 means that it is never
            considered hot.  Used in non-LTO mode.
  
!      ‘hot-bb-count-ws-permille’
            The number of most executed permilles, ranging from 0 to 1000,
            of the profiled execution of the entire program to which the
            execution count of a basic block must be part of in order to
*************** includes experimental options that may p
*** 14434,14440 ****
            profiled execution of the entire program.  0 means that it is
            never considered hot.  Used in LTO mode.
  
!      'hot-bb-frequency-fraction'
            The denominator n of fraction 1/n of the execution frequency
            of the entry block of a function that a basic block of this
            function needs to at least have in order to be considered hot.
--- 14438,14444 ----
            profiled execution of the entire program.  0 means that it is
            never considered hot.  Used in LTO mode.
  
!      ‘hot-bb-frequency-fraction’
            The denominator n of fraction 1/n of the execution frequency
            of the entry block of a function that a basic block of this
            function needs to at least have in order to be considered hot.
*************** includes experimental options that may p
*** 14443,14449 ****
            than 1/1000 of the frequency of the entry block of the
            function.  0 means that it is never considered hot.
  
!      'unlikely-bb-count-fraction'
            The denominator n of fraction 1/n of the number of profiled
            runs of the entire program below which the execution count of
            a basic block must be in order for the basic block to be
--- 14447,14453 ----
            than 1/1000 of the frequency of the entry block of the
            function.  0 means that it is never considered hot.
  
!      ‘unlikely-bb-count-fraction’
            The denominator n of fraction 1/n of the number of profiled
            runs of the entire program below which the execution count of
            a basic block must be in order for the basic block to be
*************** includes experimental options that may p
*** 14453,14459 ****
            program.  0 means that it is always considered unlikely
            executed.
  
!      'max-predicted-iterations'
            The maximum number of loop iterations we predict statically.
            This is useful in cases where a function contains a single
            loop with known bound and another loop with unknown bound.
--- 14457,14463 ----
            program.  0 means that it is always considered unlikely
            executed.
  
!      ‘max-predicted-iterations’
            The maximum number of loop iterations we predict statically.
            This is useful in cases where a function contains a single
            loop with known bound and another loop with unknown bound.
*************** includes experimental options that may p
*** 14462,14530 ****
            means that the loop without bounds appears artificially cold
            relative to the other one.
  
!      'builtin-expect-probability'
            Control the probability of the expression having the specified
            value.  This parameter takes a percentage (i.e. 0 ...  100) as
            input.
  
!      'builtin-string-cmp-inline-length'
            The maximum length of a constant string for a builtin string
            cmp call eligible for inlining.
  
!      'align-threshold'
  
            Select fraction of the maximal frequency of executions of a
            basic block in a function to align the basic block.
  
!      'align-loop-iterations'
  
            A loop expected to iterate at least the selected number of
            iterations is aligned.
  
!      'tracer-dynamic-coverage'
!      'tracer-dynamic-coverage-feedback'
  
            This value is used to limit superblock formation once the
            given percentage of executed instructions is covered.  This
            limits unnecessary code size expansion.
  
!           The 'tracer-dynamic-coverage-feedback' parameter is used only
            when profile feedback is available.  The real profiles (as
            opposed to statically estimated ones) are much less balanced
            allowing the threshold to be larger value.
  
!      'tracer-max-code-growth'
            Stop tail duplication once code growth has reached given
            percentage.  This is a rather artificial limit, as most of the
            duplicates are eliminated later in cross jumping, so it may be
            set to much higher values than is the desired code growth.
  
!      'tracer-min-branch-ratio'
  
            Stop reverse growth when the reverse probability of best edge
            is less than this threshold (in percent).
  
!      'tracer-min-branch-probability'
!      'tracer-min-branch-probability-feedback'
  
            Stop forward growth if the best edge has probability lower
            than this threshold.
  
!           Similarly to 'tracer-dynamic-coverage' two parameters are
!           provided.  'tracer-min-branch-probability-feedback' is used
            for compilation with profile feedback and
!           'tracer-min-branch-probability' compilation without.  The
            value for compilation with profile feedback needs to be more
            conservative (higher) in order to make tracer effective.
  
!      'stack-clash-protection-guard-size'
            Specify the size of the operating system provided stack guard
            as 2 raised to NUM bytes.  Higher values may reduce the number
            of explicit probes, but a value larger than the operating
            system provided guard will leave code vulnerable to stack
            clash style attacks.
  
!      'stack-clash-protection-probe-interval'
            Stack clash protection involves probing stack space as it is
            allocated.  This param controls the maximum distance between
            probes into the stack as 2 raised to NUM bytes.  Higher values
--- 14466,14534 ----
            means that the loop without bounds appears artificially cold
            relative to the other one.
  
!      ‘builtin-expect-probability’
            Control the probability of the expression having the specified
            value.  This parameter takes a percentage (i.e. 0 ...  100) as
            input.
  
!      ‘builtin-string-cmp-inline-length’
            The maximum length of a constant string for a builtin string
            cmp call eligible for inlining.
  
!      ‘align-threshold’
  
            Select fraction of the maximal frequency of executions of a
            basic block in a function to align the basic block.
  
!      ‘align-loop-iterations’
  
            A loop expected to iterate at least the selected number of
            iterations is aligned.
  
!      ‘tracer-dynamic-coverage’
!      ‘tracer-dynamic-coverage-feedback’
  
            This value is used to limit superblock formation once the
            given percentage of executed instructions is covered.  This
            limits unnecessary code size expansion.
  
!           The ‘tracer-dynamic-coverage-feedback’ parameter is used only
            when profile feedback is available.  The real profiles (as
            opposed to statically estimated ones) are much less balanced
            allowing the threshold to be larger value.
  
!      ‘tracer-max-code-growth’
            Stop tail duplication once code growth has reached given
            percentage.  This is a rather artificial limit, as most of the
            duplicates are eliminated later in cross jumping, so it may be
            set to much higher values than is the desired code growth.
  
!      ‘tracer-min-branch-ratio’
  
            Stop reverse growth when the reverse probability of best edge
            is less than this threshold (in percent).
  
!      ‘tracer-min-branch-probability’
!      ‘tracer-min-branch-probability-feedback’
  
            Stop forward growth if the best edge has probability lower
            than this threshold.
  
!           Similarly to ‘tracer-dynamic-coverage’ two parameters are
!           provided.  ‘tracer-min-branch-probability-feedback’ is used
            for compilation with profile feedback and
!           ‘tracer-min-branch-probability’ compilation without.  The
            value for compilation with profile feedback needs to be more
            conservative (higher) in order to make tracer effective.
  
!      ‘stack-clash-protection-guard-size’
            Specify the size of the operating system provided stack guard
            as 2 raised to NUM bytes.  Higher values may reduce the number
            of explicit probes, but a value larger than the operating
            system provided guard will leave code vulnerable to stack
            clash style attacks.
  
!      ‘stack-clash-protection-probe-interval’
            Stack clash protection involves probing stack space as it is
            allocated.  This param controls the maximum distance between
            probes into the stack as 2 raised to NUM bytes.  Higher values
*************** includes experimental options that may p
*** 14532,14546 ****
            than the operating system provided guard will leave code
            vulnerable to stack clash style attacks.
  
!      'max-cse-path-length'
  
            The maximum number of basic blocks on path that CSE considers.
  
!      'max-cse-insns'
            The maximum number of instructions CSE processes before
            flushing.
  
!      'ggc-min-expand'
  
            GCC uses a garbage collector to manage its own memory
            allocation.  This parameter specifies the minimum percentage
--- 14536,14550 ----
            than the operating system provided guard will leave code
            vulnerable to stack clash style attacks.
  
!      ‘max-cse-path-length’
  
            The maximum number of basic blocks on path that CSE considers.
  
!      ‘max-cse-insns’
            The maximum number of instructions CSE processes before
            flushing.
  
!      ‘ggc-min-expand’
  
            GCC uses a garbage collector to manage its own memory
            allocation.  This parameter specifies the minimum percentage
*************** includes experimental options that may p
*** 14549,14568 ****
            compilation speed; it has no effect on code generation.
  
            The default is 30% + 70% * (RAM/1GB) with an upper bound of
!           100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
!           of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
!           'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
            particular platform, the lower bound of 30% is used.  Setting
!           this parameter and 'ggc-min-heapsize' to zero causes a full
            collection to occur at every opportunity.  This is extremely
            slow, but can be useful for debugging.
  
!      'ggc-min-heapsize'
  
            Minimum size of the garbage collector's heap before it begins
            bothering to collect garbage.  The first collection occurs
!           after the heap expands by 'ggc-min-expand'% beyond
!           'ggc-min-heapsize'.  Again, tuning this may improve
            compilation speed, and has no effect on code generation.
  
            The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
--- 14553,14572 ----
            compilation speed; it has no effect on code generation.
  
            The default is 30% + 70% * (RAM/1GB) with an upper bound of
!           100% when RAM >= 1GB.  If ‘getrlimit’ is available, the notion
!           of "RAM" is the smallest of actual RAM and ‘RLIMIT_DATA’ or
!           ‘RLIMIT_AS’.  If GCC is not able to calculate RAM on a
            particular platform, the lower bound of 30% is used.  Setting
!           this parameter and ‘ggc-min-heapsize’ to zero causes a full
            collection to occur at every opportunity.  This is extremely
            slow, but can be useful for debugging.
  
!      ‘ggc-min-heapsize’
  
            Minimum size of the garbage collector's heap before it begins
            bothering to collect garbage.  The first collection occurs
!           after the heap expands by ‘ggc-min-expand’% beyond
!           ‘ggc-min-heapsize’.  Again, tuning this may improve
            compilation speed, and has no effect on code generation.
  
            The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
*************** includes experimental options that may p
*** 14572,14684 ****
            to calculate RAM on a particular platform, the lower bound is
            used.  Setting this parameter very large effectively disables
            garbage collection.  Setting this parameter and
!           'ggc-min-expand' to zero causes a full collection to occur at
            every opportunity.
  
!      'max-reload-search-insns'
            The maximum number of instruction reload should look backward
            for equivalent register.  Increasing values mean more
            aggressive optimization, making the compilation time increase
            with probably slightly better performance.
  
!      'max-cselib-memory-locations'
            The maximum number of memory locations cselib should take into
            account.  Increasing values mean more aggressive optimization,
            making the compilation time increase with probably slightly
            better performance.
  
!      'max-sched-ready-insns'
            The maximum number of instructions ready to be issued the
            scheduler should consider at any given time during the first
            scheduling pass.  Increasing values mean more thorough
            searches, making the compilation time increase with probably
            little benefit.
  
!      'max-sched-region-blocks'
            The maximum number of blocks in a region to be considered for
            interblock scheduling.
  
!      'max-pipeline-region-blocks'
            The maximum number of blocks in a region to be considered for
            pipelining in the selective scheduler.
  
!      'max-sched-region-insns'
            The maximum number of insns in a region to be considered for
            interblock scheduling.
  
!      'max-pipeline-region-insns'
            The maximum number of insns in a region to be considered for
            pipelining in the selective scheduler.
  
!      'min-spec-prob'
            The minimum probability (in percents) of reaching a source
            block for interblock speculative scheduling.
  
!      'max-sched-extend-regions-iters'
            The maximum number of iterations through CFG to extend
            regions.  A value of 0 disables region extensions.
  
!      'max-sched-insn-conflict-delay'
            The maximum conflict delay for an insn to be considered for
            speculative motion.
  
!      'sched-spec-prob-cutoff'
            The minimal probability of speculation success (in percents),
            so that speculative insns are scheduled.
  
!      'sched-state-edge-prob-cutoff'
            The minimum probability an edge must have for the scheduler to
            save its state across it.
  
!      'sched-mem-true-dep-cost'
            Minimal distance (in CPU cycles) between store and load
            targeting same memory locations.
  
!      'selsched-max-lookahead'
            The maximum size of the lookahead window of selective
            scheduling.  It is a depth of search for available
            instructions.
  
!      'selsched-max-sched-times'
            The maximum number of times that an instruction is scheduled
            during selective scheduling.  This is the limit on the number
            of iterations through which the instruction may be pipelined.
  
!      'selsched-insns-to-rename'
            The maximum number of best instructions in the ready list that
            are considered for renaming in the selective scheduler.
  
!      'sms-min-sc'
            The minimum value of stage count that swing modulo scheduler
            generates.
  
!      'max-last-value-rtl'
            The maximum size measured as number of RTLs that can be
            recorded in an expression in combiner for a pseudo register as
            last known value of that register.
  
!      'max-combine-insns'
            The maximum number of instructions the RTL combiner tries to
            combine.
  
!      'integer-share-limit'
            Small integer constants can use a shared data structure,
            reducing the compiler's memory usage and increasing its speed.
            This sets the maximum value of a shared integer constant.
  
!      'ssp-buffer-size'
            The minimum size of buffers (i.e. arrays) that receive stack
!           smashing protection when '-fstack-protector' is used.
  
!      'min-size-for-stack-sharing'
            The minimum size of variables taking part in stack slot
            sharing when not optimizing.
  
!      'max-jump-thread-duplication-stmts'
            Maximum number of statements allowed in a block that needs to
            be duplicated when threading jumps.
  
!      'max-jump-thread-paths'
            The maximum number of paths to consider when searching for
            jump threading opportunities.  When arriving at a block,
            incoming edges are only considered if the number of paths to
--- 14576,14688 ----
            to calculate RAM on a particular platform, the lower bound is
            used.  Setting this parameter very large effectively disables
            garbage collection.  Setting this parameter and
!           ‘ggc-min-expand’ to zero causes a full collection to occur at
            every opportunity.
  
!      ‘max-reload-search-insns’
            The maximum number of instruction reload should look backward
            for equivalent register.  Increasing values mean more
            aggressive optimization, making the compilation time increase
            with probably slightly better performance.
  
!      ‘max-cselib-memory-locations’
            The maximum number of memory locations cselib should take into
            account.  Increasing values mean more aggressive optimization,
            making the compilation time increase with probably slightly
            better performance.
  
!      ‘max-sched-ready-insns’
            The maximum number of instructions ready to be issued the
            scheduler should consider at any given time during the first
            scheduling pass.  Increasing values mean more thorough
            searches, making the compilation time increase with probably
            little benefit.
  
!      ‘max-sched-region-blocks’
            The maximum number of blocks in a region to be considered for
            interblock scheduling.
  
!      ‘max-pipeline-region-blocks’
            The maximum number of blocks in a region to be considered for
            pipelining in the selective scheduler.
  
!      ‘max-sched-region-insns’
            The maximum number of insns in a region to be considered for
            interblock scheduling.
  
!      ‘max-pipeline-region-insns’
            The maximum number of insns in a region to be considered for
            pipelining in the selective scheduler.
  
!      ‘min-spec-prob’
            The minimum probability (in percents) of reaching a source
            block for interblock speculative scheduling.
  
!      ‘max-sched-extend-regions-iters’
            The maximum number of iterations through CFG to extend
            regions.  A value of 0 disables region extensions.
  
!      ‘max-sched-insn-conflict-delay’
            The maximum conflict delay for an insn to be considered for
            speculative motion.
  
!      ‘sched-spec-prob-cutoff’
            The minimal probability of speculation success (in percents),
            so that speculative insns are scheduled.
  
!      ‘sched-state-edge-prob-cutoff’
            The minimum probability an edge must have for the scheduler to
            save its state across it.
  
!      ‘sched-mem-true-dep-cost’
            Minimal distance (in CPU cycles) between store and load
            targeting same memory locations.
  
!      ‘selsched-max-lookahead’
            The maximum size of the lookahead window of selective
            scheduling.  It is a depth of search for available
            instructions.
  
!      ‘selsched-max-sched-times’
            The maximum number of times that an instruction is scheduled
            during selective scheduling.  This is the limit on the number
            of iterations through which the instruction may be pipelined.
  
!      ‘selsched-insns-to-rename’
            The maximum number of best instructions in the ready list that
            are considered for renaming in the selective scheduler.
  
!      ‘sms-min-sc’
            The minimum value of stage count that swing modulo scheduler
            generates.
  
!      ‘max-last-value-rtl’
            The maximum size measured as number of RTLs that can be
            recorded in an expression in combiner for a pseudo register as
            last known value of that register.
  
!      ‘max-combine-insns’
            The maximum number of instructions the RTL combiner tries to
            combine.
  
!      ‘integer-share-limit’
            Small integer constants can use a shared data structure,
            reducing the compiler's memory usage and increasing its speed.
            This sets the maximum value of a shared integer constant.
  
!      ‘ssp-buffer-size’
            The minimum size of buffers (i.e. arrays) that receive stack
!           smashing protection when ‘-fstack-protector’ is used.
  
!      ‘min-size-for-stack-sharing’
            The minimum size of variables taking part in stack slot
            sharing when not optimizing.
  
!      ‘max-jump-thread-duplication-stmts’
            Maximum number of statements allowed in a block that needs to
            be duplicated when threading jumps.
  
!      ‘max-jump-thread-paths’
            The maximum number of paths to consider when searching for
            jump threading opportunities.  When arriving at a block,
            incoming edges are only considered if the number of paths to
*************** includes experimental options that may p
*** 14686,14715 ****
            does not exhaust the specified maximum number of paths to
            consider.
  
!      'max-fields-for-field-sensitive'
            Maximum number of fields in a structure treated in a field
            sensitive manner during pointer analysis.
  
!      'prefetch-latency'
            Estimate on average number of instructions that are executed
            before prefetch finishes.  The distance prefetched ahead is
            proportional to this constant.  Increasing this number may
            also lead to less streams being prefetched (see
!           'simultaneous-prefetches').
  
!      'simultaneous-prefetches'
            Maximum number of prefetches that can run at the same time.
  
!      'l1-cache-line-size'
            The size of cache line in L1 data cache, in bytes.
  
!      'l1-cache-size'
            The size of L1 data cache, in kilobytes.
  
!      'l2-cache-size'
            The size of L2 data cache, in kilobytes.
  
!      'prefetch-dynamic-strides'
            Whether the loop array prefetch pass should issue software
            prefetch hints for strides that are non-constant.  In some
            cases this may be beneficial, though the fact the stride is
--- 14690,14719 ----
            does not exhaust the specified maximum number of paths to
            consider.
  
!      ‘max-fields-for-field-sensitive’
            Maximum number of fields in a structure treated in a field
            sensitive manner during pointer analysis.
  
!      ‘prefetch-latency’
            Estimate on average number of instructions that are executed
            before prefetch finishes.  The distance prefetched ahead is
            proportional to this constant.  Increasing this number may
            also lead to less streams being prefetched (see
!           ‘simultaneous-prefetches’).
  
!      ‘simultaneous-prefetches’
            Maximum number of prefetches that can run at the same time.
  
!      ‘l1-cache-line-size’
            The size of cache line in L1 data cache, in bytes.
  
!      ‘l1-cache-size’
            The size of L1 data cache, in kilobytes.
  
!      ‘l2-cache-size’
            The size of L2 data cache, in kilobytes.
  
!      ‘prefetch-dynamic-strides’
            Whether the loop array prefetch pass should issue software
            prefetch hints for strides that are non-constant.  In some
            cases this may be beneficial, though the fact the stride is
*************** includes experimental options that may p
*** 14719,14727 ****
            Set to 1 if the prefetch hints should be issued for
            non-constant strides.  Set to 0 if prefetch hints should be
            issued only for strides that are known to be constant and
!           below 'prefetch-minimum-stride'.
  
!      'prefetch-minimum-stride'
            Minimum constant stride, in bytes, to start using prefetch
            hints for.  If the stride is less than this threshold,
            prefetch hints will not be issued.
--- 14723,14731 ----
            Set to 1 if the prefetch hints should be issued for
            non-constant strides.  Set to 0 if prefetch hints should be
            issued only for strides that are known to be constant and
!           below ‘prefetch-minimum-stride’.
  
!      ‘prefetch-minimum-stride’
            Minimum constant stride, in bytes, to start using prefetch
            hints for.  If the stride is less than this threshold,
            prefetch hints will not be issued.
*************** includes experimental options that may p
*** 14739,14749 ****
            This setting is only useful for strides that are known and
            constant.
  
!      'destructive-interference-size'
!      'constructive-interference-size'
            The values for the C++17 variables
!           'std::hardware_destructive_interference_size' and
!           'std::hardware_constructive_interference_size'.  The
            destructive interference size is the minimum recommended
            offset between two independent concurrently-accessed objects;
            the constructive interference size is the maximum recommended
--- 14743,14753 ----
            This setting is only useful for strides that are known and
            constant.
  
!      ‘destructive-interference-size’
!      ‘constructive-interference-size’
            The values for the C++17 variables
!           ‘std::hardware_destructive_interference_size’ and
!           ‘std::hardware_constructive_interference_size’.  The
            destructive interference size is the minimum recommended
            offset between two independent concurrently-accessed objects;
            the constructive interference size is the maximum recommended
*************** includes experimental options that may p
*** 14757,14789 ****
            The destructive interference size is intended to be used for
            layout, and thus has ABI impact.  The default value is not
            expected to be stable, and on some targets varies with
!           '-mtune', so use of this variable in a context where ABI
            stability is important, such as the public interface of a
            library, is strongly discouraged; if it is used in that
            context, users can stabilize the value using this option.
  
            The constructive interference size is less sensitive, as it is
!           typically only used in a 'static_assert' to make sure that a
            type fits within a cache line.
  
!           See also '-Winterference-size'.
  
!      'loop-interchange-max-num-stmts'
            The maximum number of stmts in a loop to be interchanged.
  
!      'loop-interchange-stride-ratio'
            The minimum ratio between stride of two loops for interchange
            to be profitable.
  
!      'min-insn-to-prefetch-ratio'
            The minimum ratio between the number of instructions and the
            number of prefetches to enable prefetching in a loop.
  
!      'prefetch-min-insn-to-mem-ratio'
            The minimum ratio between the number of instructions and the
            number of memory references to enable prefetching in a loop.
  
!      'use-canonical-types'
            Whether the compiler should use the "canonical" type system.
            Should always be 1, which uses a more efficient internal
            mechanism for comparing types in C++ and Objective-C++.
--- 14761,14793 ----
            The destructive interference size is intended to be used for
            layout, and thus has ABI impact.  The default value is not
            expected to be stable, and on some targets varies with
!           ‘-mtune’, so use of this variable in a context where ABI
            stability is important, such as the public interface of a
            library, is strongly discouraged; if it is used in that
            context, users can stabilize the value using this option.
  
            The constructive interference size is less sensitive, as it is
!           typically only used in a ‘static_assert’ to make sure that a
            type fits within a cache line.
  
!           See also ‘-Winterference-size’.
  
!      ‘loop-interchange-max-num-stmts’
            The maximum number of stmts in a loop to be interchanged.
  
!      ‘loop-interchange-stride-ratio’
            The minimum ratio between stride of two loops for interchange
            to be profitable.
  
!      ‘min-insn-to-prefetch-ratio’
            The minimum ratio between the number of instructions and the
            number of prefetches to enable prefetching in a loop.
  
!      ‘prefetch-min-insn-to-mem-ratio’
            The minimum ratio between the number of instructions and the
            number of memory references to enable prefetching in a loop.
  
!      ‘use-canonical-types’
            Whether the compiler should use the "canonical" type system.
            Should always be 1, which uses a more efficient internal
            mechanism for comparing types in C++ and Objective-C++.
*************** includes experimental options that may p
*** 14791,14805 ****
            compilation failures, set this value to 0 to disable canonical
            types.
  
!      'switch-conversion-max-branch-ratio'
            Switch initialization conversion refuses to create arrays that
!           are bigger than 'switch-conversion-max-branch-ratio' times the
            number of branches in the switch.
  
!      'max-partial-antic-length'
            Maximum length of the partial antic set computed during the
            tree partial redundancy elimination optimization
!           ('-ftree-pre') when optimizing at '-O3' and above.  For some
            sorts of source code the enhanced partial redundancy
            elimination optimization can run away, consuming all of the
            memory available on the host machine.  This parameter sets a
--- 14795,14809 ----
            compilation failures, set this value to 0 to disable canonical
            types.
  
!      ‘switch-conversion-max-branch-ratio’
            Switch initialization conversion refuses to create arrays that
!           are bigger than ‘switch-conversion-max-branch-ratio’ times the
            number of branches in the switch.
  
!      ‘max-partial-antic-length’
            Maximum length of the partial antic set computed during the
            tree partial redundancy elimination optimization
!           (‘-ftree-pre’) when optimizing at ‘-O3’ and above.  For some
            sorts of source code the enhanced partial redundancy
            elimination optimization can run away, consuming all of the
            memory available on the host machine.  This parameter sets a
*************** includes experimental options that may p
*** 14807,14819 ****
            prevents the runaway behavior.  Setting a value of 0 for this
            parameter allows an unlimited set length.
  
!      'rpo-vn-max-loop-depth'
            Maximum loop depth that is value-numbered optimistically.
            When the limit hits the innermost RPO-VN-MAX-LOOP-DEPTH loops
            and the outermost loop in the loop nest are value-numbered
            optimistically and the remaining ones not.
  
!      'sccvn-max-alias-queries-per-access'
            Maximum number of alias-oracle queries we perform when looking
            for redundancies for loads and stores.  If this limit is hit
            the search is aborted and the load or store is not considered
--- 14811,14823 ----
            prevents the runaway behavior.  Setting a value of 0 for this
            parameter allows an unlimited set length.
  
!      ‘rpo-vn-max-loop-depth’
            Maximum loop depth that is value-numbered optimistically.
            When the limit hits the innermost RPO-VN-MAX-LOOP-DEPTH loops
            and the outermost loop in the loop nest are value-numbered
            optimistically and the remaining ones not.
  
!      ‘sccvn-max-alias-queries-per-access’
            Maximum number of alias-oracle queries we perform when looking
            for redundancies for loads and stores.  If this limit is hit
            the search is aborted and the load or store is not considered
*************** includes experimental options that may p
*** 14821,14834 ****
            to the number of stores on all paths from the load to the
            function entry.
  
!      'ira-max-loops-num'
            IRA uses regional register allocation by default.  If a
            function contains more loops than the number given by this
            parameter, only at most the given number of the most
            frequently-executed loops form regions for regional register
            allocation.
  
!      'ira-max-conflict-table-size'
            Although IRA uses a sophisticated algorithm to compress the
            conflict table, the table can still require excessive amounts
            of memory for huge functions.  If the conflict table for a
--- 14825,14838 ----
            to the number of stores on all paths from the load to the
            function entry.
  
!      ‘ira-max-loops-num’
            IRA uses regional register allocation by default.  If a
            function contains more loops than the number given by this
            parameter, only at most the given number of the most
            frequently-executed loops form regions for regional register
            allocation.
  
!      ‘ira-max-conflict-table-size’
            Although IRA uses a sophisticated algorithm to compress the
            conflict table, the table can still require excessive amounts
            of memory for huge functions.  If the conflict table for a
*************** includes experimental options that may p
*** 14837,14850 ****
            simpler, and lower-quality algorithm that does not require
            building a pseudo-register conflict table.
  
!      'ira-loop-reserved-regs'
            IRA can be used to evaluate more accurate register pressure in
!           loops for decisions to move loop invariants (see '-O3').  The
            number of available registers reserved for some other purposes
            is given by this parameter.  Default of the parameter is the
            best found from numerous experiments.
  
!      'ira-consider-dup-in-all-alts'
            Make IRA to consider matching constraint (duplicated operand
            number) heavily in all available alternatives for preferred
            register class.  If it is set as zero, it means IRA only
--- 14841,14854 ----
            simpler, and lower-quality algorithm that does not require
            building a pseudo-register conflict table.
  
!      ‘ira-loop-reserved-regs’
            IRA can be used to evaluate more accurate register pressure in
!           loops for decisions to move loop invariants (see ‘-O3’).  The
            number of available registers reserved for some other purposes
            is given by this parameter.  Default of the parameter is the
            best found from numerous experiments.
  
!      ‘ira-consider-dup-in-all-alts’
            Make IRA to consider matching constraint (duplicated operand
            number) heavily in all available alternatives for preferred
            register class.  If it is set as zero, it means IRA only
*************** includes experimental options that may p
*** 14855,14865 ****
            with an appropriate register class and respect the found
            qualified matching constraint.
  
!      'ira-simple-lra-insn-threshold'
            Approximate function insn number in 1K units triggering simple
            local RA.
  
!      'lra-inheritance-ebb-probability-cutoff'
            LRA tries to reuse values reloaded in registers in subsequent
            insns.  This optimization is called inheritance.  EBB is used
            as a region to do this optimization.  The parameter defines a
--- 14859,14869 ----
            with an appropriate register class and respect the found
            qualified matching constraint.
  
!      ‘ira-simple-lra-insn-threshold’
            Approximate function insn number in 1K units triggering simple
            local RA.
  
!      ‘lra-inheritance-ebb-probability-cutoff’
            LRA tries to reuse values reloaded in registers in subsequent
            insns.  This optimization is called inheritance.  EBB is used
            as a region to do this optimization.  The parameter defines a
*************** includes experimental options that may p
*** 14867,14887 ****
            add BB to inheritance EBB in LRA. The default value was chosen
            from numerous runs of SPEC2000 on x86-64.
  
!      'loop-invariant-max-bbs-in-loop'
            Loop invariant motion can be very expensive, both in
            compilation time and in amount of needed compile-time memory,
            with very large loops.  Loops with more basic blocks than this
            parameter won't have loop invariant motion optimization
            performed on them.
  
!      'loop-max-datarefs-for-datadeps'
            Building data dependencies is expensive for very large loops.
            This parameter limits the number of data references in loops
            that are considered for data dependence analysis.  These large
            loops are no handled by the optimizations using loop data
            dependencies.
  
!      'max-vartrack-size'
            Sets a maximum number of hash table slots to use during
            variable tracking dataflow analysis of any function.  If this
            limit is exceeded with variable tracking at assignments
--- 14871,14891 ----
            add BB to inheritance EBB in LRA. The default value was chosen
            from numerous runs of SPEC2000 on x86-64.
  
!      ‘loop-invariant-max-bbs-in-loop’
            Loop invariant motion can be very expensive, both in
            compilation time and in amount of needed compile-time memory,
            with very large loops.  Loops with more basic blocks than this
            parameter won't have loop invariant motion optimization
            performed on them.
  
!      ‘loop-max-datarefs-for-datadeps’
            Building data dependencies is expensive for very large loops.
            This parameter limits the number of data references in loops
            that are considered for data dependence analysis.  These large
            loops are no handled by the optimizations using loop data
            dependencies.
  
!      ‘max-vartrack-size’
            Sets a maximum number of hash table slots to use during
            variable tracking dataflow analysis of any function.  If this
            limit is exceeded with variable tracking at assignments
*************** includes experimental options that may p
*** 14891,14897 ****
            analysis is completely disabled for the function.  Setting the
            parameter to zero makes it unlimited.
  
!      'max-vartrack-expr-depth'
            Sets a maximum number of recursion levels when attempting to
            map variable names or debug temporaries to value expressions.
            This trades compilation time for more complete debug
--- 14895,14901 ----
            analysis is completely disabled for the function.  Setting the
            parameter to zero makes it unlimited.
  
!      ‘max-vartrack-expr-depth’
            Sets a maximum number of recursion levels when attempting to
            map variable names or debug temporaries to value expressions.
            This trades compilation time for more complete debug
*************** includes experimental options that may p
*** 14901,15091 ****
            compiler to find more complex debug expressions, but compile
            time and memory use may grow.
  
!      'max-debug-marker-count'
            Sets a threshold on the number of debug markers (e.g. begin
            stmt markers) to avoid complexity explosion at inlining or
            expanding to RTL. If a function has more such gimple stmts
            than the set limit, such stmts will be dropped from the
            inlined copy of a function, and from its RTL expansion.
  
!      'min-nondebug-insn-uid'
            Use uids starting at this parameter for nondebug insns.  The
            range below the parameter is reserved exclusively for debug
!           insns created by '-fvar-tracking-assignments', but debug insns
            may get (non-overlapping) uids above it if the reserved range
            is exhausted.
  
!      'ipa-sra-deref-prob-threshold'
            IPA-SRA replaces a pointer which is known not be NULL with one
            or more new parameters only when the probability (in percent,
            relative to function entry) of it being dereferenced is higher
            than this parameter.
  
!      'ipa-sra-ptr-growth-factor'
            IPA-SRA replaces a pointer to an aggregate with one or more
            new parameters only when their cumulative size is less or
!           equal to 'ipa-sra-ptr-growth-factor' times the size of the
            original pointer parameter.
  
!      'ipa-sra-ptrwrap-growth-factor'
            Additional maximum allowed growth of total size of new
            parameters that ipa-sra replaces a pointer to an aggregate
            with, if it points to a local variable that the caller only
            writes to and passes it as an argument to other functions.
  
!      'ipa-sra-max-replacements'
            Maximum pieces of an aggregate that IPA-SRA tracks.  As a
            consequence, it is also the maximum number of replacements of
            a formal parameter.
  
!      'sra-max-scalarization-size-Ospeed'
!      'sra-max-scalarization-size-Osize'
            The two Scalar Reduction of Aggregates passes (SRA and
            IPA-SRA) aim to replace scalar parts of aggregates with uses
            of independent scalar variables.  These parameters control the
            maximum size, in storage units, of aggregate which is
            considered for replacement when compiling for speed
!           ('sra-max-scalarization-size-Ospeed') or size
!           ('sra-max-scalarization-size-Osize') respectively.
  
!      'sra-max-propagations'
            The maximum number of artificial accesses that Scalar
            Replacement of Aggregates (SRA) will track, per one local
            variable, in order to facilitate copy propagation.
  
!      'tm-max-aggregate-size'
            When making copies of thread-local variables in a transaction,
            this parameter specifies the size in bytes after which
            variables are saved with the logging functions as opposed to
            save/restore code sequence pairs.  This option only applies
!           when using '-fgnu-tm'.
  
!      'graphite-max-nb-scop-params'
            To avoid exponential effects in the Graphite loop transforms,
            the number of parameters in a Static Control Part (SCoP) is
            bounded.  A value of zero can be used to lift the bound.  A
            variable whose value is unknown at compilation time and
            defined outside a SCoP is a parameter of the SCoP.
  
!      'hardcfr-max-blocks'
!           Disable '-fharden-control-flow-redundancy' for functions with
            a larger number of blocks than the specified value.  Zero
            removes any limit.
  
!      'hardcfr-max-inline-blocks'
!           Force '-fharden-control-flow-redundancy' to use out-of-line
            checking for functions with a larger number of basic blocks
            than the specified value.
  
!      'loop-block-tile-size'
            Loop blocking or strip mining transforms, enabled with
!           '-floop-block' or '-floop-strip-mine', strip mine each loop in
            the loop nest by a given number of iterations.  The strip
!           length can be changed using the 'loop-block-tile-size'
            parameter.
  
!      'ipa-jump-function-lookups'
            Specifies number of statements visited during jump function
            offset discovery.
  
!      'ipa-cp-value-list-size'
            IPA-CP attempts to track all possible values and types passed
            to a function's parameter in order to propagate them and
!           perform devirtualization.  'ipa-cp-value-list-size' is the
            maximum number of values and types it stores per one formal
            parameter of a function.
  
!      'ipa-cp-eval-threshold'
            IPA-CP calculates its own score of cloning profitability
            heuristics and performs those cloning opportunities with
!           scores that exceed 'ipa-cp-eval-threshold'.
  
!      'ipa-cp-max-recursive-depth'
            Maximum depth of recursive cloning for self-recursive
            function.
  
!      'ipa-cp-min-recursive-probability'
            Recursive cloning only when the probability of call being
            executed exceeds the parameter.
  
!      'ipa-cp-profile-count-base'
!           When using '-fprofile-use' option, IPA-CP will consider the
            measured execution count of a call graph edge at this
            percentage position in their histogram as the basis for its
            heuristics calculation.
  
!      'ipa-cp-recursive-freq-factor'
            The number of times interprocedural copy propagation expects
            recursive functions to call themselves.
  
!      'ipa-cp-recursion-penalty'
            Percentage penalty the recursive functions will receive when
            they are evaluated for cloning.
  
!      'ipa-cp-single-call-penalty'
            Percentage penalty functions containing a single call to
            another function will receive when they are evaluated for
            cloning.
  
!      'ipa-max-agg-items'
            IPA-CP is also capable to propagate a number of scalar values
!           passed in an aggregate.  'ipa-max-agg-items' controls the
            maximum number of such values per one parameter.
  
!      'ipa-cp-loop-hint-bonus'
            When IPA-CP determines that a cloning candidate would make the
            number of iterations of a loop known, it adds a bonus of
!           'ipa-cp-loop-hint-bonus' to the profitability score of the
            candidate.
  
!      'ipa-max-loop-predicates'
            The maximum number of different predicates IPA will use to
            describe when loops in a function have known properties.
  
!      'ipa-max-aa-steps'
            During its analysis of function bodies, IPA-CP employs alias
            analysis in order to track values pointed to by function
            parameters.  In order not spend too much time analyzing huge
            functions, it gives up and consider all memory clobbered after
!           examining 'ipa-max-aa-steps' statements modifying memory.
  
!      'ipa-max-switch-predicate-bounds'
            Maximal number of boundary endpoints of case ranges of switch
            statement.  For switch exceeding this limit, IPA-CP will not
            construct cloning cost predicate, which is used to estimate
            cloning benefit, for default case of the switch statement.
  
!      'ipa-max-param-expr-ops'
            IPA-CP will analyze conditional statement that references some
            function parameter to estimate benefit for cloning upon
            certain constant value.  But if number of operations in a
!           parameter expression exceeds 'ipa-max-param-expr-ops', the
            expression is treated as complicated one, and is not handled
            by IPA analysis.
  
!      'lto-partitions'
            Specify desired number of partitions produced during WHOPR
            compilation.  The number of partitions should exceed the
            number of CPUs used for compilation.
  
!      'lto-min-partition'
            Size of minimal partition for WHOPR (in estimated
            instructions).  This prevents expenses of splitting very small
            programs into too many partitions.
  
!      'lto-max-partition'
            Size of max partition for WHOPR (in estimated instructions).
            to provide an upper bound for individual size of partition.
            Meant to be used only with balanced partitioning.
  
!      'lto-max-streaming-parallelism'
            Maximal number of parallel processes used for LTO streaming.
  
!      'cxx-max-namespaces-for-diagnostic-help'
            The maximum number of namespaces to consult for suggestions
            when C++ name lookup fails for an identifier.
  
!      'sink-frequency-threshold'
            The maximum relative execution frequency (in percents) of the
            target block relative to a statement's original block to allow
            statement sinking of a statement.  Larger numbers result in
--- 14905,15095 ----
            compiler to find more complex debug expressions, but compile
            time and memory use may grow.
  
!      ‘max-debug-marker-count’
            Sets a threshold on the number of debug markers (e.g. begin
            stmt markers) to avoid complexity explosion at inlining or
            expanding to RTL. If a function has more such gimple stmts
            than the set limit, such stmts will be dropped from the
            inlined copy of a function, and from its RTL expansion.
  
!      ‘min-nondebug-insn-uid’
            Use uids starting at this parameter for nondebug insns.  The
            range below the parameter is reserved exclusively for debug
!           insns created by ‘-fvar-tracking-assignments’, but debug insns
            may get (non-overlapping) uids above it if the reserved range
            is exhausted.
  
!      ‘ipa-sra-deref-prob-threshold’
            IPA-SRA replaces a pointer which is known not be NULL with one
            or more new parameters only when the probability (in percent,
            relative to function entry) of it being dereferenced is higher
            than this parameter.
  
!      ‘ipa-sra-ptr-growth-factor’
            IPA-SRA replaces a pointer to an aggregate with one or more
            new parameters only when their cumulative size is less or
!           equal to ‘ipa-sra-ptr-growth-factor’ times the size of the
            original pointer parameter.
  
!      ‘ipa-sra-ptrwrap-growth-factor’
            Additional maximum allowed growth of total size of new
            parameters that ipa-sra replaces a pointer to an aggregate
            with, if it points to a local variable that the caller only
            writes to and passes it as an argument to other functions.
  
!      ‘ipa-sra-max-replacements’
            Maximum pieces of an aggregate that IPA-SRA tracks.  As a
            consequence, it is also the maximum number of replacements of
            a formal parameter.
  
!      ‘sra-max-scalarization-size-Ospeed’
!      ‘sra-max-scalarization-size-Osize’
            The two Scalar Reduction of Aggregates passes (SRA and
            IPA-SRA) aim to replace scalar parts of aggregates with uses
            of independent scalar variables.  These parameters control the
            maximum size, in storage units, of aggregate which is
            considered for replacement when compiling for speed
!           (‘sra-max-scalarization-size-Ospeed’) or size
!           (‘sra-max-scalarization-size-Osize’) respectively.
  
!      ‘sra-max-propagations’
            The maximum number of artificial accesses that Scalar
            Replacement of Aggregates (SRA) will track, per one local
            variable, in order to facilitate copy propagation.
  
!      ‘tm-max-aggregate-size’
            When making copies of thread-local variables in a transaction,
            this parameter specifies the size in bytes after which
            variables are saved with the logging functions as opposed to
            save/restore code sequence pairs.  This option only applies
!           when using ‘-fgnu-tm’.
  
!      ‘graphite-max-nb-scop-params’
            To avoid exponential effects in the Graphite loop transforms,
            the number of parameters in a Static Control Part (SCoP) is
            bounded.  A value of zero can be used to lift the bound.  A
            variable whose value is unknown at compilation time and
            defined outside a SCoP is a parameter of the SCoP.
  
!      ‘hardcfr-max-blocks’
!           Disable ‘-fharden-control-flow-redundancy’ for functions with
            a larger number of blocks than the specified value.  Zero
            removes any limit.
  
!      ‘hardcfr-max-inline-blocks’
!           Force ‘-fharden-control-flow-redundancy’ to use out-of-line
            checking for functions with a larger number of basic blocks
            than the specified value.
  
!      ‘loop-block-tile-size’
            Loop blocking or strip mining transforms, enabled with
!           ‘-floop-block’ or ‘-floop-strip-mine’, strip mine each loop in
            the loop nest by a given number of iterations.  The strip
!           length can be changed using the ‘loop-block-tile-size’
            parameter.
  
!      ‘ipa-jump-function-lookups’
            Specifies number of statements visited during jump function
            offset discovery.
  
!      ‘ipa-cp-value-list-size’
            IPA-CP attempts to track all possible values and types passed
            to a function's parameter in order to propagate them and
!           perform devirtualization.  ‘ipa-cp-value-list-size’ is the
            maximum number of values and types it stores per one formal
            parameter of a function.
  
!      ‘ipa-cp-eval-threshold’
            IPA-CP calculates its own score of cloning profitability
            heuristics and performs those cloning opportunities with
!           scores that exceed ‘ipa-cp-eval-threshold’.
  
!      ‘ipa-cp-max-recursive-depth’
            Maximum depth of recursive cloning for self-recursive
            function.
  
!      ‘ipa-cp-min-recursive-probability’
            Recursive cloning only when the probability of call being
            executed exceeds the parameter.
  
!      ‘ipa-cp-profile-count-base’
!           When using ‘-fprofile-use’ option, IPA-CP will consider the
            measured execution count of a call graph edge at this
            percentage position in their histogram as the basis for its
            heuristics calculation.
  
!      ‘ipa-cp-recursive-freq-factor’
            The number of times interprocedural copy propagation expects
            recursive functions to call themselves.
  
!      ‘ipa-cp-recursion-penalty’
            Percentage penalty the recursive functions will receive when
            they are evaluated for cloning.
  
!      ‘ipa-cp-single-call-penalty’
            Percentage penalty functions containing a single call to
            another function will receive when they are evaluated for
            cloning.
  
!      ‘ipa-max-agg-items’
            IPA-CP is also capable to propagate a number of scalar values
!           passed in an aggregate.  ‘ipa-max-agg-items’ controls the
            maximum number of such values per one parameter.
  
!      ‘ipa-cp-loop-hint-bonus’
            When IPA-CP determines that a cloning candidate would make the
            number of iterations of a loop known, it adds a bonus of
!           ‘ipa-cp-loop-hint-bonus’ to the profitability score of the
            candidate.
  
!      ‘ipa-max-loop-predicates’
            The maximum number of different predicates IPA will use to
            describe when loops in a function have known properties.
  
!      ‘ipa-max-aa-steps’
            During its analysis of function bodies, IPA-CP employs alias
            analysis in order to track values pointed to by function
            parameters.  In order not spend too much time analyzing huge
            functions, it gives up and consider all memory clobbered after
!           examining ‘ipa-max-aa-steps’ statements modifying memory.
  
!      ‘ipa-max-switch-predicate-bounds’
            Maximal number of boundary endpoints of case ranges of switch
            statement.  For switch exceeding this limit, IPA-CP will not
            construct cloning cost predicate, which is used to estimate
            cloning benefit, for default case of the switch statement.
  
!      ‘ipa-max-param-expr-ops’
            IPA-CP will analyze conditional statement that references some
            function parameter to estimate benefit for cloning upon
            certain constant value.  But if number of operations in a
!           parameter expression exceeds ‘ipa-max-param-expr-ops’, the
            expression is treated as complicated one, and is not handled
            by IPA analysis.
  
!      ‘lto-partitions’
            Specify desired number of partitions produced during WHOPR
            compilation.  The number of partitions should exceed the
            number of CPUs used for compilation.
  
!      ‘lto-min-partition’
            Size of minimal partition for WHOPR (in estimated
            instructions).  This prevents expenses of splitting very small
            programs into too many partitions.
  
!      ‘lto-max-partition’
            Size of max partition for WHOPR (in estimated instructions).
            to provide an upper bound for individual size of partition.
            Meant to be used only with balanced partitioning.
  
!      ‘lto-max-streaming-parallelism’
            Maximal number of parallel processes used for LTO streaming.
  
!      ‘cxx-max-namespaces-for-diagnostic-help’
            The maximum number of namespaces to consult for suggestions
            when C++ name lookup fails for an identifier.
  
!      ‘sink-frequency-threshold’
            The maximum relative execution frequency (in percents) of the
            target block relative to a statement's original block to allow
            statement sinking of a statement.  Larger numbers result in
*************** includes experimental options that may p
*** 15093,15329 ****
            adjustment is applied for statements with memory operands as
            those are even more profitable so sink.
  
!      'max-stores-to-sink'
            The maximum number of conditional store pairs that can be
!           sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
!           or if-conversion ('-ftree-loop-if-convert') is disabled.
  
!      'case-values-threshold'
            The smallest number of different values for which it is best
            to use a jump-table instead of a tree of conditional branches.
            If the value is 0, use the default for the machine.
  
!      'jump-table-max-growth-ratio-for-size'
            The maximum code size growth ratio when expanding into a jump
            table (in percent).  The parameter is used when optimizing for
            size.
  
!      'jump-table-max-growth-ratio-for-speed'
            The maximum code size growth ratio when expanding into a jump
            table (in percent).  The parameter is used when optimizing for
            speed.
  
!      'tree-reassoc-width'
            Set the maximum number of instructions executed in parallel in
            reassociated tree.  This parameter overrides target dependent
            heuristics used by default if has non zero value.
  
!      'sched-pressure-algorithm'
            Choose between the two available implementations of
!           '-fsched-pressure'.  Algorithm 1 is the original
            implementation and is the more likely to prevent instructions
            from being reordered.  Algorithm 2 was designed to be a
            compromise between the relatively conservative approach taken
            by algorithm 1 and the rather aggressive approach taken by the
            default scheduler.  It relies more heavily on having a regular
            register file and accurate register pressure classes.  See
!           'haifa-sched.cc' in the GCC sources for more details.
  
            The default choice depends on the target.
  
!      'max-slsr-cand-scan'
            Set the maximum number of existing candidates that are
            considered when seeking a basis for a new straight-line
            strength reduction candidate.
  
!      'asan-globals'
            Enable buffer overflow detection for global objects.  This
            kind of protection is enabled by default if you are using
!           '-fsanitize=address' option.  To disable global objects
!           protection use '--param asan-globals=0'.
  
!      'asan-stack'
            Enable buffer overflow detection for stack objects.  This kind
            of protection is enabled by default when using
!           '-fsanitize=address'.  To disable stack protection use
!           '--param asan-stack=0' option.
  
!      'asan-instrument-reads'
            Enable buffer overflow detection for memory reads.  This kind
            of protection is enabled by default when using
!           '-fsanitize=address'.  To disable memory reads protection use
!           '--param asan-instrument-reads=0'.
  
!      'asan-instrument-writes'
            Enable buffer overflow detection for memory writes.  This kind
            of protection is enabled by default when using
!           '-fsanitize=address'.  To disable memory writes protection use
!           '--param asan-instrument-writes=0' option.
  
!      'asan-memintrin'
            Enable detection for built-in functions.  This kind of
            protection is enabled by default when using
!           '-fsanitize=address'.  To disable built-in functions
!           protection use '--param asan-memintrin=0'.
  
!      'asan-use-after-return'
            Enable detection of use-after-return.  This kind of protection
!           is enabled by default when using the '-fsanitize=address'
!           option.  To disable it use '--param asan-use-after-return=0'.
  
            Note: By default the check is disabled at run time.  To enable
!           it, add 'detect_stack_use_after_return=1' to the environment
!           variable 'ASAN_OPTIONS'.
  
!      'asan-instrumentation-with-call-threshold'
            If number of memory accesses in function being instrumented is
            greater or equal to this number, use callbacks instead of
!           inline checks.  E.g.  to disable inline code use '--param
!           asan-instrumentation-with-call-threshold=0'.
  
!      'asan-kernel-mem-intrinsic-prefix'
!           If nonzero, prefix calls to 'memcpy', 'memset' and 'memmove'
!           with '__asan_' or '__hwasan_' for '-fsanitize=kernel-address'
!           or '-fsanitize=kernel-hwaddress', respectively.
  
!      'hwasan-instrument-stack'
            Enable hwasan instrumentation of statically sized
            stack-allocated variables.  This kind of instrumentation is
!           enabled by default when using '-fsanitize=hwaddress' and
!           disabled by default when using '-fsanitize=kernel-hwaddress'.
!           To disable stack instrumentation use '--param
!           hwasan-instrument-stack=0', and to enable it use '--param
!           hwasan-instrument-stack=1'.
  
!      'hwasan-random-frame-tag'
            When using stack instrumentation, decide tags for stack
            variables using a deterministic sequence beginning at a random
            tag for each frame.  With this parameter unset tags are chosen
            using the same sequence but beginning from 1.  This is enabled
!           by default for '-fsanitize=hwaddress' and unavailable for
!           '-fsanitize=kernel-hwaddress'.  To disable it use '--param
!           hwasan-random-frame-tag=0'.
  
!      'hwasan-instrument-allocas'
            Enable hwasan instrumentation of dynamically sized
            stack-allocated variables.  This kind of instrumentation is
!           enabled by default when using '-fsanitize=hwaddress' and
!           disabled by default when using '-fsanitize=kernel-hwaddress'.
!           To disable instrumentation of such variables use '--param
!           hwasan-instrument-allocas=0', and to enable it use '--param
!           hwasan-instrument-allocas=1'.
  
!      'hwasan-instrument-reads'
            Enable hwasan checks on memory reads.  Instrumentation of
!           reads is enabled by default for both '-fsanitize=hwaddress'
!           and '-fsanitize=kernel-hwaddress'.  To disable checking memory
!           reads use '--param hwasan-instrument-reads=0'.
  
!      'hwasan-instrument-writes'
            Enable hwasan checks on memory writes.  Instrumentation of
!           writes is enabled by default for both '-fsanitize=hwaddress'
!           and '-fsanitize=kernel-hwaddress'.  To disable checking memory
!           writes use '--param hwasan-instrument-writes=0'.
  
!      'hwasan-instrument-mem-intrinsics'
            Enable hwasan instrumentation of builtin functions.
            Instrumentation of these builtin functions is enabled by
!           default for both '-fsanitize=hwaddress' and
!           '-fsanitize=kernel-hwaddress'.  To disable instrumentation of
!           builtin functions use '--param
!           hwasan-instrument-mem-intrinsics=0'.
  
!      'use-after-scope-direct-emission-threshold'
            If the size of a local variable in bytes is smaller or equal
            to this number, directly poison (or unpoison) shadow memory
            instead of using run-time callbacks.
  
!      'tsan-distinguish-volatile'
            Emit special instrumentation for accesses to volatiles.
  
!      'tsan-instrument-func-entry-exit'
            Emit instrumentation calls to __tsan_func_entry() and
            __tsan_func_exit().
  
!      'max-fsm-thread-path-insns'
            Maximum number of instructions to copy when duplicating blocks
            on a finite state automaton jump thread path.
  
!      'threader-debug'
            threader-debug=[none|all] Enables verbose dumping of the
            threader solver.
  
!      'parloops-chunk-size'
            Chunk size of omp schedule for loops parallelized by parloops.
  
!      'parloops-schedule'
            Schedule type of omp schedule for loops parallelized by
            parloops (static, dynamic, guided, auto, runtime).
  
!      'parloops-min-per-thread'
            The minimum number of iterations per thread of an innermost
            parallelized loop for which the parallelized variant is
            preferred over the single threaded one.  Note that for a
            parallelized loop nest the minimum number of iterations of the
            outermost loop per thread is two.
  
!      'max-ssa-name-query-depth'
            Maximum depth of recursion when querying properties of SSA
            names in things like fold routines.  One level of recursion
            corresponds to following a use-def chain.
  
!      'max-speculative-devirt-maydefs'
            The maximum number of may-defs we analyze when looking for a
            must-def specifying the dynamic type of an object that invokes
            a virtual call we may be able to devirtualize speculatively.
  
!      'ranger-debug'
            Specifies the type of debug output to be issued for ranges.
  
!      'unroll-jam-min-percent'
            The minimum percentage of memory references that must be
            optimized away for the unroll-and-jam transformation to be
            considered profitable.
  
!      'unroll-jam-max-unroll'
            The maximum number of times the outer loop should be unrolled
            by the unroll-and-jam transformation.
  
!      'max-rtl-if-conversion-unpredictable-cost'
            Maximum permissible cost for the sequence that would be
            generated by the RTL if-conversion pass for a branch that is
            considered unpredictable.
  
!      'max-variable-expansions-in-unroller'
!           If '-fvariable-expansion-in-unroller' is used, the maximum
            number of times that an individual variable will be expanded
            during loop unrolling.
  
!      'partial-inlining-entry-probability'
            Maximum probability of the entry BB of split region (in
            percent relative to entry BB of the function) to make partial
            inlining happen.
  
!      'max-tracked-strlens'
            Maximum number of strings for which strlen optimization pass
            will track string lengths.
  
!      'gcse-after-reload-partial-fraction'
            The threshold ratio for performing partial redundancy
            elimination after reload.
  
!      'gcse-after-reload-critical-fraction'
            The threshold ratio of critical edges execution count that
            permit performing redundancy elimination after reload.
  
!      'max-loop-header-insns'
            The maximum number of insns in loop header duplicated by the
            copy loop headers pass.
  
!      'vect-epilogues-nomask'
            Enable loop epilogue vectorization using smaller vector size.
  
!      'vect-partial-vector-usage'
            Controls when the loop vectorizer considers using partial
            vector loads and stores as an alternative to falling back to
            scalar code.  0 stops the vectorizer from ever using partial
--- 15097,15333 ----
            adjustment is applied for statements with memory operands as
            those are even more profitable so sink.
  
!      ‘max-stores-to-sink’
            The maximum number of conditional store pairs that can be
!           sunk.  Set to 0 if either vectorization (‘-ftree-vectorize’)
!           or if-conversion (‘-ftree-loop-if-convert’) is disabled.
  
!      ‘case-values-threshold’
            The smallest number of different values for which it is best
            to use a jump-table instead of a tree of conditional branches.
            If the value is 0, use the default for the machine.
  
!      ‘jump-table-max-growth-ratio-for-size’
            The maximum code size growth ratio when expanding into a jump
            table (in percent).  The parameter is used when optimizing for
            size.
  
!      ‘jump-table-max-growth-ratio-for-speed’
            The maximum code size growth ratio when expanding into a jump
            table (in percent).  The parameter is used when optimizing for
            speed.
  
!      ‘tree-reassoc-width’
            Set the maximum number of instructions executed in parallel in
            reassociated tree.  This parameter overrides target dependent
            heuristics used by default if has non zero value.
  
!      ‘sched-pressure-algorithm’
            Choose between the two available implementations of
!           ‘-fsched-pressure’.  Algorithm 1 is the original
            implementation and is the more likely to prevent instructions
            from being reordered.  Algorithm 2 was designed to be a
            compromise between the relatively conservative approach taken
            by algorithm 1 and the rather aggressive approach taken by the
            default scheduler.  It relies more heavily on having a regular
            register file and accurate register pressure classes.  See
!           ‘haifa-sched.cc’ in the GCC sources for more details.
  
            The default choice depends on the target.
  
!      ‘max-slsr-cand-scan’
            Set the maximum number of existing candidates that are
            considered when seeking a basis for a new straight-line
            strength reduction candidate.
  
!      ‘asan-globals’
            Enable buffer overflow detection for global objects.  This
            kind of protection is enabled by default if you are using
!           ‘-fsanitize=address’ option.  To disable global objects
!           protection use ‘--param asan-globals=0’.
  
!      ‘asan-stack’
            Enable buffer overflow detection for stack objects.  This kind
            of protection is enabled by default when using
!           ‘-fsanitize=address’.  To disable stack protection use
!           ‘--param asan-stack=0’ option.
  
!      ‘asan-instrument-reads’
            Enable buffer overflow detection for memory reads.  This kind
            of protection is enabled by default when using
!           ‘-fsanitize=address’.  To disable memory reads protection use
!           ‘--param asan-instrument-reads=0’.
  
!      ‘asan-instrument-writes’
            Enable buffer overflow detection for memory writes.  This kind
            of protection is enabled by default when using
!           ‘-fsanitize=address’.  To disable memory writes protection use
!           ‘--param asan-instrument-writes=0’ option.
  
!      ‘asan-memintrin’
            Enable detection for built-in functions.  This kind of
            protection is enabled by default when using
!           ‘-fsanitize=address’.  To disable built-in functions
!           protection use ‘--param asan-memintrin=0’.
  
!      ‘asan-use-after-return’
            Enable detection of use-after-return.  This kind of protection
!           is enabled by default when using the ‘-fsanitize=address’
!           option.  To disable it use ‘--param asan-use-after-return=0’.
  
            Note: By default the check is disabled at run time.  To enable
!           it, add ‘detect_stack_use_after_return=1’ to the environment
!           variable ‘ASAN_OPTIONS’.
  
!      ‘asan-instrumentation-with-call-threshold’
            If number of memory accesses in function being instrumented is
            greater or equal to this number, use callbacks instead of
!           inline checks.  E.g.  to disable inline code use ‘--param
!           asan-instrumentation-with-call-threshold=0’.
  
!      ‘asan-kernel-mem-intrinsic-prefix’
!           If nonzero, prefix calls to ‘memcpy’, ‘memset’ and ‘memmove’
!           with ‘__asan_’ or ‘__hwasan_’ for ‘-fsanitize=kernel-address’
!           or ‘-fsanitize=kernel-hwaddress’, respectively.
  
!      ‘hwasan-instrument-stack’
            Enable hwasan instrumentation of statically sized
            stack-allocated variables.  This kind of instrumentation is
!           enabled by default when using ‘-fsanitize=hwaddress’ and
!           disabled by default when using ‘-fsanitize=kernel-hwaddress’.
!           To disable stack instrumentation use ‘--param
!           hwasan-instrument-stack=0’, and to enable it use ‘--param
!           hwasan-instrument-stack=1’.
  
!      ‘hwasan-random-frame-tag’
            When using stack instrumentation, decide tags for stack
            variables using a deterministic sequence beginning at a random
            tag for each frame.  With this parameter unset tags are chosen
            using the same sequence but beginning from 1.  This is enabled
!           by default for ‘-fsanitize=hwaddress’ and unavailable for
!           ‘-fsanitize=kernel-hwaddress’.  To disable it use ‘--param
!           hwasan-random-frame-tag=0’.
  
!      ‘hwasan-instrument-allocas’
            Enable hwasan instrumentation of dynamically sized
            stack-allocated variables.  This kind of instrumentation is
!           enabled by default when using ‘-fsanitize=hwaddress’ and
!           disabled by default when using ‘-fsanitize=kernel-hwaddress’.
!           To disable instrumentation of such variables use ‘--param
!           hwasan-instrument-allocas=0’, and to enable it use ‘--param
!           hwasan-instrument-allocas=1’.
  
!      ‘hwasan-instrument-reads’
            Enable hwasan checks on memory reads.  Instrumentation of
!           reads is enabled by default for both ‘-fsanitize=hwaddress’
!           and ‘-fsanitize=kernel-hwaddress’.  To disable checking memory
!           reads use ‘--param hwasan-instrument-reads=0’.
  
!      ‘hwasan-instrument-writes’
            Enable hwasan checks on memory writes.  Instrumentation of
!           writes is enabled by default for both ‘-fsanitize=hwaddress’
!           and ‘-fsanitize=kernel-hwaddress’.  To disable checking memory
!           writes use ‘--param hwasan-instrument-writes=0’.
  
!      ‘hwasan-instrument-mem-intrinsics’
            Enable hwasan instrumentation of builtin functions.
            Instrumentation of these builtin functions is enabled by
!           default for both ‘-fsanitize=hwaddress’ and
!           ‘-fsanitize=kernel-hwaddress’.  To disable instrumentation of
!           builtin functions use ‘--param
!           hwasan-instrument-mem-intrinsics=0’.
  
!      ‘use-after-scope-direct-emission-threshold’
            If the size of a local variable in bytes is smaller or equal
            to this number, directly poison (or unpoison) shadow memory
            instead of using run-time callbacks.
  
!      ‘tsan-distinguish-volatile’
            Emit special instrumentation for accesses to volatiles.
  
!      ‘tsan-instrument-func-entry-exit’
            Emit instrumentation calls to __tsan_func_entry() and
            __tsan_func_exit().
  
!      ‘max-fsm-thread-path-insns’
            Maximum number of instructions to copy when duplicating blocks
            on a finite state automaton jump thread path.
  
!      ‘threader-debug’
            threader-debug=[none|all] Enables verbose dumping of the
            threader solver.
  
!      ‘parloops-chunk-size’
            Chunk size of omp schedule for loops parallelized by parloops.
  
!      ‘parloops-schedule’
            Schedule type of omp schedule for loops parallelized by
            parloops (static, dynamic, guided, auto, runtime).
  
!      ‘parloops-min-per-thread’
            The minimum number of iterations per thread of an innermost
            parallelized loop for which the parallelized variant is
            preferred over the single threaded one.  Note that for a
            parallelized loop nest the minimum number of iterations of the
            outermost loop per thread is two.
  
!      ‘max-ssa-name-query-depth’
            Maximum depth of recursion when querying properties of SSA
            names in things like fold routines.  One level of recursion
            corresponds to following a use-def chain.
  
!      ‘max-speculative-devirt-maydefs’
            The maximum number of may-defs we analyze when looking for a
            must-def specifying the dynamic type of an object that invokes
            a virtual call we may be able to devirtualize speculatively.
  
!      ‘ranger-debug’
            Specifies the type of debug output to be issued for ranges.
  
!      ‘unroll-jam-min-percent’
            The minimum percentage of memory references that must be
            optimized away for the unroll-and-jam transformation to be
            considered profitable.
  
!      ‘unroll-jam-max-unroll’
            The maximum number of times the outer loop should be unrolled
            by the unroll-and-jam transformation.
  
!      ‘max-rtl-if-conversion-unpredictable-cost’
            Maximum permissible cost for the sequence that would be
            generated by the RTL if-conversion pass for a branch that is
            considered unpredictable.
  
!      ‘max-variable-expansions-in-unroller’
!           If ‘-fvariable-expansion-in-unroller’ is used, the maximum
            number of times that an individual variable will be expanded
            during loop unrolling.
  
!      ‘partial-inlining-entry-probability’
            Maximum probability of the entry BB of split region (in
            percent relative to entry BB of the function) to make partial
            inlining happen.
  
!      ‘max-tracked-strlens’
            Maximum number of strings for which strlen optimization pass
            will track string lengths.
  
!      ‘gcse-after-reload-partial-fraction’
            The threshold ratio for performing partial redundancy
            elimination after reload.
  
!      ‘gcse-after-reload-critical-fraction’
            The threshold ratio of critical edges execution count that
            permit performing redundancy elimination after reload.
  
!      ‘max-loop-header-insns’
            The maximum number of insns in loop header duplicated by the
            copy loop headers pass.
  
!      ‘vect-epilogues-nomask’
            Enable loop epilogue vectorization using smaller vector size.
  
!      ‘vect-partial-vector-usage’
            Controls when the loop vectorizer considers using partial
            vector loads and stores as an alternative to falling back to
            scalar code.  0 stops the vectorizer from ever using partial
*************** includes experimental options that may p
*** 15333,15620 ****
            loops.  The parameter only has an effect on targets that
            support partial vector loads and stores.
  
!      'vect-inner-loop-cost-factor'
            The maximum factor which the loop vectorizer applies to the
            cost of statements in an inner loop relative to the loop being
            vectorized.  The factor applied is the maximum of the
            estimated number of iterations of the inner loop and this
            parameter.  The default value of this parameter is 50.
  
!      'vect-induction-float'
            Enable loop vectorization of floating point inductions.
  
!      'vrp-sparse-threshold'
            Maximum number of basic blocks before VRP uses a sparse bitmap
            cache.
  
!      'vrp-switch-limit'
            Maximum number of outgoing edges in a switch before VRP will
            not process it.
  
!      'vrp-vector-threshold'
            Maximum number of basic blocks for VRP to use a basic cache
            vector.
  
!      'avoid-fma-max-bits'
            Maximum number of bits for which we avoid creating FMAs.
  
!      'fully-pipelined-fma'
            Whether the target fully pipelines FMA instructions.  If
            non-zero, reassociation considers the benefit of parallelizing
            FMA's multiplication part and addition part, assuming FMUL and
            FMA use the same units that can also do FADD.
  
!      'sms-loop-average-count-threshold'
            A threshold on the average loop count considered by the swing
            modulo scheduler.
  
!      'sms-dfa-history'
            The number of cycles the swing modulo scheduler considers when
            checking conflicts using DFA.
  
!      'graphite-allow-codegen-errors'
!           Whether codegen errors should be ICEs when '-fchecking'.
  
!      'sms-max-ii-factor'
            A factor for tuning the upper bound that swing modulo
            scheduler uses for scheduling a loop.
  
!      'lra-max-considered-reload-pseudos'
            The max number of reload pseudos which are considered during
            spilling a non-reload pseudo.
  
!      'max-pow-sqrt-depth'
            Maximum depth of sqrt chains to use when synthesizing
            exponentiation by a real constant.
  
!      'max-dse-active-local-stores'
            Maximum number of active local stores in RTL dead store
            elimination.
  
!      'asan-instrument-allocas'
            Enable asan allocas/VLAs protection.
  
!      'max-iterations-computation-cost'
            Bound on the cost of an expression to compute the number of
            iterations.
  
!      'max-isl-operations'
            Maximum number of isl operations, 0 means unlimited.
  
!      'graphite-max-arrays-per-scop'
            Maximum number of arrays per scop.
  
!      'max-vartrack-reverse-op-size'
            Max.  size of loc list for which reverse ops should be added.
  
!      'fsm-scale-path-stmts'
            Scale factor to apply to the number of statements in a
            threading path crossing a loop backedge when comparing to
!           '--param=max-jump-thread-duplication-stmts'.
  
!      'uninit-control-dep-attempts'
            Maximum number of nested calls to search for control
            dependencies during uninitialized variable analysis.
  
!      'uninit-max-chain-len'
            Maximum number of predicates anded for each predicate ored in
            the normalized predicate chain.
  
!      'uninit-max-num-chains'
            Maximum number of predicates ored in the normalized predicate
            chain.
  
!      'sched-autopref-queue-depth'
            Hardware autoprefetcher scheduler model control flag.  Number
            of lookahead cycles the model looks into; at ' ' only enable
            instruction sorting heuristic.
  
!      'loop-versioning-max-inner-insns'
            The maximum number of instructions that an inner loop can have
            before the loop versioning pass considers it too big to copy.
  
!      'loop-versioning-max-outer-insns'
            The maximum number of instructions that an outer loop can have
            before the loop versioning pass considers it too big to copy,
            discounting any instructions in inner loops that directly
            benefit from versioning.
  
!      'ssa-name-def-chain-limit'
            The maximum number of SSA_NAME assignments to follow in
            determining a property of a variable such as its value.  This
            limits the number of iterations or recursive calls GCC
            performs when optimizing certain statements or when
            determining their validity prior to issuing diagnostics.
  
!      'store-merging-max-size'
            Maximum size of a single store merging region in bytes.
  
!      'hash-table-verification-limit'
            The number of elements for which hash table verification is
            done for each searched element.
  
!      'max-find-base-term-values'
            Maximum number of VALUEs handled during a single
            find_base_term call.
  
!      'analyzer-max-enodes-per-program-point'
            The maximum number of exploded nodes per program point within
            the analyzer, before terminating analysis of that point.
  
!      'analyzer-max-constraints'
            The maximum number of constraints per state.
  
!      'analyzer-min-snodes-for-call-summary'
            The minimum number of supernodes within a function for the
            analyzer to consider summarizing its effects at call sites.
  
!      'analyzer-max-enodes-for-full-dump'
            The maximum depth of exploded nodes that should appear in a
            dot dump before switching to a less verbose format.
  
!      'analyzer-max-recursion-depth'
            The maximum number of times a callsite can appear in a call
            stack within the analyzer, before terminating analysis of a
            call that would recurse deeper.
  
!      'analyzer-max-svalue-depth'
            The maximum depth of a symbolic value, before approximating
            the value as unknown.
  
!      'analyzer-max-infeasible-edges'
            The maximum number of infeasible edges to reject before
            declaring a diagnostic as infeasible.
  
!      'gimple-fe-computed-hot-bb-threshold'
            The number of executions of a basic block which is considered
            hot.  The parameter is used only in GIMPLE FE.
  
!      'analyzer-bb-explosion-factor'
            The maximum number of 'after supernode' exploded nodes within
            the analyzer per supernode, before terminating analysis.
  
!      'analyzer-text-art-string-ellipsis-threshold'
            The number of bytes at which to ellipsize string literals in
            analyzer text art diagrams.
  
!      'analyzer-text-art-ideal-canvas-width'
            The ideal width in characters of text art diagrams generated
            by the analyzer.
  
!      'analyzer-text-art-string-ellipsis-head-len'
            The number of literal bytes to show at the head of a string
            literal in text art when ellipsizing it.
  
!      'analyzer-text-art-string-ellipsis-tail-len'
            The number of literal bytes to show at the tail of a string
            literal in text art when ellipsizing it.
  
!      'ranger-logical-depth'
            Maximum depth of logical expression evaluation ranger will
            look through when evaluating outgoing edge ranges.
  
!      'ranger-recompute-depth'
            Maximum depth of instruction chains to consider for
            recomputation in the outgoing range calculator.
  
!      'relation-block-limit'
            Maximum number of relations the oracle will register in a
            basic block.
  
!      'min-pagesize'
            Minimum page size for warning purposes.
  
!      'openacc-kernels'
            Specify mode of OpenACC 'kernels' constructs handling.  With
!           '--param=openacc-kernels=decompose', OpenACC 'kernels'
            constructs are decomposed into parts, a sequence of compute
            constructs, each then handled individually.  This is work in
!           progress.  With '--param=openacc-kernels=parloops', OpenACC
!           'kernels' constructs are handled by the 'parloops' pass, en
            bloc.  This is the current default.
  
!      'openacc-privatization'
!           Control whether the '-fopt-info-omp-note' and applicable
!           '-fdump-tree-*-details' options emit OpenACC privatization
!           diagnostics.  With '--param=openacc-privatization=quiet',
            don't diagnose.  This is the current default.  With
!           '--param=openacc-privatization=noisy', do diagnose.
  
       The following choices of NAME are available on AArch64 targets:
  
!      'aarch64-vect-compare-costs'
            When vectorizing, consider using multiple different approaches
            and use the cost model to choose the cheapest one.  This
            includes:
  
!              * Trying both SVE and Advanced SIMD, when SVE is available.
  
!              * Trying to use 64-bit Advanced SIMD vectors for the
                 smallest data elements, rather than using 128-bit vectors
                 for everything.
  
!              * Trying to use "unpacked" SVE vectors for smaller
                 elements.  This includes storing smaller elements in
                 larger containers and accessing elements with extending
                 loads and truncating stores.
  
!      'aarch64-float-recp-precision'
            The number of Newton iterations for calculating the reciprocal
            for float type.  The precision of division is proportional to
            this param when division approximation is enabled.  The
            default value is 1.
  
!      'aarch64-double-recp-precision'
            The number of Newton iterations for calculating the reciprocal
            for double type.  The precision of division is propotional to
            this param when division approximation is enabled.  The
            default value is 2.
  
!      'aarch64-autovec-preference'
            Force an ISA selection strategy for auto-vectorization.
            Accepts values from 0 to 4, inclusive.
!           '0'
                 Use the default heuristics.
!           '1'
                 Use only Advanced SIMD for auto-vectorization.
!           '2'
                 Use only SVE for auto-vectorization.
!           '3'
                 Use both Advanced SIMD and SVE. Prefer Advanced SIMD when
                 the costs are deemed equal.
!           '4'
                 Use both Advanced SIMD and SVE. Prefer SVE when the costs
                 are deemed equal.
            The default value is 0.
  
!      'aarch64-ldp-policy'
            Fine-grained policy for load pairs.  With
!           '--param=aarch64-ldp-policy=default', use the policy of the
            tuning structure.  This is the current default.  With
!           '--param=aarch64-ldp-policy=always', emit ldp regardless of
!           alignment.  With '--param=aarch64-ldp-policy=never', do not
!           emit ldp.  With '--param=aarch64-ldp-policy=aligned', emit ldp
            only if the source pointer is aligned to at least double the
            alignment of the type.
  
!      'aarch64-stp-policy'
            Fine-grained policy for store pairs.  With
!           '--param=aarch64-stp-policy=default', use the policy of the
            tuning structure.  This is the current default.  With
!           '--param=aarch64-stp-policy=always', emit stp regardless of
!           alignment.  With '--param=aarch64-stp-policy=never', do not
!           emit stp.  With '--param=aarch64-stp-policy=aligned', emit stp
            only if the source pointer is aligned to at least double the
            alignment of the type.
  
!      'aarch64-ldp-alias-check-limit'
            Limit on the number of alias checks performed by the AArch64
            load/store pair fusion pass when attempting to form an
            ldp/stp.  Higher values make the pass more aggressive at
            re-ordering loads over stores, at the expense of increased
            compile time.
  
!      'aarch64-ldp-writeback'
            Param to control which writeback opportunities we try to
            handle in the AArch64 load/store pair fusion pass.  A value of
            zero disables writeback handling.  One means we try to form
--- 15337,15624 ----
            loops.  The parameter only has an effect on targets that
            support partial vector loads and stores.
  
!      ‘vect-inner-loop-cost-factor’
            The maximum factor which the loop vectorizer applies to the
            cost of statements in an inner loop relative to the loop being
            vectorized.  The factor applied is the maximum of the
            estimated number of iterations of the inner loop and this
            parameter.  The default value of this parameter is 50.
  
!      ‘vect-induction-float’
            Enable loop vectorization of floating point inductions.
  
!      ‘vrp-sparse-threshold’
            Maximum number of basic blocks before VRP uses a sparse bitmap
            cache.
  
!      ‘vrp-switch-limit’
            Maximum number of outgoing edges in a switch before VRP will
            not process it.
  
!      ‘vrp-vector-threshold’
            Maximum number of basic blocks for VRP to use a basic cache
            vector.
  
!      ‘avoid-fma-max-bits’
            Maximum number of bits for which we avoid creating FMAs.
  
!      ‘fully-pipelined-fma’
            Whether the target fully pipelines FMA instructions.  If
            non-zero, reassociation considers the benefit of parallelizing
            FMA's multiplication part and addition part, assuming FMUL and
            FMA use the same units that can also do FADD.
  
!      ‘sms-loop-average-count-threshold’
            A threshold on the average loop count considered by the swing
            modulo scheduler.
  
!      ‘sms-dfa-history’
            The number of cycles the swing modulo scheduler considers when
            checking conflicts using DFA.
  
!      ‘graphite-allow-codegen-errors’
!           Whether codegen errors should be ICEs when ‘-fchecking’.
  
!      ‘sms-max-ii-factor’
            A factor for tuning the upper bound that swing modulo
            scheduler uses for scheduling a loop.
  
!      ‘lra-max-considered-reload-pseudos’
            The max number of reload pseudos which are considered during
            spilling a non-reload pseudo.
  
!      ‘max-pow-sqrt-depth’
            Maximum depth of sqrt chains to use when synthesizing
            exponentiation by a real constant.
  
!      ‘max-dse-active-local-stores’
            Maximum number of active local stores in RTL dead store
            elimination.
  
!      ‘asan-instrument-allocas’
            Enable asan allocas/VLAs protection.
  
!      ‘max-iterations-computation-cost’
            Bound on the cost of an expression to compute the number of
            iterations.
  
!      ‘max-isl-operations’
            Maximum number of isl operations, 0 means unlimited.
  
!      ‘graphite-max-arrays-per-scop’
            Maximum number of arrays per scop.
  
!      ‘max-vartrack-reverse-op-size’
            Max.  size of loc list for which reverse ops should be added.
  
!      ‘fsm-scale-path-stmts’
            Scale factor to apply to the number of statements in a
            threading path crossing a loop backedge when comparing to
!           ‘--param=max-jump-thread-duplication-stmts’.
  
!      ‘uninit-control-dep-attempts’
            Maximum number of nested calls to search for control
            dependencies during uninitialized variable analysis.
  
!      ‘uninit-max-chain-len’
            Maximum number of predicates anded for each predicate ored in
            the normalized predicate chain.
  
!      ‘uninit-max-num-chains’
            Maximum number of predicates ored in the normalized predicate
            chain.
  
!      ‘sched-autopref-queue-depth’
            Hardware autoprefetcher scheduler model control flag.  Number
            of lookahead cycles the model looks into; at ' ' only enable
            instruction sorting heuristic.
  
!      ‘loop-versioning-max-inner-insns’
            The maximum number of instructions that an inner loop can have
            before the loop versioning pass considers it too big to copy.
  
!      ‘loop-versioning-max-outer-insns’
            The maximum number of instructions that an outer loop can have
            before the loop versioning pass considers it too big to copy,
            discounting any instructions in inner loops that directly
            benefit from versioning.
  
!      ‘ssa-name-def-chain-limit’
            The maximum number of SSA_NAME assignments to follow in
            determining a property of a variable such as its value.  This
            limits the number of iterations or recursive calls GCC
            performs when optimizing certain statements or when
            determining their validity prior to issuing diagnostics.
  
!      ‘store-merging-max-size’
            Maximum size of a single store merging region in bytes.
  
!      ‘hash-table-verification-limit’
            The number of elements for which hash table verification is
            done for each searched element.
  
!      ‘max-find-base-term-values’
            Maximum number of VALUEs handled during a single
            find_base_term call.
  
!      ‘analyzer-max-enodes-per-program-point’
            The maximum number of exploded nodes per program point within
            the analyzer, before terminating analysis of that point.
  
!      ‘analyzer-max-constraints’
            The maximum number of constraints per state.
  
!      ‘analyzer-min-snodes-for-call-summary’
            The minimum number of supernodes within a function for the
            analyzer to consider summarizing its effects at call sites.
  
!      ‘analyzer-max-enodes-for-full-dump’
            The maximum depth of exploded nodes that should appear in a
            dot dump before switching to a less verbose format.
  
!      ‘analyzer-max-recursion-depth’
            The maximum number of times a callsite can appear in a call
            stack within the analyzer, before terminating analysis of a
            call that would recurse deeper.
  
!      ‘analyzer-max-svalue-depth’
            The maximum depth of a symbolic value, before approximating
            the value as unknown.
  
!      ‘analyzer-max-infeasible-edges’
            The maximum number of infeasible edges to reject before
            declaring a diagnostic as infeasible.
  
!      ‘gimple-fe-computed-hot-bb-threshold’
            The number of executions of a basic block which is considered
            hot.  The parameter is used only in GIMPLE FE.
  
!      ‘analyzer-bb-explosion-factor’
            The maximum number of 'after supernode' exploded nodes within
            the analyzer per supernode, before terminating analysis.
  
!      ‘analyzer-text-art-string-ellipsis-threshold’
            The number of bytes at which to ellipsize string literals in
            analyzer text art diagrams.
  
!      ‘analyzer-text-art-ideal-canvas-width’
            The ideal width in characters of text art diagrams generated
            by the analyzer.
  
!      ‘analyzer-text-art-string-ellipsis-head-len’
            The number of literal bytes to show at the head of a string
            literal in text art when ellipsizing it.
  
!      ‘analyzer-text-art-string-ellipsis-tail-len’
            The number of literal bytes to show at the tail of a string
            literal in text art when ellipsizing it.
  
!      ‘ranger-logical-depth’
            Maximum depth of logical expression evaluation ranger will
            look through when evaluating outgoing edge ranges.
  
!      ‘ranger-recompute-depth’
            Maximum depth of instruction chains to consider for
            recomputation in the outgoing range calculator.
  
!      ‘relation-block-limit’
            Maximum number of relations the oracle will register in a
            basic block.
  
!      ‘min-pagesize’
            Minimum page size for warning purposes.
  
!      ‘openacc-kernels’
            Specify mode of OpenACC 'kernels' constructs handling.  With
!           ‘--param=openacc-kernels=decompose’, OpenACC 'kernels'
            constructs are decomposed into parts, a sequence of compute
            constructs, each then handled individually.  This is work in
!           progress.  With ‘--param=openacc-kernels=parloops’, OpenACC
!           'kernels' constructs are handled by the ‘parloops’ pass, en
            bloc.  This is the current default.
  
!      ‘openacc-privatization’
!           Control whether the ‘-fopt-info-omp-note’ and applicable
!           ‘-fdump-tree-*-details’ options emit OpenACC privatization
!           diagnostics.  With ‘--param=openacc-privatization=quiet’,
            don't diagnose.  This is the current default.  With
!           ‘--param=openacc-privatization=noisy’, do diagnose.
  
       The following choices of NAME are available on AArch64 targets:
  
!      ‘aarch64-vect-compare-costs’
            When vectorizing, consider using multiple different approaches
            and use the cost model to choose the cheapest one.  This
            includes:
  
!              • Trying both SVE and Advanced SIMD, when SVE is available.
  
!              • Trying to use 64-bit Advanced SIMD vectors for the
                 smallest data elements, rather than using 128-bit vectors
                 for everything.
  
!              • Trying to use "unpacked" SVE vectors for smaller
                 elements.  This includes storing smaller elements in
                 larger containers and accessing elements with extending
                 loads and truncating stores.
  
!      ‘aarch64-float-recp-precision’
            The number of Newton iterations for calculating the reciprocal
            for float type.  The precision of division is proportional to
            this param when division approximation is enabled.  The
            default value is 1.
  
!      ‘aarch64-double-recp-precision’
            The number of Newton iterations for calculating the reciprocal
            for double type.  The precision of division is propotional to
            this param when division approximation is enabled.  The
            default value is 2.
  
!      ‘aarch64-autovec-preference’
            Force an ISA selection strategy for auto-vectorization.
            Accepts values from 0 to 4, inclusive.
!           ‘0’
                 Use the default heuristics.
!           ‘1’
                 Use only Advanced SIMD for auto-vectorization.
!           ‘2’
                 Use only SVE for auto-vectorization.
!           ‘3’
                 Use both Advanced SIMD and SVE. Prefer Advanced SIMD when
                 the costs are deemed equal.
!           ‘4’
                 Use both Advanced SIMD and SVE. Prefer SVE when the costs
                 are deemed equal.
            The default value is 0.
  
!      ‘aarch64-ldp-policy’
            Fine-grained policy for load pairs.  With
!           ‘--param=aarch64-ldp-policy=default’, use the policy of the
            tuning structure.  This is the current default.  With
!           ‘--param=aarch64-ldp-policy=always’, emit ldp regardless of
!           alignment.  With ‘--param=aarch64-ldp-policy=never’, do not
!           emit ldp.  With ‘--param=aarch64-ldp-policy=aligned’, emit ldp
            only if the source pointer is aligned to at least double the
            alignment of the type.
  
!      ‘aarch64-stp-policy’
            Fine-grained policy for store pairs.  With
!           ‘--param=aarch64-stp-policy=default’, use the policy of the
            tuning structure.  This is the current default.  With
!           ‘--param=aarch64-stp-policy=always’, emit stp regardless of
!           alignment.  With ‘--param=aarch64-stp-policy=never’, do not
!           emit stp.  With ‘--param=aarch64-stp-policy=aligned’, emit stp
            only if the source pointer is aligned to at least double the
            alignment of the type.
  
!      ‘aarch64-ldp-alias-check-limit’
            Limit on the number of alias checks performed by the AArch64
            load/store pair fusion pass when attempting to form an
            ldp/stp.  Higher values make the pass more aggressive at
            re-ordering loads over stores, at the expense of increased
            compile time.
  
!      ‘aarch64-ldp-writeback’
            Param to control which writeback opportunities we try to
            handle in the AArch64 load/store pair fusion pass.  A value of
            zero disables writeback handling.  One means we try to form
*************** includes experimental options that may p
*** 15624,15630 ****
            trailing destructive updates of the base register used by a
            pair.
  
!      'aarch64-loop-vect-issue-rate-niters'
            The tuning for some AArch64 CPUs tries to take both latencies
            and issue rates into account when deciding whether a loop
            should be vectorized using SVE, vectorized using Advanced
--- 15628,15634 ----
            trailing destructive updates of the base register used by a
            pair.
  
!      ‘aarch64-loop-vect-issue-rate-niters’
            The tuning for some AArch64 CPUs tries to take both latencies
            and issue rates into account when deciding whether a loop
            should be vectorized using SVE, vectorized using Advanced
*************** includes experimental options that may p
*** 15632,15638 ****
            N, GCC will not use this heuristic for loops that are known to
            execute in fewer than N Advanced SIMD iterations.
  
!      'aarch64-vect-unroll-limit'
            The vectorizer will use available tuning information to
            determine whether it would be beneficial to unroll the main
            vectorized loop and by how much.  This parameter set's the
--- 15636,15642 ----
            N, GCC will not use this heuristic for loops that are known to
            execute in fewer than N Advanced SIMD iterations.
  
!      ‘aarch64-vect-unroll-limit’
            The vectorizer will use available tuning information to
            determine whether it would be beneficial to unroll the main
            vectorized loop and by how much.  This parameter set's the
*************** includes experimental options that may p
*** 15641,15657 ****
  
       The following choices of NAME are available on GCN targets:
  
!      'gcn-preferred-vectorization-factor'
!           Preferred vectorization factor: 'default', '32', '64'.
  
       The following choices of NAME are available on i386 and x86_64
       targets:
  
!      'x86-stlf-window-ninsns'
            Instructions number above which STFL stall penalty can be
            compensated.
  
!      'x86-stv-max-visits'
            The maximum number of use and def visits when discovering a
            STV chain before the discovery is aborted.
  
--- 15645,15661 ----
  
       The following choices of NAME are available on GCN targets:
  
!      ‘gcn-preferred-vectorization-factor’
!           Preferred vectorization factor: ‘default’, ‘32’, ‘64’.
  
       The following choices of NAME are available on i386 and x86_64
       targets:
  
!      ‘x86-stlf-window-ninsns’
            Instructions number above which STFL stall penalty can be
            compensated.
  
!      ‘x86-stv-max-visits’
            The maximum number of use and def visits when discovering a
            STV chain before the discovery is aborted.
  
*************** hijacking.  There is also a general hook
*** 15673,15691 ****
  other forms of tracing or function-level instrumentation for debug or
  program analysis purposes.
  
! '-p'
! '-pg'
       Generate extra code to write profile information suitable for the
!      analysis program 'prof' (for '-p') or 'gprof' (for '-pg').  You
       must use this option when compiling the source files you want data
       about, and you must also use it when linking.
  
!      You can use the function attribute 'no_instrument_function' to
       suppress profiling of individual functions when compiling with
       these options.  *Note Common Function Attributes::.
  
! '-fprofile-arcs'
!      Add code so that program flow "arcs" are instrumented.  During
       execution the program records how many times each branch and call
       is executed and how many times it is taken or returns.  On targets
       that support constructors with priority support, profiling properly
--- 15677,15695 ----
  other forms of tracing or function-level instrumentation for debug or
  program analysis purposes.
  
! ‘-p’
! ‘-pg’
       Generate extra code to write profile information suitable for the
!      analysis program ‘prof’ (for ‘-p’) or ‘gprof’ (for ‘-pg’).  You
       must use this option when compiling the source files you want data
       about, and you must also use it when linking.
  
!      You can use the function attribute ‘no_instrument_function’ to
       suppress profiling of individual functions when compiling with
       these options.  *Note Common Function Attributes::.
  
! ‘-fprofile-arcs’
!      Add code so that program flow “arcs” are instrumented.  During
       execution the program records how many times each branch and call
       is executed and how many times it is taken or returns.  On targets
       that support constructors with priority support, profiling properly
*************** program analysis purposes.
*** 15694,15766 ****
       variable.
  
       When the compiled program exits it saves this data to a file called
!      'AUXNAME.gcda' for each source file.  The data may be used for
!      profile-directed optimizations ('-fbranch-probabilities'), or for
!      test coverage analysis ('-ftest-coverage').  Each object file's
       AUXNAME is generated from the name of the output file, if
       explicitly specified and it is not the final executable, otherwise
       it is the basename of the source file.  In both cases any suffix is
!      removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
!      'dir/foo.gcda' for output file specified as '-o dir/foo.o').
  
       Note that if a command line directly links source files, the
       corresponding .GCDA files will be prefixed with the unsuffixed name
!      of the output file.  E.g.  'gcc a.c b.c -o binary' would generate
!      'binary-a.gcda' and 'binary-b.gcda' files.
  
! '-fcondition-coverage'
       Add code so that program conditions are instrumented.  During
       execution the program records what terms in a conditional
       contributes to a decision, which can be used to verify that all
       terms in a Boolean function are tested and have an independent
       effect on the outcome of a decision.  The result can be read with
!      'gcov --conditions'.
  
       *Note Cross-profiling::.
  
! '--coverage'
  
       This option is used to compile and link code instrumented for
!      coverage analysis.  The option is a synonym for '-fprofile-arcs'
!      '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
       See the documentation for those options for more details.
  
!         * Compile the source files with '-fprofile-arcs' plus
            optimization and code generation options.  For test coverage
!           analysis, use the additional '-ftest-coverage' option.  You do
            not need to profile every source file in a program.
  
!         * Compile the source files additionally with
!           '-fprofile-abs-path' to create absolute path names in the
!           '.gcno' files.  This allows 'gcov' to find the correct sources
            in projects where compilations occur with different working
            directories.
  
!         * Link your object files with '-lgcov' or '-fprofile-arcs' (the
            latter implies the former).
  
!         * Run the program on a representative workload to generate the
            arc profile information.  This may be repeated any number of
            times.  You can run concurrent instances of your program, and
            provided that the file system supports locking, the data files
            will be correctly updated.  Unless a strict ISO C dialect
!           option is in effect, 'fork' calls are detected and correctly
            handled without double counting.
  
            Moreover, an object file can be recompiled multiple times and
!           the corresponding '.gcda' file merges as long as the source
            file and the compiler options are unchanged.
  
!         * For profile-directed optimizations, compile the source files
            again with the same optimization and code generation options
!           plus '-fbranch-probabilities' (*note Options that Control
            Optimization: Optimize Options.).
  
!         * For test coverage analysis, use 'gcov' to produce human
!           readable information from the '.gcno' and '.gcda' files.
!           Refer to the 'gcov' documentation for further information.
  
!      With '-fprofile-arcs', for each function of your program GCC
       creates a program flow graph, then finds a spanning tree for the
       graph.  Only arcs that are not on the spanning tree have to be
       instrumented: the compiler adds code to count the number of times
--- 15698,15770 ----
       variable.
  
       When the compiled program exits it saves this data to a file called
!      ‘AUXNAME.gcda’ for each source file.  The data may be used for
!      profile-directed optimizations (‘-fbranch-probabilities’), or for
!      test coverage analysis (‘-ftest-coverage’).  Each object file's
       AUXNAME is generated from the name of the output file, if
       explicitly specified and it is not the final executable, otherwise
       it is the basename of the source file.  In both cases any suffix is
!      removed (e.g. ‘foo.gcda’ for input file ‘dir/foo.c’, or
!      ‘dir/foo.gcda’ for output file specified as ‘-o dir/foo.o’).
  
       Note that if a command line directly links source files, the
       corresponding .GCDA files will be prefixed with the unsuffixed name
!      of the output file.  E.g.  ‘gcc a.c b.c -o binary’ would generate
!      ‘binary-a.gcda’ and ‘binary-b.gcda’ files.
  
! ‘-fcondition-coverage’
       Add code so that program conditions are instrumented.  During
       execution the program records what terms in a conditional
       contributes to a decision, which can be used to verify that all
       terms in a Boolean function are tested and have an independent
       effect on the outcome of a decision.  The result can be read with
!      ‘gcov --conditions’.
  
       *Note Cross-profiling::.
  
! ‘--coverage’
  
       This option is used to compile and link code instrumented for
!      coverage analysis.  The option is a synonym for ‘-fprofile-arcs’
!      ‘-ftest-coverage’ (when compiling) and ‘-lgcov’ (when linking).
       See the documentation for those options for more details.
  
!         • Compile the source files with ‘-fprofile-arcs’ plus
            optimization and code generation options.  For test coverage
!           analysis, use the additional ‘-ftest-coverage’ option.  You do
            not need to profile every source file in a program.
  
!         • Compile the source files additionally with
!           ‘-fprofile-abs-path’ to create absolute path names in the
!           ‘.gcno’ files.  This allows ‘gcov’ to find the correct sources
            in projects where compilations occur with different working
            directories.
  
!         • Link your object files with ‘-lgcov’ or ‘-fprofile-arcs’ (the
            latter implies the former).
  
!         • Run the program on a representative workload to generate the
            arc profile information.  This may be repeated any number of
            times.  You can run concurrent instances of your program, and
            provided that the file system supports locking, the data files
            will be correctly updated.  Unless a strict ISO C dialect
!           option is in effect, ‘fork’ calls are detected and correctly
            handled without double counting.
  
            Moreover, an object file can be recompiled multiple times and
!           the corresponding ‘.gcda’ file merges as long as the source
            file and the compiler options are unchanged.
  
!         • For profile-directed optimizations, compile the source files
            again with the same optimization and code generation options
!           plus ‘-fbranch-probabilities’ (*note Options that Control
            Optimization: Optimize Options.).
  
!         • For test coverage analysis, use ‘gcov’ to produce human
!           readable information from the ‘.gcno’ and ‘.gcda’ files.
!           Refer to the ‘gcov’ documentation for further information.
  
!      With ‘-fprofile-arcs’, for each function of your program GCC
       creates a program flow graph, then finds a spanning tree for the
       graph.  Only arcs that are not on the spanning tree have to be
       instrumented: the compiler adds code to count the number of times
*************** program analysis purposes.
*** 15769,15843 ****
       block; otherwise, a new basic block must be created to hold the
       instrumentation code.
  
!      With '-fcondition-coverage', for each conditional in your program
       GCC creates a bitset and records the exercised boolean values that
       have an independent effect on the outcome of that expression.
  
! '-ftest-coverage'
!      Produce a notes file that the 'gcov' code-coverage utility (*note
!      'gcov'--a Test Coverage Program: Gcov.) can use to show program
!      coverage.  Each source file's note file is called 'AUXNAME.gcno'.
!      Refer to the '-fprofile-arcs' option above for a description of
       AUXNAME and instructions on how to generate test coverage data.
       Coverage data matches the source files more closely if you do not
       optimize.
  
! '-fprofile-abs-path'
       Automatically convert relative source file names to absolute path
!      names in the '.gcno' files.  This allows 'gcov' to find the correct
       sources in projects where compilations occur with different working
       directories.
  
! '-fprofile-dir=PATH'
  
       Set the directory to search for the profile data files in to PATH.
       This option affects only the profile data generated by
!      '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
!      by '-fprofile-use' and '-fbranch-probabilities' and its related
       options.  Both absolute and relative paths can be used.  By
       default, GCC uses the current directory as PATH, thus the profile
       data file appears in the same directory as the object file.  In
       order to prevent the file name clashing, if the object file name is
       not an absolute path, we mangle the absolute path of the
!      'SOURCENAME.gcda' file and use it as the file name of a '.gcda'
!      file.  See details about the file naming in '-fprofile-arcs'.  See
!      similar option '-fprofile-note'.
  
       When an executable is run in a massive parallel environment, it is
       recommended to save profile to different folders.  That can be done
       with variables in PATH that are exported during run-time:
  
!      '%p'
            process ID.
  
!      '%q{VAR}'
            value of environment variable VAR
  
! '-fprofile-generate'
! '-fprofile-generate=PATH'
  
       Enable options usually used for instrumenting application to
       produce profile useful for later recompilation with profile
!      feedback based optimization.  You must use '-fprofile-generate'
       both when compiling and when linking your program.
  
!      The following options are enabled: '-fprofile-arcs',
!      '-fprofile-values', '-finline-functions', and '-fipa-bit-cp'.
  
       If PATH is specified, GCC looks at the PATH to find the profile
!      feedback data files.  See '-fprofile-dir'.
  
       To optimize the program based on the collected profile information,
!      use '-fprofile-use'.  *Note Optimize Options::, for more
       information.
  
! '-fprofile-info-section'
! '-fprofile-info-section=NAME'
  
       Register the profile information in the specified section instead
       of using a constructor/destructor.  The section name is NAME if it
!      is specified, otherwise the section name defaults to '.gcov_info'.
!      A pointer to the profile information generated by '-fprofile-arcs'
       is placed in the specified section for each translation unit.  This
       option disables the profile information registration through a
       constructor and it disables the profile information processing
--- 15773,15847 ----
       block; otherwise, a new basic block must be created to hold the
       instrumentation code.
  
!      With ‘-fcondition-coverage’, for each conditional in your program
       GCC creates a bitset and records the exercised boolean values that
       have an independent effect on the outcome of that expression.
  
! ‘-ftest-coverage’
!      Produce a notes file that the ‘gcov’ code-coverage utility (*note
!      ‘gcov’--a Test Coverage Program: Gcov.) can use to show program
!      coverage.  Each source file's note file is called ‘AUXNAME.gcno’.
!      Refer to the ‘-fprofile-arcs’ option above for a description of
       AUXNAME and instructions on how to generate test coverage data.
       Coverage data matches the source files more closely if you do not
       optimize.
  
! ‘-fprofile-abs-path’
       Automatically convert relative source file names to absolute path
!      names in the ‘.gcno’ files.  This allows ‘gcov’ to find the correct
       sources in projects where compilations occur with different working
       directories.
  
! ‘-fprofile-dir=PATH’
  
       Set the directory to search for the profile data files in to PATH.
       This option affects only the profile data generated by
!      ‘-fprofile-generate’, ‘-ftest-coverage’, ‘-fprofile-arcs’ and used
!      by ‘-fprofile-use’ and ‘-fbranch-probabilities’ and its related
       options.  Both absolute and relative paths can be used.  By
       default, GCC uses the current directory as PATH, thus the profile
       data file appears in the same directory as the object file.  In
       order to prevent the file name clashing, if the object file name is
       not an absolute path, we mangle the absolute path of the
!      ‘SOURCENAME.gcda’ file and use it as the file name of a ‘.gcda’
!      file.  See details about the file naming in ‘-fprofile-arcs’.  See
!      similar option ‘-fprofile-note’.
  
       When an executable is run in a massive parallel environment, it is
       recommended to save profile to different folders.  That can be done
       with variables in PATH that are exported during run-time:
  
!      ‘%p’
            process ID.
  
!      ‘%q{VAR}’
            value of environment variable VAR
  
! ‘-fprofile-generate’
! ‘-fprofile-generate=PATH’
  
       Enable options usually used for instrumenting application to
       produce profile useful for later recompilation with profile
!      feedback based optimization.  You must use ‘-fprofile-generate’
       both when compiling and when linking your program.
  
!      The following options are enabled: ‘-fprofile-arcs’,
!      ‘-fprofile-values’, ‘-finline-functions’, and ‘-fipa-bit-cp’.
  
       If PATH is specified, GCC looks at the PATH to find the profile
!      feedback data files.  See ‘-fprofile-dir’.
  
       To optimize the program based on the collected profile information,
!      use ‘-fprofile-use’.  *Note Optimize Options::, for more
       information.
  
! ‘-fprofile-info-section’
! ‘-fprofile-info-section=NAME’
  
       Register the profile information in the specified section instead
       of using a constructor/destructor.  The section name is NAME if it
!      is specified, otherwise the section name defaults to ‘.gcov_info’.
!      A pointer to the profile information generated by ‘-fprofile-arcs’
       is placed in the specified section for each translation unit.  This
       option disables the profile information registration through a
       constructor and it disables the profile information processing
*************** program analysis purposes.
*** 15914,15957 ****
              return 0;
            }
  
!      The 'merge-stream' subcommand of 'gcov-tool' may be used to
       deserialize the data stream generated by the
!      '__gcov_filename_to_gcfn' and '__gcov_info_to_gcda' functions and
!      merge the profile information into '.gcda' files on the host
       filesystem.
  
! '-fprofile-note=PATH'
  
!      If PATH is specified, GCC saves '.gcno' file into PATH location.
!      If you combine the option with multiple source files, the '.gcno'
       file will be overwritten.
  
! '-fprofile-prefix-path=PATH'
  
       This option can be used in combination with
!      'profile-generate='PROFILE_DIR and 'profile-use='PROFILE_DIR to
       inform GCC where is the base directory of built source tree.  By
       default PROFILE_DIR will contain files with mangled absolute paths
       of all object files in the built project.  This is not desirable
       when directory used to build the instrumented binary differs from
       the directory used to build the binary optimized with profile
       feedback because the profile data will not be found during the
!      optimized build.  In such setups '-fprofile-prefix-path='PATH with
       PATH pointing to the base directory of the build can be used to
       strip the irrelevant part of the path and keep all file names
       relative to the main build directory.
  
! '-fprofile-prefix-map=OLD=NEW'
!      When compiling files residing in directory 'OLD', record profiling
!      information (with '--coverage') describing them as if the files
!      resided in directory 'NEW' instead.  See also '-ffile-prefix-map'
!      and '-fcanon-prefix-map'.
  
! '-fprofile-update=METHOD'
  
       Alter the update method for an application instrumented for profile
       feedback based optimization.  The METHOD argument should be one of
!      'single', 'atomic' or 'prefer-atomic'.  The first one is useful for
       single-threaded applications, while the second one prevents profile
       corruption by emitting thread-safe code.
  
--- 15918,15961 ----
              return 0;
            }
  
!      The ‘merge-stream’ subcommand of ‘gcov-tool’ may be used to
       deserialize the data stream generated by the
!      ‘__gcov_filename_to_gcfn’ and ‘__gcov_info_to_gcda’ functions and
!      merge the profile information into ‘.gcda’ files on the host
       filesystem.
  
! ‘-fprofile-note=PATH’
  
!      If PATH is specified, GCC saves ‘.gcno’ file into PATH location.
!      If you combine the option with multiple source files, the ‘.gcno’
       file will be overwritten.
  
! ‘-fprofile-prefix-path=PATH’
  
       This option can be used in combination with
!      ‘profile-generate=’PROFILE_DIR and ‘profile-use=’PROFILE_DIR to
       inform GCC where is the base directory of built source tree.  By
       default PROFILE_DIR will contain files with mangled absolute paths
       of all object files in the built project.  This is not desirable
       when directory used to build the instrumented binary differs from
       the directory used to build the binary optimized with profile
       feedback because the profile data will not be found during the
!      optimized build.  In such setups ‘-fprofile-prefix-path=’PATH with
       PATH pointing to the base directory of the build can be used to
       strip the irrelevant part of the path and keep all file names
       relative to the main build directory.
  
! ‘-fprofile-prefix-map=OLD=NEW’
!      When compiling files residing in directory ‘OLD’, record profiling
!      information (with ‘--coverage’) describing them as if the files
!      resided in directory ‘NEW’ instead.  See also ‘-ffile-prefix-map’
!      and ‘-fcanon-prefix-map’.
  
! ‘-fprofile-update=METHOD’
  
       Alter the update method for an application instrumented for profile
       feedback based optimization.  The METHOD argument should be one of
!      ‘single’, ‘atomic’ or ‘prefer-atomic’.  The first one is useful for
       single-threaded applications, while the second one prevents profile
       corruption by emitting thread-safe code.
  
*************** program analysis purposes.
*** 15959,15977 ****
       (or creates an detached thread), a profile file can be still
       corrupted.
  
!      Using 'prefer-atomic' would be transformed either to 'atomic', when
!      supported by a target, or to 'single' otherwise.  The GCC driver
!      automatically selects 'prefer-atomic' when '-pthread' is present in
!      the command line, otherwise the default method is 'single'.
  
!      If 'atomic' is selected, then the profile information is updated
       using atomic operations on a best-effort basis.  Ideally, the
       profile information is updated through atomic operations in
       hardware.  If the target platform does not support the required
!      atomic operations in hardware, however, 'libatomic' is available,
       then the profile information is updated through calls to
!      'libatomic'.  If the target platform neither supports the required
!      atomic operations in hardware nor 'libatomic', then the profile
       information is not atomically updated and a warning is issued.  In
       this case, the obtained profiling information may be corrupt for
       multi-threaded applications.
--- 15963,15981 ----
       (or creates an detached thread), a profile file can be still
       corrupted.
  
!      Using ‘prefer-atomic’ would be transformed either to ‘atomic’, when
!      supported by a target, or to ‘single’ otherwise.  The GCC driver
!      automatically selects ‘prefer-atomic’ when ‘-pthread’ is present in
!      the command line, otherwise the default method is ‘single’.
  
!      If ‘atomic’ is selected, then the profile information is updated
       using atomic operations on a best-effort basis.  Ideally, the
       profile information is updated through atomic operations in
       hardware.  If the target platform does not support the required
!      atomic operations in hardware, however, ‘libatomic’ is available,
       then the profile information is updated through calls to
!      ‘libatomic’.  If the target platform neither supports the required
!      atomic operations in hardware nor ‘libatomic’, then the profile
       information is not atomically updated and a warning is issued.  In
       this case, the obtained profiling information may be corrupt for
       multi-threaded applications.
*************** program analysis purposes.
*** 15984,16117 ****
       updating a counter, then the profiling information may be in an
       inconsistent state.
  
! '-fprofile-filter-files=REGEX'
  
       Instrument only functions from files whose name matches any of the
       regular expressions (separated by semi-colons).
  
!      For example, '-fprofile-filter-files=main\.c;module.*\.c' will
!      instrument only 'main.c' and all C files starting with 'module'.
  
! '-fprofile-exclude-files=REGEX'
  
       Instrument only functions from files whose name does not match any
       of the regular expressions (separated by semi-colons).
  
!      For example, '-fprofile-exclude-files=/usr/.*' will prevent
!      instrumentation of all files that are located in the '/usr/'
       folder.
  
! '-fprofile-reproducible=[multithreaded|parallel-runs|serial]'
       Control level of reproducibility of profile gathered by
!      '-fprofile-generate'.  This makes it possible to rebuild program
       with same outcome which is useful, for example, for distribution
       packages.
  
!      With '-fprofile-reproducible=serial' the profile gathered by
!      '-fprofile-generate' is reproducible provided the trained program
       behaves the same at each invocation of the train run, it is not
       multi-threaded and profile data streaming is always done in the
       same order.  Note that profile streaming happens at the end of
!      program run but also before 'fork' function is invoked.
  
       Note that it is quite common that execution counts of some part of
       programs depends, for example, on length of temporary file names or
       memory space randomization (that may affect hash-table collision
       rate).  Such non-reproducible part of programs may be annotated by
!      'no_instrument_function' function attribute.  'gcov-dump' with '-l'
       can be used to dump gathered data and verify that they are indeed
       reproducible.
  
!      With '-fprofile-reproducible=parallel-runs' collected profile stays
       reproducible regardless the order of streaming of the data into
       gcda files.  This setting makes it possible to run multiple
!      instances of instrumented program in parallel (such as with 'make
!      -j').  This reduces quality of gathered data, in particular of
       indirect call profiling.
  
! '-fsanitize=address'
       Enable AddressSanitizer, a fast memory error detector.  Memory
       access instructions are instrumented to detect out-of-bounds and
       use-after-free bugs.  The option enables
!      '-fsanitize-address-use-after-scope'.  See
       <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
       more details.  The run-time behavior can be influenced using the
!      'ASAN_OPTIONS' environment variable.  When set to 'help=1', the
       available options are shown at startup of the instrumented program.
       See
       <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
       for a list of supported options.  The option cannot be combined
!      with '-fsanitize=thread' or '-fsanitize=hwaddress'.  Note that the
!      only targets '-fsanitize=hwaddress' is currently supported on are
!      x86-64 (only with '-mlam=u48' or '-mlam=u57' options) and AArch64,
       in both cases only in ABIs with 64-bit pointers.
  
       To get more accurate stack traces, it is possible to use options
!      such as '-O0', '-O1', or '-Og' (which, for instance, prevent most
!      function inlining), '-fno-optimize-sibling-calls' (which prevents
       optimizing sibling and tail recursive calls; this option is
!      implicit for '-O0', '-O1', or '-Og'), or '-fno-ipa-icf' (which
       disables Identical Code Folding for functions).  Since multiple
       runs of the program may yield backtraces with different addresses
       due to ASLR (Address Space Layout Randomization), it may be
       desirable to turn ASLR off.  On Linux, this can be achieved with
!      'setarch `uname -m` -R ./prog'.
  
! '-fsanitize=kernel-address'
       Enable AddressSanitizer for Linux kernel.  See
       <https://github.com/google/kernel-sanitizers> for more details.
  
! '-fsanitize=hwaddress'
       Enable Hardware-assisted AddressSanitizer, which uses a hardware
       ability to ignore the top byte of a pointer to allow the detection
       of memory errors with a low memory overhead.  Memory access
       instructions are instrumented to detect out-of-bounds and
       use-after-free bugs.  The option enables
!      '-fsanitize-address-use-after-scope'.  See
       <https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html>
       for more details.  The run-time behavior can be influenced using
!      the 'HWASAN_OPTIONS' environment variable.  When set to 'help=1',
       the available options are shown at startup of the instrumented
!      program.  The option cannot be combined with '-fsanitize=thread' or
!      '-fsanitize=address', and is currently only available on AArch64.
  
! '-fsanitize=kernel-hwaddress'
       Enable Hardware-assisted AddressSanitizer for compilation of the
!      Linux kernel.  Similar to '-fsanitize=kernel-address' but using an
       alternate instrumentation method, and similar to
!      '-fsanitize=hwaddress' but with instrumentation differences
       necessary for compiling the Linux kernel.  These differences are to
       avoid hwasan library initialization calls and to account for the
       stack pointer having a different value in its top byte.
  
       _Note:_ This option has different defaults to the
!      '-fsanitize=hwaddress'.  Instrumenting the stack and alloca calls
       are not on by default but are still possible by specifying the
!      command-line options '--param hwasan-instrument-stack=1' and
!      '--param hwasan-instrument-allocas=1' respectively.  Using a random
       frame tag is not implemented for kernel instrumentation.
  
! '-fsanitize=pointer-compare'
       Instrument comparison operation (<, <=, >, >=) with pointer
       operands.  The option must be combined with either
!      '-fsanitize=kernel-address' or '-fsanitize=address' The option
!      cannot be combined with '-fsanitize=thread'.  Note: By default the
       check is disabled at run time.  To enable it, add
!      'detect_invalid_pointer_pairs=2' to the environment variable
!      'ASAN_OPTIONS'.  Using 'detect_invalid_pointer_pairs=1' detects
       invalid operation only when both pointers are non-null.
  
! '-fsanitize=pointer-subtract'
       Instrument subtraction with pointer operands.  The option must be
!      combined with either '-fsanitize=kernel-address' or
!      '-fsanitize=address' The option cannot be combined with
!      '-fsanitize=thread'.  Note: By default the check is disabled at run
!      time.  To enable it, add 'detect_invalid_pointer_pairs=2' to the
!      environment variable 'ASAN_OPTIONS'.  Using
!      'detect_invalid_pointer_pairs=1' detects invalid operation only
       when both pointers are non-null.
  
! '-fsanitize=shadow-call-stack'
       Enable ShadowCallStack, a security enhancement mechanism used to
       protect programs against return address overwrites (e.g.  stack
       buffer overflows.)  It works by saving a function's return address
--- 15988,16121 ----
       updating a counter, then the profiling information may be in an
       inconsistent state.
  
! ‘-fprofile-filter-files=REGEX’
  
       Instrument only functions from files whose name matches any of the
       regular expressions (separated by semi-colons).
  
!      For example, ‘-fprofile-filter-files=main\.c;module.*\.c’ will
!      instrument only ‘main.c’ and all C files starting with 'module'.
  
! ‘-fprofile-exclude-files=REGEX’
  
       Instrument only functions from files whose name does not match any
       of the regular expressions (separated by semi-colons).
  
!      For example, ‘-fprofile-exclude-files=/usr/.*’ will prevent
!      instrumentation of all files that are located in the ‘/usr/’
       folder.
  
! ‘-fprofile-reproducible=[multithreaded|parallel-runs|serial]’
       Control level of reproducibility of profile gathered by
!      ‘-fprofile-generate’.  This makes it possible to rebuild program
       with same outcome which is useful, for example, for distribution
       packages.
  
!      With ‘-fprofile-reproducible=serial’ the profile gathered by
!      ‘-fprofile-generate’ is reproducible provided the trained program
       behaves the same at each invocation of the train run, it is not
       multi-threaded and profile data streaming is always done in the
       same order.  Note that profile streaming happens at the end of
!      program run but also before ‘fork’ function is invoked.
  
       Note that it is quite common that execution counts of some part of
       programs depends, for example, on length of temporary file names or
       memory space randomization (that may affect hash-table collision
       rate).  Such non-reproducible part of programs may be annotated by
!      ‘no_instrument_function’ function attribute.  ‘gcov-dump’ with ‘-l’
       can be used to dump gathered data and verify that they are indeed
       reproducible.
  
!      With ‘-fprofile-reproducible=parallel-runs’ collected profile stays
       reproducible regardless the order of streaming of the data into
       gcda files.  This setting makes it possible to run multiple
!      instances of instrumented program in parallel (such as with ‘make
!      -j’).  This reduces quality of gathered data, in particular of
       indirect call profiling.
  
! ‘-fsanitize=address’
       Enable AddressSanitizer, a fast memory error detector.  Memory
       access instructions are instrumented to detect out-of-bounds and
       use-after-free bugs.  The option enables
!      ‘-fsanitize-address-use-after-scope’.  See
       <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
       more details.  The run-time behavior can be influenced using the
!      ‘ASAN_OPTIONS’ environment variable.  When set to ‘help=1’, the
       available options are shown at startup of the instrumented program.
       See
       <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
       for a list of supported options.  The option cannot be combined
!      with ‘-fsanitize=thread’ or ‘-fsanitize=hwaddress’.  Note that the
!      only targets ‘-fsanitize=hwaddress’ is currently supported on are
!      x86-64 (only with ‘-mlam=u48’ or ‘-mlam=u57’ options) and AArch64,
       in both cases only in ABIs with 64-bit pointers.
  
       To get more accurate stack traces, it is possible to use options
!      such as ‘-O0’, ‘-O1’, or ‘-Og’ (which, for instance, prevent most
!      function inlining), ‘-fno-optimize-sibling-calls’ (which prevents
       optimizing sibling and tail recursive calls; this option is
!      implicit for ‘-O0’, ‘-O1’, or ‘-Og’), or ‘-fno-ipa-icf’ (which
       disables Identical Code Folding for functions).  Since multiple
       runs of the program may yield backtraces with different addresses
       due to ASLR (Address Space Layout Randomization), it may be
       desirable to turn ASLR off.  On Linux, this can be achieved with
!      ‘setarch `uname -m` -R ./prog’.
  
! ‘-fsanitize=kernel-address’
       Enable AddressSanitizer for Linux kernel.  See
       <https://github.com/google/kernel-sanitizers> for more details.
  
! ‘-fsanitize=hwaddress’
       Enable Hardware-assisted AddressSanitizer, which uses a hardware
       ability to ignore the top byte of a pointer to allow the detection
       of memory errors with a low memory overhead.  Memory access
       instructions are instrumented to detect out-of-bounds and
       use-after-free bugs.  The option enables
!      ‘-fsanitize-address-use-after-scope’.  See
       <https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html>
       for more details.  The run-time behavior can be influenced using
!      the ‘HWASAN_OPTIONS’ environment variable.  When set to ‘help=1’,
       the available options are shown at startup of the instrumented
!      program.  The option cannot be combined with ‘-fsanitize=thread’ or
!      ‘-fsanitize=address’, and is currently only available on AArch64.
  
! ‘-fsanitize=kernel-hwaddress’
       Enable Hardware-assisted AddressSanitizer for compilation of the
!      Linux kernel.  Similar to ‘-fsanitize=kernel-address’ but using an
       alternate instrumentation method, and similar to
!      ‘-fsanitize=hwaddress’ but with instrumentation differences
       necessary for compiling the Linux kernel.  These differences are to
       avoid hwasan library initialization calls and to account for the
       stack pointer having a different value in its top byte.
  
       _Note:_ This option has different defaults to the
!      ‘-fsanitize=hwaddress’.  Instrumenting the stack and alloca calls
       are not on by default but are still possible by specifying the
!      command-line options ‘--param hwasan-instrument-stack=1’ and
!      ‘--param hwasan-instrument-allocas=1’ respectively.  Using a random
       frame tag is not implemented for kernel instrumentation.
  
! ‘-fsanitize=pointer-compare’
       Instrument comparison operation (<, <=, >, >=) with pointer
       operands.  The option must be combined with either
!      ‘-fsanitize=kernel-address’ or ‘-fsanitize=address’ The option
!      cannot be combined with ‘-fsanitize=thread’.  Note: By default the
       check is disabled at run time.  To enable it, add
!      ‘detect_invalid_pointer_pairs=2’ to the environment variable
!      ‘ASAN_OPTIONS’.  Using ‘detect_invalid_pointer_pairs=1’ detects
       invalid operation only when both pointers are non-null.
  
! ‘-fsanitize=pointer-subtract’
       Instrument subtraction with pointer operands.  The option must be
!      combined with either ‘-fsanitize=kernel-address’ or
!      ‘-fsanitize=address’ The option cannot be combined with
!      ‘-fsanitize=thread’.  Note: By default the check is disabled at run
!      time.  To enable it, add ‘detect_invalid_pointer_pairs=2’ to the
!      environment variable ‘ASAN_OPTIONS’.  Using
!      ‘detect_invalid_pointer_pairs=1’ detects invalid operation only
       when both pointers are non-null.
  
! ‘-fsanitize=shadow-call-stack’
       Enable ShadowCallStack, a security enhancement mechanism used to
       protect programs against return address overwrites (e.g.  stack
       buffer overflows.)  It works by saving a function's return address
*************** program analysis purposes.
*** 16129,16213 ****
       may cause the ABI rules to be broken.
  
       On aarch64, the instrumentation makes use of the platform register
!      'x18'.  This generally means that any code that may run on the same
       thread as code compiled with ShadowCallStack must be compiled with
!      the flag '-ffixed-x18', otherwise functions compiled without
!      '-ffixed-x18' might clobber 'x18' and so corrupt the shadow stack
       pointer.
  
       Also, because there is no userspace runtime support, code compiled
       with ShadowCallStack cannot use exception handling.  Use
!      '-fno-exceptions' to turn off exceptions.
  
       See <https://clang.llvm.org/docs/ShadowCallStack.html> for more
       details.
  
! '-fsanitize=thread'
       Enable ThreadSanitizer, a fast data race detector.  Memory access
       instructions are instrumented to detect data race bugs.  See
       <https://github.com/google/sanitizers/wiki#threadsanitizer> for
       more details.  The run-time behavior can be influenced using the
!      'TSAN_OPTIONS' environment variable; see
       <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
       for a list of supported options.  The option cannot be combined
!      with '-fsanitize=address', '-fsanitize=leak'.
  
       Note that sanitized atomic builtins cannot throw exceptions when
       operating on invalid memory addresses with non-call exceptions
!      ('-fnon-call-exceptions').
  
! '-fsanitize=leak'
       Enable LeakSanitizer, a memory leak detector.  This option only
       matters for linking of executables.  The executable is linked
!      against a library that overrides 'malloc' and other allocator
       functions.  See
       <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
       for more details.  The run-time behavior can be influenced using
!      the 'LSAN_OPTIONS' environment variable.  The option cannot be
!      combined with '-fsanitize=thread'.
  
! '-fsanitize=undefined'
       Enable UndefinedBehaviorSanitizer, a fast undefined behavior
       detector.  Various computations are instrumented to detect
       undefined behavior at runtime.  See
       <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html> for
       more details.  The run-time behavior can be influenced using the
!      'UBSAN_OPTIONS' environment variable.  Current suboptions are:
  
!      '-fsanitize=shift'
            This option enables checking that the result of a shift
            operation is not undefined.  Note that what exactly is
            considered undefined differs slightly between C and C++, as
            well as between ISO C90 and C99, etc.  This option has two
!           suboptions, '-fsanitize=shift-base' and
!           '-fsanitize=shift-exponent'.
  
!      '-fsanitize=shift-exponent'
            This option enables checking that the second argument of a
            shift operation is not negative and is smaller than the
            precision of the promoted first argument.
  
!      '-fsanitize=shift-base'
            If the second argument of a shift operation is within range,
            check that the result of a shift operation is not undefined.
            Note that what exactly is considered undefined differs
            slightly between C and C++, as well as between ISO C90 and
            C99, etc.
  
!      '-fsanitize=integer-divide-by-zero'
            Detect integer division by zero.
  
!      '-fsanitize=unreachable'
            With this option, the compiler turns the
!           '__builtin_unreachable' call into a diagnostics message call
!           instead.  When reaching the '__builtin_unreachable' call, the
            behavior is undefined.
  
!      '-fsanitize=vla-bound'
            This option instructs the compiler to check that the size of a
            variable length array is positive.
  
!      '-fsanitize=null'
            This option enables pointer checking.  Particularly, the
            application built with this option turned on will issue an
            error message when it tries to dereference a NULL pointer, or
--- 16133,16217 ----
       may cause the ABI rules to be broken.
  
       On aarch64, the instrumentation makes use of the platform register
!      ‘x18’.  This generally means that any code that may run on the same
       thread as code compiled with ShadowCallStack must be compiled with
!      the flag ‘-ffixed-x18’, otherwise functions compiled without
!      ‘-ffixed-x18’ might clobber ‘x18’ and so corrupt the shadow stack
       pointer.
  
       Also, because there is no userspace runtime support, code compiled
       with ShadowCallStack cannot use exception handling.  Use
!      ‘-fno-exceptions’ to turn off exceptions.
  
       See <https://clang.llvm.org/docs/ShadowCallStack.html> for more
       details.
  
! ‘-fsanitize=thread’
       Enable ThreadSanitizer, a fast data race detector.  Memory access
       instructions are instrumented to detect data race bugs.  See
       <https://github.com/google/sanitizers/wiki#threadsanitizer> for
       more details.  The run-time behavior can be influenced using the
!      ‘TSAN_OPTIONS’ environment variable; see
       <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
       for a list of supported options.  The option cannot be combined
!      with ‘-fsanitize=address’, ‘-fsanitize=leak’.
  
       Note that sanitized atomic builtins cannot throw exceptions when
       operating on invalid memory addresses with non-call exceptions
!      (‘-fnon-call-exceptions’).
  
! ‘-fsanitize=leak’
       Enable LeakSanitizer, a memory leak detector.  This option only
       matters for linking of executables.  The executable is linked
!      against a library that overrides ‘malloc’ and other allocator
       functions.  See
       <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
       for more details.  The run-time behavior can be influenced using
!      the ‘LSAN_OPTIONS’ environment variable.  The option cannot be
!      combined with ‘-fsanitize=thread’.
  
! ‘-fsanitize=undefined’
       Enable UndefinedBehaviorSanitizer, a fast undefined behavior
       detector.  Various computations are instrumented to detect
       undefined behavior at runtime.  See
       <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html> for
       more details.  The run-time behavior can be influenced using the
!      ‘UBSAN_OPTIONS’ environment variable.  Current suboptions are:
  
!      ‘-fsanitize=shift’
            This option enables checking that the result of a shift
            operation is not undefined.  Note that what exactly is
            considered undefined differs slightly between C and C++, as
            well as between ISO C90 and C99, etc.  This option has two
!           suboptions, ‘-fsanitize=shift-base’ and
!           ‘-fsanitize=shift-exponent’.
  
!      ‘-fsanitize=shift-exponent’
            This option enables checking that the second argument of a
            shift operation is not negative and is smaller than the
            precision of the promoted first argument.
  
!      ‘-fsanitize=shift-base’
            If the second argument of a shift operation is within range,
            check that the result of a shift operation is not undefined.
            Note that what exactly is considered undefined differs
            slightly between C and C++, as well as between ISO C90 and
            C99, etc.
  
!      ‘-fsanitize=integer-divide-by-zero’
            Detect integer division by zero.
  
!      ‘-fsanitize=unreachable’
            With this option, the compiler turns the
!           ‘__builtin_unreachable’ call into a diagnostics message call
!           instead.  When reaching the ‘__builtin_unreachable’ call, the
            behavior is undefined.
  
!      ‘-fsanitize=vla-bound’
            This option instructs the compiler to check that the size of a
            variable length array is positive.
  
!      ‘-fsanitize=null’
            This option enables pointer checking.  Particularly, the
            application built with this option turned on will issue an
            error message when it tries to dereference a NULL pointer, or
*************** program analysis purposes.
*** 16215,16374 ****
            NULL pointer, or if a method is invoked on an object pointed
            by a NULL pointer.
  
!      '-fsanitize=return'
            This option enables return statement checking.  Programs built
            with this option turned on will issue an error message when
            the end of a non-void function is reached without actually
            returning a value.  This option works in C++ only.
  
!      '-fsanitize=signed-integer-overflow'
            This option enables signed integer overflow checking.  We
!           check that the result of '+', '*', and both unary and binary
!           '-' does not overflow in the signed arithmetics.  This also
!           detects 'INT_MIN / -1' signed division.  Note, integer
            promotion rules must be taken into account.  That is, the
            following is not an overflow:
                 signed char a = SCHAR_MAX;
                 a++;
  
!      '-fsanitize=bounds'
            This option enables instrumentation of array bounds.  Various
            out of bounds accesses are detected.  Flexible array members,
            flexible array member-like arrays, and initializers of
            variables with static storage are not instrumented, with the
            exception of flexible array member-like arrays for which
!           '-fstrict-flex-arrays' or '-fstrict-flex-arrays=' options or
!           'strict_flex_array' attributes say they shouldn't be treated
            like flexible array member-like arrays.
  
!      '-fsanitize=bounds-strict'
            This option enables strict instrumentation of array bounds.
            Most out of bounds accesses are detected, including flexible
            array member-like arrays.  Initializers of variables with
            static storage are not instrumented.
  
!      '-fsanitize=alignment'
  
            This option enables checking of alignment of pointers when
            they are dereferenced, or when a reference is bound to
            insufficiently aligned target, or when a method or constructor
            is invoked on insufficiently aligned object.
  
!      '-fsanitize=object-size'
            This option enables instrumentation of memory references using
!           the '__builtin_dynamic_object_size' function.  Various out of
            bounds pointer accesses are detected.
  
!      '-fsanitize=float-divide-by-zero'
            Detect floating-point division by zero.  Unlike other similar
!           options, '-fsanitize=float-divide-by-zero' is not enabled by
!           '-fsanitize=undefined', since floating-point division by zero
            can be a legitimate way of obtaining infinities and NaNs.
  
!      '-fsanitize=float-cast-overflow'
            This option enables floating-point type to integer conversion
            checking.  We check that the result of the conversion does not
            overflow.  Unlike other similar options,
!           '-fsanitize=float-cast-overflow' is not enabled by
!           '-fsanitize=undefined'.  This option does not work well with
!           'FE_INVALID' exceptions enabled.
  
!      '-fsanitize=nonnull-attribute'
  
            This option enables instrumentation of calls, checking whether
            null values are not passed to arguments marked as requiring a
!           non-null value by the 'nonnull' function attribute.
  
!      '-fsanitize=returns-nonnull-attribute'
  
            This option enables instrumentation of return statements in
!           functions marked with 'returns_nonnull' function attribute, to
            detect returning of null values from such functions.
  
!      '-fsanitize=bool'
  
            This option enables instrumentation of loads from bool.  If a
            value other than 0/1 is loaded, a run-time error is issued.
  
!      '-fsanitize=enum'
  
            This option enables instrumentation of loads from an enum
            type.  If a value outside the range of values for the enum
            type is loaded, a run-time error is issued.
  
!      '-fsanitize=vptr'
  
            This option enables instrumentation of C++ member function
            calls, member accesses and some conversions between pointers
            to base and derived classes, to verify the referenced object
            has the correct dynamic type.
  
!      '-fsanitize=pointer-overflow'
  
            This option enables instrumentation of pointer arithmetics.
            If the pointer arithmetics overflows, a run-time error is
            issued.
  
!      '-fsanitize=builtin'
  
            This option enables instrumentation of arguments to selected
            builtin functions.  If an invalid value is passed to such
            arguments, a run-time error is issued.  E.g. passing 0 as the
!           argument to '__builtin_ctz' or '__builtin_clz' invokes
            undefined behavior and is diagnosed by this option.
  
       Note that sanitizers tend to increase the rate of false positive
!      warnings, most notably those around '-Wmaybe-uninitialized'.  We
!      recommend against combining '-Werror' and [the use of] sanitizers.
  
!      While '-ftrapv' causes traps for signed overflows to be emitted,
!      '-fsanitize=undefined' gives a diagnostic message.  This currently
       works only for the C family of languages.
  
! '-fno-sanitize=all'
  
       This option disables all previously enabled sanitizers.
!      '-fsanitize=all' is not allowed, as some sanitizers cannot be used
       together.
  
! '-fasan-shadow-offset=NUMBER'
       This option forces GCC to use custom shadow offset in
       AddressSanitizer checks.  It is useful for experimenting with
       different shadow memory layouts in Kernel AddressSanitizer.
  
! '-fsanitize-sections=S1,S2,...'
       Sanitize global variables in selected user-defined sections.  SI
       may contain wildcards.
  
! '-fsanitize-recover[=OPTS]'
!      '-fsanitize-recover=' controls error recovery mode for sanitizers
       mentioned in comma-separated list of OPTS.  Enabling this option
       for a sanitizer component causes it to attempt to continue running
       the program as if no error happened.  This means multiple runtime
       errors can be reported in a single program run, and the exit code
       of the program may indicate success even when errors have been
!      reported.  The '-fno-sanitize-recover=' option can be used to alter
       this behavior: only the first detected error is reported and
       program then exits with a non-zero exit code.
  
!      Currently this feature only works for '-fsanitize=undefined' (and
!      its suboptions except for '-fsanitize=unreachable' and
!      '-fsanitize=return'), '-fsanitize=float-cast-overflow',
!      '-fsanitize=float-divide-by-zero', '-fsanitize=bounds-strict',
!      '-fsanitize=kernel-address' and '-fsanitize=address'.  For these
       sanitizers error recovery is turned on by default, except
!      '-fsanitize=address', for which this feature is experimental.
!      '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
       accepted, the former enables recovery for all sanitizers that
       support it, the latter disables recovery for all sanitizers that
       support it.
  
       Even if a recovery mode is turned on the compiler side, it needs to
       be also enabled on the runtime library side, otherwise the failures
!      are still fatal.  The runtime library defaults to 'halt_on_error=0'
       for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
!      value for AddressSanitizer is 'halt_on_error=1'.  This can be
!      overridden through setting the 'halt_on_error' flag in the
       corresponding environment variable.
  
       Syntax without an explicit OPTS parameter is deprecated.  It is
--- 16219,16378 ----
            NULL pointer, or if a method is invoked on an object pointed
            by a NULL pointer.
  
!      ‘-fsanitize=return’
            This option enables return statement checking.  Programs built
            with this option turned on will issue an error message when
            the end of a non-void function is reached without actually
            returning a value.  This option works in C++ only.
  
!      ‘-fsanitize=signed-integer-overflow’
            This option enables signed integer overflow checking.  We
!           check that the result of ‘+’, ‘*’, and both unary and binary
!           ‘-’ does not overflow in the signed arithmetics.  This also
!           detects ‘INT_MIN / -1’ signed division.  Note, integer
            promotion rules must be taken into account.  That is, the
            following is not an overflow:
                 signed char a = SCHAR_MAX;
                 a++;
  
!      ‘-fsanitize=bounds’
            This option enables instrumentation of array bounds.  Various
            out of bounds accesses are detected.  Flexible array members,
            flexible array member-like arrays, and initializers of
            variables with static storage are not instrumented, with the
            exception of flexible array member-like arrays for which
!           ‘-fstrict-flex-arrays’ or ‘-fstrict-flex-arrays=’ options or
!           ‘strict_flex_array’ attributes say they shouldn't be treated
            like flexible array member-like arrays.
  
!      ‘-fsanitize=bounds-strict’
            This option enables strict instrumentation of array bounds.
            Most out of bounds accesses are detected, including flexible
            array member-like arrays.  Initializers of variables with
            static storage are not instrumented.
  
!      ‘-fsanitize=alignment’
  
            This option enables checking of alignment of pointers when
            they are dereferenced, or when a reference is bound to
            insufficiently aligned target, or when a method or constructor
            is invoked on insufficiently aligned object.
  
!      ‘-fsanitize=object-size’
            This option enables instrumentation of memory references using
!           the ‘__builtin_dynamic_object_size’ function.  Various out of
            bounds pointer accesses are detected.
  
!      ‘-fsanitize=float-divide-by-zero’
            Detect floating-point division by zero.  Unlike other similar
!           options, ‘-fsanitize=float-divide-by-zero’ is not enabled by
!           ‘-fsanitize=undefined’, since floating-point division by zero
            can be a legitimate way of obtaining infinities and NaNs.
  
!      ‘-fsanitize=float-cast-overflow’
            This option enables floating-point type to integer conversion
            checking.  We check that the result of the conversion does not
            overflow.  Unlike other similar options,
!           ‘-fsanitize=float-cast-overflow’ is not enabled by
!           ‘-fsanitize=undefined’.  This option does not work well with
!           ‘FE_INVALID’ exceptions enabled.
  
!      ‘-fsanitize=nonnull-attribute’
  
            This option enables instrumentation of calls, checking whether
            null values are not passed to arguments marked as requiring a
!           non-null value by the ‘nonnull’ function attribute.
  
!      ‘-fsanitize=returns-nonnull-attribute’
  
            This option enables instrumentation of return statements in
!           functions marked with ‘returns_nonnull’ function attribute, to
            detect returning of null values from such functions.
  
!      ‘-fsanitize=bool’
  
            This option enables instrumentation of loads from bool.  If a
            value other than 0/1 is loaded, a run-time error is issued.
  
!      ‘-fsanitize=enum’
  
            This option enables instrumentation of loads from an enum
            type.  If a value outside the range of values for the enum
            type is loaded, a run-time error is issued.
  
!      ‘-fsanitize=vptr’
  
            This option enables instrumentation of C++ member function
            calls, member accesses and some conversions between pointers
            to base and derived classes, to verify the referenced object
            has the correct dynamic type.
  
!      ‘-fsanitize=pointer-overflow’
  
            This option enables instrumentation of pointer arithmetics.
            If the pointer arithmetics overflows, a run-time error is
            issued.
  
!      ‘-fsanitize=builtin’
  
            This option enables instrumentation of arguments to selected
            builtin functions.  If an invalid value is passed to such
            arguments, a run-time error is issued.  E.g. passing 0 as the
!           argument to ‘__builtin_ctz’ or ‘__builtin_clz’ invokes
            undefined behavior and is diagnosed by this option.
  
       Note that sanitizers tend to increase the rate of false positive
!      warnings, most notably those around ‘-Wmaybe-uninitialized’.  We
!      recommend against combining ‘-Werror’ and [the use of] sanitizers.
  
!      While ‘-ftrapv’ causes traps for signed overflows to be emitted,
!      ‘-fsanitize=undefined’ gives a diagnostic message.  This currently
       works only for the C family of languages.
  
! ‘-fno-sanitize=all’
  
       This option disables all previously enabled sanitizers.
!      ‘-fsanitize=all’ is not allowed, as some sanitizers cannot be used
       together.
  
! ‘-fasan-shadow-offset=NUMBER’
       This option forces GCC to use custom shadow offset in
       AddressSanitizer checks.  It is useful for experimenting with
       different shadow memory layouts in Kernel AddressSanitizer.
  
! ‘-fsanitize-sections=S1,S2,...’
       Sanitize global variables in selected user-defined sections.  SI
       may contain wildcards.
  
! ‘-fsanitize-recover[=OPTS]’
!      ‘-fsanitize-recover=’ controls error recovery mode for sanitizers
       mentioned in comma-separated list of OPTS.  Enabling this option
       for a sanitizer component causes it to attempt to continue running
       the program as if no error happened.  This means multiple runtime
       errors can be reported in a single program run, and the exit code
       of the program may indicate success even when errors have been
!      reported.  The ‘-fno-sanitize-recover=’ option can be used to alter
       this behavior: only the first detected error is reported and
       program then exits with a non-zero exit code.
  
!      Currently this feature only works for ‘-fsanitize=undefined’ (and
!      its suboptions except for ‘-fsanitize=unreachable’ and
!      ‘-fsanitize=return’), ‘-fsanitize=float-cast-overflow’,
!      ‘-fsanitize=float-divide-by-zero’, ‘-fsanitize=bounds-strict’,
!      ‘-fsanitize=kernel-address’ and ‘-fsanitize=address’.  For these
       sanitizers error recovery is turned on by default, except
!      ‘-fsanitize=address’, for which this feature is experimental.
!      ‘-fsanitize-recover=all’ and ‘-fno-sanitize-recover=all’ is also
       accepted, the former enables recovery for all sanitizers that
       support it, the latter disables recovery for all sanitizers that
       support it.
  
       Even if a recovery mode is turned on the compiler side, it needs to
       be also enabled on the runtime library side, otherwise the failures
!      are still fatal.  The runtime library defaults to ‘halt_on_error=0’
       for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
!      value for AddressSanitizer is ‘halt_on_error=1’.  This can be
!      overridden through setting the ‘halt_on_error’ flag in the
       corresponding environment variable.
  
       Syntax without an explicit OPTS parameter is deprecated.  It is
*************** program analysis purposes.
*** 16376,16432 ****
  
            undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
  
! '-fsanitize-address-use-after-scope'
       Enable sanitization of local variables to detect use-after-scope
!      bugs.  The option sets '-fstack-reuse' to 'none'.
  
! '-fsanitize-trap[=OPTS]'
!      The '-fsanitize-trap=' option instructs the compiler to report for
       sanitizers mentioned in comma-separated list of OPTS undefined
!      behavior using '__builtin_trap' rather than a 'libubsan' library
       routine.  If this option is enabled for certain sanitizer, it takes
!      precedence over the '-fsanitizer-recover=' for that sanitizer,
!      '__builtin_trap' will be emitted and be fatal regardless of whether
!      recovery is enabled or disabled using '-fsanitize-recover='.
  
!      The advantage of this is that the 'libubsan' library is not needed
       and is not linked in, so this is usable even in freestanding
       environments.
  
!      Currently this feature works with '-fsanitize=undefined' (and its
!      suboptions except for '-fsanitize=vptr'),
!      '-fsanitize=float-cast-overflow', '-fsanitize=float-divide-by-zero'
!      and '-fsanitize=bounds-strict'.  '-fsanitize-trap=all' can be also
!      specified, which enables it for 'undefined' suboptions,
!      '-fsanitize=float-cast-overflow', '-fsanitize=float-divide-by-zero'
!      and '-fsanitize=bounds-strict'.  If '-fsanitize-trap=undefined' or
!      '-fsanitize-trap=all' is used and '-fsanitize=vptr' is enabled on
       the command line, the instrumentation is silently ignored as the
!      instrumentation always needs 'libubsan' support,
!      '-fsanitize-trap=vptr' is not allowed.
  
! '-fsanitize-undefined-trap-on-error'
!      The '-fsanitize-undefined-trap-on-error' option is deprecated
!      equivalent of '-fsanitize-trap=all'.
  
! '-fsanitize-coverage=trace-pc'
       Enable coverage-guided fuzzing code instrumentation.  Inserts a
!      call to '__sanitizer_cov_trace_pc' into every basic block.
  
! '-fsanitize-coverage=trace-cmp'
       Enable dataflow guided fuzzing code instrumentation.  Inserts a
!      call to '__sanitizer_cov_trace_cmp1', '__sanitizer_cov_trace_cmp2',
!      '__sanitizer_cov_trace_cmp4' or '__sanitizer_cov_trace_cmp8' for
       integral comparison with both operands variable or
!      '__sanitizer_cov_trace_const_cmp1',
!      '__sanitizer_cov_trace_const_cmp2',
!      '__sanitizer_cov_trace_const_cmp4' or
!      '__sanitizer_cov_trace_const_cmp8' for integral comparison with one
!      operand constant, '__sanitizer_cov_trace_cmpf' or
!      '__sanitizer_cov_trace_cmpd' for float or double comparisons and
!      '__sanitizer_cov_trace_switch' for switch statements.
  
! '-fcf-protection=[full|branch|return|none|check]'
       Enable code instrumentation of control-flow transfers to increase
       program security by checking that target addresses of control-flow
       transfer instructions (such as indirect function call, function
--- 16380,16436 ----
  
            undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
  
! ‘-fsanitize-address-use-after-scope’
       Enable sanitization of local variables to detect use-after-scope
!      bugs.  The option sets ‘-fstack-reuse’ to ‘none’.
  
! ‘-fsanitize-trap[=OPTS]’
!      The ‘-fsanitize-trap=’ option instructs the compiler to report for
       sanitizers mentioned in comma-separated list of OPTS undefined
!      behavior using ‘__builtin_trap’ rather than a ‘libubsan’ library
       routine.  If this option is enabled for certain sanitizer, it takes
!      precedence over the ‘-fsanitizer-recover=’ for that sanitizer,
!      ‘__builtin_trap’ will be emitted and be fatal regardless of whether
!      recovery is enabled or disabled using ‘-fsanitize-recover=’.
  
!      The advantage of this is that the ‘libubsan’ library is not needed
       and is not linked in, so this is usable even in freestanding
       environments.
  
!      Currently this feature works with ‘-fsanitize=undefined’ (and its
!      suboptions except for ‘-fsanitize=vptr’),
!      ‘-fsanitize=float-cast-overflow’, ‘-fsanitize=float-divide-by-zero’
!      and ‘-fsanitize=bounds-strict’.  ‘-fsanitize-trap=all’ can be also
!      specified, which enables it for ‘undefined’ suboptions,
!      ‘-fsanitize=float-cast-overflow’, ‘-fsanitize=float-divide-by-zero’
!      and ‘-fsanitize=bounds-strict’.  If ‘-fsanitize-trap=undefined’ or
!      ‘-fsanitize-trap=all’ is used and ‘-fsanitize=vptr’ is enabled on
       the command line, the instrumentation is silently ignored as the
!      instrumentation always needs ‘libubsan’ support,
!      ‘-fsanitize-trap=vptr’ is not allowed.
  
! ‘-fsanitize-undefined-trap-on-error’
!      The ‘-fsanitize-undefined-trap-on-error’ option is deprecated
!      equivalent of ‘-fsanitize-trap=all’.
  
! ‘-fsanitize-coverage=trace-pc’
       Enable coverage-guided fuzzing code instrumentation.  Inserts a
!      call to ‘__sanitizer_cov_trace_pc’ into every basic block.
  
! ‘-fsanitize-coverage=trace-cmp’
       Enable dataflow guided fuzzing code instrumentation.  Inserts a
!      call to ‘__sanitizer_cov_trace_cmp1’, ‘__sanitizer_cov_trace_cmp2’,
!      ‘__sanitizer_cov_trace_cmp4’ or ‘__sanitizer_cov_trace_cmp8’ for
       integral comparison with both operands variable or
!      ‘__sanitizer_cov_trace_const_cmp1’,
!      ‘__sanitizer_cov_trace_const_cmp2’,
!      ‘__sanitizer_cov_trace_const_cmp4’ or
!      ‘__sanitizer_cov_trace_const_cmp8’ for integral comparison with one
!      operand constant, ‘__sanitizer_cov_trace_cmpf’ or
!      ‘__sanitizer_cov_trace_cmpd’ for float or double comparisons and
!      ‘__sanitizer_cov_trace_switch’ for switch statements.
  
! ‘-fcf-protection=[full|branch|return|none|check]’
       Enable code instrumentation of control-flow transfers to increase
       program security by checking that target addresses of control-flow
       transfer instructions (such as indirect function call, function
*************** program analysis purposes.
*** 16435,16460 ****
       against such threats as Return-oriented Programming (ROP), and
       similarly call/jmp-oriented programming (COP/JOP).
  
!      The value 'branch' tells the compiler to implement checking of
       validity of control-flow transfer at the point of indirect branch
!      instructions, i.e. call/jmp instructions.  The value 'return'
       implements checking of validity at the point of returning from a
!      function.  The value 'full' is an alias for specifying both
!      'branch' and 'return'.  The value 'none' turns off instrumentation.
  
!      To override '-fcf-protection', '-fcf-protection=none' needs to be
!      added and then with '-fcf-protection=xxx'.
  
!      The value 'check' is used for the final link with link-time
       optimization (LTO). An error is issued if LTO object files are
!      compiled with different '-fcf-protection' values.  The value
!      'check' is ignored at the compile time.
  
!      The macro '__CET__' is defined when '-fcf-protection' is used.  The
!      first bit of '__CET__' is set to 1 for the value 'branch' and the
!      second bit of '__CET__' is set to 1 for the 'return'.
  
!      You can also use the 'nocf_check' attribute to identify which
       functions and calls should be skipped from instrumentation (*note
       Function Attributes::).
  
--- 16439,16464 ----
       against such threats as Return-oriented Programming (ROP), and
       similarly call/jmp-oriented programming (COP/JOP).
  
!      The value ‘branch’ tells the compiler to implement checking of
       validity of control-flow transfer at the point of indirect branch
!      instructions, i.e. call/jmp instructions.  The value ‘return’
       implements checking of validity at the point of returning from a
!      function.  The value ‘full’ is an alias for specifying both
!      ‘branch’ and ‘return’.  The value ‘none’ turns off instrumentation.
  
!      To override ‘-fcf-protection’, ‘-fcf-protection=none’ needs to be
!      added and then with ‘-fcf-protection=xxx’.
  
!      The value ‘check’ is used for the final link with link-time
       optimization (LTO). An error is issued if LTO object files are
!      compiled with different ‘-fcf-protection’ values.  The value
!      ‘check’ is ignored at the compile time.
  
!      The macro ‘__CET__’ is defined when ‘-fcf-protection’ is used.  The
!      first bit of ‘__CET__’ is set to 1 for the value ‘branch’ and the
!      second bit of ‘__CET__’ is set to 1 for the ‘return’.
  
!      You can also use the ‘nocf_check’ attribute to identify which
       functions and calls should be skipped from instrumentation (*note
       Function Attributes::).
  
*************** program analysis purposes.
*** 16462,16494 ****
       on Intel Control-flow Enforcement Technology (CET) which works for
       i686 processor or newer.
  
! '-fharden-compares'
       For every logical test that survives gimple optimizations and is
       _not_ the condition in a conditional branch (for example,
       conditions tested for conditional moves, or to store in boolean
       variables), emit extra code to compute and verify the reversed
!      condition, and to call '__builtin_trap' if the results do not
!      match.  Use with '-fharden-conditional-branches' to cover all
       conditionals.
  
! '-fharden-conditional-branches'
       For every non-vectorized conditional branch that survives gimple
       optimizations, emit extra code to compute and verify the reversed
!      condition, and to call '__builtin_trap' if the result is
!      unexpected.  Use with '-fharden-compares' to cover all
       conditionals.
  
! '-fharden-control-flow-redundancy'
       Emit extra code to set booleans when entering basic blocks, and to
       verify and trap, at function exits, when the booleans do not form
       an execution path that is compatible with the control flow graph.
  
       Verification takes place before returns, before mandatory tail
       calls (see below) and, optionally, before escaping exceptions with
!      '-fhardcfr-check-exceptions', before returning calls with
!      '-fhardcfr-check-returning-calls', and before noreturn calls with
!      '-fhardcfr-check-noreturn-calls').  Tuning options '--param
!      hardcfr-max-blocks' and '--param hardcfr-max-inline-blocks' are
       available.
  
       Tail call optimization takes place too late to affect control flow
--- 16466,16498 ----
       on Intel Control-flow Enforcement Technology (CET) which works for
       i686 processor or newer.
  
! ‘-fharden-compares’
       For every logical test that survives gimple optimizations and is
       _not_ the condition in a conditional branch (for example,
       conditions tested for conditional moves, or to store in boolean
       variables), emit extra code to compute and verify the reversed
!      condition, and to call ‘__builtin_trap’ if the results do not
!      match.  Use with ‘-fharden-conditional-branches’ to cover all
       conditionals.
  
! ‘-fharden-conditional-branches’
       For every non-vectorized conditional branch that survives gimple
       optimizations, emit extra code to compute and verify the reversed
!      condition, and to call ‘__builtin_trap’ if the result is
!      unexpected.  Use with ‘-fharden-compares’ to cover all
       conditionals.
  
! ‘-fharden-control-flow-redundancy’
       Emit extra code to set booleans when entering basic blocks, and to
       verify and trap, at function exits, when the booleans do not form
       an execution path that is compatible with the control flow graph.
  
       Verification takes place before returns, before mandatory tail
       calls (see below) and, optionally, before escaping exceptions with
!      ‘-fhardcfr-check-exceptions’, before returning calls with
!      ‘-fhardcfr-check-returning-calls’, and before noreturn calls with
!      ‘-fhardcfr-check-noreturn-calls’).  Tuning options ‘--param
!      hardcfr-max-blocks’ and ‘--param hardcfr-max-inline-blocks’ are
       available.
  
       Tail call optimization takes place too late to affect control flow
*************** program analysis purposes.
*** 16498,16559 ****
       these possibilities are merely theoretical, as these conditions can
       only be met when using custom compiler plugins.
  
! '-fhardcfr-skip-leaf'
!      Disable '-fharden-control-flow-redundancy' in leaf functions.
  
! '-fhardcfr-check-exceptions'
!      When '-fharden-control-flow-redundancy' is active, check the
       recorded execution path against the control flow graph at exception
       escape points, as if the function body was wrapped with a cleanup
       handler that performed the check and reraised.  This option is
!      enabled by default; use '-fno-hardcfr-check-exceptions' to disable
       it.
  
! '-fhardcfr-check-returning-calls'
!      When '-fharden-control-flow-redundancy' is active, check the
       recorded execution path against the control flow graph before any
       function call immediately followed by a return of its result, if
       any, so as to not prevent tail-call optimization, whether or not it
       is ultimately optimized to a tail call.
  
       This option is enabled by default whenever sibling call
!      optimizations are enabled (see '-foptimize-sibling-calls'), but it
       can be enabled (or disabled, using its negated form) explicitly,
       regardless of the optimizations.
  
! '-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]'
!      When '-fharden-control-flow-redundancy' is active, check the
       recorded execution path against the control flow graph before
!      'noreturn' calls, either all of them ('always'), those that aren't
       expected to return control to the caller through an exception
!      ('no-xthrow', the default), those that may not return control to
!      the caller through an exception either ('nothrow'), or none of them
!      ('never').
  
!      Checking before a 'noreturn' function that may return control to
       the caller through an exception may cause checking to be performed
       more than once, if the exception is caught in the caller, whether
!      by a handler or a cleanup.  When '-fhardcfr-check-exceptions' is
!      also enabled, the compiler will avoid associating a 'noreturn' call
       with the implicitly-added cleanup handler, since it would be
       redundant with the check performed before the call, but other
       handlers or cleanups in the function, if activated, will modify the
       recorded execution path and check it again when another checkpoint
!      is hit.  The checkpoint may even be another 'noreturn' call, so
       checking may end up performed multiple times.
  
!      Various optimizers may cause calls to be marked as 'noreturn'
!      and/or 'nothrow', even in the absence of the corresponding
       attributes, which may affect the placement of checks before calls,
       as well as the addition of implicit cleanup handlers for them.
       This unpredictability, and the fact that raising and reraising
!      exceptions frequently amounts to implicitly calling 'noreturn'
!      functions, have made 'no-xthrow' the default setting for this
!      option: it excludes from the 'noreturn' treatment only internal
       functions used to (re)raise exceptions, that are not affected by
       these optimizations.
  
! '-fhardened'
       Enable a set of flags for C and C++ that improve the security of
       the generated code without affecting its ABI. The precise flags
       enabled may change between major releases of GCC, but are
--- 16502,16563 ----
       these possibilities are merely theoretical, as these conditions can
       only be met when using custom compiler plugins.
  
! ‘-fhardcfr-skip-leaf’
!      Disable ‘-fharden-control-flow-redundancy’ in leaf functions.
  
! ‘-fhardcfr-check-exceptions’
!      When ‘-fharden-control-flow-redundancy’ is active, check the
       recorded execution path against the control flow graph at exception
       escape points, as if the function body was wrapped with a cleanup
       handler that performed the check and reraised.  This option is
!      enabled by default; use ‘-fno-hardcfr-check-exceptions’ to disable
       it.
  
! ‘-fhardcfr-check-returning-calls’
!      When ‘-fharden-control-flow-redundancy’ is active, check the
       recorded execution path against the control flow graph before any
       function call immediately followed by a return of its result, if
       any, so as to not prevent tail-call optimization, whether or not it
       is ultimately optimized to a tail call.
  
       This option is enabled by default whenever sibling call
!      optimizations are enabled (see ‘-foptimize-sibling-calls’), but it
       can be enabled (or disabled, using its negated form) explicitly,
       regardless of the optimizations.
  
! ‘-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]’
!      When ‘-fharden-control-flow-redundancy’ is active, check the
       recorded execution path against the control flow graph before
!      ‘noreturn’ calls, either all of them (‘always’), those that aren't
       expected to return control to the caller through an exception
!      (‘no-xthrow’, the default), those that may not return control to
!      the caller through an exception either (‘nothrow’), or none of them
!      (‘never’).
  
!      Checking before a ‘noreturn’ function that may return control to
       the caller through an exception may cause checking to be performed
       more than once, if the exception is caught in the caller, whether
!      by a handler or a cleanup.  When ‘-fhardcfr-check-exceptions’ is
!      also enabled, the compiler will avoid associating a ‘noreturn’ call
       with the implicitly-added cleanup handler, since it would be
       redundant with the check performed before the call, but other
       handlers or cleanups in the function, if activated, will modify the
       recorded execution path and check it again when another checkpoint
!      is hit.  The checkpoint may even be another ‘noreturn’ call, so
       checking may end up performed multiple times.
  
!      Various optimizers may cause calls to be marked as ‘noreturn’
!      and/or ‘nothrow’, even in the absence of the corresponding
       attributes, which may affect the placement of checks before calls,
       as well as the addition of implicit cleanup handlers for them.
       This unpredictability, and the fact that raising and reraising
!      exceptions frequently amounts to implicitly calling ‘noreturn’
!      functions, have made ‘no-xthrow’ the default setting for this
!      option: it excludes from the ‘noreturn’ treatment only internal
       functions used to (re)raise exceptions, that are not affected by
       these optimizations.
  
! ‘-fhardened’
       Enable a set of flags for C and C++ that improve the security of
       the generated code without affecting its ABI. The precise flags
       enabled may change between major releases of GCC, but are
*************** program analysis purposes.
*** 16568,16615 ****
            -fcf-protection=full (x86 GNU/Linux only)
  
  
!      The list of options enabled by '-fhardened' can be generated using
!      the '--help=hardened' option.
  
!      When the system glibc is older than 2.35, '-D_FORTIFY_SOURCE=2' is
       used instead.
  
       This option is intended to be used in production builds, not merely
       in debug builds.
  
!      Currently, '-fhardened' is only supported on GNU/Linux targets.
  
!      '-fhardened' only enables a particular option if it wasn't already
!      specified anywhere on the command line.  For instance, '-fhardened'
!      '-fstack-protector' will only enable '-fstack-protector', but not
!      '-fstack-protector-strong'.
  
! '-fstack-protector'
       Emit extra code to check for buffer overflows, such as stack
       smashing attacks.  This is done by adding a guard variable to
       functions with vulnerable objects.  This includes functions that
!      call 'alloca', and functions with buffers larger than or equal to 8
       bytes.  The guards are initialized when a function is entered and
       then checked when the function exits.  If a guard check fails, an
       error message is printed and the program exits.  Only variables
       that are actually allocated on the stack are considered, optimized
       away variables or variables allocated in registers don't count.
  
! '-fstack-protector-all'
!      Like '-fstack-protector' except that all functions are protected.
  
! '-fstack-protector-strong'
!      Like '-fstack-protector' but includes additional functions to be
       protected -- those that have local array definitions, or have
       references to local frame addresses.  Only variables that are
       actually allocated on the stack are considered, optimized away
       variables or variables allocated in registers don't count.
  
! '-fstack-protector-explicit'
!      Like '-fstack-protector' but only protects those functions which
!      have the 'stack_protect' attribute.
  
! '-fstack-check'
       Generate code to verify that you do not go beyond the boundary of
       the stack.  You should specify this flag if you are running in an
       environment with multiple threads, but you only rarely need to
--- 16572,16619 ----
            -fcf-protection=full (x86 GNU/Linux only)
  
  
!      The list of options enabled by ‘-fhardened’ can be generated using
!      the ‘--help=hardened’ option.
  
!      When the system glibc is older than 2.35, ‘-D_FORTIFY_SOURCE=2’ is
       used instead.
  
       This option is intended to be used in production builds, not merely
       in debug builds.
  
!      Currently, ‘-fhardened’ is only supported on GNU/Linux targets.
  
!      ‘-fhardened’ only enables a particular option if it wasn't already
!      specified anywhere on the command line.  For instance, ‘-fhardened’
!      ‘-fstack-protector’ will only enable ‘-fstack-protector’, but not
!      ‘-fstack-protector-strong’.
  
! ‘-fstack-protector’
       Emit extra code to check for buffer overflows, such as stack
       smashing attacks.  This is done by adding a guard variable to
       functions with vulnerable objects.  This includes functions that
!      call ‘alloca’, and functions with buffers larger than or equal to 8
       bytes.  The guards are initialized when a function is entered and
       then checked when the function exits.  If a guard check fails, an
       error message is printed and the program exits.  Only variables
       that are actually allocated on the stack are considered, optimized
       away variables or variables allocated in registers don't count.
  
! ‘-fstack-protector-all’
!      Like ‘-fstack-protector’ except that all functions are protected.
  
! ‘-fstack-protector-strong’
!      Like ‘-fstack-protector’ but includes additional functions to be
       protected -- those that have local array definitions, or have
       references to local frame addresses.  Only variables that are
       actually allocated on the stack are considered, optimized away
       variables or variables allocated in registers don't count.
  
! ‘-fstack-protector-explicit’
!      Like ‘-fstack-protector’ but only protects those functions which
!      have the ‘stack_protect’ attribute.
  
! ‘-fstack-check’
       Generate code to verify that you do not go beyond the boundary of
       the stack.  You should specify this flag if you are running in an
       environment with multiple threads, but you only rarely need to
*************** program analysis purposes.
*** 16622,16631 ****
       switch causes generation of code to ensure that they see the stack
       being extended.
  
!      You can additionally specify a string parameter: 'no' means no
!      checking, 'generic' means force the use of old-style checking,
!      'specific' means use the best checking method and is equivalent to
!      bare '-fstack-check'.
  
       Old-style checking is a generic mechanism that requires no specific
       target support in the compiler but comes with the following
--- 16626,16635 ----
       switch causes generation of code to ensure that they see the stack
       being extended.
  
!      You can additionally specify a string parameter: ‘no’ means no
!      checking, ‘generic’ means force the use of old-style checking,
!      ‘specific’ means use the best checking method and is equivalent to
!      bare ‘-fstack-check’.
  
       Old-style checking is a generic mechanism that requires no specific
       target support in the compiler but comes with the following
*************** program analysis purposes.
*** 16643,16657 ****
            and the generic implementation, code performance is hampered.
  
       Note that old-style stack checking is also the fallback method for
!      'specific' if no target support has been added in the compiler.
  
!      '-fstack-check=' is designed for Ada's needs to detect infinite
!      recursion and stack overflows.  'specific' is an excellent choice
       when compiling Ada code.  It is not generally sufficient to protect
       against stack-clash attacks.  To protect against those you want
!      '-fstack-clash-protection'.
  
! '-fstack-clash-protection'
       Generate code to prevent stack clash style attacks.  When this
       option is enabled, the compiler will only allocate one page of
       stack space at a time and each page is accessed immediately after
--- 16647,16661 ----
            and the generic implementation, code performance is hampered.
  
       Note that old-style stack checking is also the fallback method for
!      ‘specific’ if no target support has been added in the compiler.
  
!      ‘-fstack-check=’ is designed for Ada's needs to detect infinite
!      recursion and stack overflows.  ‘specific’ is an excellent choice
       when compiling Ada code.  It is not generally sufficient to protect
       against stack-clash attacks.  To protect against those you want
!      ‘-fstack-clash-protection’.
  
! ‘-fstack-clash-protection’
       Generate code to prevent stack clash style attacks.  When this
       option is enabled, the compiler will only allocate one page of
       stack space at a time and each page is accessed immediately after
*************** program analysis purposes.
*** 16659,16672 ****
       stack guard page provided by the operating system.
  
       Most targets do not fully support stack clash protection.  However,
!      on those targets '-fstack-clash-protection' will protect dynamic
!      stack allocations.  '-fstack-clash-protection' may also provide
       limited protection for static stack allocations if the target
!      supports '-fstack-check=specific'.
  
! '-fstack-limit-register=REG'
! '-fstack-limit-symbol=SYM'
! '-fno-stack-limit'
       Generate code to ensure that the stack does not grow beyond a
       certain value, either the value of a register or the address of a
       symbol.  If a larger stack is required, a signal is raised at run
--- 16663,16676 ----
       stack guard page provided by the operating system.
  
       Most targets do not fully support stack clash protection.  However,
!      on those targets ‘-fstack-clash-protection’ will protect dynamic
!      stack allocations.  ‘-fstack-clash-protection’ may also provide
       limited protection for static stack allocations if the target
!      supports ‘-fstack-check=specific’.
  
! ‘-fstack-limit-register=REG’
! ‘-fstack-limit-symbol=SYM’
! ‘-fno-stack-limit’
       Generate code to ensure that the stack does not grow beyond a
       certain value, either the value of a register or the address of a
       symbol.  If a larger stack is required, a signal is raised at run
*************** program analysis purposes.
*** 16674,16689 ****
       overruns the boundary, so it is possible to catch the signal
       without taking special precautions.
  
!      For instance, if the stack starts at absolute address '0x80000000'
       and grows downwards, you can use the flags
!      '-fstack-limit-symbol=__stack_limit' and
!      '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
       128KB.  Note that this may only work with the GNU linker.
  
       You can locally override stack limit checking by using the
!      'no_stack_limit' function attribute (*note Function Attributes::).
  
! '-fsplit-stack'
       Generate code to automatically split the stack before it overflows.
       The resulting program has a discontiguous stack which can only
       overflow if the program is unable to allocate any more memory.
--- 16678,16693 ----
       overruns the boundary, so it is possible to catch the signal
       without taking special precautions.
  
!      For instance, if the stack starts at absolute address ‘0x80000000’
       and grows downwards, you can use the flags
!      ‘-fstack-limit-symbol=__stack_limit’ and
!      ‘-Wl,--defsym,__stack_limit=0x7ffe0000’ to enforce a stack limit of
       128KB.  Note that this may only work with the GNU linker.
  
       You can locally override stack limit checking by using the
!      ‘no_stack_limit’ function attribute (*note Function Attributes::).
  
! ‘-fsplit-stack’
       Generate code to automatically split the stack before it overflows.
       The resulting program has a discontiguous stack which can only
       overflow if the program is unable to allocate any more memory.
*************** program analysis purposes.
*** 16692,16752 ****
       thread.  This is currently only implemented for the x86 targets
       running GNU/Linux.
  
!      When code compiled with '-fsplit-stack' calls code compiled without
!      '-fsplit-stack', there may not be much stack space available for
       the latter code to run.  If compiling all code, including library
!      code, with '-fsplit-stack' is not an option, then the linker can
       fix up these calls so that the code compiled without
!      '-fsplit-stack' always has a large stack.  Support for this is
       implemented in the gold linker in GNU binutils release 2.21 and
       later.
  
! '-fstrub=disable'
!      Disable stack scrubbing entirely, ignoring any 'strub' attributes.
       See *Note Common Type Attributes::.
  
! '-fstrub=strict'
!      Functions default to 'strub' mode 'disabled', and apply 'strict'ly
       the restriction that only functions associated with
!      'strub'-'callable' modes ('at-calls', 'callable' and
!      'always_inline' 'internal') are 'callable' by functions with
!      'strub'-enabled modes ('at-calls' and 'internal').
  
! '-fstrub=relaxed'
!      Restore the default stack scrub ('strub') setting, namely, 'strub'
!      is only enabled as required by 'strub' attributes associated with
!      function and data types.  'Relaxed' means that strub contexts are
       only prevented from calling functions explicitly associated with
!      'strub' mode 'disabled'.  This option is only useful to override
!      other '-fstrub=*' options that precede it in the command line.
  
! '-fstrub=at-calls'
!      Enable 'at-calls' 'strub' mode where viable.  The primary use of
!      this option is for testing.  It exercises the 'strub' machinery in
!      scenarios strictly local to a translation unit.  This 'strub' mode
       modifies function interfaces, so any function that is visible to
       other translation units, or that has its address taken, will _not_
       be affected by this option.  Optimization options may also affect
!      viability.  See the 'strub' attribute documentation for details on
       viability and eligibility requirements.
  
! '-fstrub=internal'
!      Enable 'internal' 'strub' mode where viable.  The primary use of
       this option is for testing.  This option is intended to exercise
!      thoroughly parts of the 'strub' machinery that implement the less
!      efficient, but interface-preserving 'strub' mode.  Functions that
       would not be affected by this option are quite uncommon.
  
! '-fstrub=all'
!      Enable some 'strub' mode where viable.  When both strub modes are
!      viable, 'at-calls' is preferred.  '-fdump-ipa-strubm' adds function
       attributes that tell which mode was selected for each function.
       The primary use of this option is for testing, to exercise
!      thoroughly the 'strub' machinery.
  
! '-fvtable-verify=[std|preinit|none]'
       This option is only available when compiling C++ code.  It turns on
!      (or off, if using '-fvtable-verify=none') the security feature that
       verifies at run time, for every virtual call, that the vtable
       pointer through which the call is made is valid for the type of the
       object, and has not been corrupted or overwritten.  If an invalid
--- 16696,16756 ----
       thread.  This is currently only implemented for the x86 targets
       running GNU/Linux.
  
!      When code compiled with ‘-fsplit-stack’ calls code compiled without
!      ‘-fsplit-stack’, there may not be much stack space available for
       the latter code to run.  If compiling all code, including library
!      code, with ‘-fsplit-stack’ is not an option, then the linker can
       fix up these calls so that the code compiled without
!      ‘-fsplit-stack’ always has a large stack.  Support for this is
       implemented in the gold linker in GNU binutils release 2.21 and
       later.
  
! ‘-fstrub=disable’
!      Disable stack scrubbing entirely, ignoring any ‘strub’ attributes.
       See *Note Common Type Attributes::.
  
! ‘-fstrub=strict’
!      Functions default to ‘strub’ mode ‘disabled’, and apply ‘strict’ly
       the restriction that only functions associated with
!      ‘strub’-‘callable’ modes (‘at-calls’, ‘callable’ and
!      ‘always_inline’ ‘internal’) are ‘callable’ by functions with
!      ‘strub’-enabled modes (‘at-calls’ and ‘internal’).
  
! ‘-fstrub=relaxed’
!      Restore the default stack scrub (‘strub’) setting, namely, ‘strub’
!      is only enabled as required by ‘strub’ attributes associated with
!      function and data types.  ‘Relaxed’ means that strub contexts are
       only prevented from calling functions explicitly associated with
!      ‘strub’ mode ‘disabled’.  This option is only useful to override
!      other ‘-fstrub=*’ options that precede it in the command line.
  
! ‘-fstrub=at-calls’
!      Enable ‘at-calls’ ‘strub’ mode where viable.  The primary use of
!      this option is for testing.  It exercises the ‘strub’ machinery in
!      scenarios strictly local to a translation unit.  This ‘strub’ mode
       modifies function interfaces, so any function that is visible to
       other translation units, or that has its address taken, will _not_
       be affected by this option.  Optimization options may also affect
!      viability.  See the ‘strub’ attribute documentation for details on
       viability and eligibility requirements.
  
! ‘-fstrub=internal’
!      Enable ‘internal’ ‘strub’ mode where viable.  The primary use of
       this option is for testing.  This option is intended to exercise
!      thoroughly parts of the ‘strub’ machinery that implement the less
!      efficient, but interface-preserving ‘strub’ mode.  Functions that
       would not be affected by this option are quite uncommon.
  
! ‘-fstrub=all’
!      Enable some ‘strub’ mode where viable.  When both strub modes are
!      viable, ‘at-calls’ is preferred.  ‘-fdump-ipa-strubm’ adds function
       attributes that tell which mode was selected for each function.
       The primary use of this option is for testing, to exercise
!      thoroughly the ‘strub’ machinery.
  
! ‘-fvtable-verify=[std|preinit|none]’
       This option is only available when compiling C++ code.  It turns on
!      (or off, if using ‘-fvtable-verify=none’) the security feature that
       verifies at run time, for every virtual call, that the vtable
       pointer through which the call is made is valid for the type of the
       object, and has not been corrupted or overwritten.  If an invalid
*************** program analysis purposes.
*** 16755,16808 ****
  
       This option causes run-time data structures to be built at program
       startup, which are used for verifying the vtable pointers.  The
!      options 'std' and 'preinit' control the timing of when these data
       structures are built.  In both cases the data structures are built
!      before execution reaches 'main'.  Using '-fvtable-verify=std'
       causes the data structures to be built after shared libraries have
!      been loaded and initialized.  '-fvtable-verify=preinit' causes them
       to be built before shared libraries have been loaded and
       initialized.
  
       If this option appears multiple times in the command line with
!      different values specified, 'none' takes highest priority over both
!      'std' and 'preinit'; 'preinit' takes priority over 'std'.
  
! '-fvtv-debug'
!      When used in conjunction with '-fvtable-verify=std' or
!      '-fvtable-verify=preinit', causes debug versions of the runtime
       functions for the vtable verification feature to be called.  This
       flag also causes the compiler to log information about which vtable
       pointers it finds for each class.  This information is written to a
!      file named 'vtv_set_ptr_data.log' in the directory named by the
!      environment variable 'VTV_LOGS_DIR' if that is defined or the
       current working directory otherwise.
  
       Note: This feature _appends_ data to the log file.  If you want a
       fresh log file, be sure to delete any existing one.
  
! '-fvtv-counts'
       This is a debugging flag.  When used in conjunction with
!      '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
       compiler to keep track of the total number of virtual calls it
       encounters and the number of verifications it inserts.  It also
       counts the number of calls to certain run-time library functions
       that it inserts and logs this information for each compilation
       unit.  The compiler writes this information to a file named
!      'vtv_count_data.log' in the directory named by the environment
!      variable 'VTV_LOGS_DIR' if that is defined or the current working
       directory otherwise.  It also counts the size of the vtable pointer
       sets for each class, and writes this information to
!      'vtv_class_set_sizes.log' in the same directory.
  
       Note: This feature _appends_ data to the log files.  To get fresh
       log files, be sure to delete any existing ones.
  
! '-finstrument-functions'
       Generate instrumentation calls for entry and exit to functions.
       Just after function entry and just before function exit, the
       following profiling functions are called with the address of the
       current function and its call site.  (On some platforms,
!      '__builtin_return_address' does not work beyond the current
       function, so the call site information may not be available to the
       profiling functions otherwise.)
  
--- 16759,16812 ----
  
       This option causes run-time data structures to be built at program
       startup, which are used for verifying the vtable pointers.  The
!      options ‘std’ and ‘preinit’ control the timing of when these data
       structures are built.  In both cases the data structures are built
!      before execution reaches ‘main’.  Using ‘-fvtable-verify=std’
       causes the data structures to be built after shared libraries have
!      been loaded and initialized.  ‘-fvtable-verify=preinit’ causes them
       to be built before shared libraries have been loaded and
       initialized.
  
       If this option appears multiple times in the command line with
!      different values specified, ‘none’ takes highest priority over both
!      ‘std’ and ‘preinit’; ‘preinit’ takes priority over ‘std’.
  
! ‘-fvtv-debug’
!      When used in conjunction with ‘-fvtable-verify=std’ or
!      ‘-fvtable-verify=preinit’, causes debug versions of the runtime
       functions for the vtable verification feature to be called.  This
       flag also causes the compiler to log information about which vtable
       pointers it finds for each class.  This information is written to a
!      file named ‘vtv_set_ptr_data.log’ in the directory named by the
!      environment variable ‘VTV_LOGS_DIR’ if that is defined or the
       current working directory otherwise.
  
       Note: This feature _appends_ data to the log file.  If you want a
       fresh log file, be sure to delete any existing one.
  
! ‘-fvtv-counts’
       This is a debugging flag.  When used in conjunction with
!      ‘-fvtable-verify=std’ or ‘-fvtable-verify=preinit’, this causes the
       compiler to keep track of the total number of virtual calls it
       encounters and the number of verifications it inserts.  It also
       counts the number of calls to certain run-time library functions
       that it inserts and logs this information for each compilation
       unit.  The compiler writes this information to a file named
!      ‘vtv_count_data.log’ in the directory named by the environment
!      variable ‘VTV_LOGS_DIR’ if that is defined or the current working
       directory otherwise.  It also counts the size of the vtable pointer
       sets for each class, and writes this information to
!      ‘vtv_class_set_sizes.log’ in the same directory.
  
       Note: This feature _appends_ data to the log files.  To get fresh
       log files, be sure to delete any existing ones.
  
! ‘-finstrument-functions’
       Generate instrumentation calls for entry and exit to functions.
       Just after function entry and just before function exit, the
       following profiling functions are called with the address of the
       current function and its call site.  (On some platforms,
!      ‘__builtin_return_address’ does not work beyond the current
       function, so the call site information may not be available to the
       profiling functions otherwise.)
  
*************** program analysis purposes.
*** 16819,16831 ****
       the inline function is entered and exited.  This means that
       addressable versions of such functions must be available.  If all
       your uses of a function are expanded inline, this may mean an
!      additional expansion of code size.  If you use 'extern inline' in
       your C code, an addressable version of such functions must be
       provided.  (This is normally the case anyway, but if you get lucky
       and the optimizer always expands the functions inline, you might
       have gotten away without providing static copies.)
  
!      A function may be given the attribute 'no_instrument_function', in
       which case this instrumentation is not done.  This can be used, for
       example, for the profiling functions listed above, high-priority
       interrupt routines, and any functions from which the profiling
--- 16823,16835 ----
       the inline function is entered and exited.  This means that
       addressable versions of such functions must be available.  If all
       your uses of a function are expanded inline, this may mean an
!      additional expansion of code size.  If you use ‘extern inline’ in
       your C code, an addressable version of such functions must be
       provided.  (This is normally the case anyway, but if you get lucky
       and the optimizer always expands the functions inline, you might
       have gotten away without providing static copies.)
  
!      A function may be given the attribute ‘no_instrument_function’, in
       which case this instrumentation is not done.  This can be used, for
       example, for the profiling functions listed above, high-priority
       interrupt routines, and any functions from which the profiling
*************** program analysis purposes.
*** 16833,16846 ****
       profiling routines generate output or allocate memory).  *Note
       Common Function Attributes::.
  
! '-finstrument-functions-once'
!      This is similar to '-finstrument-functions', but the profiling
       functions are called only once per instrumented function, i.e.  the
       first profiling function is called after the first entry into the
       instrumented function and the second profiling function is called
       before the exit corresponding to this first entry.
  
!      The definition of 'once' for the purpose of this option is a little
       vague because the implementation is not protected against data
       races.  As a result, the implementation only guarantees that the
       profiling functions are called at _least_ once per process and at
--- 16837,16850 ----
       profiling routines generate output or allocate memory).  *Note
       Common Function Attributes::.
  
! ‘-finstrument-functions-once’
!      This is similar to ‘-finstrument-functions’, but the profiling
       functions are called only once per instrumented function, i.e.  the
       first profiling function is called after the first entry into the
       instrumented function and the second profiling function is called
       before the exit corresponding to this first entry.
  
!      The definition of ‘once’ for the purpose of this option is a little
       vague because the implementation is not protected against data
       races.  As a result, the implementation only guarantees that the
       profiling functions are called at _least_ once per process and at
*************** program analysis purposes.
*** 16849,16858 ****
       second function, unless it never reaches the exit of the
       instrumented function.
  
! '-finstrument-functions-exclude-file-list=FILE,FILE,...'
  
       Set the list of functions that are excluded from instrumentation
!      (see the description of '-finstrument-functions').  If the file
       that contains a function definition matches with one of FILE, then
       that function is not instrumented.  The match is done on
       substrings: if the FILE parameter is a substring of the file name,
--- 16853,16862 ----
       second function, unless it never reaches the exit of the
       instrumented function.
  
! ‘-finstrument-functions-exclude-file-list=FILE,FILE,...’
  
       Set the list of functions that are excluded from instrumentation
!      (see the description of ‘-finstrument-functions’).  If the file
       that contains a function definition matches with one of FILE, then
       that function is not instrumented.  The match is done on
       substrings: if the FILE parameter is a substring of the file name,
*************** program analysis purposes.
*** 16863,16910 ****
            -finstrument-functions-exclude-file-list=/bits/stl,include/sys
  
       excludes any inline function defined in files whose pathnames
!      contain '/bits/stl' or 'include/sys'.
  
!      If, for some reason, you want to include letter ',' in one of SYM,
!      write '\,'.  For example,
!      '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
       single quote surrounding the option).
  
! '-finstrument-functions-exclude-function-list=SYM,SYM,...'
  
!      This is similar to '-finstrument-functions-exclude-file-list', but
       this option sets the list of function names to be excluded from
       instrumentation.  The function name to be matched is its
!      user-visible name, such as 'vector<int> blah(const vector<int> &)',
!      not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
       The match is done on substrings: if the SYM parameter is a
       substring of the function name, it is considered to be a match.
       For C99 and C++ extended identifiers, the function name must be
       given in UTF-8, not using universal character names.
  
! '-fpatchable-function-entry=N[,M]'
       Generate N NOPs right at the beginning of each function, with the
       function entry point before the Mth NOP. If M is omitted, it
!      defaults to '0' so the function entry points to the address just at
       the first NOP. The NOP instructions reserve extra space which can
       be used to patch in any desired instrumentation at run time,
       provided that the code segment is writable.  The amount of space is
       controllable indirectly via the number of NOPs; the NOP instruction
       used corresponds to the instruction emitted by the internal GCC
!      back-end interface 'gen_nop'.  This behavior is target-specific and
       may also depend on the architecture variant and/or other
       compilation options.
  
       For run-time identification, the starting addresses of these areas,
       which correspond to their respective function entries minus M, are
!      additionally collected in the '__patchable_function_entries'
       section of the resulting binary.
  
!      Note that the value of '__attribute__ ((patchable_function_entry
!      (N,M)))' takes precedence over command-line option
!      '-fpatchable-function-entry=N,M'.  This can be used to increase the
       area size or to remove it completely on a single function.  If
!      'N=0', no pad location is recorded.
  
       The NOP instructions are inserted at--and maybe before, depending
       on M--the function entry address, even before the prologue.  On
--- 16867,16914 ----
            -finstrument-functions-exclude-file-list=/bits/stl,include/sys
  
       excludes any inline function defined in files whose pathnames
!      contain ‘/bits/stl’ or ‘include/sys’.
  
!      If, for some reason, you want to include letter ‘,’ in one of SYM,
!      write ‘\,’.  For example,
!      ‘-finstrument-functions-exclude-file-list='\,\,tmp'’ (note the
       single quote surrounding the option).
  
! ‘-finstrument-functions-exclude-function-list=SYM,SYM,...’
  
!      This is similar to ‘-finstrument-functions-exclude-file-list’, but
       this option sets the list of function names to be excluded from
       instrumentation.  The function name to be matched is its
!      user-visible name, such as ‘vector<int> blah(const vector<int> &)’,
!      not the internal mangled name (e.g., ‘_Z4blahRSt6vectorIiSaIiEE’).
       The match is done on substrings: if the SYM parameter is a
       substring of the function name, it is considered to be a match.
       For C99 and C++ extended identifiers, the function name must be
       given in UTF-8, not using universal character names.
  
! ‘-fpatchable-function-entry=N[,M]’
       Generate N NOPs right at the beginning of each function, with the
       function entry point before the Mth NOP. If M is omitted, it
!      defaults to ‘0’ so the function entry points to the address just at
       the first NOP. The NOP instructions reserve extra space which can
       be used to patch in any desired instrumentation at run time,
       provided that the code segment is writable.  The amount of space is
       controllable indirectly via the number of NOPs; the NOP instruction
       used corresponds to the instruction emitted by the internal GCC
!      back-end interface ‘gen_nop’.  This behavior is target-specific and
       may also depend on the architecture variant and/or other
       compilation options.
  
       For run-time identification, the starting addresses of these areas,
       which correspond to their respective function entries minus M, are
!      additionally collected in the ‘__patchable_function_entries’
       section of the resulting binary.
  
!      Note that the value of ‘__attribute__ ((patchable_function_entry
!      (N,M)))’ takes precedence over command-line option
!      ‘-fpatchable-function-entry=N,M’.  This can be used to increase the
       area size or to remove it completely on a single function.  If
!      ‘N=0’, no pad location is recorded.
  
       The NOP instructions are inserted at--and maybe before, depending
       on M--the function entry address, even before the prologue.  On
*************** File: gcc.info,  Node: Preprocessor Opti
*** 16924,16931 ****
  These options control the C preprocessor, which is run on each C source
  file before actual compilation.
  
!  If you use the '-E' option, nothing is done except preprocessing.  Some
! of these options make sense only together with '-E' because they cause
  the preprocessor output to be unsuitable for actual compilation.
  
   In addition to the options listed here, there are a number of options
--- 16928,16935 ----
  These options control the C preprocessor, which is run on each C source
  file before actual compilation.
  
!  If you use the ‘-E’ option, nothing is done except preprocessing.  Some
! of these options make sense only together with ‘-E’ because they cause
  the preprocessor output to be unsuitable for actual compilation.
  
   In addition to the options listed here, there are a number of options
*************** to control search paths for include file
*** 16933,16944 ****
  Options::.  Options to control preprocessor diagnostics are listed in
  *note Warning Options::.
  
! '-D NAME'
!      Predefine NAME as a macro, with definition '1'.
  
! '-D NAME=DEFINITION'
       The contents of DEFINITION are tokenized and processed as if they
!      appeared during translation phase three in a '#define' directive.
       In particular, the definition is truncated by embedded newline
       characters.
  
--- 16937,16948 ----
  Options::.  Options to control preprocessor diagnostics are listed in
  *note Warning Options::.
  
! ‘-D NAME’
!      Predefine NAME as a macro, with definition ‘1’.
  
! ‘-D NAME=DEFINITION’
       The contents of DEFINITION are tokenized and processed as if they
!      appeared during translation phase three in a ‘#define’ directive.
       In particular, the definition is truncated by embedded newline
       characters.
  
*************** Options::.  Options to control preproces
*** 16949,17059 ****
       If you wish to define a function-like macro on the command line,
       write its argument list with surrounding parentheses before the
       equals sign (if any).  Parentheses are meaningful to most shells,
!      so you should quote the option.  With 'sh' and 'csh',
!      '-D'NAME(ARGS...)=DEFINITION'' works.
  
!      '-D' and '-U' options are processed in the order they are given on
!      the command line.  All '-imacros FILE' and '-include FILE' options
!      are processed after all '-D' and '-U' options.
  
! '-U NAME'
       Cancel any previous definition of NAME, either built in or provided
!      with a '-D' option.
  
! '-include FILE'
!      Process FILE as if '#include "file"' appeared as the first line of
       the primary source file.  However, the first directory searched for
       FILE is the preprocessor's working directory _instead of_ the
       directory containing the main source file.  If not found there, it
!      is searched for in the remainder of the '#include "..."' search
       chain as normal.
  
!      If multiple '-include' options are given, the files are included in
       the order they appear on the command line.
  
! '-imacros FILE'
!      Exactly like '-include', except that any output produced by
       scanning FILE is thrown away.  Macros it defines remain defined.
       This allows you to acquire all the macros from a header without
       also processing its declarations.
  
!      All files specified by '-imacros' are processed before all files
!      specified by '-include'.
  
! '-undef'
       Do not predefine any system-specific or GCC-specific macros.  The
       standard predefined macros remain defined.
  
! '-pthread'
       Define additional macros required for using the POSIX threads
       library.  You should use this option consistently for both
       compilation and linking.  This option is supported on GNU/Linux
       targets, most other Unix derivatives, and also on x86 Cygwin and
       MinGW targets.
  
! '-M'
       Instead of outputting the result of preprocessing, output a rule
!      suitable for 'make' describing the dependencies of the main source
!      file.  The preprocessor outputs one 'make' rule containing the
       object file name for that source file, a colon, and the names of
!      all the included files, including those coming from '-include' or
!      '-imacros' command-line options.
  
!      Unless specified explicitly (with '-MT' or '-MQ'), the object file
       name consists of the name of the source file with any suffix
       replaced with object file suffix and with any leading directory
       parts removed.  If there are many included files then the rule is
!      split into several lines using '\'-newline.  The rule has no
       commands.
  
       This option does not suppress the preprocessor's debug output, such
!      as '-dM'.  To avoid mixing such debug output with the dependency
       rules you should explicitly specify the dependency output file with
!      '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
       (*note Environment Variables::).  Debug output is still sent to the
       regular output stream as normal.
  
!      Passing '-M' to the driver implies '-E', and suppresses warnings
!      with an implicit '-w'.
  
! '-MM'
!      Like '-M' but do not mention header files that are found in system
       header directories, nor header files that are included, directly or
       indirectly, from such a header.
  
       This implies that the choice of angle brackets or double quotes in
!      an '#include' directive does not in itself determine whether that
!      header appears in '-MM' dependency output.
  
! '-MF FILE'
!      When used with '-M' or '-MM', specifies a file to write the
!      dependencies to.  If no '-MF' switch is given the preprocessor
       sends the rules to the same place it would send preprocessed
       output.
  
!      When used with the driver options '-MD' or '-MMD', '-MF' overrides
       the default dependency output file.
  
!      If FILE is '-', then the dependencies are written to 'stdout'.
  
! '-MG'
!      In conjunction with an option such as '-M' requesting dependency
!      generation, '-MG' assumes missing header files are generated files
       and adds them to the dependency list without raising an error.  The
!      dependency filename is taken directly from the '#include' directive
!      without prepending any path.  '-MG' also suppresses preprocessed
       output, as a missing header file renders this useless.
  
       This feature is used in automatic updating of makefiles.
  
! '-Mno-modules'
       Disable dependency generation for compiled module interfaces.
  
! '-MP'
       This option instructs CPP to add a phony target for each dependency
       other than the main file, causing each to depend on nothing.  These
!      dummy rules work around errors 'make' gives if you remove header
!      files without updating the 'Makefile' to match.
  
       This is typical output:
  
--- 16953,17063 ----
       If you wish to define a function-like macro on the command line,
       write its argument list with surrounding parentheses before the
       equals sign (if any).  Parentheses are meaningful to most shells,
!      so you should quote the option.  With ‘sh’ and ‘csh’,
!      ‘-D'NAME(ARGS...)=DEFINITION'’ works.
  
!      ‘-D’ and ‘-U’ options are processed in the order they are given on
!      the command line.  All ‘-imacros FILE’ and ‘-include FILE’ options
!      are processed after all ‘-D’ and ‘-U’ options.
  
! ‘-U NAME’
       Cancel any previous definition of NAME, either built in or provided
!      with a ‘-D’ option.
  
! ‘-include FILE’
!      Process FILE as if ‘#include "file"’ appeared as the first line of
       the primary source file.  However, the first directory searched for
       FILE is the preprocessor's working directory _instead of_ the
       directory containing the main source file.  If not found there, it
!      is searched for in the remainder of the ‘#include "..."’ search
       chain as normal.
  
!      If multiple ‘-include’ options are given, the files are included in
       the order they appear on the command line.
  
! ‘-imacros FILE’
!      Exactly like ‘-include’, except that any output produced by
       scanning FILE is thrown away.  Macros it defines remain defined.
       This allows you to acquire all the macros from a header without
       also processing its declarations.
  
!      All files specified by ‘-imacros’ are processed before all files
!      specified by ‘-include’.
  
! ‘-undef’
       Do not predefine any system-specific or GCC-specific macros.  The
       standard predefined macros remain defined.
  
! ‘-pthread’
       Define additional macros required for using the POSIX threads
       library.  You should use this option consistently for both
       compilation and linking.  This option is supported on GNU/Linux
       targets, most other Unix derivatives, and also on x86 Cygwin and
       MinGW targets.
  
! ‘-M’
       Instead of outputting the result of preprocessing, output a rule
!      suitable for ‘make’ describing the dependencies of the main source
!      file.  The preprocessor outputs one ‘make’ rule containing the
       object file name for that source file, a colon, and the names of
!      all the included files, including those coming from ‘-include’ or
!      ‘-imacros’ command-line options.
  
!      Unless specified explicitly (with ‘-MT’ or ‘-MQ’), the object file
       name consists of the name of the source file with any suffix
       replaced with object file suffix and with any leading directory
       parts removed.  If there are many included files then the rule is
!      split into several lines using ‘\’-newline.  The rule has no
       commands.
  
       This option does not suppress the preprocessor's debug output, such
!      as ‘-dM’.  To avoid mixing such debug output with the dependency
       rules you should explicitly specify the dependency output file with
!      ‘-MF’, or use an environment variable like ‘DEPENDENCIES_OUTPUT’
       (*note Environment Variables::).  Debug output is still sent to the
       regular output stream as normal.
  
!      Passing ‘-M’ to the driver implies ‘-E’, and suppresses warnings
!      with an implicit ‘-w’.
  
! ‘-MM’
!      Like ‘-M’ but do not mention header files that are found in system
       header directories, nor header files that are included, directly or
       indirectly, from such a header.
  
       This implies that the choice of angle brackets or double quotes in
!      an ‘#include’ directive does not in itself determine whether that
!      header appears in ‘-MM’ dependency output.
  
! ‘-MF FILE’
!      When used with ‘-M’ or ‘-MM’, specifies a file to write the
!      dependencies to.  If no ‘-MF’ switch is given the preprocessor
       sends the rules to the same place it would send preprocessed
       output.
  
!      When used with the driver options ‘-MD’ or ‘-MMD’, ‘-MF’ overrides
       the default dependency output file.
  
!      If FILE is ‘-’, then the dependencies are written to ‘stdout’.
  
! ‘-MG’
!      In conjunction with an option such as ‘-M’ requesting dependency
!      generation, ‘-MG’ assumes missing header files are generated files
       and adds them to the dependency list without raising an error.  The
!      dependency filename is taken directly from the ‘#include’ directive
!      without prepending any path.  ‘-MG’ also suppresses preprocessed
       output, as a missing header file renders this useless.
  
       This feature is used in automatic updating of makefiles.
  
! ‘-Mno-modules’
       Disable dependency generation for compiled module interfaces.
  
! ‘-MP’
       This option instructs CPP to add a phony target for each dependency
       other than the main file, causing each to depend on nothing.  These
!      dummy rules work around errors ‘make’ gives if you remove header
!      files without updating the ‘Makefile’ to match.
  
       This is typical output:
  
*************** Options::.  Options to control preproces
*** 17061,17208 ****
  
            test.h:
  
! '-MT TARGET'
  
       Change the target of the rule emitted by dependency generation.  By
       default CPP takes the name of the main input file, deletes any
!      directory components and any file suffix such as '.c', and appends
       the platform's usual object suffix.  The result is the target.
  
!      An '-MT' option sets the target to be exactly the string you
       specify.  If you want multiple targets, you can specify them as a
!      single argument to '-MT', or use multiple '-MT' options.
  
!      For example, '-MT '$(objpfx)foo.o'' might give
  
            $(objpfx)foo.o: foo.c
  
! '-MQ TARGET'
  
!      Same as '-MT', but it quotes any characters which are special to
!      Make.  '-MQ '$(objpfx)foo.o'' gives
  
            $$(objpfx)foo.o: foo.c
  
       The default target is automatically quoted, as if it were given
!      with '-MQ'.
  
! '-MD'
!      '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
!      implied.  The driver determines FILE based on whether an '-o'
       option is given.  If it is, the driver uses its argument but with a
!      suffix of '.d', otherwise it takes the name of the input file,
!      removes any directory components and suffix, and applies a '.d'
       suffix.
  
!      If '-MD' is used in conjunction with '-E', any '-o' switch is
       understood to specify the dependency output file (*note -MF:
!      dashMF.), but if used without '-E', each '-o' is understood to
       specify a target object file.
  
!      Since '-E' is not implied, '-MD' can be used to generate a
       dependency output file as a side effect of the compilation process.
  
! '-MMD'
!      Like '-MD' except mention only user header files, not system header
       files.
  
! '-fpreprocessed'
       Indicate to the preprocessor that the input file has already been
       preprocessed.  This suppresses things like macro expansion,
       trigraph conversion, escaped newline splicing, and processing of
       most directives.  The preprocessor still recognizes and removes
!      comments, so that you can pass a file preprocessed with '-C' to the
       compiler without problems.  In this mode the integrated
       preprocessor is little more than a tokenizer for the front ends.
  
!      '-fpreprocessed' is implicit if the input file has one of the
!      extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
!      uses for preprocessed files created by '-save-temps'.
  
! '-fdirectives-only'
       When preprocessing, handle directives, but do not expand macros.
  
!      The option's behavior depends on the '-E' and '-fpreprocessed'
       options.
  
!      With '-E', preprocessing is limited to the handling of directives
!      such as '#define', '#ifdef', and '#error'.  Other preprocessor
       operations, such as macro expansion and trigraph conversion are not
!      performed.  In addition, the '-dD' option is implicitly enabled.
  
!      With '-fpreprocessed', predefinition of command line and most
!      builtin macros is disabled.  Macros such as '__LINE__', which are
       contextually dependent, are handled normally.  This enables
!      compilation of files previously preprocessed with '-E
!      -fdirectives-only'.
  
!      With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
       take precedence.  This enables full preprocessing of files
!      previously preprocessed with '-E -fdirectives-only'.
  
! '-fdollars-in-identifiers'
!      Accept '$' in identifiers.
  
! '-fextended-identifiers'
       Accept universal character names and extended characters in
       identifiers.  This option is enabled by default for C99 (and later
       C standard versions) and C++.
  
! '-fno-canonical-system-headers'
       When preprocessing, do not shorten system header paths with
       canonicalization.
  
! '-fmax-include-depth=DEPTH'
       Set the maximum depth of the nested #include.  The default is 200.
  
! '-ftabstop=WIDTH'
       Set the distance between tab stops.  This helps the preprocessor
       report correct column numbers in warnings or errors, even if tabs
       appear on the line.  If the value is less than 1 or greater than
       100, the option is ignored.  The default is 8.
  
! '-ftrack-macro-expansion[=LEVEL]'
       Track locations of tokens across macro expansions.  This allows the
       compiler to emit diagnostic about the current macro expansion stack
       when a compilation error occurs in a macro expansion.  Using this
       option makes the preprocessor and the compiler consume more memory.
       The LEVEL parameter can be used to choose the level of precision of
       token location tracking thus decreasing the memory consumption if
!      necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
       tracks tokens locations in a degraded mode for the sake of minimal
       memory overhead.  In this mode all tokens resulting from the
       expansion of an argument of a function-like macro have the same
!      location.  Value '2' tracks tokens locations completely.  This
       value is the most memory hungry.  When this option is given no
!      argument, the default parameter value is '2'.
  
!      Note that '-ftrack-macro-expansion=2' is activated by default.
  
! '-fmacro-prefix-map=OLD=NEW'
!      When preprocessing files residing in directory 'OLD', expand the
!      '__FILE__' and '__BASE_FILE__' macros as if the files resided in
!      directory 'NEW' instead.  This can be used to change an absolute
!      path to a relative path by using '.' for NEW which can result in
       more reproducible builds that are location independent.  This
!      option also affects '__builtin_FILE()' during compilation.  See
!      also '-ffile-prefix-map' and '-fcanon-prefix-map'.
  
! '-fexec-charset=CHARSET'
       Set the execution character set, used for string and character
       constants.  The default is UTF-8.  CHARSET can be any encoding
!      supported by the system's 'iconv' library routine.
  
! '-fwide-exec-charset=CHARSET'
       Set the wide execution character set, used for wide string and
       character constants.  The default is one of UTF-32BE, UTF-32LE,
       UTF-16BE, or UTF-16LE, whichever corresponds to the width of
!      'wchar_t' and the big-endian or little-endian byte order being used
!      for code generation.  As with '-fexec-charset', CHARSET can be any
!      encoding supported by the system's 'iconv' library routine;
       however, you will have problems with encodings that do not fit
!      exactly in 'wchar_t'.
  
! '-finput-charset=CHARSET'
       Set the input character set, used for translation from the
       character set of the input file to the source character set used by
       GCC.  If the locale does not specify, or GCC cannot get this
--- 17065,17212 ----
  
            test.h:
  
! ‘-MT TARGET’
  
       Change the target of the rule emitted by dependency generation.  By
       default CPP takes the name of the main input file, deletes any
!      directory components and any file suffix such as ‘.c’, and appends
       the platform's usual object suffix.  The result is the target.
  
!      An ‘-MT’ option sets the target to be exactly the string you
       specify.  If you want multiple targets, you can specify them as a
!      single argument to ‘-MT’, or use multiple ‘-MT’ options.
  
!      For example, ‘-MT '$(objpfx)foo.o'’ might give
  
            $(objpfx)foo.o: foo.c
  
! ‘-MQ TARGET’
  
!      Same as ‘-MT’, but it quotes any characters which are special to
!      Make.  ‘-MQ '$(objpfx)foo.o'’ gives
  
            $$(objpfx)foo.o: foo.c
  
       The default target is automatically quoted, as if it were given
!      with ‘-MQ’.
  
! ‘-MD’
!      ‘-MD’ is equivalent to ‘-M -MF FILE’, except that ‘-E’ is not
!      implied.  The driver determines FILE based on whether an ‘-o’
       option is given.  If it is, the driver uses its argument but with a
!      suffix of ‘.d’, otherwise it takes the name of the input file,
!      removes any directory components and suffix, and applies a ‘.d’
       suffix.
  
!      If ‘-MD’ is used in conjunction with ‘-E’, any ‘-o’ switch is
       understood to specify the dependency output file (*note -MF:
!      dashMF.), but if used without ‘-E’, each ‘-o’ is understood to
       specify a target object file.
  
!      Since ‘-E’ is not implied, ‘-MD’ can be used to generate a
       dependency output file as a side effect of the compilation process.
  
! ‘-MMD’
!      Like ‘-MD’ except mention only user header files, not system header
       files.
  
! ‘-fpreprocessed’
       Indicate to the preprocessor that the input file has already been
       preprocessed.  This suppresses things like macro expansion,
       trigraph conversion, escaped newline splicing, and processing of
       most directives.  The preprocessor still recognizes and removes
!      comments, so that you can pass a file preprocessed with ‘-C’ to the
       compiler without problems.  In this mode the integrated
       preprocessor is little more than a tokenizer for the front ends.
  
!      ‘-fpreprocessed’ is implicit if the input file has one of the
!      extensions ‘.i’, ‘.ii’ or ‘.mi’.  These are the extensions that GCC
!      uses for preprocessed files created by ‘-save-temps’.
  
! ‘-fdirectives-only’
       When preprocessing, handle directives, but do not expand macros.
  
!      The option's behavior depends on the ‘-E’ and ‘-fpreprocessed’
       options.
  
!      With ‘-E’, preprocessing is limited to the handling of directives
!      such as ‘#define’, ‘#ifdef’, and ‘#error’.  Other preprocessor
       operations, such as macro expansion and trigraph conversion are not
!      performed.  In addition, the ‘-dD’ option is implicitly enabled.
  
!      With ‘-fpreprocessed’, predefinition of command line and most
!      builtin macros is disabled.  Macros such as ‘__LINE__’, which are
       contextually dependent, are handled normally.  This enables
!      compilation of files previously preprocessed with ‘-E
!      -fdirectives-only’.
  
!      With both ‘-E’ and ‘-fpreprocessed’, the rules for ‘-fpreprocessed’
       take precedence.  This enables full preprocessing of files
!      previously preprocessed with ‘-E -fdirectives-only’.
  
! ‘-fdollars-in-identifiers’
!      Accept ‘$’ in identifiers.
  
! ‘-fextended-identifiers’
       Accept universal character names and extended characters in
       identifiers.  This option is enabled by default for C99 (and later
       C standard versions) and C++.
  
! ‘-fno-canonical-system-headers’
       When preprocessing, do not shorten system header paths with
       canonicalization.
  
! ‘-fmax-include-depth=DEPTH’
       Set the maximum depth of the nested #include.  The default is 200.
  
! ‘-ftabstop=WIDTH’
       Set the distance between tab stops.  This helps the preprocessor
       report correct column numbers in warnings or errors, even if tabs
       appear on the line.  If the value is less than 1 or greater than
       100, the option is ignored.  The default is 8.
  
! ‘-ftrack-macro-expansion[=LEVEL]’
       Track locations of tokens across macro expansions.  This allows the
       compiler to emit diagnostic about the current macro expansion stack
       when a compilation error occurs in a macro expansion.  Using this
       option makes the preprocessor and the compiler consume more memory.
       The LEVEL parameter can be used to choose the level of precision of
       token location tracking thus decreasing the memory consumption if
!      necessary.  Value ‘0’ of LEVEL de-activates this option.  Value ‘1’
       tracks tokens locations in a degraded mode for the sake of minimal
       memory overhead.  In this mode all tokens resulting from the
       expansion of an argument of a function-like macro have the same
!      location.  Value ‘2’ tracks tokens locations completely.  This
       value is the most memory hungry.  When this option is given no
!      argument, the default parameter value is ‘2’.
  
!      Note that ‘-ftrack-macro-expansion=2’ is activated by default.
  
! ‘-fmacro-prefix-map=OLD=NEW’
!      When preprocessing files residing in directory ‘OLD’, expand the
!      ‘__FILE__’ and ‘__BASE_FILE__’ macros as if the files resided in
!      directory ‘NEW’ instead.  This can be used to change an absolute
!      path to a relative path by using ‘.’ for NEW which can result in
       more reproducible builds that are location independent.  This
!      option also affects ‘__builtin_FILE()’ during compilation.  See
!      also ‘-ffile-prefix-map’ and ‘-fcanon-prefix-map’.
  
! ‘-fexec-charset=CHARSET’
       Set the execution character set, used for string and character
       constants.  The default is UTF-8.  CHARSET can be any encoding
!      supported by the system's ‘iconv’ library routine.
  
! ‘-fwide-exec-charset=CHARSET’
       Set the wide execution character set, used for wide string and
       character constants.  The default is one of UTF-32BE, UTF-32LE,
       UTF-16BE, or UTF-16LE, whichever corresponds to the width of
!      ‘wchar_t’ and the big-endian or little-endian byte order being used
!      for code generation.  As with ‘-fexec-charset’, CHARSET can be any
!      encoding supported by the system's ‘iconv’ library routine;
       however, you will have problems with encodings that do not fit
!      exactly in ‘wchar_t’.
  
! ‘-finput-charset=CHARSET’
       Set the input character set, used for translation from the
       character set of the input file to the source character set used by
       GCC.  If the locale does not specify, or GCC cannot get this
*************** Options::.  Options to control preproces
*** 17210,17218 ****
       overridden by either the locale or this command-line option.
       Currently the command-line option takes precedence if there's a
       conflict.  CHARSET can be any encoding supported by the system's
!      'iconv' library routine.
  
! '-fpch-deps'
       When using precompiled headers (*note Precompiled Headers::), this
       flag causes the dependency-output flags to also list the files from
       the precompiled header's dependencies.  If not specified, only the
--- 17214,17222 ----
       overridden by either the locale or this command-line option.
       Currently the command-line option takes precedence if there's a
       conflict.  CHARSET can be any encoding supported by the system's
!      ‘iconv’ library routine.
  
! ‘-fpch-deps’
       When using precompiled headers (*note Precompiled Headers::), this
       flag causes the dependency-output flags to also list the files from
       the precompiled header's dependencies.  If not specified, only the
*************** Options::.  Options to control preproces
*** 17220,17243 ****
       create it, because those files are not consulted when a precompiled
       header is used.
  
! '-fpch-preprocess'
       This option allows use of a precompiled header (*note Precompiled
!      Headers::) together with '-E'.  It inserts a special '#pragma',
!      '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
       place where the precompiled header was found, and its FILENAME.
!      When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
       loads the PCH.
  
       This option is off by default, because the resulting preprocessed
       output is only really suitable as input to GCC.  It is switched on
!      by '-save-temps'.
  
!      You should not write this '#pragma' in your own code, but it is
       safe to edit the filename if the PCH file is available in a
       different location.  The filename may be absolute or it may be
       relative to GCC's current directory.
  
! '-fworking-directory'
       Enable generation of linemarkers in the preprocessor output that
       let the compiler know the current working directory at the time of
       preprocessing.  When this option is enabled, the preprocessor
--- 17224,17247 ----
       create it, because those files are not consulted when a precompiled
       header is used.
  
! ‘-fpch-preprocess’
       This option allows use of a precompiled header (*note Precompiled
!      Headers::) together with ‘-E’.  It inserts a special ‘#pragma’,
!      ‘#pragma GCC pch_preprocess "FILENAME"’ in the output to mark the
       place where the precompiled header was found, and its FILENAME.
!      When ‘-fpreprocessed’ is in use, GCC recognizes this ‘#pragma’ and
       loads the PCH.
  
       This option is off by default, because the resulting preprocessed
       output is only really suitable as input to GCC.  It is switched on
!      by ‘-save-temps’.
  
!      You should not write this ‘#pragma’ in your own code, but it is
       safe to edit the filename if the PCH file is available in a
       different location.  The filename may be absolute or it may be
       relative to GCC's current directory.
  
! ‘-fworking-directory’
       Enable generation of linemarkers in the preprocessor output that
       let the compiler know the current working directory at the time of
       preprocessing.  When this option is enabled, the preprocessor
*************** Options::.  Options to control preproces
*** 17247,17310 ****
       directory emitted as the current working directory in some
       debugging information formats.  This option is implicitly enabled
       if debugging information is enabled, but this can be inhibited with
!      the negated form '-fno-working-directory'.  If the '-P' flag is
       present in the command line, this option has no effect, since no
!      '#line' directives are emitted whatsoever.
  
! '-A PREDICATE=ANSWER'
       Make an assertion with the predicate PREDICATE and answer ANSWER.
!      This form is preferred to the older form '-A PREDICATE(ANSWER)',
       which is still supported, because it does not use shell special
       characters.
  
! '-A -PREDICATE=ANSWER'
       Cancel an assertion with the predicate PREDICATE and answer ANSWER.
  
! '-C'
       Do not discard comments.  All comments are passed through to the
       output file, except for comments in processed directives, which are
       deleted along with the directive.
  
!      You should be prepared for side effects when using '-C'; it causes
       the preprocessor to treat comments as tokens in their own right.
       For example, comments appearing at the start of what would be a
       directive line have the effect of turning that line into an
       ordinary source line, since the first token on the line is no
!      longer a '#'.
  
! '-CC'
       Do not discard comments, including during macro expansion.  This is
!      like '-C', except that comments contained within macros are also
       passed through to the output file where the macro is expanded.
  
!      In addition to the side effects of the '-C' option, the '-CC'
       option causes all C++-style comments inside a macro to be converted
       to C-style comments.  This is to prevent later use of that macro
       from inadvertently commenting out the remainder of the source line.
  
!      The '-CC' option is generally used to support lint comments.
  
! '-P'
       Inhibit generation of linemarkers in the output from the
       preprocessor.  This might be useful when running the preprocessor
       on something that is not C code, and will be sent to a program
       which might be confused by the linemarkers.
  
! '-traditional'
! '-traditional-cpp'
  
       Try to imitate the behavior of pre-standard C preprocessors, as
       opposed to ISO C preprocessors.  See the GNU CPP manual for
       details.
  
       Note that GCC does not otherwise attempt to emulate a pre-standard
!      C compiler, and these options are only supported with the '-E'
       switch, or when invoking CPP explicitly.
  
! '-trigraphs'
       Support ISO C trigraphs.  These are three-character sequences, all
!      starting with '??', that are defined by ISO C to stand for single
!      characters.  For example, '??/' stands for '\', so ''??/n'' is a
       character constant for a newline.
  
       The nine trigraphs and their replacements are
--- 17251,17314 ----
       directory emitted as the current working directory in some
       debugging information formats.  This option is implicitly enabled
       if debugging information is enabled, but this can be inhibited with
!      the negated form ‘-fno-working-directory’.  If the ‘-P’ flag is
       present in the command line, this option has no effect, since no
!      ‘#line’ directives are emitted whatsoever.
  
! ‘-A PREDICATE=ANSWER’
       Make an assertion with the predicate PREDICATE and answer ANSWER.
!      This form is preferred to the older form ‘-A PREDICATE(ANSWER)’,
       which is still supported, because it does not use shell special
       characters.
  
! ‘-A -PREDICATE=ANSWER’
       Cancel an assertion with the predicate PREDICATE and answer ANSWER.
  
! ‘-C’
       Do not discard comments.  All comments are passed through to the
       output file, except for comments in processed directives, which are
       deleted along with the directive.
  
!      You should be prepared for side effects when using ‘-C’; it causes
       the preprocessor to treat comments as tokens in their own right.
       For example, comments appearing at the start of what would be a
       directive line have the effect of turning that line into an
       ordinary source line, since the first token on the line is no
!      longer a ‘#’.
  
! ‘-CC’
       Do not discard comments, including during macro expansion.  This is
!      like ‘-C’, except that comments contained within macros are also
       passed through to the output file where the macro is expanded.
  
!      In addition to the side effects of the ‘-C’ option, the ‘-CC’
       option causes all C++-style comments inside a macro to be converted
       to C-style comments.  This is to prevent later use of that macro
       from inadvertently commenting out the remainder of the source line.
  
!      The ‘-CC’ option is generally used to support lint comments.
  
! ‘-P’
       Inhibit generation of linemarkers in the output from the
       preprocessor.  This might be useful when running the preprocessor
       on something that is not C code, and will be sent to a program
       which might be confused by the linemarkers.
  
! ‘-traditional’
! ‘-traditional-cpp’
  
       Try to imitate the behavior of pre-standard C preprocessors, as
       opposed to ISO C preprocessors.  See the GNU CPP manual for
       details.
  
       Note that GCC does not otherwise attempt to emulate a pre-standard
!      C compiler, and these options are only supported with the ‘-E’
       switch, or when invoking CPP explicitly.
  
! ‘-trigraphs’
       Support ISO C trigraphs.  These are three-character sequences, all
!      starting with ‘??’, that are defined by ISO C to stand for single
!      characters.  For example, ‘??/’ stands for ‘\’, so ‘'??/n'’ is a
       character constant for a newline.
  
       The nine trigraphs and their replacements are
*************** Options::.  Options to control preproces
*** 17313,17332 ****
            Replacement:      [    ]    {    }    #    \    ^    |    ~
  
       By default, GCC ignores trigraphs, but in standard-conforming modes
!      it converts them.  See the '-std' and '-ansi' options.
  
! '-remap'
       Enable special code to work around file systems which only permit
       very short file names, such as MS-DOS.
  
! '-H'
       Print the name of each header file used, in addition to other
       normal activities.  Each name is indented to show how deep in the
!      '#include' stack it is.  Precompiled header files are also printed,
       even if they are found to be invalid; an invalid precompiled header
!      file is printed with '...x' and a valid one with '...!' .
  
! '-dLETTERS'
       Says to make debugging dumps during compilation as specified by
       LETTERS.  The flags documented here are those relevant to the
       preprocessor.  Other LETTERS are interpreted by the compiler
--- 17317,17336 ----
            Replacement:      [    ]    {    }    #    \    ^    |    ~
  
       By default, GCC ignores trigraphs, but in standard-conforming modes
!      it converts them.  See the ‘-std’ and ‘-ansi’ options.
  
! ‘-remap’
       Enable special code to work around file systems which only permit
       very short file names, such as MS-DOS.
  
! ‘-H’
       Print the name of each header file used, in addition to other
       normal activities.  Each name is indented to show how deep in the
!      ‘#include’ stack it is.  Precompiled header files are also printed,
       even if they are found to be invalid; an invalid precompiled header
!      file is printed with ‘...x’ and a valid one with ‘...!’ .
  
! ‘-dLETTERS’
       Says to make debugging dumps during compilation as specified by
       LETTERS.  The flags documented here are those relevant to the
       preprocessor.  Other LETTERS are interpreted by the compiler
*************** Options::.  Options to control preproces
*** 17335,17416 ****
       result is undefined.  *Note Developer Options::, for more
       information.
  
!      '-dM'
!           Instead of the normal output, generate a list of '#define'
            directives for all the macros defined during the execution of
            the preprocessor, including predefined macros.  This gives you
            a way of finding out what is predefined in your version of the
!           preprocessor.  Assuming you have no file 'foo.h', the command
  
                 touch foo.h; cpp -dM foo.h
  
            shows all the predefined macros.
  
!           If you use '-dM' without the '-E' option, '-dM' is interpreted
!           as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Developer
            Options::.
  
!      '-dD'
!           Like '-dM' except that it outputs _both_ the '#define'
            directives and the result of preprocessing.  Both kinds of
            output go to the standard output file.
  
!      '-dN'
!           Like '-dD', but emit only the macro names, not their
            expansions.
  
!      '-dI'
!           Output '#include' directives in addition to the result of
            preprocessing.
  
!      '-dU'
!           Like '-dD' except that only macros that are expanded, or whose
            definedness is tested in preprocessor directives, are output;
            the output is delayed until the use or test of the macro; and
!           '#undef' directives are also output for macros tested but
            undefined at the time.
  
! '-fdebug-cpp'
       This option is only useful for debugging GCC. When used from CPP or
!      with '-E', it dumps debugging information about location maps.
       Every token in the output is preceded by the dump of the map its
       location belongs to.
  
!      When used from GCC without '-E', this option has no effect.
  
! '-Wp,OPTION'
!      You can use '-Wp,OPTION' to bypass the compiler driver and pass
       OPTION directly through to the preprocessor.  If OPTION contains
       commas, it is split into multiple options at the commas.  However,
       many options are modified, translated or interpreted by the
!      compiler driver before being passed to the preprocessor, and '-Wp'
       forcibly bypasses this phase.  The preprocessor's direct interface
       is undocumented and subject to change, so whenever possible you
!      should avoid using '-Wp' and let the driver handle the options
       instead.
  
! '-Xpreprocessor OPTION'
       Pass OPTION as an option to the preprocessor.  You can use this to
       supply system-specific preprocessor options that GCC does not
       recognize.
  
       If you want to pass an option that takes an argument, you must use
!      '-Xpreprocessor' twice, once for the option and once for the
       argument.
  
! '-no-integrated-cpp'
       Perform preprocessing as a separate pass before compilation.  By
       default, GCC performs preprocessing as an integrated part of input
       tokenization and parsing.  If this option is provided, the
!      appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
       C, C++, and Objective-C, respectively) is instead invoked twice,
       once for preprocessing only and once for actual compilation of the
       preprocessed input.  This option may be useful in conjunction with
!      the '-B' or '-wrapper' options to specify an alternate preprocessor
       or perform additional processing of the program source between
       normal preprocessing and compilation.
  
! '-flarge-source-files'
       Adjust GCC to expect large source files, at the expense of slower
       compilation and higher memory usage.
  
--- 17339,17420 ----
       result is undefined.  *Note Developer Options::, for more
       information.
  
!      ‘-dM’
!           Instead of the normal output, generate a list of ‘#define’
            directives for all the macros defined during the execution of
            the preprocessor, including predefined macros.  This gives you
            a way of finding out what is predefined in your version of the
!           preprocessor.  Assuming you have no file ‘foo.h’, the command
  
                 touch foo.h; cpp -dM foo.h
  
            shows all the predefined macros.
  
!           If you use ‘-dM’ without the ‘-E’ option, ‘-dM’ is interpreted
!           as a synonym for ‘-fdump-rtl-mach’.  *Note (gcc)Developer
            Options::.
  
!      ‘-dD’
!           Like ‘-dM’ except that it outputs _both_ the ‘#define’
            directives and the result of preprocessing.  Both kinds of
            output go to the standard output file.
  
!      ‘-dN’
!           Like ‘-dD’, but emit only the macro names, not their
            expansions.
  
!      ‘-dI’
!           Output ‘#include’ directives in addition to the result of
            preprocessing.
  
!      ‘-dU’
!           Like ‘-dD’ except that only macros that are expanded, or whose
            definedness is tested in preprocessor directives, are output;
            the output is delayed until the use or test of the macro; and
!           ‘#undef’ directives are also output for macros tested but
            undefined at the time.
  
! ‘-fdebug-cpp’
       This option is only useful for debugging GCC. When used from CPP or
!      with ‘-E’, it dumps debugging information about location maps.
       Every token in the output is preceded by the dump of the map its
       location belongs to.
  
!      When used from GCC without ‘-E’, this option has no effect.
  
! ‘-Wp,OPTION’
!      You can use ‘-Wp,OPTION’ to bypass the compiler driver and pass
       OPTION directly through to the preprocessor.  If OPTION contains
       commas, it is split into multiple options at the commas.  However,
       many options are modified, translated or interpreted by the
!      compiler driver before being passed to the preprocessor, and ‘-Wp’
       forcibly bypasses this phase.  The preprocessor's direct interface
       is undocumented and subject to change, so whenever possible you
!      should avoid using ‘-Wp’ and let the driver handle the options
       instead.
  
! ‘-Xpreprocessor OPTION’
       Pass OPTION as an option to the preprocessor.  You can use this to
       supply system-specific preprocessor options that GCC does not
       recognize.
  
       If you want to pass an option that takes an argument, you must use
!      ‘-Xpreprocessor’ twice, once for the option and once for the
       argument.
  
! ‘-no-integrated-cpp’
       Perform preprocessing as a separate pass before compilation.  By
       default, GCC performs preprocessing as an integrated part of input
       tokenization and parsing.  If this option is provided, the
!      appropriate language front end (‘cc1’, ‘cc1plus’, or ‘cc1obj’ for
       C, C++, and Objective-C, respectively) is instead invoked twice,
       once for preprocessing only and once for actual compilation of the
       preprocessed input.  This option may be useful in conjunction with
!      the ‘-B’ or ‘-wrapper’ options to specify an alternate preprocessor
       or perform additional processing of the program source between
       normal preprocessing and compilation.
  
! ‘-flarge-source-files’
       Adjust GCC to expect large source files, at the expense of slower
       compilation and higher memory usage.
  
*************** Options::.  Options to control preproces
*** 17420,17428 ****
       number of source lines, it stops tracking column numbers and only
       tracks line numbers.  This means that diagnostics for later lines
       do not include column numbers.  It also means that options like
!      '-Wmisleading-indentation' cease to work at that point, although
       the compiler prints a note if this happens.  Passing
!      '-flarge-source-files' significantly increases the number of source
       lines that GCC can process before it stops tracking columns.
  
  
--- 17424,17432 ----
       number of source lines, it stops tracking column numbers and only
       tracks line numbers.  This means that diagnostics for later lines
       do not include column numbers.  It also means that options like
!      ‘-Wmisleading-indentation’ cease to work at that point, although
       the compiler prints a note if this happens.  Passing
!      ‘-flarge-source-files’ significantly increases the number of source
       lines that GCC can process before it stops tracking columns.
  
  
*************** File: gcc.info,  Node: Assembler Options
*** 17433,17449 ****
  
  You can pass options to the assembler.
  
! '-Wa,OPTION'
       Pass OPTION as an option to the assembler.  If OPTION contains
       commas, it is split into multiple options at the commas.
  
! '-Xassembler OPTION'
       Pass OPTION as an option to the assembler.  You can use this to
       supply system-specific assembler options that GCC does not
       recognize.
  
       If you want to pass an option that takes an argument, you must use
!      '-Xassembler' twice, once for the option and once for the argument.
  
  
  File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
--- 17437,17453 ----
  
  You can pass options to the assembler.
  
! ‘-Wa,OPTION’
       Pass OPTION as an option to the assembler.  If OPTION contains
       commas, it is split into multiple options at the commas.
  
! ‘-Xassembler OPTION’
       Pass OPTION as an option to the assembler.  You can use this to
       supply system-specific assembler options that GCC does not
       recognize.
  
       If you want to pass an option that takes an argument, you must use
!      ‘-Xassembler’ twice, once for the option and once for the argument.
  
  
  File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
*************** These options come into play when the co
*** 17455,17498 ****
  an executable output file.  They are meaningless if the compiler is not
  doing a link step.
  
! 'OBJECT-FILE-NAME'
       A file name that does not end in a special recognized suffix is
       considered to name an object file or library.  (Object files are
       distinguished from libraries by the linker according to the file
       contents.)  If linking is done, these object files are used as
       input to the linker.
  
! '-c'
! '-S'
! '-E'
       If any of these options is used, then the linker is not run, and
       object file names should not be used as arguments.  *Note Overall
       Options::.
  
! '-flinker-output=TYPE'
       This option controls code generation of the link-time optimizer.
       By default the linker output is automatically determined by the
       linker plugin.  For debugging the compiler and if incremental
       linking with a non-LTO object file is desired, it may be useful to
       control the type manually.
  
!      If TYPE is 'exec', code generation produces a static binary.  In
!      this case '-fpic' and '-fpie' are both disabled.
  
!      If TYPE is 'dyn', code generation produces a shared library.  In
!      this case '-fpic' or '-fPIC' is preserved, but not enabled
       automatically.  This allows to build shared libraries without
       position-independent code on architectures where this is possible,
       i.e. on x86.
  
!      If TYPE is 'pie', code generation produces an '-fpie' executable.
!      This results in similar optimizations as 'exec' except that '-fpie'
       is not disabled if specified at compilation time.
  
!      If TYPE is 'rel', the compiler assumes that incremental linking is
       done.  The sections containing intermediate code for link-time
       optimization are merged, pre-optimized, and output to the resulting
!      object file.  In addition, if '-ffat-lto-objects' is specified,
       binary code is produced for future non-LTO linking.  The object
       file produced by incremental linking is smaller than a static
       library produced from the same object files.  At link time the
--- 17459,17502 ----
  an executable output file.  They are meaningless if the compiler is not
  doing a link step.
  
! ‘OBJECT-FILE-NAME’
       A file name that does not end in a special recognized suffix is
       considered to name an object file or library.  (Object files are
       distinguished from libraries by the linker according to the file
       contents.)  If linking is done, these object files are used as
       input to the linker.
  
! ‘-c’
! ‘-S’
! ‘-E’
       If any of these options is used, then the linker is not run, and
       object file names should not be used as arguments.  *Note Overall
       Options::.
  
! ‘-flinker-output=TYPE’
       This option controls code generation of the link-time optimizer.
       By default the linker output is automatically determined by the
       linker plugin.  For debugging the compiler and if incremental
       linking with a non-LTO object file is desired, it may be useful to
       control the type manually.
  
!      If TYPE is ‘exec’, code generation produces a static binary.  In
!      this case ‘-fpic’ and ‘-fpie’ are both disabled.
  
!      If TYPE is ‘dyn’, code generation produces a shared library.  In
!      this case ‘-fpic’ or ‘-fPIC’ is preserved, but not enabled
       automatically.  This allows to build shared libraries without
       position-independent code on architectures where this is possible,
       i.e. on x86.
  
!      If TYPE is ‘pie’, code generation produces an ‘-fpie’ executable.
!      This results in similar optimizations as ‘exec’ except that ‘-fpie’
       is not disabled if specified at compilation time.
  
!      If TYPE is ‘rel’, the compiler assumes that incremental linking is
       done.  The sections containing intermediate code for link-time
       optimization are merged, pre-optimized, and output to the resulting
!      object file.  In addition, if ‘-ffat-lto-objects’ is specified,
       binary code is produced for future non-LTO linking.  The object
       file produced by incremental linking is smaller than a static
       library produced from the same object files.  At link time the
*************** doing a link step.
*** 17500,17506 ****
       library assuming that the majority of objects in the library are
       used.
  
!      Finally 'nolto-rel' configures the compiler for incremental linking
       where code generation is forced, a final binary is produced, and
       the intermediate code for later link-time optimization is stripped.
       When multiple object files are linked together the resulting code
--- 17504,17510 ----
       library assuming that the majority of objects in the library are
       used.
  
!      Finally ‘nolto-rel’ configures the compiler for incremental linking
       where code generation is forced, a final binary is produced, and
       the intermediate code for later link-time optimization is stripped.
       When multiple object files are linked together the resulting code
*************** doing a link step.
*** 17508,17817 ****
       example, cross-module inlining happens), but most of benefits of
       whole program optimizations are lost.
  
!      During the incremental link (by '-r') the linker plugin defaults to
!      'rel'.  With current interfaces to GNU Binutils it is however not
       possible to incrementally link LTO objects and non-LTO objects into
       a single mixed object file.  If any of object files in incremental
       link cannot be used for link-time optimization, the linker plugin
!      issues a warning and uses 'nolto-rel'.  To maintain whole program
       optimization, it is recommended to link such objects into static
       library instead.  Alternatively it is possible to use H.J. Lu's
       binutils with support for mixed objects.
  
! '-fuse-ld=bfd'
!      Use the 'bfd' linker instead of the default linker.
  
! '-fuse-ld=gold'
!      Use the 'gold' linker instead of the default linker.
  
! '-fuse-ld=lld'
!      Use the LLVM 'lld' linker instead of the default linker.
  
! '-fuse-ld=mold'
!      Use the Modern Linker ('mold') instead of the default linker.
  
! '-lLIBRARY'
! '-l LIBRARY'
       Search the library named LIBRARY when linking.  (The second
       alternative with the library as a separate argument is only for
       POSIX compliance and is not recommended.)
  
!      The '-l' option is passed directly to the linker by GCC. Refer to
       your linker documentation for exact details.  The general
       description below applies to the GNU linker.
  
       The linker searches a standard list of directories for the library.
       The directories searched include several standard system
!      directories plus any that you specify with '-L'.
  
       Static libraries are archives of object files, and have file names
!      like 'libLIBRARY.a'.  Some targets also support shared libraries,
!      which typically have names like 'libLIBRARY.so'.  If both static
       and shared libraries are found, the linker gives preference to
!      linking with the shared library unless the '-static' option is
       used.
  
       It makes a difference where in the command you write this option;
       the linker searches and processes libraries and object files in the
!      order they are specified.  Thus, 'foo.o -lz bar.o' searches library
!      'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
!      functions in 'z', those functions may not be loaded.
  
! '-lobjc'
!      You need this special case of the '-l' option in order to link an
       Objective-C or Objective-C++ program.
  
! '-nostartfiles'
       Do not use the standard system startup files when linking.  The
!      standard system libraries are used normally, unless '-nostdlib',
!      '-nolibc', or '-nodefaultlibs' is used.
  
! '-nodefaultlibs'
       Do not use the standard system libraries when linking.  Only the
       libraries you specify are passed to the linker, and options
       specifying linkage of the system libraries, such as
!      '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
!      startup files are used normally, unless '-nostartfiles' is used.
  
!      The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
!      'memmove'.  These entries are usually resolved by entries in libc.
       These entry points should be supplied through some other mechanism
       when this option is specified.
  
! '-nolibc'
       Do not use the C library or system libraries tightly coupled with
!      it when linking.  Still link with the startup files, 'libgcc' or
!      toolchain provided language support libraries such as 'libgnat',
!      'libgfortran' or 'libstdc++' unless options preventing their
!      inclusion are used as well.  This typically removes '-lc' from the
       link command line, as well as system libraries that normally go
       with it and become meaningless when absence of a C library is
!      assumed, for example '-lpthread' or '-lm' in some configurations.
       This is intended for bare-board targets when there is indeed no C
       library available.
  
! '-nostdlib'
       Do not use the standard system startup files or libraries when
       linking.  No startup files and only the libraries you specify are
       passed to the linker, and options specifying linkage of the system
!      libraries, such as '-static-libgcc' or '-shared-libgcc', are
       ignored.
  
!      The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
!      'memmove'.  These entries are usually resolved by entries in libc.
       These entry points should be supplied through some other mechanism
       when this option is specified.
  
!      One of the standard libraries bypassed by '-nostdlib' and
!      '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
       which GCC uses to overcome shortcomings of particular machines, or
       special needs for some languages.  (*Note Interfacing to GCC
!      Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
!      most cases, you need 'libgcc.a' even when you want to avoid other
!      standard libraries.  In other words, when you specify '-nostdlib'
!      or '-nodefaultlibs' you should usually specify '-lgcc' as well.
       This ensures that you have no unresolved references to internal GCC
       library subroutines.  (An example of such an internal subroutine is
!      '__main', used to ensure C++ constructors are called; *note
!      'collect2': (gccint)Collect2.)
  
! '-nostdlib++'
       Do not implicitly link with standard C++ libraries.
  
! '-e ENTRY'
! '--entry=ENTRY'
  
       Specify that the program entry point is ENTRY.  The argument is
       interpreted by the linker; the GNU linker accepts either a symbol
       name or an address.
  
! '-pie'
       Produce a dynamically linked position independent executable on
       targets that support it.  For predictable results, you must also
!      specify the same set of options used for compilation ('-fpie',
!      '-fPIE', or model suboptions) when you specify this linker option.
  
! '-no-pie'
       Don't produce a dynamically linked position independent executable.
  
! '-static-pie'
       Produce a static position independent executable on targets that
       support it.  A static position independent executable is similar to
       a static executable, but can be loaded at any address without a
       dynamic linker.  For predictable results, you must also specify the
!      same set of options used for compilation ('-fpie', '-fPIE', or
       model suboptions) when you specify this linker option.
  
! '-pthread'
       Link with the POSIX threads library.  This option is supported on
       GNU/Linux targets, most other Unix derivatives, and also on x86
       Cygwin and MinGW targets.  On some targets this option also sets
       flags for the preprocessor, so it should be used consistently for
       both compilation and linking.
  
! '-r'
       Produce a relocatable object as output.  This is also known as
       partial linking.
  
! '-rdynamic'
!      Pass the flag '-export-dynamic' to the ELF linker, on targets that
       support it.  This instructs the linker to add all symbols, not only
       used ones, to the dynamic symbol table.  This option is needed for
!      some uses of 'dlopen' or to allow obtaining backtraces from within
       a program.
  
! '-s'
       Remove all symbol table and relocation information from the
       executable.
  
! '-static'
!      On systems that support dynamic linking, this overrides '-pie' and
       prevents linking with the shared libraries.  On other systems, this
       option has no effect.
  
! '-shared'
       Produce a shared object which can then be linked with other objects
       to form an executable.  Not all systems support this option.  For
       predictable results, you must also specify the same set of options
!      used for compilation ('-fpic', '-fPIC', or model suboptions) when
       you specify this linker option.(1)
  
! '-shared-libgcc'
! '-static-libgcc'
!      On systems that provide 'libgcc' as a shared library, these options
       force the use of either the shared or static version, respectively.
!      If no shared version of 'libgcc' was built when the compiler was
       configured, these options have no effect.
  
       There are several situations in which an application should use the
!      shared 'libgcc' instead of the static version.  The most common of
       these is when the application wishes to throw and catch exceptions
       across different shared libraries.  In that case, each of the
       libraries as well as the application itself should use the shared
!      'libgcc'.
  
!      Therefore, the G++ driver automatically adds '-shared-libgcc'
       whenever you build a shared library or a main executable, because
       C++ programs typically use exceptions, so this is the right thing
       to do.
  
       If, instead, you use the GCC driver to create shared libraries, you
!      may find that they are not always linked with the shared 'libgcc'.
       If GCC finds, at its configuration time, that you have a non-GNU
       linker or a GNU linker that does not support option
!      '--eh-frame-hdr', it links the shared version of 'libgcc' into
       shared libraries by default.  Otherwise, it takes advantage of the
       linker and optimizes away the linking with the shared version of
!      'libgcc', linking with the static version of libgcc by default.
       This allows exceptions to propagate through such shared libraries,
       without incurring relocation costs at library load time.
  
       However, if a library or main executable is supposed to throw or
       catch exceptions, you must link it using the G++ driver, or using
!      the option '-shared-libgcc', such that it is linked with the shared
!      'libgcc'.
  
! '-static-libasan'
!      When the '-fsanitize=address' option is used to link a program, the
!      GCC driver automatically links against 'libasan'.  If 'libasan' is
!      available as a shared library, and the '-static' option is not
!      used, then this links against the shared version of 'libasan'.  The
!      '-static-libasan' option directs the GCC driver to link 'libasan'
       statically, without necessarily linking other libraries statically.
  
! '-static-libtsan'
!      When the '-fsanitize=thread' option is used to link a program, the
!      GCC driver automatically links against 'libtsan'.  If 'libtsan' is
!      available as a shared library, and the '-static' option is not
!      used, then this links against the shared version of 'libtsan'.  The
!      '-static-libtsan' option directs the GCC driver to link 'libtsan'
       statically, without necessarily linking other libraries statically.
  
! '-static-liblsan'
!      When the '-fsanitize=leak' option is used to link a program, the
!      GCC driver automatically links against 'liblsan'.  If 'liblsan' is
!      available as a shared library, and the '-static' option is not
!      used, then this links against the shared version of 'liblsan'.  The
!      '-static-liblsan' option directs the GCC driver to link 'liblsan'
       statically, without necessarily linking other libraries statically.
  
! '-static-libubsan'
!      When the '-fsanitize=undefined' option is used to link a program,
!      the GCC driver automatically links against 'libubsan'.  If
!      'libubsan' is available as a shared library, and the '-static'
       option is not used, then this links against the shared version of
!      'libubsan'.  The '-static-libubsan' option directs the GCC driver
!      to link 'libubsan' statically, without necessarily linking other
       libraries statically.
  
! '-static-libstdc++'
!      When the 'g++' program is used to link a C++ program, it normally
!      automatically links against 'libstdc++'.  If 'libstdc++' is
!      available as a shared library, and the '-static' option is not
!      used, then this links against the shared version of 'libstdc++'.
       That is normally fine.  However, it is sometimes useful to freeze
!      the version of 'libstdc++' used by the program without going all
!      the way to a fully static link.  The '-static-libstdc++' option
!      directs the 'g++' driver to link 'libstdc++' statically, without
       necessarily linking other libraries statically.
  
! '-symbolic'
       Bind references to global symbols when building a shared object.
       Warn about any unresolved references (unless overridden by the link
!      editor option '-Xlinker -z -Xlinker defs').  Only a few systems
       support this option.
  
! '-T SCRIPT'
       Use SCRIPT as the linker script.  This option is supported by most
       systems using the GNU linker.  On some targets, such as bare-board
!      targets without an operating system, the '-T' option may be
       required when linking to avoid references to undefined symbols.
  
! '-Xlinker OPTION'
       Pass OPTION as an option to the linker.  You can use this to supply
       system-specific linker options that GCC does not recognize.
  
       If you want to pass an option that takes a separate argument, you
!      must use '-Xlinker' twice, once for the option and once for the
!      argument.  For example, to pass '-assert definitions', you must
!      write '-Xlinker -assert -Xlinker definitions'.  It does not work to
!      write '-Xlinker "-assert definitions"', because this passes the
       entire string as a single argument, which is not what the linker
       expects.
  
       When using the GNU linker, it is usually more convenient to pass
!      arguments to linker options using the 'OPTION=VALUE' syntax than as
!      separate arguments.  For example, you can specify '-Xlinker
!      -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
       Other linkers may not support this syntax for command-line options.
  
! '-Wl,OPTION'
       Pass OPTION as an option to the linker.  If OPTION contains commas,
       it is split into multiple options at the commas.  You can use this
       syntax to pass an argument to the option.  For example,
!      '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
       using the GNU linker, you can also get the same effect with
!      '-Wl,-Map=output.map'.
  
! '-u SYMBOL'
       Pretend the symbol SYMBOL is undefined, to force linking of library
!      modules to define it.  You can use '-u' multiple times with
       different symbols to force loading of additional library modules.
  
! '-z KEYWORD'
!      '-z' is passed directly on to the linker along with the keyword
       KEYWORD.  See the section in the documentation of your linker for
       permitted values and their meanings.
  
     ---------- Footnotes ----------
  
!    (1) On some systems, 'gcc -shared' needs to build supplementary stub
! code for constructors to work.  On multi-libbed systems, 'gcc -shared'
  must select the correct support libraries to link against.  Failing to
  supply the correct flags may lead to subtle defects.  Supplying them in
! cases where they are not necessary is innocuous.  '-shared' suppresses
  the addition of startup code to alter the floating-point environment as
! done with '-ffast-math', '-Ofast' or '-funsafe-math-optimizations' on
  some targets.
  
  
--- 17512,17821 ----
       example, cross-module inlining happens), but most of benefits of
       whole program optimizations are lost.
  
!      During the incremental link (by ‘-r’) the linker plugin defaults to
!      ‘rel’.  With current interfaces to GNU Binutils it is however not
       possible to incrementally link LTO objects and non-LTO objects into
       a single mixed object file.  If any of object files in incremental
       link cannot be used for link-time optimization, the linker plugin
!      issues a warning and uses ‘nolto-rel’.  To maintain whole program
       optimization, it is recommended to link such objects into static
       library instead.  Alternatively it is possible to use H.J. Lu's
       binutils with support for mixed objects.
  
! ‘-fuse-ld=bfd’
!      Use the ‘bfd’ linker instead of the default linker.
  
! ‘-fuse-ld=gold’
!      Use the ‘gold’ linker instead of the default linker.
  
! ‘-fuse-ld=lld’
!      Use the LLVM ‘lld’ linker instead of the default linker.
  
! ‘-fuse-ld=mold’
!      Use the Modern Linker (‘mold’) instead of the default linker.
  
! ‘-lLIBRARY’
! ‘-l LIBRARY’
       Search the library named LIBRARY when linking.  (The second
       alternative with the library as a separate argument is only for
       POSIX compliance and is not recommended.)
  
!      The ‘-l’ option is passed directly to the linker by GCC. Refer to
       your linker documentation for exact details.  The general
       description below applies to the GNU linker.
  
       The linker searches a standard list of directories for the library.
       The directories searched include several standard system
!      directories plus any that you specify with ‘-L’.
  
       Static libraries are archives of object files, and have file names
!      like ‘libLIBRARY.a’.  Some targets also support shared libraries,
!      which typically have names like ‘libLIBRARY.so’.  If both static
       and shared libraries are found, the linker gives preference to
!      linking with the shared library unless the ‘-static’ option is
       used.
  
       It makes a difference where in the command you write this option;
       the linker searches and processes libraries and object files in the
!      order they are specified.  Thus, ‘foo.o -lz bar.o’ searches library
!      ‘z’ after file ‘foo.o’ but before ‘bar.o’.  If ‘bar.o’ refers to
!      functions in ‘z’, those functions may not be loaded.
  
! ‘-lobjc’
!      You need this special case of the ‘-l’ option in order to link an
       Objective-C or Objective-C++ program.
  
! ‘-nostartfiles’
       Do not use the standard system startup files when linking.  The
!      standard system libraries are used normally, unless ‘-nostdlib’,
!      ‘-nolibc’, or ‘-nodefaultlibs’ is used.
  
! ‘-nodefaultlibs’
       Do not use the standard system libraries when linking.  Only the
       libraries you specify are passed to the linker, and options
       specifying linkage of the system libraries, such as
!      ‘-static-libgcc’ or ‘-shared-libgcc’, are ignored.  The standard
!      startup files are used normally, unless ‘-nostartfiles’ is used.
  
!      The compiler may generate calls to ‘memcmp’, ‘memset’, ‘memcpy’ and
!      ‘memmove’.  These entries are usually resolved by entries in libc.
       These entry points should be supplied through some other mechanism
       when this option is specified.
  
! ‘-nolibc’
       Do not use the C library or system libraries tightly coupled with
!      it when linking.  Still link with the startup files, ‘libgcc’ or
!      toolchain provided language support libraries such as ‘libgnat’,
!      ‘libgfortran’ or ‘libstdc++’ unless options preventing their
!      inclusion are used as well.  This typically removes ‘-lc’ from the
       link command line, as well as system libraries that normally go
       with it and become meaningless when absence of a C library is
!      assumed, for example ‘-lpthread’ or ‘-lm’ in some configurations.
       This is intended for bare-board targets when there is indeed no C
       library available.
  
! ‘-nostdlib’
       Do not use the standard system startup files or libraries when
       linking.  No startup files and only the libraries you specify are
       passed to the linker, and options specifying linkage of the system
!      libraries, such as ‘-static-libgcc’ or ‘-shared-libgcc’, are
       ignored.
  
!      The compiler may generate calls to ‘memcmp’, ‘memset’, ‘memcpy’ and
!      ‘memmove’.  These entries are usually resolved by entries in libc.
       These entry points should be supplied through some other mechanism
       when this option is specified.
  
!      One of the standard libraries bypassed by ‘-nostdlib’ and
!      ‘-nodefaultlibs’ is ‘libgcc.a’, a library of internal subroutines
       which GCC uses to overcome shortcomings of particular machines, or
       special needs for some languages.  (*Note Interfacing to GCC
!      Output: (gccint)Interface, for more discussion of ‘libgcc.a’.)  In
!      most cases, you need ‘libgcc.a’ even when you want to avoid other
!      standard libraries.  In other words, when you specify ‘-nostdlib’
!      or ‘-nodefaultlibs’ you should usually specify ‘-lgcc’ as well.
       This ensures that you have no unresolved references to internal GCC
       library subroutines.  (An example of such an internal subroutine is
!      ‘__main’, used to ensure C++ constructors are called; *note
!      ‘collect2’: (gccint)Collect2.)
  
! ‘-nostdlib++’
       Do not implicitly link with standard C++ libraries.
  
! ‘-e ENTRY’
! ‘--entry=ENTRY’
  
       Specify that the program entry point is ENTRY.  The argument is
       interpreted by the linker; the GNU linker accepts either a symbol
       name or an address.
  
! ‘-pie’
       Produce a dynamically linked position independent executable on
       targets that support it.  For predictable results, you must also
!      specify the same set of options used for compilation (‘-fpie’,
!      ‘-fPIE’, or model suboptions) when you specify this linker option.
  
! ‘-no-pie’
       Don't produce a dynamically linked position independent executable.
  
! ‘-static-pie’
       Produce a static position independent executable on targets that
       support it.  A static position independent executable is similar to
       a static executable, but can be loaded at any address without a
       dynamic linker.  For predictable results, you must also specify the
!      same set of options used for compilation (‘-fpie’, ‘-fPIE’, or
       model suboptions) when you specify this linker option.
  
! ‘-pthread’
       Link with the POSIX threads library.  This option is supported on
       GNU/Linux targets, most other Unix derivatives, and also on x86
       Cygwin and MinGW targets.  On some targets this option also sets
       flags for the preprocessor, so it should be used consistently for
       both compilation and linking.
  
! ‘-r’
       Produce a relocatable object as output.  This is also known as
       partial linking.
  
! ‘-rdynamic’
!      Pass the flag ‘-export-dynamic’ to the ELF linker, on targets that
       support it.  This instructs the linker to add all symbols, not only
       used ones, to the dynamic symbol table.  This option is needed for
!      some uses of ‘dlopen’ or to allow obtaining backtraces from within
       a program.
  
! ‘-s’
       Remove all symbol table and relocation information from the
       executable.
  
! ‘-static’
!      On systems that support dynamic linking, this overrides ‘-pie’ and
       prevents linking with the shared libraries.  On other systems, this
       option has no effect.
  
! ‘-shared’
       Produce a shared object which can then be linked with other objects
       to form an executable.  Not all systems support this option.  For
       predictable results, you must also specify the same set of options
!      used for compilation (‘-fpic’, ‘-fPIC’, or model suboptions) when
       you specify this linker option.(1)
  
! ‘-shared-libgcc’
! ‘-static-libgcc’
!      On systems that provide ‘libgcc’ as a shared library, these options
       force the use of either the shared or static version, respectively.
!      If no shared version of ‘libgcc’ was built when the compiler was
       configured, these options have no effect.
  
       There are several situations in which an application should use the
!      shared ‘libgcc’ instead of the static version.  The most common of
       these is when the application wishes to throw and catch exceptions
       across different shared libraries.  In that case, each of the
       libraries as well as the application itself should use the shared
!      ‘libgcc’.
  
!      Therefore, the G++ driver automatically adds ‘-shared-libgcc’
       whenever you build a shared library or a main executable, because
       C++ programs typically use exceptions, so this is the right thing
       to do.
  
       If, instead, you use the GCC driver to create shared libraries, you
!      may find that they are not always linked with the shared ‘libgcc’.
       If GCC finds, at its configuration time, that you have a non-GNU
       linker or a GNU linker that does not support option
!      ‘--eh-frame-hdr’, it links the shared version of ‘libgcc’ into
       shared libraries by default.  Otherwise, it takes advantage of the
       linker and optimizes away the linking with the shared version of
!      ‘libgcc’, linking with the static version of libgcc by default.
       This allows exceptions to propagate through such shared libraries,
       without incurring relocation costs at library load time.
  
       However, if a library or main executable is supposed to throw or
       catch exceptions, you must link it using the G++ driver, or using
!      the option ‘-shared-libgcc’, such that it is linked with the shared
!      ‘libgcc’.
  
! ‘-static-libasan’
!      When the ‘-fsanitize=address’ option is used to link a program, the
!      GCC driver automatically links against ‘libasan’.  If ‘libasan’ is
!      available as a shared library, and the ‘-static’ option is not
!      used, then this links against the shared version of ‘libasan’.  The
!      ‘-static-libasan’ option directs the GCC driver to link ‘libasan’
       statically, without necessarily linking other libraries statically.
  
! ‘-static-libtsan’
!      When the ‘-fsanitize=thread’ option is used to link a program, the
!      GCC driver automatically links against ‘libtsan’.  If ‘libtsan’ is
!      available as a shared library, and the ‘-static’ option is not
!      used, then this links against the shared version of ‘libtsan’.  The
!      ‘-static-libtsan’ option directs the GCC driver to link ‘libtsan’
       statically, without necessarily linking other libraries statically.
  
! ‘-static-liblsan’
!      When the ‘-fsanitize=leak’ option is used to link a program, the
!      GCC driver automatically links against ‘liblsan’.  If ‘liblsan’ is
!      available as a shared library, and the ‘-static’ option is not
!      used, then this links against the shared version of ‘liblsan’.  The
!      ‘-static-liblsan’ option directs the GCC driver to link ‘liblsan’
       statically, without necessarily linking other libraries statically.
  
! ‘-static-libubsan’
!      When the ‘-fsanitize=undefined’ option is used to link a program,
!      the GCC driver automatically links against ‘libubsan’.  If
!      ‘libubsan’ is available as a shared library, and the ‘-static’
       option is not used, then this links against the shared version of
!      ‘libubsan’.  The ‘-static-libubsan’ option directs the GCC driver
!      to link ‘libubsan’ statically, without necessarily linking other
       libraries statically.
  
! ‘-static-libstdc++’
!      When the ‘g++’ program is used to link a C++ program, it normally
!      automatically links against ‘libstdc++’.  If ‘libstdc++’ is
!      available as a shared library, and the ‘-static’ option is not
!      used, then this links against the shared version of ‘libstdc++’.
       That is normally fine.  However, it is sometimes useful to freeze
!      the version of ‘libstdc++’ used by the program without going all
!      the way to a fully static link.  The ‘-static-libstdc++’ option
!      directs the ‘g++’ driver to link ‘libstdc++’ statically, without
       necessarily linking other libraries statically.
  
! ‘-symbolic’
       Bind references to global symbols when building a shared object.
       Warn about any unresolved references (unless overridden by the link
!      editor option ‘-Xlinker -z -Xlinker defs’).  Only a few systems
       support this option.
  
! ‘-T SCRIPT’
       Use SCRIPT as the linker script.  This option is supported by most
       systems using the GNU linker.  On some targets, such as bare-board
!      targets without an operating system, the ‘-T’ option may be
       required when linking to avoid references to undefined symbols.
  
! ‘-Xlinker OPTION’
       Pass OPTION as an option to the linker.  You can use this to supply
       system-specific linker options that GCC does not recognize.
  
       If you want to pass an option that takes a separate argument, you
!      must use ‘-Xlinker’ twice, once for the option and once for the
!      argument.  For example, to pass ‘-assert definitions’, you must
!      write ‘-Xlinker -assert -Xlinker definitions’.  It does not work to
!      write ‘-Xlinker "-assert definitions"’, because this passes the
       entire string as a single argument, which is not what the linker
       expects.
  
       When using the GNU linker, it is usually more convenient to pass
!      arguments to linker options using the ‘OPTION=VALUE’ syntax than as
!      separate arguments.  For example, you can specify ‘-Xlinker
!      -Map=output.map’ rather than ‘-Xlinker -Map -Xlinker output.map’.
       Other linkers may not support this syntax for command-line options.
  
! ‘-Wl,OPTION’
       Pass OPTION as an option to the linker.  If OPTION contains commas,
       it is split into multiple options at the commas.  You can use this
       syntax to pass an argument to the option.  For example,
!      ‘-Wl,-Map,output.map’ passes ‘-Map output.map’ to the linker.  When
       using the GNU linker, you can also get the same effect with
!      ‘-Wl,-Map=output.map’.
  
! ‘-u SYMBOL’
       Pretend the symbol SYMBOL is undefined, to force linking of library
!      modules to define it.  You can use ‘-u’ multiple times with
       different symbols to force loading of additional library modules.
  
! ‘-z KEYWORD’
!      ‘-z’ is passed directly on to the linker along with the keyword
       KEYWORD.  See the section in the documentation of your linker for
       permitted values and their meanings.
  
     ---------- Footnotes ----------
  
!    (1) On some systems, ‘gcc -shared’ needs to build supplementary stub
! code for constructors to work.  On multi-libbed systems, ‘gcc -shared’
  must select the correct support libraries to link against.  Failing to
  supply the correct flags may lead to subtle defects.  Supplying them in
! cases where they are not necessary is innocuous.  ‘-shared’ suppresses
  the addition of startup code to alter the floating-point environment as
! done with ‘-ffast-math’, ‘-Ofast’ or ‘-funsafe-math-optimizations’ on
  some targets.
  
  
*************** File: gcc.info,  Node: Directory Options
*** 17823,17841 ****
  These options specify directories to search for header files, for
  libraries and for parts of the compiler:
  
! '-I DIR'
! '-iquote DIR'
! '-isystem DIR'
! '-idirafter DIR'
       Add the directory DIR to the list of directories to be searched for
!      header files during preprocessing.  If DIR begins with '=' or
!      '$SYSROOT', then the '=' or '$SYSROOT' is replaced by the sysroot
!      prefix; see '--sysroot' and '-isysroot'.
  
!      Directories specified with '-iquote' apply only to the quote form
!      of the directive, '#include "FILE"'.  Directories specified with
!      '-I', '-isystem', or '-idirafter' apply to lookup for both the
!      '#include "FILE"' and '#include <FILE>' directives.
  
       You can specify any number or combination of these options on the
       command line to search for header files in several directories.
--- 17827,17845 ----
  These options specify directories to search for header files, for
  libraries and for parts of the compiler:
  
! ‘-I DIR’
! ‘-iquote DIR’
! ‘-isystem DIR’
! ‘-idirafter DIR’
       Add the directory DIR to the list of directories to be searched for
!      header files during preprocessing.  If DIR begins with ‘=’ or
!      ‘$SYSROOT’, then the ‘=’ or ‘$SYSROOT’ is replaced by the sysroot
!      prefix; see ‘--sysroot’ and ‘-isysroot’.
  
!      Directories specified with ‘-iquote’ apply only to the quote form
!      of the directive, ‘#include "FILE"’.  Directories specified with
!      ‘-I’, ‘-isystem’, or ‘-idirafter’ apply to lookup for both the
!      ‘#include "FILE"’ and ‘#include <FILE>’ directives.
  
       You can specify any number or combination of these options on the
       command line to search for header files in several directories.
*************** libraries and for parts of the compiler:
*** 17845,18006 ****
            the current file is searched first.
  
         2. For the quote form of the include directive, the directories
!           specified by '-iquote' options are searched in left-to-right
            order, as they appear on the command line.
  
!        3. Directories specified with '-I' options are scanned in
            left-to-right order.
  
!        4. Directories specified with '-isystem' options are scanned in
            left-to-right order.
  
         5. Standard system directories are scanned.
  
!        6. Directories specified with '-idirafter' options are scanned in
            left-to-right order.
  
!      You can use '-I' to override a system header file, substituting
       your own version, since these directories are searched before the
       standard system header file directories.  However, you should not
       use this option to add directories that contain vendor-supplied
!      system header files; use '-isystem' for that.
  
!      The '-isystem' and '-idirafter' options also mark the directory as
       a system directory, so that it gets the same special treatment that
       is applied to the standard system directories.
  
       If a standard system include directory, or a directory specified
!      with '-isystem', is also specified with '-I', the '-I' option is
       ignored.  The directory is still searched but as a system directory
       at its normal position in the system include chain.  This is to
       ensure that GCC's procedure to fix buggy system headers and the
!      ordering for the '#include_next' directive are not inadvertently
       changed.  If you really need to change the search order for system
!      directories, use the '-nostdinc' and/or '-isystem' options.
  
! '-I-'
       Split the include path.  This option has been deprecated.  Please
!      use '-iquote' instead for '-I' directories before the '-I-' and
!      remove the '-I-' option.
  
!      Any directories specified with '-I' options before '-I-' are
!      searched only for headers requested with '#include "FILE"'; they
!      are not searched for '#include <FILE>'.  If additional directories
!      are specified with '-I' options after the '-I-', those directories
!      are searched for all '#include' directives.
  
!      In addition, '-I-' inhibits the use of the directory of the current
!      file directory as the first search directory for '#include "FILE"'.
!      There is no way to override this effect of '-I-'.
  
! '-iprefix PREFIX'
!      Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
       If the prefix represents a directory, you should include the final
!      '/'.
  
! '-iwithprefix DIR'
! '-iwithprefixbefore DIR'
!      Append DIR to the prefix specified previously with '-iprefix', and
       add the resulting directory to the include search path.
!      '-iwithprefixbefore' puts it in the same place '-I' would;
!      '-iwithprefix' puts it where '-idirafter' would.
  
! '-isysroot DIR'
!      This option is like the '--sysroot' option, but applies only to
       header files (except for Darwin targets, where it applies to both
!      header files and libraries).  See the '--sysroot' option for more
       information.
  
! '-imultilib DIR'
       Use DIR as a subdirectory of the directory containing
       target-specific C++ headers.
  
! '-nostdinc'
       Do not search the standard system directories for header files.
!      Only the directories explicitly specified with '-I', '-iquote',
!      '-isystem', and/or '-idirafter' options (and the directory of the
       current file, if appropriate) are searched.
  
! '-nostdinc++'
       Do not search for header files in the C++-specific standard
       directories, but do still search the other standard directories.
       (This option is used when building the C++ library.)
  
! '-iplugindir=DIR'
       Set the directory to search for plugins that are passed by
!      '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
       not meant to be used by the user, but only passed by the driver.
  
! '-LDIR'
       Add directory DIR to the list of directories to be searched for
!      '-l'.
  
! '-BPREFIX'
       This option specifies where to find the executables, libraries,
       include files, and data files of the compiler itself.
  
       The compiler driver program runs one or more of the subprograms
!      'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
!      program it tries to run, both with and without 'MACHINE/VERSION/'
       for the corresponding target machine and compiler version.
  
       For each subprogram to be run, the compiler driver first tries the
!      '-B' prefix, if any.  If that name is not found, or if '-B' is not
!      specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
!      and '/usr/local/lib/gcc/'.  If neither of those results in a file
       name that is found, the unmodified program name is searched for
!      using the directories specified in your 'PATH' environment
       variable.
  
!      The compiler checks to see if the path provided by '-B' refers to a
       directory, and if necessary it adds a directory separator character
       at the end of the path.
  
!      '-B' prefixes that effectively specify directory names also apply
       to libraries in the linker, because the compiler translates these
!      options into '-L' options for the linker.  They also apply to
       include files in the preprocessor, because the compiler translates
!      these options into '-isystem' options for the preprocessor.  In
!      this case, the compiler appends 'include' to the prefix.
  
!      The runtime support file 'libgcc.a' can also be searched for using
!      the '-B' prefix, if needed.  If it is not found there, the two
       standard prefixes above are tried, and that is all.  The file is
       left out of the link if it is not found by those means.
  
!      Another way to specify a prefix much like the '-B' prefix is to use
!      the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
       Variables::.
  
!      As a special kludge, if the path provided by '-B' is
!      '[dir/]stageN/', where N is a number in the range 0 to 9, then it
!      is replaced by '[dir/]include'.  This is to help with
       boot-strapping the compiler.
  
! '-no-canonical-prefixes'
!      Do not expand any symbolic links, resolve references to '/../' or
!      '/./', or make the path absolute when generating a relative prefix.
  
! '--sysroot=DIR'
       Use DIR as the logical root directory for headers and libraries.
       For example, if the compiler normally searches for headers in
!      '/usr/include' and libraries in '/usr/lib', it instead searches
!      'DIR/usr/include' and 'DIR/usr/lib'.
  
!      If you use both this option and the '-isysroot' option, then the
!      '--sysroot' option applies to libraries, but the '-isysroot' option
       applies to header files.
  
       The GNU linker (beginning with version 2.16) has the necessary
       support for this option.  If your linker does not support this
!      option, the header file aspect of '--sysroot' still works, but the
       library aspect does not.
  
! '--no-sysroot-suffix'
       For some targets, a suffix is added to the root directory specified
!      with '--sysroot', depending on the other options used, so that
!      headers may for example be found in 'DIR/SUFFIX/usr/include'
!      instead of 'DIR/usr/include'.  This option disables the addition of
       such a suffix.
  
  
--- 17849,18010 ----
            the current file is searched first.
  
         2. For the quote form of the include directive, the directories
!           specified by ‘-iquote’ options are searched in left-to-right
            order, as they appear on the command line.
  
!        3. Directories specified with ‘-I’ options are scanned in
            left-to-right order.
  
!        4. Directories specified with ‘-isystem’ options are scanned in
            left-to-right order.
  
         5. Standard system directories are scanned.
  
!        6. Directories specified with ‘-idirafter’ options are scanned in
            left-to-right order.
  
!      You can use ‘-I’ to override a system header file, substituting
       your own version, since these directories are searched before the
       standard system header file directories.  However, you should not
       use this option to add directories that contain vendor-supplied
!      system header files; use ‘-isystem’ for that.
  
!      The ‘-isystem’ and ‘-idirafter’ options also mark the directory as
       a system directory, so that it gets the same special treatment that
       is applied to the standard system directories.
  
       If a standard system include directory, or a directory specified
!      with ‘-isystem’, is also specified with ‘-I’, the ‘-I’ option is
       ignored.  The directory is still searched but as a system directory
       at its normal position in the system include chain.  This is to
       ensure that GCC's procedure to fix buggy system headers and the
!      ordering for the ‘#include_next’ directive are not inadvertently
       changed.  If you really need to change the search order for system
!      directories, use the ‘-nostdinc’ and/or ‘-isystem’ options.
  
! ‘-I-’
       Split the include path.  This option has been deprecated.  Please
!      use ‘-iquote’ instead for ‘-I’ directories before the ‘-I-’ and
!      remove the ‘-I-’ option.
  
!      Any directories specified with ‘-I’ options before ‘-I-’ are
!      searched only for headers requested with ‘#include "FILE"’; they
!      are not searched for ‘#include <FILE>’.  If additional directories
!      are specified with ‘-I’ options after the ‘-I-’, those directories
!      are searched for all ‘#include’ directives.
  
!      In addition, ‘-I-’ inhibits the use of the directory of the current
!      file directory as the first search directory for ‘#include "FILE"’.
!      There is no way to override this effect of ‘-I-’.
  
! ‘-iprefix PREFIX’
!      Specify PREFIX as the prefix for subsequent ‘-iwithprefix’ options.
       If the prefix represents a directory, you should include the final
!      ‘/’.
  
! ‘-iwithprefix DIR’
! ‘-iwithprefixbefore DIR’
!      Append DIR to the prefix specified previously with ‘-iprefix’, and
       add the resulting directory to the include search path.
!      ‘-iwithprefixbefore’ puts it in the same place ‘-I’ would;
!      ‘-iwithprefix’ puts it where ‘-idirafter’ would.
  
! ‘-isysroot DIR’
!      This option is like the ‘--sysroot’ option, but applies only to
       header files (except for Darwin targets, where it applies to both
!      header files and libraries).  See the ‘--sysroot’ option for more
       information.
  
! ‘-imultilib DIR’
       Use DIR as a subdirectory of the directory containing
       target-specific C++ headers.
  
! ‘-nostdinc’
       Do not search the standard system directories for header files.
!      Only the directories explicitly specified with ‘-I’, ‘-iquote’,
!      ‘-isystem’, and/or ‘-idirafter’ options (and the directory of the
       current file, if appropriate) are searched.
  
! ‘-nostdinc++’
       Do not search for header files in the C++-specific standard
       directories, but do still search the other standard directories.
       (This option is used when building the C++ library.)
  
! ‘-iplugindir=DIR’
       Set the directory to search for plugins that are passed by
!      ‘-fplugin=NAME’ instead of ‘-fplugin=PATH/NAME.so’.  This option is
       not meant to be used by the user, but only passed by the driver.
  
! ‘-LDIR’
       Add directory DIR to the list of directories to be searched for
!      ‘-l’.
  
! ‘-BPREFIX’
       This option specifies where to find the executables, libraries,
       include files, and data files of the compiler itself.
  
       The compiler driver program runs one or more of the subprograms
!      ‘cpp’, ‘cc1’, ‘as’ and ‘ld’.  It tries PREFIX as a prefix for each
!      program it tries to run, both with and without ‘MACHINE/VERSION/’
       for the corresponding target machine and compiler version.
  
       For each subprogram to be run, the compiler driver first tries the
!      ‘-B’ prefix, if any.  If that name is not found, or if ‘-B’ is not
!      specified, the driver tries two standard prefixes, ‘/usr/lib/gcc/’
!      and ‘/usr/local/lib/gcc/’.  If neither of those results in a file
       name that is found, the unmodified program name is searched for
!      using the directories specified in your ‘PATH’ environment
       variable.
  
!      The compiler checks to see if the path provided by ‘-B’ refers to a
       directory, and if necessary it adds a directory separator character
       at the end of the path.
  
!      ‘-B’ prefixes that effectively specify directory names also apply
       to libraries in the linker, because the compiler translates these
!      options into ‘-L’ options for the linker.  They also apply to
       include files in the preprocessor, because the compiler translates
!      these options into ‘-isystem’ options for the preprocessor.  In
!      this case, the compiler appends ‘include’ to the prefix.
  
!      The runtime support file ‘libgcc.a’ can also be searched for using
!      the ‘-B’ prefix, if needed.  If it is not found there, the two
       standard prefixes above are tried, and that is all.  The file is
       left out of the link if it is not found by those means.
  
!      Another way to specify a prefix much like the ‘-B’ prefix is to use
!      the environment variable ‘GCC_EXEC_PREFIX’.  *Note Environment
       Variables::.
  
!      As a special kludge, if the path provided by ‘-B’ is
!      ‘[dir/]stageN/’, where N is a number in the range 0 to 9, then it
!      is replaced by ‘[dir/]include’.  This is to help with
       boot-strapping the compiler.
  
! ‘-no-canonical-prefixes’
!      Do not expand any symbolic links, resolve references to ‘/../’ or
!      ‘/./’, or make the path absolute when generating a relative prefix.
  
! ‘--sysroot=DIR’
       Use DIR as the logical root directory for headers and libraries.
       For example, if the compiler normally searches for headers in
!      ‘/usr/include’ and libraries in ‘/usr/lib’, it instead searches
!      ‘DIR/usr/include’ and ‘DIR/usr/lib’.
  
!      If you use both this option and the ‘-isysroot’ option, then the
!      ‘--sysroot’ option applies to libraries, but the ‘-isysroot’ option
       applies to header files.
  
       The GNU linker (beginning with version 2.16) has the necessary
       support for this option.  If your linker does not support this
!      option, the header file aspect of ‘--sysroot’ still works, but the
       library aspect does not.
  
! ‘--no-sysroot-suffix’
       For some targets, a suffix is added to the root directory specified
!      with ‘--sysroot’, depending on the other options used, so that
!      headers may for example be found in ‘DIR/SUFFIX/usr/include’
!      instead of ‘DIR/usr/include’.  This option disables the addition of
       such a suffix.
  
  
*************** These machine-independent options contro
*** 18013,18029 ****
  in code generation.
  
   Most of them have both positive and negative forms; the negative form
! of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
  listed--the one that is not the default.  You can figure out the other
! form by either removing 'no-' or adding it.
  
! '-fstack-reuse=REUSE-LEVEL'
       This option controls stack space reuse for user declared local/auto
       variables and compiler generated temporaries.  REUSE_LEVEL can be
!      'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
!      local variables and temporaries, 'named_vars' enables the reuse
!      only for user defined local variables with names, and 'none'
!      disables stack reuse completely.  The default value is 'all'.  The
       option is needed when the program extends the lifetime of a scoped
       local variable or a compiler generated temporary beyond the end
       point defined by the language.  When a lifetime of a variable ends,
--- 18017,18033 ----
  in code generation.
  
   Most of them have both positive and negative forms; the negative form
! of ‘-ffoo’ is ‘-fno-foo’.  In the table below, only one of the forms is
  listed--the one that is not the default.  You can figure out the other
! form by either removing ‘no-’ or adding it.
  
! ‘-fstack-reuse=REUSE-LEVEL’
       This option controls stack space reuse for user declared local/auto
       variables and compiler generated temporaries.  REUSE_LEVEL can be
!      ‘all’, ‘named_vars’, or ‘none’.  ‘all’ enables stack reuse for all
!      local variables and temporaries, ‘named_vars’ enables the reuse
!      only for user defined local variables with names, and ‘none’
!      disables stack reuse completely.  The default value is ‘all’.  The
       option is needed when the program extends the lifetime of a scoped
       local variable or a compiler generated temporary beyond the end
       point defined by the language.  When a lifetime of a variable ends,
*************** form by either removing 'no-' or adding
*** 18093,18127 ****
       reuse can lead to runtime errors.  This option is used to control
       the temporary stack reuse optimization.
  
! '-ftrapv'
       This option generates traps for signed overflow on addition,
!      subtraction, multiplication operations.  The options '-ftrapv' and
!      '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
!      command-line results in '-fwrapv' being effective.  Note that only
!      active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
!      on the command-line results in '-ftrapv' being effective.
  
! '-fwrapv'
       This option instructs the compiler to assume that signed arithmetic
       overflow of addition, subtraction and multiplication wraps around
       using twos-complement representation.  This flag enables some
!      optimizations and disables others.  The options '-ftrapv' and
!      '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
!      command-line results in '-fwrapv' being effective.  Note that only
!      active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
!      on the command-line results in '-ftrapv' being effective.
  
! '-fwrapv-pointer'
       This option instructs the compiler to assume that pointer
       arithmetic overflow on addition and subtraction wraps around using
       twos-complement representation.  This flag disables some
       optimizations which assume pointer overflow is invalid.
  
! '-fstrict-overflow'
!      This option implies '-fno-wrapv' '-fno-wrapv-pointer' and when
!      negated implies '-fwrapv' '-fwrapv-pointer'.
  
! '-fexceptions'
       Enable exception handling.  Generates extra code needed to
       propagate exceptions.  For some targets, this implies GCC generates
       frame unwind information for all functions, which can produce
--- 18097,18131 ----
       reuse can lead to runtime errors.  This option is used to control
       the temporary stack reuse optimization.
  
! ‘-ftrapv’
       This option generates traps for signed overflow on addition,
!      subtraction, multiplication operations.  The options ‘-ftrapv’ and
!      ‘-fwrapv’ override each other, so using ‘-ftrapv’ ‘-fwrapv’ on the
!      command-line results in ‘-fwrapv’ being effective.  Note that only
!      active options override, so using ‘-ftrapv’ ‘-fwrapv’ ‘-fno-wrapv’
!      on the command-line results in ‘-ftrapv’ being effective.
  
! ‘-fwrapv’
       This option instructs the compiler to assume that signed arithmetic
       overflow of addition, subtraction and multiplication wraps around
       using twos-complement representation.  This flag enables some
!      optimizations and disables others.  The options ‘-ftrapv’ and
!      ‘-fwrapv’ override each other, so using ‘-ftrapv’ ‘-fwrapv’ on the
!      command-line results in ‘-fwrapv’ being effective.  Note that only
!      active options override, so using ‘-ftrapv’ ‘-fwrapv’ ‘-fno-wrapv’
!      on the command-line results in ‘-ftrapv’ being effective.
  
! ‘-fwrapv-pointer’
       This option instructs the compiler to assume that pointer
       arithmetic overflow on addition and subtraction wraps around using
       twos-complement representation.  This flag disables some
       optimizations which assume pointer overflow is invalid.
  
! ‘-fstrict-overflow’
!      This option implies ‘-fno-wrapv’ ‘-fno-wrapv-pointer’ and when
!      negated implies ‘-fwrapv’ ‘-fwrapv-pointer’.
  
! ‘-fexceptions’
       Enable exception handling.  Generates extra code needed to
       propagate exceptions.  For some targets, this implies GCC generates
       frame unwind information for all functions, which can produce
*************** form by either removing 'no-' or adding
*** 18135,18187 ****
       if you are compiling older C++ programs that don't use exception
       handling.
  
! '-fnon-call-exceptions'
       Generate code that allows trapping instructions to throw
       exceptions.  Note that this requires platform-specific runtime
       support that does not exist everywhere.  Moreover, it only allows
       _trapping_ instructions to throw exceptions, i.e. memory references
       or floating-point instructions.  It does not allow exceptions to be
!      thrown from arbitrary signal handlers such as 'SIGALRM'.  This
!      enables '-fexceptions'.
  
! '-fdelete-dead-exceptions'
       Consider that instructions that may throw exceptions but don't
       otherwise contribute to the execution of the program can be
       optimized away.  This does not affect calls to functions except
!      those with the 'pure' or 'const' attributes.  This option is
       enabled by default for the Ada and C++ compilers, as permitted by
       the language specifications.  Optimization passes that cause dead
       exceptions to be removed are enabled independently at different
       optimization levels.
  
! '-funwind-tables'
!      Similar to '-fexceptions', except that it just generates any needed
       static data, but does not affect the generated code in any other
       way.  You normally do not need to enable this option; instead, a
       language processor that needs this handling enables it on your
       behalf.
  
! '-fasynchronous-unwind-tables'
       Generate unwind table in DWARF format, if supported by target
       machine.  The table is exact at each instruction boundary, so it
       can be used for stack unwinding from asynchronous events (such as
       debugger or garbage collector).
  
! '-fno-gnu-unique'
       On systems with recent GNU assembler and C library, the C++
!      compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
       definitions of template static data members and static local
       variables in inline functions are unique even in the presence of
!      'RTLD_LOCAL'; this is necessary to avoid problems with a library
!      used by two different 'RTLD_LOCAL' plugins depending on a
       definition in one of them and therefore disagreeing with the other
!      one about the binding of the symbol.  But this causes 'dlclose' to
       be ignored for affected DSOs; if your program relies on
!      reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
!      '-fno-gnu-unique'.
  
! '-fpcc-struct-return'
!      Return "short" 'struct' and 'union' values in memory like longer
       ones, rather than in registers.  This convention is less efficient,
       but it has the advantage of allowing intercallability between
       GCC-compiled files and files compiled with other compilers,
--- 18139,18191 ----
       if you are compiling older C++ programs that don't use exception
       handling.
  
! ‘-fnon-call-exceptions’
       Generate code that allows trapping instructions to throw
       exceptions.  Note that this requires platform-specific runtime
       support that does not exist everywhere.  Moreover, it only allows
       _trapping_ instructions to throw exceptions, i.e. memory references
       or floating-point instructions.  It does not allow exceptions to be
!      thrown from arbitrary signal handlers such as ‘SIGALRM’.  This
!      enables ‘-fexceptions’.
  
! ‘-fdelete-dead-exceptions’
       Consider that instructions that may throw exceptions but don't
       otherwise contribute to the execution of the program can be
       optimized away.  This does not affect calls to functions except
!      those with the ‘pure’ or ‘const’ attributes.  This option is
       enabled by default for the Ada and C++ compilers, as permitted by
       the language specifications.  Optimization passes that cause dead
       exceptions to be removed are enabled independently at different
       optimization levels.
  
! ‘-funwind-tables’
!      Similar to ‘-fexceptions’, except that it just generates any needed
       static data, but does not affect the generated code in any other
       way.  You normally do not need to enable this option; instead, a
       language processor that needs this handling enables it on your
       behalf.
  
! ‘-fasynchronous-unwind-tables’
       Generate unwind table in DWARF format, if supported by target
       machine.  The table is exact at each instruction boundary, so it
       can be used for stack unwinding from asynchronous events (such as
       debugger or garbage collector).
  
! ‘-fno-gnu-unique’
       On systems with recent GNU assembler and C library, the C++
!      compiler uses the ‘STB_GNU_UNIQUE’ binding to make sure that
       definitions of template static data members and static local
       variables in inline functions are unique even in the presence of
!      ‘RTLD_LOCAL’; this is necessary to avoid problems with a library
!      used by two different ‘RTLD_LOCAL’ plugins depending on a
       definition in one of them and therefore disagreeing with the other
!      one about the binding of the symbol.  But this causes ‘dlclose’ to
       be ignored for affected DSOs; if your program relies on
!      reinitialization of a DSO via ‘dlclose’ and ‘dlopen’, you can use
!      ‘-fno-gnu-unique’.
  
! ‘-fpcc-struct-return’
!      Return "short" ‘struct’ and ‘union’ values in memory like longer
       ones, rather than in registers.  This convention is less efficient,
       but it has the advantage of allowing intercallability between
       GCC-compiled files and files compiled with other compilers,
*************** form by either removing 'no-' or adding
*** 18193,18257 ****
       Short structures and unions are those whose size and alignment
       match that of some integer type.
  
!      *Warning:* code compiled with the '-fpcc-struct-return' switch is
       not binary compatible with code compiled with the
!      '-freg-struct-return' switch.  Use it to conform to a non-default
       application binary interface.
  
! '-freg-struct-return'
!      Return 'struct' and 'union' values in registers when possible.
       This is more efficient for small structures than
!      '-fpcc-struct-return'.
  
!      If you specify neither '-fpcc-struct-return' nor
!      '-freg-struct-return', GCC defaults to whichever convention is
       standard for the target.  If there is no standard convention, GCC
!      defaults to '-fpcc-struct-return', except on targets where GCC is
       the principal compiler.  In those cases, we can choose the
       standard, and we chose the more efficient register return
       alternative.
  
!      *Warning:* code compiled with the '-freg-struct-return' switch is
       not binary compatible with code compiled with the
!      '-fpcc-struct-return' switch.  Use it to conform to a non-default
       application binary interface.
  
! '-fshort-enums'
!      Allocate to an 'enum' type only as many bytes as it needs for the
!      declared range of possible values.  Specifically, the 'enum' type
       is equivalent to the smallest integer type that has enough room.
       This option has no effect for an enumeration type with a fixed
       underlying type.
  
!      *Warning:* the '-fshort-enums' switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Use it to conform to a non-default application binary
       interface.
  
! '-fshort-wchar'
!      Override the underlying type for 'wchar_t' to be 'short unsigned
!      int' instead of the default for the target.  This option is useful
       for building programs to run under WINE.
  
!      *Warning:* the '-fshort-wchar' switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Use it to conform to a non-default application binary
       interface.
  
! '-fcommon'
       In C code, this option controls the placement of global variables
!      defined without an initializer, known as "tentative definitions" in
       the C standard.  Tentative definitions are distinct from
!      declarations of a variable with the 'extern' keyword, which do not
       allocate storage.
  
!      The default is '-fno-common', which specifies that the compiler
       places uninitialized global variables in the BSS section of the
       object file.  This inhibits the merging of tentative definitions by
       the linker so you get a multiple-definition error if the same
       variable is accidentally defined in more than one compilation unit.
  
!      The '-fcommon' places uninitialized global variables in a common
       block.  This allows the linker to resolve all tentative definitions
       of the same variable in different compilation units to the same
       object, or to a non-tentative definition.  This behavior is
--- 18197,18261 ----
       Short structures and unions are those whose size and alignment
       match that of some integer type.
  
!      *Warning:* code compiled with the ‘-fpcc-struct-return’ switch is
       not binary compatible with code compiled with the
!      ‘-freg-struct-return’ switch.  Use it to conform to a non-default
       application binary interface.
  
! ‘-freg-struct-return’
!      Return ‘struct’ and ‘union’ values in registers when possible.
       This is more efficient for small structures than
!      ‘-fpcc-struct-return’.
  
!      If you specify neither ‘-fpcc-struct-return’ nor
!      ‘-freg-struct-return’, GCC defaults to whichever convention is
       standard for the target.  If there is no standard convention, GCC
!      defaults to ‘-fpcc-struct-return’, except on targets where GCC is
       the principal compiler.  In those cases, we can choose the
       standard, and we chose the more efficient register return
       alternative.
  
!      *Warning:* code compiled with the ‘-freg-struct-return’ switch is
       not binary compatible with code compiled with the
!      ‘-fpcc-struct-return’ switch.  Use it to conform to a non-default
       application binary interface.
  
! ‘-fshort-enums’
!      Allocate to an ‘enum’ type only as many bytes as it needs for the
!      declared range of possible values.  Specifically, the ‘enum’ type
       is equivalent to the smallest integer type that has enough room.
       This option has no effect for an enumeration type with a fixed
       underlying type.
  
!      *Warning:* the ‘-fshort-enums’ switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Use it to conform to a non-default application binary
       interface.
  
! ‘-fshort-wchar’
!      Override the underlying type for ‘wchar_t’ to be ‘short unsigned
!      int’ instead of the default for the target.  This option is useful
       for building programs to run under WINE.
  
!      *Warning:* the ‘-fshort-wchar’ switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Use it to conform to a non-default application binary
       interface.
  
! ‘-fcommon’
       In C code, this option controls the placement of global variables
!      defined without an initializer, known as “tentative definitions” in
       the C standard.  Tentative definitions are distinct from
!      declarations of a variable with the ‘extern’ keyword, which do not
       allocate storage.
  
!      The default is ‘-fno-common’, which specifies that the compiler
       places uninitialized global variables in the BSS section of the
       object file.  This inhibits the merging of tentative definitions by
       the linker so you get a multiple-definition error if the same
       variable is accidentally defined in more than one compilation unit.
  
!      The ‘-fcommon’ places uninitialized global variables in a common
       block.  This allows the linker to resolve all tentative definitions
       of the same variable in different compilation units to the same
       object, or to a non-tentative definition.  This behavior is
*************** form by either removing 'no-' or adding
*** 18259,18291 ****
       size penalty on global variable references.  It is mainly useful to
       enable legacy code to link without errors.
  
! '-fno-ident'
!      Ignore the '#ident' directive.
  
! '-finhibit-size-directive'
!      Don't output a '.size' assembler directive, or anything else that
       would cause trouble if the function is split in the middle, and the
       two halves are placed at locations far apart in memory.  This
!      option is used when compiling 'crtstuff.c'; you should not need to
       use it for anything else.
  
! '-fverbose-asm'
       Put extra commentary information in the generated assembly code to
       make it more readable.  This option is generally only of use to
       those who actually need to read the generated assembly code
       (perhaps while debugging the compiler itself).
  
!      '-fno-verbose-asm', the default, causes the extra information to be
       omitted and is useful when comparing two assembler files.
  
       The added comments include:
  
!         * information on the compiler version and command-line options,
  
!         * the source code lines associated with the assembly
            instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
  
!         * hints on which high-level expressions correspond to the
            various assembly instruction operands.
  
       For example, given this C source file:
--- 18263,18295 ----
       size penalty on global variable references.  It is mainly useful to
       enable legacy code to link without errors.
  
! ‘-fno-ident’
!      Ignore the ‘#ident’ directive.
  
! ‘-finhibit-size-directive’
!      Don't output a ‘.size’ assembler directive, or anything else that
       would cause trouble if the function is split in the middle, and the
       two halves are placed at locations far apart in memory.  This
!      option is used when compiling ‘crtstuff.c’; you should not need to
       use it for anything else.
  
! ‘-fverbose-asm’
       Put extra commentary information in the generated assembly code to
       make it more readable.  This option is generally only of use to
       those who actually need to read the generated assembly code
       (perhaps while debugging the compiler itself).
  
!      ‘-fno-verbose-asm’, the default, causes the extra information to be
       omitted and is useful when comparing two assembler files.
  
       The added comments include:
  
!         • information on the compiler version and command-line options,
  
!         • the source code lines associated with the assembly
            instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
  
!         • hints on which high-level expressions correspond to the
            various assembly instruction operands.
  
       For example, given this C source file:
*************** form by either removing 'no-' or adding
*** 18301,18308 ****
              return total;
            }
  
!      compiling to (x86_64) assembly via '-S' and emitting the result
!      direct to stdout via '-o' '-'
  
            gcc -S test.c -fverbose-asm -Os -o -
  
--- 18305,18312 ----
              return total;
            }
  
!      compiling to (x86_64) assembly via ‘-S’ and emitting the result
!      direct to stdout via ‘-o’ ‘-’
  
            gcc -S test.c -fverbose-asm -Os -o -
  
*************** form by either removing 'no-' or adding
*** 18348,18366 ****
       The comments are intended for humans rather than machines and hence
       the precise format of the comments is subject to change.
  
! '-frecord-gcc-switches'
       This switch causes the command line used to invoke the compiler to
       be recorded into the object file that is being created.  This
       switch is only implemented on some targets and the exact format of
       the recording is target and binary file format dependent, but it
       usually takes the form of a section containing ASCII text.  This
!      switch is related to the '-fverbose-asm' switch, but that switch
       only records information in the assembler output file as comments,
       so it never reaches the object file.  See also
!      '-grecord-gcc-switches' for another way of storing compiler options
       into the object file.
  
! '-fpic'
       Generate position-independent code (PIC) suitable for use in a
       shared library, if supported for the target machine.  Such code
       accesses all constant addresses through a global offset table
--- 18352,18370 ----
       The comments are intended for humans rather than machines and hence
       the precise format of the comments is subject to change.
  
! ‘-frecord-gcc-switches’
       This switch causes the command line used to invoke the compiler to
       be recorded into the object file that is being created.  This
       switch is only implemented on some targets and the exact format of
       the recording is target and binary file format dependent, but it
       usually takes the form of a section containing ASCII text.  This
!      switch is related to the ‘-fverbose-asm’ switch, but that switch
       only records information in the assembler output file as comments,
       so it never reaches the object file.  See also
!      ‘-grecord-gcc-switches’ for another way of storing compiler options
       into the object file.
  
! ‘-fpic’
       Generate position-independent code (PIC) suitable for use in a
       shared library, if supported for the target machine.  Such code
       accesses all constant addresses through a global offset table
*************** form by either removing 'no-' or adding
*** 18368,18375 ****
       program starts (the dynamic loader is not part of GCC; it is part
       of the operating system).  If the GOT size for the linked
       executable exceeds a machine-specific maximum size, you get an
!      error message from the linker indicating that '-fpic' does not
!      work; in that case, recompile with '-fPIC' instead.  (These
       maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
       and RS/6000.  The x86 has no such limit.)
  
--- 18372,18379 ----
       program starts (the dynamic loader is not part of GCC; it is part
       of the operating system).  If the GOT size for the linked
       executable exceeds a machine-specific maximum size, you get an
!      error message from the linker indicating that ‘-fpic’ does not
!      work; in that case, recompile with ‘-fPIC’ instead.  (These
       maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
       and RS/6000.  The x86 has no such limit.)
  
*************** form by either removing 'no-' or adding
*** 18378,18387 ****
       System V but not for the Sun 386i.  Code generated for the IBM
       RS/6000 is always position-independent.
  
!      When this flag is set, the macros '__pic__' and '__PIC__' are
       defined to 1.
  
! '-fPIC'
       If supported for the target machine, emit position-independent
       code, suitable for dynamic linking and avoiding any limit on the
       size of the global offset table.  This option makes a difference on
--- 18382,18391 ----
       System V but not for the Sun 386i.  Code generated for the IBM
       RS/6000 is always position-independent.
  
!      When this flag is set, the macros ‘__pic__’ and ‘__PIC__’ are
       defined to 1.
  
! ‘-fPIC’
       If supported for the target machine, emit position-independent
       code, suitable for dynamic linking and avoiding any limit on the
       size of the global offset table.  This option makes a difference on
*************** form by either removing 'no-' or adding
*** 18390,18409 ****
       Position-independent code requires special support, and therefore
       works only on certain machines.
  
!      When this flag is set, the macros '__pic__' and '__PIC__' are
       defined to 2.
  
! '-fpie'
! '-fPIE'
!      These options are similar to '-fpic' and '-fPIC', but the generated
       position-independent code can be only linked into executables.
       Usually these options are used to compile code that will be linked
!      using the '-pie' GCC option.
  
!      '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
!      The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
  
! '-fno-plt'
       Do not use the PLT for external function calls in
       position-independent code.  Instead, load the callee address at
       call sites from the GOT and branch to it.  This leads to more
--- 18394,18413 ----
       Position-independent code requires special support, and therefore
       works only on certain machines.
  
!      When this flag is set, the macros ‘__pic__’ and ‘__PIC__’ are
       defined to 2.
  
! ‘-fpie’
! ‘-fPIE’
!      These options are similar to ‘-fpic’ and ‘-fPIC’, but the generated
       position-independent code can be only linked into executables.
       Usually these options are used to compile code that will be linked
!      using the ‘-pie’ GCC option.
  
!      ‘-fpie’ and ‘-fPIE’ both define the macros ‘__pie__’ and ‘__PIE__’.
!      The macros have the value 1 for ‘-fpie’ and 2 for ‘-fPIE’.
  
! ‘-fno-plt’
       Do not use the PLT for external function calls in
       position-independent code.  Instead, load the callee address at
       call sites from the GOT and branch to it.  This leads to more
*************** form by either removing 'no-' or adding
*** 18411,18451 ****
       optimizations.  On architectures such as 32-bit x86 where PLT stubs
       expect the GOT pointer in a specific register, this gives more
       register allocation freedom to the compiler.  Lazy binding requires
!      use of the PLT; with '-fno-plt' all external symbols are resolved
       at load time.
  
!      Alternatively, the function attribute 'noplt' can be used to avoid
       calls through the PLT for specific external functions.
  
       In position-dependent code, a few targets also convert calls to
       functions that are marked to not use the PLT to use the GOT
       instead.
  
! '-fno-jump-tables'
       Do not use jump tables for switch statements even where it would be
       more efficient than other code generation strategies.  This option
!      is of use in conjunction with '-fpic' or '-fPIC' for building code
       that forms part of a dynamic linker and cannot reference the
       address of a jump table.  On some targets, jump tables do not
       require a GOT and this option is not needed.
  
! '-fno-bit-tests'
       Do not use bit tests for switch statements even where it would be
       more efficient than other code generation strategies.
  
! '-ffixed-REG'
       Treat the register named REG as a fixed register; generated code
       should never refer to it (except perhaps as a stack pointer, frame
       pointer or in some other fixed role).
  
       REG must be the name of a register.  The register names accepted
!      are machine-specific and are defined in the 'REGISTER_NAMES' macro
       in the machine description macro file.
  
       This flag does not have a negative form, because it specifies a
       three-way choice.
  
! '-fcall-used-REG'
       Treat the register named REG as an allocable register that is
       clobbered by function calls.  It may be allocated for temporaries
       or variables that do not live across a call.  Functions compiled
--- 18415,18455 ----
       optimizations.  On architectures such as 32-bit x86 where PLT stubs
       expect the GOT pointer in a specific register, this gives more
       register allocation freedom to the compiler.  Lazy binding requires
!      use of the PLT; with ‘-fno-plt’ all external symbols are resolved
       at load time.
  
!      Alternatively, the function attribute ‘noplt’ can be used to avoid
       calls through the PLT for specific external functions.
  
       In position-dependent code, a few targets also convert calls to
       functions that are marked to not use the PLT to use the GOT
       instead.
  
! ‘-fno-jump-tables’
       Do not use jump tables for switch statements even where it would be
       more efficient than other code generation strategies.  This option
!      is of use in conjunction with ‘-fpic’ or ‘-fPIC’ for building code
       that forms part of a dynamic linker and cannot reference the
       address of a jump table.  On some targets, jump tables do not
       require a GOT and this option is not needed.
  
! ‘-fno-bit-tests’
       Do not use bit tests for switch statements even where it would be
       more efficient than other code generation strategies.
  
! ‘-ffixed-REG’
       Treat the register named REG as a fixed register; generated code
       should never refer to it (except perhaps as a stack pointer, frame
       pointer or in some other fixed role).
  
       REG must be the name of a register.  The register names accepted
!      are machine-specific and are defined in the ‘REGISTER_NAMES’ macro
       in the machine description macro file.
  
       This flag does not have a negative form, because it specifies a
       three-way choice.
  
! ‘-fcall-used-REG’
       Treat the register named REG as an allocable register that is
       clobbered by function calls.  It may be allocated for temporaries
       or variables that do not live across a call.  Functions compiled
*************** form by either removing 'no-' or adding
*** 18459,18465 ****
       This flag does not have a negative form, because it specifies a
       three-way choice.
  
! '-fcall-saved-REG'
       Treat the register named REG as an allocable register saved by
       functions.  It may be allocated even for temporaries or variables
       that live across a call.  Functions compiled this way save and
--- 18463,18469 ----
       This flag does not have a negative form, because it specifies a
       three-way choice.
  
! ‘-fcall-saved-REG’
       Treat the register named REG as an allocable register saved by
       functions.  It may be allocated even for temporaries or variables
       that live across a call.  Functions compiled this way save and
*************** form by either removing 'no-' or adding
*** 18476,18482 ****
       This flag does not have a negative form, because it specifies a
       three-way choice.
  
! '-fpack-struct[=N]'
       Without a value specified, pack all structure members together
       without holes.  When a value is specified (which must be a small
       power of two), pack structure members according to this value,
--- 18480,18486 ----
       This flag does not have a negative form, because it specifies a
       three-way choice.
  
! ‘-fpack-struct[=N]’
       Without a value specified, pack all structure members together
       without holes.  When a value is specified (which must be a small
       power of two), pack structure members according to this value,
*************** form by either removing 'no-' or adding
*** 18484,18517 ****
       alignment requirements larger than this are output potentially
       unaligned at the next fitting location.
  
!      *Warning:* the '-fpack-struct' switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Additionally, it makes the code suboptimal.  Use it to
       conform to a non-default application binary interface.
  
! '-fleading-underscore'
!      This option and its counterpart, '-fno-leading-underscore',
       forcibly change the way C symbols are represented in the object
       file.  One use is to help link with legacy assembly code.
  
!      *Warning:* the '-fleading-underscore' switch causes GCC to generate
       code that is not binary compatible with code generated without that
       switch.  Use it to conform to a non-default application binary
       interface.  Not all targets provide complete support for this
       switch.
  
! '-ftls-model=MODEL'
       Alter the thread-local storage model to be used (*note
       Thread-Local::).  The MODEL argument should be one of
!      'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
       Note that the choice is subject to optimization: the compiler may
       use a more efficient model for symbols not visible outside of the
!      translation unit, or if '-fpic' is not given on the command line.
  
!      The default without '-fpic' is 'initial-exec'; with '-fpic' the
!      default is 'global-dynamic'.
  
! '-ftrampolines'
       For targets that normally need trampolines for nested functions,
       always generate them instead of using descriptors.  Otherwise, for
       targets that do not need them, like for example HP-PA or IA-64, do
--- 18488,18521 ----
       alignment requirements larger than this are output potentially
       unaligned at the next fitting location.
  
!      *Warning:* the ‘-fpack-struct’ switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Additionally, it makes the code suboptimal.  Use it to
       conform to a non-default application binary interface.
  
! ‘-fleading-underscore’
!      This option and its counterpart, ‘-fno-leading-underscore’,
       forcibly change the way C symbols are represented in the object
       file.  One use is to help link with legacy assembly code.
  
!      *Warning:* the ‘-fleading-underscore’ switch causes GCC to generate
       code that is not binary compatible with code generated without that
       switch.  Use it to conform to a non-default application binary
       interface.  Not all targets provide complete support for this
       switch.
  
! ‘-ftls-model=MODEL’
       Alter the thread-local storage model to be used (*note
       Thread-Local::).  The MODEL argument should be one of
!      ‘global-dynamic’, ‘local-dynamic’, ‘initial-exec’ or ‘local-exec’.
       Note that the choice is subject to optimization: the compiler may
       use a more efficient model for symbols not visible outside of the
!      translation unit, or if ‘-fpic’ is not given on the command line.
  
!      The default without ‘-fpic’ is ‘initial-exec’; with ‘-fpic’ the
!      default is ‘global-dynamic’.
  
! ‘-ftrampolines’
       For targets that normally need trampolines for nested functions,
       always generate them instead of using descriptors.  Otherwise, for
       targets that do not need them, like for example HP-PA or IA-64, do
*************** form by either removing 'no-' or adding
*** 18523,18559 ****
       requires the stack to be made executable in order for the program
       to work properly.
  
!      '-fno-trampolines' is enabled by default on a language by language
       basis to let the compiler avoid generating them, if it computes
       that this is safe, and replace them with descriptors.  Descriptors
       are made up of data only, but the generated code must be prepared
!      to deal with them.  As of this writing, '-fno-trampolines' is
       enabled by default only for Ada.
  
!      Moreover, code compiled with '-ftrampolines' and code compiled with
!      '-fno-trampolines' are not binary compatible if nested functions
       are present.  This option must therefore be used on a program-wide
       basis and be manipulated with extreme care.
  
!      For languages other than Ada, the '-ftrampolines' and
!      '-fno-trampolines' options currently have no effect, and
       trampolines are always generated on platforms that need them for
       nested functions.
  
! '-ftrampoline-impl=[stack|heap]'
       By default, trampolines are generated on stack.  However, certain
       platforms (such as the Apple M1) do not permit an executable stack.
!      Compiling with '-ftrampoline-impl=heap' generate calls to
!      '__gcc_nested_func_ptr_created' and '__gcc_nested_func_ptr_deleted'
       in order to allocate and deallocate trampoline space on the
       executable heap.  These functions are implemented in libgcc, and
       will only be provided on specific targets: x86_64 Darwin, x86_64
       and aarch64 Linux.  _PLEASE NOTE_: Heap trampolines are _not_
!      guaranteed to be correctly deallocated if you 'setjmp', instantiate
!      nested functions, and then 'longjmp' back to a state prior to
       having allocated those nested functions.
  
! '-fvisibility=[default|internal|hidden|protected]'
       Set the default ELF image symbol visibility to the specified
       option--all symbols are marked with this unless overridden within
       the code.  Using this feature can very substantially improve
--- 18527,18563 ----
       requires the stack to be made executable in order for the program
       to work properly.
  
!      ‘-fno-trampolines’ is enabled by default on a language by language
       basis to let the compiler avoid generating them, if it computes
       that this is safe, and replace them with descriptors.  Descriptors
       are made up of data only, but the generated code must be prepared
!      to deal with them.  As of this writing, ‘-fno-trampolines’ is
       enabled by default only for Ada.
  
!      Moreover, code compiled with ‘-ftrampolines’ and code compiled with
!      ‘-fno-trampolines’ are not binary compatible if nested functions
       are present.  This option must therefore be used on a program-wide
       basis and be manipulated with extreme care.
  
!      For languages other than Ada, the ‘-ftrampolines’ and
!      ‘-fno-trampolines’ options currently have no effect, and
       trampolines are always generated on platforms that need them for
       nested functions.
  
! ‘-ftrampoline-impl=[stack|heap]’
       By default, trampolines are generated on stack.  However, certain
       platforms (such as the Apple M1) do not permit an executable stack.
!      Compiling with ‘-ftrampoline-impl=heap’ generate calls to
!      ‘__gcc_nested_func_ptr_created’ and ‘__gcc_nested_func_ptr_deleted’
       in order to allocate and deallocate trampoline space on the
       executable heap.  These functions are implemented in libgcc, and
       will only be provided on specific targets: x86_64 Darwin, x86_64
       and aarch64 Linux.  _PLEASE NOTE_: Heap trampolines are _not_
!      guaranteed to be correctly deallocated if you ‘setjmp’, instantiate
!      nested functions, and then ‘longjmp’ back to a state prior to
       having allocated those nested functions.
  
! ‘-fvisibility=[default|internal|hidden|protected]’
       Set the default ELF image symbol visibility to the specified
       option--all symbols are marked with this unless overridden within
       the code.  Using this feature can very substantially improve
*************** form by either removing 'no-' or adding
*** 18562,18572 ****
       clashes.  It is *strongly* recommended that you use this in any
       shared objects you distribute.
  
!      Despite the nomenclature, 'default' always means public; i.e.,
       available to be linked against from outside the shared object.
!      'protected' and 'internal' are pretty useless in real-world usage
!      so the only other commonly used option is 'hidden'.  The default if
!      '-fvisibility' isn't specified is 'default', i.e., make every
       symbol public.
  
       A good explanation of the benefits offered by ensuring ELF symbols
--- 18566,18576 ----
       clashes.  It is *strongly* recommended that you use this in any
       shared objects you distribute.
  
!      Despite the nomenclature, ‘default’ always means public; i.e.,
       available to be linked against from outside the shared object.
!      ‘protected’ and ‘internal’ are pretty useless in real-world usage
!      so the only other commonly used option is ‘hidden’.  The default if
!      ‘-fvisibility’ isn't specified is ‘default’, i.e., make every
       symbol public.
  
       A good explanation of the benefits offered by ensuring ELF symbols
*************** form by either removing 'no-' or adding
*** 18576,18630 ****
       made possible by this option to marking things hidden when the
       default is public is to make the default hidden and mark things
       public.  This is the norm with DLLs on Windows and with
!      '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
!      instead of '__declspec(dllexport)' you get almost identical
       semantics with identical syntax.  This is a great boon to those
       working with cross-platform projects.
  
       For those adding visibility support to existing code, you may find
!      '#pragma GCC visibility' of use.  This works by you enclosing the
       declarations you wish to set visibility for with (for example)
!      '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
!      pop'.  Bear in mind that symbol visibility should be viewed *as
       part of the API interface contract* and thus all new code should
       always specify visibility when it is not the default; i.e.,
       declarations only for use within the local DSO should *always* be
       marked explicitly as hidden as so to avoid PLT indirection
       overheads--making this abundantly clear also aids readability and
       self-documentation of the code.  Note that due to ISO C++
!      specification requirements, 'operator new' and 'operator delete'
       must always be of default visibility.
  
       Be aware that headers from outside your project, in particular
       system headers and headers from any other library you use, may not
       be expecting to be compiled with visibility other than the default.
!      You may need to explicitly say '#pragma GCC visibility
!      push(default)' before including any such headers.
  
!      'extern' declarations are not affected by '-fvisibility', so a lot
!      of code can be recompiled with '-fvisibility=hidden' with no
!      modifications.  However, this means that calls to 'extern'
       functions with no explicit visibility use the PLT, so it is more
!      effective to use '__attribute ((visibility))' and/or '#pragma GCC
!      visibility' to tell the compiler which 'extern' declarations should
       be treated as hidden.
  
!      Note that '-fvisibility' does affect C++ vague linkage entities.
       This means that, for instance, an exception class that is be thrown
       between DSOs must be explicitly marked with default visibility so
!      that the 'type_info' nodes are unified between the DSOs.
  
       An overview of these techniques, their benefits and how to use them
       is at <https://gcc.gnu.org/wiki/Visibility>.
  
! '-fstrict-volatile-bitfields'
       This option should be used if accesses to volatile bit-fields (or
       other structure fields, although the compiler usually honors those
       types anyway) should use a single access of the width of the
       field's type, aligned to a natural alignment if possible.  For
       example, targets with memory-mapped peripheral registers might
       require all such accesses to be 16 bits wide; with this flag you
!      can declare all peripheral bit-fields as 'unsigned short' (assuming
       short is 16 bits on these targets) to force GCC to use 16-bit
       accesses instead of, perhaps, a more efficient 32-bit access.
  
--- 18580,18634 ----
       made possible by this option to marking things hidden when the
       default is public is to make the default hidden and mark things
       public.  This is the norm with DLLs on Windows and with
!      ‘-fvisibility=hidden’ and ‘__attribute__ ((visibility("default")))’
!      instead of ‘__declspec(dllexport)’ you get almost identical
       semantics with identical syntax.  This is a great boon to those
       working with cross-platform projects.
  
       For those adding visibility support to existing code, you may find
!      ‘#pragma GCC visibility’ of use.  This works by you enclosing the
       declarations you wish to set visibility for with (for example)
!      ‘#pragma GCC visibility push(hidden)’ and ‘#pragma GCC visibility
!      pop’.  Bear in mind that symbol visibility should be viewed *as
       part of the API interface contract* and thus all new code should
       always specify visibility when it is not the default; i.e.,
       declarations only for use within the local DSO should *always* be
       marked explicitly as hidden as so to avoid PLT indirection
       overheads--making this abundantly clear also aids readability and
       self-documentation of the code.  Note that due to ISO C++
!      specification requirements, ‘operator new’ and ‘operator delete’
       must always be of default visibility.
  
       Be aware that headers from outside your project, in particular
       system headers and headers from any other library you use, may not
       be expecting to be compiled with visibility other than the default.
!      You may need to explicitly say ‘#pragma GCC visibility
!      push(default)’ before including any such headers.
  
!      ‘extern’ declarations are not affected by ‘-fvisibility’, so a lot
!      of code can be recompiled with ‘-fvisibility=hidden’ with no
!      modifications.  However, this means that calls to ‘extern’
       functions with no explicit visibility use the PLT, so it is more
!      effective to use ‘__attribute ((visibility))’ and/or ‘#pragma GCC
!      visibility’ to tell the compiler which ‘extern’ declarations should
       be treated as hidden.
  
!      Note that ‘-fvisibility’ does affect C++ vague linkage entities.
       This means that, for instance, an exception class that is be thrown
       between DSOs must be explicitly marked with default visibility so
!      that the ‘type_info’ nodes are unified between the DSOs.
  
       An overview of these techniques, their benefits and how to use them
       is at <https://gcc.gnu.org/wiki/Visibility>.
  
! ‘-fstrict-volatile-bitfields’
       This option should be used if accesses to volatile bit-fields (or
       other structure fields, although the compiler usually honors those
       types anyway) should use a single access of the width of the
       field's type, aligned to a natural alignment if possible.  For
       example, targets with memory-mapped peripheral registers might
       require all such accesses to be 16 bits wide; with this flag you
!      can declare all peripheral bit-fields as ‘unsigned short’ (assuming
       short is 16 bits on these targets) to force GCC to use 16-bit
       accesses instead of, perhaps, a more efficient 32-bit access.
  
*************** form by either removing 'no-' or adding
*** 18634,18640 ****
       any portion of the bit-field, or memory-mapped registers unrelated
       to the one being updated.
  
!      In some cases, such as when the 'packed' attribute is applied to a
       structure field, it may not be possible to access the field with a
       single read or write that is correctly aligned for the target
       machine.  In this case GCC falls back to generating multiple
--- 18638,18644 ----
       any portion of the bit-field, or memory-mapped registers unrelated
       to the one being updated.
  
!      In some cases, such as when the ‘packed’ attribute is applied to a
       structure field, it may not be possible to access the field with a
       single read or write that is correctly aligned for the target
       machine.  In this case GCC falls back to generating multiple
*************** form by either removing 'no-' or adding
*** 18649,18662 ****
       The default value of this option is determined by the application
       binary interface for the target processor.
  
! '-fsync-libcalls'
       This option controls whether any out-of-line instance of the
!      '__sync' family of functions may be used to implement the C++11
!      '__atomic' family of functions.
  
       The default value of this option is enabled, thus the only useful
!      form of the option is '-fno-sync-libcalls'.  This option is used in
!      the implementation of the 'libatomic' runtime library.
  
  
  File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
--- 18653,18666 ----
       The default value of this option is determined by the application
       binary interface for the target processor.
  
! ‘-fsync-libcalls’
       This option controls whether any out-of-line instance of the
!      ‘__sync’ family of functions may be used to implement the C++11
!      ‘__atomic’ family of functions.
  
       The default value of this option is enabled, thus the only useful
!      form of the option is ‘-fno-sync-libcalls’.  This option is used in
!      the implementation of the ‘libatomic’ runtime library.
  
  
  File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
*************** such as where it searches for libraries.
*** 18674,18683 ****
  any of these options for ordinary compilation and linking tasks.
  
   Many developer options that cause GCC to dump output to a file take an
! optional '=FILENAME' suffix.  You can specify 'stdout' or '-' to dump to
! standard output, and 'stderr' for standard error.
  
!  If '=FILENAME' is omitted, a default dump file name is constructed by
  concatenating the base dump file name, a pass number, phase letter, and
  pass name.  The base dump file name is the name of output file produced
  by the compiler if explicitly specified and not an executable; otherwise
--- 18678,18687 ----
  any of these options for ordinary compilation and linking tasks.
  
   Many developer options that cause GCC to dump output to a file take an
! optional ‘=FILENAME’ suffix.  You can specify ‘stdout’ or ‘-’ to dump to
! standard output, and ‘stderr’ for standard error.
  
!  If ‘=FILENAME’ is omitted, a default dump file name is constructed by
  concatenating the base dump file name, a pass number, phase letter, and
  pass name.  The base dump file name is the name of output file produced
  by the compiler if explicitly specified and not an executable; otherwise
*************** it is the source file name.  The pass nu
*** 18685,19012 ****
  passes are registered with the compiler's pass manager.  This is
  generally the same as the order of execution, but passes registered by
  plugins, target-specific passes, or passes that are otherwise registered
! late are numbered higher than the pass named 'final', even if they are
! executed earlier.  The phase letter is one of 'i' (inter-procedural
! analysis), 'l' (language-specific), 'r' (RTL), or 't' (tree).  The files
  are created in the directory of the output file.
  
! '-fcallgraph-info'
! '-fcallgraph-info=MARKERS'
       Makes the compiler output callgraph information for the program, on
       a per-object-file basis.  The information is generated in the
       common VCG format.  It can be decorated with additional, per-node
       and/or per-edge information, if a list of comma-separated markers
!      is additionally specified.  When the 'su' marker is specified, the
       callgraph is decorated with stack usage information; it is
!      equivalent to '-fstack-usage'.  When the 'da' marker is specified,
       the callgraph is decorated with information about dynamically
       allocated objects.
  
!      When compiling with '-flto', no callgraph information is output
!      along with the object file.  At LTO link time, '-fcallgraph-info'
       may generate multiple callgraph information files next to
       intermediate LTO output files.
  
! '-dLETTERS'
! '-fdump-rtl-PASS'
! '-fdump-rtl-PASS=FILENAME'
       Says to make debugging dumps during compilation at times specified
       by LETTERS.  This is used for debugging the RTL-based passes of the
       compiler.
  
!      Some '-dLETTERS' switches have different meaning when '-E' is used
       for preprocessing.  *Note Preprocessor Options::, for information
       about preprocessor-specific dump options.
  
!      Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
       option LETTERS.  Here are the possible letters for use in PASS and
       LETTERS, and their meanings:
  
!      '-fdump-rtl-alignments'
            Dump after branch alignments have been computed.
  
!      '-fdump-rtl-asmcons'
            Dump after fixing rtl statements that have unsatisfied in/out
            constraints.
  
!      '-fdump-rtl-auto_inc_dec'
            Dump after auto-inc-dec discovery.  This pass is only run on
            architectures that have auto inc or auto dec instructions.
  
!      '-fdump-rtl-barriers'
            Dump after cleaning up the barrier instructions.
  
!      '-fdump-rtl-bbpart'
            Dump after partitioning hot and cold basic blocks.
  
!      '-fdump-rtl-bbro'
            Dump after block reordering.
  
!      '-fdump-rtl-btl1'
!      '-fdump-rtl-btl2'
!           '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
            the two branch target load optimization passes.
  
!      '-fdump-rtl-bypass'
            Dump after jump bypassing and control flow optimizations.
  
!      '-fdump-rtl-combine'
            Dump after the RTL instruction combination pass.
  
!      '-fdump-rtl-compgotos'
            Dump after duplicating the computed gotos.
  
!      '-fdump-rtl-ce1'
!      '-fdump-rtl-ce2'
!      '-fdump-rtl-ce3'
!           '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
            enable dumping after the three if conversion passes.
  
!      '-fdump-rtl-cprop_hardreg'
            Dump after hard register copy propagation.
  
!      '-fdump-rtl-csa'
            Dump after combining stack adjustments.
  
!      '-fdump-rtl-cse1'
!      '-fdump-rtl-cse2'
!           '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
            the two common subexpression elimination passes.
  
!      '-fdump-rtl-dce'
            Dump after the standalone dead code elimination passes.
  
!      '-fdump-rtl-dbr'
            Dump after delayed branch scheduling.
  
!      '-fdump-rtl-dce1'
!      '-fdump-rtl-dce2'
!           '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
            the two dead store elimination passes.
  
!      '-fdump-rtl-eh'
            Dump after finalization of EH handling code.
  
!      '-fdump-rtl-eh_ranges'
            Dump after conversion of EH handling range regions.
  
!      '-fdump-rtl-expand'
            Dump after RTL generation.
  
!      '-fdump-rtl-fwprop1'
!      '-fdump-rtl-fwprop2'
!           '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
            after the two forward propagation passes.
  
!      '-fdump-rtl-gcse1'
!      '-fdump-rtl-gcse2'
!           '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
            global common subexpression elimination.
  
!      '-fdump-rtl-init-regs'
            Dump after the initialization of the registers.
  
!      '-fdump-rtl-initvals'
            Dump after the computation of the initial value sets.
  
!      '-fdump-rtl-into_cfglayout'
            Dump after converting to cfglayout mode.
  
!      '-fdump-rtl-ira'
            Dump after iterated register allocation.
  
!      '-fdump-rtl-jump'
            Dump after the second jump optimization.
  
!      '-fdump-rtl-loop2'
!           '-fdump-rtl-loop2' enables dumping after the rtl loop
            optimization passes.
  
!      '-fdump-rtl-mach'
            Dump after performing the machine dependent reorganization
            pass, if that pass exists.
  
!      '-fdump-rtl-mode_sw'
            Dump after removing redundant mode switches.
  
!      '-fdump-rtl-rnreg'
            Dump after register renumbering.
  
!      '-fdump-rtl-outof_cfglayout'
            Dump after converting from cfglayout mode.
  
!      '-fdump-rtl-peephole2'
            Dump after the peephole pass.
  
!      '-fdump-rtl-postreload'
            Dump after post-reload optimizations.
  
!      '-fdump-rtl-pro_and_epilogue'
            Dump after generating the function prologues and epilogues.
  
!      '-fdump-rtl-sched1'
!      '-fdump-rtl-sched2'
!           '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
            after the basic block scheduling passes.
  
!      '-fdump-rtl-ree'
            Dump after sign/zero extension elimination.
  
!      '-fdump-rtl-seqabstr'
            Dump after common sequence discovery.
  
!      '-fdump-rtl-shorten'
            Dump after shortening branches.
  
!      '-fdump-rtl-sibling'
            Dump after sibling call optimizations.
  
!      '-fdump-rtl-split1'
!      '-fdump-rtl-split2'
!      '-fdump-rtl-split3'
!      '-fdump-rtl-split4'
!      '-fdump-rtl-split5'
            These options enable dumping after five rounds of instruction
            splitting.
  
!      '-fdump-rtl-sms'
            Dump after modulo scheduling.  This pass is only run on some
            architectures.
  
!      '-fdump-rtl-stack'
            Dump after conversion from GCC's "flat register file"
            registers to the x87's stack-like registers.  This pass is
            only run on x86 variants.
  
!      '-fdump-rtl-subreg1'
!      '-fdump-rtl-subreg2'
!           '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
            after the two subreg expansion passes.
  
!      '-fdump-rtl-unshare'
            Dump after all rtl has been unshared.
  
!      '-fdump-rtl-vartrack'
            Dump after variable tracking.
  
!      '-fdump-rtl-vregs'
            Dump after converting virtual registers to hard registers.
  
!      '-fdump-rtl-web'
            Dump after live range splitting.
  
!      '-fdump-rtl-regclass'
!      '-fdump-rtl-subregs_of_mode_init'
!      '-fdump-rtl-subregs_of_mode_finish'
!      '-fdump-rtl-dfinit'
!      '-fdump-rtl-dfinish'
            These dumps are defined but always produce empty files.
  
!      '-da'
!      '-fdump-rtl-all'
            Produce all the dumps listed above.
  
!      '-dA'
            Annotate the assembler output with miscellaneous debugging
            information.
  
!      '-dD'
            Dump all macro definitions, at the end of preprocessing, in
            addition to normal output.
  
!      '-dH'
            Produce a core dump whenever an error occurs.
  
!      '-dp'
            Annotate the assembler output with a comment indicating which
            pattern and alternative is used.  The length and cost of each
            instruction are also printed.
  
!      '-dP'
            Dump the RTL in the assembler output as a comment before each
!           instruction.  Also turns on '-dp' annotation.
  
!      '-dx'
            Just generate RTL for a function instead of compiling it.
!           Usually used with '-fdump-rtl-expand'.
  
! '-fdump-debug'
       Dump debugging information generated during the debug generation
       phase.
  
! '-fdump-earlydebug'
       Dump debugging information generated during the early debug
       generation phase.
  
! '-fdump-noaddr'
       When doing debugging dumps, suppress address output.  This makes it
       more feasible to use diff on debugging dumps for compiler
       invocations with different compiler binaries and/or different text
       / bss / data / heap / stack / dso start locations.
  
! '-freport-bug'
       Collect and dump debug information into a temporary file if an
       internal compiler error (ICE) occurs.
  
! '-fdump-unnumbered'
       When doing debugging dumps, suppress instruction numbers and
       address output.  This makes it more feasible to use diff on
       debugging dumps for compiler invocations with different options, in
!      particular with and without '-g'.
  
! '-fdump-unnumbered-links'
!      When doing debugging dumps (see '-d' option above), suppress
       instruction numbers for the links to the previous and next
       instructions in a sequence.
  
! '-fdump-ipa-SWITCH'
! '-fdump-ipa-SWITCH-OPTIONS'
       Control the dumping at various stages of inter-procedural analysis
       language tree to a file.  The file name is generated by appending a
       switch specific suffix to the source file name, and the file is
       created in the same directory as the output file.  The following
       dumps are possible:
  
!      'all'
            Enables all inter-procedural analysis dumps.
  
!      'cgraph'
            Dumps information about call-graph optimization, unused
            function removal, and inlining decisions.
  
!      'inline'
            Dump after function inlining.
  
!      'strubm'
!           Dump after selecting 'strub' modes, and recording the
            selections as function attributes.
  
!      'strub'
!           Dump 'strub' transformations: interface changes, function
            wrapping, and insertion of builtin calls for stack scrubbing
            and watermarking.
  
!      Additionally, the options '-optimized', '-missed', '-note', and
!      '-all' can be provided, with the same meaning as for '-fopt-info',
!      defaulting to '-optimized'.
  
!      For example, '-fdump-ipa-inline-optimized-missed' will emit
       information on callsites that were inlined, along with callsites
       that were not inlined.
  
       By default, the dump will contain messages about successful
!      optimizations (equivalent to '-optimized') together with low-level
       details about the analysis.
  
! '-fdump-ipa-clones'
  
       Create a dump file containing information about creation of call
       graph node clones and removals of call graph nodes during
       inter-procedural optimizations and transformations.  Its main
       intended use is that tools that create live-patches can determine
       the set of functions that need to be live-patched to completely
!      replace a particular function (see '-flive-patching').  The file
!      name is generated by appending suffix 'ipa-clones' to the source
       file name, and the file is created in the same directory as the
       output file.  Each entry in the file is on a separate line
       containing semicolon separated fields.
--- 18689,19016 ----
  passes are registered with the compiler's pass manager.  This is
  generally the same as the order of execution, but passes registered by
  plugins, target-specific passes, or passes that are otherwise registered
! late are numbered higher than the pass named ‘final’, even if they are
! executed earlier.  The phase letter is one of ‘i’ (inter-procedural
! analysis), ‘l’ (language-specific), ‘r’ (RTL), or ‘t’ (tree).  The files
  are created in the directory of the output file.
  
! ‘-fcallgraph-info’
! ‘-fcallgraph-info=MARKERS’
       Makes the compiler output callgraph information for the program, on
       a per-object-file basis.  The information is generated in the
       common VCG format.  It can be decorated with additional, per-node
       and/or per-edge information, if a list of comma-separated markers
!      is additionally specified.  When the ‘su’ marker is specified, the
       callgraph is decorated with stack usage information; it is
!      equivalent to ‘-fstack-usage’.  When the ‘da’ marker is specified,
       the callgraph is decorated with information about dynamically
       allocated objects.
  
!      When compiling with ‘-flto’, no callgraph information is output
!      along with the object file.  At LTO link time, ‘-fcallgraph-info’
       may generate multiple callgraph information files next to
       intermediate LTO output files.
  
! ‘-dLETTERS’
! ‘-fdump-rtl-PASS’
! ‘-fdump-rtl-PASS=FILENAME’
       Says to make debugging dumps during compilation at times specified
       by LETTERS.  This is used for debugging the RTL-based passes of the
       compiler.
  
!      Some ‘-dLETTERS’ switches have different meaning when ‘-E’ is used
       for preprocessing.  *Note Preprocessor Options::, for information
       about preprocessor-specific dump options.
  
!      Debug dumps can be enabled with a ‘-fdump-rtl’ switch or some ‘-d’
       option LETTERS.  Here are the possible letters for use in PASS and
       LETTERS, and their meanings:
  
!      ‘-fdump-rtl-alignments’
            Dump after branch alignments have been computed.
  
!      ‘-fdump-rtl-asmcons’
            Dump after fixing rtl statements that have unsatisfied in/out
            constraints.
  
!      ‘-fdump-rtl-auto_inc_dec’
            Dump after auto-inc-dec discovery.  This pass is only run on
            architectures that have auto inc or auto dec instructions.
  
!      ‘-fdump-rtl-barriers’
            Dump after cleaning up the barrier instructions.
  
!      ‘-fdump-rtl-bbpart’
            Dump after partitioning hot and cold basic blocks.
  
!      ‘-fdump-rtl-bbro’
            Dump after block reordering.
  
!      ‘-fdump-rtl-btl1’
!      ‘-fdump-rtl-btl2’
!           ‘-fdump-rtl-btl1’ and ‘-fdump-rtl-btl2’ enable dumping after
            the two branch target load optimization passes.
  
!      ‘-fdump-rtl-bypass’
            Dump after jump bypassing and control flow optimizations.
  
!      ‘-fdump-rtl-combine’
            Dump after the RTL instruction combination pass.
  
!      ‘-fdump-rtl-compgotos’
            Dump after duplicating the computed gotos.
  
!      ‘-fdump-rtl-ce1’
!      ‘-fdump-rtl-ce2’
!      ‘-fdump-rtl-ce3’
!           ‘-fdump-rtl-ce1’, ‘-fdump-rtl-ce2’, and ‘-fdump-rtl-ce3’
            enable dumping after the three if conversion passes.
  
!      ‘-fdump-rtl-cprop_hardreg’
            Dump after hard register copy propagation.
  
!      ‘-fdump-rtl-csa’
            Dump after combining stack adjustments.
  
!      ‘-fdump-rtl-cse1’
!      ‘-fdump-rtl-cse2’
!           ‘-fdump-rtl-cse1’ and ‘-fdump-rtl-cse2’ enable dumping after
            the two common subexpression elimination passes.
  
!      ‘-fdump-rtl-dce’
            Dump after the standalone dead code elimination passes.
  
!      ‘-fdump-rtl-dbr’
            Dump after delayed branch scheduling.
  
!      ‘-fdump-rtl-dce1’
!      ‘-fdump-rtl-dce2’
!           ‘-fdump-rtl-dce1’ and ‘-fdump-rtl-dce2’ enable dumping after
            the two dead store elimination passes.
  
!      ‘-fdump-rtl-eh’
            Dump after finalization of EH handling code.
  
!      ‘-fdump-rtl-eh_ranges’
            Dump after conversion of EH handling range regions.
  
!      ‘-fdump-rtl-expand’
            Dump after RTL generation.
  
!      ‘-fdump-rtl-fwprop1’
!      ‘-fdump-rtl-fwprop2’
!           ‘-fdump-rtl-fwprop1’ and ‘-fdump-rtl-fwprop2’ enable dumping
            after the two forward propagation passes.
  
!      ‘-fdump-rtl-gcse1’
!      ‘-fdump-rtl-gcse2’
!           ‘-fdump-rtl-gcse1’ and ‘-fdump-rtl-gcse2’ enable dumping after
            global common subexpression elimination.
  
!      ‘-fdump-rtl-init-regs’
            Dump after the initialization of the registers.
  
!      ‘-fdump-rtl-initvals’
            Dump after the computation of the initial value sets.
  
!      ‘-fdump-rtl-into_cfglayout’
            Dump after converting to cfglayout mode.
  
!      ‘-fdump-rtl-ira’
            Dump after iterated register allocation.
  
!      ‘-fdump-rtl-jump’
            Dump after the second jump optimization.
  
!      ‘-fdump-rtl-loop2’
!           ‘-fdump-rtl-loop2’ enables dumping after the rtl loop
            optimization passes.
  
!      ‘-fdump-rtl-mach’
            Dump after performing the machine dependent reorganization
            pass, if that pass exists.
  
!      ‘-fdump-rtl-mode_sw’
            Dump after removing redundant mode switches.
  
!      ‘-fdump-rtl-rnreg’
            Dump after register renumbering.
  
!      ‘-fdump-rtl-outof_cfglayout’
            Dump after converting from cfglayout mode.
  
!      ‘-fdump-rtl-peephole2’
            Dump after the peephole pass.
  
!      ‘-fdump-rtl-postreload’
            Dump after post-reload optimizations.
  
!      ‘-fdump-rtl-pro_and_epilogue’
            Dump after generating the function prologues and epilogues.
  
!      ‘-fdump-rtl-sched1’
!      ‘-fdump-rtl-sched2’
!           ‘-fdump-rtl-sched1’ and ‘-fdump-rtl-sched2’ enable dumping
            after the basic block scheduling passes.
  
!      ‘-fdump-rtl-ree’
            Dump after sign/zero extension elimination.
  
!      ‘-fdump-rtl-seqabstr’
            Dump after common sequence discovery.
  
!      ‘-fdump-rtl-shorten’
            Dump after shortening branches.
  
!      ‘-fdump-rtl-sibling’
            Dump after sibling call optimizations.
  
!      ‘-fdump-rtl-split1’
!      ‘-fdump-rtl-split2’
!      ‘-fdump-rtl-split3’
!      ‘-fdump-rtl-split4’
!      ‘-fdump-rtl-split5’
            These options enable dumping after five rounds of instruction
            splitting.
  
!      ‘-fdump-rtl-sms’
            Dump after modulo scheduling.  This pass is only run on some
            architectures.
  
!      ‘-fdump-rtl-stack’
            Dump after conversion from GCC's "flat register file"
            registers to the x87's stack-like registers.  This pass is
            only run on x86 variants.
  
!      ‘-fdump-rtl-subreg1’
!      ‘-fdump-rtl-subreg2’
!           ‘-fdump-rtl-subreg1’ and ‘-fdump-rtl-subreg2’ enable dumping
            after the two subreg expansion passes.
  
!      ‘-fdump-rtl-unshare’
            Dump after all rtl has been unshared.
  
!      ‘-fdump-rtl-vartrack’
            Dump after variable tracking.
  
!      ‘-fdump-rtl-vregs’
            Dump after converting virtual registers to hard registers.
  
!      ‘-fdump-rtl-web’
            Dump after live range splitting.
  
!      ‘-fdump-rtl-regclass’
!      ‘-fdump-rtl-subregs_of_mode_init’
!      ‘-fdump-rtl-subregs_of_mode_finish’
!      ‘-fdump-rtl-dfinit’
!      ‘-fdump-rtl-dfinish’
            These dumps are defined but always produce empty files.
  
!      ‘-da’
!      ‘-fdump-rtl-all’
            Produce all the dumps listed above.
  
!      ‘-dA’
            Annotate the assembler output with miscellaneous debugging
            information.
  
!      ‘-dD’
            Dump all macro definitions, at the end of preprocessing, in
            addition to normal output.
  
!      ‘-dH’
            Produce a core dump whenever an error occurs.
  
!      ‘-dp’
            Annotate the assembler output with a comment indicating which
            pattern and alternative is used.  The length and cost of each
            instruction are also printed.
  
!      ‘-dP’
            Dump the RTL in the assembler output as a comment before each
!           instruction.  Also turns on ‘-dp’ annotation.
  
!      ‘-dx’
            Just generate RTL for a function instead of compiling it.
!           Usually used with ‘-fdump-rtl-expand’.
  
! ‘-fdump-debug’
       Dump debugging information generated during the debug generation
       phase.
  
! ‘-fdump-earlydebug’
       Dump debugging information generated during the early debug
       generation phase.
  
! ‘-fdump-noaddr’
       When doing debugging dumps, suppress address output.  This makes it
       more feasible to use diff on debugging dumps for compiler
       invocations with different compiler binaries and/or different text
       / bss / data / heap / stack / dso start locations.
  
! ‘-freport-bug’
       Collect and dump debug information into a temporary file if an
       internal compiler error (ICE) occurs.
  
! ‘-fdump-unnumbered’
       When doing debugging dumps, suppress instruction numbers and
       address output.  This makes it more feasible to use diff on
       debugging dumps for compiler invocations with different options, in
!      particular with and without ‘-g’.
  
! ‘-fdump-unnumbered-links’
!      When doing debugging dumps (see ‘-d’ option above), suppress
       instruction numbers for the links to the previous and next
       instructions in a sequence.
  
! ‘-fdump-ipa-SWITCH’
! ‘-fdump-ipa-SWITCH-OPTIONS’
       Control the dumping at various stages of inter-procedural analysis
       language tree to a file.  The file name is generated by appending a
       switch specific suffix to the source file name, and the file is
       created in the same directory as the output file.  The following
       dumps are possible:
  
!      ‘all’
            Enables all inter-procedural analysis dumps.
  
!      ‘cgraph’
            Dumps information about call-graph optimization, unused
            function removal, and inlining decisions.
  
!      ‘inline’
            Dump after function inlining.
  
!      ‘strubm’
!           Dump after selecting ‘strub’ modes, and recording the
            selections as function attributes.
  
!      ‘strub’
!           Dump ‘strub’ transformations: interface changes, function
            wrapping, and insertion of builtin calls for stack scrubbing
            and watermarking.
  
!      Additionally, the options ‘-optimized’, ‘-missed’, ‘-note’, and
!      ‘-all’ can be provided, with the same meaning as for ‘-fopt-info’,
!      defaulting to ‘-optimized’.
  
!      For example, ‘-fdump-ipa-inline-optimized-missed’ will emit
       information on callsites that were inlined, along with callsites
       that were not inlined.
  
       By default, the dump will contain messages about successful
!      optimizations (equivalent to ‘-optimized’) together with low-level
       details about the analysis.
  
! ‘-fdump-ipa-clones’
  
       Create a dump file containing information about creation of call
       graph node clones and removals of call graph nodes during
       inter-procedural optimizations and transformations.  Its main
       intended use is that tools that create live-patches can determine
       the set of functions that need to be live-patched to completely
!      replace a particular function (see ‘-flive-patching’).  The file
!      name is generated by appending suffix ‘ipa-clones’ to the source
       file name, and the file is created in the same directory as the
       output file.  Each entry in the file is on a separate line
       containing semicolon separated fields.
*************** are created in the directory of the outp
*** 19014,19020 ****
       In the case of call graph clone creation, the individual fields
       are:
  
!        1. String 'Callgraph clone'.
  
         2. Name of the function being cloned as it is presented to the
            assembler.
--- 19018,19024 ----
       In the case of call graph clone creation, the individual fields
       are:
  
!        1. String ‘Callgraph clone’.
  
         2. Name of the function being cloned as it is presented to the
            assembler.
*************** are created in the directory of the outp
*** 19052,19058 ****
  
       In the case of call graph clone removal, the individual fields are:
  
!        1. String 'Callgraph removal'.
  
         2. Name of the function being removed as it would be presented to
            the assembler.
--- 19056,19062 ----
  
       In the case of call graph clone removal, the individual fields are:
  
!        1. String ‘Callgraph removal’.
  
         2. Name of the function being removed as it would be presented to
            the assembler.
*************** are created in the directory of the outp
*** 19069,19142 ****
  
         6. The column where the function definition is located.
  
! '-fdump-lang'
       Dump language-specific information.  The file name is made by
!      appending '.lang' to the source file name.
  
! '-fdump-lang-all'
! '-fdump-lang-SWITCH'
! '-fdump-lang-SWITCH-OPTIONS'
! '-fdump-lang-SWITCH-OPTIONS=FILENAME'
       Control the dumping of language-specific information.  The OPTIONS
!      and FILENAME portions behave as described in the '-fdump-tree'
       option.  The following SWITCH values are accepted:
  
!      'all'
  
            Enable all language-specific dumps.
  
!      'class'
            Dump class hierarchy information.  Virtual table information
!           is emitted unless ''slim'' is specified.  This option is
            applicable to C++ only.
  
!      'module'
!           Dump module information.  Options 'lineno' (locations),
!           'graph' (reachability), 'blocks' (clusters), 'uid'
!           (serialization), 'alias' (mergeable), 'asmname' (Elrond), 'eh'
!           (mapper) & 'vops' (macros) may provide additional information.
            This option is applicable to C++ only.
  
!      'raw'
            Dump the raw internal tree data.  This option is applicable to
            C++ only.
  
! '-fdump-passes'
!      Print on 'stderr' the list of optimization passes that are turned
       on and off by the current command-line options.
  
! '-fdump-statistics-OPTION'
       Enable and control dumping of pass statistics in a separate file.
       The file name is generated by appending a suffix ending in
!      '.statistics' to the source file name, and the file is created in
!      the same directory as the output file.  If the '-OPTION' form is
!      used, '-stats' causes counters to be summed over the whole
!      compilation unit while '-details' dumps every event as the passes
       generate them.  The default with no option is to sum counters for
       each function compiled.
  
! '-fdump-tree-all'
! '-fdump-tree-SWITCH'
! '-fdump-tree-SWITCH-OPTIONS'
! '-fdump-tree-SWITCH-OPTIONS=FILENAME'
       Control the dumping at various stages of processing the
!      intermediate language tree to a file.  If the '-OPTIONS' form is
!      used, OPTIONS is a list of '-' separated options which control the
       details of the dump.  Not all options are applicable to all dumps;
       those that are not meaningful are ignored.  The following options
       are available
  
!      'address'
            Print the address of each node.  Usually this is not
            meaningful as it changes according to the environment and
            source file.  Its primary use is for tying up a dump file with
            a debug environment.
!      'asmname'
!           If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
!           that in the dump instead of 'DECL_NAME'.  Its primary use is
            ease of use working backward from mangled names in the
            assembly file.
!      'slim'
            When dumping front-end intermediate representations, inhibit
            dumping of members of a scope or body of a function merely
            because that scope has been reached.  Only dump such items
--- 19073,19146 ----
  
         6. The column where the function definition is located.
  
! ‘-fdump-lang’
       Dump language-specific information.  The file name is made by
!      appending ‘.lang’ to the source file name.
  
! ‘-fdump-lang-all’
! ‘-fdump-lang-SWITCH’
! ‘-fdump-lang-SWITCH-OPTIONS’
! ‘-fdump-lang-SWITCH-OPTIONS=FILENAME’
       Control the dumping of language-specific information.  The OPTIONS
!      and FILENAME portions behave as described in the ‘-fdump-tree’
       option.  The following SWITCH values are accepted:
  
!      ‘all’
  
            Enable all language-specific dumps.
  
!      ‘class’
            Dump class hierarchy information.  Virtual table information
!           is emitted unless '‘slim’' is specified.  This option is
            applicable to C++ only.
  
!      ‘module’
!           Dump module information.  Options ‘lineno’ (locations),
!           ‘graph’ (reachability), ‘blocks’ (clusters), ‘uid’
!           (serialization), ‘alias’ (mergeable), ‘asmname’ (Elrond), ‘eh’
!           (mapper) & ‘vops’ (macros) may provide additional information.
            This option is applicable to C++ only.
  
!      ‘raw’
            Dump the raw internal tree data.  This option is applicable to
            C++ only.
  
! ‘-fdump-passes’
!      Print on ‘stderr’ the list of optimization passes that are turned
       on and off by the current command-line options.
  
! ‘-fdump-statistics-OPTION’
       Enable and control dumping of pass statistics in a separate file.
       The file name is generated by appending a suffix ending in
!      ‘.statistics’ to the source file name, and the file is created in
!      the same directory as the output file.  If the ‘-OPTION’ form is
!      used, ‘-stats’ causes counters to be summed over the whole
!      compilation unit while ‘-details’ dumps every event as the passes
       generate them.  The default with no option is to sum counters for
       each function compiled.
  
! ‘-fdump-tree-all’
! ‘-fdump-tree-SWITCH’
! ‘-fdump-tree-SWITCH-OPTIONS’
! ‘-fdump-tree-SWITCH-OPTIONS=FILENAME’
       Control the dumping at various stages of processing the
!      intermediate language tree to a file.  If the ‘-OPTIONS’ form is
!      used, OPTIONS is a list of ‘-’ separated options which control the
       details of the dump.  Not all options are applicable to all dumps;
       those that are not meaningful are ignored.  The following options
       are available
  
!      ‘address’
            Print the address of each node.  Usually this is not
            meaningful as it changes according to the environment and
            source file.  Its primary use is for tying up a dump file with
            a debug environment.
!      ‘asmname’
!           If ‘DECL_ASSEMBLER_NAME’ has been set for a given decl, use
!           that in the dump instead of ‘DECL_NAME’.  Its primary use is
            ease of use working backward from mangled names in the
            assembly file.
!      ‘slim’
            When dumping front-end intermediate representations, inhibit
            dumping of members of a scope or body of a function merely
            because that scope has been reached.  Only dump such items
*************** are created in the directory of the outp
*** 19147,19232 ****
  
            When dumping RTL, print the RTL in slim (condensed) form
            instead of the default LISP-like representation.
!      'raw'
            Print a raw representation of the tree.  By default, trees are
            pretty-printed into a C-like representation.
!      'details'
            Enable more detailed dumps (not honored by every dump option).
            Also include information from the optimization passes.
!      'stats'
            Enable dumping various statistics about the pass (not honored
            by every dump option).
!      'blocks'
            Enable showing basic block boundaries (disabled in raw dumps).
!      'graph'
            For each of the other indicated dump files
!           ('-fdump-rtl-PASS'), dump a representation of the control flow
            graph suitable for viewing with GraphViz to
!           'FILE.PASSID.PASS.dot'.  Each function in the file is
            pretty-printed as a subgraph, so that GraphViz can render them
            all in a single plot.
  
            This option currently only works for RTL dumps, and the RTL is
            always dumped in slim form.
!      'vops'
            Enable showing virtual operands for every statement.
!      'lineno'
            Enable showing line numbers for statements.
!      'uid'
!           Enable showing the unique ID ('DECL_UID') for each variable.
!      'verbose'
            Enable showing the tree dump for each statement.
!      'eh'
            Enable showing the EH region number holding each statement.
!      'scev'
            Enable showing scalar evolution analysis details.
!      'optimized'
            Enable showing optimization information (only available in
            certain passes).
!      'missed'
            Enable showing missed optimization information (only available
            in certain passes).
!      'note'
            Enable other detailed optimization information (only available
            in certain passes).
!      'all'
!           Turn on all options, except 'raw', 'slim', 'verbose' and
!           'lineno'.
!      'optall'
!           Turn on all optimization options, i.e., 'optimized', 'missed',
!           and 'note'.
  
       To determine what tree dumps are available or find the dump for a
       pass of interest follow the steps below.
  
!        1. Invoke GCC with '-fdump-passes' and in the 'stderr' output
            look for a code that corresponds to the pass you are
!           interested in.  For example, the codes 'tree-evrp',
!           'tree-vrp1', and 'tree-vrp2' correspond to the three Value
            Range Propagation passes.  The number at the end distinguishes
            distinct invocations of the same pass.
         2. To enable the creation of the dump file, append the pass code
!           to the '-fdump-' option prefix and invoke GCC with it.  For
            example, to enable the dump from the Early Value Range
!           Propagation pass, invoke GCC with the '-fdump-tree-evrp'
            option.  Optionally, you may specify the name of the dump
            file.  If you don't specify one, GCC creates as described
            below.
         3. Find the pass dump in a file whose name is composed of three
            components separated by a period: the name of the source file
            GCC was invoked to compile, a numeric suffix indicating the
!           pass number followed by the letter 't' for tree passes (and
!           the letter 'r' for RTL passes), and finally the pass code.
            For example, the Early VRP pass dump might be in a file named
!           'myfile.c.038t.evrp' in the current working directory.  Note
            that the numeric codes are not stable and may change from one
            version of GCC to another.
  
! '-fopt-info'
! '-fopt-info-OPTIONS'
! '-fopt-info-OPTIONS=FILENAME'
       Controls optimization dumps from various optimization passes.  If
!      the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
       option keywords to select the dump details and optimizations.
  
       The OPTIONS can be divided into three groups:
--- 19151,19236 ----
  
            When dumping RTL, print the RTL in slim (condensed) form
            instead of the default LISP-like representation.
!      ‘raw’
            Print a raw representation of the tree.  By default, trees are
            pretty-printed into a C-like representation.
!      ‘details’
            Enable more detailed dumps (not honored by every dump option).
            Also include information from the optimization passes.
!      ‘stats’
            Enable dumping various statistics about the pass (not honored
            by every dump option).
!      ‘blocks’
            Enable showing basic block boundaries (disabled in raw dumps).
!      ‘graph’
            For each of the other indicated dump files
!           (‘-fdump-rtl-PASS’), dump a representation of the control flow
            graph suitable for viewing with GraphViz to
!           ‘FILE.PASSID.PASS.dot’.  Each function in the file is
            pretty-printed as a subgraph, so that GraphViz can render them
            all in a single plot.
  
            This option currently only works for RTL dumps, and the RTL is
            always dumped in slim form.
!      ‘vops’
            Enable showing virtual operands for every statement.
!      ‘lineno’
            Enable showing line numbers for statements.
!      ‘uid’
!           Enable showing the unique ID (‘DECL_UID’) for each variable.
!      ‘verbose’
            Enable showing the tree dump for each statement.
!      ‘eh’
            Enable showing the EH region number holding each statement.
!      ‘scev’
            Enable showing scalar evolution analysis details.
!      ‘optimized’
            Enable showing optimization information (only available in
            certain passes).
!      ‘missed’
            Enable showing missed optimization information (only available
            in certain passes).
!      ‘note’
            Enable other detailed optimization information (only available
            in certain passes).
!      ‘all’
!           Turn on all options, except ‘raw’, ‘slim’, ‘verbose’ and
!           ‘lineno’.
!      ‘optall’
!           Turn on all optimization options, i.e., ‘optimized’, ‘missed’,
!           and ‘note’.
  
       To determine what tree dumps are available or find the dump for a
       pass of interest follow the steps below.
  
!        1. Invoke GCC with ‘-fdump-passes’ and in the ‘stderr’ output
            look for a code that corresponds to the pass you are
!           interested in.  For example, the codes ‘tree-evrp’,
!           ‘tree-vrp1’, and ‘tree-vrp2’ correspond to the three Value
            Range Propagation passes.  The number at the end distinguishes
            distinct invocations of the same pass.
         2. To enable the creation of the dump file, append the pass code
!           to the ‘-fdump-’ option prefix and invoke GCC with it.  For
            example, to enable the dump from the Early Value Range
!           Propagation pass, invoke GCC with the ‘-fdump-tree-evrp’
            option.  Optionally, you may specify the name of the dump
            file.  If you don't specify one, GCC creates as described
            below.
         3. Find the pass dump in a file whose name is composed of three
            components separated by a period: the name of the source file
            GCC was invoked to compile, a numeric suffix indicating the
!           pass number followed by the letter ‘t’ for tree passes (and
!           the letter ‘r’ for RTL passes), and finally the pass code.
            For example, the Early VRP pass dump might be in a file named
!           ‘myfile.c.038t.evrp’ in the current working directory.  Note
            that the numeric codes are not stable and may change from one
            version of GCC to another.
  
! ‘-fopt-info’
! ‘-fopt-info-OPTIONS’
! ‘-fopt-info-OPTIONS=FILENAME’
       Controls optimization dumps from various optimization passes.  If
!      the ‘-OPTIONS’ form is used, OPTIONS is a list of ‘-’ separated
       option keywords to select the dump details and optimizations.
  
       The OPTIONS can be divided into three groups:
*************** are created in the directory of the outp
*** 19240,19263 ****
       The following options control which kinds of messages should be
       emitted:
  
!      'optimized'
            Print information when an optimization is successfully
            applied.  It is up to a pass to decide which information is
            relevant.  For example, the vectorizer passes print the source
            location of loops which are successfully vectorized.
!      'missed'
            Print information about missed optimizations.  Individual
            passes control which information to include in the output.
!      'note'
            Print verbose information about optimizations, such as certain
            transformations, more detailed messages about decisions etc.
!      'all'
            Print detailed optimization information.  This includes
!           'optimized', 'missed', and 'note'.
  
       The following option controls the dump verbosity:
  
!      'internals'
            By default, only "high-level" messages are emitted.  This
            option enables additional, more detailed, messages, which are
            likely to only be of interest to GCC developers.
--- 19244,19267 ----
       The following options control which kinds of messages should be
       emitted:
  
!      ‘optimized’
            Print information when an optimization is successfully
            applied.  It is up to a pass to decide which information is
            relevant.  For example, the vectorizer passes print the source
            location of loops which are successfully vectorized.
!      ‘missed’
            Print information about missed optimizations.  Individual
            passes control which information to include in the output.
!      ‘note’
            Print verbose information about optimizations, such as certain
            transformations, more detailed messages about decisions etc.
!      ‘all’
            Print detailed optimization information.  This includes
!           ‘optimized’, ‘missed’, and ‘note’.
  
       The following option controls the dump verbosity:
  
!      ‘internals’
            By default, only "high-level" messages are emitted.  This
            option enables additional, more detailed, messages, which are
            likely to only be of interest to GCC developers.
*************** are created in the directory of the outp
*** 19265,19302 ****
       One or more of the following option keywords can be used to
       describe a group of optimizations:
  
!      'ipa'
            Enable dumps from all interprocedural optimizations.
!      'loop'
            Enable dumps from all loop optimizations.
!      'inline'
            Enable dumps from all inlining optimizations.
!      'omp'
            Enable dumps from all OMP (Offloading and Multi Processing)
            optimizations.
!      'vec'
            Enable dumps from all vectorization optimizations.
!      'optall'
            Enable dumps from all optimizations.  This is a superset of
            the optimization groups listed above.
  
!      If OPTIONS is omitted, it defaults to 'optimized-optall', which
       means to dump messages about successful optimizations from all the
       passes, omitting messages that are treated as "internals".
  
       If the FILENAME is provided, then the dumps from all the applicable
       optimizations are concatenated into the FILENAME.  Otherwise the
!      dump is output onto 'stderr'.  Though multiple '-fopt-info' options
       are accepted, only one of them can include a FILENAME.  If other
       filenames are provided then all but the first such option are
       ignored.
  
       Note that the output FILENAME is overwritten in case of multiple
       translation units.  If a combined output from multiple translation
!      units is desired, 'stderr' should be used instead.
  
       In the following example, the optimization info is output to
!      'stderr':
  
            gcc -O3 -fopt-info
  
--- 19269,19306 ----
       One or more of the following option keywords can be used to
       describe a group of optimizations:
  
!      ‘ipa’
            Enable dumps from all interprocedural optimizations.
!      ‘loop’
            Enable dumps from all loop optimizations.
!      ‘inline’
            Enable dumps from all inlining optimizations.
!      ‘omp’
            Enable dumps from all OMP (Offloading and Multi Processing)
            optimizations.
!      ‘vec’
            Enable dumps from all vectorization optimizations.
!      ‘optall’
            Enable dumps from all optimizations.  This is a superset of
            the optimization groups listed above.
  
!      If OPTIONS is omitted, it defaults to ‘optimized-optall’, which
       means to dump messages about successful optimizations from all the
       passes, omitting messages that are treated as "internals".
  
       If the FILENAME is provided, then the dumps from all the applicable
       optimizations are concatenated into the FILENAME.  Otherwise the
!      dump is output onto ‘stderr’.  Though multiple ‘-fopt-info’ options
       are accepted, only one of them can include a FILENAME.  If other
       filenames are provided then all but the first such option are
       ignored.
  
       Note that the output FILENAME is overwritten in case of multiple
       translation units.  If a combined output from multiple translation
!      units is desired, ‘stderr’ should be used instead.
  
       In the following example, the optimization info is output to
!      ‘stderr’:
  
            gcc -O3 -fopt-info
  
*************** are created in the directory of the outp
*** 19304,19404 ****
            gcc -O3 -fopt-info-missed=missed.all
  
       outputs missed optimization report from all the passes into
!      'missed.all', and this one:
  
            gcc -O2 -ftree-vectorize -fopt-info-vec-missed
  
       prints information about missed optimization opportunities from
!      vectorization passes on 'stderr'.  Note that
!      '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.
       The order of the optimization group names and message types listed
!      after '-fopt-info' does not matter.
  
       As another example,
            gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
  
       outputs information about missed optimizations as well as optimized
!      locations from all the inlining passes into 'inline.txt'.
  
       Finally, consider:
  
            gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
  
!      Here the two output filenames 'vec.miss' and 'loop.opt' are in
       conflict since only one output file is allowed.  In this case, only
       the first option takes effect and the subsequent options are
!      ignored.  Thus only 'vec.miss' is produced which contains dumps
       from the vectorizer about missed opportunities.
  
! '-fsave-optimization-record'
       Write a SRCFILE.opt-record.json.gz file detailing what
       optimizations were performed, for those optimizations that support
!      '-fopt-info'.
  
       This option is experimental and the format of the data within the
       compressed JSON file is subject to change.
  
       It is roughly equivalent to a machine-readable version of
!      '-fopt-info-all', as a collection of messages with source file,
       line number and column number, with the following additional data
       for each message:
  
!         * the execution count of the code being optimized, along with
            metadata about whether this was from actual profile data, or
            just an estimate, allowing consumers to prioritize messages by
            code hotness,
  
!         * the function name of the code being optimized, where
            applicable,
  
!         * the "inlining chain" for the code being optimized, so that
            when a function is inlined into several different places
            (which might themselves be inlined), the reader can
            distinguish between the copies,
  
!         * objects identifying those parts of the message that refer to
            expressions, statements or symbol-table nodes, which of these
            categories they are, and, when available, their source code
            location,
  
!         * the GCC pass that emitted the message, and
  
!         * the location in GCC's own code from which the message was
            emitted
  
       Additionally, some messages are logically nested within other
       messages, reflecting implementation details of the optimization
       passes.
  
! '-fsched-verbose=N'
       On targets that use instruction scheduling, this option controls
       the amount of debugging output the scheduler prints to the dump
       files.
  
!      For N greater than zero, '-fsched-verbose' outputs the same
!      information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
       greater than one, it also output basic block probabilities,
       detailed ready list information and unit/insn info.  For N greater
       than two, it includes RTL at abort point, control-flow and regions
!      info.  And for N over four, '-fsched-verbose' also includes
       dependence info.
  
! '-fenable-KIND-PASS'
! '-fdisable-KIND-PASS=RANGE-LIST'
  
       This is a set of options that are used to explicitly disable/enable
       optimization passes.  These options are intended for use for
       debugging GCC. Compiler users should use regular options for
       enabling/disabling passes instead.
  
!      '-fdisable-ipa-PASS'
            Disable IPA pass PASS.  PASS is the pass name.  If the same
            pass is statically invoked in the compiler multiple times, the
            pass name should be appended with a sequential number starting
            from 1.
  
!      '-fdisable-rtl-PASS'
!      '-fdisable-rtl-PASS=RANGE-LIST'
            Disable RTL pass PASS.  PASS is the pass name.  If the same
            pass is statically invoked in the compiler multiple times, the
            pass name should be appended with a sequential number starting
--- 19308,19408 ----
            gcc -O3 -fopt-info-missed=missed.all
  
       outputs missed optimization report from all the passes into
!      ‘missed.all’, and this one:
  
            gcc -O2 -ftree-vectorize -fopt-info-vec-missed
  
       prints information about missed optimization opportunities from
!      vectorization passes on ‘stderr’.  Note that
!      ‘-fopt-info-vec-missed’ is equivalent to ‘-fopt-info-missed-vec’.
       The order of the optimization group names and message types listed
!      after ‘-fopt-info’ does not matter.
  
       As another example,
            gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
  
       outputs information about missed optimizations as well as optimized
!      locations from all the inlining passes into ‘inline.txt’.
  
       Finally, consider:
  
            gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
  
!      Here the two output filenames ‘vec.miss’ and ‘loop.opt’ are in
       conflict since only one output file is allowed.  In this case, only
       the first option takes effect and the subsequent options are
!      ignored.  Thus only ‘vec.miss’ is produced which contains dumps
       from the vectorizer about missed opportunities.
  
! ‘-fsave-optimization-record’
       Write a SRCFILE.opt-record.json.gz file detailing what
       optimizations were performed, for those optimizations that support
!      ‘-fopt-info’.
  
       This option is experimental and the format of the data within the
       compressed JSON file is subject to change.
  
       It is roughly equivalent to a machine-readable version of
!      ‘-fopt-info-all’, as a collection of messages with source file,
       line number and column number, with the following additional data
       for each message:
  
!         • the execution count of the code being optimized, along with
            metadata about whether this was from actual profile data, or
            just an estimate, allowing consumers to prioritize messages by
            code hotness,
  
!         • the function name of the code being optimized, where
            applicable,
  
!         • the "inlining chain" for the code being optimized, so that
            when a function is inlined into several different places
            (which might themselves be inlined), the reader can
            distinguish between the copies,
  
!         • objects identifying those parts of the message that refer to
            expressions, statements or symbol-table nodes, which of these
            categories they are, and, when available, their source code
            location,
  
!         • the GCC pass that emitted the message, and
  
!         • the location in GCC's own code from which the message was
            emitted
  
       Additionally, some messages are logically nested within other
       messages, reflecting implementation details of the optimization
       passes.
  
! ‘-fsched-verbose=N’
       On targets that use instruction scheduling, this option controls
       the amount of debugging output the scheduler prints to the dump
       files.
  
!      For N greater than zero, ‘-fsched-verbose’ outputs the same
!      information as ‘-fdump-rtl-sched1’ and ‘-fdump-rtl-sched2’.  For N
       greater than one, it also output basic block probabilities,
       detailed ready list information and unit/insn info.  For N greater
       than two, it includes RTL at abort point, control-flow and regions
!      info.  And for N over four, ‘-fsched-verbose’ also includes
       dependence info.
  
! ‘-fenable-KIND-PASS’
! ‘-fdisable-KIND-PASS=RANGE-LIST’
  
       This is a set of options that are used to explicitly disable/enable
       optimization passes.  These options are intended for use for
       debugging GCC. Compiler users should use regular options for
       enabling/disabling passes instead.
  
!      ‘-fdisable-ipa-PASS’
            Disable IPA pass PASS.  PASS is the pass name.  If the same
            pass is statically invoked in the compiler multiple times, the
            pass name should be appended with a sequential number starting
            from 1.
  
!      ‘-fdisable-rtl-PASS’
!      ‘-fdisable-rtl-PASS=RANGE-LIST’
            Disable RTL pass PASS.  PASS is the pass name.  If the same
            pass is statically invoked in the compiler multiple times, the
            pass name should be appended with a sequential number starting
*************** are created in the directory of the outp
*** 19410,19436 ****
            falls within one of the specified ranges, the PASS is disabled
            for that function.  The UID is shown in the function header of
            a dump file, and the pass names can be dumped by using option
!           '-fdump-passes'.
  
!      '-fdisable-tree-PASS'
!      '-fdisable-tree-PASS=RANGE-LIST'
!           Disable tree pass PASS.  See '-fdisable-rtl' for the
            description of option arguments.
  
!      '-fenable-ipa-PASS'
            Enable IPA pass PASS.  PASS is the pass name.  If the same
            pass is statically invoked in the compiler multiple times, the
            pass name should be appended with a sequential number starting
            from 1.
  
!      '-fenable-rtl-PASS'
!      '-fenable-rtl-PASS=RANGE-LIST'
!           Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
            description and examples.
  
!      '-fenable-tree-PASS'
!      '-fenable-tree-PASS=RANGE-LIST'
!           Enable tree pass PASS.  See '-fdisable-rtl' for the
            description of option arguments.
  
       Here are some examples showing uses of these options.
--- 19414,19440 ----
            falls within one of the specified ranges, the PASS is disabled
            for that function.  The UID is shown in the function header of
            a dump file, and the pass names can be dumped by using option
!           ‘-fdump-passes’.
  
!      ‘-fdisable-tree-PASS’
!      ‘-fdisable-tree-PASS=RANGE-LIST’
!           Disable tree pass PASS.  See ‘-fdisable-rtl’ for the
            description of option arguments.
  
!      ‘-fenable-ipa-PASS’
            Enable IPA pass PASS.  PASS is the pass name.  If the same
            pass is statically invoked in the compiler multiple times, the
            pass name should be appended with a sequential number starting
            from 1.
  
!      ‘-fenable-rtl-PASS’
!      ‘-fenable-rtl-PASS=RANGE-LIST’
!           Enable RTL pass PASS.  See ‘-fdisable-rtl’ for option argument
            description and examples.
  
!      ‘-fenable-tree-PASS’
!      ‘-fenable-tree-PASS=RANGE-LIST’
!           Enable tree pass PASS.  See ‘-fdisable-rtl’ for the
            description of option arguments.
  
       Here are some examples showing uses of these options.
*************** are created in the directory of the outp
*** 19452,19469 ****
               -fenable-tree-unroll
  
  
! '-fchecking'
! '-fchecking=N'
       Enable internal consistency checking.  The default depends on the
!      compiler configuration.  '-fchecking=2' enables further internal
       consistency checking that might affect code generation.
  
! '-frandom-seed=STRING'
       This option provides a seed that GCC uses in place of random
       numbers in generating certain symbol names that have to be
       different in every compiled file.  It is also used to place unique
       stamps in coverage data files and the object files that produce
!      them.  You can use the '-frandom-seed' option to produce
       reproducibly identical object files.
  
       The STRING can either be a number (decimal, octal or hex) or an
--- 19456,19473 ----
               -fenable-tree-unroll
  
  
! ‘-fchecking’
! ‘-fchecking=N’
       Enable internal consistency checking.  The default depends on the
!      compiler configuration.  ‘-fchecking=2’ enables further internal
       consistency checking that might affect code generation.
  
! ‘-frandom-seed=STRING’
       This option provides a seed that GCC uses in place of random
       numbers in generating certain symbol names that have to be
       different in every compiled file.  It is also used to place unique
       stamps in coverage data files and the object files that produce
!      them.  You can use the ‘-frandom-seed’ option to produce
       reproducibly identical object files.
  
       The STRING can either be a number (decimal, octal or hex) or an
*************** are created in the directory of the outp
*** 19472,19498 ****
  
       The STRING should be different for every file you compile.
  
! '-save-temps'
       Store the usual "temporary" intermediate files permanently; name
       them as auxiliary output files, as specified described under
!      '-dumpbase' and '-dumpdir'.
  
!      When used in combination with the '-x' command-line option,
!      '-save-temps' is sensible enough to avoid overwriting an input
       source file with the same extension as an intermediate file.  The
       corresponding intermediate file may be obtained by renaming the
!      source file before using '-save-temps'.
  
! '-save-temps=cwd'
!      Equivalent to '-save-temps -dumpdir ./'.
  
! '-save-temps=obj'
!      Equivalent to '-save-temps -dumpdir outdir/', where 'outdir/' is
!      the directory of the output file specified after the '-o' option,
!      including any directory separators.  If the '-o' option is not
!      used, the '-save-temps=obj' switch behaves like '-save-temps=cwd'.
  
! '-time[=FILE]'
       Report the CPU time taken by each subprocess in the compilation
       sequence.  For C source files, this is the compiler proper and
       assembler (plus the linker if linking is done).
--- 19476,19502 ----
  
       The STRING should be different for every file you compile.
  
! ‘-save-temps’
       Store the usual "temporary" intermediate files permanently; name
       them as auxiliary output files, as specified described under
!      ‘-dumpbase’ and ‘-dumpdir’.
  
!      When used in combination with the ‘-x’ command-line option,
!      ‘-save-temps’ is sensible enough to avoid overwriting an input
       source file with the same extension as an intermediate file.  The
       corresponding intermediate file may be obtained by renaming the
!      source file before using ‘-save-temps’.
  
! ‘-save-temps=cwd’
!      Equivalent to ‘-save-temps -dumpdir ./’.
  
! ‘-save-temps=obj’
!      Equivalent to ‘-save-temps -dumpdir outdir/’, where ‘outdir/’ is
!      the directory of the output file specified after the ‘-o’ option,
!      including any directory separators.  If the ‘-o’ option is not
!      used, the ‘-save-temps=obj’ switch behaves like ‘-save-temps=cwd’.
  
! ‘-time[=FILE]’
       Report the CPU time taken by each subprocess in the compilation
       sequence.  For C source files, this is the compiler proper and
       assembler (plus the linker if linking is done).
*************** are created in the directory of the outp
*** 19519,19641 ****
       one can later tell what file was being compiled, and with which
       options.
  
! '-fdump-final-insns[=FILE]'
       Dump the final internal representation (RTL) to FILE.  If the
!      optional argument is omitted (or if FILE is '.'), the name of the
!      dump file is determined by appending '.gkd' to the dump base name,
!      see '-dumpbase'.
  
! '-fcompare-debug[=OPTS]'
       If no error occurs during compilation, run the compiler a second
!      time, adding OPTS and '-fcompare-debug-second' to the arguments
       passed to the second compilation.  Dump the final internal
       representation in both compilations, and print an error if they
       differ.
  
!      If the equal sign is omitted, the default '-gtoggle' is used.
  
!      The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
!      and nonzero, implicitly enables '-fcompare-debug'.  If
!      'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
!      then it is used for OPTS, otherwise the default '-gtoggle' is used.
  
!      '-fcompare-debug=', with the equal sign but without OPTS, is
!      equivalent to '-fno-compare-debug', which disables the dumping of
       the final representation and the second compilation, preventing
!      even 'GCC_COMPARE_DEBUG' from taking effect.
  
!      To verify full coverage during '-fcompare-debug' testing, set
!      'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
       GCC rejects as an invalid option in any actual compilation (rather
       than preprocessing, assembly or linking).  To get just a warning,
!      setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
       will do.
  
! '-fcompare-debug-second'
       This option is implicitly passed to the compiler for the second
!      compilation requested by '-fcompare-debug', along with options to
       silence warnings, and omitting other options that would cause the
       compiler to produce output to files or to standard output as a side
       effect.  Dump files and preserved temporary files are renamed so as
!      to contain the '.gk' additional extension during the second
       compilation, to avoid overwriting those generated by the first.
  
       When this option is passed to the compiler driver, it causes the
       _first_ compilation to be skipped, which makes it useful for little
       other than debugging the compiler proper.
  
! '-gtoggle'
       Turn off generation of debug info, if leaving out this option
       generates it, or turn it on at level 2 otherwise.  The position of
       this argument in the command line does not matter; it takes effect
       after all other options are processed, and it does so only once, no
       matter how many times it is given.  This is mainly intended to be
!      used with '-fcompare-debug'.
  
! '-fvar-tracking-assignments-toggle'
!      Toggle '-fvar-tracking-assignments', in the same way that
!      '-gtoggle' toggles '-g'.
  
! '-Q'
       Makes the compiler print out each function name as it is compiled,
       and print some statistics about each pass when it finishes.
  
! '-ftime-report'
       Makes the compiler print some statistics to stderr about the time
       consumed by each pass when it finishes.
  
       If SARIF output of diagnostics was requested via
!      '-fdiagnostics-format=sarif-file' or
!      '-fdiagnostics-format=sarif-stderr' then the '-ftime-report'
       information is instead emitted in JSON form as part of SARIF
       output.  The precise format of this JSON data is subject to change,
       and the values may not exactly match those emitted to stderr due to
       being written out at a slightly different place within the
       compiler.
  
! '-ftime-report-details'
       Record the time consumed by infrastructure parts separately for
       each pass.
  
! '-fira-verbose=N'
       Control the verbosity of the dump file for the integrated register
       allocator.  The default value is 5.  If the value N is greater or
       equal to 10, the dump output is sent to stderr using the same
       format as N minus 10.
  
! '-flto-report'
       Prints a report with internal details on the workings of the
       link-time optimizer.  The contents of this report vary from version
       to version.  It is meant to be useful to GCC developers when
!      processing object files in LTO mode (via '-flto').
  
       Disabled by default.
  
! '-flto-report-wpa'
!      Like '-flto-report', but only print for the WPA phase of link-time
       optimization.
  
! '-fmem-report'
       Makes the compiler print some statistics about permanent memory
       allocation when it finishes.
  
! '-fmem-report-wpa'
       Makes the compiler print some statistics about permanent memory
       allocation for the WPA phase only.
  
! '-fpre-ipa-mem-report'
! '-fpost-ipa-mem-report'
       Makes the compiler print some statistics about permanent memory
       allocation before or after interprocedural optimization.
  
! '-fmultiflags'
!      This option enables multilib-aware 'TFLAGS' to be used to build
       target libraries with options different from those the compiler is
       configured to use by default, through the use of specs (*note Spec
       Files::) set up by compiler internals, by the target, or by
       builders at configure time.
  
!      Like 'TFLAGS', this allows the target libraries to be built for
       portable baseline environments, while the compiler defaults to more
       demanding ones.  That's useful because users can easily override
       the defaults the compiler is configured to use to build their own
--- 19523,19645 ----
       one can later tell what file was being compiled, and with which
       options.
  
! ‘-fdump-final-insns[=FILE]’
       Dump the final internal representation (RTL) to FILE.  If the
!      optional argument is omitted (or if FILE is ‘.’), the name of the
!      dump file is determined by appending ‘.gkd’ to the dump base name,
!      see ‘-dumpbase’.
  
! ‘-fcompare-debug[=OPTS]’
       If no error occurs during compilation, run the compiler a second
!      time, adding OPTS and ‘-fcompare-debug-second’ to the arguments
       passed to the second compilation.  Dump the final internal
       representation in both compilations, and print an error if they
       differ.
  
!      If the equal sign is omitted, the default ‘-gtoggle’ is used.
  
!      The environment variable ‘GCC_COMPARE_DEBUG’, if defined, non-empty
!      and nonzero, implicitly enables ‘-fcompare-debug’.  If
!      ‘GCC_COMPARE_DEBUG’ is defined to a string starting with a dash,
!      then it is used for OPTS, otherwise the default ‘-gtoggle’ is used.
  
!      ‘-fcompare-debug=’, with the equal sign but without OPTS, is
!      equivalent to ‘-fno-compare-debug’, which disables the dumping of
       the final representation and the second compilation, preventing
!      even ‘GCC_COMPARE_DEBUG’ from taking effect.
  
!      To verify full coverage during ‘-fcompare-debug’ testing, set
!      ‘GCC_COMPARE_DEBUG’ to say ‘-fcompare-debug-not-overridden’, which
       GCC rejects as an invalid option in any actual compilation (rather
       than preprocessing, assembly or linking).  To get just a warning,
!      setting ‘GCC_COMPARE_DEBUG’ to ‘-w%n-fcompare-debug not overridden’
       will do.
  
! ‘-fcompare-debug-second’
       This option is implicitly passed to the compiler for the second
!      compilation requested by ‘-fcompare-debug’, along with options to
       silence warnings, and omitting other options that would cause the
       compiler to produce output to files or to standard output as a side
       effect.  Dump files and preserved temporary files are renamed so as
!      to contain the ‘.gk’ additional extension during the second
       compilation, to avoid overwriting those generated by the first.
  
       When this option is passed to the compiler driver, it causes the
       _first_ compilation to be skipped, which makes it useful for little
       other than debugging the compiler proper.
  
! ‘-gtoggle’
       Turn off generation of debug info, if leaving out this option
       generates it, or turn it on at level 2 otherwise.  The position of
       this argument in the command line does not matter; it takes effect
       after all other options are processed, and it does so only once, no
       matter how many times it is given.  This is mainly intended to be
!      used with ‘-fcompare-debug’.
  
! ‘-fvar-tracking-assignments-toggle’
!      Toggle ‘-fvar-tracking-assignments’, in the same way that
!      ‘-gtoggle’ toggles ‘-g’.
  
! ‘-Q’
       Makes the compiler print out each function name as it is compiled,
       and print some statistics about each pass when it finishes.
  
! ‘-ftime-report’
       Makes the compiler print some statistics to stderr about the time
       consumed by each pass when it finishes.
  
       If SARIF output of diagnostics was requested via
!      ‘-fdiagnostics-format=sarif-file’ or
!      ‘-fdiagnostics-format=sarif-stderr’ then the ‘-ftime-report’
       information is instead emitted in JSON form as part of SARIF
       output.  The precise format of this JSON data is subject to change,
       and the values may not exactly match those emitted to stderr due to
       being written out at a slightly different place within the
       compiler.
  
! ‘-ftime-report-details’
       Record the time consumed by infrastructure parts separately for
       each pass.
  
! ‘-fira-verbose=N’
       Control the verbosity of the dump file for the integrated register
       allocator.  The default value is 5.  If the value N is greater or
       equal to 10, the dump output is sent to stderr using the same
       format as N minus 10.
  
! ‘-flto-report’
       Prints a report with internal details on the workings of the
       link-time optimizer.  The contents of this report vary from version
       to version.  It is meant to be useful to GCC developers when
!      processing object files in LTO mode (via ‘-flto’).
  
       Disabled by default.
  
! ‘-flto-report-wpa’
!      Like ‘-flto-report’, but only print for the WPA phase of link-time
       optimization.
  
! ‘-fmem-report’
       Makes the compiler print some statistics about permanent memory
       allocation when it finishes.
  
! ‘-fmem-report-wpa’
       Makes the compiler print some statistics about permanent memory
       allocation for the WPA phase only.
  
! ‘-fpre-ipa-mem-report’
! ‘-fpost-ipa-mem-report’
       Makes the compiler print some statistics about permanent memory
       allocation before or after interprocedural optimization.
  
! ‘-fmultiflags’
!      This option enables multilib-aware ‘TFLAGS’ to be used to build
       target libraries with options different from those the compiler is
       configured to use by default, through the use of specs (*note Spec
       Files::) set up by compiler internals, by the target, or by
       builders at configure time.
  
!      Like ‘TFLAGS’, this allows the target libraries to be built for
       portable baseline environments, while the compiler defaults to more
       demanding ones.  That's useful because users can easily override
       the defaults the compiler is configured to use to build their own
*************** are created in the directory of the outp
*** 19643,19799 ****
       environment, whereas rebuilding the runtime libraries is usually
       not as easy or desirable.
  
!      Unlike 'TFLAGS', the use of specs enables different flags to be
       selected for different multilibs.  The way to accomplish that is to
!      build with 'make TFLAGS=-fmultiflags', after configuring
!      '--with-specs=%{fmultiflags:...}'.
  
       This option is discarded by the driver once it's done processing
       driver self spec.
  
!      It is also useful to check that 'TFLAGS' are being used to build
       all target libraries, by configuring a non-bootstrap compiler
!      '--with-specs='%{!fmultiflags:%emissing TFLAGS}'' and building the
       compiler and target libraries.
  
! '-fprofile-report'
       Makes the compiler print some statistics about consistency of the
       (estimated) profile and effect of individual passes.
  
! '-fstack-usage'
       Makes the compiler output stack usage information for the program,
       on a per-function basis.  The filename for the dump is made by
!      appending '.su' to the AUXNAME.  AUXNAME is generated from the name
       of the output file, if explicitly specified and it is not an
       executable, otherwise it is the basename of the source file.  An
       entry is made up of three fields:
  
!         * The name of the function.
!         * A number of bytes.
!         * One or more qualifiers: 'static', 'dynamic', 'bounded'.
  
!      The qualifier 'static' means that the function manipulates the
       stack statically: a fixed number of bytes are allocated for the
       frame on function entry and released on function exit; no stack
       adjustments are otherwise made in the function.  The second field
       is this fixed number of bytes.
  
!      The qualifier 'dynamic' means that the function manipulates the
       stack dynamically: in addition to the static allocation described
       above, stack adjustments are made in the body of the function, for
       example to push/pop arguments around function calls.  If the
!      qualifier 'bounded' is also present, the amount of these
       adjustments is bounded at compile time and the second field is an
       upper bound of the total amount of stack used by the function.  If
       it is not present, the amount of these adjustments is not bounded
       at compile time and the second field only represents the bounded
       part.
  
! '-fstats'
       Emit statistics about front-end processing at the end of the
       compilation.  This option is supported only by the C++ front end,
       and the information is generally only useful to the G++ development
       team.
  
! '-fdbg-cnt-list'
       Print the name and the counter upper bound for all debug counters.
  
! '-fdbg-cnt=COUNTER-VALUE-LIST'
       Set the internal debug counter lower and upper bound.
       COUNTER-VALUE-LIST is a comma-separated list of
       NAME:LOWER_BOUND1-UPPER_BOUND1 [:LOWER_BOUND2-UPPER_BOUND2...]
       tuples which sets the name of the counter and list of closed
       intervals.  The LOWER_BOUND is optional and is zero initialized if
!      not set.  For example, with '-fdbg-cnt=dce:2-4:10-11,tail_call:10',
!      'dbg_cnt(dce)' returns true only for second, third, fourth, tenth
!      and eleventh invocation.  For 'dbg_cnt(tail_call)' true is returned
       for first 10 invocations.
  
! '-print-file-name=LIBRARY'
       Print the full absolute name of the library file LIBRARY that would
       be used when linking--and don't do anything else.  With this
       option, GCC does not compile or link anything; it just prints the
       file name.
  
! '-print-multi-directory'
       Print the directory name corresponding to the multilib selected by
       any other switches present in the command line.  This directory is
!      supposed to exist in 'GCC_EXEC_PREFIX'.
  
! '-print-multi-lib'
       Print the mapping from multilib directory names to compiler
       switches that enable them.  The directory name is separated from
!      the switches by ';', and each switch starts with an '@' instead of
!      the '-', without spaces between multiple switches.  This is
       supposed to ease shell processing.
  
! '-print-multi-os-directory'
       Print the path to OS libraries for the selected multilib, relative
!      to some 'lib' subdirectory.  If OS libraries are present in the
!      'lib' subdirectory and no multilibs are used, this is usually just
!      '.', if OS libraries are present in 'libSUFFIX' sibling directories
!      this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
!      libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
!      'amd64', 'sparcv9' or 'ev6'.
  
! '-print-multiarch'
       Print the path to OS libraries for the selected multiarch, relative
!      to some 'lib' subdirectory.
  
! '-print-prog-name=PROGRAM'
!      Like '-print-file-name', but searches for a program such as 'cpp'.
  
! '-print-libgcc-file-name'
!      Same as '-print-file-name=libgcc.a'.
  
!      This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
!      do want to link with 'libgcc.a'.  You can do:
  
            gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
  
! '-print-search-dirs'
       Print the name of the configured installation directory and a list
!      of program and library directories 'gcc' searches--and don't do
       anything else.
  
!      This is useful when 'gcc' prints the error message 'installation
!      problem, cannot exec cpp0: No such file or directory'.  To resolve
!      this you either need to put 'cpp0' and the other compiler
!      components where 'gcc' expects to find them, or you can set the
!      environment variable 'GCC_EXEC_PREFIX' to the directory where you
!      installed them.  Don't forget the trailing '/'.  *Note Environment
       Variables::.
  
! '-print-sysroot'
       Print the target sysroot directory that is used during compilation.
       This is the target sysroot specified either at configure time or
!      using the '--sysroot' option, possibly with an extra suffix that
       depends on compilation options.  If no target sysroot is specified,
       the option prints nothing.
  
! '-print-sysroot-headers-suffix'
       Print the suffix added to the target sysroot when searching for
       headers, or give an error if the compiler is not configured with
       such a suffix--and don't do anything else.
  
! '-dumpmachine'
       Print the compiler's target machine (for example,
!      'i686-pc-linux-gnu')--and don't do anything else.
  
! '-dumpversion'
!      Print the compiler version (for example, '3.0', '6.3.0' or
!      '7')--and don't do anything else.  This is the compiler version
       used in filesystem paths and specs.  Depending on how the compiler
       has been configured it can be just a single number (major version),
       two numbers separated by a dot (major and minor version) or three
       numbers separated by dots (major, minor and patchlevel version).
  
! '-dumpfullversion'
       Print the full compiler version--and don't do anything else.  The
       output is always three numbers separated by dots, major, minor and
       patchlevel version.
  
! '-dumpspecs'
       Print the compiler's built-in specs--and don't do anything else.
       (This is used when GCC itself is being built.)  *Note Spec Files::.
  
--- 19647,19803 ----
       environment, whereas rebuilding the runtime libraries is usually
       not as easy or desirable.
  
!      Unlike ‘TFLAGS’, the use of specs enables different flags to be
       selected for different multilibs.  The way to accomplish that is to
!      build with ‘make TFLAGS=-fmultiflags’, after configuring
!      ‘--with-specs=%{fmultiflags:...}’.
  
       This option is discarded by the driver once it's done processing
       driver self spec.
  
!      It is also useful to check that ‘TFLAGS’ are being used to build
       all target libraries, by configuring a non-bootstrap compiler
!      ‘--with-specs='%{!fmultiflags:%emissing TFLAGS}'’ and building the
       compiler and target libraries.
  
! ‘-fprofile-report’
       Makes the compiler print some statistics about consistency of the
       (estimated) profile and effect of individual passes.
  
! ‘-fstack-usage’
       Makes the compiler output stack usage information for the program,
       on a per-function basis.  The filename for the dump is made by
!      appending ‘.su’ to the AUXNAME.  AUXNAME is generated from the name
       of the output file, if explicitly specified and it is not an
       executable, otherwise it is the basename of the source file.  An
       entry is made up of three fields:
  
!         • The name of the function.
!         • A number of bytes.
!         • One or more qualifiers: ‘static’, ‘dynamic’, ‘bounded’.
  
!      The qualifier ‘static’ means that the function manipulates the
       stack statically: a fixed number of bytes are allocated for the
       frame on function entry and released on function exit; no stack
       adjustments are otherwise made in the function.  The second field
       is this fixed number of bytes.
  
!      The qualifier ‘dynamic’ means that the function manipulates the
       stack dynamically: in addition to the static allocation described
       above, stack adjustments are made in the body of the function, for
       example to push/pop arguments around function calls.  If the
!      qualifier ‘bounded’ is also present, the amount of these
       adjustments is bounded at compile time and the second field is an
       upper bound of the total amount of stack used by the function.  If
       it is not present, the amount of these adjustments is not bounded
       at compile time and the second field only represents the bounded
       part.
  
! ‘-fstats’
       Emit statistics about front-end processing at the end of the
       compilation.  This option is supported only by the C++ front end,
       and the information is generally only useful to the G++ development
       team.
  
! ‘-fdbg-cnt-list’
       Print the name and the counter upper bound for all debug counters.
  
! ‘-fdbg-cnt=COUNTER-VALUE-LIST’
       Set the internal debug counter lower and upper bound.
       COUNTER-VALUE-LIST is a comma-separated list of
       NAME:LOWER_BOUND1-UPPER_BOUND1 [:LOWER_BOUND2-UPPER_BOUND2...]
       tuples which sets the name of the counter and list of closed
       intervals.  The LOWER_BOUND is optional and is zero initialized if
!      not set.  For example, with ‘-fdbg-cnt=dce:2-4:10-11,tail_call:10’,
!      ‘dbg_cnt(dce)’ returns true only for second, third, fourth, tenth
!      and eleventh invocation.  For ‘dbg_cnt(tail_call)’ true is returned
       for first 10 invocations.
  
! ‘-print-file-name=LIBRARY’
       Print the full absolute name of the library file LIBRARY that would
       be used when linking--and don't do anything else.  With this
       option, GCC does not compile or link anything; it just prints the
       file name.
  
! ‘-print-multi-directory’
       Print the directory name corresponding to the multilib selected by
       any other switches present in the command line.  This directory is
!      supposed to exist in ‘GCC_EXEC_PREFIX’.
  
! ‘-print-multi-lib’
       Print the mapping from multilib directory names to compiler
       switches that enable them.  The directory name is separated from
!      the switches by ‘;’, and each switch starts with an ‘@’ instead of
!      the ‘-’, without spaces between multiple switches.  This is
       supposed to ease shell processing.
  
! ‘-print-multi-os-directory’
       Print the path to OS libraries for the selected multilib, relative
!      to some ‘lib’ subdirectory.  If OS libraries are present in the
!      ‘lib’ subdirectory and no multilibs are used, this is usually just
!      ‘.’, if OS libraries are present in ‘libSUFFIX’ sibling directories
!      this prints e.g. ‘../lib64’, ‘../lib’ or ‘../lib32’, or if OS
!      libraries are present in ‘lib/SUBDIR’ subdirectories it prints e.g.
!      ‘amd64’, ‘sparcv9’ or ‘ev6’.
  
! ‘-print-multiarch’
       Print the path to OS libraries for the selected multiarch, relative
!      to some ‘lib’ subdirectory.
  
! ‘-print-prog-name=PROGRAM’
!      Like ‘-print-file-name’, but searches for a program such as ‘cpp’.
  
! ‘-print-libgcc-file-name’
!      Same as ‘-print-file-name=libgcc.a’.
  
!      This is useful when you use ‘-nostdlib’ or ‘-nodefaultlibs’ but you
!      do want to link with ‘libgcc.a’.  You can do:
  
            gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
  
! ‘-print-search-dirs’
       Print the name of the configured installation directory and a list
!      of program and library directories ‘gcc’ searches--and don't do
       anything else.
  
!      This is useful when ‘gcc’ prints the error message ‘installation
!      problem, cannot exec cpp0: No such file or directory’.  To resolve
!      this you either need to put ‘cpp0’ and the other compiler
!      components where ‘gcc’ expects to find them, or you can set the
!      environment variable ‘GCC_EXEC_PREFIX’ to the directory where you
!      installed them.  Don't forget the trailing ‘/’.  *Note Environment
       Variables::.
  
! ‘-print-sysroot’
       Print the target sysroot directory that is used during compilation.
       This is the target sysroot specified either at configure time or
!      using the ‘--sysroot’ option, possibly with an extra suffix that
       depends on compilation options.  If no target sysroot is specified,
       the option prints nothing.
  
! ‘-print-sysroot-headers-suffix’
       Print the suffix added to the target sysroot when searching for
       headers, or give an error if the compiler is not configured with
       such a suffix--and don't do anything else.
  
! ‘-dumpmachine’
       Print the compiler's target machine (for example,
!      ‘i686-pc-linux-gnu’)--and don't do anything else.
  
! ‘-dumpversion’
!      Print the compiler version (for example, ‘3.0’, ‘6.3.0’ or
!      ‘7’)--and don't do anything else.  This is the compiler version
       used in filesystem paths and specs.  Depending on how the compiler
       has been configured it can be just a single number (major version),
       two numbers separated by a dot (major and minor version) or three
       numbers separated by dots (major, minor and patchlevel version).
  
! ‘-dumpfullversion’
       Print the full compiler version--and don't do anything else.  The
       output is always three numbers separated by dots, major, minor and
       patchlevel version.
  
! ‘-dumpspecs’
       Print the compiler's built-in specs--and don't do anything else.
       (This is used when GCC itself is being built.)  *Note Spec Files::.
  
*************** File: gcc.info,  Node: Submodel Options,
*** 19806,19812 ****
  Each target machine supported by GCC can have its own options--for
  example, to allow you to compile for a particular processor variant or
  ABI, or to control optimizations specific to that machine.  By
! convention, the names of machine-specific options start with '-m'.
  
   Some configurations of the compiler also support additional
  target-specific options, usually for compatibility with other compilers
--- 19810,19816 ----
  Each target machine supported by GCC can have its own options--for
  example, to allow you to compile for a particular processor variant or
  ABI, or to control optimizations specific to that machine.  By
! convention, the names of machine-specific options start with ‘-m’.
  
   Some configurations of the compiler also support additional
  target-specific options, usually for compatibility with other compilers
*************** File: gcc.info,  Node: AArch64 Options,
*** 19881,19890 ****
  
  These options are defined for AArch64 implementations:
  
! '-mabi=NAME'
       Generate code for the specified data model.  Permissible values are
!      'ilp32' for SysV-like data model where int, long int and pointers
!      are 32 bits, and 'lp64' for SysV-like data model where int is 32
       bits, but long int and pointers are 64 bits.
  
       The default depends on the specific target configuration.  Note
--- 19885,19894 ----
  
  These options are defined for AArch64 implementations:
  
! ‘-mabi=NAME’
       Generate code for the specified data model.  Permissible values are
!      ‘ilp32’ for SysV-like data model where int, long int and pointers
!      are 32 bits, and ‘lp64’ for SysV-like data model where int is 32
       bits, but long int and pointers are 64 bits.
  
       The default depends on the specific target configuration.  Note
*************** These options are defined for AArch64 im
*** 19892,20023 ****
       compile your entire program with the same ABI, and link with a
       compatible set of libraries.
  
! '-mbig-endian'
       Generate big-endian code.  This is the default when GCC is
!      configured for an 'aarch64_be-*-*' target.
  
! '-mgeneral-regs-only'
       Generate code which uses only the general-purpose registers.  This
       will prevent the compiler from using floating-point and Advanced
       SIMD registers but will not impose any restrictions on the
       assembler.
  
! '-mlittle-endian'
       Generate little-endian code.  This is the default when GCC is
!      configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
  
! '-mcmodel=tiny'
       Generate code for the tiny code model.  The program and its
       statically defined symbols must be within 1MB of each other.
       Programs can be statically or dynamically linked.
  
! '-mcmodel=small'
       Generate code for the small code model.  The program and its
       statically defined symbols must be within 4GB of each other.
       Programs can be statically or dynamically linked.  This is the
       default code model.
  
! '-mcmodel=large'
       Generate code for the large code model.  This makes no assumptions
       about addresses and sizes of sections.  Programs can be statically
!      linked only.  The '-mcmodel=large' option is incompatible with
!      '-mabi=ilp32', '-fpic' and '-fPIC'.
  
! '-mtp=NAME'
       Specify the system register to use as a thread pointer.  The valid
!      values are 'tpidr_el0', 'tpidrro_el0', 'tpidr_el1', 'tpidr_el2',
!      'tpidr_el3'.  For backwards compatibility the aliases 'el0', 'el1',
!      'el2', 'el3' are also accepted.  The default setting is
!      'tpidr_el0'.  It is recommended to compile all code intended to
       interoperate with the same value of this option to avoid accessing
       a different thread pointer from the wrong exception level.
  
! '-mstrict-align'
! '-mno-strict-align'
       Avoid or allow generating memory accesses that may not be aligned
       on a natural object boundary as described in the architecture
       specification.
  
! '-momit-leaf-frame-pointer'
! '-mno-omit-leaf-frame-pointer'
       Omit or keep the frame pointer in leaf functions.  The former
       behavior is the default.
  
! '-mstack-protector-guard=GUARD'
! '-mstack-protector-guard-reg=REG'
! '-mstack-protector-guard-offset=OFFSET'
       Generate stack protection code using canary at GUARD.  Supported
!      locations are 'global' for a global canary or 'sysreg' for a canary
       in an appropriate system register.
  
       With the latter choice the options
!      '-mstack-protector-guard-reg=REG' and
!      '-mstack-protector-guard-offset=OFFSET' furthermore specify which
       system register to use as base register for reading the canary, and
       from what offset from that base register.  There is no default
       register or offset as this is entirely for use within the Linux
       kernel.
  
! '-mtls-dialect=desc'
       Use TLS descriptors as the thread-local storage mechanism for
       dynamic accesses of TLS variables.  This is the default.
  
! '-mtls-dialect=traditional'
       Use traditional TLS as the thread-local storage mechanism for
       dynamic accesses of TLS variables.
  
! '-mtls-size=SIZE'
       Specify bit size of immediate TLS offsets.  Valid values are 12,
       24, 32, 48.  This option requires binutils 2.26 or newer.
  
! '-mfix-cortex-a53-835769'
! '-mno-fix-cortex-a53-835769'
       Enable or disable the workaround for the ARM Cortex-A53 erratum
       number 835769.  This involves inserting a NOP instruction between
       memory instructions and 64-bit integer multiply-accumulate
       instructions.
  
! '-mfix-cortex-a53-843419'
! '-mno-fix-cortex-a53-843419'
       Enable or disable the workaround for the ARM Cortex-A53 erratum
       number 843419.  This erratum workaround is made at link time and
       this will only pass the corresponding flag to the linker.
  
! '-mlow-precision-recip-sqrt'
! '-mno-low-precision-recip-sqrt'
       Enable or disable the reciprocal square root approximation.  This
!      option only has an effect if '-ffast-math' or
!      '-funsafe-math-optimizations' is used as well.  Enabling this
       reduces precision of reciprocal square root results to about 16
       bits for single precision and to 32 bits for double precision.
  
! '-mlow-precision-sqrt'
! '-mno-low-precision-sqrt'
       Enable or disable the square root approximation.  This option only
!      has an effect if '-ffast-math' or '-funsafe-math-optimizations' is
       used as well.  Enabling this reduces precision of square root
       results to about 16 bits for single precision and to 32 bits for
       double precision.  If enabled, it implies
!      '-mlow-precision-recip-sqrt'.
  
! '-mlow-precision-div'
! '-mno-low-precision-div'
       Enable or disable the division approximation.  This option only has
!      an effect if '-ffast-math' or '-funsafe-math-optimizations' is used
       as well.  Enabling this reduces precision of division results to
       about 16 bits for single precision and to 32 bits for double
       precision.
  
! '-mtrack-speculation'
! '-mno-track-speculation'
       Enable or disable generation of additional code to track
       speculative execution through conditional branches.  The tracking
       state can then be used by the compiler when expanding calls to
!      '__builtin_speculation_safe_copy' to permit a more efficient code
       sequence to be generated.
  
! '-moutline-atomics'
! '-mno-outline-atomics'
       Enable or disable calls to out-of-line helpers to implement atomic
       operations.  These helpers will, at runtime, determine if the LSE
       instructions from ARMv8.1-A can be used; if not, they will use the
--- 19896,20027 ----
       compile your entire program with the same ABI, and link with a
       compatible set of libraries.
  
! ‘-mbig-endian’
       Generate big-endian code.  This is the default when GCC is
!      configured for an ‘aarch64_be-*-*’ target.
  
! ‘-mgeneral-regs-only’
       Generate code which uses only the general-purpose registers.  This
       will prevent the compiler from using floating-point and Advanced
       SIMD registers but will not impose any restrictions on the
       assembler.
  
! ‘-mlittle-endian’
       Generate little-endian code.  This is the default when GCC is
!      configured for an ‘aarch64-*-*’ but not an ‘aarch64_be-*-*’ target.
  
! ‘-mcmodel=tiny’
       Generate code for the tiny code model.  The program and its
       statically defined symbols must be within 1MB of each other.
       Programs can be statically or dynamically linked.
  
! ‘-mcmodel=small’
       Generate code for the small code model.  The program and its
       statically defined symbols must be within 4GB of each other.
       Programs can be statically or dynamically linked.  This is the
       default code model.
  
! ‘-mcmodel=large’
       Generate code for the large code model.  This makes no assumptions
       about addresses and sizes of sections.  Programs can be statically
!      linked only.  The ‘-mcmodel=large’ option is incompatible with
!      ‘-mabi=ilp32’, ‘-fpic’ and ‘-fPIC’.
  
! ‘-mtp=NAME’
       Specify the system register to use as a thread pointer.  The valid
!      values are ‘tpidr_el0’, ‘tpidrro_el0’, ‘tpidr_el1’, ‘tpidr_el2’,
!      ‘tpidr_el3’.  For backwards compatibility the aliases ‘el0’, ‘el1’,
!      ‘el2’, ‘el3’ are also accepted.  The default setting is
!      ‘tpidr_el0’.  It is recommended to compile all code intended to
       interoperate with the same value of this option to avoid accessing
       a different thread pointer from the wrong exception level.
  
! ‘-mstrict-align’
! ‘-mno-strict-align’
       Avoid or allow generating memory accesses that may not be aligned
       on a natural object boundary as described in the architecture
       specification.
  
! ‘-momit-leaf-frame-pointer’
! ‘-mno-omit-leaf-frame-pointer’
       Omit or keep the frame pointer in leaf functions.  The former
       behavior is the default.
  
! ‘-mstack-protector-guard=GUARD’
! ‘-mstack-protector-guard-reg=REG’
! ‘-mstack-protector-guard-offset=OFFSET’
       Generate stack protection code using canary at GUARD.  Supported
!      locations are ‘global’ for a global canary or ‘sysreg’ for a canary
       in an appropriate system register.
  
       With the latter choice the options
!      ‘-mstack-protector-guard-reg=REG’ and
!      ‘-mstack-protector-guard-offset=OFFSET’ furthermore specify which
       system register to use as base register for reading the canary, and
       from what offset from that base register.  There is no default
       register or offset as this is entirely for use within the Linux
       kernel.
  
! ‘-mtls-dialect=desc’
       Use TLS descriptors as the thread-local storage mechanism for
       dynamic accesses of TLS variables.  This is the default.
  
! ‘-mtls-dialect=traditional’
       Use traditional TLS as the thread-local storage mechanism for
       dynamic accesses of TLS variables.
  
! ‘-mtls-size=SIZE’
       Specify bit size of immediate TLS offsets.  Valid values are 12,
       24, 32, 48.  This option requires binutils 2.26 or newer.
  
! ‘-mfix-cortex-a53-835769’
! ‘-mno-fix-cortex-a53-835769’
       Enable or disable the workaround for the ARM Cortex-A53 erratum
       number 835769.  This involves inserting a NOP instruction between
       memory instructions and 64-bit integer multiply-accumulate
       instructions.
  
! ‘-mfix-cortex-a53-843419’
! ‘-mno-fix-cortex-a53-843419’
       Enable or disable the workaround for the ARM Cortex-A53 erratum
       number 843419.  This erratum workaround is made at link time and
       this will only pass the corresponding flag to the linker.
  
! ‘-mlow-precision-recip-sqrt’
! ‘-mno-low-precision-recip-sqrt’
       Enable or disable the reciprocal square root approximation.  This
!      option only has an effect if ‘-ffast-math’ or
!      ‘-funsafe-math-optimizations’ is used as well.  Enabling this
       reduces precision of reciprocal square root results to about 16
       bits for single precision and to 32 bits for double precision.
  
! ‘-mlow-precision-sqrt’
! ‘-mno-low-precision-sqrt’
       Enable or disable the square root approximation.  This option only
!      has an effect if ‘-ffast-math’ or ‘-funsafe-math-optimizations’ is
       used as well.  Enabling this reduces precision of square root
       results to about 16 bits for single precision and to 32 bits for
       double precision.  If enabled, it implies
!      ‘-mlow-precision-recip-sqrt’.
  
! ‘-mlow-precision-div’
! ‘-mno-low-precision-div’
       Enable or disable the division approximation.  This option only has
!      an effect if ‘-ffast-math’ or ‘-funsafe-math-optimizations’ is used
       as well.  Enabling this reduces precision of division results to
       about 16 bits for single precision and to 32 bits for double
       precision.
  
! ‘-mtrack-speculation’
! ‘-mno-track-speculation’
       Enable or disable generation of additional code to track
       speculative execution through conditional branches.  The tracking
       state can then be used by the compiler when expanding calls to
!      ‘__builtin_speculation_safe_copy’ to permit a more efficient code
       sequence to be generated.
  
! ‘-moutline-atomics’
! ‘-mno-outline-atomics’
       Enable or disable calls to out-of-line helpers to implement atomic
       operations.  These helpers will, at runtime, determine if the LSE
       instructions from ARMv8.1-A can be used; if not, they will use the
*************** These options are defined for AArch64 im
*** 20026,20110 ****
  
       This option is only applicable when compiling for the base ARMv8.0
       instruction set.  If using a later revision, e.g.
!      '-march=armv8.1-a' or '-march=armv8-a+lse', the ARMv8.1-Atomics
       instructions will be used directly.  The same applies when using
!      '-mcpu=' when the selected cpu supports the 'lse' feature.  This
       option is on by default.
  
! '-march=NAME'
       Specify the name of the target architecture and, optionally, one or
       more feature modifiers.  This option has the form
!      '-march=ARCH{+[no]FEATURE}*'.
  
       The table below summarizes the permissible values for ARCH and the
       features that they enable by default:
  
       ARCH value     Architecture   Includes by default
       --------------------------------------------------------------------------
!      'armv8-a'      Armv8-A        '+fp', '+simd'
!      'armv8.1-a'    Armv8.1-A      'armv8-a', '+crc', '+lse', '+rdma'
!      'armv8.2-a'    Armv8.2-A      'armv8.1-a'
!      'armv8.3-a'    Armv8.3-A      'armv8.2-a', '+pauth'
!      'armv8.4-a'    Armv8.4-A      'armv8.3-a', '+flagm', '+fp16fml',
!                                    '+dotprod'
!      'armv8.5-a'    Armv8.5-A      'armv8.4-a', '+sb', '+ssbs', '+predres'
!      'armv8.6-a'    Armv8.6-A      'armv8.5-a', '+bf16', '+i8mm'
!      'armv8.7-a'    Armv8.7-A      'armv8.6-a', '+ls64'
!      'armv8.8-a'    Armv8.8-a      'armv8.7-a', '+mops'
!      'armv8.9-a'    Armv8.9-a      'armv8.8-a'
!      'armv9-a'      Armv9-A        'armv8.5-a', '+sve', '+sve2'
!      'armv9.1-a'    Armv9.1-A      'armv9-a', '+bf16', '+i8mm'
!      'armv9.2-a'    Armv9.2-A      'armv9.1-a', '+ls64'
!      'armv9.3-a'    Armv9.3-A      'armv9.2-a', '+mops'
!      'armv9.4-a'    Armv9.4-A      'armv9.3-a'
!      'armv8-r'      Armv8-R        'armv8-r'
  
!      The value 'native' is available on native AArch64 GNU/Linux and
       causes the compiler to pick the architecture of the host system.
       This option has no effect if the compiler is unable to recognize
       the architecture of the host system,
  
       The permissible values for FEATURE are listed in the sub-section on
!      *note '-march' and '-mcpu' Feature Modifiers:
       aarch64-feature-modifiers.  Where conflicting feature modifiers are
       specified, the right-most feature is used.
  
       GCC uses NAME to determine what kind of instructions it can emit
!      when generating assembly code.  If '-march' is specified without
!      either of '-mtune' or '-mcpu' also being specified, the code is
       tuned to perform well across a range of target processors
       implementing the target architecture.
  
! '-mtune=NAME'
       Specify the name of the target processor for which GCC should tune
       the performance of the code.  Permissible values for this option
!      are: 'generic', 'cortex-a35', 'cortex-a53', 'cortex-a55',
!      'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
!      'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'cortex-a65',
!      'cortex-a65ae', 'cortex-a34', 'cortex-a78', 'cortex-a78ae',
!      'cortex-a78c', 'ares', 'exynos-m1', 'emag', 'falkor',
!      'neoverse-512tvb', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2',
!      'neoverse-n3', 'neoverse-v1', 'neoverse-v2', 'neoverse-v3',
!      'neoverse-v3ae', 'grace', 'qdf24xx', 'saphira', 'phecda', 'xgene1',
!      'vulcan', 'octeontx', 'octeontx81', 'octeontx83', 'octeontx2',
!      'octeontx2t98', 'octeontx2t96' 'octeontx2t93', 'octeontx2f95',
!      'octeontx2f95n', 'octeontx2f95mm', 'a64fx', 'fujitsu-monaka',
!      'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81',
!      'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus',
!      'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
!      'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
!      'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55', 'cortex-r82',
!      'cortex-x1', 'cortex-x1c', 'cortex-x2', 'cortex-x3', 'cortex-x4',
!      'cortex-x925', 'cortex-a510', 'cortex-a520', 'cortex-a710',
!      'cortex-a715', 'cortex-a720', 'cortex-a725', 'ampere1', 'ampere1a',
!      'ampere1b', 'cobalt-100' and 'native'.
  
!      The values 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
!      'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
!      'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' specify that GCC
       should tune for a big.LITTLE system.
  
!      The value 'neoverse-512tvb' specifies that GCC should tune for
       Neoverse cores that (a) implement SVE and (b) have a total vector
       bandwidth of 512 bits per cycle.  In other words, the option tells
       GCC to tune for Neoverse cores that can execute 4 128-bit Advanced
--- 20030,20114 ----
  
       This option is only applicable when compiling for the base ARMv8.0
       instruction set.  If using a later revision, e.g.
!      ‘-march=armv8.1-a’ or ‘-march=armv8-a+lse’, the ARMv8.1-Atomics
       instructions will be used directly.  The same applies when using
!      ‘-mcpu=’ when the selected cpu supports the ‘lse’ feature.  This
       option is on by default.
  
! ‘-march=NAME’
       Specify the name of the target architecture and, optionally, one or
       more feature modifiers.  This option has the form
!      ‘-march=ARCH{+[no]FEATURE}*’.
  
       The table below summarizes the permissible values for ARCH and the
       features that they enable by default:
  
       ARCH value     Architecture   Includes by default
       --------------------------------------------------------------------------
!      ‘armv8-a’      Armv8-A        ‘+fp’, ‘+simd’
!      ‘armv8.1-a’    Armv8.1-A      ‘armv8-a’, ‘+crc’, ‘+lse’, ‘+rdma’
!      ‘armv8.2-a’    Armv8.2-A      ‘armv8.1-a’
!      ‘armv8.3-a’    Armv8.3-A      ‘armv8.2-a’, ‘+pauth’
!      ‘armv8.4-a’    Armv8.4-A      ‘armv8.3-a’, ‘+flagm’, ‘+fp16fml’,
!                                    ‘+dotprod’
!      ‘armv8.5-a’    Armv8.5-A      ‘armv8.4-a’, ‘+sb’, ‘+ssbs’, ‘+predres’
!      ‘armv8.6-a’    Armv8.6-A      ‘armv8.5-a’, ‘+bf16’, ‘+i8mm’
!      ‘armv8.7-a’    Armv8.7-A      ‘armv8.6-a’, ‘+ls64’
!      ‘armv8.8-a’    Armv8.8-a      ‘armv8.7-a’, ‘+mops’
!      ‘armv8.9-a’    Armv8.9-a      ‘armv8.8-a’
!      ‘armv9-a’      Armv9-A        ‘armv8.5-a’, ‘+sve’, ‘+sve2’
!      ‘armv9.1-a’    Armv9.1-A      ‘armv9-a’, ‘+bf16’, ‘+i8mm’
!      ‘armv9.2-a’    Armv9.2-A      ‘armv9.1-a’, ‘+ls64’
!      ‘armv9.3-a’    Armv9.3-A      ‘armv9.2-a’, ‘+mops’
!      ‘armv9.4-a’    Armv9.4-A      ‘armv9.3-a’
!      ‘armv8-r’      Armv8-R        ‘armv8-r’
  
!      The value ‘native’ is available on native AArch64 GNU/Linux and
       causes the compiler to pick the architecture of the host system.
       This option has no effect if the compiler is unable to recognize
       the architecture of the host system,
  
       The permissible values for FEATURE are listed in the sub-section on
!      *note ‘-march’ and ‘-mcpu’ Feature Modifiers:
       aarch64-feature-modifiers.  Where conflicting feature modifiers are
       specified, the right-most feature is used.
  
       GCC uses NAME to determine what kind of instructions it can emit
!      when generating assembly code.  If ‘-march’ is specified without
!      either of ‘-mtune’ or ‘-mcpu’ also being specified, the code is
       tuned to perform well across a range of target processors
       implementing the target architecture.
  
! ‘-mtune=NAME’
       Specify the name of the target processor for which GCC should tune
       the performance of the code.  Permissible values for this option
!      are: ‘generic’, ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a55’,
!      ‘cortex-a57’, ‘cortex-a72’, ‘cortex-a73’, ‘cortex-a75’,
!      ‘cortex-a76’, ‘cortex-a76ae’, ‘cortex-a77’, ‘cortex-a65’,
!      ‘cortex-a65ae’, ‘cortex-a34’, ‘cortex-a78’, ‘cortex-a78ae’,
!      ‘cortex-a78c’, ‘ares’, ‘exynos-m1’, ‘emag’, ‘falkor’,
!      ‘neoverse-512tvb’, ‘neoverse-e1’, ‘neoverse-n1’, ‘neoverse-n2’,
!      ‘neoverse-n3’, ‘neoverse-v1’, ‘neoverse-v2’, ‘neoverse-v3’,
!      ‘neoverse-v3ae’, ‘grace’, ‘qdf24xx’, ‘saphira’, ‘phecda’, ‘xgene1’,
!      ‘vulcan’, ‘octeontx’, ‘octeontx81’, ‘octeontx83’, ‘octeontx2’,
!      ‘octeontx2t98’, ‘octeontx2t96’ ‘octeontx2t93’, ‘octeontx2f95’,
!      ‘octeontx2f95n’, ‘octeontx2f95mm’, ‘a64fx’, ‘fujitsu-monaka’,
!      ‘thunderx’, ‘thunderxt88’, ‘thunderxt88p1’, ‘thunderxt81’,
!      ‘tsv110’, ‘hip12’, ‘thunderxt83’, ‘thunderx2t99’, ‘thunderx3t110’,
!      ‘zeus’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’,
!      ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’,
!      ‘cortex-a75.cortex-a55’, ‘cortex-a76.cortex-a55’, ‘cortex-r82’,
!      ‘cortex-x1’, ‘cortex-x1c’, ‘cortex-x2’, ‘cortex-x3’, ‘cortex-x4’,
!      ‘cortex-x925’, ‘cortex-a510’, ‘cortex-a520’, ‘cortex-a710’,
!      ‘cortex-a715’, ‘cortex-a720’, ‘cortex-a725’, ‘ampere1’, ‘ampere1a’,
!      ‘ampere1b’, ‘cobalt-100’ and ‘native’.
  
!      The values ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’,
!      ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’,
!      ‘cortex-a75.cortex-a55’, ‘cortex-a76.cortex-a55’ specify that GCC
       should tune for a big.LITTLE system.
  
!      The value ‘neoverse-512tvb’ specifies that GCC should tune for
       Neoverse cores that (a) implement SVE and (b) have a total vector
       bandwidth of 512 bits per cycle.  In other words, the option tells
       GCC to tune for Neoverse cores that can execute 4 128-bit Advanced
*************** These options are defined for AArch64 im
*** 20114,20204 ****
       for a specific core like Neoverse V1 but is more specific than the
       default tuning described below.
  
!      Additionally on native AArch64 GNU/Linux systems the value 'native'
       tunes performance to the host system.  This option has no effect if
       the compiler is unable to recognize the processor of the host
       system.
  
!      Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
       code is tuned to perform well across a range of target processors.
  
       This option cannot be suffixed by feature modifiers.
  
! '-mcpu=NAME'
       Specify the name of the target processor, optionally suffixed by
       one or more feature modifiers.  This option has the form
!      '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
!      are the same as those available for '-mtune'.  The permissible
       values for FEATURE are documented in the sub-section on *note
!      '-march' and '-mcpu' Feature Modifiers: aarch64-feature-modifiers.
       Where conflicting feature modifiers are specified, the right-most
       feature is used.
  
       GCC uses NAME to determine what kind of instructions it can emit
!      when generating assembly code (as if by '-march') and to determine
       the target processor for which to tune for performance (as if by
!      '-mtune').  Where this option is used in conjunction with '-march'
!      or '-mtune', those options take precedence over the appropriate
       part of this option.
  
!      '-mcpu=neoverse-512tvb' is special in that it does not refer to a
       specific core, but instead refers to all Neoverse cores that (a)
       implement SVE and (b) have a total vector bandwidth of 512 bits a
!      cycle.  Unless overridden by '-march', '-mcpu=neoverse-512tvb'
       generates code that can run on a Neoverse V1 core, since Neoverse
       V1 is the first Neoverse core with these properties.  Unless
!      overridden by '-mtune', '-mcpu=neoverse-512tvb' tunes code in the
!      same way as for '-mtune=neoverse-512tvb'.
  
! '-moverride=STRING'
       Override tuning decisions made by the back-end in response to a
!      '-mtune=' switch.  The syntax, semantics, and accepted values for
       STRING in this option are not guaranteed to be consistent across
       releases.
  
       This option is only intended to be useful when developing GCC.
  
! '-mverbose-cost-dump'
       Enable verbose cost model dumping in the debug dump files.  This
       option is provided for use in debugging the compiler.
  
! '-mpc-relative-literal-loads'
! '-mno-pc-relative-literal-loads'
       Enable or disable PC-relative literal loads.  With this option
       literal pools are accessed using a single instruction and emitted
       after each function.  This limits the maximum size of functions to
!      1MB. This is enabled by default for '-mcmodel=tiny'.
  
! '-msign-return-address=SCOPE'
       Select the function scope on which return address signing will be
!      applied.  Permissible values are 'none', which disables return
!      address signing, 'non-leaf', which enables pointer signing for
!      functions which are not leaf functions, and 'all', which enables
!      pointer signing for all functions.  The default value is 'none'.
       This option has been deprecated by -mbranch-protection.
  
! '-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF+B-KEY]|BTI'
!      Select the branch protection features to use.  'none' is the
!      default and turns off all types of branch protection.  'standard'
       turns on all types of branch protection features.  If a feature has
!      additional tuning options, then 'standard' sets it to its standard
!      level.  'pac-ret[+LEAF]' turns on return address signing to its
       standard level: signing functions that save the return address to
       memory (non-leaf functions will practically always do this) using
!      the a-key.  The optional argument 'leaf' can be used to extend the
!      signing to include leaf functions.  The optional argument 'b-key'
       can be used to sign the functions with the B-key instead of the
!      A-key.  'bti' turns on branch target identification mechanism.
  
! '-mharden-sls=OPTS'
       Enable compiler hardening against straight line speculation (SLS).
       OPTS is a comma-separated list of the following options:
!      'retbr'
!      'blr'
!      In addition, '-mharden-sls=all' enables all SLS hardening while
!      '-mharden-sls=none' disables all SLS hardening.
  
! '-mearly-ra=SCOPE'
       Determine when to enable an early register allocation pass.  This
       pass runs before instruction scheduling and tries to find a
       spill-free allocation of floating-point and vector code.  It also
--- 20118,20208 ----
       for a specific core like Neoverse V1 but is more specific than the
       default tuning described below.
  
!      Additionally on native AArch64 GNU/Linux systems the value ‘native’
       tunes performance to the host system.  This option has no effect if
       the compiler is unable to recognize the processor of the host
       system.
  
!      Where none of ‘-mtune=’, ‘-mcpu=’ or ‘-march=’ are specified, the
       code is tuned to perform well across a range of target processors.
  
       This option cannot be suffixed by feature modifiers.
  
! ‘-mcpu=NAME’
       Specify the name of the target processor, optionally suffixed by
       one or more feature modifiers.  This option has the form
!      ‘-mcpu=CPU{+[no]FEATURE}*’, where the permissible values for CPU
!      are the same as those available for ‘-mtune’.  The permissible
       values for FEATURE are documented in the sub-section on *note
!      ‘-march’ and ‘-mcpu’ Feature Modifiers: aarch64-feature-modifiers.
       Where conflicting feature modifiers are specified, the right-most
       feature is used.
  
       GCC uses NAME to determine what kind of instructions it can emit
!      when generating assembly code (as if by ‘-march’) and to determine
       the target processor for which to tune for performance (as if by
!      ‘-mtune’).  Where this option is used in conjunction with ‘-march’
!      or ‘-mtune’, those options take precedence over the appropriate
       part of this option.
  
!      ‘-mcpu=neoverse-512tvb’ is special in that it does not refer to a
       specific core, but instead refers to all Neoverse cores that (a)
       implement SVE and (b) have a total vector bandwidth of 512 bits a
!      cycle.  Unless overridden by ‘-march’, ‘-mcpu=neoverse-512tvb’
       generates code that can run on a Neoverse V1 core, since Neoverse
       V1 is the first Neoverse core with these properties.  Unless
!      overridden by ‘-mtune’, ‘-mcpu=neoverse-512tvb’ tunes code in the
!      same way as for ‘-mtune=neoverse-512tvb’.
  
! ‘-moverride=STRING’
       Override tuning decisions made by the back-end in response to a
!      ‘-mtune=’ switch.  The syntax, semantics, and accepted values for
       STRING in this option are not guaranteed to be consistent across
       releases.
  
       This option is only intended to be useful when developing GCC.
  
! ‘-mverbose-cost-dump’
       Enable verbose cost model dumping in the debug dump files.  This
       option is provided for use in debugging the compiler.
  
! ‘-mpc-relative-literal-loads’
! ‘-mno-pc-relative-literal-loads’
       Enable or disable PC-relative literal loads.  With this option
       literal pools are accessed using a single instruction and emitted
       after each function.  This limits the maximum size of functions to
!      1MB. This is enabled by default for ‘-mcmodel=tiny’.
  
! ‘-msign-return-address=SCOPE’
       Select the function scope on which return address signing will be
!      applied.  Permissible values are ‘none’, which disables return
!      address signing, ‘non-leaf’, which enables pointer signing for
!      functions which are not leaf functions, and ‘all’, which enables
!      pointer signing for all functions.  The default value is ‘none’.
       This option has been deprecated by -mbranch-protection.
  
! ‘-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF+B-KEY]|BTI’
!      Select the branch protection features to use.  ‘none’ is the
!      default and turns off all types of branch protection.  ‘standard’
       turns on all types of branch protection features.  If a feature has
!      additional tuning options, then ‘standard’ sets it to its standard
!      level.  ‘pac-ret[+LEAF]’ turns on return address signing to its
       standard level: signing functions that save the return address to
       memory (non-leaf functions will practically always do this) using
!      the a-key.  The optional argument ‘leaf’ can be used to extend the
!      signing to include leaf functions.  The optional argument ‘b-key’
       can be used to sign the functions with the B-key instead of the
!      A-key.  ‘bti’ turns on branch target identification mechanism.
  
! ‘-mharden-sls=OPTS’
       Enable compiler hardening against straight line speculation (SLS).
       OPTS is a comma-separated list of the following options:
!      ‘retbr’
!      ‘blr’
!      In addition, ‘-mharden-sls=all’ enables all SLS hardening while
!      ‘-mharden-sls=none’ disables all SLS hardening.
  
! ‘-mearly-ra=SCOPE’
       Determine when to enable an early register allocation pass.  This
       pass runs before instruction scheduling and tries to find a
       spill-free allocation of floating-point and vector code.  It also
*************** These options are defined for AArch64 im
*** 20210,20229 ****
       access to strided multi-register instructions; and NONE, which
       disables the pass.
  
!      '-mearly-ra=all' is the default for '-O2' and above, and for '-Os'.
!      '-mearly-ra=none' is the default otherwise.
  
! '-mearly-ldp-fusion'
       Enable the copy of the AArch64 load/store pair fusion pass that
!      runs before register allocation.  Enabled by default at '-O' and
       above.
  
! '-mlate-ldp-fusion'
       Enable the copy of the AArch64 load/store pair fusion pass that
!      runs after register allocation.  Enabled by default at '-O' and
       above.
  
! '-msve-vector-bits=BITS'
       Specify the number of bits in an SVE vector register.  This option
       only has an effect when SVE is enabled.
  
--- 20214,20233 ----
       access to strided multi-register instructions; and NONE, which
       disables the pass.
  
!      ‘-mearly-ra=all’ is the default for ‘-O2’ and above, and for ‘-Os’.
!      ‘-mearly-ra=none’ is the default otherwise.
  
! ‘-mearly-ldp-fusion’
       Enable the copy of the AArch64 load/store pair fusion pass that
!      runs before register allocation.  Enabled by default at ‘-O’ and
       above.
  
! ‘-mlate-ldp-fusion’
       Enable the copy of the AArch64 load/store pair fusion pass that
!      runs after register allocation.  Enabled by default at ‘-O’ and
       above.
  
! ‘-msve-vector-bits=BITS’
       Specify the number of bits in an SVE vector register.  This option
       only has an effect when SVE is enabled.
  
*************** These options are defined for AArch64 im
*** 20231,20405 ****
       agnostic" output that works with any size of vector register and
       "vector-length specific" output that allows GCC to make assumptions
       about the vector length when it is useful for optimization reasons.
!      The possible values of 'bits' are: 'scalable', '128', '256', '512',
!      '1024' and '2048'.  Specifying 'scalable' selects vector-length
!      agnostic output.  At present '-msve-vector-bits=128' also generates
       vector-length agnostic output for big-endian targets.  All other
       values generate vector-length specific code.  The behavior of these
!      values may change in future releases and no value except 'scalable'
       should be relied on for producing code that is portable across
       different hardware SVE vector lengths.
  
!      The default is '-msve-vector-bits=scalable', which produces
       vector-length agnostic code.
  
! 3.19.1.1 '-march' and '-mcpu' Feature Modifiers
  ...............................................
  
! Feature modifiers used with '-march' and '-mcpu' can be any of the
! following and their inverses 'noFEATURE':
  
! 'crc'
       Enable CRC extension.  This is on by default for
!      '-march=armv8.1-a'.
! 'crypto'
       Enable Crypto extension.  This also enables Advanced SIMD and
       floating-point instructions.
! 'fp'
       Enable floating-point instructions.  This is on by default for all
!      possible values for options '-march' and '-mcpu'.
! 'simd'
       Enable Advanced SIMD instructions.  This also enables
       floating-point instructions.  This is on by default for all
!      possible values for options '-march' and '-mcpu'.
! 'sve'
       Enable Scalable Vector Extension instructions.  This also enables
       Advanced SIMD and floating-point instructions.
! 'lse'
       Enable Large System Extension instructions.  This is on by default
!      for '-march=armv8.1-a'.
! 'rdma'
       Enable Round Double Multiply Accumulate instructions.  This is on
!      by default for '-march=armv8.1-a'.
! 'fp16'
       Enable FP16 extension.  This also enables floating-point
       instructions.
! 'fp16fml'
       Enable FP16 fmla extension.  This also enables FP16 extensions and
       floating-point instructions.  This option is enabled by default for
!      '-march=armv8.4-a'.  Use of this option with architectures prior to
       Armv8.2-A is not supported.
  
! 'rcpc'
       Enable the RCpc extension.  This enables the use of the LDAPR
       instructions for load-acquire atomic semantics, and passes it on to
       the assembler, enabling inline asm statements to use instructions
       from the RCpc extension.
! 'dotprod'
       Enable the Dot Product extension.  This also enables Advanced SIMD
       instructions.
! 'aes'
       Enable the Armv8-a aes and pmull crypto extension.  This also
       enables Advanced SIMD instructions.
! 'sha2'
       Enable the Armv8-a sha2 crypto extension.  This also enables
       Advanced SIMD instructions.
! 'sha3'
       Enable the sha512 and sha3 crypto extension.  This also enables
       Advanced SIMD instructions.  Use of this option with architectures
       prior to Armv8.2-A is not supported.
! 'sm4'
       Enable the sm3 and sm4 crypto extension.  This also enables
       Advanced SIMD instructions.  Use of this option with architectures
       prior to Armv8.2-A is not supported.
! 'profile'
       Enable the Statistical Profiling extension.  This option is only to
       enable the extension at the assembler level and does not affect
       code generation.
! 'rng'
       Enable the Armv8.5-a Random Number instructions.  This option is
       only to enable the extension at the assembler level and does not
       affect code generation.
! 'memtag'
       Enable the Armv8.5-a Memory Tagging Extensions.  Use of this option
       with architectures prior to Armv8.5-A is not supported.
! 'sb'
       Enable the Armv8-a Speculation Barrier instruction.  This option is
       only to enable the extension at the assembler level and does not
       affect code generation.  This option is enabled by default for
!      '-march=armv8.5-a'.
! 'ssbs'
       Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
       option is only to enable the extension at the assembler level and
       does not affect code generation.  This option is enabled by default
!      for '-march=armv8.5-a'.
! 'predres'
       Enable the Armv8-a Execution and Data Prediction Restriction
       instructions.  This option is only to enable the extension at the
       assembler level and does not affect code generation.  This option
!      is enabled by default for '-march=armv8.5-a'.
! 'sve2'
       Enable the Armv8-a Scalable Vector Extension 2.  This also enables
       SVE instructions.
! 'sve2-bitperm'
       Enable SVE2 bitperm instructions.  This also enables SVE2
       instructions.
! 'sve2-sm4'
       Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
! 'sve2-aes'
       Enable SVE2 aes instructions.  This also enables SVE2 instructions.
! 'sve2-sha3'
       Enable SVE2 sha3 instructions.  This also enables SVE2
       instructions.
! 'tme'
       Enable the Transactional Memory Extension.
! 'i8mm'
       Enable 8-bit Integer Matrix Multiply instructions.  This also
       enables Advanced SIMD and floating-point instructions.  This option
!      is enabled by default for '-march=armv8.6-a'.  Use of this option
       with architectures prior to Armv8.2-A is not supported.
! 'f32mm'
       Enable 32-bit Floating point Matrix Multiply instructions.  This
       also enables SVE instructions.  Use of this option with
       architectures prior to Armv8.2-A is not supported.
! 'f64mm'
       Enable 64-bit Floating point Matrix Multiply instructions.  This
       also enables SVE instructions.  Use of this option with
       architectures prior to Armv8.2-A is not supported.
! 'bf16'
       Enable brain half-precision floating-point instructions.  This also
       enables Advanced SIMD and floating-point instructions.  This option
!      is enabled by default for '-march=armv8.6-a'.  Use of this option
       with architectures prior to Armv8.2-A is not supported.
! 'ls64'
       Enable the 64-byte atomic load and store instructions for
       accelerators.  This option is enabled by default for
!      '-march=armv8.7-a'.
! 'mops'
       Enable the instructions to accelerate memory operations like
!      'memcpy', 'memmove', 'memset'.  This option is enabled by default
!      for '-march=armv8.8-a'
! 'flagm'
       Enable the Flag Manipulation instructions Extension.
! 'pauth'
       Enable the Pointer Authentication Extension.
! 'cssc'
       Enable the Common Short Sequence Compression instructions.
! 'sme'
       Enable the Scalable Matrix Extension.
! 'sme-i16i64'
       Enable the FEAT_SME_I16I64 extension to SME.
! 'sme-f64f64'
       Enable the FEAT_SME_F64F64 extension to SME. +
! 'sme2'
       Enable the Scalable Matrix Extension 2.  This also enables SME
       instructions.
! 'lse128'
       Enable the LSE128 128-bit atomic instructions extension.  This also
       enables LSE instructions.
! 'd128'
       Enable support for 128-bit system register read/write instructions.
       This also enables the LSE128 extension.
! 'gcs'
       Enable support for Armv9.4-a Guarded Control Stack extension.
! 'the'
       Enable support for Armv8.9-a/9.4-a translation hardening extension.
! 'rcpc3'
       Enable the RCpc3 (Release Consistency) extension.
  
!  Feature 'crypto' implies 'aes', 'sha2', and 'simd', which implies 'fp'.
! Conversely, 'nofp' implies 'nosimd', which implies 'nocrypto', 'noaes'
! and 'nosha2'.
  
  
  File: gcc.info,  Node: Adapteva Epiphany Options,  Next: AMD GCN Options,  Prev: AArch64 Options,  Up: Submodel Options
--- 20235,20409 ----
       agnostic" output that works with any size of vector register and
       "vector-length specific" output that allows GCC to make assumptions
       about the vector length when it is useful for optimization reasons.
!      The possible values of ‘bits’ are: ‘scalable’, ‘128’, ‘256’, ‘512’,
!      ‘1024’ and ‘2048’.  Specifying ‘scalable’ selects vector-length
!      agnostic output.  At present ‘-msve-vector-bits=128’ also generates
       vector-length agnostic output for big-endian targets.  All other
       values generate vector-length specific code.  The behavior of these
!      values may change in future releases and no value except ‘scalable’
       should be relied on for producing code that is portable across
       different hardware SVE vector lengths.
  
!      The default is ‘-msve-vector-bits=scalable’, which produces
       vector-length agnostic code.
  
! 3.19.1.1 ‘-march’ and ‘-mcpu’ Feature Modifiers
  ...............................................
  
! Feature modifiers used with ‘-march’ and ‘-mcpu’ can be any of the
! following and their inverses ‘noFEATURE’:
  
! ‘crc’
       Enable CRC extension.  This is on by default for
!      ‘-march=armv8.1-a’.
! ‘crypto’
       Enable Crypto extension.  This also enables Advanced SIMD and
       floating-point instructions.
! ‘fp’
       Enable floating-point instructions.  This is on by default for all
!      possible values for options ‘-march’ and ‘-mcpu’.
! ‘simd’
       Enable Advanced SIMD instructions.  This also enables
       floating-point instructions.  This is on by default for all
!      possible values for options ‘-march’ and ‘-mcpu’.
! ‘sve’
       Enable Scalable Vector Extension instructions.  This also enables
       Advanced SIMD and floating-point instructions.
! ‘lse’
       Enable Large System Extension instructions.  This is on by default
!      for ‘-march=armv8.1-a’.
! ‘rdma’
       Enable Round Double Multiply Accumulate instructions.  This is on
!      by default for ‘-march=armv8.1-a’.
! ‘fp16’
       Enable FP16 extension.  This also enables floating-point
       instructions.
! ‘fp16fml’
       Enable FP16 fmla extension.  This also enables FP16 extensions and
       floating-point instructions.  This option is enabled by default for
!      ‘-march=armv8.4-a’.  Use of this option with architectures prior to
       Armv8.2-A is not supported.
  
! ‘rcpc’
       Enable the RCpc extension.  This enables the use of the LDAPR
       instructions for load-acquire atomic semantics, and passes it on to
       the assembler, enabling inline asm statements to use instructions
       from the RCpc extension.
! ‘dotprod’
       Enable the Dot Product extension.  This also enables Advanced SIMD
       instructions.
! ‘aes’
       Enable the Armv8-a aes and pmull crypto extension.  This also
       enables Advanced SIMD instructions.
! ‘sha2’
       Enable the Armv8-a sha2 crypto extension.  This also enables
       Advanced SIMD instructions.
! ‘sha3’
       Enable the sha512 and sha3 crypto extension.  This also enables
       Advanced SIMD instructions.  Use of this option with architectures
       prior to Armv8.2-A is not supported.
! ‘sm4’
       Enable the sm3 and sm4 crypto extension.  This also enables
       Advanced SIMD instructions.  Use of this option with architectures
       prior to Armv8.2-A is not supported.
! ‘profile’
       Enable the Statistical Profiling extension.  This option is only to
       enable the extension at the assembler level and does not affect
       code generation.
! ‘rng’
       Enable the Armv8.5-a Random Number instructions.  This option is
       only to enable the extension at the assembler level and does not
       affect code generation.
! ‘memtag’
       Enable the Armv8.5-a Memory Tagging Extensions.  Use of this option
       with architectures prior to Armv8.5-A is not supported.
! ‘sb’
       Enable the Armv8-a Speculation Barrier instruction.  This option is
       only to enable the extension at the assembler level and does not
       affect code generation.  This option is enabled by default for
!      ‘-march=armv8.5-a’.
! ‘ssbs’
       Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
       option is only to enable the extension at the assembler level and
       does not affect code generation.  This option is enabled by default
!      for ‘-march=armv8.5-a’.
! ‘predres’
       Enable the Armv8-a Execution and Data Prediction Restriction
       instructions.  This option is only to enable the extension at the
       assembler level and does not affect code generation.  This option
!      is enabled by default for ‘-march=armv8.5-a’.
! ‘sve2’
       Enable the Armv8-a Scalable Vector Extension 2.  This also enables
       SVE instructions.
! ‘sve2-bitperm’
       Enable SVE2 bitperm instructions.  This also enables SVE2
       instructions.
! ‘sve2-sm4’
       Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
! ‘sve2-aes’
       Enable SVE2 aes instructions.  This also enables SVE2 instructions.
! ‘sve2-sha3’
       Enable SVE2 sha3 instructions.  This also enables SVE2
       instructions.
! ‘tme’
       Enable the Transactional Memory Extension.
! ‘i8mm’
       Enable 8-bit Integer Matrix Multiply instructions.  This also
       enables Advanced SIMD and floating-point instructions.  This option
!      is enabled by default for ‘-march=armv8.6-a’.  Use of this option
       with architectures prior to Armv8.2-A is not supported.
! ‘f32mm’
       Enable 32-bit Floating point Matrix Multiply instructions.  This
       also enables SVE instructions.  Use of this option with
       architectures prior to Armv8.2-A is not supported.
! ‘f64mm’
       Enable 64-bit Floating point Matrix Multiply instructions.  This
       also enables SVE instructions.  Use of this option with
       architectures prior to Armv8.2-A is not supported.
! ‘bf16’
       Enable brain half-precision floating-point instructions.  This also
       enables Advanced SIMD and floating-point instructions.  This option
!      is enabled by default for ‘-march=armv8.6-a’.  Use of this option
       with architectures prior to Armv8.2-A is not supported.
! ‘ls64’
       Enable the 64-byte atomic load and store instructions for
       accelerators.  This option is enabled by default for
!      ‘-march=armv8.7-a’.
! ‘mops’
       Enable the instructions to accelerate memory operations like
!      ‘memcpy’, ‘memmove’, ‘memset’.  This option is enabled by default
!      for ‘-march=armv8.8-a’
! ‘flagm’
       Enable the Flag Manipulation instructions Extension.
! ‘pauth’
       Enable the Pointer Authentication Extension.
! ‘cssc’
       Enable the Common Short Sequence Compression instructions.
! ‘sme’
       Enable the Scalable Matrix Extension.
! ‘sme-i16i64’
       Enable the FEAT_SME_I16I64 extension to SME.
! ‘sme-f64f64’
       Enable the FEAT_SME_F64F64 extension to SME. +
! ‘sme2’
       Enable the Scalable Matrix Extension 2.  This also enables SME
       instructions.
! ‘lse128’
       Enable the LSE128 128-bit atomic instructions extension.  This also
       enables LSE instructions.
! ‘d128’
       Enable support for 128-bit system register read/write instructions.
       This also enables the LSE128 extension.
! ‘gcs’
       Enable support for Armv9.4-a Guarded Control Stack extension.
! ‘the’
       Enable support for Armv8.9-a/9.4-a translation hardening extension.
! ‘rcpc3’
       Enable the RCpc3 (Release Consistency) extension.
  
!  Feature ‘crypto’ implies ‘aes’, ‘sha2’, and ‘simd’, which implies ‘fp’.
! Conversely, ‘nofp’ implies ‘nosimd’, which implies ‘nocrypto’, ‘noaes’
! and ‘nosha2’.
  
  
  File: gcc.info,  Node: Adapteva Epiphany Options,  Next: AMD GCN Options,  Prev: AArch64 Options,  Up: Submodel Options
*************** File: gcc.info,  Node: Adapteva Epiphany
*** 20407,20447 ****
  3.19.2 Adapteva Epiphany Options
  --------------------------------
  
! These '-m' options are defined for Adapteva Epiphany:
  
! '-mhalf-reg-file'
!      Don't allocate any register in the range 'r32'...'r63'.  That
       allows code to run on hardware variants that lack these registers.
  
! '-mprefer-short-insn-regs'
       Preferentially allocate registers that allow short instruction
       generation.  This can result in increased instruction count, so
       this may either reduce or increase overall code size.
  
! '-mbranch-cost=NUM'
       Set the cost of branches to roughly NUM "simple" instructions.
       This cost is only a heuristic and is not guaranteed to produce
       consistent results across releases.
  
! '-mcmove'
       Enable the generation of conditional moves.
  
! '-mnops=NUM'
       Emit NUM NOPs before every other generated instruction.
  
! '-mno-soft-cmpsf'
!      For single-precision floating-point comparisons, emit an 'fsub'
       instruction and test the flags.  This is faster than a software
       comparison, but can get incorrect results in the presence of NaNs,
       or when two different small numbers are compared such that their
!      difference is calculated as zero.  The default is '-msoft-cmpsf',
       which uses slower, but IEEE-compliant, software comparisons.
  
! '-mstack-offset=NUM'
       Set the offset between the top of the stack and the stack pointer.
       E.g., a value of 8 means that the eight bytes in the range
!      'sp+0...sp+7' can be used by leaf functions without stack
!      allocation.  Values other than '8' or '16' are untested and
       unlikely to work.  Note also that this option changes the ABI;
       compiling a program with a different stack offset than the
       libraries have been compiled with generally does not work.  This
--- 20411,20451 ----
  3.19.2 Adapteva Epiphany Options
  --------------------------------
  
! These ‘-m’ options are defined for Adapteva Epiphany:
  
! ‘-mhalf-reg-file’
!      Don't allocate any register in the range ‘r32’...‘r63’.  That
       allows code to run on hardware variants that lack these registers.
  
! ‘-mprefer-short-insn-regs’
       Preferentially allocate registers that allow short instruction
       generation.  This can result in increased instruction count, so
       this may either reduce or increase overall code size.
  
! ‘-mbranch-cost=NUM’
       Set the cost of branches to roughly NUM "simple" instructions.
       This cost is only a heuristic and is not guaranteed to produce
       consistent results across releases.
  
! ‘-mcmove’
       Enable the generation of conditional moves.
  
! ‘-mnops=NUM’
       Emit NUM NOPs before every other generated instruction.
  
! ‘-mno-soft-cmpsf’
!      For single-precision floating-point comparisons, emit an ‘fsub’
       instruction and test the flags.  This is faster than a software
       comparison, but can get incorrect results in the presence of NaNs,
       or when two different small numbers are compared such that their
!      difference is calculated as zero.  The default is ‘-msoft-cmpsf’,
       which uses slower, but IEEE-compliant, software comparisons.
  
! ‘-mstack-offset=NUM’
       Set the offset between the top of the stack and the stack pointer.
       E.g., a value of 8 means that the eight bytes in the range
!      ‘sp+0...sp+7’ can be used by leaf functions without stack
!      allocation.  Values other than ‘8’ or ‘16’ are untested and
       unlikely to work.  Note also that this option changes the ABI;
       compiling a program with a different stack offset than the
       libraries have been compiled with generally does not work.  This
*************** These '-m' options are defined for Adapt
*** 20449,20477 ****
       offset would give you better code, but to actually use a different
       stack offset to build working programs, it is recommended to
       configure the toolchain with the appropriate
!      '--with-stack-offset=NUM' option.
  
! '-mno-round-nearest'
       Make the scheduler assume that the rounding mode has been set to
!      truncating.  The default is '-mround-nearest'.
  
! '-mlong-calls'
       If not otherwise specified by an attribute, assume all calls might
!      be beyond the offset range of the 'b' / 'bl' instructions, and
       therefore load the function address into a register before
       performing a (otherwise direct) call.  This is the default.
  
! '-mshort-calls'
       If not otherwise specified by an attribute, assume all direct calls
!      are in the range of the 'b' / 'bl' instructions, so use these
!      instructions for direct calls.  The default is '-mlong-calls'.
  
! '-msmall16'
       Assume addresses can be loaded as 16-bit unsigned values.  This
!      does not apply to function addresses for which '-mlong-calls'
       semantics are in effect.
  
! '-mfp-mode=MODE'
       Set the prevailing mode of the floating-point unit.  This
       determines the floating-point mode that is provided and expected at
       function call and return time.  Making this mode match the mode you
--- 20453,20481 ----
       offset would give you better code, but to actually use a different
       stack offset to build working programs, it is recommended to
       configure the toolchain with the appropriate
!      ‘--with-stack-offset=NUM’ option.
  
! ‘-mno-round-nearest’
       Make the scheduler assume that the rounding mode has been set to
!      truncating.  The default is ‘-mround-nearest’.
  
! ‘-mlong-calls’
       If not otherwise specified by an attribute, assume all calls might
!      be beyond the offset range of the ‘b’ / ‘bl’ instructions, and
       therefore load the function address into a register before
       performing a (otherwise direct) call.  This is the default.
  
! ‘-mshort-calls’
       If not otherwise specified by an attribute, assume all direct calls
!      are in the range of the ‘b’ / ‘bl’ instructions, so use these
!      instructions for direct calls.  The default is ‘-mlong-calls’.
  
! ‘-msmall16’
       Assume addresses can be loaded as 16-bit unsigned values.  This
!      does not apply to function addresses for which ‘-mlong-calls’
       semantics are in effect.
  
! ‘-mfp-mode=MODE’
       Set the prevailing mode of the floating-point unit.  This
       determines the floating-point mode that is provided and expected at
       function call and return time.  Making this mode match the mode you
*************** These '-m' options are defined for Adapt
*** 20480,20486 ****
  
       MODE can be set to one the following values:
  
!      'caller'
            Any mode at function entry is valid, and retained or restored
            when the function returns, and when it calls other functions.
            This mode is useful for compiling libraries or other
--- 20484,20490 ----
  
       MODE can be set to one the following values:
  
!      ‘caller’
            Any mode at function entry is valid, and retained or restored
            when the function returns, and when it calls other functions.
            This mode is useful for compiling libraries or other
*************** These '-m' options are defined for Adapt
*** 20491,20542 ****
            switching that might be needed, compared with what would be
            needed with a more specific choice of prevailing FPU mode.
  
!      'truncate'
            This is the mode used for floating-point calculations with
            truncating (i.e. round towards zero) rounding mode.  That
            includes conversion from floating point to integer.
  
!      'round-nearest'
            This is the mode used for floating-point calculations with
            round-to-nearest-or-even rounding mode.
  
!      'int'
            This is the mode used to perform integer calculations in the
            FPU, e.g. integer multiply, or integer
            multiply-and-accumulate.
  
!      The default is '-mfp-mode=caller'
  
! '-mno-split-lohi'
! '-mno-postinc'
! '-mno-postmodify'
       Code generation tweaks that disable, respectively, splitting of
       32-bit loads, generation of post-increment addresses, and
       generation of post-modify addresses.  The defaults are
!      'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
  
! '-mnovect-double'
       Change the preferred SIMD mode to SImode.  The default is
!      '-mvect-double', which uses DImode as preferred SIMD mode.
  
! '-max-vect-align=NUM'
       The maximum alignment for SIMD vector mode types.  NUM may be 4 or
       8.  The default is 8.  Note that this is an ABI change, even though
       many library function interfaces are unaffected if they don't use
       SIMD vector modes in places that affect size and/or alignment of
       relevant types.
  
! '-msplit-vecmove-early'
       Split vector moves into single word moves before reload.  In theory
       this can give better register allocation, but so far the reverse
       seems to be generally the case.
  
! '-m1reg-REG'
!      Specify a register to hold the constant -1, which makes loading
       small negative constants and certain bitmasks faster.  Allowable
!      values for REG are 'r43' and 'r63', which specify use of that
!      register as a fixed register, and 'none', which means that no
!      register is used for this purpose.  The default is '-m1reg-none'.
  
  
  File: gcc.info,  Node: AMD GCN Options,  Next: ARC Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
--- 20495,20546 ----
            switching that might be needed, compared with what would be
            needed with a more specific choice of prevailing FPU mode.
  
!      ‘truncate’
            This is the mode used for floating-point calculations with
            truncating (i.e. round towards zero) rounding mode.  That
            includes conversion from floating point to integer.
  
!      ‘round-nearest’
            This is the mode used for floating-point calculations with
            round-to-nearest-or-even rounding mode.
  
!      ‘int’
            This is the mode used to perform integer calculations in the
            FPU, e.g. integer multiply, or integer
            multiply-and-accumulate.
  
!      The default is ‘-mfp-mode=caller’
  
! ‘-mno-split-lohi’
! ‘-mno-postinc’
! ‘-mno-postmodify’
       Code generation tweaks that disable, respectively, splitting of
       32-bit loads, generation of post-increment addresses, and
       generation of post-modify addresses.  The defaults are
!      ‘msplit-lohi’, ‘-mpost-inc’, and ‘-mpost-modify’.
  
! ‘-mnovect-double’
       Change the preferred SIMD mode to SImode.  The default is
!      ‘-mvect-double’, which uses DImode as preferred SIMD mode.
  
! ‘-max-vect-align=NUM’
       The maximum alignment for SIMD vector mode types.  NUM may be 4 or
       8.  The default is 8.  Note that this is an ABI change, even though
       many library function interfaces are unaffected if they don't use
       SIMD vector modes in places that affect size and/or alignment of
       relevant types.
  
! ‘-msplit-vecmove-early’
       Split vector moves into single word moves before reload.  In theory
       this can give better register allocation, but so far the reverse
       seems to be generally the case.
  
! ‘-m1reg-REG’
!      Specify a register to hold the constant −1, which makes loading
       small negative constants and certain bitmasks faster.  Allowable
!      values for REG are ‘r43’ and ‘r63’, which specify use of that
!      register as a fixed register, and ‘none’, which means that no
!      register is used for this purpose.  The default is ‘-m1reg-none’.
  
  
  File: gcc.info,  Node: AMD GCN Options,  Next: ARC Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
*************** File: gcc.info,  Node: AMD GCN Options,
*** 20546,20611 ****
  
  These options are defined specifically for the AMD GCN port.
  
! '-march=GPU'
! '-mtune=GPU'
       Set architecture type or tuning for GPU.  Supported values for GPU
       are
  
!      'fiji'
            Compile for GCN3 Fiji devices (gfx803).  Support deprecated;
            availablility depends on how GCC has been configured, see
!           '--with-arch' and '--with-multilib-list'.
  
!      'gfx900'
            Compile for GCN5 Vega 10 devices (gfx900).
  
!      'gfx906'
            Compile for GCN5 Vega 20 devices (gfx906).
  
!      'gfx908'
            Compile for CDNA1 Instinct MI100 series devices (gfx908).
  
!      'gfx90a'
            Compile for CDNA2 Instinct MI200 series devices (gfx90a).
  
!      'gfx90c'
            Compile for GCN5 Vega 7 devices (gfx90c).
  
!      'gfx1030'
            Compile for RDNA2 gfx1030 devices (GFX10 series).
  
!      'gfx1036'
            Compile for RDNA2 gfx1036 devices (GFX10 series).
  
!      'gfx1100'
            Compile for RDNA3 gfx1100 devices (GFX11 series).
  
!      'gfx1103'
            Compile for RDNA3 gfx1103 devices (GFX11 series).
  
! '-msram-ecc=on'
! '-msram-ecc=off'
! '-msram-ecc=any'
       Compile binaries suitable for devices with the SRAM-ECC feature
       enabled, disabled, or either mode.  This feature can be enabled
       per-process on some devices.  The compiled code must match the
!      device mode.  The default is 'any', for devices that support it.
  
! '-mstack-size=BYTES'
       Specify how many BYTES of stack space will be requested for each
       GPU thread (wave-front).  Beware that there may be many threads and
       limited memory available.  The size of the stack allocation may
       also have an impact on run-time performance.  The default is 32KB
       when using OpenACC or OpenMP, and 1MB otherwise.
  
! '-mxnack=on'
! '-mxnack=off'
! '-mxnack=any'
       Compile binaries suitable for devices with the XNACK feature
       enabled, disabled, or either mode.  Some devices always require
       XNACK and some allow the user to configure XNACK. The compiled code
!      must match the device mode.  The default is '-mxnack=any' on
!      devices that support Unified Shared Memory, and '-mxnack=no'
       otherwise.
  
  
--- 20550,20615 ----
  
  These options are defined specifically for the AMD GCN port.
  
! ‘-march=GPU’
! ‘-mtune=GPU’
       Set architecture type or tuning for GPU.  Supported values for GPU
       are
  
!      ‘fiji’
            Compile for GCN3 Fiji devices (gfx803).  Support deprecated;
            availablility depends on how GCC has been configured, see
!           ‘--with-arch’ and ‘--with-multilib-list’.
  
!      ‘gfx900’
            Compile for GCN5 Vega 10 devices (gfx900).
  
!      ‘gfx906’
            Compile for GCN5 Vega 20 devices (gfx906).
  
!      ‘gfx908’
            Compile for CDNA1 Instinct MI100 series devices (gfx908).
  
!      ‘gfx90a’
            Compile for CDNA2 Instinct MI200 series devices (gfx90a).
  
!      ‘gfx90c’
            Compile for GCN5 Vega 7 devices (gfx90c).
  
!      ‘gfx1030’
            Compile for RDNA2 gfx1030 devices (GFX10 series).
  
!      ‘gfx1036’
            Compile for RDNA2 gfx1036 devices (GFX10 series).
  
!      ‘gfx1100’
            Compile for RDNA3 gfx1100 devices (GFX11 series).
  
!      ‘gfx1103’
            Compile for RDNA3 gfx1103 devices (GFX11 series).
  
! ‘-msram-ecc=on’
! ‘-msram-ecc=off’
! ‘-msram-ecc=any’
       Compile binaries suitable for devices with the SRAM-ECC feature
       enabled, disabled, or either mode.  This feature can be enabled
       per-process on some devices.  The compiled code must match the
!      device mode.  The default is ‘any’, for devices that support it.
  
! ‘-mstack-size=BYTES’
       Specify how many BYTES of stack space will be requested for each
       GPU thread (wave-front).  Beware that there may be many threads and
       limited memory available.  The size of the stack allocation may
       also have an impact on run-time performance.  The default is 32KB
       when using OpenACC or OpenMP, and 1MB otherwise.
  
! ‘-mxnack=on’
! ‘-mxnack=off’
! ‘-mxnack=any’
       Compile binaries suitable for devices with the XNACK feature
       enabled, disabled, or either mode.  Some devices always require
       XNACK and some allow the user to configure XNACK. The compiled code
!      must match the device mode.  The default is ‘-mxnack=any’ on
!      devices that support Unified Shared Memory, and ‘-mxnack=no’
       otherwise.
  
  
*************** File: gcc.info,  Node: ARC Options,  Nex
*** 20617,20926 ****
  The following options control the architecture variant for which code is
  being compiled:
  
! '-mbarrel-shifter'
       Generate instructions supported by barrel shifter.  This is the
!      default unless '-mcpu=ARC601' or '-mcpu=ARCEM' is in effect.
  
! '-mjli-always'
       Force to call a function using jli_s instruction.  This option is
       valid only for ARCv2 architecture.
  
! '-mcpu=CPU'
       Set architecture type, register usage, and instruction scheduling
       parameters for CPU.  There are also shortcut alias options
       available for backward compatibility and convenience.  Supported
       values for CPU are
  
!      'arc600'
!           Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
  
!      'arc601'
!           Compile for ARC601.  Alias: '-mARC601'.
  
!      'arc700'
!           Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
!           default when configured with '--with-cpu=arc700'.
  
!      'arcem'
            Compile for ARC EM.
  
!      'archs'
            Compile for ARC HS.
  
!      'em'
            Compile for ARC EM CPU with no hardware extensions.
  
!      'em4'
            Compile for ARC EM4 CPU.
  
!      'em4_dmips'
            Compile for ARC EM4 DMIPS CPU.
  
!      'em4_fpus'
            Compile for ARC EM4 DMIPS CPU with the single-precision
            floating-point extension.
  
!      'em4_fpuda'
            Compile for ARC EM4 DMIPS CPU with single-precision
            floating-point and double assist instructions.
  
!      'hs'
            Compile for ARC HS CPU with no hardware extensions except the
            atomic instructions.
  
!      'hs34'
            Compile for ARC HS34 CPU.
  
!      'hs38'
            Compile for ARC HS38 CPU.
  
!      'hs38_linux'
            Compile for ARC HS38 CPU with all hardware extensions on.
  
!      'hs4x'
            Compile for ARC HS4x CPU.
  
!      'hs4xd'
            Compile for ARC HS4xD CPU.
  
!      'hs4x_rel31'
            Compile for ARC HS4x CPU release 3.10a.
  
!      'arc600_norm'
!           Compile for ARC 600 CPU with 'norm' instructions enabled.
  
!      'arc600_mul32x16'
!           Compile for ARC 600 CPU with 'norm' and 32x16-bit multiply
            instructions enabled.
  
!      'arc600_mul64'
!           Compile for ARC 600 CPU with 'norm' and 'mul64'-family
            instructions enabled.
  
!      'arc601_norm'
!           Compile for ARC 601 CPU with 'norm' instructions enabled.
  
!      'arc601_mul32x16'
!           Compile for ARC 601 CPU with 'norm' and 32x16-bit multiply
            instructions enabled.
  
!      'arc601_mul64'
!           Compile for ARC 601 CPU with 'norm' and 'mul64'-family
            instructions enabled.
  
!      'nps400'
            Compile for ARC 700 on NPS400 chip.
  
!      'em_mini'
            Compile for ARC EM minimalist configuration featuring reduced
            register set.
  
! '-mdpfp'
! '-mdpfp-compact'
       Generate double-precision FPX instructions, tuned for the compact
       implementation.
  
! '-mdpfp-fast'
       Generate double-precision FPX instructions, tuned for the fast
       implementation.
  
! '-mno-dpfp-lrsr'
!      Disable 'lr' and 'sr' instructions from using FPX extension aux
       registers.
  
! '-mea'
!      Generate extended arithmetic instructions.  Currently only 'divaw',
!      'adds', 'subs', and 'sat16' are supported.  Only valid for
!      '-mcpu=ARC700'.
  
! '-mno-mpy'
!      Do not generate 'mpy'-family instructions for ARC700.  This option
       is deprecated.
  
! '-mmul32x16'
       Generate 32x16-bit multiply and multiply-accumulate instructions.
  
! '-mmul64'
!      Generate 'mul64' and 'mulu64' instructions.  Only valid for
!      '-mcpu=ARC600'.
  
! '-mnorm'
!      Generate 'norm' instructions.  This is the default if
!      '-mcpu=ARC700' is in effect.
  
! '-mspfp'
! '-mspfp-compact'
       Generate single-precision FPX instructions, tuned for the compact
       implementation.
  
! '-mspfp-fast'
       Generate single-precision FPX instructions, tuned for the fast
       implementation.
  
! '-msimd'
       Enable generation of ARC SIMD instructions via target-specific
!      builtins.  Only valid for '-mcpu=ARC700'.
  
! '-msoft-float'
       This option ignored; it is provided for compatibility purposes
       only.  Software floating-point code is emitted by default, and this
!      default can overridden by FPX options; '-mspfp', '-mspfp-compact',
!      or '-mspfp-fast' for single precision, and '-mdpfp',
!      '-mdpfp-compact', or '-mdpfp-fast' for double precision.
  
! '-mswap'
!      Generate 'swap' instructions.
  
! '-matomic'
       This enables use of the locked load/store conditional extension to
       implement atomic memory built-in functions.  Not available for ARC
       6xx or ARC EM cores.
  
! '-mdiv-rem'
!      Enable 'div' and 'rem' instructions for ARCv2 cores.
  
! '-mcode-density'
       Enable code density instructions for ARC EM. This option is on by
       default for ARC HS.
  
! '-mll64'
       Enable double load/store operations for ARC HS cores.
  
! '-mtp-regno=REGNO'
       Specify thread pointer register number.
  
! '-mmpy-option=MULTO'
       Compile ARCv2 code with a multiplier design option.  You can
       specify the option using either a string or numeric value for
!      MULTO.  'wlh1' is the default value.  The recognized values are:
  
!      '0'
!      'none'
            No multiplier available.
  
!      '1'
!      'w'
            16x16 multiplier, fully pipelined.  The following instructions
!           are enabled: 'mpyw' and 'mpyuw'.
  
!      '2'
!      'wlh1'
            32x32 multiplier, fully pipelined (1 stage).  The following
!           instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
!           'mpymu', and 'mpy_s'.
  
!      '3'
!      'wlh2'
            32x32 multiplier, fully pipelined (2 stages).  The following
!           instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
!           'mpymu', and 'mpy_s'.
  
!      '4'
!      'wlh3'
            Two 16x16 multipliers, blocking, sequential.  The following
!           instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
!           'mpymu', and 'mpy_s'.
  
!      '5'
!      'wlh4'
            One 16x16 multiplier, blocking, sequential.  The following
!           instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
!           'mpymu', and 'mpy_s'.
  
!      '6'
!      'wlh5'
            One 32x4 multiplier, blocking, sequential.  The following
!           instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
!           'mpymu', and 'mpy_s'.
  
!      '7'
!      'plus_dmpy'
            ARC HS SIMD support.
  
!      '8'
!      'plus_macd'
            ARC HS SIMD support.
  
!      '9'
!      'plus_qmacw'
            ARC HS SIMD support.
  
       This option is only available for ARCv2 cores.
  
! '-mfpu=FPU'
       Enables support for specific floating-point hardware extensions for
       ARCv2 cores.  Supported values for FPU are:
  
!      'fpus'
            Enables support for single-precision floating-point hardware
            extensions.
  
!      'fpud'
            Enables support for double-precision floating-point hardware
            extensions.  The single-precision floating-point extension is
            also enabled.  Not available for ARC EM.
  
!      'fpuda'
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  The
            single-precision floating-point extension is also enabled.
            This option is only available for ARC EM.
  
!      'fpuda_div'
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  The
            single-precision floating-point, square-root, and divide
            extensions are also enabled.  This option is only available
            for ARC EM.
  
!      'fpuda_fma'
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  The
            single-precision floating-point and fused multiply and add
            hardware extensions are also enabled.  This option is only
            available for ARC EM.
  
!      'fpuda_all'
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  All
            single-precision floating-point hardware extensions are also
            enabled.  This option is only available for ARC EM.
  
!      'fpus_div'
            Enables support for single-precision floating-point,
            square-root and divide hardware extensions.
  
!      'fpud_div'
            Enables support for double-precision floating-point,
            square-root and divide hardware extensions.  This option
!           includes option 'fpus_div'.  Not available for ARC EM.
  
!      'fpus_fma'
            Enables support for single-precision floating-point and fused
            multiply and add hardware extensions.
  
!      'fpud_fma'
            Enables support for double-precision floating-point and fused
            multiply and add hardware extensions.  This option includes
!           option 'fpus_fma'.  Not available for ARC EM.
  
!      'fpus_all'
            Enables support for all single-precision floating-point
            hardware extensions.
  
!      'fpud_all'
            Enables support for all single- and double-precision
            floating-point hardware extensions.  Not available for ARC EM.
  
! '-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT'
       Specifies general-purposes registers that the processor
       automatically saves/restores on interrupt entry and exit.
       REGISTER-RANGE is specified as two registers separated by a dash.
!      The register range always starts with 'r0', the upper limit is 'fp'
       register.  BLINK and LP_COUNT are optional.  This option is only
       valid for ARC EM and ARC HS cores.
  
! '-mrgf-banked-regs=NUMBER'
       Specifies the number of registers replicated in second register
       bank on entry to fast interrupt.  Fast interrupts are interrupts
       with the highest priority level P0.  These interrupts save only PC
--- 20621,20930 ----
  The following options control the architecture variant for which code is
  being compiled:
  
! ‘-mbarrel-shifter’
       Generate instructions supported by barrel shifter.  This is the
!      default unless ‘-mcpu=ARC601’ or ‘-mcpu=ARCEM’ is in effect.
  
! ‘-mjli-always’
       Force to call a function using jli_s instruction.  This option is
       valid only for ARCv2 architecture.
  
! ‘-mcpu=CPU’
       Set architecture type, register usage, and instruction scheduling
       parameters for CPU.  There are also shortcut alias options
       available for backward compatibility and convenience.  Supported
       values for CPU are
  
!      ‘arc600’
!           Compile for ARC600.  Aliases: ‘-mA6’, ‘-mARC600’.
  
!      ‘arc601’
!           Compile for ARC601.  Alias: ‘-mARC601’.
  
!      ‘arc700’
!           Compile for ARC700.  Aliases: ‘-mA7’, ‘-mARC700’.  This is the
!           default when configured with ‘--with-cpu=arc700’.
  
!      ‘arcem’
            Compile for ARC EM.
  
!      ‘archs’
            Compile for ARC HS.
  
!      ‘em’
            Compile for ARC EM CPU with no hardware extensions.
  
!      ‘em4’
            Compile for ARC EM4 CPU.
  
!      ‘em4_dmips’
            Compile for ARC EM4 DMIPS CPU.
  
!      ‘em4_fpus’
            Compile for ARC EM4 DMIPS CPU with the single-precision
            floating-point extension.
  
!      ‘em4_fpuda’
            Compile for ARC EM4 DMIPS CPU with single-precision
            floating-point and double assist instructions.
  
!      ‘hs’
            Compile for ARC HS CPU with no hardware extensions except the
            atomic instructions.
  
!      ‘hs34’
            Compile for ARC HS34 CPU.
  
!      ‘hs38’
            Compile for ARC HS38 CPU.
  
!      ‘hs38_linux’
            Compile for ARC HS38 CPU with all hardware extensions on.
  
!      ‘hs4x’
            Compile for ARC HS4x CPU.
  
!      ‘hs4xd’
            Compile for ARC HS4xD CPU.
  
!      ‘hs4x_rel31’
            Compile for ARC HS4x CPU release 3.10a.
  
!      ‘arc600_norm’
!           Compile for ARC 600 CPU with ‘norm’ instructions enabled.
  
!      ‘arc600_mul32x16’
!           Compile for ARC 600 CPU with ‘norm’ and 32x16-bit multiply
            instructions enabled.
  
!      ‘arc600_mul64’
!           Compile for ARC 600 CPU with ‘norm’ and ‘mul64’-family
            instructions enabled.
  
!      ‘arc601_norm’
!           Compile for ARC 601 CPU with ‘norm’ instructions enabled.
  
!      ‘arc601_mul32x16’
!           Compile for ARC 601 CPU with ‘norm’ and 32x16-bit multiply
            instructions enabled.
  
!      ‘arc601_mul64’
!           Compile for ARC 601 CPU with ‘norm’ and ‘mul64’-family
            instructions enabled.
  
!      ‘nps400’
            Compile for ARC 700 on NPS400 chip.
  
!      ‘em_mini’
            Compile for ARC EM minimalist configuration featuring reduced
            register set.
  
! ‘-mdpfp’
! ‘-mdpfp-compact’
       Generate double-precision FPX instructions, tuned for the compact
       implementation.
  
! ‘-mdpfp-fast’
       Generate double-precision FPX instructions, tuned for the fast
       implementation.
  
! ‘-mno-dpfp-lrsr’
!      Disable ‘lr’ and ‘sr’ instructions from using FPX extension aux
       registers.
  
! ‘-mea’
!      Generate extended arithmetic instructions.  Currently only ‘divaw’,
!      ‘adds’, ‘subs’, and ‘sat16’ are supported.  Only valid for
!      ‘-mcpu=ARC700’.
  
! ‘-mno-mpy’
!      Do not generate ‘mpy’-family instructions for ARC700.  This option
       is deprecated.
  
! ‘-mmul32x16’
       Generate 32x16-bit multiply and multiply-accumulate instructions.
  
! ‘-mmul64’
!      Generate ‘mul64’ and ‘mulu64’ instructions.  Only valid for
!      ‘-mcpu=ARC600’.
  
! ‘-mnorm’
!      Generate ‘norm’ instructions.  This is the default if
!      ‘-mcpu=ARC700’ is in effect.
  
! ‘-mspfp’
! ‘-mspfp-compact’
       Generate single-precision FPX instructions, tuned for the compact
       implementation.
  
! ‘-mspfp-fast’
       Generate single-precision FPX instructions, tuned for the fast
       implementation.
  
! ‘-msimd’
       Enable generation of ARC SIMD instructions via target-specific
!      builtins.  Only valid for ‘-mcpu=ARC700’.
  
! ‘-msoft-float’
       This option ignored; it is provided for compatibility purposes
       only.  Software floating-point code is emitted by default, and this
!      default can overridden by FPX options; ‘-mspfp’, ‘-mspfp-compact’,
!      or ‘-mspfp-fast’ for single precision, and ‘-mdpfp’,
!      ‘-mdpfp-compact’, or ‘-mdpfp-fast’ for double precision.
  
! ‘-mswap’
!      Generate ‘swap’ instructions.
  
! ‘-matomic’
       This enables use of the locked load/store conditional extension to
       implement atomic memory built-in functions.  Not available for ARC
       6xx or ARC EM cores.
  
! ‘-mdiv-rem’
!      Enable ‘div’ and ‘rem’ instructions for ARCv2 cores.
  
! ‘-mcode-density’
       Enable code density instructions for ARC EM. This option is on by
       default for ARC HS.
  
! ‘-mll64’
       Enable double load/store operations for ARC HS cores.
  
! ‘-mtp-regno=REGNO’
       Specify thread pointer register number.
  
! ‘-mmpy-option=MULTO’
       Compile ARCv2 code with a multiplier design option.  You can
       specify the option using either a string or numeric value for
!      MULTO.  ‘wlh1’ is the default value.  The recognized values are:
  
!      ‘0’
!      ‘none’
            No multiplier available.
  
!      ‘1’
!      ‘w’
            16x16 multiplier, fully pipelined.  The following instructions
!           are enabled: ‘mpyw’ and ‘mpyuw’.
  
!      ‘2’
!      ‘wlh1’
            32x32 multiplier, fully pipelined (1 stage).  The following
!           instructions are additionally enabled: ‘mpy’, ‘mpyu’, ‘mpym’,
!           ‘mpymu’, and ‘mpy_s’.
  
!      ‘3’
!      ‘wlh2’
            32x32 multiplier, fully pipelined (2 stages).  The following
!           instructions are additionally enabled: ‘mpy’, ‘mpyu’, ‘mpym’,
!           ‘mpymu’, and ‘mpy_s’.
  
!      ‘4’
!      ‘wlh3’
            Two 16x16 multipliers, blocking, sequential.  The following
!           instructions are additionally enabled: ‘mpy’, ‘mpyu’, ‘mpym’,
!           ‘mpymu’, and ‘mpy_s’.
  
!      ‘5’
!      ‘wlh4’
            One 16x16 multiplier, blocking, sequential.  The following
!           instructions are additionally enabled: ‘mpy’, ‘mpyu’, ‘mpym’,
!           ‘mpymu’, and ‘mpy_s’.
  
!      ‘6’
!      ‘wlh5’
            One 32x4 multiplier, blocking, sequential.  The following
!           instructions are additionally enabled: ‘mpy’, ‘mpyu’, ‘mpym’,
!           ‘mpymu’, and ‘mpy_s’.
  
!      ‘7’
!      ‘plus_dmpy’
            ARC HS SIMD support.
  
!      ‘8’
!      ‘plus_macd’
            ARC HS SIMD support.
  
!      ‘9’
!      ‘plus_qmacw’
            ARC HS SIMD support.
  
       This option is only available for ARCv2 cores.
  
! ‘-mfpu=FPU’
       Enables support for specific floating-point hardware extensions for
       ARCv2 cores.  Supported values for FPU are:
  
!      ‘fpus’
            Enables support for single-precision floating-point hardware
            extensions.
  
!      ‘fpud’
            Enables support for double-precision floating-point hardware
            extensions.  The single-precision floating-point extension is
            also enabled.  Not available for ARC EM.
  
!      ‘fpuda’
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  The
            single-precision floating-point extension is also enabled.
            This option is only available for ARC EM.
  
!      ‘fpuda_div’
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  The
            single-precision floating-point, square-root, and divide
            extensions are also enabled.  This option is only available
            for ARC EM.
  
!      ‘fpuda_fma’
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  The
            single-precision floating-point and fused multiply and add
            hardware extensions are also enabled.  This option is only
            available for ARC EM.
  
!      ‘fpuda_all’
            Enables support for double-precision floating-point hardware
            extensions using double-precision assist instructions.  All
            single-precision floating-point hardware extensions are also
            enabled.  This option is only available for ARC EM.
  
!      ‘fpus_div’
            Enables support for single-precision floating-point,
            square-root and divide hardware extensions.
  
!      ‘fpud_div’
            Enables support for double-precision floating-point,
            square-root and divide hardware extensions.  This option
!           includes option ‘fpus_div’.  Not available for ARC EM.
  
!      ‘fpus_fma’
            Enables support for single-precision floating-point and fused
            multiply and add hardware extensions.
  
!      ‘fpud_fma’
            Enables support for double-precision floating-point and fused
            multiply and add hardware extensions.  This option includes
!           option ‘fpus_fma’.  Not available for ARC EM.
  
!      ‘fpus_all’
            Enables support for all single-precision floating-point
            hardware extensions.
  
!      ‘fpud_all’
            Enables support for all single- and double-precision
            floating-point hardware extensions.  Not available for ARC EM.
  
! ‘-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT’
       Specifies general-purposes registers that the processor
       automatically saves/restores on interrupt entry and exit.
       REGISTER-RANGE is specified as two registers separated by a dash.
!      The register range always starts with ‘r0’, the upper limit is ‘fp’
       register.  BLINK and LP_COUNT are optional.  This option is only
       valid for ARC EM and ARC HS cores.
  
! ‘-mrgf-banked-regs=NUMBER’
       Specifies the number of registers replicated in second register
       bank on entry to fast interrupt.  Fast interrupts are interrupts
       with the highest priority level P0.  These interrupts save only PC
*************** being compiled:
*** 20929,21077 ****
       using fast interrupts in an ARC V2 family processor.  Permitted
       values are 4, 8, 16, and 32.
  
! '-mlpc-width=WIDTH'
!      Specify the width of the 'lp_count' register.  Valid values for
       WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
       fixed to 32 bits.  If the width is less than 32, the compiler does
       not attempt to transform loops in your program to use the
!      zero-delay loop mechanism unless it is known that the 'lp_count'
       register can hold the required loop-counter value.  Depending on
       the width specified, the compiler and run-time library might
       continue to use the loop mechanism for various needs.  This option
!      defines macro '__ARC_LPC_WIDTH__' with the value of WIDTH.
  
! '-mrf16'
       This option instructs the compiler to generate code for a 16-entry
!      register file.  This option defines the '__ARC_RF16__' preprocessor
       macro.
  
! '-mbranch-index'
!      Enable use of 'bi' or 'bih' instructions to implement jump tables.
  
   The following options are passed through to the assembler, and also
  define preprocessor macro symbols.
  
! '-mdsp-packa'
       Passed down to the assembler to enable the DSP Pack A extensions.
!      Also sets the preprocessor symbol '__Xdsp_packa'.  This option is
       deprecated.
  
! '-mdvbf'
       Passed down to the assembler to enable the dual Viterbi butterfly
!      extension.  Also sets the preprocessor symbol '__Xdvbf'.  This
       option is deprecated.
  
! '-mlock'
       Passed down to the assembler to enable the locked load/store
       conditional extension.  Also sets the preprocessor symbol
!      '__Xlock'.
  
! '-mmac-d16'
       Passed down to the assembler.  Also sets the preprocessor symbol
!      '__Xxmac_d16'.  This option is deprecated.
  
! '-mmac-24'
       Passed down to the assembler.  Also sets the preprocessor symbol
!      '__Xxmac_24'.  This option is deprecated.
  
! '-mrtsc'
       Passed down to the assembler to enable the 64-bit time-stamp
       counter extension instruction.  Also sets the preprocessor symbol
!      '__Xrtsc'.  This option is deprecated.
  
! '-mswape'
       Passed down to the assembler to enable the swap byte ordering
       extension instruction.  Also sets the preprocessor symbol
!      '__Xswape'.
  
! '-mtelephony'
       Passed down to the assembler to enable dual- and single-operand
       instructions for telephony.  Also sets the preprocessor symbol
!      '__Xtelephony'.  This option is deprecated.
  
! '-mxy'
       Passed down to the assembler to enable the XY memory extension.
!      Also sets the preprocessor symbol '__Xxy'.
  
   The following options control how the assembly code is annotated:
  
! '-misize'
       Annotate assembler instructions with estimated addresses.
  
! '-mannotate-align'
       Does nothing.  Preserved for backward compatibility.
  
   The following options are passed through to the linker:
  
! '-marclinux'
!      Passed through to the linker, to specify use of the 'arclinux'
       emulation.  This option is enabled by default in tool chains built
!      for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
       profiling is not requested.
  
! '-marclinux_prof'
!      Passed through to the linker, to specify use of the 'arclinux_prof'
       emulation.  This option is enabled by default in tool chains built
!      for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
       profiling is requested.
  
   The following options control the semantics of generated code:
  
! '-mlong-calls'
       Generate calls as register indirect calls, thus providing access to
       the full 32-bit address range.
  
! '-mmedium-calls'
       Don't use less than 25-bit addressing range for calls, which is the
       offset available for an unconditional branch-and-link instruction.
       Conditional execution of function calls is suppressed, to allow use
       of the 25-bit range, rather than the 21-bit range with conditional
       branch-and-link.  This is the default for tool chains built for
!      'arc-linux-uclibc' and 'arceb-linux-uclibc' targets.
  
! '-G NUM'
       Put definitions of externally-visible data in a small data section
       if that data is no bigger than NUM bytes.  The default value of NUM
       is 4 for any ARC configuration, or 8 when we have double load/store
       operations.
  
! '-mno-sdata'
       Do not generate sdata references.  This is the default for tool
!      chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
       targets.
  
! '-mvolatile-cache'
       Use ordinarily cached memory accesses for volatile references.
       This is the default.
  
! '-mno-volatile-cache'
       Enable cache bypass for volatile references.
  
   The following options fine tune code generation:
! '-malign-call'
       Does nothing.  Preserved for backward compatibility.
  
! '-mauto-modify-reg'
       Enable the use of pre/post modify with register displacement.
  
! '-mbbit-peephole'
       Does nothing.  Preserved for backward compatibility.
  
! '-mno-brcc'
!      This option disables a target-specific pass in 'arc_reorg' to
!      generate compare-and-branch ('brCC') instructions.  It has no
       effect on generation of these instructions driven by the combiner
       pass.
  
! '-mcase-vector-pcrel'
       Use PC-relative switch case tables to enable case table shortening.
!      This is the default for '-Os'.
  
! '-mcompact-casesi'
!      Enable compact 'casesi' pattern.  This is the default for '-Os',
       and only available for ARCv1 cores.  This option is deprecated.
  
! '-mno-cond-exec'
       Disable the ARCompact-specific pass to generate conditional
       execution instructions.
  
--- 20933,21081 ----
       using fast interrupts in an ARC V2 family processor.  Permitted
       values are 4, 8, 16, and 32.
  
! ‘-mlpc-width=WIDTH’
!      Specify the width of the ‘lp_count’ register.  Valid values for
       WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
       fixed to 32 bits.  If the width is less than 32, the compiler does
       not attempt to transform loops in your program to use the
!      zero-delay loop mechanism unless it is known that the ‘lp_count’
       register can hold the required loop-counter value.  Depending on
       the width specified, the compiler and run-time library might
       continue to use the loop mechanism for various needs.  This option
!      defines macro ‘__ARC_LPC_WIDTH__’ with the value of WIDTH.
  
! ‘-mrf16’
       This option instructs the compiler to generate code for a 16-entry
!      register file.  This option defines the ‘__ARC_RF16__’ preprocessor
       macro.
  
! ‘-mbranch-index’
!      Enable use of ‘bi’ or ‘bih’ instructions to implement jump tables.
  
   The following options are passed through to the assembler, and also
  define preprocessor macro symbols.
  
! ‘-mdsp-packa’
       Passed down to the assembler to enable the DSP Pack A extensions.
!      Also sets the preprocessor symbol ‘__Xdsp_packa’.  This option is
       deprecated.
  
! ‘-mdvbf’
       Passed down to the assembler to enable the dual Viterbi butterfly
!      extension.  Also sets the preprocessor symbol ‘__Xdvbf’.  This
       option is deprecated.
  
! ‘-mlock’
       Passed down to the assembler to enable the locked load/store
       conditional extension.  Also sets the preprocessor symbol
!      ‘__Xlock’.
  
! ‘-mmac-d16’
       Passed down to the assembler.  Also sets the preprocessor symbol
!      ‘__Xxmac_d16’.  This option is deprecated.
  
! ‘-mmac-24’
       Passed down to the assembler.  Also sets the preprocessor symbol
!      ‘__Xxmac_24’.  This option is deprecated.
  
! ‘-mrtsc’
       Passed down to the assembler to enable the 64-bit time-stamp
       counter extension instruction.  Also sets the preprocessor symbol
!      ‘__Xrtsc’.  This option is deprecated.
  
! ‘-mswape’
       Passed down to the assembler to enable the swap byte ordering
       extension instruction.  Also sets the preprocessor symbol
!      ‘__Xswape’.
  
! ‘-mtelephony’
       Passed down to the assembler to enable dual- and single-operand
       instructions for telephony.  Also sets the preprocessor symbol
!      ‘__Xtelephony’.  This option is deprecated.
  
! ‘-mxy’
       Passed down to the assembler to enable the XY memory extension.
!      Also sets the preprocessor symbol ‘__Xxy’.
  
   The following options control how the assembly code is annotated:
  
! ‘-misize’
       Annotate assembler instructions with estimated addresses.
  
! ‘-mannotate-align’
       Does nothing.  Preserved for backward compatibility.
  
   The following options are passed through to the linker:
  
! ‘-marclinux’
!      Passed through to the linker, to specify use of the ‘arclinux’
       emulation.  This option is enabled by default in tool chains built
!      for ‘arc-linux-uclibc’ and ‘arceb-linux-uclibc’ targets when
       profiling is not requested.
  
! ‘-marclinux_prof’
!      Passed through to the linker, to specify use of the ‘arclinux_prof’
       emulation.  This option is enabled by default in tool chains built
!      for ‘arc-linux-uclibc’ and ‘arceb-linux-uclibc’ targets when
       profiling is requested.
  
   The following options control the semantics of generated code:
  
! ‘-mlong-calls’
       Generate calls as register indirect calls, thus providing access to
       the full 32-bit address range.
  
! ‘-mmedium-calls’
       Don't use less than 25-bit addressing range for calls, which is the
       offset available for an unconditional branch-and-link instruction.
       Conditional execution of function calls is suppressed, to allow use
       of the 25-bit range, rather than the 21-bit range with conditional
       branch-and-link.  This is the default for tool chains built for
!      ‘arc-linux-uclibc’ and ‘arceb-linux-uclibc’ targets.
  
! ‘-G NUM’
       Put definitions of externally-visible data in a small data section
       if that data is no bigger than NUM bytes.  The default value of NUM
       is 4 for any ARC configuration, or 8 when we have double load/store
       operations.
  
! ‘-mno-sdata’
       Do not generate sdata references.  This is the default for tool
!      chains built for ‘arc-linux-uclibc’ and ‘arceb-linux-uclibc’
       targets.
  
! ‘-mvolatile-cache’
       Use ordinarily cached memory accesses for volatile references.
       This is the default.
  
! ‘-mno-volatile-cache’
       Enable cache bypass for volatile references.
  
   The following options fine tune code generation:
! ‘-malign-call’
       Does nothing.  Preserved for backward compatibility.
  
! ‘-mauto-modify-reg’
       Enable the use of pre/post modify with register displacement.
  
! ‘-mbbit-peephole’
       Does nothing.  Preserved for backward compatibility.
  
! ‘-mno-brcc’
!      This option disables a target-specific pass in ‘arc_reorg’ to
!      generate compare-and-branch (‘brCC’) instructions.  It has no
       effect on generation of these instructions driven by the combiner
       pass.
  
! ‘-mcase-vector-pcrel’
       Use PC-relative switch case tables to enable case table shortening.
!      This is the default for ‘-Os’.
  
! ‘-mcompact-casesi’
!      Enable compact ‘casesi’ pattern.  This is the default for ‘-Os’,
       and only available for ARCv1 cores.  This option is deprecated.
  
! ‘-mno-cond-exec’
       Disable the ARCompact-specific pass to generate conditional
       execution instructions.
  
*************** define preprocessor macro symbols.
*** 21086,21122 ****
       the cost of extra compilation time, which is why there is an option
       to switch it off.  If you have a problem with call instructions
       exceeding their allowable offset range because they are
!      conditionalized, you should consider using '-mmedium-calls'
       instead.
  
! '-mearly-cbranchsi'
!      Enable pre-reload use of the 'cbranchsi' pattern.
  
! '-mexpand-adddi'
!      Expand 'adddi3' and 'subdi3' at RTL generation time into 'add.f',
!      'adc' etc.  This option is deprecated.
  
! '-mindexed-loads'
       Enable the use of indexed loads.  This can be problematic because
       some optimizers then assume that indexed stores exist, which is not
       the case.
  
! '-mlra'
       Enable Local Register Allocation.  This is still experimental for
       ARC, so by default the compiler uses standard reload (i.e.
!      '-mno-lra').
  
! '-mlra-priority-none'
       Don't indicate any priority for target registers.
  
! '-mlra-priority-compact'
       Indicate target register priority for r0..r3 / r12..r15.
  
! '-mlra-priority-noncompact'
       Reduce target register priority for r0..r3 / r12..r15.
  
! '-mmillicode'
!      When optimizing for size (using '-Os'), prologues and epilogues
       that have to save or restore a large number of registers are often
       shortened by using call to a special function in libgcc; this is
       referred to as a _millicode_ call.  As these calls can pose
--- 21090,21126 ----
       the cost of extra compilation time, which is why there is an option
       to switch it off.  If you have a problem with call instructions
       exceeding their allowable offset range because they are
!      conditionalized, you should consider using ‘-mmedium-calls’
       instead.
  
! ‘-mearly-cbranchsi’
!      Enable pre-reload use of the ‘cbranchsi’ pattern.
  
! ‘-mexpand-adddi’
!      Expand ‘adddi3’ and ‘subdi3’ at RTL generation time into ‘add.f’,
!      ‘adc’ etc.  This option is deprecated.
  
! ‘-mindexed-loads’
       Enable the use of indexed loads.  This can be problematic because
       some optimizers then assume that indexed stores exist, which is not
       the case.
  
! ‘-mlra’
       Enable Local Register Allocation.  This is still experimental for
       ARC, so by default the compiler uses standard reload (i.e.
!      ‘-mno-lra’).
  
! ‘-mlra-priority-none’
       Don't indicate any priority for target registers.
  
! ‘-mlra-priority-compact’
       Indicate target register priority for r0..r3 / r12..r15.
  
! ‘-mlra-priority-noncompact’
       Reduce target register priority for r0..r3 / r12..r15.
  
! ‘-mmillicode’
!      When optimizing for size (using ‘-Os’), prologues and epilogues
       that have to save or restore a large number of registers are often
       shortened by using call to a special function in libgcc; this is
       referred to as a _millicode_ call.  As these calls can pose
*************** define preprocessor macro symbols.
*** 21124,21260 ****
       nonstandard way, this option is provided to turn on or off
       millicode call generation.
  
! '-mcode-density-frame'
!      This option enable the compiler to emit 'enter' and 'leave'
       instructions.  These instructions are only valid for CPUs with
       code-density feature.
  
! '-mmixed-code'
       Does nothing.  Preserved for backward compatibility.
  
! '-mq-class'
!      Ths option is deprecated.  Enable 'q' instruction alternatives.
!      This is the default for '-Os'.
  
! '-mRcq'
       Does nothing.  Preserved for backward compatibility.
  
! '-mRcw'
       Does nothing.  Preserved for backward compatibility.
  
! '-msize-level=LEVEL'
       Fine-tune size optimization with regards to instruction lengths and
       alignment.  The recognized values for LEVEL are:
!      '0'
            No size optimization.  This level is deprecated and treated
!           like '1'.
  
!      '1'
            Short instructions are used opportunistically.
  
!      '2'
            In addition, alignment of loops and of code after barriers are
            dropped.
  
!      '3'
            In addition, optional data alignment is dropped, and the
!           option 'Os' is enabled.
  
!      This defaults to '3' when '-Os' is in effect.  Otherwise, the
!      behavior when this is not set is equivalent to level '1'.
  
! '-mtune=CPU'
       Set instruction scheduling parameters for CPU, overriding any
!      implied by '-mcpu='.
  
       Supported values for CPU are
  
!      'ARC600'
            Tune for ARC600 CPU.
  
!      'ARC601'
            Tune for ARC601 CPU.
  
!      'ARC700'
            Tune for ARC700 CPU with standard multiplier block.
  
!      'ARC700-xmac'
            Tune for ARC700 CPU with XMAC block.
  
!      'ARC725D'
            Tune for ARC725D CPU.
  
!      'ARC750D'
            Tune for ARC750D CPU.
  
!      'core3'
            Tune for ARCv2 core3 type CPU. This option enable usage of
!           'dbnz' instruction.
  
!      'release31a'
            Tune for ARC4x release 3.10a.
  
! '-mmultcost=NUM'
!      Cost to assume for a multiply instruction, with '4' being equal to
       a normal instruction.
  
! '-munalign-prob-threshold=PROBABILITY'
       Does nothing.  Preserved for backward compatibility.
  
   The following options are maintained for backward compatibility, but
  are now deprecated and will be removed in a future release:
  
! '-margonaut'
       Obsolete FPX.
  
! '-mbig-endian'
! '-EB'
       Compile code for big-endian targets.  Use of these options is now
       deprecated.  Big-endian code is supported by configuring GCC to
!      build 'arceb-elf32' and 'arceb-linux-uclibc' targets, for which big
       endian is the default.
  
! '-mlittle-endian'
! '-EL'
       Compile code for little-endian targets.  Use of these options is
       now deprecated.  Little-endian code is supported by configuring GCC
!      to build 'arc-elf32' and 'arc-linux-uclibc' targets, for which
       little endian is the default.
  
! '-mbarrel_shifter'
!      Replaced by '-mbarrel-shifter'.
  
! '-mdpfp_compact'
!      Replaced by '-mdpfp-compact'.
  
! '-mdpfp_fast'
!      Replaced by '-mdpfp-fast'.
  
! '-mdsp_packa'
!      Replaced by '-mdsp-packa'.
  
! '-mEA'
!      Replaced by '-mea'.
  
! '-mmac_24'
!      Replaced by '-mmac-24'.
  
! '-mmac_d16'
!      Replaced by '-mmac-d16'.
  
! '-mspfp_compact'
!      Replaced by '-mspfp-compact'.
  
! '-mspfp_fast'
!      Replaced by '-mspfp-fast'.
  
! '-mtune=CPU'
!      Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
!      replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
       respectively.
  
! '-multcost=NUM'
!      Replaced by '-mmultcost'.
  
  
  File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
--- 21128,21264 ----
       nonstandard way, this option is provided to turn on or off
       millicode call generation.
  
! ‘-mcode-density-frame’
!      This option enable the compiler to emit ‘enter’ and ‘leave’
       instructions.  These instructions are only valid for CPUs with
       code-density feature.
  
! ‘-mmixed-code’
       Does nothing.  Preserved for backward compatibility.
  
! ‘-mq-class’
!      Ths option is deprecated.  Enable ‘q’ instruction alternatives.
!      This is the default for ‘-Os’.
  
! ‘-mRcq’
       Does nothing.  Preserved for backward compatibility.
  
! ‘-mRcw’
       Does nothing.  Preserved for backward compatibility.
  
! ‘-msize-level=LEVEL’
       Fine-tune size optimization with regards to instruction lengths and
       alignment.  The recognized values for LEVEL are:
!      ‘0’
            No size optimization.  This level is deprecated and treated
!           like ‘1’.
  
!      ‘1’
            Short instructions are used opportunistically.
  
!      ‘2’
            In addition, alignment of loops and of code after barriers are
            dropped.
  
!      ‘3’
            In addition, optional data alignment is dropped, and the
!           option ‘Os’ is enabled.
  
!      This defaults to ‘3’ when ‘-Os’ is in effect.  Otherwise, the
!      behavior when this is not set is equivalent to level ‘1’.
  
! ‘-mtune=CPU’
       Set instruction scheduling parameters for CPU, overriding any
!      implied by ‘-mcpu=’.
  
       Supported values for CPU are
  
!      ‘ARC600’
            Tune for ARC600 CPU.
  
!      ‘ARC601’
            Tune for ARC601 CPU.
  
!      ‘ARC700’
            Tune for ARC700 CPU with standard multiplier block.
  
!      ‘ARC700-xmac’
            Tune for ARC700 CPU with XMAC block.
  
!      ‘ARC725D’
            Tune for ARC725D CPU.
  
!      ‘ARC750D’
            Tune for ARC750D CPU.
  
!      ‘core3’
            Tune for ARCv2 core3 type CPU. This option enable usage of
!           ‘dbnz’ instruction.
  
!      ‘release31a’
            Tune for ARC4x release 3.10a.
  
! ‘-mmultcost=NUM’
!      Cost to assume for a multiply instruction, with ‘4’ being equal to
       a normal instruction.
  
! ‘-munalign-prob-threshold=PROBABILITY’
       Does nothing.  Preserved for backward compatibility.
  
   The following options are maintained for backward compatibility, but
  are now deprecated and will be removed in a future release:
  
! ‘-margonaut’
       Obsolete FPX.
  
! ‘-mbig-endian’
! ‘-EB’
       Compile code for big-endian targets.  Use of these options is now
       deprecated.  Big-endian code is supported by configuring GCC to
!      build ‘arceb-elf32’ and ‘arceb-linux-uclibc’ targets, for which big
       endian is the default.
  
! ‘-mlittle-endian’
! ‘-EL’
       Compile code for little-endian targets.  Use of these options is
       now deprecated.  Little-endian code is supported by configuring GCC
!      to build ‘arc-elf32’ and ‘arc-linux-uclibc’ targets, for which
       little endian is the default.
  
! ‘-mbarrel_shifter’
!      Replaced by ‘-mbarrel-shifter’.
  
! ‘-mdpfp_compact’
!      Replaced by ‘-mdpfp-compact’.
  
! ‘-mdpfp_fast’
!      Replaced by ‘-mdpfp-fast’.
  
! ‘-mdsp_packa’
!      Replaced by ‘-mdsp-packa’.
  
! ‘-mEA’
!      Replaced by ‘-mea’.
  
! ‘-mmac_24’
!      Replaced by ‘-mmac-24’.
  
! ‘-mmac_d16’
!      Replaced by ‘-mmac-d16’.
  
! ‘-mspfp_compact’
!      Replaced by ‘-mspfp-compact’.
  
! ‘-mspfp_fast’
!      Replaced by ‘-mspfp-fast’.
  
! ‘-mtune=CPU’
!      Values ‘arc600’, ‘arc601’, ‘arc700’ and ‘arc700-xmac’ for CPU are
!      replaced by ‘ARC600’, ‘ARC601’, ‘ARC700’ and ‘ARC700-xmac’
       respectively.
  
! ‘-multcost=NUM’
!      Replaced by ‘-mmultcost’.
  
  
  File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
*************** File: gcc.info,  Node: ARM Options,  Nex
*** 21262,21309 ****
  3.19.5 ARM Options
  ------------------
  
! These '-m' options are defined for the ARM port:
  
! '-mabi=NAME'
       Generate code for the specified ABI.  Permissible values are:
!      'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
  
! '-mapcs-frame'
       Generate a stack frame that is compliant with the ARM Procedure
       Call Standard for all functions, even if this is not strictly
       necessary for correct execution of the code.  Specifying
!      '-fomit-frame-pointer' with this option causes the stack frames not
       to be generated for leaf functions.  The default is
!      '-mno-apcs-frame'.  This option is deprecated.
  
! '-mapcs'
!      This is a synonym for '-mapcs-frame' and is deprecated.
  
! '-mthumb-interwork'
       Generate code that supports calling between the ARM and Thumb
       instruction sets.  Without this option, on pre-v5 architectures,
       the two instruction sets cannot be reliably used inside one
!      program.  The default is '-mno-thumb-interwork', since slightly
!      larger code is generated when '-mthumb-interwork' is specified.  In
       AAPCS configurations this option is meaningless.
  
! '-mno-sched-prolog'
       Prevent the reordering of instructions in the function prologue, or
       the merging of those instruction with the instructions in the
       function's body.  This means that all functions start with a
       recognizable set of instructions (or in fact one of a choice from a
       small set of different function prologues), and this information
       can be used to locate the start of functions inside an executable
!      piece of code.  The default is '-msched-prolog'.
  
! '-mfloat-abi=NAME'
       Specifies which floating-point ABI to use.  Permissible values are:
!      'soft', 'softfp' and 'hard'.
  
!      Specifying 'soft' causes GCC to generate output containing library
!      calls for floating-point operations.  'softfp' allows the
       generation of code using hardware floating-point instructions, but
!      still uses the soft-float calling conventions.  'hard' allows
       generation of floating-point instructions and uses FPU-specific
       calling conventions.
  
--- 21266,21313 ----
  3.19.5 ARM Options
  ------------------
  
! These ‘-m’ options are defined for the ARM port:
  
! ‘-mabi=NAME’
       Generate code for the specified ABI.  Permissible values are:
!      ‘apcs-gnu’, ‘atpcs’, ‘aapcs’, ‘aapcs-linux’ and ‘iwmmxt’.
  
! ‘-mapcs-frame’
       Generate a stack frame that is compliant with the ARM Procedure
       Call Standard for all functions, even if this is not strictly
       necessary for correct execution of the code.  Specifying
!      ‘-fomit-frame-pointer’ with this option causes the stack frames not
       to be generated for leaf functions.  The default is
!      ‘-mno-apcs-frame’.  This option is deprecated.
  
! ‘-mapcs’
!      This is a synonym for ‘-mapcs-frame’ and is deprecated.
  
! ‘-mthumb-interwork’
       Generate code that supports calling between the ARM and Thumb
       instruction sets.  Without this option, on pre-v5 architectures,
       the two instruction sets cannot be reliably used inside one
!      program.  The default is ‘-mno-thumb-interwork’, since slightly
!      larger code is generated when ‘-mthumb-interwork’ is specified.  In
       AAPCS configurations this option is meaningless.
  
! ‘-mno-sched-prolog’
       Prevent the reordering of instructions in the function prologue, or
       the merging of those instruction with the instructions in the
       function's body.  This means that all functions start with a
       recognizable set of instructions (or in fact one of a choice from a
       small set of different function prologues), and this information
       can be used to locate the start of functions inside an executable
!      piece of code.  The default is ‘-msched-prolog’.
  
! ‘-mfloat-abi=NAME’
       Specifies which floating-point ABI to use.  Permissible values are:
!      ‘soft’, ‘softfp’ and ‘hard’.
  
!      Specifying ‘soft’ causes GCC to generate output containing library
!      calls for floating-point operations.  ‘softfp’ allows the
       generation of code using hardware floating-point instructions, but
!      still uses the soft-float calling conventions.  ‘hard’ allows
       generation of floating-point instructions and uses FPU-specific
       calling conventions.
  
*************** These '-m' options are defined for the A
*** 21312,21333 ****
       you must compile your entire program with the same ABI, and link
       with a compatible set of libraries.
  
! '-mgeneral-regs-only'
       Generate code which uses only the general-purpose registers.  This
       will prevent the compiler from using floating-point and Advanced
       SIMD registers but will not impose any restrictions on the
       assembler.
  
! '-mlittle-endian'
       Generate code for a processor running in little-endian mode.  This
       is the default for all standard configurations.
  
! '-mbig-endian'
       Generate code for a processor running in big-endian mode; the
       default is to compile code for a little-endian processor.
  
! '-mbe8'
! '-mbe32'
       When linking a big-endian image select between BE8 and BE32
       formats.  The option has no effect for little-endian images and is
       ignored.  The default is dependent on the selected target
--- 21316,21337 ----
       you must compile your entire program with the same ABI, and link
       with a compatible set of libraries.
  
! ‘-mgeneral-regs-only’
       Generate code which uses only the general-purpose registers.  This
       will prevent the compiler from using floating-point and Advanced
       SIMD registers but will not impose any restrictions on the
       assembler.
  
! ‘-mlittle-endian’
       Generate code for a processor running in little-endian mode.  This
       is the default for all standard configurations.
  
! ‘-mbig-endian’
       Generate code for a processor running in big-endian mode; the
       default is to compile code for a little-endian processor.
  
! ‘-mbe8’
! ‘-mbe32’
       When linking a big-endian image select between BE8 and BE32
       formats.  The option has no effect for little-endian images and is
       ignored.  The default is dependent on the selected target
*************** These '-m' options are defined for the A
*** 21335,21872 ****
       BE8, for older architectures the default is BE32.  BE32 format has
       been deprecated by ARM.
  
! '-march=NAME[+extension...]'
       This specifies the name of the target ARM architecture.  GCC uses
       this name to determine what kind of instructions it can emit when
       generating assembly code.  This option can be used in conjunction
!      with or instead of the '-mcpu=' option.
  
!      Permissible names are: 'armv4t', 'armv5t', 'armv5te', 'armv6',
!      'armv6j', 'armv6k', 'armv6kz', 'armv6t2', 'armv6z', 'armv6zk',
!      'armv7', 'armv7-a', 'armv7ve', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
!      'armv8.3-a', 'armv8.4-a', 'armv8.5-a', 'armv8.6-a', 'armv9-a',
!      'armv7-r', 'armv8-r', 'armv6-m', 'armv6s-m', 'armv7-m', 'armv7e-m',
!      'armv8-m.base', 'armv8-m.main', 'armv8.1-m.main', 'armv9-a',
!      'iwmmxt' and 'iwmmxt2'.
  
       Additionally, the following architectures, which lack support for
       the Thumb execution state, are recognized but support is
!      deprecated: 'armv4'.
  
       Many of the architectures support extensions.  These can be added
!      by appending '+EXTENSION' to the architecture name.  Extension
       options are processed in order and capabilities accumulate.  An
       extension will also enable any necessary base extensions upon which
!      it depends.  For example, the '+crypto' extension will always
!      enable the '+simd' extension.  The exception to the additive
!      construction is for extensions that are prefixed with '+no...':
       these extensions disable the specified option and any other
       extensions that may depend on the presence of that extension.
  
!      For example, '-march=armv7-a+simd+nofp+vfpv4' is equivalent to
!      writing '-march=armv7-a+vfpv4' since the '+simd' option is entirely
!      disabled by the '+nofp' option that follows it.
  
       Most extension names are generically named, but have an effect that
       is dependent upon the architecture to which it is applied.  For
!      example, the '+simd' option can be applied to both 'armv7-a' and
!      'armv8-a' architectures, but will enable the original ARMv7-A
!      Advanced SIMD (Neon) extensions for 'armv7-a' and the ARMv8-A
!      variant for 'armv8-a'.
  
       The table below lists the supported extensions for each
       architecture.  Architectures not mentioned do not support any
       extensions.
  
!      'armv5te'
!      'armv6'
!      'armv6j'
!      'armv6k'
!      'armv6kz'
!      'armv6t2'
!      'armv6z'
!      'armv6zk'
!           '+fp'
                 The VFPv2 floating-point instructions.  The extension
!                '+vfpv2' can be used as an alias for this extension.
  
!           '+nofp'
                 Disable the floating-point instructions.
  
!      'armv7'
            The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
            architectures.
!           '+fp'
                 The VFPv3 floating-point instructions, with 16
!                double-precision registers.  The extension '+vfpv3-d16'
                 can be used as an alias for this extension.  Note that
                 floating-point is not supported by the base ARMv7-M
                 architecture, but is compatible with both the ARMv7-A and
                 ARMv7-R architectures.
  
!           '+nofp'
                 Disable the floating-point instructions.
  
!      'armv7-a'
!           '+mp'
                 The multiprocessing extension.
  
!           '+sec'
                 The security extension.
  
!           '+fp'
                 The VFPv3 floating-point instructions, with 16
!                double-precision registers.  The extension '+vfpv3-d16'
                 can be used as an alias for this extension.
  
!           '+simd'
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
!                instructions.  The extensions '+neon' and '+neon-vfpv3'
                 can be used as aliases for this extension.
  
!           '+vfpv3'
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers.
  
!           '+vfpv3-d16-fp16'
                 The VFPv3 floating-point instructions, with 16
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           '+vfpv3-fp16'
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           '+vfpv4-d16'
                 The VFPv4 floating-point instructions, with 16
                 double-precision registers.
  
!           '+vfpv4'
                 The VFPv4 floating-point instructions, with 32
                 double-precision registers.
  
!           '+neon-fp16'
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
                 instructions, with the half-precision floating-point
                 conversion operations.
  
!           '+neon-vfpv4'
                 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
                 instructions.
  
!           '+nosimd'
                 Disable the Advanced SIMD instructions (does not disable
                 floating point).
  
!           '+nofp'
                 Disable the floating-point and Advanced SIMD
                 instructions.
  
!      'armv7ve'
            The extended version of the ARMv7-A architecture with support
            for virtualization.
!           '+fp'
                 The VFPv4 floating-point instructions, with 16
!                double-precision registers.  The extension '+vfpv4-d16'
                 can be used as an alias for this extension.
  
!           '+simd'
                 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
!                instructions.  The extension '+neon-vfpv4' can be used as
                 an alias for this extension.
  
!           '+vfpv3-d16'
                 The VFPv3 floating-point instructions, with 16
                 double-precision registers.
  
!           '+vfpv3'
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers.
  
!           '+vfpv3-d16-fp16'
                 The VFPv3 floating-point instructions, with 16
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           '+vfpv3-fp16'
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           '+vfpv4-d16'
                 The VFPv4 floating-point instructions, with 16
                 double-precision registers.
  
!           '+vfpv4'
                 The VFPv4 floating-point instructions, with 32
                 double-precision registers.
  
!           '+neon'
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
!                instructions.  The extension '+neon-vfpv3' can be used as
                 an alias for this extension.
  
!           '+neon-fp16'
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
                 instructions, with the half-precision floating-point
                 conversion operations.
  
!           '+nosimd'
                 Disable the Advanced SIMD instructions (does not disable
                 floating point).
  
!           '+nofp'
                 Disable the floating-point and Advanced SIMD
                 instructions.
  
!      'armv8-a'
!           '+crc'
                 The Cyclic Redundancy Check (CRC) instructions.
!           '+simd'
                 The ARMv8-A Advanced SIMD and floating-point
                 instructions.
!           '+crypto'
                 The cryptographic instructions.
!           '+nocrypto'
                 Disable the cryptographic instructions.
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
!           '+sb'
                 Speculation Barrier Instruction.
!           '+predres'
                 Execution and Data Prediction Restriction Instructions.
  
!      'armv8.1-a'
!           '+simd'
                 The ARMv8.1-A Advanced SIMD and floating-point
                 instructions.
  
!           '+crypto'
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions.
  
!           '+nocrypto'
                 Disable the cryptographic instructions.
  
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           '+sb'
                 Speculation Barrier Instruction.
  
!           '+predres'
                 Execution and Data Prediction Restriction Instructions.
  
!      'armv8.2-a'
!      'armv8.3-a'
!           '+fp16'
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions.
  
!           '+fp16fml'
                 The half-precision floating-point fmla extension.  This
                 also enables the half-precision floating-point extension
                 and Advanced SIMD and floating-point instructions.
  
!           '+simd'
                 The ARMv8.1-A Advanced SIMD and floating-point
                 instructions.
  
!           '+crypto'
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions.
  
!           '+dotprod'
                 Enable the Dot Product extension.  This also enables
                 Advanced SIMD instructions.
  
!           '+nocrypto'
                 Disable the cryptographic extension.
  
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           '+sb'
                 Speculation Barrier Instruction.
  
!           '+predres'
                 Execution and Data Prediction Restriction Instructions.
  
!           '+i8mm'
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           '+bf16'
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      'armv8.4-a'
!           '+fp16'
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions as well as the Dot Product
                 extension and the half-precision floating-point fmla
                 extension.
  
!           '+simd'
                 The ARMv8.3-A Advanced SIMD and floating-point
                 instructions as well as the Dot Product extension.
  
!           '+crypto'
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions as well as
                 the Dot Product extension.
  
!           '+nocrypto'
                 Disable the cryptographic extension.
  
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           '+sb'
                 Speculation Barrier Instruction.
  
!           '+predres'
                 Execution and Data Prediction Restriction Instructions.
  
!           '+i8mm'
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           '+bf16'
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      'armv8.5-a'
!           '+fp16'
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions as well as the Dot Product
                 extension and the half-precision floating-point fmla
                 extension.
  
!           '+simd'
                 The ARMv8.3-A Advanced SIMD and floating-point
                 instructions as well as the Dot Product extension.
  
!           '+crypto'
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions as well as
                 the Dot Product extension.
  
!           '+nocrypto'
                 Disable the cryptographic extension.
  
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           '+i8mm'
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           '+bf16'
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      'armv8.6-a'
!           '+fp16'
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions as well as the Dot Product
                 extension and the half-precision floating-point fmla
                 extension.
  
!           '+simd'
                 The ARMv8.3-A Advanced SIMD and floating-point
                 instructions as well as the Dot Product extension.
  
!           '+crypto'
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions as well as
                 the Dot Product extension.
  
!           '+nocrypto'
                 Disable the cryptographic extension.
  
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           '+i8mm'
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           '+bf16'
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      'armv7-r'
!           '+fp.sp'
                 The single-precision VFPv3 floating-point instructions.
!                The extension '+vfpv3xd' can be used as an alias for this
                 extension.
  
!           '+fp'
                 The VFPv3 floating-point instructions with 16
                 double-precision registers.  The extension +vfpv3-d16 can
                 be used as an alias for this extension.
  
!           '+vfpv3xd-d16-fp16'
                 The single-precision VFPv3 floating-point instructions
                 with 16 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           '+vfpv3-d16-fp16'
                 The VFPv3 floating-point instructions with 16
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           '+nofp'
                 Disable the floating-point extension.
  
!           '+idiv'
                 The ARM-state integer division instructions.
  
!           '+noidiv'
                 Disable the ARM-state integer division extension.
  
!      'armv7e-m'
!           '+fp'
                 The single-precision VFPv4 floating-point instructions.
  
!           '+fpv5'
                 The single-precision FPv5 floating-point instructions.
  
!           '+fp.dp'
                 The single- and double-precision FPv5 floating-point
                 instructions.
  
!           '+nofp'
                 Disable the floating-point extensions.
  
!      'armv8.1-m.main'
  
!           '+dsp'
                 The DSP instructions.
  
!           '+mve'
                 The M-Profile Vector Extension (MVE) integer
                 instructions.
  
!           '+mve.fp'
                 The M-Profile Vector Extension (MVE) integer and single
                 precision floating-point instructions.
  
!           '+fp'
                 The single-precision floating-point instructions.
  
!           '+fp.dp'
                 The single- and double-precision floating-point
                 instructions.
  
!           '+nofp'
                 Disable the floating-point extension.
  
!           '+cdecp0, +cdecp1, ... , +cdecp7'
                 Enable the Custom Datapath Extension (CDE) on selected
                 coprocessors according to the numbers given in the
                 options in the range 0 to 7.
  
!           '+pacbti'
                 Enable the Pointer Authentication and Branch Target
                 Identification Extension.
  
!      'armv8-m.main'
!           '+dsp'
                 The DSP instructions.
  
!           '+nodsp'
                 Disable the DSP extension.
  
!           '+fp'
                 The single-precision floating-point instructions.
  
!           '+fp.dp'
                 The single- and double-precision floating-point
                 instructions.
  
!           '+nofp'
                 Disable the floating-point extension.
  
!           '+cdecp0, +cdecp1, ... , +cdecp7'
                 Enable the Custom Datapath Extension (CDE) on selected
                 coprocessors according to the numbers given in the
                 options in the range 0 to 7.
  
!      'armv8-r'
!           '+crc'
                 The Cyclic Redundancy Check (CRC) instructions.
!           '+fp.sp'
                 The single-precision FPv5 floating-point instructions.
!           '+simd'
                 The ARMv8-A Advanced SIMD and floating-point
                 instructions.
!           '+crypto'
                 The cryptographic instructions.
!           '+nocrypto'
                 Disable the cryptographic instructions.
!           '+nofp'
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!      '-march=native' causes the compiler to auto-detect the architecture
       of the build computer.  At present, this feature is only supported
       on GNU/Linux, and not all architectures are recognized.  If the
       auto-detect is unsuccessful the option has no effect.
  
! '-mtune=NAME'
       This option specifies the name of the target ARM processor for
       which GCC should tune the performance of the code.  For some ARM
       implementations better performance can be obtained by using this
!      option.  Permissible names are: 'arm7tdmi', 'arm7tdmi-s',
!      'arm710t', 'arm720t', 'arm740t', 'strongarm', 'strongarm110',
!      'strongarm1100', 'strongarm1110', 'arm8', 'arm810', 'arm9',
!      'arm9e', 'arm920', 'arm920t', 'arm922t', 'arm946e-s', 'arm966e-s',
!      'arm968e-s', 'arm926ej-s', 'arm940t', 'arm9tdmi', 'arm10tdmi',
!      'arm1020t', 'arm1026ej-s', 'arm10e', 'arm1020e', 'arm1022e',
!      'arm1136j-s', 'arm1136jf-s', 'mpcore', 'mpcorenovfp',
!      'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s',
!      'generic-armv7-a', 'cortex-a5', 'cortex-a7', 'cortex-a8',
!      'cortex-a9', 'cortex-a12', 'cortex-a15', 'cortex-a17',
!      'cortex-a32', 'cortex-a35', 'cortex-a53', 'cortex-a55',
!      'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
!      'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'cortex-a78',
!      'cortex-a78ae', 'cortex-a78c', 'cortex-a710', 'ares', 'cortex-r4',
!      'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8', 'cortex-r52',
!      'cortex-r52plus', 'cortex-m0', 'cortex-m0plus', 'cortex-m1',
!      'cortex-m3', 'cortex-m4', 'cortex-m7', 'cortex-m23', 'cortex-m33',
!      'cortex-m35p', 'cortex-m52', 'cortex-m55', 'cortex-m85',
!      'cortex-x1', 'cortex-x1c', 'cortex-m1.small-multiply',
!      'cortex-m0.small-multiply', 'cortex-m0plus.small-multiply',
!      'exynos-m1', 'marvell-pj4', 'neoverse-n1', 'neoverse-n2',
!      'neoverse-v1', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526',
!      'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te', 'star-mc1',
!      'xgene1'.
  
       Additionally, this option can specify that GCC should tune the
       performance of the code for a big.LITTLE system.  Permissible names
!      are: 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
!      'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
!      'cortex-a72.cortex-a35', 'cortex-a73.cortex-a53',
!      'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55'.
  
!      '-mtune=generic-ARCH' specifies that GCC should tune the
       performance for a blend of processors within architecture ARCH.
       The aim is to generate code that run well on the current most
       popular processors, balancing between optimizations that benefit
--- 21339,21876 ----
       BE8, for older architectures the default is BE32.  BE32 format has
       been deprecated by ARM.
  
! ‘-march=NAME[+extension...]’
       This specifies the name of the target ARM architecture.  GCC uses
       this name to determine what kind of instructions it can emit when
       generating assembly code.  This option can be used in conjunction
!      with or instead of the ‘-mcpu=’ option.
  
!      Permissible names are: ‘armv4t’, ‘armv5t’, ‘armv5te’, ‘armv6’,
!      ‘armv6j’, ‘armv6k’, ‘armv6kz’, ‘armv6t2’, ‘armv6z’, ‘armv6zk’,
!      ‘armv7’, ‘armv7-a’, ‘armv7ve’, ‘armv8-a’, ‘armv8.1-a’, ‘armv8.2-a’,
!      ‘armv8.3-a’, ‘armv8.4-a’, ‘armv8.5-a’, ‘armv8.6-a’, ‘armv9-a’,
!      ‘armv7-r’, ‘armv8-r’, ‘armv6-m’, ‘armv6s-m’, ‘armv7-m’, ‘armv7e-m’,
!      ‘armv8-m.base’, ‘armv8-m.main’, ‘armv8.1-m.main’, ‘armv9-a’,
!      ‘iwmmxt’ and ‘iwmmxt2’.
  
       Additionally, the following architectures, which lack support for
       the Thumb execution state, are recognized but support is
!      deprecated: ‘armv4’.
  
       Many of the architectures support extensions.  These can be added
!      by appending ‘+EXTENSION’ to the architecture name.  Extension
       options are processed in order and capabilities accumulate.  An
       extension will also enable any necessary base extensions upon which
!      it depends.  For example, the ‘+crypto’ extension will always
!      enable the ‘+simd’ extension.  The exception to the additive
!      construction is for extensions that are prefixed with ‘+no...’:
       these extensions disable the specified option and any other
       extensions that may depend on the presence of that extension.
  
!      For example, ‘-march=armv7-a+simd+nofp+vfpv4’ is equivalent to
!      writing ‘-march=armv7-a+vfpv4’ since the ‘+simd’ option is entirely
!      disabled by the ‘+nofp’ option that follows it.
  
       Most extension names are generically named, but have an effect that
       is dependent upon the architecture to which it is applied.  For
!      example, the ‘+simd’ option can be applied to both ‘armv7-a’ and
!      ‘armv8-a’ architectures, but will enable the original ARMv7-A
!      Advanced SIMD (Neon) extensions for ‘armv7-a’ and the ARMv8-A
!      variant for ‘armv8-a’.
  
       The table below lists the supported extensions for each
       architecture.  Architectures not mentioned do not support any
       extensions.
  
!      ‘armv5te’
!      ‘armv6’
!      ‘armv6j’
!      ‘armv6k’
!      ‘armv6kz’
!      ‘armv6t2’
!      ‘armv6z’
!      ‘armv6zk’
!           ‘+fp’
                 The VFPv2 floating-point instructions.  The extension
!                ‘+vfpv2’ can be used as an alias for this extension.
  
!           ‘+nofp’
                 Disable the floating-point instructions.
  
!      ‘armv7’
            The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
            architectures.
!           ‘+fp’
                 The VFPv3 floating-point instructions, with 16
!                double-precision registers.  The extension ‘+vfpv3-d16’
                 can be used as an alias for this extension.  Note that
                 floating-point is not supported by the base ARMv7-M
                 architecture, but is compatible with both the ARMv7-A and
                 ARMv7-R architectures.
  
!           ‘+nofp’
                 Disable the floating-point instructions.
  
!      ‘armv7-a’
!           ‘+mp’
                 The multiprocessing extension.
  
!           ‘+sec’
                 The security extension.
  
!           ‘+fp’
                 The VFPv3 floating-point instructions, with 16
!                double-precision registers.  The extension ‘+vfpv3-d16’
                 can be used as an alias for this extension.
  
!           ‘+simd’
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
!                instructions.  The extensions ‘+neon’ and ‘+neon-vfpv3’
                 can be used as aliases for this extension.
  
!           ‘+vfpv3’
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers.
  
!           ‘+vfpv3-d16-fp16’
                 The VFPv3 floating-point instructions, with 16
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           ‘+vfpv3-fp16’
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           ‘+vfpv4-d16’
                 The VFPv4 floating-point instructions, with 16
                 double-precision registers.
  
!           ‘+vfpv4’
                 The VFPv4 floating-point instructions, with 32
                 double-precision registers.
  
!           ‘+neon-fp16’
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
                 instructions, with the half-precision floating-point
                 conversion operations.
  
!           ‘+neon-vfpv4’
                 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
                 instructions.
  
!           ‘+nosimd’
                 Disable the Advanced SIMD instructions (does not disable
                 floating point).
  
!           ‘+nofp’
                 Disable the floating-point and Advanced SIMD
                 instructions.
  
!      ‘armv7ve’
            The extended version of the ARMv7-A architecture with support
            for virtualization.
!           ‘+fp’
                 The VFPv4 floating-point instructions, with 16
!                double-precision registers.  The extension ‘+vfpv4-d16’
                 can be used as an alias for this extension.
  
!           ‘+simd’
                 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
!                instructions.  The extension ‘+neon-vfpv4’ can be used as
                 an alias for this extension.
  
!           ‘+vfpv3-d16’
                 The VFPv3 floating-point instructions, with 16
                 double-precision registers.
  
!           ‘+vfpv3’
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers.
  
!           ‘+vfpv3-d16-fp16’
                 The VFPv3 floating-point instructions, with 16
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           ‘+vfpv3-fp16’
                 The VFPv3 floating-point instructions, with 32
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           ‘+vfpv4-d16’
                 The VFPv4 floating-point instructions, with 16
                 double-precision registers.
  
!           ‘+vfpv4’
                 The VFPv4 floating-point instructions, with 32
                 double-precision registers.
  
!           ‘+neon’
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
!                instructions.  The extension ‘+neon-vfpv3’ can be used as
                 an alias for this extension.
  
!           ‘+neon-fp16’
                 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
                 instructions, with the half-precision floating-point
                 conversion operations.
  
!           ‘+nosimd’
                 Disable the Advanced SIMD instructions (does not disable
                 floating point).
  
!           ‘+nofp’
                 Disable the floating-point and Advanced SIMD
                 instructions.
  
!      ‘armv8-a’
!           ‘+crc’
                 The Cyclic Redundancy Check (CRC) instructions.
!           ‘+simd’
                 The ARMv8-A Advanced SIMD and floating-point
                 instructions.
!           ‘+crypto’
                 The cryptographic instructions.
!           ‘+nocrypto’
                 Disable the cryptographic instructions.
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
!           ‘+sb’
                 Speculation Barrier Instruction.
!           ‘+predres’
                 Execution and Data Prediction Restriction Instructions.
  
!      ‘armv8.1-a’
!           ‘+simd’
                 The ARMv8.1-A Advanced SIMD and floating-point
                 instructions.
  
!           ‘+crypto’
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions.
  
!           ‘+nocrypto’
                 Disable the cryptographic instructions.
  
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           ‘+sb’
                 Speculation Barrier Instruction.
  
!           ‘+predres’
                 Execution and Data Prediction Restriction Instructions.
  
!      ‘armv8.2-a’
!      ‘armv8.3-a’
!           ‘+fp16’
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions.
  
!           ‘+fp16fml’
                 The half-precision floating-point fmla extension.  This
                 also enables the half-precision floating-point extension
                 and Advanced SIMD and floating-point instructions.
  
!           ‘+simd’
                 The ARMv8.1-A Advanced SIMD and floating-point
                 instructions.
  
!           ‘+crypto’
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions.
  
!           ‘+dotprod’
                 Enable the Dot Product extension.  This also enables
                 Advanced SIMD instructions.
  
!           ‘+nocrypto’
                 Disable the cryptographic extension.
  
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           ‘+sb’
                 Speculation Barrier Instruction.
  
!           ‘+predres’
                 Execution and Data Prediction Restriction Instructions.
  
!           ‘+i8mm’
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           ‘+bf16’
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      ‘armv8.4-a’
!           ‘+fp16’
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions as well as the Dot Product
                 extension and the half-precision floating-point fmla
                 extension.
  
!           ‘+simd’
                 The ARMv8.3-A Advanced SIMD and floating-point
                 instructions as well as the Dot Product extension.
  
!           ‘+crypto’
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions as well as
                 the Dot Product extension.
  
!           ‘+nocrypto’
                 Disable the cryptographic extension.
  
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           ‘+sb’
                 Speculation Barrier Instruction.
  
!           ‘+predres’
                 Execution and Data Prediction Restriction Instructions.
  
!           ‘+i8mm’
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           ‘+bf16’
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      ‘armv8.5-a’
!           ‘+fp16’
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions as well as the Dot Product
                 extension and the half-precision floating-point fmla
                 extension.
  
!           ‘+simd’
                 The ARMv8.3-A Advanced SIMD and floating-point
                 instructions as well as the Dot Product extension.
  
!           ‘+crypto’
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions as well as
                 the Dot Product extension.
  
!           ‘+nocrypto’
                 Disable the cryptographic extension.
  
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           ‘+i8mm’
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           ‘+bf16’
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      ‘armv8.6-a’
!           ‘+fp16’
                 The half-precision floating-point data processing
                 instructions.  This also enables the Advanced SIMD and
                 floating-point instructions as well as the Dot Product
                 extension and the half-precision floating-point fmla
                 extension.
  
!           ‘+simd’
                 The ARMv8.3-A Advanced SIMD and floating-point
                 instructions as well as the Dot Product extension.
  
!           ‘+crypto’
                 The cryptographic instructions.  This also enables the
                 Advanced SIMD and floating-point instructions as well as
                 the Dot Product extension.
  
!           ‘+nocrypto’
                 Disable the cryptographic extension.
  
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!           ‘+i8mm’
                 8-bit Integer Matrix Multiply instructions.  This also
                 enables Advanced SIMD and floating-point instructions.
  
!           ‘+bf16’
                 Brain half-precision floating-point instructions.  This
                 also enables Advanced SIMD and floating-point
                 instructions.
  
!      ‘armv7-r’
!           ‘+fp.sp’
                 The single-precision VFPv3 floating-point instructions.
!                The extension ‘+vfpv3xd’ can be used as an alias for this
                 extension.
  
!           ‘+fp’
                 The VFPv3 floating-point instructions with 16
                 double-precision registers.  The extension +vfpv3-d16 can
                 be used as an alias for this extension.
  
!           ‘+vfpv3xd-d16-fp16’
                 The single-precision VFPv3 floating-point instructions
                 with 16 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           ‘+vfpv3-d16-fp16’
                 The VFPv3 floating-point instructions with 16
                 double-precision registers and the half-precision
                 floating-point conversion operations.
  
!           ‘+nofp’
                 Disable the floating-point extension.
  
!           ‘+idiv’
                 The ARM-state integer division instructions.
  
!           ‘+noidiv’
                 Disable the ARM-state integer division extension.
  
!      ‘armv7e-m’
!           ‘+fp’
                 The single-precision VFPv4 floating-point instructions.
  
!           ‘+fpv5’
                 The single-precision FPv5 floating-point instructions.
  
!           ‘+fp.dp’
                 The single- and double-precision FPv5 floating-point
                 instructions.
  
!           ‘+nofp’
                 Disable the floating-point extensions.
  
!      ‘armv8.1-m.main’
  
!           ‘+dsp’
                 The DSP instructions.
  
!           ‘+mve’
                 The M-Profile Vector Extension (MVE) integer
                 instructions.
  
!           ‘+mve.fp’
                 The M-Profile Vector Extension (MVE) integer and single
                 precision floating-point instructions.
  
!           ‘+fp’
                 The single-precision floating-point instructions.
  
!           ‘+fp.dp’
                 The single- and double-precision floating-point
                 instructions.
  
!           ‘+nofp’
                 Disable the floating-point extension.
  
!           ‘+cdecp0, +cdecp1, ... , +cdecp7’
                 Enable the Custom Datapath Extension (CDE) on selected
                 coprocessors according to the numbers given in the
                 options in the range 0 to 7.
  
!           ‘+pacbti’
                 Enable the Pointer Authentication and Branch Target
                 Identification Extension.
  
!      ‘armv8-m.main’
!           ‘+dsp’
                 The DSP instructions.
  
!           ‘+nodsp’
                 Disable the DSP extension.
  
!           ‘+fp’
                 The single-precision floating-point instructions.
  
!           ‘+fp.dp’
                 The single- and double-precision floating-point
                 instructions.
  
!           ‘+nofp’
                 Disable the floating-point extension.
  
!           ‘+cdecp0, +cdecp1, ... , +cdecp7’
                 Enable the Custom Datapath Extension (CDE) on selected
                 coprocessors according to the numbers given in the
                 options in the range 0 to 7.
  
!      ‘armv8-r’
!           ‘+crc’
                 The Cyclic Redundancy Check (CRC) instructions.
!           ‘+fp.sp’
                 The single-precision FPv5 floating-point instructions.
!           ‘+simd’
                 The ARMv8-A Advanced SIMD and floating-point
                 instructions.
!           ‘+crypto’
                 The cryptographic instructions.
!           ‘+nocrypto’
                 Disable the cryptographic instructions.
!           ‘+nofp’
                 Disable the floating-point, Advanced SIMD and
                 cryptographic instructions.
  
!      ‘-march=native’ causes the compiler to auto-detect the architecture
       of the build computer.  At present, this feature is only supported
       on GNU/Linux, and not all architectures are recognized.  If the
       auto-detect is unsuccessful the option has no effect.
  
! ‘-mtune=NAME’
       This option specifies the name of the target ARM processor for
       which GCC should tune the performance of the code.  For some ARM
       implementations better performance can be obtained by using this
!      option.  Permissible names are: ‘arm7tdmi’, ‘arm7tdmi-s’,
!      ‘arm710t’, ‘arm720t’, ‘arm740t’, ‘strongarm’, ‘strongarm110’,
!      ‘strongarm1100’, ‘strongarm1110’, ‘arm8’, ‘arm810’, ‘arm9’,
!      ‘arm9e’, ‘arm920’, ‘arm920t’, ‘arm922t’, ‘arm946e-s’, ‘arm966e-s’,
!      ‘arm968e-s’, ‘arm926ej-s’, ‘arm940t’, ‘arm9tdmi’, ‘arm10tdmi’,
!      ‘arm1020t’, ‘arm1026ej-s’, ‘arm10e’, ‘arm1020e’, ‘arm1022e’,
!      ‘arm1136j-s’, ‘arm1136jf-s’, ‘mpcore’, ‘mpcorenovfp’,
!      ‘arm1156t2-s’, ‘arm1156t2f-s’, ‘arm1176jz-s’, ‘arm1176jzf-s’,
!      ‘generic-armv7-a’, ‘cortex-a5’, ‘cortex-a7’, ‘cortex-a8’,
!      ‘cortex-a9’, ‘cortex-a12’, ‘cortex-a15’, ‘cortex-a17’,
!      ‘cortex-a32’, ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a55’,
!      ‘cortex-a57’, ‘cortex-a72’, ‘cortex-a73’, ‘cortex-a75’,
!      ‘cortex-a76’, ‘cortex-a76ae’, ‘cortex-a77’, ‘cortex-a78’,
!      ‘cortex-a78ae’, ‘cortex-a78c’, ‘cortex-a710’, ‘ares’, ‘cortex-r4’,
!      ‘cortex-r4f’, ‘cortex-r5’, ‘cortex-r7’, ‘cortex-r8’, ‘cortex-r52’,
!      ‘cortex-r52plus’, ‘cortex-m0’, ‘cortex-m0plus’, ‘cortex-m1’,
!      ‘cortex-m3’, ‘cortex-m4’, ‘cortex-m7’, ‘cortex-m23’, ‘cortex-m33’,
!      ‘cortex-m35p’, ‘cortex-m52’, ‘cortex-m55’, ‘cortex-m85’,
!      ‘cortex-x1’, ‘cortex-x1c’, ‘cortex-m1.small-multiply’,
!      ‘cortex-m0.small-multiply’, ‘cortex-m0plus.small-multiply’,
!      ‘exynos-m1’, ‘marvell-pj4’, ‘neoverse-n1’, ‘neoverse-n2’,
!      ‘neoverse-v1’, ‘xscale’, ‘iwmmxt’, ‘iwmmxt2’, ‘ep9312’, ‘fa526’,
!      ‘fa626’, ‘fa606te’, ‘fa626te’, ‘fmp626’, ‘fa726te’, ‘star-mc1’,
!      ‘xgene1’.
  
       Additionally, this option can specify that GCC should tune the
       performance of the code for a big.LITTLE system.  Permissible names
!      are: ‘cortex-a15.cortex-a7’, ‘cortex-a17.cortex-a7’,
!      ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’,
!      ‘cortex-a72.cortex-a35’, ‘cortex-a73.cortex-a53’,
!      ‘cortex-a75.cortex-a55’, ‘cortex-a76.cortex-a55’.
  
!      ‘-mtune=generic-ARCH’ specifies that GCC should tune the
       performance for a blend of processors within architecture ARCH.
       The aim is to generate code that run well on the current most
       popular processors, balancing between optimizations that benefit
*************** These '-m' options are defined for the A
*** 21874,21893 ****
       CPUs.  The effects of this option may change in future GCC versions
       as CPU models come and go.
  
!      '-mtune' permits the same extension options as '-mcpu', but the
       extension options do not affect the tuning of the generated code.
  
!      '-mtune=native' causes the compiler to auto-detect the CPU of the
       build computer.  At present, this feature is only supported on
       GNU/Linux, and not all architectures are recognized.  If the
       auto-detect is unsuccessful the option has no effect.
  
! '-mcpu=NAME[+extension...]'
       This specifies the name of the target ARM processor.  GCC uses this
       name to derive the name of the target ARM architecture (as if
!      specified by '-march') and the ARM processor type for which to tune
!      for performance (as if specified by '-mtune').  Where this option
!      is used in conjunction with '-march' or '-mtune', those options
       take precedence over the appropriate part of this option.
  
       Many of the supported CPUs implement optional architectural
--- 21878,21897 ----
       CPUs.  The effects of this option may change in future GCC versions
       as CPU models come and go.
  
!      ‘-mtune’ permits the same extension options as ‘-mcpu’, but the
       extension options do not affect the tuning of the generated code.
  
!      ‘-mtune=native’ causes the compiler to auto-detect the CPU of the
       build computer.  At present, this feature is only supported on
       GNU/Linux, and not all architectures are recognized.  If the
       auto-detect is unsuccessful the option has no effect.
  
! ‘-mcpu=NAME[+extension...]’
       This specifies the name of the target ARM processor.  GCC uses this
       name to derive the name of the target ARM architecture (as if
!      specified by ‘-march’) and the ARM processor type for which to tune
!      for performance (as if specified by ‘-mtune’).  Where this option
!      is used in conjunction with ‘-march’ or ‘-mtune’, those options
       take precedence over the appropriate part of this option.
  
       Many of the supported CPUs implement optional architectural
*************** These '-m' options are defined for the A
*** 21896,22025 ****
       extension exist, then the extension syntax can be used to disable
       those extensions that have been omitted.  For floating-point and
       Advanced SIMD (Neon) instructions, the settings of the options
!      '-mfloat-abi' and '-mfpu' must also be considered: floating-point
!      and Advanced SIMD instructions will only be used if '-mfloat-abi'
!      is not set to 'soft'; and any setting of '-mfpu' other than 'auto'
       will override the available floating-point and SIMD extension
       instructions.
  
!      For example, 'cortex-a9' can be found in three major
       configurations: integer only, with just a floating-point unit or
       with floating-point and Advanced SIMD. The default is to enable all
!      the instructions, but the extensions '+nosimd' and '+nofp' can be
       used to disable just the SIMD or both the SIMD and floating-point
       instructions respectively.
  
       Permissible names for this option are the same as those for
!      '-mtune'.
  
       The following extension options are common to the listed CPUs:
  
!      '+nodsp'
!           Disable the DSP instructions on 'cortex-m33', 'cortex-m35p',
!           'cortex-m52', 'cortex-m55' and 'cortex-m85'.  Also disable the
            M-Profile Vector Extension (MVE) integer and single precision
!           floating-point instructions on 'cortex-m52', 'cortex-m55' and
!           'cortex-m85'.
  
!      '+nopacbti'
            Disable the Pointer Authentication and Branch Target
!           Identification Extension on 'cortex-m52' and 'cortex-m85'.
  
!      '+nomve'
            Disable the M-Profile Vector Extension (MVE) integer and
!           single precision floating-point instructions on 'cortex-m52',
!           'cortex-m55' and 'cortex-m85'.
  
!      '+nomve.fp'
            Disable the M-Profile Vector Extension (MVE) single precision
!           floating-point instructions on 'cortex-m52', 'cortex-m55' and
!           'cortex-m85'.
  
!      '+cdecp0, +cdecp1, ... , +cdecp7'
            Enable the Custom Datapath Extension (CDE) on selected
            coprocessors according to the numbers given in the options in
!           the range 0 to 7 on 'cortex-m52' and 'cortex-m55'.
  
!      '+nofp'
!           Disables the floating-point instructions on 'arm9e',
!           'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm10e', 'arm1020e',
!           'arm1022e', 'arm926ej-s', 'arm1026ej-s', 'cortex-r5',
!           'cortex-r7', 'cortex-r8', 'cortex-m4', 'cortex-m7',
!           'cortex-m33', 'cortex-m35p', 'cortex-m52', 'cortex-m55' and
!           'cortex-m85'.  Disables the floating-point and SIMD
!           instructions on 'generic-armv7-a', 'cortex-a5', 'cortex-a7',
!           'cortex-a8', 'cortex-a9', 'cortex-a12', 'cortex-a15',
!           'cortex-a17', 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
!           'cortex-a32', 'cortex-a35', 'cortex-a53' and 'cortex-a55'.
  
!      '+nofp.dp'
            Disables the double-precision component of the floating-point
!           instructions on 'cortex-r5', 'cortex-r7', 'cortex-r8',
!           'cortex-r52', 'cortex-r52plus' and 'cortex-m7'.
  
!      '+nosimd'
            Disables the SIMD (but not floating-point) instructions on
!           'generic-armv7-a', 'cortex-a5', 'cortex-a7' and 'cortex-a9'.
  
!      '+crypto'
!           Enables the cryptographic instructions on 'cortex-a32',
!           'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
!           'cortex-a72', 'cortex-a73', 'cortex-a75', 'exynos-m1',
!           'xgene1', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
!           'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53' and
!           'cortex-a75.cortex-a55'.
  
!      Additionally the 'generic-armv7-a' pseudo target defaults to VFPv3
       with 16 double-precision registers.  It supports the following
!      extension options: 'mp', 'sec', 'vfpv3-d16', 'vfpv3',
!      'vfpv3-d16-fp16', 'vfpv3-fp16', 'vfpv4-d16', 'vfpv4', 'neon',
!      'neon-vfpv3', 'neon-fp16', 'neon-vfpv4'.  The meanings are the same
!      as for the extensions to '-march=armv7-a'.
  
!      '-mcpu=generic-ARCH' is also permissible, and is equivalent to
!      '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
       information.
  
!      '-mcpu=native' causes the compiler to auto-detect the CPU of the
       build computer.  At present, this feature is only supported on
       GNU/Linux, and not all architectures are recognized.  If the
       auto-detect is unsuccessful the option has no effect.
  
! '-mfpu=NAME'
       This specifies what floating-point hardware (or hardware emulation)
!      is available on the target.  Permissible names are: 'auto',
!      'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16',
!      'vfpv3xd', 'vfpv3xd-fp16', 'neon-vfpv3', 'neon-fp16', 'vfpv4',
!      'vfpv4-d16', 'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16',
!      'fpv5-sp-d16', 'fp-armv8', 'neon-fp-armv8' and
!      'crypto-neon-fp-armv8'.  Note that 'neon' is an alias for
!      'neon-vfpv3' and 'vfp' is an alias for 'vfpv2'.
  
!      The setting 'auto' is the default and is special.  It causes the
       compiler to select the floating-point and Advanced SIMD
!      instructions based on the settings of '-mcpu' and '-march'.
  
       If the selected floating-point hardware includes the NEON extension
!      (e.g. '-mfpu=neon'), note that floating-point operations are not
       generated by GCC's auto-vectorization pass unless
!      '-funsafe-math-optimizations' is also specified.  This is because
       NEON hardware does not fully implement the IEEE 754 standard for
       floating-point arithmetic (in particular denormal values are
       treated as zero), so the use of NEON instructions may lead to a
       loss of precision.
  
       You can also set the fpu name at function level by using the
!      'target("fpu=")' function attributes (*note ARM Function
       Attributes::) or pragmas (*note Function Specific Option
       Pragmas::).
  
! '-mfp16-format=NAME'
!      Specify the format of the '__fp16' half-precision floating-point
!      type.  Permissible names are 'none', 'ieee', and 'alternative'; the
!      default is 'none', in which case the '__fp16' type is not defined.
       *Note Half-Precision::, for more information.
  
! '-mstructure-size-boundary=N'
       The sizes of all structures and unions are rounded up to a multiple
       of the number of bits set by this option.  Permissible values are
       8, 32 and 64.  The default value varies for different toolchains.
--- 21900,22029 ----
       extension exist, then the extension syntax can be used to disable
       those extensions that have been omitted.  For floating-point and
       Advanced SIMD (Neon) instructions, the settings of the options
!      ‘-mfloat-abi’ and ‘-mfpu’ must also be considered: floating-point
!      and Advanced SIMD instructions will only be used if ‘-mfloat-abi’
!      is not set to ‘soft’; and any setting of ‘-mfpu’ other than ‘auto’
       will override the available floating-point and SIMD extension
       instructions.
  
!      For example, ‘cortex-a9’ can be found in three major
       configurations: integer only, with just a floating-point unit or
       with floating-point and Advanced SIMD. The default is to enable all
!      the instructions, but the extensions ‘+nosimd’ and ‘+nofp’ can be
       used to disable just the SIMD or both the SIMD and floating-point
       instructions respectively.
  
       Permissible names for this option are the same as those for
!      ‘-mtune’.
  
       The following extension options are common to the listed CPUs:
  
!      ‘+nodsp’
!           Disable the DSP instructions on ‘cortex-m33’, ‘cortex-m35p’,
!           ‘cortex-m52’, ‘cortex-m55’ and ‘cortex-m85’.  Also disable the
            M-Profile Vector Extension (MVE) integer and single precision
!           floating-point instructions on ‘cortex-m52’, ‘cortex-m55’ and
!           ‘cortex-m85’.
  
!      ‘+nopacbti’
            Disable the Pointer Authentication and Branch Target
!           Identification Extension on ‘cortex-m52’ and ‘cortex-m85’.
  
!      ‘+nomve’
            Disable the M-Profile Vector Extension (MVE) integer and
!           single precision floating-point instructions on ‘cortex-m52’,
!           ‘cortex-m55’ and ‘cortex-m85’.
  
!      ‘+nomve.fp’
            Disable the M-Profile Vector Extension (MVE) single precision
!           floating-point instructions on ‘cortex-m52’, ‘cortex-m55’ and
!           ‘cortex-m85’.
  
!      ‘+cdecp0, +cdecp1, ... , +cdecp7’
            Enable the Custom Datapath Extension (CDE) on selected
            coprocessors according to the numbers given in the options in
!           the range 0 to 7 on ‘cortex-m52’ and ‘cortex-m55’.
  
!      ‘+nofp’
!           Disables the floating-point instructions on ‘arm9e’,
!           ‘arm946e-s’, ‘arm966e-s’, ‘arm968e-s’, ‘arm10e’, ‘arm1020e’,
!           ‘arm1022e’, ‘arm926ej-s’, ‘arm1026ej-s’, ‘cortex-r5’,
!           ‘cortex-r7’, ‘cortex-r8’, ‘cortex-m4’, ‘cortex-m7’,
!           ‘cortex-m33’, ‘cortex-m35p’, ‘cortex-m52’, ‘cortex-m55’ and
!           ‘cortex-m85’.  Disables the floating-point and SIMD
!           instructions on ‘generic-armv7-a’, ‘cortex-a5’, ‘cortex-a7’,
!           ‘cortex-a8’, ‘cortex-a9’, ‘cortex-a12’, ‘cortex-a15’,
!           ‘cortex-a17’, ‘cortex-a15.cortex-a7’, ‘cortex-a17.cortex-a7’,
!           ‘cortex-a32’, ‘cortex-a35’, ‘cortex-a53’ and ‘cortex-a55’.
  
!      ‘+nofp.dp’
            Disables the double-precision component of the floating-point
!           instructions on ‘cortex-r5’, ‘cortex-r7’, ‘cortex-r8’,
!           ‘cortex-r52’, ‘cortex-r52plus’ and ‘cortex-m7’.
  
!      ‘+nosimd’
            Disables the SIMD (but not floating-point) instructions on
!           ‘generic-armv7-a’, ‘cortex-a5’, ‘cortex-a7’ and ‘cortex-a9’.
  
!      ‘+crypto’
!           Enables the cryptographic instructions on ‘cortex-a32’,
!           ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a55’, ‘cortex-a57’,
!           ‘cortex-a72’, ‘cortex-a73’, ‘cortex-a75’, ‘exynos-m1’,
!           ‘xgene1’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’,
!           ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’ and
!           ‘cortex-a75.cortex-a55’.
  
!      Additionally the ‘generic-armv7-a’ pseudo target defaults to VFPv3
       with 16 double-precision registers.  It supports the following
!      extension options: ‘mp’, ‘sec’, ‘vfpv3-d16’, ‘vfpv3’,
!      ‘vfpv3-d16-fp16’, ‘vfpv3-fp16’, ‘vfpv4-d16’, ‘vfpv4’, ‘neon’,
!      ‘neon-vfpv3’, ‘neon-fp16’, ‘neon-vfpv4’.  The meanings are the same
!      as for the extensions to ‘-march=armv7-a’.
  
!      ‘-mcpu=generic-ARCH’ is also permissible, and is equivalent to
!      ‘-march=ARCH -mtune=generic-ARCH’.  See ‘-mtune’ for more
       information.
  
!      ‘-mcpu=native’ causes the compiler to auto-detect the CPU of the
       build computer.  At present, this feature is only supported on
       GNU/Linux, and not all architectures are recognized.  If the
       auto-detect is unsuccessful the option has no effect.
  
! ‘-mfpu=NAME’
       This specifies what floating-point hardware (or hardware emulation)
!      is available on the target.  Permissible names are: ‘auto’,
!      ‘vfpv2’, ‘vfpv3’, ‘vfpv3-fp16’, ‘vfpv3-d16’, ‘vfpv3-d16-fp16’,
!      ‘vfpv3xd’, ‘vfpv3xd-fp16’, ‘neon-vfpv3’, ‘neon-fp16’, ‘vfpv4’,
!      ‘vfpv4-d16’, ‘fpv4-sp-d16’, ‘neon-vfpv4’, ‘fpv5-d16’,
!      ‘fpv5-sp-d16’, ‘fp-armv8’, ‘neon-fp-armv8’ and
!      ‘crypto-neon-fp-armv8’.  Note that ‘neon’ is an alias for
!      ‘neon-vfpv3’ and ‘vfp’ is an alias for ‘vfpv2’.
  
!      The setting ‘auto’ is the default and is special.  It causes the
       compiler to select the floating-point and Advanced SIMD
!      instructions based on the settings of ‘-mcpu’ and ‘-march’.
  
       If the selected floating-point hardware includes the NEON extension
!      (e.g. ‘-mfpu=neon’), note that floating-point operations are not
       generated by GCC's auto-vectorization pass unless
!      ‘-funsafe-math-optimizations’ is also specified.  This is because
       NEON hardware does not fully implement the IEEE 754 standard for
       floating-point arithmetic (in particular denormal values are
       treated as zero), so the use of NEON instructions may lead to a
       loss of precision.
  
       You can also set the fpu name at function level by using the
!      ‘target("fpu=")’ function attributes (*note ARM Function
       Attributes::) or pragmas (*note Function Specific Option
       Pragmas::).
  
! ‘-mfp16-format=NAME’
!      Specify the format of the ‘__fp16’ half-precision floating-point
!      type.  Permissible names are ‘none’, ‘ieee’, and ‘alternative’; the
!      default is ‘none’, in which case the ‘__fp16’ type is not defined.
       *Note Half-Precision::, for more information.
  
! ‘-mstructure-size-boundary=N’
       The sizes of all structures and unions are rounded up to a multiple
       of the number of bits set by this option.  Permissible values are
       8, 32 and 64.  The default value varies for different toolchains.
*************** These '-m' options are defined for the A
*** 22035,22046 ****
  
       This option is deprecated.
  
! '-mabort-on-noreturn'
!      Generate a call to the function 'abort' at the end of a 'noreturn'
       function.  It is executed if the function tries to return.
  
! '-mlong-calls'
! '-mno-long-calls'
       Tells the compiler to perform function calls by first loading the
       address of the function into a register and then performing a
       subroutine call on this register.  This switch is needed if the
--- 22039,22050 ----
  
       This option is deprecated.
  
! ‘-mabort-on-noreturn’
!      Generate a call to the function ‘abort’ at the end of a ‘noreturn’
       function.  It is executed if the function tries to return.
  
! ‘-mlong-calls’
! ‘-mno-long-calls’
       Tells the compiler to perform function calls by first loading the
       address of the function into a register and then performing a
       subroutine call on this register.  This switch is needed if the
*************** These '-m' options are defined for the A
*** 22049,22091 ****
  
       Even if this switch is enabled, not all function calls are turned
       into long calls.  The heuristic is that static functions, functions
!      that have the 'short_call' attribute, functions that are inside the
!      scope of a '#pragma no_long_calls' directive, and functions whose
       definitions have already been compiled within the current
       compilation unit are not turned into long calls.  The exceptions to
       this rule are that weak function definitions, functions with the
!      'long_call' attribute or the 'section' attribute, and functions
!      that are within the scope of a '#pragma long_calls' directive are
       always turned into long calls.
  
       This feature is not enabled by default.  Specifying
!      '-mno-long-calls' restores the default behavior, as does placing
!      the function calls within the scope of a '#pragma long_calls_off'
       directive.  Note these switches have no effect on how the compiler
       generates code to handle function calls via function pointers.
  
! '-msingle-pic-base'
       Treat the register used for PIC addressing as read-only, rather
       than loading it in the prologue for each function.  The runtime
       system is responsible for initializing this register with an
       appropriate value before execution begins.
  
! '-mpic-register=REG'
       Specify the register to be used for PIC addressing.  For standard
       PIC base case, the default is any suitable register determined by
!      compiler.  For single PIC base case, the default is 'R9' if target
       is EABI based or stack-checking is enabled, otherwise the default
!      is 'R10'.
  
! '-mpic-data-is-text-relative'
       Assume that the displacement between the text and data segments is
       fixed at static link time.  This permits using PC-relative
       addressing operations to access data known to be in the data
       segment.  For non-VxWorks RTP targets, this option is enabled by
       default.  When disabled on such targets, it will enable
!      '-msingle-pic-base' by default.
  
! '-mpoke-function-name'
       Write the name of each function into the text section, directly
       preceding the function prologue.  The generated code is similar to
       this:
--- 22053,22095 ----
  
       Even if this switch is enabled, not all function calls are turned
       into long calls.  The heuristic is that static functions, functions
!      that have the ‘short_call’ attribute, functions that are inside the
!      scope of a ‘#pragma no_long_calls’ directive, and functions whose
       definitions have already been compiled within the current
       compilation unit are not turned into long calls.  The exceptions to
       this rule are that weak function definitions, functions with the
!      ‘long_call’ attribute or the ‘section’ attribute, and functions
!      that are within the scope of a ‘#pragma long_calls’ directive are
       always turned into long calls.
  
       This feature is not enabled by default.  Specifying
!      ‘-mno-long-calls’ restores the default behavior, as does placing
!      the function calls within the scope of a ‘#pragma long_calls_off’
       directive.  Note these switches have no effect on how the compiler
       generates code to handle function calls via function pointers.
  
! ‘-msingle-pic-base’
       Treat the register used for PIC addressing as read-only, rather
       than loading it in the prologue for each function.  The runtime
       system is responsible for initializing this register with an
       appropriate value before execution begins.
  
! ‘-mpic-register=REG’
       Specify the register to be used for PIC addressing.  For standard
       PIC base case, the default is any suitable register determined by
!      compiler.  For single PIC base case, the default is ‘R9’ if target
       is EABI based or stack-checking is enabled, otherwise the default
!      is ‘R10’.
  
! ‘-mpic-data-is-text-relative’
       Assume that the displacement between the text and data segments is
       fixed at static link time.  This permits using PC-relative
       addressing operations to access data known to be in the data
       segment.  For non-VxWorks RTP targets, this option is enabled by
       default.  When disabled on such targets, it will enable
!      ‘-msingle-pic-base’ by default.
  
! ‘-mpoke-function-name’
       Write the name of each function into the text section, directly
       preceding the function prologue.  The generated code is similar to
       this:
*************** These '-m' options are defined for the A
*** 22101,22149 ****
                     sub     fp, ip, #4
  
       When performing a stack backtrace, code can inspect the value of
!      'pc' stored at 'fp + 0'.  If the trace function then looks at
!      location 'pc - 12' and the top 8 bits are set, then we know that
       there is a function name embedded immediately preceding this
!      location and has length '((pc[-3]) & 0xff000000)'.
  
! '-mthumb'
! '-marm'
  
       Select between generating code that executes in ARM and Thumb
       states.  The default for most configurations is to generate code
       that executes in ARM state, but the default can be changed by
!      configuring GCC with the '--with-mode='STATE configure option.
  
       You can also override the ARM and Thumb mode for each function by
!      using the 'target("thumb")' and 'target("arm")' function attributes
       (*note ARM Function Attributes::) or pragmas (*note Function
       Specific Option Pragmas::).
  
! '-mflip-thumb'
       Switch ARM/Thumb modes on alternating functions.  This option is
       provided for regression testing of mixed Thumb/ARM code generation,
       and is not intended for ordinary use in compiling code.
  
! '-mtpcs-frame'
       Generate a stack frame that is compliant with the Thumb Procedure
       Call Standard for all non-leaf functions.  (A leaf function is one
       that does not call any other functions.)  The default is
!      '-mno-tpcs-frame'.
  
! '-mtpcs-leaf-frame'
       Generate a stack frame that is compliant with the Thumb Procedure
       Call Standard for all leaf functions.  (A leaf function is one that
       does not call any other functions.)  The default is
!      '-mno-apcs-leaf-frame'.
  
! '-mcallee-super-interworking'
       Gives all externally visible functions in the file being compiled
       an ARM instruction set header which switches to Thumb mode before
       executing the rest of the function.  This allows these functions to
       be called from non-interworking code.  This option is not valid in
       AAPCS configurations because interworking is enabled by default.
  
! '-mcaller-super-interworking'
       Allows calls via function pointers (including virtual functions) to
       execute correctly regardless of whether the target code has been
       compiled for interworking or not.  There is a small overhead in the
--- 22105,22153 ----
                     sub     fp, ip, #4
  
       When performing a stack backtrace, code can inspect the value of
!      ‘pc’ stored at ‘fp + 0’.  If the trace function then looks at
!      location ‘pc - 12’ and the top 8 bits are set, then we know that
       there is a function name embedded immediately preceding this
!      location and has length ‘((pc[-3]) & 0xff000000)’.
  
! ‘-mthumb’
! ‘-marm’
  
       Select between generating code that executes in ARM and Thumb
       states.  The default for most configurations is to generate code
       that executes in ARM state, but the default can be changed by
!      configuring GCC with the ‘--with-mode=’STATE configure option.
  
       You can also override the ARM and Thumb mode for each function by
!      using the ‘target("thumb")’ and ‘target("arm")’ function attributes
       (*note ARM Function Attributes::) or pragmas (*note Function
       Specific Option Pragmas::).
  
! ‘-mflip-thumb’
       Switch ARM/Thumb modes on alternating functions.  This option is
       provided for regression testing of mixed Thumb/ARM code generation,
       and is not intended for ordinary use in compiling code.
  
! ‘-mtpcs-frame’
       Generate a stack frame that is compliant with the Thumb Procedure
       Call Standard for all non-leaf functions.  (A leaf function is one
       that does not call any other functions.)  The default is
!      ‘-mno-tpcs-frame’.
  
! ‘-mtpcs-leaf-frame’
       Generate a stack frame that is compliant with the Thumb Procedure
       Call Standard for all leaf functions.  (A leaf function is one that
       does not call any other functions.)  The default is
!      ‘-mno-apcs-leaf-frame’.
  
! ‘-mcallee-super-interworking’
       Gives all externally visible functions in the file being compiled
       an ARM instruction set header which switches to Thumb mode before
       executing the rest of the function.  This allows these functions to
       be called from non-interworking code.  This option is not valid in
       AAPCS configurations because interworking is enabled by default.
  
! ‘-mcaller-super-interworking’
       Allows calls via function pointers (including virtual functions) to
       execute correctly regardless of whether the target code has been
       compiled for interworking or not.  There is a small overhead in the
*************** These '-m' options are defined for the A
*** 22151,22202 ****
       This option is not valid in AAPCS configurations because
       interworking is enabled by default.
  
! '-mtp=NAME'
       Specify the access model for the thread local storage pointer.  The
!      model 'soft' generates calls to '__aeabi_read_tp'.  Other accepted
!      models are 'tpidrurw', 'tpidruro' and 'tpidrprw' which fetch the
       thread pointer from the corresponding system register directly
       (supported from the arm6k architecture and later).  These system
       registers are accessed through the CP15 co-processor interface and
!      the argument 'cp15' is also accepted as a convenience alias of
!      'tpidruro'.  The argument 'auto' uses the best available method for
!      the selected processor.  The default setting is 'auto'.
  
! '-mtls-dialect=DIALECT'
       Specify the dialect to use for accessing thread local storage.  Two
!      DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
       selects the original GNU scheme for supporting local and global
!      dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
       scheme, which provides better performance for shared libraries.
       The GNU descriptor scheme is compatible with the original scheme,
       but does require new assembler, linker and library support.
       Initial and local exec TLS models are unaffected by this option and
       always use the original scheme.
  
! '-mword-relocations'
       Only generate absolute relocations on word-sized values (i.e.
       R_ARM_ABS32).  This is enabled by default on targets (uClinux,
       SymbianOS) where the runtime loader imposes this restriction, and
!      when '-fpic' or '-fPIC' is specified.  This option conflicts with
!      '-mslow-flash-data'.
  
! '-mfix-cortex-m3-ldrd'
!      Some Cortex-M3 cores can cause data corruption when 'ldrd'
       instructions with overlapping destination and base registers are
       used.  This option avoids generating these instructions.  This
!      option is enabled by default when '-mcpu=cortex-m3' is specified.
  
! '-mfix-cortex-a57-aes-1742098'
! '-mno-fix-cortex-a57-aes-1742098'
! '-mfix-cortex-a72-aes-1655431'
! '-mno-fix-cortex-a72-aes-1655431'
       Enable (disable) mitigation for an erratum on Cortex-A57 and
       Cortex-A72 that affects the AES cryptographic instructions.  This
!      option is enabled by default when either '-mcpu=cortex-a57' or
!      '-mcpu=cortex-a72' is specified.
  
! '-munaligned-access'
! '-mno-unaligned-access'
       Enables (or disables) reading and writing of 16- and 32- bit values
       from addresses that are not 16- or 32- bit aligned.  By default
       unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
--- 22155,22206 ----
       This option is not valid in AAPCS configurations because
       interworking is enabled by default.
  
! ‘-mtp=NAME’
       Specify the access model for the thread local storage pointer.  The
!      model ‘soft’ generates calls to ‘__aeabi_read_tp’.  Other accepted
!      models are ‘tpidrurw’, ‘tpidruro’ and ‘tpidrprw’ which fetch the
       thread pointer from the corresponding system register directly
       (supported from the arm6k architecture and later).  These system
       registers are accessed through the CP15 co-processor interface and
!      the argument ‘cp15’ is also accepted as a convenience alias of
!      ‘tpidruro’.  The argument ‘auto’ uses the best available method for
!      the selected processor.  The default setting is ‘auto’.
  
! ‘-mtls-dialect=DIALECT’
       Specify the dialect to use for accessing thread local storage.  Two
!      DIALECTs are supported--‘gnu’ and ‘gnu2’.  The ‘gnu’ dialect
       selects the original GNU scheme for supporting local and global
!      dynamic TLS models.  The ‘gnu2’ dialect selects the GNU descriptor
       scheme, which provides better performance for shared libraries.
       The GNU descriptor scheme is compatible with the original scheme,
       but does require new assembler, linker and library support.
       Initial and local exec TLS models are unaffected by this option and
       always use the original scheme.
  
! ‘-mword-relocations’
       Only generate absolute relocations on word-sized values (i.e.
       R_ARM_ABS32).  This is enabled by default on targets (uClinux,
       SymbianOS) where the runtime loader imposes this restriction, and
!      when ‘-fpic’ or ‘-fPIC’ is specified.  This option conflicts with
!      ‘-mslow-flash-data’.
  
! ‘-mfix-cortex-m3-ldrd’
!      Some Cortex-M3 cores can cause data corruption when ‘ldrd’
       instructions with overlapping destination and base registers are
       used.  This option avoids generating these instructions.  This
!      option is enabled by default when ‘-mcpu=cortex-m3’ is specified.
  
! ‘-mfix-cortex-a57-aes-1742098’
! ‘-mno-fix-cortex-a57-aes-1742098’
! ‘-mfix-cortex-a72-aes-1655431’
! ‘-mno-fix-cortex-a72-aes-1655431’
       Enable (disable) mitigation for an erratum on Cortex-A57 and
       Cortex-A72 that affects the AES cryptographic instructions.  This
!      option is enabled by default when either ‘-mcpu=cortex-a57’ or
!      ‘-mcpu=cortex-a72’ is specified.
  
! ‘-munaligned-access’
! ‘-mno-unaligned-access’
       Enables (or disables) reading and writing of 16- and 32- bit values
       from addresses that are not 16- or 32- bit aligned.  By default
       unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
*************** These '-m' options are defined for the A
*** 22204,22281 ****
       architectures.  If unaligned access is not enabled then words in
       packed data structures are accessed a byte at a time.
  
!      The ARM attribute 'Tag_CPU_unaligned_access' is set in the
       generated object file to either true or false, depending upon the
       setting of this option.  If unaligned access is enabled then the
!      preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.
  
! '-mneon-for-64bits'
       This option is deprecated and has no effect.
  
! '-mslow-flash-data'
       Assume loading data from flash is slower than fetching instruction.
       Therefore literal load is minimized for better performance.  This
       option is only supported when compiling for ARMv7 M-profile and off
!      by default.  It conflicts with '-mword-relocations'.
  
! '-masm-syntax-unified'
       Assume inline assembler is using unified asm syntax.  The default
       is currently off which implies divided syntax.  This option has no
       impact on Thumb2.  However, this may change in future releases of
       GCC. Divided syntax should be considered deprecated.
  
! '-mrestrict-it'
       Restricts generation of IT blocks to conform to the rules of
       ARMv8-A. IT blocks can only contain a single 16-bit instruction
       from a select set of instructions.  This option is on by default
       for ARMv8-A Thumb mode.
  
! '-mprint-tune-info'
       Print CPU tuning information as comment in assembler file.  This is
       an option used only for regression testing of the compiler and not
       intended for ordinary use in compiling code.  This option is
       disabled by default.
  
! '-mverbose-cost-dump'
       Enable verbose cost model dumping in the debug dump files.  This
       option is provided for use in debugging the compiler.
  
! '-mpure-code'
       Do not allow constant data to be placed in code sections.
       Additionally, when compiling for ELF object format give all text
       sections the ELF processor-specific section attribute
!      'SHF_ARM_PURECODE'.  This option is only available when generating
       non-pic code for M-profile targets.
  
! '-mcmse'
       Generate secure code as per the "ARMv8-M Security Extensions:
       Requirements on Development Tools Engineering Specification", which
       can be found on
       <https://developer.arm.com/documentation/ecm0359818/latest/>.
  
! '-mfix-cmse-cve-2021-35465'
!      Mitigate against a potential security issue with the 'VLLDM'
       instruction in some M-profile devices when using CMSE
       (CVE-2021-365465).  This option is enabled by default when the
!      option '-mcpu=' is used with 'cortex-m33', 'cortex-m35p',
!      'cortex-m52', 'cortex-m55', 'cortex-m85' or 'star-mc1'.  The option
!      '-mno-fix-cmse-cve-2021-35465' can be used to disable the
       mitigation.
  
! '-mstack-protector-guard=GUARD'
! '-mstack-protector-guard-offset=OFFSET'
       Generate stack protection code using canary at GUARD.  Supported
!      locations are 'global' for a global canary or 'tls' for a canary
       accessible via the TLS register.  The option
!      '-mstack-protector-guard-offset=' is for use with
!      '-fstack-protector-guard=tls' and not for use in user-land code.
  
! '-mfdpic'
! '-mno-fdpic'
       Select the FDPIC ABI, which uses 64-bit function descriptors to
       represent pointers to functions.  When the compiler is configured
!      for 'arm-*-uclinuxfdpiceabi' targets, this option is on by default
!      and implies '-fPIE' if none of the PIC/PIE-related options is
       provided.  On other targets, it only enables the FDPIC-specific
       code generation features, and the user should explicitly provide
       the PIC/PIE-related options as needed.
--- 22208,22285 ----
       architectures.  If unaligned access is not enabled then words in
       packed data structures are accessed a byte at a time.
  
!      The ARM attribute ‘Tag_CPU_unaligned_access’ is set in the
       generated object file to either true or false, depending upon the
       setting of this option.  If unaligned access is enabled then the
!      preprocessor symbol ‘__ARM_FEATURE_UNALIGNED’ is also defined.
  
! ‘-mneon-for-64bits’
       This option is deprecated and has no effect.
  
! ‘-mslow-flash-data’
       Assume loading data from flash is slower than fetching instruction.
       Therefore literal load is minimized for better performance.  This
       option is only supported when compiling for ARMv7 M-profile and off
!      by default.  It conflicts with ‘-mword-relocations’.
  
! ‘-masm-syntax-unified’
       Assume inline assembler is using unified asm syntax.  The default
       is currently off which implies divided syntax.  This option has no
       impact on Thumb2.  However, this may change in future releases of
       GCC. Divided syntax should be considered deprecated.
  
! ‘-mrestrict-it’
       Restricts generation of IT blocks to conform to the rules of
       ARMv8-A. IT blocks can only contain a single 16-bit instruction
       from a select set of instructions.  This option is on by default
       for ARMv8-A Thumb mode.
  
! ‘-mprint-tune-info’
       Print CPU tuning information as comment in assembler file.  This is
       an option used only for regression testing of the compiler and not
       intended for ordinary use in compiling code.  This option is
       disabled by default.
  
! ‘-mverbose-cost-dump’
       Enable verbose cost model dumping in the debug dump files.  This
       option is provided for use in debugging the compiler.
  
! ‘-mpure-code’
       Do not allow constant data to be placed in code sections.
       Additionally, when compiling for ELF object format give all text
       sections the ELF processor-specific section attribute
!      ‘SHF_ARM_PURECODE’.  This option is only available when generating
       non-pic code for M-profile targets.
  
! ‘-mcmse’
       Generate secure code as per the "ARMv8-M Security Extensions:
       Requirements on Development Tools Engineering Specification", which
       can be found on
       <https://developer.arm.com/documentation/ecm0359818/latest/>.
  
! ‘-mfix-cmse-cve-2021-35465’
!      Mitigate against a potential security issue with the ‘VLLDM’
       instruction in some M-profile devices when using CMSE
       (CVE-2021-365465).  This option is enabled by default when the
!      option ‘-mcpu=’ is used with ‘cortex-m33’, ‘cortex-m35p’,
!      ‘cortex-m52’, ‘cortex-m55’, ‘cortex-m85’ or ‘star-mc1’.  The option
!      ‘-mno-fix-cmse-cve-2021-35465’ can be used to disable the
       mitigation.
  
! ‘-mstack-protector-guard=GUARD’
! ‘-mstack-protector-guard-offset=OFFSET’
       Generate stack protection code using canary at GUARD.  Supported
!      locations are ‘global’ for a global canary or ‘tls’ for a canary
       accessible via the TLS register.  The option
!      ‘-mstack-protector-guard-offset=’ is for use with
!      ‘-fstack-protector-guard=tls’ and not for use in user-land code.
  
! ‘-mfdpic’
! ‘-mno-fdpic’
       Select the FDPIC ABI, which uses 64-bit function descriptors to
       represent pointers to functions.  When the compiler is configured
!      for ‘arm-*-uclinuxfdpiceabi’ targets, this option is on by default
!      and implies ‘-fPIE’ if none of the PIC/PIE-related options is
       provided.  On other targets, it only enables the FDPIC-specific
       code generation features, and the user should explicitly provide
       the PIC/PIE-related options as needed.
*************** These '-m' options are defined for the A
*** 22285,22319 ****
       such behavior is acceptable, use -static and -Wl,-dynamic-linker
       options.
  
!      The opposite '-mno-fdpic' option is useful (and required) to build
!      the Linux kernel using the same ('arm-*-uclinuxfdpiceabi')
       toolchain as the one used to build the userland programs.
  
! '-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF][+BTI]|BTI[+PAC-RET[+LEAF]]'
!      Enable branch protection features (armv8.1-m.main only).  'none'
       generate code without branch protection or return address signing.
!      'standard[+LEAF]' generate code with all branch protection features
!      enabled at their standard level.  'pac-ret[+LEAF]' generate code
       with return address signing set to its standard level, which is to
!      sign all functions that save the return address to memory.  'leaf'
       When return address signing is enabled, also sign leaf functions
!      even if they do not write the return address to memory.  +'bti' Add
       landing-pad instructions at the permitted targets of indirect
       branch instructions.
  
!      If the '+pacbti' architecture extension is not enabled, then all
       branch protection and return address signing operations are
       constrained to use only the instructions defined in the
       architectural-NOP space.  The generated code will remain
       backwards-compatible with earlier versions of the architecture, but
       the additional security can be enabled at run time on processors
!      that support the 'PACBTI' extension.
  
       Branch target enforcement using BTI can only be enabled at runtime
       if all code in the application has been compiled with at least
!      '-mbranch-protection=bti'.
  
!      Any setting other than 'none' is supported only on armv8-m.main or
       later.
  
       The default is to generate code without branch protection or return
--- 22289,22323 ----
       such behavior is acceptable, use -static and -Wl,-dynamic-linker
       options.
  
!      The opposite ‘-mno-fdpic’ option is useful (and required) to build
!      the Linux kernel using the same (‘arm-*-uclinuxfdpiceabi’)
       toolchain as the one used to build the userland programs.
  
! ‘-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF][+BTI]|BTI[+PAC-RET[+LEAF]]’
!      Enable branch protection features (armv8.1-m.main only).  ‘none’
       generate code without branch protection or return address signing.
!      ‘standard[+LEAF]’ generate code with all branch protection features
!      enabled at their standard level.  ‘pac-ret[+LEAF]’ generate code
       with return address signing set to its standard level, which is to
!      sign all functions that save the return address to memory.  ‘leaf’
       When return address signing is enabled, also sign leaf functions
!      even if they do not write the return address to memory.  +‘bti’ Add
       landing-pad instructions at the permitted targets of indirect
       branch instructions.
  
!      If the ‘+pacbti’ architecture extension is not enabled, then all
       branch protection and return address signing operations are
       constrained to use only the instructions defined in the
       architectural-NOP space.  The generated code will remain
       backwards-compatible with earlier versions of the architecture, but
       the additional security can be enabled at run time on processors
!      that support the ‘PACBTI’ extension.
  
       Branch target enforcement using BTI can only be enabled at runtime
       if all code in the application has been compiled with at least
!      ‘-mbranch-protection=bti’.
  
!      Any setting other than ‘none’ is supported only on armv8-m.main or
       later.
  
       The default is to generate code without branch protection or return
*************** File: gcc.info,  Node: AVR Options,  Nex
*** 22327,22519 ****
  
  These options are defined for AVR implementations:
  
! '-mmcu=MCU'
       Specify the AVR instruction set architecture (ISA) or device type.
!      The default for this option is 'avr2'.
  
       The following AVR devices and ISAs are supported.  _Note:_ A
!      complete device support consists of startup code 'crtMCU.o', a
!      device header 'avr/io*.h', a device library 'libMCU.a' and a
       device-specs (https://gcc.gnu.org/wiki/avr-gcc#spec-files) file
!      'specs-MCU'.  Only the latter is provided by the compiler according
!      the supported 'MCU's below.  The rest is supported by
       AVR-LibC (https://www.nongnu.org/avr-libc/), or by means of
!      'atpack' (https://gcc.gnu.org/wiki/avr-gcc#atpack) files from the
       hardware manufacturer.
  
!      'avr2'
            "Classic" devices with up to 8 KiB of program memory.
!           MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
!           'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
!           'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
  
!      'avr25'
            "Classic" devices with up to 8 KiB of program memory and with
!           the 'MOVW' instruction.
!           MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
!           'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
!           'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
!           'attiny45', 'attiny48', 'attiny441', 'attiny461',
!           'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
!           'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
!           'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
  
!      'avr3'
            "Classic" devices with 16 KiB up to 64 KiB of program memory.
-           MCU = 'at76c711', 'at43usb355'.
  
!      'avr31'
            "Classic" devices with 128 KiB of program memory.
!           MCU = 'atmega103', 'at43usb320'.
  
!      'avr35'
            "Classic" devices with 16 KiB up to 64 KiB of program memory
!           and with the 'MOVW' instruction.
!           MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
!           'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
!           'at90usb162'.
  
!      'avr4'
            "Enhanced" devices with up to 8 KiB of program memory.
!           MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
!           'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
!           'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
!           'atmega8515', 'atmega8535', 'ata5795', 'ata6285', 'ata6286',
!           'ata6289', 'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b',
!           'at90pwm3', 'at90pwm3b', 'at90pwm81'.
  
!      'avr5'
            "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
  
!           MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
!           'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
!           'atmega161', 'atmega162', 'atmega163', 'atmega164a',
!           'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
!           'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
!           'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
!           'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
!           'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
!           'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
!           'atmega324a', 'atmega324p', 'atmega324pa', 'atmega324pb',
!           'atmega325', 'atmega325a', 'atmega325p', 'atmega325pa',
!           'atmega328', 'atmega328p', 'atmega328pb', 'atmega329',
!           'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3250',
!           'atmega3250a', 'atmega3250p', 'atmega3250pa', 'atmega3290',
!           'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406',
!           'atmega64', 'atmega64a', 'atmega64c1', 'atmega64hve',
!           'atmega64hve2', 'atmega64m1', 'atmega64rfr2', 'atmega640',
!           'atmega644', 'atmega644a', 'atmega644p', 'atmega644pa',
!           'atmega644rfr2', 'atmega645', 'atmega645a', 'atmega645p',
!           'atmega649', 'atmega649a', 'atmega649p', 'atmega6450',
!           'atmega6450a', 'atmega6450p', 'atmega6490', 'atmega6490a',
!           'atmega6490p', 'ata5790', 'ata5790n', 'ata5791', 'ata6613c',
!           'ata6614q', 'ata5782', 'ata5831', 'ata8210', 'ata8510',
!           'ata5787', 'ata5835', 'ata5700m322', 'ata5702m322',
!           'at90pwm161', 'at90pwm216', 'at90pwm316', 'at90can32',
!           'at90can64', 'at90scr100', 'at90usb646', 'at90usb647',
!           'at94k', 'm3000'.
  
!      'avr51'
            "Enhanced" devices with 128 KiB of program memory.
!           MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
!           'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
!           'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
!           'at90usb1287'.
  
!      'avr6'
            "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
            of program memory.
!           MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
!           'atmega2564rfr2'.
  
!      'avrxmega2'
            "XMEGA" devices with more than 8 KiB and up to 64 KiB of
            program memory.
!           MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
!           'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
!           'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
!           'atxmega32d4', 'atxmega32e5', 'avr64da28', 'avr64da32',
!           'avr64da48', 'avr64da64', 'avr64db28', 'avr64db32',
!           'avr64db48', 'avr64db64', 'avr64dd14', 'avr64dd20',
!           'avr64dd28', 'avr64dd32', 'avr64du28', 'avr64du32',
!           'avr64ea28', 'avr64ea32', 'avr64ea48', 'avr64sd28',
!           'avr64sd32', 'avr64sd48'.
  
!      'avrxmega3'
            "XMEGA" devices with up to 64 KiB of combined program memory
            and RAM, and with program memory visible in the RAM address
            space.
!           MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
!           'attiny402', 'attiny404', 'attiny406', 'attiny412',
!           'attiny414', 'attiny416', 'attiny416auto', 'attiny417',
!           'attiny424', 'attiny426', 'attiny427', 'attiny804',
!           'attiny806', 'attiny807', 'attiny814', 'attiny816',
!           'attiny817', 'attiny824', 'attiny826', 'attiny827',
!           'attiny1604', 'attiny1606', 'attiny1607', 'attiny1614',
!           'attiny1616', 'attiny1617', 'attiny1624', 'attiny1626',
!           'attiny1627', 'attiny3214', 'attiny3216', 'attiny3217',
!           'attiny3224', 'attiny3226', 'attiny3227', 'atmega808',
!           'atmega809', 'atmega1608', 'atmega1609', 'atmega3208',
!           'atmega3209', 'atmega4808', 'atmega4809', 'avr16dd14',
!           'avr16dd20', 'avr16dd28', 'avr16dd32', 'avr16du14',
!           'avr16du20', 'avr16du28', 'avr16du32', 'avr16ea28',
!           'avr16ea32', 'avr16ea48', 'avr16eb14', 'avr16eb20',
!           'avr16eb28', 'avr16eb32', 'avr32da28', 'avr32da32',
!           'avr32da48', 'avr32db28', 'avr32db32', 'avr32db48',
!           'avr32dd14', 'avr32dd20', 'avr32dd28', 'avr32dd32',
!           'avr32du14', 'avr32du20', 'avr32du28', 'avr32du32',
!           'avr32ea28', 'avr32ea32', 'avr32ea48', 'avr32sd20',
!           'avr32sd28', 'avr32sd32'.
  
!      'avrxmega4'
            "XMEGA" devices with more than 64 KiB and up to 128 KiB of
            program memory.
!           MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
!           'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
!           'atxmega64d4', 'avr128da28', 'avr128da32', 'avr128da48',
!           'avr128da64', 'avr128db28', 'avr128db32', 'avr128db48',
!           'avr128db64'.
  
!      'avrxmega5'
            "XMEGA" devices with more than 64 KiB and up to 128 KiB of
            program memory and more than 64 KiB of RAM.
!           MCU = 'atxmega64a1', 'atxmega64a1u'.
  
!      'avrxmega6'
            "XMEGA" devices with more than 128 KiB of program memory.
!           MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
!           'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
!           'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
!           'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
!           'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
!           'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
!           'atxmega384d3'.
  
!      'avrxmega7'
            "XMEGA" devices with more than 128 KiB of program memory and
            more than 64 KiB of RAM.
!           MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
  
!      'avrtiny'
            "Reduced Tiny" Tiny core devices with only 16 general purpose
            registers and 512 B up to 4 KiB of program memory.
!           MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10',
!           'attiny102', 'attiny104', 'attiny20', 'attiny40'.
  
!      'avr1'
            This ISA is implemented by the minimal AVR core and supported
            for assembler only.
!           MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
!           'at90s1200'.
  
! '-mabsdata'
  
       Assume that all data in static storage can be accessed by LDS / STS
       instructions.  This option has only an effect on reduced Tiny
!      devices like ATtiny40.  See also the 'absdata' *note variable
       attribute: AVR Variable Attributes.
  
! '-maccumulate-args'
       Accumulate outgoing function arguments and acquire/release the
       needed stack space for outgoing function arguments once in function
       prologue/epilogue.  Without this option, outgoing arguments are
--- 22331,22530 ----
  
  These options are defined for AVR implementations:
  
! ‘-mmcu=MCU’
       Specify the AVR instruction set architecture (ISA) or device type.
!      The default for this option is ‘avr2’.
  
       The following AVR devices and ISAs are supported.  _Note:_ A
!      complete device support consists of startup code ‘crtMCU.o’, a
!      device header ‘avr/io*.h’, a device library ‘libMCU.a’ and a
       device-specs (https://gcc.gnu.org/wiki/avr-gcc#spec-files) file
!      ‘specs-MCU’.  Only the latter is provided by the compiler according
!      the supported ‘MCU’s below.  The rest is supported by
       AVR-LibC (https://www.nongnu.org/avr-libc/), or by means of
!      ‘atpack’ (https://gcc.gnu.org/wiki/avr-gcc#atpack) files from the
       hardware manufacturer.
  
!      ‘avr2’
            "Classic" devices with up to 8 KiB of program memory.
!           MCU = ‘attiny22’, ‘attiny26’, ‘at90s2313’, ‘at90s2323’,
!           ‘at90s2333’, ‘at90s2343’, ‘at90s4414’, ‘at90s4433’,
!           ‘at90s4434’, ‘at90c8534’, ‘at90s8515’, ‘at90s8535’.
  
!      ‘avr25’
            "Classic" devices with up to 8 KiB of program memory and with
!           the ‘MOVW’ instruction.
!           MCU = ‘attiny13’, ‘attiny13a’, ‘attiny24’, ‘attiny24a’,
!           ‘attiny25’, ‘attiny261’, ‘attiny261a’, ‘attiny2313’,
!           ‘attiny2313a’, ‘attiny43u’, ‘attiny44’, ‘attiny44a’,
!           ‘attiny45’, ‘attiny48’, ‘attiny441’, ‘attiny461’,
!           ‘attiny461a’, ‘attiny4313’, ‘attiny84’, ‘attiny84a’,
!           ‘attiny85’, ‘attiny87’, ‘attiny88’, ‘attiny828’, ‘attiny841’,
!           ‘attiny861’, ‘attiny861a’, ‘ata5272’, ‘ata6616c’, ‘at86rf401’.
  
!      ‘avr3’
            "Classic" devices with 16 KiB up to 64 KiB of program memory.
  
!           MCU = ‘at76c711’, ‘at43usb355’.
! 
!      ‘avr31’
            "Classic" devices with 128 KiB of program memory.
!           MCU = ‘atmega103’, ‘at43usb320’.
  
!      ‘avr35’
            "Classic" devices with 16 KiB up to 64 KiB of program memory
!           and with the ‘MOVW’ instruction.
!           MCU = ‘attiny167’, ‘attiny1634’, ‘atmega8u2’, ‘atmega16u2’,
!           ‘atmega32u2’, ‘ata5505’, ‘ata6617c’, ‘ata664251’, ‘at90usb82’,
!           ‘at90usb162’.
  
!      ‘avr4’
            "Enhanced" devices with up to 8 KiB of program memory.
!           MCU = ‘atmega48’, ‘atmega48a’, ‘atmega48p’, ‘atmega48pa’,
!           ‘atmega48pb’, ‘atmega8’, ‘atmega8a’, ‘atmega8hva’, ‘atmega88’,
!           ‘atmega88a’, ‘atmega88p’, ‘atmega88pa’, ‘atmega88pb’,
!           ‘atmega8515’, ‘atmega8535’, ‘ata5795’, ‘ata6285’, ‘ata6286’,
!           ‘ata6289’, ‘ata6612c’, ‘at90pwm1’, ‘at90pwm2’, ‘at90pwm2b’,
!           ‘at90pwm3’, ‘at90pwm3b’, ‘at90pwm81’.
  
!      ‘avr5’
            "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
  
!           MCU = ‘atmega16’, ‘atmega16a’, ‘atmega16hva’, ‘atmega16hva2’,
!           ‘atmega16hvb’, ‘atmega16hvbrevb’, ‘atmega16m1’, ‘atmega16u4’,
!           ‘atmega161’, ‘atmega162’, ‘atmega163’, ‘atmega164a’,
!           ‘atmega164p’, ‘atmega164pa’, ‘atmega165’, ‘atmega165a’,
!           ‘atmega165p’, ‘atmega165pa’, ‘atmega168’, ‘atmega168a’,
!           ‘atmega168p’, ‘atmega168pa’, ‘atmega168pb’, ‘atmega169’,
!           ‘atmega169a’, ‘atmega169p’, ‘atmega169pa’, ‘atmega32’,
!           ‘atmega32a’, ‘atmega32c1’, ‘atmega32hvb’, ‘atmega32hvbrevb’,
!           ‘atmega32m1’, ‘atmega32u4’, ‘atmega32u6’, ‘atmega323’,
!           ‘atmega324a’, ‘atmega324p’, ‘atmega324pa’, ‘atmega324pb’,
!           ‘atmega325’, ‘atmega325a’, ‘atmega325p’, ‘atmega325pa’,
!           ‘atmega328’, ‘atmega328p’, ‘atmega328pb’, ‘atmega329’,
!           ‘atmega329a’, ‘atmega329p’, ‘atmega329pa’, ‘atmega3250’,
!           ‘atmega3250a’, ‘atmega3250p’, ‘atmega3250pa’, ‘atmega3290’,
!           ‘atmega3290a’, ‘atmega3290p’, ‘atmega3290pa’, ‘atmega406’,
!           ‘atmega64’, ‘atmega64a’, ‘atmega64c1’, ‘atmega64hve’,
!           ‘atmega64hve2’, ‘atmega64m1’, ‘atmega64rfr2’, ‘atmega640’,
!           ‘atmega644’, ‘atmega644a’, ‘atmega644p’, ‘atmega644pa’,
!           ‘atmega644rfr2’, ‘atmega645’, ‘atmega645a’, ‘atmega645p’,
!           ‘atmega649’, ‘atmega649a’, ‘atmega649p’, ‘atmega6450’,
!           ‘atmega6450a’, ‘atmega6450p’, ‘atmega6490’, ‘atmega6490a’,
!           ‘atmega6490p’, ‘ata5790’, ‘ata5790n’, ‘ata5791’, ‘ata6613c’,
!           ‘ata6614q’, ‘ata5782’, ‘ata5831’, ‘ata8210’, ‘ata8510’,
!           ‘ata5787’, ‘ata5835’, ‘ata5700m322’, ‘ata5702m322’,
!           ‘at90pwm161’, ‘at90pwm216’, ‘at90pwm316’, ‘at90can32’,
!           ‘at90can64’, ‘at90scr100’, ‘at90usb646’, ‘at90usb647’,
!           ‘at94k’, ‘m3000’.
  
!      ‘avr51’
            "Enhanced" devices with 128 KiB of program memory.
!           MCU = ‘atmega128’, ‘atmega128a’, ‘atmega128rfa1’,
!           ‘atmega128rfr2’, ‘atmega1280’, ‘atmega1281’, ‘atmega1284’,
!           ‘atmega1284p’, ‘atmega1284rfr2’, ‘at90can128’, ‘at90usb1286’,
!           ‘at90usb1287’.
  
!      ‘avr6’
            "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
            of program memory.
!           MCU = ‘atmega256rfr2’, ‘atmega2560’, ‘atmega2561’,
!           ‘atmega2564rfr2’.
  
!      ‘avrxmega2’
            "XMEGA" devices with more than 8 KiB and up to 64 KiB of
            program memory.
!           MCU = ‘atxmega8e5’, ‘atxmega16a4’, ‘atxmega16a4u’,
!           ‘atxmega16c4’, ‘atxmega16d4’, ‘atxmega16e5’, ‘atxmega32a4’,
!           ‘atxmega32a4u’, ‘atxmega32c3’, ‘atxmega32c4’, ‘atxmega32d3’,
!           ‘atxmega32d4’, ‘atxmega32e5’, ‘avr64da28’, ‘avr64da28s’,
!           ‘avr64da32’, ‘avr64da32s’, ‘avr64da48’, ‘avr64da48s’,
!           ‘avr64da64’, ‘avr64da64s’, ‘avr64db28’, ‘avr64db32’,
!           ‘avr64db48’, ‘avr64db64’, ‘avr64dd14’, ‘avr64dd20’,
!           ‘avr64dd28’, ‘avr64dd32’, ‘avr64du28’, ‘avr64du32’,
!           ‘avr64ea28’, ‘avr64ea32’, ‘avr64ea48’, ‘avr64sd28’,
!           ‘avr64sd32’, ‘avr64sd48’.
  
!      ‘avrxmega3’
            "XMEGA" devices with up to 64 KiB of combined program memory
            and RAM, and with program memory visible in the RAM address
            space.
!           MCU = ‘attiny202’, ‘attiny204’, ‘attiny212’, ‘attiny214’,
!           ‘attiny402’, ‘attiny404’, ‘attiny406’, ‘attiny412’,
!           ‘attiny414’, ‘attiny416’, ‘attiny416auto’, ‘attiny417’,
!           ‘attiny424’, ‘attiny426’, ‘attiny427’, ‘attiny804’,
!           ‘attiny806’, ‘attiny807’, ‘attiny814’, ‘attiny816’,
!           ‘attiny817’, ‘attiny824’, ‘attiny826’, ‘attiny827’,
!           ‘attiny1604’, ‘attiny1606’, ‘attiny1607’, ‘attiny1614’,
!           ‘attiny1616’, ‘attiny1617’, ‘attiny1624’, ‘attiny1626’,
!           ‘attiny1627’, ‘attiny3214’, ‘attiny3216’, ‘attiny3217’,
!           ‘attiny3224’, ‘attiny3226’, ‘attiny3227’, ‘atmega808’,
!           ‘atmega809’, ‘atmega1608’, ‘atmega1609’, ‘atmega3208’,
!           ‘atmega3209’, ‘atmega4808’, ‘atmega4809’, ‘avr16dd14’,
!           ‘avr16dd20’, ‘avr16dd28’, ‘avr16dd32’, ‘avr16du14’,
!           ‘avr16du20’, ‘avr16du28’, ‘avr16du32’, ‘avr16ea28’,
!           ‘avr16ea32’, ‘avr16ea48’, ‘avr16eb14’, ‘avr16eb20’,
!           ‘avr16eb28’, ‘avr16eb32’, ‘avr16la14’, ‘avr16la20’,
!           ‘avr16la28’, ‘avr16la32’, ‘avr32da28’, ‘avr32da28s’,
!           ‘avr32da32’, ‘avr32da32s’, ‘avr32da48’, ‘avr32da48s’,
!           ‘avr32db28’, ‘avr32db32’, ‘avr32db48’, ‘avr32dd14’,
!           ‘avr32dd20’, ‘avr32dd28’, ‘avr32dd32’, ‘avr32du14’,
!           ‘avr32du20’, ‘avr32du28’, ‘avr32du32’, ‘avr32ea28’,
!           ‘avr32ea32’, ‘avr32ea48’, ‘avr32eb14’, ‘avr32eb20’,
!           ‘avr32eb28’, ‘avr32eb32’, ‘avr32la14’, ‘avr32la20’,
!           ‘avr32la28’, ‘avr32la32’, ‘avr32sd20’, ‘avr32sd28’,
!           ‘avr32sd32’.
  
!      ‘avrxmega4’
            "XMEGA" devices with more than 64 KiB and up to 128 KiB of
            program memory.
!           MCU = ‘atxmega64a3’, ‘atxmega64a3u’, ‘atxmega64a4u’,
!           ‘atxmega64b1’, ‘atxmega64b3’, ‘atxmega64c3’, ‘atxmega64d3’,
!           ‘atxmega64d4’, ‘avr128da28’, ‘avr128da28s’, ‘avr128da32’,
!           ‘avr128da32s’, ‘avr128da48’, ‘avr128da48s’, ‘avr128da64’,
!           ‘avr128da64s’, ‘avr128db28’, ‘avr128db32’, ‘avr128db48’,
!           ‘avr128db64’.
  
!      ‘avrxmega5’
            "XMEGA" devices with more than 64 KiB and up to 128 KiB of
            program memory and more than 64 KiB of RAM.
!           MCU = ‘atxmega64a1’, ‘atxmega64a1u’.
  
!      ‘avrxmega6’
            "XMEGA" devices with more than 128 KiB of program memory.
!           MCU = ‘atxmega128a3’, ‘atxmega128a3u’, ‘atxmega128b1’,
!           ‘atxmega128b3’, ‘atxmega128c3’, ‘atxmega128d3’,
!           ‘atxmega128d4’, ‘atxmega192a3’, ‘atxmega192a3u’,
!           ‘atxmega192c3’, ‘atxmega192d3’, ‘atxmega256a3’,
!           ‘atxmega256a3b’, ‘atxmega256a3bu’, ‘atxmega256a3u’,
!           ‘atxmega256c3’, ‘atxmega256d3’, ‘atxmega384c3’,
!           ‘atxmega384d3’.
  
!      ‘avrxmega7’
            "XMEGA" devices with more than 128 KiB of program memory and
            more than 64 KiB of RAM.
!           MCU = ‘atxmega128a1’, ‘atxmega128a1u’, ‘atxmega128a4u’.
  
!      ‘avrtiny’
            "Reduced Tiny" Tiny core devices with only 16 general purpose
            registers and 512 B up to 4 KiB of program memory.
!           MCU = ‘attiny4’, ‘attiny5’, ‘attiny9’, ‘attiny10’,
!           ‘attiny102’, ‘attiny104’, ‘attiny20’, ‘attiny40’.
  
!      ‘avr1’
            This ISA is implemented by the minimal AVR core and supported
            for assembler only.
!           MCU = ‘attiny11’, ‘attiny12’, ‘attiny15’, ‘attiny28’,
!           ‘at90s1200’.
  
! ‘-mabsdata’
  
       Assume that all data in static storage can be accessed by LDS / STS
       instructions.  This option has only an effect on reduced Tiny
!      devices like ATtiny40.  See also the ‘absdata’ *note variable
       attribute: AVR Variable Attributes.
  
! ‘-maccumulate-args’
       Accumulate outgoing function arguments and acquire/release the
       needed stack space for outgoing function arguments once in function
       prologue/epilogue.  Without this option, outgoing arguments are
*************** These options are defined for AVR implem
*** 22528,22588 ****
       perform several calls to functions that get their arguments on the
       stack like calls to printf-like functions.
  
! '-mbranch-cost=COST'
       Set the branch costs for conditional branch instructions to COST.
       Reasonable values for COST are small, non-negative integers.  The
       default branch cost is 0.
  
! '-mcall-prologues'
       Functions prologues/epilogues are expanded as calls to appropriate
       subroutines.  Code size is smaller.
  
! '-mfuse-add'
! '-mno-fuse-add'
! '-mfuse-add=LEVEL'
       Optimize indirect memory accesses on reduced Tiny devices.  The
!      default uses 'LEVEL=1' for optimizations '-Og' and '-O1', and
!      'LEVEL=2' for higher optimizations.  Valid values for LEVEL are
!      '0', '1' and '2'.
  
! '-mdouble=BITS'
! '-mlong-double=BITS'
!      Set the size (in bits) of the 'double' or 'long double' type,
       respectively.  Possible values for BITS are 32 and 64.  Whether or
       not a specific value for BITS is allowed depends on the
!      '--with-double=' and '--with-long-double='
       configure options (https://gcc.gnu.org/install/configure.html#avr),
       and the same applies for the default values of the options.
  
! '-mgas-isr-prologues'
!      Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
       instruction supported by GNU Binutils.  If this option is on, the
       feature can still be disabled for individual ISRs by means of the
!      *note 'no_gccisr': AVR Function Attributes. function attribute.
       This feature is activated per default if optimization is on (but
!      not with '-Og', *note Optimize Options::), and if GNU Binutils
       support PR21683 (https://sourceware.org/PR21683).
  
! '-mint8'
!      Assume 'int' to be 8-bit integer.  This affects the sizes of all
!      types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
!      and 'long long' is 4 bytes.  Please note that this option does not
       conform to the C standards, but it results in smaller code size.
  
! '-mmain-is-OS_task'
!      Do not save registers in 'main'.  The effect is the same like
!      attaching attribute *note 'OS_task': AVR Function Attributes. to
!      'main'.  It is activated per default if optimization is on.
  
! '-mno-interrupts'
       Generated code is not compatible with hardware interrupts.  Code
       size is smaller.
  
! '-mrelax'
!      Try to replace 'CALL' resp. 'JMP' instruction by the shorter
!      'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
!      just adds the '--mlink-relax' option to the assembler's command
!      line and the '--relax' option to the linker's command line.
  
       Jump relaxing is performed by the linker because jump offsets are
       not known before code is located.  Therefore, the assembler code
--- 22539,22599 ----
       perform several calls to functions that get their arguments on the
       stack like calls to printf-like functions.
  
! ‘-mbranch-cost=COST’
       Set the branch costs for conditional branch instructions to COST.
       Reasonable values for COST are small, non-negative integers.  The
       default branch cost is 0.
  
! ‘-mcall-prologues’
       Functions prologues/epilogues are expanded as calls to appropriate
       subroutines.  Code size is smaller.
  
! ‘-mfuse-add’
! ‘-mno-fuse-add’
! ‘-mfuse-add=LEVEL’
       Optimize indirect memory accesses on reduced Tiny devices.  The
!      default uses ‘LEVEL=1’ for optimizations ‘-Og’ and ‘-O1’, and
!      ‘LEVEL=2’ for higher optimizations.  Valid values for LEVEL are
!      ‘0’, ‘1’ and ‘2’.
  
! ‘-mdouble=BITS’
! ‘-mlong-double=BITS’
!      Set the size (in bits) of the ‘double’ or ‘long double’ type,
       respectively.  Possible values for BITS are 32 and 64.  Whether or
       not a specific value for BITS is allowed depends on the
!      ‘--with-double=’ and ‘--with-long-double=’
       configure options (https://gcc.gnu.org/install/configure.html#avr),
       and the same applies for the default values of the options.
  
! ‘-mgas-isr-prologues’
!      Interrupt service routines (ISRs) may use the ‘__gcc_isr’ pseudo
       instruction supported by GNU Binutils.  If this option is on, the
       feature can still be disabled for individual ISRs by means of the
!      *note ‘no_gccisr’: AVR Function Attributes. function attribute.
       This feature is activated per default if optimization is on (but
!      not with ‘-Og’, *note Optimize Options::), and if GNU Binutils
       support PR21683 (https://sourceware.org/PR21683).
  
! ‘-mint8’
!      Assume ‘int’ to be 8-bit integer.  This affects the sizes of all
!      types: a ‘char’ is 1 byte, an ‘int’ is 1 byte, a ‘long’ is 2 bytes,
!      and ‘long long’ is 4 bytes.  Please note that this option does not
       conform to the C standards, but it results in smaller code size.
  
! ‘-mmain-is-OS_task’
!      Do not save registers in ‘main’.  The effect is the same like
!      attaching attribute *note ‘OS_task’: AVR Function Attributes. to
!      ‘main’.  It is activated per default if optimization is on.
  
! ‘-mno-interrupts’
       Generated code is not compatible with hardware interrupts.  Code
       size is smaller.
  
! ‘-mrelax’
!      Try to replace ‘CALL’ resp. ‘JMP’ instruction by the shorter
!      ‘RCALL’ resp. ‘RJMP’ instruction if applicable.  Setting ‘-mrelax’
!      just adds the ‘--mlink-relax’ option to the assembler's command
!      line and the ‘--relax’ option to the linker's command line.
  
       Jump relaxing is performed by the linker because jump offsets are
       not known before code is located.  Therefore, the assembler code
*************** These options are defined for AVR implem
*** 22590,22658 ****
       executable may differ from instructions in the assembler code.
  
       Relaxing must be turned on if linker stubs are needed, see the
!      section on 'EIND' and linker stubs below.
  
! '-mrodata-in-ram'
! '-mno-rodata-in-ram'
!      Locate the '.rodata' sections for read-only data in RAM resp. in
       program memory.  For most devices, there is no choice and this
       option acts rather like an assertion.
  
!      Since v14 and for the AVR64* and AVR128* devices, '.rodata' is
       located in flash memory per default, provided the required GNU
       Binutils support (PR31124 (https://sourceware.org/PR31124)) is
!      available.  In that case, '-mrodata-in-ram' can be used to return
!      to the old layout with '.rodata' in RAM.
  
! '-mstrict-X'
!      Use address register 'X' in a way proposed by the hardware.  This
!      means that 'X' is only used in indirect, post-increment or
       pre-decrement addressing.
  
!      Without this option, the 'X' register may be used in the same way
!      as 'Y' or 'Z' which then is emulated by additional instructions.
!      For example, loading a value with 'X+const' addressing with a small
!      non-negative 'const < 64' to a register RN is performed as
  
            adiw r26, const   ; X += const
            ld   RN, X        ; RN = *X
            sbiw r26, const   ; X -= const
  
! '-mtiny-stack'
       Only change the lower 8 bits of the stack pointer.
  
! '-mfract-convert-truncate'
       Allow to use truncation instead of rounding towards zero for
       fractional fixed-point types.
  
! '-nodevicelib'
!      Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
  
! '-nodevicespecs'
!      Don't add '-specs=device-specs/specs-MCU' to the compiler driver's
       command line.  The user takes responsibility for supplying the
       sub-processes like compiler proper, assembler and linker with
       appropriate command line options.  This means that the user has to
       supply her private device specs file by means of
!      '-specs=PATH-TO-SPECS-FILE'.  There is no more need for option
!      '-mmcu=MCU'.
  
       This option can also serve as a replacement for the older way of
!      specifying custom device-specs files that needed '-B SOME-PATH' to
!      point to a directory which contains a folder named 'device-specs'
!      which contains a specs file named 'specs-MCU', where MCU was
!      specified by '-mmcu=MCU'.
  
! '-Waddr-space-convert'
       Warn about conversions between address spaces in the case where the
       resulting address space is not contained in the incoming address
       space.
  
! '-Wmisspelled-isr'
       Warn if the ISR is misspelled, i.e. without __vector prefix.
       Enabled by default.
  
! 3.19.6.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
  ................................................................
  
  Pointers in the implementation are 16 bits wide.  The address of a
--- 22601,22669 ----
       executable may differ from instructions in the assembler code.
  
       Relaxing must be turned on if linker stubs are needed, see the
!      section on ‘EIND’ and linker stubs below.
  
! ‘-mrodata-in-ram’
! ‘-mno-rodata-in-ram’
!      Locate the ‘.rodata’ sections for read-only data in RAM resp. in
       program memory.  For most devices, there is no choice and this
       option acts rather like an assertion.
  
!      Since v14 and for the AVR64* and AVR128* devices, ‘.rodata’ is
       located in flash memory per default, provided the required GNU
       Binutils support (PR31124 (https://sourceware.org/PR31124)) is
!      available.  In that case, ‘-mrodata-in-ram’ can be used to return
!      to the old layout with ‘.rodata’ in RAM.
  
! ‘-mstrict-X’
!      Use address register ‘X’ in a way proposed by the hardware.  This
!      means that ‘X’ is only used in indirect, post-increment or
       pre-decrement addressing.
  
!      Without this option, the ‘X’ register may be used in the same way
!      as ‘Y’ or ‘Z’ which then is emulated by additional instructions.
!      For example, loading a value with ‘X+const’ addressing with a small
!      non-negative ‘const < 64’ to a register RN is performed as
  
            adiw r26, const   ; X += const
            ld   RN, X        ; RN = *X
            sbiw r26, const   ; X -= const
  
! ‘-mtiny-stack’
       Only change the lower 8 bits of the stack pointer.
  
! ‘-mfract-convert-truncate’
       Allow to use truncation instead of rounding towards zero for
       fractional fixed-point types.
  
! ‘-nodevicelib’
!      Don't link against AVR-LibC's device specific library ‘lib<mcu>.a’.
  
! ‘-nodevicespecs’
!      Don't add ‘-specs=device-specs/specs-MCU’ to the compiler driver's
       command line.  The user takes responsibility for supplying the
       sub-processes like compiler proper, assembler and linker with
       appropriate command line options.  This means that the user has to
       supply her private device specs file by means of
!      ‘-specs=PATH-TO-SPECS-FILE’.  There is no more need for option
!      ‘-mmcu=MCU’.
  
       This option can also serve as a replacement for the older way of
!      specifying custom device-specs files that needed ‘-B SOME-PATH’ to
!      point to a directory which contains a folder named ‘device-specs’
!      which contains a specs file named ‘specs-MCU’, where MCU was
!      specified by ‘-mmcu=MCU’.
  
! ‘-Waddr-space-convert’
       Warn about conversions between address spaces in the case where the
       resulting address space is not contained in the incoming address
       space.
  
! ‘-Wmisspelled-isr’
       Warn if the ISR is misspelled, i.e. without __vector prefix.
       Enabled by default.
  
! 3.19.6.1 ‘EIND’ and Devices with More Than 128 Ki Bytes of Flash
  ................................................................
  
  Pointers in the implementation are 16 bits wide.  The address of a
*************** and calls can target any code address in
*** 22661,22710 ****
  
   In order to facilitate indirect jump on devices with more than 128 Ki
  bytes of program memory space, there is a special function register
! called 'EIND' that serves as most significant part of the target address
! when 'EICALL' or 'EIJMP' instructions are used.
  
   Indirect jumps and calls on these devices are handled as follows by the
  compiler and are subject to some limitations:
  
!    * The compiler never sets 'EIND'.
  
!    * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
!      instructions or might read 'EIND' directly in order to emulate an
!      indirect call/jump by means of a 'RET' instruction.
  
!    * The compiler assumes that 'EIND' never changes during the startup
!      code or during the application.  In particular, 'EIND' is not
       saved/restored in function or interrupt service routine
       prologue/epilogue.
  
!    * For indirect calls to functions and computed goto, the linker
       generates _stubs_.  Stubs are jump pads sometimes also called
       _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
       The stub contains a direct jump to the desired address.
  
!    * Linker relaxation must be turned on so that the linker generates
       the stubs correctly in all situations.  See the compiler option
!      '-mrelax' and the linker option '--relax'.  There are corner cases
       where the linker is supposed to generate stubs but aborts without
       relaxation and without a helpful error message.
  
!    * The default linker script is arranged for code with 'EIND = 0'.  If
!      code is supposed to work for a setup with 'EIND != 0', a custom
       linker script has to be used in order to place the sections whose
!      name start with '.trampolines' into the segment where 'EIND' points
       to.
  
!    * The startup code from libgcc never sets 'EIND'.  Notice that
       startup code is a blend of code from libgcc and AVR-LibC. For the
!      impact of AVR-LibC on 'EIND', see the
       AVR-LibC user manual (https://www.nongnu.org/avr-libc/user-manual/).
  
!    * It is legitimate for user-specific startup code to set up 'EIND'
       early, for example by means of initialization code located in
!      section '.init3'.  Such code runs prior to general startup code
       that initializes RAM and calls constructors, but after the bit of
!      startup code from AVR-LibC that sets 'EIND' to the segment where
       the vector table is located.
            #include <avr/io.h>
  
--- 22672,22721 ----
  
   In order to facilitate indirect jump on devices with more than 128 Ki
  bytes of program memory space, there is a special function register
! called ‘EIND’ that serves as most significant part of the target address
! when ‘EICALL’ or ‘EIJMP’ instructions are used.
  
   Indirect jumps and calls on these devices are handled as follows by the
  compiler and are subject to some limitations:
  
!    • The compiler never sets ‘EIND’.
  
!    • The compiler uses ‘EIND’ implicitly in ‘EICALL’/‘EIJMP’
!      instructions or might read ‘EIND’ directly in order to emulate an
!      indirect call/jump by means of a ‘RET’ instruction.
  
!    • The compiler assumes that ‘EIND’ never changes during the startup
!      code or during the application.  In particular, ‘EIND’ is not
       saved/restored in function or interrupt service routine
       prologue/epilogue.
  
!    • For indirect calls to functions and computed goto, the linker
       generates _stubs_.  Stubs are jump pads sometimes also called
       _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
       The stub contains a direct jump to the desired address.
  
!    • Linker relaxation must be turned on so that the linker generates
       the stubs correctly in all situations.  See the compiler option
!      ‘-mrelax’ and the linker option ‘--relax’.  There are corner cases
       where the linker is supposed to generate stubs but aborts without
       relaxation and without a helpful error message.
  
!    • The default linker script is arranged for code with ‘EIND = 0’.  If
!      code is supposed to work for a setup with ‘EIND != 0’, a custom
       linker script has to be used in order to place the sections whose
!      name start with ‘.trampolines’ into the segment where ‘EIND’ points
       to.
  
!    • The startup code from libgcc never sets ‘EIND’.  Notice that
       startup code is a blend of code from libgcc and AVR-LibC. For the
!      impact of AVR-LibC on ‘EIND’, see the
       AVR-LibC user manual (https://www.nongnu.org/avr-libc/user-manual/).
  
!    • It is legitimate for user-specific startup code to set up ‘EIND’
       early, for example by means of initialization code located in
!      section ‘.init3’.  Such code runs prior to general startup code
       that initializes RAM and calls constructors, but after the bit of
!      startup code from AVR-LibC that sets ‘EIND’ to the segment where
       the vector table is located.
            #include <avr/io.h>
  
*************** compiler and are subject to some limitat
*** 22716,22747 ****
                              "out %i0,r24" :: "n" (&EIND) : "r24","memory");
            }
  
!      The '__trampolines_start' symbol is defined in the linker script.
  
!    * Stubs are generated automatically by the linker if the following
       two conditions are met:
  
!         - The address of a label is taken by means of the 'gs' modifier
            (short for _generate stubs_) like so:
                 LDI r24, lo8(gs(FUNC))
                 LDI r25, hi8(gs(FUNC))
!         - The final location of that label is in a code segment
            _outside_ the segment where the stubs are located.
  
!    * The compiler emits such 'gs' modifiers for code labels in the
       following situations:
!         - Taking address of a function or code label.
!         - Computed goto.
!         - If prologue-save function is used, see '-mcall-prologues'
            command-line option.
!         - Switch/case dispatch tables.  If you do not want such dispatch
!           tables you can specify the '-fno-jump-tables' command-line
            option.
!         - C and C++ constructors/destructors called during
            startup/shutdown.
!         - If the tools hit a 'gs()' modifier explained above.
  
!    * Jumping to non-symbolic addresses like so is _not_ supported:
  
            int main (void)
            {
--- 22727,22758 ----
                              "out %i0,r24" :: "n" (&EIND) : "r24","memory");
            }
  
!      The ‘__trampolines_start’ symbol is defined in the linker script.
  
!    • Stubs are generated automatically by the linker if the following
       two conditions are met:
  
!         − The address of a label is taken by means of the ‘gs’ modifier
            (short for _generate stubs_) like so:
                 LDI r24, lo8(gs(FUNC))
                 LDI r25, hi8(gs(FUNC))
!         − The final location of that label is in a code segment
            _outside_ the segment where the stubs are located.
  
!    • The compiler emits such ‘gs’ modifiers for code labels in the
       following situations:
!         − Taking address of a function or code label.
!         − Computed goto.
!         − If prologue-save function is used, see ‘-mcall-prologues’
            command-line option.
!         − Switch/case dispatch tables.  If you do not want such dispatch
!           tables you can specify the ‘-fno-jump-tables’ command-line
            option.
!         − C and C++ constructors/destructors called during
            startup/shutdown.
!         − If the tools hit a ‘gs()’ modifier explained above.
  
!    • Jumping to non-symbolic addresses like so is _not_ supported:
  
            int main (void)
            {
*************** compiler and are subject to some limitat
*** 22750,22756 ****
            }
  
       Instead, a stub has to be set up, i.e. the function has to be
!      called through a symbol ('func_4' in the example):
  
            int main (void)
            {
--- 22761,22767 ----
            }
  
       Instead, a stub has to be set up, i.e. the function has to be
!      called through a symbol (‘func_4’ in the example):
  
            int main (void)
            {
*************** compiler and are subject to some limitat
*** 22760,22797 ****
                return func_4();
            }
  
!      and the application be linked with '-Wl,--defsym,func_4=0x4'.
!      Alternatively, 'func_4' can be defined in the linker script.
  
! 3.19.6.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
  .........................................................................................
  
  Some AVR devices support memories larger than the 64 KiB range that can
  be accessed with 16-bit pointers.  To access memory locations outside
! this 64 KiB range, the content of a 'RAMP' register is used as high part
! of the address: The 'X', 'Y', 'Z' address register is concatenated with
! the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
! to get a wide address.  Similarly, 'RAMPD' is used together with direct
  addressing.
  
!    * The startup code initializes the 'RAMP' special function registers
       with zero.
  
!    * If a *note named address space: AVR Named Address Spaces. other
!      than generic or '__flash' is used, then 'RAMPZ' is set as needed
       before the operation.
  
!    * If the device supports RAM larger than 64 KiB and the compiler
!      needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
       reset to zero after the operation.
  
!    * If the device comes with a specific 'RAMP' register, the ISR
       prologue/epilogue saves/restores that SFR and initializes it with
       zero in case the ISR code might (implicitly) use it.
  
!    * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
       you use inline assembler to read from locations outside the 16-bit
!      address range and change one of the 'RAMP' registers, you must
       reset it to zero after the access.
  
  3.19.6.3 AVR Built-in Macros
--- 22771,22808 ----
                return func_4();
            }
  
!      and the application be linked with ‘-Wl,--defsym,func_4=0x4’.
!      Alternatively, ‘func_4’ can be defined in the linker script.
  
! 3.19.6.2 Handling of the ‘RAMPD’, ‘RAMPX’, ‘RAMPY’ and ‘RAMPZ’ Special Function Registers
  .........................................................................................
  
  Some AVR devices support memories larger than the 64 KiB range that can
  be accessed with 16-bit pointers.  To access memory locations outside
! this 64 KiB range, the content of a ‘RAMP’ register is used as high part
! of the address: The ‘X’, ‘Y’, ‘Z’ address register is concatenated with
! the ‘RAMPX’, ‘RAMPY’, ‘RAMPZ’ special function register, respectively,
! to get a wide address.  Similarly, ‘RAMPD’ is used together with direct
  addressing.
  
!    • The startup code initializes the ‘RAMP’ special function registers
       with zero.
  
!    • If a *note named address space: AVR Named Address Spaces. other
!      than generic or ‘__flash’ is used, then ‘RAMPZ’ is set as needed
       before the operation.
  
!    • If the device supports RAM larger than 64 KiB and the compiler
!      needs to change ‘RAMPZ’ to accomplish an operation, ‘RAMPZ’ is
       reset to zero after the operation.
  
!    • If the device comes with a specific ‘RAMP’ register, the ISR
       prologue/epilogue saves/restores that SFR and initializes it with
       zero in case the ISR code might (implicitly) use it.
  
!    • RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
       you use inline assembler to read from locations outside the 16-bit
!      address range and change one of the ‘RAMP’ registers, you must
       reset it to zero after the access.
  
  3.19.6.3 AVR Built-in Macros
*************** addressing.
*** 22800,22991 ****
  GCC defines several built-in macros so that the user code can test for
  the presence or absence of features.  Almost any of the following
  built-in macros are deduced from device capabilities and thus triggered
! by the '-mmcu=' command-line option.
  
   For even more AVR-specific built-in macros see *note AVR Named Address
  Spaces:: and *note AVR Built-in Functions::.
  
! '__AVR_ARCH__'
       Build-in macro that resolves to a decimal number that identifies
!      the architecture and depends on the '-mmcu=MCU' option.  Possible
       values are:
  
!      '2', '25', '3', '31', '35', '4', '5', '51', '6'
  
!      for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
!      'avr51', 'avr6',
  
       respectively and
  
!      '100', '102', '103', '104', '105', '106', '107'
  
!      for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
!      'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
       specifies a device, this built-in macro is set accordingly.  For
!      example, with '-mmcu=atmega8' the macro is defined to '4'.
  
! '__AVR_DEVICE__'
!      Setting '-mmcu=DEVICE' defines this built-in macro which reflects
!      the device's name.  For example, '-mmcu=atmega8' defines the
!      built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
!      '__AVR_ATtiny261A__', etc.
  
!      The built-in macros' names follow the scheme '__AVR_DEVICE__' where
       DEVICE is the device name as from the AVR user manual.  The
       difference between DEVICE in the built-in macro and DEVICE in
!      '-mmcu=DEVICE' is that the latter is always lowercase.
  
       If DEVICE is not a device but only a core architecture like
!      'avr51', this macro is not defined.
  
! '__AVR_DEVICE_NAME__'
!      Setting '-mmcu=DEVICE' defines this built-in macro to the device's
!      name.  For example, with '-mmcu=atmega8' the macro is defined to
!      'atmega8'.
  
       If DEVICE is not a device but only a core architecture like
!      'avr51', this macro is not defined.
  
! '__AVR_XMEGA__'
       The device / architecture belongs to the XMEGA family of devices.
  
! '__AVR_HAVE_ADIW__'
!      The device has the 'ADIW' and 'SBIW' instructions.
  
! '__AVR_HAVE_ELPM__'
!      The device has the 'ELPM' instruction.
  
! '__AVR_HAVE_ELPMX__'
!      The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
  
! '__AVR_HAVE_LPMX__'
!      The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
  
! '__AVR_HAVE_MOVW__'
!      The device has the 'MOVW' instruction to perform 16-bit
       register-register moves.
  
! '__AVR_HAVE_MUL__'
       The device has a hardware multiplier.
  
! '__AVR_HAVE_JMP_CALL__'
!      The device has the 'JMP' and 'CALL' instructions.  This is the case
       for devices with more than 8 KiB of program memory.
  
! '__AVR_HAVE_EIJMP_EICALL__'
! '__AVR_3_BYTE_PC__'
!      The device has the 'EIJMP' and 'EICALL' instructions.  This is the
       case for devices with more than 128 KiB of program memory.  This
       also means that the program counter (PC) is 3 bytes wide.
  
! '__AVR_2_BYTE_PC__'
       The program counter (PC) is 2 bytes wide.  This is the case for
       devices with up to 128 KiB of program memory.
  
! '__AVR_HAVE_8BIT_SP__'
! '__AVR_HAVE_16BIT_SP__'
       The stack pointer (SP) register is treated as 8-bit respectively
       16-bit register by the compiler.  The definition of these macros is
!      affected by '-mtiny-stack'.
  
! '__AVR_HAVE_SPH__'
! '__AVR_SP8__'
       The device has the SPH (high part of stack pointer) special
       function register or has an 8-bit stack pointer, respectively.  The
!      definition of these macros is affected by '-mmcu=' and in the cases
!      of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
  
! '__AVR_HAVE_RAMPD__'
! '__AVR_HAVE_RAMPX__'
! '__AVR_HAVE_RAMPY__'
! '__AVR_HAVE_RAMPZ__'
!      The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
       function register, respectively.
  
! '__NO_INTERRUPTS__'
!      This macro reflects the '-mno-interrupts' command-line option.
  
! '__AVR_ERRATA_SKIP__'
! '__AVR_ERRATA_SKIP_JMP_CALL__'
       Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
       instructions because of a hardware erratum.  Skip instructions are
!      'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
!      only defined if '__AVR_HAVE_JMP_CALL__' is also set.
  
! '__AVR_ISA_RMW__'
       The device has Read-Modify-Write instructions (XCH, LAC, LAS and
       LAT).
  
! '__AVR_SFR_OFFSET__=OFFSET'
       Instructions that can address I/O special function registers
!      directly like 'IN', 'OUT', 'SBI', etc. may use a different address
!      as if addressed by an instruction to access RAM like 'LD' or 'STS'.
       This offset depends on the device architecture and has to be
       subtracted from the RAM address in order to get the respective
       I/O address.
  
! '__AVR_SHORT_CALLS__'
!      The '-mshort-calls' command line option is set.
  
! '__AVR_PM_BASE_ADDRESS__=ADDR'
!      Some devices support reading from flash memory by means of 'LD*'
       instructions.  The flash memory is seen in the data address space
!      at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
       defined, this feature is not available.  If defined, the address
!      space is linear and there is no need to put '.rodata' into RAM.
       This is handled by the default linker description file, and is
!      currently available for 'avrtiny' and 'avrxmega3'.  Even more
!      convenient, there is no need to use address spaces like '__flash'
!      or features like attribute 'progmem' and 'pgm_read_*'.
  
! '__AVR_HAVE_FLMAP__'
       This macro is defined provided the following conditions are met:
!         * The device has the 'NVMCTRL_CTRLB.FLMAP' bitfield.  This
            applies to the AVR64* and AVR128* devices.
!         * It's not known at assembler-time which emulation will be used.
       This implies the compiler was configured with GNU Binutils that
       implement PR31124 (https://sourceware.org/PR31124).
  
! '__AVR_RODATA_IN_RAM__'
       This macro is undefined when the code is compiled for a core
       architecture.
  
       When the code is compiled for a device, the macro is defined to 1
!      when the '.rodata' sections for read-only data is located in RAM;
       and defined to 0, otherwise.
  
! '__WITH_AVRLIBC__'
       The compiler is configured to be used together with AVR-Libc.  See
!      the '--with-avrlibc' configure option.
  
! '__HAVE_DOUBLE_MULTILIB__'
!      Defined if '-mdouble=' acts as a multilib option.
  
! '__HAVE_DOUBLE32__'
! '__HAVE_DOUBLE64__'
       Defined if the compiler supports 32-bit double resp.  64-bit
!      double.  The actual layout is specified by option '-mdouble='.
  
! '__DEFAULT_DOUBLE__'
!      The size in bits of 'double' if '-mdouble=' is not set.  To test
!      the layout of 'double' in a program, use the built-in macro
!      '__SIZEOF_DOUBLE__'.
  
! '__HAVE_LONG_DOUBLE32__'
! '__HAVE_LONG_DOUBLE64__'
! '__HAVE_LONG_DOUBLE_MULTILIB__'
! '__DEFAULT_LONG_DOUBLE__'
!      Same as above, but for 'long double' instead of 'double'.
  
! '__WITH_DOUBLE_COMPARISON__'
!      Reflects the '--with-double-comparison={tristate|bool|libf7}'
       configure option (https://gcc.gnu.org/install/configure.html#avr)
!      and is defined to '2' or '3'.
  
! '__WITH_LIBF7_LIBGCC__'
! '__WITH_LIBF7_MATH__'
! '__WITH_LIBF7_MATH_SYMBOLS__'
!      Reflects the '--with-libf7={libgcc|math|math-symbols}'
       configure option (https://gcc.gnu.org/install/configure.html#avr).
  
  3.19.6.4 AVR Internal Options
--- 22811,23002 ----
  GCC defines several built-in macros so that the user code can test for
  the presence or absence of features.  Almost any of the following
  built-in macros are deduced from device capabilities and thus triggered
! by the ‘-mmcu=’ command-line option.
  
   For even more AVR-specific built-in macros see *note AVR Named Address
  Spaces:: and *note AVR Built-in Functions::.
  
! ‘__AVR_ARCH__’
       Build-in macro that resolves to a decimal number that identifies
!      the architecture and depends on the ‘-mmcu=MCU’ option.  Possible
       values are:
  
!      ‘2’, ‘25’, ‘3’, ‘31’, ‘35’, ‘4’, ‘5’, ‘51’, ‘6’
  
!      for MCU=‘avr2’, ‘avr25’, ‘avr3’, ‘avr31’, ‘avr35’, ‘avr4’, ‘avr5’,
!      ‘avr51’, ‘avr6’,
  
       respectively and
  
!      ‘100’, ‘102’, ‘103’, ‘104’, ‘105’, ‘106’, ‘107’
  
!      for MCU=‘avrtiny’, ‘avrxmega2’, ‘avrxmega3’, ‘avrxmega4’,
!      ‘avrxmega5’, ‘avrxmega6’, ‘avrxmega7’, respectively.  If MCU
       specifies a device, this built-in macro is set accordingly.  For
!      example, with ‘-mmcu=atmega8’ the macro is defined to ‘4’.
  
! ‘__AVR_DEVICE__’
!      Setting ‘-mmcu=DEVICE’ defines this built-in macro which reflects
!      the device's name.  For example, ‘-mmcu=atmega8’ defines the
!      built-in macro ‘__AVR_ATmega8__’, ‘-mmcu=attiny261a’ defines
!      ‘__AVR_ATtiny261A__’, etc.
  
!      The built-in macros' names follow the scheme ‘__AVR_DEVICE__’ where
       DEVICE is the device name as from the AVR user manual.  The
       difference between DEVICE in the built-in macro and DEVICE in
!      ‘-mmcu=DEVICE’ is that the latter is always lowercase.
  
       If DEVICE is not a device but only a core architecture like
!      ‘avr51’, this macro is not defined.
  
! ‘__AVR_DEVICE_NAME__’
!      Setting ‘-mmcu=DEVICE’ defines this built-in macro to the device's
!      name.  For example, with ‘-mmcu=atmega8’ the macro is defined to
!      ‘atmega8’.
  
       If DEVICE is not a device but only a core architecture like
!      ‘avr51’, this macro is not defined.
  
! ‘__AVR_XMEGA__’
       The device / architecture belongs to the XMEGA family of devices.
  
! ‘__AVR_HAVE_ADIW__’
!      The device has the ‘ADIW’ and ‘SBIW’ instructions.
  
! ‘__AVR_HAVE_ELPM__’
!      The device has the ‘ELPM’ instruction.
  
! ‘__AVR_HAVE_ELPMX__’
!      The device has the ‘ELPM RN,Z’ and ‘ELPM RN,Z+’ instructions.
  
! ‘__AVR_HAVE_LPMX__’
!      The device has the ‘LPM RN,Z’ and ‘LPM RN,Z+’ instructions.
  
! ‘__AVR_HAVE_MOVW__’
!      The device has the ‘MOVW’ instruction to perform 16-bit
       register-register moves.
  
! ‘__AVR_HAVE_MUL__’
       The device has a hardware multiplier.
  
! ‘__AVR_HAVE_JMP_CALL__’
!      The device has the ‘JMP’ and ‘CALL’ instructions.  This is the case
       for devices with more than 8 KiB of program memory.
  
! ‘__AVR_HAVE_EIJMP_EICALL__’
! ‘__AVR_3_BYTE_PC__’
!      The device has the ‘EIJMP’ and ‘EICALL’ instructions.  This is the
       case for devices with more than 128 KiB of program memory.  This
       also means that the program counter (PC) is 3 bytes wide.
  
! ‘__AVR_2_BYTE_PC__’
       The program counter (PC) is 2 bytes wide.  This is the case for
       devices with up to 128 KiB of program memory.
  
! ‘__AVR_HAVE_8BIT_SP__’
! ‘__AVR_HAVE_16BIT_SP__’
       The stack pointer (SP) register is treated as 8-bit respectively
       16-bit register by the compiler.  The definition of these macros is
!      affected by ‘-mtiny-stack’.
  
! ‘__AVR_HAVE_SPH__’
! ‘__AVR_SP8__’
       The device has the SPH (high part of stack pointer) special
       function register or has an 8-bit stack pointer, respectively.  The
!      definition of these macros is affected by ‘-mmcu=’ and in the cases
!      of ‘-mmcu=avr2’ and ‘-mmcu=avr25’ also by ‘-msp8’.
  
! ‘__AVR_HAVE_RAMPD__’
! ‘__AVR_HAVE_RAMPX__’
! ‘__AVR_HAVE_RAMPY__’
! ‘__AVR_HAVE_RAMPZ__’
!      The device has the ‘RAMPD’, ‘RAMPX’, ‘RAMPY’, ‘RAMPZ’ special
       function register, respectively.
  
! ‘__NO_INTERRUPTS__’
!      This macro reflects the ‘-mno-interrupts’ command-line option.
  
! ‘__AVR_ERRATA_SKIP__’
! ‘__AVR_ERRATA_SKIP_JMP_CALL__’
       Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
       instructions because of a hardware erratum.  Skip instructions are
!      ‘SBRS’, ‘SBRC’, ‘SBIS’, ‘SBIC’ and ‘CPSE’.  The second macro is
!      only defined if ‘__AVR_HAVE_JMP_CALL__’ is also set.
  
! ‘__AVR_ISA_RMW__’
       The device has Read-Modify-Write instructions (XCH, LAC, LAS and
       LAT).
  
! ‘__AVR_SFR_OFFSET__=OFFSET’
       Instructions that can address I/O special function registers
!      directly like ‘IN’, ‘OUT’, ‘SBI’, etc. may use a different address
!      as if addressed by an instruction to access RAM like ‘LD’ or ‘STS’.
       This offset depends on the device architecture and has to be
       subtracted from the RAM address in order to get the respective
       I/O address.
  
! ‘__AVR_SHORT_CALLS__’
!      The ‘-mshort-calls’ command line option is set.
  
! ‘__AVR_PM_BASE_ADDRESS__=ADDR’
!      Some devices support reading from flash memory by means of ‘LD*’
       instructions.  The flash memory is seen in the data address space
!      at an offset of ‘__AVR_PM_BASE_ADDRESS__’.  If this macro is not
       defined, this feature is not available.  If defined, the address
!      space is linear and there is no need to put ‘.rodata’ into RAM.
       This is handled by the default linker description file, and is
!      currently available for ‘avrtiny’ and ‘avrxmega3’.  Even more
!      convenient, there is no need to use address spaces like ‘__flash’
!      or features like attribute ‘progmem’ and ‘pgm_read_*’.
  
! ‘__AVR_HAVE_FLMAP__’
       This macro is defined provided the following conditions are met:
!         • The device has the ‘NVMCTRL_CTRLB.FLMAP’ bitfield.  This
            applies to the AVR64* and AVR128* devices.
!         • It's not known at assembler-time which emulation will be used.
       This implies the compiler was configured with GNU Binutils that
       implement PR31124 (https://sourceware.org/PR31124).
  
! ‘__AVR_RODATA_IN_RAM__’
       This macro is undefined when the code is compiled for a core
       architecture.
  
       When the code is compiled for a device, the macro is defined to 1
!      when the ‘.rodata’ sections for read-only data is located in RAM;
       and defined to 0, otherwise.
  
! ‘__WITH_AVRLIBC__’
       The compiler is configured to be used together with AVR-Libc.  See
!      the ‘--with-avrlibc’ configure option.
  
! ‘__HAVE_DOUBLE_MULTILIB__’
!      Defined if ‘-mdouble=’ acts as a multilib option.
  
! ‘__HAVE_DOUBLE32__’
! ‘__HAVE_DOUBLE64__’
       Defined if the compiler supports 32-bit double resp.  64-bit
!      double.  The actual layout is specified by option ‘-mdouble=’.
  
! ‘__DEFAULT_DOUBLE__’
!      The size in bits of ‘double’ if ‘-mdouble=’ is not set.  To test
!      the layout of ‘double’ in a program, use the built-in macro
!      ‘__SIZEOF_DOUBLE__’.
  
! ‘__HAVE_LONG_DOUBLE32__’
! ‘__HAVE_LONG_DOUBLE64__’
! ‘__HAVE_LONG_DOUBLE_MULTILIB__’
! ‘__DEFAULT_LONG_DOUBLE__’
!      Same as above, but for ‘long double’ instead of ‘double’.
  
! ‘__WITH_DOUBLE_COMPARISON__’
!      Reflects the ‘--with-double-comparison={tristate|bool|libf7}’
       configure option (https://gcc.gnu.org/install/configure.html#avr)
!      and is defined to ‘2’ or ‘3’.
  
! ‘__WITH_LIBF7_LIBGCC__’
! ‘__WITH_LIBF7_MATH__’
! ‘__WITH_LIBF7_MATH_SYMBOLS__’
!      Reflects the ‘--with-libf7={libgcc|math|math-symbols}’
       configure option (https://gcc.gnu.org/install/configure.html#avr).
  
  3.19.6.4 AVR Internal Options
*************** sub-optimal or wrong code.  They are doc
*** 22999,23033 ****
  order to get a better understanding of
  device specs (https://gcc.gnu.org/wiki/avr-gcc#spec-files) files.
  
! '-mn-flash=NUM'
       Assume that the flash memory has a size of NUM times 64 KiB. This
!      determines which '__flashN' address spaces are available.
  
! '-mflmap'
!      The device has the 'FLMAP' bit field located in special function
!      register 'NVMCTRL_CTRLB'.
  
! '-mrmw'
       Assume that the device supports the Read-Modify-Write instructions
!      'XCH', 'LAC', 'LAS' and 'LAT'.
  
! '-mshort-calls'
  
!      Assume that 'RJMP' and 'RCALL' can target the whole program memory.
       This option is used for multilib generation and selection for the
!      devices from architecture 'avrxmega3'.
  
! '-mskip-bug'
  
!      Generate code without skips ('CPSE', 'SBRS', 'SBRC', 'SBIS',
!      'SBIC') over 32-bit instructions.
  
! '-msp8'
       Treat the stack pointer register as an 8-bit register, i.e. assume
       the high byte of the stack pointer is zero.  This option is used by
!      the compiler to select and build multilibs for architectures 'avr2'
!      and 'avr25'.  These architectures mix devices with and without
!      'SPH'.
  
  
  File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
--- 23010,23044 ----
  order to get a better understanding of
  device specs (https://gcc.gnu.org/wiki/avr-gcc#spec-files) files.
  
! ‘-mn-flash=NUM’
       Assume that the flash memory has a size of NUM times 64 KiB. This
!      determines which ‘__flashN’ address spaces are available.
  
! ‘-mflmap’
!      The device has the ‘FLMAP’ bit field located in special function
!      register ‘NVMCTRL_CTRLB’.
  
! ‘-mrmw’
       Assume that the device supports the Read-Modify-Write instructions
!      ‘XCH’, ‘LAC’, ‘LAS’ and ‘LAT’.
  
! ‘-mshort-calls’
  
!      Assume that ‘RJMP’ and ‘RCALL’ can target the whole program memory.
       This option is used for multilib generation and selection for the
!      devices from architecture ‘avrxmega3’.
  
! ‘-mskip-bug’
  
!      Generate code without skips (‘CPSE’, ‘SBRS’, ‘SBRC’, ‘SBIS’,
!      ‘SBIC’) over 32-bit instructions.
  
! ‘-msp8’
       Treat the stack pointer register as an 8-bit register, i.e. assume
       the high byte of the stack pointer is zero.  This option is used by
!      the compiler to select and build multilibs for architectures ‘avr2’
!      and ‘avr25’.  These architectures mix devices with and without
!      ‘SPH’.
  
  
  File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
*************** File: gcc.info,  Node: Blackfin Options,
*** 23035,23152 ****
  3.19.7 Blackfin Options
  -----------------------
  
! '-mcpu=CPU[-SIREVISION]'
       Specifies the name of the target Blackfin processor.  Currently,
!      CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
!      'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
!      'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
!      'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
!      'bf548m', 'bf549m', 'bf561', 'bf592'.
  
       The optional SIREVISION specifies the silicon revision of the
       target Blackfin processor.  Any workarounds available for the
!      targeted silicon revision are enabled.  If SIREVISION is 'none', no
!      workarounds are enabled.  If SIREVISION is 'any', all workarounds
!      for the targeted processor are enabled.  The '__SILICON_REVISION__'
       macro is defined to two hexadecimal digits representing the major
       and minor numbers in the silicon revision.  If SIREVISION is
!      'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
!      is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
       this optional SIREVISION is not used, GCC assumes the latest known
       silicon revision of the targeted Blackfin processor.
  
       GCC defines a preprocessor macro for the specified CPU.  For the
!      'bfin-elf' toolchain, this option causes the hardware BSP provided
!      by libgloss to be linked in if '-msim' is not given.
  
!      Without this option, 'bf532' is used as the processor by default.
  
!      Note that support for 'bf561' is incomplete.  For 'bf561', only the
       preprocessor macro is defined.
  
! '-msim'
       Specifies that the program will be run on the simulator.  This
       causes the simulator BSP provided by libgloss to be linked in.
!      This option has effect only for 'bfin-elf' toolchain.  Certain
!      other options, such as '-mid-shared-library' and '-mfdpic', imply
!      '-msim'.
  
! '-momit-leaf-frame-pointer'
       Don't keep the frame pointer in a register for leaf functions.
       This avoids the instructions to save, set up and restore frame
       pointers and makes an extra register available in leaf functions.
  
! '-mspecld-anomaly'
       When enabled, the compiler ensures that the generated code does not
       contain speculative loads after jump instructions.  If this option
!      is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
  
! '-mno-specld-anomaly'
       Don't generate extra code to prevent speculative loads from
       occurring.
  
! '-mcsync-anomaly'
       When enabled, the compiler ensures that the generated code does not
       contain CSYNC or SSYNC instructions too soon after conditional
!      branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
       is defined.
  
! '-mno-csync-anomaly'
       Don't generate extra code to prevent CSYNC or SSYNC instructions
       from occurring too soon after a conditional branch.
  
! '-mlow64k'
       When enabled, the compiler is free to take advantage of the
       knowledge that the entire program fits into the low 64k of memory.
  
! '-mno-low64k'
       Assume that the program is arbitrarily large.  This is the default.
  
! '-mstack-check-l1'
       Do stack checking using information placed into L1 scratchpad
       memory by the uClinux kernel.
  
! '-mid-shared-library'
       Generate code that supports shared libraries via the library ID
       method.  This allows for execute in place and shared libraries in
       an environment without virtual memory management.  This option
!      implies '-fPIC'.  With a 'bfin-elf' target, this option implies
!      '-msim'.
  
! '-mno-id-shared-library'
       Generate code that doesn't assume ID-based shared libraries are
       being used.  This is the default.
  
! '-mleaf-id-shared-library'
       Generate code that supports shared libraries via the library ID
       method, but assumes that this library or executable won't link
       against any other ID shared libraries.  That allows the compiler to
       use faster code for jumps and calls.
  
! '-mno-leaf-id-shared-library'
       Do not assume that the code being compiled won't link against any
       ID shared libraries.  Slower code is generated for jump and call
       insns.
  
! '-mshared-library-id=n'
       Specifies the identification number of the ID-based shared library
       being compiled.  Specifying a value of 0 generates more compact
       code; specifying other values forces the allocation of that number
       to the current library but is no more space- or time-efficient than
       omitting this option.
  
! '-msep-data'
       Generate code that allows the data segment to be located in a
       different area of memory from the text segment.  This allows for
       execute in place in an environment without virtual memory
       management by eliminating relocations against the text section.
  
! '-mno-sep-data'
       Generate code that assumes that the data segment follows the text
       segment.  This is the default.
  
! '-mlong-calls'
! '-mno-long-calls'
       Tells the compiler to perform function calls by first loading the
       address of the function into a register and then performing a
       subroutine call on this register.  This switch is needed if the
--- 23046,23163 ----
  3.19.7 Blackfin Options
  -----------------------
  
! ‘-mcpu=CPU[-SIREVISION]’
       Specifies the name of the target Blackfin processor.  Currently,
!      CPU can be one of ‘bf512’, ‘bf514’, ‘bf516’, ‘bf518’, ‘bf522’,
!      ‘bf523’, ‘bf524’, ‘bf525’, ‘bf526’, ‘bf527’, ‘bf531’, ‘bf532’,
!      ‘bf533’, ‘bf534’, ‘bf536’, ‘bf537’, ‘bf538’, ‘bf539’, ‘bf542’,
!      ‘bf544’, ‘bf547’, ‘bf548’, ‘bf549’, ‘bf542m’, ‘bf544m’, ‘bf547m’,
!      ‘bf548m’, ‘bf549m’, ‘bf561’, ‘bf592’.
  
       The optional SIREVISION specifies the silicon revision of the
       target Blackfin processor.  Any workarounds available for the
!      targeted silicon revision are enabled.  If SIREVISION is ‘none’, no
!      workarounds are enabled.  If SIREVISION is ‘any’, all workarounds
!      for the targeted processor are enabled.  The ‘__SILICON_REVISION__’
       macro is defined to two hexadecimal digits representing the major
       and minor numbers in the silicon revision.  If SIREVISION is
!      ‘none’, the ‘__SILICON_REVISION__’ is not defined.  If SIREVISION
!      is ‘any’, the ‘__SILICON_REVISION__’ is defined to be ‘0xffff’.  If
       this optional SIREVISION is not used, GCC assumes the latest known
       silicon revision of the targeted Blackfin processor.
  
       GCC defines a preprocessor macro for the specified CPU.  For the
!      ‘bfin-elf’ toolchain, this option causes the hardware BSP provided
!      by libgloss to be linked in if ‘-msim’ is not given.
  
!      Without this option, ‘bf532’ is used as the processor by default.
  
!      Note that support for ‘bf561’ is incomplete.  For ‘bf561’, only the
       preprocessor macro is defined.
  
! ‘-msim’
       Specifies that the program will be run on the simulator.  This
       causes the simulator BSP provided by libgloss to be linked in.
!      This option has effect only for ‘bfin-elf’ toolchain.  Certain
!      other options, such as ‘-mid-shared-library’ and ‘-mfdpic’, imply
!      ‘-msim’.
  
! ‘-momit-leaf-frame-pointer’
       Don't keep the frame pointer in a register for leaf functions.
       This avoids the instructions to save, set up and restore frame
       pointers and makes an extra register available in leaf functions.
  
! ‘-mspecld-anomaly’
       When enabled, the compiler ensures that the generated code does not
       contain speculative loads after jump instructions.  If this option
!      is used, ‘__WORKAROUND_SPECULATIVE_LOADS’ is defined.
  
! ‘-mno-specld-anomaly’
       Don't generate extra code to prevent speculative loads from
       occurring.
  
! ‘-mcsync-anomaly’
       When enabled, the compiler ensures that the generated code does not
       contain CSYNC or SSYNC instructions too soon after conditional
!      branches.  If this option is used, ‘__WORKAROUND_SPECULATIVE_SYNCS’
       is defined.
  
! ‘-mno-csync-anomaly’
       Don't generate extra code to prevent CSYNC or SSYNC instructions
       from occurring too soon after a conditional branch.
  
! ‘-mlow64k’
       When enabled, the compiler is free to take advantage of the
       knowledge that the entire program fits into the low 64k of memory.
  
! ‘-mno-low64k’
       Assume that the program is arbitrarily large.  This is the default.
  
! ‘-mstack-check-l1’
       Do stack checking using information placed into L1 scratchpad
       memory by the uClinux kernel.
  
! ‘-mid-shared-library’
       Generate code that supports shared libraries via the library ID
       method.  This allows for execute in place and shared libraries in
       an environment without virtual memory management.  This option
!      implies ‘-fPIC’.  With a ‘bfin-elf’ target, this option implies
!      ‘-msim’.
  
! ‘-mno-id-shared-library’
       Generate code that doesn't assume ID-based shared libraries are
       being used.  This is the default.
  
! ‘-mleaf-id-shared-library’
       Generate code that supports shared libraries via the library ID
       method, but assumes that this library or executable won't link
       against any other ID shared libraries.  That allows the compiler to
       use faster code for jumps and calls.
  
! ‘-mno-leaf-id-shared-library’
       Do not assume that the code being compiled won't link against any
       ID shared libraries.  Slower code is generated for jump and call
       insns.
  
! ‘-mshared-library-id=n’
       Specifies the identification number of the ID-based shared library
       being compiled.  Specifying a value of 0 generates more compact
       code; specifying other values forces the allocation of that number
       to the current library but is no more space- or time-efficient than
       omitting this option.
  
! ‘-msep-data’
       Generate code that allows the data segment to be located in a
       different area of memory from the text segment.  This allows for
       execute in place in an environment without virtual memory
       management by eliminating relocations against the text section.
  
! ‘-mno-sep-data’
       Generate code that assumes that the data segment follows the text
       segment.  This is the default.
  
! ‘-mlong-calls’
! ‘-mno-long-calls’
       Tells the compiler to perform function calls by first loading the
       address of the function into a register and then performing a
       subroutine call on this register.  This switch is needed if the
*************** File: gcc.info,  Node: Blackfin Options,
*** 23154,23209 ****
       offset-based version of subroutine call instruction.
  
       This feature is not enabled by default.  Specifying
!      '-mno-long-calls' restores the default behavior.  Note these
       switches have no effect on how the compiler generates code to
       handle function calls via function pointers.
  
! '-mfast-fp'
       Link with the fast floating-point library.  This library relaxes
       some of the IEEE floating-point standard's rules for checking
       inputs against Not-a-Number (NAN), in the interest of performance.
  
! '-minline-plt'
       Enable inlining of PLT entries in function calls to functions that
!      are not known to bind locally.  It has no effect without '-mfdpic'.
  
! '-mmulticore'
       Build a standalone application for multicore Blackfin processors.
       This option causes proper start files and link scripts supporting
!      multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
!      can only be used with '-mcpu=bf561[-SIREVISION]'.
  
!      This option can be used with '-mcorea' or '-mcoreb', which selects
!      the one-application-per-core programming model.  Without '-mcorea'
!      or '-mcoreb', the single-application/dual-core programming model is
       used.  In this model, the main function of Core B should be named
!      as 'coreb_main'.
  
       If this option is not used, the single-core application programming
       model is used.
  
! '-mcorea'
       Build a standalone application for Core A of BF561 when using the
       one-application-per-core programming model.  Proper start files and
       link scripts are used to support Core A, and the macro
!      '__BFIN_COREA' is defined.  This option can only be used in
!      conjunction with '-mmulticore'.
  
! '-mcoreb'
       Build a standalone application for Core B of BF561 when using the
       one-application-per-core programming model.  Proper start files and
       link scripts are used to support Core B, and the macro
!      '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
!      should be used instead of 'main'.  This option can only be used in
!      conjunction with '-mmulticore'.
  
! '-msdram'
       Build a standalone application for SDRAM. Proper start files and
       link scripts are used to put the application into SDRAM, and the
!      macro '__BFIN_SDRAM' is defined.  The loader should initialize
       SDRAM before loading the application.
  
! '-micplb'
       Assume that ICPLBs are enabled at run time.  This has an effect on
       certain anomaly workarounds.  For Linux targets, the default is to
       assume ICPLBs are enabled; for standalone applications the default
--- 23165,23220 ----
       offset-based version of subroutine call instruction.
  
       This feature is not enabled by default.  Specifying
!      ‘-mno-long-calls’ restores the default behavior.  Note these
       switches have no effect on how the compiler generates code to
       handle function calls via function pointers.
  
! ‘-mfast-fp’
       Link with the fast floating-point library.  This library relaxes
       some of the IEEE floating-point standard's rules for checking
       inputs against Not-a-Number (NAN), in the interest of performance.
  
! ‘-minline-plt’
       Enable inlining of PLT entries in function calls to functions that
!      are not known to bind locally.  It has no effect without ‘-mfdpic’.
  
! ‘-mmulticore’
       Build a standalone application for multicore Blackfin processors.
       This option causes proper start files and link scripts supporting
!      multicore to be used, and defines the macro ‘__BFIN_MULTICORE’.  It
!      can only be used with ‘-mcpu=bf561[-SIREVISION]’.
  
!      This option can be used with ‘-mcorea’ or ‘-mcoreb’, which selects
!      the one-application-per-core programming model.  Without ‘-mcorea’
!      or ‘-mcoreb’, the single-application/dual-core programming model is
       used.  In this model, the main function of Core B should be named
!      as ‘coreb_main’.
  
       If this option is not used, the single-core application programming
       model is used.
  
! ‘-mcorea’
       Build a standalone application for Core A of BF561 when using the
       one-application-per-core programming model.  Proper start files and
       link scripts are used to support Core A, and the macro
!      ‘__BFIN_COREA’ is defined.  This option can only be used in
!      conjunction with ‘-mmulticore’.
  
! ‘-mcoreb’
       Build a standalone application for Core B of BF561 when using the
       one-application-per-core programming model.  Proper start files and
       link scripts are used to support Core B, and the macro
!      ‘__BFIN_COREB’ is defined.  When this option is used, ‘coreb_main’
!      should be used instead of ‘main’.  This option can only be used in
!      conjunction with ‘-mmulticore’.
  
! ‘-msdram’
       Build a standalone application for SDRAM. Proper start files and
       link scripts are used to put the application into SDRAM, and the
!      macro ‘__BFIN_SDRAM’ is defined.  The loader should initialize
       SDRAM before loading the application.
  
! ‘-micplb’
       Assume that ICPLBs are enabled at run time.  This has an effect on
       certain anomaly workarounds.  For Linux targets, the default is to
       assume ICPLBs are enabled; for standalone applications the default
*************** File: gcc.info,  Node: C6X Options,  Nex
*** 23215,23254 ****
  3.19.8 C6X Options
  ------------------
  
! '-march=NAME'
       This specifies the name of the target architecture.  GCC uses this
       name to determine what kind of instructions it can emit when
!      generating assembly code.  Permissible names are: 'c62x', 'c64x',
!      'c64x+', 'c67x', 'c67x+', 'c674x'.
  
! '-mbig-endian'
       Generate code for a big-endian target.
  
! '-mlittle-endian'
       Generate code for a little-endian target.  This is the default.
  
! '-msim'
       Choose startup files and linker script suitable for the simulator.
  
! '-msdata=default'
!      Put small global and static data in the '.neardata' section, which
!      is pointed to by register 'B14'.  Put small uninitialized global
!      and static data in the '.bss' section, which is adjacent to the
!      '.neardata' section.  Put small read-only data into the '.rodata'
       section.  The corresponding sections used for large pieces of data
!      are '.fardata', '.far' and '.const'.
  
! '-msdata=all'
       Put all data, not just small objects, into the sections reserved
!      for small data, and use addressing relative to the 'B14' register
       to access them.
  
! '-msdata=none'
       Make no use of the sections reserved for small data, and use
       absolute addresses to access all data.  Put all initialized global
!      and static data in the '.fardata' section, and all uninitialized
!      data in the '.far' section.  Put all constant data into the
!      '.const' section.
  
  
  File: gcc.info,  Node: CRIS Options,  Next: C-SKY Options,  Prev: C6X Options,  Up: Submodel Options
--- 23226,23265 ----
  3.19.8 C6X Options
  ------------------
  
! ‘-march=NAME’
       This specifies the name of the target architecture.  GCC uses this
       name to determine what kind of instructions it can emit when
!      generating assembly code.  Permissible names are: ‘c62x’, ‘c64x’,
!      ‘c64x+’, ‘c67x’, ‘c67x+’, ‘c674x’.
  
! ‘-mbig-endian’
       Generate code for a big-endian target.
  
! ‘-mlittle-endian’
       Generate code for a little-endian target.  This is the default.
  
! ‘-msim’
       Choose startup files and linker script suitable for the simulator.
  
! ‘-msdata=default’
!      Put small global and static data in the ‘.neardata’ section, which
!      is pointed to by register ‘B14’.  Put small uninitialized global
!      and static data in the ‘.bss’ section, which is adjacent to the
!      ‘.neardata’ section.  Put small read-only data into the ‘.rodata’
       section.  The corresponding sections used for large pieces of data
!      are ‘.fardata’, ‘.far’ and ‘.const’.
  
! ‘-msdata=all’
       Put all data, not just small objects, into the sections reserved
!      for small data, and use addressing relative to the ‘B14’ register
       to access them.
  
! ‘-msdata=none’
       Make no use of the sections reserved for small data, and use
       absolute addresses to access all data.  Put all initialized global
!      and static data in the ‘.fardata’ section, and all uninitialized
!      data in the ‘.far’ section.  Put all constant data into the
!      ‘.const’ section.
  
  
  File: gcc.info,  Node: CRIS Options,  Next: C-SKY Options,  Prev: C6X Options,  Up: Submodel Options
*************** File: gcc.info,  Node: CRIS Options,  Ne
*** 23258,23325 ****
  
  These options are defined specifically for the CRIS ports.
  
! '-march=ARCHITECTURE-TYPE'
! '-mcpu=ARCHITECTURE-TYPE'
       Generate code for the specified architecture.  The choices for
!      ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
!      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0'.
  
! '-mtune=ARCHITECTURE-TYPE'
       Tune to ARCHITECTURE-TYPE everything applicable about the generated
       code, except for the ABI and the set of available instructions.
       The choices for ARCHITECTURE-TYPE are the same as for
!      '-march=ARCHITECTURE-TYPE'.
  
! '-mmax-stack-frame=N'
       Warn when the stack frame of a function exceeds N bytes.
  
! '-metrax4'
! '-metrax100'
!      The options '-metrax4' and '-metrax100' are synonyms for
!      '-march=v3' and '-march=v8' respectively.
  
! '-mmul-bug-workaround'
! '-mno-mul-bug-workaround'
!      Work around a bug in the 'muls' and 'mulu' instructions for CPU
       models where it applies.  This option is disabled by default.
  
! '-mpdebug'
       Enable CRIS-specific verbose debug-related information in the
       assembly code.  This option also has the effect of turning off the
!      '#NO_APP' formatted-code indicator to the assembler at the
       beginning of the assembly file.
  
! '-mcc-init'
       Do not use condition-code results from previous instruction; always
       emit compare and test instructions before use of condition codes.
  
! '-mno-side-effects'
       Do not emit instructions with side effects in addressing modes
       other than post-increment.
  
! '-mstack-align'
! '-mno-stack-align'
! '-mdata-align'
! '-mno-data-align'
! '-mconst-align'
! '-mno-const-align'
!      These options ('no-' options) arrange (eliminate arrangements) for
       the stack frame, individual data and constants to be aligned for
       the maximum single data access size for the chosen CPU model.  The
       default is to arrange for 32-bit alignment.  ABI details such as
       structure layout are not affected by these options.
  
! '-m32-bit'
! '-m16-bit'
! '-m8-bit'
       Similar to the stack- data- and const-align options above, these
       options arrange for stack frame, writable data and constants to all
       be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
       alignment.
  
! '-mno-prologue-epilogue'
! '-mprologue-epilogue'
!      With '-mno-prologue-epilogue', the normal function prologue and
       epilogue which set up the stack frame are omitted and no return
       instructions or return sequences are generated in the code.  Use
       this option only together with visual inspection of the compiled
--- 23269,23336 ----
  
  These options are defined specifically for the CRIS ports.
  
! ‘-march=ARCHITECTURE-TYPE’
! ‘-mcpu=ARCHITECTURE-TYPE’
       Generate code for the specified architecture.  The choices for
!      ARCHITECTURE-TYPE are ‘v3’, ‘v8’ and ‘v10’ for respectively
!      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is ‘v0’.
  
! ‘-mtune=ARCHITECTURE-TYPE’
       Tune to ARCHITECTURE-TYPE everything applicable about the generated
       code, except for the ABI and the set of available instructions.
       The choices for ARCHITECTURE-TYPE are the same as for
!      ‘-march=ARCHITECTURE-TYPE’.
  
! ‘-mmax-stack-frame=N’
       Warn when the stack frame of a function exceeds N bytes.
  
! ‘-metrax4’
! ‘-metrax100’
!      The options ‘-metrax4’ and ‘-metrax100’ are synonyms for
!      ‘-march=v3’ and ‘-march=v8’ respectively.
  
! ‘-mmul-bug-workaround’
! ‘-mno-mul-bug-workaround’
!      Work around a bug in the ‘muls’ and ‘mulu’ instructions for CPU
       models where it applies.  This option is disabled by default.
  
! ‘-mpdebug’
       Enable CRIS-specific verbose debug-related information in the
       assembly code.  This option also has the effect of turning off the
!      ‘#NO_APP’ formatted-code indicator to the assembler at the
       beginning of the assembly file.
  
! ‘-mcc-init’
       Do not use condition-code results from previous instruction; always
       emit compare and test instructions before use of condition codes.
  
! ‘-mno-side-effects’
       Do not emit instructions with side effects in addressing modes
       other than post-increment.
  
! ‘-mstack-align’
! ‘-mno-stack-align’
! ‘-mdata-align’
! ‘-mno-data-align’
! ‘-mconst-align’
! ‘-mno-const-align’
!      These options (‘no-’ options) arrange (eliminate arrangements) for
       the stack frame, individual data and constants to be aligned for
       the maximum single data access size for the chosen CPU model.  The
       default is to arrange for 32-bit alignment.  ABI details such as
       structure layout are not affected by these options.
  
! ‘-m32-bit’
! ‘-m16-bit’
! ‘-m8-bit’
       Similar to the stack- data- and const-align options above, these
       options arrange for stack frame, writable data and constants to all
       be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
       alignment.
  
! ‘-mno-prologue-epilogue’
! ‘-mprologue-epilogue’
!      With ‘-mno-prologue-epilogue’, the normal function prologue and
       epilogue which set up the stack frame are omitted and no return
       instructions or return sequences are generated in the code.  Use
       this option only together with visual inspection of the compiled
*************** These options are defined specifically f
*** 23327,23342 ****
       must be saved, or storage for local variables needs to be
       allocated.
  
! '-melf'
       Legacy no-op option.
  
! '-sim'
       This option arranges to link with input-output functions from a
       simulator library.  Code, initialized data and zero-initialized
       data are allocated consecutively.
  
! '-sim2'
!      Like '-sim', but pass linker options to locate initialized data at
       0x40000000 and zero-initialized data at 0x80000000.
  
  
--- 23338,23353 ----
       must be saved, or storage for local variables needs to be
       allocated.
  
! ‘-melf’
       Legacy no-op option.
  
! ‘-sim’
       This option arranges to link with input-output functions from a
       simulator library.  Code, initialized data and zero-initialized
       data are allocated consecutively.
  
! ‘-sim2’
!      Like ‘-sim’, but pass linker options to locate initialized data at
       0x40000000 and zero-initialized data at 0x80000000.
  
  
*************** File: gcc.info,  Node: C-SKY Options,  N
*** 23347,23386 ****
  
  GCC supports these options when compiling for C-SKY V2 processors.
  
! '-march=ARCH'
       Specify the C-SKY target architecture.  Valid values for ARCH are:
!      'ck801', 'ck802', 'ck803', 'ck807', and 'ck810'.  The default is
!      'ck810'.
  
! '-mcpu=CPU'
       Specify the C-SKY target processor.  Valid values for CPU are:
!      'ck801', 'ck801t', 'ck802', 'ck802t', 'ck802j', 'ck803', 'ck803h',
!      'ck803t', 'ck803ht', 'ck803f', 'ck803fh', 'ck803e', 'ck803eh',
!      'ck803et', 'ck803eht', 'ck803ef', 'ck803efh', 'ck803ft',
!      'ck803eft', 'ck803efht', 'ck803r1', 'ck803hr1', 'ck803tr1',
!      'ck803htr1', 'ck803fr1', 'ck803fhr1', 'ck803er1', 'ck803ehr1',
!      'ck803etr1', 'ck803ehtr1', 'ck803efr1', 'ck803efhr1', 'ck803ftr1',
!      'ck803eftr1', 'ck803efhtr1', 'ck803s', 'ck803st', 'ck803se',
!      'ck803sf', 'ck803sef', 'ck803seft', 'ck807e', 'ck807ef', 'ck807',
!      'ck807f', 'ck810e', 'ck810et', 'ck810ef', 'ck810eft', 'ck810',
!      'ck810v', 'ck810f', 'ck810t', 'ck810fv', 'ck810tv', 'ck810ft', and
!      'ck810ftv'.
  
! '-mbig-endian'
! '-EB'
! '-mlittle-endian'
! '-EL'
  
       Select big- or little-endian code.  The default is little-endian.
  
! '-mfloat-abi=NAME'
       Specifies which floating-point ABI to use.  Permissible values are:
!      'soft', 'softfp' and 'hard'.
  
!      Specifying 'soft' causes GCC to generate output containing library
!      calls for floating-point operations.  'softfp' allows the
       generation of code using hardware floating-point instructions, but
!      still uses the soft-float calling conventions.  'hard' allows
       generation of floating-point instructions and uses FPU-specific
       calling conventions.
  
--- 23358,23397 ----
  
  GCC supports these options when compiling for C-SKY V2 processors.
  
! ‘-march=ARCH’
       Specify the C-SKY target architecture.  Valid values for ARCH are:
!      ‘ck801’, ‘ck802’, ‘ck803’, ‘ck807’, and ‘ck810’.  The default is
!      ‘ck810’.
  
! ‘-mcpu=CPU’
       Specify the C-SKY target processor.  Valid values for CPU are:
!      ‘ck801’, ‘ck801t’, ‘ck802’, ‘ck802t’, ‘ck802j’, ‘ck803’, ‘ck803h’,
!      ‘ck803t’, ‘ck803ht’, ‘ck803f’, ‘ck803fh’, ‘ck803e’, ‘ck803eh’,
!      ‘ck803et’, ‘ck803eht’, ‘ck803ef’, ‘ck803efh’, ‘ck803ft’,
!      ‘ck803eft’, ‘ck803efht’, ‘ck803r1’, ‘ck803hr1’, ‘ck803tr1’,
!      ‘ck803htr1’, ‘ck803fr1’, ‘ck803fhr1’, ‘ck803er1’, ‘ck803ehr1’,
!      ‘ck803etr1’, ‘ck803ehtr1’, ‘ck803efr1’, ‘ck803efhr1’, ‘ck803ftr1’,
!      ‘ck803eftr1’, ‘ck803efhtr1’, ‘ck803s’, ‘ck803st’, ‘ck803se’,
!      ‘ck803sf’, ‘ck803sef’, ‘ck803seft’, ‘ck807e’, ‘ck807ef’, ‘ck807’,
!      ‘ck807f’, ‘ck810e’, ‘ck810et’, ‘ck810ef’, ‘ck810eft’, ‘ck810’,
!      ‘ck810v’, ‘ck810f’, ‘ck810t’, ‘ck810fv’, ‘ck810tv’, ‘ck810ft’, and
!      ‘ck810ftv’.
  
! ‘-mbig-endian’
! ‘-EB’
! ‘-mlittle-endian’
! ‘-EL’
  
       Select big- or little-endian code.  The default is little-endian.
  
! ‘-mfloat-abi=NAME’
       Specifies which floating-point ABI to use.  Permissible values are:
!      ‘soft’, ‘softfp’ and ‘hard’.
  
!      Specifying ‘soft’ causes GCC to generate output containing library
!      calls for floating-point operations.  ‘softfp’ allows the
       generation of code using hardware floating-point instructions, but
!      still uses the soft-float calling conventions.  ‘hard’ allows
       generation of floating-point instructions and uses FPU-specific
       calling conventions.
  
*************** GCC supports these options when compilin
*** 23389,23514 ****
       you must compile your entire program with the same ABI, and link
       with a compatible set of libraries.
  
! '-mhard-float'
! '-msoft-float'
  
       Select hardware or software floating-point implementations.  The
       default is soft float.
  
! '-mdouble-float'
! '-mno-double-float'
!      When '-mhard-float' is in effect, enable generation of
       double-precision float instructions.  This is the default except
       when compiling for CK803.
  
! '-mfdivdu'
! '-mno-fdivdu'
!      When '-mhard-float' is in effect, enable generation of 'frecipd',
!      'fsqrtd', and 'fdivd' instructions.  This is the default except
       when compiling for CK803.
  
! '-mfpu=FPU'
       Select the floating-point processor.  This option can only be used
!      with '-mhard-float'.  Values for FPU are 'fpv2_sf' (equivalent to
!      '-mno-double-float -mno-fdivdu'), 'fpv2' ('-mdouble-float
!      -mno-divdu'), and 'fpv2_divd' ('-mdouble-float -mdivdu').
  
! '-melrw'
! '-mno-elrw'
!      Enable the extended 'lrw' instruction.  This option defaults to on
       for CK801 and off otherwise.
  
! '-mistack'
! '-mno-istack'
       Enable interrupt stack instructions; the default is off.
  
!      The '-mistack' option is required to handle the 'interrupt' and
!      'isr' function attributes (*note C-SKY Function Attributes::).
  
! '-mmp'
       Enable multiprocessor instructions; the default is off.
  
! '-mcp'
       Enable coprocessor instructions; the default is off.
  
! '-mcache'
       Enable coprocessor instructions; the default is off.
  
! '-msecurity'
       Enable C-SKY security instructions; the default is off.
  
! '-mtrust'
       Enable C-SKY trust instructions; the default is off.
  
! '-mdsp'
! '-medsp'
! '-mvdsp'
       Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
       respectively.  All of these options default to off.
  
! '-mdiv'
! '-mno-div'
       Generate divide instructions.  Default is off.
  
! '-msmart'
! '-mno-smart'
       Generate code for Smart Mode, using only registers numbered 0-7 to
       allow use of 16-bit instructions.  This option is ignored for CK801
       where this is the required behavior, and it defaults to on for
       CK802.  For other targets, the default is off.
  
! '-mhigh-registers'
! '-mno-high-registers'
       Generate code using the high registers numbered 16-31.  This option
       is not supported on CK801, CK802, or CK803, and is enabled by
       default for other processors.
  
! '-manchor'
! '-mno-anchor'
       Generate code using global anchor symbol addresses.
  
! '-mpushpop'
! '-mno-pushpop'
!      Generate code using 'push' and 'pop' instructions.  This option
       defaults to on.
  
! '-mmultiple-stld'
! '-mstm'
! '-mno-multiple-stld'
! '-mno-stm'
!      Generate code using 'stm' and 'ldm' instructions.  This option
       isn't supported on CK801 but is enabled by default on other
       processors.
  
! '-mconstpool'
! '-mno-constpool'
       Create constant pools in the compiler instead of deferring it to
       the assembler.  This option is the default and required for correct
       code generation on CK801 and CK802, and is optional on other
       processors.
  
! '-mstack-size'
! '-mno-stack-size'
!      Emit '.stack_size' directives for each function in the assembly
       output.  This option defaults to off.
  
! '-mccrt'
! '-mno-ccrt'
       Generate code for the C-SKY compiler runtime instead of libgcc.
       This option defaults to off.
  
! '-mbranch-cost=N'
!      Set the branch costs to roughly 'n' instructions.  The default is
       1.
  
! '-msched-prolog'
! '-mno-sched-prolog'
       Permit scheduling of function prologue and epilogue sequences.
       Using this option can result in code that is not compliant with the
       C-SKY V2 ABI prologue requirements and that cannot be debugged or
       backtraced.  It is disabled by default.
  
! '-msim'
       Links the library libsemi.a which is in compatible with simulator.
       Applicable to ELF compiler only.
  
--- 23400,23525 ----
       you must compile your entire program with the same ABI, and link
       with a compatible set of libraries.
  
! ‘-mhard-float’
! ‘-msoft-float’
  
       Select hardware or software floating-point implementations.  The
       default is soft float.
  
! ‘-mdouble-float’
! ‘-mno-double-float’
!      When ‘-mhard-float’ is in effect, enable generation of
       double-precision float instructions.  This is the default except
       when compiling for CK803.
  
! ‘-mfdivdu’
! ‘-mno-fdivdu’
!      When ‘-mhard-float’ is in effect, enable generation of ‘frecipd’,
!      ‘fsqrtd’, and ‘fdivd’ instructions.  This is the default except
       when compiling for CK803.
  
! ‘-mfpu=FPU’
       Select the floating-point processor.  This option can only be used
!      with ‘-mhard-float’.  Values for FPU are ‘fpv2_sf’ (equivalent to
!      ‘-mno-double-float -mno-fdivdu’), ‘fpv2’ (‘-mdouble-float
!      -mno-divdu’), and ‘fpv2_divd’ (‘-mdouble-float -mdivdu’).
  
! ‘-melrw’
! ‘-mno-elrw’
!      Enable the extended ‘lrw’ instruction.  This option defaults to on
       for CK801 and off otherwise.
  
! ‘-mistack’
! ‘-mno-istack’
       Enable interrupt stack instructions; the default is off.
  
!      The ‘-mistack’ option is required to handle the ‘interrupt’ and
!      ‘isr’ function attributes (*note C-SKY Function Attributes::).
  
! ‘-mmp’
       Enable multiprocessor instructions; the default is off.
  
! ‘-mcp’
       Enable coprocessor instructions; the default is off.
  
! ‘-mcache’
       Enable coprocessor instructions; the default is off.
  
! ‘-msecurity’
       Enable C-SKY security instructions; the default is off.
  
! ‘-mtrust’
       Enable C-SKY trust instructions; the default is off.
  
! ‘-mdsp’
! ‘-medsp’
! ‘-mvdsp’
       Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
       respectively.  All of these options default to off.
  
! ‘-mdiv’
! ‘-mno-div’
       Generate divide instructions.  Default is off.
  
! ‘-msmart’
! ‘-mno-smart’
       Generate code for Smart Mode, using only registers numbered 0-7 to
       allow use of 16-bit instructions.  This option is ignored for CK801
       where this is the required behavior, and it defaults to on for
       CK802.  For other targets, the default is off.
  
! ‘-mhigh-registers’
! ‘-mno-high-registers’
       Generate code using the high registers numbered 16-31.  This option
       is not supported on CK801, CK802, or CK803, and is enabled by
       default for other processors.
  
! ‘-manchor’
! ‘-mno-anchor’
       Generate code using global anchor symbol addresses.
  
! ‘-mpushpop’
! ‘-mno-pushpop’
!      Generate code using ‘push’ and ‘pop’ instructions.  This option
       defaults to on.
  
! ‘-mmultiple-stld’
! ‘-mstm’
! ‘-mno-multiple-stld’
! ‘-mno-stm’
!      Generate code using ‘stm’ and ‘ldm’ instructions.  This option
       isn't supported on CK801 but is enabled by default on other
       processors.
  
! ‘-mconstpool’
! ‘-mno-constpool’
       Create constant pools in the compiler instead of deferring it to
       the assembler.  This option is the default and required for correct
       code generation on CK801 and CK802, and is optional on other
       processors.
  
! ‘-mstack-size’
! ‘-mno-stack-size’
!      Emit ‘.stack_size’ directives for each function in the assembly
       output.  This option defaults to off.
  
! ‘-mccrt’
! ‘-mno-ccrt’
       Generate code for the C-SKY compiler runtime instead of libgcc.
       This option defaults to off.
  
! ‘-mbranch-cost=N’
!      Set the branch costs to roughly ‘n’ instructions.  The default is
       1.
  
! ‘-msched-prolog’
! ‘-mno-sched-prolog’
       Permit scheduling of function prologue and epilogue sequences.
       Using this option can result in code that is not compliant with the
       C-SKY V2 ABI prologue requirements and that cannot be debugged or
       backtraced.  It is disabled by default.
  
! ‘-msim’
       Links the library libsemi.a which is in compatible with simulator.
       Applicable to ELF compiler only.
  
*************** operating system.
*** 23523,23561 ****
  
   FSF GCC on Darwin does not create "fat" object files; it creates an
  object file for the single architecture that GCC was built to target.
! Apple's GCC on Darwin does create "fat" files if multiple '-arch'
  options are used; it does so by running the compiler or linker multiple
! times and joining the results together with 'lipo'.
  
!  The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
  is determined by the flags that specify the ISA that GCC is targeting,
! like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
  used to override this.
  
   The Darwin tools vary in their behavior when presented with an ISA
! mismatch.  The assembler, 'as', only permits instructions to be used
  that are valid for the subtype of the file it is generating, so you
! cannot put 64-bit instructions in a 'ppc750' object file.  The linker
! for shared libraries, '/usr/bin/libtool', fails and prints an error if
  asked to create a shared library with a less restrictive subtype than
! its input files (for instance, trying to put a 'ppc970' object file in a
! 'ppc7400' library).  The linker for executables, 'ld', quietly gives the
  executable the most restrictive subtype of any of its input files.
  
! '-FDIR'
       Add the framework directory DIR to the head of the list of
       directories to be searched for header files.  These directories are
!      interleaved with those specified by '-I' options and are scanned in
       a left-to-right order.
  
       A framework directory is a directory with frameworks in it.  A
!      framework is a directory with a 'Headers' and/or 'PrivateHeaders'
!      directory contained directly in it that ends in '.framework'.  The
       name of a framework is the name of this directory excluding the
!      '.framework'.  Headers associated with the framework are found in
!      one of those two directories, with 'Headers' being searched first.
       A subframework is a framework directory that is in a framework's
!      'Frameworks' directory.  Includes of subframework headers can only
       appear in a header of a framework that contains the subframework,
       or in a sibling subframework header.  Two subframeworks are
       siblings if they occur in the same framework.  A subframework
--- 23534,23572 ----
  
   FSF GCC on Darwin does not create "fat" object files; it creates an
  object file for the single architecture that GCC was built to target.
! Apple's GCC on Darwin does create "fat" files if multiple ‘-arch’
  options are used; it does so by running the compiler or linker multiple
! times and joining the results together with ‘lipo’.
  
!  The subtype of the file created (like ‘ppc7400’ or ‘ppc970’ or ‘i686’)
  is determined by the flags that specify the ISA that GCC is targeting,
! like ‘-mcpu’ or ‘-march’.  The ‘-force_cpusubtype_ALL’ option can be
  used to override this.
  
   The Darwin tools vary in their behavior when presented with an ISA
! mismatch.  The assembler, ‘as’, only permits instructions to be used
  that are valid for the subtype of the file it is generating, so you
! cannot put 64-bit instructions in a ‘ppc750’ object file.  The linker
! for shared libraries, ‘/usr/bin/libtool’, fails and prints an error if
  asked to create a shared library with a less restrictive subtype than
! its input files (for instance, trying to put a ‘ppc970’ object file in a
! ‘ppc7400’ library).  The linker for executables, ‘ld’, quietly gives the
  executable the most restrictive subtype of any of its input files.
  
! ‘-FDIR’
       Add the framework directory DIR to the head of the list of
       directories to be searched for header files.  These directories are
!      interleaved with those specified by ‘-I’ options and are scanned in
       a left-to-right order.
  
       A framework directory is a directory with frameworks in it.  A
!      framework is a directory with a ‘Headers’ and/or ‘PrivateHeaders’
!      directory contained directly in it that ends in ‘.framework’.  The
       name of a framework is the name of this directory excluding the
!      ‘.framework’.  Headers associated with the framework are found in
!      one of those two directories, with ‘Headers’ being searched first.
       A subframework is a framework directory that is in a framework's
!      ‘Frameworks’ directory.  Includes of subframework headers can only
       appear in a header of a framework that contains the subframework,
       or in a sibling subframework header.  Two subframeworks are
       siblings if they occur in the same framework.  A subframework
*************** executable the most restrictive subtype
*** 23563,23728 ****
       if this is violated.  Currently a subframework cannot have
       subframeworks; in the future, the mechanism may be extended to
       support this.  The standard frameworks can be found in
!      '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
!      include looks like '#include <Framework/header.h>', where
!      'Framework' denotes the name of the framework and 'header.h' is
!      found in the 'PrivateHeaders' or 'Headers' directory.
  
! '-iframeworkDIR'
!      Like '-F' except the directory is a treated as a system directory.
!      The main difference between this '-iframework' and '-F' is that
!      with '-iframework' the compiler does not warn about constructs
       contained within header files found via DIR.  This option is valid
       only for the C family of languages.
  
! '-gused'
       Emit debugging information for symbols that are used.  For stabs
!      debugging format, this enables '-feliminate-unused-debug-symbols'.
       This is by default ON.
  
! '-gfull'
       Emit debugging information for all symbols and types.
  
! '-fconstant-cfstrings'
!      The '-fconstant-cfstrings' is an alias for '-mconstant-cfstrings'.
  
! '-mconstant-cfstrings'
       When the NeXT runtime is being used (the default on these systems),
!      override any '-fconstant-string-class' setting and cause '@"..."'
       literals to be laid out as constant CoreFoundation strings.
  
! '-mmacosx-version-min=VERSION'
       The earliest version of MacOS X that this executable will run on is
!      VERSION.  Typical values supported for VERSION include '12',
!      '10.12', and '10.5.8'.
  
       If the compiler was built to use the system's headers by default,
       then the default for this option is the system version on which the
       compiler is running, otherwise the default is to make choices that
       are compatible with as many systems and code bases as possible.
  
! '-mkernel'
!      Enable kernel development mode.  The '-mkernel' option sets
!      '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
!      '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
!      '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
!      '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
       targets.
  
! '-mone-byte-bool'
!      Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
!      default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
!      '1' when compiling for Darwin/x86, so this option has no effect on
       x86.
  
!      *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Using this switch may require recompiling all other
       modules in a program, including system libraries.  Use this switch
       to conform to a non-default data model.
  
! '-mfix-and-continue'
! '-ffix-and-continue'
! '-findirect-data'
       Generate code suitable for fast turnaround development, such as to
!      allow GDB to dynamically load '.o' files into already-running
!      programs.  '-findirect-data' and '-ffix-and-continue' are provided
       for backwards compatibility.
  
! '-all_load'
       Loads all members of static archive libraries.  See man ld(1) for
       more information.
  
! '-arch_errors_fatal'
       Cause the errors having to do with files that have the wrong
       architecture to be fatal.
  
! '-bind_at_load'
       Causes the output file to be marked such that the dynamic linker
       will bind all undefined references when the file is loaded or
       launched.
  
! '-bundle'
       Produce a Mach-o bundle format file.  See man ld(1) for more
       information.
  
! '-bundle_loader EXECUTABLE'
       This option specifies the EXECUTABLE that will load the build
       output file being linked.  See man ld(1) for more information.
  
! '-dynamiclib'
       When passed this option, GCC produces a dynamic library instead of
!      an executable when linking, using the Darwin 'libtool' command.
  
! '-force_cpusubtype_ALL'
!      This causes GCC's output file to have the 'ALL' subtype, instead of
!      one controlled by the '-mcpu' or '-march' option.
  
! '-nodefaultrpaths'
       Do not add default run paths for the compiler library directories
       to executables, modules or dynamic libraries.  On macOS 10.5 and
       later, the embedded runpath is added by default unless the user
!      adds '-nodefaultrpaths' to the link line.  Run paths are needed
       (and therefore enforced) to build on macOS version 10.11 or later.
  
! '-allowable_client CLIENT_NAME'
! '-client_name'
! '-compatibility_version'
! '-current_version'
! '-dead_strip'
! '-dependency-file'
! '-dylib_file'
! '-dylinker_install_name'
! '-dynamic'
! '-exported_symbols_list'
! '-filelist'
! '-flat_namespace'
! '-force_flat_namespace'
! '-headerpad_max_install_names'
! '-image_base'
! '-init'
! '-install_name'
! '-keep_private_externs'
! '-multi_module'
! '-multiply_defined'
! '-multiply_defined_unused'
! '-noall_load'
! '-no_dead_strip_inits_and_terms'
! '-nofixprebinding'
! '-nomultidefs'
! '-noprebind'
! '-noseglinkedit'
! '-pagezero_size'
! '-prebind'
! '-prebind_all_twolevel_modules'
! '-private_bundle'
! '-read_only_relocs'
! '-sectalign'
! '-sectobjectsymbols'
! '-whyload'
! '-seg1addr'
! '-sectcreate'
! '-sectobjectsymbols'
! '-sectorder'
! '-segaddr'
! '-segs_read_only_addr'
! '-segs_read_write_addr'
! '-seg_addr_table'
! '-seg_addr_table_filename'
! '-seglinkedit'
! '-segprot'
! '-segs_read_only_addr'
! '-segs_read_write_addr'
! '-single_module'
! '-static'
! '-sub_library'
! '-sub_umbrella'
! '-twolevel_namespace'
! '-umbrella'
! '-undefined'
! '-unexported_symbols_list'
! '-weak_reference_mismatches'
! '-whatsloaded'
       These options are passed to the Darwin linker.  The Darwin linker
       man page describes them in detail.
  
--- 23574,23739 ----
       if this is violated.  Currently a subframework cannot have
       subframeworks; in the future, the mechanism may be extended to
       support this.  The standard frameworks can be found in
!      ‘/System/Library/Frameworks’ and ‘/Library/Frameworks’.  An example
!      include looks like ‘#include <Framework/header.h>’, where
!      ‘Framework’ denotes the name of the framework and ‘header.h’ is
!      found in the ‘PrivateHeaders’ or ‘Headers’ directory.
  
! ‘-iframeworkDIR’
!      Like ‘-F’ except the directory is a treated as a system directory.
!      The main difference between this ‘-iframework’ and ‘-F’ is that
!      with ‘-iframework’ the compiler does not warn about constructs
       contained within header files found via DIR.  This option is valid
       only for the C family of languages.
  
! ‘-gused’
       Emit debugging information for symbols that are used.  For stabs
!      debugging format, this enables ‘-feliminate-unused-debug-symbols’.
       This is by default ON.
  
! ‘-gfull’
       Emit debugging information for all symbols and types.
  
! ‘-fconstant-cfstrings’
!      The ‘-fconstant-cfstrings’ is an alias for ‘-mconstant-cfstrings’.
  
! ‘-mconstant-cfstrings’
       When the NeXT runtime is being used (the default on these systems),
!      override any ‘-fconstant-string-class’ setting and cause ‘@"..."’
       literals to be laid out as constant CoreFoundation strings.
  
! ‘-mmacosx-version-min=VERSION’
       The earliest version of MacOS X that this executable will run on is
!      VERSION.  Typical values supported for VERSION include ‘12’,
!      ‘10.12’, and ‘10.5.8’.
  
       If the compiler was built to use the system's headers by default,
       then the default for this option is the system version on which the
       compiler is running, otherwise the default is to make choices that
       are compatible with as many systems and code bases as possible.
  
! ‘-mkernel’
!      Enable kernel development mode.  The ‘-mkernel’ option sets
!      ‘-static’, ‘-fno-common’, ‘-fno-use-cxa-atexit’, ‘-fno-exceptions’,
!      ‘-fno-non-call-exceptions’, ‘-fapple-kext’, ‘-fno-weak’ and
!      ‘-fno-rtti’ where applicable.  This mode also sets ‘-mno-altivec’,
!      ‘-msoft-float’, ‘-fno-builtin’ and ‘-mlong-branch’ for PowerPC
       targets.
  
! ‘-mone-byte-bool’
!      Override the defaults for ‘bool’ so that ‘sizeof(bool)==1’.  By
!      default ‘sizeof(bool)’ is ‘4’ when compiling for Darwin/PowerPC and
!      ‘1’ when compiling for Darwin/x86, so this option has no effect on
       x86.
  
!      *Warning:* The ‘-mone-byte-bool’ switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Using this switch may require recompiling all other
       modules in a program, including system libraries.  Use this switch
       to conform to a non-default data model.
  
! ‘-mfix-and-continue’
! ‘-ffix-and-continue’
! ‘-findirect-data’
       Generate code suitable for fast turnaround development, such as to
!      allow GDB to dynamically load ‘.o’ files into already-running
!      programs.  ‘-findirect-data’ and ‘-ffix-and-continue’ are provided
       for backwards compatibility.
  
! ‘-all_load’
       Loads all members of static archive libraries.  See man ld(1) for
       more information.
  
! ‘-arch_errors_fatal’
       Cause the errors having to do with files that have the wrong
       architecture to be fatal.
  
! ‘-bind_at_load’
       Causes the output file to be marked such that the dynamic linker
       will bind all undefined references when the file is loaded or
       launched.
  
! ‘-bundle’
       Produce a Mach-o bundle format file.  See man ld(1) for more
       information.
  
! ‘-bundle_loader EXECUTABLE’
       This option specifies the EXECUTABLE that will load the build
       output file being linked.  See man ld(1) for more information.
  
! ‘-dynamiclib’
       When passed this option, GCC produces a dynamic library instead of
!      an executable when linking, using the Darwin ‘libtool’ command.
  
! ‘-force_cpusubtype_ALL’
!      This causes GCC's output file to have the ‘ALL’ subtype, instead of
!      one controlled by the ‘-mcpu’ or ‘-march’ option.
  
! ‘-nodefaultrpaths’
       Do not add default run paths for the compiler library directories
       to executables, modules or dynamic libraries.  On macOS 10.5 and
       later, the embedded runpath is added by default unless the user
!      adds ‘-nodefaultrpaths’ to the link line.  Run paths are needed
       (and therefore enforced) to build on macOS version 10.11 or later.
  
! ‘-allowable_client CLIENT_NAME’
! ‘-client_name’
! ‘-compatibility_version’
! ‘-current_version’
! ‘-dead_strip’
! ‘-dependency-file’
! ‘-dylib_file’
! ‘-dylinker_install_name’
! ‘-dynamic’
! ‘-exported_symbols_list’
! ‘-filelist’
! ‘-flat_namespace’
! ‘-force_flat_namespace’
! ‘-headerpad_max_install_names’
! ‘-image_base’
! ‘-init’
! ‘-install_name’
! ‘-keep_private_externs’
! ‘-multi_module’
! ‘-multiply_defined’
! ‘-multiply_defined_unused’
! ‘-noall_load’
! ‘-no_dead_strip_inits_and_terms’
! ‘-nofixprebinding’
! ‘-nomultidefs’
! ‘-noprebind’
! ‘-noseglinkedit’
! ‘-pagezero_size’
! ‘-prebind’
! ‘-prebind_all_twolevel_modules’
! ‘-private_bundle’
! ‘-read_only_relocs’
! ‘-sectalign’
! ‘-sectobjectsymbols’
! ‘-whyload’
! ‘-seg1addr’
! ‘-sectcreate’
! ‘-sectobjectsymbols’
! ‘-sectorder’
! ‘-segaddr’
! ‘-segs_read_only_addr’
! ‘-segs_read_write_addr’
! ‘-seg_addr_table’
! ‘-seg_addr_table_filename’
! ‘-seglinkedit’
! ‘-segprot’
! ‘-segs_read_only_addr’
! ‘-segs_read_write_addr’
! ‘-single_module’
! ‘-static’
! ‘-sub_library’
! ‘-sub_umbrella’
! ‘-twolevel_namespace’
! ‘-umbrella’
! ‘-undefined’
! ‘-unexported_symbols_list’
! ‘-weak_reference_mismatches’
! ‘-whatsloaded’
       These options are passed to the Darwin linker.  The Darwin linker
       man page describes them in detail.
  
*************** File: gcc.info,  Node: DEC Alpha Options
*** 23732,23744 ****
  3.19.12 DEC Alpha Options
  -------------------------
  
! These '-m' options are defined for the DEC Alpha implementations:
  
! '-mno-soft-float'
! '-msoft-float'
       Use (do not use) the hardware floating-point instructions for
!      floating-point operations.  When '-msoft-float' is specified,
!      functions in 'libgcc.a' are used to perform floating-point
       operations.  Unless they are replaced by routines that emulate the
       floating-point operations, or compiled in such a way as to call
       such emulations routines, these routines issue floating-point
--- 23743,23755 ----
  3.19.12 DEC Alpha Options
  -------------------------
  
! These ‘-m’ options are defined for the DEC Alpha implementations:
  
! ‘-mno-soft-float’
! ‘-msoft-float’
       Use (do not use) the hardware floating-point instructions for
!      floating-point operations.  When ‘-msoft-float’ is specified,
!      functions in ‘libgcc.a’ are used to perform floating-point
       operations.  Unless they are replaced by routines that emulate the
       floating-point operations, or compiled in such a way as to call
       such emulations routines, these routines issue floating-point
*************** These '-m' options are defined for the D
*** 23749,23840 ****
       Note that Alpha implementations without floating-point operations
       are required to have floating-point registers.
  
! '-mfp-reg'
! '-mno-fp-regs'
       Generate code that uses (does not use) the floating-point register
!      set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
       register set is not used, floating-point operands are passed in
       integer registers as if they were integers and floating-point
!      results are passed in '$0' instead of '$f0'.  This is a
       non-standard calling sequence, so any function with a
       floating-point argument or return value called by code compiled
!      with '-mno-fp-regs' must also be compiled with that option.
  
       A typical use of this option is building a kernel that does not
       use, and hence need not save and restore, any floating-point
       registers.
  
! '-mieee'
       The Alpha architecture implements floating-point hardware optimized
       for maximum performance.  It is mostly compliant with the IEEE
       floating-point standard.  However, for full compliance, software
       assistance is required.  This option generates code fully
       IEEE-compliant code _except_ that the INEXACT-FLAG is not
       maintained (see below).  If this option is turned on, the
!      preprocessor macro '_IEEE_FP' is defined during compilation.  The
       resulting code is less efficient but is able to correctly support
       denormalized numbers and exceptional IEEE values such as
       not-a-number and plus/minus infinity.  Other Alpha compilers call
!      this option '-ieee_with_no_inexact'.
  
! '-mieee-with-inexact'
!      This is like '-mieee' except the generated code also maintains the
       IEEE INEXACT-FLAG.  Turning on this option causes the generated
       code to implement fully-compliant IEEE math.  In addition to
!      '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
       On some Alpha implementations the resulting code may execute
       significantly slower than the code generated by default.  Since
       there is very little code that depends on the INEXACT-FLAG, you
       should normally not specify this option.  Other Alpha compilers
!      call this option '-ieee_with_inexact'.
  
! '-mfp-trap-mode=TRAP-MODE'
       This option controls what floating-point related traps are enabled.
!      Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
       mode can be set to one of four values:
  
!      'n'
            This is the default (normal) setting.  The only traps that are
            enabled are the ones that cannot be disabled in software
            (e.g., division by zero trap).
  
!      'u'
!           In addition to the traps enabled by 'n', underflow traps are
            enabled as well.
  
!      'su'
!           Like 'u', but the instructions are marked to be safe for
            software completion (see Alpha architecture manual for
            details).
  
!      'sui'
!           Like 'su', but inexact traps are enabled as well.
  
! '-mfp-rounding-mode=ROUNDING-MODE'
       Selects the IEEE rounding mode.  Other Alpha compilers call this
!      option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
  
!      'n'
            Normal IEEE rounding mode.  Floating-point numbers are rounded
            towards the nearest machine number or towards the even machine
            number in case of a tie.
  
!      'm'
            Round towards minus infinity.
  
!      'c'
            Chopped rounding mode.  Floating-point numbers are rounded
            towards zero.
  
!      'd'
            Dynamic rounding mode.  A field in the floating-point control
            register (FPCR, see Alpha architecture reference manual)
            controls the rounding mode in effect.  The C library
            initializes this register for rounding towards plus infinity.
!           Thus, unless your program modifies the FPCR, 'd' corresponds
            to round towards plus infinity.
  
! '-mtrap-precision=TRAP-PRECISION'
       In the Alpha architecture, floating-point traps are imprecise.
       This means without software assistance it is impossible to recover
       from a floating trap and program execution normally needs to be
--- 23760,23851 ----
       Note that Alpha implementations without floating-point operations
       are required to have floating-point registers.
  
! ‘-mfp-reg’
! ‘-mno-fp-regs’
       Generate code that uses (does not use) the floating-point register
!      set.  ‘-mno-fp-regs’ implies ‘-msoft-float’.  If the floating-point
       register set is not used, floating-point operands are passed in
       integer registers as if they were integers and floating-point
!      results are passed in ‘$0’ instead of ‘$f0’.  This is a
       non-standard calling sequence, so any function with a
       floating-point argument or return value called by code compiled
!      with ‘-mno-fp-regs’ must also be compiled with that option.
  
       A typical use of this option is building a kernel that does not
       use, and hence need not save and restore, any floating-point
       registers.
  
! ‘-mieee’
       The Alpha architecture implements floating-point hardware optimized
       for maximum performance.  It is mostly compliant with the IEEE
       floating-point standard.  However, for full compliance, software
       assistance is required.  This option generates code fully
       IEEE-compliant code _except_ that the INEXACT-FLAG is not
       maintained (see below).  If this option is turned on, the
!      preprocessor macro ‘_IEEE_FP’ is defined during compilation.  The
       resulting code is less efficient but is able to correctly support
       denormalized numbers and exceptional IEEE values such as
       not-a-number and plus/minus infinity.  Other Alpha compilers call
!      this option ‘-ieee_with_no_inexact’.
  
! ‘-mieee-with-inexact’
!      This is like ‘-mieee’ except the generated code also maintains the
       IEEE INEXACT-FLAG.  Turning on this option causes the generated
       code to implement fully-compliant IEEE math.  In addition to
!      ‘_IEEE_FP’, ‘_IEEE_FP_EXACT’ is defined as a preprocessor macro.
       On some Alpha implementations the resulting code may execute
       significantly slower than the code generated by default.  Since
       there is very little code that depends on the INEXACT-FLAG, you
       should normally not specify this option.  Other Alpha compilers
!      call this option ‘-ieee_with_inexact’.
  
! ‘-mfp-trap-mode=TRAP-MODE’
       This option controls what floating-point related traps are enabled.
!      Other Alpha compilers call this option ‘-fptm TRAP-MODE’.  The trap
       mode can be set to one of four values:
  
!      ‘n’
            This is the default (normal) setting.  The only traps that are
            enabled are the ones that cannot be disabled in software
            (e.g., division by zero trap).
  
!      ‘u’
!           In addition to the traps enabled by ‘n’, underflow traps are
            enabled as well.
  
!      ‘su’
!           Like ‘u’, but the instructions are marked to be safe for
            software completion (see Alpha architecture manual for
            details).
  
!      ‘sui’
!           Like ‘su’, but inexact traps are enabled as well.
  
! ‘-mfp-rounding-mode=ROUNDING-MODE’
       Selects the IEEE rounding mode.  Other Alpha compilers call this
!      option ‘-fprm ROUNDING-MODE’.  The ROUNDING-MODE can be one of:
  
!      ‘n’
            Normal IEEE rounding mode.  Floating-point numbers are rounded
            towards the nearest machine number or towards the even machine
            number in case of a tie.
  
!      ‘m’
            Round towards minus infinity.
  
!      ‘c’
            Chopped rounding mode.  Floating-point numbers are rounded
            towards zero.
  
!      ‘d’
            Dynamic rounding mode.  A field in the floating-point control
            register (FPCR, see Alpha architecture reference manual)
            controls the rounding mode in effect.  The C library
            initializes this register for rounding towards plus infinity.
!           Thus, unless your program modifies the FPCR, ‘d’ corresponds
            to round towards plus infinity.
  
! ‘-mtrap-precision=TRAP-PRECISION’
       In the Alpha architecture, floating-point traps are imprecise.
       This means without software assistance it is impossible to recover
       from a floating trap and program execution normally needs to be
*************** These '-m' options are defined for the D
*** 23843,23872 ****
       floating-point trap.  Depending on the requirements of an
       application, different levels of precisions can be selected:
  
!      'p'
            Program precision.  This option is the default and means a
            trap handler can only identify which program caused a
            floating-point exception.
  
!      'f'
            Function precision.  The trap handler can determine the
            function that caused a floating-point exception.
  
!      'i'
            Instruction precision.  The trap handler can determine the
            exact instruction that caused a floating-point exception.
  
       Other Alpha compilers provide the equivalent options called
!      '-scope_safe' and '-resumption_safe'.
  
! '-mieee-conformant'
       This option marks the generated code as IEEE conformant.  You must
!      not use this option unless you also specify '-mtrap-precision=i'
!      and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
!      effect is to emit the line '.eflag 48' in the function prologue of
       the generated assembly file.
  
! '-mbuild-constants'
       Normally GCC examines a 32- or 64-bit integer constant to see if it
       can construct it from smaller constants in two or three
       instructions.  If it cannot, it outputs the constant as a literal
--- 23854,23883 ----
       floating-point trap.  Depending on the requirements of an
       application, different levels of precisions can be selected:
  
!      ‘p’
            Program precision.  This option is the default and means a
            trap handler can only identify which program caused a
            floating-point exception.
  
!      ‘f’
            Function precision.  The trap handler can determine the
            function that caused a floating-point exception.
  
!      ‘i’
            Instruction precision.  The trap handler can determine the
            exact instruction that caused a floating-point exception.
  
       Other Alpha compilers provide the equivalent options called
!      ‘-scope_safe’ and ‘-resumption_safe’.
  
! ‘-mieee-conformant’
       This option marks the generated code as IEEE conformant.  You must
!      not use this option unless you also specify ‘-mtrap-precision=i’
!      and either ‘-mfp-trap-mode=su’ or ‘-mfp-trap-mode=sui’.  Its only
!      effect is to emit the line ‘.eflag 48’ in the function prologue of
       the generated assembly file.
  
! ‘-mbuild-constants’
       Normally GCC examines a 32- or 64-bit integer constant to see if it
       can construct it from smaller constants in two or three
       instructions.  If it cannot, it outputs the constant as a literal
*************** These '-m' options are defined for the D
*** 23881,23907 ****
       before it can find the variables and constants in its own data
       segment.
  
! '-mbwx'
! '-mno-bwx'
! '-mcix'
! '-mno-cix'
! '-mfix'
! '-mno-fix'
! '-mmax'
! '-mno-max'
       Indicate whether GCC should generate code to use the optional BWX,
       CIX, FIX and MAX instruction sets.  The default is to use the
!      instruction sets supported by the CPU type specified via '-mcpu='
       option or that of the CPU on which GCC was built if none is
       specified.
  
! '-mfloat-vax'
! '-mfloat-ieee'
       Generate code that uses (does not use) VAX F and G floating-point
       arithmetic instead of IEEE single and double precision.
  
! '-mexplicit-relocs'
! '-mno-explicit-relocs'
       Older Alpha assemblers provided no way to generate symbol
       relocations except via assembler macros.  Use of these macros does
       not allow optimal instruction scheduling.  GNU binutils as of
--- 23892,23918 ----
       before it can find the variables and constants in its own data
       segment.
  
! ‘-mbwx’
! ‘-mno-bwx’
! ‘-mcix’
! ‘-mno-cix’
! ‘-mfix’
! ‘-mno-fix’
! ‘-mmax’
! ‘-mno-max’
       Indicate whether GCC should generate code to use the optional BWX,
       CIX, FIX and MAX instruction sets.  The default is to use the
!      instruction sets supported by the CPU type specified via ‘-mcpu=’
       option or that of the CPU on which GCC was built if none is
       specified.
  
! ‘-mfloat-vax’
! ‘-mfloat-ieee’
       Generate code that uses (does not use) VAX F and G floating-point
       arithmetic instead of IEEE single and double precision.
  
! ‘-mexplicit-relocs’
! ‘-mno-explicit-relocs’
       Older Alpha assemblers provided no way to generate symbol
       relocations except via assembler macros.  Use of these macros does
       not allow optimal instruction scheduling.  GNU binutils as of
*************** These '-m' options are defined for the D
*** 23911,23948 ****
       detects the capabilities of the assembler when it is built and sets
       the default accordingly.
  
! '-msmall-data'
! '-mlarge-data'
!      When '-mexplicit-relocs' is in effect, static data is accessed via
!      "gp-relative" relocations.  When '-msmall-data' is used, objects 8
!      bytes long or smaller are placed in a "small data area" (the
!      '.sdata' and '.sbss' sections) and are accessed via 16-bit
!      relocations off of the '$gp' register.  This limits the size of the
       small data area to 64KB, but allows the variables to be directly
       accessed via a single instruction.
  
!      The default is '-mlarge-data'.  With this option the data area is
       limited to just below 2GB.  Programs that require more than 2GB of
!      data must use 'malloc' or 'mmap' to allocate the data in the heap
       instead of in the program's data segment.
  
!      When generating code for shared libraries, '-fpic' implies
!      '-msmall-data' and '-fPIC' implies '-mlarge-data'.
  
! '-msmall-text'
! '-mlarge-text'
!      When '-msmall-text' is used, the compiler assumes that the code of
       the entire program (or shared library) fits in 4MB, and is thus
!      reachable with a branch instruction.  When '-msmall-data' is used,
!      the compiler can assume that all local symbols share the same '$gp'
       value, and thus reduce the number of instructions required for a
       function call from 4 to 1.
  
!      The default is '-mlarge-text'.
  
! '-mcpu=CPU_TYPE'
       Set the instruction set and instruction scheduling parameters for
!      machine type CPU_TYPE.  You can specify either the 'EV' style name
       or the corresponding chip number.  GCC supports scheduling
       parameters for the EV4, EV5 and EV6 family of processors and
       chooses the default values for the instruction set from the
--- 23922,23959 ----
       detects the capabilities of the assembler when it is built and sets
       the default accordingly.
  
! ‘-msmall-data’
! ‘-mlarge-data’
!      When ‘-mexplicit-relocs’ is in effect, static data is accessed via
!      “gp-relative” relocations.  When ‘-msmall-data’ is used, objects 8
!      bytes long or smaller are placed in a “small data area” (the
!      ‘.sdata’ and ‘.sbss’ sections) and are accessed via 16-bit
!      relocations off of the ‘$gp’ register.  This limits the size of the
       small data area to 64KB, but allows the variables to be directly
       accessed via a single instruction.
  
!      The default is ‘-mlarge-data’.  With this option the data area is
       limited to just below 2GB.  Programs that require more than 2GB of
!      data must use ‘malloc’ or ‘mmap’ to allocate the data in the heap
       instead of in the program's data segment.
  
!      When generating code for shared libraries, ‘-fpic’ implies
!      ‘-msmall-data’ and ‘-fPIC’ implies ‘-mlarge-data’.
  
! ‘-msmall-text’
! ‘-mlarge-text’
!      When ‘-msmall-text’ is used, the compiler assumes that the code of
       the entire program (or shared library) fits in 4MB, and is thus
!      reachable with a branch instruction.  When ‘-msmall-data’ is used,
!      the compiler can assume that all local symbols share the same ‘$gp’
       value, and thus reduce the number of instructions required for a
       function call from 4 to 1.
  
!      The default is ‘-mlarge-text’.
  
! ‘-mcpu=CPU_TYPE’
       Set the instruction set and instruction scheduling parameters for
!      machine type CPU_TYPE.  You can specify either the ‘EV’ style name
       or the corresponding chip number.  GCC supports scheduling
       parameters for the EV4, EV5 and EV6 family of processors and
       chooses the default values for the instruction set from the
*************** These '-m' options are defined for the D
*** 23951,23999 ****
  
       Supported values for CPU_TYPE are
  
!      'ev4'
!      'ev45'
!      '21064'
            Schedules as an EV4 and has no instruction set extensions.
  
!      'ev5'
!      '21164'
            Schedules as an EV5 and has no instruction set extensions.
  
!      'ev56'
!      '21164a'
            Schedules as an EV5 and supports the BWX extension.
  
!      'pca56'
!      '21164pc'
!      '21164PC'
            Schedules as an EV5 and supports the BWX and MAX extensions.
  
!      'ev6'
!      '21264'
            Schedules as an EV6 and supports the BWX, FIX, and MAX
            extensions.
  
!      'ev67'
!      '21264a'
            Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
            extensions.
  
!      Native toolchains also support the value 'native', which selects
       the best architecture option for the host processor.
!      '-mcpu=native' has no effect if GCC does not recognize the
       processor.
  
! '-mtune=CPU_TYPE'
       Set only the instruction scheduling parameters for machine type
       CPU_TYPE.  The instruction set is not changed.
  
!      Native toolchains also support the value 'native', which selects
       the best architecture option for the host processor.
!      '-mtune=native' has no effect if GCC does not recognize the
       processor.
  
! '-mmemory-latency=TIME'
       Sets the latency the scheduler should assume for typical memory
       references as seen by the application.  This number is highly
       dependent on the memory access patterns used by the application and
--- 23962,24010 ----
  
       Supported values for CPU_TYPE are
  
!      ‘ev4’
!      ‘ev45’
!      ‘21064’
            Schedules as an EV4 and has no instruction set extensions.
  
!      ‘ev5’
!      ‘21164’
            Schedules as an EV5 and has no instruction set extensions.
  
!      ‘ev56’
!      ‘21164a’
            Schedules as an EV5 and supports the BWX extension.
  
!      ‘pca56’
!      ‘21164pc’
!      ‘21164PC’
            Schedules as an EV5 and supports the BWX and MAX extensions.
  
!      ‘ev6’
!      ‘21264’
            Schedules as an EV6 and supports the BWX, FIX, and MAX
            extensions.
  
!      ‘ev67’
!      ‘21264a’
            Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
            extensions.
  
!      Native toolchains also support the value ‘native’, which selects
       the best architecture option for the host processor.
!      ‘-mcpu=native’ has no effect if GCC does not recognize the
       processor.
  
! ‘-mtune=CPU_TYPE’
       Set only the instruction scheduling parameters for machine type
       CPU_TYPE.  The instruction set is not changed.
  
!      Native toolchains also support the value ‘native’, which selects
       the best architecture option for the host processor.
!      ‘-mtune=native’ has no effect if GCC does not recognize the
       processor.
  
! ‘-mmemory-latency=TIME’
       Sets the latency the scheduler should assume for typical memory
       references as seen by the application.  This number is highly
       dependent on the memory access patterns used by the application and
*************** These '-m' options are defined for the D
*** 24001,24013 ****
  
       Valid options for TIME are
  
!      'NUMBER'
            A decimal number representing clock cycles.
  
!      'L1'
!      'L2'
!      'L3'
!      'main'
            The compiler contains estimates of the number of clock cycles
            for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
            (also called Dcache, Scache, and Bcache), as well as to main
--- 24012,24024 ----
  
       Valid options for TIME are
  
!      ‘NUMBER’
            A decimal number representing clock cycles.
  
!      ‘L1’
!      ‘L2’
!      ‘L3’
!      ‘main’
            The compiler contains estimates of the number of clock cycles
            for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
            (also called Dcache, Scache, and Bcache), as well as to main
*************** File: gcc.info,  Node: eBPF Options,  Ne
*** 24019,24131 ****
  3.19.13 eBPF Options
  --------------------
  
! '-mframe-limit=BYTES'
       This specifies the hard limit for frame sizes, in bytes.
       Currently, the value that can be specified should be less than or
!      equal to '32767'.  Defaults to whatever limit is imposed by the
       version of the Linux kernel targeted.
  
! '-mbig-endian'
       Generate code for a big-endian target.
  
! '-mlittle-endian'
       Generate code for a little-endian target.  This is the default.
  
! '-mjmpext'
! '-mno-jmpext'
       Enable or disable generation of extra conditional-branch
       instructions.  Enabled for CPU v2 and above.
  
! '-mjmp32'
! '-mno-jmp32'
       Enable or disable generation of 32-bit jump instructions.  Enabled
       for CPU v3 and above.
  
! '-malu32'
! '-mno-alu32'
       Enable or disable generation of 32-bit ALU instructions.  Enabled
       for CPU v3 and above.
  
! '-mv3-atomics'
! '-mno-v3-atomics'
       Enable or disable instructions for general atomic operations
       introduced in CPU v3.  Enabled for CPU v3 and above.
  
! '-mbswap'
! '-mno-bswap'
       Enable or disable byte swap instructions.  Enabled for CPU v4 and
       above.
  
! '-msdiv'
! '-mno-sdiv'
       Enable or disable signed division and modulus instructions.
       Enabled for CPU v4 and above.
  
! '-msmov'
! '-mno-smov'
       Enable or disable sign-extending move and memory load instructions.
       Enabled for CPU v4 and above.
  
! '-mcpu=VERSION'
       This specifies which version of the eBPF ISA to target.  Newer
!      versions may not be supported by all kernels.  The default is 'v4'.
  
       Supported values for VERSION are:
  
!      'v1'
            The first stable eBPF ISA with no special features or
            extensions.
  
!      'v2'
!           Supports the jump extensions, as in '-mjmpext'.
  
!      'v3'
            All features of v2, plus:
!              - 32-bit jump operations, as in '-mjmp32'
!              - 32-bit ALU operations, as in '-malu32'
!              - general atomic operations, as in '-mv3-atomics'
  
!      'v4'
            All features of v3, plus:
!              - Byte swap instructions, as in '-mbswap'
!              - Signed division and modulus instructions, as in '-msdiv'
!              - Sign-extending move and memory load instructions, as in
!                '-msmov'
  
! '-mco-re'
       Enable BPF Compile Once - Run Everywhere (CO-RE) support.  Requires
!      and is implied by '-gbtf'.
  
! '-mno-co-re'
       Disable BPF Compile Once - Run Everywhere (CO-RE) support.  BPF
       CO-RE support is enabled by default when generating BTF debug
       information for the BPF target.
  
! '-mxbpf'
       Generate code for an expanded version of BPF, which relaxes some of
       the restrictions imposed by the BPF architecture:
!         - Save and restore callee-saved registers at function entry and
            exit, respectively.
  
! '-masm=DIALECT'
       Outputs assembly instructions using eBPF selected DIALECT.  The
!      default is 'pseudoc'.
  
       Supported values for DIALECT are:
  
!      'normal'
            Outputs normal assembly dialect.
  
!      'pseudoc'
            Outputs pseudo-c assembly dialect.
  
! '-minline-memops-threshold=BYTES'
       Specifies a size threshold in bytes at or below which memmove,
       memcpy and memset shall always be expanded inline.  Operations
       dealing with sizes larger than this threshold would have to be
       implemented using a library call instead of being expanded inline,
       but since BPF doesn't allow libcalls, exceeding this threshold
!      results in a compile-time error.  The default is '1024' bytes.
  
  
  File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: eBPF Options,  Up: Submodel Options
--- 24030,24142 ----
  3.19.13 eBPF Options
  --------------------
  
! ‘-mframe-limit=BYTES’
       This specifies the hard limit for frame sizes, in bytes.
       Currently, the value that can be specified should be less than or
!      equal to ‘32767’.  Defaults to whatever limit is imposed by the
       version of the Linux kernel targeted.
  
! ‘-mbig-endian’
       Generate code for a big-endian target.
  
! ‘-mlittle-endian’
       Generate code for a little-endian target.  This is the default.
  
! ‘-mjmpext’
! ‘-mno-jmpext’
       Enable or disable generation of extra conditional-branch
       instructions.  Enabled for CPU v2 and above.
  
! ‘-mjmp32’
! ‘-mno-jmp32’
       Enable or disable generation of 32-bit jump instructions.  Enabled
       for CPU v3 and above.
  
! ‘-malu32’
! ‘-mno-alu32’
       Enable or disable generation of 32-bit ALU instructions.  Enabled
       for CPU v3 and above.
  
! ‘-mv3-atomics’
! ‘-mno-v3-atomics’
       Enable or disable instructions for general atomic operations
       introduced in CPU v3.  Enabled for CPU v3 and above.
  
! ‘-mbswap’
! ‘-mno-bswap’
       Enable or disable byte swap instructions.  Enabled for CPU v4 and
       above.
  
! ‘-msdiv’
! ‘-mno-sdiv’
       Enable or disable signed division and modulus instructions.
       Enabled for CPU v4 and above.
  
! ‘-msmov’
! ‘-mno-smov’
       Enable or disable sign-extending move and memory load instructions.
       Enabled for CPU v4 and above.
  
! ‘-mcpu=VERSION’
       This specifies which version of the eBPF ISA to target.  Newer
!      versions may not be supported by all kernels.  The default is ‘v4’.
  
       Supported values for VERSION are:
  
!      ‘v1’
            The first stable eBPF ISA with no special features or
            extensions.
  
!      ‘v2’
!           Supports the jump extensions, as in ‘-mjmpext’.
  
!      ‘v3’
            All features of v2, plus:
!              − 32-bit jump operations, as in ‘-mjmp32’
!              − 32-bit ALU operations, as in ‘-malu32’
!              − general atomic operations, as in ‘-mv3-atomics’
  
!      ‘v4’
            All features of v3, plus:
!              − Byte swap instructions, as in ‘-mbswap’
!              − Signed division and modulus instructions, as in ‘-msdiv’
!              − Sign-extending move and memory load instructions, as in
!                ‘-msmov’
  
! ‘-mco-re’
       Enable BPF Compile Once - Run Everywhere (CO-RE) support.  Requires
!      and is implied by ‘-gbtf’.
  
! ‘-mno-co-re’
       Disable BPF Compile Once - Run Everywhere (CO-RE) support.  BPF
       CO-RE support is enabled by default when generating BTF debug
       information for the BPF target.
  
! ‘-mxbpf’
       Generate code for an expanded version of BPF, which relaxes some of
       the restrictions imposed by the BPF architecture:
!         − Save and restore callee-saved registers at function entry and
            exit, respectively.
  
! ‘-masm=DIALECT’
       Outputs assembly instructions using eBPF selected DIALECT.  The
!      default is ‘pseudoc’.
  
       Supported values for DIALECT are:
  
!      ‘normal’
            Outputs normal assembly dialect.
  
!      ‘pseudoc’
            Outputs pseudo-c assembly dialect.
  
! ‘-minline-memops-threshold=BYTES’
       Specifies a size threshold in bytes at or below which memmove,
       memcpy and memset shall always be expanded inline.  Operations
       dealing with sizes larger than this threshold would have to be
       implemented using a library call instead of being expanded inline,
       but since BPF doesn't allow libcalls, exceeding this threshold
!      results in a compile-time error.  The default is ‘1024’ bytes.
  
  
  File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: eBPF Options,  Up: Submodel Options
*************** File: gcc.info,  Node: FR30 Options,  Ne
*** 24135,24148 ****
  
  These options are defined specifically for the FR30 port.
  
! '-msmall-model'
       Use the small address space model.  This can produce smaller code,
       but it does assume that all symbolic values and addresses fit into
       a 20-bit range.
  
! '-mno-lsim'
       Assume that runtime support has been provided and so there is no
!      need to include the simulator library ('libsim.a') on the linker
       command line.
  
  
--- 24146,24159 ----
  
  These options are defined specifically for the FR30 port.
  
! ‘-msmall-model’
       Use the small address space model.  This can produce smaller code,
       but it does assume that all symbolic values and addresses fit into
       a 20-bit range.
  
! ‘-mno-lsim’
       Assume that runtime support has been provided and so there is no
!      need to include the simulator library (‘libsim.a’) on the linker
       command line.
  
  
*************** File: gcc.info,  Node: FT32 Options,  Ne
*** 24153,24179 ****
  
  These options are defined specifically for the FT32 port.
  
! '-msim'
       Specifies that the program will be run on the simulator.  This
       causes an alternate runtime startup and library to be linked.  You
       must not use this option when generating programs that will run on
       real hardware; you must provide your own runtime library for
       whatever I/O functions are needed.
  
! '-mlra'
       Enable Local Register Allocation.  This is still experimental for
       FT32, so by default the compiler uses standard reload.
  
! '-mnodiv'
       Do not use div and mod instructions.
  
! '-mft32b'
       Enable use of the extended instructions of the FT32B processor.
  
! '-mcompress'
       Compress all code using the Ft32B code compression scheme.
  
! '-mnopm'
       Do not generate code that reads program memory.
  
  
--- 24164,24190 ----
  
  These options are defined specifically for the FT32 port.
  
! ‘-msim’
       Specifies that the program will be run on the simulator.  This
       causes an alternate runtime startup and library to be linked.  You
       must not use this option when generating programs that will run on
       real hardware; you must provide your own runtime library for
       whatever I/O functions are needed.
  
! ‘-mlra’
       Enable Local Register Allocation.  This is still experimental for
       FT32, so by default the compiler uses standard reload.
  
! ‘-mnodiv’
       Do not use div and mod instructions.
  
! ‘-mft32b’
       Enable use of the extended instructions of the FT32B processor.
  
! ‘-mcompress’
       Compress all code using the Ft32B code compression scheme.
  
! ‘-mnopm’
       Do not generate code that reads program memory.
  
  
*************** File: gcc.info,  Node: FRV Options,  Nex
*** 24182,24443 ****
  3.19.16 FRV Options
  -------------------
  
! '-mgpr-32'
  
       Only use the first 32 general-purpose registers.
  
! '-mgpr-64'
  
       Use all 64 general-purpose registers.
  
! '-mfpr-32'
  
       Use only the first 32 floating-point registers.
  
! '-mfpr-64'
  
       Use all 64 floating-point registers.
  
! '-mhard-float'
  
       Use hardware instructions for floating-point operations.
  
! '-msoft-float'
  
       Use library routines for floating-point operations.
  
! '-malloc-cc'
  
       Dynamically allocate condition code registers.
  
! '-mfixed-cc'
  
       Do not try to dynamically allocate condition code registers, only
!      use 'icc0' and 'fcc0'.
  
! '-mdword'
  
       Change ABI to use double word insns.
  
! '-mno-dword'
  
       Do not use double word instructions.
  
! '-mdouble'
  
       Use floating-point double instructions.
  
! '-mno-double'
  
       Do not use floating-point double instructions.
  
! '-mmedia'
  
       Use media instructions.
  
! '-mno-media'
  
       Do not use media instructions.
  
! '-mmuladd'
  
       Use multiply and add/subtract instructions.
  
! '-mno-muladd'
  
       Do not use multiply and add/subtract instructions.
  
! '-mfdpic'
  
       Select the FDPIC ABI, which uses function descriptors to represent
       pointers to functions.  Without any PIC/PIE-related options, it
!      implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
       and small data are within a 12-bit range from the GOT base address;
!      with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
!      With a 'bfin-elf' target, this option implies '-msim'.
  
! '-minline-plt'
  
       Enable inlining of PLT entries in function calls to functions that
!      are not known to bind locally.  It has no effect without '-mfdpic'.
       It's enabled by default if optimizing for speed and compiling for
!      shared libraries (i.e., '-fPIC' or '-fpic'), or when an
!      optimization option such as '-O3' or above is present in the
       command line.
  
! '-mTLS'
  
       Assume a large TLS segment when generating thread-local code.
  
! '-mtls'
  
       Do not assume a large TLS segment when generating thread-local
       code.
  
! '-mgprel-ro'
  
!      Enable the use of 'GPREL' relocations in the FDPIC ABI for data
       that is known to be in read-only sections.  It's enabled by
!      default, except for '-fpic' or '-fpie': even though it may help
       make the global offset table smaller, it trades 1 instruction for
!      4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
       which may be shared by multiple symbols, and it avoids the need for
       a GOT entry for the referenced symbol, so it's more likely to be a
!      win.  If it is not, '-mno-gprel-ro' can be used to disable it.
  
! '-multilib-library-pic'
  
       Link with the (library, not FD) pic libraries.  It's implied by
!      '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
!      '-mfdpic'.  You should never have to use it explicitly.
  
! '-mlinked-fp'
  
       Follow the EABI requirement of always creating a frame pointer
       whenever a stack frame is allocated.  This option is enabled by
!      default and can be disabled with '-mno-linked-fp'.
  
! '-mlong-calls'
  
       Use indirect addressing to call functions outside the current
       compilation unit.  This allows the functions to be placed anywhere
       within the 32-bit address space.
  
! '-malign-labels'
  
       Try to align labels to an 8-byte boundary by inserting NOPs into
       the previous packet.  This option only has an effect when VLIW
       packing is enabled.  It doesn't create new packets; it merely adds
       NOPs to existing ones.
  
! '-mlibrary-pic'
  
       Generate position-independent EABI code.
  
! '-macc-4'
  
       Use only the first four media accumulator registers.
  
! '-macc-8'
  
       Use all eight media accumulator registers.
  
! '-mpack'
  
       Pack VLIW instructions.
  
! '-mno-pack'
  
       Do not pack VLIW instructions.
  
! '-mno-eflags'
  
       Do not mark ABI switches in e_flags.
  
! '-mcond-move'
  
       Enable the use of conditional-move instructions (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mno-cond-move'
  
       Disable the use of conditional-move instructions.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mscc'
  
       Enable the use of conditional set instructions (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mno-scc'
  
       Disable the use of conditional set instructions.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mcond-exec'
  
       Enable the use of conditional execution (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mno-cond-exec'
  
       Disable the use of conditional execution.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mvliw-branch'
  
       Run a pass to pack branches into VLIW instructions (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mno-vliw-branch'
  
       Do not run a pass to pack branches into VLIW instructions.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mmulti-cond-exec'
  
!      Enable optimization of '&&' and '||' in conditional execution
       (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mno-multi-cond-exec'
  
!      Disable optimization of '&&' and '||' in conditional execution.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mnested-cond-exec'
  
       Enable nested conditional execution optimizations (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-mno-nested-cond-exec'
  
       Disable nested conditional execution optimizations.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! '-moptimize-membar'
  
!      This switch removes redundant 'membar' instructions from the
       compiler-generated code.  It is enabled by default.
  
! '-mno-optimize-membar'
  
!      This switch disables the automatic removal of redundant 'membar'
       instructions from the generated code.
  
! '-mtomcat-stats'
  
       Cause gas to print out tomcat statistics.
  
! '-mcpu=CPU'
  
       Select the processor type for which to generate code.  Possible
!      values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
!      'fr400', 'fr300' and 'simple'.
  
  
  File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
--- 24193,24454 ----
  3.19.16 FRV Options
  -------------------
  
! ‘-mgpr-32’
  
       Only use the first 32 general-purpose registers.
  
! ‘-mgpr-64’
  
       Use all 64 general-purpose registers.
  
! ‘-mfpr-32’
  
       Use only the first 32 floating-point registers.
  
! ‘-mfpr-64’
  
       Use all 64 floating-point registers.
  
! ‘-mhard-float’
  
       Use hardware instructions for floating-point operations.
  
! ‘-msoft-float’
  
       Use library routines for floating-point operations.
  
! ‘-malloc-cc’
  
       Dynamically allocate condition code registers.
  
! ‘-mfixed-cc’
  
       Do not try to dynamically allocate condition code registers, only
!      use ‘icc0’ and ‘fcc0’.
  
! ‘-mdword’
  
       Change ABI to use double word insns.
  
! ‘-mno-dword’
  
       Do not use double word instructions.
  
! ‘-mdouble’
  
       Use floating-point double instructions.
  
! ‘-mno-double’
  
       Do not use floating-point double instructions.
  
! ‘-mmedia’
  
       Use media instructions.
  
! ‘-mno-media’
  
       Do not use media instructions.
  
! ‘-mmuladd’
  
       Use multiply and add/subtract instructions.
  
! ‘-mno-muladd’
  
       Do not use multiply and add/subtract instructions.
  
! ‘-mfdpic’
  
       Select the FDPIC ABI, which uses function descriptors to represent
       pointers to functions.  Without any PIC/PIE-related options, it
!      implies ‘-fPIE’.  With ‘-fpic’ or ‘-fpie’, it assumes GOT entries
       and small data are within a 12-bit range from the GOT base address;
!      with ‘-fPIC’ or ‘-fPIE’, GOT offsets are computed with 32 bits.
!      With a ‘bfin-elf’ target, this option implies ‘-msim’.
  
! ‘-minline-plt’
  
       Enable inlining of PLT entries in function calls to functions that
!      are not known to bind locally.  It has no effect without ‘-mfdpic’.
       It's enabled by default if optimizing for speed and compiling for
!      shared libraries (i.e., ‘-fPIC’ or ‘-fpic’), or when an
!      optimization option such as ‘-O3’ or above is present in the
       command line.
  
! ‘-mTLS’
  
       Assume a large TLS segment when generating thread-local code.
  
! ‘-mtls’
  
       Do not assume a large TLS segment when generating thread-local
       code.
  
! ‘-mgprel-ro’
  
!      Enable the use of ‘GPREL’ relocations in the FDPIC ABI for data
       that is known to be in read-only sections.  It's enabled by
!      default, except for ‘-fpic’ or ‘-fpie’: even though it may help
       make the global offset table smaller, it trades 1 instruction for
!      4.  With ‘-fPIC’ or ‘-fPIE’, it trades 3 instructions for 4, one of
       which may be shared by multiple symbols, and it avoids the need for
       a GOT entry for the referenced symbol, so it's more likely to be a
!      win.  If it is not, ‘-mno-gprel-ro’ can be used to disable it.
  
! ‘-multilib-library-pic’
  
       Link with the (library, not FD) pic libraries.  It's implied by
!      ‘-mlibrary-pic’, as well as by ‘-fPIC’ and ‘-fpic’ without
!      ‘-mfdpic’.  You should never have to use it explicitly.
  
! ‘-mlinked-fp’
  
       Follow the EABI requirement of always creating a frame pointer
       whenever a stack frame is allocated.  This option is enabled by
!      default and can be disabled with ‘-mno-linked-fp’.
  
! ‘-mlong-calls’
  
       Use indirect addressing to call functions outside the current
       compilation unit.  This allows the functions to be placed anywhere
       within the 32-bit address space.
  
! ‘-malign-labels’
  
       Try to align labels to an 8-byte boundary by inserting NOPs into
       the previous packet.  This option only has an effect when VLIW
       packing is enabled.  It doesn't create new packets; it merely adds
       NOPs to existing ones.
  
! ‘-mlibrary-pic’
  
       Generate position-independent EABI code.
  
! ‘-macc-4’
  
       Use only the first four media accumulator registers.
  
! ‘-macc-8’
  
       Use all eight media accumulator registers.
  
! ‘-mpack’
  
       Pack VLIW instructions.
  
! ‘-mno-pack’
  
       Do not pack VLIW instructions.
  
! ‘-mno-eflags’
  
       Do not mark ABI switches in e_flags.
  
! ‘-mcond-move’
  
       Enable the use of conditional-move instructions (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mno-cond-move’
  
       Disable the use of conditional-move instructions.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mscc’
  
       Enable the use of conditional set instructions (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mno-scc’
  
       Disable the use of conditional set instructions.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mcond-exec’
  
       Enable the use of conditional execution (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mno-cond-exec’
  
       Disable the use of conditional execution.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mvliw-branch’
  
       Run a pass to pack branches into VLIW instructions (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mno-vliw-branch’
  
       Do not run a pass to pack branches into VLIW instructions.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mmulti-cond-exec’
  
!      Enable optimization of ‘&&’ and ‘||’ in conditional execution
       (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mno-multi-cond-exec’
  
!      Disable optimization of ‘&&’ and ‘||’ in conditional execution.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mnested-cond-exec’
  
       Enable nested conditional execution optimizations (default).
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-mno-nested-cond-exec’
  
       Disable nested conditional execution optimizations.
  
       This switch is mainly for debugging the compiler and will likely be
       removed in a future version.
  
! ‘-moptimize-membar’
  
!      This switch removes redundant ‘membar’ instructions from the
       compiler-generated code.  It is enabled by default.
  
! ‘-mno-optimize-membar’
  
!      This switch disables the automatic removal of redundant ‘membar’
       instructions from the generated code.
  
! ‘-mtomcat-stats’
  
       Cause gas to print out tomcat statistics.
  
! ‘-mcpu=CPU’
  
       Select the processor type for which to generate code.  Possible
!      values are ‘frv’, ‘fr550’, ‘tomcat’, ‘fr500’, ‘fr450’, ‘fr405’,
!      ‘fr400’, ‘fr300’ and ‘simple’.
  
  
  File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
*************** File: gcc.info,  Node: GNU/Linux Options
*** 24445,24485 ****
  3.19.17 GNU/Linux Options
  -------------------------
  
! These '-m' options are defined for GNU/Linux targets:
  
! '-mglibc'
       Use the GNU C library.  This is the default except on
!      '*-*-linux-*uclibc*', '*-*-linux-*musl*' and '*-*-linux-*android*'
       targets.
  
! '-muclibc'
!      Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
       targets.
  
! '-mmusl'
!      Use the musl C library.  This is the default on '*-*-linux-*musl*'
       targets.
  
! '-mbionic'
!      Use Bionic C library.  This is the default on '*-*-linux-*android*'
       targets.
  
! '-mandroid'
       Compile code compatible with Android platform.  This is the default
!      on '*-*-linux-*android*' targets.
  
!      When compiling, this option enables '-mbionic', '-fPIC',
!      '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
       option makes the GCC driver pass Android-specific options to the
       linker.  Finally, this option causes the preprocessor macro
!      '__ANDROID__' to be defined.
  
! '-tno-android-cc'
!      Disable compilation effects of '-mandroid', i.e., do not enable
!      '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
  
! '-tno-android-ld'
!      Disable linking effects of '-mandroid', i.e., pass standard Linux
       linking options to the linker.
  
  
--- 24456,24496 ----
  3.19.17 GNU/Linux Options
  -------------------------
  
! These ‘-m’ options are defined for GNU/Linux targets:
  
! ‘-mglibc’
       Use the GNU C library.  This is the default except on
!      ‘*-*-linux-*uclibc*’, ‘*-*-linux-*musl*’ and ‘*-*-linux-*android*’
       targets.
  
! ‘-muclibc’
!      Use uClibc C library.  This is the default on ‘*-*-linux-*uclibc*’
       targets.
  
! ‘-mmusl’
!      Use the musl C library.  This is the default on ‘*-*-linux-*musl*’
       targets.
  
! ‘-mbionic’
!      Use Bionic C library.  This is the default on ‘*-*-linux-*android*’
       targets.
  
! ‘-mandroid’
       Compile code compatible with Android platform.  This is the default
!      on ‘*-*-linux-*android*’ targets.
  
!      When compiling, this option enables ‘-mbionic’, ‘-fPIC’,
!      ‘-fno-exceptions’ and ‘-fno-rtti’ by default.  When linking, this
       option makes the GCC driver pass Android-specific options to the
       linker.  Finally, this option causes the preprocessor macro
!      ‘__ANDROID__’ to be defined.
  
! ‘-tno-android-cc’
!      Disable compilation effects of ‘-mandroid’, i.e., do not enable
!      ‘-mbionic’, ‘-fPIC’, ‘-fno-exceptions’ and ‘-fno-rtti’ by default.
  
! ‘-tno-android-ld’
!      Disable linking effects of ‘-mandroid’, i.e., pass standard Linux
       linking options to the linker.
  
  
*************** File: gcc.info,  Node: H8/300 Options,
*** 24488,24531 ****
  3.19.18 H8/300 Options
  ----------------------
  
! These '-m' options are defined for the H8/300 implementations:
  
! '-mrelax'
       Shorten some address references at link time, when possible; uses
!      the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
       for a fuller description.
  
! '-mh'
       Generate code for the H8/300H.
  
! '-ms'
       Generate code for the H8S.
  
! '-mn'
       Generate code for the H8S and H8/300H in the normal mode.  This
!      switch must be used either with '-mh' or '-ms'.
  
! '-ms2600'
       Generate code for the H8S/2600.  This switch must be used with
!      '-ms'.
  
! '-mexr'
       Extended registers are stored on stack before execution of function
!      with monitor attribute.  Default option is '-mexr'.  This option is
       valid only for H8S targets.
  
! '-mno-exr'
       Extended registers are not stored on stack before execution of
!      function with monitor attribute.  Default option is '-mno-exr'.
       This option is valid only for H8S targets.
  
! '-mint32'
!      Make 'int' data 32 bits by default.
  
! '-malign-300'
       On the H8/300H and H8S, use the same alignment rules as for the
       H8/300.  The default for the H8/300H and H8S is to align longs and
!      floats on 4-byte boundaries.  '-malign-300' causes them to be
       aligned on 2-byte boundaries.  This option has no effect on the
       H8/300.
  
--- 24499,24542 ----
  3.19.18 H8/300 Options
  ----------------------
  
! These ‘-m’ options are defined for the H8/300 implementations:
  
! ‘-mrelax’
       Shorten some address references at link time, when possible; uses
!      the linker option ‘-relax’.  *Note ‘ld’ and the H8/300: (ld)H8/300,
       for a fuller description.
  
! ‘-mh’
       Generate code for the H8/300H.
  
! ‘-ms’
       Generate code for the H8S.
  
! ‘-mn’
       Generate code for the H8S and H8/300H in the normal mode.  This
!      switch must be used either with ‘-mh’ or ‘-ms’.
  
! ‘-ms2600’
       Generate code for the H8S/2600.  This switch must be used with
!      ‘-ms’.
  
! ‘-mexr’
       Extended registers are stored on stack before execution of function
!      with monitor attribute.  Default option is ‘-mexr’.  This option is
       valid only for H8S targets.
  
! ‘-mno-exr’
       Extended registers are not stored on stack before execution of
!      function with monitor attribute.  Default option is ‘-mno-exr’.
       This option is valid only for H8S targets.
  
! ‘-mint32’
!      Make ‘int’ data 32 bits by default.
  
! ‘-malign-300’
       On the H8/300H and H8S, use the same alignment rules as for the
       H8/300.  The default for the H8/300H and H8S is to align longs and
!      floats on 4-byte boundaries.  ‘-malign-300’ causes them to be
       aligned on 2-byte boundaries.  This option has no effect on the
       H8/300.
  
*************** File: gcc.info,  Node: HPPA Options,  Ne
*** 24535,24647 ****
  3.19.19 HPPA Options
  --------------------
  
! These '-m' options are defined for the HPPA family of computers:
  
! '-march=ARCHITECTURE-TYPE'
       Generate code for the specified architecture.  The choices for
!      ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
!      for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
       HP-UX system to determine the proper architecture option for your
       machine.  Code compiled for lower numbered architectures runs on
       higher numbered architectures, but not the other way around.
  
! '-mpa-risc-1-0'
! '-mpa-risc-1-1'
! '-mpa-risc-2-0'
!      Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
       respectively.
  
! '-matomic-libcalls'
       Generate libcalls for atomic loads and stores when sync libcalls
       are disabled.  This option is enabled by default.  It only affects
       the generation of atomic libcalls by the HPPA backend.
  
!      Both the sync and 'libatomic' libcall implementations use locking.
       As a result, processor stores are not atomic with respect to other
       atomic operations.  Processor loads up to DImode are atomic with
       respect to other atomic operations provided they are implemented as
       a single access.
  
       The PA-RISC architecture does not support any atomic operations in
!      hardware except for the 'ldcw' instruction.  Thus, all atomic
       support is implemented using sync and atomic libcalls.  Sync
!      libcall support is in 'libgcc.a'.  Atomic libcall support is in
!      'libatomic'.
  
!      This option generates '__atomic_exchange' calls for atomic stores.
       It also provides special handling for atomic DImode accesses on
       32-bit targets.
  
! '-mbig-switch'
       Does nothing.  Preserved for backward compatibility.
  
! '-mcaller-copies'
       The caller copies function arguments passed by hidden reference.
       This option should be used with care as it is not compatible with
       the default 32-bit runtime.  However, only aggregates larger than
       eight bytes are passed by hidden reference and the option provides
       better compatibility with OpenMP.
  
! '-mcoherent-ldcw'
       Use ldcw/ldcd coherent cache-control hint.
  
! '-mdisable-fpregs'
!      Disable floating-point registers.  Equivalent to '-msoft-float'.
  
! '-mdisable-indexing'
       Prevent the compiler from using indexing address modes.  This
       avoids some rather obscure problems when compiling MIG generated
       code under MACH.
  
! '-mfast-indirect-calls'
       Generate code that assumes calls never cross space boundaries.
       This allows GCC to emit code that performs faster indirect calls.
  
       This option does not work in the presence of shared libraries or
       nested functions.
  
! '-mfixed-range=REGISTER-RANGE'
       Generate code treating the given register range as fixed registers.
       A fixed register is one that the register allocator cannot use.
       This is useful when compiling kernel code.  A register range is
       specified as two registers separated by a dash.  Multiple register
       ranges can be specified separated by a comma.
  
! '-mgas'
       Enable the use of assembler directives only GAS understands.
  
! '-mgnu-ld'
!      Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
       when building a shared library.  It is the default when GCC is
       configured, explicitly or implicitly, with the GNU linker.  This
!      option does not affect which 'ld' is called; it only changes what
!      parameters are passed to that 'ld'.  The 'ld' that is called is
!      determined by the '--with-ld' configure option, GCC's program
!      search path, and finally by the user's 'PATH'.  The linker used by
!      GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
       option is only available on the 64-bit HP-UX GCC, i.e. configured
!      with 'hppa*64*-*-hpux*'.
  
! '-mhp-ld'
!      Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
!      building a shared library and passes '+Accept TypeMismatch' to 'ld'
       on all links.  It is the default when GCC is configured, explicitly
       or implicitly, with the HP linker.  This option does not affect
!      which 'ld' is called; it only changes what parameters are passed to
!      that 'ld'.  The 'ld' that is called is determined by the
!      '--with-ld' configure option, GCC's program search path, and
!      finally by the user's 'PATH'.  The linker used by GCC can be
!      printed using 'which `gcc -print-prog-name=ld`'.  This option is
       only available on the 64-bit HP-UX GCC, i.e. configured with
!      'hppa*64*-*-hpux*'.
  
! '-mlinker-opt'
       Enable the optimization pass in the HP-UX linker.  Note this makes
       symbolic debugging impossible.  It also triggers a bug in the HP-UX
       8 and HP-UX 9 linkers in which they give bogus error messages when
       linking some programs.
  
! '-mlong-calls'
       Generate code that uses long call sequences.  This ensures that a
       call is always able to reach linker generated stubs.  The default
       is to generate long calls only when the distance from the call site
--- 24546,24658 ----
  3.19.19 HPPA Options
  --------------------
  
! These ‘-m’ options are defined for the HPPA family of computers:
  
! ‘-march=ARCHITECTURE-TYPE’
       Generate code for the specified architecture.  The choices for
!      ARCHITECTURE-TYPE are ‘1.0’ for PA 1.0, ‘1.1’ for PA 1.1, and ‘2.0’
!      for PA 2.0 processors.  Refer to ‘/usr/lib/sched.models’ on an
       HP-UX system to determine the proper architecture option for your
       machine.  Code compiled for lower numbered architectures runs on
       higher numbered architectures, but not the other way around.
  
! ‘-mpa-risc-1-0’
! ‘-mpa-risc-1-1’
! ‘-mpa-risc-2-0’
!      Synonyms for ‘-march=1.0’, ‘-march=1.1’, and ‘-march=2.0’
       respectively.
  
! ‘-matomic-libcalls’
       Generate libcalls for atomic loads and stores when sync libcalls
       are disabled.  This option is enabled by default.  It only affects
       the generation of atomic libcalls by the HPPA backend.
  
!      Both the sync and ‘libatomic’ libcall implementations use locking.
       As a result, processor stores are not atomic with respect to other
       atomic operations.  Processor loads up to DImode are atomic with
       respect to other atomic operations provided they are implemented as
       a single access.
  
       The PA-RISC architecture does not support any atomic operations in
!      hardware except for the ‘ldcw’ instruction.  Thus, all atomic
       support is implemented using sync and atomic libcalls.  Sync
!      libcall support is in ‘libgcc.a’.  Atomic libcall support is in
!      ‘libatomic’.
  
!      This option generates ‘__atomic_exchange’ calls for atomic stores.
       It also provides special handling for atomic DImode accesses on
       32-bit targets.
  
! ‘-mbig-switch’
       Does nothing.  Preserved for backward compatibility.
  
! ‘-mcaller-copies’
       The caller copies function arguments passed by hidden reference.
       This option should be used with care as it is not compatible with
       the default 32-bit runtime.  However, only aggregates larger than
       eight bytes are passed by hidden reference and the option provides
       better compatibility with OpenMP.
  
! ‘-mcoherent-ldcw’
       Use ldcw/ldcd coherent cache-control hint.
  
! ‘-mdisable-fpregs’
!      Disable floating-point registers.  Equivalent to ‘-msoft-float’.
  
! ‘-mdisable-indexing’
       Prevent the compiler from using indexing address modes.  This
       avoids some rather obscure problems when compiling MIG generated
       code under MACH.
  
! ‘-mfast-indirect-calls’
       Generate code that assumes calls never cross space boundaries.
       This allows GCC to emit code that performs faster indirect calls.
  
       This option does not work in the presence of shared libraries or
       nested functions.
  
! ‘-mfixed-range=REGISTER-RANGE’
       Generate code treating the given register range as fixed registers.
       A fixed register is one that the register allocator cannot use.
       This is useful when compiling kernel code.  A register range is
       specified as two registers separated by a dash.  Multiple register
       ranges can be specified separated by a comma.
  
! ‘-mgas’
       Enable the use of assembler directives only GAS understands.
  
! ‘-mgnu-ld’
!      Use options specific to GNU ‘ld’.  This passes ‘-shared’ to ‘ld’
       when building a shared library.  It is the default when GCC is
       configured, explicitly or implicitly, with the GNU linker.  This
!      option does not affect which ‘ld’ is called; it only changes what
!      parameters are passed to that ‘ld’.  The ‘ld’ that is called is
!      determined by the ‘--with-ld’ configure option, GCC's program
!      search path, and finally by the user's ‘PATH’.  The linker used by
!      GCC can be printed using ‘which `gcc -print-prog-name=ld`’.  This
       option is only available on the 64-bit HP-UX GCC, i.e. configured
!      with ‘hppa*64*-*-hpux*’.
  
! ‘-mhp-ld’
!      Use options specific to HP ‘ld’.  This passes ‘-b’ to ‘ld’ when
!      building a shared library and passes ‘+Accept TypeMismatch’ to ‘ld’
       on all links.  It is the default when GCC is configured, explicitly
       or implicitly, with the HP linker.  This option does not affect
!      which ‘ld’ is called; it only changes what parameters are passed to
!      that ‘ld’.  The ‘ld’ that is called is determined by the
!      ‘--with-ld’ configure option, GCC's program search path, and
!      finally by the user's ‘PATH’.  The linker used by GCC can be
!      printed using ‘which `gcc -print-prog-name=ld`’.  This option is
       only available on the 64-bit HP-UX GCC, i.e. configured with
!      ‘hppa*64*-*-hpux*’.
  
! ‘-mlinker-opt’
       Enable the optimization pass in the HP-UX linker.  Note this makes
       symbolic debugging impossible.  It also triggers a bug in the HP-UX
       8 and HP-UX 9 linkers in which they give bogus error messages when
       linking some programs.
  
! ‘-mlong-calls’
       Generate code that uses long call sequences.  This ensures that a
       call is always able to reach linker generated stubs.  The default
       is to generate long calls only when the distance from the call site
*************** These '-m' options are defined for the H
*** 24652,24659 ****
       always limited at 240,000 bytes.
  
       Distances are measured from the beginning of functions when using
!      the '-ffunction-sections' option, or when using the '-mgas' and
!      '-mno-portable-runtime' options together under HP-UX with the SOM
       linker.
  
       It is normally not desirable to use this option as it degrades
--- 24663,24670 ----
       always limited at 240,000 bytes.
  
       Distances are measured from the beginning of functions when using
!      the ‘-ffunction-sections’ option, or when using the ‘-mgas’ and
!      ‘-mno-portable-runtime’ options together under HP-UX with the SOM
       linker.
  
       It is normally not desirable to use this option as it degrades
*************** These '-m' options are defined for the H
*** 24667,24709 ****
       However, an indirect call is used on 32-bit ELF systems in pic code
       and it is quite long.
  
! '-mlong-load-store'
       Generate 3-instruction load and store sequences as sometimes
!      required by the HP-UX 10 linker.  This is equivalent to the '+k'
       option to the HP compilers.
  
! '-mjump-in-delay'
       This option is ignored and provided for compatibility purposes
       only.
  
! '-mno-space-regs'
       Generate code that assumes the target has no space registers.  This
       allows GCC to generate faster indirect calls and use unscaled index
       address modes.
  
       Such code is suitable for level 0 PA systems and kernels.
  
! '-mordered'
       Assume memory references are ordered and barriers are not needed.
  
! '-mportable-runtime'
       Use the portable calling conventions proposed by HP for ELF
       systems.
  
! '-mschedule=CPU-TYPE'
       Schedule code according to the constraints for the machine type
!      CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
!      '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
       HP-UX system to determine the proper scheduling option for your
!      machine.  The default scheduling is '8000'.
  
! '-msio'
!      Generate the predefine, '_SIO', for server IO.  The default is
!      '-mwsio'.  This generates the predefines, '__hp9000s700',
!      '__hp9000s700__' and '_WSIO', for workstation IO.  These options
       are available under HP-UX and HI-UX.
  
! '-msoft-float'
       Generate output containing library calls for floating point.
       *Warning:* the requisite libraries are not available for all HPPA
       targets.  Normally the facilities of the machine's usual C compiler
--- 24678,24720 ----
       However, an indirect call is used on 32-bit ELF systems in pic code
       and it is quite long.
  
! ‘-mlong-load-store’
       Generate 3-instruction load and store sequences as sometimes
!      required by the HP-UX 10 linker.  This is equivalent to the ‘+k’
       option to the HP compilers.
  
! ‘-mjump-in-delay’
       This option is ignored and provided for compatibility purposes
       only.
  
! ‘-mno-space-regs’
       Generate code that assumes the target has no space registers.  This
       allows GCC to generate faster indirect calls and use unscaled index
       address modes.
  
       Such code is suitable for level 0 PA systems and kernels.
  
! ‘-mordered’
       Assume memory references are ordered and barriers are not needed.
  
! ‘-mportable-runtime’
       Use the portable calling conventions proposed by HP for ELF
       systems.
  
! ‘-mschedule=CPU-TYPE’
       Schedule code according to the constraints for the machine type
!      CPU-TYPE.  The choices for CPU-TYPE are ‘700’ ‘7100’, ‘7100LC’,
!      ‘7200’, ‘7300’ and ‘8000’.  Refer to ‘/usr/lib/sched.models’ on an
       HP-UX system to determine the proper scheduling option for your
!      machine.  The default scheduling is ‘8000’.
  
! ‘-msio’
!      Generate the predefine, ‘_SIO’, for server IO.  The default is
!      ‘-mwsio’.  This generates the predefines, ‘__hp9000s700’,
!      ‘__hp9000s700__’ and ‘_WSIO’, for workstation IO.  These options
       are available under HP-UX and HI-UX.
  
! ‘-msoft-float’
       Generate output containing library calls for floating point.
       *Warning:* the requisite libraries are not available for all HPPA
       targets.  Normally the facilities of the machine's usual C compiler
*************** These '-m' options are defined for the H
*** 24711,24742 ****
       You must make your own arrangements to provide suitable library
       functions for cross-compilation.
  
!      '-msoft-float' changes the calling convention in the output file;
       therefore, it is only useful if you compile _all_ of a program with
!      this option.  In particular, you need to compile 'libgcc.a', the
!      library that comes with GCC, with '-msoft-float' in order for this
       to work.
  
! '-msoft-mult'
       Use software integer multiplication.
  
!      This disables the use of the 'xmpyu' instruction.
  
! '-munix=UNIX-STD'
       Generate compiler predefines and select a startfile for the
!      specified UNIX standard.  The choices for UNIX-STD are '93', '95'
!      and '98'.  '93' is supported on all HP-UX versions.  '95' is
!      available on HP-UX 10.10 and later.  '98' is available on HP-UX
!      11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
!      for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
       later.
  
!      '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
!      '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
!      '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
!      '-munix=98' provides additional predefines for '_XOPEN_UNIX',
!      '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
!      '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
  
       It is _important_ to note that this option changes the interfaces
       for various library routines.  It also affects the operational
--- 24722,24753 ----
       You must make your own arrangements to provide suitable library
       functions for cross-compilation.
  
!      ‘-msoft-float’ changes the calling convention in the output file;
       therefore, it is only useful if you compile _all_ of a program with
!      this option.  In particular, you need to compile ‘libgcc.a’, the
!      library that comes with GCC, with ‘-msoft-float’ in order for this
       to work.
  
! ‘-msoft-mult’
       Use software integer multiplication.
  
!      This disables the use of the ‘xmpyu’ instruction.
  
! ‘-munix=UNIX-STD’
       Generate compiler predefines and select a startfile for the
!      specified UNIX standard.  The choices for UNIX-STD are ‘93’, ‘95’
!      and ‘98’.  ‘93’ is supported on all HP-UX versions.  ‘95’ is
!      available on HP-UX 10.10 and later.  ‘98’ is available on HP-UX
!      11.11 and later.  The default values are ‘93’ for HP-UX 10.00, ‘95’
!      for HP-UX 10.10 though to 11.00, and ‘98’ for HP-UX 11.11 and
       later.
  
!      ‘-munix=93’ provides the same predefines as GCC 3.3 and 3.4.
!      ‘-munix=95’ provides additional predefines for ‘XOPEN_UNIX’ and
!      ‘_XOPEN_SOURCE_EXTENDED’, and the startfile ‘unix95.o’.
!      ‘-munix=98’ provides additional predefines for ‘_XOPEN_UNIX’,
!      ‘_XOPEN_SOURCE_EXTENDED’, ‘_INCLUDE__STDC_A1_SOURCE’ and
!      ‘_INCLUDE_XOPEN_SOURCE_500’, and the startfile ‘unix98.o’.
  
       It is _important_ to note that this option changes the interfaces
       for various library routines.  It also affects the operational
*************** These '-m' options are defined for the H
*** 24745,24772 ****
  
       Library code that is intended to operate with more than one UNIX
       standard must test, set and restore the variable
!      '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
       provide this capability.
  
! '-nolibdld'
       Suppress the generation of link options to search libdld.sl when
!      the '-static' option is specified on HP-UX 10 and later.
  
! '-static'
       The HP-UX implementation of setlocale in libc has a dependency on
       libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
!      when the '-static' option is specified, special link options are
       needed to resolve this dependency.
  
       On HP-UX 10 and later, the GCC driver adds the necessary options to
!      link with libdld.sl when the '-static' option is specified.  This
       causes the resulting binary to be dynamic.  On the 64-bit port, the
       linkers generate dynamic binaries by default in any case.  The
!      '-nolibdld' option can be used to prevent the GCC driver from
       adding these link options.
  
! '-threads'
!      Add support for multithreading with the "dce thread" library under
       HP-UX.  This option sets flags for both the preprocessor and
       linker.
  
--- 24756,24783 ----
  
       Library code that is intended to operate with more than one UNIX
       standard must test, set and restore the variable
!      ‘__xpg4_extended_mask’ as appropriate.  Most GNU software doesn't
       provide this capability.
  
! ‘-nolibdld’
       Suppress the generation of link options to search libdld.sl when
!      the ‘-static’ option is specified on HP-UX 10 and later.
  
! ‘-static’
       The HP-UX implementation of setlocale in libc has a dependency on
       libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
!      when the ‘-static’ option is specified, special link options are
       needed to resolve this dependency.
  
       On HP-UX 10 and later, the GCC driver adds the necessary options to
!      link with libdld.sl when the ‘-static’ option is specified.  This
       causes the resulting binary to be dynamic.  On the 64-bit port, the
       linkers generate dynamic binaries by default in any case.  The
!      ‘-nolibdld’ option can be used to prevent the GCC driver from
       adding these link options.
  
! ‘-threads’
!      Add support for multithreading with the “dce thread” library under
       HP-UX.  This option sets flags for both the preprocessor and
       linker.
  
*************** File: gcc.info,  Node: IA-64 Options,  N
*** 24776,24993 ****
  3.19.20 IA-64 Options
  ---------------------
  
! These are the '-m' options defined for the Intel IA-64 architecture.
  
! '-mbig-endian'
       Generate code for a big-endian target.  This is the default for
       HP-UX.
  
! '-mlittle-endian'
       Generate code for a little-endian target.  This is the default for
       AIX5 and GNU/Linux.
  
! '-mgnu-as'
! '-mno-gnu-as'
       Generate (or don't) code for the GNU assembler.  This is the
       default.
  
! '-mgnu-ld'
! '-mno-gnu-ld'
       Generate (or don't) code for the GNU linker.  This is the default.
  
! '-mno-pic'
       Generate code that does not use a global pointer register.  The
       result is not position independent code, and violates the IA-64
       ABI.
  
! '-mvolatile-asm-stop'
! '-mno-volatile-asm-stop'
       Generate (or don't) a stop bit immediately before and after
       volatile asm statements.
  
! '-mregister-names'
! '-mno-register-names'
!      Generate (or don't) 'in', 'loc', and 'out' register names for the
       stacked registers.  This may make assembler output more readable.
  
! '-mno-sdata'
! '-msdata'
       Disable (or enable) optimizations that use the small data section.
       This may be useful for working around optimizer bugs.
  
! '-mconstant-gp'
       Generate code that uses a single constant global pointer value.
       This is useful when compiling kernel code.
  
! '-mauto-pic'
       Generate code that is self-relocatable.  This implies
!      '-mconstant-gp'.  This is useful when compiling firmware code.
  
! '-minline-float-divide-min-latency'
       Generate code for inline divides of floating-point values using the
       minimum latency algorithm.
  
! '-minline-float-divide-max-throughput'
       Generate code for inline divides of floating-point values using the
       maximum throughput algorithm.
  
! '-mno-inline-float-divide'
       Do not generate inline code for divides of floating-point values.
  
! '-minline-int-divide-min-latency'
       Generate code for inline divides of integer values using the
       minimum latency algorithm.
  
! '-minline-int-divide-max-throughput'
       Generate code for inline divides of integer values using the
       maximum throughput algorithm.
  
! '-mno-inline-int-divide'
       Do not generate inline code for divides of integer values.
  
! '-minline-sqrt-min-latency'
       Generate code for inline square roots using the minimum latency
       algorithm.
  
! '-minline-sqrt-max-throughput'
       Generate code for inline square roots using the maximum throughput
       algorithm.
  
! '-mno-inline-sqrt'
!      Do not generate inline code for 'sqrt'.
  
! '-mfused-madd'
! '-mno-fused-madd'
       Do (don't) generate code that uses the fused multiply/add or
       multiply/subtract instructions.  The default is to use these
       instructions.
  
! '-mno-dwarf2-asm'
! '-mdwarf2-asm'
       Don't (or do) generate assembler code for the DWARF line number
       debugging info.  This may be useful when not using the GNU
       assembler.
  
! '-mearly-stop-bits'
! '-mno-early-stop-bits'
       Allow stop bits to be placed earlier than immediately preceding the
       instruction that triggered the stop bit.  This can improve
       instruction scheduling, but does not always do so.
  
! '-mfixed-range=REGISTER-RANGE'
       Generate code treating the given register range as fixed registers.
       A fixed register is one that the register allocator cannot use.
       This is useful when compiling kernel code.  A register range is
       specified as two registers separated by a dash.  Multiple register
       ranges can be specified separated by a comma.
  
! '-mtls-size=TLS-SIZE'
       Specify bit size of immediate TLS offsets.  Valid values are 14,
       22, and 64.
  
! '-mtune=CPU-TYPE'
       Tune the instruction scheduling for a particular CPU, Valid values
!      are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
  
! '-milp32'
! '-mlp64'
       Generate code for a 32-bit or 64-bit environment.  The 32-bit
       environment sets int, long and pointer to 32 bits.  The 64-bit
       environment sets int to 32 bits and long and pointer to 64 bits.
       These are HP-UX specific flags.
  
! '-mno-sched-br-data-spec'
! '-msched-br-data-spec'
       (Dis/En)able data speculative scheduling before reload.  This
!      results in generation of 'ld.a' instructions and the corresponding
!      check instructions ('ld.c' / 'chk.a').  The default setting is
       disabled.
  
! '-msched-ar-data-spec'
! '-mno-sched-ar-data-spec'
       (En/Dis)able data speculative scheduling after reload.  This
!      results in generation of 'ld.a' instructions and the corresponding
!      check instructions ('ld.c' / 'chk.a').  The default setting is
       enabled.
  
! '-mno-sched-control-spec'
! '-msched-control-spec'
       (Dis/En)able control speculative scheduling.  This feature is
       available only during region scheduling (i.e. before reload).  This
!      results in generation of the 'ld.s' instructions and the
!      corresponding check instructions 'chk.s'.  The default setting is
       disabled.
  
! '-msched-br-in-data-spec'
! '-mno-sched-br-in-data-spec'
       (En/Dis)able speculative scheduling of the instructions that are
       dependent on the data speculative loads before reload.  This is
!      effective only with '-msched-br-data-spec' enabled.  The default
       setting is enabled.
  
! '-msched-ar-in-data-spec'
! '-mno-sched-ar-in-data-spec'
       (En/Dis)able speculative scheduling of the instructions that are
       dependent on the data speculative loads after reload.  This is
!      effective only with '-msched-ar-data-spec' enabled.  The default
       setting is enabled.
  
! '-msched-in-control-spec'
! '-mno-sched-in-control-spec'
       (En/Dis)able speculative scheduling of the instructions that are
       dependent on the control speculative loads.  This is effective only
!      with '-msched-control-spec' enabled.  The default setting is
       enabled.
  
! '-mno-sched-prefer-non-data-spec-insns'
! '-msched-prefer-non-data-spec-insns'
       If enabled, data-speculative instructions are chosen for schedule
       only if there are no other choices at the moment.  This makes the
       use of the data speculation much more conservative.  The default
       setting is disabled.
  
! '-mno-sched-prefer-non-control-spec-insns'
! '-msched-prefer-non-control-spec-insns'
       If enabled, control-speculative instructions are chosen for
       schedule only if there are no other choices at the moment.  This
       makes the use of the control speculation much more conservative.
       The default setting is disabled.
  
! '-mno-sched-count-spec-in-critical-path'
! '-msched-count-spec-in-critical-path'
       If enabled, speculative dependencies are considered during
       computation of the instructions priorities.  This makes the use of
       the speculation a bit more conservative.  The default setting is
       disabled.
  
! '-msched-spec-ldc'
       Use a simple data speculation check.  This option is on by default.
  
! '-msched-control-spec-ldc'
       Use a simple check for control speculation.  This option is on by
       default.
  
! '-msched-stop-bits-after-every-cycle'
       Place a stop bit after every cycle when scheduling.  This option is
       on by default.
  
! '-msched-fp-mem-deps-zero-cost'
       Assume that floating-point stores and loads are not likely to cause
       a conflict when placed into the same instruction group.  This
       option is disabled by default.
  
! '-msel-sched-dont-check-control-spec'
       Generate checks for control speculation in selective scheduling.
       This flag is disabled by default.
  
! '-msched-max-memory-insns=MAX-INSNS'
       Limit on the number of memory insns per instruction group, giving
       lower priority to subsequent memory insns attempting to schedule in
       the same instruction group.  Frequently useful to prevent cache
       bank conflicts.  The default value is 1.
  
! '-msched-max-memory-insns-hard-limit'
!      Makes the limit specified by 'msched-max-memory-insns' a hard
       limit, disallowing more than that number in an instruction group.
       Otherwise, the limit is "soft", meaning that non-memory operations
       are preferred when the limit is reached, but memory operations may
--- 24787,25004 ----
  3.19.20 IA-64 Options
  ---------------------
  
! These are the ‘-m’ options defined for the Intel IA-64 architecture.
  
! ‘-mbig-endian’
       Generate code for a big-endian target.  This is the default for
       HP-UX.
  
! ‘-mlittle-endian’
       Generate code for a little-endian target.  This is the default for
       AIX5 and GNU/Linux.
  
! ‘-mgnu-as’
! ‘-mno-gnu-as’
       Generate (or don't) code for the GNU assembler.  This is the
       default.
  
! ‘-mgnu-ld’
! ‘-mno-gnu-ld’
       Generate (or don't) code for the GNU linker.  This is the default.
  
! ‘-mno-pic’
       Generate code that does not use a global pointer register.  The
       result is not position independent code, and violates the IA-64
       ABI.
  
! ‘-mvolatile-asm-stop’
! ‘-mno-volatile-asm-stop’
       Generate (or don't) a stop bit immediately before and after
       volatile asm statements.
  
! ‘-mregister-names’
! ‘-mno-register-names’
!      Generate (or don't) ‘in’, ‘loc’, and ‘out’ register names for the
       stacked registers.  This may make assembler output more readable.
  
! ‘-mno-sdata’
! ‘-msdata’
       Disable (or enable) optimizations that use the small data section.
       This may be useful for working around optimizer bugs.
  
! ‘-mconstant-gp’
       Generate code that uses a single constant global pointer value.
       This is useful when compiling kernel code.
  
! ‘-mauto-pic’
       Generate code that is self-relocatable.  This implies
!      ‘-mconstant-gp’.  This is useful when compiling firmware code.
  
! ‘-minline-float-divide-min-latency’
       Generate code for inline divides of floating-point values using the
       minimum latency algorithm.
  
! ‘-minline-float-divide-max-throughput’
       Generate code for inline divides of floating-point values using the
       maximum throughput algorithm.
  
! ‘-mno-inline-float-divide’
       Do not generate inline code for divides of floating-point values.
  
! ‘-minline-int-divide-min-latency’
       Generate code for inline divides of integer values using the
       minimum latency algorithm.
  
! ‘-minline-int-divide-max-throughput’
       Generate code for inline divides of integer values using the
       maximum throughput algorithm.
  
! ‘-mno-inline-int-divide’
       Do not generate inline code for divides of integer values.
  
! ‘-minline-sqrt-min-latency’
       Generate code for inline square roots using the minimum latency
       algorithm.
  
! ‘-minline-sqrt-max-throughput’
       Generate code for inline square roots using the maximum throughput
       algorithm.
  
! ‘-mno-inline-sqrt’
!      Do not generate inline code for ‘sqrt’.
  
! ‘-mfused-madd’
! ‘-mno-fused-madd’
       Do (don't) generate code that uses the fused multiply/add or
       multiply/subtract instructions.  The default is to use these
       instructions.
  
! ‘-mno-dwarf2-asm’
! ‘-mdwarf2-asm’
       Don't (or do) generate assembler code for the DWARF line number
       debugging info.  This may be useful when not using the GNU
       assembler.
  
! ‘-mearly-stop-bits’
! ‘-mno-early-stop-bits’
       Allow stop bits to be placed earlier than immediately preceding the
       instruction that triggered the stop bit.  This can improve
       instruction scheduling, but does not always do so.
  
! ‘-mfixed-range=REGISTER-RANGE’
       Generate code treating the given register range as fixed registers.
       A fixed register is one that the register allocator cannot use.
       This is useful when compiling kernel code.  A register range is
       specified as two registers separated by a dash.  Multiple register
       ranges can be specified separated by a comma.
  
! ‘-mtls-size=TLS-SIZE’
       Specify bit size of immediate TLS offsets.  Valid values are 14,
       22, and 64.
  
! ‘-mtune=CPU-TYPE’
       Tune the instruction scheduling for a particular CPU, Valid values
!      are ‘itanium’, ‘itanium1’, ‘merced’, ‘itanium2’, and ‘mckinley’.
  
! ‘-milp32’
! ‘-mlp64’
       Generate code for a 32-bit or 64-bit environment.  The 32-bit
       environment sets int, long and pointer to 32 bits.  The 64-bit
       environment sets int to 32 bits and long and pointer to 64 bits.
       These are HP-UX specific flags.
  
! ‘-mno-sched-br-data-spec’
! ‘-msched-br-data-spec’
       (Dis/En)able data speculative scheduling before reload.  This
!      results in generation of ‘ld.a’ instructions and the corresponding
!      check instructions (‘ld.c’ / ‘chk.a’).  The default setting is
       disabled.
  
! ‘-msched-ar-data-spec’
! ‘-mno-sched-ar-data-spec’
       (En/Dis)able data speculative scheduling after reload.  This
!      results in generation of ‘ld.a’ instructions and the corresponding
!      check instructions (‘ld.c’ / ‘chk.a’).  The default setting is
       enabled.
  
! ‘-mno-sched-control-spec’
! ‘-msched-control-spec’
       (Dis/En)able control speculative scheduling.  This feature is
       available only during region scheduling (i.e. before reload).  This
!      results in generation of the ‘ld.s’ instructions and the
!      corresponding check instructions ‘chk.s’.  The default setting is
       disabled.
  
! ‘-msched-br-in-data-spec’
! ‘-mno-sched-br-in-data-spec’
       (En/Dis)able speculative scheduling of the instructions that are
       dependent on the data speculative loads before reload.  This is
!      effective only with ‘-msched-br-data-spec’ enabled.  The default
       setting is enabled.
  
! ‘-msched-ar-in-data-spec’
! ‘-mno-sched-ar-in-data-spec’
       (En/Dis)able speculative scheduling of the instructions that are
       dependent on the data speculative loads after reload.  This is
!      effective only with ‘-msched-ar-data-spec’ enabled.  The default
       setting is enabled.
  
! ‘-msched-in-control-spec’
! ‘-mno-sched-in-control-spec’
       (En/Dis)able speculative scheduling of the instructions that are
       dependent on the control speculative loads.  This is effective only
!      with ‘-msched-control-spec’ enabled.  The default setting is
       enabled.
  
! ‘-mno-sched-prefer-non-data-spec-insns’
! ‘-msched-prefer-non-data-spec-insns’
       If enabled, data-speculative instructions are chosen for schedule
       only if there are no other choices at the moment.  This makes the
       use of the data speculation much more conservative.  The default
       setting is disabled.
  
! ‘-mno-sched-prefer-non-control-spec-insns’
! ‘-msched-prefer-non-control-spec-insns’
       If enabled, control-speculative instructions are chosen for
       schedule only if there are no other choices at the moment.  This
       makes the use of the control speculation much more conservative.
       The default setting is disabled.
  
! ‘-mno-sched-count-spec-in-critical-path’
! ‘-msched-count-spec-in-critical-path’
       If enabled, speculative dependencies are considered during
       computation of the instructions priorities.  This makes the use of
       the speculation a bit more conservative.  The default setting is
       disabled.
  
! ‘-msched-spec-ldc’
       Use a simple data speculation check.  This option is on by default.
  
! ‘-msched-control-spec-ldc’
       Use a simple check for control speculation.  This option is on by
       default.
  
! ‘-msched-stop-bits-after-every-cycle’
       Place a stop bit after every cycle when scheduling.  This option is
       on by default.
  
! ‘-msched-fp-mem-deps-zero-cost’
       Assume that floating-point stores and loads are not likely to cause
       a conflict when placed into the same instruction group.  This
       option is disabled by default.
  
! ‘-msel-sched-dont-check-control-spec’
       Generate checks for control speculation in selective scheduling.
       This flag is disabled by default.
  
! ‘-msched-max-memory-insns=MAX-INSNS’
       Limit on the number of memory insns per instruction group, giving
       lower priority to subsequent memory insns attempting to schedule in
       the same instruction group.  Frequently useful to prevent cache
       bank conflicts.  The default value is 1.
  
! ‘-msched-max-memory-insns-hard-limit’
!      Makes the limit specified by ‘msched-max-memory-insns’ a hard
       limit, disallowing more than that number in an instruction group.
       Otherwise, the limit is "soft", meaning that non-memory operations
       are preferred when the limit is reached, but memory operations may
*************** File: gcc.info,  Node: LM32 Options,  Ne
*** 24999,25019 ****
  3.19.21 LM32 Options
  --------------------
  
! These '-m' options are defined for the LatticeMico32 architecture:
  
! '-mbarrel-shift-enabled'
       Enable barrel-shift instructions.
  
! '-mdivide-enabled'
       Enable divide and modulus instructions.
  
! '-mmultiply-enabled'
       Enable multiply instructions.
  
! '-msign-extend-enabled'
       Enable sign extend instructions.
  
! '-muser-enabled'
       Enable user-defined instructions.
  
  
--- 25010,25030 ----
  3.19.21 LM32 Options
  --------------------
  
! These ‘-m’ options are defined for the LatticeMico32 architecture:
  
! ‘-mbarrel-shift-enabled’
       Enable barrel-shift instructions.
  
! ‘-mdivide-enabled’
       Enable divide and modulus instructions.
  
! ‘-mmultiply-enabled’
       Enable multiply instructions.
  
! ‘-msign-extend-enabled’
       Enable sign extend instructions.
  
! ‘-muser-enabled’
       Enable user-defined instructions.
  
  
*************** File: gcc.info,  Node: LoongArch Options
*** 25024,25267 ****
  
  These command-line options are defined for LoongArch targets:
  
! '-march=ARCH-TYPE'
       Generate instructions for the machine type ARCH-TYPE.
!      '-march=ARCH-TYPE' allows GCC to generate code that may not run at
       all on processors other than the one indicated.
  
       The choices for ARCH-TYPE are:
  
!      'native'
            Local processor type detected by the native compiler.
!      'loongarch64'
            Generic LoongArch 64-bit processor.
!      'la464'
            LoongArch LA464-based processor with LSX, LASX.
!      'la664'
            LoongArch LA664-based processor with LSX, LASX and all
            LoongArch v1.1 instructions.
!      'la64v1.0'
            LoongArch64 ISA version 1.0.
!      'la64v1.1'
            LoongArch64 ISA version 1.1.
  
       More information about LoongArch ISA versions can be found at
       <https://github.com/loongson/la-toolchain-conventions>.
  
! '-mtune=TUNE-TYPE'
       Optimize the generated code for the given processor target.
  
       The choices for TUNE-TYPE are:
  
!      'native'
            Local processor type detected by the native compiler.
!      'generic'
            Generic LoongArch processor.
!      'loongarch64'
            Generic LoongArch 64-bit processor.
!      'la464'
            LoongArch LA464 core.
!      'la664'
            LoongArch LA664 core.
  
! '-mabi=BASE-ABI-TYPE'
       Generate code for the specified calling convention.  BASE-ABI-TYPE
       can be one of:
!      'lp64d'
            Uses 64-bit general purpose registers and 32/64-bit
            floating-point registers for parameter passing.  Data model is
!           LP64, where 'int' is 32 bits, while 'long int' and pointers
            are 64 bits.
!      'lp64f'
            Uses 64-bit general purpose registers and 32-bit
            floating-point registers for parameter passing.  Data model is
!           LP64, where 'int' is 32 bits, while 'long int' and pointers
            are 64 bits.
!      'lp64s'
            Uses 64-bit general purpose registers and no floating-point
            registers for parameter passing.  Data model is LP64, where
!           'int' is 32 bits, while 'long int' and pointers are 64 bits.
  
! '-mfpu=FPU-TYPE'
       Generate code for the specified FPU type, which can be one of:
!      '64'
            Allow the use of hardware floating-point instructions for
            32-bit and 64-bit operations.
!      '32'
            Allow the use of hardware floating-point instructions for
            32-bit operations.
!      'none'
!      '0'
            Prevent the use of hardware floating-point instructions.
  
! '-msimd=SIMD-TYPE'
       Enable generation of LoongArch SIMD instructions for vectorization
       and via builtin functions.  The value can be one of:
!      'lasx'
            Enable generating instructions from the 256-bit LoongArch
            Advanced SIMD Extension (LASX) and the 128-bit LoongArch SIMD
            Extension (LSX).
!      'lsx'
            Enable generating instructions from the 128-bit LoongArch SIMD
            Extension (LSX).
!      'none'
            No LoongArch SIMD instruction may be generated.
  
! '-msoft-float'
!      Force '-mfpu=none' and prevents the use of floating-point registers
       for parameter passing.  This option may change the target ABI.
  
! '-msingle-float'
!      Force '-mfpu=32' and allow the use of 32-bit floating-point
       registers for parameter passing.  This option may change the target
       ABI.
  
! '-mdouble-float'
!      Force '-mfpu=64' and allow the use of 32/64-bit floating-point
       registers for parameter passing.  This option may change the target
       ABI.
  
! '-mlasx'
! '-mno-lasx'
! '-mlsx'
! '-mno-lsx'
       Incrementally adjust the scope of the SIMD extensions (none / LSX /
       LASX) that can be used by the compiler for code generation.
!      Enabling LASX with 'mlasx' automatically enables LSX, and diabling
!      LSX with 'mno-lsx' automatically disables LASX. These driver-only
!      options act upon the final 'msimd' configuration state and make
       incremental chagnes in the order they appear on the GCC driver's
!      command line, deriving the final / canonicalized 'msimd' option
       that is passed to the compiler proper.
  
! '-mbranch-cost=N'
       Set the cost of branches to roughly N instructions.
  
! '-mcheck-zero-division'
! '-mno-check-zero-divison'
       Trap (do not trap) on integer division by zero.  The default is
!      '-mcheck-zero-division' for '-O0' or '-Og', and
!      '-mno-check-zero-division' for other optimization levels.
  
! '-mcond-move-int'
! '-mno-cond-move-int'
       Conditional moves for integral data in general-purpose registers
!      are enabled (disabled).  The default is '-mcond-move-int'.
  
! '-mcond-move-float'
! '-mno-cond-move-float'
       Conditional moves for floating-point registers are enabled
!      (disabled).  The default is '-mcond-move-float'.
  
! '-mmemcpy'
! '-mno-memcpy'
!      Force (do not force) the use of 'memcpy' for non-trivial block
!      moves.  The default is '-mno-memcpy', which allows GCC to inline
!      most constant-sized copies.  Setting optimization level to '-Os'
!      also forces the use of 'memcpy', but '-mno-memcpy' may override
       this behavior if explicitly specified, regardless of the order
       these options on the command line.
  
! '-mstrict-align'
! '-mno-strict-align'
       Avoid or allow generating memory accesses that may not be aligned
       on a natural object boundary as described in the architecture
!      specification.  The default is '-mno-strict-align'.
  
! '-msmall-data-limit=NUMBER'
       Put global and static data smaller than NUMBER bytes into a special
       section (on some targets).  The default value is 0.
  
! '-mmax-inline-memcpy-size=N'
!      Inline all block moves (such as calls to 'memcpy' or structure
       copies) less than or equal to N bytes.  The default value of N is
       1024.
  
! '-mcmodel=CODE-MODEL'
       Set the code model to one of:
!      'tiny-static (Not implemented yet)'
!      'tiny (Not implemented yet)'
  
!      'normal'
            The text segment must be within 128MB addressing space.  The
            data segment must be within 2GB addressing space.
  
!      'medium'
            The text segment and data segment must be within 2GB
            addressing space.
  
!      'large (Not implemented yet)'
  
!      'extreme'
            This mode does not limit the size of the code segment and data
!           segment.  The '-mcmodel=extreme' option is incompatible with
!           '-fplt' and/or '-mexplicit-relocs=none'.
!      The default code model is 'normal'.
  
! '-mexplicit-relocs=STYLE'
       Set when to use assembler relocation operators when dealing with
       symbolic addresses.  The alternative is to use assembler macros
       instead, which may limit instruction scheduling but allow linker
!      relaxation.  with '-mexplicit-relocs=none' the assembler macros are
!      always used, with '-mexplicit-relocs=always' the assembler
!      relocation operators are always used, with '-mexplicit-relocs=auto'
       the compiler will use the relocation operators where the linker
       relaxation is impossible to improve the code quality, and macros
       elsewhere.  The default value for the option is determined with the
       assembler capability detected during GCC build-time and the setting
!      of '-mrelax': '-mexplicit-relocs=none' if the assembler does not
!      support relocation operators at all, '-mexplicit-relocs=always' if
!      the assembler supports relocation operators but '-mrelax' is not
!      enabled, '-mexplicit-relocs=auto' if the assembler supports
!      relocation operators and '-mrelax' is enabled.
  
! '-mexplicit-relocs'
!      An alias of '-mexplicit-relocs=always' for backward compatibility.
  
! '-mno-explicit-relocs'
!      An alias of '-mexplicit-relocs=none' for backward compatibility.
  
! '-mdirect-extern-access'
! '-mno-direct-extern-access'
       Do not use or use GOT to access external symbols.  The default is
!      '-mno-direct-extern-access': GOT is used for external symbols with
       default visibility, but not used for other external symbols.
  
!      With '-mdirect-extern-access', GOT is not used and all external
       symbols are PC-relatively addressed.  It is *only* suitable for
       environments where no dynamic link is performed, like firmwares, OS
!      kernels, executables linked with '-static' or '-static-pie'.
!      '-mdirect-extern-access' is not compatible with '-fPIC' or '-fpic'.
  
! '-mrelax'
! '-mno-relax'
       Take (do not take) advantage of linker relaxations.  If
!      '-mpass-mrelax-to-as' is enabled, this option is also passed to the
       assembler.  The default is determined during GCC build-time by
!      detecting corresponding assembler support: '-mrelax' if the
!      assembler supports both the '-mrelax' option and the conditional
!      branch relaxation (it's required or the '.align' directives and
       conditional branch instructions in the assembly code outputted by
       GCC may be rejected by the assembler because of a relocation
!      overflow), '-mno-relax' otherwise.
  
! '-mpass-mrelax-to-as'
! '-mno-pass-mrelax-to-as'
!      Pass (do not pass) the '-mrelax' or '-mno-relax' option to the
       assembler.  The default is determined during GCC build-time by
!      detecting corresponding assembler support: '-mpass-mrelax-to-as' if
!      the assembler supports the '-mrelax' option,
!      '-mno-pass-mrelax-to-as' otherwise.  This option is mostly useful
       for debugging, or interoperation with assemblers different from the
       build-time one.
  
! '-mrecip'
       This option enables use of the reciprocal estimate and reciprocal
       square root estimate instructions with additional Newton-Raphson
       steps to increase precision instead of doing a divide or square
       root and divide for floating-point arguments.  These instructions
!      are generated only when '-funsafe-math-optimizations' is enabled
!      together with '-ffinite-math-only' and '-fno-trapping-math'.  This
       option is off by default.  Before you can use this option, you must
       sure the target CPU supports frecipe and frsqrte instructions.
       Note that while the throughput of the sequence is higher than the
--- 25035,25278 ----
  
  These command-line options are defined for LoongArch targets:
  
! ‘-march=ARCH-TYPE’
       Generate instructions for the machine type ARCH-TYPE.
!      ‘-march=ARCH-TYPE’ allows GCC to generate code that may not run at
       all on processors other than the one indicated.
  
       The choices for ARCH-TYPE are:
  
!      ‘native’
            Local processor type detected by the native compiler.
!      ‘loongarch64’
            Generic LoongArch 64-bit processor.
!      ‘la464’
            LoongArch LA464-based processor with LSX, LASX.
!      ‘la664’
            LoongArch LA664-based processor with LSX, LASX and all
            LoongArch v1.1 instructions.
!      ‘la64v1.0’
            LoongArch64 ISA version 1.0.
!      ‘la64v1.1’
            LoongArch64 ISA version 1.1.
  
       More information about LoongArch ISA versions can be found at
       <https://github.com/loongson/la-toolchain-conventions>.
  
! ‘-mtune=TUNE-TYPE’
       Optimize the generated code for the given processor target.
  
       The choices for TUNE-TYPE are:
  
!      ‘native’
            Local processor type detected by the native compiler.
!      ‘generic’
            Generic LoongArch processor.
!      ‘loongarch64’
            Generic LoongArch 64-bit processor.
!      ‘la464’
            LoongArch LA464 core.
!      ‘la664’
            LoongArch LA664 core.
  
! ‘-mabi=BASE-ABI-TYPE’
       Generate code for the specified calling convention.  BASE-ABI-TYPE
       can be one of:
!      ‘lp64d’
            Uses 64-bit general purpose registers and 32/64-bit
            floating-point registers for parameter passing.  Data model is
!           LP64, where ‘int’ is 32 bits, while ‘long int’ and pointers
            are 64 bits.
!      ‘lp64f’
            Uses 64-bit general purpose registers and 32-bit
            floating-point registers for parameter passing.  Data model is
!           LP64, where ‘int’ is 32 bits, while ‘long int’ and pointers
            are 64 bits.
!      ‘lp64s’
            Uses 64-bit general purpose registers and no floating-point
            registers for parameter passing.  Data model is LP64, where
!           ‘int’ is 32 bits, while ‘long int’ and pointers are 64 bits.
  
! ‘-mfpu=FPU-TYPE’
       Generate code for the specified FPU type, which can be one of:
!      ‘64’
            Allow the use of hardware floating-point instructions for
            32-bit and 64-bit operations.
!      ‘32’
            Allow the use of hardware floating-point instructions for
            32-bit operations.
!      ‘none’
!      ‘0’
            Prevent the use of hardware floating-point instructions.
  
! ‘-msimd=SIMD-TYPE’
       Enable generation of LoongArch SIMD instructions for vectorization
       and via builtin functions.  The value can be one of:
!      ‘lasx’
            Enable generating instructions from the 256-bit LoongArch
            Advanced SIMD Extension (LASX) and the 128-bit LoongArch SIMD
            Extension (LSX).
!      ‘lsx’
            Enable generating instructions from the 128-bit LoongArch SIMD
            Extension (LSX).
!      ‘none’
            No LoongArch SIMD instruction may be generated.
  
! ‘-msoft-float’
!      Force ‘-mfpu=none’ and prevents the use of floating-point registers
       for parameter passing.  This option may change the target ABI.
  
! ‘-msingle-float’
!      Force ‘-mfpu=32’ and allow the use of 32-bit floating-point
       registers for parameter passing.  This option may change the target
       ABI.
  
! ‘-mdouble-float’
!      Force ‘-mfpu=64’ and allow the use of 32/64-bit floating-point
       registers for parameter passing.  This option may change the target
       ABI.
  
! ‘-mlasx’
! ‘-mno-lasx’
! ‘-mlsx’
! ‘-mno-lsx’
       Incrementally adjust the scope of the SIMD extensions (none / LSX /
       LASX) that can be used by the compiler for code generation.
!      Enabling LASX with ‘mlasx’ automatically enables LSX, and diabling
!      LSX with ‘mno-lsx’ automatically disables LASX. These driver-only
!      options act upon the final ‘msimd’ configuration state and make
       incremental chagnes in the order they appear on the GCC driver's
!      command line, deriving the final / canonicalized ‘msimd’ option
       that is passed to the compiler proper.
  
! ‘-mbranch-cost=N’
       Set the cost of branches to roughly N instructions.
  
! ‘-mcheck-zero-division’
! ‘-mno-check-zero-divison’
       Trap (do not trap) on integer division by zero.  The default is
!      ‘-mcheck-zero-division’ for ‘-O0’ or ‘-Og’, and
!      ‘-mno-check-zero-division’ for other optimization levels.
  
! ‘-mcond-move-int’
! ‘-mno-cond-move-int’
       Conditional moves for integral data in general-purpose registers
!      are enabled (disabled).  The default is ‘-mcond-move-int’.
  
! ‘-mcond-move-float’
! ‘-mno-cond-move-float’
       Conditional moves for floating-point registers are enabled
!      (disabled).  The default is ‘-mcond-move-float’.
  
! ‘-mmemcpy’
! ‘-mno-memcpy’
!      Force (do not force) the use of ‘memcpy’ for non-trivial block
!      moves.  The default is ‘-mno-memcpy’, which allows GCC to inline
!      most constant-sized copies.  Setting optimization level to ‘-Os’
!      also forces the use of ‘memcpy’, but ‘-mno-memcpy’ may override
       this behavior if explicitly specified, regardless of the order
       these options on the command line.
  
! ‘-mstrict-align’
! ‘-mno-strict-align’
       Avoid or allow generating memory accesses that may not be aligned
       on a natural object boundary as described in the architecture
!      specification.  The default is ‘-mno-strict-align’.
  
! ‘-msmall-data-limit=NUMBER’
       Put global and static data smaller than NUMBER bytes into a special
       section (on some targets).  The default value is 0.
  
! ‘-mmax-inline-memcpy-size=N’
!      Inline all block moves (such as calls to ‘memcpy’ or structure
       copies) less than or equal to N bytes.  The default value of N is
       1024.
  
! ‘-mcmodel=CODE-MODEL’
       Set the code model to one of:
!      ‘tiny-static (Not implemented yet)’
!      ‘tiny (Not implemented yet)’
  
!      ‘normal’
            The text segment must be within 128MB addressing space.  The
            data segment must be within 2GB addressing space.
  
!      ‘medium’
            The text segment and data segment must be within 2GB
            addressing space.
  
!      ‘large (Not implemented yet)’
  
!      ‘extreme’
            This mode does not limit the size of the code segment and data
!           segment.  The ‘-mcmodel=extreme’ option is incompatible with
!           ‘-fplt’ and/or ‘-mexplicit-relocs=none’.
!      The default code model is ‘normal’.
  
! ‘-mexplicit-relocs=STYLE’
       Set when to use assembler relocation operators when dealing with
       symbolic addresses.  The alternative is to use assembler macros
       instead, which may limit instruction scheduling but allow linker
!      relaxation.  with ‘-mexplicit-relocs=none’ the assembler macros are
!      always used, with ‘-mexplicit-relocs=always’ the assembler
!      relocation operators are always used, with ‘-mexplicit-relocs=auto’
       the compiler will use the relocation operators where the linker
       relaxation is impossible to improve the code quality, and macros
       elsewhere.  The default value for the option is determined with the
       assembler capability detected during GCC build-time and the setting
!      of ‘-mrelax’: ‘-mexplicit-relocs=none’ if the assembler does not
!      support relocation operators at all, ‘-mexplicit-relocs=always’ if
!      the assembler supports relocation operators but ‘-mrelax’ is not
!      enabled, ‘-mexplicit-relocs=auto’ if the assembler supports
!      relocation operators and ‘-mrelax’ is enabled.
  
! ‘-mexplicit-relocs’
!      An alias of ‘-mexplicit-relocs=always’ for backward compatibility.
  
! ‘-mno-explicit-relocs’
!      An alias of ‘-mexplicit-relocs=none’ for backward compatibility.
  
! ‘-mdirect-extern-access’
! ‘-mno-direct-extern-access’
       Do not use or use GOT to access external symbols.  The default is
!      ‘-mno-direct-extern-access’: GOT is used for external symbols with
       default visibility, but not used for other external symbols.
  
!      With ‘-mdirect-extern-access’, GOT is not used and all external
       symbols are PC-relatively addressed.  It is *only* suitable for
       environments where no dynamic link is performed, like firmwares, OS
!      kernels, executables linked with ‘-static’ or ‘-static-pie’.
!      ‘-mdirect-extern-access’ is not compatible with ‘-fPIC’ or ‘-fpic’.
  
! ‘-mrelax’
! ‘-mno-relax’
       Take (do not take) advantage of linker relaxations.  If
!      ‘-mpass-mrelax-to-as’ is enabled, this option is also passed to the
       assembler.  The default is determined during GCC build-time by
!      detecting corresponding assembler support: ‘-mrelax’ if the
!      assembler supports both the ‘-mrelax’ option and the conditional
!      branch relaxation (it's required or the ‘.align’ directives and
       conditional branch instructions in the assembly code outputted by
       GCC may be rejected by the assembler because of a relocation
!      overflow), ‘-mno-relax’ otherwise.
  
! ‘-mpass-mrelax-to-as’
! ‘-mno-pass-mrelax-to-as’
!      Pass (do not pass) the ‘-mrelax’ or ‘-mno-relax’ option to the
       assembler.  The default is determined during GCC build-time by
!      detecting corresponding assembler support: ‘-mpass-mrelax-to-as’ if
!      the assembler supports the ‘-mrelax’ option,
!      ‘-mno-pass-mrelax-to-as’ otherwise.  This option is mostly useful
       for debugging, or interoperation with assemblers different from the
       build-time one.
  
! ‘-mrecip’
       This option enables use of the reciprocal estimate and reciprocal
       square root estimate instructions with additional Newton-Raphson
       steps to increase precision instead of doing a divide or square
       root and divide for floating-point arguments.  These instructions
!      are generated only when ‘-funsafe-math-optimizations’ is enabled
!      together with ‘-ffinite-math-only’ and ‘-fno-trapping-math’.  This
       option is off by default.  Before you can use this option, you must
       sure the target CPU supports frecipe and frsqrte instructions.
       Note that while the throughput of the sequence is higher than the
*************** These command-line options are defined f
*** 25269,25351 ****
       sequence can be decreased by up to 2 ulp (i.e.  the inverse of 1.0
       equals 0.99999994).
  
! '-mrecip=OPT'
       This option controls which reciprocal estimate instructions may be
       used.  OPT is a comma-separated list of options, which may be
!      preceded by a '!' to invert the option:
  
!      'all'
            Enable all estimate instructions.
  
!      'default'
!           Enable the default instructions, equivalent to '-mrecip'.
  
!      'none'
!           Disable all estimate instructions, equivalent to '-mno-recip'.
  
!      'div'
            Enable the approximation for scalar division.
  
!      'vec-div'
            Enable the approximation for vectorized division.
  
!      'sqrt'
            Enable the approximation for scalar square root.
  
!      'vec-sqrt'
            Enable the approximation for vectorized square root.
  
!      'rsqrt'
            Enable the approximation for scalar reciprocal square root.
  
!      'vec-rsqrt'
            Enable the approximation for vectorized reciprocal square
            root.
  
!      So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
       approximations, except for scalar square root.
  
! '-mfrecipe'
! '-mno-frecipe'
!      Use (do not use) 'frecipe.{s/d}' and 'frsqrte.{s/d}' instructions.
!      When build with '-march=la664', it is enabled by default.  The
!      default is '-mno-frecipe'.
  
! '-mdiv32'
! '-mno-div32'
!      Use (do not use) 'div.w[u]' and 'mod.w[u]' instructions with input
!      not sign-extended.  When build with '-march=la664', it is enabled
!      by default.  The default is '-mno-div32'.
  
! '-mlam-bh'
! '-mno-lam-bh'
!      Use (do not use) 'am{swap/add}[_db].{b/h}' instructions.  When
!      build with '-march=la664', it is enabled by default.  The default
!      is '-mno-lam-bh'.
  
! '-mlamcas'
! '-mno-lamcas'
!      Use (do not use) 'amcas[_db].{b/h/w/d}' instructions.  When build
!      with '-march=la664', it is enabled by default.  The default is
!      '-mno-lamcas'.
  
! '-mld-seq-sa'
! '-mno-ld-seq-sa'
!      Whether a same-address load-load barrier ('dbar 0x700') is needed.
!      When build with '-march=la664', it is enabled by default.  The
!      default is '-mno-ld-seq-sa', the load-load barrier is needed.
  
! '-mtls-dialect=OPT'
       This option controls which tls dialect may be used for general
       dynamic and local dynamic TLS models.
  
!      'trad'
            Use traditional TLS. This is the default.
  
!      'desc'
            Use TLS descriptors.
  
! '--param loongarch-vect-unroll-limit=N'
       The vectorizer will use available tuning information to determine
       whether it would be beneficial to unroll the main vectorized loop
       and by how much.  This parameter set's the upper bound of how much
--- 25280,25362 ----
       sequence can be decreased by up to 2 ulp (i.e.  the inverse of 1.0
       equals 0.99999994).
  
! ‘-mrecip=OPT’
       This option controls which reciprocal estimate instructions may be
       used.  OPT is a comma-separated list of options, which may be
!      preceded by a ‘!’ to invert the option:
  
!      ‘all’
            Enable all estimate instructions.
  
!      ‘default’
!           Enable the default instructions, equivalent to ‘-mrecip’.
  
!      ‘none’
!           Disable all estimate instructions, equivalent to ‘-mno-recip’.
  
!      ‘div’
            Enable the approximation for scalar division.
  
!      ‘vec-div’
            Enable the approximation for vectorized division.
  
!      ‘sqrt’
            Enable the approximation for scalar square root.
  
!      ‘vec-sqrt’
            Enable the approximation for vectorized square root.
  
!      ‘rsqrt’
            Enable the approximation for scalar reciprocal square root.
  
!      ‘vec-rsqrt’
            Enable the approximation for vectorized reciprocal square
            root.
  
!      So, for example, ‘-mrecip=all,!sqrt’ enables all of the reciprocal
       approximations, except for scalar square root.
  
! ‘-mfrecipe’
! ‘-mno-frecipe’
!      Use (do not use) ‘frecipe.{s/d}’ and ‘frsqrte.{s/d}’ instructions.
!      When build with ‘-march=la664’, it is enabled by default.  The
!      default is ‘-mno-frecipe’.
  
! ‘-mdiv32’
! ‘-mno-div32’
!      Use (do not use) ‘div.w[u]’ and ‘mod.w[u]’ instructions with input
!      not sign-extended.  When build with ‘-march=la664’, it is enabled
!      by default.  The default is ‘-mno-div32’.
  
! ‘-mlam-bh’
! ‘-mno-lam-bh’
!      Use (do not use) ‘am{swap/add}[_db].{b/h}’ instructions.  When
!      build with ‘-march=la664’, it is enabled by default.  The default
!      is ‘-mno-lam-bh’.
  
! ‘-mlamcas’
! ‘-mno-lamcas’
!      Use (do not use) ‘amcas[_db].{b/h/w/d}’ instructions.  When build
!      with ‘-march=la664’, it is enabled by default.  The default is
!      ‘-mno-lamcas’.
  
! ‘-mld-seq-sa’
! ‘-mno-ld-seq-sa’
!      Whether a same-address load-load barrier (‘dbar 0x700’) is needed.
!      When build with ‘-march=la664’, it is enabled by default.  The
!      default is ‘-mno-ld-seq-sa’, the load-load barrier is needed.
  
! ‘-mtls-dialect=OPT’
       This option controls which tls dialect may be used for general
       dynamic and local dynamic TLS models.
  
!      ‘trad’
            Use traditional TLS. This is the default.
  
!      ‘desc’
            Use TLS descriptors.
  
! ‘--param loongarch-vect-unroll-limit=N’
       The vectorizer will use available tuning information to determine
       whether it would be beneficial to unroll the main vectorized loop
       and by how much.  This parameter set's the upper bound of how much
*************** File: gcc.info,  Node: M32C Options,  Ne
*** 25358,25370 ****
  3.19.23 M32C Options
  --------------------
  
! '-mcpu=NAME'
       Select the CPU for which code is generated.  NAME may be one of
!      'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
!      series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
       series.
  
! '-msim'
       Specifies that the program will be run on the simulator.  This
       causes an alternate runtime library to be linked in which supports,
       for example, file I/O.  You must not use this option when
--- 25369,25381 ----
  3.19.23 M32C Options
  --------------------
  
! ‘-mcpu=NAME’
       Select the CPU for which code is generated.  NAME may be one of
!      ‘r8c’ for the R8C/Tiny series, ‘m16c’ for the M16C (up to /60)
!      series, ‘m32cm’ for the M16C/80 series, or ‘m32c’ for the M32C/80
       series.
  
! ‘-msim’
       Specifies that the program will be run on the simulator.  This
       causes an alternate runtime library to be linked in which supports,
       for example, file I/O.  You must not use this option when
*************** File: gcc.info,  Node: M32C Options,  Ne
*** 25372,25378 ****
       provide your own runtime library for whatever I/O functions are
       needed.
  
! '-memregs=NUMBER'
       Specifies the number of memory-based pseudo-registers GCC uses
       during code generation.  These pseudo-registers are used like real
       registers, so there is a tradeoff between GCC's ability to fit the
--- 25383,25389 ----
       provide your own runtime library for whatever I/O functions are
       needed.
  
! ‘-memregs=NUMBER’
       Specifies the number of memory-based pseudo-registers GCC uses
       during code generation.  These pseudo-registers are used like real
       registers, so there is a tradeoff between GCC's ability to fit the
*************** File: gcc.info,  Node: M32R/D Options,
*** 25388,25485 ****
  3.19.24 M32R/D Options
  ----------------------
  
! These '-m' options are defined for Renesas M32R/D architectures:
  
! '-m32r2'
       Generate code for the M32R/2.
  
! '-m32rx'
       Generate code for the M32R/X.
  
! '-m32r'
       Generate code for the M32R.  This is the default.
  
! '-mmodel=small'
       Assume all objects live in the lower 16MB of memory (so that their
!      addresses can be loaded with the 'ld24' instruction), and assume
!      all subroutines are reachable with the 'bl' instruction.  This is
       the default.
  
       The addressability of a particular object can be set with the
!      'model' attribute.
  
! '-mmodel=medium'
       Assume objects may be anywhere in the 32-bit address space (the
!      compiler generates 'seth/add3' instructions to load their
!      addresses), and assume all subroutines are reachable with the 'bl'
       instruction.
  
! '-mmodel=large'
       Assume objects may be anywhere in the 32-bit address space (the
!      compiler generates 'seth/add3' instructions to load their
       addresses), and assume subroutines may not be reachable with the
!      'bl' instruction (the compiler generates the much slower
!      'seth/add3/jl' instruction sequence).
  
! '-msdata=none'
       Disable use of the small data area.  Variables are put into one of
!      '.data', '.bss', or '.rodata' (unless the 'section' attribute has
       been specified).  This is the default.
  
!      The small data area consists of sections '.sdata' and '.sbss'.
       Objects may be explicitly put in the small data area with the
!      'section' attribute using one of these sections.
  
! '-msdata=sdata'
       Put small global and static data in the small data area, but do not
       generate special code to reference them.
  
! '-msdata=use'
       Put small global and static data in the small data area, and
       generate special instructions to reference them.
  
! '-G NUM'
       Put global and static objects less than or equal to NUM bytes into
       the small data or BSS sections instead of the normal data or BSS
!      sections.  The default value of NUM is 8.  The '-msdata' option
!      must be set to one of 'sdata' or 'use' for this option to have any
       effect.
  
!      All modules should be compiled with the same '-G NUM' value.
       Compiling with different values of NUM may or may not work; if it
       doesn't the linker gives an error message--incorrect code is not
       generated.
  
! '-mdebug'
       Makes the M32R-specific code in the compiler display some
       statistics that might help in debugging programs.
  
! '-malign-loops'
       Align all loops to a 32-byte boundary.
  
! '-mno-align-loops'
       Do not enforce a 32-byte alignment for loops.  This is the default.
  
! '-missue-rate=NUMBER'
       Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
  
! '-mbranch-cost=NUMBER'
       NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
       over conditional code, if it is 2, then the opposite applies.
  
! '-mflush-trap=NUMBER'
       Specifies the trap number to use to flush the cache.  The default
       is 12.  Valid numbers are between 0 and 15 inclusive.
  
! '-mno-flush-trap'
       Specifies that the cache cannot be flushed by using a trap.
  
! '-mflush-func=NAME'
       Specifies the name of the operating system function to call to
!      flush the cache.  The default is '_flush_cache', but a function
       call is only used if a trap is not available.
  
! '-mno-flush-func'
       Indicates that there is no OS function for flushing the cache.
  
  
--- 25399,25496 ----
  3.19.24 M32R/D Options
  ----------------------
  
! These ‘-m’ options are defined for Renesas M32R/D architectures:
  
! ‘-m32r2’
       Generate code for the M32R/2.
  
! ‘-m32rx’
       Generate code for the M32R/X.
  
! ‘-m32r’
       Generate code for the M32R.  This is the default.
  
! ‘-mmodel=small’
       Assume all objects live in the lower 16MB of memory (so that their
!      addresses can be loaded with the ‘ld24’ instruction), and assume
!      all subroutines are reachable with the ‘bl’ instruction.  This is
       the default.
  
       The addressability of a particular object can be set with the
!      ‘model’ attribute.
  
! ‘-mmodel=medium’
       Assume objects may be anywhere in the 32-bit address space (the
!      compiler generates ‘seth/add3’ instructions to load their
!      addresses), and assume all subroutines are reachable with the ‘bl’
       instruction.
  
! ‘-mmodel=large’
       Assume objects may be anywhere in the 32-bit address space (the
!      compiler generates ‘seth/add3’ instructions to load their
       addresses), and assume subroutines may not be reachable with the
!      ‘bl’ instruction (the compiler generates the much slower
!      ‘seth/add3/jl’ instruction sequence).
  
! ‘-msdata=none’
       Disable use of the small data area.  Variables are put into one of
!      ‘.data’, ‘.bss’, or ‘.rodata’ (unless the ‘section’ attribute has
       been specified).  This is the default.
  
!      The small data area consists of sections ‘.sdata’ and ‘.sbss’.
       Objects may be explicitly put in the small data area with the
!      ‘section’ attribute using one of these sections.
  
! ‘-msdata=sdata’
       Put small global and static data in the small data area, but do not
       generate special code to reference them.
  
! ‘-msdata=use’
       Put small global and static data in the small data area, and
       generate special instructions to reference them.
  
! ‘-G NUM’
       Put global and static objects less than or equal to NUM bytes into
       the small data or BSS sections instead of the normal data or BSS
!      sections.  The default value of NUM is 8.  The ‘-msdata’ option
!      must be set to one of ‘sdata’ or ‘use’ for this option to have any
       effect.
  
!      All modules should be compiled with the same ‘-G NUM’ value.
       Compiling with different values of NUM may or may not work; if it
       doesn't the linker gives an error message--incorrect code is not
       generated.
  
! ‘-mdebug’
       Makes the M32R-specific code in the compiler display some
       statistics that might help in debugging programs.
  
! ‘-malign-loops’
       Align all loops to a 32-byte boundary.
  
! ‘-mno-align-loops’
       Do not enforce a 32-byte alignment for loops.  This is the default.
  
! ‘-missue-rate=NUMBER’
       Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
  
! ‘-mbranch-cost=NUMBER’
       NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
       over conditional code, if it is 2, then the opposite applies.
  
! ‘-mflush-trap=NUMBER’
       Specifies the trap number to use to flush the cache.  The default
       is 12.  Valid numbers are between 0 and 15 inclusive.
  
! ‘-mno-flush-trap’
       Specifies that the cache cannot be flushed by using a trap.
  
! ‘-mflush-func=NAME’
       Specifies the name of the operating system function to call to
!      flush the cache.  The default is ‘_flush_cache’, but a function
       call is only used if a trap is not available.
  
! ‘-mno-flush-func’
       Indicates that there is no OS function for flushing the cache.
  
  
*************** File: gcc.info,  Node: M680x0 Options,
*** 25488,25726 ****
  3.19.25 M680x0 Options
  ----------------------
  
! These are the '-m' options defined for M680x0 and ColdFire processors.
  The default settings depend on which architecture was selected when the
  compiler was configured; the defaults for the most common choices are
  given below.
  
! '-march=ARCH'
       Generate code for a specific M680x0 or ColdFire instruction set
       architecture.  Permissible values of ARCH for M680x0 architectures
!      are: '68000', '68010', '68020', '68030', '68040', '68060' and
!      'cpu32'.  ColdFire architectures are selected according to
       Freescale's ISA classification and the permissible values are:
!      'isaa', 'isaaplus', 'isab' and 'isac'.
  
!      GCC defines a macro '__mcfARCH__' whenever it is generating code
       for a ColdFire target.  The ARCH in this macro is one of the
!      '-march' arguments given above.
  
!      When used together, '-march' and '-mtune' select code that runs on
       a family of similar processors but that is optimized for a
       particular microarchitecture.
  
! '-mcpu=CPU'
       Generate code for a specific M680x0 or ColdFire processor.  The
!      M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
!      '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
       by the table below, which also classifies the CPUs into families:
  
!      *Family*       *'-mcpu' arguments*
       --------------------------------------------------------------------------
!      '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
!                     '51jm' '51mm' '51qe' '51qm'
!      '5206'         '5202' '5204' '5206'
!      '5206e'        '5206e'
!      '5208'         '5207' '5208'
!      '5211a'        '5210a' '5211a'
!      '5213'         '5211' '5212' '5213'
!      '5216'         '5214' '5216'
!      '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
!      '5225'         '5224' '5225'
!      '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
!      '5235'         '5232' '5233' '5234' '5235' '523x'
!      '5249'         '5249'
!      '5250'         '5250'
!      '5271'         '5270' '5271'
!      '5272'         '5272'
!      '5275'         '5274' '5275'
!      '5282'         '5280' '5281' '5282' '528x'
!      '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
!      '5307'         '5307'
!      '5329'         '5327' '5328' '5329' '532x'
!      '5373'         '5372' '5373' '537x'
!      '5407'         '5407'
!      '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
!                     '5481' '5482' '5483' '5484' '5485'
  
!      '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
!      Other combinations of '-mcpu' and '-march' are rejected.
  
!      GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
!      selected.  It also defines '__mcf_family_FAMILY', where the value
       of FAMILY is given by the table above.
  
! '-mtune=TUNE'
       Tune the code for a particular microarchitecture within the
!      constraints set by '-march' and '-mcpu'.  The M680x0
!      microarchitectures are: '68000', '68010', '68020', '68030',
!      '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
!      'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
  
!      You can also use '-mtune=68020-40' for code that needs to run
       relatively well on 68020, 68030 and 68040 targets.
!      '-mtune=68020-60' is similar but includes 68060 targets as well.
!      These two options select the same tuning decisions as '-m68020-40'
!      and '-m68020-60' respectively.
  
!      GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
!      680x0 architecture ARCH.  It also defines 'mcARCH' unless either
!      '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
!      range of architectures, as selected by '-mtune=68020-40' or
!      '-mtune=68020-60', it defines the macros for every architecture in
       the range.
  
!      GCC also defines the macro '__mUARCH__' when tuning for ColdFire
       microarchitecture UARCH, where UARCH is one of the arguments given
       above.
  
! '-m68000'
! '-mc68000'
       Generate output for a 68000.  This is the default when the compiler
       is configured for 68000-based systems.  It is equivalent to
!      '-march=68000'.
  
       Use this option for microcontrollers with a 68000 or EC000 core,
       including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
  
! '-m68010'
       Generate output for a 68010.  This is the default when the compiler
       is configured for 68010-based systems.  It is equivalent to
!      '-march=68010'.
  
! '-m68020'
! '-mc68020'
       Generate output for a 68020.  This is the default when the compiler
       is configured for 68020-based systems.  It is equivalent to
!      '-march=68020'.
  
! '-m68030'
       Generate output for a 68030.  This is the default when the compiler
       is configured for 68030-based systems.  It is equivalent to
!      '-march=68030'.
  
! '-m68040'
       Generate output for a 68040.  This is the default when the compiler
       is configured for 68040-based systems.  It is equivalent to
!      '-march=68040'.
  
       This option inhibits the use of 68881/68882 instructions that have
       to be emulated by software on the 68040.  Use this option if your
       68040 does not have code to emulate those instructions.
  
! '-m68060'
       Generate output for a 68060.  This is the default when the compiler
       is configured for 68060-based systems.  It is equivalent to
!      '-march=68060'.
  
       This option inhibits the use of 68020 and 68881/68882 instructions
       that have to be emulated by software on the 68060.  Use this option
       if your 68060 does not have code to emulate those instructions.
  
! '-mcpu32'
       Generate output for a CPU32.  This is the default when the compiler
       is configured for CPU32-based systems.  It is equivalent to
!      '-march=cpu32'.
  
       Use this option for microcontrollers with a CPU32 or CPU32+ core,
       including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
       68341, 68349 and 68360.
  
! '-m5200'
       Generate output for a 520X ColdFire CPU.  This is the default when
       the compiler is configured for 520X-based systems.  It is
!      equivalent to '-mcpu=5206', and is now deprecated in favor of that
       option.
  
       Use this option for microcontroller with a 5200 core, including the
       MCF5202, MCF5203, MCF5204 and MCF5206.
  
! '-m5206e'
       Generate output for a 5206e ColdFire CPU.  The option is now
!      deprecated in favor of the equivalent '-mcpu=5206e'.
  
! '-m528x'
       Generate output for a member of the ColdFire 528X family.  The
!      option is now deprecated in favor of the equivalent '-mcpu=528x'.
  
! '-m5307'
       Generate output for a ColdFire 5307 CPU.  The option is now
!      deprecated in favor of the equivalent '-mcpu=5307'.
  
! '-m5407'
       Generate output for a ColdFire 5407 CPU.  The option is now
!      deprecated in favor of the equivalent '-mcpu=5407'.
  
! '-mcfv4e'
       Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
       This includes use of hardware floating-point instructions.  The
!      option is equivalent to '-mcpu=547x', and is now deprecated in
       favor of that option.
  
! '-m68020-40'
       Generate output for a 68040, without using any of the new
       instructions.  This results in code that can run relatively
       efficiently on either a 68020/68881 or a 68030 or a 68040.  The
       generated code does use the 68881 instructions that are emulated on
       the 68040.
  
!      The option is equivalent to '-march=68020' '-mtune=68020-40'.
  
! '-m68020-60'
       Generate output for a 68060, without using any of the new
       instructions.  This results in code that can run relatively
       efficiently on either a 68020/68881 or a 68030 or a 68040.  The
       generated code does use the 68881 instructions that are emulated on
       the 68060.
  
!      The option is equivalent to '-march=68020' '-mtune=68020-60'.
  
! '-mhard-float'
! '-m68881'
       Generate floating-point instructions.  This is the default for
       68020 and above, and for ColdFire devices that have an FPU.  It
!      defines the macro '__HAVE_68881__' on M680x0 targets and
!      '__mcffpu__' on ColdFire targets.
  
! '-msoft-float'
       Do not generate floating-point instructions; use library calls
       instead.  This is the default for 68000, 68010, and 68832 targets.
       It is also the default for ColdFire devices that have no FPU.
  
! '-mdiv'
! '-mno-div'
       Generate (do not generate) ColdFire hardware divide and remainder
!      instructions.  If '-march' is used without '-mcpu', the default is
       "on" for ColdFire architectures and "off" for M680x0 architectures.
       Otherwise, the default is taken from the target CPU (either the
!      default CPU, or the one specified by '-mcpu').  For example, the
!      default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
  
!      GCC defines the macro '__mcfhwdiv__' when this option is enabled.
  
! '-mshort'
!      Consider type 'int' to be 16 bits wide, like 'short int'.
       Additionally, parameters passed on the stack are also aligned to a
       16-bit boundary even on targets whose API mandates promotion to
       32-bit.
  
! '-mno-short'
!      Do not consider type 'int' to be 16 bits wide.  This is the
       default.
  
! '-mnobitfield'
! '-mno-bitfield'
!      Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
!      and '-m5200' options imply '-mnobitfield'.
  
! '-mbitfield'
!      Do use the bit-field instructions.  The '-m68020' option implies
!      '-mbitfield'.  This is the default if you use a configuration
       designed for a 68020.
  
! '-mrtd'
       Use a different function-calling convention, in which functions
!      that take a fixed number of arguments return with the 'rtd'
       instruction, which pops their arguments while returning.  This
       saves one instruction in the caller since there is no need to pop
       the arguments there.
--- 25499,25737 ----
  3.19.25 M680x0 Options
  ----------------------
  
! These are the ‘-m’ options defined for M680x0 and ColdFire processors.
  The default settings depend on which architecture was selected when the
  compiler was configured; the defaults for the most common choices are
  given below.
  
! ‘-march=ARCH’
       Generate code for a specific M680x0 or ColdFire instruction set
       architecture.  Permissible values of ARCH for M680x0 architectures
!      are: ‘68000’, ‘68010’, ‘68020’, ‘68030’, ‘68040’, ‘68060’ and
!      ‘cpu32’.  ColdFire architectures are selected according to
       Freescale's ISA classification and the permissible values are:
!      ‘isaa’, ‘isaaplus’, ‘isab’ and ‘isac’.
  
!      GCC defines a macro ‘__mcfARCH__’ whenever it is generating code
       for a ColdFire target.  The ARCH in this macro is one of the
!      ‘-march’ arguments given above.
  
!      When used together, ‘-march’ and ‘-mtune’ select code that runs on
       a family of similar processors but that is optimized for a
       particular microarchitecture.
  
! ‘-mcpu=CPU’
       Generate code for a specific M680x0 or ColdFire processor.  The
!      M680x0 CPUs are: ‘68000’, ‘68010’, ‘68020’, ‘68030’, ‘68040’,
!      ‘68060’, ‘68302’, ‘68332’ and ‘cpu32’.  The ColdFire CPUs are given
       by the table below, which also classifies the CPUs into families:
  
!      *Family*       *‘-mcpu’ arguments*
       --------------------------------------------------------------------------
!      ‘51’           ‘51’ ‘51ac’ ‘51ag’ ‘51cn’ ‘51em’ ‘51je’ ‘51jf’ ‘51jg’
!                     ‘51jm’ ‘51mm’ ‘51qe’ ‘51qm’
!      ‘5206’         ‘5202’ ‘5204’ ‘5206’
!      ‘5206e’        ‘5206e’
!      ‘5208’         ‘5207’ ‘5208’
!      ‘5211a’        ‘5210a’ ‘5211a’
!      ‘5213’         ‘5211’ ‘5212’ ‘5213’
!      ‘5216’         ‘5214’ ‘5216’
!      ‘52235’        ‘52230’ ‘52231’ ‘52232’ ‘52233’ ‘52234’ ‘52235’
!      ‘5225’         ‘5224’ ‘5225’
!      ‘52259’        ‘52252’ ‘52254’ ‘52255’ ‘52256’ ‘52258’ ‘52259’
!      ‘5235’         ‘5232’ ‘5233’ ‘5234’ ‘5235’ ‘523x’
!      ‘5249’         ‘5249’
!      ‘5250’         ‘5250’
!      ‘5271’         ‘5270’ ‘5271’
!      ‘5272’         ‘5272’
!      ‘5275’         ‘5274’ ‘5275’
!      ‘5282’         ‘5280’ ‘5281’ ‘5282’ ‘528x’
!      ‘53017’        ‘53011’ ‘53012’ ‘53013’ ‘53014’ ‘53015’ ‘53016’ ‘53017’
!      ‘5307’         ‘5307’
!      ‘5329’         ‘5327’ ‘5328’ ‘5329’ ‘532x’
!      ‘5373’         ‘5372’ ‘5373’ ‘537x’
!      ‘5407’         ‘5407’
!      ‘5475’         ‘5470’ ‘5471’ ‘5472’ ‘5473’ ‘5474’ ‘5475’ ‘547x’ ‘5480’
!                     ‘5481’ ‘5482’ ‘5483’ ‘5484’ ‘5485’
  
!      ‘-mcpu=CPU’ overrides ‘-march=ARCH’ if ARCH is compatible with CPU.
!      Other combinations of ‘-mcpu’ and ‘-march’ are rejected.
  
!      GCC defines the macro ‘__mcf_cpu_CPU’ when ColdFire target CPU is
!      selected.  It also defines ‘__mcf_family_FAMILY’, where the value
       of FAMILY is given by the table above.
  
! ‘-mtune=TUNE’
       Tune the code for a particular microarchitecture within the
!      constraints set by ‘-march’ and ‘-mcpu’.  The M680x0
!      microarchitectures are: ‘68000’, ‘68010’, ‘68020’, ‘68030’,
!      ‘68040’, ‘68060’ and ‘cpu32’.  The ColdFire microarchitectures are:
!      ‘cfv1’, ‘cfv2’, ‘cfv3’, ‘cfv4’ and ‘cfv4e’.
  
!      You can also use ‘-mtune=68020-40’ for code that needs to run
       relatively well on 68020, 68030 and 68040 targets.
!      ‘-mtune=68020-60’ is similar but includes 68060 targets as well.
!      These two options select the same tuning decisions as ‘-m68020-40’
!      and ‘-m68020-60’ respectively.
  
!      GCC defines the macros ‘__mcARCH’ and ‘__mcARCH__’ when tuning for
!      680x0 architecture ARCH.  It also defines ‘mcARCH’ unless either
!      ‘-ansi’ or a non-GNU ‘-std’ option is used.  If GCC is tuning for a
!      range of architectures, as selected by ‘-mtune=68020-40’ or
!      ‘-mtune=68020-60’, it defines the macros for every architecture in
       the range.
  
!      GCC also defines the macro ‘__mUARCH__’ when tuning for ColdFire
       microarchitecture UARCH, where UARCH is one of the arguments given
       above.
  
! ‘-m68000’
! ‘-mc68000’
       Generate output for a 68000.  This is the default when the compiler
       is configured for 68000-based systems.  It is equivalent to
!      ‘-march=68000’.
  
       Use this option for microcontrollers with a 68000 or EC000 core,
       including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
  
! ‘-m68010’
       Generate output for a 68010.  This is the default when the compiler
       is configured for 68010-based systems.  It is equivalent to
!      ‘-march=68010’.
  
! ‘-m68020’
! ‘-mc68020’
       Generate output for a 68020.  This is the default when the compiler
       is configured for 68020-based systems.  It is equivalent to
!      ‘-march=68020’.
  
! ‘-m68030’
       Generate output for a 68030.  This is the default when the compiler
       is configured for 68030-based systems.  It is equivalent to
!      ‘-march=68030’.
  
! ‘-m68040’
       Generate output for a 68040.  This is the default when the compiler
       is configured for 68040-based systems.  It is equivalent to
!      ‘-march=68040’.
  
       This option inhibits the use of 68881/68882 instructions that have
       to be emulated by software on the 68040.  Use this option if your
       68040 does not have code to emulate those instructions.
  
! ‘-m68060’
       Generate output for a 68060.  This is the default when the compiler
       is configured for 68060-based systems.  It is equivalent to
!      ‘-march=68060’.
  
       This option inhibits the use of 68020 and 68881/68882 instructions
       that have to be emulated by software on the 68060.  Use this option
       if your 68060 does not have code to emulate those instructions.
  
! ‘-mcpu32’
       Generate output for a CPU32.  This is the default when the compiler
       is configured for CPU32-based systems.  It is equivalent to
!      ‘-march=cpu32’.
  
       Use this option for microcontrollers with a CPU32 or CPU32+ core,
       including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
       68341, 68349 and 68360.
  
! ‘-m5200’
       Generate output for a 520X ColdFire CPU.  This is the default when
       the compiler is configured for 520X-based systems.  It is
!      equivalent to ‘-mcpu=5206’, and is now deprecated in favor of that
       option.
  
       Use this option for microcontroller with a 5200 core, including the
       MCF5202, MCF5203, MCF5204 and MCF5206.
  
! ‘-m5206e’
       Generate output for a 5206e ColdFire CPU.  The option is now
!      deprecated in favor of the equivalent ‘-mcpu=5206e’.
  
! ‘-m528x’
       Generate output for a member of the ColdFire 528X family.  The
!      option is now deprecated in favor of the equivalent ‘-mcpu=528x’.
  
! ‘-m5307’
       Generate output for a ColdFire 5307 CPU.  The option is now
!      deprecated in favor of the equivalent ‘-mcpu=5307’.
  
! ‘-m5407’
       Generate output for a ColdFire 5407 CPU.  The option is now
!      deprecated in favor of the equivalent ‘-mcpu=5407’.
  
! ‘-mcfv4e’
       Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
       This includes use of hardware floating-point instructions.  The
!      option is equivalent to ‘-mcpu=547x’, and is now deprecated in
       favor of that option.
  
! ‘-m68020-40’
       Generate output for a 68040, without using any of the new
       instructions.  This results in code that can run relatively
       efficiently on either a 68020/68881 or a 68030 or a 68040.  The
       generated code does use the 68881 instructions that are emulated on
       the 68040.
  
!      The option is equivalent to ‘-march=68020’ ‘-mtune=68020-40’.
  
! ‘-m68020-60’
       Generate output for a 68060, without using any of the new
       instructions.  This results in code that can run relatively
       efficiently on either a 68020/68881 or a 68030 or a 68040.  The
       generated code does use the 68881 instructions that are emulated on
       the 68060.
  
!      The option is equivalent to ‘-march=68020’ ‘-mtune=68020-60’.
  
! ‘-mhard-float’
! ‘-m68881’
       Generate floating-point instructions.  This is the default for
       68020 and above, and for ColdFire devices that have an FPU.  It
!      defines the macro ‘__HAVE_68881__’ on M680x0 targets and
!      ‘__mcffpu__’ on ColdFire targets.
  
! ‘-msoft-float’
       Do not generate floating-point instructions; use library calls
       instead.  This is the default for 68000, 68010, and 68832 targets.
       It is also the default for ColdFire devices that have no FPU.
  
! ‘-mdiv’
! ‘-mno-div’
       Generate (do not generate) ColdFire hardware divide and remainder
!      instructions.  If ‘-march’ is used without ‘-mcpu’, the default is
       "on" for ColdFire architectures and "off" for M680x0 architectures.
       Otherwise, the default is taken from the target CPU (either the
!      default CPU, or the one specified by ‘-mcpu’).  For example, the
!      default is "off" for ‘-mcpu=5206’ and "on" for ‘-mcpu=5206e’.
  
!      GCC defines the macro ‘__mcfhwdiv__’ when this option is enabled.
  
! ‘-mshort’
!      Consider type ‘int’ to be 16 bits wide, like ‘short int’.
       Additionally, parameters passed on the stack are also aligned to a
       16-bit boundary even on targets whose API mandates promotion to
       32-bit.
  
! ‘-mno-short’
!      Do not consider type ‘int’ to be 16 bits wide.  This is the
       default.
  
! ‘-mnobitfield’
! ‘-mno-bitfield’
!      Do not use the bit-field instructions.  The ‘-m68000’, ‘-mcpu32’
!      and ‘-m5200’ options imply ‘-mnobitfield’.
  
! ‘-mbitfield’
!      Do use the bit-field instructions.  The ‘-m68020’ option implies
!      ‘-mbitfield’.  This is the default if you use a configuration
       designed for a 68020.
  
! ‘-mrtd’
       Use a different function-calling convention, in which functions
!      that take a fixed number of arguments return with the ‘rtd’
       instruction, which pops their arguments while returning.  This
       saves one instruction in the caller since there is no need to pop
       the arguments there.
*************** given below.
*** 25730,25804 ****
       compiled with the Unix compiler.
  
       Also, you must provide function prototypes for all functions that
!      take variable numbers of arguments (including 'printf'); otherwise
       incorrect code is generated for calls to those functions.
  
       In addition, seriously incorrect code results if you call a
       function with too many arguments.  (Normally, extra arguments are
       harmlessly ignored.)
  
!      The 'rtd' instruction is supported by the 68010, 68020, 68030,
       68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
  
!      The default is '-mno-rtd'.
  
! '-malign-int'
! '-mno-align-int'
!      Control whether GCC aligns 'int', 'long', 'long long', 'float',
!      'double', and 'long double' variables on a 32-bit boundary
!      ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
       variables on 32-bit boundaries produces code that runs somewhat
       faster on processors with 32-bit busses at the expense of more
       memory.
  
!      *Warning:* if you use the '-malign-int' switch, GCC aligns
       structures containing the above types differently than most
       published application binary interface specifications for the m68k.
  
       Use the pc-relative addressing mode of the 68000 directly, instead
       of using a global offset table.  At present, this option implies
!      '-fpic', allowing at most a 16-bit offset for pc-relative
!      addressing.  '-fPIC' is not presently supported with '-mpcrel',
       though this could be supported for 68020 and higher processors.
  
! '-mno-strict-align'
! '-mstrict-align'
       Do not (do) assume that unaligned memory references are handled by
       the system.
  
! '-msep-data'
       Generate code that allows the data segment to be located in a
       different area of memory from the text segment.  This allows for
       execute-in-place in an environment without virtual memory
!      management.  This option implies '-fPIC'.
  
! '-mno-sep-data'
       Generate code that assumes that the data segment follows the text
       segment.  This is the default.
  
! '-mid-shared-library'
       Generate code that supports shared libraries via the library ID
       method.  This allows for execute-in-place and shared libraries in
       an environment without virtual memory management.  This option
!      implies '-fPIC'.
  
! '-mno-id-shared-library'
       Generate code that doesn't assume ID-based shared libraries are
       being used.  This is the default.
  
! '-mshared-library-id=n'
       Specifies the identification number of the ID-based shared library
       being compiled.  Specifying a value of 0 generates more compact
       code; specifying other values forces the allocation of that number
       to the current library, but is no more space- or time-efficient
       than omitting this option.
  
! '-mxgot'
! '-mno-xgot'
       When generating position-independent code for ColdFire, generate
       code that works if the GOT has more than 8192 entries.  This code
       is larger and slower than code generated without this option.  On
!      M680x0 processors, this option is not needed; '-fPIC' suffices.
  
       GCC normally uses a single instruction to load values from the GOT.
       While this is relatively efficient, it only works if the GOT is
--- 25741,25815 ----
       compiled with the Unix compiler.
  
       Also, you must provide function prototypes for all functions that
!      take variable numbers of arguments (including ‘printf’); otherwise
       incorrect code is generated for calls to those functions.
  
       In addition, seriously incorrect code results if you call a
       function with too many arguments.  (Normally, extra arguments are
       harmlessly ignored.)
  
!      The ‘rtd’ instruction is supported by the 68010, 68020, 68030,
       68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
  
!      The default is ‘-mno-rtd’.
  
! ‘-malign-int’
! ‘-mno-align-int’
!      Control whether GCC aligns ‘int’, ‘long’, ‘long long’, ‘float’,
!      ‘double’, and ‘long double’ variables on a 32-bit boundary
!      (‘-malign-int’) or a 16-bit boundary (‘-mno-align-int’).  Aligning
       variables on 32-bit boundaries produces code that runs somewhat
       faster on processors with 32-bit busses at the expense of more
       memory.
  
!      *Warning:* if you use the ‘-malign-int’ switch, GCC aligns
       structures containing the above types differently than most
       published application binary interface specifications for the m68k.
  
       Use the pc-relative addressing mode of the 68000 directly, instead
       of using a global offset table.  At present, this option implies
!      ‘-fpic’, allowing at most a 16-bit offset for pc-relative
!      addressing.  ‘-fPIC’ is not presently supported with ‘-mpcrel’,
       though this could be supported for 68020 and higher processors.
  
! ‘-mno-strict-align’
! ‘-mstrict-align’
       Do not (do) assume that unaligned memory references are handled by
       the system.
  
! ‘-msep-data’
       Generate code that allows the data segment to be located in a
       different area of memory from the text segment.  This allows for
       execute-in-place in an environment without virtual memory
!      management.  This option implies ‘-fPIC’.
  
! ‘-mno-sep-data’
       Generate code that assumes that the data segment follows the text
       segment.  This is the default.
  
! ‘-mid-shared-library’
       Generate code that supports shared libraries via the library ID
       method.  This allows for execute-in-place and shared libraries in
       an environment without virtual memory management.  This option
!      implies ‘-fPIC’.
  
! ‘-mno-id-shared-library’
       Generate code that doesn't assume ID-based shared libraries are
       being used.  This is the default.
  
! ‘-mshared-library-id=n’
       Specifies the identification number of the ID-based shared library
       being compiled.  Specifying a value of 0 generates more compact
       code; specifying other values forces the allocation of that number
       to the current library, but is no more space- or time-efficient
       than omitting this option.
  
! ‘-mxgot’
! ‘-mno-xgot’
       When generating position-independent code for ColdFire, generate
       code that works if the GOT has more than 8192 entries.  This code
       is larger and slower than code generated without this option.  On
!      M680x0 processors, this option is not needed; ‘-fPIC’ suffices.
  
       GCC normally uses a single instruction to load values from the GOT.
       While this is relatively efficient, it only works if the GOT is
*************** given below.
*** 25807,25828 ****
  
            relocation truncated to fit: R_68K_GOT16O foobar
  
!      If this happens, you should recompile your code with '-mxgot'.  It
       should then work with very large GOTs.  However, code generated
!      with '-mxgot' is less efficient, since it takes 4 instructions to
       fetch the value of a global symbol.
  
       Note that some linkers, including newer versions of the GNU linker,
       can create multiple GOTs and sort GOT entries.  If you have such a
!      linker, you should only need to use '-mxgot' when compiling a
       single object file that accesses more than 8192 GOT entries.  Very
       few do.
  
       These options have no effect unless GCC is generating
       position-independent code.
  
! '-mlong-jump-table-offsets'
!      Use 32-bit offsets in 'switch' tables.  The default is to use
       16-bit offsets.
  
  
--- 25818,25839 ----
  
            relocation truncated to fit: R_68K_GOT16O foobar
  
!      If this happens, you should recompile your code with ‘-mxgot’.  It
       should then work with very large GOTs.  However, code generated
!      with ‘-mxgot’ is less efficient, since it takes 4 instructions to
       fetch the value of a global symbol.
  
       Note that some linkers, including newer versions of the GNU linker,
       can create multiple GOTs and sort GOT entries.  If you have such a
!      linker, you should only need to use ‘-mxgot’ when compiling a
       single object file that accesses more than 8192 GOT entries.  Very
       few do.
  
       These options have no effect unless GCC is generating
       position-independent code.
  
! ‘-mlong-jump-table-offsets’
!      Use 32-bit offsets in ‘switch’ tables.  The default is to use
       16-bit offsets.
  
  
*************** File: gcc.info,  Node: MCore Options,  N
*** 25831,25880 ****
  3.19.26 MCore Options
  ---------------------
  
! These are the '-m' options defined for the Motorola M*Core processors.
  
! '-mhardlit'
! '-mno-hardlit'
       Inline constants into the code stream if it can be done in two
       instructions or less.
  
! '-mdiv'
! '-mno-div'
       Use the divide instruction.  (Enabled by default).
  
! '-mrelax-immediate'
! '-mno-relax-immediate'
       Allow arbitrary-sized immediates in bit operations.
  
! '-mwide-bitfields'
! '-mno-wide-bitfields'
!      Always treat bit-fields as 'int'-sized.
  
! '-m4byte-functions'
! '-mno-4byte-functions'
       Force all functions to be aligned to a 4-byte boundary.
  
! '-mcallgraph-data'
! '-mno-callgraph-data'
       Emit callgraph information.
  
! '-mslow-bytes'
! '-mno-slow-bytes'
       Prefer word access when reading byte quantities.
  
! '-mlittle-endian'
! '-mbig-endian'
       Generate code for a little-endian target.
  
! '-m210'
! '-m340'
       Generate code for the 210 processor.
  
! '-mno-lsim'
       Assume that runtime support has been provided and so omit the
!      simulator library ('libsim.a)' from the linker command line.
  
! '-mstack-increment=SIZE'
       Set the maximum amount for a single stack increment operation.
       Large values can increase the speed of programs that contain
       functions that need a large amount of stack space, but they can
--- 25842,25891 ----
  3.19.26 MCore Options
  ---------------------
  
! These are the ‘-m’ options defined for the Motorola M*Core processors.
  
! ‘-mhardlit’
! ‘-mno-hardlit’
       Inline constants into the code stream if it can be done in two
       instructions or less.
  
! ‘-mdiv’
! ‘-mno-div’
       Use the divide instruction.  (Enabled by default).
  
! ‘-mrelax-immediate’
! ‘-mno-relax-immediate’
       Allow arbitrary-sized immediates in bit operations.
  
! ‘-mwide-bitfields’
! ‘-mno-wide-bitfields’
!      Always treat bit-fields as ‘int’-sized.
  
! ‘-m4byte-functions’
! ‘-mno-4byte-functions’
       Force all functions to be aligned to a 4-byte boundary.
  
! ‘-mcallgraph-data’
! ‘-mno-callgraph-data’
       Emit callgraph information.
  
! ‘-mslow-bytes’
! ‘-mno-slow-bytes’
       Prefer word access when reading byte quantities.
  
! ‘-mlittle-endian’
! ‘-mbig-endian’
       Generate code for a little-endian target.
  
! ‘-m210’
! ‘-m340’
       Generate code for the 210 processor.
  
! ‘-mno-lsim’
       Assume that runtime support has been provided and so omit the
!      simulator library (‘libsim.a)’ from the linker command line.
  
! ‘-mstack-increment=SIZE’
       Set the maximum amount for a single stack increment operation.
       Large values can increase the speed of programs that contain
       functions that need a large amount of stack space, but they can
*************** File: gcc.info,  Node: MicroBlaze Option
*** 25887,25978 ****
  3.19.27 MicroBlaze Options
  --------------------------
  
! '-msoft-float'
       Use software emulation for floating point (default).
  
! '-mhard-float'
       Use hardware floating-point instructions.
  
! '-mmemcpy'
!      Do not optimize block moves, use 'memcpy'.
  
! '-mno-clearbss'
!      This option is deprecated.  Use '-fno-zero-initialized-in-bss'
       instead.
  
! '-mcpu=CPU-TYPE'
       Use features of, and schedule code for, the given CPU. Supported
!      values are in the format 'vX.YY.Z', where X is a major version, YY
       is the minor version, and Z is compatibility code.  Example values
!      are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v6.00.a'.
  
! '-mxl-soft-mul'
       Use software multiply emulation (default).
  
! '-mxl-soft-div'
       Use software emulation for divides (default).
  
! '-mxl-barrel-shift'
       Use the hardware barrel shifter.
  
! '-mxl-pattern-compare'
       Use pattern compare instructions.
  
! '-msmall-divides'
       Use table lookup optimization for small signed integer divisions.
  
! '-mxl-stack-check'
!      This option is deprecated.  Use '-fstack-check' instead.
  
! '-mxl-gp-opt'
!      Use GP-relative '.sdata'/'.sbss' sections.
  
! '-mxl-multiply-high'
       Use multiply high instructions for high part of 32x32 multiply.
  
! '-mxl-float-convert'
       Use hardware floating-point conversion instructions.
  
! '-mxl-float-sqrt'
       Use hardware floating-point square root instruction.
  
! '-mbig-endian'
       Generate code for a big-endian target.
  
! '-mlittle-endian'
       Generate code for a little-endian target.
  
! '-mxl-reorder'
       Use reorder instructions (swap and byte reversed load/store).
  
! '-mxl-mode-APP-MODEL'
       Select application model APP-MODEL.  Valid models are
!      'executable'
!           normal executable (default), uses startup code 'crt0.o'.
  
!      'xmdstub'
            for use with Xilinx Microprocessor Debugger (XMD) based
            software intrusive debug agent called xmdstub.  This uses
!           startup file 'crt1.o' and sets the start address of the
            program to 0x800.
  
!      'bootstrap'
            for applications that are loaded using a bootloader.  This
!           model uses startup file 'crt2.o' which does not contain a
            processor reset vector handler.  This is suitable for
            transferring control on a processor reset to the bootloader
            rather than the application.
  
!      'novectors'
            for applications that do not require any of the MicroBlaze
            vectors.  This option may be useful for applications running
!           within a monitoring application.  This model uses 'crt3.o' as
            a startup file.
  
!      Option '-xl-mode-APP-MODEL' is a deprecated alias for
!      '-mxl-mode-APP-MODEL'.
  
! '-mpic-data-is-text-relative'
       Assume that the displacement between the text and data segments is
       fixed at static link time.  This allows data to be referenced by
       offset from start of text address instead of GOT since PC-relative
--- 25898,25989 ----
  3.19.27 MicroBlaze Options
  --------------------------
  
! ‘-msoft-float’
       Use software emulation for floating point (default).
  
! ‘-mhard-float’
       Use hardware floating-point instructions.
  
! ‘-mmemcpy’
!      Do not optimize block moves, use ‘memcpy’.
  
! ‘-mno-clearbss’
!      This option is deprecated.  Use ‘-fno-zero-initialized-in-bss’
       instead.
  
! ‘-mcpu=CPU-TYPE’
       Use features of, and schedule code for, the given CPU. Supported
!      values are in the format ‘vX.YY.Z’, where X is a major version, YY
       is the minor version, and Z is compatibility code.  Example values
!      are ‘v3.00.a’, ‘v4.00.b’, ‘v5.00.a’, ‘v5.00.b’, ‘v6.00.a’.
  
! ‘-mxl-soft-mul’
       Use software multiply emulation (default).
  
! ‘-mxl-soft-div’
       Use software emulation for divides (default).
  
! ‘-mxl-barrel-shift’
       Use the hardware barrel shifter.
  
! ‘-mxl-pattern-compare’
       Use pattern compare instructions.
  
! ‘-msmall-divides’
       Use table lookup optimization for small signed integer divisions.
  
! ‘-mxl-stack-check’
!      This option is deprecated.  Use ‘-fstack-check’ instead.
  
! ‘-mxl-gp-opt’
!      Use GP-relative ‘.sdata’/‘.sbss’ sections.
  
! ‘-mxl-multiply-high’
       Use multiply high instructions for high part of 32x32 multiply.
  
! ‘-mxl-float-convert’
       Use hardware floating-point conversion instructions.
  
! ‘-mxl-float-sqrt’
       Use hardware floating-point square root instruction.
  
! ‘-mbig-endian’
       Generate code for a big-endian target.
  
! ‘-mlittle-endian’
       Generate code for a little-endian target.
  
! ‘-mxl-reorder’
       Use reorder instructions (swap and byte reversed load/store).
  
! ‘-mxl-mode-APP-MODEL’
       Select application model APP-MODEL.  Valid models are
!      ‘executable’
!           normal executable (default), uses startup code ‘crt0.o’.
  
!      ‘xmdstub’
            for use with Xilinx Microprocessor Debugger (XMD) based
            software intrusive debug agent called xmdstub.  This uses
!           startup file ‘crt1.o’ and sets the start address of the
            program to 0x800.
  
!      ‘bootstrap’
            for applications that are loaded using a bootloader.  This
!           model uses startup file ‘crt2.o’ which does not contain a
            processor reset vector handler.  This is suitable for
            transferring control on a processor reset to the bootloader
            rather than the application.
  
!      ‘novectors’
            for applications that do not require any of the MicroBlaze
            vectors.  This option may be useful for applications running
!           within a monitoring application.  This model uses ‘crt3.o’ as
            a startup file.
  
!      Option ‘-xl-mode-APP-MODEL’ is a deprecated alias for
!      ‘-mxl-mode-APP-MODEL’.
  
! ‘-mpic-data-is-text-relative’
       Assume that the displacement between the text and data segments is
       fixed at static link time.  This allows data to be referenced by
       offset from start of text address instead of GOT since PC-relative
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 25984,26218 ****
  3.19.28 MIPS Options
  --------------------
  
! '-EB'
       Generate big-endian code.
  
! '-EL'
!      Generate little-endian code.  This is the default for 'mips*el-*-*'
       configurations.
  
! '-march=ARCH'
       Generate code that runs on ARCH, which can be the name of a generic
       MIPS ISA, or the name of a particular processor.  The ISA names
!      are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
!      'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
!      'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
!      '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
!      '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
!      '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
!      '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
!      '1004kf1_1', 'i6400', 'i6500', 'interaptiv', 'loongson2e',
!      'loongson2f', 'loongson3a', 'gs464', 'gs464e', 'gs264e', 'm4k',
!      'm14k', 'm14kc', 'm14ke', 'm14kec', 'm5100', 'm5101', 'octeon',
!      'octeon+', 'octeon2', 'octeon3', 'orion', 'p5600', 'p6600',
!      'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 'r4650',
!      'r4700', 'r5900', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
!      'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
!      'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
!      and 'xlp'.  The special value 'from-abi' selects the most
!      compatible architecture for the selected ABI (that is, 'mips1' for
!      32-bit ABIs and 'mips3' for 64-bit ABIs).
  
!      The native Linux/GNU toolchain also supports the value 'native',
       which selects the best architecture option for the host processor.
!      '-march=native' has no effect if GCC does not recognize the
       processor.
  
!      In processor names, a final '000' can be abbreviated as 'k' (for
!      example, '-march=r2k').  Prefixes are optional, and 'vr' may be
!      written 'r'.
  
!      Names of the form 'Nf2_1' refer to processors with FPUs clocked at
!      half the rate of the core, names of the form 'Nf1_1' refer to
       processors with FPUs clocked at the same rate as the core, and
!      names of the form 'Nf3_2' refer to processors with FPUs clocked a
       ratio of 3:2 with respect to the core.  For compatibility reasons,
!      'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
!      accepted as synonyms for 'Nf1_1'.
  
       GCC defines two macros based on the value of this option.  The
!      first is '_MIPS_ARCH', which gives the name of target architecture,
!      as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
!      is the capitalized value of '_MIPS_ARCH'.  For example,
!      '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
!      '_MIPS_ARCH_R2000'.
  
!      Note that the '_MIPS_ARCH' macro uses the processor names given
       above.  In other words, it has the full prefix and does not
!      abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
!      names the resolved architecture (either '"mips1"' or '"mips3"').
!      It names the default architecture when no '-march' option is given.
  
! '-mtune=ARCH'
       Optimize for ARCH.  Among other things, this option controls the
       way instructions are scheduled, and the perceived cost of
       arithmetic operations.  The list of ARCH values is the same as for
!      '-march'.
  
       When this option is not used, GCC optimizes for the processor
!      specified by '-march'.  By using '-march' and '-mtune' together, it
       is possible to generate code that runs on a family of processors,
       but optimize the code for one particular member of that family.
  
!      '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
!      which work in the same way as the '-march' ones described above.
  
! '-mips1'
!      Equivalent to '-march=mips1'.
  
! '-mips2'
!      Equivalent to '-march=mips2'.
  
! '-mips3'
!      Equivalent to '-march=mips3'.
  
! '-mips4'
!      Equivalent to '-march=mips4'.
  
! '-mips32'
!      Equivalent to '-march=mips32'.
  
! '-mips32r3'
!      Equivalent to '-march=mips32r3'.
  
! '-mips32r5'
!      Equivalent to '-march=mips32r5'.
  
! '-mips32r6'
!      Equivalent to '-march=mips32r6'.
  
! '-mips64'
!      Equivalent to '-march=mips64'.
  
! '-mips64r2'
!      Equivalent to '-march=mips64r2'.
  
! '-mips64r3'
!      Equivalent to '-march=mips64r3'.
  
! '-mips64r5'
!      Equivalent to '-march=mips64r5'.
  
! '-mips64r6'
!      Equivalent to '-march=mips64r6'.
  
! '-mips16'
! '-mno-mips16'
       Generate (do not generate) MIPS16 code.  If GCC is targeting a
       MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
  
       MIPS16 code generation can also be controlled on a per-function
!      basis by means of 'mips16' and 'nomips16' attributes.  *Note
       Function Attributes::, for more information.
  
! '-mmips16e2'
! '-mno-mips16e2'
       Use (do not use) the MIPS16e2 ASE. This option modifies the
!      behavior of the '-mips16' option such that it targets the MIPS16e2
       ASE.
  
! '-mflip-mips16'
       Generate MIPS16 code on alternating functions.  This option is
       provided for regression testing of mixed MIPS16/non-MIPS16 code
       generation, and is not intended for ordinary use in compiling user
       code.
  
! '-minterlink-compressed'
! '-mno-interlink-compressed'
       Require (do not require) that code using the standard
       (uncompressed) MIPS ISA be link-compatible with MIPS16 and
       microMIPS code, and vice versa.
  
       For example, code using the standard ISA encoding cannot jump
       directly to MIPS16 or microMIPS code; it must either use a call or
!      an indirect jump.  '-minterlink-compressed' therefore disables
       direct jumps unless GCC knows that the target of the jump is not
       compressed.
  
! '-minterlink-mips16'
! '-mno-interlink-mips16'
!      Aliases of '-minterlink-compressed' and
!      '-mno-interlink-compressed'.  These options predate the microMIPS
       ASE and are retained for backwards compatibility.
  
! '-mabi=32'
! '-mabi=o64'
! '-mabi=n32'
! '-mabi=64'
! '-mabi=eabi'
       Generate code for the given ABI.
  
       Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
       generates 64-bit code when you select a 64-bit architecture, but
!      you can use '-mgp32' to get 32-bit code instead.
  
       For information about the O64 ABI, see
       <https://gcc.gnu.org/projects/mipso64-abi.html>.
  
       GCC supports a variant of the o32 ABI in which floating-point
       registers are 64 rather than 32 bits wide.  You can select this
!      combination with '-mabi=32' '-mfp64'.  This ABI relies on the
!      'mthc1' and 'mfhc1' instructions and is therefore only supported
       for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
  
       The register assignments for arguments and return values remain the
       same, but each scalar value is passed in a single 64-bit register
       rather than a pair of 32-bit registers.  For example, scalar
!      floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
       pair.  The set of call-saved registers also remains the same in
       that the even-numbered double-precision registers are saved.
  
       Two additional variants of the o32 ABI are supported to enable a
       transition from 32-bit to 64-bit registers.  These are FPXX
!      ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
       extension mandates that all code must execute correctly when run
       using 32-bit or 64-bit registers.  The code can be interlinked with
       either FP32 or FP64, but not both.  The FP64A extension is similar
       to the FP64 extension but forbids the use of odd-numbered
       single-precision registers.  This can be used in conjunction with
!      the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
       and FP64A code to interlink and run in the same process without
       changing FPU modes.
  
! '-mabicalls'
! '-mno-abicalls'
       Generate (do not generate) code that is suitable for SVR4-style
!      dynamic objects.  '-mabicalls' is the default for SVR4-based
       systems.
  
! '-mshared'
! '-mno-shared'
       Generate (do not generate) code that is fully position-independent,
       and that can therefore be linked into shared libraries.  This
!      option only affects '-mabicalls'.
  
!      All '-mabicalls' code has traditionally been position-independent,
!      regardless of options like '-fPIC' and '-fpic'.  However, as an
       extension, the GNU toolchain allows executables to use absolute
       accesses for locally-binding symbols.  It can also use shorter GP
       initialization sequences and generate direct calls to
!      locally-defined functions.  This mode is selected by '-mno-shared'.
  
!      '-mno-shared' depends on binutils 2.16 or higher and generates
       objects that can only be linked by the GNU linker.  However, the
       option does not affect the ABI of the final executable; it only
!      affects the ABI of relocatable objects.  Using '-mno-shared'
       generally makes executables both smaller and quicker.
  
!      '-mshared' is the default.
  
! '-mplt'
! '-mno-plt'
       Assume (do not assume) that the static and dynamic linkers support
!      PLTs and copy relocations.  This option only affects '-mno-shared
!      -mabicalls'.  For the n64 ABI, this option has no effect without
!      '-msym32'.
  
!      You can make '-mplt' the default by configuring GCC with
!      '--with-mips-plt'.  The default is '-mno-plt' otherwise.
  
! '-mxgot'
! '-mno-xgot'
       Lift (do not lift) the usual restrictions on the size of the global
       offset table.
  
--- 25995,26229 ----
  3.19.28 MIPS Options
  --------------------
  
! ‘-EB’
       Generate big-endian code.
  
! ‘-EL’
!      Generate little-endian code.  This is the default for ‘mips*el-*-*’
       configurations.
  
! ‘-march=ARCH’
       Generate code that runs on ARCH, which can be the name of a generic
       MIPS ISA, or the name of a particular processor.  The ISA names
!      are: ‘mips1’, ‘mips2’, ‘mips3’, ‘mips4’, ‘mips32’, ‘mips32r2’,
!      ‘mips32r3’, ‘mips32r5’, ‘mips32r6’, ‘mips64’, ‘mips64r2’,
!      ‘mips64r3’, ‘mips64r5’ and ‘mips64r6’.  The processor names are:
!      ‘4kc’, ‘4km’, ‘4kp’, ‘4ksc’, ‘4kec’, ‘4kem’, ‘4kep’, ‘4ksd’, ‘5kc’,
!      ‘5kf’, ‘20kc’, ‘24kc’, ‘24kf2_1’, ‘24kf1_1’, ‘24kec’, ‘24kef2_1’,
!      ‘24kef1_1’, ‘34kc’, ‘34kf2_1’, ‘34kf1_1’, ‘34kn’, ‘74kc’,
!      ‘74kf2_1’, ‘74kf1_1’, ‘74kf3_2’, ‘1004kc’, ‘1004kf2_1’,
!      ‘1004kf1_1’, ‘i6400’, ‘i6500’, ‘interaptiv’, ‘loongson2e’,
!      ‘loongson2f’, ‘loongson3a’, ‘gs464’, ‘gs464e’, ‘gs264e’, ‘m4k’,
!      ‘m14k’, ‘m14kc’, ‘m14ke’, ‘m14kec’, ‘m5100’, ‘m5101’, ‘octeon’,
!      ‘octeon+’, ‘octeon2’, ‘octeon3’, ‘orion’, ‘p5600’, ‘p6600’,
!      ‘r2000’, ‘r3000’, ‘r3900’, ‘r4000’, ‘r4400’, ‘r4600’, ‘r4650’,
!      ‘r4700’, ‘r5900’, ‘r6000’, ‘r8000’, ‘rm7000’, ‘rm9000’, ‘r10000’,
!      ‘r12000’, ‘r14000’, ‘r16000’, ‘sb1’, ‘sr71000’, ‘vr4100’, ‘vr4111’,
!      ‘vr4120’, ‘vr4130’, ‘vr4300’, ‘vr5000’, ‘vr5400’, ‘vr5500’, ‘xlr’
!      and ‘xlp’.  The special value ‘from-abi’ selects the most
!      compatible architecture for the selected ABI (that is, ‘mips1’ for
!      32-bit ABIs and ‘mips3’ for 64-bit ABIs).
  
!      The native Linux/GNU toolchain also supports the value ‘native’,
       which selects the best architecture option for the host processor.
!      ‘-march=native’ has no effect if GCC does not recognize the
       processor.
  
!      In processor names, a final ‘000’ can be abbreviated as ‘k’ (for
!      example, ‘-march=r2k’).  Prefixes are optional, and ‘vr’ may be
!      written ‘r’.
  
!      Names of the form ‘Nf2_1’ refer to processors with FPUs clocked at
!      half the rate of the core, names of the form ‘Nf1_1’ refer to
       processors with FPUs clocked at the same rate as the core, and
!      names of the form ‘Nf3_2’ refer to processors with FPUs clocked a
       ratio of 3:2 with respect to the core.  For compatibility reasons,
!      ‘Nf’ is accepted as a synonym for ‘Nf2_1’ while ‘Nx’ and ‘Bfx’ are
!      accepted as synonyms for ‘Nf1_1’.
  
       GCC defines two macros based on the value of this option.  The
!      first is ‘_MIPS_ARCH’, which gives the name of target architecture,
!      as a string.  The second has the form ‘_MIPS_ARCH_FOO’, where FOO
!      is the capitalized value of ‘_MIPS_ARCH’.  For example,
!      ‘-march=r2000’ sets ‘_MIPS_ARCH’ to ‘"r2000"’ and defines the macro
!      ‘_MIPS_ARCH_R2000’.
  
!      Note that the ‘_MIPS_ARCH’ macro uses the processor names given
       above.  In other words, it has the full prefix and does not
!      abbreviate ‘000’ as ‘k’.  In the case of ‘from-abi’, the macro
!      names the resolved architecture (either ‘"mips1"’ or ‘"mips3"’).
!      It names the default architecture when no ‘-march’ option is given.
  
! ‘-mtune=ARCH’
       Optimize for ARCH.  Among other things, this option controls the
       way instructions are scheduled, and the perceived cost of
       arithmetic operations.  The list of ARCH values is the same as for
!      ‘-march’.
  
       When this option is not used, GCC optimizes for the processor
!      specified by ‘-march’.  By using ‘-march’ and ‘-mtune’ together, it
       is possible to generate code that runs on a family of processors,
       but optimize the code for one particular member of that family.
  
!      ‘-mtune’ defines the macros ‘_MIPS_TUNE’ and ‘_MIPS_TUNE_FOO’,
!      which work in the same way as the ‘-march’ ones described above.
  
! ‘-mips1’
!      Equivalent to ‘-march=mips1’.
  
! ‘-mips2’
!      Equivalent to ‘-march=mips2’.
  
! ‘-mips3’
!      Equivalent to ‘-march=mips3’.
  
! ‘-mips4’
!      Equivalent to ‘-march=mips4’.
  
! ‘-mips32’
!      Equivalent to ‘-march=mips32’.
  
! ‘-mips32r3’
!      Equivalent to ‘-march=mips32r3’.
  
! ‘-mips32r5’
!      Equivalent to ‘-march=mips32r5’.
  
! ‘-mips32r6’
!      Equivalent to ‘-march=mips32r6’.
  
! ‘-mips64’
!      Equivalent to ‘-march=mips64’.
  
! ‘-mips64r2’
!      Equivalent to ‘-march=mips64r2’.
  
! ‘-mips64r3’
!      Equivalent to ‘-march=mips64r3’.
  
! ‘-mips64r5’
!      Equivalent to ‘-march=mips64r5’.
  
! ‘-mips64r6’
!      Equivalent to ‘-march=mips64r6’.
  
! ‘-mips16’
! ‘-mno-mips16’
       Generate (do not generate) MIPS16 code.  If GCC is targeting a
       MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
  
       MIPS16 code generation can also be controlled on a per-function
!      basis by means of ‘mips16’ and ‘nomips16’ attributes.  *Note
       Function Attributes::, for more information.
  
! ‘-mmips16e2’
! ‘-mno-mips16e2’
       Use (do not use) the MIPS16e2 ASE. This option modifies the
!      behavior of the ‘-mips16’ option such that it targets the MIPS16e2
       ASE.
  
! ‘-mflip-mips16’
       Generate MIPS16 code on alternating functions.  This option is
       provided for regression testing of mixed MIPS16/non-MIPS16 code
       generation, and is not intended for ordinary use in compiling user
       code.
  
! ‘-minterlink-compressed’
! ‘-mno-interlink-compressed’
       Require (do not require) that code using the standard
       (uncompressed) MIPS ISA be link-compatible with MIPS16 and
       microMIPS code, and vice versa.
  
       For example, code using the standard ISA encoding cannot jump
       directly to MIPS16 or microMIPS code; it must either use a call or
!      an indirect jump.  ‘-minterlink-compressed’ therefore disables
       direct jumps unless GCC knows that the target of the jump is not
       compressed.
  
! ‘-minterlink-mips16’
! ‘-mno-interlink-mips16’
!      Aliases of ‘-minterlink-compressed’ and
!      ‘-mno-interlink-compressed’.  These options predate the microMIPS
       ASE and are retained for backwards compatibility.
  
! ‘-mabi=32’
! ‘-mabi=o64’
! ‘-mabi=n32’
! ‘-mabi=64’
! ‘-mabi=eabi’
       Generate code for the given ABI.
  
       Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
       generates 64-bit code when you select a 64-bit architecture, but
!      you can use ‘-mgp32’ to get 32-bit code instead.
  
       For information about the O64 ABI, see
       <https://gcc.gnu.org/projects/mipso64-abi.html>.
  
       GCC supports a variant of the o32 ABI in which floating-point
       registers are 64 rather than 32 bits wide.  You can select this
!      combination with ‘-mabi=32’ ‘-mfp64’.  This ABI relies on the
!      ‘mthc1’ and ‘mfhc1’ instructions and is therefore only supported
       for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
  
       The register assignments for arguments and return values remain the
       same, but each scalar value is passed in a single 64-bit register
       rather than a pair of 32-bit registers.  For example, scalar
!      floating-point values are returned in ‘$f0’ only, not a ‘$f0’/‘$f1’
       pair.  The set of call-saved registers also remains the same in
       that the even-numbered double-precision registers are saved.
  
       Two additional variants of the o32 ABI are supported to enable a
       transition from 32-bit to 64-bit registers.  These are FPXX
!      (‘-mfpxx’) and FP64A (‘-mfp64’ ‘-mno-odd-spreg’).  The FPXX
       extension mandates that all code must execute correctly when run
       using 32-bit or 64-bit registers.  The code can be interlinked with
       either FP32 or FP64, but not both.  The FP64A extension is similar
       to the FP64 extension but forbids the use of odd-numbered
       single-precision registers.  This can be used in conjunction with
!      the ‘FRE’ mode of FPUs in MIPS32R5 processors and allows both FP32
       and FP64A code to interlink and run in the same process without
       changing FPU modes.
  
! ‘-mabicalls’
! ‘-mno-abicalls’
       Generate (do not generate) code that is suitable for SVR4-style
!      dynamic objects.  ‘-mabicalls’ is the default for SVR4-based
       systems.
  
! ‘-mshared’
! ‘-mno-shared’
       Generate (do not generate) code that is fully position-independent,
       and that can therefore be linked into shared libraries.  This
!      option only affects ‘-mabicalls’.
  
!      All ‘-mabicalls’ code has traditionally been position-independent,
!      regardless of options like ‘-fPIC’ and ‘-fpic’.  However, as an
       extension, the GNU toolchain allows executables to use absolute
       accesses for locally-binding symbols.  It can also use shorter GP
       initialization sequences and generate direct calls to
!      locally-defined functions.  This mode is selected by ‘-mno-shared’.
  
!      ‘-mno-shared’ depends on binutils 2.16 or higher and generates
       objects that can only be linked by the GNU linker.  However, the
       option does not affect the ABI of the final executable; it only
!      affects the ABI of relocatable objects.  Using ‘-mno-shared’
       generally makes executables both smaller and quicker.
  
!      ‘-mshared’ is the default.
  
! ‘-mplt’
! ‘-mno-plt’
       Assume (do not assume) that the static and dynamic linkers support
!      PLTs and copy relocations.  This option only affects ‘-mno-shared
!      -mabicalls’.  For the n64 ABI, this option has no effect without
!      ‘-msym32’.
  
!      You can make ‘-mplt’ the default by configuring GCC with
!      ‘--with-mips-plt’.  The default is ‘-mno-plt’ otherwise.
  
! ‘-mxgot’
! ‘-mno-xgot’
       Lift (do not lift) the usual restrictions on the size of the global
       offset table.
  
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26223,26527 ****
  
            relocation truncated to fit: R_MIPS_GOT16 foobar
  
!      If this happens, you should recompile your code with '-mxgot'.
       This works with very large GOTs, although the code is also less
       efficient, since it takes three instructions to fetch the value of
       a global symbol.
  
       Note that some linkers can create multiple GOTs.  If you have such
!      a linker, you should only need to use '-mxgot' when a single object
       file accesses more than 64k's worth of GOT entries.  Very few do.
  
       These options have no effect unless GCC is generating position
       independent code.
  
! '-mgp32'
       Assume that general-purpose registers are 32 bits wide.
  
! '-mgp64'
       Assume that general-purpose registers are 64 bits wide.
  
! '-mfp32'
       Assume that floating-point registers are 32 bits wide.
  
! '-mfp64'
       Assume that floating-point registers are 64 bits wide.
  
! '-mfpxx'
       Do not assume the width of floating-point registers.
  
! '-mhard-float'
       Use floating-point coprocessor instructions.
  
! '-msoft-float'
       Do not use floating-point coprocessor instructions.  Implement
       floating-point calculations using library calls instead.
  
! '-mno-float'
!      Equivalent to '-msoft-float', but additionally asserts that the
       program being compiled does not perform any floating-point
       operations.  This option is presently supported only by some
       bare-metal MIPS configurations, where it may select a special set
       of libraries that lack all floating-point support (including, for
!      example, the floating-point 'printf' formats).  If code compiled
!      with '-mno-float' accidentally contains floating-point operations,
       it is likely to suffer a link-time or run-time failure.
  
! '-msingle-float'
       Assume that the floating-point coprocessor only supports
       single-precision operations.
  
! '-mdouble-float'
       Assume that the floating-point coprocessor supports
       double-precision operations.  This is the default.
  
! '-modd-spreg'
! '-mno-odd-spreg'
       Enable the use of odd-numbered single-precision floating-point
       registers for the o32 ABI. This is the default for processors that
       are known to support these registers.  When using the o32 FPXX ABI,
!      '-mno-odd-spreg' is set by default.
  
! '-mabs=2008'
! '-mabs=legacy'
       These options control the treatment of the special not-a-number
!      (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
       machine instructions.
  
!      By default or when '-mabs=legacy' is used the legacy treatment is
       selected.  In this case these instructions are considered
       arithmetic and avoided where correct operation is required and the
       input operand might be a NaN. A longer sequence of instructions
       that manipulate the sign bit of floating-point datum manually is
!      used instead unless the '-ffinite-math-only' option has also been
       specified.
  
!      The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
       this case these instructions are considered non-arithmetic and
       therefore operating correctly in all cases, including in particular
       where the input operand is a NaN. These instructions are therefore
       always used for the respective operations.
  
! '-mnan=2008'
! '-mnan=legacy'
       These options control the encoding of the special not-a-number
       (NaN) IEEE 754 floating-point data.
  
!      The '-mnan=legacy' option selects the legacy encoding.  In this
       case quiet NaNs (qNaNs) are denoted by the first bit of their
       trailing significand field being 0, whereas signaling NaNs (sNaNs)
       are denoted by the first bit of their trailing significand field
       being 1.
  
!      The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
       this case qNaNs are denoted by the first bit of their trailing
       significand field being 1, whereas sNaNs are denoted by the first
       bit of their trailing significand field being 0.
  
!      The default is '-mnan=legacy' unless GCC has been configured with
!      '--with-nan=2008'.
  
! '-mllsc'
! '-mno-llsc'
!      Use (do not use) 'll', 'sc', and 'sync' instructions to implement
       atomic memory built-in functions.  When neither option is
       specified, GCC uses the instructions if the target architecture
       supports them.
  
!      '-mllsc' is useful if the runtime environment can emulate the
!      instructions and '-mno-llsc' can be useful when compiling for
       nonstandard ISAs.  You can make either option the default by
!      configuring GCC with '--with-llsc' and '--without-llsc'
!      respectively.  '--with-llsc' is the default for some
       configurations; see the installation documentation for details.
  
! '-mdsp'
! '-mno-dsp'
       Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
       Built-in Functions::.  This option defines the preprocessor macro
!      '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
  
! '-mdspr2'
! '-mno-dspr2'
       Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
       Built-in Functions::.  This option defines the preprocessor macros
!      '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
       to 2.
  
! '-msmartmips'
! '-mno-smartmips'
       Use (do not use) the MIPS SmartMIPS ASE.
  
! '-mpaired-single'
! '-mno-paired-single'
       Use (do not use) paired-single floating-point instructions.  *Note
       MIPS Paired-Single Support::.  This option requires hardware
       floating-point support to be enabled.
  
! '-mdmx'
! '-mno-mdmx'
       Use (do not use) MIPS Digital Media Extension instructions.  This
       option can only be used when generating 64-bit code and requires
       hardware floating-point support to be enabled.
  
! '-mips3d'
! '-mno-mips3d'
       Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
!      Functions::.  The option '-mips3d' implies '-mpaired-single'.
  
! '-mmicromips'
! '-mno-micromips'
       Generate (do not generate) microMIPS code.
  
       MicroMIPS code generation can also be controlled on a per-function
!      basis by means of 'micromips' and 'nomicromips' attributes.  *Note
       Function Attributes::, for more information.
  
! '-mmt'
! '-mno-mt'
       Use (do not use) MT Multithreading instructions.
  
! '-mmcu'
! '-mno-mcu'
       Use (do not use) the MIPS MCU ASE instructions.
  
! '-meva'
! '-mno-eva'
       Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
  
! '-mvirt'
! '-mno-virt'
       Use (do not use) the MIPS Virtualization (VZ) instructions.
  
! '-mxpa'
! '-mno-xpa'
       Use (do not use) the MIPS eXtended Physical Address (XPA)
       instructions.
  
! '-mcrc'
! '-mno-crc'
       Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
       instructions.
  
! '-mginv'
! '-mno-ginv'
       Use (do not use) the MIPS Global INValidate (GINV) instructions.
  
! '-mloongson-mmi'
! '-mno-loongson-mmi'
       Use (do not use) the MIPS Loongson MultiMedia extensions
       Instructions (MMI).
  
! '-mloongson-ext'
! '-mno-loongson-ext'
       Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
  
! '-mloongson-ext2'
! '-mno-loongson-ext2'
       Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
       instructions.
  
! '-mlong64'
!      Force 'long' types to be 64 bits wide.  See '-mlong32' for an
       explanation of the default and the way that the pointer size is
       determined.
  
! '-mlong32'
!      Force 'long', 'int', and pointer types to be 32 bits wide.
  
!      The default size of 'int's, 'long's and pointers depends on the
!      ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
!      64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
!      'long's.  Pointers are the same size as 'long's, or the same size
       as integer registers, whichever is smaller.
  
! '-msym32'
! '-mno-sym32'
       Assume (do not assume) that all symbols have 32-bit values,
       regardless of the selected ABI.  This option is useful in
!      combination with '-mabi=64' and '-mno-abicalls' because it allows
       GCC to generate shorter and faster references to symbolic
       addresses.
  
! '-G NUM'
       Put definitions of externally-visible data in a small data section
       if that data is no bigger than NUM bytes.  GCC can then generate
!      more efficient accesses to the data; see '-mgpopt' for details.
  
!      The default '-G' option depends on the configuration.
  
! '-mlocal-sdata'
! '-mno-local-sdata'
!      Extend (do not extend) the '-G' behavior to local data too, such as
!      to static variables in C.  '-mlocal-sdata' is the default for all
       configurations.
  
       If the linker complains that an application is using too much small
       data, you might want to try rebuilding the less
!      performance-critical parts with '-mno-local-sdata'.  You might also
!      want to build large libraries with '-mno-local-sdata', so that the
       libraries leave more room for the main program.
  
! '-mextern-sdata'
! '-mno-extern-sdata'
       Assume (do not assume) that externally-defined data is in a small
!      data section if the size of that data is within the '-G' limit.
!      '-mextern-sdata' is the default for all configurations.
  
!      If you compile a module MOD with '-mextern-sdata' '-G NUM'
!      '-mgpopt', and MOD references a variable VAR that is no bigger than
       NUM bytes, you must make sure that VAR is placed in a small data
       section.  If VAR is defined by another module, you must either
!      compile that module with a high-enough '-G' setting or attach a
!      'section' attribute to VAR's definition.  If VAR is common, you
!      must link the application with a high-enough '-G' setting.
  
       The easiest way of satisfying these restrictions is to compile and
!      link every module with the same '-G' option.  However, you may wish
       to build a library that supports several different small data
       limits.  You can do this by compiling the library with the highest
!      supported '-G' setting and additionally using '-mno-extern-sdata'
       to stop the library from making assumptions about
       externally-defined data.
  
! '-mgpopt'
! '-mno-gpopt'
       Use (do not use) GP-relative accesses for symbols that are known to
!      be in a small data section; see '-G', '-mlocal-sdata' and
!      '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
  
!      '-mno-gpopt' is useful for cases where the '$gp' register might not
!      hold the value of '_gp'.  For example, if the code is part of a
       library that might be used in a boot monitor, programs that call
!      boot monitor routines pass an unknown value in '$gp'.  (In such
       situations, the boot monitor itself is usually compiled with
!      '-G0'.)
  
!      '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
  
! '-membedded-data'
! '-mno-embedded-data'
       Allocate variables to the read-only data section first if possible,
       then next in the small data section if possible, otherwise in data.
       This gives slightly slower code than the default, but reduces the
       amount of RAM required when executing, and thus may be preferred
       for some embedded systems.
  
! '-muninit-const-in-rodata'
! '-mno-uninit-const-in-rodata'
!      Put uninitialized 'const' variables in the read-only data section.
       This option is only meaningful in conjunction with
!      '-membedded-data'.
  
! '-mcode-readable=SETTING'
       Specify whether GCC may generate code that reads from executable
       sections.  There are three possible settings:
  
!      '-mcode-readable=yes'
            Instructions may freely access executable sections.  This is
            the default setting.
  
!      '-mcode-readable=pcrel'
            MIPS16 PC-relative load instructions can access executable
            sections, but other instructions must not do so.  This option
            is useful on 4KSc and 4KSd processors when the code TLBs have
--- 26234,26538 ----
  
            relocation truncated to fit: R_MIPS_GOT16 foobar
  
!      If this happens, you should recompile your code with ‘-mxgot’.
       This works with very large GOTs, although the code is also less
       efficient, since it takes three instructions to fetch the value of
       a global symbol.
  
       Note that some linkers can create multiple GOTs.  If you have such
!      a linker, you should only need to use ‘-mxgot’ when a single object
       file accesses more than 64k's worth of GOT entries.  Very few do.
  
       These options have no effect unless GCC is generating position
       independent code.
  
! ‘-mgp32’
       Assume that general-purpose registers are 32 bits wide.
  
! ‘-mgp64’
       Assume that general-purpose registers are 64 bits wide.
  
! ‘-mfp32’
       Assume that floating-point registers are 32 bits wide.
  
! ‘-mfp64’
       Assume that floating-point registers are 64 bits wide.
  
! ‘-mfpxx’
       Do not assume the width of floating-point registers.
  
! ‘-mhard-float’
       Use floating-point coprocessor instructions.
  
! ‘-msoft-float’
       Do not use floating-point coprocessor instructions.  Implement
       floating-point calculations using library calls instead.
  
! ‘-mno-float’
!      Equivalent to ‘-msoft-float’, but additionally asserts that the
       program being compiled does not perform any floating-point
       operations.  This option is presently supported only by some
       bare-metal MIPS configurations, where it may select a special set
       of libraries that lack all floating-point support (including, for
!      example, the floating-point ‘printf’ formats).  If code compiled
!      with ‘-mno-float’ accidentally contains floating-point operations,
       it is likely to suffer a link-time or run-time failure.
  
! ‘-msingle-float’
       Assume that the floating-point coprocessor only supports
       single-precision operations.
  
! ‘-mdouble-float’
       Assume that the floating-point coprocessor supports
       double-precision operations.  This is the default.
  
! ‘-modd-spreg’
! ‘-mno-odd-spreg’
       Enable the use of odd-numbered single-precision floating-point
       registers for the o32 ABI. This is the default for processors that
       are known to support these registers.  When using the o32 FPXX ABI,
!      ‘-mno-odd-spreg’ is set by default.
  
! ‘-mabs=2008’
! ‘-mabs=legacy’
       These options control the treatment of the special not-a-number
!      (NaN) IEEE 754 floating-point data with the ‘abs.fmt’ and ‘neg.fmt’
       machine instructions.
  
!      By default or when ‘-mabs=legacy’ is used the legacy treatment is
       selected.  In this case these instructions are considered
       arithmetic and avoided where correct operation is required and the
       input operand might be a NaN. A longer sequence of instructions
       that manipulate the sign bit of floating-point datum manually is
!      used instead unless the ‘-ffinite-math-only’ option has also been
       specified.
  
!      The ‘-mabs=2008’ option selects the IEEE 754-2008 treatment.  In
       this case these instructions are considered non-arithmetic and
       therefore operating correctly in all cases, including in particular
       where the input operand is a NaN. These instructions are therefore
       always used for the respective operations.
  
! ‘-mnan=2008’
! ‘-mnan=legacy’
       These options control the encoding of the special not-a-number
       (NaN) IEEE 754 floating-point data.
  
!      The ‘-mnan=legacy’ option selects the legacy encoding.  In this
       case quiet NaNs (qNaNs) are denoted by the first bit of their
       trailing significand field being 0, whereas signaling NaNs (sNaNs)
       are denoted by the first bit of their trailing significand field
       being 1.
  
!      The ‘-mnan=2008’ option selects the IEEE 754-2008 encoding.  In
       this case qNaNs are denoted by the first bit of their trailing
       significand field being 1, whereas sNaNs are denoted by the first
       bit of their trailing significand field being 0.
  
!      The default is ‘-mnan=legacy’ unless GCC has been configured with
!      ‘--with-nan=2008’.
  
! ‘-mllsc’
! ‘-mno-llsc’
!      Use (do not use) ‘ll’, ‘sc’, and ‘sync’ instructions to implement
       atomic memory built-in functions.  When neither option is
       specified, GCC uses the instructions if the target architecture
       supports them.
  
!      ‘-mllsc’ is useful if the runtime environment can emulate the
!      instructions and ‘-mno-llsc’ can be useful when compiling for
       nonstandard ISAs.  You can make either option the default by
!      configuring GCC with ‘--with-llsc’ and ‘--without-llsc’
!      respectively.  ‘--with-llsc’ is the default for some
       configurations; see the installation documentation for details.
  
! ‘-mdsp’
! ‘-mno-dsp’
       Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
       Built-in Functions::.  This option defines the preprocessor macro
!      ‘__mips_dsp’.  It also defines ‘__mips_dsp_rev’ to 1.
  
! ‘-mdspr2’
! ‘-mno-dspr2’
       Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
       Built-in Functions::.  This option defines the preprocessor macros
!      ‘__mips_dsp’ and ‘__mips_dspr2’.  It also defines ‘__mips_dsp_rev’
       to 2.
  
! ‘-msmartmips’
! ‘-mno-smartmips’
       Use (do not use) the MIPS SmartMIPS ASE.
  
! ‘-mpaired-single’
! ‘-mno-paired-single’
       Use (do not use) paired-single floating-point instructions.  *Note
       MIPS Paired-Single Support::.  This option requires hardware
       floating-point support to be enabled.
  
! ‘-mdmx’
! ‘-mno-mdmx’
       Use (do not use) MIPS Digital Media Extension instructions.  This
       option can only be used when generating 64-bit code and requires
       hardware floating-point support to be enabled.
  
! ‘-mips3d’
! ‘-mno-mips3d’
       Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
!      Functions::.  The option ‘-mips3d’ implies ‘-mpaired-single’.
  
! ‘-mmicromips’
! ‘-mno-micromips’
       Generate (do not generate) microMIPS code.
  
       MicroMIPS code generation can also be controlled on a per-function
!      basis by means of ‘micromips’ and ‘nomicromips’ attributes.  *Note
       Function Attributes::, for more information.
  
! ‘-mmt’
! ‘-mno-mt’
       Use (do not use) MT Multithreading instructions.
  
! ‘-mmcu’
! ‘-mno-mcu’
       Use (do not use) the MIPS MCU ASE instructions.
  
! ‘-meva’
! ‘-mno-eva’
       Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
  
! ‘-mvirt’
! ‘-mno-virt’
       Use (do not use) the MIPS Virtualization (VZ) instructions.
  
! ‘-mxpa’
! ‘-mno-xpa’
       Use (do not use) the MIPS eXtended Physical Address (XPA)
       instructions.
  
! ‘-mcrc’
! ‘-mno-crc’
       Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
       instructions.
  
! ‘-mginv’
! ‘-mno-ginv’
       Use (do not use) the MIPS Global INValidate (GINV) instructions.
  
! ‘-mloongson-mmi’
! ‘-mno-loongson-mmi’
       Use (do not use) the MIPS Loongson MultiMedia extensions
       Instructions (MMI).
  
! ‘-mloongson-ext’
! ‘-mno-loongson-ext’
       Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
  
! ‘-mloongson-ext2’
! ‘-mno-loongson-ext2’
       Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
       instructions.
  
! ‘-mlong64’
!      Force ‘long’ types to be 64 bits wide.  See ‘-mlong32’ for an
       explanation of the default and the way that the pointer size is
       determined.
  
! ‘-mlong32’
!      Force ‘long’, ‘int’, and pointer types to be 32 bits wide.
  
!      The default size of ‘int’s, ‘long’s and pointers depends on the
!      ABI.  All the supported ABIs use 32-bit ‘int’s.  The n64 ABI uses
!      64-bit ‘long’s, as does the 64-bit EABI; the others use 32-bit
!      ‘long’s.  Pointers are the same size as ‘long’s, or the same size
       as integer registers, whichever is smaller.
  
! ‘-msym32’
! ‘-mno-sym32’
       Assume (do not assume) that all symbols have 32-bit values,
       regardless of the selected ABI.  This option is useful in
!      combination with ‘-mabi=64’ and ‘-mno-abicalls’ because it allows
       GCC to generate shorter and faster references to symbolic
       addresses.
  
! ‘-G NUM’
       Put definitions of externally-visible data in a small data section
       if that data is no bigger than NUM bytes.  GCC can then generate
!      more efficient accesses to the data; see ‘-mgpopt’ for details.
  
!      The default ‘-G’ option depends on the configuration.
  
! ‘-mlocal-sdata’
! ‘-mno-local-sdata’
!      Extend (do not extend) the ‘-G’ behavior to local data too, such as
!      to static variables in C.  ‘-mlocal-sdata’ is the default for all
       configurations.
  
       If the linker complains that an application is using too much small
       data, you might want to try rebuilding the less
!      performance-critical parts with ‘-mno-local-sdata’.  You might also
!      want to build large libraries with ‘-mno-local-sdata’, so that the
       libraries leave more room for the main program.
  
! ‘-mextern-sdata’
! ‘-mno-extern-sdata’
       Assume (do not assume) that externally-defined data is in a small
!      data section if the size of that data is within the ‘-G’ limit.
!      ‘-mextern-sdata’ is the default for all configurations.
  
!      If you compile a module MOD with ‘-mextern-sdata’ ‘-G NUM’
!      ‘-mgpopt’, and MOD references a variable VAR that is no bigger than
       NUM bytes, you must make sure that VAR is placed in a small data
       section.  If VAR is defined by another module, you must either
!      compile that module with a high-enough ‘-G’ setting or attach a
!      ‘section’ attribute to VAR's definition.  If VAR is common, you
!      must link the application with a high-enough ‘-G’ setting.
  
       The easiest way of satisfying these restrictions is to compile and
!      link every module with the same ‘-G’ option.  However, you may wish
       to build a library that supports several different small data
       limits.  You can do this by compiling the library with the highest
!      supported ‘-G’ setting and additionally using ‘-mno-extern-sdata’
       to stop the library from making assumptions about
       externally-defined data.
  
! ‘-mgpopt’
! ‘-mno-gpopt’
       Use (do not use) GP-relative accesses for symbols that are known to
!      be in a small data section; see ‘-G’, ‘-mlocal-sdata’ and
!      ‘-mextern-sdata’.  ‘-mgpopt’ is the default for all configurations.
  
!      ‘-mno-gpopt’ is useful for cases where the ‘$gp’ register might not
!      hold the value of ‘_gp’.  For example, if the code is part of a
       library that might be used in a boot monitor, programs that call
!      boot monitor routines pass an unknown value in ‘$gp’.  (In such
       situations, the boot monitor itself is usually compiled with
!      ‘-G0’.)
  
!      ‘-mno-gpopt’ implies ‘-mno-local-sdata’ and ‘-mno-extern-sdata’.
  
! ‘-membedded-data’
! ‘-mno-embedded-data’
       Allocate variables to the read-only data section first if possible,
       then next in the small data section if possible, otherwise in data.
       This gives slightly slower code than the default, but reduces the
       amount of RAM required when executing, and thus may be preferred
       for some embedded systems.
  
! ‘-muninit-const-in-rodata’
! ‘-mno-uninit-const-in-rodata’
!      Put uninitialized ‘const’ variables in the read-only data section.
       This option is only meaningful in conjunction with
!      ‘-membedded-data’.
  
! ‘-mcode-readable=SETTING’
       Specify whether GCC may generate code that reads from executable
       sections.  There are three possible settings:
  
!      ‘-mcode-readable=yes’
            Instructions may freely access executable sections.  This is
            the default setting.
  
!      ‘-mcode-readable=pcrel’
            MIPS16 PC-relative load instructions can access executable
            sections, but other instructions must not do so.  This option
            is useful on 4KSc and 4KSd processors when the code TLBs have
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26530,26630 ****
            interface and that, like the M4K, automatically redirect
            PC-relative loads to the instruction RAM.
  
!      '-mcode-readable=no'
            Instructions must not access executable sections.  This option
            can be useful on targets that are configured to have a dual
            instruction/data SRAM interface but that (unlike the M4K) do
            not automatically redirect PC-relative loads to the
            instruction RAM.
  
! '-msplit-addresses'
! '-mno-split-addresses'
!      Enable (disable) use of the '%hi()' and '%lo()' assembler
       relocation operators.  This option has been superseded by
!      '-mexplicit-relocs' but is retained for backwards compatibility.
  
! '-mexplicit-relocs=none'
! '-mexplicit-relocs=base'
! '-mexplicit-relocs=pcrel'
! '-mexplicit-relocs'
! '-mno-explicit-relocs'
       These options control whether explicit relocs (such as %gp_rel) are
       used.  The default value depends on the version of GAS when GCC
       itself was built.
  
!      The 'base' explicit-relocs support introdunced into GAS in 2001.
!      The 'pcrel' explicit-relocs support introdunced into GAS in 2014,
!      which supports '%pcrel_hi' and '%pcrel_lo'.
  
! '-mcheck-zero-division'
! '-mno-check-zero-division'
       Trap (do not trap) on integer division by zero.
  
!      The default is '-mcheck-zero-division'.
  
! '-mdivide-traps'
! '-mdivide-breaks'
       MIPS systems check for division by zero by generating either a
       conditional trap or a break instruction.  Using traps results in
       smaller code, but is only supported on MIPS II and later.  Also,
       some versions of the Linux kernel have a bug that prevents trap
!      from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
       to allow conditional traps on architectures that support them and
!      '-mdivide-breaks' to force the use of breaks.
  
!      The default is usually '-mdivide-traps', but this can be overridden
!      at configure time using '--with-divide=breaks'.  Divide-by-zero
!      checks can be completely disabled using '-mno-check-zero-division'.
  
! '-mload-store-pairs'
! '-mno-load-store-pairs'
       Enable (disable) an optimization that pairs consecutive load or
       store instructions to enable load/store bonding.  This option is
       enabled by default but only takes effect when the selected
       architecture is known to support bonding.
  
! '-mstrict-align'
! '-mno-strict-align'
! '-munaligned-access'
! '-mno-unaligned-access'
       Disable (enable) direct unaligned access for MIPS Release 6.
       MIPSr6 requires load/store unaligned-access support, by hardware or
!      trap&emulate.  So '-mstrict-align' may be needed by kernel.  The
!      options '-munaligned-access' and '-mno-unaligned-access' are
       obsoleted, and only for backward-compatible.
  
! '-mmemcpy'
! '-mno-memcpy'
!      Force (do not force) the use of 'memcpy' for non-trivial block
!      moves.  The default is '-mno-memcpy', which allows GCC to inline
       most constant-sized copies.
  
! '-mlong-calls'
! '-mno-long-calls'
!      Disable (do not disable) use of the 'jal' instruction.  Calling
!      functions using 'jal' is more efficient but requires the caller and
       callee to be in the same 256 megabyte segment.
  
       This option has no effect on abicalls code.  The default is
!      '-mno-long-calls'.
  
! '-mmad'
! '-mno-mad'
!      Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
       as provided by the R4650 ISA.
  
! '-mimadd'
! '-mno-imadd'
!      Enable (disable) use of the 'madd' and 'msub' integer instructions.
!      The default is '-mimadd' on architectures that support 'madd' and
!      'msub' except for the 74k architecture where it was found to
       generate slower code.
  
! '-mfused-madd'
! '-mno-fused-madd'
       Enable (disable) use of the floating-point multiply-accumulate
       instructions, when they are available.  The default is
!      '-mfused-madd'.
  
       On the R8000 CPU when multiply-accumulate instructions are used,
       the intermediate product is calculated to infinite precision and is
--- 26541,26641 ----
            interface and that, like the M4K, automatically redirect
            PC-relative loads to the instruction RAM.
  
!      ‘-mcode-readable=no’
            Instructions must not access executable sections.  This option
            can be useful on targets that are configured to have a dual
            instruction/data SRAM interface but that (unlike the M4K) do
            not automatically redirect PC-relative loads to the
            instruction RAM.
  
! ‘-msplit-addresses’
! ‘-mno-split-addresses’
!      Enable (disable) use of the ‘%hi()’ and ‘%lo()’ assembler
       relocation operators.  This option has been superseded by
!      ‘-mexplicit-relocs’ but is retained for backwards compatibility.
  
! ‘-mexplicit-relocs=none’
! ‘-mexplicit-relocs=base’
! ‘-mexplicit-relocs=pcrel’
! ‘-mexplicit-relocs’
! ‘-mno-explicit-relocs’
       These options control whether explicit relocs (such as %gp_rel) are
       used.  The default value depends on the version of GAS when GCC
       itself was built.
  
!      The ‘base’ explicit-relocs support introdunced into GAS in 2001.
!      The ‘pcrel’ explicit-relocs support introdunced into GAS in 2014,
!      which supports ‘%pcrel_hi’ and ‘%pcrel_lo’.
  
! ‘-mcheck-zero-division’
! ‘-mno-check-zero-division’
       Trap (do not trap) on integer division by zero.
  
!      The default is ‘-mcheck-zero-division’.
  
! ‘-mdivide-traps’
! ‘-mdivide-breaks’
       MIPS systems check for division by zero by generating either a
       conditional trap or a break instruction.  Using traps results in
       smaller code, but is only supported on MIPS II and later.  Also,
       some versions of the Linux kernel have a bug that prevents trap
!      from generating the proper signal (‘SIGFPE’).  Use ‘-mdivide-traps’
       to allow conditional traps on architectures that support them and
!      ‘-mdivide-breaks’ to force the use of breaks.
  
!      The default is usually ‘-mdivide-traps’, but this can be overridden
!      at configure time using ‘--with-divide=breaks’.  Divide-by-zero
!      checks can be completely disabled using ‘-mno-check-zero-division’.
  
! ‘-mload-store-pairs’
! ‘-mno-load-store-pairs’
       Enable (disable) an optimization that pairs consecutive load or
       store instructions to enable load/store bonding.  This option is
       enabled by default but only takes effect when the selected
       architecture is known to support bonding.
  
! ‘-mstrict-align’
! ‘-mno-strict-align’
! ‘-munaligned-access’
! ‘-mno-unaligned-access’
       Disable (enable) direct unaligned access for MIPS Release 6.
       MIPSr6 requires load/store unaligned-access support, by hardware or
!      trap&emulate.  So ‘-mstrict-align’ may be needed by kernel.  The
!      options ‘-munaligned-access’ and ‘-mno-unaligned-access’ are
       obsoleted, and only for backward-compatible.
  
! ‘-mmemcpy’
! ‘-mno-memcpy’
!      Force (do not force) the use of ‘memcpy’ for non-trivial block
!      moves.  The default is ‘-mno-memcpy’, which allows GCC to inline
       most constant-sized copies.
  
! ‘-mlong-calls’
! ‘-mno-long-calls’
!      Disable (do not disable) use of the ‘jal’ instruction.  Calling
!      functions using ‘jal’ is more efficient but requires the caller and
       callee to be in the same 256 megabyte segment.
  
       This option has no effect on abicalls code.  The default is
!      ‘-mno-long-calls’.
  
! ‘-mmad’
! ‘-mno-mad’
!      Enable (disable) use of the ‘mad’, ‘madu’ and ‘mul’ instructions,
       as provided by the R4650 ISA.
  
! ‘-mimadd’
! ‘-mno-imadd’
!      Enable (disable) use of the ‘madd’ and ‘msub’ integer instructions.
!      The default is ‘-mimadd’ on architectures that support ‘madd’ and
!      ‘msub’ except for the 74k architecture where it was found to
       generate slower code.
  
! ‘-mfused-madd’
! ‘-mno-fused-madd’
       Enable (disable) use of the floating-point multiply-accumulate
       instructions, when they are available.  The default is
!      ‘-mfused-madd’.
  
       On the R8000 CPU when multiply-accumulate instructions are used,
       the intermediate product is calculated to infinite precision and is
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26633,26717 ****
       numerically identical to the equivalent computation using separate
       multiply, add, subtract and negate instructions.
  
! '-nocpp'
       Tell the MIPS assembler to not run its preprocessor over user
!      assembler files (with a '.s' suffix) when assembling them.
  
! '-mfix-24k'
! '-mno-fix-24k'
       Work around the 24K E48 (lost data on stores during refill) errata.
       The workarounds are implemented by the assembler rather than by
       GCC.
  
! '-mfix-r4000'
! '-mno-fix-r4000'
       Work around certain R4000 CPU errata:
!         - A double-word or a variable shift may give an incorrect result
            if executed immediately after starting an integer division.
!         - A double-word or a variable shift may give an incorrect result
            if executed while an integer multiplication is in progress.
!         - An integer division may give an incorrect result if started in
            a delay slot of a taken branch or a jump.
  
! '-mfix-r4400'
! '-mno-fix-r4400'
       Work around certain R4400 CPU errata:
!         - A double-word or a variable shift may give an incorrect result
            if executed immediately after starting an integer division.
  
! '-mfix-r10000'
! '-mno-fix-r10000'
       Work around certain R10000 errata:
!         - 'll'/'sc' sequences may not behave atomically on revisions
            prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
  
       This option can only be used if the target architecture supports
!      branch-likely instructions.  '-mfix-r10000' is the default when
!      '-march=r10000' is used; '-mno-fix-r10000' is the default
       otherwise.
  
! '-mfix-r5900'
! '-mno-fix-r5900'
       Do not attempt to schedule the preceding instruction into the delay
       slot of a branch instruction placed at the end of a short loop of
!      six instructions or fewer and always schedule a 'nop' instruction
       there instead.  The short loop bug under certain conditions causes
       loops to execute only once or twice, due to a hardware bug in the
       R5900 chip.  The workaround is implemented by the assembler rather
       than by GCC.
  
! '-mfix-rm7000'
! '-mno-fix-rm7000'
!      Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
       are implemented by the assembler rather than by GCC.
  
! '-mfix-vr4120'
! '-mno-fix-vr4120'
       Work around certain VR4120 errata:
!         - 'dmultu' does not always produce the correct result.
!         - 'div' and 'ddiv' do not always produce the correct result if
            one of the operands is negative.
       The workarounds for the division errata rely on special functions
!      in 'libgcc.a'.  At present, these functions are only provided by
!      the 'mips64vr*-elf' configurations.
  
       Other VR4120 errata require a NOP to be inserted between certain
       pairs of instructions.  These errata are handled by the assembler,
       not by GCC itself.
  
! '-mfix-vr4130'
!      Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
       implemented by the assembler rather than by GCC, although GCC
!      avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
!      'dmacc' and 'dmacchi' instructions are available instead.
  
! '-mfix-sb1'
! '-mno-fix-sb1'
       Work around certain SB-1 CPU core errata.  (This flag currently
       works around the SB-1 revision 2 "F1" and "F2" floating-point
       errata.)
  
! '-mr10k-cache-barrier=SETTING'
       Specify whether GCC should insert cache barriers to avoid the side
       effects of speculation on R10K processors.
  
--- 26644,26728 ----
       numerically identical to the equivalent computation using separate
       multiply, add, subtract and negate instructions.
  
! ‘-nocpp’
       Tell the MIPS assembler to not run its preprocessor over user
!      assembler files (with a ‘.s’ suffix) when assembling them.
  
! ‘-mfix-24k’
! ‘-mno-fix-24k’
       Work around the 24K E48 (lost data on stores during refill) errata.
       The workarounds are implemented by the assembler rather than by
       GCC.
  
! ‘-mfix-r4000’
! ‘-mno-fix-r4000’
       Work around certain R4000 CPU errata:
!         − A double-word or a variable shift may give an incorrect result
            if executed immediately after starting an integer division.
!         − A double-word or a variable shift may give an incorrect result
            if executed while an integer multiplication is in progress.
!         − An integer division may give an incorrect result if started in
            a delay slot of a taken branch or a jump.
  
! ‘-mfix-r4400’
! ‘-mno-fix-r4400’
       Work around certain R4400 CPU errata:
!         − A double-word or a variable shift may give an incorrect result
            if executed immediately after starting an integer division.
  
! ‘-mfix-r10000’
! ‘-mno-fix-r10000’
       Work around certain R10000 errata:
!         − ‘ll’/‘sc’ sequences may not behave atomically on revisions
            prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
  
       This option can only be used if the target architecture supports
!      branch-likely instructions.  ‘-mfix-r10000’ is the default when
!      ‘-march=r10000’ is used; ‘-mno-fix-r10000’ is the default
       otherwise.
  
! ‘-mfix-r5900’
! ‘-mno-fix-r5900’
       Do not attempt to schedule the preceding instruction into the delay
       slot of a branch instruction placed at the end of a short loop of
!      six instructions or fewer and always schedule a ‘nop’ instruction
       there instead.  The short loop bug under certain conditions causes
       loops to execute only once or twice, due to a hardware bug in the
       R5900 chip.  The workaround is implemented by the assembler rather
       than by GCC.
  
! ‘-mfix-rm7000’
! ‘-mno-fix-rm7000’
!      Work around the RM7000 ‘dmult’/‘dmultu’ errata.  The workarounds
       are implemented by the assembler rather than by GCC.
  
! ‘-mfix-vr4120’
! ‘-mno-fix-vr4120’
       Work around certain VR4120 errata:
!         − ‘dmultu’ does not always produce the correct result.
!         − ‘div’ and ‘ddiv’ do not always produce the correct result if
            one of the operands is negative.
       The workarounds for the division errata rely on special functions
!      in ‘libgcc.a’.  At present, these functions are only provided by
!      the ‘mips64vr*-elf’ configurations.
  
       Other VR4120 errata require a NOP to be inserted between certain
       pairs of instructions.  These errata are handled by the assembler,
       not by GCC itself.
  
! ‘-mfix-vr4130’
!      Work around the VR4130 ‘mflo’/‘mfhi’ errata.  The workarounds are
       implemented by the assembler rather than by GCC, although GCC
!      avoids using ‘mflo’ and ‘mfhi’ if the VR4130 ‘macc’, ‘macchi’,
!      ‘dmacc’ and ‘dmacchi’ instructions are available instead.
  
! ‘-mfix-sb1’
! ‘-mno-fix-sb1’
       Work around certain SB-1 CPU core errata.  (This flag currently
       works around the SB-1 revision 2 "F1" and "F2" floating-point
       errata.)
  
! ‘-mr10k-cache-barrier=SETTING’
       Specify whether GCC should insert cache barriers to avoid the side
       effects of speculation on R10K processors.
  
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26732,26738 ****
  
       One workaround is to insert cache barrier instructions before every
       memory access that might be speculatively executed and that might
!      have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
       controls GCC's implementation of this workaround.  It assumes that
       aborted accesses to any byte in the following regions does not have
       side effects:
--- 26743,26749 ----
  
       One workaround is to insert cache barrier instructions before every
       memory access that might be speculatively executed and that might
!      have side effects even if aborted.  ‘-mr10k-cache-barrier=SETTING’
       controls GCC's implementation of this workaround.  It assumes that
       aborted accesses to any byte in the following regions does not have
       side effects:
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26751,26795 ****
  
            void foo (void);
  
!      then the implementation of 'foo' must allow 'j foo' and 'jal foo'
       to be executed speculatively.  GCC honors this restriction for
       functions it compiles itself.  It expects non-GCC functions (such
       as hand-written assembly code) to do the same.
  
       The option has three forms:
  
!      '-mr10k-cache-barrier=load-store'
            Insert a cache barrier before a load or store that might be
            speculatively executed and that might have side effects even
            if aborted.
  
!      '-mr10k-cache-barrier=store'
            Insert a cache barrier before a store that might be
            speculatively executed and that might have side effects even
            if aborted.
  
!      '-mr10k-cache-barrier=none'
            Disable the insertion of cache barriers.  This is the default
            setting.
  
! '-mflush-func=FUNC'
! '-mno-flush-func'
       Specifies the function to call to flush the I and D caches, or to
       not call any such function.  If called, the function must take the
!      same arguments as the common '_flush_func', that is, the address of
       the memory range for which the cache is being flushed, the size of
       the memory range, and the number 3 (to flush both caches).  The
       default depends on the target GCC was configured for, but commonly
!      is either '_flush_func' or '__cpu_flush'.
  
! '-mbranch-cost=NUM'
       Set the cost of branches to roughly NUM "simple" instructions.
       This cost is only a heuristic and is not guaranteed to produce
       consistent results across releases.  A zero cost redundantly
!      selects the default, which is based on the '-mtune' setting.
  
! '-mbranch-likely'
! '-mno-branch-likely'
       Enable or disable use of Branch Likely instructions, regardless of
       the default for the selected architecture.  By default, Branch
       Likely instructions may be generated if they are supported by the
--- 26762,26806 ----
  
            void foo (void);
  
!      then the implementation of ‘foo’ must allow ‘j foo’ and ‘jal foo’
       to be executed speculatively.  GCC honors this restriction for
       functions it compiles itself.  It expects non-GCC functions (such
       as hand-written assembly code) to do the same.
  
       The option has three forms:
  
!      ‘-mr10k-cache-barrier=load-store’
            Insert a cache barrier before a load or store that might be
            speculatively executed and that might have side effects even
            if aborted.
  
!      ‘-mr10k-cache-barrier=store’
            Insert a cache barrier before a store that might be
            speculatively executed and that might have side effects even
            if aborted.
  
!      ‘-mr10k-cache-barrier=none’
            Disable the insertion of cache barriers.  This is the default
            setting.
  
! ‘-mflush-func=FUNC’
! ‘-mno-flush-func’
       Specifies the function to call to flush the I and D caches, or to
       not call any such function.  If called, the function must take the
!      same arguments as the common ‘_flush_func’, that is, the address of
       the memory range for which the cache is being flushed, the size of
       the memory range, and the number 3 (to flush both caches).  The
       default depends on the target GCC was configured for, but commonly
!      is either ‘_flush_func’ or ‘__cpu_flush’.
  
! ‘-mbranch-cost=NUM’
       Set the cost of branches to roughly NUM "simple" instructions.
       This cost is only a heuristic and is not guaranteed to produce
       consistent results across releases.  A zero cost redundantly
!      selects the default, which is based on the ‘-mtune’ setting.
  
! ‘-mbranch-likely’
! ‘-mno-branch-likely’
       Enable or disable use of Branch Likely instructions, regardless of
       the default for the selected architecture.  By default, Branch
       Likely instructions may be generated if they are supported by the
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26799,26814 ****
       default because the MIPS32 and MIPS64 architectures specifically
       deprecate their use.
  
! '-mcompact-branches=never'
! '-mcompact-branches=optimal'
! '-mcompact-branches=always'
       These options control which form of branches will be generated.
!      The default is '-mcompact-branches=optimal'.
  
!      The '-mcompact-branches=never' option ensures that compact branch
       instructions will never be generated.
  
!      The '-mcompact-branches=always' option ensures that a compact
       branch instruction will be generated if available for MIPS Release
       6 onwards.  If a compact branch instruction is not available (or
       pre-R6), a delay slot form of the branch will be used instead.
--- 26810,26825 ----
       default because the MIPS32 and MIPS64 architectures specifically
       deprecate their use.
  
! ‘-mcompact-branches=never’
! ‘-mcompact-branches=optimal’
! ‘-mcompact-branches=always’
       These options control which form of branches will be generated.
!      The default is ‘-mcompact-branches=optimal’.
  
!      The ‘-mcompact-branches=never’ option ensures that compact branch
       instructions will never be generated.
  
!      The ‘-mcompact-branches=always’ option ensures that a compact
       branch instruction will be generated if available for MIPS Release
       6 onwards.  If a compact branch instruction is not available (or
       pre-R6), a delay slot form of the branch will be used instead.
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26817,26829 ****
       now.  The behaviour for MIPS16/microMIPS may change in future,
       since they do have some compact branch instructions.
  
!      The '-mcompact-branches=optimal' option will cause a delay slot
       branch to be used if one is available in the current ISA and the
       delay slot is successfully filled.  If the delay slot is not
       filled, a compact branch will be chosen if one is available.
  
! '-mfp-exceptions'
! '-mno-fp-exceptions'
       Specifies whether FP exceptions are enabled.  This affects how FP
       instructions are scheduled for some processors.  The default is
       that FP exceptions are enabled.
--- 26828,26840 ----
       now.  The behaviour for MIPS16/microMIPS may change in future,
       since they do have some compact branch instructions.
  
!      The ‘-mcompact-branches=optimal’ option will cause a delay slot
       branch to be used if one is available in the current ISA and the
       delay slot is successfully filled.  If the delay slot is not
       filled, a compact branch will be chosen if one is available.
  
! ‘-mfp-exceptions’
! ‘-mno-fp-exceptions’
       Specifies whether FP exceptions are enabled.  This affects how FP
       instructions are scheduled for some processors.  The default is
       that FP exceptions are enabled.
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26832,26839 ****
       are emitting 64-bit code, then we can use both FP pipes.
       Otherwise, we can only use one FP pipe.
  
! '-mvr4130-align'
! '-mno-vr4130-align'
       The VR4130 pipeline is two-way superscalar, but can only issue two
       instructions together if the first one is 8-byte aligned.  When
       this option is enabled, GCC aligns pairs of instructions that it
--- 26843,26850 ----
       are emitting 64-bit code, then we can use both FP pipes.
       Otherwise, we can only use one FP pipe.
  
! ‘-mvr4130-align’
! ‘-mno-vr4130-align’
       The VR4130 pipeline is two-way superscalar, but can only issue two
       instructions together if the first one is 8-byte aligned.  When
       this option is enabled, GCC aligns pairs of instructions that it
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26841,26890 ****
  
       This option only has an effect when optimizing for the VR4130.  It
       normally makes code faster, but at the expense of making it bigger.
!      It is enabled by default at optimization level '-O3'.
  
! '-msynci'
! '-mno-synci'
!      Enable (disable) generation of 'synci' instructions on
!      architectures that support it.  The 'synci' instructions (if
!      enabled) are generated when '__builtin___clear_cache' is compiled.
  
!      This option defaults to '-mno-synci', but the default can be
!      overridden by configuring GCC with '--with-synci'.
  
       When compiling code for single processor systems, it is generally
!      safe to use 'synci'.  However, on many multi-core (SMP) systems, it
       does not invalidate the instruction caches on all cores and may
       lead to undefined behavior.
  
! '-mrelax-pic-calls'
! '-mno-relax-pic-calls'
       Try to turn PIC calls that are normally dispatched via register
!      '$25' into direct calls.  This is only possible if the linker can
       resolve the destination at link time and if the destination is
       within range for a direct call.
  
!      '-mrelax-pic-calls' is the default if GCC was configured to use an
!      assembler and a linker that support the '.reloc' assembly directive
!      and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
       this optimization can be performed by the assembler and the linker
       alone without help from the compiler.
  
! '-mmcount-ra-address'
! '-mno-mcount-ra-address'
!      Emit (do not emit) code that allows '_mcount' to modify the calling
       function's return address.  When enabled, this option extends the
!      usual '_mcount' interface with a new RA-ADDRESS parameter, which
!      has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
       can then modify the return address by doing both of the following:
!         * Returning the new address in register '$31'.
!         * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
            nonnull.
  
!      The default is '-mno-mcount-ra-address'.
  
! '-mframe-header-opt'
! '-mno-frame-header-opt'
       Enable (disable) frame header optimization in the o32 ABI. When
       using the o32 ABI, calling functions will allocate 16 bytes on the
       stack for the called function to write out register arguments.
--- 26852,26901 ----
  
       This option only has an effect when optimizing for the VR4130.  It
       normally makes code faster, but at the expense of making it bigger.
!      It is enabled by default at optimization level ‘-O3’.
  
! ‘-msynci’
! ‘-mno-synci’
!      Enable (disable) generation of ‘synci’ instructions on
!      architectures that support it.  The ‘synci’ instructions (if
!      enabled) are generated when ‘__builtin___clear_cache’ is compiled.
  
!      This option defaults to ‘-mno-synci’, but the default can be
!      overridden by configuring GCC with ‘--with-synci’.
  
       When compiling code for single processor systems, it is generally
!      safe to use ‘synci’.  However, on many multi-core (SMP) systems, it
       does not invalidate the instruction caches on all cores and may
       lead to undefined behavior.
  
! ‘-mrelax-pic-calls’
! ‘-mno-relax-pic-calls’
       Try to turn PIC calls that are normally dispatched via register
!      ‘$25’ into direct calls.  This is only possible if the linker can
       resolve the destination at link time and if the destination is
       within range for a direct call.
  
!      ‘-mrelax-pic-calls’ is the default if GCC was configured to use an
!      assembler and a linker that support the ‘.reloc’ assembly directive
!      and ‘-mexplicit-relocs’ is in effect.  With ‘-mno-explicit-relocs’,
       this optimization can be performed by the assembler and the linker
       alone without help from the compiler.
  
! ‘-mmcount-ra-address’
! ‘-mno-mcount-ra-address’
!      Emit (do not emit) code that allows ‘_mcount’ to modify the calling
       function's return address.  When enabled, this option extends the
!      usual ‘_mcount’ interface with a new RA-ADDRESS parameter, which
!      has type ‘intptr_t *’ and is passed in register ‘$12’.  ‘_mcount’
       can then modify the return address by doing both of the following:
!         • Returning the new address in register ‘$31’.
!         • Storing the new address in ‘*RA-ADDRESS’, if RA-ADDRESS is
            nonnull.
  
!      The default is ‘-mno-mcount-ra-address’.
  
! ‘-mframe-header-opt’
! ‘-mno-frame-header-opt’
       Enable (disable) frame header optimization in the o32 ABI. When
       using the o32 ABI, calling functions will allocate 16 bytes on the
       stack for the called function to write out register arguments.
*************** File: gcc.info,  Node: MIPS Options,  Ne
*** 26893,26907 ****
  
       This optimization is off by default at all optimization levels.
  
! '-mlxc1-sxc1'
! '-mno-lxc1-sxc1'
!      When applicable, enable (disable) the generation of 'lwxc1',
!      'swxc1', 'ldxc1', 'sdxc1' instructions.  Enabled by default.
  
! '-mmadd4'
! '-mno-madd4'
       When applicable, enable (disable) the generation of 4-operand
!      'madd.s', 'madd.d' and related instructions.  Enabled by default.
  
  
  File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
--- 26904,26918 ----
  
       This optimization is off by default at all optimization levels.
  
! ‘-mlxc1-sxc1’
! ‘-mno-lxc1-sxc1’
!      When applicable, enable (disable) the generation of ‘lwxc1’,
!      ‘swxc1’, ‘ldxc1’, ‘sdxc1’ instructions.  Enabled by default.
  
! ‘-mmadd4’
! ‘-mno-madd4’
       When applicable, enable (disable) the generation of 4-operand
!      ‘madd.s’, ‘madd.d’ and related instructions.  Enabled by default.
  
  
  File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
*************** File: gcc.info,  Node: MMIX Options,  Ne
*** 26911,26961 ****
  
  These options are defined for the MMIX:
  
! '-mlibfuncs'
! '-mno-libfuncs'
       Specify that intrinsic library functions are being compiled,
       passing all values in registers, no matter the size.
  
! '-mepsilon'
! '-mno-epsilon'
       Generate floating-point comparison instructions that compare with
!      respect to the 'rE' epsilon register.
  
! '-mabi=mmixware'
! '-mabi=gnu'
       Generate code that passes function parameters and return values
!      that (in the called function) are seen as registers '$0' and up, as
!      opposed to the GNU ABI which uses global registers '$231' and up.
  
! '-mzero-extend'
! '-mno-zero-extend'
       When reading data from memory in sizes shorter than 64 bits, use
       (do not use) zero-extending load instructions by default, rather
       than sign-extending ones.
  
! '-mknuthdiv'
! '-mno-knuthdiv'
       Make the result of a division yielding a remainder have the same
!      sign as the divisor.  With the default, '-mno-knuthdiv', the sign
       of the remainder follows the sign of the dividend.  Both methods
       are arithmetically valid, the latter being almost exclusively used.
  
! '-mtoplevel-symbols'
! '-mno-toplevel-symbols'
!      Prepend (do not prepend) a ':' to all global symbols, so the
!      assembly code can be used with the 'PREFIX' assembly directive.
  
! '-melf'
       Generate an executable in the ELF format, rather than the default
!      'mmo' format used by the 'mmix' simulator.
  
! '-mbranch-predict'
! '-mno-branch-predict'
       Use (do not use) the probable-branch instructions, when static
       branch prediction indicates a probable branch.
  
! '-mbase-addresses'
! '-mno-base-addresses'
       Generate (do not generate) code that uses _base addresses_.  Using
       a base address automatically generates a request (handled by the
       assembler and the linker) for a constant to be set up in a global
--- 26922,26972 ----
  
  These options are defined for the MMIX:
  
! ‘-mlibfuncs’
! ‘-mno-libfuncs’
       Specify that intrinsic library functions are being compiled,
       passing all values in registers, no matter the size.
  
! ‘-mepsilon’
! ‘-mno-epsilon’
       Generate floating-point comparison instructions that compare with
!      respect to the ‘rE’ epsilon register.
  
! ‘-mabi=mmixware’
! ‘-mabi=gnu’
       Generate code that passes function parameters and return values
!      that (in the called function) are seen as registers ‘$0’ and up, as
!      opposed to the GNU ABI which uses global registers ‘$231’ and up.
  
! ‘-mzero-extend’
! ‘-mno-zero-extend’
       When reading data from memory in sizes shorter than 64 bits, use
       (do not use) zero-extending load instructions by default, rather
       than sign-extending ones.
  
! ‘-mknuthdiv’
! ‘-mno-knuthdiv’
       Make the result of a division yielding a remainder have the same
!      sign as the divisor.  With the default, ‘-mno-knuthdiv’, the sign
       of the remainder follows the sign of the dividend.  Both methods
       are arithmetically valid, the latter being almost exclusively used.
  
! ‘-mtoplevel-symbols’
! ‘-mno-toplevel-symbols’
!      Prepend (do not prepend) a ‘:’ to all global symbols, so the
!      assembly code can be used with the ‘PREFIX’ assembly directive.
  
! ‘-melf’
       Generate an executable in the ELF format, rather than the default
!      ‘mmo’ format used by the ‘mmix’ simulator.
  
! ‘-mbranch-predict’
! ‘-mno-branch-predict’
       Use (do not use) the probable-branch instructions, when static
       branch prediction indicates a probable branch.
  
! ‘-mbase-addresses’
! ‘-mno-base-addresses’
       Generate (do not generate) code that uses _base addresses_.  Using
       a base address automatically generates a request (handled by the
       assembler and the linker) for a constant to be set up in a global
*************** These options are defined for the MMIX:
*** 26964,26973 ****
       register.  The generally leads to short and fast code, but the
       number of different data items that can be addressed is limited.
       This means that a program that uses lots of static data may require
!      '-mno-base-addresses'.
  
! '-msingle-exit'
! '-mno-single-exit'
       Force (do not force) generated code to have a single exit point in
       each function.
  
--- 26975,26984 ----
       register.  The generally leads to short and fast code, but the
       number of different data items that can be addressed is limited.
       This means that a program that uses lots of static data may require
!      ‘-mno-base-addresses’.
  
! ‘-msingle-exit’
! ‘-mno-single-exit’
       Force (do not force) generated code to have a single exit point in
       each function.
  
*************** File: gcc.info,  Node: MN10300 Options,
*** 26977,27022 ****
  3.19.30 MN10300 Options
  -----------------------
  
! These '-m' options are defined for Matsushita MN10300 architectures:
  
! '-mmult-bug'
       Generate code to avoid bugs in the multiply instructions for the
       MN10300 processors.  This is the default.
  
! '-mno-mult-bug'
       Do not generate code to avoid bugs in the multiply instructions for
       the MN10300 processors.
  
! '-mam33'
       Generate code using features specific to the AM33 processor.
  
! '-mno-am33'
       Do not generate code using features specific to the AM33 processor.
       This is the default.
  
! '-mam33-2'
       Generate code using features specific to the AM33/2.0 processor.
  
! '-mam34'
       Generate code using features specific to the AM34 processor.
  
! '-mtune=CPU-TYPE'
       Use the timing characteristics of the indicated CPU type when
       scheduling instructions.  This does not change the targeted
!      processor type.  The CPU type must be one of 'mn10300', 'am33',
!      'am33-2' or 'am34'.
  
! '-mreturn-pointer-on-d0'
       When generating a function that returns a pointer, return the
!      pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
!      only in 'a0', and attempts to call such functions without a
       prototype result in errors.  Note that this option is on by
!      default; use '-mno-return-pointer-on-d0' to disable it.
  
! '-mno-crt0'
       Do not link in the C run-time initialization object file.
  
! '-mrelax'
       Indicate to the linker that it should perform a relaxation
       optimization pass to shorten branches, calls and absolute memory
       addresses.  This option only has an effect when used on the command
--- 26988,27033 ----
  3.19.30 MN10300 Options
  -----------------------
  
! These ‘-m’ options are defined for Matsushita MN10300 architectures:
  
! ‘-mmult-bug’
       Generate code to avoid bugs in the multiply instructions for the
       MN10300 processors.  This is the default.
  
! ‘-mno-mult-bug’
       Do not generate code to avoid bugs in the multiply instructions for
       the MN10300 processors.
  
! ‘-mam33’
       Generate code using features specific to the AM33 processor.
  
! ‘-mno-am33’
       Do not generate code using features specific to the AM33 processor.
       This is the default.
  
! ‘-mam33-2’
       Generate code using features specific to the AM33/2.0 processor.
  
! ‘-mam34’
       Generate code using features specific to the AM34 processor.
  
! ‘-mtune=CPU-TYPE’
       Use the timing characteristics of the indicated CPU type when
       scheduling instructions.  This does not change the targeted
!      processor type.  The CPU type must be one of ‘mn10300’, ‘am33’,
!      ‘am33-2’ or ‘am34’.
  
! ‘-mreturn-pointer-on-d0’
       When generating a function that returns a pointer, return the
!      pointer in both ‘a0’ and ‘d0’.  Otherwise, the pointer is returned
!      only in ‘a0’, and attempts to call such functions without a
       prototype result in errors.  Note that this option is on by
!      default; use ‘-mno-return-pointer-on-d0’ to disable it.
  
! ‘-mno-crt0’
       Do not link in the C run-time initialization object file.
  
! ‘-mrelax’
       Indicate to the linker that it should perform a relaxation
       optimization pass to shorten branches, calls and absolute memory
       addresses.  This option only has an effect when used on the command
*************** These '-m' options are defined for Matsu
*** 27024,27048 ****
  
       This option makes symbolic debugging impossible.
  
! '-mliw'
       Allow the compiler to generate _Long Instruction Word_ instructions
!      if the target is the 'AM33' or later.  This is the default.  This
!      option defines the preprocessor macro '__LIW__'.
  
! '-mno-liw'
       Do not allow the compiler to generate _Long Instruction Word_
       instructions.  This option defines the preprocessor macro
!      '__NO_LIW__'.
  
! '-msetlb'
       Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
!      if the target is the 'AM33' or later.  This is the default.  This
!      option defines the preprocessor macro '__SETLB__'.
  
! '-mno-setlb'
       Do not allow the compiler to generate _SETLB_ or _Lcc_
       instructions.  This option defines the preprocessor macro
!      '__NO_SETLB__'.
  
  
  File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
--- 27035,27059 ----
  
       This option makes symbolic debugging impossible.
  
! ‘-mliw’
       Allow the compiler to generate _Long Instruction Word_ instructions
!      if the target is the ‘AM33’ or later.  This is the default.  This
!      option defines the preprocessor macro ‘__LIW__’.
  
! ‘-mno-liw’
       Do not allow the compiler to generate _Long Instruction Word_
       instructions.  This option defines the preprocessor macro
!      ‘__NO_LIW__’.
  
! ‘-msetlb’
       Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
!      if the target is the ‘AM33’ or later.  This is the default.  This
!      option defines the preprocessor macro ‘__SETLB__’.
  
! ‘-mno-setlb’
       Do not allow the compiler to generate _SETLB_ or _Lcc_
       instructions.  This option defines the preprocessor macro
!      ‘__NO_SETLB__’.
  
  
  File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
*************** File: gcc.info,  Node: Moxie Options,  N
*** 27050,27067 ****
  3.19.31 Moxie Options
  ---------------------
  
! '-meb'
!      Generate big-endian code.  This is the default for 'moxie-*-*'
       configurations.
  
! '-mel'
       Generate little-endian code.
  
! '-mmul.x'
       Generate mul.x and umul.x instructions.  This is the default for
!      'moxiebox-*-*' configurations.
  
! '-mno-crt0'
       Do not link in the C run-time initialization object file.
  
  
--- 27061,27078 ----
  3.19.31 Moxie Options
  ---------------------
  
! ‘-meb’
!      Generate big-endian code.  This is the default for ‘moxie-*-*’
       configurations.
  
! ‘-mel’
       Generate little-endian code.
  
! ‘-mmul.x’
       Generate mul.x and umul.x instructions.  This is the default for
!      ‘moxiebox-*-*’ configurations.
  
! ‘-mno-crt0’
       Do not link in the C run-time initialization object file.
  
  
*************** File: gcc.info,  Node: MSP430 Options,
*** 27072,27176 ****
  
  These options are defined for the MSP430:
  
! '-masm-hex'
       Force assembly output to always use hex constants.  Normally such
       constants are signed decimals, but this option is available for
       testsuite and/or aesthetic purposes.
  
! '-mmcu='
       Select the MCU to target.  This is used to create a C preprocessor
       symbol based upon the MCU name, converted to upper case and pre-
!      and post-fixed with '__'.  This in turn is used by the 'msp430.h'
       header file to select an MCU-specific supplementary header file.
  
       The option also sets the ISA to use.  If the MCU name is one that
       is known to only support the 430 ISA then that is selected,
!      otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
       can also be used to select the 430 ISA. Similarly the generic
!      'msp430x' MCU name selects the 430X ISA.
  
       In addition an MCU-specific linker script is added to the linker
!      command line.  The script's name is the name of the MCU with '.ld'
!      appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
!      defines the C preprocessor symbol '__XXX__' and cause the linker to
!      search for a script called 'xxx.ld'.
  
       The ISA and hardware multiply supported for the different MCUs is
!      hard-coded into GCC. However, an external 'devices.csv' file can be
       used to extend device support beyond those that have been
       hard-coded.
  
!      GCC searches for the 'devices.csv' file using the following methods
       in the given precedence order, where the first method takes
       precendence over the second which takes precedence over the third.
  
!      Include path specified with '-I' and '-L'
!           'devices.csv' will be searched for in each of the directories
            specified by include paths and linker library search paths.
!      Path specified by the environment variable 'MSP430_GCC_INCLUDE_DIR'
            Define the value of the global environment variable
!           'MSP430_GCC_INCLUDE_DIR' to the full path to the directory
            containing devices.csv, and GCC will search this directory for
            devices.csv.  If devices.csv is found, this directory will
            also be registered as an include path, and linker library
            path.  Header files and linker scripts in this directory can
!           therefore be used without manually specifying '-I' and '-L' on
            the command line.
!      The 'msp430-elf{,bare}/include/devices' directory
!           Finally, GCC will examine 'msp430-elf{,bare}/include/devices'
            from the toolchain root directory.  This directory does not
            exist in a default installation, but if the user has created
!           it and copied 'devices.csv' there, then the MCU data will be
            read.  As above, this directory will also be registered as an
            include path, and linker library path.
  
!      If none of the above search methods find 'devices.csv', then the
       hard-coded MCU data is used.
  
! '-mwarn-mcu'
! '-mno-warn-mcu'
       This option enables or disables warnings about conflicts between
!      the MCU name specified by the '-mmcu' option and the ISA set by the
!      '-mcpu' option and/or the hardware multiply support set by the
!      '-mhwmult' option.  It also toggles warnings about unrecognized MCU
       names.  This option is on by default.
  
! '-mcpu='
!      Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
!      and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
       should be used to select the ISA.
  
! '-msim'
       Link to the simulator runtime libraries and linker script.
!      Overrides any scripts that would be selected by the '-mmcu='
       option.
  
! '-mlarge'
!      Use large-model addressing (20-bit pointers, 20-bit 'size_t').
  
! '-msmall'
!      Use small-model addressing (16-bit pointers, 16-bit 'size_t').
  
! '-mrelax'
       This option is passed to the assembler and linker, and allows the
       linker to perform certain optimizations that cannot be done until
       the final link.
  
! 'mhwmult='
       Describes the type of hardware multiply supported by the target.
!      Accepted values are 'none' for no hardware multiply, '16bit' for
!      the original 16-bit-only multiply supported by early MCUs.  '32bit'
!      for the 16/32-bit multiply supported by later MCUs and 'f5series'
       for the 16/32-bit multiply supported by F5-series MCUs.  A value of
!      'auto' can also be given.  This tells GCC to deduce the hardware
!      multiply support based upon the MCU name provided by the '-mmcu'
!      option.  If no '-mmcu' option is specified or if the MCU name is
       not recognized then no hardware multiply support is assumed.
!      'auto' is the default setting.
  
       Hardware multiplies are normally performed by calling a library
       routine.  This saves space in the generated code.  When compiling
!      at '-O3' or higher however the hardware multiplier is invoked
       inline.  This makes for bigger, but faster code.
  
       The hardware multiply routines disable interrupts whilst running
--- 27083,27187 ----
  
  These options are defined for the MSP430:
  
! ‘-masm-hex’
       Force assembly output to always use hex constants.  Normally such
       constants are signed decimals, but this option is available for
       testsuite and/or aesthetic purposes.
  
! ‘-mmcu=’
       Select the MCU to target.  This is used to create a C preprocessor
       symbol based upon the MCU name, converted to upper case and pre-
!      and post-fixed with ‘__’.  This in turn is used by the ‘msp430.h’
       header file to select an MCU-specific supplementary header file.
  
       The option also sets the ISA to use.  If the MCU name is one that
       is known to only support the 430 ISA then that is selected,
!      otherwise the 430X ISA is selected.  A generic MCU name of ‘msp430’
       can also be used to select the 430 ISA. Similarly the generic
!      ‘msp430x’ MCU name selects the 430X ISA.
  
       In addition an MCU-specific linker script is added to the linker
!      command line.  The script's name is the name of the MCU with ‘.ld’
!      appended.  Thus specifying ‘-mmcu=xxx’ on the ‘gcc’ command line
!      defines the C preprocessor symbol ‘__XXX__’ and cause the linker to
!      search for a script called ‘xxx.ld’.
  
       The ISA and hardware multiply supported for the different MCUs is
!      hard-coded into GCC. However, an external ‘devices.csv’ file can be
       used to extend device support beyond those that have been
       hard-coded.
  
!      GCC searches for the ‘devices.csv’ file using the following methods
       in the given precedence order, where the first method takes
       precendence over the second which takes precedence over the third.
  
!      Include path specified with ‘-I’ and ‘-L’
!           ‘devices.csv’ will be searched for in each of the directories
            specified by include paths and linker library search paths.
!      Path specified by the environment variable ‘MSP430_GCC_INCLUDE_DIR’
            Define the value of the global environment variable
!           ‘MSP430_GCC_INCLUDE_DIR’ to the full path to the directory
            containing devices.csv, and GCC will search this directory for
            devices.csv.  If devices.csv is found, this directory will
            also be registered as an include path, and linker library
            path.  Header files and linker scripts in this directory can
!           therefore be used without manually specifying ‘-I’ and ‘-L’ on
            the command line.
!      The ‘msp430-elf{,bare}/include/devices’ directory
!           Finally, GCC will examine ‘msp430-elf{,bare}/include/devices’
            from the toolchain root directory.  This directory does not
            exist in a default installation, but if the user has created
!           it and copied ‘devices.csv’ there, then the MCU data will be
            read.  As above, this directory will also be registered as an
            include path, and linker library path.
  
!      If none of the above search methods find ‘devices.csv’, then the
       hard-coded MCU data is used.
  
! ‘-mwarn-mcu’
! ‘-mno-warn-mcu’
       This option enables or disables warnings about conflicts between
!      the MCU name specified by the ‘-mmcu’ option and the ISA set by the
!      ‘-mcpu’ option and/or the hardware multiply support set by the
!      ‘-mhwmult’ option.  It also toggles warnings about unrecognized MCU
       names.  This option is on by default.
  
! ‘-mcpu=’
!      Specifies the ISA to use.  Accepted values are ‘msp430’, ‘msp430x’
!      and ‘msp430xv2’.  This option is deprecated.  The ‘-mmcu=’ option
       should be used to select the ISA.
  
! ‘-msim’
       Link to the simulator runtime libraries and linker script.
!      Overrides any scripts that would be selected by the ‘-mmcu=’
       option.
  
! ‘-mlarge’
!      Use large-model addressing (20-bit pointers, 20-bit ‘size_t’).
  
! ‘-msmall’
!      Use small-model addressing (16-bit pointers, 16-bit ‘size_t’).
  
! ‘-mrelax’
       This option is passed to the assembler and linker, and allows the
       linker to perform certain optimizations that cannot be done until
       the final link.
  
! ‘mhwmult=’
       Describes the type of hardware multiply supported by the target.
!      Accepted values are ‘none’ for no hardware multiply, ‘16bit’ for
!      the original 16-bit-only multiply supported by early MCUs.  ‘32bit’
!      for the 16/32-bit multiply supported by later MCUs and ‘f5series’
       for the 16/32-bit multiply supported by F5-series MCUs.  A value of
!      ‘auto’ can also be given.  This tells GCC to deduce the hardware
!      multiply support based upon the MCU name provided by the ‘-mmcu’
!      option.  If no ‘-mmcu’ option is specified or if the MCU name is
       not recognized then no hardware multiply support is assumed.
!      ‘auto’ is the default setting.
  
       Hardware multiplies are normally performed by calling a library
       routine.  This saves space in the generated code.  When compiling
!      at ‘-O3’ or higher however the hardware multiplier is invoked
       inline.  This makes for bigger, but faster code.
  
       The hardware multiply routines disable interrupts whilst running
*************** These options are defined for the MSP430
*** 27178,27203 ****
       makes them safe to use inside interrupt handlers as well as in
       normal code.
  
! '-minrt'
       Enable the use of a minimum runtime environment - no static
       initializers or constructors.  This is intended for
       memory-constrained devices.  The compiler includes special symbols
       in some objects that tell the linker and runtime which code
       fragments are required.
  
! '-mtiny-printf'
!      Enable reduced code size 'printf' and 'puts' library functions.
!      The 'tiny' implementations of these functions are not reentrant, so
       must be used with caution in multi-threaded applications.
  
       Support for streams has been removed and the string to be printed
!      will always be sent to stdout via the 'write' syscall.  The string
       is not buffered before it is sent to write.
  
       This option requires Newlib Nano IO, so GCC must be configured with
!      '--enable-newlib-nano-formatted-io'.
  
! '-mmax-inline-shift='
       This option takes an integer between 0 and 64 inclusive, and sets
       the maximum number of inline shift instructions which should be
       emitted to perform a shift operation by a constant amount.  When
--- 27189,27214 ----
       makes them safe to use inside interrupt handlers as well as in
       normal code.
  
! ‘-minrt’
       Enable the use of a minimum runtime environment - no static
       initializers or constructors.  This is intended for
       memory-constrained devices.  The compiler includes special symbols
       in some objects that tell the linker and runtime which code
       fragments are required.
  
! ‘-mtiny-printf’
!      Enable reduced code size ‘printf’ and ‘puts’ library functions.
!      The ‘tiny’ implementations of these functions are not reentrant, so
       must be used with caution in multi-threaded applications.
  
       Support for streams has been removed and the string to be printed
!      will always be sent to stdout via the ‘write’ syscall.  The string
       is not buffered before it is sent to write.
  
       This option requires Newlib Nano IO, so GCC must be configured with
!      ‘--enable-newlib-nano-formatted-io’.
  
! ‘-mmax-inline-shift=’
       This option takes an integer between 0 and 64 inclusive, and sets
       the maximum number of inline shift instructions which should be
       emitted to perform a shift operation by a constant amount.  When
*************** These options are defined for the MSP430
*** 27212,27238 ****
       passed for this option is divided by 2 and the resulting value used
       instead.
  
! '-mcode-region='
! '-mdata-region='
       These options tell the compiler where to place functions and data
!      that do not have one of the 'lower', 'upper', 'either' or 'section'
!      attributes.  Possible values are 'lower', 'upper', 'either' or
!      'any'.  The first three behave like the corresponding attribute.
!      The fourth possible value - 'any' - is the default.  It leaves
       placement entirely up to the linker script and how it assigns the
!      standard sections ('.text', '.data', etc) to the memory regions.
  
! '-msilicon-errata='
       This option passes on a request to assembler to enable the fixes
       for the named silicon errata.
  
! '-msilicon-errata-warn='
       This option passes on a request to the assembler to enable warning
       messages when a silicon errata might need to be applied.
  
! '-mwarn-devices-csv'
! '-mno-warn-devices-csv'
!      Warn if 'devices.csv' is not found or there are problem parsing it
       (default: on).
  
  
--- 27223,27249 ----
       passed for this option is divided by 2 and the resulting value used
       instead.
  
! ‘-mcode-region=’
! ‘-mdata-region=’
       These options tell the compiler where to place functions and data
!      that do not have one of the ‘lower’, ‘upper’, ‘either’ or ‘section’
!      attributes.  Possible values are ‘lower’, ‘upper’, ‘either’ or
!      ‘any’.  The first three behave like the corresponding attribute.
!      The fourth possible value - ‘any’ - is the default.  It leaves
       placement entirely up to the linker script and how it assigns the
!      standard sections (‘.text’, ‘.data’, etc) to the memory regions.
  
! ‘-msilicon-errata=’
       This option passes on a request to assembler to enable the fixes
       for the named silicon errata.
  
! ‘-msilicon-errata-warn=’
       This option passes on a request to the assembler to enable warning
       messages when a silicon errata might need to be applied.
  
! ‘-mwarn-devices-csv’
! ‘-mno-warn-devices-csv’
!      Warn if ‘devices.csv’ is not found or there are problem parsing it
       (default: on).
  
  
*************** File: gcc.info,  Node: NDS32 Options,  N
*** 27243,27324 ****
  
  These options are defined for NDS32 implementations:
  
! '-mbig-endian'
       Generate code in big-endian mode.
  
! '-mlittle-endian'
       Generate code in little-endian mode.
  
! '-mreduced-regs'
       Use reduced-set registers for register allocation.
  
! '-mfull-regs'
       Use full-set registers for register allocation.
  
! '-mcmov'
       Generate conditional move instructions.
  
! '-mno-cmov'
       Do not generate conditional move instructions.
  
! '-mext-perf'
       Generate performance extension instructions.
  
! '-mno-ext-perf'
       Do not generate performance extension instructions.
  
! '-mext-perf2'
       Generate performance extension 2 instructions.
  
! '-mno-ext-perf2'
       Do not generate performance extension 2 instructions.
  
! '-mext-string'
       Generate string extension instructions.
  
! '-mno-ext-string'
       Do not generate string extension instructions.
  
! '-mv3push'
       Generate v3 push25/pop25 instructions.
  
! '-mno-v3push'
       Do not generate v3 push25/pop25 instructions.
  
! '-m16-bit'
       Generate 16-bit instructions.
  
! '-mno-16-bit'
       Do not generate 16-bit instructions.
  
! '-misr-vector-size=NUM'
       Specify the size of each interrupt vector, which must be 4 or 16.
  
! '-mcache-block-size=NUM'
       Specify the size of each cache block, which must be a power of 2
       between 4 and 512.
  
! '-march=ARCH'
       Specify the name of the target architecture.
  
! '-mcmodel=CODE-MODEL'
       Set the code model to one of
!      'small'
            All the data and read-only data segments must be within 512KB
            addressing space.  The text segment must be within 16MB
            addressing space.
!      'medium'
            The data segment must be within 512KB while the read-only data
            segment can be within 4GB addressing space.  The text segment
            should be still within 16MB addressing space.
!      'large'
            All the text and data segments can be within 4GB addressing
            space.
  
! '-mctor-dtor'
       Enable constructor/destructor feature.
  
! '-mrelax'
       Guide linker to relax instructions.
  
  
--- 27254,27335 ----
  
  These options are defined for NDS32 implementations:
  
! ‘-mbig-endian’
       Generate code in big-endian mode.
  
! ‘-mlittle-endian’
       Generate code in little-endian mode.
  
! ‘-mreduced-regs’
       Use reduced-set registers for register allocation.
  
! ‘-mfull-regs’
       Use full-set registers for register allocation.
  
! ‘-mcmov’
       Generate conditional move instructions.
  
! ‘-mno-cmov’
       Do not generate conditional move instructions.
  
! ‘-mext-perf’
       Generate performance extension instructions.
  
! ‘-mno-ext-perf’
       Do not generate performance extension instructions.
  
! ‘-mext-perf2’
       Generate performance extension 2 instructions.
  
! ‘-mno-ext-perf2’
       Do not generate performance extension 2 instructions.
  
! ‘-mext-string’
       Generate string extension instructions.
  
! ‘-mno-ext-string’
       Do not generate string extension instructions.
  
! ‘-mv3push’
       Generate v3 push25/pop25 instructions.
  
! ‘-mno-v3push’
       Do not generate v3 push25/pop25 instructions.
  
! ‘-m16-bit’
       Generate 16-bit instructions.
  
! ‘-mno-16-bit’
       Do not generate 16-bit instructions.
  
! ‘-misr-vector-size=NUM’
       Specify the size of each interrupt vector, which must be 4 or 16.
  
! ‘-mcache-block-size=NUM’
       Specify the size of each cache block, which must be a power of 2
       between 4 and 512.
  
! ‘-march=ARCH’
       Specify the name of the target architecture.
  
! ‘-mcmodel=CODE-MODEL’
       Set the code model to one of
!      ‘small’
            All the data and read-only data segments must be within 512KB
            addressing space.  The text segment must be within 16MB
            addressing space.
!      ‘medium’
            The data segment must be within 512KB while the read-only data
            segment can be within 4GB addressing space.  The text segment
            should be still within 16MB addressing space.
!      ‘large’
            All the text and data segments can be within 4GB addressing
            space.
  
! ‘-mctor-dtor’
       Enable constructor/destructor feature.
  
! ‘-mrelax’
       Guide linker to relax instructions.
  
  
*************** File: gcc.info,  Node: Nios II Options,
*** 27329,27369 ****
  
  These are the options defined for the Altera Nios II processor.
  
! '-G NUM'
       Put global and static objects less than or equal to NUM bytes into
       the small data or BSS sections instead of the normal data or BSS
       sections.  The default value of NUM is 8.
  
! '-mgpopt=OPTION'
! '-mgpopt'
! '-mno-gpopt'
       Generate (do not generate) GP-relative accesses.  The following
       OPTION names are recognized:
  
!      'none'
            Do not generate GP-relative accesses.
  
!      'local'
            Generate GP-relative accesses for small data objects that are
            not external, weak, or uninitialized common symbols.  Also use
            GP-relative addressing for objects that have been explicitly
!           placed in a small data section via a 'section' attribute.
  
!      'global'
!           As for 'local', but also generate GP-relative accesses for
            small data objects that are external, weak, or common.  If you
            use this option, you must ensure that all parts of your
!           program (including libraries) are compiled with the same '-G'
            setting.
  
!      'data'
            Generate GP-relative accesses for all data objects in the
            program.  If you use this option, the entire data and BSS
            segments of your program must fit in 64K of memory and you
            must use an appropriate linker script to allocate them within
            the addressable range of the global pointer.
  
!      'all'
            Generate GP-relative addresses for function pointers as well
            as data pointers.  If you use this option, the entire text,
            data, and BSS segments of your program must fit in 64K of
--- 27340,27380 ----
  
  These are the options defined for the Altera Nios II processor.
  
! ‘-G NUM’
       Put global and static objects less than or equal to NUM bytes into
       the small data or BSS sections instead of the normal data or BSS
       sections.  The default value of NUM is 8.
  
! ‘-mgpopt=OPTION’
! ‘-mgpopt’
! ‘-mno-gpopt’
       Generate (do not generate) GP-relative accesses.  The following
       OPTION names are recognized:
  
!      ‘none’
            Do not generate GP-relative accesses.
  
!      ‘local’
            Generate GP-relative accesses for small data objects that are
            not external, weak, or uninitialized common symbols.  Also use
            GP-relative addressing for objects that have been explicitly
!           placed in a small data section via a ‘section’ attribute.
  
!      ‘global’
!           As for ‘local’, but also generate GP-relative accesses for
            small data objects that are external, weak, or common.  If you
            use this option, you must ensure that all parts of your
!           program (including libraries) are compiled with the same ‘-G’
            setting.
  
!      ‘data’
            Generate GP-relative accesses for all data objects in the
            program.  If you use this option, the entire data and BSS
            segments of your program must fit in 64K of memory and you
            must use an appropriate linker script to allocate them within
            the addressable range of the global pointer.
  
!      ‘all’
            Generate GP-relative addresses for function pointers as well
            as data pointers.  If you use this option, the entire text,
            data, and BSS segments of your program must fit in 64K of
*************** These are the options defined for the Al
*** 27371,27406 ****
            allocate them within the addressable range of the global
            pointer.
  
!      '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
!      equivalent to '-mgpopt=none'.
  
!      The default is '-mgpopt' except when '-fpic' or '-fPIC' is
       specified to generate position-independent code.  Note that the
       Nios II ABI does not permit GP-relative accesses from shared
       libraries.
  
!      You may need to specify '-mno-gpopt' explicitly when building
       programs that include large amounts of small data, including large
       GOT data sections.  In this case, the 16-bit offset for GP-relative
       addressing may not be large enough to allow access to the entire
       small data section.
  
! '-mgprel-sec=REGEXP'
       This option specifies additional section names that can be accessed
       via GP-relative addressing.  It is most useful in conjunction with
!      'section' attributes on variable declarations (*note Common
       Variable Attributes::) and a custom linker script.  The REGEXP is a
       POSIX Extended Regular Expression.
  
!      This option does not affect the behavior of the '-G' option, and
!      the specified sections are in addition to the standard '.sdata' and
!      '.sbss' small-data sections that are recognized by '-mgpopt'.
  
! '-mr0rel-sec=REGEXP'
       This option specifies names of sections that can be accessed via a
!      16-bit offset from 'r0'; that is, in the low 32K or high 32K of the
       32-bit address space.  It is most useful in conjunction with
!      'section' attributes on variable declarations (*note Common
       Variable Attributes::) and a custom linker script.  The REGEXP is a
       POSIX Extended Regular Expression.
  
--- 27382,27417 ----
            allocate them within the addressable range of the global
            pointer.
  
!      ‘-mgpopt’ is equivalent to ‘-mgpopt=local’, and ‘-mno-gpopt’ is
!      equivalent to ‘-mgpopt=none’.
  
!      The default is ‘-mgpopt’ except when ‘-fpic’ or ‘-fPIC’ is
       specified to generate position-independent code.  Note that the
       Nios II ABI does not permit GP-relative accesses from shared
       libraries.
  
!      You may need to specify ‘-mno-gpopt’ explicitly when building
       programs that include large amounts of small data, including large
       GOT data sections.  In this case, the 16-bit offset for GP-relative
       addressing may not be large enough to allow access to the entire
       small data section.
  
! ‘-mgprel-sec=REGEXP’
       This option specifies additional section names that can be accessed
       via GP-relative addressing.  It is most useful in conjunction with
!      ‘section’ attributes on variable declarations (*note Common
       Variable Attributes::) and a custom linker script.  The REGEXP is a
       POSIX Extended Regular Expression.
  
!      This option does not affect the behavior of the ‘-G’ option, and
!      the specified sections are in addition to the standard ‘.sdata’ and
!      ‘.sbss’ small-data sections that are recognized by ‘-mgpopt’.
  
! ‘-mr0rel-sec=REGEXP’
       This option specifies names of sections that can be accessed via a
!      16-bit offset from ‘r0’; that is, in the low 32K or high 32K of the
       32-bit address space.  It is most useful in conjunction with
!      ‘section’ attributes on variable declarations (*note Common
       Variable Attributes::) and a custom linker script.  The REGEXP is a
       POSIX Extended Regular Expression.
  
*************** These are the options defined for the Al
*** 27409,27468 ****
       no conventional section names used in standard linker scripts for
       sections in the low or high areas of memory.
  
! '-mel'
! '-meb'
       Generate little-endian (default) or big-endian (experimental) code,
       respectively.
  
! '-march=ARCH'
       This specifies the name of the target Nios II architecture.  GCC
       uses this name to determine what kind of instructions it can emit
!      when generating assembly code.  Permissible names are: 'r1', 'r2'.
  
!      The preprocessor macro '__nios2_arch__' is available to programs,
       with value 1 or 2, indicating the targeted ISA level.
  
! '-mbypass-cache'
! '-mno-bypass-cache'
       Force all load and store instructions to always bypass cache by
       using I/O variants of the instructions.  The default is not to
       bypass the cache.
  
! '-mno-cache-volatile'
! '-mcache-volatile'
       Volatile memory access bypass the cache using the I/O variants of
       the load and store instructions.  The default is not to bypass the
       cache.
  
! '-mno-fast-sw-div'
! '-mfast-sw-div'
       Do not use table-based fast divide for small numbers.  The default
!      is to use the fast divide at '-O3' and above.
  
! '-mno-hw-mul'
! '-mhw-mul'
! '-mno-hw-mulx'
! '-mhw-mulx'
! '-mno-hw-div'
! '-mhw-div'
!      Enable or disable emitting 'mul', 'mulx' and 'div' family of
!      instructions by the compiler.  The default is to emit 'mul' and not
!      emit 'div' and 'mulx'.
  
! '-mbmx'
! '-mno-bmx'
! '-mcdx'
! '-mno-cdx'
       Enable or disable generation of Nios II R2 BMX (bit manipulation)
       and CDX (code density) instructions.  Enabling these instructions
!      also requires '-march=r2'.  Since these instructions are optional
       extensions to the R2 architecture, the default is not to emit them.
  
! '-mcustom-INSN=N'
! '-mno-custom-INSN'
!      Each '-mcustom-INSN=N' option enables use of a custom instruction
       with encoding N when generating code that uses INSN.  For example,
!      '-mcustom-fadds=253' generates custom instruction 253 for
       single-precision floating-point add operations instead of the
       default behavior of using a library call.
  
--- 27420,27479 ----
       no conventional section names used in standard linker scripts for
       sections in the low or high areas of memory.
  
! ‘-mel’
! ‘-meb’
       Generate little-endian (default) or big-endian (experimental) code,
       respectively.
  
! ‘-march=ARCH’
       This specifies the name of the target Nios II architecture.  GCC
       uses this name to determine what kind of instructions it can emit
!      when generating assembly code.  Permissible names are: ‘r1’, ‘r2’.
  
!      The preprocessor macro ‘__nios2_arch__’ is available to programs,
       with value 1 or 2, indicating the targeted ISA level.
  
! ‘-mbypass-cache’
! ‘-mno-bypass-cache’
       Force all load and store instructions to always bypass cache by
       using I/O variants of the instructions.  The default is not to
       bypass the cache.
  
! ‘-mno-cache-volatile’
! ‘-mcache-volatile’
       Volatile memory access bypass the cache using the I/O variants of
       the load and store instructions.  The default is not to bypass the
       cache.
  
! ‘-mno-fast-sw-div’
! ‘-mfast-sw-div’
       Do not use table-based fast divide for small numbers.  The default
!      is to use the fast divide at ‘-O3’ and above.
  
! ‘-mno-hw-mul’
! ‘-mhw-mul’
! ‘-mno-hw-mulx’
! ‘-mhw-mulx’
! ‘-mno-hw-div’
! ‘-mhw-div’
!      Enable or disable emitting ‘mul’, ‘mulx’ and ‘div’ family of
!      instructions by the compiler.  The default is to emit ‘mul’ and not
!      emit ‘div’ and ‘mulx’.
  
! ‘-mbmx’
! ‘-mno-bmx’
! ‘-mcdx’
! ‘-mno-cdx’
       Enable or disable generation of Nios II R2 BMX (bit manipulation)
       and CDX (code density) instructions.  Enabling these instructions
!      also requires ‘-march=r2’.  Since these instructions are optional
       extensions to the R2 architecture, the default is not to emit them.
  
! ‘-mcustom-INSN=N’
! ‘-mno-custom-INSN’
!      Each ‘-mcustom-INSN=N’ option enables use of a custom instruction
       with encoding N when generating code that uses INSN.  For example,
!      ‘-mcustom-fadds=253’ generates custom instruction 253 for
       single-precision floating-point add operations instead of the
       default behavior of using a library call.
  
*************** These are the options defined for the Al
*** 27474,27547 ****
  
       Single-precision floating point:
  
!      'fadds', 'fsubs', 'fdivs', 'fmuls'
            Binary arithmetic operations.
  
!      'fnegs'
            Unary negation.
  
!      'fabss'
            Unary absolute value.
  
!      'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
            Comparison operations.
  
!      'fmins', 'fmaxs'
            Floating-point minimum and maximum.  These instructions are
!           only generated if '-ffinite-math-only' is specified.
  
!      'fsqrts'
            Unary square root operation.
  
!      'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
            Floating-point trigonometric and exponential functions.  These
            instructions are only generated if
!           '-funsafe-math-optimizations' is also specified.
  
       Double-precision floating point:
  
!      'faddd', 'fsubd', 'fdivd', 'fmuld'
            Binary arithmetic operations.
  
!      'fnegd'
            Unary negation.
  
!      'fabsd'
            Unary absolute value.
  
!      'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
            Comparison operations.
  
!      'fmind', 'fmaxd'
            Double-precision minimum and maximum.  These instructions are
!           only generated if '-ffinite-math-only' is specified.
  
!      'fsqrtd'
            Unary square root operation.
  
!      'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
            Double-precision trigonometric and exponential functions.
            These instructions are only generated if
!           '-funsafe-math-optimizations' is also specified.
  
       Conversions:
!      'fextsd'
            Conversion from single precision to double precision.
  
!      'ftruncds'
            Conversion from double precision to single precision.
  
!      'fixsi', 'fixsu', 'fixdi', 'fixdu'
            Conversion from floating point to signed or unsigned integer
            types, with truncation towards zero.
  
!      'round'
            Conversion from single-precision floating point to signed
            integer, rounding to the nearest integer and ties away from
!           zero.  This corresponds to the '__builtin_lroundf' function
!           when '-fno-math-errno' is used.
  
!      'floatis', 'floatus', 'floatid', 'floatud'
            Conversion from signed or unsigned integer types to
            floating-point types.
  
--- 27485,27558 ----
  
       Single-precision floating point:
  
!      ‘fadds’, ‘fsubs’, ‘fdivs’, ‘fmuls’
            Binary arithmetic operations.
  
!      ‘fnegs’
            Unary negation.
  
!      ‘fabss’
            Unary absolute value.
  
!      ‘fcmpeqs’, ‘fcmpges’, ‘fcmpgts’, ‘fcmples’, ‘fcmplts’, ‘fcmpnes’
            Comparison operations.
  
!      ‘fmins’, ‘fmaxs’
            Floating-point minimum and maximum.  These instructions are
!           only generated if ‘-ffinite-math-only’ is specified.
  
!      ‘fsqrts’
            Unary square root operation.
  
!      ‘fcoss’, ‘fsins’, ‘ftans’, ‘fatans’, ‘fexps’, ‘flogs’
            Floating-point trigonometric and exponential functions.  These
            instructions are only generated if
!           ‘-funsafe-math-optimizations’ is also specified.
  
       Double-precision floating point:
  
!      ‘faddd’, ‘fsubd’, ‘fdivd’, ‘fmuld’
            Binary arithmetic operations.
  
!      ‘fnegd’
            Unary negation.
  
!      ‘fabsd’
            Unary absolute value.
  
!      ‘fcmpeqd’, ‘fcmpged’, ‘fcmpgtd’, ‘fcmpled’, ‘fcmpltd’, ‘fcmpned’
            Comparison operations.
  
!      ‘fmind’, ‘fmaxd’
            Double-precision minimum and maximum.  These instructions are
!           only generated if ‘-ffinite-math-only’ is specified.
  
!      ‘fsqrtd’
            Unary square root operation.
  
!      ‘fcosd’, ‘fsind’, ‘ftand’, ‘fatand’, ‘fexpd’, ‘flogd’
            Double-precision trigonometric and exponential functions.
            These instructions are only generated if
!           ‘-funsafe-math-optimizations’ is also specified.
  
       Conversions:
!      ‘fextsd’
            Conversion from single precision to double precision.
  
!      ‘ftruncds’
            Conversion from double precision to single precision.
  
!      ‘fixsi’, ‘fixsu’, ‘fixdi’, ‘fixdu’
            Conversion from floating point to signed or unsigned integer
            types, with truncation towards zero.
  
!      ‘round’
            Conversion from single-precision floating point to signed
            integer, rounding to the nearest integer and ties away from
!           zero.  This corresponds to the ‘__builtin_lroundf’ function
!           when ‘-fno-math-errno’ is used.
  
!      ‘floatis’, ‘floatus’, ‘floatid’, ‘floatud’
            Conversion from signed or unsigned integer types to
            floating-point types.
  
*************** These are the options defined for the Al
*** 27559,27604 ****
       sequences to write register X and/or read register Y when
       double-precision floating-point instructions are used.
  
!      'fwrx'
            Write SRC1 into the least significant half of X and SRC2 into
            the most significant half of X.
  
!      'fwry'
            Write SRC1 into Y.
  
!      'frdxhi', 'frdxlo'
            Read the most or least (respectively) significant half of X
            and store it in DEST.
  
!      'frdy'
            Read the value of Y and store it into DEST.
  
       Note that you can gain more local control over generation of Nios
!      II custom instructions by using the 'target("custom-INSN=N")' and
!      'target("no-custom-INSN")' function attributes (*note Function
       Attributes::) or pragmas (*note Function Specific Option
       Pragmas::).
  
! '-mcustom-fpu-cfg=NAME'
  
       This option enables a predefined, named set of custom instruction
!      encodings (see '-mcustom-INSN' above).  Currently, the following
       sets are defined:
  
!      '-mcustom-fpu-cfg=60-1' is equivalent to:
            -mcustom-fmuls=252
            -mcustom-fadds=253
            -mcustom-fsubs=254
            -fsingle-precision-constant
  
!      '-mcustom-fpu-cfg=60-2' is equivalent to:
            -mcustom-fmuls=252
            -mcustom-fadds=253
            -mcustom-fsubs=254
            -mcustom-fdivs=255
            -fsingle-precision-constant
  
!      '-mcustom-fpu-cfg=72-3' is equivalent to:
            -mcustom-floatus=243
            -mcustom-fixsi=244
            -mcustom-floatis=245
--- 27570,27615 ----
       sequences to write register X and/or read register Y when
       double-precision floating-point instructions are used.
  
!      ‘fwrx’
            Write SRC1 into the least significant half of X and SRC2 into
            the most significant half of X.
  
!      ‘fwry’
            Write SRC1 into Y.
  
!      ‘frdxhi’, ‘frdxlo’
            Read the most or least (respectively) significant half of X
            and store it in DEST.
  
!      ‘frdy’
            Read the value of Y and store it into DEST.
  
       Note that you can gain more local control over generation of Nios
!      II custom instructions by using the ‘target("custom-INSN=N")’ and
!      ‘target("no-custom-INSN")’ function attributes (*note Function
       Attributes::) or pragmas (*note Function Specific Option
       Pragmas::).
  
! ‘-mcustom-fpu-cfg=NAME’
  
       This option enables a predefined, named set of custom instruction
!      encodings (see ‘-mcustom-INSN’ above).  Currently, the following
       sets are defined:
  
!      ‘-mcustom-fpu-cfg=60-1’ is equivalent to:
            -mcustom-fmuls=252
            -mcustom-fadds=253
            -mcustom-fsubs=254
            -fsingle-precision-constant
  
!      ‘-mcustom-fpu-cfg=60-2’ is equivalent to:
            -mcustom-fmuls=252
            -mcustom-fadds=253
            -mcustom-fsubs=254
            -mcustom-fdivs=255
            -fsingle-precision-constant
  
!      ‘-mcustom-fpu-cfg=72-3’ is equivalent to:
            -mcustom-floatus=243
            -mcustom-fixsi=244
            -mcustom-floatis=245
*************** These are the options defined for the Al
*** 27612,27618 ****
            -mcustom-fdivs=255
            -fsingle-precision-constant
  
!      '-mcustom-fpu-cfg=fph2' is equivalent to:
            -mcustom-fabss=224
            -mcustom-fnegs=225
            -mcustom-fcmpnes=226
--- 27623,27629 ----
            -mcustom-fdivs=255
            -fsingle-precision-constant
  
!      ‘-mcustom-fpu-cfg=fph2’ is equivalent to:
            -mcustom-fabss=224
            -mcustom-fnegs=225
            -mcustom-fcmpnes=226
*************** These are the options defined for the Al
*** 27632,27675 ****
            -mcustom-fsubs=254
            -mcustom-fdivs=255
  
!      Custom instruction assignments given by individual '-mcustom-INSN='
!      options override those given by '-mcustom-fpu-cfg=', regardless of
       the order of the options on the command line.
  
       Note that you can gain more local control over selection of a FPU
!      configuration by using the 'target("custom-fpu-cfg=NAME")' function
       attribute (*note Function Attributes::) or pragma (*note Function
       Specific Option Pragmas::).
  
       The name FPH2 is an abbreviation for _Nios II Floating Point
       Hardware 2 Component_.  Please note that the custom instructions
!      enabled by '-mcustom-fmins=233' and '-mcustom-fmaxs=234' are only
!      generated if '-ffinite-math-only' is specified.  The custom
!      instruction enabled by '-mcustom-round=248' is only generated if
!      '-fno-math-errno' is specified.  In contrast to the other
!      configurations, '-fsingle-precision-constant' is not set.
  
!  These additional '-m' options are available for the Altera Nios II ELF
  (bare-metal) target:
  
! '-mhal'
       Link with HAL BSP. This suppresses linking with the GCC-provided C
       runtime startup and termination code, and is typically used in
!      conjunction with '-msys-crt0=' to specify the location of the
       alternate startup code provided by the HAL BSP.
  
! '-msmallc'
!      Link with a limited version of the C library, '-lsmallc', rather
       than Newlib.
  
! '-msys-crt0=STARTFILE'
       STARTFILE is the file name of the startfile (crt0) to use when
!      linking.  This option is only useful in conjunction with '-mhal'.
  
! '-msys-lib=SYSTEMLIB'
       SYSTEMLIB is the library name of the library that provides
!      low-level system calls required by the C library, e.g. 'read' and
!      'write'.  This option is typically used to link with a library
       provided by a HAL BSP.
  
  
--- 27643,27686 ----
            -mcustom-fsubs=254
            -mcustom-fdivs=255
  
!      Custom instruction assignments given by individual ‘-mcustom-INSN=’
!      options override those given by ‘-mcustom-fpu-cfg=’, regardless of
       the order of the options on the command line.
  
       Note that you can gain more local control over selection of a FPU
!      configuration by using the ‘target("custom-fpu-cfg=NAME")’ function
       attribute (*note Function Attributes::) or pragma (*note Function
       Specific Option Pragmas::).
  
       The name FPH2 is an abbreviation for _Nios II Floating Point
       Hardware 2 Component_.  Please note that the custom instructions
!      enabled by ‘-mcustom-fmins=233’ and ‘-mcustom-fmaxs=234’ are only
!      generated if ‘-ffinite-math-only’ is specified.  The custom
!      instruction enabled by ‘-mcustom-round=248’ is only generated if
!      ‘-fno-math-errno’ is specified.  In contrast to the other
!      configurations, ‘-fsingle-precision-constant’ is not set.
  
!  These additional ‘-m’ options are available for the Altera Nios II ELF
  (bare-metal) target:
  
! ‘-mhal’
       Link with HAL BSP. This suppresses linking with the GCC-provided C
       runtime startup and termination code, and is typically used in
!      conjunction with ‘-msys-crt0=’ to specify the location of the
       alternate startup code provided by the HAL BSP.
  
! ‘-msmallc’
!      Link with a limited version of the C library, ‘-lsmallc’, rather
       than Newlib.
  
! ‘-msys-crt0=STARTFILE’
       STARTFILE is the file name of the startfile (crt0) to use when
!      linking.  This option is only useful in conjunction with ‘-mhal’.
  
! ‘-msys-lib=SYSTEMLIB’
       SYSTEMLIB is the library name of the library that provides
!      low-level system calls required by the C library, e.g. ‘read’ and
!      ‘write’.  This option is typically used to link with a library
       provided by a HAL BSP.
  
  
*************** File: gcc.info,  Node: Nvidia PTX Option
*** 27680,27738 ****
  
  These options are defined for Nvidia PTX:
  
! '-m64'
       Ignored, but preserved for backward compatibility.  Only 64-bit ABI
       is supported.
  
! '-march=ARCHITECTURE-STRING'
       Generate code for the specified PTX ISA target architecture (e.g.
!      'sm_35').  Valid architecture strings are 'sm_30', 'sm_35',
!      'sm_53', 'sm_70', 'sm_75' and 'sm_80'.  The default depends on how
!      the compiler has been configured, see '--with-arch'.
  
!      This option sets the value of the preprocessor macro '__PTX_SM__';
!      for instance, for 'sm_35', it has the value '350'.
  
! '-misa=ARCHITECTURE-STRING'
!      Alias of '-march='.
  
! '-march-map=ARCHITECTURE-STRING'
!      Select the closest available '-march=' value that is not more
!      capable.  For instance, for '-march-map=sm_50' select
!      '-march=sm_35', and for '-march-map=sm_53' select '-march=sm_53'.
  
! '-mptx=VERSION-STRING'
!      Generate code for the specified PTX ISA version (e.g. '7.0').
!      Valid version strings include '3.1', '6.0', '6.3', and '7.0'.  The
       default PTX ISA version is 6.0, unless a higher version is required
!      for specified PTX ISA target architecture via option '-march='.
  
       This option sets the values of the preprocessor macros
!      '__PTX_ISA_VERSION_MAJOR__' and '__PTX_ISA_VERSION_MINOR__'; for
!      instance, for '3.1' the macros have the values '3' and '1',
       respectively.
  
! '-mmainkernel'
       Link in code for a __main kernel.  This is for stand-alone instead
       of offloading execution.
  
! '-moptimize'
       Apply partitioned execution optimizations.  This is the default
       when any level of optimization is selected.
  
! '-msoft-stack'
!      Generate code that does not use '.local' memory directly for stack
       storage.  Instead, a per-warp stack pointer is maintained
       explicitly.  This enables variable-length stack allocation (with
!      variable-length arrays or 'alloca'), and when global memory is used
       for underlying storage, makes it possible to access automatic
       variables from other threads, or with atomic instructions.  This
       code generation variant is used for OpenMP offloading, but the
       option is exposed on its own for the purpose of testing the
       compiler; to generate code suitable for linking into programs using
!      OpenMP offloading, use option '-mgomp'.
  
! '-muniform-simt'
       Switch to code generation variant that allows to execute all
       threads in each warp, while maintaining memory state and side
       effects as if only one thread in each warp was active outside of
--- 27691,27749 ----
  
  These options are defined for Nvidia PTX:
  
! ‘-m64’
       Ignored, but preserved for backward compatibility.  Only 64-bit ABI
       is supported.
  
! ‘-march=ARCHITECTURE-STRING’
       Generate code for the specified PTX ISA target architecture (e.g.
!      ‘sm_35’).  Valid architecture strings are ‘sm_30’, ‘sm_35’,
!      ‘sm_53’, ‘sm_70’, ‘sm_75’ and ‘sm_80’.  The default depends on how
!      the compiler has been configured, see ‘--with-arch’.
  
!      This option sets the value of the preprocessor macro ‘__PTX_SM__’;
!      for instance, for ‘sm_35’, it has the value ‘350’.
  
! ‘-misa=ARCHITECTURE-STRING’
!      Alias of ‘-march=’.
  
! ‘-march-map=ARCHITECTURE-STRING’
!      Select the closest available ‘-march=’ value that is not more
!      capable.  For instance, for ‘-march-map=sm_50’ select
!      ‘-march=sm_35’, and for ‘-march-map=sm_53’ select ‘-march=sm_53’.
  
! ‘-mptx=VERSION-STRING’
!      Generate code for the specified PTX ISA version (e.g. ‘7.0’).
!      Valid version strings include ‘3.1’, ‘6.0’, ‘6.3’, and ‘7.0’.  The
       default PTX ISA version is 6.0, unless a higher version is required
!      for specified PTX ISA target architecture via option ‘-march=’.
  
       This option sets the values of the preprocessor macros
!      ‘__PTX_ISA_VERSION_MAJOR__’ and ‘__PTX_ISA_VERSION_MINOR__’; for
!      instance, for ‘3.1’ the macros have the values ‘3’ and ‘1’,
       respectively.
  
! ‘-mmainkernel’
       Link in code for a __main kernel.  This is for stand-alone instead
       of offloading execution.
  
! ‘-moptimize’
       Apply partitioned execution optimizations.  This is the default
       when any level of optimization is selected.
  
! ‘-msoft-stack’
!      Generate code that does not use ‘.local’ memory directly for stack
       storage.  Instead, a per-warp stack pointer is maintained
       explicitly.  This enables variable-length stack allocation (with
!      variable-length arrays or ‘alloca’), and when global memory is used
       for underlying storage, makes it possible to access automatic
       variables from other threads, or with atomic instructions.  This
       code generation variant is used for OpenMP offloading, but the
       option is exposed on its own for the purpose of testing the
       compiler; to generate code suitable for linking into programs using
!      OpenMP offloading, use option ‘-mgomp’.
  
! ‘-muniform-simt’
       Switch to code generation variant that allows to execute all
       threads in each warp, while maintaining memory state and side
       effects as if only one thread in each warp was active outside of
*************** These options are defined for Nvidia PTX
*** 27741,27755 ****
       lane index equals the master lane index), and the register being
       assigned is copied via a shuffle instruction from the master lane.
       Outside of SIMD regions lane 0 is the master; inside, each thread
!      sees itself as the master.  Shared memory array 'int __nvptx_uni[]'
       stores all-zeros or all-ones bitmasks for each warp, indicating
       current mode (0 outside of SIMD regions).  Each thread can
!      bitwise-and the bitmask at position 'tid.y' with current lane index
       to compute the master lane index.
  
! '-mgomp'
!      Generate code for use in OpenMP offloading: enables '-msoft-stack'
!      and '-muniform-simt' options, and selects corresponding multilib
       variant.
  
  
--- 27752,27766 ----
       lane index equals the master lane index), and the register being
       assigned is copied via a shuffle instruction from the master lane.
       Outside of SIMD regions lane 0 is the master; inside, each thread
!      sees itself as the master.  Shared memory array ‘int __nvptx_uni[]’
       stores all-zeros or all-ones bitmasks for each warp, indicating
       current mode (0 outside of SIMD regions).  Each thread can
!      bitwise-and the bitmask at position ‘tid.y’ with current lane index
       to compute the master lane index.
  
! ‘-mgomp’
!      Generate code for use in OpenMP offloading: enables ‘-msoft-stack’
!      and ‘-muniform-simt’ options, and selects corresponding multilib
       variant.
  
  
*************** File: gcc.info,  Node: OpenRISC Options,
*** 27760,27834 ****
  
  These options are defined for OpenRISC:
  
! '-mboard=NAME'
       Configure a board specific runtime.  This will be passed to the
!      linker for newlib board library linking.  The default is 'or1ksim'.
  
! '-mnewlib'
       This option is ignored; it is for compatibility purposes only.
       This used to select linker and preprocessor options for use with
       newlib.
  
! '-msoft-div'
! '-mhard-div'
!      Select software or hardware divide ('l.div', 'l.divu')
       instructions.  This default is hardware divide.
  
! '-msoft-mul'
! '-mhard-mul'
!      Select software or hardware multiply ('l.mul', 'l.muli')
       instructions.  This default is hardware multiply.
  
! '-msoft-float'
! '-mhard-float'
       Select software or hardware for floating point operations.  The
       default is software.
  
! '-mdouble-float'
!      When '-mhard-float' is selected, enables generation of
       double-precision floating point instructions.  By default functions
!      from 'libgcc' are used to perform double-precision floating point
       operations.
  
! '-munordered-float'
!      When '-mhard-float' is selected, enables generation of unordered
!      floating point compare and set flag ('lf.sfun*') instructions.  By
!      default functions from 'libgcc' are used to perform unordered
       floating point compare and set flag operations.
  
! '-mcmov'
!      Enable generation of conditional move ('l.cmov') instructions.  By
       default the equivalent will be generated using set and branch.
  
! '-mror'
!      Enable generation of rotate right ('l.ror') instructions.  By
!      default functions from 'libgcc' are used to perform rotate right
       operations.
  
! '-mrori'
!      Enable generation of rotate right with immediate ('l.rori')
!      instructions.  By default functions from 'libgcc' are used to
       perform rotate right with immediate operations.
  
! '-msext'
!      Enable generation of sign extension ('l.ext*') instructions.  By
       default memory loads are used to perform sign extension.
  
! '-msfimm'
!      Enable generation of compare and set flag with immediate ('l.sf*i')
       instructions.  By default extra instructions will be generated to
       store the immediate to a register first.
  
! '-mshftimm'
!      Enable generation of shift with immediate ('l.srai', 'l.srli',
!      'l.slli') instructions.  By default extra instructions will be
       generated to store the immediate to a register first.
  
! '-mcmodel=small'
       Generate OpenRISC code for the small model: The GOT is limited to
       64k.  This is the default model.
  
! '-mcmodel=large'
       Generate OpenRISC code for the large model: The GOT may grow up to
       4G in size.
  
--- 27771,27845 ----
  
  These options are defined for OpenRISC:
  
! ‘-mboard=NAME’
       Configure a board specific runtime.  This will be passed to the
!      linker for newlib board library linking.  The default is ‘or1ksim’.
  
! ‘-mnewlib’
       This option is ignored; it is for compatibility purposes only.
       This used to select linker and preprocessor options for use with
       newlib.
  
! ‘-msoft-div’
! ‘-mhard-div’
!      Select software or hardware divide (‘l.div’, ‘l.divu’)
       instructions.  This default is hardware divide.
  
! ‘-msoft-mul’
! ‘-mhard-mul’
!      Select software or hardware multiply (‘l.mul’, ‘l.muli’)
       instructions.  This default is hardware multiply.
  
! ‘-msoft-float’
! ‘-mhard-float’
       Select software or hardware for floating point operations.  The
       default is software.
  
! ‘-mdouble-float’
!      When ‘-mhard-float’ is selected, enables generation of
       double-precision floating point instructions.  By default functions
!      from ‘libgcc’ are used to perform double-precision floating point
       operations.
  
! ‘-munordered-float’
!      When ‘-mhard-float’ is selected, enables generation of unordered
!      floating point compare and set flag (‘lf.sfun*’) instructions.  By
!      default functions from ‘libgcc’ are used to perform unordered
       floating point compare and set flag operations.
  
! ‘-mcmov’
!      Enable generation of conditional move (‘l.cmov’) instructions.  By
       default the equivalent will be generated using set and branch.
  
! ‘-mror’
!      Enable generation of rotate right (‘l.ror’) instructions.  By
!      default functions from ‘libgcc’ are used to perform rotate right
       operations.
  
! ‘-mrori’
!      Enable generation of rotate right with immediate (‘l.rori’)
!      instructions.  By default functions from ‘libgcc’ are used to
       perform rotate right with immediate operations.
  
! ‘-msext’
!      Enable generation of sign extension (‘l.ext*’) instructions.  By
       default memory loads are used to perform sign extension.
  
! ‘-msfimm’
!      Enable generation of compare and set flag with immediate (‘l.sf*i’)
       instructions.  By default extra instructions will be generated to
       store the immediate to a register first.
  
! ‘-mshftimm’
!      Enable generation of shift with immediate (‘l.srai’, ‘l.srli’,
!      ‘l.slli’) instructions.  By default extra instructions will be
       generated to store the immediate to a register first.
  
! ‘-mcmodel=small’
       Generate OpenRISC code for the small model: The GOT is limited to
       64k.  This is the default model.
  
! ‘-mcmodel=large’
       Generate OpenRISC code for the large model: The GOT may grow up to
       4G in size.
  
*************** File: gcc.info,  Node: PDP-11 Options,
*** 27840,27889 ****
  
  These options are defined for the PDP-11:
  
! '-mfpu'
       Use hardware FPP floating point.  This is the default.  (FIS
       floating point on the PDP-11/40 is not supported.)  Implies -m45.
  
! '-msoft-float'
       Do not use hardware floating point.
  
! '-mac0'
       Return floating-point results in ac0 (fr0 in Unix assembler
       syntax).
  
! '-mno-ac0'
       Return floating-point results in memory.  This is the default.
  
! '-m40'
       Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
  
! '-m45'
       Generate code for a PDP-11/45.  This is the default.
  
! '-m10'
       Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
  
! '-mint16'
! '-mno-int32'
!      Use 16-bit 'int'.  This is the default.
  
! '-mint32'
! '-mno-int16'
!      Use 32-bit 'int'.
  
! '-msplit'
       Target has split instruction and data space.  Implies -m45.
  
! '-munix-asm'
       Use Unix assembler syntax.
  
! '-mdec-asm'
       Use DEC assembler syntax.
  
! '-mgnu-asm'
       Use GNU assembler syntax.  This is the default.
  
! '-mlra'
       Use the new LRA register allocator.  By default, the old "reload"
       allocator is used.
  
--- 27851,27900 ----
  
  These options are defined for the PDP-11:
  
! ‘-mfpu’
       Use hardware FPP floating point.  This is the default.  (FIS
       floating point on the PDP-11/40 is not supported.)  Implies -m45.
  
! ‘-msoft-float’
       Do not use hardware floating point.
  
! ‘-mac0’
       Return floating-point results in ac0 (fr0 in Unix assembler
       syntax).
  
! ‘-mno-ac0’
       Return floating-point results in memory.  This is the default.
  
! ‘-m40’
       Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
  
! ‘-m45’
       Generate code for a PDP-11/45.  This is the default.
  
! ‘-m10’
       Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
  
! ‘-mint16’
! ‘-mno-int32’
!      Use 16-bit ‘int’.  This is the default.
  
! ‘-mint32’
! ‘-mno-int16’
!      Use 32-bit ‘int’.
  
! ‘-msplit’
       Target has split instruction and data space.  Implies -m45.
  
! ‘-munix-asm’
       Use Unix assembler syntax.
  
! ‘-mdec-asm’
       Use DEC assembler syntax.
  
! ‘-mgnu-asm’
       Use GNU assembler syntax.  This is the default.
  
! ‘-mlra’
       Use the new LRA register allocator.  By default, the old "reload"
       allocator is used.
  
*************** File: gcc.info,  Node: PRU Options,  Nex
*** 27903,27909 ****
  
  These command-line options are defined for PRU target:
  
! '-minrt'
       Link with a minimum runtime environment.  This can significantly
       reduce the size of the final ELF binary, but some standard C
       runtime features are removed.
--- 27914,27920 ----
  
  These command-line options are defined for PRU target:
  
! ‘-minrt’
       Link with a minimum runtime environment.  This can significantly
       reduce the size of the final ELF binary, but some standard C
       runtime features are removed.
*************** These command-line options are defined f
*** 27914,27964 ****
       programmer to ensure that the source program will not use those
       features.
  
!      The minimal startup code would not pass 'argc' and 'argv' arguments
!      to 'main', so the latter must be declared as 'int main (void)'.
       This is already the norm for most firmware projects.
  
! '-mmcu=MCU'
       Specify the PRU hardware variant to use.  A correspondingly named
       spec file would be loaded, passing the memory region sizes to the
       linker and defining hardware-specific C macros.
  
!      Newlib provides only the 'sim' spec, intended for running
       regression tests using a simulator.  Specs for real hardware can be
       obtained by installing the
       GnuPruMcu (https://github.com/dinuxbg/gnuprumcu/) package.
  
! '-mno-relax'
!      Make GCC pass the '--no-relax' command-line option to the linker
!      instead of the '--relax' option.
  
! '-mloop'
       Allow (or do not allow) GCC to use the LOOP instruction.
  
! '-mabi=VARIANT'
!      Specify the ABI variant to output code for.  '-mabi=ti' selects the
!      unmodified TI ABI while '-mabi=gnu' selects a GNU variant that
       copes more naturally with certain GCC assumptions.  These are the
       differences:
  
!      'Function Pointer Size'
            TI ABI specifies that function (code) pointers are 16-bit,
            whereas GNU supports only 32-bit data and code pointers.
  
!      'Optional Return Value Pointer'
            Function return values larger than 64 bits are passed by using
            a hidden pointer as the first argument of the function.  TI
            ABI, though, mandates that the pointer can be NULL in case the
            caller is not using the returned value.  GNU always passes and
            expects a valid return value pointer.
  
!      The current '-mabi=ti' implementation simply raises a compile error
       when any of the above code constructs is detected.  As a
       consequence the standard C library cannot be built and it is
!      omitted when linking with '-mabi=ti'.
  
       Relaxation is a GNU feature and for safety reasons is disabled when
!      using '-mabi=ti'.  The TI toolchain does not emit relocations for
       QBBx instructions, so the GNU linker cannot adjust them when
       shortening adjacent LDI32 pseudo instructions.
  
--- 27925,27975 ----
       programmer to ensure that the source program will not use those
       features.
  
!      The minimal startup code would not pass ‘argc’ and ‘argv’ arguments
!      to ‘main’, so the latter must be declared as ‘int main (void)’.
       This is already the norm for most firmware projects.
  
! ‘-mmcu=MCU’
       Specify the PRU hardware variant to use.  A correspondingly named
       spec file would be loaded, passing the memory region sizes to the
       linker and defining hardware-specific C macros.
  
!      Newlib provides only the ‘sim’ spec, intended for running
       regression tests using a simulator.  Specs for real hardware can be
       obtained by installing the
       GnuPruMcu (https://github.com/dinuxbg/gnuprumcu/) package.
  
! ‘-mno-relax’
!      Make GCC pass the ‘--no-relax’ command-line option to the linker
!      instead of the ‘--relax’ option.
  
! ‘-mloop’
       Allow (or do not allow) GCC to use the LOOP instruction.
  
! ‘-mabi=VARIANT’
!      Specify the ABI variant to output code for.  ‘-mabi=ti’ selects the
!      unmodified TI ABI while ‘-mabi=gnu’ selects a GNU variant that
       copes more naturally with certain GCC assumptions.  These are the
       differences:
  
!      ‘Function Pointer Size’
            TI ABI specifies that function (code) pointers are 16-bit,
            whereas GNU supports only 32-bit data and code pointers.
  
!      ‘Optional Return Value Pointer’
            Function return values larger than 64 bits are passed by using
            a hidden pointer as the first argument of the function.  TI
            ABI, though, mandates that the pointer can be NULL in case the
            caller is not using the returned value.  GNU always passes and
            expects a valid return value pointer.
  
!      The current ‘-mabi=ti’ implementation simply raises a compile error
       when any of the above code constructs is detected.  As a
       consequence the standard C library cannot be built and it is
!      omitted when linking with ‘-mabi=ti’.
  
       Relaxation is a GNU feature and for safety reasons is disabled when
!      using ‘-mabi=ti’.  The TI toolchain does not emit relocations for
       QBBx instructions, so the GNU linker cannot adjust them when
       shortening adjacent LDI32 pseudo instructions.
  
*************** File: gcc.info,  Node: RISC-V Options,
*** 27970,28054 ****
  
  These command-line options are defined for RISC-V targets:
  
! '-mbranch-cost=N'
       Set the cost of branches to roughly N instructions.
  
! '-mplt'
! '-mno-plt'
       When generating PIC code, do or don't allow the use of PLTs.
!      Ignored for non-PIC. The default is '-mplt'.
  
! '-mabi=ABI-STRING'
       Specify integer and floating-point calling convention.  ABI-STRING
       contains two parts: the size of integer types and the registers
!      used for floating-point types.  For example '-march=rv64ifd
!      -mabi=lp64d' means that 'long' and pointers are 64-bit (implicitly
!      defining 'int' to be 32-bit), and that floating-point values up to
       64 bits wide are passed in F registers.  Contrast this with
!      '-march=rv64ifd -mabi=lp64f', which still allows the compiler to
       generate code that uses the F and D extensions but only allows
       floating-point values up to 32 bits long to be passed in registers;
!      or '-march=rv64ifd -mabi=lp64', in which no floating-point
       arguments will be passed in registers.
  
       The default for this argument is system dependent, users who want a
       specific calling convention should specify one explicitly.  The
!      valid calling conventions are: 'ilp32', 'ilp32f', 'ilp32d', 'lp64',
!      'lp64f', and 'lp64d'.  Some calling conventions are impossible to
!      implement on some ISAs: for example, '-march=rv32if -mabi=ilp32d'
       is invalid because the ABI requires 64-bit values be passed in F
       registers, but F registers are only 32 bits wide.  There are also
!      the 'ilp32e' ABI that can only be used with the 'rv32e'
!      architecture and the 'lp64e' ABI that can only be used with the
!      'rv64e'.  Those ABIs are not well specified at present, and are
       subject to change.
  
! '-mfdiv'
! '-mno-fdiv'
       Do or don't use hardware floating-point divide and square root
       instructions.  This requires the F or D extensions for
       floating-point registers.  The default is to use them if the
       specified architecture has these instructions.
  
! '-mdiv'
! '-mno-div'
       Do or don't use hardware instructions for integer division.  This
       requires the M extension.  The default is to use them if the
       specified architecture has these instructions.
  
! '-misa-spec=ISA-SPEC-STRING'
       Specify the version of the RISC-V Unprivileged (formerly
       User-Level) ISA specification to produce code conforming to.  The
       possibilities for ISA-SPEC-STRING are:
!      '2.2'
            Produce code conforming to version 2.2.
!      '20190608'
            Produce code conforming to version 20190608.
!      '20191213'
            Produce code conforming to version 20191213.
!      The default is '-misa-spec=20191213' unless GCC has been configured
!      with '--with-isa-spec=' specifying a different default version.
  
! '-march=ISA-STRING'
!      Generate code for given RISC-V ISA (e.g. 'rv64im').  ISA strings
!      must be lower-case.  Examples include 'rv64i', 'rv32g', 'rv32e',
!      and 'rv32imaf'.  Additionally, a special value 'help'
!      ('-march=help') is accepted to list all supported extensions.
  
       The syntax of the ISA string is defined as follows:
  
!      'The string must start with 'rv32' or 'rv64', followed by'
!           'i', 'e', or 'g', referred to as the base ISA.
!      'The subsequent part of the string is a list of extension names. Extension'
!           names can be categorized as multi-letter (e.g. 'zba') and
!           single-letter (e.g. 'v').  Single-letter extensions can appear
            consecutively, but multi-letter extensions must be separated
            by underscores.
!      'An underscore can appear anywhere after the base ISA. It has no specific'
            effect but is used to improve readability and can act as a
            separator.
!      'Extension names may include an optional version number, following the'
!           syntax '<major>p<minor>' or '<major>', (e.g. 'm2p1' or 'm2').
  
       Supported extension are listed below:
       ExtensionSupportedDescription
--- 27981,28065 ----
  
  These command-line options are defined for RISC-V targets:
  
! ‘-mbranch-cost=N’
       Set the cost of branches to roughly N instructions.
  
! ‘-mplt’
! ‘-mno-plt’
       When generating PIC code, do or don't allow the use of PLTs.
!      Ignored for non-PIC. The default is ‘-mplt’.
  
! ‘-mabi=ABI-STRING’
       Specify integer and floating-point calling convention.  ABI-STRING
       contains two parts: the size of integer types and the registers
!      used for floating-point types.  For example ‘-march=rv64ifd
!      -mabi=lp64d’ means that ‘long’ and pointers are 64-bit (implicitly
!      defining ‘int’ to be 32-bit), and that floating-point values up to
       64 bits wide are passed in F registers.  Contrast this with
!      ‘-march=rv64ifd -mabi=lp64f’, which still allows the compiler to
       generate code that uses the F and D extensions but only allows
       floating-point values up to 32 bits long to be passed in registers;
!      or ‘-march=rv64ifd -mabi=lp64’, in which no floating-point
       arguments will be passed in registers.
  
       The default for this argument is system dependent, users who want a
       specific calling convention should specify one explicitly.  The
!      valid calling conventions are: ‘ilp32’, ‘ilp32f’, ‘ilp32d’, ‘lp64’,
!      ‘lp64f’, and ‘lp64d’.  Some calling conventions are impossible to
!      implement on some ISAs: for example, ‘-march=rv32if -mabi=ilp32d’
       is invalid because the ABI requires 64-bit values be passed in F
       registers, but F registers are only 32 bits wide.  There are also
!      the ‘ilp32e’ ABI that can only be used with the ‘rv32e’
!      architecture and the ‘lp64e’ ABI that can only be used with the
!      ‘rv64e’.  Those ABIs are not well specified at present, and are
       subject to change.
  
! ‘-mfdiv’
! ‘-mno-fdiv’
       Do or don't use hardware floating-point divide and square root
       instructions.  This requires the F or D extensions for
       floating-point registers.  The default is to use them if the
       specified architecture has these instructions.
  
! ‘-mdiv’
! ‘-mno-div’
       Do or don't use hardware instructions for integer division.  This
       requires the M extension.  The default is to use them if the
       specified architecture has these instructions.
  
! ‘-misa-spec=ISA-SPEC-STRING’
       Specify the version of the RISC-V Unprivileged (formerly
       User-Level) ISA specification to produce code conforming to.  The
       possibilities for ISA-SPEC-STRING are:
!      ‘2.2’
            Produce code conforming to version 2.2.
!      ‘20190608’
            Produce code conforming to version 20190608.
!      ‘20191213’
            Produce code conforming to version 20191213.
!      The default is ‘-misa-spec=20191213’ unless GCC has been configured
!      with ‘--with-isa-spec=’ specifying a different default version.
  
! ‘-march=ISA-STRING’
!      Generate code for given RISC-V ISA (e.g. ‘rv64im’).  ISA strings
!      must be lower-case.  Examples include ‘rv64i’, ‘rv32g’, ‘rv32e’,
!      and ‘rv32imaf’.  Additionally, a special value ‘help’
!      (‘-march=help’) is accepted to list all supported extensions.
  
       The syntax of the ISA string is defined as follows:
  
!      ‘The string must start with ‘rv32’ or ‘rv64’, followed by’
!           ‘i’, ‘e’, or ‘g’, referred to as the base ISA.
!      ‘The subsequent part of the string is a list of extension names. Extension’
!           names can be categorized as multi-letter (e.g. ‘zba’) and
!           single-letter (e.g. ‘v’).  Single-letter extensions can appear
            consecutively, but multi-letter extensions must be separated
            by underscores.
!      ‘An underscore can appear anywhere after the base ISA. It has no specific’
            effect but is used to improve readability and can act as a
            separator.
!      ‘Extension names may include an optional version number, following the’
!           syntax ‘<major>p<minor>’ or ‘<major>’, (e.g. ‘m2p1’ or ‘m2’).
  
       Supported extension are listed below:
       ExtensionSupportedDescription
*************** These command-line options are defined f
*** 28058,28066 ****
               2.1     
       e       2.0     Reduced base integer extension.
                       
!      g       -       General-purpose computing base extension, 'g' will
!                      expand to 'i', 'm', 'a', 'f', 'd', 'zicsr' and
!                      'zifencei'.
                       
       m       2.0     Integer multiplication and division extension.
                       
--- 28069,28077 ----
               2.1     
       e       2.0     Reduced base integer extension.
                       
!      g       -       General-purpose computing base extension, ‘g’ will
!                      expand to ‘i’, ‘m’, ‘a’, ‘f’, ‘d’, ‘zicsr’ and
!                      ‘zifencei’.
                       
       m       2.0     Integer multiplication and division extension.
                       
*************** These command-line options are defined f
*** 28206,28229 ****
                       
       zvksh   1.0     Vector SM3 Secure Hash extension.
                       
!      zvkn    1.0     Vector NIST Algorithm Suite extension, 'zvkn' will
!                      expand to 'zvkned', 'zvknhb', 'zvkb' and 'zvkt'.
                       
       zvknc   1.0     Vector NIST Algorithm Suite with carryless multiply
!                      extension, 'zvknc' will expand to 'zvkn' and 'zvbc'.
                       
!      zvkng   1.0     Vector NIST Algorithm Suite with GCM extension, 'zvkng'
!                      will expand to 'zvkn' and 'zvkg'.
                       
!      zvks    1.0     Vector ShangMi algorithm suite extension, 'zvks' will
!                      expand to 'zvksed', 'zvksh', 'zvkb' and 'zvkt'.
                       
       zvksc   1.0     Vector ShangMi algorithm suite with carryless
!                      multiplication extension, 'zvksc' will expand to 'zvks'
!                      and 'zvbc'.
                       
       zvksg   1.0     Vector ShangMi algorithm suite with GCM extension,
!                      'zvksg' will expand to 'zvks' and 'zvkg'.
                       
       zvkt    1.0     Vector data independent execution latency extension.
                       
--- 28217,28240 ----
                       
       zvksh   1.0     Vector SM3 Secure Hash extension.
                       
!      zvkn    1.0     Vector NIST Algorithm Suite extension, ‘zvkn’ will
!                      expand to ‘zvkned’, ‘zvknhb’, ‘zvkb’ and ‘zvkt’.
                       
       zvknc   1.0     Vector NIST Algorithm Suite with carryless multiply
!                      extension, ‘zvknc’ will expand to ‘zvkn’ and ‘zvbc’.
                       
!      zvkng   1.0     Vector NIST Algorithm Suite with GCM extension, ‘zvkng’
!                      will expand to ‘zvkn’ and ‘zvkg’.
                       
!      zvks    1.0     Vector ShangMi algorithm suite extension, ‘zvks’ will
!                      expand to ‘zvksed’, ‘zvksh’, ‘zvkb’ and ‘zvkt’.
                       
       zvksc   1.0     Vector ShangMi algorithm suite with carryless
!                      multiplication extension, ‘zvksc’ will expand to ‘zvks’
!                      and ‘zvbc’.
                       
       zvksg   1.0     Vector ShangMi algorithm suite with GCM extension,
!                      ‘zvksg’ will expand to ‘zvks’ and ‘zvkg’.
                       
       zvkt    1.0     Vector data independent execution latency extension.
                       
*************** These command-line options are defined f
*** 28316,28416 ****
       xventanacondops1.0Ventana integer conditional operations extension.
                       
  
!      When '-march=' is not specified, use the setting from '-mcpu'.
  
!      If both '-march' and '-mcpu=' are not specified, the default for
       this argument is system dependent, users who want a specific
       architecture extensions should specify one explicitly.
  
! '-mcpu=PROCESSOR-STRING'
       Use architecture of and optimize the output for the given
       processor, specified by particular CPU name.  Permissible values
!      for this option are: 'sifive-e20', 'sifive-e21', 'sifive-e24',
!      'sifive-e31', 'sifive-e34', 'sifive-e76', 'sifive-s21',
!      'sifive-s51', 'sifive-s54', 'sifive-s76', 'sifive-u54',
!      'sifive-u74', 'sifive-x280', 'sifive-xp450', 'sifive-x670'.
  
!      Note that '-mcpu' does not override '-march' or '-mtune'.
  
! '-mtune=PROCESSOR-STRING'
       Optimize the output for the given processor, specified by
       microarchitecture or particular CPU name.  Permissible values for
!      this option are: 'rocket', 'sifive-3-series', 'sifive-5-series',
!      'sifive-7-series', 'thead-c906', 'size', 'sifive-p400-series',
!      'sifive-p600-series', and all valid options for '-mcpu='.
  
!      When '-mtune=' is not specified, use the setting from '-mcpu', the
!      default is 'rocket' if both are not specified.
  
!      The 'size' choice is not intended for use by end-users.  This is
!      used when '-Os' is specified.  It overrides the instruction cost
!      info provided by '-mtune=', but does not override the pipeline
       info.  This helps reduce code size while still giving good
       performance.
  
! '-mpreferred-stack-boundary=NUM'
       Attempt to keep the stack boundary aligned to a 2 raised to NUM
!      byte boundary.  If '-mpreferred-stack-boundary' is not specified,
       the default is 4 (16 bytes or 128-bits).
  
       *Warning:* If you use this switch, then you must build all modules
       with the same value, including any libraries.  This includes the
       system libraries and startup modules.
  
! '-msmall-data-limit=N'
       Put global and static data smaller than N bytes into a special
       section (on some targets).
  
! '-msave-restore'
! '-mno-save-restore'
       Do or don't use smaller but slower prologue and epilogue code that
       uses library function calls.  The default is to use fast inline
       prologues and epilogues.
  
! '-mmovcc'
! '-mno-movcc'
       Do or don't produce branchless conditional-move code sequences even
       with targets that do not have specific instructions for conditional
       operations.  If enabled, sequences of ALU operations are produced
       using base integer ISA instructions where profitable.
  
! '-minline-atomics'
! '-mno-inline-atomics'
       Do or don't use smaller but slower subword atomic emulation code
       that uses libatomic function calls.  The default is to use fast
       inline subword atomics that do not require libatomic.
  
! '-minline-strlen'
! '-mno-inline-strlen'
       Do or do not attempt to inline strlen calls if possible.  Inlining
       will only be done if the string is properly aligned and
       instructions for accelerated processing are available.  The default
       is to not inline strlen calls.
  
! '-minline-strcmp'
! '-mno-inline-strcmp'
       Do or do not attempt to inline strcmp calls if possible.  Inlining
       will only be done if the strings are properly aligned and
       instructions for accelerated processing are available.  The default
       is to not inline strcmp calls.
  
!      The '--param riscv-strcmp-inline-limit=N' parameter controls the
       maximum number of bytes compared by the inlined code.  The default
       value is 64.
  
! '-minline-strncmp'
! '-mno-inline-strncmp'
       Do or do not attempt to inline strncmp calls if possible.  Inlining
       will only be done if the strings are properly aligned and
       instructions for accelerated processing are available.  The default
       is to not inline strncmp calls.
  
!      The '--param riscv-strcmp-inline-limit=N' parameter controls the
       maximum number of bytes compared by the inlined code.  The default
       value is 64.
  
! '-mshorten-memrefs'
! '-mno-shorten-memrefs'
       Do or do not attempt to make more use of compressed load/store
       instructions by replacing a load/store of 'base register + large
       offset' with a new load/store of 'new base + small offset'.  If the
--- 28327,28427 ----
       xventanacondops1.0Ventana integer conditional operations extension.
                       
  
!      When ‘-march=’ is not specified, use the setting from ‘-mcpu’.
  
!      If both ‘-march’ and ‘-mcpu=’ are not specified, the default for
       this argument is system dependent, users who want a specific
       architecture extensions should specify one explicitly.
  
! ‘-mcpu=PROCESSOR-STRING’
       Use architecture of and optimize the output for the given
       processor, specified by particular CPU name.  Permissible values
!      for this option are: ‘sifive-e20’, ‘sifive-e21’, ‘sifive-e24’,
!      ‘sifive-e31’, ‘sifive-e34’, ‘sifive-e76’, ‘sifive-s21’,
!      ‘sifive-s51’, ‘sifive-s54’, ‘sifive-s76’, ‘sifive-u54’,
!      ‘sifive-u74’, ‘sifive-x280’, ‘sifive-xp450’, ‘sifive-x670’.
  
!      Note that ‘-mcpu’ does not override ‘-march’ or ‘-mtune’.
  
! ‘-mtune=PROCESSOR-STRING’
       Optimize the output for the given processor, specified by
       microarchitecture or particular CPU name.  Permissible values for
!      this option are: ‘rocket’, ‘sifive-3-series’, ‘sifive-5-series’,
!      ‘sifive-7-series’, ‘thead-c906’, ‘size’, ‘sifive-p400-series’,
!      ‘sifive-p600-series’, and all valid options for ‘-mcpu=’.
  
!      When ‘-mtune=’ is not specified, use the setting from ‘-mcpu’, the
!      default is ‘rocket’ if both are not specified.
  
!      The ‘size’ choice is not intended for use by end-users.  This is
!      used when ‘-Os’ is specified.  It overrides the instruction cost
!      info provided by ‘-mtune=’, but does not override the pipeline
       info.  This helps reduce code size while still giving good
       performance.
  
! ‘-mpreferred-stack-boundary=NUM’
       Attempt to keep the stack boundary aligned to a 2 raised to NUM
!      byte boundary.  If ‘-mpreferred-stack-boundary’ is not specified,
       the default is 4 (16 bytes or 128-bits).
  
       *Warning:* If you use this switch, then you must build all modules
       with the same value, including any libraries.  This includes the
       system libraries and startup modules.
  
! ‘-msmall-data-limit=N’
       Put global and static data smaller than N bytes into a special
       section (on some targets).
  
! ‘-msave-restore’
! ‘-mno-save-restore’
       Do or don't use smaller but slower prologue and epilogue code that
       uses library function calls.  The default is to use fast inline
       prologues and epilogues.
  
! ‘-mmovcc’
! ‘-mno-movcc’
       Do or don't produce branchless conditional-move code sequences even
       with targets that do not have specific instructions for conditional
       operations.  If enabled, sequences of ALU operations are produced
       using base integer ISA instructions where profitable.
  
! ‘-minline-atomics’
! ‘-mno-inline-atomics’
       Do or don't use smaller but slower subword atomic emulation code
       that uses libatomic function calls.  The default is to use fast
       inline subword atomics that do not require libatomic.
  
! ‘-minline-strlen’
! ‘-mno-inline-strlen’
       Do or do not attempt to inline strlen calls if possible.  Inlining
       will only be done if the string is properly aligned and
       instructions for accelerated processing are available.  The default
       is to not inline strlen calls.
  
! ‘-minline-strcmp’
! ‘-mno-inline-strcmp’
       Do or do not attempt to inline strcmp calls if possible.  Inlining
       will only be done if the strings are properly aligned and
       instructions for accelerated processing are available.  The default
       is to not inline strcmp calls.
  
!      The ‘--param riscv-strcmp-inline-limit=N’ parameter controls the
       maximum number of bytes compared by the inlined code.  The default
       value is 64.
  
! ‘-minline-strncmp’
! ‘-mno-inline-strncmp’
       Do or do not attempt to inline strncmp calls if possible.  Inlining
       will only be done if the strings are properly aligned and
       instructions for accelerated processing are available.  The default
       is to not inline strncmp calls.
  
!      The ‘--param riscv-strcmp-inline-limit=N’ parameter controls the
       maximum number of bytes compared by the inlined code.  The default
       value is 64.
  
! ‘-mshorten-memrefs’
! ‘-mno-shorten-memrefs’
       Do or do not attempt to make more use of compressed load/store
       instructions by replacing a load/store of 'base register + large
       offset' with a new load/store of 'new base + small offset'.  If the
*************** These command-line options are defined f
*** 28418,28437 ****
       load/store can be compressed.  Currently targets 32-bit integer
       load/stores only.
  
! '-mstrict-align'
! '-mno-strict-align'
       Do not or do generate unaligned memory accesses.  The default is
       set depending on whether the processor we are optimizing for
       supports fast unaligned access or not.
  
! '-mcmodel=medlow'
       Generate code for the medium-low code model.  The program and its
       statically defined symbols must lie within a single 2 GiB address
!      range and must lie between absolute addresses -2 GiB and +2 GiB.
       Programs can be statically or dynamically linked.  This is the
       default code model.
  
! '-mcmodel=medany'
       Generate code for the medium-any code model.  The program and its
       statically defined symbols must be within any single 2 GiB address
       range.  Programs can be statically or dynamically linked.
--- 28429,28448 ----
       load/store can be compressed.  Currently targets 32-bit integer
       load/stores only.
  
! ‘-mstrict-align’
! ‘-mno-strict-align’
       Do not or do generate unaligned memory accesses.  The default is
       set depending on whether the processor we are optimizing for
       supports fast unaligned access or not.
  
! ‘-mcmodel=medlow’
       Generate code for the medium-low code model.  The program and its
       statically defined symbols must lie within a single 2 GiB address
!      range and must lie between absolute addresses −2 GiB and +2 GiB.
       Programs can be statically or dynamically linked.  This is the
       default code model.
  
! ‘-mcmodel=medany’
       Generate code for the medium-any code model.  The program and its
       statically defined symbols must be within any single 2 GiB address
       range.  Programs can be statically or dynamically linked.
*************** These command-line options are defined f
*** 28440,28500 ****
       position-independent, but is not guaranteed to function correctly
       when linked into position-independent executables or libraries.
  
! '-mexplicit-relocs'
! '-mno-exlicit-relocs'
       Use or do not use assembler relocation operators when dealing with
       symbolic addresses.  The alternative is to use assembler macros
       instead, which may limit optimization.
  
! '-mrelax'
! '-mno-relax'
       Take advantage of linker relaxations to reduce the number of
       instructions required to materialize symbol addresses.  The default
       is to take advantage of linker relaxations.
  
! '-mriscv-attribute'
! '-mno-riscv-attribute'
       Emit (do not emit) RISC-V attribute to record extra information
       into ELF objects.  This feature requires at least binutils 2.32.
  
! '-mcsr-check'
! '-mno-csr-check'
       Enables or disables the CSR checking.
  
! '-malign-data=TYPE'
       Control how GCC aligns variables and constants of array, structure,
!      or union types.  Supported values for TYPE are 'xlen' which uses x
!      register width as the alignment value, and 'natural' which uses
!      natural alignment.  'xlen' is the default.
  
! '-mbig-endian'
       Generate big-endian code.  This is the default when GCC is
!      configured for a 'riscv64be-*-*' or 'riscv32be-*-*' target.
  
! '-mlittle-endian'
       Generate little-endian code.  This is the default when GCC is
!      configured for a 'riscv64-*-*' or 'riscv32-*-*' but not a
!      'riscv64be-*-*' or 'riscv32be-*-*' target.
  
! '-mstack-protector-guard=GUARD'
! '-mstack-protector-guard-reg=REG'
! '-mstack-protector-guard-offset=OFFSET'
       Generate stack protection code using canary at GUARD.  Supported
!      locations are 'global' for a global canary or 'tls' for per-thread
       canary in the TLS block.
  
       With the latter choice the options
!      '-mstack-protector-guard-reg=REG' and
!      '-mstack-protector-guard-offset=OFFSET' furthermore specify which
       register to use as base register for reading the canary, and from
       what offset from that base register.  There is no default register
       or offset as this is entirely for use within the Linux kernel.
  
! '-mtls-dialect=desc'
       Use TLS descriptors as the thread-local storage mechanism for
       dynamic accesses of TLS variables.
  
! '-mtls-dialect=trad'
       Use traditional TLS as the thread-local storage mechanism for
       dynamic accesses of TLS variables.  This is the default.
  
--- 28451,28511 ----
       position-independent, but is not guaranteed to function correctly
       when linked into position-independent executables or libraries.
  
! ‘-mexplicit-relocs’
! ‘-mno-exlicit-relocs’
       Use or do not use assembler relocation operators when dealing with
       symbolic addresses.  The alternative is to use assembler macros
       instead, which may limit optimization.
  
! ‘-mrelax’
! ‘-mno-relax’
       Take advantage of linker relaxations to reduce the number of
       instructions required to materialize symbol addresses.  The default
       is to take advantage of linker relaxations.
  
! ‘-mriscv-attribute’
! ‘-mno-riscv-attribute’
       Emit (do not emit) RISC-V attribute to record extra information
       into ELF objects.  This feature requires at least binutils 2.32.
  
! ‘-mcsr-check’
! ‘-mno-csr-check’
       Enables or disables the CSR checking.
  
! ‘-malign-data=TYPE’
       Control how GCC aligns variables and constants of array, structure,
!      or union types.  Supported values for TYPE are ‘xlen’ which uses x
!      register width as the alignment value, and ‘natural’ which uses
!      natural alignment.  ‘xlen’ is the default.
  
! ‘-mbig-endian’
       Generate big-endian code.  This is the default when GCC is
!      configured for a ‘riscv64be-*-*’ or ‘riscv32be-*-*’ target.
  
! ‘-mlittle-endian’
       Generate little-endian code.  This is the default when GCC is
!      configured for a ‘riscv64-*-*’ or ‘riscv32-*-*’ but not a
!      ‘riscv64be-*-*’ or ‘riscv32be-*-*’ target.
  
! ‘-mstack-protector-guard=GUARD’
! ‘-mstack-protector-guard-reg=REG’
! ‘-mstack-protector-guard-offset=OFFSET’
       Generate stack protection code using canary at GUARD.  Supported
!      locations are ‘global’ for a global canary or ‘tls’ for per-thread
       canary in the TLS block.
  
       With the latter choice the options
!      ‘-mstack-protector-guard-reg=REG’ and
!      ‘-mstack-protector-guard-offset=OFFSET’ furthermore specify which
       register to use as base register for reading the canary, and from
       what offset from that base register.  There is no default register
       or offset as this is entirely for use within the Linux kernel.
  
! ‘-mtls-dialect=desc’
       Use TLS descriptors as the thread-local storage mechanism for
       dynamic accesses of TLS variables.
  
! ‘-mtls-dialect=trad’
       Use traditional TLS as the thread-local storage mechanism for
       dynamic accesses of TLS variables.  This is the default.
  
*************** File: gcc.info,  Node: RL78 Options,  Ne
*** 28504,28535 ****
  3.19.41 RL78 Options
  --------------------
  
! '-msim'
       Links in additional target libraries to support operation within a
       simulator.
  
! '-mmul=none'
! '-mmul=g10'
! '-mmul=g13'
! '-mmul=g14'
! '-mmul=rl78'
       Specifies the type of hardware multiplication and division support
!      to be used.  The simplest is 'none', which uses software for both
!      multiplication and division.  This is the default.  The 'g13' value
       is for the hardware multiply/divide peripheral found on the
!      RL78/G13 (S2 core) targets.  The 'g14' value selects the use of the
       multiplication and division instructions supported by the RL78/G14
!      (S3 core) parts.  The value 'rl78' is an alias for 'g14' and the
!      value 'mg10' is an alias for 'none'.
  
       In addition a C preprocessor macro is defined, based upon the
!      setting of this option.  Possible values are: '__RL78_MUL_NONE__',
!      '__RL78_MUL_G13__' or '__RL78_MUL_G14__'.
  
! '-mcpu=g10'
! '-mcpu=g13'
! '-mcpu=g14'
! '-mcpu=rl78'
       Specifies the RL78 core to target.  The default is the G14 core,
       also known as an S3 core or just RL78.  The G13 or S2 core does not
       have multiply or divide instructions, instead it uses a hardware
--- 28515,28546 ----
  3.19.41 RL78 Options
  --------------------
  
! ‘-msim’
       Links in additional target libraries to support operation within a
       simulator.
  
! ‘-mmul=none’
! ‘-mmul=g10’
! ‘-mmul=g13’
! ‘-mmul=g14’
! ‘-mmul=rl78’
       Specifies the type of hardware multiplication and division support
!      to be used.  The simplest is ‘none’, which uses software for both
!      multiplication and division.  This is the default.  The ‘g13’ value
       is for the hardware multiply/divide peripheral found on the
!      RL78/G13 (S2 core) targets.  The ‘g14’ value selects the use of the
       multiplication and division instructions supported by the RL78/G14
!      (S3 core) parts.  The value ‘rl78’ is an alias for ‘g14’ and the
!      value ‘mg10’ is an alias for ‘none’.
  
       In addition a C preprocessor macro is defined, based upon the
!      setting of this option.  Possible values are: ‘__RL78_MUL_NONE__’,
!      ‘__RL78_MUL_G13__’ or ‘__RL78_MUL_G14__’.
  
! ‘-mcpu=g10’
! ‘-mcpu=g13’
! ‘-mcpu=g14’
! ‘-mcpu=rl78’
       Specifies the RL78 core to target.  The default is the G14 core,
       also known as an S3 core or just RL78.  The G13 or S2 core does not
       have multiply or divide instructions, instead it uses a hardware
*************** File: gcc.info,  Node: RL78 Options,  Ne
*** 28538,28550 ****
  
       If this option is set it also selects the type of hardware multiply
       support to use, unless this is overridden by an explicit
!      '-mmul=none' option on the command line.  Thus specifying
!      '-mcpu=g13' enables the use of the G13 hardware multiply peripheral
!      and specifying '-mcpu=g10' disables the use of hardware
       multiplications altogether.
  
       Note, although the RL78/G14 core is the default target, specifying
!      '-mcpu=g14' or '-mcpu=rl78' on the command line does change the
       behavior of the toolchain since it also enables G14 hardware
       multiply support.  If these options are not specified on the
       command line then software multiplication routines will be used
--- 28549,28561 ----
  
       If this option is set it also selects the type of hardware multiply
       support to use, unless this is overridden by an explicit
!      ‘-mmul=none’ option on the command line.  Thus specifying
!      ‘-mcpu=g13’ enables the use of the G13 hardware multiply peripheral
!      and specifying ‘-mcpu=g10’ disables the use of hardware
       multiplications altogether.
  
       Note, although the RL78/G14 core is the default target, specifying
!      ‘-mcpu=g14’ or ‘-mcpu=rl78’ on the command line does change the
       behavior of the toolchain since it also enables G14 hardware
       multiply support.  If these options are not specified on the
       command line then software multiplication routines will be used
*************** File: gcc.info,  Node: RL78 Options,  Ne
*** 28553,28582 ****
       multiply and divide support.
  
       In addition a C preprocessor macro is defined, based upon the
!      setting of this option.  Possible values are: '__RL78_G10__',
!      '__RL78_G13__' or '__RL78_G14__'.
  
! '-mg10'
! '-mg13'
! '-mg14'
! '-mrl78'
!      These are aliases for the corresponding '-mcpu=' option.  They are
       provided for backwards compatibility.
  
! '-mallregs'
       Allow the compiler to use all of the available registers.  By
!      default registers 'r24..r31' are reserved for use in interrupt
       handlers.  With this option enabled these registers can be used in
       ordinary functions as well.
  
! '-m64bit-doubles'
! '-m32bit-doubles'
!      Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
!      bits ('-m32bit-doubles') in size.  The default is
!      '-m32bit-doubles'.
  
! '-msave-mduc-in-interrupts'
! '-mno-save-mduc-in-interrupts'
       Specifies that interrupt handler functions should preserve the MDUC
       registers.  This is only necessary if normal code might use the
       MDUC registers, for example because it performs multiplication and
--- 28564,28593 ----
       multiply and divide support.
  
       In addition a C preprocessor macro is defined, based upon the
!      setting of this option.  Possible values are: ‘__RL78_G10__’,
!      ‘__RL78_G13__’ or ‘__RL78_G14__’.
  
! ‘-mg10’
! ‘-mg13’
! ‘-mg14’
! ‘-mrl78’
!      These are aliases for the corresponding ‘-mcpu=’ option.  They are
       provided for backwards compatibility.
  
! ‘-mallregs’
       Allow the compiler to use all of the available registers.  By
!      default registers ‘r24..r31’ are reserved for use in interrupt
       handlers.  With this option enabled these registers can be used in
       ordinary functions as well.
  
! ‘-m64bit-doubles’
! ‘-m32bit-doubles’
!      Make the ‘double’ data type be 64 bits (‘-m64bit-doubles’) or 32
!      bits (‘-m32bit-doubles’) in size.  The default is
!      ‘-m32bit-doubles’.
  
! ‘-msave-mduc-in-interrupts’
! ‘-mno-save-mduc-in-interrupts’
       Specifies that interrupt handler functions should preserve the MDUC
       registers.  This is only necessary if normal code might use the
       MDUC registers, for example because it performs multiplication and
*************** File: gcc.info,  Node: RS/6000 and Power
*** 28593,28681 ****
  3.19.42 IBM RS/6000 and PowerPC Options
  ---------------------------------------
  
! These '-m' options are defined for the IBM RS/6000 and PowerPC:
! '-mpowerpc-gpopt'
! '-mno-powerpc-gpopt'
! '-mpowerpc-gfxopt'
! '-mno-powerpc-gfxopt'
! '-mpowerpc64'
! '-mno-powerpc64'
! '-mmfcrf'
! '-mno-mfcrf'
! '-mpopcntb'
! '-mno-popcntb'
! '-mpopcntd'
! '-mno-popcntd'
! '-mfprnd'
! '-mno-fprnd'
! '-mcmpb'
! '-mno-cmpb'
! '-mhard-dfp'
! '-mno-hard-dfp'
       You use these options to specify which instructions are available
       on the processor you are using.  The default value of these options
       is determined when configuring GCC.  Specifying the
!      '-mcpu=CPU_TYPE' overrides the specification of these options.  We
!      recommend you use the '-mcpu=CPU_TYPE' option rather than the
       options listed above.
  
!      Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
       architecture instructions in the General Purpose group, including
!      floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
       GCC to use the optional PowerPC architecture instructions in the
       Graphics group, including floating-point select.
  
!      The '-mmfcrf' option allows GCC to generate the move from condition
       register field instruction implemented on the POWER4 processor and
       other processors that support the PowerPC V2.01 architecture.  The
!      '-mpopcntb' option allows GCC to generate the popcount and
       double-precision FP reciprocal estimate instruction implemented on
       the POWER5 processor and other processors that support the PowerPC
!      V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
       the popcount instruction implemented on the POWER7 processor and
       other processors that support the PowerPC V2.06 architecture.  The
!      '-mfprnd' option allows GCC to generate the FP round to integer
       instructions implemented on the POWER5+ processor and other
       processors that support the PowerPC V2.03 architecture.  The
!      '-mcmpb' option allows GCC to generate the compare bytes
       instruction implemented on the POWER6 processor and other
       processors that support the PowerPC V2.05 architecture.  The
!      '-mhard-dfp' option allows GCC to generate the decimal
       floating-point instructions implemented on some POWER processors.
  
!      The '-mpowerpc64' option allows GCC to generate the additional
       64-bit instructions that are found in the full PowerPC64
       architecture and to treat GPRs as 64-bit, doubleword quantities.
!      GCC defaults to '-mno-powerpc64'.
  
! '-mcpu=CPU_TYPE'
       Set architecture type, register usage, and instruction scheduling
       parameters for machine type CPU_TYPE.  Supported values for
!      CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
!      '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
!      '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
!      '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
!      'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
!      'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
!      'power7', 'power8', 'power9', 'power10', 'power11', 'powerpc',
!      'powerpc64', 'powerpc64le', 'rs64', and 'native'.
  
!      '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
       pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
       64-bit little endian PowerPC architecture machine types, with an
       appropriate, generic processor model assumed for scheduling
       purposes.
  
!      Specifying 'native' as cpu type detects and selects the
       architecture option that corresponds to the host processor of the
!      system performing the compilation.  '-mcpu=native' has no effect if
       GCC does not recognize the processor.
  
       The other options specify a specific processor.  Code generated
       under those options runs best on that processor, and may not run at
       all on others.
  
!      The '-mcpu' options automatically enable or disable the following
       options:
  
            -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
--- 28604,28692 ----
  3.19.42 IBM RS/6000 and PowerPC Options
  ---------------------------------------
  
! These ‘-m’ options are defined for the IBM RS/6000 and PowerPC:
! ‘-mpowerpc-gpopt’
! ‘-mno-powerpc-gpopt’
! ‘-mpowerpc-gfxopt’
! ‘-mno-powerpc-gfxopt’
! ‘-mpowerpc64’
! ‘-mno-powerpc64’
! ‘-mmfcrf’
! ‘-mno-mfcrf’
! ‘-mpopcntb’
! ‘-mno-popcntb’
! ‘-mpopcntd’
! ‘-mno-popcntd’
! ‘-mfprnd’
! ‘-mno-fprnd’
! ‘-mcmpb’
! ‘-mno-cmpb’
! ‘-mhard-dfp’
! ‘-mno-hard-dfp’
       You use these options to specify which instructions are available
       on the processor you are using.  The default value of these options
       is determined when configuring GCC.  Specifying the
!      ‘-mcpu=CPU_TYPE’ overrides the specification of these options.  We
!      recommend you use the ‘-mcpu=CPU_TYPE’ option rather than the
       options listed above.
  
!      Specifying ‘-mpowerpc-gpopt’ allows GCC to use the optional PowerPC
       architecture instructions in the General Purpose group, including
!      floating-point square root.  Specifying ‘-mpowerpc-gfxopt’ allows
       GCC to use the optional PowerPC architecture instructions in the
       Graphics group, including floating-point select.
  
!      The ‘-mmfcrf’ option allows GCC to generate the move from condition
       register field instruction implemented on the POWER4 processor and
       other processors that support the PowerPC V2.01 architecture.  The
!      ‘-mpopcntb’ option allows GCC to generate the popcount and
       double-precision FP reciprocal estimate instruction implemented on
       the POWER5 processor and other processors that support the PowerPC
!      V2.02 architecture.  The ‘-mpopcntd’ option allows GCC to generate
       the popcount instruction implemented on the POWER7 processor and
       other processors that support the PowerPC V2.06 architecture.  The
!      ‘-mfprnd’ option allows GCC to generate the FP round to integer
       instructions implemented on the POWER5+ processor and other
       processors that support the PowerPC V2.03 architecture.  The
!      ‘-mcmpb’ option allows GCC to generate the compare bytes
       instruction implemented on the POWER6 processor and other
       processors that support the PowerPC V2.05 architecture.  The
!      ‘-mhard-dfp’ option allows GCC to generate the decimal
       floating-point instructions implemented on some POWER processors.
  
!      The ‘-mpowerpc64’ option allows GCC to generate the additional
       64-bit instructions that are found in the full PowerPC64
       architecture and to treat GPRs as 64-bit, doubleword quantities.
!      GCC defaults to ‘-mno-powerpc64’.
  
! ‘-mcpu=CPU_TYPE’
       Set architecture type, register usage, and instruction scheduling
       parameters for machine type CPU_TYPE.  Supported values for
!      CPU_TYPE are ‘401’, ‘403’, ‘405’, ‘405fp’, ‘440’, ‘440fp’, ‘464’,
!      ‘464fp’, ‘476’, ‘476fp’, ‘505’, ‘601’, ‘602’, ‘603’, ‘603e’, ‘604’,
!      ‘604e’, ‘620’, ‘630’, ‘740’, ‘7400’, ‘7450’, ‘750’, ‘801’, ‘821’,
!      ‘823’, ‘860’, ‘970’, ‘8540’, ‘a2’, ‘e300c2’, ‘e300c3’, ‘e500mc’,
!      ‘e500mc64’, ‘e5500’, ‘e6500’, ‘ec603e’, ‘G3’, ‘G4’, ‘G5’, ‘titan’,
!      ‘power3’, ‘power4’, ‘power5’, ‘power5+’, ‘power6’, ‘power6x’,
!      ‘power7’, ‘power8’, ‘power9’, ‘power10’, ‘power11’, ‘powerpc’,
!      ‘powerpc64’, ‘powerpc64le’, ‘rs64’, and ‘native’.
  
!      ‘-mcpu=powerpc’, ‘-mcpu=powerpc64’, and ‘-mcpu=powerpc64le’ specify
       pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
       64-bit little endian PowerPC architecture machine types, with an
       appropriate, generic processor model assumed for scheduling
       purposes.
  
!      Specifying ‘native’ as cpu type detects and selects the
       architecture option that corresponds to the host processor of the
!      system performing the compilation.  ‘-mcpu=native’ has no effect if
       GCC does not recognize the processor.
  
       The other options specify a specific processor.  Code generated
       under those options runs best on that processor, and may not run at
       all on others.
  
!      The ‘-mcpu’ options automatically enable or disable the following
       options:
  
            -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
*************** These '-m' options are defined for the I
*** 28691,28842 ****
       compiler versions, depending on what setting seems to produce
       optimal code for that CPU; it doesn't necessarily reflect the
       actual hardware's capabilities.  If you wish to set an individual
!      option to a particular value, you may specify it after the '-mcpu'
!      option, like '-mcpu=970 -mno-altivec'.
  
!      On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
!      or disabled by the '-mcpu' option at present because AIX does not
       have full support for these options.  You may still enable or
       disable them individually if you're sure it'll work in your
       environment.
  
! '-mtune=CPU_TYPE'
       Set the instruction scheduling parameters for machine type
       CPU_TYPE, but do not set the architecture type or register usage,
!      as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
!      for '-mtune' as for '-mcpu'.  If both are specified, the code
!      generated uses the architecture and registers set by '-mcpu', but
!      the scheduling parameters set by '-mtune'.
  
! '-mcmodel=small'
       Generate PowerPC64 code for the small model: The TOC is limited to
       64k.
  
! '-mcmodel=medium'
       Generate PowerPC64 code for the medium model: The TOC and other
       static data may be up to a total of 4G in size.  This is the
       default for 64-bit Linux.
  
! '-mcmodel=large'
       Generate PowerPC64 code for the large model: The TOC may be up to
       4G in size.  Other data and code is only limited by the 64-bit
       address space.
  
! '-maltivec'
! '-mno-altivec'
       Generate code that uses (does not use) AltiVec instructions, and
       also enable the use of built-in functions that allow more direct
       access to the AltiVec instruction set.  You may also need to set
!      '-mabi=altivec' to adjust the current ABI with AltiVec ABI
       enhancements.
  
!      When '-maltivec' is used, the element order for AltiVec intrinsics
!      such as 'vec_splat', 'vec_extract', and 'vec_insert' match array
       element order corresponding to the endianness of the target.  That
       is, element zero identifies the leftmost element in a vector
       register when targeting a big-endian platform, and identifies the
       rightmost element in a vector register when targeting a
       little-endian platform.
  
! '-mvrsave'
! '-mno-vrsave'
       Generate VRSAVE instructions when generating AltiVec code.
  
! '-msecure-plt'
!      Generate code that allows 'ld' and 'ld.so' to build executables and
!      shared libraries with non-executable '.plt' and '.got' sections.
       This is a PowerPC 32-bit SYSV ABI option.
  
! '-mbss-plt'
!      Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
!      and requires '.plt' and '.got' sections that are both writable and
       executable.  This is a PowerPC 32-bit SYSV ABI option.
  
! '-misel'
! '-mno-isel'
       This switch enables or disables the generation of ISEL
       instructions.
  
! '-mvsx'
! '-mno-vsx'
       Generate code that uses (does not use) vector/scalar (VSX)
       instructions, and also enable the use of built-in functions that
       allow more direct access to the VSX instruction set.
  
! '-mcrypto'
! '-mno-crypto'
       Enable the use (disable) of the built-in functions that allow
       direct access to the cryptographic instructions that were added in
       version 2.07 of the PowerPC ISA.
  
! '-mhtm'
! '-mno-htm'
       Enable (disable) the use of the built-in functions that allow
       direct access to the Hardware Transactional Memory (HTM)
       instructions that were added in version 2.07 of the PowerPC ISA.
  
! '-mpower8-fusion'
! '-mno-power8-fusion'
       Generate code that keeps (does not keeps) some integer operations
       adjacent so that the instructions can be fused together on power8
       and later processors.
  
! '-mquad-memory'
! '-mno-quad-memory'
       Generate code that uses (does not use) the non-atomic quad word
!      memory instructions.  The '-mquad-memory' option requires use of
       64-bit mode.
  
! '-mquad-memory-atomic'
! '-mno-quad-memory-atomic'
       Generate code that uses (does not use) the atomic quad word memory
!      instructions.  The '-mquad-memory-atomic' option requires use of
       64-bit mode.
  
! '-mfloat128'
! '-mno-float128'
       Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
       point and use either software emulation for IEEE 128-bit floating
       point or hardware instructions.
  
!      The VSX instruction set ('-mvsx') must be enabled to use the IEEE
       128-bit floating point support.  The IEEE 128-bit floating point is
       only supported on Linux.
  
!      The default for '-mfloat128' is enabled on PowerPC Linux systems
       using the VSX instruction set, and disabled on other systems.
  
!      If you use the ISA 3.0 instruction set ('-mcpu=power9') on a 64-bit
       system, the IEEE 128-bit floating point support will also enable
       the generation of ISA 3.0 IEEE 128-bit floating point instructions.
       Otherwise, if you do not specify to generate ISA 3.0 instructions
       or you are targeting a 32-bit big endian system, IEEE 128-bit
       floating point will be done with software emulation.
  
! '-mfloat128-hardware'
! '-mno-float128-hardware'
       Enable/disable using ISA 3.0 hardware instructions to support the
       __FLOAT128 data type.
  
!      The default for '-mfloat128-hardware' is enabled on PowerPC Linux
       systems using the ISA 3.0 instruction set, and disabled on other
       systems.
  
! '-m32'
! '-m64'
       Generate code for 32-bit or 64-bit environments of Darwin and SVR4
       targets (including GNU/Linux).  The 32-bit environment sets int,
       long and pointer to 32 bits and generates code that runs on any
       PowerPC variant.  The 64-bit environment sets int to 32 bits and
       long and pointer to 64 bits, and generates code for PowerPC64, as
!      for '-mpowerpc64'.
  
! '-mfull-toc'
! '-mno-fp-in-toc'
! '-mno-sum-in-toc'
! '-mminimal-toc'
       Modify generation of the TOC (Table Of Contents), which is created
!      for every executable file.  The '-mfull-toc' option is selected by
       default.  In that case, GCC allocates at least one TOC entry for
       each unique non-automatic variable reference in your program.  GCC
       also places floating-point constants in the TOC.  However, only
--- 28702,28853 ----
       compiler versions, depending on what setting seems to produce
       optimal code for that CPU; it doesn't necessarily reflect the
       actual hardware's capabilities.  If you wish to set an individual
!      option to a particular value, you may specify it after the ‘-mcpu’
!      option, like ‘-mcpu=970 -mno-altivec’.
  
!      On AIX, the ‘-maltivec’ and ‘-mpowerpc64’ options are not enabled
!      or disabled by the ‘-mcpu’ option at present because AIX does not
       have full support for these options.  You may still enable or
       disable them individually if you're sure it'll work in your
       environment.
  
! ‘-mtune=CPU_TYPE’
       Set the instruction scheduling parameters for machine type
       CPU_TYPE, but do not set the architecture type or register usage,
!      as ‘-mcpu=CPU_TYPE’ does.  The same values for CPU_TYPE are used
!      for ‘-mtune’ as for ‘-mcpu’.  If both are specified, the code
!      generated uses the architecture and registers set by ‘-mcpu’, but
!      the scheduling parameters set by ‘-mtune’.
  
! ‘-mcmodel=small’
       Generate PowerPC64 code for the small model: The TOC is limited to
       64k.
  
! ‘-mcmodel=medium’
       Generate PowerPC64 code for the medium model: The TOC and other
       static data may be up to a total of 4G in size.  This is the
       default for 64-bit Linux.
  
! ‘-mcmodel=large’
       Generate PowerPC64 code for the large model: The TOC may be up to
       4G in size.  Other data and code is only limited by the 64-bit
       address space.
  
! ‘-maltivec’
! ‘-mno-altivec’
       Generate code that uses (does not use) AltiVec instructions, and
       also enable the use of built-in functions that allow more direct
       access to the AltiVec instruction set.  You may also need to set
!      ‘-mabi=altivec’ to adjust the current ABI with AltiVec ABI
       enhancements.
  
!      When ‘-maltivec’ is used, the element order for AltiVec intrinsics
!      such as ‘vec_splat’, ‘vec_extract’, and ‘vec_insert’ match array
       element order corresponding to the endianness of the target.  That
       is, element zero identifies the leftmost element in a vector
       register when targeting a big-endian platform, and identifies the
       rightmost element in a vector register when targeting a
       little-endian platform.
  
! ‘-mvrsave’
! ‘-mno-vrsave’
       Generate VRSAVE instructions when generating AltiVec code.
  
! ‘-msecure-plt’
!      Generate code that allows ‘ld’ and ‘ld.so’ to build executables and
!      shared libraries with non-executable ‘.plt’ and ‘.got’ sections.
       This is a PowerPC 32-bit SYSV ABI option.
  
! ‘-mbss-plt’
!      Generate code that uses a BSS ‘.plt’ section that ‘ld.so’ fills in,
!      and requires ‘.plt’ and ‘.got’ sections that are both writable and
       executable.  This is a PowerPC 32-bit SYSV ABI option.
  
! ‘-misel’
! ‘-mno-isel’
       This switch enables or disables the generation of ISEL
       instructions.
  
! ‘-mvsx’
! ‘-mno-vsx’
       Generate code that uses (does not use) vector/scalar (VSX)
       instructions, and also enable the use of built-in functions that
       allow more direct access to the VSX instruction set.
  
! ‘-mcrypto’
! ‘-mno-crypto’
       Enable the use (disable) of the built-in functions that allow
       direct access to the cryptographic instructions that were added in
       version 2.07 of the PowerPC ISA.
  
! ‘-mhtm’
! ‘-mno-htm’
       Enable (disable) the use of the built-in functions that allow
       direct access to the Hardware Transactional Memory (HTM)
       instructions that were added in version 2.07 of the PowerPC ISA.
  
! ‘-mpower8-fusion’
! ‘-mno-power8-fusion’
       Generate code that keeps (does not keeps) some integer operations
       adjacent so that the instructions can be fused together on power8
       and later processors.
  
! ‘-mquad-memory’
! ‘-mno-quad-memory’
       Generate code that uses (does not use) the non-atomic quad word
!      memory instructions.  The ‘-mquad-memory’ option requires use of
       64-bit mode.
  
! ‘-mquad-memory-atomic’
! ‘-mno-quad-memory-atomic’
       Generate code that uses (does not use) the atomic quad word memory
!      instructions.  The ‘-mquad-memory-atomic’ option requires use of
       64-bit mode.
  
! ‘-mfloat128’
! ‘-mno-float128’
       Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
       point and use either software emulation for IEEE 128-bit floating
       point or hardware instructions.
  
!      The VSX instruction set (‘-mvsx’) must be enabled to use the IEEE
       128-bit floating point support.  The IEEE 128-bit floating point is
       only supported on Linux.
  
!      The default for ‘-mfloat128’ is enabled on PowerPC Linux systems
       using the VSX instruction set, and disabled on other systems.
  
!      If you use the ISA 3.0 instruction set (‘-mcpu=power9’) on a 64-bit
       system, the IEEE 128-bit floating point support will also enable
       the generation of ISA 3.0 IEEE 128-bit floating point instructions.
       Otherwise, if you do not specify to generate ISA 3.0 instructions
       or you are targeting a 32-bit big endian system, IEEE 128-bit
       floating point will be done with software emulation.
  
! ‘-mfloat128-hardware’
! ‘-mno-float128-hardware’
       Enable/disable using ISA 3.0 hardware instructions to support the
       __FLOAT128 data type.
  
!      The default for ‘-mfloat128-hardware’ is enabled on PowerPC Linux
       systems using the ISA 3.0 instruction set, and disabled on other
       systems.
  
! ‘-m32’
! ‘-m64’
       Generate code for 32-bit or 64-bit environments of Darwin and SVR4
       targets (including GNU/Linux).  The 32-bit environment sets int,
       long and pointer to 32 bits and generates code that runs on any
       PowerPC variant.  The 64-bit environment sets int to 32 bits and
       long and pointer to 64 bits, and generates code for PowerPC64, as
!      for ‘-mpowerpc64’.
  
! ‘-mfull-toc’
! ‘-mno-fp-in-toc’
! ‘-mno-sum-in-toc’
! ‘-mminimal-toc’
       Modify generation of the TOC (Table Of Contents), which is created
!      for every executable file.  The ‘-mfull-toc’ option is selected by
       default.  In that case, GCC allocates at least one TOC entry for
       each unique non-automatic variable reference in your program.  GCC
       also places floating-point constants in the TOC.  However, only
*************** These '-m' options are defined for the I
*** 28844,28875 ****
  
       If you receive a linker error message that saying you have
       overflowed the available TOC space, you can reduce the amount of
!      TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
!      options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
!      constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
       code to calculate the sum of an address and a constant at run time
       instead of putting that sum into the TOC.  You may specify one or
       both of these options.  Each causes GCC to produce very slightly
       slower and larger code at the expense of conserving TOC space.
  
       If you still run out of space in the TOC even when you specify both
!      of these options, specify '-mminimal-toc' instead.  This option
       causes GCC to make only one TOC entry for every file.  When you
       specify this option, GCC produces code that is slower and larger
       but which uses extremely little TOC space.  You may wish to use
       this option only on files that contain less frequently-executed
       code.
  
! '-maix64'
! '-maix32'
       Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
!      64-bit 'long' type, and the infrastructure needed to support them.
!      Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
!      disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
!      to '-maix32'.
  
! '-mxl-compat'
! '-mno-xl-compat'
       Produce code that conforms more closely to IBM XL compiler
       semantics when using AIX-compatible ABI.  Pass floating-point
       arguments to prototyped functions beyond the register save area
--- 28855,28886 ----
  
       If you receive a linker error message that saying you have
       overflowed the available TOC space, you can reduce the amount of
!      TOC space used with the ‘-mno-fp-in-toc’ and ‘-mno-sum-in-toc’
!      options.  ‘-mno-fp-in-toc’ prevents GCC from putting floating-point
!      constants in the TOC and ‘-mno-sum-in-toc’ forces GCC to generate
       code to calculate the sum of an address and a constant at run time
       instead of putting that sum into the TOC.  You may specify one or
       both of these options.  Each causes GCC to produce very slightly
       slower and larger code at the expense of conserving TOC space.
  
       If you still run out of space in the TOC even when you specify both
!      of these options, specify ‘-mminimal-toc’ instead.  This option
       causes GCC to make only one TOC entry for every file.  When you
       specify this option, GCC produces code that is slower and larger
       but which uses extremely little TOC space.  You may wish to use
       this option only on files that contain less frequently-executed
       code.
  
! ‘-maix64’
! ‘-maix32’
       Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
!      64-bit ‘long’ type, and the infrastructure needed to support them.
!      Specifying ‘-maix64’ implies ‘-mpowerpc64’, while ‘-maix32’
!      disables the 64-bit ABI and implies ‘-mno-powerpc64’.  GCC defaults
!      to ‘-maix32’.
  
! ‘-mxl-compat’
! ‘-mno-xl-compat’
       Produce code that conforms more closely to IBM XL compiler
       semantics when using AIX-compatible ABI.  Pass floating-point
       arguments to prototyped functions beyond the register save area
*************** These '-m' options are defined for the I
*** 28888,28944 ****
       option is not enabled by default and only is necessary when calling
       subroutines compiled by IBM XL compilers without optimization.
  
! '-mpe'
!      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
       application written to use message passing with special startup
       code to enable the application to run.  The system must have PE
!      installed in the standard location ('/usr/lpp/ppe.poe/'), or the
!      'specs' file must be overridden with the '-specs=' option to
       specify the appropriate directory location.  The Parallel
!      Environment does not support threads, so the '-mpe' option and the
!      '-pthread' option are incompatible.
  
! '-malign-natural'
! '-malign-power'
       On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
!      '-malign-natural' overrides the ABI-defined alignment of larger
       types, such as floating-point doubles, on their natural size-based
!      boundary.  The option '-malign-power' instructs GCC to follow the
       ABI-specified alignment rules.  GCC defaults to the standard
       alignment defined in the ABI.
  
       On 64-bit Darwin, natural alignment is the default, and
!      '-malign-power' is not supported.
  
! '-msoft-float'
! '-mhard-float'
       Generate code that does not use (uses) the floating-point register
       set.  Software floating-point emulation is provided if you use the
!      '-msoft-float' option, and pass the option to GCC when linking.
  
! '-mmultiple'
! '-mno-multiple'
       Generate code that uses (does not use) the load multiple word
       instructions and the store multiple word instructions.  These
       instructions are generated by default on POWER systems, and not
!      generated on PowerPC systems.  Do not use '-mmultiple' on
       little-endian PowerPC systems, since those instructions do not work
       when the processor is in little-endian mode.  The exceptions are
       PPC740 and PPC750 which permit these instructions in little-endian
       mode.
  
! '-mupdate'
! '-mno-update'
       Generate code that uses (does not use) the load or store
       instructions that update the base register to the address of the
       calculated memory location.  These instructions are generated by
!      default.  If you use '-mno-update', there is a small window between
       the time that the stack pointer is updated and the address of the
       previous frame is stored, which means code that walks the stack
       frame across interrupts or signals may get corrupted data.
  
! '-mavoid-indexed-addresses'
! '-mno-avoid-indexed-addresses'
       Generate code that tries to avoid (not avoid) the use of indexed
       load or store instructions.  These instructions can incur a
       performance penalty on Power6 processors in certain situations,
--- 28899,28955 ----
       option is not enabled by default and only is necessary when calling
       subroutines compiled by IBM XL compilers without optimization.
  
! ‘-mpe’
!      Support “IBM RS/6000 SP” “Parallel Environment” (PE).  Link an
       application written to use message passing with special startup
       code to enable the application to run.  The system must have PE
!      installed in the standard location (‘/usr/lpp/ppe.poe/’), or the
!      ‘specs’ file must be overridden with the ‘-specs=’ option to
       specify the appropriate directory location.  The Parallel
!      Environment does not support threads, so the ‘-mpe’ option and the
!      ‘-pthread’ option are incompatible.
  
! ‘-malign-natural’
! ‘-malign-power’
       On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
!      ‘-malign-natural’ overrides the ABI-defined alignment of larger
       types, such as floating-point doubles, on their natural size-based
!      boundary.  The option ‘-malign-power’ instructs GCC to follow the
       ABI-specified alignment rules.  GCC defaults to the standard
       alignment defined in the ABI.
  
       On 64-bit Darwin, natural alignment is the default, and
!      ‘-malign-power’ is not supported.
  
! ‘-msoft-float’
! ‘-mhard-float’
       Generate code that does not use (uses) the floating-point register
       set.  Software floating-point emulation is provided if you use the
!      ‘-msoft-float’ option, and pass the option to GCC when linking.
  
! ‘-mmultiple’
! ‘-mno-multiple’
       Generate code that uses (does not use) the load multiple word
       instructions and the store multiple word instructions.  These
       instructions are generated by default on POWER systems, and not
!      generated on PowerPC systems.  Do not use ‘-mmultiple’ on
       little-endian PowerPC systems, since those instructions do not work
       when the processor is in little-endian mode.  The exceptions are
       PPC740 and PPC750 which permit these instructions in little-endian
       mode.
  
! ‘-mupdate’
! ‘-mno-update’
       Generate code that uses (does not use) the load or store
       instructions that update the base register to the address of the
       calculated memory location.  These instructions are generated by
!      default.  If you use ‘-mno-update’, there is a small window between
       the time that the stack pointer is updated and the address of the
       previous frame is stored, which means code that walks the stack
       frame across interrupts or signals may get corrupted data.
  
! ‘-mavoid-indexed-addresses’
! ‘-mno-avoid-indexed-addresses’
       Generate code that tries to avoid (not avoid) the use of indexed
       load or store instructions.  These instructions can incur a
       performance penalty on Power6 processors in certain situations,
*************** These '-m' options are defined for the I
*** 28946,29081 ****
       boundary.  This option is enabled by default when targeting Power6
       and disabled otherwise.
  
! '-mfused-madd'
! '-mno-fused-madd'
       Generate code that uses (does not use) the floating-point multiply
       and accumulate instructions.  These instructions are generated by
       default if hardware floating point is used.  The machine-dependent
!      '-mfused-madd' option is now mapped to the machine-independent
!      '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
!      '-ffp-contract=off'.
  
! '-mmulhw'
! '-mno-mulhw'
       Generate code that uses (does not use) the half-word multiply and
       multiply-accumulate instructions on the IBM 405, 440, 464 and 476
       processors.  These instructions are generated by default when
       targeting those processors.
  
! '-mdlmzb'
! '-mno-dlmzb'
!      Generate code that uses (does not use) the string-search 'dlmzb'
       instruction on the IBM 405, 440, 464 and 476 processors.  This
       instruction is generated by default when targeting those
       processors.
  
! '-mno-bit-align'
! '-mbit-align'
       On System V.4 and embedded PowerPC systems do not (do) force
       structures and unions that contain bit-fields to be aligned to the
       base type of the bit-field.
  
       For example, by default a structure containing nothing but 8
!      'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
!      and has a size of 4 bytes.  By using '-mno-bit-align', the
       structure is aligned to a 1-byte boundary and is 1 byte in size.
  
! '-mno-strict-align'
! '-mstrict-align'
       On System V.4 and embedded PowerPC systems do not (do) assume that
       unaligned memory references are handled by the system.
  
! '-mrelocatable'
! '-mno-relocatable'
       Generate code that allows (does not allow) a static executable to
       be relocated to a different address at run time.  A simple embedded
       PowerPC system loader should relocate the entire contents of
!      '.got2' and 4-byte locations listed in the '.fixup' section, a
       table of 32-bit addresses generated by this option.  For this to
       work, all objects linked together must be compiled with
!      '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
       aligns the stack to an 8-byte boundary.
  
! '-mrelocatable-lib'
! '-mno-relocatable-lib'
!      Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
       section to allow static executables to be relocated at run time,
!      but '-mrelocatable-lib' does not use the smaller stack alignment of
!      '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
       linked with objects compiled with any combination of the
!      '-mrelocatable' options.
  
! '-mno-toc'
! '-mtoc'
       On System V.4 and embedded PowerPC systems do not (do) assume that
       register 2 contains a pointer to a global area pointing to the
       addresses used in the program.
  
! '-mlittle'
! '-mlittle-endian'
       On System V.4 and embedded PowerPC systems compile code for the
!      processor in little-endian mode.  The '-mlittle-endian' option is
!      the same as '-mlittle'.
  
! '-mbig'
! '-mbig-endian'
       On System V.4 and embedded PowerPC systems compile code for the
!      processor in big-endian mode.  The '-mbig-endian' option is the
!      same as '-mbig'.
  
! '-mdynamic-no-pic'
       On Darwin / macOS systems, compile code so that it is not
       relocatable, but that its external references are relocatable.  The
       resulting code is suitable for applications, but not shared
       libraries.
  
! '-msingle-pic-base'
       Treat the register used for PIC addressing as read-only, rather
       than loading it in the prologue for each function.  The runtime
       system is responsible for initializing this register with an
       appropriate value before execution begins.
  
! '-mprioritize-restricted-insns=PRIORITY'
       This option controls the priority that is assigned to dispatch-slot
       restricted instructions during the second scheduling pass.  The
!      argument PRIORITY takes the value '0', '1', or '2' to assign no,
       highest, or second-highest (respectively) priority to dispatch-slot
       restricted instructions.
  
! '-msched-costly-dep=DEPENDENCE_TYPE'
       This option controls which dependences are considered costly by the
       target during instruction scheduling.  The argument DEPENDENCE_TYPE
       takes one of the following values:
  
!      'no'
            No dependence is costly.
  
!      'all'
            All dependences are costly.
  
!      'true_store_to_load'
            A true dependence from store to load is costly.
  
!      'store_to_load'
            Any dependence from store to load is costly.
  
       NUMBER
            Any dependence for which the latency is greater than or equal
            to NUMBER is costly.
  
! '-minsert-sched-nops=SCHEME'
       This option controls which NOP insertion scheme is used during the
       second scheduling pass.  The argument SCHEME takes one of the
       following values:
  
!      'no'
            Don't insert NOPs.
  
!      'pad'
            Pad with NOPs any dispatch group that has vacant issue slots,
            according to the scheduler's grouping.
  
!      'regroup_exact'
            Insert NOPs to force costly dependent insns into separate
            groups.  Insert exactly as many NOPs as needed to force an
            insn to a new group, according to the estimated processor
--- 28957,29092 ----
       boundary.  This option is enabled by default when targeting Power6
       and disabled otherwise.
  
! ‘-mfused-madd’
! ‘-mno-fused-madd’
       Generate code that uses (does not use) the floating-point multiply
       and accumulate instructions.  These instructions are generated by
       default if hardware floating point is used.  The machine-dependent
!      ‘-mfused-madd’ option is now mapped to the machine-independent
!      ‘-ffp-contract=fast’ option, and ‘-mno-fused-madd’ is mapped to
!      ‘-ffp-contract=off’.
  
! ‘-mmulhw’
! ‘-mno-mulhw’
       Generate code that uses (does not use) the half-word multiply and
       multiply-accumulate instructions on the IBM 405, 440, 464 and 476
       processors.  These instructions are generated by default when
       targeting those processors.
  
! ‘-mdlmzb’
! ‘-mno-dlmzb’
!      Generate code that uses (does not use) the string-search ‘dlmzb’
       instruction on the IBM 405, 440, 464 and 476 processors.  This
       instruction is generated by default when targeting those
       processors.
  
! ‘-mno-bit-align’
! ‘-mbit-align’
       On System V.4 and embedded PowerPC systems do not (do) force
       structures and unions that contain bit-fields to be aligned to the
       base type of the bit-field.
  
       For example, by default a structure containing nothing but 8
!      ‘unsigned’ bit-fields of length 1 is aligned to a 4-byte boundary
!      and has a size of 4 bytes.  By using ‘-mno-bit-align’, the
       structure is aligned to a 1-byte boundary and is 1 byte in size.
  
! ‘-mno-strict-align’
! ‘-mstrict-align’
       On System V.4 and embedded PowerPC systems do not (do) assume that
       unaligned memory references are handled by the system.
  
! ‘-mrelocatable’
! ‘-mno-relocatable’
       Generate code that allows (does not allow) a static executable to
       be relocated to a different address at run time.  A simple embedded
       PowerPC system loader should relocate the entire contents of
!      ‘.got2’ and 4-byte locations listed in the ‘.fixup’ section, a
       table of 32-bit addresses generated by this option.  For this to
       work, all objects linked together must be compiled with
!      ‘-mrelocatable’ or ‘-mrelocatable-lib’.  ‘-mrelocatable’ code
       aligns the stack to an 8-byte boundary.
  
! ‘-mrelocatable-lib’
! ‘-mno-relocatable-lib’
!      Like ‘-mrelocatable’, ‘-mrelocatable-lib’ generates a ‘.fixup’
       section to allow static executables to be relocated at run time,
!      but ‘-mrelocatable-lib’ does not use the smaller stack alignment of
!      ‘-mrelocatable’.  Objects compiled with ‘-mrelocatable-lib’ may be
       linked with objects compiled with any combination of the
!      ‘-mrelocatable’ options.
  
! ‘-mno-toc’
! ‘-mtoc’
       On System V.4 and embedded PowerPC systems do not (do) assume that
       register 2 contains a pointer to a global area pointing to the
       addresses used in the program.
  
! ‘-mlittle’
! ‘-mlittle-endian’
       On System V.4 and embedded PowerPC systems compile code for the
!      processor in little-endian mode.  The ‘-mlittle-endian’ option is
!      the same as ‘-mlittle’.
  
! ‘-mbig’
! ‘-mbig-endian’
       On System V.4 and embedded PowerPC systems compile code for the
!      processor in big-endian mode.  The ‘-mbig-endian’ option is the
!      same as ‘-mbig’.
  
! ‘-mdynamic-no-pic’
       On Darwin / macOS systems, compile code so that it is not
       relocatable, but that its external references are relocatable.  The
       resulting code is suitable for applications, but not shared
       libraries.
  
! ‘-msingle-pic-base’
       Treat the register used for PIC addressing as read-only, rather
       than loading it in the prologue for each function.  The runtime
       system is responsible for initializing this register with an
       appropriate value before execution begins.
  
! ‘-mprioritize-restricted-insns=PRIORITY’
       This option controls the priority that is assigned to dispatch-slot
       restricted instructions during the second scheduling pass.  The
!      argument PRIORITY takes the value ‘0’, ‘1’, or ‘2’ to assign no,
       highest, or second-highest (respectively) priority to dispatch-slot
       restricted instructions.
  
! ‘-msched-costly-dep=DEPENDENCE_TYPE’
       This option controls which dependences are considered costly by the
       target during instruction scheduling.  The argument DEPENDENCE_TYPE
       takes one of the following values:
  
!      ‘no’
            No dependence is costly.
  
!      ‘all’
            All dependences are costly.
  
!      ‘true_store_to_load’
            A true dependence from store to load is costly.
  
!      ‘store_to_load’
            Any dependence from store to load is costly.
  
       NUMBER
            Any dependence for which the latency is greater than or equal
            to NUMBER is costly.
  
! ‘-minsert-sched-nops=SCHEME’
       This option controls which NOP insertion scheme is used during the
       second scheduling pass.  The argument SCHEME takes one of the
       following values:
  
!      ‘no’
            Don't insert NOPs.
  
!      ‘pad’
            Pad with NOPs any dispatch group that has vacant issue slots,
            according to the scheduler's grouping.
  
!      ‘regroup_exact’
            Insert NOPs to force costly dependent insns into separate
            groups.  Insert exactly as many NOPs as needed to force an
            insn to a new group, according to the estimated processor
*************** These '-m' options are defined for the I
*** 29085,29318 ****
            Insert NOPs to force costly dependent insns into separate
            groups.  Insert NUMBER NOPs to force an insn to a new group.
  
! '-mcall-sysv'
       On System V.4 and embedded PowerPC systems compile code using
       calling conventions that adhere to the March 1995 draft of the
       System V Application Binary Interface, PowerPC processor
       supplement.  This is the default unless you configured GCC using
!      'powerpc-*-eabiaix'.
  
! '-mcall-sysv-eabi'
! '-mcall-eabi'
!      Specify both '-mcall-sysv' and '-meabi' options.
  
! '-mcall-sysv-noeabi'
!      Specify both '-mcall-sysv' and '-mno-eabi' options.
  
! '-mcall-aixdesc'
       On System V.4 and embedded PowerPC systems compile code for the AIX
       operating system.
  
! '-mcall-linux'
       On System V.4 and embedded PowerPC systems compile code for the
       Linux-based GNU system.
  
! '-mcall-freebsd'
       On System V.4 and embedded PowerPC systems compile code for the
       FreeBSD operating system.
  
! '-mcall-netbsd'
       On System V.4 and embedded PowerPC systems compile code for the
       NetBSD operating system.
  
! '-mcall-openbsd'
       On System V.4 and embedded PowerPC systems compile code for the
       OpenBSD operating system.
  
! '-mtraceback=TRACEBACK_TYPE'
       Select the type of traceback table.  Valid values for
!      TRACEBACK_TYPE are 'full', 'part', and 'no'.
  
! '-maix-struct-return'
       Return all structures in memory (as specified by the AIX ABI).
  
! '-msvr4-struct-return'
       Return structures smaller than 8 bytes in registers (as specified
       by the SVR4 ABI).
  
! '-mabi=ABI-TYPE'
       Extend the current ABI with a particular extension, or remove such
!      extension.  Valid values are: 'altivec', 'no-altivec',
!      'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2', and for AIX:
!      'vec-extabi', 'vec-default'.
  
! '-mabi=ibmlongdouble'
       Change the current ABI to use IBM extended-precision long double.
       This is not likely to work if your system defaults to using IEEE
       extended-precision long double.  If you change the long double type
       from IEEE extended-precision, the compiler will issue a warning
!      unless you use the '-Wno-psabi' option.  Requires
!      '-mlong-double-128' to be enabled.
  
! '-mabi=ieeelongdouble'
       Change the current ABI to use IEEE extended-precision long double.
       This is not likely to work if your system defaults to using IBM
       extended-precision long double.  If you change the long double type
       from IBM extended-precision, the compiler will issue a warning
!      unless you use the '-Wno-psabi' option.  Requires
!      '-mlong-double-128' to be enabled.
  
! '-mabi=elfv1'
       Change the current ABI to use the ELFv1 ABI. This is the default
       ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
       ABI requires special system support and is likely to fail in
       spectacular ways.
  
! '-mabi=elfv2'
       Change the current ABI to use the ELFv2 ABI. This is the default
       ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
       ABI requires special system support and is likely to fail in
       spectacular ways.
  
! '-mgnu-attribute'
! '-mno-gnu-attribute'
       Emit .gnu_attribute assembly directives to set tag/value pairs in a
       .gnu.attributes section that specify ABI variations in function
       parameters or return values.
  
! '-mprototype'
! '-mno-prototype'
       On System V.4 and embedded PowerPC systems assume that all calls to
       variable argument functions are properly prototyped.  Otherwise,
       the compiler must insert an instruction before every non-prototyped
!      call to set or clear bit 6 of the condition code register ('CR') to
       indicate whether floating-point values are passed in the
       floating-point registers in case the function takes variable
!      arguments.  With '-mprototype', only calls to prototyped variable
       argument functions set or clear the bit.
  
! '-msim'
       On embedded PowerPC systems, assume that the startup module is
!      called 'sim-crt0.o' and that the standard C libraries are
!      'libsim.a' and 'libc.a'.  This is the default for
!      'powerpc-*-eabisim' configurations.
  
! '-mmvme'
       On embedded PowerPC systems, assume that the startup module is
!      called 'crt0.o' and the standard C libraries are 'libmvme.a' and
!      'libc.a'.
  
! '-mads'
       On embedded PowerPC systems, assume that the startup module is
!      called 'crt0.o' and the standard C libraries are 'libads.a' and
!      'libc.a'.
  
! '-myellowknife'
       On embedded PowerPC systems, assume that the startup module is
!      called 'crt0.o' and the standard C libraries are 'libyk.a' and
!      'libc.a'.
  
! '-mvxworks'
       On System V.4 and embedded PowerPC systems, specify that you are
       compiling for a VxWorks system.
  
! '-memb'
!      On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
!      header to indicate that 'eabi' extended relocations are used.
  
! '-meabi'
! '-mno-eabi'
       On System V.4 and embedded PowerPC systems do (do not) adhere to
       the Embedded Applications Binary Interface (EABI), which is a set
       of modifications to the System V.4 specifications.  Selecting
!      '-meabi' means that the stack is aligned to an 8-byte boundary, a
!      function '__eabi' is called from 'main' to set up the EABI
!      environment, and the '-msdata' option can use both 'r2' and 'r13'
!      to point to two separate small data areas.  Selecting '-mno-eabi'
       means that the stack is aligned to a 16-byte boundary, no EABI
!      initialization function is called from 'main', and the '-msdata'
!      option only uses 'r13' to point to a single small data area.  The
!      '-meabi' option is on by default if you configured GCC using one of
!      the 'powerpc*-*-eabi*' options.
  
! '-msdata=eabi'
       On System V.4 and embedded PowerPC systems, put small initialized
!      'const' global and static data in the '.sdata2' section, which is
!      pointed to by register 'r2'.  Put small initialized non-'const'
!      global and static data in the '.sdata' section, which is pointed to
!      by register 'r13'.  Put small uninitialized global and static data
!      in the '.sbss' section, which is adjacent to the '.sdata' section.
!      The '-msdata=eabi' option is incompatible with the '-mrelocatable'
!      option.  The '-msdata=eabi' option also sets the '-memb' option.
  
! '-msdata=sysv'
       On System V.4 and embedded PowerPC systems, put small global and
!      static data in the '.sdata' section, which is pointed to by
!      register 'r13'.  Put small uninitialized global and static data in
!      the '.sbss' section, which is adjacent to the '.sdata' section.
!      The '-msdata=sysv' option is incompatible with the '-mrelocatable'
       option.
  
! '-msdata=default'
! '-msdata'
!      On System V.4 and embedded PowerPC systems, if '-meabi' is used,
!      compile code the same as '-msdata=eabi', otherwise compile code the
!      same as '-msdata=sysv'.
  
! '-msdata=data'
       On System V.4 and embedded PowerPC systems, put small global data
!      in the '.sdata' section.  Put small uninitialized global data in
!      the '.sbss' section.  Do not use register 'r13' to address small
!      data however.  This is the default behavior unless other '-msdata'
       options are used.
  
! '-msdata=none'
! '-mno-sdata'
       On embedded PowerPC systems, put all initialized global and static
!      data in the '.data' section, and all uninitialized data in the
!      '.bss' section.
  
! '-mreadonly-in-sdata'
!      Put read-only objects in the '.sdata' section as well.  This is the
       default.
  
! '-mblock-move-inline-limit=NUM'
!      Inline all block moves (such as calls to 'memcpy' or structure
       copies) less than or equal to NUM bytes.  The minimum value for NUM
       is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
       default value is target-specific.
  
! '-mblock-compare-inline-limit=NUM'
       Generate non-looping inline code for all block compares (such as
!      calls to 'memcmp' or structure compares) less than or equal to NUM
       bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
       block compare is disabled.  The default value is target-specific.
  
! '-mblock-compare-inline-loop-limit=NUM'
       Generate an inline expansion using loop code for all block compares
       that are less than or equal to NUM bytes, but greater than the
       limit for non-loop inline block compare expansion.  If the block
       length is not constant, at most NUM bytes will be compared before
!      'memcmp' is called to compare the remainder of the block.  The
       default value is target-specific.
  
! '-mstring-compare-inline-limit=NUM'
       Compare at most NUM string bytes with inline code.  If the
       difference or end of string is not found at the end of the inline
!      compare a call to 'strcmp' or 'strncmp' will take care of the rest
       of the comparison.  The default is 64 bytes.
  
! '-G NUM'
       On embedded PowerPC systems, put global and static items less than
       or equal to NUM bytes into the small data or BSS sections instead
!      of the normal data or BSS section.  By default, NUM is 8.  The '-G
!      NUM' switch is also passed to the linker.  All modules should be
!      compiled with the same '-G NUM' value.
  
! '-mregnames'
! '-mno-regnames'
       On System V.4 and embedded PowerPC systems do (do not) emit
       register names in the assembly language output using symbolic
       forms.
  
! '-mlongcall'
! '-mno-longcall'
       By default assume that all calls are far away so that a longer and
       more expensive calling sequence is required.  This is required for
       calls farther than 32 megabytes (33,554,432 bytes) from the current
       location.  A short call is generated if the compiler knows the call
       cannot be that far away.  This setting can be overridden by the
!      'shortcall' function attribute, or by '#pragma longcall(0)'.
  
       Some linkers are capable of detecting out-of-range calls and
       generating glue code on the fly.  On these systems, long calls are
--- 29096,29329 ----
            Insert NOPs to force costly dependent insns into separate
            groups.  Insert NUMBER NOPs to force an insn to a new group.
  
! ‘-mcall-sysv’
       On System V.4 and embedded PowerPC systems compile code using
       calling conventions that adhere to the March 1995 draft of the
       System V Application Binary Interface, PowerPC processor
       supplement.  This is the default unless you configured GCC using
!      ‘powerpc-*-eabiaix’.
  
! ‘-mcall-sysv-eabi’
! ‘-mcall-eabi’
!      Specify both ‘-mcall-sysv’ and ‘-meabi’ options.
  
! ‘-mcall-sysv-noeabi’
!      Specify both ‘-mcall-sysv’ and ‘-mno-eabi’ options.
  
! ‘-mcall-aixdesc’
       On System V.4 and embedded PowerPC systems compile code for the AIX
       operating system.
  
! ‘-mcall-linux’
       On System V.4 and embedded PowerPC systems compile code for the
       Linux-based GNU system.
  
! ‘-mcall-freebsd’
       On System V.4 and embedded PowerPC systems compile code for the
       FreeBSD operating system.
  
! ‘-mcall-netbsd’
       On System V.4 and embedded PowerPC systems compile code for the
       NetBSD operating system.
  
! ‘-mcall-openbsd’
       On System V.4 and embedded PowerPC systems compile code for the
       OpenBSD operating system.
  
! ‘-mtraceback=TRACEBACK_TYPE’
       Select the type of traceback table.  Valid values for
!      TRACEBACK_TYPE are ‘full’, ‘part’, and ‘no’.
  
! ‘-maix-struct-return’
       Return all structures in memory (as specified by the AIX ABI).
  
! ‘-msvr4-struct-return’
       Return structures smaller than 8 bytes in registers (as specified
       by the SVR4 ABI).
  
! ‘-mabi=ABI-TYPE’
       Extend the current ABI with a particular extension, or remove such
!      extension.  Valid values are: ‘altivec’, ‘no-altivec’,
!      ‘ibmlongdouble’, ‘ieeelongdouble’, ‘elfv1’, ‘elfv2’, and for AIX:
!      ‘vec-extabi’, ‘vec-default’.
  
! ‘-mabi=ibmlongdouble’
       Change the current ABI to use IBM extended-precision long double.
       This is not likely to work if your system defaults to using IEEE
       extended-precision long double.  If you change the long double type
       from IEEE extended-precision, the compiler will issue a warning
!      unless you use the ‘-Wno-psabi’ option.  Requires
!      ‘-mlong-double-128’ to be enabled.
  
! ‘-mabi=ieeelongdouble’
       Change the current ABI to use IEEE extended-precision long double.
       This is not likely to work if your system defaults to using IBM
       extended-precision long double.  If you change the long double type
       from IBM extended-precision, the compiler will issue a warning
!      unless you use the ‘-Wno-psabi’ option.  Requires
!      ‘-mlong-double-128’ to be enabled.
  
! ‘-mabi=elfv1’
       Change the current ABI to use the ELFv1 ABI. This is the default
       ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
       ABI requires special system support and is likely to fail in
       spectacular ways.
  
! ‘-mabi=elfv2’
       Change the current ABI to use the ELFv2 ABI. This is the default
       ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
       ABI requires special system support and is likely to fail in
       spectacular ways.
  
! ‘-mgnu-attribute’
! ‘-mno-gnu-attribute’
       Emit .gnu_attribute assembly directives to set tag/value pairs in a
       .gnu.attributes section that specify ABI variations in function
       parameters or return values.
  
! ‘-mprototype’
! ‘-mno-prototype’
       On System V.4 and embedded PowerPC systems assume that all calls to
       variable argument functions are properly prototyped.  Otherwise,
       the compiler must insert an instruction before every non-prototyped
!      call to set or clear bit 6 of the condition code register (‘CR’) to
       indicate whether floating-point values are passed in the
       floating-point registers in case the function takes variable
!      arguments.  With ‘-mprototype’, only calls to prototyped variable
       argument functions set or clear the bit.
  
! ‘-msim’
       On embedded PowerPC systems, assume that the startup module is
!      called ‘sim-crt0.o’ and that the standard C libraries are
!      ‘libsim.a’ and ‘libc.a’.  This is the default for
!      ‘powerpc-*-eabisim’ configurations.
  
! ‘-mmvme’
       On embedded PowerPC systems, assume that the startup module is
!      called ‘crt0.o’ and the standard C libraries are ‘libmvme.a’ and
!      ‘libc.a’.
  
! ‘-mads’
       On embedded PowerPC systems, assume that the startup module is
!      called ‘crt0.o’ and the standard C libraries are ‘libads.a’ and
!      ‘libc.a’.
  
! ‘-myellowknife’
       On embedded PowerPC systems, assume that the startup module is
!      called ‘crt0.o’ and the standard C libraries are ‘libyk.a’ and
!      ‘libc.a’.
  
! ‘-mvxworks’
       On System V.4 and embedded PowerPC systems, specify that you are
       compiling for a VxWorks system.
  
! ‘-memb’
!      On embedded PowerPC systems, set the ‘PPC_EMB’ bit in the ELF flags
!      header to indicate that ‘eabi’ extended relocations are used.
  
! ‘-meabi’
! ‘-mno-eabi’
       On System V.4 and embedded PowerPC systems do (do not) adhere to
       the Embedded Applications Binary Interface (EABI), which is a set
       of modifications to the System V.4 specifications.  Selecting
!      ‘-meabi’ means that the stack is aligned to an 8-byte boundary, a
!      function ‘__eabi’ is called from ‘main’ to set up the EABI
!      environment, and the ‘-msdata’ option can use both ‘r2’ and ‘r13’
!      to point to two separate small data areas.  Selecting ‘-mno-eabi’
       means that the stack is aligned to a 16-byte boundary, no EABI
!      initialization function is called from ‘main’, and the ‘-msdata’
!      option only uses ‘r13’ to point to a single small data area.  The
!      ‘-meabi’ option is on by default if you configured GCC using one of
!      the ‘powerpc*-*-eabi*’ options.
  
! ‘-msdata=eabi’
       On System V.4 and embedded PowerPC systems, put small initialized
!      ‘const’ global and static data in the ‘.sdata2’ section, which is
!      pointed to by register ‘r2’.  Put small initialized non-‘const’
!      global and static data in the ‘.sdata’ section, which is pointed to
!      by register ‘r13’.  Put small uninitialized global and static data
!      in the ‘.sbss’ section, which is adjacent to the ‘.sdata’ section.
!      The ‘-msdata=eabi’ option is incompatible with the ‘-mrelocatable’
!      option.  The ‘-msdata=eabi’ option also sets the ‘-memb’ option.
  
! ‘-msdata=sysv’
       On System V.4 and embedded PowerPC systems, put small global and
!      static data in the ‘.sdata’ section, which is pointed to by
!      register ‘r13’.  Put small uninitialized global and static data in
!      the ‘.sbss’ section, which is adjacent to the ‘.sdata’ section.
!      The ‘-msdata=sysv’ option is incompatible with the ‘-mrelocatable’
       option.
  
! ‘-msdata=default’
! ‘-msdata’
!      On System V.4 and embedded PowerPC systems, if ‘-meabi’ is used,
!      compile code the same as ‘-msdata=eabi’, otherwise compile code the
!      same as ‘-msdata=sysv’.
  
! ‘-msdata=data’
       On System V.4 and embedded PowerPC systems, put small global data
!      in the ‘.sdata’ section.  Put small uninitialized global data in
!      the ‘.sbss’ section.  Do not use register ‘r13’ to address small
!      data however.  This is the default behavior unless other ‘-msdata’
       options are used.
  
! ‘-msdata=none’
! ‘-mno-sdata’
       On embedded PowerPC systems, put all initialized global and static
!      data in the ‘.data’ section, and all uninitialized data in the
!      ‘.bss’ section.
  
! ‘-mreadonly-in-sdata’
!      Put read-only objects in the ‘.sdata’ section as well.  This is the
       default.
  
! ‘-mblock-move-inline-limit=NUM’
!      Inline all block moves (such as calls to ‘memcpy’ or structure
       copies) less than or equal to NUM bytes.  The minimum value for NUM
       is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
       default value is target-specific.
  
! ‘-mblock-compare-inline-limit=NUM’
       Generate non-looping inline code for all block compares (such as
!      calls to ‘memcmp’ or structure compares) less than or equal to NUM
       bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
       block compare is disabled.  The default value is target-specific.
  
! ‘-mblock-compare-inline-loop-limit=NUM’
       Generate an inline expansion using loop code for all block compares
       that are less than or equal to NUM bytes, but greater than the
       limit for non-loop inline block compare expansion.  If the block
       length is not constant, at most NUM bytes will be compared before
!      ‘memcmp’ is called to compare the remainder of the block.  The
       default value is target-specific.
  
! ‘-mstring-compare-inline-limit=NUM’
       Compare at most NUM string bytes with inline code.  If the
       difference or end of string is not found at the end of the inline
!      compare a call to ‘strcmp’ or ‘strncmp’ will take care of the rest
       of the comparison.  The default is 64 bytes.
  
! ‘-G NUM’
       On embedded PowerPC systems, put global and static items less than
       or equal to NUM bytes into the small data or BSS sections instead
!      of the normal data or BSS section.  By default, NUM is 8.  The ‘-G
!      NUM’ switch is also passed to the linker.  All modules should be
!      compiled with the same ‘-G NUM’ value.
  
! ‘-mregnames’
! ‘-mno-regnames’
       On System V.4 and embedded PowerPC systems do (do not) emit
       register names in the assembly language output using symbolic
       forms.
  
! ‘-mlongcall’
! ‘-mno-longcall’
       By default assume that all calls are far away so that a longer and
       more expensive calling sequence is required.  This is required for
       calls farther than 32 megabytes (33,554,432 bytes) from the current
       location.  A short call is generated if the compiler knows the call
       cannot be that far away.  This setting can be overridden by the
!      ‘shortcall’ function attribute, or by ‘#pragma longcall(0)’.
  
       Some linkers are capable of detecting out-of-range calls and
       generating glue code on the fly.  On these systems, long calls are
*************** These '-m' options are defined for the I
*** 29323,29337 ****
  
       On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
       linkers, GCC can generate long calls using an inline PLT call
!      sequence (see '-mpltseq').  PowerPC with '-mbss-plt' and PowerPC64
       ELFv1 (big-endian) do not support inline PLT calls.
  
!      On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
!      L42', plus a "branch island" (glue code).  The two target addresses
       represent the callee and the branch island.  The Darwin/PPC linker
!      prefers the first address and generates a 'bl callee' if the PPC
!      'bl' instruction reaches the callee directly; otherwise, the linker
!      generates 'bl L42' to call the branch island.  The branch island is
       appended to the body of the calling function; it computes the full
       32-bit address of the callee and jumps to it.
  
--- 29334,29348 ----
  
       On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
       linkers, GCC can generate long calls using an inline PLT call
!      sequence (see ‘-mpltseq’).  PowerPC with ‘-mbss-plt’ and PowerPC64
       ELFv1 (big-endian) do not support inline PLT calls.
  
!      On Darwin/PPC systems, ‘#pragma longcall’ generates ‘jbsr callee,
!      L42’, plus a “branch island” (glue code).  The two target addresses
       represent the callee and the branch island.  The Darwin/PPC linker
!      prefers the first address and generates a ‘bl callee’ if the PPC
!      ‘bl’ instruction reaches the callee directly; otherwise, the linker
!      generates ‘bl L42’ to call the branch island.  The branch island is
       appended to the body of the calling function; it computes the full
       32-bit address of the callee and jumps to it.
  
*************** These '-m' options are defined for the I
*** 29342,29483 ****
       In the future, GCC may ignore all longcall specifications when the
       linker is known to generate glue.
  
! '-mpltseq'
! '-mno-pltseq'
       Implement (do not implement) -fno-plt and long calls using an
       inline PLT call sequence that supports lazy linking and long calls
       to functions in dlopen'd shared libraries.  Inline PLT calls are
       only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
       newer GNU linkers, and are enabled by default if the support is
       detected when configuring GCC, and, in the case of 32-bit PowerPC,
!      if GCC is configured with '--enable-secureplt'.  '-mpltseq' code
!      and '-mbss-plt' 32-bit PowerPC relocatable objects may not be
       linked together.
  
! '-mtls-markers'
! '-mno-tls-markers'
!      Mark (do not mark) calls to '__tls_get_addr' with a relocation
       specifying the function argument.  The relocation allows the linker
       to reliably associate function call with argument setup
       instructions for TLS optimization, which in turn allows GCC to
       better schedule the sequence.
  
! '-mrecip'
! '-mno-recip'
       This option enables use of the reciprocal estimate and reciprocal
       square root estimate instructions with additional Newton-Raphson
       steps to increase precision instead of doing a divide or square
       root and divide for floating-point arguments.  You should use the
!      '-ffast-math' option when using '-mrecip' (or at least
!      '-funsafe-math-optimizations', '-ffinite-math-only',
!      '-freciprocal-math' and '-fno-trapping-math').  Note that while the
       throughput of the sequence is generally higher than the throughput
       of the non-reciprocal instruction, the precision of the sequence
       can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
       0.99999994) for reciprocal square roots.
  
! '-mrecip=OPT'
       This option controls which reciprocal estimate instructions may be
       used.  OPT is a comma-separated list of options, which may be
!      preceded by a '!' to invert the option:
  
!      'all'
            Enable all estimate instructions.
  
!      'default'
!           Enable the default instructions, equivalent to '-mrecip'.
  
!      'none'
!           Disable all estimate instructions, equivalent to '-mno-recip'.
  
!      'div'
            Enable the reciprocal approximation instructions for both
            single and double precision.
  
!      'divf'
            Enable the single-precision reciprocal approximation
            instructions.
  
!      'divd'
            Enable the double-precision reciprocal approximation
            instructions.
  
!      'rsqrt'
            Enable the reciprocal square root approximation instructions
            for both single and double precision.
  
!      'rsqrtf'
            Enable the single-precision reciprocal square root
            approximation instructions.
  
!      'rsqrtd'
            Enable the double-precision reciprocal square root
            approximation instructions.
  
!      So, for example, '-mrecip=all,!rsqrtd' enables all of the
!      reciprocal estimate instructions, except for the 'FRSQRTE',
!      'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
       double-precision reciprocal square root calculations.
  
! '-mrecip-precision'
! '-mno-recip-precision'
       Assume (do not assume) that the reciprocal estimate instructions
       provide higher-precision estimates than is mandated by the PowerPC
!      ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
!      automatically selects '-mrecip-precision'.  The double-precision
       square root estimate instructions are not generated by default on
       low-precision machines, since they do not provide an estimate that
       converges after three steps.
  
! '-mveclibabi=TYPE'
       Specifies the ABI type to use for vectorizing intrinsics using an
!      external library.  The only type supported at present is 'mass',
       which specifies to use IBM's Mathematical Acceleration Subsystem
       (MASS) libraries for vectorizing intrinsics using external
!      libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
!      'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
!      'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
!      'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
!      'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
!      'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
!      'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
!      'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
!      'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
!      'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
!      and '-funsafe-math-optimizations' must also be enabled.  The MASS
       libraries must be specified at link time.
  
! '-mfriz'
! '-mno-friz'
!      Generate (do not generate) the 'friz' instruction when the
!      '-funsafe-math-optimizations' option is used to optimize rounding
       of floating-point values to 64-bit integer and back to floating
!      point.  The 'friz' instruction does not return the same value if
       the floating-point number is too large to fit in an integer.
  
! '-mpointers-to-nested-functions'
! '-mno-pointers-to-nested-functions'
       Generate (do not generate) code to load up the static chain
!      register ('r11') when calling through a pointer on AIX and 64-bit
       Linux systems where a function pointer points to a 3-word
       descriptor giving the function address, TOC value to be loaded in
!      register 'r2', and static chain value to be loaded in register
!      'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
       cannot call through pointers to nested functions or pointers to
       functions compiled in other languages that use the static chain if
!      you use '-mno-pointers-to-nested-functions'.
  
! '-msave-toc-indirect'
! '-mno-save-toc-indirect'
       Generate (do not generate) code to save the TOC value in the
       reserved stack location in the function prologue if the function
       calls through a pointer on AIX and 64-bit Linux systems.  If the
       TOC value is not saved in the prologue, it is saved just before the
!      call through the pointer.  The '-mno-save-toc-indirect' option is
       the default.
  
! '-mcompat-align-parm'
! '-mno-compat-align-parm'
       Generate (do not generate) code to pass structure parameters with a
       maximum alignment of 64 bits, for compatibility with older versions
       of GCC.
--- 29353,29494 ----
       In the future, GCC may ignore all longcall specifications when the
       linker is known to generate glue.
  
! ‘-mpltseq’
! ‘-mno-pltseq’
       Implement (do not implement) -fno-plt and long calls using an
       inline PLT call sequence that supports lazy linking and long calls
       to functions in dlopen'd shared libraries.  Inline PLT calls are
       only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
       newer GNU linkers, and are enabled by default if the support is
       detected when configuring GCC, and, in the case of 32-bit PowerPC,
!      if GCC is configured with ‘--enable-secureplt’.  ‘-mpltseq’ code
!      and ‘-mbss-plt’ 32-bit PowerPC relocatable objects may not be
       linked together.
  
! ‘-mtls-markers’
! ‘-mno-tls-markers’
!      Mark (do not mark) calls to ‘__tls_get_addr’ with a relocation
       specifying the function argument.  The relocation allows the linker
       to reliably associate function call with argument setup
       instructions for TLS optimization, which in turn allows GCC to
       better schedule the sequence.
  
! ‘-mrecip’
! ‘-mno-recip’
       This option enables use of the reciprocal estimate and reciprocal
       square root estimate instructions with additional Newton-Raphson
       steps to increase precision instead of doing a divide or square
       root and divide for floating-point arguments.  You should use the
!      ‘-ffast-math’ option when using ‘-mrecip’ (or at least
!      ‘-funsafe-math-optimizations’, ‘-ffinite-math-only’,
!      ‘-freciprocal-math’ and ‘-fno-trapping-math’).  Note that while the
       throughput of the sequence is generally higher than the throughput
       of the non-reciprocal instruction, the precision of the sequence
       can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
       0.99999994) for reciprocal square roots.
  
! ‘-mrecip=OPT’
       This option controls which reciprocal estimate instructions may be
       used.  OPT is a comma-separated list of options, which may be
!      preceded by a ‘!’ to invert the option:
  
!      ‘all’
            Enable all estimate instructions.
  
!      ‘default’
!           Enable the default instructions, equivalent to ‘-mrecip’.
  
!      ‘none’
!           Disable all estimate instructions, equivalent to ‘-mno-recip’.
  
!      ‘div’
            Enable the reciprocal approximation instructions for both
            single and double precision.
  
!      ‘divf’
            Enable the single-precision reciprocal approximation
            instructions.
  
!      ‘divd’
            Enable the double-precision reciprocal approximation
            instructions.
  
!      ‘rsqrt’
            Enable the reciprocal square root approximation instructions
            for both single and double precision.
  
!      ‘rsqrtf’
            Enable the single-precision reciprocal square root
            approximation instructions.
  
!      ‘rsqrtd’
            Enable the double-precision reciprocal square root
            approximation instructions.
  
!      So, for example, ‘-mrecip=all,!rsqrtd’ enables all of the
!      reciprocal estimate instructions, except for the ‘FRSQRTE’,
!      ‘XSRSQRTEDP’, and ‘XVRSQRTEDP’ instructions which handle the
       double-precision reciprocal square root calculations.
  
! ‘-mrecip-precision’
! ‘-mno-recip-precision’
       Assume (do not assume) that the reciprocal estimate instructions
       provide higher-precision estimates than is mandated by the PowerPC
!      ABI. Selecting ‘-mcpu=power6’, ‘-mcpu=power7’ or ‘-mcpu=power8’
!      automatically selects ‘-mrecip-precision’.  The double-precision
       square root estimate instructions are not generated by default on
       low-precision machines, since they do not provide an estimate that
       converges after three steps.
  
! ‘-mveclibabi=TYPE’
       Specifies the ABI type to use for vectorizing intrinsics using an
!      external library.  The only type supported at present is ‘mass’,
       which specifies to use IBM's Mathematical Acceleration Subsystem
       (MASS) libraries for vectorizing intrinsics using external
!      libraries.  GCC currently emits calls to ‘acosd2’, ‘acosf4’,
!      ‘acoshd2’, ‘acoshf4’, ‘asind2’, ‘asinf4’, ‘asinhd2’, ‘asinhf4’,
!      ‘atan2d2’, ‘atan2f4’, ‘atand2’, ‘atanf4’, ‘atanhd2’, ‘atanhf4’,
!      ‘cbrtd2’, ‘cbrtf4’, ‘cosd2’, ‘cosf4’, ‘coshd2’, ‘coshf4’, ‘erfcd2’,
!      ‘erfcf4’, ‘erfd2’, ‘erff4’, ‘exp2d2’, ‘exp2f4’, ‘expd2’, ‘expf4’,
!      ‘expm1d2’, ‘expm1f4’, ‘hypotd2’, ‘hypotf4’, ‘lgammad2’, ‘lgammaf4’,
!      ‘log10d2’, ‘log10f4’, ‘log1pd2’, ‘log1pf4’, ‘log2d2’, ‘log2f4’,
!      ‘logd2’, ‘logf4’, ‘powd2’, ‘powf4’, ‘sind2’, ‘sinf4’, ‘sinhd2’,
!      ‘sinhf4’, ‘sqrtd2’, ‘sqrtf4’, ‘tand2’, ‘tanf4’, ‘tanhd2’, and
!      ‘tanhf4’ when generating code for power7.  Both ‘-ftree-vectorize’
!      and ‘-funsafe-math-optimizations’ must also be enabled.  The MASS
       libraries must be specified at link time.
  
! ‘-mfriz’
! ‘-mno-friz’
!      Generate (do not generate) the ‘friz’ instruction when the
!      ‘-funsafe-math-optimizations’ option is used to optimize rounding
       of floating-point values to 64-bit integer and back to floating
!      point.  The ‘friz’ instruction does not return the same value if
       the floating-point number is too large to fit in an integer.
  
! ‘-mpointers-to-nested-functions’
! ‘-mno-pointers-to-nested-functions’
       Generate (do not generate) code to load up the static chain
!      register (‘r11’) when calling through a pointer on AIX and 64-bit
       Linux systems where a function pointer points to a 3-word
       descriptor giving the function address, TOC value to be loaded in
!      register ‘r2’, and static chain value to be loaded in register
!      ‘r11’.  The ‘-mpointers-to-nested-functions’ is on by default.  You
       cannot call through pointers to nested functions or pointers to
       functions compiled in other languages that use the static chain if
!      you use ‘-mno-pointers-to-nested-functions’.
  
! ‘-msave-toc-indirect’
! ‘-mno-save-toc-indirect’
       Generate (do not generate) code to save the TOC value in the
       reserved stack location in the function prologue if the function
       calls through a pointer on AIX and 64-bit Linux systems.  If the
       TOC value is not saved in the prologue, it is saved just before the
!      call through the pointer.  The ‘-mno-save-toc-indirect’ option is
       the default.
  
! ‘-mcompat-align-parm’
! ‘-mno-compat-align-parm’
       Generate (do not generate) code to pass structure parameters with a
       maximum alignment of 64 bits, for compatibility with older versions
       of GCC.
*************** These '-m' options are defined for the I
*** 29489,29547 ****
       code that is compatible with functions compiled with older versions
       of GCC.
  
!      The '-mno-compat-align-parm' option is the default.
  
! '-mstack-protector-guard=GUARD'
! '-mstack-protector-guard-reg=REG'
! '-mstack-protector-guard-offset=OFFSET'
! '-mstack-protector-guard-symbol=SYMBOL'
       Generate stack protection code using canary at GUARD.  Supported
!      locations are 'global' for global canary or 'tls' for per-thread
       canary in the TLS block (the default with GNU libc version 2.4 or
       later).
  
       With the latter choice the options
!      '-mstack-protector-guard-reg=REG' and
!      '-mstack-protector-guard-offset=OFFSET' furthermore specify which
       register to use as base register for reading the canary, and from
       what offset from that base register.  The default for those is as
       specified in the relevant ABI.
!      '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
       symbol reference to a canary in the TLS block.
  
! '-mpcrel'
! '-mno-pcrel'
!      Generate (do not generate) pc-relative addressing.  The '-mpcrel'
!      option requires that the medium code model ('-mcmodel=medium') and
!      prefixed addressing ('-mprefixed') options are enabled.
  
! '-mprefixed'
! '-mno-prefixed'
       Generate (do not generate) addressing modes using prefixed load and
!      store instructions.  The '-mprefixed' option requires that the
!      option '-mcpu=power10' (or later) is enabled.
  
! '-mmma'
! '-mno-mma'
!      Generate (do not generate) the MMA instructions.  The '-mma' option
!      requires that the option '-mcpu=power10' (or later) is enabled.
  
! '-mrop-protect'
! '-mno-rop-protect'
       Generate (do not generate) ROP protection instructions when the
       target processor supports them.  Currently this option disables the
!      shrink-wrap optimization ('-fshrink-wrap').
  
! '-mprivileged'
! '-mno-privileged'
       Generate (do not generate) code that will run in privileged state.
  
! '-mblock-ops-unaligned-vsx'
! '-mno-block-ops-unaligned-vsx'
       Generate (do not generate) unaligned vsx loads and stores for
!      inline expansion of 'memcpy' and 'memmove'.
  
! '--param rs6000-vect-unroll-limit='
       The vectorizer will check with target information to determine
       whether it would be beneficial to unroll the main vectorized loop
       and by how much.  This parameter sets the upper bound of how much
--- 29500,29558 ----
       code that is compatible with functions compiled with older versions
       of GCC.
  
!      The ‘-mno-compat-align-parm’ option is the default.
  
! ‘-mstack-protector-guard=GUARD’
! ‘-mstack-protector-guard-reg=REG’
! ‘-mstack-protector-guard-offset=OFFSET’
! ‘-mstack-protector-guard-symbol=SYMBOL’
       Generate stack protection code using canary at GUARD.  Supported
!      locations are ‘global’ for global canary or ‘tls’ for per-thread
       canary in the TLS block (the default with GNU libc version 2.4 or
       later).
  
       With the latter choice the options
!      ‘-mstack-protector-guard-reg=REG’ and
!      ‘-mstack-protector-guard-offset=OFFSET’ furthermore specify which
       register to use as base register for reading the canary, and from
       what offset from that base register.  The default for those is as
       specified in the relevant ABI.
!      ‘-mstack-protector-guard-symbol=SYMBOL’ overrides the offset with a
       symbol reference to a canary in the TLS block.
  
! ‘-mpcrel’
! ‘-mno-pcrel’
!      Generate (do not generate) pc-relative addressing.  The ‘-mpcrel’
!      option requires that the medium code model (‘-mcmodel=medium’) and
!      prefixed addressing (‘-mprefixed’) options are enabled.
  
! ‘-mprefixed’
! ‘-mno-prefixed’
       Generate (do not generate) addressing modes using prefixed load and
!      store instructions.  The ‘-mprefixed’ option requires that the
!      option ‘-mcpu=power10’ (or later) is enabled.
  
! ‘-mmma’
! ‘-mno-mma’
!      Generate (do not generate) the MMA instructions.  The ‘-mma’ option
!      requires that the option ‘-mcpu=power10’ (or later) is enabled.
  
! ‘-mrop-protect’
! ‘-mno-rop-protect’
       Generate (do not generate) ROP protection instructions when the
       target processor supports them.  Currently this option disables the
!      shrink-wrap optimization (‘-fshrink-wrap’).
  
! ‘-mprivileged’
! ‘-mno-privileged’
       Generate (do not generate) code that will run in privileged state.
  
! ‘-mblock-ops-unaligned-vsx’
! ‘-mno-block-ops-unaligned-vsx’
       Generate (do not generate) unaligned vsx loads and stores for
!      inline expansion of ‘memcpy’ and ‘memmove’.
  
! ‘--param rs6000-vect-unroll-limit=’
       The vectorizer will check with target information to determine
       whether it would be beneficial to unroll the main vectorized loop
       and by how much.  This parameter sets the upper bound of how much
*************** File: gcc.info,  Node: RX Options,  Next
*** 29556,29606 ****
  
  These command-line options are defined for RX targets:
  
! '-m64bit-doubles'
! '-m32bit-doubles'
!      Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
!      bits ('-m32bit-doubles') in size.  The default is
!      '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
!      32-bit values, which is why the default is '-m32bit-doubles'.
  
! '-fpu'
! '-nofpu'
!      Enables ('-fpu') or disables ('-nofpu') the use of RX
       floating-point hardware.  The default is enabled for the RX600
       series and disabled for the RX200 series.
  
       Floating-point instructions are only generated for 32-bit
       floating-point values, however, so the FPU hardware is not used for
!      doubles if the '-m64bit-doubles' option is used.
  
!      _Note_ If the '-fpu' option is enabled then
!      '-funsafe-math-optimizations' is also enabled automatically.  This
       is because the RX FPU instructions are themselves unsafe.
  
! '-mcpu=NAME'
       Selects the type of RX CPU to be targeted.  Currently three types
!      are supported, the generic 'RX600' and 'RX200' series hardware and
!      the specific 'RX610' CPU. The default is 'RX600'.
  
!      The only difference between 'RX600' and 'RX610' is that the 'RX610'
!      does not support the 'MVTIPL' instruction.
  
!      The 'RX200' series does not have a hardware floating-point unit and
!      so '-nofpu' is enabled by default when this type is selected.
  
! '-mbig-endian-data'
! '-mlittle-endian-data'
       Store data (but not code) in the big-endian format.  The default is
!      '-mlittle-endian-data', i.e. to store data in the little-endian
       format.
  
! '-msmall-data-limit=N'
       Specifies the maximum size in bytes of global and static variables
       which can be placed into the small data area.  Using the small data
       area can lead to smaller and faster code, but the size of area is
       limited and it is up to the programmer to ensure that the area does
       not overflow.  Also when the small data area is used one of the
!      RX's registers (usually 'r13') is reserved for use pointing to this
       area, so it is no longer available for use by the compiler.  This
       could result in slower and/or larger code if variables are pushed
       onto the stack instead of being held in this register.
--- 29567,29617 ----
  
  These command-line options are defined for RX targets:
  
! ‘-m64bit-doubles’
! ‘-m32bit-doubles’
!      Make the ‘double’ data type be 64 bits (‘-m64bit-doubles’) or 32
!      bits (‘-m32bit-doubles’) in size.  The default is
!      ‘-m32bit-doubles’.  _Note_ RX floating-point hardware only works on
!      32-bit values, which is why the default is ‘-m32bit-doubles’.
  
! ‘-fpu’
! ‘-nofpu’
!      Enables (‘-fpu’) or disables (‘-nofpu’) the use of RX
       floating-point hardware.  The default is enabled for the RX600
       series and disabled for the RX200 series.
  
       Floating-point instructions are only generated for 32-bit
       floating-point values, however, so the FPU hardware is not used for
!      doubles if the ‘-m64bit-doubles’ option is used.
  
!      _Note_ If the ‘-fpu’ option is enabled then
!      ‘-funsafe-math-optimizations’ is also enabled automatically.  This
       is because the RX FPU instructions are themselves unsafe.
  
! ‘-mcpu=NAME’
       Selects the type of RX CPU to be targeted.  Currently three types
!      are supported, the generic ‘RX600’ and ‘RX200’ series hardware and
!      the specific ‘RX610’ CPU. The default is ‘RX600’.
  
!      The only difference between ‘RX600’ and ‘RX610’ is that the ‘RX610’
!      does not support the ‘MVTIPL’ instruction.
  
!      The ‘RX200’ series does not have a hardware floating-point unit and
!      so ‘-nofpu’ is enabled by default when this type is selected.
  
! ‘-mbig-endian-data’
! ‘-mlittle-endian-data’
       Store data (but not code) in the big-endian format.  The default is
!      ‘-mlittle-endian-data’, i.e. to store data in the little-endian
       format.
  
! ‘-msmall-data-limit=N’
       Specifies the maximum size in bytes of global and static variables
       which can be placed into the small data area.  Using the small data
       area can lead to smaller and faster code, but the size of area is
       limited and it is up to the programmer to ensure that the area does
       not overflow.  Also when the small data area is used one of the
!      RX's registers (usually ‘r13’) is reserved for use pointing to this
       area, so it is no longer available for use by the compiler.  This
       could result in slower and/or larger code if variables are pushed
       onto the stack instead of being held in this register.
*************** These command-line options are defined f
*** 29611,29635 ****
  
       The default value is zero, which disables this feature.  Note, this
       feature is not enabled by default with higher optimization levels
!      ('-O2' etc) because of the potentially detrimental effects of
       reserving a register.  It is up to the programmer to experiment and
       discover whether this feature is of benefit to their program.  See
!      the description of the '-mpid' option for a description of how the
       actual register to hold the small data area pointer is chosen.
  
! '-msim'
! '-mno-sim'
       Use the simulator runtime.  The default is to use the libgloss
       board-specific runtime.
  
! '-mas100-syntax'
! '-mno-as100-syntax'
       When generating assembler output use a syntax that is compatible
       with Renesas's AS100 assembler.  This syntax can also be handled by
       the GAS assembler, but it has some restrictions so it is not
       generated by default.
  
! '-mmax-constant-size=N'
       Specifies the maximum size, in bytes, of a constant that can be
       used as an operand in a RX instruction.  Although the RX
       instruction set does allow constants of up to 4 bytes in length to
--- 29622,29646 ----
  
       The default value is zero, which disables this feature.  Note, this
       feature is not enabled by default with higher optimization levels
!      (‘-O2’ etc) because of the potentially detrimental effects of
       reserving a register.  It is up to the programmer to experiment and
       discover whether this feature is of benefit to their program.  See
!      the description of the ‘-mpid’ option for a description of how the
       actual register to hold the small data area pointer is chosen.
  
! ‘-msim’
! ‘-mno-sim’
       Use the simulator runtime.  The default is to use the libgloss
       board-specific runtime.
  
! ‘-mas100-syntax’
! ‘-mno-as100-syntax’
       When generating assembler output use a syntax that is compatible
       with Renesas's AS100 assembler.  This syntax can also be handled by
       the GAS assembler, but it has some restrictions so it is not
       generated by default.
  
! ‘-mmax-constant-size=N’
       Specifies the maximum size, in bytes, of a constant that can be
       used as an operand in a RX instruction.  Although the RX
       instruction set does allow constants of up to 4 bytes in length to
*************** These command-line options are defined f
*** 29642,29670 ****
       The value N can be between 0 and 4.  A value of 0 (the default) or
       4 means that constants of any size are allowed.
  
! '-mrelax'
       Enable linker relaxation.  Linker relaxation is a process whereby
       the linker attempts to reduce the size of a program by finding
       shorter versions of various instructions.  Disabled by default.
  
! '-mint-register=N'
       Specify the number of registers to reserve for fast interrupt
       handler functions.  The value N can be between 0 and 4.  A value of
!      1 means that register 'r13' is reserved for the exclusive use of
!      fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
!      value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
!      reserves 'r13' through 'r10'.  A value of 0, the default, does not
       reserve any registers.
  
! '-msave-acc-in-interrupts'
       Specifies that interrupt handler functions should preserve the
       accumulator register.  This is only necessary if normal code might
       use the accumulator register, for example because it performs
       64-bit multiplications.  The default is to ignore the accumulator
       as this makes the interrupt handlers faster.
  
! '-mpid'
! '-mno-pid'
       Enables the generation of position independent data.  When enabled
       any access to constant data is done via an offset from a base
       address held in a register.  This allows the location of constant
--- 29653,29681 ----
       The value N can be between 0 and 4.  A value of 0 (the default) or
       4 means that constants of any size are allowed.
  
! ‘-mrelax’
       Enable linker relaxation.  Linker relaxation is a process whereby
       the linker attempts to reduce the size of a program by finding
       shorter versions of various instructions.  Disabled by default.
  
! ‘-mint-register=N’
       Specify the number of registers to reserve for fast interrupt
       handler functions.  The value N can be between 0 and 4.  A value of
!      1 means that register ‘r13’ is reserved for the exclusive use of
!      fast interrupt handlers.  A value of 2 reserves ‘r13’ and ‘r12’.  A
!      value of 3 reserves ‘r13’, ‘r12’ and ‘r11’, and a value of 4
!      reserves ‘r13’ through ‘r10’.  A value of 0, the default, does not
       reserve any registers.
  
! ‘-msave-acc-in-interrupts’
       Specifies that interrupt handler functions should preserve the
       accumulator register.  This is only necessary if normal code might
       use the accumulator register, for example because it performs
       64-bit multiplications.  The default is to ignore the accumulator
       as this makes the interrupt handlers faster.
  
! ‘-mpid’
! ‘-mno-pid’
       Enables the generation of position independent data.  When enabled
       any access to constant data is done via an offset from a base
       address held in a register.  This allows the location of constant
*************** These command-line options are defined f
*** 29673,29706 ****
       tight memory constraints.  Data that can be modified is not
       affected by this option.
  
!      Note, using this feature reserves a register, usually 'r13', for
       the constant data base address.  This can result in slower and/or
       larger code, especially in complicated functions.
  
       The actual register chosen to hold the constant data base address
!      depends upon whether the '-msmall-data-limit' and/or the
!      '-mint-register' command-line options are enabled.  Starting with
!      register 'r13' and proceeding downwards, registers are allocated
!      first to satisfy the requirements of '-mint-register', then '-mpid'
!      and finally '-msmall-data-limit'.  Thus it is possible for the
!      small data area register to be 'r8' if both '-mint-register=4' and
!      '-mpid' are specified on the command line.
  
       By default this feature is not enabled.  The default can be
!      restored via the '-mno-pid' command-line option.
  
! '-mno-warn-multiple-fast-interrupts'
! '-mwarn-multiple-fast-interrupts'
       Prevents GCC from issuing a warning message if it finds more than
       one fast interrupt handler when it is compiling a file.  The
       default is to issue a warning for each extra fast interrupt handler
       found, as the RX only supports one such interrupt.
  
! '-mallow-string-insns'
! '-mno-allow-string-insns'
       Enables or disables the use of the string manipulation instructions
!      'SMOVF', 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' and also the
!      'RMPA' instruction.  These instructions may prefetch data, which is
       not safe to do if accessing an I/O register.  (See section 12.2.7
       of the RX62N Group User's Manual for more information).
  
--- 29684,29717 ----
       tight memory constraints.  Data that can be modified is not
       affected by this option.
  
!      Note, using this feature reserves a register, usually ‘r13’, for
       the constant data base address.  This can result in slower and/or
       larger code, especially in complicated functions.
  
       The actual register chosen to hold the constant data base address
!      depends upon whether the ‘-msmall-data-limit’ and/or the
!      ‘-mint-register’ command-line options are enabled.  Starting with
!      register ‘r13’ and proceeding downwards, registers are allocated
!      first to satisfy the requirements of ‘-mint-register’, then ‘-mpid’
!      and finally ‘-msmall-data-limit’.  Thus it is possible for the
!      small data area register to be ‘r8’ if both ‘-mint-register=4’ and
!      ‘-mpid’ are specified on the command line.
  
       By default this feature is not enabled.  The default can be
!      restored via the ‘-mno-pid’ command-line option.
  
! ‘-mno-warn-multiple-fast-interrupts’
! ‘-mwarn-multiple-fast-interrupts’
       Prevents GCC from issuing a warning message if it finds more than
       one fast interrupt handler when it is compiling a file.  The
       default is to issue a warning for each extra fast interrupt handler
       found, as the RX only supports one such interrupt.
  
! ‘-mallow-string-insns’
! ‘-mno-allow-string-insns’
       Enables or disables the use of the string manipulation instructions
!      ‘SMOVF’, ‘SCMPU’, ‘SMOVB’, ‘SMOVU’, ‘SUNTIL’ ‘SWHILE’ and also the
!      ‘RMPA’ instruction.  These instructions may prefetch data, which is
       not safe to do if accessing an I/O register.  (See section 12.2.7
       of the RX62N Group User's Manual for more information).
  
*************** These command-line options are defined f
*** 29708,29734 ****
       for GCC to reliably detect all circumstances where a string
       instruction might be used to access an I/O register, so their use
       cannot be disabled automatically.  Instead it is reliant upon the
!      programmer to use the '-mno-allow-string-insns' option if their
       program accesses I/O space.
  
       When the instructions are enabled GCC defines the C preprocessor
!      symbol '__RX_ALLOW_STRING_INSNS__', otherwise it defines the symbol
!      '__RX_DISALLOW_STRING_INSNS__'.
  
! '-mjsr'
! '-mno-jsr'
!      Use only (or not only) 'JSR' instructions to access functions.
!      This option can be used when code size exceeds the range of 'BSR'
!      instructions.  Note that '-mno-jsr' does not mean to not use 'JSR'
       but instead means that any type of branch may be used.
  
!  _Note:_ The generic GCC command-line option '-ffixed-REG' has special
! significance to the RX port when used with the 'interrupt' function
  attribute.  This attribute indicates a function intended to process fast
! interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
! 'r12' and/or 'r13' and only provided that the normal use of the
! corresponding registers have been restricted via the '-ffixed-REG' or
! '-mint-register' command-line options.
  
  
  File: gcc.info,  Node: S/390 and zSeries Options,  Next: SH Options,  Prev: RX Options,  Up: Submodel Options
--- 29719,29745 ----
       for GCC to reliably detect all circumstances where a string
       instruction might be used to access an I/O register, so their use
       cannot be disabled automatically.  Instead it is reliant upon the
!      programmer to use the ‘-mno-allow-string-insns’ option if their
       program accesses I/O space.
  
       When the instructions are enabled GCC defines the C preprocessor
!      symbol ‘__RX_ALLOW_STRING_INSNS__’, otherwise it defines the symbol
!      ‘__RX_DISALLOW_STRING_INSNS__’.
  
! ‘-mjsr’
! ‘-mno-jsr’
!      Use only (or not only) ‘JSR’ instructions to access functions.
!      This option can be used when code size exceeds the range of ‘BSR’
!      instructions.  Note that ‘-mno-jsr’ does not mean to not use ‘JSR’
       but instead means that any type of branch may be used.
  
!  _Note:_ The generic GCC command-line option ‘-ffixed-REG’ has special
! significance to the RX port when used with the ‘interrupt’ function
  attribute.  This attribute indicates a function intended to process fast
! interrupts.  GCC ensures that it only uses the registers ‘r10’, ‘r11’,
! ‘r12’ and/or ‘r13’ and only provided that the normal use of the
! corresponding registers have been restricted via the ‘-ffixed-REG’ or
! ‘-mint-register’ command-line options.
  
  
  File: gcc.info,  Node: S/390 and zSeries Options,  Next: SH Options,  Prev: RX Options,  Up: Submodel Options
*************** File: gcc.info,  Node: S/390 and zSeries
*** 29736,29923 ****
  3.19.44 S/390 and zSeries Options
  ---------------------------------
  
! These are the '-m' options defined for the S/390 and zSeries
  architecture.
  
! '-mhard-float'
! '-msoft-float'
       Use (do not use) the hardware floating-point instructions and
!      registers for floating-point operations.  When '-msoft-float' is
!      specified, functions in 'libgcc.a' are used to perform
!      floating-point operations.  When '-mhard-float' is specified, the
       compiler generates IEEE floating-point instructions.  This is the
       default.
  
! '-mhard-dfp'
! '-mno-hard-dfp'
       Use (do not use) the hardware decimal-floating-point instructions
!      for decimal-floating-point operations.  When '-mno-hard-dfp' is
!      specified, functions in 'libgcc.a' are used to perform
!      decimal-floating-point operations.  When '-mhard-dfp' is specified,
       the compiler generates decimal-floating-point hardware
!      instructions.  This is the default for '-march=z9-ec' or higher.
  
! '-mlong-double-64'
! '-mlong-double-128'
!      These switches control the size of 'long double' type.  A size of
!      64 bits makes the 'long double' type equivalent to the 'double'
       type.  This is the default.
  
! '-mbackchain'
! '-mno-backchain'
       Store (do not store) the address of the caller's frame as backchain
       pointer into the callee's stack frame.  A backchain may be needed
       to allow debugging using tools that do not understand DWARF call
!      frame information.  When '-mno-packed-stack' is in effect, the
       backchain pointer is stored at the bottom of the stack frame; when
!      '-mpacked-stack' is in effect, the backchain is placed into the
       topmost word of the 96/160 byte register save area.
  
!      In general, code compiled with '-mbackchain' is call-compatible
!      with code compiled with '-mno-backchain'; however, use of the
       backchain for debugging purposes usually requires that the whole
!      binary is built with '-mbackchain'.  Note that the combination of
!      '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
!      supported.  In order to build a linux kernel use '-msoft-float'.
  
       The default is to not maintain the backchain.
  
! '-mpacked-stack'
! '-mno-packed-stack'
!      Use (do not use) the packed stack layout.  When '-mno-packed-stack'
       is specified, the compiler uses the all fields of the 96/160 byte
       register save area only for their default purpose; unused fields
!      still take up stack space.  When '-mpacked-stack' is specified,
       register save slots are densely packed at the top of the register
       save area; unused space is reused for other purposes, allowing for
       more efficient use of the available stack space.  However, when
!      '-mbackchain' is also in effect, the topmost word of the save area
       is always used to store the backchain, and the return address
       register is always saved two words below the backchain.
  
       As long as the stack frame backchain is not used, code generated
!      with '-mpacked-stack' is call-compatible with code generated with
!      '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
       for S/390 or zSeries generated code that uses the stack frame
       backchain at run time, not just for debugging purposes.  Such code
!      is not call-compatible with code compiled with '-mpacked-stack'.
!      Also, note that the combination of '-mbackchain', '-mpacked-stack'
!      and '-mhard-float' is not supported.  In order to build a linux
!      kernel use '-msoft-float'.
  
       The default is to not use the packed stack layout.
  
! '-msmall-exec'
! '-mno-small-exec'
!      Generate (or do not generate) code using the 'bras' instruction to
       do subroutine calls.  This only works reliably if the total
       executable size does not exceed 64k.  The default is to use the
!      'basr' instruction instead, which does not have this limitation.
  
! '-m64'
! '-m31'
!      When '-m31' is specified, generate code compliant to the GNU/Linux
!      for S/390 ABI.  When '-m64' is specified, generate code compliant
       to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
!      generate 64-bit instructions.  For the 's390' targets, the default
!      is '-m31', while the 's390x' targets default to '-m64'.
  
! '-mzarch'
! '-mesa'
!      When '-mzarch' is specified, generate code using the instructions
!      available on z/Architecture.  When '-mesa' is specified, generate
       code using the instructions available on ESA/390.  Note that
!      '-mesa' is not possible with '-m64'.  When generating code
!      compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
       When generating code compliant to the GNU/Linux for zSeries ABI,
!      the default is '-mzarch'.
  
! '-mhtm'
! '-mno-htm'
!      The '-mhtm' option enables a set of builtins making use of
       instructions available with the transactional execution facility
       introduced with the IBM zEnterprise EC12 machine generation *note
!      S/390 System z Built-in Functions::.  '-mhtm' is enabled by default
!      when using '-march=zEC12'.
  
! '-mvx'
! '-mno-vx'
!      When '-mvx' is specified, generate code using the instructions
       available with the vector extension facility introduced with the
       IBM z13 machine generation.  This option changes the ABI for some
       vector type values with regard to alignment and calling
       conventions.  In case vector type values are being used in an
!      ABI-relevant context a GAS '.gnu_attribute' command will be added
!      to mark the resulting binary with the ABI used.  '-mvx' is enabled
!      by default when using '-march=z13'.
  
! '-mzvector'
! '-mno-zvector'
!      The '-mzvector' option enables vector language extensions and
       builtins using instructions available with the vector extension
       facility introduced with the IBM z13 machine generation.  This
!      option adds support for 'vector' to be used as a keyword to define
!      vector type variables and arguments.  'vector' is only available
       when GNU extensions are enabled.  It will not be expanded when
!      requesting strict standard compliance e.g. with '-std=c99'.  In
!      addition to the GCC low-level builtins '-mzvector' enables a set of
       builtins added for compatibility with AltiVec-style implementations
       like Power and Cell.  In order to make use of these builtins the
!      header file 'vecintrin.h' needs to be included.  '-mzvector' is
       disabled by default.
  
! '-mmvcle'
! '-mno-mvcle'
!      Generate (or do not generate) code using the 'mvcle' instruction to
!      perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
       loop instead.  This is the default unless optimizing for size.
  
! '-mdebug'
! '-mno-debug'
       Print (or do not print) additional debug information when
       compiling.  The default is to not print debug information.
  
! '-march=CPU-TYPE'
       Generate code that runs on CPU-TYPE, which is the name of a system
       representing a certain processor type.  Possible values for
!      CPU-TYPE are 'z900'/'arch5', 'z990'/'arch6', 'z9-109',
!      'z9-ec'/'arch7', 'z10'/'arch8', 'z196'/'arch9', 'zEC12',
!      'z13'/'arch11', 'z14'/'arch12', 'z15'/'arch13', 'z16'/'arch14', and
!      'native'.
  
!      The default is '-march=z900'.
  
!      Specifying 'native' as cpu type can be used to select the best
!      architecture option for the host processor.  '-march=native' has no
       effect if GCC does not recognize the processor.
  
! '-mtune=CPU-TYPE'
       Tune to CPU-TYPE everything applicable about the generated code,
       except for the ABI and the set of available instructions.  The list
!      of CPU-TYPE values is the same as for '-march'.  The default is the
!      value used for '-march'.
  
! '-mtpf-trace'
! '-mno-tpf-trace'
       Generate code that adds (does not add) in TPF OS specific branches
       to trace routines in the operating system.  This option is off by
       default, even when compiling for the TPF OS.
  
! '-mtpf-trace-skip'
! '-mno-tpf-trace-skip'
       Generate code that changes (does not change) the default branch
!      targets enabled by '-mtpf-trace' to point to specialized trace
       routines providing the ability of selectively skipping function
       trace entries for the TPF OS. This option is off by default, even
!      when compiling for the TPF OS and specifying '-mtpf-trace'.
  
! '-mfused-madd'
! '-mno-fused-madd'
       Generate code that uses (does not use) the floating-point multiply
       and accumulate instructions.  These instructions are generated by
       default if hardware floating point is used.
  
! '-mwarn-framesize=FRAMESIZE'
       Emit a warning if the current function exceeds the given frame
       size.  Because this is a compile-time check it doesn't need to be a
       real problem when the program runs.  It is intended to identify
--- 29747,29934 ----
  3.19.44 S/390 and zSeries Options
  ---------------------------------
  
! These are the ‘-m’ options defined for the S/390 and zSeries
  architecture.
  
! ‘-mhard-float’
! ‘-msoft-float’
       Use (do not use) the hardware floating-point instructions and
!      registers for floating-point operations.  When ‘-msoft-float’ is
!      specified, functions in ‘libgcc.a’ are used to perform
!      floating-point operations.  When ‘-mhard-float’ is specified, the
       compiler generates IEEE floating-point instructions.  This is the
       default.
  
! ‘-mhard-dfp’
! ‘-mno-hard-dfp’
       Use (do not use) the hardware decimal-floating-point instructions
!      for decimal-floating-point operations.  When ‘-mno-hard-dfp’ is
!      specified, functions in ‘libgcc.a’ are used to perform
!      decimal-floating-point operations.  When ‘-mhard-dfp’ is specified,
       the compiler generates decimal-floating-point hardware
!      instructions.  This is the default for ‘-march=z9-ec’ or higher.
  
! ‘-mlong-double-64’
! ‘-mlong-double-128’
!      These switches control the size of ‘long double’ type.  A size of
!      64 bits makes the ‘long double’ type equivalent to the ‘double’
       type.  This is the default.
  
! ‘-mbackchain’
! ‘-mno-backchain’
       Store (do not store) the address of the caller's frame as backchain
       pointer into the callee's stack frame.  A backchain may be needed
       to allow debugging using tools that do not understand DWARF call
!      frame information.  When ‘-mno-packed-stack’ is in effect, the
       backchain pointer is stored at the bottom of the stack frame; when
!      ‘-mpacked-stack’ is in effect, the backchain is placed into the
       topmost word of the 96/160 byte register save area.
  
!      In general, code compiled with ‘-mbackchain’ is call-compatible
!      with code compiled with ‘-mno-backchain’; however, use of the
       backchain for debugging purposes usually requires that the whole
!      binary is built with ‘-mbackchain’.  Note that the combination of
!      ‘-mbackchain’, ‘-mpacked-stack’ and ‘-mhard-float’ is not
!      supported.  In order to build a linux kernel use ‘-msoft-float’.
  
       The default is to not maintain the backchain.
  
! ‘-mpacked-stack’
! ‘-mno-packed-stack’
!      Use (do not use) the packed stack layout.  When ‘-mno-packed-stack’
       is specified, the compiler uses the all fields of the 96/160 byte
       register save area only for their default purpose; unused fields
!      still take up stack space.  When ‘-mpacked-stack’ is specified,
       register save slots are densely packed at the top of the register
       save area; unused space is reused for other purposes, allowing for
       more efficient use of the available stack space.  However, when
!      ‘-mbackchain’ is also in effect, the topmost word of the save area
       is always used to store the backchain, and the return address
       register is always saved two words below the backchain.
  
       As long as the stack frame backchain is not used, code generated
!      with ‘-mpacked-stack’ is call-compatible with code generated with
!      ‘-mno-packed-stack’.  Note that some non-FSF releases of GCC 2.95
       for S/390 or zSeries generated code that uses the stack frame
       backchain at run time, not just for debugging purposes.  Such code
!      is not call-compatible with code compiled with ‘-mpacked-stack’.
!      Also, note that the combination of ‘-mbackchain’, ‘-mpacked-stack’
!      and ‘-mhard-float’ is not supported.  In order to build a linux
!      kernel use ‘-msoft-float’.
  
       The default is to not use the packed stack layout.
  
! ‘-msmall-exec’
! ‘-mno-small-exec’
!      Generate (or do not generate) code using the ‘bras’ instruction to
       do subroutine calls.  This only works reliably if the total
       executable size does not exceed 64k.  The default is to use the
!      ‘basr’ instruction instead, which does not have this limitation.
  
! ‘-m64’
! ‘-m31’
!      When ‘-m31’ is specified, generate code compliant to the GNU/Linux
!      for S/390 ABI.  When ‘-m64’ is specified, generate code compliant
       to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
!      generate 64-bit instructions.  For the ‘s390’ targets, the default
!      is ‘-m31’, while the ‘s390x’ targets default to ‘-m64’.
  
! ‘-mzarch’
! ‘-mesa’
!      When ‘-mzarch’ is specified, generate code using the instructions
!      available on z/Architecture.  When ‘-mesa’ is specified, generate
       code using the instructions available on ESA/390.  Note that
!      ‘-mesa’ is not possible with ‘-m64’.  When generating code
!      compliant to the GNU/Linux for S/390 ABI, the default is ‘-mesa’.
       When generating code compliant to the GNU/Linux for zSeries ABI,
!      the default is ‘-mzarch’.
  
! ‘-mhtm’
! ‘-mno-htm’
!      The ‘-mhtm’ option enables a set of builtins making use of
       instructions available with the transactional execution facility
       introduced with the IBM zEnterprise EC12 machine generation *note
!      S/390 System z Built-in Functions::.  ‘-mhtm’ is enabled by default
!      when using ‘-march=zEC12’.
  
! ‘-mvx’
! ‘-mno-vx’
!      When ‘-mvx’ is specified, generate code using the instructions
       available with the vector extension facility introduced with the
       IBM z13 machine generation.  This option changes the ABI for some
       vector type values with regard to alignment and calling
       conventions.  In case vector type values are being used in an
!      ABI-relevant context a GAS ‘.gnu_attribute’ command will be added
!      to mark the resulting binary with the ABI used.  ‘-mvx’ is enabled
!      by default when using ‘-march=z13’.
  
! ‘-mzvector’
! ‘-mno-zvector’
!      The ‘-mzvector’ option enables vector language extensions and
       builtins using instructions available with the vector extension
       facility introduced with the IBM z13 machine generation.  This
!      option adds support for ‘vector’ to be used as a keyword to define
!      vector type variables and arguments.  ‘vector’ is only available
       when GNU extensions are enabled.  It will not be expanded when
!      requesting strict standard compliance e.g. with ‘-std=c99’.  In
!      addition to the GCC low-level builtins ‘-mzvector’ enables a set of
       builtins added for compatibility with AltiVec-style implementations
       like Power and Cell.  In order to make use of these builtins the
!      header file ‘vecintrin.h’ needs to be included.  ‘-mzvector’ is
       disabled by default.
  
! ‘-mmvcle’
! ‘-mno-mvcle’
!      Generate (or do not generate) code using the ‘mvcle’ instruction to
!      perform block moves.  When ‘-mno-mvcle’ is specified, use a ‘mvc’
       loop instead.  This is the default unless optimizing for size.
  
! ‘-mdebug’
! ‘-mno-debug’
       Print (or do not print) additional debug information when
       compiling.  The default is to not print debug information.
  
! ‘-march=CPU-TYPE’
       Generate code that runs on CPU-TYPE, which is the name of a system
       representing a certain processor type.  Possible values for
!      CPU-TYPE are ‘z900’/‘arch5’, ‘z990’/‘arch6’, ‘z9-109’,
!      ‘z9-ec’/‘arch7’, ‘z10’/‘arch8’, ‘z196’/‘arch9’, ‘zEC12’,
!      ‘z13’/‘arch11’, ‘z14’/‘arch12’, ‘z15’/‘arch13’, ‘z16’/‘arch14’, and
!      ‘native’.
  
!      The default is ‘-march=z900’.
  
!      Specifying ‘native’ as cpu type can be used to select the best
!      architecture option for the host processor.  ‘-march=native’ has no
       effect if GCC does not recognize the processor.
  
! ‘-mtune=CPU-TYPE’
       Tune to CPU-TYPE everything applicable about the generated code,
       except for the ABI and the set of available instructions.  The list
!      of CPU-TYPE values is the same as for ‘-march’.  The default is the
!      value used for ‘-march’.
  
! ‘-mtpf-trace’
! ‘-mno-tpf-trace’
       Generate code that adds (does not add) in TPF OS specific branches
       to trace routines in the operating system.  This option is off by
       default, even when compiling for the TPF OS.
  
! ‘-mtpf-trace-skip’
! ‘-mno-tpf-trace-skip’
       Generate code that changes (does not change) the default branch
!      targets enabled by ‘-mtpf-trace’ to point to specialized trace
       routines providing the ability of selectively skipping function
       trace entries for the TPF OS. This option is off by default, even
!      when compiling for the TPF OS and specifying ‘-mtpf-trace’.
  
! ‘-mfused-madd’
! ‘-mno-fused-madd’
       Generate code that uses (does not use) the floating-point multiply
       and accumulate instructions.  These instructions are generated by
       default if hardware floating point is used.
  
! ‘-mwarn-framesize=FRAMESIZE’
       Emit a warning if the current function exceeds the given frame
       size.  Because this is a compile-time check it doesn't need to be a
       real problem when the program runs.  It is intended to identify
*************** architecture.
*** 29925,29937 ****
       to be used in an environment with limited stack size e.g. the linux
       kernel.
  
! '-mwarn-dynamicstack'
!      Emit a warning if the function calls 'alloca' or uses
       dynamically-sized arrays.  This is generally a bad idea with a
       limited stack size.
  
! '-mstack-guard=STACK-GUARD'
! '-mstack-size=STACK-SIZE'
       If these options are provided the S/390 back end emits additional
       instructions in the function prologue that trigger a trap if the
       stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
--- 29936,29948 ----
       to be used in an environment with limited stack size e.g. the linux
       kernel.
  
! ‘-mwarn-dynamicstack’
!      Emit a warning if the function calls ‘alloca’ or uses
       dynamically-sized arrays.  This is generally a bad idea with a
       limited stack size.
  
! ‘-mstack-guard=STACK-GUARD’
! ‘-mstack-size=STACK-SIZE’
       If these options are provided the S/390 back end emits additional
       instructions in the function prologue that trigger a trap if the
       stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
*************** architecture.
*** 29947,29953 ****
       at an address aligned to the value given by STACK-SIZE.  The
       STACK-GUARD option can only be used in conjunction with STACK-SIZE.
  
! '-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
       If the hotpatch option is enabled, a "hot-patching" function
       prologue is generated for all functions in the compilation unit.
       The funtion label is prepended with the given number of two-byte
--- 29958,29964 ----
       at an address aligned to the value given by STACK-SIZE.  The
       STACK-GUARD option can only be used in conjunction with STACK-SIZE.
  
! ‘-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS’
       If the hotpatch option is enabled, a "hot-patching" function
       prologue is generated for all functions in the compilation unit.
       The funtion label is prepended with the given number of two-byte
*************** architecture.
*** 29958,29964 ****
       If both arguments are zero, hotpatching is disabled.
  
       This option can be overridden for individual functions with the
!      'hotpatch' attribute.
  
  
  File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
--- 29969,29975 ----
       If both arguments are zero, hotpatching is disabled.
  
       This option can be overridden for individual functions with the
!      ‘hotpatch’ attribute.
  
  
  File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
*************** File: gcc.info,  Node: SH Options,  Next
*** 29966,30201 ****
  3.19.45 SH Options
  ------------------
  
! These '-m' options are defined for the SH implementations:
  
! '-m1'
       Generate code for the SH1.
  
! '-m2'
       Generate code for the SH2.
  
! '-m2e'
       Generate code for the SH2e.
  
! '-m2a-nofpu'
       Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
       way that the floating-point unit is not used.
  
! '-m2a-single-only'
       Generate code for the SH2a-FPU, in such a way that no
       double-precision floating-point operations are used.
  
! '-m2a-single'
       Generate code for the SH2a-FPU assuming the floating-point unit is
       in single-precision mode by default.
  
! '-m2a'
       Generate code for the SH2a-FPU assuming the floating-point unit is
       in double-precision mode by default.
  
! '-m3'
       Generate code for the SH3.
  
! '-m3e'
       Generate code for the SH3e.
  
! '-m4-nofpu'
       Generate code for the SH4 without a floating-point unit.
  
! '-m4-single-only'
       Generate code for the SH4 with a floating-point unit that only
       supports single-precision arithmetic.
  
! '-m4-single'
       Generate code for the SH4 assuming the floating-point unit is in
       single-precision mode by default.
  
! '-m4'
       Generate code for the SH4.
  
! '-m4-100'
       Generate code for SH4-100.
  
! '-m4-100-nofpu'
       Generate code for SH4-100 in such a way that the floating-point
       unit is not used.
  
! '-m4-100-single'
       Generate code for SH4-100 assuming the floating-point unit is in
       single-precision mode by default.
  
! '-m4-100-single-only'
       Generate code for SH4-100 in such a way that no double-precision
       floating-point operations are used.
  
! '-m4-200'
       Generate code for SH4-200.
  
! '-m4-200-nofpu'
       Generate code for SH4-200 without in such a way that the
       floating-point unit is not used.
  
! '-m4-200-single'
       Generate code for SH4-200 assuming the floating-point unit is in
       single-precision mode by default.
  
! '-m4-200-single-only'
       Generate code for SH4-200 in such a way that no double-precision
       floating-point operations are used.
  
! '-m4-300'
       Generate code for SH4-300.
  
! '-m4-300-nofpu'
       Generate code for SH4-300 without in such a way that the
       floating-point unit is not used.
  
! '-m4-300-single'
       Generate code for SH4-300 in such a way that no double-precision
       floating-point operations are used.
  
! '-m4-300-single-only'
       Generate code for SH4-300 in such a way that no double-precision
       floating-point operations are used.
  
! '-m4-340'
       Generate code for SH4-340 (no MMU, no FPU).
  
! '-m4-500'
!      Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
       assembler.
  
! '-m4a-nofpu'
       Generate code for the SH4al-dsp, or for a SH4a in such a way that
       the floating-point unit is not used.
  
! '-m4a-single-only'
       Generate code for the SH4a, in such a way that no double-precision
       floating-point operations are used.
  
! '-m4a-single'
       Generate code for the SH4a assuming the floating-point unit is in
       single-precision mode by default.
  
! '-m4a'
       Generate code for the SH4a.
  
! '-m4al'
!      Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
       the assembler.  GCC doesn't generate any DSP instructions at the
       moment.
  
! '-mb'
       Compile code for the processor in big-endian mode.
  
! '-ml'
       Compile code for the processor in little-endian mode.
  
! '-mdalign'
       Align doubles at 64-bit boundaries.  Note that this changes the
       calling conventions, and thus some functions from the standard C
!      library do not work unless you recompile it first with '-mdalign'.
  
! '-mrelax'
       Shorten some address references at link time, when possible; uses
!      the linker option '-relax'.
  
! '-mbigtable'
!      Use 32-bit offsets in 'switch' tables.  The default is to use
       16-bit offsets.
  
! '-mbitops'
       Enable the use of bit manipulation instructions on SH2A.
  
! '-mfmovd'
!      Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
       alignment constraints.
  
! '-mrenesas'
       Comply with the calling conventions defined by Renesas.
  
! '-mno-renesas'
       Comply with the calling conventions defined for GCC before the
       Renesas conventions were available.  This option is the default for
       all targets of the SH toolchain.
  
! '-mnomacsave'
!      Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
       given.
  
! '-mieee'
! '-mno-ieee'
       Control the IEEE compliance of floating-point comparisons, which
       affects the handling of cases where the result of a comparison is
!      unordered.  By default '-mieee' is implicitly enabled.  If
!      '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
       which results in faster floating-point greater-equal and less-equal
       comparisons.  The implicit settings can be overridden by specifying
!      either '-mieee' or '-mno-ieee'.
  
! '-minline-ic_invalidate'
       Inline code to invalidate instruction cache entries after setting
       up nested function trampolines.  This option has no effect if
!      '-musermode' is in effect and the selected code generation option
!      (e.g. '-m4') does not allow the use of the 'icbi' instruction.  If
       the selected code generation option does not allow the use of the
!      'icbi' instruction, and '-musermode' is not in effect, the inlined
       code manipulates the instruction cache address array directly with
       an associative write.  This not only requires privileged mode at
       run time, but it also fails if the cache line had been mapped via
       the TLB and has become unmapped.
  
! '-misize'
       Dump instruction size and location in the assembly code.
  
! '-mpadstruct'
       This option is deprecated.  It pads structures to multiple of 4
       bytes, which is incompatible with the SH ABI.
  
! '-matomic-model=MODEL'
       Sets the model of atomic operations and additional parameters as a
       comma separated list.  For details on the atomic built-in functions
       see *note __atomic Builtins::.  The following models and parameters
       are supported:
  
!      'none'
            Disable compiler generated atomic sequences and emit library
            calls for atomic operations.  This is the default if the
!           target is not 'sh*-*-linux*'.
  
!      'soft-gusa'
            Generate GNU/Linux compatible gUSA software atomic sequences
            for the atomic built-in functions.  The generated atomic
            sequences require additional support from the
            interrupt/exception handling code of the system and are only
            suitable for SH3* and SH4* single-core systems.  This option
!           is enabled by default when the target is 'sh*-*-linux*' and
            SH3* or SH4*.  When the target is SH4A, this option also
!           partially utilizes the hardware atomic instructions 'movli.l'
!           and 'movco.l' to create more efficient code, unless 'strict'
            is specified.
  
!      'soft-tcb'
            Generate software atomic sequences that use a variable in the
            thread control block.  This is a variation of the gUSA
            sequences which can also be used on SH1* and SH2* targets.
            The generated atomic sequences require additional support from
            the interrupt/exception handling code of the system and are
            only suitable for single-core systems.  When using this model,
!           the 'gbr-offset=' parameter has to be specified as well.
  
!      'soft-imask'
            Generate software atomic sequences that temporarily disable
!           interrupts by setting 'SR.IMASK = 1111'.  This model works
            only when the program runs in privileged mode and is only
            suitable for single-core systems.  Additional support from the
            interrupt/exception handling code of the system is not
            required.  This model is enabled by default when the target is
!           'sh*-*-linux*' and SH1* or SH2*.
  
!      'hard-llcs'
!           Generate hardware atomic sequences using the 'movli.l' and
!           'movco.l' instructions only.  This is only available on SH4A
            and is suitable for multi-core systems.  Since the hardware
            instructions support only 32 bit atomic variables access to 8
            or 16 bit variables is emulated with 32 bit accesses.  Code
--- 29977,30212 ----
  3.19.45 SH Options
  ------------------
  
! These ‘-m’ options are defined for the SH implementations:
  
! ‘-m1’
       Generate code for the SH1.
  
! ‘-m2’
       Generate code for the SH2.
  
! ‘-m2e’
       Generate code for the SH2e.
  
! ‘-m2a-nofpu’
       Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
       way that the floating-point unit is not used.
  
! ‘-m2a-single-only’
       Generate code for the SH2a-FPU, in such a way that no
       double-precision floating-point operations are used.
  
! ‘-m2a-single’
       Generate code for the SH2a-FPU assuming the floating-point unit is
       in single-precision mode by default.
  
! ‘-m2a’
       Generate code for the SH2a-FPU assuming the floating-point unit is
       in double-precision mode by default.
  
! ‘-m3’
       Generate code for the SH3.
  
! ‘-m3e’
       Generate code for the SH3e.
  
! ‘-m4-nofpu’
       Generate code for the SH4 without a floating-point unit.
  
! ‘-m4-single-only’
       Generate code for the SH4 with a floating-point unit that only
       supports single-precision arithmetic.
  
! ‘-m4-single’
       Generate code for the SH4 assuming the floating-point unit is in
       single-precision mode by default.
  
! ‘-m4’
       Generate code for the SH4.
  
! ‘-m4-100’
       Generate code for SH4-100.
  
! ‘-m4-100-nofpu’
       Generate code for SH4-100 in such a way that the floating-point
       unit is not used.
  
! ‘-m4-100-single’
       Generate code for SH4-100 assuming the floating-point unit is in
       single-precision mode by default.
  
! ‘-m4-100-single-only’
       Generate code for SH4-100 in such a way that no double-precision
       floating-point operations are used.
  
! ‘-m4-200’
       Generate code for SH4-200.
  
! ‘-m4-200-nofpu’
       Generate code for SH4-200 without in such a way that the
       floating-point unit is not used.
  
! ‘-m4-200-single’
       Generate code for SH4-200 assuming the floating-point unit is in
       single-precision mode by default.
  
! ‘-m4-200-single-only’
       Generate code for SH4-200 in such a way that no double-precision
       floating-point operations are used.
  
! ‘-m4-300’
       Generate code for SH4-300.
  
! ‘-m4-300-nofpu’
       Generate code for SH4-300 without in such a way that the
       floating-point unit is not used.
  
! ‘-m4-300-single’
       Generate code for SH4-300 in such a way that no double-precision
       floating-point operations are used.
  
! ‘-m4-300-single-only’
       Generate code for SH4-300 in such a way that no double-precision
       floating-point operations are used.
  
! ‘-m4-340’
       Generate code for SH4-340 (no MMU, no FPU).
  
! ‘-m4-500’
!      Generate code for SH4-500 (no FPU). Passes ‘-isa=sh4-nofpu’ to the
       assembler.
  
! ‘-m4a-nofpu’
       Generate code for the SH4al-dsp, or for a SH4a in such a way that
       the floating-point unit is not used.
  
! ‘-m4a-single-only’
       Generate code for the SH4a, in such a way that no double-precision
       floating-point operations are used.
  
! ‘-m4a-single’
       Generate code for the SH4a assuming the floating-point unit is in
       single-precision mode by default.
  
! ‘-m4a’
       Generate code for the SH4a.
  
! ‘-m4al’
!      Same as ‘-m4a-nofpu’, except that it implicitly passes ‘-dsp’ to
       the assembler.  GCC doesn't generate any DSP instructions at the
       moment.
  
! ‘-mb’
       Compile code for the processor in big-endian mode.
  
! ‘-ml’
       Compile code for the processor in little-endian mode.
  
! ‘-mdalign’
       Align doubles at 64-bit boundaries.  Note that this changes the
       calling conventions, and thus some functions from the standard C
!      library do not work unless you recompile it first with ‘-mdalign’.
  
! ‘-mrelax’
       Shorten some address references at link time, when possible; uses
!      the linker option ‘-relax’.
  
! ‘-mbigtable’
!      Use 32-bit offsets in ‘switch’ tables.  The default is to use
       16-bit offsets.
  
! ‘-mbitops’
       Enable the use of bit manipulation instructions on SH2A.
  
! ‘-mfmovd’
!      Enable the use of the instruction ‘fmovd’.  Check ‘-mdalign’ for
       alignment constraints.
  
! ‘-mrenesas’
       Comply with the calling conventions defined by Renesas.
  
! ‘-mno-renesas’
       Comply with the calling conventions defined for GCC before the
       Renesas conventions were available.  This option is the default for
       all targets of the SH toolchain.
  
! ‘-mnomacsave’
!      Mark the ‘MAC’ register as call-clobbered, even if ‘-mrenesas’ is
       given.
  
! ‘-mieee’
! ‘-mno-ieee’
       Control the IEEE compliance of floating-point comparisons, which
       affects the handling of cases where the result of a comparison is
!      unordered.  By default ‘-mieee’ is implicitly enabled.  If
!      ‘-ffinite-math-only’ is enabled ‘-mno-ieee’ is implicitly set,
       which results in faster floating-point greater-equal and less-equal
       comparisons.  The implicit settings can be overridden by specifying
!      either ‘-mieee’ or ‘-mno-ieee’.
  
! ‘-minline-ic_invalidate’
       Inline code to invalidate instruction cache entries after setting
       up nested function trampolines.  This option has no effect if
!      ‘-musermode’ is in effect and the selected code generation option
!      (e.g. ‘-m4’) does not allow the use of the ‘icbi’ instruction.  If
       the selected code generation option does not allow the use of the
!      ‘icbi’ instruction, and ‘-musermode’ is not in effect, the inlined
       code manipulates the instruction cache address array directly with
       an associative write.  This not only requires privileged mode at
       run time, but it also fails if the cache line had been mapped via
       the TLB and has become unmapped.
  
! ‘-misize’
       Dump instruction size and location in the assembly code.
  
! ‘-mpadstruct’
       This option is deprecated.  It pads structures to multiple of 4
       bytes, which is incompatible with the SH ABI.
  
! ‘-matomic-model=MODEL’
       Sets the model of atomic operations and additional parameters as a
       comma separated list.  For details on the atomic built-in functions
       see *note __atomic Builtins::.  The following models and parameters
       are supported:
  
!      ‘none’
            Disable compiler generated atomic sequences and emit library
            calls for atomic operations.  This is the default if the
!           target is not ‘sh*-*-linux*’.
  
!      ‘soft-gusa’
            Generate GNU/Linux compatible gUSA software atomic sequences
            for the atomic built-in functions.  The generated atomic
            sequences require additional support from the
            interrupt/exception handling code of the system and are only
            suitable for SH3* and SH4* single-core systems.  This option
!           is enabled by default when the target is ‘sh*-*-linux*’ and
            SH3* or SH4*.  When the target is SH4A, this option also
!           partially utilizes the hardware atomic instructions ‘movli.l’
!           and ‘movco.l’ to create more efficient code, unless ‘strict’
            is specified.
  
!      ‘soft-tcb’
            Generate software atomic sequences that use a variable in the
            thread control block.  This is a variation of the gUSA
            sequences which can also be used on SH1* and SH2* targets.
            The generated atomic sequences require additional support from
            the interrupt/exception handling code of the system and are
            only suitable for single-core systems.  When using this model,
!           the ‘gbr-offset=’ parameter has to be specified as well.
  
!      ‘soft-imask’
            Generate software atomic sequences that temporarily disable
!           interrupts by setting ‘SR.IMASK = 1111’.  This model works
            only when the program runs in privileged mode and is only
            suitable for single-core systems.  Additional support from the
            interrupt/exception handling code of the system is not
            required.  This model is enabled by default when the target is
!           ‘sh*-*-linux*’ and SH1* or SH2*.
  
!      ‘hard-llcs’
!           Generate hardware atomic sequences using the ‘movli.l’ and
!           ‘movco.l’ instructions only.  This is only available on SH4A
            and is suitable for multi-core systems.  Since the hardware
            instructions support only 32 bit atomic variables access to 8
            or 16 bit variables is emulated with 32 bit accesses.  Code
*************** These '-m' options are defined for the S
*** 30205,30353 ****
            interrupt/exception handling code of the system is not
            required for this model.
  
!      'gbr-offset='
            This parameter specifies the offset in bytes of the variable
            in the thread control block structure that should be used by
!           the generated atomic sequences when the 'soft-tcb' model has
            been selected.  For other models this parameter is ignored.
            The specified value must be an integer multiple of four and in
            the range 0-1020.
  
!      'strict'
            This parameter prevents mixed usage of multiple atomic models,
            even if they are compatible, and makes the compiler generate
            atomic sequences of the specified model only.
  
! '-mtas'
!      Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
       that depending on the particular hardware and software
       configuration this can degrade overall performance due to the
!      operand cache line flushes that are implied by the 'tas.b'
!      instruction.  On multi-core SH4A processors the 'tas.b' instruction
       must be used with caution since it can result in data corruption
       for certain cache configurations.
  
! '-mprefergot'
       When generating position-independent code, emit function calls
       using the Global Offset Table instead of the Procedure Linkage
       Table.
  
! '-musermode'
! '-mno-usermode'
       Don't allow (allow) the compiler generating privileged mode code.
!      Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
!      the inlined code would not work in user mode.  '-musermode' is the
!      default when the target is 'sh*-*-linux*'.  If the target is SH1*
!      or SH2* '-musermode' has no effect, since there is no user mode.
  
! '-multcost=NUMBER'
       Set the cost to assume for a multiply insn.
  
! '-mdiv=STRATEGY'
       Set the division strategy to be used for integer division
       operations.  STRATEGY can be one of:
  
!      'call-div1'
            Calls a library function that uses the single-step division
!           instruction 'div1' to perform the operation.  Division by zero
            calculates an unspecified result and does not trap.  This is
            the default except for SH4, SH2A and SHcompact.
  
!      'call-fp'
            Calls a library function that performs the operation in double
            precision floating point.  Division by zero causes a
            floating-point exception.  This is the default for SHcompact
            with FPU. Specifying this for targets that do not have a
!           double precision FPU defaults to 'call-div1'.
  
!      'call-table'
            Calls a library function that uses a lookup table for small
!           divisors and the 'div1' instruction with case distinction for
            larger divisors.  Division by zero calculates an unspecified
            result and does not trap.  This is the default for SH4.
            Specifying this for targets that do not have dynamic shift
!           instructions defaults to 'call-div1'.
  
       When a division strategy has not been specified the default
       strategy is selected based on the current target.  For SH2A the
!      default strategy is to use the 'divs' and 'divu' instructions
       instead of library function calls.
  
! '-maccumulate-outgoing-args'
       Reserve space once for outgoing arguments in the function prologue
       rather than around each call.  Generally beneficial for performance
       and size.  Also needed for unwinding to avoid changing the stack
       frame around conditional code.
  
! '-mdivsi3_libfunc=NAME'
       Set the name of the library function used for 32-bit signed
!      division to NAME.  This only affects the name used in the 'call'
       division strategies, and the compiler still expects the same sets
       of input/output/clobbered registers as if this option were not
       present.
  
! '-mfixed-range=REGISTER-RANGE'
       Generate code treating the given register range as fixed registers.
       A fixed register is one that the register allocator cannot use.
       This is useful when compiling kernel code.  A register range is
       specified as two registers separated by a dash.  Multiple register
       ranges can be specified separated by a comma.
  
! '-mbranch-cost=NUM'
       Assume NUM to be the cost for a branch instruction.  Higher numbers
       make the compiler try to generate more branch-free code if
       possible.  If not specified the value is selected depending on the
       processor type that is being compiled for.
  
! '-mzdcbranch'
! '-mno-zdcbranch'
       Assume (do not assume) that zero displacement conditional branch
!      instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
       specified, the compiler prefers zero displacement branch code
       sequences.  This is enabled by default when generating code for SH4
       and SH4A. It can be explicitly disabled by specifying
!      '-mno-zdcbranch'.
  
! '-mcbranch-force-delay-slot'
       Force the usage of delay slots for conditional branches, which
!      stuffs the delay slot with a 'nop' if a suitable instruction cannot
       be found.  By default this option is disabled.  It can be enabled
       to work around hardware bugs as found in the original SH7055.
  
! '-mfused-madd'
! '-mno-fused-madd'
       Generate code that uses (does not use) the floating-point multiply
       and accumulate instructions.  These instructions are generated by
       default if hardware floating point is used.  The machine-dependent
!      '-mfused-madd' option is now mapped to the machine-independent
!      '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
!      '-ffp-contract=off'.
  
! '-mfsca'
! '-mno-fsca'
!      Allow or disallow the compiler to emit the 'fsca' instruction for
!      sine and cosine approximations.  The option '-mfsca' must be used
!      in combination with '-funsafe-math-optimizations'.  It is enabled
!      by default when generating code for SH4A. Using '-mno-fsca'
       disables sine and cosine approximations even if
!      '-funsafe-math-optimizations' is in effect.
  
! '-mfsrra'
! '-mno-fsrra'
!      Allow or disallow the compiler to emit the 'fsrra' instruction for
!      reciprocal square root approximations.  The option '-mfsrra' must
!      be used in combination with '-funsafe-math-optimizations' and
!      '-ffinite-math-only'.  It is enabled by default when generating
!      code for SH4A. Using '-mno-fsrra' disables reciprocal square root
!      approximations even if '-funsafe-math-optimizations' and
!      '-ffinite-math-only' are in effect.
  
! '-mpretend-cmove'
       Prefer zero-displacement conditional branches for conditional move
       instruction patterns.  This can result in faster code on the SH4
       processor.
  
! '-mfdpic'
       Generate code using the FDPIC ABI.
  
  
--- 30216,30364 ----
            interrupt/exception handling code of the system is not
            required for this model.
  
!      ‘gbr-offset=’
            This parameter specifies the offset in bytes of the variable
            in the thread control block structure that should be used by
!           the generated atomic sequences when the ‘soft-tcb’ model has
            been selected.  For other models this parameter is ignored.
            The specified value must be an integer multiple of four and in
            the range 0-1020.
  
!      ‘strict’
            This parameter prevents mixed usage of multiple atomic models,
            even if they are compatible, and makes the compiler generate
            atomic sequences of the specified model only.
  
! ‘-mtas’
!      Generate the ‘tas.b’ opcode for ‘__atomic_test_and_set’.  Notice
       that depending on the particular hardware and software
       configuration this can degrade overall performance due to the
!      operand cache line flushes that are implied by the ‘tas.b’
!      instruction.  On multi-core SH4A processors the ‘tas.b’ instruction
       must be used with caution since it can result in data corruption
       for certain cache configurations.
  
! ‘-mprefergot’
       When generating position-independent code, emit function calls
       using the Global Offset Table instead of the Procedure Linkage
       Table.
  
! ‘-musermode’
! ‘-mno-usermode’
       Don't allow (allow) the compiler generating privileged mode code.
!      Specifying ‘-musermode’ also implies ‘-mno-inline-ic_invalidate’ if
!      the inlined code would not work in user mode.  ‘-musermode’ is the
!      default when the target is ‘sh*-*-linux*’.  If the target is SH1*
!      or SH2* ‘-musermode’ has no effect, since there is no user mode.
  
! ‘-multcost=NUMBER’
       Set the cost to assume for a multiply insn.
  
! ‘-mdiv=STRATEGY’
       Set the division strategy to be used for integer division
       operations.  STRATEGY can be one of:
  
!      ‘call-div1’
            Calls a library function that uses the single-step division
!           instruction ‘div1’ to perform the operation.  Division by zero
            calculates an unspecified result and does not trap.  This is
            the default except for SH4, SH2A and SHcompact.
  
!      ‘call-fp’
            Calls a library function that performs the operation in double
            precision floating point.  Division by zero causes a
            floating-point exception.  This is the default for SHcompact
            with FPU. Specifying this for targets that do not have a
!           double precision FPU defaults to ‘call-div1’.
  
!      ‘call-table’
            Calls a library function that uses a lookup table for small
!           divisors and the ‘div1’ instruction with case distinction for
            larger divisors.  Division by zero calculates an unspecified
            result and does not trap.  This is the default for SH4.
            Specifying this for targets that do not have dynamic shift
!           instructions defaults to ‘call-div1’.
  
       When a division strategy has not been specified the default
       strategy is selected based on the current target.  For SH2A the
!      default strategy is to use the ‘divs’ and ‘divu’ instructions
       instead of library function calls.
  
! ‘-maccumulate-outgoing-args’
       Reserve space once for outgoing arguments in the function prologue
       rather than around each call.  Generally beneficial for performance
       and size.  Also needed for unwinding to avoid changing the stack
       frame around conditional code.
  
! ‘-mdivsi3_libfunc=NAME’
       Set the name of the library function used for 32-bit signed
!      division to NAME.  This only affects the name used in the ‘call’
       division strategies, and the compiler still expects the same sets
       of input/output/clobbered registers as if this option were not
       present.
  
! ‘-mfixed-range=REGISTER-RANGE’
       Generate code treating the given register range as fixed registers.
       A fixed register is one that the register allocator cannot use.
       This is useful when compiling kernel code.  A register range is
       specified as two registers separated by a dash.  Multiple register
       ranges can be specified separated by a comma.
  
! ‘-mbranch-cost=NUM’
       Assume NUM to be the cost for a branch instruction.  Higher numbers
       make the compiler try to generate more branch-free code if
       possible.  If not specified the value is selected depending on the
       processor type that is being compiled for.
  
! ‘-mzdcbranch’
! ‘-mno-zdcbranch’
       Assume (do not assume) that zero displacement conditional branch
!      instructions ‘bt’ and ‘bf’ are fast.  If ‘-mzdcbranch’ is
       specified, the compiler prefers zero displacement branch code
       sequences.  This is enabled by default when generating code for SH4
       and SH4A. It can be explicitly disabled by specifying
!      ‘-mno-zdcbranch’.
  
! ‘-mcbranch-force-delay-slot’
       Force the usage of delay slots for conditional branches, which
!      stuffs the delay slot with a ‘nop’ if a suitable instruction cannot
       be found.  By default this option is disabled.  It can be enabled
       to work around hardware bugs as found in the original SH7055.
  
! ‘-mfused-madd’
! ‘-mno-fused-madd’
       Generate code that uses (does not use) the floating-point multiply
       and accumulate instructions.  These instructions are generated by
       default if hardware floating point is used.  The machine-dependent
!      ‘-mfused-madd’ option is now mapped to the machine-independent
!      ‘-ffp-contract=fast’ option, and ‘-mno-fused-madd’ is mapped to
!      ‘-ffp-contract=off’.
  
! ‘-mfsca’
! ‘-mno-fsca’
!      Allow or disallow the compiler to emit the ‘fsca’ instruction for
!      sine and cosine approximations.  The option ‘-mfsca’ must be used
!      in combination with ‘-funsafe-math-optimizations’.  It is enabled
!      by default when generating code for SH4A. Using ‘-mno-fsca’
       disables sine and cosine approximations even if
!      ‘-funsafe-math-optimizations’ is in effect.
  
! ‘-mfsrra’
! ‘-mno-fsrra’
!      Allow or disallow the compiler to emit the ‘fsrra’ instruction for
!      reciprocal square root approximations.  The option ‘-mfsrra’ must
!      be used in combination with ‘-funsafe-math-optimizations’ and
!      ‘-ffinite-math-only’.  It is enabled by default when generating
!      code for SH4A. Using ‘-mno-fsrra’ disables reciprocal square root
!      approximations even if ‘-funsafe-math-optimizations’ and
!      ‘-ffinite-math-only’ are in effect.
  
! ‘-mpretend-cmove’
       Prefer zero-displacement conditional branches for conditional move
       instruction patterns.  This can result in faster code on the SH4
       processor.
  
! ‘-mfdpic’
       Generate code using the FDPIC ABI.
  
  
*************** File: gcc.info,  Node: Solaris 2 Options
*** 30356,30386 ****
  3.19.46 Solaris 2 Options
  -------------------------
  
! These '-m' options are supported on Solaris 2:
  
! '-mclear-hwcap'
!      '-mclear-hwcap' tells the compiler to remove the hardware
       capabilities generated by the Solaris assembler.  This is only
       necessary when object files use ISA extensions not supported by the
       current machine, but check at runtime whether or not to use them.
  
! '-mimpure-text'
!      '-mimpure-text', used in addition to '-shared', tells the compiler
!      to not pass '-z text' to the linker when linking a shared object.
       Using this option, you can link position-dependent code into a
       shared object.
  
!      '-mimpure-text' suppresses the "relocations remain against
       allocatable but non-writable sections" linker error message.
       However, the necessary relocations trigger copy-on-write, and the
       shared object is not actually shared across processes.  Instead of
!      using '-mimpure-text', you should compile all source code with
!      '-fpic' or '-fPIC'.
  
   These switches are supported in addition to the above on Solaris 2:
  
! '-pthreads'
!      This is a synonym for '-pthread'.
  
  
  File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: Solaris 2 Options,  Up: Submodel Options
--- 30367,30397 ----
  3.19.46 Solaris 2 Options
  -------------------------
  
! These ‘-m’ options are supported on Solaris 2:
  
! ‘-mclear-hwcap’
!      ‘-mclear-hwcap’ tells the compiler to remove the hardware
       capabilities generated by the Solaris assembler.  This is only
       necessary when object files use ISA extensions not supported by the
       current machine, but check at runtime whether or not to use them.
  
! ‘-mimpure-text’
!      ‘-mimpure-text’, used in addition to ‘-shared’, tells the compiler
!      to not pass ‘-z text’ to the linker when linking a shared object.
       Using this option, you can link position-dependent code into a
       shared object.
  
!      ‘-mimpure-text’ suppresses the "relocations remain against
       allocatable but non-writable sections" linker error message.
       However, the necessary relocations trigger copy-on-write, and the
       shared object is not actually shared across processes.  Instead of
!      using ‘-mimpure-text’, you should compile all source code with
!      ‘-fpic’ or ‘-fPIC’.
  
   These switches are supported in addition to the above on Solaris 2:
  
! ‘-pthreads’
!      This is a synonym for ‘-pthread’.
  
  
  File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: Solaris 2 Options,  Up: Submodel Options
*************** File: gcc.info,  Node: SPARC Options,  N
*** 30388,30446 ****
  3.19.47 SPARC Options
  ---------------------
  
! These '-m' options are supported on the SPARC:
  
! '-mno-app-regs'
! '-mapp-regs'
!      Specify '-mapp-regs' to generate output using the global registers
       2 through 4, which the SPARC SVR4 ABI reserves for applications.
       Like the global register 1, each global register 2 through 4 is
       then treated as an allocable register that is clobbered by function
       calls.  This is the default.
  
       To be fully SVR4 ABI-compliant at the cost of some performance
!      loss, specify '-mno-app-regs'.  You should compile libraries and
       system software with this option.
  
! '-mflat'
! '-mno-flat'
!      With '-mflat', the compiler does not generate save/restore
       instructions and uses a "flat" or single register window model.
       This model is compatible with the regular register window model.
       The local registers and the input registers (0-5) are still treated
       as "call-saved" registers and are saved on the stack as needed.
  
!      With '-mno-flat' (the default), the compiler generates save/restore
       instructions (except for leaf functions).  This is the normal
       operating mode.
  
! '-mfpu'
! '-mhard-float'
       Generate output containing floating-point instructions.  This is
       the default.
  
! '-mno-fpu'
! '-msoft-float'
       Generate output containing library calls for floating point.
       *Warning:* the requisite libraries are not available for all SPARC
       targets.  Normally the facilities of the machine's usual C compiler
       are used, but this cannot be done directly in cross-compilation.
       You must make your own arrangements to provide suitable library
       functions for cross-compilation.  The embedded targets
!      'sparc-*-aout' and 'sparclite-*-*' do provide software
       floating-point support.
  
!      '-msoft-float' changes the calling convention in the output file;
       therefore, it is only useful if you compile _all_ of a program with
!      this option.  In particular, you need to compile 'libgcc.a', the
!      library that comes with GCC, with '-msoft-float' in order for this
       to work.
  
! '-mhard-quad-float'
       Generate output containing quad-word (long double) floating-point
       instructions.
  
! '-msoft-quad-float'
       Generate output containing library calls for quad-word (long
       double) floating-point instructions.  The functions called are
       those specified in the SPARC ABI.  This is the default.
--- 30399,30457 ----
  3.19.47 SPARC Options
  ---------------------
  
! These ‘-m’ options are supported on the SPARC:
  
! ‘-mno-app-regs’
! ‘-mapp-regs’
!      Specify ‘-mapp-regs’ to generate output using the global registers
       2 through 4, which the SPARC SVR4 ABI reserves for applications.
       Like the global register 1, each global register 2 through 4 is
       then treated as an allocable register that is clobbered by function
       calls.  This is the default.
  
       To be fully SVR4 ABI-compliant at the cost of some performance
!      loss, specify ‘-mno-app-regs’.  You should compile libraries and
       system software with this option.
  
! ‘-mflat’
! ‘-mno-flat’
!      With ‘-mflat’, the compiler does not generate save/restore
       instructions and uses a "flat" or single register window model.
       This model is compatible with the regular register window model.
       The local registers and the input registers (0-5) are still treated
       as "call-saved" registers and are saved on the stack as needed.
  
!      With ‘-mno-flat’ (the default), the compiler generates save/restore
       instructions (except for leaf functions).  This is the normal
       operating mode.
  
! ‘-mfpu’
! ‘-mhard-float’
       Generate output containing floating-point instructions.  This is
       the default.
  
! ‘-mno-fpu’
! ‘-msoft-float’
       Generate output containing library calls for floating point.
       *Warning:* the requisite libraries are not available for all SPARC
       targets.  Normally the facilities of the machine's usual C compiler
       are used, but this cannot be done directly in cross-compilation.
       You must make your own arrangements to provide suitable library
       functions for cross-compilation.  The embedded targets
!      ‘sparc-*-aout’ and ‘sparclite-*-*’ do provide software
       floating-point support.
  
!      ‘-msoft-float’ changes the calling convention in the output file;
       therefore, it is only useful if you compile _all_ of a program with
!      this option.  In particular, you need to compile ‘libgcc.a’, the
!      library that comes with GCC, with ‘-msoft-float’ in order for this
       to work.
  
! ‘-mhard-quad-float’
       Generate output containing quad-word (long double) floating-point
       instructions.
  
! ‘-msoft-quad-float’
       Generate output containing library calls for quad-word (long
       double) floating-point instructions.  The functions called are
       those specified in the SPARC ABI.  This is the default.
*************** These '-m' options are supported on the
*** 30450,30463 ****
       They all invoke a trap handler for one of these instructions, and
       then the trap handler emulates the effect of the instruction.
       Because of the trap handler overhead, this is much slower than
!      calling the ABI library routines.  Thus the '-msoft-quad-float'
       option is the default.
  
! '-mno-unaligned-doubles'
! '-munaligned-doubles'
       Assume that doubles have 8-byte alignment.  This is the default.
  
!      With '-munaligned-doubles', GCC assumes that doubles have 8-byte
       alignment only if they are contained in another type, or if they
       have an absolute address.  Otherwise, it assumes they have 4-byte
       alignment.  Specifying this option avoids some rare compatibility
--- 30461,30474 ----
       They all invoke a trap handler for one of these instructions, and
       then the trap handler emulates the effect of the instruction.
       Because of the trap handler overhead, this is much slower than
!      calling the ABI library routines.  Thus the ‘-msoft-quad-float’
       option is the default.
  
! ‘-mno-unaligned-doubles’
! ‘-munaligned-doubles’
       Assume that doubles have 8-byte alignment.  This is the default.
  
!      With ‘-munaligned-doubles’, GCC assumes that doubles have 8-byte
       alignment only if they are contained in another type, or if they
       have an absolute address.  Otherwise, it assumes they have 4-byte
       alignment.  Specifying this option avoids some rare compatibility
*************** These '-m' options are supported on the
*** 30465,30518 ****
       default because it results in a performance loss, especially for
       floating-point code.
  
! '-muser-mode'
! '-mno-user-mode'
       Do not generate code that can only run in supervisor mode.  This is
!      relevant only for the 'casa' instruction emitted for the LEON3
       processor.  This is the default.
  
! '-mfaster-structs'
! '-mno-faster-structs'
!      With '-mfaster-structs', the compiler assumes that structures
       should have 8-byte alignment.  This enables the use of pairs of
!      'ldd' and 'std' instructions for copies in structure assignment, in
!      place of twice as many 'ld' and 'st' pairs.  However, the use of
       this changed alignment directly violates the SPARC ABI.  Thus, it's
       intended only for use on targets where the developer acknowledges
       that their resulting code is not directly in line with the rules of
       the ABI.
  
! '-mstd-struct-return'
! '-mno-std-struct-return'
!      With '-mstd-struct-return', the compiler generates checking code in
       functions returning structures or unions to detect size mismatches
       between the two sides of function calls, as per the 32-bit ABI.
  
!      The default is '-mno-std-struct-return'.  This option has no effect
       in 64-bit mode.
  
! '-mlra'
! '-mno-lra'
       Enable Local Register Allocation.  This is the default for SPARC
!      since GCC 7 so '-mno-lra' needs to be passed to get old Reload.
  
! '-mcpu=CPU_TYPE'
       Set the instruction set, register set, and instruction scheduling
       parameters for machine type CPU_TYPE.  Supported values for
!      CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
!      'leon', 'leon3', 'leon3v7', 'leon5', 'sparclite', 'f930', 'f934',
!      'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
!      'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
!      'niagara7' and 'm8'.
  
       Native Solaris and GNU/Linux toolchains also support the value
!      'native', which selects the best architecture option for the host
!      processor.  '-mcpu=native' has no effect if GCC does not recognize
       the processor.
  
       Default instruction scheduling parameters are used for values that
!      select an architecture and not an implementation.  These are 'v7',
!      'v8', 'sparclite', 'sparclet', 'v9'.
  
       Here is a list of each supported architecture and their supported
       implementations.
--- 30476,30529 ----
       default because it results in a performance loss, especially for
       floating-point code.
  
! ‘-muser-mode’
! ‘-mno-user-mode’
       Do not generate code that can only run in supervisor mode.  This is
!      relevant only for the ‘casa’ instruction emitted for the LEON3
       processor.  This is the default.
  
! ‘-mfaster-structs’
! ‘-mno-faster-structs’
!      With ‘-mfaster-structs’, the compiler assumes that structures
       should have 8-byte alignment.  This enables the use of pairs of
!      ‘ldd’ and ‘std’ instructions for copies in structure assignment, in
!      place of twice as many ‘ld’ and ‘st’ pairs.  However, the use of
       this changed alignment directly violates the SPARC ABI.  Thus, it's
       intended only for use on targets where the developer acknowledges
       that their resulting code is not directly in line with the rules of
       the ABI.
  
! ‘-mstd-struct-return’
! ‘-mno-std-struct-return’
!      With ‘-mstd-struct-return’, the compiler generates checking code in
       functions returning structures or unions to detect size mismatches
       between the two sides of function calls, as per the 32-bit ABI.
  
!      The default is ‘-mno-std-struct-return’.  This option has no effect
       in 64-bit mode.
  
! ‘-mlra’
! ‘-mno-lra’
       Enable Local Register Allocation.  This is the default for SPARC
!      since GCC 7 so ‘-mno-lra’ needs to be passed to get old Reload.
  
! ‘-mcpu=CPU_TYPE’
       Set the instruction set, register set, and instruction scheduling
       parameters for machine type CPU_TYPE.  Supported values for
!      CPU_TYPE are ‘v7’, ‘cypress’, ‘v8’, ‘supersparc’, ‘hypersparc’,
!      ‘leon’, ‘leon3’, ‘leon3v7’, ‘leon5’, ‘sparclite’, ‘f930’, ‘f934’,
!      ‘sparclite86x’, ‘sparclet’, ‘tsc701’, ‘v9’, ‘ultrasparc’,
!      ‘ultrasparc3’, ‘niagara’, ‘niagara2’, ‘niagara3’, ‘niagara4’,
!      ‘niagara7’ and ‘m8’.
  
       Native Solaris and GNU/Linux toolchains also support the value
!      ‘native’, which selects the best architecture option for the host
!      processor.  ‘-mcpu=native’ has no effect if GCC does not recognize
       the processor.
  
       Default instruction scheduling parameters are used for values that
!      select an architecture and not an implementation.  These are ‘v7’,
!      ‘v8’, ‘sparclite’, ‘sparclet’, ‘v9’.
  
       Here is a list of each supported architecture and their supported
       implementations.
*************** These '-m' options are supported on the
*** 30534,30727 ****
            niagara4, niagara7, m8
  
       By default (unless configured otherwise), GCC generates code for
!      the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
       the compiler additionally optimizes it for the Cypress CY7C602
       chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
       also appropriate for the older SPARCStation 1, 2, IPX etc.
  
!      With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
       architecture.  The only difference from V7 code is that the
       compiler emits the integer multiply and integer divide instructions
       which exist in SPARC-V8 but not in SPARC-V7.  With
!      '-mcpu=supersparc', the compiler additionally optimizes it for the
       SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
       series.
  
!      With '-mcpu=sparclite', GCC generates code for the SPARClite
       variant of the SPARC architecture.  This adds the integer multiply,
!      integer divide step and scan ('ffs') instructions which exist in
!      SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
       additionally optimizes it for the Fujitsu MB86930 chip, which is
!      the original SPARClite, with no FPU.  With '-mcpu=f934', the
       compiler additionally optimizes it for the Fujitsu MB86934 chip,
       which is the more recent SPARClite with FPU.
  
!      With '-mcpu=sparclet', GCC generates code for the SPARClet variant
       of the SPARC architecture.  This adds the integer multiply,
!      multiply/accumulate, integer divide step and scan ('ffs')
       instructions which exist in SPARClet but not in SPARC-V7.  With
!      '-mcpu=tsc701', the compiler additionally optimizes it for the
       TEMIC SPARClet chip.
  
!      With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
       architecture.  This adds 64-bit integer and floating-point move
       instructions, 3 additional floating-point condition code registers
!      and conditional move instructions.  With '-mcpu=ultrasparc', the
       compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
!      chips.  With '-mcpu=ultrasparc3', the compiler additionally
       optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
!      chips.  With '-mcpu=niagara', the compiler additionally optimizes
!      it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
       compiler additionally optimizes it for Sun UltraSPARC T2 chips.
!      With '-mcpu=niagara3', the compiler additionally optimizes it for
!      Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
       additionally optimizes it for Sun UltraSPARC T4 chips.  With
!      '-mcpu=niagara7', the compiler additionally optimizes it for Oracle
!      SPARC M7 chips.  With '-mcpu=m8', the compiler additionally
       optimizes it for Oracle M8 chips.
  
! '-mtune=CPU_TYPE'
       Set the instruction scheduling parameters for machine type
       CPU_TYPE, but do not set the instruction set or register set that
!      the option '-mcpu=CPU_TYPE' does.
  
!      The same values for '-mcpu=CPU_TYPE' can be used for
!      '-mtune=CPU_TYPE', but the only useful values are those that select
!      a particular CPU implementation.  Those are 'cypress',
!      'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'leon5',
!      'f930', 'f934', 'sparclite86x', 'tsc701', 'ultrasparc',
!      'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
!      'niagara7' and 'm8'.  With native Solaris and GNU/Linux toolchains,
!      'native' can also be used.
  
! '-mv8plus'
! '-mno-v8plus'
!      With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
       difference from the V8 ABI is that the global and out registers are
       considered 64 bits wide.  This is enabled by default on Solaris in
       32-bit mode for all SPARC-V9 processors.
  
! '-mvis'
! '-mno-vis'
!      With '-mvis', GCC generates code that takes advantage of the
       UltraSPARC Visual Instruction Set extensions.  The default is
!      '-mno-vis'.
  
! '-mvis2'
! '-mno-vis2'
!      With '-mvis2', GCC generates code that takes advantage of version
       2.0 of the UltraSPARC Visual Instruction Set extensions.  The
!      default is '-mvis2' when targeting a cpu that supports such
!      instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
!      also sets '-mvis'.
  
! '-mvis3'
! '-mno-vis3'
!      With '-mvis3', GCC generates code that takes advantage of version
       3.0 of the UltraSPARC Visual Instruction Set extensions.  The
!      default is '-mvis3' when targeting a cpu that supports such
!      instructions, such as niagara-3 and later.  Setting '-mvis3' also
!      sets '-mvis2' and '-mvis'.
  
! '-mvis4'
! '-mno-vis4'
!      With '-mvis4', GCC generates code that takes advantage of version
       4.0 of the UltraSPARC Visual Instruction Set extensions.  The
!      default is '-mvis4' when targeting a cpu that supports such
!      instructions, such as niagara-7 and later.  Setting '-mvis4' also
!      sets '-mvis3', '-mvis2' and '-mvis'.
  
! '-mvis4b'
! '-mno-vis4b'
!      With '-mvis4b', GCC generates code that takes advantage of version
       4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
       additional VIS instructions introduced in the Oracle SPARC
!      Architecture 2017.  The default is '-mvis4b' when targeting a cpu
       that supports such instructions, such as m8 and later.  Setting
!      '-mvis4b' also sets '-mvis4', '-mvis3', '-mvis2' and '-mvis'.
  
! '-mcbcond'
! '-mno-cbcond'
!      With '-mcbcond', GCC generates code that takes advantage of the
       UltraSPARC Compare-and-Branch-on-Condition instructions.  The
!      default is '-mcbcond' when targeting a CPU that supports such
       instructions, such as Niagara-4 and later.
  
! '-mfmaf'
! '-mno-fmaf'
!      With '-mfmaf', GCC generates code that takes advantage of the
       UltraSPARC Fused Multiply-Add Floating-point instructions.  The
!      default is '-mfmaf' when targeting a CPU that supports such
       instructions, such as Niagara-3 and later.
  
! '-mfsmuld'
! '-mno-fsmuld'
!      With '-mfsmuld', GCC generates code that takes advantage of the
       Floating-point Multiply Single to Double (FsMULd) instruction.  The
!      default is '-mfsmuld' when targeting a CPU supporting the
!      architecture versions V8 or V9 with FPU except '-mcpu=leon'.
  
! '-mpopc'
! '-mno-popc'
!      With '-mpopc', GCC generates code that takes advantage of the
!      UltraSPARC Population Count instruction.  The default is '-mpopc'
       when targeting a CPU that supports such an instruction, such as
       Niagara-2 and later.
  
! '-msubxc'
! '-mno-subxc'
!      With '-msubxc', GCC generates code that takes advantage of the
       UltraSPARC Subtract-Extended-with-Carry instruction.  The default
!      is '-msubxc' when targeting a CPU that supports such an
       instruction, such as Niagara-7 and later.
  
! '-mfix-at697f'
       Enable the documented workaround for the single erratum of the
       Atmel AT697F processor (which corresponds to erratum #13 of the
       AT697E processor).
  
! '-mfix-ut699'
       Enable the documented workarounds for the floating-point errata and
       the data cache nullify errata of the UT699 processor.
  
! '-mfix-ut700'
       Enable the documented workaround for the back-to-back store errata
       of the UT699E/UT700 processor.
  
! '-mfix-gr712rc'
       Enable the documented workaround for the back-to-back store errata
       of the GR712RC processor.
  
!  These '-m' options are supported in addition to the above on SPARC-V9
  processors in 64-bit environments:
  
! '-m32'
! '-m64'
       Generate code for a 32-bit or 64-bit environment.  The 32-bit
       environment sets int, long and pointer to 32 bits.  The 64-bit
       environment sets int to 32 bits and long and pointer to 64 bits.
  
! '-mcmodel=WHICH'
       Set the code model to one of
  
!      'medlow'
            The Medium/Low code model: 64-bit addresses, programs must be
            linked in the low 32 bits of memory.  Programs can be
            statically or dynamically linked.
  
!      'medmid'
            The Medium/Middle code model: 64-bit addresses, programs must
            be linked in the low 44 bits of memory, the text and data
            segments must be less than 2GB in size and the data segment
            must be located within 2GB of the text segment.
  
!      'medany'
            The Medium/Anywhere code model: 64-bit addresses, programs may
            be linked anywhere in memory, the text and data segments must
            be less than 2GB in size and the data segment must be located
            within 2GB of the text segment.
  
!      'embmedany'
            The Medium/Anywhere code model for embedded systems: 64-bit
            addresses, the text and data segments must be less than 2GB in
            size, both starting anywhere in memory (determined at link
--- 30545,30738 ----
            niagara4, niagara7, m8
  
       By default (unless configured otherwise), GCC generates code for
!      the V7 variant of the SPARC architecture.  With ‘-mcpu=cypress’,
       the compiler additionally optimizes it for the Cypress CY7C602
       chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
       also appropriate for the older SPARCStation 1, 2, IPX etc.
  
!      With ‘-mcpu=v8’, GCC generates code for the V8 variant of the SPARC
       architecture.  The only difference from V7 code is that the
       compiler emits the integer multiply and integer divide instructions
       which exist in SPARC-V8 but not in SPARC-V7.  With
!      ‘-mcpu=supersparc’, the compiler additionally optimizes it for the
       SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
       series.
  
!      With ‘-mcpu=sparclite’, GCC generates code for the SPARClite
       variant of the SPARC architecture.  This adds the integer multiply,
!      integer divide step and scan (‘ffs’) instructions which exist in
!      SPARClite but not in SPARC-V7.  With ‘-mcpu=f930’, the compiler
       additionally optimizes it for the Fujitsu MB86930 chip, which is
!      the original SPARClite, with no FPU.  With ‘-mcpu=f934’, the
       compiler additionally optimizes it for the Fujitsu MB86934 chip,
       which is the more recent SPARClite with FPU.
  
!      With ‘-mcpu=sparclet’, GCC generates code for the SPARClet variant
       of the SPARC architecture.  This adds the integer multiply,
!      multiply/accumulate, integer divide step and scan (‘ffs’)
       instructions which exist in SPARClet but not in SPARC-V7.  With
!      ‘-mcpu=tsc701’, the compiler additionally optimizes it for the
       TEMIC SPARClet chip.
  
!      With ‘-mcpu=v9’, GCC generates code for the V9 variant of the SPARC
       architecture.  This adds 64-bit integer and floating-point move
       instructions, 3 additional floating-point condition code registers
!      and conditional move instructions.  With ‘-mcpu=ultrasparc’, the
       compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
!      chips.  With ‘-mcpu=ultrasparc3’, the compiler additionally
       optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
!      chips.  With ‘-mcpu=niagara’, the compiler additionally optimizes
!      it for Sun UltraSPARC T1 chips.  With ‘-mcpu=niagara2’, the
       compiler additionally optimizes it for Sun UltraSPARC T2 chips.
!      With ‘-mcpu=niagara3’, the compiler additionally optimizes it for
!      Sun UltraSPARC T3 chips.  With ‘-mcpu=niagara4’, the compiler
       additionally optimizes it for Sun UltraSPARC T4 chips.  With
!      ‘-mcpu=niagara7’, the compiler additionally optimizes it for Oracle
!      SPARC M7 chips.  With ‘-mcpu=m8’, the compiler additionally
       optimizes it for Oracle M8 chips.
  
! ‘-mtune=CPU_TYPE’
       Set the instruction scheduling parameters for machine type
       CPU_TYPE, but do not set the instruction set or register set that
!      the option ‘-mcpu=CPU_TYPE’ does.
  
!      The same values for ‘-mcpu=CPU_TYPE’ can be used for
!      ‘-mtune=CPU_TYPE’, but the only useful values are those that select
!      a particular CPU implementation.  Those are ‘cypress’,
!      ‘supersparc’, ‘hypersparc’, ‘leon’, ‘leon3’, ‘leon3v7’, ‘leon5’,
!      ‘f930’, ‘f934’, ‘sparclite86x’, ‘tsc701’, ‘ultrasparc’,
!      ‘ultrasparc3’, ‘niagara’, ‘niagara2’, ‘niagara3’, ‘niagara4’,
!      ‘niagara7’ and ‘m8’.  With native Solaris and GNU/Linux toolchains,
!      ‘native’ can also be used.
  
! ‘-mv8plus’
! ‘-mno-v8plus’
!      With ‘-mv8plus’, GCC generates code for the SPARC-V8+ ABI.  The
       difference from the V8 ABI is that the global and out registers are
       considered 64 bits wide.  This is enabled by default on Solaris in
       32-bit mode for all SPARC-V9 processors.
  
! ‘-mvis’
! ‘-mno-vis’
!      With ‘-mvis’, GCC generates code that takes advantage of the
       UltraSPARC Visual Instruction Set extensions.  The default is
!      ‘-mno-vis’.
  
! ‘-mvis2’
! ‘-mno-vis2’
!      With ‘-mvis2’, GCC generates code that takes advantage of version
       2.0 of the UltraSPARC Visual Instruction Set extensions.  The
!      default is ‘-mvis2’ when targeting a cpu that supports such
!      instructions, such as UltraSPARC-III and later.  Setting ‘-mvis2’
!      also sets ‘-mvis’.
  
! ‘-mvis3’
! ‘-mno-vis3’
!      With ‘-mvis3’, GCC generates code that takes advantage of version
       3.0 of the UltraSPARC Visual Instruction Set extensions.  The
!      default is ‘-mvis3’ when targeting a cpu that supports such
!      instructions, such as niagara-3 and later.  Setting ‘-mvis3’ also
!      sets ‘-mvis2’ and ‘-mvis’.
  
! ‘-mvis4’
! ‘-mno-vis4’
!      With ‘-mvis4’, GCC generates code that takes advantage of version
       4.0 of the UltraSPARC Visual Instruction Set extensions.  The
!      default is ‘-mvis4’ when targeting a cpu that supports such
!      instructions, such as niagara-7 and later.  Setting ‘-mvis4’ also
!      sets ‘-mvis3’, ‘-mvis2’ and ‘-mvis’.
  
! ‘-mvis4b’
! ‘-mno-vis4b’
!      With ‘-mvis4b’, GCC generates code that takes advantage of version
       4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
       additional VIS instructions introduced in the Oracle SPARC
!      Architecture 2017.  The default is ‘-mvis4b’ when targeting a cpu
       that supports such instructions, such as m8 and later.  Setting
!      ‘-mvis4b’ also sets ‘-mvis4’, ‘-mvis3’, ‘-mvis2’ and ‘-mvis’.
  
! ‘-mcbcond’
! ‘-mno-cbcond’
!      With ‘-mcbcond’, GCC generates code that takes advantage of the
       UltraSPARC Compare-and-Branch-on-Condition instructions.  The
!      default is ‘-mcbcond’ when targeting a CPU that supports such
       instructions, such as Niagara-4 and later.
  
! ‘-mfmaf’
! ‘-mno-fmaf’
!      With ‘-mfmaf’, GCC generates code that takes advantage of the
       UltraSPARC Fused Multiply-Add Floating-point instructions.  The
!      default is ‘-mfmaf’ when targeting a CPU that supports such
       instructions, such as Niagara-3 and later.
  
! ‘-mfsmuld’
! ‘-mno-fsmuld’
!      With ‘-mfsmuld’, GCC generates code that takes advantage of the
       Floating-point Multiply Single to Double (FsMULd) instruction.  The
!      default is ‘-mfsmuld’ when targeting a CPU supporting the
!      architecture versions V8 or V9 with FPU except ‘-mcpu=leon’.
  
! ‘-mpopc’
! ‘-mno-popc’
!      With ‘-mpopc’, GCC generates code that takes advantage of the
!      UltraSPARC Population Count instruction.  The default is ‘-mpopc’
       when targeting a CPU that supports such an instruction, such as
       Niagara-2 and later.
  
! ‘-msubxc’
! ‘-mno-subxc’
!      With ‘-msubxc’, GCC generates code that takes advantage of the
       UltraSPARC Subtract-Extended-with-Carry instruction.  The default
!      is ‘-msubxc’ when targeting a CPU that supports such an
       instruction, such as Niagara-7 and later.
  
! ‘-mfix-at697f’
       Enable the documented workaround for the single erratum of the
       Atmel AT697F processor (which corresponds to erratum #13 of the
       AT697E processor).
  
! ‘-mfix-ut699’
       Enable the documented workarounds for the floating-point errata and
       the data cache nullify errata of the UT699 processor.
  
! ‘-mfix-ut700’
       Enable the documented workaround for the back-to-back store errata
       of the UT699E/UT700 processor.
  
! ‘-mfix-gr712rc’
       Enable the documented workaround for the back-to-back store errata
       of the GR712RC processor.
  
!  These ‘-m’ options are supported in addition to the above on SPARC-V9
  processors in 64-bit environments:
  
! ‘-m32’
! ‘-m64’
       Generate code for a 32-bit or 64-bit environment.  The 32-bit
       environment sets int, long and pointer to 32 bits.  The 64-bit
       environment sets int to 32 bits and long and pointer to 64 bits.
  
! ‘-mcmodel=WHICH’
       Set the code model to one of
  
!      ‘medlow’
            The Medium/Low code model: 64-bit addresses, programs must be
            linked in the low 32 bits of memory.  Programs can be
            statically or dynamically linked.
  
!      ‘medmid’
            The Medium/Middle code model: 64-bit addresses, programs must
            be linked in the low 44 bits of memory, the text and data
            segments must be less than 2GB in size and the data segment
            must be located within 2GB of the text segment.
  
!      ‘medany’
            The Medium/Anywhere code model: 64-bit addresses, programs may
            be linked anywhere in memory, the text and data segments must
            be less than 2GB in size and the data segment must be located
            within 2GB of the text segment.
  
!      ‘embmedany’
            The Medium/Anywhere code model for embedded systems: 64-bit
            addresses, the text and data segments must be less than 2GB in
            size, both starting anywhere in memory (determined at link
*************** processors in 64-bit environments:
*** 30729,30761 ****
            segment.  Programs are statically linked and PIC is not
            supported.
  
! '-mmemory-model=MEM-MODEL'
       Set the memory model in force on the processor to one of
  
!      'default'
            The default memory model for the processor and operating
            system.
  
!      'rmo'
            Relaxed Memory Order
  
!      'pso'
            Partial Store Order
  
!      'tso'
            Total Store Order
  
!      'sc'
            Sequential Consistency
  
       These memory models are formally defined in Appendix D of the
!      SPARC-V9 architecture manual, as set in the processor's 'PSTATE.MM'
       field.
  
! '-mstack-bias'
! '-mno-stack-bias'
!      With '-mstack-bias', GCC assumes that the stack pointer, and frame
!      pointer if present, are offset by -2047 which must be added back
       when making stack frame references.  This is the default in 64-bit
       mode.  Otherwise, assume no such offset is present.
  
--- 30740,30772 ----
            segment.  Programs are statically linked and PIC is not
            supported.
  
! ‘-mmemory-model=MEM-MODEL’
       Set the memory model in force on the processor to one of
  
!      ‘default’
            The default memory model for the processor and operating
            system.
  
!      ‘rmo’
            Relaxed Memory Order
  
!      ‘pso’
            Partial Store Order
  
!      ‘tso’
            Total Store Order
  
!      ‘sc’
            Sequential Consistency
  
       These memory models are formally defined in Appendix D of the
!      SPARC-V9 architecture manual, as set in the processor's ‘PSTATE.MM’
       field.
  
! ‘-mstack-bias’
! ‘-mno-stack-bias’
!      With ‘-mstack-bias’, GCC assumes that the stack pointer, and frame
!      pointer if present, are offset by −2047 which must be added back
       when making stack frame references.  This is the default in 64-bit
       mode.  Otherwise, assume no such offset is present.
  
*************** File: gcc.info,  Node: System V Options,
*** 30768,30790 ****
  These additional options are available on System V Release 4 for
  compatibility with other compilers on those systems:
  
! '-G'
!      Create a shared object.  It is recommended that '-symbolic' or
!      '-shared' be used instead.
  
! '-Qy'
       Identify the versions of each tool used by the compiler, in a
!      '.ident' assembler directive in the output.
  
! '-Qn'
!      Refrain from adding '.ident' directives to the output file (this is
       the default).
  
! '-YP,DIRS'
       Search the directories DIRS, and no others, for libraries specified
!      with '-l'.
  
! '-Ym,DIR'
       Look in the directory DIR to find the M4 preprocessor.  The
       assembler uses this option.
  
--- 30779,30801 ----
  These additional options are available on System V Release 4 for
  compatibility with other compilers on those systems:
  
! ‘-G’
!      Create a shared object.  It is recommended that ‘-symbolic’ or
!      ‘-shared’ be used instead.
  
! ‘-Qy’
       Identify the versions of each tool used by the compiler, in a
!      ‘.ident’ assembler directive in the output.
  
! ‘-Qn’
!      Refrain from adding ‘.ident’ directives to the output file (this is
       the default).
  
! ‘-YP,DIRS’
       Search the directories DIRS, and no others, for libraries specified
!      with ‘-l’.
  
! ‘-Ym,DIR’
       Look in the directory DIR to find the M4 preprocessor.  The
       assembler uses this option.
  
*************** File: gcc.info,  Node: V850 Options,  Ne
*** 30794,30978 ****
  3.19.49 V850 Options
  --------------------
  
! These '-m' options are defined for V850 implementations:
  
! '-mlong-calls'
! '-mno-long-calls'
       Treat all calls as being far away (near).  If calls are assumed to
       be far away, the compiler always loads the function's address into
       a register, and calls indirect through the pointer.
  
! '-mno-ep'
! '-mep'
       Do not optimize (do optimize) basic blocks that use the same index
!      pointer 4 or more times to copy pointer into the 'ep' register, and
!      use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
       on by default if you optimize.
  
! '-mno-prolog-function'
! '-mprolog-function'
       Do not use (do use) external functions to save and restore
       registers at the prologue and epilogue of a function.  The external
       functions are slower, but use less code space if more than one
       function saves the same number of registers.  The
!      '-mprolog-function' option is on by default if you optimize.
  
! '-mspace'
       Try to make the code as small as possible.  At present, this just
!      turns on the '-mep' and '-mprolog-function' options.
  
! '-mtda=N'
       Put static or global variables whose size is N bytes or less into
!      the tiny data area that register 'ep' points to.  The tiny data
       area can hold up to 256 bytes in total (128 bytes for byte
       references).
  
! '-msda=N'
       Put static or global variables whose size is N bytes or less into
!      the small data area that register 'gp' points to.  The small data
       area can hold up to 64 kilobytes.
  
! '-mzda=N'
       Put static or global variables whose size is N bytes or less into
       the first 32 kilobytes of memory.
  
! '-mv850'
       Specify that the target processor is the V850.
  
! '-mv850e3v5'
       Specify that the target processor is the V850E3V5.  The
!      preprocessor constant '__v850e3v5__' is defined if this option is
       used.
  
! '-mv850e2v4'
       Specify that the target processor is the V850E3V5.  This is an
!      alias for the '-mv850e3v5' option.
  
! '-mv850e2v3'
       Specify that the target processor is the V850E2V3.  The
!      preprocessor constant '__v850e2v3__' is defined if this option is
       used.
  
! '-mv850e2'
       Specify that the target processor is the V850E2.  The preprocessor
!      constant '__v850e2__' is defined if this option is used.
  
! '-mv850e1'
       Specify that the target processor is the V850E1.  The preprocessor
!      constants '__v850e1__' and '__v850e__' are defined if this option
       is used.
  
! '-mv850es'
       Specify that the target processor is the V850ES. This is an alias
!      for the '-mv850e1' option.
  
! '-mv850e'
       Specify that the target processor is the V850E.  The preprocessor
!      constant '__v850e__' is defined if this option is used.
  
!      If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
!      '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
!      processor is chosen and the relevant '__v850*__' preprocessor
       constant is defined.
  
!      The preprocessor constants '__v850' and '__v851__' are always
       defined, regardless of which processor variant is the target.
  
! '-mdisable-callt'
! '-mno-disable-callt'
!      This option suppresses generation of the 'CALLT' instruction for
       the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
       v850 architecture.
  
       This option is enabled by default when the RH850 ABI is in use (see
!      '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
!      If 'CALLT' instructions are being generated then the C preprocessor
!      symbol '__V850_CALLT__' is defined.
  
! '-mrelax'
! '-mno-relax'
!      Pass on (or do not pass on) the '-mrelax' command-line option to
       the assembler.
  
! '-mlong-jumps'
! '-mno-long-jumps'
       Disable (or re-enable) the generation of PC-relative jump
       instructions.
  
! '-msoft-float'
! '-mhard-float'
       Disable (or re-enable) the generation of hardware floating point
       instructions.  This option is only significant when the target
!      architecture is 'V850E2V3' or higher.  If hardware floating point
       instructions are being generated then the C preprocessor symbol
!      '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
       defined.
  
! '-mloop'
       Enables the use of the e3v5 LOOP instruction.  The use of this
       instruction is not enabled by default when the e3v5 architecture is
       selected because its use is still experimental.
  
! '-mrh850-abi'
! '-mghs'
       Enables support for the RH850 version of the V850 ABI. This is the
       default.  With this version of the ABI the following rules apply:
  
!         * Integer sized structures and unions are returned via a memory
            pointer rather than a register.
  
!         * Large structures and unions (more than 8 bytes in size) are
            passed by value.
  
!         * Functions are aligned to 16-bit boundaries.
  
!         * The '-m8byte-align' command-line option is supported.
  
!         * The '-mdisable-callt' command-line option is enabled by
!           default.  The '-mno-disable-callt' command-line option is not
            supported.
  
       When this version of the ABI is enabled the C preprocessor symbol
!      '__V850_RH850_ABI__' is defined.
  
! '-mgcc-abi'
       Enables support for the old GCC version of the V850 ABI. With this
       version of the ABI the following rules apply:
  
!         * Integer sized structures and unions are returned in register
!           'r10'.
  
!         * Large structures and unions (more than 8 bytes in size) are
            passed by reference.
  
!         * Functions are aligned to 32-bit boundaries, unless optimizing
            for size.
  
!         * The '-m8byte-align' command-line option is not supported.
  
!         * The '-mdisable-callt' command-line option is supported but not
            enabled by default.
  
       When this version of the ABI is enabled the C preprocessor symbol
!      '__V850_GCC_ABI__' is defined.
  
! '-m8byte-align'
! '-mno-8byte-align'
!      Enables support for 'double' and 'long long' types to be aligned on
       8-byte boundaries.  The default is to restrict the alignment of all
!      objects to at most 4-bytes.  When '-m8byte-align' is in effect the
!      C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.
  
! '-mbig-switch'
       Generate code suitable for big switch tables.  Use this option only
       if the assembler/linker complain about out of range branches within
       a switch table.
  
! '-mapp-regs'
       This option causes r2 and r5 to be used in the code generated by
       the compiler.  This setting is the default.
  
! '-mno-app-regs'
       This option causes r2 and r5 to be treated as fixed registers.
  
  
--- 30805,30989 ----
  3.19.49 V850 Options
  --------------------
  
! These ‘-m’ options are defined for V850 implementations:
  
! ‘-mlong-calls’
! ‘-mno-long-calls’
       Treat all calls as being far away (near).  If calls are assumed to
       be far away, the compiler always loads the function's address into
       a register, and calls indirect through the pointer.
  
! ‘-mno-ep’
! ‘-mep’
       Do not optimize (do optimize) basic blocks that use the same index
!      pointer 4 or more times to copy pointer into the ‘ep’ register, and
!      use the shorter ‘sld’ and ‘sst’ instructions.  The ‘-mep’ option is
       on by default if you optimize.
  
! ‘-mno-prolog-function’
! ‘-mprolog-function’
       Do not use (do use) external functions to save and restore
       registers at the prologue and epilogue of a function.  The external
       functions are slower, but use less code space if more than one
       function saves the same number of registers.  The
!      ‘-mprolog-function’ option is on by default if you optimize.
  
! ‘-mspace’
       Try to make the code as small as possible.  At present, this just
!      turns on the ‘-mep’ and ‘-mprolog-function’ options.
  
! ‘-mtda=N’
       Put static or global variables whose size is N bytes or less into
!      the tiny data area that register ‘ep’ points to.  The tiny data
       area can hold up to 256 bytes in total (128 bytes for byte
       references).
  
! ‘-msda=N’
       Put static or global variables whose size is N bytes or less into
!      the small data area that register ‘gp’ points to.  The small data
       area can hold up to 64 kilobytes.
  
! ‘-mzda=N’
       Put static or global variables whose size is N bytes or less into
       the first 32 kilobytes of memory.
  
! ‘-mv850’
       Specify that the target processor is the V850.
  
! ‘-mv850e3v5’
       Specify that the target processor is the V850E3V5.  The
!      preprocessor constant ‘__v850e3v5__’ is defined if this option is
       used.
  
! ‘-mv850e2v4’
       Specify that the target processor is the V850E3V5.  This is an
!      alias for the ‘-mv850e3v5’ option.
  
! ‘-mv850e2v3’
       Specify that the target processor is the V850E2V3.  The
!      preprocessor constant ‘__v850e2v3__’ is defined if this option is
       used.
  
! ‘-mv850e2’
       Specify that the target processor is the V850E2.  The preprocessor
!      constant ‘__v850e2__’ is defined if this option is used.
  
! ‘-mv850e1’
       Specify that the target processor is the V850E1.  The preprocessor
!      constants ‘__v850e1__’ and ‘__v850e__’ are defined if this option
       is used.
  
! ‘-mv850es’
       Specify that the target processor is the V850ES. This is an alias
!      for the ‘-mv850e1’ option.
  
! ‘-mv850e’
       Specify that the target processor is the V850E.  The preprocessor
!      constant ‘__v850e__’ is defined if this option is used.
  
!      If neither ‘-mv850’ nor ‘-mv850e’ nor ‘-mv850e1’ nor ‘-mv850e2’ nor
!      ‘-mv850e2v3’ nor ‘-mv850e3v5’ are defined then a default target
!      processor is chosen and the relevant ‘__v850*__’ preprocessor
       constant is defined.
  
!      The preprocessor constants ‘__v850’ and ‘__v851__’ are always
       defined, regardless of which processor variant is the target.
  
! ‘-mdisable-callt’
! ‘-mno-disable-callt’
!      This option suppresses generation of the ‘CALLT’ instruction for
       the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
       v850 architecture.
  
       This option is enabled by default when the RH850 ABI is in use (see
!      ‘-mrh850-abi’), and disabled by default when the GCC ABI is in use.
!      If ‘CALLT’ instructions are being generated then the C preprocessor
!      symbol ‘__V850_CALLT__’ is defined.
  
! ‘-mrelax’
! ‘-mno-relax’
!      Pass on (or do not pass on) the ‘-mrelax’ command-line option to
       the assembler.
  
! ‘-mlong-jumps’
! ‘-mno-long-jumps’
       Disable (or re-enable) the generation of PC-relative jump
       instructions.
  
! ‘-msoft-float’
! ‘-mhard-float’
       Disable (or re-enable) the generation of hardware floating point
       instructions.  This option is only significant when the target
!      architecture is ‘V850E2V3’ or higher.  If hardware floating point
       instructions are being generated then the C preprocessor symbol
!      ‘__FPU_OK__’ is defined, otherwise the symbol ‘__NO_FPU__’ is
       defined.
  
! ‘-mloop’
       Enables the use of the e3v5 LOOP instruction.  The use of this
       instruction is not enabled by default when the e3v5 architecture is
       selected because its use is still experimental.
  
! ‘-mrh850-abi’
! ‘-mghs’
       Enables support for the RH850 version of the V850 ABI. This is the
       default.  With this version of the ABI the following rules apply:
  
!         • Integer sized structures and unions are returned via a memory
            pointer rather than a register.
  
!         • Large structures and unions (more than 8 bytes in size) are
            passed by value.
  
!         • Functions are aligned to 16-bit boundaries.
  
!         • The ‘-m8byte-align’ command-line option is supported.
  
!         • The ‘-mdisable-callt’ command-line option is enabled by
!           default.  The ‘-mno-disable-callt’ command-line option is not
            supported.
  
       When this version of the ABI is enabled the C preprocessor symbol
!      ‘__V850_RH850_ABI__’ is defined.
  
! ‘-mgcc-abi’
       Enables support for the old GCC version of the V850 ABI. With this
       version of the ABI the following rules apply:
  
!         • Integer sized structures and unions are returned in register
!           ‘r10’.
  
!         • Large structures and unions (more than 8 bytes in size) are
            passed by reference.
  
!         • Functions are aligned to 32-bit boundaries, unless optimizing
            for size.
  
!         • The ‘-m8byte-align’ command-line option is not supported.
  
!         • The ‘-mdisable-callt’ command-line option is supported but not
            enabled by default.
  
       When this version of the ABI is enabled the C preprocessor symbol
!      ‘__V850_GCC_ABI__’ is defined.
  
! ‘-m8byte-align’
! ‘-mno-8byte-align’
!      Enables support for ‘double’ and ‘long long’ types to be aligned on
       8-byte boundaries.  The default is to restrict the alignment of all
!      objects to at most 4-bytes.  When ‘-m8byte-align’ is in effect the
!      C preprocessor symbol ‘__V850_8BYTE_ALIGN__’ is defined.
  
! ‘-mbig-switch’
       Generate code suitable for big switch tables.  Use this option only
       if the assembler/linker complain about out of range branches within
       a switch table.
  
! ‘-mapp-regs’
       This option causes r2 and r5 to be used in the code generated by
       the compiler.  This setting is the default.
  
! ‘-mno-app-regs’
       This option causes r2 and r5 to be treated as fixed registers.
  
  
*************** File: gcc.info,  Node: VAX Options,  Nex
*** 30981,31002 ****
  3.19.50 VAX Options
  -------------------
  
! These '-m' options are defined for the VAX:
  
! '-munix'
!      Do not output certain jump instructions ('aobleq' and so on) that
       the Unix assembler for the VAX cannot handle across long ranges.
  
! '-mgnu'
       Do output those jump instructions, on the assumption that the GNU
       assembler is being used.
  
! '-mg'
       Output code for G-format floating-point numbers instead of
       D-format.
  
! '-mlra'
! '-mno-lra'
       Enable Local Register Allocation.  This is still experimental for
       the VAX, so by default the compiler uses standard reload.
  
--- 30992,31013 ----
  3.19.50 VAX Options
  -------------------
  
! These ‘-m’ options are defined for the VAX:
  
! ‘-munix’
!      Do not output certain jump instructions (‘aobleq’ and so on) that
       the Unix assembler for the VAX cannot handle across long ranges.
  
! ‘-mgnu’
       Do output those jump instructions, on the assumption that the GNU
       assembler is being used.
  
! ‘-mg’
       Output code for G-format floating-point numbers instead of
       D-format.
  
! ‘-mlra’
! ‘-mno-lra’
       Enable Local Register Allocation.  This is still experimental for
       the VAX, so by default the compiler uses standard reload.
  
*************** File: gcc.info,  Node: Visium Options,
*** 31006,31062 ****
  3.19.51 Visium Options
  ----------------------
  
! '-mdebug'
       A program which performs file I/O and is destined to run on an MCM
       target should be linked with this option.  It causes the libraries
       libc.a and libdebug.a to be linked.  The program should be run on
       the target under the control of the GDB remote debugging stub.
  
! '-msim'
       A program which performs file I/O and is destined to run on the
       simulator should be linked with option.  This causes libraries
       libc.a and libsim.a to be linked.
  
! '-mfpu'
! '-mhard-float'
       Generate code containing floating-point instructions.  This is the
       default.
  
! '-mno-fpu'
! '-msoft-float'
       Generate code containing library calls for floating-point.
  
!      '-msoft-float' changes the calling convention in the output file;
       therefore, it is only useful if you compile _all_ of a program with
!      this option.  In particular, you need to compile 'libgcc.a', the
!      library that comes with GCC, with '-msoft-float' in order for this
       to work.
  
! '-mcpu=CPU_TYPE'
       Set the instruction set, register set, and instruction scheduling
       parameters for machine type CPU_TYPE.  Supported values for
!      CPU_TYPE are 'mcm', 'gr5' and 'gr6'.
  
!      'mcm' is a synonym of 'gr5' present for backward compatibility.
  
       By default (unless configured otherwise), GCC generates code for
       the GR5 variant of the Visium architecture.
  
!      With '-mcpu=gr6', GCC generates code for the GR6 variant of the
       Visium architecture.  The only difference from GR5 code is that the
       compiler will generate block move instructions.
  
! '-mtune=CPU_TYPE'
       Set the instruction scheduling parameters for machine type
       CPU_TYPE, but do not set the instruction set or register set that
!      the option '-mcpu=CPU_TYPE' would.
  
! '-msv-mode'
       Generate code for the supervisor mode, where there are no
       restrictions on the access to general registers.  This is the
       default.
  
! '-muser-mode'
       Generate code for the user mode, where the access to some general
       registers is forbidden: on the GR5, registers r24 to r31 cannot be
       accessed in this mode; on the GR6, only registers r29 to r31 are
--- 31017,31073 ----
  3.19.51 Visium Options
  ----------------------
  
! ‘-mdebug’
       A program which performs file I/O and is destined to run on an MCM
       target should be linked with this option.  It causes the libraries
       libc.a and libdebug.a to be linked.  The program should be run on
       the target under the control of the GDB remote debugging stub.
  
! ‘-msim’
       A program which performs file I/O and is destined to run on the
       simulator should be linked with option.  This causes libraries
       libc.a and libsim.a to be linked.
  
! ‘-mfpu’
! ‘-mhard-float’
       Generate code containing floating-point instructions.  This is the
       default.
  
! ‘-mno-fpu’
! ‘-msoft-float’
       Generate code containing library calls for floating-point.
  
!      ‘-msoft-float’ changes the calling convention in the output file;
       therefore, it is only useful if you compile _all_ of a program with
!      this option.  In particular, you need to compile ‘libgcc.a’, the
!      library that comes with GCC, with ‘-msoft-float’ in order for this
       to work.
  
! ‘-mcpu=CPU_TYPE’
       Set the instruction set, register set, and instruction scheduling
       parameters for machine type CPU_TYPE.  Supported values for
!      CPU_TYPE are ‘mcm’, ‘gr5’ and ‘gr6’.
  
!      ‘mcm’ is a synonym of ‘gr5’ present for backward compatibility.
  
       By default (unless configured otherwise), GCC generates code for
       the GR5 variant of the Visium architecture.
  
!      With ‘-mcpu=gr6’, GCC generates code for the GR6 variant of the
       Visium architecture.  The only difference from GR5 code is that the
       compiler will generate block move instructions.
  
! ‘-mtune=CPU_TYPE’
       Set the instruction scheduling parameters for machine type
       CPU_TYPE, but do not set the instruction set or register set that
!      the option ‘-mcpu=CPU_TYPE’ would.
  
! ‘-msv-mode’
       Generate code for the supervisor mode, where there are no
       restrictions on the access to general registers.  This is the
       default.
  
! ‘-muser-mode’
       Generate code for the user mode, where the access to some general
       registers is forbidden: on the GR5, registers r24 to r31 cannot be
       accessed in this mode; on the GR6, only registers r29 to r31 are
*************** File: gcc.info,  Node: VMS Options,  Nex
*** 31068,31091 ****
  3.19.52 VMS Options
  -------------------
  
! These '-m' options are defined for the VMS implementations:
  
! '-mvms-return-codes'
!      Return VMS condition codes from 'main'.  The default is to return
       POSIX-style condition (e.g. error) codes.
  
! '-mdebug-main=PREFIX'
       Flag the first routine whose name starts with PREFIX as the main
       routine for the debugger.
  
! '-mmalloc64'
       Default to 64-bit memory allocation routines.
  
! '-mpointer-size=SIZE'
       Set the default size of pointers.  Possible options for SIZE are
!      '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
!      pointers, and 'no' for supporting only 32 bit pointers.  The later
!      option disables 'pragma pointer_size'.
  
  
  File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
--- 31079,31102 ----
  3.19.52 VMS Options
  -------------------
  
! These ‘-m’ options are defined for the VMS implementations:
  
! ‘-mvms-return-codes’
!      Return VMS condition codes from ‘main’.  The default is to return
       POSIX-style condition (e.g. error) codes.
  
! ‘-mdebug-main=PREFIX’
       Flag the first routine whose name starts with PREFIX as the main
       routine for the debugger.
  
! ‘-mmalloc64’
       Default to 64-bit memory allocation routines.
  
! ‘-mpointer-size=SIZE’
       Set the default size of pointers.  Possible options for SIZE are
!      ‘32’ or ‘short’ for 32 bit pointers, ‘64’ or ‘long’ for 64 bit
!      pointers, and ‘no’ for supporting only 32 bit pointers.  The later
!      option disables ‘pragma pointer_size’.
  
  
  File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
*************** The options in this section are defined
*** 31097,31128 ****
  Options specific to the target hardware are listed with the other
  options for that target.
  
! '-mrtp'
       GCC can generate code for both VxWorks kernels and real time
       processes (RTPs).  This option switches from the former to the
!      latter.  It also defines the preprocessor macro '__RTP__'.
  
! '-msmp'
       Select SMP runtimes for linking.  Not available on architectures
       other than PowerPC, nor on VxWorks version 7 or later, in which the
       selection is part of the VxWorks build configuration and the
       library paths are the same for either choice.
  
! '-non-static'
       Link an RTP executable against shared libraries rather than static
!      libraries.  The options '-static' and '-shared' can also be used
!      for RTPs (*note Link Options::); '-static' is the default.
  
! '-Bstatic'
! '-Bdynamic'
       These options are passed down to the linker.  They are defined for
       compatibility with Diab.
  
! '-Xbind-lazy'
       Enable lazy binding of function calls.  This option is equivalent
!      to '-Wl,-z,now' and is defined for compatibility with Diab.
  
! '-Xbind-now'
       Disable lazy binding of function calls.  This option is the default
       and is defined for compatibility with Diab.
  
--- 31108,31139 ----
  Options specific to the target hardware are listed with the other
  options for that target.
  
! ‘-mrtp’
       GCC can generate code for both VxWorks kernels and real time
       processes (RTPs).  This option switches from the former to the
!      latter.  It also defines the preprocessor macro ‘__RTP__’.
  
! ‘-msmp’
       Select SMP runtimes for linking.  Not available on architectures
       other than PowerPC, nor on VxWorks version 7 or later, in which the
       selection is part of the VxWorks build configuration and the
       library paths are the same for either choice.
  
! ‘-non-static’
       Link an RTP executable against shared libraries rather than static
!      libraries.  The options ‘-static’ and ‘-shared’ can also be used
!      for RTPs (*note Link Options::); ‘-static’ is the default.
  
! ‘-Bstatic’
! ‘-Bdynamic’
       These options are passed down to the linker.  They are defined for
       compatibility with Diab.
  
! ‘-Xbind-lazy’
       Enable lazy binding of function calls.  This option is equivalent
!      to ‘-Wl,-z,now’ and is defined for compatibility with Diab.
  
! ‘-Xbind-now’
       Disable lazy binding of function calls.  This option is the default
       and is defined for compatibility with Diab.
  
*************** File: gcc.info,  Node: x86 Options,  Nex
*** 31132,31164 ****
  3.19.54 x86 Options
  -------------------
  
! These '-m' options are defined for the x86 family of computers.
  
! '-march=CPU-TYPE'
       Generate instructions for the machine type CPU-TYPE.  In contrast
!      to '-mtune=CPU-TYPE', which merely tunes the generated code for the
!      specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
       that may not run at all on processors other than the one indicated.
!      Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE', except
       where noted otherwise.
  
       The choices for CPU-TYPE are:
  
!      'native'
            This selects the CPU to generate code for at compilation time
            by determining the processor type of the compiling machine.
!           Using '-march=native' enables all instruction subsets
            supported by the local machine (hence the result might not run
!           on different machines).  Using '-mtune=native' produces code
            optimized for the local machine under the constraints of the
            selected instruction set.
  
!      'x86-64'
            A generic CPU with 64-bit extensions.
  
!      'x86-64-v2'
!      'x86-64-v3'
!      'x86-64-v4'
            These choices for CPU-TYPE select the corresponding
            micro-architecture level from the x86-64 psABI. On ABIs other
            than the x86-64 psABI they select the same CPU features as the
--- 31143,31175 ----
  3.19.54 x86 Options
  -------------------
  
! These ‘-m’ options are defined for the x86 family of computers.
  
! ‘-march=CPU-TYPE’
       Generate instructions for the machine type CPU-TYPE.  In contrast
!      to ‘-mtune=CPU-TYPE’, which merely tunes the generated code for the
!      specified CPU-TYPE, ‘-march=CPU-TYPE’ allows GCC to generate code
       that may not run at all on processors other than the one indicated.
!      Specifying ‘-march=CPU-TYPE’ implies ‘-mtune=CPU-TYPE’, except
       where noted otherwise.
  
       The choices for CPU-TYPE are:
  
!      ‘native’
            This selects the CPU to generate code for at compilation time
            by determining the processor type of the compiling machine.
!           Using ‘-march=native’ enables all instruction subsets
            supported by the local machine (hence the result might not run
!           on different machines).  Using ‘-mtune=native’ produces code
            optimized for the local machine under the constraints of the
            selected instruction set.
  
!      ‘x86-64’
            A generic CPU with 64-bit extensions.
  
!      ‘x86-64-v2’
!      ‘x86-64-v3’
!      ‘x86-64-v4’
            These choices for CPU-TYPE select the corresponding
            micro-architecture level from the x86-64 psABI. On ABIs other
            than the x86-64 psABI they select the same CPU features as the
*************** These '-m' options are defined for the x
*** 31166,31279 ****
            level.
  
            Since these CPU-TYPE values do not have a corresponding
!           '-mtune' setting, using '-march' with these values enables
            generic tuning.  Specific tuning can be enabled using the
!           '-mtune=OTHER-CPU-TYPE' option with an appropriate
            OTHER-CPU-TYPE value.
  
!      'i386'
            Original Intel i386 CPU.
  
!      'i486'
            Intel i486 CPU.  (No scheduling is implemented for this chip.)
  
!      'i586'
!      'pentium'
            Intel Pentium CPU with no MMX support.
  
!      'lakemont'
            Intel Lakemont MCU, based on Intel Pentium CPU.
  
!      'pentium-mmx'
            Intel Pentium MMX CPU, based on Pentium core with MMX
            instruction set support.
  
!      'pentiumpro'
            Intel Pentium Pro CPU.
  
!      'i686'
!           When used with '-march', the Pentium Pro instruction set is
            used, so the code runs on all i686 family chips.  When used
!           with '-mtune', it has the same meaning as 'generic'.
  
!      'pentium2'
            Intel Pentium II CPU, based on Pentium Pro core with MMX and
            FXSR instruction set support.
  
!      'pentium3'
!      'pentium3m'
            Intel Pentium III CPU, based on Pentium Pro core with MMX,
            FXSR and SSE instruction set support.
  
!      'pentium-m'
            Intel Pentium M; low-power version of Intel Pentium III CPU
            with MMX, SSE, SSE2 and FXSR instruction set support.  Used by
            Centrino notebooks.
  
!      'pentium4'
!      'pentium4m'
            Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction
            set support.
  
!      'prescott'
            Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2,
            SSE3 and FXSR instruction set support.
  
!      'nocona'
            Improved version of Intel Pentium 4 CPU with 64-bit
            extensions, MMX, SSE, SSE2, SSE3 and FXSR instruction set
            support.
  
!      'core2'
            Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
            SSSE3, CX16, SAHF and FXSR instruction set support.
  
!      'nehalem'
!      'corei7'
            Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR
            instruction set support.
  
!      'westmere'
            Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and
            PCLMUL instruction set support.
  
!      'sandybridge'
!      'corei7-avx'
            Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE and PCLMUL instruction set support.
  
!      'ivybridge'
!      'core-avx-i'
            Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set
            support.
  
!      'haswell'
!      'core-avx2'
            Intel Haswell CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
            FMA, MOVBE and HLE instruction set support.
  
!      'broadwell'
            Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
            LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX and PREFETCHW instruction
            set support.
  
!      'skylake'
            Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
            LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
            CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
  
!      'skylake-avx512'
            Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
--- 31177,31290 ----
            level.
  
            Since these CPU-TYPE values do not have a corresponding
!           ‘-mtune’ setting, using ‘-march’ with these values enables
            generic tuning.  Specific tuning can be enabled using the
!           ‘-mtune=OTHER-CPU-TYPE’ option with an appropriate
            OTHER-CPU-TYPE value.
  
!      ‘i386’
            Original Intel i386 CPU.
  
!      ‘i486’
            Intel i486 CPU.  (No scheduling is implemented for this chip.)
  
!      ‘i586’
!      ‘pentium’
            Intel Pentium CPU with no MMX support.
  
!      ‘lakemont’
            Intel Lakemont MCU, based on Intel Pentium CPU.
  
!      ‘pentium-mmx’
            Intel Pentium MMX CPU, based on Pentium core with MMX
            instruction set support.
  
!      ‘pentiumpro’
            Intel Pentium Pro CPU.
  
!      ‘i686’
!           When used with ‘-march’, the Pentium Pro instruction set is
            used, so the code runs on all i686 family chips.  When used
!           with ‘-mtune’, it has the same meaning as ‘generic’.
  
!      ‘pentium2’
            Intel Pentium II CPU, based on Pentium Pro core with MMX and
            FXSR instruction set support.
  
!      ‘pentium3’
!      ‘pentium3m’
            Intel Pentium III CPU, based on Pentium Pro core with MMX,
            FXSR and SSE instruction set support.
  
!      ‘pentium-m’
            Intel Pentium M; low-power version of Intel Pentium III CPU
            with MMX, SSE, SSE2 and FXSR instruction set support.  Used by
            Centrino notebooks.
  
!      ‘pentium4’
!      ‘pentium4m’
            Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction
            set support.
  
!      ‘prescott’
            Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2,
            SSE3 and FXSR instruction set support.
  
!      ‘nocona’
            Improved version of Intel Pentium 4 CPU with 64-bit
            extensions, MMX, SSE, SSE2, SSE3 and FXSR instruction set
            support.
  
!      ‘core2’
            Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
            SSSE3, CX16, SAHF and FXSR instruction set support.
  
!      ‘nehalem’
!      ‘corei7’
            Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR
            instruction set support.
  
!      ‘westmere’
            Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and
            PCLMUL instruction set support.
  
!      ‘sandybridge’
!      ‘corei7-avx’
            Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE and PCLMUL instruction set support.
  
!      ‘ivybridge’
!      ‘core-avx-i’
            Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set
            support.
  
!      ‘haswell’
!      ‘core-avx2’
            Intel Haswell CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
            FMA, MOVBE and HLE instruction set support.
  
!      ‘broadwell’
            Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
            LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX and PREFETCHW instruction
            set support.
  
!      ‘skylake’
            Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
            LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
            CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
  
!      ‘skylake-avx512’
            Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
*************** These '-m' options are defined for the x
*** 31281,31287 ****
            CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
            AVX512BW, AVX512DQ and AVX512CD instruction set support.
  
!      'cascadelake'
            Intel Cascade Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
--- 31292,31298 ----
            CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
            AVX512BW, AVX512DQ and AVX512CD instruction set support.
  
!      ‘cascadelake’
            Intel Cascade Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
*************** These '-m' options are defined for the x
*** 31289,31295 ****
            XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
            AVX512DQ, AVX512CD and AVX512VNNI instruction set support.
  
!      'cannonlake'
            Intel Cannon Lake Server CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
--- 31300,31306 ----
            XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
            AVX512DQ, AVX512CD and AVX512VNNI instruction set support.
  
!      ‘cannonlake’
            Intel Cannon Lake Server CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
*************** These '-m' options are defined for the x
*** 31298,31304 ****
            AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA
            instruction set support.
  
!      'cooperlake'
            Intel Cooper Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
--- 31309,31315 ----
            AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA
            instruction set support.
  
!      ‘cooperlake’
            Intel Cooper Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
*************** These '-m' options are defined for the x
*** 31307,31313 ****
            AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16 instruction set
            support.
  
!      'icelake-client'
            Intel Ice Lake Client CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
--- 31318,31324 ----
            AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16 instruction set
            support.
  
!      ‘icelake-client’
            Intel Ice Lake Client CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
*************** These '-m' options are defined for the x
*** 31318,31324 ****
            AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set
            support.
  
!      'icelake-server'
            Intel Ice Lake Server CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
--- 31329,31335 ----
            AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set
            support.
  
!      ‘icelake-server’
            Intel Ice Lake Server CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
*************** These '-m' options are defined for the x
*** 31329,31335 ****
            AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and
            CLWB instruction set support.
  
!      'tigerlake'
            Intel Tiger Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
--- 31340,31346 ----
            AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and
            CLWB instruction set support.
  
!      ‘tigerlake’
            Intel Tiger Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
*************** These '-m' options are defined for the x
*** 31340,31346 ****
            AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT
            and KEYLOCKER instruction set support.
  
!      'rocketlake'
            Intel Rocket Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
--- 31351,31357 ----
            AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT
            and KEYLOCKER instruction set support.
  
!      ‘rocketlake’
            Intel Rocket Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
*************** These '-m' options are defined for the x
*** 31350,31403 ****
            VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and
            AVX512VPOPCNTDQ instruction set support.
  
!      'alderlake'
!      'raptorlake'
!      'meteorlake'
!      'gracemont'
            Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont CPU with
            64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
            SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
            XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE,
!           CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2,
!           BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ,
!           SERIALIZE, HRESET, KL, WIDEKL and AVX-VNNI instruction set
!           support.
  
!      'arrowlake'
            Intel Arrow Lake CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
            PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
            PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
!           CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
!           LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
!           WIDEKL, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT
!           and CMPCCXADD instruction set support.
  
!      'arrowlake-s'
!      'lunarlake'
            Intel Arrow Lake S/Lunar Lake CPU with 64-bit extensions,
            MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
            AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
            XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
!           MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI,
!           BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ,
!           SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA,
!           AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
!           SM3 and SM4 instruction set support.
  
!      'pantherlake'
            Intel Panther Lake CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
            PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
            FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
!           MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2,
!           F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE,
!           HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
!           AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4 and
!           PREFETCHI instruction set support.
  
!      'sapphirerapids'
!      'emeraldrapids'
            Intel Sapphire Rapids/Emerald Rapids CPU with 64-bit
            extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
            POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
--- 31361,31413 ----
            VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and
            AVX512VPOPCNTDQ instruction set support.
  
!      ‘alderlake’
!      ‘raptorlake’
!      ‘meteorlake’
!      ‘gracemont’
            Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont CPU with
            64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
            SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
            XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE,
!           CLWB, MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2,
!           F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE,
!           HRESET, KL, WIDEKL and AVX-VNNI instruction set support.
  
!      ‘arrowlake’
            Intel Arrow Lake CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
            PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
            PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
!           WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
!           PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
!           AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT and
!           CMPCCXADD instruction set support.
  
!      ‘arrowlake-s’
!      ‘lunarlake’
            Intel Arrow Lake S/Lunar Lake CPU with 64-bit extensions,
            MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
            AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
            XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
!           MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C,
!           FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET,
!           KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
!           AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and SM4
!           instruction set support.
  
!      ‘pantherlake’
            Intel Panther Lake CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
            PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
            FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
!           MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
!           LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET,
!           AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT,
!           CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and SM4 instruction set
!           support.
  
!      ‘sapphirerapids’
!      ‘emeraldrapids’
            Intel Sapphire Rapids/Emerald Rapids CPU with 64-bit
            extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
            POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
*************** These '-m' options are defined for the x
*** 31411,31417 ****
            AMX-INT8, AVX-VNNI, AVX512-FP16 and AVX512BF16 instruction set
            support.
  
!      'graniterapids'
            Intel Granite Rapids CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
--- 31421,31427 ----
            AMX-INT8, AVX-VNNI, AVX512-FP16 and AVX512BF16 instruction set
            support.
  
!      ‘graniterapids’
            Intel Granite Rapids CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
*************** These '-m' options are defined for the x
*** 31425,31431 ****
            AVX512-FP16, AVX512BF16, AMX-FP16 and PREFETCHI instruction
            set support.
  
!      'graniterapids-d'
            Intel Granite Rapids D CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
--- 31435,31441 ----
            AVX512-FP16, AVX512BF16, AMX-FP16 and PREFETCHI instruction
            set support.
  
!      ‘graniterapids-d’
            Intel Granite Rapids D CPU with 64-bit extensions, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
*************** These '-m' options are defined for the x
*** 31439,31470 ****
            AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI and AMX-COMPLEX
            instruction set support.
  
!      'bonnell'
!      'atom'
            Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3 and SSSE3 instruction set support.
  
!      'silvermont'
!      'slm'
            Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW and RDRND instruction set support.
  
!      'goldmont'
            Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
            XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction set
            support.
  
!      'goldmont-plus'
            Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE,
            XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID
            and SGX instruction set support.
  
!      'tremont'
            Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
--- 31449,31480 ----
            AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI and AMX-COMPLEX
            instruction set support.
  
!      ‘bonnell’
!      ‘atom’
            Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3 and SSSE3 instruction set support.
  
!      ‘silvermont’
!      ‘slm’
            Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW and RDRND instruction set support.
  
!      ‘goldmont’
            Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
            XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction set
            support.
  
!      ‘goldmont-plus’
            Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE,
            XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID
            and SGX instruction set support.
  
!      ‘tremont’
            Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
*************** These '-m' options are defined for the x
*** 31472,31478 ****
            CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG
            instruction set support.
  
!      'sierraforest'
            Intel Sierra Forest CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
            PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
--- 31482,31488 ----
            CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG
            instruction set support.
  
!      ‘sierraforest’
            Intel Sierra Forest CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
            PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
*************** These '-m' options are defined for the x
*** 31483,31489 ****
            AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
            support.
  
!      'grandridge'
            Intel Grand Ridge CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
            PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
--- 31493,31499 ----
            AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
            support.
  
!      ‘grandridge’
            Intel Grand Ridge CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
            PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
*************** These '-m' options are defined for the x
*** 31493,31510 ****
            WIDEKL, AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT,
            CMPCCXADD, ENQCMD and UINTR instruction set support.
  
!      'clearwaterforest'
            Intel Clearwater Forest CPU with 64-bit extensions, MOVBE,
            MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
            PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
            FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
            MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2,
            F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE,
!           HRESET, KL, WIDEKL, AVX-VNNI, ENQCMD, UINTR, AVXIFMA,
!           AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
!           SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
!      'knl'
            Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
--- 31503,31520 ----
            WIDEKL, AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT,
            CMPCCXADD, ENQCMD and UINTR instruction set support.
  
!      ‘clearwaterforest’
            Intel Clearwater Forest CPU with 64-bit extensions, MOVBE,
            MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
            PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
            FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
            MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2,
            F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE,
!           HRESET, AVX-VNNI, ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8,
!           AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4,
!           USER_MSR and PREFETCHI instruction set support.
  
!      ‘knl’
            Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
*************** These '-m' options are defined for the x
*** 31512,31518 ****
            AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1
            instruction set support.
  
!      'knm'
            Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
--- 31522,31528 ----
            AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1
            instruction set support.
  
!      ‘knm’
            Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
*************** These '-m' options are defined for the x
*** 31521,31593 ****
            AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set
            support.
  
!      'k6'
            AMD K6 CPU with MMX instruction set support.
  
!      'k6-2'
!      'k6-3'
            Improved versions of AMD K6 CPU with MMX and 3DNow!
            instruction set support.
  
!      'athlon'
!      'athlon-tbird'
            AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
            prefetch instructions support.
  
!      'athlon-4'
!      'athlon-xp'
!      'athlon-mp'
            Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
            full SSE instruction set support.
  
!      'k8'
!      'opteron'
!      'athlon64'
!      'athlon-fx'
            Processors based on the AMD K8 core with x86-64 instruction
            set support, including the AMD Opteron, Athlon 64, and Athlon
            64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
            enhanced 3DNow! and 64-bit instruction set extensions.)
  
!      'k8-sse3'
!      'opteron-sse3'
!      'athlon64-sse3'
            Improved versions of AMD K8 cores with SSE3 instruction set
            support.
  
!      'amdfam10'
!      'barcelona'
            CPUs based on AMD Family 10h cores with x86-64 instruction set
            support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
            enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
  
!      'bdver1'
            CPUs based on AMD Family 15h cores with x86-64 instruction set
            support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCLMUL,
            CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
            and 64-bit instruction set extensions.)
  
!      'bdver2'
            AMD Family 15h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
            LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
            SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
  
!      'bdver3'
            AMD Family 15h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
            AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
            SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
            extensions.)
  
!      'bdver4'
            AMD Family 15h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
            FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCLMUL, CX16, MOVBE, MMX,
            SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
            instruction set extensions.)
  
!      'znver1'
            AMD Family 17h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
            AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16,
--- 31531,31603 ----
            AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set
            support.
  
!      ‘k6’
            AMD K6 CPU with MMX instruction set support.
  
!      ‘k6-2’
!      ‘k6-3’
            Improved versions of AMD K6 CPU with MMX and 3DNow!
            instruction set support.
  
!      ‘athlon’
!      ‘athlon-tbird’
            AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
            prefetch instructions support.
  
!      ‘athlon-4’
!      ‘athlon-xp’
!      ‘athlon-mp’
            Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
            full SSE instruction set support.
  
!      ‘k8’
!      ‘opteron’
!      ‘athlon64’
!      ‘athlon-fx’
            Processors based on the AMD K8 core with x86-64 instruction
            set support, including the AMD Opteron, Athlon 64, and Athlon
            64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
            enhanced 3DNow! and 64-bit instruction set extensions.)
  
!      ‘k8-sse3’
!      ‘opteron-sse3’
!      ‘athlon64-sse3’
            Improved versions of AMD K8 cores with SSE3 instruction set
            support.
  
!      ‘amdfam10’
!      ‘barcelona’
            CPUs based on AMD Family 10h cores with x86-64 instruction set
            support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
            enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
  
!      ‘bdver1’
            CPUs based on AMD Family 15h cores with x86-64 instruction set
            support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCLMUL,
            CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
            and 64-bit instruction set extensions.)
  
!      ‘bdver2’
            AMD Family 15h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
            LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
            SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
  
!      ‘bdver3’
            AMD Family 15h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
            AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
            SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
            extensions.)
  
!      ‘bdver4’
            AMD Family 15h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
            FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCLMUL, CX16, MOVBE, MMX,
            SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
            instruction set extensions.)
  
!      ‘znver1’
            AMD Family 17h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
            AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16,
*************** These '-m' options are defined for the x
*** 31595,31601 ****
            ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
            instruction set extensions.)
  
!      'znver2'
            AMD Family 17h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
--- 31605,31611 ----
            ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
            instruction set extensions.)
  
!      ‘znver2’
            AMD Family 17h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
*************** These '-m' options are defined for the x
*** 31603,31609 ****
            SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
            RDPID, WBNOINVD, and 64-bit instruction set extensions.)
  
!      'znver3'
            AMD Family 19h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
--- 31613,31619 ----
            SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
            RDPID, WBNOINVD, and 64-bit instruction set extensions.)
  
!      ‘znver3’
            AMD Family 19h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
*************** These '-m' options are defined for the x
*** 31612,31618 ****
            RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64-bit instruction
            set extensions.)
  
!      'znver4'
            AMD Family 19h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
--- 31622,31628 ----
            RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64-bit instruction
            set extensions.)
  
!      ‘znver4’
            AMD Family 19h core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
*************** These '-m' options are defined for the x
*** 31623,31629 ****
            AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG,
            AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.)
  
!      'znver5'
            AMD Family 1ah core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
--- 31633,31639 ----
            AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG,
            AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.)
  
!      ‘znver5’
            AMD Family 1ah core based CPUs with x86-64 instruction set
            support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
            FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
*************** These '-m' options are defined for the x
*** 31636,31760 ****
            AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set
            extensions.)
  
!      'btver1'
            CPUs based on AMD Family 14h cores with x86-64 instruction set
            support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
            CX16, ABM and 64-bit instruction set extensions.)
  
!      'btver2'
            CPUs based on AMD Family 16h cores with x86-64 instruction set
            support.  This includes MOVBE, F16C, BMI, AVX, PCLMUL, AES,
            SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
            and 64-bit instruction set extensions.
  
!      'winchip-c6'
            IDT WinChip C6 CPU, dealt in same way as i486 with additional
            MMX instruction set support.
  
!      'winchip2'
            IDT WinChip 2 CPU, dealt in same way as i486 with additional
            MMX and 3DNow! instruction set support.
  
!      'c3'
            VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
            scheduling is implemented for this chip.)
  
!      'c3-2'
            VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
            support.  (No scheduling is implemented for this chip.)
  
!      'c7'
            VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
            set support.  (No scheduling is implemented for this chip.)
  
!      'samuel-2'
            VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
            support.  (No scheduling is implemented for this chip.)
  
!      'nehemiah'
            VIA Eden Nehemiah CPU with MMX and SSE instruction set
            support.  (No scheduling is implemented for this chip.)
  
!      'esther'
            VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
            set support.  (No scheduling is implemented for this chip.)
  
!      'eden-x2'
            VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
            instruction set support.  (No scheduling is implemented for
            this chip.)
  
!      'eden-x4'
            VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
            SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
            scheduling is implemented for this chip.)
  
!      'nano'
            Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
            SSSE3 instruction set support.  (No scheduling is implemented
            for this chip.)
  
!      'nano-1000'
            VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
            instruction set support.  (No scheduling is implemented for
            this chip.)
  
!      'nano-2000'
            VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
            instruction set support.  (No scheduling is implemented for
            this chip.)
  
!      'nano-3000'
            VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
            SSE4.1 instruction set support.  (No scheduling is implemented
            for this chip.)
  
!      'nano-x2'
            VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
            SSSE3 and SSE4.1 instruction set support.  (No scheduling is
            implemented for this chip.)
  
!      'nano-x4'
            VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
            SSSE3 and SSE4.1 instruction set support.  (No scheduling is
            implemented for this chip.)
  
!      'lujiazui'
            ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
            SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE,
            XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, FXSR, RDSEED
            instruction set support.  While the CPUs do support AVX and
!           F16C, these aren't enabled by '-march=lujiazui' for
            performance reasons.
  
!      'yongfeng'
            ZHAOXIN yongfeng CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
            SSSE3, SSE4.1, SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE,
            XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, F16C, FXSR, RDSEED,
            AVX2, FMA, SHA, LZCNT instruction set support.
  
!      'geode'
            AMD Geode embedded processor with MMX and 3DNow! instruction
            set support.
  
! '-mtune=CPU-TYPE'
       Tune to CPU-TYPE everything applicable about the generated code,
       except for the ABI and the set of available instructions.  While
       picking a specific CPU-TYPE schedules things appropriately for that
       particular chip, the compiler does not generate any code that
       cannot run on the default machine type unless you use a
!      '-march=CPU-TYPE' option.  For example, if GCC is configured for
!      i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
       tuned for Pentium 4 but still runs on i686 machines.
  
!      The choices for CPU-TYPE are the same as for '-march'.  In
!      addition, '-mtune' supports 2 extra choices for CPU-TYPE:
  
!      'generic'
            Produce code optimized for the most common IA32/AMD64/EM64T
            processors.  If you know the CPU on which your code will run,
!           then you should use the corresponding '-mtune' or '-march'
!           option instead of '-mtune=generic'.  But, if you do not know
            exactly what CPU users of your application will have, then you
            should use this option.
  
--- 31646,31770 ----
            AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set
            extensions.)
  
!      ‘btver1’
            CPUs based on AMD Family 14h cores with x86-64 instruction set
            support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
            CX16, ABM and 64-bit instruction set extensions.)
  
!      ‘btver2’
            CPUs based on AMD Family 16h cores with x86-64 instruction set
            support.  This includes MOVBE, F16C, BMI, AVX, PCLMUL, AES,
            SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
            and 64-bit instruction set extensions.
  
!      ‘winchip-c6’
            IDT WinChip C6 CPU, dealt in same way as i486 with additional
            MMX instruction set support.
  
!      ‘winchip2’
            IDT WinChip 2 CPU, dealt in same way as i486 with additional
            MMX and 3DNow! instruction set support.
  
!      ‘c3’
            VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
            scheduling is implemented for this chip.)
  
!      ‘c3-2’
            VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
            support.  (No scheduling is implemented for this chip.)
  
!      ‘c7’
            VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
            set support.  (No scheduling is implemented for this chip.)
  
!      ‘samuel-2’
            VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
            support.  (No scheduling is implemented for this chip.)
  
!      ‘nehemiah’
            VIA Eden Nehemiah CPU with MMX and SSE instruction set
            support.  (No scheduling is implemented for this chip.)
  
!      ‘esther’
            VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
            set support.  (No scheduling is implemented for this chip.)
  
!      ‘eden-x2’
            VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
            instruction set support.  (No scheduling is implemented for
            this chip.)
  
!      ‘eden-x4’
            VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
            SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
            scheduling is implemented for this chip.)
  
!      ‘nano’
            Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
            SSSE3 instruction set support.  (No scheduling is implemented
            for this chip.)
  
!      ‘nano-1000’
            VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
            instruction set support.  (No scheduling is implemented for
            this chip.)
  
!      ‘nano-2000’
            VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
            instruction set support.  (No scheduling is implemented for
            this chip.)
  
!      ‘nano-3000’
            VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
            SSE4.1 instruction set support.  (No scheduling is implemented
            for this chip.)
  
!      ‘nano-x2’
            VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
            SSSE3 and SSE4.1 instruction set support.  (No scheduling is
            implemented for this chip.)
  
!      ‘nano-x4’
            VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
            SSSE3 and SSE4.1 instruction set support.  (No scheduling is
            implemented for this chip.)
  
!      ‘lujiazui’
            ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
            SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE,
            XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, FXSR, RDSEED
            instruction set support.  While the CPUs do support AVX and
!           F16C, these aren't enabled by ‘-march=lujiazui’ for
            performance reasons.
  
!      ‘yongfeng’
            ZHAOXIN yongfeng CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
            SSSE3, SSE4.1, SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE,
            XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, F16C, FXSR, RDSEED,
            AVX2, FMA, SHA, LZCNT instruction set support.
  
!      ‘geode’
            AMD Geode embedded processor with MMX and 3DNow! instruction
            set support.
  
! ‘-mtune=CPU-TYPE’
       Tune to CPU-TYPE everything applicable about the generated code,
       except for the ABI and the set of available instructions.  While
       picking a specific CPU-TYPE schedules things appropriately for that
       particular chip, the compiler does not generate any code that
       cannot run on the default machine type unless you use a
!      ‘-march=CPU-TYPE’ option.  For example, if GCC is configured for
!      i686-pc-linux-gnu then ‘-mtune=pentium4’ generates code that is
       tuned for Pentium 4 but still runs on i686 machines.
  
!      The choices for CPU-TYPE are the same as for ‘-march’.  In
!      addition, ‘-mtune’ supports 2 extra choices for CPU-TYPE:
  
!      ‘generic’
            Produce code optimized for the most common IA32/AMD64/EM64T
            processors.  If you know the CPU on which your code will run,
!           then you should use the corresponding ‘-mtune’ or ‘-march’
!           option instead of ‘-mtune=generic’.  But, if you do not know
            exactly what CPU users of your application will have, then you
            should use this option.
  
*************** These '-m' options are defined for the x
*** 31764,31781 ****
            by this option will change to reflect the processors that are
            most common at the time that version of GCC is released.
  
!           There is no '-march=generic' option because '-march' indicates
            the instruction set the compiler can use, and there is no
            generic instruction set applicable to all processors.  In
!           contrast, '-mtune' indicates the processor (or, in this case,
            collection of processors) for which the code is optimized.
  
!      'intel'
            Produce code optimized for the most current Intel processors,
            which are Haswell and Silvermont for this version of GCC. If
            you know the CPU on which your code will run, then you should
!           use the corresponding '-mtune' or '-march' option instead of
!           '-mtune=intel'.  But, if you want your application performs
            better on both Haswell and Silvermont, then you should use
            this option.
  
--- 31774,31791 ----
            by this option will change to reflect the processors that are
            most common at the time that version of GCC is released.
  
!           There is no ‘-march=generic’ option because ‘-march’ indicates
            the instruction set the compiler can use, and there is no
            generic instruction set applicable to all processors.  In
!           contrast, ‘-mtune’ indicates the processor (or, in this case,
            collection of processors) for which the code is optimized.
  
!      ‘intel’
            Produce code optimized for the most current Intel processors,
            which are Haswell and Silvermont for this version of GCC. If
            you know the CPU on which your code will run, then you should
!           use the corresponding ‘-mtune’ or ‘-march’ option instead of
!           ‘-mtune=intel’.  But, if you want your application performs
            better on both Haswell and Silvermont, then you should use
            this option.
  
*************** These '-m' options are defined for the x
*** 31785,31815 ****
            by this option will change to reflect the most current Intel
            processors at the time that version of GCC is released.
  
!           There is no '-march=intel' option because '-march' indicates
            the instruction set the compiler can use, and there is no
            common instruction set applicable to all processors.  In
!           contrast, '-mtune' indicates the processor (or, in this case,
            collection of processors) for which the code is optimized.
  
! '-mcpu=CPU-TYPE'
!      A deprecated synonym for '-mtune'.
  
! '-mfpmath=UNIT'
       Generate floating-point arithmetic for selected unit UNIT.  The
       choices for UNIT are:
  
!      '387'
            Use the standard 387 floating-point coprocessor present on the
            majority of chips and emulated otherwise.  Code compiled with
            this option runs almost everywhere.  The temporary results are
            computed in 80-bit precision instead of the precision
            specified by the type, resulting in slightly different results
!           compared to most of other chips.  See '-ffloat-store' for more
            detailed description.
  
            This is the default choice for non-Darwin x86-32 targets.
  
!      'sse'
            Use scalar floating-point instructions present in the SSE
            instruction set.  This instruction set is supported by Pentium
            III and newer chips, and in the AMD line by Athlon-4, Athlon
--- 31795,31825 ----
            by this option will change to reflect the most current Intel
            processors at the time that version of GCC is released.
  
!           There is no ‘-march=intel’ option because ‘-march’ indicates
            the instruction set the compiler can use, and there is no
            common instruction set applicable to all processors.  In
!           contrast, ‘-mtune’ indicates the processor (or, in this case,
            collection of processors) for which the code is optimized.
  
! ‘-mcpu=CPU-TYPE’
!      A deprecated synonym for ‘-mtune’.
  
! ‘-mfpmath=UNIT’
       Generate floating-point arithmetic for selected unit UNIT.  The
       choices for UNIT are:
  
!      ‘387’
            Use the standard 387 floating-point coprocessor present on the
            majority of chips and emulated otherwise.  Code compiled with
            this option runs almost everywhere.  The temporary results are
            computed in 80-bit precision instead of the precision
            specified by the type, resulting in slightly different results
!           compared to most of other chips.  See ‘-ffloat-store’ for more
            detailed description.
  
            This is the default choice for non-Darwin x86-32 targets.
  
!      ‘sse’
            Use scalar floating-point instructions present in the SSE
            instruction set.  This instruction set is supported by Pentium
            III and newer chips, and in the AMD line by Athlon-4, Athlon
*************** These '-m' options are defined for the x
*** 31820,31827 ****
            and AMD x86-64 chips, supports double-precision arithmetic
            too.
  
!           For the x86-32 compiler, you must use '-march=CPU-TYPE',
!           '-msse' or '-msse2' switches to enable SSE extensions and make
            this option effective.  For the x86-64 compiler, these
            extensions are enabled by default.
  
--- 31830,31837 ----
            and AMD x86-64 chips, supports double-precision arithmetic
            too.
  
!           For the x86-32 compiler, you must use ‘-march=CPU-TYPE’,
!           ‘-msse’ or ‘-msse2’ switches to enable SSE extensions and make
            this option effective.  For the x86-64 compiler, these
            extensions are enabled by default.
  
*************** These '-m' options are defined for the x
*** 31832,31842 ****
  
            This is the default choice for the x86-64 compiler, Darwin
            x86-32 targets, and the default choice for x86-32 targets with
!           the SSE2 instruction set when '-ffast-math' is enabled.
  
!      'sse,387'
!      'sse+387'
!      'both'
            Attempt to utilize both instruction sets at once.  This
            effectively doubles the amount of available registers, and on
            chips with separate execution units for 387 and SSE the
--- 31842,31852 ----
  
            This is the default choice for the x86-64 compiler, Darwin
            x86-32 targets, and the default choice for x86-32 targets with
!           the SSE2 instruction set when ‘-ffast-math’ is enabled.
  
!      ‘sse,387’
!      ‘sse+387’
!      ‘both’
            Attempt to utilize both instruction sets at once.  This
            effectively doubles the amount of available registers, and on
            chips with separate execution units for 387 and SSE the
*************** These '-m' options are defined for the x
*** 31845,31869 ****
            not model separate functional units well, resulting in
            unstable performance.
  
! '-masm=DIALECT'
       Output assembly instructions using selected DIALECT.  Also affects
!      which dialect is used for basic 'asm' (*note Basic Asm::) and
!      extended 'asm' (*note Extended Asm::).  Supported choices (in
!      dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
!      does not support 'intel'.
  
! '-mieee-fp'
! '-mno-ieee-fp'
       Control whether or not the compiler uses IEEE floating-point
       comparisons.  These correctly handle the case where the result of a
       comparison is unordered.
  
! '-m80387'
! '-mhard-float'
       Generate output containing 80387 instructions for floating point.
  
! '-mno-80387'
! '-msoft-float'
       Generate output containing library calls for floating point.
  
       *Warning:* the requisite libraries are not part of GCC.  Normally
--- 31855,31879 ----
            not model separate functional units well, resulting in
            unstable performance.
  
! ‘-masm=DIALECT’
       Output assembly instructions using selected DIALECT.  Also affects
!      which dialect is used for basic ‘asm’ (*note Basic Asm::) and
!      extended ‘asm’ (*note Extended Asm::).  Supported choices (in
!      dialect order) are ‘att’ or ‘intel’.  The default is ‘att’.  Darwin
!      does not support ‘intel’.
  
! ‘-mieee-fp’
! ‘-mno-ieee-fp’
       Control whether or not the compiler uses IEEE floating-point
       comparisons.  These correctly handle the case where the result of a
       comparison is unordered.
  
! ‘-m80387’
! ‘-mhard-float’
       Generate output containing 80387 instructions for floating point.
  
! ‘-mno-80387’
! ‘-msoft-float’
       Generate output containing library calls for floating point.
  
       *Warning:* the requisite libraries are not part of GCC.  Normally
*************** These '-m' options are defined for the x
*** 31874,32030 ****
  
       On machines where a function returns floating-point results in the
       80387 register stack, some floating-point opcodes may be emitted
!      even if '-msoft-float' is used.
  
! '-mno-fp-ret-in-387'
       Do not use the FPU registers for return values of functions.
  
       The usual calling convention has functions return values of types
!      'float' and 'double' in an FPU register, even if there is no FPU.
       The idea is that the operating system should emulate an FPU.
  
!      The option '-mno-fp-ret-in-387' causes such values to be returned
       in ordinary CPU registers instead.
  
! '-mno-fancy-math-387'
!      Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
       instructions for the 387.  Specify this option to avoid generating
!      those instructions.  This option is overridden when '-march'
       indicates that the target CPU always has an FPU and so the
       instruction does not need emulation.  These instructions are not
!      generated unless you also use the '-funsafe-math-optimizations'
       switch.
  
! '-malign-double'
! '-mno-align-double'
!      Control whether GCC aligns 'double', 'long double', and 'long long'
       variables on a two-word boundary or a one-word boundary.  Aligning
!      'double' variables on a two-word boundary produces code that runs
       somewhat faster on a Pentium at the expense of more memory.
  
!      On x86-64, '-malign-double' is enabled by default.
  
!      *Warning:* if you use the '-malign-double' switch, structures
       containing the above types are aligned differently than the
       published application binary interface specifications for the
       x86-32 and are not binary compatible with structures in code
       compiled without that switch.
  
! '-m96bit-long-double'
! '-m128bit-long-double'
!      These switches control the size of 'long double' type.  The x86-32
       application binary interface specifies the size to be 96 bits, so
!      '-m96bit-long-double' is the default in 32-bit mode.
  
!      Modern architectures (Pentium and newer) prefer 'long double' to be
       aligned to an 8- or 16-byte boundary.  In arrays or structures
       conforming to the ABI, this is not possible.  So specifying
!      '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
!      by padding the 'long double' with an additional 32-bit zero.
  
!      In the x86-64 compiler, '-m128bit-long-double' is the default
!      choice as its ABI specifies that 'long double' is aligned on
       16-byte boundary.
  
       Notice that neither of these options enable any extra precision
!      over the x87 standard of 80 bits for a 'long double'.
  
       *Warning:* if you override the default value for your target ABI,
!      this changes the size of structures and arrays containing 'long
!      double' variables, as well as modifying the function calling
!      convention for functions taking 'long double'.  Hence they are not
       binary-compatible with code compiled without that switch.
  
! '-mlong-double-64'
! '-mlong-double-80'
! '-mlong-double-128'
!      These switches control the size of 'long double' type.  A size of
!      64 bits makes the 'long double' type equivalent to the 'double'
       type.  This is the default for 32-bit Bionic C library.  A size of
!      128 bits makes the 'long double' type equivalent to the
!      '__float128' type.  This is the default for 64-bit Bionic C
       library.
  
       *Warning:* if you override the default value for your target ABI,
!      this changes the size of structures and arrays containing 'long
!      double' variables, as well as modifying the function calling
!      convention for functions taking 'long double'.  Hence they are not
       binary-compatible with code compiled without that switch.
  
! '-malign-data=TYPE'
       Control how GCC aligns variables.  Supported values for TYPE are
!      'compat' uses increased alignment value compatible uses GCC 4.8 and
!      earlier, 'abi' uses alignment value as specified by the psABI, and
!      'cacheline' uses increased alignment value to match the cache line
!      size.  'compat' is the default.
  
! '-mlarge-data-threshold=THRESHOLD'
!      When '-mcmodel=medium' or '-mcmodel=large' is specified, data
       objects larger than THRESHOLD are placed in large data sections.
       The default is 65535.
  
! '-mrtd'
       Use a different function-calling convention, in which functions
!      that take a fixed number of arguments return with the 'ret NUM'
       instruction, which pops their arguments while returning.  This
       saves one instruction in the caller since there is no need to pop
       the arguments there.
  
       You can specify that an individual function is called with this
!      calling sequence with the function attribute 'stdcall'.  You can
!      also override the '-mrtd' option by using the function attribute
!      'cdecl'.  *Note Function Attributes::.
  
       *Warning:* this calling convention is incompatible with the one
       normally used on Unix, so you cannot use it if you need to call
       libraries compiled with the Unix compiler.
  
       Also, you must provide function prototypes for all functions that
!      take variable numbers of arguments (including 'printf'); otherwise
       incorrect code is generated for calls to those functions.
  
       In addition, seriously incorrect code results if you call a
       function with too many arguments.  (Normally, extra arguments are
       harmlessly ignored.)
  
! '-mregparm=NUM'
       Control how many registers are used to pass integer arguments.  By
       default, no registers are used to pass arguments, and at most 3
       registers can be used.  You can control this behavior for a
!      specific function by using the function attribute 'regparm'.  *Note
       Function Attributes::.
  
       *Warning:* if you use this switch, and NUM is nonzero, then you
       must build all modules with the same value, including any
       libraries.  This includes the system libraries and startup modules.
  
! '-msseregparm'
       Use SSE register passing conventions for float and double arguments
       and return values.  You can control this behavior for a specific
!      function by using the function attribute 'sseregparm'.  *Note
       Function Attributes::.
  
       *Warning:* if you use this switch then you must build all modules
       with the same value, including any libraries.  This includes the
       system libraries and startup modules.
  
! '-mvect8-ret-in-mem'
       Return 8-byte vectors in memory instead of MMX registers.  This is
       the default on VxWorks to match the ABI of the Sun Studio compilers
       until version 12.  _Only_ use this option if you need to remain
       compatible with existing code produced by those previous compiler
       versions or older versions of GCC.
  
! '-mpc32'
! '-mpc64'
! '-mpc80'
  
       Set 80387 floating-point precision to 32, 64 or 80 bits.  When
!      '-mpc32' is specified, the significands of results of
       floating-point operations are rounded to 24 bits (single
!      precision); '-mpc64' rounds the significands of results of
       floating-point operations to 53 bits (double precision) and
!      '-mpc80' rounds the significands of results of floating-point
       operations to 64 bits (extended double precision), which is the
       default.  When this option is used, floating-point operations in
       higher precisions are not available to the programmer without
--- 31884,32040 ----
  
       On machines where a function returns floating-point results in the
       80387 register stack, some floating-point opcodes may be emitted
!      even if ‘-msoft-float’ is used.
  
! ‘-mno-fp-ret-in-387’
       Do not use the FPU registers for return values of functions.
  
       The usual calling convention has functions return values of types
!      ‘float’ and ‘double’ in an FPU register, even if there is no FPU.
       The idea is that the operating system should emulate an FPU.
  
!      The option ‘-mno-fp-ret-in-387’ causes such values to be returned
       in ordinary CPU registers instead.
  
! ‘-mno-fancy-math-387’
!      Some 387 emulators do not support the ‘sin’, ‘cos’ and ‘sqrt’
       instructions for the 387.  Specify this option to avoid generating
!      those instructions.  This option is overridden when ‘-march’
       indicates that the target CPU always has an FPU and so the
       instruction does not need emulation.  These instructions are not
!      generated unless you also use the ‘-funsafe-math-optimizations’
       switch.
  
! ‘-malign-double’
! ‘-mno-align-double’
!      Control whether GCC aligns ‘double’, ‘long double’, and ‘long long’
       variables on a two-word boundary or a one-word boundary.  Aligning
!      ‘double’ variables on a two-word boundary produces code that runs
       somewhat faster on a Pentium at the expense of more memory.
  
!      On x86-64, ‘-malign-double’ is enabled by default.
  
!      *Warning:* if you use the ‘-malign-double’ switch, structures
       containing the above types are aligned differently than the
       published application binary interface specifications for the
       x86-32 and are not binary compatible with structures in code
       compiled without that switch.
  
! ‘-m96bit-long-double’
! ‘-m128bit-long-double’
!      These switches control the size of ‘long double’ type.  The x86-32
       application binary interface specifies the size to be 96 bits, so
!      ‘-m96bit-long-double’ is the default in 32-bit mode.
  
!      Modern architectures (Pentium and newer) prefer ‘long double’ to be
       aligned to an 8- or 16-byte boundary.  In arrays or structures
       conforming to the ABI, this is not possible.  So specifying
!      ‘-m128bit-long-double’ aligns ‘long double’ to a 16-byte boundary
!      by padding the ‘long double’ with an additional 32-bit zero.
  
!      In the x86-64 compiler, ‘-m128bit-long-double’ is the default
!      choice as its ABI specifies that ‘long double’ is aligned on
       16-byte boundary.
  
       Notice that neither of these options enable any extra precision
!      over the x87 standard of 80 bits for a ‘long double’.
  
       *Warning:* if you override the default value for your target ABI,
!      this changes the size of structures and arrays containing ‘long
!      double’ variables, as well as modifying the function calling
!      convention for functions taking ‘long double’.  Hence they are not
       binary-compatible with code compiled without that switch.
  
! ‘-mlong-double-64’
! ‘-mlong-double-80’
! ‘-mlong-double-128’
!      These switches control the size of ‘long double’ type.  A size of
!      64 bits makes the ‘long double’ type equivalent to the ‘double’
       type.  This is the default for 32-bit Bionic C library.  A size of
!      128 bits makes the ‘long double’ type equivalent to the
!      ‘__float128’ type.  This is the default for 64-bit Bionic C
       library.
  
       *Warning:* if you override the default value for your target ABI,
!      this changes the size of structures and arrays containing ‘long
!      double’ variables, as well as modifying the function calling
!      convention for functions taking ‘long double’.  Hence they are not
       binary-compatible with code compiled without that switch.
  
! ‘-malign-data=TYPE’
       Control how GCC aligns variables.  Supported values for TYPE are
!      ‘compat’ uses increased alignment value compatible uses GCC 4.8 and
!      earlier, ‘abi’ uses alignment value as specified by the psABI, and
!      ‘cacheline’ uses increased alignment value to match the cache line
!      size.  ‘compat’ is the default.
  
! ‘-mlarge-data-threshold=THRESHOLD’
!      When ‘-mcmodel=medium’ or ‘-mcmodel=large’ is specified, data
       objects larger than THRESHOLD are placed in large data sections.
       The default is 65535.
  
! ‘-mrtd’
       Use a different function-calling convention, in which functions
!      that take a fixed number of arguments return with the ‘ret NUM’
       instruction, which pops their arguments while returning.  This
       saves one instruction in the caller since there is no need to pop
       the arguments there.
  
       You can specify that an individual function is called with this
!      calling sequence with the function attribute ‘stdcall’.  You can
!      also override the ‘-mrtd’ option by using the function attribute
!      ‘cdecl’.  *Note Function Attributes::.
  
       *Warning:* this calling convention is incompatible with the one
       normally used on Unix, so you cannot use it if you need to call
       libraries compiled with the Unix compiler.
  
       Also, you must provide function prototypes for all functions that
!      take variable numbers of arguments (including ‘printf’); otherwise
       incorrect code is generated for calls to those functions.
  
       In addition, seriously incorrect code results if you call a
       function with too many arguments.  (Normally, extra arguments are
       harmlessly ignored.)
  
! ‘-mregparm=NUM’
       Control how many registers are used to pass integer arguments.  By
       default, no registers are used to pass arguments, and at most 3
       registers can be used.  You can control this behavior for a
!      specific function by using the function attribute ‘regparm’.  *Note
       Function Attributes::.
  
       *Warning:* if you use this switch, and NUM is nonzero, then you
       must build all modules with the same value, including any
       libraries.  This includes the system libraries and startup modules.
  
! ‘-msseregparm’
       Use SSE register passing conventions for float and double arguments
       and return values.  You can control this behavior for a specific
!      function by using the function attribute ‘sseregparm’.  *Note
       Function Attributes::.
  
       *Warning:* if you use this switch then you must build all modules
       with the same value, including any libraries.  This includes the
       system libraries and startup modules.
  
! ‘-mvect8-ret-in-mem’
       Return 8-byte vectors in memory instead of MMX registers.  This is
       the default on VxWorks to match the ABI of the Sun Studio compilers
       until version 12.  _Only_ use this option if you need to remain
       compatible with existing code produced by those previous compiler
       versions or older versions of GCC.
  
! ‘-mpc32’
! ‘-mpc64’
! ‘-mpc80’
  
       Set 80387 floating-point precision to 32, 64 or 80 bits.  When
!      ‘-mpc32’ is specified, the significands of results of
       floating-point operations are rounded to 24 bits (single
!      precision); ‘-mpc64’ rounds the significands of results of
       floating-point operations to 53 bits (double precision) and
!      ‘-mpc80’ rounds the significands of results of floating-point
       operations to 64 bits (extended double precision), which is the
       default.  When this option is used, floating-point operations in
       higher precisions are not available to the programmer without
*************** These '-m' options are defined for the x
*** 32038,32069 ****
       through so-called "catastrophic cancellation", when this option is
       used to set the precision to less than extended precision.
  
! '-mdaz-ftz'
  
       The flush-to-zero (FTZ) and denormals-are-zero (DAZ) flags in the
       MXCSR register are used to control floating-point calculations.SSE
       and AVX instructions including scalar and vector instructions could
!      benefit from enabling the FTZ and DAZ flags when '-mdaz-ftz' is
!      specified.  Don't set FTZ/DAZ flags when '-mno-daz-ftz' or
!      '-shared' is specified, '-mdaz-ftz' will set FTZ/DAZ flags even
!      with '-shared'.
  
! '-mstackrealign'
!      Realign the stack at entry.  On the x86, the '-mstackrealign'
       option generates an alternate prologue and epilogue that realigns
       the run-time stack if necessary.  This supports mixing legacy codes
       that keep 4-byte stack alignment with modern codes that keep
       16-byte stack alignment for SSE compatibility.  See also the
!      attribute 'force_align_arg_pointer', applicable to individual
       functions.
  
! '-mpreferred-stack-boundary=NUM'
       Attempt to keep the stack boundary aligned to a 2 raised to NUM
!      byte boundary.  If '-mpreferred-stack-boundary' is not specified,
       the default is 4 (16 bytes or 128 bits).
  
       *Warning:* When generating code for the x86-64 architecture with
!      SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
       to keep the stack boundary aligned to 8 byte boundary.  Since
       x86-64 ABI require 16 byte stack alignment, this is ABI
       incompatible and intended to be used in controlled environment
--- 32048,32079 ----
       through so-called "catastrophic cancellation", when this option is
       used to set the precision to less than extended precision.
  
! ‘-mdaz-ftz’
  
       The flush-to-zero (FTZ) and denormals-are-zero (DAZ) flags in the
       MXCSR register are used to control floating-point calculations.SSE
       and AVX instructions including scalar and vector instructions could
!      benefit from enabling the FTZ and DAZ flags when ‘-mdaz-ftz’ is
!      specified.  Don't set FTZ/DAZ flags when ‘-mno-daz-ftz’ or
!      ‘-shared’ is specified, ‘-mdaz-ftz’ will set FTZ/DAZ flags even
!      with ‘-shared’.
  
! ‘-mstackrealign’
!      Realign the stack at entry.  On the x86, the ‘-mstackrealign’
       option generates an alternate prologue and epilogue that realigns
       the run-time stack if necessary.  This supports mixing legacy codes
       that keep 4-byte stack alignment with modern codes that keep
       16-byte stack alignment for SSE compatibility.  See also the
!      attribute ‘force_align_arg_pointer’, applicable to individual
       functions.
  
! ‘-mpreferred-stack-boundary=NUM’
       Attempt to keep the stack boundary aligned to a 2 raised to NUM
!      byte boundary.  If ‘-mpreferred-stack-boundary’ is not specified,
       the default is 4 (16 bytes or 128 bits).
  
       *Warning:* When generating code for the x86-64 architecture with
!      SSE extensions disabled, ‘-mpreferred-stack-boundary=3’ can be used
       to keep the stack boundary aligned to 8 byte boundary.  Since
       x86-64 ABI require 16 byte stack alignment, this is ABI
       incompatible and intended to be used in controlled environment
*************** These '-m' options are defined for the x
*** 32074,32092 ****
       misaligned memory access traps.  In addition, variable arguments
       are handled incorrectly for 16 byte aligned objects (including x87
       long double and __int128), leading to wrong results.  You must
!      build all modules with '-mpreferred-stack-boundary=3', including
       any libraries.  This includes the system libraries and startup
       modules.
  
! '-mincoming-stack-boundary=NUM'
       Assume the incoming stack is aligned to a 2 raised to NUM byte
!      boundary.  If '-mincoming-stack-boundary' is not specified, the one
!      specified by '-mpreferred-stack-boundary' is used.
  
!      On Pentium and Pentium Pro, 'double' and 'long double' values
!      should be aligned to an 8-byte boundary (see '-malign-double') or
       suffer significant run time performance penalties.  On Pentium III,
!      the Streaming SIMD Extension (SSE) data type '__m128' may not work
       properly if it is not 16-byte aligned.
  
       To ensure proper alignment of this values on the stack, the stack
--- 32084,32102 ----
       misaligned memory access traps.  In addition, variable arguments
       are handled incorrectly for 16 byte aligned objects (including x87
       long double and __int128), leading to wrong results.  You must
!      build all modules with ‘-mpreferred-stack-boundary=3’, including
       any libraries.  This includes the system libraries and startup
       modules.
  
! ‘-mincoming-stack-boundary=NUM’
       Assume the incoming stack is aligned to a 2 raised to NUM byte
!      boundary.  If ‘-mincoming-stack-boundary’ is not specified, the one
!      specified by ‘-mpreferred-stack-boundary’ is used.
  
!      On Pentium and Pentium Pro, ‘double’ and ‘long double’ values
!      should be aligned to an 8-byte boundary (see ‘-malign-double’) or
       suffer significant run time performance penalties.  On Pentium III,
!      the Streaming SIMD Extension (SSE) data type ‘__m128’ may not work
       properly if it is not 16-byte aligned.
  
       To ensure proper alignment of this values on the stack, the stack
*************** These '-m' options are defined for the x
*** 32101,32211 ****
       This extra alignment does consume extra stack space, and generally
       increases code size.  Code that is sensitive to stack space usage,
       such as embedded systems and operating system kernels, may want to
!      reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
  
! '-mmmx'
! '-msse'
! '-msse2'
! '-msse3'
! '-mssse3'
! '-msse4'
! '-msse4a'
! '-msse4.1'
! '-msse4.2'
! '-mavx'
! '-mavx2'
! '-mavx512f'
! '-mavx512pf'
! '-mavx512er'
! '-mavx512cd'
! '-mavx512vl'
! '-mavx512bw'
! '-mavx512dq'
! '-mavx512ifma'
! '-mavx512vbmi'
! '-msha'
! '-maes'
! '-mpclmul'
! '-mclflushopt'
! '-mclwb'
! '-mfsgsbase'
! '-mptwrite'
! '-mrdrnd'
! '-mf16c'
! '-mfma'
! '-mpconfig'
! '-mwbnoinvd'
! '-mfma4'
! '-mprfchw'
! '-mrdpid'
! '-mprefetchwt1'
! '-mrdseed'
! '-msgx'
! '-mxop'
! '-mlwp'
! '-m3dnow'
! '-m3dnowa'
! '-mpopcnt'
! '-mabm'
! '-madx'
! '-mbmi'
! '-mbmi2'
! '-mlzcnt'
! '-mfxsr'
! '-mxsave'
! '-mxsaveopt'
! '-mxsavec'
! '-mxsaves'
! '-mrtm'
! '-mhle'
! '-mtbm'
! '-mmwaitx'
! '-mclzero'
! '-mpku'
! '-mavx512vbmi2'
! '-mavx512bf16'
! '-mavx512fp16'
! '-mgfni'
! '-mvaes'
! '-mwaitpkg'
! '-mvpclmulqdq'
! '-mavx512bitalg'
! '-mmovdiri'
! '-mmovdir64b'
! '-menqcmd'
! '-muintr'
! '-mtsxldtrk'
! '-mavx512vpopcntdq'
! '-mavx512vp2intersect'
! '-mavx5124fmaps'
! '-mavx512vnni'
! '-mavxvnni'
! '-mavx5124vnniw'
! '-mcldemote'
! '-mserialize'
! '-mamx-tile'
! '-mamx-int8'
! '-mamx-bf16'
! '-mhreset'
! '-mkl'
! '-mwidekl'
! '-mavxifma'
! '-mavxvnniint8'
! '-mavxneconvert'
! '-mcmpccxadd'
! '-mamx-fp16'
! '-mprefetchi'
! '-mraoint'
! '-mamx-complex'
! '-mavxvnniint16'
! '-msm3'
! '-msha512'
! '-msm4'
! '-mapxf'
! '-musermsr'
! '-mavx10.1'
! '-mavx10.1-256'
! '-mavx10.1-512'
       These switches enable the use of instructions in the MMX, SSE,
       AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA,
       AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE,
--- 32111,32221 ----
       This extra alignment does consume extra stack space, and generally
       increases code size.  Code that is sensitive to stack space usage,
       such as embedded systems and operating system kernels, may want to
!      reduce the preferred alignment to ‘-mpreferred-stack-boundary=2’.
  
! ‘-mmmx’
! ‘-msse’
! ‘-msse2’
! ‘-msse3’
! ‘-mssse3’
! ‘-msse4’
! ‘-msse4a’
! ‘-msse4.1’
! ‘-msse4.2’
! ‘-mavx’
! ‘-mavx2’
! ‘-mavx512f’
! ‘-mavx512pf’
! ‘-mavx512er’
! ‘-mavx512cd’
! ‘-mavx512vl’
! ‘-mavx512bw’
! ‘-mavx512dq’
! ‘-mavx512ifma’
! ‘-mavx512vbmi’
! ‘-msha’
! ‘-maes’
! ‘-mpclmul’
! ‘-mclflushopt’
! ‘-mclwb’
! ‘-mfsgsbase’
! ‘-mptwrite’
! ‘-mrdrnd’
! ‘-mf16c’
! ‘-mfma’
! ‘-mpconfig’
! ‘-mwbnoinvd’
! ‘-mfma4’
! ‘-mprfchw’
! ‘-mrdpid’
! ‘-mprefetchwt1’
! ‘-mrdseed’
! ‘-msgx’
! ‘-mxop’
! ‘-mlwp’
! ‘-m3dnow’
! ‘-m3dnowa’
! ‘-mpopcnt’
! ‘-mabm’
! ‘-madx’
! ‘-mbmi’
! ‘-mbmi2’
! ‘-mlzcnt’
! ‘-mfxsr’
! ‘-mxsave’
! ‘-mxsaveopt’
! ‘-mxsavec’
! ‘-mxsaves’
! ‘-mrtm’
! ‘-mhle’
! ‘-mtbm’
! ‘-mmwaitx’
! ‘-mclzero’
! ‘-mpku’
! ‘-mavx512vbmi2’
! ‘-mavx512bf16’
! ‘-mavx512fp16’
! ‘-mgfni’
! ‘-mvaes’
! ‘-mwaitpkg’
! ‘-mvpclmulqdq’
! ‘-mavx512bitalg’
! ‘-mmovdiri’
! ‘-mmovdir64b’
! ‘-menqcmd’
! ‘-muintr’
! ‘-mtsxldtrk’
! ‘-mavx512vpopcntdq’
! ‘-mavx512vp2intersect’
! ‘-mavx5124fmaps’
! ‘-mavx512vnni’
! ‘-mavxvnni’
! ‘-mavx5124vnniw’
! ‘-mcldemote’
! ‘-mserialize’
! ‘-mamx-tile’
! ‘-mamx-int8’
! ‘-mamx-bf16’
! ‘-mhreset’
! ‘-mkl’
! ‘-mwidekl’
! ‘-mavxifma’
! ‘-mavxvnniint8’
! ‘-mavxneconvert’
! ‘-mcmpccxadd’
! ‘-mamx-fp16’
! ‘-mprefetchi’
! ‘-mraoint’
! ‘-mamx-complex’
! ‘-mavxvnniint16’
! ‘-msm3’
! ‘-msha512’
! ‘-msm4’
! ‘-mapxf’
! ‘-musermsr’
! ‘-mavx10.1’
! ‘-mavx10.1-256’
! ‘-mavx10.1-512’
       These switches enable the use of instructions in the MMX, SSE,
       AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA,
       AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE,
*************** These '-m' options are defined for the x
*** 32220,32265 ****
       AVXNECONVERT, CMPCCXADD, AMX-FP16, PREFETCHI, RAOINT, AMX-COMPLEX,
       AVXVNNIINT16, SM3, SHA512, SM4, APX_F, USER_MSR, AVX10.1 or
       CLDEMOTE extended instruction sets.  Each has a corresponding
!      '-mno-' option to disable use of these instructions.
  
       These extensions are also available as built-in functions: see
       *note x86 Built-in Functions::, for details of the functions
       enabled and disabled by these switches.
  
       To generate SSE/SSE2 instructions automatically from floating-point
!      code (as opposed to 387 instructions), see '-mfpmath=sse'.
  
!      GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
       generates new AVX instructions or AVX equivalence for all SSEx
       instructions when needed.
  
       These options enable GCC to use these extended instructions in
!      generated code, even without '-mfpmath=sse'.  Applications that
       perform run-time CPU detection must compile separate files for each
       supported architecture, using the appropriate flags.  In
       particular, the file containing the CPU detection code should be
       compiled without these options.
  
! '-mdump-tune-features'
       This option instructs GCC to dump the names of the x86 performance
       tuning features and default settings.  The names can be used in
!      '-mtune-ctrl=FEATURE-LIST'.
  
! '-mtune-ctrl=FEATURE-LIST'
       This option is used to do fine grain control of x86 code generation
       features.  FEATURE-LIST is a comma separated list of FEATURE names.
!      See also '-mdump-tune-features'.  When specified, the FEATURE is
!      turned on if it is not preceded with '^', otherwise, it is turned
!      off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
       developers.  Using it may lead to code paths not covered by testing
       and can potentially result in compiler ICEs or runtime errors.
  
! '-mno-default'
       This option instructs GCC to turn off all tunable features.  See
!      also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
  
! '-mcld'
!      This option instructs GCC to emit a 'cld' instruction in the
       prologue of functions that use string instructions.  String
       instructions depend on the DF flag to select between autoincrement
       or autodecrement mode.  While the ABI specifies the DF flag to be
--- 32230,32275 ----
       AVXNECONVERT, CMPCCXADD, AMX-FP16, PREFETCHI, RAOINT, AMX-COMPLEX,
       AVXVNNIINT16, SM3, SHA512, SM4, APX_F, USER_MSR, AVX10.1 or
       CLDEMOTE extended instruction sets.  Each has a corresponding
!      ‘-mno-’ option to disable use of these instructions.
  
       These extensions are also available as built-in functions: see
       *note x86 Built-in Functions::, for details of the functions
       enabled and disabled by these switches.
  
       To generate SSE/SSE2 instructions automatically from floating-point
!      code (as opposed to 387 instructions), see ‘-mfpmath=sse’.
  
!      GCC depresses SSEx instructions when ‘-mavx’ is used.  Instead, it
       generates new AVX instructions or AVX equivalence for all SSEx
       instructions when needed.
  
       These options enable GCC to use these extended instructions in
!      generated code, even without ‘-mfpmath=sse’.  Applications that
       perform run-time CPU detection must compile separate files for each
       supported architecture, using the appropriate flags.  In
       particular, the file containing the CPU detection code should be
       compiled without these options.
  
! ‘-mdump-tune-features’
       This option instructs GCC to dump the names of the x86 performance
       tuning features and default settings.  The names can be used in
!      ‘-mtune-ctrl=FEATURE-LIST’.
  
! ‘-mtune-ctrl=FEATURE-LIST’
       This option is used to do fine grain control of x86 code generation
       features.  FEATURE-LIST is a comma separated list of FEATURE names.
!      See also ‘-mdump-tune-features’.  When specified, the FEATURE is
!      turned on if it is not preceded with ‘^’, otherwise, it is turned
!      off.  ‘-mtune-ctrl=FEATURE-LIST’ is intended to be used by GCC
       developers.  Using it may lead to code paths not covered by testing
       and can potentially result in compiler ICEs or runtime errors.
  
! ‘-mno-default’
       This option instructs GCC to turn off all tunable features.  See
!      also ‘-mtune-ctrl=FEATURE-LIST’ and ‘-mdump-tune-features’.
  
! ‘-mcld’
!      This option instructs GCC to emit a ‘cld’ instruction in the
       prologue of functions that use string instructions.  String
       instructions depend on the DF flag to select between autoincrement
       or autodecrement mode.  While the ABI specifies the DF flag to be
*************** These '-m' options are defined for the x
*** 32268,32341 ****
       dispatchers.  The exception handler can be invoked with the DF flag
       set, which leads to wrong direction mode when string instructions
       are used.  This option can be enabled by default on 32-bit x86
!      targets by configuring GCC with the '--enable-cld' configure
!      option.  Generation of 'cld' instructions can be suppressed with
!      the '-mno-cld' compiler option in this case.
  
! '-mvzeroupper'
!      This option instructs GCC to emit a 'vzeroupper' instruction before
       a transfer of control flow out of the function to minimize the AVX
!      to SSE transition penalty as well as remove unnecessary 'zeroupper'
       intrinsics.
  
! '-mprefer-avx128'
       This option instructs GCC to use 128-bit AVX instructions instead
       of 256-bit AVX instructions in the auto-vectorizer.
  
! '-mprefer-vector-width=OPT'
       This option instructs GCC to use OPT-bit vector width in
       instructions instead of default on the selected platform.
  
! '-mpartial-vector-fp-math'
       This option enables GCC to generate floating-point operations that
       might affect the set of floating-point status flags on partial
       vectors, where vector elements reside in the low part of the
!      128-bit SSE register.  Unless '-fno-trapping-math' is specified,
       the compiler guarantees correct behavior by sanitizing all input
       operands to have zeroes in the unused upper part of the vector
       register.  Note that by using built-in functions or inline assembly
       with partial vector arguments, NaNs, denormal or invalid values can
       leak into the upper part of the vector, causing possible
!      performance issues when '-fno-trapping-math' is in effect.  These
       issues can be mitigated by manually sanitizing the upper part of
!      the partial vector argument register or by using '-mdaz-ftz' to set
       denormals-are-zero (DAZ) flag in the MXCSR register.
  
       This option is enabled by default.
  
! '-mmove-max=BITS'
       This option instructs GCC to set the maximum number of bits can be
       moved from memory to memory efficiently to BITS.  The valid BITS
       are 128, 256 and 512.
  
! '-mstore-max=BITS'
       This option instructs GCC to set the maximum number of bits can be
       stored to memory efficiently to BITS.  The valid BITS are 128, 256
       and 512.
  
!      'none'
            No extra limitations applied to GCC other than defined by the
            selected platform.
  
!      '128'
            Prefer 128-bit vector width for instructions.
  
!      '256'
            Prefer 256-bit vector width for instructions.
  
!      '512'
            Prefer 512-bit vector width for instructions.
  
! '-mnoreturn-no-callee-saved-registers'
!      This option optimizes functions with 'noreturn' attribute or
!      '_Noreturn' specifier by not saving in the function prologue
       callee-saved registers which are used in the function (except for
!      the 'BP' register).  This option can interfere with debugging of
!      the caller of the 'noreturn' function or any function further up in
       the call stack, so it is not enabled by default.
  
! '-mcx16'
!      This option enables GCC to generate 'CMPXCHG16B' instructions in
       64-bit code to implement compare-and-exchange operations on 16-byte
       aligned 128-bit objects.  This is useful for atomic updates of data
       structures exceeding one machine word in size.  The compiler uses
--- 32278,32351 ----
       dispatchers.  The exception handler can be invoked with the DF flag
       set, which leads to wrong direction mode when string instructions
       are used.  This option can be enabled by default on 32-bit x86
!      targets by configuring GCC with the ‘--enable-cld’ configure
!      option.  Generation of ‘cld’ instructions can be suppressed with
!      the ‘-mno-cld’ compiler option in this case.
  
! ‘-mvzeroupper’
!      This option instructs GCC to emit a ‘vzeroupper’ instruction before
       a transfer of control flow out of the function to minimize the AVX
!      to SSE transition penalty as well as remove unnecessary ‘zeroupper’
       intrinsics.
  
! ‘-mprefer-avx128’
       This option instructs GCC to use 128-bit AVX instructions instead
       of 256-bit AVX instructions in the auto-vectorizer.
  
! ‘-mprefer-vector-width=OPT’
       This option instructs GCC to use OPT-bit vector width in
       instructions instead of default on the selected platform.
  
! ‘-mpartial-vector-fp-math’
       This option enables GCC to generate floating-point operations that
       might affect the set of floating-point status flags on partial
       vectors, where vector elements reside in the low part of the
!      128-bit SSE register.  Unless ‘-fno-trapping-math’ is specified,
       the compiler guarantees correct behavior by sanitizing all input
       operands to have zeroes in the unused upper part of the vector
       register.  Note that by using built-in functions or inline assembly
       with partial vector arguments, NaNs, denormal or invalid values can
       leak into the upper part of the vector, causing possible
!      performance issues when ‘-fno-trapping-math’ is in effect.  These
       issues can be mitigated by manually sanitizing the upper part of
!      the partial vector argument register or by using ‘-mdaz-ftz’ to set
       denormals-are-zero (DAZ) flag in the MXCSR register.
  
       This option is enabled by default.
  
! ‘-mmove-max=BITS’
       This option instructs GCC to set the maximum number of bits can be
       moved from memory to memory efficiently to BITS.  The valid BITS
       are 128, 256 and 512.
  
! ‘-mstore-max=BITS’
       This option instructs GCC to set the maximum number of bits can be
       stored to memory efficiently to BITS.  The valid BITS are 128, 256
       and 512.
  
!      ‘none’
            No extra limitations applied to GCC other than defined by the
            selected platform.
  
!      ‘128’
            Prefer 128-bit vector width for instructions.
  
!      ‘256’
            Prefer 256-bit vector width for instructions.
  
!      ‘512’
            Prefer 512-bit vector width for instructions.
  
! ‘-mnoreturn-no-callee-saved-registers’
!      This option optimizes functions with ‘noreturn’ attribute or
!      ‘_Noreturn’ specifier by not saving in the function prologue
       callee-saved registers which are used in the function (except for
!      the ‘BP’ register).  This option can interfere with debugging of
!      the caller of the ‘noreturn’ function or any function further up in
       the call stack, so it is not enabled by default.
  
! ‘-mcx16’
!      This option enables GCC to generate ‘CMPXCHG16B’ instructions in
       64-bit code to implement compare-and-exchange operations on 16-byte
       aligned 128-bit objects.  This is useful for atomic updates of data
       structures exceeding one machine word in size.  The compiler uses
*************** These '-m' options are defined for the x
*** 32343,32471 ****
       for *note __atomic Builtins:: operating on 128-bit integers, a
       library call is always used.
  
! '-msahf'
!      This option enables generation of 'SAHF' instructions in 64-bit
       code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
       the introduction of Pentium 4 G1 step in December 2005, lacked the
!      'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
       are load and store instructions, respectively, for certain status
!      flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
!      'fmod', 'drem', and 'remainder' built-in functions; see *note Other
       Builtins:: for details.
  
! '-mmovbe'
!      This option enables use of the 'movbe' instruction to optimize byte
       swapping of four and eight byte entities.
  
! '-mshstk'
!      The '-mshstk' option enables shadow stack built-in functions from
       x86 Control-flow Enforcement Technology (CET).
  
! '-mcrc32'
!      This option enables built-in functions '__builtin_ia32_crc32qi',
!      '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
!      '__builtin_ia32_crc32di' to generate the 'crc32' machine
       instruction.
  
! '-mmwait'
!      This option enables built-in functions '__builtin_ia32_monitor',
!      and '__builtin_ia32_mwait' to generate the 'monitor' and 'mwait'
       machine instructions.
  
! '-mrecip'
!      This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
!      their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
!      Newton-Raphson step to increase precision instead of 'DIVSS' and
!      'SQRTSS' (and their vectorized variants) for single-precision
       floating-point arguments.  These instructions are generated only
!      when '-funsafe-math-optimizations' is enabled together with
!      '-ffinite-math-only' and '-fno-trapping-math'.  Note that while the
       throughput of the sequence is higher than the throughput of the
       non-reciprocal instruction, the precision of the sequence can be
       decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
       0.99999994).
  
!      Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
!      'RSQRTPS') already with '-ffast-math' (or the above option
!      combination), and doesn't need '-mrecip'.
  
       Also note that GCC emits the above sequence with additional
       Newton-Raphson step for vectorized single-float division and
!      vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
!      option combination), and doesn't need '-mrecip'.
  
! '-mrecip=OPT'
       This option controls which reciprocal estimate instructions may be
       used.  OPT is a comma-separated list of options, which may be
!      preceded by a '!' to invert the option:
  
!      'all'
            Enable all estimate instructions.
  
!      'default'
!           Enable the default instructions, equivalent to '-mrecip'.
  
!      'none'
!           Disable all estimate instructions, equivalent to '-mno-recip'.
  
!      'div'
            Enable the approximation for scalar division.
  
!      'vec-div'
            Enable the approximation for vectorized division.
  
!      'sqrt'
            Enable the approximation for scalar square root.
  
!      'vec-sqrt'
            Enable the approximation for vectorized square root.
  
!      So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
       approximations, except for square root.
  
! '-mveclibabi=TYPE'
       Specifies the ABI type to use for vectorizing intrinsics using an
!      external library.  Supported values for TYPE are 'svml' for the
!      Intel short vector math library and 'acml' for the AMD math core
!      library.  To use this option, both '-ftree-vectorize' and
!      '-funsafe-math-optimizations' have to be enabled, and an SVML or
       ACML ABI-compatible library must be specified at link time.
  
!      GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
!      'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 'vmldAtanh2',
!      'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 'vmldAsin2',
!      'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 'vmlsExp4',
!      'vmlsLn4', 'vmlsLog104', 'vmlsPow4', 'vmlsTanh4', 'vmlsTan4',
!      'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 'vmlsSinh4', 'vmlsSin4',
!      'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 'vmlsCos4', 'vmlsAcosh4'
!      and 'vmlsAcos4' for corresponding function type when
!      '-mveclibabi=svml' is used, and '__vrd2_sin', '__vrd2_cos',
!      '__vrd2_exp', '__vrd2_log', '__vrd2_log2', '__vrd2_log10',
!      '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', '__vrs4_logf',
!      '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' for the
!      corresponding function type when '-mveclibabi=acml' is used.
  
! '-mabi=NAME'
       Generate code for the specified calling convention.  Permissible
!      values are 'sysv' for the ABI used on GNU/Linux and other systems,
!      and 'ms' for the Microsoft ABI. The default is to use the Microsoft
       ABI when targeting Microsoft Windows and the SysV ABI on all other
       systems.  You can control this behavior for specific functions by
!      using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
       Function Attributes::.
  
! '-mforce-indirect-call'
       Force all calls to functions to be indirect.  This is useful when
       using Intel Processor Trace where it generates more precise timing
       information for function calls.
  
! '-mmanual-endbr'
!      Insert ENDBR instruction at function entry only via the 'cf_check'
       function attribute.  This is useful when used with the option
!      '-fcf-protection=branch' to control ENDBR insertion at the function
       entry.
  
! '-mcet-switch'
       By default, CET instrumentation is turned off on switch statements
       that use a jump table and indirect branch track is disabled.  Since
       jump tables are stored in read-only memory, this does not result in
--- 32353,32481 ----
       for *note __atomic Builtins:: operating on 128-bit integers, a
       library call is always used.
  
! ‘-msahf’
!      This option enables generation of ‘SAHF’ instructions in 64-bit
       code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
       the introduction of Pentium 4 G1 step in December 2005, lacked the
!      ‘LAHF’ and ‘SAHF’ instructions which are supported by AMD64.  These
       are load and store instructions, respectively, for certain status
!      flags.  In 64-bit mode, the ‘SAHF’ instruction is used to optimize
!      ‘fmod’, ‘drem’, and ‘remainder’ built-in functions; see *note Other
       Builtins:: for details.
  
! ‘-mmovbe’
!      This option enables use of the ‘movbe’ instruction to optimize byte
       swapping of four and eight byte entities.
  
! ‘-mshstk’
!      The ‘-mshstk’ option enables shadow stack built-in functions from
       x86 Control-flow Enforcement Technology (CET).
  
! ‘-mcrc32’
!      This option enables built-in functions ‘__builtin_ia32_crc32qi’,
!      ‘__builtin_ia32_crc32hi’, ‘__builtin_ia32_crc32si’ and
!      ‘__builtin_ia32_crc32di’ to generate the ‘crc32’ machine
       instruction.
  
! ‘-mmwait’
!      This option enables built-in functions ‘__builtin_ia32_monitor’,
!      and ‘__builtin_ia32_mwait’ to generate the ‘monitor’ and ‘mwait’
       machine instructions.
  
! ‘-mrecip’
!      This option enables use of ‘RCPSS’ and ‘RSQRTSS’ instructions (and
!      their vectorized variants ‘RCPPS’ and ‘RSQRTPS’) with an additional
!      Newton-Raphson step to increase precision instead of ‘DIVSS’ and
!      ‘SQRTSS’ (and their vectorized variants) for single-precision
       floating-point arguments.  These instructions are generated only
!      when ‘-funsafe-math-optimizations’ is enabled together with
!      ‘-ffinite-math-only’ and ‘-fno-trapping-math’.  Note that while the
       throughput of the sequence is higher than the throughput of the
       non-reciprocal instruction, the precision of the sequence can be
       decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
       0.99999994).
  
!      Note that GCC implements ‘1.0f/sqrtf(X)’ in terms of ‘RSQRTSS’ (or
!      ‘RSQRTPS’) already with ‘-ffast-math’ (or the above option
!      combination), and doesn't need ‘-mrecip’.
  
       Also note that GCC emits the above sequence with additional
       Newton-Raphson step for vectorized single-float division and
!      vectorized ‘sqrtf(X)’ already with ‘-ffast-math’ (or the above
!      option combination), and doesn't need ‘-mrecip’.
  
! ‘-mrecip=OPT’
       This option controls which reciprocal estimate instructions may be
       used.  OPT is a comma-separated list of options, which may be
!      preceded by a ‘!’ to invert the option:
  
!      ‘all’
            Enable all estimate instructions.
  
!      ‘default’
!           Enable the default instructions, equivalent to ‘-mrecip’.
  
!      ‘none’
!           Disable all estimate instructions, equivalent to ‘-mno-recip’.
  
!      ‘div’
            Enable the approximation for scalar division.
  
!      ‘vec-div’
            Enable the approximation for vectorized division.
  
!      ‘sqrt’
            Enable the approximation for scalar square root.
  
!      ‘vec-sqrt’
            Enable the approximation for vectorized square root.
  
!      So, for example, ‘-mrecip=all,!sqrt’ enables all of the reciprocal
       approximations, except for square root.
  
! ‘-mveclibabi=TYPE’
       Specifies the ABI type to use for vectorizing intrinsics using an
!      external library.  Supported values for TYPE are ‘svml’ for the
!      Intel short vector math library and ‘acml’ for the AMD math core
!      library.  To use this option, both ‘-ftree-vectorize’ and
!      ‘-funsafe-math-optimizations’ have to be enabled, and an SVML or
       ACML ABI-compatible library must be specified at link time.
  
!      GCC currently emits calls to ‘vmldExp2’, ‘vmldLn2’, ‘vmldLog102’,
!      ‘vmldPow2’, ‘vmldTanh2’, ‘vmldTan2’, ‘vmldAtan2’, ‘vmldAtanh2’,
!      ‘vmldCbrt2’, ‘vmldSinh2’, ‘vmldSin2’, ‘vmldAsinh2’, ‘vmldAsin2’,
!      ‘vmldCosh2’, ‘vmldCos2’, ‘vmldAcosh2’, ‘vmldAcos2’, ‘vmlsExp4’,
!      ‘vmlsLn4’, ‘vmlsLog104’, ‘vmlsPow4’, ‘vmlsTanh4’, ‘vmlsTan4’,
!      ‘vmlsAtan4’, ‘vmlsAtanh4’, ‘vmlsCbrt4’, ‘vmlsSinh4’, ‘vmlsSin4’,
!      ‘vmlsAsinh4’, ‘vmlsAsin4’, ‘vmlsCosh4’, ‘vmlsCos4’, ‘vmlsAcosh4’
!      and ‘vmlsAcos4’ for corresponding function type when
!      ‘-mveclibabi=svml’ is used, and ‘__vrd2_sin’, ‘__vrd2_cos’,
!      ‘__vrd2_exp’, ‘__vrd2_log’, ‘__vrd2_log2’, ‘__vrd2_log10’,
!      ‘__vrs4_sinf’, ‘__vrs4_cosf’, ‘__vrs4_expf’, ‘__vrs4_logf’,
!      ‘__vrs4_log2f’, ‘__vrs4_log10f’ and ‘__vrs4_powf’ for the
!      corresponding function type when ‘-mveclibabi=acml’ is used.
  
! ‘-mabi=NAME’
       Generate code for the specified calling convention.  Permissible
!      values are ‘sysv’ for the ABI used on GNU/Linux and other systems,
!      and ‘ms’ for the Microsoft ABI. The default is to use the Microsoft
       ABI when targeting Microsoft Windows and the SysV ABI on all other
       systems.  You can control this behavior for specific functions by
!      using the function attributes ‘ms_abi’ and ‘sysv_abi’.  *Note
       Function Attributes::.
  
! ‘-mforce-indirect-call’
       Force all calls to functions to be indirect.  This is useful when
       using Intel Processor Trace where it generates more precise timing
       information for function calls.
  
! ‘-mmanual-endbr’
!      Insert ENDBR instruction at function entry only via the ‘cf_check’
       function attribute.  This is useful when used with the option
!      ‘-fcf-protection=branch’ to control ENDBR insertion at the function
       entry.
  
! ‘-mcet-switch’
       By default, CET instrumentation is turned off on switch statements
       that use a jump table and indirect branch track is disabled.  Since
       jump tables are stored in read-only memory, this does not result in
*************** These '-m' options are defined for the x
*** 32475,32526 ****
       branch track for switch statements with jump tables which leads to
       the jump targets reachable via any indirect jumps.
  
! '-mcall-ms2sysv-xlogues'
       Due to differences in 64-bit ABIs, any Microsoft ABI function that
       calls a System V ABI function must consider RSI, RDI and XMM6-15 as
       clobbered.  By default, the code for saving and restoring these
       registers is emitted inline, resulting in fairly lengthy prologues
!      and epilogues.  Using '-mcall-ms2sysv-xlogues' emits prologues and
       epilogues that use stubs in the static portion of libgcc to perform
       these saves and restores, thus reducing function size at the cost
       of a few extra instructions.
  
! '-mtls-dialect=TYPE'
!      Generate code to access thread-local storage using the 'gnu' or
!      'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
       more efficient, but it may add compile- and run-time requirements
       that cannot be satisfied on all systems.
  
! '-mpush-args'
! '-mno-push-args'
       Use PUSH operations to store outgoing parameters.  This method is
       shorter and usually equally fast as method using SUB/MOV operations
       and is enabled by default.  In some cases disabling it may improve
       performance because of improved scheduling and reduced
       dependencies.
  
! '-maccumulate-outgoing-args'
       If enabled, the maximum amount of space required for outgoing
       arguments is computed in the function prologue.  This is faster on
       most modern CPUs because of reduced dependencies, improved
       scheduling and reduced stack usage when the preferred stack
       boundary is not equal to 2.  The drawback is a notable increase in
!      code size.  This switch implies '-mno-push-args'.
  
! '-mthreads'
       Support thread-safe exception handling on MinGW. Programs that rely
       on thread-safe exception handling must compile and link all code
!      with the '-mthreads' option.  When compiling, '-mthreads' defines
!      '-D_MT'; when linking, it links in a special thread helper library
!      '-lmingwthrd' which cleans up per-thread exception-handling data.
  
! '-mms-bitfields'
! '-mno-ms-bitfields'
  
       Enable/disable bit-field layout compatible with the native
       Microsoft Windows compiler.
  
!      If 'packed' is used on a structure, or if bit-fields are used, it
       may be that the Microsoft ABI lays out the structure differently
       than the way GCC normally does.  Particularly when moving packed
       data between functions compiled with GCC and the native Microsoft
--- 32485,32536 ----
       branch track for switch statements with jump tables which leads to
       the jump targets reachable via any indirect jumps.
  
! ‘-mcall-ms2sysv-xlogues’
       Due to differences in 64-bit ABIs, any Microsoft ABI function that
       calls a System V ABI function must consider RSI, RDI and XMM6-15 as
       clobbered.  By default, the code for saving and restoring these
       registers is emitted inline, resulting in fairly lengthy prologues
!      and epilogues.  Using ‘-mcall-ms2sysv-xlogues’ emits prologues and
       epilogues that use stubs in the static portion of libgcc to perform
       these saves and restores, thus reducing function size at the cost
       of a few extra instructions.
  
! ‘-mtls-dialect=TYPE’
!      Generate code to access thread-local storage using the ‘gnu’ or
!      ‘gnu2’ conventions.  ‘gnu’ is the conservative default; ‘gnu2’ is
       more efficient, but it may add compile- and run-time requirements
       that cannot be satisfied on all systems.
  
! ‘-mpush-args’
! ‘-mno-push-args’
       Use PUSH operations to store outgoing parameters.  This method is
       shorter and usually equally fast as method using SUB/MOV operations
       and is enabled by default.  In some cases disabling it may improve
       performance because of improved scheduling and reduced
       dependencies.
  
! ‘-maccumulate-outgoing-args’
       If enabled, the maximum amount of space required for outgoing
       arguments is computed in the function prologue.  This is faster on
       most modern CPUs because of reduced dependencies, improved
       scheduling and reduced stack usage when the preferred stack
       boundary is not equal to 2.  The drawback is a notable increase in
!      code size.  This switch implies ‘-mno-push-args’.
  
! ‘-mthreads’
       Support thread-safe exception handling on MinGW. Programs that rely
       on thread-safe exception handling must compile and link all code
!      with the ‘-mthreads’ option.  When compiling, ‘-mthreads’ defines
!      ‘-D_MT’; when linking, it links in a special thread helper library
!      ‘-lmingwthrd’ which cleans up per-thread exception-handling data.
  
! ‘-mms-bitfields’
! ‘-mno-ms-bitfields’
  
       Enable/disable bit-field layout compatible with the native
       Microsoft Windows compiler.
  
!      If ‘packed’ is used on a structure, or if bit-fields are used, it
       may be that the Microsoft ABI lays out the structure differently
       than the way GCC normally does.  Particularly when moving packed
       data between functions compiled with GCC and the native Microsoft
*************** These '-m' options are defined for the x
*** 32544,32550 ****
         2. Every data object has an alignment requirement.  The alignment
            requirement for all data except structures, unions, and arrays
            is either the size of the object or the current packing size
!           (specified with either the 'aligned' attribute or the 'pack'
            pragma), whichever is less.  For structures, unions, and
            arrays, the alignment requirement is the largest alignment
            requirement of its members.  Every object is allocated an
--- 32554,32560 ----
         2. Every data object has an alignment requirement.  The alignment
            requirement for all data except structures, unions, and arrays
            is either the size of the object or the current packing size
!           (specified with either the ‘aligned’ attribute or the ‘pack’
            pragma), whichever is less.  For structures, unions, and
            arrays, the alignment requirement is the largest alignment
            requirement of its members.  Every object is allocated an
*************** These '-m' options are defined for the x
*** 32572,32584 ****
                    unsigned long bf_2 : 12;
                  } t1;
  
!           The size of 't1' is 8 bytes with the zero-length bit-field.
!           If the zero-length bit-field were removed, 't1''s size would
            be 4 bytes.
  
         2. If a zero-length bit-field is inserted after a bit-field,
!           'foo', and the alignment of the zero-length bit-field is
!           greater than the member that follows it, 'bar', 'bar' is
            aligned as the type of the zero-length bit-field.
  
            For example:
--- 32582,32594 ----
                    unsigned long bf_2 : 12;
                  } t1;
  
!           The size of ‘t1’ is 8 bytes with the zero-length bit-field.
!           If the zero-length bit-field were removed, ‘t1’'s size would
            be 4 bytes.
  
         2. If a zero-length bit-field is inserted after a bit-field,
!           ‘foo’, and the alignment of the zero-length bit-field is
!           greater than the member that follows it, ‘bar’, ‘bar’ is
            aligned as the type of the zero-length bit-field.
  
            For example:
*************** These '-m' options are defined for the x
*** 32597,32605 ****
                    double bar;
                  } t3;
  
!           For 't2', 'bar' is placed at offset 2, rather than offset 1.
!           Accordingly, the size of 't2' is 4.  For 't3', the zero-length
!           bit-field does not affect the alignment of 'bar' or, as a
            result, the size of the structure.
  
            Taking this into account, it is important to note the
--- 32607,32615 ----
                    double bar;
                  } t3;
  
!           For ‘t2’, ‘bar’ is placed at offset 2, rather than offset 1.
!           Accordingly, the size of ‘t2’ is 4.  For ‘t3’, the zero-length
!           bit-field does not affect the alignment of ‘bar’ or, as a
            result, the size of the structure.
  
            Taking this into account, it is important to note the
*************** These '-m' options are defined for the x
*** 32607,32613 ****
  
              1. If a zero-length bit-field follows a normal bit-field,
                 the type of the zero-length bit-field may affect the
!                alignment of the structure as whole.  For example, 't2'
                 has a size of 4 bytes, since the zero-length bit-field
                 follows a normal bit-field, and is of type short.
  
--- 32617,32623 ----
  
              1. If a zero-length bit-field follows a normal bit-field,
                 the type of the zero-length bit-field may affect the
!                alignment of the structure as whole.  For example, ‘t2’
                 has a size of 4 bytes, since the zero-length bit-field
                 follows a normal bit-field, and is of type short.
  
*************** These '-m' options are defined for the x
*** 32621,32627 ****
                         long : 0;
                       } t4;
  
!                Here, 't4' takes up 4 bytes.
  
         3. Zero-length bit-fields following non-bit-field members are
            ignored:
--- 32631,32637 ----
                         long : 0;
                       } t4;
  
!                Here, ‘t4’ takes up 4 bytes.
  
         3. Zero-length bit-fields following non-bit-field members are
            ignored:
*************** These '-m' options are defined for the x
*** 32633,32757 ****
                    char bar;
                  } t5;
  
!           Here, 't5' takes up 2 bytes.
  
! '-mno-align-stringops'
       Do not align the destination of inlined string operations.  This
       switch reduces code size and improves performance in case the
       destination is already aligned, but GCC doesn't know about it.
  
! '-minline-all-stringops'
       By default GCC inlines string operations only when the destination
       is known to be aligned to least a 4-byte boundary.  This enables
       more inlining and increases code size, but may improve performance
!      of code that depends on fast 'memcpy' and 'memset' for short
!      lengths.  The option enables inline expansion of 'strlen' for all
       pointer alignments.
  
! '-minline-stringops-dynamically'
       For string operations of unknown size, use run-time checks with
       inline code for small blocks and a library call for large blocks.
  
! '-mstringop-strategy=ALG'
       Override the internal decision heuristic for the particular
       algorithm to use for inlining string operations.  The allowed
       values for ALG are:
  
!      'rep_byte'
!      'rep_4byte'
!      'rep_8byte'
!           Expand using i386 'rep' prefix of the specified size.
  
!      'byte_loop'
!      'loop'
!      'unrolled_loop'
            Expand into an inline loop.
  
!      'libcall'
            Always use a library call.
  
! '-mmemcpy-strategy=STRATEGY'
       Override the internal decision heuristic to decide if
!      '__builtin_memcpy' should be inlined and what inline algorithm to
       use when the expected size of the copy operation is known.
       STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
!      triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
       specifies the max byte size with which inline algorithm ALG is
!      allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
       MAX_SIZE of the triplets in the list must be specified in
!      increasing order.  The minimal byte size for ALG is '0' for the
!      first triplet and 'MAX_SIZE + 1' of the preceding range.
  
! '-mmemset-strategy=STRATEGY'
!      The option is similar to '-mmemcpy-strategy=' except that it is to
!      control '__builtin_memset' expansion.
  
! '-momit-leaf-frame-pointer'
       Don't keep the frame pointer in a register for leaf functions.
       This avoids the instructions to save, set up, and restore frame
       pointers and makes an extra register available in leaf functions.
!      The option '-fomit-leaf-frame-pointer' removes the frame pointer
       for leaf functions, which might make debugging harder.
  
! '-mtls-direct-seg-refs'
! '-mno-tls-direct-seg-refs'
       Controls whether TLS variables may be accessed with offsets from
!      the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
       whether the thread base pointer must be added.  Whether or not this
       is valid depends on the operating system, and whether it maps the
       segment to cover the entire TLS area.
  
       For systems that use the GNU C Library, the default is on.
  
! '-msse2avx'
! '-mno-sse2avx'
       Specify that the assembler should encode SSE instructions with VEX
!      prefix.  The option '-mavx' turns this on by default.
  
! '-mfentry'
! '-mno-fentry'
!      If profiling is active ('-pg'), put the profiling counter call
       before the prologue.  Note: On x86 architectures the attribute
!      'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
!      '-pg'.
  
! '-mrecord-mcount'
! '-mno-record-mcount'
!      If profiling is active ('-pg'), generate a __mcount_loc section
       that contains pointers to each profiling call.  This is useful for
       automatically patching and out calls.
  
! '-mnop-mcount'
! '-mno-nop-mcount'
!      If profiling is active ('-pg'), generate the calls to the profiling
       functions as NOPs.  This is useful when they should be patched in
       later dynamically.  This is likely only useful together with
!      '-mrecord-mcount'.
  
! '-minstrument-return=TYPE'
       Instrument function exit in -pg -mfentry instrumented functions
       with call to specified function.  This only instruments true
       returns ending with ret, but not sibling calls ending with jump.
       Valid types are NONE to not instrument, CALL to generate a call to
       __return__, or NOP5 to generate a 5 byte nop.
  
! '-mrecord-return'
! '-mno-record-return'
       Generate a __return_loc section pointing to all return
       instrumentation code.
  
! '-mfentry-name=NAME'
       Set name of __fentry__ symbol called at function entry for -pg
       -mfentry functions.
  
! '-mfentry-section=NAME'
       Set name of section to record -mrecord-mcount calls (default
       __mcount_loc).
  
! '-mskip-rax-setup'
! '-mno-skip-rax-setup'
       When generating code for the x86-64 architecture with SSE
!      extensions disabled, '-mskip-rax-setup' can be used to skip setting
       up RAX register when there are no variable arguments passed in
       vector registers.
  
--- 32643,32767 ----
                    char bar;
                  } t5;
  
!           Here, ‘t5’ takes up 2 bytes.
  
! ‘-mno-align-stringops’
       Do not align the destination of inlined string operations.  This
       switch reduces code size and improves performance in case the
       destination is already aligned, but GCC doesn't know about it.
  
! ‘-minline-all-stringops’
       By default GCC inlines string operations only when the destination
       is known to be aligned to least a 4-byte boundary.  This enables
       more inlining and increases code size, but may improve performance
!      of code that depends on fast ‘memcpy’ and ‘memset’ for short
!      lengths.  The option enables inline expansion of ‘strlen’ for all
       pointer alignments.
  
! ‘-minline-stringops-dynamically’
       For string operations of unknown size, use run-time checks with
       inline code for small blocks and a library call for large blocks.
  
! ‘-mstringop-strategy=ALG’
       Override the internal decision heuristic for the particular
       algorithm to use for inlining string operations.  The allowed
       values for ALG are:
  
!      ‘rep_byte’
!      ‘rep_4byte’
!      ‘rep_8byte’
!           Expand using i386 ‘rep’ prefix of the specified size.
  
!      ‘byte_loop’
!      ‘loop’
!      ‘unrolled_loop’
            Expand into an inline loop.
  
!      ‘libcall’
            Always use a library call.
  
! ‘-mmemcpy-strategy=STRATEGY’
       Override the internal decision heuristic to decide if
!      ‘__builtin_memcpy’ should be inlined and what inline algorithm to
       use when the expected size of the copy operation is known.
       STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
!      triplets.  ALG is specified in ‘-mstringop-strategy’, MAX_SIZE
       specifies the max byte size with which inline algorithm ALG is
!      allowed.  For the last triplet, the MAX_SIZE must be ‘-1’.  The
       MAX_SIZE of the triplets in the list must be specified in
!      increasing order.  The minimal byte size for ALG is ‘0’ for the
!      first triplet and ‘MAX_SIZE + 1’ of the preceding range.
  
! ‘-mmemset-strategy=STRATEGY’
!      The option is similar to ‘-mmemcpy-strategy=’ except that it is to
!      control ‘__builtin_memset’ expansion.
  
! ‘-momit-leaf-frame-pointer’
       Don't keep the frame pointer in a register for leaf functions.
       This avoids the instructions to save, set up, and restore frame
       pointers and makes an extra register available in leaf functions.
!      The option ‘-fomit-leaf-frame-pointer’ removes the frame pointer
       for leaf functions, which might make debugging harder.
  
! ‘-mtls-direct-seg-refs’
! ‘-mno-tls-direct-seg-refs’
       Controls whether TLS variables may be accessed with offsets from
!      the TLS segment register (‘%gs’ for 32-bit, ‘%fs’ for 64-bit), or
       whether the thread base pointer must be added.  Whether or not this
       is valid depends on the operating system, and whether it maps the
       segment to cover the entire TLS area.
  
       For systems that use the GNU C Library, the default is on.
  
! ‘-msse2avx’
! ‘-mno-sse2avx’
       Specify that the assembler should encode SSE instructions with VEX
!      prefix.  The option ‘-mavx’ turns this on by default.
  
! ‘-mfentry’
! ‘-mno-fentry’
!      If profiling is active (‘-pg’), put the profiling counter call
       before the prologue.  Note: On x86 architectures the attribute
!      ‘ms_hook_prologue’ isn't possible at the moment for ‘-mfentry’ and
!      ‘-pg’.
  
! ‘-mrecord-mcount’
! ‘-mno-record-mcount’
!      If profiling is active (‘-pg’), generate a __mcount_loc section
       that contains pointers to each profiling call.  This is useful for
       automatically patching and out calls.
  
! ‘-mnop-mcount’
! ‘-mno-nop-mcount’
!      If profiling is active (‘-pg’), generate the calls to the profiling
       functions as NOPs.  This is useful when they should be patched in
       later dynamically.  This is likely only useful together with
!      ‘-mrecord-mcount’.
  
! ‘-minstrument-return=TYPE’
       Instrument function exit in -pg -mfentry instrumented functions
       with call to specified function.  This only instruments true
       returns ending with ret, but not sibling calls ending with jump.
       Valid types are NONE to not instrument, CALL to generate a call to
       __return__, or NOP5 to generate a 5 byte nop.
  
! ‘-mrecord-return’
! ‘-mno-record-return’
       Generate a __return_loc section pointing to all return
       instrumentation code.
  
! ‘-mfentry-name=NAME’
       Set name of __fentry__ symbol called at function entry for -pg
       -mfentry functions.
  
! ‘-mfentry-section=NAME’
       Set name of section to record -mrecord-mcount calls (default
       __mcount_loc).
  
! ‘-mskip-rax-setup’
! ‘-mno-skip-rax-setup’
       When generating code for the x86-64 architecture with SSE
!      extensions disabled, ‘-mskip-rax-setup’ can be used to skip setting
       up RAX register when there are no variable arguments passed in
       vector registers.
  
*************** These '-m' options are defined for the x
*** 32761,32965 ****
       misbehave or jump to a random location.  GCC 4.4 or newer don't
       have those issues, regardless the RAX register value.
  
! '-m8bit-idiv'
! '-mno-8bit-idiv'
       On some processors, like Intel Atom, 8-bit unsigned integer divide
       is much faster than 32-bit/64-bit integer divide.  This option
       generates a run-time check.  If both dividend and divisor are
       within range of 0 to 255, 8-bit unsigned integer divide is used
       instead of 32-bit/64-bit integer divide.
  
! '-mavx256-split-unaligned-load'
! '-mavx256-split-unaligned-store'
       Split 32-byte AVX unaligned load and store.
  
! '-mstack-protector-guard=GUARD'
! '-mstack-protector-guard-reg=REG'
! '-mstack-protector-guard-offset=OFFSET'
       Generate stack protection code using canary at GUARD.  Supported
!      locations are 'global' for global canary or 'tls' for per-thread
       canary in the TLS block (the default).  This option has effect only
!      when '-fstack-protector' or '-fstack-protector-all' is specified.
  
       With the latter choice the options
!      '-mstack-protector-guard-reg=REG' and
!      '-mstack-protector-guard-offset=OFFSET' furthermore specify which
!      segment register ('%fs' or '%gs') to use as base register for
       reading the canary, and from what offset from that base register.
       The default for those is as specified in the relevant ABI.
  
! '-mgeneral-regs-only'
       Generate code that uses only the general-purpose registers.  This
       prevents the compiler from using floating-point, vector, mask and
       bound registers.
  
! '-mrelax-cmpxchg-loop'
       When emitting a compare-and-swap loop for *note __sync Builtins::
       and *note __atomic Builtins:: lacking a native instruction,
       optimize for the highly contended case by issuing an atomic load
!      before the 'CMPXCHG' instruction, and using the 'PAUSE' instruction
       to save CPU power when restarting the loop.
  
! '-mindirect-branch=CHOICE'
!      Convert indirect call and jump with CHOICE.  The default is 'keep',
!      which keeps indirect call and jump unmodified.  'thunk' converts
!      indirect call and jump to call and return thunk.  'thunk-inline'
       converts indirect call and jump to inlined call and return thunk.
!      'thunk-extern' converts indirect call and jump to external call and
       return thunk provided in a separate object file.  You can control
       this behavior for a specific function by using the function
!      attribute 'indirect_branch'.  *Note Function Attributes::.
  
!      Note that '-mcmodel=large' is incompatible with
!      '-mindirect-branch=thunk' and '-mindirect-branch=thunk-extern'
       since the thunk function may not be reachable in the large code
       model.
  
!      Note that '-mindirect-branch=thunk-extern' is compatible with
!      '-fcf-protection=branch' since the external thunk can be made to
       enable control-flow check.
  
! '-mfunction-return=CHOICE'
!      Convert function return with CHOICE.  The default is 'keep', which
!      keeps function return unmodified.  'thunk' converts function return
!      to call and return thunk.  'thunk-inline' converts function return
!      to inlined call and return thunk.  'thunk-extern' converts function
       return to external call and return thunk provided in a separate
       object file.  You can control this behavior for a specific function
!      by using the function attribute 'function_return'.  *Note Function
       Attributes::.
  
!      Note that '-mindirect-return=thunk-extern' is compatible with
!      '-fcf-protection=branch' since the external thunk can be made to
       enable control-flow check.
  
!      Note that '-mcmodel=large' is incompatible with
!      '-mfunction-return=thunk' and '-mfunction-return=thunk-extern'
       since the thunk function may not be reachable in the large code
       model.
  
! '-mindirect-branch-register'
       Force indirect call and jump via register.
  
! '-mharden-sls=CHOICE'
       Generate code to mitigate against straight line speculation (SLS)
!      with CHOICE.  The default is 'none' which disables all SLS
!      hardening.  'return' enables SLS hardening for function returns.
!      'indirect-jmp' enables SLS hardening for indirect jumps.  'all'
       enables all SLS hardening.
  
! '-mindirect-branch-cs-prefix'
       Add CS prefix to call and jmp to indirect thunk with branch target
       in r8-r15 registers so that the call and jmp instruction length is
!      6 bytes to allow them to be replaced with 'lfence; call *%r8-r15'
!      or 'lfence; jmp *%r8-r15' at run-time.
  
! '-mapx-inline-asm-use-gpr32'
       For inline asm support with APX, by default the EGPR feature was
       disabled to prevent potential illegal instruction with EGPR occurs.
       To invoke egpr usage in inline asm, use new compiler option
       -mapx-inline-asm-use-gpr32 and user should ensure the instruction
       supports EGPR.
  
! '-mevex512'
! '-mno-evex512'
       Enables/disables 512-bit vector.  It will be default on if AVX512F
       is enabled.
  
!  These '-m' switches are supported in addition to the above on x86-64
  processors in 64-bit environments.
  
! '-m32'
! '-m64'
! '-mx32'
! '-m16'
! '-miamcu'
       Generate code for a 16-bit, 32-bit or 64-bit environment.  The
!      '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
       generates code that runs in 32-bit mode.
  
!      The '-m64' option sets 'int' to 32 bits and 'long' and pointer
       types to 64 bits, and generates code for the x86-64 architecture.
!      For Darwin only the '-m64' option also turns off the '-fno-pic' and
!      '-mdynamic-no-pic' options.
  
!      The '-mx32' option sets 'int', 'long', and pointer types to 32
       bits, and generates code for the x86-64 architecture.
  
!      The '-m16' option is the same as '-m32', except for that it outputs
!      the '.code16gcc' assembly directive at the beginning of the
       assembly output so that the binary can run in 16-bit mode.
  
!      The '-miamcu' option generates code which conforms to Intel MCU
!      psABI. It requires the '-m32' option to be turned on.
  
! '-mno-red-zone'
       Do not use a so-called "red zone" for x86-64 code.  The red zone is
       mandated by the x86-64 ABI; it is a 128-byte area beyond the
       location of the stack pointer that is not modified by signal or
       interrupt handlers and therefore can be used for temporary data
!      without adjusting the stack pointer.  The flag '-mno-red-zone'
       disables this red zone.
  
! '-mcmodel=small'
       Generate code for the small code model: the program and its symbols
       must be linked in the lower 2 GB of the address space.  Pointers
       are 64 bits.  Programs can be statically or dynamically linked.
       This is the default code model.
  
! '-mcmodel=kernel'
       Generate code for the kernel code model.  The kernel runs in the
       negative 2 GB of the address space.  This model has to be used for
       Linux kernel code.
  
! '-mcmodel=medium'
       Generate code for the medium model: the program is linked in the
       lower 2 GB of the address space.  Small symbols are also placed
!      there.  Symbols with sizes larger than '-mlarge-data-threshold' are
       put into large data or BSS sections and can be located above 2GB.
       Programs can be statically or dynamically linked.
  
! '-mcmodel=large'
       Generate code for the large model.  This model makes no assumptions
       about addresses and sizes of sections.
  
! '-maddress-mode=long'
       Generate code for long address mode.  This is only supported for
       64-bit and x32 environments.  It is the default address mode for
       64-bit environments.
  
! '-maddress-mode=short'
       Generate code for short address mode.  This is only supported for
       32-bit and x32 environments.  It is the default address mode for
       32-bit and x32 environments.
  
! '-mneeded'
! '-mno-needed'
       Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
       indicate the micro-architecture ISA level required to execute the
       binary.
  
! '-mno-direct-extern-access'
!      Without '-fpic' nor '-fPIC', always use the GOT pointer to access
!      external symbols.  With '-fpic' or '-fPIC', treat access to
       protected symbols as local symbols.  The default is
!      '-mdirect-extern-access'.
  
       *Warning:* shared libraries compiled with
!      '-mno-direct-extern-access' and executable compiled with
!      '-mdirect-extern-access' may not be binary compatible if protected
       symbols are used in shared libraries and executable.
  
! '-munroll-only-small-loops'
       Controls conservative small loop unrolling.  It is default enabled
       by O2, and unrolls loop with less than 4 insns by 1 time.  Explicit
       -f[no-]unroll-[all-]loops would disable this flag to avoid any
       unintended unrolling behavior that user does not want.
  
! '-mlam=CHOICE'
       LAM(linear-address masking) allows special bits in the pointer to
!      be used for metadata.  The default is 'none'.  With 'u48', pointer
!      bits in positions 62:48 can be used for metadata; With 'u57',
       pointer bits in positions 62:57 can be used for metadata.
  
  
--- 32771,32975 ----
       misbehave or jump to a random location.  GCC 4.4 or newer don't
       have those issues, regardless the RAX register value.
  
! ‘-m8bit-idiv’
! ‘-mno-8bit-idiv’
       On some processors, like Intel Atom, 8-bit unsigned integer divide
       is much faster than 32-bit/64-bit integer divide.  This option
       generates a run-time check.  If both dividend and divisor are
       within range of 0 to 255, 8-bit unsigned integer divide is used
       instead of 32-bit/64-bit integer divide.
  
! ‘-mavx256-split-unaligned-load’
! ‘-mavx256-split-unaligned-store’
       Split 32-byte AVX unaligned load and store.
  
! ‘-mstack-protector-guard=GUARD’
! ‘-mstack-protector-guard-reg=REG’
! ‘-mstack-protector-guard-offset=OFFSET’
       Generate stack protection code using canary at GUARD.  Supported
!      locations are ‘global’ for global canary or ‘tls’ for per-thread
       canary in the TLS block (the default).  This option has effect only
!      when ‘-fstack-protector’ or ‘-fstack-protector-all’ is specified.
  
       With the latter choice the options
!      ‘-mstack-protector-guard-reg=REG’ and
!      ‘-mstack-protector-guard-offset=OFFSET’ furthermore specify which
!      segment register (‘%fs’ or ‘%gs’) to use as base register for
       reading the canary, and from what offset from that base register.
       The default for those is as specified in the relevant ABI.
  
! ‘-mgeneral-regs-only’
       Generate code that uses only the general-purpose registers.  This
       prevents the compiler from using floating-point, vector, mask and
       bound registers.
  
! ‘-mrelax-cmpxchg-loop’
       When emitting a compare-and-swap loop for *note __sync Builtins::
       and *note __atomic Builtins:: lacking a native instruction,
       optimize for the highly contended case by issuing an atomic load
!      before the ‘CMPXCHG’ instruction, and using the ‘PAUSE’ instruction
       to save CPU power when restarting the loop.
  
! ‘-mindirect-branch=CHOICE’
!      Convert indirect call and jump with CHOICE.  The default is ‘keep’,
!      which keeps indirect call and jump unmodified.  ‘thunk’ converts
!      indirect call and jump to call and return thunk.  ‘thunk-inline’
       converts indirect call and jump to inlined call and return thunk.
!      ‘thunk-extern’ converts indirect call and jump to external call and
       return thunk provided in a separate object file.  You can control
       this behavior for a specific function by using the function
!      attribute ‘indirect_branch’.  *Note Function Attributes::.
  
!      Note that ‘-mcmodel=large’ is incompatible with
!      ‘-mindirect-branch=thunk’ and ‘-mindirect-branch=thunk-extern’
       since the thunk function may not be reachable in the large code
       model.
  
!      Note that ‘-mindirect-branch=thunk-extern’ is compatible with
!      ‘-fcf-protection=branch’ since the external thunk can be made to
       enable control-flow check.
  
! ‘-mfunction-return=CHOICE’
!      Convert function return with CHOICE.  The default is ‘keep’, which
!      keeps function return unmodified.  ‘thunk’ converts function return
!      to call and return thunk.  ‘thunk-inline’ converts function return
!      to inlined call and return thunk.  ‘thunk-extern’ converts function
       return to external call and return thunk provided in a separate
       object file.  You can control this behavior for a specific function
!      by using the function attribute ‘function_return’.  *Note Function
       Attributes::.
  
!      Note that ‘-mindirect-return=thunk-extern’ is compatible with
!      ‘-fcf-protection=branch’ since the external thunk can be made to
       enable control-flow check.
  
!      Note that ‘-mcmodel=large’ is incompatible with
!      ‘-mfunction-return=thunk’ and ‘-mfunction-return=thunk-extern’
       since the thunk function may not be reachable in the large code
       model.
  
! ‘-mindirect-branch-register’
       Force indirect call and jump via register.
  
! ‘-mharden-sls=CHOICE’
       Generate code to mitigate against straight line speculation (SLS)
!      with CHOICE.  The default is ‘none’ which disables all SLS
!      hardening.  ‘return’ enables SLS hardening for function returns.
!      ‘indirect-jmp’ enables SLS hardening for indirect jumps.  ‘all’
       enables all SLS hardening.
  
! ‘-mindirect-branch-cs-prefix’
       Add CS prefix to call and jmp to indirect thunk with branch target
       in r8-r15 registers so that the call and jmp instruction length is
!      6 bytes to allow them to be replaced with ‘lfence; call *%r8-r15’
!      or ‘lfence; jmp *%r8-r15’ at run-time.
  
! ‘-mapx-inline-asm-use-gpr32’
       For inline asm support with APX, by default the EGPR feature was
       disabled to prevent potential illegal instruction with EGPR occurs.
       To invoke egpr usage in inline asm, use new compiler option
       -mapx-inline-asm-use-gpr32 and user should ensure the instruction
       supports EGPR.
  
! ‘-mevex512’
! ‘-mno-evex512’
       Enables/disables 512-bit vector.  It will be default on if AVX512F
       is enabled.
  
!  These ‘-m’ switches are supported in addition to the above on x86-64
  processors in 64-bit environments.
  
! ‘-m32’
! ‘-m64’
! ‘-mx32’
! ‘-m16’
! ‘-miamcu’
       Generate code for a 16-bit, 32-bit or 64-bit environment.  The
!      ‘-m32’ option sets ‘int’, ‘long’, and pointer types to 32 bits, and
       generates code that runs in 32-bit mode.
  
!      The ‘-m64’ option sets ‘int’ to 32 bits and ‘long’ and pointer
       types to 64 bits, and generates code for the x86-64 architecture.
!      For Darwin only the ‘-m64’ option also turns off the ‘-fno-pic’ and
!      ‘-mdynamic-no-pic’ options.
  
!      The ‘-mx32’ option sets ‘int’, ‘long’, and pointer types to 32
       bits, and generates code for the x86-64 architecture.
  
!      The ‘-m16’ option is the same as ‘-m32’, except for that it outputs
!      the ‘.code16gcc’ assembly directive at the beginning of the
       assembly output so that the binary can run in 16-bit mode.
  
!      The ‘-miamcu’ option generates code which conforms to Intel MCU
!      psABI. It requires the ‘-m32’ option to be turned on.
  
! ‘-mno-red-zone’
       Do not use a so-called "red zone" for x86-64 code.  The red zone is
       mandated by the x86-64 ABI; it is a 128-byte area beyond the
       location of the stack pointer that is not modified by signal or
       interrupt handlers and therefore can be used for temporary data
!      without adjusting the stack pointer.  The flag ‘-mno-red-zone’
       disables this red zone.
  
! ‘-mcmodel=small’
       Generate code for the small code model: the program and its symbols
       must be linked in the lower 2 GB of the address space.  Pointers
       are 64 bits.  Programs can be statically or dynamically linked.
       This is the default code model.
  
! ‘-mcmodel=kernel’
       Generate code for the kernel code model.  The kernel runs in the
       negative 2 GB of the address space.  This model has to be used for
       Linux kernel code.
  
! ‘-mcmodel=medium’
       Generate code for the medium model: the program is linked in the
       lower 2 GB of the address space.  Small symbols are also placed
!      there.  Symbols with sizes larger than ‘-mlarge-data-threshold’ are
       put into large data or BSS sections and can be located above 2GB.
       Programs can be statically or dynamically linked.
  
! ‘-mcmodel=large’
       Generate code for the large model.  This model makes no assumptions
       about addresses and sizes of sections.
  
! ‘-maddress-mode=long’
       Generate code for long address mode.  This is only supported for
       64-bit and x32 environments.  It is the default address mode for
       64-bit environments.
  
! ‘-maddress-mode=short’
       Generate code for short address mode.  This is only supported for
       32-bit and x32 environments.  It is the default address mode for
       32-bit and x32 environments.
  
! ‘-mneeded’
! ‘-mno-needed’
       Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
       indicate the micro-architecture ISA level required to execute the
       binary.
  
! ‘-mno-direct-extern-access’
!      Without ‘-fpic’ nor ‘-fPIC’, always use the GOT pointer to access
!      external symbols.  With ‘-fpic’ or ‘-fPIC’, treat access to
       protected symbols as local symbols.  The default is
!      ‘-mdirect-extern-access’.
  
       *Warning:* shared libraries compiled with
!      ‘-mno-direct-extern-access’ and executable compiled with
!      ‘-mdirect-extern-access’ may not be binary compatible if protected
       symbols are used in shared libraries and executable.
  
! ‘-munroll-only-small-loops’
       Controls conservative small loop unrolling.  It is default enabled
       by O2, and unrolls loop with less than 4 insns by 1 time.  Explicit
       -f[no-]unroll-[all-]loops would disable this flag to avoid any
       unintended unrolling behavior that user does not want.
  
! ‘-mlam=CHOICE’
       LAM(linear-address masking) allows special bits in the pointer to
!      be used for metadata.  The default is ‘none’.  With ‘u48’, pointer
!      bits in positions 62:48 can be used for metadata; With ‘u57’,
       pointer bits in positions 62:57 can be used for metadata.
  
  
*************** File: gcc.info,  Node: x86 Windows Optio
*** 32970,33046 ****
  
  These additional options are available for Microsoft Windows targets:
  
! '-mconsole'
       This option specifies that a console application is to be
       generated, by instructing the linker to set the PE header subsystem
       type required for console applications.  This option is available
       for Cygwin and MinGW targets and is enabled by default on those
       targets.
  
! '-mcrtdll=LIBRARY'
       Preprocess, compile or link with specified C RunTime DLL LIBRARY.
!      This option adjust predefined macros '__CRTDLL__', '__MSVCRT__',
!      '_UCRT' and '__MSVCRT_VERSION__' for specified CRT LIBRARY, choose
       start file for CRT LIBRARY and link with CRT LIBRARY.  Recognized
!      CRT library names for proprocessor are: 'crtdll*', 'msvcrt10*',
!      'msvcrt20*', 'msvcrt40*', 'msvcr40*', 'msvcrtd*', 'msvcrt-os*',
!      'msvcr70*', 'msvcr71*', 'msvcr80*', 'msvcr90*', 'msvcr100*',
!      'msvcr110*', 'msvcr120*' and 'ucrt*'.  If this options is not
!      specified then the default MinGW import library 'msvcrt' is used
       for linking and no other adjustment for preprocessor is done.
!      MinGW import library 'msvcrt' is just a symlink to (or a copy of)
       another MinGW CRT import library chosen during MinGW compilation.
!      MinGW import library 'msvcrt-os' is for Windows system CRT DLL
!      library 'msvcrt.dll' and in most cases is the default MinGW import
       library.  Generally speaking, changing the CRT DLL requires
       recompiling the entire MinGW CRT. This option is for experimental
       and testing purposes only.  This option is available for MinGW
       targets.
  
! '-mdll'
       This option is available for Cygwin and MinGW targets.  It
       specifies that a DLL--a dynamic link library--is to be generated,
       enabling the selection of the required runtime startup object and
       entry point.
  
! '-mnop-fun-dllimport'
       This option is available for Cygwin and MinGW targets.  It
!      specifies that the 'dllimport' attribute should be ignored.
  
! '-mthreads'
       This option is available for MinGW targets.  It specifies that
       MinGW-specific thread support is to be used.
  
! '-municode'
       This option is available for MinGW-w64 targets.  It causes the
!      'UNICODE' preprocessor macro to be predefined, and chooses
       Unicode-capable runtime startup code.
  
! '-mwin32'
       This option is available for Cygwin and MinGW targets.  It
       specifies that the typical Microsoft Windows predefined macros are
       to be set in the pre-processor, but does not influence the choice
       of runtime library/startup code.
  
! '-mwindows'
       This option is available for Cygwin and MinGW targets.  It
       specifies that a GUI application is to be generated by instructing
       the linker to set the PE header subsystem type appropriately.
  
! '-fno-set-stack-executable'
       This option is available for MinGW targets.  It specifies that the
       executable flag for the stack used by nested functions isn't set.
       This is necessary for binaries running in kernel mode of Microsoft
       Windows, as there the User32 API, which is used to set executable
       privileges, isn't available.
  
! '-fwritable-relocated-rdata'
       This option is available for MinGW and Cygwin targets.  It
       specifies that relocated-data in read-only section is put into the
!      '.data' section.  This is a necessary for older runtimes not
!      supporting modification of '.rdata' sections for pseudo-relocation.
  
! '-mpe-aligned-commons'
       This option is available for Cygwin and MinGW targets.  It
       specifies that the GNU extension to the PE file format that permits
       the correct alignment of COMMON variables should be used when
--- 32980,33056 ----
  
  These additional options are available for Microsoft Windows targets:
  
! ‘-mconsole’
       This option specifies that a console application is to be
       generated, by instructing the linker to set the PE header subsystem
       type required for console applications.  This option is available
       for Cygwin and MinGW targets and is enabled by default on those
       targets.
  
! ‘-mcrtdll=LIBRARY’
       Preprocess, compile or link with specified C RunTime DLL LIBRARY.
!      This option adjust predefined macros ‘__CRTDLL__’, ‘__MSVCRT__’,
!      ‘_UCRT’ and ‘__MSVCRT_VERSION__’ for specified CRT LIBRARY, choose
       start file for CRT LIBRARY and link with CRT LIBRARY.  Recognized
!      CRT library names for proprocessor are: ‘crtdll*’, ‘msvcrt10*’,
!      ‘msvcrt20*’, ‘msvcrt40*’, ‘msvcr40*’, ‘msvcrtd*’, ‘msvcrt-os*’,
!      ‘msvcr70*’, ‘msvcr71*’, ‘msvcr80*’, ‘msvcr90*’, ‘msvcr100*’,
!      ‘msvcr110*’, ‘msvcr120*’ and ‘ucrt*’.  If this options is not
!      specified then the default MinGW import library ‘msvcrt’ is used
       for linking and no other adjustment for preprocessor is done.
!      MinGW import library ‘msvcrt’ is just a symlink to (or a copy of)
       another MinGW CRT import library chosen during MinGW compilation.
!      MinGW import library ‘msvcrt-os’ is for Windows system CRT DLL
!      library ‘msvcrt.dll’ and in most cases is the default MinGW import
       library.  Generally speaking, changing the CRT DLL requires
       recompiling the entire MinGW CRT. This option is for experimental
       and testing purposes only.  This option is available for MinGW
       targets.
  
! ‘-mdll’
       This option is available for Cygwin and MinGW targets.  It
       specifies that a DLL--a dynamic link library--is to be generated,
       enabling the selection of the required runtime startup object and
       entry point.
  
! ‘-mnop-fun-dllimport’
       This option is available for Cygwin and MinGW targets.  It
!      specifies that the ‘dllimport’ attribute should be ignored.
  
! ‘-mthreads’
       This option is available for MinGW targets.  It specifies that
       MinGW-specific thread support is to be used.
  
! ‘-municode’
       This option is available for MinGW-w64 targets.  It causes the
!      ‘UNICODE’ preprocessor macro to be predefined, and chooses
       Unicode-capable runtime startup code.
  
! ‘-mwin32’
       This option is available for Cygwin and MinGW targets.  It
       specifies that the typical Microsoft Windows predefined macros are
       to be set in the pre-processor, but does not influence the choice
       of runtime library/startup code.
  
! ‘-mwindows’
       This option is available for Cygwin and MinGW targets.  It
       specifies that a GUI application is to be generated by instructing
       the linker to set the PE header subsystem type appropriately.
  
! ‘-fno-set-stack-executable’
       This option is available for MinGW targets.  It specifies that the
       executable flag for the stack used by nested functions isn't set.
       This is necessary for binaries running in kernel mode of Microsoft
       Windows, as there the User32 API, which is used to set executable
       privileges, isn't available.
  
! ‘-fwritable-relocated-rdata’
       This option is available for MinGW and Cygwin targets.  It
       specifies that relocated-data in read-only section is put into the
!      ‘.data’ section.  This is a necessary for older runtimes not
!      supporting modification of ‘.rdata’ sections for pseudo-relocation.
  
! ‘-mpe-aligned-commons’
       This option is available for Cygwin and MinGW targets.  It
       specifies that the GNU extension to the PE file format that permits
       the correct alignment of COMMON variables should be used when
*************** File: gcc.info,  Node: Xstormy16 Options
*** 33057,33063 ****
  
  These options are defined for Xstormy16:
  
! '-msim'
       Choose startup files and linker script suitable for the simulator.
  
  
--- 33067,33073 ----
  
  These options are defined for Xstormy16:
  
! ‘-msim’
       Choose startup files and linker script suitable for the simulator.
  
  
*************** File: gcc.info,  Node: Xtensa Options,
*** 33068,33084 ****
  
  These options are supported for Xtensa targets:
  
! '-mconst16'
! '-mno-const16'
!      Enable or disable use of 'CONST16' instructions for loading
!      constant values.  The 'CONST16' instruction is currently not a
!      standard option from Tensilica.  When enabled, 'CONST16'
!      instructions are always used in place of the standard 'L32R'
!      instructions.  The use of 'CONST16' is enabled by default only if
!      the 'L32R' instruction is not available.
  
! '-mfused-madd'
! '-mno-fused-madd'
       Enable or disable use of fused multiply/add and multiply/subtract
       instructions in the floating-point option.  This has no effect if
       the floating-point option is not also enabled.  Disabling fused
--- 33078,33094 ----
  
  These options are supported for Xtensa targets:
  
! ‘-mconst16’
! ‘-mno-const16’
!      Enable or disable use of ‘CONST16’ instructions for loading
!      constant values.  The ‘CONST16’ instruction is currently not a
!      standard option from Tensilica.  When enabled, ‘CONST16’
!      instructions are always used in place of the standard ‘L32R’
!      instructions.  The use of ‘CONST16’ is enabled by default only if
!      the ‘L32R’ instruction is not available.
  
! ‘-mfused-madd’
! ‘-mno-fused-madd’
       Enable or disable use of fused multiply/add and multiply/subtract
       instructions in the floating-point option.  This has no effect if
       the floating-point option is not also enabled.  Disabling fused
*************** These options are supported for Xtensa t
*** 33093,33159 ****
       to the compiler's ability to combine multiply and add/subtract
       operations.
  
! '-mserialize-volatile'
! '-mno-serialize-volatile'
!      When this option is enabled, GCC inserts 'MEMW' instructions before
!      'volatile' memory references to guarantee sequential consistency.
!      The default is '-mserialize-volatile'.  Use
!      '-mno-serialize-volatile' to omit the 'MEMW' instructions.
  
! '-mforce-no-pic'
       For targets, like GNU/Linux, where all user-mode Xtensa code must
       be position-independent code (PIC), this option disables PIC for
       compiling kernel code.
  
! '-mtext-section-literals'
! '-mno-text-section-literals'
       These options control the treatment of literal pools.  The default
!      is '-mno-text-section-literals', which places literals in a
       separate section in the output file.  This allows the literal pool
       to be placed in a data RAM/ROM, and it also allows the linker to
       combine literal pools from separate object files to remove
       redundant literals and improve code size.  With
!      '-mtext-section-literals', the literals are interspersed in the
       text section in order to keep them as close as possible to their
       references.  This may be necessary for large assembly files.
       Literals for each function are placed right before that function.
  
! '-mauto-litpools'
! '-mno-auto-litpools'
       These options control the treatment of literal pools.  The default
!      is '-mno-auto-litpools', which places literals in a separate
!      section in the output file unless '-mtext-section-literals' is
!      used.  With '-mauto-litpools' the literals are interspersed in the
       text section by the assembler.  Compiler does not produce explicit
!      '.literal' directives and loads literals into registers with 'MOVI'
!      instructions instead of 'L32R' to let the assembler do relaxation
       and place literals as necessary.  This option allows assembler to
       create several literal pools per function and assemble very big
       functions, which may not be possible with
!      '-mtext-section-literals'.
  
! '-mtarget-align'
! '-mno-target-align'
       When this option is enabled, GCC instructs the assembler to
       automatically align instructions to reduce branch penalties at the
       expense of some code density.  The assembler attempts to widen
       density instructions to align branch targets and the instructions
       following call instructions.  If there are not enough preceding
       safe density instructions to align a target, no widening is
!      performed.  The default is '-mtarget-align'.  These options do not
!      affect the treatment of auto-aligned instructions like 'LOOP',
       which the assembler always aligns, either by widening density
       instructions or by inserting NOP instructions.
  
! '-mlongcalls'
! '-mno-longcalls'
       When this option is enabled, GCC instructs the assembler to
       translate direct calls to indirect calls unless it can determine
       that the target of a direct call is in the range allowed by the
       call instruction.  This translation typically occurs for calls to
       functions in other source files.  Specifically, the assembler
!      translates a direct 'CALL' instruction into an 'L32R' followed by a
!      'CALLX' instruction.  The default is '-mno-longcalls'.  This option
       should be used in programs where the call target can potentially be
       out of range.  This option is implemented in the assembler, not the
       compiler, so the assembly code generated by GCC still shows direct
--- 33103,33169 ----
       to the compiler's ability to combine multiply and add/subtract
       operations.
  
! ‘-mserialize-volatile’
! ‘-mno-serialize-volatile’
!      When this option is enabled, GCC inserts ‘MEMW’ instructions before
!      ‘volatile’ memory references to guarantee sequential consistency.
!      The default is ‘-mserialize-volatile’.  Use
!      ‘-mno-serialize-volatile’ to omit the ‘MEMW’ instructions.
  
! ‘-mforce-no-pic’
       For targets, like GNU/Linux, where all user-mode Xtensa code must
       be position-independent code (PIC), this option disables PIC for
       compiling kernel code.
  
! ‘-mtext-section-literals’
! ‘-mno-text-section-literals’
       These options control the treatment of literal pools.  The default
!      is ‘-mno-text-section-literals’, which places literals in a
       separate section in the output file.  This allows the literal pool
       to be placed in a data RAM/ROM, and it also allows the linker to
       combine literal pools from separate object files to remove
       redundant literals and improve code size.  With
!      ‘-mtext-section-literals’, the literals are interspersed in the
       text section in order to keep them as close as possible to their
       references.  This may be necessary for large assembly files.
       Literals for each function are placed right before that function.
  
! ‘-mauto-litpools’
! ‘-mno-auto-litpools’
       These options control the treatment of literal pools.  The default
!      is ‘-mno-auto-litpools’, which places literals in a separate
!      section in the output file unless ‘-mtext-section-literals’ is
!      used.  With ‘-mauto-litpools’ the literals are interspersed in the
       text section by the assembler.  Compiler does not produce explicit
!      ‘.literal’ directives and loads literals into registers with ‘MOVI’
!      instructions instead of ‘L32R’ to let the assembler do relaxation
       and place literals as necessary.  This option allows assembler to
       create several literal pools per function and assemble very big
       functions, which may not be possible with
!      ‘-mtext-section-literals’.
  
! ‘-mtarget-align’
! ‘-mno-target-align’
       When this option is enabled, GCC instructs the assembler to
       automatically align instructions to reduce branch penalties at the
       expense of some code density.  The assembler attempts to widen
       density instructions to align branch targets and the instructions
       following call instructions.  If there are not enough preceding
       safe density instructions to align a target, no widening is
!      performed.  The default is ‘-mtarget-align’.  These options do not
!      affect the treatment of auto-aligned instructions like ‘LOOP’,
       which the assembler always aligns, either by widening density
       instructions or by inserting NOP instructions.
  
! ‘-mlongcalls’
! ‘-mno-longcalls’
       When this option is enabled, GCC instructs the assembler to
       translate direct calls to indirect calls unless it can determine
       that the target of a direct call is in the range allowed by the
       call instruction.  This translation typically occurs for calls to
       functions in other source files.  Specifically, the assembler
!      translates a direct ‘CALL’ instruction into an ‘L32R’ followed by a
!      ‘CALLX’ instruction.  The default is ‘-mno-longcalls’.  This option
       should be used in programs where the call target can potentially be
       out of range.  This option is implemented in the assembler, not the
       compiler, so the assembly code generated by GCC still shows direct
*************** These options are supported for Xtensa t
*** 33162,33202 ****
       for every cross-file call, not just those that really are out of
       range.
  
! '-mabi=NAME'
       Generate code for the specified ABI.  Permissible values are:
!      'call0', 'windowed'.  Default ABI is chosen by the Xtensa core
       configuration.
  
! '-mabi=call0'
       When this option is enabled function parameters are passed in
!      registers 'a2' through 'a7', registers 'a12' through 'a15' are
!      caller-saved, and register 'a15' may be used as a frame pointer.
       When this version of the ABI is enabled the C preprocessor symbol
!      '__XTENSA_CALL0_ABI__' is defined.
  
! '-mabi=windowed'
       When this option is enabled function parameters are passed in
!      registers 'a10' through 'a15', and called function rotates register
       window by 8 registers on entry so that its arguments are found in
!      registers 'a2' through 'a7'.  Register 'a7' may be used as a frame
       pointer.  Register window is rotated 8 registers back upon return.
       When this version of the ABI is enabled the C preprocessor symbol
!      '__XTENSA_WINDOWED_ABI__' is defined.
  
! '-mextra-l32r-costs=N'
!      Specify an extra cost of instruction RAM/ROM access for 'L32R'
       instructions, in clock cycles.  This affects, when optimizing for
!      speed, whether loading a constant from literal pool using 'L32R' or
       synthesizing the constant from a small one with a couple of
       arithmetic instructions.  The default value is 0.
  
! '-mstrict-align'
! '-mno-strict-align'
       Avoid or allow generating memory accesses that may not be aligned
       on a natural object boundary as described in the architecture
!      specification.  The default is '-mno-strict-align' for cores that
       support both unaligned loads and stores in hardware and
!      '-mstrict-align' for all other cores.
  
  
  File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
--- 33172,33212 ----
       for every cross-file call, not just those that really are out of
       range.
  
! ‘-mabi=NAME’
       Generate code for the specified ABI.  Permissible values are:
!      ‘call0’, ‘windowed’.  Default ABI is chosen by the Xtensa core
       configuration.
  
! ‘-mabi=call0’
       When this option is enabled function parameters are passed in
!      registers ‘a2’ through ‘a7’, registers ‘a12’ through ‘a15’ are
!      caller-saved, and register ‘a15’ may be used as a frame pointer.
       When this version of the ABI is enabled the C preprocessor symbol
!      ‘__XTENSA_CALL0_ABI__’ is defined.
  
! ‘-mabi=windowed’
       When this option is enabled function parameters are passed in
!      registers ‘a10’ through ‘a15’, and called function rotates register
       window by 8 registers on entry so that its arguments are found in
!      registers ‘a2’ through ‘a7’.  Register ‘a7’ may be used as a frame
       pointer.  Register window is rotated 8 registers back upon return.
       When this version of the ABI is enabled the C preprocessor symbol
!      ‘__XTENSA_WINDOWED_ABI__’ is defined.
  
! ‘-mextra-l32r-costs=N’
!      Specify an extra cost of instruction RAM/ROM access for ‘L32R’
       instructions, in clock cycles.  This affects, when optimizing for
!      speed, whether loading a constant from literal pool using ‘L32R’ or
       synthesizing the constant from a small one with a couple of
       arithmetic instructions.  The default value is 0.
  
! ‘-mstrict-align’
! ‘-mno-strict-align’
       Avoid or allow generating memory accesses that may not be aligned
       on a natural object boundary as described in the architecture
!      specification.  The default is ‘-mno-strict-align’ for cores that
       support both unaligned loads and stores in hardware and
!      ‘-mstrict-align’ for all other cores.
  
  
  File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
*************** File: gcc.info,  Node: Spec Files,  Next
*** 33212,33248 ****
  3.20 Specifying Subprocesses and the Switches to Pass to Them
  =============================================================
  
! 'gcc' is a driver program.  It performs its job by invoking a sequence
  of other programs to do the work of compiling, assembling and linking.
  GCC interprets its command-line parameters and uses these to deduce
  which programs it should invoke, and which command-line options it ought
! to place on their command lines.  This behavior is controlled by "spec
! strings".  In most cases there is one spec string for each program that
  GCC can invoke, but a few programs have multiple spec strings to control
  their behavior.  The spec strings built into GCC can be overridden by
! using the '-specs=' command-line switch to specify a spec file.
  
!  "Spec files" are plain-text files that are used to construct spec
  strings.  They consist of a sequence of directives separated by blank
  lines.  The type of directive is determined by the first non-whitespace
  character on the line, which can be one of the following:
  
! '%COMMAND'
       Issues a COMMAND to the spec file processor.  The commands that can
       appear here are:
  
!      '%include <FILE>'
            Search for FILE and insert its text at the current point in
            the specs file.
  
!      '%include_noerr <FILE>'
!           Just like '%include', but do not generate an error message if
            the include file cannot be found.
  
!      '%rename OLD_NAME NEW_NAME'
            Rename the spec string OLD_NAME to NEW_NAME.
  
! '*[SPEC_NAME]:'
       This tells the compiler to create, override or delete the named
       spec string.  All lines after this directive up to the next
       directive or blank line are considered to be the text for the spec
--- 33222,33258 ----
  3.20 Specifying Subprocesses and the Switches to Pass to Them
  =============================================================
  
! ‘gcc’ is a driver program.  It performs its job by invoking a sequence
  of other programs to do the work of compiling, assembling and linking.
  GCC interprets its command-line parameters and uses these to deduce
  which programs it should invoke, and which command-line options it ought
! to place on their command lines.  This behavior is controlled by “spec
! strings”.  In most cases there is one spec string for each program that
  GCC can invoke, but a few programs have multiple spec strings to control
  their behavior.  The spec strings built into GCC can be overridden by
! using the ‘-specs=’ command-line switch to specify a spec file.
  
!  “Spec files” are plain-text files that are used to construct spec
  strings.  They consist of a sequence of directives separated by blank
  lines.  The type of directive is determined by the first non-whitespace
  character on the line, which can be one of the following:
  
! ‘%COMMAND’
       Issues a COMMAND to the spec file processor.  The commands that can
       appear here are:
  
!      ‘%include <FILE>’
            Search for FILE and insert its text at the current point in
            the specs file.
  
!      ‘%include_noerr <FILE>’
!           Just like ‘%include’, but do not generate an error message if
            the include file cannot be found.
  
!      ‘%rename OLD_NAME NEW_NAME’
            Rename the spec string OLD_NAME to NEW_NAME.
  
! ‘*[SPEC_NAME]:’
       This tells the compiler to create, override or delete the named
       spec string.  All lines after this directive up to the next
       directive or blank line are considered to be the text for the spec
*************** character on the line, which can be one
*** 33251,33261 ****
       Otherwise, if the spec does not currently exist a new spec is
       created.  If the spec does exist then its contents are overridden
       by the text of this directive, unless the first character of that
!      text is the '+' character, in which case the text is appended to
       the spec.
  
! '[SUFFIX]:'
!      Creates a new '[SUFFIX] spec' pair.  All lines after this directive
       and up to the next directive or blank line are considered to make
       up the spec string for the indicated suffix.  When the compiler
       encounters an input file with the named suffix, it processes the
--- 33261,33271 ----
       Otherwise, if the spec does not currently exist a new spec is
       created.  If the spec does exist then its contents are overridden
       by the text of this directive, unless the first character of that
!      text is the ‘+’ character, in which case the text is appended to
       the spec.
  
! ‘[SUFFIX]:’
!      Creates a new ‘[SUFFIX] spec’ pair.  All lines after this directive
       and up to the next directive or blank line are considered to make
       up the spec string for the indicated suffix.  When the compiler
       encounters an input file with the named suffix, it processes the
*************** character on the line, which can be one
*** 33265,33281 ****
            .ZZ:
            z-compile -input %i
  
!      This says that any input file whose name ends in '.ZZ' should be
!      passed to the program 'z-compile', which should be invoked with the
!      command-line switch '-input' and with the result of performing the
!      '%i' substitution.  (See below.)
  
       As an alternative to providing a spec string, the text following a
       suffix directive can be one of the following:
  
!      '@LANGUAGE'
            This says that the suffix is an alias for a known LANGUAGE.
!           This is similar to using the '-x' command-line switch to GCC
            to specify a language explicitly.  For example:
  
                 .ZZ:
--- 33275,33291 ----
            .ZZ:
            z-compile -input %i
  
!      This says that any input file whose name ends in ‘.ZZ’ should be
!      passed to the program ‘z-compile’, which should be invoked with the
!      command-line switch ‘-input’ and with the result of performing the
!      ‘%i’ substitution.  (See below.)
  
       As an alternative to providing a spec string, the text following a
       suffix directive can be one of the following:
  
!      ‘@LANGUAGE’
            This says that the suffix is an alias for a known LANGUAGE.
!           This is similar to using the ‘-x’ command-line switch to GCC
            to specify a language explicitly.  For example:
  
                 .ZZ:
*************** character on the line, which can be one
*** 33283,33289 ****
  
            Says that .ZZ files are, in fact, C++ source files.
  
!      '#NAME'
            This causes an error messages saying:
  
                 NAME compiler not installed on this system.
--- 33293,33299 ----
  
            Says that .ZZ files are, in fact, C++ source files.
  
!      ‘#NAME’
            This causes an error messages saying:
  
                 NAME compiler not installed on this system.
*************** targets can also add their own spec stri
*** 33320,33351 ****
       *lib:
       --start-group -lgcc -lc -leval1 --end-group %(old_lib)
  
!  This example renames the spec called 'lib' to 'old_lib' and then
! overrides the previous definition of 'lib' with a new one.  The new
  definition adds in some extra command-line options before including the
  text of the old definition.
  
!  "Spec strings" are a list of command-line options to be passed to their
  corresponding program.  In addition, the spec strings can contain
! '%'-prefixed sequences to substitute variable text or to conditionally
  insert text into the command line.  Using these constructs it is
  possible to generate quite complex command lines.
  
!  Here is a table of all defined '%'-sequences for spec strings.  Note
  that spaces are not generated automatically around the results of
  expanding these sequences.  Therefore you can concatenate them together
  or combine them with constant text in a single argument.
  
! '%%'
!      Substitute one '%' into the program name or argument.
  
! '%"'
       Substitute an empty argument.
  
! '%i'
       Substitute the name of the input file being processed.
  
! '%b'
       Substitute the basename for outputs related with the input file
       being processed.  This is often the substring up to (and not
       including) the last period and not including the directory but,
--- 33330,33361 ----
       *lib:
       --start-group -lgcc -lc -leval1 --end-group %(old_lib)
  
!  This example renames the spec called ‘lib’ to ‘old_lib’ and then
! overrides the previous definition of ‘lib’ with a new one.  The new
  definition adds in some extra command-line options before including the
  text of the old definition.
  
!  “Spec strings” are a list of command-line options to be passed to their
  corresponding program.  In addition, the spec strings can contain
! ‘%’-prefixed sequences to substitute variable text or to conditionally
  insert text into the command line.  Using these constructs it is
  possible to generate quite complex command lines.
  
!  Here is a table of all defined ‘%’-sequences for spec strings.  Note
  that spaces are not generated automatically around the results of
  expanding these sequences.  Therefore you can concatenate them together
  or combine them with constant text in a single argument.
  
! ‘%%’
!      Substitute one ‘%’ into the program name or argument.
  
! ‘%"’
       Substitute an empty argument.
  
! ‘%i’
       Substitute the name of the input file being processed.
  
! ‘%b’
       Substitute the basename for outputs related with the input file
       being processed.  This is often the substring up to (and not
       including) the last period and not including the directory but,
*************** or combine them with constant text in a
*** 33353,33558 ****
       outputs, which may be influenced by an explicit output name, and by
       various other options that control how auxiliary outputs are named.
  
! '%B'
!      This is the same as '%b', but include the file suffix (text after
       the last period).  Without %w, it expands to the basename for dump
       outputs.
  
! '%d'
!      Marks the argument containing or following the '%d' as a temporary
       file name, so that that file is deleted if GCC exits successfully.
!      Unlike '%g', this contributes no text to the argument.
  
! '%gSUFFIX'
       Substitute a file name that has suffix SUFFIX and is chosen once
!      per compilation, and mark the argument in the same way as '%d'.  To
       reduce exposure to denial-of-service attacks, the file name is now
       chosen in a way that is hard to predict even when previously chosen
!      file names are known.  For example, '%g.s ... %g.o ... %g.s' might
!      turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
!      regexp '[.A-Za-z]*' or the special string '%O', which is treated
!      exactly as if '%O' had been preprocessed.  Previously, '%g' was
       simply substituted with a file name chosen once per compilation,
       without regard to any appended suffix (which was therefore treated
       just like ordinary text), making such attacks more likely to
       succeed.
  
! '%uSUFFIX'
!      Like '%g', but generates a new temporary file name each time it
       appears instead of once per compilation.
  
! '%USUFFIX'
!      Substitutes the last file name generated with '%uSUFFIX',
       generating a new one if there is no such last file name.  In the
!      absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
!      they don't share the same suffix _space_, so '%g.s ... %U.s ...
!      %g.s ... %U.s' involves the generation of two distinct file names,
!      one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
       was simply substituted with a file name chosen for the previous
!      '%u', without regard to any appended suffix.
  
! '%jSUFFIX'
!      Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
!      writable, and if '-save-temps' is not used; otherwise, substitute
!      the name of a temporary file, just like '%u'.  This temporary file
       is not meant for communication between processes, but rather as a
       junk disposal mechanism.
  
! '%|SUFFIX'
! '%mSUFFIX'
!      Like '%g', except if '-pipe' is in effect.  In that case '%|'
!      substitutes a single dash and '%m' substitutes nothing at all.
       These are the two most common ways to instruct a program that it
       should read from standard input or write to standard output.  If
!      you need something more elaborate you can use an '%{pipe:'X'}'
!      construct: see for example 'gcc/fortran/lang-specs.h'.
  
! '%.SUFFIX'
       Substitutes .SUFFIX for the suffixes of a matched switch's args
!      when it is subsequently output with '%*'.  SUFFIX is terminated by
       the next space or %.
  
! '%w'
!      Marks the argument containing or following the '%w' as the
       designated output file of this compilation.  This puts the argument
!      into the sequence of arguments that '%o' substitutes.
  
! '%V'
       Indicates that this compilation produces no output file.
  
! '%o'
       Substitutes the names of all the output files, with spaces
       automatically placed around them.  You should write spaces around
!      the '%o' as well or the results are undefined.  '%o' is for use in
       the specs for running the linker.  Input files whose names have no
       recognized suffix are not compiled at all, but they are included
       among the output files, so they are linked.
  
! '%O'
       Substitutes the suffix for object files.  Note that this is handled
!      specially when it immediately follows '%g, %u, or %U', because of
       the need for those to form complete file names.  The handling is
!      such that '%O' is treated exactly as if it had already been
!      substituted, except that '%g, %u, and %U' do not currently support
!      additional SUFFIX characters following '%O' as they do following,
!      for example, '.o'.
  
! '%I'
!      Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
!      '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
!      'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
  
! '%s'
       Current argument is the name of a library or startup file of some
       sort.  Search for that file in a standard list of directories and
       substitute the full name found.  The current working directory is
       included in the list of directories scanned.
  
! '%T'
       Current argument is the name of a linker script.  Search for that
       file in the current list of directories to scan for libraries.  If
!      the file is located insert a '--script' option into the command
       line followed by the full path name found.  If the file is not
       found then generate an error message.  Note: the current working
       directory is not searched.
  
! '%eSTR'
       Print STR as an error message.  STR is terminated by a newline.
       Use this when inconsistent options are detected.
  
! '%nSTR'
       Print STR as a notice.  STR is terminated by a newline.
  
! '%(NAME)'
       Substitute the contents of spec string NAME at this point.
  
! '%x{OPTION}'
!      Accumulate an option for '%X'.
  
! '%X'
!      Output the accumulated linker options specified by a '%x' spec
       string.
  
! '%Y'
!      Output the accumulated assembler options specified by '-Wa'.
  
! '%Z'
!      Output the accumulated preprocessor options specified by '-Wp'.
  
! '%M'
!      Output 'multilib_os_dir'.
  
! '%R'
!      Output the concatenation of 'target_system_root' and
!      'target_sysroot_suffix'.
  
! '%a'
!      Process the 'asm' spec.  This is used to compute the switches to be
       passed to the assembler.
  
! '%A'
!      Process the 'asm_final' spec.  This is a spec string for passing
       switches to an assembler post-processor, if such a program is
       needed.
  
! '%l'
!      Process the 'link' spec.  This is the spec for computing the
       command line passed to the linker.  Typically it makes use of the
!      '%L %G %S %D and %E' sequences.
  
! '%D'
!      Dump out a '-L' option for each directory that GCC believes might
       contain startup files.  If the target supports multilibs then the
       current multilib directory is prepended to each of these paths.
  
! '%L'
!      Process the 'lib' spec.  This is a spec string for deciding which
       libraries are included on the command line to the linker.
  
! '%G'
!      Process the 'libgcc' spec.  This is a spec string for deciding
       which GCC support library is included on the command line to the
       linker.
  
! '%S'
!      Process the 'startfile' spec.  This is a spec for deciding which
       object files are the first ones passed to the linker.  Typically
!      this might be a file named 'crt0.o'.
  
! '%E'
!      Process the 'endfile' spec.  This is a spec string that specifies
       the last object files that are passed to the linker.
  
! '%C'
!      Process the 'cpp' spec.  This is used to construct the arguments to
       be passed to the C preprocessor.
  
! '%1'
!      Process the 'cc1' spec.  This is used to construct the options to
!      be passed to the actual C compiler ('cc1').
  
! '%2'
!      Process the 'cc1plus' spec.  This is used to construct the options
!      to be passed to the actual C++ compiler ('cc1plus').
  
! '%*'
       Substitute the variable part of a matched option.  See below.  Note
       that each comma in the substituted string is replaced by a single
       space.
  
! '%<S'
!      Remove all occurrences of '-S' from the command line.  Note--this
!      command is position dependent.  '%' commands in the spec string
!      before this one see '-S', '%' commands in the spec string after
       this one do not.
  
! '%<S*'
!      Similar to '%<S', but match all switches beginning with '-S'.
  
! '%>S'
!      Similar to '%<S', but keep '-S' in the GCC command line.
  
! '%:FUNCTION(ARGS)'
       Call the named function FUNCTION, passing it ARGS.  ARGS is first
       processed as a nested spec string, then split into an argument
       vector in the usual fashion.  The function returns a string which
--- 33363,33568 ----
       outputs, which may be influenced by an explicit output name, and by
       various other options that control how auxiliary outputs are named.
  
! ‘%B’
!      This is the same as ‘%b’, but include the file suffix (text after
       the last period).  Without %w, it expands to the basename for dump
       outputs.
  
! ‘%d’
!      Marks the argument containing or following the ‘%d’ as a temporary
       file name, so that that file is deleted if GCC exits successfully.
!      Unlike ‘%g’, this contributes no text to the argument.
  
! ‘%gSUFFIX’
       Substitute a file name that has suffix SUFFIX and is chosen once
!      per compilation, and mark the argument in the same way as ‘%d’.  To
       reduce exposure to denial-of-service attacks, the file name is now
       chosen in a way that is hard to predict even when previously chosen
!      file names are known.  For example, ‘%g.s ... %g.o ... %g.s’ might
!      turn into ‘ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s’.  SUFFIX matches the
!      regexp ‘[.A-Za-z]*’ or the special string ‘%O’, which is treated
!      exactly as if ‘%O’ had been preprocessed.  Previously, ‘%g’ was
       simply substituted with a file name chosen once per compilation,
       without regard to any appended suffix (which was therefore treated
       just like ordinary text), making such attacks more likely to
       succeed.
  
! ‘%uSUFFIX’
!      Like ‘%g’, but generates a new temporary file name each time it
       appears instead of once per compilation.
  
! ‘%USUFFIX’
!      Substitutes the last file name generated with ‘%uSUFFIX’,
       generating a new one if there is no such last file name.  In the
!      absence of any ‘%uSUFFIX’, this is just like ‘%gSUFFIX’, except
!      they don't share the same suffix _space_, so ‘%g.s ... %U.s ...
!      %g.s ... %U.s’ involves the generation of two distinct file names,
!      one for each ‘%g.s’ and another for each ‘%U.s’.  Previously, ‘%U’
       was simply substituted with a file name chosen for the previous
!      ‘%u’, without regard to any appended suffix.
  
! ‘%jSUFFIX’
!      Substitutes the name of the ‘HOST_BIT_BUCKET’, if any, and if it is
!      writable, and if ‘-save-temps’ is not used; otherwise, substitute
!      the name of a temporary file, just like ‘%u’.  This temporary file
       is not meant for communication between processes, but rather as a
       junk disposal mechanism.
  
! ‘%|SUFFIX’
! ‘%mSUFFIX’
!      Like ‘%g’, except if ‘-pipe’ is in effect.  In that case ‘%|’
!      substitutes a single dash and ‘%m’ substitutes nothing at all.
       These are the two most common ways to instruct a program that it
       should read from standard input or write to standard output.  If
!      you need something more elaborate you can use an ‘%{pipe:‘X’}’
!      construct: see for example ‘gcc/fortran/lang-specs.h’.
  
! ‘%.SUFFIX’
       Substitutes .SUFFIX for the suffixes of a matched switch's args
!      when it is subsequently output with ‘%*’.  SUFFIX is terminated by
       the next space or %.
  
! ‘%w’
!      Marks the argument containing or following the ‘%w’ as the
       designated output file of this compilation.  This puts the argument
!      into the sequence of arguments that ‘%o’ substitutes.
  
! ‘%V’
       Indicates that this compilation produces no output file.
  
! ‘%o’
       Substitutes the names of all the output files, with spaces
       automatically placed around them.  You should write spaces around
!      the ‘%o’ as well or the results are undefined.  ‘%o’ is for use in
       the specs for running the linker.  Input files whose names have no
       recognized suffix are not compiled at all, but they are included
       among the output files, so they are linked.
  
! ‘%O’
       Substitutes the suffix for object files.  Note that this is handled
!      specially when it immediately follows ‘%g, %u, or %U’, because of
       the need for those to form complete file names.  The handling is
!      such that ‘%O’ is treated exactly as if it had already been
!      substituted, except that ‘%g, %u, and %U’ do not currently support
!      additional SUFFIX characters following ‘%O’ as they do following,
!      for example, ‘.o’.
  
! ‘%I’
!      Substitute any of ‘-iprefix’ (made from ‘GCC_EXEC_PREFIX’),
!      ‘-isysroot’ (made from ‘TARGET_SYSTEM_ROOT’), ‘-isystem’ (made from
!      ‘COMPILER_PATH’ and ‘-B’ options) and ‘-imultilib’ as necessary.
  
! ‘%s’
       Current argument is the name of a library or startup file of some
       sort.  Search for that file in a standard list of directories and
       substitute the full name found.  The current working directory is
       included in the list of directories scanned.
  
! ‘%T’
       Current argument is the name of a linker script.  Search for that
       file in the current list of directories to scan for libraries.  If
!      the file is located insert a ‘--script’ option into the command
       line followed by the full path name found.  If the file is not
       found then generate an error message.  Note: the current working
       directory is not searched.
  
! ‘%eSTR’
       Print STR as an error message.  STR is terminated by a newline.
       Use this when inconsistent options are detected.
  
! ‘%nSTR’
       Print STR as a notice.  STR is terminated by a newline.
  
! ‘%(NAME)’
       Substitute the contents of spec string NAME at this point.
  
! ‘%x{OPTION}’
!      Accumulate an option for ‘%X’.
  
! ‘%X’
!      Output the accumulated linker options specified by a ‘%x’ spec
       string.
  
! ‘%Y’
!      Output the accumulated assembler options specified by ‘-Wa’.
  
! ‘%Z’
!      Output the accumulated preprocessor options specified by ‘-Wp’.
  
! ‘%M’
!      Output ‘multilib_os_dir’.
  
! ‘%R’
!      Output the concatenation of ‘target_system_root’ and
!      ‘target_sysroot_suffix’.
  
! ‘%a’
!      Process the ‘asm’ spec.  This is used to compute the switches to be
       passed to the assembler.
  
! ‘%A’
!      Process the ‘asm_final’ spec.  This is a spec string for passing
       switches to an assembler post-processor, if such a program is
       needed.
  
! ‘%l’
!      Process the ‘link’ spec.  This is the spec for computing the
       command line passed to the linker.  Typically it makes use of the
!      ‘%L %G %S %D and %E’ sequences.
  
! ‘%D’
!      Dump out a ‘-L’ option for each directory that GCC believes might
       contain startup files.  If the target supports multilibs then the
       current multilib directory is prepended to each of these paths.
  
! ‘%L’
!      Process the ‘lib’ spec.  This is a spec string for deciding which
       libraries are included on the command line to the linker.
  
! ‘%G’
!      Process the ‘libgcc’ spec.  This is a spec string for deciding
       which GCC support library is included on the command line to the
       linker.
  
! ‘%S’
!      Process the ‘startfile’ spec.  This is a spec for deciding which
       object files are the first ones passed to the linker.  Typically
!      this might be a file named ‘crt0.o’.
  
! ‘%E’
!      Process the ‘endfile’ spec.  This is a spec string that specifies
       the last object files that are passed to the linker.
  
! ‘%C’
!      Process the ‘cpp’ spec.  This is used to construct the arguments to
       be passed to the C preprocessor.
  
! ‘%1’
!      Process the ‘cc1’ spec.  This is used to construct the options to
!      be passed to the actual C compiler (‘cc1’).
  
! ‘%2’
!      Process the ‘cc1plus’ spec.  This is used to construct the options
!      to be passed to the actual C++ compiler (‘cc1plus’).
  
! ‘%*’
       Substitute the variable part of a matched option.  See below.  Note
       that each comma in the substituted string is replaced by a single
       space.
  
! ‘%<S’
!      Remove all occurrences of ‘-S’ from the command line.  Note--this
!      command is position dependent.  ‘%’ commands in the spec string
!      before this one see ‘-S’, ‘%’ commands in the spec string after
       this one do not.
  
! ‘%<S*’
!      Similar to ‘%<S’, but match all switches beginning with ‘-S’.
  
! ‘%>S’
!      Similar to ‘%<S’, but keep ‘-S’ in the GCC command line.
  
! ‘%:FUNCTION(ARGS)’
       Call the named function FUNCTION, passing it ARGS.  ARGS is first
       processed as a nested spec string, then split into an argument
       vector in the usual fashion.  The function returns a string which
*************** or combine them with constant text in a
*** 33561,33593 ****
  
       The following built-in spec functions are provided:
  
!      'getenv'
!           The 'getenv' spec function takes two arguments: an environment
            variable name and a string.  If the environment variable is
            not defined, a fatal error is issued.  Otherwise, the return
            value is the value of the environment variable concatenated
!           with the string.  For example, if 'TOPDIR' is defined as
!           '/path/to/top', then:
  
                 %:getenv(TOPDIR /include)
  
!           expands to '/path/to/top/include'.
  
!      'if-exists'
!           The 'if-exists' spec function takes one argument, an absolute
!           pathname to a file.  If the file exists, 'if-exists' returns
            the pathname.  Here is a small example of its usage:
  
                 *startfile:
                 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
  
!      'if-exists-else'
!           The 'if-exists-else' spec function is similar to the
!           'if-exists' spec function, except that it takes two arguments.
            The first argument is an absolute pathname to a file.  If the
!           file exists, 'if-exists-else' returns the pathname.  If it
            does not exist, it returns the second argument.  This way,
!           'if-exists-else' can be used to select one file or another,
            based on the existence of the first.  Here is a small example
            of its usage:
  
--- 33571,33603 ----
  
       The following built-in spec functions are provided:
  
!      ‘getenv’
!           The ‘getenv’ spec function takes two arguments: an environment
            variable name and a string.  If the environment variable is
            not defined, a fatal error is issued.  Otherwise, the return
            value is the value of the environment variable concatenated
!           with the string.  For example, if ‘TOPDIR’ is defined as
!           ‘/path/to/top’, then:
  
                 %:getenv(TOPDIR /include)
  
!           expands to ‘/path/to/top/include’.
  
!      ‘if-exists’
!           The ‘if-exists’ spec function takes one argument, an absolute
!           pathname to a file.  If the file exists, ‘if-exists’ returns
            the pathname.  Here is a small example of its usage:
  
                 *startfile:
                 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
  
!      ‘if-exists-else’
!           The ‘if-exists-else’ spec function is similar to the
!           ‘if-exists’ spec function, except that it takes two arguments.
            The first argument is an absolute pathname to a file.  If the
!           file exists, ‘if-exists-else’ returns the pathname.  If it
            does not exist, it returns the second argument.  This way,
!           ‘if-exists-else’ can be used to select one file or another,
            based on the existence of the first.  Here is a small example
            of its usage:
  
*************** or combine them with constant text in a
*** 33595,33602 ****
                 crt0%O%s %:if-exists(crti%O%s) \
                 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
  
!      'if-exists-then-else'
!           The 'if-exists-then-else' spec function takes at least two
            arguments and an optional third one.  The first argument is an
            absolute pathname to a file.  If the file exists, the function
            returns the second argument.  If the file does not exist, the
--- 33605,33612 ----
                 crt0%O%s %:if-exists(crti%O%s) \
                 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
  
!      ‘if-exists-then-else’
!           The ‘if-exists-then-else’ spec function takes at least two
            arguments and an optional third one.  The first argument is an
            absolute pathname to a file.  If the file exists, the function
            returns the second argument.  If the file does not exist, the
*************** or combine them with constant text in a
*** 33607,33692 ****
  
                 -l%:if-exists-then-else(%:getenv(VSB_DIR rtnet.h) rtnet net)
  
!      'sanitize'
!           The 'sanitize' spec function takes no arguments.  It returns
            non-NULL if any address, thread or undefined behavior
            sanitizers are active.
  
                 %{%:sanitize(address):-funwind-tables}
  
!      'replace-outfile'
!           The 'replace-outfile' spec function takes two arguments.  It
            looks for the first argument in the outfiles array and
            replaces it with the second argument.  Here is a small example
            of its usage:
  
                 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
  
!      'remove-outfile'
!           The 'remove-outfile' spec function takes one argument.  It
            looks for the first argument in the outfiles array and removes
            it.  Here is a small example its usage:
  
                 %:remove-outfile(-lm)
  
!      'version-compare'
!           The 'version-compare' spec function takes four or five
            arguments of the following form:
  
                 <comparison-op> <arg1> [<arg2>] <switch> <result>
  
!           It returns 'result' if the comparison evaluates to true, and
!           NULL if it doesn't.  The supported 'comparison-op' values are:
  
!           '>='
!                True if 'switch' is a later (or same) version than 'arg1'
  
!           '!>'
!                Opposite of '>='
  
!           '<'
!                True if 'switch' is an earlier version than 'arg1'
  
!           '!<'
!                Opposite of '<'
  
!           '><'
!                True if 'switch' is 'arg1' or later, and earlier than
!                'arg2'
  
!           '<>'
!                True if 'switch' is earlier than 'arg1', or is 'arg2' or
                 later
  
!           If the 'switch' is not present at all, the condition is false
!           unless the first character of the 'comparison-op' is '!'.
  
                 %:version-compare(>= 10.3 mmacosx-version-min= -lmx)
  
!           The above example would add '-lmx' if
!           '-mmacosx-version-min=10.3.9' was passed.
  
!      'include'
!           The 'include' spec function behaves much like '%include', with
            the advantage that it can be nested inside a spec and thus be
            conditionalized.  It takes one argument, the filename, and
            looks for it in the startfile path.  It always returns NULL.
  
                 %{static-libasan|static:%:include(libsanitizer.spec)%(link_libasan)}
  
!      'pass-through-libs'
!           The 'pass-through-libs' spec function takes any number of
!           arguments.  It finds any '-l' options and any non-options
!           ending in '.a' (which it assumes are the names of linker input
            library archive files) and returns a result containing all the
!           found arguments each prepended by '-plugin-opt=-pass-through='
            and joined by spaces.  This list is intended to be passed to
            the LTO linker plugin.
  
                 %:pass-through-libs(%G %L %G)
  
!      'print-asm-header'
!           The 'print-asm-header' function takes no arguments and simply
            prints a banner like:
  
                 Assembler options
--- 33617,33702 ----
  
                 -l%:if-exists-then-else(%:getenv(VSB_DIR rtnet.h) rtnet net)
  
!      ‘sanitize’
!           The ‘sanitize’ spec function takes no arguments.  It returns
            non-NULL if any address, thread or undefined behavior
            sanitizers are active.
  
                 %{%:sanitize(address):-funwind-tables}
  
!      ‘replace-outfile’
!           The ‘replace-outfile’ spec function takes two arguments.  It
            looks for the first argument in the outfiles array and
            replaces it with the second argument.  Here is a small example
            of its usage:
  
                 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
  
!      ‘remove-outfile’
!           The ‘remove-outfile’ spec function takes one argument.  It
            looks for the first argument in the outfiles array and removes
            it.  Here is a small example its usage:
  
                 %:remove-outfile(-lm)
  
!      ‘version-compare’
!           The ‘version-compare’ spec function takes four or five
            arguments of the following form:
  
                 <comparison-op> <arg1> [<arg2>] <switch> <result>
  
!           It returns ‘result’ if the comparison evaluates to true, and
!           NULL if it doesn't.  The supported ‘comparison-op’ values are:
  
!           ‘>=’
!                True if ‘switch’ is a later (or same) version than ‘arg1’
  
!           ‘!>’
!                Opposite of ‘>=’
  
!           ‘<’
!                True if ‘switch’ is an earlier version than ‘arg1’
  
!           ‘!<’
!                Opposite of ‘<’
  
!           ‘><’
!                True if ‘switch’ is ‘arg1’ or later, and earlier than
!                ‘arg2’
  
!           ‘<>’
!                True if ‘switch’ is earlier than ‘arg1’, or is ‘arg2’ or
                 later
  
!           If the ‘switch’ is not present at all, the condition is false
!           unless the first character of the ‘comparison-op’ is ‘!’.
  
                 %:version-compare(>= 10.3 mmacosx-version-min= -lmx)
  
!           The above example would add ‘-lmx’ if
!           ‘-mmacosx-version-min=10.3.9’ was passed.
  
!      ‘include’
!           The ‘include’ spec function behaves much like ‘%include’, with
            the advantage that it can be nested inside a spec and thus be
            conditionalized.  It takes one argument, the filename, and
            looks for it in the startfile path.  It always returns NULL.
  
                 %{static-libasan|static:%:include(libsanitizer.spec)%(link_libasan)}
  
!      ‘pass-through-libs’
!           The ‘pass-through-libs’ spec function takes any number of
!           arguments.  It finds any ‘-l’ options and any non-options
!           ending in ‘.a’ (which it assumes are the names of linker input
            library archive files) and returns a result containing all the
!           found arguments each prepended by ‘-plugin-opt=-pass-through=’
            and joined by spaces.  This list is intended to be passed to
            the LTO linker plugin.
  
                 %:pass-through-libs(%G %L %G)
  
!      ‘print-asm-header’
!           The ‘print-asm-header’ function takes no arguments and simply
            prints a banner like:
  
                 Assembler options
*************** or combine them with constant text in a
*** 33695,33790 ****
                 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
  
            It is used to separate compiler options from assembler options
!           in the '--target-help' output.
  
!      'gt'
!           The 'gt' spec function takes two or more arguments.  It
!           returns '""' (the empty string) if the second-to-last argument
            is greater than the last argument, and NULL otherwise.  The
!           following example inserts the 'link_gomp' spec if the last
!           '-ftree-parallelize-loops=' option given on the command line
            is greater than 1:
  
                 %{%:gt(%{ftree-parallelize-loops=*:%*} 1):%:include(libgomp.spec)%(link_gomp)}
  
!      'debug-level-gt'
!           The 'debug-level-gt' spec function takes one argument and
!           returns '""' (the empty string) if 'debug_info_level' is
            greater than the specified number, and NULL otherwise.
  
                 %{%:debug-level-gt(0):%{gdwarf*:--gdwarf2}}
  
! '%{S}'
!      Substitutes the '-S' switch, if that switch is given to GCC.  If
       that switch is not specified, this substitutes nothing.  Note that
       the leading dash is omitted when specifying this option, and it is
       automatically inserted if the substitution is performed.  Thus the
!      spec string '%{foo}' matches the command-line option '-foo' and
!      outputs the command-line option '-foo'.
  
! '%W{S}'
!      Like %{'S'} but mark last argument supplied within as a file to be
       deleted on failure.
  
! '%@{S}'
!      Like %{'S'} but puts the result into a 'FILE' and substitutes
!      '@FILE' if an '@file' argument has been supplied.
  
! '%{S*}'
       Substitutes all the switches specified to GCC whose names start
!      with '-S', but which also take an argument.  This is used for
!      switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
!      being one switch whose name starts with 'o'.  %{o*} substitutes
       this text, including the space.  Thus two arguments are generated.
  
! '%{S*&T*}'
!      Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
!      of 'S' and 'T' in the spec is not significant).  There can be any
       number of ampersand-separated variables; for each the wild card is
!      optional.  Useful for CPP as '%{D*&U*&A*}'.
  
! '%{S:X}'
!      Substitutes 'X', if the '-S' switch is given to GCC.
  
! '%{!S:X}'
!      Substitutes 'X', if the '-S' switch is _not_ given to GCC.
  
! '%{S*:X}'
!      Substitutes 'X' if one or more switches whose names start with '-S'
!      are specified to GCC.  Normally 'X' is substituted only once, no
!      matter how many such switches appeared.  However, if '%*' appears
!      somewhere in 'X', then 'X' is substituted once for each matching
!      switch, with the '%*' replaced by the part of that switch matching
!      the '*'.
  
!      If '%*' appears as the last part of a spec sequence then a space is
       added after the end of the last substitution.  If there is more
       text in the sequence, however, then a space is not generated.  This
!      allows the '%*' substitution to be used as part of a larger string.
       For example, a spec string like this:
  
            %{mcu=*:--script=%*/memory.ld}
  
!      when matching an option like '-mcu=newchip' produces:
  
            --script=newchip/memory.ld
  
! '%{.S:X}'
!      Substitutes 'X', if processing a file with suffix 'S'.
  
! '%{!.S:X}'
!      Substitutes 'X', if _not_ processing a file with suffix 'S'.
  
! '%{,S:X}'
!      Substitutes 'X', if processing a file for language 'S'.
  
! '%{!,S:X}'
!      Substitutes 'X', if not processing a file for language 'S'.
  
! '%{S|P:X}'
!      Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
!      be combined with '!', '.', ',', and '*' sequences as well, although
!      they have a stronger binding than the '|'.  If '%*' appears in 'X',
       all of the alternatives must be starred, and only the first
       matching alternative is substituted.
  
--- 33705,33800 ----
                 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
  
            It is used to separate compiler options from assembler options
!           in the ‘--target-help’ output.
  
!      ‘gt’
!           The ‘gt’ spec function takes two or more arguments.  It
!           returns ‘""’ (the empty string) if the second-to-last argument
            is greater than the last argument, and NULL otherwise.  The
!           following example inserts the ‘link_gomp’ spec if the last
!           ‘-ftree-parallelize-loops=’ option given on the command line
            is greater than 1:
  
                 %{%:gt(%{ftree-parallelize-loops=*:%*} 1):%:include(libgomp.spec)%(link_gomp)}
  
!      ‘debug-level-gt’
!           The ‘debug-level-gt’ spec function takes one argument and
!           returns ‘""’ (the empty string) if ‘debug_info_level’ is
            greater than the specified number, and NULL otherwise.
  
                 %{%:debug-level-gt(0):%{gdwarf*:--gdwarf2}}
  
! ‘%{S}’
!      Substitutes the ‘-S’ switch, if that switch is given to GCC.  If
       that switch is not specified, this substitutes nothing.  Note that
       the leading dash is omitted when specifying this option, and it is
       automatically inserted if the substitution is performed.  Thus the
!      spec string ‘%{foo}’ matches the command-line option ‘-foo’ and
!      outputs the command-line option ‘-foo’.
  
! ‘%W{S}’
!      Like %{‘S’} but mark last argument supplied within as a file to be
       deleted on failure.
  
! ‘%@{S}’
!      Like %{‘S’} but puts the result into a ‘FILE’ and substitutes
!      ‘@FILE’ if an ‘@file’ argument has been supplied.
  
! ‘%{S*}’
       Substitutes all the switches specified to GCC whose names start
!      with ‘-S’, but which also take an argument.  This is used for
!      switches like ‘-o’, ‘-D’, ‘-I’, etc.  GCC considers ‘-o foo’ as
!      being one switch whose name starts with ‘o’.  %{o*} substitutes
       this text, including the space.  Thus two arguments are generated.
  
! ‘%{S*&T*}’
!      Like %{‘S’*}, but preserve order of ‘S’ and ‘T’ options (the order
!      of ‘S’ and ‘T’ in the spec is not significant).  There can be any
       number of ampersand-separated variables; for each the wild card is
!      optional.  Useful for CPP as ‘%{D*&U*&A*}’.
  
! ‘%{S:X}’
!      Substitutes ‘X’, if the ‘-S’ switch is given to GCC.
  
! ‘%{!S:X}’
!      Substitutes ‘X’, if the ‘-S’ switch is _not_ given to GCC.
  
! ‘%{S*:X}’
!      Substitutes ‘X’ if one or more switches whose names start with ‘-S’
!      are specified to GCC.  Normally ‘X’ is substituted only once, no
!      matter how many such switches appeared.  However, if ‘%*’ appears
!      somewhere in ‘X’, then ‘X’ is substituted once for each matching
!      switch, with the ‘%*’ replaced by the part of that switch matching
!      the ‘*’.
  
!      If ‘%*’ appears as the last part of a spec sequence then a space is
       added after the end of the last substitution.  If there is more
       text in the sequence, however, then a space is not generated.  This
!      allows the ‘%*’ substitution to be used as part of a larger string.
       For example, a spec string like this:
  
            %{mcu=*:--script=%*/memory.ld}
  
!      when matching an option like ‘-mcu=newchip’ produces:
  
            --script=newchip/memory.ld
  
! ‘%{.S:X}’
!      Substitutes ‘X’, if processing a file with suffix ‘S’.
  
! ‘%{!.S:X}’
!      Substitutes ‘X’, if _not_ processing a file with suffix ‘S’.
  
! ‘%{,S:X}’
!      Substitutes ‘X’, if processing a file for language ‘S’.
  
! ‘%{!,S:X}’
!      Substitutes ‘X’, if not processing a file for language ‘S’.
  
! ‘%{S|P:X}’
!      Substitutes ‘X’ if either ‘-S’ or ‘-P’ is given to GCC.  This may
!      be combined with ‘!’, ‘.’, ‘,’, and ‘*’ sequences as well, although
!      they have a stronger binding than the ‘|’.  If ‘%*’ appears in ‘X’,
       all of the alternatives must be starred, and only the first
       matching alternative is substituted.
  
*************** or combine them with constant text in a
*** 33800,33840 ****
            -d fred.c     -foo -baz -boggle
            -d jim.d      -bar -baz -boggle
  
! '%{%:FUNCTION(ARGS):X}'
  
       Call function named FUNCTION with args ARGS.  If the function
!      returns non-NULL, then 'X' is substituted, if it returns NULL, it
       isn't substituted.
  
! '%{S:X; T:Y; :D}'
  
!      If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
!      GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
!      clauses as you need.  This may be combined with '.', ',', '!', '|',
!      and '*' as needed.
  
!  The switch matching text 'S' in a '%{S}', '%{S:X}' or similar construct
  can use a backslash to ignore the special meaning of the character
  following it, thus allowing literal matching of a character that is
! otherwise specially treated.  For example, '%{std=iso9899\:1999:X}'
! substitutes 'X' if the '-std=iso9899:1999' option is given.
  
!  The conditional text 'X' in a '%{S:X}' or similar construct may contain
! other nested '%' constructs or spaces, or even newlines.  They are
! processed as usual, as described above.  Trailing white space in 'X' is
  ignored.  White space may also appear anywhere on the left side of the
! colon in these constructs, except between '.' or '*' and the
  corresponding word.
  
!  The '-O', '-f', '-m', and '-W' switches are handled specifically in
! these constructs.  If another value of '-O' or the negated form of a
! '-f', '-m', or '-W' switch is found later in the command line, the
! earlier switch value is ignored, except with {'S'*} where 'S' is just
  one letter, which passes all matching options.
  
!  The character '|' at the beginning of the predicate text is used to
  indicate that a command should be piped to the following command, but
! only if '-pipe' is specified.
  
   It is built into GCC which switches take arguments and which do not.
  (You might think it would be useful to generalize this to allow each
--- 33810,33850 ----
            -d fred.c     -foo -baz -boggle
            -d jim.d      -bar -baz -boggle
  
! ‘%{%:FUNCTION(ARGS):X}’
  
       Call function named FUNCTION with args ARGS.  If the function
!      returns non-NULL, then ‘X’ is substituted, if it returns NULL, it
       isn't substituted.
  
! ‘%{S:X; T:Y; :D}’
  
!      If ‘S’ is given to GCC, substitutes ‘X’; else if ‘T’ is given to
!      GCC, substitutes ‘Y’; else substitutes ‘D’.  There can be as many
!      clauses as you need.  This may be combined with ‘.’, ‘,’, ‘!’, ‘|’,
!      and ‘*’ as needed.
  
!  The switch matching text ‘S’ in a ‘%{S}’, ‘%{S:X}’ or similar construct
  can use a backslash to ignore the special meaning of the character
  following it, thus allowing literal matching of a character that is
! otherwise specially treated.  For example, ‘%{std=iso9899\:1999:X}’
! substitutes ‘X’ if the ‘-std=iso9899:1999’ option is given.
  
!  The conditional text ‘X’ in a ‘%{S:X}’ or similar construct may contain
! other nested ‘%’ constructs or spaces, or even newlines.  They are
! processed as usual, as described above.  Trailing white space in ‘X’ is
  ignored.  White space may also appear anywhere on the left side of the
! colon in these constructs, except between ‘.’ or ‘*’ and the
  corresponding word.
  
!  The ‘-O’, ‘-f’, ‘-m’, and ‘-W’ switches are handled specifically in
! these constructs.  If another value of ‘-O’ or the negated form of a
! ‘-f’, ‘-m’, or ‘-W’ switch is found later in the command line, the
! earlier switch value is ignored, except with {‘S’*} where ‘S’ is just
  one letter, which passes all matching options.
  
!  The character ‘|’ at the beginning of the predicate text is used to
  indicate that a command should be piped to the following command, but
! only if ‘-pipe’ is specified.
  
   It is built into GCC which switches take arguments and which do not.
  (You might think it would be useful to generalize this to allow each
*************** files have been specified without knowin
*** 33844,33850 ****
  and it must know which input files to compile in order to tell which
  compilers to run).
  
!  GCC also knows implicitly that arguments starting in '-l' are to be
  treated as compiler output files, and passed to the linker in their
  proper position among the other output files.
  
--- 33854,33860 ----
  and it must know which input files to compile in order to tell which
  compilers to run).
  
!  GCC also knows implicitly that arguments starting in ‘-l’ are to be
  treated as compiler output files, and passed to the linker in their
  proper position among the other output files.
  
*************** use when searching for various kinds of
*** 33860,34057 ****
  other aspects of the compilation environment.
  
   Note that you can also specify places to search using options such as
! '-B', '-I' and '-L' (*note Directory Options::).  These take precedence
  over places specified using environment variables, which in turn take
  precedence over those specified by the configuration of GCC.  *Note
! Controlling the Compilation Driver 'gcc': (gccint)Driver.
  
! 'LANG'
! 'LC_CTYPE'
! 'LC_MESSAGES'
! 'LC_ALL'
       These environment variables control the way that GCC uses
       localization information which allows GCC to work with different
       national conventions.  GCC inspects the locale categories
!      'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
       These locale categories can be set to any value supported by your
!      installation.  A typical value is 'en_GB.UTF-8' for English in the
       United Kingdom encoded in UTF-8.
  
!      The 'LC_CTYPE' environment variable specifies character
       classification.  GCC uses it to determine the character boundaries
       in a string; this is needed for some multibyte encodings that
       contain quote and escape characters that are otherwise interpreted
       as a string end or escape.
  
!      The 'LC_MESSAGES' environment variable specifies the language to
       use in diagnostic messages.
  
!      If the 'LC_ALL' environment variable is set, it overrides the value
!      of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
!      'LC_MESSAGES' default to the value of the 'LANG' environment
       variable.  If none of these variables are set, GCC defaults to
       traditional C English behavior.
  
! 'TMPDIR'
!      If 'TMPDIR' is set, it specifies the directory to use for temporary
       files.  GCC uses temporary files to hold the output of one stage of
       compilation which is to be used as input to the next stage: for
       example, the output of the preprocessor, which is the input to the
       compiler proper.
  
! 'GCC_COMPARE_DEBUG'
!      Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
!      '-fcompare-debug' to the compiler driver.  See the documentation of
       this option for more details.
  
! 'GCC_EXEC_PREFIX'
!      If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
       names of the subprograms executed by the compiler.  No slash is
       added when this prefix is combined with the name of a subprogram,
       but you can specify a prefix that ends with a slash if you wish.
  
!      If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
       appropriate prefix to use based on the pathname it is invoked with.
  
       If GCC cannot find the subprogram using the specified prefix, it
       tries looking in the usual places for the subprogram.
  
!      The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
       PREFIX is the prefix to the installed compiler.  In many cases
!      PREFIX is the value of 'prefix' when you ran the 'configure'
       script.
  
!      Other prefixes specified with '-B' take precedence over this
       prefix.
  
!      This prefix is also used for finding files such as 'crt0.o' that
       are used for linking.
  
       In addition, the prefix is used in an unusual way in finding the
       directories to search for header files.  For each of the standard
!      directories whose name normally begins with '/usr/local/lib/gcc'
!      (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
       replacing that beginning with the specified prefix to produce an
!      alternate directory name.  Thus, with '-Bfoo/', GCC searches
!      'foo/bar' just before it searches the standard directory
!      '/usr/local/lib/bar'.  If a standard directory begins with the
       configured PREFIX then the value of PREFIX is replaced by
!      'GCC_EXEC_PREFIX' when looking for header files.
  
! 'COMPILER_PATH'
!      The value of 'COMPILER_PATH' is a colon-separated list of
!      directories, much like 'PATH'.  GCC tries the directories thus
       specified when searching for subprograms, if it cannot find the
!      subprograms using 'GCC_EXEC_PREFIX'.
  
! 'LIBRARY_PATH'
!      The value of 'LIBRARY_PATH' is a colon-separated list of
!      directories, much like 'PATH'.  When configured as a native
       compiler, GCC tries the directories thus specified when searching
       for special linker files, if it cannot find them using
!      'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
!      when searching for ordinary libraries for the '-l' option (but
!      directories specified with '-L' come first).
  
! 'LANG'
       This variable is used to pass locale information to the compiler.
       One way in which this information is used is to determine the
       character set to be used when character literals, string literals
       and comments are parsed in C and C++.  When the compiler is
       configured to allow multibyte characters, the following values for
!      'LANG' are recognized:
  
!      'C-JIS'
            Recognize JIS characters.
!      'C-SJIS'
            Recognize SJIS characters.
!      'C-EUCJP'
            Recognize EUCJP characters.
  
!      If 'LANG' is not defined, or if it has some other value, then the
!      compiler uses 'mblen' and 'mbtowc' as defined by the default locale
       to recognize and translate multibyte characters.
  
! 'GCC_EXTRA_DIAGNOSTIC_OUTPUT'
!      If 'GCC_EXTRA_DIAGNOSTIC_OUTPUT' is set to one of the following
       values, then additional text will be emitted to stderr when fix-it
!      hints are emitted.  '-fdiagnostics-parseable-fixits' and
!      '-fno-diagnostics-parseable-fixits' take precedence over this
       environment variable.
  
!      'fixits-v1'
            Emit parseable fix-it hints, equivalent to
!           '-fdiagnostics-parseable-fixits'.  In particular, columns are
            expressed as a count of bytes, starting at byte 1 for the
            initial column.
  
!      'fixits-v2'
!           As 'fixits-v1', but columns are expressed as display columns,
!           as per '-fdiagnostics-column-unit=display'.
  
  Some additional environment variables affect the behavior of the
  preprocessor.
  
! 'CPATH'
! 'C_INCLUDE_PATH'
! 'CPLUS_INCLUDE_PATH'
! 'OBJC_INCLUDE_PATH'
       Each variable's value is a list of directories separated by a
!      special character, much like 'PATH', in which to look for header
!      files.  The special character, 'PATH_SEPARATOR', is
       target-dependent and determined at GCC build time.  For Microsoft
       Windows-based targets it is a semicolon, and for almost all other
       targets it is a colon.
  
!      'CPATH' specifies a list of directories to be searched as if
!      specified with '-I', but after any paths given with '-I' options on
       the command line.  This environment variable is used regardless of
       which language is being preprocessed.
  
       The remaining environment variables apply only when preprocessing
       the particular language indicated.  Each specifies a list of
!      directories to be searched as if specified with '-isystem', but
!      after any paths given with '-isystem' options on the command line.
  
       In all these variables, an empty element instructs the compiler to
       search its current working directory.  Empty elements can appear at
       the beginning or end of a path.  For instance, if the value of
!      'CPATH' is ':/special/include', that has the same effect as
!      '-I. -I/special/include'.
  
! 'DEPENDENCIES_OUTPUT'
       If this variable is set, its value specifies how to output
       dependencies for Make based on the non-system header files
       processed by the compiler.  System header files are ignored in the
       dependency output.
  
!      The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
       which case the Make rules are written to that file, guessing the
       target name from the source file name.  Or the value can have the
!      form 'FILE TARGET', in which case the rules are written to file
       FILE using TARGET as the target name.
  
       In other words, this environment variable is equivalent to
!      combining the options '-MM' and '-MF' (*note Preprocessor
!      Options::), with an optional '-MT' switch too.
  
! 'SUNPRO_DEPENDENCIES'
!      This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
!      except that system header files are not ignored, so it implies '-M'
!      rather than '-MM'.  However, the dependence on the main input file
       is omitted.  *Note Preprocessor Options::.
  
! 'SOURCE_DATE_EPOCH'
       If this variable is set, its value specifies a UNIX timestamp to be
!      used in replacement of the current date and time in the '__DATE__'
!      and '__TIME__' macros, so that the embedded timestamps become
       reproducible.
  
!      The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
       as the number of seconds (excluding leap seconds) since 01 Jan 1970
!      00:00:00 represented in ASCII; identical to the output of 'date
!      +%s' on GNU/Linux and other systems that support the '%s' extension
!      in the 'date' command.
  
       The value should be a known timestamp such as the last modification
       time of the source or package and it should be set by the build
--- 33870,34067 ----
  other aspects of the compilation environment.
  
   Note that you can also specify places to search using options such as
! ‘-B’, ‘-I’ and ‘-L’ (*note Directory Options::).  These take precedence
  over places specified using environment variables, which in turn take
  precedence over those specified by the configuration of GCC.  *Note
! Controlling the Compilation Driver ‘gcc’: (gccint)Driver.
  
! ‘LANG’
! ‘LC_CTYPE’
! ‘LC_MESSAGES’
! ‘LC_ALL’
       These environment variables control the way that GCC uses
       localization information which allows GCC to work with different
       national conventions.  GCC inspects the locale categories
!      ‘LC_CTYPE’ and ‘LC_MESSAGES’ if it has been configured to do so.
       These locale categories can be set to any value supported by your
!      installation.  A typical value is ‘en_GB.UTF-8’ for English in the
       United Kingdom encoded in UTF-8.
  
!      The ‘LC_CTYPE’ environment variable specifies character
       classification.  GCC uses it to determine the character boundaries
       in a string; this is needed for some multibyte encodings that
       contain quote and escape characters that are otherwise interpreted
       as a string end or escape.
  
!      The ‘LC_MESSAGES’ environment variable specifies the language to
       use in diagnostic messages.
  
!      If the ‘LC_ALL’ environment variable is set, it overrides the value
!      of ‘LC_CTYPE’ and ‘LC_MESSAGES’; otherwise, ‘LC_CTYPE’ and
!      ‘LC_MESSAGES’ default to the value of the ‘LANG’ environment
       variable.  If none of these variables are set, GCC defaults to
       traditional C English behavior.
  
! ‘TMPDIR’
!      If ‘TMPDIR’ is set, it specifies the directory to use for temporary
       files.  GCC uses temporary files to hold the output of one stage of
       compilation which is to be used as input to the next stage: for
       example, the output of the preprocessor, which is the input to the
       compiler proper.
  
! ‘GCC_COMPARE_DEBUG’
!      Setting ‘GCC_COMPARE_DEBUG’ is nearly equivalent to passing
!      ‘-fcompare-debug’ to the compiler driver.  See the documentation of
       this option for more details.
  
! ‘GCC_EXEC_PREFIX’
!      If ‘GCC_EXEC_PREFIX’ is set, it specifies a prefix to use in the
       names of the subprograms executed by the compiler.  No slash is
       added when this prefix is combined with the name of a subprogram,
       but you can specify a prefix that ends with a slash if you wish.
  
!      If ‘GCC_EXEC_PREFIX’ is not set, GCC attempts to figure out an
       appropriate prefix to use based on the pathname it is invoked with.
  
       If GCC cannot find the subprogram using the specified prefix, it
       tries looking in the usual places for the subprogram.
  
!      The default value of ‘GCC_EXEC_PREFIX’ is ‘PREFIX/lib/gcc/’ where
       PREFIX is the prefix to the installed compiler.  In many cases
!      PREFIX is the value of ‘prefix’ when you ran the ‘configure’
       script.
  
!      Other prefixes specified with ‘-B’ take precedence over this
       prefix.
  
!      This prefix is also used for finding files such as ‘crt0.o’ that
       are used for linking.
  
       In addition, the prefix is used in an unusual way in finding the
       directories to search for header files.  For each of the standard
!      directories whose name normally begins with ‘/usr/local/lib/gcc’
!      (more precisely, with the value of ‘GCC_INCLUDE_DIR’), GCC tries
       replacing that beginning with the specified prefix to produce an
!      alternate directory name.  Thus, with ‘-Bfoo/’, GCC searches
!      ‘foo/bar’ just before it searches the standard directory
!      ‘/usr/local/lib/bar’.  If a standard directory begins with the
       configured PREFIX then the value of PREFIX is replaced by
!      ‘GCC_EXEC_PREFIX’ when looking for header files.
  
! ‘COMPILER_PATH’
!      The value of ‘COMPILER_PATH’ is a colon-separated list of
!      directories, much like ‘PATH’.  GCC tries the directories thus
       specified when searching for subprograms, if it cannot find the
!      subprograms using ‘GCC_EXEC_PREFIX’.
  
! ‘LIBRARY_PATH’
!      The value of ‘LIBRARY_PATH’ is a colon-separated list of
!      directories, much like ‘PATH’.  When configured as a native
       compiler, GCC tries the directories thus specified when searching
       for special linker files, if it cannot find them using
!      ‘GCC_EXEC_PREFIX’.  Linking using GCC also uses these directories
!      when searching for ordinary libraries for the ‘-l’ option (but
!      directories specified with ‘-L’ come first).
  
! ‘LANG’
       This variable is used to pass locale information to the compiler.
       One way in which this information is used is to determine the
       character set to be used when character literals, string literals
       and comments are parsed in C and C++.  When the compiler is
       configured to allow multibyte characters, the following values for
!      ‘LANG’ are recognized:
  
!      ‘C-JIS’
            Recognize JIS characters.
!      ‘C-SJIS’
            Recognize SJIS characters.
!      ‘C-EUCJP’
            Recognize EUCJP characters.
  
!      If ‘LANG’ is not defined, or if it has some other value, then the
!      compiler uses ‘mblen’ and ‘mbtowc’ as defined by the default locale
       to recognize and translate multibyte characters.
  
! ‘GCC_EXTRA_DIAGNOSTIC_OUTPUT’
!      If ‘GCC_EXTRA_DIAGNOSTIC_OUTPUT’ is set to one of the following
       values, then additional text will be emitted to stderr when fix-it
!      hints are emitted.  ‘-fdiagnostics-parseable-fixits’ and
!      ‘-fno-diagnostics-parseable-fixits’ take precedence over this
       environment variable.
  
!      ‘fixits-v1’
            Emit parseable fix-it hints, equivalent to
!           ‘-fdiagnostics-parseable-fixits’.  In particular, columns are
            expressed as a count of bytes, starting at byte 1 for the
            initial column.
  
!      ‘fixits-v2’
!           As ‘fixits-v1’, but columns are expressed as display columns,
!           as per ‘-fdiagnostics-column-unit=display’.
  
  Some additional environment variables affect the behavior of the
  preprocessor.
  
! ‘CPATH’
! ‘C_INCLUDE_PATH’
! ‘CPLUS_INCLUDE_PATH’
! ‘OBJC_INCLUDE_PATH’
       Each variable's value is a list of directories separated by a
!      special character, much like ‘PATH’, in which to look for header
!      files.  The special character, ‘PATH_SEPARATOR’, is
       target-dependent and determined at GCC build time.  For Microsoft
       Windows-based targets it is a semicolon, and for almost all other
       targets it is a colon.
  
!      ‘CPATH’ specifies a list of directories to be searched as if
!      specified with ‘-I’, but after any paths given with ‘-I’ options on
       the command line.  This environment variable is used regardless of
       which language is being preprocessed.
  
       The remaining environment variables apply only when preprocessing
       the particular language indicated.  Each specifies a list of
!      directories to be searched as if specified with ‘-isystem’, but
!      after any paths given with ‘-isystem’ options on the command line.
  
       In all these variables, an empty element instructs the compiler to
       search its current working directory.  Empty elements can appear at
       the beginning or end of a path.  For instance, if the value of
!      ‘CPATH’ is ‘:/special/include’, that has the same effect as
!      ‘-I. -I/special/include’.
  
! ‘DEPENDENCIES_OUTPUT’
       If this variable is set, its value specifies how to output
       dependencies for Make based on the non-system header files
       processed by the compiler.  System header files are ignored in the
       dependency output.
  
!      The value of ‘DEPENDENCIES_OUTPUT’ can be just a file name, in
       which case the Make rules are written to that file, guessing the
       target name from the source file name.  Or the value can have the
!      form ‘FILE TARGET’, in which case the rules are written to file
       FILE using TARGET as the target name.
  
       In other words, this environment variable is equivalent to
!      combining the options ‘-MM’ and ‘-MF’ (*note Preprocessor
!      Options::), with an optional ‘-MT’ switch too.
  
! ‘SUNPRO_DEPENDENCIES’
!      This variable is the same as ‘DEPENDENCIES_OUTPUT’ (see above),
!      except that system header files are not ignored, so it implies ‘-M’
!      rather than ‘-MM’.  However, the dependence on the main input file
       is omitted.  *Note Preprocessor Options::.
  
! ‘SOURCE_DATE_EPOCH’
       If this variable is set, its value specifies a UNIX timestamp to be
!      used in replacement of the current date and time in the ‘__DATE__’
!      and ‘__TIME__’ macros, so that the embedded timestamps become
       reproducible.
  
!      The value of ‘SOURCE_DATE_EPOCH’ must be a UNIX timestamp, defined
       as the number of seconds (excluding leap seconds) since 01 Jan 1970
!      00:00:00 represented in ASCII; identical to the output of ‘date
!      +%s’ on GNU/Linux and other systems that support the ‘%s’ extension
!      in the ‘date’ command.
  
       The value should be a known timestamp such as the last modification
       time of the source or package and it should be set by the build
*************** Often large projects have many header fi
*** 34067,34111 ****
  source file.  The time the compiler takes to process these header files
  over and over again can account for nearly all of the time required to
  build the project.  To make builds faster, GCC allows you to
! "precompile" a header file.
  
   To create a precompiled header file, simply compile it as you would any
! other file, if necessary using the '-x' option to make the driver treat
! it as a C or C++ header file.  You may want to use a tool like 'make' to
  keep the precompiled header up-to-date when the headers it contains
  change.
  
!  A precompiled header file is searched for when '#include' is seen in
  the compilation.  As it searches for the included file (*note Search
  Path: (cpp)Search Path.) the compiler looks for a precompiled header in
  each directory just before it looks for the include file in that
  directory.  The name searched for is the name specified in the
! '#include' with '.gch' appended.  If the precompiled header file cannot
  be used, it is ignored.
  
!  For instance, if you have '#include "all.h"', and you have 'all.h.gch'
! in the same directory as 'all.h', then the precompiled header file is
  used if possible, and the original header is used otherwise.
  
   Alternatively, you might decide to put the precompiled header file in a
! directory and use '-I' to ensure that directory is searched before (or
  instead of) the directory containing the original header.  Then, if you
  want to check that the precompiled header file is always used, you can
  put a file of the same name as the original header in this directory
! containing an '#error' command.
  
!  This also works with '-include'.  So yet another way to use precompiled
  headers, good for projects not designed with precompiled header files in
  mind, is to simply take most of the header files used by a project,
  include them from another header file, precompile that header file, and
! '-include' the precompiled header.  If the header files have guards
  against multiple inclusion, they are skipped because they've already
  been included (in the precompiled header).
  
   If you need to precompile the same header file for different languages,
  targets, or compiler options, you can instead make a _directory_ named
! like 'all.h.gch', and put each precompiled header in the directory,
! perhaps using '-o'.  It doesn't matter what you call the files in the
  directory; every precompiled header in the directory is considered.  The
  first precompiled header encountered in the directory that is valid for
  this compilation is used; they're searched in no particular order.
--- 34077,34121 ----
  source file.  The time the compiler takes to process these header files
  over and over again can account for nearly all of the time required to
  build the project.  To make builds faster, GCC allows you to
! “precompile” a header file.
  
   To create a precompiled header file, simply compile it as you would any
! other file, if necessary using the ‘-x’ option to make the driver treat
! it as a C or C++ header file.  You may want to use a tool like ‘make’ to
  keep the precompiled header up-to-date when the headers it contains
  change.
  
!  A precompiled header file is searched for when ‘#include’ is seen in
  the compilation.  As it searches for the included file (*note Search
  Path: (cpp)Search Path.) the compiler looks for a precompiled header in
  each directory just before it looks for the include file in that
  directory.  The name searched for is the name specified in the
! ‘#include’ with ‘.gch’ appended.  If the precompiled header file cannot
  be used, it is ignored.
  
!  For instance, if you have ‘#include "all.h"’, and you have ‘all.h.gch’
! in the same directory as ‘all.h’, then the precompiled header file is
  used if possible, and the original header is used otherwise.
  
   Alternatively, you might decide to put the precompiled header file in a
! directory and use ‘-I’ to ensure that directory is searched before (or
  instead of) the directory containing the original header.  Then, if you
  want to check that the precompiled header file is always used, you can
  put a file of the same name as the original header in this directory
! containing an ‘#error’ command.
  
!  This also works with ‘-include’.  So yet another way to use precompiled
  headers, good for projects not designed with precompiled header files in
  mind, is to simply take most of the header files used by a project,
  include them from another header file, precompile that header file, and
! ‘-include’ the precompiled header.  If the header files have guards
  against multiple inclusion, they are skipped because they've already
  been included (in the precompiled header).
  
   If you need to precompile the same header file for different languages,
  targets, or compiler options, you can instead make a _directory_ named
! like ‘all.h.gch’, and put each precompiled header in the directory,
! perhaps using ‘-o’.  It doesn't matter what you call the files in the
  directory; every precompiled header in the directory is considered.  The
  first precompiled header encountered in the directory that is valid for
  this compilation is used; they're searched in no particular order.
*************** good sense, and the constraints of your
*** 34115,34161 ****
  
   A precompiled header file can be used only when these conditions apply:
  
!    * Only one precompiled header can be used in a particular
       compilation.
  
!    * A precompiled header cannot be used once the first C token is seen.
       You can have preprocessor directives before a precompiled header;
       you cannot include a precompiled header from inside another header.
  
!    * The precompiled header file must be produced for the same language
       as the current compilation.  You cannot use a C precompiled header
       for a C++ compilation.
  
!    * The precompiled header file must have been produced by the same
       compiler binary as the current compilation is using.
  
!    * Any macros defined before the precompiled header is included must
       either be defined in the same way as when the precompiled header
       was generated, or must not affect the precompiled header, which
       usually means that they don't appear in the precompiled header at
       all.
  
!      The '-D' option is one way to define a macro before a precompiled
!      header is included; using a '#define' can also do it.  There are
!      also some options that define macros implicitly, like '-O' and
!      '-Wdeprecated'; the same rule applies to macros defined this way.
  
!    * If debugging information is output when using the precompiled
!      header, using '-g' or similar, the same kind of debugging
       information must have been output when building the precompiled
!      header.  However, a precompiled header built using '-g' can be used
       in a compilation when no debugging information is being output.
  
!    * The same '-m' options must generally be used when building and
       using the precompiled header.  *Note Submodel Options::, for any
       cases where this rule is relaxed.
  
!    * Each of the following options must be the same when building and
       using the precompiled header:
  
            -fexceptions
  
!    * Some other command-line options starting with '-f', '-p', or '-O'
       must be defined in the same way as when the precompiled header was
       generated.  At present, it's not clear which options are safe to
       change and which are not; the safest choice is to use exactly the
--- 34125,34171 ----
  
   A precompiled header file can be used only when these conditions apply:
  
!    • Only one precompiled header can be used in a particular
       compilation.
  
!    • A precompiled header cannot be used once the first C token is seen.
       You can have preprocessor directives before a precompiled header;
       you cannot include a precompiled header from inside another header.
  
!    • The precompiled header file must be produced for the same language
       as the current compilation.  You cannot use a C precompiled header
       for a C++ compilation.
  
!    • The precompiled header file must have been produced by the same
       compiler binary as the current compilation is using.
  
!    • Any macros defined before the precompiled header is included must
       either be defined in the same way as when the precompiled header
       was generated, or must not affect the precompiled header, which
       usually means that they don't appear in the precompiled header at
       all.
  
!      The ‘-D’ option is one way to define a macro before a precompiled
!      header is included; using a ‘#define’ can also do it.  There are
!      also some options that define macros implicitly, like ‘-O’ and
!      ‘-Wdeprecated’; the same rule applies to macros defined this way.
  
!    • If debugging information is output when using the precompiled
!      header, using ‘-g’ or similar, the same kind of debugging
       information must have been output when building the precompiled
!      header.  However, a precompiled header built using ‘-g’ can be used
       in a compilation when no debugging information is being output.
  
!    • The same ‘-m’ options must generally be used when building and
       using the precompiled header.  *Note Submodel Options::, for any
       cases where this rule is relaxed.
  
!    • Each of the following options must be the same when building and
       using the precompiled header:
  
            -fexceptions
  
!    • Some other command-line options starting with ‘-f’, ‘-p’, or ‘-O’
       must be defined in the same way as when the precompiled header was
       generated.  At present, it's not clear which options are safe to
       change and which are not; the safest choice is to use exactly the
*************** good sense, and the constraints of your
*** 34167,34173 ****
            -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
            -pedantic-errors
  
!    * Address space layout randomization (ASLR) can lead to not binary
       identical PCH files.  If you rely on stable PCH file contents
       disable ASLR when generating PCH files.
  
--- 34177,34183 ----
            -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
            -pedantic-errors
  
!    • Address space layout randomization (ASLR) can lead to not binary
       identical PCH files.  If you rely on stable PCH file contents
       disable ASLR when generating PCH files.
  
*************** Bugs::.
*** 34179,34185 ****
  
   If you do use differing options when generating and using the
  precompiled header, the actual behavior is a mixture of the behavior for
! the options.  For instance, if you use '-g' to generate the precompiled
  header but not when using it, you may or may not get debugging
  information for routines in the precompiled header.
  
--- 34189,34195 ----
  
   If you do use differing options when generating and using the
  precompiled header, the actual behavior is a mixture of the behavior for
! the options.  For instance, if you use ‘-g’ to generate the precompiled
  header but not when using it, you may or may not get debugging
  information for routines in the precompiled header.
  
*************** _Standard Library Header Units_
*** 34229,34242 ****
       resource usage can be affected by how you partition header files
       into header units.
  
!  Modular compilation is _not_ enabled with just the '-std=c++20' option.
! You must explicitly enable it with the '-fmodules-ts' option.  It is
  independent of the language version selected, although in pre-C++20
  versions, it is of course an extension.
  
   No new source file suffixes are required or supported.  If you wish to
  use a non-standard suffix (*note Overall Options::), you also need to
! provide a '-x c++' option too.(1)
  
   Compiling a module interface unit produces an additional output (to the
  assembly or object file), called a Compiled Module Interface (CMI). This
--- 34239,34252 ----
       resource usage can be affected by how you partition header files
       into header units.
  
!  Modular compilation is _not_ enabled with just the ‘-std=c++20’ option.
! You must explicitly enable it with the ‘-fmodules-ts’ option.  It is
  independent of the language version selected, although in pre-C++20
  versions, it is of course an extension.
  
   No new source file suffixes are required or supported.  If you wish to
  use a non-standard suffix (*note Overall Options::), you also need to
! provide a ‘-x c++’ option too.(1)
  
   Compiling a module interface unit produces an additional output (to the
  assembly or object file), called a Compiled Module Interface (CMI). This
*************** You must build imports before the import
*** 34246,34274 ****
  
   Header files may themselves be compiled to header units, which are a
  transitional ability aiming at faster compilation.  The
! '-fmodule-header' option is used to enable this, and implies the
! '-fmodules-ts' option.  These CMIs are named by the fully resolved
  underlying header file, and thus may be a complete pathname containing
  subdirectories.  If the header file is found at an absolute pathname,
  the CMI location is still relative to a CMI root directory.
  
   As header files often have no suffix, you commonly have to specify a
! '-x' option to tell the compiler the source is a header file.  You may
! use '-x c++-header', '-x c++-user-header' or '-x c++-system-header'.
! When used in conjunction with '-fmodules-ts', these all imply an
! appropriate '-fmodule-header' option.  The latter two variants use the
  user or system include path to search for the file specified.  This
  allows you to, for instance, compile standard library header files as
  header units, without needing to know exactly where they are installed.
  Specifying the language as one of these variants also inhibits output of
  the object file, as header files have no associated object file.
  
!  The '-fmodule-only' option disables generation of the associated object
  file for compiling a module interface.  Only the CMI is generated.  This
! option is implied when using the '-fmodule-header' option.
  
!  The '-flang-info-include-translate' and
! '-flang-info-include-translate-not' options notes whether include
  translation occurs or not.  With no argument, the first will note all
  include translation.  The second will note all non-translations of
  include files not known to intentionally be textual.  With an argument,
--- 34256,34284 ----
  
   Header files may themselves be compiled to header units, which are a
  transitional ability aiming at faster compilation.  The
! ‘-fmodule-header’ option is used to enable this, and implies the
! ‘-fmodules-ts’ option.  These CMIs are named by the fully resolved
  underlying header file, and thus may be a complete pathname containing
  subdirectories.  If the header file is found at an absolute pathname,
  the CMI location is still relative to a CMI root directory.
  
   As header files often have no suffix, you commonly have to specify a
! ‘-x’ option to tell the compiler the source is a header file.  You may
! use ‘-x c++-header’, ‘-x c++-user-header’ or ‘-x c++-system-header’.
! When used in conjunction with ‘-fmodules-ts’, these all imply an
! appropriate ‘-fmodule-header’ option.  The latter two variants use the
  user or system include path to search for the file specified.  This
  allows you to, for instance, compile standard library header files as
  header units, without needing to know exactly where they are installed.
  Specifying the language as one of these variants also inhibits output of
  the object file, as header files have no associated object file.
  
!  The ‘-fmodule-only’ option disables generation of the associated object
  file for compiling a module interface.  Only the CMI is generated.  This
! option is implied when using the ‘-fmodule-header’ option.
  
!  The ‘-flang-info-include-translate’ and
! ‘-flang-info-include-translate-not’ options notes whether include
  translation occurs or not.  With no argument, the first will note all
  include translation.  The second will note all non-translations of
  include files not known to intentionally be textual.  With an argument,
*************** different header files.  This option may
*** 34278,34295 ****
  whether include translation is happening--if it is working correctly, it
  behaves as if it isn't there at all.
  
!  The '-flang-info-module-cmi' option can be used to determine where the
  compiler is reading a CMI from.  Without the option, the compiler is
  silent when such a read is successful.  This option has an optional
  argument, which will restrict the notification to just the set of named
  modules or header units specified.
  
!  The '-Winvalid-imported-macros' option causes all imported macros to be
  resolved at the end of compilation.  Without this, imported macros are
  only resolved when expanded or (re)defined.  This option detects
  conflicting import definitions for all macros.
  
!  For details of the '-fmodule-mapper' family of options, *note C++
  Module Mapper::.
  
  * Menu:
--- 34288,34305 ----
  whether include translation is happening--if it is working correctly, it
  behaves as if it isn't there at all.
  
!  The ‘-flang-info-module-cmi’ option can be used to determine where the
  compiler is reading a CMI from.  Without the option, the compiler is
  silent when such a read is successful.  This option has an optional
  argument, which will restrict the notification to just the set of named
  modules or header units specified.
  
!  The ‘-Winvalid-imported-macros’ option causes all imported macros to be
  resolved at the end of compilation.  Without this, imported macros are
  only resolved when expanded or (re)defined.  This option detects
  conflicting import definitions for all macros.
  
!  For details of the ‘-fmodule-mapper’ family of options, *note C++
  Module Mapper::.
  
  * Menu:
*************** Module Mapper::.
*** 34301,34309 ****
     ---------- Footnotes ----------
  
     (1) Some users like to distinguish module interface files with a new
! suffix, such as naming the source 'module.cppm', which involves teaching
  all tools about the new suffix.  A different scheme, such as naming
! 'module-m.cpp' would be less invasive.
  
  
  File: gcc.info,  Node: C++ Module Mapper,  Next: C++ Module Preprocessing,  Up: C++ Modules
--- 34311,34319 ----
     ---------- Footnotes ----------
  
     (1) Some users like to distinguish module interface files with a new
! suffix, such as naming the source ‘module.cppm’, which involves teaching
  all tools about the new suffix.  A different scheme, such as naming
! ‘module-m.cpp’ would be less invasive.
  
  
  File: gcc.info,  Node: C++ Module Mapper,  Next: C++ Module Preprocessing,  Up: C++ Modules
*************** determine the mapping between module nam
*** 34316,34338 ****
  used to build CMIs on demand.  _Mapper functionality is in its infancy
  and is intended for experimentation with build system interactions._
  
!  You can specify a mapper with the '-fmodule-mapper=VAL' option or
! 'CXX_MODULE_MAPPER' environment variable.  The value may have one of the
  following forms:
  
! '[HOSTNAME]:PORT[?IDENT]'
       An optional hostname and a numeric port number to connect to.  If
       the hostname is omitted, the loopback address is used.  If the
       hostname corresponds to multiple IPV6 addresses, these are tried in
       turn, until one is successful.  If your host lacks IPv6, this form
       is non-functional.  If you must use IPv4 use
!      '-fmodule-mapper='|ncat IPV4HOST PORT''.
  
! '=SOCKET[?IDENT]'
       A local domain socket.  If your host lacks local domain sockets,
       this form is non-functional.
  
! '|PROGRAM[?IDENT] [ARGS...]'
       A program to spawn, and communicate with on its stdin/stdout
       streams.  Your PATH environment variable is searched for the
       program.  Arguments are separated by space characters, (it is not
--- 34326,34348 ----
  used to build CMIs on demand.  _Mapper functionality is in its infancy
  and is intended for experimentation with build system interactions._
  
!  You can specify a mapper with the ‘-fmodule-mapper=VAL’ option or
! ‘CXX_MODULE_MAPPER’ environment variable.  The value may have one of the
  following forms:
  
! ‘[HOSTNAME]:PORT[?IDENT]’
       An optional hostname and a numeric port number to connect to.  If
       the hostname is omitted, the loopback address is used.  If the
       hostname corresponds to multiple IPV6 addresses, these are tried in
       turn, until one is successful.  If your host lacks IPv6, this form
       is non-functional.  If you must use IPv4 use
!      ‘-fmodule-mapper='|ncat IPV4HOST PORT'’.
  
! ‘=SOCKET[?IDENT]’
       A local domain socket.  If your host lacks local domain sockets,
       this form is non-functional.
  
! ‘|PROGRAM[?IDENT] [ARGS...]’
       A program to spawn, and communicate with on its stdin/stdout
       streams.  Your PATH environment variable is searched for the
       program.  Arguments are separated by space characters, (it is not
*************** following forms:
*** 34340,34352 ****
       contain a space).  An exception is if PROGRAM begins with @.  In
       that case PROGRAM (sans @) is looked for in the compiler's internal
       binary directory.  Thus the sample mapper-server can be specified
!      with '@g++-mapper-server'.
  
! '<>[?IDENT]'
! '<>INOUT[?IDENT]'
! '<IN>OUT[?IDENT]'
       Named pipes or file descriptors to communicate over.  The first
!      form, '<>', communicates over stdin and stdout.  The other forms
       allow you to specify a file descriptor or name a pipe.  A numeric
       value is interpreted as a file descriptor, otherwise named pipe is
       opened.  The second form specifies a bidirectional pipe and the
--- 34350,34362 ----
       contain a space).  An exception is if PROGRAM begins with @.  In
       that case PROGRAM (sans @) is looked for in the compiler's internal
       binary directory.  Thus the sample mapper-server can be specified
!      with ‘@g++-mapper-server’.
  
! ‘<>[?IDENT]’
! ‘<>INOUT[?IDENT]’
! ‘<IN>OUT[?IDENT]’
       Named pipes or file descriptors to communicate over.  The first
!      form, ‘<>’, communicates over stdin and stdout.  The other forms
       allow you to specify a file descriptor or name a pipe.  A numeric
       value is interpreted as a file descriptor, otherwise named pipe is
       opened.  The second form specifies a bidirectional pipe and the
*************** following forms:
*** 34358,34380 ****
       write stdout, and it can have unfortunate interactions with signal
       delivery from the terminal.
  
! 'FILE[?IDENT]'
       A mapping file consisting of space-separated module-name, filename
       pairs, one per line.  Only the mappings for the direct imports and
       any module export name need be provided.  If other mappings are
       provided, they override those stored in any imported CMI files.  A
       repository root may be specified in the mapping file by using
!      '$root' as the module name in the first active line.  Use of this
       option will disable any default module->CMI name mapping.
  
   As shown, an optional IDENT may suffix the first word of the option,
! indicated by a '?' prefix.  The value is used in the initial handshake
  with the module server, or to specify a prefix on mapping file lines.
  In the server case, the main source file name is used if no IDENT is
  specified.  In the file case, all non-blank lines are significant,
  unless a value is specified, in which case only lines beginning with
  IDENT are significant.  The IDENT must be separated by whitespace from
! the module name.  Be aware that '<', '>', '?', and '|' characters are
  often significant to the shell, and therefore may need quoting.
  
   The mapper is connected to or loaded lazily, when the first module
--- 34368,34390 ----
       write stdout, and it can have unfortunate interactions with signal
       delivery from the terminal.
  
! ‘FILE[?IDENT]’
       A mapping file consisting of space-separated module-name, filename
       pairs, one per line.  Only the mappings for the direct imports and
       any module export name need be provided.  If other mappings are
       provided, they override those stored in any imported CMI files.  A
       repository root may be specified in the mapping file by using
!      ‘$root’ as the module name in the first active line.  Use of this
       option will disable any default module->CMI name mapping.
  
   As shown, an optional IDENT may suffix the first word of the option,
! indicated by a ‘?’ prefix.  The value is used in the initial handshake
  with the module server, or to specify a prefix on mapping file lines.
  In the server case, the main source file name is used if no IDENT is
  specified.  In the file case, all non-blank lines are significant,
  unless a value is specified, in which case only lines beginning with
  IDENT are significant.  The IDENT must be separated by whitespace from
! the module name.  Be aware that ‘<’, ‘>’, ‘?’, and ‘|’ characters are
  often significant to the shell, and therefore may need quoting.
  
   The mapper is connected to or loaded lazily, when the first module
*************** the environment (such as working directo
*** 34390,34409 ****
  As it may parallelize builds, several compilations may connect to the
  same socket.
  
!  The default mapper generates CMI files in a 'gcm.cache' directory.  CMI
! files have a '.gcm' suffix.  The module unit name is used directly to
  provide the basename.  Header units construct a relative path using the
! underlying header file name.  If the path is already relative, a ','
! directory is prepended.  Internal '..' components are translated to
! ',,'.  No attempt is made to canonicalize these filenames beyond that
  done by the preprocessor's include search algorithm, as in general it is
  ambiguous when symbolic links are present.
  
   The mapper protocol was published as "A Module Mapper"
! <https://wg21.link/p1184>.  The implementation is provided by 'libcody',
  <https://github.com/urnathan/libcody>, which specifies the canonical
  protocol definition.  A proof of concept server implementation embedded
! in 'make' was described in "Make Me A Module",
  <https://wg21.link/p1602>.
  
  
--- 34400,34419 ----
  As it may parallelize builds, several compilations may connect to the
  same socket.
  
!  The default mapper generates CMI files in a ‘gcm.cache’ directory.  CMI
! files have a ‘.gcm’ suffix.  The module unit name is used directly to
  provide the basename.  Header units construct a relative path using the
! underlying header file name.  If the path is already relative, a ‘,’
! directory is prepended.  Internal ‘..’ components are translated to
! ‘,,’.  No attempt is made to canonicalize these filenames beyond that
  done by the preprocessor's include search algorithm, as in general it is
  ambiguous when symbolic links are present.
  
   The mapper protocol was published as "A Module Mapper"
! <https://wg21.link/p1184>.  The implementation is provided by ‘libcody’,
  <https://github.com/urnathan/libcody>, which specifies the canonical
  protocol definition.  A proof of concept server implementation embedded
! in ‘make’ was described in "Make Me A Module",
  <https://wg21.link/p1602>.
  
  
*************** just preprocessing, an error is emitted)
*** 34424,34443 ****
  requires preprocessor tokenization of the input stream to phase 4 (macro
  expansion).
  
!  Include translation converts '#include', '#include_next' and '#import'
! directives to internal 'import' declarations.  Whether a particular
  directive is translated is controlled by the module mapper.  Header unit
  names are canonicalized during preprocessing.
  
   Dependency information can be emitted for macro import, extending the
! functionality of '-MD' and '-MMD' options.  Detection of import
  declarations also requires phase 4 preprocessing, and thus requires full
  preprocessing (or compilation).
  
!  The '-M', '-MM' and '-E -fdirectives-only' options halt preprocessing
  before phase 4.
  
!  The '-save-temps' option uses '-fdirectives-only' for preprocessing,
  and preserve the macro definitions in the preprocessed output.  Usually
  you also want to use this option when explicitly preprocessing a
  header-unit, or consuming such preprocessed output:
--- 34434,34453 ----
  requires preprocessor tokenization of the input stream to phase 4 (macro
  expansion).
  
!  Include translation converts ‘#include’, ‘#include_next’ and ‘#import’
! directives to internal ‘import’ declarations.  Whether a particular
  directive is translated is controlled by the module mapper.  Header unit
  names are canonicalized during preprocessing.
  
   Dependency information can be emitted for macro import, extending the
! functionality of ‘-MD’ and ‘-MMD’ options.  Detection of import
  declarations also requires phase 4 preprocessing, and thus requires full
  preprocessing (or compilation).
  
!  The ‘-M’, ‘-MM’ and ‘-E -fdirectives-only’ options halt preprocessing
  before phase 4.
  
!  The ‘-save-temps’ option uses ‘-fdirectives-only’ for preprocessing,
  and preserve the macro definitions in the preprocessed output.  Usually
  you also want to use this option when explicitly preprocessing a
  header-unit, or consuming such preprocessed output:
*************** file), or complete new contents.  They d
*** 34467,34477 ****
  creation.  This is unlike object file writing, which may be observed by
  an external process.
  
!  CMIs are read in lazily, if the host OS provides 'mmap' functionality.
  Generally blocks are read when name lookup or template instantiation
! occurs.  To inhibit this, the '-fno-module-lazy' option may be used.
  
!  The '--param lazy-modules=N' parameter controls the limit on the number
  of concurrently open module files during lazy loading.  Should more
  modules be imported, an LRU algorithm is used to determine which files
  to close--until that file is needed again.  This limit may be exceeded
--- 34477,34487 ----
  creation.  This is unlike object file writing, which may be observed by
  an external process.
  
!  CMIs are read in lazily, if the host OS provides ‘mmap’ functionality.
  Generally blocks are read when name lookup or template instantiation
! occurs.  To inhibit this, the ‘-fno-module-lazy’ option may be used.
  
!  The ‘--param lazy-modules=N’ parameter controls the limit on the number
  of concurrently open module files during lazy loading.  Should more
  modules be imported, an LRU algorithm is used to determine which files
  to close--until that file is needed again.  This limit may be exceeded
*************** default, the limit is a few less than th
*** 34481,34490 ****
  hard limit, if that is determinable.(1)
  
   GCC CMIs use ELF32 as an architecture-neutral encapsulation mechanism.
! You may use 'readelf' to inspect them, although section contents are
! largely undecipherable.  There is a section named '.gnu.c++.README',
  which contains human-readable text.  Other than the first line, each
! line consists of 'TAG: value' tuples.
  
       > readelf -p.gnu.c++.README gcm.cache/foo.gcm
  
--- 34491,34500 ----
  hard limit, if that is determinable.(1)
  
   GCC CMIs use ELF32 as an architecture-neutral encapsulation mechanism.
! You may use ‘readelf’ to inspect them, although section contents are
! largely undecipherable.  There is a section named ‘.gnu.c++.README’,
  which contains human-readable text.  Other than the first line, each
! line consists of ‘TAG: value’ tuples.
  
       > readelf -p.gnu.c++.README gcm.cache/foo.gcm
  
*************** line consists of 'TAG: value' tuples.
*** 34503,34518 ****
  
   Amongst other things, this lists the source that was built, C++ dialect
  used and imports of the module.(2)  The timestamp is the same value as
! that provided by the '__DATE__' & '__TIME__' macros, and may be
! explicitly specified with the environment variable 'SOURCE_DATE_EPOCH'.
  For further details *note Environment Variables::.
  
   A set of related CMIs may be copied, provided the relative pathnames
  are preserved.
  
!  The '.gnu.c++.README' contents do not affect CMI integrity, and it may
  be removed or altered.  The section numbering of the sections whose
! names do not begin with '.gnu.c++.', or are not the string section is
  significant and must not be altered.
  
     ---------- Footnotes ----------
--- 34513,34528 ----
  
   Amongst other things, this lists the source that was built, C++ dialect
  used and imports of the module.(2)  The timestamp is the same value as
! that provided by the ‘__DATE__’ & ‘__TIME__’ macros, and may be
! explicitly specified with the environment variable ‘SOURCE_DATE_EPOCH’.
  For further details *note Environment Variables::.
  
   A set of related CMIs may be copied, provided the relative pathnames
  are preserved.
  
!  The ‘.gnu.c++.README’ contents do not affect CMI integrity, and it may
  be removed or altered.  The section numbering of the sections whose
! names do not begin with ‘.gnu.c++.’, or are not the string section is
  significant and must not be altered.
  
     ---------- Footnotes ----------
*************** File: gcc.info,  Node: Translation imple
*** 34570,34583 ****
  4.1 Translation
  ===============
  
!    * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
!      C99 and C11 5.1.1.3).'
  
       Diagnostics consist of all the output sent to stderr by GCC.
  
!    * 'Whether each nonempty sequence of white-space characters other
       than new-line is retained or replaced by one space character in
!      translation phase 3 (C90, C99 and C11 5.1.1.2).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
--- 34580,34593 ----
  4.1 Translation
  ===============
  
!    • ‘How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
!      C99 and C11 5.1.1.3).’
  
       Diagnostics consist of all the output sent to stderr by GCC.
  
!    • ‘Whether each nonempty sequence of white-space characters other
       than new-line is retained or replaced by one space character in
!      translation phase 3 (C90, C99 and C11 5.1.1.2).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
*************** File: gcc.info,  Node: Environment imple
*** 34591,34599 ****
  The behavior of most of these points are dependent on the implementation
  of the C library, and are not defined by GCC itself.
  
!    * 'The mapping between physical source file multibyte characters and
       the source character set in translation phase 1 (C90, C99 and C11
!      5.1.1.2).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
--- 34601,34609 ----
  The behavior of most of these points are dependent on the implementation
  of the C library, and are not defined by GCC itself.
  
!    • ‘The mapping between physical source file multibyte characters and
       the source character set in translation phase 1 (C90, C99 and C11
!      5.1.1.2).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
*************** File: gcc.info,  Node: Identifiers imple
*** 34604,34625 ****
  4.3 Identifiers
  ===============
  
!    * 'Which additional multibyte characters may appear in identifiers
       and their correspondence to universal character names (C99 and C11
!      6.4.2).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    * 'The number of significant initial characters in an identifier (C90
!      6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
  
       For internal names, all characters are significant.  For external
       names, the number of significant characters are defined by the
       linker; for almost all targets, all characters are significant.
  
!    * 'Whether case distinctions are significant in an identifier with
!      external linkage (C90 6.1.2).'
  
       This is a property of the linker.  C99 and C11 require that case
       distinctions are always significant in identifiers with external
--- 34614,34635 ----
  4.3 Identifiers
  ===============
  
!    • ‘Which additional multibyte characters may appear in identifiers
       and their correspondence to universal character names (C99 and C11
!      6.4.2).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    • ‘The number of significant initial characters in an identifier (C90
!      6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).’
  
       For internal names, all characters are significant.  For external
       names, the number of significant characters are defined by the
       linker; for almost all targets, all characters are significant.
  
!    • ‘Whether case distinctions are significant in an identifier with
!      external linkage (C90 6.1.2).’
  
       This is a property of the linker.  C99 and C11 require that case
       distinctions are always significant in identifiers with external
*************** File: gcc.info,  Node: Characters implem
*** 34631,34724 ****
  4.4 Characters
  ==============
  
!    * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
  
       Determined by ABI.
  
!    * 'The values of the members of the execution character set (C90, C99
!      and C11 5.2.1).'
  
       Determined by ABI.
  
!    * 'The unique value of the member of the execution character set
       produced for each of the standard alphabetic escape sequences (C90,
!      C99 and C11 5.2.2).'
  
       Determined by ABI.
  
!    * 'The value of a 'char' object into which has been stored any
       character other than a member of the basic execution character set
!      (C90 6.1.2.5, C99 and C11 6.2.5).'
  
       Determined by ABI.
  
!    * 'Which of 'signed char' or 'unsigned char' has the same range,
!      representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
!      6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
  
!      Determined by ABI.  The options '-funsigned-char' and
!      '-fsigned-char' change the default.  *Note Options Controlling C
       Dialect: C Dialect Options.
  
!    * 'The mapping of members of the source character set (in character
       constants and string literals) to members of the execution
       character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
!      5.1.1.2).'
  
       Determined by ABI.
  
!    * 'The value of an integer character constant containing more than
       one character or containing a character or escape sequence that
       does not map to a single-byte execution character (C90 6.1.3.4, C99
!      and C11 6.4.4.4).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    * 'The value of a wide character constant containing more than one
       multibyte character or a single multibyte character that maps to
       multiple members of the extended execution character set, or
       containing a multibyte character or escape sequence not represented
       in the extended execution character set (C90 6.1.3.4, C99 and C11
!      6.4.4.4).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    * 'The current locale used to convert a wide character constant
       consisting of a single multibyte character that maps to a member of
       the extended execution character set into a corresponding wide
!      character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    * 'Whether differently-prefixed wide string literal tokens can be
       concatenated and, if so, the treatment of the resulting multibyte
!      character sequence (C11 6.4.5).'
  
       Such tokens may not be concatenated.
  
!    * 'The current locale used to convert a wide string literal into
!      corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    * 'The value of a string literal containing a multibyte character or
       escape sequence not represented in the execution character set (C90
!      6.1.4, C99 and C11 6.4.5).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
!      the corresponding standard encoding macro ('__STDC_ISO_10646__',
!      '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
!      6.10.8.2).'
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
!      behavior.  'char16_t' and 'char32_t' literals are always encoded in
       UTF-16 and UTF-32 respectively.
  
  
--- 34641,34734 ----
  4.4 Characters
  ==============
  
!    • ‘The number of bits in a byte (C90 3.4, C99 and C11 3.6).’
  
       Determined by ABI.
  
!    • ‘The values of the members of the execution character set (C90, C99
!      and C11 5.2.1).’
  
       Determined by ABI.
  
!    • ‘The unique value of the member of the execution character set
       produced for each of the standard alphabetic escape sequences (C90,
!      C99 and C11 5.2.2).’
  
       Determined by ABI.
  
!    • ‘The value of a ‘char’ object into which has been stored any
       character other than a member of the basic execution character set
!      (C90 6.1.2.5, C99 and C11 6.2.5).’
  
       Determined by ABI.
  
!    • ‘Which of ‘signed char’ or ‘unsigned char’ has the same range,
!      representation, and behavior as "plain" ‘char’ (C90 6.1.2.5, C90
!      6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).’
  
!      Determined by ABI.  The options ‘-funsigned-char’ and
!      ‘-fsigned-char’ change the default.  *Note Options Controlling C
       Dialect: C Dialect Options.
  
!    • ‘The mapping of members of the source character set (in character
       constants and string literals) to members of the execution
       character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
!      5.1.1.2).’
  
       Determined by ABI.
  
!    • ‘The value of an integer character constant containing more than
       one character or containing a character or escape sequence that
       does not map to a single-byte execution character (C90 6.1.3.4, C99
!      and C11 6.4.4.4).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    • ‘The value of a wide character constant containing more than one
       multibyte character or a single multibyte character that maps to
       multiple members of the extended execution character set, or
       containing a multibyte character or escape sequence not represented
       in the extended execution character set (C90 6.1.3.4, C99 and C11
!      6.4.4.4).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    • ‘The current locale used to convert a wide character constant
       consisting of a single multibyte character that maps to a member of
       the extended execution character set into a corresponding wide
!      character code (C90 6.1.3.4, C99 and C11 6.4.4.4).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    • ‘Whether differently-prefixed wide string literal tokens can be
       concatenated and, if so, the treatment of the resulting multibyte
!      character sequence (C11 6.4.5).’
  
       Such tokens may not be concatenated.
  
!    • ‘The current locale used to convert a wide string literal into
!      corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    • ‘The value of a string literal containing a multibyte character or
       escape sequence not represented in the execution character set (C90
!      6.1.4, C99 and C11 6.4.5).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
       behavior.
  
!    • ‘The encoding of any of ‘wchar_t’, ‘char16_t’, and ‘char32_t’ where
!      the corresponding standard encoding macro (‘__STDC_ISO_10646__’,
!      ‘__STDC_UTF_16__’, or ‘__STDC_UTF_32__’) is not defined (C11
!      6.10.8.2).’
  
       *Note Implementation-defined behavior: (cpp)Implementation-defined
!      behavior.  ‘char16_t’ and ‘char32_t’ literals are always encoded in
       UTF-16 and UTF-32 respectively.
  
  
*************** File: gcc.info,  Node: Integers implemen
*** 34727,34772 ****
  4.5 Integers
  ============
  
!    * 'Any extended integer types that exist in the implementation (C99
!      and C11 6.2.5).'
  
       GCC does not support any extended integer types.
  
!    * 'Whether signed integer types are represented using sign and
       magnitude, two's complement, or one's complement, and whether the
       extraordinary value is a trap representation or an ordinary value
!      (C99 and C11 6.2.6.2).'
  
       GCC supports only two's complement integer types, and all bit
       patterns are ordinary values.
  
!    * 'The rank of any extended integer type relative to another extended
!      integer type with the same precision (C99 and C11 6.3.1.1).'
  
       GCC does not support any extended integer types.
  
!    * 'The result of, or the signal raised by, converting an integer to a
       signed integer type when the value cannot be represented in an
!      object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
  
       For conversion to a type of width N, the value is reduced modulo
       2^N to be within range of the type; no signal is raised.
  
!    * 'The results of some bitwise operations on signed integers (C90
!      6.3, C99 and C11 6.5).'
  
       Bitwise operators act on the representation of the value including
       both the sign and value bits, where the sign bit is considered
!      immediately above the highest-value value bit.  Signed '>>' acts on
       negative numbers by sign extension.
  
       As an extension to the C language, GCC does not use the latitude
!      given in C99 and C11 only to treat certain aspects of signed '<<'
!      as undefined.  However, '-fsanitize=shift' (and
!      '-fsanitize=undefined') will diagnose such cases.  They are also
       diagnosed where constant expressions are required.
  
!    * 'The sign of the remainder on integer division (C90 6.3.5).'
  
       GCC always follows the C99 and C11 requirement that the result of
       division is truncated towards zero.
--- 34737,34782 ----
  4.5 Integers
  ============
  
!    • ‘Any extended integer types that exist in the implementation (C99
!      and C11 6.2.5).’
  
       GCC does not support any extended integer types.
  
!    • ‘Whether signed integer types are represented using sign and
       magnitude, two's complement, or one's complement, and whether the
       extraordinary value is a trap representation or an ordinary value
!      (C99 and C11 6.2.6.2).’
  
       GCC supports only two's complement integer types, and all bit
       patterns are ordinary values.
  
!    • ‘The rank of any extended integer type relative to another extended
!      integer type with the same precision (C99 and C11 6.3.1.1).’
  
       GCC does not support any extended integer types.
  
!    • ‘The result of, or the signal raised by, converting an integer to a
       signed integer type when the value cannot be represented in an
!      object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).’
  
       For conversion to a type of width N, the value is reduced modulo
       2^N to be within range of the type; no signal is raised.
  
!    • ‘The results of some bitwise operations on signed integers (C90
!      6.3, C99 and C11 6.5).’
  
       Bitwise operators act on the representation of the value including
       both the sign and value bits, where the sign bit is considered
!      immediately above the highest-value value bit.  Signed ‘>>’ acts on
       negative numbers by sign extension.
  
       As an extension to the C language, GCC does not use the latitude
!      given in C99 and C11 only to treat certain aspects of signed ‘<<’
!      as undefined.  However, ‘-fsanitize=shift’ (and
!      ‘-fsanitize=undefined’) will diagnose such cases.  They are also
       diagnosed where constant expressions are required.
  
!    • ‘The sign of the remainder on integer division (C90 6.3.5).’
  
       GCC always follows the C99 and C11 requirement that the result of
       division is truncated towards zero.
*************** File: gcc.info,  Node: Floating point im
*** 34777,34855 ****
  4.6 Floating Point
  ==================
  
!    * 'The accuracy of the floating-point operations and of the library
!      functions in '<math.h>' and '<complex.h>' that return
!      floating-point results (C90, C99 and C11 5.2.4.2.2).'
  
       The accuracy is unknown.
  
!    * 'The rounding behaviors characterized by non-standard values of
!      'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
  
       GCC does not use such values.
  
!    * 'The evaluation methods characterized by non-standard negative
!      values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
  
       GCC does not use such values.
  
!    * 'The direction of rounding when an integer is converted to a
       floating-point number that cannot exactly represent the original
!      value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
  
       C99 Annex F is followed.
  
!    * 'The direction of rounding when a floating-point number is
       converted to a narrower floating-point number (C90 6.2.1.4, C99 and
!      C11 6.3.1.5).'
  
       C99 Annex F is followed.
  
!    * 'How the nearest representable value or the larger or smaller
       representable value immediately adjacent to the nearest
       representable value is chosen for certain floating constants (C90
!      6.1.3.1, C99 and C11 6.4.4.2).'
  
       C99 Annex F is followed.
  
!    * 'Whether and how floating expressions are contracted when not
!      disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
  
!      Expressions are currently only contracted if '-ffp-contract=fast',
!      '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
       subject to change.
  
!    * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
!      7.6.1).'
  
       This pragma is not implemented, but the default is to "off" unless
!      '-frounding-math' is used and '-fno-trapping-math' is not in which
       case it is "on".
  
!    * 'Additional floating-point exceptions, rounding modes,
       environments, and classifications, and their macro names (C99 and
!      C11 7.6, C99 and C11 7.12).'
  
       This is dependent on the implementation of the C library, and is
       not defined by GCC itself.
  
!    * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
!      7.12.2).'
  
       This pragma is not implemented.  Expressions are currently only
!      contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
!      or '-ffast-math' are used.  This is subject to change.
  
!    * 'Whether the "inexact" floating-point exception can be raised when
       the rounded result actually does equal the mathematical result in
!      an IEC 60559 conformant implementation (C99 F.9).'
  
       This is dependent on the implementation of the C library, and is
       not defined by GCC itself.
  
!    * 'Whether the "underflow" (and "inexact") floating-point exception
       can be raised when a result is tiny but not inexact in an IEC 60559
!      conformant implementation (C99 F.9).'
  
       This is dependent on the implementation of the C library, and is
       not defined by GCC itself.
--- 34787,34865 ----
  4.6 Floating Point
  ==================
  
!    • ‘The accuracy of the floating-point operations and of the library
!      functions in ‘<math.h>’ and ‘<complex.h>’ that return
!      floating-point results (C90, C99 and C11 5.2.4.2.2).’
  
       The accuracy is unknown.
  
!    • ‘The rounding behaviors characterized by non-standard values of
!      ‘FLT_ROUNDS’ (C90, C99 and C11 5.2.4.2.2).’
  
       GCC does not use such values.
  
!    • ‘The evaluation methods characterized by non-standard negative
!      values of ‘FLT_EVAL_METHOD’ (C99 and C11 5.2.4.2.2).’
  
       GCC does not use such values.
  
!    • ‘The direction of rounding when an integer is converted to a
       floating-point number that cannot exactly represent the original
!      value (C90 6.2.1.3, C99 and C11 6.3.1.4).’
  
       C99 Annex F is followed.
  
!    • ‘The direction of rounding when a floating-point number is
       converted to a narrower floating-point number (C90 6.2.1.4, C99 and
!      C11 6.3.1.5).’
  
       C99 Annex F is followed.
  
!    • ‘How the nearest representable value or the larger or smaller
       representable value immediately adjacent to the nearest
       representable value is chosen for certain floating constants (C90
!      6.1.3.1, C99 and C11 6.4.4.2).’
  
       C99 Annex F is followed.
  
!    • ‘Whether and how floating expressions are contracted when not
!      disallowed by the ‘FP_CONTRACT’ pragma (C99 and C11 6.5).’
  
!      Expressions are currently only contracted if ‘-ffp-contract=fast’,
!      ‘-funsafe-math-optimizations’ or ‘-ffast-math’ are used.  This is
       subject to change.
  
!    • ‘The default state for the ‘FENV_ACCESS’ pragma (C99 and C11
!      7.6.1).’
  
       This pragma is not implemented, but the default is to "off" unless
!      ‘-frounding-math’ is used and ‘-fno-trapping-math’ is not in which
       case it is "on".
  
!    • ‘Additional floating-point exceptions, rounding modes,
       environments, and classifications, and their macro names (C99 and
!      C11 7.6, C99 and C11 7.12).’
  
       This is dependent on the implementation of the C library, and is
       not defined by GCC itself.
  
!    • ‘The default state for the ‘FP_CONTRACT’ pragma (C99 and C11
!      7.12.2).’
  
       This pragma is not implemented.  Expressions are currently only
!      contracted if ‘-ffp-contract=fast’, ‘-funsafe-math-optimizations’
!      or ‘-ffast-math’ are used.  This is subject to change.
  
!    • ‘Whether the "inexact" floating-point exception can be raised when
       the rounded result actually does equal the mathematical result in
!      an IEC 60559 conformant implementation (C99 F.9).’
  
       This is dependent on the implementation of the C library, and is
       not defined by GCC itself.
  
!    • ‘Whether the "underflow" (and "inexact") floating-point exception
       can be raised when a result is tiny but not inexact in an IEC 60559
!      conformant implementation (C99 F.9).’
  
       This is dependent on the implementation of the C library, and is
       not defined by GCC itself.
*************** File: gcc.info,  Node: Arrays and pointe
*** 34860,34867 ****
  4.7 Arrays and Pointers
  =======================
  
!    * 'The result of converting a pointer to an integer or vice versa
!      (C90 6.3.4, C99 and C11 6.3.2.3).'
  
       A cast from pointer to integer discards most-significant bits if
       the pointer representation is larger than the integer type,
--- 34870,34877 ----
  4.7 Arrays and Pointers
  =======================
  
!    • ‘The result of converting a pointer to an integer or vice versa
!      (C90 6.3.4, C99 and C11 6.3.2.3).’
  
       A cast from pointer to integer discards most-significant bits if
       the pointer representation is larger than the integer type,
*************** File: gcc.info,  Node: Arrays and pointe
*** 34880,34887 ****
       integer arithmetic to avoid the undefined behavior of pointer
       arithmetic as proscribed in C99 and C11 6.5.6/8.
  
!    * 'The size of the result of subtracting two pointers to elements of
!      the same array (C90 6.3.6, C99 and C11 6.5.6).'
  
       The value is as specified in the standard and the type is
       determined by the ABI.
--- 34890,34897 ----
       integer arithmetic to avoid the undefined behavior of pointer
       arithmetic as proscribed in C99 and C11 6.5.6/8.
  
!    • ‘The size of the result of subtracting two pointers to elements of
!      the same array (C90 6.3.6, C99 and C11 6.5.6).’
  
       The value is as specified in the standard and the type is
       determined by the ABI.
*************** File: gcc.info,  Node: Arrays and pointe
*** 34889,34895 ****
     ---------- Footnotes ----------
  
     (1) Future versions of GCC may zero-extend, or use a target-defined
! 'ptr_extend' pattern.  Do not rely on sign extension.
  
  
  File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
--- 34899,34905 ----
     ---------- Footnotes ----------
  
     (1) Future versions of GCC may zero-extend, or use a target-defined
! ‘ptr_extend’ pattern.  Do not rely on sign extension.
  
  
  File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
*************** File: gcc.info,  Node: Hints implementat
*** 34897,34928 ****
  4.8 Hints
  =========
  
!    * 'The extent to which suggestions made by using the 'register'
       storage-class specifier are effective (C90 6.5.1, C99 and C11
!      6.7.1).'
  
!      The 'register' specifier affects code generation only in these
       ways:
  
!         * When used as part of the register variable extension, see
            *note Explicit Register Variables::.
  
!         * When '-O0' is in use, the compiler allocates distinct stack
!           memory for all variables that do not have the 'register'
!           storage-class specifier; if 'register' is specified, the
            variable may have a shorter lifespan than the code would
            indicate and may never be placed in memory.
  
!         * On some rare x86 targets, 'setjmp' doesn't save the registers
            in all circumstances.  In those cases, GCC doesn't allocate
!           any variables in registers unless they are marked 'register'.
  
!    * 'The extent to which suggestions made by using the inline function
!      specifier are effective (C99 and C11 6.7.4).'
  
!      GCC will not inline any functions if the '-fno-inline' option is
!      used or if '-O0' is used.  Otherwise, GCC may still be unable to
!      inline a function for many reasons; the '-Winline' option may be
       used to determine if a function has not been inlined and why not.
  
  
--- 34907,34938 ----
  4.8 Hints
  =========
  
!    • ‘The extent to which suggestions made by using the ‘register’
       storage-class specifier are effective (C90 6.5.1, C99 and C11
!      6.7.1).’
  
!      The ‘register’ specifier affects code generation only in these
       ways:
  
!         • When used as part of the register variable extension, see
            *note Explicit Register Variables::.
  
!         • When ‘-O0’ is in use, the compiler allocates distinct stack
!           memory for all variables that do not have the ‘register’
!           storage-class specifier; if ‘register’ is specified, the
            variable may have a shorter lifespan than the code would
            indicate and may never be placed in memory.
  
!         • On some rare x86 targets, ‘setjmp’ doesn't save the registers
            in all circumstances.  In those cases, GCC doesn't allocate
!           any variables in registers unless they are marked ‘register’.
  
!    • ‘The extent to which suggestions made by using the inline function
!      specifier are effective (C99 and C11 6.7.4).’
  
!      GCC will not inline any functions if the ‘-fno-inline’ option is
!      used or if ‘-O0’ is used.  Otherwise, GCC may still be unable to
!      inline a function for many reasons; the ‘-Winline’ option may be
       used to determine if a function has not been inlined and why not.
  
  
*************** File: gcc.info,  Node: Structures unions
*** 34931,34986 ****
  4.9 Structures, Unions, Enumerations, and Bit-Fields
  ====================================================
  
!    * 'A member of a union object is accessed using a member of a
!      different type (C90 6.3.2.3).'
  
       The relevant bytes of the representation of the object are treated
       as an object of the type used for the access.  *Note
       Type-punning::.  This may be a trap representation.
  
!    * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
!      bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
!      6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
  
!      By default it is treated as 'signed int' but this may be changed by
!      the '-funsigned-bitfields' option.
  
!    * 'Allowable bit-field types other than '_Bool', 'signed int', and
!      'unsigned int' (C99 and C11 6.7.2.1).'
  
!      Other integer types, such as 'long int', and enumerated types are
       permitted even in strictly conforming mode.
  
!    * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
  
       Atomic types are not permitted for bit-fields.
  
!    * 'Whether a bit-field can straddle a storage-unit boundary (C90
!      6.5.2.1, C99 and C11 6.7.2.1).'
  
       Determined by ABI.
  
!    * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
!      C99 and C11 6.7.2.1).'
  
       Determined by ABI.
  
!    * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
!      C99 and C11 6.7.2.1).'
  
       Determined by ABI.
  
!    * 'The integer type compatible with each enumerated type (C90
!      6.5.2.2, C99 and C11 6.7.2.2).'
  
!      Normally, the type is 'unsigned int' if there are no negative
!      values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
       specified, then if there are negative values it is the first of
!      'signed char', 'short' and 'int' that can represent all the values,
!      otherwise it is the first of 'unsigned char', 'unsigned short' and
!      'unsigned int' that can represent all the values.
  
!      On some targets, '-fshort-enums' is the default; this is determined
       by the ABI.
  
  
--- 34941,34996 ----
  4.9 Structures, Unions, Enumerations, and Bit-Fields
  ====================================================
  
!    • ‘A member of a union object is accessed using a member of a
!      different type (C90 6.3.2.3).’
  
       The relevant bytes of the representation of the object are treated
       as an object of the type used for the access.  *Note
       Type-punning::.  This may be a trap representation.
  
!    • ‘Whether a "plain" ‘int’ bit-field is treated as a ‘signed int’
!      bit-field or as an ‘unsigned int’ bit-field (C90 6.5.2, C90
!      6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).’
  
!      By default it is treated as ‘signed int’ but this may be changed by
!      the ‘-funsigned-bitfields’ option.
  
!    • ‘Allowable bit-field types other than ‘_Bool’, ‘signed int’, and
!      ‘unsigned int’ (C99 and C11 6.7.2.1).’
  
!      Other integer types, such as ‘long int’, and enumerated types are
       permitted even in strictly conforming mode.
  
!    • ‘Whether atomic types are permitted for bit-fields (C11 6.7.2.1).’
  
       Atomic types are not permitted for bit-fields.
  
!    • ‘Whether a bit-field can straddle a storage-unit boundary (C90
!      6.5.2.1, C99 and C11 6.7.2.1).’
  
       Determined by ABI.
  
!    • ‘The order of allocation of bit-fields within a unit (C90 6.5.2.1,
!      C99 and C11 6.7.2.1).’
  
       Determined by ABI.
  
!    • ‘The alignment of non-bit-field members of structures (C90 6.5.2.1,
!      C99 and C11 6.7.2.1).’
  
       Determined by ABI.
  
!    • ‘The integer type compatible with each enumerated type (C90
!      6.5.2.2, C99 and C11 6.7.2.2).’
  
!      Normally, the type is ‘unsigned int’ if there are no negative
!      values in the enumeration, otherwise ‘int’.  If ‘-fshort-enums’ is
       specified, then if there are negative values it is the first of
!      ‘signed char’, ‘short’ and ‘int’ that can represent all the values,
!      otherwise it is the first of ‘unsigned char’, ‘unsigned short’ and
!      ‘unsigned int’ that can represent all the values.
  
!      On some targets, ‘-fshort-enums’ is the default; this is determined
       by the ABI.
  
  
*************** File: gcc.info,  Node: Qualifiers implem
*** 34989,34996 ****
  4.10 Qualifiers
  ===============
  
!    * 'What constitutes an access to an object that has
!      volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
  
       Such an object is normally accessed by pointers and used for
       accessing hardware.  In most expressions, it is intuitively obvious
--- 34999,35006 ----
  4.10 Qualifiers
  ===============
  
!    • ‘What constitutes an access to an object that has
!      volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).’
  
       Such an object is normally accessed by pointers and used for
       accessing hardware.  In most expressions, it is intuitively obvious
*************** File: gcc.info,  Node: Qualifiers implem
*** 35003,35009 ****
       will cause a read of the volatile object pointed to by SRC and
       store the value into the volatile object pointed to by DST.  There
       is no guarantee that these reads and writes are atomic, especially
!      for objects larger than 'int'.
  
       However, if the volatile storage is not being modified, and the
       value of the volatile storage is not used, then the situation is
--- 35013,35019 ----
       will cause a read of the volatile object pointed to by SRC and
       store the value into the volatile object pointed to by DST.  There
       is no guarantee that these reads and writes are atomic, especially
!      for objects larger than ‘int’.
  
       However, if the volatile storage is not being modified, and the
       value of the volatile storage is not used, then the situation is
*************** File: gcc.info,  Node: Qualifiers implem
*** 35013,35019 ****
            *src;
  
       According to the C standard, such an expression is an rvalue whose
!      type is the unqualified version of its original type, i.e. 'int'.
       Whether GCC interprets this as a read of the volatile object being
       pointed to or only as a request to evaluate the expression for its
       side effects depends on this type.
--- 35023,35029 ----
            *src;
  
       According to the C standard, such an expression is an rvalue whose
!      type is the unqualified version of its original type, i.e. ‘int’.
       Whether GCC interprets this as a read of the volatile object being
       pointed to or only as a request to evaluate the expression for its
       side effects depends on this type.
*************** File: gcc.info,  Node: Qualifiers implem
*** 35025,35033 ****
       expression is only evaluated for its side effects.
  
       When an object of an aggregate type, with the same size and
!      alignment as a scalar type 'S', is the subject of a volatile access
       by an assignment expression or an atomic function, the access to it
!      is performed as if the object's declared type were 'volatile S'.
  
  
  File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
--- 35035,35043 ----
       expression is only evaluated for its side effects.
  
       When an object of an aggregate type, with the same size and
!      alignment as a scalar type ‘S’, is the subject of a volatile access
       by an assignment expression or an atomic function, the access to it
!      is performed as if the object's declared type were ‘volatile S’.
  
  
  File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
*************** File: gcc.info,  Node: Declarators imple
*** 35035,35042 ****
  4.11 Declarators
  ================
  
!    * 'The maximum number of declarators that may modify an arithmetic,
!      structure or union type (C90 6.5.4).'
  
       GCC is only limited by available memory.
  
--- 35045,35052 ----
  4.11 Declarators
  ================
  
!    • ‘The maximum number of declarators that may modify an arithmetic,
!      structure or union type (C90 6.5.4).’
  
       GCC is only limited by available memory.
  
*************** File: gcc.info,  Node: Statements implem
*** 35046,35053 ****
  4.12 Statements
  ===============
  
!    * 'The maximum number of 'case' values in a 'switch' statement (C90
!      6.6.4.2).'
  
       GCC is only limited by available memory.
  
--- 35056,35063 ----
  4.12 Statements
  ===============
  
!    • ‘The maximum number of ‘case’ values in a ‘switch’ statement (C90
!      6.6.4.2).’
  
       GCC is only limited by available memory.
  
*************** File: gcc.info,  Node: Preprocessing dir
*** 35061,35109 ****
  behavior, for details of these aspects of implementation-defined
  behavior.
  
!    * 'The locations within '#pragma' directives where header name
!      preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
  
!    * 'How sequences in both forms of header names are mapped to headers
!      or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
  
!    * 'Whether the value of a character constant in a constant expression
       that controls conditional inclusion matches the value of the same
       character constant in the execution character set (C90 6.8.1, C99
!      and C11 6.10.1).'
  
!    * 'Whether the value of a single-character character constant in a
       constant expression that controls conditional inclusion may have a
!      negative value (C90 6.8.1, C99 and C11 6.10.1).'
  
!    * 'The places that are searched for an included '<>' delimited
       header, and how the places are specified or the header is
!      identified (C90 6.8.2, C99 and C11 6.10.2).'
  
!    * 'How the named source file is searched for in an included '""'
!      delimited header (C90 6.8.2, C99 and C11 6.10.2).'
  
!    * 'The method by which preprocessing tokens (possibly resulting from
!      macro expansion) in a '#include' directive are combined into a
!      header name (C90 6.8.2, C99 and C11 6.10.2).'
  
!    * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
!      C11 6.10.2).'
  
!    * 'Whether the '#' operator inserts a '\' character before the '\'
       character that begins a universal character name in a character
!      constant or string literal (C99 and C11 6.10.3.2).'
  
!    * 'The behavior on each recognized non-'STDC #pragma' directive (C90
!      6.8.6, C99 and C11 6.10.6).'
  
       *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
       on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
       details of target-specific pragmas.
  
!    * 'The definitions for '__DATE__' and '__TIME__' when respectively,
       the date and time of translation are not available (C90 6.8.8, C99
!      6.10.8, C11 6.10.8.1).'
  
  
  File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
--- 35071,35119 ----
  behavior, for details of these aspects of implementation-defined
  behavior.
  
!    • ‘The locations within ‘#pragma’ directives where header name
!      preprocessing tokens are recognized (C11 6.4, C11 6.4.7).’
  
!    • ‘How sequences in both forms of header names are mapped to headers
!      or external source file names (C90 6.1.7, C99 and C11 6.4.7).’
  
!    • ‘Whether the value of a character constant in a constant expression
       that controls conditional inclusion matches the value of the same
       character constant in the execution character set (C90 6.8.1, C99
!      and C11 6.10.1).’
  
!    • ‘Whether the value of a single-character character constant in a
       constant expression that controls conditional inclusion may have a
!      negative value (C90 6.8.1, C99 and C11 6.10.1).’
  
!    • ‘The places that are searched for an included ‘<>’ delimited
       header, and how the places are specified or the header is
!      identified (C90 6.8.2, C99 and C11 6.10.2).’
  
!    • ‘How the named source file is searched for in an included ‘""’
!      delimited header (C90 6.8.2, C99 and C11 6.10.2).’
  
!    • ‘The method by which preprocessing tokens (possibly resulting from
!      macro expansion) in a ‘#include’ directive are combined into a
!      header name (C90 6.8.2, C99 and C11 6.10.2).’
  
!    • ‘The nesting limit for ‘#include’ processing (C90 6.8.2, C99 and
!      C11 6.10.2).’
  
!    • ‘Whether the ‘#’ operator inserts a ‘\’ character before the ‘\’
       character that begins a universal character name in a character
!      constant or string literal (C99 and C11 6.10.3.2).’
  
!    • ‘The behavior on each recognized non-‘STDC #pragma’ directive (C90
!      6.8.6, C99 and C11 6.10.6).’
  
       *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
       on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
       details of target-specific pragmas.
  
!    • ‘The definitions for ‘__DATE__’ and ‘__TIME__’ when respectively,
       the date and time of translation are not available (C90 6.8.8, C99
!      6.10.8, C11 6.10.8.1).’
  
  
  File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
*************** File: gcc.info,  Node: Library functions
*** 35114,35124 ****
  The behavior of most of these points are dependent on the implementation
  of the C library, and are not defined by GCC itself.
  
!    * 'The null pointer constant to which the macro 'NULL' expands (C90
!      7.1.6, C99 7.17, C11 7.19).'
  
!      In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
!      provide the other headers which define 'NULL' and some library
       implementations may use other definitions in those headers.
  
  
--- 35124,35134 ----
  The behavior of most of these points are dependent on the implementation
  of the C library, and are not defined by GCC itself.
  
!    • ‘The null pointer constant to which the macro ‘NULL’ expands (C90
!      7.1.6, C99 7.17, C11 7.19).’
  
!      In ‘<stddef.h>’, ‘NULL’ expands to ‘((void *)0)’.  GCC does not
!      provide the other headers which define ‘NULL’ and some library
       implementations may use other definitions in those headers.
  
  
*************** File: gcc.info,  Node: Architecture impl
*** 35127,35166 ****
  4.15 Architecture
  =================
  
!    * 'The values or expressions assigned to the macros specified in the
!      headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
!      C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
  
       Determined by ABI.
  
!    * 'The result of attempting to indirectly access an object with
       automatic or thread storage duration from a thread other than the
!      one with which it is associated (C11 6.2.4).'
  
       Such accesses are supported, subject to the same requirements for
       synchronization for concurrent accesses as for concurrent accesses
       to any object.
  
!    * 'The number, order, and encoding of bytes in any object (when not
       explicitly specified in this International Standard) (C99 and C11
!      6.2.6.1).'
  
       Determined by ABI.
  
!    * 'Whether any extended alignments are supported and the contexts in
!      which they are supported (C11 6.2.8).'
  
       Extended alignments up to 2^{28} (bytes) are supported for objects
       of automatic storage duration.  Alignments supported for objects of
       static and thread storage duration are determined by the ABI.
  
!    * 'Valid alignment values other than those returned by an _Alignof
!      expression for fundamental types, if any (C11 6.2.8).'
  
       Valid alignments are powers of 2 up to and including 2^{28}.
  
!    * 'The value of the result of the 'sizeof' and '_Alignof' operators
!      (C90 6.3.3.4, C99 and C11 6.5.3.4).'
  
       Determined by ABI.
  
--- 35137,35176 ----
  4.15 Architecture
  =================
  
!    • ‘The values or expressions assigned to the macros specified in the
!      headers ‘<float.h>’, ‘<limits.h>’, and ‘<stdint.h>’ (C90, C99 and
!      C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).’
  
       Determined by ABI.
  
!    • ‘The result of attempting to indirectly access an object with
       automatic or thread storage duration from a thread other than the
!      one with which it is associated (C11 6.2.4).’
  
       Such accesses are supported, subject to the same requirements for
       synchronization for concurrent accesses as for concurrent accesses
       to any object.
  
!    • ‘The number, order, and encoding of bytes in any object (when not
       explicitly specified in this International Standard) (C99 and C11
!      6.2.6.1).’
  
       Determined by ABI.
  
!    • ‘Whether any extended alignments are supported and the contexts in
!      which they are supported (C11 6.2.8).’
  
       Extended alignments up to 2^{28} (bytes) are supported for objects
       of automatic storage duration.  Alignments supported for objects of
       static and thread storage duration are determined by the ABI.
  
!    • ‘Valid alignment values other than those returned by an _Alignof
!      expression for fundamental types, if any (C11 6.2.8).’
  
       Valid alignments are powers of 2 up to and including 2^{28}.
  
!    • ‘The value of the result of the ‘sizeof’ and ‘_Alignof’ operators
!      (C90 6.3.3.4, C99 and C11 6.5.3.4).’
  
       Determined by ABI.
  
*************** File: gcc.info,  Node: Conditionally-sup
*** 35208,35219 ****
  5.1 Conditionally-Supported Behavior
  ====================================
  
! 'Each implementation shall include documentation that identifies all
  conditionally-supported constructs that it does not support (C++0x
! 1.4).'
  
!    * 'Whether an argument of class type with a non-trivial copy
!      constructor or destructor can be passed to ... (C++0x 5.2.2).'
  
       Such argument passing is supported, using the same
       pass-by-invisible-reference approach used for normal function
--- 35218,35229 ----
  5.1 Conditionally-Supported Behavior
  ====================================
  
! ‘Each implementation shall include documentation that identifies all
  conditionally-supported constructs that it does not support (C++0x
! 1.4).’
  
!    • ‘Whether an argument of class type with a non-trivial copy
!      constructor or destructor can be passed to ... (C++0x 5.2.2).’
  
       Such argument passing is supported, using the same
       pass-by-invisible-reference approach used for normal function
*************** File: gcc.info,  Node: Exception handlin
*** 35225,35233 ****
  5.2 Exception Handling
  ======================
  
!    * 'In the situation where no matching handler is found, it is
       implementation-defined whether or not the stack is unwound before
!      std::terminate() is called (C++98 15.5.1).'
  
       The stack is not unwound before std::terminate is called.
  
--- 35235,35243 ----
  5.2 Exception Handling
  ======================
  
!    • ‘In the situation where no matching handler is found, it is
       implementation-defined whether or not the stack is unwound before
!      std::terminate() is called (C++98 15.5.1).’
  
       The stack is not unwound before std::terminate is called.
  
*************** File: gcc.info,  Node: C Extensions,  Ne
*** 35238,35246 ****
  *************************************
  
  GNU C provides several language features not found in ISO standard C.
! (The '-pedantic' option directs GCC to print a warning message if any of
  these features is used.)  To test for the availability of these features
! in conditional compilation, check for a predefined macro '__GNUC__',
  which is always defined under GCC.
  
   These extensions are available in C and Objective-C.  Most of them are
--- 35248,35256 ----
  *************************************
  
  GNU C provides several language features not found in ISO standard C.
! (The ‘-pedantic’ option directs GCC to print a warning message if any of
  these features is used.)  To test for the availability of these features
! in conditional compilation, check for a predefined macro ‘__GNUC__’,
  which is always defined under GCC.
  
   These extensions are available in C and Objective-C.  Most of them are
*************** extensions, accepted by GCC in C90 mode
*** 35258,35267 ****
  * Nested Functions::    Nested function in GNU C.
  * Nonlocal Gotos::      Nonlocal gotos.
  * Constructing Calls::  Dispatching a call to another function.
! * Typeof::              'typeof': referring to the type of an expression.
! * Conditionals::        Omitting the middle operand of a '?:' expression.
! * __int128::		128-bit integers--'__int128'.
! * Long Long::           Double-word integers--'long long int'.
  * Complex::             Data types for complex numbers.
  * Floating Types::      Additional Floating Types.
  * Half-Precision::      Half-Precision Floating Point.
--- 35268,35277 ----
  * Nested Functions::    Nested function in GNU C.
  * Nonlocal Gotos::      Nonlocal gotos.
  * Constructing Calls::  Dispatching a call to another function.
! * Typeof::              ‘typeof’: referring to the type of an expression.
! * Conditionals::        Omitting the middle operand of a ‘?:’ expression.
! * __int128::		128-bit integers--‘__int128’.
! * Long Long::           Double-word integers--‘long long int’.
  * Complex::             Data types for complex numbers.
  * Floating Types::      Additional Floating Types.
  * Half-Precision::      Half-Precision Floating Point.
*************** extensions, accepted by GCC in C90 mode
*** 35275,35281 ****
  * Variadic Macros::     Macros with a variable number of arguments.
  * Escaped Newlines::    Slightly looser rules for escaped newlines.
  * Subscripting::        Any array can be subscripted, even if not an lvalue.
! * Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
  * Variadic Pointer Args::  Pointer arguments to variadic functions.
  * Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
  * Initializers::        Non-constant initializers.
--- 35285,35291 ----
  * Variadic Macros::     Macros with a variable number of arguments.
  * Escaped Newlines::    Slightly looser rules for escaped newlines.
  * Subscripting::        Any array can be subscripted, even if not an lvalue.
! * Pointer Arith::       Arithmetic on ‘void’-pointers and function pointers.
  * Variadic Pointer Args::  Pointer arguments to variadic functions.
  * Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
  * Initializers::        Non-constant initializers.
*************** extensions, accepted by GCC in C90 mode
*** 35296,35315 ****
  * Function Prototypes:: Prototype declarations and old-style definitions.
  * C++ Comments::        C++ comments are recognized.
  * Dollar Signs::        Dollar sign is allowed in identifiers.
! * Character Escapes::   '\e' stands for the character <ESC>.
  * Alignment::           Determining the alignment of a function, type or variable.
  * Inline::              Defining inline functions (as fast as macros).
  * Const and Volatile Functions :: GCC interprets these specially in C.
  * Volatiles::           What constitutes an access to a volatile object.
  * Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
! * Alternate Keywords::  '__const__', '__asm__', etc., for header files.
! * Incomplete Enums::    'enum foo;', with details to follow.
  * Function Names::      Printable strings which are the name of the current
                          function.
  * Return Address::      Getting the return or frame address of a function.
  * Stack Scrubbing::     Stack scrubbing internal interfaces.
  * Vector Extensions::   Using vector instructions through built-in functions.
! * Offsetof::            Special syntax for implementing 'offsetof'.
  * __sync Builtins::     Legacy built-in functions for atomic memory access.
  * __atomic Builtins::   Atomic built-in functions with memory model.
  * Integer Overflow Builtins:: Built-in functions to perform arithmetics and
--- 35306,35325 ----
  * Function Prototypes:: Prototype declarations and old-style definitions.
  * C++ Comments::        C++ comments are recognized.
  * Dollar Signs::        Dollar sign is allowed in identifiers.
! * Character Escapes::   ‘\e’ stands for the character <ESC>.
  * Alignment::           Determining the alignment of a function, type or variable.
  * Inline::              Defining inline functions (as fast as macros).
  * Const and Volatile Functions :: GCC interprets these specially in C.
  * Volatiles::           What constitutes an access to a volatile object.
  * Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
! * Alternate Keywords::  ‘__const__’, ‘__asm__’, etc., for header files.
! * Incomplete Enums::    ‘enum foo;’, with details to follow.
  * Function Names::      Printable strings which are the name of the current
                          function.
  * Return Address::      Getting the return or frame address of a function.
  * Stack Scrubbing::     Stack scrubbing internal interfaces.
  * Vector Extensions::   Using vector instructions through built-in functions.
! * Offsetof::            Special syntax for implementing ‘offsetof’.
  * __sync Builtins::     Legacy built-in functions for atomic memory access.
  * __atomic Builtins::   Atomic built-in functions with memory model.
  * Integer Overflow Builtins:: Built-in functions to perform arithmetics and
*************** extensions, accepted by GCC in C90 mode
*** 35323,35329 ****
  * Pragmas::             Pragmas accepted by GCC.
  * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
  * Thread-Local::        Per-thread variables.
! * Binary constants::    Binary constants using the '0b' prefix.
  
  
  File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
--- 35333,35339 ----
  * Pragmas::             Pragmas accepted by GCC.
  * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
  * Thread-Local::        Per-thread variables.
! * Binary constants::    Binary constants using the ‘0b’ prefix.
  
  
  File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
*************** example:
*** 35345,35356 ****
          z; })
  
  is a valid (though slightly more complex than necessary) expression for
! the absolute value of 'foo ()'.
  
   The last thing in the compound statement should be an expression
  followed by a semicolon; the value of this subexpression serves as the
  value of the entire construct.  (If you use some other kind of statement
! last within the braces, the construct has type 'void', and thus
  effectively no value.)
  
   This feature is especially useful in making macro definitions "safe"
--- 35355,35366 ----
          z; })
  
  is a valid (though slightly more complex than necessary) expression for
! the absolute value of ‘foo ()’.
  
   The last thing in the compound statement should be an expression
  followed by a semicolon; the value of this subexpression serves as the
  value of the entire construct.  (If you use some other kind of statement
! last within the braces, the construct has type ‘void’, and thus
  effectively no value.)
  
   This feature is especially useful in making macro definitions "safe"
*************** follows:
*** 35362,35375 ****
  
  But this definition computes either A or B twice, with bad results if
  the operand has side effects.  In GNU C, if you know the type of the
! operands (here taken as 'int'), you can avoid this problem by defining
  the macro as follows:
  
       #define maxint(a,b) \
         ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
  
!  Note that introducing variable declarations (as we do in 'maxint') can
! cause variable shadowing, so while this example using the 'max' macro
  produces correct results:
       int _a = 1, _b = 2, c;
       c = max (_a, _b);
--- 35372,35385 ----
  
  But this definition computes either A or B twice, with bad results if
  the operand has side effects.  In GNU C, if you know the type of the
! operands (here taken as ‘int’), you can avoid this problem by defining
  the macro as follows:
  
       #define maxint(a,b) \
         ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
  
!  Note that introducing variable declarations (as we do in ‘maxint’) can
! cause variable shadowing, so while this example using the ‘max’ macro
  produces correct results:
       int _a = 1, _b = 2, c;
       c = max (_a, _b);
*************** the value of an enumeration constant, th
*** 35388,35406 ****
  initial value of a static variable.
  
   If you don't know the type of the operand, you can still do this, but
! you must use 'typeof' or '__auto_type' (*note Typeof::).
  
   In G++, the result value of a statement expression undergoes array and
  function pointer decay, and is returned by value to the enclosing
! expression.  For instance, if 'A' is a class, then
  
               A a;
  
               ({a;}).Foo ()
  
! constructs a temporary 'A' object to hold the result of the statement
! expression, and that is used to invoke 'Foo'.  Therefore the 'this'
! pointer observed by 'Foo' is not the address of 'a'.
  
   In a statement expression, any temporaries created within a statement
  are destroyed at that statement's end.  This makes statement expressions
--- 35398,35416 ----
  initial value of a static variable.
  
   If you don't know the type of the operand, you can still do this, but
! you must use ‘typeof’ or ‘__auto_type’ (*note Typeof::).
  
   In G++, the result value of a statement expression undergoes array and
  function pointer decay, and is returned by value to the enclosing
! expression.  For instance, if ‘A’ is a class, then
  
               A a;
  
               ({a;}).Foo ()
  
! constructs a temporary ‘A’ object to hold the result of the statement
! expression, and that is used to invoke ‘Foo’.  Therefore the ‘this’
! pointer observed by ‘Foo’ is not the address of ‘a’.
  
   In a statement expression, any temporaries created within a statement
  are destroyed at that statement's end.  This makes statement expressions
*************** expression.  For instance,
*** 35419,35427 ****
         function (X ());
       }
  
! has different places where temporaries are destroyed.  For the 'macro'
! case, the temporary 'X' is destroyed just after the initialization of
! 'b'.  In the 'function' case that temporary is destroyed when the
  function returns.
  
   These considerations mean that it is probably a bad idea to use
--- 35429,35437 ----
         function (X ());
       }
  
! has different places where temporaries are destroyed.  For the ‘macro’
! case, the temporary ‘X’ is destroyed just after the initialization of
! ‘b’.  In the ‘function’ case that temporary is destroyed when the
  function returns.
  
   These considerations mean that it is probably a bad idea to use
*************** work with C++.  (Note that some versions
*** 35430,35449 ****
  header files using statement expressions that lead to precisely this
  bug.)
  
!  Jumping into a statement expression with 'goto' or using a 'switch'
! statement outside the statement expression with a 'case' or 'default'
  label inside the statement expression is not permitted.  Jumping into a
! statement expression with a computed 'goto' (*note Labels as Values::)
  has undefined behavior.  Jumping out of a statement expression is
  permitted, but if the statement expression is part of a larger
  expression then it is unspecified which other subexpressions of that
  expression have been evaluated except where the language definition
  requires certain subexpressions to be evaluated before or after the
! statement expression.  A 'break' or 'continue' statement inside of a
! statement expression used in 'while', 'do' or 'for' loop or 'switch'
! statement condition or 'for' statement init or increment expressions
! jumps to an outer loop or 'switch' statement if any (otherwise it is an
! error), rather than to the loop or 'switch' statement in whose condition
  or init or increment expression it appears.  In any case, as with a
  function call, the evaluation of a statement expression is not
  interleaved with the evaluation of other parts of the containing
--- 35440,35459 ----
  header files using statement expressions that lead to precisely this
  bug.)
  
!  Jumping into a statement expression with ‘goto’ or using a ‘switch’
! statement outside the statement expression with a ‘case’ or ‘default’
  label inside the statement expression is not permitted.  Jumping into a
! statement expression with a computed ‘goto’ (*note Labels as Values::)
  has undefined behavior.  Jumping out of a statement expression is
  permitted, but if the statement expression is part of a larger
  expression then it is unspecified which other subexpressions of that
  expression have been evaluated except where the language definition
  requires certain subexpressions to be evaluated before or after the
! statement expression.  A ‘break’ or ‘continue’ statement inside of a
! statement expression used in ‘while’, ‘do’ or ‘for’ loop or ‘switch’
! statement condition or ‘for’ statement init or increment expressions
! jumps to an outer loop or ‘switch’ statement if any (otherwise it is an
! error), rather than to the loop or ‘switch’ statement in whose condition
  or init or increment expression it appears.  In any case, as with a
  function call, the evaluation of a statement expression is not
  interleaved with the evaluation of other parts of the containing
*************** expression.  For example,
*** 35451,35459 ****
  
         foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
  
! calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
! 'bar2'.  If 'bar2' is called, it is called after 'foo' and before
! 'bar1'.
  
  
  File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
--- 35461,35469 ----
  
         foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
  
! calls ‘foo’ and ‘bar1’ and does not call ‘baz’ but may or may not call
! ‘bar2’.  If ‘bar2’ is called, it is called after ‘foo’ and before
! ‘bar1’.
  
  
  File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
*************** File: gcc.info,  Node: Local Labels,  Ne
*** 35461,35469 ****
  6.2 Locally Declared Labels
  ===========================
  
! GCC allows you to declare "local labels" in any nested block scope.  A
  local label is just like an ordinary label, but you can only reference
! it (with a 'goto' statement, or by taking its address) within the block
  in which it is declared.
  
   A local label declaration looks like this:
--- 35471,35479 ----
  6.2 Locally Declared Labels
  ===========================
  
! GCC allows you to declare “local labels” in any nested block scope.  A
  local label is just like an ordinary label, but you can only reference
! it (with a ‘goto’ statement, or by taking its address) within the block
  in which it is declared.
  
   A local label declaration looks like this:
*************** or
*** 35478,35488 ****
  before any ordinary declarations or statements.
  
   The label declaration defines the label _name_, but does not define the
! label itself.  You must do this in the usual way, with 'LABEL:', within
  the statements of the statement expression.
  
   The local label feature is useful for complex macros.  If a macro
! contains nested loops, a 'goto' can be useful for breaking out of them.
  However, an ordinary label whose scope is the whole function cannot be
  used: if the macro can be expanded several times in one function, the
  label is multiply defined in that function.  A local label avoids this
--- 35488,35498 ----
  before any ordinary declarations or statements.
  
   The label declaration defines the label _name_, but does not define the
! label itself.  You must do this in the usual way, with ‘LABEL:’, within
  the statements of the statement expression.
  
   The local label feature is useful for complex macros.  If a macro
! contains nested loops, a ‘goto’ can be useful for breaking out of them.
  However, an ordinary label whose scope is the whole function cannot be
  used: if the macro can be expanded several times in one function, the
  label is multiply defined in that function.  A local label avoids this
*************** File: gcc.info,  Node: Labels as Values,
*** 35532,35539 ****
  ====================
  
  You can get the address of a label defined in the current function (or a
! containing function) with the unary operator '&&'.  The value has type
! 'void *'.  This value is a constant and can be used wherever a constant
  of that type is valid.  For example:
  
       void *ptr;
--- 35542,35549 ----
  ====================
  
  You can get the address of a label defined in the current function (or a
! containing function) with the unary operator ‘&&’.  The value has type
! ‘void *’.  This value is a constant and can be used wherever a constant
  of that type is valid.  For example:
  
       void *ptr;
*************** of that type is valid.  For example:
*** 35541,35551 ****
       ptr = &&foo;
  
   To use these values, you need to be able to jump to one.  This is done
! with the computed goto statement(1), 'goto *EXP;'.  For example,
  
       goto *ptr;
  
! Any expression of type 'void *' is allowed.
  
   One way of using these constants is in initializing a static array that
  serves as a jump table:
--- 35551,35561 ----
       ptr = &&foo;
  
   To use these values, you need to be able to jump to one.  This is done
! with the computed goto statement(1), ‘goto *EXP;’.  For example,
  
       goto *ptr;
  
! Any expression of type ‘void *’ is allowed.
  
   One way of using these constants is in initializing a static array that
  serves as a jump table:
*************** Note that this does not check whether th
*** 35560,35567 ****
  indexing in C never does that.
  
   Such an array of label values serves a purpose much like that of the
! 'switch' statement.  The 'switch' statement is cleaner, so use that
! rather than an array unless the problem does not fit a 'switch'
  statement very well.
  
   Another use of label values is in an interpreter for threaded code.
--- 35570,35577 ----
  indexing in C never does that.
  
   Such an array of label values serves a purpose much like that of the
! ‘switch’ statement.  The ‘switch’ statement is cleaner, so use that
! rather than an array unless the problem does not fit a ‘switch’
  statement very well.
  
   Another use of label values is in an interpreter for threaded code.
*************** allows the data to be read-only.  This a
*** 35585,35594 ****
  differences is not supported for the AVR target, please use the first
  approach for AVR programs.
  
!  The '&&foo' expressions for the same label might have different values
  if the containing function is inlined or cloned.  If a program relies on
! them being always the same, '__attribute__((__noinline__,__noclone__))'
! should be used to prevent inlining and cloning.  If '&&foo' is used in a
  static variable initializer, inlining and cloning is forbidden.
  
   Unlike a normal goto, in GNU C++ a computed goto will not call
--- 35595,35604 ----
  differences is not supported for the AVR target, please use the first
  approach for AVR programs.
  
!  The ‘&&foo’ expressions for the same label might have different values
  if the containing function is inlined or cloned.  If a program relies on
! them being always the same, ‘__attribute__((__noinline__,__noclone__))’
! should be used to prevent inlining and cloning.  If ‘&&foo’ is used in a
  static variable initializer, inlining and cloning is forbidden.
  
   Unlike a normal goto, in GNU C++ a computed goto will not call
*************** File: gcc.info,  Node: Nested Functions,
*** 35606,35617 ****
  6.4 Nested Functions
  ====================
  
! A "nested function" is a function defined inside another function.
  Nested functions are supported as an extension in GNU C, but are not
  supported by GNU C++.
  
   The nested function's name is local to the block where it is defined.
! For example, here we define a nested function named 'square', and call
  it twice:
  
       foo (double a, double b)
--- 35616,35627 ----
  6.4 Nested Functions
  ====================
  
! A “nested function” is a function defined inside another function.
  Nested functions are supported as an extension in GNU C, but are not
  supported by GNU C++.
  
   The nested function's name is local to the block where it is defined.
! For example, here we define a nested function named ‘square’, and call
  it twice:
  
       foo (double a, double b)
*************** it twice:
*** 35623,35630 ****
  
   The nested function can access all the variables of the containing
  function that are visible at the point of its definition.  This is
! called "lexical scoping".  For example, here we show a nested function
! which uses an inherited variable named 'offset':
  
       bar (int *array, int offset, int size)
       {
--- 35633,35640 ----
  
   The nested function can access all the variables of the containing
  function that are visible at the point of its definition.  This is
! called “lexical scoping”.  For example, here we show a nested function
! which uses an inherited variable named ‘offset’:
  
       bar (int *array, int offset, int size)
       {
*************** function:
*** 35652,35661 ****
         intermediate (store, size);
       }
  
!  Here, the function 'intermediate' receives the address of 'store' as an
! argument.  If 'intermediate' calls 'store', the arguments given to
! 'store' are used to store into 'array'.  But this technique works only
! so long as the containing function ('hack', in this example) does not
  exit.
  
   If you try to call the nested function through its address after the
--- 35662,35671 ----
         intermediate (store, size);
       }
  
!  Here, the function ‘intermediate’ receives the address of ‘store’ as an
! argument.  If ‘intermediate’ calls ‘store’, the arguments given to
! ‘store’ are used to store into ‘array’.  But this technique works only
! so long as the containing function (‘hack’, in this example) does not
  exit.
  
   If you try to call the nested function through its address after the
*************** wise to take the risk.  If, however, the
*** 35666,35679 ****
  to anything that has gone out of scope, you should be safe.
  
   GCC implements taking the address of a nested function using a
! technique called "trampolines".  This technique was described in
! 'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
  Proceedings, October 17-21, 1988).
  
   A nested function can jump to a label inherited from a containing
  function, provided the label is explicitly declared in the containing
  function (*note Local Labels::).  Such a jump returns instantly to the
! containing function, exiting the nested function that did the 'goto' and
  any intermediate functions as well.  Here is an example:
  
       bar (int *array, int offset, int size)
--- 35676,35689 ----
  to anything that has gone out of scope, you should be safe.
  
   GCC implements taking the address of a nested function using a
! technique called “trampolines”.  This technique was described in
! ‘Lexical Closures for C++’ (Thomas M. Breuel, USENIX C++ Conference
  Proceedings, October 17-21, 1988).
  
   A nested function can jump to a label inherited from a containing
  function, provided the label is explicitly declared in the containing
  function (*note Local Labels::).  Such a jump returns instantly to the
! containing function, exiting the nested function that did the ‘goto’ and
  any intermediate functions as well.  Here is an example:
  
       bar (int *array, int offset, int size)
*************** any intermediate functions as well.  Her
*** 35692,35706 ****
         /* ... */
         return 0;
  
!       /* Control comes here from 'access'
           if it detects an error.  */
        failure:
         return -1;
       }
  
!  A nested function always has no linkage.  Declaring one with 'extern'
! or 'static' is erroneous.  If you need to declare the nested function
! before its definition, use 'auto' (which is otherwise meaningless for
  function declarations).
  
       bar (int *array, int offset, int size)
--- 35702,35716 ----
         /* ... */
         return 0;
  
!       /* Control comes here from ‘access’
           if it detects an error.  */
        failure:
         return -1;
       }
  
!  A nested function always has no linkage.  Declaring one with ‘extern’
! or ‘static’ is erroneous.  If you need to declare the nested function
! before its definition, use ‘auto’ (which is otherwise meaningless for
  function declarations).
  
       bar (int *array, int offset, int size)
*************** File: gcc.info,  Node: Nonlocal Gotos,
*** 35723,35734 ****
  6.5 Nonlocal Gotos
  ==================
  
! GCC provides the built-in functions '__builtin_setjmp' and
! '__builtin_longjmp' which are similar to, but not interchangeable with,
! the C library functions 'setjmp' and 'longjmp'.  The built-in versions
  are used internally by GCC's libraries to implement exception handling
  on some targets.  You should use the standard C library functions
! declared in '<setjmp.h>' in user code instead of the builtins.
  
   The built-in versions of these functions use GCC's normal mechanisms to
  save and restore registers using the stack on function entry and exit.
--- 35733,35744 ----
  6.5 Nonlocal Gotos
  ==================
  
! GCC provides the built-in functions ‘__builtin_setjmp’ and
! ‘__builtin_longjmp’ which are similar to, but not interchangeable with,
! the C library functions ‘setjmp’ and ‘longjmp’.  The built-in versions
  are used internally by GCC's libraries to implement exception handling
  on some targets.  You should use the standard C library functions
! declared in ‘<setjmp.h>’ in user code instead of the builtins.
  
   The built-in versions of these functions use GCC's normal mechanisms to
  save and restore registers using the stack on function entry and exit.
*************** values.
*** 35738,35744 ****
  
   An important caveat is that GCC arranges to save and restore only those
  registers known to the specific architecture variant being compiled for.
! This can make '__builtin_setjmp' and '__builtin_longjmp' more efficient
  than their library counterparts in some cases, but it can also cause
  incorrect and mysterious behavior when mixing with code that uses the
  full register set.
--- 35748,35754 ----
  
   An important caveat is that GCC arranges to save and restore only those
  registers known to the specific architecture variant being compiled for.
! This can make ‘__builtin_setjmp’ and ‘__builtin_longjmp’ more efficient
  than their library counterparts in some cases, but it can also cause
  incorrect and mysterious behavior when mixing with code that uses the
  full register set.
*************** functions as:
*** 35751,35770 ****
  
   -- Built-in Function: int __builtin_setjmp (intptr_t *BUF)
       This function saves the current stack context in BUF.
!      '__builtin_setjmp' returns 0 when returning directly, and 1 when
!      returning from '__builtin_longjmp' using the same BUF.
  
   -- Built-in Function: void __builtin_longjmp (intptr_t *BUF, int VAL)
       This function restores the stack context in BUF, saved by a
!      previous call to '__builtin_setjmp'.  After '__builtin_longjmp' is
       finished, the program resumes execution as if the matching
!      '__builtin_setjmp' returns the value VAL, which must be 1.
  
!      Because '__builtin_longjmp' depends on the function return
       mechanism to restore the stack context, it cannot be called from
!      the same function calling '__builtin_setjmp' to initialize BUF.  It
       can only be called from a function called (directly or indirectly)
!      from the function calling '__builtin_setjmp'.
  
  
  File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nonlocal Gotos,  Up: C Extensions
--- 35761,35780 ----
  
   -- Built-in Function: int __builtin_setjmp (intptr_t *BUF)
       This function saves the current stack context in BUF.
!      ‘__builtin_setjmp’ returns 0 when returning directly, and 1 when
!      returning from ‘__builtin_longjmp’ using the same BUF.
  
   -- Built-in Function: void __builtin_longjmp (intptr_t *BUF, int VAL)
       This function restores the stack context in BUF, saved by a
!      previous call to ‘__builtin_setjmp’.  After ‘__builtin_longjmp’ is
       finished, the program resumes execution as if the matching
!      ‘__builtin_setjmp’ returns the value VAL, which must be 1.
  
!      Because ‘__builtin_longjmp’ depends on the function return
       mechanism to restore the stack context, it cannot be called from
!      the same function calling ‘__builtin_setjmp’ to initialize BUF.  It
       can only be called from a function called (directly or indirectly)
!      from the function calling ‘__builtin_setjmp’.
  
  
  File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nonlocal Gotos,  Up: C Extensions
*************** acting as mere forwarders for their argu
*** 35801,35807 ****
       parameters described by ARGUMENTS and SIZE.
  
       The value of ARGUMENTS should be the value returned by
!      '__builtin_apply_args'.  The argument SIZE specifies the size of
       the stack argument data, in bytes.
  
       This function returns a pointer to data describing how to return
--- 35811,35817 ----
       parameters described by ARGUMENTS and SIZE.
  
       The value of ARGUMENTS should be the value returned by
!      ‘__builtin_apply_args’.  The argument SIZE specifies the size of
       the stack argument data, in bytes.
  
       This function returns a pointer to data describing how to return
*************** acting as mere forwarders for their argu
*** 35809,35829 ****
       block of memory allocated on the stack.
  
       It is not always simple to compute the proper value for SIZE.  The
!      value is used by '__builtin_apply' to compute the amount of data
       that should be pushed on the stack and copied from the incoming
       argument area.
  
   -- Built-in Function: void __builtin_return (void *RESULT)
       This built-in function returns the value described by RESULT from
       the containing function.  You should specify, for RESULT, a value
!      returned by '__builtin_apply'.
  
   -- Built-in Function: __builtin_va_arg_pack ()
       This built-in function represents all anonymous arguments of an
       inline function.  It can be used only in inline functions that are
       always inlined, never compiled as a separate function, such as
!      those using '__attribute__ ((__always_inline__))' or '__attribute__
!      ((__gnu_inline__))' extern inline functions.  It must be only
       passed as last argument to some other function with variable
       arguments.  This is useful for writing small wrapper inlines for
       variable argument functions, when using preprocessor macros is
--- 35819,35839 ----
       block of memory allocated on the stack.
  
       It is not always simple to compute the proper value for SIZE.  The
!      value is used by ‘__builtin_apply’ to compute the amount of data
       that should be pushed on the stack and copied from the incoming
       argument area.
  
   -- Built-in Function: void __builtin_return (void *RESULT)
       This built-in function returns the value described by RESULT from
       the containing function.  You should specify, for RESULT, a value
!      returned by ‘__builtin_apply’.
  
   -- Built-in Function: __builtin_va_arg_pack ()
       This built-in function represents all anonymous arguments of an
       inline function.  It can be used only in inline functions that are
       always inlined, never compiled as a separate function, such as
!      those using ‘__attribute__ ((__always_inline__))’ or ‘__attribute__
!      ((__gnu_inline__))’ extern inline functions.  It must be only
       passed as last argument to some other function with variable
       arguments.  This is useful for writing small wrapper inlines for
       variable argument functions, when using preprocessor macros is
*************** acting as mere forwarders for their argu
*** 35845,35852 ****
       This built-in function returns the number of anonymous arguments of
       an inline function.  It can be used only in inline functions that
       are always inlined, never compiled as a separate function, such as
!      those using '__attribute__ ((__always_inline__))' or '__attribute__
!      ((__gnu_inline__))' extern inline functions.  For example following
       does link- or run-time checking of open arguments for optimized
       code:
            #ifdef __OPTIMIZE__
--- 35855,35862 ----
       This built-in function returns the number of anonymous arguments of
       an inline function.  It can be used only in inline functions that
       are always inlined, never compiled as a separate function, such as
!      those using ‘__attribute__ ((__always_inline__))’ or ‘__attribute__
!      ((__gnu_inline__))’ extern inline functions.  For example following
       does link- or run-time checking of open arguments for optimized
       code:
            #ifdef __OPTIMIZE__
*************** acting as mere forwarders for their argu
*** 35876,35915 ****
  
  File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
  
! 6.7 Referring to a Type with 'typeof'
  =====================================
  
! Another way to refer to the type of an expression is with 'typeof'.  The
! syntax of using of this keyword looks like 'sizeof', but the construct
! acts semantically like a type name defined with 'typedef'.
  
!  There are two ways of writing the argument to 'typeof': with an
  expression or with a type.  Here is an example with an expression:
  
       typeof (x[0](1))
  
! This assumes that 'x' is an array of pointers to functions; the type
  described is that of the values of the functions.
  
   Here is an example with a typename as the argument:
  
       typeof (int *)
  
! Here the type described is that of pointers to 'int'.
  
   If you are writing a header file that must work when included in ISO C
! programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
  Keywords::.
  
!  A 'typeof' construct can be used anywhere a typedef name can be used.
  For example, you can use it in a declaration, in a cast, or inside of
! 'sizeof' or 'typeof'.
  
!  The operand of 'typeof' is evaluated for its side effects if and only
  if it is an expression of variably modified type or the name of such a
  type.
  
!  'typeof' is often useful in conjunction with statement expressions
  (*note Statement Exprs::).  Here is how the two together can be used to
  define a safe "maximum" macro which operates on any arithmetic type and
  evaluates each of its arguments exactly once:
--- 35886,35925 ----
  
  File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
  
! 6.7 Referring to a Type with ‘typeof’
  =====================================
  
! Another way to refer to the type of an expression is with ‘typeof’.  The
! syntax of using of this keyword looks like ‘sizeof’, but the construct
! acts semantically like a type name defined with ‘typedef’.
  
!  There are two ways of writing the argument to ‘typeof’: with an
  expression or with a type.  Here is an example with an expression:
  
       typeof (x[0](1))
  
! This assumes that ‘x’ is an array of pointers to functions; the type
  described is that of the values of the functions.
  
   Here is an example with a typename as the argument:
  
       typeof (int *)
  
! Here the type described is that of pointers to ‘int’.
  
   If you are writing a header file that must work when included in ISO C
! programs, write ‘__typeof__’ instead of ‘typeof’.  *Note Alternate
  Keywords::.
  
!  A ‘typeof’ construct can be used anywhere a typedef name can be used.
  For example, you can use it in a declaration, in a cast, or inside of
! ‘sizeof’ or ‘typeof’.
  
!  The operand of ‘typeof’ is evaluated for its side effects if and only
  if it is an expression of variably modified type or the name of such a
  type.
  
!  ‘typeof’ is often useful in conjunction with statement expressions
  (*note Statement Exprs::).  Here is how the two together can be used to
  define a safe "maximum" macro which operates on any arithmetic type and
  evaluates each of its arguments exactly once:
*************** evaluates each of its arguments exactly
*** 35921,35942 ****
  
   The reason for using names that start with underscores for the local
  variables is to avoid conflicts with variable names that occur within
! the expressions that are substituted for 'a' and 'b'.  Eventually we
  hope to design a new form of declaration syntax that allows you to
  declare variables whose scopes start only after their initializers; this
  will be a more reliable way to prevent such conflicts.
  
! Some more examples of the use of 'typeof':
  
!    * This declares 'y' with the type of what 'x' points to.
  
            typeof (*x) y;
  
!    * This declares 'y' as an array of such values.
  
            typeof (*x) y[4];
  
!    * This declares 'y' as an array of pointers to characters:
  
            typeof (typeof (char *)[4]) y;
  
--- 35931,35952 ----
  
   The reason for using names that start with underscores for the local
  variables is to avoid conflicts with variable names that occur within
! the expressions that are substituted for ‘a’ and ‘b’.  Eventually we
  hope to design a new form of declaration syntax that allows you to
  declare variables whose scopes start only after their initializers; this
  will be a more reliable way to prevent such conflicts.
  
! Some more examples of the use of ‘typeof’:
  
!    • This declares ‘y’ with the type of what ‘x’ points to.
  
            typeof (*x) y;
  
!    • This declares ‘y’ as an array of such values.
  
            typeof (*x) y[4];
  
!    • This declares ‘y’ as an array of pointers to characters:
  
            typeof (typeof (char *)[4]) y;
  
*************** Some more examples of the use of 'typeof
*** 35944,35950 ****
  
            char *y[4];
  
!      To see the meaning of the declaration using 'typeof', and why it
       might be a useful way to write, rewrite it with these macros:
  
            #define pointer(T)  typeof(T *)
--- 35954,35960 ----
  
            char *y[4];
  
!      To see the meaning of the declaration using ‘typeof’, and why it
       might be a useful way to write, rewrite it with these macros:
  
            #define pointer(T)  typeof(T *)
*************** Some more examples of the use of 'typeof
*** 35954,35990 ****
  
            array (pointer (char), 4) y;
  
!      Thus, 'array (pointer (char), 4)' is the type of arrays of 4
!      pointers to 'char'.
  
!  The ISO C23 operator 'typeof_unqual' is available in ISO C23 mode and
! its result is the non-atomic unqualified version of what 'typeof'
! operator returns.  Alternate spelling '__typeof_unqual__' is available
  in all C modes and provides non-atomic unqualified version of what
! '__typeof__' operator returns.  *Note Alternate Keywords::.
  
   In GNU C, but not GNU C++, you may also declare the type of a variable
! as '__auto_type'.  In that case, the declaration must declare only one
  variable, whose declarator must just be an identifier, the declaration
  must be initialized, and the type of the variable is determined by the
  initializer; the name of the variable is not in scope until after the
! initializer.  (In C++, you should use C++11 'auto' for this purpose.)
! Using '__auto_type', the "maximum" macro above could be written as:
  
       #define max(a,b) \
         ({ __auto_type _a = (a); \
             __auto_type _b = (b); \
           _a > _b ? _a : _b; })
  
!  Using '__auto_type' instead of 'typeof' has two advantages:
  
!    * Each argument to the macro appears only once in the expansion of
       the macro.  This prevents the size of the macro expansion growing
       exponentially when calls to such macros are nested inside arguments
       of such macros.
  
!    * If the argument to the macro has variably modified type, it is
!      evaluated only once when using '__auto_type', but twice if 'typeof'
       is used.
  
  
--- 35964,36000 ----
  
            array (pointer (char), 4) y;
  
!      Thus, ‘array (pointer (char), 4)’ is the type of arrays of 4
!      pointers to ‘char’.
  
!  The ISO C23 operator ‘typeof_unqual’ is available in ISO C23 mode and
! its result is the non-atomic unqualified version of what ‘typeof’
! operator returns.  Alternate spelling ‘__typeof_unqual__’ is available
  in all C modes and provides non-atomic unqualified version of what
! ‘__typeof__’ operator returns.  *Note Alternate Keywords::.
  
   In GNU C, but not GNU C++, you may also declare the type of a variable
! as ‘__auto_type’.  In that case, the declaration must declare only one
  variable, whose declarator must just be an identifier, the declaration
  must be initialized, and the type of the variable is determined by the
  initializer; the name of the variable is not in scope until after the
! initializer.  (In C++, you should use C++11 ‘auto’ for this purpose.)
! Using ‘__auto_type’, the "maximum" macro above could be written as:
  
       #define max(a,b) \
         ({ __auto_type _a = (a); \
             __auto_type _b = (b); \
           _a > _b ? _a : _b; })
  
!  Using ‘__auto_type’ instead of ‘typeof’ has two advantages:
  
!    • Each argument to the macro appears only once in the expansion of
       the macro.  This prevents the size of the macro expansion growing
       exponentially when calls to such macros are nested inside arguments
       of such macros.
  
!    • If the argument to the macro has variably modified type, it is
!      evaluated only once when using ‘__auto_type’, but twice if ‘typeof’
       is used.
  
  
*************** expression.
*** 36001,36007 ****
  
       x ? : y
  
! has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
  
   This example is perfectly equivalent to
  
--- 36011,36017 ----
  
       x ? : y
  
! has the value of ‘x’ if that is nonzero; otherwise, the value of ‘y’.
  
   This example is perfectly equivalent to
  
*************** File: gcc.info,  Node: __int128,  Next:
*** 36020,36031 ****
  6.9 128-bit Integers
  ====================
  
! As an extension the integer scalar type '__int128' is supported for
  targets which have an integer mode wide enough to hold 128 bits.  Simply
! write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
  for an unsigned 128-bit integer.  There is no support in GCC for
! expressing an integer constant of type '__int128' for targets with 'long
! long' integer less than 128 bits wide.
  
  
  File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
--- 36030,36041 ----
  6.9 128-bit Integers
  ====================
  
! As an extension the integer scalar type ‘__int128’ is supported for
  targets which have an integer mode wide enough to hold 128 bits.  Simply
! write ‘__int128’ for a signed 128-bit integer, or ‘unsigned __int128’
  for an unsigned 128-bit integer.  There is no support in GCC for
! expressing an integer constant of type ‘__int128’ for targets with ‘long
! long’ integer less than 128 bits wide.
  
  
  File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
*************** File: gcc.info,  Node: Long Long,  Next:
*** 36035,36044 ****
  
  ISO C99 and ISO C++11 support data types for integers that are at least
  64 bits wide, and as an extension GCC supports them in C90 and C++98
! modes.  Simply write 'long long int' for a signed integer, or 'unsigned
! long long int' for an unsigned integer.  To make an integer constant of
! type 'long long int', add the suffix 'LL' to the integer.  To make an
! integer constant of type 'unsigned long long int', add the suffix 'ULL'
  to the integer.
  
   You can use these types in arithmetic like any other integer types.
--- 36045,36054 ----
  
  ISO C99 and ISO C++11 support data types for integers that are at least
  64 bits wide, and as an extension GCC supports them in C90 and C++98
! modes.  Simply write ‘long long int’ for a signed integer, or ‘unsigned
! long long int’ for an unsigned integer.  To make an integer constant of
! type ‘long long int’, add the suffix ‘LL’ to the integer.  To make an
! integer constant of type ‘unsigned long long int’, add the suffix ‘ULL’
  to the integer.
  
   You can use these types in arithmetic like any other integer types.
*************** instruction.  Division and shifts are op
*** 36049,36060 ****
  provide special support.  The operations that are not open-coded use
  special library routines that come with GCC.
  
!  There may be pitfalls when you use 'long long' types for function
! arguments without function prototypes.  If a function expects type 'int'
! for its argument, and you pass a value of type 'long long int',
  confusion results because the caller and the subroutine disagree about
  the number of bytes for the argument.  Likewise, if the function expects
! 'long long int' and you pass 'int'.  The best way to avoid such problems
  is to use prototypes.
  
  
--- 36059,36070 ----
  provide special support.  The operations that are not open-coded use
  special library routines that come with GCC.
  
!  There may be pitfalls when you use ‘long long’ types for function
! arguments without function prototypes.  If a function expects type ‘int’
! for its argument, and you pass a value of type ‘long long int’,
  confusion results because the caller and the subroutine disagree about
  the number of bytes for the argument.  Likewise, if the function expects
! ‘long long int’ and you pass ‘int’.  The best way to avoid such problems
  is to use prototypes.
  
  
*************** File: gcc.info,  Node: Complex,  Next: F
*** 36066,36132 ****
  ISO C99 supports complex floating data types, and as an extension GCC
  supports them in C90 mode and in C++.  GCC also supports complex integer
  data types which are not part of ISO C99.  You can declare complex types
! using the keyword '_Complex'.  As an extension, the older GNU keyword
! '__complex__' is also supported.
  
!  For example, '_Complex double x;' declares 'x' as a variable whose real
! part and imaginary part are both of type 'double'.  '_Complex short int
! y;' declares 'y' to have real and imaginary parts of type 'short int';
  this is not likely to be useful, but it shows that the set of complex
  types is complete.
  
!  To write a constant with a complex data type, use the suffix 'i' or 'j'
! (either one; they are equivalent).  For example, '2.5fi' has type
! '_Complex float' and '3i' has type '_Complex int'.  Such a constant
  always has a pure imaginary value, but you can form any complex value
  you like by adding one to a real constant.  This is a GNU extension; if
  you have an ISO C99 conforming C library (such as the GNU C Library),
  and want to construct complex constants of floating type, you should
! include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
  
!  The ISO C++14 library also defines the 'i' suffix, so C++14 code that
! includes the '<complex>' header cannot use 'i' for the GNU extension.
! The 'j' suffix still has the GNU meaning.
  
!  GCC can handle both implicit and explicit casts between the '_Complex'
! types and other '_Complex' types as casting both the real and imaginary
  parts to the scalar type.  GCC can handle implicit and explicit casts
! from a scalar type to a '_Complex' type and where the imaginary part
  will be considered zero.  The C front-end can handle implicit and
! explicit casts from a '_Complex' type to a scalar type where the
  imaginary part will be ignored.  In C++ code, this cast is considered
  illformed and G++ will error out.
  
!  GCC provides a built-in function '__builtin_complex' will can be used
  to construct a complex value.
  
   GCC has a few extensions which can be used to extract the real and the
  imaginary part of the complex-valued expression.  Note these expressions
  are lvalues if the EXP is an lvalue.  These expressions operands have
  the type of a complex type which might get prompoted to a complex type
! from a scalar type.  E.g.  '__real__ (int)X' is the same as casting to
! '_Complex int' before '__real__' is done.
  
  Expression                    Description
  --------------------------------------------------------------------------
! '__real__ EXP'                Extract the real part of EXP.
! '__imag__ EXP'                Extract the imaginary part of EXP.
  
   For values of floating point, you should use the ISO C99 functions,
! declared in '<complex.h>' and also provided as built-in functions by
  GCC.
  
  Expression                    float          double         long double
  ---------------------------------------------------------------------------
! '__real__ EXP'                'crealf'       'creal'        'creall'
! '__imag__ EXP'                'cimagf'       'cimag'        'cimagl'
  
!  The operator '~' performs complex conjugation when used on a value with
  a complex type.  This is a GNU extension; for values of floating type,
! you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
! declared in '<complex.h>' and also provided as built-in functions by
! GCC.  Note unlike the '__real__' and '__imag__' operators, this operator
! will not do an implicit cast to the complex type because the '~' is
  already a normal operator.
  
   GCC can allocate complex automatic variables in a noncontiguous
--- 36076,36142 ----
  ISO C99 supports complex floating data types, and as an extension GCC
  supports them in C90 mode and in C++.  GCC also supports complex integer
  data types which are not part of ISO C99.  You can declare complex types
! using the keyword ‘_Complex’.  As an extension, the older GNU keyword
! ‘__complex__’ is also supported.
  
!  For example, ‘_Complex double x;’ declares ‘x’ as a variable whose real
! part and imaginary part are both of type ‘double’.  ‘_Complex short int
! y;’ declares ‘y’ to have real and imaginary parts of type ‘short int’;
  this is not likely to be useful, but it shows that the set of complex
  types is complete.
  
!  To write a constant with a complex data type, use the suffix ‘i’ or ‘j’
! (either one; they are equivalent).  For example, ‘2.5fi’ has type
! ‘_Complex float’ and ‘3i’ has type ‘_Complex int’.  Such a constant
  always has a pure imaginary value, but you can form any complex value
  you like by adding one to a real constant.  This is a GNU extension; if
  you have an ISO C99 conforming C library (such as the GNU C Library),
  and want to construct complex constants of floating type, you should
! include ‘<complex.h>’ and use the macros ‘I’ or ‘_Complex_I’ instead.
  
!  The ISO C++14 library also defines the ‘i’ suffix, so C++14 code that
! includes the ‘<complex>’ header cannot use ‘i’ for the GNU extension.
! The ‘j’ suffix still has the GNU meaning.
  
!  GCC can handle both implicit and explicit casts between the ‘_Complex’
! types and other ‘_Complex’ types as casting both the real and imaginary
  parts to the scalar type.  GCC can handle implicit and explicit casts
! from a scalar type to a ‘_Complex’ type and where the imaginary part
  will be considered zero.  The C front-end can handle implicit and
! explicit casts from a ‘_Complex’ type to a scalar type where the
  imaginary part will be ignored.  In C++ code, this cast is considered
  illformed and G++ will error out.
  
!  GCC provides a built-in function ‘__builtin_complex’ will can be used
  to construct a complex value.
  
   GCC has a few extensions which can be used to extract the real and the
  imaginary part of the complex-valued expression.  Note these expressions
  are lvalues if the EXP is an lvalue.  These expressions operands have
  the type of a complex type which might get prompoted to a complex type
! from a scalar type.  E.g.  ‘__real__ (int)X’ is the same as casting to
! ‘_Complex int’ before ‘__real__’ is done.
  
  Expression                    Description
  --------------------------------------------------------------------------
! ‘__real__ EXP’                Extract the real part of EXP.
! ‘__imag__ EXP’                Extract the imaginary part of EXP.
  
   For values of floating point, you should use the ISO C99 functions,
! declared in ‘<complex.h>’ and also provided as built-in functions by
  GCC.
  
  Expression                    float          double         long double
  ---------------------------------------------------------------------------
! ‘__real__ EXP’                ‘crealf’       ‘creal’        ‘creall’
! ‘__imag__ EXP’                ‘cimagf’       ‘cimag’        ‘cimagl’
  
!  The operator ‘~’ performs complex conjugation when used on a value with
  a complex type.  This is a GNU extension; for values of floating type,
! you should use the ISO C99 functions ‘conjf’, ‘conj’ and ‘conjl’,
! declared in ‘<complex.h>’ and also provided as built-in functions by
! GCC.  Note unlike the ‘__real__’ and ‘__imag__’ operators, this operator
! will not do an implicit cast to the complex type because the ‘~’ is
  already a normal operator.
  
   GCC can allocate complex automatic variables in a noncontiguous
*************** the imaginary part is on the stack (or v
*** 36135,36151 ****
  debug info format can represent this, so use of DWARF is recommended.
  If you are using the stabs debug info format, GCC describes a
  noncontiguous complex variable as if it were two separate variables of
! noncomplex type.  If the variable's actual name is 'foo', the two
! fictitious variables are named 'foo$real' and 'foo$imag'.  You can
  examine and set these two fictitious variables with your debugger.
  
   -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
  
!      The built-in function '__builtin_complex' is provided for use in
!      implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
       REAL and IMAG must have the same type, a real binary floating-point
       type, and the result has the corresponding complex type with real
!      and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
       works even when infinities, NaNs and negative zeros are involved.
  
  
--- 36145,36161 ----
  debug info format can represent this, so use of DWARF is recommended.
  If you are using the stabs debug info format, GCC describes a
  noncontiguous complex variable as if it were two separate variables of
! noncomplex type.  If the variable's actual name is ‘foo’, the two
! fictitious variables are named ‘foo$real’ and ‘foo$imag’.  You can
  examine and set these two fictitious variables with your debugger.
  
   -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
  
!      The built-in function ‘__builtin_complex’ is provided for use in
!      implementing the ISO C11 macros ‘CMPLXF’, ‘CMPLX’ and ‘CMPLXL’.
       REAL and IMAG must have the same type, a real binary floating-point
       type, and the result has the corresponding complex type with real
!      and imaginary parts REAL and IMAG.  Unlike ‘REAL + I * IMAG’, this
       works even when infinities, NaNs and negative zeros are involved.
  
  
*************** File: gcc.info,  Node: Floating Types,
*** 36155,36218 ****
  ==============================
  
  ISO/IEC TS 18661-3:2015 defines C support for additional floating types
! '_FloatN' and '_FloatNx', and GCC supports these type names; the set of
  types supported depends on the target architecture.  Constants with
! these types use suffixes 'fN' or 'FN' and 'fNx' or 'FNx'.  These type
! names can be used together with '_Complex' to declare complex types.
  
   As an extension, GNU C and GNU C++ support additional floating types,
  which are not supported by all targets.
!    * '__float128' is available on i386, x86_64, IA-64, LoongArch and
       hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable the
!      vector scalar (VSX) instruction set.  '__float128' supports the
       128-bit floating type.  On i386, x86_64, PowerPC, LoongArch and
!      IA-64, other than HP-UX, '__float128' is an alias for '_Float128'.
!      On hppa and IA-64 HP-UX, '__float128' is an alias for 'long
!      double'.
  
!    * '__float80' is available on the i386, x86_64, and IA-64 targets,
!      and supports the 80-bit ('XFmode') floating type.  It is an alias
!      for the type name '_Float64x' on these targets.
  
!    * '__ibm128' is available on PowerPC targets, and provides access to
       the IBM extended double format which is the current format used for
!      'long double'.  When 'long double' transitions to '__float128' on
!      PowerPC in the future, '__ibm128' will remain for use in
       conversions between the two types.
  
   Support for these additional types includes the arithmetic operators:
  add, subtract, multiply, divide; unary arithmetic operators; relational
  operators; equality operators; and conversions to and from integer and
! other floating types.  Use a suffix 'w' or 'W' in a literal constant of
! type '__float80' or type '__ibm128'.  Use a suffix 'q' or 'Q' for
! '__float128'.
  
!  In order to use '_Float128', '__float128', and '__ibm128' on PowerPC
! Linux systems, you must use the '-mfloat128' option.  It is expected in
! future versions of GCC that '_Float128' and '__float128' will be enabled
  automatically.
  
!  The '_Float128' type is supported on all systems where '__float128' is
! supported or where 'long double' has the IEEE binary128 format.  The
! '_Float64x' type is supported on all systems where '__float128' is
! supported.  The '_Float32' type is supported on all systems supporting
! IEEE binary32; the '_Float64' and '_Float32x' types are supported on all
! systems supporting IEEE binary64.  The '_Float16' type is supported on
  AArch64 systems by default, on ARM systems when the IEEE format for
! 16-bit floating-point types is selected with '-mfp16-format=ieee' and,
  for both C and C++, on x86 systems with SSE2 enabled.  GCC does not
! currently support '_Float128x' on any systems.
  
   On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
! types using the corresponding internal complex type, 'XCmode' for
! '__float80' type and 'TCmode' for '__float128' type:
  
       typedef _Complex float __attribute__((mode(TC))) _Complex128;
       typedef _Complex float __attribute__((mode(XC))) _Complex80;
  
   On the PowerPC Linux VSX targets, you can declare complex types using
! the corresponding internal complex type, 'KCmode' for '__float128' type
! and 'ICmode' for '__ibm128' type:
  
       typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
       typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
--- 36165,36228 ----
  ==============================
  
  ISO/IEC TS 18661-3:2015 defines C support for additional floating types
! ‘_FloatN’ and ‘_FloatNx’, and GCC supports these type names; the set of
  types supported depends on the target architecture.  Constants with
! these types use suffixes ‘fN’ or ‘FN’ and ‘fNx’ or ‘FNx’.  These type
! names can be used together with ‘_Complex’ to declare complex types.
  
   As an extension, GNU C and GNU C++ support additional floating types,
  which are not supported by all targets.
!    • ‘__float128’ is available on i386, x86_64, IA-64, LoongArch and
       hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable the
!      vector scalar (VSX) instruction set.  ‘__float128’ supports the
       128-bit floating type.  On i386, x86_64, PowerPC, LoongArch and
!      IA-64, other than HP-UX, ‘__float128’ is an alias for ‘_Float128’.
!      On hppa and IA-64 HP-UX, ‘__float128’ is an alias for ‘long
!      double’.
  
!    • ‘__float80’ is available on the i386, x86_64, and IA-64 targets,
!      and supports the 80-bit (‘XFmode’) floating type.  It is an alias
!      for the type name ‘_Float64x’ on these targets.
  
!    • ‘__ibm128’ is available on PowerPC targets, and provides access to
       the IBM extended double format which is the current format used for
!      ‘long double’.  When ‘long double’ transitions to ‘__float128’ on
!      PowerPC in the future, ‘__ibm128’ will remain for use in
       conversions between the two types.
  
   Support for these additional types includes the arithmetic operators:
  add, subtract, multiply, divide; unary arithmetic operators; relational
  operators; equality operators; and conversions to and from integer and
! other floating types.  Use a suffix ‘w’ or ‘W’ in a literal constant of
! type ‘__float80’ or type ‘__ibm128’.  Use a suffix ‘q’ or ‘Q’ for
! ‘__float128’.
  
!  In order to use ‘_Float128’, ‘__float128’, and ‘__ibm128’ on PowerPC
! Linux systems, you must use the ‘-mfloat128’ option.  It is expected in
! future versions of GCC that ‘_Float128’ and ‘__float128’ will be enabled
  automatically.
  
!  The ‘_Float128’ type is supported on all systems where ‘__float128’ is
! supported or where ‘long double’ has the IEEE binary128 format.  The
! ‘_Float64x’ type is supported on all systems where ‘__float128’ is
! supported.  The ‘_Float32’ type is supported on all systems supporting
! IEEE binary32; the ‘_Float64’ and ‘_Float32x’ types are supported on all
! systems supporting IEEE binary64.  The ‘_Float16’ type is supported on
  AArch64 systems by default, on ARM systems when the IEEE format for
! 16-bit floating-point types is selected with ‘-mfp16-format=ieee’ and,
  for both C and C++, on x86 systems with SSE2 enabled.  GCC does not
! currently support ‘_Float128x’ on any systems.
  
   On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
! types using the corresponding internal complex type, ‘XCmode’ for
! ‘__float80’ type and ‘TCmode’ for ‘__float128’ type:
  
       typedef _Complex float __attribute__((mode(TC))) _Complex128;
       typedef _Complex float __attribute__((mode(XC))) _Complex80;
  
   On the PowerPC Linux VSX targets, you can declare complex types using
! the corresponding internal complex type, ‘KCmode’ for ‘__float128’ type
! and ‘ICmode’ for ‘__ibm128’ type:
  
       typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
       typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
*************** File: gcc.info,  Node: Half-Precision,
*** 36224,36290 ****
  ==================================
  
  On ARM and AArch64 targets, GCC supports half-precision (16-bit)
! floating point via the '__fp16' type defined in the ARM C Language
  Extensions.  On ARM systems, you must enable this type explicitly with
! the '-mfp16-format' command-line option in order to use it.  On x86
  targets with SSE2 enabled, GCC supports half-precision (16-bit) floating
! point via the '_Float16' type.  For C++, x86 provides a builtin type
! named '_Float16' which contains same data format as C.
  
   ARM targets support two incompatible representations for half-precision
  floating-point values.  You must choose one of the representations and
  use it consistently in your program.
  
!  Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
  format can represent normalized values in the range of 2^{-14} to 65504.
  There are 11 bits of significand precision, approximately 3 decimal
  digits.
  
!  Specifying '-mfp16-format=alternative' selects the ARM alternative
  format.  This representation is similar to the IEEE format, but does not
  support infinities or NaNs.  Instead, the range of exponents is
  extended, so that this format can represent normalized values in the
  range of 2^{-14} to 131008.
  
   The GCC port for AArch64 only supports the IEEE 754-2008 format, and
! does not require use of the '-mfp16-format' command-line option.
  
!  The '__fp16' type may only be used as an argument to intrinsics defined
! in '<arm_fp16.h>', or as a storage format.  For purposes of arithmetic
! and other operations, '__fp16' values in C or C++ expressions are
! automatically promoted to 'float'.
  
   The ARM target provides hardware support for conversions between
! '__fp16' and 'float' values as an extension to VFP and NEON (Advanced
  SIMD), and from ARMv8-A provides hardware support for conversions
! between '__fp16' and 'double' values.  GCC generates code using these
  hardware instructions if you compile with options to select an FPU that
! provides them; for example, '-mfpu=neon-fp16 -mfloat-abi=softfp', in
! addition to the '-mfp16-format' option to select a half-precision
  format.
  
!  Language-level support for the '__fp16' data type is independent of
  whether GCC generates code using hardware floating-point instructions.
  In cases where hardware support is not specified, GCC implements
! conversions between '__fp16' and other types as library calls.
  
!  It is recommended that portable code use the '_Float16' type defined by
  ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
  
!  On x86 targets with SSE2 enabled, without '-mavx512fp16', all
! operations will be emulated by software emulation and the 'float'
! instructions.  The default behavior for 'FLT_EVAL_METHOD' is to keep the
  intermediate result of the operation as 32-bit precision.  This may lead
  to inconsistent behavior between software emulation and AVX512-FP16
! instructions.  Using '-fexcess-precision=16' will force round back after
  each operation.
  
!  Using '-mavx512fp16' will generate AVX512-FP16 instructions instead of
! software emulation.  The default behavior of 'FLT_EVAL_METHOD' is to
  round after each operation.  The same is true with
! '-fexcess-precision=standard' and '-mfpmath=sse'.  If there is no
! '-mfpmath=sse', '-fexcess-precision=standard' alone does the same thing
! as before, It is useful for code that does not have '_Float16' and runs
  on the x87 FPU.
  
  
--- 36234,36300 ----
  ==================================
  
  On ARM and AArch64 targets, GCC supports half-precision (16-bit)
! floating point via the ‘__fp16’ type defined in the ARM C Language
  Extensions.  On ARM systems, you must enable this type explicitly with
! the ‘-mfp16-format’ command-line option in order to use it.  On x86
  targets with SSE2 enabled, GCC supports half-precision (16-bit) floating
! point via the ‘_Float16’ type.  For C++, x86 provides a builtin type
! named ‘_Float16’ which contains same data format as C.
  
   ARM targets support two incompatible representations for half-precision
  floating-point values.  You must choose one of the representations and
  use it consistently in your program.
  
!  Specifying ‘-mfp16-format=ieee’ selects the IEEE 754-2008 format.  This
  format can represent normalized values in the range of 2^{-14} to 65504.
  There are 11 bits of significand precision, approximately 3 decimal
  digits.
  
!  Specifying ‘-mfp16-format=alternative’ selects the ARM alternative
  format.  This representation is similar to the IEEE format, but does not
  support infinities or NaNs.  Instead, the range of exponents is
  extended, so that this format can represent normalized values in the
  range of 2^{-14} to 131008.
  
   The GCC port for AArch64 only supports the IEEE 754-2008 format, and
! does not require use of the ‘-mfp16-format’ command-line option.
  
!  The ‘__fp16’ type may only be used as an argument to intrinsics defined
! in ‘<arm_fp16.h>’, or as a storage format.  For purposes of arithmetic
! and other operations, ‘__fp16’ values in C or C++ expressions are
! automatically promoted to ‘float’.
  
   The ARM target provides hardware support for conversions between
! ‘__fp16’ and ‘float’ values as an extension to VFP and NEON (Advanced
  SIMD), and from ARMv8-A provides hardware support for conversions
! between ‘__fp16’ and ‘double’ values.  GCC generates code using these
  hardware instructions if you compile with options to select an FPU that
! provides them; for example, ‘-mfpu=neon-fp16 -mfloat-abi=softfp’, in
! addition to the ‘-mfp16-format’ option to select a half-precision
  format.
  
!  Language-level support for the ‘__fp16’ data type is independent of
  whether GCC generates code using hardware floating-point instructions.
  In cases where hardware support is not specified, GCC implements
! conversions between ‘__fp16’ and other types as library calls.
  
!  It is recommended that portable code use the ‘_Float16’ type defined by
  ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
  
!  On x86 targets with SSE2 enabled, without ‘-mavx512fp16’, all
! operations will be emulated by software emulation and the ‘float’
! instructions.  The default behavior for ‘FLT_EVAL_METHOD’ is to keep the
  intermediate result of the operation as 32-bit precision.  This may lead
  to inconsistent behavior between software emulation and AVX512-FP16
! instructions.  Using ‘-fexcess-precision=16’ will force round back after
  each operation.
  
!  Using ‘-mavx512fp16’ will generate AVX512-FP16 instructions instead of
! software emulation.  The default behavior of ‘FLT_EVAL_METHOD’ is to
  round after each operation.  The same is true with
! ‘-fexcess-precision=standard’ and ‘-mfpmath=sse’.  If there is no
! ‘-mfpmath=sse’, ‘-fexcess-precision=standard’ alone does the same thing
! as before, It is useful for code that does not have ‘_Float16’ and runs
  on the x87 FPU.
  
  
*************** GCC will evolve as the draft technical r
*** 36299,36331 ****
  conventions for any target might also change.  Not all targets support
  decimal floating types.
  
!  The decimal floating types are '_Decimal32', '_Decimal64', and
! '_Decimal128'.  They use a radix of ten, unlike the floating types
! 'float', 'double', and 'long double' whose radix is not specified by the
  C standard but is usually two.
  
   Support for decimal floating types includes the arithmetic operators
  add, subtract, multiply, divide; unary arithmetic operators; relational
  operators; equality operators; and conversions to and from integer and
! other floating types.  Use a suffix 'df' or 'DF' in a literal constant
! of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
! for '_Decimal128'.
  
   GCC support of decimal float as specified by the draft technical report
  is incomplete:
  
!    * When the value of a decimal floating type cannot be represented in
       the integer type to which it is being converted, the result is
       undefined rather than the result value specified by the draft
       technical report.
  
!    * GCC does not provide the C library functionality associated with
!      'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
       must come from a separate C library implementation.  Because of
!      this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
       indicate that the implementation conforms to the technical report.
  
!  Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
  the DWARF debug information format.
  
  
--- 36309,36341 ----
  conventions for any target might also change.  Not all targets support
  decimal floating types.
  
!  The decimal floating types are ‘_Decimal32’, ‘_Decimal64’, and
! ‘_Decimal128’.  They use a radix of ten, unlike the floating types
! ‘float’, ‘double’, and ‘long double’ whose radix is not specified by the
  C standard but is usually two.
  
   Support for decimal floating types includes the arithmetic operators
  add, subtract, multiply, divide; unary arithmetic operators; relational
  operators; equality operators; and conversions to and from integer and
! other floating types.  Use a suffix ‘df’ or ‘DF’ in a literal constant
! of type ‘_Decimal32’, ‘dd’ or ‘DD’ for ‘_Decimal64’, and ‘dl’ or ‘DL’
! for ‘_Decimal128’.
  
   GCC support of decimal float as specified by the draft technical report
  is incomplete:
  
!    • When the value of a decimal floating type cannot be represented in
       the integer type to which it is being converted, the result is
       undefined rather than the result value specified by the draft
       technical report.
  
!    • GCC does not provide the C library functionality associated with
!      ‘math.h’, ‘fenv.h’, ‘stdio.h’, ‘stdlib.h’, and ‘wchar.h’, which
       must come from a separate C library implementation.  Because of
!      this the GNU C compiler does not define macro ‘__STDC_DEC_FP__’ to
       indicate that the implementation conforms to the technical report.
  
!  Types ‘_Decimal32’, ‘_Decimal64’, and ‘_Decimal128’ are supported by
  the DWARF debug information format.
  
  
*************** File: gcc.info,  Node: Hex Floats,  Next
*** 36335,36354 ****
  ===============
  
  ISO C99 and ISO C++17 support floating-point numbers written not only in
! the usual decimal notation, such as '1.55e1', but also numbers such as
! '0x1.fp3' written in hexadecimal format.  As a GNU extension, GCC
  supports this in C90 mode (except in some cases when strictly
  conforming) and in C++98, C++11 and C++14 modes.  In that format the
! '0x' hex introducer and the 'p' or 'P' exponent field are mandatory.
  The exponent is a decimal number that indicates the power of 2 by which
! the significant part is multiplied.  Thus '0x1.f' is 1 15/16, 'p3'
! multiplies it by 8, and the value of '0x1.fp3' is the same as '1.55e1'.
  
   Unlike for floating-point numbers in the decimal notation the exponent
  is always required in the hexadecimal notation.  Otherwise the compiler
! would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
! could mean '1.0f' or '1.9375' since 'f' is also the extension for
! floating-point constants of type 'float'.
  
  
  File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
--- 36345,36364 ----
  ===============
  
  ISO C99 and ISO C++17 support floating-point numbers written not only in
! the usual decimal notation, such as ‘1.55e1’, but also numbers such as
! ‘0x1.fp3’ written in hexadecimal format.  As a GNU extension, GCC
  supports this in C90 mode (except in some cases when strictly
  conforming) and in C++98, C++11 and C++14 modes.  In that format the
! ‘0x’ hex introducer and the ‘p’ or ‘P’ exponent field are mandatory.
  The exponent is a decimal number that indicates the power of 2 by which
! the significant part is multiplied.  Thus ‘0x1.f’ is 1 15/16, ‘p3’
! multiplies it by 8, and the value of ‘0x1.fp3’ is the same as ‘1.55e1’.
  
   Unlike for floating-point numbers in the decimal notation the exponent
  is always required in the hexadecimal notation.  Otherwise the compiler
! would not be able to resolve the ambiguity of, e.g., ‘0x1.f’.  This
! could mean ‘1.0f’ or ‘1.9375’ since ‘f’ is also the extension for
! floating-point constants of type ‘float’.
  
  
  File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
*************** will evolve as the draft technical repor
*** 36362,36421 ****
  for any target might also change.  Not all targets support fixed-point
  types.
  
!  The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
! 'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
! 'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
! _Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
! '_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
! long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
! '_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
! 'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
! '_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
! _Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
! unsigned long _Accum', '_Sat unsigned long long _Accum'.
  
   Fixed-point data values contain fractional and optional integral parts.
  The format of fixed-point data varies and depends on the target machine.
  
   Support for fixed-point types includes:
!    * prefix and postfix increment and decrement operators ('++', '--')
!    * unary arithmetic operators ('+', '-', '!')
!    * binary arithmetic operators ('+', '-', '*', '/')
!    * binary shift operators ('<<', '>>')
!    * relational operators ('<', '<=', '>=', '>')
!    * equality operators ('==', '!=')
!    * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
!    * conversions to and from integer, floating-point, or fixed-point
       types
  
   Use a suffix in a fixed-point literal constant:
!    * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
!    * 'r' or 'R' for '_Fract' and '_Sat _Fract'
!    * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
!    * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
!    * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
!      _Fract'
!    * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
!    * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
!      _Fract'
!    * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
!      long long _Fract'
!    * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
!    * 'k' or 'K' for '_Accum' and '_Sat _Accum'
!    * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
!    * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
!    * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
!      _Accum'
!    * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
!    * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
!      _Accum'
!    * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
!      long long _Accum'
  
   GCC support of fixed-point types as specified by the draft technical
  report is incomplete:
  
!    * Pragmas to control overflow and rounding behaviors are not
       implemented.
  
   Fixed-point types are supported by the DWARF debug information format.
--- 36372,36431 ----
  for any target might also change.  Not all targets support fixed-point
  types.
  
!  The fixed-point types are ‘short _Fract’, ‘_Fract’, ‘long _Fract’,
! ‘long long _Fract’, ‘unsigned short _Fract’, ‘unsigned _Fract’,
! ‘unsigned long _Fract’, ‘unsigned long long _Fract’, ‘_Sat short
! _Fract’, ‘_Sat _Fract’, ‘_Sat long _Fract’, ‘_Sat long long _Fract’,
! ‘_Sat unsigned short _Fract’, ‘_Sat unsigned _Fract’, ‘_Sat unsigned
! long _Fract’, ‘_Sat unsigned long long _Fract’, ‘short _Accum’,
! ‘_Accum’, ‘long _Accum’, ‘long long _Accum’, ‘unsigned short _Accum’,
! ‘unsigned _Accum’, ‘unsigned long _Accum’, ‘unsigned long long _Accum’,
! ‘_Sat short _Accum’, ‘_Sat _Accum’, ‘_Sat long _Accum’, ‘_Sat long long
! _Accum’, ‘_Sat unsigned short _Accum’, ‘_Sat unsigned _Accum’, ‘_Sat
! unsigned long _Accum’, ‘_Sat unsigned long long _Accum’.
  
   Fixed-point data values contain fractional and optional integral parts.
  The format of fixed-point data varies and depends on the target machine.
  
   Support for fixed-point types includes:
!    • prefix and postfix increment and decrement operators (‘++’, ‘--’)
!    • unary arithmetic operators (‘+’, ‘-’, ‘!’)
!    • binary arithmetic operators (‘+’, ‘-’, ‘*’, ‘/’)
!    • binary shift operators (‘<<’, ‘>>’)
!    • relational operators (‘<’, ‘<=’, ‘>=’, ‘>’)
!    • equality operators (‘==’, ‘!=’)
!    • assignment operators (‘+=’, ‘-=’, ‘*=’, ‘/=’, ‘<<=’, ‘>>=’)
!    • conversions to and from integer, floating-point, or fixed-point
       types
  
   Use a suffix in a fixed-point literal constant:
!    • ‘hr’ or ‘HR’ for ‘short _Fract’ and ‘_Sat short _Fract’
!    • ‘r’ or ‘R’ for ‘_Fract’ and ‘_Sat _Fract’
!    • ‘lr’ or ‘LR’ for ‘long _Fract’ and ‘_Sat long _Fract’
!    • ‘llr’ or ‘LLR’ for ‘long long _Fract’ and ‘_Sat long long _Fract’
!    • ‘uhr’ or ‘UHR’ for ‘unsigned short _Fract’ and ‘_Sat unsigned short
!      _Fract’
!    • ‘ur’ or ‘UR’ for ‘unsigned _Fract’ and ‘_Sat unsigned _Fract’
!    • ‘ulr’ or ‘ULR’ for ‘unsigned long _Fract’ and ‘_Sat unsigned long
!      _Fract’
!    • ‘ullr’ or ‘ULLR’ for ‘unsigned long long _Fract’ and ‘_Sat unsigned
!      long long _Fract’
!    • ‘hk’ or ‘HK’ for ‘short _Accum’ and ‘_Sat short _Accum’
!    • ‘k’ or ‘K’ for ‘_Accum’ and ‘_Sat _Accum’
!    • ‘lk’ or ‘LK’ for ‘long _Accum’ and ‘_Sat long _Accum’
!    • ‘llk’ or ‘LLK’ for ‘long long _Accum’ and ‘_Sat long long _Accum’
!    • ‘uhk’ or ‘UHK’ for ‘unsigned short _Accum’ and ‘_Sat unsigned short
!      _Accum’
!    • ‘uk’ or ‘UK’ for ‘unsigned _Accum’ and ‘_Sat unsigned _Accum’
!    • ‘ulk’ or ‘ULK’ for ‘unsigned long _Accum’ and ‘_Sat unsigned long
!      _Accum’
!    • ‘ullk’ or ‘ULLK’ for ‘unsigned long long _Accum’ and ‘_Sat unsigned
!      long long _Accum’
  
   GCC support of fixed-point types as specified by the draft technical
  report is incomplete:
  
!    • Pragmas to control overflow and rounding behaviors are not
       implemented.
  
   Fixed-point types are supported by the DWARF debug information format.
*************** M32C, PRU, RL78, and x86 targets support
*** 36434,36440 ****
  generic address space.
  
   Address space identifiers may be used exactly like any other C type
! qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
  more details.
  
  6.17.1 AVR Named Address Spaces
--- 36444,36450 ----
  generic address space.
  
   Address space identifiers may be used exactly like any other C type
! qualifier (e.g., ‘const’ or ‘volatile’).  See the N1275 document for
  more details.
  
  6.17.1 AVR Named Address Spaces
*************** more details.
*** 36442,36492 ****
  
  On the AVR target, there are several address spaces that can be used in
  order to put read-only data into the flash memory and access that data
! by means of the special instructions 'LPM' or 'ELPM' needed to read from
  flash.
  
!  Devices belonging to 'avrtiny' and 'avrxmega3' can access flash memory
! by means of 'LD*' instructions because the flash memory is mapped into
  the RAM address space.  There is _no need_ for language extensions like
! '__flash' or attribute *note 'progmem': AVR Variable Attributes.  The
  default linker description files for these devices cater for that
! feature and '.rodata' stays in flash: The compiler just generates 'LD*'
  instructions, and the linker script adds core specific offsets to all
! '.rodata' symbols: '0x4000' in the case of 'avrtiny' and '0x8000' in the
! case of 'avrxmega3'.  See *note AVR Options:: for a list of respective
  devices.
  
!  For devices not in 'avrtiny' or 'avrxmega3', any data including
  read-only data is located in RAM (the generic address space) because
  flash memory is not visible in the RAM address space.  In order to
  locate read-only data in flash memory _and_ to generate the right
  instructions to access this data without using (inline) assembler code,
  special address spaces are needed.
  
! '__flash'
!      The '__flash' qualifier locates data in the '.progmem.data'
!      section.  Data is read using the 'LPM' instruction.  Pointers to
       this address space are 16 bits wide.
  
! '__flash1'
! '__flash2'
! '__flash3'
! '__flash4'
! '__flash5'
       These are 16-bit address spaces locating data in section
!      '.progmemN.data' where N refers to address space '__flashN'.  The
!      compiler sets the 'RAMPZ' segment register appropriately before
!      reading data by means of the 'ELPM' instruction.
  
! '__memx'
       This is a 24-bit address space that linearizes flash and RAM: If
       the high bit of the address is set, data is read from RAM using the
       lower two bytes as RAM address.  If the high bit of the address is
!      clear, data is read from flash with 'RAMPZ' set according to the
!      high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
       Built-in Functions.
  
!      Objects in this address space are located in '.progmemx.data'.
  
   Example
  
--- 36452,36502 ----
  
  On the AVR target, there are several address spaces that can be used in
  order to put read-only data into the flash memory and access that data
! by means of the special instructions ‘LPM’ or ‘ELPM’ needed to read from
  flash.
  
!  Devices belonging to ‘avrtiny’ and ‘avrxmega3’ can access flash memory
! by means of ‘LD*’ instructions because the flash memory is mapped into
  the RAM address space.  There is _no need_ for language extensions like
! ‘__flash’ or attribute *note ‘progmem’: AVR Variable Attributes.  The
  default linker description files for these devices cater for that
! feature and ‘.rodata’ stays in flash: The compiler just generates ‘LD*’
  instructions, and the linker script adds core specific offsets to all
! ‘.rodata’ symbols: ‘0x4000’ in the case of ‘avrtiny’ and ‘0x8000’ in the
! case of ‘avrxmega3’.  See *note AVR Options:: for a list of respective
  devices.
  
!  For devices not in ‘avrtiny’ or ‘avrxmega3’, any data including
  read-only data is located in RAM (the generic address space) because
  flash memory is not visible in the RAM address space.  In order to
  locate read-only data in flash memory _and_ to generate the right
  instructions to access this data without using (inline) assembler code,
  special address spaces are needed.
  
! ‘__flash’
!      The ‘__flash’ qualifier locates data in the ‘.progmem.data’
!      section.  Data is read using the ‘LPM’ instruction.  Pointers to
       this address space are 16 bits wide.
  
! ‘__flash1’
! ‘__flash2’
! ‘__flash3’
! ‘__flash4’
! ‘__flash5’
       These are 16-bit address spaces locating data in section
!      ‘.progmemN.data’ where N refers to address space ‘__flashN’.  The
!      compiler sets the ‘RAMPZ’ segment register appropriately before
!      reading data by means of the ‘ELPM’ instruction.
  
! ‘__memx’
       This is a 24-bit address space that linearizes flash and RAM: If
       the high bit of the address is set, data is read from RAM using the
       lower two bytes as RAM address.  If the high bit of the address is
!      clear, data is read from flash with ‘RAMPZ’ set according to the
!      high byte of the address.  *Note ‘__builtin_avr_flash_segment’: AVR
       Built-in Functions.
  
!      Objects in this address space are located in ‘.progmemx.data’.
  
   Example
  
*************** not:
*** 36534,36596 ****
       }
       #endif /* __FLASH */
  
! Notice that attribute *note 'progmem': AVR Variable Attributes. locates
  data in flash but accesses to these data read from generic address
  space, i.e. from RAM, so that you need special accessors like
! 'pgm_read_byte' from
  AVR-LibC (https://www.nongnu.org/avr-libc/user-manual/) together with
! attribute 'progmem'.
  
  Limitations and Caveats
  
!    * Reading across the 64 KiB section boundary of the '__flash' or
!      '__flashN' address spaces shows undefined behavior.  The only
       address space that supports reading across the 64 KiB flash segment
!      boundaries is '__memx'.
  
!    * If you use one of the '__flashN' address spaces you must arrange
!      your linker script to locate the '.progmemN.data' sections
       according to your needs.  For an example, see the
       avr-gcc wiki (https://gcc.gnu.org/wiki/avr-gcc#Address_Spaces)
  
!    * Any data or pointers to the non-generic address spaces must be
!      qualified as 'const', i.e. as read-only data.  This still applies
       if the data in one of these address spaces like software version
       number or calibration lookup table are intended to be changed after
       load time by, say, a boot loader.  In this case the right
!      qualification is 'const' 'volatile' so that the compiler must not
       optimize away known values or insert them as immediates into
       operands of instructions.
  
!    * The following code initializes a variable 'pfoo' located in static
       storage with a 24-bit address:
            extern const __memx char foo;
            const __memx void *pfoo = &foo;
  
!    * On the reduced Tiny devices like ATtiny40, no address spaces are
       supported.  Just use vanilla C / C++ code without overhead as
!      outlined above.  Attribute 'progmem' is supported but works
       differently, see *note AVR Variable Attributes::.
  
  6.17.2 M32C Named Address Spaces
  --------------------------------
  
  On the M32C target, with the R8C and M16C CPU variants, variables
! qualified with '__far' are accessed using 32-bit addresses in order to
! access memory beyond the first 64 Ki bytes.  If '__far' is used with the
  M32CM or M32C CPU variants, it has no effect.
  
  6.17.3 PRU Named Address Spaces
  -------------------------------
  
! On the PRU target, variables qualified with '__regio_symbol' are aliases
  used to access the special I/O CPU registers.  They must be declared as
! 'extern' because such variables will not be allocated in any data
! memory.  They must also be marked as 'volatile', and can only be 32-bit
! integer types.  The only names those variables can have are '__R30' and
! '__R31', representing respectively the 'R30' and 'R31' special I/O CPU
  registers.  Hence the following example is the only valid usage of
! '__regio_symbol':
  
       extern volatile __regio_symbol uint32_t __R30;
       extern volatile __regio_symbol uint32_t __R31;
--- 36544,36606 ----
       }
       #endif /* __FLASH */
  
! Notice that attribute *note ‘progmem’: AVR Variable Attributes. locates
  data in flash but accesses to these data read from generic address
  space, i.e. from RAM, so that you need special accessors like
! ‘pgm_read_byte’ from
  AVR-LibC (https://www.nongnu.org/avr-libc/user-manual/) together with
! attribute ‘progmem’.
  
  Limitations and Caveats
  
!    • Reading across the 64 KiB section boundary of the ‘__flash’ or
!      ‘__flashN’ address spaces shows undefined behavior.  The only
       address space that supports reading across the 64 KiB flash segment
!      boundaries is ‘__memx’.
  
!    • If you use one of the ‘__flashN’ address spaces you must arrange
!      your linker script to locate the ‘.progmemN.data’ sections
       according to your needs.  For an example, see the
       avr-gcc wiki (https://gcc.gnu.org/wiki/avr-gcc#Address_Spaces)
  
!    • Any data or pointers to the non-generic address spaces must be
!      qualified as ‘const’, i.e. as read-only data.  This still applies
       if the data in one of these address spaces like software version
       number or calibration lookup table are intended to be changed after
       load time by, say, a boot loader.  In this case the right
!      qualification is ‘const’ ‘volatile’ so that the compiler must not
       optimize away known values or insert them as immediates into
       operands of instructions.
  
!    • The following code initializes a variable ‘pfoo’ located in static
       storage with a 24-bit address:
            extern const __memx char foo;
            const __memx void *pfoo = &foo;
  
!    • On the reduced Tiny devices like ATtiny40, no address spaces are
       supported.  Just use vanilla C / C++ code without overhead as
!      outlined above.  Attribute ‘progmem’ is supported but works
       differently, see *note AVR Variable Attributes::.
  
  6.17.2 M32C Named Address Spaces
  --------------------------------
  
  On the M32C target, with the R8C and M16C CPU variants, variables
! qualified with ‘__far’ are accessed using 32-bit addresses in order to
! access memory beyond the first 64 Ki bytes.  If ‘__far’ is used with the
  M32CM or M32C CPU variants, it has no effect.
  
  6.17.3 PRU Named Address Spaces
  -------------------------------
  
! On the PRU target, variables qualified with ‘__regio_symbol’ are aliases
  used to access the special I/O CPU registers.  They must be declared as
! ‘extern’ because such variables will not be allocated in any data
! memory.  They must also be marked as ‘volatile’, and can only be 32-bit
! integer types.  The only names those variables can have are ‘__R30’ and
! ‘__R31’, representing respectively the ‘R30’ and ‘R31’ special I/O CPU
  registers.  Hence the following example is the only valid usage of
! ‘__regio_symbol’:
  
       extern volatile __regio_symbol uint32_t __R30;
       extern volatile __regio_symbol uint32_t __R31;
*************** registers.  Hence the following example
*** 36598,36604 ****
  6.17.4 RL78 Named Address Spaces
  --------------------------------
  
! On the RL78 target, variables qualified with '__far' are accessed with
  32-bit pointers (20-bit addresses) rather than the default 16-bit
  addresses.  Non-far variables are assumed to appear in the topmost
  64 KiB of the address space.
--- 36608,36614 ----
  6.17.4 RL78 Named Address Spaces
  --------------------------------
  
! On the RL78 target, variables qualified with ‘__far’ are accessed with
  32-bit pointers (20-bit addresses) rather than the default 16-bit
  addresses.  Non-far variables are assumed to appear in the topmost
  64 KiB of the address space.
*************** addresses.  Non-far variables are assume
*** 36607,36616 ****
  -------------------------------
  
  On the x86 target, variables may be declared as being relative to the
! '%fs' or '%gs' segments.
  
! '__seg_fs'
! '__seg_gs'
       The object is accessed with the respective segment override prefix.
  
       The respective segment base must be set via some method specific to
--- 36617,36626 ----
  -------------------------------
  
  On the x86 target, variables may be declared as being relative to the
! ‘%fs’ or ‘%gs’ segments.
  
! ‘__seg_fs’
! ‘__seg_gs’
       The object is accessed with the respective segment override prefix.
  
       The respective segment base must be set via some method specific to
*************** On the x86 target, variables may be decl
*** 36619,36628 ****
       considered to be subspaces of the generic (flat) address space.
       This means that explicit casts are required to convert pointers
       between these address spaces and the generic address space.  In
!      practice the application should cast to 'uintptr_t' and apply the
       segment base offset that it installed previously.
  
!      The preprocessor symbols '__SEG_FS' and '__SEG_GS' are defined when
       these address spaces are supported.
  
  
--- 36629,36638 ----
       considered to be subspaces of the generic (flat) address space.
       This means that explicit casts are required to convert pointers
       between these address spaces and the generic address space.  In
!      practice the application should cast to ‘uintptr_t’ and apply the
       segment base offset that it installed previously.
  
!      The preprocessor symbols ‘__SEG_FS’ and ‘__SEG_GS’ are defined when
       these address spaces are supported.
  
  
*************** is really a header for a variable-length
*** 36644,36651 ****
         malloc (sizeof (struct line) + this_length);
       thisline->length = this_length;
  
!  In this example, 'thisline->contents' is an array of 'char' that can
! hold up to 'thisline->length' bytes.
  
   Although the size of a zero-length array is zero, an array member of
  this kind may increase the size of the enclosing type as a result of
--- 36654,36661 ----
         malloc (sizeof (struct line) + this_length);
       thisline->length = this_length;
  
!  In this example, ‘thisline->contents’ is an array of ‘char’ that can
! hold up to ‘thisline->length’ bytes.
  
   Although the size of a zero-length array is zero, an array member of
  this kind may increase the size of the enclosing type as a result of
*************** Accessing elements of zero-length arrays
*** 36660,36666 ****
  undefined and may be diagnosed.
  
   In the absence of the zero-length array extension, in ISO C90 the
! 'contents' array in the example above would typically be declared to
  have a single element.  Unlike a zero-length array which only
  contributes to the size of the enclosing structure for the purposes of
  alignment, a one-element array always occupies at least as much space as
--- 36670,36676 ----
  undefined and may be diagnosed.
  
   In the absence of the zero-length array extension, in ISO C90 the
! ‘contents’ array in the example above would typically be declared to
  have a single element.  Unlike a zero-length array which only
  contributes to the size of the enclosing structure for the purposes of
  alignment, a one-element array always occupies at least as much space as
*************** a single object of the type.  Although u
*** 36668,36698 ****
  is discouraged, GCC handles accesses to trailing one-element array
  members analogously to zero-length arrays.
  
!  The preferred mechanism to declare variable-length types like 'struct
! line' above is the ISO C99 "flexible array member", with slightly
  different syntax and semantics:
  
!    * Flexible array members are written as 'contents[]' without the '0'.
  
!    * Flexible array members have incomplete type, and so the 'sizeof'
       operator may not be applied.  As a quirk of the original
!      implementation of zero-length arrays, 'sizeof' evaluates to zero.
  
!    * Flexible array members may only appear as the last member of a
!      'struct' that is otherwise non-empty.
  
!    * A structure containing a flexible array member, or a union
       containing such a structure (possibly recursively), may not be a
       member of a structure or an element of an array.  (However, these
       uses are permitted by GCC as extensions, see details below.)
  
!  The GCC extension accepts a structure containing an ISO C99 "flexible
! array member", or a union containing such a structure (possibly
  recursively) to be a member of a structure.
  
   There are two situations:
  
!    * A structure containing a C99 flexible array member, or a union
       containing such a structure, is the last field of another
       structure, for example:
  
--- 36678,36708 ----
  is discouraged, GCC handles accesses to trailing one-element array
  members analogously to zero-length arrays.
  
!  The preferred mechanism to declare variable-length types like ‘struct
! line’ above is the ISO C99 “flexible array member”, with slightly
  different syntax and semantics:
  
!    • Flexible array members are written as ‘contents[]’ without the ‘0’.
  
!    • Flexible array members have incomplete type, and so the ‘sizeof’
       operator may not be applied.  As a quirk of the original
!      implementation of zero-length arrays, ‘sizeof’ evaluates to zero.
  
!    • Flexible array members may only appear as the last member of a
!      ‘struct’ that is otherwise non-empty.
  
!    • A structure containing a flexible array member, or a union
       containing such a structure (possibly recursively), may not be a
       member of a structure or an element of an array.  (However, these
       uses are permitted by GCC as extensions, see details below.)
  
!  The GCC extension accepts a structure containing an ISO C99 “flexible
! array member”, or a union containing such a structure (possibly
  recursively) to be a member of a structure.
  
   There are two situations:
  
!    • A structure containing a C99 flexible array member, or a union
       containing such a structure, is the last field of another
       structure, for example:
  
*************** recursively) to be a member of a structu
*** 36702,36712 ****
            struct out_flex_struct { int m; struct flex flex_data; };
            struct out_flex_union { int n; union union_flex flex_data; };
  
!      In the above, both 'out_flex_struct.flex_data.data[]' and
!      'out_flex_union.flex_data.f.data[]' are considered as flexible
       arrays too.
  
!    * A structure containing a C99 flexible array member, or a union
       containing such a structure, is not the last field of another
       structure, for example:
  
--- 36712,36722 ----
            struct out_flex_struct { int m; struct flex flex_data; };
            struct out_flex_union { int n; union union_flex flex_data; };
  
!      In the above, both ‘out_flex_struct.flex_data.data[]’ and
!      ‘out_flex_union.flex_data.f.data[]’ are considered as flexible
       arrays too.
  
!    • A structure containing a C99 flexible array member, or a union
       containing such a structure, is not the last field of another
       structure, for example:
  
*************** recursively) to be a member of a structu
*** 36715,36726 ****
            struct mid_flex { int m; struct flex flex_data; int n; };
  
       In the above, accessing a member of the array
!      'mid_flex.flex_data.data[]' might have undefined behavior.
       Compilers do not handle such a case consistently.  Any code relying
       on this case should be modified to ensure that flexible array
       members only end up at the ends of structures.
  
!      Please use the warning option '-Wflex-array-member-not-at-end' to
       identify all such cases in the source code and modify them.  This
       extension is now deprecated.
  
--- 36725,36736 ----
            struct mid_flex { int m; struct flex flex_data; int n; };
  
       In the above, accessing a member of the array
!      ‘mid_flex.flex_data.data[]’ might have undefined behavior.
       Compilers do not handle such a case consistently.  Any code relying
       on this case should be modified to ensure that flexible array
       members only end up at the ends of structures.
  
!      Please use the warning option ‘-Wflex-array-member-not-at-end’ to
       identify all such cases in the source code and modify them.  This
       extension is now deprecated.
  
*************** excess elements (all of them, in this ca
*** 36732,36738 ****
   GCC allows static initialization of flexible array members.  This is
  equivalent to defining a new structure containing the original structure
  followed by an array of sufficient size to contain the data.  E.g. in
! the following, 'f1' is constructed as if it were declared like 'f2'.
  
       struct f1 {
         int x; int y[];
--- 36742,36748 ----
   GCC allows static initialization of flexible array members.  This is
  equivalent to defining a new structure containing the original structure
  followed by an array of sufficient size to contain the data.  E.g. in
! the following, ‘f1’ is constructed as if it were declared like ‘f2’.
  
       struct f1 {
         int x; int y[];
*************** the following, 'f1' is constructed as if
*** 36742,36752 ****
         struct f1 f1; int data[3];
       } f2 = { { 1 }, { 2, 3, 4 } };
  
! The convenience of this extension is that 'f1' has the desired type,
! eliminating the need to consistently refer to 'f2.f1'.
  
   This has symmetry with normal static arrays, in that an array of
! unknown size is also written with '[]'.
  
   Of course, this extension only makes sense if the extra data comes at
  the end of a top-level object, as otherwise we would be overwriting data
--- 36752,36762 ----
         struct f1 f1; int data[3];
       } f2 = { { 1 }, { 2, 3, 4 } };
  
! The convenience of this extension is that ‘f1’ has the desired type,
! eliminating the need to consistently refer to ‘f2.f1’.
  
   This has symmetry with normal static arrays, in that an array of
! unknown size is also written with ‘[]’.
  
   Of course, this extension only makes sense if the extra data comes at
  the end of a top-level object, as otherwise we would be overwriting data
*************** GCC permits a C structure to have no mem
*** 36776,36782 ****
  
   The structure has size zero.  In C++, empty structures are part of the
  language.  G++ treats empty structures as if they had a single member of
! type 'char'.
  
  
  File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
--- 36786,36792 ----
  
   The structure has size zero.  In C++, empty structures are part of the
  language.  G++ treats empty structures as if they had a single member of
! type ‘char’.
  
  
  File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
*************** structure or a union.  For example:
*** 36813,36827 ****
         struct S { int x[n]; };
       }
  
!  You can use the function 'alloca' to get an effect much like
! variable-length arrays.  The function 'alloca' is available in many
  other C implementations (but not in all).  On the other hand,
  variable-length arrays are more elegant.
  
   There are other differences between these two methods.  Space allocated
! with 'alloca' exists until the containing _function_ returns.  The space
  for a variable-length array is deallocated as soon as the array name's
! scope ends, unless you also use 'alloca' in this scope.
  
   You can also use variable-length arrays as arguments to functions:
  
--- 36823,36837 ----
         struct S { int x[n]; };
       }
  
!  You can use the function ‘alloca’ to get an effect much like
! variable-length arrays.  The function ‘alloca’ is available in many
  other C implementations (but not in all).  On the other hand,
  variable-length arrays are more elegant.
  
   There are other differences between these two methods.  Space allocated
! with ‘alloca’ exists until the containing _function_ returns.  The space
  for a variable-length array is deallocated as soon as the array name's
! scope ends, unless you also use ‘alloca’ in this scope.
  
   You can also use variable-length arrays as arguments to functions:
  
*************** scope ends, unless you also use 'alloca'
*** 36833,36839 ****
  
   The length of an array is computed once when the storage is allocated
  and is remembered for the scope of the array in case you access it with
! 'sizeof'.
  
   If you want to pass the array first and the length afterward, you can
  use a forward declaration in the parameter list--another GNU extension.
--- 36843,36849 ----
  
   The length of an array is computed once when the storage is allocated
  and is remembered for the scope of the array in case you access it with
! ‘sizeof’.
  
   If you want to pass the array first and the length afterward, you can
  use a forward declaration in the parameter list--another GNU extension.
*************** use a forward declaration in the paramet
*** 36844,36852 ****
         /* ... */
       }
  
!  The 'int len' before the semicolon is a "parameter forward
! declaration", and it serves the purpose of making the name 'len' known
! when the declaration of 'data' is parsed.
  
   You can write any number of such parameter forward declarations in the
  parameter list.  They can be separated by commas or semicolons, but the
--- 36854,36862 ----
         /* ... */
       }
  
!  The ‘int len’ before the semicolon is a “parameter forward
! declaration”, and it serves the purpose of making the name ‘len’ known
! when the declaration of ‘data’ is parsed.
  
   You can write any number of such parameter forward declarations in the
  parameter list.  They can be separated by commas or semicolons, but the
*************** example:
*** 36868,36877 ****
  
       #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
  
! Here '...' is a "variable argument".  In the invocation of such a macro,
  it represents the zero or more tokens until the closing parenthesis that
  ends the invocation, including any commas.  This set of tokens replaces
! the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
  the CPP manual for more information.
  
   GCC has long supported variadic macros, and used a different syntax
--- 36878,36887 ----
  
       #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
  
! Here ‘...’ is a “variable argument”.  In the invocation of such a macro,
  it represents the zero or more tokens until the closing parenthesis that
  ends the invocation, including any commas.  This set of tokens replaces
! the identifier ‘__VA_ARGS__’ in the macro body wherever it appears.  See
  the CPP manual for more information.
  
   GCC has long supported variadic macros, and used a different syntax
*************** the expansion of the macro still has the
*** 36899,36910 ****
  string.
  
   To help solve this problem, CPP behaves specially for variable
! arguments used with the token paste operator, '##'.  If instead you
  write
  
       #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
  
! and if the variable arguments are omitted or empty, the '##' operator
  causes the preprocessor to remove the comma before it.  If you do
  provide some variable arguments in your macro invocation, GNU CPP does
  not complain about the paste operation and instead places the variable
--- 36909,36920 ----
  string.
  
   To help solve this problem, CPP behaves specially for variable
! arguments used with the token paste operator, ‘##’.  If instead you
  write
  
       #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
  
! and if the variable arguments are omitted or empty, the ‘##’ operator
  causes the preprocessor to remove the comma before it.  If you do
  provide some variable arguments in your macro invocation, GNU CPP does
  not complain about the paste operation and instead places the variable
*************** File: gcc.info,  Node: Subscripting,  Ne
*** 36936,36942 ****
  
  In ISO C99, arrays that are not lvalues still decay to pointers, and may
  be subscripted, although they may not be modified or used after the next
! sequence point and the unary '&' operator may not be applied to them.
  As an extension, GNU C allows such arrays to be subscripted in C90 mode,
  though otherwise they do not decay to pointers outside C99 mode.  For
  example, this is valid in GNU C though not valid in C90:
--- 36946,36952 ----
  
  In ISO C99, arrays that are not lvalues still decay to pointers, and may
  be subscripted, although they may not be modified or used after the next
! sequence point and the unary ‘&’ operator may not be applied to them.
  As an extension, GNU C allows such arrays to be subscripted in C90 mode,
  though otherwise they do not decay to pointers outside C99 mode.  For
  example, this is valid in GNU C though not valid in C90:
*************** example, this is valid in GNU C though n
*** 36953,36969 ****
  
  File: gcc.info,  Node: Pointer Arith,  Next: Variadic Pointer Args,  Prev: Subscripting,  Up: C Extensions
  
! 6.24 Arithmetic on 'void'- and Function-Pointers
  ================================================
  
  In GNU C, addition and subtraction operations are supported on pointers
! to 'void' and on pointers to functions.  This is done by treating the
! size of a 'void' or of a function as 1.
  
!  A consequence of this is that 'sizeof' is also allowed on 'void' and on
  function types, and returns 1.
  
!  The option '-Wpointer-arith' requests a warning if these extensions are
  used.
  
  
--- 36963,36979 ----
  
  File: gcc.info,  Node: Pointer Arith,  Next: Variadic Pointer Args,  Prev: Subscripting,  Up: C Extensions
  
! 6.24 Arithmetic on ‘void’- and Function-Pointers
  ================================================
  
  In GNU C, addition and subtraction operations are supported on pointers
! to ‘void’ and on pointers to functions.  This is done by treating the
! size of a ‘void’ or of a function as 1.
  
!  A consequence of this is that ‘sizeof’ is also allowed on ‘void’ and on
  function types, and returns 1.
  
!  The option ‘-Wpointer-arith’ requests a warning if these extensions are
  used.
  
  
*************** File: gcc.info,  Node: Variadic Pointer
*** 36972,36985 ****
  6.25 Pointer Arguments in Variadic Functions
  ============================================
  
! Standard C requires that pointer types used with 'va_arg' in functions
  with variable argument lists either must be compatible with that of the
! actual argument, or that one type must be a pointer to 'void' and the
  other a pointer to a character type.  GNU C implements the POSIX XSI
! extension that additionally permits the use of 'va_arg' with a pointer
  type to receive arguments of any other pointer type.
  
!  In particular, in GNU C 'va_arg (ap, void *)' can safely be used to
  consume an argument of any pointer type.
  
  
--- 36982,36995 ----
  6.25 Pointer Arguments in Variadic Functions
  ============================================
  
! Standard C requires that pointer types used with ‘va_arg’ in functions
  with variable argument lists either must be compatible with that of the
! actual argument, or that one type must be a pointer to ‘void’ and the
  other a pointer to a character type.  GNU C implements the POSIX XSI
! extension that additionally permits the use of ‘va_arg’ with a pointer
  type to receive arguments of any other pointer type.
  
!  In particular, in GNU C ‘va_arg (ap, void *)’ can safely be used to
  consume an argument of any pointer type.
  
  
*************** File: gcc.info,  Node: Pointers to Array
*** 36989,36997 ****
  ========================================================
  
  In GNU C, pointers to arrays with qualifiers work similar to pointers to
! other qualified types.  For example, a value of type 'int (*)[5]' can be
! used to initialize a variable of type 'const int (*)[5]'.  These types
! are incompatible in ISO C because the 'const' qualifier is formally
  attached to the element type of the array and not the array itself.
  
       extern void
--- 36999,37007 ----
  ========================================================
  
  In GNU C, pointers to arrays with qualifiers work similar to pointers to
! other qualified types.  For example, a value of type ‘int (*)[5]’ can be
! used to initialize a variable of type ‘const int (*)[5]’.  These types
! are incompatible in ISO C because the ‘const’ qualifier is formally
  attached to the element type of the array and not the array itself.
  
       extern void
*************** literals also in C90 mode and in C++, al
*** 37033,37043 ****
  C++ semantics are somewhat different.
  
   Usually, the specified type of a compound literal is a structure.
! Assume that 'struct foo' and 'structure' are declared as shown:
  
       struct foo {int a; char b[2];} structure;
  
! Here is an example of constructing a 'struct foo' with a compound
  literal:
  
       structure = ((struct foo) {x + y, 'a', 0});
--- 37043,37053 ----
  C++ semantics are somewhat different.
  
   Usually, the specified type of a compound literal is a structure.
! Assume that ‘struct foo’ and ‘structure’ are declared as shown:
  
       struct foo {int a; char b[2];} structure;
  
! Here is an example of constructing a ‘struct foo’ with a compound
  literal:
  
       structure = ((struct foo) {x + y, 'a', 0});
*************** initializer, as shown here:
*** 37059,37066 ****
       char **foo = (char *[]) { "x", "y", "z" };
  
   Compound literals for scalar types and union types are also allowed.
! In the following example the variable 'i' is initialized to the value
! '2', the result of incrementing the unnamed object created by the
  compound literal.
  
       int i = ++(int) { 1 };
--- 37069,37076 ----
       char **foo = (char *[]) { "x", "y", "z" };
  
   Compound literals for scalar types and union types are also allowed.
! In the following example the variable ‘i’ is initialized to the value
! ‘2’, the result of incrementing the unnamed object created by the
  compound literal.
  
       int i = ++(int) { 1 };
*************** As a result, well-defined C code that ta
*** 37090,37102 ****
  of a compound literal can be undefined in C++, so G++ rejects the
  conversion of a temporary array to a pointer.  For instance, if the
  array compound literal example above appeared inside a function, any
! subsequent use of 'foo' in C++ would have undefined behavior because the
! lifetime of the array ends after the declaration of 'foo'.
  
   As an optimization, G++ sometimes gives array compound literals longer
  lifetimes: when the array either appears outside a function or has a
! 'const'-qualified type.  If 'foo' and its initializer had elements of
! type 'char *const' rather than 'char *', or if 'foo' were a global
  variable, the array would have static storage duration.  But it is
  probably safest just to avoid the use of array compound literals in C++
  code.
--- 37100,37112 ----
  of a compound literal can be undefined in C++, so G++ rejects the
  conversion of a temporary array to a pointer.  For instance, if the
  array compound literal example above appeared inside a function, any
! subsequent use of ‘foo’ in C++ would have undefined behavior because the
! lifetime of the array ends after the declaration of ‘foo’.
  
   As an optimization, G++ sometimes gives array compound literals longer
  lifetimes: when the array either appears outside a function or has a
! ‘const’-qualified type.  If ‘foo’ and its initializer had elements of
! type ‘char *const’ rather than ‘char *’, or if ‘foo’ were a global
  variable, the array would have static storage duration.  But it is
  probably safest just to avoid the use of array compound literals in C++
  code.
*************** indices or structure field names they ap
*** 37116,37122 ****
  an extension in C90 mode as well.  This extension is not implemented in
  GNU C++.
  
!  To specify an array index, write '[INDEX] =' before the element value.
  For example,
  
       int a[6] = { [4] = 29, [2] = 15 };
--- 37126,37132 ----
  an extension in C90 mode as well.  This extension is not implemented in
  GNU C++.
  
!  To specify an array index, write ‘[INDEX] =’ before the element value.
  For example,
  
       int a[6] = { [4] = 29, [2] = 15 };
*************** The index values must be constant expres
*** 37129,37139 ****
  initialized is automatic.
  
   An alternative syntax for this that has been obsolete since GCC 2.5 but
! GCC still accepts is to write '[INDEX]' before the element value, with
! no '='.
  
!  To initialize a range of elements to the same value, write '[FIRST ...
! LAST] = VALUE'.  This is a GNU extension.  For example,
  
       int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
  
--- 37139,37149 ----
  initialized is automatic.
  
   An alternative syntax for this that has been obsolete since GCC 2.5 but
! GCC still accepts is to write ‘[INDEX]’ before the element value, with
! no ‘=’.
  
!  To initialize a range of elements to the same value, write ‘[FIRST ...
! LAST] = VALUE’.  This is a GNU extension.  For example,
  
       int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
  
*************** Note that the length of the array is the
*** 37144,37150 ****
  one.
  
   In a structure initializer, specify the name of a field to initialize
! with '.FIELDNAME =' before the element value.  For example, given the
  following structure,
  
       struct point { int x, y; };
--- 37154,37160 ----
  one.
  
   In a structure initializer, specify the name of a field to initialize
! with ‘.FIELDNAME =’ before the element value.  For example, given the
  following structure,
  
       struct point { int x, y; };
*************** is equivalent to
*** 37158,37171 ****
       struct point p = { xvalue, yvalue };
  
   Another syntax that has the same meaning, obsolete since GCC 2.5, is
! 'FIELDNAME:', as shown here:
  
       struct point p = { y: yvalue, x: xvalue };
  
   Omitted fields are implicitly initialized the same as for objects that
  have static storage duration.
  
!  The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
  use a designator (or the obsolete colon syntax) when initializing a
  union, to specify which element of the union should be used.  For
  example,
--- 37168,37181 ----
       struct point p = { xvalue, yvalue };
  
   Another syntax that has the same meaning, obsolete since GCC 2.5, is
! ‘FIELDNAME:’, as shown here:
  
       struct point p = { y: yvalue, x: xvalue };
  
   Omitted fields are implicitly initialized the same as for objects that
  have static storage duration.
  
!  The ‘[INDEX]’ or ‘.FIELDNAME’ is known as a “designator”.  You can also
  use a designator (or the obsolete colon syntax) when initializing a
  union, to specify which element of the union should be used.  For
  example,
*************** example,
*** 37174,37182 ****
  
       union foo f = { .d = 4 };
  
! converts 4 to a 'double' to store it in the union using the second
! element.  By contrast, casting 4 to type 'union foo' stores it into the
! union as the integer 'i', since it is an integer.  *Note Cast to
  Union::.
  
   You can combine this technique of naming elements with ordinary C
--- 37184,37192 ----
  
       union foo f = { .d = 4 };
  
! converts 4 to a ‘double’ to store it in the union using the second
! element.  By contrast, casting 4 to type ‘union foo’ stores it into the
! union as the integer ‘i’, since it is an integer.  *Note Cast to
  Union::.
  
   You can combine this technique of naming elements with ordinary C
*************** is equivalent to
*** 37191,37206 ****
       int a[6] = { 0, v1, v2, 0, v4, 0 };
  
   Labeling the elements of an array initializer is especially useful when
! the indices are characters or belong to an 'enum' type.  For example:
  
       int whitespace[256]
         = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
             ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
  
!  You can also write a series of '.FIELDNAME' and '[INDEX]' designators
! before an '=' to specify a nested subobject to initialize; the list is
  taken relative to the subobject corresponding to the closest surrounding
! brace pair.  For example, with the 'struct point' declaration above:
  
       struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
  
--- 37201,37216 ----
       int a[6] = { 0, v1, v2, 0, v4, 0 };
  
   Labeling the elements of an array initializer is especially useful when
! the indices are characters or belong to an ‘enum’ type.  For example:
  
       int whitespace[256]
         = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
             ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
  
!  You can also write a series of ‘.FIELDNAME’ and ‘[INDEX]’ designators
! before an ‘=’ to specify a nested subobject to initialize; the list is
  taken relative to the subobject corresponding to the closest surrounding
! brace pair.  For example, with the ‘struct point’ declaration above:
  
       struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
  
*************** File: gcc.info,  Node: Case Ranges,  Nex
*** 37218,37236 ****
  6.30 Case Ranges
  ================
  
! You can specify a range of consecutive values in a single 'case' label,
  like this:
  
       case LOW ... HIGH:
  
! This has the same effect as the proper number of individual 'case'
  labels, one for each integer value from LOW to HIGH, inclusive.
  
   This feature is especially useful for ranges of ASCII character codes:
  
       case 'A' ... 'Z':
  
!  *Be careful:* Write spaces around the '...', for otherwise it may be
  parsed wrong when you use it with integer values.  For example, write
  this:
  
--- 37228,37246 ----
  6.30 Case Ranges
  ================
  
! You can specify a range of consecutive values in a single ‘case’ label,
  like this:
  
       case LOW ... HIGH:
  
! This has the same effect as the proper number of individual ‘case’
  labels, one for each integer value from LOW to HIGH, inclusive.
  
   This feature is especially useful for ranges of ASCII character codes:
  
       case 'A' ... 'Z':
  
!  *Be careful:* Write spaces around the ‘...’, for otherwise it may be
  parsed wrong when you use it with integer values.  For example, write
  this:
  
*************** File: gcc.info,  Node: Cast to Union,  N
*** 37248,37255 ****
  
  A cast to a union type is a C extension not available in C++.  It looks
  just like ordinary casts with the constraint that the type specified is
! a union type.  You can specify the type either with the 'union' keyword
! or with a 'typedef' name that refers to a union.  The result of a cast
  to a union is a temporary rvalue of the union type with a member whose
  type matches that of the operand initialized to the value of the
  operand.  The effect of a cast to a union is similar to a compound
--- 37258,37265 ----
  
  A cast to a union type is a C extension not available in C++.  It looks
  just like ordinary casts with the constraint that the type specified is
! a union type.  You can specify the type either with the ‘union’ keyword
! or with a ‘typedef’ name that refers to a union.  The result of a cast
  to a union is a temporary rvalue of the union type with a member whose
  type matches that of the operand initialized to the value of the
  operand.  The effect of a cast to a union is similar to a compound
*************** following union and variables:
*** 37265,37271 ****
       double y;
       union foo z;
  
! both 'x' and 'y' can be cast to type 'union foo' and the following
  assignments
         z = (union foo) x;
         z = (union foo) y;
--- 37275,37281 ----
       double y;
       union foo z;
  
! both ‘x’ and ‘y’ can be cast to type ‘union foo’ and the following
  assignments
         z = (union foo) x;
         z = (union foo) y;
*************** assignments
*** 37273,37280 ****
         z = (union foo) { .i = x };
         z = (union foo) { .d = y };
  
!  However, '(union foo) FLT_MAX;' is not a valid cast because the union
! has no member of type 'float'.
  
   Using the cast as the right-hand side of an assignment to a variable of
  union type is equivalent to storing in a member of the union with the
--- 37283,37290 ----
         z = (union foo) { .i = x };
         z = (union foo) { .d = y };
  
!  However, ‘(union foo) FLT_MAX;’ is not a valid cast because the union
! has no member of type ‘float’.
  
   Using the cast as the right-hand side of an assignment to a variable of
  union type is equivalent to storing in a member of the union with the
*************** same type
*** 37282,37289 ****
  
       union foo u;
       /* ... */
!      u = (union foo) x  ==  u.i = x
!      u = (union foo) y  ==  u.d = y
  
   You can also use the union cast as a function argument:
  
--- 37292,37299 ----
  
       union foo u;
       /* ... */
!      u = (union foo) x  ≡  u.i = x
!      u = (union foo) y  ≡  u.d = y
  
   You can also use the union cast as a function argument:
  
*************** File: gcc.info,  Node: Function Attribut
*** 37319,37327 ****
  In GNU C and C++, you can use function attributes to specify certain
  function properties that may help the compiler optimize calls or check
  code more carefully for correctness.  For example, you can use
! attributes to specify that a function never returns ('noreturn'),
! returns a value depending only on the values of its arguments ('const'),
! or has 'printf'-style arguments ('format').
  
   You can also use attributes to control memory placement, code
  generation options or call/return conventions within the function being
--- 37329,37337 ----
  In GNU C and C++, you can use function attributes to specify certain
  function properties that may help the compiler optimize calls or check
  code more carefully for correctness.  For example, you can use
! attributes to specify that a function never returns (‘noreturn’),
! returns a value depending only on the values of its arguments (‘const’),
! or has ‘printf’-style arguments (‘format’).
  
   You can also use attributes to control memory placement, code
  generation options or call/return conventions within the function being
*************** most, if not all targets.  Those are des
*** 37334,37341 ****
  Function Attributes:: section.
  
   GCC provides two different ways to specify attributes: the traditional
! GNU syntax using '__attribute__ ((...))' annotations, and the newer
! standard C and C++ syntax using '[[...]]' with the 'gnu::' prefix on
  attribute names.  Note that the exact rules for placement of attributes
  in your source code are different depending on which syntax you use.
  *Note Attribute Syntax::, for details.
--- 37344,37351 ----
  Function Attributes:: section.
  
   GCC provides two different ways to specify attributes: the traditional
! GNU syntax using ‘__attribute__ ((...))’ annotations, and the newer
! standard C and C++ syntax using ‘[[...]]’ with the ‘gnu::’ prefix on
  attribute names.  Note that the exact rules for placement of attributes
  in your source code are different depending on which syntax you use.
  *Note Attribute Syntax::, for details.
*************** function is ignored with a warning.
*** 37347,37360 ****
  
   Some function attributes take one or more arguments that refer to the
  function's parameters by their positions within the function parameter
! list.  Such attribute arguments are referred to as "positional
! arguments".  Unless specified otherwise, positional arguments that
  specify properties of parameters with pointer types can also specify the
! same properties of the implicit C++ 'this' argument in non-static member
  functions, and of parameters of reference to a pointer type.  For
  ordinary functions, position one refers to the first parameter on the
  list.  In C++ non-static member functions, position one refers to the
! implicit 'this' pointer.  The same restrictions and effects apply to
  function attributes used with ordinary functions or C++ member
  functions.
  
--- 37357,37370 ----
  
   Some function attributes take one or more arguments that refer to the
  function's parameters by their positions within the function parameter
! list.  Such attribute arguments are referred to as “positional
! arguments”.  Unless specified otherwise, positional arguments that
  specify properties of parameters with pointer types can also specify the
! same properties of the implicit C++ ‘this’ argument in non-static member
  functions, and of parameters of reference to a pointer type.  For
  ordinary functions, position one refers to the first parameter on the
  list.  In C++ non-static member functions, position one refers to the
! implicit ‘this’ pointer.  The same restrictions and effects apply to
  function attributes used with ordinary functions or C++ member
  functions.
  
*************** functions.
*** 37362,37373 ****
  Attributes::), labels (*note Label Attributes::), enumerators (*note
  Enumerator Attributes::), statements (*note Statement Attributes::),
  types (*note Type Attributes::), and on field declarations (for
! 'tainted_args').
  
   There is some overlap between the purposes of attributes and pragmas
  (*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
! to use '__attribute__' to achieve a natural attachment of attributes to
! their corresponding declarations, whereas '#pragma' is of use for
  compatibility with other compilers or constructs that do not naturally
  form part of the grammar.
  
--- 37372,37383 ----
  Attributes::), labels (*note Label Attributes::), enumerators (*note
  Enumerator Attributes::), statements (*note Statement Attributes::),
  types (*note Type Attributes::), and on field declarations (for
! ‘tainted_args’).
  
   There is some overlap between the purposes of attributes and pragmas
  (*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
! to use ‘__attribute__’ to achieve a natural attachment of attributes to
! their corresponding declarations, whereas ‘#pragma’ is of use for
  compatibility with other compilers or constructs that do not naturally
  form part of the grammar.
  
*************** File: gcc.info,  Node: Common Function A
*** 37419,37464 ****
  
  The following attributes are supported on most targets.
  
! 'access (ACCESS-MODE, REF-INDEX)'
! 'access (ACCESS-MODE, REF-INDEX, SIZE-INDEX)'
  
!      The 'access' attribute enables the detection of invalid or unsafe
       accesses by functions to which they apply or their callers, as well
       as write-only accesses to objects that are never read from.  Such
       accesses may be diagnosed by warnings such as
!      '-Wstringop-overflow', '-Wuninitialized', '-Wunused', and others.
  
!      The 'access' attribute specifies that a function to whose
       by-reference arguments the attribute applies accesses the
       referenced object according to ACCESS-MODE.  The ACCESS-MODE
!      argument is required and must be one of four names: 'read_only',
!      'read_write', 'write_only', or 'none'.  The remaining two are
       positional arguments.
  
       The required REF-INDEX positional argument denotes a function
       argument of pointer (or in C++, reference) type that is subject to
       the access.  The same pointer argument can be referenced by at most
!      one distinct 'access' attribute.
  
       The optional SIZE-INDEX positional argument denotes a function
       argument of integer type that specifies the maximum size of the
       access.  The size is the number of elements of the type referenced
       by REF-INDEX, or the number of bytes when the pointer type is
!      'void*'.  When no SIZE-INDEX argument is specified, the pointer
       argument must be either null or point to a space that is suitably
       aligned and large for at least one object of the referenced type
       (this implies that a past-the-end pointer is not a valid argument).
       The actual size of the access may be less but it must not be more.
  
!      The 'read_only' access mode specifies that the pointer to which it
       applies is used to read the referenced object but not write to it.
       Unless the argument specifying the size of the access denoted by
       SIZE-INDEX is zero, the referenced object must be initialized.  The
!      mode implies a stronger guarantee than the 'const' qualifier which,
       when cast away from a pointer, does not prevent the pointed-to
!      object from being modified.  Examples of the use of the 'read_only'
!      access mode is the argument to the 'puts' function, or the second
!      and third arguments to the 'memcpy' function.
  
            __attribute__ ((access (read_only, 1)))
            int puts (const char*);
--- 37429,37474 ----
  
  The following attributes are supported on most targets.
  
! ‘access (ACCESS-MODE, REF-INDEX)’
! ‘access (ACCESS-MODE, REF-INDEX, SIZE-INDEX)’
  
!      The ‘access’ attribute enables the detection of invalid or unsafe
       accesses by functions to which they apply or their callers, as well
       as write-only accesses to objects that are never read from.  Such
       accesses may be diagnosed by warnings such as
!      ‘-Wstringop-overflow’, ‘-Wuninitialized’, ‘-Wunused’, and others.
  
!      The ‘access’ attribute specifies that a function to whose
       by-reference arguments the attribute applies accesses the
       referenced object according to ACCESS-MODE.  The ACCESS-MODE
!      argument is required and must be one of four names: ‘read_only’,
!      ‘read_write’, ‘write_only’, or ‘none’.  The remaining two are
       positional arguments.
  
       The required REF-INDEX positional argument denotes a function
       argument of pointer (or in C++, reference) type that is subject to
       the access.  The same pointer argument can be referenced by at most
!      one distinct ‘access’ attribute.
  
       The optional SIZE-INDEX positional argument denotes a function
       argument of integer type that specifies the maximum size of the
       access.  The size is the number of elements of the type referenced
       by REF-INDEX, or the number of bytes when the pointer type is
!      ‘void*’.  When no SIZE-INDEX argument is specified, the pointer
       argument must be either null or point to a space that is suitably
       aligned and large for at least one object of the referenced type
       (this implies that a past-the-end pointer is not a valid argument).
       The actual size of the access may be less but it must not be more.
  
!      The ‘read_only’ access mode specifies that the pointer to which it
       applies is used to read the referenced object but not write to it.
       Unless the argument specifying the size of the access denoted by
       SIZE-INDEX is zero, the referenced object must be initialized.  The
!      mode implies a stronger guarantee than the ‘const’ qualifier which,
       when cast away from a pointer, does not prevent the pointed-to
!      object from being modified.  Examples of the use of the ‘read_only’
!      access mode is the argument to the ‘puts’ function, or the second
!      and third arguments to the ‘memcpy’ function.
  
            __attribute__ ((access (read_only, 1)))
            int puts (const char*);
*************** The following attributes are supported o
*** 37466,37489 ****
            __attribute__ ((access (read_only, 2, 3)))
            void* memcpy (void*, const void*, size_t);
  
!      The 'read_write' access mode applies to arguments of pointer types
!      without the 'const' qualifier.  It specifies that the pointer to
       which it applies is used to both read and write the referenced
       object.  Unless the argument specifying the size of the access
       denoted by SIZE-INDEX is zero, the object referenced by the pointer
!      must be initialized.  An example of the use of the 'read_write'
!      access mode is the first argument to the 'strcat' function.
  
            __attribute__ ((access (read_write, 1), access (read_only, 2)))
            char* strcat (char*, const char*);
  
!      The 'write_only' access mode applies to arguments of pointer types
!      without the 'const' qualifier.  It specifies that the pointer to
       which it applies is used to write to the referenced object but not
       read from it.  The object referenced by the pointer need not be
!      initialized.  An example of the use of the 'write_only' access mode
!      is the first argument to the 'strcpy' function, or the first two
!      arguments to the 'fgets' function.
  
            __attribute__ ((access (write_only, 1), access (read_only, 2)))
            char* strcpy (char*, const char*);
--- 37476,37499 ----
            __attribute__ ((access (read_only, 2, 3)))
            void* memcpy (void*, const void*, size_t);
  
!      The ‘read_write’ access mode applies to arguments of pointer types
!      without the ‘const’ qualifier.  It specifies that the pointer to
       which it applies is used to both read and write the referenced
       object.  Unless the argument specifying the size of the access
       denoted by SIZE-INDEX is zero, the object referenced by the pointer
!      must be initialized.  An example of the use of the ‘read_write’
!      access mode is the first argument to the ‘strcat’ function.
  
            __attribute__ ((access (read_write, 1), access (read_only, 2)))
            char* strcat (char*, const char*);
  
!      The ‘write_only’ access mode applies to arguments of pointer types
!      without the ‘const’ qualifier.  It specifies that the pointer to
       which it applies is used to write to the referenced object but not
       read from it.  The object referenced by the pointer need not be
!      initialized.  An example of the use of the ‘write_only’ access mode
!      is the first argument to the ‘strcpy’ function, or the first two
!      arguments to the ‘fgets’ function.
  
            __attribute__ ((access (write_only, 1), access (read_only, 2)))
            char* strcpy (char*, const char*);
*************** The following attributes are supported o
*** 37491,37517 ****
            __attribute__ ((access (write_only, 1, 2), access (read_write, 3)))
            int fgets (char*, int, FILE*);
  
!      The access mode 'none' specifies that the pointer to which it
       applies is not used to access the referenced object at all.  Unless
       the pointer is null the pointed-to object must exist and have at
       least the size as denoted by the SIZE-INDEX argument.  When the
!      optional SIZE-INDEX argument is omitted for an argument of 'void*'
       type the actual pointer agument is ignored.  The referenced object
       need not be initialized.  The mode is intended to be used as a
       means to help validate the expected object size, for example in
!      functions that call '__builtin_object_size'.  *Note Object Size
       Checking::.
  
!      Note that the 'access' attribute merely specifies how an object
       referenced by the pointer argument can be accessed; it does not
!      imply that an access *will* happen.  Also, the 'access' attribute
!      does not imply the attribute 'nonnull'; it may be appropriate to
       add both attributes at the declaration of a function that
       unconditionally manipulates a buffer via a pointer argument.  See
!      the 'nonnull' attribute for more information and caveats.
  
! 'alias ("TARGET")'
!      The 'alias' attribute causes the declaration to be emitted as an
       alias for another symbol, which must have been previously declared
       with the same type, and for variables, also the same size and
       alignment.  Declaring an alias with a different type than the
--- 37501,37527 ----
            __attribute__ ((access (write_only, 1, 2), access (read_write, 3)))
            int fgets (char*, int, FILE*);
  
!      The access mode ‘none’ specifies that the pointer to which it
       applies is not used to access the referenced object at all.  Unless
       the pointer is null the pointed-to object must exist and have at
       least the size as denoted by the SIZE-INDEX argument.  When the
!      optional SIZE-INDEX argument is omitted for an argument of ‘void*’
       type the actual pointer agument is ignored.  The referenced object
       need not be initialized.  The mode is intended to be used as a
       means to help validate the expected object size, for example in
!      functions that call ‘__builtin_object_size’.  *Note Object Size
       Checking::.
  
!      Note that the ‘access’ attribute merely specifies how an object
       referenced by the pointer argument can be accessed; it does not
!      imply that an access *will* happen.  Also, the ‘access’ attribute
!      does not imply the attribute ‘nonnull’; it may be appropriate to
       add both attributes at the declaration of a function that
       unconditionally manipulates a buffer via a pointer argument.  See
!      the ‘nonnull’ attribute for more information and caveats.
  
! ‘alias ("TARGET")’
!      The ‘alias’ attribute causes the declaration to be emitted as an
       alias for another symbol, which must have been previously declared
       with the same type, and for variables, also the same size and
       alignment.  Declaring an alias with a different type than the
*************** The following attributes are supported o
*** 37521,37540 ****
            void __f () { /* Do something. */; }
            void f () __attribute__ ((weak, alias ("__f")));
  
!      define 'f' to be a weak alias for '__f'.  In C++, the mangled name
!      for the target must be used.  It is an error if '__f' is not
       defined in the same translation unit.
  
       This attribute requires assembler and object file support, and may
       not be available on all targets.
  
! 'aligned'
! 'aligned (ALIGNMENT)'
!      The 'aligned' attribute specifies a minimum alignment for the first
       instruction of the function, measured in bytes.  When specified,
       ALIGNMENT must be an integer constant power of 2.  Specifying no
       ALIGNMENT argument implies the ideal alignment for the target.  The
!      '__alignof__' operator can be used to determine what that is (*note
       Alignment::).  The attribute has no effect when a definition for
       the function is not provided in the same translation unit.
  
--- 37531,37550 ----
            void __f () { /* Do something. */; }
            void f () __attribute__ ((weak, alias ("__f")));
  
!      define ‘f’ to be a weak alias for ‘__f’.  In C++, the mangled name
!      for the target must be used.  It is an error if ‘__f’ is not
       defined in the same translation unit.
  
       This attribute requires assembler and object file support, and may
       not be available on all targets.
  
! ‘aligned’
! ‘aligned (ALIGNMENT)’
!      The ‘aligned’ attribute specifies a minimum alignment for the first
       instruction of the function, measured in bytes.  When specified,
       ALIGNMENT must be an integer constant power of 2.  Specifying no
       ALIGNMENT argument implies the ideal alignment for the target.  The
!      ‘__alignof__’ operator can be used to determine what that is (*note
       Alignment::).  The attribute has no effect when a definition for
       the function is not provided in the same translation unit.
  
*************** The following attributes are supported o
*** 37544,37564 ****
       targets specify a minimum default alignment for functions that is
       greater than 1.  On such targets, specifying a less restrictive
       alignment is silently ignored.  Using the attribute overrides the
!      effect of the '-falign-functions' (*note Optimize Options::) option
       for this function.
  
!      Note that the effectiveness of 'aligned' attributes may be limited
       by inherent limitations in the system linker and/or object file
       format.  On some systems, the linker is only able to arrange for
       functions to be aligned up to a certain maximum alignment.  (For
       some linkers, the maximum supported alignment may be very very
       small.)  See your linker documentation for further information.
  
!      The 'aligned' attribute can also be used for variables and fields
       (*note Variable Attributes::.)
  
! 'alloc_align (POSITION)'
!      The 'alloc_align' attribute may be applied to a function that
       returns a pointer and takes at least one argument of an integer or
       enumerated type.  It indicates that the returned pointer is aligned
       on a boundary given by the function argument at POSITION.
--- 37554,37574 ----
       targets specify a minimum default alignment for functions that is
       greater than 1.  On such targets, specifying a less restrictive
       alignment is silently ignored.  Using the attribute overrides the
!      effect of the ‘-falign-functions’ (*note Optimize Options::) option
       for this function.
  
!      Note that the effectiveness of ‘aligned’ attributes may be limited
       by inherent limitations in the system linker and/or object file
       format.  On some systems, the linker is only able to arrange for
       functions to be aligned up to a certain maximum alignment.  (For
       some linkers, the maximum supported alignment may be very very
       small.)  See your linker documentation for further information.
  
!      The ‘aligned’ attribute can also be used for variables and fields
       (*note Variable Attributes::.)
  
! ‘alloc_align (POSITION)’
!      The ‘alloc_align’ attribute may be applied to a function that
       returns a pointer and takes at least one argument of an integer or
       enumerated type.  It indicates that the returned pointer is aligned
       on a boundary given by the function argument at POSITION.
*************** The following attributes are supported o
*** 37573,37591 ****
  
            void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1)));
  
!      declares that 'my_memalign' returns memory with minimum alignment
       given by parameter 1.
  
! 'alloc_size (POSITION)'
! 'alloc_size (POSITION-1, POSITION-2)'
!      The 'alloc_size' attribute may be applied to a function that
       returns a pointer and takes at least one argument of an integer or
       enumerated type.  It indicates that the returned pointer points to
       memory whose size is given by the function argument at POSITION-1,
       or by the product of the arguments at POSITION-1 and POSITION-2.
!      Meaningful sizes are positive values less than 'PTRDIFF_MAX'.  GCC
       uses this information to improve the results of
!      '__builtin_object_size'.
  
       The function parameter(s) denoting the allocated size are specified
       by one or two integer arguments supplied to the attribute.  The
--- 37583,37601 ----
  
            void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1)));
  
!      declares that ‘my_memalign’ returns memory with minimum alignment
       given by parameter 1.
  
! ‘alloc_size (POSITION)’
! ‘alloc_size (POSITION-1, POSITION-2)’
!      The ‘alloc_size’ attribute may be applied to a function that
       returns a pointer and takes at least one argument of an integer or
       enumerated type.  It indicates that the returned pointer points to
       memory whose size is given by the function argument at POSITION-1,
       or by the product of the arguments at POSITION-1 and POSITION-2.
!      Meaningful sizes are positive values less than ‘PTRDIFF_MAX’.  GCC
       uses this information to improve the results of
!      ‘__builtin_object_size’.
  
       The function parameter(s) denoting the allocated size are specified
       by one or two integer arguments supplied to the attribute.  The
*************** The following attributes are supported o
*** 37599,37609 ****
            void* my_calloc (size_t, size_t) __attribute__ ((alloc_size (1, 2)));
            void* my_realloc (void*, size_t) __attribute__ ((alloc_size (2)));
  
!      declares that 'my_calloc' returns memory of the size given by the
!      product of parameter 1 and 2 and that 'my_realloc' returns memory
       of the size given by parameter 2.
  
! 'always_inline'
       Generally, functions are not inlined unless optimization is
       specified.  For functions declared inline, this attribute inlines
       the function independent of any restrictions that otherwise apply
--- 37609,37619 ----
            void* my_calloc (size_t, size_t) __attribute__ ((alloc_size (1, 2)));
            void* my_realloc (void*, size_t) __attribute__ ((alloc_size (2)));
  
!      declares that ‘my_calloc’ returns memory of the size given by the
!      product of parameter 1 and 2 and that ‘my_realloc’ returns memory
       of the size given by parameter 2.
  
! ‘always_inline’
       Generally, functions are not inlined unless optimization is
       specified.  For functions declared inline, this attribute inlines
       the function independent of any restrictions that otherwise apply
*************** The following attributes are supported o
*** 37613,37628 ****
       and a failure to inline an indirect call may or may not be
       diagnosed.
  
! 'artificial'
       This attribute is useful for small inline wrappers that if possible
       should appear during debugging as a unit.  Depending on the debug
       info format it either means marking the function as artificial or
       using the caller location for all instructions within the inlined
       body.
  
! 'assume_aligned (ALIGNMENT)'
! 'assume_aligned (ALIGNMENT, OFFSET)'
!      The 'assume_aligned' attribute may be applied to a function that
       returns a pointer.  It indicates that the returned pointer is
       aligned on a boundary given by ALIGNMENT.  If the attribute has two
       arguments, the second argument is misalignment OFFSET.  Meaningful
--- 37623,37638 ----
       and a failure to inline an indirect call may or may not be
       diagnosed.
  
! ‘artificial’
       This attribute is useful for small inline wrappers that if possible
       should appear during debugging as a unit.  Depending on the debug
       info format it either means marking the function as artificial or
       using the caller location for all instructions within the inlined
       body.
  
! ‘assume_aligned (ALIGNMENT)’
! ‘assume_aligned (ALIGNMENT, OFFSET)’
!      The ‘assume_aligned’ attribute may be applied to a function that
       returns a pointer.  It indicates that the returned pointer is
       aligned on a boundary given by ALIGNMENT.  If the attribute has two
       arguments, the second argument is misalignment OFFSET.  Meaningful
*************** The following attributes are supported o
*** 37634,37644 ****
            void* my_alloc1 (size_t) __attribute__((assume_aligned (16)));
            void* my_alloc2 (size_t) __attribute__((assume_aligned (32, 8)));
  
!      declares that 'my_alloc1' returns 16-byte aligned pointers and that
!      'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
  
! 'cold'
!      The 'cold' attribute on functions is used to inform the compiler
       that the function is unlikely to be executed.  The function is
       optimized for size rather than speed and on many targets it is
       placed into a special subsection of the text section so all cold
--- 37644,37654 ----
            void* my_alloc1 (size_t) __attribute__((assume_aligned (16)));
            void* my_alloc2 (size_t) __attribute__((assume_aligned (32, 8)));
  
!      declares that ‘my_alloc1’ returns 16-byte aligned pointers and that
!      ‘my_alloc2’ returns a pointer whose value modulo 32 is equal to 8.
  
! ‘cold’
!      The ‘cold’ attribute on functions is used to inform the compiler
       that the function is unlikely to be executed.  The function is
       optimized for size rather than speed and on many targets it is
       placed into a special subsection of the text section so all cold
*************** The following attributes are supported o
*** 37646,37666 ****
       non-cold parts of program.  The paths leading to calls of cold
       functions within code are marked as unlikely by the branch
       prediction mechanism.  It is thus useful to mark functions used to
!      handle unlikely conditions, such as 'perror', as cold to improve
       optimization of hot functions that do call marked functions in rare
!      occasions.  In C++, the 'cold' attribute can be applied to types
       with the effect of being propagated to member functions.  See *note
       C++ Attributes::.
  
!      When profile feedback is available, via '-fprofile-use', cold
       functions are automatically detected and this attribute is ignored.
  
! 'const'
       Calls to functions whose return value is not affected by changes to
       the observable state of the program and that have no observable
       effects on such state other than to return a value may lend
       themselves to optimizations such as common subexpression
!      elimination.  Declaring such functions with the 'const' attribute
       allows GCC to avoid emitting some calls in repeated invocations of
       the function with the same argument values.
  
--- 37656,37676 ----
       non-cold parts of program.  The paths leading to calls of cold
       functions within code are marked as unlikely by the branch
       prediction mechanism.  It is thus useful to mark functions used to
!      handle unlikely conditions, such as ‘perror’, as cold to improve
       optimization of hot functions that do call marked functions in rare
!      occasions.  In C++, the ‘cold’ attribute can be applied to types
       with the effect of being propagated to member functions.  See *note
       C++ Attributes::.
  
!      When profile feedback is available, via ‘-fprofile-use’, cold
       functions are automatically detected and this attribute is ignored.
  
! ‘const’
       Calls to functions whose return value is not affected by changes to
       the observable state of the program and that have no observable
       effects on such state other than to return a value may lend
       themselves to optimizations such as common subexpression
!      elimination.  Declaring such functions with the ‘const’ attribute
       allows GCC to avoid emitting some calls in repeated invocations of
       the function with the same argument values.
  
*************** The following attributes are supported o
*** 37668,37706 ****
  
            int square (int) __attribute__ ((const));
  
!      tells GCC that subsequent calls to function 'square' with the same
       argument value can be replaced by the result of the first call
       regardless of the statements in between.
  
!      The 'const' attribute prohibits a function from reading objects
       that affect its return value between successive invocations.
       However, functions declared with the attribute can safely read
       objects that do not change their return value, such as non-volatile
       constants.
  
!      The 'const' attribute imposes greater restrictions on a function's
!      definition than the similar 'pure' attribute.  Declaring the same
!      function with both the 'const' and the 'pure' attribute is
       diagnosed.  Because a const function cannot have any observable
!      side effects it does not make sense for it to return 'void'.
       Declaring such a function is diagnosed.
  
       Note that a function that has pointer arguments and examines the
!      data pointed to must _not_ be declared 'const' if the pointed-to
       data might change between successive invocations of the function.
       In general, since a function cannot distinguish data that might
       change from data that cannot, const functions should never take
       pointer or, in C++, reference arguments.  Likewise, a function that
       calls a non-const function usually must not be const itself.
  
! 'constructor'
! 'destructor'
! 'constructor (PRIORITY)'
! 'destructor (PRIORITY)'
!      The 'constructor' attribute causes the function to be called
!      automatically before execution enters 'main ()'.  Similarly, the
!      'destructor' attribute causes the function to be called
!      automatically after 'main ()' completes or 'exit ()' is called.
       Functions with these attributes are useful for initializing data
       that is used implicitly during the execution of the program.
  
--- 37678,37716 ----
  
            int square (int) __attribute__ ((const));
  
!      tells GCC that subsequent calls to function ‘square’ with the same
       argument value can be replaced by the result of the first call
       regardless of the statements in between.
  
!      The ‘const’ attribute prohibits a function from reading objects
       that affect its return value between successive invocations.
       However, functions declared with the attribute can safely read
       objects that do not change their return value, such as non-volatile
       constants.
  
!      The ‘const’ attribute imposes greater restrictions on a function's
!      definition than the similar ‘pure’ attribute.  Declaring the same
!      function with both the ‘const’ and the ‘pure’ attribute is
       diagnosed.  Because a const function cannot have any observable
!      side effects it does not make sense for it to return ‘void’.
       Declaring such a function is diagnosed.
  
       Note that a function that has pointer arguments and examines the
!      data pointed to must _not_ be declared ‘const’ if the pointed-to
       data might change between successive invocations of the function.
       In general, since a function cannot distinguish data that might
       change from data that cannot, const functions should never take
       pointer or, in C++, reference arguments.  Likewise, a function that
       calls a non-const function usually must not be const itself.
  
! ‘constructor’
! ‘destructor’
! ‘constructor (PRIORITY)’
! ‘destructor (PRIORITY)’
!      The ‘constructor’ attribute causes the function to be called
!      automatically before execution enters ‘main ()’.  Similarly, the
!      ‘destructor’ attribute causes the function to be called
!      automatically after ‘main ()’ completes or ‘exit ()’ is called.
       Functions with these attributes are useful for initializing data
       that is used implicitly during the execution of the program.
  
*************** The following attributes are supported o
*** 37716,37751 ****
       those specified for namespace-scope C++ objects (*note C++
       Attributes::).  However, at present, the order in which
       constructors for C++ objects with static storage duration and
!      functions decorated with attribute 'constructor' are invoked is
!      unspecified.  In mixed declarations, attribute 'init_priority' can
       be used to impose a specific ordering.
  
!      Using the argument forms of the 'constructor' and 'destructor'
       attributes on targets where the feature is not supported is
       rejected with an error.
  
! 'copy'
! 'copy (FUNCTION)'
!      The 'copy' attribute applies the set of attributes with which
       FUNCTION has been declared to the declaration of the function to
       which the attribute is applied.  The attribute is designed for
       libraries that define aliases or function resolvers that are
       expected to specify the same set of attributes as their targets.
!      The 'copy' attribute can be used with functions, variables, or
       types.  However, the kind of symbol to which the attribute is
       applied (either function or variable) must match the kind of symbol
!      to which the argument refers.  The 'copy' attribute copies only
       syntactic and semantic attributes but not attributes that affect a
!      symbol's linkage or visibility such as 'alias', 'visibility', or
!      'weak'.  The 'deprecated' and 'target_clones' attribute are also
       not copied.  *Note Common Type Attributes::.  *Note Common Variable
       Attributes::.
  
!      For example, the STRONGALIAS macro below makes use of the 'alias'
!      and 'copy' attributes to define an alias named ALLOC for function
       ALLOCATE declared with attributes ALLOC_SIZE, MALLOC, and NOTHROW.
!      Thanks to the '__typeof__' operator the alias has the same type as
!      the target function.  As a result of the 'copy' attribute the alias
       also shares the same attributes as the target.
  
            #define StrongAlias(TargetFunc, AliasDecl)  \
--- 37726,37761 ----
       those specified for namespace-scope C++ objects (*note C++
       Attributes::).  However, at present, the order in which
       constructors for C++ objects with static storage duration and
!      functions decorated with attribute ‘constructor’ are invoked is
!      unspecified.  In mixed declarations, attribute ‘init_priority’ can
       be used to impose a specific ordering.
  
!      Using the argument forms of the ‘constructor’ and ‘destructor’
       attributes on targets where the feature is not supported is
       rejected with an error.
  
! ‘copy’
! ‘copy (FUNCTION)’
!      The ‘copy’ attribute applies the set of attributes with which
       FUNCTION has been declared to the declaration of the function to
       which the attribute is applied.  The attribute is designed for
       libraries that define aliases or function resolvers that are
       expected to specify the same set of attributes as their targets.
!      The ‘copy’ attribute can be used with functions, variables, or
       types.  However, the kind of symbol to which the attribute is
       applied (either function or variable) must match the kind of symbol
!      to which the argument refers.  The ‘copy’ attribute copies only
       syntactic and semantic attributes but not attributes that affect a
!      symbol's linkage or visibility such as ‘alias’, ‘visibility’, or
!      ‘weak’.  The ‘deprecated’ and ‘target_clones’ attribute are also
       not copied.  *Note Common Type Attributes::.  *Note Common Variable
       Attributes::.
  
!      For example, the STRONGALIAS macro below makes use of the ‘alias’
!      and ‘copy’ attributes to define an alias named ALLOC for function
       ALLOCATE declared with attributes ALLOC_SIZE, MALLOC, and NOTHROW.
!      Thanks to the ‘__typeof__’ operator the alias has the same type as
!      the target function.  As a result of the ‘copy’ attribute the alias
       also shares the same attributes as the target.
  
            #define StrongAlias(TargetFunc, AliasDecl)  \
*************** The following attributes are supported o
*** 37756,37764 ****
              void* allocate (size_t);
            StrongAlias (allocate, alloc);
  
! 'deprecated'
! 'deprecated (MSG)'
!      The 'deprecated' attribute results in a warning if the function is
       used anywhere in the source file.  This is useful when identifying
       functions that are expected to be removed in a future version of a
       program.  The warning also includes the location of the declaration
--- 37766,37774 ----
              void* allocate (size_t);
            StrongAlias (allocate, alloc);
  
! ‘deprecated’
! ‘deprecated (MSG)’
!      The ‘deprecated’ attribute results in a warning if the function is
       used anywhere in the source file.  This is useful when identifying
       functions that are expected to be removed in a future version of a
       program.  The warning also includes the location of the declaration
*************** The following attributes are supported o
*** 37774,37872 ****
       argument, which must be a string, is printed in the warning if
       present.
  
!      The 'deprecated' attribute can also be used for variables and types
       (*note Variable Attributes::, *note Type Attributes::.)
  
       The message attached to the attribute is affected by the setting of
!      the '-fmessage-length' option.
  
! 'error ("MESSAGE")'
! 'warning ("MESSAGE")'
!      If the 'error' or 'warning' attribute is used on a function
       declaration and a call to such a function is not eliminated through
       dead code elimination or other optimizations, an error or warning
       (respectively) that includes MESSAGE is diagnosed.  This is useful
       for compile-time checking, especially together with
!      '__builtin_constant_p' and inline functions where checking the
!      inline function arguments is not possible through 'extern char
!      [(condition) ? 1 : -1];' tricks.
  
       While it is possible to leave the function undefined and thus
       invoke a link failure (to define the function with a message in
!      '.gnu.warning*' section), when using these attributes the problem
       is diagnosed earlier and with exact location of the call even in
       presence of inline functions or when not emitting debugging
       information.
  
! 'expected_throw'
       This attribute, attached to a function, tells the compiler the
       function is more likely to raise or propagate an exception than to
       return, loop forever, or terminate the program.
  
       This hint is mostly ignored by the compiler.  The only effect is
!      when it's applied to 'noreturn' functions and
!      '-fharden-control-flow-redundancy' is enabled, and
!      '-fhardcfr-check-noreturn-calls=not-always' is not overridden.
  
! 'externally_visible'
       This attribute, attached to a global variable or function,
!      nullifies the effect of the '-fwhole-program' command-line option,
       so the object remains visible outside the current compilation unit.
  
!      If '-fwhole-program' is used together with '-flto' and 'gold' is
!      used as the linker plugin, 'externally_visible' attributes are
       automatically added to functions (not variable yet due to a current
!      'gold' issue) that are accessed outside of LTO objects according to
!      resolution file produced by 'gold'.  For other linkers that cannot
!      generate resolution file, explicit 'externally_visible' attributes
       are still necessary.
  
! 'fd_arg'
! 'fd_arg (N)'
!      The 'fd_arg' attribute may be applied to a function that takes an
       open file descriptor at referenced argument N.
  
       It indicates that the passed filedescriptor must not have been
!      closed.  Therefore, when the analyzer is enabled with '-fanalyzer',
!      the analyzer may emit a '-Wanalyzer-fd-use-after-close' diagnostic
       if it detects a code path in which a function with this attribute
       is called with a closed file descriptor.
  
       The attribute also indicates that the file descriptor must have
       been checked for validity before usage.  Therefore, analyzer may
!      emit '-Wanalyzer-fd-use-without-check' diagnostic if it detects a
       code path in which a function with this attribute is called with a
       file descriptor that has not been checked for validity.
  
! 'fd_arg_read'
! 'fd_arg_read (N)'
!      The 'fd_arg_read' is identical to 'fd_arg', but with the additional
       requirement that it might read from the file descriptor, and thus,
       the file descriptor must not have been opened as write-only.
  
!      The analyzer may emit a '-Wanalyzer-access-mode-mismatch'
       diagnostic if it detects a code path in which a function with this
!      attribute is called on a file descriptor opened with 'O_WRONLY'.
  
! 'fd_arg_write'
! 'fd_arg_write (N)'
!      The 'fd_arg_write' is identical to 'fd_arg_read' except that the
!      analyzer may emit a '-Wanalyzer-access-mode-mismatch' diagnostic if
       it detects a code path in which a function with this attribute is
!      called on a file descriptor opened with 'O_RDONLY'.
  
! 'flatten'
       Generally, inlining into a function is limited.  For a function
       marked with this attribute, every call inside this function is
       inlined including the calls such inlining introduces to the
       function (but not recursive calls to the function itself), if
!      possible.  Functions declared with attribute 'noinline' and similar
       are not inlined.  Whether the function itself is considered for
       inlining depends on its size and the current inlining parameters.
  
! 'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
!      The 'format' attribute specifies that a function takes 'printf',
!      'scanf', 'strftime' or 'strfmon' style arguments that should be
       type-checked against a format string.  For example, the
       declaration:
  
--- 37784,37882 ----
       argument, which must be a string, is printed in the warning if
       present.
  
!      The ‘deprecated’ attribute can also be used for variables and types
       (*note Variable Attributes::, *note Type Attributes::.)
  
       The message attached to the attribute is affected by the setting of
!      the ‘-fmessage-length’ option.
  
! ‘error ("MESSAGE")’
! ‘warning ("MESSAGE")’
!      If the ‘error’ or ‘warning’ attribute is used on a function
       declaration and a call to such a function is not eliminated through
       dead code elimination or other optimizations, an error or warning
       (respectively) that includes MESSAGE is diagnosed.  This is useful
       for compile-time checking, especially together with
!      ‘__builtin_constant_p’ and inline functions where checking the
!      inline function arguments is not possible through ‘extern char
!      [(condition) ? 1 : -1];’ tricks.
  
       While it is possible to leave the function undefined and thus
       invoke a link failure (to define the function with a message in
!      ‘.gnu.warning*’ section), when using these attributes the problem
       is diagnosed earlier and with exact location of the call even in
       presence of inline functions or when not emitting debugging
       information.
  
! ‘expected_throw’
       This attribute, attached to a function, tells the compiler the
       function is more likely to raise or propagate an exception than to
       return, loop forever, or terminate the program.
  
       This hint is mostly ignored by the compiler.  The only effect is
!      when it's applied to ‘noreturn’ functions and
!      ‘-fharden-control-flow-redundancy’ is enabled, and
!      ‘-fhardcfr-check-noreturn-calls=not-always’ is not overridden.
  
! ‘externally_visible’
       This attribute, attached to a global variable or function,
!      nullifies the effect of the ‘-fwhole-program’ command-line option,
       so the object remains visible outside the current compilation unit.
  
!      If ‘-fwhole-program’ is used together with ‘-flto’ and ‘gold’ is
!      used as the linker plugin, ‘externally_visible’ attributes are
       automatically added to functions (not variable yet due to a current
!      ‘gold’ issue) that are accessed outside of LTO objects according to
!      resolution file produced by ‘gold’.  For other linkers that cannot
!      generate resolution file, explicit ‘externally_visible’ attributes
       are still necessary.
  
! ‘fd_arg’
! ‘fd_arg (N)’
!      The ‘fd_arg’ attribute may be applied to a function that takes an
       open file descriptor at referenced argument N.
  
       It indicates that the passed filedescriptor must not have been
!      closed.  Therefore, when the analyzer is enabled with ‘-fanalyzer’,
!      the analyzer may emit a ‘-Wanalyzer-fd-use-after-close’ diagnostic
       if it detects a code path in which a function with this attribute
       is called with a closed file descriptor.
  
       The attribute also indicates that the file descriptor must have
       been checked for validity before usage.  Therefore, analyzer may
!      emit ‘-Wanalyzer-fd-use-without-check’ diagnostic if it detects a
       code path in which a function with this attribute is called with a
       file descriptor that has not been checked for validity.
  
! ‘fd_arg_read’
! ‘fd_arg_read (N)’
!      The ‘fd_arg_read’ is identical to ‘fd_arg’, but with the additional
       requirement that it might read from the file descriptor, and thus,
       the file descriptor must not have been opened as write-only.
  
!      The analyzer may emit a ‘-Wanalyzer-access-mode-mismatch’
       diagnostic if it detects a code path in which a function with this
!      attribute is called on a file descriptor opened with ‘O_WRONLY’.
  
! ‘fd_arg_write’
! ‘fd_arg_write (N)’
!      The ‘fd_arg_write’ is identical to ‘fd_arg_read’ except that the
!      analyzer may emit a ‘-Wanalyzer-access-mode-mismatch’ diagnostic if
       it detects a code path in which a function with this attribute is
!      called on a file descriptor opened with ‘O_RDONLY’.
  
! ‘flatten’
       Generally, inlining into a function is limited.  For a function
       marked with this attribute, every call inside this function is
       inlined including the calls such inlining introduces to the
       function (but not recursive calls to the function itself), if
!      possible.  Functions declared with attribute ‘noinline’ and similar
       are not inlined.  Whether the function itself is considered for
       inlining depends on its size and the current inlining parameters.
  
! ‘format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)’
!      The ‘format’ attribute specifies that a function takes ‘printf’,
!      ‘scanf’, ‘strftime’ or ‘strfmon’ style arguments that should be
       type-checked against a format string.  For example, the
       declaration:
  
*************** The following attributes are supported o
*** 37874,37925 ****
            my_printf (void *my_object, const char *my_format, ...)
                  __attribute__ ((format (printf, 2, 3)));
  
!      causes the compiler to check the arguments in calls to 'my_printf'
!      for consistency with the 'printf' style format string argument
!      'my_format'.
  
       The parameter ARCHETYPE determines how the format string is
!      interpreted, and should be 'printf', 'scanf', 'strftime',
!      'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
!      also use '__printf__', '__scanf__', '__strftime__' or
!      '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
!      'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
       refer to the formats accepted by the system's C runtime library,
!      while values prefixed with 'gnu_' always refer to the formats
       accepted by the GNU C Library.  On Microsoft Windows targets,
!      values prefixed with 'ms_' refer to the formats accepted by the
!      'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
       argument is the format string argument (starting from 1), while
       FIRST-TO-CHECK is the number of the first argument to check against
       the format string.  For functions where the arguments are not
!      available to be checked (such as 'vprintf'), specify the third
       parameter as zero.  In this case the compiler only checks the
!      format string for consistency.  For 'strftime' formats, the third
       parameter is required to be zero.  Since non-static C++ methods
!      have an implicit 'this' argument, the arguments of such methods
       should be counted from two, not one, when giving values for
       STRING-INDEX and FIRST-TO-CHECK.
  
!      In the example above, the format string ('my_format') is the second
!      argument of the function 'my_print', and the arguments to check
       start with the third argument, so the correct parameters for the
       format attribute are 2 and 3.
  
!      The 'format' attribute allows you to identify your own functions
       that take format strings as arguments, so that GCC can check the
       calls to these functions for errors.  The compiler always (unless
!      '-ffreestanding' or '-fno-builtin' is used) checks formats for the
!      standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
!      'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
!      'vsprintf' whenever such warnings are requested (using '-Wformat'),
!      so there is no need to modify the header file 'stdio.h'.  In C99
!      mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
!      and 'vsscanf' are also checked.  Except in strictly conforming C
!      standard modes, the X/Open function 'strfmon' is also checked as
!      are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
       Controlling C Dialect: C Dialect Options.
  
!      For Objective-C dialects, 'NSString' (or '__NSString__') is
       recognized in the same context.  Declarations including these
       format attributes are parsed for correct syntax, however the result
       of checking of such format strings is not yet defined, and is not
--- 37884,37935 ----
            my_printf (void *my_object, const char *my_format, ...)
                  __attribute__ ((format (printf, 2, 3)));
  
!      causes the compiler to check the arguments in calls to ‘my_printf’
!      for consistency with the ‘printf’ style format string argument
!      ‘my_format’.
  
       The parameter ARCHETYPE determines how the format string is
!      interpreted, and should be ‘printf’, ‘scanf’, ‘strftime’,
!      ‘gnu_printf’, ‘gnu_scanf’, ‘gnu_strftime’ or ‘strfmon’.  (You can
!      also use ‘__printf__’, ‘__scanf__’, ‘__strftime__’ or
!      ‘__strfmon__’.)  On MinGW targets, ‘ms_printf’, ‘ms_scanf’, and
!      ‘ms_strftime’ are also present.  ARCHETYPE values such as ‘printf’
       refer to the formats accepted by the system's C runtime library,
!      while values prefixed with ‘gnu_’ always refer to the formats
       accepted by the GNU C Library.  On Microsoft Windows targets,
!      values prefixed with ‘ms_’ refer to the formats accepted by the
!      ‘msvcrt.dll’ library.  The parameter STRING-INDEX specifies which
       argument is the format string argument (starting from 1), while
       FIRST-TO-CHECK is the number of the first argument to check against
       the format string.  For functions where the arguments are not
!      available to be checked (such as ‘vprintf’), specify the third
       parameter as zero.  In this case the compiler only checks the
!      format string for consistency.  For ‘strftime’ formats, the third
       parameter is required to be zero.  Since non-static C++ methods
!      have an implicit ‘this’ argument, the arguments of such methods
       should be counted from two, not one, when giving values for
       STRING-INDEX and FIRST-TO-CHECK.
  
!      In the example above, the format string (‘my_format’) is the second
!      argument of the function ‘my_print’, and the arguments to check
       start with the third argument, so the correct parameters for the
       format attribute are 2 and 3.
  
!      The ‘format’ attribute allows you to identify your own functions
       that take format strings as arguments, so that GCC can check the
       calls to these functions for errors.  The compiler always (unless
!      ‘-ffreestanding’ or ‘-fno-builtin’ is used) checks formats for the
!      standard library functions ‘printf’, ‘fprintf’, ‘sprintf’, ‘scanf’,
!      ‘fscanf’, ‘sscanf’, ‘strftime’, ‘vprintf’, ‘vfprintf’ and
!      ‘vsprintf’ whenever such warnings are requested (using ‘-Wformat’),
!      so there is no need to modify the header file ‘stdio.h’.  In C99
!      mode, the functions ‘snprintf’, ‘vsnprintf’, ‘vscanf’, ‘vfscanf’
!      and ‘vsscanf’ are also checked.  Except in strictly conforming C
!      standard modes, the X/Open function ‘strfmon’ is also checked as
!      are ‘printf_unlocked’ and ‘fprintf_unlocked’.  *Note Options
       Controlling C Dialect: C Dialect Options.
  
!      For Objective-C dialects, ‘NSString’ (or ‘__NSString__’) is
       recognized in the same context.  Declarations including these
       format attributes are parsed for correct syntax, however the result
       of checking of such format strings is not yet defined, and is not
*************** The following attributes are supported o
*** 37929,37942 ****
       *Note Format Checks Specific to Particular Target Machines: Target
       Format Checks.
  
! 'format_arg (STRING-INDEX)'
!      The 'format_arg' attribute specifies that a function takes one or
!      more format strings for a 'printf', 'scanf', 'strftime' or
!      'strfmon' style function and modifies it (for example, to translate
       it into another language), so the result can be passed to a
!      'printf', 'scanf', 'strftime' or 'strfmon' style function (with the
       remaining arguments to the format function the same as they would
!      have been for the unmodified string).  Multiple 'format_arg'
       attributes may be applied to the same function, each designating a
       distinct parameter as a format string.  For example, the
       declaration:
--- 37939,37952 ----
       *Note Format Checks Specific to Particular Target Machines: Target
       Format Checks.
  
! ‘format_arg (STRING-INDEX)’
!      The ‘format_arg’ attribute specifies that a function takes one or
!      more format strings for a ‘printf’, ‘scanf’, ‘strftime’ or
!      ‘strfmon’ style function and modifies it (for example, to translate
       it into another language), so the result can be passed to a
!      ‘printf’, ‘scanf’, ‘strftime’ or ‘strfmon’ style function (with the
       remaining arguments to the format function the same as they would
!      have been for the unmodified string).  Multiple ‘format_arg’
       attributes may be applied to the same function, each designating a
       distinct parameter as a format string.  For example, the
       declaration:
*************** The following attributes are supported o
*** 37945,38039 ****
            my_dgettext (char *my_domain, const char *my_format)
                  __attribute__ ((format_arg (2)));
  
!      causes the compiler to check the arguments in calls to a 'printf',
!      'scanf', 'strftime' or 'strfmon' type function, whose format string
!      argument is a call to the 'my_dgettext' function, for consistency
!      with the format string argument 'my_format'.  If the 'format_arg'
       attribute had not been specified, all the compiler could tell in
       such calls to format functions would be that the format string
       argument is not constant; this would generate a warning when
!      '-Wformat-nonliteral' is used, but the calls could not be checked
       without the attribute.
  
!      In calls to a function declared with more than one 'format_arg'
       attribute, each with a distinct argument value, the corresponding
       actual function arguments are checked against all format strings
       designated by the attributes.  This capability is designed to
!      support the GNU 'ngettext' family of functions.
  
       The parameter STRING-INDEX specifies which argument is the format
       string argument (starting from one).  Since non-static C++ methods
!      have an implicit 'this' argument, the arguments of such methods
       should be counted from two.
  
!      The 'format_arg' attribute allows you to identify your own
       functions that modify format strings, so that GCC can check the
!      calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
       whose operands are a call to one of your own function.  The
!      compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
       this manner except when strict ISO C support is requested by
!      '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
!      '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
       Dialect Options.
  
!      For Objective-C dialects, the 'format-arg' attribute may refer to
!      an 'NSString' reference for compatibility with the 'format'
       attribute above.
  
!      The target may also allow additional types in 'format-arg'
       attributes.  *Note Format Checks Specific to Particular Target
       Machines: Target Format Checks.
  
! 'gnu_inline'
       This attribute should be used with a function that is also declared
!      with the 'inline' keyword.  It directs GCC to treat the function as
       if it were defined in gnu90 mode even when compiling in C99 or
       gnu99 mode.
  
!      If the function is declared 'extern', then this definition of the
       function is used only for inlining.  In no case is the function
       compiled as a standalone function, not even if you take its address
       explicitly.  Such an address becomes an external reference, as if
       you had only declared the function, and had not defined it.  This
       has almost the effect of a macro.  The way to use this is to put a
       function definition in a header file with this attribute, and put
!      another copy of the function, without 'extern', in a library file.
       The definition in the header file causes most calls to the function
       to be inlined.  If any uses of the function remain, they refer to
       the single copy in the library.  Note that the two definitions of
       the functions need not be precisely the same, although if they do
       not have the same effect your program may behave oddly.
  
!      In C, if the function is neither 'extern' nor 'static', then the
       function is compiled as a standalone function, as well as being
       inlined where possible.
  
!      This is how GCC traditionally handled functions declared 'inline'.
!      Since ISO C99 specifies a different semantics for 'inline', this
       function attribute is provided as a transition measure and as a
       useful feature in its own right.  This attribute is available in
       GCC 4.1.3 and later.  It is available if either of the preprocessor
!      macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
       *Note An Inline Function is As Fast As a Macro: Inline.
  
!      In C++, this attribute does not depend on 'extern' in any way, but
!      it still requires the 'inline' keyword to enable its special
       behavior.
  
! 'hot'
!      The 'hot' attribute on a function is used to inform the compiler
       that the function is a hot spot of the compiled program.  The
       function is optimized more aggressively and on many targets it is
       placed into a special subsection of the text section so all hot
       functions appear close together, improving locality.  In C++, the
!      'hot' attribute can be applied to types with the effect of being
       propagated to member functions.  See *note C++ Attributes::.
  
!      When profile feedback is available, via '-fprofile-use', hot
       functions are automatically detected and this attribute is ignored.
  
! 'ifunc ("RESOLVER")'
!      The 'ifunc' attribute is used to mark a function as an indirect
       function using the STT_GNU_IFUNC symbol type extension to the ELF
       standard.  This allows the resolution of the symbol value to be
       determined dynamically at load time, and an optimized version of
--- 37955,38049 ----
            my_dgettext (char *my_domain, const char *my_format)
                  __attribute__ ((format_arg (2)));
  
!      causes the compiler to check the arguments in calls to a ‘printf’,
!      ‘scanf’, ‘strftime’ or ‘strfmon’ type function, whose format string
!      argument is a call to the ‘my_dgettext’ function, for consistency
!      with the format string argument ‘my_format’.  If the ‘format_arg’
       attribute had not been specified, all the compiler could tell in
       such calls to format functions would be that the format string
       argument is not constant; this would generate a warning when
!      ‘-Wformat-nonliteral’ is used, but the calls could not be checked
       without the attribute.
  
!      In calls to a function declared with more than one ‘format_arg’
       attribute, each with a distinct argument value, the corresponding
       actual function arguments are checked against all format strings
       designated by the attributes.  This capability is designed to
!      support the GNU ‘ngettext’ family of functions.
  
       The parameter STRING-INDEX specifies which argument is the format
       string argument (starting from one).  Since non-static C++ methods
!      have an implicit ‘this’ argument, the arguments of such methods
       should be counted from two.
  
!      The ‘format_arg’ attribute allows you to identify your own
       functions that modify format strings, so that GCC can check the
!      calls to ‘printf’, ‘scanf’, ‘strftime’ or ‘strfmon’ type function
       whose operands are a call to one of your own function.  The
!      compiler always treats ‘gettext’, ‘dgettext’, and ‘dcgettext’ in
       this manner except when strict ISO C support is requested by
!      ‘-ansi’ or an appropriate ‘-std’ option, or ‘-ffreestanding’ or
!      ‘-fno-builtin’ is used.  *Note Options Controlling C Dialect: C
       Dialect Options.
  
!      For Objective-C dialects, the ‘format-arg’ attribute may refer to
!      an ‘NSString’ reference for compatibility with the ‘format’
       attribute above.
  
!      The target may also allow additional types in ‘format-arg’
       attributes.  *Note Format Checks Specific to Particular Target
       Machines: Target Format Checks.
  
! ‘gnu_inline’
       This attribute should be used with a function that is also declared
!      with the ‘inline’ keyword.  It directs GCC to treat the function as
       if it were defined in gnu90 mode even when compiling in C99 or
       gnu99 mode.
  
!      If the function is declared ‘extern’, then this definition of the
       function is used only for inlining.  In no case is the function
       compiled as a standalone function, not even if you take its address
       explicitly.  Such an address becomes an external reference, as if
       you had only declared the function, and had not defined it.  This
       has almost the effect of a macro.  The way to use this is to put a
       function definition in a header file with this attribute, and put
!      another copy of the function, without ‘extern’, in a library file.
       The definition in the header file causes most calls to the function
       to be inlined.  If any uses of the function remain, they refer to
       the single copy in the library.  Note that the two definitions of
       the functions need not be precisely the same, although if they do
       not have the same effect your program may behave oddly.
  
!      In C, if the function is neither ‘extern’ nor ‘static’, then the
       function is compiled as a standalone function, as well as being
       inlined where possible.
  
!      This is how GCC traditionally handled functions declared ‘inline’.
!      Since ISO C99 specifies a different semantics for ‘inline’, this
       function attribute is provided as a transition measure and as a
       useful feature in its own right.  This attribute is available in
       GCC 4.1.3 and later.  It is available if either of the preprocessor
!      macros ‘__GNUC_GNU_INLINE__’ or ‘__GNUC_STDC_INLINE__’ are defined.
       *Note An Inline Function is As Fast As a Macro: Inline.
  
!      In C++, this attribute does not depend on ‘extern’ in any way, but
!      it still requires the ‘inline’ keyword to enable its special
       behavior.
  
! ‘hot’
!      The ‘hot’ attribute on a function is used to inform the compiler
       that the function is a hot spot of the compiled program.  The
       function is optimized more aggressively and on many targets it is
       placed into a special subsection of the text section so all hot
       functions appear close together, improving locality.  In C++, the
!      ‘hot’ attribute can be applied to types with the effect of being
       propagated to member functions.  See *note C++ Attributes::.
  
!      When profile feedback is available, via ‘-fprofile-use’, hot
       functions are automatically detected and this attribute is ignored.
  
! ‘ifunc ("RESOLVER")’
!      The ‘ifunc’ attribute is used to mark a function as an indirect
       function using the STT_GNU_IFUNC symbol type extension to the ELF
       standard.  This allows the resolution of the symbol value to be
       determined dynamically at load time, and an optimized version of
*************** The following attributes are supported o
*** 38063,38069 ****
  
            extern void *memcpy (void *, const void *, size_t);
  
!      allowing the user to call 'memcpy' as a regular function, unaware
       of the actual implementation.  Finally, the indirect function needs
       to be defined in the same translation unit as the resolver
       function:
--- 38073,38079 ----
  
            extern void *memcpy (void *, const void *, size_t);
  
!      allowing the user to call ‘memcpy’ as a regular function, unaware
       of the actual implementation.  Finally, the indirect function needs
       to be defined in the same translation unit as the resolver
       function:
*************** The following attributes are supported o
*** 38071,38086 ****
            void *memcpy (void *, const void *, size_t)
                 __attribute__ ((ifunc ("resolve_memcpy")));
  
!      In C++, the 'ifunc' attribute takes a string that is the mangled
       name of the resolver function.  A C++ resolver for a non-static
!      member function of class 'C' should be declared to return a pointer
!      to a non-member function taking pointer to 'C' as the first
       argument, followed by the same arguments as of the implementation
       function.  G++ checks the signatures of the two functions and
!      issues a '-Wattribute-alias' warning for mismatches.  To suppress a
       warning for the necessary cast from a pointer to the implementation
       member function to the type of the corresponding non-member
!      function use the '-Wno-pmf-conversions' option.  For example:
  
            class S
            {
--- 38081,38096 ----
            void *memcpy (void *, const void *, size_t)
                 __attribute__ ((ifunc ("resolve_memcpy")));
  
!      In C++, the ‘ifunc’ attribute takes a string that is the mangled
       name of the resolver function.  A C++ resolver for a non-static
!      member function of class ‘C’ should be declared to return a pointer
!      to a non-member function taking pointer to ‘C’ as the first
       argument, followed by the same arguments as of the implementation
       function.  G++ checks the signatures of the two functions and
!      issues a ‘-Wattribute-alias’ warning for mismatches.  To suppress a
       warning for the necessary cast from a pointer to the implementation
       member function to the type of the corresponding non-member
!      function use the ‘-Wno-pmf-conversions’ option.  For example:
  
            class S
            {
*************** The following attributes are supported o
*** 38114,38133 ****
       higher and GNU C Library version 2.11.1 are required to use this
       feature.
  
! 'interrupt'
! 'interrupt_handler'
       Many GCC back ends support attributes to indicate that a function
       is an interrupt handler, which tells the compiler to generate
       function entry and exit sequences that differ from those from
       regular functions.  The exact syntax and behavior are
       target-specific; refer to the following subsections for details.
  
! 'leaf'
       Calls to external functions with this attribute must return to the
       current compilation unit only by return or by exception handling.
       In particular, a leaf function is not allowed to invoke callback
       functions passed to it from the current compilation unit, directly
!      call functions exported by the unit, or 'longjmp' into the unit.
       Leaf functions might still call functions from other compilation
       units and thus they are not necessarily leaf in the sense that they
       contain no function calls at all.
--- 38124,38143 ----
       higher and GNU C Library version 2.11.1 are required to use this
       feature.
  
! ‘interrupt’
! ‘interrupt_handler’
       Many GCC back ends support attributes to indicate that a function
       is an interrupt handler, which tells the compiler to generate
       function entry and exit sequences that differ from those from
       regular functions.  The exact syntax and behavior are
       target-specific; refer to the following subsections for details.
  
! ‘leaf’
       Calls to external functions with this attribute must return to the
       current compilation unit only by return or by exception handling.
       In particular, a leaf function is not allowed to invoke callback
       functions passed to it from the current compilation unit, directly
!      call functions exported by the unit, or ‘longjmp’ into the unit.
       Leaf functions might still call functions from other compilation
       units and thus they are not necessarily leaf in the sense that they
       contain no function calls at all.
*************** The following attributes are supported o
*** 38135,38142 ****
       The attribute is intended for library functions to improve dataflow
       analysis.  The compiler takes the hint that any data not escaping
       the current compilation unit cannot be used or modified by the leaf
!      function.  For example, the 'sin' function is a leaf function, but
!      'qsort' is not.
  
       Note that leaf functions might indirectly run a signal handler
       defined in the current compilation unit that uses static variables.
--- 38145,38152 ----
       The attribute is intended for library functions to improve dataflow
       analysis.  The compiler takes the hint that any data not escaping
       the current compilation unit cannot be used or modified by the leaf
!      function.  For example, the ‘sin’ function is a leaf function, but
!      ‘qsort’ is not.
  
       Note that leaf functions might indirectly run a signal handler
       defined in the current compilation unit that uses static variables.
*************** The following attributes are supported o
*** 38145,38152 ****
       implementation function is defined in the current compilation unit
       and uses static variables.  There is no standard-compliant way to
       write such a signal handler, resolver function, or implementation
!      function, and the best that you can do is to remove the 'leaf'
!      attribute or mark all such static variables 'volatile'.  Lastly,
       for ELF-based systems that support symbol interposition, care
       should be taken that functions defined in the current compilation
       unit do not unexpectedly interpose other symbols based on the
--- 38155,38162 ----
       implementation function is defined in the current compilation unit
       and uses static variables.  There is no standard-compliant way to
       write such a signal handler, resolver function, or implementation
!      function, and the best that you can do is to remove the ‘leaf’
!      attribute or mark all such static variables ‘volatile’.  Lastly,
       for ELF-based systems that support symbol interposition, care
       should be taken that functions defined in the current compilation
       unit do not unexpectedly interpose other symbols based on the
*************** The following attributes are supported o
*** 38159,38168 ****
       optimization.  For this reason the attribute is not allowed on
       types to annotate indirect calls.
  
! 'malloc'
! 'malloc (DEALLOCATOR)'
! 'malloc (DEALLOCATOR, PTR-INDEX)'
!      Attribute 'malloc' indicates that a function is 'malloc'-like,
       i.e., that the pointer P returned by the function cannot alias any
       other pointer valid when the function returns, and moreover no
       pointers to valid objects occur in any storage addressed by P.  In
--- 38169,38178 ----
       optimization.  For this reason the attribute is not allowed on
       types to annotate indirect calls.
  
! ‘malloc’
! ‘malloc (DEALLOCATOR)’
! ‘malloc (DEALLOCATOR, PTR-INDEX)’
!      Attribute ‘malloc’ indicates that a function is ‘malloc’-like,
       i.e., that the pointer P returned by the function cannot alias any
       other pointer valid when the function returns, and moreover no
       pointers to valid objects occur in any storage addressed by P.  In
*************** The following attributes are supported o
*** 38170,38185 ****
       non-null in most cases.
  
       Independently, the form of the attribute with one or two arguments
!      associates 'deallocator' as a suitable deallocation function for
!      pointers returned from the 'malloc'-like function.  PTR-INDEX
       denotes the positional argument to which when the pointer is passed
!      in calls to 'deallocator' has the effect of deallocating it.
  
       Using the attribute with no arguments is designed to improve
       optimization by relying on the aliasing property it implies.
!      Functions like 'malloc' and 'calloc' have this property because
       they return a pointer to uninitialized or zeroed-out, newly
!      obtained storage.  However, functions like 'realloc' do not have
       this property, as they may return pointers to storage containing
       pointers to existing objects.  Additionally, since all such
       functions are assumed to return null only infrequently, callers can
--- 38180,38195 ----
       non-null in most cases.
  
       Independently, the form of the attribute with one or two arguments
!      associates ‘deallocator’ as a suitable deallocation function for
!      pointers returned from the ‘malloc’-like function.  PTR-INDEX
       denotes the positional argument to which when the pointer is passed
!      in calls to ‘deallocator’ has the effect of deallocating it.
  
       Using the attribute with no arguments is designed to improve
       optimization by relying on the aliasing property it implies.
!      Functions like ‘malloc’ and ‘calloc’ have this property because
       they return a pointer to uninitialized or zeroed-out, newly
!      obtained storage.  However, functions like ‘realloc’ do not have
       this property, as they may return pointers to storage containing
       pointers to existing objects.  Additionally, since all such
       functions are assumed to return null only infrequently, callers can
*************** The following attributes are supported o
*** 38187,38210 ****
  
       Associating a function with a DEALLOCATOR helps detect calls to
       mismatched allocation and deallocation functions and diagnose them
!      under the control of options such as '-Wmismatched-dealloc'.  It
       also makes it possible to diagnose attempts to deallocate objects
!      that were not allocated dynamically, by '-Wfree-nonheap-object'.
       To indicate that an allocation function both satisifies the
       nonaliasing property and has a deallocator associated with it, both
       the plain form of the attribute and the one with the DEALLOCATOR
       argument must be used.  The same function can be both an allocator
       and a deallocator.  Since inlining one of the associated functions
       but not the other could result in apparent mismatches, this form of
!      attribute 'malloc' is not accepted on inline functions.  For the
       same reason, using the attribute prevents both the allocation and
       deallocation functions from being expanded inline.
  
       For example, besides stating that the functions return pointers
       that do not alias any others, the following declarations make
!      'fclose' a suitable deallocator for pointers returned from all
!      functions except 'popen', and 'pclose' as the only suitable
!      deallocator for pointers returned from 'popen'.  The deallocator
       functions must be declared before they can be referenced in the
       attribute.
  
--- 38197,38220 ----
  
       Associating a function with a DEALLOCATOR helps detect calls to
       mismatched allocation and deallocation functions and diagnose them
!      under the control of options such as ‘-Wmismatched-dealloc’.  It
       also makes it possible to diagnose attempts to deallocate objects
!      that were not allocated dynamically, by ‘-Wfree-nonheap-object’.
       To indicate that an allocation function both satisifies the
       nonaliasing property and has a deallocator associated with it, both
       the plain form of the attribute and the one with the DEALLOCATOR
       argument must be used.  The same function can be both an allocator
       and a deallocator.  Since inlining one of the associated functions
       but not the other could result in apparent mismatches, this form of
!      attribute ‘malloc’ is not accepted on inline functions.  For the
       same reason, using the attribute prevents both the allocation and
       deallocation functions from being expanded inline.
  
       For example, besides stating that the functions return pointers
       that do not alias any others, the following declarations make
!      ‘fclose’ a suitable deallocator for pointers returned from all
!      functions except ‘popen’, and ‘pclose’ as the only suitable
!      deallocator for pointers returned from ‘popen’.  The deallocator
       functions must be declared before they can be referenced in the
       attribute.
  
*************** The following attributes are supported o
*** 38222,38354 ****
            __attribute__ ((malloc, malloc (fclose, 1)))
              FILE* tmpfile (void);
  
!      The warnings guarded by '-fanalyzer' respect allocation and
!      deallocation pairs marked with the 'malloc'.  In particular:
  
!         * The analyzer emits a '-Wanalyzer-mismatching-deallocation'
            diagnostic if there is an execution path in which the result
            of an allocation call is passed to a different deallocator.
  
!         * The analyzer emits a '-Wanalyzer-double-free' diagnostic if
            there is an execution path in which a value is passed more
            than once to a deallocation call.
  
!         * The analyzer considers the possibility that an allocation
            function could fail and return null.  If there are execution
            paths in which an unchecked result of an allocation call is
            dereferenced or passed to a function requiring a non-null
!           argument, it emits '-Wanalyzer-possible-null-dereference' and
!           '-Wanalyzer-possible-null-argument' diagnostics.  If the
!           allocator always returns non-null, use '__attribute__
!           ((returns_nonnull))' to suppress these warnings.  For example:
                 char *xstrdup (const char *)
                   __attribute__((malloc (free), returns_nonnull));
  
!         * The analyzer emits a '-Wanalyzer-use-after-free' diagnostic if
            there is an execution path in which the memory passed by
            pointer to a deallocation call is used after the deallocation.
  
!         * The analyzer emits a '-Wanalyzer-malloc-leak' diagnostic if
            there is an execution path in which the result of an
            allocation call is leaked (without being passed to the
            deallocation function).
  
!         * The analyzer emits a '-Wanalyzer-free-of-non-heap' diagnostic
            if a deallocation function is used on a global or on-stack
            variable.
  
       The analyzer assumes that deallocators can gracefully handle the
       null pointer.  If this is not the case, the deallocator can be
!      marked with '__attribute__((nonnull))' so that '-fanalyzer' can
!      emit a '-Wanalyzer-possible-null-argument' diagnostic for code
       paths in which the deallocator is called with null.
  
! 'no_icf'
       This function attribute prevents a functions from being merged with
       another semantically equivalent function.
  
! 'no_instrument_function'
!      If any of '-finstrument-functions', '-p', or '-pg' are given,
       profiling function calls are generated at entry and exit of most
       user-compiled functions.  Functions with this attribute are not so
       instrumented.
  
! 'no_profile_instrument_function'
!      The 'no_profile_instrument_function' attribute on functions is used
       to inform the compiler that it should not process any profile
       feedback based optimization code instrumentation.
  
! 'no_reorder'
!      Do not reorder functions or variables marked 'no_reorder' against
       each other or top level assembler statements the executable.  The
       actual order in the program will depend on the linker command line.
       Static variables marked like this are also not removed.  This has a
!      similar effect as the '-fno-toplevel-reorder' option, but only
       applies to the marked symbols.
  
! 'no_sanitize ("SANITIZE_OPTION")'
!      The 'no_sanitize' attribute on functions is used to inform the
       compiler that it should not do sanitization of any option mentioned
       in SANITIZE_OPTION.  A list of values acceptable by the
!      '-fsanitize' option can be provided.
  
            void __attribute__ ((no_sanitize ("alignment", "object-size")))
            f () { /* Do something. */; }
            void __attribute__ ((no_sanitize ("alignment,object-size")))
            g () { /* Do something. */; }
  
! 'no_sanitize_address'
! 'no_address_safety_analysis'
!      The 'no_sanitize_address' attribute on functions is used to inform
       the compiler that it should not instrument memory accesses in the
!      function when compiling with the '-fsanitize=address' option.  The
!      'no_address_safety_analysis' is a deprecated alias of the
!      'no_sanitize_address' attribute, new code should use
!      'no_sanitize_address'.
  
! 'no_sanitize_thread'
!      The 'no_sanitize_thread' attribute on functions is used to inform
       the compiler that it should not instrument memory accesses in the
!      function when compiling with the '-fsanitize=thread' option.
  
! 'no_sanitize_undefined'
!      The 'no_sanitize_undefined' attribute on functions is used to
       inform the compiler that it should not check for undefined behavior
!      in the function when compiling with the '-fsanitize=undefined'
       option.
  
! 'no_sanitize_coverage'
!      The 'no_sanitize_coverage' attribute on functions is used to inform
       the compiler that it should not do coverage-guided fuzzing code
!      instrumentation ('-fsanitize-coverage').
  
! 'no_split_stack'
!      If '-fsplit-stack' is given, functions have a small prologue which
       decides whether to split the stack.  Functions with the
!      'no_split_stack' attribute do not have that prologue, and thus may
       run with only a small amount of stack space available.
  
! 'no_stack_limit'
!      This attribute locally overrides the '-fstack-limit-register' and
!      '-fstack-limit-symbol' command-line options; it has the effect of
       disabling stack limit checking in the function it applies to.
  
! 'no_stack_protector'
       This attribute prevents stack protection code for the function.
  
! 'noclone'
       This function attribute prevents a function from being considered
       for cloning--a mechanism that produces specialized copies of
       functions and which is (currently) performed by interprocedural
       constant propagation.
  
! 'noinline'
       This function attribute prevents a function from being considered
       for inlining.  It also disables some other interprocedural
       optimizations; it's preferable to use the more comprehensive
!      'noipa' attribute instead if that is your goal.
  
!      Even if a function is declared with the 'noinline' attribute, there
       are optimizations other than inlining that can cause calls to be
       optimized away if it does not have side effects, although the
       function call is live.  To keep such calls from being optimized
--- 38232,38364 ----
            __attribute__ ((malloc, malloc (fclose, 1)))
              FILE* tmpfile (void);
  
!      The warnings guarded by ‘-fanalyzer’ respect allocation and
!      deallocation pairs marked with the ‘malloc’.  In particular:
  
!         • The analyzer emits a ‘-Wanalyzer-mismatching-deallocation’
            diagnostic if there is an execution path in which the result
            of an allocation call is passed to a different deallocator.
  
!         • The analyzer emits a ‘-Wanalyzer-double-free’ diagnostic if
            there is an execution path in which a value is passed more
            than once to a deallocation call.
  
!         • The analyzer considers the possibility that an allocation
            function could fail and return null.  If there are execution
            paths in which an unchecked result of an allocation call is
            dereferenced or passed to a function requiring a non-null
!           argument, it emits ‘-Wanalyzer-possible-null-dereference’ and
!           ‘-Wanalyzer-possible-null-argument’ diagnostics.  If the
!           allocator always returns non-null, use ‘__attribute__
!           ((returns_nonnull))’ to suppress these warnings.  For example:
                 char *xstrdup (const char *)
                   __attribute__((malloc (free), returns_nonnull));
  
!         • The analyzer emits a ‘-Wanalyzer-use-after-free’ diagnostic if
            there is an execution path in which the memory passed by
            pointer to a deallocation call is used after the deallocation.
  
!         • The analyzer emits a ‘-Wanalyzer-malloc-leak’ diagnostic if
            there is an execution path in which the result of an
            allocation call is leaked (without being passed to the
            deallocation function).
  
!         • The analyzer emits a ‘-Wanalyzer-free-of-non-heap’ diagnostic
            if a deallocation function is used on a global or on-stack
            variable.
  
       The analyzer assumes that deallocators can gracefully handle the
       null pointer.  If this is not the case, the deallocator can be
!      marked with ‘__attribute__((nonnull))’ so that ‘-fanalyzer’ can
!      emit a ‘-Wanalyzer-possible-null-argument’ diagnostic for code
       paths in which the deallocator is called with null.
  
! ‘no_icf’
       This function attribute prevents a functions from being merged with
       another semantically equivalent function.
  
! ‘no_instrument_function’
!      If any of ‘-finstrument-functions’, ‘-p’, or ‘-pg’ are given,
       profiling function calls are generated at entry and exit of most
       user-compiled functions.  Functions with this attribute are not so
       instrumented.
  
! ‘no_profile_instrument_function’
!      The ‘no_profile_instrument_function’ attribute on functions is used
       to inform the compiler that it should not process any profile
       feedback based optimization code instrumentation.
  
! ‘no_reorder’
!      Do not reorder functions or variables marked ‘no_reorder’ against
       each other or top level assembler statements the executable.  The
       actual order in the program will depend on the linker command line.
       Static variables marked like this are also not removed.  This has a
!      similar effect as the ‘-fno-toplevel-reorder’ option, but only
       applies to the marked symbols.
  
! ‘no_sanitize ("SANITIZE_OPTION")’
!      The ‘no_sanitize’ attribute on functions is used to inform the
       compiler that it should not do sanitization of any option mentioned
       in SANITIZE_OPTION.  A list of values acceptable by the
!      ‘-fsanitize’ option can be provided.
  
            void __attribute__ ((no_sanitize ("alignment", "object-size")))
            f () { /* Do something. */; }
            void __attribute__ ((no_sanitize ("alignment,object-size")))
            g () { /* Do something. */; }
  
! ‘no_sanitize_address’
! ‘no_address_safety_analysis’
!      The ‘no_sanitize_address’ attribute on functions is used to inform
       the compiler that it should not instrument memory accesses in the
!      function when compiling with the ‘-fsanitize=address’ option.  The
!      ‘no_address_safety_analysis’ is a deprecated alias of the
!      ‘no_sanitize_address’ attribute, new code should use
!      ‘no_sanitize_address’.
  
! ‘no_sanitize_thread’
!      The ‘no_sanitize_thread’ attribute on functions is used to inform
       the compiler that it should not instrument memory accesses in the
!      function when compiling with the ‘-fsanitize=thread’ option.
  
! ‘no_sanitize_undefined’
!      The ‘no_sanitize_undefined’ attribute on functions is used to
       inform the compiler that it should not check for undefined behavior
!      in the function when compiling with the ‘-fsanitize=undefined’
       option.
  
! ‘no_sanitize_coverage’
!      The ‘no_sanitize_coverage’ attribute on functions is used to inform
       the compiler that it should not do coverage-guided fuzzing code
!      instrumentation (‘-fsanitize-coverage’).
  
! ‘no_split_stack’
!      If ‘-fsplit-stack’ is given, functions have a small prologue which
       decides whether to split the stack.  Functions with the
!      ‘no_split_stack’ attribute do not have that prologue, and thus may
       run with only a small amount of stack space available.
  
! ‘no_stack_limit’
!      This attribute locally overrides the ‘-fstack-limit-register’ and
!      ‘-fstack-limit-symbol’ command-line options; it has the effect of
       disabling stack limit checking in the function it applies to.
  
! ‘no_stack_protector’
       This attribute prevents stack protection code for the function.
  
! ‘noclone’
       This function attribute prevents a function from being considered
       for cloning--a mechanism that produces specialized copies of
       functions and which is (currently) performed by interprocedural
       constant propagation.
  
! ‘noinline’
       This function attribute prevents a function from being considered
       for inlining.  It also disables some other interprocedural
       optimizations; it's preferable to use the more comprehensive
!      ‘noipa’ attribute instead if that is your goal.
  
!      Even if a function is declared with the ‘noinline’ attribute, there
       are optimizations other than inlining that can cause calls to be
       optimized away if it does not have side effects, although the
       function call is live.  To keep such calls from being optimized
*************** The following attributes are supported o
*** 38359,38379 ****
       (*note Extended Asm::) in the called function, to serve as a
       special side effect.
  
! 'noipa'
       Disable interprocedural optimizations between the function with
       this attribute and its callers, as if the body of the function is
       not available when optimizing callers and the callers are
       unavailable when optimizing the body.  This attribute implies
!      'noinline', 'noclone' and 'no_icf' attributes.  However, this
       attribute is not equivalent to a combination of other attributes,
       because its purpose is to suppress existing and future
       optimizations employing interprocedural analysis, including those
       that do not have an attribute suitable for disabling them
       individually.
  
! 'nonnull'
! 'nonnull (ARG-INDEX, ...)'
!      The 'nonnull' attribute may be applied to a function that takes at
       least one argument of a pointer type.  It indicates that the
       referenced arguments must be non-null pointers.  For instance, the
       declaration:
--- 38369,38389 ----
       (*note Extended Asm::) in the called function, to serve as a
       special side effect.
  
! ‘noipa’
       Disable interprocedural optimizations between the function with
       this attribute and its callers, as if the body of the function is
       not available when optimizing callers and the callers are
       unavailable when optimizing the body.  This attribute implies
!      ‘noinline’, ‘noclone’ and ‘no_icf’ attributes.  However, this
       attribute is not equivalent to a combination of other attributes,
       because its purpose is to suppress existing and future
       optimizations employing interprocedural analysis, including those
       that do not have an attribute suitable for disabling them
       individually.
  
! ‘nonnull’
! ‘nonnull (ARG-INDEX, ...)’
!      The ‘nonnull’ attribute may be applied to a function that takes at
       least one argument of a pointer type.  It indicates that the
       referenced arguments must be non-null pointers.  For instance, the
       declaration:
*************** The following attributes are supported o
*** 38382,38417 ****
            my_memcpy (void *dest, const void *src, size_t len)
                    __attribute__((nonnull (1, 2)));
  
!      informs the compiler that, in calls to 'my_memcpy', arguments DEST
       and SRC must be non-null.
  
       The attribute has an effect both on functions calls and function
       definitions.
  
       For function calls:
!         * If the compiler determines that a null pointer is passed in an
!           argument slot marked as non-null, and the '-Wnonnull' option
            is enabled, a warning is issued.  *Note Warning Options::.
!         * The '-fisolate-erroneous-paths-attribute' option can be
            specified to have GCC transform calls with null arguments to
            non-null functions into traps.  *Note Optimize Options::.
!         * The compiler may also perform optimizations based on the
            knowledge that certain function arguments cannot be null.
            These optimizations can be disabled by the
!           '-fno-delete-null-pointer-checks' option.  *Note Optimize
            Options::.
  
       For function definitions:
!         * If the compiler determines that a function parameter that is
            marked with nonnull is compared with null, and
!           '-Wnonnull-compare' option is enabled, a warning is issued.
            *Note Warning Options::.
!         * The compiler may also perform optimizations based on the
!           knowledge that 'nonnull' parameters cannot be null.  This can
            currently not be disabled other than by removing the nonnull
            attribute.
  
!      If no ARG-INDEX is given to the 'nonnull' attribute, all pointer
       arguments are marked as non-null.  To illustrate, the following
       declaration is equivalent to the previous example:
  
--- 38392,38427 ----
            my_memcpy (void *dest, const void *src, size_t len)
                    __attribute__((nonnull (1, 2)));
  
!      informs the compiler that, in calls to ‘my_memcpy’, arguments DEST
       and SRC must be non-null.
  
       The attribute has an effect both on functions calls and function
       definitions.
  
       For function calls:
!         • If the compiler determines that a null pointer is passed in an
!           argument slot marked as non-null, and the ‘-Wnonnull’ option
            is enabled, a warning is issued.  *Note Warning Options::.
!         • The ‘-fisolate-erroneous-paths-attribute’ option can be
            specified to have GCC transform calls with null arguments to
            non-null functions into traps.  *Note Optimize Options::.
!         • The compiler may also perform optimizations based on the
            knowledge that certain function arguments cannot be null.
            These optimizations can be disabled by the
!           ‘-fno-delete-null-pointer-checks’ option.  *Note Optimize
            Options::.
  
       For function definitions:
!         • If the compiler determines that a function parameter that is
            marked with nonnull is compared with null, and
!           ‘-Wnonnull-compare’ option is enabled, a warning is issued.
            *Note Warning Options::.
!         • The compiler may also perform optimizations based on the
!           knowledge that ‘nonnull’ parameters cannot be null.  This can
            currently not be disabled other than by removing the nonnull
            attribute.
  
!      If no ARG-INDEX is given to the ‘nonnull’ attribute, all pointer
       arguments are marked as non-null.  To illustrate, the following
       declaration is equivalent to the previous example:
  
*************** The following attributes are supported o
*** 38419,38426 ****
            my_memcpy (void *dest, const void *src, size_t len)
                    __attribute__((nonnull));
  
! 'noplt'
!      The 'noplt' attribute is the counterpart to option '-fno-plt'.
       Calls to functions marked with this attribute in
       position-independent code do not use the PLT.
  
--- 38429,38436 ----
            my_memcpy (void *dest, const void *src, size_t len)
                    __attribute__((nonnull));
  
! ‘noplt’
!      The ‘noplt’ attribute is the counterpart to option ‘-fno-plt’.
       Calls to functions marked with this attribute in
       position-independent code do not use the PLT.
  
*************** The following attributes are supported o
*** 38435,38453 ****
              /* ... */
            }
  
!      The 'noplt' attribute on function 'foo' tells the compiler to
!      assume that the function 'foo' is externally defined and that the
!      call to 'foo' must avoid the PLT in position-independent code.
  
       In position-dependent code, a few targets also convert calls to
       functions that are marked to not use the PLT to use the GOT
       instead.
  
! 'noreturn'
!      A few standard library functions, such as 'abort' and 'exit',
       cannot return.  GCC knows this automatically.  Some programs define
       their own functions that never return.  You can declare them
!      'noreturn' to tell the compiler this fact.  For example,
  
            void fatal () __attribute__ ((noreturn));
  
--- 38445,38463 ----
              /* ... */
            }
  
!      The ‘noplt’ attribute on function ‘foo’ tells the compiler to
!      assume that the function ‘foo’ is externally defined and that the
!      call to ‘foo’ must avoid the PLT in position-independent code.
  
       In position-dependent code, a few targets also convert calls to
       functions that are marked to not use the PLT to use the GOT
       instead.
  
! ‘noreturn’
!      A few standard library functions, such as ‘abort’ and ‘exit’,
       cannot return.  GCC knows this automatically.  Some programs define
       their own functions that never return.  You can declare them
!      ‘noreturn’ to tell the compiler this fact.  For example,
  
            void fatal () __attribute__ ((noreturn));
  
*************** The following attributes are supported o
*** 38458,38493 ****
              exit (1);
            }
  
!      The 'noreturn' keyword tells the compiler to assume that 'fatal'
       cannot return.  It can then optimize without regard to what would
!      happen if 'fatal' ever did return.  This makes slightly better
       code.  More importantly, it helps avoid spurious warnings of
       uninitialized variables.
  
!      The 'noreturn' keyword does not affect the exceptional path when
!      that applies: a 'noreturn'-marked function may still return to the
!      caller by throwing an exception or calling 'longjmp'.
  
       In order to preserve backtraces, GCC will never turn calls to
!      'noreturn' functions into tail calls.
  
       Do not assume that registers saved by the calling function are
!      restored before calling the 'noreturn' function.
  
!      It does not make sense for a 'noreturn' function to have a return
!      type other than 'void'.
  
! 'nothrow'
!      The 'nothrow' attribute is used to inform the compiler that a
       function cannot throw an exception.  For example, most functions in
       the standard C library can be guaranteed not to throw an exception
!      with the notable exceptions of 'qsort' and 'bsearch' that take
       function pointer arguments.
  
! 'null_terminated_string_arg'
! 'null_terminated_string_arg (N)'
!      The 'null_terminated_string_arg' attribute may be applied to a
!      function that takes a 'char *' or 'const char *' at referenced
       argument N.
  
       It indicates that the passed argument must be a C-style
--- 38468,38503 ----
              exit (1);
            }
  
!      The ‘noreturn’ keyword tells the compiler to assume that ‘fatal’
       cannot return.  It can then optimize without regard to what would
!      happen if ‘fatal’ ever did return.  This makes slightly better
       code.  More importantly, it helps avoid spurious warnings of
       uninitialized variables.
  
!      The ‘noreturn’ keyword does not affect the exceptional path when
!      that applies: a ‘noreturn’-marked function may still return to the
!      caller by throwing an exception or calling ‘longjmp’.
  
       In order to preserve backtraces, GCC will never turn calls to
!      ‘noreturn’ functions into tail calls.
  
       Do not assume that registers saved by the calling function are
!      restored before calling the ‘noreturn’ function.
  
!      It does not make sense for a ‘noreturn’ function to have a return
!      type other than ‘void’.
  
! ‘nothrow’
!      The ‘nothrow’ attribute is used to inform the compiler that a
       function cannot throw an exception.  For example, most functions in
       the standard C library can be guaranteed not to throw an exception
!      with the notable exceptions of ‘qsort’ and ‘bsearch’ that take
       function pointer arguments.
  
! ‘null_terminated_string_arg’
! ‘null_terminated_string_arg (N)’
!      The ‘null_terminated_string_arg’ attribute may be applied to a
!      function that takes a ‘char *’ or ‘const char *’ at referenced
       argument N.
  
       It indicates that the passed argument must be a C-style
*************** The following attributes are supported o
*** 38496,38506 ****
       may scan through the referenced buffer looking for the first zero
       byte.
  
!      In particular, when the analyzer is enabled (via '-fanalyzer'), if
       the pointer is non-null, it will simulate scanning for the first
       zero byte in the referenced buffer, and potentially emit
!      '-Wanalyzer-use-of-uninitialized-value' or
!      '-Wanalyzer-out-of-bounds' on improperly terminated buffers.
  
       For example, given the following:
  
--- 38506,38516 ----
       may scan through the referenced buffer looking for the first zero
       byte.
  
!      In particular, when the analyzer is enabled (via ‘-fanalyzer’), if
       the pointer is non-null, it will simulate scanning for the first
       zero byte in the referenced buffer, and potentially emit
!      ‘-Wanalyzer-use-of-uninitialized-value’ or
!      ‘-Wanalyzer-out-of-bounds’ on improperly terminated buffers.
  
       For example, given the following:
  
*************** The following attributes are supported o
*** 38511,38527 ****
       function are validly terminated.
  
       If the parameter must be non-null, it is appropriate to use both
!      this attribute and the attribute 'nonnull', such as in:
  
            extern char *example_2 (const char *p)
              __attribute__((null_terminated_string_arg (1),
                             nonnull (1)));
  
!      See the 'nonnull' attribute for more information and caveats.
  
!      If the pointer argument is also referred to by an 'access'
!      attribute on the function with ACCESS-MODE either 'read_only' or
!      'read_write' and the latter attribute has the optional SIZE-INDEX
       argument referring to a size argument, this expressses the maximum
       size of the access.  For example, given:
  
--- 38521,38537 ----
       function are validly terminated.
  
       If the parameter must be non-null, it is appropriate to use both
!      this attribute and the attribute ‘nonnull’, such as in:
  
            extern char *example_2 (const char *p)
              __attribute__((null_terminated_string_arg (1),
                             nonnull (1)));
  
!      See the ‘nonnull’ attribute for more information and caveats.
  
!      If the pointer argument is also referred to by an ‘access’
!      attribute on the function with ACCESS-MODE either ‘read_only’ or
!      ‘read_write’ and the latter attribute has the optional SIZE-INDEX
       argument referring to a size argument, this expressses the maximum
       size of the access.  For example, given:
  
*************** The following attributes are supported o
*** 38534,38542 ****
       either be validly null-terminated, or validly readable up to the
       size specified by the second parameter.
  
! 'optimize (LEVEL, ...)'
! 'optimize (STRING, ...)'
!      The 'optimize' attribute is used to specify that a function is to
       be compiled with different optimization options than specified on
       the command line.  The optimize attribute arguments of a function
       behave as if appended to the command-line.
--- 38544,38552 ----
       either be validly null-terminated, or validly readable up to the
       size specified by the second parameter.
  
! ‘optimize (LEVEL, ...)’
! ‘optimize (STRING, ...)’
!      The ‘optimize’ attribute is used to specify that a function is to
       be compiled with different optimization options than specified on
       the command line.  The optimize attribute arguments of a function
       behave as if appended to the command-line.
*************** The following attributes are supported o
*** 38544,38599 ****
       Valid arguments are constant non-negative integers and strings.
       Each numeric argument specifies an optimization LEVEL.  Each STRING
       argument consists of one or more comma-separated substrings.  Each
!      substring that begins with the letter 'O' refers to an optimization
!      option such as '-O0' or '-Os'.  Other substrings are taken as
!      suffixes to the '-f' prefix jointly forming the name of an
       optimization option.  *Note Optimize Options::.
  
!      '#pragma GCC optimize' can be used to set optimization options for
       more than one function.  *Note Function Specific Option Pragmas::,
       for details about the pragma.
  
       Providing multiple strings as arguments separated by commas to
       specify multiple options is equivalent to separating the option
!      suffixes with a comma (',') within a single string.  Spaces are not
       permitted within the strings.
  
       Not every optimization option that starts with the -F prefix
       specified by the attribute necessarily has an effect on the
!      function.  The 'optimize' attribute should be used for debugging
       purposes only.  It is not suitable in production code.
  
! 'patchable_function_entry'
       In case the target's text segment can be made writable at run time
       by any means, padding the function entry with a number of NOPs can
       be used to provide a universal tool for instrumentation.
  
!      The 'patchable_function_entry' function attribute can be used to
       change the number of NOPs to any desired value.  The two-value
       syntax is the same as for the command-line switch
!      '-fpatchable-function-entry=N,M', generating N NOPs, with the
       function entry point before the Mth NOP instruction.  M defaults to
       0 if omitted e.g. function entry point is before the first NOP.
  
       If patchable function entries are enabled globally using the
!      command-line option '-fpatchable-function-entry=N,M', then you must
       disable instrumentation on all functions that are part of the
       instrumentation framework with the attribute
!      'patchable_function_entry (0)' to prevent recursion.
  
! 'pure'
  
       Calls to functions that have no observable effects on the state of
       the program other than to return a value may lend themselves to
       optimizations such as common subexpression elimination.  Declaring
!      such functions with the 'pure' attribute allows GCC to avoid
       emitting some calls in repeated invocations of the function with
       the same argument values.
  
!      The 'pure' attribute prohibits a function from modifying the state
       of the program that is observable by means other than inspecting
       the function's return value.  However, functions declared with the
!      'pure' attribute can safely read any non-volatile objects, and
       modify the value of objects in a way that does not affect their
       return value or the observable state of the program.
  
--- 38554,38609 ----
       Valid arguments are constant non-negative integers and strings.
       Each numeric argument specifies an optimization LEVEL.  Each STRING
       argument consists of one or more comma-separated substrings.  Each
!      substring that begins with the letter ‘O’ refers to an optimization
!      option such as ‘-O0’ or ‘-Os’.  Other substrings are taken as
!      suffixes to the ‘-f’ prefix jointly forming the name of an
       optimization option.  *Note Optimize Options::.
  
!      ‘#pragma GCC optimize’ can be used to set optimization options for
       more than one function.  *Note Function Specific Option Pragmas::,
       for details about the pragma.
  
       Providing multiple strings as arguments separated by commas to
       specify multiple options is equivalent to separating the option
!      suffixes with a comma (‘,’) within a single string.  Spaces are not
       permitted within the strings.
  
       Not every optimization option that starts with the -F prefix
       specified by the attribute necessarily has an effect on the
!      function.  The ‘optimize’ attribute should be used for debugging
       purposes only.  It is not suitable in production code.
  
! ‘patchable_function_entry’
       In case the target's text segment can be made writable at run time
       by any means, padding the function entry with a number of NOPs can
       be used to provide a universal tool for instrumentation.
  
!      The ‘patchable_function_entry’ function attribute can be used to
       change the number of NOPs to any desired value.  The two-value
       syntax is the same as for the command-line switch
!      ‘-fpatchable-function-entry=N,M’, generating N NOPs, with the
       function entry point before the Mth NOP instruction.  M defaults to
       0 if omitted e.g. function entry point is before the first NOP.
  
       If patchable function entries are enabled globally using the
!      command-line option ‘-fpatchable-function-entry=N,M’, then you must
       disable instrumentation on all functions that are part of the
       instrumentation framework with the attribute
!      ‘patchable_function_entry (0)’ to prevent recursion.
  
! ‘pure’
  
       Calls to functions that have no observable effects on the state of
       the program other than to return a value may lend themselves to
       optimizations such as common subexpression elimination.  Declaring
!      such functions with the ‘pure’ attribute allows GCC to avoid
       emitting some calls in repeated invocations of the function with
       the same argument values.
  
!      The ‘pure’ attribute prohibits a function from modifying the state
       of the program that is observable by means other than inspecting
       the function's return value.  However, functions declared with the
!      ‘pure’ attribute can safely read any non-volatile objects, and
       modify the value of objects in a way that does not affect their
       return value or the observable state of the program.
  
*************** The following attributes are supported o
*** 38601,38646 ****
  
            int hash (char *) __attribute__ ((pure));
  
!      tells GCC that subsequent calls to the function 'hash' with the
       same string can be replaced by the result of the first call
!      provided the state of the program observable by 'hash', including
       the contents of the array itself, does not change in between.  Even
!      though 'hash' takes a non-const pointer argument it must not modify
       the array it points to, or any other object whose value the rest of
       the program may depend on.  However, the caller may safely change
       the contents of the array between successive calls to the function
       (doing so disables the optimization).  The restriction also applies
!      to member objects referenced by the 'this' pointer in C++
       non-static member functions.
  
!      Some common examples of pure functions are 'strlen' or 'memcmp'.
       Interesting non-pure functions are functions with infinite loops or
       those depending on volatile memory or other system resource, that
!      may change between consecutive calls (such as the standard C 'feof'
       function in a multithreading environment).
  
!      The 'pure' attribute imposes similar but looser restrictions on a
!      function's definition than the 'const' attribute: 'pure' allows the
       function to read any non-volatile memory, even if it changes in
       between successive invocations of the function.  Declaring the same
!      function with both the 'pure' and the 'const' attribute is
       diagnosed.  Because a pure function cannot have any observable side
       effects it does not make sense for such a function to return
!      'void'.  Declaring such a function is diagnosed.
  
! 'retain'
       For ELF targets that support the GNU or FreeBSD OSABIs, this
       attribute will save the function from linker garbage collection.
       To support this behavior, functions that have not been placed in
!      specific sections (e.g.  by the 'section' attribute, or the
!      '-ffunction-sections' option), will be placed in new, unique
       sections.
  
       This additional functionality requires Binutils version 2.36 or
       later.
  
! 'returns_nonnull'
!      The 'returns_nonnull' attribute specifies that the function return
       value should be a non-null pointer.  For instance, the declaration:
  
            extern void *
--- 38611,38656 ----
  
            int hash (char *) __attribute__ ((pure));
  
!      tells GCC that subsequent calls to the function ‘hash’ with the
       same string can be replaced by the result of the first call
!      provided the state of the program observable by ‘hash’, including
       the contents of the array itself, does not change in between.  Even
!      though ‘hash’ takes a non-const pointer argument it must not modify
       the array it points to, or any other object whose value the rest of
       the program may depend on.  However, the caller may safely change
       the contents of the array between successive calls to the function
       (doing so disables the optimization).  The restriction also applies
!      to member objects referenced by the ‘this’ pointer in C++
       non-static member functions.
  
!      Some common examples of pure functions are ‘strlen’ or ‘memcmp’.
       Interesting non-pure functions are functions with infinite loops or
       those depending on volatile memory or other system resource, that
!      may change between consecutive calls (such as the standard C ‘feof’
       function in a multithreading environment).
  
!      The ‘pure’ attribute imposes similar but looser restrictions on a
!      function's definition than the ‘const’ attribute: ‘pure’ allows the
       function to read any non-volatile memory, even if it changes in
       between successive invocations of the function.  Declaring the same
!      function with both the ‘pure’ and the ‘const’ attribute is
       diagnosed.  Because a pure function cannot have any observable side
       effects it does not make sense for such a function to return
!      ‘void’.  Declaring such a function is diagnosed.
  
! ‘retain’
       For ELF targets that support the GNU or FreeBSD OSABIs, this
       attribute will save the function from linker garbage collection.
       To support this behavior, functions that have not been placed in
!      specific sections (e.g.  by the ‘section’ attribute, or the
!      ‘-ffunction-sections’ option), will be placed in new, unique
       sections.
  
       This additional functionality requires Binutils version 2.36 or
       later.
  
! ‘returns_nonnull’
!      The ‘returns_nonnull’ attribute specifies that the function return
       value should be a non-null pointer.  For instance, the declaration:
  
            extern void *
*************** The following attributes are supported o
*** 38649,38683 ****
       lets the compiler optimize callers based on the knowledge that the
       return value will never be null.
  
! 'returns_twice'
!      The 'returns_twice' attribute tells the compiler that a function
       may return more than one time.  The compiler ensures that all
       registers are dead before calling such a function and emits a
       warning about the variables that may be clobbered after the second
!      return from the function.  Examples of such functions are 'setjmp'
!      and 'vfork'.  The 'longjmp'-like counterpart of such function, if
!      any, might need to be marked with the 'noreturn' attribute.
  
! 'section ("SECTION-NAME")'
!      Normally, the compiler places the code it generates in the 'text'
       section.  Sometimes, however, you need additional sections, or you
       need certain particular functions to appear in special sections.
!      The 'section' attribute specifies that a function lives in a
       particular section.  For example, the declaration:
  
            extern void foobar (void) __attribute__ ((section ("bar")));
  
!      puts the function 'foobar' in the 'bar' section.
  
       Some file formats do not support arbitrary sections so the
!      'section' attribute is not available on all platforms.  If you need
       to map the entire contents of a module to a particular section,
       consider using the facilities of the linker instead.
  
! 'sentinel'
! 'sentinel (POSITION)'
       This function attribute indicates that an argument in a call to the
!      function is expected to be an explicit 'NULL'.  The attribute is
       only valid on variadic functions.  By default, the sentinel is
       expected to be the last argument of the function call.  If the
       optional POSITION argument is specified to the attribute, the
--- 38659,38693 ----
       lets the compiler optimize callers based on the knowledge that the
       return value will never be null.
  
! ‘returns_twice’
!      The ‘returns_twice’ attribute tells the compiler that a function
       may return more than one time.  The compiler ensures that all
       registers are dead before calling such a function and emits a
       warning about the variables that may be clobbered after the second
!      return from the function.  Examples of such functions are ‘setjmp’
!      and ‘vfork’.  The ‘longjmp’-like counterpart of such function, if
!      any, might need to be marked with the ‘noreturn’ attribute.
  
! ‘section ("SECTION-NAME")’
!      Normally, the compiler places the code it generates in the ‘text’
       section.  Sometimes, however, you need additional sections, or you
       need certain particular functions to appear in special sections.
!      The ‘section’ attribute specifies that a function lives in a
       particular section.  For example, the declaration:
  
            extern void foobar (void) __attribute__ ((section ("bar")));
  
!      puts the function ‘foobar’ in the ‘bar’ section.
  
       Some file formats do not support arbitrary sections so the
!      ‘section’ attribute is not available on all platforms.  If you need
       to map the entire contents of a module to a particular section,
       consider using the facilities of the linker instead.
  
! ‘sentinel’
! ‘sentinel (POSITION)’
       This function attribute indicates that an argument in a call to the
!      function is expected to be an explicit ‘NULL’.  The attribute is
       only valid on variadic functions.  By default, the sentinel is
       expected to be the last argument of the function call.  If the
       optional POSITION argument is specified to the attribute, the
*************** The following attributes are supported o
*** 38689,38708 ****
            __attribute__ ((sentinel(0)))
  
       The attribute is automatically set with a position of 0 for the
!      built-in functions 'execl' and 'execlp'.  The built-in function
!      'execle' has the attribute set with a position of 1.
  
!      A valid 'NULL' in this context is defined as zero with any object
!      pointer type.  If your system defines the 'NULL' macro with an
       integer type then you need to add an explicit cast.  During
!      installation GCC replaces the system '<stddef.h>' header with a
       copy that redefines NULL appropriately.
  
       The warnings for missing or incorrect sentinels are enabled with
!      '-Wformat'.
  
! 'simd'
! 'simd("MASK")'
       This attribute enables creation of one or more function versions
       that can process multiple arguments using SIMD instructions from a
       single invocation.  Specifying this attribute allows compiler to
--- 38699,38718 ----
            __attribute__ ((sentinel(0)))
  
       The attribute is automatically set with a position of 0 for the
!      built-in functions ‘execl’ and ‘execlp’.  The built-in function
!      ‘execle’ has the attribute set with a position of 1.
  
!      A valid ‘NULL’ in this context is defined as zero with any object
!      pointer type.  If your system defines the ‘NULL’ macro with an
       integer type then you need to add an explicit cast.  During
!      installation GCC replaces the system ‘<stddef.h>’ header with a
       copy that redefines NULL appropriately.
  
       The warnings for missing or incorrect sentinels are enabled with
!      ‘-Wformat’.
  
! ‘simd’
! ‘simd("MASK")’
       This attribute enables creation of one or more function versions
       that can process multiple arguments using SIMD instructions from a
       single invocation.  Specifying this attribute allows compiler to
*************** The following attributes are supported o
*** 38712,38735 ****
       document.  For x86_64 target this document can be found
       here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
  
!      The optional argument MASK may have the value 'notinbranch' or
!      'inbranch', and instructs the compiler to generate non-masked or
       masked clones correspondingly.  By default, all clones are
       generated.
  
!      If the attribute is specified and '#pragma omp declare simd' is
!      present on a declaration and the '-fopenmp' or '-fopenmp-simd'
       switch is specified, then the attribute is ignored.
  
! 'stack_protect'
       This attribute adds stack protection code to the function if flags
!      '-fstack-protector', '-fstack-protector-strong' or
!      '-fstack-protector-explicit' are set.
  
! 'symver ("NAME2@NODENAME")'
       On ELF targets this attribute creates a symbol version.  The NAME2
       part of the parameter is the actual name of the symbol by which it
!      will be externally referenced.  The 'nodename' portion should be
       the name of a node specified in the version script supplied to the
       linker when building a shared library.  Versioned symbol must be
       defined and must be exported with default visibility.
--- 38722,38745 ----
       document.  For x86_64 target this document can be found
       here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
  
!      The optional argument MASK may have the value ‘notinbranch’ or
!      ‘inbranch’, and instructs the compiler to generate non-masked or
       masked clones correspondingly.  By default, all clones are
       generated.
  
!      If the attribute is specified and ‘#pragma omp declare simd’ is
!      present on a declaration and the ‘-fopenmp’ or ‘-fopenmp-simd’
       switch is specified, then the attribute is ignored.
  
! ‘stack_protect’
       This attribute adds stack protection code to the function if flags
!      ‘-fstack-protector’, ‘-fstack-protector-strong’ or
!      ‘-fstack-protector-explicit’ are set.
  
! ‘symver ("NAME2@NODENAME")’
       On ELF targets this attribute creates a symbol version.  The NAME2
       part of the parameter is the actual name of the symbol by which it
!      will be externally referenced.  The ‘nodename’ portion should be
       the name of a node specified in the version script supplied to the
       linker when building a shared library.  Versioned symbol must be
       defined and must be exported with default visibility.
*************** The following attributes are supported o
*** 38739,38745 ****
            {
            }
  
!      Will produce a '.symver foo_v1, foo@VERS_1' directive in the
       assembler output.
  
       One can also define multiple version for a given symbol (starting
--- 38749,38755 ----
            {
            }
  
!      Will produce a ‘.symver foo_v1, foo@VERS_1’ directive in the
       assembler output.
  
       One can also define multiple version for a given symbol (starting
*************** The following attributes are supported o
*** 38750,38757 ****
            {
            }
  
!      This example creates a symbol name 'symver_foo_v1' which will be
!      version 'VERS_2' and 'VERS_3' of 'foo'.
  
       If you have an older release of binutils, then symbol alias needs
       to be used:
--- 38760,38767 ----
            {
            }
  
!      This example creates a symbol name ‘symver_foo_v1’ which will be
!      version ‘VERS_2’ and ‘VERS_3’ of ‘foo’.
  
       If you have an older release of binutils, then symbol alias needs
       to be used:
*************** The following attributes are supported o
*** 38766,38777 ****
            __attribute__ ((alias ("foo_v1")))
            int symver_foo_v1 (void);
  
!      Finally if the parameter is '"NAME2@@NODENAME"' then in addition to
!      creating a symbol version (as if '"NAME2@NODENAME"' was used) the
       version will be also used to resolve NAME2 by the linker.
  
! 'tainted_args'
!      The 'tainted_args' attribute is used to specify that a function is
       called in a way that requires sanitization of its arguments, such
       as a system call in an operating system kernel.  Such a function
       can be considered part of the "attack surface" of the program.  The
--- 38776,38787 ----
            __attribute__ ((alias ("foo_v1")))
            int symver_foo_v1 (void);
  
!      Finally if the parameter is ‘"NAME2@@NODENAME"’ then in addition to
!      creating a symbol version (as if ‘"NAME2@NODENAME"’ was used) the
       version will be also used to resolve NAME2 by the linker.
  
! ‘tainted_args’
!      The ‘tainted_args’ attribute is used to specify that a function is
       called in a way that requires sanitization of its arguments, such
       as a system call in an operating system kernel.  Such a function
       can be considered part of the "attack surface" of the program.  The
*************** The following attributes are supported o
*** 38781,38815 ****
       treated as being called with tainted arguments.
  
       The analyzer will pay particular attention to such functions when
!      '-fanalyzer' is supplied, potentially issuing warnings guarded by
!      '-Wanalyzer-tainted-allocation-size',
!      '-Wanalyzer-tainted-array-index', '-Wanalyzer-tainted-divisor',
!      '-Wanalyzer-tainted-offset', and '-Wanalyzer-tainted-size'.
  
! 'target (STRING, ...)'
!      Multiple target back ends implement the 'target' attribute to
       specify that a function is to be compiled with different target
       options than specified on the command line.  The original target
       command-line options are ignored.  One or more strings can be
       provided as arguments.  Each string consists of one or more
!      comma-separated suffixes to the '-m' prefix jointly forming the
       name of a machine-dependent option.  *Note Machine-Dependent
       Options: Submodel Options.
  
!      The 'target' attribute can be used for instance to have a function
       compiled with a different ISA (instruction set architecture) than
!      the default.  '#pragma GCC target' can be used to specify
       target-specific options for more than one function.  *Note Function
       Specific Option Pragmas::, for details about the pragma.
  
       For instance, on an x86, you could declare one function with the
!      'target("sse4.1,arch=core2")' attribute and another with
!      'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
!      the first function with '-msse4.1' and '-march=core2' options, and
!      the second function with '-msse4a' and '-march=amdfam10' options.
       It is up to you to make sure that a function is only invoked on a
       machine that supports the particular ISA it is compiled for (for
!      example by using 'cpuid' on x86 to determine what feature bits and
       architecture family are used).
  
            int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
--- 38791,38825 ----
       treated as being called with tainted arguments.
  
       The analyzer will pay particular attention to such functions when
!      ‘-fanalyzer’ is supplied, potentially issuing warnings guarded by
!      ‘-Wanalyzer-tainted-allocation-size’,
!      ‘-Wanalyzer-tainted-array-index’, ‘-Wanalyzer-tainted-divisor’,
!      ‘-Wanalyzer-tainted-offset’, and ‘-Wanalyzer-tainted-size’.
  
! ‘target (STRING, ...)’
!      Multiple target back ends implement the ‘target’ attribute to
       specify that a function is to be compiled with different target
       options than specified on the command line.  The original target
       command-line options are ignored.  One or more strings can be
       provided as arguments.  Each string consists of one or more
!      comma-separated suffixes to the ‘-m’ prefix jointly forming the
       name of a machine-dependent option.  *Note Machine-Dependent
       Options: Submodel Options.
  
!      The ‘target’ attribute can be used for instance to have a function
       compiled with a different ISA (instruction set architecture) than
!      the default.  ‘#pragma GCC target’ can be used to specify
       target-specific options for more than one function.  *Note Function
       Specific Option Pragmas::, for details about the pragma.
  
       For instance, on an x86, you could declare one function with the
!      ‘target("sse4.1,arch=core2")’ attribute and another with
!      ‘target("sse4a,arch=amdfam10")’.  This is equivalent to compiling
!      the first function with ‘-msse4.1’ and ‘-march=core2’ options, and
!      the second function with ‘-msse4a’ and ‘-march=amdfam10’ options.
       It is up to you to make sure that a function is only invoked on a
       machine that supports the particular ISA it is compiled for (for
!      example by using ‘cpuid’ on x86 to determine what feature bits and
       architecture family are used).
  
            int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
*************** The following attributes are supported o
*** 38817,38823 ****
  
       Providing multiple strings as arguments separated by commas to
       specify multiple options is equivalent to separating the option
!      suffixes with a comma (',') within a single string.  Spaces are not
       permitted within the strings.
  
       The options supported are specific to each target; refer to *note
--- 38827,38833 ----
  
       Providing multiple strings as arguments separated by commas to
       specify multiple options is equivalent to separating the option
!      suffixes with a comma (‘,’) within a single string.  Spaces are not
       permitted within the strings.
  
       The options supported are specific to each target; refer to *note
*************** The following attributes are supported o
*** 38826,38875 ****
       Attributes::, *note Nios II Function Attributes::, and *note S/390
       Function Attributes:: for details.
  
! 'target_clones (OPTIONS)'
!      The 'target_clones' attribute is used to specify that a function be
       cloned into multiple versions compiled with different target
       options than specified on the command line.  The supported options
!      and restrictions are the same as for 'target' attribute.
  
       For instance, on an x86, you could compile a function with
!      'target_clones("sse4.1,avx")'.  GCC creates two function clones,
!      one compiled with '-msse4.1' and another with '-mavx'.
  
       On a PowerPC, you can compile a function with
!      'target_clones("cpu=power9,default")'.  GCC will create two
!      function clones, one compiled with '-mcpu=power9' and another with
       the default options.  GCC must be configured to use GLIBC 2.23 or
!      newer in order to use the 'target_clones' attribute.
  
!      It also creates a resolver function (see the 'ifunc' attribute
       above) that dynamically selects a clone suitable for current
       architecture.  The resolver is created only if there is a usage of
!      a function with 'target_clones' attribute.
  
!      Note that any subsequent call of a function without 'target_clone'
!      from a 'target_clone' caller will not lead to copying (target
       clone) of the called function.  If you want to enforce such
       behaviour, we recommend declaring the calling function with the
!      'flatten' attribute?
  
! 'unavailable'
! 'unavailable (MSG)'
!      The 'unavailable' attribute results in an error if the function is
       used anywhere in the source file.  This is useful when identifying
       functions that have been removed from a particular variation of an
       interface.  Other than emitting an error rather than a warning, the
!      'unavailable' attribute behaves in the same manner as 'deprecated'.
  
!      The 'unavailable' attribute can also be used for variables and
       types (*note Variable Attributes::, *note Type Attributes::.)
  
! 'unused'
       This attribute, attached to a function, means that the function is
       meant to be possibly unused.  GCC does not produce a warning for
       this function.
  
! 'used'
       This attribute, attached to a function, means that code must be
       emitted for the function even if it appears that the function is
       not referenced.  This is useful, for example, when the function is
--- 38836,38885 ----
       Attributes::, *note Nios II Function Attributes::, and *note S/390
       Function Attributes:: for details.
  
! ‘target_clones (OPTIONS)’
!      The ‘target_clones’ attribute is used to specify that a function be
       cloned into multiple versions compiled with different target
       options than specified on the command line.  The supported options
!      and restrictions are the same as for ‘target’ attribute.
  
       For instance, on an x86, you could compile a function with
!      ‘target_clones("sse4.1,avx")’.  GCC creates two function clones,
!      one compiled with ‘-msse4.1’ and another with ‘-mavx’.
  
       On a PowerPC, you can compile a function with
!      ‘target_clones("cpu=power9,default")’.  GCC will create two
!      function clones, one compiled with ‘-mcpu=power9’ and another with
       the default options.  GCC must be configured to use GLIBC 2.23 or
!      newer in order to use the ‘target_clones’ attribute.
  
!      It also creates a resolver function (see the ‘ifunc’ attribute
       above) that dynamically selects a clone suitable for current
       architecture.  The resolver is created only if there is a usage of
!      a function with ‘target_clones’ attribute.
  
!      Note that any subsequent call of a function without ‘target_clone’
!      from a ‘target_clone’ caller will not lead to copying (target
       clone) of the called function.  If you want to enforce such
       behaviour, we recommend declaring the calling function with the
!      ‘flatten’ attribute?
  
! ‘unavailable’
! ‘unavailable (MSG)’
!      The ‘unavailable’ attribute results in an error if the function is
       used anywhere in the source file.  This is useful when identifying
       functions that have been removed from a particular variation of an
       interface.  Other than emitting an error rather than a warning, the
!      ‘unavailable’ attribute behaves in the same manner as ‘deprecated’.
  
!      The ‘unavailable’ attribute can also be used for variables and
       types (*note Variable Attributes::, *note Type Attributes::.)
  
! ‘unused’
       This attribute, attached to a function, means that the function is
       meant to be possibly unused.  GCC does not produce a warning for
       this function.
  
! ‘used’
       This attribute, attached to a function, means that code must be
       emitted for the function even if it appears that the function is
       not referenced.  This is useful, for example, when the function is
*************** The following attributes are supported o
*** 38879,38885 ****
       attribute also means that the function is instantiated if the class
       itself is instantiated.
  
! 'visibility ("VISIBILITY_TYPE")'
       This attribute affects the linkage of the declaration to which it
       is attached.  It can be applied to variables (*note Common Variable
       Attributes::) and types (*note Common Type Attributes::) as well as
--- 38889,38895 ----
       attribute also means that the function is instantiated if the class
       itself is instantiated.
  
! ‘visibility ("VISIBILITY_TYPE")’
       This attribute affects the linkage of the declaration to which it
       is attached.  It can be applied to variables (*note Common Variable
       Attributes::) and types (*note Common Type Attributes::) as well as
*************** The following attributes are supported o
*** 38895,38901 ****
       The possible values of VISIBILITY_TYPE correspond to the visibility
       settings in the ELF gABI.
  
!      'default'
            Default visibility is the normal case for the object file
            format.  This value is available for the visibility attribute
            to override other options that may change the assumed
--- 38905,38911 ----
       The possible values of VISIBILITY_TYPE correspond to the visibility
       settings in the ELF gABI.
  
!      ‘default’
            Default visibility is the normal case for the object file
            format.  This value is available for the visibility attribute
            to override other options that may change the assumed
*************** The following attributes are supported o
*** 38911,38923 ****
            Default visibility corresponds to "external linkage" in the
            language.
  
!      'hidden'
            Hidden visibility indicates that the entity declared has a new
            form of linkage, which we call "hidden linkage".  Two
            declarations of an object with hidden linkage refer to the
            same object if they are in the same shared object.
  
!      'internal'
            Internal visibility is like hidden visibility, but with
            additional processor specific semantics.  Unless otherwise
            specified by the psABI, GCC defines internal visibility to
--- 38921,38933 ----
            Default visibility corresponds to "external linkage" in the
            language.
  
!      ‘hidden’
            Hidden visibility indicates that the entity declared has a new
            form of linkage, which we call "hidden linkage".  Two
            declarations of an object with hidden linkage refer to the
            same object if they are in the same shared object.
  
!      ‘internal’
            Internal visibility is like hidden visibility, but with
            additional processor specific semantics.  Unless otherwise
            specified by the psABI, GCC defines internal visibility to
*************** The following attributes are supported o
*** 38929,38942 ****
            instance omit the load of a PIC register since it is known
            that the calling function loaded the correct value.
  
!      'protected'
            Protected visibility is like default visibility except that it
            indicates that references within the defining module bind to
            the definition in that module.  That is, the declared entity
            cannot be overridden by another module.
  
       All visibilities are supported on many, but not all, ELF targets
!      (supported when the assembler supports the '.visibility'
       pseudo-op).  Default visibility is supported everywhere.  Hidden
       visibility is supported on Darwin targets.
  
--- 38939,38952 ----
            instance omit the load of a PIC register since it is known
            that the calling function loaded the correct value.
  
!      ‘protected’
            Protected visibility is like default visibility except that it
            indicates that references within the defining module bind to
            the definition in that module.  That is, the declared entity
            cannot be overridden by another module.
  
       All visibilities are supported on many, but not all, ELF targets
!      (supported when the assembler supports the ‘.visibility’
       pseudo-op).  Default visibility is supported everywhere.  Hidden
       visibility is supported on Darwin targets.
  
*************** The following attributes are supported o
*** 38968,38974 ****
  
       This attribute applies only to the particular namespace body, not
       to other definitions of the same namespace; it is equivalent to
!      using '#pragma GCC visibility' before and after the namespace
       definition (*note Visibility Pragmas::).
  
       In C++, if a template argument has limited visibility, this
--- 38978,38984 ----
  
       This attribute applies only to the particular namespace body, not
       to other definitions of the same namespace; it is equivalent to
!      using ‘#pragma GCC visibility’ before and after the namespace
       definition (*note Visibility Pragmas::).
  
       In C++, if a template argument has limited visibility, this
*************** The following attributes are supported o
*** 38979,38990 ****
       If both the template and enclosing class have explicit visibility,
       the visibility from the template is used.
  
! 'warn_unused_result'
!      The 'warn_unused_result' attribute causes a warning to be emitted
       if a caller of the function with this attribute does not use its
       return value.  This is useful for functions where not checking the
       result is either a security problem or always a bug, such as
!      'realloc'.
  
            int fn () __attribute__ ((warn_unused_result));
            int foo ()
--- 38989,39000 ----
       If both the template and enclosing class have explicit visibility,
       the visibility from the template is used.
  
! ‘warn_unused_result’
!      The ‘warn_unused_result’ attribute causes a warning to be emitted
       if a caller of the function with this attribute does not use its
       return value.  This is useful for functions where not checking the
       result is either a security problem or always a bug, such as
!      ‘realloc’.
  
            int fn () __attribute__ ((warn_unused_result));
            int foo ()
*************** The following attributes are supported o
*** 38996,39003 ****
  
       results in warning on line 5.
  
! 'weak'
!      The 'weak' attribute causes a declaration of an external symbol to
       be emitted as a weak symbol rather than a global.  This is
       primarily useful in defining library functions that can be
       overridden in user code, though it can also be used with
--- 39006,39013 ----
  
       results in warning on line 5.
  
! ‘weak’
!      The ‘weak’ attribute causes a declaration of an external symbol to
       be emitted as a weak symbol rather than a global.  This is
       primarily useful in defining library functions that can be
       overridden in user code, though it can also be used with
*************** The following attributes are supported o
*** 39007,39025 ****
       symbol.  Weak symbols are supported for ELF targets, and also for
       a.out targets when using the GNU assembler and linker.
  
! 'weakref'
! 'weakref ("TARGET")'
!      The 'weakref' attribute marks a declaration as a weak reference.
!      Without arguments, it should be accompanied by an 'alias' attribute
       naming the target symbol.  Alternatively, TARGET may be given as an
!      argument to 'weakref' itself, naming the target definition of the
       alias.  The TARGET must have the same type as the declaration.  In
       addition, if it designates a variable it must also have the same
       size and alignment as the declaration.  In either form of the
!      declaration 'weakref' implicitly marks the declared symbol as
!      'weak'.  Without a TARGET given as an argument to 'weakref' or to
!      'alias', 'weakref' is equivalent to 'weak' (in that case the
!      declaration may be 'extern').
  
            /* Given the declaration: */
            extern int y (void);
--- 39017,39035 ----
       symbol.  Weak symbols are supported for ELF targets, and also for
       a.out targets when using the GNU assembler and linker.
  
! ‘weakref’
! ‘weakref ("TARGET")’
!      The ‘weakref’ attribute marks a declaration as a weak reference.
!      Without arguments, it should be accompanied by an ‘alias’ attribute
       naming the target symbol.  Alternatively, TARGET may be given as an
!      argument to ‘weakref’ itself, naming the target definition of the
       alias.  The TARGET must have the same type as the declaration.  In
       addition, if it designates a variable it must also have the same
       size and alignment as the declaration.  In either form of the
!      declaration ‘weakref’ implicitly marks the declared symbol as
!      ‘weak’.  Without a TARGET given as an argument to ‘weakref’ or to
!      ‘alias’, ‘weakref’ is equivalent to ‘weak’ (in that case the
!      declaration may be ‘extern’).
  
            /* Given the declaration: */
            extern int y (void);
*************** The following attributes are supported o
*** 39037,39043 ****
       A weak reference is an alias that does not by itself require a
       definition to be given for the target symbol.  If the target symbol
       is only referenced through weak references, then it becomes a
!      'weak' undefined symbol.  If it is directly referenced, however,
       then such strong references prevail, and a definition is required
       for the symbol, not necessarily in the same translation unit.
  
--- 39047,39053 ----
       A weak reference is an alias that does not by itself require a
       definition to be given for the target symbol.  If the target symbol
       is only referenced through weak references, then it becomes a
!      ‘weak’ undefined symbol.  If it is directly referenced, however,
       then such strong references prevail, and a definition is required
       for the symbol, not necessarily in the same translation unit.
  
*************** The following attributes are supported o
*** 39045,39058 ****
       separate translation unit, renaming the alias to the aliased
       symbol, declaring it as weak, compiling the two separate
       translation units and performing a link with relocatable output
!      (i.e. 'ld -r') on them.
  
!      A declaration to which 'weakref' is attached and that is associated
!      with a named 'target' must be 'static'.
  
! 'zero_call_used_regs ("CHOICE")'
  
!      The 'zero_call_used_regs' attribute causes the compiler to zero a
       subset of all call-used registers(1) at function return.  This is
       used to increase program security by either mitigating
       Return-Oriented Programming (ROP) attacks or preventing information
--- 39055,39068 ----
       separate translation unit, renaming the alias to the aliased
       symbol, declaring it as weak, compiling the two separate
       translation units and performing a link with relocatable output
!      (i.e. ‘ld -r’) on them.
  
!      A declaration to which ‘weakref’ is attached and that is associated
!      with a named ‘target’ must be ‘static’.
  
! ‘zero_call_used_regs ("CHOICE")’
  
!      The ‘zero_call_used_regs’ attribute causes the compiler to zero a
       subset of all call-used registers(1) at function return.  This is
       used to increase program security by either mitigating
       Return-Oriented Programming (ROP) attacks or preventing information
*************** The following attributes are supported o
*** 39063,39088 ****
       provides a flexible way to choose the subset of the call-used
       registers to be zeroed.  The four basic values of CHOICE are:
  
!         * 'skip' doesn't zero any call-used registers.
  
!         * 'used' only zeros call-used registers that are used in the
            function.  A "used" register is one whose content has been set
            or referenced in the function.
  
!         * 'all' zeros all call-used registers.
  
!         * 'leafy' behaves like 'used' in a leaf function, and like 'all'
            in a nonleaf function.  This makes for leaner zeroing in leaf
            functions, where the set of used registers is known, and that
            may be enough for some purposes of register zeroing.
  
       In addition to these three basic choices, it is possible to modify
!      'used', 'all', and 'leafy' as follows:
  
!         * Adding '-gpr' restricts the zeroing to general-purpose
            registers.
  
!         * Adding '-arg' restricts the zeroing to registers that can
            sometimes be used to pass function arguments.  This includes
            all argument registers defined by the platform's calling
            conversion, regardless of whether the function uses those
--- 39073,39098 ----
       provides a flexible way to choose the subset of the call-used
       registers to be zeroed.  The four basic values of CHOICE are:
  
!         • ‘skip’ doesn't zero any call-used registers.
  
!         • ‘used’ only zeros call-used registers that are used in the
            function.  A "used" register is one whose content has been set
            or referenced in the function.
  
!         • ‘all’ zeros all call-used registers.
  
!         • ‘leafy’ behaves like ‘used’ in a leaf function, and like ‘all’
            in a nonleaf function.  This makes for leaner zeroing in leaf
            functions, where the set of used registers is known, and that
            may be enough for some purposes of register zeroing.
  
       In addition to these three basic choices, it is possible to modify
!      ‘used’, ‘all’, and ‘leafy’ as follows:
  
!         • Adding ‘-gpr’ restricts the zeroing to general-purpose
            registers.
  
!         • Adding ‘-arg’ restricts the zeroing to registers that can
            sometimes be used to pass function arguments.  This includes
            all argument registers defined by the platform's calling
            conversion, regardless of whether the function uses those
*************** The following attributes are supported o
*** 39093,39151 ****
  
       The full list of CHOICEs is therefore:
  
!      'skip'
            doesn't zero any call-used register.
  
!      'used'
            only zeros call-used registers that are used in the function.
  
!      'used-gpr'
            only zeros call-used general purpose registers that are used
            in the function.
  
!      'used-arg'
            only zeros call-used registers that are used in the function
            and pass arguments.
  
!      'used-gpr-arg'
            only zeros call-used general purpose registers that are used
            in the function and pass arguments.
  
!      'all'
            zeros all call-used registers.
  
!      'all-gpr'
            zeros all call-used general purpose registers.
  
!      'all-arg'
            zeros all call-used registers that pass arguments.
  
!      'all-gpr-arg'
            zeros all call-used general purpose registers that pass
            arguments.
  
!      'leafy'
!           Same as 'used' in a leaf function, and same as 'all' in a
            nonleaf function.
  
!      'leafy-gpr'
!           Same as 'used-gpr' in a leaf function, and same as 'all-gpr'
            in a nonleaf function.
  
!      'leafy-arg'
!           Same as 'used-arg' in a leaf function, and same as 'all-arg'
            in a nonleaf function.
  
!      'leafy-gpr-arg'
!           Same as 'used-gpr-arg' in a leaf function, and same as
!           'all-gpr-arg' in a nonleaf function.
  
!      Of this list, 'used-arg', 'used-gpr-arg', 'all-arg', 'all-gpr-arg',
!      'leafy-arg', and 'leafy-gpr-arg' are mainly used for ROP
       mitigation.
  
       The default for the attribute is controlled by
!      '-fzero-call-used-regs'.
  
     ---------- Footnotes ----------
  
--- 39103,39161 ----
  
       The full list of CHOICEs is therefore:
  
!      ‘skip’
            doesn't zero any call-used register.
  
!      ‘used’
            only zeros call-used registers that are used in the function.
  
!      ‘used-gpr’
            only zeros call-used general purpose registers that are used
            in the function.
  
!      ‘used-arg’
            only zeros call-used registers that are used in the function
            and pass arguments.
  
!      ‘used-gpr-arg’
            only zeros call-used general purpose registers that are used
            in the function and pass arguments.
  
!      ‘all’
            zeros all call-used registers.
  
!      ‘all-gpr’
            zeros all call-used general purpose registers.
  
!      ‘all-arg’
            zeros all call-used registers that pass arguments.
  
!      ‘all-gpr-arg’
            zeros all call-used general purpose registers that pass
            arguments.
  
!      ‘leafy’
!           Same as ‘used’ in a leaf function, and same as ‘all’ in a
            nonleaf function.
  
!      ‘leafy-gpr’
!           Same as ‘used-gpr’ in a leaf function, and same as ‘all-gpr’
            in a nonleaf function.
  
!      ‘leafy-arg’
!           Same as ‘used-arg’ in a leaf function, and same as ‘all-arg’
            in a nonleaf function.
  
!      ‘leafy-gpr-arg’
!           Same as ‘used-gpr-arg’ in a leaf function, and same as
!           ‘all-gpr-arg’ in a nonleaf function.
  
!      Of this list, ‘used-arg’, ‘used-gpr-arg’, ‘all-arg’, ‘all-gpr-arg’,
!      ‘leafy-arg’, and ‘leafy-gpr-arg’ are mainly used for ROP
       mitigation.
  
       The default for the attribute is controlled by
!      ‘-fzero-call-used-regs’.
  
     ---------- Footnotes ----------
  
*************** AArch64 target.  For the most part, thes
*** 39166,39245 ****
  similar command-line options (*note AArch64 Options::), but on a
  per-function basis.
  
! 'general-regs-only'
       Indicates that no floating-point or Advanced SIMD registers should
       be used when generating code for this function.  If the function
       explicitly uses floating-point code, then the compiler gives an
       error.  This is the same behavior as that of the command-line
!      option '-mgeneral-regs-only'.
  
! 'fix-cortex-a53-835769'
       Indicates that the workaround for the Cortex-A53 erratum 835769
       should be applied to this function.  To explicitly disable the
       workaround for this function specify the negated form:
!      'no-fix-cortex-a53-835769'.  This corresponds to the behavior of
!      the command line options '-mfix-cortex-a53-835769' and
!      '-mno-fix-cortex-a53-835769'.
  
! 'cmodel='
       Indicates that code should be generated for a particular code model
       for this function.  The behavior and permissible arguments are the
!      same as for the command line option '-mcmodel='.
  
! 'strict-align'
! 'no-strict-align'
!      'strict-align' indicates that the compiler should not assume that
       unaligned memory references are handled by the system.  To allow
       the compiler to assume that aligned memory references are handled
!      by the system, the inverse attribute 'no-strict-align' can be
       specified.  The behavior is same as for the command-line option
!      '-mstrict-align' and '-mno-strict-align'.
  
! 'omit-leaf-frame-pointer'
       Indicates that the frame pointer should be omitted for a leaf
       function call.  To keep the frame pointer, the inverse attribute
!      'no-omit-leaf-frame-pointer' can be specified.  These attributes
       have the same behavior as the command-line options
!      '-momit-leaf-frame-pointer' and '-mno-omit-leaf-frame-pointer'.
  
! 'tls-dialect='
       Specifies the TLS dialect to use for this function.  The behavior
       and permissible arguments are the same as for the command-line
!      option '-mtls-dialect='.
  
! 'arch='
       Specifies the architecture version and architectural extensions to
       use for this function.  The behavior and permissible arguments are
!      the same as for the '-march=' command-line option.
  
! 'tune='
       Specifies the core for which to tune the performance of this
       function.  The behavior and permissible arguments are the same as
!      for the '-mtune=' command-line option.
  
! 'cpu='
       Specifies the core for which to tune the performance of this
       function and also whose architectural features to use.  The
!      behavior and valid arguments are the same as for the '-mcpu='
       command-line option.
  
! 'sign-return-address'
       Select the function scope on which return address signing will be
       applied.  The behavior and permissible arguments are the same as
!      for the command-line option '-msign-return-address='.  The default
!      value is 'none'.  This attribute is deprecated.  The
!      'branch-protection' attribute should be used instead.
  
! 'branch-protection'
       Select the function scope on which branch protection will be
       applied.  The behavior and permissible arguments are the same as
!      for the command-line option '-mbranch-protection='.  The default
!      value is 'none'.
  
! 'outline-atomics'
       Enable or disable calls to out-of-line helpers to implement atomic
       operations.  This corresponds to the behavior of the command line
!      options '-moutline-atomics' and '-mno-outline-atomics'.
  
   The above target attributes can be specified as follows:
  
--- 39176,39255 ----
  similar command-line options (*note AArch64 Options::), but on a
  per-function basis.
  
! ‘general-regs-only’
       Indicates that no floating-point or Advanced SIMD registers should
       be used when generating code for this function.  If the function
       explicitly uses floating-point code, then the compiler gives an
       error.  This is the same behavior as that of the command-line
!      option ‘-mgeneral-regs-only’.
  
! ‘fix-cortex-a53-835769’
       Indicates that the workaround for the Cortex-A53 erratum 835769
       should be applied to this function.  To explicitly disable the
       workaround for this function specify the negated form:
!      ‘no-fix-cortex-a53-835769’.  This corresponds to the behavior of
!      the command line options ‘-mfix-cortex-a53-835769’ and
!      ‘-mno-fix-cortex-a53-835769’.
  
! ‘cmodel=’
       Indicates that code should be generated for a particular code model
       for this function.  The behavior and permissible arguments are the
!      same as for the command line option ‘-mcmodel=’.
  
! ‘strict-align’
! ‘no-strict-align’
!      ‘strict-align’ indicates that the compiler should not assume that
       unaligned memory references are handled by the system.  To allow
       the compiler to assume that aligned memory references are handled
!      by the system, the inverse attribute ‘no-strict-align’ can be
       specified.  The behavior is same as for the command-line option
!      ‘-mstrict-align’ and ‘-mno-strict-align’.
  
! ‘omit-leaf-frame-pointer’
       Indicates that the frame pointer should be omitted for a leaf
       function call.  To keep the frame pointer, the inverse attribute
!      ‘no-omit-leaf-frame-pointer’ can be specified.  These attributes
       have the same behavior as the command-line options
!      ‘-momit-leaf-frame-pointer’ and ‘-mno-omit-leaf-frame-pointer’.
  
! ‘tls-dialect=’
       Specifies the TLS dialect to use for this function.  The behavior
       and permissible arguments are the same as for the command-line
!      option ‘-mtls-dialect=’.
  
! ‘arch=’
       Specifies the architecture version and architectural extensions to
       use for this function.  The behavior and permissible arguments are
!      the same as for the ‘-march=’ command-line option.
  
! ‘tune=’
       Specifies the core for which to tune the performance of this
       function.  The behavior and permissible arguments are the same as
!      for the ‘-mtune=’ command-line option.
  
! ‘cpu=’
       Specifies the core for which to tune the performance of this
       function and also whose architectural features to use.  The
!      behavior and valid arguments are the same as for the ‘-mcpu=’
       command-line option.
  
! ‘sign-return-address’
       Select the function scope on which return address signing will be
       applied.  The behavior and permissible arguments are the same as
!      for the command-line option ‘-msign-return-address=’.  The default
!      value is ‘none’.  This attribute is deprecated.  The
!      ‘branch-protection’ attribute should be used instead.
  
! ‘branch-protection’
       Select the function scope on which branch protection will be
       applied.  The behavior and permissible arguments are the same as
!      for the command-line option ‘-mbranch-protection=’.  The default
!      value is ‘none’.
  
! ‘outline-atomics’
       Enable or disable calls to out-of-line helpers to implement atomic
       operations.  This corresponds to the behavior of the command line
!      options ‘-moutline-atomics’ and ‘-mno-outline-atomics’.
  
   The above target attributes can be specified as follows:
  
*************** per-function basis.
*** 39250,39256 ****
         return a + 5;
       }
  
!  where 'ATTR-STRING' is one of the attribute strings specified above.
  
   Additionally, the architectural extension string may be specified on
  its own.  This can be used to turn on and off particular architectural
--- 39260,39266 ----
         return a + 5;
       }
  
!  where ‘ATTR-STRING’ is one of the attribute strings specified above.
  
   Additionally, the architectural extension string may be specified on
  its own.  This can be used to turn on and off particular architectural
*************** or core.  Example:
*** 39264,39272 ****
         return a + 5;
       }
  
!  In this example 'target("+crc+nocrypto")' enables the 'crc' extension
! and disables the 'crypto' extension for the function 'foo' without
! modifying an existing '-march=' or '-mcpu' option.
  
   Multiple target function attributes can be specified by separating them
  with a comma.  For example:
--- 39274,39282 ----
         return a + 5;
       }
  
!  In this example ‘target("+crc+nocrypto")’ enables the ‘crc’ extension
! and disables the ‘crypto’ extension for the function ‘foo’ without
! modifying an existing ‘-march=’ or ‘-mcpu’ option.
  
   Multiple target function attributes can be specified by separating them
  with a comma.  For example:
*************** with a comma.  For example:
*** 39277,39284 ****
         return a + 5;
       }
  
!  is valid and compiles function 'foo' for ARMv8-A with 'crc' and
! 'crypto' extensions and tunes it for 'cortex-a53'.
  
  6.33.2.1 Inlining rules
  .......................
--- 39287,39294 ----
         return a + 5;
       }
  
!  is valid and compiles function ‘foo’ for ARMv8-A with ‘crc’ and
! ‘crypto’ extensions and tunes it for ‘cortex-a53’.
  
  6.33.2.1 Inlining rules
  .......................
*************** target options can affect function inlin
*** 39289,39309 ****
  
   In particular, a caller function can inline a callee function only if
  the architectural features available to the callee are a subset of the
! features available to the caller.  For example: A function 'foo'
! compiled with '-march=armv8-a+crc', or tagged with the equivalent
! 'arch=armv8-a+crc' attribute, can inline a function 'bar' compiled with
! '-march=armv8-a+nocrc' because the all the architectural features that
! function 'bar' requires are available to function 'foo'.  Conversely,
! function 'bar' cannot inline function 'foo'.
  
!  Additionally inlining a function compiled with '-mstrict-align' into a
! function compiled without '-mstrict-align' is not allowed.  However,
! inlining a function compiled without '-mstrict-align' into a function
! compiled with '-mstrict-align' is allowed.
  
!  Note that CPU tuning options and attributes such as the '-mcpu=',
! '-mtune=' do not inhibit inlining unless the CPU specified by the
! '-mcpu=' option or the 'cpu=' attribute conflicts with the architectural
  feature rules specified above.
  
  
--- 39299,39319 ----
  
   In particular, a caller function can inline a callee function only if
  the architectural features available to the callee are a subset of the
! features available to the caller.  For example: A function ‘foo’
! compiled with ‘-march=armv8-a+crc’, or tagged with the equivalent
! ‘arch=armv8-a+crc’ attribute, can inline a function ‘bar’ compiled with
! ‘-march=armv8-a+nocrc’ because the all the architectural features that
! function ‘bar’ requires are available to function ‘foo’.  Conversely,
! function ‘bar’ cannot inline function ‘foo’.
  
!  Additionally inlining a function compiled with ‘-mstrict-align’ into a
! function compiled without ‘-mstrict-align’ is not allowed.  However,
! inlining a function compiled without ‘-mstrict-align’ into a function
! compiled with ‘-mstrict-align’ is allowed.
  
!  Note that CPU tuning options and attributes such as the ‘-mcpu=’,
! ‘-mtune=’ do not inhibit inlining unless the CPU specified by the
! ‘-mcpu=’ option or the ‘cpu=’ attribute conflicts with the architectural
  feature rules specified above.
  
  
*************** File: gcc.info,  Node: AMD GCN Function
*** 39314,39326 ****
  
  These function attributes are supported by the AMD GCN back end:
  
! 'amdgpu_hsa_kernel'
       This attribute indicates that the corresponding function should be
       compiled as a kernel function, that is an entry point that can be
       invoked from the host via the HSA runtime library.  By default
       functions are only callable only from other GCN functions.
  
!      This attribute is implicitly applied to any function named 'main',
       using default parameters.
  
       Kernel functions may return an integer value, which will be written
--- 39324,39336 ----
  
  These function attributes are supported by the AMD GCN back end:
  
! ‘amdgpu_hsa_kernel’
       This attribute indicates that the corresponding function should be
       compiled as a kernel function, that is an entry point that can be
       invoked from the host via the HSA runtime library.  By default
       functions are only callable only from other GCN functions.
  
!      This attribute is implicitly applied to any function named ‘main’,
       using default parameters.
  
       Kernel functions may return an integer value, which will be written
*************** These function attributes are supported
*** 39332,39398 ****
       Enabling other options may break assumptions in the compiler and/or
       run-time libraries.
  
!      'private_segment_buffer'
!           Set 'enable_sgpr_private_segment_buffer' flag.  Always on
            (required to locate the stack).
  
!      'dispatch_ptr'
!           Set 'enable_sgpr_dispatch_ptr' flag.  Always on (required to
            locate the launch dimensions).
  
!      'queue_ptr'
!           Set 'enable_sgpr_queue_ptr' flag.  Always on (required to
            convert address spaces).
  
!      'kernarg_segment_ptr'
!           Set 'enable_sgpr_kernarg_segment_ptr' flag.  Always on
            (required to locate the kernel arguments, "kernargs").
  
!      'dispatch_id'
!           Set 'enable_sgpr_dispatch_id' flag.
  
!      'flat_scratch_init'
!           Set 'enable_sgpr_flat_scratch_init' flag.
  
!      'private_segment_size'
!           Set 'enable_sgpr_private_segment_size' flag.
  
!      'grid_workgroup_count_X'
!           Set 'enable_sgpr_grid_workgroup_count_x' flag.  Always on
            (required to use OpenACC/OpenMP).
  
!      'grid_workgroup_count_Y'
!           Set 'enable_sgpr_grid_workgroup_count_y' flag.
  
!      'grid_workgroup_count_Z'
!           Set 'enable_sgpr_grid_workgroup_count_z' flag.
  
!      'workgroup_id_X'
!           Set 'enable_sgpr_workgroup_id_x' flag.
  
!      'workgroup_id_Y'
!           Set 'enable_sgpr_workgroup_id_y' flag.
  
!      'workgroup_id_Z'
!           Set 'enable_sgpr_workgroup_id_z' flag.
  
!      'workgroup_info'
!           Set 'enable_sgpr_workgroup_info' flag.
  
!      'private_segment_wave_offset'
!           Set 'enable_sgpr_private_segment_wave_byte_offset' flag.
            Always on (required to locate the stack).
  
!      'work_item_id_X'
!           Set 'enable_vgpr_workitem_id' parameter.  Always on (can't be
            disabled).
  
!      'work_item_id_Y'
!           Set 'enable_vgpr_workitem_id' parameter.  Always on (required
            to enable vectorization.)
  
!      'work_item_id_Z'
!           Set 'enable_vgpr_workitem_id' parameter.  Always on (required
            to use OpenACC/OpenMP).
  
  
--- 39342,39408 ----
       Enabling other options may break assumptions in the compiler and/or
       run-time libraries.
  
!      ‘private_segment_buffer’
!           Set ‘enable_sgpr_private_segment_buffer’ flag.  Always on
            (required to locate the stack).
  
!      ‘dispatch_ptr’
!           Set ‘enable_sgpr_dispatch_ptr’ flag.  Always on (required to
            locate the launch dimensions).
  
!      ‘queue_ptr’
!           Set ‘enable_sgpr_queue_ptr’ flag.  Always on (required to
            convert address spaces).
  
!      ‘kernarg_segment_ptr’
!           Set ‘enable_sgpr_kernarg_segment_ptr’ flag.  Always on
            (required to locate the kernel arguments, "kernargs").
  
!      ‘dispatch_id’
!           Set ‘enable_sgpr_dispatch_id’ flag.
  
!      ‘flat_scratch_init’
!           Set ‘enable_sgpr_flat_scratch_init’ flag.
  
!      ‘private_segment_size’
!           Set ‘enable_sgpr_private_segment_size’ flag.
  
!      ‘grid_workgroup_count_X’
!           Set ‘enable_sgpr_grid_workgroup_count_x’ flag.  Always on
            (required to use OpenACC/OpenMP).
  
!      ‘grid_workgroup_count_Y’
!           Set ‘enable_sgpr_grid_workgroup_count_y’ flag.
  
!      ‘grid_workgroup_count_Z’
!           Set ‘enable_sgpr_grid_workgroup_count_z’ flag.
  
!      ‘workgroup_id_X’
!           Set ‘enable_sgpr_workgroup_id_x’ flag.
  
!      ‘workgroup_id_Y’
!           Set ‘enable_sgpr_workgroup_id_y’ flag.
  
!      ‘workgroup_id_Z’
!           Set ‘enable_sgpr_workgroup_id_z’ flag.
  
!      ‘workgroup_info’
!           Set ‘enable_sgpr_workgroup_info’ flag.
  
!      ‘private_segment_wave_offset’
!           Set ‘enable_sgpr_private_segment_wave_byte_offset’ flag.
            Always on (required to locate the stack).
  
!      ‘work_item_id_X’
!           Set ‘enable_vgpr_workitem_id’ parameter.  Always on (can't be
            disabled).
  
!      ‘work_item_id_Y’
!           Set ‘enable_vgpr_workitem_id’ parameter.  Always on (required
            to enable vectorization.)
  
!      ‘work_item_id_Z’
!           Set ‘enable_vgpr_workitem_id’ parameter.  Always on (required
            to use OpenACC/OpenMP).
  
  
*************** File: gcc.info,  Node: ARC Function Attr
*** 39403,39409 ****
  
  These function attributes are supported by the ARC back end:
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 39413,39419 ----
  
  These function attributes are supported by the ARC back end:
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 39414,39465 ****
  
            void f () __attribute__ ((interrupt ("ilink1")));
  
!      Permissible values for this parameter are: 'ilink1' and 'ilink2'
!      for ARCv1 architecture, and 'ilink' and 'firq' for ARCv2
       architecture.
  
! 'long_call'
! 'medium_call'
! 'short_call'
       These attributes specify how a particular function is called.
!      These attributes override the '-mlong-calls' and '-mmedium-calls'
!      (*note ARC Options::) command-line switches and '#pragma
!      long_calls' settings.
  
!      For ARC, a function marked with the 'long_call' attribute is always
       called using register-indirect jump-and-link instructions, thereby
       enabling the called function to be placed anywhere within the
!      32-bit address space.  A function marked with the 'medium_call'
       attribute will always be close enough to be called with an
       unconditional branch-and-link instruction, which has a 25-bit
!      offset from the call site.  A function marked with the 'short_call'
       attribute will always be close enough to be called with a
       conditional branch-and-link instruction, which has a 21-bit offset
       from the call site.
  
! 'jli_always'
!      Forces a particular function to be called using 'jli' instruction.
!      The 'jli' instruction makes use of a table stored into '.jlitab'
       section, which holds the location of the functions which are
       addressed using this instruction.
  
! 'jli_fixed'
       Identical like the above one, but the location of the function in
!      the 'jli' table is known and given as an attribute parameter.
  
! 'secure_call'
       This attribute allows one to mark secure-code functions that are
       callable from normal mode.  The location of the secure call
!      function into the 'sjli' table needs to be passed as argument.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
--- 39424,39475 ----
  
            void f () __attribute__ ((interrupt ("ilink1")));
  
!      Permissible values for this parameter are: ‘ilink1’ and ‘ilink2’
!      for ARCv1 architecture, and ‘ilink’ and ‘firq’ for ARCv2
       architecture.
  
! ‘long_call’
! ‘medium_call’
! ‘short_call’
       These attributes specify how a particular function is called.
!      These attributes override the ‘-mlong-calls’ and ‘-mmedium-calls’
!      (*note ARC Options::) command-line switches and ‘#pragma
!      long_calls’ settings.
  
!      For ARC, a function marked with the ‘long_call’ attribute is always
       called using register-indirect jump-and-link instructions, thereby
       enabling the called function to be placed anywhere within the
!      32-bit address space.  A function marked with the ‘medium_call’
       attribute will always be close enough to be called with an
       unconditional branch-and-link instruction, which has a 25-bit
!      offset from the call site.  A function marked with the ‘short_call’
       attribute will always be close enough to be called with a
       conditional branch-and-link instruction, which has a 21-bit offset
       from the call site.
  
! ‘jli_always’
!      Forces a particular function to be called using ‘jli’ instruction.
!      The ‘jli’ instruction makes use of a table stored into ‘.jlitab’
       section, which holds the location of the functions which are
       addressed using this instruction.
  
! ‘jli_fixed’
       Identical like the above one, but the location of the function in
!      the ‘jli’ table is known and given as an attribute parameter.
  
! ‘secure_call’
       This attribute allows one to mark secure-code functions that are
       callable from normal mode.  The location of the secure call
!      function into the ‘sjli’ table needs to be passed as argument.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
*************** File: gcc.info,  Node: ARM Function Attr
*** 39470,39483 ****
  
  These function attributes are supported for ARM targets:
  
! 'general-regs-only'
       Indicates that no floating-point or Advanced SIMD registers should
       be used when generating code for this function.  If the function
       explicitly uses floating-point code, then the compiler gives an
       error.  This is the same behavior as that of the command-line
!      option '-mgeneral-regs-only'.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 39480,39493 ----
  
  These function attributes are supported for ARM targets:
  
! ‘general-regs-only’
       Indicates that no floating-point or Advanced SIMD registers should
       be used when generating code for this function.  If the function
       explicitly uses floating-point code, then the compiler gives an
       error.  This is the same behavior as that of the command-line
!      option ‘-mgeneral-regs-only’.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 39488,39568 ****
  
            void f () __attribute__ ((interrupt ("IRQ")));
  
!      Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
!      'ABORT' and 'UNDEF'.
  
       On ARMv7-M the interrupt type is ignored, and the attribute means
       the function may be called with a word-aligned stack pointer.
  
! 'isr'
       Use this attribute on ARM to write Interrupt Service Routines.
!      This is an alias to the 'interrupt' attribute above.
  
! 'long_call'
! 'short_call'
       These attributes specify how a particular function is called.
!      These attributes override the '-mlong-calls' (*note ARM Options::)
!      command-line switch and '#pragma long_calls' settings.  For ARM,
!      the 'long_call' attribute indicates that the function might be far
       away from the call site and require a different (more expensive)
!      calling sequence.  The 'short_call' attribute always places the
!      offset to the function from the call site into the 'BL' instruction
       directly.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'pcs'
  
!      The 'pcs' attribute can be used to control the calling convention
       used for a function on ARM. The attribute takes an argument that
       specifies the calling convention to use.
  
       When compiling using the AAPCS ABI (or a variant of it) then valid
!      values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
!      to use a variant other than '"aapcs"' then the compiler must be
       permitted to use the appropriate co-processor registers (i.e., the
!      VFP registers must be available in order to use '"aapcs-vfp"').
       For example,
  
            /* Argument passed in r0, and result returned in r0+r1.  */
            double f2d (float) __attribute__((pcs("aapcs")));
  
!      Variadic functions always use the '"aapcs"' calling convention and
       the compiler rejects attempts to specify an alternative.
  
! 'target (OPTIONS)'
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On ARM, the following options are allowed:
  
!      'thumb'
            Force code generation in the Thumb (T16/T32) ISA, depending on
            the architecture level.
  
!      'arm'
            Force code generation in the ARM (A32) ISA.
  
            Functions from different modes can be inlined in the caller's
            mode.
  
!      'fpu='
            Specifies the fpu for which to tune the performance of this
            function.  The behavior and permissible arguments are the same
!           as for the '-mfpu=' command-line option.
  
!      'arch='
            Specifies the architecture version and architectural
            extensions to use for this function.  The behavior and
!           permissible arguments are the same as for the '-march='
            command-line option.
  
            The above target attributes can be specified as follows:
--- 39498,39578 ----
  
            void f () __attribute__ ((interrupt ("IRQ")));
  
!      Permissible values for this parameter are: ‘IRQ’, ‘FIQ’, ‘SWI’,
!      ‘ABORT’ and ‘UNDEF’.
  
       On ARMv7-M the interrupt type is ignored, and the attribute means
       the function may be called with a word-aligned stack pointer.
  
! ‘isr’
       Use this attribute on ARM to write Interrupt Service Routines.
!      This is an alias to the ‘interrupt’ attribute above.
  
! ‘long_call’
! ‘short_call’
       These attributes specify how a particular function is called.
!      These attributes override the ‘-mlong-calls’ (*note ARM Options::)
!      command-line switch and ‘#pragma long_calls’ settings.  For ARM,
!      the ‘long_call’ attribute indicates that the function might be far
       away from the call site and require a different (more expensive)
!      calling sequence.  The ‘short_call’ attribute always places the
!      offset to the function from the call site into the ‘BL’ instruction
       directly.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘pcs’
  
!      The ‘pcs’ attribute can be used to control the calling convention
       used for a function on ARM. The attribute takes an argument that
       specifies the calling convention to use.
  
       When compiling using the AAPCS ABI (or a variant of it) then valid
!      values for the argument are ‘"aapcs"’ and ‘"aapcs-vfp"’.  In order
!      to use a variant other than ‘"aapcs"’ then the compiler must be
       permitted to use the appropriate co-processor registers (i.e., the
!      VFP registers must be available in order to use ‘"aapcs-vfp"’).
       For example,
  
            /* Argument passed in r0, and result returned in r0+r1.  */
            double f2d (float) __attribute__((pcs("aapcs")));
  
!      Variadic functions always use the ‘"aapcs"’ calling convention and
       the compiler rejects attempts to specify an alternative.
  
! ‘target (OPTIONS)’
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On ARM, the following options are allowed:
  
!      ‘thumb’
            Force code generation in the Thumb (T16/T32) ISA, depending on
            the architecture level.
  
!      ‘arm’
            Force code generation in the ARM (A32) ISA.
  
            Functions from different modes can be inlined in the caller's
            mode.
  
!      ‘fpu=’
            Specifies the fpu for which to tune the performance of this
            function.  The behavior and permissible arguments are the same
!           as for the ‘-mfpu=’ command-line option.
  
!      ‘arch=’
            Specifies the architecture version and architectural
            extensions to use for this function.  The behavior and
!           permissible arguments are the same as for the ‘-march=’
            command-line option.
  
            The above target attributes can be specified as follows:
*************** These function attributes are supported
*** 39586,39594 ****
                   return a + 5;
                 }
  
!           In this example 'target("+crc+nocrypto")' enables the 'crc'
!           extension and disables the 'crypto' extension for the function
!           'foo' without modifying an existing '-march=' or '-mcpu'
            option.
  
  
--- 39596,39604 ----
                   return a + 5;
                 }
  
!           In this example ‘target("+crc+nocrypto")’ enables the ‘crc’
!           extension and disables the ‘crypto’ extension for the function
!           ‘foo’ without modifying an existing ‘-march=’ or ‘-mcpu’
            option.
  
  
*************** File: gcc.info,  Node: AVR Function Attr
*** 39599,39606 ****
  
  These function attributes are supported by the AVR back end:
  
! 'signal'
! 'interrupt'
       The function is an interrupt service routine (ISR). The compiler
       generates function entry and exit sequences suitable for use in an
       interrupt handler when one of the attributes is present.
--- 39609,39616 ----
  
  These function attributes are supported by the AVR back end:
  
! ‘signal’
! ‘interrupt’
       The function is an interrupt service routine (ISR). The compiler
       generates function entry and exit sequences suitable for use in an
       interrupt handler when one of the attributes is present.
*************** These function attributes are supported
*** 39608,39625 ****
       The AVR hardware globally disables interrupts when an interrupt is
       executed.
  
!         * ISRs with the 'signal' attribute do not re-enable interrupts.
!           It is save to enable interrupts in a 'signal' handler.  This
            "save" only applies to the code generated by the compiler and
            not to the IRQ layout of the application which is
            responsibility of the application.
  
!         * ISRs with the 'interrupt' attribute re-enable interrupts.  The
!           first instruction of the routine is a 'SEI' instruction to
            globally enable interrupts.
  
       The recommended way to use these attributes is by means of the
!      'ISR' macro provided by 'avr/interrupt.h' from AVR-LibC:
            #include <avr/interrupt.h>
  
            ISR (INT0_vect) // Uses the "signal" attribute.
--- 39618,39635 ----
       The AVR hardware globally disables interrupts when an interrupt is
       executed.
  
!         • ISRs with the ‘signal’ attribute do not re-enable interrupts.
!           It is save to enable interrupts in a ‘signal’ handler.  This
            "save" only applies to the code generated by the compiler and
            not to the IRQ layout of the application which is
            responsibility of the application.
  
!         • ISRs with the ‘interrupt’ attribute re-enable interrupts.  The
!           first instruction of the routine is a ‘SEI’ instruction to
            globally enable interrupts.
  
       The recommended way to use these attributes is by means of the
!      ‘ISR’ macro provided by ‘avr/interrupt.h’ from AVR-LibC:
            #include <avr/interrupt.h>
  
            ISR (INT0_vect) // Uses the "signal" attribute.
*************** These function attributes are supported
*** 39632,39654 ****
                // Code
            }
  
!      When both 'signal' and 'interrupt' are specified for the same
!      function, then 'signal' is silently ignored.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'no_gccisr'
!      Do not use the '__gcc_isr' pseudo instruction
       (https://sourceware.org/binutils/docs/as/AVR-Pseudo-Instructions.html)
!      in a function with the 'interrupt' or 'signal' attribute aka.
       interrupt service routine (ISR). Use this attribute if the preamble
       of the ISR prologue should always read
            push  __zero_reg__
--- 39642,39664 ----
                // Code
            }
  
!      When both ‘signal’ and ‘interrupt’ are specified for the same
!      function, then ‘signal’ is silently ignored.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘no_gccisr’
!      Do not use the ‘__gcc_isr’ pseudo instruction
       (https://sourceware.org/binutils/docs/as/AVR-Pseudo-Instructions.html)
!      in a function with the ‘interrupt’ or ‘signal’ attribute aka.
       interrupt service routine (ISR). Use this attribute if the preamble
       of the ISR prologue should always read
            push  __zero_reg__
*************** These function attributes are supported
*** 39660,39696 ****
       whether the mentioned registers are actually used in the ISR or
       not.  Situations where you might want to use this attribute
       include:
!         * Code that (effectively) clobbers bits of 'SREG' other than the
!           'I'-flag by writing to the memory location of 'SREG'.
!         * Code that uses inline assembler to jump to a different
            function which expects (parts of) the prologue code as
            outlined above to be present.
!      To disable '__gcc_isr' generation for the whole compilation unit,
!      there is option '-mno-gas-isr-prologues', *note AVR Options::.
  
! 'OS_main'
! 'OS_task'
!      On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
       save/restore any call-saved register in their prologue/epilogue.
  
!      The 'OS_main' attribute can be used when there _is guarantee_ that
       interrupts are disabled at the time when the function is entered.
       This saves resources when the stack pointer has to be changed to
       set up a frame for local variables.
  
!      The 'OS_task' attribute can be used when there is _no guarantee_
       that interrupts are disabled at that time when the function is
       entered like for, e.g.  task functions in a multi-threading
       operating system.  In that case, changing the stack pointer
       register is guarded by save/clear/restore of the global interrupt
       enable flag.
  
!      The differences to the 'naked' function attribute are:
!         * 'naked' functions do not have a return instruction whereas
!           'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
            return instruction.
!         * 'naked' functions do not set up a frame for local variables or
!           a frame pointer whereas 'OS_main' and 'OS_task' do this as
            needed.
  
  
--- 39670,39706 ----
       whether the mentioned registers are actually used in the ISR or
       not.  Situations where you might want to use this attribute
       include:
!         • Code that (effectively) clobbers bits of ‘SREG’ other than the
!           ‘I’-flag by writing to the memory location of ‘SREG’.
!         • Code that uses inline assembler to jump to a different
            function which expects (parts of) the prologue code as
            outlined above to be present.
!      To disable ‘__gcc_isr’ generation for the whole compilation unit,
!      there is option ‘-mno-gas-isr-prologues’, *note AVR Options::.
  
! ‘OS_main’
! ‘OS_task’
!      On AVR, functions with the ‘OS_main’ or ‘OS_task’ attribute do not
       save/restore any call-saved register in their prologue/epilogue.
  
!      The ‘OS_main’ attribute can be used when there _is guarantee_ that
       interrupts are disabled at the time when the function is entered.
       This saves resources when the stack pointer has to be changed to
       set up a frame for local variables.
  
!      The ‘OS_task’ attribute can be used when there is _no guarantee_
       that interrupts are disabled at that time when the function is
       entered like for, e.g.  task functions in a multi-threading
       operating system.  In that case, changing the stack pointer
       register is guarded by save/clear/restore of the global interrupt
       enable flag.
  
!      The differences to the ‘naked’ function attribute are:
!         • ‘naked’ functions do not have a return instruction whereas
!           ‘OS_main’ and ‘OS_task’ functions have a ‘RET’ or ‘RETI’
            return instruction.
!         • ‘naked’ functions do not set up a frame for local variables or
!           a frame pointer whereas ‘OS_main’ and ‘OS_task’ do this as
            needed.
  
  
*************** File: gcc.info,  Node: Blackfin Function
*** 39701,39754 ****
  
  These function attributes are supported by the Blackfin back end:
  
! 'exception_handler'
       Use this attribute on the Blackfin to indicate that the specified
       function is an exception handler.  The compiler generates function
       entry and exit sequences suitable for use in an exception handler
       when this attribute is present.
  
! 'interrupt_handler'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
! 'kspisusp'
!      When used together with 'interrupt_handler', 'exception_handler' or
!      'nmi_handler', code is generated to load the stack pointer from the
       USP register in the function prologue.
  
! 'l1_text'
       This attribute specifies a function to be placed into L1
       Instruction SRAM.  The function is put into a specific section
!      named '.l1.text'.  With '-mfdpic', function calls with a such
       function as the callee or caller uses inlined PLT.
  
! 'l2'
       This attribute specifies a function to be placed into L2 SRAM. The
!      function is put into a specific section named '.l2.text'.  With
!      '-mfdpic', callers of such functions use an inlined PLT.
  
! 'longcall'
! 'shortcall'
!      The 'longcall' attribute indicates that the function might be far
       away from the call site and require a different (more expensive)
!      calling sequence.  The 'shortcall' attribute indicates that the
       function is always close enough for the shorter calling sequence to
!      be used.  These attributes override the '-mlongcall' switch.
  
! 'nesting'
!      Use this attribute together with 'interrupt_handler',
!      'exception_handler' or 'nmi_handler' to indicate that the function
       entry code should enable nested interrupts or exceptions.
  
! 'nmi_handler'
       Use this attribute on the Blackfin to indicate that the specified
       function is an NMI handler.  The compiler generates function entry
       and exit sequences suitable for use in an NMI handler when this
       attribute is present.
  
! 'saveall'
       Use this attribute to indicate that all registers except the stack
       pointer should be saved in the prologue regardless of whether they
       are used or not.
--- 39711,39764 ----
  
  These function attributes are supported by the Blackfin back end:
  
! ‘exception_handler’
       Use this attribute on the Blackfin to indicate that the specified
       function is an exception handler.  The compiler generates function
       entry and exit sequences suitable for use in an exception handler
       when this attribute is present.
  
! ‘interrupt_handler’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
! ‘kspisusp’
!      When used together with ‘interrupt_handler’, ‘exception_handler’ or
!      ‘nmi_handler’, code is generated to load the stack pointer from the
       USP register in the function prologue.
  
! ‘l1_text’
       This attribute specifies a function to be placed into L1
       Instruction SRAM.  The function is put into a specific section
!      named ‘.l1.text’.  With ‘-mfdpic’, function calls with a such
       function as the callee or caller uses inlined PLT.
  
! ‘l2’
       This attribute specifies a function to be placed into L2 SRAM. The
!      function is put into a specific section named ‘.l2.text’.  With
!      ‘-mfdpic’, callers of such functions use an inlined PLT.
  
! ‘longcall’
! ‘shortcall’
!      The ‘longcall’ attribute indicates that the function might be far
       away from the call site and require a different (more expensive)
!      calling sequence.  The ‘shortcall’ attribute indicates that the
       function is always close enough for the shorter calling sequence to
!      be used.  These attributes override the ‘-mlongcall’ switch.
  
! ‘nesting’
!      Use this attribute together with ‘interrupt_handler’,
!      ‘exception_handler’ or ‘nmi_handler’ to indicate that the function
       entry code should enable nested interrupts or exceptions.
  
! ‘nmi_handler’
       Use this attribute on the Blackfin to indicate that the specified
       function is an NMI handler.  The compiler generates function entry
       and exit sequences suitable for use in an NMI handler when this
       attribute is present.
  
! ‘saveall’
       Use this attribute to indicate that all registers except the stack
       pointer should be saved in the prologue regardless of whether they
       are used or not.
*************** File: gcc.info,  Node: BPF Function Attr
*** 39761,39767 ****
  
  These function attributes are supported by the BPF back end:
  
! 'kernel_helper'
       use this attribute to indicate the specified function declaration
       is a kernel helper.  The helper function is passed as an argument
       to the attribute.  Example:
--- 39771,39777 ----
  
  These function attributes are supported by the BPF back end:
  
! ‘kernel_helper’
       use this attribute to indicate the specified function declaration
       is a kernel helper.  The helper function is passed as an argument
       to the attribute.  Example:
*************** These function attributes are supported
*** 39769,39782 ****
            int bpf_probe_read (void *dst, int size, const void *unsafe_ptr)
              __attribute__ ((kernel_helper (4)));
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
--- 39779,39792 ----
            int bpf_probe_read (void *dst, int size, const void *unsafe_ptr)
              __attribute__ ((kernel_helper (4)));
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
*************** File: gcc.info,  Node: C-SKY Function At
*** 39787,39811 ****
  
  These function attributes are supported by the C-SKY back end:
  
! 'interrupt'
! 'isr'
       Use these attributes to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when either of
       these attributes are present.
  
!      Use of these options requires the '-mistack' command-line option to
       enable support for the necessary interrupt stack instructions.
       They are ignored with a warning otherwise.  *Note C-SKY Options::.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
--- 39797,39821 ----
  
  These function attributes are supported by the C-SKY back end:
  
! ‘interrupt’
! ‘isr’
       Use these attributes to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when either of
       these attributes are present.
  
!      Use of these options requires the ‘-mistack’ command-line option to
       enable support for the necessary interrupt stack instructions.
       They are ignored with a warning otherwise.  *Note C-SKY Options::.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
*************** File: gcc.info,  Node: Epiphany Function
*** 39816,39833 ****
  
  These function attributes are supported by the Epiphany back end:
  
! 'disinterrupt'
       This attribute causes the compiler to emit instructions to disable
       interrupts for the duration of the given function.
  
! 'forwarder_section'
       This attribute modifies the behavior of an interrupt handler.  The
       interrupt handler may be in external memory which cannot be reached
       by a branch instruction, so generate a local memory trampoline to
       transfer control.  The single parameter identifies the section
       where the trampoline is placed.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 39826,39843 ----
  
  These function attributes are supported by the Epiphany back end:
  
! ‘disinterrupt’
       This attribute causes the compiler to emit instructions to disable
       interrupts for the duration of the given function.
  
! ‘forwarder_section’
       This attribute modifies the behavior of an interrupt handler.  The
       interrupt handler may be in external memory which cannot be reached
       by a branch instruction, so generate a local memory trampoline to
       transfer control.  The single parameter identifies the section
       where the trampoline is placed.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 39839,39847 ****
  
            void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
  
!      Permissible values for these parameters are: 'reset',
!      'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
!      'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
       that multiple entries in the interrupt vector table should be
       initialized for this function, i.e. for each parameter NAME, a jump
       to the function is emitted in the section ivt_entry_NAME.  The
--- 39849,39857 ----
  
            void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
  
!      Permissible values for these parameters are: ‘reset’,
!      ‘software_exception’, ‘page_miss’, ‘timer0’, ‘timer1’, ‘message’,
!      ‘dma0’, ‘dma1’, ‘wand’ and ‘swi’.  Multiple parameters indicate
       that multiple entries in the interrupt vector table should be
       initialized for this function, i.e. for each parameter NAME, a jump
       to the function is emitted in the section ivt_entry_NAME.  The
*************** These function attributes are supported
*** 39849,39855 ****
       vector table entry is provided.
  
       Note that interrupts are enabled inside the function unless the
!      'disinterrupt' attribute is also specified.
  
       The following examples are all valid uses of these attributes on
       Epiphany targets:
--- 39859,39865 ----
       vector table entry is provided.
  
       Note that interrupts are enabled inside the function unless the
!      ‘disinterrupt’ attribute is also specified.
  
       The following examples are all valid uses of these attributes on
       Epiphany targets:
*************** These function attributes are supported
*** 39863,39873 ****
                                 forwarder_section ("tramp")))
              external_dma_handler ();
  
! 'long_call'
! 'short_call'
       These attributes specify how a particular function is called.
!      These attributes override the '-mlong-calls' (*note Adapteva
!      Epiphany Options::) command-line switch and '#pragma long_calls'
       settings.
  
  
--- 39873,39883 ----
                                 forwarder_section ("tramp")))
              external_dma_handler ();
  
! ‘long_call’
! ‘short_call’
       These attributes specify how a particular function is called.
!      These attributes override the ‘-mlong-calls’ (*note Adapteva
!      Epiphany Options::) command-line switch and ‘#pragma long_calls’
       settings.
  
  
*************** File: gcc.info,  Node: H8/300 Function A
*** 39878,39884 ****
  
  These function attributes are available for H8/300 targets:
  
! 'function_vector'
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       the specified function should be called through the function
       vector.  Calling a function through the function vector reduces
--- 39888,39894 ----
  
  These function attributes are available for H8/300 targets:
  
! ‘function_vector’
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       the specified function should be called through the function
       vector.  Calling a function through the function vector reduces
*************** These function attributes are available
*** 39886,39898 ****
       128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
       and shares space with the interrupt vector.
  
! 'interrupt_handler'
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       the specified function is an interrupt handler.  The compiler
       generates function entry and exit sequences suitable for use in an
       interrupt handler when this attribute is present.
  
! 'saveall'
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       all registers except the stack pointer should be saved in the
       prologue regardless of whether they are used or not.
--- 39896,39908 ----
       128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
       and shares space with the interrupt vector.
  
! ‘interrupt_handler’
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       the specified function is an interrupt handler.  The compiler
       generates function entry and exit sequences suitable for use in an
       interrupt handler when this attribute is present.
  
! ‘saveall’
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       all registers except the stack pointer should be saved in the
       prologue regardless of whether they are used or not.
*************** File: gcc.info,  Node: IA-64 Function At
*** 39905,39918 ****
  
  These function attributes are supported on IA-64 targets:
  
! 'syscall_linkage'
       This attribute is used to modify the IA-64 calling convention by
       marking all input registers as live at all function exits.  This
       makes it possible to restart a system call after an interrupt
       without having to save/restore the input registers.  This also
       prevents kernel data from leaking into application code.
  
! 'version_id'
       This IA-64 HP-UX attribute, attached to a global variable or
       function, renames a symbol to contain a version string, thus
       allowing for function level versioning.  HP-UX system header files
--- 39915,39928 ----
  
  These function attributes are supported on IA-64 targets:
  
! ‘syscall_linkage’
       This attribute is used to modify the IA-64 calling convention by
       marking all input registers as live at all function exits.  This
       makes it possible to restart a system call after an interrupt
       without having to save/restore the input registers.  This also
       prevents kernel data from leaking into application code.
  
! ‘version_id’
       This IA-64 HP-UX attribute, attached to a global variable or
       function, renames a symbol to contain a version string, thus
       allowing for function level versioning.  HP-UX system header files
*************** These function attributes are supported
*** 39920,39926 ****
  
            extern int foo () __attribute__((version_id ("20040821")));
  
!      Calls to 'foo' are mapped to calls to 'foo{20040821}'.
  
  
  File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
--- 39930,39936 ----
  
            extern int foo () __attribute__((version_id ("20040821")));
  
!      Calls to ‘foo’ are mapped to calls to ‘foo{20040821}’.
  
  
  File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: M32C Function Att
*** 39930,39954 ****
  
  These function attributes are supported by the M32C back end:
  
! 'bank_switch'
       When added to an interrupt handler with the M32C port, causes the
       prologue and epilogue to use bank switching to preserve the
       registers rather than saving them on the stack.
  
! 'fast_interrupt'
       Use this attribute on the M32C port to indicate that the specified
       function is a fast interrupt handler.  This is just like the
!      'interrupt' attribute, except that 'freit' is used to return
!      instead of 'reit'.
  
! 'function_vector'
!      On M16C/M32C targets, the 'function_vector' attribute declares a
       special page subroutine call function.  Use of this attribute
       reduces the code size by 2 bytes for each call generated to the
       subroutine.  The argument to the attribute is the vector number
       entry from the special page vector table which contains the 16
       low-order bits of the subroutine's entry address.  Each vector
!      table has special page number (18 to 255) that is used in 'jsrs'
       instructions.  Jump addresses of the routines are generated by
       adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
       M32C targets), to the 2-byte addresses set in the vector table.
--- 39940,39964 ----
  
  These function attributes are supported by the M32C back end:
  
! ‘bank_switch’
       When added to an interrupt handler with the M32C port, causes the
       prologue and epilogue to use bank switching to preserve the
       registers rather than saving them on the stack.
  
! ‘fast_interrupt’
       Use this attribute on the M32C port to indicate that the specified
       function is a fast interrupt handler.  This is just like the
!      ‘interrupt’ attribute, except that ‘freit’ is used to return
!      instead of ‘reit’.
  
! ‘function_vector’
!      On M16C/M32C targets, the ‘function_vector’ attribute declares a
       special page subroutine call function.  Use of this attribute
       reduces the code size by 2 bytes for each call generated to the
       subroutine.  The argument to the attribute is the vector number
       entry from the special page vector table which contains the 16
       low-order bits of the subroutine's entry address.  Each vector
!      table has special page number (18 to 255) that is used in ‘jsrs’
       instructions.  Jump addresses of the routines are generated by
       adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
       M32C targets), to the 2-byte addresses set in the vector table.
*************** These function attributes are supported
*** 39957,39963 ****
       0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
  
       In the following example 2 bytes are saved for each call to
!      function 'foo'.
  
            void foo (void) __attribute__((function_vector(0x18)));
            void foo (void)
--- 39967,39973 ----
       0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
  
       In the following example 2 bytes are saved for each call to
!      function ‘foo’.
  
            void foo (void) __attribute__((function_vector(0x18)));
            void foo (void)
*************** These function attributes are supported
*** 39974,39980 ****
  
       This attribute is ignored for R8C target.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 39984,39990 ----
  
       This attribute is ignored for R8C target.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** File: gcc.info,  Node: M32R/D Function A
*** 39988,40018 ****
  
  These function attributes are supported by the M32R/D back end:
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
! 'model (MODEL-NAME)'
  
       On the M32R/D, use this attribute to set the addressability of an
       object, and of the code generated for a function.  The identifier
!      MODEL-NAME is one of 'small', 'medium', or 'large', representing
       each of the code models.
  
       Small model objects live in the lower 16MB of memory (so that their
!      addresses can be loaded with the 'ld24' instruction), and are
!      callable with the 'bl' instruction.
  
       Medium model objects may live anywhere in the 32-bit address space
!      (the compiler generates 'seth/add3' instructions to load their
!      addresses), and are callable with the 'bl' instruction.
  
       Large model objects may live anywhere in the 32-bit address space
!      (the compiler generates 'seth/add3' instructions to load their
!      addresses), and may not be reachable with the 'bl' instruction (the
!      compiler generates the much slower 'seth/add3/jl' instruction
       sequence).
  
  
--- 39998,40028 ----
  
  These function attributes are supported by the M32R/D back end:
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
! ‘model (MODEL-NAME)’
  
       On the M32R/D, use this attribute to set the addressability of an
       object, and of the code generated for a function.  The identifier
!      MODEL-NAME is one of ‘small’, ‘medium’, or ‘large’, representing
       each of the code models.
  
       Small model objects live in the lower 16MB of memory (so that their
!      addresses can be loaded with the ‘ld24’ instruction), and are
!      callable with the ‘bl’ instruction.
  
       Medium model objects may live anywhere in the 32-bit address space
!      (the compiler generates ‘seth/add3’ instructions to load their
!      addresses), and are callable with the ‘bl’ instruction.
  
       Large model objects may live anywhere in the 32-bit address space
!      (the compiler generates ‘seth/add3’ instructions to load their
!      addresses), and may not be reachable with the ‘bl’ instruction (the
!      compiler generates the much slower ‘seth/add3/jl’ instruction
       sequence).
  
  
*************** File: gcc.info,  Node: m68k Function Att
*** 40023,40041 ****
  
  These function attributes are supported by the m68k back end:
  
! 'interrupt'
! 'interrupt_handler'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.  Either name may be used.
  
! 'interrupt_thread'
       Use this attribute on fido, a subarchitecture of the m68k, to
       indicate that the specified function is an interrupt handler that
       is designed to run as a thread.  The compiler omits generate
       prologue/epilogue sequences and replaces the return instruction
!      with a 'sleep' instruction.  This attribute is available only on
       fido.
  
  
--- 40033,40051 ----
  
  These function attributes are supported by the m68k back end:
  
! ‘interrupt’
! ‘interrupt_handler’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.  Either name may be used.
  
! ‘interrupt_thread’
       Use this attribute on fido, a subarchitecture of the m68k, to
       indicate that the specified function is an interrupt handler that
       is designed to run as a thread.  The compiler omits generate
       prologue/epilogue sequences and replaces the return instruction
!      with a ‘sleep’ instruction.  This attribute is available only on
       fido.
  
  
*************** File: gcc.info,  Node: MCORE Function At
*** 40046,40059 ****
  
  These function attributes are supported by the MCORE back end:
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
--- 40056,40069 ----
  
  These function attributes are supported by the MCORE back end:
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
*************** File: gcc.info,  Node: MicroBlaze Functi
*** 40064,40070 ****
  
  These function attributes are supported on MicroBlaze targets:
  
! 'save_volatiles'
       Use this attribute to indicate that the function is an interrupt
       handler.  All volatile registers (in addition to non-volatile
       registers) are saved in the function prologue.  If the function is
--- 40074,40080 ----
  
  These function attributes are supported on MicroBlaze targets:
  
! ‘save_volatiles’
       Use this attribute to indicate that the function is an interrupt
       handler.  All volatile registers (in addition to non-volatile
       registers) are saved in the function prologue.  If the function is
*************** These function attributes are supported
*** 40072,40094 ****
       normal function return is generated instead of a return from
       interrupt.
  
! 'break_handler'
       Use this attribute to indicate that the specified function is a
       break handler.  The compiler generates function entry and exit
       sequences suitable for use in an break handler when this attribute
!      is present.  The return from 'break_handler' is done through the
!      'rtbd' instead of 'rtsd'.
  
            void f () __attribute__ ((break_handler));
  
! 'interrupt_handler'
! 'fast_interrupt'
       These attributes indicate that the specified function is an
!      interrupt handler.  Use the 'fast_interrupt' attribute to indicate
       handlers used in low-latency interrupt mode, and
!      'interrupt_handler' for interrupts that do not use low-latency
       handlers.  In both cases, GCC emits appropriate prologue code and
!      generates a return from the handler using 'rtid' instead of 'rtsd'.
  
  
  File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
--- 40082,40104 ----
       normal function return is generated instead of a return from
       interrupt.
  
! ‘break_handler’
       Use this attribute to indicate that the specified function is a
       break handler.  The compiler generates function entry and exit
       sequences suitable for use in an break handler when this attribute
!      is present.  The return from ‘break_handler’ is done through the
!      ‘rtbd’ instead of ‘rtsd’.
  
            void f () __attribute__ ((break_handler));
  
! ‘interrupt_handler’
! ‘fast_interrupt’
       These attributes indicate that the specified function is an
!      interrupt handler.  Use the ‘fast_interrupt’ attribute to indicate
       handlers used in low-latency interrupt mode, and
!      ‘interrupt_handler’ for interrupts that do not use low-latency
       handlers.  In both cases, GCC emits appropriate prologue code and
!      generates a return from the handler using ‘rtid’ instead of ‘rtsd’.
  
  
  File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: Microsoft Windows
*** 40099,40123 ****
  The following attributes are available on Microsoft Windows and Symbian
  OS targets.
  
! 'dllexport'
!      On Microsoft Windows targets and Symbian OS targets the 'dllexport'
       attribute causes the compiler to provide a global pointer to a
!      pointer in a DLL, so that it can be referenced with the 'dllimport'
       attribute.  On Microsoft Windows targets, the pointer name is
!      formed by combining '_imp__' and the function or variable name.
  
!      You can use '__declspec(dllexport)' as a synonym for '__attribute__
!      ((dllexport))' for compatibility with other compilers.
  
!      On systems that support the 'visibility' attribute, this attribute
       also implies "default" visibility.  It is an error to explicitly
       specify any other visibility.
  
       GCC's default behavior is to emit all inline functions with the
!      'dllexport' attribute.  Since this can cause object file-size
!      bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
       ignore the attribute for inlined functions unless the
!      '-fkeep-inline-functions' flag is used instead.
  
       The attribute is ignored for undefined symbols.
  
--- 40109,40133 ----
  The following attributes are available on Microsoft Windows and Symbian
  OS targets.
  
! ‘dllexport’
!      On Microsoft Windows targets and Symbian OS targets the ‘dllexport’
       attribute causes the compiler to provide a global pointer to a
!      pointer in a DLL, so that it can be referenced with the ‘dllimport’
       attribute.  On Microsoft Windows targets, the pointer name is
!      formed by combining ‘_imp__’ and the function or variable name.
  
!      You can use ‘__declspec(dllexport)’ as a synonym for ‘__attribute__
!      ((dllexport))’ for compatibility with other compilers.
  
!      On systems that support the ‘visibility’ attribute, this attribute
       also implies "default" visibility.  It is an error to explicitly
       specify any other visibility.
  
       GCC's default behavior is to emit all inline functions with the
!      ‘dllexport’ attribute.  Since this can cause object file-size
!      bloat, you can use ‘-fno-keep-inline-dllexport’, which tells GCC to
       ignore the attribute for inlined functions unless the
!      ‘-fkeep-inline-functions’ flag is used instead.
  
       The attribute is ignored for undefined symbols.
  
*************** OS targets.
*** 40128,40164 ****
  
       For Microsoft Windows targets there are alternative methods for
       including the symbol in the DLL's export table such as using a
!      '.def' file with an 'EXPORTS' section or, with GNU ld, using the
!      '--export-all' linker flag.
  
! 'dllimport'
!      On Microsoft Windows and Symbian OS targets, the 'dllimport'
       attribute causes the compiler to reference a function or variable
       via a global pointer to a pointer that is set up by the DLL
!      exporting the symbol.  The attribute implies 'extern'.  On
       Microsoft Windows targets, the pointer name is formed by combining
!      '_imp__' and the function or variable name.
  
!      You can use '__declspec(dllimport)' as a synonym for '__attribute__
!      ((dllimport))' for compatibility with other compilers.
  
!      On systems that support the 'visibility' attribute, this attribute
       also implies "default" visibility.  It is an error to explicitly
       specify any other visibility.
  
       Currently, the attribute is ignored for inlined functions.  If the
       attribute is applied to a symbol _definition_, an error is
!      reported.  If a symbol previously declared 'dllimport' is later
       defined, the attribute is ignored in subsequent references, and a
       warning is emitted.  The attribute is also overridden by a
!      subsequent declaration as 'dllexport'.
  
       When applied to C++ classes, the attribute marks non-inlined member
       functions and static data members as imports.  However, the
       attribute is ignored for virtual methods to allow creation of
       vtables using thunks.
  
!      On the SH Symbian OS target the 'dllimport' attribute also has
       another affect--it can cause the vtable and run-time type
       information for a class to be exported.  This happens when the
       class has a dllimported constructor or a non-inline, non-pure
--- 40138,40174 ----
  
       For Microsoft Windows targets there are alternative methods for
       including the symbol in the DLL's export table such as using a
!      ‘.def’ file with an ‘EXPORTS’ section or, with GNU ld, using the
!      ‘--export-all’ linker flag.
  
! ‘dllimport’
!      On Microsoft Windows and Symbian OS targets, the ‘dllimport’
       attribute causes the compiler to reference a function or variable
       via a global pointer to a pointer that is set up by the DLL
!      exporting the symbol.  The attribute implies ‘extern’.  On
       Microsoft Windows targets, the pointer name is formed by combining
!      ‘_imp__’ and the function or variable name.
  
!      You can use ‘__declspec(dllimport)’ as a synonym for ‘__attribute__
!      ((dllimport))’ for compatibility with other compilers.
  
!      On systems that support the ‘visibility’ attribute, this attribute
       also implies "default" visibility.  It is an error to explicitly
       specify any other visibility.
  
       Currently, the attribute is ignored for inlined functions.  If the
       attribute is applied to a symbol _definition_, an error is
!      reported.  If a symbol previously declared ‘dllimport’ is later
       defined, the attribute is ignored in subsequent references, and a
       warning is emitted.  The attribute is also overridden by a
!      subsequent declaration as ‘dllexport’.
  
       When applied to C++ classes, the attribute marks non-inlined member
       functions and static data members as imports.  However, the
       attribute is ignored for virtual methods to allow creation of
       vtables using thunks.
  
!      On the SH Symbian OS target the ‘dllimport’ attribute also has
       another affect--it can cause the vtable and run-time type
       information for a class to be exported.  This happens when the
       class has a dllimported constructor or a non-inline, non-pure
*************** OS targets.
*** 40166,40186 ****
       also has an inline constructor or destructor and has a key function
       that is defined in the current translation unit.
  
!      For Microsoft Windows targets the use of the 'dllimport' attribute
       on functions is not necessary, but provides a small performance
       benefit by eliminating a thunk in the DLL.  The use of the
!      'dllimport' attribute on imported variables can be avoided by
!      passing the '--enable-auto-import' switch to the GNU linker.  As
       with functions, using the attribute for a variable eliminates a
       thunk in the DLL.
  
       One drawback to using this attribute is that a pointer to a
!      _variable_ marked as 'dllimport' cannot be used as a constant
!      address.  However, a pointer to a _function_ with the 'dllimport'
       attribute can be used as a constant initializer; in this case, the
       address of a stub function in the import lib is referenced.  On
       Microsoft Windows targets, the attribute can be disabled for
!      functions by setting the '-mnop-fun-dllimport' flag.
  
  
  File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
--- 40176,40196 ----
       also has an inline constructor or destructor and has a key function
       that is defined in the current translation unit.
  
!      For Microsoft Windows targets the use of the ‘dllimport’ attribute
       on functions is not necessary, but provides a small performance
       benefit by eliminating a thunk in the DLL.  The use of the
!      ‘dllimport’ attribute on imported variables can be avoided by
!      passing the ‘--enable-auto-import’ switch to the GNU linker.  As
       with functions, using the attribute for a variable eliminates a
       thunk in the DLL.
  
       One drawback to using this attribute is that a pointer to a
!      _variable_ marked as ‘dllimport’ cannot be used as a constant
!      address.  However, a pointer to a _function_ with the ‘dllimport’
       attribute can be used as a constant initializer; in this case, the
       address of a stub function in the import lib is referenced.  On
       Microsoft Windows targets, the attribute can be disabled for
!      functions by setting the ‘-mnop-fun-dllimport’ flag.
  
  
  File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: MIPS Function Att
*** 40190,40196 ****
  
  These function attributes are supported by the MIPS back end:
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 40200,40206 ----
  
  These function attributes are supported by the MIPS back end:
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 40198,40228 ****
       interrupt attribute which allows the interrupt mode to be
       described.  By default GCC assumes the external interrupt
       controller (EIC) mode is in use, this can be explicitly set using
!      'eic'.  When interrupts are non-masked then the requested Interrupt
       Priority Level (IPL) is copied to the current IPL which has the
       effect of only enabling higher priority interrupts.  To use
       vectored interrupt mode use the argument
!      'vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]', this will change the
       behavior of the non-masked interrupt support and GCC will arrange
       to mask all interrupts from sw0 up to and including the specified
       interrupt vector.
  
       You can use the following attributes to modify the behavior of an
       interrupt handler:
!      'use_shadow_register_set'
            Assume that the handler uses a shadow register set, instead of
            the main general-purpose registers.  An optional argument
!           'intstack' is supported to indicate that the shadow register
            set contains a valid stack pointer.
  
!      'keep_interrupts_masked'
            Keep interrupts masked for the whole function.  Without this
            attribute, GCC tries to reenable interrupts for as much of the
            function as it can.
  
!      'use_debug_exception_return'
!           Return using the 'deret' instruction.  Interrupt handlers that
!           don't have this attribute return using 'eret' instead.
  
       You can use any combination of these attributes, as shown below:
            void __attribute__ ((interrupt)) v0 ();
--- 40208,40238 ----
       interrupt attribute which allows the interrupt mode to be
       described.  By default GCC assumes the external interrupt
       controller (EIC) mode is in use, this can be explicitly set using
!      ‘eic’.  When interrupts are non-masked then the requested Interrupt
       Priority Level (IPL) is copied to the current IPL which has the
       effect of only enabling higher priority interrupts.  To use
       vectored interrupt mode use the argument
!      ‘vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]’, this will change the
       behavior of the non-masked interrupt support and GCC will arrange
       to mask all interrupts from sw0 up to and including the specified
       interrupt vector.
  
       You can use the following attributes to modify the behavior of an
       interrupt handler:
!      ‘use_shadow_register_set’
            Assume that the handler uses a shadow register set, instead of
            the main general-purpose registers.  An optional argument
!           ‘intstack’ is supported to indicate that the shadow register
            set contains a valid stack pointer.
  
!      ‘keep_interrupts_masked’
            Keep interrupts masked for the whole function.  Without this
            attribute, GCC tries to reenable interrupts for as much of the
            function as it can.
  
!      ‘use_debug_exception_return’
!           Return using the ‘deret’ instruction.  Interrupt handlers that
!           don't have this attribute return using ‘eret’ instead.
  
       You can use any combination of these attributes, as shown below:
            void __attribute__ ((interrupt)) v0 ();
*************** These function attributes are supported
*** 40241,40319 ****
            void __attribute__ ((interrupt("eic"))) v8 ();
            void __attribute__ ((interrupt("vector=hw3"))) v9 ();
  
! 'long_call'
! 'short_call'
! 'near'
! 'far'
       These attributes specify how a particular function is called on
!      MIPS.  The attributes override the '-mlong-calls' (*note MIPS
!      Options::) command-line switch.  The 'long_call' and 'far'
       attributes are synonyms, and cause the compiler to always call the
       function by first loading its address into a register, and then
!      using the contents of that register.  The 'short_call' and 'near'
       attributes are synonyms, and have the opposite effect; they specify
!      that non-PIC calls should be made using the more efficient 'jal'
       instruction.
  
! 'mips16'
! 'nomips16'
  
!      On MIPS targets, you can use the 'mips16' and 'nomips16' function
       attributes to locally select or turn off MIPS16 code generation.  A
!      function with the 'mips16' attribute is emitted as MIPS16 code,
       while MIPS16 code generation is disabled for functions with the
!      'nomips16' attribute.  These attributes override the '-mips16' and
!      '-mno-mips16' options on the command line (*note MIPS Options::).
  
       When compiling files containing mixed MIPS16 and non-MIPS16 code,
!      the preprocessor symbol '__mips16' reflects the setting on the
       command line, not that within individual functions.  Mixed MIPS16
       and non-MIPS16 code may interact badly with some GCC extensions
!      such as '__builtin_apply' (*note Constructing Calls::).
  
! 'micromips, MIPS'
! 'nomicromips, MIPS'
  
!      On MIPS targets, you can use the 'micromips' and 'nomicromips'
       function attributes to locally select or turn off microMIPS code
!      generation.  A function with the 'micromips' attribute is emitted
       as microMIPS code, while microMIPS code generation is disabled for
!      functions with the 'nomicromips' attribute.  These attributes
!      override the '-mmicromips' and '-mno-micromips' options on the
       command line (*note MIPS Options::).
  
       When compiling files containing mixed microMIPS and non-microMIPS
!      code, the preprocessor symbol '__mips_micromips' reflects the
       setting on the command line, not that within individual functions.
       Mixed microMIPS and non-microMIPS code may interact badly with some
!      GCC extensions such as '__builtin_apply' (*note Constructing
       Calls::).
  
! 'nocompression'
!      On MIPS targets, you can use the 'nocompression' function attribute
       to locally turn off MIPS16 and microMIPS code generation.  This
!      attribute overrides the '-mips16' and '-mmicromips' options on the
       command line (*note MIPS Options::).
  
! 'use_hazard_barrier_return'
       This function attribute instructs the compiler to generate a hazard
       barrier return that clears all execution and instruction hazards
       while returning, instead of generating a normal return instruction.
  
! 'code_readable'
       For MIPS targets that support PC-relative addressing modes, this
       attribute can be used to control how an object is addressed.  The
       attribute takes a single optional argument:
  
!      'no'
            The function should not read the instruction stream as data.
!      'yes'
            The function can read the instruction stream as data.
!      'pcrel'
            The function can read the instruction stream in a pc-relative
            mode.
  
!      If there is no argument supplied, the default of '"yes"' applies.
  
  
  File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
--- 40251,40329 ----
            void __attribute__ ((interrupt("eic"))) v8 ();
            void __attribute__ ((interrupt("vector=hw3"))) v9 ();
  
! ‘long_call’
! ‘short_call’
! ‘near’
! ‘far’
       These attributes specify how a particular function is called on
!      MIPS.  The attributes override the ‘-mlong-calls’ (*note MIPS
!      Options::) command-line switch.  The ‘long_call’ and ‘far’
       attributes are synonyms, and cause the compiler to always call the
       function by first loading its address into a register, and then
!      using the contents of that register.  The ‘short_call’ and ‘near’
       attributes are synonyms, and have the opposite effect; they specify
!      that non-PIC calls should be made using the more efficient ‘jal’
       instruction.
  
! ‘mips16’
! ‘nomips16’
  
!      On MIPS targets, you can use the ‘mips16’ and ‘nomips16’ function
       attributes to locally select or turn off MIPS16 code generation.  A
!      function with the ‘mips16’ attribute is emitted as MIPS16 code,
       while MIPS16 code generation is disabled for functions with the
!      ‘nomips16’ attribute.  These attributes override the ‘-mips16’ and
!      ‘-mno-mips16’ options on the command line (*note MIPS Options::).
  
       When compiling files containing mixed MIPS16 and non-MIPS16 code,
!      the preprocessor symbol ‘__mips16’ reflects the setting on the
       command line, not that within individual functions.  Mixed MIPS16
       and non-MIPS16 code may interact badly with some GCC extensions
!      such as ‘__builtin_apply’ (*note Constructing Calls::).
  
! ‘micromips, MIPS’
! ‘nomicromips, MIPS’
  
!      On MIPS targets, you can use the ‘micromips’ and ‘nomicromips’
       function attributes to locally select or turn off microMIPS code
!      generation.  A function with the ‘micromips’ attribute is emitted
       as microMIPS code, while microMIPS code generation is disabled for
!      functions with the ‘nomicromips’ attribute.  These attributes
!      override the ‘-mmicromips’ and ‘-mno-micromips’ options on the
       command line (*note MIPS Options::).
  
       When compiling files containing mixed microMIPS and non-microMIPS
!      code, the preprocessor symbol ‘__mips_micromips’ reflects the
       setting on the command line, not that within individual functions.
       Mixed microMIPS and non-microMIPS code may interact badly with some
!      GCC extensions such as ‘__builtin_apply’ (*note Constructing
       Calls::).
  
! ‘nocompression’
!      On MIPS targets, you can use the ‘nocompression’ function attribute
       to locally turn off MIPS16 and microMIPS code generation.  This
!      attribute overrides the ‘-mips16’ and ‘-mmicromips’ options on the
       command line (*note MIPS Options::).
  
! ‘use_hazard_barrier_return’
       This function attribute instructs the compiler to generate a hazard
       barrier return that clears all execution and instruction hazards
       while returning, instead of generating a normal return instruction.
  
! ‘code_readable’
       For MIPS targets that support PC-relative addressing modes, this
       attribute can be used to control how an object is addressed.  The
       attribute takes a single optional argument:
  
!      ‘no’
            The function should not read the instruction stream as data.
!      ‘yes’
            The function can read the instruction stream as data.
!      ‘pcrel’
            The function can read the instruction stream in a pc-relative
            mode.
  
!      If there is no argument supplied, the default of ‘"yes"’ applies.
  
  
  File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: MSP430 Function A
*** 40323,40339 ****
  
  These function attributes are supported by the MSP430 back end:
  
! 'critical'
       Critical functions disable interrupts upon entry and restore the
       previous interrupt state upon exit.  Critical functions cannot also
!      have the 'naked', 'reentrant' or 'interrupt' attributes.
  
       The MSP430 hardware ensures that interrupts are disabled on entry
!      to 'interrupt' functions, and restores the previous interrupt state
!      on exit.  The 'critical' attribute is therefore redundant on
!      'interrupt' functions.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 40333,40349 ----
  
  These function attributes are supported by the MSP430 back end:
  
! ‘critical’
       Critical functions disable interrupts upon entry and restore the
       previous interrupt state upon exit.  Critical functions cannot also
!      have the ‘naked’, ‘reentrant’ or ‘interrupt’ attributes.
  
       The MSP430 hardware ensures that interrupts are disabled on entry
!      to ‘interrupt’ functions, and restores the previous interrupt state
!      on exit.  The ‘critical’ attribute is therefore redundant on
!      ‘interrupt’ functions.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 40345,40377 ****
       this handler should be assigned.  If the argument is a name it is
       treated as a symbolic name for the vector slot.  These names should
       match up with appropriate entries in the linker script.  By default
!      the names 'watchdog' for vector 26, 'nmi' for vector 30 and 'reset'
       for vector 31 are recognized.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'reentrant'
       Reentrant functions disable interrupts upon entry and enable them
!      upon exit.  Reentrant functions cannot also have the 'naked' or
!      'critical' attributes.  They can have the 'interrupt' attribute.
  
! 'wakeup'
       This attribute only applies to interrupt functions.  It is silently
       ignored if applied to a non-interrupt function.  A wakeup interrupt
       function will rouse the processor from any low-power state that it
       might be in when the function exits.
  
! 'lower'
! 'upper'
! 'either'
       On the MSP430 target these attributes can be used to specify
       whether the function or variable should be placed into low memory,
       high memory, or the placement should be left to the linker to
--- 40355,40387 ----
       this handler should be assigned.  If the argument is a name it is
       treated as a symbolic name for the vector slot.  These names should
       match up with appropriate entries in the linker script.  By default
!      the names ‘watchdog’ for vector 26, ‘nmi’ for vector 30 and ‘reset’
       for vector 31 are recognized.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘reentrant’
       Reentrant functions disable interrupts upon entry and enable them
!      upon exit.  Reentrant functions cannot also have the ‘naked’ or
!      ‘critical’ attributes.  They can have the ‘interrupt’ attribute.
  
! ‘wakeup’
       This attribute only applies to interrupt functions.  It is silently
       ignored if applied to a non-interrupt function.  A wakeup interrupt
       function will rouse the processor from any low-power state that it
       might be in when the function exits.
  
! ‘lower’
! ‘upper’
! ‘either’
       On the MSP430 target these attributes can be used to specify
       whether the function or variable should be placed into low memory,
       high memory, or the placement should be left to the linker to
*************** These function attributes are supported
*** 40379,40400 ****
       MSP430X architecture in the large memory model.
  
       The attributes work in conjunction with a linker script that has
!      been augmented to specify where to place sections with a '.lower'
!      and a '.upper' prefix.  So, for example, as well as placing the
!      '.data' section, the script also specifies the placement of a
!      '.lower.data' and a '.upper.data' section.  The intention is that
!      'lower' sections are placed into a small but easier to access
       memory region and the upper sections are placed into a larger, but
       slower to access, region.
  
!      The 'either' attribute is special.  It tells the linker to place
!      the object into the corresponding 'lower' section if there is room
       for it.  If there is insufficient room then the object is placed
!      into the corresponding 'upper' section instead.  Note that the
       placement algorithm is not very sophisticated.  It does not attempt
!      to find an optimal packing of the 'lower' sections.  It just makes
       one pass over the objects and does the best that it can.  Using the
!      '-ffunction-sections' and '-fdata-sections' command-line options
       can help the packing, however, since they produce smaller, easier
       to pack regions.
  
--- 40389,40410 ----
       MSP430X architecture in the large memory model.
  
       The attributes work in conjunction with a linker script that has
!      been augmented to specify where to place sections with a ‘.lower’
!      and a ‘.upper’ prefix.  So, for example, as well as placing the
!      ‘.data’ section, the script also specifies the placement of a
!      ‘.lower.data’ and a ‘.upper.data’ section.  The intention is that
!      ‘lower’ sections are placed into a small but easier to access
       memory region and the upper sections are placed into a larger, but
       slower to access, region.
  
!      The ‘either’ attribute is special.  It tells the linker to place
!      the object into the corresponding ‘lower’ section if there is room
       for it.  If there is insufficient room then the object is placed
!      into the corresponding ‘upper’ section instead.  Note that the
       placement algorithm is not very sophisticated.  It does not attempt
!      to find an optimal packing of the ‘lower’ sections.  It just makes
       one pass over the objects and does the best that it can.  Using the
!      ‘-ffunction-sections’ and ‘-fdata-sections’ command-line options
       can help the packing, however, since they produce smaller, easier
       to pack regions.
  
*************** File: gcc.info,  Node: NDS32 Function At
*** 40406,40455 ****
  
  These function attributes are supported by the NDS32 back end:
  
! 'exception'
       Use this attribute on the NDS32 target to indicate that the
       specified function is an exception handler.  The compiler will
       generate corresponding sections for use in an exception handler.
  
! 'interrupt'
       On NDS32 target, this attribute indicates that the specified
       function is an interrupt handler.  The compiler generates
       corresponding sections for use in an interrupt handler.  You can
       use the following attributes to modify the behavior:
!      'nested'
            This interrupt service routine is interruptible.
!      'not_nested'
            This interrupt service routine is not interruptible.
!      'nested_ready'
            This interrupt service routine is interruptible after
!           'PSW.GIE' (global interrupt enable) is set.  This allows
            interrupt service routine to finish some short critical code
            before enabling interrupts.
!      'save_all'
            The system will help save all registers into stack before
            entering interrupt handler.
!      'partial_save'
            The system will help save caller registers into stack before
            entering interrupt handler.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'reset'
       Use this attribute on the NDS32 target to indicate that the
       specified function is a reset handler.  The compiler will generate
       corresponding sections for use in a reset handler.  You can use the
       following attributes to provide extra exception handling:
!      'nmi'
            Provide a user-defined function to handle NMI exception.
!      'warm'
            Provide a user-defined function to handle warm reset
            exception.
  
--- 40416,40465 ----
  
  These function attributes are supported by the NDS32 back end:
  
! ‘exception’
       Use this attribute on the NDS32 target to indicate that the
       specified function is an exception handler.  The compiler will
       generate corresponding sections for use in an exception handler.
  
! ‘interrupt’
       On NDS32 target, this attribute indicates that the specified
       function is an interrupt handler.  The compiler generates
       corresponding sections for use in an interrupt handler.  You can
       use the following attributes to modify the behavior:
!      ‘nested’
            This interrupt service routine is interruptible.
!      ‘not_nested’
            This interrupt service routine is not interruptible.
!      ‘nested_ready’
            This interrupt service routine is interruptible after
!           ‘PSW.GIE’ (global interrupt enable) is set.  This allows
            interrupt service routine to finish some short critical code
            before enabling interrupts.
!      ‘save_all’
            The system will help save all registers into stack before
            entering interrupt handler.
!      ‘partial_save’
            The system will help save caller registers into stack before
            entering interrupt handler.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘reset’
       Use this attribute on the NDS32 target to indicate that the
       specified function is a reset handler.  The compiler will generate
       corresponding sections for use in a reset handler.  You can use the
       following attributes to provide extra exception handling:
!      ‘nmi’
            Provide a user-defined function to handle NMI exception.
!      ‘warm’
            Provide a user-defined function to handle warm reset
            exception.
  
*************** File: gcc.info,  Node: Nios II Function
*** 40461,40484 ****
  
  These function attributes are supported by the Nios II back end:
  
! 'target (OPTIONS)'
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       When compiling for Nios II, the following options are allowed:
  
!      'custom-INSN=N'
!      'no-custom-INSN'
!           Each 'custom-INSN=N' attribute locally enables use of a custom
            instruction with encoding N when generating code that uses
!           INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
            custom instruction INSN.  These target attributes correspond
!           to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
            options, and support the same set of INSN keywords.  *Note
            Nios II Options::, for more information.
  
!      'custom-fpu-cfg=NAME'
!           This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
            command-line option, to select a predefined set of custom
            instructions named NAME.  *Note Nios II Options::, for more
            information.
--- 40471,40494 ----
  
  These function attributes are supported by the Nios II back end:
  
! ‘target (OPTIONS)’
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       When compiling for Nios II, the following options are allowed:
  
!      ‘custom-INSN=N’
!      ‘no-custom-INSN’
!           Each ‘custom-INSN=N’ attribute locally enables use of a custom
            instruction with encoding N when generating code that uses
!           INSN.  Similarly, ‘no-custom-INSN’ locally inhibits use of the
            custom instruction INSN.  These target attributes correspond
!           to the ‘-mcustom-INSN=N’ and ‘-mno-custom-INSN’ command-line
            options, and support the same set of INSN keywords.  *Note
            Nios II Options::, for more information.
  
!      ‘custom-fpu-cfg=NAME’
!           This attribute corresponds to the ‘-mcustom-fpu-cfg=NAME’
            command-line option, to select a predefined set of custom
            instructions named NAME.  *Note Nios II Options::, for more
            information.
*************** File: gcc.info,  Node: Nvidia PTX Functi
*** 40491,40503 ****
  
  These function attributes are supported by the Nvidia PTX back end:
  
! 'kernel'
       This attribute indicates that the corresponding function should be
       compiled as a kernel function, which can be invoked from the host
       via the CUDA RT library.  By default functions are only callable
       only from other PTX functions.
  
!      Kernel functions must have 'void' return type.
  
  
  File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
--- 40501,40513 ----
  
  These function attributes are supported by the Nvidia PTX back end:
  
! ‘kernel’
       This attribute indicates that the corresponding function should be
       compiled as a kernel function, which can be invoked from the host
       via the CUDA RT library.  By default functions are only callable
       only from other PTX functions.
  
!      Kernel functions must have ‘void’ return type.
  
  
  File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: PowerPC Function
*** 40507,40671 ****
  
  These function attributes are supported by the PowerPC back end:
  
! 'longcall'
! 'shortcall'
!      The 'longcall' attribute indicates that the function might be far
       away from the call site and require a different (more expensive)
!      calling sequence.  The 'shortcall' attribute indicates that the
       function is always close enough for the shorter calling sequence to
!      be used.  These attributes override both the '-mlongcall' switch
!      and the '#pragma longcall' setting.
  
       *Note RS/6000 and PowerPC Options::, for more information on
       whether long calls are necessary.
  
! 'target (OPTIONS)'
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On the PowerPC, the following options are allowed:
  
!      'altivec'
!      'no-altivec'
            Generate code that uses (does not use) AltiVec instructions.
            In 32-bit code, you cannot enable AltiVec instructions unless
!           '-mabi=altivec' is used on the command line.
  
!      'cmpb'
!      'no-cmpb'
            Generate code that uses (does not use) the compare bytes
            instruction implemented on the POWER6 processor and other
            processors that support the PowerPC V2.05 architecture.
  
!      'dlmzb'
!      'no-dlmzb'
            Generate code that uses (does not use) the string-search
!           'dlmzb' instruction on the IBM 405, 440, 464 and 476
            processors.  This instruction is generated by default when
            targeting those processors.
  
!      'fprnd'
!      'no-fprnd'
            Generate code that uses (does not use) the FP round to integer
            instructions implemented on the POWER5+ processor and other
            processors that support the PowerPC V2.03 architecture.
  
!      'hard-dfp'
!      'no-hard-dfp'
            Generate code that uses (does not use) the decimal
            floating-point instructions implemented on some POWER
            processors.
  
!      'isel'
!      'no-isel'
            Generate code that uses (does not use) ISEL instruction.
  
!      'mfcrf'
!      'no-mfcrf'
            Generate code that uses (does not use) the move from condition
            register field instruction implemented on the POWER4 processor
            and other processors that support the PowerPC V2.01
            architecture.
  
!      'mulhw'
!      'no-mulhw'
            Generate code that uses (does not use) the half-word multiply
            and multiply-accumulate instructions on the IBM 405, 440, 464
            and 476 processors.  These instructions are generated by
            default when targeting those processors.
  
!      'multiple'
!      'no-multiple'
            Generate code that uses (does not use) the load multiple word
            instructions and the store multiple word instructions.
  
!      'update'
!      'no-update'
            Generate code that uses (does not use) the load or store
            instructions that update the base register to the address of
            the calculated memory location.
  
!      'popcntb'
!      'no-popcntb'
            Generate code that uses (does not use) the popcount and
            double-precision FP reciprocal estimate instruction
            implemented on the POWER5 processor and other processors that
            support the PowerPC V2.02 architecture.
  
!      'popcntd'
!      'no-popcntd'
            Generate code that uses (does not use) the popcount
            instruction implemented on the POWER7 processor and other
            processors that support the PowerPC V2.06 architecture.
  
!      'powerpc-gfxopt'
!      'no-powerpc-gfxopt'
            Generate code that uses (does not use) the optional PowerPC
            architecture instructions in the Graphics group, including
            floating-point select.
  
!      'powerpc-gpopt'
!      'no-powerpc-gpopt'
            Generate code that uses (does not use) the optional PowerPC
            architecture instructions in the General Purpose group,
            including floating-point square root.
  
!      'recip-precision'
!      'no-recip-precision'
            Assume (do not assume) that the reciprocal estimate
            instructions provide higher-precision estimates than is
            mandated by the PowerPC ABI.
  
!      'string'
!      'no-string'
            Generate code that uses (does not use) the load string
            instructions and the store string word instructions to save
            multiple registers and do small block moves.
  
!      'vsx'
!      'no-vsx'
            Generate code that uses (does not use) vector/scalar (VSX)
            instructions, and also enable the use of built-in functions
            that allow more direct access to the VSX instruction set.  In
            32-bit code, you cannot enable VSX or AltiVec instructions
!           unless '-mabi=altivec' is used on the command line.
  
!      'friz'
!      'no-friz'
!           Generate (do not generate) the 'friz' instruction when the
!           '-funsafe-math-optimizations' option is used to optimize
            rounding a floating-point value to 64-bit integer and back to
!           floating point.  The 'friz' instruction does not return the
            same value if the floating-point number is too large to fit in
            an integer.
  
!      'avoid-indexed-addresses'
!      'no-avoid-indexed-addresses'
            Generate code that tries to avoid (not avoid) the use of
            indexed load or store instructions.
  
!      'paired'
!      'no-paired'
            Generate code that uses (does not use) the generation of
            PAIRED simd instructions.
  
!      'longcall'
!      'no-longcall'
            Generate code that assumes (does not assume) that all calls
            are far away so that a longer more expensive calling sequence
            is required.
  
!      'cpu=CPU'
            Specify the architecture to generate code for when compiling
!           the function.  If you select the 'target("cpu=power7")'
            attribute when generating 32-bit code, VSX and AltiVec
            instructions are not generated unless you use the
!           '-mabi=altivec' option on the command line.
  
!      'tune=TUNE'
            Specify the architecture to tune for when compiling the
!           function.  If you do not specify the 'target("tune=TUNE")'
!           attribute and you do specify the 'target("cpu=CPU")'
            attribute, compilation tunes for the CPU architecture, and not
            the default tuning specified on the command line.
  
--- 40517,40681 ----
  
  These function attributes are supported by the PowerPC back end:
  
! ‘longcall’
! ‘shortcall’
!      The ‘longcall’ attribute indicates that the function might be far
       away from the call site and require a different (more expensive)
!      calling sequence.  The ‘shortcall’ attribute indicates that the
       function is always close enough for the shorter calling sequence to
!      be used.  These attributes override both the ‘-mlongcall’ switch
!      and the ‘#pragma longcall’ setting.
  
       *Note RS/6000 and PowerPC Options::, for more information on
       whether long calls are necessary.
  
! ‘target (OPTIONS)’
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On the PowerPC, the following options are allowed:
  
!      ‘altivec’
!      ‘no-altivec’
            Generate code that uses (does not use) AltiVec instructions.
            In 32-bit code, you cannot enable AltiVec instructions unless
!           ‘-mabi=altivec’ is used on the command line.
  
!      ‘cmpb’
!      ‘no-cmpb’
            Generate code that uses (does not use) the compare bytes
            instruction implemented on the POWER6 processor and other
            processors that support the PowerPC V2.05 architecture.
  
!      ‘dlmzb’
!      ‘no-dlmzb’
            Generate code that uses (does not use) the string-search
!           ‘dlmzb’ instruction on the IBM 405, 440, 464 and 476
            processors.  This instruction is generated by default when
            targeting those processors.
  
!      ‘fprnd’
!      ‘no-fprnd’
            Generate code that uses (does not use) the FP round to integer
            instructions implemented on the POWER5+ processor and other
            processors that support the PowerPC V2.03 architecture.
  
!      ‘hard-dfp’
!      ‘no-hard-dfp’
            Generate code that uses (does not use) the decimal
            floating-point instructions implemented on some POWER
            processors.
  
!      ‘isel’
!      ‘no-isel’
            Generate code that uses (does not use) ISEL instruction.
  
!      ‘mfcrf’
!      ‘no-mfcrf’
            Generate code that uses (does not use) the move from condition
            register field instruction implemented on the POWER4 processor
            and other processors that support the PowerPC V2.01
            architecture.
  
!      ‘mulhw’
!      ‘no-mulhw’
            Generate code that uses (does not use) the half-word multiply
            and multiply-accumulate instructions on the IBM 405, 440, 464
            and 476 processors.  These instructions are generated by
            default when targeting those processors.
  
!      ‘multiple’
!      ‘no-multiple’
            Generate code that uses (does not use) the load multiple word
            instructions and the store multiple word instructions.
  
!      ‘update’
!      ‘no-update’
            Generate code that uses (does not use) the load or store
            instructions that update the base register to the address of
            the calculated memory location.
  
!      ‘popcntb’
!      ‘no-popcntb’
            Generate code that uses (does not use) the popcount and
            double-precision FP reciprocal estimate instruction
            implemented on the POWER5 processor and other processors that
            support the PowerPC V2.02 architecture.
  
!      ‘popcntd’
!      ‘no-popcntd’
            Generate code that uses (does not use) the popcount
            instruction implemented on the POWER7 processor and other
            processors that support the PowerPC V2.06 architecture.
  
!      ‘powerpc-gfxopt’
!      ‘no-powerpc-gfxopt’
            Generate code that uses (does not use) the optional PowerPC
            architecture instructions in the Graphics group, including
            floating-point select.
  
!      ‘powerpc-gpopt’
!      ‘no-powerpc-gpopt’
            Generate code that uses (does not use) the optional PowerPC
            architecture instructions in the General Purpose group,
            including floating-point square root.
  
!      ‘recip-precision’
!      ‘no-recip-precision’
            Assume (do not assume) that the reciprocal estimate
            instructions provide higher-precision estimates than is
            mandated by the PowerPC ABI.
  
!      ‘string’
!      ‘no-string’
            Generate code that uses (does not use) the load string
            instructions and the store string word instructions to save
            multiple registers and do small block moves.
  
!      ‘vsx’
!      ‘no-vsx’
            Generate code that uses (does not use) vector/scalar (VSX)
            instructions, and also enable the use of built-in functions
            that allow more direct access to the VSX instruction set.  In
            32-bit code, you cannot enable VSX or AltiVec instructions
!           unless ‘-mabi=altivec’ is used on the command line.
  
!      ‘friz’
!      ‘no-friz’
!           Generate (do not generate) the ‘friz’ instruction when the
!           ‘-funsafe-math-optimizations’ option is used to optimize
            rounding a floating-point value to 64-bit integer and back to
!           floating point.  The ‘friz’ instruction does not return the
            same value if the floating-point number is too large to fit in
            an integer.
  
!      ‘avoid-indexed-addresses’
!      ‘no-avoid-indexed-addresses’
            Generate code that tries to avoid (not avoid) the use of
            indexed load or store instructions.
  
!      ‘paired’
!      ‘no-paired’
            Generate code that uses (does not use) the generation of
            PAIRED simd instructions.
  
!      ‘longcall’
!      ‘no-longcall’
            Generate code that assumes (does not assume) that all calls
            are far away so that a longer more expensive calling sequence
            is required.
  
!      ‘cpu=CPU’
            Specify the architecture to generate code for when compiling
!           the function.  If you select the ‘target("cpu=power7")’
            attribute when generating 32-bit code, VSX and AltiVec
            instructions are not generated unless you use the
!           ‘-mabi=altivec’ option on the command line.
  
!      ‘tune=TUNE’
            Specify the architecture to tune for when compiling the
!           function.  If you do not specify the ‘target("tune=TUNE")’
!           attribute and you do specify the ‘target("cpu=CPU")’
            attribute, compilation tunes for the CPU architecture, and not
            the default tuning specified on the command line.
  
*************** File: gcc.info,  Node: RISC-V Function A
*** 40681,40697 ****
  
  These function attributes are supported by the RISC-V back end:
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 40691,40707 ----
  
  These function attributes are supported by the RISC-V back end:
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 40702,40712 ****
  
            void f (void) __attribute__ ((interrupt ("user")));
  
!      Permissible values for this parameter are 'user', 'supervisor', and
!      'machine'.  If there is no parameter, then it defaults to
!      'machine'.
  
! 'riscv_vector_cc'
       Use this attribute to force the function to use the vector calling
       convention variant.
  
--- 40712,40722 ----
  
            void f (void) __attribute__ ((interrupt ("user")));
  
!      Permissible values for this parameter are ‘user’, ‘supervisor’, and
!      ‘machine’.  If there is no parameter, then it defaults to
!      ‘machine’.
  
! ‘riscv_vector_cc’
       Use this attribute to force the function to use the vector calling
       convention variant.
  
*************** RISC-V target.  For the most part, these
*** 40718,40741 ****
  similar command-line options (*note RISC-V Options::), but on a
  per-function basis.
  
! 'arch='
       Specifies the architecture version and architectural extensions to
       use for this function.  The behavior and permissible arguments are
!      the same as for the '-march=' command-line option, in addtion, it
       also support extension enablement list, a list of extension name
!      and prefixed with '+', like 'arch=+zba' means enable 'zba'
       extension.  Multiple extension can be enabled by separating them
!      with a comma.  For example: 'arch=+zba,+zbb'.
  
! 'tune='
       Specifies the core for which to tune the performance of this
       function.  The behavior and permissible arguments are the same as
!      for the '-mtune=' command-line option.
  
! 'cpu='
       Specifies the core for which to tune the performance of this
       function and also whose architectural features to use.  The
!      behavior and valid arguments are the same as for the '-mcpu='
       command-line option.
  
   The above target attributes can be specified as follows:
--- 40728,40751 ----
  similar command-line options (*note RISC-V Options::), but on a
  per-function basis.
  
! ‘arch=’
       Specifies the architecture version and architectural extensions to
       use for this function.  The behavior and permissible arguments are
!      the same as for the ‘-march=’ command-line option, in addtion, it
       also support extension enablement list, a list of extension name
!      and prefixed with ‘+’, like ‘arch=+zba’ means enable ‘zba’
       extension.  Multiple extension can be enabled by separating them
!      with a comma.  For example: ‘arch=+zba,+zbb’.
  
! ‘tune=’
       Specifies the core for which to tune the performance of this
       function.  The behavior and permissible arguments are the same as
!      for the ‘-mtune=’ command-line option.
  
! ‘cpu=’
       Specifies the core for which to tune the performance of this
       function and also whose architectural features to use.  The
!      behavior and valid arguments are the same as for the ‘-mcpu=’
       command-line option.
  
   The above target attributes can be specified as follows:
*************** per-function basis.
*** 40747,40753 ****
         return a + 5;
       }
  
!  where 'ATTR-STRING' is one of the attribute strings specified above.
  
   Multiple target function attributes can be specified by separating them
  with a semicolon.  For example:
--- 40757,40763 ----
         return a + 5;
       }
  
!  where ‘ATTR-STRING’ is one of the attribute strings specified above.
  
   Multiple target function attributes can be specified by separating them
  with a semicolon.  For example:
*************** with a semicolon.  For example:
*** 40758,40765 ****
         return a + 5;
       }
  
!  is valid and compiles function 'foo' with 'zba' and 'zbb' extensions
! and tunes it for 'rocket'.
  
  
  File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
--- 40768,40775 ----
         return a + 5;
       }
  
!  is valid and compiles function ‘foo’ with ‘zba’ and ‘zbb’ extensions
! and tunes it for ‘rocket’.
  
  
  File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: RL78 Function Att
*** 40769,40793 ****
  
  These function attributes are supported by the RL78 back end:
  
! 'interrupt'
! 'brk_interrupt'
       These attributes indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
!      Use 'brk_interrupt' instead of 'interrupt' for handlers intended to
!      be used with the 'BRK' opcode (i.e. those that must end with 'RETB'
!      instead of 'RETI').
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
--- 40779,40803 ----
  
  These function attributes are supported by the RL78 back end:
  
! ‘interrupt’
! ‘brk_interrupt’
       These attributes indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
!      Use ‘brk_interrupt’ instead of ‘interrupt’ for handlers intended to
!      be used with the ‘BRK’ opcode (i.e. those that must end with ‘RETB’
!      instead of ‘RETI’).
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
  
*************** File: gcc.info,  Node: RX Function Attri
*** 40798,40810 ****
  
  These function attributes are supported by the RX back end:
  
! 'fast_interrupt'
       Use this attribute on the RX port to indicate that the specified
       function is a fast interrupt handler.  This is just like the
!      'interrupt' attribute, except that 'freit' is used to return
!      instead of 'reit'.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 40808,40820 ----
  
  These function attributes are supported by the RX back end:
  
! ‘fast_interrupt’
       Use this attribute on the RX port to indicate that the specified
       function is a fast interrupt handler.  This is just like the
!      ‘interrupt’ attribute, except that ‘freit’ is used to return
!      instead of ‘reit’.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** These function attributes are supported
*** 40814,40820 ****
       as arguments to the attribute, as well as naming an alternate table
       name.  Parameters are handled sequentially, so one handler can be
       assigned to multiple entries in multiple tables.  One may also pass
!      the magic string '"$default"' which causes the function to be used
       for any unfilled slots in the current table.
  
       This example shows a simple assignment of a function to one vector
--- 40824,40830 ----
       as arguments to the attribute, as well as naming an alternate table
       name.  Parameters are handled sequentially, so one handler can be
       assigned to multiple entries in multiple tables.  One may also pass
!      the magic string ‘"$default"’ which causes the function to be used
       for any unfilled slots in the current table.
  
       This example shows a simple assignment of a function to one vector
*************** These function attributes are supported
*** 40824,40848 ****
  
       This example assigns a function to two slots in the default table
       (using preprocessor macros defined elsewhere) and makes it the
!      default for the 'dct' table:
            void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
            	txd1_handler ();
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'vector'
!      This RX attribute is similar to the 'interrupt' attribute,
       including its parameters, but does not make the function an
       interrupt-handler type function (i.e. it retains the normal C
!      function calling ABI). See the 'interrupt' attribute for a
       description of its arguments.
  
  
--- 40834,40858 ----
  
       This example assigns a function to two slots in the default table
       (using preprocessor macros defined elsewhere) and makes it the
!      default for the ‘dct’ table:
            void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
            	txd1_handler ();
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘vector’
!      This RX attribute is similar to the ‘interrupt’ attribute,
       including its parameters, but does not make the function an
       interrupt-handler type function (i.e. it retains the normal C
!      function calling ABI). See the ‘interrupt’ attribute for a
       description of its arguments.
  
  
*************** File: gcc.info,  Node: S/390 Function At
*** 40853,40864 ****
  
  These function attributes are supported on the S/390:
  
! 'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
  
       On S/390 System z targets, you can use this function attribute to
       make GCC generate a "hot-patching" function prologue.  If the
!      '-mhotpatch=' command-line option is used at the same time, the
!      'hotpatch' attribute takes precedence.  The first of the two
       arguments specifies the number of halfwords to be added before the
       function label.  A second argument can be used to specify the
       number of halfwords to be added after the function label.  For both
--- 40863,40874 ----
  
  These function attributes are supported on the S/390:
  
! ‘hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)’
  
       On S/390 System z targets, you can use this function attribute to
       make GCC generate a "hot-patching" function prologue.  If the
!      ‘-mhotpatch=’ command-line option is used at the same time, the
!      ‘hotpatch’ attribute takes precedence.  The first of the two
       arguments specifies the number of halfwords to be added before the
       function label.  A second argument can be used to specify the
       number of halfwords to be added after the function label.  For both
*************** These function attributes are supported
*** 40866,40909 ****
  
       If both arguments are zero, hotpatching is disabled.
  
! 'target (OPTIONS)'
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On S/390, the following options are supported:
  
!      'arch='
!      'tune='
!      'stack-guard='
!      'stack-size='
!      'branch-cost='
!      'warn-framesize='
!      'backchain'
!      'no-backchain'
!      'hard-dfp'
!      'no-hard-dfp'
!      'hard-float'
!      'soft-float'
!      'htm'
!      'no-htm'
!      'vx'
!      'no-vx'
!      'packed-stack'
!      'no-packed-stack'
!      'small-exec'
!      'no-small-exec'
!      'mvcle'
!      'no-mvcle'
!      'warn-dynamicstack'
!      'no-warn-dynamicstack'
  
       The options work exactly like the S/390 specific command line
!      options (without the prefix '-m') except that they do not change
       any feature macros.  For example,
  
            target("no-vx")
  
!      does not undefine the '__VEC__' macro.
  
  
  File: gcc.info,  Node: SH Function Attributes,  Next: Symbian OS Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
--- 40876,40919 ----
  
       If both arguments are zero, hotpatching is disabled.
  
! ‘target (OPTIONS)’
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On S/390, the following options are supported:
  
!      ‘arch=’
!      ‘tune=’
!      ‘stack-guard=’
!      ‘stack-size=’
!      ‘branch-cost=’
!      ‘warn-framesize=’
!      ‘backchain’
!      ‘no-backchain’
!      ‘hard-dfp’
!      ‘no-hard-dfp’
!      ‘hard-float’
!      ‘soft-float’
!      ‘htm’
!      ‘no-htm’
!      ‘vx’
!      ‘no-vx’
!      ‘packed-stack’
!      ‘no-packed-stack’
!      ‘small-exec’
!      ‘no-small-exec’
!      ‘mvcle’
!      ‘no-mvcle’
!      ‘warn-dynamicstack’
!      ‘no-warn-dynamicstack’
  
       The options work exactly like the S/390 specific command line
!      options (without the prefix ‘-m’) except that they do not change
       any feature macros.  For example,
  
            target("no-vx")
  
!      does not undefine the ‘__VEC__’ macro.
  
  
  File: gcc.info,  Node: SH Function Attributes,  Next: Symbian OS Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: SH Function Attri
*** 40913,40919 ****
  
  These function attributes are supported on the SH family of processors:
  
! 'function_vector'
       On SH2A targets, this attribute declares a function to be called
       using the TBR relative addressing mode.  The argument to this
       attribute is the entry number of the same function in a vector
--- 40923,40929 ----
  
  These function attributes are supported on the SH family of processors:
  
! ‘function_vector’
       On SH2A targets, this attribute declares a function to be called
       using the TBR relative addressing mode.  The argument to this
       attribute is the entry number of the same function in a vector
*************** These function attributes are supported
*** 40932,40957 ****
       being made to the same function, it saves 2 bytes of code per each
       of these calls.
  
! 'interrupt_handler'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
! 'nosave_low_regs'
       Use this attribute on SH targets to indicate that an
!      'interrupt_handler' function should not save and restore registers
       R0..R7.  This can be used on SH3* and SH4* targets that have a
       second R0..R7 register bank for non-reentrant interrupt handlers.
  
! 'renesas'
       On SH targets this attribute specifies that the function or struct
       follows the Renesas ABI.
  
! 'resbank'
       On the SH2A target, this attribute enables the high-speed register
       saving and restoration using a register bank for
!      'interrupt_handler' routines.  Saving to the bank is performed
       automatically after the CPU accepts an interrupt that uses a
       register bank.
  
--- 40942,40967 ----
       being made to the same function, it saves 2 bytes of code per each
       of these calls.
  
! ‘interrupt_handler’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
       attribute is present.
  
! ‘nosave_low_regs’
       Use this attribute on SH targets to indicate that an
!      ‘interrupt_handler’ function should not save and restore registers
       R0..R7.  This can be used on SH3* and SH4* targets that have a
       second R0..R7 register bank for non-reentrant interrupt handlers.
  
! ‘renesas’
       On SH targets this attribute specifies that the function or struct
       follows the Renesas ABI.
  
! ‘resbank’
       On the SH2A target, this attribute enables the high-speed register
       saving and restoration using a register bank for
!      ‘interrupt_handler’ routines.  Saving to the bank is performed
       automatically after the CPU accepts an interrupt that uses a
       register bank.
  
*************** These function attributes are supported
*** 40962,40969 ****
       Restoration from the bank is executed by issuing a RESBANK
       instruction.
  
! 'sp_switch'
!      Use this attribute on the SH to indicate an 'interrupt_handler'
       function should switch to an alternate stack.  It expects a string
       argument that names a global variable holding the address of the
       alternate stack.
--- 40972,40979 ----
       Restoration from the bank is executed by issuing a RESBANK
       instruction.
  
! ‘sp_switch’
!      Use this attribute on the SH to indicate an ‘interrupt_handler’
       function should switch to an alternate stack.  It expects a string
       argument that names a global variable holding the address of the
       alternate stack.
*************** These function attributes are supported
*** 40972,40985 ****
            void f () __attribute__ ((interrupt_handler,
                                      sp_switch ("alt_stack")));
  
! 'trap_exit'
!      Use this attribute on the SH for an 'interrupt_handler' to return
!      using 'trapa' instead of 'rte'.  This attribute expects an integer
       argument specifying the trap number to be used.
  
! 'trapa_handler'
       On SH targets this function attribute is similar to
!      'interrupt_handler' but it does not save and restore all registers.
  
  
  File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
--- 40982,40995 ----
            void f () __attribute__ ((interrupt_handler,
                                      sp_switch ("alt_stack")));
  
! ‘trap_exit’
!      Use this attribute on the SH for an ‘interrupt_handler’ to return
!      using ‘trapa’ instead of ‘rte’.  This attribute expects an integer
       argument specifying the trap number to be used.
  
! ‘trapa_handler’
       On SH targets this function attribute is similar to
!      ‘interrupt_handler’ but it does not save and restore all registers.
  
  
  File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: Symbian OS Functi
*** 40988,40994 ****
  --------------------------------------
  
  *Note Microsoft Windows Function Attributes::, for discussion of the
! 'dllexport' and 'dllimport' attributes.
  
  
  File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
--- 40998,41004 ----
  --------------------------------------
  
  *Note Microsoft Windows Function Attributes::, for discussion of the
! ‘dllexport’ and ‘dllimport’ attributes.
  
  
  File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
*************** File: gcc.info,  Node: V850 Function Att
*** 40998,41005 ****
  
  The V850 back end supports these function attributes:
  
! 'interrupt'
! 'interrupt_handler'
       Use these attributes to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when either
--- 41008,41015 ----
  
  The V850 back end supports these function attributes:
  
! ‘interrupt’
! ‘interrupt_handler’
       Use these attributes to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when either
*************** File: gcc.info,  Node: Visium Function A
*** 41013,41019 ****
  
  These function attributes are supported by the Visium back end:
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 41023,41029 ----
  
  These function attributes are supported by the Visium back end:
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** File: gcc.info,  Node: x86 Function Attr
*** 41027,41071 ****
  
  These function attributes are supported by the x86 back end:
  
! 'cdecl'
!      On the x86-32 targets, the 'cdecl' attribute causes the compiler to
       assume that the calling function pops off the stack space used to
       pass arguments.  This is useful to override the effects of the
!      '-mrtd' switch.
  
! 'fastcall'
!      On x86-32 targets, the 'fastcall' attribute causes the compiler to
       pass the first argument (if of integral type) in the register ECX
       and the second argument (if of integral type) in the register EDX.
       Subsequent and other typed arguments are passed on the stack.  The
       called function pops the arguments off the stack.  If the number of
       arguments is variable all arguments are pushed on the stack.
  
! 'thiscall'
!      On x86-32 targets, the 'thiscall' attribute causes the compiler to
       pass the first argument (if of integral type) in the register ECX.
       Subsequent and other typed arguments are passed on the stack.  The
       called function pops the arguments off the stack.  If the number of
       arguments is variable all arguments are pushed on the stack.  The
!      'thiscall' attribute is intended for C++ non-static member
       functions.  As a GCC extension, this calling convention can be used
       for C functions and for static member methods.
  
! 'ms_abi'
! 'sysv_abi'
  
       On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
       indicate which calling convention should be used for a function.
!      The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
!      while the 'sysv_abi' attribute tells the compiler to use the System
       V ELF ABI, which is used on GNU/Linux and other systems.  The
       default is to use the Microsoft ABI when targeting Windows.  On all
       other systems, the default is the System V ELF ABI.
  
!      Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
!      currently requires the '-maccumulate-outgoing-args' option.
  
! 'callee_pop_aggregate_return (NUMBER)'
  
       On x86-32 targets, you can use this attribute to control how
       aggregates are returned in memory.  If the caller is responsible
--- 41037,41081 ----
  
  These function attributes are supported by the x86 back end:
  
! ‘cdecl’
!      On the x86-32 targets, the ‘cdecl’ attribute causes the compiler to
       assume that the calling function pops off the stack space used to
       pass arguments.  This is useful to override the effects of the
!      ‘-mrtd’ switch.
  
! ‘fastcall’
!      On x86-32 targets, the ‘fastcall’ attribute causes the compiler to
       pass the first argument (if of integral type) in the register ECX
       and the second argument (if of integral type) in the register EDX.
       Subsequent and other typed arguments are passed on the stack.  The
       called function pops the arguments off the stack.  If the number of
       arguments is variable all arguments are pushed on the stack.
  
! ‘thiscall’
!      On x86-32 targets, the ‘thiscall’ attribute causes the compiler to
       pass the first argument (if of integral type) in the register ECX.
       Subsequent and other typed arguments are passed on the stack.  The
       called function pops the arguments off the stack.  If the number of
       arguments is variable all arguments are pushed on the stack.  The
!      ‘thiscall’ attribute is intended for C++ non-static member
       functions.  As a GCC extension, this calling convention can be used
       for C functions and for static member methods.
  
! ‘ms_abi’
! ‘sysv_abi’
  
       On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
       indicate which calling convention should be used for a function.
!      The ‘ms_abi’ attribute tells the compiler to use the Microsoft ABI,
!      while the ‘sysv_abi’ attribute tells the compiler to use the System
       V ELF ABI, which is used on GNU/Linux and other systems.  The
       default is to use the Microsoft ABI when targeting Windows.  On all
       other systems, the default is the System V ELF ABI.
  
!      Note, the ‘ms_abi’ attribute for Microsoft Windows 64-bit targets
!      currently requires the ‘-maccumulate-outgoing-args’ option.
  
! ‘callee_pop_aggregate_return (NUMBER)’
  
       On x86-32 targets, you can use this attribute to control how
       aggregates are returned in memory.  If the caller is responsible
*************** These function attributes are supported
*** 41077,41101 ****
       hidden pointer.  However, on x86-32 Microsoft Windows targets, the
       compiler assumes that the caller pops the stack for hidden pointer.
  
! 'ms_hook_prologue'
  
       On 32-bit and 64-bit x86 targets, you can use this function
       attribute to make GCC generate the "hot-patching" function prologue
       used in Win32 API functions in Microsoft Windows XP Service Pack 2
       and newer.
  
! 'naked'
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      'asm' statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended 'asm' or a mixture of basic
!      'asm' and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! 'regparm (NUMBER)'
!      On x86-32 targets, the 'regparm' attribute causes the compiler to
       pass arguments number one to NUMBER if they are of integral type in
       registers EAX, EDX, and ECX instead of on the stack.  Functions
       that take a variable number of arguments continue to be passed all
--- 41087,41111 ----
       hidden pointer.  However, on x86-32 Microsoft Windows targets, the
       compiler assumes that the caller pops the stack for hidden pointer.
  
! ‘ms_hook_prologue’
  
       On 32-bit and 64-bit x86 targets, you can use this function
       attribute to make GCC generate the "hot-patching" function prologue
       used in Win32 API functions in Microsoft Windows XP Service Pack 2
       and newer.
  
! ‘naked’
       This attribute allows the compiler to construct the requisite
       function declaration, while allowing the body of the function to be
       assembly code.  The specified function will not have
       prologue/epilogue sequences generated by the compiler.  Only basic
!      ‘asm’ statements can safely be included in naked functions (*note
!      Basic Asm::).  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and C code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘regparm (NUMBER)’
!      On x86-32 targets, the ‘regparm’ attribute causes the compiler to
       pass arguments number one to NUMBER if they are of integral type in
       registers EAX, EDX, and ECX instead of on the stack.  Functions
       that take a variable number of arguments continue to be passed all
*************** These function attributes are supported
*** 41111,41169 ****
       save EAX, EDX and ECX. (Lazy binding can be disabled with the
       linker or the loader if desired, to avoid the problem.)
  
! 'sseregparm'
!      On x86-32 targets with SSE support, the 'sseregparm' attribute
       causes the compiler to pass up to 3 floating-point arguments in SSE
       registers instead of on the stack.  Functions that take a variable
       number of arguments continue to pass all of their floating-point
       arguments on the stack.
  
! 'force_align_arg_pointer'
!      On x86 targets, the 'force_align_arg_pointer' attribute may be
       applied to individual function definitions, generating an alternate
       prologue and epilogue that realigns the run-time stack if
       necessary.  This supports mixing legacy codes that run with a
       4-byte aligned stack with modern codes that keep a 16-byte stack
       for SSE compatibility.
  
! 'stdcall'
!      On x86-32 targets, the 'stdcall' attribute causes the compiler to
       assume that the called function pops off the stack space used to
       pass arguments, unless it takes a variable number of arguments.
  
! 'no_callee_saved_registers'
       Use this attribute to indicate that the specified function has no
       callee-saved registers.  That is, all registers can be used as
       scratch registers.  For example, this attribute can be used for a
       function called from the interrupt handler assembly stub which will
       preserve all registers and return from interrupt.
  
! 'no_caller_saved_registers'
       Use this attribute to indicate that the specified function has no
       caller-saved registers.  That is, all registers are callee-saved.
       For example, this attribute can be used for a function called from
       an interrupt handler.  The compiler generates proper function entry
       and exit sequences to save and restore any modified registers,
       except for the EFLAGS register.  Since GCC doesn't preserve SSE,
!      MMX nor x87 states, the GCC option '-mgeneral-regs-only' should be
!      used to compile functions with 'no_caller_saved_registers'
       attribute.
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler or an exception handler (depending on parameters
       passed to the function, explained further).  The compiler generates
       function entry and exit sequences suitable for use in an interrupt
!      handler when this attribute is present.  The 'IRET' instruction,
!      instead of the 'RET' instruction, is used to return from interrupt
       handlers.  All registers, except for the EFLAGS register which is
!      restored by the 'IRET' instruction, are preserved by the compiler.
       Since GCC doesn't preserve SSE, MMX nor x87 states, the GCC option
!      '-mgeneral-regs-only' should be used to compile interrupt and
       exception handlers.
  
       Any interruptible-without-stack-switch code must be compiled with
!      '-mno-red-zone' since interrupt handlers can and will, because of
       the hardware design, touch the red zone.
  
       An interrupt handler must be declared with a mandatory pointer
--- 41121,41179 ----
       save EAX, EDX and ECX. (Lazy binding can be disabled with the
       linker or the loader if desired, to avoid the problem.)
  
! ‘sseregparm’
!      On x86-32 targets with SSE support, the ‘sseregparm’ attribute
       causes the compiler to pass up to 3 floating-point arguments in SSE
       registers instead of on the stack.  Functions that take a variable
       number of arguments continue to pass all of their floating-point
       arguments on the stack.
  
! ‘force_align_arg_pointer’
!      On x86 targets, the ‘force_align_arg_pointer’ attribute may be
       applied to individual function definitions, generating an alternate
       prologue and epilogue that realigns the run-time stack if
       necessary.  This supports mixing legacy codes that run with a
       4-byte aligned stack with modern codes that keep a 16-byte stack
       for SSE compatibility.
  
! ‘stdcall’
!      On x86-32 targets, the ‘stdcall’ attribute causes the compiler to
       assume that the called function pops off the stack space used to
       pass arguments, unless it takes a variable number of arguments.
  
! ‘no_callee_saved_registers’
       Use this attribute to indicate that the specified function has no
       callee-saved registers.  That is, all registers can be used as
       scratch registers.  For example, this attribute can be used for a
       function called from the interrupt handler assembly stub which will
       preserve all registers and return from interrupt.
  
! ‘no_caller_saved_registers’
       Use this attribute to indicate that the specified function has no
       caller-saved registers.  That is, all registers are callee-saved.
       For example, this attribute can be used for a function called from
       an interrupt handler.  The compiler generates proper function entry
       and exit sequences to save and restore any modified registers,
       except for the EFLAGS register.  Since GCC doesn't preserve SSE,
!      MMX nor x87 states, the GCC option ‘-mgeneral-regs-only’ should be
!      used to compile functions with ‘no_caller_saved_registers’
       attribute.
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler or an exception handler (depending on parameters
       passed to the function, explained further).  The compiler generates
       function entry and exit sequences suitable for use in an interrupt
!      handler when this attribute is present.  The ‘IRET’ instruction,
!      instead of the ‘RET’ instruction, is used to return from interrupt
       handlers.  All registers, except for the EFLAGS register which is
!      restored by the ‘IRET’ instruction, are preserved by the compiler.
       Since GCC doesn't preserve SSE, MMX nor x87 states, the GCC option
!      ‘-mgeneral-regs-only’ should be used to compile interrupt and
       exception handlers.
  
       Any interruptible-without-stack-switch code must be compiled with
!      ‘-mno-red-zone’ since interrupt handlers can and will, because of
       the hardware design, touch the red zone.
  
       An interrupt handler must be declared with a mandatory pointer
*************** These function attributes are supported
*** 41177,41190 ****
            {
            }
  
!      and you must define 'struct interrupt_frame' as described in the
       processor's manual.
  
       Exception handlers differ from interrupt handlers because the
       system pushes an error code on the stack.  An exception handler
       declaration is similar to that for an interrupt handler, but with a
       different mandatory function signature.  The compiler arranges to
!      pop the error code off the stack before the 'IRET' instruction.
  
            #ifdef __x86_64__
            typedef unsigned long long int uword_t;
--- 41187,41200 ----
            {
            }
  
!      and you must define ‘struct interrupt_frame’ as described in the
       processor's manual.
  
       Exception handlers differ from interrupt handlers because the
       system pushes an error code on the stack.  An exception handler
       declaration is similar to that for an interrupt handler, but with a
       different mandatory function signature.  The compiler arranges to
!      pop the error code off the stack before the ‘IRET’ instruction.
  
            #ifdef __x86_64__
            typedef unsigned long long int uword_t;
*************** These function attributes are supported
*** 41205,41753 ****
       error code; you should use an interrupt handler in other cases.
       The system will crash if the wrong kind of handler is used.
  
! 'target (OPTIONS)'
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On the x86, the following options are allowed:
!      '3dnow'
!      'no-3dnow'
            Enable/disable the generation of the 3DNow! instructions.
  
!      '3dnowa'
!      'no-3dnowa'
            Enable/disable the generation of the enhanced 3DNow!
            instructions.
  
!      'abm'
!      'no-abm'
            Enable/disable the generation of the advanced bit
            instructions.
  
!      'adx'
!      'no-adx'
            Enable/disable the generation of the ADX instructions.
  
!      'aes'
!      'no-aes'
            Enable/disable the generation of the AES instructions.
  
!      'avx'
!      'no-avx'
            Enable/disable the generation of the AVX instructions.
  
!      'avx2'
!      'no-avx2'
            Enable/disable the generation of the AVX2 instructions.
  
!      'avx5124fmaps'
!      'no-avx5124fmaps'
            Enable/disable the generation of the AVX5124FMAPS
            instructions.
  
!      'avx5124vnniw'
!      'no-avx5124vnniw'
            Enable/disable the generation of the AVX5124VNNIW
            instructions.
  
!      'avx512bitalg'
!      'no-avx512bitalg'
            Enable/disable the generation of the AVX512BITALG
            instructions.
  
!      'avx512bw'
!      'no-avx512bw'
            Enable/disable the generation of the AVX512BW instructions.
  
!      'avx512cd'
!      'no-avx512cd'
            Enable/disable the generation of the AVX512CD instructions.
  
!      'avx512dq'
!      'no-avx512dq'
            Enable/disable the generation of the AVX512DQ instructions.
  
!      'avx512er'
!      'no-avx512er'
            Enable/disable the generation of the AVX512ER instructions.
  
!      'avx512f'
!      'no-avx512f'
            Enable/disable the generation of the AVX512F instructions.
  
!      'avx512ifma'
!      'no-avx512ifma'
            Enable/disable the generation of the AVX512IFMA instructions.
  
!      'avx512pf'
!      'no-avx512pf'
            Enable/disable the generation of the AVX512PF instructions.
  
!      'avx512vbmi'
!      'no-avx512vbmi'
            Enable/disable the generation of the AVX512VBMI instructions.
  
!      'avx512vbmi2'
!      'no-avx512vbmi2'
            Enable/disable the generation of the AVX512VBMI2 instructions.
  
!      'avx512vl'
!      'no-avx512vl'
            Enable/disable the generation of the AVX512VL instructions.
  
!      'avx512vnni'
!      'no-avx512vnni'
            Enable/disable the generation of the AVX512VNNI instructions.
  
!      'avx512vpopcntdq'
!      'no-avx512vpopcntdq'
            Enable/disable the generation of the AVX512VPOPCNTDQ
            instructions.
  
!      'bmi'
!      'no-bmi'
            Enable/disable the generation of the BMI instructions.
  
!      'bmi2'
!      'no-bmi2'
            Enable/disable the generation of the BMI2 instructions.
  
!      'cldemote'
!      'no-cldemote'
            Enable/disable the generation of the CLDEMOTE instructions.
  
!      'clflushopt'
!      'no-clflushopt'
            Enable/disable the generation of the CLFLUSHOPT instructions.
  
!      'clwb'
!      'no-clwb'
            Enable/disable the generation of the CLWB instructions.
  
!      'clzero'
!      'no-clzero'
            Enable/disable the generation of the CLZERO instructions.
  
!      'crc32'
!      'no-crc32'
            Enable/disable the generation of the CRC32 instructions.
  
!      'cx16'
!      'no-cx16'
            Enable/disable the generation of the CMPXCHG16B instructions.
  
!      'default'
            *Note Function Multiversioning::, where it is used to specify
            the default function version.
  
!      'f16c'
!      'no-f16c'
            Enable/disable the generation of the F16C instructions.
  
!      'fma'
!      'no-fma'
            Enable/disable the generation of the FMA instructions.
  
!      'fma4'
!      'no-fma4'
            Enable/disable the generation of the FMA4 instructions.
  
!      'fsgsbase'
!      'no-fsgsbase'
            Enable/disable the generation of the FSGSBASE instructions.
  
!      'fxsr'
!      'no-fxsr'
            Enable/disable the generation of the FXSR instructions.
  
!      'gfni'
!      'no-gfni'
            Enable/disable the generation of the GFNI instructions.
  
!      'hle'
!      'no-hle'
            Enable/disable the generation of the HLE instruction prefixes.
  
!      'lwp'
!      'no-lwp'
            Enable/disable the generation of the LWP instructions.
  
!      'lzcnt'
!      'no-lzcnt'
            Enable/disable the generation of the LZCNT instructions.
  
!      'mmx'
!      'no-mmx'
            Enable/disable the generation of the MMX instructions.
  
!      'movbe'
!      'no-movbe'
            Enable/disable the generation of the MOVBE instructions.
  
!      'movdir64b'
!      'no-movdir64b'
            Enable/disable the generation of the MOVDIR64B instructions.
  
!      'movdiri'
!      'no-movdiri'
            Enable/disable the generation of the MOVDIRI instructions.
  
!      'mwait'
!      'no-mwait'
            Enable/disable the generation of the MWAIT and MONITOR
            instructions.
  
!      'mwaitx'
!      'no-mwaitx'
            Enable/disable the generation of the MWAITX instructions.
  
!      'pclmul'
!      'no-pclmul'
            Enable/disable the generation of the PCLMUL instructions.
  
!      'pconfig'
!      'no-pconfig'
            Enable/disable the generation of the PCONFIG instructions.
  
!      'pku'
!      'no-pku'
            Enable/disable the generation of the PKU instructions.
  
!      'popcnt'
!      'no-popcnt'
            Enable/disable the generation of the POPCNT instruction.
  
!      'prefetchwt1'
!      'no-prefetchwt1'
            Enable/disable the generation of the PREFETCHWT1 instructions.
  
!      'prfchw'
!      'no-prfchw'
            Enable/disable the generation of the PREFETCHW instruction.
  
!      'ptwrite'
!      'no-ptwrite'
            Enable/disable the generation of the PTWRITE instructions.
  
!      'rdpid'
!      'no-rdpid'
            Enable/disable the generation of the RDPID instructions.
  
!      'rdrnd'
!      'no-rdrnd'
            Enable/disable the generation of the RDRND instructions.
  
!      'rdseed'
!      'no-rdseed'
            Enable/disable the generation of the RDSEED instructions.
  
!      'rtm'
!      'no-rtm'
            Enable/disable the generation of the RTM instructions.
  
!      'sahf'
!      'no-sahf'
            Enable/disable the generation of the SAHF instructions.
  
!      'sgx'
!      'no-sgx'
            Enable/disable the generation of the SGX instructions.
  
!      'sha'
!      'no-sha'
            Enable/disable the generation of the SHA instructions.
  
!      'shstk'
!      'no-shstk'
            Enable/disable the shadow stack built-in functions from CET.
  
!      'sse'
!      'no-sse'
            Enable/disable the generation of the SSE instructions.
  
!      'sse2'
!      'no-sse2'
            Enable/disable the generation of the SSE2 instructions.
  
!      'sse3'
!      'no-sse3'
            Enable/disable the generation of the SSE3 instructions.
  
!      'sse4'
!      'no-sse4'
            Enable/disable the generation of the SSE4 instructions (both
            SSE4.1 and SSE4.2).
  
!      'sse4.1'
!      'no-sse4.1'
            Enable/disable the generation of the SSE4.1 instructions.
  
!      'sse4.2'
!      'no-sse4.2'
            Enable/disable the generation of the SSE4.2 instructions.
  
!      'sse4a'
!      'no-sse4a'
            Enable/disable the generation of the SSE4A instructions.
  
!      'ssse3'
!      'no-ssse3'
            Enable/disable the generation of the SSSE3 instructions.
  
!      'tbm'
!      'no-tbm'
            Enable/disable the generation of the TBM instructions.
  
!      'vaes'
!      'no-vaes'
            Enable/disable the generation of the VAES instructions.
  
!      'vpclmulqdq'
!      'no-vpclmulqdq'
            Enable/disable the generation of the VPCLMULQDQ instructions.
  
!      'waitpkg'
!      'no-waitpkg'
            Enable/disable the generation of the WAITPKG instructions.
  
!      'wbnoinvd'
!      'no-wbnoinvd'
            Enable/disable the generation of the WBNOINVD instructions.
  
!      'xop'
!      'no-xop'
            Enable/disable the generation of the XOP instructions.
  
!      'xsave'
!      'no-xsave'
            Enable/disable the generation of the XSAVE instructions.
  
!      'xsavec'
!      'no-xsavec'
            Enable/disable the generation of the XSAVEC instructions.
  
!      'xsaveopt'
!      'no-xsaveopt'
            Enable/disable the generation of the XSAVEOPT instructions.
  
!      'xsaves'
!      'no-xsaves'
            Enable/disable the generation of the XSAVES instructions.
  
!      'amx-tile'
!      'no-amx-tile'
            Enable/disable the generation of the AMX-TILE instructions.
  
!      'amx-int8'
!      'no-amx-int8'
            Enable/disable the generation of the AMX-INT8 instructions.
  
!      'amx-bf16'
!      'no-amx-bf16'
            Enable/disable the generation of the AMX-BF16 instructions.
  
!      'uintr'
!      'no-uintr'
            Enable/disable the generation of the UINTR instructions.
  
!      'hreset'
!      'no-hreset'
            Enable/disable the generation of the HRESET instruction.
  
!      'kl'
!      'no-kl'
            Enable/disable the generation of the KEYLOCKER instructions.
  
!      'widekl'
!      'no-widekl'
            Enable/disable the generation of the WIDEKL instructions.
  
!      'avxvnni'
!      'no-avxvnni'
            Enable/disable the generation of the AVXVNNI instructions.
  
!      'avxifma'
!      'no-avxifma'
            Enable/disable the generation of the AVXIFMA instructions.
  
!      'avxvnniint8'
!      'no-avxvnniint8'
            Enable/disable the generation of the AVXVNNIINT8 instructions.
  
!      'avxneconvert'
!      'no-avxneconvert'
            Enable/disable the generation of the AVXNECONVERT
            instructions.
  
!      'cmpccxadd'
!      'no-cmpccxadd'
            Enable/disable the generation of the CMPccXADD instructions.
  
!      'amx-fp16'
!      'no-amx-fp16'
            Enable/disable the generation of the AMX-FP16 instructions.
  
!      'prefetchi'
!      'no-prefetchi'
            Enable/disable the generation of the PREFETCHI instructions.
  
!      'raoint'
!      'no-raoint'
            Enable/disable the generation of the RAOINT instructions.
  
!      'amx-complex'
!      'no-amx-complex'
            Enable/disable the generation of the AMX-COMPLEX instructions.
  
!      'avxvnniint16'
!      'no-avxvnniint16'
            Enable/disable the generation of the AVXVNNIINT16
            instructions.
  
!      'sm3'
!      'no-sm3'
            Enable/disable the generation of the SM3 instructions.
  
!      'sha512'
!      'no-sha512'
            Enable/disable the generation of the SHA512 instructions.
  
!      'sm4'
!      'no-sm4'
            Enable/disable the generation of the SM4 instructions.
  
!      'usermsr'
!      'no-usermsr'
            Enable/disable the generation of the USER_MSR instructions.
  
!      'apxf'
!      'no-apxf'
            Enable/disable the generation of the APX features, including
            EGPR, PUSH2POP2, NDD and PPX.
  
!      'avx10.1-256'
!      'no-avx10.1-256'
            Enable the generation of the AVX10.1 instructions with 256 bit
            support.  Disable the generation of the AVX10.1 instructions.
  
!      'avx10.1-512'
!      'no-avx10.1-512'
            Enable the generation of the AVX10.1 instructions with 512 bit
            support.  Disable the generation of the AVX10.1 instructions.
  
!      'avx10.1'
!      'no-avx10.1'
            Enable the generation of the AVX10.1 instructions with 512 bit
            support.  Disable the generation of the AVX10.1 instructions.
  
!      'cld'
!      'no-cld'
            Enable/disable the generation of the CLD before string moves.
  
!      'fancy-math-387'
!      'no-fancy-math-387'
!           Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
            instructions on the 387 floating-point unit.
  
!      'ieee-fp'
!      'no-ieee-fp'
            Enable/disable the generation of floating point that depends
            on IEEE arithmetic.
  
!      'inline-all-stringops'
!      'no-inline-all-stringops'
            Enable/disable inlining of string operations.
  
!      'inline-stringops-dynamically'
!      'no-inline-stringops-dynamically'
            Enable/disable the generation of the inline code to do small
            string operations and calling the library routines for large
            operations.
  
!      'align-stringops'
!      'no-align-stringops'
            Do/do not align destination of inlined string operations.
  
!      'recip'
!      'no-recip'
            Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
            RSQRTPS instructions followed an additional Newton-Raphson
            step instead of doing a floating-point division.
  
!      'general-regs-only'
            Generate code which uses only the general registers.
  
!      'arch=ARCH'
            Specify the architecture to generate code for in compiling the
            function.
  
!      'tune=TUNE'
            Specify the architecture to tune for in compiling the
            function.
  
!      'fpmath=FPMATH'
            Specify which floating-point unit to use.  You must specify
!           the 'target("fpmath=sse,387")' option as
!           'target("fpmath=sse+387")' because the comma would separate
            different options.
  
!      'prefer-vector-width=OPT'
!           On x86 targets, the 'prefer-vector-width' attribute informs
            the compiler to use OPT-bit vector width in instructions
            instead of the default on the selected platform.
  
            Valid OPT values are:
  
!           'none'
                 No extra limitations applied to GCC other than defined by
                 the selected platform.
  
!           '128'
                 Prefer 128-bit vector width for instructions.
  
!           '256'
                 Prefer 256-bit vector width for instructions.
  
!           '512'
                 Prefer 512-bit vector width for instructions.
  
! 'indirect_branch("CHOICE")'
!      On x86 targets, the 'indirect_branch' attribute causes the compiler
!      to convert indirect call and jump with CHOICE.  'keep' keeps
!      indirect call and jump unmodified.  'thunk' converts indirect call
!      and jump to call and return thunk.  'thunk-inline' converts
       indirect call and jump to inlined call and return thunk.
!      'thunk-extern' converts indirect call and jump to external call and
       return thunk provided in a separate object file.
  
! 'function_return("CHOICE")'
!      On x86 targets, the 'function_return' attribute causes the compiler
!      to convert function return with CHOICE.  'keep' keeps function
!      return unmodified.  'thunk' converts function return to call and
!      return thunk.  'thunk-inline' converts function return to inlined
!      call and return thunk.  'thunk-extern' converts function return to
       external call and return thunk provided in a separate object file.
  
! 'nocf_check'
!      The 'nocf_check' attribute on a function is used to inform the
       compiler that the function's prologue should not be instrumented
!      when compiled with the '-fcf-protection=branch' option.  The
       compiler assumes that the function's address is a valid target for
       a control-flow transfer.
  
!      The 'nocf_check' attribute on a type of pointer to function is used
       to inform the compiler that a call through the pointer should not
!      be instrumented when compiled with the '-fcf-protection=branch'
       option.  The compiler assumes that the function's address from the
       pointer is a valid target for a control-flow transfer.  A direct
       function call through a function name is assumed to be a safe call
       thus direct calls are not instrumented by the compiler.
  
!      The 'nocf_check' attribute is applied to an object's type.  In case
       of assignment of a function address or a function pointer to
       another pointer, the attribute is not carried over from the
       right-hand object's type; the type of left-hand object stays
!      unchanged.  The compiler checks for 'nocf_check' attribute mismatch
       and reports a warning in case of mismatch.
  
            {
--- 41215,41763 ----
       error code; you should use an interrupt handler in other cases.
       The system will crash if the wrong kind of handler is used.
  
! ‘target (OPTIONS)’
       As discussed in *note Common Function Attributes::, this attribute
       allows specification of target-specific compilation options.
  
       On the x86, the following options are allowed:
!      ‘3dnow’
!      ‘no-3dnow’
            Enable/disable the generation of the 3DNow! instructions.
  
!      ‘3dnowa’
!      ‘no-3dnowa’
            Enable/disable the generation of the enhanced 3DNow!
            instructions.
  
!      ‘abm’
!      ‘no-abm’
            Enable/disable the generation of the advanced bit
            instructions.
  
!      ‘adx’
!      ‘no-adx’
            Enable/disable the generation of the ADX instructions.
  
!      ‘aes’
!      ‘no-aes’
            Enable/disable the generation of the AES instructions.
  
!      ‘avx’
!      ‘no-avx’
            Enable/disable the generation of the AVX instructions.
  
!      ‘avx2’
!      ‘no-avx2’
            Enable/disable the generation of the AVX2 instructions.
  
!      ‘avx5124fmaps’
!      ‘no-avx5124fmaps’
            Enable/disable the generation of the AVX5124FMAPS
            instructions.
  
!      ‘avx5124vnniw’
!      ‘no-avx5124vnniw’
            Enable/disable the generation of the AVX5124VNNIW
            instructions.
  
!      ‘avx512bitalg’
!      ‘no-avx512bitalg’
            Enable/disable the generation of the AVX512BITALG
            instructions.
  
!      ‘avx512bw’
!      ‘no-avx512bw’
            Enable/disable the generation of the AVX512BW instructions.
  
!      ‘avx512cd’
!      ‘no-avx512cd’
            Enable/disable the generation of the AVX512CD instructions.
  
!      ‘avx512dq’
!      ‘no-avx512dq’
            Enable/disable the generation of the AVX512DQ instructions.
  
!      ‘avx512er’
!      ‘no-avx512er’
            Enable/disable the generation of the AVX512ER instructions.
  
!      ‘avx512f’
!      ‘no-avx512f’
            Enable/disable the generation of the AVX512F instructions.
  
!      ‘avx512ifma’
!      ‘no-avx512ifma’
            Enable/disable the generation of the AVX512IFMA instructions.
  
!      ‘avx512pf’
!      ‘no-avx512pf’
            Enable/disable the generation of the AVX512PF instructions.
  
!      ‘avx512vbmi’
!      ‘no-avx512vbmi’
            Enable/disable the generation of the AVX512VBMI instructions.
  
!      ‘avx512vbmi2’
!      ‘no-avx512vbmi2’
            Enable/disable the generation of the AVX512VBMI2 instructions.
  
!      ‘avx512vl’
!      ‘no-avx512vl’
            Enable/disable the generation of the AVX512VL instructions.
  
!      ‘avx512vnni’
!      ‘no-avx512vnni’
            Enable/disable the generation of the AVX512VNNI instructions.
  
!      ‘avx512vpopcntdq’
!      ‘no-avx512vpopcntdq’
            Enable/disable the generation of the AVX512VPOPCNTDQ
            instructions.
  
!      ‘bmi’
!      ‘no-bmi’
            Enable/disable the generation of the BMI instructions.
  
!      ‘bmi2’
!      ‘no-bmi2’
            Enable/disable the generation of the BMI2 instructions.
  
!      ‘cldemote’
!      ‘no-cldemote’
            Enable/disable the generation of the CLDEMOTE instructions.
  
!      ‘clflushopt’
!      ‘no-clflushopt’
            Enable/disable the generation of the CLFLUSHOPT instructions.
  
!      ‘clwb’
!      ‘no-clwb’
            Enable/disable the generation of the CLWB instructions.
  
!      ‘clzero’
!      ‘no-clzero’
            Enable/disable the generation of the CLZERO instructions.
  
!      ‘crc32’
!      ‘no-crc32’
            Enable/disable the generation of the CRC32 instructions.
  
!      ‘cx16’
!      ‘no-cx16’
            Enable/disable the generation of the CMPXCHG16B instructions.
  
!      ‘default’
            *Note Function Multiversioning::, where it is used to specify
            the default function version.
  
!      ‘f16c’
!      ‘no-f16c’
            Enable/disable the generation of the F16C instructions.
  
!      ‘fma’
!      ‘no-fma’
            Enable/disable the generation of the FMA instructions.
  
!      ‘fma4’
!      ‘no-fma4’
            Enable/disable the generation of the FMA4 instructions.
  
!      ‘fsgsbase’
!      ‘no-fsgsbase’
            Enable/disable the generation of the FSGSBASE instructions.
  
!      ‘fxsr’
!      ‘no-fxsr’
            Enable/disable the generation of the FXSR instructions.
  
!      ‘gfni’
!      ‘no-gfni’
            Enable/disable the generation of the GFNI instructions.
  
!      ‘hle’
!      ‘no-hle’
            Enable/disable the generation of the HLE instruction prefixes.
  
!      ‘lwp’
!      ‘no-lwp’
            Enable/disable the generation of the LWP instructions.
  
!      ‘lzcnt’
!      ‘no-lzcnt’
            Enable/disable the generation of the LZCNT instructions.
  
!      ‘mmx’
!      ‘no-mmx’
            Enable/disable the generation of the MMX instructions.
  
!      ‘movbe’
!      ‘no-movbe’
            Enable/disable the generation of the MOVBE instructions.
  
!      ‘movdir64b’
!      ‘no-movdir64b’
            Enable/disable the generation of the MOVDIR64B instructions.
  
!      ‘movdiri’
!      ‘no-movdiri’
            Enable/disable the generation of the MOVDIRI instructions.
  
!      ‘mwait’
!      ‘no-mwait’
            Enable/disable the generation of the MWAIT and MONITOR
            instructions.
  
!      ‘mwaitx’
!      ‘no-mwaitx’
            Enable/disable the generation of the MWAITX instructions.
  
!      ‘pclmul’
!      ‘no-pclmul’
            Enable/disable the generation of the PCLMUL instructions.
  
!      ‘pconfig’
!      ‘no-pconfig’
            Enable/disable the generation of the PCONFIG instructions.
  
!      ‘pku’
!      ‘no-pku’
            Enable/disable the generation of the PKU instructions.
  
!      ‘popcnt’
!      ‘no-popcnt’
            Enable/disable the generation of the POPCNT instruction.
  
!      ‘prefetchwt1’
!      ‘no-prefetchwt1’
            Enable/disable the generation of the PREFETCHWT1 instructions.
  
!      ‘prfchw’
!      ‘no-prfchw’
            Enable/disable the generation of the PREFETCHW instruction.
  
!      ‘ptwrite’
!      ‘no-ptwrite’
            Enable/disable the generation of the PTWRITE instructions.
  
!      ‘rdpid’
!      ‘no-rdpid’
            Enable/disable the generation of the RDPID instructions.
  
!      ‘rdrnd’
!      ‘no-rdrnd’
            Enable/disable the generation of the RDRND instructions.
  
!      ‘rdseed’
!      ‘no-rdseed’
            Enable/disable the generation of the RDSEED instructions.
  
!      ‘rtm’
!      ‘no-rtm’
            Enable/disable the generation of the RTM instructions.
  
!      ‘sahf’
!      ‘no-sahf’
            Enable/disable the generation of the SAHF instructions.
  
!      ‘sgx’
!      ‘no-sgx’
            Enable/disable the generation of the SGX instructions.
  
!      ‘sha’
!      ‘no-sha’
            Enable/disable the generation of the SHA instructions.
  
!      ‘shstk’
!      ‘no-shstk’
            Enable/disable the shadow stack built-in functions from CET.
  
!      ‘sse’
!      ‘no-sse’
            Enable/disable the generation of the SSE instructions.
  
!      ‘sse2’
!      ‘no-sse2’
            Enable/disable the generation of the SSE2 instructions.
  
!      ‘sse3’
!      ‘no-sse3’
            Enable/disable the generation of the SSE3 instructions.
  
!      ‘sse4’
!      ‘no-sse4’
            Enable/disable the generation of the SSE4 instructions (both
            SSE4.1 and SSE4.2).
  
!      ‘sse4.1’
!      ‘no-sse4.1’
            Enable/disable the generation of the SSE4.1 instructions.
  
!      ‘sse4.2’
!      ‘no-sse4.2’
            Enable/disable the generation of the SSE4.2 instructions.
  
!      ‘sse4a’
!      ‘no-sse4a’
            Enable/disable the generation of the SSE4A instructions.
  
!      ‘ssse3’
!      ‘no-ssse3’
            Enable/disable the generation of the SSSE3 instructions.
  
!      ‘tbm’
!      ‘no-tbm’
            Enable/disable the generation of the TBM instructions.
  
!      ‘vaes’
!      ‘no-vaes’
            Enable/disable the generation of the VAES instructions.
  
!      ‘vpclmulqdq’
!      ‘no-vpclmulqdq’
            Enable/disable the generation of the VPCLMULQDQ instructions.
  
!      ‘waitpkg’
!      ‘no-waitpkg’
            Enable/disable the generation of the WAITPKG instructions.
  
!      ‘wbnoinvd’
!      ‘no-wbnoinvd’
            Enable/disable the generation of the WBNOINVD instructions.
  
!      ‘xop’
!      ‘no-xop’
            Enable/disable the generation of the XOP instructions.
  
!      ‘xsave’
!      ‘no-xsave’
            Enable/disable the generation of the XSAVE instructions.
  
!      ‘xsavec’
!      ‘no-xsavec’
            Enable/disable the generation of the XSAVEC instructions.
  
!      ‘xsaveopt’
!      ‘no-xsaveopt’
            Enable/disable the generation of the XSAVEOPT instructions.
  
!      ‘xsaves’
!      ‘no-xsaves’
            Enable/disable the generation of the XSAVES instructions.
  
!      ‘amx-tile’
!      ‘no-amx-tile’
            Enable/disable the generation of the AMX-TILE instructions.
  
!      ‘amx-int8’
!      ‘no-amx-int8’
            Enable/disable the generation of the AMX-INT8 instructions.
  
!      ‘amx-bf16’
!      ‘no-amx-bf16’
            Enable/disable the generation of the AMX-BF16 instructions.
  
!      ‘uintr’
!      ‘no-uintr’
            Enable/disable the generation of the UINTR instructions.
  
!      ‘hreset’
!      ‘no-hreset’
            Enable/disable the generation of the HRESET instruction.
  
!      ‘kl’
!      ‘no-kl’
            Enable/disable the generation of the KEYLOCKER instructions.
  
!      ‘widekl’
!      ‘no-widekl’
            Enable/disable the generation of the WIDEKL instructions.
  
!      ‘avxvnni’
!      ‘no-avxvnni’
            Enable/disable the generation of the AVXVNNI instructions.
  
!      ‘avxifma’
!      ‘no-avxifma’
            Enable/disable the generation of the AVXIFMA instructions.
  
!      ‘avxvnniint8’
!      ‘no-avxvnniint8’
            Enable/disable the generation of the AVXVNNIINT8 instructions.
  
!      ‘avxneconvert’
!      ‘no-avxneconvert’
            Enable/disable the generation of the AVXNECONVERT
            instructions.
  
!      ‘cmpccxadd’
!      ‘no-cmpccxadd’
            Enable/disable the generation of the CMPccXADD instructions.
  
!      ‘amx-fp16’
!      ‘no-amx-fp16’
            Enable/disable the generation of the AMX-FP16 instructions.
  
!      ‘prefetchi’
!      ‘no-prefetchi’
            Enable/disable the generation of the PREFETCHI instructions.
  
!      ‘raoint’
!      ‘no-raoint’
            Enable/disable the generation of the RAOINT instructions.
  
!      ‘amx-complex’
!      ‘no-amx-complex’
            Enable/disable the generation of the AMX-COMPLEX instructions.
  
!      ‘avxvnniint16’
!      ‘no-avxvnniint16’
            Enable/disable the generation of the AVXVNNIINT16
            instructions.
  
!      ‘sm3’
!      ‘no-sm3’
            Enable/disable the generation of the SM3 instructions.
  
!      ‘sha512’
!      ‘no-sha512’
            Enable/disable the generation of the SHA512 instructions.
  
!      ‘sm4’
!      ‘no-sm4’
            Enable/disable the generation of the SM4 instructions.
  
!      ‘usermsr’
!      ‘no-usermsr’
            Enable/disable the generation of the USER_MSR instructions.
  
!      ‘apxf’
!      ‘no-apxf’
            Enable/disable the generation of the APX features, including
            EGPR, PUSH2POP2, NDD and PPX.
  
!      ‘avx10.1-256’
!      ‘no-avx10.1-256’
            Enable the generation of the AVX10.1 instructions with 256 bit
            support.  Disable the generation of the AVX10.1 instructions.
  
!      ‘avx10.1-512’
!      ‘no-avx10.1-512’
            Enable the generation of the AVX10.1 instructions with 512 bit
            support.  Disable the generation of the AVX10.1 instructions.
  
!      ‘avx10.1’
!      ‘no-avx10.1’
            Enable the generation of the AVX10.1 instructions with 512 bit
            support.  Disable the generation of the AVX10.1 instructions.
  
!      ‘cld’
!      ‘no-cld’
            Enable/disable the generation of the CLD before string moves.
  
!      ‘fancy-math-387’
!      ‘no-fancy-math-387’
!           Enable/disable the generation of the ‘sin’, ‘cos’, and ‘sqrt’
            instructions on the 387 floating-point unit.
  
!      ‘ieee-fp’
!      ‘no-ieee-fp’
            Enable/disable the generation of floating point that depends
            on IEEE arithmetic.
  
!      ‘inline-all-stringops’
!      ‘no-inline-all-stringops’
            Enable/disable inlining of string operations.
  
!      ‘inline-stringops-dynamically’
!      ‘no-inline-stringops-dynamically’
            Enable/disable the generation of the inline code to do small
            string operations and calling the library routines for large
            operations.
  
!      ‘align-stringops’
!      ‘no-align-stringops’
            Do/do not align destination of inlined string operations.
  
!      ‘recip’
!      ‘no-recip’
            Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
            RSQRTPS instructions followed an additional Newton-Raphson
            step instead of doing a floating-point division.
  
!      ‘general-regs-only’
            Generate code which uses only the general registers.
  
!      ‘arch=ARCH’
            Specify the architecture to generate code for in compiling the
            function.
  
!      ‘tune=TUNE’
            Specify the architecture to tune for in compiling the
            function.
  
!      ‘fpmath=FPMATH’
            Specify which floating-point unit to use.  You must specify
!           the ‘target("fpmath=sse,387")’ option as
!           ‘target("fpmath=sse+387")’ because the comma would separate
            different options.
  
!      ‘prefer-vector-width=OPT’
!           On x86 targets, the ‘prefer-vector-width’ attribute informs
            the compiler to use OPT-bit vector width in instructions
            instead of the default on the selected platform.
  
            Valid OPT values are:
  
!           ‘none’
                 No extra limitations applied to GCC other than defined by
                 the selected platform.
  
!           ‘128’
                 Prefer 128-bit vector width for instructions.
  
!           ‘256’
                 Prefer 256-bit vector width for instructions.
  
!           ‘512’
                 Prefer 512-bit vector width for instructions.
  
! ‘indirect_branch("CHOICE")’
!      On x86 targets, the ‘indirect_branch’ attribute causes the compiler
!      to convert indirect call and jump with CHOICE.  ‘keep’ keeps
!      indirect call and jump unmodified.  ‘thunk’ converts indirect call
!      and jump to call and return thunk.  ‘thunk-inline’ converts
       indirect call and jump to inlined call and return thunk.
!      ‘thunk-extern’ converts indirect call and jump to external call and
       return thunk provided in a separate object file.
  
! ‘function_return("CHOICE")’
!      On x86 targets, the ‘function_return’ attribute causes the compiler
!      to convert function return with CHOICE.  ‘keep’ keeps function
!      return unmodified.  ‘thunk’ converts function return to call and
!      return thunk.  ‘thunk-inline’ converts function return to inlined
!      call and return thunk.  ‘thunk-extern’ converts function return to
       external call and return thunk provided in a separate object file.
  
! ‘nocf_check’
!      The ‘nocf_check’ attribute on a function is used to inform the
       compiler that the function's prologue should not be instrumented
!      when compiled with the ‘-fcf-protection=branch’ option.  The
       compiler assumes that the function's address is a valid target for
       a control-flow transfer.
  
!      The ‘nocf_check’ attribute on a type of pointer to function is used
       to inform the compiler that a call through the pointer should not
!      be instrumented when compiled with the ‘-fcf-protection=branch’
       option.  The compiler assumes that the function's address from the
       pointer is a valid target for a control-flow transfer.  A direct
       function call through a function name is assumed to be a safe call
       thus direct calls are not instrumented by the compiler.
  
!      The ‘nocf_check’ attribute is applied to an object's type.  In case
       of assignment of a function address or a function pointer to
       another pointer, the attribute is not carried over from the
       right-hand object's type; the type of left-hand object stays
!      unchanged.  The compiler checks for ‘nocf_check’ attribute mismatch
       and reports a warning in case of mismatch.
  
            {
*************** These function attributes are supported
*** 41781,41812 ****
              return 0;
            }
  
! 'cf_check'
  
!      The 'cf_check' attribute on a function is used to inform the
       compiler that ENDBR instruction should be placed at the function
!      entry when '-fcf-protection=branch' is enabled.
  
! 'indirect_return'
  
!      The 'indirect_return' attribute can be applied to a function, as
       well as variable or type of function pointer to inform the compiler
       that the function may return via indirect branch.
  
! 'fentry_name("NAME")'
!      On x86 targets, the 'fentry_name' attribute sets the function to
       call on function entry when function instrumentation is enabled
!      with '-pg -mfentry'.  When NAME is nop then a 5 byte nop sequence
       is generated.
  
! 'fentry_section("NAME")'
!      On x86 targets, the 'fentry_section' attribute sets the name of the
       section to record function entry instrumentation calls in when
!      enabled with '-pg -mrecord-mcount'
  
! 'nodirect_extern_access'
       This attribute, attached to a global variable or function, is the
!      counterpart to option '-mno-direct-extern-access'.
  
  6.33.33.1 Inlining rules
  ........................
--- 41791,41822 ----
              return 0;
            }
  
! ‘cf_check’
  
!      The ‘cf_check’ attribute on a function is used to inform the
       compiler that ENDBR instruction should be placed at the function
!      entry when ‘-fcf-protection=branch’ is enabled.
  
! ‘indirect_return’
  
!      The ‘indirect_return’ attribute can be applied to a function, as
       well as variable or type of function pointer to inform the compiler
       that the function may return via indirect branch.
  
! ‘fentry_name("NAME")’
!      On x86 targets, the ‘fentry_name’ attribute sets the function to
       call on function entry when function instrumentation is enabled
!      with ‘-pg -mfentry’.  When NAME is nop then a 5 byte nop sequence
       is generated.
  
! ‘fentry_section("NAME")’
!      On x86 targets, the ‘fentry_section’ attribute sets the name of the
       section to record function entry instrumentation calls in when
!      enabled with ‘-pg -mrecord-mcount’
  
! ‘nodirect_extern_access’
       This attribute, attached to a global variable or function, is the
!      counterpart to option ‘-mno-direct-extern-access’.
  
  6.33.33.1 Inlining rules
  ........................
*************** These function attributes are supported
*** 41814,41826 ****
  On the x86, the inliner does not inline a function that has different
  target options than the caller, unless the callee has a subset of the
  target options of the caller.  For example a function declared with
! 'target("sse3")' can inline a function with 'target("sse2")', since
! '-msse3' implies '-msse2'.
  
!  Besides the basic rule, when a function specifies 'target("arch=ARCH")'
! or 'target("tune=TUNE")' attribute, the inlining rule will be different.
! It allows inlining of a function with default '-march=x86-64' and
! '-mtune=generic' specified, or a function that has a subset of ISA
  features and marked with always_inline.
  
  
--- 41824,41836 ----
  On the x86, the inliner does not inline a function that has different
  target options than the caller, unless the callee has a subset of the
  target options of the caller.  For example a function declared with
! ‘target("sse3")’ can inline a function with ‘target("sse2")’, since
! ‘-msse3’ implies ‘-msse2’.
  
!  Besides the basic rule, when a function specifies ‘target("arch=ARCH")’
! or ‘target("tune=TUNE")’ attribute, the inlining rule will be different.
! It allows inlining of a function with default ‘-march=x86-64’ and
! ‘-mtune=generic’ specified, or a function that has a subset of ISA
  features and marked with always_inline.
  
  
*************** File: gcc.info,  Node: Xstormy16 Functio
*** 41831,41837 ****
  
  These function attributes are supported by the Xstormy16 back end:
  
! 'interrupt'
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
--- 41841,41847 ----
  
  These function attributes are supported by the Xstormy16 back end:
  
! ‘interrupt’
       Use this attribute to indicate that the specified function is an
       interrupt handler.  The compiler generates function entry and exit
       sequences suitable for use in an interrupt handler when this
*************** for types (*note Type Attributes::).  Ot
*** 41854,41861 ****
  attributes (*note Extensions to the C++ Language: C++ Extensions.).
  
   GCC provides two different ways to specify attributes: the traditional
! GNU syntax using '__attribute__ ((...))' annotations, and the newer
! standard C and C++ syntax using '[[...]]' with the 'gnu::' prefix on
  attribute names.  Note that the exact rules for placement of attributes
  in your source code are different depending on which syntax you use.
  *Note Attribute Syntax::, for details.
--- 41864,41871 ----
  attributes (*note Extensions to the C++ Language: C++ Extensions.).
  
   GCC provides two different ways to specify attributes: the traditional
! GNU syntax using ‘__attribute__ ((...))’ annotations, and the newer
! standard C and C++ syntax using ‘[[...]]’ with the ‘gnu::’ prefix on
  attribute names.  Note that the exact rules for placement of attributes
  in your source code are different depending on which syntax you use.
  *Note Attribute Syntax::, for details.
*************** File: gcc.info,  Node: Common Variable A
*** 41887,41902 ****
  
  The following attributes are supported on most targets.
  
! 'alias ("TARGET")'
!      The 'alias' variable attribute causes the declaration to be emitted
!      as an alias for another symbol known as an "alias target".  Except
       for top-level qualifiers the alias target must have the same type
       as the alias.  For instance, the following
  
            int var_target;
            extern int __attribute__ ((alias ("var_target"))) var_alias;
  
!      defines 'var_alias' to be an alias for the 'var_target' variable.
  
       It is an error if the alias target is not defined in the same
       translation unit as the alias.
--- 41897,41912 ----
  
  The following attributes are supported on most targets.
  
! ‘alias ("TARGET")’
!      The ‘alias’ variable attribute causes the declaration to be emitted
!      as an alias for another symbol known as an “alias target”.  Except
       for top-level qualifiers the alias target must have the same type
       as the alias.  For instance, the following
  
            int var_target;
            extern int __attribute__ ((alias ("var_target"))) var_alias;
  
!      defines ‘var_alias’ to be an alias for the ‘var_target’ variable.
  
       It is an error if the alias target is not defined in the same
       translation unit as the alias.
*************** The following attributes are supported o
*** 41910,41918 ****
       This attribute requires assembler and object file support, and may
       not be available on all targets.
  
! 'aligned'
! 'aligned (ALIGNMENT)'
!      The 'aligned' attribute specifies a minimum alignment for the
       variable or structure field, measured in bytes.  When specified,
       ALIGNMENT must be an integer constant power of 2.  Specifying no
       ALIGNMENT argument implies the maximum alignment for the target,
--- 41920,41928 ----
       This attribute requires assembler and object file support, and may
       not be available on all targets.
  
! ‘aligned’
! ‘aligned (ALIGNMENT)’
!      The ‘aligned’ attribute specifies a minimum alignment for the
       variable or structure field, measured in bytes.  When specified,
       ALIGNMENT must be an integer constant power of 2.  Specifying no
       ALIGNMENT argument implies the maximum alignment for the target,
*************** The following attributes are supported o
*** 41922,41939 ****
  
            int x __attribute__ ((aligned (16))) = 0;
  
!      causes the compiler to allocate the global variable 'x' on a
       16-byte boundary.  On a 68040, this could be used in conjunction
!      with an 'asm' expression to access the 'move16' instruction which
       requires 16-byte aligned operands.
  
       You can also specify the alignment of structure fields.  For
!      example, to create a double-word aligned 'int' pair, you could
       write:
  
            struct foo { int x[2] __attribute__ ((aligned (8))); };
  
!      This is an alternative to creating a union with a 'double' member,
       which forces the union to be double-word aligned.
  
       As in the preceding examples, you can explicitly specify the
--- 41932,41949 ----
  
            int x __attribute__ ((aligned (16))) = 0;
  
!      causes the compiler to allocate the global variable ‘x’ on a
       16-byte boundary.  On a 68040, this could be used in conjunction
!      with an ‘asm’ expression to access the ‘move16’ instruction which
       requires 16-byte aligned operands.
  
       You can also specify the alignment of structure fields.  For
!      example, to create a double-word aligned ‘int’ pair, you could
       write:
  
            struct foo { int x[2] __attribute__ ((aligned (8))); };
  
!      This is an alternative to creating a union with a ‘double’ member,
       which forces the union to be double-word aligned.
  
       As in the preceding examples, you can explicitly specify the
*************** The following attributes are supported o
*** 41946,41952 ****
       supports vector operations.  The default alignment is fixed for a
       particular target ABI.
  
!      GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
       which is the largest alignment ever used for any data type on the
       target machine you are compiling for.  For example, you could
       write:
--- 41956,41962 ----
       supports vector operations.  The default alignment is fixed for a
       particular target ABI.
  
!      GCC also provides a target specific macro ‘__BIGGEST_ALIGNMENT__’,
       which is the largest alignment ever used for any data type on the
       target machine you are compiling for.  For example, you could
       write:
*************** The following attributes are supported o
*** 41954,42001 ****
            short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
  
       The compiler automatically sets the alignment for the declared
!      variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
       make copy operations more efficient, because the compiler can use
       whatever instructions copy the biggest chunks of memory when
       performing copies to or from the variables or fields that you have
!      aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
       may change depending on command-line options.
  
!      When used on a struct, or struct member, the 'aligned' attribute
       can only increase the alignment; in order to decrease it, the
!      'packed' attribute must be specified as well.  When used as part of
!      a typedef, the 'aligned' attribute can both increase and decrease
!      alignment, and specifying the 'packed' attribute generates a
       warning.
  
!      Note that the effectiveness of 'aligned' attributes for static
       variables may be limited by inherent limitations in the system
       linker and/or object file format.  On some systems, the linker is
       only able to arrange for variables to be aligned up to a certain
       maximum alignment.  (For some linkers, the maximum supported
       alignment may be very very small.)  If your linker is only able to
       align variables up to a maximum of 8-byte alignment, then
!      specifying 'aligned(16)' in an '__attribute__' still only provides
       you with 8-byte alignment.  See your linker documentation for
       further information.
  
       Stack variables are not affected by linker restrictions; GCC can
       properly align them on any target.
  
!      The 'aligned' attribute can also be used for functions (*note
       Common Function Attributes::.)
  
! 'alloc_size (POSITION)'
! 'alloc_size (POSITION-1, POSITION-2)'
!      The 'alloc_size' variable attribute may be applied to the
       declaration of a pointer to a function that returns a pointer and
       takes at least one argument of an integer type.  It indicates that
       the returned pointer points to an object whose size is given by the
       function argument at POSITION, or by the product of the arguments
       at POSITION-1 and POSITION-2.  Meaningful sizes are positive values
!      less than 'PTRDIFF_MAX'.  Other sizes are diagnosed when detected.
       GCC uses this information to improve the results of
!      '__builtin_object_size'.
  
       For instance, the following declarations
  
--- 41964,42011 ----
            short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
  
       The compiler automatically sets the alignment for the declared
!      variable or field to ‘__BIGGEST_ALIGNMENT__’.  Doing this can often
       make copy operations more efficient, because the compiler can use
       whatever instructions copy the biggest chunks of memory when
       performing copies to or from the variables or fields that you have
!      aligned this way.  Note that the value of ‘__BIGGEST_ALIGNMENT__’
       may change depending on command-line options.
  
!      When used on a struct, or struct member, the ‘aligned’ attribute
       can only increase the alignment; in order to decrease it, the
!      ‘packed’ attribute must be specified as well.  When used as part of
!      a typedef, the ‘aligned’ attribute can both increase and decrease
!      alignment, and specifying the ‘packed’ attribute generates a
       warning.
  
!      Note that the effectiveness of ‘aligned’ attributes for static
       variables may be limited by inherent limitations in the system
       linker and/or object file format.  On some systems, the linker is
       only able to arrange for variables to be aligned up to a certain
       maximum alignment.  (For some linkers, the maximum supported
       alignment may be very very small.)  If your linker is only able to
       align variables up to a maximum of 8-byte alignment, then
!      specifying ‘aligned(16)’ in an ‘__attribute__’ still only provides
       you with 8-byte alignment.  See your linker documentation for
       further information.
  
       Stack variables are not affected by linker restrictions; GCC can
       properly align them on any target.
  
!      The ‘aligned’ attribute can also be used for functions (*note
       Common Function Attributes::.)
  
! ‘alloc_size (POSITION)’
! ‘alloc_size (POSITION-1, POSITION-2)’
!      The ‘alloc_size’ variable attribute may be applied to the
       declaration of a pointer to a function that returns a pointer and
       takes at least one argument of an integer type.  It indicates that
       the returned pointer points to an object whose size is given by the
       function argument at POSITION, or by the product of the arguments
       at POSITION-1 and POSITION-2.  Meaningful sizes are positive values
!      less than ‘PTRDIFF_MAX’.  Other sizes are diagnosed when detected.
       GCC uses this information to improve the results of
!      ‘__builtin_object_size’.
  
       For instance, the following declarations
  
*************** The following attributes are supported o
*** 42004,42062 ****
            typedef __attribute__ ((alloc_size (1))) void*
              (*malloc_ptr) (size_t);
  
!      specify that 'calloc_ptr' is a pointer of a function that, like the
!      standard C function 'calloc', returns an object whose size is given
       by the product of arguments 1 and 2, and similarly, that
!      'malloc_ptr', like the standard C function 'malloc', returns an
       object whose size is given by argument 1 to the function.
  
! 'cleanup (CLEANUP_FUNCTION)'
!      The 'cleanup' attribute runs a function when the variable goes out
       of scope.  This attribute can only be applied to auto function
       scope variables; it may not be applied to parameters or variables
       with static storage duration.  The function must take one
       parameter, a pointer to a type compatible with the variable.  The
       return value of the function (if any) is ignored.
  
!      When multiple variables in the same scope have 'cleanup'
       attributes, at exit from the scope their associated cleanup
       functions are run in reverse order of definition (last defined,
       first cleanup).
  
!      If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
       the stack unwinding that happens during the processing of the
!      exception.  Note that the 'cleanup' attribute does not allow the
       exception to be caught, only to perform an action.  It is undefined
       what happens if CLEANUP_FUNCTION does not return normally.
  
! 'common'
! 'nocommon'
!      The 'common' attribute requests GCC to place a variable in "common"
!      storage.  The 'nocommon' attribute requests the opposite--to
       allocate space for it directly.
  
!      These attributes override the default chosen by the '-fno-common'
!      and '-fcommon' flags respectively.
  
! 'copy'
! 'copy (VARIABLE)'
!      The 'copy' attribute applies the set of attributes with which
       VARIABLE has been declared to the declaration of the variable to
       which the attribute is applied.  The attribute is designed for
       libraries that define aliases that are expected to specify the same
!      set of attributes as the aliased symbols.  The 'copy' attribute can
       be used with variables, functions or types.  However, the kind of
       symbol to which the attribute is applied (either varible or
       function) must match the kind of symbol to which the argument
!      refers.  The 'copy' attribute copies only syntactic and semantic
       attributes but not attributes that affect a symbol's linkage or
!      visibility such as 'alias', 'visibility', or 'weak'.  The
!      'deprecated' attribute is also not copied.  *Note Common Function
       Attributes::.  *Note Common Type Attributes::.
  
! 'deprecated'
! 'deprecated (MSG)'
!      The 'deprecated' attribute results in a warning if the variable is
       used anywhere in the source file.  This is useful when identifying
       variables that are expected to be removed in a future version of a
       program.  The warning also includes the location of the declaration
--- 42014,42072 ----
            typedef __attribute__ ((alloc_size (1))) void*
              (*malloc_ptr) (size_t);
  
!      specify that ‘calloc_ptr’ is a pointer of a function that, like the
!      standard C function ‘calloc’, returns an object whose size is given
       by the product of arguments 1 and 2, and similarly, that
!      ‘malloc_ptr’, like the standard C function ‘malloc’, returns an
       object whose size is given by argument 1 to the function.
  
! ‘cleanup (CLEANUP_FUNCTION)’
!      The ‘cleanup’ attribute runs a function when the variable goes out
       of scope.  This attribute can only be applied to auto function
       scope variables; it may not be applied to parameters or variables
       with static storage duration.  The function must take one
       parameter, a pointer to a type compatible with the variable.  The
       return value of the function (if any) is ignored.
  
!      When multiple variables in the same scope have ‘cleanup’
       attributes, at exit from the scope their associated cleanup
       functions are run in reverse order of definition (last defined,
       first cleanup).
  
!      If ‘-fexceptions’ is enabled, then CLEANUP_FUNCTION is run during
       the stack unwinding that happens during the processing of the
!      exception.  Note that the ‘cleanup’ attribute does not allow the
       exception to be caught, only to perform an action.  It is undefined
       what happens if CLEANUP_FUNCTION does not return normally.
  
! ‘common’
! ‘nocommon’
!      The ‘common’ attribute requests GCC to place a variable in "common"
!      storage.  The ‘nocommon’ attribute requests the opposite--to
       allocate space for it directly.
  
!      These attributes override the default chosen by the ‘-fno-common’
!      and ‘-fcommon’ flags respectively.
  
! ‘copy’
! ‘copy (VARIABLE)’
!      The ‘copy’ attribute applies the set of attributes with which
       VARIABLE has been declared to the declaration of the variable to
       which the attribute is applied.  The attribute is designed for
       libraries that define aliases that are expected to specify the same
!      set of attributes as the aliased symbols.  The ‘copy’ attribute can
       be used with variables, functions or types.  However, the kind of
       symbol to which the attribute is applied (either varible or
       function) must match the kind of symbol to which the argument
!      refers.  The ‘copy’ attribute copies only syntactic and semantic
       attributes but not attributes that affect a symbol's linkage or
!      visibility such as ‘alias’, ‘visibility’, or ‘weak’.  The
!      ‘deprecated’ attribute is also not copied.  *Note Common Function
       Attributes::.  *Note Common Type Attributes::.
  
! ‘deprecated’
! ‘deprecated (MSG)’
!      The ‘deprecated’ attribute results in a warning if the variable is
       used anywhere in the source file.  This is useful when identifying
       variables that are expected to be removed in a future version of a
       program.  The warning also includes the location of the declaration
*************** The following attributes are supported o
*** 42072,42128 ****
       argument, which must be a string, is printed in the warning if
       present.
  
!      The 'deprecated' attribute can also be used for functions and types
       (*note Common Function Attributes::, *note Common Type
       Attributes::).
  
       The message attached to the attribute is affected by the setting of
!      the '-fmessage-length' option.
  
! 'mode (MODE)'
       This attribute specifies the data type for the
       declaration--whichever type corresponds to the mode MODE.  This in
       effect lets you request an integer or floating-point type according
       to its width.
  
       *Note (gccint)Machine Modes::, for a list of the possible keywords
!      for MODE.  You may also specify a mode of 'byte' or '__byte__' to
!      indicate the mode corresponding to a one-byte integer, 'word' or
!      '__word__' for the mode of a one-word integer, and 'pointer' or
!      '__pointer__' for the mode used to represent pointers.
  
! 'no_icf'
       This variable attribute prevents a variable from being merged with
       another equivalent variable.
  
! 'noinit'
!      Any data with the 'noinit' attribute will not be initialized by the
       C runtime startup code, or the program loader.  Not initializing
       data in this way can reduce program startup times.
  
       This attribute is specific to ELF targets and relies on the linker
!      script to place sections with the '.noinit' prefix in the right
       location.
  
! 'nonstring'
!      The 'nonstring' variable attribute specifies that an object or
!      member declaration with type array of 'char', 'signed char', or
!      'unsigned char', or pointer to such a type is intended to store
       character arrays that do not necessarily contain a terminating
!      'NUL'.  This is useful in detecting uses of such arrays or pointers
!      with functions that expect 'NUL'-terminated strings, and to avoid
       warnings when such an array or pointer is used as an argument to a
!      bounded string manipulation function such as 'strncpy'.  For
       example, without the attribute, GCC will issue a warning for the
!      'strncpy' call below because it may truncate the copy without
!      appending the terminating 'NUL' character.  Using the attribute
       makes it possible to suppress the warning.  However, when the array
!      is declared with the attribute the call to 'strlen' is diagnosed
!      because when the array doesn't contain a 'NUL'-terminated string
       the call is undefined.  To copy, compare, of search non-string
!      character arrays use the 'memcpy', 'memcmp', 'memchr', and other
       functions that operate on arrays of bytes.  In addition, calling
!      'strnlen' and 'strndup' with such arrays is safe provided a
       suitable bound is specified, and not diagnosed.
  
            struct Data
--- 42082,42138 ----
       argument, which must be a string, is printed in the warning if
       present.
  
!      The ‘deprecated’ attribute can also be used for functions and types
       (*note Common Function Attributes::, *note Common Type
       Attributes::).
  
       The message attached to the attribute is affected by the setting of
!      the ‘-fmessage-length’ option.
  
! ‘mode (MODE)’
       This attribute specifies the data type for the
       declaration--whichever type corresponds to the mode MODE.  This in
       effect lets you request an integer or floating-point type according
       to its width.
  
       *Note (gccint)Machine Modes::, for a list of the possible keywords
!      for MODE.  You may also specify a mode of ‘byte’ or ‘__byte__’ to
!      indicate the mode corresponding to a one-byte integer, ‘word’ or
!      ‘__word__’ for the mode of a one-word integer, and ‘pointer’ or
!      ‘__pointer__’ for the mode used to represent pointers.
  
! ‘no_icf’
       This variable attribute prevents a variable from being merged with
       another equivalent variable.
  
! ‘noinit’
!      Any data with the ‘noinit’ attribute will not be initialized by the
       C runtime startup code, or the program loader.  Not initializing
       data in this way can reduce program startup times.
  
       This attribute is specific to ELF targets and relies on the linker
!      script to place sections with the ‘.noinit’ prefix in the right
       location.
  
! ‘nonstring’
!      The ‘nonstring’ variable attribute specifies that an object or
!      member declaration with type array of ‘char’, ‘signed char’, or
!      ‘unsigned char’, or pointer to such a type is intended to store
       character arrays that do not necessarily contain a terminating
!      ‘NUL’.  This is useful in detecting uses of such arrays or pointers
!      with functions that expect ‘NUL’-terminated strings, and to avoid
       warnings when such an array or pointer is used as an argument to a
!      bounded string manipulation function such as ‘strncpy’.  For
       example, without the attribute, GCC will issue a warning for the
!      ‘strncpy’ call below because it may truncate the copy without
!      appending the terminating ‘NUL’ character.  Using the attribute
       makes it possible to suppress the warning.  However, when the array
!      is declared with the attribute the call to ‘strlen’ is diagnosed
!      because when the array doesn't contain a ‘NUL’-terminated string
       the call is undefined.  To copy, compare, of search non-string
!      character arrays use the ‘memcpy’, ‘memcmp’, ‘memchr’, and other
       functions that operate on arrays of bytes.  In addition, calling
!      ‘strnlen’ and ‘strndup’ with such arrays is safe provided a
       suitable bound is specified, and not diagnosed.
  
            struct Data
*************** The following attributes are supported o
*** 42137,42176 ****
              return strlen (pd->name);   // unsafe, gets a warning
            }
  
! 'objc_nullability (NULLABILITY KIND) (Objective-C and Objective-C++ only)'
       This attribute applies to pointer variables only.  It allows
       marking the pointer with one of four possible values describing the
!      conditions under which the pointer might have a 'nil' value.  In
       most cases, the attribute is intended to be an internal
       representation for property and method nullability (specified by
       language keywords); it is not recommended to use it directly.
  
!      When NULLABILITY KIND is '"unspecified"' or '0', nothing is known
!      about the conditions in which the pointer might be 'nil'.  Making
       this state specific serves to avoid false positives in diagnostics.
  
!      When NULLABILITY KIND is '"nonnull"' or '1', the pointer has no
!      meaning if it is 'nil' and thus the compiler is free to emit
!      diagnostics if it can be determined that the value will be 'nil'.
  
!      When NULLABILITY KIND is '"nullable"' or '2', the pointer might be
!      'nil' and carry meaning as such.
  
!      When NULLABILITY KIND is '"resettable"' or '3' (used only in the
       context of property attribute lists) this describes the case in
!      which a property setter may take the value 'nil' (which perhaps
       causes the property to be reset in some manner to a default) but
!      for which the property getter will never validly return 'nil'.
  
! 'packed'
!      The 'packed' attribute specifies that a structure member should
       have the smallest possible alignment--one bit for a bit-field and
       one byte otherwise, unless a larger value is specified with the
!      'aligned' attribute.  The attribute does not apply to non-member
       objects.
  
!      For example in the structure below, the member array 'x' is packed
!      so that it immediately follows 'a' with no intervening padding:
  
            struct foo
            {
--- 42147,42186 ----
              return strlen (pd->name);   // unsafe, gets a warning
            }
  
! ‘objc_nullability (NULLABILITY KIND) (Objective-C and Objective-C++ only)’
       This attribute applies to pointer variables only.  It allows
       marking the pointer with one of four possible values describing the
!      conditions under which the pointer might have a ‘nil’ value.  In
       most cases, the attribute is intended to be an internal
       representation for property and method nullability (specified by
       language keywords); it is not recommended to use it directly.
  
!      When NULLABILITY KIND is ‘"unspecified"’ or ‘0’, nothing is known
!      about the conditions in which the pointer might be ‘nil’.  Making
       this state specific serves to avoid false positives in diagnostics.
  
!      When NULLABILITY KIND is ‘"nonnull"’ or ‘1’, the pointer has no
!      meaning if it is ‘nil’ and thus the compiler is free to emit
!      diagnostics if it can be determined that the value will be ‘nil’.
  
!      When NULLABILITY KIND is ‘"nullable"’ or ‘2’, the pointer might be
!      ‘nil’ and carry meaning as such.
  
!      When NULLABILITY KIND is ‘"resettable"’ or ‘3’ (used only in the
       context of property attribute lists) this describes the case in
!      which a property setter may take the value ‘nil’ (which perhaps
       causes the property to be reset in some manner to a default) but
!      for which the property getter will never validly return ‘nil’.
  
! ‘packed’
!      The ‘packed’ attribute specifies that a structure member should
       have the smallest possible alignment--one bit for a bit-field and
       one byte otherwise, unless a larger value is specified with the
!      ‘aligned’ attribute.  The attribute does not apply to non-member
       objects.
  
!      For example in the structure below, the member array ‘x’ is packed
!      so that it immediately follows ‘a’ with no intervening padding:
  
            struct foo
            {
*************** The following attributes are supported o
*** 42178,42206 ****
              int x[2] __attribute__ ((packed));
            };
  
!      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
!      attribute on bit-fields of type 'char'.  This has been fixed in GCC
       4.4 but the change can lead to differences in the structure layout.
!      See the documentation of '-Wpacked-bitfield-compat' for more
       information.
  
! 'persistent'
!      Any data with the 'persistent' attribute will not be initialized by
       the C runtime startup code, but will be initialized by the program
!      loader.  This enables the value of the variable to 'persist'
       between processor resets.
  
       This attribute is specific to ELF targets and relies on the linker
!      script to place the sections with the '.persistent' prefix in the
       right location.  Specifically, some type of non-volatile, writeable
       memory is required.
  
! 'section ("SECTION-NAME")'
       Normally, the compiler places the objects it generates in sections
!      like 'data' and 'bss'.  Sometimes, however, you need additional
       sections, or you need certain particular variables to appear in
       special sections, for example to map to special hardware.  The
!      'section' attribute specifies that a variable (or function) lives
       in a particular section.  For example, this small program uses
       several specific section names:
  
--- 42188,42216 ----
              int x[2] __attribute__ ((packed));
            };
  
!      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the ‘packed’
!      attribute on bit-fields of type ‘char’.  This has been fixed in GCC
       4.4 but the change can lead to differences in the structure layout.
!      See the documentation of ‘-Wpacked-bitfield-compat’ for more
       information.
  
! ‘persistent’
!      Any data with the ‘persistent’ attribute will not be initialized by
       the C runtime startup code, but will be initialized by the program
!      loader.  This enables the value of the variable to ‘persist’
       between processor resets.
  
       This attribute is specific to ELF targets and relies on the linker
!      script to place the sections with the ‘.persistent’ prefix in the
       right location.  Specifically, some type of non-volatile, writeable
       memory is required.
  
! ‘section ("SECTION-NAME")’
       Normally, the compiler places the objects it generates in sections
!      like ‘data’ and ‘bss’.  Sometimes, however, you need additional
       sections, or you need certain particular variables to appear in
       special sections, for example to map to special hardware.  The
!      ‘section’ attribute specifies that a variable (or function) lives
       in a particular section.  For example, this small program uses
       several specific section names:
  
*************** The following attributes are supported o
*** 42222,42247 ****
              init_duart (&b);
            }
  
!      Use the 'section' attribute with _global_ variables and not _local_
       variables, as shown in the example.
  
!      You may use the 'section' attribute with initialized or
       uninitialized global variables but the linker requires each object
       be defined once, with the exception that uninitialized variables
!      tentatively go in the 'common' (or 'bss') section and can be
!      multiply "defined".  Using the 'section' attribute changes what
       section the variable goes into and may cause the linker to issue an
       error if an uninitialized variable has multiple definitions.  You
!      can force a variable to be initialized with the '-fno-common' flag
!      or the 'nocommon' attribute.
  
       Some file formats do not support arbitrary sections so the
!      'section' attribute is not available on all platforms.  If you need
       to map the entire contents of a module to a particular section,
       consider using the facilities of the linker instead.
  
! 'strict_flex_array (LEVEL)'
!      The 'strict_flex_array' attribute should be attached to the
       trailing array field of a structure.  It controls when to treat the
       trailing array field of a structure as a flexible array member for
       the purposes of accessing the elements of such an array.  LEVEL
--- 42232,42257 ----
              init_duart (&b);
            }
  
!      Use the ‘section’ attribute with _global_ variables and not _local_
       variables, as shown in the example.
  
!      You may use the ‘section’ attribute with initialized or
       uninitialized global variables but the linker requires each object
       be defined once, with the exception that uninitialized variables
!      tentatively go in the ‘common’ (or ‘bss’) section and can be
!      multiply "defined".  Using the ‘section’ attribute changes what
       section the variable goes into and may cause the linker to issue an
       error if an uninitialized variable has multiple definitions.  You
!      can force a variable to be initialized with the ‘-fno-common’ flag
!      or the ‘nocommon’ attribute.
  
       Some file formats do not support arbitrary sections so the
!      ‘section’ attribute is not available on all platforms.  If you need
       to map the entire contents of a module to a particular section,
       consider using the facilities of the linker instead.
  
! ‘strict_flex_array (LEVEL)’
!      The ‘strict_flex_array’ attribute should be attached to the
       trailing array field of a structure.  It controls when to treat the
       trailing array field of a structure as a flexible array member for
       the purposes of accessing the elements of such an array.  LEVEL
*************** The following attributes are supported o
*** 42250,42306 ****
       LEVEL=0 is the least strict level, all trailing arrays of
       structures are treated as flexible array members.  LEVEL=3 is the
       strictest level, only when the trailing array is declared as a
!      flexible array member per C99 standard onwards ('[]'), it is
       treated as a flexible array member.
  
       There are two more levels in between 0 and 3, which are provided to
       support older codes that use GCC zero-length array extension
!      ('[0]') or one-element array as flexible array members ('[1]').
       When LEVEL is 1, the trailing array is treated as a flexible array
!      member when it is declared as either '[]', '[0]', or '[1]'; When
       LEVEL is 2, the trailing array is treated as a flexible array
!      member when it is declared as either '[]', or '[0]'.
  
       This attribute can be used with or without the
!      '-fstrict-flex-arrays' command-line option.  When both the
       attribute and the option are present at the same time, the level of
       the strictness for the specific trailing array field is determined
       by the attribute.
  
!      The 'strict_flex_array' attribute interacts with the
!      '-Wstrict-flex-arrays' option.  *Note Warning Options::, for more
       information.
  
! 'tls_model ("TLS_MODEL")'
!      The 'tls_model' attribute sets thread-local storage model (*note
!      Thread-Local::) of a particular '__thread' variable, overriding
!      '-ftls-model=' command-line switch on a per-variable basis.  The
!      TLS_MODEL argument should be one of 'global-dynamic',
!      'local-dynamic', 'initial-exec' or 'local-exec'.
  
       Not all targets support this attribute.
  
! 'unavailable'
! 'unavailable (MSG)'
!      The 'unavailable' attribute indicates that the variable so marked
       is not available, if it is used anywhere in the source file.  It
!      behaves in the same manner as the 'deprecated' attribute except
       that the compiler will emit an error rather than a warning.
  
!      It is expected that items marked as 'deprecated' will eventually be
       withdrawn from interfaces, and then become unavailable.  This
       attribute allows for marking them appropriately.
  
!      The 'unavailable' attribute can also be used for functions and
       types (*note Common Function Attributes::, *note Common Type
       Attributes::).
  
! 'unused'
       This attribute, attached to a variable or structure field, means
       that the variable or field is meant to be possibly unused.  GCC
       does not produce a warning for this variable or field.
  
! 'used'
       This attribute, attached to a variable with static storage, means
       that the variable must be emitted even if it appears that the
       variable is not referenced.
--- 42260,42316 ----
       LEVEL=0 is the least strict level, all trailing arrays of
       structures are treated as flexible array members.  LEVEL=3 is the
       strictest level, only when the trailing array is declared as a
!      flexible array member per C99 standard onwards (‘[]’), it is
       treated as a flexible array member.
  
       There are two more levels in between 0 and 3, which are provided to
       support older codes that use GCC zero-length array extension
!      (‘[0]’) or one-element array as flexible array members (‘[1]’).
       When LEVEL is 1, the trailing array is treated as a flexible array
!      member when it is declared as either ‘[]’, ‘[0]’, or ‘[1]’; When
       LEVEL is 2, the trailing array is treated as a flexible array
!      member when it is declared as either ‘[]’, or ‘[0]’.
  
       This attribute can be used with or without the
!      ‘-fstrict-flex-arrays’ command-line option.  When both the
       attribute and the option are present at the same time, the level of
       the strictness for the specific trailing array field is determined
       by the attribute.
  
!      The ‘strict_flex_array’ attribute interacts with the
!      ‘-Wstrict-flex-arrays’ option.  *Note Warning Options::, for more
       information.
  
! ‘tls_model ("TLS_MODEL")’
!      The ‘tls_model’ attribute sets thread-local storage model (*note
!      Thread-Local::) of a particular ‘__thread’ variable, overriding
!      ‘-ftls-model=’ command-line switch on a per-variable basis.  The
!      TLS_MODEL argument should be one of ‘global-dynamic’,
!      ‘local-dynamic’, ‘initial-exec’ or ‘local-exec’.
  
       Not all targets support this attribute.
  
! ‘unavailable’
! ‘unavailable (MSG)’
!      The ‘unavailable’ attribute indicates that the variable so marked
       is not available, if it is used anywhere in the source file.  It
!      behaves in the same manner as the ‘deprecated’ attribute except
       that the compiler will emit an error rather than a warning.
  
!      It is expected that items marked as ‘deprecated’ will eventually be
       withdrawn from interfaces, and then become unavailable.  This
       attribute allows for marking them appropriately.
  
!      The ‘unavailable’ attribute can also be used for functions and
       types (*note Common Function Attributes::, *note Common Type
       Attributes::).
  
! ‘unused’
       This attribute, attached to a variable or structure field, means
       that the variable or field is meant to be possibly unused.  GCC
       does not produce a warning for this variable or field.
  
! ‘used’
       This attribute, attached to a variable with static storage, means
       that the variable must be emitted even if it appears that the
       variable is not referenced.
*************** The following attributes are supported o
*** 42309,42330 ****
       attribute also means that the member is instantiated if the class
       itself is instantiated.
  
! 'retain'
       For ELF targets that support the GNU or FreeBSD OSABIs, this
       attribute will save the variable from linker garbage collection.
       To support this behavior, variables that have not been placed in
!      specific sections (e.g.  by the 'section' attribute, or the
!      '-fdata-sections' option), will be placed in new, unique sections.
  
       This additional functionality requires Binutils version 2.36 or
       later.
  
! 'uninitialized'
       This attribute, attached to a variable with automatic storage,
       means that the variable should not be automatically initialized by
!      the compiler when the option '-ftrivial-auto-var-init' presents.
  
!      With the option '-ftrivial-auto-var-init', all the automatic
       variables that do not have explicit initializers will be
       initialized by the compiler.  These additional compiler
       initializations might incur run-time overhead, sometimes
--- 42319,42340 ----
       attribute also means that the member is instantiated if the class
       itself is instantiated.
  
! ‘retain’
       For ELF targets that support the GNU or FreeBSD OSABIs, this
       attribute will save the variable from linker garbage collection.
       To support this behavior, variables that have not been placed in
!      specific sections (e.g.  by the ‘section’ attribute, or the
!      ‘-fdata-sections’ option), will be placed in new, unique sections.
  
       This additional functionality requires Binutils version 2.36 or
       later.
  
! ‘uninitialized’
       This attribute, attached to a variable with automatic storage,
       means that the variable should not be automatically initialized by
!      the compiler when the option ‘-ftrivial-auto-var-init’ presents.
  
!      With the option ‘-ftrivial-auto-var-init’, all the automatic
       variables that do not have explicit initializers will be
       initialized by the compiler.  These additional compiler
       initializations might incur run-time overhead, sometimes
*************** The following attributes are supported o
*** 42333,42353 ****
       runtime overhead.
  
       This attribute has no effect when the option
!      '-ftrivial-auto-var-init' is not present.
  
! 'vector_size (BYTES)'
       This attribute specifies the vector size for the type of the
       declared variable, measured in bytes.  The type to which it applies
!      is known as the "base type".  The BYTES argument must be a positive
       power-of-two multiple of the base type size.  For example, the
       declaration:
  
            int foo __attribute__ ((vector_size (16)));
  
!      causes the compiler to set the mode for 'foo', to be 16 bytes,
!      divided into 'int' sized units.  Assuming a 32-bit 'int', 'foo''s
       type is a vector of four units of four bytes each, and the
!      corresponding mode of 'foo' is 'V4SI'.  *Note Vector Extensions::,
       for details of manipulating vector variables.
  
       This attribute is only applicable to integral and floating scalars,
--- 42343,42363 ----
       runtime overhead.
  
       This attribute has no effect when the option
!      ‘-ftrivial-auto-var-init’ is not present.
  
! ‘vector_size (BYTES)’
       This attribute specifies the vector size for the type of the
       declared variable, measured in bytes.  The type to which it applies
!      is known as the “base type”.  The BYTES argument must be a positive
       power-of-two multiple of the base type size.  For example, the
       declaration:
  
            int foo __attribute__ ((vector_size (16)));
  
!      causes the compiler to set the mode for ‘foo’, to be 16 bytes,
!      divided into ‘int’ sized units.  Assuming a 32-bit ‘int’, ‘foo’'s
       type is a vector of four units of four bytes each, and the
!      corresponding mode of ‘foo’ is ‘V4SI’.  *Note Vector Extensions::,
       for details of manipulating vector variables.
  
       This attribute is only applicable to integral and floating scalars,
*************** The following attributes are supported o
*** 42361,42374 ****
            struct S  __attribute__ ((vector_size (16))) foo;
  
       is invalid even if the size of the structure is the same as the
!      size of the 'int'.
  
! 'visibility ("VISIBILITY_TYPE")'
       This attribute affects the linkage of the declaration to which it
!      is attached.  The 'visibility' attribute is described in *note
       Common Function Attributes::.
  
! 'warn_if_not_aligned (ALIGNMENT)'
       This attribute specifies a threshold for the structure field,
       measured in bytes.  If the structure field is aligned below the
       threshold, a warning will be issued.  For example, the declaration:
--- 42371,42384 ----
            struct S  __attribute__ ((vector_size (16))) foo;
  
       is invalid even if the size of the structure is the same as the
!      size of the ‘int’.
  
! ‘visibility ("VISIBILITY_TYPE")’
       This attribute affects the linkage of the declaration to which it
!      is attached.  The ‘visibility’ attribute is described in *note
       Common Function Attributes::.
  
! ‘warn_if_not_aligned (ALIGNMENT)’
       This attribute specifies a threshold for the structure field,
       measured in bytes.  If the structure field is aligned below the
       threshold, a warning will be issued.  For example, the declaration:
*************** The following attributes are supported o
*** 42380,42389 ****
              unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
            };
  
!      causes the compiler to issue an warning on 'struct foo', like
!      'warning: alignment 8 of 'struct foo' is less than 16'.  The
!      compiler also issues a warning, like 'warning: 'x' offset 8 in
!      'struct foo' isn't aligned to 16', when the structure field has the
       misaligned offset:
  
            struct __attribute__ ((aligned (16))) foo
--- 42390,42399 ----
              unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
            };
  
!      causes the compiler to issue an warning on ‘struct foo’, like
!      ‘warning: alignment 8 of 'struct foo' is less than 16’.  The
!      compiler also issues a warning, like ‘warning: 'x' offset 8 in
!      'struct foo' isn't aligned to 16’, when the structure field has the
       misaligned offset:
  
            struct __attribute__ ((aligned (16))) foo
*************** The following attributes are supported o
*** 42393,42404 ****
              unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
            };
  
!      This warning can be disabled by '-Wno-if-not-aligned'.  The
!      'warn_if_not_aligned' attribute can also be used for types (*note
       Common Type Attributes::.)
  
! 'weak'
!      The 'weak' attribute is described in *note Common Function
       Attributes::.
  
  
--- 42403,42414 ----
              unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
            };
  
!      This warning can be disabled by ‘-Wno-if-not-aligned’.  The
!      ‘warn_if_not_aligned’ attribute can also be used for types (*note
       Common Type Attributes::.)
  
! ‘weak’
!      The ‘weak’ attribute is described in *note Common Function
       Attributes::.
  
  
*************** File: gcc.info,  Node: ARC Variable Attr
*** 42407,42414 ****
  6.34.2 ARC Variable Attributes
  ------------------------------
  
! 'aux'
!      The 'aux' attribute is used to directly access the ARC's auxiliary
       register space from C. The auxilirary register number is given via
       attribute argument.
  
--- 42417,42424 ----
  6.34.2 ARC Variable Attributes
  ------------------------------
  
! ‘aux’
!      The ‘aux’ attribute is used to directly access the ARC's auxiliary
       register space from C. The auxilirary register number is given via
       attribute argument.
  
*************** File: gcc.info,  Node: AVR Variable Attr
*** 42418,42436 ****
  6.34.3 AVR Variable Attributes
  ------------------------------
  
! 'progmem'
!      The 'progmem' attribute is used on the AVR to place read-only data
!      in the non-volatile program memory (flash).  The 'progmem'
       attribute accomplishes this by putting respective variables into a
!      section whose name starts with '.progmem'.
  
!      This attribute works similar to the 'section' attribute but adds
       additional checking.
  
!      * Ordinary AVR cores with 32 general purpose registers:
!           'progmem' affects the location of the data but not how this
            data is accessed.  In order to read data located with the
!           'progmem' attribute (inline) assembler must be used.
                 /* Use custom macros from AVR-LibC */
                 #include <avr/pgmspace.h>
  
--- 42428,42446 ----
  6.34.3 AVR Variable Attributes
  ------------------------------
  
! ‘progmem’
!      The ‘progmem’ attribute is used on the AVR to place read-only data
!      in the non-volatile program memory (flash).  The ‘progmem’
       attribute accomplishes this by putting respective variables into a
!      section whose name starts with ‘.progmem’.
  
!      This attribute works similar to the ‘section’ attribute but adds
       additional checking.
  
!      • Ordinary AVR cores with 32 general purpose registers:
!           ‘progmem’ affects the location of the data but not how this
            data is accessed.  In order to read data located with the
!           ‘progmem’ attribute (inline) assembler must be used.
                 /* Use custom macros from AVR-LibC */
                 #include <avr/pgmspace.h>
  
*************** File: gcc.info,  Node: AVR Variable Attr
*** 42449,42475 ****
            See also the *note AVR Named Address Spaces:: section for an
            alternate way to locate and access data in flash memory.
  
!      * AVR cores with flash memory visible in the RAM address range:
!           On such devices, there is no need for attribute 'progmem' or
!           *note '__flash': AVR Named Address Spaces. qualifier at all.
!           Just use standard C / C++.  The compiler will generate 'LD*'
            instructions.  As flash memory is visible in the RAM address
            range, and the default linker script does _not_ locate
!           '.rodata' in RAM, no special features are needed in order not
            to waste RAM for read-only data or to read from flash.  You
            might even get slightly better performance by avoiding
!           'progmem' and '__flash'.  This applies to devices from
!           families 'avrtiny' and 'avrxmega3', see *note AVR Options::
            for an overview.
  
!      * Reduced AVR Tiny cores like ATtiny40:
!           The compiler adds '0x4000' to the addresses of objects and
!           declarations in 'progmem' and locates the objects in flash
!           memory, namely in section '.progmem.data'.  The offset is
            needed because the flash memory is visible in the RAM address
!           space starting at address '0x4000'.
  
!           Data in 'progmem' can be accessed by means of ordinary C code,
            no special functions or macros are needed.
  
                 /* var is located in flash memory */
--- 42459,42485 ----
            See also the *note AVR Named Address Spaces:: section for an
            alternate way to locate and access data in flash memory.
  
!      • AVR cores with flash memory visible in the RAM address range:
!           On such devices, there is no need for attribute ‘progmem’ or
!           *note ‘__flash’: AVR Named Address Spaces. qualifier at all.
!           Just use standard C / C++.  The compiler will generate ‘LD*’
            instructions.  As flash memory is visible in the RAM address
            range, and the default linker script does _not_ locate
!           ‘.rodata’ in RAM, no special features are needed in order not
            to waste RAM for read-only data or to read from flash.  You
            might even get slightly better performance by avoiding
!           ‘progmem’ and ‘__flash’.  This applies to devices from
!           families ‘avrtiny’ and ‘avrxmega3’, see *note AVR Options::
            for an overview.
  
!      • Reduced AVR Tiny cores like ATtiny40:
!           The compiler adds ‘0x4000’ to the addresses of objects and
!           declarations in ‘progmem’ and locates the objects in flash
!           memory, namely in section ‘.progmem.data’.  The offset is
            needed because the flash memory is visible in the RAM address
!           space starting at address ‘0x4000’.
  
!           Data in ‘progmem’ can be accessed by means of ordinary C code,
            no special functions or macros are needed.
  
                 /* var is located in flash memory */
*************** File: gcc.info,  Node: AVR Variable Attr
*** 42481,42491 ****
                 }
  
            Please notice that on these devices, there is no need for
!           'progmem' at all.
  
! 'io'
! 'io (ADDR)'
!      Variables with the 'io' attribute are used to address memory-mapped
       peripherals in the I/O address range.  No memory is allocated.  If
       an address is specified, the variable is assigned that address, and
       the value is interpreted as an address in the data address space.
--- 42491,42501 ----
                 }
  
            Please notice that on these devices, there is no need for
!           ‘progmem’ at all.
  
! ‘io’
! ‘io (ADDR)’
!      Variables with the ‘io’ attribute are used to address memory-mapped
       peripherals in the I/O address range.  No memory is allocated.  If
       an address is specified, the variable is assigned that address, and
       the value is interpreted as an address in the data address space.
*************** File: gcc.info,  Node: AVR Variable Attr
*** 42494,42548 ****
            volatile int porta __attribute__((io (__AVR_SFR_OFFSET__ + 0x2)));
  
       Otherwise, the variable is not assigned an address, but the
!      compiler will still use 'in' and 'out' instructions where
       applicable, assuming some other module assigns an address in the
       I/O address range.  Example:
  
            extern volatile int porta __attribute__((io));
  
! 'io_low'
! 'io_low (ADDR)'
!      This is like the 'io' attribute, but additionally it informs the
       compiler that the object lies in the lower half of the I/O area,
!      allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.
  
! 'address (ADDR)'
!      Variables with the 'address' attribute can be used to address
       memory-mapped peripherals that may lie outside the I/O address
!      range.  Just like with the 'io' and 'io_low' attributes, no memory
       is allocated.
  
            volatile int porta __attribute__((address (0x600)));
  
       This attribute can also be used to define symbols in C/C++ code
       which otherwise would require assembly, a linker description file
!      or command line options like '-Wl,--defsym,a_symbol=VALUE'.  For
       example,
            int a_symbol __attribute__((weak, address (1234)));
       will be compiled to
            .weak a_symbol
            a_symbol = 1234
  
! 'absdata'
!      Variables in static storage and with the 'absdata' attribute can be
!      accessed by the 'LDS' and 'STS' instructions which take absolute
       addresses.
  
!         * This attribute is only supported for the reduced AVR Tiny core
            like ATtiny40.
  
!         * You must make sure that respective data is located in the
!           address range '0x40'...'0xbf' accessible by 'LDS' and 'STS'.
            One way to achieve this as an appropriate linker description
            file.
  
!         * If the location does not fit the address range of 'LDS' and
!           'STS', there is currently (Binutils 2.26) just an unspecific
            warning like
!                'module.cc:(.text+0x1c): warning: internal error: out of
!                range error'
  
!      See also the '-mabsdata' *note command-line option: AVR Options.
  
  
  File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
--- 42504,42558 ----
            volatile int porta __attribute__((io (__AVR_SFR_OFFSET__ + 0x2)));
  
       Otherwise, the variable is not assigned an address, but the
!      compiler will still use ‘in’ and ‘out’ instructions where
       applicable, assuming some other module assigns an address in the
       I/O address range.  Example:
  
            extern volatile int porta __attribute__((io));
  
! ‘io_low’
! ‘io_low (ADDR)’
!      This is like the ‘io’ attribute, but additionally it informs the
       compiler that the object lies in the lower half of the I/O area,
!      allowing the use of ‘cbi’, ‘sbi’, ‘sbic’ and ‘sbis’ instructions.
  
! ‘address (ADDR)’
!      Variables with the ‘address’ attribute can be used to address
       memory-mapped peripherals that may lie outside the I/O address
!      range.  Just like with the ‘io’ and ‘io_low’ attributes, no memory
       is allocated.
  
            volatile int porta __attribute__((address (0x600)));
  
       This attribute can also be used to define symbols in C/C++ code
       which otherwise would require assembly, a linker description file
!      or command line options like ‘-Wl,--defsym,a_symbol=VALUE’.  For
       example,
            int a_symbol __attribute__((weak, address (1234)));
       will be compiled to
            .weak a_symbol
            a_symbol = 1234
  
! ‘absdata’
!      Variables in static storage and with the ‘absdata’ attribute can be
!      accessed by the ‘LDS’ and ‘STS’ instructions which take absolute
       addresses.
  
!         • This attribute is only supported for the reduced AVR Tiny core
            like ATtiny40.
  
!         • You must make sure that respective data is located in the
!           address range ‘0x40’...‘0xbf’ accessible by ‘LDS’ and ‘STS’.
            One way to achieve this as an appropriate linker description
            file.
  
!         • If the location does not fit the address range of ‘LDS’ and
!           ‘STS’, there is currently (Binutils 2.26) just an unspecific
            warning like
!                ‘module.cc:(.text+0x1c): warning: internal error: out of
!                range error’
  
!      See also the ‘-mabsdata’ *note command-line option: AVR Options.
  
  
  File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
*************** File: gcc.info,  Node: Blackfin Variable
*** 42552,42571 ****
  
  Three attributes are currently defined for the Blackfin.
  
! 'l1_data'
! 'l1_data_A'
! 'l1_data_B'
       Use these attributes on the Blackfin to place the variable into L1
!      Data SRAM. Variables with 'l1_data' attribute are put into the
!      specific section named '.l1.data'.  Those with 'l1_data_A'
!      attribute are put into the specific section named '.l1.data.A'.
!      Those with 'l1_data_B' attribute are put into the specific section
!      named '.l1.data.B'.
  
! 'l2'
       Use this attribute on the Blackfin to place the variable into L2
!      SRAM. Variables with 'l2' attribute are put into the specific
!      section named '.l2.data'.
  
  
  File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
--- 42562,42581 ----
  
  Three attributes are currently defined for the Blackfin.
  
! ‘l1_data’
! ‘l1_data_A’
! ‘l1_data_B’
       Use these attributes on the Blackfin to place the variable into L1
!      Data SRAM. Variables with ‘l1_data’ attribute are put into the
!      specific section named ‘.l1.data’.  Those with ‘l1_data_A’
!      attribute are put into the specific section named ‘.l1.data.A’.
!      Those with ‘l1_data_B’ attribute are put into the specific section
!      named ‘.l1.data.B’.
  
! ‘l2’
       Use this attribute on the Blackfin to place the variable into L2
!      SRAM. Variables with ‘l2’ attribute are put into the specific
!      section named ‘.l2.data’.
  
  
  File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
*************** File: gcc.info,  Node: H8/300 Variable A
*** 42575,42581 ****
  
  These variable attributes are available for H8/300 targets:
  
! 'eightbit_data'
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       the specified variable should be placed into the eight-bit data
       section.  The compiler generates more efficient code for certain
--- 42585,42591 ----
  
  These variable attributes are available for H8/300 targets:
  
! ‘eightbit_data’
       Use this attribute on the H8/300, H8/300H, and H8S to indicate that
       the specified variable should be placed into the eight-bit data
       section.  The compiler generates more efficient code for certain
*************** These variable attributes are available
*** 42585,42591 ****
       You must use GAS and GLD from GNU binutils version 2.7 or later for
       this attribute to work correctly.
  
! 'tiny_data'
       Use this attribute on the H8/300H and H8S to indicate that the
       specified variable should be placed into the tiny data section.
       The compiler generates more efficient code for loads and stores on
--- 42595,42601 ----
       You must use GAS and GLD from GNU binutils version 2.7 or later for
       this attribute to work correctly.
  
! ‘tiny_data’
       Use this attribute on the H8/300H and H8S to indicate that the
       specified variable should be placed into the tiny data section.
       The compiler generates more efficient code for loads and stores on
*************** File: gcc.info,  Node: IA-64 Variable At
*** 42600,42611 ****
  
  The IA-64 back end supports the following variable attribute:
  
! 'model (MODEL-NAME)'
  
       On IA-64, use this attribute to set the addressability of an
       object.  At present, the only supported identifier for MODEL-NAME
!      is 'small', indicating addressability via "small" (22-bit)
!      addresses (so that their addresses can be loaded with the 'addl'
       instruction).  Caveat: such addressing is by definition not
       position independent and hence this attribute must not be used for
       objects defined by shared libraries.
--- 42610,42621 ----
  
  The IA-64 back end supports the following variable attribute:
  
! ‘model (MODEL-NAME)’
  
       On IA-64, use this attribute to set the addressability of an
       object.  At present, the only supported identifier for MODEL-NAME
!      is ‘small’, indicating addressability via "small" (22-bit)
!      addresses (so that their addresses can be loaded with the ‘addl’
       instruction).  Caveat: such addressing is by definition not
       position independent and hence this attribute must not be used for
       objects defined by shared libraries.
*************** File: gcc.info,  Node: LoongArch Variabl
*** 42618,42630 ****
  
  One attribute is currently defined for the LoongArch.
  
! 'model("NAME")'
       Use this attribute on the LoongArch to use a different code model
       for addressing this variable, than the code model specified by the
!      global '-mcmodel' option.  This attribute is mostly useful if a
!      'section' attribute and/or a linker script will locate this object
       specially.  Currently the only supported values of NAME are
!      'normal' and 'extreme'.
  
  
  File: gcc.info,  Node: M32R/D Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: LoongArch Variable Attributes,  Up: Variable Attributes
--- 42628,42640 ----
  
  One attribute is currently defined for the LoongArch.
  
! ‘model("NAME")’
       Use this attribute on the LoongArch to use a different code model
       for addressing this variable, than the code model specified by the
!      global ‘-mcmodel’ option.  This attribute is mostly useful if a
!      ‘section’ attribute and/or a linker script will locate this object
       specially.  Currently the only supported values of NAME are
!      ‘normal’ and ‘extreme’.
  
  
  File: gcc.info,  Node: M32R/D Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: LoongArch Variable Attributes,  Up: Variable Attributes
*************** File: gcc.info,  Node: M32R/D Variable A
*** 42634,42649 ****
  
  One attribute is currently defined for the M32R/D.
  
! 'model (MODEL-NAME)'
       Use this attribute on the M32R/D to set the addressability of an
!      object.  The identifier MODEL-NAME is one of 'small', 'medium', or
!      'large', representing each of the code models.
  
       Small model objects live in the lower 16MB of memory (so that their
!      addresses can be loaded with the 'ld24' instruction).
  
       Medium and large model objects may live anywhere in the 32-bit
!      address space (the compiler generates 'seth/add3' instructions to
       load their addresses).
  
  
--- 42644,42659 ----
  
  One attribute is currently defined for the M32R/D.
  
! ‘model (MODEL-NAME)’
       Use this attribute on the M32R/D to set the addressability of an
!      object.  The identifier MODEL-NAME is one of ‘small’, ‘medium’, or
!      ‘large’, representing each of the code models.
  
       Small model objects live in the lower 16MB of memory (so that their
!      addresses can be loaded with the ‘ld24’ instruction).
  
       Medium and large model objects may live anywhere in the 32-bit
!      address space (the compiler generates ‘seth/add3’ instructions to
       load their addresses).
  
  
*************** You can use these attributes on Microsof
*** 42656,42668 ****
  Variable Attributes:: for additional Windows compatibility attributes
  available on all x86 targets.
  
! 'dllimport'
! 'dllexport'
!      The 'dllimport' and 'dllexport' attributes are described in *note
       Microsoft Windows Function Attributes::.
  
! 'selectany'
!      The 'selectany' attribute causes an initialized global variable to
       have link-once semantics.  When multiple definitions of the
       variable are encountered by the linker, the first is selected and
       the remainder are discarded.  Following usage by the Microsoft
--- 42666,42678 ----
  Variable Attributes:: for additional Windows compatibility attributes
  available on all x86 targets.
  
! ‘dllimport’
! ‘dllexport’
!      The ‘dllimport’ and ‘dllexport’ attributes are described in *note
       Microsoft Windows Function Attributes::.
  
! ‘selectany’
!      The ‘selectany’ attribute causes an initialized global variable to
       have link-once semantics.  When multiple definitions of the
       variable are encountered by the linker, the first is selected and
       the remainder are discarded.  Following usage by the Microsoft
*************** available on all x86 targets.
*** 42677,42693 ****
       constructor and destructor are protected by a link-once guard
       variable.
  
!      The 'selectany' attribute is only available on Microsoft Windows
!      targets.  You can use '__declspec (selectany)' as a synonym for
!      '__attribute__ ((selectany))' for compatibility with other
       compilers.
  
! 'shared'
       On Microsoft Windows, in addition to putting variable definitions
       in a named section, the section can also be shared among all
       running copies of an executable or DLL.  For example, this small
       program defines shared data by putting it in a named section
!      'shared' and marking the section shareable:
  
            int foo __attribute__((section ("shared"), shared)) = 0;
  
--- 42687,42703 ----
       constructor and destructor are protected by a link-once guard
       variable.
  
!      The ‘selectany’ attribute is only available on Microsoft Windows
!      targets.  You can use ‘__declspec (selectany)’ as a synonym for
!      ‘__attribute__ ((selectany))’ for compatibility with other
       compilers.
  
! ‘shared’
       On Microsoft Windows, in addition to putting variable definitions
       in a named section, the section can also be shared among all
       running copies of an executable or DLL.  For example, this small
       program defines shared data by putting it in a named section
!      ‘shared’ and marking the section shareable:
  
            int foo __attribute__((section ("shared"), shared)) = 0;
  
*************** available on all x86 targets.
*** 42699,42709 ****
              return 0;
            }
  
!      You may only use the 'shared' attribute along with 'section'
       attribute with a fully-initialized global definition because of the
!      way linkers work.  See 'section' attribute for more information.
  
!      The 'shared' attribute is only available on Microsoft Windows.
  
  
  File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
--- 42709,42719 ----
              return 0;
            }
  
!      You may only use the ‘shared’ attribute along with ‘section’
       attribute with a fully-initialized global definition because of the
!      way linkers work.  See ‘section’ attribute for more information.
  
!      The ‘shared’ attribute is only available on Microsoft Windows.
  
  
  File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
*************** File: gcc.info,  Node: MSP430 Variable A
*** 42711,42737 ****
  6.34.10 MSP430 Variable Attributes
  ----------------------------------
  
! 'upper'
! 'either'
       These attributes are the same as the MSP430 function attributes of
       the same name (*note MSP430 Function Attributes::).
  
! 'lower'
       This option behaves mostly the same as the MSP430 function
       attribute of the same name (*note MSP430 Function Attributes::),
       but it has some additional functionality.
  
!      If '-mdata-region='{'upper,either,none'} has been passed, or the
!      'section' attribute is applied to a variable, the compiler will
       generate 430X instructions to handle it.  This is because the
       compiler has to assume that the variable could get placed in the
       upper memory region (above address 0xFFFF). Marking the variable
!      with the 'lower' attribute informs the compiler that the variable
       will be placed in lower memory so it is safe to use 430
       instructions to handle it.
  
!      In the case of the 'section' attribute, the section name given will
!      be used, and the '.lower' prefix will not be added.
  
  
  File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
--- 42721,42747 ----
  6.34.10 MSP430 Variable Attributes
  ----------------------------------
  
! ‘upper’
! ‘either’
       These attributes are the same as the MSP430 function attributes of
       the same name (*note MSP430 Function Attributes::).
  
! ‘lower’
       This option behaves mostly the same as the MSP430 function
       attribute of the same name (*note MSP430 Function Attributes::),
       but it has some additional functionality.
  
!      If ‘-mdata-region=’{‘upper,either,none’} has been passed, or the
!      ‘section’ attribute is applied to a variable, the compiler will
       generate 430X instructions to handle it.  This is because the
       compiler has to assume that the variable could get placed in the
       upper memory region (above address 0xFFFF). Marking the variable
!      with the ‘lower’ attribute informs the compiler that the variable
       will be placed in lower memory so it is safe to use 430
       instructions to handle it.
  
!      In the case of the ‘section’ attribute, the section name given will
!      be used, and the ‘.lower’ prefix will not be added.
  
  
  File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
*************** File: gcc.info,  Node: Nvidia PTX Variab
*** 42741,42748 ****
  
  These variable attributes are supported by the Nvidia PTX back end:
  
! 'shared'
!      Use this attribute to place a variable in the '.shared' memory
       space.  This memory space is private to each cooperative thread
       array; only threads within one thread block refer to the same
       instance of the variable.  The runtime does not initialize
--- 42751,42758 ----
  
  These variable attributes are supported by the Nvidia PTX back end:
  
! ‘shared’
!      Use this attribute to place a variable in the ‘.shared’ memory
       space.  This memory space is private to each cooperative thread
       array; only threads within one thread block refer to the same
       instance of the variable.  The runtime does not initialize
*************** File: gcc.info,  Node: PowerPC Variable
*** 42755,42766 ****
  -----------------------------------
  
  Three attributes currently are defined for PowerPC configurations:
! 'altivec', 'ms_struct' and 'gcc_struct'.
  
   For full documentation of the struct attributes please see the
  documentation in *note x86 Variable Attributes::.
  
!  For documentation of 'altivec' attribute please see the documentation
  in *note PowerPC Type Attributes::.
  
  
--- 42765,42776 ----
  -----------------------------------
  
  Three attributes currently are defined for PowerPC configurations:
! ‘altivec’, ‘ms_struct’ and ‘gcc_struct’.
  
   For full documentation of the struct attributes please see the
  documentation in *note x86 Variable Attributes::.
  
!  For documentation of ‘altivec’ attribute please see the documentation
  in *note PowerPC Type Attributes::.
  
  
*************** File: gcc.info,  Node: RL78 Variable Att
*** 42769,42775 ****
  6.34.13 RL78 Variable Attributes
  --------------------------------
  
! The RL78 back end supports the 'saddr' variable attribute.  This
  specifies placement of the corresponding variable in the SADDR area,
  which can be accessed more efficiently than the default memory region.
  
--- 42779,42785 ----
  6.34.13 RL78 Variable Attributes
  --------------------------------
  
! The RL78 back end supports the ‘saddr’ variable attribute.  This
  specifies placement of the corresponding variable in the SADDR area,
  which can be accessed more efficiently than the default memory region.
  
*************** File: gcc.info,  Node: V850 Variable Att
*** 42781,42795 ****
  
  These variable attributes are supported by the V850 back end:
  
! 'sda'
       Use this attribute to explicitly place a variable in the small data
       area, which can hold up to 64 kilobytes.
  
! 'tda'
       Use this attribute to explicitly place a variable in the tiny data
       area, which can hold up to 256 bytes in total.
  
! 'zda'
       Use this attribute to explicitly place a variable in the first 32
       kilobytes of memory.
  
--- 42791,42805 ----
  
  These variable attributes are supported by the V850 back end:
  
! ‘sda’
       Use this attribute to explicitly place a variable in the small data
       area, which can hold up to 64 kilobytes.
  
! ‘tda’
       Use this attribute to explicitly place a variable in the tiny data
       area, which can hold up to 256 bytes in total.
  
! ‘zda’
       Use this attribute to explicitly place a variable in the first 32
       kilobytes of memory.
  
*************** File: gcc.info,  Node: x86 Variable Attr
*** 42799,42819 ****
  6.34.15 x86 Variable Attributes
  -------------------------------
  
! Two attributes are currently defined for x86 configurations: 'ms_struct'
! and 'gcc_struct'.
  
! 'ms_struct'
! 'gcc_struct'
  
!      If 'packed' is used on a structure, or if bit-fields are used, it
       may be that the Microsoft ABI lays out the structure differently
       than the way GCC normally does.  Particularly when moving packed
       data between functions compiled with GCC and the native Microsoft
       compiler (either via function call or as data in a file), it may be
       necessary to access either format.
  
!      The 'ms_struct' and 'gcc_struct' attributes correspond to the
!      '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
       respectively; see *note x86 Options::, for details of how structure
       layout is affected.  *Note x86 Type Attributes::, for information
       about the corresponding attributes on types.
--- 42809,42829 ----
  6.34.15 x86 Variable Attributes
  -------------------------------
  
! Two attributes are currently defined for x86 configurations: ‘ms_struct’
! and ‘gcc_struct’.
  
! ‘ms_struct’
! ‘gcc_struct’
  
!      If ‘packed’ is used on a structure, or if bit-fields are used, it
       may be that the Microsoft ABI lays out the structure differently
       than the way GCC normally does.  Particularly when moving packed
       data between functions compiled with GCC and the native Microsoft
       compiler (either via function call or as data in a file), it may be
       necessary to access either format.
  
!      The ‘ms_struct’ and ‘gcc_struct’ attributes correspond to the
!      ‘-mms-bitfields’ and ‘-mno-ms-bitfields’ command-line options,
       respectively; see *note x86 Options::, for details of how structure
       layout is affected.  *Note x86 Type Attributes::, for information
       about the corresponding attributes on types.
*************** File: gcc.info,  Node: Xstormy16 Variabl
*** 42825,42838 ****
  -------------------------------------
  
  One attribute is currently defined for xstormy16 configurations:
! 'below100'.
  
! 'below100'
  
!      If a variable has the 'below100' attribute ('BELOW100' is allowed
       also), GCC places the variable in the first 0x100 bytes of memory
       and use special opcodes to access it.  Such variables are placed in
!      either the '.bss_below100' section or the '.data_below100' section.
  
  
  File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
--- 42835,42848 ----
  -------------------------------------
  
  One attribute is currently defined for xstormy16 configurations:
! ‘below100’.
  
! ‘below100’
  
!      If a variable has the ‘below100’ attribute (‘BELOW100’ is allowed
       also), GCC places the variable in the first 0x100 bytes of memory
       and use special opcodes to access it.  Such variables are placed in
!      either the ‘.bss_below100’ section or the ‘.data_below100’ section.
  
  
  File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
*************** File: gcc.info,  Node: Type Attributes,
*** 42843,42849 ****
  You can use attributes to specify various special properties of types.
  Some type attributes apply only to structure and union types, and in
  C++, also class types, while others can apply to any type defined via a
! 'typedef' declaration.  Unless otherwise specified, the same
  restrictions and effects apply to attributes regardless of whether a
  type is a trivial structure or a C++ class with user-defined
  constructors, destructors, or a copy assignment.
--- 42853,42859 ----
  You can use attributes to specify various special properties of types.
  Some type attributes apply only to structure and union types, and in
  C++, also class types, while others can apply to any type defined via a
! ‘typedef’ declaration.  Unless otherwise specified, the same
  restrictions and effects apply to attributes regardless of whether a
  type is a trivial structure or a C++ class with user-defined
  constructors, destructors, or a copy assignment.
*************** Enumerator Attributes::), statements (*n
*** 42854,42871 ****
  for variables (*note Variable Attributes::).
  
   GCC provides two different ways to specify attributes: the traditional
! GNU syntax using '__attribute__ ((...))' annotations, and the newer
! standard C and C++ syntax using '[[...]]' with the 'gnu::' prefix on
  attribute names.  Note that the exact rules for placement of attributes
  in your source code are different depending on which syntax you use.
  *Note Attribute Syntax::, for details.
  
   You may specify type attributes in an enum, struct or union type
  declaration or definition by placing them immediately after the
! 'struct', 'union' or 'enum' keyword.  You can also place them just past
  the closing curly brace of the definition, but this is less preferred
  because logically the type should be fully defined at the closing brace.
! You can also include type attributes in a 'typedef' declaration.
  
  * Menu:
  
--- 42864,42881 ----
  for variables (*note Variable Attributes::).
  
   GCC provides two different ways to specify attributes: the traditional
! GNU syntax using ‘__attribute__ ((...))’ annotations, and the newer
! standard C and C++ syntax using ‘[[...]]’ with the ‘gnu::’ prefix on
  attribute names.  Note that the exact rules for placement of attributes
  in your source code are different depending on which syntax you use.
  *Note Attribute Syntax::, for details.
  
   You may specify type attributes in an enum, struct or union type
  declaration or definition by placing them immediately after the
! ‘struct’, ‘union’ or ‘enum’ keyword.  You can also place them just past
  the closing curly brace of the definition, but this is less preferred
  because logically the type should be fully defined at the closing brace.
! You can also include type attributes in a ‘typedef’ declaration.
  
  * Menu:
  
*************** File: gcc.info,  Node: Common Type Attri
*** 42884,42892 ****
  
  The following type attributes are supported on most targets.
  
! 'aligned'
! 'aligned (ALIGNMENT)'
!      The 'aligned' attribute specifies a minimum alignment (in bytes)
       for variables of the specified type.  When specified, ALIGNMENT
       must be a power of 2.  Specifying no ALIGNMENT argument implies the
       maximum alignment for the target, which is often, but by no means
--- 42894,42902 ----
  
  The following type attributes are supported on most targets.
  
! ‘aligned’
! ‘aligned (ALIGNMENT)’
!      The ‘aligned’ attribute specifies a minimum alignment (in bytes)
       for variables of the specified type.  When specified, ALIGNMENT
       must be a power of 2.  Specifying no ALIGNMENT argument implies the
       maximum alignment for the target, which is often, but by no means
*************** The following type attributes are suppor
*** 42896,42928 ****
            typedef int more_aligned_int __attribute__ ((aligned (8)));
  
       force the compiler to ensure (as far as it can) that each variable
!      whose type is 'struct S' or 'more_aligned_int' is allocated and
       aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
!      variables of type 'struct S' aligned to 8-byte boundaries allows
!      the compiler to use the 'ldd' and 'std' (doubleword load and store)
!      instructions when copying one variable of type 'struct S' to
       another, thus improving run-time efficiency.
  
!      Note that the alignment of any given 'struct' or 'union' type is
       required by the ISO C standard to be at least a perfect multiple of
       the lowest common multiple of the alignments of all of the members
!      of the 'struct' or 'union' in question.  This means that you _can_
!      effectively adjust the alignment of a 'struct' or 'union' type by
!      attaching an 'aligned' attribute to any one of the members of such
       a type, but the notation illustrated in the example above is a more
       obvious, intuitive, and readable way to request the compiler to
!      adjust the alignment of an entire 'struct' or 'union' type.
  
       As in the preceding example, you can explicitly specify the
       alignment (in bytes) that you wish the compiler to use for a given
!      'struct' or 'union' type.  Alternatively, you can leave out the
       alignment factor and just ask the compiler to align a type to the
       maximum useful alignment for the target machine you are compiling
       for.  For example, you could write:
  
            struct __attribute__ ((aligned)) S { short f[3]; };
  
!      Whenever you leave out the alignment factor in an 'aligned'
       attribute specification, the compiler automatically sets the
       alignment for the type to the largest alignment that is ever used
       for any data type on the target machine you are compiling for.
--- 42906,42938 ----
            typedef int more_aligned_int __attribute__ ((aligned (8)));
  
       force the compiler to ensure (as far as it can) that each variable
!      whose type is ‘struct S’ or ‘more_aligned_int’ is allocated and
       aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
!      variables of type ‘struct S’ aligned to 8-byte boundaries allows
!      the compiler to use the ‘ldd’ and ‘std’ (doubleword load and store)
!      instructions when copying one variable of type ‘struct S’ to
       another, thus improving run-time efficiency.
  
!      Note that the alignment of any given ‘struct’ or ‘union’ type is
       required by the ISO C standard to be at least a perfect multiple of
       the lowest common multiple of the alignments of all of the members
!      of the ‘struct’ or ‘union’ in question.  This means that you _can_
!      effectively adjust the alignment of a ‘struct’ or ‘union’ type by
!      attaching an ‘aligned’ attribute to any one of the members of such
       a type, but the notation illustrated in the example above is a more
       obvious, intuitive, and readable way to request the compiler to
!      adjust the alignment of an entire ‘struct’ or ‘union’ type.
  
       As in the preceding example, you can explicitly specify the
       alignment (in bytes) that you wish the compiler to use for a given
!      ‘struct’ or ‘union’ type.  Alternatively, you can leave out the
       alignment factor and just ask the compiler to align a type to the
       maximum useful alignment for the target machine you are compiling
       for.  For example, you could write:
  
            struct __attribute__ ((aligned)) S { short f[3]; };
  
!      Whenever you leave out the alignment factor in an ‘aligned’
       attribute specification, the compiler automatically sets the
       alignment for the type to the largest alignment that is ever used
       for any data type on the target machine you are compiling for.
*************** The following type attributes are suppor
*** 42931,42940 ****
       of memory when performing copies to or from the variables that have
       types that you have aligned this way.
  
!      In the example above, if the size of each 'short' is 2 bytes, then
!      the size of the entire 'struct S' type is 6 bytes.  The smallest
       power of two that is greater than or equal to that is 8, so the
!      compiler sets the alignment for the entire 'struct S' type to 8
       bytes.
  
       Note that although you can ask the compiler to select a
--- 42941,42950 ----
       of memory when performing copies to or from the variables that have
       types that you have aligned this way.
  
!      In the example above, if the size of each ‘short’ is 2 bytes, then
!      the size of the entire ‘struct S’ type is 6 bytes.  The smallest
       power of two that is greater than or equal to that is 8, so the
!      compiler sets the alignment for the entire ‘struct S’ type to 8
       bytes.
  
       Note that although you can ask the compiler to select a
*************** The following type attributes are suppor
*** 42950,42983 ****
       operations is often more efficient for efficiently-aligned types
       than for other types.
  
!      Note that the effectiveness of 'aligned' attributes may be limited
       by inherent limitations in your linker.  On many systems, the
       linker is only able to arrange for variables to be aligned up to a
       certain maximum alignment.  (For some linkers, the maximum
       supported alignment may be very very small.)  If your linker is
       only able to align variables up to a maximum of 8-byte alignment,
!      then specifying 'aligned (16)' in an '__attribute__' still only
       provides you with 8-byte alignment.  See your linker documentation
       for further information.
  
!      When used on a struct, or struct member, the 'aligned' attribute
       can only increase the alignment; in order to decrease it, the
!      'packed' attribute must be specified as well.  When used as part of
!      a typedef, the 'aligned' attribute can both increase and decrease
!      alignment, and specifying the 'packed' attribute generates a
       warning.
  
! 'alloc_size (POSITION)'
! 'alloc_size (POSITION-1, POSITION-2)'
!      The 'alloc_size' type attribute may be applied to the definition of
       a type of a function that returns a pointer and takes at least one
       argument of an integer type.  It indicates that the returned
       pointer points to an object whose size is given by the function
       argument at POSITION-1, or by the product of the arguments at
       POSITION-1 and POSITION-2.  Meaningful sizes are positive values
!      less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
       GCC uses this information to improve the results of
!      '__builtin_object_size'.
  
       For instance, the following declarations
  
--- 42960,42993 ----
       operations is often more efficient for efficiently-aligned types
       than for other types.
  
!      Note that the effectiveness of ‘aligned’ attributes may be limited
       by inherent limitations in your linker.  On many systems, the
       linker is only able to arrange for variables to be aligned up to a
       certain maximum alignment.  (For some linkers, the maximum
       supported alignment may be very very small.)  If your linker is
       only able to align variables up to a maximum of 8-byte alignment,
!      then specifying ‘aligned (16)’ in an ‘__attribute__’ still only
       provides you with 8-byte alignment.  See your linker documentation
       for further information.
  
!      When used on a struct, or struct member, the ‘aligned’ attribute
       can only increase the alignment; in order to decrease it, the
!      ‘packed’ attribute must be specified as well.  When used as part of
!      a typedef, the ‘aligned’ attribute can both increase and decrease
!      alignment, and specifying the ‘packed’ attribute generates a
       warning.
  
! ‘alloc_size (POSITION)’
! ‘alloc_size (POSITION-1, POSITION-2)’
!      The ‘alloc_size’ type attribute may be applied to the definition of
       a type of a function that returns a pointer and takes at least one
       argument of an integer type.  It indicates that the returned
       pointer points to an object whose size is given by the function
       argument at POSITION-1, or by the product of the arguments at
       POSITION-1 and POSITION-2.  Meaningful sizes are positive values
!      less than ‘PTRDIFF_MAX’.  Other sizes are disagnosed when detected.
       GCC uses this information to improve the results of
!      ‘__builtin_object_size’.
  
       For instance, the following declarations
  
*************** The following type attributes are suppor
*** 42986,43028 ****
            typedef __attribute__ ((alloc_size (1))) void*
              malloc_type (size_t);
  
!      specify that 'calloc_type' is a type of a function that, like the
!      standard C function 'calloc', returns an object whose size is given
!      by the product of arguments 1 and 2, and that 'malloc_type', like
!      the standard C function 'malloc', returns an object whose size is
       given by argument 1 to the function.
  
! 'copy'
! 'copy (EXPRESSION)'
!      The 'copy' attribute applies the set of attributes with which the
       type of the EXPRESSION has been declared to the declaration of the
       type to which the attribute is applied.  The attribute is designed
       for libraries that define aliases that are expected to specify the
!      same set of attributes as the aliased symbols.  The 'copy'
       attribute can be used with types, variables, or functions.
       However, the kind of symbol to which the attribute is applied
       (either varible or function) must match the kind of symbol to which
!      the argument refers.  The 'copy' attribute copies only syntactic
       and semantic attributes but not attributes that affect a symbol's
!      linkage or visibility such as 'alias', 'visibility', or 'weak'.
!      The 'deprecated' attribute is also not copied.  *Note Common
       Function Attributes::.  *Note Common Variable Attributes::.
  
!      For example, suppose 'struct A' below is defined in some third
!      party library header to have the alignment requirement 'N' and to
       force a warning whenever a variable of the type is not so aligned
!      due to attribute 'packed'.  Specifying the 'copy' attribute on the
!      definition on the unrelated 'struct B' has the effect of copying
       all relevant attributes from the type referenced by the pointer
!      expression to 'struct B'.
  
            struct __attribute__ ((aligned (N), warn_if_not_aligned (N)))
            A { /* ... */ };
            struct __attribute__ ((copy ( (struct A *)0)) B { /* ... */ };
  
! 'deprecated'
! 'deprecated (MSG)'
!      The 'deprecated' attribute results in a warning if the type is used
       anywhere in the source file.  This is useful when identifying types
       that are expected to be removed in a future version of a program.
       If possible, the warning also includes the location of the
--- 42996,43038 ----
            typedef __attribute__ ((alloc_size (1))) void*
              malloc_type (size_t);
  
!      specify that ‘calloc_type’ is a type of a function that, like the
!      standard C function ‘calloc’, returns an object whose size is given
!      by the product of arguments 1 and 2, and that ‘malloc_type’, like
!      the standard C function ‘malloc’, returns an object whose size is
       given by argument 1 to the function.
  
! ‘copy’
! ‘copy (EXPRESSION)’
!      The ‘copy’ attribute applies the set of attributes with which the
       type of the EXPRESSION has been declared to the declaration of the
       type to which the attribute is applied.  The attribute is designed
       for libraries that define aliases that are expected to specify the
!      same set of attributes as the aliased symbols.  The ‘copy’
       attribute can be used with types, variables, or functions.
       However, the kind of symbol to which the attribute is applied
       (either varible or function) must match the kind of symbol to which
!      the argument refers.  The ‘copy’ attribute copies only syntactic
       and semantic attributes but not attributes that affect a symbol's
!      linkage or visibility such as ‘alias’, ‘visibility’, or ‘weak’.
!      The ‘deprecated’ attribute is also not copied.  *Note Common
       Function Attributes::.  *Note Common Variable Attributes::.
  
!      For example, suppose ‘struct A’ below is defined in some third
!      party library header to have the alignment requirement ‘N’ and to
       force a warning whenever a variable of the type is not so aligned
!      due to attribute ‘packed’.  Specifying the ‘copy’ attribute on the
!      definition on the unrelated ‘struct B’ has the effect of copying
       all relevant attributes from the type referenced by the pointer
!      expression to ‘struct B’.
  
            struct __attribute__ ((aligned (N), warn_if_not_aligned (N)))
            A { /* ... */ };
            struct __attribute__ ((copy ( (struct A *)0)) B { /* ... */ };
  
! ‘deprecated’
! ‘deprecated (MSG)’
!      The ‘deprecated’ attribute results in a warning if the type is used
       anywhere in the source file.  This is useful when identifying types
       that are expected to be removed in a future version of a program.
       If possible, the warning also includes the location of the
*************** The following type attributes are suppor
*** 43045,43061 ****
       deprecated.  Similarly for line 6.  The optional MSG argument,
       which must be a string, is printed in the warning if present.
       Control characters in the string will be replaced with escape
!      sequences, and if the '-fmessage-length' option is set to 0 (its
       default value) then any newline characters will be ignored.
  
!      The 'deprecated' attribute can also be used for functions and
       variables (*note Function Attributes::, *note Variable
       Attributes::.)
  
       The message attached to the attribute is affected by the setting of
!      the '-fmessage-length' option.
  
! 'designated_init'
       This attribute may only be applied to structure types.  It
       indicates that any initialization of an object of this type must
       use designated initializers rather than positional initializers.
--- 43055,43071 ----
       deprecated.  Similarly for line 6.  The optional MSG argument,
       which must be a string, is printed in the warning if present.
       Control characters in the string will be replaced with escape
!      sequences, and if the ‘-fmessage-length’ option is set to 0 (its
       default value) then any newline characters will be ignored.
  
!      The ‘deprecated’ attribute can also be used for functions and
       variables (*note Function Attributes::, *note Variable
       Attributes::.)
  
       The message attached to the attribute is affected by the setting of
!      the ‘-fmessage-length’ option.
  
! ‘designated_init’
       This attribute may only be applied to structure types.  It
       indicates that any initialization of an object of this type must
       use designated initializers rather than positional initializers.
*************** The following type attributes are suppor
*** 43064,43080 ****
       positional initialization will result in future breakage.
  
       GCC emits warnings based on this attribute by default; use
!      '-Wno-designated-init' to suppress them.
  
! 'hardbool'
! 'hardbool (FALSE_VALUE)'
! 'hardbool (FALSE_VALUE, TRUE_VALUE)'
       This attribute may only be applied to integral types in C, to
       introduce hardened boolean types.  It turns the integral type into
       a boolean-like type with the same size and precision, that uses the
!      specified values as representations for 'false' and 'true'.
       Underneath, it is actually an enumerated type, but its observable
!      behavior is like that of '_Bool', except for the strict internal
       representations, verified by runtime checks.
  
       If TRUE_VALUE is omitted, the bitwise negation of FALSE_VALUE is
--- 43074,43090 ----
       positional initialization will result in future breakage.
  
       GCC emits warnings based on this attribute by default; use
!      ‘-Wno-designated-init’ to suppress them.
  
! ‘hardbool’
! ‘hardbool (FALSE_VALUE)’
! ‘hardbool (FALSE_VALUE, TRUE_VALUE)’
       This attribute may only be applied to integral types in C, to
       introduce hardened boolean types.  It turns the integral type into
       a boolean-like type with the same size and precision, that uses the
!      specified values as representations for ‘false’ and ‘true’.
       Underneath, it is actually an enumerated type, but its observable
!      behavior is like that of ‘_Bool’, except for the strict internal
       representations, verified by runtime checks.
  
       If TRUE_VALUE is omitted, the bitwise negation of FALSE_VALUE is
*************** The following type attributes are suppor
*** 43083,43098 ****
       original integral type.  Narrower bitfields are rejected if the
       representations become indistinguishable.
  
!      Values of such types automatically decay to '_Bool', at which
       point, the selected representation values are mapped to the
!      corresponding '_Bool' values.  When the represented value is not
       determined, at compile time, to be either FALSE_VALUE or
!      TRUE_VALUE, runtime verification calls '__builtin_trap' if it is
       neither.  This is what makes them hardened boolean types.
  
       When converting scalar types to such hardened boolean types,
       implicitly or explicitly, behavior corresponds to a conversion to
!      '_Bool', followed by a mapping from 'false' and 'true' to
       FALSE_VALUE and TRUE_VALUE, respectively.
  
            typedef char __attribute__ ((__hardbool__ (0x5a))) hbool;
--- 43093,43108 ----
       original integral type.  Narrower bitfields are rejected if the
       representations become indistinguishable.
  
!      Values of such types automatically decay to ‘_Bool’, at which
       point, the selected representation values are mapped to the
!      corresponding ‘_Bool’ values.  When the represented value is not
       determined, at compile time, to be either FALSE_VALUE or
!      TRUE_VALUE, runtime verification calls ‘__builtin_trap’ if it is
       neither.  This is what makes them hardened boolean types.
  
       When converting scalar types to such hardened boolean types,
       implicitly or explicitly, behavior corresponds to a conversion to
!      ‘_Bool’, followed by a mapping from ‘false’ and ‘true’ to
       FALSE_VALUE and TRUE_VALUE, respectively.
  
            typedef char __attribute__ ((__hardbool__ (0x5a))) hbool;
*************** The following type attributes are suppor
*** 43104,43112 ****
  
       When zero-initializing a variable or field of hardened boolean type
       (presumably held in static storage) the implied zero initializer
!      gets converted to '_Bool', and then to the hardened boolean type,
       so that the initial value is the hardened representation for
!      'false'.  Using that value is well defined.  This is _not_ the case
       when variables and fields of such types are uninitialized
       (presumably held in automatic or dynamic storage): their values are
       indeterminate, and using them invokes undefined behavior.  Using
--- 43114,43122 ----
  
       When zero-initializing a variable or field of hardened boolean type
       (presumably held in static storage) the implied zero initializer
!      gets converted to ‘_Bool’, and then to the hardened boolean type,
       so that the initial value is the hardened representation for
!      ‘false’.  Using that value is well defined.  This is _not_ the case
       when variables and fields of such types are uninitialized
       (presumably held in automatic or dynamic storage): their values are
       indeterminate, and using them invokes undefined behavior.  Using
*************** The following type attributes are suppor
*** 43115,43125 ****
       compiler may perform on the grounds that using uninitialized values
       invokes undefined behavior.
  
!      Users of '-ftrivial-auto-var-init' should be aware that the bit
!      patterns used as initializers are _not_ converted to 'hardbool'
!      types, so using a 'hardbool' variable that is implicitly
!      initialized by the '-ftrivial-auto-var-init' may trap if the
!      representations values chosen for 'false' and 'true' do not match
       the initializer.
  
       Since this is a language extension only available in C,
--- 43125,43135 ----
       compiler may perform on the grounds that using uninitialized values
       invokes undefined behavior.
  
!      Users of ‘-ftrivial-auto-var-init’ should be aware that the bit
!      patterns used as initializers are _not_ converted to ‘hardbool’
!      types, so using a ‘hardbool’ variable that is implicitly
!      initialized by the ‘-ftrivial-auto-var-init’ may trap if the
!      representations values chosen for ‘false’ and ‘true’ do not match
       the initializer.
  
       Since this is a language extension only available in C,
*************** The following type attributes are suppor
*** 43129,43141 ****
       other languages' integral types that correspond to C's chosen
       integral type.
  
! 'may_alias'
       Accesses through pointers to types with this attribute are not
       subject to type-based alias analysis, but are instead assumed to be
       able to alias any other type of objects.  In the context of section
       6.5 paragraph 7 of the C99 standard, an lvalue expression
       dereferencing such a pointer is treated like having a character
!      type.  See '-fstrict-aliasing' for more information on aliasing
       issues.  This extension exists to support some vector APIs, in
       which pointers to one vector type are permitted to alias pointers
       to a different vector type.
--- 43139,43151 ----
       other languages' integral types that correspond to C's chosen
       integral type.
  
! ‘may_alias’
       Accesses through pointers to types with this attribute are not
       subject to type-based alias analysis, but are instead assumed to be
       able to alias any other type of objects.  In the context of section
       6.5 paragraph 7 of the C99 standard, an lvalue expression
       dereferencing such a pointer is treated like having a character
!      type.  See ‘-fstrict-aliasing’ for more information on aliasing
       issues.  This extension exists to support some vector APIs, in
       which pointers to one vector type are permitted to alias pointers
       to a different vector type.
*************** The following type attributes are suppor
*** 43161,43203 ****
              exit(0);
            }
  
!      If you replaced 'short_a' with 'short' in the variable declaration,
       the above program would abort when compiled with
!      '-fstrict-aliasing', which is on by default at '-O2' or above.
  
! 'mode (MODE)'
       This attribute specifies the data type for the
       declaration--whichever type corresponds to the mode MODE.  This in
       effect lets you request an integer or floating-point type according
       to its width.
  
       *Note (gccint)Machine Modes::, for a list of the possible keywords
!      for MODE.  You may also specify a mode of 'byte' or '__byte__' to
!      indicate the mode corresponding to a one-byte integer, 'word' or
!      '__word__' for the mode of a one-word integer, and 'pointer' or
!      '__pointer__' for the mode used to represent pointers.
  
! 'objc_root_class (Objective-C and Objective-C++ only)'
       This attribute marks a class as being a root class, and thus allows
       the compiler to elide any warnings about a missing superclass and
       to make additional checks for mandatory methods as needed.
  
! 'packed'
!      This attribute, attached to a 'struct', 'union', or C++ 'class'
       type definition, specifies that each of its members (other than
       zero-width bit-fields) is placed to minimize the memory required.
!      This is equivalent to specifying the 'packed' attribute on each of
       the members.
  
!      When attached to an 'enum' definition, the 'packed' attribute
       indicates that the smallest integral type should be used.
!      Specifying the '-fshort-enums' flag on the command line is
!      equivalent to specifying the 'packed' attribute on all 'enum'
       definitions.
  
!      In the following example 'struct my_packed_struct''s members are
!      packed closely together, but the internal layout of its 's' member
!      is not packed--to do that, 'struct my_unpacked_struct' needs to be
       packed too.
  
            struct my_unpacked_struct
--- 43171,43213 ----
              exit(0);
            }
  
!      If you replaced ‘short_a’ with ‘short’ in the variable declaration,
       the above program would abort when compiled with
!      ‘-fstrict-aliasing’, which is on by default at ‘-O2’ or above.
  
! ‘mode (MODE)’
       This attribute specifies the data type for the
       declaration--whichever type corresponds to the mode MODE.  This in
       effect lets you request an integer or floating-point type according
       to its width.
  
       *Note (gccint)Machine Modes::, for a list of the possible keywords
!      for MODE.  You may also specify a mode of ‘byte’ or ‘__byte__’ to
!      indicate the mode corresponding to a one-byte integer, ‘word’ or
!      ‘__word__’ for the mode of a one-word integer, and ‘pointer’ or
!      ‘__pointer__’ for the mode used to represent pointers.
  
! ‘objc_root_class (Objective-C and Objective-C++ only)’
       This attribute marks a class as being a root class, and thus allows
       the compiler to elide any warnings about a missing superclass and
       to make additional checks for mandatory methods as needed.
  
! ‘packed’
!      This attribute, attached to a ‘struct’, ‘union’, or C++ ‘class’
       type definition, specifies that each of its members (other than
       zero-width bit-fields) is placed to minimize the memory required.
!      This is equivalent to specifying the ‘packed’ attribute on each of
       the members.
  
!      When attached to an ‘enum’ definition, the ‘packed’ attribute
       indicates that the smallest integral type should be used.
!      Specifying the ‘-fshort-enums’ flag on the command line is
!      equivalent to specifying the ‘packed’ attribute on all ‘enum’
       definitions.
  
!      In the following example ‘struct my_packed_struct’'s members are
!      packed closely together, but the internal layout of its ‘s’ member
!      is not packed--to do that, ‘struct my_unpacked_struct’ needs to be
       packed too.
  
            struct my_unpacked_struct
*************** The following type attributes are suppor
*** 43213,43229 ****
                 struct my_unpacked_struct s;
              };
  
!      You may only specify the 'packed' attribute on the definition of an
!      'enum', 'struct', 'union', or 'class', not on a 'typedef' that does
       not also define the enumerated type, structure, union, or class.
  
! 'scalar_storage_order ("ENDIANNESS")'
!      When attached to a 'union' or a 'struct', this attribute sets the
       storage order, aka endianness, of the scalar fields of the type, as
       well as the array fields whose component is scalar.  The supported
!      endiannesses are 'big-endian' and 'little-endian'.  The attribute
!      has no effects on fields which are themselves a 'union', a 'struct'
!      or an array whose component is a 'union' or a 'struct', and it is
       possible for these fields to have a different scalar storage order
       than the enclosing type.
  
--- 43223,43239 ----
                 struct my_unpacked_struct s;
              };
  
!      You may only specify the ‘packed’ attribute on the definition of an
!      ‘enum’, ‘struct’, ‘union’, or ‘class’, not on a ‘typedef’ that does
       not also define the enumerated type, structure, union, or class.
  
! ‘scalar_storage_order ("ENDIANNESS")’
!      When attached to a ‘union’ or a ‘struct’, this attribute sets the
       storage order, aka endianness, of the scalar fields of the type, as
       well as the array fields whose component is scalar.  The supported
!      endiannesses are ‘big-endian’ and ‘little-endian’.  The attribute
!      has no effects on fields which are themselves a ‘union’, a ‘struct’
!      or an array whose component is a ‘union’ or a ‘struct’, and it is
       possible for these fields to have a different scalar storage order
       than the enclosing type.
  
*************** The following type attributes are suppor
*** 43240,43253 ****
       scalar storage order with regard to the scalar storage order of the
       target:
  
!         * Taking the address of a scalar field of a 'union' or a
!           'struct' with reverse scalar storage order is not permitted
            and yields an error.
!         * Taking the address of an array field, whose component is
!           scalar, of a 'union' or a 'struct' with reverse scalar storage
            order is permitted but yields a warning, unless
!           '-Wno-scalar-storage-order' is specified.
!         * Taking the address of a 'union' or a 'struct' with reverse
            scalar storage order is permitted.
  
       These restrictions exist because the storage order attribute is
--- 43250,43263 ----
       scalar storage order with regard to the scalar storage order of the
       target:
  
!         • Taking the address of a scalar field of a ‘union’ or a
!           ‘struct’ with reverse scalar storage order is not permitted
            and yields an error.
!         • Taking the address of an array field, whose component is
!           scalar, of a ‘union’ or a ‘struct’ with reverse scalar storage
            order is permitted but yields a warning, unless
!           ‘-Wno-scalar-storage-order’ is specified.
!         • Taking the address of a ‘union’ or a ‘struct’ with reverse
            scalar storage order is permitted.
  
       These restrictions exist because the storage order attribute is
*************** The following type attributes are suppor
*** 43261,43273 ****
       can be accessed through distinct types that assign a different
       storage order to it, then the behavior is undefined.
  
! 'strub'
       This attribute defines stack-scrubbing properties of functions and
       variables, so that functions that access sensitive data can have
       their stack frames zeroed-out upon returning or propagating
       exceptions.  This may be enabled explicitly, by selecting certain
!      'strub' modes for specific functions, or implicitly, by means of
!      'strub' variables.
  
       Being a type attribute, it attaches to types, even when specified
       in function and variable declarations.  When applied to function
--- 43271,43283 ----
       can be accessed through distinct types that assign a different
       storage order to it, then the behavior is undefined.
  
! ‘strub’
       This attribute defines stack-scrubbing properties of functions and
       variables, so that functions that access sensitive data can have
       their stack frames zeroed-out upon returning or propagating
       exceptions.  This may be enabled explicitly, by selecting certain
!      ‘strub’ modes for specific functions, or implicitly, by means of
!      ‘strub’ variables.
  
       Being a type attribute, it attaches to types, even when specified
       in function and variable declarations.  When applied to function
*************** The following type attributes are suppor
*** 43287,43294 ****
            /* A pointer to that strub function.  */
            int __attribute__ ((strub ("at-calls"))) (*ptr_to_strub_fn)(void) = foo;
  
!      A function associated with 'at-calls' 'strub' mode
!      ('strub("at-calls")', or just 'strub') undergoes interface changes.
       Its callers are adjusted to match the changes, and to scrub
       (overwrite with zeros) the stack space used by the called function
       after it returns.  The interface change makes the function type
--- 43297,43304 ----
            /* A pointer to that strub function.  */
            int __attribute__ ((strub ("at-calls"))) (*ptr_to_strub_fn)(void) = foo;
  
!      A function associated with ‘at-calls’ ‘strub’ mode
!      (‘strub("at-calls")’, or just ‘strub’) undergoes interface changes.
       Its callers are adjusted to match the changes, and to scrub
       (overwrite with zeros) the stack space used by the called function
       after it returns.  The interface change makes the function type
*************** The following type attributes are suppor
*** 43296,43311 ****
       _every_ declaration and every type that may be used to call the
       function must be associated with this strub mode.
  
!      A function associated with 'internal' 'strub' mode
!      ('strub("internal")') retains an unmodified, type-compatible
       interface, but it may be turned into a wrapper that calls the
       wrapped body using a custom interface.  The wrapper then scrubs the
       stack space used by the wrapped body.  Though the wrapped body has
       its stack space scrubbed, the wrapper does not, so arguments and
       return values may remain unscrubbed even when such a function is
!      called by another function that enables 'strub'.  This is why, when
!      compiling with '-fstrub=strict', a 'strub' context is not allowed
!      to call 'internal' 'strub' functions.
  
            /* A declaration of an internal-strub function.  */
            extern int __attribute__ ((strub ("internal"))) bar (void);
--- 43306,43321 ----
       _every_ declaration and every type that may be used to call the
       function must be associated with this strub mode.
  
!      A function associated with ‘internal’ ‘strub’ mode
!      (‘strub("internal")’) retains an unmodified, type-compatible
       interface, but it may be turned into a wrapper that calls the
       wrapped body using a custom interface.  The wrapper then scrubs the
       stack space used by the wrapped body.  Though the wrapped body has
       its stack space scrubbed, the wrapper does not, so arguments and
       return values may remain unscrubbed even when such a function is
!      called by another function that enables ‘strub’.  This is why, when
!      compiling with ‘-fstrub=strict’, a ‘strub’ context is not allowed
!      to call ‘internal’ ‘strub’ functions.
  
            /* A declaration of an internal-strub function.  */
            extern int __attribute__ ((strub ("internal"))) bar (void);
*************** The following type attributes are suppor
*** 43319,43340 ****
              bar ();
            }
  
!      An automatically-allocated variable associated with the 'strub'
       attribute causes the (immediately) enclosing function to have
!      'strub' enabled.
  
!      A statically-allocated variable associated with the 'strub'
!      attribute causes functions that _read_ it, through its 'strub' data
!      type, to have 'strub' enabled.  Reading data by dereferencing a
!      pointer to a 'strub' data type has the same effect.  Note: The
       attribute does not carry over from a composite type to the types of
       its components, so the intended effect may not be obtained with
       non-scalar types.
  
!      When selecting a 'strub'-enabled mode for a function that is not
!      explicitly associated with one, because of 'strub' variables or
!      data pointers, the function must satisfy 'internal' mode viability
!      requirements (see below), even when 'at-calls' mode is also viable
       and, being more efficient, ends up selected as an optimization.
  
            /* zapme is implicitly strub-enabled because of strub variables.
--- 43329,43350 ----
              bar ();
            }
  
!      An automatically-allocated variable associated with the ‘strub’
       attribute causes the (immediately) enclosing function to have
!      ‘strub’ enabled.
  
!      A statically-allocated variable associated with the ‘strub’
!      attribute causes functions that _read_ it, through its ‘strub’ data
!      type, to have ‘strub’ enabled.  Reading data by dereferencing a
!      pointer to a ‘strub’ data type has the same effect.  Note: The
       attribute does not carry over from a composite type to the types of
       its components, so the intended effect may not be obtained with
       non-scalar types.
  
!      When selecting a ‘strub’-enabled mode for a function that is not
!      explicitly associated with one, because of ‘strub’ variables or
!      data pointers, the function must satisfy ‘internal’ mode viability
!      requirements (see below), even when ‘at-calls’ mode is also viable
       and, being more efficient, ends up selected as an optimization.
  
            /* zapme is implicitly strub-enabled because of strub variables.
*************** The following type attributes are suppor
*** 43352,43374 ****
              return var;
            }
  
!      A 'strub' context is the body (as opposed to the interface) of a
!      function that has 'strub' enabled, be it explicitly, by 'at-calls'
!      or 'internal' mode, or implicitly, due to 'strub' variables or
       command-line options.
  
!      A function of a type associated with the 'disabled' 'strub' mode
!      ('strub("disabled")' will not have its own stack space scrubbed.
!      Such functions _cannot_ be called from within 'strub' contexts.
  
!      In order to enable a function to be called from within 'strub'
       contexts without having its stack space scrubbed, associate it with
!      the 'callable' 'strub' mode ('strub("callable")').
  
!      When a function is not assigned a 'strub' mode, explicitly or
!      implicitly, the mode defaults to 'callable', except when compiling
!      with '-fstrub=strict', that causes 'strub' mode to default to
!      'disabled'.
  
            extern int __attribute__ ((strub ("callable"))) bac (void);
            extern int __attribute__ ((strub ("disabled"))) bad (void);
--- 43362,43384 ----
              return var;
            }
  
!      A ‘strub’ context is the body (as opposed to the interface) of a
!      function that has ‘strub’ enabled, be it explicitly, by ‘at-calls’
!      or ‘internal’ mode, or implicitly, due to ‘strub’ variables or
       command-line options.
  
!      A function of a type associated with the ‘disabled’ ‘strub’ mode
!      (‘strub("disabled")’ will not have its own stack space scrubbed.
!      Such functions _cannot_ be called from within ‘strub’ contexts.
  
!      In order to enable a function to be called from within ‘strub’
       contexts without having its stack space scrubbed, associate it with
!      the ‘callable’ ‘strub’ mode (‘strub("callable")’).
  
!      When a function is not assigned a ‘strub’ mode, explicitly or
!      implicitly, the mode defaults to ‘callable’, except when compiling
!      with ‘-fstrub=strict’, that causes ‘strub’ mode to default to
!      ‘disabled’.
  
            extern int __attribute__ ((strub ("callable"))) bac (void);
            extern int __attribute__ ((strub ("disabled"))) bad (void);
*************** The following type attributes are suppor
*** 43386,43397 ****
              bah ();
            }
  
!      Function types marked 'callable' and 'disabled' are not mutually
       compatible types, but the underlying interfaces are compatible, so
       it is safe to convert pointers between them, and to use such
       pointers or alternate declarations to call them.  Interfaces are
!      also interchangeable between them and 'internal' (but not
!      'at-calls'!), but adding 'internal' to a pointer type will not
       cause the pointed-to function to perform stack scrubbing.
  
            void __attribute__ ((strub))
--- 43396,43407 ----
              bah ();
            }
  
!      Function types marked ‘callable’ and ‘disabled’ are not mutually
       compatible types, but the underlying interfaces are compatible, so
       it is safe to convert pointers between them, and to use such
       pointers or alternate declarations to call them.  Interfaces are
!      also interchangeable between them and ‘internal’ (but not
!      ‘at-calls’!), but adding ‘internal’ to a pointer type will not
       cause the pointed-to function to perform stack scrubbing.
  
            void __attribute__ ((strub))
*************** The following type attributes are suppor
*** 43424,43433 ****
              c_p ();
            }
  
!      'Strub' contexts are never inlined into non-'strub' contexts.  When
!      an 'internal'-strub function is split up, the wrapper can often be
       inlined, but the wrapped body _never_ is.  A function marked as
!      'always_inline', even if explicitly assigned 'internal' strub mode,
       will not undergo wrapping, so its body gets inlined as required.
  
            inline int __attribute__ ((strub ("at-calls")))
--- 43434,43443 ----
              c_p ();
            }
  
!      ‘Strub’ contexts are never inlined into non-‘strub’ contexts.  When
!      an ‘internal’-strub function is split up, the wrapper can often be
       inlined, but the wrapped body _never_ is.  A function marked as
!      ‘always_inline’, even if explicitly assigned ‘internal’ strub mode,
       will not undergo wrapping, so its body gets inlined as required.
  
            inline int __attribute__ ((strub ("at-calls")))
*************** The following type attributes are suppor
*** 43456,43463 ****
              inl_int_ali ();
            }
  
!      Some '-fstrub=*' command line options enable 'strub' modes
!      implicitly where viable.  A 'strub' mode is only viable for a
       function if the function is eligible for that mode, and if other
       conditions, detailed below, are satisfied.  If it's not eligible
       for a mode, attempts to explicitly associate it with that mode are
--- 43466,43473 ----
              inl_int_ali ();
            }
  
!      Some ‘-fstrub=*’ command line options enable ‘strub’ modes
!      implicitly where viable.  A ‘strub’ mode is only viable for a
       function if the function is eligible for that mode, and if other
       conditions, detailed below, are satisfied.  If it's not eligible
       for a mode, attempts to explicitly associate it with that mode are
*************** The following type attributes are suppor
*** 43466,43474 ****
       assignment through command-line options may involve additional
       viability requirements.
  
!      A function is ineligible for 'at-calls' 'strub' mode if a different
!      'strub' mode is explicitly requested, if attribute 'noipa' is
!      present, or if it calls '__builtin_apply_args'.  'At-calls' 'strub'
       mode, if not requested through the function type, is only viable
       for an eligible function if the function is not visible to other
       translation units, if it doesn't have its address taken, and if it
--- 43476,43484 ----
       assignment through command-line options may involve additional
       viability requirements.
  
!      A function is ineligible for ‘at-calls’ ‘strub’ mode if a different
!      ‘strub’ mode is explicitly requested, if attribute ‘noipa’ is
!      present, or if it calls ‘__builtin_apply_args’.  ‘At-calls’ ‘strub’
       mode, if not requested through the function type, is only viable
       for an eligible function if the function is not visible to other
       translation units, if it doesn't have its address taken, and if it
*************** The following type attributes are suppor
*** 43484,43498 ****
               It is eligible and viable for internal strub mode.  */
            void setp (void) { static void (*p)(void); = setp; }
  
!      A function is ineligible for 'internal' 'strub' mode if a different
!      'strub' mode is explicitly requested, or if attribute 'noipa' is
!      present.  For an 'always_inline' function, meeting these
       requirements is enough to make it eligible.  Any function that has
!      attribute 'noclone', that uses such extensions as non-local labels,
       computed gotos, alternate variable argument passing interfaces,
!      '__builtin_next_arg', or '__builtin_return_address', or that takes
       too many (about 64Ki) arguments is ineligible, unless it is
!      'always_inline'.  For 'internal' 'strub' mode, all eligible
       functions are viable.
  
            /* flop is not eligible, thus not viable, for at-calls strub mode.
--- 43494,43508 ----
               It is eligible and viable for internal strub mode.  */
            void setp (void) { static void (*p)(void); = setp; }
  
!      A function is ineligible for ‘internal’ ‘strub’ mode if a different
!      ‘strub’ mode is explicitly requested, or if attribute ‘noipa’ is
!      present.  For an ‘always_inline’ function, meeting these
       requirements is enough to make it eligible.  Any function that has
!      attribute ‘noclone’, that uses such extensions as non-local labels,
       computed gotos, alternate variable argument passing interfaces,
!      ‘__builtin_next_arg’, or ‘__builtin_return_address’, or that takes
       too many (about 64Ki) arguments is ineligible, unless it is
!      ‘always_inline’.  For ‘internal’ ‘strub’ mode, all eligible
       functions are viable.
  
            /* flop is not eligible, thus not viable, for at-calls strub mode.
*************** The following type attributes are suppor
*** 43505,43513 ****
               an obstacle, so it is also eligible and viable for internal strub mode.  */
            inline __attribute__ ((noclone, always_inline)) void flip (void) {}
  
! 'transparent_union'
  
!      This attribute, attached to a 'union' type definition, indicates
       that any function parameter having that union type causes calls to
       that function to be treated in a special way.
  
--- 43515,43523 ----
               an obstacle, so it is also eligible and viable for internal strub mode.  */
            inline __attribute__ ((noclone, always_inline)) void flip (void) {}
  
! ‘transparent_union’
  
!      This attribute, attached to a ‘union’ type definition, indicates
       that any function parameter having that union type causes calls to
       that function to be treated in a special way.
  
*************** The following type attributes are suppor
*** 43517,43523 ****
       null pointer constant or a void pointer expression; and if the
       union contains a void pointer type, the corresponding argument can
       be any pointer expression.  If the union member type is a pointer,
!      qualifiers like 'const' on the referenced type must be respected,
       just as with normal pointer conversions.
  
       Second, the argument is passed to the function using the calling
--- 43527,43533 ----
       null pointer constant or a void pointer expression; and if the
       union contains a void pointer type, the corresponding argument can
       be any pointer expression.  If the union member type is a pointer,
!      qualifiers like ‘const’ on the referenced type must be respected,
       just as with normal pointer conversions.
  
       Second, the argument is passed to the function using the calling
*************** The following type attributes are suppor
*** 43528,43539 ****
  
       Transparent unions are designed for library functions that have
       multiple interfaces for compatibility reasons.  For example,
!      suppose the 'wait' function must accept either a value of type 'int
!      *' to comply with POSIX, or a value of type 'union wait *' to
!      comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
!      *', 'wait' would accept both kinds of arguments, but it would also
       accept any other pointer type and this would make argument type
!      checking less useful.  Instead, '<sys/wait.h>' might define the
       interface as follows:
  
            typedef union __attribute__ ((__transparent_union__))
--- 43538,43549 ----
  
       Transparent unions are designed for library functions that have
       multiple interfaces for compatibility reasons.  For example,
!      suppose the ‘wait’ function must accept either a value of type ‘int
!      *’ to comply with POSIX, or a value of type ‘union wait *’ to
!      comply with the 4.1BSD interface.  If ‘wait’'s parameter were ‘void
!      *’, ‘wait’ would accept both kinds of arguments, but it would also
       accept any other pointer type and this would make argument type
!      checking less useful.  Instead, ‘<sys/wait.h>’ might define the
       interface as follows:
  
            typedef union __attribute__ ((__transparent_union__))
*************** The following type attributes are suppor
*** 43544,43576 ****
  
            pid_t wait (wait_status_ptr_t);
  
!      This interface allows either 'int *' or 'union wait *' arguments to
!      be passed, using the 'int *' calling convention.  The program can
!      call 'wait' with arguments of either type:
  
            int w1 () { int w; return wait (&w); }
            int w2 () { union wait w; return wait (&w); }
  
!      With this interface, 'wait''s implementation might look like this:
  
            pid_t wait (wait_status_ptr_t p)
            {
              return waitpid (-1, p.__ip, 0);
            }
  
! 'unavailable'
! 'unavailable (MSG)'
!      The 'unavailable' attribute behaves in the same manner as the
!      'deprecated' one, but emits an error rather than a warning.  It is
!      used to indicate that a (perhaps previously 'deprecated') type is
       no longer usable.
  
!      The 'unavailable' attribute can also be used for functions and
       variables (*note Function Attributes::, *note Variable
       Attributes::.)
  
! 'unused'
!      When attached to a type (including a 'union' or a 'struct'), this
       attribute means that variables of that type are meant to appear
       possibly unused.  GCC does not produce a warning for any variables
       of that type, even if the variable appears to do nothing.  This is
--- 43554,43586 ----
  
            pid_t wait (wait_status_ptr_t);
  
!      This interface allows either ‘int *’ or ‘union wait *’ arguments to
!      be passed, using the ‘int *’ calling convention.  The program can
!      call ‘wait’ with arguments of either type:
  
            int w1 () { int w; return wait (&w); }
            int w2 () { union wait w; return wait (&w); }
  
!      With this interface, ‘wait’'s implementation might look like this:
  
            pid_t wait (wait_status_ptr_t p)
            {
              return waitpid (-1, p.__ip, 0);
            }
  
! ‘unavailable’
! ‘unavailable (MSG)’
!      The ‘unavailable’ attribute behaves in the same manner as the
!      ‘deprecated’ one, but emits an error rather than a warning.  It is
!      used to indicate that a (perhaps previously ‘deprecated’) type is
       no longer usable.
  
!      The ‘unavailable’ attribute can also be used for functions and
       variables (*note Function Attributes::, *note Variable
       Attributes::.)
  
! ‘unused’
!      When attached to a type (including a ‘union’ or a ‘struct’), this
       attribute means that variables of that type are meant to appear
       possibly unused.  GCC does not produce a warning for any variables
       of that type, even if the variable appears to do nothing.  This is
*************** The following type attributes are suppor
*** 43578,43586 ****
       defined and then not referenced, but contain constructors and
       destructors that have nontrivial bookkeeping functions.
  
! 'vector_size (BYTES)'
       This attribute specifies the vector size for the type, measured in
!      bytes.  The type to which it applies is known as the "base type".
       The BYTES argument must be a positive power-of-two multiple of the
       base type size.  For example, the following declarations:
  
--- 43588,43596 ----
       defined and then not referenced, but contain constructors and
       destructors that have nontrivial bookkeeping functions.
  
! ‘vector_size (BYTES)’
       This attribute specifies the vector size for the type, measured in
!      bytes.  The type to which it applies is known as the “base type”.
       The BYTES argument must be a positive power-of-two multiple of the
       base type size.  For example, the following declarations:
  
*************** The following type attributes are suppor
*** 43588,43598 ****
            typedef __attribute__ ((vector_size (32))) int* int_vec32_ptr_t;
            typedef __attribute__ ((vector_size (32))) int int_vec32_arr3_t[3];
  
!      define 'int_vec32_t' to be a 32-byte vector type composed of 'int'
!      sized units.  With 'int' having a size of 4 bytes, the type defines
       a vector of eight units, four bytes each.  The mode of variables of
!      type 'int_vec32_t' is 'V8SI'.  'int_vec32_ptr_t' is then defined to
!      be a pointer to such a vector type, and 'int_vec32_arr3_t' to be an
       array of three such vectors.  *Note Vector Extensions::, for
       details of manipulating objects of vector types.
  
--- 43598,43608 ----
            typedef __attribute__ ((vector_size (32))) int* int_vec32_ptr_t;
            typedef __attribute__ ((vector_size (32))) int int_vec32_arr3_t[3];
  
!      define ‘int_vec32_t’ to be a 32-byte vector type composed of ‘int’
!      sized units.  With ‘int’ having a size of 4 bytes, the type defines
       a vector of eight units, four bytes each.  The mode of variables of
!      type ‘int_vec32_t’ is ‘V8SI’.  ‘int_vec32_ptr_t’ is then defined to
!      be a pointer to such a vector type, and ‘int_vec32_arr3_t’ to be an
       array of three such vectors.  *Note Vector Extensions::, for
       details of manipulating objects of vector types.
  
*************** The following type attributes are suppor
*** 43602,43611 ****
  
       For example, the following:
            __attribute__ ((vector_size (16))) float get_flt_vec16 (void);
!      declares 'get_flt_vec16' to be a function returning a 16-byte
!      vector with the base type 'float'.
  
! 'visibility'
       In C++, attribute visibility (*note Function Attributes::) can also
       be applied to class, struct, union and enum types.  Unlike other
       type attributes, the attribute must appear between the initial
--- 43612,43621 ----
  
       For example, the following:
            __attribute__ ((vector_size (16))) float get_flt_vec16 (void);
!      declares ‘get_flt_vec16’ to be a function returning a 16-byte
!      vector with the base type ‘float’.
  
! ‘visibility’
       In C++, attribute visibility (*note Function Attributes::) can also
       be applied to class, struct, union and enum types.  Unlike other
       type attributes, the attribute must appear between the initial
*************** The following type attributes are suppor
*** 43619,43625 ****
       visibility.  Otherwise the two shared objects are unable to use the
       same typeinfo node and exception handling will break.
  
! 'warn_if_not_aligned (ALIGNMENT)'
       This attribute specifies a threshold for the structure field,
       measured in bytes.  If the structure field is aligned below the
       threshold, a warning will be issued.  For example, the declaration:
--- 43629,43635 ----
       visibility.  Otherwise the two shared objects are unable to use the
       same typeinfo node and exception handling will break.
  
! ‘warn_if_not_aligned (ALIGNMENT)’
       This attribute specifies a threshold for the structure field,
       measured in bytes.  If the structure field is aligned below the
       threshold, a warning will be issued.  For example, the declaration:
*************** The following type attributes are suppor
*** 43634,43644 ****
              __u64 x;
            };
  
!      causes the compiler to issue an warning on 'struct foo', like
!      'warning: alignment 4 of 'struct foo' is less than 8'.  It is used
!      to define 'struct foo' in such a way that 'struct foo' has the same
!      layout and the structure field 'x' has the same alignment when
!      '__u64' is aligned at either 4 or 8 bytes.  Align 'struct foo' to 8
       bytes:
  
            struct __attribute__ ((aligned (8))) foo
--- 43644,43654 ----
              __u64 x;
            };
  
!      causes the compiler to issue an warning on ‘struct foo’, like
!      ‘warning: alignment 4 of 'struct foo' is less than 8’.  It is used
!      to define ‘struct foo’ in such a way that ‘struct foo’ has the same
!      layout and the structure field ‘x’ has the same alignment when
!      ‘__u64’ is aligned at either 4 or 8 bytes.  Align ‘struct foo’ to 8
       bytes:
  
            struct __attribute__ ((aligned (8))) foo
*************** The following type attributes are suppor
*** 43649,43655 ****
            };
  
       silences the warning.  The compiler also issues a warning, like
!      'warning: 'x' offset 12 in 'struct foo' isn't aligned to 8', when
       the structure field has the misaligned offset:
  
            struct __attribute__ ((aligned (8))) foo
--- 43659,43665 ----
            };
  
       silences the warning.  The compiler also issues a warning, like
!      ‘warning: 'x' offset 12 in 'struct foo' isn't aligned to 8’, when
       the structure field has the misaligned offset:
  
            struct __attribute__ ((aligned (8))) foo
*************** The following type attributes are suppor
*** 43660,43670 ****
              __u64 x;
            };
  
!      This warning can be disabled by '-Wno-if-not-aligned'.
  
   To specify multiple attributes, separate them by commas within the
! double parentheses: for example, '__attribute__ ((aligned (16),
! packed))'.
  
  
  File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
--- 43670,43680 ----
              __u64 x;
            };
  
!      This warning can be disabled by ‘-Wno-if-not-aligned’.
  
   To specify multiple attributes, separate them by commas within the
! double parentheses: for example, ‘__attribute__ ((aligned (16),
! packed))’.
  
  
  File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
*************** File: gcc.info,  Node: ARC Type Attribut
*** 43672,43682 ****
  6.35.2 ARC Type Attributes
  --------------------------
  
! Declaring objects with 'uncached' allows you to exclude data-cache
  participation in load and store operations on those objects without
! involving the additional semantic implications of 'volatile'.  The '.di'
  instruction suffix is used for all loads and stores of data declared
! 'uncached'.
  
  
  File: gcc.info,  Node: ARM Type Attributes,  Next: BPF Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
--- 43682,43692 ----
  6.35.2 ARC Type Attributes
  --------------------------
  
! Declaring objects with ‘uncached’ allows you to exclude data-cache
  participation in load and store operations on those objects without
! involving the additional semantic implications of ‘volatile’.  The ‘.di’
  instruction suffix is used for all loads and stores of data declared
! ‘uncached’.
  
  
  File: gcc.info,  Node: ARM Type Attributes,  Next: BPF Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
*************** File: gcc.info,  Node: ARM Type Attribut
*** 43684,43691 ****
  6.35.3 ARM Type Attributes
  --------------------------
  
! On those ARM targets that support 'dllimport' (such as Symbian OS), you
! can use the 'notshared' attribute to indicate that the virtual table and
  other similar data for a class should not be exported from a DLL.  For
  example:
  
--- 43694,43701 ----
  6.35.3 ARM Type Attributes
  --------------------------
  
! On those ARM targets that support ‘dllimport’ (such as Symbian OS), you
! can use the ‘notshared’ attribute to indicate that the virtual table and
  other similar data for a class should not be exported from a DLL.  For
  example:
  
*************** example:
*** 43698,43706 ****
       __declspec(dllexport)
       C::C() {}
  
! In this code, 'C::C' is exported from the current DLL, but the virtual
! table for 'C' is not exported.  (You can use '__attribute__' instead of
! '__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
  
  
  File: gcc.info,  Node: BPF Type Attributes,  Next: PowerPC Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
--- 43708,43716 ----
       __declspec(dllexport)
       C::C() {}
  
! In this code, ‘C::C’ is exported from the current DLL, but the virtual
! table for ‘C’ is not exported.  (You can use ‘__attribute__’ instead of
! ‘__declspec’ if you prefer, but most Symbian OS code uses ‘__declspec’.)
  
  
  File: gcc.info,  Node: BPF Type Attributes,  Next: PowerPC Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
*************** File: gcc.info,  Node: BPF Type Attribut
*** 43709,43718 ****
  --------------------------
  
  BPF Compile Once - Run Everywhere (CO-RE) support.  When attached to a
! 'struct' or 'union' type definition, indicates that CO-RE relocation
  information should be generated for any access to a variable of that
  type.  The behavior is equivalent to the programmer manually wrapping
! every such access with '__builtin_preserve_access_index'.
  
  
  File: gcc.info,  Node: PowerPC Type Attributes,  Next: x86 Type Attributes,  Prev: BPF Type Attributes,  Up: Type Attributes
--- 43719,43728 ----
  --------------------------
  
  BPF Compile Once - Run Everywhere (CO-RE) support.  When attached to a
! ‘struct’ or ‘union’ type definition, indicates that CO-RE relocation
  information should be generated for any access to a variable of that
  type.  The behavior is equivalent to the programmer manually wrapping
! every such access with ‘__builtin_preserve_access_index’.
  
  
  File: gcc.info,  Node: PowerPC Type Attributes,  Next: x86 Type Attributes,  Prev: BPF Type Attributes,  Up: Type Attributes
*************** File: gcc.info,  Node: PowerPC Type Attr
*** 43721,43743 ****
  ------------------------------
  
  Three attributes currently are defined for PowerPC configurations:
! 'altivec', 'ms_struct' and 'gcc_struct'.
  
!  For full documentation of the 'ms_struct' and 'gcc_struct' attributes
  please see the documentation in *note x86 Type Attributes::.
  
!  The 'altivec' attribute allows one to declare AltiVec vector data types
  supported by the AltiVec Programming Interface Manual.  The attribute
! requires an argument to specify one of three vector types: 'vector__',
! 'pixel__' (always followed by unsigned short), and 'bool__' (always
  followed by unsigned).
  
       __attribute__((altivec(vector__)))
       __attribute__((altivec(pixel__))) unsigned short
       __attribute__((altivec(bool__))) unsigned
  
!  These attributes mainly are intended to support the '__vector',
! '__pixel', and '__bool' AltiVec keywords.
  
  
  File: gcc.info,  Node: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
--- 43731,43753 ----
  ------------------------------
  
  Three attributes currently are defined for PowerPC configurations:
! ‘altivec’, ‘ms_struct’ and ‘gcc_struct’.
  
!  For full documentation of the ‘ms_struct’ and ‘gcc_struct’ attributes
  please see the documentation in *note x86 Type Attributes::.
  
!  The ‘altivec’ attribute allows one to declare AltiVec vector data types
  supported by the AltiVec Programming Interface Manual.  The attribute
! requires an argument to specify one of three vector types: ‘vector__’,
! ‘pixel__’ (always followed by unsigned short), and ‘bool__’ (always
  followed by unsigned).
  
       __attribute__((altivec(vector__)))
       __attribute__((altivec(pixel__))) unsigned short
       __attribute__((altivec(bool__))) unsigned
  
!  These attributes mainly are intended to support the ‘__vector’,
! ‘__pixel’, and ‘__bool’ AltiVec keywords.
  
  
  File: gcc.info,  Node: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
*************** File: gcc.info,  Node: x86 Type Attribut
*** 43745,43765 ****
  6.35.6 x86 Type Attributes
  --------------------------
  
! Two attributes are currently defined for x86 configurations: 'ms_struct'
! and 'gcc_struct'.
  
! 'ms_struct'
! 'gcc_struct'
  
!      If 'packed' is used on a structure, or if bit-fields are used it
       may be that the Microsoft ABI packs them differently than GCC
       normally packs them.  Particularly when moving packed data between
       functions compiled with GCC and the native Microsoft compiler
       (either via function call or as data in a file), it may be
       necessary to access either format.
  
!      The 'ms_struct' and 'gcc_struct' attributes correspond to the
!      '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
       respectively; see *note x86 Options::, for details of how structure
       layout is affected.  *Note x86 Variable Attributes::, for
       information about the corresponding attributes on variables.
--- 43755,43775 ----
  6.35.6 x86 Type Attributes
  --------------------------
  
! Two attributes are currently defined for x86 configurations: ‘ms_struct’
! and ‘gcc_struct’.
  
! ‘ms_struct’
! ‘gcc_struct’
  
!      If ‘packed’ is used on a structure, or if bit-fields are used it
       may be that the Microsoft ABI packs them differently than GCC
       normally packs them.  Particularly when moving packed data between
       functions compiled with GCC and the native Microsoft compiler
       (either via function call or as data in a file), it may be
       necessary to access either format.
  
!      The ‘ms_struct’ and ‘gcc_struct’ attributes correspond to the
!      ‘-mms-bitfields’ and ‘-mno-ms-bitfields’ command-line options,
       respectively; see *note x86 Options::, for details of how structure
       layout is affected.  *Note x86 Variable Attributes::, for
       information about the corresponding attributes on variables.
*************** Attributes::), statements (*note Stateme
*** 43778,43786 ****
  (*note Type Attributes::).  A label attribute followed by a declaration
  appertains to the label and not the declaration.
  
!  This example uses the 'cold' label attribute to indicate the
! 'ErrorHandling' branch is unlikely to be taken and that the
! 'ErrorHandling' label is unused:
  
  
          asm goto ("some asm" : : : : NoError);
--- 43788,43796 ----
  (*note Type Attributes::).  A label attribute followed by a declaration
  appertains to the label and not the declaration.
  
!  This example uses the ‘cold’ label attribute to indicate the
! ‘ErrorHandling’ branch is unlikely to be taken and that the
! ‘ErrorHandling’ label is unused:
  
  
          asm goto ("some asm" : : : : NoError);
*************** appertains to the label and not the decl
*** 43795,43819 ****
          printf("no error\n");
          return 1;
  
! 'unused'
       This feature is intended for program-generated code that may
!      contain unused labels, but which is compiled with '-Wall'.  It is
       not normally appropriate to use in it human-written code, though it
       could be useful in cases where the code that jumps to the label is
!      contained within an '#ifdef' conditional.
  
! 'hot'
!      The 'hot' attribute on a label is used to inform the compiler that
       the path following the label is more likely than paths that are not
       so annotated.  This attribute is used in cases where
!      '__builtin_expect' cannot be used, for instance with computed goto
!      or 'asm goto'.
  
! 'cold'
!      The 'cold' attribute on labels is used to inform the compiler that
       the path following the label is unlikely to be executed.  This
!      attribute is used in cases where '__builtin_expect' cannot be used,
!      for instance with computed goto or 'asm goto'.
  
  
  File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
--- 43805,43829 ----
          printf("no error\n");
          return 1;
  
! ‘unused’
       This feature is intended for program-generated code that may
!      contain unused labels, but which is compiled with ‘-Wall’.  It is
       not normally appropriate to use in it human-written code, though it
       could be useful in cases where the code that jumps to the label is
!      contained within an ‘#ifdef’ conditional.
  
! ‘hot’
!      The ‘hot’ attribute on a label is used to inform the compiler that
       the path following the label is more likely than paths that are not
       so annotated.  This attribute is used in cases where
!      ‘__builtin_expect’ cannot be used, for instance with computed goto
!      or ‘asm goto’.
  
! ‘cold’
!      The ‘cold’ attribute on labels is used to inform the compiler that
       the path following the label is unlikely to be executed.  This
!      attribute is used in cases where ‘__builtin_expect’ cannot be used,
!      for instance with computed goto or ‘asm goto’.
  
  
  File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
*************** variables (*note Variable Attributes::),
*** 43828,43835 ****
  Attributes::), statements (*note Statement Attributes::), and for types
  (*note Type Attributes::).
  
!  This example uses the 'deprecated' enumerator attribute to indicate the
! 'oldval' enumerator is deprecated:
  
       enum E {
         oldval __attribute__((deprecated)),
--- 43838,43845 ----
  Attributes::), statements (*note Statement Attributes::), and for types
  (*note Type Attributes::).
  
!  This example uses the ‘deprecated’ enumerator attribute to indicate the
! ‘oldval’ enumerator is deprecated:
  
       enum E {
         oldval __attribute__((deprecated)),
*************** Attributes::), statements (*note Stateme
*** 43842,43849 ****
         return oldval;
       }
  
! 'deprecated'
!      The 'deprecated' attribute results in a warning if the enumerator
       is used anywhere in the source file.  This is useful when
       identifying enumerators that are expected to be removed in a future
       version of a program.  The warning also includes the location of
--- 43852,43859 ----
         return oldval;
       }
  
! ‘deprecated’
!      The ‘deprecated’ attribute results in a warning if the enumerator
       is used anywhere in the source file.  This is useful when
       identifying enumerators that are expected to be removed in a future
       version of a program.  The warning also includes the location of
*************** Attributes::), statements (*note Stateme
*** 43852,43861 ****
       deprecated, or what they should do instead.  Note that the warnings
       only occurs for uses.
  
! 'unavailable'
!      The 'unavailable' attribute results in an error if the enumerator
       is used anywhere in the source file.  In other respects it behaves
!      in the same manner as the 'deprecated' attribute.
  
  
  File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
--- 43862,43871 ----
       deprecated, or what they should do instead.  Note that the warnings
       only occurs for uses.
  
! ‘unavailable’
!      The ‘unavailable’ attribute results in an error if the enumerator
       is used anywhere in the source file.  In other respects it behaves
!      in the same manner as the ‘deprecated’ attribute.
  
  
  File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
*************** variables (*note Variable Attributes::),
*** 43870,43889 ****
  Attributes::), enumerators (*note Enumerator Attributes::), and for
  types (*note Type Attributes::).
  
! 'fallthrough'
!      The 'fallthrough' attribute with a null statement serves as a
       fallthrough statement.  It hints to the compiler that a statement
       that falls through to another case label, or user-defined label in
       a switch statement is intentional and thus the
!      '-Wimplicit-fallthrough' warning must not trigger.  The fallthrough
       attribute may appear at most once in each attribute list, and may
       not be mixed with other attributes.  It can only be used in a
       switch statement (the compiler will issue an error otherwise),
       after a preceding statement and before a logically succeeding case
       label, or user-defined label.
  
!      This example uses the 'fallthrough' statement attribute to indicate
!      that the '-Wimplicit-fallthrough' warning should not be emitted:
  
            switch (cond)
              {
--- 43880,43899 ----
  Attributes::), enumerators (*note Enumerator Attributes::), and for
  types (*note Type Attributes::).
  
! ‘fallthrough’
!      The ‘fallthrough’ attribute with a null statement serves as a
       fallthrough statement.  It hints to the compiler that a statement
       that falls through to another case label, or user-defined label in
       a switch statement is intentional and thus the
!      ‘-Wimplicit-fallthrough’ warning must not trigger.  The fallthrough
       attribute may appear at most once in each attribute list, and may
       not be mixed with other attributes.  It can only be used in a
       switch statement (the compiler will issue an error otherwise),
       after a preceding statement and before a logically succeeding case
       label, or user-defined label.
  
!      This example uses the ‘fallthrough’ statement attribute to indicate
!      that the ‘-Wimplicit-fallthrough’ warning should not be emitted:
  
            switch (cond)
              {
*************** types (*note Type Attributes::).
*** 43894,43906 ****
                ...
              }
  
! 'assume'
!      The 'assume' attribute with a null statement serves as portable
       assumption.  It should have a single argument, a conditional
       expression, which is not evaluated.  If the argument would evaluate
       to true at the point where it appears, it has no effect, otherwise
       there is undefined behavior.  This is a GNU variant of the ISO
!      C++23 standard 'assume' attribute, but it can be used in any
       version of both C and C++.
  
            int
--- 43904,43916 ----
                ...
              }
  
! ‘assume’
!      The ‘assume’ attribute with a null statement serves as portable
       assumption.  It should have a single argument, a conditional
       expression, which is not evaluated.  If the argument would evaluate
       to true at the point where it appears, it has no effect, otherwise
       there is undefined behavior.  This is a GNU variant of the ISO
!      C++23 standard ‘assume’ attribute, but it can be used in any
       version of both C and C++.
  
            int
*************** types (*note Type Attributes::).
*** 43911,43918 ****
              return x + y;
            }
  
!      'y' is not actually incremented and the compiler can but does not
!      have to optimize it to just 'return 42 + 42;'.
  
  
  File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
--- 43921,43928 ----
              return x + y;
            }
  
!      ‘y’ is not actually incremented and the compiler can but does not
!      have to optimize it to just ‘return 42 + 42;’.
  
  
  File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
*************** File: gcc.info,  Node: Attribute Syntax,
*** 43922,43945 ****
  
  GCC provides two different ways to specify attributes: the standard C
  and C++ syntax using double square brackets, and the older GNU extension
! syntax using the '__attribute__' keyword, which predates the adoption of
  the standard syntax and is still widely used in older code.
  
!  The standard '[[]]' attribute syntax is recognized by GCC's default
  language dialect for both C and C++.  More specifically, this syntax was
  first introduced in the C++11 language standard (*note Standards::), and
! is supported by GCC in C++ code with '-std=c++11' or '-std=gnu++11' or
  later.  It is also part of the C23 language standard and is supported
! when compiling C code with '-std=c23' or '-std=gnu17' or later.
  
   When using GNU-specific attributes in the standard syntax, you must
! prefix their names with 'gnu::', such as 'gnu::section'.  Refer to the
! relevant language standards for exact details on the placement of '[[]]'
  attributes within your code, as they differ in some details from the
  rules for the GNU attribute syntax.
  
   The remainder of this section describes the details of the GNU
! extension '__attribute__' syntax, and the constructs to which attribute
  specifiers bind, for the C language.  Some details may vary for C++ and
  Objective-C.  Because of limitations in the grammar for attributes, some
  forms described here may not be successfully parsed in all cases.
--- 43932,43955 ----
  
  GCC provides two different ways to specify attributes: the standard C
  and C++ syntax using double square brackets, and the older GNU extension
! syntax using the ‘__attribute__’ keyword, which predates the adoption of
  the standard syntax and is still widely used in older code.
  
!  The standard ‘[[]]’ attribute syntax is recognized by GCC's default
  language dialect for both C and C++.  More specifically, this syntax was
  first introduced in the C++11 language standard (*note Standards::), and
! is supported by GCC in C++ code with ‘-std=c++11’ or ‘-std=gnu++11’ or
  later.  It is also part of the C23 language standard and is supported
! when compiling C code with ‘-std=c23’ or ‘-std=gnu17’ or later.
  
   When using GNU-specific attributes in the standard syntax, you must
! prefix their names with ‘gnu::’, such as ‘gnu::section’.  Refer to the
! relevant language standards for exact details on the placement of ‘[[]]’
  attributes within your code, as they differ in some details from the
  rules for the GNU attribute syntax.
  
   The remainder of this section describes the details of the GNU
! extension ‘__attribute__’ syntax, and the constructs to which attribute
  specifiers bind, for the C language.  Some details may vary for C++ and
  Objective-C.  Because of limitations in the grammar for attributes, some
  forms described here may not be successfully parsed in all cases.
*************** forms described here may not be successf
*** 43947,43953 ****
   There are some problems with the semantics of attributes in C++.  For
  example, there are no manglings for attributes, although they may affect
  code generation, so problems may arise when attributed types are used in
! conjunction with templates or overloading.  Similarly, 'typeid' does not
  distinguish between types with different attributes.  Support for
  attributes in C++ may be restricted in future to attributes on
  declarations only, but not on nested declarators.
--- 43957,43963 ----
   There are some problems with the semantics of attributes in C++.  For
  example, there are no manglings for attributes, although they may affect
  code generation, so problems may arise when attributed types are used in
! conjunction with templates or overloading.  Similarly, ‘typeid’ does not
  distinguish between types with different attributes.  Support for
  attributes in C++ may be restricted in future to attributes on
  declarations only, but not on nested declarators.
*************** Attributes::, for details of the semanti
*** 43962,44006 ****
  enumerators.  *Note Statement Attributes::, for details of the semantics
  of attributes applying to statements.
  
!  An "attribute specifier" is of the form '__attribute__
! ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
! comma-separated sequence of "attributes", where each attribute is one of
  the following:
  
!    * Empty.  Empty attributes are ignored.
  
!    * An attribute name (which may be an identifier such as 'unused', or
!      a reserved word such as 'const').
  
!    * An attribute name followed by a parenthesized list of parameters
       for the attribute.  These parameters take one of the following
       forms:
  
!         * An identifier.  For example, 'mode' attributes use this form.
  
!         * An identifier followed by a comma and a non-empty
!           comma-separated list of expressions.  For example, 'format'
            attributes use this form.
  
!         * A possibly empty comma-separated list of expressions.  For
!           example, 'format_arg' attributes use this form with the list
!           being a single integer constant expression, and 'alias'
            attributes use this form with the list being a single string
            constant.
  
!  An "attribute specifier list" is a sequence of one or more attribute
  specifiers, not separated by any other tokens.
  
!  You may optionally specify attribute names with '__' preceding and
  following the name.  This allows you to use them in header files without
  being concerned about a possible macro of the same name.  For example,
! you may use the attribute name '__noreturn__' instead of 'noreturn'.
  
  Label Attributes
  ................
  
  In GNU C, an attribute specifier list may appear after the colon
! following a label, other than a 'case' or 'default' label.  GNU C++ only
  permits attributes on labels if the attribute specifier is immediately
  followed by a semicolon (i.e., the label applies to an empty statement).
  If the semicolon is missing, C++ label attributes are ambiguous, as it
--- 43972,44016 ----
  enumerators.  *Note Statement Attributes::, for details of the semantics
  of attributes applying to statements.
  
!  An “attribute specifier” is of the form ‘__attribute__
! ((ATTRIBUTE-LIST))’.  An “attribute list” is a possibly empty
! comma-separated sequence of “attributes”, where each attribute is one of
  the following:
  
!    • Empty.  Empty attributes are ignored.
  
!    • An attribute name (which may be an identifier such as ‘unused’, or
!      a reserved word such as ‘const’).
  
!    • An attribute name followed by a parenthesized list of parameters
       for the attribute.  These parameters take one of the following
       forms:
  
!         • An identifier.  For example, ‘mode’ attributes use this form.
  
!         • An identifier followed by a comma and a non-empty
!           comma-separated list of expressions.  For example, ‘format’
            attributes use this form.
  
!         • A possibly empty comma-separated list of expressions.  For
!           example, ‘format_arg’ attributes use this form with the list
!           being a single integer constant expression, and ‘alias’
            attributes use this form with the list being a single string
            constant.
  
!  An “attribute specifier list” is a sequence of one or more attribute
  specifiers, not separated by any other tokens.
  
!  You may optionally specify attribute names with ‘__’ preceding and
  following the name.  This allows you to use them in header files without
  being concerned about a possible macro of the same name.  For example,
! you may use the attribute name ‘__noreturn__’ instead of ‘noreturn’.
  
  Label Attributes
  ................
  
  In GNU C, an attribute specifier list may appear after the colon
! following a label, other than a ‘case’ or ‘default’ label.  GNU C++ only
  permits attributes on labels if the attribute specifier is immediately
  followed by a semicolon (i.e., the label applies to an empty statement).
  If the semicolon is missing, C++ label attributes are ambiguous, as it
*************** Enumerator Attributes
*** 44013,44019 ****
  
  In GNU C, an attribute specifier list may appear as part of an
  enumerator.  The attribute goes after the enumeration constant, before
! '=', if present.  The optional attribute in the enumerator appertains to
  the enumeration constant.  It is not possible to place the attribute
  after the constant expression, if present.
  
--- 44023,44029 ----
  
  In GNU C, an attribute specifier list may appear as part of an
  enumerator.  The attribute goes after the enumeration constant, before
! ‘=’, if present.  The optional attribute in the enumerator appertains to
  the enumeration constant.  It is not possible to place the attribute
  after the constant expression, if present.
  
*************** statement.  The attribute goes before th
*** 44026,44034 ****
  Type Attributes
  ...............
  
! An attribute specifier list may appear as part of a 'struct', 'union' or
! 'enum' specifier.  It may go either immediately after the 'struct',
! 'union' or 'enum' keyword, or after the closing brace.  The former
  syntax is preferred.  Where attribute specifiers follow the closing
  brace, they are considered to relate to the structure, union or
  enumerated type defined, not to any enclosing declaration the type
--- 44036,44044 ----
  Type Attributes
  ...............
  
! An attribute specifier list may appear as part of a ‘struct’, ‘union’ or
! ‘enum’ specifier.  It may go either immediately after the ‘struct’,
! ‘union’ or ‘enum’ keyword, or after the closing brace.  The former
  syntax is preferred.  Where attribute specifiers follow the closing
  brace, they are considered to relate to the structure, union or
  enumerated type defined, not to any enclosing declaration the type
*************** contain attribute specifiers, whether or
*** 44053,44073 ****
  context contain storage class specifiers.  (Some attributes, however,
  are essentially in the nature of storage class specifiers, and only make
  sense where storage class specifiers may be used; for example,
! 'section'.)  There is one necessary limitation to this syntax: the first
  old-style parameter declaration in a function definition cannot begin
  with an attribute specifier, because such an attribute applies to the
  function instead by syntax described below (which, however, is not yet
  implemented in this case).  In some other cases, attribute specifiers
  are permitted by this grammar but not yet supported by the compiler.
  All attribute specifiers in this place relate to the declaration as a
! whole.  In the obsolescent usage where a type of 'int' is implied by the
  absence of type specifiers, such a list of specifiers and qualifiers may
  be an attribute specifier list with no other specifiers or qualifiers.
  
   At present, the first parameter in a function prototype must have some
  type specifier that is not an attribute specifier; this resolves an
! ambiguity in the interpretation of 'void f(int (__attribute__((foo))
! x))', but is subject to change.  At present, if the parentheses of a
  function declarator contain only attributes then those attributes are
  ignored, rather than yielding an error or warning or implying a single
  parameter of type int, but this is subject to change.
--- 44063,44083 ----
  context contain storage class specifiers.  (Some attributes, however,
  are essentially in the nature of storage class specifiers, and only make
  sense where storage class specifiers may be used; for example,
! ‘section’.)  There is one necessary limitation to this syntax: the first
  old-style parameter declaration in a function definition cannot begin
  with an attribute specifier, because such an attribute applies to the
  function instead by syntax described below (which, however, is not yet
  implemented in this case).  In some other cases, attribute specifiers
  are permitted by this grammar but not yet supported by the compiler.
  All attribute specifiers in this place relate to the declaration as a
! whole.  In the obsolescent usage where a type of ‘int’ is implied by the
  absence of type specifiers, such a list of specifiers and qualifiers may
  be an attribute specifier list with no other specifiers or qualifiers.
  
   At present, the first parameter in a function prototype must have some
  type specifier that is not an attribute specifier; this resolves an
! ambiguity in the interpretation of ‘void f(int (__attribute__((foo))
! x))’, but is subject to change.  At present, if the parentheses of a
  function declarator contain only attributes then those attributes are
  ignored, rather than yielding an error or warning or implying a single
  parameter of type int, but this is subject to change.
*************** identifier before whose declarator they
*** 44082,44095 ****
           __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
            d2 (void);
  
! the 'noreturn' attribute applies to all the functions declared; the
! 'format' attribute only applies to 'd1'.
  
   An attribute specifier list may appear immediately before the comma,
! '=' or semicolon terminating the declaration of an identifier other than
  a function definition.  Such attribute specifiers apply to the declared
  object or function.  Where an assembler name for an object or function
! is specified (*note Asm Labels::), the attribute must follow the 'asm'
  specification.
  
   An attribute specifier list may, in future, be permitted to appear
--- 44092,44105 ----
           __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
            d2 (void);
  
! the ‘noreturn’ attribute applies to all the functions declared; the
! ‘format’ attribute only applies to ‘d1’.
  
   An attribute specifier list may appear immediately before the comma,
! ‘=’ or semicolon terminating the declaration of an identifier other than
  a function definition.  Such attribute specifiers apply to the declared
  object or function.  Where an assembler name for an object or function
! is specified (*note Asm Labels::), the attribute must follow the ‘asm’
  specification.
  
   An attribute specifier list may, in future, be permitted to appear
*************** after the declarator in a function defin
*** 44097,44103 ****
  parameter declarations or the function body).
  
   Attribute specifiers may be mixed with type qualifiers appearing inside
! the '[]' of a parameter array declarator, in the C99 construct by which
  such qualifiers are applied to the pointer to which the array is
  implicitly converted.  Such attribute specifiers apply to the pointer,
  not to the array, but at present this is not implemented and they are
--- 44107,44113 ----
  parameter declarations or the function body).
  
   Attribute specifiers may be mixed with type qualifiers appearing inside
! the ‘[]’ of a parameter array declarator, in the C99 construct by which
  such qualifiers are applied to the pointer to which the array is
  implicitly converted.  Such attribute specifiers apply to the pointer,
  not to the array, but at present this is not implemented and they are
*************** ignored.
*** 44107,44132 ****
  declarator.  At present, there are some limitations in this usage: the
  attributes correctly apply to the declarator, but for most individual
  attributes the semantics this implies are not implemented.  When
! attribute specifiers follow the '*' of a pointer declarator, they may be
  mixed with any type qualifiers present.  The following describes the
  formal semantics of this syntax.  It makes the most sense if you are
  familiar with the formal specification of declarators in the ISO C
  standard.
  
!  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
! where 'T' contains declaration specifiers that specify a type TYPE (such
! as 'int') and 'D1' is a declarator that contains an identifier IDENT.
  The type specified for IDENT for derived declarators whose type does not
  include an attribute specifier is as in the ISO C standard.
  
!  If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
! declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
! for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
  ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
  
!  If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
! and the declaration 'T D' specifies the type
! "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
  type "DERIVED-DECLARATOR-TYPE-LIST
  TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
  
--- 44117,44142 ----
  declarator.  At present, there are some limitations in this usage: the
  attributes correctly apply to the declarator, but for most individual
  attributes the semantics this implies are not implemented.  When
! attribute specifiers follow the ‘*’ of a pointer declarator, they may be
  mixed with any type qualifiers present.  The following describes the
  formal semantics of this syntax.  It makes the most sense if you are
  familiar with the formal specification of declarators in the ISO C
  standard.
  
!  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration ‘T D1’,
! where ‘T’ contains declaration specifiers that specify a type TYPE (such
! as ‘int’) and ‘D1’ is a declarator that contains an identifier IDENT.
  The type specified for IDENT for derived declarators whose type does not
  include an attribute specifier is as in the ISO C standard.
  
!  If ‘D1’ has the form ‘( ATTRIBUTE-SPECIFIER-LIST D )’, and the
! declaration ‘T D’ specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
! for IDENT, then ‘T D1’ specifies the type "DERIVED-DECLARATOR-TYPE-LIST
  ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
  
!  If ‘D1’ has the form ‘* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D’,
! and the declaration ‘T D’ specifies the type
! "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then ‘T D1’ specifies the
  type "DERIVED-DECLARATOR-TYPE-LIST
  TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
  
*************** TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-L
*** 44135,44147 ****
       void (__attribute__((noreturn)) ****f) (void);
  
  specifies the type "pointer to pointer to pointer to pointer to
! non-returning function returning 'void'".  As another example,
  
       char *__attribute__((aligned(8))) *f;
  
! specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
  again that this does not work with most attributes; for example, the
! usage of 'aligned' and 'noreturn' attributes given above is not yet
  supported.
  
   For compatibility with existing code written for compiler versions that
--- 44145,44157 ----
       void (__attribute__((noreturn)) ****f) (void);
  
  specifies the type "pointer to pointer to pointer to pointer to
! non-returning function returning ‘void’".  As another example,
  
       char *__attribute__((aligned(8))) *f;
  
! specifies the type "pointer to 8-byte-aligned pointer to ‘char’".  Note
  again that this does not work with most attributes; for example, the
! usage of ‘aligned’ and ‘noreturn’ attributes given above is not yet
  supported.
  
   For compatibility with existing code written for compiler versions that
*************** old-style non-prototype definition.  Con
*** 44188,44202 ****
         return x == 0;
       }
  
!  Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
  this example, because subword arguments in old-style non-prototype
  definitions are promoted.  Therefore in this example the function
! definition's argument is really an 'int', which does not match the
! prototype argument type of 'short'.
  
   This restriction of ISO C makes it hard to write code that is portable
  to traditional C compilers, because the programmer does not know whether
! the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
  these GNU C allows a prototype to override a later old-style definition.
  More precisely, in GNU C, a function prototype argument type overrides
  the argument type specified by a later old-style definition if the
--- 44198,44212 ----
         return x == 0;
       }
  
!  Suppose the type ‘uid_t’ happens to be ‘short’.  ISO C does not allow
  this example, because subword arguments in old-style non-prototype
  definitions are promoted.  Therefore in this example the function
! definition's argument is really an ‘int’, which does not match the
! prototype argument type of ‘short’.
  
   This restriction of ISO C makes it hard to write code that is portable
  to traditional C compilers, because the programmer does not know whether
! the ‘uid_t’ type is ‘short’, ‘int’, or ‘long’.  Therefore, in cases like
  these GNU C allows a prototype to override a later old-style definition.
  More precisely, in GNU C, a function prototype argument type overrides
  the argument type specified by a later old-style definition if the
*************** File: gcc.info,  Node: C++ Comments,  Ne
*** 44220,44231 ****
  6.41 C++ Style Comments
  =======================
  
! In GNU C, you may use C++ style comments, which start with '//' and
  continue until the end of the line.  Many other C implementations allow
  such comments, and they are included in the 1999 C standard.  However,
! C++ style comments are not recognized if you specify an '-std' option
! specifying a version of ISO C before C99, or '-ansi' (equivalent to
! '-std=c90').
  
  
  File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
--- 44230,44241 ----
  6.41 C++ Style Comments
  =======================
  
! In GNU C, you may use C++ style comments, which start with ‘//’ and
  continue until the end of the line.  Many other C implementations allow
  such comments, and they are included in the 1999 C standard.  However,
! C++ style comments are not recognized if you specify an ‘-std’ option
! specifying a version of ISO C before C99, or ‘-ansi’ (equivalent to
! ‘-std=c90’).
  
  
  File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
*************** File: gcc.info,  Node: Character Escapes
*** 44244,44250 ****
  6.43 The Character <ESC> in Constants
  =====================================
  
! You can use the sequence '\e' in a string or character constant to stand
  for the ASCII character <ESC>.
  
  
--- 44254,44260 ----
  6.43 The Character <ESC> in Constants
  =====================================
  
! You can use the sequence ‘\e’ in a string or character constant to stand
  for the ASCII character <ESC>.
  
  
*************** File: gcc.info,  Node: Alignment,  Next:
*** 44253,44286 ****
  6.44 Determining the Alignment of Functions, Types or Variables
  ===============================================================
  
! The keyword '__alignof__' determines the alignment requirement of a
  function, object, or a type, or the minimum alignment usually required
! by a type.  Its syntax is just like 'sizeof' and C11 '_Alignof'.
  
!  For example, if the target machine requires a 'double' value to be
! aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
  is true on many RISC machines.  On more traditional machine designs,
! '__alignof__ (double)' is 4 or even 2.
  
   Some machines never actually require alignment; they allow references
  to any data type even at an odd address.  For these machines,
! '__alignof__' reports the smallest alignment that GCC gives the data
  type, usually as mandated by the target ABI.
  
!  If the operand of '__alignof__' is an lvalue rather than a type, its
  value is the required alignment for its type, taking into account any
! minimum alignment specified by attribute 'aligned' (*note Common
  Variable Attributes::).  For example, after this declaration:
  
       struct foo { int x; char y; } foo1;
  
! the value of '__alignof__ (foo1.y)' is 1, even though its actual
! alignment is probably 2 or 4, the same as '__alignof__ (int)'.  It is an
! error to ask for the alignment of an incomplete type other than 'void'.
  
!  If the operand of the '__alignof__' expression is a function, the
  expression evaluates to the alignment of the function which may be
! specified by attribute 'aligned' (*note Common Function Attributes::).
  
  
  File: gcc.info,  Node: Inline,  Next: Const and Volatile Functions,  Prev: Alignment,  Up: C Extensions
--- 44263,44296 ----
  6.44 Determining the Alignment of Functions, Types or Variables
  ===============================================================
  
! The keyword ‘__alignof__’ determines the alignment requirement of a
  function, object, or a type, or the minimum alignment usually required
! by a type.  Its syntax is just like ‘sizeof’ and C11 ‘_Alignof’.
  
!  For example, if the target machine requires a ‘double’ value to be
! aligned on an 8-byte boundary, then ‘__alignof__ (double)’ is 8.  This
  is true on many RISC machines.  On more traditional machine designs,
! ‘__alignof__ (double)’ is 4 or even 2.
  
   Some machines never actually require alignment; they allow references
  to any data type even at an odd address.  For these machines,
! ‘__alignof__’ reports the smallest alignment that GCC gives the data
  type, usually as mandated by the target ABI.
  
!  If the operand of ‘__alignof__’ is an lvalue rather than a type, its
  value is the required alignment for its type, taking into account any
! minimum alignment specified by attribute ‘aligned’ (*note Common
  Variable Attributes::).  For example, after this declaration:
  
       struct foo { int x; char y; } foo1;
  
! the value of ‘__alignof__ (foo1.y)’ is 1, even though its actual
! alignment is probably 2 or 4, the same as ‘__alignof__ (int)’.  It is an
! error to ask for the alignment of an incomplete type other than ‘void’.
  
!  If the operand of the ‘__alignof__’ expression is a function, the
  expression evaluates to the alignment of the function which may be
! specified by attribute ‘aligned’ (*note Common Function Attributes::).
  
  
  File: gcc.info,  Node: Inline,  Next: Const and Volatile Functions,  Prev: Alignment,  Up: C Extensions
*************** code needs to be included.  The effect o
*** 44298,44312 ****
  object code may be larger or smaller with function inlining, depending
  on the particular case.  You can also direct GCC to try to integrate all
  "simple enough" functions into their callers with the option
! '-finline-functions'.
  
   GCC implements three different semantics of declaring a function
! inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
! 'gnu_inline' attribute is present on all inline declarations, another
! when '-std=c99', '-std=gnu99' or an option for a later C version is used
! (without '-fgnu89-inline'), and the third is used when compiling C++.
  
!  To declare a function inline, use the 'inline' keyword in its
  declaration, like this:
  
       static inline int
--- 44308,44322 ----
  object code may be larger or smaller with function inlining, depending
  on the particular case.  You can also direct GCC to try to integrate all
  "simple enough" functions into their callers with the option
! ‘-finline-functions’.
  
   GCC implements three different semantics of declaring a function
! inline.  One is available with ‘-std=gnu89’ or ‘-fgnu89-inline’ or when
! ‘gnu_inline’ attribute is present on all inline declarations, another
! when ‘-std=c99’, ‘-std=gnu99’ or an option for a later C version is used
! (without ‘-fgnu89-inline’), and the third is used when compiling C++.
  
!  To declare a function inline, use the ‘inline’ keyword in its
  declaration, like this:
  
       static inline int
*************** declaration, like this:
*** 44316,44327 ****
       }
  
   If you are writing a header file to be included in ISO C90 programs,
! write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
  
   The three types of inlining behave similarly in two important cases:
! when the 'inline' keyword is used on a 'static' function, like the
  example above, and when a function is first declared without using the
! 'inline' keyword and then is defined with 'inline', like this:
  
       extern int inc (int *a);
       inline int
--- 44326,44337 ----
       }
  
   If you are writing a header file to be included in ISO C90 programs,
! write ‘__inline__’ instead of ‘inline’.  *Note Alternate Keywords::.
  
   The three types of inlining behave similarly in two important cases:
! when the ‘inline’ keyword is used on a ‘static’ function, like the
  example above, and when a function is first declared without using the
! ‘inline’ keyword and then is defined with ‘inline’, like this:
  
       extern int inc (int *a);
       inline int
*************** example above, and when a function is fi
*** 44331,44386 ****
       }
  
   In both of these common cases, the program behaves the same as if you
! had not used the 'inline' keyword, except for its speed.
  
!  When a function is both inline and 'static', if all calls to the
  function are integrated into the caller, and the function's address is
  never used, then the function's own assembler code is never referenced.
  In this case, GCC does not actually output assembler code for the
! function, unless you specify the option '-fkeep-inline-functions'.  If
  there is a nonintegrated call, then the function is compiled to
  assembler code as usual.  The function must also be compiled as usual if
  the program refers to its address, because that cannot be inlined.
  
   Note that certain usages in a function definition can make it
  unsuitable for inline substitution.  Among these usages are: variadic
! functions, use of 'alloca', use of computed goto (*note Labels as
  Values::), use of nonlocal goto, use of nested functions, use of
! 'setjmp', use of '__builtin_longjmp' and use of '__builtin_return' or
! '__builtin_apply_args'.  Using '-Winline' warns when a function marked
! 'inline' could not be substituted, and gives the reason for the failure.
  
   As required by ISO C++, GCC considers member functions defined within
  the body of a class to be marked inline even if they are not explicitly
! declared with the 'inline' keyword.  You can override this with
! '-fno-default-inline'; *note Options Controlling C++ Dialect: C++
  Dialect Options.
  
   GCC does not inline any functions when not optimizing unless you
! specify the 'always_inline' attribute for the function, like this:
  
       /* Prototype.  */
       inline void foo (const char) __attribute__((always_inline));
  
   The remainder of this section is specific to GNU C90 inlining.
  
!  When an inline function is not 'static', then the compiler must assume
  that there may be calls from other source files; since a global symbol
  can be defined only once in any program, the function must not be
  defined in the other source files, so the calls therein cannot be
! integrated.  Therefore, a non-'static' inline function is always
  compiled on its own in the usual fashion.
  
!  If you specify both 'inline' and 'extern' in the function definition,
  then the definition is used only for inlining.  In no case is the
  function compiled on its own, not even if you refer to its address
  explicitly.  Such an address becomes an external reference, as if you
  had only declared the function, and had not defined it.
  
!  This combination of 'inline' and 'extern' has almost the effect of a
  macro.  The way to use it is to put a function definition in a header
  file with these keywords, and put another copy of the definition
! (lacking 'inline' and 'extern') in a library file.  The definition in
  the header file causes most calls to the function to be inlined.  If any
  uses of the function remain, they refer to the single copy in the
  library.
--- 44341,44396 ----
       }
  
   In both of these common cases, the program behaves the same as if you
! had not used the ‘inline’ keyword, except for its speed.
  
!  When a function is both inline and ‘static’, if all calls to the
  function are integrated into the caller, and the function's address is
  never used, then the function's own assembler code is never referenced.
  In this case, GCC does not actually output assembler code for the
! function, unless you specify the option ‘-fkeep-inline-functions’.  If
  there is a nonintegrated call, then the function is compiled to
  assembler code as usual.  The function must also be compiled as usual if
  the program refers to its address, because that cannot be inlined.
  
   Note that certain usages in a function definition can make it
  unsuitable for inline substitution.  Among these usages are: variadic
! functions, use of ‘alloca’, use of computed goto (*note Labels as
  Values::), use of nonlocal goto, use of nested functions, use of
! ‘setjmp’, use of ‘__builtin_longjmp’ and use of ‘__builtin_return’ or
! ‘__builtin_apply_args’.  Using ‘-Winline’ warns when a function marked
! ‘inline’ could not be substituted, and gives the reason for the failure.
  
   As required by ISO C++, GCC considers member functions defined within
  the body of a class to be marked inline even if they are not explicitly
! declared with the ‘inline’ keyword.  You can override this with
! ‘-fno-default-inline’; *note Options Controlling C++ Dialect: C++
  Dialect Options.
  
   GCC does not inline any functions when not optimizing unless you
! specify the ‘always_inline’ attribute for the function, like this:
  
       /* Prototype.  */
       inline void foo (const char) __attribute__((always_inline));
  
   The remainder of this section is specific to GNU C90 inlining.
  
!  When an inline function is not ‘static’, then the compiler must assume
  that there may be calls from other source files; since a global symbol
  can be defined only once in any program, the function must not be
  defined in the other source files, so the calls therein cannot be
! integrated.  Therefore, a non-‘static’ inline function is always
  compiled on its own in the usual fashion.
  
!  If you specify both ‘inline’ and ‘extern’ in the function definition,
  then the definition is used only for inlining.  In no case is the
  function compiled on its own, not even if you refer to its address
  explicitly.  Such an address becomes an external reference, as if you
  had only declared the function, and had not defined it.
  
!  This combination of ‘inline’ and ‘extern’ has almost the effect of a
  macro.  The way to use it is to put a function definition in a header
  file with these keywords, and put another copy of the definition
! (lacking ‘inline’ and ‘extern’) in a library file.  The definition in
  the header file causes most calls to the function to be inlined.  If any
  uses of the function remain, they refer to the single copy in the
  library.
*************** File: gcc.info,  Node: Const and Volatil
*** 44391,44402 ****
  6.46 Const and Volatile Functions
  =================================
  
! The C standard explicitly leaves the behavior of the 'const' and
! 'volatile' type qualifiers applied to functions undefined; these
! constructs can only arise through the use of 'typedef'.  As an
! extension, GCC defines this use of the 'const' qualifier to have the
! same meaning as the GCC 'const' function attribute, and the 'volatile'
! qualifier to be equivalent to the 'noreturn' attribute.  *Note Common
  Function Attributes::, for more information.
  
   As examples of this usage,
--- 44401,44412 ----
  6.46 Const and Volatile Functions
  =================================
  
! The C standard explicitly leaves the behavior of the ‘const’ and
! ‘volatile’ type qualifiers applied to functions undefined; these
! constructs can only arise through the use of ‘typedef’.  As an
! extension, GCC defines this use of the ‘const’ qualifier to have the
! same meaning as the GCC ‘const’ function attribute, and the ‘volatile’
! qualifier to be equivalent to the ‘noreturn’ attribute.  *Note Common
  Function Attributes::, for more information.
  
   As examples of this usage,
*************** Function Attributes::, for more informat
*** 44414,44420 ****
  
   In general, using function attributes instead is preferred, since the
  attributes make both the intent of the code and its reliance on a GNU
! extension explicit.  Additionally, using 'const' and 'volatile' in this
  way is specific to GNU C and does not work in GNU C++.
  
  
--- 44424,44430 ----
  
   In general, using function attributes instead is preferred, since the
  attributes make both the intent of the code and its reliance on a GNU
! extension explicit.  Additionally, using ‘const’ and ‘volatile’ in this
  way is specific to GNU C and does not work in GNU C++.
  
  
*************** File: gcc.info,  Node: Using Assembly La
*** 44494,44519 ****
  6.48 How to Use Inline Assembly Language in C Code
  ==================================================
  
! The 'asm' keyword allows you to embed assembler instructions within C
! code.  GCC provides two forms of inline 'asm' statements.  A "basic
! 'asm'" statement is one with no operands (*note Basic Asm::), while an
! "extended 'asm'" statement (*note Extended Asm::) includes one or more
  operands.  The extended form is preferred for mixing C and assembly
  language within a function, but to include assembly language at top
! level you must use basic 'asm'.
  
!  You can also use the 'asm' keyword to override the assembler name for a
  C symbol, or to place a C variable in a specific register.
  
  * Menu:
  
  * Basic Asm::          Inline assembler without operands.
  * Extended Asm::       Inline assembler with operands.
! * Constraints::        Constraints for 'asm' operands
  * Asm Labels::         Specifying the assembler name to use for a C symbol.
  * Explicit Register Variables::  Defining variables residing in specified
                         registers.
! * Size of an asm::     How GCC calculates the size of an 'asm' block.
  
  
  File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
--- 44504,44529 ----
  6.48 How to Use Inline Assembly Language in C Code
  ==================================================
  
! The ‘asm’ keyword allows you to embed assembler instructions within C
! code.  GCC provides two forms of inline ‘asm’ statements.  A “basic
! ‘asm’” statement is one with no operands (*note Basic Asm::), while an
! “extended ‘asm’” statement (*note Extended Asm::) includes one or more
  operands.  The extended form is preferred for mixing C and assembly
  language within a function, but to include assembly language at top
! level you must use basic ‘asm’.
  
!  You can also use the ‘asm’ keyword to override the assembler name for a
  C symbol, or to place a C variable in a specific register.
  
  * Menu:
  
  * Basic Asm::          Inline assembler without operands.
  * Extended Asm::       Inline assembler with operands.
! * Constraints::        Constraints for ‘asm’ operands
  * Asm Labels::         Specifying the assembler name to use for a C symbol.
  * Explicit Register Variables::  Defining variables residing in specified
                         registers.
! * Size of an asm::     How GCC calculates the size of an ‘asm’ block.
  
  
  File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
*************** File: gcc.info,  Node: Basic Asm,  Next:
*** 44521,44546 ****
  6.48.1 Basic Asm -- Assembler Instructions Without Operands
  -----------------------------------------------------------
  
! A basic 'asm' statement has the following syntax:
  
       asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
  
!  For the C language, the 'asm' keyword is a GNU extension.  When writing
! C code that can be compiled with '-ansi' and the '-std' options that
! select C dialects without GNU extensions, use '__asm__' instead of 'asm'
! (*note Alternate Keywords::).  For the C++ language, 'asm' is a standard
! keyword, but '__asm__' can be used for code compiled with '-fno-asm'.
  
  Qualifiers
  ..........
  
! 'volatile'
!      The optional 'volatile' qualifier has no effect.  All basic 'asm'
       blocks are implicitly volatile.
  
! 'inline'
!      If you use the 'inline' qualifier, then for inlining purposes the
!      size of the 'asm' statement is taken as the smallest size possible
       (*note Size of an asm::).
  
  Parameters
--- 44531,44556 ----
  6.48.1 Basic Asm -- Assembler Instructions Without Operands
  -----------------------------------------------------------
  
! A basic ‘asm’ statement has the following syntax:
  
       asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
  
!  For the C language, the ‘asm’ keyword is a GNU extension.  When writing
! C code that can be compiled with ‘-ansi’ and the ‘-std’ options that
! select C dialects without GNU extensions, use ‘__asm__’ instead of ‘asm’
! (*note Alternate Keywords::).  For the C++ language, ‘asm’ is a standard
! keyword, but ‘__asm__’ can be used for code compiled with ‘-fno-asm’.
  
  Qualifiers
  ..........
  
! ‘volatile’
!      The optional ‘volatile’ qualifier has no effect.  All basic ‘asm’
       blocks are implicitly volatile.
  
! ‘inline’
!      If you use the ‘inline’ qualifier, then for inlining purposes the
!      size of the ‘asm’ statement is taken as the smallest size possible
       (*note Size of an asm::).
  
  Parameters
*************** ASSEMBLERINSTRUCTIONS
*** 44554,44640 ****
       whether they are valid assembler input.
  
       You may place multiple assembler instructions together in a single
!      'asm' string, separated by the characters normally used in assembly
       code for the system.  A combination that works in most places is a
       newline to break the line, plus a tab character (written as
!      '\n\t').  Some assemblers allow semicolons as a line separator.
       However, note that some assembler dialects use semicolons to start
       a comment.
  
  Remarks
  .......
  
! Using extended 'asm' (*note Extended Asm::) typically produces smaller,
  safer, and more efficient code, and in most cases it is a better
! solution than basic 'asm'.  However, there are two situations where only
! basic 'asm' can be used:
  
!    * Extended 'asm' statements have to be inside a C function, so to
       write inline assembly language at file scope ("top-level"), outside
!      of C functions, you must use basic 'asm'.  You can use this
       technique to emit assembler directives, define assembly language
       macros that can be invoked elsewhere in the file, or write entire
!      functions in assembly language.  Basic 'asm' statements outside of
       functions may not use any qualifiers.
  
!    * Functions declared with the 'naked' attribute also require basic
!      'asm' (*note Function Attributes::).
  
!  Safely accessing C data and calling functions from basic 'asm' is more
  complex than it may appear.  To access C data, it is better to use
! extended 'asm'.
  
!  Do not expect a sequence of 'asm' statements to remain perfectly
  consecutive after compilation.  If certain instructions need to remain
! consecutive in the output, put them in a single multi-instruction 'asm'
! statement.  Note that GCC's optimizers can move 'asm' statements
  relative to other code, including across jumps.
  
!  'asm' statements may not perform jumps into other 'asm' statements.
  GCC does not know about these jumps, and therefore cannot take account
! of them when deciding how to optimize.  Jumps from 'asm' to C labels are
! only supported in extended 'asm'.
  
   Under certain circumstances, GCC may duplicate (or remove duplicates
  of) your assembly code when optimizing.  This can lead to unexpected
  duplicate symbol errors during compilation if your assembly code defines
  symbols or labels.
  
!  *Warning:* The C standards do not specify semantics for 'asm', making
  it a potential source of incompatibilities between compilers.  These
  incompatibilities may not produce compiler warnings/errors.
  
!  GCC does not parse basic 'asm''s ASSEMBLERINSTRUCTIONS, which means
  there is no way to communicate to the compiler what is happening inside
! them.  GCC has no visibility of symbols in the 'asm' and may discard
  them as unreferenced.  It also does not know about side effects of the
  assembler code, such as modifications to memory or registers.  Unlike
  some compilers, GCC assumes that no changes to general purpose registers
  occur.  This assumption may change in a future release.
  
   To avoid complications from future changes to the semantics and the
! compatibility issues between compilers, consider replacing basic 'asm'
! with extended 'asm'.  See How to convert from basic asm to extended asm
  (https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
  about how to perform this conversion.
  
!  The compiler copies the assembler instructions in a basic 'asm'
  verbatim to the assembly language output file, without processing
! dialects or any of the '%' operators that are available with extended
! 'asm'.  This results in minor differences between basic 'asm' strings
! and extended 'asm' templates.  For example, to refer to registers you
! might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.
  
   On targets such as x86 that support multiple assembler dialects, all
! basic 'asm' blocks use the assembler dialect specified by the '-masm'
! command-line option (*note x86 Options::).  Basic 'asm' provides no
  mechanism to provide different assembler strings for different dialects.
  
!  For basic 'asm' with non-empty assembler string GCC assumes the
  assembler block does not change any general purpose registers, but it
  may read or write any globally accessible variable.
  
!  Here is an example of basic 'asm' for i386:
  
       /* Note that this code will not compile with -masm=intel */
       #define DebugBreak() asm("int $3")
--- 44564,44650 ----
       whether they are valid assembler input.
  
       You may place multiple assembler instructions together in a single
!      ‘asm’ string, separated by the characters normally used in assembly
       code for the system.  A combination that works in most places is a
       newline to break the line, plus a tab character (written as
!      ‘\n\t’).  Some assemblers allow semicolons as a line separator.
       However, note that some assembler dialects use semicolons to start
       a comment.
  
  Remarks
  .......
  
! Using extended ‘asm’ (*note Extended Asm::) typically produces smaller,
  safer, and more efficient code, and in most cases it is a better
! solution than basic ‘asm’.  However, there are two situations where only
! basic ‘asm’ can be used:
  
!    • Extended ‘asm’ statements have to be inside a C function, so to
       write inline assembly language at file scope ("top-level"), outside
!      of C functions, you must use basic ‘asm’.  You can use this
       technique to emit assembler directives, define assembly language
       macros that can be invoked elsewhere in the file, or write entire
!      functions in assembly language.  Basic ‘asm’ statements outside of
       functions may not use any qualifiers.
  
!    • Functions declared with the ‘naked’ attribute also require basic
!      ‘asm’ (*note Function Attributes::).
  
!  Safely accessing C data and calling functions from basic ‘asm’ is more
  complex than it may appear.  To access C data, it is better to use
! extended ‘asm’.
  
!  Do not expect a sequence of ‘asm’ statements to remain perfectly
  consecutive after compilation.  If certain instructions need to remain
! consecutive in the output, put them in a single multi-instruction ‘asm’
! statement.  Note that GCC's optimizers can move ‘asm’ statements
  relative to other code, including across jumps.
  
!  ‘asm’ statements may not perform jumps into other ‘asm’ statements.
  GCC does not know about these jumps, and therefore cannot take account
! of them when deciding how to optimize.  Jumps from ‘asm’ to C labels are
! only supported in extended ‘asm’.
  
   Under certain circumstances, GCC may duplicate (or remove duplicates
  of) your assembly code when optimizing.  This can lead to unexpected
  duplicate symbol errors during compilation if your assembly code defines
  symbols or labels.
  
!  *Warning:* The C standards do not specify semantics for ‘asm’, making
  it a potential source of incompatibilities between compilers.  These
  incompatibilities may not produce compiler warnings/errors.
  
!  GCC does not parse basic ‘asm’'s ASSEMBLERINSTRUCTIONS, which means
  there is no way to communicate to the compiler what is happening inside
! them.  GCC has no visibility of symbols in the ‘asm’ and may discard
  them as unreferenced.  It also does not know about side effects of the
  assembler code, such as modifications to memory or registers.  Unlike
  some compilers, GCC assumes that no changes to general purpose registers
  occur.  This assumption may change in a future release.
  
   To avoid complications from future changes to the semantics and the
! compatibility issues between compilers, consider replacing basic ‘asm’
! with extended ‘asm’.  See How to convert from basic asm to extended asm
  (https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
  about how to perform this conversion.
  
!  The compiler copies the assembler instructions in a basic ‘asm’
  verbatim to the assembly language output file, without processing
! dialects or any of the ‘%’ operators that are available with extended
! ‘asm’.  This results in minor differences between basic ‘asm’ strings
! and extended ‘asm’ templates.  For example, to refer to registers you
! might use ‘%eax’ in basic ‘asm’ and ‘%%eax’ in extended ‘asm’.
  
   On targets such as x86 that support multiple assembler dialects, all
! basic ‘asm’ blocks use the assembler dialect specified by the ‘-masm’
! command-line option (*note x86 Options::).  Basic ‘asm’ provides no
  mechanism to provide different assembler strings for different dialects.
  
!  For basic ‘asm’ with non-empty assembler string GCC assumes the
  assembler block does not change any general purpose registers, but it
  may read or write any globally accessible variable.
  
!  Here is an example of basic ‘asm’ for i386:
  
       /* Note that this code will not compile with -masm=intel */
       #define DebugBreak() asm("int $3")
*************** File: gcc.info,  Node: Extended Asm,  Ne
*** 44645,44653 ****
  6.48.2 Extended Asm - Assembler Instructions with C Expression Operands
  -----------------------------------------------------------------------
  
! With extended 'asm' you can read and write C variables from assembler
! and perform jumps from assembler code to C labels.  Extended 'asm'
! syntax uses colons (':') to delimit the operand parameters after the
  assembler template:
  
       asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
--- 44655,44663 ----
  6.48.2 Extended Asm - Assembler Instructions with C Expression Operands
  -----------------------------------------------------------------------
  
! With extended ‘asm’ you can read and write C variables from assembler
! and perform jumps from assembler code to C labels.  Extended ‘asm’
! syntax uses colons (‘:’) to delimit the operand parameters after the
  assembler template:
  
       asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
*************** assembler template:
*** 44660,44689 ****
                             : INPUTOPERANDS
                             : CLOBBERS
                             : GOTOLABELS)
!  where in the last form, ASM-QUALIFIERS contains 'goto' (and in the
  first form, not).
  
!  The 'asm' keyword is a GNU extension.  When writing code that can be
! compiled with '-ansi' and the various '-std' options, use '__asm__'
! instead of 'asm' (*note Alternate Keywords::).
  
  Qualifiers
  ..........
  
! 'volatile'
!      The typical use of extended 'asm' statements is to manipulate input
!      values to produce output values.  However, your 'asm' statements
       may also produce side effects.  If so, you may need to use the
!      'volatile' qualifier to disable certain optimizations.  *Note
       Volatile::.
  
! 'inline'
!      If you use the 'inline' qualifier, then for inlining purposes the
!      size of the 'asm' statement is taken as the smallest size possible
       (*note Size of an asm::).
  
! 'goto'
!      This qualifier informs the compiler that the 'asm' statement may
       perform a jump to one of the labels listed in the GOTOLABELS.
       *Note GotoLabels::.
  
--- 44670,44699 ----
                             : INPUTOPERANDS
                             : CLOBBERS
                             : GOTOLABELS)
!  where in the last form, ASM-QUALIFIERS contains ‘goto’ (and in the
  first form, not).
  
!  The ‘asm’ keyword is a GNU extension.  When writing code that can be
! compiled with ‘-ansi’ and the various ‘-std’ options, use ‘__asm__’
! instead of ‘asm’ (*note Alternate Keywords::).
  
  Qualifiers
  ..........
  
! ‘volatile’
!      The typical use of extended ‘asm’ statements is to manipulate input
!      values to produce output values.  However, your ‘asm’ statements
       may also produce side effects.  If so, you may need to use the
!      ‘volatile’ qualifier to disable certain optimizations.  *Note
       Volatile::.
  
! ‘inline’
!      If you use the ‘inline’ qualifier, then for inlining purposes the
!      size of the ‘asm’ statement is taken as the smallest size possible
       (*note Size of an asm::).
  
! ‘goto’
!      This qualifier informs the compiler that the ‘asm’ statement may
       perform a jump to one of the labels listed in the GOTOLABELS.
       *Note GotoLabels::.
  
*************** CLOBBERS
*** 44711,44721 ****
       is permitted.  *Note Clobbers and Scratch Registers::.
  
  GOTOLABELS
!      When you are using the 'goto' form of 'asm', this section contains
       the list of all C labels to which the code in the ASSEMBLERTEMPLATE
       may jump.  *Note GotoLabels::.
  
!      'asm' statements may not perform jumps into other 'asm' statements,
       only to the listed GOTOLABELS.  GCC's optimizers do not know about
       other jumps; therefore they cannot take account of them when
       deciding how to optimize.
--- 44721,44731 ----
       is permitted.  *Note Clobbers and Scratch Registers::.
  
  GOTOLABELS
!      When you are using the ‘goto’ form of ‘asm’, this section contains
       the list of all C labels to which the code in the ASSEMBLERTEMPLATE
       may jump.  *Note GotoLabels::.
  
!      ‘asm’ statements may not perform jumps into other ‘asm’ statements,
       only to the listed GOTOLABELS.  GCC's optimizers do not know about
       other jumps; therefore they cannot take account of them when
       deciding how to optimize.
*************** GOTOLABELS
*** 44725,44744 ****
  Remarks
  .......
  
! The 'asm' statement allows you to include assembly instructions directly
  within C code.  This may help you to maximize performance in
  time-sensitive code or to access assembly instructions that are not
  readily available to C programs.
  
!  Note that extended 'asm' statements must be inside a function.  Only
! basic 'asm' may be outside functions (*note Basic Asm::).  Functions
! declared with the 'naked' attribute also require basic 'asm' (*note
  Function Attributes::).
  
!  While the uses of 'asm' are many and varied, it may help to think of an
! 'asm' statement as a series of low-level instructions that convert input
  parameters to output parameters.  So a simple (if not particularly
! useful) example for i386 using 'asm' might look like this:
  
       int src = 1;
       int dst;
--- 44735,44754 ----
  Remarks
  .......
  
! The ‘asm’ statement allows you to include assembly instructions directly
  within C code.  This may help you to maximize performance in
  time-sensitive code or to access assembly instructions that are not
  readily available to C programs.
  
!  Note that extended ‘asm’ statements must be inside a function.  Only
! basic ‘asm’ may be outside functions (*note Basic Asm::).  Functions
! declared with the ‘naked’ attribute also require basic ‘asm’ (*note
  Function Attributes::).
  
!  While the uses of ‘asm’ are many and varied, it may help to think of an
! ‘asm’ statement as a series of low-level instructions that convert input
  parameters to output parameters.  So a simple (if not particularly
! useful) example for i386 using ‘asm’ might look like this:
  
       int src = 1;
       int dst;
*************** useful) example for i386 using 'asm' mig
*** 44750,44774 ****
  
       printf("%d\n", dst);
  
!  This code copies 'src' to 'dst' and add 1 to 'dst'.
  
  6.48.2.1 Volatile
  .................
  
! GCC's optimizers sometimes discard 'asm' statements if they determine
  there is no need for the output variables.  Also, the optimizers may
  move code out of loops if they believe that the code will always return
  the same result (i.e. none of its input values change between calls).
! Using the 'volatile' qualifier disables these optimizations.  'asm'
! statements that have no output operands and 'asm goto' statements, are
  implicitly volatile.
  
   This i386 code demonstrates a case that does not use (or require) the
! 'volatile' qualifier.  If it is performing assertion checking, this code
! uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
  unreferenced by any code.  As a result, the optimizers can discard the
! 'asm' statement, which in turn removes the need for the entire 'DoCheck'
! routine.  By omitting the 'volatile' qualifier when it isn't needed you
  allow the optimizers to produce the most efficient code possible.
  
       void DoCheck(uint32_t dwSomeValue)
--- 44760,44784 ----
  
       printf("%d\n", dst);
  
!  This code copies ‘src’ to ‘dst’ and add 1 to ‘dst’.
  
  6.48.2.1 Volatile
  .................
  
! GCC's optimizers sometimes discard ‘asm’ statements if they determine
  there is no need for the output variables.  Also, the optimizers may
  move code out of loops if they believe that the code will always return
  the same result (i.e. none of its input values change between calls).
! Using the ‘volatile’ qualifier disables these optimizations.  ‘asm’
! statements that have no output operands and ‘asm goto’ statements, are
  implicitly volatile.
  
   This i386 code demonstrates a case that does not use (or require) the
! ‘volatile’ qualifier.  If it is performing assertion checking, this code
! uses ‘asm’ to perform the validation.  Otherwise, ‘dwRes’ is
  unreferenced by any code.  As a result, the optimizers can discard the
! ‘asm’ statement, which in turn removes the need for the entire ‘DoCheck’
! routine.  By omitting the ‘volatile’ qualifier when it isn't needed you
  allow the optimizers to produce the most efficient code possible.
  
       void DoCheck(uint32_t dwSomeValue)
*************** allow the optimizers to produce the most
*** 44785,44793 ****
       }
  
   The next example shows a case where the optimizers can recognize that
! the input ('dwSomeValue') never changes during the execution of the
! function and can therefore move the 'asm' outside the loop to produce
! more efficient code.  Again, using the 'volatile' qualifier disables
  this type of optimization.
  
       void do_print(uint32_t dwSomeValue)
--- 44795,44803 ----
       }
  
   The next example shows a case where the optimizers can recognize that
! the input (‘dwSomeValue’) never changes during the execution of the
! function and can therefore move the ‘asm’ outside the loop to produce
! more efficient code.  Again, using the ‘volatile’ qualifier disables
  this type of optimization.
  
       void do_print(uint32_t dwSomeValue)
*************** this type of optimization.
*** 44807,44815 ****
       }
  
   The following example demonstrates a case where you need to use the
! 'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
! the computer's time-stamp counter.  Without the 'volatile' qualifier,
! the optimizers might assume that the 'asm' block will always return the
  same value and therefore optimize away the second call.
  
       uint64_t msr;
--- 44817,44825 ----
       }
  
   The following example demonstrates a case where you need to use the
! ‘volatile’ qualifier.  It uses the x86 ‘rdtsc’ instruction, which reads
! the computer's time-stamp counter.  Without the ‘volatile’ qualifier,
! the optimizers might assume that the ‘asm’ block will always return the
  same value and therefore optimize away the second call.
  
       uint64_t msr;
*************** same value and therefore optimize away t
*** 44839,44865 ****
  the earlier examples.  They do not move it out of loops or omit it on
  the assumption that the result from a previous call is still valid.
  
!  Note that the compiler can move even 'volatile asm' instructions
  relative to other code, including across jump instructions.  For
  example, on many targets there is a system register that controls the
! rounding mode of floating-point operations.  Setting it with a 'volatile
! asm' statement, as in the following PowerPC example, does not work
  reliably.
  
       asm volatile("mtfsf 255, %0" : : "f" (fpenv));
       sum = x + y;
  
!  The compiler may move the addition back before the 'volatile asm'
  statement.  To make it work as expected, add an artificial dependency to
! the 'asm' by referencing a variable in the subsequent code, for example:
  
       asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
       sum = x + y;
  
   Under certain circumstances, GCC may duplicate (or remove duplicates
  of) your assembly code when optimizing.  This can lead to unexpected
! duplicate symbol errors during compilation if your 'asm' code defines
! symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
  resolve this problem.
  
  6.48.2.2 Assembler Template
--- 44849,44875 ----
  the earlier examples.  They do not move it out of loops or omit it on
  the assumption that the result from a previous call is still valid.
  
!  Note that the compiler can move even ‘volatile asm’ instructions
  relative to other code, including across jump instructions.  For
  example, on many targets there is a system register that controls the
! rounding mode of floating-point operations.  Setting it with a ‘volatile
! asm’ statement, as in the following PowerPC example, does not work
  reliably.
  
       asm volatile("mtfsf 255, %0" : : "f" (fpenv));
       sum = x + y;
  
!  The compiler may move the addition back before the ‘volatile asm’
  statement.  To make it work as expected, add an artificial dependency to
! the ‘asm’ by referencing a variable in the subsequent code, for example:
  
       asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
       sum = x + y;
  
   Under certain circumstances, GCC may duplicate (or remove duplicates
  of) your assembly code when optimizing.  This can lead to unexpected
! duplicate symbol errors during compilation if your ‘asm’ code defines
! symbols or labels.  Using ‘%=’ (*note AssemblerTemplate::) may help
  resolve this problem.
  
  6.48.2.2 Assembler Template
*************** or even whether they are valid assembler
*** 44875,44891 ****
  the statements (*note Size of an asm::).
  
   You may place multiple assembler instructions together in a single
! 'asm' string, separated by the characters normally used in assembly code
  for the system.  A combination that works in most places is a newline to
  break the line, plus a tab character to move to the instruction field
! (written as '\n\t').  Some assemblers allow semicolons as a line
  separator.  However, note that some assembler dialects use semicolons to
  start a comment.
  
!  Do not expect a sequence of 'asm' statements to remain perfectly
! consecutive after compilation, even when you are using the 'volatile'
  qualifier.  If certain instructions need to remain consecutive in the
! output, put them in a single multi-instruction 'asm' statement.
  
   Accessing data from C programs without using input/output operands
  (such as by using global symbols directly from the assembler template)
--- 44885,44901 ----
  the statements (*note Size of an asm::).
  
   You may place multiple assembler instructions together in a single
! ‘asm’ string, separated by the characters normally used in assembly code
  for the system.  A combination that works in most places is a newline to
  break the line, plus a tab character to move to the instruction field
! (written as ‘\n\t’).  Some assemblers allow semicolons as a line
  separator.  However, note that some assembler dialects use semicolons to
  start a comment.
  
!  Do not expect a sequence of ‘asm’ statements to remain perfectly
! consecutive after compilation, even when you are using the ‘volatile’
  qualifier.  If certain instructions need to remain consecutive in the
! output, put them in a single multi-instruction ‘asm’ statement.
  
   Accessing data from C programs without using input/output operands
  (such as by using global symbols directly from the assembler template)
*************** Special format strings
*** 44904,44932 ****
  In addition to the tokens described by the input, output, and goto
  operands, these tokens have special meanings in the assembler template:
  
! '%%'
!      Outputs a single '%' into the assembler code.
  
! '%='
!      Outputs a number that is unique to each instance of the 'asm'
       statement in the entire compilation.  This option is useful when
       creating local labels and referring to them multiple times in a
       single template that generates multiple assembler instructions.
  
! '%{'
! '%|'
! '%}'
!      Outputs '{', '|', and '}' characters (respectively) into the
       assembler code.  When unescaped, these characters have special
       meaning to indicate multiple assembler dialects, as described
       below.
  
! Multiple assembler dialects in 'asm' templates
  ..............................................
  
  On targets such as x86, GCC supports multiple assembler dialects.  The
! '-masm' option controls which dialect GCC uses as its default for inline
! assembler.  The target-specific documentation for the '-masm' option
  contains the list of supported dialects, as well as the default dialect
  if the option is not specified.  This information may be important to
  understand, since assembler code that works correctly when compiled
--- 44914,44942 ----
  In addition to the tokens described by the input, output, and goto
  operands, these tokens have special meanings in the assembler template:
  
! ‘%%’
!      Outputs a single ‘%’ into the assembler code.
  
! ‘%=’
!      Outputs a number that is unique to each instance of the ‘asm’
       statement in the entire compilation.  This option is useful when
       creating local labels and referring to them multiple times in a
       single template that generates multiple assembler instructions.
  
! ‘%{’
! ‘%|’
! ‘%}’
!      Outputs ‘{’, ‘|’, and ‘}’ characters (respectively) into the
       assembler code.  When unescaped, these characters have special
       meaning to indicate multiple assembler dialects, as described
       below.
  
! Multiple assembler dialects in ‘asm’ templates
  ..............................................
  
  On targets such as x86, GCC supports multiple assembler dialects.  The
! ‘-masm’ option controls which dialect GCC uses as its default for inline
! assembler.  The target-specific documentation for the ‘-masm’ option
  contains the list of supported dialects, as well as the default dialect
  if the option is not specified.  This information may be important to
  understand, since assembler code that works correctly when compiled
*************** compilation options), use constructs of
*** 44939,44950 ****
  
       { dialect0 | dialect1 | dialect2... }
  
!  This construct outputs 'dialect0' when using dialect #0 to compile the
! code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
  within the braces than the number of dialects the compiler supports, the
  construct outputs nothing.
  
!  For example, if an x86 compiler supports two dialects ('att', 'intel'),
  an assembler template such as this:
  
       "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
--- 44949,44960 ----
  
       { dialect0 | dialect1 | dialect2... }
  
!  This construct outputs ‘dialect0’ when using dialect #0 to compile the
! code, ‘dialect1’ for dialect #1, etc.  If there are fewer alternatives
  within the braces than the number of dialects the compiler supports, the
  construct outputs nothing.
  
!  For example, if an x86 compiler supports two dialects (‘att’, ‘intel’),
  an assembler template such as this:
  
       "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
*************** corresponds to either
*** 44968,44978 ****
  6.48.2.3 Output Operands
  ........................
  
! An 'asm' statement has zero or more output operands indicating the names
  of C variables modified by the assembler code.
  
!  In this i386 example, 'old' (referred to in the template string as
! '%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:
  
       bool old;
  
--- 44978,44988 ----
  6.48.2.3 Output Operands
  ........................
  
! An ‘asm’ statement has zero or more output operands indicating the names
  of C variables modified by the assembler code.
  
!  In this i386 example, ‘old’ (referred to in the template string as
! ‘%0’) and ‘*Base’ (as ‘%1’) are outputs and ‘Offset’ (‘%2’) is an input:
  
       bool old;
  
*************** of C variables modified by the assembler
*** 44991,45024 ****
  ASMSYMBOLICNAME
       Specifies a symbolic name for the operand.  Reference the name in
       the assembler template by enclosing it in square brackets (i.e.
!      '%[Value]').  The scope of the name is the 'asm' statement that
       contains the definition.  Any valid C variable name is acceptable,
       including names already defined in the surrounding code.  No two
!      operands within the same 'asm' statement can use the same symbolic
       name.
  
       When not using an ASMSYMBOLICNAME, use the (zero-based) position of
       the operand in the list of operands in the assembler template.  For
!      example if there are three output operands, use '%0' in the
!      template to refer to the first, '%1' for the second, and '%2' for
       the third.
  
  CONSTRAINT
       A string constant specifying constraints on the placement of the
       operand; *Note Constraints::, for details.
  
!      Output constraints must begin with either '=' (a variable
!      overwriting an existing value) or '+' (when reading and writing).
!      When using '=', do not assume the location contains the existing
!      value on entry to the 'asm', except when the operand is tied to an
       input; *note Input Operands: InputOperands.
  
       After the prefix, there must be one or more additional constraints
       (*note Constraints::) that describe where the value resides.
!      Common constraints include 'r' for register and 'm' for memory.
       When you list more than one possible location (for example,
!      '"=rm"'), the compiler chooses the most efficient one based on the
!      current context.  If you list as many alternates as the 'asm'
       statement allows, you permit the optimizers to produce the best
       possible code.  If you must use a specific register, but your
       Machine Constraints do not provide sufficient control to select the
--- 45001,45034 ----
  ASMSYMBOLICNAME
       Specifies a symbolic name for the operand.  Reference the name in
       the assembler template by enclosing it in square brackets (i.e.
!      ‘%[Value]’).  The scope of the name is the ‘asm’ statement that
       contains the definition.  Any valid C variable name is acceptable,
       including names already defined in the surrounding code.  No two
!      operands within the same ‘asm’ statement can use the same symbolic
       name.
  
       When not using an ASMSYMBOLICNAME, use the (zero-based) position of
       the operand in the list of operands in the assembler template.  For
!      example if there are three output operands, use ‘%0’ in the
!      template to refer to the first, ‘%1’ for the second, and ‘%2’ for
       the third.
  
  CONSTRAINT
       A string constant specifying constraints on the placement of the
       operand; *Note Constraints::, for details.
  
!      Output constraints must begin with either ‘=’ (a variable
!      overwriting an existing value) or ‘+’ (when reading and writing).
!      When using ‘=’, do not assume the location contains the existing
!      value on entry to the ‘asm’, except when the operand is tied to an
       input; *note Input Operands: InputOperands.
  
       After the prefix, there must be one or more additional constraints
       (*note Constraints::) that describe where the value resides.
!      Common constraints include ‘r’ for register and ‘m’ for memory.
       When you list more than one possible location (for example,
!      ‘"=rm"’), the compiler chooses the most efficient one based on the
!      current context.  If you list as many alternates as the ‘asm’
       statement allows, you permit the optimizers to produce the best
       possible code.  If you must use a specific register, but your
       Machine Constraints do not provide sufficient control to select the
*************** whether the operands have data types tha
*** 45039,45051 ****
  instruction being executed.  For output expressions that are not
  directly addressable (for example a bit-field), the constraint must
  allow a register.  In that case, GCC uses the register as the output of
! the 'asm', and then stores that register into the output.
  
!  Operands using the '+' constraint modifier count as two operands (that
  is, both as input and output) towards the total maximum of 30 operands
! per 'asm' statement.
  
!  Use the '&' constraint modifier (*note Modifiers::) on all output
  operands that must not overlap an input.  Otherwise, GCC may allocate
  the output operand in the same register as an unrelated input operand,
  on the assumption that the assembler code consumes its inputs before
--- 45049,45061 ----
  instruction being executed.  For output expressions that are not
  directly addressable (for example a bit-field), the constraint must
  allow a register.  In that case, GCC uses the register as the output of
! the ‘asm’, and then stores that register into the output.
  
!  Operands using the ‘+’ constraint modifier count as two operands (that
  is, both as input and output) towards the total maximum of 30 operands
! per ‘asm’ statement.
  
!  Use the ‘&’ constraint modifier (*note Modifiers::) on all output
  operands that must not overlap an input.  Otherwise, GCC may allocate
  the output operand in the same register as an unrelated input operand,
  on the assumption that the assembler code consumes its inputs before
*************** constraint.  The code generated by GCC t
*** 45058,45086 ****
  can contain registers which _might_ be shared by A, and GCC considers
  those registers to be inputs to the asm.  As above, GCC assumes that
  such input registers are consumed before any outputs are written.  This
! assumption may result in incorrect behavior if the 'asm' statement
! writes to A before using B.  Combining the '&' modifier with the
  register constraint on A ensures that modifying A does not affect the
  address referenced by B.  Otherwise, the location of B is undefined if A
  is modified before using B.
  
!  'asm' supports operand modifiers on operands (for example '%k2' instead
! of simply '%2').  *note Generic Operand modifiers:
  GenericOperandmodifiers. lists the modifiers that are available on all
  targets.  Other modifiers are hardware dependent.  For example, the list
  of supported modifiers for x86 is found at *note x86 Operand modifiers:
  x86Operandmodifiers.
  
!  If the C code that follows the 'asm' makes no use of any of the output
! operands, use 'volatile' for the 'asm' statement to prevent the
! optimizers from discarding the 'asm' statement as unneeded (see *note
  Volatile::).
  
   This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
! references the first output operand as '%0' (were there a second, it
! would be '%1', etc).  The number of the first input operand is one
  greater than that of the last output operand.  In this i386 example,
! that makes 'Mask' referenced as '%1':
  
       uint32_t Mask = 1234;
       uint32_t Index;
--- 45068,45096 ----
  can contain registers which _might_ be shared by A, and GCC considers
  those registers to be inputs to the asm.  As above, GCC assumes that
  such input registers are consumed before any outputs are written.  This
! assumption may result in incorrect behavior if the ‘asm’ statement
! writes to A before using B.  Combining the ‘&’ modifier with the
  register constraint on A ensures that modifying A does not affect the
  address referenced by B.  Otherwise, the location of B is undefined if A
  is modified before using B.
  
!  ‘asm’ supports operand modifiers on operands (for example ‘%k2’ instead
! of simply ‘%2’).  *note Generic Operand modifiers:
  GenericOperandmodifiers. lists the modifiers that are available on all
  targets.  Other modifiers are hardware dependent.  For example, the list
  of supported modifiers for x86 is found at *note x86 Operand modifiers:
  x86Operandmodifiers.
  
!  If the C code that follows the ‘asm’ makes no use of any of the output
! operands, use ‘volatile’ for the ‘asm’ statement to prevent the
! optimizers from discarding the ‘asm’ statement as unneeded (see *note
  Volatile::).
  
   This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
! references the first output operand as ‘%0’ (were there a second, it
! would be ‘%1’, etc).  The number of the first input operand is one
  greater than that of the last output operand.  In this i386 example,
! that makes ‘Mask’ referenced as ‘%1’:
  
       uint32_t Mask = 1234;
       uint32_t Index;
*************** that makes 'Mask' referenced as '%1':
*** 45090,45097 ****
            : "r" (Mask)
            : "cc");
  
!  That code overwrites the variable 'Index' ('='), placing the value in a
! register ('r').  Using the generic 'r' constraint instead of a
  constraint for a specific register allows the compiler to pick the
  register to use, which can result in more efficient code.  This may not
  be possible if an assembler instruction requires a specific register.
--- 45100,45107 ----
            : "r" (Mask)
            : "cc");
  
!  That code overwrites the variable ‘Index’ (‘=’), placing the value in a
! register (‘r’).  Using the generic ‘r’ constraint instead of a
  constraint for a specific register allows the compiler to pick the
  register to use, which can result in more efficient code.  This may not
  be possible if an assembler instruction requires a specific register.
*************** be possible if an assembler instruction
*** 45099,45107 ****
   The following i386 example uses the ASMSYMBOLICNAME syntax.  It
  produces the same result as the code above, but some may consider it
  more readable or more maintainable since reordering index numbers is not
! necessary when adding or removing operands.  The names 'aIndex' and
! 'aMask' are only used in this example to emphasize which names get used
! where.  It is acceptable to reuse the names 'Index' and 'Mask'.
  
       uint32_t Mask = 1234;
       uint32_t Index;
--- 45109,45117 ----
   The following i386 example uses the ASMSYMBOLICNAME syntax.  It
  produces the same result as the code above, but some may consider it
  more readable or more maintainable since reordering index numbers is not
! necessary when adding or removing operands.  The names ‘aIndex’ and
! ‘aMask’ are only used in this example to emphasize which names get used
! where.  It is acceptable to reuse the names ‘Index’ and ‘Mask’.
  
       uint32_t Mask = 1234;
       uint32_t Index;
*************** where.  It is acceptable to reuse the na
*** 45121,45137 ****
          : [d] "=rm" (d)
          : [e] "rm" (*e));
  
!  Here, 'd' may either be in a register or in memory.  Since the compiler
! might already have the current value of the 'uint32_t' location pointed
! to by 'e' in a register, you can enable it to choose the best location
! for 'd' by specifying both constraints.
  
  6.48.2.4 Flag Output Operands
  .............................
  
  Some targets have a special register that holds the "flags" for the
  result of an operation or comparison.  Normally, the contents of that
! register are either unmodifed by the asm, or the 'asm' statement is
  considered to clobber the contents.
  
   On some targets, a special form of output operand exists by which
--- 45131,45147 ----
          : [d] "=rm" (d)
          : [e] "rm" (*e));
  
!  Here, ‘d’ may either be in a register or in memory.  Since the compiler
! might already have the current value of the ‘uint32_t’ location pointed
! to by ‘e’ in a register, you can enable it to choose the best location
! for ‘d’ by specifying both constraints.
  
  6.48.2.4 Flag Output Operands
  .............................
  
  Some targets have a special register that holds the "flags" for the
  result of an operation or comparison.  Normally, the contents of that
! register are either unmodifed by the asm, or the ‘asm’ statement is
  considered to clobber the contents.
  
   On some targets, a special form of output operand exists by which
*************** conditions in the flags register may be
*** 45139,45244 ****
  conditions supported are target specific, but the general rule is that
  the output variable must be a scalar integer, and the value is boolean.
  When supported, the target defines the preprocessor symbol
! '__GCC_ASM_FLAG_OUTPUTS__'.
  
   Because of the special nature of the flag output operands, the
  constraint may not include alternatives.
  
   Most often, the target has only one flags register, and thus is an
  implied operand of many instructions.  In this case, the operand should
! not be referenced within the assembler template via '%0' etc, as there's
  no corresponding text in the assembly language.
  
  ARM
  AArch64
       The flag output constraints for the ARM family are of the form
!      '=@ccCOND' where COND is one of the standard conditions defined in
!      the ARM ARM for 'ConditionHolds'.
  
!      'eq'
            Z flag set, or equal
!      'ne'
            Z flag clear or not equal
!      'cs'
!      'hs'
            C flag set or unsigned greater than equal
!      'cc'
!      'lo'
            C flag clear or unsigned less than
!      'mi'
            N flag set or "minus"
!      'pl'
            N flag clear or "plus"
!      'vs'
            V flag set or signed overflow
!      'vc'
            V flag clear
!      'hi'
            unsigned greater than
!      'ls'
            unsigned less than equal
!      'ge'
            signed greater than equal
!      'lt'
            signed less than
!      'gt'
            signed greater than
!      'le'
            signed less than equal
  
       The flag output constraints are not supported in thumb1 mode.
  
  x86 family
       The flag output constraints for the x86 family are of the form
!      '=@ccCOND' where COND is one of the standard conditions defined in
!      the ISA manual for 'jCC' or 'setCC'.
  
!      'a'
            "above" or unsigned greater than
!      'ae'
            "above or equal" or unsigned greater than or equal
!      'b'
            "below" or unsigned less than
!      'be'
            "below or equal" or unsigned less than or equal
!      'c'
            carry flag set
!      'e'
!      'z'
            "equal" or zero flag set
!      'g'
            signed greater than
!      'ge'
            signed greater than or equal
!      'l'
            signed less than
!      'le'
            signed less than or equal
!      'o'
            overflow flag set
!      'p'
            parity flag set
!      's'
            sign flag set
!      'na'
!      'nae'
!      'nb'
!      'nbe'
!      'nc'
!      'ne'
!      'ng'
!      'nge'
!      'nl'
!      'nle'
!      'no'
!      'np'
!      'ns'
!      'nz'
            "not" FLAG, or inverted versions of those above
  
  s390
!      The flag output constraint for s390 is '=@cc'.  Only one such
!      constraint is allowed.  The variable has to be stored in a 'int'
       variable.
  
  6.48.2.5 Input Operands
--- 45149,45254 ----
  conditions supported are target specific, but the general rule is that
  the output variable must be a scalar integer, and the value is boolean.
  When supported, the target defines the preprocessor symbol
! ‘__GCC_ASM_FLAG_OUTPUTS__’.
  
   Because of the special nature of the flag output operands, the
  constraint may not include alternatives.
  
   Most often, the target has only one flags register, and thus is an
  implied operand of many instructions.  In this case, the operand should
! not be referenced within the assembler template via ‘%0’ etc, as there's
  no corresponding text in the assembly language.
  
  ARM
  AArch64
       The flag output constraints for the ARM family are of the form
!      ‘=@ccCOND’ where COND is one of the standard conditions defined in
!      the ARM ARM for ‘ConditionHolds’.
  
!      ‘eq’
            Z flag set, or equal
!      ‘ne’
            Z flag clear or not equal
!      ‘cs’
!      ‘hs’
            C flag set or unsigned greater than equal
!      ‘cc’
!      ‘lo’
            C flag clear or unsigned less than
!      ‘mi’
            N flag set or "minus"
!      ‘pl’
            N flag clear or "plus"
!      ‘vs’
            V flag set or signed overflow
!      ‘vc’
            V flag clear
!      ‘hi’
            unsigned greater than
!      ‘ls’
            unsigned less than equal
!      ‘ge’
            signed greater than equal
!      ‘lt’
            signed less than
!      ‘gt’
            signed greater than
!      ‘le’
            signed less than equal
  
       The flag output constraints are not supported in thumb1 mode.
  
  x86 family
       The flag output constraints for the x86 family are of the form
!      ‘=@ccCOND’ where COND is one of the standard conditions defined in
!      the ISA manual for ‘jCC’ or ‘setCC’.
  
!      ‘a’
            "above" or unsigned greater than
!      ‘ae’
            "above or equal" or unsigned greater than or equal
!      ‘b’
            "below" or unsigned less than
!      ‘be’
            "below or equal" or unsigned less than or equal
!      ‘c’
            carry flag set
!      ‘e’
!      ‘z’
            "equal" or zero flag set
!      ‘g’
            signed greater than
!      ‘ge’
            signed greater than or equal
!      ‘l’
            signed less than
!      ‘le’
            signed less than or equal
!      ‘o’
            overflow flag set
!      ‘p’
            parity flag set
!      ‘s’
            sign flag set
!      ‘na’
!      ‘nae’
!      ‘nb’
!      ‘nbe’
!      ‘nc’
!      ‘ne’
!      ‘ng’
!      ‘nge’
!      ‘nl’
!      ‘nle’
!      ‘no’
!      ‘np’
!      ‘ns’
!      ‘nz’
            "not" FLAG, or inverted versions of those above
  
  s390
!      The flag output constraint for s390 is ‘=@cc’.  Only one such
!      constraint is allowed.  The variable has to be stored in a ‘int’
       variable.
  
  6.48.2.5 Input Operands
*************** the assembly code.
*** 45254,45292 ****
  ASMSYMBOLICNAME
       Specifies a symbolic name for the operand.  Reference the name in
       the assembler template by enclosing it in square brackets (i.e.
!      '%[Value]').  The scope of the name is the 'asm' statement that
       contains the definition.  Any valid C variable name is acceptable,
       including names already defined in the surrounding code.  No two
!      operands within the same 'asm' statement can use the same symbolic
       name.
  
       When not using an ASMSYMBOLICNAME, use the (zero-based) position of
       the operand in the list of operands in the assembler template.  For
!      example if there are two output operands and three inputs, use '%2'
!      in the template to refer to the first input operand, '%3' for the
!      second, and '%4' for the third.
  
  CONSTRAINT
       A string constant specifying constraints on the placement of the
       operand; *Note Constraints::, for details.
  
!      Input constraint strings may not begin with either '=' or '+'.
       When you list more than one possible location (for example,
!      '"irm"'), the compiler chooses the most efficient one based on the
       current context.  If you must use a specific register, but your
       Machine Constraints do not provide sufficient control to select the
       specific register you want, local register variables may provide a
       solution (*note Local Register Variables::).
  
!      Input constraints can also be digits (for example, '"0"').  This
       indicates that the specified input must be in the same place as the
       output constraint at the (zero-based) index in the output
       constraint list.  When using ASMSYMBOLICNAME syntax for the output
!      operands, you may use these names (enclosed in brackets '[]')
       instead of digits.
  
  CEXPRESSION
!      This is the C variable or expression being passed to the 'asm'
       statement as input.  The enclosing parentheses are a required part
       of the syntax.
  
--- 45264,45302 ----
  ASMSYMBOLICNAME
       Specifies a symbolic name for the operand.  Reference the name in
       the assembler template by enclosing it in square brackets (i.e.
!      ‘%[Value]’).  The scope of the name is the ‘asm’ statement that
       contains the definition.  Any valid C variable name is acceptable,
       including names already defined in the surrounding code.  No two
!      operands within the same ‘asm’ statement can use the same symbolic
       name.
  
       When not using an ASMSYMBOLICNAME, use the (zero-based) position of
       the operand in the list of operands in the assembler template.  For
!      example if there are two output operands and three inputs, use ‘%2’
!      in the template to refer to the first input operand, ‘%3’ for the
!      second, and ‘%4’ for the third.
  
  CONSTRAINT
       A string constant specifying constraints on the placement of the
       operand; *Note Constraints::, for details.
  
!      Input constraint strings may not begin with either ‘=’ or ‘+’.
       When you list more than one possible location (for example,
!      ‘"irm"’), the compiler chooses the most efficient one based on the
       current context.  If you must use a specific register, but your
       Machine Constraints do not provide sufficient control to select the
       specific register you want, local register variables may provide a
       solution (*note Local Register Variables::).
  
!      Input constraints can also be digits (for example, ‘"0"’).  This
       indicates that the specified input must be in the same place as the
       output constraint at the (zero-based) index in the output
       constraint list.  When using ASMSYMBOLICNAME syntax for the output
!      operands, you may use these names (enclosed in brackets ‘[]’)
       instead of digits.
  
  CEXPRESSION
!      This is the C variable or expression being passed to the ‘asm’
       statement as input.  The enclosing parentheses are a required part
       of the syntax.
  
*************** consecutive colons where the output oper
*** 45303,45331 ****
  
   *Warning:* Do _not_ modify the contents of input-only operands (except
  for inputs tied to outputs).  The compiler assumes that on exit from the
! 'asm' statement these operands contain the same values as they had
  before executing the statement.  It is _not_ possible to use clobbers to
  inform the compiler that the values in these inputs are changing.  One
  common work-around is to tie the changing input variable to an output
  variable that never gets used.  Note, however, that if the code that
! follows the 'asm' statement makes no use of any of the output operands,
! the GCC optimizers may discard the 'asm' statement as unneeded (see
  *note Volatile::).
  
!  'asm' supports operand modifiers on operands (for example '%k2' instead
! of simply '%2').  *note Generic Operand modifiers:
  GenericOperandmodifiers. lists the modifiers that are available on all
  targets.  Other modifiers are hardware dependent.  For example, the list
  of supported modifiers for x86 is found at *note x86 Operand modifiers:
  x86Operandmodifiers.
  
!  In this example using the fictitious 'combine' instruction, the
! constraint '"0"' for input operand 1 says that it must occupy the same
  location as output operand 0.  Only input operands may use numbers in
  constraints, and they must each refer to an output operand.  Only a
  number (or the symbolic assembler name) in the constraint can guarantee
  that one operand is in the same place as another.  The mere fact that
! 'foo' is the value of both operands is not enough to guarantee that they
  are in the same place in the generated assembler code.
  
       asm ("combine %2, %0"
--- 45313,45341 ----
  
   *Warning:* Do _not_ modify the contents of input-only operands (except
  for inputs tied to outputs).  The compiler assumes that on exit from the
! ‘asm’ statement these operands contain the same values as they had
  before executing the statement.  It is _not_ possible to use clobbers to
  inform the compiler that the values in these inputs are changing.  One
  common work-around is to tie the changing input variable to an output
  variable that never gets used.  Note, however, that if the code that
! follows the ‘asm’ statement makes no use of any of the output operands,
! the GCC optimizers may discard the ‘asm’ statement as unneeded (see
  *note Volatile::).
  
!  ‘asm’ supports operand modifiers on operands (for example ‘%k2’ instead
! of simply ‘%2’).  *note Generic Operand modifiers:
  GenericOperandmodifiers. lists the modifiers that are available on all
  targets.  Other modifiers are hardware dependent.  For example, the list
  of supported modifiers for x86 is found at *note x86 Operand modifiers:
  x86Operandmodifiers.
  
!  In this example using the fictitious ‘combine’ instruction, the
! constraint ‘"0"’ for input operand 1 says that it must occupy the same
  location as output operand 0.  Only input operands may use numbers in
  constraints, and they must each refer to an output operand.  Only a
  number (or the symbolic assembler name) in the constraint can guarantee
  that one operand is in the same place as another.  The mere fact that
! ‘foo’ is the value of both operands is not enough to guarantee that they
  are in the same place in the generated assembler code.
  
       asm ("combine %2, %0"
*************** are in the same place in the generated a
*** 45342,45348 ****
  .......................................
  
  While the compiler is aware of changes to entries listed in the output
! operands, the inline 'asm' code may modify more than just the outputs.
  For example, calculations may require additional registers, or the
  processor may overwrite a register as a side effect of a particular
  assembler instruction.  In order to inform the compiler of these
--- 45352,45358 ----
  .......................................
  
  While the compiler is aware of changes to entries listed in the output
! operands, the inline ‘asm’ code may modify more than just the outputs.
  For example, calculations may require additional registers, or the
  processor may overwrite a register as a side effect of a particular
  assembler instruction.  In order to inform the compiler of these
*************** by commas.
*** 45355,45361 ****
  operand.  For example, you may not have an operand describing a register
  class with one member when listing that register in the clobber list.
  Variables declared to live in specific registers (*note Explicit
! Register Variables::) and used as 'asm' input or output operands must
  have no part mentioned in the clobber description.  In particular, there
  is no way to specify that input operands get modified without also
  specifying them as output operands.
--- 45365,45371 ----
  operand.  For example, you may not have an operand describing a register
  class with one member when listing that register in the clobber list.
  Variables declared to live in specific registers (*note Explicit
! Register Variables::) and used as ‘asm’ input or output operands must
  have no part mentioned in the clobber description.  In particular, there
  is no way to specify that input operands get modified without also
  specifying them as output operands.
*************** code.
*** 45367,45373 ****
  
   Another restriction is that the clobber list should not contain the
  stack pointer register.  This is because the compiler requires the value
! of the stack pointer to be the same after an 'asm' statement as it was
  on entry to the statement.  However, previous versions of GCC did not
  enforce this rule and allowed the stack pointer to appear in the list,
  with unclear semantics.  This behavior is deprecated and listing the
--- 45377,45383 ----
  
   Another restriction is that the clobber list should not contain the
  stack pointer register.  This is because the compiler requires the value
! of the stack pointer to be the same after an ‘asm’ statement as it was
  on entry to the statement.  However, previous versions of GCC did not
  enforce this rule and allowed the stack pointer to appear in the list,
  with unclear semantics.  This behavior is deprecated and listing the
*************** registers:
*** 45383,45410 ****
  
   Also, there are two special clobber arguments:
  
! '"cc"'
!      The '"cc"' clobber indicates that the assembler code modifies the
       flags register.  On some machines, GCC represents the condition
!      codes as a specific hardware register; '"cc"' serves to name this
       register.  On other machines, condition code handling is different,
!      and specifying '"cc"' has no effect.  But it is valid no matter
       what the target.
  
! '"memory"'
!      The '"memory"' clobber tells the compiler that the assembly code
       performs memory reads or writes to items other than those listed in
       the input and output operands (for example, accessing the memory
       pointed to by one of the input parameters).  To ensure memory
       contains correct values, GCC may need to flush specific register
!      values to memory before executing the 'asm'.  Further, the compiler
!      does not assume that any values read from memory before an 'asm'
!      remain unchanged after that 'asm'; it reloads them as needed.
!      Using the '"memory"' clobber effectively forms a read/write memory
       barrier for the compiler.
  
       Note that this clobber does not prevent the _processor_ from doing
!      speculative reads past the 'asm' statement.  To prevent that, you
       need processor-specific fence instructions.
  
   Flushing registers to memory has performance implications and may be an
--- 45393,45420 ----
  
   Also, there are two special clobber arguments:
  
! ‘"cc"’
!      The ‘"cc"’ clobber indicates that the assembler code modifies the
       flags register.  On some machines, GCC represents the condition
!      codes as a specific hardware register; ‘"cc"’ serves to name this
       register.  On other machines, condition code handling is different,
!      and specifying ‘"cc"’ has no effect.  But it is valid no matter
       what the target.
  
! ‘"memory"’
!      The ‘"memory"’ clobber tells the compiler that the assembly code
       performs memory reads or writes to items other than those listed in
       the input and output operands (for example, accessing the memory
       pointed to by one of the input parameters).  To ensure memory
       contains correct values, GCC may need to flush specific register
!      values to memory before executing the ‘asm’.  Further, the compiler
!      does not assume that any values read from memory before an ‘asm’
!      remain unchanged after that ‘asm’; it reloads them as needed.
!      Using the ‘"memory"’ clobber effectively forms a read/write memory
       barrier for the compiler.
  
       Note that this clobber does not prevent the _processor_ from doing
!      speculative reads past the ‘asm’ statement.  To prevent that, you
       need processor-specific fence instructions.
  
   Flushing registers to memory has performance implications and may be an
*************** flushed.
*** 45415,45436 ****
  
   Here is a fictitious sum of squares instruction, that takes two
  pointers to floating point values in memory and produces a floating
! point register output.  Notice that 'x', and 'y' both appear twice in
! the 'asm' parameters, once to specify memory accessed, and once to
! specify a base register used by the 'asm'.  You won't normally be
  wasting a register by doing this as GCC can use the same register for
! both purposes.  However, it would be foolish to use both '%1' and '%3'
! for 'x' in this 'asm' and expect them to be the same.  In fact, '%3' may
  well not be a register.  It might be a symbolic memory reference to the
! object pointed to by 'x'.
  
       asm ("sumsq %0, %1, %2"
            : "+f" (result)
            : "r" (x), "r" (y), "m" (*x), "m" (*y));
  
!  Here is a fictitious '*z++ = *x++ * *y++' instruction.  Notice that the
! 'x', 'y' and 'z' pointer registers must be specified as input/output
! because the 'asm' modifies them.
  
       asm ("vecmul %0, %1, %2"
            : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
--- 45425,45446 ----
  
   Here is a fictitious sum of squares instruction, that takes two
  pointers to floating point values in memory and produces a floating
! point register output.  Notice that ‘x’, and ‘y’ both appear twice in
! the ‘asm’ parameters, once to specify memory accessed, and once to
! specify a base register used by the ‘asm’.  You won't normally be
  wasting a register by doing this as GCC can use the same register for
! both purposes.  However, it would be foolish to use both ‘%1’ and ‘%3’
! for ‘x’ in this ‘asm’ and expect them to be the same.  In fact, ‘%3’ may
  well not be a register.  It might be a symbolic memory reference to the
! object pointed to by ‘x’.
  
       asm ("sumsq %0, %1, %2"
            : "+f" (result)
            : "r" (x), "r" (y), "m" (*x), "m" (*y));
  
!  Here is a fictitious ‘*z++ = *x++ * *y++’ instruction.  Notice that the
! ‘x’, ‘y’ and ‘z’ pointer registers must be specified as input/output
! because the ‘asm’ modifies them.
  
       asm ("vecmul %0, %1, %2"
            : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
*************** because the 'asm' modifies them.
*** 45443,45453 ****
           : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
  
   If you know the above will only be reading a ten byte array then you
! could instead use a memory input like: '"m" (*(const char (*)[10]) p)'.
  
   Here is an example of a PowerPC vector scale implemented in assembly,
  complete with vector and condition code clobbers, and some initialized
! offset registers that are unchanged by the 'asm'.
  
       void
       dscal (size_t n, double *x, double alpha)
--- 45453,45463 ----
           : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
  
   If you know the above will only be reading a ten byte array then you
! could instead use a memory input like: ‘"m" (*(const char (*)[10]) p)’.
  
   Here is an example of a PowerPC vector scale implemented in assembly,
  complete with vector and condition code clobbers, and some initialized
! offset registers that are unchanged by the ‘asm’.
  
       void
       dscal (size_t n, double *x, double alpha)
*************** offset registers that are unchanged by t
*** 45462,45492 ****
       }
  
   Rather than allocating fixed registers via clobbers to provide scratch
! registers for an 'asm' statement, an alternative is to define a variable
! and make it an early-clobber output as with 'a2' and 'a3' in the example
  below.  This gives the compiler register allocator more freedom.  You
  can also define a variable and make it an output tied to an input as
! with 'a0' and 'a1', tied respectively to 'ap' and 'lda'.  Of course,
! with tied outputs your 'asm' can't use the input value after modifying
  the output register since they are one and the same register.  What's
  more, if you omit the early-clobber on the output, it is possible that
  GCC might allocate the same register to another of the inputs if GCC
! could prove they had the same value on entry to the 'asm'.  This is why
! 'a1' has an early-clobber.  Its tied input, 'lda' might conceivably be
  known to have the value 16 and without an early-clobber share the same
! register as '%11'.  On the other hand, 'ap' can't be the same as any of
! the other inputs, so an early-clobber on 'a0' is not needed.  It is also
! not desirable in this case.  An early-clobber on 'a0' would cause GCC to
! allocate a separate register for the '"m" (*(const double (*)[]) ap)'
  input.  Note that tying an input to an output is the way to set up an
! initialized temporary register modified by an 'asm' statement.  An input
  not tied to an output is assumed by GCC to be unchanged, for example
! '"b" (16)' below sets up '%11' to 16, and GCC might use that register in
  following code if the value 16 happened to be needed.  You can even use
! a normal 'asm' output for a scratch if all inputs that might share the
  same register are consumed before the scratch is used.  The VSX
! registers clobbered by the 'asm' statement could have used this
! technique except for GCC's limit on the number of 'asm' parameters.
  
       static void
       dgemv_kernel_4x4 (long n, const double *ap, long lda,
--- 45472,45502 ----
       }
  
   Rather than allocating fixed registers via clobbers to provide scratch
! registers for an ‘asm’ statement, an alternative is to define a variable
! and make it an early-clobber output as with ‘a2’ and ‘a3’ in the example
  below.  This gives the compiler register allocator more freedom.  You
  can also define a variable and make it an output tied to an input as
! with ‘a0’ and ‘a1’, tied respectively to ‘ap’ and ‘lda’.  Of course,
! with tied outputs your ‘asm’ can't use the input value after modifying
  the output register since they are one and the same register.  What's
  more, if you omit the early-clobber on the output, it is possible that
  GCC might allocate the same register to another of the inputs if GCC
! could prove they had the same value on entry to the ‘asm’.  This is why
! ‘a1’ has an early-clobber.  Its tied input, ‘lda’ might conceivably be
  known to have the value 16 and without an early-clobber share the same
! register as ‘%11’.  On the other hand, ‘ap’ can't be the same as any of
! the other inputs, so an early-clobber on ‘a0’ is not needed.  It is also
! not desirable in this case.  An early-clobber on ‘a0’ would cause GCC to
! allocate a separate register for the ‘"m" (*(const double (*)[]) ap)’
  input.  Note that tying an input to an output is the way to set up an
! initialized temporary register modified by an ‘asm’ statement.  An input
  not tied to an output is assumed by GCC to be unchanged, for example
! ‘"b" (16)’ below sets up ‘%11’ to 16, and GCC might use that register in
  following code if the value 16 happened to be needed.  You can even use
! a normal ‘asm’ output for a scratch if all inputs that might share the
  same register are consumed before the scratch is used.  The VSX
! registers clobbered by the ‘asm’ statement could have used this
! technique except for GCC's limit on the number of ‘asm’ parameters.
  
       static void
       dgemv_kernel_4x4 (long n, const double *ap, long lda,
*************** technique except for GCC's limit on the
*** 45528,45573 ****
  6.48.2.7 Goto Labels
  ....................
  
! 'asm goto' allows assembly code to jump to one or more C labels.  The
! GOTOLABELS section in an 'asm goto' statement contains a comma-separated
  list of all C labels to which the assembler code may jump.  GCC assumes
! that 'asm' execution falls through to the next statement (if this is not
! the case, consider using the '__builtin_unreachable' intrinsic after the
! 'asm' statement).  Optimization of 'asm goto' may be improved by using
! the 'hot' and 'cold' label attributes (*note Label Attributes::).
  
!  If the assembler code does modify anything, use the '"memory"' clobber
  to force the optimizers to flush all register values to memory and
! reload them if necessary after the 'asm' statement.
  
!  Also note that an 'asm goto' statement is always implicitly considered
  volatile.
  
!  Be careful when you set output operands inside 'asm goto' only on some
  possible control flow paths.  If you don't set up the output on given
  path and never use it on this path, it is okay.  Otherwise, you should
! use '+' constraint modifier meaning that the operand is input and output
  one.  With this modifier you will have the correct values on all
! possible paths from the 'asm goto'.
  
!  To reference a label in the assembler template, prefix it with '%l'
! (lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
  the number of input and output operands.  Output operand with constraint
! modifier '+' is counted as two operands because it is considered as one
! output and one input operand.  For example, if the 'asm' has three
! inputs, one output operand with constraint modifier '+' and one output
! operand with constraint modifier '=' and references two labels, refer to
! the first label as '%l6' and the second as '%l7').
  
   Alternately, you can reference labels using the actual C label name
! enclosed in brackets.  For example, to reference a label named 'carry',
! you can use '%l[carry]'.  The label must still be listed in the
  GOTOLABELS section when using this approach.  It is better to use the
  named references for labels as in this case you can avoid counting input
  and output operands and special treatment of output operands with
! constraint modifier '+'.
  
!  Here is an example of 'asm goto' for i386:
  
       asm goto (
           "btl %1, %0\n\t"
--- 45538,45583 ----
  6.48.2.7 Goto Labels
  ....................
  
! ‘asm goto’ allows assembly code to jump to one or more C labels.  The
! GOTOLABELS section in an ‘asm goto’ statement contains a comma-separated
  list of all C labels to which the assembler code may jump.  GCC assumes
! that ‘asm’ execution falls through to the next statement (if this is not
! the case, consider using the ‘__builtin_unreachable’ intrinsic after the
! ‘asm’ statement).  Optimization of ‘asm goto’ may be improved by using
! the ‘hot’ and ‘cold’ label attributes (*note Label Attributes::).
  
!  If the assembler code does modify anything, use the ‘"memory"’ clobber
  to force the optimizers to flush all register values to memory and
! reload them if necessary after the ‘asm’ statement.
  
!  Also note that an ‘asm goto’ statement is always implicitly considered
  volatile.
  
!  Be careful when you set output operands inside ‘asm goto’ only on some
  possible control flow paths.  If you don't set up the output on given
  path and never use it on this path, it is okay.  Otherwise, you should
! use ‘+’ constraint modifier meaning that the operand is input and output
  one.  With this modifier you will have the correct values on all
! possible paths from the ‘asm goto’.
  
!  To reference a label in the assembler template, prefix it with ‘%l’
! (lowercase ‘L’) followed by its (zero-based) position in GOTOLABELS plus
  the number of input and output operands.  Output operand with constraint
! modifier ‘+’ is counted as two operands because it is considered as one
! output and one input operand.  For example, if the ‘asm’ has three
! inputs, one output operand with constraint modifier ‘+’ and one output
! operand with constraint modifier ‘=’ and references two labels, refer to
! the first label as ‘%l6’ and the second as ‘%l7’).
  
   Alternately, you can reference labels using the actual C label name
! enclosed in brackets.  For example, to reference a label named ‘carry’,
! you can use ‘%l[carry]’.  The label must still be listed in the
  GOTOLABELS section when using this approach.  It is better to use the
  named references for labels as in this case you can avoid counting input
  and output operands and special treatment of output operands with
! constraint modifier ‘+’.
  
!  Here is an example of ‘asm goto’ for i386:
  
       asm goto (
           "btl %1, %0\n\t"
*************** constraint modifier '+'.
*** 45582,45588 ****
       carry:
       return 1;
  
!  The following example shows an 'asm goto' that uses a memory clobber.
  
       int frob(int x)
       {
--- 45592,45598 ----
       carry:
       return 1;
  
!  The following example shows an ‘asm goto’ that uses a memory clobber.
  
       int frob(int x)
       {
*************** constraint modifier '+'.
*** 45597,45603 ****
         return -1;
       }
  
!  The following example shows an 'asm goto' that uses an output.
  
       int foo(int count)
       {
--- 45607,45613 ----
         return -1;
       }
  
!  The following example shows an ‘asm goto’ that uses an output.
  
       int foo(int count)
       {
*************** constraint modifier '+'.
*** 45611,45620 ****
         return 0;
       }
  
!  The following artificial example shows an 'asm goto' that sets up an
! output only on one path inside the 'asm goto'.  Usage of constraint
! modifier '=' instead of '+' would be wrong as 'factor' is used on all
! paths from the 'asm goto'.
  
       int foo(int inp)
       {
--- 45621,45630 ----
         return 0;
       }
  
!  The following artificial example shows an ‘asm goto’ that sets up an
! output only on one path inside the ‘asm goto’.  Usage of constraint
! modifier ‘=’ instead of ‘+’ would be wrong as ‘factor’ is used on all
! paths from the ‘asm goto’.
  
       int foo(int inp)
       {
*************** their effects:
*** 45636,45652 ****
  
  Modifier    Description                                        Example
  ---------------------------------------------------------------------------
! 'c'         Require a constant operand and print the           '%c0'
              constant expression with no punctuation.
! 'n'         Like '%c' except that the value of the constant    '%n0'
              is negated before printing.
! 'a'         Substitute a memory reference, with the actual     '%a0'
              operand treated as the address.  This may be
              useful when outputting a "load address"
              instruction, because often the assembler syntax
              for such an instruction requires you to write
              the operand as if it were a memory reference.
! 'l'         Print the label name with no punctuation.          '%l0'
  
  6.48.2.9 AArch64 Operand Modifiers
  ..................................
--- 45646,45662 ----
  
  Modifier    Description                                        Example
  ---------------------------------------------------------------------------
! ‘c’         Require a constant operand and print the           ‘%c0’
              constant expression with no punctuation.
! ‘n’         Like ‘%c’ except that the value of the constant    ‘%n0’
              is negated before printing.
! ‘a’         Substitute a memory reference, with the actual     ‘%a0’
              operand treated as the address.  This may be
              useful when outputting a "load address"
              instruction, because often the assembler syntax
              for such an instruction requires you to write
              the operand as if it were a memory reference.
! ‘l’         Print the label name with no punctuation.          ‘%l0’
  
  6.48.2.9 AArch64 Operand Modifiers
  ..................................
*************** effects:
*** 45656,45684 ****
  
  ModifierDescription
  --------------------------------------------------------------------------
! 'w'     Print a 32-bit general-purpose register name or, given a
!         constant zero operand, the 32-bit zero register ('wzr').
! 'x'     Print a 64-bit general-purpose register name or, given a
!         constant zero operand, the 64-bit zero register ('xzr').
! 'b'     Print an FP/SIMD register name with a 'b' (byte, 8-bit) prefix.
! 'h'     Print an FP/SIMD register name with an 'h' (halfword, 16-bit)
          prefix.
! 's'     Print an FP/SIMD register name with an 's' (single word,
          32-bit) prefix.
! 'd'     Print an FP/SIMD register name with a 'd' (doubleword, 64-bit)
          prefix.
! 'q'     Print an FP/SIMD register name with a 'q' (quadword, 128-bit)
          prefix.
! 'Z'     Print an FP/SIMD register name as an SVE register (i.e.  with a
!         'z' prefix).  This is a no-op for SVE register operands.
  
  6.48.2.10 x86 Operand Modifiers
  ...............................
  
  References to input, output, and goto operands in the assembler template
! of extended 'asm' statements can use modifiers to affect the way the
  operands are formatted in the code output to the assembler.  For
! example, the following code uses the 'h' and 'b' modifiers for x86:
  
       uint16_t  num;
       asm volatile ("xchg %h0, %b0" : "+a" (num) );
--- 45666,45694 ----
  
  ModifierDescription
  --------------------------------------------------------------------------
! ‘w’     Print a 32-bit general-purpose register name or, given a
!         constant zero operand, the 32-bit zero register (‘wzr’).
! ‘x’     Print a 64-bit general-purpose register name or, given a
!         constant zero operand, the 64-bit zero register (‘xzr’).
! ‘b’     Print an FP/SIMD register name with a ‘b’ (byte, 8-bit) prefix.
! ‘h’     Print an FP/SIMD register name with an ‘h’ (halfword, 16-bit)
          prefix.
! ‘s’     Print an FP/SIMD register name with an ‘s’ (single word,
          32-bit) prefix.
! ‘d’     Print an FP/SIMD register name with a ‘d’ (doubleword, 64-bit)
          prefix.
! ‘q’     Print an FP/SIMD register name with a ‘q’ (quadword, 128-bit)
          prefix.
! ‘Z’     Print an FP/SIMD register name as an SVE register (i.e.  with a
!         ‘z’ prefix).  This is a no-op for SVE register operands.
  
  6.48.2.10 x86 Operand Modifiers
  ...............................
  
  References to input, output, and goto operands in the assembler template
! of extended ‘asm’ statements can use modifiers to affect the way the
  operands are formatted in the code output to the assembler.  For
! example, the following code uses the ‘h’ and ‘b’ modifiers for x86:
  
       uint16_t  num;
       asm volatile ("xchg %h0, %b0" : "+a" (num) );
*************** purposes.
*** 45704,45798 ****
       }
  
   With no modifiers, this is what the output from the operands would be
! for the 'att' and 'intel' dialects of assembler:
  
! Operand   'att'  'intel'
  -----------------------------------
! '%0'      '%eax' 'eax'
! '%1'      '$2'   '2'
! '%3'      '$.L3' 'OFFSET
!                  FLAT:.L3'
! '%4'      '$8'   '8'
! '%5'      '%xmm0''xmm0'
! '%7'      '$0'   '0'
  
   The table below shows the list of supported modifiers and their
  effects.
  
! Modifier   Description                                  Operand   'att'   'intel'
  ------------------------------------------------------------------------------------
! 'A'        Print an absolute memory reference.          '%A0'     '*%rax' 'rax'
! 'b'        Print the QImode name of the register.       '%b0'     '%al'   'al'
! 'B'        print the opcode suffix of b.                '%B0'     'b'
! 'c'        Require a constant operand and print the     '%c1'     '2'     '2'
             constant expression with no punctuation.
! 'd'        print duplicated register operand for AVX    '%d5'     '%xmm0, 'xmm0,
!            instruction.                                           %xmm0'  xmm0'
! 'E'        Print the address in Double Integer          '%E1'     '%(rax)''[rax]'
             (DImode) mode (8 bytes) when the target is
             64-bit.  Otherwise mode is unspecified
             (VOIDmode).
! 'g'        Print the V16SFmode name of the register.    '%g0'     '%zmm0' 'zmm0'
! 'h'        Print the QImode name for a "high"           '%h0'     '%ah'   'ah'
             register.
! 'H'        Add 8 bytes to an offsettable memory         '%H0'     '8(%rax)''8[rax]'
             reference.  Useful when accessing the high
             8 bytes of SSE values.  For a memref in
             (%rax), it generates
! 'k'        Print the SImode name of the register.       '%k0'     '%eax'  'eax'
! 'l'        Print the label name with no punctuation.    '%l3'     '.L3'   '.L3'
! 'L'        print the opcode suffix of l.                '%L0'     'l'
! 'N'        print maskz.                                 '%N7'     '{z}'   '{z}'
! 'p'        Print raw symbol name (without               '%p2'     '42'    '42'
             syntax-specific prefixes).
! 'P'        If used for a function, print the PLT
             suffix and generate PIC code.  For
!            example, emit 'foo@PLT' instead of 'foo'
             for the function foo().  If used for a
             constant, drop all syntax-specific
             prefixes and issue the bare constant.  See
!            'p' above.
! 'q'        Print the DImode name of the register.       '%q0'     '%rax'  'rax'
! 'Q'        print the opcode suffix of q.                '%Q0'     'q'
! 'R'        print embedded rounding and sae.             '%R4'     '{rn-sae},',
!                                                                   '       {rn-sae}'
! 'r'        print only sae.                              '%r4'     '{sae}, ',
!                                                                   '       {sae}'
! 's'        print a shift double count, followed by      '%s1'     '$2,    '2, '
!            the assemblers argument delimiterprint the             '
             opcode suffix of s.
! 'S'        print the opcode suffix of s.                '%S0'     's'
! 't'        print the V8SFmode name of the register.     '%t5'     '%ymm0' 'ymm0'
! 'T'        print the opcode suffix of t.                '%T0'     't'
! 'V'        print naked full integer register name       '%V0'     'eax'   'eax'
             without %.
! 'w'        Print the HImode name of the register.       '%w0'     '%ax'   'ax'
! 'W'        print the opcode suffix of w.                '%W0'     'w'
! 'x'        print the V4SFmode name of the register.     '%x5'     '%xmm0' 'xmm0'
! 'y'        print "st(0)" instead of "st" as a           '%y6'     '%st(0)''st(0)'
             register.
! 'z'        Print the opcode suffix for the size of      '%z0'     'l'
             the current integer operand (one of
!            'b'/'w'/'l'/'q').
! 'Z'        Like 'z', with special suffixes for x87
             instructions.
  
! 6.48.2.11 x86 Floating-Point 'asm' Operands
  ...........................................
  
  On x86 targets, there are several rules on the usage of stack-like
! registers in the operands of an 'asm'.  These rules apply only to the
  operands that are stack-like registers:
  
!   1. Given a set of input registers that die in an 'asm', it is
!      necessary to know which are implicitly popped by the 'asm', and
       which must be explicitly popped by GCC.
  
!      An input register that is implicitly popped by the 'asm' must be
       explicitly clobbered, unless it is constrained to match an output
       operand.
  
!   2. For any input register that is implicitly popped by an 'asm', it is
       necessary to know how to adjust the stack to compensate for the
       pop.  If any non-popped input is closer to the top of the reg-stack
       than the implicitly popped register, it would not be possible to
--- 45714,45808 ----
       }
  
   With no modifiers, this is what the output from the operands would be
! for the ‘att’ and ‘intel’ dialects of assembler:
  
! Operand   ‘att’  ‘intel’
  -----------------------------------
! ‘%0’      ‘%eax’ ‘eax’
! ‘%1’      ‘$2’   ‘2’
! ‘%3’      ‘$.L3’ ‘OFFSET
!                  FLAT:.L3’
! ‘%4’      ‘$8’   ‘8’
! ‘%5’      ‘%xmm0’‘xmm0’
! ‘%7’      ‘$0’   ‘0’
  
   The table below shows the list of supported modifiers and their
  effects.
  
! Modifier   Description                                  Operand   ‘att’   ‘intel’
  ------------------------------------------------------------------------------------
! ‘A’        Print an absolute memory reference.          ‘%A0’     ‘*%rax’ ‘rax’
! ‘b’        Print the QImode name of the register.       ‘%b0’     ‘%al’   ‘al’
! ‘B’        print the opcode suffix of b.                ‘%B0’     ‘b’
! ‘c’        Require a constant operand and print the     ‘%c1’     ‘2’     ‘2’
             constant expression with no punctuation.
! ‘d’        print duplicated register operand for AVX    ‘%d5’     ‘%xmm0, ‘xmm0,
!            instruction.                                           %xmm0’  xmm0’
! ‘E’        Print the address in Double Integer          ‘%E1’     ‘%(rax)’‘[rax]’
             (DImode) mode (8 bytes) when the target is
             64-bit.  Otherwise mode is unspecified
             (VOIDmode).
! ‘g’        Print the V16SFmode name of the register.    ‘%g0’     ‘%zmm0’ ‘zmm0’
! ‘h’        Print the QImode name for a "high"           ‘%h0’     ‘%ah’   ‘ah’
             register.
! ‘H’        Add 8 bytes to an offsettable memory         ‘%H0’     ‘8(%rax)’‘8[rax]’
             reference.  Useful when accessing the high
             8 bytes of SSE values.  For a memref in
             (%rax), it generates
! ‘k’        Print the SImode name of the register.       ‘%k0’     ‘%eax’  ‘eax’
! ‘l’        Print the label name with no punctuation.    ‘%l3’     ‘.L3’   ‘.L3’
! ‘L’        print the opcode suffix of l.                ‘%L0’     ‘l’
! ‘N’        print maskz.                                 ‘%N7’     ‘{z}’   ‘{z}’
! ‘p’        Print raw symbol name (without               ‘%p2’     ‘42’    ‘42’
             syntax-specific prefixes).
! ‘P’        If used for a function, print the PLT
             suffix and generate PIC code.  For
!            example, emit ‘foo@PLT’ instead of 'foo'
             for the function foo().  If used for a
             constant, drop all syntax-specific
             prefixes and issue the bare constant.  See
!            ‘p’ above.
! ‘q’        Print the DImode name of the register.       ‘%q0’     ‘%rax’  ‘rax’
! ‘Q’        print the opcode suffix of q.                ‘%Q0’     ‘q’
! ‘R’        print embedded rounding and sae.             ‘%R4’     ‘{rn-sae},‘,
!                                                                   ’       {rn-sae}’
! ‘r’        print only sae.                              ‘%r4’     ‘{sae}, ‘,
!                                                                   ’       {sae}’
! ‘s’        print a shift double count, followed by      ‘%s1’     ‘$2,    ‘2, ’
!            the assemblers argument delimiterprint the             ’
             opcode suffix of s.
! ‘S’        print the opcode suffix of s.                ‘%S0’     ‘s’
! ‘t’        print the V8SFmode name of the register.     ‘%t5’     ‘%ymm0’ ‘ymm0’
! ‘T’        print the opcode suffix of t.                ‘%T0’     ‘t’
! ‘V’        print naked full integer register name       ‘%V0’     ‘eax’   ‘eax’
             without %.
! ‘w’        Print the HImode name of the register.       ‘%w0’     ‘%ax’   ‘ax’
! ‘W’        print the opcode suffix of w.                ‘%W0’     ‘w’
! ‘x’        print the V4SFmode name of the register.     ‘%x5’     ‘%xmm0’ ‘xmm0’
! ‘y’        print "st(0)" instead of "st" as a           ‘%y6’     ‘%st(0)’‘st(0)’
             register.
! ‘z’        Print the opcode suffix for the size of      ‘%z0’     ‘l’
             the current integer operand (one of
!            ‘b’/‘w’/‘l’/‘q’).
! ‘Z’        Like ‘z’, with special suffixes for x87
             instructions.
  
! 6.48.2.11 x86 Floating-Point ‘asm’ Operands
  ...........................................
  
  On x86 targets, there are several rules on the usage of stack-like
! registers in the operands of an ‘asm’.  These rules apply only to the
  operands that are stack-like registers:
  
!   1. Given a set of input registers that die in an ‘asm’, it is
!      necessary to know which are implicitly popped by the ‘asm’, and
       which must be explicitly popped by GCC.
  
!      An input register that is implicitly popped by the ‘asm’ must be
       explicitly clobbered, unless it is constrained to match an output
       operand.
  
!   2. For any input register that is implicitly popped by an ‘asm’, it is
       necessary to know how to adjust the stack to compensate for the
       pop.  If any non-popped input is closer to the top of the reg-stack
       than the implicitly popped register, it would not be possible to
*************** operands that are stack-like registers:
*** 45802,45821 ****
       All implicitly popped input registers must be closer to the top of
       the reg-stack than any input that is not implicitly popped.
  
!      It is possible that if an input dies in an 'asm', the compiler
       might use the input register for an output reload.  Consider this
       example:
  
            asm ("foo" : "=t" (a) : "f" (b));
  
!      This code says that input 'b' is not popped by the 'asm', and that
!      the 'asm' pushes a result onto the reg-stack, i.e., the stack is
!      one deeper after the 'asm' than it was before.  But, it is possible
       that reload may think that it can use the same register for both
       the input and the output.
  
!      To prevent this from happening, if any input operand uses the 'f'
!      constraint, all output register constraints must use the '&'
       early-clobber modifier.
  
       The example above is correctly written as:
--- 45812,45831 ----
       All implicitly popped input registers must be closer to the top of
       the reg-stack than any input that is not implicitly popped.
  
!      It is possible that if an input dies in an ‘asm’, the compiler
       might use the input register for an output reload.  Consider this
       example:
  
            asm ("foo" : "=t" (a) : "f" (b));
  
!      This code says that input ‘b’ is not popped by the ‘asm’, and that
!      the ‘asm’ pushes a result onto the reg-stack, i.e., the stack is
!      one deeper after the ‘asm’ than it was before.  But, it is possible
       that reload may think that it can use the same register for both
       the input and the output.
  
!      To prevent this from happening, if any input operand uses the ‘f’
!      constraint, all output register constraints must use the ‘&’
       early-clobber modifier.
  
       The example above is correctly written as:
*************** operands that are stack-like registers:
*** 45828,45857 ****
       the constraints.
  
       Output operands must specifically indicate which register an output
!      appears in after an 'asm'.  '=f' is not allowed: the operand
       constraints must select a class with a single register.
  
    4. Output operands may not be "inserted" between existing stack
       registers.  Since no 387 opcode uses a read/write operand, all
!      output operands are dead before the 'asm', and are pushed by the
!      'asm'.  It makes no sense to push anywhere but the top of the
       reg-stack.
  
       Output operands must start at the top of the reg-stack: output
       operands may not "skip" a register.
  
!   5. Some 'asm' statements may need extra stack space for internal
       calculations.  This can be guaranteed by clobbering stack registers
       unrelated to the inputs and outputs.
  
!  This 'asm' takes one input, which is internally popped, and produces
  two outputs.
  
       asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
  
! This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
! and replaces them with one output.  The 'st(1)' clobber is necessary for
! the compiler to know that 'fyl2xp1' pops both inputs.
  
       asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
  
--- 45838,45867 ----
       the constraints.
  
       Output operands must specifically indicate which register an output
!      appears in after an ‘asm’.  ‘=f’ is not allowed: the operand
       constraints must select a class with a single register.
  
    4. Output operands may not be "inserted" between existing stack
       registers.  Since no 387 opcode uses a read/write operand, all
!      output operands are dead before the ‘asm’, and are pushed by the
!      ‘asm’.  It makes no sense to push anywhere but the top of the
       reg-stack.
  
       Output operands must start at the top of the reg-stack: output
       operands may not "skip" a register.
  
!   5. Some ‘asm’ statements may need extra stack space for internal
       calculations.  This can be guaranteed by clobbering stack registers
       unrelated to the inputs and outputs.
  
!  This ‘asm’ takes one input, which is internally popped, and produces
  two outputs.
  
       asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
  
! This ‘asm’ takes two inputs, which are popped by the ‘fyl2xp1’ opcode,
! and replaces them with one output.  The ‘st(1)’ clobber is necessary for
! the compiler to know that ‘fyl2xp1’ pops both inputs.
  
       asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
  
*************** MSP430.
*** 45863,45893 ****
  
  ModifierDescription
  --------------------------------------------------------------------------
! 'A'     Select low 16-bits of the constant/register/memory operand.
! 'B'     Select high 16-bits of the constant/register/memory operand.
! 'C'     Select bits 32-47 of the constant/register/memory operand.
! 'D'     Select bits 48-63 of the constant/register/memory operand.
! 'H'     Equivalent to 'B' (for backwards compatibility).
! 'I'     Print the inverse (logical 'NOT') of the constant value.
! 'J'     Print an integer without a '#' prefix.
! 'L'     Equivalent to 'A' (for backwards compatibility).
! 'O'     Offset of the current frame from the top of the stack.
! 'Q'     Use the 'A' instruction postfix.
! 'R'     Inverse of condition code, for unsigned comparisons.
! 'W'     Subtract 16 from the constant value.
! 'X'     Use the 'X' instruction postfix.
! 'Y'     Subtract 4 from the constant value.
! 'Z'     Subtract 1 from the constant value.
! 'b'     Append '.B', '.W' or '.A' to the instruction, depending on the
          mode.
! 'd'     Offset 1 byte of a memory reference or constant value.
! 'e'     Offset 3 bytes of a memory reference or constant value.
! 'f'     Offset 5 bytes of a memory reference or constant value.
! 'g'     Offset 7 bytes of a memory reference or constant value.
! 'p'     Print the value of 2, raised to the power of the given
          constant.  Used to select the specified bit position.
! 'r'     Inverse of condition code, for signed comparisons.
! 'x'     Equivialent to 'X', but only for pointers.
  
  6.48.2.13 LoongArch Operand Modifiers
  .....................................
--- 45873,45903 ----
  
  ModifierDescription
  --------------------------------------------------------------------------
! ‘A’     Select low 16-bits of the constant/register/memory operand.
! ‘B’     Select high 16-bits of the constant/register/memory operand.
! ‘C’     Select bits 32-47 of the constant/register/memory operand.
! ‘D’     Select bits 48-63 of the constant/register/memory operand.
! ‘H’     Equivalent to ‘B’ (for backwards compatibility).
! ‘I’     Print the inverse (logical ‘NOT’) of the constant value.
! ‘J’     Print an integer without a ‘#’ prefix.
! ‘L’     Equivalent to ‘A’ (for backwards compatibility).
! ‘O’     Offset of the current frame from the top of the stack.
! ‘Q’     Use the ‘A’ instruction postfix.
! ‘R’     Inverse of condition code, for unsigned comparisons.
! ‘W’     Subtract 16 from the constant value.
! ‘X’     Use the ‘X’ instruction postfix.
! ‘Y’     Subtract 4 from the constant value.
! ‘Z’     Subtract 1 from the constant value.
! ‘b’     Append ‘.B’, ‘.W’ or ‘.A’ to the instruction, depending on the
          mode.
! ‘d’     Offset 1 byte of a memory reference or constant value.
! ‘e’     Offset 3 bytes of a memory reference or constant value.
! ‘f’     Offset 5 bytes of a memory reference or constant value.
! ‘g’     Offset 7 bytes of a memory reference or constant value.
! ‘p’     Print the value of 2, raised to the power of the given
          constant.  Used to select the specified bit position.
! ‘r’     Inverse of condition code, for signed comparisons.
! ‘x’     Equivialent to ‘X’, but only for pointers.
  
  6.48.2.13 LoongArch Operand Modifiers
  .....................................
*************** LoongArch.
*** 45897,45909 ****
  
  ModifierDescription
  --------------------------------------------------------------------------
! 'd'     Same as 'c'.
! 'i'     Print the character "'i'" if the operand is not a register.
! 'm'     Same as 'c', but the printed value is 'operand - 1'.
! 'u'     Print a LASX register.
! 'w'     Print a LSX register.
! 'X'     Print a constant integer operand in hexadecimal.
! 'z'     Print the operand in its unmodified form, followed by a comma.
  
   References to input and output operands in the assembler template of
  extended asm statements can use modifiers to affect the way the operands
--- 45907,45919 ----
  
  ModifierDescription
  --------------------------------------------------------------------------
! ‘d’     Same as ‘c’.
! ‘i’     Print the character "‘i’" if the operand is not a register.
! ‘m’     Same as ‘c’, but the printed value is ‘operand - 1’.
! ‘u’     Print a LASX register.
! ‘w’     Print a LSX register.
! ‘X’     Print a constant integer operand in hexadecimal.
! ‘z’     Print the operand in its unmodified form, followed by a comma.
  
   References to input and output operands in the assembler template of
  extended asm statements can use modifiers to affect the way the operands
*************** The assembly statement produces the foll
*** 45933,45942 ****
  
       vadd.d $vr0,$vr0,$vr1
  
!  This is a 128-bit vector addition instruction, 'c' (referred to in the
! template string as %0) is the output, and 'a' (%1) and 'b' (%2) are the
! inputs.  '__m128i' is a vector data type defined in the file
! 'lsxintrin.h' (*Note LoongArch SX Vector Intrinsics::).  The symbol '=f'
  represents a constraint using a floating-point register as an output
  type, and the 'f' in the input operand represents a constraint using a
  floating-point register operand, which can refer to the definition of a
--- 45943,45952 ----
  
       vadd.d $vr0,$vr0,$vr1
  
!  This is a 128-bit vector addition instruction, ‘c’ (referred to in the
! template string as %0) is the output, and ‘a’ (%1) and ‘b’ (%2) are the
! inputs.  ‘__m128i’ is a vector data type defined in the file
! ‘lsxintrin.h’ (*Note LoongArch SX Vector Intrinsics::).  The symbol '=f'
  represents a constraint using a floating-point register as an output
  type, and the 'f' in the input operand represents a constraint using a
  floating-point register operand, which can refer to the definition of a
*************** RISC-V.
*** 45950,45972 ****
  
  ModifierDescription
  --------------------------------------------------------------------------
! 'z'     Print "'zero'" instead of 0 if the operand is an immediate with
          a value of zero.
! 'i'     Print the character "'i'" if the operand is an immediate.
  
  
  File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
  
! 6.48.3 Constraints for 'asm' Operands
  -------------------------------------
  
  Here are specific details on what constraint letters you can use with
! 'asm' operands.  Constraints can say whether an operand may be in a
  register, and which kinds of register; whether the operand can be a
  memory reference, and which kinds of address; whether the operand may be
  an immediate constant, and which possible values it may have.
  Constraints can also require two operands to match.  Side-effects aren't
! allowed in operands of inline 'asm', unless '<' or '>' constraints are
  used, because there is no guarantee that the side effects will happen
  exactly once in an instruction that can update the addressing register.
  
--- 45960,45982 ----
  
  ModifierDescription
  --------------------------------------------------------------------------
! ‘z’     Print "‘zero’" instead of 0 if the operand is an immediate with
          a value of zero.
! ‘i’     Print the character "‘i’" if the operand is an immediate.
  
  
  File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
  
! 6.48.3 Constraints for ‘asm’ Operands
  -------------------------------------
  
  Here are specific details on what constraint letters you can use with
! ‘asm’ operands.  Constraints can say whether an operand may be in a
  register, and which kinds of register; whether the operand can be a
  memory reference, and which kinds of address; whether the operand may be
  an immediate constant, and which possible values it may have.
  Constraints can also require two operands to match.  Side-effects aren't
! allowed in operands of inline ‘asm’, unless ‘<’ or ‘>’ constraints are
  used, because there is no guarantee that the side effects will happen
  exactly once in an instruction that can update the addressing register.
  
*************** whitespace
*** 45994,46008 ****
       description even if they have different number of constraints and
       modifiers.
  
! 'm'
       A memory operand is allowed, with any kind of address that the
       machine supports in general.  Note that the letter used for the
       general memory constraint can be re-defined by a back end using the
!      'TARGET_MEM_CONSTRAINT' macro.
  
! 'o'
       A memory operand is allowed, but only if the address is
!      "offsettable".  This means that adding a small integer (actually,
       the width in bytes of the operand, as determined by its machine
       mode) may be added to the address and the result is also a valid
       memory address.
--- 46004,46018 ----
       description even if they have different number of constraints and
       modifiers.
  
! ‘m’
       A memory operand is allowed, with any kind of address that the
       machine supports in general.  Note that the letter used for the
       general memory constraint can be re-defined by a back end using the
!      ‘TARGET_MEM_CONSTRAINT’ macro.
  
! ‘o’
       A memory operand is allowed, but only if the address is
!      “offsettable”.  This means that adding a small integer (actually,
       the width in bytes of the operand, as determined by its machine
       mode) may be added to the address and the result is also a valid
       memory address.
*************** whitespace
*** 46016,46108 ****
       on the other addressing modes that the machine supports.
  
       Note that in an output operand which can be matched by another
!      operand, the constraint letter 'o' is valid only when accompanied
!      by both '<' (if the target machine has predecrement addressing) and
!      '>' (if the target machine has preincrement addressing).
  
! 'V'
       A memory operand that is not offsettable.  In other words, anything
!      that would fit the 'm' constraint but not the 'o' constraint.
  
! '<'
       A memory operand with autodecrement addressing (either predecrement
!      or postdecrement) is allowed.  In inline 'asm' this constraint is
       only allowed if the operand is used exactly once in an instruction
!      that can handle the side effects.  Not using an operand with '<' in
!      constraint string in the inline 'asm' pattern at all or using it in
       multiple instructions isn't valid, because the side effects
       wouldn't be performed or would be performed more than once.
!      Furthermore, on some targets the operand with '<' in constraint
       string must be accompanied by special instruction suffixes like
!      '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
  
! '>'
       A memory operand with autoincrement addressing (either preincrement
!      or postincrement) is allowed.  In inline 'asm' the same
!      restrictions as for '<' apply.
  
! 'r'
       A register operand is allowed provided that it is in a general
       register.
  
! 'i'
       An immediate integer operand (one with constant value) is allowed.
       This includes symbolic constants whose values will be known only at
       assembly time or later.
  
! 'n'
       An immediate integer operand with a known numeric value is allowed.
       Many systems cannot support assembly-time constants for operands
       less than a word wide.  Constraints for these operands should use
!      'n' rather than 'i'.
  
! 'I', 'J', 'K', ... 'P'
!      Other letters in the range 'I' through 'P' may be defined in a
       machine-dependent fashion to permit immediate integer operands with
       explicit integer values in specified ranges.  For example, on the
!      68000, 'I' is defined to stand for the range of values 1 to 8.
       This is the range permitted as a shift count in the shift
       instructions.
  
! 'E'
!      An immediate floating operand (expression code 'const_double') is
       allowed, but only if the target floating point format is the same
       as that of the host machine (on which the compiler is running).
  
! 'F'
!      An immediate floating operand (expression code 'const_double' or
!      'const_vector') is allowed.
  
! 'G', 'H'
!      'G' and 'H' may be defined in a machine-dependent fashion to permit
       immediate floating operands in particular ranges of values.
  
! 's'
       An immediate integer operand whose value is not an explicit integer
       is allowed.
  
       This might appear strange; if an insn allows a constant operand
       with a value not known at compile time, it certainly must allow any
!      known value.  So why use 's' instead of 'i'?  Sometimes it allows
       better code to be generated.
  
       For example, on the 68000 in a fullword instruction it is possible
       to use an immediate operand; but if the immediate value is between
!      -128 and 127, better code results from loading the value into a
       register and using the register.  This is because the load into the
!      register can be done with a 'moveq' instruction.  We arrange for
!      this to happen by defining the letter 'K' to mean "any integer
!      outside the range -128 to 127", and then specifying 'Ks' in the
       operand constraints.
  
! 'g'
       Any register, memory or immediate integer operand is allowed,
       except for registers that are not general registers.
  
! 'X'
       Any operand whatsoever is allowed.
  
! '0', '1', '2', ... '9'
       An operand that matches the specified operand number is allowed.
       If a digit is used together with letters within the same
       alternative, the digit should come last.
--- 46026,46118 ----
       on the other addressing modes that the machine supports.
  
       Note that in an output operand which can be matched by another
!      operand, the constraint letter ‘o’ is valid only when accompanied
!      by both ‘<’ (if the target machine has predecrement addressing) and
!      ‘>’ (if the target machine has preincrement addressing).
  
! ‘V’
       A memory operand that is not offsettable.  In other words, anything
!      that would fit the ‘m’ constraint but not the ‘o’ constraint.
  
! ‘<’
       A memory operand with autodecrement addressing (either predecrement
!      or postdecrement) is allowed.  In inline ‘asm’ this constraint is
       only allowed if the operand is used exactly once in an instruction
!      that can handle the side effects.  Not using an operand with ‘<’ in
!      constraint string in the inline ‘asm’ pattern at all or using it in
       multiple instructions isn't valid, because the side effects
       wouldn't be performed or would be performed more than once.
!      Furthermore, on some targets the operand with ‘<’ in constraint
       string must be accompanied by special instruction suffixes like
!      ‘%U0’ instruction suffix on PowerPC or ‘%P0’ on IA-64.
  
! ‘>’
       A memory operand with autoincrement addressing (either preincrement
!      or postincrement) is allowed.  In inline ‘asm’ the same
!      restrictions as for ‘<’ apply.
  
! ‘r’
       A register operand is allowed provided that it is in a general
       register.
  
! ‘i’
       An immediate integer operand (one with constant value) is allowed.
       This includes symbolic constants whose values will be known only at
       assembly time or later.
  
! ‘n’
       An immediate integer operand with a known numeric value is allowed.
       Many systems cannot support assembly-time constants for operands
       less than a word wide.  Constraints for these operands should use
!      ‘n’ rather than ‘i’.
  
! ‘I’, ‘J’, ‘K’, ... ‘P’
!      Other letters in the range ‘I’ through ‘P’ may be defined in a
       machine-dependent fashion to permit immediate integer operands with
       explicit integer values in specified ranges.  For example, on the
!      68000, ‘I’ is defined to stand for the range of values 1 to 8.
       This is the range permitted as a shift count in the shift
       instructions.
  
! ‘E’
!      An immediate floating operand (expression code ‘const_double’) is
       allowed, but only if the target floating point format is the same
       as that of the host machine (on which the compiler is running).
  
! ‘F’
!      An immediate floating operand (expression code ‘const_double’ or
!      ‘const_vector’) is allowed.
  
! ‘G’, ‘H’
!      ‘G’ and ‘H’ may be defined in a machine-dependent fashion to permit
       immediate floating operands in particular ranges of values.
  
! ‘s’
       An immediate integer operand whose value is not an explicit integer
       is allowed.
  
       This might appear strange; if an insn allows a constant operand
       with a value not known at compile time, it certainly must allow any
!      known value.  So why use ‘s’ instead of ‘i’?  Sometimes it allows
       better code to be generated.
  
       For example, on the 68000 in a fullword instruction it is possible
       to use an immediate operand; but if the immediate value is between
!      −128 and 127, better code results from loading the value into a
       register and using the register.  This is because the load into the
!      register can be done with a ‘moveq’ instruction.  We arrange for
!      this to happen by defining the letter ‘K’ to mean "any integer
!      outside the range −128 to 127", and then specifying ‘Ks’ in the
       operand constraints.
  
! ‘g’
       Any register, memory or immediate integer operand is allowed,
       except for registers that are not general registers.
  
! ‘X’
       Any operand whatsoever is allowed.
  
! ‘0’, ‘1’, ‘2’, ... ‘9’
       An operand that matches the specified operand number is allowed.
       If a digit is used together with letters within the same
       alternative, the digit should come last.
*************** whitespace
*** 46110,46122 ****
       This number is allowed to be more than a single digit.  If multiple
       digits are encountered consecutively, they are interpreted as a
       single decimal integer.  There is scant chance for ambiguity, since
!      to-date it has never been desirable that '10' be interpreted as
       matching either operand 1 _or_ operand 0.  Should this be desired,
       one can use multiple alternatives instead.
  
!      This is called a "matching constraint" and what it really means is
       that the assembler has only a single operand that fills two roles
!      which 'asm' distinguishes.  For example, an add instruction uses
       two input operands and an output operand, but on most CISC machines
       an add instruction really has only two operands, one of them an
       input-output operand:
--- 46120,46132 ----
       This number is allowed to be more than a single digit.  If multiple
       digits are encountered consecutively, they are interpreted as a
       single decimal integer.  There is scant chance for ambiguity, since
!      to-date it has never been desirable that ‘10’ be interpreted as
       matching either operand 1 _or_ operand 0.  Should this be desired,
       one can use multiple alternatives instead.
  
!      This is called a “matching constraint” and what it really means is
       that the assembler has only a single operand that fills two roles
!      which ‘asm’ distinguishes.  For example, an add instruction uses
       two input operands and an output operand, but on most CISC machines
       an add instruction really has only two operands, one of them an
       input-output operand:
*************** whitespace
*** 46129,46147 ****
       smaller number than the number of the operand that uses it in the
       constraint.
  
! 'p'
       An operand that is a valid memory address is allowed.  This is for
       "load address" and "push address" instructions.
  
!      'p' in the constraint must be accompanied by 'address_operand' as
!      the predicate in the 'match_operand'.  This predicate interprets
!      the mode specified in the 'match_operand' as the mode of the memory
       reference for which the address would be valid.
  
  OTHER-LETTERS
       Other letters can be defined in machine-dependent fashion to stand
       for particular classes of registers or other arbitrary operand
!      types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
       for data, address and floating point registers.
  
  
--- 46139,46157 ----
       smaller number than the number of the operand that uses it in the
       constraint.
  
! ‘p’
       An operand that is a valid memory address is allowed.  This is for
       "load address" and "push address" instructions.
  
!      ‘p’ in the constraint must be accompanied by ‘address_operand’ as
!      the predicate in the ‘match_operand’.  This predicate interprets
!      the mode specified in the ‘match_operand’ as the mode of the memory
       reference for which the address would be valid.
  
  OTHER-LETTERS
       Other letters can be defined in machine-dependent fashion to stand
       for particular classes of registers or other arbitrary operand
!      types.  ‘d’, ‘a’ and ‘f’ are defined on the 68000/68020 to stand
       for data, address and floating point registers.
  
  
*************** alternative.  All operands for a single
*** 46165,46181 ****
  number of alternatives.
  
   So the first alternative for the 68000's logical-or could be written as
! '"+m" (output) : "ir" (input)'.  The second could be '"+r" (output):
! "irm" (input)'.  However, the fact that two memory locations cannot be
! used in a single instruction prevents simply using '"+rm" (output) :
! "irm" (input)'.  Using multi-alternatives, this might be written as
! '"+m,r" (output) : "ir,irm" (input)'.  This describes all the available
  alternatives to the compiler, allowing it to choose the most efficient
  one for the current conditions.
  
   There is no way within the template to determine which alternative was
! chosen.  However you may be able to wrap your 'asm' statements with
! builtins such as '__builtin_constant_p' to achieve the desired results.
  
  
  File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
--- 46175,46191 ----
  number of alternatives.
  
   So the first alternative for the 68000's logical-or could be written as
! ‘"+m" (output) : "ir" (input)’.  The second could be ‘"+r" (output):
! "irm" (input)’.  However, the fact that two memory locations cannot be
! used in a single instruction prevents simply using ‘"+rm" (output) :
! "irm" (input)’.  Using multi-alternatives, this might be written as
! ‘"+m,r" (output) : "ir,irm" (input)’.  This describes all the available
  alternatives to the compiler, allowing it to choose the most efficient
  one for the current conditions.
  
   There is no way within the template to determine which alternative was
! chosen.  However you may be able to wrap your ‘asm’ statements with
! builtins such as ‘__builtin_constant_p’ to achieve the desired results.
  
  
  File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
*************** File: gcc.info,  Node: Modifiers,  Next:
*** 46185,46217 ****
  
  Here are constraint modifier characters.
  
! '='
       Means that this operand is written to by this instruction: the
       previous value is discarded and replaced by new data.
  
! '+'
       Means that this operand is both read and written by the
       instruction.
  
       When the compiler fixes up the operands to satisfy the constraints,
       it needs to know which operands are read by the instruction and
!      which are written by it.  '=' identifies an operand which is only
!      written; '+' identifies an operand that is both read and written;
       all other operands are assumed to only be read.
  
!      If you specify '=' or '+' in a constraint, you put it in the first
       character of the constraint string.
  
! '&'
       Means (in a particular alternative) that this operand is an
!      "earlyclobber" operand, which is written before the instruction is
       finished using the input operands.  Therefore, this operand may not
       lie in a register that is read by the instruction or as part of any
       memory address.
  
!      '&' applies only to the alternative in which it is written.  In
       constraints with multiple alternatives, sometimes one alternative
!      requires '&' while others do not.  See, for example, the 'movdf'
       insn of the 68000.
  
       An operand which is read by the instruction can be tied to an
--- 46195,46227 ----
  
  Here are constraint modifier characters.
  
! ‘=’
       Means that this operand is written to by this instruction: the
       previous value is discarded and replaced by new data.
  
! ‘+’
       Means that this operand is both read and written by the
       instruction.
  
       When the compiler fixes up the operands to satisfy the constraints,
       it needs to know which operands are read by the instruction and
!      which are written by it.  ‘=’ identifies an operand which is only
!      written; ‘+’ identifies an operand that is both read and written;
       all other operands are assumed to only be read.
  
!      If you specify ‘=’ or ‘+’ in a constraint, you put it in the first
       character of the constraint string.
  
! ‘&’
       Means (in a particular alternative) that this operand is an
!      “earlyclobber” operand, which is written before the instruction is
       finished using the input operands.  Therefore, this operand may not
       lie in a register that is read by the instruction or as part of any
       memory address.
  
!      ‘&’ applies only to the alternative in which it is written.  In
       constraints with multiple alternatives, sometimes one alternative
!      requires ‘&’ while others do not.  See, for example, the ‘movdf’
       insn of the 68000.
  
       An operand which is read by the instruction can be tied to an
*************** Here are constraint modifier characters.
*** 46219,46241 ****
       early result is written.  Adding alternatives of this form often
       allows GCC to produce better code when only some of the read
       operands can be affected by the earlyclobber.  See, for example,
!      the 'mulsi3' insn of the ARM.
  
!      Furthermore, if the "earlyclobber" operand is also a read/write
       operand, then that operand is written only after it's used.
  
!      '&' does not obviate the need to write '=' or '+'.  As
!      "earlyclobber" operands are always written, a read-only
!      "earlyclobber" operand is ill-formed and will be rejected by the
       compiler.
  
! '%'
       Declares the instruction to be commutative for this operand and the
       following operand.  This means that the compiler may interchange
       the two operands if that is the cheapest way to make all operands
!      fit the constraints.  '%' applies to all alternatives and must
       appear as the first character in the constraint.  Only read-only
!      operands can use '%'.
  
       GCC can only handle one commutative pair in an asm; if you use
       more, the compiler may fail.  Note that you need not use the
--- 46229,46251 ----
       early result is written.  Adding alternatives of this form often
       allows GCC to produce better code when only some of the read
       operands can be affected by the earlyclobber.  See, for example,
!      the ‘mulsi3’ insn of the ARM.
  
!      Furthermore, if the “earlyclobber” operand is also a read/write
       operand, then that operand is written only after it's used.
  
!      ‘&’ does not obviate the need to write ‘=’ or ‘+’.  As
!      “earlyclobber” operands are always written, a read-only
!      “earlyclobber” operand is ill-formed and will be rejected by the
       compiler.
  
! ‘%’
       Declares the instruction to be commutative for this operand and the
       following operand.  This means that the compiler may interchange
       the two operands if that is the cheapest way to make all operands
!      fit the constraints.  ‘%’ applies to all alternatives and must
       appear as the first character in the constraint.  Only read-only
!      operands can use ‘%’.
  
       GCC can only handle one commutative pair in an asm; if you use
       more, the compiler may fail.  Note that you need not use the
*************** File: gcc.info,  Node: Machine Constrain
*** 46249,47767 ****
  ............................................
  
  Whenever possible, you should use the general-purpose constraint letters
! in 'asm' arguments, since they will convey meaning more readily to
  people reading your code.  Failing that, use the constraint letters that
  usually have very similar meanings across architectures.  The most
! commonly used constraints are 'm' and 'r' (for memory and
  general-purpose registers respectively; *note Simple Constraints::), and
! 'I', usually the letter indicating the most common immediate-constant
  format.
  
   Each architecture defines additional constraints.  These constraints
  are used by the compiler itself for instruction generation, as well as
! for 'asm' statements; therefore, some of the constraints are not
! particularly useful for 'asm'.  Here is a summary of some of the
  machine-dependent constraints available on some particular machines; it
! includes both constraints that are useful for 'asm' and constraints that
  aren't.  The compiler source file mentioned in the table heading for
  each architecture is the definitive reference for the meanings of that
  architecture's constraints.
  
! _AArch64 family--'config/aarch64/constraints.md'_
!      'k'
!           The stack pointer register ('SP')
  
!      'w'
            Floating point register, Advanced SIMD vector register or SVE
            vector register
  
!      'x'
!           Like 'w', but restricted to registers 0 to 15 inclusive.
  
!      'y'
!           Like 'w', but restricted to registers 0 to 7 inclusive.
  
!      'Upl'
!           One of the low eight SVE predicate registers ('P0' to 'P7')
  
!      'Upa'
!           Any of the SVE predicate registers ('P0' to 'P15')
  
!      'I'
            Integer constant that is valid as an immediate operand in an
!           'ADD' instruction
  
!      'J'
            Integer constant that is valid as an immediate operand in a
!           'SUB' instruction (once negated)
  
!      'K'
            Integer constant that can be used with a 32-bit logical
            instruction
  
!      'L'
            Integer constant that can be used with a 64-bit logical
            instruction
  
!      'M'
            Integer constant that is valid as an immediate operand in a
!           32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
            to one of several different machine instructions depending on
            the value
  
!      'N'
            Integer constant that is valid as an immediate operand in a
!           64-bit 'MOV' pseudo instruction
  
!      'S'
            An absolute symbolic address or a label reference
  
!      'Y'
            Floating point constant zero
  
!      'Z'
            Integer constant zero
  
!      'Ush'
            The high part (bits 12 and upwards) of the pc-relative address
            of a symbol within 4GB of the instruction
  
!      'Q'
            A memory address which uses a single base register with no
            offset
  
!      'Ump'
            A memory address suitable for a load/store pair instruction in
            SI, DI, SF and DF modes
  
! _AMD GCN --'config/gcn/constraints.md'_
!      'I'
!           Immediate integer in the range -16 to 64
  
!      'J'
            Immediate 16-bit signed integer
  
!      'Kf'
!           Immediate constant -1
  
!      'L'
            Immediate 15-bit unsigned integer
  
!      'A'
            Immediate constant that can be inlined in an instruction
!           encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
!           +/-2.0, +/-4.0, 1.0/(2.0*PI)
  
!      'B'
            Immediate 32-bit signed integer that can be attached to an
            instruction encoding
  
!      'C'
!           Immediate 32-bit integer in range -16..4294967295 (i.e.
!           32-bit unsigned integer or 'A' constraint)
  
!      'DA'
!           Immediate 64-bit constant that can be split into two 'A'
            constants
  
!      'DB'
!           Immediate 64-bit constant that can be split into two 'B'
            constants
  
!      'U'
!           Any 'unspec'
  
!      'Y'
!           Any 'symbol_ref' or 'label_ref'
  
!      'v'
            VGPR register
  
!      'a'
            Accelerator VGPR register (CDNA1 onwards)
  
!      'Sg'
            SGPR register
  
!      'SD'
            SGPR registers valid for instruction destinations, including
            VCC, M0 and EXEC
  
!      'SS'
            SGPR registers valid for instruction sources, including VCC,
            M0, EXEC and SCC
  
!      'Sm'
            SGPR registers valid as a source for scalar memory
            instructions (excludes M0 and EXEC)
  
!      'Sv'
            SGPR registers valid as a source or destination for vector
            instructions (excludes EXEC)
  
!      'ca'
            All condition registers: SCC, VCCZ, EXECZ
  
!      'cs'
            Scalar condition register: SCC
  
!      'cV'
            Vector condition register: VCC, VCC_LO, VCC_HI
  
!      'e'
            EXEC register (EXEC_LO and EXEC_HI)
  
!      'RB'
!           Memory operand with address space suitable for 'buffer_*'
            instructions
  
!      'RF'
!           Memory operand with address space suitable for 'flat_*'
            instructions
  
!      'RS'
!           Memory operand with address space suitable for 's_*'
            instructions
  
!      'RL'
!           Memory operand with address space suitable for 'ds_*' LDS
            instructions
  
!      'RG'
!           Memory operand with address space suitable for 'ds_*' GDS
            instructions
  
!      'RD'
!           Memory operand with address space suitable for any 'ds_*'
            instructions
  
!      'RM'
!           Memory operand with address space suitable for 'global_*'
            instructions
  
! _ARC --'config/arc/constraints.md'_
!      'q'
!           Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
!           'r12'-'r15'.  This constraint can only match when the '-mq'
            option is in effect.
  
!      'e'
            Registers usable as base-regs of memory addresses in ARCompact
!           16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
!           This constraint can only match when the '-mq' option is in
            effect.
!      'D'
!           ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
  
!      'I'
            A signed 12-bit integer constant.
  
!      'Cal'
            constant for arithmetic/logical operations.  This might be any
            constant that can be put into a long immediate by the assmbler
            or linker without involving a PIC relocation.
  
!      'K'
            A 3-bit unsigned integer constant.
  
!      'L'
            A 6-bit unsigned integer constant.
  
!      'CnL'
            One's complement of a 6-bit unsigned integer constant.
  
!      'CmL'
            Two's complement of a 6-bit unsigned integer constant.
  
!      'M'
            A 5-bit unsigned integer constant.
  
!      'O'
            A 7-bit unsigned integer constant.
  
!      'P'
            A 8-bit unsigned integer constant.
  
!      'H'
            Any const_double value.
  
! _ARM family--'config/arm/constraints.md'_
  
!      'h'
!           In Thumb state, the core registers 'r8'-'r15'.
  
!      'k'
            The stack pointer register.
  
!      'l'
!           In Thumb State the core registers 'r0'-'r7'.  In ARM state
!           this is an alias for the 'r' constraint.
  
!      't'
!           VFP floating-point registers 's0'-'s31'.  Used for 32 bit
            values.
  
!      'w'
!           VFP floating-point registers 'd0'-'d31' and the appropriate
!           subset 'd0'-'d15' based on command line options.  Used for 64
            bit values only.  Not valid for Thumb1.
  
!      'y'
            The iWMMX co-processor registers.
  
!      'z'
            The iWMMX GR registers.
  
!      'G'
            The floating-point constant 0.0
  
!      'I'
            Integer that is valid as an immediate operand in a data
            processing instruction.  That is, an integer in the range 0 to
            255 rotated by a multiple of 2
  
!      'J'
!           Integer in the range -4095 to 4095
  
!      'K'
!           Integer that satisfies constraint 'I' when inverted (ones
            complement)
  
!      'L'
!           Integer that satisfies constraint 'I' when negated (twos
            complement)
  
!      'M'
            Integer in the range 0 to 32
  
!      'Q'
            A memory reference where the exact address is in a single
!           register (''m'' is preferable for 'asm' statements)
  
!      'R'
            An item in the constant pool
  
!      'S'
            A symbol in the text segment of the current file
  
!      'Uv'
            A memory reference suitable for VFP load/store insns
            (reg+constant offset)
  
!      'Uy'
            A memory reference suitable for iWMMXt load/store
            instructions.
  
!      'Uq'
            A memory reference suitable for the ARMv4 ldrsb instruction.
  
! _AVR family--'config/avr/constraints.md'_
!      'l'
            Registers from r0 to r15
  
!      'a'
            Registers from r16 to r23
  
!      'd'
            Registers from r16 to r31
  
!      'w'
            Registers from r24 to r31.  These registers can be used in
!           'adiw' command
  
!      'e'
            Pointer register (r26-r31)
  
!      'b'
            Base pointer register (r28-r31)
  
!      'q'
            Stack pointer register (SPH:SPL)
  
!      't'
            Temporary register r0
  
!      'x'
            Register pair X (r27:r26)
  
!      'y'
            Register pair Y (r29:r28)
  
!      'z'
            Register pair Z (r31:r30)
  
!      'I'
!           Constant greater than -1, less than 64
  
!      'J'
!           Constant greater than -64, less than 1
  
!      'K'
            Constant integer 2
  
!      'L'
            Constant integer 0
  
!      'M'
            Constant that fits in 8 bits
  
!      'N'
!           Constant integer -1
  
!      'O'
            Constant integer 8, 16, or 24
  
!      'P'
            Constant integer 1
  
!      'G'
            A floating point constant 0.0
  
!      'Q'
            A memory address based on Y or Z pointer with displacement.
  
! _Blackfin family--'config/bfin/constraints.md'_
!      'a'
            P register
  
!      'd'
            D register
  
!      'z'
            A call clobbered P register.
  
!      'qN'
            A single register.  If N is in the range 0 to 7, the
!           corresponding D register.  If it is 'A', then the register P0.
  
!      'D'
            Even-numbered D register
  
!      'W'
            Odd-numbered D register
  
!      'e'
            Accumulator register.
  
!      'A'
            Even-numbered accumulator register.
  
!      'B'
            Odd-numbered accumulator register.
  
!      'b'
            I register
  
!      'v'
            B register
  
!      'f'
            M register
  
!      'c'
            Registers used for circular buffering, i.e. I, B, or L
            registers.
  
!      'C'
            The CC register.
  
!      't'
            LT0 or LT1.
  
!      'k'
            LC0 or LC1.
  
!      'u'
            LB0 or LB1.
  
!      'x'
            Any D, P, B, M, I or L register.
  
!      'y'
            Additional registers typically used only in prologues and
            epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
            USP.
  
!      'w'
            Any register except accumulators or CC.
  
!      'Ksh'
!           Signed 16 bit integer (in the range -32768 to 32767)
  
!      'Kuh'
            Unsigned 16 bit integer (in the range 0 to 65535)
  
!      'Ks7'
!           Signed 7 bit integer (in the range -64 to 63)
  
!      'Ku7'
            Unsigned 7 bit integer (in the range 0 to 127)
  
!      'Ku5'
            Unsigned 5 bit integer (in the range 0 to 31)
  
!      'Ks4'
!           Signed 4 bit integer (in the range -8 to 7)
  
!      'Ks3'
!           Signed 3 bit integer (in the range -3 to 4)
  
!      'Ku3'
            Unsigned 3 bit integer (in the range 0 to 7)
  
!      'PN'
            Constant N, where N is a single-digit constant in the range 0
            to 4.
  
!      'PA'
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use with either accumulator.
  
!      'PB'
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use only with accumulator A1.
  
!      'M1'
            Constant 255.
  
!      'M2'
            Constant 65535.
  
!      'J'
            An integer constant with exactly a single bit set.
  
!      'L'
            An integer constant with all bits set except exactly one.
  
!      'H'
!      'Q'
            Any SYMBOL_REF.
  
! _C-SKY--'config/csky/constraints.md'_
  
!      'a'
            The mini registers r0 - r7.
  
!      'b'
            The low registers r0 - r15.
  
!      'c'
            C register.
  
!      'y'
            HI and LO registers.
  
!      'l'
            LO register.
  
!      'h'
            HI register.
  
!      'v'
            Vector registers.
  
!      'z'
            Stack pointer register (SP).
  
!      'Q'
            A memory address which uses a base register with a short
            offset or with a index register with its scale.
  
!      'W'
            A memory address which uses a base register with a index
            register with its scale.
  
! _Epiphany--'config/epiphany/constraints.md'_
!      'U16'
            An unsigned 16-bit constant.
  
!      'K'
            An unsigned 5-bit constant.
  
!      'L'
            A signed 11-bit constant.
  
!      'Cm1'
!           A signed 11-bit constant added to -1.  Can only match when the
!           '-m1reg-REG' option is active.
  
!      'Cl1'
!           Left-shift of -1, i.e., a bit mask with a block of leading
            ones, the rest being a block of trailing zeroes.  Can only
!           match when the '-m1reg-REG' option is active.
  
!      'Cr1'
!           Right-shift of -1, i.e., a bit mask with a trailing block of
            ones, the rest being zeroes.  Or to put it another way, one
            less than a power of two.  Can only match when the
!           '-m1reg-REG' option is active.
  
!      'Cal'
!           Constant for arithmetic/logical operations.  This is like 'i',
            except that for position independent code, no symbols /
            expressions needing relocations are allowed.
  
!      'Csy'
            Symbolic constant for call/jump instruction.
  
!      'Rcs'
            The register class usable in short insns.  This is a register
            class constraint, and can thus drive register allocation.
!           This constraint won't match unless '-mprefer-short-insn-regs'
            is in effect.
  
!      'Rsc'
            The register class of registers that can be used to hold a
            sibcall call address.  I.e., a caller-saved register.
  
!      'Rct'
            Core control register class.
  
!      'Rgs'
            The register group usable in short insns.  This constraint
            does not use a register class, so that it only passively
            matches suitable registers, and doesn't drive register
            allocation.
  
!      'Rra'
            Matches the return address if it can be replaced with the link
            register.
  
!      'Rcc'
            Matches the integer condition code register.
  
!      'Sra'
            Matches the return address if it is in a stack slot.
  
!      'Cfm'
            Matches control register values to switch fp mode, which are
!           encapsulated in 'UNSPEC_FP_MODE'.
  
! _FRV--'config/frv/frv.h'_
!      'a'
!           Register in the class 'ACC_REGS' ('acc0' to 'acc7').
  
!      'b'
!           Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
  
!      'c'
!           Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
!           to 'icc3').
  
!      'd'
!           Register in the class 'GPR_REGS' ('gr0' to 'gr63').
  
!      'e'
!           Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      'f'
!           Register in the class 'FPR_REGS' ('fr0' to 'fr63').
  
!      'h'
!           Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      'l'
!           Register in the class 'LR_REG' (the 'lr' register).
  
!      'q'
!           Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
            numbers not divisible by 4 are excluded not in the class but
            through the use of a machine mode larger than 8 bytes.
  
!      't'
!           Register in the class 'ICC_REGS' ('icc0' to 'icc3').
  
!      'u'
!           Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
  
!      'v'
!           Register in the class 'ICR_REGS' ('cc4' to 'cc7').
  
!      'w'
!           Register in the class 'FCR_REGS' ('cc0' to 'cc3').
  
!      'x'
!           Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
            Register numbers not divisible by 4 are excluded not in the
            class but through the use of a machine mode larger than 8
            bytes.
  
!      'z'
!           Register in the class 'SPR_REGS' ('lcr' and 'lr').
  
!      'A'
!           Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
  
!      'B'
!           Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
  
!      'C'
!           Register in the class 'CR_REGS' ('cc0' to 'cc7').
  
!      'G'
            Floating point constant zero
  
!      'I'
            6-bit signed integer constant
  
!      'J'
            10-bit signed integer constant
  
!      'L'
            16-bit signed integer constant
  
!      'M'
            16-bit unsigned integer constant
  
!      'N'
            12-bit signed integer constant that is negative--i.e. in the
!           range of -2048 to -1
  
!      'O'
            Constant zero
  
!      'P'
            12-bit signed integer constant that is greater than zero--i.e.
            in the range of 1 to 2047.
  
! _FT32--'config/ft32/constraints.md'_
!      'A'
            An absolute address
  
!      'B'
            An offset address
  
!      'W'
            A register indirect memory operand
  
!      'e'
            An offset address.
  
!      'f'
            An offset address.
  
!      'O'
            The constant zero or one
  
!      'I'
!           A 16-bit signed constant (-32768 ... 32767)
  
!      'w'
            A bitfield mask suitable for bext or bins
  
!      'x'
            An inverted bitfield mask suitable for bext or bins
  
!      'L'
            A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
  
!      'S'
!           A 20-bit signed constant (-524288 ... 524287)
  
!      'b'
            A constant for a bitfield width (1 ... 16)
  
!      'KA'
!           A 10-bit signed constant (-512 ... 511)
  
! _Hewlett-Packard PA-RISC--'config/pa/pa.h'_
!      'a'
            General register 1
  
!      'f'
            Floating point register
  
!      'q'
            Shift amount register
  
!      'x'
            Floating point register (deprecated)
  
!      'y'
            Upper floating point register (32-bit), floating point
            register (64-bit)
  
!      'Z'
            Any register
  
!      'I'
            Signed 11-bit integer constant
  
!      'J'
            Signed 14-bit integer constant
  
!      'K'
!           Integer constant that can be deposited with a 'zdepi'
            instruction
  
!      'L'
            Signed 5-bit integer constant
  
!      'M'
            Integer constant 0
  
!      'N'
!           Integer constant that can be loaded with a 'ldil' instruction
  
!      'O'
            Integer constant whose value plus one is a power of 2
  
!      'P'
!           Integer constant that can be used for 'and' operations in
!           'depi' and 'extru' instructions
  
!      'S'
            Integer constant 31
  
!      'U'
            Integer constant 63
  
!      'G'
            Floating-point constant 0.0
  
!      'A'
!           A 'lo_sum' data-linkage-table memory operand
  
!      'Q'
            A memory operand that can be used as the destination operand
            of an integer store instruction
  
!      'R'
            A scaled or unscaled indexed memory operand
  
!      'T'
            A memory operand for floating-point loads and stores
  
!      'W'
            A register indirect memory operand
  
! _Intel IA-64--'config/ia64/ia64.h'_
!      'a'
!           General register 'r0' to 'r3' for 'addl' instruction
  
!      'b'
            Branch register
  
!      'c'
!           Predicate register ('c' as in "conditional")
  
!      'd'
            Application register residing in M-unit
  
!      'e'
            Application register residing in I-unit
  
!      'f'
            Floating-point register
  
!      'm'
!           Memory operand.  If used together with '<' or '>', the operand
            can have postincrement and postdecrement which require
!           printing with '%Pn' on IA-64.
  
!      'G'
            Floating-point constant 0.0 or 1.0
  
!      'I'
            14-bit signed integer constant
  
!      'J'
            22-bit signed integer constant
  
!      'K'
            8-bit signed integer constant for logical instructions
  
!      'L'
            8-bit adjusted signed integer constant for compare pseudo-ops
  
!      'M'
            6-bit unsigned integer constant for shift counts
  
!      'N'
            9-bit signed integer constant for load and store
            postincrements
  
!      'O'
            The constant zero
  
!      'P'
!           0 or -1 for 'dep' instruction
  
!      'Q'
            Non-volatile memory for floating-point loads and stores
  
!      'R'
!           Integer constant in the range 1 to 4 for 'shladd' instruction
  
!      'S'
            Memory operand except postincrement and postdecrement.  This
!           is now roughly the same as 'm' when not used together with '<'
!           or '>'.
  
! _M32C--'config/m32c/m32c.cc'_
!      'Rsp'
!      'Rfb'
!      'Rsb'
!           '$sp', '$fb', '$sb'.
  
!      'Rcr'
            Any control register, when they're 16 bits wide (nothing if
            control registers are 24 bits wide)
  
!      'Rcl'
            Any control register, when they're 24 bits wide.
  
!      'R0w'
!      'R1w'
!      'R2w'
!      'R3w'
            $r0, $r1, $r2, $r3.
  
!      'R02'
            $r0 or $r2, or $r2r0 for 32 bit values.
  
!      'R13'
            $r1 or $r3, or $r3r1 for 32 bit values.
  
!      'Rdi'
            A register that can hold a 64 bit value.
  
!      'Rhl'
            $r0 or $r1 (registers with addressable high/low bytes)
  
!      'R23'
            $r2 or $r3
  
!      'Raa'
            Address registers
  
!      'Raw'
            Address registers when they're 16 bits wide.
  
!      'Ral'
            Address registers when they're 24 bits wide.
  
!      'Rqi'
            Registers that can hold QI values.
  
!      'Rad'
            Registers that can be used with displacements ($a0, $a1, $sb).
  
!      'Rsi'
            Registers that can hold 32 bit values.
  
!      'Rhi'
            Registers that can hold 16 bit values.
  
!      'Rhc'
            Registers chat can hold 16 bit values, including all control
            registers.
  
!      'Rra'
            $r0 through R1, plus $a0 and $a1.
  
!      'Rfl'
            The flags register.
  
!      'Rmm'
            The memory-based pseudo-registers $mem0 through $mem15.
  
!      'Rpi'
            Registers that can hold pointers (16 bit registers for r8c,
            m16c; 24 bit registers for m32cm, m32c).
  
!      'Rpa'
            Matches multiple registers in a PARALLEL to form a larger
            register.  Used to match function return values.
  
!      'Is3'
!           -8 ... 7
  
!      'IS1'
!           -128 ... 127
  
!      'IS2'
!           -32768 ... 32767
  
!      'IU2'
            0 ... 65535
  
!      'In4'
!           -8 ... -1 or 1 ... 8
  
!      'In5'
!           -16 ... -1 or 1 ... 16
  
!      'In6'
!           -32 ... -1 or 1 ... 32
  
!      'IM2'
!           -65536 ... -1
  
!      'Ilb'
            An 8 bit value with exactly one bit set.
  
!      'Ilw'
            A 16 bit value with exactly one bit set.
  
!      'Sd'
            The common src/dest memory addressing modes.
  
!      'Sa'
            Memory addressed using $a0 or $a1.
  
!      'Si'
            Memory addressed with immediate addresses.
  
!      'Ss'
            Memory addressed using the stack pointer ($sp).
  
!      'Sf'
            Memory addressed using the frame base register ($fb).
  
!      'Ss'
            Memory addressed using the small base register ($sb).
  
!      'S1'
            $r1h
  
! _LoongArch--'config/loongarch/constraints.md'_
!      'f'
            A floating-point or vector register (if available).
!      'k'
            A memory operand whose address is formed by a base register
            and (optionally scaled) index register.
!      'l'
            A signed 16-bit constant.
!      'm'
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as 'st.w' and 'ld.w'.
!      'I'
            A signed 12-bit constant (for arithmetic instructions).
!      'K'
            An unsigned 12-bit constant (for logic instructions).
!      'M'
!           A constant that cannot be loaded using 'lui', 'addiu' or
!           'ori'.
!      'N'
            A constant in the range -65535 to -1 (inclusive).
!      'O'
            A signed 15-bit constant.
!      'P'
            A constant in the range 1 to 65535 (inclusive).
!      'R'
            An address that can be used in a non-macro load or store.
!      'ZB'
            An address that is held in a general-purpose register.  The
            offset is zero.
!      'ZC'
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as 'll.w' and 'sc.w'.
  
! _MicroBlaze--'config/microblaze/constraints.md'_
!      'd'
!           A general register ('r0' to 'r31').
  
!      'z'
!           A status register ('rmsr', '$fcc1' to '$fcc7').
  
! _MIPS--'config/mips/constraints.md'_
!      'd'
!           A general-purpose register.  This is equivalent to 'r' unless
            generating MIPS16 code, in which case the MIPS16 register set
            is used.
  
!      'f'
            A floating-point register (if available).
  
!      'h'
!           Formerly the 'hi' register.  This constraint is no longer
            supported.
  
!      'l'
!           The 'lo' register.  Use this register to store values that are
            no bigger than a word.
  
!      'x'
!           The concatenated 'hi' and 'lo' registers.  Use this register
            to store doubleword values.
  
!      'c'
            A register suitable for use in an indirect jump.  This will
!           always be '$25' for '-mabicalls'.
  
!      'v'
!           Register '$3'.  Do not use this constraint in new code; it is
            retained only for compatibility with glibc.
  
!      'y'
!           Equivalent to 'r'; retained for backwards compatibility.
  
!      'z'
            A floating-point condition code register.
  
!      'I'
            A signed 16-bit constant (for arithmetic instructions).
  
!      'J'
            Integer zero.
  
!      'K'
            An unsigned 16-bit constant (for logic instructions).
  
!      'L'
            A signed 32-bit constant in which the lower 16 bits are zero.
!           Such constants can be loaded using 'lui'.
  
!      'M'
!           A constant that cannot be loaded using 'lui', 'addiu' or
!           'ori'.
  
!      'N'
!           A constant in the range -65535 to -1 (inclusive).
  
!      'O'
            A signed 15-bit constant.
  
!      'P'
            A constant in the range 1 to 65535 (inclusive).
  
!      'G'
            Floating-point zero.
  
!      'R'
            An address that can be used in a non-macro load or store.
  
!      'ZC'
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as 'll' and 'sc'.
  
!      'ZD'
!           An address suitable for a 'prefetch' instruction, or for any
!           other instruction with the same addressing mode as 'prefetch'.
  
! _Motorola 680x0--'config/m68k/constraints.md'_
!      'a'
            Address register
  
!      'd'
            Data register
  
!      'f'
            68881 floating-point register, if available
  
!      'I'
            Integer in the range 1 to 8
  
!      'J'
            16-bit signed number
  
!      'K'
            Signed number whose magnitude is greater than 0x80
  
!      'L'
!           Integer in the range -8 to -1
  
!      'M'
            Signed number whose magnitude is greater than 0x100
  
!      'N'
            Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
  
!      'O'
            16 (for rotate using swap)
  
!      'P'
            Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
  
!      'R'
            Numbers that mov3q can handle
  
!      'G'
            Floating point constant that is not a 68881 constant
  
!      'S'
            Operands that satisfy 'm' when -mpcrel is in effect
  
!      'T'
            Operands that satisfy 's' when -mpcrel is not in effect
  
!      'Q'
            Address register indirect addressing mode
  
!      'U'
            Register offset addressing
  
!      'W'
            const_call_operand
  
!      'Cs'
            symbol_ref or const
  
!      'Ci'
            const_int
  
!      'C0'
            const_int 0
  
!      'Cj'
            Range of signed numbers that don't fit in 16 bits
  
!      'Cmvq'
            Integers valid for mvq
  
!      'Capsw'
            Integers valid for a moveq followed by a swap
  
!      'Cmvz'
            Integers valid for mvz
  
!      'Cmvs'
            Integers valid for mvs
  
!      'Ap'
            push_operand
  
!      'Ac'
            Non-register operands allowed in clr
  
! _Moxie--'config/moxie/constraints.md'_
!      'A'
            An absolute address
  
!      'B'
            An offset address
  
!      'W'
            A register indirect memory operand
  
!      'I'
            A constant in the range of 0 to 255.
  
!      'N'
!           A constant in the range of 0 to -255.
  
! _MSP430-'config/msp430/constraints.md'_
  
!      'R12'
            Register R12.
  
!      'R13'
            Register R13.
  
!      'K'
            Integer constant 1.
  
!      'L'
            Integer constant -1^20..1^19.
  
!      'M'
            Integer constant 1-4.
  
!      'Ya'
            Memory references which do not require an extended MOVX
            instruction.
  
!      'Yl'
            Memory reference, labels only.
  
!      'Ys'
            Memory reference, stack only.
  
! _NDS32--'config/nds32/constraints.md'_
!      'w'
            LOW register class $r0 to $r7 constraint for V3/V3M ISA.
!      'l'
            LOW register class $r0 to $r7.
!      'd'
            MIDDLE register class $r0 to $r11, $r16 to $r19.
!      'h'
            HIGH register class $r12 to $r14, $r20 to $r31.
!      't'
            Temporary assist register $ta (i.e. $r15).
!      'k'
            Stack register $sp.
!      'Iu03'
            Unsigned immediate 3-bit value.
!      'In03'
!           Negative immediate 3-bit value in the range of -7-0.
!      'Iu04'
            Unsigned immediate 4-bit value.
!      'Is05'
            Signed immediate 5-bit value.
!      'Iu05'
            Unsigned immediate 5-bit value.
!      'In05'
!           Negative immediate 5-bit value in the range of -31-0.
!      'Ip05'
            Unsigned immediate 5-bit value for movpi45 instruction with
            range 16-47.
!      'Iu06'
            Unsigned immediate 6-bit value constraint for addri36.sp
            instruction.
!      'Iu08'
            Unsigned immediate 8-bit value.
!      'Iu09'
            Unsigned immediate 9-bit value.
!      'Is10'
            Signed immediate 10-bit value.
!      'Is11'
            Signed immediate 11-bit value.
!      'Is15'
            Signed immediate 15-bit value.
!      'Iu15'
            Unsigned immediate 15-bit value.
!      'Ic15'
            A constant which is not in the range of imm15u but ok for bclr
            instruction.
!      'Ie15'
            A constant which is not in the range of imm15u but ok for bset
            instruction.
!      'It15'
            A constant which is not in the range of imm15u but ok for btgl
            instruction.
!      'Ii15'
            A constant whose compliment value is in the range of imm15u
            and ok for bitci instruction.
!      'Is16'
            Signed immediate 16-bit value.
!      'Is17'
            Signed immediate 17-bit value.
!      'Is19'
            Signed immediate 19-bit value.
!      'Is20'
            Signed immediate 20-bit value.
!      'Ihig'
            The immediate value that can be simply set high 20-bit.
!      'Izeb'
            The immediate value 0xff.
!      'Izeh'
            The immediate value 0xffff.
!      'Ixls'
            The immediate value 0x01.
!      'Ix11'
            The immediate value 0x7ff.
!      'Ibms'
            The immediate value with power of 2.
!      'Ifex'
            The immediate value with power of 2 minus 1.
!      'U33'
            Memory constraint for 333 format.
!      'U45'
            Memory constraint for 45 format.
!      'U37'
            Memory constraint for 37 format.
  
! _Nios II family--'config/nios2/constraints.md'_
  
!      'I'
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range -32768 to
            32767.
  
!      'J'
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      'K'
            Integer that is valid as an immediate operand in an
            instruction taking only the upper 16-bits of a 32-bit number.
            Range 32-bit numbers with the lower 16-bits being 0.
  
!      'L'
            Integer that is valid as an immediate operand for a shift
            instruction.  Range 0 to 31.
  
!      'M'
            Integer that is valid as an immediate operand for only the
            value 0.  Can be used in conjunction with the format modifier
!           'z' to use 'r0' instead of '0' in the assembly output.
  
!      'N'
            Integer that is valid as an immediate operand for a custom
            instruction opcode.  Range 0 to 255.
  
!      'P'
            An immediate operand for R2 andchi/andci instructions.
  
!      'S'
            Matches immediates which are addresses in the small data
!           section and therefore can be added to 'gp' as a 16-bit
            immediate to re-create their 32-bit value.
  
!      'U'
            Matches constants suitable as an operand for the rdprs and
            cache instructions.
  
!      'v'
            A memory operand suitable for Nios II R2 load/store exclusive
            instructions.
  
!      'w'
            A memory operand suitable for load/store IO and cache
            instructions.
  
! _OpenRISC--'config/or1k/constraints.md'_
!      'I'
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range -32768 to
            32767.
  
!      'K'
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      'M'
            Signed 16-bit constant shifted left 16 bits.  (Used with
!           'l.movhi')
  
!      'O'
            Zero
  
! _PDP-11--'config/pdp11/constraints.md'_
!      'a'
            Floating point registers AC0 through AC3.  These can be loaded
            from/to memory with a single instruction.
  
!      'd'
            Odd numbered general registers (R1, R3, R5).  These are used
            for 16-bit multiply operations.
  
!      'D'
            A memory reference that is encoded within the opcode, but not
            auto-increment or auto-decrement.
  
!      'f'
            Any of the floating point registers (AC0 through AC5).
  
!      'G'
            Floating point constant 0.
  
!      'h'
            Floating point registers AC4 and AC5.  These cannot be loaded
            from/to memory with a single instruction.
  
!      'I'
            An integer constant that fits in 16 bits.
  
!      'J'
            An integer constant whose low order 16 bits are zero.
  
!      'K'
            An integer constant that does not meet the constraints for
!           codes 'I' or 'J'.
  
!      'L'
            The integer constant 1.
  
!      'M'
!           The integer constant -1.
  
!      'N'
            The integer constant 0.
  
!      'O'
            Integer constants 0 through 3; shifts by these amounts are
            handled as multiple single-bit shifts rather than a single
            variable-length shift.
  
!      'Q'
            A memory reference which requires an additional word (address
            or offset) after the opcode.
  
!      'R'
            A memory reference that is encoded within the opcode.
  
! _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
!      'r'
!           A general purpose register (GPR), 'r0'...'r31'.
  
!      'b'
!           A base register.  Like 'r', but 'r0' is not allowed, so
!           'r1'...'r31'.
  
!      'f'
!           A floating point register (FPR), 'f0'...'f31'.
  
!      'd'
!           A floating point register.  This is the same as 'f' nowadays;
!           historically 'f' was for single-precision and 'd' was for
            double-precision floating point.
  
!      'v'
!           An Altivec vector register (VR), 'v0'...'v31'.
  
!      'wa'
!           A VSX register (VSR), 'vs0'...'vs63'.  This is either an FPR
!           ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are
!           'v0'...'v31').
  
!           When using 'wa', you should use the '%x' output modifier, so
            that the correct register number is printed.  For example:
  
                 asm ("xvadddp %x0,%x1,%x2"
                      : "=wa" (v1)
                      : "wa" (v2), "wa" (v3));
  
!           You should not use '%x' for 'v' operands:
  
                 asm ("xsaddqp %0,%1,%2"
                      : "=v" (v1)
                      : "v" (v2), "v" (v3));
  
!      'c'
!           The count register, 'ctr'.
  
!      'l'
!           The link register, 'lr'.
  
!      'x'
!           Condition register field 0, 'cr0'.
  
!      'y'
!           Any condition register field, 'cr0'...'cr7'.
  
!      'I'
            A signed 16-bit constant.
  
!      'J'
!           An unsigned 16-bit constant shifted left 16 bits (use 'L'
!           instead for 'SImode' constants).
  
!      'K'
            An unsigned 16-bit constant.
  
!      'L'
            A signed 16-bit constant shifted left 16 bits.
  
!      'eI'
            A signed 34-bit integer constant if prefixed instructions are
            supported.
  
!      'eP'
            A scalar floating point constant or a vector constant that can
            be loaded to a VSX register with one prefixed instruction.
  
!      'eQ'
            An IEEE 128-bit constant that can be loaded into a VSX
!           register with the 'lxvkq' instruction.
  
!      'm'
!           A memory operand.  Normally, 'm' does not allow addresses that
!           update the base register.  If the '<' or '>' constraint is
            also used, they are allowed and therefore on PowerPC targets
!           in that case it is only safe to use 'm<>' in an 'asm'
!           statement if that 'asm' statement accesses the operand exactly
!           once.  The 'asm' statement must also use '%U<OPNO>' as a
            placeholder for the "update" flag in the corresponding load or
            store instruction.  For example:
  
--- 46259,47777 ----
  ............................................
  
  Whenever possible, you should use the general-purpose constraint letters
! in ‘asm’ arguments, since they will convey meaning more readily to
  people reading your code.  Failing that, use the constraint letters that
  usually have very similar meanings across architectures.  The most
! commonly used constraints are ‘m’ and ‘r’ (for memory and
  general-purpose registers respectively; *note Simple Constraints::), and
! ‘I’, usually the letter indicating the most common immediate-constant
  format.
  
   Each architecture defines additional constraints.  These constraints
  are used by the compiler itself for instruction generation, as well as
! for ‘asm’ statements; therefore, some of the constraints are not
! particularly useful for ‘asm’.  Here is a summary of some of the
  machine-dependent constraints available on some particular machines; it
! includes both constraints that are useful for ‘asm’ and constraints that
  aren't.  The compiler source file mentioned in the table heading for
  each architecture is the definitive reference for the meanings of that
  architecture's constraints.
  
! _AArch64 family--‘config/aarch64/constraints.md’_
!      ‘k’
!           The stack pointer register (‘SP’)
  
!      ‘w’
            Floating point register, Advanced SIMD vector register or SVE
            vector register
  
!      ‘x’
!           Like ‘w’, but restricted to registers 0 to 15 inclusive.
  
!      ‘y’
!           Like ‘w’, but restricted to registers 0 to 7 inclusive.
  
!      ‘Upl’
!           One of the low eight SVE predicate registers (‘P0’ to ‘P7’)
  
!      ‘Upa’
!           Any of the SVE predicate registers (‘P0’ to ‘P15’)
  
!      ‘I’
            Integer constant that is valid as an immediate operand in an
!           ‘ADD’ instruction
  
!      ‘J’
            Integer constant that is valid as an immediate operand in a
!           ‘SUB’ instruction (once negated)
  
!      ‘K’
            Integer constant that can be used with a 32-bit logical
            instruction
  
!      ‘L’
            Integer constant that can be used with a 64-bit logical
            instruction
  
!      ‘M’
            Integer constant that is valid as an immediate operand in a
!           32-bit ‘MOV’ pseudo instruction.  The ‘MOV’ may be assembled
            to one of several different machine instructions depending on
            the value
  
!      ‘N’
            Integer constant that is valid as an immediate operand in a
!           64-bit ‘MOV’ pseudo instruction
  
!      ‘S’
            An absolute symbolic address or a label reference
  
!      ‘Y’
            Floating point constant zero
  
!      ‘Z’
            Integer constant zero
  
!      ‘Ush’
            The high part (bits 12 and upwards) of the pc-relative address
            of a symbol within 4GB of the instruction
  
!      ‘Q’
            A memory address which uses a single base register with no
            offset
  
!      ‘Ump’
            A memory address suitable for a load/store pair instruction in
            SI, DI, SF and DF modes
  
! _AMD GCN --‘config/gcn/constraints.md’_
!      ‘I’
!           Immediate integer in the range −16 to 64
  
!      ‘J’
            Immediate 16-bit signed integer
  
!      ‘Kf’
!           Immediate constant −1
  
!      ‘L’
            Immediate 15-bit unsigned integer
  
!      ‘A’
            Immediate constant that can be inlined in an instruction
!           encoding: integer −16..64, or float 0.0, +/−0.5, +/−1.0,
!           +/−2.0, +/−4.0, 1.0/(2.0*PI)
  
!      ‘B’
            Immediate 32-bit signed integer that can be attached to an
            instruction encoding
  
!      ‘C’
!           Immediate 32-bit integer in range −16..4294967295 (i.e.
!           32-bit unsigned integer or ‘A’ constraint)
  
!      ‘DA’
!           Immediate 64-bit constant that can be split into two ‘A’
            constants
  
!      ‘DB’
!           Immediate 64-bit constant that can be split into two ‘B’
            constants
  
!      ‘U’
!           Any ‘unspec’
  
!      ‘Y’
!           Any ‘symbol_ref’ or ‘label_ref’
  
!      ‘v’
            VGPR register
  
!      ‘a’
            Accelerator VGPR register (CDNA1 onwards)
  
!      ‘Sg’
            SGPR register
  
!      ‘SD’
            SGPR registers valid for instruction destinations, including
            VCC, M0 and EXEC
  
!      ‘SS’
            SGPR registers valid for instruction sources, including VCC,
            M0, EXEC and SCC
  
!      ‘Sm’
            SGPR registers valid as a source for scalar memory
            instructions (excludes M0 and EXEC)
  
!      ‘Sv’
            SGPR registers valid as a source or destination for vector
            instructions (excludes EXEC)
  
!      ‘ca’
            All condition registers: SCC, VCCZ, EXECZ
  
!      ‘cs’
            Scalar condition register: SCC
  
!      ‘cV’
            Vector condition register: VCC, VCC_LO, VCC_HI
  
!      ‘e’
            EXEC register (EXEC_LO and EXEC_HI)
  
!      ‘RB’
!           Memory operand with address space suitable for ‘buffer_*’
            instructions
  
!      ‘RF’
!           Memory operand with address space suitable for ‘flat_*’
            instructions
  
!      ‘RS’
!           Memory operand with address space suitable for ‘s_*’
            instructions
  
!      ‘RL’
!           Memory operand with address space suitable for ‘ds_*’ LDS
            instructions
  
!      ‘RG’
!           Memory operand with address space suitable for ‘ds_*’ GDS
            instructions
  
!      ‘RD’
!           Memory operand with address space suitable for any ‘ds_*’
            instructions
  
!      ‘RM’
!           Memory operand with address space suitable for ‘global_*’
            instructions
  
! _ARC --‘config/arc/constraints.md’_
!      ‘q’
!           Registers usable in ARCompact 16-bit instructions: ‘r0’-‘r3’,
!           ‘r12’-‘r15’.  This constraint can only match when the ‘-mq’
            option is in effect.
  
!      ‘e’
            Registers usable as base-regs of memory addresses in ARCompact
!           16-bit memory instructions: ‘r0’-‘r3’, ‘r12’-‘r15’, ‘sp’.
!           This constraint can only match when the ‘-mq’ option is in
            effect.
!      ‘D’
!           ARC FPX (dpfp) 64-bit registers.  ‘D0’, ‘D1’.
  
!      ‘I’
            A signed 12-bit integer constant.
  
!      ‘Cal’
            constant for arithmetic/logical operations.  This might be any
            constant that can be put into a long immediate by the assmbler
            or linker without involving a PIC relocation.
  
!      ‘K’
            A 3-bit unsigned integer constant.
  
!      ‘L’
            A 6-bit unsigned integer constant.
  
!      ‘CnL’
            One's complement of a 6-bit unsigned integer constant.
  
!      ‘CmL’
            Two's complement of a 6-bit unsigned integer constant.
  
!      ‘M’
            A 5-bit unsigned integer constant.
  
!      ‘O’
            A 7-bit unsigned integer constant.
  
!      ‘P’
            A 8-bit unsigned integer constant.
  
!      ‘H’
            Any const_double value.
  
! _ARM family--‘config/arm/constraints.md’_
  
!      ‘h’
!           In Thumb state, the core registers ‘r8’-‘r15’.
  
!      ‘k’
            The stack pointer register.
  
!      ‘l’
!           In Thumb State the core registers ‘r0’-‘r7’.  In ARM state
!           this is an alias for the ‘r’ constraint.
  
!      ‘t’
!           VFP floating-point registers ‘s0’-‘s31’.  Used for 32 bit
            values.
  
!      ‘w’
!           VFP floating-point registers ‘d0’-‘d31’ and the appropriate
!           subset ‘d0’-‘d15’ based on command line options.  Used for 64
            bit values only.  Not valid for Thumb1.
  
!      ‘y’
            The iWMMX co-processor registers.
  
!      ‘z’
            The iWMMX GR registers.
  
!      ‘G’
            The floating-point constant 0.0
  
!      ‘I’
            Integer that is valid as an immediate operand in a data
            processing instruction.  That is, an integer in the range 0 to
            255 rotated by a multiple of 2
  
!      ‘J’
!           Integer in the range −4095 to 4095
  
!      ‘K’
!           Integer that satisfies constraint ‘I’ when inverted (ones
            complement)
  
!      ‘L’
!           Integer that satisfies constraint ‘I’ when negated (twos
            complement)
  
!      ‘M’
            Integer in the range 0 to 32
  
!      ‘Q’
            A memory reference where the exact address is in a single
!           register ('‘m’' is preferable for ‘asm’ statements)
  
!      ‘R’
            An item in the constant pool
  
!      ‘S’
            A symbol in the text segment of the current file
  
!      ‘Uv’
            A memory reference suitable for VFP load/store insns
            (reg+constant offset)
  
!      ‘Uy’
            A memory reference suitable for iWMMXt load/store
            instructions.
  
!      ‘Uq’
            A memory reference suitable for the ARMv4 ldrsb instruction.
  
! _AVR family--‘config/avr/constraints.md’_
!      ‘l’
            Registers from r0 to r15
  
!      ‘a’
            Registers from r16 to r23
  
!      ‘d’
            Registers from r16 to r31
  
!      ‘w’
            Registers from r24 to r31.  These registers can be used in
!           ‘adiw’ command
  
!      ‘e’
            Pointer register (r26-r31)
  
!      ‘b’
            Base pointer register (r28-r31)
  
!      ‘q’
            Stack pointer register (SPH:SPL)
  
!      ‘t’
            Temporary register r0
  
!      ‘x’
            Register pair X (r27:r26)
  
!      ‘y’
            Register pair Y (r29:r28)
  
!      ‘z’
            Register pair Z (r31:r30)
  
!      ‘I’
!           Constant greater than −1, less than 64
  
!      ‘J’
!           Constant greater than −64, less than 1
  
!      ‘K’
            Constant integer 2
  
!      ‘L’
            Constant integer 0
  
!      ‘M’
            Constant that fits in 8 bits
  
!      ‘N’
!           Constant integer −1
  
!      ‘O’
            Constant integer 8, 16, or 24
  
!      ‘P’
            Constant integer 1
  
!      ‘G’
            A floating point constant 0.0
  
!      ‘Q’
            A memory address based on Y or Z pointer with displacement.
  
! _Blackfin family--‘config/bfin/constraints.md’_
!      ‘a’
            P register
  
!      ‘d’
            D register
  
!      ‘z’
            A call clobbered P register.
  
!      ‘qN’
            A single register.  If N is in the range 0 to 7, the
!           corresponding D register.  If it is ‘A’, then the register P0.
  
!      ‘D’
            Even-numbered D register
  
!      ‘W’
            Odd-numbered D register
  
!      ‘e’
            Accumulator register.
  
!      ‘A’
            Even-numbered accumulator register.
  
!      ‘B’
            Odd-numbered accumulator register.
  
!      ‘b’
            I register
  
!      ‘v’
            B register
  
!      ‘f’
            M register
  
!      ‘c’
            Registers used for circular buffering, i.e. I, B, or L
            registers.
  
!      ‘C’
            The CC register.
  
!      ‘t’
            LT0 or LT1.
  
!      ‘k’
            LC0 or LC1.
  
!      ‘u’
            LB0 or LB1.
  
!      ‘x’
            Any D, P, B, M, I or L register.
  
!      ‘y’
            Additional registers typically used only in prologues and
            epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
            USP.
  
!      ‘w’
            Any register except accumulators or CC.
  
!      ‘Ksh’
!           Signed 16 bit integer (in the range −32768 to 32767)
  
!      ‘Kuh’
            Unsigned 16 bit integer (in the range 0 to 65535)
  
!      ‘Ks7’
!           Signed 7 bit integer (in the range −64 to 63)
  
!      ‘Ku7’
            Unsigned 7 bit integer (in the range 0 to 127)
  
!      ‘Ku5’
            Unsigned 5 bit integer (in the range 0 to 31)
  
!      ‘Ks4’
!           Signed 4 bit integer (in the range −8 to 7)
  
!      ‘Ks3’
!           Signed 3 bit integer (in the range −3 to 4)
  
!      ‘Ku3’
            Unsigned 3 bit integer (in the range 0 to 7)
  
!      ‘PN’
            Constant N, where N is a single-digit constant in the range 0
            to 4.
  
!      ‘PA’
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use with either accumulator.
  
!      ‘PB’
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use only with accumulator A1.
  
!      ‘M1’
            Constant 255.
  
!      ‘M2’
            Constant 65535.
  
!      ‘J’
            An integer constant with exactly a single bit set.
  
!      ‘L’
            An integer constant with all bits set except exactly one.
  
!      ‘H’
!      ‘Q’
            Any SYMBOL_REF.
  
! _C-SKY--‘config/csky/constraints.md’_
  
!      ‘a’
            The mini registers r0 - r7.
  
!      ‘b’
            The low registers r0 - r15.
  
!      ‘c’
            C register.
  
!      ‘y’
            HI and LO registers.
  
!      ‘l’
            LO register.
  
!      ‘h’
            HI register.
  
!      ‘v’
            Vector registers.
  
!      ‘z’
            Stack pointer register (SP).
  
!      ‘Q’
            A memory address which uses a base register with a short
            offset or with a index register with its scale.
  
!      ‘W’
            A memory address which uses a base register with a index
            register with its scale.
  
! _Epiphany--‘config/epiphany/constraints.md’_
!      ‘U16’
            An unsigned 16-bit constant.
  
!      ‘K’
            An unsigned 5-bit constant.
  
!      ‘L’
            A signed 11-bit constant.
  
!      ‘Cm1’
!           A signed 11-bit constant added to −1.  Can only match when the
!           ‘-m1reg-REG’ option is active.
  
!      ‘Cl1’
!           Left-shift of −1, i.e., a bit mask with a block of leading
            ones, the rest being a block of trailing zeroes.  Can only
!           match when the ‘-m1reg-REG’ option is active.
  
!      ‘Cr1’
!           Right-shift of −1, i.e., a bit mask with a trailing block of
            ones, the rest being zeroes.  Or to put it another way, one
            less than a power of two.  Can only match when the
!           ‘-m1reg-REG’ option is active.
  
!      ‘Cal’
!           Constant for arithmetic/logical operations.  This is like ‘i’,
            except that for position independent code, no symbols /
            expressions needing relocations are allowed.
  
!      ‘Csy’
            Symbolic constant for call/jump instruction.
  
!      ‘Rcs’
            The register class usable in short insns.  This is a register
            class constraint, and can thus drive register allocation.
!           This constraint won't match unless ‘-mprefer-short-insn-regs’
            is in effect.
  
!      ‘Rsc’
            The register class of registers that can be used to hold a
            sibcall call address.  I.e., a caller-saved register.
  
!      ‘Rct’
            Core control register class.
  
!      ‘Rgs’
            The register group usable in short insns.  This constraint
            does not use a register class, so that it only passively
            matches suitable registers, and doesn't drive register
            allocation.
  
!      ‘Rra’
            Matches the return address if it can be replaced with the link
            register.
  
!      ‘Rcc’
            Matches the integer condition code register.
  
!      ‘Sra’
            Matches the return address if it is in a stack slot.
  
!      ‘Cfm’
            Matches control register values to switch fp mode, which are
!           encapsulated in ‘UNSPEC_FP_MODE’.
  
! _FRV--‘config/frv/frv.h’_
!      ‘a’
!           Register in the class ‘ACC_REGS’ (‘acc0’ to ‘acc7’).
  
!      ‘b’
!           Register in the class ‘EVEN_ACC_REGS’ (‘acc0’ to ‘acc7’).
  
!      ‘c’
!           Register in the class ‘CC_REGS’ (‘fcc0’ to ‘fcc3’ and ‘icc0’
!           to ‘icc3’).
  
!      ‘d’
!           Register in the class ‘GPR_REGS’ (‘gr0’ to ‘gr63’).
  
!      ‘e’
!           Register in the class ‘EVEN_REGS’ (‘gr0’ to ‘gr63’).  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      ‘f’
!           Register in the class ‘FPR_REGS’ (‘fr0’ to ‘fr63’).
  
!      ‘h’
!           Register in the class ‘FEVEN_REGS’ (‘fr0’ to ‘fr63’).  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      ‘l’
!           Register in the class ‘LR_REG’ (the ‘lr’ register).
  
!      ‘q’
!           Register in the class ‘QUAD_REGS’ (‘gr2’ to ‘gr63’).  Register
            numbers not divisible by 4 are excluded not in the class but
            through the use of a machine mode larger than 8 bytes.
  
!      ‘t’
!           Register in the class ‘ICC_REGS’ (‘icc0’ to ‘icc3’).
  
!      ‘u’
!           Register in the class ‘FCC_REGS’ (‘fcc0’ to ‘fcc3’).
  
!      ‘v’
!           Register in the class ‘ICR_REGS’ (‘cc4’ to ‘cc7’).
  
!      ‘w’
!           Register in the class ‘FCR_REGS’ (‘cc0’ to ‘cc3’).
  
!      ‘x’
!           Register in the class ‘QUAD_FPR_REGS’ (‘fr0’ to ‘fr63’).
            Register numbers not divisible by 4 are excluded not in the
            class but through the use of a machine mode larger than 8
            bytes.
  
!      ‘z’
!           Register in the class ‘SPR_REGS’ (‘lcr’ and ‘lr’).
  
!      ‘A’
!           Register in the class ‘QUAD_ACC_REGS’ (‘acc0’ to ‘acc7’).
  
!      ‘B’
!           Register in the class ‘ACCG_REGS’ (‘accg0’ to ‘accg7’).
  
!      ‘C’
!           Register in the class ‘CR_REGS’ (‘cc0’ to ‘cc7’).
  
!      ‘G’
            Floating point constant zero
  
!      ‘I’
            6-bit signed integer constant
  
!      ‘J’
            10-bit signed integer constant
  
!      ‘L’
            16-bit signed integer constant
  
!      ‘M’
            16-bit unsigned integer constant
  
!      ‘N’
            12-bit signed integer constant that is negative--i.e. in the
!           range of −2048 to −1
  
!      ‘O’
            Constant zero
  
!      ‘P’
            12-bit signed integer constant that is greater than zero--i.e.
            in the range of 1 to 2047.
  
! _FT32--‘config/ft32/constraints.md’_
!      ‘A’
            An absolute address
  
!      ‘B’
            An offset address
  
!      ‘W’
            A register indirect memory operand
  
!      ‘e’
            An offset address.
  
!      ‘f’
            An offset address.
  
!      ‘O’
            The constant zero or one
  
!      ‘I’
!           A 16-bit signed constant (−32768 ... 32767)
  
!      ‘w’
            A bitfield mask suitable for bext or bins
  
!      ‘x’
            An inverted bitfield mask suitable for bext or bins
  
!      ‘L’
            A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
  
!      ‘S’
!           A 20-bit signed constant (−524288 ... 524287)
  
!      ‘b’
            A constant for a bitfield width (1 ... 16)
  
!      ‘KA’
!           A 10-bit signed constant (−512 ... 511)
  
! _Hewlett-Packard PA-RISC--‘config/pa/pa.h’_
!      ‘a’
            General register 1
  
!      ‘f’
            Floating point register
  
!      ‘q’
            Shift amount register
  
!      ‘x’
            Floating point register (deprecated)
  
!      ‘y’
            Upper floating point register (32-bit), floating point
            register (64-bit)
  
!      ‘Z’
            Any register
  
!      ‘I’
            Signed 11-bit integer constant
  
!      ‘J’
            Signed 14-bit integer constant
  
!      ‘K’
!           Integer constant that can be deposited with a ‘zdepi’
            instruction
  
!      ‘L’
            Signed 5-bit integer constant
  
!      ‘M’
            Integer constant 0
  
!      ‘N’
!           Integer constant that can be loaded with a ‘ldil’ instruction
  
!      ‘O’
            Integer constant whose value plus one is a power of 2
  
!      ‘P’
!           Integer constant that can be used for ‘and’ operations in
!           ‘depi’ and ‘extru’ instructions
  
!      ‘S’
            Integer constant 31
  
!      ‘U’
            Integer constant 63
  
!      ‘G’
            Floating-point constant 0.0
  
!      ‘A’
!           A ‘lo_sum’ data-linkage-table memory operand
  
!      ‘Q’
            A memory operand that can be used as the destination operand
            of an integer store instruction
  
!      ‘R’
            A scaled or unscaled indexed memory operand
  
!      ‘T’
            A memory operand for floating-point loads and stores
  
!      ‘W’
            A register indirect memory operand
  
! _Intel IA-64--‘config/ia64/ia64.h’_
!      ‘a’
!           General register ‘r0’ to ‘r3’ for ‘addl’ instruction
  
!      ‘b’
            Branch register
  
!      ‘c’
!           Predicate register (‘c’ as in "conditional")
  
!      ‘d’
            Application register residing in M-unit
  
!      ‘e’
            Application register residing in I-unit
  
!      ‘f’
            Floating-point register
  
!      ‘m’
!           Memory operand.  If used together with ‘<’ or ‘>’, the operand
            can have postincrement and postdecrement which require
!           printing with ‘%Pn’ on IA-64.
  
!      ‘G’
            Floating-point constant 0.0 or 1.0
  
!      ‘I’
            14-bit signed integer constant
  
!      ‘J’
            22-bit signed integer constant
  
!      ‘K’
            8-bit signed integer constant for logical instructions
  
!      ‘L’
            8-bit adjusted signed integer constant for compare pseudo-ops
  
!      ‘M’
            6-bit unsigned integer constant for shift counts
  
!      ‘N’
            9-bit signed integer constant for load and store
            postincrements
  
!      ‘O’
            The constant zero
  
!      ‘P’
!           0 or −1 for ‘dep’ instruction
  
!      ‘Q’
            Non-volatile memory for floating-point loads and stores
  
!      ‘R’
!           Integer constant in the range 1 to 4 for ‘shladd’ instruction
  
!      ‘S’
            Memory operand except postincrement and postdecrement.  This
!           is now roughly the same as ‘m’ when not used together with ‘<’
!           or ‘>’.
  
! _M32C--‘config/m32c/m32c.cc’_
!      ‘Rsp’
!      ‘Rfb’
!      ‘Rsb’
!           ‘$sp’, ‘$fb’, ‘$sb’.
  
!      ‘Rcr’
            Any control register, when they're 16 bits wide (nothing if
            control registers are 24 bits wide)
  
!      ‘Rcl’
            Any control register, when they're 24 bits wide.
  
!      ‘R0w’
!      ‘R1w’
!      ‘R2w’
!      ‘R3w’
            $r0, $r1, $r2, $r3.
  
!      ‘R02’
            $r0 or $r2, or $r2r0 for 32 bit values.
  
!      ‘R13’
            $r1 or $r3, or $r3r1 for 32 bit values.
  
!      ‘Rdi’
            A register that can hold a 64 bit value.
  
!      ‘Rhl’
            $r0 or $r1 (registers with addressable high/low bytes)
  
!      ‘R23’
            $r2 or $r3
  
!      ‘Raa’
            Address registers
  
!      ‘Raw’
            Address registers when they're 16 bits wide.
  
!      ‘Ral’
            Address registers when they're 24 bits wide.
  
!      ‘Rqi’
            Registers that can hold QI values.
  
!      ‘Rad’
            Registers that can be used with displacements ($a0, $a1, $sb).
  
!      ‘Rsi’
            Registers that can hold 32 bit values.
  
!      ‘Rhi’
            Registers that can hold 16 bit values.
  
!      ‘Rhc’
            Registers chat can hold 16 bit values, including all control
            registers.
  
!      ‘Rra’
            $r0 through R1, plus $a0 and $a1.
  
!      ‘Rfl’
            The flags register.
  
!      ‘Rmm’
            The memory-based pseudo-registers $mem0 through $mem15.
  
!      ‘Rpi’
            Registers that can hold pointers (16 bit registers for r8c,
            m16c; 24 bit registers for m32cm, m32c).
  
!      ‘Rpa’
            Matches multiple registers in a PARALLEL to form a larger
            register.  Used to match function return values.
  
!      ‘Is3’
!           −8 ... 7
  
!      ‘IS1’
!           −128 ... 127
  
!      ‘IS2’
!           −32768 ... 32767
  
!      ‘IU2’
            0 ... 65535
  
!      ‘In4’
!           −8 ... −1 or 1 ... 8
  
!      ‘In5’
!           −16 ... −1 or 1 ... 16
  
!      ‘In6’
!           −32 ... −1 or 1 ... 32
  
!      ‘IM2’
!           −65536 ... −1
  
!      ‘Ilb’
            An 8 bit value with exactly one bit set.
  
!      ‘Ilw’
            A 16 bit value with exactly one bit set.
  
!      ‘Sd’
            The common src/dest memory addressing modes.
  
!      ‘Sa’
            Memory addressed using $a0 or $a1.
  
!      ‘Si’
            Memory addressed with immediate addresses.
  
!      ‘Ss’
            Memory addressed using the stack pointer ($sp).
  
!      ‘Sf’
            Memory addressed using the frame base register ($fb).
  
!      ‘Ss’
            Memory addressed using the small base register ($sb).
  
!      ‘S1’
            $r1h
  
! _LoongArch--‘config/loongarch/constraints.md’_
!      ‘f’
            A floating-point or vector register (if available).
!      ‘k’
            A memory operand whose address is formed by a base register
            and (optionally scaled) index register.
!      ‘l’
            A signed 16-bit constant.
!      ‘m’
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as ‘st.w’ and ‘ld.w’.
!      ‘I’
            A signed 12-bit constant (for arithmetic instructions).
!      ‘K’
            An unsigned 12-bit constant (for logic instructions).
!      ‘M’
!           A constant that cannot be loaded using ‘lui’, ‘addiu’ or
!           ‘ori’.
!      ‘N’
            A constant in the range -65535 to -1 (inclusive).
!      ‘O’
            A signed 15-bit constant.
!      ‘P’
            A constant in the range 1 to 65535 (inclusive).
!      ‘R’
            An address that can be used in a non-macro load or store.
!      ‘ZB’
            An address that is held in a general-purpose register.  The
            offset is zero.
!      ‘ZC’
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as ‘ll.w’ and ‘sc.w’.
  
! _MicroBlaze--‘config/microblaze/constraints.md’_
!      ‘d’
!           A general register (‘r0’ to ‘r31’).
  
!      ‘z’
!           A status register (‘rmsr’, ‘$fcc1’ to ‘$fcc7’).
  
! _MIPS--‘config/mips/constraints.md’_
!      ‘d’
!           A general-purpose register.  This is equivalent to ‘r’ unless
            generating MIPS16 code, in which case the MIPS16 register set
            is used.
  
!      ‘f’
            A floating-point register (if available).
  
!      ‘h’
!           Formerly the ‘hi’ register.  This constraint is no longer
            supported.
  
!      ‘l’
!           The ‘lo’ register.  Use this register to store values that are
            no bigger than a word.
  
!      ‘x’
!           The concatenated ‘hi’ and ‘lo’ registers.  Use this register
            to store doubleword values.
  
!      ‘c’
            A register suitable for use in an indirect jump.  This will
!           always be ‘$25’ for ‘-mabicalls’.
  
!      ‘v’
!           Register ‘$3’.  Do not use this constraint in new code; it is
            retained only for compatibility with glibc.
  
!      ‘y’
!           Equivalent to ‘r’; retained for backwards compatibility.
  
!      ‘z’
            A floating-point condition code register.
  
!      ‘I’
            A signed 16-bit constant (for arithmetic instructions).
  
!      ‘J’
            Integer zero.
  
!      ‘K’
            An unsigned 16-bit constant (for logic instructions).
  
!      ‘L’
            A signed 32-bit constant in which the lower 16 bits are zero.
!           Such constants can be loaded using ‘lui’.
  
!      ‘M’
!           A constant that cannot be loaded using ‘lui’, ‘addiu’ or
!           ‘ori’.
  
!      ‘N’
!           A constant in the range −65535 to −1 (inclusive).
  
!      ‘O’
            A signed 15-bit constant.
  
!      ‘P’
            A constant in the range 1 to 65535 (inclusive).
  
!      ‘G’
            Floating-point zero.
  
!      ‘R’
            An address that can be used in a non-macro load or store.
  
!      ‘ZC’
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as ‘ll’ and ‘sc’.
  
!      ‘ZD’
!           An address suitable for a ‘prefetch’ instruction, or for any
!           other instruction with the same addressing mode as ‘prefetch’.
  
! _Motorola 680x0--‘config/m68k/constraints.md’_
!      ‘a’
            Address register
  
!      ‘d’
            Data register
  
!      ‘f’
            68881 floating-point register, if available
  
!      ‘I’
            Integer in the range 1 to 8
  
!      ‘J’
            16-bit signed number
  
!      ‘K’
            Signed number whose magnitude is greater than 0x80
  
!      ‘L’
!           Integer in the range −8 to −1
  
!      ‘M’
            Signed number whose magnitude is greater than 0x100
  
!      ‘N’
            Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
  
!      ‘O’
            16 (for rotate using swap)
  
!      ‘P’
            Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
  
!      ‘R’
            Numbers that mov3q can handle
  
!      ‘G’
            Floating point constant that is not a 68881 constant
  
!      ‘S’
            Operands that satisfy 'm' when -mpcrel is in effect
  
!      ‘T’
            Operands that satisfy 's' when -mpcrel is not in effect
  
!      ‘Q’
            Address register indirect addressing mode
  
!      ‘U’
            Register offset addressing
  
!      ‘W’
            const_call_operand
  
!      ‘Cs’
            symbol_ref or const
  
!      ‘Ci’
            const_int
  
!      ‘C0’
            const_int 0
  
!      ‘Cj’
            Range of signed numbers that don't fit in 16 bits
  
!      ‘Cmvq’
            Integers valid for mvq
  
!      ‘Capsw’
            Integers valid for a moveq followed by a swap
  
!      ‘Cmvz’
            Integers valid for mvz
  
!      ‘Cmvs’
            Integers valid for mvs
  
!      ‘Ap’
            push_operand
  
!      ‘Ac’
            Non-register operands allowed in clr
  
! _Moxie--‘config/moxie/constraints.md’_
!      ‘A’
            An absolute address
  
!      ‘B’
            An offset address
  
!      ‘W’
            A register indirect memory operand
  
!      ‘I’
            A constant in the range of 0 to 255.
  
!      ‘N’
!           A constant in the range of 0 to −255.
  
! _MSP430-‘config/msp430/constraints.md’_
  
!      ‘R12’
            Register R12.
  
!      ‘R13’
            Register R13.
  
!      ‘K’
            Integer constant 1.
  
!      ‘L’
            Integer constant -1^20..1^19.
  
!      ‘M’
            Integer constant 1-4.
  
!      ‘Ya’
            Memory references which do not require an extended MOVX
            instruction.
  
!      ‘Yl’
            Memory reference, labels only.
  
!      ‘Ys’
            Memory reference, stack only.
  
! _NDS32--‘config/nds32/constraints.md’_
!      ‘w’
            LOW register class $r0 to $r7 constraint for V3/V3M ISA.
!      ‘l’
            LOW register class $r0 to $r7.
!      ‘d’
            MIDDLE register class $r0 to $r11, $r16 to $r19.
!      ‘h’
            HIGH register class $r12 to $r14, $r20 to $r31.
!      ‘t’
            Temporary assist register $ta (i.e. $r15).
!      ‘k’
            Stack register $sp.
!      ‘Iu03’
            Unsigned immediate 3-bit value.
!      ‘In03’
!           Negative immediate 3-bit value in the range of −7-0.
!      ‘Iu04’
            Unsigned immediate 4-bit value.
!      ‘Is05’
            Signed immediate 5-bit value.
!      ‘Iu05’
            Unsigned immediate 5-bit value.
!      ‘In05’
!           Negative immediate 5-bit value in the range of −31-0.
!      ‘Ip05’
            Unsigned immediate 5-bit value for movpi45 instruction with
            range 16-47.
!      ‘Iu06’
            Unsigned immediate 6-bit value constraint for addri36.sp
            instruction.
!      ‘Iu08’
            Unsigned immediate 8-bit value.
!      ‘Iu09’
            Unsigned immediate 9-bit value.
!      ‘Is10’
            Signed immediate 10-bit value.
!      ‘Is11’
            Signed immediate 11-bit value.
!      ‘Is15’
            Signed immediate 15-bit value.
!      ‘Iu15’
            Unsigned immediate 15-bit value.
!      ‘Ic15’
            A constant which is not in the range of imm15u but ok for bclr
            instruction.
!      ‘Ie15’
            A constant which is not in the range of imm15u but ok for bset
            instruction.
!      ‘It15’
            A constant which is not in the range of imm15u but ok for btgl
            instruction.
!      ‘Ii15’
            A constant whose compliment value is in the range of imm15u
            and ok for bitci instruction.
!      ‘Is16’
            Signed immediate 16-bit value.
!      ‘Is17’
            Signed immediate 17-bit value.
!      ‘Is19’
            Signed immediate 19-bit value.
!      ‘Is20’
            Signed immediate 20-bit value.
!      ‘Ihig’
            The immediate value that can be simply set high 20-bit.
!      ‘Izeb’
            The immediate value 0xff.
!      ‘Izeh’
            The immediate value 0xffff.
!      ‘Ixls’
            The immediate value 0x01.
!      ‘Ix11’
            The immediate value 0x7ff.
!      ‘Ibms’
            The immediate value with power of 2.
!      ‘Ifex’
            The immediate value with power of 2 minus 1.
!      ‘U33’
            Memory constraint for 333 format.
!      ‘U45’
            Memory constraint for 45 format.
!      ‘U37’
            Memory constraint for 37 format.
  
! _Nios II family--‘config/nios2/constraints.md’_
  
!      ‘I’
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range −32768 to
            32767.
  
!      ‘J’
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      ‘K’
            Integer that is valid as an immediate operand in an
            instruction taking only the upper 16-bits of a 32-bit number.
            Range 32-bit numbers with the lower 16-bits being 0.
  
!      ‘L’
            Integer that is valid as an immediate operand for a shift
            instruction.  Range 0 to 31.
  
!      ‘M’
            Integer that is valid as an immediate operand for only the
            value 0.  Can be used in conjunction with the format modifier
!           ‘z’ to use ‘r0’ instead of ‘0’ in the assembly output.
  
!      ‘N’
            Integer that is valid as an immediate operand for a custom
            instruction opcode.  Range 0 to 255.
  
!      ‘P’
            An immediate operand for R2 andchi/andci instructions.
  
!      ‘S’
            Matches immediates which are addresses in the small data
!           section and therefore can be added to ‘gp’ as a 16-bit
            immediate to re-create their 32-bit value.
  
!      ‘U’
            Matches constants suitable as an operand for the rdprs and
            cache instructions.
  
!      ‘v’
            A memory operand suitable for Nios II R2 load/store exclusive
            instructions.
  
!      ‘w’
            A memory operand suitable for load/store IO and cache
            instructions.
  
! _OpenRISC--‘config/or1k/constraints.md’_
!      ‘I’
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range −32768 to
            32767.
  
!      ‘K’
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      ‘M’
            Signed 16-bit constant shifted left 16 bits.  (Used with
!           ‘l.movhi’)
  
!      ‘O’
            Zero
  
! _PDP-11--‘config/pdp11/constraints.md’_
!      ‘a’
            Floating point registers AC0 through AC3.  These can be loaded
            from/to memory with a single instruction.
  
!      ‘d’
            Odd numbered general registers (R1, R3, R5).  These are used
            for 16-bit multiply operations.
  
!      ‘D’
            A memory reference that is encoded within the opcode, but not
            auto-increment or auto-decrement.
  
!      ‘f’
            Any of the floating point registers (AC0 through AC5).
  
!      ‘G’
            Floating point constant 0.
  
!      ‘h’
            Floating point registers AC4 and AC5.  These cannot be loaded
            from/to memory with a single instruction.
  
!      ‘I’
            An integer constant that fits in 16 bits.
  
!      ‘J’
            An integer constant whose low order 16 bits are zero.
  
!      ‘K’
            An integer constant that does not meet the constraints for
!           codes ‘I’ or ‘J’.
  
!      ‘L’
            The integer constant 1.
  
!      ‘M’
!           The integer constant −1.
  
!      ‘N’
            The integer constant 0.
  
!      ‘O’
            Integer constants 0 through 3; shifts by these amounts are
            handled as multiple single-bit shifts rather than a single
            variable-length shift.
  
!      ‘Q’
            A memory reference which requires an additional word (address
            or offset) after the opcode.
  
!      ‘R’
            A memory reference that is encoded within the opcode.
  
! _PowerPC and IBM RS6000--‘config/rs6000/constraints.md’_
!      ‘r’
!           A general purpose register (GPR), ‘r0’...‘r31’.
  
!      ‘b’
!           A base register.  Like ‘r’, but ‘r0’ is not allowed, so
!           ‘r1’...‘r31’.
  
!      ‘f’
!           A floating point register (FPR), ‘f0’...‘f31’.
  
!      ‘d’
!           A floating point register.  This is the same as ‘f’ nowadays;
!           historically ‘f’ was for single-precision and ‘d’ was for
            double-precision floating point.
  
!      ‘v’
!           An Altivec vector register (VR), ‘v0’...‘v31’.
  
!      ‘wa’
!           A VSX register (VSR), ‘vs0’...‘vs63’.  This is either an FPR
!           (‘vs0’...‘vs31’ are ‘f0’...‘f31’) or a VR (‘vs32’...‘vs63’ are
!           ‘v0’...‘v31’).
  
!           When using ‘wa’, you should use the ‘%x’ output modifier, so
            that the correct register number is printed.  For example:
  
                 asm ("xvadddp %x0,%x1,%x2"
                      : "=wa" (v1)
                      : "wa" (v2), "wa" (v3));
  
!           You should not use ‘%x’ for ‘v’ operands:
  
                 asm ("xsaddqp %0,%1,%2"
                      : "=v" (v1)
                      : "v" (v2), "v" (v3));
  
!      ‘c’
!           The count register, ‘ctr’.
  
!      ‘l’
!           The link register, ‘lr’.
  
!      ‘x’
!           Condition register field 0, ‘cr0’.
  
!      ‘y’
!           Any condition register field, ‘cr0’...‘cr7’.
  
!      ‘I’
            A signed 16-bit constant.
  
!      ‘J’
!           An unsigned 16-bit constant shifted left 16 bits (use ‘L’
!           instead for ‘SImode’ constants).
  
!      ‘K’
            An unsigned 16-bit constant.
  
!      ‘L’
            A signed 16-bit constant shifted left 16 bits.
  
!      ‘eI’
            A signed 34-bit integer constant if prefixed instructions are
            supported.
  
!      ‘eP’
            A scalar floating point constant or a vector constant that can
            be loaded to a VSX register with one prefixed instruction.
  
!      ‘eQ’
            An IEEE 128-bit constant that can be loaded into a VSX
!           register with the ‘lxvkq’ instruction.
  
!      ‘m’
!           A memory operand.  Normally, ‘m’ does not allow addresses that
!           update the base register.  If the ‘<’ or ‘>’ constraint is
            also used, they are allowed and therefore on PowerPC targets
!           in that case it is only safe to use ‘m<>’ in an ‘asm’
!           statement if that ‘asm’ statement accesses the operand exactly
!           once.  The ‘asm’ statement must also use ‘%U<OPNO>’ as a
            placeholder for the "update" flag in the corresponding load or
            store instruction.  For example:
  
*************** _PowerPC and IBM RS6000--'config/rs6000/
*** 47773,48262 ****
  
            is not.
  
!      'Q'
            A memory operand addressed by just a base register.
  
!      'Z'
            A memory operand accessed with indexed or indirect addressing.
  
!      'a'
            An indexed or indirect address.
  
! _PRU--'config/pru/constraints.md'_
!      'I'
            An unsigned 8-bit integer constant.
  
!      'J'
            An unsigned 16-bit integer constant.
  
!      'L'
            An unsigned 5-bit integer constant (for shift counts).
  
!      'T'
            A text segment (program memory) constant label.
  
!      'Z'
            Integer constant zero.
  
! _RL78--'config/rl78/constraints.md'_
  
!      'Int3'
            An integer constant in the range 1 ... 7.
!      'Int8'
            An integer constant in the range 0 ... 255.
!      'J'
!           An integer constant in the range -255 ... 0
!      'K'
            The integer constant 1.
!      'L'
            The integer constant -1.
!      'M'
            The integer constant 0.
!      'N'
            The integer constant 2.
!      'O'
            The integer constant -2.
!      'P'
            An integer constant in the range 1 ... 15.
!      'Qbi'
            The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
!      'Qsc'
            The synthetic compare types-gt, lt, ge, and le.
!      'Wab'
            A memory reference with an absolute address.
!      'Wbc'
!           A memory reference using 'BC' as a base register, with an
            optional offset.
!      'Wca'
!           A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
            address, for calls.
!      'Wcv'
            A memory reference using any 16-bit register pair for the
            address, for calls.
!      'Wd2'
!           A memory reference using 'DE' as a base register, with an
            optional offset.
!      'Wde'
!           A memory reference using 'DE' as a base register, without any
            offset.
!      'Wfr'
            Any memory reference to an address in the far address space.
!      'Wh1'
!           A memory reference using 'HL' as a base register, with an
            optional one-byte offset.
!      'Whb'
!           A memory reference using 'HL' as a base register, with 'B' or
!           'C' as the index register.
!      'Whl'
!           A memory reference using 'HL' as a base register, without any
            offset.
!      'Ws1'
!           A memory reference using 'SP' as a base register, with an
            optional one-byte offset.
!      'Y'
            Any memory reference to an address in the near address space.
!      'A'
!           The 'AX' register.
!      'B'
!           The 'BC' register.
!      'D'
!           The 'DE' register.
!      'R'
!           'A' through 'L' registers.
!      'S'
!           The 'SP' register.
!      'T'
!           The 'HL' register.
!      'Z08W'
!           The 16-bit 'R8' register.
!      'Z10W'
!           The 16-bit 'R10' register.
!      'Zint'
!           The registers reserved for interrupts ('R24' to 'R31').
!      'a'
!           The 'A' register.
!      'b'
!           The 'B' register.
!      'c'
!           The 'C' register.
!      'd'
!           The 'D' register.
!      'e'
!           The 'E' register.
!      'h'
!           The 'H' register.
!      'l'
!           The 'L' register.
!      'v'
            The virtual registers.
!      'w'
!           The 'PSW' register.
!      'x'
!           The 'X' register.
  
! _RISC-V--'config/riscv/constraints.md'_
  
!      'f'
            A floating-point register (if available).
  
!      'I'
            An I-type 12-bit signed immediate.
  
!      'J'
            Integer zero.
  
!      'K'
            A 5-bit unsigned immediate for CSR access instructions.
  
!      'A'
            An address that is held in a general-purpose register.
  
!      'S'
            A constraint that matches an absolute symbolic address.
  
!      'vr'
            A vector register (if available)..
  
!      'vd'
            A vector register, excluding v0 (if available).
  
!      'vm'
            A vector register, only v0 (if available).
  
! _RX--'config/rx/constraints.md'_
!      'Q'
            An address which does not involve register indirect addressing
            or pre/post increment/decrement addressing.
  
!      'Symbol'
            A symbol reference.
  
!      'Int08'
!           A constant in the range -256 to 255, inclusive.
  
!      'Sint08'
!           A constant in the range -128 to 127, inclusive.
  
!      'Sint16'
!           A constant in the range -32768 to 32767, inclusive.
  
!      'Sint24'
!           A constant in the range -8388608 to 8388607, inclusive.
  
!      'Uint04'
            A constant in the range 0 to 15, inclusive.
  
! _S/390 and zSeries--'config/s390/s390.h'_
!      'a'
            Address register (general purpose register except r0)
  
!      'c'
            Condition code register
  
!      'd'
            Data register (arbitrary general purpose register)
  
!      'f'
            Floating-point register
  
!      'I'
            Unsigned 8-bit constant (0-255)
  
!      'J'
            Unsigned 12-bit constant (0-4095)
  
!      'K'
!           Signed 16-bit constant (-32768-32767)
  
!      'L'
            Value appropriate as displacement.
!           '(0..4095)'
                 for short displacement
!           '(-524288..524287)'
                 for long displacement
  
!      'M'
            Constant integer with a value of 0x7fffffff.
  
!      'N'
            Multiple letter constraint followed by 4 parameter letters.
!           '0..9:'
                 number of the part counting from most to least
                 significant
!           'H,Q:'
                 mode of the part
!           'D,S,H:'
                 mode of the containing operand
!           '0,F:'
                 value of the other parts (F--all bits set)
            The constraint matches if the specified part of a constant has
            a value different from its other parts.
  
!      'Q'
            Memory reference without index register and with short
            displacement.
  
!      'R'
            Memory reference with index register and short displacement.
  
!      'S'
            Memory reference without index register but with long
            displacement.
  
!      'T'
            Memory reference with index register and long displacement.
  
!      'U'
            Pointer with short displacement.
  
!      'W'
            Pointer with long displacement.
  
!      'Y'
            Shift count operand.
  
! _SPARC--'config/sparc/sparc.h'_
!      'f'
            Floating-point register on the SPARC-V8 architecture and lower
            floating-point register on the SPARC-V9 architecture.
  
!      'e'
!           Floating-point register.  It is equivalent to 'f' on the
            SPARC-V8 architecture and contains both lower and upper
            floating-point registers on the SPARC-V9 architecture.
  
!      'c'
            Floating-point condition code register.
  
!      'd'
            Lower floating-point register.  It is only valid on the
            SPARC-V9 architecture when the Visual Instruction Set is
            available.
  
!      'b'
            Floating-point register.  It is only valid on the SPARC-V9
            architecture when the Visual Instruction Set is available.
  
!      'h'
            64-bit global or out register for the SPARC-V8+ architecture.
  
!      'C'
            The constant all-ones, for floating-point.
  
!      'A'
            Signed 5-bit constant
  
!      'D'
            A vector constant
  
!      'I'
            Signed 13-bit constant
  
!      'J'
            Zero
  
!      'K'
            32-bit constant with the low 12 bits clear (a constant that
!           can be loaded with the 'sethi' instruction)
  
!      'L'
!           A constant in the range supported by 'movcc' instructions
            (11-bit signed immediate)
  
!      'M'
!           A constant in the range supported by 'movrcc' instructions
            (10-bit signed immediate)
  
!      'N'
!           Same as 'K', except that it verifies that bits that are not in
            the lower 32-bit range are all zero.  Must be used instead of
!           'K' for modes wider than 'SImode'
  
!      'O'
            The constant 4096
  
!      'G'
            Floating-point zero
  
!      'H'
            Signed 13-bit constant, sign-extended to 32 or 64 bits
  
!      'P'
            The constant -1
  
!      'Q'
            Floating-point constant whose integral representation can be
            moved into an integer register using a single sethi
            instruction
  
!      'R'
            Floating-point constant whose integral representation can be
            moved into an integer register using a single mov instruction
  
!      'S'
            Floating-point constant whose integral representation can be
            moved into an integer register using a high/lo_sum instruction
            sequence
  
!      'T'
            Memory address aligned to an 8-byte boundary
  
!      'U'
            Even register
  
!      'W'
!           Memory address for 'e' constraint registers
  
!      'w'
            Memory address with only a base register
  
!      'Y'
            Vector zero
  
! _TI C6X family--'config/c6x/constraints.md'_
!      'a'
            Register file A (A0-A31).
  
!      'b'
            Register file B (B0-B31).
  
!      'A'
            Predicate registers in register file A (A0-A2 on C64X and
            higher, A1 and A2 otherwise).
  
!      'B'
            Predicate registers in register file B (B0-B2).
  
!      'C'
            A call-used register in register file B (B0-B9, B16-B31).
  
!      'Da'
            Register file A, excluding predicate registers (A3-A31, plus
            A0 if not C64X or higher).
  
!      'Db'
            Register file B, excluding predicate registers (B3-B31).
  
!      'Iu4'
            Integer constant in the range 0 ... 15.
  
!      'Iu5'
            Integer constant in the range 0 ... 31.
  
!      'In5'
!           Integer constant in the range -31 ... 0.
  
!      'Is5'
!           Integer constant in the range -16 ... 15.
  
!      'I5x'
            Integer constant that can be the operand of an ADDA or a SUBA
            insn.
  
!      'IuB'
            Integer constant in the range 0 ... 65535.
  
!      'IsB'
!           Integer constant in the range -32768 ... 32767.
  
!      'IsC'
            Integer constant in the range -2^{20} ... 2^{20} - 1.
  
!      'Jc'
            Integer constant that is a valid mask for the clr instruction.
  
!      'Js'
            Integer constant that is a valid mask for the set instruction.
  
!      'Q'
            Memory location with A base register.
  
!      'R'
            Memory location with B base register.
  
!      'Z'
            Register B14 (aka DP).
  
! _Visium--'config/visium/constraints.md'_
!      'b'
!           EAM register 'mdb'
  
!      'c'
!           EAM register 'mdc'
  
!      'f'
            Floating point register
  
!      'l'
!           General register, but not 'r29', 'r30' and 'r31'
  
!      't'
!           Register 'r1'
  
!      'u'
!           Register 'r2'
  
!      'v'
!           Register 'r3'
  
!      'G'
            Floating-point constant 0.0
  
!      'J'
            Integer constant in the range 0 ..  65535 (16-bit immediate)
  
!      'K'
            Integer constant in the range 1 ..  31 (5-bit immediate)
  
!      'L'
!           Integer constant in the range -65535 ..  -1 (16-bit negative
            immediate)
  
!      'M'
!           Integer constant -1
  
!      'O'
            Integer constant 0
  
!      'P'
            Integer constant 32
  
! _x86 family--'config/i386/constraints.md'_
!      'R'
            Legacy register--the eight integer registers available on all
!           i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
  
!      'q'
!           Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
!           'c', and 'd'; in 64-bit mode, any integer register.
  
!      'Q'
!           Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
  
!      'a'
!           The 'a' register.
  
!      'b'
!           The 'b' register.
  
!      'c'
!           The 'c' register.
  
!      'd'
!           The 'd' register.
  
!      'S'
!           The 'si' register.
  
!      'D'
!           The 'di' register.
  
!      'A'
!           The 'a' and 'd' registers.  This class is used for
!           instructions that return double word results in the 'ax:dx'
            register pair.  Single word values will be allocated either in
!           'ax' or 'dx'.  For example on i386 the following implements
!           'rdtsc':
  
                 unsigned long long rdtsc (void)
                 {
--- 47783,48272 ----
  
            is not.
  
!      ‘Q’
            A memory operand addressed by just a base register.
  
!      ‘Z’
            A memory operand accessed with indexed or indirect addressing.
  
!      ‘a’
            An indexed or indirect address.
  
! _PRU--‘config/pru/constraints.md’_
!      ‘I’
            An unsigned 8-bit integer constant.
  
!      ‘J’
            An unsigned 16-bit integer constant.
  
!      ‘L’
            An unsigned 5-bit integer constant (for shift counts).
  
!      ‘T’
            A text segment (program memory) constant label.
  
!      ‘Z’
            Integer constant zero.
  
! _RL78--‘config/rl78/constraints.md’_
  
!      ‘Int3’
            An integer constant in the range 1 ... 7.
!      ‘Int8’
            An integer constant in the range 0 ... 255.
!      ‘J’
!           An integer constant in the range −255 ... 0
!      ‘K’
            The integer constant 1.
!      ‘L’
            The integer constant -1.
!      ‘M’
            The integer constant 0.
!      ‘N’
            The integer constant 2.
!      ‘O’
            The integer constant -2.
!      ‘P’
            An integer constant in the range 1 ... 15.
!      ‘Qbi’
            The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
!      ‘Qsc’
            The synthetic compare types-gt, lt, ge, and le.
!      ‘Wab’
            A memory reference with an absolute address.
!      ‘Wbc’
!           A memory reference using ‘BC’ as a base register, with an
            optional offset.
!      ‘Wca’
!           A memory reference using ‘AX’, ‘BC’, ‘DE’, or ‘HL’ for the
            address, for calls.
!      ‘Wcv’
            A memory reference using any 16-bit register pair for the
            address, for calls.
!      ‘Wd2’
!           A memory reference using ‘DE’ as a base register, with an
            optional offset.
!      ‘Wde’
!           A memory reference using ‘DE’ as a base register, without any
            offset.
!      ‘Wfr’
            Any memory reference to an address in the far address space.
!      ‘Wh1’
!           A memory reference using ‘HL’ as a base register, with an
            optional one-byte offset.
!      ‘Whb’
!           A memory reference using ‘HL’ as a base register, with ‘B’ or
!           ‘C’ as the index register.
!      ‘Whl’
!           A memory reference using ‘HL’ as a base register, without any
            offset.
!      ‘Ws1’
!           A memory reference using ‘SP’ as a base register, with an
            optional one-byte offset.
!      ‘Y’
            Any memory reference to an address in the near address space.
!      ‘A’
!           The ‘AX’ register.
!      ‘B’
!           The ‘BC’ register.
!      ‘D’
!           The ‘DE’ register.
!      ‘R’
!           ‘A’ through ‘L’ registers.
!      ‘S’
!           The ‘SP’ register.
!      ‘T’
!           The ‘HL’ register.
!      ‘Z08W’
!           The 16-bit ‘R8’ register.
!      ‘Z10W’
!           The 16-bit ‘R10’ register.
!      ‘Zint’
!           The registers reserved for interrupts (‘R24’ to ‘R31’).
!      ‘a’
!           The ‘A’ register.
!      ‘b’
!           The ‘B’ register.
!      ‘c’
!           The ‘C’ register.
!      ‘d’
!           The ‘D’ register.
!      ‘e’
!           The ‘E’ register.
!      ‘h’
!           The ‘H’ register.
!      ‘l’
!           The ‘L’ register.
!      ‘v’
            The virtual registers.
!      ‘w’
!           The ‘PSW’ register.
!      ‘x’
!           The ‘X’ register.
  
! _RISC-V--‘config/riscv/constraints.md’_
  
!      ‘f’
            A floating-point register (if available).
  
!      ‘I’
            An I-type 12-bit signed immediate.
  
!      ‘J’
            Integer zero.
  
!      ‘K’
            A 5-bit unsigned immediate for CSR access instructions.
  
!      ‘A’
            An address that is held in a general-purpose register.
  
!      ‘S’
            A constraint that matches an absolute symbolic address.
  
!      ‘vr’
            A vector register (if available)..
  
!      ‘vd’
            A vector register, excluding v0 (if available).
  
!      ‘vm’
            A vector register, only v0 (if available).
  
! _RX--‘config/rx/constraints.md’_
!      ‘Q’
            An address which does not involve register indirect addressing
            or pre/post increment/decrement addressing.
  
!      ‘Symbol’
            A symbol reference.
  
!      ‘Int08’
!           A constant in the range −256 to 255, inclusive.
  
!      ‘Sint08’
!           A constant in the range −128 to 127, inclusive.
  
!      ‘Sint16’
!           A constant in the range −32768 to 32767, inclusive.
  
!      ‘Sint24’
!           A constant in the range −8388608 to 8388607, inclusive.
  
!      ‘Uint04’
            A constant in the range 0 to 15, inclusive.
  
! _S/390 and zSeries--‘config/s390/s390.h’_
!      ‘a’
            Address register (general purpose register except r0)
  
!      ‘c’
            Condition code register
  
!      ‘d’
            Data register (arbitrary general purpose register)
  
!      ‘f’
            Floating-point register
  
!      ‘I’
            Unsigned 8-bit constant (0-255)
  
!      ‘J’
            Unsigned 12-bit constant (0-4095)
  
!      ‘K’
!           Signed 16-bit constant (−32768-32767)
  
!      ‘L’
            Value appropriate as displacement.
!           ‘(0..4095)’
                 for short displacement
!           ‘(−524288..524287)’
                 for long displacement
  
!      ‘M’
            Constant integer with a value of 0x7fffffff.
  
!      ‘N’
            Multiple letter constraint followed by 4 parameter letters.
!           ‘0..9:’
                 number of the part counting from most to least
                 significant
!           ‘H,Q:’
                 mode of the part
!           ‘D,S,H:’
                 mode of the containing operand
!           ‘0,F:’
                 value of the other parts (F--all bits set)
            The constraint matches if the specified part of a constant has
            a value different from its other parts.
  
!      ‘Q’
            Memory reference without index register and with short
            displacement.
  
!      ‘R’
            Memory reference with index register and short displacement.
  
!      ‘S’
            Memory reference without index register but with long
            displacement.
  
!      ‘T’
            Memory reference with index register and long displacement.
  
!      ‘U’
            Pointer with short displacement.
  
!      ‘W’
            Pointer with long displacement.
  
!      ‘Y’
            Shift count operand.
  
! _SPARC--‘config/sparc/sparc.h’_
!      ‘f’
            Floating-point register on the SPARC-V8 architecture and lower
            floating-point register on the SPARC-V9 architecture.
  
!      ‘e’
!           Floating-point register.  It is equivalent to ‘f’ on the
            SPARC-V8 architecture and contains both lower and upper
            floating-point registers on the SPARC-V9 architecture.
  
!      ‘c’
            Floating-point condition code register.
  
!      ‘d’
            Lower floating-point register.  It is only valid on the
            SPARC-V9 architecture when the Visual Instruction Set is
            available.
  
!      ‘b’
            Floating-point register.  It is only valid on the SPARC-V9
            architecture when the Visual Instruction Set is available.
  
!      ‘h’
            64-bit global or out register for the SPARC-V8+ architecture.
  
!      ‘C’
            The constant all-ones, for floating-point.
  
!      ‘A’
            Signed 5-bit constant
  
!      ‘D’
            A vector constant
  
!      ‘I’
            Signed 13-bit constant
  
!      ‘J’
            Zero
  
!      ‘K’
            32-bit constant with the low 12 bits clear (a constant that
!           can be loaded with the ‘sethi’ instruction)
  
!      ‘L’
!           A constant in the range supported by ‘movcc’ instructions
            (11-bit signed immediate)
  
!      ‘M’
!           A constant in the range supported by ‘movrcc’ instructions
            (10-bit signed immediate)
  
!      ‘N’
!           Same as ‘K’, except that it verifies that bits that are not in
            the lower 32-bit range are all zero.  Must be used instead of
!           ‘K’ for modes wider than ‘SImode’
  
!      ‘O’
            The constant 4096
  
!      ‘G’
            Floating-point zero
  
!      ‘H’
            Signed 13-bit constant, sign-extended to 32 or 64 bits
  
!      ‘P’
            The constant -1
  
!      ‘Q’
            Floating-point constant whose integral representation can be
            moved into an integer register using a single sethi
            instruction
  
!      ‘R’
            Floating-point constant whose integral representation can be
            moved into an integer register using a single mov instruction
  
!      ‘S’
            Floating-point constant whose integral representation can be
            moved into an integer register using a high/lo_sum instruction
            sequence
  
!      ‘T’
            Memory address aligned to an 8-byte boundary
  
!      ‘U’
            Even register
  
!      ‘W’
!           Memory address for ‘e’ constraint registers
  
!      ‘w’
            Memory address with only a base register
  
!      ‘Y’
            Vector zero
  
! _TI C6X family--‘config/c6x/constraints.md’_
!      ‘a’
            Register file A (A0-A31).
  
!      ‘b’
            Register file B (B0-B31).
  
!      ‘A’
            Predicate registers in register file A (A0-A2 on C64X and
            higher, A1 and A2 otherwise).
  
!      ‘B’
            Predicate registers in register file B (B0-B2).
  
!      ‘C’
            A call-used register in register file B (B0-B9, B16-B31).
  
!      ‘Da’
            Register file A, excluding predicate registers (A3-A31, plus
            A0 if not C64X or higher).
  
!      ‘Db’
            Register file B, excluding predicate registers (B3-B31).
  
!      ‘Iu4’
            Integer constant in the range 0 ... 15.
  
!      ‘Iu5’
            Integer constant in the range 0 ... 31.
  
!      ‘In5’
!           Integer constant in the range −31 ... 0.
  
!      ‘Is5’
!           Integer constant in the range −16 ... 15.
  
!      ‘I5x’
            Integer constant that can be the operand of an ADDA or a SUBA
            insn.
  
!      ‘IuB’
            Integer constant in the range 0 ... 65535.
  
!      ‘IsB’
!           Integer constant in the range −32768 ... 32767.
  
!      ‘IsC’
            Integer constant in the range -2^{20} ... 2^{20} - 1.
  
!      ‘Jc’
            Integer constant that is a valid mask for the clr instruction.
  
!      ‘Js’
            Integer constant that is a valid mask for the set instruction.
  
!      ‘Q’
            Memory location with A base register.
  
!      ‘R’
            Memory location with B base register.
  
!      ‘Z’
            Register B14 (aka DP).
  
! _Visium--‘config/visium/constraints.md’_
!      ‘b’
!           EAM register ‘mdb’
  
!      ‘c’
!           EAM register ‘mdc’
  
!      ‘f’
            Floating point register
  
!      ‘l’
!           General register, but not ‘r29’, ‘r30’ and ‘r31’
  
!      ‘t’
!           Register ‘r1’
  
!      ‘u’
!           Register ‘r2’
  
!      ‘v’
!           Register ‘r3’
  
!      ‘G’
            Floating-point constant 0.0
  
!      ‘J’
            Integer constant in the range 0 ..  65535 (16-bit immediate)
  
!      ‘K’
            Integer constant in the range 1 ..  31 (5-bit immediate)
  
!      ‘L’
!           Integer constant in the range −65535 ..  −1 (16-bit negative
            immediate)
  
!      ‘M’
!           Integer constant −1
  
!      ‘O’
            Integer constant 0
  
!      ‘P’
            Integer constant 32
  
! _x86 family--‘config/i386/constraints.md’_
!      ‘R’
            Legacy register--the eight integer registers available on all
!           i386 processors (‘a’, ‘b’, ‘c’, ‘d’, ‘si’, ‘di’, ‘bp’, ‘sp’).
  
!      ‘q’
!           Any register accessible as ‘Rl’.  In 32-bit mode, ‘a’, ‘b’,
!           ‘c’, and ‘d’; in 64-bit mode, any integer register.
  
!      ‘Q’
!           Any register accessible as ‘Rh’: ‘a’, ‘b’, ‘c’, and ‘d’.
  
!      ‘a’
!           The ‘a’ register.
  
!      ‘b’
!           The ‘b’ register.
  
!      ‘c’
!           The ‘c’ register.
  
!      ‘d’
!           The ‘d’ register.
  
!      ‘S’
!           The ‘si’ register.
  
!      ‘D’
!           The ‘di’ register.
  
!      ‘A’
!           The ‘a’ and ‘d’ registers.  This class is used for
!           instructions that return double word results in the ‘ax:dx’
            register pair.  Single word values will be allocated either in
!           ‘ax’ or ‘dx’.  For example on i386 the following implements
!           ‘rdtsc’:
  
                 unsigned long long rdtsc (void)
                 {
*************** _x86 family--'config/i386/constraints.md
*** 48266,48272 ****
                 }
  
            This is not correct on x86-64 as it would allocate tick in
!           either 'ax' or 'dx'.  You have to use the following variant
            instead:
  
                 unsigned long long rdtsc (void)
--- 48276,48282 ----
                 }
  
            This is not correct on x86-64 as it would allocate tick in
!           either ‘ax’ or ‘dx’.  You have to use the following variant
            instead:
  
                 unsigned long long rdtsc (void)
*************** _x86 family--'config/i386/constraints.md
*** 48276,48452 ****
                   return ((unsigned long long)tickh << 32)|tickl;
                 }
  
!      'U'
            The call-clobbered integer registers.
  
!      'f'
            Any 80387 floating-point (stack) register.
  
!      't'
!           Top of 80387 floating-point stack ('%st(0)').
  
!      'u'
!           Second from top of 80387 floating-point stack ('%st(1)').
  
!      'y'
            Any MMX register.
  
!      'x'
            Any SSE register.
  
!      'v'
!           Any EVEX encodable SSE register ('%xmm0-%xmm31').
  
!      'Yz'
!           First SSE register ('%xmm0').
  
!      'I'
            Integer constant in the range 0 ... 31, for 32-bit shifts.
  
!      'J'
            Integer constant in the range 0 ... 63, for 64-bit shifts.
  
!      'K'
            Signed 8-bit integer constant.
  
!      'L'
!           '0xFF' or '0xFFFF', for andsi as a zero-extending move.
  
!      'M'
!           0, 1, 2, or 3 (shifts for the 'lea' instruction).
  
!      'N'
!           Unsigned 8-bit integer constant (for 'in' and 'out'
            instructions).
  
!      'G'
            Standard 80387 floating point constant.
  
!      'C'
            SSE constant zero operand.
  
!      'e'
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for immediate operands in sign-extending
            x86-64 instructions).
  
!      'We'
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for sign-extending conversion operations
!           that require non-'VOIDmode' immediate operands).
  
!      'Wz'
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for zero-extending conversion
!           operations that require non-'VOIDmode' immediate operands).
  
!      'Wd'
            128-bit integer constant where both the high and low 64-bit
!           word satisfy the 'e' constraint.
  
!      'Ws'
!           A symbolic reference or label reference.  You can use the '%p'
            modifier to print the raw symbol.
  
!      'Z'
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for immediate operands in
            zero-extending x86-64 instructions).
  
!      'Tv'
            VSIB address operand.
  
!      'Ts'
            Address operand without segment register.
  
! _Xstormy16--'config/stormy16/stormy16.h'_
!      'a'
            Register r0.
  
!      'b'
            Register r1.
  
!      'c'
            Register r2.
  
!      'd'
            Register r8.
  
!      'e'
            Registers r0 through r7.
  
!      't'
            Registers r0 and r1.
  
!      'y'
            The carry register.
  
!      'z'
            Registers r8 and r9.
  
!      'I'
            A constant between 0 and 3 inclusive.
  
!      'J'
            A constant that has exactly one bit set.
  
!      'K'
            A constant that has exactly one bit clear.
  
!      'L'
            A constant between 0 and 255 inclusive.
  
!      'M'
!           A constant between -255 and 0 inclusive.
  
!      'N'
!           A constant between -3 and 0 inclusive.
  
!      'O'
            A constant between 1 and 4 inclusive.
  
!      'P'
!           A constant between -4 and -1 inclusive.
  
!      'Q'
            A memory reference that is a stack push.
  
!      'R'
            A memory reference that is a stack pop.
  
!      'S'
            A memory reference that refers to a constant address of known
            value.
  
!      'T'
            The register indicated by Rx (not implemented yet).
  
!      'U'
            A constant that is not between 2 and 15 inclusive.
  
!      'Z'
            The constant 0.
  
! _Xtensa--'config/xtensa/constraints.md'_
!      'a'
            General-purpose 32-bit register
  
!      'b'
            One-bit boolean register
  
!      'A'
            MAC16 40-bit accumulator register
  
!      'I'
            Signed 12-bit integer constant, for use in MOVI instructions
  
!      'J'
            Signed 8-bit integer constant, for use in ADDI instructions
  
!      'K'
            Integer constant valid for BccI instructions
  
!      'L'
            Unsigned constant valid for BccUI instructions
  
  
--- 48286,48462 ----
                   return ((unsigned long long)tickh << 32)|tickl;
                 }
  
!      ‘U’
            The call-clobbered integer registers.
  
!      ‘f’
            Any 80387 floating-point (stack) register.
  
!      ‘t’
!           Top of 80387 floating-point stack (‘%st(0)’).
  
!      ‘u’
!           Second from top of 80387 floating-point stack (‘%st(1)’).
  
!      ‘y’
            Any MMX register.
  
!      ‘x’
            Any SSE register.
  
!      ‘v’
!           Any EVEX encodable SSE register (‘%xmm0-%xmm31’).
  
!      ‘Yz’
!           First SSE register (‘%xmm0’).
  
!      ‘I’
            Integer constant in the range 0 ... 31, for 32-bit shifts.
  
!      ‘J’
            Integer constant in the range 0 ... 63, for 64-bit shifts.
  
!      ‘K’
            Signed 8-bit integer constant.
  
!      ‘L’
!           ‘0xFF’ or ‘0xFFFF’, for andsi as a zero-extending move.
  
!      ‘M’
!           0, 1, 2, or 3 (shifts for the ‘lea’ instruction).
  
!      ‘N’
!           Unsigned 8-bit integer constant (for ‘in’ and ‘out’
            instructions).
  
!      ‘G’
            Standard 80387 floating point constant.
  
!      ‘C’
            SSE constant zero operand.
  
!      ‘e’
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for immediate operands in sign-extending
            x86-64 instructions).
  
!      ‘We’
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for sign-extending conversion operations
!           that require non-‘VOIDmode’ immediate operands).
  
!      ‘Wz’
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for zero-extending conversion
!           operations that require non-‘VOIDmode’ immediate operands).
  
!      ‘Wd’
            128-bit integer constant where both the high and low 64-bit
!           word satisfy the ‘e’ constraint.
  
!      ‘Ws’
!           A symbolic reference or label reference.  You can use the ‘%p’
            modifier to print the raw symbol.
  
!      ‘Z’
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for immediate operands in
            zero-extending x86-64 instructions).
  
!      ‘Tv’
            VSIB address operand.
  
!      ‘Ts’
            Address operand without segment register.
  
! _Xstormy16--‘config/stormy16/stormy16.h’_
!      ‘a’
            Register r0.
  
!      ‘b’
            Register r1.
  
!      ‘c’
            Register r2.
  
!      ‘d’
            Register r8.
  
!      ‘e’
            Registers r0 through r7.
  
!      ‘t’
            Registers r0 and r1.
  
!      ‘y’
            The carry register.
  
!      ‘z’
            Registers r8 and r9.
  
!      ‘I’
            A constant between 0 and 3 inclusive.
  
!      ‘J’
            A constant that has exactly one bit set.
  
!      ‘K’
            A constant that has exactly one bit clear.
  
!      ‘L’
            A constant between 0 and 255 inclusive.
  
!      ‘M’
!           A constant between −255 and 0 inclusive.
  
!      ‘N’
!           A constant between −3 and 0 inclusive.
  
!      ‘O’
            A constant between 1 and 4 inclusive.
  
!      ‘P’
!           A constant between −4 and −1 inclusive.
  
!      ‘Q’
            A memory reference that is a stack push.
  
!      ‘R’
            A memory reference that is a stack pop.
  
!      ‘S’
            A memory reference that refers to a constant address of known
            value.
  
!      ‘T’
            The register indicated by Rx (not implemented yet).
  
!      ‘U’
            A constant that is not between 2 and 15 inclusive.
  
!      ‘Z’
            The constant 0.
  
! _Xtensa--‘config/xtensa/constraints.md’_
!      ‘a’
            General-purpose 32-bit register
  
!      ‘b’
            One-bit boolean register
  
!      ‘A’
            MAC16 40-bit accumulator register
  
!      ‘I’
            Signed 12-bit integer constant, for use in MOVI instructions
  
!      ‘J’
            Signed 8-bit integer constant, for use in ADDI instructions
  
!      ‘K’
            Integer constant valid for BccI instructions
  
!      ‘L’
            Unsigned constant valid for BccUI instructions
  
  
*************** File: gcc.info,  Node: Asm Labels,  Next
*** 48456,48462 ****
  -----------------------------------------------
  
  You can specify the name to be used in the assembler code for a C
! function or variable by writing the 'asm' (or '__asm__') keyword after
  the declarator.  It is up to you to make sure that the assembler names
  you choose do not conflict with any other assembler symbols, or
  reference registers.
--- 48466,48472 ----
  -----------------------------------------------
  
  You can specify the name to be used in the assembler code for a C
! function or variable by writing the ‘asm’ (or ‘__asm__’) keyword after
  the declarator.  It is up to you to make sure that the assembler names
  you choose do not conflict with any other assembler symbols, or
  reference registers.
*************** This sample shows how to specify the ass
*** 48468,48475 ****
  
       int foo asm ("myfoo") = 2;
  
! This specifies that the name to be used for the variable 'foo' in the
! assembler code should be 'myfoo' rather than the usual '_foo'.
  
   On systems where an underscore is normally prepended to the name of a C
  variable, this feature allows you to define names for the linker that do
--- 48478,48485 ----
  
       int foo asm ("myfoo") = 2;
  
! This specifies that the name to be used for the variable ‘foo’ in the
! assembler code should be ‘myfoo’ rather than the usual ‘_foo’.
  
   On systems where an underscore is normally prepended to the name of a C
  variable, this feature allows you to define names for the linker that do
*************** Assembler names for functions
*** 48484,48490 ****
  .............................
  
  To specify the assembler name for functions, write a declaration for the
! function before its definition and put 'asm' there, like this:
  
       int func (int x, int y) asm ("MYFUNC");
  
--- 48494,48500 ----
  .............................
  
  To specify the assembler name for functions, write a declaration for the
! function before its definition and put ‘asm’ there, like this:
  
       int func (int x, int y) asm ("MYFUNC");
  
*************** function before its definition and put '
*** 48492,48499 ****
       {
          /* ... */
  
! This specifies that the name to be used for the function 'func' in the
! assembler code should be 'MYFUNC'.
  
  
  File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
--- 48502,48509 ----
       {
          /* ... */
  
! This specifies that the name to be used for the function ‘func’ in the
! assembler code should be ‘MYFUNC’.
  
  
  File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
*************** specified register like this:
*** 48527,48541 ****
  
       register int *foo asm ("r12");
  
! Here 'r12' is the name of the register that should be used.  Note that
  this is the same syntax used for defining local register variables, but
  for a global variable the declaration appears outside a function.  The
! 'register' keyword is required, and cannot be combined with 'static'.
  The register name must be a valid register name for the target platform.
  
!  Do not use type qualifiers such as 'const' and 'volatile', as the
  outcome may be contrary to expectations.  In particular, using the
! 'volatile' qualifier does not fully prevent the compiler from optimizing
  accesses to the register.
  
   Registers are a scarce resource on most systems and allowing the
--- 48537,48551 ----
  
       register int *foo asm ("r12");
  
! Here ‘r12’ is the name of the register that should be used.  Note that
  this is the same syntax used for defining local register variables, but
  for a global variable the declaration appears outside a function.  The
! ‘register’ keyword is required, and cannot be combined with ‘static’.
  The register name must be a valid register name for the target platform.
  
!  Do not use type qualifiers such as ‘const’ and ‘volatile’, as the
  outcome may be contrary to expectations.  In particular, using the
! ‘volatile’ qualifier does not fully prevent the compiler from optimizing
  accesses to the register.
  
   Registers are a scarce resource on most systems and allowing the
*************** that are accessed very often.
*** 48548,48566 ****
   After defining a global register variable, for the current compilation
  unit:
  
!    * If the register is a call-saved register, call ABI is affected: the
       register will not be restored in function epilogue sequences after
       the variable has been assigned.  Therefore, functions cannot safely
       return to callers that assume standard ABI.
!    * Conversely, if the register is a call-clobbered register, making
       calls to functions that use standard ABI may lose contents of the
       variable.  Such calls may be created by the compiler even if none
       are evident in the original program, for example when libgcc
       functions are used to make up for unavailable instructions.
!    * Accesses to the variable may be optimized as usual and the register
       remains available for allocation and use in any computations,
       provided that observable values of the variable are not affected.
!    * If the variable is referenced in inline assembly, the type of
       access must be provided to the compiler via constraints (*note
       Constraints::).  Accesses from basic asms are not supported.
  
--- 48558,48576 ----
   After defining a global register variable, for the current compilation
  unit:
  
!    • If the register is a call-saved register, call ABI is affected: the
       register will not be restored in function epilogue sequences after
       the variable has been assigned.  Therefore, functions cannot safely
       return to callers that assume standard ABI.
!    • Conversely, if the register is a call-clobbered register, making
       calls to functions that use standard ABI may lose contents of the
       variable.  Such calls may be created by the compiler even if none
       are evident in the original program, for example when libgcc
       functions are used to make up for unavailable instructions.
!    • Accesses to the variable may be optimized as usual and the register
       remains available for allocation and use in any computations,
       provided that observable values of the variable are not affected.
!    • If the variable is referenced in inline assembly, the type of
       access must be provided to the compiler via constraints (*note
       Constraints::).  Accesses from basic asms are not supported.
  
*************** code from libraries) is not affected.
*** 48572,48578 ****
  global register variable so they do not use the specified register for
  any other purpose, you need not actually add the global register
  declaration to their source code.  It suffices to specify the compiler
! option '-ffixed-REG' (*note Code Gen Options::) to reserve the register.
  
  Declaring the variable
  ......................
--- 48582,48588 ----
  global register variable so they do not use the specified register for
  any other purpose, you need not actually add the global register
  declaration to their source code.  It suffices to specify the compiler
! option ‘-ffixed-REG’ (*note Code Gen Options::) to reserve the register.
  
  Declaring the variable
  ......................
*************** Using the variable
*** 48593,48604 ****
  
  When calling routines that are not aware of the reservation, be cautious
  if those routines call back into code which uses them.  As an example,
! if you call the system library version of 'qsort', it may clobber your
  registers during execution, but (if you have selected appropriate
  registers) it will restore them before returning.  However it will _not_
! restore them before calling 'qsort''s comparison function.  As a result,
  global values will not reliably be available to the comparison function
! unless the 'qsort' function itself is rebuilt.
  
   Similarly, it is not safe to access the global register variables from
  signal handlers or from more than one thread of control.  Unless you
--- 48603,48614 ----
  
  When calling routines that are not aware of the reservation, be cautious
  if those routines call back into code which uses them.  As an example,
! if you call the system library version of ‘qsort’, it may clobber your
  registers during execution, but (if you have selected appropriate
  registers) it will restore them before returning.  However it will _not_
! restore them before calling ‘qsort’'s comparison function.  As a result,
  global values will not reliably be available to the comparison function
! unless the ‘qsort’ function itself is rebuilt.
  
   Similarly, it is not safe to access the global register variables from
  signal handlers or from more than one thread of control.  Unless you
*************** Furthermore, since the register is not r
*** 48608,48620 ****
  variable, accessing it from handlers of asynchronous signals may observe
  unrelated temporary values residing in the register.
  
!  On most machines, 'longjmp' restores to each global register variable
! the value it had at the time of the 'setjmp'.  On some machines,
! however, 'longjmp' does not change the value of global register
! variables.  To be portable, the function that called 'setjmp' should
  make other arrangements to save the values of the global register
! variables, and to restore them in a 'longjmp'.  This way, the same thing
! happens regardless of what 'longjmp' does.
  
  
  File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
--- 48618,48630 ----
  variable, accessing it from handlers of asynchronous signals may observe
  unrelated temporary values residing in the register.
  
!  On most machines, ‘longjmp’ restores to each global register variable
! the value it had at the time of the ‘setjmp’.  On some machines,
! however, ‘longjmp’ does not change the value of global register
! variables.  To be portable, the function that called ‘setjmp’ should
  make other arrangements to save the values of the global register
! variables, and to restore them in a ‘longjmp’.  This way, the same thing
! happens regardless of what ‘longjmp’ does.
  
  
  File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
*************** specified register like this:
*** 48627,48642 ****
  
       register int *foo asm ("r12");
  
! Here 'r12' is the name of the register that should be used.  Note that
  this is the same syntax used for defining global register variables, but
  for a local variable the declaration appears within a function.  The
! 'register' keyword is required, and cannot be combined with 'static'.
  The register name must be a valid register name for the target platform.
  
!  Do not use type qualifiers such as 'const' and 'volatile', as the
  outcome may be contrary to expectations.  In particular, when the
! 'const' qualifier is used, the compiler may substitute the variable with
! its initializer in 'asm' statements, which may cause the corresponding
  operand to appear in a different register.
  
   As with global register variables, it is recommended that you choose a
--- 48637,48652 ----
  
       register int *foo asm ("r12");
  
! Here ‘r12’ is the name of the register that should be used.  Note that
  this is the same syntax used for defining global register variables, but
  for a local variable the declaration appears within a function.  The
! ‘register’ keyword is required, and cannot be combined with ‘static’.
  The register name must be a valid register name for the target platform.
  
!  Do not use type qualifiers such as ‘const’ and ‘volatile’, as the
  outcome may be contrary to expectations.  In particular, when the
! ‘const’ qualifier is used, the compiler may substitute the variable with
! its initializer in ‘asm’ statements, which may cause the corresponding
  operand to appear in a different register.
  
   As with global register variables, it is recommended that you choose a
*************** register that is normally saved and rest
*** 48644,48655 ****
  machine, so that calls to library routines will not clobber it.
  
   The only supported use for this feature is to specify registers for
! input and output operands when calling Extended 'asm' (*note Extended
  Asm::).  This may be necessary if the constraints for a particular
  machine don't provide sufficient control to select the desired register.
  To force an operand into a register, create a local variable and specify
  the register name after the variable's declaration.  Then use the local
! variable for the 'asm' operand and specify any constraint letter that
  matches the register:
  
       register int *p1 asm ("r0") = ...;
--- 48654,48665 ----
  machine, so that calls to library routines will not clobber it.
  
   The only supported use for this feature is to specify registers for
! input and output operands when calling Extended ‘asm’ (*note Extended
  Asm::).  This may be necessary if the constraints for a particular
  machine don't provide sufficient control to select the desired register.
  To force an operand into a register, create a local variable and specify
  the register name after the variable's declaration.  Then use the local
! variable for the ‘asm’ operand and specify any constraint letter that
  matches the register:
  
       register int *p1 asm ("r0") = ...;
*************** matches the register:
*** 48658,48666 ****
       asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
  
   _Warning:_ In the above example, be aware that a register (for example
! 'r0') can be call-clobbered by subsequent code, including function calls
  and library calls for arithmetic operators on other variables (for
! example the initialization of 'p2').  In this case, use temporary
  variables for expressions between the register assignments:
  
       int t1 = ...;
--- 48668,48676 ----
       asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
  
   _Warning:_ In the above example, be aware that a register (for example
! ‘r0’) can be call-clobbered by subsequent code, including function calls
  and library calls for arithmetic operators on other variables (for
! example the initialization of ‘p2’).  In this case, use temporary
  variables for expressions between the register assignments:
  
       int t1 = ...;
*************** variables for expressions between the re
*** 48670,48686 ****
       asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
  
   Defining a register variable does not reserve the register.  Other than
! when invoking the Extended 'asm', the contents of the specified register
  are not guaranteed.  For this reason, the following uses are explicitly
  _not_ supported.  If they appear to work, it is only happenstance, and
  may stop working as intended due to (seemingly) unrelated changes in
  surrounding code, or even minor changes in the optimization of a future
  version of gcc:
  
!    * Passing parameters to or from Basic 'asm'
!    * Passing parameters to or from Extended 'asm' without using input or
       output operands.
!    * Passing parameters to or from routines written in assembler (or
       other languages) using non-standard calling conventions.
  
   Some developers use Local Register Variables in an attempt to improve
--- 48680,48696 ----
       asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
  
   Defining a register variable does not reserve the register.  Other than
! when invoking the Extended ‘asm’, the contents of the specified register
  are not guaranteed.  For this reason, the following uses are explicitly
  _not_ supported.  If they appear to work, it is only happenstance, and
  may stop working as intended due to (seemingly) unrelated changes in
  surrounding code, or even minor changes in the optimization of a future
  version of gcc:
  
!    • Passing parameters to or from Basic ‘asm’
!    • Passing parameters to or from Extended ‘asm’ without using input or
       output operands.
!    • Passing parameters to or from routines written in assembler (or
       other languages) using non-standard calling conventions.
  
   Some developers use Local Register Variables in an attempt to improve
*************** specifics for MIPS targets: (gccint)MIPS
*** 48698,48715 ****
  
  File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
  
! 6.48.6 Size of an 'asm'
  -----------------------
  
  Some targets require that GCC track the size of each instruction used in
  order to generate correct code.  Because the final length of the code
! produced by an 'asm' statement is only known by the assembler, GCC must
  make an estimate as to how big it will be.  It does this by counting the
! number of instructions in the pattern of the 'asm' and multiplying that
  by the length of the longest instruction supported by that processor.
  (When working out the number of instructions, it assumes that any
  occurrence of a newline or of whatever statement separator character is
! supported by the assembler -- typically ';' -- indicates the end of an
  instruction.)
  
   Normally, GCC's estimate is adequate to ensure that correct code is
--- 48708,48725 ----
  
  File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
  
! 6.48.6 Size of an ‘asm’
  -----------------------
  
  Some targets require that GCC track the size of each instruction used in
  order to generate correct code.  Because the final length of the code
! produced by an ‘asm’ statement is only known by the assembler, GCC must
  make an estimate as to how big it will be.  It does this by counting the
! number of instructions in the pattern of the ‘asm’ and multiplying that
  by the length of the longest instruction supported by that processor.
  (When working out the number of instructions, it assumes that any
  occurrence of a newline or of whatever statement separator character is
! supported by the assembler -- typically ‘;’ -- indicates the end of an
  instruction.)
  
   Normally, GCC's estimate is adequate to ensure that correct code is
*************** space in the object file than is needed
*** 48720,48727 ****
  this happens then the assembler may produce a diagnostic saying that a
  label is unreachable.
  
!  This size is also used for inlining decisions.  If you use 'asm inline'
! instead of just 'asm', then for inlining purposes the size of the asm is
  taken as the minimum size, ignoring how many instructions GCC thinks it
  is.
  
--- 48730,48737 ----
  this happens then the assembler may produce a diagnostic saying that a
  label is unreachable.
  
!  This size is also used for inlining decisions.  If you use ‘asm inline’
! instead of just ‘asm’, then for inlining purposes the size of the asm is
  taken as the minimum size, ignoring how many instructions GCC thinks it
  is.
  
*************** File: gcc.info,  Node: Alternate Keyword
*** 48731,48750 ****
  6.49 Alternate Keywords
  =======================
  
! '-ansi' and the various '-std' options disable certain keywords.  This
  causes trouble when you want to use GNU C extensions, or a
  general-purpose header file that should be usable by all programs,
! including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
! not available in programs compiled with '-ansi' or '-std' (although
! 'inline' can be used in a program compiled with '-std=c99' or a later
! standard).  The ISO C99 keyword 'restrict' is only available when
! '-std=gnu99' (which will eventually be the default) or '-std=c99' (or
! the equivalent '-std=iso9899:1999'), or an option for a later standard
  version, is used.
  
!  The way to solve these problems is to put '__' at the beginning and end
! of each problematical keyword.  For example, use '__asm__' instead of
! 'asm', and '__inline__' instead of 'inline'.
  
   Other C compilers won't accept these alternative keywords; if you want
  to compile with another compiler, you can define the alternate keywords
--- 48741,48760 ----
  6.49 Alternate Keywords
  =======================
  
! ‘-ansi’ and the various ‘-std’ options disable certain keywords.  This
  causes trouble when you want to use GNU C extensions, or a
  general-purpose header file that should be usable by all programs,
! including ISO C programs.  The keywords ‘asm’, ‘typeof’ and ‘inline’ are
! not available in programs compiled with ‘-ansi’ or ‘-std’ (although
! ‘inline’ can be used in a program compiled with ‘-std=c99’ or a later
! standard).  The ISO C99 keyword ‘restrict’ is only available when
! ‘-std=gnu99’ (which will eventually be the default) or ‘-std=c99’ (or
! the equivalent ‘-std=iso9899:1999’), or an option for a later standard
  version, is used.
  
!  The way to solve these problems is to put ‘__’ at the beginning and end
! of each problematical keyword.  For example, use ‘__asm__’ instead of
! ‘asm’, and ‘__inline__’ instead of ‘inline’.
  
   Other C compilers won't accept these alternative keywords; if you want
  to compile with another compiler, you can define the alternate keywords
*************** this:
*** 48755,48792 ****
       #define __asm__ asm
       #endif
  
!  '-pedantic' and other options cause warnings for many GNU C extensions.
! You can suppress such warnings using the keyword '__extension__'.
  Specifically:
  
!    * Writing '__extension__' before an expression prevents warnings
       about extensions within that expression.
  
!    * In C, writing:
  
            [[__extension__ ...]]
  
!      suppresses warnings about using '[[]]' attributes in C versions
       that predate C23.
  
!  '__extension__' has no effect aside from this.
  
  
  File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
  
! 6.50 Incomplete 'enum' Types
  ============================
  
! You can define an 'enum' tag without specifying its possible values.
  This results in an incomplete type, much like what you get if you write
! 'struct foo' without describing the elements.  A later declaration that
  does specify the possible values completes the type.
  
   You cannot allocate variables or storage using the type while it is
  incomplete.  However, you can work with pointers to that type.
  
   This extension may not be very useful, but it makes the handling of
! 'enum' more consistent with the way 'struct' and 'union' are handled.
  
   This extension is not supported by GNU C++.
  
--- 48765,48802 ----
       #define __asm__ asm
       #endif
  
!  ‘-pedantic’ and other options cause warnings for many GNU C extensions.
! You can suppress such warnings using the keyword ‘__extension__’.
  Specifically:
  
!    • Writing ‘__extension__’ before an expression prevents warnings
       about extensions within that expression.
  
!    • In C, writing:
  
            [[__extension__ ...]]
  
!      suppresses warnings about using ‘[[]]’ attributes in C versions
       that predate C23.
  
!  ‘__extension__’ has no effect aside from this.
  
  
  File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
  
! 6.50 Incomplete ‘enum’ Types
  ============================
  
! You can define an ‘enum’ tag without specifying its possible values.
  This results in an incomplete type, much like what you get if you write
! ‘struct foo’ without describing the elements.  A later declaration that
  does specify the possible values completes the type.
  
   You cannot allocate variables or storage using the type while it is
  incomplete.  However, you can work with pointers to that type.
  
   This extension may not be very useful, but it makes the handling of
! ‘enum’ more consistent with the way ‘struct’ and ‘union’ are handled.
  
   This extension is not supported by GNU C++.
  
*************** File: gcc.info,  Node: Function Names,
*** 48798,48808 ****
  
  GCC provides three magic constants that hold the name of the current
  function as a string.  In C++11 and later modes, all three are treated
! as constant expressions and can be used in 'constexpr' constexts.  The
! first of these constants is '__func__', which is part of the C99
  standard:
  
!  The identifier '__func__' is implicitly declared by the translator as
  if, immediately following the opening brace of each function definition,
  the declaration
  
--- 48808,48818 ----
  
  GCC provides three magic constants that hold the name of the current
  function as a string.  In C++11 and later modes, all three are treated
! as constant expressions and can be used in ‘constexpr’ constexts.  The
! first of these constants is ‘__func__’, which is part of the C99
  standard:
  
!  The identifier ‘__func__’ is implicitly declared by the translator as
  if, immediately following the opening brace of each function definition,
  the declaration
  
*************** the declaration
*** 48810,48824 ****
  
  appeared, where function-name is the name of the lexically-enclosing
  function.  This name is the unadorned name of the function.  As an
! extension, at file (or, in C++, namespace scope), '__func__' evaluates
  to the empty string.
  
!  '__FUNCTION__' is another name for '__func__', provided for backward
  compatibility with old versions of GCC.
  
!  In C, '__PRETTY_FUNCTION__' is yet another name for '__func__', except
  that at file scope (or, in C++, namespace scope), it evaluates to the
! string '"top level"'.  In addition, in C++, '__PRETTY_FUNCTION__'
  contains the signature of the function as well as its bare name.  For
  example, this program:
  
--- 48820,48834 ----
  
  appeared, where function-name is the name of the lexically-enclosing
  function.  This name is the unadorned name of the function.  As an
! extension, at file (or, in C++, namespace scope), ‘__func__’ evaluates
  to the empty string.
  
!  ‘__FUNCTION__’ is another name for ‘__func__’, provided for backward
  compatibility with old versions of GCC.
  
!  In C, ‘__PRETTY_FUNCTION__’ is yet another name for ‘__func__’, except
  that at file scope (or, in C++, namespace scope), it evaluates to the
! string ‘"top level"’.  In addition, in C++, ‘__PRETTY_FUNCTION__’
  contains the signature of the function as well as its bare name.  For
  example, this program:
  
*************** gives this output:
*** 48847,48853 ****
       __PRETTY_FUNCTION__ = void a::sub(int)
  
   These identifiers are variables, not preprocessor macros, and may not
! be used to initialize 'char' arrays or be concatenated with string
  literals.
  
  
--- 48857,48863 ----
       __PRETTY_FUNCTION__ = void a::sub(int)
  
   These identifiers are variables, not preprocessor macros, and may not
! be used to initialize ‘char’ arrays or be concatenated with string
  literals.
  
  
*************** function.
*** 48863,48874 ****
            LEVEL)
       This function returns the return address of the current function,
       or of one of its callers.  The LEVEL argument is number of frames
!      to scan up the call stack.  A value of '0' yields the return
!      address of the current function, a value of '1' yields the return
       address of the caller of the current function, and so forth.  When
       inlining the expected behavior is that the function returns the
       address of the function that is returned to.  To work around this
!      behavior use the 'noinline' function attribute.
  
       The LEVEL argument must be a constant integer.
  
--- 48873,48884 ----
            LEVEL)
       This function returns the return address of the current function,
       or of one of its callers.  The LEVEL argument is number of frames
!      to scan up the call stack.  A value of ‘0’ yields the return
!      address of the current function, a value of ‘1’ yields the return
       address of the caller of the current function, and so forth.  When
       inlining the expected behavior is that the function returns the
       address of the function that is returned to.  To work around this
!      behavior use the ‘noinline’ function attribute.
  
       The LEVEL argument must be a constant integer.
  
*************** function.
*** 48876,48907 ****
       address of any function other than the current one; in such cases,
       or when the top of the stack has been reached, this function
       returns an unspecified value.  In addition,
!      '__builtin_frame_address' may be used to determine if the top of
       the stack has been reached.
  
       Additional post-processing of the returned value may be needed, see
!      '__builtin_extract_return_addr'.
  
       The stored representation of the return address in memory may be
!      different from the address returned by '__builtin_return_address'.
       For example, on AArch64 the stored address may be mangled with
       return address signing whereas the address returned by
!      '__builtin_return_address' is not.
  
       Calling this function with a nonzero argument can have
       unpredictable effects, including crashing the calling program.  As
       a result, calls that are considered unsafe are diagnosed when the
!      '-Wframe-address' option is in effect.  Such calls should only be
       made in debugging situations.
  
!      On targets where code addresses are representable as 'void *',
            void *addr = __builtin_extract_return_addr (__builtin_return_address (0));
       gives the code address where the current function would return.
!      For example, such an address may be used with 'dladdr' or other
       interfaces that work with code addresses.
  
   -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
!      The address as returned by '__builtin_return_address' may have to
       be fed through this function to get the actual encoded address.
       For example, on the 31-bit S/390 platform the highest bit has to be
       masked out, or on SPARC platforms an offset has to be added for the
--- 48886,48917 ----
       address of any function other than the current one; in such cases,
       or when the top of the stack has been reached, this function
       returns an unspecified value.  In addition,
!      ‘__builtin_frame_address’ may be used to determine if the top of
       the stack has been reached.
  
       Additional post-processing of the returned value may be needed, see
!      ‘__builtin_extract_return_addr’.
  
       The stored representation of the return address in memory may be
!      different from the address returned by ‘__builtin_return_address’.
       For example, on AArch64 the stored address may be mangled with
       return address signing whereas the address returned by
!      ‘__builtin_return_address’ is not.
  
       Calling this function with a nonzero argument can have
       unpredictable effects, including crashing the calling program.  As
       a result, calls that are considered unsafe are diagnosed when the
!      ‘-Wframe-address’ option is in effect.  Such calls should only be
       made in debugging situations.
  
!      On targets where code addresses are representable as ‘void *’,
            void *addr = __builtin_extract_return_addr (__builtin_return_address (0));
       gives the code address where the current function would return.
!      For example, such an address may be used with ‘dladdr’ or other
       interfaces that work with code addresses.
  
   -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
!      The address as returned by ‘__builtin_return_address’ may have to
       be fed through this function to get the actual encoded address.
       For example, on the 31-bit S/390 platform the highest bit has to be
       masked out, or on SPARC platforms an offset has to be added for the
*************** function.
*** 48910,48924 ****
       If no fixup is needed, this function simply passes through ADDR.
  
   -- Built-in Function: void * __builtin_frob_return_addr (void *ADDR)
!      This function does the reverse of '__builtin_extract_return_addr'.
  
   -- Built-in Function: void * __builtin_frame_address (unsigned int
            LEVEL)
!      This function is similar to '__builtin_return_address', but it
       returns the address of the function frame rather than the return
!      address of the function.  Calling '__builtin_frame_address' with a
!      value of '0' yields the frame address of the current function, a
!      value of '1' yields the frame address of the caller of the current
       function, and so forth.
  
       The frame is the area on the stack that holds local variables and
--- 48920,48934 ----
       If no fixup is needed, this function simply passes through ADDR.
  
   -- Built-in Function: void * __builtin_frob_return_addr (void *ADDR)
!      This function does the reverse of ‘__builtin_extract_return_addr’.
  
   -- Built-in Function: void * __builtin_frame_address (unsigned int
            LEVEL)
!      This function is similar to ‘__builtin_return_address’, but it
       returns the address of the function frame rather than the return
!      address of the function.  Calling ‘__builtin_frame_address’ with a
!      value of ‘0’ yields the frame address of the current function, a
!      value of ‘1’ yields the frame address of the caller of the current
       function, and so forth.
  
       The frame is the area on the stack that holds local variables and
*************** function.
*** 48927,48950 ****
       exact definition depends upon the processor and the calling
       convention.  If the processor has a dedicated frame pointer
       register, and the function has a frame, then
!      '__builtin_frame_address' returns the value of the frame pointer
       register.
  
       On some machines it may be impossible to determine the frame
       address of any function other than the current one; in such cases,
       or when the top of the stack has been reached, this function
!      returns '0' if the first frame pointer is properly initialized by
       the startup code.
  
       Calling this function with a nonzero argument can have
       unpredictable effects, including crashing the calling program.  As
       a result, calls that are considered unsafe are diagnosed when the
!      '-Wframe-address' option is in effect.  Such calls should only be
       made in debugging situations.
  
   -- Built-in Function: void * __builtin_stack_address ()
       This function returns the stack pointer register, offset by
!      'STACK_ADDRESS_OFFSET' if that's defined.
  
       Conceptually, the returned address returned by this built-in
       function is the boundary between the stack area allocated for use
--- 48937,48960 ----
       exact definition depends upon the processor and the calling
       convention.  If the processor has a dedicated frame pointer
       register, and the function has a frame, then
!      ‘__builtin_frame_address’ returns the value of the frame pointer
       register.
  
       On some machines it may be impossible to determine the frame
       address of any function other than the current one; in such cases,
       or when the top of the stack has been reached, this function
!      returns ‘0’ if the first frame pointer is properly initialized by
       the startup code.
  
       Calling this function with a nonzero argument can have
       unpredictable effects, including crashing the calling program.  As
       a result, calls that are considered unsafe are diagnosed when the
!      ‘-Wframe-address’ option is in effect.  Such calls should only be
       made in debugging situations.
  
   -- Built-in Function: void * __builtin_stack_address ()
       This function returns the stack pointer register, offset by
!      ‘STACK_ADDRESS_OFFSET’ if that's defined.
  
       Conceptually, the returned address returned by this built-in
       function is the boundary between the stack area allocated for use
*************** File: gcc.info,  Node: Stack Scrubbing,
*** 48973,48988 ****
  6.53 Stack scrubbing internal interfaces
  ========================================
  
! Stack scrubbing involves cooperation between a 'strub' context, i.e., a
  function whose stack frame is to be zeroed-out, and its callers.  The
! caller initializes a stack watermark, the 'strub' context updates the
  watermark according to its stack use, and the caller zeroes it out once
  it regains control, whether by the callee's returning or by an
  exception.
  
   Each of these steps is performed by a different builtin function call.
  Calls to these builtins are introduced automatically, in response to
! 'strub' attributes and command-line options; they are not expected to be
  explicitly called by source code.
  
   The functions that implement the builtins are available in libgcc but,
--- 48983,48998 ----
  6.53 Stack scrubbing internal interfaces
  ========================================
  
! Stack scrubbing involves cooperation between a ‘strub’ context, i.e., a
  function whose stack frame is to be zeroed-out, and its callers.  The
! caller initializes a stack watermark, the ‘strub’ context updates the
  watermark according to its stack use, and the caller zeroes it out once
  it regains control, whether by the callee's returning or by an
  exception.
  
   Each of these steps is performed by a different builtin function call.
  Calls to these builtins are introduced automatically, in response to
! ‘strub’ attributes and command-line options; they are not expected to be
  explicitly called by source code.
  
   The functions that implement the builtins are available in libgcc but,
*************** for code size.
*** 48995,49014 ****
   -- Built-in Function: void __builtin___strub_enter (void **WMPTR)
       This function initializes a stack WATERMARK variable with the
       current top of the stack.  A call to this builtin function is
!      introduced before entering a 'strub' context.  It remains as a
       function call if optimization is not enabled.
  
   -- Built-in Function: void __builtin___strub_update (void **WMPTR)
       This function updates a stack WATERMARK variable with the current
       top of the stack, if it tops the previous watermark.  A call to
!      this builtin function is inserted within 'strub' contexts, whenever
       additional stack space may have been used.  It remains as a
       function call at optimization levels lower than 2.
  
   -- Built-in Function: void __builtin___strub_leave (void **WMPTR)
       This function overwrites the memory area between the current top of
       the stack, and the WATERMARKed address.  A call to this builtin
!      function is inserted after leaving a 'strub' context.  It remains
       as a function call at optimization levels lower than 3, and it is
       guarded by a condition at level 2.
  
--- 49005,49024 ----
   -- Built-in Function: void __builtin___strub_enter (void **WMPTR)
       This function initializes a stack WATERMARK variable with the
       current top of the stack.  A call to this builtin function is
!      introduced before entering a ‘strub’ context.  It remains as a
       function call if optimization is not enabled.
  
   -- Built-in Function: void __builtin___strub_update (void **WMPTR)
       This function updates a stack WATERMARK variable with the current
       top of the stack, if it tops the previous watermark.  A call to
!      this builtin function is inserted within ‘strub’ contexts, whenever
       additional stack space may have been used.  It remains as a
       function call at optimization levels lower than 2.
  
   -- Built-in Function: void __builtin___strub_leave (void **WMPTR)
       This function overwrites the memory area between the current top of
       the stack, and the WATERMARKed address.  A call to this builtin
!      function is inserted after leaving a ‘strub’ context.  It remains
       as a function call at optimization levels lower than 3, and it is
       guarded by a condition at level 2.
  
*************** same time.  For example, on the x86 the
*** 49024,49062 ****
  can be used this way.
  
   The first step in using these extensions is to provide the necessary
! data types.  This should be done using an appropriate 'typedef':
  
       typedef int v4si __attribute__ ((vector_size (16)));
  
! The 'int' type specifies the "base type" (which can be a 'typedef'),
  while the attribute specifies the vector size for the variable, measured
  in bytes.  For example, the declaration above causes the compiler to set
! the mode for the 'v4si' type to be 16 bytes wide and divided into 'int'
! sized units.  For a 32-bit 'int' this means a vector of 4 units of 4
! bytes, and the corresponding mode of 'foo' is V4SI.
  
!  The 'vector_size' attribute is only applicable to integral and floating
  scalars, although arrays, pointers, and function return values are
  allowed in conjunction with this construct.  Only sizes that are
  positive power-of-two multiples of the base type size are currently
  allowed.
  
   All the basic integer types can be used as base types, both as signed
! and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
! addition, 'float' and 'double' can be used to build floating-point
  vector types.
  
   Specifying a combination that is not valid for the current architecture
  causes GCC to synthesize the instructions using a narrower mode.  For
! example, if you specify a variable of type 'V4SI' and your architecture
  does not allow for this specific SIMD type, GCC produces code that uses
! 4 'SIs'.
  
   The types defined in this manner can be used with a subset of normal C
  operations.  Currently, GCC allows using the following operators on
! these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
  
!  The operations behave like C++ 'valarrays'.  Addition is defined as the
  addition of the corresponding elements of the operands.  For example, in
  the code below, each of the 4 elements in A is added to the
  corresponding 4 elements in B and the resulting vector is stored in C.
--- 49034,49072 ----
  can be used this way.
  
   The first step in using these extensions is to provide the necessary
! data types.  This should be done using an appropriate ‘typedef’:
  
       typedef int v4si __attribute__ ((vector_size (16)));
  
! The ‘int’ type specifies the “base type” (which can be a ‘typedef’),
  while the attribute specifies the vector size for the variable, measured
  in bytes.  For example, the declaration above causes the compiler to set
! the mode for the ‘v4si’ type to be 16 bytes wide and divided into ‘int’
! sized units.  For a 32-bit ‘int’ this means a vector of 4 units of 4
! bytes, and the corresponding mode of ‘foo’ is V4SI.
  
!  The ‘vector_size’ attribute is only applicable to integral and floating
  scalars, although arrays, pointers, and function return values are
  allowed in conjunction with this construct.  Only sizes that are
  positive power-of-two multiples of the base type size are currently
  allowed.
  
   All the basic integer types can be used as base types, both as signed
! and as unsigned: ‘char’, ‘short’, ‘int’, ‘long’, ‘long long’.  In
! addition, ‘float’ and ‘double’ can be used to build floating-point
  vector types.
  
   Specifying a combination that is not valid for the current architecture
  causes GCC to synthesize the instructions using a narrower mode.  For
! example, if you specify a variable of type ‘V4SI’ and your architecture
  does not allow for this specific SIMD type, GCC produces code that uses
! 4 ‘SIs’.
  
   The types defined in this manner can be used with a subset of normal C
  operations.  Currently, GCC allows using the following operators on
! these types: ‘+, -, *, /, unary minus, ^, |, &, ~, %’.
  
!  The operations behave like C++ ‘valarrays’.  Addition is defined as the
  addition of the corresponding elements of the operands.  For example, in
  the code below, each of the 4 elements in A is added to the
  corresponding 4 elements in B and the resulting vector is stored in C.
*************** minus or complement operators on a vecto
*** 49073,49084 ****
  elements are the negative or complemented values of the corresponding
  elements in the operand.
  
!  It is possible to use shifting operators '<<', '>>' on integer-type
! vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
! {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Unlike
! OpenCL, values of 'b' are not implicitly taken modulo bit width of the
! base type 'B', and the behavior is undefined if any 'bi' is greater than
! or equal to 'B'.
  
   In contrast to scalar operations in C and C++, operands of integer
  vector operations do not undergo integer promotions.
--- 49083,49094 ----
  elements are the negative or complemented values of the corresponding
  elements in the operand.
  
!  It is possible to use shifting operators ‘<<’, ‘>>’ on integer-type
! vectors.  The operation is defined as following: ‘{a0, a1, ..., an} >>
! {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}’.  Unlike
! OpenCL, values of ‘b’ are not implicitly taken modulo bit width of the
! base type ‘B’, and the behavior is undefined if any ‘bi’ is greater than
! or equal to ‘B’.
  
   In contrast to scalar operations in C and C++, operands of integer
  vector operations do not undergo integer promotions.
*************** code.
*** 49106,49115 ****
   Vectors can be subscripted as if the vector were an array with the same
  number of elements and base type.  Out of bound accesses invoke
  undefined behavior at run time.  Warnings for out of bound accesses for
! vector subscription can be enabled with '-Warray-bounds'.
  
!  Vector comparison is supported with standard comparison operators: '==,
! !=, <, <=, >, >='.  Comparison operands can be vector expressions of
  integer-type or real-type.  Comparison between integer-type vectors and
  real-type vectors are not supported.  The result of the comparison is a
  vector of the same width and number of elements as the comparison
--- 49116,49125 ----
   Vectors can be subscripted as if the vector were an array with the same
  number of elements and base type.  Out of bound accesses invoke
  undefined behavior at run time.  Warnings for out of bound accesses for
! vector subscription can be enabled with ‘-Warray-bounds’.
  
!  Vector comparison is supported with standard comparison operators: ‘==,
! !=, <, <=, >, >=’.  Comparison operands can be vector expressions of
  integer-type or real-type.  Comparison between integer-type vectors and
  real-type vectors are not supported.  The result of the comparison is a
  vector of the same width and number of elements as the comparison
*************** otherwise.  Consider the following examp
*** 49128,49154 ****
       c = a >  b;     /* The result would be {0, 0,-1, 0}  */
       c = a == b;     /* The result would be {0,-1, 0,-1}  */
  
!  In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
! 'c' are vectors of the same type and 'a' is an integer vector with the
! same number of elements of the same size as 'b' and 'c', computes all
! three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
! ...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
! and not 'a < 0'.  As in the case of binary operations, this syntax is
! also accepted when one of 'b' or 'c' is a scalar that is then
! transformed into a vector.  If both 'b' and 'c' are scalars and the type
! of 'true?b:c' has the same size as the element type of 'a', then 'b' and
! 'c' are converted to a vector type whose elements have this type and
! with the same number of elements as 'a'.
  
!  In C++, the logic operators '!, &&, ||' are available for vectors.
! '!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
! and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
! between a scalar 's' and a vector 'v', 's && v' is equivalent to
! 's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
! to 'v!=0 & (s?-1:0)'.
  
!  Vector shuffling is available using functions '__builtin_shuffle (vec,
! mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
  construct a permutation of elements from one or two vectors and return a
  vector of the same type as the input vector(s).  The MASK is an integral
  vector with the same width (W) and element count (N) as the output
--- 49138,49164 ----
       c = a >  b;     /* The result would be {0, 0,-1, 0}  */
       c = a == b;     /* The result would be {0,-1, 0,-1}  */
  
!  In C++, the ternary operator ‘?:’ is available.  ‘a?b:c’, where ‘b’ and
! ‘c’ are vectors of the same type and ‘a’ is an integer vector with the
! same number of elements of the same size as ‘b’ and ‘c’, computes all
! three arguments and creates a vector ‘{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
! ...}’.  Note that unlike in OpenCL, ‘a’ is thus interpreted as ‘a != 0’
! and not ‘a < 0’.  As in the case of binary operations, this syntax is
! also accepted when one of ‘b’ or ‘c’ is a scalar that is then
! transformed into a vector.  If both ‘b’ and ‘c’ are scalars and the type
! of ‘true?b:c’ has the same size as the element type of ‘a’, then ‘b’ and
! ‘c’ are converted to a vector type whose elements have this type and
! with the same number of elements as ‘a’.
  
!  In C++, the logic operators ‘!, &&, ||’ are available for vectors.
! ‘!v’ is equivalent to ‘v == 0’, ‘a && b’ is equivalent to ‘a!=0 & b!=0’
! and ‘a || b’ is equivalent to ‘a!=0 | b!=0’.  For mixed operations
! between a scalar ‘s’ and a vector ‘v’, ‘s && v’ is equivalent to
! ‘s?v!=0:0’ (the evaluation is short-circuit) and ‘v && s’ is equivalent
! to ‘v!=0 & (s?-1:0)’.
  
!  Vector shuffling is available using functions ‘__builtin_shuffle (vec,
! mask)’ and ‘__builtin_shuffle (vec0, vec1, mask)’.  Both functions
  construct a permutation of elements from one or two vectors and return a
  vector of the same type as the input vector(s).  The MASK is an integral
  vector with the same width (W) and element count (N) as the output
*************** two-operand case.
*** 49172,49179 ****
       res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
       res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
  
!  Note that '__builtin_shuffle' is intentionally semantically compatible
! with the OpenCL 'shuffle' and 'shuffle2' functions.
  
   You can declare variables and use them in function calls and returns,
  as well as in assignments and some casts.  You can specify a vector type
--- 49182,49189 ----
       res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
       res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
  
!  Note that ‘__builtin_shuffle’ is intentionally semantically compatible
! with the OpenCL ‘shuffle’ and ‘shuffle2’ functions.
  
   You can declare variables and use them in function calls and returns,
  as well as in assignments and some casts.  You can specify a vector type
*************** vectors to and from other datatypes of t
*** 49185,49194 ****
   You cannot operate between vectors of different lengths or different
  signedness without a cast.
  
!  Vector shuffling is available using the '__builtin_shufflevector (vec1,
! vec2, index...)' function.  VEC1 and VEC2 must be expressions with
  vector type with a compatible element type.  The result of
! '__builtin_shufflevector' is a vector with the same element type as VEC1
  and VEC2 but that has an element count equal to the number of indices
  specified.
  
--- 49195,49204 ----
   You cannot operate between vectors of different lengths or different
  signedness without a cast.
  
!  Vector shuffling is available using the ‘__builtin_shufflevector (vec1,
! vec2, index...)’ function.  VEC1 and VEC2 must be expressions with
  vector type with a compatible element type.  The result of
! ‘__builtin_shufflevector’ is a vector with the same element type as VEC1
  and VEC2 but that has an element count equal to the number of indices
  specified.
  
*************** optimized the generated code sequence pe
*** 49209,49216 ****
       v4si c = {-2,-4,-6,-8};
       v8si d = __builtin_shufflevector (c, b, 4, 0, 5, 1, 6, 2, 7, 3); /* d is a */
  
!  Vector conversion is available using the '__builtin_convertvector (vec,
! vectype)' function.  VEC must be an expression with integral or floating
  vector type and VECTYPE an integral or floating vector type with the
  same number of elements.  The result has VECTYPE type and value of a C
  cast of every element of VEC to the element type of VECTYPE.
--- 49219,49226 ----
       v4si c = {-2,-4,-6,-8};
       v8si d = __builtin_shufflevector (c, b, 4, 0, 5, 1, 6, 2, 7, 3); /* d is a */
  
!  Vector conversion is available using the ‘__builtin_convertvector (vec,
! vectype)’ function.  VEC must be an expression with integral or floating
  vector type and VECTYPE an integral or floating vector type with the
  same number of elements.  The result has VECTYPE type and value of a C
  cast of every element of VEC to the element type of VECTYPE.
*************** cast of every element of VEC to the elem
*** 49236,49244 ****
  operations (for clarity) and machine-specific vector intrinsics (to
  access vector instructions that are not exposed via generic built-ins).
  On x86, intrinsic functions for integer vectors typically use the same
! vector type '__m128i' irrespective of how they interpret the vector,
  making it necessary to cast their arguments and return values from/to
! other vector types.  In C, you can make use of a 'union' type:
       #include <immintrin.h>
  
       typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
--- 49246,49254 ----
  operations (for clarity) and machine-specific vector intrinsics (to
  access vector instructions that are not exposed via generic built-ins).
  On x86, intrinsic functions for integer vectors typically use the same
! vector type ‘__m128i’ irrespective of how they interpret the vector,
  making it necessary to cast their arguments and return values from/to
! other vector types.  In C, you can make use of a ‘union’ type:
       #include <immintrin.h>
  
       typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
*************** intrinsics:
*** 49267,49277 ****
  
  File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
  
! 6.55 Support for 'offsetof'
  ===========================
  
  GCC implements for both C and C++ a syntactic extension to implement the
! 'offsetof' macro.
  
       primary:
               "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
--- 49277,49287 ----
  
  File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
  
! 6.55 Support for ‘offsetof’
  ===========================
  
  GCC implements for both C and C++ a syntactic extension to implement the
! ‘offsetof’ macro.
  
       primary:
               "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
*************** GCC implements for both C and C++ a synt
*** 49285,49326 ****
  
       #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
  
! is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
  dependent.  In either case, MEMBER may consist of a single identifier,
  or a sequence of member accesses and array references.
  
  
  File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
  
! 6.56 Legacy '__sync' Built-in Functions for Atomic Memory Access
  ================================================================
  
  The following built-in functions are intended to be compatible with
! those described in the 'Intel Itanium Processor-specific Application
! Binary Interface', section 7.4.  As such, they depart from normal GCC
! practice by not using the '__builtin_' prefix and also by being
  overloaded so that they work on multiple types.
  
   The definition given in the Intel documentation allows only for the use
! of the types 'int', 'long', 'long long' or their unsigned counterparts.
  GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
! the C type '_Bool' or the C++ type 'bool'.  Operations on pointer
! arguments are performed as if the operands were of the 'uintptr_t' type.
  That is, they are not scaled by the size of the type to which the
  pointer points.
  
!  These functions are implemented in terms of the '__atomic' builtins
  (*note __atomic Builtins::).  They should not be used for new code which
! should use the '__atomic' builtins instead.
  
   Not all operations are supported by all target processors.  If a
  particular operation cannot be implemented on the target processor, a
  call to an external function is generated.  The external function
  carries the same name as the built-in version, with an additional suffix
! '_N' where N is the size of the data type.
  
!  In most cases, these built-in functions are considered a "full
! barrier".  That is, no memory operand is moved across the operation,
  either forward or backward.  Further, instructions are issued as
  necessary to prevent the processor from speculating loads across the
  operation and from queuing stores after the operation.
--- 49295,49336 ----
  
       #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
  
! is a suitable definition of the ‘offsetof’ macro.  In C++, TYPE may be
  dependent.  In either case, MEMBER may consist of a single identifier,
  or a sequence of member accesses and array references.
  
  
  File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
  
! 6.56 Legacy ‘__sync’ Built-in Functions for Atomic Memory Access
  ================================================================
  
  The following built-in functions are intended to be compatible with
! those described in the ‘Intel Itanium Processor-specific Application
! Binary Interface’, section 7.4.  As such, they depart from normal GCC
! practice by not using the ‘__builtin_’ prefix and also by being
  overloaded so that they work on multiple types.
  
   The definition given in the Intel documentation allows only for the use
! of the types ‘int’, ‘long’, ‘long long’ or their unsigned counterparts.
  GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
! the C type ‘_Bool’ or the C++ type ‘bool’.  Operations on pointer
! arguments are performed as if the operands were of the ‘uintptr_t’ type.
  That is, they are not scaled by the size of the type to which the
  pointer points.
  
!  These functions are implemented in terms of the ‘__atomic’ builtins
  (*note __atomic Builtins::).  They should not be used for new code which
! should use the ‘__atomic’ builtins instead.
  
   Not all operations are supported by all target processors.  If a
  particular operation cannot be implemented on the target processor, a
  call to an external function is generated.  The external function
  carries the same name as the built-in version, with an additional suffix
! ‘_N’ where N is the size of the data type.
  
!  In most cases, these built-in functions are considered a “full
! barrier”.  That is, no memory operand is moved across the operation,
  either forward or backward.  Further, instructions are issued as
  necessary to prevent the processor from speculating loads across the
  operation and from queuing stores after the operation.
*************** variables should be protected.
*** 49349,49355 ****
       name, and returns the value that had previously been in memory.
       That is, operations on integer operands have the following
       semantics.  Operations on pointer arguments are performed as if the
!      operands were of the 'uintptr_t' type.  That is, they are not
       scaled by the size of the type to which the pointer points.
  
            { tmp = *ptr; *ptr OP= value; return tmp; }
--- 49359,49365 ----
       name, and returns the value that had previously been in memory.
       That is, operations on integer operands have the following
       semantics.  Operations on pointer arguments are performed as if the
!      operands were of the ‘uintptr_t’ type.  That is, they are not
       scaled by the size of the type to which the pointer points.
  
            { tmp = *ptr; *ptr OP= value; return tmp; }
*************** variables should be protected.
*** 49358,49365 ****
       The object pointed to by the first argument must be of integer or
       pointer type.  It must not be a boolean type.
  
!      _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
!      '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
  
   -- Built-in Function: TYPE __sync_add_and_fetch (TYPE *PTR, TYPE VALUE,
            ...)
--- 49368,49375 ----
       The object pointed to by the first argument must be of integer or
       pointer type.  It must not be a boolean type.
  
!      _Note:_ GCC 4.4 and later implement ‘__sync_fetch_and_nand’ as
!      ‘*ptr = ~(tmp & value)’ instead of ‘*ptr = ~tmp & value’.
  
   -- Built-in Function: TYPE __sync_add_and_fetch (TYPE *PTR, TYPE VALUE,
            ...)
*************** variables should be protected.
*** 49376,49403 ****
       These built-in functions perform the operation suggested by the
       name, and return the new value.  That is, operations on integer
       operands have the following semantics.  Operations on pointer
!      operands are performed as if the operand's type were 'uintptr_t'.
  
            { *ptr OP= value; return *ptr; }
            { *ptr = ~(*ptr & value); return *ptr; }   // nand
  
       The same constraints on arguments apply as for the corresponding
!      '__sync_op_and_fetch' built-in functions.
  
!      _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
!      '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
  
   -- Built-in Function: bool __sync_bool_compare_and_swap (TYPE *PTR,
            TYPE OLDVAL, TYPE NEWVAL, ...)
   -- Built-in Function: TYPE __sync_val_compare_and_swap (TYPE *PTR, TYPE
            OLDVAL, TYPE NEWVAL, ...)
       These built-in functions perform an atomic compare and swap.  That
!      is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
!      into '*PTR'.
  
!      The "bool" version returns 'true' if the comparison is successful
       and NEWVAL is written.  The "val" version returns the contents of
!      '*PTR' before the operation.
  
   -- Built-in Function: void __sync_synchronize (...)
       This built-in function issues a full memory barrier.
--- 49386,49413 ----
       These built-in functions perform the operation suggested by the
       name, and return the new value.  That is, operations on integer
       operands have the following semantics.  Operations on pointer
!      operands are performed as if the operand's type were ‘uintptr_t’.
  
            { *ptr OP= value; return *ptr; }
            { *ptr = ~(*ptr & value); return *ptr; }   // nand
  
       The same constraints on arguments apply as for the corresponding
!      ‘__sync_op_and_fetch’ built-in functions.
  
!      _Note:_ GCC 4.4 and later implement ‘__sync_nand_and_fetch’ as
!      ‘*ptr = ~(*ptr & value)’ instead of ‘*ptr = ~*ptr & value’.
  
   -- Built-in Function: bool __sync_bool_compare_and_swap (TYPE *PTR,
            TYPE OLDVAL, TYPE NEWVAL, ...)
   -- Built-in Function: TYPE __sync_val_compare_and_swap (TYPE *PTR, TYPE
            OLDVAL, TYPE NEWVAL, ...)
       These built-in functions perform an atomic compare and swap.  That
!      is, if the current value of ‘*PTR’ is OLDVAL, then write NEWVAL
!      into ‘*PTR’.
  
!      The "bool" version returns ‘true’ if the comparison is successful
       and NEWVAL is written.  The "val" version returns the contents of
!      ‘*PTR’ before the operation.
  
   -- Built-in Function: void __sync_synchronize (...)
       This built-in function issues a full memory barrier.
*************** variables should be protected.
*** 49406,49433 ****
            VALUE, ...)
       This built-in function, as described by Intel, is not a traditional
       test-and-set operation, but rather an atomic exchange operation.
!      It writes VALUE into '*PTR', and returns the previous contents of
!      '*PTR'.
  
       Many targets have only minimal support for such locks, and do not
       support a full exchange operation.  In this case, a target may
       support reduced functionality here by which the _only_ valid value
       to store is the immediate constant 1.  The exact value actually
!      stored in '*PTR' is implementation defined.
  
       This built-in function is not a full barrier, but rather an
!      "acquire barrier".  This means that references after the operation
       cannot move to (or be speculated to) before the operation, but
       previous memory stores may not be globally visible yet, and
       previous memory loads may not yet be satisfied.
  
   -- Built-in Function: void __sync_lock_release (TYPE *PTR, ...)
       This built-in function releases the lock acquired by
!      '__sync_lock_test_and_set'.  Normally this means writing the
!      constant 0 to '*PTR'.
  
!      This built-in function is not a full barrier, but rather a "release
!      barrier".  This means that all previous memory stores are globally
       visible, and all previous memory loads have been satisfied, but
       following memory reads are not prevented from being speculated to
       before the barrier.
--- 49416,49443 ----
            VALUE, ...)
       This built-in function, as described by Intel, is not a traditional
       test-and-set operation, but rather an atomic exchange operation.
!      It writes VALUE into ‘*PTR’, and returns the previous contents of
!      ‘*PTR’.
  
       Many targets have only minimal support for such locks, and do not
       support a full exchange operation.  In this case, a target may
       support reduced functionality here by which the _only_ valid value
       to store is the immediate constant 1.  The exact value actually
!      stored in ‘*PTR’ is implementation defined.
  
       This built-in function is not a full barrier, but rather an
!      “acquire barrier”.  This means that references after the operation
       cannot move to (or be speculated to) before the operation, but
       previous memory stores may not be globally visible yet, and
       previous memory loads may not yet be satisfied.
  
   -- Built-in Function: void __sync_lock_release (TYPE *PTR, ...)
       This built-in function releases the lock acquired by
!      ‘__sync_lock_test_and_set’.  Normally this means writing the
!      constant 0 to ‘*PTR’.
  
!      This built-in function is not a full barrier, but rather a “release
!      barrier”.  This means that all previous memory stores are globally
       visible, and all previous memory loads have been satisfied, but
       following memory reads are not prevented from being speculated to
       before the barrier.
*************** File: gcc.info,  Node: __atomic Builtins
*** 49440,49460 ****
  
  The following built-in functions approximately match the requirements
  for the C++11 memory model.  They are all identified by being prefixed
! with '__atomic' and most are overloaded so that they work with multiple
  types.
  
!  These functions are intended to replace the legacy '__sync' builtins.
  The main difference is that the memory order that is requested is a
! parameter to the functions.  New code should always use the '__atomic'
! builtins rather than the '__sync' builtins.
  
!  Note that the '__atomic' builtins assume that programs will conform to
  the C++11 memory model.  In particular, they assume that programs are
  free of data races.  See the C++11 standard for detailed requirements.
  
!  The '__atomic' builtins can be used with any integral scalar or pointer
  type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
! also allowed if '__int128' (*note __int128::) is supported by the
  architecture.
  
   The four non-arithmetic functions (load, store, exchange, and
--- 49450,49470 ----
  
  The following built-in functions approximately match the requirements
  for the C++11 memory model.  They are all identified by being prefixed
! with ‘__atomic’ and most are overloaded so that they work with multiple
  types.
  
!  These functions are intended to replace the legacy ‘__sync’ builtins.
  The main difference is that the memory order that is requested is a
! parameter to the functions.  New code should always use the ‘__atomic’
! builtins rather than the ‘__sync’ builtins.
  
!  Note that the ‘__atomic’ builtins assume that programs will conform to
  the C++11 memory model.  In particular, they assume that programs are
  free of data races.  See the C++11 standard for detailed requirements.
  
!  The ‘__atomic’ builtins can be used with any integral scalar or pointer
  type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
! also allowed if ‘__int128’ (*note __int128::) is supported by the
  architecture.
  
   The four non-arithmetic functions (load, store, exchange, and
*************** compare_exchange) all have a generic ver
*** 49462,49468 ****
  version works on any data type.  It uses the lock-free built-in function
  if the specific data type size makes that possible; otherwise, an
  external call is left to be resolved at run time.  This external call is
! the same format with the addition of a 'size_t' parameter inserted as
  the first parameter indicating the size of the object being pointed to.
  All objects must be the same size.
  
--- 49472,49478 ----
  version works on any data type.  It uses the lock-free built-in function
  if the specific data type size makes that possible; otherwise, an
  external call is left to be resolved at run time.  This external call is
! the same format with the addition of a ‘size_t’ parameter inserted as
  the first parameter indicating the size of the object being pointed to.
  All objects must be the same size.
  
*************** strength.  The description of each memor
*** 49482,49517 ****
  illustrate the effects and is not a specification; see the C++11 memory
  model for precise semantics.
  
! '__ATOMIC_RELAXED'
       Implies no inter-thread ordering constraints.
! '__ATOMIC_CONSUME'
!      This is currently implemented using the stronger '__ATOMIC_ACQUIRE'
       memory order because of a deficiency in C++11's semantics for
!      'memory_order_consume'.
! '__ATOMIC_ACQUIRE'
       Creates an inter-thread happens-before constraint from the release
       (or stronger) semantic store to this acquire load.  Can prevent
       hoisting of code to before the operation.
! '__ATOMIC_RELEASE'
       Creates an inter-thread happens-before constraint to acquire (or
       stronger) semantic loads that read from this release store.  Can
       prevent sinking of code to after the operation.
! '__ATOMIC_ACQ_REL'
!      Combines the effects of both '__ATOMIC_ACQUIRE' and
!      '__ATOMIC_RELEASE'.
! '__ATOMIC_SEQ_CST'
!      Enforces total ordering with all other '__ATOMIC_SEQ_CST'
       operations.
  
   Note that in the C++11 memory model, _fences_ (e.g.,
! '__atomic_thread_fence') take effect in combination with other atomic
  operations on specific memory locations (e.g., atomic loads); operations
  on specific memory locations do not necessarily affect other operations
  in the same way.
  
   Target architectures are encouraged to provide their own patterns for
  each of the atomic built-in functions.  If no target is provided, the
! original non-memory model set of '__sync' atomic built-in functions are
  used, along with any required synchronization fences surrounding it in
  order to achieve the proper behavior.  Execution in this case is subject
  to the same restrictions as those built-in functions.
--- 49492,49527 ----
  illustrate the effects and is not a specification; see the C++11 memory
  model for precise semantics.
  
! ‘__ATOMIC_RELAXED’
       Implies no inter-thread ordering constraints.
! ‘__ATOMIC_CONSUME’
!      This is currently implemented using the stronger ‘__ATOMIC_ACQUIRE’
       memory order because of a deficiency in C++11's semantics for
!      ‘memory_order_consume’.
! ‘__ATOMIC_ACQUIRE’
       Creates an inter-thread happens-before constraint from the release
       (or stronger) semantic store to this acquire load.  Can prevent
       hoisting of code to before the operation.
! ‘__ATOMIC_RELEASE’
       Creates an inter-thread happens-before constraint to acquire (or
       stronger) semantic loads that read from this release store.  Can
       prevent sinking of code to after the operation.
! ‘__ATOMIC_ACQ_REL’
!      Combines the effects of both ‘__ATOMIC_ACQUIRE’ and
!      ‘__ATOMIC_RELEASE’.
! ‘__ATOMIC_SEQ_CST’
!      Enforces total ordering with all other ‘__ATOMIC_SEQ_CST’
       operations.
  
   Note that in the C++11 memory model, _fences_ (e.g.,
! ‘__atomic_thread_fence’) take effect in combination with other atomic
  operations on specific memory locations (e.g., atomic loads); operations
  on specific memory locations do not necessarily affect other operations
  in the same way.
  
   Target architectures are encouraged to provide their own patterns for
  each of the atomic built-in functions.  If no target is provided, the
! original non-memory model set of ‘__sync’ atomic built-in functions are
  used, along with any required synchronization fences surrounding it in
  order to achieve the proper behavior.  Execution in this case is subject
  to the same restrictions as those built-in functions.
*************** to be resolved at run time.
*** 49522,49535 ****
  
   When implementing patterns for these built-in functions, the memory
  order parameter can be ignored as long as the pattern implements the
! most restrictive '__ATOMIC_SEQ_CST' memory order.  Any of the other
  memory orders execute correctly with this memory order but they may not
  execute as efficiently as they could with a more appropriate
  implementation of the relaxed requirements.
  
   Note that the C++11 standard allows for the memory order parameter to
  be determined at run time rather than at compile time.  These built-in
! functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
  invoke a runtime library call or inline a switch statement.  This is
  standard compliant, safe, and the simplest approach for now.
  
--- 49532,49545 ----
  
   When implementing patterns for these built-in functions, the memory
  order parameter can be ignored as long as the pattern implements the
! most restrictive ‘__ATOMIC_SEQ_CST’ memory order.  Any of the other
  memory orders execute correctly with this memory order but they may not
  execute as efficiently as they could with a more appropriate
  implementation of the relaxed requirements.
  
   Note that the C++11 standard allows for the memory order parameter to
  be determined at run time rather than at compile time.  These built-in
! functions map any run-time value to ‘__ATOMIC_SEQ_CST’ rather than
  invoke a runtime library call or inline a switch statement.  This is
  standard compliant, safe, and the simplest approach for now.
  
*************** values ensures proper usage.
*** 49540,49612 ****
  
   -- Built-in Function: TYPE __atomic_load_n (TYPE *PTR, int MEMORDER)
       This built-in function implements an atomic load operation.  It
!      returns the contents of '*PTR'.
  
!      The valid memory order variants are '__ATOMIC_RELAXED',
!      '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
  
   -- Built-in Function: void __atomic_load (TYPE *PTR, TYPE *RET, int
            MEMORDER)
       This is the generic version of an atomic load.  It returns the
!      contents of '*PTR' in '*RET'.
  
   -- Built-in Function: void __atomic_store_n (TYPE *PTR, TYPE VAL, int
            MEMORDER)
       This built-in function implements an atomic store operation.  It
!      writes 'VAL' into '*PTR'.
  
!      The valid memory order variants are '__ATOMIC_RELAXED',
!      '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
  
   -- Built-in Function: void __atomic_store (TYPE *PTR, TYPE *VAL, int
            MEMORDER)
       This is the generic version of an atomic store.  It stores the
!      value of '*VAL' into '*PTR'.
  
   -- Built-in Function: TYPE __atomic_exchange_n (TYPE *PTR, TYPE VAL,
            int MEMORDER)
       This built-in function implements an atomic exchange operation.  It
!      writes VAL into '*PTR', and returns the previous contents of
!      '*PTR'.
  
       All memory order variants are valid.
  
   -- Built-in Function: void __atomic_exchange (TYPE *PTR, TYPE *VAL,
            TYPE *RET, int MEMORDER)
       This is the generic version of an atomic exchange.  It stores the
!      contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
!      copied into '*RET'.
  
   -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *PTR, TYPE
            *EXPECTED, TYPE DESIRED, bool WEAK, int SUCCESS_MEMORDER, int
            FAILURE_MEMORDER)
       This built-in function implements an atomic compare and exchange
!      operation.  This compares the contents of '*PTR' with the contents
!      of '*EXPECTED'.  If equal, the operation is a _read-modify-write_
!      operation that writes DESIRED into '*PTR'.  If they are not equal,
!      the operation is a _read_ and the current contents of '*PTR' are
!      written into '*EXPECTED'.  WEAK is 'true' for weak
!      compare_exchange, which may fail spuriously, and 'false' for the
       strong variation, which never fails spuriously.  Many targets only
       offer the strong variation and ignore the parameter.  When in
       doubt, use the strong variation.
  
!      If DESIRED is written into '*PTR' then 'true' is returned and
       memory is affected according to the memory order specified by
       SUCCESS_MEMORDER.  There are no restrictions on what memory order
       can be used here.
  
!      Otherwise, 'false' is returned and memory is affected according to
!      FAILURE_MEMORDER.  This memory order cannot be '__ATOMIC_RELEASE'
!      nor '__ATOMIC_ACQ_REL'.  It also cannot be a stronger order than
       that specified by SUCCESS_MEMORDER.
  
   -- Built-in Function: bool __atomic_compare_exchange (TYPE *PTR, TYPE
            *EXPECTED, TYPE *DESIRED, bool WEAK, int SUCCESS_MEMORDER, int
            FAILURE_MEMORDER)
       This built-in function implements the generic version of
!      '__atomic_compare_exchange'.  The function is virtually identical
!      to '__atomic_compare_exchange_n', except the desired value is also
       a pointer.
  
   -- Built-in Function: TYPE __atomic_add_fetch (TYPE *PTR, TYPE VAL, int
--- 49550,49622 ----
  
   -- Built-in Function: TYPE __atomic_load_n (TYPE *PTR, int MEMORDER)
       This built-in function implements an atomic load operation.  It
!      returns the contents of ‘*PTR’.
  
!      The valid memory order variants are ‘__ATOMIC_RELAXED’,
!      ‘__ATOMIC_SEQ_CST’, ‘__ATOMIC_ACQUIRE’, and ‘__ATOMIC_CONSUME’.
  
   -- Built-in Function: void __atomic_load (TYPE *PTR, TYPE *RET, int
            MEMORDER)
       This is the generic version of an atomic load.  It returns the
!      contents of ‘*PTR’ in ‘*RET’.
  
   -- Built-in Function: void __atomic_store_n (TYPE *PTR, TYPE VAL, int
            MEMORDER)
       This built-in function implements an atomic store operation.  It
!      writes ‘VAL’ into ‘*PTR’.
  
!      The valid memory order variants are ‘__ATOMIC_RELAXED’,
!      ‘__ATOMIC_SEQ_CST’, and ‘__ATOMIC_RELEASE’.
  
   -- Built-in Function: void __atomic_store (TYPE *PTR, TYPE *VAL, int
            MEMORDER)
       This is the generic version of an atomic store.  It stores the
!      value of ‘*VAL’ into ‘*PTR’.
  
   -- Built-in Function: TYPE __atomic_exchange_n (TYPE *PTR, TYPE VAL,
            int MEMORDER)
       This built-in function implements an atomic exchange operation.  It
!      writes VAL into ‘*PTR’, and returns the previous contents of
!      ‘*PTR’.
  
       All memory order variants are valid.
  
   -- Built-in Function: void __atomic_exchange (TYPE *PTR, TYPE *VAL,
            TYPE *RET, int MEMORDER)
       This is the generic version of an atomic exchange.  It stores the
!      contents of ‘*VAL’ into ‘*PTR’.  The original value of ‘*PTR’ is
!      copied into ‘*RET’.
  
   -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *PTR, TYPE
            *EXPECTED, TYPE DESIRED, bool WEAK, int SUCCESS_MEMORDER, int
            FAILURE_MEMORDER)
       This built-in function implements an atomic compare and exchange
!      operation.  This compares the contents of ‘*PTR’ with the contents
!      of ‘*EXPECTED’.  If equal, the operation is a _read-modify-write_
!      operation that writes DESIRED into ‘*PTR’.  If they are not equal,
!      the operation is a _read_ and the current contents of ‘*PTR’ are
!      written into ‘*EXPECTED’.  WEAK is ‘true’ for weak
!      compare_exchange, which may fail spuriously, and ‘false’ for the
       strong variation, which never fails spuriously.  Many targets only
       offer the strong variation and ignore the parameter.  When in
       doubt, use the strong variation.
  
!      If DESIRED is written into ‘*PTR’ then ‘true’ is returned and
       memory is affected according to the memory order specified by
       SUCCESS_MEMORDER.  There are no restrictions on what memory order
       can be used here.
  
!      Otherwise, ‘false’ is returned and memory is affected according to
!      FAILURE_MEMORDER.  This memory order cannot be ‘__ATOMIC_RELEASE’
!      nor ‘__ATOMIC_ACQ_REL’.  It also cannot be a stronger order than
       that specified by SUCCESS_MEMORDER.
  
   -- Built-in Function: bool __atomic_compare_exchange (TYPE *PTR, TYPE
            *EXPECTED, TYPE *DESIRED, bool WEAK, int SUCCESS_MEMORDER, int
            FAILURE_MEMORDER)
       This built-in function implements the generic version of
!      ‘__atomic_compare_exchange’.  The function is virtually identical
!      to ‘__atomic_compare_exchange_n’, except the desired value is also
       a pointer.
  
   -- Built-in Function: TYPE __atomic_add_fetch (TYPE *PTR, TYPE VAL, int
*************** values ensures proper usage.
*** 49624,49630 ****
       These built-in functions perform the operation suggested by the
       name, and return the result of the operation.  Operations on
       pointer arguments are performed as if the operands were of the
!      'uintptr_t' type.  That is, they are not scaled by the size of the
       type to which the pointer points.
  
            { *ptr OP= val; return *ptr; }
--- 49634,49640 ----
       These built-in functions perform the operation suggested by the
       name, and return the result of the operation.  Operations on
       pointer arguments are performed as if the operands were of the
!      ‘uintptr_t’ type.  That is, they are not scaled by the size of the
       type to which the pointer points.
  
            { *ptr OP= val; return *ptr; }
*************** values ensures proper usage.
*** 49647,49672 ****
   -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *PTR, TYPE VAL,
            int MEMORDER)
       These built-in functions perform the operation suggested by the
!      name, and return the value that had previously been in '*PTR'.
       Operations on pointer arguments are performed as if the operands
!      were of the 'uintptr_t' type.  That is, they are not scaled by the
       size of the type to which the pointer points.
  
            { tmp = *ptr; *ptr OP= val; return tmp; }
            { tmp = *ptr; *ptr = ~(*ptr & val); return tmp; } // nand
  
       The same constraints on arguments apply as for the corresponding
!      '__atomic_op_fetch' built-in functions.  All memory orders are
       valid.
  
   -- Built-in Function: bool __atomic_test_and_set (void *PTR, int
            MEMORDER)
  
       This built-in function performs an atomic test-and-set operation on
!      the byte at '*PTR'.  The byte is set to some implementation defined
!      nonzero "set" value and the return value is 'true' if and only if
       the previous contents were "set".  It should be only used for
!      operands of type 'bool' or 'char'.  For other types only part of
       the value may be set.
  
       All memory orders are valid.
--- 49657,49682 ----
   -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *PTR, TYPE VAL,
            int MEMORDER)
       These built-in functions perform the operation suggested by the
!      name, and return the value that had previously been in ‘*PTR’.
       Operations on pointer arguments are performed as if the operands
!      were of the ‘uintptr_t’ type.  That is, they are not scaled by the
       size of the type to which the pointer points.
  
            { tmp = *ptr; *ptr OP= val; return tmp; }
            { tmp = *ptr; *ptr = ~(*ptr & val); return tmp; } // nand
  
       The same constraints on arguments apply as for the corresponding
!      ‘__atomic_op_fetch’ built-in functions.  All memory orders are
       valid.
  
   -- Built-in Function: bool __atomic_test_and_set (void *PTR, int
            MEMORDER)
  
       This built-in function performs an atomic test-and-set operation on
!      the byte at ‘*PTR’.  The byte is set to some implementation defined
!      nonzero "set" value and the return value is ‘true’ if and only if
       the previous contents were "set".  It should be only used for
!      operands of type ‘bool’ or ‘char’.  For other types only part of
       the value may be set.
  
       All memory orders are valid.
*************** values ensures proper usage.
*** 49674,49687 ****
   -- Built-in Function: void __atomic_clear (bool *PTR, int MEMORDER)
  
       This built-in function performs an atomic clear operation on
!      '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
!      used for operands of type 'bool' or 'char' and in conjunction with
!      '__atomic_test_and_set'.  For other types it may only clear
!      partially.  If the type is not 'bool' prefer using
!      '__atomic_store'.
  
!      The valid memory order variants are '__ATOMIC_RELAXED',
!      '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
  
   -- Built-in Function: void __atomic_thread_fence (int MEMORDER)
  
--- 49684,49697 ----
   -- Built-in Function: void __atomic_clear (bool *PTR, int MEMORDER)
  
       This built-in function performs an atomic clear operation on
!      ‘*PTR’.  After the operation, ‘*PTR’ contains 0.  It should be only
!      used for operands of type ‘bool’ or ‘char’ and in conjunction with
!      ‘__atomic_test_and_set’.  For other types it may only clear
!      partially.  If the type is not ‘bool’ prefer using
!      ‘__atomic_store’.
  
!      The valid memory order variants are ‘__ATOMIC_RELAXED’,
!      ‘__ATOMIC_SEQ_CST’, and ‘__ATOMIC_RELEASE’.
  
   -- Built-in Function: void __atomic_thread_fence (int MEMORDER)
  
*************** values ensures proper usage.
*** 49700,49706 ****
   -- Built-in Function: bool __atomic_always_lock_free (size_t SIZE, void
            *PTR)
  
!      This built-in function returns 'true' if objects of SIZE bytes
       always generate lock-free atomic instructions for the target
       architecture.  SIZE must resolve to a compile-time constant and the
       result also resolves to a compile-time constant.
--- 49710,49716 ----
   -- Built-in Function: bool __atomic_always_lock_free (size_t SIZE, void
            *PTR)
  
!      This built-in function returns ‘true’ if objects of SIZE bytes
       always generate lock-free atomic instructions for the target
       architecture.  SIZE must resolve to a compile-time constant and the
       result also resolves to a compile-time constant.
*************** values ensures proper usage.
*** 49714,49724 ****
   -- Built-in Function: bool __atomic_is_lock_free (size_t SIZE, void
            *PTR)
  
!      This built-in function returns 'true' if objects of SIZE bytes
       always generate lock-free atomic instructions for the target
       architecture.  If the built-in function is not known to be
       lock-free, a call is made to a runtime routine named
!      '__atomic_is_lock_free'.
  
       PTR is an optional pointer to the object that may be used to
       determine alignment.  A value of 0 indicates typical alignment
--- 49724,49734 ----
   -- Built-in Function: bool __atomic_is_lock_free (size_t SIZE, void
            *PTR)
  
!      This built-in function returns ‘true’ if objects of SIZE bytes
       always generate lock-free atomic instructions for the target
       architecture.  If the built-in function is not known to be
       lock-free, a call is made to a runtime routine named
!      ‘__atomic_is_lock_free’.
  
       PTR is an optional pointer to the object that may be used to
       determine alignment.  A value of 0 indicates typical alignment
*************** operations together with checking whethe
*** 49754,49760 ****
       promoted operands.  The result is then cast to the type the third
       pointer argument points to and stored there.  If the stored result
       is equal to the infinite precision result, the built-in functions
!      return 'false', otherwise they return 'true'.  As the addition is
       performed in infinite signed precision, these built-in functions
       have fully defined behavior for all argument values.
  
--- 49764,49770 ----
       promoted operands.  The result is then cast to the type the third
       pointer argument points to and stored there.  If the stored result
       is equal to the infinite precision result, the built-in functions
!      return ‘false’, otherwise they return ‘true’.  As the addition is
       performed in infinite signed precision, these built-in functions
       have fully defined behavior for all argument values.
  
*************** operation would overflow.
*** 49817,49824 ****
   -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 A, TYPE2 B,
            TYPE3 C)
  
!      These built-in functions are similar to '__builtin_add_overflow',
!      '__builtin_sub_overflow', or '__builtin_mul_overflow', except that
       they don't store the result of the arithmetic operation anywhere
       and the last argument is not a pointer, but some expression with
       integral type other than enumerated or boolean type.
--- 49827,49834 ----
   -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 A, TYPE2 B,
            TYPE3 C)
  
!      These built-in functions are similar to ‘__builtin_add_overflow’,
!      ‘__builtin_sub_overflow’, or ‘__builtin_mul_overflow’, except that
       they don't store the result of the arithmetic operation anywhere
       and the last argument is not a pointer, but some expression with
       integral type other than enumerated or boolean type.
*************** operation would overflow.
*** 49827,49834 ****
       precision signed type and perform addition on those promoted
       operands.  The result is then cast to the type of the third
       argument.  If the cast result is equal to the infinite precision
!      result, the built-in functions return 'false', otherwise they
!      return 'true'.  The value of the third argument is ignored, just
       the side effects in the third argument are evaluated, and no
       integral argument promotions are performed on the last argument.
       If the third argument is a bit-field, the type used for the result
--- 49837,49844 ----
       precision signed type and perform addition on those promoted
       operands.  The result is then cast to the type of the third
       argument.  If the cast result is equal to the infinite precision
!      result, the built-in functions return ‘false’, otherwise they
!      return ‘true’.  The value of the third argument is ignored, just
       the side effects in the third argument are evaluated, and no
       integral argument promotions are performed on the last argument.
       If the third argument is a bit-field, the type used for the result
*************** operation would overflow.
*** 49838,49844 ****
       For example, the following macro can be used to portably check, at
       compile-time, whether or not adding two constant integers will
       overflow, and perform the addition only when it is known to be safe
!      and not to trigger a '-Woverflow' warning.
  
            #define INT_ADD_OVERFLOW_P(a, b) \
               __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
--- 49848,49854 ----
       For example, the following macro can be used to portably check, at
       compile-time, whether or not adding two constant integers will
       overflow, and perform the addition only when it is known to be safe
!      and not to trigger a ‘-Woverflow’ warning.
  
            #define INT_ADD_OVERFLOW_P(a, b) \
               __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
*************** The x86 architecture supports additional
*** 49911,49925 ****
  critical sections for hardware lock elision.  These must be specified in
  addition to an existing memory order to atomic intrinsics.
  
! '__ATOMIC_HLE_ACQUIRE'
       Start lock elision on a lock variable.  Memory order must be
!      '__ATOMIC_ACQUIRE' or stronger.
! '__ATOMIC_HLE_RELEASE'
       End lock elision on a lock variable.  Memory order must be
!      '__ATOMIC_RELEASE' or stronger.
  
   When a lock acquire fails, it is required for good performance to abort
! the transaction quickly.  This can be done with a '_mm_pause'.
  
       #include <immintrin.h> // For _mm_pause
  
--- 49921,49935 ----
  critical sections for hardware lock elision.  These must be specified in
  addition to an existing memory order to atomic intrinsics.
  
! ‘__ATOMIC_HLE_ACQUIRE’
       Start lock elision on a lock variable.  Memory order must be
!      ‘__ATOMIC_ACQUIRE’ or stronger.
! ‘__ATOMIC_HLE_RELEASE’
       End lock elision on a lock variable.  Memory order must be
!      ‘__ATOMIC_RELEASE’ or stronger.
  
   When a lock acquire fails, it is required for good performance to abort
! the transaction quickly.  This can be done with a ‘_mm_pause’.
  
       #include <immintrin.h> // For _mm_pause
  
*************** the size isn't sufficient.  The built-in
*** 49948,49954 ****
  the best results when used together and when optimization is enabled.
  For example, to detect object sizes across function boundaries or to
  follow pointer assignments through non-trivial control flow they rely on
! various optimization passes enabled with '-O2'.  However, to a limited
  extent, they can be used without optimization as well.
  
   -- Built-in Function: size_t __builtin_object_size (const void * PTR,
--- 49958,49964 ----
  the best results when used together and when optimization is enabled.
  For example, to detect object sizes across function boundaries or to
  follow pointer assignments through non-trivial control flow they rely on
! various optimization passes enabled with ‘-O2’.  However, to a limited
  extent, they can be used without optimization as well.
  
   -- Built-in Function: size_t __builtin_object_size (const void * PTR,
*************** extent, they can be used without optimiz
*** 49957,49973 ****
       from PTR to the end of the object PTR pointer points to (if known
       at compile time).  To determine the sizes of dynamically allocated
       objects the function relies on the allocation functions called to
!      obtain the storage to be declared with the 'alloc_size' attribute
!      (*note Common Function Attributes::).  '__builtin_object_size'
       never evaluates its arguments for side effects.  If there are any
!      side effects in them, it returns '(size_t) -1' for TYPE 0 or 1 and
!      '(size_t) 0' for TYPE 2 or 3.  If there are multiple objects PTR
       can point to and all of them are known at compile time, the
       returned number is the maximum of remaining byte counts in those
       objects if TYPE & 2 is 0 and minimum if nonzero.  If it is not
       possible to determine which objects PTR points to at compile time,
!      '__builtin_object_size' should return '(size_t) -1' for TYPE 0 or 1
!      and '(size_t) 0' for TYPE 2 or 3.
  
       TYPE is an integer constant from 0 to 3.  If the least significant
       bit is clear, objects are whole variables, if it is set, a closest
--- 49967,49983 ----
       from PTR to the end of the object PTR pointer points to (if known
       at compile time).  To determine the sizes of dynamically allocated
       objects the function relies on the allocation functions called to
!      obtain the storage to be declared with the ‘alloc_size’ attribute
!      (*note Common Function Attributes::).  ‘__builtin_object_size’
       never evaluates its arguments for side effects.  If there are any
!      side effects in them, it returns ‘(size_t) -1’ for TYPE 0 or 1 and
!      ‘(size_t) 0’ for TYPE 2 or 3.  If there are multiple objects PTR
       can point to and all of them are known at compile time, the
       returned number is the maximum of remaining byte counts in those
       objects if TYPE & 2 is 0 and minimum if nonzero.  If it is not
       possible to determine which objects PTR points to at compile time,
!      ‘__builtin_object_size’ should return ‘(size_t) -1’ for TYPE 0 or 1
!      and ‘(size_t) 0’ for TYPE 2 or 3.
  
       TYPE is an integer constant from 0 to 3.  If the least significant
       bit is clear, objects are whole variables, if it is set, a closest
*************** extent, they can be used without optimiz
*** 49976,49982 ****
       is computed.
  
            struct V { char buf1[10]; int b; char buf2[10]; } var;
!           char *p = &var.buf1[1], *q = &var.b;
  
            /* Here the object p points to is var.  */
            assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
--- 49986,49993 ----
       is computed.
  
            struct V { char buf1[10]; int b; char buf2[10]; } var;
!           char *p = &var.buf1[1];
!           int *q = &var.b;
  
            /* Here the object p points to is var.  */
            assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
*************** extent, they can be used without optimiz
*** 49990,50021 ****
  
   -- Built-in Function: size_t __builtin_dynamic_object_size (const void
            * PTR, int TYPE)
!      is similar to '__builtin_object_size' in that it returns a number
       of bytes from PTR to the end of the object PTR pointer points to,
       except that the size returned may not be a constant.  This results
       in successful evaluation of object size estimates in a wider range
!      of use cases and can be more precise than '__builtin_object_size',
       but it incurs a performance penalty since it may add a runtime
       overhead on size computation.  Semantics of TYPE as well as return
       values in case it is not possible to determine which objects PTR
       points to at compile time are the same as in the case of
!      '__builtin_object_size'.
  
  6.60.2 Object Size Checking and Source Fortification
  ----------------------------------------------------
  
! Hardening of function calls using the '_FORTIFY_SOURCE' macro is one of
  the key uses of the object size checking built-in functions.  To make
  implementation of these features more convenient and improve
  optimization and diagnostics, there are built-in functions added for
! many common string operation functions, e.g., for 'memcpy'
! '__builtin___memcpy_chk' built-in is provided.  This built-in has an
  additional last argument, which is the number of bytes remaining in the
! object the DEST argument points to or '(size_t) -1' if the size is not
  known.
  
   The built-in functions are optimized into the normal string functions
! like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
  compile time that the destination object will not be overflowed.  If the
  compiler can determine at compile time that the object will always be
  overflowed, it issues a warning.
--- 50001,50032 ----
  
   -- Built-in Function: size_t __builtin_dynamic_object_size (const void
            * PTR, int TYPE)
!      is similar to ‘__builtin_object_size’ in that it returns a number
       of bytes from PTR to the end of the object PTR pointer points to,
       except that the size returned may not be a constant.  This results
       in successful evaluation of object size estimates in a wider range
!      of use cases and can be more precise than ‘__builtin_object_size’,
       but it incurs a performance penalty since it may add a runtime
       overhead on size computation.  Semantics of TYPE as well as return
       values in case it is not possible to determine which objects PTR
       points to at compile time are the same as in the case of
!      ‘__builtin_object_size’.
  
  6.60.2 Object Size Checking and Source Fortification
  ----------------------------------------------------
  
! Hardening of function calls using the ‘_FORTIFY_SOURCE’ macro is one of
  the key uses of the object size checking built-in functions.  To make
  implementation of these features more convenient and improve
  optimization and diagnostics, there are built-in functions added for
! many common string operation functions, e.g., for ‘memcpy’
! ‘__builtin___memcpy_chk’ built-in is provided.  This built-in has an
  additional last argument, which is the number of bytes remaining in the
! object the DEST argument points to or ‘(size_t) -1’ if the size is not
  known.
  
   The built-in functions are optimized into the normal string functions
! like ‘memcpy’ if the last argument is ‘(size_t) -1’ or if it is known at
  compile time that the destination object will not be overflowed.  If the
  compiler can determine at compile time that the object will always be
  overflowed, it issues a warning.
*************** overflowed, it issues a warning.
*** 50044,50052 ****
          will abort the program at run time.  */
       memcpy (&buf[6], "abcde", 5);
  
!  Such built-in functions are provided for 'memcpy', 'mempcpy',
! 'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
! 'strncat'.
  
  6.60.2.1 Formatted Output Function Checking
  ...........................................
--- 50055,50063 ----
          will abort the program at run time.  */
       memcpy (&buf[6], "abcde", 5);
  
!  Such built-in functions are provided for ‘memcpy’, ‘mempcpy’,
! ‘memmove’, ‘memset’, ‘strcpy’, ‘stpcpy’, ‘strncpy’, ‘strcat’ and
! ‘strncat’.
  
  6.60.2.1 Formatted Output Function Checking
  ...........................................
*************** overflowed, it issues a warning.
*** 50060,50082 ****
   -- Built-in Function: int __builtin___vsnprintf_chk (char *S, size_t
            MAXLEN, int FLAG, size_t OS, const char *FMT, va_list AP)
  
!      The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
       functions and can contain implementation specific flags on what
       additional security measures the checking function might take, such
!      as handling '%n' differently.
  
       The OS argument is the object size S points to, like in the other
       built-in functions.  There is a small difference in the behavior
!      though, if OS is '(size_t) -1', the built-in functions are
       optimized into the non-checking functions only if FLAG is 0,
       otherwise the checking function is called with OS argument set to
!      '(size_t) -1'.
  
       In addition to this, there are checking built-in functions
!      '__builtin___printf_chk', '__builtin___vprintf_chk',
!      '__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These
       have just one additional argument, FLAG, right before format string
!      FMT.  If the compiler is able to optimize them to 'fputc' etc.
       functions, it does, otherwise the checking function is called and
       the FLAG argument passed to it.
  
--- 50071,50093 ----
   -- Built-in Function: int __builtin___vsnprintf_chk (char *S, size_t
            MAXLEN, int FLAG, size_t OS, const char *FMT, va_list AP)
  
!      The added FLAG argument is passed unchanged to ‘__sprintf_chk’ etc.
       functions and can contain implementation specific flags on what
       additional security measures the checking function might take, such
!      as handling ‘%n’ differently.
  
       The OS argument is the object size S points to, like in the other
       built-in functions.  There is a small difference in the behavior
!      though, if OS is ‘(size_t) -1’, the built-in functions are
       optimized into the non-checking functions only if FLAG is 0,
       otherwise the checking function is called with OS argument set to
!      ‘(size_t) -1’.
  
       In addition to this, there are checking built-in functions
!      ‘__builtin___printf_chk’, ‘__builtin___vprintf_chk’,
!      ‘__builtin___fprintf_chk’ and ‘__builtin___vfprintf_chk’.  These
       have just one additional argument, FLAG, right before format string
!      FMT.  If the compiler is able to optimize them to ‘fputc’ etc.
       functions, it does, otherwise the checking function is called and
       the FLAG argument passed to it.
  
*************** call results in a compile-time error.
*** 50103,50238 ****
  
   GCC includes built-in versions of many of the functions in the standard
  C library.  These functions come in two forms: one whose names start
! with the '__builtin_' prefix, and the other without.  Both forms have
  the same type (including prototype), the same address (when their
  address is taken), and the same meaning as the C library functions even
! if you specify the '-fno-builtin' option *note C Dialect Options::).
  Many of these functions are only optimized in certain cases; if they are
  not optimized in a particular case, a call to the library function is
  emitted.
  
!  Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
! '-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
! 'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
! 'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
! 'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
! 'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
! 'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
! 'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'roundeven',
! 'roundevenf', 'roundevenl', 'scalbf', 'scalbl', 'scalb', 'signbit',
! 'signbitf', 'signbitl', 'signbitd32', 'signbitd64', 'signbitd128',
! 'significandf', 'significandl', 'significand', 'sincosf', 'sincosl',
! 'sincos', 'stpcpy', 'stpncpy', 'strcasecmp', 'strdup', 'strfmon',
! 'strncasecmp', 'strndup', 'strnlen', 'toascii', 'y0f', 'y0l', 'y0',
! 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be handled as built-in
  functions.  All these functions have corresponding versions prefixed
! with '__builtin_', which may be used even in strict C90 mode.
  
!  The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
! 'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
! 'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
! 'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
! 'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
! 'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
! 'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
! 'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
! 'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
! 'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
! 'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
! 'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
! 'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
! 'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
! 'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
! 'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
! 'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
! 'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
! 'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
! 'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
! 'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
! 'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
! 'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
! 'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
! 'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
! 'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
! handled as built-in functions except in strict ISO C90 mode ('-ansi' or
! '-std=c90').
  
!  There are also built-in versions of the ISO C99 functions 'acosf',
! 'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
! 'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
! 'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
! 'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
! 'modfl', 'modff', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
! 'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
  recognized in any mode since ISO C90 reserves these names for the
  purpose to which ISO C99 puts them.  All these functions have
! corresponding versions prefixed with '__builtin_'.
  
!  There are also built-in functions '__builtin_fabsfN',
! '__builtin_fabsfNx', '__builtin_copysignfN' and '__builtin_copysignfNx',
! corresponding to the TS 18661-3 functions 'fabsfN', 'fabsfNx',
! 'copysignfN' and 'copysignfNx', for supported types '_FloatN' and
! '_FloatNx'.
  
!  There are also GNU extension functions 'clog10', 'clog10f' and
! 'clog10l' which names are reserved by ISO C99 for future use.  All these
! functions have versions prefixed with '__builtin_'.
  
!  The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
! 'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
! 'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
! except in strict ISO C90 mode ('-ansi' or '-std=c90').
  
!  The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
! 'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
! 'fprintf', 'fputs', 'free', 'frexp', 'fscanf', 'isalnum', 'isalpha',
! 'iscntrl', 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct',
! 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp',
! 'log10', 'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset',
! 'modf', 'pow', 'printf', 'putchar', 'puts', 'realloc', 'scanf', 'sinh',
! 'sin', 'snprintf', 'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr',
! 'strcmp', 'strcpy', 'strcspn', 'strlen', 'strncat', 'strncmp',
! 'strncpy', 'strpbrk', 'strrchr', 'strspn', 'strstr', 'tanh', 'tan',
! 'vfprintf', 'vprintf' and 'vsprintf' are all recognized as built-in
! functions unless '-fno-builtin' is specified (or '-fno-builtin-FUNCTION'
  is specified for an individual function).  All of these functions have
! corresponding versions prefixed with '__builtin_'.
  
   GCC provides built-in versions of the ISO C99 floating-point comparison
  macros that avoid raising exceptions for unordered operands.  They have
! the same names as the standard macros ( 'isgreater', 'isgreaterequal',
! 'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
! '__builtin_' prefixed.  We intend for a library implementor to be able
! to simply '#define' each standard macro to its built-in equivalent.  In
! the same fashion, GCC provides 'fpclassify', 'iseqsig', 'isfinite',
! 'isinf_sign', 'isnormal' and 'signbit' built-ins used with '__builtin_'
! prefixed.  The 'isinf' and 'isnan' built-in functions appear both with
! and without the '__builtin_' prefix.  With '-ffinite-math-only' option
! the 'isinf' and 'isnan' built-in functions will always return 0.
  
   GCC provides built-in versions of the ISO C99 floating-point rounding
! and exceptions handling functions 'fegetround', 'feclearexcept' and
! 'feraiseexcept'.  They may not be available for all targets, and because
  they need close interaction with libc internal values, they may not be
  available for all target libcs, but in all cases they will gracefully
  fallback to libc calls.  These built-in functions appear both with and
! without the '__builtin_' prefix.
  
   -- Built-in Function: void * __builtin_alloca (size_t SIZE)
!      The '__builtin_alloca' function must be called at block scope.  The
       function allocates an object SIZE bytes large on the stack of the
       calling function.  The object is aligned on the default stack
       alignment boundary for the target determined by the
!      '__BIGGEST_ALIGNMENT__' macro.  The '__builtin_alloca' function
       returns a pointer to the first byte of the allocated object.  The
       lifetime of the allocated object ends just before the calling
       function returns to its caller.  This is so even when
!      '__builtin_alloca' is called within a nested block.
  
!      For example, the following function allocates eight objects of 'n'
       bytes each on the stack, storing a pointer to each in consecutive
!      elements of the array 'a'.  It then passes the array to function
!      'g' which can safely use the storage pointed to by each of the
       array elements.
  
            void f (unsigned n)
--- 50114,50249 ----
  
   GCC includes built-in versions of many of the functions in the standard
  C library.  These functions come in two forms: one whose names start
! with the ‘__builtin_’ prefix, and the other without.  Both forms have
  the same type (including prototype), the same address (when their
  address is taken), and the same meaning as the C library functions even
! if you specify the ‘-fno-builtin’ option *note C Dialect Options::).
  Many of these functions are only optimized in certain cases; if they are
  not optimized in a particular case, a call to the library function is
  emitted.
  
!  Outside strict ISO C mode (‘-ansi’, ‘-std=c90’, ‘-std=c99’ or
! ‘-std=c11’), the functions ‘_exit’, ‘alloca’, ‘bcmp’, ‘bzero’,
! ‘dcgettext’, ‘dgettext’, ‘dremf’, ‘dreml’, ‘drem’, ‘exp10f’, ‘exp10l’,
! ‘exp10’, ‘ffsll’, ‘ffsl’, ‘ffs’, ‘fprintf_unlocked’, ‘fputs_unlocked’,
! ‘gammaf’, ‘gammal’, ‘gamma’, ‘gammaf_r’, ‘gammal_r’, ‘gamma_r’,
! ‘gettext’, ‘index’, ‘isascii’, ‘j0f’, ‘j0l’, ‘j0’, ‘j1f’, ‘j1l’, ‘j1’,
! ‘jnf’, ‘jnl’, ‘jn’, ‘lgammaf_r’, ‘lgammal_r’, ‘lgamma_r’, ‘mempcpy’,
! ‘pow10f’, ‘pow10l’, ‘pow10’, ‘printf_unlocked’, ‘rindex’, ‘roundeven’,
! ‘roundevenf’, ‘roundevenl’, ‘scalbf’, ‘scalbl’, ‘scalb’, ‘signbit’,
! ‘signbitf’, ‘signbitl’, ‘signbitd32’, ‘signbitd64’, ‘signbitd128’,
! ‘significandf’, ‘significandl’, ‘significand’, ‘sincosf’, ‘sincosl’,
! ‘sincos’, ‘stpcpy’, ‘stpncpy’, ‘strcasecmp’, ‘strdup’, ‘strfmon’,
! ‘strncasecmp’, ‘strndup’, ‘strnlen’, ‘toascii’, ‘y0f’, ‘y0l’, ‘y0’,
! ‘y1f’, ‘y1l’, ‘y1’, ‘ynf’, ‘ynl’ and ‘yn’ may be handled as built-in
  functions.  All these functions have corresponding versions prefixed
! with ‘__builtin_’, which may be used even in strict C90 mode.
  
!  The ISO C99 functions ‘_Exit’, ‘acoshf’, ‘acoshl’, ‘acosh’, ‘asinhf’,
! ‘asinhl’, ‘asinh’, ‘atanhf’, ‘atanhl’, ‘atanh’, ‘cabsf’, ‘cabsl’,
! ‘cabs’, ‘cacosf’, ‘cacoshf’, ‘cacoshl’, ‘cacosh’, ‘cacosl’, ‘cacos’,
! ‘cargf’, ‘cargl’, ‘carg’, ‘casinf’, ‘casinhf’, ‘casinhl’, ‘casinh’,
! ‘casinl’, ‘casin’, ‘catanf’, ‘catanhf’, ‘catanhl’, ‘catanh’, ‘catanl’,
! ‘catan’, ‘cbrtf’, ‘cbrtl’, ‘cbrt’, ‘ccosf’, ‘ccoshf’, ‘ccoshl’, ‘ccosh’,
! ‘ccosl’, ‘ccos’, ‘cexpf’, ‘cexpl’, ‘cexp’, ‘cimagf’, ‘cimagl’, ‘cimag’,
! ‘clogf’, ‘clogl’, ‘clog’, ‘conjf’, ‘conjl’, ‘conj’, ‘copysignf’,
! ‘copysignl’, ‘copysign’, ‘cpowf’, ‘cpowl’, ‘cpow’, ‘cprojf’, ‘cprojl’,
! ‘cproj’, ‘crealf’, ‘creall’, ‘creal’, ‘csinf’, ‘csinhf’, ‘csinhl’,
! ‘csinh’, ‘csinl’, ‘csin’, ‘csqrtf’, ‘csqrtl’, ‘csqrt’, ‘ctanf’,
! ‘ctanhf’, ‘ctanhl’, ‘ctanh’, ‘ctanl’, ‘ctan’, ‘erfcf’, ‘erfcl’, ‘erfc’,
! ‘erff’, ‘erfl’, ‘erf’, ‘exp2f’, ‘exp2l’, ‘exp2’, ‘expm1f’, ‘expm1l’,
! ‘expm1’, ‘fdimf’, ‘fdiml’, ‘fdim’, ‘fmaf’, ‘fmal’, ‘fmaxf’, ‘fmaxl’,
! ‘fmax’, ‘fma’, ‘fminf’, ‘fminl’, ‘fmin’, ‘hypotf’, ‘hypotl’, ‘hypot’,
! ‘ilogbf’, ‘ilogbl’, ‘ilogb’, ‘imaxabs’, ‘isblank’, ‘iswblank’,
! ‘lgammaf’, ‘lgammal’, ‘lgamma’, ‘llabs’, ‘llrintf’, ‘llrintl’, ‘llrint’,
! ‘llroundf’, ‘llroundl’, ‘llround’, ‘log1pf’, ‘log1pl’, ‘log1p’, ‘log2f’,
! ‘log2l’, ‘log2’, ‘logbf’, ‘logbl’, ‘logb’, ‘lrintf’, ‘lrintl’, ‘lrint’,
! ‘lroundf’, ‘lroundl’, ‘lround’, ‘nearbyintf’, ‘nearbyintl’, ‘nearbyint’,
! ‘nextafterf’, ‘nextafterl’, ‘nextafter’, ‘nexttowardf’, ‘nexttowardl’,
! ‘nexttoward’, ‘remainderf’, ‘remainderl’, ‘remainder’, ‘remquof’,
! ‘remquol’, ‘remquo’, ‘rintf’, ‘rintl’, ‘rint’, ‘roundf’, ‘roundl’,
! ‘round’, ‘scalblnf’, ‘scalblnl’, ‘scalbln’, ‘scalbnf’, ‘scalbnl’,
! ‘scalbn’, ‘snprintf’, ‘tgammaf’, ‘tgammal’, ‘tgamma’, ‘truncf’,
! ‘truncl’, ‘trunc’, ‘vfscanf’, ‘vscanf’, ‘vsnprintf’ and ‘vsscanf’ are
! handled as built-in functions except in strict ISO C90 mode (‘-ansi’ or
! ‘-std=c90’).
  
!  There are also built-in versions of the ISO C99 functions ‘acosf’,
! ‘acosl’, ‘asinf’, ‘asinl’, ‘atan2f’, ‘atan2l’, ‘atanf’, ‘atanl’,
! ‘ceilf’, ‘ceill’, ‘cosf’, ‘coshf’, ‘coshl’, ‘cosl’, ‘expf’, ‘expl’,
! ‘fabsf’, ‘fabsl’, ‘floorf’, ‘floorl’, ‘fmodf’, ‘fmodl’, ‘frexpf’,
! ‘frexpl’, ‘ldexpf’, ‘ldexpl’, ‘log10f’, ‘log10l’, ‘logf’, ‘logl’,
! ‘modfl’, ‘modff’, ‘powf’, ‘powl’, ‘sinf’, ‘sinhf’, ‘sinhl’, ‘sinl’,
! ‘sqrtf’, ‘sqrtl’, ‘tanf’, ‘tanhf’, ‘tanhl’ and ‘tanl’ that are
  recognized in any mode since ISO C90 reserves these names for the
  purpose to which ISO C99 puts them.  All these functions have
! corresponding versions prefixed with ‘__builtin_’.
  
!  There are also built-in functions ‘__builtin_fabsfN’,
! ‘__builtin_fabsfNx’, ‘__builtin_copysignfN’ and ‘__builtin_copysignfNx’,
! corresponding to the TS 18661-3 functions ‘fabsfN’, ‘fabsfNx’,
! ‘copysignfN’ and ‘copysignfNx’, for supported types ‘_FloatN’ and
! ‘_FloatNx’.
  
!  There are also GNU extension functions ‘clog10’, ‘clog10f’ and
! ‘clog10l’ which names are reserved by ISO C99 for future use.  All these
! functions have versions prefixed with ‘__builtin_’.
  
!  The ISO C94 functions ‘iswalnum’, ‘iswalpha’, ‘iswcntrl’, ‘iswdigit’,
! ‘iswgraph’, ‘iswlower’, ‘iswprint’, ‘iswpunct’, ‘iswspace’, ‘iswupper’,
! ‘iswxdigit’, ‘towlower’ and ‘towupper’ are handled as built-in functions
! except in strict ISO C90 mode (‘-ansi’ or ‘-std=c90’).
  
!  The ISO C90 functions ‘abort’, ‘abs’, ‘acos’, ‘asin’, ‘atan2’, ‘atan’,
! ‘calloc’, ‘ceil’, ‘cosh’, ‘cos’, ‘exit’, ‘exp’, ‘fabs’, ‘floor’, ‘fmod’,
! ‘fprintf’, ‘fputs’, ‘free’, ‘frexp’, ‘fscanf’, ‘isalnum’, ‘isalpha’,
! ‘iscntrl’, ‘isdigit’, ‘isgraph’, ‘islower’, ‘isprint’, ‘ispunct’,
! ‘isspace’, ‘isupper’, ‘isxdigit’, ‘tolower’, ‘toupper’, ‘labs’, ‘ldexp’,
! ‘log10’, ‘log’, ‘malloc’, ‘memchr’, ‘memcmp’, ‘memcpy’, ‘memset’,
! ‘modf’, ‘pow’, ‘printf’, ‘putchar’, ‘puts’, ‘realloc’, ‘scanf’, ‘sinh’,
! ‘sin’, ‘snprintf’, ‘sprintf’, ‘sqrt’, ‘sscanf’, ‘strcat’, ‘strchr’,
! ‘strcmp’, ‘strcpy’, ‘strcspn’, ‘strlen’, ‘strncat’, ‘strncmp’,
! ‘strncpy’, ‘strpbrk’, ‘strrchr’, ‘strspn’, ‘strstr’, ‘tanh’, ‘tan’,
! ‘vfprintf’, ‘vprintf’ and ‘vsprintf’ are all recognized as built-in
! functions unless ‘-fno-builtin’ is specified (or ‘-fno-builtin-FUNCTION’
  is specified for an individual function).  All of these functions have
! corresponding versions prefixed with ‘__builtin_’.
  
   GCC provides built-in versions of the ISO C99 floating-point comparison
  macros that avoid raising exceptions for unordered operands.  They have
! the same names as the standard macros ( ‘isgreater’, ‘isgreaterequal’,
! ‘isless’, ‘islessequal’, ‘islessgreater’, and ‘isunordered’) , with
! ‘__builtin_’ prefixed.  We intend for a library implementor to be able
! to simply ‘#define’ each standard macro to its built-in equivalent.  In
! the same fashion, GCC provides ‘fpclassify’, ‘iseqsig’, ‘isfinite’,
! ‘isinf_sign’, ‘isnormal’ and ‘signbit’ built-ins used with ‘__builtin_’
! prefixed.  The ‘isinf’ and ‘isnan’ built-in functions appear both with
! and without the ‘__builtin_’ prefix.  With ‘-ffinite-math-only’ option
! the ‘isinf’ and ‘isnan’ built-in functions will always return 0.
  
   GCC provides built-in versions of the ISO C99 floating-point rounding
! and exceptions handling functions ‘fegetround’, ‘feclearexcept’ and
! ‘feraiseexcept’.  They may not be available for all targets, and because
  they need close interaction with libc internal values, they may not be
  available for all target libcs, but in all cases they will gracefully
  fallback to libc calls.  These built-in functions appear both with and
! without the ‘__builtin_’ prefix.
  
   -- Built-in Function: void * __builtin_alloca (size_t SIZE)
!      The ‘__builtin_alloca’ function must be called at block scope.  The
       function allocates an object SIZE bytes large on the stack of the
       calling function.  The object is aligned on the default stack
       alignment boundary for the target determined by the
!      ‘__BIGGEST_ALIGNMENT__’ macro.  The ‘__builtin_alloca’ function
       returns a pointer to the first byte of the allocated object.  The
       lifetime of the allocated object ends just before the calling
       function returns to its caller.  This is so even when
!      ‘__builtin_alloca’ is called within a nested block.
  
!      For example, the following function allocates eight objects of ‘n’
       bytes each on the stack, storing a pointer to each in consecutive
!      elements of the array ‘a’.  It then passes the array to function
!      ‘g’ which can safely use the storage pointed to by each of the
       array elements.
  
            void f (unsigned n)
*************** without the '__builtin_' prefix.
*** 50244,50253 ****
              g (a, n);   // safe
            }
  
!      Since the '__builtin_alloca' function doesn't validate its argument
       it is the responsibility of its caller to make sure the argument
       doesn't cause it to exceed the stack size limit.  The
!      '__builtin_alloca' function is provided to make it possible to
       allocate on the stack arrays of bytes with an upper bound that may
       be computed at run time.  Since C99 Variable Length Arrays offer
       similar functionality under a portable, more convenient, and safer
--- 50255,50264 ----
              g (a, n);   // safe
            }
  
!      Since the ‘__builtin_alloca’ function doesn't validate its argument
       it is the responsibility of its caller to make sure the argument
       doesn't cause it to exceed the stack size limit.  The
!      ‘__builtin_alloca’ function is provided to make it possible to
       allocate on the stack arrays of bytes with an upper bound that may
       be computed at run time.  Since C99 Variable Length Arrays offer
       similar functionality under a portable, more convenient, and safer
*************** without the '__builtin_' prefix.
*** 50257,50270 ****
  
   -- Built-in Function: void * __builtin_alloca_with_align (size_t SIZE,
            size_t ALIGNMENT)
!      The '__builtin_alloca_with_align' function must be called at block
       scope.  The function allocates an object SIZE bytes large on the
       stack of the calling function.  The allocated object is aligned on
       the boundary specified by the argument ALIGNMENT whose unit is
       given in bits (not bytes).  The SIZE argument must be positive and
       not exceed the stack size limit.  The ALIGNMENT argument must be a
       constant integer expression that evaluates to a power of 2 greater
!      than or equal to 'CHAR_BIT' and less than some unspecified maximum.
       Invocations with other values are rejected with an error indicating
       the valid bounds.  The function returns a pointer to the first byte
       of the allocated object.  The lifetime of the allocated object ends
--- 50268,50281 ----
  
   -- Built-in Function: void * __builtin_alloca_with_align (size_t SIZE,
            size_t ALIGNMENT)
!      The ‘__builtin_alloca_with_align’ function must be called at block
       scope.  The function allocates an object SIZE bytes large on the
       stack of the calling function.  The allocated object is aligned on
       the boundary specified by the argument ALIGNMENT whose unit is
       given in bits (not bytes).  The SIZE argument must be positive and
       not exceed the stack size limit.  The ALIGNMENT argument must be a
       constant integer expression that evaluates to a power of 2 greater
!      than or equal to ‘CHAR_BIT’ and less than some unspecified maximum.
       Invocations with other values are rejected with an error indicating
       the valid bounds.  The function returns a pointer to the first byte
       of the allocated object.  The lifetime of the allocated object ends
*************** without the '__builtin_' prefix.
*** 50273,50282 ****
       function returns to its caller, but may be released at the end of
       the block in which the function was called.
  
!      For example, in the following function the call to 'g' is unsafe
!      because when 'overalign' is non-zero, the space allocated by
!      '__builtin_alloca_with_align' may have been released at the end of
!      the 'if' statement in which it was called.
  
            void f (unsigned n, bool overalign)
            {
--- 50284,50293 ----
       function returns to its caller, but may be released at the end of
       the block in which the function was called.
  
!      For example, in the following function the call to ‘g’ is unsafe
!      because when ‘overalign’ is non-zero, the space allocated by
!      ‘__builtin_alloca_with_align’ may have been released at the end of
!      the ‘if’ statement in which it was called.
  
            void f (unsigned n, bool overalign)
            {
*************** without the '__builtin_' prefix.
*** 50289,50298 ****
              g (p, n);   // unsafe
            }
  
!      Since the '__builtin_alloca_with_align' function doesn't validate
       its SIZE argument it is the responsibility of its caller to make
       sure the argument doesn't cause it to exceed the stack size limit.
!      The '__builtin_alloca_with_align' function is provided to make it
       possible to allocate on the stack overaligned arrays of bytes with
       an upper bound that may be computed at run time.  Since C99
       Variable Length Arrays offer the same functionality under a
--- 50300,50309 ----
              g (p, n);   // unsafe
            }
  
!      Since the ‘__builtin_alloca_with_align’ function doesn't validate
       its SIZE argument it is the responsibility of its caller to make
       sure the argument doesn't cause it to exceed the stack size limit.
!      The ‘__builtin_alloca_with_align’ function is provided to make it
       possible to allocate on the stack overaligned arrays of bytes with
       an upper bound that may be computed at run time.  Since C99
       Variable Length Arrays offer the same functionality under a
*************** without the '__builtin_' prefix.
*** 50302,50353 ****
  
   -- Built-in Function: void * __builtin_alloca_with_align_and_max
            (size_t SIZE, size_t ALIGNMENT, size_t MAX_SIZE)
!      Similar to '__builtin_alloca_with_align' but takes an extra
       argument specifying an upper bound for SIZE in case its value
!      cannot be computed at compile time, for use by '-fstack-usage',
!      '-Wstack-usage' and '-Walloca-larger-than'.  MAX_SIZE must be a
       constant integer expression, it has no effect on code generation
       and no attempt is made to check its compatibility with SIZE.
  
   -- Built-in Function: bool __builtin_has_attribute (TYPE-OR-EXPRESSION,
            ATTRIBUTE)
!      The '__builtin_has_attribute' function evaluates to an integer
!      constant expression equal to 'true' if the symbol or type
       referenced by the TYPE-OR-EXPRESSION argument has been declared
       with the ATTRIBUTE referenced by the second argument.  For an
       TYPE-OR-EXPRESSION argument that does not reference a symbol, since
       attributes do not apply to expressions the built-in consider the
       type of the argument.  Neither argument is evaluated.  The
       TYPE-OR-EXPRESSION argument is subject to the same restrictions as
!      the argument to 'typeof' (*note Typeof::).  The ATTRIBUTE argument
       is an attribute name optionally followed by a comma-separated list
       of arguments enclosed in parentheses.  Both forms of attribute
       names--with and without double leading and trailing
       underscores--are recognized.  *Note Attribute Syntax::, for
       details.  When no attribute arguments are specified for an
       attribute that expects one or more arguments the function returns
!      'true' if TYPE-OR-EXPRESSION has been declared with the attribute
       regardless of the attribute argument values.  Arguments provided
       for an attribute that expects some are validated and matched up to
!      the provided number.  The function returns 'true' if all provided
       arguments match.  For example, the first call to the function below
!      evaluates to 'true' because 'x' is declared with the 'aligned'
!      attribute but the second call evaluates to 'false' because 'x' is
!      declared 'aligned (8)' and not 'aligned (4)'.
  
            __attribute__ ((aligned (8))) int x;
            _Static_assert (__builtin_has_attribute (x, aligned), "aligned");
            _Static_assert (!__builtin_has_attribute (x, aligned (4)), "aligned (4)");
  
!      Due to a limitation the '__builtin_has_attribute' function returns
!      'false' for the 'mode' attribute even if the type or variable
       referenced by the TYPE-OR-EXPRESSION argument was declared with
       one.  The function is also not supported with labels, and in C with
       enumerators.
  
!      Note that unlike the '__has_attribute' preprocessor operator which
!      is suitable for use in '#if' preprocessing directives
!      '__builtin_has_attribute' is an intrinsic function that is not
       recognized in such contexts.
  
   -- Built-in Function: TYPE __builtin_speculation_safe_value (TYPE VAL,
--- 50313,50364 ----
  
   -- Built-in Function: void * __builtin_alloca_with_align_and_max
            (size_t SIZE, size_t ALIGNMENT, size_t MAX_SIZE)
!      Similar to ‘__builtin_alloca_with_align’ but takes an extra
       argument specifying an upper bound for SIZE in case its value
!      cannot be computed at compile time, for use by ‘-fstack-usage’,
!      ‘-Wstack-usage’ and ‘-Walloca-larger-than’.  MAX_SIZE must be a
       constant integer expression, it has no effect on code generation
       and no attempt is made to check its compatibility with SIZE.
  
   -- Built-in Function: bool __builtin_has_attribute (TYPE-OR-EXPRESSION,
            ATTRIBUTE)
!      The ‘__builtin_has_attribute’ function evaluates to an integer
!      constant expression equal to ‘true’ if the symbol or type
       referenced by the TYPE-OR-EXPRESSION argument has been declared
       with the ATTRIBUTE referenced by the second argument.  For an
       TYPE-OR-EXPRESSION argument that does not reference a symbol, since
       attributes do not apply to expressions the built-in consider the
       type of the argument.  Neither argument is evaluated.  The
       TYPE-OR-EXPRESSION argument is subject to the same restrictions as
!      the argument to ‘typeof’ (*note Typeof::).  The ATTRIBUTE argument
       is an attribute name optionally followed by a comma-separated list
       of arguments enclosed in parentheses.  Both forms of attribute
       names--with and without double leading and trailing
       underscores--are recognized.  *Note Attribute Syntax::, for
       details.  When no attribute arguments are specified for an
       attribute that expects one or more arguments the function returns
!      ‘true’ if TYPE-OR-EXPRESSION has been declared with the attribute
       regardless of the attribute argument values.  Arguments provided
       for an attribute that expects some are validated and matched up to
!      the provided number.  The function returns ‘true’ if all provided
       arguments match.  For example, the first call to the function below
!      evaluates to ‘true’ because ‘x’ is declared with the ‘aligned’
!      attribute but the second call evaluates to ‘false’ because ‘x’ is
!      declared ‘aligned (8)’ and not ‘aligned (4)’.
  
            __attribute__ ((aligned (8))) int x;
            _Static_assert (__builtin_has_attribute (x, aligned), "aligned");
            _Static_assert (!__builtin_has_attribute (x, aligned (4)), "aligned (4)");
  
!      Due to a limitation the ‘__builtin_has_attribute’ function returns
!      ‘false’ for the ‘mode’ attribute even if the type or variable
       referenced by the TYPE-OR-EXPRESSION argument was declared with
       one.  The function is also not supported with labels, and in C with
       enumerators.
  
!      Note that unlike the ‘__has_attribute’ preprocessor operator which
!      is suitable for use in ‘#if’ preprocessing directives
!      ‘__builtin_has_attribute’ is an intrinsic function that is not
       recognized in such contexts.
  
   -- Built-in Function: TYPE __builtin_speculation_safe_value (TYPE VAL,
*************** without the '__builtin_' prefix.
*** 50360,50370 ****
         1. If the CPU is not speculatively executing the code, then VAL
            is returned.
         2. If the CPU is executing speculatively then either:
!              * The function may cause execution to pause until it is
                 known that the code is no-longer being executed
                 speculatively (in which case VAL can be returned, as
                 above); or
!              * The function may use target-dependent speculation
                 tracking state to cause FAILVAL to be returned when it is
                 known that speculative execution has incorrectly
                 predicted a conditional branch operation.
--- 50371,50381 ----
         1. If the CPU is not speculatively executing the code, then VAL
            is returned.
         2. If the CPU is executing speculatively then either:
!              • The function may cause execution to pause until it is
                 known that the code is no-longer being executed
                 speculatively (in which case VAL can be returned, as
                 above); or
!              • The function may use target-dependent speculation
                 tracking state to cause FAILVAL to be returned when it is
                 known that speculative execution has incorrectly
                 predicted a conditional branch operation.
*************** without the '__builtin_' prefix.
*** 50373,50379 ****
       omitted.
  
       GCC defines the preprocessor macro
!      '__HAVE_BUILTIN_SPECULATION_SAFE_VALUE' for targets that have been
       updated to support this builtin.
  
       The built-in function can be used where a variable appears to be
--- 50384,50390 ----
       omitted.
  
       GCC defines the preprocessor macro
!      ‘__HAVE_BUILTIN_SPECULATION_SAFE_VALUE’ for targets that have been
       updated to support this builtin.
  
       The built-in function can be used where a variable appears to be
*************** without the '__builtin_' prefix.
*** 50389,50397 ****
              return 0;
            }
  
!      If the function is called repeatedly with 'untrusted_index' less
       than the limit of 500, then a branch predictor will learn that the
!      block of code that returns a value stored in 'array' will be
       executed.  If the function is subsequently called with an
       out-of-range value it will still try to execute that block of code
       first until the CPU determines that the prediction was incorrect
--- 50400,50408 ----
              return 0;
            }
  
!      If the function is called repeatedly with ‘untrusted_index’ less
       than the limit of 500, then a branch predictor will learn that the
!      block of code that returns a value stored in ‘array’ will be
       executed.  If the function is subsequently called with an
       out-of-range value it will still try to execute that block of code
       first until the CPU determines that the prediction was incorrect
*************** without the '__builtin_' prefix.
*** 50413,50419 ****
       The built-in function will either cause execution to stall until
       the conditional branch has been fully resolved, or it may permit
       speculative execution to continue, but using 0 instead of
!      'untrusted_value' if that exceeds the limit.
  
       If accessing any memory location is potentially unsafe when
       speculative execution is incorrect, then the code can be rewritten
--- 50424,50430 ----
       The built-in function will either cause execution to stall until
       the conditional branch has been fully resolved, or it may permit
       speculative execution to continue, but using 0 instead of
!      ‘untrusted_value’ if that exceeds the limit.
  
       If accessing any memory location is potentially unsafe when
       speculative execution is incorrect, then the code can be rewritten
*************** without the '__builtin_' prefix.
*** 50427,50437 ****
              return 0;
            }
  
!      which will cause a 'NULL' pointer to be used for the unsafe case.
  
   -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
  
!      You can use the built-in function '__builtin_types_compatible_p' to
       determine whether two types are the same.
  
       This built-in function returns 1 if the unqualified versions of the
--- 50438,50448 ----
              return 0;
            }
  
!      which will cause a ‘NULL’ pointer to be used for the unsafe case.
  
   -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
  
!      You can use the built-in function ‘__builtin_types_compatible_p’ to
       determine whether two types are the same.
  
       This built-in function returns 1 if the unqualified versions of the
*************** without the '__builtin_' prefix.
*** 50439,50459 ****
       compatible, 0 otherwise.  The result of this built-in function can
       be used in integer constant expressions.
  
!      This built-in function ignores top level qualifiers (e.g., 'const',
!      'volatile').  For example, 'int' is equivalent to 'const int'.
  
!      The type 'int[]' and 'int[5]' are compatible.  On the other hand,
!      'int' and 'char *' are not compatible, even if the size of their
       types, on the particular architecture are the same.  Also, the
       amount of pointer indirection is taken into account when
!      determining similarity.  Consequently, 'short *' is not similar to
!      'short **'.  Furthermore, two types that are typedefed are
       considered compatible if their underlying types are compatible.
  
!      An 'enum' type is not considered to be compatible with another
!      'enum' type even if both are compatible with the same integer type;
!      this is what the C standard specifies.  For example, 'enum {foo,
!      bar}' is not similar to 'enum {hot, dog}'.
  
       You typically use this function in code whose execution varies
       depending on the arguments' types.  For example:
--- 50450,50470 ----
       compatible, 0 otherwise.  The result of this built-in function can
       be used in integer constant expressions.
  
!      This built-in function ignores top level qualifiers (e.g., ‘const’,
!      ‘volatile’).  For example, ‘int’ is equivalent to ‘const int’.
  
!      The type ‘int[]’ and ‘int[5]’ are compatible.  On the other hand,
!      ‘int’ and ‘char *’ are not compatible, even if the size of their
       types, on the particular architecture are the same.  Also, the
       amount of pointer indirection is taken into account when
!      determining similarity.  Consequently, ‘short *’ is not similar to
!      ‘short **’.  Furthermore, two types that are typedefed are
       considered compatible if their underlying types are compatible.
  
!      An ‘enum’ type is not considered to be compatible with another
!      ‘enum’ type even if both are compatible with the same integer type;
!      this is what the C standard specifies.  For example, ‘enum {foo,
!      bar}’ is not similar to ‘enum {hot, dog}’.
  
       You typically use this function in code whose execution varies
       depending on the arguments' types.  For example:
*************** without the '__builtin_' prefix.
*** 50488,50504 ****
   -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
            EXP2)
  
!      You can use the built-in function '__builtin_choose_expr' to
       evaluate code depending on the value of a constant expression.
       This built-in function returns EXP1 if CONST_EXP, which is an
       integer constant expression, is nonzero.  Otherwise it returns
       EXP2.
  
!      This built-in function is analogous to the '? :' operator in C,
       except that the expression returned has its type unaltered by
       promotion rules.  Also, the built-in function does not evaluate the
       expression that is not chosen.  For example, if CONST_EXP evaluates
!      to 'true', EXP2 is not evaluated even if it has side effects.
  
       This built-in function can return an lvalue if the chosen argument
       is an lvalue.
--- 50499,50515 ----
   -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
            EXP2)
  
!      You can use the built-in function ‘__builtin_choose_expr’ to
       evaluate code depending on the value of a constant expression.
       This built-in function returns EXP1 if CONST_EXP, which is an
       integer constant expression, is nonzero.  Otherwise it returns
       EXP2.
  
!      This built-in function is analogous to the ‘? :’ operator in C,
       except that the expression returned has its type unaltered by
       promotion rules.  Also, the built-in function does not evaluate the
       expression that is not chosen.  For example, if CONST_EXP evaluates
!      to ‘true’, EXP2 is not evaluated even if it has side effects.
  
       This built-in function can return an lvalue if the chosen argument
       is an lvalue.
*************** without the '__builtin_' prefix.
*** 50527,50559 ****
  
   -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
  
!      The built-in function '__builtin_tgmath', available only for C and
       Objective-C, calls a function determined according to the rules of
!      '<tgmath.h>' macros.  It is intended to be used in implementations
       of that header, so that expansions of macros from that header only
       expand each of their arguments once, to avoid problems when calls
       to such macros are nested inside the arguments of other calls to
       such macros; in addition, it results in better diagnostics for
!      invalid calls to '<tgmath.h>' macros than implementations using
!      other GNU C language features.  For example, the 'pow' type-generic
       macro might be defined as:
  
            #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
                                                cpowf, cpow, cpowl, a, b)
  
!      The arguments to '__builtin_tgmath' are at least two pointers to
       functions, followed by the arguments to the type-generic macro
       (which will be passed as arguments to the selected function).  All
       the pointers to functions must be pointers to prototyped functions,
       none of which may have variable arguments, and all of which must
       have the same number of parameters; the number of parameters of the
!      first function determines how many arguments to '__builtin_tgmath'
       are interpreted as function pointers, and how many as the arguments
       to the called function.
  
       The types of the specified functions must all be different, but
       related to each other in the same way as a set of functions that
!      may be selected between by a macro in '<tgmath.h>'.  This means
       that the functions are parameterized by a floating-point type T,
       different for each such function.  The function return types may
       all be the same type, or they may be T for each function, or they
--- 50538,50570 ----
  
   -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
  
!      The built-in function ‘__builtin_tgmath’, available only for C and
       Objective-C, calls a function determined according to the rules of
!      ‘<tgmath.h>’ macros.  It is intended to be used in implementations
       of that header, so that expansions of macros from that header only
       expand each of their arguments once, to avoid problems when calls
       to such macros are nested inside the arguments of other calls to
       such macros; in addition, it results in better diagnostics for
!      invalid calls to ‘<tgmath.h>’ macros than implementations using
!      other GNU C language features.  For example, the ‘pow’ type-generic
       macro might be defined as:
  
            #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
                                                cpowf, cpow, cpowl, a, b)
  
!      The arguments to ‘__builtin_tgmath’ are at least two pointers to
       functions, followed by the arguments to the type-generic macro
       (which will be passed as arguments to the selected function).  All
       the pointers to functions must be pointers to prototyped functions,
       none of which may have variable arguments, and all of which must
       have the same number of parameters; the number of parameters of the
!      first function determines how many arguments to ‘__builtin_tgmath’
       are interpreted as function pointers, and how many as the arguments
       to the called function.
  
       The types of the specified functions must all be different, but
       related to each other in the same way as a set of functions that
!      may be selected between by a macro in ‘<tgmath.h>’.  This means
       that the functions are parameterized by a floating-point type T,
       different for each such function.  The function return types may
       all be the same type, or they may be T for each function, or they
*************** without the '__builtin_' prefix.
*** 50564,50570 ****
       for at least one parameter position), or may be the real type
       corresponding to T for each function.
  
!      The standard rules for '<tgmath.h>' macros are used to find a
       common type U from the types of the arguments for parameters whose
       types vary between the functions; complex integer types (a GNU
       extension) are treated like the complex type corresponding to the
--- 50575,50581 ----
       for at least one parameter position), or may be the real type
       corresponding to T for each function.
  
!      The standard rules for ‘<tgmath.h>’ macros are used to find a
       common type U from the types of the arguments for parameters whose
       types vary between the functions; complex integer types (a GNU
       extension) are treated like the complex type corresponding to the
*************** without the '__builtin_' prefix.
*** 50580,50586 ****
       error if there is no such function.
  
   -- Built-in Function: int __builtin_constant_p (EXP)
!      You can use the built-in function '__builtin_constant_p' to
       determine if the expression EXP is known to be constant at compile
       time and hence that GCC can perform constant-folding on expressions
       involving that value.  The argument of the function is the
--- 50591,50597 ----
       error if there is no such function.
  
   -- Built-in Function: int __builtin_constant_p (EXP)
!      You can use the built-in function ‘__builtin_constant_p’ to
       determine if the expression EXP is known to be constant at compile
       time and hence that GCC can perform constant-folding on expressions
       involving that value.  The argument of the function is the
*************** without the '__builtin_' prefix.
*** 50608,50616 ****
       never returns 1 when you call the inline function with a string
       constant or compound literal (*note Compound Literals::) and does
       not return 1 when you pass a constant numeric value to the inline
!      function unless you specify the '-O' option.
  
!      You may also use '__builtin_constant_p' in initializers for static
       data.  For instance, you can write
  
            static const int table[] = {
--- 50619,50627 ----
       never returns 1 when you call the inline function with a string
       constant or compound literal (*note Compound Literals::) and does
       not return 1 when you pass a constant numeric value to the inline
!      function unless you specify the ‘-O’ option.
  
!      You may also use ‘__builtin_constant_p’ in initializers for static
       data.  For instance, you can write
  
            static const int table[] = {
*************** without the '__builtin_' prefix.
*** 50620,50652 ****
  
       This is an acceptable initializer even if EXPRESSION is not a
       constant expression, including the case where
!      '__builtin_constant_p' returns 1 because EXPRESSION can be folded
       to a constant but EXPRESSION contains operands that are not
!      otherwise permitted in a static initializer (for example, '0 && foo
!      ()').  GCC must be more conservative about evaluating the built-in
       in this case, because it has no opportunity to perform
       optimization.
  
   -- Built-in Function: bool __builtin_is_constant_evaluated (void)
!      The '__builtin_is_constant_evaluated' function is available only in
       C++.  The built-in is intended to be used by implementations of the
!      'std::is_constant_evaluated' C++ function.  Programs should make
       use of the latter function rather than invoking the built-in
       directly.
  
       The main use case of the built-in is to determine whether a
!      'constexpr' function is being called in a 'constexpr' context.  A
       call to the function evaluates to a core constant expression with
!      the value 'true' if and only if it occurs within the evaluation of
       an expression or conversion that is manifestly constant-evaluated
       as defined in the C++ standard.  Manifestly constant-evaluated
!      contexts include constant-expressions, the conditions of 'constexpr
!      if' statements, constraint-expressions, and initializers of
       variables usable in constant expressions.  For more details refer
       to the latest revision of the C++ standard.
  
   -- Built-in Function: void __builtin_clear_padding (PTR)
!      The built-in function '__builtin_clear_padding' function clears
       padding bits inside of the object representation of object pointed
       by PTR, which has to be a pointer.  The value representation of the
       object is not affected.  The type of the object is assumed to be
--- 50631,50663 ----
  
       This is an acceptable initializer even if EXPRESSION is not a
       constant expression, including the case where
!      ‘__builtin_constant_p’ returns 1 because EXPRESSION can be folded
       to a constant but EXPRESSION contains operands that are not
!      otherwise permitted in a static initializer (for example, ‘0 && foo
!      ()’).  GCC must be more conservative about evaluating the built-in
       in this case, because it has no opportunity to perform
       optimization.
  
   -- Built-in Function: bool __builtin_is_constant_evaluated (void)
!      The ‘__builtin_is_constant_evaluated’ function is available only in
       C++.  The built-in is intended to be used by implementations of the
!      ‘std::is_constant_evaluated’ C++ function.  Programs should make
       use of the latter function rather than invoking the built-in
       directly.
  
       The main use case of the built-in is to determine whether a
!      ‘constexpr’ function is being called in a ‘constexpr’ context.  A
       call to the function evaluates to a core constant expression with
!      the value ‘true’ if and only if it occurs within the evaluation of
       an expression or conversion that is manifestly constant-evaluated
       as defined in the C++ standard.  Manifestly constant-evaluated
!      contexts include constant-expressions, the conditions of ‘constexpr
!      if’ statements, constraint-expressions, and initializers of
       variables usable in constant expressions.  For more details refer
       to the latest revision of the C++ standard.
  
   -- Built-in Function: void __builtin_clear_padding (PTR)
!      The built-in function ‘__builtin_clear_padding’ function clears
       padding bits inside of the object representation of object pointed
       by PTR, which has to be a pointer.  The value representation of the
       object is not affected.  The type of the object is assumed to be
*************** without the '__builtin_' prefix.
*** 50666,50688 ****
       derived class.
  
   -- Built-in Function: TYPE __builtin_bit_cast (TYPE, ARG)
!      The '__builtin_bit_cast' function is available only in C++.  The
       built-in is intended to be used by implementations of the
!      'std::bit_cast' C++ template function.  Programs should make use of
       the latter function rather than invoking the built-in directly.
  
       This built-in function allows reinterpreting the bits of the ARG
       argument as if it had type TYPE.  TYPE and the type of the ARG
       argument need to be trivially copyable types with the same size.
       When manifestly constant-evaluated, it performs extra diagnostics
!      required for 'std::bit_cast' and returns a constant expression if
       ARG is a constant expression.  For more details refer to the latest
       revision of the C++ standard.
  
   -- Built-in Function: long __builtin_expect (long EXP, long C)
!      You may use '__builtin_expect' to provide the compiler with branch
       prediction information.  In general, you should prefer to use
!      actual profile feedback for this ('-fprofile-arcs'), as programmers
       are notoriously bad at predicting how their programs actually
       perform.  However, there are applications in which this data is
       hard to collect.
--- 50677,50699 ----
       derived class.
  
   -- Built-in Function: TYPE __builtin_bit_cast (TYPE, ARG)
!      The ‘__builtin_bit_cast’ function is available only in C++.  The
       built-in is intended to be used by implementations of the
!      ‘std::bit_cast’ C++ template function.  Programs should make use of
       the latter function rather than invoking the built-in directly.
  
       This built-in function allows reinterpreting the bits of the ARG
       argument as if it had type TYPE.  TYPE and the type of the ARG
       argument need to be trivially copyable types with the same size.
       When manifestly constant-evaluated, it performs extra diagnostics
!      required for ‘std::bit_cast’ and returns a constant expression if
       ARG is a constant expression.  For more details refer to the latest
       revision of the C++ standard.
  
   -- Built-in Function: long __builtin_expect (long EXP, long C)
!      You may use ‘__builtin_expect’ to provide the compiler with branch
       prediction information.  In general, you should prefer to use
!      actual profile feedback for this (‘-fprofile-arcs’), as programmers
       are notoriously bad at predicting how their programs actually
       perform.  However, there are applications in which this data is
       hard to collect.
*************** without the '__builtin_' prefix.
*** 50694,50700 ****
            if (__builtin_expect (x, 0))
              foo ();
  
!      indicates that we do not expect to call 'foo', since we expect 'x'
       to be zero.  Since you are limited to integral expressions for EXP,
       you should use constructions such as
  
--- 50705,50711 ----
            if (__builtin_expect (x, 0))
              foo ();
  
!      indicates that we do not expect to call ‘foo’, since we expect ‘x’
       to be zero.  Since you are limited to integral expressions for EXP,
       you should use constructions such as
  
*************** without the '__builtin_' prefix.
*** 50704,50714 ****
       when testing pointer or floating-point values.
  
       For the purposes of branch prediction optimizations, the
!      probability that a '__builtin_expect' expression is 'true' is
!      controlled by GCC's 'builtin-expect-probability' parameter, which
       defaults to 90%.
  
!      You can also use '__builtin_expect_with_probability' to explicitly
       assign a probability value to individual expressions.  If the
       built-in is used in a loop construct, the provided probability will
       influence the expected number of iterations made by loop
--- 50715,50725 ----
       when testing pointer or floating-point values.
  
       For the purposes of branch prediction optimizations, the
!      probability that a ‘__builtin_expect’ expression is ‘true’ is
!      controlled by GCC's ‘builtin-expect-probability’ parameter, which
       defaults to 90%.
  
!      You can also use ‘__builtin_expect_with_probability’ to explicitly
       assign a probability value to individual expressions.  If the
       built-in is used in a loop construct, the provided probability will
       influence the expected number of iterations made by loop
*************** without the '__builtin_' prefix.
*** 50717,50723 ****
   -- Built-in Function: long __builtin_expect_with_probability
       (long EXP, long C, double PROBABILITY)
  
!      This function has the same semantics as '__builtin_expect', but the
       caller provides the expected probability that EXP == C.  The last
       argument, PROBABILITY, is a floating-point value in the range 0.0
       to 1.0, inclusive.  The PROBABILITY argument must be constant
--- 50728,50734 ----
   -- Built-in Function: long __builtin_expect_with_probability
       (long EXP, long C, double PROBABILITY)
  
!      This function has the same semantics as ‘__builtin_expect’, but the
       caller provides the expected probability that EXP == C.  The last
       argument, PROBABILITY, is a floating-point value in the range 0.0
       to 1.0, inclusive.  The PROBABILITY argument must be constant
*************** without the '__builtin_' prefix.
*** 50727,50746 ****
       This function causes the program to exit abnormally.  GCC
       implements this function by using a target-dependent mechanism
       (such as intentionally executing an illegal instruction) or by
!      calling 'abort'.  The mechanism used may vary from release to
       release so you should not rely on any particular implementation.
  
   -- Built-in Function: void __builtin_unreachable (void)
!      If control flow reaches the point of the '__builtin_unreachable',
       the program is undefined.  It is useful in situations where the
       compiler cannot deduce the unreachability of the code.
  
!      One such case is immediately following an 'asm' statement that
       either never terminates, or one that transfers control elsewhere
       and never returns.  In this example, without the
!      '__builtin_unreachable', GCC issues a warning that control reaches
       the end of a non-void function.  It also generates code to return
!      after the 'asm'.
  
            int f (int c, int v)
            {
--- 50738,50757 ----
       This function causes the program to exit abnormally.  GCC
       implements this function by using a target-dependent mechanism
       (such as intentionally executing an illegal instruction) or by
!      calling ‘abort’.  The mechanism used may vary from release to
       release so you should not rely on any particular implementation.
  
   -- Built-in Function: void __builtin_unreachable (void)
!      If control flow reaches the point of the ‘__builtin_unreachable’,
       the program is undefined.  It is useful in situations where the
       compiler cannot deduce the unreachability of the code.
  
!      One such case is immediately following an ‘asm’ statement that
       either never terminates, or one that transfers control elsewhere
       and never returns.  In this example, without the
!      ‘__builtin_unreachable’, GCC issues a warning that control reaches
       the end of a non-void function.  It also generates code to return
!      after the ‘asm’.
  
            int f (int c, int v)
            {
*************** without the '__builtin_' prefix.
*** 50755,50768 ****
                }
            }
  
!      Because the 'asm' statement unconditionally transfers control out
       of the function, control never reaches the end of the function
!      body.  The '__builtin_unreachable' is in fact unreachable and
       communicates this fact to the compiler.
  
!      Another use for '__builtin_unreachable' is following a call a
       function that never returns but that is not declared
!      '__attribute__((noreturn))', as in this example:
  
            void function_that_never_returns (void);
  
--- 50766,50779 ----
                }
            }
  
!      Because the ‘asm’ statement unconditionally transfers control out
       of the function, control never reaches the end of the function
!      body.  The ‘__builtin_unreachable’ is in fact unreachable and
       communicates this fact to the compiler.
  
!      Another use for ‘__builtin_unreachable’ is following a call a
       function that never returns but that is not declared
!      ‘__attribute__((noreturn))’, as in this example:
  
            void function_that_never_returns (void);
  
*************** without the '__builtin_' prefix.
*** 50784,50798 ****
       expression EXPR with expressions consuming the return value of the
       built-in.  The expression EXPR itself can be reordered, and the
       whole expression EXPR can be reordered with operands after the
!      barrier.  The barrier is only relevant when '-fassociative-math' is
       active, since otherwise floating-point is not treated as
       associative.
  
            float x0 = a + b - b;
            float x1 = __builtin_assoc_barrier(a + b) - b;
  
!      means that, with '-fassociative-math', 'x0' can be optimized to 'x0
!      = a' but 'x1' cannot.
  
   -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
            size_t ALIGN, ...)
--- 50795,50809 ----
       expression EXPR with expressions consuming the return value of the
       built-in.  The expression EXPR itself can be reordered, and the
       whole expression EXPR can be reordered with operands after the
!      barrier.  The barrier is only relevant when ‘-fassociative-math’ is
       active, since otherwise floating-point is not treated as
       associative.
  
            float x0 = a + b - b;
            float x1 = __builtin_assoc_barrier(a + b) - b;
  
!      means that, with ‘-fassociative-math’, ‘x0’ can be optimized to ‘x0
!      = a’ but ‘x1’ cannot.
  
   -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
            size_t ALIGN, ...)
*************** without the '__builtin_' prefix.
*** 50804,50826 ****
  
            void *x = __builtin_assume_aligned (arg, 16);
  
!      means that the compiler can assume 'x', set to 'arg', is at least
       16-byte aligned, while:
  
            void *x = __builtin_assume_aligned (arg, 32, 8);
  
!      means that the compiler can assume for 'x', set to 'arg', that
!      '(char *) x - 8' is 32-byte aligned.
  
   -- Built-in Function: int __builtin_LINE ()
!      This function is the equivalent of the preprocessor '__LINE__'
       macro and returns a constant integer expression that evaluates to
       the line number of the invocation of the built-in.  When used as a
       C++ default argument for a function F, it returns the line number
       of the call to F.
  
   -- Built-in Function: const char * __builtin_FUNCTION ()
!      This function is the equivalent of the '__FUNCTION__' symbol and
       returns an address constant pointing to the name of the function
       from which the built-in was invoked, or the empty string if the
       invocation is not at function scope.  When used as a C++ default
--- 50815,50837 ----
  
            void *x = __builtin_assume_aligned (arg, 16);
  
!      means that the compiler can assume ‘x’, set to ‘arg’, is at least
       16-byte aligned, while:
  
            void *x = __builtin_assume_aligned (arg, 32, 8);
  
!      means that the compiler can assume for ‘x’, set to ‘arg’, that
!      ‘(char *) x - 8’ is 32-byte aligned.
  
   -- Built-in Function: int __builtin_LINE ()
!      This function is the equivalent of the preprocessor ‘__LINE__’
       macro and returns a constant integer expression that evaluates to
       the line number of the invocation of the built-in.  When used as a
       C++ default argument for a function F, it returns the line number
       of the call to F.
  
   -- Built-in Function: const char * __builtin_FUNCTION ()
!      This function is the equivalent of the ‘__FUNCTION__’ symbol and
       returns an address constant pointing to the name of the function
       from which the built-in was invoked, or the empty string if the
       invocation is not at function scope.  When used as a C++ default
*************** without the '__builtin_' prefix.
*** 50828,50834 ****
       empty string if the call was not made at function scope.
  
   -- Built-in Function: const char * __builtin_FILE ()
!      This function is the equivalent of the preprocessor '__FILE__'
       macro and returns an address constant pointing to the file name
       containing the invocation of the built-in, or the empty string if
       the invocation is not at function scope.  When used as a C++
--- 50839,50845 ----
       empty string if the call was not made at function scope.
  
   -- Built-in Function: const char * __builtin_FILE ()
!      This function is the equivalent of the preprocessor ‘__FILE__’
       macro and returns an address constant pointing to the file name
       containing the invocation of the built-in, or the empty string if
       the invocation is not at function scope.  When used as a C++
*************** without the '__builtin_' prefix.
*** 50836,50845 ****
       call to F or the empty string if the call was not made at function
       scope.
  
!      For example, in the following, each call to function 'foo' will
!      print a line similar to '"file.c:123: foo: message"' with the name
!      of the file and the line number of the 'printf' call, the name of
!      the function 'foo', followed by the word 'message'.
  
            const char*
            function (const char *func = __builtin_FUNCTION ())
--- 50847,50856 ----
       call to F or the empty string if the call was not made at function
       scope.
  
!      For example, in the following, each call to function ‘foo’ will
!      print a line similar to ‘"file.c:123: foo: message"’ with the name
!      of the file and the line number of the ‘printf’ call, the name of
!      the function ‘foo’, followed by the word ‘message’.
  
            const char*
            function (const char *func = __builtin_FUNCTION ())
*************** without the '__builtin_' prefix.
*** 50861,50874 ****
       behavior.
  
       If the target does not require instruction cache flushes,
!      '__builtin___clear_cache' has no effect.  Otherwise either
       instructions are emitted in-line to clear the instruction cache or
!      a call to the '__clear_cache' function in libgcc is made.
  
   -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
       This function is used to minimize cache-miss latency by moving data
       into a cache before it is accessed.  You can insert calls to
!      '__builtin_prefetch' into code for which you know addresses of data
       in memory that is likely to be accessed soon.  If the target
       supports them, data prefetch instructions are generated.  If the
       prefetch is done early enough before the access then the data will
--- 50872,50885 ----
       behavior.
  
       If the target does not require instruction cache flushes,
!      ‘__builtin___clear_cache’ has no effect.  Otherwise either
       instructions are emitted in-line to clear the instruction cache or
!      a call to the ‘__clear_cache’ function in libgcc is made.
  
   -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
       This function is used to minimize cache-miss latency by moving data
       into a cache before it is accessed.  You can insert calls to
!      ‘__builtin_prefetch’ into code for which you know addresses of data
       in memory that is likely to be accessed soon.  If the target
       supports them, data prefetch instructions are generated.  If the
       prefetch is done early enough before the access then the data will
*************** without the '__builtin_' prefix.
*** 50897,50904 ****
  
       Data prefetch does not generate faults if ADDR is invalid, but the
       address expression itself must be valid.  For example, a prefetch
!      of 'p->next' does not fault if 'p->next' is not a valid address,
!      but evaluation faults if 'p' is not a valid address.
  
       If the target does not support data prefetch, the address
       expression is evaluated if it includes side effects but no other
--- 50908,50915 ----
  
       Data prefetch does not generate faults if ADDR is invalid, but the
       address expression itself must be valid.  For example, a prefetch
!      of ‘p->next’ does not fault if ‘p->next’ is not a valid address,
!      but evaluation faults if ‘p’ is not a valid address.
  
       If the target does not support data prefetch, the address
       expression is evaluated if it includes side effects but no other
*************** without the '__builtin_' prefix.
*** 50912,50933 ****
  
   -- Built-in Function: size_t __builtin_dynamic_object_size (const void
            * PTR, int TYPE)
!      Similar to '__builtin_object_size' except that the return value
       need not be a constant.  *Note Object Size Checking::, for a
       detailed description of the function.
  
   -- Built-in Function: int __builtin_classify_type (ARG)
   -- Built-in Function: int __builtin_classify_type (TYPE)
!      The '__builtin_classify_type' returns a small integer with a
       category of ARG argument's type, like void type, integer type,
       enumeral type, boolean type, pointer type, reference type, offset
       type, real type, complex type, function type, method type, record
       type, union type, array type, string type, bit-precise integer
       type, vector type, etc.  When the argument is an expression, for
       backwards compatibility reason the argument is promoted like
!      arguments passed to '...' in varargs function, so some classes are
       never returned in certain languages.  Alternatively, the argument
!      of the built-in function can be a typename, such as the 'typeof'
       specifier.
  
            int a[2];
--- 50923,50944 ----
  
   -- Built-in Function: size_t __builtin_dynamic_object_size (const void
            * PTR, int TYPE)
!      Similar to ‘__builtin_object_size’ except that the return value
       need not be a constant.  *Note Object Size Checking::, for a
       detailed description of the function.
  
   -- Built-in Function: int __builtin_classify_type (ARG)
   -- Built-in Function: int __builtin_classify_type (TYPE)
!      The ‘__builtin_classify_type’ returns a small integer with a
       category of ARG argument's type, like void type, integer type,
       enumeral type, boolean type, pointer type, reference type, offset
       type, real type, complex type, function type, method type, record
       type, union type, array type, string type, bit-precise integer
       type, vector type, etc.  When the argument is an expression, for
       backwards compatibility reason the argument is promoted like
!      arguments passed to ‘...’ in varargs function, so some classes are
       never returned in certain languages.  Alternatively, the argument
!      of the built-in function can be a typename, such as the ‘typeof’
       specifier.
  
            int a[2];
*************** without the '__builtin_' prefix.
*** 50942,51080 ****
  
   -- Built-in Function: double __builtin_huge_val (void)
       Returns a positive infinity, if supported by the floating-point
!      format, else 'DBL_MAX'.  This function is suitable for implementing
!      the ISO C macro 'HUGE_VAL'.
  
   -- Built-in Function: float __builtin_huge_valf (void)
!      Similar to '__builtin_huge_val', except the return type is 'float'.
  
   -- Built-in Function: long double __builtin_huge_vall (void)
!      Similar to '__builtin_huge_val', except the return type is 'long
!      double'.
  
   -- Built-in Function: _FloatN __builtin_huge_valfN (void)
!      Similar to '__builtin_huge_val', except the return type is
!      '_FloatN'.
  
   -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
!      Similar to '__builtin_huge_val', except the return type is
!      '_FloatNx'.
  
   -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
            int, ...)
       This built-in implements the C99 fpclassify functionality.  The
       first five int arguments should be the target library's notion of
       the possible FP classes and are used for return values.  They must
!      be constant values and they must appear in this order: 'FP_NAN',
!      'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
       ellipsis is for exactly one floating-point value to classify.  GCC
       treats the last argument as type-generic, which means it does not
       do default promotion from float to double.
  
   -- Built-in Function: double __builtin_inf (void)
!      Similar to '__builtin_huge_val', except a warning is generated if
       the target floating-point format does not support infinities.
  
   -- Built-in Function: _Decimal32 __builtin_infd32 (void)
!      Similar to '__builtin_inf', except the return type is '_Decimal32'.
  
   -- Built-in Function: _Decimal64 __builtin_infd64 (void)
!      Similar to '__builtin_inf', except the return type is '_Decimal64'.
  
   -- Built-in Function: _Decimal128 __builtin_infd128 (void)
!      Similar to '__builtin_inf', except the return type is
!      '_Decimal128'.
  
   -- Built-in Function: float __builtin_inff (void)
!      Similar to '__builtin_inf', except the return type is 'float'.
       This function is suitable for implementing the ISO C99 macro
!      'INFINITY'.
  
   -- Built-in Function: long double __builtin_infl (void)
!      Similar to '__builtin_inf', except the return type is 'long
!      double'.
  
   -- Built-in Function: _FloatN __builtin_inffN (void)
!      Similar to '__builtin_inf', except the return type is '_FloatN'.
  
   -- Built-in Function: _FloatN __builtin_inffNx (void)
!      Similar to '__builtin_inf', except the return type is '_FloatNx'.
  
   -- Built-in Function: int __builtin_isinf_sign (...)
!      Similar to 'isinf', except the return value is -1 for an argument
!      of '-Inf' and 1 for an argument of '+Inf'.  Note while the
       parameter list is an ellipsis, this function only accepts exactly
       one floating-point argument.  GCC treats this parameter as
       type-generic, which means it does not do default promotion from
       float to double.
  
   -- Built-in Function: double __builtin_nan (const char *STR)
!      This is an implementation of the ISO C99 function 'nan'.
  
!      Since ISO C99 defines this function in terms of 'strtod', which we
       do not implement, a description of the parsing is in order.  The
!      string is parsed as by 'strtol'; that is, the base is recognized by
!      leading '0' or '0x' prefixes.  The number parsed is placed in the
       significand such that the least significant bit of the number is at
       the least significant bit of the significand.  The number is
       truncated to fit the significand field provided.  The significand
       is forced to be a quiet NaN.
  
       This function, if given a string literal all of which would have
!      been consumed by 'strtol', is evaluated early enough that it is
       considered a compile-time constant.
  
   -- Built-in Function: _Decimal32 __builtin_nand32 (const char *STR)
!      Similar to '__builtin_nan', except the return type is '_Decimal32'.
  
   -- Built-in Function: _Decimal64 __builtin_nand64 (const char *STR)
!      Similar to '__builtin_nan', except the return type is '_Decimal64'.
  
   -- Built-in Function: _Decimal128 __builtin_nand128 (const char *STR)
!      Similar to '__builtin_nan', except the return type is
!      '_Decimal128'.
  
   -- Built-in Function: float __builtin_nanf (const char *STR)
!      Similar to '__builtin_nan', except the return type is 'float'.
  
   -- Built-in Function: long double __builtin_nanl (const char *STR)
!      Similar to '__builtin_nan', except the return type is 'long
!      double'.
  
   -- Built-in Function: _FloatN __builtin_nanfN (const char *STR)
!      Similar to '__builtin_nan', except the return type is '_FloatN'.
  
   -- Built-in Function: _FloatNx __builtin_nanfNx (const char *STR)
!      Similar to '__builtin_nan', except the return type is '_FloatNx'.
  
   -- Built-in Function: double __builtin_nans (const char *STR)
!      Similar to '__builtin_nan', except the significand is forced to be
!      a signaling NaN.  The 'nans' function is proposed by WG14 N965.
  
   -- Built-in Function: _Decimal32 __builtin_nansd32 (const char *STR)
!      Similar to '__builtin_nans', except the return type is
!      '_Decimal32'.
  
   -- Built-in Function: _Decimal64 __builtin_nansd64 (const char *STR)
!      Similar to '__builtin_nans', except the return type is
!      '_Decimal64'.
  
   -- Built-in Function: _Decimal128 __builtin_nansd128 (const char *STR)
!      Similar to '__builtin_nans', except the return type is
!      '_Decimal128'.
  
   -- Built-in Function: float __builtin_nansf (const char *STR)
!      Similar to '__builtin_nans', except the return type is 'float'.
  
   -- Built-in Function: long double __builtin_nansl (const char *STR)
!      Similar to '__builtin_nans', except the return type is 'long
!      double'.
  
   -- Built-in Function: _FloatN __builtin_nansfN (const char *STR)
!      Similar to '__builtin_nans', except the return type is '_FloatN'.
  
   -- Built-in Function: _FloatNx __builtin_nansfNx (const char *STR)
!      Similar to '__builtin_nans', except the return type is '_FloatNx'.
  
   -- Built-in Function: int __builtin_issignaling (...)
       Return non-zero if the argument is a signaling NaN and zero
--- 50953,51091 ----
  
   -- Built-in Function: double __builtin_huge_val (void)
       Returns a positive infinity, if supported by the floating-point
!      format, else ‘DBL_MAX’.  This function is suitable for implementing
!      the ISO C macro ‘HUGE_VAL’.
  
   -- Built-in Function: float __builtin_huge_valf (void)
!      Similar to ‘__builtin_huge_val’, except the return type is ‘float’.
  
   -- Built-in Function: long double __builtin_huge_vall (void)
!      Similar to ‘__builtin_huge_val’, except the return type is ‘long
!      double’.
  
   -- Built-in Function: _FloatN __builtin_huge_valfN (void)
!      Similar to ‘__builtin_huge_val’, except the return type is
!      ‘_FloatN’.
  
   -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
!      Similar to ‘__builtin_huge_val’, except the return type is
!      ‘_FloatNx’.
  
   -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
            int, ...)
       This built-in implements the C99 fpclassify functionality.  The
       first five int arguments should be the target library's notion of
       the possible FP classes and are used for return values.  They must
!      be constant values and they must appear in this order: ‘FP_NAN’,
!      ‘FP_INFINITE’, ‘FP_NORMAL’, ‘FP_SUBNORMAL’ and ‘FP_ZERO’.  The
       ellipsis is for exactly one floating-point value to classify.  GCC
       treats the last argument as type-generic, which means it does not
       do default promotion from float to double.
  
   -- Built-in Function: double __builtin_inf (void)
!      Similar to ‘__builtin_huge_val’, except a warning is generated if
       the target floating-point format does not support infinities.
  
   -- Built-in Function: _Decimal32 __builtin_infd32 (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘_Decimal32’.
  
   -- Built-in Function: _Decimal64 __builtin_infd64 (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘_Decimal64’.
  
   -- Built-in Function: _Decimal128 __builtin_infd128 (void)
!      Similar to ‘__builtin_inf’, except the return type is
!      ‘_Decimal128’.
  
   -- Built-in Function: float __builtin_inff (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘float’.
       This function is suitable for implementing the ISO C99 macro
!      ‘INFINITY’.
  
   -- Built-in Function: long double __builtin_infl (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘long
!      double’.
  
   -- Built-in Function: _FloatN __builtin_inffN (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘_FloatN’.
  
   -- Built-in Function: _FloatN __builtin_inffNx (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘_FloatNx’.
  
   -- Built-in Function: int __builtin_isinf_sign (...)
!      Similar to ‘isinf’, except the return value is -1 for an argument
!      of ‘-Inf’ and 1 for an argument of ‘+Inf’.  Note while the
       parameter list is an ellipsis, this function only accepts exactly
       one floating-point argument.  GCC treats this parameter as
       type-generic, which means it does not do default promotion from
       float to double.
  
   -- Built-in Function: double __builtin_nan (const char *STR)
!      This is an implementation of the ISO C99 function ‘nan’.
  
!      Since ISO C99 defines this function in terms of ‘strtod’, which we
       do not implement, a description of the parsing is in order.  The
!      string is parsed as by ‘strtol’; that is, the base is recognized by
!      leading ‘0’ or ‘0x’ prefixes.  The number parsed is placed in the
       significand such that the least significant bit of the number is at
       the least significant bit of the significand.  The number is
       truncated to fit the significand field provided.  The significand
       is forced to be a quiet NaN.
  
       This function, if given a string literal all of which would have
!      been consumed by ‘strtol’, is evaluated early enough that it is
       considered a compile-time constant.
  
   -- Built-in Function: _Decimal32 __builtin_nand32 (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is ‘_Decimal32’.
  
   -- Built-in Function: _Decimal64 __builtin_nand64 (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is ‘_Decimal64’.
  
   -- Built-in Function: _Decimal128 __builtin_nand128 (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is
!      ‘_Decimal128’.
  
   -- Built-in Function: float __builtin_nanf (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is ‘float’.
  
   -- Built-in Function: long double __builtin_nanl (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is ‘long
!      double’.
  
   -- Built-in Function: _FloatN __builtin_nanfN (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is ‘_FloatN’.
  
   -- Built-in Function: _FloatNx __builtin_nanfNx (const char *STR)
!      Similar to ‘__builtin_nan’, except the return type is ‘_FloatNx’.
  
   -- Built-in Function: double __builtin_nans (const char *STR)
!      Similar to ‘__builtin_nan’, except the significand is forced to be
!      a signaling NaN.  The ‘nans’ function is proposed by WG14 N965.
  
   -- Built-in Function: _Decimal32 __builtin_nansd32 (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is
!      ‘_Decimal32’.
  
   -- Built-in Function: _Decimal64 __builtin_nansd64 (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is
!      ‘_Decimal64’.
  
   -- Built-in Function: _Decimal128 __builtin_nansd128 (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is
!      ‘_Decimal128’.
  
   -- Built-in Function: float __builtin_nansf (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is ‘float’.
  
   -- Built-in Function: long double __builtin_nansl (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is ‘long
!      double’.
  
   -- Built-in Function: _FloatN __builtin_nansfN (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is ‘_FloatN’.
  
   -- Built-in Function: _FloatNx __builtin_nansfNx (const char *STR)
!      Similar to ‘__builtin_nans’, except the return type is ‘_FloatNx’.
  
   -- Built-in Function: int __builtin_issignaling (...)
       Return non-zero if the argument is a signaling NaN and zero
*************** without the '__builtin_' prefix.
*** 51082,51092 ****
       function only accepts exactly one floating-point argument.  GCC
       treats this parameter as type-generic, which means it does not do
       default promotion from float to double.  This built-in function can
!      work even without the non-default '-fsignaling-nans' option,
       although if a signaling NaN is computed, stored or passed as
       argument to some function other than this built-in in the current
!      translation unit, it is safer to use '-fsignaling-nans'.  With
!      '-ffinite-math-only' option this built-in function will always
       return 0.
  
   -- Built-in Function: int __builtin_ffs (int X)
--- 51093,51103 ----
       function only accepts exactly one floating-point argument.  GCC
       treats this parameter as type-generic, which means it does not do
       default promotion from float to double.  This built-in function can
!      work even without the non-default ‘-fsignaling-nans’ option,
       although if a signaling NaN is computed, stored or passed as
       argument to some function other than this built-in in the current
!      translation unit, it is safer to use ‘-fsignaling-nans’.  With
!      ‘-ffinite-math-only’ option this built-in function will always
       return 0.
  
   -- Built-in Function: int __builtin_ffs (int X)
*************** without the '__builtin_' prefix.
*** 51113,51170 ****
       Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
  
   -- Built-in Function: int __builtin_ffsl (long)
!      Similar to '__builtin_ffs', except the argument type is 'long'.
  
   -- Built-in Function: int __builtin_clzl (unsigned long)
!      Similar to '__builtin_clz', except the argument type is 'unsigned
!      long'.
  
   -- Built-in Function: int __builtin_ctzl (unsigned long)
!      Similar to '__builtin_ctz', except the argument type is 'unsigned
!      long'.
  
   -- Built-in Function: int __builtin_clrsbl (long)
!      Similar to '__builtin_clrsb', except the argument type is 'long'.
  
   -- Built-in Function: int __builtin_popcountl (unsigned long)
!      Similar to '__builtin_popcount', except the argument type is
!      'unsigned long'.
  
   -- Built-in Function: int __builtin_parityl (unsigned long)
!      Similar to '__builtin_parity', except the argument type is
!      'unsigned long'.
  
   -- Built-in Function: int __builtin_ffsll (long long)
!      Similar to '__builtin_ffs', except the argument type is 'long
!      long'.
  
   -- Built-in Function: int __builtin_clzll (unsigned long long)
!      Similar to '__builtin_clz', except the argument type is 'unsigned
!      long long'.
  
   -- Built-in Function: int __builtin_ctzll (unsigned long long)
!      Similar to '__builtin_ctz', except the argument type is 'unsigned
!      long long'.
  
   -- Built-in Function: int __builtin_clrsbll (long long)
!      Similar to '__builtin_clrsb', except the argument type is 'long
!      long'.
  
   -- Built-in Function: int __builtin_popcountll (unsigned long long)
!      Similar to '__builtin_popcount', except the argument type is
!      'unsigned long long'.
  
   -- Built-in Function: int __builtin_parityll (unsigned long long)
!      Similar to '__builtin_parity', except the argument type is
!      'unsigned long long'.
  
   -- Built-in Function: int __builtin_ffsg (...)
!      Similar to '__builtin_ffs', except the argument is type-generic
       signed integer (standard, extended or bit-precise).  No integral
       argument promotions are performed on the argument.
  
   -- Built-in Function: int __builtin_clzg (...)
!      Similar to '__builtin_clz', except the argument is type-generic
       unsigned integer (standard, extended or bit-precise) and there is
       optional second argument with int type.  No integral argument
       promotions are performed on the first argument.  If two arguments
--- 51124,51181 ----
       Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
  
   -- Built-in Function: int __builtin_ffsl (long)
!      Similar to ‘__builtin_ffs’, except the argument type is ‘long’.
  
   -- Built-in Function: int __builtin_clzl (unsigned long)
!      Similar to ‘__builtin_clz’, except the argument type is ‘unsigned
!      long’.
  
   -- Built-in Function: int __builtin_ctzl (unsigned long)
!      Similar to ‘__builtin_ctz’, except the argument type is ‘unsigned
!      long’.
  
   -- Built-in Function: int __builtin_clrsbl (long)
!      Similar to ‘__builtin_clrsb’, except the argument type is ‘long’.
  
   -- Built-in Function: int __builtin_popcountl (unsigned long)
!      Similar to ‘__builtin_popcount’, except the argument type is
!      ‘unsigned long’.
  
   -- Built-in Function: int __builtin_parityl (unsigned long)
!      Similar to ‘__builtin_parity’, except the argument type is
!      ‘unsigned long’.
  
   -- Built-in Function: int __builtin_ffsll (long long)
!      Similar to ‘__builtin_ffs’, except the argument type is ‘long
!      long’.
  
   -- Built-in Function: int __builtin_clzll (unsigned long long)
!      Similar to ‘__builtin_clz’, except the argument type is ‘unsigned
!      long long’.
  
   -- Built-in Function: int __builtin_ctzll (unsigned long long)
!      Similar to ‘__builtin_ctz’, except the argument type is ‘unsigned
!      long long’.
  
   -- Built-in Function: int __builtin_clrsbll (long long)
!      Similar to ‘__builtin_clrsb’, except the argument type is ‘long
!      long’.
  
   -- Built-in Function: int __builtin_popcountll (unsigned long long)
!      Similar to ‘__builtin_popcount’, except the argument type is
!      ‘unsigned long long’.
  
   -- Built-in Function: int __builtin_parityll (unsigned long long)
!      Similar to ‘__builtin_parity’, except the argument type is
!      ‘unsigned long long’.
  
   -- Built-in Function: int __builtin_ffsg (...)
!      Similar to ‘__builtin_ffs’, except the argument is type-generic
       signed integer (standard, extended or bit-precise).  No integral
       argument promotions are performed on the argument.
  
   -- Built-in Function: int __builtin_clzg (...)
!      Similar to ‘__builtin_clz’, except the argument is type-generic
       unsigned integer (standard, extended or bit-precise) and there is
       optional second argument with int type.  No integral argument
       promotions are performed on the first argument.  If two arguments
*************** without the '__builtin_' prefix.
*** 51173,51179 ****
       result is undefined.
  
   -- Built-in Function: int __builtin_ctzg (...)
!      Similar to '__builtin_ctz', except the argument is type-generic
       unsigned integer (standard, extended or bit-precise) and there is
       optional second argument with int type.  No integral argument
       promotions are performed on the first argument.  If two arguments
--- 51184,51190 ----
       result is undefined.
  
   -- Built-in Function: int __builtin_ctzg (...)
!      Similar to ‘__builtin_ctz’, except the argument is type-generic
       unsigned integer (standard, extended or bit-precise) and there is
       optional second argument with int type.  No integral argument
       promotions are performed on the first argument.  If two arguments
*************** without the '__builtin_' prefix.
*** 51182,51335 ****
       result is undefined.
  
   -- Built-in Function: int __builtin_clrsbg (...)
!      Similar to '__builtin_clrsb', except the argument is type-generic
       signed integer (standard, extended or bit-precise).  No integral
       argument promotions are performed on the argument.
  
   -- Built-in Function: int __builtin_popcountg (...)
!      Similar to '__builtin_popcount', except the argument is
       type-generic unsigned integer (standard, extended or bit-precise).
       No integral argument promotions are performed on the argument.
  
   -- Built-in Function: int __builtin_parityg (...)
!      Similar to '__builtin_parity', except the argument is type-generic
       unsigned integer (standard, extended or bit-precise).  No integral
       argument promotions are performed on the argument.
  
   -- Built-in Function: TYPE __builtin_stdc_bit_ceil (TYPE ARG)
!      The '__builtin_stdc_bit_ceil' function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
!      promotions are performed on the argument.  It is equivalent to 'ARG
       <= 1 ? (TYPE) 1 : (TYPE) 2 << (PREC - 1 - __builtin_clzg ((TYPE)
!      (ARG - 1)))' where PREC is bit width of TYPE, except that
       side-effects in ARG are evaluated just once.
  
   -- Built-in Function: TYPE __builtin_stdc_bit_floor (TYPE ARG)
!      The '__builtin_stdc_bit_floor' function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
!      promotions are performed on the argument.  It is equivalent to 'ARG
!      == 0 ? (TYPE) 0 : (TYPE) 1 << (PREC - 1 - __builtin_clzg (ARG))'
       where PREC is bit width of TYPE, except that side-effects in ARG
       are evaluated just once.
  
   -- Built-in Function: unsigned int __builtin_stdc_bit_width (TYPE ARG)
!      The '__builtin_stdc_bit_width' function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) (PREC - __builtin_clzg (ARG, PREC))' where PREC is
       bit width of TYPE.
  
   -- Built-in Function: unsigned int __builtin_stdc_count_ones (TYPE ARG)
!      The '__builtin_stdc_count_ones' function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) __builtin_popcountg (ARG)'
  
   -- Built-in Function: unsigned int __builtin_stdc_count_zeros (TYPE
            ARG)
!      The '__builtin_stdc_count_zeros' function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) __builtin_popcountg ((TYPE) ~ARG)'
  
   -- Built-in Function: unsigned int __builtin_stdc_first_leading_one
            (TYPE ARG)
!      The '__builtin_stdc_first_leading_one' function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '__builtin_clzg (ARG, -1) + 1U'
  
   -- Built-in Function: unsigned int __builtin_stdc_first_leading_zero
            (TYPE ARG)
!      The '__builtin_stdc_first_leading_zero' function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '__builtin_clzg ((TYPE) ~ARG, -1) + 1U'
  
   -- Built-in Function: unsigned int __builtin_stdc_first_trailing_one
            (TYPE ARG)
!      The '__builtin_stdc_first_trailing_one' function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '__builtin_ctzg (ARG, -1) + 1U'
  
   -- Built-in Function: unsigned int __builtin_stdc_first_trailing_zero
            (TYPE ARG)
!      The '__builtin_stdc_first_trailing_zero' function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '__builtin_ctzg ((TYPE) ~ARG, -1) + 1U'
  
   -- Built-in Function: unsigned int __builtin_stdc_has_single_bit (TYPE
            ARG)
!      The '__builtin_stdc_has_single_bit' function is available only in
!      C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(_Bool) (__builtin_popcountg (ARG) == 1)'
  
   -- Built-in Function: unsigned int __builtin_stdc_leading_ones (TYPE
            ARG)
!      The '__builtin_stdc_leading_ones' function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) __builtin_clzg ((TYPE) ~ARG, PREC)'
  
   -- Built-in Function: unsigned int __builtin_stdc_leading_zeros (TYPE
            ARG)
!      The '__builtin_stdc_leading_zeros' function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) __builtin_clzg (ARG, PREC)'
  
   -- Built-in Function: unsigned int __builtin_stdc_trailing_ones (TYPE
            ARG)
!      The '__builtin_stdc_trailing_ones' function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) __builtin_ctzg ((TYPE) ~ARG, PREC)'
  
   -- Built-in Function: unsigned int __builtin_stdc_trailing_zeros (TYPE
            ARG)
!      The '__builtin_stdc_trailing_zeros' function is available only in
!      C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      '(unsigned int) __builtin_ctzg (ARG, PREC)'
  
   -- Built-in Function: double __builtin_powi (double, int)
   -- Built-in Function: float __builtin_powif (float, int)
   -- Built-in Function: long double __builtin_powil (long double, int)
       Returns the first argument raised to the power of the second.
!      Unlike the 'pow' function no guarantees about precision and
       rounding are made.
  
   -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t X)
       Returns X with the order of the bytes reversed; for example,
!      '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
  
   -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t X)
!      Similar to '__builtin_bswap16', except the argument and return
       types are 32-bit.
  
   -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t X)
!      Similar to '__builtin_bswap32', except the argument and return
       types are 64-bit.
  
   -- Built-in Function: uint128_t __builtin_bswap128 (uint128_t X)
!      Similar to '__builtin_bswap64', except the argument and return
       types are 128-bit.  Only supported on targets when 128-bit types
       are supported.
  
--- 51193,51346 ----
       result is undefined.
  
   -- Built-in Function: int __builtin_clrsbg (...)
!      Similar to ‘__builtin_clrsb’, except the argument is type-generic
       signed integer (standard, extended or bit-precise).  No integral
       argument promotions are performed on the argument.
  
   -- Built-in Function: int __builtin_popcountg (...)
!      Similar to ‘__builtin_popcount’, except the argument is
       type-generic unsigned integer (standard, extended or bit-precise).
       No integral argument promotions are performed on the argument.
  
   -- Built-in Function: int __builtin_parityg (...)
!      Similar to ‘__builtin_parity’, except the argument is type-generic
       unsigned integer (standard, extended or bit-precise).  No integral
       argument promotions are performed on the argument.
  
   -- Built-in Function: TYPE __builtin_stdc_bit_ceil (TYPE ARG)
!      The ‘__builtin_stdc_bit_ceil’ function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
!      promotions are performed on the argument.  It is equivalent to ‘ARG
       <= 1 ? (TYPE) 1 : (TYPE) 2 << (PREC - 1 - __builtin_clzg ((TYPE)
!      (ARG - 1)))’ where PREC is bit width of TYPE, except that
       side-effects in ARG are evaluated just once.
  
   -- Built-in Function: TYPE __builtin_stdc_bit_floor (TYPE ARG)
!      The ‘__builtin_stdc_bit_floor’ function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
!      promotions are performed on the argument.  It is equivalent to ‘ARG
!      == 0 ? (TYPE) 0 : (TYPE) 1 << (PREC - 1 - __builtin_clzg (ARG))’
       where PREC is bit width of TYPE, except that side-effects in ARG
       are evaluated just once.
  
   -- Built-in Function: unsigned int __builtin_stdc_bit_width (TYPE ARG)
!      The ‘__builtin_stdc_bit_width’ function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) (PREC - __builtin_clzg (ARG, PREC))’ where PREC is
       bit width of TYPE.
  
   -- Built-in Function: unsigned int __builtin_stdc_count_ones (TYPE ARG)
!      The ‘__builtin_stdc_count_ones’ function is available only in C. It
       is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) __builtin_popcountg (ARG)’
  
   -- Built-in Function: unsigned int __builtin_stdc_count_zeros (TYPE
            ARG)
!      The ‘__builtin_stdc_count_zeros’ function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) __builtin_popcountg ((TYPE) ~ARG)’
  
   -- Built-in Function: unsigned int __builtin_stdc_first_leading_one
            (TYPE ARG)
!      The ‘__builtin_stdc_first_leading_one’ function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘__builtin_clzg (ARG, -1) + 1U’
  
   -- Built-in Function: unsigned int __builtin_stdc_first_leading_zero
            (TYPE ARG)
!      The ‘__builtin_stdc_first_leading_zero’ function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘__builtin_clzg ((TYPE) ~ARG, -1) + 1U’
  
   -- Built-in Function: unsigned int __builtin_stdc_first_trailing_one
            (TYPE ARG)
!      The ‘__builtin_stdc_first_trailing_one’ function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘__builtin_ctzg (ARG, -1) + 1U’
  
   -- Built-in Function: unsigned int __builtin_stdc_first_trailing_zero
            (TYPE ARG)
!      The ‘__builtin_stdc_first_trailing_zero’ function is available only
       in C. It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘__builtin_ctzg ((TYPE) ~ARG, -1) + 1U’
  
   -- Built-in Function: unsigned int __builtin_stdc_has_single_bit (TYPE
            ARG)
!      The ‘__builtin_stdc_has_single_bit’ function is available only in
!      C.  It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(_Bool) (__builtin_popcountg (ARG) == 1)’
  
   -- Built-in Function: unsigned int __builtin_stdc_leading_ones (TYPE
            ARG)
!      The ‘__builtin_stdc_leading_ones’ function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) __builtin_clzg ((TYPE) ~ARG, PREC)’
  
   -- Built-in Function: unsigned int __builtin_stdc_leading_zeros (TYPE
            ARG)
!      The ‘__builtin_stdc_leading_zeros’ function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) __builtin_clzg (ARG, PREC)’
  
   -- Built-in Function: unsigned int __builtin_stdc_trailing_ones (TYPE
            ARG)
!      The ‘__builtin_stdc_trailing_ones’ function is available only in C.
       It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) __builtin_ctzg ((TYPE) ~ARG, PREC)’
  
   -- Built-in Function: unsigned int __builtin_stdc_trailing_zeros (TYPE
            ARG)
!      The ‘__builtin_stdc_trailing_zeros’ function is available only in
!      C.  It is type-generic, the argument can be any unsigned integer
       (standard, extended or bit-precise).  No integral argument
       promotions are performed on the argument.  It is equivalent to
!      ‘(unsigned int) __builtin_ctzg (ARG, PREC)’
  
   -- Built-in Function: double __builtin_powi (double, int)
   -- Built-in Function: float __builtin_powif (float, int)
   -- Built-in Function: long double __builtin_powil (long double, int)
       Returns the first argument raised to the power of the second.
!      Unlike the ‘pow’ function no guarantees about precision and
       rounding are made.
  
   -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t X)
       Returns X with the order of the bytes reversed; for example,
!      ‘0xaabb’ becomes ‘0xbbaa’.  Byte here always means exactly 8 bits.
  
   -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t X)
!      Similar to ‘__builtin_bswap16’, except the argument and return
       types are 32-bit.
  
   -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t X)
!      Similar to ‘__builtin_bswap32’, except the argument and return
       types are 64-bit.
  
   -- Built-in Function: uint128_t __builtin_bswap128 (uint128_t X)
!      Similar to ‘__builtin_bswap64’, except the argument and return
       types are 128-bit.  Only supported on targets when 128-bit types
       are supported.
  
*************** generate the machine instruction that is
*** 51461,51468 ****
       long __builtin_alpha_zap (long, long);
       long __builtin_alpha_zapnot (long, long);
  
!  The following built-in functions are always with '-mmax' or '-mcpu=CPU'
! where CPU is 'pca56' or later.  They all generate the machine
  instruction that is part of the name.
  
       long __builtin_alpha_pklb (long);
--- 51472,51479 ----
       long __builtin_alpha_zap (long, long);
       long __builtin_alpha_zapnot (long, long);
  
!  The following built-in functions are always with ‘-mmax’ or ‘-mcpu=CPU’
! where CPU is ‘pca56’ or later.  They all generate the machine
  instruction that is part of the name.
  
       long __builtin_alpha_pklb (long);
*************** instruction that is part of the name.
*** 51479,51486 ****
       long __builtin_alpha_maxsw4 (long, long);
       long __builtin_alpha_perr (long, long);
  
!  The following built-in functions are always with '-mcix' or '-mcpu=CPU'
! where CPU is 'ev67' or later.  They all generate the machine instruction
  that is part of the name.
  
       long __builtin_alpha_cttz (long);
--- 51490,51497 ----
       long __builtin_alpha_maxsw4 (long, long);
       long __builtin_alpha_perr (long, long);
  
!  The following built-in functions are always with ‘-mcix’ or ‘-mcpu=CPU’
! where CPU is ‘ev67’ or later.  They all generate the machine instruction
  that is part of the name.
  
       long __builtin_alpha_cttz (long);
*************** that is part of the name.
*** 51488,51496 ****
       long __builtin_alpha_ctpop (long);
  
   The following built-in functions are available on systems that use the
! OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
! calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
! 'wrval'.
  
       void *__builtin_thread_pointer (void);
       void __builtin_set_thread_pointer (void *);
--- 51499,51507 ----
       long __builtin_alpha_ctpop (long);
  
   The following built-in functions are available on systems that use the
! OSF/1 PALcode.  Normally they invoke the ‘rduniq’ and ‘wruniq’ PAL
! calls, but when invoked with ‘-mtls-kernel’, they invoke ‘rdval’ and
! ‘wrval’.
  
       void *__builtin_thread_pointer (void);
       void __builtin_set_thread_pointer (void *);
*************** generate the machine instruction that is
*** 51531,51553 ****
   The following built-in functions are always available.  They all
  generate a Nios II Custom Instruction.  The name of the function
  represents the types that the function takes and returns.  The letter
! before the 'n' is the return type or void if absent.  The 'n' represents
  the first parameter to all the custom instructions, the custom
! instruction number.  The two letters after the 'n' represent the up to
  two parameters to the function.
  
   The letters represent the following data types:
! '<no letter>'
!      'void' for return type and no parameter for parameter types.
  
! 'i'
!      'int' for return type and parameter type
  
! 'f'
!      'float' for return type and parameter type
  
! 'p'
!      'void *' for return type and parameter type
  
   And the function names are:
       void __builtin_custom_n (void);
--- 51542,51564 ----
   The following built-in functions are always available.  They all
  generate a Nios II Custom Instruction.  The name of the function
  represents the types that the function takes and returns.  The letter
! before the ‘n’ is the return type or void if absent.  The ‘n’ represents
  the first parameter to all the custom instructions, the custom
! instruction number.  The two letters after the ‘n’ represent the up to
  two parameters to the function.
  
   The letters represent the following data types:
! ‘<no letter>’
!      ‘void’ for return type and no parameter for parameter types.
  
! ‘i’
!      ‘int’ for return type and parameter type
  
! ‘f’
!      ‘float’ for return type and parameter type
  
! ‘p’
!      ‘void *’ for return type and parameter type
  
   And the function names are:
       void __builtin_custom_n (void);
*************** generated.
*** 51650,51656 ****
            mov  rREGNO, VAL
  
   -- Built-in Function: int __builtin_arc_divaw (int A, int B)
!      Only available if either '-mcpu=ARC700' or '-meA' is set.
       Generates:
            divaw  DEST, A, B
       where the value in DEST will be the result returned from the
--- 51661,51667 ----
            mov  rREGNO, VAL
  
   -- Built-in Function: int __builtin_arc_divaw (int A, int B)
!      Only available if either ‘-mcpu=ARC700’ or ‘-meA’ is set.
       Generates:
            divaw  DEST, A, B
       where the value in DEST will be the result returned from the
*************** generated.
*** 51668,51679 ****
       built-in.
  
   -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
!      Only available with '-mmul64'.  Generates:
            mul64  A, B
  
   -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
            unsigned int B)
!      Only available with '-mmul64'.  Generates:
            mulu64  A, B
  
   -- Built-in Function: void __builtin_arc_nop (void)
--- 51679,51690 ----
       built-in.
  
   -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
!      Only available with ‘-mmul64’.  Generates:
            mul64  A, B
  
   -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
            unsigned int B)
!      Only available with ‘-mmul64’.  Generates:
            mulu64  A, B
  
   -- Built-in Function: void __builtin_arc_nop (void)
*************** generated.
*** 51681,51695 ****
            nop
  
   -- Built-in Function: int __builtin_arc_norm (int SRC)
!      Only valid if the 'norm' instruction is available through the
!      '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
            norm  DEST, SRC
       Where the value in DEST will be the result returned from the
       built-in.
  
   -- Built-in Function: short int __builtin_arc_normw (short int SRC)
!      Only valid if the 'normw' instruction is available through the
!      '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
            normw  DEST, SRC
       Where the value in DEST will be the result returned from the
       built-in.
--- 51692,51706 ----
            nop
  
   -- Built-in Function: int __builtin_arc_norm (int SRC)
!      Only valid if the ‘norm’ instruction is available through the
!      ‘-mnorm’ option or by default with ‘-mcpu=ARC700’.  Generates:
            norm  DEST, SRC
       Where the value in DEST will be the result returned from the
       built-in.
  
   -- Built-in Function: short int __builtin_arc_normw (short int SRC)
!      Only valid if the ‘normw’ instruction is available through the
!      ‘-mnorm’ option or by default with ‘-mcpu=ARC700’.  Generates:
            normw  DEST, SRC
       Where the value in DEST will be the result returned from the
       built-in.
*************** generated.
*** 51710,51716 ****
            sr  VAL, [AUXR]
  
   -- Built-in Function: int __builtin_arc_swap (int SRC)
!      Only valid with '-mswap'.  Generates:
            swap  DEST, SRC
       Where the value in DEST will be the result returned from the
       built-in.
--- 51721,51727 ----
            sr  VAL, [AUXR]
  
   -- Built-in Function: int __builtin_arc_swap (int SRC)
!      Only valid with ‘-mswap’.  Generates:
            swap  DEST, SRC
       Where the value in DEST will be the result returned from the
       built-in.
*************** generated.
*** 51720,51734 ****
            swi
  
   -- Built-in Function: void __builtin_arc_sync (void)
!      Only available with '-mcpu=ARC700'.  Generates:
            sync
  
   -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
!      Only available with '-mcpu=ARC700'.  Generates:
            trap_s  C
  
   -- Built-in Function: void __builtin_arc_unimp_s (void)
!      Only available with '-mcpu=ARC700'.  Generates:
            unimp_s
  
   The instructions generated by the following builtins are not considered
--- 51731,51745 ----
            swi
  
   -- Built-in Function: void __builtin_arc_sync (void)
!      Only available with ‘-mcpu=ARC700’.  Generates:
            sync
  
   -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
!      Only available with ‘-mcpu=ARC700’.  Generates:
            trap_s  C
  
   -- Built-in Function: void __builtin_arc_unimp_s (void)
!      Only available with ‘-mcpu=ARC700’.  Generates:
            unimp_s
  
   The instructions generated by the following builtins are not considered
*************** processors.
*** 51752,51758 ****
       void __builtin_arc_seti (int);
  
   The following built-in functions are available for the ARCv2 family and
! uses '-mnorm'.
  
       int __builtin_arc_ffs (int);
       int __builtin_arc_fls (int);
--- 51763,51769 ----
       void __builtin_arc_seti (int);
  
   The following built-in functions are available for the ARCv2 family and
! uses ‘-mnorm’.
  
       int __builtin_arc_ffs (int);
       int __builtin_arc_fls (int);
*************** File: gcc.info,  Node: ARC SIMD Built-in
*** 51765,51773 ****
  
  SIMD builtins provided by the compiler can be used to generate the
  vector instructions.  This section describes the available builtins and
! their usage in programs.  With the '-msimd' option, the compiler
  provides 128-bit vector types, which can be specified using the
! 'vector_size' attribute.  The header file 'arc-simd.h' can be included
  to use the following predefined types:
       typedef int __v4si   __attribute__((vector_size(16)));
       typedef short __v8hi __attribute__((vector_size(16)));
--- 51776,51784 ----
  
  SIMD builtins provided by the compiler can be used to generate the
  vector instructions.  This section describes the available builtins and
! their usage in programs.  With the ‘-msimd’ option, the compiler
  provides 128-bit vector types, which can be specified using the
! ‘vector_size’ attribute.  The header file ‘arc-simd.h’ can be included
  to use the following predefined types:
       typedef int __v4si   __attribute__((vector_size(16)));
       typedef short __v8hi __attribute__((vector_size(16)));
*************** to use the following predefined types:
*** 51776,51783 ****
  functions listed in the following section can be used on these variables
  to generate the vector operations.
  
!  For all builtins, '__builtin_arc_SOMEINSN', the header file
! 'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
  be used for programming ease and improved readability.  The following
  macros for DMA control are also provided:
       #define _setup_dma_in_channel_reg _vdiwr
--- 51787,51794 ----
  functions listed in the following section can be used on these variables
  to generate the vector operations.
  
!  For all builtins, ‘__builtin_arc_SOMEINSN’, the header file
! ‘arc-simd.h’ also provides equivalent macros called ‘_SOMEINSN’ that can
  be used for programming ease and improved readability.  The following
  macros for DMA control are also provided:
       #define _setup_dma_in_channel_reg _vdiwr
*************** macros for DMA control are also provided
*** 51786,51792 ****
   The following is a complete list of all the SIMD built-ins provided for
  ARC, grouped by calling signature.
  
!  The following take two '__v8hi' arguments and return a '__v8hi' result:
       __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi);
       __v8hi __builtin_arc_vaddw (__v8hi, __v8hi);
       __v8hi __builtin_arc_vand (__v8hi, __v8hi);
--- 51797,51803 ----
   The following is a complete list of all the SIMD built-ins provided for
  ARC, grouped by calling signature.
  
!  The following take two ‘__v8hi’ arguments and return a ‘__v8hi’ result:
       __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi);
       __v8hi __builtin_arc_vaddw (__v8hi, __v8hi);
       __v8hi __builtin_arc_vand (__v8hi, __v8hi);
*************** ARC, grouped by calling signature.
*** 51836,51843 ****
       __v8hi __builtin_arc_vxor (__v8hi, __v8hi);
       __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi);
  
!  The following take one '__v8hi' and one 'int' argument and return a
! '__v8hi' result:
  
       __v8hi __builtin_arc_vbaddw (__v8hi, int);
       __v8hi __builtin_arc_vbmaxw (__v8hi, int);
--- 51847,51854 ----
       __v8hi __builtin_arc_vxor (__v8hi, __v8hi);
       __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi);
  
!  The following take one ‘__v8hi’ and one ‘int’ argument and return a
! ‘__v8hi’ result:
  
       __v8hi __builtin_arc_vbaddw (__v8hi, int);
       __v8hi __builtin_arc_vbmaxw (__v8hi, int);
*************** ARC, grouped by calling signature.
*** 51848,51862 ****
       __v8hi __builtin_arc_vbrsubw (__v8hi, int);
       __v8hi __builtin_arc_vbsubw (__v8hi, int);
  
!  The following take one '__v8hi' argument and one 'int' argument which
  must be a 3-bit compile time constant indicating a register number
! I0-I7.  They return a '__v8hi' result.
       __v8hi __builtin_arc_vasrw (__v8hi, const int);
       __v8hi __builtin_arc_vsr8 (__v8hi, const int);
       __v8hi __builtin_arc_vsr8aw (__v8hi, const int);
  
!  The following take one '__v8hi' argument and one 'int' argument which
! must be a 6-bit compile time constant.  They return a '__v8hi' result.
       __v8hi __builtin_arc_vasrpwbi (__v8hi, const int);
       __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int);
       __v8hi __builtin_arc_vasrrwi (__v8hi, const int);
--- 51859,51873 ----
       __v8hi __builtin_arc_vbrsubw (__v8hi, int);
       __v8hi __builtin_arc_vbsubw (__v8hi, int);
  
!  The following take one ‘__v8hi’ argument and one ‘int’ argument which
  must be a 3-bit compile time constant indicating a register number
! I0-I7.  They return a ‘__v8hi’ result.
       __v8hi __builtin_arc_vasrw (__v8hi, const int);
       __v8hi __builtin_arc_vsr8 (__v8hi, const int);
       __v8hi __builtin_arc_vsr8aw (__v8hi, const int);
  
!  The following take one ‘__v8hi’ argument and one ‘int’ argument which
! must be a 6-bit compile time constant.  They return a ‘__v8hi’ result.
       __v8hi __builtin_arc_vasrpwbi (__v8hi, const int);
       __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int);
       __v8hi __builtin_arc_vasrrwi (__v8hi, const int);
*************** must be a 6-bit compile time constant.
*** 51865,51884 ****
       __v8hi __builtin_arc_vsr8awi (__v8hi, const int);
       __v8hi __builtin_arc_vsr8i (__v8hi, const int);
  
!  The following take one '__v8hi' argument and one 'int' argument which
! must be a 8-bit compile time constant.  They return a '__v8hi' result.
       __v8hi __builtin_arc_vd6tapf (__v8hi, const int);
       __v8hi __builtin_arc_vmvaw (__v8hi, const int);
       __v8hi __builtin_arc_vmvw (__v8hi, const int);
       __v8hi __builtin_arc_vmvzw (__v8hi, const int);
  
!  The following take two 'int' arguments, the second of which which must
! be a 8-bit compile time constant.  They return a '__v8hi' result:
       __v8hi __builtin_arc_vmovaw (int, const int);
       __v8hi __builtin_arc_vmovw (int, const int);
       __v8hi __builtin_arc_vmovzw (int, const int);
  
!  The following take a single '__v8hi' argument and return a '__v8hi'
  result:
       __v8hi __builtin_arc_vabsaw (__v8hi);
       __v8hi __builtin_arc_vabsw (__v8hi);
--- 51876,51895 ----
       __v8hi __builtin_arc_vsr8awi (__v8hi, const int);
       __v8hi __builtin_arc_vsr8i (__v8hi, const int);
  
!  The following take one ‘__v8hi’ argument and one ‘int’ argument which
! must be a 8-bit compile time constant.  They return a ‘__v8hi’ result.
       __v8hi __builtin_arc_vd6tapf (__v8hi, const int);
       __v8hi __builtin_arc_vmvaw (__v8hi, const int);
       __v8hi __builtin_arc_vmvw (__v8hi, const int);
       __v8hi __builtin_arc_vmvzw (__v8hi, const int);
  
!  The following take two ‘int’ arguments, the second of which which must
! be a 8-bit compile time constant.  They return a ‘__v8hi’ result:
       __v8hi __builtin_arc_vmovaw (int, const int);
       __v8hi __builtin_arc_vmovw (int, const int);
       __v8hi __builtin_arc_vmovzw (int, const int);
  
!  The following take a single ‘__v8hi’ argument and return a ‘__v8hi’
  result:
       __v8hi __builtin_arc_vabsaw (__v8hi);
       __v8hi __builtin_arc_vabsw (__v8hi);
*************** result:
*** 51892,51929 ****
       __v8hi __builtin_arc_vupsbaw (__v8hi);
       __v8hi __builtin_arc_vupsbw (__v8hi);
  
!  The following take two 'int' arguments and return no result:
       void __builtin_arc_vdirun (int, int);
       void __builtin_arc_vdorun (int, int);
  
!  The following take two 'int' arguments and return no result.  The first
  argument must a 3-bit compile time constant indicating one of the
  DR0-DR7 DMA setup channels:
       void __builtin_arc_vdiwr (const int, int);
       void __builtin_arc_vdowr (const int, int);
  
!  The following take an 'int' argument and return no result:
       void __builtin_arc_vendrec (int);
       void __builtin_arc_vrec (int);
       void __builtin_arc_vrecrun (int);
       void __builtin_arc_vrun (int);
  
!  The following take a '__v8hi' argument and two 'int' arguments and
! return a '__v8hi' result.  The second argument must be a 3-bit compile
  time constants, indicating one the registers I0-I7, and the third
  argument must be an 8-bit compile time constant.
  
   _Note:_ Although the equivalent hardware instructions do not take an
  SIMD register as an operand, these builtins overwrite the relevant bits
! of the '__v8hi' register provided as the first argument with the value
! loaded from the '[Ib, u8]' location in the SDM.
  
       __v8hi __builtin_arc_vld32 (__v8hi, const int, const int);
       __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int);
       __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int);
       __v8hi __builtin_arc_vld64 (__v8hi, const int, const int);
  
!  The following take two 'int' arguments and return a '__v8hi' result.
  The first argument must be a 3-bit compile time constants, indicating
  one the registers I0-I7, and the second argument must be an 8-bit
  compile time constant.
--- 51903,51940 ----
       __v8hi __builtin_arc_vupsbaw (__v8hi);
       __v8hi __builtin_arc_vupsbw (__v8hi);
  
!  The following take two ‘int’ arguments and return no result:
       void __builtin_arc_vdirun (int, int);
       void __builtin_arc_vdorun (int, int);
  
!  The following take two ‘int’ arguments and return no result.  The first
  argument must a 3-bit compile time constant indicating one of the
  DR0-DR7 DMA setup channels:
       void __builtin_arc_vdiwr (const int, int);
       void __builtin_arc_vdowr (const int, int);
  
!  The following take an ‘int’ argument and return no result:
       void __builtin_arc_vendrec (int);
       void __builtin_arc_vrec (int);
       void __builtin_arc_vrecrun (int);
       void __builtin_arc_vrun (int);
  
!  The following take a ‘__v8hi’ argument and two ‘int’ arguments and
! return a ‘__v8hi’ result.  The second argument must be a 3-bit compile
  time constants, indicating one the registers I0-I7, and the third
  argument must be an 8-bit compile time constant.
  
   _Note:_ Although the equivalent hardware instructions do not take an
  SIMD register as an operand, these builtins overwrite the relevant bits
! of the ‘__v8hi’ register provided as the first argument with the value
! loaded from the ‘[Ib, u8]’ location in the SDM.
  
       __v8hi __builtin_arc_vld32 (__v8hi, const int, const int);
       __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int);
       __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int);
       __v8hi __builtin_arc_vld64 (__v8hi, const int, const int);
  
!  The following take two ‘int’ arguments and return a ‘__v8hi’ result.
  The first argument must be a 3-bit compile time constants, indicating
  one the registers I0-I7, and the second argument must be an 8-bit
  compile time constant.
*************** compile time constant.
*** 51931,51937 ****
       __v8hi __builtin_arc_vld128 (const int, const int);
       __v8hi __builtin_arc_vld64w (const int, const int);
  
!  The following take a '__v8hi' argument and two 'int' arguments and
  return no result.  The second argument must be a 3-bit compile time
  constants, indicating one the registers I0-I7, and the third argument
  must be an 8-bit compile time constant.
--- 51942,51948 ----
       __v8hi __builtin_arc_vld128 (const int, const int);
       __v8hi __builtin_arc_vld64w (const int, const int);
  
!  The following take a ‘__v8hi’ argument and two ‘int’ arguments and
  return no result.  The second argument must be a 3-bit compile time
  constants, indicating one the registers I0-I7, and the third argument
  must be an 8-bit compile time constant.
*************** must be an 8-bit compile time constant.
*** 51939,51945 ****
       void __builtin_arc_vst128 (__v8hi, const int, const int);
       void __builtin_arc_vst64 (__v8hi, const int, const int);
  
!  The following take a '__v8hi' argument and three 'int' arguments and
  return no result.  The second argument must be a 3-bit compile-time
  constant, identifying the 16-bit sub-register to be stored, the third
  argument must be a 3-bit compile time constants, indicating one the
--- 51950,51956 ----
       void __builtin_arc_vst128 (__v8hi, const int, const int);
       void __builtin_arc_vst64 (__v8hi, const int, const int);
  
!  The following take a ‘__v8hi’ argument and three ‘int’ arguments and
  return no result.  The second argument must be a 3-bit compile-time
  constant, identifying the 16-bit sub-register to be stored, the third
  argument must be a 3-bit compile time constants, indicating one the
*************** constant.
*** 51950,51956 ****
       void __builtin_arc_vst32_n (__v8hi, const int, const int, const int);
  
   The following built-in functions are available on systems that uses
! '-mmpy-option=6' or higher.
  
       __v2hi __builtin_arc_dmach (__v2hi, __v2hi);
       __v2hi __builtin_arc_dmachu (__v2hi, __v2hi);
--- 51961,51967 ----
       void __builtin_arc_vst32_n (__v8hi, const int, const int, const int);
  
   The following built-in functions are available on systems that uses
! ‘-mmpy-option=6’ or higher.
  
       __v2hi __builtin_arc_dmach (__v2hi, __v2hi);
       __v2hi __builtin_arc_dmachu (__v2hi, __v2hi);
*************** constant.
*** 51960,51966 ****
       __v2hi __builtin_arc_vsubadd2h (__v2hi, __v2hi);
  
   The following built-in functions are available on systems that uses
! '-mmpy-option=7' or higher.
  
       __v2si __builtin_arc_vmac2h (__v2hi, __v2hi);
       __v2si __builtin_arc_vmac2hu (__v2hi, __v2hi);
--- 51971,51977 ----
       __v2hi __builtin_arc_vsubadd2h (__v2hi, __v2hi);
  
   The following built-in functions are available on systems that uses
! ‘-mmpy-option=7’ or higher.
  
       __v2si __builtin_arc_vmac2h (__v2hi, __v2hi);
       __v2si __builtin_arc_vmac2hu (__v2hi, __v2hi);
*************** constant.
*** 51968,51974 ****
       __v2si __builtin_arc_vmpy2hu (__v2hi, __v2hi);
  
   The following built-in functions are available on systems that uses
! '-mmpy-option=8' or higher.
  
       long long __builtin_arc_qmach (__v4hi, __v4hi);
       long long __builtin_arc_qmachu (__v4hi, __v4hi);
--- 51979,51985 ----
       __v2si __builtin_arc_vmpy2hu (__v2hi, __v2hi);
  
   The following built-in functions are available on systems that uses
! ‘-mmpy-option=8’ or higher.
  
       long long __builtin_arc_qmach (__v4hi, __v4hi);
       long long __builtin_arc_qmachu (__v4hi, __v4hi);
*************** File: gcc.info,  Node: ARM iWMMXt Built-
*** 51988,51994 ****
  ------------------------------------
  
  These built-in functions are available for the ARM family of processors
! when the '-mcpu=iwmmxt' switch is used:
  
       typedef int v2si __attribute__ ((vector_size (8)));
       typedef short v4hi __attribute__ ((vector_size (8)));
--- 51999,52005 ----
  ------------------------------------
  
  These built-in functions are available for the ARM family of processors
! when the ‘-mcpu=iwmmxt’ switch is used:
  
       typedef int v2si __attribute__ ((vector_size (8)));
       typedef short v4hi __attribute__ ((vector_size (8)));
*************** enabled.
*** 52154,52160 ****
  
   Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
  Both back ends support CRC32 intrinsics and the ARM back end supports
! the Coprocessor intrinsics, all from 'arm_acle.h'.  The ARM back end's
  16-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
  v1.1.  AArch64's back end does not have support for 16-bit floating
  point Advanced SIMD intrinsics yet.
--- 52165,52171 ----
  
   Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
  Both back ends support CRC32 intrinsics and the ARM back end supports
! the Coprocessor intrinsics, all from ‘arm_acle.h’.  The ARM back end's
  16-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
  v1.1.  AArch64's back end does not have support for 16-bit floating
  point Advanced SIMD intrinsics yet.
*************** Engineering Specification, which can be
*** 52186,52192 ****
  <https://developer.arm.com/documentation/ecm0359818/latest/>.
  
   As part of the Security Extensions GCC implements two new function
! attributes: 'cmse_nonsecure_entry' and 'cmse_nonsecure_call'.
  
   As part of the Security Extensions GCC implements the intrinsics below.
  FPTR is used here to mean any function pointer type.
--- 52197,52203 ----
  <https://developer.arm.com/documentation/ecm0359818/latest/>.
  
   As part of the Security Extensions GCC implements two new function
! attributes: ‘cmse_nonsecure_entry’ and ‘cmse_nonsecure_call’.
  
   As part of the Security Extensions GCC implements the intrinsics below.
  FPTR is used here to mean any function pointer type.
*************** File: gcc.info,  Node: AVR Built-in Func
*** 52213,52220 ****
  For each built-in function for AVR, there is an equally named, uppercase
  built-in macro defined.  That way users can easily query if or if not a
  specific built-in is implemented or not.  For example, if
! '__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
! defined to '1' and undefined otherwise.
  
   -- Built-in Function: void __builtin_avr_nop (void)
   -- Built-in Function: void __builtin_avr_sei (void)
--- 52224,52231 ----
  For each built-in function for AVR, there is an equally named, uppercase
  built-in macro defined.  That way users can easily query if or if not a
  specific built-in is implemented or not.  For example, if
! ‘__builtin_avr_nop’ is available the macro ‘__BUILTIN_AVR_NOP’ is
! defined to ‘1’ and undefined otherwise.
  
   -- Built-in Function: void __builtin_avr_nop (void)
   -- Built-in Function: void __builtin_avr_sei (void)
*************** defined to '1' and undefined otherwise.
*** 52227,52234 ****
   -- Built-in Function: int16_t __builtin_avr_fmulsu (int8_t, uint8_t)
  
       These built-in functions map to the respective machine instruction,
!      i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 'fmuls'
!      resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
       library call if no hardware multiplier is available.
  
   -- Built-in Function: void __builtin_avr_delay_cycles (uint32_t TICKS)
--- 52238,52245 ----
   -- Built-in Function: int16_t __builtin_avr_fmulsu (int8_t, uint8_t)
  
       These built-in functions map to the respective machine instruction,
!      i.e. ‘nop’, ‘sei’, ‘cli’, ‘sleep’, ‘wdr’, ‘swap’, ‘fmul’, ‘fmuls’
!      resp.  ‘fmulsu’.  The three ‘fmul*’ built-ins are implemented as
       library call if no hardware multiplier is available.
  
   -- Built-in Function: void __builtin_avr_delay_cycles (uint32_t TICKS)
*************** defined to '1' and undefined otherwise.
*** 52240,52261 ****
   -- Built-in Function: int8_t __builtin_avr_flash_segment (const __memx
            void*)
       This built-in takes a byte address to the 24-bit *note address
!      space: AVR Named Address Spaces. '__memx' and returns the number of
       the flash segment (the 64 KiB chunk) where the address points to.
!      Counting starts at '0'.  If the address does not point to flash
!      memory, return '-1'.
  
   -- Built-in Function: uint8_t __builtin_avr_insert_bits (uint32_t MAP,
            uint8_t BITS, uint8_t VAL)
       Insert bits from BITS into VAL and return the resulting value.  The
       nibbles of MAP determine how the insertion is performed: Let X be
       the N-th nibble of MAP
!        1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
  
         2. If X is in the range 0...7, then the N-th result bit is set to
            the X-th bit of BITS
  
!        3. If X is in the range 8...'0xe', then the N-th result bit is
            undefined.
  
       One typical use case for this built-in is adjusting input and
--- 52251,52272 ----
   -- Built-in Function: int8_t __builtin_avr_flash_segment (const __memx
            void*)
       This built-in takes a byte address to the 24-bit *note address
!      space: AVR Named Address Spaces. ‘__memx’ and returns the number of
       the flash segment (the 64 KiB chunk) where the address points to.
!      Counting starts at ‘0’.  If the address does not point to flash
!      memory, return ‘-1’.
  
   -- Built-in Function: uint8_t __builtin_avr_insert_bits (uint32_t MAP,
            uint8_t BITS, uint8_t VAL)
       Insert bits from BITS into VAL and return the resulting value.  The
       nibbles of MAP determine how the insertion is performed: Let X be
       the N-th nibble of MAP
!        1. If X is ‘0xf’, then the N-th bit of VAL is returned unaltered.
  
         2. If X is in the range 0...7, then the N-th result bit is set to
            the X-th bit of BITS
  
!        3. If X is in the range 8...‘0xe’, then the N-th result bit is
            undefined.
  
       One typical use case for this built-in is adjusting input and
*************** defined to '1' and undefined otherwise.
*** 52278,52290 ****
            __builtin_avr_insert_bits (0x01234567, bits, 0);
  
   -- Built-in Function: void __builtin_avr_nops (uint16_t COUNT)
!      Insert COUNT 'NOP' instructions.  The number of instructions must
       be a compile-time integer constant.
  
  There are many more AVR-specific built-in functions that are used to
  implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
  section 7.18a.6.  You don't need to use these built-ins directly.
! Instead, use the declarations as supplied by the 'stdfix.h' header with
  GNU-C99:
  
       #include <stdfix.h>
--- 52289,52301 ----
            __builtin_avr_insert_bits (0x01234567, bits, 0);
  
   -- Built-in Function: void __builtin_avr_nops (uint16_t COUNT)
!      Insert COUNT ‘NOP’ instructions.  The number of instructions must
       be a compile-time integer constant.
  
  There are many more AVR-specific built-in functions that are used to
  implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
  section 7.18a.6.  You don't need to use these built-ins directly.
! Instead, use the declarations as supplied by the ‘stdfix.h’ header with
  GNU-C99:
  
       #include <stdfix.h>
*************** File: gcc.info,  Node: Blackfin Built-in
*** 52303,52309 ****
  -----------------------------------
  
  Currently, there are two Blackfin-specific built-in functions.  These
! are used for generating 'CSYNC' and 'SSYNC' machine insns without using
  inline assembly; by using these built-in functions the compiler can
  automatically add workarounds for hardware errata involving these
  instructions.  These functions are named as follows:
--- 52314,52320 ----
  -----------------------------------
  
  Currently, there are two Blackfin-specific built-in functions.  These
! are used for generating ‘CSYNC’ and ‘SSYNC’ machine insns without using
  inline assembly; by using these built-in functions the compiler can
  automatically add workarounds for hardware errata involving these
  instructions.  These functions are named as follows:
*************** The following built-in functions are ava
*** 52321,52345 ****
  
   -- Built-in Function: unsigned long long __builtin_bpf_load_byte
            (unsigned long long OFFSET)
!      Load a byte from the 'struct sk_buff' packet data pointed to by the
!      register '%r6', and return it.
  
   -- Built-in Function: unsigned long long __builtin_bpf_load_half
            (unsigned long long OFFSET)
!      Load 16 bits from the 'struct sk_buff' packet data pointed to by
!      the register '%r6', and return it.
  
   -- Built-in Function: unsigned long long __builtin_bpf_load_word
            (unsigned long long OFFSET)
!      Load 32 bits from the 'struct sk_buff' packet data pointed to by
!      the register '%r6', and return it.
  
   -- Built-in Function: TYPE __builtin_preserve_access_index (TYPE EXPR)
       BPF Compile Once-Run Everywhere (CO-RE) support.  Instruct GCC to
       generate CO-RE relocation records for any accesses to aggregate
       data structures (struct, union, array types) in EXPR.  This builtin
       is otherwise transparent; EXPR may have any type and its value is
!      returned.  This builtin has no effect if '-mco-re' is not in effect
       (either specified or implied).
  
   -- Built-in Function: unsigned int __builtin_preserve_field_info (EXPR,
--- 52332,52356 ----
  
   -- Built-in Function: unsigned long long __builtin_bpf_load_byte
            (unsigned long long OFFSET)
!      Load a byte from the ‘struct sk_buff’ packet data pointed to by the
!      register ‘%r6’, and return it.
  
   -- Built-in Function: unsigned long long __builtin_bpf_load_half
            (unsigned long long OFFSET)
!      Load 16 bits from the ‘struct sk_buff’ packet data pointed to by
!      the register ‘%r6’, and return it.
  
   -- Built-in Function: unsigned long long __builtin_bpf_load_word
            (unsigned long long OFFSET)
!      Load 32 bits from the ‘struct sk_buff’ packet data pointed to by
!      the register ‘%r6’, and return it.
  
   -- Built-in Function: TYPE __builtin_preserve_access_index (TYPE EXPR)
       BPF Compile Once-Run Everywhere (CO-RE) support.  Instruct GCC to
       generate CO-RE relocation records for any accesses to aggregate
       data structures (struct, union, array types) in EXPR.  This builtin
       is otherwise transparent; EXPR may have any type and its value is
!      returned.  This builtin has no effect if ‘-mco-re’ is not in effect
       (either specified or implied).
  
   -- Built-in Function: unsigned int __builtin_preserve_field_info (EXPR,
*************** The following built-in functions are ava
*** 52349,52389 ****
       EXPR is an access to a field of a struct or union.  Depending on
       KIND, different information is returned to the program.  A CO-RE
       relocation for the access in EXPR with kind KIND is recorded if
!      '-mco-re' is in effect.
  
       The following values are supported for KIND:
!      'FIELD_BYTE_OFFSET = 0'
            The returned value is the offset, in bytes, of the field from
            the beginning of the containing structure.  For bit-fields,
            this is the byte offset of the containing word.
  
!      'FIELD_BYTE_SIZE = 1'
            The returned value is the size, in bytes, of the field.  For
            bit-fields, this is the size in bytes of the containing word.
  
!      'FIELD_EXISTENCE = 2'
            The returned value is 1 if the field exists, 0 otherwise.
            Always 1 at compile time.
  
!      'FIELD_SIGNEDNESS = 3'
            The returned value is 1 if the field is signed, 0 otherwise.
  
!      'FIELD_LSHIFT_U64 = 4'
!      'FIELD_RSHIFT_U64 = 5'
            The returned value is the number of bits of left- or
            right-shifting (respectively) needed in order to recover the
            original value of the field, after it has been loaded by a
!           read of 'FIELD_BYTE_SIZE' bytes into an unsigned 64-bit value.
            Primarily useful for reading bit-field values from structures
            that may change between kernel versions.
  
       Note that the return value is a constant which is known at compile
!      time.  If the field has a variable offset then 'FIELD_BYTE_OFFSET',
!      'FIELD_LSHIFT_U64', and 'FIELD_RSHIFT_U64' are not supported.
!      Similarly, if the field has a variable size then 'FIELD_BYTE_SIZE',
!      'FIELD_LSHIFT_U64', and 'FIELD_RSHIFT_U64' are not supported.
  
!      For example, '__builtin_preserve_field_info' can be used to
       reliably extract bit-field values from a structure that may change
       between kernel versions:
  
--- 52360,52400 ----
       EXPR is an access to a field of a struct or union.  Depending on
       KIND, different information is returned to the program.  A CO-RE
       relocation for the access in EXPR with kind KIND is recorded if
!      ‘-mco-re’ is in effect.
  
       The following values are supported for KIND:
!      ‘FIELD_BYTE_OFFSET = 0’
            The returned value is the offset, in bytes, of the field from
            the beginning of the containing structure.  For bit-fields,
            this is the byte offset of the containing word.
  
!      ‘FIELD_BYTE_SIZE = 1’
            The returned value is the size, in bytes, of the field.  For
            bit-fields, this is the size in bytes of the containing word.
  
!      ‘FIELD_EXISTENCE = 2’
            The returned value is 1 if the field exists, 0 otherwise.
            Always 1 at compile time.
  
!      ‘FIELD_SIGNEDNESS = 3’
            The returned value is 1 if the field is signed, 0 otherwise.
  
!      ‘FIELD_LSHIFT_U64 = 4’
!      ‘FIELD_RSHIFT_U64 = 5’
            The returned value is the number of bits of left- or
            right-shifting (respectively) needed in order to recover the
            original value of the field, after it has been loaded by a
!           read of ‘FIELD_BYTE_SIZE’ bytes into an unsigned 64-bit value.
            Primarily useful for reading bit-field values from structures
            that may change between kernel versions.
  
       Note that the return value is a constant which is known at compile
!      time.  If the field has a variable offset then ‘FIELD_BYTE_OFFSET’,
!      ‘FIELD_LSHIFT_U64’, and ‘FIELD_RSHIFT_U64’ are not supported.
!      Similarly, if the field has a variable size then ‘FIELD_BYTE_SIZE’,
!      ‘FIELD_LSHIFT_U64’, and ‘FIELD_RSHIFT_U64’ are not supported.
  
!      For example, ‘__builtin_preserve_field_info’ can be used to
       reliably extract bit-field values from a structure that may change
       between kernel versions:
  
*************** The following built-in functions are ava
*** 52426,52436 ****
       performed.
  
       The following values are supported for KIND:
!      'ENUM_VALUE_EXISTS = 0'
            The return value is either 0 or 1 depending if the enum value
            exists in the target.
  
!      'ENUM_VALUE = 1'
            The return value is the enum value in the target kernel.
  
   -- Built-in Function: unsigned int __builtin_btf_type_id (TYPE,
--- 52437,52447 ----
       performed.
  
       The following values are supported for KIND:
!      ‘ENUM_VALUE_EXISTS = 0’
            The return value is either 0 or 1 depending if the enum value
            exists in the target.
  
!      ‘ENUM_VALUE = 1’
            The return value is the enum value in the target kernel.
  
   -- Built-in Function: unsigned int __builtin_btf_type_id (TYPE,
*************** The following built-in functions are ava
*** 52441,52450 ****
       information, or the BTF type ID in the target kernel.
  
       The following values are supported for KIND:
!      'BTF_TYPE_ID_LOCAL = 0'
            Return the local BTF type ID. Always succeeds.
  
!      'BTF_TYPE_ID_TARGET = 1'
            Return the target BTF type ID. If TYPE does not exist in the
            target, returns 0.
  
--- 52452,52461 ----
       information, or the BTF type ID in the target kernel.
  
       The following values are supported for KIND:
!      ‘BTF_TYPE_ID_LOCAL = 0’
            Return the local BTF type ID. Always succeeds.
  
!      ‘BTF_TYPE_ID_TARGET = 1’
            Return the target BTF type ID. If TYPE does not exist in the
            target, returns 0.
  
*************** The following built-in functions are ava
*** 52457,52470 ****
       kernel.
  
       The following values are supported for KIND:
!      'BTF_TYPE_EXISTS = 0'
            Checks if TYPE exists in the target.
  
!      'BTF_TYPE_MATCHES = 1'
            Checks if TYPE matches the local definition in the target
            kernel.
  
!      'BTF_TYPE_SIZE = 2'
            Returns the size of the TYPE within the target.
  
  
--- 52468,52481 ----
       kernel.
  
       The following values are supported for KIND:
!      ‘BTF_TYPE_EXISTS = 0’
            Checks if TYPE exists in the target.
  
!      ‘BTF_TYPE_MATCHES = 1’
            Checks if TYPE matches the local definition in the target
            kernel.
  
!      ‘BTF_TYPE_SIZE = 2’
            Returns the size of the TYPE within the target.
  
  
*************** File: gcc.info,  Node: FR-V Built-in Fun
*** 52474,52482 ****
  -------------------------------
  
  GCC provides many FR-V-specific built-in functions.  In general, these
! functions are intended to be compatible with those described by 'FR-V
! Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
! two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
  pass 128-bit values by pointer rather than by value.
  
   Most of the functions are named after specific FR-V instructions.  Such
--- 52485,52493 ----
  -------------------------------
  
  GCC provides many FR-V-specific built-in functions.  In general, these
! functions are intended to be compatible with those described by ‘FR-V
! Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor’.  The
! two exceptions are ‘__MDUNPACKH’ and ‘__MBTOHE’, the GCC forms of which
  pass 128-bit values by pointer rather than by value.
  
   Most of the functions are named after specific FR-V instructions.  Such
*************** and return values are given the followin
*** 52504,52533 ****
  
  Pseudo type    Real C type            Constant?   Description
  ----------------------------------------------------------------------------
! 'uh'           'unsigned short'       No          an unsigned halfword
! 'uw1'          'unsigned int'         No          an unsigned word
! 'sw1'          'int'                  No          a signed word
! 'uw2'          'unsigned long long'   No          an unsigned doubleword
! 'sw2'          'long long'            No          a signed doubleword
! 'const'        'int'                  Yes         an integer constant
! 'acc'          'int'                  Yes         an ACC register number
! 'iacc'         'int'                  Yes         an IACC register number
  
   These pseudo types are not defined by GCC, they are simply a notational
  convenience used in this manual.
  
!  Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
  run time.  They correspond to register operands in the underlying FR-V
  instructions.
  
!  'const' arguments represent immediate operands in the underlying FR-V
  instructions.  They must be compile-time constants.
  
!  'acc' arguments are evaluated at compile time and specify the number of
! an accumulator register.  For example, an 'acc' argument of 2 selects
  the ACC2 register.
  
!  'iacc' arguments are similar to 'acc' arguments but specify the number
  of an IACC register.  See *note Other Built-in Functions:: for more
  details.
  
--- 52515,52544 ----
  
  Pseudo type    Real C type            Constant?   Description
  ----------------------------------------------------------------------------
! ‘uh’           ‘unsigned short’       No          an unsigned halfword
! ‘uw1’          ‘unsigned int’         No          an unsigned word
! ‘sw1’          ‘int’                  No          a signed word
! ‘uw2’          ‘unsigned long long’   No          an unsigned doubleword
! ‘sw2’          ‘long long’            No          a signed doubleword
! ‘const’        ‘int’                  Yes         an integer constant
! ‘acc’          ‘int’                  Yes         an ACC register number
! ‘iacc’         ‘int’                  Yes         an IACC register number
  
   These pseudo types are not defined by GCC, they are simply a notational
  convenience used in this manual.
  
!  Arguments of type ‘uh’, ‘uw1’, ‘sw1’, ‘uw2’ and ‘sw2’ are evaluated at
  run time.  They correspond to register operands in the underlying FR-V
  instructions.
  
!  ‘const’ arguments represent immediate operands in the underlying FR-V
  instructions.  They must be compile-time constants.
  
!  ‘acc’ arguments are evaluated at compile time and specify the number of
! an accumulator register.  For example, an ‘acc’ argument of 2 selects
  the ACC2 register.
  
!  ‘iacc’ arguments are similar to ‘acc’ arguments but specify the number
  of an IACC register.  See *note Other Built-in Functions:: for more
  details.
  
*************** The functions listed below map directly
*** 52541,52556 ****
  
  Function prototype               Example usage           Assembly output
  ---------------------------------------------------------------------------
! 'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
! 'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
! 'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
! 'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
! 'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
! 'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
! 'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
! 'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
! 'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
! 'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
  
  
  File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
--- 52552,52567 ----
  
  Function prototype               Example usage           Assembly output
  ---------------------------------------------------------------------------
! ‘sw1 __ADDSS (sw1, sw1)’         ‘C = __ADDSS (A, B)’    ‘ADDSS A,B,C’
! ‘sw1 __SCAN (sw1, sw1)’          ‘C = __SCAN (A, B)’     ‘SCAN A,B,C’
! ‘sw1 __SCUTSS (sw1)’             ‘B = __SCUTSS (A)’      ‘SCUTSS A,B’
! ‘sw1 __SLASS (sw1, sw1)’         ‘C = __SLASS (A, B)’    ‘SLASS A,B,C’
! ‘void __SMASS (sw1, sw1)’        ‘__SMASS (A, B)’        ‘SMASS A,B’
! ‘void __SMSSS (sw1, sw1)’        ‘__SMSSS (A, B)’        ‘SMSSS A,B’
! ‘void __SMU (sw1, sw1)’          ‘__SMU (A, B)’          ‘SMU A,B’
! ‘sw2 __SMUL (sw1, sw1)’          ‘C = __SMUL (A, B)’     ‘SMUL A,B,C’
! ‘sw1 __SUBSS (sw1, sw1)’         ‘C = __SUBSS (A, B)’    ‘SUBSS A,B,C’
! ‘uw2 __UMUL (uw1, uw1)’          ‘C = __UMUL (A, B)’     ‘UMUL A,B,C’
  
  
  File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
*************** The functions listed below map directly
*** 52562,52704 ****
  
  Function prototype               Example usage           Assembly output
  ---------------------------------------------------------------------------
! 'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
! 'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
! 'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
!                                  B)'
! 'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
!                                  B)'
! 'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
! 'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
! 'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
! 'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
! 'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
! 'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
! 'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
! 'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
! 'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
! 'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
! 'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
! 'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
! sw1)'
! 'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
! uw1)'
! 'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
! sw1)'
! 'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
! uw1)'
! 'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
! 'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
! 'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
! 'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
! 'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
!                                  B)'                     A,#B,C'
! 'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
!                                  B)'
! 'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
!                                  B)'                     A,#B,C'
! 'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
! 'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
! uw2)'
! 'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
!                                  B)'                     A,#B,C'
! 'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
!                                  B)'                     A,#B,C'
! 'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
!                                  B)'                     A,#B,C'
! 'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
! 'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
!                                  A)'
! 'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
!                                  A)'
! 'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
!                                  A)'
! 'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
!                                  A)'
! 'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
! 'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
! sw1)'
! 'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
! uw1)'
! 'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
! sw1)'
! 'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
! uw1)'
! 'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
! sw1)'
! 'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
! uw1)'
! 'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
! sw1)'
! 'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
! uw1)'
! 'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
! 'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
! 'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
! 'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
!                                  B)'                     A,B,C'
! 'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
!                                  B)'                     A,B,C'
! 'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
! sw2)'
! 'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
! uw2)'
! 'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
! sw2)'
! 'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
! uw2)'
! 'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
!                                  B)'                     A,B,C'
! 'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
!                                  B)'
! 'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
! sw2)'
! 'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
! uw2)'
! 'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
! sw2)'                            B)'                     A,B,C'
! 'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
! sw2)'
! 'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
! uw2)'
! 'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
! sw2)'                            B)'                     A,B,C'
! 'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
! uw2)'                            B)'                     A,B,C'
! 'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
!                                  B)'
! 'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
!                                  B)'
! 'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
!                                  B)'
! 'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
!                                  B)'                     A,B,C'
! 'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
!                                  B)'                     A,B,C'
! 'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
! sw2)'                            B)'                     A,B,C'
! 'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
! sw2)'                            B)'                     A,B,C'
! 'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
! 'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
! 'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
! 'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
! 'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
! 'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
! 'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
! 'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
! 'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
! 'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
! 'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
!                                  B)'
! 'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
!                                  B)'
! 'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
! 'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
! 'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
! 'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
! 'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
! 'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
  
  
  File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
--- 52573,52715 ----
  
  Function prototype               Example usage           Assembly output
  ---------------------------------------------------------------------------
! ‘uw1 __MABSHS (sw1)’             ‘B = __MABSHS (A)’      ‘MABSHS A,B’
! ‘void __MADDACCS (acc, acc)’     ‘__MADDACCS (B, A)’     ‘MADDACCS A,B’
! ‘sw1 __MADDHSS (sw1, sw1)’       ‘C = __MADDHSS (A,      ‘MADDHSS A,B,C’
!                                  B)’
! ‘uw1 __MADDHUS (uw1, uw1)’       ‘C = __MADDHUS (A,      ‘MADDHUS A,B,C’
!                                  B)’
! ‘uw1 __MAND (uw1, uw1)’          ‘C = __MAND (A, B)’     ‘MAND A,B,C’
! ‘void __MASACCS (acc, acc)’      ‘__MASACCS (B, A)’      ‘MASACCS A,B’
! ‘uw1 __MAVEH (uw1, uw1)’         ‘C = __MAVEH (A, B)’    ‘MAVEH A,B,C’
! ‘uw2 __MBTOH (uw1)’              ‘B = __MBTOH (A)’       ‘MBTOH A,B’
! ‘void __MBTOHE (uw1 *, uw1)’     ‘__MBTOHE (&B, A)’      ‘MBTOHE A,B’
! ‘void __MCLRACC (acc)’           ‘__MCLRACC (A)’         ‘MCLRACC A’
! ‘void __MCLRACCA (void)’         ‘__MCLRACCA ()’         ‘MCLRACCA’
! ‘uw1 __Mcop1 (uw1, uw1)’         ‘C = __Mcop1 (A, B)’    ‘Mcop1 A,B,C’
! ‘uw1 __Mcop2 (uw1, uw1)’         ‘C = __Mcop2 (A, B)’    ‘Mcop2 A,B,C’
! ‘uw1 __MCPLHI (uw2, const)’      ‘C = __MCPLHI (A, B)’   ‘MCPLHI A,#B,C’
! ‘uw1 __MCPLI (uw2, const)’       ‘C = __MCPLI (A, B)’    ‘MCPLI A,#B,C’
! ‘void __MCPXIS (acc, sw1,        ‘__MCPXIS (C, A, B)’    ‘MCPXIS A,B,C’
! sw1)’
! ‘void __MCPXIU (acc, uw1,        ‘__MCPXIU (C, A, B)’    ‘MCPXIU A,B,C’
! uw1)’
! ‘void __MCPXRS (acc, sw1,        ‘__MCPXRS (C, A, B)’    ‘MCPXRS A,B,C’
! sw1)’
! ‘void __MCPXRU (acc, uw1,        ‘__MCPXRU (C, A, B)’    ‘MCPXRU A,B,C’
! uw1)’
! ‘uw1 __MCUT (acc, uw1)’          ‘C = __MCUT (A, B)’     ‘MCUT A,B,C’
! ‘uw1 __MCUTSS (acc, sw1)’        ‘C = __MCUTSS (A, B)’   ‘MCUTSS A,B,C’
! ‘void __MDADDACCS (acc, acc)’    ‘__MDADDACCS (B, A)’    ‘MDADDACCS A,B’
! ‘void __MDASACCS (acc, acc)’     ‘__MDASACCS (B, A)’     ‘MDASACCS A,B’
! ‘uw2 __MDCUTSSI (acc, const)’    ‘C = __MDCUTSSI (A,     ‘MDCUTSSI
!                                  B)’                     A,#B,C’
! ‘uw2 __MDPACKH (uw2, uw2)’       ‘C = __MDPACKH (A,      ‘MDPACKH A,B,C’
!                                  B)’
! ‘uw2 __MDROTLI (uw2, const)’     ‘C = __MDROTLI (A,      ‘MDROTLI
!                                  B)’                     A,#B,C’
! ‘void __MDSUBACCS (acc, acc)’    ‘__MDSUBACCS (B, A)’    ‘MDSUBACCS A,B’
! ‘void __MDUNPACKH (uw1 *,        ‘__MDUNPACKH (&B, A)’   ‘MDUNPACKH A,B’
! uw2)’
! ‘uw2 __MEXPDHD (uw1, const)’     ‘C = __MEXPDHD (A,      ‘MEXPDHD
!                                  B)’                     A,#B,C’
! ‘uw1 __MEXPDHW (uw1, const)’     ‘C = __MEXPDHW (A,      ‘MEXPDHW
!                                  B)’                     A,#B,C’
! ‘uw1 __MHDSETH (uw1, const)’     ‘C = __MHDSETH (A,      ‘MHDSETH
!                                  B)’                     A,#B,C’
! ‘sw1 __MHDSETS (const)’          ‘B = __MHDSETS (A)’     ‘MHDSETS #A,B’
! ‘uw1 __MHSETHIH (uw1, const)’    ‘B = __MHSETHIH (B,     ‘MHSETHIH #A,B’
!                                  A)’
! ‘sw1 __MHSETHIS (sw1, const)’    ‘B = __MHSETHIS (B,     ‘MHSETHIS #A,B’
!                                  A)’
! ‘uw1 __MHSETLOH (uw1, const)’    ‘B = __MHSETLOH (B,     ‘MHSETLOH #A,B’
!                                  A)’
! ‘sw1 __MHSETLOS (sw1, const)’    ‘B = __MHSETLOS (B,     ‘MHSETLOS #A,B’
!                                  A)’
! ‘uw1 __MHTOB (uw2)’              ‘B = __MHTOB (A)’       ‘MHTOB A,B’
! ‘void __MMACHS (acc, sw1,        ‘__MMACHS (C, A, B)’    ‘MMACHS A,B,C’
! sw1)’
! ‘void __MMACHU (acc, uw1,        ‘__MMACHU (C, A, B)’    ‘MMACHU A,B,C’
! uw1)’
! ‘void __MMRDHS (acc, sw1,        ‘__MMRDHS (C, A, B)’    ‘MMRDHS A,B,C’
! sw1)’
! ‘void __MMRDHU (acc, uw1,        ‘__MMRDHU (C, A, B)’    ‘MMRDHU A,B,C’
! uw1)’
! ‘void __MMULHS (acc, sw1,        ‘__MMULHS (C, A, B)’    ‘MMULHS A,B,C’
! sw1)’
! ‘void __MMULHU (acc, uw1,        ‘__MMULHU (C, A, B)’    ‘MMULHU A,B,C’
! uw1)’
! ‘void __MMULXHS (acc, sw1,       ‘__MMULXHS (C, A, B)’   ‘MMULXHS A,B,C’
! sw1)’
! ‘void __MMULXHU (acc, uw1,       ‘__MMULXHU (C, A, B)’   ‘MMULXHU A,B,C’
! uw1)’
! ‘uw1 __MNOT (uw1)’               ‘B = __MNOT (A)’        ‘MNOT A,B’
! ‘uw1 __MOR (uw1, uw1)’           ‘C = __MOR (A, B)’      ‘MOR A,B,C’
! ‘uw1 __MPACKH (uh, uh)’          ‘C = __MPACKH (A, B)’   ‘MPACKH A,B,C’
! ‘sw2 __MQADDHSS (sw2, sw2)’      ‘C = __MQADDHSS (A,     ‘MQADDHSS
!                                  B)’                     A,B,C’
! ‘uw2 __MQADDHUS (uw2, uw2)’      ‘C = __MQADDHUS (A,     ‘MQADDHUS
!                                  B)’                     A,B,C’
! ‘void __MQCPXIS (acc, sw2,       ‘__MQCPXIS (C, A, B)’   ‘MQCPXIS A,B,C’
! sw2)’
! ‘void __MQCPXIU (acc, uw2,       ‘__MQCPXIU (C, A, B)’   ‘MQCPXIU A,B,C’
! uw2)’
! ‘void __MQCPXRS (acc, sw2,       ‘__MQCPXRS (C, A, B)’   ‘MQCPXRS A,B,C’
! sw2)’
! ‘void __MQCPXRU (acc, uw2,       ‘__MQCPXRU (C, A, B)’   ‘MQCPXRU A,B,C’
! uw2)’
! ‘sw2 __MQLCLRHS (sw2, sw2)’      ‘C = __MQLCLRHS (A,     ‘MQLCLRHS
!                                  B)’                     A,B,C’
! ‘sw2 __MQLMTHS (sw2, sw2)’       ‘C = __MQLMTHS (A,      ‘MQLMTHS A,B,C’
!                                  B)’
! ‘void __MQMACHS (acc, sw2,       ‘__MQMACHS (C, A, B)’   ‘MQMACHS A,B,C’
! sw2)’
! ‘void __MQMACHU (acc, uw2,       ‘__MQMACHU (C, A, B)’   ‘MQMACHU A,B,C’
! uw2)’
! ‘void __MQMACXHS (acc, sw2,      ‘__MQMACXHS (C, A,      ‘MQMACXHS
! sw2)’                            B)’                     A,B,C’
! ‘void __MQMULHS (acc, sw2,       ‘__MQMULHS (C, A, B)’   ‘MQMULHS A,B,C’
! sw2)’
! ‘void __MQMULHU (acc, uw2,       ‘__MQMULHU (C, A, B)’   ‘MQMULHU A,B,C’
! uw2)’
! ‘void __MQMULXHS (acc, sw2,      ‘__MQMULXHS (C, A,      ‘MQMULXHS
! sw2)’                            B)’                     A,B,C’
! ‘void __MQMULXHU (acc, uw2,      ‘__MQMULXHU (C, A,      ‘MQMULXHU
! uw2)’                            B)’                     A,B,C’
! ‘sw2 __MQSATHS (sw2, sw2)’       ‘C = __MQSATHS (A,      ‘MQSATHS A,B,C’
!                                  B)’
! ‘uw2 __MQSLLHI (uw2, int)’       ‘C = __MQSLLHI (A,      ‘MQSLLHI A,B,C’
!                                  B)’
! ‘sw2 __MQSRAHI (sw2, int)’       ‘C = __MQSRAHI (A,      ‘MQSRAHI A,B,C’
!                                  B)’
! ‘sw2 __MQSUBHSS (sw2, sw2)’      ‘C = __MQSUBHSS (A,     ‘MQSUBHSS
!                                  B)’                     A,B,C’
! ‘uw2 __MQSUBHUS (uw2, uw2)’      ‘C = __MQSUBHUS (A,     ‘MQSUBHUS
!                                  B)’                     A,B,C’
! ‘void __MQXMACHS (acc, sw2,      ‘__MQXMACHS (C, A,      ‘MQXMACHS
! sw2)’                            B)’                     A,B,C’
! ‘void __MQXMACXHS (acc, sw2,     ‘__MQXMACXHS (C, A,     ‘MQXMACXHS
! sw2)’                            B)’                     A,B,C’
! ‘uw1 __MRDACC (acc)’             ‘B = __MRDACC (A)’      ‘MRDACC A,B’
! ‘uw1 __MRDACCG (acc)’            ‘B = __MRDACCG (A)’     ‘MRDACCG A,B’
! ‘uw1 __MROTLI (uw1, const)’      ‘C = __MROTLI (A, B)’   ‘MROTLI A,#B,C’
! ‘uw1 __MROTRI (uw1, const)’      ‘C = __MROTRI (A, B)’   ‘MROTRI A,#B,C’
! ‘sw1 __MSATHS (sw1, sw1)’        ‘C = __MSATHS (A, B)’   ‘MSATHS A,B,C’
! ‘uw1 __MSATHU (uw1, uw1)’        ‘C = __MSATHU (A, B)’   ‘MSATHU A,B,C’
! ‘uw1 __MSLLHI (uw1, const)’      ‘C = __MSLLHI (A, B)’   ‘MSLLHI A,#B,C’
! ‘sw1 __MSRAHI (sw1, const)’      ‘C = __MSRAHI (A, B)’   ‘MSRAHI A,#B,C’
! ‘uw1 __MSRLHI (uw1, const)’      ‘C = __MSRLHI (A, B)’   ‘MSRLHI A,#B,C’
! ‘void __MSUBACCS (acc, acc)’     ‘__MSUBACCS (B, A)’     ‘MSUBACCS A,B’
! ‘sw1 __MSUBHSS (sw1, sw1)’       ‘C = __MSUBHSS (A,      ‘MSUBHSS A,B,C’
!                                  B)’
! ‘uw1 __MSUBHUS (uw1, uw1)’       ‘C = __MSUBHUS (A,      ‘MSUBHUS A,B,C’
!                                  B)’
! ‘void __MTRAP (void)’            ‘__MTRAP ()’            ‘MTRAP’
! ‘uw2 __MUNPACKH (uw1)’           ‘B = __MUNPACKH (A)’    ‘MUNPACKH A,B’
! ‘uw1 __MWCUT (uw2, uw1)’         ‘C = __MWCUT (A, B)’    ‘MWCUT A,B,C’
! ‘void __MWTACC (acc, uw1)’       ‘__MWTACC (B, A)’       ‘MWTACC A,B’
! ‘void __MWTACCG (acc, uw1)’      ‘__MWTACCG (B, A)’      ‘MWTACCG A,B’
! ‘uw1 __MXOR (uw1, uw1)’          ‘C = __MXOR (A, B)’     ‘MXOR A,B,C’
  
  
  File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
*************** File: gcc.info,  Node: Raw read/write Fu
*** 52707,52725 ****
  ..................................
  
  This sections describes built-in functions related to read and write
! instructions to access memory.  These functions generate 'membar'
  instructions to flush the I/O load and stores where appropriate, as
  described in Fujitsu's manual described above.
  
! 'unsigned char __builtin_read8 (void *DATA)'
! 'unsigned short __builtin_read16 (void *DATA)'
! 'unsigned long __builtin_read32 (void *DATA)'
! 'unsigned long long __builtin_read64 (void *DATA)'
  
! 'void __builtin_write8 (void *DATA, unsigned char DATUM)'
! 'void __builtin_write16 (void *DATA, unsigned short DATUM)'
! 'void __builtin_write32 (void *DATA, unsigned long DATUM)'
! 'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
  
  
  File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
--- 52718,52736 ----
  ..................................
  
  This sections describes built-in functions related to read and write
! instructions to access memory.  These functions generate ‘membar’
  instructions to flush the I/O load and stores where appropriate, as
  described in Fujitsu's manual described above.
  
! ‘unsigned char __builtin_read8 (void *DATA)’
! ‘unsigned short __builtin_read16 (void *DATA)’
! ‘unsigned long __builtin_read32 (void *DATA)’
! ‘unsigned long long __builtin_read64 (void *DATA)’
  
! ‘void __builtin_write8 (void *DATA, unsigned char DATUM)’
! ‘void __builtin_write16 (void *DATA, unsigned short DATUM)’
! ‘void __builtin_write32 (void *DATA, unsigned long DATUM)’
! ‘void __builtin_write64 (void *DATA, unsigned long long DATUM)’
  
  
  File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
*************** File: gcc.info,  Node: Other Built-in Fu
*** 52730,52757 ****
  This section describes built-in functions that are not named after a
  specific FR-V instruction.
  
! 'sw2 __IACCreadll (iacc REG)'
       Return the full 64-bit value of IACC0.  The REG argument is
       reserved for future expansion and must be 0.
  
! 'sw1 __IACCreadl (iacc REG)'
       Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
       Other values of REG are rejected as invalid.
  
! 'void __IACCsetll (iacc REG, sw2 X)'
       Set the full 64-bit value of IACC0 to X.  The REG argument is
       reserved for future expansion and must be 0.
  
! 'void __IACCsetl (iacc REG, sw1 X)'
       Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
       values of REG are rejected as invalid.
  
! 'void __data_prefetch0 (const void *X)'
!      Use the 'dcpl' instruction to load the contents of address X into
       the data cache.
  
! 'void __data_prefetch (const void *X)'
!      Use the 'nldub' instruction to load the contents of address X into
       the data cache.  The instruction is issued in slot I1.
  
  
--- 52741,52768 ----
  This section describes built-in functions that are not named after a
  specific FR-V instruction.
  
! ‘sw2 __IACCreadll (iacc REG)’
       Return the full 64-bit value of IACC0.  The REG argument is
       reserved for future expansion and must be 0.
  
! ‘sw1 __IACCreadl (iacc REG)’
       Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
       Other values of REG are rejected as invalid.
  
! ‘void __IACCsetll (iacc REG, sw2 X)’
       Set the full 64-bit value of IACC0 to X.  The REG argument is
       reserved for future expansion and must be 0.
  
! ‘void __IACCsetl (iacc REG, sw1 X)’
       Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
       values of REG are rejected as invalid.
  
! ‘void __data_prefetch0 (const void *X)’
!      Use the ‘dcpl’ instruction to load the contents of address X into
       the data cache.
  
! ‘void __data_prefetch (const void *X)’
!      Use the ‘nldub’ instruction to load the contents of address X into
       the data cache.  The instruction is issued in slot I1.
  
  
*************** File: gcc.info,  Node: LoongArch Base Bu
*** 52763,52772 ****
  These built-in functions are available for LoongArch.
  
   Data Type Description:
!    * 'imm0_31', a compile-time constant in range 0 to 31;
!    * 'imm0_16383', a compile-time constant in range 0 to 16383;
!    * 'imm0_32767', a compile-time constant in range 0 to 32767;
!    * 'imm_n2048_2047', a compile-time constant in range -2048 to 2047;
  
   The intrinsics provided are listed below:
           unsigned int __builtin_loongarch_movfcsr2gr (imm0_31)
--- 52774,52783 ----
  These built-in functions are available for LoongArch.
  
   Data Type Description:
!    • ‘imm0_31’, a compile-time constant in range 0 to 31;
!    • ‘imm0_16383’, a compile-time constant in range 0 to 16383;
!    • ‘imm0_32767’, a compile-time constant in range 0 to 32767;
!    • ‘imm_n2048_2047’, a compile-time constant in range -2048 to 2047;
  
   The intrinsics provided are listed below:
           unsigned int __builtin_loongarch_movfcsr2gr (imm0_31)
*************** These built-in functions are available f
*** 52809,52815 ****
           void __builtin_loongarch_syscall (imm0_32767)
           void __builtin_loongarch_break (imm0_32767)
  
!  These instrisic functions are available by using '-mfrecipe'.
           float __builtin_loongarch_frecipe_s (float);
           double  __builtin_loongarch_frecipe_d (double);
           float __builtin_loongarch_frsqrte_s (float);
--- 52820,52826 ----
           void __builtin_loongarch_syscall (imm0_32767)
           void __builtin_loongarch_break (imm0_32767)
  
!  These instrisic functions are available by using ‘-mfrecipe’.
           float __builtin_loongarch_frecipe_s (float);
           double  __builtin_loongarch_frecipe_d (double);
           float __builtin_loongarch_frsqrte_s (float);
*************** implemented as follows:
*** 52825,52833 ****
         __builtin_loongarch_csrrd_d  // When reading the 64-bit control register use.
  
   For the convenience of use, the built-in functions are encapsulated,
! the encapsulated functions and '__drdtime_t, __rdtime_t' are defined in
! the 'larchintrin.h'.  So if you call the following function you need to
! include 'larchintrin.h'.
  
            typedef struct drdtime{
                   unsigned long dvalue;
--- 52836,52844 ----
         __builtin_loongarch_csrrd_d  // When reading the 64-bit control register use.
  
   For the convenience of use, the built-in functions are encapsulated,
! the encapsulated functions and ‘__drdtime_t, __rdtime_t’ are defined in
! the ‘larchintrin.h’.  So if you call the following function you need to
! include ‘larchintrin.h’.
  
            typedef struct drdtime{
                   unsigned long dvalue;
*************** include 'larchintrin.h'.
*** 52882,52889 ****
           void __syscall (imm0_32767)
           void __break (imm0_32767)
  
!  These instrisic functions are available by including 'larchintrin.h'
! and using '-mfrecipe'.
           float __frecipe_s (float);
           double __frecipe_d (double);
           float __frsqrte_s (float);
--- 52893,52900 ----
           void __syscall (imm0_32767)
           void __break (imm0_32767)
  
!  These instrisic functions are available by including ‘larchintrin.h’
! and using ‘-mfrecipe’.
           float __frecipe_s (float);
           double __frecipe_d (double);
           float __frsqrte_s (float);
*************** values.
*** 52901,52907 ****
       __float128 __builtin_nanq (void);
       __float128 __builtin_nansq (void);
  
!  Returns the value that is currently set in the 'tp' register.
           void * __builtin_thread_pointer (void)
  
  
--- 52912,52918 ----
       __float128 __builtin_nanq (void);
       __float128 __builtin_nansq (void);
  
!  Returns the value that is currently set in the ‘tp’ register.
           void * __builtin_thread_pointer (void)
  
  
*************** File: gcc.info,  Node: LoongArch SX Vect
*** 52912,52944 ****
  
  GCC provides intrinsics to access the LSX (Loongson SIMD Extension)
  instructions.  The interface is made available by including
! '<lsxintrin.h>' and using '-mlsx'.
  
!  The following vectors typedefs are included in 'lsxintrin.h':
  
!    * '__m128i', a 128-bit vector of fixed point;
!    * '__m128', a 128-bit vector of single precision floating point;
!    * '__m128d', a 128-bit vector of double precision floating point.
  
   Instructions and corresponding built-ins may have additional
  restrictions and/or input/output values manipulated:
!    * 'imm0_1', an integer literal in range 0 to 1;
!    * 'imm0_3', an integer literal in range 0 to 3;
!    * 'imm0_7', an integer literal in range 0 to 7;
!    * 'imm0_15', an integer literal in range 0 to 15;
!    * 'imm0_31', an integer literal in range 0 to 31;
!    * 'imm0_63', an integer literal in range 0 to 63;
!    * 'imm0_127', an integer literal in range 0 to 127;
!    * 'imm0_255', an integer literal in range 0 to 255;
!    * 'imm_n16_15', an integer literal in range -16 to 15;
!    * 'imm_n128_127', an integer literal in range -128 to 127;
!    * 'imm_n256_255', an integer literal in range -256 to 255;
!    * 'imm_n512_511', an integer literal in range -512 to 511;
!    * 'imm_n1024_1023', an integer literal in range -1024 to 1023;
!    * 'imm_n2048_2047', an integer literal in range -2048 to 2047.
  
!  For convenience, GCC defines functions '__lsx_vrepli_{b/h/w/d}' and
! '__lsx_b[n]z_{v/b/h/w/d}', which are implemented as follows:
  
       a. __lsx_vrepli_{b/h/w/d}: Implemented the case where the highest
          bit of vldi instruction i13 is 1.
--- 52923,52955 ----
  
  GCC provides intrinsics to access the LSX (Loongson SIMD Extension)
  instructions.  The interface is made available by including
! ‘<lsxintrin.h>’ and using ‘-mlsx’.
  
!  The following vectors typedefs are included in ‘lsxintrin.h’:
  
!    • ‘__m128i’, a 128-bit vector of fixed point;
!    • ‘__m128’, a 128-bit vector of single precision floating point;
!    • ‘__m128d’, a 128-bit vector of double precision floating point.
  
   Instructions and corresponding built-ins may have additional
  restrictions and/or input/output values manipulated:
!    • ‘imm0_1’, an integer literal in range 0 to 1;
!    • ‘imm0_3’, an integer literal in range 0 to 3;
!    • ‘imm0_7’, an integer literal in range 0 to 7;
!    • ‘imm0_15’, an integer literal in range 0 to 15;
!    • ‘imm0_31’, an integer literal in range 0 to 31;
!    • ‘imm0_63’, an integer literal in range 0 to 63;
!    • ‘imm0_127’, an integer literal in range 0 to 127;
!    • ‘imm0_255’, an integer literal in range 0 to 255;
!    • ‘imm_n16_15’, an integer literal in range -16 to 15;
!    • ‘imm_n128_127’, an integer literal in range -128 to 127;
!    • ‘imm_n256_255’, an integer literal in range -256 to 255;
!    • ‘imm_n512_511’, an integer literal in range -512 to 511;
!    • ‘imm_n1024_1023’, an integer literal in range -1024 to 1023;
!    • ‘imm_n2048_2047’, an integer literal in range -2048 to 2047.
  
!  For convenience, GCC defines functions ‘__lsx_vrepli_{b/h/w/d}’ and
! ‘__lsx_b[n]z_{v/b/h/w/d}’, which are implemented as follows:
  
       a. __lsx_vrepli_{b/h/w/d}: Implemented the case where the highest
          bit of vldi instruction i13 is 1.
*************** operand.
*** 53713,53720 ****
       __m128i __lsx_vxori_b (__m128i, imm0_255);
       __m128i __lsx_vxor_v (__m128i, __m128i);
  
!  These instrisic functions are available by including 'lsxintrin.h' and
! using '-mfrecipe' and '-mlsx'.
       __m128d __lsx_vfrecipe_d (__m128d);
       __m128 __lsx_vfrecipe_s (__m128);
       __m128d __lsx_vfrsqrte_d (__m128d);
--- 53724,53731 ----
       __m128i __lsx_vxori_b (__m128i, imm0_255);
       __m128i __lsx_vxor_v (__m128i, __m128i);
  
!  These instrisic functions are available by including ‘lsxintrin.h’ and
! using ‘-mfrecipe’ and ‘-mlsx’.
       __m128d __lsx_vfrecipe_d (__m128d);
       __m128 __lsx_vfrecipe_s (__m128);
       __m128d __lsx_vfrsqrte_d (__m128d);
*************** File: gcc.info,  Node: LoongArch ASX Vec
*** 53728,53761 ****
  
  GCC provides intrinsics to access the LASX (Loongson Advanced SIMD
  Extension) instructions.  The interface is made available by including
! '<lasxintrin.h>' and using '-mlasx'.
  
!  The following vectors typedefs are included in 'lasxintrin.h':
  
!    * '__m256i', a 256-bit vector of fixed point;
!    * '__m256', a 256-bit vector of single precision floating point;
!    * '__m256d', a 256-bit vector of double precision floating point.
  
   Instructions and corresponding built-ins may have additional
  restrictions and/or input/output values manipulated:
  
!    * 'imm0_1', an integer literal in range 0 to 1.
!    * 'imm0_3', an integer literal in range 0 to 3.
!    * 'imm0_7', an integer literal in range 0 to 7.
!    * 'imm0_15', an integer literal in range 0 to 15.
!    * 'imm0_31', an integer literal in range 0 to 31.
!    * 'imm0_63', an integer literal in range 0 to 63.
!    * 'imm0_127', an integer literal in range 0 to 127.
!    * 'imm0_255', an integer literal in range 0 to 255.
!    * 'imm_n16_15', an integer literal in range -16 to 15.
!    * 'imm_n128_127', an integer literal in range -128 to 127.
!    * 'imm_n256_255', an integer literal in range -256 to 255.
!    * 'imm_n512_511', an integer literal in range -512 to 511.
!    * 'imm_n1024_1023', an integer literal in range -1024 to 1023.
!    * 'imm_n2048_2047', an integer literal in range -2048 to 2047.
  
!  For convenience, GCC defines functions '__lasx_xvrepli_{b/h/w/d}' and
! '__lasx_b[n]z_{v/b/h/w/d}', which are implemented as follows:
  
       a. __lasx_xvrepli_{b/h/w/d}: Implemented the case where the highest
          bit of xvldi instruction i13 is 1.
--- 53739,53772 ----
  
  GCC provides intrinsics to access the LASX (Loongson Advanced SIMD
  Extension) instructions.  The interface is made available by including
! ‘<lasxintrin.h>’ and using ‘-mlasx’.
  
!  The following vectors typedefs are included in ‘lasxintrin.h’:
  
!    • ‘__m256i’, a 256-bit vector of fixed point;
!    • ‘__m256’, a 256-bit vector of single precision floating point;
!    • ‘__m256d’, a 256-bit vector of double precision floating point.
  
   Instructions and corresponding built-ins may have additional
  restrictions and/or input/output values manipulated:
  
!    • ‘imm0_1’, an integer literal in range 0 to 1.
!    • ‘imm0_3’, an integer literal in range 0 to 3.
!    • ‘imm0_7’, an integer literal in range 0 to 7.
!    • ‘imm0_15’, an integer literal in range 0 to 15.
!    • ‘imm0_31’, an integer literal in range 0 to 31.
!    • ‘imm0_63’, an integer literal in range 0 to 63.
!    • ‘imm0_127’, an integer literal in range 0 to 127.
!    • ‘imm0_255’, an integer literal in range 0 to 255.
!    • ‘imm_n16_15’, an integer literal in range -16 to 15.
!    • ‘imm_n128_127’, an integer literal in range -128 to 127.
!    • ‘imm_n256_255’, an integer literal in range -256 to 255.
!    • ‘imm_n512_511’, an integer literal in range -512 to 511.
!    • ‘imm_n1024_1023’, an integer literal in range -1024 to 1023.
!    • ‘imm_n2048_2047’, an integer literal in range -2048 to 2047.
  
!  For convenience, GCC defines functions ‘__lasx_xvrepli_{b/h/w/d}’ and
! ‘__lasx_b[n]z_{v/b/h/w/d}’, which are implemented as follows:
  
       a. __lasx_xvrepli_{b/h/w/d}: Implemented the case where the highest
          bit of xvldi instruction i13 is 1.
*************** operand.
*** 54550,54557 ****
       __m256i __lasx_xvxori_b (__m256i, imm0_255);
       __m256i __lasx_xvxor_v (__m256i, __m256i);
  
!  These instrisic functions are available by including 'lasxintrin.h' and
! using '-mfrecipe' and '-mlasx'.
       __m256d __lasx_xvfrecipe_d (__m256d);
       __m256 __lasx_xvfrecipe_s (__m256);
       __m256d __lasx_xvfrsqrte_d (__m256d);
--- 54561,54568 ----
       __m256i __lasx_xvxori_b (__m256i, imm0_255);
       __m256i __lasx_xvxor_v (__m256i, __m256i);
  
!  These instrisic functions are available by including ‘lasxintrin.h’ and
! using ‘-mfrecipe’ and ‘-mlasx’.
       __m256d __lasx_xvfrecipe_d (__m256d);
       __m256 __lasx_xvfrecipe_s (__m256);
       __m256d __lasx_xvfrsqrte_d (__m256d);
*************** media applications.  It provides instruc
*** 54570,54582 ****
  
   GCC supports MIPS DSP operations using both the generic vector
  extensions (*note Vector Extensions::) and a collection of MIPS-specific
! built-in functions.  Both kinds of support are enabled by the '-mdsp'
  command-line option.
  
   Revision 2 of the ASE was introduced in the second half of 2006.  This
  revision adds extra instructions to the original ASE, but is otherwise
  backwards-compatible with it.  You can select revision 2 using the
! command-line option '-mdspr2'; this option implies '-mdsp'.
  
   The SCOUNT and POS bits of the DSP control register are global.  The
  WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
--- 54581,54593 ----
  
   GCC supports MIPS DSP operations using both the generic vector
  extensions (*note Vector Extensions::) and a collection of MIPS-specific
! built-in functions.  Both kinds of support are enabled by the ‘-mdsp’
  command-line option.
  
   Revision 2 of the ASE was introduced in the second half of 2006.  This
  revision adds extra instructions to the original ASE, but is otherwise
  backwards-compatible with it.  You can select revision 2 using the
! command-line option ‘-mdspr2’; this option implies ‘-mdsp’.
  
   The SCOUNT and POS bits of the DSP control register are global.  The
  WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
*************** instructions.
*** 54586,54602 ****
  
   At present, GCC only provides support for operations on 32-bit vectors.
  The vector type associated with 8-bit integer data is usually called
! 'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
  vector type associated with 16-bit integer data is usually called
! 'v2i16', and the vector type associated with Q15 is usually called
! 'v2q15'.  They can be defined in C as follows:
  
       typedef signed char v4i8 __attribute__ ((vector_size(4)));
       typedef signed char v4q7 __attribute__ ((vector_size(4)));
       typedef short v2i16 __attribute__ ((vector_size(4)));
       typedef short v2q15 __attribute__ ((vector_size(4)));
  
!  'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
  way as aggregates.  For example:
  
       v4i8 a = {1, 2, 3, 4};
--- 54597,54613 ----
  
   At present, GCC only provides support for operations on 32-bit vectors.
  The vector type associated with 8-bit integer data is usually called
! ‘v4i8’, the vector type associated with Q7 is usually called ‘v4q7’, the
  vector type associated with 16-bit integer data is usually called
! ‘v2i16’, and the vector type associated with Q15 is usually called
! ‘v2q15’.  They can be defined in C as follows:
  
       typedef signed char v4i8 __attribute__ ((vector_size(4)));
       typedef signed char v4q7 __attribute__ ((vector_size(4)));
       typedef short v2i16 __attribute__ ((vector_size(4)));
       typedef short v2q15 __attribute__ ((vector_size(4)));
  
!  ‘v4i8’, ‘v4q7’, ‘v2i16’ and ‘v2q15’ values are initialized in the same
  way as aggregates.  For example:
  
       v4i8 a = {1, 2, 3, 4};
*************** way as aggregates.  For example:
*** 54611,54642 ****
  packed.  On little-endian targets, the first value is the least
  significant and the last value is the most significant.  The opposite
  order applies to big-endian targets.  For example, the code above sets
! the lowest byte of 'a' to '1' on little-endian targets and '4' on
  big-endian targets.
  
   _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
  representation.  As shown in this example, the integer representation of
  a Q7 value can be obtained by multiplying the fractional value by
! '0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
! The equivalent for Q31 values is to multiply by '0x1.0p31'.
  
!  The table below lists the 'v4i8' and 'v2q15' operations for which
! hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
! are 'v2q15' values.
  
  C code                               MIPS instruction
  --------------------------------------------------------------------------
! 'a + b'                              'addu.qb'
! 'c + d'                              'addq.ph'
! 'a - b'                              'subu.qb'
! 'c - d'                              'subq.ph'
  
!  The table below lists the 'v2i16' operation for which hardware support
! exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
  
  C code                               MIPS instruction
  --------------------------------------------------------------------------
! 'e * f'                              'mul.ph'
  
   It is easier to describe the DSP built-in functions if we first define
  the following types:
--- 54622,54653 ----
  packed.  On little-endian targets, the first value is the least
  significant and the last value is the most significant.  The opposite
  order applies to big-endian targets.  For example, the code above sets
! the lowest byte of ‘a’ to ‘1’ on little-endian targets and ‘4’ on
  big-endian targets.
  
   _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
  representation.  As shown in this example, the integer representation of
  a Q7 value can be obtained by multiplying the fractional value by
! ‘0x1.0p7’.  The equivalent for Q15 values is to multiply by ‘0x1.0p15’.
! The equivalent for Q31 values is to multiply by ‘0x1.0p31’.
  
!  The table below lists the ‘v4i8’ and ‘v2q15’ operations for which
! hardware support exists.  ‘a’ and ‘b’ are ‘v4i8’ values, and ‘c’ and ‘d’
! are ‘v2q15’ values.
  
  C code                               MIPS instruction
  --------------------------------------------------------------------------
! ‘a + b’                              ‘addu.qb’
! ‘c + d’                              ‘addq.ph’
! ‘a - b’                              ‘subu.qb’
! ‘c - d’                              ‘subq.ph’
  
!  The table below lists the ‘v2i16’ operation for which hardware support
! exists for the DSP ASE REV 2.  ‘e’ and ‘f’ are ‘v2i16’ values.
  
  C code                               MIPS instruction
  --------------------------------------------------------------------------
! ‘e * f’                              ‘mul.ph’
  
   It is easier to describe the DSP built-in functions if we first define
  the following types:
*************** the following types:
*** 54646,54656 ****
       typedef unsigned int ui32;
       typedef long long a64;
  
!  'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
! indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
! value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
  indicate values that are placed in one of the four DSP accumulators
! ('$ac0', '$ac1', '$ac2' or '$ac3').
  
   Also, some built-in functions prefer or require immediate numbers as
  parameters, because the corresponding DSP instructions accept both
--- 54657,54667 ----
       typedef unsigned int ui32;
       typedef long long a64;
  
!  ‘q31’ and ‘i32’ are actually the same as ‘int’, but we use ‘q31’ to
! indicate a Q31 fractional value and ‘i32’ to indicate a 32-bit integer
! value.  Similarly, ‘a64’ is the same as ‘long long’, but we use ‘a64’ to
  indicate values that are placed in one of the four DSP accumulators
! (‘$ac0’, ‘$ac1’, ‘$ac2’ or ‘$ac3’).
  
   Also, some built-in functions prefer or require immediate numbers as
  parameters, because the corresponding DSP instructions accept both
*************** the "upper half" and the other being des
*** 54846,54859 ****
   GCC supports paired-single operations using both the generic vector
  extensions (*note Vector Extensions::) and a collection of MIPS-specific
  built-in functions.  Both kinds of support are enabled by the
! '-mpaired-single' command-line option.
  
   The vector type associated with paired-single values is usually called
! 'v2sf'.  It can be defined in C as follows:
  
       typedef float v2sf __attribute__ ((vector_size (8)));
  
!  'v2sf' values are initialized in the same way as aggregates.  For
  example:
  
       v2sf a = {1.5, 9.1};
--- 54857,54870 ----
   GCC supports paired-single operations using both the generic vector
  extensions (*note Vector Extensions::) and a collection of MIPS-specific
  built-in functions.  Both kinds of support are enabled by the
! ‘-mpaired-single’ command-line option.
  
   The vector type associated with paired-single values is usually called
! ‘v2sf’.  It can be defined in C as follows:
  
       typedef float v2sf __attribute__ ((vector_size (8)));
  
!  ‘v2sf’ values are initialized in the same way as aggregates.  For
  example:
  
       v2sf a = {1.5, 9.1};
*************** example:
*** 54865,54872 ****
  upper half of a register and which value is stored in the lower half.
  On little-endian targets, the first value is the lower one and the
  second value is the upper one.  The opposite order applies to big-endian
! targets.  For example, the code above sets the lower half of 'a' to
! '1.5' on little-endian targets and '9.1' on big-endian targets.
  
  
  File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
--- 54876,54883 ----
  upper half of a register and which value is stored in the lower half.
  On little-endian targets, the first value is the lower one and the
  second value is the upper one.  The opposite order applies to big-endian
! targets.  For example, the code above sets the lower half of ‘a’ to
! ‘1.5’ on little-endian targets and ‘9.1’ on big-endian targets.
  
  
  File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
*************** File: gcc.info,  Node: MIPS Loongson Bui
*** 54876,54890 ****
  
  GCC provides intrinsics to access the SIMD instructions provided by the
  ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
! available after inclusion of the 'loongson.h' header file, operate on
  the following 64-bit vector types:
  
!    * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
!    * 'uint16x4_t', a vector of four unsigned 16-bit integers;
!    * 'uint32x2_t', a vector of two unsigned 32-bit integers;
!    * 'int8x8_t', a vector of eight signed 8-bit integers;
!    * 'int16x4_t', a vector of four signed 16-bit integers;
!    * 'int32x2_t', a vector of two signed 32-bit integers.
  
   The intrinsics provided are listed below; each is named after the
  machine instruction to which it corresponds, with suffixes added as
--- 54887,54901 ----
  
  GCC provides intrinsics to access the SIMD instructions provided by the
  ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
! available after inclusion of the ‘loongson.h’ header file, operate on
  the following 64-bit vector types:
  
!    • ‘uint8x8_t’, a vector of eight unsigned 8-bit integers;
!    • ‘uint16x4_t’, a vector of four unsigned 16-bit integers;
!    • ‘uint32x2_t’, a vector of two unsigned 32-bit integers;
!    • ‘int8x8_t’, a vector of eight signed 8-bit integers;
!    • ‘int16x4_t’, a vector of four signed 16-bit integers;
!    • ‘int32x2_t’, a vector of two signed 32-bit integers.
  
   The intrinsics provided are listed below; each is named after the
  machine instruction to which it corresponds, with suffixes added as
*************** File: gcc.info,  Node: Paired-Single Ari
*** 55005,55028 ****
  6.62.19.1 Paired-Single Arithmetic
  ..................................
  
! The table below lists the 'v2sf' operations for which hardware support
! exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
  value.
  
  C code                               MIPS instruction
  --------------------------------------------------------------------------
! 'a + b'                              'add.ps'
! 'a - b'                              'sub.ps'
! '-a'                                 'neg.ps'
! 'a * b'                              'mul.ps'
! 'a * b + c'                          'madd.ps'
! 'a * b - c'                          'msub.ps'
! '-(a * b + c)'                       'nmadd.ps'
! '-(a * b - c)'                       'nmsub.ps'
! 'x ? a : b'                          'movn.ps'/'movz.ps'
  
   Note that the multiply-accumulate instructions can be disabled using
! the command-line option '-mno-fused-madd'.
  
  
  File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
--- 55016,55039 ----
  6.62.19.1 Paired-Single Arithmetic
  ..................................
  
! The table below lists the ‘v2sf’ operations for which hardware support
! exists.  ‘a’, ‘b’ and ‘c’ are ‘v2sf’ values and ‘x’ is an integral
  value.
  
  C code                               MIPS instruction
  --------------------------------------------------------------------------
! ‘a + b’                              ‘add.ps’
! ‘a - b’                              ‘sub.ps’
! ‘-a’                                 ‘neg.ps’
! ‘a * b’                              ‘mul.ps’
! ‘a * b + c’                          ‘madd.ps’
! ‘a * b - c’                          ‘msub.ps’
! ‘-(a * b + c)’                       ‘nmadd.ps’
! ‘-(a * b - c)’                       ‘nmsub.ps’
! ‘x ? a : b’                          ‘movn.ps’/‘movz.ps’
  
   Note that the multiply-accumulate instructions can be disabled using
! the command-line option ‘-mno-fused-madd’.
  
  
  File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
*************** The following paired-single functions ma
*** 55034,55095 ****
  instruction.  Please refer to the architecture specification for details
  on what each instruction does.
  
! 'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
!      Pair lower lower ('pll.ps').
  
! 'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
!      Pair upper lower ('pul.ps').
  
! 'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
!      Pair lower upper ('plu.ps').
  
! 'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
!      Pair upper upper ('puu.ps').
  
! 'v2sf __builtin_mips_cvt_ps_s (float, float)'
!      Convert pair to paired single ('cvt.ps.s').
  
! 'float __builtin_mips_cvt_s_pl (v2sf)'
!      Convert pair lower to single ('cvt.s.pl').
  
! 'float __builtin_mips_cvt_s_pu (v2sf)'
!      Convert pair upper to single ('cvt.s.pu').
  
! 'v2sf __builtin_mips_abs_ps (v2sf)'
!      Absolute value ('abs.ps').
  
! 'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
!      Align variable ('alnv.ps').
  
       _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
       otherwise the result is unpredictable.  Please read the instruction
       description for details.
  
   The following multi-instruction functions are also available.  In each
! case, COND can be any of the 16 floating-point conditions: 'f', 'un',
! 'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
! 'lt', 'nge', 'le' or 'ngt'.
  
! 'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
! 'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
!      Conditional move based on floating-point comparison ('c.COND.ps',
!      'movt.ps'/'movf.ps').
  
!      The 'movt' functions return the value X computed by:
  
            c.COND.ps CC,A,B
            mov.ps X,C
            movt.ps X,D,CC
  
!      The 'movf' functions are similar but use 'movf.ps' instead of
!      'movt.ps'.
  
! 'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
! 'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
!      Comparison of two paired-single values ('c.COND.ps',
!      'bc1t'/'bc1f').
  
!      These functions compare A and B using 'c.COND.ps' and return either
       the upper or lower half of the result.  For example:
  
            v2sf a, b;
--- 55045,55106 ----
  instruction.  Please refer to the architecture specification for details
  on what each instruction does.
  
! ‘v2sf __builtin_mips_pll_ps (v2sf, v2sf)’
!      Pair lower lower (‘pll.ps’).
  
! ‘v2sf __builtin_mips_pul_ps (v2sf, v2sf)’
!      Pair upper lower (‘pul.ps’).
  
! ‘v2sf __builtin_mips_plu_ps (v2sf, v2sf)’
!      Pair lower upper (‘plu.ps’).
  
! ‘v2sf __builtin_mips_puu_ps (v2sf, v2sf)’
!      Pair upper upper (‘puu.ps’).
  
! ‘v2sf __builtin_mips_cvt_ps_s (float, float)’
!      Convert pair to paired single (‘cvt.ps.s’).
  
! ‘float __builtin_mips_cvt_s_pl (v2sf)’
!      Convert pair lower to single (‘cvt.s.pl’).
  
! ‘float __builtin_mips_cvt_s_pu (v2sf)’
!      Convert pair upper to single (‘cvt.s.pu’).
  
! ‘v2sf __builtin_mips_abs_ps (v2sf)’
!      Absolute value (‘abs.ps’).
  
! ‘v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)’
!      Align variable (‘alnv.ps’).
  
       _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
       otherwise the result is unpredictable.  Please read the instruction
       description for details.
  
   The following multi-instruction functions are also available.  In each
! case, COND can be any of the 16 floating-point conditions: ‘f’, ‘un’,
! ‘eq’, ‘ueq’, ‘olt’, ‘ult’, ‘ole’, ‘ule’, ‘sf’, ‘ngle’, ‘seq’, ‘ngl’,
! ‘lt’, ‘nge’, ‘le’ or ‘ngt’.
  
! ‘v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)’
! ‘v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)’
!      Conditional move based on floating-point comparison (‘c.COND.ps’,
!      ‘movt.ps’/‘movf.ps’).
  
!      The ‘movt’ functions return the value X computed by:
  
            c.COND.ps CC,A,B
            mov.ps X,C
            movt.ps X,D,CC
  
!      The ‘movf’ functions are similar but use ‘movf.ps’ instead of
!      ‘movt.ps’.
  
! ‘int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)’
! ‘int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)’
!      Comparison of two paired-single values (‘c.COND.ps’,
!      ‘bc1t’/‘bc1f’).
  
!      These functions compare A and B using ‘c.COND.ps’ and return either
       the upper or lower half of the result.  For example:
  
            v2sf a, b;
*************** File: gcc.info,  Node: MIPS-3D Built-in
*** 55112,55169 ****
  The MIPS-3D Application-Specific Extension (ASE) includes additional
  paired-single instructions that are designed to improve the performance
  of 3D graphics operations.  Support for these instructions is controlled
! by the '-mips3d' command-line option.
  
   The functions listed below map directly to a particular MIPS-3D
  instruction.  Please refer to the architecture specification for more
  details on what each instruction does.
  
! 'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
!      Reduction add ('addr.ps').
  
! 'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
!      Reduction multiply ('mulr.ps').
  
! 'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
!      Convert paired single to paired word ('cvt.pw.ps').
  
! 'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
!      Convert paired word to paired single ('cvt.ps.pw').
  
! 'float __builtin_mips_recip1_s (float)'
! 'double __builtin_mips_recip1_d (double)'
! 'v2sf __builtin_mips_recip1_ps (v2sf)'
!      Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
  
! 'float __builtin_mips_recip2_s (float, float)'
! 'double __builtin_mips_recip2_d (double, double)'
! 'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
!      Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
  
! 'float __builtin_mips_rsqrt1_s (float)'
! 'double __builtin_mips_rsqrt1_d (double)'
! 'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
       Reduced-precision reciprocal square root (sequence step 1)
!      ('rsqrt1.FMT').
  
! 'float __builtin_mips_rsqrt2_s (float, float)'
! 'double __builtin_mips_rsqrt2_d (double, double)'
! 'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
       Reduced-precision reciprocal square root (sequence step 2)
!      ('rsqrt2.FMT').
  
   The following multi-instruction functions are also available.  In each
! case, COND can be any of the 16 floating-point conditions: 'f', 'un',
! 'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
! 'lt', 'nge', 'le' or 'ngt'.
  
! 'int __builtin_mips_cabs_COND_s (float A, float B)'
! 'int __builtin_mips_cabs_COND_d (double A, double B)'
!      Absolute comparison of two scalar values ('cabs.COND.FMT',
!      'bc1t'/'bc1f').
  
!      These functions compare A and B using 'cabs.COND.s' or
!      'cabs.COND.d' and return the result as a boolean value.  For
       example:
  
            float a, b;
--- 55123,55180 ----
  The MIPS-3D Application-Specific Extension (ASE) includes additional
  paired-single instructions that are designed to improve the performance
  of 3D graphics operations.  Support for these instructions is controlled
! by the ‘-mips3d’ command-line option.
  
   The functions listed below map directly to a particular MIPS-3D
  instruction.  Please refer to the architecture specification for more
  details on what each instruction does.
  
! ‘v2sf __builtin_mips_addr_ps (v2sf, v2sf)’
!      Reduction add (‘addr.ps’).
  
! ‘v2sf __builtin_mips_mulr_ps (v2sf, v2sf)’
!      Reduction multiply (‘mulr.ps’).
  
! ‘v2sf __builtin_mips_cvt_pw_ps (v2sf)’
!      Convert paired single to paired word (‘cvt.pw.ps’).
  
! ‘v2sf __builtin_mips_cvt_ps_pw (v2sf)’
!      Convert paired word to paired single (‘cvt.ps.pw’).
  
! ‘float __builtin_mips_recip1_s (float)’
! ‘double __builtin_mips_recip1_d (double)’
! ‘v2sf __builtin_mips_recip1_ps (v2sf)’
!      Reduced-precision reciprocal (sequence step 1) (‘recip1.FMT’).
  
! ‘float __builtin_mips_recip2_s (float, float)’
! ‘double __builtin_mips_recip2_d (double, double)’
! ‘v2sf __builtin_mips_recip2_ps (v2sf, v2sf)’
!      Reduced-precision reciprocal (sequence step 2) (‘recip2.FMT’).
  
! ‘float __builtin_mips_rsqrt1_s (float)’
! ‘double __builtin_mips_rsqrt1_d (double)’
! ‘v2sf __builtin_mips_rsqrt1_ps (v2sf)’
       Reduced-precision reciprocal square root (sequence step 1)
!      (‘rsqrt1.FMT’).
  
! ‘float __builtin_mips_rsqrt2_s (float, float)’
! ‘double __builtin_mips_rsqrt2_d (double, double)’
! ‘v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)’
       Reduced-precision reciprocal square root (sequence step 2)
!      (‘rsqrt2.FMT’).
  
   The following multi-instruction functions are also available.  In each
! case, COND can be any of the 16 floating-point conditions: ‘f’, ‘un’,
! ‘eq’, ‘ueq’, ‘olt’, ‘ult’, ‘ole’, ‘ule’, ‘sf’, ‘ngle’, ‘seq’, ‘ngl’,
! ‘lt’, ‘nge’, ‘le’ or ‘ngt’.
  
! ‘int __builtin_mips_cabs_COND_s (float A, float B)’
! ‘int __builtin_mips_cabs_COND_d (double A, double B)’
!      Absolute comparison of two scalar values (‘cabs.COND.FMT’,
!      ‘bc1t’/‘bc1f’).
  
!      These functions compare A and B using ‘cabs.COND.s’ or
!      ‘cabs.COND.d’ and return the result as a boolean value.  For
       example:
  
            float a, b;
*************** case, COND can be any of the 16 floating
*** 55172,55183 ****
            else
              false ();
  
! 'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
! 'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
!      Absolute comparison of two paired-single values ('cabs.COND.ps',
!      'bc1t'/'bc1f').
  
!      These functions compare A and B using 'cabs.COND.ps' and return
       either the upper or lower half of the result.  For example:
  
            v2sf a, b;
--- 55183,55194 ----
            else
              false ();
  
! ‘int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)’
! ‘int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)’
!      Absolute comparison of two paired-single values (‘cabs.COND.ps’,
!      ‘bc1t’/‘bc1f’).
  
!      These functions compare A and B using ‘cabs.COND.ps’ and return
       either the upper or lower half of the result.  For example:
  
            v2sf a, b;
*************** case, COND can be any of the 16 floating
*** 55191,55221 ****
            else
              lower_halves_are_unequal ();
  
! 'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
! 'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
!      Conditional move based on absolute comparison ('cabs.COND.ps',
!      'movt.ps'/'movf.ps').
  
!      The 'movt' functions return the value X computed by:
  
            cabs.COND.ps CC,A,B
            mov.ps X,C
            movt.ps X,D,CC
  
!      The 'movf' functions are similar but use 'movf.ps' instead of
!      'movt.ps'.
  
! 'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
! 'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
! 'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
! 'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
!      Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
!      'bc1any2t'/'bc1any2f').
  
!      These functions compare A and B using 'c.COND.ps' or
!      'cabs.COND.ps'.  The 'any' forms return 'true' if either result is
!      'true' and the 'all' forms return 'true' if both results are
!      'true'.  For example:
  
            v2sf a, b;
            if (__builtin_mips_any_c_eq_ps (a, b))
--- 55202,55232 ----
            else
              lower_halves_are_unequal ();
  
! ‘v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)’
! ‘v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)’
!      Conditional move based on absolute comparison (‘cabs.COND.ps’,
!      ‘movt.ps’/‘movf.ps’).
  
!      The ‘movt’ functions return the value X computed by:
  
            cabs.COND.ps CC,A,B
            mov.ps X,C
            movt.ps X,D,CC
  
!      The ‘movf’ functions are similar but use ‘movf.ps’ instead of
!      ‘movt.ps’.
  
! ‘int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)’
! ‘int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)’
! ‘int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)’
! ‘int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)’
!      Comparison of two paired-single values (‘c.COND.ps’/‘cabs.COND.ps’,
!      ‘bc1any2t’/‘bc1any2f’).
  
!      These functions compare A and B using ‘c.COND.ps’ or
!      ‘cabs.COND.ps’.  The ‘any’ forms return ‘true’ if either result is
!      ‘true’ and the ‘all’ forms return ‘true’ if both results are
!      ‘true’.  For example:
  
            v2sf a, b;
            if (__builtin_mips_any_c_eq_ps (a, b))
*************** case, COND can be any of the 16 floating
*** 55228,55244 ****
            else
              one_is_false ();
  
! 'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
! 'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
! 'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
! 'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
       Comparison of four paired-single values
!      ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
  
!      These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
!      B and to compare C with D.  The 'any' forms return 'true' if any of
!      the four results are 'true' and the 'all' forms return 'true' if
!      all four results are 'true'.  For example:
  
            v2sf a, b, c, d;
            if (__builtin_mips_any_c_eq_4s (a, b, c, d))
--- 55239,55255 ----
            else
              one_is_false ();
  
! ‘int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)’
! ‘int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)’
! ‘int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)’
! ‘int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)’
       Comparison of four paired-single values
!      (‘c.COND.ps’/‘cabs.COND.ps’, ‘bc1any4t’/‘bc1any4f’).
  
!      These functions use ‘c.COND.ps’ or ‘cabs.COND.ps’ to compare A with
!      B and to compare C with D.  The ‘any’ forms return ‘true’ if any of
!      the four results are ‘true’ and the ‘all’ forms return ‘true’ if
!      all four results are ‘true’.  For example:
  
            v2sf a, b, c, d;
            if (__builtin_mips_any_c_eq_4s (a, b, c, d))
*************** File: gcc.info,  Node: MIPS SIMD Archite
*** 55263,55306 ****
  
  GCC provides intrinsics to access the SIMD instructions provided by the
  MSA MIPS SIMD Architecture.  The interface is made available by
! including '<msa.h>' and using '-mmsa -mhard-float -mfp64 -mnan=2008'.
! For each '__builtin_msa_*', there is a shortened name of the intrinsic,
! '__msa_*'.
  
   MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
  and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
  floating point data elements.  The following vectors typedefs are
! included in 'msa.h':
!    * 'v16i8', a vector of sixteen signed 8-bit integers;
!    * 'v16u8', a vector of sixteen unsigned 8-bit integers;
!    * 'v8i16', a vector of eight signed 16-bit integers;
!    * 'v8u16', a vector of eight unsigned 16-bit integers;
!    * 'v4i32', a vector of four signed 32-bit integers;
!    * 'v4u32', a vector of four unsigned 32-bit integers;
!    * 'v2i64', a vector of two signed 64-bit integers;
!    * 'v2u64', a vector of two unsigned 64-bit integers;
!    * 'v4f32', a vector of four 32-bit floats;
!    * 'v2f64', a vector of two 64-bit doubles.
  
   Instructions and corresponding built-ins may have additional
  restrictions and/or input/output values manipulated:
!    * 'imm0_1', an integer literal in range 0 to 1;
!    * 'imm0_3', an integer literal in range 0 to 3;
!    * 'imm0_7', an integer literal in range 0 to 7;
!    * 'imm0_15', an integer literal in range 0 to 15;
!    * 'imm0_31', an integer literal in range 0 to 31;
!    * 'imm0_63', an integer literal in range 0 to 63;
!    * 'imm0_255', an integer literal in range 0 to 255;
!    * 'imm_n16_15', an integer literal in range -16 to 15;
!    * 'imm_n512_511', an integer literal in range -512 to 511;
!    * 'imm_n1024_1022', an integer literal in range -512 to 511 left
       shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
!    * 'imm_n2048_2044', an integer literal in range -512 to 511 left
       shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
!    * 'imm_n4096_4088', an integer literal in range -512 to 511 left
       shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
!    * 'imm1_4', an integer literal in range 1 to 4;
!    * 'i32, i64, u32, u64, f32, f64', defined as follows:
  
       {
       typedef int i32;
--- 55274,55317 ----
  
  GCC provides intrinsics to access the SIMD instructions provided by the
  MSA MIPS SIMD Architecture.  The interface is made available by
! including ‘<msa.h>’ and using ‘-mmsa -mhard-float -mfp64 -mnan=2008’.
! For each ‘__builtin_msa_*’, there is a shortened name of the intrinsic,
! ‘__msa_*’.
  
   MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
  and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
  floating point data elements.  The following vectors typedefs are
! included in ‘msa.h’:
!    • ‘v16i8’, a vector of sixteen signed 8-bit integers;
!    • ‘v16u8’, a vector of sixteen unsigned 8-bit integers;
!    • ‘v8i16’, a vector of eight signed 16-bit integers;
!    • ‘v8u16’, a vector of eight unsigned 16-bit integers;
!    • ‘v4i32’, a vector of four signed 32-bit integers;
!    • ‘v4u32’, a vector of four unsigned 32-bit integers;
!    • ‘v2i64’, a vector of two signed 64-bit integers;
!    • ‘v2u64’, a vector of two unsigned 64-bit integers;
!    • ‘v4f32’, a vector of four 32-bit floats;
!    • ‘v2f64’, a vector of two 64-bit doubles.
  
   Instructions and corresponding built-ins may have additional
  restrictions and/or input/output values manipulated:
!    • ‘imm0_1’, an integer literal in range 0 to 1;
!    • ‘imm0_3’, an integer literal in range 0 to 3;
!    • ‘imm0_7’, an integer literal in range 0 to 7;
!    • ‘imm0_15’, an integer literal in range 0 to 15;
!    • ‘imm0_31’, an integer literal in range 0 to 31;
!    • ‘imm0_63’, an integer literal in range 0 to 63;
!    • ‘imm0_255’, an integer literal in range 0 to 255;
!    • ‘imm_n16_15’, an integer literal in range -16 to 15;
!    • ‘imm_n512_511’, an integer literal in range -512 to 511;
!    • ‘imm_n1024_1022’, an integer literal in range -512 to 511 left
       shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
!    • ‘imm_n2048_2044’, an integer literal in range -512 to 511 left
       shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
!    • ‘imm_n4096_4088’, an integer literal in range -512 to 511 left
       shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
!    • ‘imm1_4’, an integer literal in range 1 to 4;
!    • ‘i32, i64, u32, u64, f32, f64’, defined as follows:
  
       {
       typedef int i32;
*************** File: gcc.info,  Node: Other MIPS Built-
*** 56046,56064 ****
  
  GCC provides other MIPS-specific built-in functions:
  
! 'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
!      Insert a 'cache' instruction with operands OP and ADDR.  GCC
!      defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
       when this function is available.
  
! 'unsigned int __builtin_mips_get_fcsr (void)'
! 'void __builtin_mips_set_fcsr (unsigned int VALUE)'
       Get and set the contents of the floating-point control and status
       register (FPU control register 31).  These functions are only
       available in hard-float code but can be called in both MIPS16 and
       non-MIPS16 contexts.
  
!      '__builtin_mips_set_fcsr' can be used to change any bit of the
       register except the condition codes, which GCC assumes are
       preserved.
  
--- 56057,56075 ----
  
  GCC provides other MIPS-specific built-in functions:
  
! ‘void __builtin_mips_cache (int OP, const volatile void *ADDR)’
!      Insert a ‘cache’ instruction with operands OP and ADDR.  GCC
!      defines the preprocessor macro ‘___GCC_HAVE_BUILTIN_MIPS_CACHE’
       when this function is available.
  
! ‘unsigned int __builtin_mips_get_fcsr (void)’
! ‘void __builtin_mips_set_fcsr (unsigned int VALUE)’
       Get and set the contents of the floating-point control and status
       register (FPU control register 31).  These functions are only
       available in hard-float code but can be called in both MIPS16 and
       non-MIPS16 contexts.
  
!      ‘__builtin_mips_set_fcsr’ can be used to change any bit of the
       register except the condition codes, which GCC assumes are
       preserved.
  
*************** File: gcc.info,  Node: MSP430 Built-in F
*** 56071,56089 ****
  GCC provides a couple of special builtin functions to aid in the writing
  of interrupt handlers in C.
  
! '__bic_SR_register_on_exit (int MASK)'
       This clears the indicated bits in the saved copy of the status
       register currently residing on the stack.  This only works inside
       interrupt handlers and the changes to the status register will only
       take affect once the handler returns.
  
! '__bis_SR_register_on_exit (int MASK)'
       This sets the indicated bits in the saved copy of the status
       register currently residing on the stack.  This only works inside
       interrupt handlers and the changes to the status register will only
       take affect once the handler returns.
  
! '__delay_cycles (long long CYCLES)'
       This inserts an instruction sequence that takes exactly CYCLES
       cycles (between 0 and about 17E9) to complete.  The inserted
       sequence may use jumps, loops, or no-ops, and does not interfere
--- 56082,56100 ----
  GCC provides a couple of special builtin functions to aid in the writing
  of interrupt handlers in C.
  
! ‘__bic_SR_register_on_exit (int MASK)’
       This clears the indicated bits in the saved copy of the status
       register currently residing on the stack.  This only works inside
       interrupt handlers and the changes to the status register will only
       take affect once the handler returns.
  
! ‘__bis_SR_register_on_exit (int MASK)’
       This sets the indicated bits in the saved copy of the status
       register currently residing on the stack.  This only works inside
       interrupt handlers and the changes to the status register will only
       take affect once the handler returns.
  
! ‘__delay_cycles (long long CYCLES)’
       This inserts an instruction sequence that takes exactly CYCLES
       cycles (between 0 and about 17E9) to complete.  The inserted
       sequence may use jumps, loops, or no-ops, and does not interfere
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56168,56222 ****
  ..........................................................................
  
   -- Built-in Function: void __builtin_cpu_init (void)
!      This function is a 'nop' on the PowerPC platform and is included
       solely to maintain API compatibility with the x86 builtins.
  
   -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
!      This function returns a value of '1' if the run-time CPU is of type
!      CPUNAME and returns '0' otherwise
  
!      The '__builtin_cpu_is' function requires GLIBC 2.23 or newer which
       exports the hardware capability bits.  GCC defines the macro
!      '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
       function is fully supported.
  
       If GCC was configured to use a GLIBC before 2.23, the built-in
!      function '__builtin_cpu_is' always returns a 0 and the compiler
       issues a warning.
  
       The following CPU names can be detected:
  
!      'power10'
            IBM POWER10 Server CPU.
!      'power9'
            IBM POWER9 Server CPU.
!      'power8'
            IBM POWER8 Server CPU.
!      'power7'
            IBM POWER7 Server CPU.
!      'power6x'
            IBM POWER6 Server CPU (RAW mode).
!      'power6'
            IBM POWER6 Server CPU (Architected mode).
!      'power5+'
            IBM POWER5+ Server CPU.
!      'power5'
            IBM POWER5 Server CPU.
!      'ppc970'
            IBM 970 Server CPU (ie, Apple G5).
!      'power4'
            IBM POWER4 Server CPU.
!      'ppca2'
            IBM A2 64-bit Embedded CPU
!      'ppc476'
            IBM PowerPC 476FP 32-bit Embedded CPU.
!      'ppc464'
            IBM PowerPC 464 32-bit Embedded CPU.
!      'ppc440'
            PowerPC 440 32-bit Embedded CPU.
!      'ppc405'
            PowerPC 405 32-bit Embedded CPU.
!      'ppc-cell-be'
            IBM PowerPC Cell Broadband Engine Architecture CPU.
  
       Here is an example:
--- 56179,56233 ----
  ..........................................................................
  
   -- Built-in Function: void __builtin_cpu_init (void)
!      This function is a ‘nop’ on the PowerPC platform and is included
       solely to maintain API compatibility with the x86 builtins.
  
   -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
!      This function returns a value of ‘1’ if the run-time CPU is of type
!      CPUNAME and returns ‘0’ otherwise
  
!      The ‘__builtin_cpu_is’ function requires GLIBC 2.23 or newer which
       exports the hardware capability bits.  GCC defines the macro
!      ‘__BUILTIN_CPU_SUPPORTS__’ if the ‘__builtin_cpu_supports’ built-in
       function is fully supported.
  
       If GCC was configured to use a GLIBC before 2.23, the built-in
!      function ‘__builtin_cpu_is’ always returns a 0 and the compiler
       issues a warning.
  
       The following CPU names can be detected:
  
!      ‘power10’
            IBM POWER10 Server CPU.
!      ‘power9’
            IBM POWER9 Server CPU.
!      ‘power8’
            IBM POWER8 Server CPU.
!      ‘power7’
            IBM POWER7 Server CPU.
!      ‘power6x’
            IBM POWER6 Server CPU (RAW mode).
!      ‘power6’
            IBM POWER6 Server CPU (Architected mode).
!      ‘power5+’
            IBM POWER5+ Server CPU.
!      ‘power5’
            IBM POWER5 Server CPU.
!      ‘ppc970’
            IBM 970 Server CPU (ie, Apple G5).
!      ‘power4’
            IBM POWER4 Server CPU.
!      ‘ppca2’
            IBM A2 64-bit Embedded CPU
!      ‘ppc476’
            IBM PowerPC 476FP 32-bit Embedded CPU.
!      ‘ppc464’
            IBM PowerPC 464 32-bit Embedded CPU.
!      ‘ppc440’
            PowerPC 440 32-bit Embedded CPU.
!      ‘ppc405’
            PowerPC 405 32-bit Embedded CPU.
!      ‘ppc-cell-be’
            IBM PowerPC Cell Broadband Engine Architecture CPU.
  
       Here is an example:
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56232,56339 ****
                }
  
   -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
!      This function returns a value of '1' if the run-time CPU supports
!      the HWCAP feature FEATURE and returns '0' otherwise.
  
!      The '__builtin_cpu_supports' function requires GLIBC 2.23 or newer
       which exports the hardware capability bits.  GCC defines the macro
!      '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
       function is fully supported.
  
       If GCC was configured to use a GLIBC before 2.23, the built-in
!      function '__builtin_cpu_supports' always returns a 0 and the
       compiler issues a warning.
  
       The following features can be detected:
  
!      '4xxmac'
            4xx CPU has a Multiply Accumulator.
!      'altivec'
            CPU has a SIMD/Vector Unit.
!      'arch_2_05'
            CPU supports ISA 2.05 (eg, POWER6)
!      'arch_2_06'
            CPU supports ISA 2.06 (eg, POWER7)
!      'arch_2_07'
            CPU supports ISA 2.07 (eg, POWER8)
!      'arch_3_00'
            CPU supports ISA 3.0 (eg, POWER9)
!      'arch_3_1'
            CPU supports ISA 3.1 (eg, POWER10)
!      'archpmu'
            CPU supports the set of compatible performance monitoring
            events.
!      'booke'
            CPU supports the Embedded ISA category.
!      'cellbe'
            CPU has a CELL broadband engine.
!      'darn'
!           CPU supports the 'darn' (deliver a random number) instruction.
!      'dfp'
            CPU has a decimal floating point unit.
!      'dscr'
            CPU supports the data stream control register.
!      'ebb'
            CPU supports event base branching.
!      'efpdouble'
            CPU has a SPE double precision floating point unit.
!      'efpsingle'
            CPU has a SPE single precision floating point unit.
!      'fpu'
            CPU has a floating point unit.
!      'htm'
            CPU has hardware transaction memory instructions.
!      'htm-nosc'
            Kernel aborts hardware transactions when a syscall is made.
!      'htm-no-suspend'
            CPU supports hardware transaction memory but does not support
!           the 'tsuspend.' instruction.
!      'ic_snoop'
            CPU supports icache snooping capabilities.
!      'ieee128'
            CPU supports 128-bit IEEE binary floating point instructions.
!      'isel'
            CPU supports the integer select instruction.
!      'mma'
            CPU supports the matrix-multiply assist instructions.
!      'mmu'
            CPU has a memory management unit.
!      'notb'
            CPU does not have a timebase (eg, 601 and 403gx).
!      'pa6t'
            CPU supports the PA Semi 6T CORE ISA.
!      'power4'
            CPU supports ISA 2.00 (eg, POWER4)
!      'power5'
            CPU supports ISA 2.02 (eg, POWER5)
!      'power5+'
            CPU supports ISA 2.03 (eg, POWER5+)
!      'power6x'
            CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
            mftgpr.
!      'ppc32'
            CPU supports 32-bit mode execution.
!      'ppc601'
            CPU supports the old POWER ISA (eg, 601)
!      'ppc64'
            CPU supports 64-bit mode execution.
!      'ppcle'
            CPU supports a little-endian mode that uses address swizzling.
!      'scv'
            Kernel supports system call vectored.
!      'smt'
            CPU support simultaneous multi-threading.
!      'spe'
            CPU has a signal processing extension unit.
!      'tar'
            CPU supports the target address register.
!      'true_le'
            CPU supports true little-endian mode.
!      'ucache'
            CPU has unified I/D cache.
!      'vcrypto'
            CPU supports the vector cryptography instructions.
!      'vsx'
            CPU supports the vector-scalar extension.
  
       Here is an example:
--- 56243,56350 ----
                }
  
   -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
!      This function returns a value of ‘1’ if the run-time CPU supports
!      the HWCAP feature FEATURE and returns ‘0’ otherwise.
  
!      The ‘__builtin_cpu_supports’ function requires GLIBC 2.23 or newer
       which exports the hardware capability bits.  GCC defines the macro
!      ‘__BUILTIN_CPU_SUPPORTS__’ if the ‘__builtin_cpu_supports’ built-in
       function is fully supported.
  
       If GCC was configured to use a GLIBC before 2.23, the built-in
!      function ‘__builtin_cpu_supports’ always returns a 0 and the
       compiler issues a warning.
  
       The following features can be detected:
  
!      ‘4xxmac’
            4xx CPU has a Multiply Accumulator.
!      ‘altivec’
            CPU has a SIMD/Vector Unit.
!      ‘arch_2_05’
            CPU supports ISA 2.05 (eg, POWER6)
!      ‘arch_2_06’
            CPU supports ISA 2.06 (eg, POWER7)
!      ‘arch_2_07’
            CPU supports ISA 2.07 (eg, POWER8)
!      ‘arch_3_00’
            CPU supports ISA 3.0 (eg, POWER9)
!      ‘arch_3_1’
            CPU supports ISA 3.1 (eg, POWER10)
!      ‘archpmu’
            CPU supports the set of compatible performance monitoring
            events.
!      ‘booke’
            CPU supports the Embedded ISA category.
!      ‘cellbe’
            CPU has a CELL broadband engine.
!      ‘darn’
!           CPU supports the ‘darn’ (deliver a random number) instruction.
!      ‘dfp’
            CPU has a decimal floating point unit.
!      ‘dscr’
            CPU supports the data stream control register.
!      ‘ebb’
            CPU supports event base branching.
!      ‘efpdouble’
            CPU has a SPE double precision floating point unit.
!      ‘efpsingle’
            CPU has a SPE single precision floating point unit.
!      ‘fpu’
            CPU has a floating point unit.
!      ‘htm’
            CPU has hardware transaction memory instructions.
!      ‘htm-nosc’
            Kernel aborts hardware transactions when a syscall is made.
!      ‘htm-no-suspend’
            CPU supports hardware transaction memory but does not support
!           the ‘tsuspend.’ instruction.
!      ‘ic_snoop’
            CPU supports icache snooping capabilities.
!      ‘ieee128’
            CPU supports 128-bit IEEE binary floating point instructions.
!      ‘isel’
            CPU supports the integer select instruction.
!      ‘mma’
            CPU supports the matrix-multiply assist instructions.
!      ‘mmu’
            CPU has a memory management unit.
!      ‘notb’
            CPU does not have a timebase (eg, 601 and 403gx).
!      ‘pa6t’
            CPU supports the PA Semi 6T CORE ISA.
!      ‘power4’
            CPU supports ISA 2.00 (eg, POWER4)
!      ‘power5’
            CPU supports ISA 2.02 (eg, POWER5)
!      ‘power5+’
            CPU supports ISA 2.03 (eg, POWER5+)
!      ‘power6x’
            CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
            mftgpr.
!      ‘ppc32’
            CPU supports 32-bit mode execution.
!      ‘ppc601’
            CPU supports the old POWER ISA (eg, 601)
!      ‘ppc64’
            CPU supports 64-bit mode execution.
!      ‘ppcle’
            CPU supports a little-endian mode that uses address swizzling.
!      ‘scv’
            Kernel supports system call vectored.
!      ‘smt’
            CPU support simultaneous multi-threading.
!      ‘spe’
            CPU has a signal processing extension unit.
!      ‘tar’
            CPU supports the target address register.
!      ‘true_le’
            CPU supports true little-endian mode.
!      ‘ucache’
            CPU has unified I/D cache.
!      ‘vcrypto’
            CPU supports the vector cryptography instructions.
!      ‘vsx’
            CPU supports the vector-scalar extension.
  
       Here is an example:
*************** processors:
*** 56360,56397 ****
       void __builtin_mtfsb1 (const int);
       double __builtin_set_fpscr_rn (int);
  
!  The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
  generate instructions to read the Time Base Register.  The
! '__builtin_ppc_get_timebase' function may generate multiple instructions
  and always returns the 64 bits of the Time Base Register.  The
! '__builtin_ppc_mftb' function always generates one instruction and
  returns the Time Base Register value as an unsigned long, throwing away
! the most significant word on 32-bit environments.  The '__builtin_mffs'
  return the value of the FPSCR register.  Note, ISA 3.0 supports the
! '__builtin_mffsl()' which permits software to read the control and
  non-sticky status bits in the FSPCR without the higher latency
! associated with accessing the sticky status bits.  The '__builtin_mtfsf'
  takes a constant 8-bit integer field mask and a double precision
! floating point argument and generates the 'mtfsf' (extended mnemonic)
  instruction to write new values to selected fields of the FPSCR. The
! '__builtin_mtfsb0' and '__builtin_mtfsb1' take the bit to change as an
  argument.  The valid bit range is between 0 and 31.  The builtins map to
! the 'mtfsb0' and 'mtfsb1' instructions which take the argument and add
  32.  Hence these instructions only modify the FPSCR[32:63] bits by
  changing the specified bit to a zero or one respectively.
  
!  The '__builtin_set_fpscr_rn' built-in allows changing both of the
  floating point rounding mode bits and returning the various FPSCR fields
  before the RN field is updated.  The built-in returns a double
  consisting of the initial value of the FPSCR fields DRN, VE, OE, UE, ZE,
  XE, NI, and RN bit positions with all other bits set to zero.  The
  built-in argument is a 2-bit value for the new RN field value.  The
! argument can either be an 'const int' or stored in a variable.  Earlier
! versions of '__builtin_set_fpscr_rn' returned void.  A
! '__SET_FPSCR_RN_RETURNS_FPSCR__' macro has been added.  If defined, then
! the '__builtin_set_fpscr_rn' built-in returns the FPSCR fields.  If not
! defined, the '__builtin_set_fpscr_rn' does not return a value.  If the
! '-msoft-float' option is used, the '__builtin_set_fpscr_rn' built-in
  will not return a value.
  
  
--- 56371,56408 ----
       void __builtin_mtfsb1 (const int);
       double __builtin_set_fpscr_rn (int);
  
!  The ‘__builtin_ppc_get_timebase’ and ‘__builtin_ppc_mftb’ functions
  generate instructions to read the Time Base Register.  The
! ‘__builtin_ppc_get_timebase’ function may generate multiple instructions
  and always returns the 64 bits of the Time Base Register.  The
! ‘__builtin_ppc_mftb’ function always generates one instruction and
  returns the Time Base Register value as an unsigned long, throwing away
! the most significant word on 32-bit environments.  The ‘__builtin_mffs’
  return the value of the FPSCR register.  Note, ISA 3.0 supports the
! ‘__builtin_mffsl()’ which permits software to read the control and
  non-sticky status bits in the FSPCR without the higher latency
! associated with accessing the sticky status bits.  The ‘__builtin_mtfsf’
  takes a constant 8-bit integer field mask and a double precision
! floating point argument and generates the ‘mtfsf’ (extended mnemonic)
  instruction to write new values to selected fields of the FPSCR. The
! ‘__builtin_mtfsb0’ and ‘__builtin_mtfsb1’ take the bit to change as an
  argument.  The valid bit range is between 0 and 31.  The builtins map to
! the ‘mtfsb0’ and ‘mtfsb1’ instructions which take the argument and add
  32.  Hence these instructions only modify the FPSCR[32:63] bits by
  changing the specified bit to a zero or one respectively.
  
!  The ‘__builtin_set_fpscr_rn’ built-in allows changing both of the
  floating point rounding mode bits and returning the various FPSCR fields
  before the RN field is updated.  The built-in returns a double
  consisting of the initial value of the FPSCR fields DRN, VE, OE, UE, ZE,
  XE, NI, and RN bit positions with all other bits set to zero.  The
  built-in argument is a 2-bit value for the new RN field value.  The
! argument can either be an ‘const int’ or stored in a variable.  Earlier
! versions of ‘__builtin_set_fpscr_rn’ returned void.  A
! ‘__SET_FPSCR_RN_RETURNS_FPSCR__’ macro has been added.  If defined, then
! the ‘__builtin_set_fpscr_rn’ built-in returns the FPSCR fields.  If not
! defined, the ‘__builtin_set_fpscr_rn’ does not return a value.  If the
! ‘-msoft-float’ option is used, the ‘__builtin_set_fpscr_rn’ built-in
  will not return a value.
  
  
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56403,56429 ****
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 2.05 or later.
  Unless specific options are explicitly disabled on the command line,
! specifying option '-mcpu=power6' has the effect of enabling the
! '-mpowerpc64', '-mpowerpc-gpopt', '-mpowerpc-gfxopt', '-mmfcrf',
! '-mpopcntb', '-mfprnd', '-mcmpb', '-mhard-dfp', and '-mrecip-precision'
! options.  Specify the '-maltivec' option explicitly in combination with
  the above options if desired.
  
!  The following functions require option '-mcmpb'.
       unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
       unsigned int __builtin_cmpb (unsigned int, unsigned int);
  
!  The '__builtin_cmpb' function performs a byte-wise compare on the
  contents of its two arguments, returning the result of the byte-wise
  comparison as the returned value.  For each byte comparison, the
  corresponding byte of the return value holds 0xff if the input bytes are
  equal and 0 if the input bytes are not equal.  If either of the
  arguments to this built-in function is wider than 32 bits, the function
! call expands into the form that expects 'unsigned long long int'
  arguments which is only available on 64-bit targets.
  
   The following built-in functions are available when hardware decimal
! floating point ('-mhard-dfp') is available:
       void __builtin_set_fpscr_drn(int);
       _Decimal64 __builtin_ddedpd (int, _Decimal64);
       _Decimal128 __builtin_ddedpdq (int, _Decimal128);
--- 56414,56440 ----
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 2.05 or later.
  Unless specific options are explicitly disabled on the command line,
! specifying option ‘-mcpu=power6’ has the effect of enabling the
! ‘-mpowerpc64’, ‘-mpowerpc-gpopt’, ‘-mpowerpc-gfxopt’, ‘-mmfcrf’,
! ‘-mpopcntb’, ‘-mfprnd’, ‘-mcmpb’, ‘-mhard-dfp’, and ‘-mrecip-precision’
! options.  Specify the ‘-maltivec’ option explicitly in combination with
  the above options if desired.
  
!  The following functions require option ‘-mcmpb’.
       unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
       unsigned int __builtin_cmpb (unsigned int, unsigned int);
  
!  The ‘__builtin_cmpb’ function performs a byte-wise compare on the
  contents of its two arguments, returning the result of the byte-wise
  comparison as the returned value.  For each byte comparison, the
  corresponding byte of the return value holds 0xff if the input bytes are
  equal and 0 if the input bytes are not equal.  If either of the
  arguments to this built-in function is wider than 32 bits, the function
! call expands into the form that expects ‘unsigned long long int’
  arguments which is only available on 64-bit targets.
  
   The following built-in functions are available when hardware decimal
! floating point (‘-mhard-dfp’) is available:
       void __builtin_set_fpscr_drn(int);
       _Decimal64 __builtin_ddedpd (int, _Decimal64);
       _Decimal128 __builtin_ddedpdq (int, _Decimal128);
*************** floating point ('-mhard-dfp') is availab
*** 56466,56513 ****
       point field of the FPSCR.
  
  
!  The following functions require '-mhard-float', '-mpowerpc-gfxopt', and
! '-mpopcntb' options.
  
       double __builtin_recipdiv (double, double);
       float __builtin_recipdivf (float, float);
       double __builtin_rsqrt (double);
       float __builtin_rsqrtf (float);
  
!  The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
  generate multiple instructions to implement the reciprocal sqrt
  functionality using reciprocal sqrt estimate instructions.
  
!  The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
  multiple instructions to implement division using the reciprocal
  estimate instructions.
  
!  The following functions require '-mhard-float' and '-mmultiple'
  options.
  
!  The '__builtin_unpack_longdouble' function takes a 'long double'
  argument and a compile time constant of 0 or 1.  If the constant is 0,
! the first 'double' within the 'long double' is returned, otherwise the
! second 'double' is returned.  The '__builtin_unpack_longdouble' function
! is only available if 'long double' uses the IBM extended double
  representation.
  
!  The '__builtin_pack_longdouble' function takes two 'double' arguments
! and returns a 'long double' value that combines the two arguments.  The
! '__builtin_pack_longdouble' function is only available if 'long double'
  uses the IBM extended double representation.
  
!  The '__builtin_unpack_ibm128' function takes a '__ibm128' argument and
  a compile time constant of 0 or 1.  If the constant is 0, the first
! 'double' within the '__ibm128' is returned, otherwise the second
! 'double' is returned.
  
!  The '__builtin_pack_ibm128' function takes two 'double' arguments and
! returns a '__ibm128' value that combines the two arguments.
  
   Additional built-in functions are available for the 64-bit PowerPC
  family of processors, for efficient use of 128-bit floating point
! ('__float128') values.
  
  
  File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 2.06,  Next: Basic PowerPC Built-in Functions Available on ISA 2.07,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.05,  Up: Basic PowerPC Built-in Functions
--- 56477,56524 ----
       point field of the FPSCR.
  
  
!  The following functions require ‘-mhard-float’, ‘-mpowerpc-gfxopt’, and
! ‘-mpopcntb’ options.
  
       double __builtin_recipdiv (double, double);
       float __builtin_recipdivf (float, float);
       double __builtin_rsqrt (double);
       float __builtin_rsqrtf (float);
  
!  The ‘vec_rsqrt’, ‘__builtin_rsqrt’, and ‘__builtin_rsqrtf’ functions
  generate multiple instructions to implement the reciprocal sqrt
  functionality using reciprocal sqrt estimate instructions.
  
!  The ‘__builtin_recipdiv’, and ‘__builtin_recipdivf’ functions generate
  multiple instructions to implement division using the reciprocal
  estimate instructions.
  
!  The following functions require ‘-mhard-float’ and ‘-mmultiple’
  options.
  
!  The ‘__builtin_unpack_longdouble’ function takes a ‘long double’
  argument and a compile time constant of 0 or 1.  If the constant is 0,
! the first ‘double’ within the ‘long double’ is returned, otherwise the
! second ‘double’ is returned.  The ‘__builtin_unpack_longdouble’ function
! is only available if ‘long double’ uses the IBM extended double
  representation.
  
!  The ‘__builtin_pack_longdouble’ function takes two ‘double’ arguments
! and returns a ‘long double’ value that combines the two arguments.  The
! ‘__builtin_pack_longdouble’ function is only available if ‘long double’
  uses the IBM extended double representation.
  
!  The ‘__builtin_unpack_ibm128’ function takes a ‘__ibm128’ argument and
  a compile time constant of 0 or 1.  If the constant is 0, the first
! ‘double’ within the ‘__ibm128’ is returned, otherwise the second
! ‘double’ is returned.
  
!  The ‘__builtin_pack_ibm128’ function takes two ‘double’ arguments and
! returns a ‘__ibm128’ value that combines the two arguments.
  
   Additional built-in functions are available for the 64-bit PowerPC
  family of processors, for efficient use of 128-bit floating point
! (‘__float128’) values.
  
  
  File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 2.06,  Next: Basic PowerPC Built-in Functions Available on ISA 2.07,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.05,  Up: Basic PowerPC Built-in Functions
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56518,56528 ****
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 2.05 or later.
  Unless specific options are explicitly disabled on the command line,
! specifying option '-mcpu=power7' has the effect of enabling all the same
! options as for '-mcpu=power6' in addition to the '-maltivec',
! '-mpopcntd', and '-mvsx' options.
  
!  The following basic built-in functions require '-mpopcntd':
       unsigned int __builtin_addg6s (unsigned int, unsigned int);
       long long __builtin_bpermd (long long, long long);
       unsigned int __builtin_cbcdtd (unsigned int);
--- 56529,56539 ----
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 2.05 or later.
  Unless specific options are explicitly disabled on the command line,
! specifying option ‘-mcpu=power7’ has the effect of enabling all the same
! options as for ‘-mcpu=power6’ in addition to the ‘-maltivec’,
! ‘-mpopcntd’, and ‘-mvsx’ options.
  
!  The following basic built-in functions require ‘-mpopcntd’:
       unsigned int __builtin_addg6s (unsigned int, unsigned int);
       long long __builtin_bpermd (long long, long long);
       unsigned int __builtin_cbcdtd (unsigned int);
*************** options as for '-mcpu=power6' in additio
*** 56535,56545 ****
       void __builtin_rs6000_speculation_barrier (void);
       long long __builtin_unpack_vector_int128 (vector __int128, signed char);
  
!  Of these, the '__builtin_divde' and '__builtin_divdeu' functions
  require a 64-bit environment.
  
   The following basic built-in functions, which are also supported on x86
! targets, require '-mfloat128'.
       __float128 __builtin_fabsq (__float128);
       __float128 __builtin_copysignq (__float128, __float128);
       __float128 __builtin_infq (void);
--- 56546,56556 ----
       void __builtin_rs6000_speculation_barrier (void);
       long long __builtin_unpack_vector_int128 (vector __int128, signed char);
  
!  Of these, the ‘__builtin_divde’ and ‘__builtin_divdeu’ functions
  require a 64-bit environment.
  
   The following basic built-in functions, which are also supported on x86
! targets, require ‘-mfloat128’.
       __float128 __builtin_fabsq (__float128);
       __float128 __builtin_copysignq (__float128, __float128);
       __float128 __builtin_infq (void);
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56559,56567 ****
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 2.07 or later.
  Unless specific options are explicitly disabled on the command line,
! specifying option '-mcpu=power8' has the effect of enabling all the same
! options as for '-mcpu=power7' in addition to the '-mpower8-fusion',
! '-mcrypto', '-mhtm', '-mquad-memory', and '-mquad-memory-atomic'
  options.
  
   This section intentionally empty.
--- 56570,56578 ----
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 2.07 or later.
  Unless specific options are explicitly disabled on the command line,
! specifying option ‘-mcpu=power8’ has the effect of enabling all the same
! options as for ‘-mcpu=power7’ in addition to the ‘-mpower8-fusion’,
! ‘-mcrypto’, ‘-mhtm’, ‘-mquad-memory’, and ‘-mquad-memory-atomic’
  options.
  
   This section intentionally empty.
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56575,56585 ****
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 3.0 or later.  Unless
  specific options are explicitly disabled on the command line, specifying
! option '-mcpu=power9' has the effect of enabling all the same options as
! for '-mcpu=power8' in addition to the '-misel' option.
  
   The following built-in functions are available on Linux 64-bit systems
! that use the ISA 3.0 instruction set ('-mcpu=power9'):
  
   -- Built-in Function: __float128 __builtin_addf128_round_to_odd
            (__float128, __float128)
--- 56586,56596 ----
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 3.0 or later.  Unless
  specific options are explicitly disabled on the command line, specifying
! option ‘-mcpu=power9’ has the effect of enabling all the same options as
! for ‘-mcpu=power8’ in addition to the ‘-misel’ option.
  
   The following built-in functions are available on Linux 64-bit systems
! that use the ISA 3.0 instruction set (‘-mcpu=power9’):
  
   -- Built-in Function: __float128 __builtin_addf128_round_to_odd
            (__float128, __float128)
*************** that use the ISA 3.0 instruction set ('-
*** 56613,56619 ****
  
   -- Built-in Function: double __builtin_truncf128_round_to_odd
            (__float128)
!      Convert a 128-bit IEEE floating point value to 'double' using round
       to odd as the rounding mode.
  
   The following additional built-in functions are also available for the
--- 56624,56630 ----
  
   -- Built-in Function: double __builtin_truncf128_round_to_odd
            (__float128)
!      Convert a 128-bit IEEE floating point value to ‘double’ using round
       to odd as the rounding mode.
  
   The following additional built-in functions are also available for the
*************** PowerPC family of processors, starting w
*** 56622,56632 ****
   -- Built-in Function: long long __builtin_darn (void)
   -- Built-in Function: long long __builtin_darn_raw (void)
   -- Built-in Function: int __builtin_darn_32 (void)
!      The '__builtin_darn' and '__builtin_darn_raw' functions require a
       64-bit environment supporting ISA 3.0 or later.  The
!      '__builtin_darn' function provides a 64-bit conditioned random
!      number.  The '__builtin_darn_raw' function provides a 64-bit raw
!      random number.  The '__builtin_darn_32' function provides a 32-bit
       conditioned random number.
  
   The following additional built-in functions are also available for the
--- 56633,56643 ----
   -- Built-in Function: long long __builtin_darn (void)
   -- Built-in Function: long long __builtin_darn_raw (void)
   -- Built-in Function: int __builtin_darn_32 (void)
!      The ‘__builtin_darn’ and ‘__builtin_darn_raw’ functions require a
       64-bit environment supporting ISA 3.0 or later.  The
!      ‘__builtin_darn’ function provides a 64-bit conditioned random
!      number.  The ‘__builtin_darn_raw’ function provides a 64-bit raw
!      random number.  The ‘__builtin_darn_32’ function provides a 32-bit
       conditioned random number.
  
   The following additional built-in functions are also available for the
*************** PowerPC family of processors, starting w
*** 56658,56711 ****
  
       double __builtin_mffsl(void);
  
!  The '__builtin_byte_in_set' function requires a 64-bit environment
  supporting ISA 3.0 or later.  This function returns a non-zero value if
! and only if its 'u' argument exactly equals one of the eight bytes
! contained within its 64-bit 'set' argument.
  
!  The '__builtin_byte_in_range' and '__builtin_byte_in_either_range'
  require an environment supporting ISA 3.0 or later.  For these two
! functions, the 'range' argument is encoded as 4 bytes, organized as
! 'hi_1:lo_1:hi_2:lo_2'.  The '__builtin_byte_in_range' function returns a
! non-zero value if and only if its 'u' argument is within the range
! bounded between 'lo_2' and 'hi_2' inclusive.  The
! '__builtin_byte_in_either_range' function returns non-zero if and only
! if its 'u' argument is within either the range bounded between 'lo_1'
! and 'hi_1' inclusive or the range bounded between 'lo_2' and 'hi_2'
  inclusive.
  
!  The '__builtin_dfp_dtstsfi_lt' function returns a non-zero value if and
! only if the number of signficant digits of its 'value' argument is less
! than its 'comparison' argument.  The '__builtin_dfp_dtstsfi_lt_dd' and
! '__builtin_dfp_dtstsfi_lt_td' functions behave similarly, but require
! that the type of the 'value' argument be '__Decimal64' and
! '__Decimal128' respectively.
  
!  The '__builtin_dfp_dtstsfi_gt' function returns a non-zero value if and
! only if the number of signficant digits of its 'value' argument is
! greater than its 'comparison' argument.  The
! '__builtin_dfp_dtstsfi_gt_dd' and '__builtin_dfp_dtstsfi_gt_td'
! functions behave similarly, but require that the type of the 'value'
! argument be '__Decimal64' and '__Decimal128' respectively.
  
!  The '__builtin_dfp_dtstsfi_eq' function returns a non-zero value if and
! only if the number of signficant digits of its 'value' argument equals
! its 'comparison' argument.  The '__builtin_dfp_dtstsfi_eq_dd' and
! '__builtin_dfp_dtstsfi_eq_td' functions behave similarly, but require
! that the type of the 'value' argument be '__Decimal64' and
! '__Decimal128' respectively.
  
!  The '__builtin_dfp_dtstsfi_ov' function returns a non-zero value if and
! only if its 'value' argument has an undefined number of significant
! digits, such as when 'value' is an encoding of 'NaN'.  The
! '__builtin_dfp_dtstsfi_ov_dd' and '__builtin_dfp_dtstsfi_ov_td'
! functions behave similarly, but require that the type of the 'value'
! argument be '__Decimal64' and '__Decimal128' respectively.
  
!  The '__builtin_mffsl' uses the ISA 3.0 'mffsl' instruction to read the
! FPSCR. The instruction is a lower latency version of the 'mffs'
! instruction.  If the 'mffsl' instruction is not available, then the
! builtin uses the older 'mffs' instruction to read the FPSCR.
  
  
  File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 3.1,  Prev: Basic PowerPC Built-in Functions Available on ISA 3.0,  Up: Basic PowerPC Built-in Functions
--- 56669,56722 ----
  
       double __builtin_mffsl(void);
  
!  The ‘__builtin_byte_in_set’ function requires a 64-bit environment
  supporting ISA 3.0 or later.  This function returns a non-zero value if
! and only if its ‘u’ argument exactly equals one of the eight bytes
! contained within its 64-bit ‘set’ argument.
  
!  The ‘__builtin_byte_in_range’ and ‘__builtin_byte_in_either_range’
  require an environment supporting ISA 3.0 or later.  For these two
! functions, the ‘range’ argument is encoded as 4 bytes, organized as
! ‘hi_1:lo_1:hi_2:lo_2’.  The ‘__builtin_byte_in_range’ function returns a
! non-zero value if and only if its ‘u’ argument is within the range
! bounded between ‘lo_2’ and ‘hi_2’ inclusive.  The
! ‘__builtin_byte_in_either_range’ function returns non-zero if and only
! if its ‘u’ argument is within either the range bounded between ‘lo_1’
! and ‘hi_1’ inclusive or the range bounded between ‘lo_2’ and ‘hi_2’
  inclusive.
  
!  The ‘__builtin_dfp_dtstsfi_lt’ function returns a non-zero value if and
! only if the number of signficant digits of its ‘value’ argument is less
! than its ‘comparison’ argument.  The ‘__builtin_dfp_dtstsfi_lt_dd’ and
! ‘__builtin_dfp_dtstsfi_lt_td’ functions behave similarly, but require
! that the type of the ‘value’ argument be ‘__Decimal64’ and
! ‘__Decimal128’ respectively.
  
!  The ‘__builtin_dfp_dtstsfi_gt’ function returns a non-zero value if and
! only if the number of signficant digits of its ‘value’ argument is
! greater than its ‘comparison’ argument.  The
! ‘__builtin_dfp_dtstsfi_gt_dd’ and ‘__builtin_dfp_dtstsfi_gt_td’
! functions behave similarly, but require that the type of the ‘value’
! argument be ‘__Decimal64’ and ‘__Decimal128’ respectively.
  
!  The ‘__builtin_dfp_dtstsfi_eq’ function returns a non-zero value if and
! only if the number of signficant digits of its ‘value’ argument equals
! its ‘comparison’ argument.  The ‘__builtin_dfp_dtstsfi_eq_dd’ and
! ‘__builtin_dfp_dtstsfi_eq_td’ functions behave similarly, but require
! that the type of the ‘value’ argument be ‘__Decimal64’ and
! ‘__Decimal128’ respectively.
  
!  The ‘__builtin_dfp_dtstsfi_ov’ function returns a non-zero value if and
! only if its ‘value’ argument has an undefined number of significant
! digits, such as when ‘value’ is an encoding of ‘NaN’.  The
! ‘__builtin_dfp_dtstsfi_ov_dd’ and ‘__builtin_dfp_dtstsfi_ov_td’
! functions behave similarly, but require that the type of the ‘value’
! argument be ‘__Decimal64’ and ‘__Decimal128’ respectively.
  
!  The ‘__builtin_mffsl’ uses the ISA 3.0 ‘mffsl’ instruction to read the
! FPSCR. The instruction is a lower latency version of the ‘mffs’
! instruction.  If the ‘mffsl’ instruction is not available, then the
! builtin uses the older ‘mffs’ instruction to read the FPSCR.
  
  
  File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 3.1,  Prev: Basic PowerPC Built-in Functions Available on ISA 3.0,  Up: Basic PowerPC Built-in Functions
*************** File: gcc.info,  Node: Basic PowerPC Bui
*** 56716,56751 ****
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 3.1.  Unless specific
  options are explicitly disabled on the command line, specifying option
! '-mcpu=power10' has the effect of enabling all the same options as for
! '-mcpu=power9'.
  
   The following built-in functions are available on Linux 64-bit systems
! that use a future architecture instruction set ('-mcpu=power10'):
  
   -- Built-in Function: unsigned long long __builtin_cfuged (unsigned
            long long, unsigned long long)
       Perform a 64-bit centrifuge operation, as if implemented by the
!      'cfuged' instruction.
  
   -- Built-in Function: unsigned long long __builtin_cntlzdm (unsigned
            long long, unsigned long long)
       Perform a 64-bit count leading zeros operation under mask, as if
!      implemented by the 'cntlzdm' instruction.
  
   -- Built-in Function: unsigned long long __builtin_cnttzdm (unsigned
            long long, unsigned long long)
       Perform a 64-bit count trailing zeros operation under mask, as if
!      implemented by the 'cnttzdm' instruction.
  
   -- Built-in Function: unsigned long long __builtin_pdepd (unsigned long
            long, unsigned long long)
       Perform a 64-bit parallel bits deposit operation, as if implemented
!      by the 'pdepd' instruction.
  
   -- Built-in Function: unsigned long long __builtin_pextd (unsigned long
            long, unsigned long long)
       Perform a 64-bit parallel bits extract operation, as if implemented
!      by the 'pextd' instruction.
  
   -- Built-in Function: vector signed __int128 vsx_xl_sext (signed long
            long, signed char *)
--- 56727,56762 ----
  The basic built-in functions described in this section are available on
  the PowerPC family of processors starting with ISA 3.1.  Unless specific
  options are explicitly disabled on the command line, specifying option
! ‘-mcpu=power10’ has the effect of enabling all the same options as for
! ‘-mcpu=power9’.
  
   The following built-in functions are available on Linux 64-bit systems
! that use a future architecture instruction set (‘-mcpu=power10’):
  
   -- Built-in Function: unsigned long long __builtin_cfuged (unsigned
            long long, unsigned long long)
       Perform a 64-bit centrifuge operation, as if implemented by the
!      ‘cfuged’ instruction.
  
   -- Built-in Function: unsigned long long __builtin_cntlzdm (unsigned
            long long, unsigned long long)
       Perform a 64-bit count leading zeros operation under mask, as if
!      implemented by the ‘cntlzdm’ instruction.
  
   -- Built-in Function: unsigned long long __builtin_cnttzdm (unsigned
            long long, unsigned long long)
       Perform a 64-bit count trailing zeros operation under mask, as if
!      implemented by the ‘cnttzdm’ instruction.
  
   -- Built-in Function: unsigned long long __builtin_pdepd (unsigned long
            long, unsigned long long)
       Perform a 64-bit parallel bits deposit operation, as if implemented
!      by the ‘pdepd’ instruction.
  
   -- Built-in Function: unsigned long long __builtin_pextd (unsigned long
            long, unsigned long long)
       Perform a 64-bit parallel bits extract operation, as if implemented
!      by the ‘pextd’ instruction.
  
   -- Built-in Function: vector signed __int128 vsx_xl_sext (signed long
            long, signed char *)
*************** that use a future architecture instructi
*** 56765,56771 ****
            long, unsigned long long *)
  
       Load (and sign extend) to an __int128 vector, as if implemented by
!      the ISA 3.1 'lxvrbx', 'lxvrhx', 'lxvrwx', and 'lxvrdx'
       instructions.
  
   -- Built-in Function: void vec_xst_trunc (vector signed __int128,
--- 56776,56782 ----
            long, unsigned long long *)
  
       Load (and sign extend) to an __int128 vector, as if implemented by
!      the ISA 3.1 ‘lxvrbx’, ‘lxvrhx’, ‘lxvrwx’, and ‘lxvrdx’
       instructions.
  
   -- Built-in Function: void vec_xst_trunc (vector signed __int128,
*************** that use a future architecture instructi
*** 56786,56793 ****
            signed long long, unsigned long long *)
  
       Truncate and store the rightmost element of a vector, as if
!      implemented by the ISA 3.1 'stxvrbx', 'stxvrhx', 'stxvrwx', and
!      'stxvrdx' instructions.
  
  
  File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: Basic PowerPC Built-in Functions,  Up: Target Builtins
--- 56797,56804 ----
            signed long long, unsigned long long *)
  
       Truncate and store the rightmost element of a vector, as if
!      implemented by the ISA 3.1 ‘stxvrbx’, ‘stxvrhx’, ‘stxvrwx’, and
!      ‘stxvrdx’ instructions.
  
  
  File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: Basic PowerPC Built-in Functions,  Up: Target Builtins
*************** File: gcc.info,  Node: PowerPC AltiVec/V
*** 56798,56804 ****
  GCC provides an interface for the PowerPC family of processors to access
  the AltiVec operations described in Motorola's AltiVec Programming
  Interface Manual.  The interface is made available by including
! '<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
  supports the following vector types.
  
       vector unsigned char
--- 56809,56815 ----
  GCC provides an interface for the PowerPC family of processors to access
  the AltiVec operations described in Motorola's AltiVec Programming
  Interface Manual.  The interface is made available by including
! ‘<altivec.h>’ and using ‘-maltivec’ and ‘-mabi=altivec’.  The interface
  supports the following vector types.
  
       vector unsigned char
*************** supports the following vector types.
*** 56819,56869 ****
  from C and C++ code differs from Motorola's documentation in several
  ways.
  
!    * A vector constant is a list of constant expressions within curly
       braces.
  
!    * A vector initializer requires no cast if the vector constant is of
       the same type as the variable it is initializing.
  
!    * If 'signed' or 'unsigned' is omitted, the signedness of the vector
       type is the default signedness of the base type.  The default
       varies depending on the operating system, so a portable program
       should always specify the signedness.
  
!    * Compiling with '-maltivec' adds keywords '__vector', 'vector',
!      '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
!      context-sensitive substitution of the keywords 'vector', 'pixel'
!      and 'bool' is disabled.  To use them, you must include
!      '<altivec.h>' instead.
  
!    * GCC allows using a 'typedef' name as the type specifier for a
       vector type, but only under the following circumstances:
  
!         * When using '__vector' instead of 'vector'; for example,
  
                 typedef signed short int16;
                 __vector int16 data;
  
!         * When using 'vector' in keyword-and-predefine mode; for
            example,
  
                 typedef signed short int16;
                 vector int16 data;
  
            Note that keyword-and-predefine mode is enabled by disabling
!           GNU extensions (e.g., by using '-std=c11') and including
!           '<altivec.h>'.
  
!    * For C, overloaded functions are implemented with macros so the
       following does not work:
  
              vec_add ((vector signed int){1, 2, 3, 4}, foo);
  
!      Since 'vec_add' is a macro, the vector constant in the example is
       treated as four separate arguments.  Wrap the entire argument in
       parentheses for this to work.
  
!  _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
  uses built-in functions to achieve the functionality in the
  aforementioned header file, but they are not supported and are subject
  to change without notice.
--- 56830,56880 ----
  from C and C++ code differs from Motorola's documentation in several
  ways.
  
!    • A vector constant is a list of constant expressions within curly
       braces.
  
!    • A vector initializer requires no cast if the vector constant is of
       the same type as the variable it is initializing.
  
!    • If ‘signed’ or ‘unsigned’ is omitted, the signedness of the vector
       type is the default signedness of the base type.  The default
       varies depending on the operating system, so a portable program
       should always specify the signedness.
  
!    • Compiling with ‘-maltivec’ adds keywords ‘__vector’, ‘vector’,
!      ‘__pixel’, ‘pixel’, ‘__bool’ and ‘bool’.  When compiling ISO C, the
!      context-sensitive substitution of the keywords ‘vector’, ‘pixel’
!      and ‘bool’ is disabled.  To use them, you must include
!      ‘<altivec.h>’ instead.
  
!    • GCC allows using a ‘typedef’ name as the type specifier for a
       vector type, but only under the following circumstances:
  
!         • When using ‘__vector’ instead of ‘vector’; for example,
  
                 typedef signed short int16;
                 __vector int16 data;
  
!         • When using ‘vector’ in keyword-and-predefine mode; for
            example,
  
                 typedef signed short int16;
                 vector int16 data;
  
            Note that keyword-and-predefine mode is enabled by disabling
!           GNU extensions (e.g., by using ‘-std=c11’) and including
!           ‘<altivec.h>’.
  
!    • For C, overloaded functions are implemented with macros so the
       following does not work:
  
              vec_add ((vector signed int){1, 2, 3, 4}, foo);
  
!      Since ‘vec_add’ is a macro, the vector constant in the example is
       treated as four separate arguments.  Wrap the entire argument in
       parentheses for this to work.
  
!  _Note:_ Only the ‘<altivec.h>’ interface is supported.  Internally, GCC
  uses built-in functions to achieve the functionality in the
  aforementioned header file, but they are not supported and are subject
  to change without notice.
*************** same capabilities should be considered d
*** 56881,56950 ****
  
   The PVIPR documents the following overloaded functions:
  
! 'vec_abs'                'vec_absd'               'vec_abss'
! 'vec_add'                'vec_addc'               'vec_adde'
! 'vec_addec'              'vec_adds'               'vec_all_eq'
! 'vec_all_ge'             'vec_all_gt'             'vec_all_in'
! 'vec_all_le'             'vec_all_lt'             'vec_all_nan'
! 'vec_all_ne'             'vec_all_nge'            'vec_all_ngt'
! 'vec_all_nle'            'vec_all_nlt'            'vec_all_numeric'
! 'vec_and'                'vec_andc'               'vec_any_eq'
! 'vec_any_ge'             'vec_any_gt'             'vec_any_le'
! 'vec_any_lt'             'vec_any_nan'            'vec_any_ne'
! 'vec_any_nge'            'vec_any_ngt'            'vec_any_nle'
! 'vec_any_nlt'            'vec_any_numeric'        'vec_any_out'
! 'vec_avg'                'vec_bperm'              'vec_ceil'
! 'vec_cipher_be'          'vec_cipherlast_be'      'vec_cmpb'
! 'vec_cmpeq'              'vec_cmpge'              'vec_cmpgt'
! 'vec_cmple'              'vec_cmplt'              'vec_cmpne'
! 'vec_cmpnez'             'vec_cntlz'              'vec_cntlz_lsbb'
! 'vec_cnttz'              'vec_cnttz_lsbb'         'vec_cpsgn'
! 'vec_ctf'                'vec_cts'                'vec_ctu'
! 'vec_div'                'vec_double'             'vec_doublee'
! 'vec_doubleh'            'vec_doublel'            'vec_doubleo'
! 'vec_eqv'                'vec_expte'              'vec_extract'
! 'vec_extract_exp'        'vec_extract_fp32_from_shorth''vec_extract_fp32_from_shortl'
! 'vec_extract_sig'        'vec_extract_4b'         'vec_first_match_index'
! 'vec_first_match_or_eos_index''vec_first_mismatch_index''vec_first_mismatch_or_eos_index'
! 'vec_float'              'vec_float2'             'vec_floate'
! 'vec_floato'             'vec_floor'              'vec_gb'
! 'vec_insert'             'vec_insert_exp'         'vec_insert4b'
! 'vec_ld'                 'vec_lde'                'vec_ldl'
! 'vec_loge'               'vec_madd'               'vec_madds'
! 'vec_max'                'vec_mergee'             'vec_mergeh'
! 'vec_mergel'             'vec_mergeo'             'vec_mfvscr'
! 'vec_min'                'vec_mradds'             'vec_msub'
! 'vec_msum'               'vec_msums'              'vec_mtvscr'
! 'vec_mul'                'vec_mule'               'vec_mulo'
! 'vec_nabs'               'vec_nand'               'vec_ncipher_be'
! 'vec_ncipherlast_be'     'vec_nearbyint'          'vec_neg'
! 'vec_nmadd'              'vec_nmsub'              'vec_nor'
! 'vec_or'                 'vec_orc'                'vec_pack'
! 'vec_pack_to_short_fp32' 'vec_packpx'             'vec_packs'
! 'vec_packsu'             'vec_parity_lsbb'        'vec_perm'
! 'vec_permxor'            'vec_pmsum_be'           'vec_popcnt'
! 'vec_re'                 'vec_recipdiv'           'vec_revb'
! 'vec_reve'               'vec_rint'               'vec_rl'
! 'vec_rlmi'               'vec_rlnm'               'vec_round'
! 'vec_rsqrt'              'vec_rsqrte'             'vec_sbox_be'
! 'vec_sel'                'vec_shasigma_be'        'vec_signed'
! 'vec_signed2'            'vec_signede'            'vec_signedo'
! 'vec_sl'                 'vec_sld'                'vec_sldw'
! 'vec_sll'                'vec_slo'                'vec_slv'
! 'vec_splat'              'vec_splat_s8'           'vec_splat_s16'
! 'vec_splat_s32'          'vec_splat_u8'           'vec_splat_u16'
! 'vec_splat_u32'          'vec_splats'             'vec_sqrt'
! 'vec_sr'                 'vec_sra'                'vec_srl'
! 'vec_sro'                'vec_srv'                'vec_st'
! 'vec_ste'                'vec_stl'                'vec_sub'
! 'vec_subc'               'vec_sube'               'vec_subec'
! 'vec_subs'               'vec_sum2s'              'vec_sum4s'
! 'vec_sums'               'vec_test_data_class'    'vec_trunc'
! 'vec_unpackh'            'vec_unpackl'            'vec_unsigned'
! 'vec_unsigned2'          'vec_unsignede'          'vec_unsignedo'
! 'vec_xl'                 'vec_xl_be'              'vec_xl_len'
! 'vec_xl_len_r'           'vec_xor'                'vec_xst'
! 'vec_xst_be'             'vec_xst_len'            'vec_xst_len_r'
                                                    
  
  * Menu:
--- 56892,56961 ----
  
   The PVIPR documents the following overloaded functions:
  
! ‘vec_abs’                ‘vec_absd’               ‘vec_abss’
! ‘vec_add’                ‘vec_addc’               ‘vec_adde’
! ‘vec_addec’              ‘vec_adds’               ‘vec_all_eq’
! ‘vec_all_ge’             ‘vec_all_gt’             ‘vec_all_in’
! ‘vec_all_le’             ‘vec_all_lt’             ‘vec_all_nan’
! ‘vec_all_ne’             ‘vec_all_nge’            ‘vec_all_ngt’
! ‘vec_all_nle’            ‘vec_all_nlt’            ‘vec_all_numeric’
! ‘vec_and’                ‘vec_andc’               ‘vec_any_eq’
! ‘vec_any_ge’             ‘vec_any_gt’             ‘vec_any_le’
! ‘vec_any_lt’             ‘vec_any_nan’            ‘vec_any_ne’
! ‘vec_any_nge’            ‘vec_any_ngt’            ‘vec_any_nle’
! ‘vec_any_nlt’            ‘vec_any_numeric’        ‘vec_any_out’
! ‘vec_avg’                ‘vec_bperm’              ‘vec_ceil’
! ‘vec_cipher_be’          ‘vec_cipherlast_be’      ‘vec_cmpb’
! ‘vec_cmpeq’              ‘vec_cmpge’              ‘vec_cmpgt’
! ‘vec_cmple’              ‘vec_cmplt’              ‘vec_cmpne’
! ‘vec_cmpnez’             ‘vec_cntlz’              ‘vec_cntlz_lsbb’
! ‘vec_cnttz’              ‘vec_cnttz_lsbb’         ‘vec_cpsgn’
! ‘vec_ctf’                ‘vec_cts’                ‘vec_ctu’
! ‘vec_div’                ‘vec_double’             ‘vec_doublee’
! ‘vec_doubleh’            ‘vec_doublel’            ‘vec_doubleo’
! ‘vec_eqv’                ‘vec_expte’              ‘vec_extract’
! ‘vec_extract_exp’        ‘vec_extract_fp32_from_shorth’‘vec_extract_fp32_from_shortl’
! ‘vec_extract_sig’        ‘vec_extract_4b’         ‘vec_first_match_index’
! ‘vec_first_match_or_eos_index’‘vec_first_mismatch_index’‘vec_first_mismatch_or_eos_index’
! ‘vec_float’              ‘vec_float2’             ‘vec_floate’
! ‘vec_floato’             ‘vec_floor’              ‘vec_gb’
! ‘vec_insert’             ‘vec_insert_exp’         ‘vec_insert4b’
! ‘vec_ld’                 ‘vec_lde’                ‘vec_ldl’
! ‘vec_loge’               ‘vec_madd’               ‘vec_madds’
! ‘vec_max’                ‘vec_mergee’             ‘vec_mergeh’
! ‘vec_mergel’             ‘vec_mergeo’             ‘vec_mfvscr’
! ‘vec_min’                ‘vec_mradds’             ‘vec_msub’
! ‘vec_msum’               ‘vec_msums’              ‘vec_mtvscr’
! ‘vec_mul’                ‘vec_mule’               ‘vec_mulo’
! ‘vec_nabs’               ‘vec_nand’               ‘vec_ncipher_be’
! ‘vec_ncipherlast_be’     ‘vec_nearbyint’          ‘vec_neg’
! ‘vec_nmadd’              ‘vec_nmsub’              ‘vec_nor’
! ‘vec_or’                 ‘vec_orc’                ‘vec_pack’
! ‘vec_pack_to_short_fp32’ ‘vec_packpx’             ‘vec_packs’
! ‘vec_packsu’             ‘vec_parity_lsbb’        ‘vec_perm’
! ‘vec_permxor’            ‘vec_pmsum_be’           ‘vec_popcnt’
! ‘vec_re’                 ‘vec_recipdiv’           ‘vec_revb’
! ‘vec_reve’               ‘vec_rint’               ‘vec_rl’
! ‘vec_rlmi’               ‘vec_rlnm’               ‘vec_round’
! ‘vec_rsqrt’              ‘vec_rsqrte’             ‘vec_sbox_be’
! ‘vec_sel’                ‘vec_shasigma_be’        ‘vec_signed’
! ‘vec_signed2’            ‘vec_signede’            ‘vec_signedo’
! ‘vec_sl’                 ‘vec_sld’                ‘vec_sldw’
! ‘vec_sll’                ‘vec_slo’                ‘vec_slv’
! ‘vec_splat’              ‘vec_splat_s8’           ‘vec_splat_s16’
! ‘vec_splat_s32’          ‘vec_splat_u8’           ‘vec_splat_u16’
! ‘vec_splat_u32’          ‘vec_splats’             ‘vec_sqrt’
! ‘vec_sr’                 ‘vec_sra’                ‘vec_srl’
! ‘vec_sro’                ‘vec_srv’                ‘vec_st’
! ‘vec_ste’                ‘vec_stl’                ‘vec_sub’
! ‘vec_subc’               ‘vec_sube’               ‘vec_subec’
! ‘vec_subs’               ‘vec_sum2s’              ‘vec_sum4s’
! ‘vec_sums’               ‘vec_test_data_class’    ‘vec_trunc’
! ‘vec_unpackh’            ‘vec_unpackl’            ‘vec_unsigned’
! ‘vec_unsigned2’          ‘vec_unsignede’          ‘vec_unsignedo’
! ‘vec_xl’                 ‘vec_xl_be’              ‘vec_xl_len’
! ‘vec_xl_len_r’           ‘vec_xor’                ‘vec_xst’
! ‘vec_xst_be’             ‘vec_xst_len’            ‘vec_xst_len_r’
                                                    
  
  * Menu:
*************** a direct mapping between generic and spe
*** 56967,56973 ****
  generic names are shown here, although the specific operations can also
  be used.
  
!  Arguments that are documented as 'const int' require literal integral
  values within the range required for that operation.
  
   Only functions excluded from the PVIPR are listed here.
--- 56978,56984 ----
  generic names are shown here, although the specific operations can also
  be used.
  
!  Arguments that are documented as ‘const int’ require literal integral
  values within the range required for that operation.
  
   Only functions excluded from the PVIPR are listed here.
*************** File: gcc.info,  Node: PowerPC AltiVec B
*** 57445,57453 ****
  
  The AltiVec built-in functions described in this section are available
  on the PowerPC family of processors starting with ISA 2.06 or later.
! These are normally enabled by adding '-mvsx' to the command line.
  
!  When '-mvsx' is used, the following additional vector types are
  implemented.
  
       vector unsigned __int128
--- 57456,57464 ----
  
  The AltiVec built-in functions described in this section are available
  on the PowerPC family of processors starting with ISA 2.06 or later.
! These are normally enabled by adding ‘-mvsx’ to the command line.
  
!  When ‘-mvsx’ is used, the following additional vector types are
  implemented.
  
       vector unsigned __int128
*************** implemented.
*** 57560,57569 ****
       vector unsigned char vec_xxsldi (vector unsigned char,
                                        vector unsigned char, int);
  
!  Note that the 'vec_ld' and 'vec_st' built-in functions always generate
! the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
! set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
! always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
  instructions.
  
  
--- 57571,57580 ----
       vector unsigned char vec_xxsldi (vector unsigned char,
                                        vector unsigned char, int);
  
!  Note that the ‘vec_ld’ and ‘vec_st’ built-in functions always generate
! the AltiVec ‘LVX’ and ‘STVX’ instructions even if the VSX instruction
! set is available.  The ‘vec_vsx_ld’ and ‘vec_vsx_st’ built-in functions
! always generate the VSX ‘LXVD2X’, ‘LXVW4X’, ‘STXVD2X’, and ‘STXVW4X’
  instructions.
  
  
*************** File: gcc.info,  Node: PowerPC AltiVec B
*** 57766,57772 ****
  .................................................................
  
  The following additional built-in functions are also available for the
! PowerPC family of processors, starting with ISA 3.0 ('-mcpu=power9') or
  later.
  
   Only instructions excluded from the PVIPR are listed here.
--- 57777,57783 ----
  .................................................................
  
  The following additional built-in functions are also available for the
! PowerPC family of processors, starting with ISA 3.0 (‘-mcpu=power9’) or
  later.
  
   Only instructions excluded from the PVIPR are listed here.
*************** later.
*** 57802,57862 ****
       bool scalar_test_neg (double source);
       bool scalar_test_neg (__ieee128 source);
  
!  The 'scalar_extract_exp' with a 64-bit source argument function
  requires an environment supporting ISA 3.0 or later.  The
! 'scalar_extract_exp' with a 128-bit source argument and
! 'scalar_extract_sig' functions require a 64-bit environment supporting
! ISA 3.0 or later.  The 'scalar_extract_exp' and 'scalar_extract_sig'
  built-in functions return the significand and the biased exponent value
! respectively of their 'source' arguments.  When supplied with a 64-bit
! 'source' argument, the result returned by 'scalar_extract_sig' has the
! '0x0010000000000000' bit set if the function's 'source' argument is in
  normalized form.  Otherwise, this bit is set to 0.  When supplied with a
! 128-bit 'source' argument, the '0x00010000000000000000000000000000' bit
  of the result is treated similarly.  Note that the sign of the
  significand is not represented in the result returned from the
! 'scalar_extract_sig' function.  Use the 'scalar_test_neg' function to
! test the sign of its 'double' argument.
  
!  The 'scalar_insert_exp' functions require a 64-bit environment
  supporting ISA 3.0 or later.  When supplied with a 64-bit first
! argument, the 'scalar_insert_exp' built-in function returns a
  double-precision floating point value that is constructed by assembling
! the values of its 'significand' and 'exponent' arguments.  The sign of
! the result is copied from the most significant bit of the 'significand'
  argument.  The significand and exponent components of the result are
! composed of the least significant 11 bits of the 'exponent' argument and
! the least significant 52 bits of the 'significand' argument
  respectively.
  
!  When supplied with a 128-bit first argument, the 'scalar_insert_exp'
  built-in function returns a quad-precision IEEE floating point value if
  the two arguments were scalar.  If the two arguments are vectors, the
  return value is a vector IEEE floating point value.  The sign bit of the
! result is copied from the most significant bit of the 'significand'
  argument.  The significand and exponent components of the result are
! composed of the least significant 15 bits of the 'exponent' argument
  (element 0 on big-endian and element 1 on little-endian) and the least
! significant 112 bits of the 'significand' argument respectively.  Note,
! the 'significand' is the scalar argument or in the case of vector
! arguments, 'significand' is element 0 for big-endian and element 1 for
  little-endian.
  
!  The 'scalar_extract_exp_to_vec', and 'scalar_extract_sig_to_vec' are
! similar to 'scalar_extract_exp', 'scalar_extract_sig' except they return
  a vector result of type unsigned long long and unsigned __int128
  respectively.
  
!  The 'scalar_cmp_exp_gt', 'scalar_cmp_exp_lt', 'scalar_cmp_exp_eq', and
! 'scalar_cmp_exp_unordered' built-in functions return a non-zero value if
! 'arg1' is greater than, less than, equal to, or not comparable to 'arg2'
  respectively.  The arguments are not comparable if one or the other
  equals NaN (not a number).
  
!  The 'scalar_test_data_class' built-in function returns 1 if any of the
! condition tests enabled by the value of the 'condition' variable are
! true, and 0 otherwise.  The 'condition' argument must be a compile-time
! constant integer with value not exceeding 127.  The 'condition' argument
  is encoded as a bitmask with each bit enabling the testing of a
  different condition, as characterized by the following:
       0x40    Test for NaN
--- 57813,57873 ----
       bool scalar_test_neg (double source);
       bool scalar_test_neg (__ieee128 source);
  
!  The ‘scalar_extract_exp’ with a 64-bit source argument function
  requires an environment supporting ISA 3.0 or later.  The
! ‘scalar_extract_exp’ with a 128-bit source argument and
! ‘scalar_extract_sig’ functions require a 64-bit environment supporting
! ISA 3.0 or later.  The ‘scalar_extract_exp’ and ‘scalar_extract_sig’
  built-in functions return the significand and the biased exponent value
! respectively of their ‘source’ arguments.  When supplied with a 64-bit
! ‘source’ argument, the result returned by ‘scalar_extract_sig’ has the
! ‘0x0010000000000000’ bit set if the function's ‘source’ argument is in
  normalized form.  Otherwise, this bit is set to 0.  When supplied with a
! 128-bit ‘source’ argument, the ‘0x00010000000000000000000000000000’ bit
  of the result is treated similarly.  Note that the sign of the
  significand is not represented in the result returned from the
! ‘scalar_extract_sig’ function.  Use the ‘scalar_test_neg’ function to
! test the sign of its ‘double’ argument.
  
!  The ‘scalar_insert_exp’ functions require a 64-bit environment
  supporting ISA 3.0 or later.  When supplied with a 64-bit first
! argument, the ‘scalar_insert_exp’ built-in function returns a
  double-precision floating point value that is constructed by assembling
! the values of its ‘significand’ and ‘exponent’ arguments.  The sign of
! the result is copied from the most significant bit of the ‘significand’
  argument.  The significand and exponent components of the result are
! composed of the least significant 11 bits of the ‘exponent’ argument and
! the least significant 52 bits of the ‘significand’ argument
  respectively.
  
!  When supplied with a 128-bit first argument, the ‘scalar_insert_exp’
  built-in function returns a quad-precision IEEE floating point value if
  the two arguments were scalar.  If the two arguments are vectors, the
  return value is a vector IEEE floating point value.  The sign bit of the
! result is copied from the most significant bit of the ‘significand’
  argument.  The significand and exponent components of the result are
! composed of the least significant 15 bits of the ‘exponent’ argument
  (element 0 on big-endian and element 1 on little-endian) and the least
! significant 112 bits of the ‘significand’ argument respectively.  Note,
! the ‘significand’ is the scalar argument or in the case of vector
! arguments, ‘significand’ is element 0 for big-endian and element 1 for
  little-endian.
  
!  The ‘scalar_extract_exp_to_vec’, and ‘scalar_extract_sig_to_vec’ are
! similar to ‘scalar_extract_exp’, ‘scalar_extract_sig’ except they return
  a vector result of type unsigned long long and unsigned __int128
  respectively.
  
!  The ‘scalar_cmp_exp_gt’, ‘scalar_cmp_exp_lt’, ‘scalar_cmp_exp_eq’, and
! ‘scalar_cmp_exp_unordered’ built-in functions return a non-zero value if
! ‘arg1’ is greater than, less than, equal to, or not comparable to ‘arg2’
  respectively.  The arguments are not comparable if one or the other
  equals NaN (not a number).
  
!  The ‘scalar_test_data_class’ built-in function returns 1 if any of the
! condition tests enabled by the value of the ‘condition’ variable are
! true, and 0 otherwise.  The ‘condition’ argument must be a compile-time
! constant integer with value not exceeding 127.  The ‘condition’ argument
  is encoded as a bitmask with each bit enabling the testing of a
  different condition, as characterized by the following:
       0x40    Test for NaN
*************** different condition, as characterized by
*** 57867,57877 ****
       0x02    Test for +Denormal
       0x01    Test for -Denormal
  
!  The 'scalar_test_neg' built-in function returns 1 if its 'source'
  argument holds a negative value, 0 otherwise.
  
   The following built-in functions are also available for the PowerPC
! family of processors, starting with ISA 3.0 or later ('-mcpu=power9').
  These string functions are described separately in order to group the
  descriptions closer to the function prototypes.
  
--- 57878,57888 ----
       0x02    Test for +Denormal
       0x01    Test for -Denormal
  
!  The ‘scalar_test_neg’ built-in function returns 1 if its ‘source’
  argument holds a negative value, 0 otherwise.
  
   The following built-in functions are also available for the PowerPC
! family of processors, starting with ISA 3.0 or later (‘-mcpu=power9’).
  These string functions are described separately in order to group the
  descriptions closer to the function prototypes.
  
*************** descriptions closer to the function prot
*** 57907,57941 ****
       unsigned int vec_xrx (unsigned int index, vector unsigned int data);
       float vec_xrx (unsigned int index, vector float data);
  
!  The 'vec_all_nez', 'vec_any_eqz', and 'vec_cmpnez' perform pairwise
  comparisons between the elements at the same positions within their two
! vector arguments.  The 'vec_all_nez' function returns a non-zero value
  if and only if all pairwise comparisons are not equal and no element of
! either vector argument contains a zero.  The 'vec_any_eqz' function
  returns a non-zero value if and only if at least one pairwise comparison
  is equal or if at least one element of either vector argument contains a
! zero.  The 'vec_cmpnez' function returns a vector of the same type as
  its two arguments, within which each element consists of all ones to
  denote that either the corresponding elements of the incoming arguments
  are not equal or that at least one of the corresponding elements
  contains zero.  Otherwise, the element of the returned vector contains
  all zeros.
  
!  The 'vec_xlx' and 'vec_xrx' functions extract the single element
! selected by the 'index' argument from the vector represented by the
! 'data' argument.  The 'index' argument always specifies a byte offset,
! regardless of the size of the vector element.  With 'vec_xlx', 'index'
  is the offset of the first byte of the element to be extracted.  With
! 'vec_xrx', 'index' represents the last byte of the element to be
  extracted, measured from the right end of the vector.  In other words,
! the last byte of the element to be extracted is found at position '(15 -
! index)'.  There is no requirement that 'index' be a multiple of the
  vector element size.  However, if the size of the vector element added
! to 'index' is greater than 15, the content of the returned value is
  undefined.
  
   The following functions are also available if the ISA 3.0 instruction
! set additions ('-mcpu=power9') are available.
  
   Only functions excluded from the PVIPR are listed here.
  
--- 57918,57952 ----
       unsigned int vec_xrx (unsigned int index, vector unsigned int data);
       float vec_xrx (unsigned int index, vector float data);
  
!  The ‘vec_all_nez’, ‘vec_any_eqz’, and ‘vec_cmpnez’ perform pairwise
  comparisons between the elements at the same positions within their two
! vector arguments.  The ‘vec_all_nez’ function returns a non-zero value
  if and only if all pairwise comparisons are not equal and no element of
! either vector argument contains a zero.  The ‘vec_any_eqz’ function
  returns a non-zero value if and only if at least one pairwise comparison
  is equal or if at least one element of either vector argument contains a
! zero.  The ‘vec_cmpnez’ function returns a vector of the same type as
  its two arguments, within which each element consists of all ones to
  denote that either the corresponding elements of the incoming arguments
  are not equal or that at least one of the corresponding elements
  contains zero.  Otherwise, the element of the returned vector contains
  all zeros.
  
!  The ‘vec_xlx’ and ‘vec_xrx’ functions extract the single element
! selected by the ‘index’ argument from the vector represented by the
! ‘data’ argument.  The ‘index’ argument always specifies a byte offset,
! regardless of the size of the vector element.  With ‘vec_xlx’, ‘index’
  is the offset of the first byte of the element to be extracted.  With
! ‘vec_xrx’, ‘index’ represents the last byte of the element to be
  extracted, measured from the right end of the vector.  In other words,
! the last byte of the element to be extracted is found at position ‘(15 -
! index)’.  There is no requirement that ‘index’ be a multiple of the
  vector element size.  However, if the size of the vector element added
! to ‘index’ is greater than 15, the content of the returned value is
  undefined.
  
   The following functions are also available if the ISA 3.0 instruction
! set additions (‘-mcpu=power9’) are available.
  
   Only functions excluded from the PVIPR are listed here.
  
*************** set additions ('-mcpu=power9') are avail
*** 57971,57977 ****
       vector long long vec_vprtybd (vector long long);
       vector unsigned long long vec_vprtybd (vector unsigned long long);
  
!  On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
  available:
  
       vector long vec_vprtyb (vector long);
--- 57982,57988 ----
       vector long long vec_vprtybd (vector long long);
       vector unsigned long long vec_vprtybd (vector unsigned long long);
  
!  On 64-bit targets, if the ISA 3.0 additions (‘-mcpu=power9’) are
  available:
  
       vector long vec_vprtyb (vector long);
*************** available:
*** 57986,57992 ****
       vector __uint128 vec_vprtybd (vector __uint128);
  
   The following built-in functions are available for the PowerPC family
! of processors, starting with ISA 3.0 or later ('-mcpu=power9').
  
   Only functions excluded from the PVIPR are listed here.
  
--- 57997,58003 ----
       vector __uint128 vec_vprtybd (vector __uint128);
  
   The following built-in functions are available for the PowerPC family
! of processors, starting with ISA 3.0 or later (‘-mcpu=power9’).
  
   Only functions excluded from the PVIPR are listed here.
  
*************** of processors, starting with ISA 3.0 or
*** 57997,58020 ****
       __vector unsigned int
       vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
  
!  The 'vec_absd', 'vec_absdb', 'vec_absdh', and 'vec_absdw' built-in
  functions each computes the absolute differences of the pairs of vector
  elements supplied in its two vector arguments, placing the absolute
  differences into the corresponding elements of the vector result.
  
   The following built-in functions are available for the PowerPC family
! of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
       vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
       vector unsigned long long vec_vrlnm (vector unsigned long long,
                                            vector unsigned long long);
  
!  The result of 'vec_vrlnm' is obtained by rotating each element of the
  first argument vector left and ANDing it with a mask.  The second
  argument vector contains the mask beginning in bits 11:15, the mask end
  in bits 19:23, and the shift count in bits 27:31, of each element.
  
!  If the cryptographic instructions are enabled ('-mcrypto' or
! '-mcpu=power8'), the following builtins are enabled.
  
   Only functions excluded from the PVIPR are listed here.
  
--- 58008,58031 ----
       __vector unsigned int
       vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
  
!  The ‘vec_absd’, ‘vec_absdb’, ‘vec_absdh’, and ‘vec_absdw’ built-in
  functions each computes the absolute differences of the pairs of vector
  elements supplied in its two vector arguments, placing the absolute
  differences into the corresponding elements of the vector result.
  
   The following built-in functions are available for the PowerPC family
! of processors, starting with ISA 3.0 or later (‘-mcpu=power9’):
       vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
       vector unsigned long long vec_vrlnm (vector unsigned long long,
                                            vector unsigned long long);
  
!  The result of ‘vec_vrlnm’ is obtained by rotating each element of the
  first argument vector left and ANDing it with a mask.  The second
  argument vector contains the mask beginning in bits 11:15, the mask end
  in bits 19:23, and the shift count in bits 27:31, of each element.
  
!  If the cryptographic instructions are enabled (‘-mcrypto’ or
! ‘-mcpu=power8’), the following builtins are enabled.
  
   Only functions excluded from the PVIPR are listed here.
  
*************** File: gcc.info,  Node: PowerPC AltiVec B
*** 58093,58137 ****
  .................................................................
  
  The following additional built-in functions are also available for the
! PowerPC family of processors, starting with ISA 3.1 ('-mcpu=power10'):
  
  vector unsigned long long int
  vec_cfuge (vector unsigned long long int, vector unsigned long long int);
   Perform a vector centrifuge operation, as if implemented by the
! 'vcfuged' instruction.
  
  vector unsigned long long int
  vec_cntlzm (vector unsigned long long int, vector unsigned long long int);
   Perform a vector count leading zeros under bit mask operation, as if
! implemented by the 'vclzdm' instruction.
  
  vector unsigned long long int
  vec_cnttzm (vector unsigned long long int, vector unsigned long long int);
   Perform a vector count trailing zeros under bit mask operation, as if
! implemented by the 'vctzdm' instruction.
  
  vector signed char
  vec_clrl (vector signed char A, unsigned int N);
  vector unsigned char
  vec_clrl (vector unsigned char A, unsigned int N);
!  Clear the left-most '(16 - n)' bytes of vector argument 'a', as if
! implemented by the 'vclrlb' instruction on a big-endian target and by
! the 'vclrrb' instruction on a little-endian target.  A value of 'n' that
  is greater than 16 is treated as if it equaled 16.
  
  vector signed char
  vec_clrr (vector signed char A, unsigned int N);
  vector unsigned char
  vec_clrr (vector unsigned char A, unsigned int N);
!  Clear the right-most '(16 - n)' bytes of vector argument 'a', as if
! implemented by the 'vclrrb' instruction on a big-endian target and by
! the 'vclrlb' instruction on a little-endian target.  A value of 'n' that
  is greater than 16 is treated as if it equaled 16.
  
  vector unsigned long long int
  vec_gnb (vector unsigned __int128, const unsigned char);
   Perform a 128-bit vector gather operation, as if implemented by the
! 'vgnb' instruction.  The second argument must be a literal integer value
  between 2 and 7 inclusive.
  
   Vector Extract
--- 58104,58148 ----
  .................................................................
  
  The following additional built-in functions are also available for the
! PowerPC family of processors, starting with ISA 3.1 (‘-mcpu=power10’):
  
  vector unsigned long long int
  vec_cfuge (vector unsigned long long int, vector unsigned long long int);
   Perform a vector centrifuge operation, as if implemented by the
! ‘vcfuged’ instruction.
  
  vector unsigned long long int
  vec_cntlzm (vector unsigned long long int, vector unsigned long long int);
   Perform a vector count leading zeros under bit mask operation, as if
! implemented by the ‘vclzdm’ instruction.
  
  vector unsigned long long int
  vec_cnttzm (vector unsigned long long int, vector unsigned long long int);
   Perform a vector count trailing zeros under bit mask operation, as if
! implemented by the ‘vctzdm’ instruction.
  
  vector signed char
  vec_clrl (vector signed char A, unsigned int N);
  vector unsigned char
  vec_clrl (vector unsigned char A, unsigned int N);
!  Clear the left-most ‘(16 - n)’ bytes of vector argument ‘a’, as if
! implemented by the ‘vclrlb’ instruction on a big-endian target and by
! the ‘vclrrb’ instruction on a little-endian target.  A value of ‘n’ that
  is greater than 16 is treated as if it equaled 16.
  
  vector signed char
  vec_clrr (vector signed char A, unsigned int N);
  vector unsigned char
  vec_clrr (vector unsigned char A, unsigned int N);
!  Clear the right-most ‘(16 - n)’ bytes of vector argument ‘a’, as if
! implemented by the ‘vclrrb’ instruction on a big-endian target and by
! the ‘vclrlb’ instruction on a little-endian target.  A value of ‘n’ that
  is greater than 16 is treated as if it equaled 16.
  
  vector unsigned long long int
  vec_gnb (vector unsigned __int128, const unsigned char);
   Perform a 128-bit vector gather operation, as if implemented by the
! ‘vgnb’ instruction.  The second argument must be a literal integer value
  between 2 and 7 inclusive.
  
   Vector Extract
*************** rejected.  For little-endian, this outpu
*** 58152,58164 ****
  the hardware instruction, i.e., dword[0] in RTL notation.  For
  big-endian, an additional instruction is needed to move it from the
  "left" doubleword to the "right" one.  For little-endian, semantics
! matching the 'vextdubvrx', 'vextduhvrx', 'vextduwvrx' instruction will
! be generated, while for big-endian, semantics matching the 'vextdubvlx',
! 'vextduhvlx', 'vextduwvlx' instructions will be generated.  Note that
  some fairly anomalous results can be generated if the byte index is not
  aligned on an element boundary for the element being extracted.  This is
  a limitation of the bi-endian vector programming model is consistent
! with the limitation on 'vec_perm'.
  
  vector unsigned long long int
  vec_extracth (vector unsigned char, vector unsigned char, unsigned int);
--- 58163,58175 ----
  the hardware instruction, i.e., dword[0] in RTL notation.  For
  big-endian, an additional instruction is needed to move it from the
  "left" doubleword to the "right" one.  For little-endian, semantics
! matching the ‘vextdubvrx’, ‘vextduhvrx’, ‘vextduwvrx’ instruction will
! be generated, while for big-endian, semantics matching the ‘vextdubvlx’,
! ‘vextduhvlx’, ‘vextduwvlx’ instructions will be generated.  Note that
  some fairly anomalous results can be generated if the byte index is not
  aligned on an element boundary for the element being extracted.  This is
  a limitation of the bi-endian vector programming model is consistent
! with the limitation on ‘vec_perm’.
  
  vector unsigned long long int
  vec_extracth (vector unsigned char, vector unsigned char, unsigned int);
*************** little-endian, this output will match th
*** 58180,58197 ****
  instruction (vextdubvrx, vextduhvrx, vextduwvrx, vextddvrx) i.e.,
  dword[0] in RTL notation.  For big-endian, an additional instruction is
  needed to move it from the "left" doubleword to the "right" one.  For
! little-endian, semantics matching the 'vextdubvlx', 'vextduhvlx',
! 'vextduwvlx' instructions will be generated, while for big-endian,
! semantics matching the 'vextdubvrx', 'vextduhvrx', 'vextduwvrx'
  instructions will be generated.  Note that some fairly anomalous results
  can be generated if the byte index is not aligned on the element
  boundary for the element being extracted.  This is a limitation of the
  bi-endian vector programming model consistent with the limitation on
! 'vec_perm'.
  vector unsigned long long int
  vec_pdep (vector unsigned long long int, vector unsigned long long int);
   Perform a vector parallel bits deposit operation, as if implemented by
! the 'vpdepd' instruction.
  
   Vector Insert
  
--- 58191,58208 ----
  instruction (vextdubvrx, vextduhvrx, vextduwvrx, vextddvrx) i.e.,
  dword[0] in RTL notation.  For big-endian, an additional instruction is
  needed to move it from the "left" doubleword to the "right" one.  For
! little-endian, semantics matching the ‘vextdubvlx’, ‘vextduhvlx’,
! ‘vextduwvlx’ instructions will be generated, while for big-endian,
! semantics matching the ‘vextdubvrx’, ‘vextduhvrx’, ‘vextduwvrx’
  instructions will be generated.  Note that some fairly anomalous results
  can be generated if the byte index is not aligned on the element
  boundary for the element being extracted.  This is a limitation of the
  bi-endian vector programming model consistent with the limitation on
! ‘vec_perm’.
  vector unsigned long long int
  vec_pdep (vector unsigned long long int, vector unsigned long long int);
   Perform a vector parallel bits deposit operation, as if implemented by
! the ‘vpdepd’ instruction.
  
   Vector Insert
  
*************** in the second argument.  The rest of the
*** 58220,58227 ****
  If the byte index is greater than 14 for halfwords, greater than 12 for
  words, or greater than 8 for doublewords the result is undefined.  For
  little-endian, the generated code will be semantically equivalent to
! 'vins[bhwd]rx' instructions.  Similarly for big-endian it will be
! semantically equivalent to 'vins[bhwd]lx'.  Note that some fairly
  anomalous results can be generated if the byte index is not aligned on
  an element boundary for the type of element being inserted.
  
--- 58231,58238 ----
  If the byte index is greater than 14 for halfwords, greater than 12 for
  words, or greater than 8 for doublewords the result is undefined.  For
  little-endian, the generated code will be semantically equivalent to
! ‘vins[bhwd]rx’ instructions.  Similarly for big-endian it will be
! semantically equivalent to ‘vins[bhwd]lx’.  Note that some fairly
  anomalous results can be generated if the byte index is not aligned on
  an element boundary for the type of element being inserted.
  
*************** If the byte index is greater than 14 for
*** 58251,58258 ****
  for doublewords, the intrinsic will be rejected.  Note that the
  underlying hardware instruction uses the same register for the second
  argument and the result.  For little-endian, the code generation will be
! semantically equivalent to 'vins[bhwd]lx', while for big-endian it will
! be semantically equivalent to 'vins[bhwd]rx'.  Note that some fairly
  anomalous results can be generated if the byte index is not aligned on
  an element boundary for the sort of element being inserted.
  
--- 58262,58269 ----
  for doublewords, the intrinsic will be rejected.  Note that the
  underlying hardware instruction uses the same register for the second
  argument and the result.  For little-endian, the code generation will be
! semantically equivalent to ‘vins[bhwd]lx’, while for big-endian it will
! be semantically equivalent to ‘vins[bhwd]rx’.  Note that some fairly
  anomalous results can be generated if the byte index is not aligned on
  an element boundary for the sort of element being inserted.
  
*************** vector double vec_blendv (vector double,
*** 58392,58398 ****
  
   Blend the first and second argument vectors according to the sign bits
  of the corresponding elements of the third argument vector.  This is
! similar to the 'vsel' and 'xxsel' instructions but for bigger elements.
  
   Vector Permute Extended
  
--- 58403,58409 ----
  
   Blend the first and second argument vectors according to the sign bits
  of the corresponding elements of the third argument vector.  This is
! similar to the ‘vsel’ and ‘xxsel’ instructions but for bigger elements.
  
   Vector Permute Extended
  
*************** of the emulated vector is contained in t
*** 58426,58432 ****
  vector unsigned long long int
  vec_pext (vector unsigned long long int, vector unsigned long long int);
   Perform a vector parallel bit extract operation, as if implemented by
! the 'vpextd' instruction.
  
  vector unsigned char vec_stril (vector unsigned char);
  vector signed char vec_stril (vector signed char);
--- 58437,58443 ----
  vector unsigned long long int
  vec_pext (vector unsigned long long int, vector unsigned long long int);
   Perform a vector parallel bit extract operation, as if implemented by
! the ‘vpextd’ instruction.
  
  vector unsigned char vec_stril (vector unsigned char);
  vector signed char vec_stril (vector signed char);
*************** vector signed short vec_stril (vector si
*** 58435,58453 ****
   Isolate the left-most non-zero elements of the incoming vector
  argument, replacing all elements to the right of the left-most zero
  element found within the argument with zero.  The typical implementation
! uses the 'vstribl' or 'vstrihl' instruction on big-endian targets and
! uses the 'vstribr' or 'vstrihr' instruction on little-endian targets.
  
  int vec_stril_p (vector unsigned char);
  int vec_stril_p (vector signed char);
  int short vec_stril_p (vector unsigned short);
  int vec_stril_p (vector signed short);
   Return a non-zero value if and only if the argument contains a zero
! element.  The typical implementation uses the 'vstribl.' or 'vstrihl.'
! instruction on big-endian targets and uses the 'vstribr.' or 'vstrihr.'
  instruction on little-endian targets.  Choose this built-in to check for
  presence of zero element if the same argument is also passed to
! 'vec_stril'.
  
  vector unsigned char vec_strir (vector unsigned char);
  vector signed char vec_strir (vector signed char);
--- 58446,58464 ----
   Isolate the left-most non-zero elements of the incoming vector
  argument, replacing all elements to the right of the left-most zero
  element found within the argument with zero.  The typical implementation
! uses the ‘vstribl’ or ‘vstrihl’ instruction on big-endian targets and
! uses the ‘vstribr’ or ‘vstrihr’ instruction on little-endian targets.
  
  int vec_stril_p (vector unsigned char);
  int vec_stril_p (vector signed char);
  int short vec_stril_p (vector unsigned short);
  int vec_stril_p (vector signed short);
   Return a non-zero value if and only if the argument contains a zero
! element.  The typical implementation uses the ‘vstribl.’ or ‘vstrihl.’
! instruction on big-endian targets and uses the ‘vstribr.’ or ‘vstrihr.’
  instruction on little-endian targets.  Choose this built-in to check for
  presence of zero element if the same argument is also passed to
! ‘vec_stril’.
  
  vector unsigned char vec_strir (vector unsigned char);
  vector signed char vec_strir (vector signed char);
*************** vector signed short vec_strir (vector si
*** 58456,58474 ****
   Isolate the right-most non-zero elements of the incoming vector
  argument, replacing all elements to the left of the right-most zero
  element found within the argument with zero.  The typical implementation
! uses the 'vstribr' or 'vstrihr' instruction on big-endian targets and
! uses the 'vstribl' or 'vstrihl' instruction on little-endian targets.
  
  int vec_strir_p (vector unsigned char);
  int vec_strir_p (vector signed char);
  int short vec_strir_p (vector unsigned short);
  int vec_strir_p (vector signed short);
   Return a non-zero value if and only if the argument contains a zero
! element.  The typical implementation uses the 'vstribr.' or 'vstrihr.'
! instruction on big-endian targets and uses the 'vstribl.' or 'vstrihl.'
  instruction on little-endian targets.  Choose this built-in to check for
  presence of zero element if the same argument is also passed to
! 'vec_strir'.
  
  vector unsigned char
  vec_ternarylogic (vector unsigned char, vector unsigned char,
--- 58467,58485 ----
   Isolate the right-most non-zero elements of the incoming vector
  argument, replacing all elements to the left of the right-most zero
  element found within the argument with zero.  The typical implementation
! uses the ‘vstribr’ or ‘vstrihr’ instruction on big-endian targets and
! uses the ‘vstribl’ or ‘vstrihl’ instruction on little-endian targets.
  
  int vec_strir_p (vector unsigned char);
  int vec_strir_p (vector signed char);
  int short vec_strir_p (vector unsigned short);
  int vec_strir_p (vector signed short);
   Return a non-zero value if and only if the argument contains a zero
! element.  The typical implementation uses the ‘vstribr.’ or ‘vstrihr.’
! instruction on big-endian targets and uses the ‘vstribl.’ or ‘vstrihl.’
  instruction on little-endian targets.  Choose this built-in to check for
  presence of zero element if the same argument is also passed to
! ‘vec_strir’.
  
  vector unsigned char
  vec_ternarylogic (vector unsigned char, vector unsigned char,
*************** vector unsigned __int128
*** 58486,58492 ****
  vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
                   vector unsigned __int128, const unsigned int);
   Perform a 128-bit vector evaluate operation, as if implemented by the
! 'xxeval' instruction.  The fourth argument must be a literal integer
  value between 0 and 255 inclusive.
  
  vector unsigned char vec_genpcvm (vector unsigned char, const int);
--- 58497,58503 ----
  vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
                   vector unsigned __int128, const unsigned int);
   Perform a 128-bit vector evaluate operation, as if implemented by the
! ‘xxeval’ instruction.  The fourth argument must be a literal integer
  value between 0 and 255 inclusive.
  
  vector unsigned char vec_genpcvm (vector unsigned char, const int);
*************** vec_mulh (vector signed int A, vector si
*** 58502,58540 ****
  vector unsigned int
  vec_mulh (vector unsigned int A, vector unsigned int B);
  
!  For each integer value 'i' from 0 to 3, do the following.  The integer
! value in word element 'i' of a is multiplied by the integer value in
! word element 'i' of b.  The high-order 32 bits of the 64-bit product are
! placed into word element 'i' of the vector returned.
  
  vector signed long long
  vec_mulh (vector signed long long A, vector signed long long B);
  vector unsigned long long
  vec_mulh (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value 'i' from 0 to 1, do the following.  The integer
! value in doubleword element 'i' of a is multiplied by the integer value
! in doubleword element 'i' of b.  The high-order 64 bits of the 128-bit
! product are placed into doubleword element 'i' of the vector returned.
  
  vector unsigned long long
  vec_mul (vector unsigned long long A, vector unsigned long long B);
  vector signed long long
  vec_mul (vector signed long long A, vector signed long long B);
  
!  For each integer value 'i' from 0 to 1, do the following.  The integer
! value in doubleword element 'i' of a is multiplied by the integer value
! in doubleword element 'i' of b.  The low-order 64 bits of the 128-bit
! product are placed into doubleword element 'i' of the vector returned.
  
  vector signed int
  vec_div (vector signed int A, vector signed int B);
  vector unsigned int
  vec_div (vector unsigned int A, vector unsigned int B);
  
!  For each integer value 'i' from 0 to 3, do the following.  The integer
! in word element 'i' of a is divided by the integer in word element 'i'
! of b.  The unique integer quotient is placed into the word element 'i'
  of the vector returned.  If an attempt is made to perform any of the
  divisions <anything> ÷ 0 then the quotient is undefined.
  
--- 58513,58551 ----
  vector unsigned int
  vec_mulh (vector unsigned int A, vector unsigned int B);
  
!  For each integer value ‘i’ from 0 to 3, do the following.  The integer
! value in word element ‘i’ of a is multiplied by the integer value in
! word element ‘i’ of b.  The high-order 32 bits of the 64-bit product are
! placed into word element ‘i’ of the vector returned.
  
  vector signed long long
  vec_mulh (vector signed long long A, vector signed long long B);
  vector unsigned long long
  vec_mulh (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value ‘i’ from 0 to 1, do the following.  The integer
! value in doubleword element ‘i’ of a is multiplied by the integer value
! in doubleword element ‘i’ of b.  The high-order 64 bits of the 128-bit
! product are placed into doubleword element ‘i’ of the vector returned.
  
  vector unsigned long long
  vec_mul (vector unsigned long long A, vector unsigned long long B);
  vector signed long long
  vec_mul (vector signed long long A, vector signed long long B);
  
!  For each integer value ‘i’ from 0 to 1, do the following.  The integer
! value in doubleword element ‘i’ of a is multiplied by the integer value
! in doubleword element ‘i’ of b.  The low-order 64 bits of the 128-bit
! product are placed into doubleword element ‘i’ of the vector returned.
  
  vector signed int
  vec_div (vector signed int A, vector signed int B);
  vector unsigned int
  vec_div (vector unsigned int A, vector unsigned int B);
  
!  For each integer value ‘i’ from 0 to 3, do the following.  The integer
! in word element ‘i’ of a is divided by the integer in word element ‘i’
! of b.  The unique integer quotient is placed into the word element ‘i’
  of the vector returned.  If an attempt is made to perform any of the
  divisions <anything> ÷ 0 then the quotient is undefined.
  
*************** vec_div (vector signed long long A, vect
*** 58543,58564 ****
  vector unsigned long long
  vec_div (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value 'i' from 0 to 1, do the following.  The integer
! in doubleword element 'i' of a is divided by the integer in doubleword
! element 'i' of b.  The unique integer quotient is placed into the
! doubleword element 'i' of the vector returned.  If an attempt is made to
! perform any of the divisions 0x8000_0000_0000_0000 ÷ -1 or <anything>
! ÷ 0 then the quotient is undefined.
  
  vector signed int
  vec_dive (vector signed int A, vector signed int B);
  vector unsigned int
  vec_dive (vector unsigned int A, vector unsigned int B);
  
!  For each integer value 'i' from 0 to 3, do the following.  The integer
! in word element 'i' of a is shifted left by 32 bits, then divided by the
! integer in word element 'i' of b.  The unique integer quotient is placed
! into the word element 'i' of the vector returned.  If the quotient
  cannot be represented in 32 bits, or if an attempt is made to perform
  any of the divisions <anything> ÷ 0 then the quotient is undefined.
  
--- 58554,58575 ----
  vector unsigned long long
  vec_div (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value ‘i’ from 0 to 1, do the following.  The integer
! in doubleword element ‘i’ of a is divided by the integer in doubleword
! element ‘i’ of b.  The unique integer quotient is placed into the
! doubleword element ‘i’ of the vector returned.  If an attempt is made to
! perform any of the divisions 0x8000_0000_0000_0000 ÷ -1 or <anything> ÷
! 0 then the quotient is undefined.
  
  vector signed int
  vec_dive (vector signed int A, vector signed int B);
  vector unsigned int
  vec_dive (vector unsigned int A, vector unsigned int B);
  
!  For each integer value ‘i’ from 0 to 3, do the following.  The integer
! in word element ‘i’ of a is shifted left by 32 bits, then divided by the
! integer in word element ‘i’ of b.  The unique integer quotient is placed
! into the word element ‘i’ of the vector returned.  If the quotient
  cannot be represented in 32 bits, or if an attempt is made to perform
  any of the divisions <anything> ÷ 0 then the quotient is undefined.
  
*************** vec_dive (vector signed long long A, vec
*** 58567,58576 ****
  vector unsigned long long
  vec_dive (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value 'i' from 0 to 1, do the following.  The integer
! in doubleword element 'i' of a is shifted left by 64 bits, then divided
! by the integer in doubleword element 'i' of b.  The unique integer
! quotient is placed into the doubleword element 'i' of the vector
  returned.  If the quotient cannot be represented in 64 bits, or if an
  attempt is made to perform <anything> ÷ 0 then the quotient is
  undefined.
--- 58578,58587 ----
  vector unsigned long long
  vec_dive (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value ‘i’ from 0 to 1, do the following.  The integer
! in doubleword element ‘i’ of a is shifted left by 64 bits, then divided
! by the integer in doubleword element ‘i’ of b.  The unique integer
! quotient is placed into the doubleword element ‘i’ of the vector
  returned.  If the quotient cannot be represented in 64 bits, or if an
  attempt is made to perform <anything> ÷ 0 then the quotient is
  undefined.
*************** vec_mod (vector signed int A, vector sig
*** 58580,58588 ****
  vector unsigned int
  vec_mod (vector unsigned int A, vector unsigned int B);
  
!  For each integer value 'i' from 0 to 3, do the following.  The integer
! in word element 'i' of a is divided by the integer in word element 'i'
! of b.  The unique integer remainder is placed into the word element 'i'
  of the vector returned.  If an attempt is made to perform any of the
  divisions 0x8000_0000 ÷ -1 or <anything> ÷ 0 then the remainder is
  undefined.
--- 58591,58599 ----
  vector unsigned int
  vec_mod (vector unsigned int A, vector unsigned int B);
  
!  For each integer value ‘i’ from 0 to 3, do the following.  The integer
! in word element ‘i’ of a is divided by the integer in word element ‘i’
! of b.  The unique integer remainder is placed into the word element ‘i’
  of the vector returned.  If an attempt is made to perform any of the
  divisions 0x8000_0000 ÷ -1 or <anything> ÷ 0 then the remainder is
  undefined.
*************** vec_mod (vector signed long long A, vect
*** 58592,58605 ****
  vector unsigned long long
  vec_mod (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value 'i' from 0 to 1, do the following.  The integer
! in doubleword element 'i' of a is divided by the integer in doubleword
! element 'i' of b.  The unique integer remainder is placed into the
! doubleword element 'i' of the vector returned.  If an attempt is made to
  perform <anything> ÷ 0 then the remainder is undefined.
  
   Generate PCV from specified Mask size, as if implemented by the
! 'xxgenpcvbm', 'xxgenpcvhm', 'xxgenpcvwm' instructions, where immediate
  value is either 0, 1, 2 or 3.
  
  vector unsigned __int128 vec_rl (vector unsigned __int128 A,
--- 58603,58616 ----
  vector unsigned long long
  vec_mod (vector unsigned long long A, vector unsigned long long B);
  
!  For each integer value ‘i’ from 0 to 1, do the following.  The integer
! in doubleword element ‘i’ of a is divided by the integer in doubleword
! element ‘i’ of b.  The unique integer remainder is placed into the
! doubleword element ‘i’ of the vector returned.  If an attempt is made to
  perform <anything> ÷ 0 then the remainder is undefined.
  
   Generate PCV from specified Mask size, as if implemented by the
! ‘xxgenpcvbm’, ‘xxgenpcvhm’, ‘xxgenpcvwm’ instructions, where immediate
  value is either 0, 1, 2 or 3.
  
  vector unsigned __int128 vec_rl (vector unsigned __int128 A,
*************** vector signed __int128 vec_mod (vector s
*** 58703,58715 ****
  second input.
  
   The following builtins perform 128-bit vector comparisons.  The
! 'vec_all_xx', 'vec_any_xx', and 'vec_cmpxx', where 'xx' is one of the
! operations 'eq, ne, gt, lt, ge, le' perform pairwise comparisons between
  the elements at the same positions within their two vector arguments.
! The 'vec_all_xx'function returns a non-zero value if and only if all
! pairwise comparisons are true.  The 'vec_any_xx' function returns a
  non-zero value if and only if at least one pairwise comparison is true.
! The 'vec_cmpxx'function returns a vector of the same type as its two
  arguments, within which each element consists of all ones to denote that
  specified logical comparison of the corresponding elements was true.
  Otherwise, the element of the returned vector contains all zeros.
--- 58714,58726 ----
  second input.
  
   The following builtins perform 128-bit vector comparisons.  The
! ‘vec_all_xx’, ‘vec_any_xx’, and ‘vec_cmpxx’, where ‘xx’ is one of the
! operations ‘eq, ne, gt, lt, ge, le’ perform pairwise comparisons between
  the elements at the same positions within their two vector arguments.
! The ‘vec_all_xx’function returns a non-zero value if and only if all
! pairwise comparisons are true.  The ‘vec_any_xx’ function returns a
  non-zero value if and only if at least one pairwise comparison is true.
! The ‘vec_cmpxx’function returns a vector of the same type as its two
  arguments, within which each element consists of all ones to denote that
  specified logical comparison of the corresponding elements was true.
  Otherwise, the element of the returned vector contains all zeros.
*************** between PowerPC and S/390.
*** 58769,58786 ****
  6.62.27.1 PowerPC HTM Low Level Built-in Functions
  ..................................................
  
! The following low level built-in functions are available with '-mhtm' or
! '-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
  machine instruction that is part of the name.
  
!  The HTM builtins (with the exception of '__builtin_tbegin') return the
  full 4-bit condition register value set by their associated hardware
! instruction.  The header file 'htmintrin.h' defines some macros that can
! be used to decipher the return value.  The '__builtin_tbegin' builtin
! returns a simple 'true' or 'false' value depending on whether a
  transaction was successfully started or not.  The arguments of the
  builtins match exactly the type and order of the associated hardware
! instruction's operands, except for the '__builtin_tcheck' builtin, which
  does not take any input arguments.  Refer to the ISA manual for a
  description of each instruction's operands.
  
--- 58780,58797 ----
  6.62.27.1 PowerPC HTM Low Level Built-in Functions
  ..................................................
  
! The following low level built-in functions are available with ‘-mhtm’ or
! ‘-mcpu=CPU’ where CPU is 'power8' or later.  They all generate the
  machine instruction that is part of the name.
  
!  The HTM builtins (with the exception of ‘__builtin_tbegin’) return the
  full 4-bit condition register value set by their associated hardware
! instruction.  The header file ‘htmintrin.h’ defines some macros that can
! be used to decipher the return value.  The ‘__builtin_tbegin’ builtin
! returns a simple ‘true’ or ‘false’ value depending on whether a
  transaction was successfully started or not.  The arguments of the
  builtins match exactly the type and order of the associated hardware
! instruction's operands, except for the ‘__builtin_tcheck’ builtin, which
  does not take any input arguments.  Refer to the ISA manual for a
  description of each instruction's operands.
  
*************** the builtins in a way that would violate
*** 58823,58829 ****
  accomplished by adding memory barriers to the associated HTM
  instructions (which is a conservative approach to provide acquire and
  release semantics).  Earlier versions of the compiler did not treat the
! HTM instructions as memory barriers.  A '__TM_FENCE__' macro has been
  added, which can be used to determine whether the current compiler
  treats HTM instructions as memory barriers or not.  This allows the user
  to explicitly add memory barriers to their code when using an older
--- 58834,58840 ----
  accomplished by adding memory barriers to the associated HTM
  instructions (which is a conservative approach to provide acquire and
  release semantics).  Earlier versions of the compiler did not treat the
! HTM instructions as memory barriers.  A ‘__TM_FENCE__’ macro has been
  added, which can be used to determine whether the current compiler
  treats HTM instructions as memory barriers or not.  This allows the user
  to explicitly add memory barriers to their code when using an older
*************** the HTM specific special purpose registe
*** 58876,58882 ****
  
   One final built-in function has been added that returns the value of
  the 2-bit Transaction State field of the Machine Status Register (MSR)
! as stored in 'CR0'.
  
       unsigned long __builtin_ttest (void)
  
--- 58887,58893 ----
  
   One final built-in function has been added that returns the value of
  the 2-bit Transaction State field of the Machine Status Register (MSR)
! as stored in ‘CR0’.
  
       unsigned long __builtin_ttest (void)
  
*************** using the following code example:
*** 58904,58910 ****
  .................................................
  
  The following high level HTM interface is made available by including
! '<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
  or later.  This interface is common between PowerPC and S/390, allowing
  users to write one HTM source implementation that can be compiled and
  executed on either system.
--- 58915,58921 ----
  .................................................
  
  The following high level HTM interface is made available by including
! ‘<htmxlintrin.h>’ and using ‘-mhtm’ or ‘-mcpu=CPU’ where CPU is 'power8'
  or later.  This interface is common between PowerPC and S/390, allowing
  users to write one HTM source implementation that can be compiled and
  executed on either system.
*************** File: gcc.info,  Node: PowerPC Atomic Me
*** 58972,58978 ****
  ISA 3.0 of the PowerPC added new atomic memory operation (amo)
  instructions.  GCC provides support for these instructions in 64-bit
  environments.  All of the functions are declared in the include file
! 'amo.h'.
  
   The functions supported are:
  
--- 58983,58989 ----
  ISA 3.0 of the PowerPC added new atomic memory operation (amo)
  instructions.  GCC provides support for these instructions in 64-bit
  environments.  All of the functions are declared in the include file
! ‘amo.h’.
  
   The functions supported are:
  
*************** File: gcc.info,  Node: PowerPC Matrix-Mu
*** 59034,59040 ****
  
  ISA 3.1 of the PowerPC added new Matrix-Multiply Assist (MMA)
  instructions.  GCC provides support for these instructions through the
! following built-in functions which are enabled with the '-mmma' option.
  The vec_t type below is defined to be a normal vector unsigned char
  type.  The uint2, uint4 and uint8 parameters are 2-bit, 4-bit and 8-bit
  unsigned integer constants respectively.  The compiler will verify that
--- 59045,59051 ----
  
  ISA 3.1 of the PowerPC added new Matrix-Multiply Assist (MMA)
  instructions.  GCC provides support for these instructions through the
! following built-in functions which are enabled with the ‘-mmma’ option.
  The vec_t type below is defined to be a normal vector unsigned char
  type.  The uint2, uint4 and uint8 parameters are 2-bit, 4-bit and 8-bit
  unsigned integer constants respectively.  The compiler will verify that
*************** These built-in functions are available f
*** 59164,59173 ****
  processors.
  
   -- Built-in Function: void * __builtin_thread_pointer (void)
!      Returns the value that is currently set in the 'tp' register.
  
   -- Built-in Function: void __builtin_riscv_pause (void)
!      Generates the 'pause' (hint) machine instruction.  If the target
       implements the Zihintpause extension, it indicates that the current
       hart should be temporarily paused or slowed down.
  
--- 59175,59184 ----
  processors.
  
   -- Built-in Function: void * __builtin_thread_pointer (void)
!      Returns the value that is currently set in the ‘tp’ register.
  
   -- Built-in Function: void __builtin_riscv_pause (void)
!      Generates the ‘pause’ (hint) machine instruction.  If the target
       implements the Zihintpause extension, it indicates that the current
       hart should be temporarily paused or slowed down.
  
*************** GCC supports vector intrinsics as specif
*** 59181,59187 ****
  RISC-V vector intrinsic specification, which is available at the
  following link:
  <https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v0.11.x>.  All
! of these functions are declared in the include file 'riscv_vector.h'.
  
  
  File: gcc.info,  Node: CORE-V Built-in Functions,  Next: RX Built-in Functions,  Prev: RISC-V Vector Intrinsics,  Up: Target Builtins
--- 59192,59198 ----
  RISC-V vector intrinsic specification, which is available at the
  following link:
  <https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v0.11.x>.  All
! of these functions are declared in the include file ‘riscv_vector.h’.
  
  
  File: gcc.info,  Node: CORE-V Built-in Functions,  Next: RX Built-in Functions,  Prev: RISC-V Vector Intrinsics,  Up: Target Builtins
*************** architecture.  For more information on C
*** 59198,59272 ****
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mac (int32_t,
            int32_t, int32_t)
!      Generated assembler 'cv.mac'
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_msu (int32_t,
            int32_t, int32_t)
!      Generates the 'cv.msu' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_muluN (uint32_t,
            uint32_t, uint8_t)
!      Generates the 'cv.muluN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_mulhhuN
            (uint32_t, uint32_t, uint8_t)
!      Generates the 'cv.mulhhuN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulsN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.mulsN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulhhsN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.mulhhsN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_muluRN (uint32_t,
            uint32_t, uint8_t)
!      Generates the 'cv.muluRN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_mulhhuRN
            (uint32_t, uint32_t, uint8_t)
!      Generates the 'cv.mulhhuRN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulsRN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.mulsRN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulhhsRN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.mulhhsRN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_macuN (uint32_t,
            uint32_t, uint8_t)
!      Generates the 'cv.macuN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_machhuN
            (uint32_t, uint32_t, uint8_t)
!      Generates the 'cv.machhuN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_macsN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.macsN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_machhsN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.machhsN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_macuRN (uint32_t,
            uint32_t, uint8_t)
!      Generates the 'cv.macuRN' machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_machhuRN
            (uint32_t, uint32_t, uint8_t)
!      Generates the 'cv.machhuRN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_macsRN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.macsRN' machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_machhsRN (int32_t,
            int32_t, uint8_t)
!      Generates the 'cv.machhsRN' machine instruction.
  
   These built-in functions are available for the CORE-V ALU machine
  architecture.  For more information on CORE-V built-ins, please see
--- 59209,59283 ----
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mac (int32_t,
            int32_t, int32_t)
!      Generated assembler ‘cv.mac’
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_msu (int32_t,
            int32_t, int32_t)
!      Generates the ‘cv.msu’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_muluN (uint32_t,
            uint32_t, uint8_t)
!      Generates the ‘cv.muluN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_mulhhuN
            (uint32_t, uint32_t, uint8_t)
!      Generates the ‘cv.mulhhuN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulsN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.mulsN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulhhsN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.mulhhsN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_muluRN (uint32_t,
            uint32_t, uint8_t)
!      Generates the ‘cv.muluRN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_mulhhuRN
            (uint32_t, uint32_t, uint8_t)
!      Generates the ‘cv.mulhhuRN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulsRN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.mulsRN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_mulhhsRN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.mulhhsRN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_macuN (uint32_t,
            uint32_t, uint8_t)
!      Generates the ‘cv.macuN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_machhuN
            (uint32_t, uint32_t, uint8_t)
!      Generates the ‘cv.machhuN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_macsN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.macsN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_machhsN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.machhsN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_macuRN (uint32_t,
            uint32_t, uint8_t)
!      Generates the ‘cv.macuRN’ machine instruction.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_mac_machhuRN
            (uint32_t, uint32_t, uint8_t)
!      Generates the ‘cv.machhuRN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_macsRN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.macsRN’ machine instruction.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_mac_machhsRN (int32_t,
            int32_t, uint8_t)
!      Generates the ‘cv.machhsRN’ machine instruction.
  
   These built-in functions are available for the CORE-V ALU machine
  architecture.  For more information on CORE-V built-ins, please see
*************** architecture.  For more information on C
*** 59274,59372 ****
  
   -- Built-in Function: int __builtin_riscv_cv_alu_slet (int32_t,
            int32_t)
!      Generated assembler 'cv.slet'
  
   -- Built-in Function: int __builtin_riscv_cv_alu_sletu (uint32_t,
            uint32_t)
!      Generated assembler 'cv.sletu'
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_min (int32_t,
            int32_t)
!      Generated assembler 'cv.min'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_minu (uint32_t,
            uint32_t)
!      Generated assembler 'cv.minu'
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_max (int32_t,
            int32_t)
!      Generated assembler 'cv.max'
  
   -- Built-in Function: uint32_tnt __builtin_riscv_cv_alu_maxu (uint32_t,
            uint32_t)
!      Generated assembler 'cv.maxu'
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_exths (int16_t)
!      Generated assembler 'cv.exths'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_exthz (uint16_t)
!      Generated assembler 'cv.exthz'
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_extbs (int8_t)
!      Generated assembler 'cv.extbs'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_extbz (uint8_t)
!      Generated assembler 'cv.extbz'
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_clip (int32_t,
            uint32_t)
!      Generated assembler 'cv.clip' if the uint32_t operand is a constant
!      and an exact power of 2.  Generated assembler 'cv.clipr' if the it
       is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_clipu (uint32_t,
            uint32_t)
!      Generated assembler 'cv.clipu' if the uint32_t operand is a
!      constant and an exact power of 2.  Generated assembler 'cv.clipur'
       if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_addN (int32_t,
            int32_t, uint8_t)
!      Generated assembler 'cv.addN' if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler 'cv.addNr'
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_adduN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler 'cv.adduN' if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler 'cv.adduNr'
       if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_addRN (int32_t,
            int32_t, uint8_t)
!      Generated assembler 'cv.addRN' if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler 'cv.addRNr'
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_adduRN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler 'cv.adduRN' if the uint8_t operand is a
       constant and in the range 0 <= shft <= 31.  Generated assembler
!      'cv.adduRNr' if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_subN (int32_t,
            int32_t, uint8_t)
!      Generated assembler 'cv.subN' if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler 'cv.subNr'
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_subuN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler 'cv.subuN' if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler 'cv.subuNr'
       if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_subRN (int32_t,
            int32_t, uint8_t)
!      Generated assembler 'cv.subRN' if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler 'cv.subRNr'
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_subuRN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler 'cv.subuRN' if the uint8_t operand is a
       constant and in the range 0 <= shft <= 31.  Generated assembler
!      'cv.subuRNr' if the it is a register.
  
   These built-in functions are available for the CORE-V Event Load
  machine architecture.  For more information on CORE-V ELW builtins,
--- 59285,59383 ----
  
   -- Built-in Function: int __builtin_riscv_cv_alu_slet (int32_t,
            int32_t)
!      Generated assembler ‘cv.slet’
  
   -- Built-in Function: int __builtin_riscv_cv_alu_sletu (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.sletu’
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_min (int32_t,
            int32_t)
!      Generated assembler ‘cv.min’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_minu (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.minu’
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_max (int32_t,
            int32_t)
!      Generated assembler ‘cv.max’
  
   -- Built-in Function: uint32_tnt __builtin_riscv_cv_alu_maxu (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.maxu’
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_exths (int16_t)
!      Generated assembler ‘cv.exths’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_exthz (uint16_t)
!      Generated assembler ‘cv.exthz’
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_extbs (int8_t)
!      Generated assembler ‘cv.extbs’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_extbz (uint8_t)
!      Generated assembler ‘cv.extbz’
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_clip (int32_t,
            uint32_t)
!      Generated assembler ‘cv.clip’ if the uint32_t operand is a constant
!      and an exact power of 2.  Generated assembler ‘cv.clipr’ if the it
       is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_clipu (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.clipu’ if the uint32_t operand is a
!      constant and an exact power of 2.  Generated assembler ‘cv.clipur’
       if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_addN (int32_t,
            int32_t, uint8_t)
!      Generated assembler ‘cv.addN’ if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler ‘cv.addNr’
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_adduN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler ‘cv.adduN’ if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler ‘cv.adduNr’
       if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_addRN (int32_t,
            int32_t, uint8_t)
!      Generated assembler ‘cv.addRN’ if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler ‘cv.addRNr’
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_adduRN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler ‘cv.adduRN’ if the uint8_t operand is a
       constant and in the range 0 <= shft <= 31.  Generated assembler
!      ‘cv.adduRNr’ if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_subN (int32_t,
            int32_t, uint8_t)
!      Generated assembler ‘cv.subN’ if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler ‘cv.subNr’
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_subuN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler ‘cv.subuN’ if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler ‘cv.subuNr’
       if the it is a register.
  
   -- Built-in Function: int32_t __builtin_riscv_cv_alu_subRN (int32_t,
            int32_t, uint8_t)
!      Generated assembler ‘cv.subRN’ if the uint8_t operand is a constant
!      and in the range 0 <= shft <= 31.  Generated assembler ‘cv.subRNr’
       if the it is a register.
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_alu_subuRN (uint32_t,
            uint32_t, uint8_t)
!      Generated assembler ‘cv.subuRN’ if the uint8_t operand is a
       constant and in the range 0 <= shft <= 31.  Generated assembler
!      ‘cv.subuRNr’ if the it is a register.
  
   These built-in functions are available for the CORE-V Event Load
  machine architecture.  For more information on CORE-V ELW builtins,
*************** please see
*** 59374,59380 ****
  <https://github.com/openhwgroup/core-v-sw/blob/master/specifications/corev-builtin-spec.md#listing-of-event-load-word-builtins-xcvelw>
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_elw_elw (uint32_t *)
!      Generated assembler 'cv.elw'
  
   These built-in functions are available for the CORE-V SIMD machine
  architecture.  For more information on CORE-V SIMD built-ins, please see
--- 59385,59391 ----
  <https://github.com/openhwgroup/core-v-sw/blob/master/specifications/corev-builtin-spec.md#listing-of-event-load-word-builtins-xcvelw>
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_elw_elw (uint32_t *)
!      Generated assembler ‘cv.elw’
  
   These built-in functions are available for the CORE-V SIMD machine
  architecture.  For more information on CORE-V SIMD built-ins, please see
*************** architecture.  For more information on C
*** 59382,60262 ****
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint4_t)
!      Generated assembler 'cv.add.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.add.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.add.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.add.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.add.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.add.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint4_t)
!      Generated assembler 'cv.sub.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.sub.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.sub.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.sub.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.sub.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.sub.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.avg.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.avg.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.avg.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.avg.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.avg.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.avg.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.avgu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.avgu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.avgu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.avgu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.avgu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.avgu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.min.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.min.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.min.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.min.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.min.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.min.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.minu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.minu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.minu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.minu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.minu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.minu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.max.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.max.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.max.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.max.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.max.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.max.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.maxu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.maxu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.maxu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.maxu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.maxu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.maxu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.srl.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.srl.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.srl.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.srl.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.srl.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.srl.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.sra.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.sra.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.sra.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.sra.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.sra.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.sra.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.sll.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.sll.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.sll.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.sll.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.sll.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.sll.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.or.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.or.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.or.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.or.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.or.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.or.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.xor.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.xor.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.xor.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.xor.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.xor.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.xor.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_h (uint32_t,
            uint32_t)
!      Generated assembler 'cv.and.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_b (uint32_t,
            uint32_t)
!      Generated assembler 'cv.and.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.and.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.and.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.and.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.and.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_abs_h (uint32_t)
!      Generated assembler 'cv.abs.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_abs_b (uint32_t)
!      Generated assembler 'cv.abs.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.dotup.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.dotup.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.dotup.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.dotup.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.dotup.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.dotup.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.dotusp.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.dotusp.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.dotusp.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.dotusp.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.dotusp.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.dotusp.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.dotsp.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.dotsp.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.dotsp.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.dotsp.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.dotsp.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.dotsp.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.sdotup.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.sdotup.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_h
            (uint32_t, uint16_t, uint32_t)
!      Generated assembler 'cv.sdotup.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_h
            (uint32_t, uint6_t, uint32_t)
!      Generated assembler 'cv.sdotup.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_b
            (uint32_t, uint8_t, uint32_t)
!      Generated assembler 'cv.sdotup.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_b
            (uint32_t, uint6_t, uint32_t)
!      Generated assembler 'cv.sdotup.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.sdotusp.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.sdotusp.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_h
            (uint32_t, int16_t, uint32_t)
!      Generated assembler 'cv.sdotusp.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_h
            (uint32_t, int6_t, uint32_t)
!      Generated assembler 'cv.sdotusp.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_b
            (uint32_t, int8_t, uint32_t)
!      Generated assembler 'cv.sdotusp.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_b
            (uint32_t, int6_t, uint32_t)
!      Generated assembler 'cv.sdotusp.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.sdotsp.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.sdotsp.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_h
            (uint32_t, int16_t, uint32_t)
!      Generated assembler 'cv.sdotsp.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_h
            (uint32_t, int6_t, uint32_t)
!      Generated assembler 'cv.sdotsp.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_b
            (uint32_t, int8_t, uint32_t)
!      Generated assembler 'cv.sdotsp.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_b
            (uint32_t, int6_t, uint32_t)
!      Generated assembler 'cv.sdotsp.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extract_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.extract.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extract_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.extract.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extractu_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.extractu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extractu_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.extractu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_insert_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.insert.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_insert_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.insert.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.shuffle.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.shuffle.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle_sci_h
            (uint32_t, uint4_t)
!      Generated assembler 'cv.shuffle.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei0_sci_b
            (uint32_t, uint4_t)
!      Generated assembler 'cv.shufflei0.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei1_sci_b
            (uint32_t, uint4_t)
!      Generated assembler 'cv.shufflei1.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei2_sci_b
            (uint32_t, uint4_t)
!      Generated assembler 'cv.shufflei2.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei3_sci_b
            (uint32_t, uint4_t)
!      Generated assembler 'cv.shufflei3.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle2_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.shuffle2.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle2_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.shuffle2.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packlo_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.pack'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packhi_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.pack.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packhi_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.packhi.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packlo_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler 'cv.packlo.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpeq.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpeq.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.cmpeq.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpeq.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.cmpeq.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpeq.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpne.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpne.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.cmpne.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpne.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.cmpne.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpne.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpgt.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpgt.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.cmpgt.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpgt.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.cmpgt.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpgt.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpge.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpge.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.cmpge.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpge.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.cmpge.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmpge.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmplt.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmplt.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.cmplt.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmplt.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.cmplt.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmplt.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmple.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmple.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_h
            (uint32_t, int16_t)
!      Generated assembler 'cv.cmple.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_h
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmple.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_b
            (uint32_t, int8_t)
!      Generated assembler 'cv.cmple.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_b
            (uint32_t, int6_t)
!      Generated assembler 'cv.cmple.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpgtu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpgtu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.cmpgtu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpgtu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.cmpgtu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpgtu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpgeu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpgeu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.cmpgeu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpgeu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.cmpgeu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpgeu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpltu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpltu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.cmpltu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpltu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.cmpltu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpltu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_h
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpleu.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_b
            (uint32_t, uint32_t)
!      Generated assembler 'cv.cmpleu.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler 'cv.cmpleu.sc.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpleu.sci.h'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler 'cv.cmpleu.sc.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler 'cv.cmpleu.sci.b'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.r'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.i'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.r.div2'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.i.div2'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.r.div4'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.i.div4'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.r.div8'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.cplxmul.i.div8'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxconj
            (uint32_t)
!      Generated assembler 'cv.cplxconj'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.subrotmj'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.subrotmj.div2'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.subrotmj.div4'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.subrotmj.div8'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.add.div2'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.add.div4'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.add.div8'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.sub.div2'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.sub.div4'
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler 'cv.sub.div8'
  
  
  File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: CORE-V Built-in Functions,  Up: Target Builtins
--- 59393,60273 ----
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint4_t)
!      Generated assembler ‘cv.add.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.add.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.add.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.add.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.add.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.add.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint4_t)
!      Generated assembler ‘cv.sub.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.sub.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.sub.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.sub.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.sub.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.sub.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.avg.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.avg.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.avg.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.avg.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.avg.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avg_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.avg.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.avgu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.avgu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.avgu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.avgu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.avgu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_avgu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.avgu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.min.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.min.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.min.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.min.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.min.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_min_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.min.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.minu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.minu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.minu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.minu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.minu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_minu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.minu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.max.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.max.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.max.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.max.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.max.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_max_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.max.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.maxu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.maxu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.maxu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.maxu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.maxu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_maxu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.maxu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.srl.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.srl.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.srl.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.srl.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.srl.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_srl_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.srl.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.sra.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.sra.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.sra.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.sra.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.sra.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sra_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.sra.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.sll.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.sll.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.sll.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.sll.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.sll.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sll_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.sll.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.or.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.or.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.or.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.or.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.or.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_or_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.or.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.xor.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.xor.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.xor.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.xor.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.xor.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_xor_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.xor.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_h (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.and.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_b (uint32_t,
            uint32_t)
!      Generated assembler ‘cv.and.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.and.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.and.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.and.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_and_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.and.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_abs_h (uint32_t)
!      Generated assembler ‘cv.abs.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_abs_b (uint32_t)
!      Generated assembler ‘cv.abs.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.dotup.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.dotup.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.dotup.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.dotup.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.dotup.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotup_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.dotup.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.dotusp.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.dotusp.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.dotusp.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.dotusp.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.dotusp.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotusp_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.dotusp.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.dotsp.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.dotsp.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.dotsp.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.dotsp.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.dotsp.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_dotsp_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.dotsp.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.sdotup.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.sdotup.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_h
            (uint32_t, uint16_t, uint32_t)
!      Generated assembler ‘cv.sdotup.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_h
            (uint32_t, uint6_t, uint32_t)
!      Generated assembler ‘cv.sdotup.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_b
            (uint32_t, uint8_t, uint32_t)
!      Generated assembler ‘cv.sdotup.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotup_sc_b
            (uint32_t, uint6_t, uint32_t)
!      Generated assembler ‘cv.sdotup.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.sdotusp.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.sdotusp.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_h
            (uint32_t, int16_t, uint32_t)
!      Generated assembler ‘cv.sdotusp.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_h
            (uint32_t, int6_t, uint32_t)
!      Generated assembler ‘cv.sdotusp.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_b
            (uint32_t, int8_t, uint32_t)
!      Generated assembler ‘cv.sdotusp.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotusp_sc_b
            (uint32_t, int6_t, uint32_t)
!      Generated assembler ‘cv.sdotusp.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.sdotsp.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.sdotsp.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_h
            (uint32_t, int16_t, uint32_t)
!      Generated assembler ‘cv.sdotsp.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_h
            (uint32_t, int6_t, uint32_t)
!      Generated assembler ‘cv.sdotsp.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_b
            (uint32_t, int8_t, uint32_t)
!      Generated assembler ‘cv.sdotsp.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sdotsp_sc_b
            (uint32_t, int6_t, uint32_t)
!      Generated assembler ‘cv.sdotsp.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extract_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.extract.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extract_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.extract.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extractu_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.extractu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_extractu_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.extractu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_insert_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.insert.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_insert_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.insert.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.shuffle.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.shuffle.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle_sci_h
            (uint32_t, uint4_t)
!      Generated assembler ‘cv.shuffle.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei0_sci_b
            (uint32_t, uint4_t)
!      Generated assembler ‘cv.shufflei0.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei1_sci_b
            (uint32_t, uint4_t)
!      Generated assembler ‘cv.shufflei1.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei2_sci_b
            (uint32_t, uint4_t)
!      Generated assembler ‘cv.shufflei2.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shufflei3_sci_b
            (uint32_t, uint4_t)
!      Generated assembler ‘cv.shufflei3.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle2_h
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.shuffle2.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_shuffle2_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.shuffle2.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packlo_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.pack’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packhi_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.pack.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packhi_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.packhi.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_packlo_b
            (uint32_t, uint32_t, uint32_t)
!      Generated assembler ‘cv.packlo.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpeq.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpeq.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.cmpeq.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpeq.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.cmpeq.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpeq_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpeq.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpne.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpne.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.cmpne.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpne.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.cmpne.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpne_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpne.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpgt.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpgt.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.cmpgt.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpgt.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.cmpgt.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgt_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpgt.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpge.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpge.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.cmpge.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpge.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.cmpge.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpge_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmpge.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmplt.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmplt.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.cmplt.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmplt.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.cmplt.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmplt_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmplt.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmple.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmple.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_h
            (uint32_t, int16_t)
!      Generated assembler ‘cv.cmple.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_h
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmple.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_b
            (uint32_t, int8_t)
!      Generated assembler ‘cv.cmple.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmple_sc_b
            (uint32_t, int6_t)
!      Generated assembler ‘cv.cmple.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpgtu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpgtu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.cmpgtu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpgtu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.cmpgtu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgtu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpgtu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpgeu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpgeu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.cmpgeu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpgeu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.cmpgeu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpgeu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpgeu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpltu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpltu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.cmpltu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpltu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.cmpltu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpltu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpltu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_h
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpleu.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_b
            (uint32_t, uint32_t)
!      Generated assembler ‘cv.cmpleu.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_h
            (uint32_t, uint16_t)
!      Generated assembler ‘cv.cmpleu.sc.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_h
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpleu.sci.h’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_b
            (uint32_t, uint8_t)
!      Generated assembler ‘cv.cmpleu.sc.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cmpleu_sc_b
            (uint32_t, uint6_t)
!      Generated assembler ‘cv.cmpleu.sci.b’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.r’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.i’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.r.div2’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.i.div2’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.r.div4’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.i.div4’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_r
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.r.div8’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxmul_i
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.cplxmul.i.div8’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_cplxconj
            (uint32_t)
!      Generated assembler ‘cv.cplxconj’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.subrotmj’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.subrotmj.div2’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.subrotmj.div4’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_subrotmj
            (uint32_t, uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.subrotmj.div8’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.add.div2’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.add.div4’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_add_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.add.div8’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.sub.div2’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.sub.div4’
  
   -- Built-in Function: uint32_t __builtin_riscv_cv_simd_sub_h (uint32_t,
            uint32_t, uint32_t, uint4_t)
!      Generated assembler ‘cv.sub.div8’
  
  
  File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: CORE-V Built-in Functions,  Up: Target Builtins
*************** the C programming language via the use o
*** 60269,60360 ****
  following functions are supported:
  
   -- Built-in Function: void __builtin_rx_brk (void)
!      Generates the 'brk' machine instruction.
  
   -- Built-in Function: void __builtin_rx_clrpsw (int)
!      Generates the 'clrpsw' machine instruction to clear the specified
       bit in the processor status word.
  
   -- Built-in Function: void __builtin_rx_int (int)
!      Generates the 'int' machine instruction to generate an interrupt
       with the specified value.
  
   -- Built-in Function: void __builtin_rx_machi (int, int)
!      Generates the 'machi' machine instruction to add the result of
       multiplying the top 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: void __builtin_rx_maclo (int, int)
!      Generates the 'maclo' machine instruction to add the result of
       multiplying the bottom 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: void __builtin_rx_mulhi (int, int)
!      Generates the 'mulhi' machine instruction to place the result of
       multiplying the top 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: void __builtin_rx_mullo (int, int)
!      Generates the 'mullo' machine instruction to place the result of
       multiplying the bottom 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: int __builtin_rx_mvfachi (void)
!      Generates the 'mvfachi' machine instruction to read the top 32 bits
       of the accumulator.
  
   -- Built-in Function: int __builtin_rx_mvfacmi (void)
!      Generates the 'mvfacmi' machine instruction to read the middle 32
       bits of the accumulator.
  
   -- Built-in Function: int __builtin_rx_mvfc (int)
!      Generates the 'mvfc' machine instruction which reads the control
       register specified in its argument and returns its value.
  
   -- Built-in Function: void __builtin_rx_mvtachi (int)
!      Generates the 'mvtachi' machine instruction to set the top 32 bits
       of the accumulator.
  
   -- Built-in Function: void __builtin_rx_mvtaclo (int)
!      Generates the 'mvtaclo' machine instruction to set the bottom 32
       bits of the accumulator.
  
   -- Built-in Function: void __builtin_rx_mvtc (int REG, int VAL)
!      Generates the 'mvtc' machine instruction which sets control
!      register number 'reg' to 'val'.
  
   -- Built-in Function: void __builtin_rx_mvtipl (int)
!      Generates the 'mvtipl' machine instruction set the interrupt
       priority level.
  
   -- Built-in Function: void __builtin_rx_racw (int)
!      Generates the 'racw' machine instruction to round the accumulator
       according to the specified mode.
  
   -- Built-in Function: int __builtin_rx_revw (int)
!      Generates the 'revw' machine instruction which swaps the bytes in
       the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
       and also bits 16-23 occupy bits 24-31 and vice versa.
  
   -- Built-in Function: void __builtin_rx_rmpa (void)
!      Generates the 'rmpa' machine instruction which initiates a repeated
       multiply and accumulate sequence.
  
   -- Built-in Function: void __builtin_rx_round (float)
!      Generates the 'round' machine instruction which returns the
       floating-point argument rounded according to the current rounding
       mode set in the floating-point status word register.
  
   -- Built-in Function: int __builtin_rx_sat (int)
!      Generates the 'sat' machine instruction which returns the saturated
       value of the argument.
  
   -- Built-in Function: void __builtin_rx_setpsw (int)
!      Generates the 'setpsw' machine instruction to set the specified bit
       in the processor status word.
  
   -- Built-in Function: void __builtin_rx_wait (void)
!      Generates the 'wait' machine instruction.
  
  
  File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
--- 60280,60371 ----
  following functions are supported:
  
   -- Built-in Function: void __builtin_rx_brk (void)
!      Generates the ‘brk’ machine instruction.
  
   -- Built-in Function: void __builtin_rx_clrpsw (int)
!      Generates the ‘clrpsw’ machine instruction to clear the specified
       bit in the processor status word.
  
   -- Built-in Function: void __builtin_rx_int (int)
!      Generates the ‘int’ machine instruction to generate an interrupt
       with the specified value.
  
   -- Built-in Function: void __builtin_rx_machi (int, int)
!      Generates the ‘machi’ machine instruction to add the result of
       multiplying the top 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: void __builtin_rx_maclo (int, int)
!      Generates the ‘maclo’ machine instruction to add the result of
       multiplying the bottom 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: void __builtin_rx_mulhi (int, int)
!      Generates the ‘mulhi’ machine instruction to place the result of
       multiplying the top 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: void __builtin_rx_mullo (int, int)
!      Generates the ‘mullo’ machine instruction to place the result of
       multiplying the bottom 16 bits of the two arguments into the
       accumulator.
  
   -- Built-in Function: int __builtin_rx_mvfachi (void)
!      Generates the ‘mvfachi’ machine instruction to read the top 32 bits
       of the accumulator.
  
   -- Built-in Function: int __builtin_rx_mvfacmi (void)
!      Generates the ‘mvfacmi’ machine instruction to read the middle 32
       bits of the accumulator.
  
   -- Built-in Function: int __builtin_rx_mvfc (int)
!      Generates the ‘mvfc’ machine instruction which reads the control
       register specified in its argument and returns its value.
  
   -- Built-in Function: void __builtin_rx_mvtachi (int)
!      Generates the ‘mvtachi’ machine instruction to set the top 32 bits
       of the accumulator.
  
   -- Built-in Function: void __builtin_rx_mvtaclo (int)
!      Generates the ‘mvtaclo’ machine instruction to set the bottom 32
       bits of the accumulator.
  
   -- Built-in Function: void __builtin_rx_mvtc (int REG, int VAL)
!      Generates the ‘mvtc’ machine instruction which sets control
!      register number ‘reg’ to ‘val’.
  
   -- Built-in Function: void __builtin_rx_mvtipl (int)
!      Generates the ‘mvtipl’ machine instruction set the interrupt
       priority level.
  
   -- Built-in Function: void __builtin_rx_racw (int)
!      Generates the ‘racw’ machine instruction to round the accumulator
       according to the specified mode.
  
   -- Built-in Function: int __builtin_rx_revw (int)
!      Generates the ‘revw’ machine instruction which swaps the bytes in
       the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
       and also bits 16-23 occupy bits 24-31 and vice versa.
  
   -- Built-in Function: void __builtin_rx_rmpa (void)
!      Generates the ‘rmpa’ machine instruction which initiates a repeated
       multiply and accumulate sequence.
  
   -- Built-in Function: void __builtin_rx_round (float)
!      Generates the ‘round’ machine instruction which returns the
       floating-point argument rounded according to the current rounding
       mode set in the floating-point status word register.
  
   -- Built-in Function: int __builtin_rx_sat (int)
!      Generates the ‘sat’ machine instruction which returns the saturated
       value of the argument.
  
   -- Built-in Function: void __builtin_rx_setpsw (int)
!      Generates the ‘setpsw’ machine instruction to set the specified bit
       in the processor status word.
  
   -- Built-in Function: void __builtin_rx_wait (void)
!      Generates the ‘wait’ machine instruction.
  
  
  File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
*************** File: gcc.info,  Node: S/390 System z Bu
*** 60363,60381 ****
  -----------------------------------------
  
   -- Built-in Function: int __builtin_tbegin (void*)
!      Generates the 'tbegin' machine instruction starting a
       non-constrained hardware transaction.  If the parameter is non-NULL
       the memory area is used to store the transaction diagnostic buffer
!      and will be passed as first operand to 'tbegin'.  This buffer can
!      be defined using the 'struct __htm_tdb' C struct defined in
!      'htmintrin.h' and must reside on a double-word boundary.  The
!      second tbegin operand is set to '0xff0c'.  This enables
       save/restore of all GPRs and disables aborts for FPR and AR
       manipulations inside the transaction body.  The condition code set
       by the tbegin instruction is returned as integer value.  The tbegin
       instruction by definition overwrites the content of all FPRs.  The
       compiler will generate code which saves and restores the FPRs.  For
!      soft-float code it is recommended to used the '*_nofloat' variant.
       In order to prevent a TDB from being written it is required to pass
       a constant zero value as parameter.  Passing a zero value through a
       variable is not sufficient.  Although modifications of access
--- 60374,60392 ----
  -----------------------------------------
  
   -- Built-in Function: int __builtin_tbegin (void*)
!      Generates the ‘tbegin’ machine instruction starting a
       non-constrained hardware transaction.  If the parameter is non-NULL
       the memory area is used to store the transaction diagnostic buffer
!      and will be passed as first operand to ‘tbegin’.  This buffer can
!      be defined using the ‘struct __htm_tdb’ C struct defined in
!      ‘htmintrin.h’ and must reside on a double-word boundary.  The
!      second tbegin operand is set to ‘0xff0c’.  This enables
       save/restore of all GPRs and disables aborts for FPR and AR
       manipulations inside the transaction body.  The condition code set
       by the tbegin instruction is returned as integer value.  The tbegin
       instruction by definition overwrites the content of all FPRs.  The
       compiler will generate code which saves and restores the FPRs.  For
!      soft-float code it is recommended to used the ‘*_nofloat’ variant.
       In order to prevent a TDB from being written it is required to pass
       a constant zero value as parameter.  Passing a zero value through a
       variable is not sufficient.  Although modifications of access
*************** File: gcc.info,  Node: S/390 System z Bu
*** 60385,60394 ****
       have undefined state when reaching the abort code.
  
   Macros for the possible return codes of tbegin are defined in the
! 'htmintrin.h' header file:
  
   -- Macro: _HTM_TBEGIN_STARTED
!      'tbegin' has been executed as part of normal processing.  The
       transaction body is supposed to be executed.
  
   -- Macro: _HTM_TBEGIN_INDETERMINATE
--- 60396,60405 ----
       have undefined state when reaching the abort code.
  
   Macros for the possible return codes of tbegin are defined in the
! ‘htmintrin.h’ header file:
  
   -- Macro: _HTM_TBEGIN_STARTED
!      ‘tbegin’ has been executed as part of normal processing.  The
       transaction body is supposed to be executed.
  
   -- Macro: _HTM_TBEGIN_INDETERMINATE
*************** File: gcc.info,  Node: S/390 System z Bu
*** 60404,60466 ****
       under same circumstances will not be productive.
  
   -- Macro: _HTM_FIRST_USER_ABORT_CODE
!      The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
!      the first abort code which can be used for '__builtin_tabort'.
       Values below this threshold are reserved for machine use.
  
   -- Data type: struct __htm_tdb
!      The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
       structure of the transaction diagnostic block as specified in the
       Principles of Operation manual chapter 5-91.
  
   -- Built-in Function: int __builtin_tbegin_nofloat (void*)
!      Same as '__builtin_tbegin' but without FPR saves and restores.
       Using this variant in code making use of FPRs will leave the FPRs
       in undefined state when entering the transaction abort handler
       code.
  
   -- Built-in Function: int __builtin_tbegin_retry (void*, int)
!      In addition to '__builtin_tbegin' a loop for transient failures is
       generated.  If tbegin returns a condition code of 2 the transaction
       will be retried as often as specified in the second argument.  The
       perform processor assist instruction is used to tell the CPU about
       the number of fails so far.
  
   -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
!      Same as '__builtin_tbegin_retry' but without FPR saves and
       restores.  Using this variant in code making use of FPRs will leave
       the FPRs in undefined state when entering the transaction abort
       handler code.
  
   -- Built-in Function: void __builtin_tbeginc (void)
!      Generates the 'tbeginc' machine instruction starting a constrained
!      hardware transaction.  The second operand is set to '0xff08'.
  
   -- Built-in Function: int __builtin_tend (void)
!      Generates the 'tend' machine instruction finishing a transaction
       and making the changes visible to other threads.  The condition
       code generated by tend is returned as integer value.
  
   -- Built-in Function: void __builtin_tabort (int)
!      Generates the 'tabort' machine instruction with the specified abort
       code.  Abort codes from 0 through 255 are reserved and will result
       in an error message.
  
   -- Built-in Function: void __builtin_tx_assist (int)
!      Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
       parameter is loaded into rX and a value of zero is loaded into rY.
       The integer parameter specifies the number of times the transaction
       repeatedly aborted.
  
   -- Built-in Function: int __builtin_tx_nesting_depth (void)
!      Generates the 'etnd' machine instruction.  The current nesting
       depth is returned as integer value.  For a nesting depth of 0 the
       code is not executed as part of an transaction.
  
   -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
            uint64_t)
  
!      Generates the 'ntstg' machine instruction.  The second argument is
       written to the first arguments location.  The store operation will
       not be rolled-back in case of an transaction abort.
  
--- 60415,60477 ----
       under same circumstances will not be productive.
  
   -- Macro: _HTM_FIRST_USER_ABORT_CODE
!      The ‘_HTM_FIRST_USER_ABORT_CODE’ defined in ‘htmintrin.h’ specifies
!      the first abort code which can be used for ‘__builtin_tabort’.
       Values below this threshold are reserved for machine use.
  
   -- Data type: struct __htm_tdb
!      The ‘struct __htm_tdb’ defined in ‘htmintrin.h’ describes the
       structure of the transaction diagnostic block as specified in the
       Principles of Operation manual chapter 5-91.
  
   -- Built-in Function: int __builtin_tbegin_nofloat (void*)
!      Same as ‘__builtin_tbegin’ but without FPR saves and restores.
       Using this variant in code making use of FPRs will leave the FPRs
       in undefined state when entering the transaction abort handler
       code.
  
   -- Built-in Function: int __builtin_tbegin_retry (void*, int)
!      In addition to ‘__builtin_tbegin’ a loop for transient failures is
       generated.  If tbegin returns a condition code of 2 the transaction
       will be retried as often as specified in the second argument.  The
       perform processor assist instruction is used to tell the CPU about
       the number of fails so far.
  
   -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
!      Same as ‘__builtin_tbegin_retry’ but without FPR saves and
       restores.  Using this variant in code making use of FPRs will leave
       the FPRs in undefined state when entering the transaction abort
       handler code.
  
   -- Built-in Function: void __builtin_tbeginc (void)
!      Generates the ‘tbeginc’ machine instruction starting a constrained
!      hardware transaction.  The second operand is set to ‘0xff08’.
  
   -- Built-in Function: int __builtin_tend (void)
!      Generates the ‘tend’ machine instruction finishing a transaction
       and making the changes visible to other threads.  The condition
       code generated by tend is returned as integer value.
  
   -- Built-in Function: void __builtin_tabort (int)
!      Generates the ‘tabort’ machine instruction with the specified abort
       code.  Abort codes from 0 through 255 are reserved and will result
       in an error message.
  
   -- Built-in Function: void __builtin_tx_assist (int)
!      Generates the ‘ppa rX,rY,1’ machine instruction.  Where the integer
       parameter is loaded into rX and a value of zero is loaded into rY.
       The integer parameter specifies the number of times the transaction
       repeatedly aborted.
  
   -- Built-in Function: int __builtin_tx_nesting_depth (void)
!      Generates the ‘etnd’ machine instruction.  The current nesting
       depth is returned as integer value.  For a nesting depth of 0 the
       code is not executed as part of an transaction.
  
   -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
            uint64_t)
  
!      Generates the ‘ntstg’ machine instruction.  The second argument is
       written to the first arguments location.  The store operation will
       not be rolled-back in case of an transaction abort.
  
*************** The following built-in functions are sup
*** 60474,60491 ****
  SH4 families of processors:
  
   -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
!      Sets the 'GBR' register to the specified value PTR.  This is
       usually used by system code that manages threads and execution
       contexts.  The compiler normally does not generate code that
!      modifies the contents of 'GBR' and thus the value is preserved
!      across function calls.  Changing the 'GBR' value in user code must
!      be done with caution, since the compiler might use 'GBR' in order
       to access thread local variables.
  
   -- Built-in Function: void * __builtin_thread_pointer (void)
!      Returns the value that is currently set in the 'GBR' register.
       Memory loads and stores that use the thread pointer as a base
!      address are turned into 'GBR' based displacement loads and stores,
       if possible.  For example:
            struct my_tcb
            {
--- 60485,60502 ----
  SH4 families of processors:
  
   -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
!      Sets the ‘GBR’ register to the specified value PTR.  This is
       usually used by system code that manages threads and execution
       contexts.  The compiler normally does not generate code that
!      modifies the contents of ‘GBR’ and thus the value is preserved
!      across function calls.  Changing the ‘GBR’ value in user code must
!      be done with caution, since the compiler might use ‘GBR’ in order
       to access thread local variables.
  
   -- Built-in Function: void * __builtin_thread_pointer (void)
!      Returns the value that is currently set in the ‘GBR’ register.
       Memory loads and stores that use the thread pointer as a base
!      address are turned into ‘GBR’ based displacement loads and stores,
       if possible.  For example:
            struct my_tcb
            {
*************** SH4 families of processors:
*** 60494,60509 ****
  
            int get_tcb_value (void)
            {
!             // Generate 'mov.l @(8,gbr),r0' instruction
              return ((my_tcb*)__builtin_thread_pointer ())->c;
            }
  
  
   -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
!      Returns the value that is currently set in the 'FPSCR' register.
  
   -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
!      Sets the 'FPSCR' register to the specified value VAL, while
       preserving the current values of the FR, SZ and PR bits.
  
  
--- 60505,60520 ----
  
            int get_tcb_value (void)
            {
!             // Generate ‘mov.l @(8,gbr),r0’ instruction
              return ((my_tcb*)__builtin_thread_pointer ())->c;
            }
  
  
   -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
!      Returns the value that is currently set in the ‘FPSCR’ register.
  
   -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
!      Sets the ‘FPSCR’ register to the specified value VAL, while
       preserving the current values of the FR, SZ and PR bits.
  
  
*************** File: gcc.info,  Node: SPARC VIS Built-i
*** 60514,60520 ****
  
  GCC supports SIMD operations on the SPARC using both the generic vector
  extensions (*note Vector Extensions::) as well as built-in functions for
! the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
  the VIS extension is exposed as the following built-in functions:
  
       typedef int v1si __attribute__ ((vector_size (4)));
--- 60525,60531 ----
  
  GCC supports SIMD operations on the SPARC using both the generic vector
  extensions (*note Vector Extensions::) as well as built-in functions for
! the SPARC Visual Instruction Set (VIS). When you use the ‘-mvis’ switch,
  the VIS extension is exposed as the following built-in functions:
  
       typedef int v1si __attribute__ ((vector_size (4)));
*************** the VIS extension is exposed as the foll
*** 60580,60586 ****
       long __builtin_vis_array16 (long, long);
       long __builtin_vis_array32 (long, long);
  
!  When you use the '-mvis2' switch, the VIS version 2.0 built-in
  functions also become available:
  
       long __builtin_vis_bmask (long, long);
--- 60591,60597 ----
       long __builtin_vis_array16 (long, long);
       long __builtin_vis_array32 (long, long);
  
!  When you use the ‘-mvis2’ switch, the VIS version 2.0 built-in
  functions also become available:
  
       long __builtin_vis_bmask (long, long);
*************** functions also become available:
*** 60596,60602 ****
       long __builtin_vis_edge32n (void *, void *);
       long __builtin_vis_edge32ln (void *, void *);
  
!  When you use the '-mvis3' switch, the VIS version 3.0 built-in
  functions also become available:
  
       void __builtin_vis_cmask8 (long);
--- 60607,60613 ----
       long __builtin_vis_edge32n (void *, void *);
       long __builtin_vis_edge32ln (void *, void *);
  
!  When you use the ‘-mvis3’ switch, the VIS version 3.0 built-in
  functions also become available:
  
       void __builtin_vis_cmask8 (long);
*************** functions also become available:
*** 60646,60652 ****
       int64_t __builtin_vis_xmulx (int64_t, int64_t);
       int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
  
!  When you use the '-mvis4' switch, the VIS version 4.0 built-in
  functions also become available:
  
       v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
--- 60657,60663 ----
       int64_t __builtin_vis_xmulx (int64_t, int64_t);
       int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
  
!  When you use the ‘-mvis4’ switch, the VIS version 4.0 built-in
  functions also become available:
  
       v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
*************** functions also become available:
*** 60682,60688 ****
       v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
       v2si __builtin_vis_fpminu32 (v2si, v2si);
  
!  When you use the '-mvis4b' switch, the VIS version 4.0B built-in
  functions also become available:
  
       v8qi __builtin_vis_dictunpack8 (double, int);
--- 60693,60699 ----
       v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
       v2si __builtin_vis_fpminu32 (v2si, v2si);
  
!  When you use the ‘-mvis4b’ switch, the VIS version 4.0B built-in
  functions also become available:
  
       v8qi __builtin_vis_dictunpack8 (double, int);
*************** File: gcc.info,  Node: TI C6X Built-in F
*** 60727,60733 ****
  
  GCC provides intrinsics to access certain instructions of the TI C6X
  processors.  These intrinsics, listed below, are available after
! inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
  C6X instructions.
  
       int _sadd (int, int);
--- 60738,60744 ----
  
  GCC provides intrinsics to access certain instructions of the TI C6X
  processors.  These intrinsics, listed below, are available after
! inclusion of the ‘c6x_intrinsics.h’ header file.  They map directly to
  C6X instructions.
  
       int _sadd (int, int);
*************** File: gcc.info,  Node: x86 Built-in Func
*** 60766,60772 ****
  These built-in functions are available for the x86-32 and x86-64 family
  of computers, depending on the command-line switches used.
  
!  If you specify command-line switches such as '-msse', the compiler
  could use the extended instruction sets even if the built-ins are not
  used explicitly in the program.  For this reason, applications that
  perform run-time CPU detection must compile separate files for each
--- 60777,60783 ----
  These built-in functions are available for the x86-32 and x86-64 family
  of computers, depending on the command-line switches used.
  
!  If you specify command-line switches such as ‘-msse’, the compiler
  could use the extended instruction sets even if the built-ins are not
  used explicitly in the program.  For this reason, applications that
  perform run-time CPU detection must compile separate files for each
*************** file containing the CPU detection code s
*** 60775,60798 ****
  options.
  
   The following machine modes are available for use with MMX built-in
! functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
! integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
  vector of eight 8-bit integers.  Some of the built-in functions operate
! on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
  mode.
  
!  If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
  of two 32-bit floating-point values.
  
!  If SSE extensions are enabled, 'V4SF' is used for a vector of four
  32-bit floating-point values.  Some instructions use a vector of four
! 32-bit integers, these use 'V4SI'.  Finally, some instructions operate
  on an entire vector register, interpreting it as a 128-bit integer,
! these use mode 'TI'.
  
   The x86-32 and x86-64 family of processors use additional built-in
! functions for efficient use of 'TF' ('__float128') 128-bit floating
! point and 'TC' 128-bit complex floating-point values.
  
   The following floating-point built-in functions are always available:
  
--- 60786,60809 ----
  options.
  
   The following machine modes are available for use with MMX built-in
! functions (*note Vector Extensions::): ‘V2SI’ for a vector of two 32-bit
! integers, ‘V4HI’ for a vector of four 16-bit integers, and ‘V8QI’ for a
  vector of eight 8-bit integers.  Some of the built-in functions operate
! on MMX registers as a whole 64-bit entity, these use ‘V1DI’ as their
  mode.
  
!  If 3DNow! extensions are enabled, ‘V2SF’ is used as a mode for a vector
  of two 32-bit floating-point values.
  
!  If SSE extensions are enabled, ‘V4SF’ is used for a vector of four
  32-bit floating-point values.  Some instructions use a vector of four
! 32-bit integers, these use ‘V4SI’.  Finally, some instructions operate
  on an entire vector register, interpreting it as a 128-bit integer,
! these use mode ‘TI’.
  
   The x86-32 and x86-64 family of processors use additional built-in
! functions for efficient use of ‘TF’ (‘__float128’) 128-bit floating
! point and ‘TC’ 128-bit complex floating-point values.
  
   The following floating-point built-in functions are always available:
  
*************** point and 'TC' 128-bit complex floating-
*** 60804,60826 ****
       Copies the sign of Y into X and returns the new value of X.
  
   -- Built-in Function: __float128 __builtin_infq (void)
!      Similar to '__builtin_inf', except the return type is '__float128'.
  
   -- Built-in Function: __float128 __builtin_huge_valq (void)
!      Similar to '__builtin_huge_val', except the return type is
!      '__float128'.
  
   -- Built-in Function: __float128 __builtin_nanq (void)
!      Similar to '__builtin_nan', except the return type is '__float128'.
  
   -- Built-in Function: __float128 __builtin_nansq (void)
!      Similar to '__builtin_nans', except the return type is
!      '__float128'.
  
   The following built-in function is always available.
  
   -- Built-in Function: void __builtin_ia32_pause (void)
!      Generates the 'pause' machine instruction with a compiler memory
       barrier.
  
   The following built-in functions are always available and can be used
--- 60815,60837 ----
       Copies the sign of Y into X and returns the new value of X.
  
   -- Built-in Function: __float128 __builtin_infq (void)
!      Similar to ‘__builtin_inf’, except the return type is ‘__float128’.
  
   -- Built-in Function: __float128 __builtin_huge_valq (void)
!      Similar to ‘__builtin_huge_val’, except the return type is
!      ‘__float128’.
  
   -- Built-in Function: __float128 __builtin_nanq (void)
!      Similar to ‘__builtin_nan’, except the return type is ‘__float128’.
  
   -- Built-in Function: __float128 __builtin_nansq (void)
!      Similar to ‘__builtin_nans’, except the return type is
!      ‘__float128’.
  
   The following built-in function is always available.
  
   -- Built-in Function: void __builtin_ia32_pause (void)
!      Generates the ‘pause’ machine instruction with a compiler memory
       barrier.
  
   The following built-in functions are always available and can be used
*************** to check the target platform type.
*** 60830,60843 ****
       This function runs the CPU detection code to check the type of CPU
       and the features supported.  This built-in function needs to be
       invoked along with the built-in functions to check CPU type and
!      features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
       when used in a function that is executed before any constructors
       are called.  The CPU detection code is automatically executed in a
       very high priority constructor.
  
!      For example, this function has to be used in 'ifunc' resolvers that
!      check for CPU type using the built-in functions '__builtin_cpu_is'
!      and '__builtin_cpu_supports', or in constructors on targets that
       don't support constructor priority.
  
            static void (*resolve_memcpy (void)) (void)
--- 60841,60854 ----
       This function runs the CPU detection code to check the type of CPU
       and the features supported.  This built-in function needs to be
       invoked along with the built-in functions to check CPU type and
!      features, ‘__builtin_cpu_is’ and ‘__builtin_cpu_supports’, only
       when used in a function that is executed before any constructors
       are called.  The CPU detection code is automatically executed in a
       very high priority constructor.
  
!      For example, this function has to be used in ‘ifunc’ resolvers that
!      check for CPU type using the built-in functions ‘__builtin_cpu_is’
!      and ‘__builtin_cpu_supports’, or in constructors on targets that
       don't support constructor priority.
  
            static void (*resolve_memcpy (void)) (void)
*************** to check the target platform type.
*** 60856,61036 ****
  
   -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
       This function returns a positive integer if the run-time CPU is of
!      type CPUNAME and returns '0' otherwise.  The following CPU names
       can be detected:
  
!      'amd'
            AMD CPU.
  
!      'intel'
            Intel CPU.
  
!      'atom'
            Intel Atom CPU.
  
!      'slm'
            Intel Silvermont CPU.
  
!      'core2'
            Intel Core 2 CPU.
  
!      'corei7'
            Intel Core i7 CPU.
  
!      'nehalem'
            Intel Core i7 Nehalem CPU.
  
!      'westmere'
            Intel Core i7 Westmere CPU.
  
!      'sandybridge'
            Intel Core i7 Sandy Bridge CPU.
  
!      'ivybridge'
            Intel Core i7 Ivy Bridge CPU.
  
!      'haswell'
            Intel Core i7 Haswell CPU.
  
!      'broadwell'
            Intel Core i7 Broadwell CPU.
  
!      'skylake'
            Intel Core i7 Skylake CPU.
  
!      'skylake-avx512'
            Intel Core i7 Skylake AVX512 CPU.
  
!      'cannonlake'
            Intel Core i7 Cannon Lake CPU.
  
!      'icelake-client'
            Intel Core i7 Ice Lake Client CPU.
  
!      'icelake-server'
            Intel Core i7 Ice Lake Server CPU.
  
!      'cascadelake'
            Intel Core i7 Cascadelake CPU.
  
!      'tigerlake'
            Intel Core i7 Tigerlake CPU.
  
!      'cooperlake'
            Intel Core i7 Cooperlake CPU.
  
!      'sapphirerapids'
            Intel Core i7 sapphirerapids CPU.
  
!      'alderlake'
            Intel Core i7 Alderlake CPU.
  
!      'rocketlake'
            Intel Core i7 Rocketlake CPU.
  
!      'graniterapids'
            Intel Core i7 graniterapids CPU.
  
!      'graniterapids-d'
            Intel Core i7 graniterapids D CPU.
  
!      'arrowlake'
            Intel Core i7 Arrow Lake CPU.
  
!      'arrowlake-s'
            Intel Core i7 Arrow Lake S CPU.
  
!      'pantherlake'
            Intel Core i7 Panther Lake CPU.
  
!      'bonnell'
            Intel Atom Bonnell CPU.
  
!      'silvermont'
            Intel Atom Silvermont CPU.
  
!      'goldmont'
            Intel Atom Goldmont CPU.
  
!      'goldmont-plus'
            Intel Atom Goldmont Plus CPU.
  
!      'tremont'
            Intel Atom Tremont CPU.
  
!      'sierraforest'
            Intel Atom Sierra Forest CPU.
  
!      'grandridge'
            Intel Atom Grand Ridge CPU.
  
!      'clearwaterforest'
            Intel Atom Clearwater Forest CPU.
  
!      'knl'
            Intel Knights Landing CPU.
  
!      'knm'
            Intel Knights Mill CPU.
  
!      'lujiazui'
            ZHAOXIN lujiazui CPU.
  
!      'yongfeng'
            ZHAOXIN yongfeng CPU.
  
!      'amdfam10h'
            AMD Family 10h CPU.
  
!      'barcelona'
            AMD Family 10h Barcelona CPU.
  
!      'shanghai'
            AMD Family 10h Shanghai CPU.
  
!      'istanbul'
            AMD Family 10h Istanbul CPU.
  
!      'btver1'
            AMD Family 14h CPU.
  
!      'amdfam15h'
            AMD Family 15h CPU.
  
!      'bdver1'
            AMD Family 15h Bulldozer version 1.
  
!      'bdver2'
            AMD Family 15h Bulldozer version 2.
  
!      'bdver3'
            AMD Family 15h Bulldozer version 3.
  
!      'bdver4'
            AMD Family 15h Bulldozer version 4.
  
!      'btver2'
            AMD Family 16h CPU.
  
!      'amdfam17h'
            AMD Family 17h CPU.
  
!      'znver1'
            AMD Family 17h Zen version 1.
  
!      'znver2'
            AMD Family 17h Zen version 2.
  
!      'amdfam19h'
            AMD Family 19h CPU.
  
!      'znver3'
            AMD Family 19h Zen version 3.
  
!      'znver4'
            AMD Family 19h Zen version 4.
  
!      'znver5'
            AMD Family 1ah Zen version 5.
  
       Here is an example:
--- 60867,61047 ----
  
   -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
       This function returns a positive integer if the run-time CPU is of
!      type CPUNAME and returns ‘0’ otherwise.  The following CPU names
       can be detected:
  
!      ‘amd’
            AMD CPU.
  
!      ‘intel’
            Intel CPU.
  
!      ‘atom’
            Intel Atom CPU.
  
!      ‘slm’
            Intel Silvermont CPU.
  
!      ‘core2’
            Intel Core 2 CPU.
  
!      ‘corei7’
            Intel Core i7 CPU.
  
!      ‘nehalem’
            Intel Core i7 Nehalem CPU.
  
!      ‘westmere’
            Intel Core i7 Westmere CPU.
  
!      ‘sandybridge’
            Intel Core i7 Sandy Bridge CPU.
  
!      ‘ivybridge’
            Intel Core i7 Ivy Bridge CPU.
  
!      ‘haswell’
            Intel Core i7 Haswell CPU.
  
!      ‘broadwell’
            Intel Core i7 Broadwell CPU.
  
!      ‘skylake’
            Intel Core i7 Skylake CPU.
  
!      ‘skylake-avx512’
            Intel Core i7 Skylake AVX512 CPU.
  
!      ‘cannonlake’
            Intel Core i7 Cannon Lake CPU.
  
!      ‘icelake-client’
            Intel Core i7 Ice Lake Client CPU.
  
!      ‘icelake-server’
            Intel Core i7 Ice Lake Server CPU.
  
!      ‘cascadelake’
            Intel Core i7 Cascadelake CPU.
  
!      ‘tigerlake’
            Intel Core i7 Tigerlake CPU.
  
!      ‘cooperlake’
            Intel Core i7 Cooperlake CPU.
  
!      ‘sapphirerapids’
            Intel Core i7 sapphirerapids CPU.
  
!      ‘alderlake’
            Intel Core i7 Alderlake CPU.
  
!      ‘rocketlake’
            Intel Core i7 Rocketlake CPU.
  
!      ‘graniterapids’
            Intel Core i7 graniterapids CPU.
  
!      ‘graniterapids-d’
            Intel Core i7 graniterapids D CPU.
  
!      ‘arrowlake’
            Intel Core i7 Arrow Lake CPU.
  
!      ‘arrowlake-s’
            Intel Core i7 Arrow Lake S CPU.
  
!      ‘pantherlake’
            Intel Core i7 Panther Lake CPU.
  
!      ‘bonnell’
            Intel Atom Bonnell CPU.
  
!      ‘silvermont’
            Intel Atom Silvermont CPU.
  
!      ‘goldmont’
            Intel Atom Goldmont CPU.
  
!      ‘goldmont-plus’
            Intel Atom Goldmont Plus CPU.
  
!      ‘tremont’
            Intel Atom Tremont CPU.
  
!      ‘sierraforest’
            Intel Atom Sierra Forest CPU.
  
!      ‘grandridge’
            Intel Atom Grand Ridge CPU.
  
!      ‘clearwaterforest’
            Intel Atom Clearwater Forest CPU.
  
!      ‘knl’
            Intel Knights Landing CPU.
  
!      ‘knm’
            Intel Knights Mill CPU.
  
!      ‘lujiazui’
            ZHAOXIN lujiazui CPU.
  
!      ‘yongfeng’
            ZHAOXIN yongfeng CPU.
  
!      ‘amdfam10h’
            AMD Family 10h CPU.
  
!      ‘barcelona’
            AMD Family 10h Barcelona CPU.
  
!      ‘shanghai’
            AMD Family 10h Shanghai CPU.
  
!      ‘istanbul’
            AMD Family 10h Istanbul CPU.
  
!      ‘btver1’
            AMD Family 14h CPU.
  
!      ‘amdfam15h’
            AMD Family 15h CPU.
  
!      ‘bdver1’
            AMD Family 15h Bulldozer version 1.
  
!      ‘bdver2’
            AMD Family 15h Bulldozer version 2.
  
!      ‘bdver3’
            AMD Family 15h Bulldozer version 3.
  
!      ‘bdver4’
            AMD Family 15h Bulldozer version 4.
  
!      ‘btver2’
            AMD Family 16h CPU.
  
!      ‘amdfam17h’
            AMD Family 17h CPU.
  
!      ‘znver1’
            AMD Family 17h Zen version 1.
  
!      ‘znver2’
            AMD Family 17h Zen version 2.
  
!      ‘amdfam19h’
            AMD Family 19h CPU.
  
!      ‘znver3’
            AMD Family 19h Zen version 3.
  
!      ‘znver4’
            AMD Family 19h Zen version 4.
  
!      ‘znver5’
            AMD Family 1ah Zen version 5.
  
       Here is an example:
*************** to check the target platform type.
*** 61045,61133 ****
  
   -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
       This function returns a positive integer if the run-time CPU
!      supports FEATURE and returns '0' otherwise.  The following features
       can be detected:
  
!      'cmov'
            CMOV instruction.
!      'mmx'
            MMX instructions.
!      'popcnt'
            POPCNT instruction.
!      'sse'
            SSE instructions.
!      'sse2'
            SSE2 instructions.
!      'sse3'
            SSE3 instructions.
!      'ssse3'
            SSSE3 instructions.
!      'sse4.1'
            SSE4.1 instructions.
!      'sse4.2'
            SSE4.2 instructions.
!      'avx'
            AVX instructions.
!      'avx2'
            AVX2 instructions.
!      'sse4a'
            SSE4A instructions.
!      'fma4'
            FMA4 instructions.
!      'xop'
            XOP instructions.
!      'fma'
            FMA instructions.
!      'avx512f'
            AVX512F instructions.
!      'bmi'
            BMI instructions.
!      'bmi2'
            BMI2 instructions.
!      'aes'
            AES instructions.
!      'pclmul'
            PCLMUL instructions.
!      'avx512vl'
            AVX512VL instructions.
!      'avx512bw'
            AVX512BW instructions.
!      'avx512dq'
            AVX512DQ instructions.
!      'avx512cd'
            AVX512CD instructions.
!      'avx512er'
            AVX512ER instructions.
!      'avx512pf'
            AVX512PF instructions.
!      'avx512vbmi'
            AVX512VBMI instructions.
!      'avx512ifma'
            AVX512IFMA instructions.
!      'avx5124vnniw'
            AVX5124VNNIW instructions.
!      'avx5124fmaps'
            AVX5124FMAPS instructions.
!      'avx512vpopcntdq'
            AVX512VPOPCNTDQ instructions.
!      'avx512vbmi2'
            AVX512VBMI2 instructions.
!      'gfni'
            GFNI instructions.
!      'vpclmulqdq'
            VPCLMULQDQ instructions.
!      'avx512vnni'
            AVX512VNNI instructions.
!      'avx512bitalg'
            AVX512BITALG instructions.
!      'x86-64'
            Baseline x86-64 microarchitecture level (as defined in x86-64
            psABI).
!      'x86-64-v2'
            x86-64-v2 microarchitecture level.
!      'x86-64-v3'
            x86-64-v3 microarchitecture level.
!      'x86-64-v4'
            x86-64-v4 microarchitecture level.
  
       Here is an example:
--- 61056,61144 ----
  
   -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
       This function returns a positive integer if the run-time CPU
!      supports FEATURE and returns ‘0’ otherwise.  The following features
       can be detected:
  
!      ‘cmov’
            CMOV instruction.
!      ‘mmx’
            MMX instructions.
!      ‘popcnt’
            POPCNT instruction.
!      ‘sse’
            SSE instructions.
!      ‘sse2’
            SSE2 instructions.
!      ‘sse3’
            SSE3 instructions.
!      ‘ssse3’
            SSSE3 instructions.
!      ‘sse4.1’
            SSE4.1 instructions.
!      ‘sse4.2’
            SSE4.2 instructions.
!      ‘avx’
            AVX instructions.
!      ‘avx2’
            AVX2 instructions.
!      ‘sse4a’
            SSE4A instructions.
!      ‘fma4’
            FMA4 instructions.
!      ‘xop’
            XOP instructions.
!      ‘fma’
            FMA instructions.
!      ‘avx512f’
            AVX512F instructions.
!      ‘bmi’
            BMI instructions.
!      ‘bmi2’
            BMI2 instructions.
!      ‘aes’
            AES instructions.
!      ‘pclmul’
            PCLMUL instructions.
!      ‘avx512vl’
            AVX512VL instructions.
!      ‘avx512bw’
            AVX512BW instructions.
!      ‘avx512dq’
            AVX512DQ instructions.
!      ‘avx512cd’
            AVX512CD instructions.
!      ‘avx512er’
            AVX512ER instructions.
!      ‘avx512pf’
            AVX512PF instructions.
!      ‘avx512vbmi’
            AVX512VBMI instructions.
!      ‘avx512ifma’
            AVX512IFMA instructions.
!      ‘avx5124vnniw’
            AVX5124VNNIW instructions.
!      ‘avx5124fmaps’
            AVX5124FMAPS instructions.
!      ‘avx512vpopcntdq’
            AVX512VPOPCNTDQ instructions.
!      ‘avx512vbmi2’
            AVX512VBMI2 instructions.
!      ‘gfni’
            GFNI instructions.
!      ‘vpclmulqdq’
            VPCLMULQDQ instructions.
!      ‘avx512vnni’
            AVX512VNNI instructions.
!      ‘avx512bitalg’
            AVX512BITALG instructions.
!      ‘x86-64’
            Baseline x86-64 microarchitecture level (as defined in x86-64
            psABI).
!      ‘x86-64-v2’
            x86-64-v2 microarchitecture level.
!      ‘x86-64-v3’
            x86-64-v3 microarchitecture level.
!      ‘x86-64-v4’
            x86-64-v4 microarchitecture level.
  
       Here is an example:
*************** to check the target platform type.
*** 61140,61146 ****
                 count = generic_countbits (n); //generic implementation.
              }
  
!  The following built-in functions are made available by '-mmmx'.  All of
  them generate the machine instruction that is part of the name.
  
       v8qi __builtin_ia32_paddb (v8qi, v8qi);
--- 61151,61157 ----
                 count = generic_countbits (n); //generic implementation.
              }
  
!  The following built-in functions are made available by ‘-mmmx’.  All of
  them generate the machine instruction that is part of the name.
  
       v8qi __builtin_ia32_paddb (v8qi, v8qi);
*************** them generate the machine instruction th
*** 61197,61203 ****
       v2si __builtin_ia32_psradi (v2si, int);
  
   The following built-in functions are made available either with
! '-msse', or with '-m3dnowa'.  All of them generate the machine
  instruction that is part of the name.
  
       v4hi __builtin_ia32_pmulhuw (v4hi, v4hi);
--- 61208,61214 ----
       v2si __builtin_ia32_psradi (v2si, int);
  
   The following built-in functions are made available either with
! ‘-msse’, or with ‘-m3dnowa’.  All of them generate the machine
  instruction that is part of the name.
  
       v4hi __builtin_ia32_pmulhuw (v4hi, v4hi);
*************** instruction that is part of the name.
*** 61213,61219 ****
       void __builtin_ia32_movntq (di *, di);
       void __builtin_ia32_sfence (void);
  
!  The following built-in functions are available when '-msse' is used.
  All of them generate the machine instruction that is part of the name.
  
       int __builtin_ia32_comieq (v4sf, v4sf);
--- 61224,61230 ----
       void __builtin_ia32_movntq (di *, di);
       void __builtin_ia32_sfence (void);
  
!  The following built-in functions are available when ‘-msse’ is used.
  All of them generate the machine instruction that is part of the name.
  
       int __builtin_ia32_comieq (v4sf, v4sf);
*************** All of them generate the machine instruc
*** 61285,61314 ****
       void __builtin_ia32_movntps (float *, v4sf);
       int __builtin_ia32_movmskps (v4sf);
  
!  The following built-in functions are available when '-msse' is used.
  
   -- Built-in Function: v4sf __builtin_ia32_loadups (float *)
!      Generates the 'movups' machine instruction as a load from memory.
  
   -- Built-in Function: void __builtin_ia32_storeups (float *, v4sf)
!      Generates the 'movups' machine instruction as a store to memory.
  
   -- Built-in Function: v4sf __builtin_ia32_loadss (float *)
!      Generates the 'movss' machine instruction as a load from memory.
  
   -- Built-in Function: v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
!      Generates the 'movhps' machine instruction as a load from memory.
  
   -- Built-in Function: v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
!      Generates the 'movlps' machine instruction as a load from memory
  
   -- Built-in Function: void __builtin_ia32_storehps (v2sf *, v4sf)
!      Generates the 'movhps' machine instruction as a store to memory.
  
   -- Built-in Function: void __builtin_ia32_storelps (v2sf *, v4sf)
!      Generates the 'movlps' machine instruction as a store to memory.
  
!  The following built-in functions are available when '-msse2' is used.
  All of them generate the machine instruction that is part of the name.
  
       int __builtin_ia32_comisdeq (v2df, v2df);
--- 61296,61325 ----
       void __builtin_ia32_movntps (float *, v4sf);
       int __builtin_ia32_movmskps (v4sf);
  
!  The following built-in functions are available when ‘-msse’ is used.
  
   -- Built-in Function: v4sf __builtin_ia32_loadups (float *)
!      Generates the ‘movups’ machine instruction as a load from memory.
  
   -- Built-in Function: void __builtin_ia32_storeups (float *, v4sf)
!      Generates the ‘movups’ machine instruction as a store to memory.
  
   -- Built-in Function: v4sf __builtin_ia32_loadss (float *)
!      Generates the ‘movss’ machine instruction as a load from memory.
  
   -- Built-in Function: v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
!      Generates the ‘movhps’ machine instruction as a load from memory.
  
   -- Built-in Function: v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
!      Generates the ‘movlps’ machine instruction as a load from memory
  
   -- Built-in Function: void __builtin_ia32_storehps (v2sf *, v4sf)
!      Generates the ‘movhps’ machine instruction as a store to memory.
  
   -- Built-in Function: void __builtin_ia32_storelps (v2sf *, v4sf)
!      Generates the ‘movlps’ machine instruction as a store to memory.
  
!  The following built-in functions are available when ‘-msse2’ is used.
  All of them generate the machine instruction that is part of the name.
  
       int __builtin_ia32_comisdeq (v2df, v2df);
*************** All of them generate the machine instruc
*** 61467,61473 ****
       v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi);
       v2di __builtin_ia32_movq128 (v2di);
  
!  The following built-in functions are available when '-msse3' is used.
  All of them generate the machine instruction that is part of the name.
  
       v2df __builtin_ia32_addsubpd (v2df, v2df);
--- 61478,61484 ----
       v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi);
       v2di __builtin_ia32_movq128 (v2di);
  
!  The following built-in functions are available when ‘-msse3’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v2df __builtin_ia32_addsubpd (v2df, v2df);
*************** All of them generate the machine instruc
*** 61482,61488 ****
       v4sf __builtin_ia32_movsldup (v4sf);
       void __builtin_ia32_mwait (unsigned int, unsigned int);
  
!  The following built-in functions are available when '-mssse3' is used.
  All of them generate the machine instruction that is part of the name.
  
       v2si __builtin_ia32_phaddd (v2si, v2si);
--- 61493,61499 ----
       v4sf __builtin_ia32_movsldup (v4sf);
       void __builtin_ia32_mwait (unsigned int, unsigned int);
  
!  The following built-in functions are available when ‘-mssse3’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v2si __builtin_ia32_phaddd (v2si, v2si);
*************** All of them generate the machine instruc
*** 61502,61508 ****
       v2si __builtin_ia32_pabsd (v2si);
       v4hi __builtin_ia32_pabsw (v4hi);
  
!  The following built-in functions are available when '-mssse3' is used.
  All of them generate the machine instruction that is part of the name.
  
       v4si __builtin_ia32_phaddd128 (v4si, v4si);
--- 61513,61519 ----
       v2si __builtin_ia32_pabsd (v2si);
       v4hi __builtin_ia32_pabsw (v4hi);
  
!  The following built-in functions are available when ‘-mssse3’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v4si __builtin_ia32_phaddd128 (v4si, v4si);
*************** All of them generate the machine instruc
*** 61522,61528 ****
       v4si __builtin_ia32_pabsd128 (v4si);
       v8hi __builtin_ia32_pabsw128 (v8hi);
  
!  The following built-in functions are available when '-msse4.1' is used.
  All of them generate the machine instruction that is part of the name.
  
       v2df __builtin_ia32_blendpd (v2df, v2df, const int);
--- 61533,61539 ----
       v4si __builtin_ia32_pabsd128 (v4si);
       v8hi __builtin_ia32_pabsw128 (v8hi);
  
!  The following built-in functions are available when ‘-msse4.1’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v2df __builtin_ia32_blendpd (v2df, v2df, const int);
*************** All of them generate the machine instruc
*** 61569,61611 ****
       v2df __builtin_ia32_roundsd (v2df, v2df, const int);
       v4sf __builtin_ia32_roundss (v4sf, v4sf, const int);
  
!  The following built-in functions are available when '-msse4.1' is used.
  
   -- Built-in Function: v4sf __builtin_ia32_vec_set_v4sf (v4sf, float,
            const int)
!      Generates the 'insertps' machine instruction.
  
   -- Built-in Function: int __builtin_ia32_vec_ext_v16qi (v16qi, const
            int)
!      Generates the 'pextrb' machine instruction.
  
   -- Built-in Function: v16qi __builtin_ia32_vec_set_v16qi (v16qi, int,
            const int)
!      Generates the 'pinsrb' machine instruction.
  
   -- Built-in Function: v4si __builtin_ia32_vec_set_v4si (v4si, int,
            const int)
!      Generates the 'pinsrd' machine instruction.
  
   -- Built-in Function: v2di __builtin_ia32_vec_set_v2di (v2di, long
            long, const int)
!      Generates the 'pinsrq' machine instruction in 64bit mode.
  
   The following built-in functions are changed to generate new SSE4.1
! instructions when '-msse4.1' is used.
  
   -- Built-in Function: float __builtin_ia32_vec_ext_v4sf (v4sf, const
            int)
!      Generates the 'extractps' machine instruction.
  
   -- Built-in Function: int __builtin_ia32_vec_ext_v4si (v4si, const int)
!      Generates the 'pextrd' machine instruction.
  
   -- Built-in Function: long long __builtin_ia32_vec_ext_v2di (v2di,
            const int)
!      Generates the 'pextrq' machine instruction in 64bit mode.
  
!  The following built-in functions are available when '-msse4.2' is used.
  All of them generate the machine instruction that is part of the name.
  
       v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int);
--- 61580,61622 ----
       v2df __builtin_ia32_roundsd (v2df, v2df, const int);
       v4sf __builtin_ia32_roundss (v4sf, v4sf, const int);
  
!  The following built-in functions are available when ‘-msse4.1’ is used.
  
   -- Built-in Function: v4sf __builtin_ia32_vec_set_v4sf (v4sf, float,
            const int)
!      Generates the ‘insertps’ machine instruction.
  
   -- Built-in Function: int __builtin_ia32_vec_ext_v16qi (v16qi, const
            int)
!      Generates the ‘pextrb’ machine instruction.
  
   -- Built-in Function: v16qi __builtin_ia32_vec_set_v16qi (v16qi, int,
            const int)
!      Generates the ‘pinsrb’ machine instruction.
  
   -- Built-in Function: v4si __builtin_ia32_vec_set_v4si (v4si, int,
            const int)
!      Generates the ‘pinsrd’ machine instruction.
  
   -- Built-in Function: v2di __builtin_ia32_vec_set_v2di (v2di, long
            long, const int)
!      Generates the ‘pinsrq’ machine instruction in 64bit mode.
  
   The following built-in functions are changed to generate new SSE4.1
! instructions when ‘-msse4.1’ is used.
  
   -- Built-in Function: float __builtin_ia32_vec_ext_v4sf (v4sf, const
            int)
!      Generates the ‘extractps’ machine instruction.
  
   -- Built-in Function: int __builtin_ia32_vec_ext_v4si (v4si, const int)
!      Generates the ‘pextrd’ machine instruction.
  
   -- Built-in Function: long long __builtin_ia32_vec_ext_v2di (v2di,
            const int)
!      Generates the ‘pextrq’ machine instruction in 64bit mode.
  
!  The following built-in functions are available when ‘-msse4.2’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int);
*************** All of them generate the machine instruc
*** 61624,61661 ****
       int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int);
       v2di __builtin_ia32_pcmpgtq (v2di, v2di);
  
!  The following built-in functions are available when '-msse4.2' is used.
  
   -- Built-in Function: unsigned int __builtin_ia32_crc32qi (unsigned
            int, unsigned char)
!      Generates the 'crc32b' machine instruction.
  
   -- Built-in Function: unsigned int __builtin_ia32_crc32hi (unsigned
            int, unsigned short)
!      Generates the 'crc32w' machine instruction.
  
   -- Built-in Function: unsigned int __builtin_ia32_crc32si (unsigned
            int, unsigned int)
!      Generates the 'crc32l' machine instruction.
  
   -- Built-in Function: unsigned long long __builtin_ia32_crc32di
            (unsigned long long, unsigned long long)
!      Generates the 'crc32q' machine instruction.
  
   The following built-in functions are changed to generate new SSE4.2
! instructions when '-msse4.2' is used.
  
   -- Built-in Function: int __builtin_popcount (unsigned int)
!      Generates the 'popcntl' machine instruction.
  
   -- Built-in Function: int __builtin_popcountl (unsigned long)
!      Generates the 'popcntl' or 'popcntq' machine instruction, depending
!      on the size of 'unsigned long'.
  
   -- Built-in Function: int __builtin_popcountll (unsigned long long)
!      Generates the 'popcntq' machine instruction.
  
!  The following built-in functions are available when '-mavx' is used.
  All of them generate the machine instruction that is part of the name.
  
       v4df __builtin_ia32_addpd256 (v4df,v4df);
--- 61635,61672 ----
       int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int);
       v2di __builtin_ia32_pcmpgtq (v2di, v2di);
  
!  The following built-in functions are available when ‘-msse4.2’ is used.
  
   -- Built-in Function: unsigned int __builtin_ia32_crc32qi (unsigned
            int, unsigned char)
!      Generates the ‘crc32b’ machine instruction.
  
   -- Built-in Function: unsigned int __builtin_ia32_crc32hi (unsigned
            int, unsigned short)
!      Generates the ‘crc32w’ machine instruction.
  
   -- Built-in Function: unsigned int __builtin_ia32_crc32si (unsigned
            int, unsigned int)
!      Generates the ‘crc32l’ machine instruction.
  
   -- Built-in Function: unsigned long long __builtin_ia32_crc32di
            (unsigned long long, unsigned long long)
!      Generates the ‘crc32q’ machine instruction.
  
   The following built-in functions are changed to generate new SSE4.2
! instructions when ‘-msse4.2’ is used.
  
   -- Built-in Function: int __builtin_popcount (unsigned int)
!      Generates the ‘popcntl’ machine instruction.
  
   -- Built-in Function: int __builtin_popcountl (unsigned long)
!      Generates the ‘popcntl’ or ‘popcntq’ machine instruction, depending
!      on the size of ‘unsigned long’.
  
   -- Built-in Function: int __builtin_popcountll (unsigned long long)
!      Generates the ‘popcntq’ machine instruction.
  
!  The following built-in functions are available when ‘-mavx’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v4df __builtin_ia32_addpd256 (v4df,v4df);
*************** All of them generate the machine instruc
*** 61787,61793 ****
       v4df __builtin_ia32_xorpd256 (v4df,v4df);
       v8sf __builtin_ia32_xorps256 (v8sf,v8sf);
  
!  The following built-in functions are available when '-mavx2' is used.
  All of them generate the machine instruction that is part of the name.
  
       v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int);
--- 61798,61804 ----
       v4df __builtin_ia32_xorpd256 (v4df,v4df);
       v8sf __builtin_ia32_xorps256 (v8sf,v8sf);
  
!  The following built-in functions are available when ‘-mavx2’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int);
*************** All of them generate the machine instruc
*** 61962,61968 ****
       v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int);
       v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int);
  
!  The following built-in functions are available when '-maes' is used.
  All of them generate the machine instruction that is part of the name.
  
       v2di __builtin_ia32_aesenc128 (v2di, v2di);
--- 61973,61979 ----
       v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int);
       v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int);
  
!  The following built-in functions are available when ‘-maes’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v2di __builtin_ia32_aesenc128 (v2di, v2di);
*************** All of them generate the machine instruc
*** 61972,61984 ****
       v2di __builtin_ia32_aeskeygenassist128 (v2di, const int);
       v2di __builtin_ia32_aesimc128 (v2di);
  
!  The following built-in function is available when '-mpclmul' is used.
  
   -- Built-in Function: v2di __builtin_ia32_pclmulqdq128 (v2di, v2di,
            const int)
!      Generates the 'pclmulqdq' machine instruction.
  
!  The following built-in function is available when '-mfsgsbase' is used.
  All of them generate the machine instruction that is part of the name.
  
       unsigned int __builtin_ia32_rdfsbase32 (void);
--- 61983,61995 ----
       v2di __builtin_ia32_aeskeygenassist128 (v2di, const int);
       v2di __builtin_ia32_aesimc128 (v2di);
  
!  The following built-in function is available when ‘-mpclmul’ is used.
  
   -- Built-in Function: v2di __builtin_ia32_pclmulqdq128 (v2di, v2di,
            const int)
!      Generates the ‘pclmulqdq’ machine instruction.
  
!  The following built-in function is available when ‘-mfsgsbase’ is used.
  All of them generate the machine instruction that is part of the name.
  
       unsigned int __builtin_ia32_rdfsbase32 (void);
*************** All of them generate the machine instruc
*** 61990,62009 ****
       void _writegsbase_u32 (unsigned int);
       void _writegsbase_u64 (unsigned long long);
  
!  The following built-in function is available when '-mrdrnd' is used.
  All of them generate the machine instruction that is part of the name.
  
       unsigned int __builtin_ia32_rdrand16_step (unsigned short *);
       unsigned int __builtin_ia32_rdrand32_step (unsigned int *);
       unsigned int __builtin_ia32_rdrand64_step (unsigned long long *);
  
!  The following built-in function is available when '-mptwrite' is used.
  All of them generate the machine instruction that is part of the name.
  
       void __builtin_ia32_ptwrite32 (unsigned);
       void __builtin_ia32_ptwrite64 (unsigned long long);
  
!  The following built-in functions are available when '-msse4a' is used.
  All of them generate the machine instruction that is part of the name.
  
       void __builtin_ia32_movntsd (double *, v2df);
--- 62001,62020 ----
       void _writegsbase_u32 (unsigned int);
       void _writegsbase_u64 (unsigned long long);
  
!  The following built-in function is available when ‘-mrdrnd’ is used.
  All of them generate the machine instruction that is part of the name.
  
       unsigned int __builtin_ia32_rdrand16_step (unsigned short *);
       unsigned int __builtin_ia32_rdrand32_step (unsigned int *);
       unsigned int __builtin_ia32_rdrand64_step (unsigned long long *);
  
!  The following built-in function is available when ‘-mptwrite’ is used.
  All of them generate the machine instruction that is part of the name.
  
       void __builtin_ia32_ptwrite32 (unsigned);
       void __builtin_ia32_ptwrite64 (unsigned long long);
  
!  The following built-in functions are available when ‘-msse4a’ is used.
  All of them generate the machine instruction that is part of the name.
  
       void __builtin_ia32_movntsd (double *, v2df);
*************** All of them generate the machine instruc
*** 62013,62019 ****
       v2di __builtin_ia32_insertq (v2di, v2di);
       v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int);
  
!  The following built-in functions are available when '-mxop' is used.
       v2df __builtin_ia32_vfrczpd (v2df);
       v4sf __builtin_ia32_vfrczps (v4sf);
       v2df __builtin_ia32_vfrczsd (v2df);
--- 62024,62030 ----
       v2di __builtin_ia32_insertq (v2di, v2di);
       v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int);
  
!  The following built-in functions are available when ‘-mxop’ is used.
       v2df __builtin_ia32_vfrczpd (v2df);
       v4sf __builtin_ia32_vfrczps (v4sf);
       v2df __builtin_ia32_vfrczsd (v2df);
*************** All of them generate the machine instruc
*** 62139,62145 ****
       v2di __builtin_ia32_vpshlq (v2di, v2di);
       v8hi __builtin_ia32_vpshlw (v8hi, v8hi);
  
!  The following built-in functions are available when '-mfma4' is used.
  All of them generate the machine instruction that is part of the name.
  
       v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df);
--- 62150,62156 ----
       v2di __builtin_ia32_vpshlq (v2di, v2di);
       v8hi __builtin_ia32_vpshlw (v8hi, v8hi);
  
!  The following built-in functions are available when ‘-mfma4’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df);
*************** All of them generate the machine instruc
*** 62176,62182 ****
       v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf);
  
  
!  The following built-in functions are available when '-mlwp' is used.
  
       void __builtin_ia32_llwpcb16 (void *);
       void __builtin_ia32_llwpcb32 (void *);
--- 62187,62193 ----
       v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf);
  
  
!  The following built-in functions are available when ‘-mlwp’ is used.
  
       void __builtin_ia32_llwpcb16 (void *);
       void __builtin_ia32_llwpcb32 (void *);
*************** All of them generate the machine instruc
*** 62191,62202 ****
       unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int);
       unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int);
  
!  The following built-in functions are available when '-mbmi' is used.
  All of them generate the machine instruction that is part of the name.
       unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
       unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
  
!  The following built-in functions are available when '-mbmi2' is used.
  All of them generate the machine instruction that is part of the name.
       unsigned int _bzhi_u32 (unsigned int, unsigned int);
       unsigned int _pdep_u32 (unsigned int, unsigned int);
--- 62202,62213 ----
       unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int);
       unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int);
  
!  The following built-in functions are available when ‘-mbmi’ is used.
  All of them generate the machine instruction that is part of the name.
       unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
       unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
  
!  The following built-in functions are available when ‘-mbmi2’ is used.
  All of them generate the machine instruction that is part of the name.
       unsigned int _bzhi_u32 (unsigned int, unsigned int);
       unsigned int _pdep_u32 (unsigned int, unsigned int);
*************** All of them generate the machine instruc
*** 62205,62237 ****
       unsigned long long _pdep_u64 (unsigned long long, unsigned long long);
       unsigned long long _pext_u64 (unsigned long long, unsigned long long);
  
!  The following built-in functions are available when '-mlzcnt' is used.
  All of them generate the machine instruction that is part of the name.
       unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
       unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
       unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
  
!  The following built-in functions are available when '-mfxsr' is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_ia32_fxsave (void *);
       void __builtin_ia32_fxrstor (void *);
       void __builtin_ia32_fxsave64 (void *);
       void __builtin_ia32_fxrstor64 (void *);
  
!  The following built-in functions are available when '-mxsave' is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_ia32_xsave (void *, long long);
       void __builtin_ia32_xrstor (void *, long long);
       void __builtin_ia32_xsave64 (void *, long long);
       void __builtin_ia32_xrstor64 (void *, long long);
  
!  The following built-in functions are available when '-mxsaveopt' is
  used.  All of them generate the machine instruction that is part of the
  name.
       void __builtin_ia32_xsaveopt (void *, long long);
       void __builtin_ia32_xsaveopt64 (void *, long long);
  
!  The following built-in functions are available when '-mtbm' is used.
  Both of them generate the immediate form of the bextr machine
  instruction.
       unsigned int __builtin_ia32_bextri_u32 (unsigned int,
--- 62216,62248 ----
       unsigned long long _pdep_u64 (unsigned long long, unsigned long long);
       unsigned long long _pext_u64 (unsigned long long, unsigned long long);
  
!  The following built-in functions are available when ‘-mlzcnt’ is used.
  All of them generate the machine instruction that is part of the name.
       unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
       unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
       unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
  
!  The following built-in functions are available when ‘-mfxsr’ is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_ia32_fxsave (void *);
       void __builtin_ia32_fxrstor (void *);
       void __builtin_ia32_fxsave64 (void *);
       void __builtin_ia32_fxrstor64 (void *);
  
!  The following built-in functions are available when ‘-mxsave’ is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_ia32_xsave (void *, long long);
       void __builtin_ia32_xrstor (void *, long long);
       void __builtin_ia32_xsave64 (void *, long long);
       void __builtin_ia32_xrstor64 (void *, long long);
  
!  The following built-in functions are available when ‘-mxsaveopt’ is
  used.  All of them generate the machine instruction that is part of the
  name.
       void __builtin_ia32_xsaveopt (void *, long long);
       void __builtin_ia32_xsaveopt64 (void *, long long);
  
!  The following built-in functions are available when ‘-mtbm’ is used.
  Both of them generate the immediate form of the bextr machine
  instruction.
       unsigned int __builtin_ia32_bextri_u32 (unsigned int,
*************** instruction.
*** 62239,62245 ****
       unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
                                                     const unsigned long long);
  
!  The following built-in functions are available when '-m3dnow' is used.
  All of them generate the machine instruction that is part of the name.
  
       void __builtin_ia32_femms (void);
--- 62250,62256 ----
       unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
                                                     const unsigned long long);
  
!  The following built-in functions are available when ‘-m3dnow’ is used.
  All of them generate the machine instruction that is part of the name.
  
       void __builtin_ia32_femms (void);
*************** All of them generate the machine instruc
*** 62262,62268 ****
       v2sf __builtin_ia32_pi2fd (v2si);
       v4hi __builtin_ia32_pmulhrw (v4hi, v4hi);
  
!  The following built-in functions are available when '-m3dnowa' is used.
  All of them generate the machine instruction that is part of the name.
  
       v2si __builtin_ia32_pf2iw (v2sf);
--- 62273,62279 ----
       v2sf __builtin_ia32_pi2fd (v2si);
       v4hi __builtin_ia32_pmulhrw (v4hi, v4hi);
  
!  The following built-in functions are available when ‘-m3dnowa’ is used.
  All of them generate the machine instruction that is part of the name.
  
       v2si __builtin_ia32_pf2iw (v2sf);
*************** All of them generate the machine instruc
*** 62272,62278 ****
       v2sf __builtin_ia32_pswapdsf (v2sf);
       v2si __builtin_ia32_pswapdsi (v2si);
  
!  The following built-in functions are available when '-mrtm' is used
  They are used for restricted transactional memory.  These are the
  internal low level functions.  Normally the functions in *note x86
  transactional memory intrinsics:: should be used instead.
--- 62283,62289 ----
       v2sf __builtin_ia32_pswapdsf (v2sf);
       v2si __builtin_ia32_pswapdsi (v2si);
  
!  The following built-in functions are available when ‘-mrtm’ is used
  They are used for restricted transactional memory.  These are the
  internal low level functions.  Normally the functions in *note x86
  transactional memory intrinsics:: should be used instead.
*************** transactional memory intrinsics:: should
*** 62282,62302 ****
       void __builtin_ia32_xabort (status);
       int __builtin_ia32_xtest ();
  
!  The following built-in functions are available when '-mmwaitx' is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_ia32_monitorx (void *, unsigned int, unsigned int);
       void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int);
  
!  The following built-in functions are available when '-mclzero' is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_i32_clzero (void *);
  
!  The following built-in functions are available when '-mpku' is used.
  They generate reads and writes to PKRU.
       void __builtin_ia32_wrpkru (unsigned int);
       unsigned int __builtin_ia32_rdpkru ();
  
!  The following built-in functions are available when '-mshstk' option is
  used.  They support shadow stack machine instructions from Intel
  Control-flow Enforcement Technology (CET). Each built-in function
  generates the machine instruction that is part of the function's name.
--- 62293,62313 ----
       void __builtin_ia32_xabort (status);
       int __builtin_ia32_xtest ();
  
!  The following built-in functions are available when ‘-mmwaitx’ is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_ia32_monitorx (void *, unsigned int, unsigned int);
       void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int);
  
!  The following built-in functions are available when ‘-mclzero’ is used.
  All of them generate the machine instruction that is part of the name.
       void __builtin_i32_clzero (void *);
  
!  The following built-in functions are available when ‘-mpku’ is used.
  They generate reads and writes to PKRU.
       void __builtin_ia32_wrpkru (unsigned int);
       unsigned int __builtin_ia32_rdpkru ();
  
!  The following built-in functions are available when ‘-mshstk’ option is
  used.  They support shadow stack machine instructions from Intel
  Control-flow Enforcement Technology (CET). Each built-in function
  generates the machine instruction that is part of the function's name.
*************** File: gcc.info,  Node: x86 transactional
*** 62324,62330 ****
  
  These hardware transactional memory intrinsics for x86 allow you to use
  memory transactions with RTM (Restricted Transactional Memory).  This
! support is enabled with the '-mrtm' option.  For using HLE (Hardware
  Lock Elision) see *note x86 specific memory model extensions for
  transactional memory:: instead.
  
--- 62335,62341 ----
  
  These hardware transactional memory intrinsics for x86 allow you to use
  memory transactions with RTM (Restricted Transactional Memory).  This
! support is enabled with the ‘-mrtm’ option.  For using HLE (Hardware
  Lock Elision) see *note x86 specific memory model extensions for
  transactional memory:: instead.
  
*************** and suitable fallback code always needs
*** 62337,62343 ****
  
   -- RTM Function: unsigned _xbegin ()
       Start a RTM (Restricted Transactional Memory) transaction.  Returns
!      '_XBEGIN_STARTED' when the transaction started successfully (note
       this is not 0, so the constant has to be explicitly tested).
  
       If the transaction aborts, all side effects are undone and an abort
--- 62348,62354 ----
  
   -- RTM Function: unsigned _xbegin ()
       Start a RTM (Restricted Transactional Memory) transaction.  Returns
!      ‘_XBEGIN_STARTED’ when the transaction started successfully (note
       this is not 0, so the constant has to be explicitly tested).
  
       If the transaction aborts, all side effects are undone and an abort
*************** and suitable fallback code always needs
*** 62345,62353 ****
       defined:
  
        -- Macro: _XABORT_EXPLICIT
!           Transaction was explicitly aborted with '_xabort'.  The
!           parameter passed to '_xabort' is available with
!           '_XABORT_CODE(status)'.
  
        -- Macro: _XABORT_RETRY
            Transaction retry is possible.
--- 62356,62364 ----
       defined:
  
        -- Macro: _XABORT_EXPLICIT
!           Transaction was explicitly aborted with ‘_xabort’.  The
!           parameter passed to ‘_xabort’ is available with
!           ‘_XABORT_CODE(status)’.
  
        -- Macro: _XABORT_RETRY
            Transaction retry is possible.
*************** and suitable fallback code always needs
*** 62381,62389 ****
   -- RTM Function: void _xabort (status)
       Abort the current transaction.  When no transaction is active this
       is a no-op.  The STATUS is an 8-bit constant; its value is encoded
!      in the return value from '_xbegin'.
  
!  Here is an example showing handling for '_XABORT_RETRY' and a fallback
  path for other failures:
  
       #include <immintrin.h>
--- 62392,62400 ----
   -- RTM Function: void _xabort (status)
       Abort the current transaction.  When no transaction is active this
       is a no-op.  The STATUS is an 8-bit constant; its value is encoded
!      in the return value from ‘_xbegin’.
  
!  Here is an example showing handling for ‘_XABORT_RETRY’ and a fallback
  path for other failures:
  
       #include <immintrin.h>
*************** File: gcc.info,  Node: x86 control-flow
*** 62419,62427 ****
  
   -- CET Function: ret_type _get_ssp (void)
       Get the current value of shadow stack pointer if shadow stack
!      support from Intel CET is enabled in the hardware or '0' otherwise.
!      The 'ret_type' is 'unsigned long long' for 64-bit targets and
!      'unsigned int' for 32-bit targets.
  
   -- CET Function: void _inc_ssp (unsigned int)
       Increment the current shadow stack pointer by the size specified by
--- 62430,62438 ----
  
   -- CET Function: ret_type _get_ssp (void)
       Get the current value of shadow stack pointer if shadow stack
!      support from Intel CET is enabled in the hardware or ‘0’ otherwise.
!      The ‘ret_type’ is ‘unsigned long long’ for 64-bit targets and
!      ‘unsigned int’ for 32-bit targets.
  
   -- CET Function: void _inc_ssp (unsigned int)
       Increment the current shadow stack pointer by the size specified by
*************** File: gcc.info,  Node: Solaris Format Ch
*** 62476,62485 ****
  6.63.1 Solaris Format Checks
  ----------------------------
  
! Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
! 'cmn_err' accepts a subset of the standard 'printf' conversions, and the
! two-argument '%b' conversion for displaying bit-fields.  See the Solaris
! man page for 'cmn_err' for more information.
  
  
  File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
--- 62487,62496 ----
  6.63.1 Solaris Format Checks
  ----------------------------
  
! Solaris targets support the ‘cmn_err’ (or ‘__cmn_err__’) format check.
! ‘cmn_err’ accepts a subset of the standard ‘printf’ conversions, and the
! two-argument ‘%b’ conversion for displaying bit-fields.  See the Solaris
! man page for ‘cmn_err’ for more information.
  
  
  File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
*************** File: gcc.info,  Node: Darwin Format Che
*** 62488,62505 ****
  ---------------------------
  
  In addition to the full set of format archetypes (attribute format style
! arguments such as 'printf', 'scanf', 'strftime', and 'strfmon'), Darwin
! targets also support the 'CFString' (or '__CFString__') archetype in the
! 'format' attribute.  Declarations with this archetype are parsed for
  correct syntax and argument types.  However, parsing of the format
  string itself and validating arguments against it in calls to such
  functions is currently not performed.
  
!  Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
  may also be used as format arguments.  Note that the relevant headers
  are only likely to be available on Darwin (OSX) installations.  On such
  installations, the XCode and system documentation provide descriptions
! of 'CFString', 'CFStringRefs' and associated functions.
  
  
  File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
--- 62499,62516 ----
  ---------------------------
  
  In addition to the full set of format archetypes (attribute format style
! arguments such as ‘printf’, ‘scanf’, ‘strftime’, and ‘strfmon’), Darwin
! targets also support the ‘CFString’ (or ‘__CFString__’) archetype in the
! ‘format’ attribute.  Declarations with this archetype are parsed for
  correct syntax and argument types.  However, parsing of the format
  string itself and validating arguments against it in calls to such
  functions is currently not performed.
  
!  Additionally, ‘CFStringRefs’ (defined by the ‘CoreFoundation’ headers)
  may also be used as format arguments.  Note that the relevant headers
  are only likely to be available on Darwin (OSX) installations.  On such
  installations, the XCode and system documentation provide descriptions
! of ‘CFString’, ‘CFStringRefs’ and associated functions.
  
  
  File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
*************** The pragmas defined by the AArch64 targe
*** 62545,62553 ****
  target function attributes.  They can be specified as below:
       #pragma GCC target("string")
  
!  where 'STRING' can be any string accepted as an AArch64 target
  attribute.  *Note AArch64 Function Attributes::, for more details on the
! permissible values of 'string'.
  
  
  File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
--- 62556,62564 ----
  target function attributes.  They can be specified as below:
       #pragma GCC target("string")
  
!  where ‘STRING’ can be any string accepted as an AArch64 target
  attribute.  *Note AArch64 Function Attributes::, for more details on the
! permissible values of ‘string’.
  
  
  File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
*************** File: gcc.info,  Node: ARM Pragmas,  Nex
*** 62556,62572 ****
  ------------------
  
  The ARM target defines pragmas for controlling the default addition of
! 'long_call' and 'short_call' attributes to functions.  *Note Function
  Attributes::, for information about the effects of these attributes.
  
! 'long_calls'
!      Set all subsequent functions to have the 'long_call' attribute.
  
! 'no_long_calls'
!      Set all subsequent functions to have the 'short_call' attribute.
  
! 'long_calls_off'
!      Do not affect the 'long_call' or 'short_call' attributes of
       subsequent functions.
  
  
--- 62567,62583 ----
  ------------------
  
  The ARM target defines pragmas for controlling the default addition of
! ‘long_call’ and ‘short_call’ attributes to functions.  *Note Function
  Attributes::, for information about the effects of these attributes.
  
! ‘long_calls’
!      Set all subsequent functions to have the ‘long_call’ attribute.
  
! ‘no_long_calls’
!      Set all subsequent functions to have the ‘short_call’ attribute.
  
! ‘long_calls_off’
!      Do not affect the ‘long_call’ or ‘short_call’ attributes of
       subsequent functions.
  
  
*************** File: gcc.info,  Node: M32C Pragmas,  Ne
*** 62575,62595 ****
  6.64.3 M32C Pragmas
  -------------------
  
! 'GCC memregs NUMBER'
!      Overrides the command-line option '-memregs=' for the current file.
       Use with care!  This pragma must be before any function in the
       file, and mixing different memregs values in different objects may
       make them incompatible.  This pragma is useful when a
       performance-critical function uses a memreg for temporary values,
       as it may allow you to reduce the number of memregs used.
  
! 'ADDRESS NAME ADDRESS'
       For any declared symbols matching NAME, this does three things to
       that symbol: it forces the symbol to be located at the given
       address (a number), it forces the symbol to be volatile, and it
       changes the symbol's scope to be static.  This pragma exists for
       compatibility with other compilers, but note that the common
!      '1234H' numeric syntax is not supported (use '0x1234' instead).
       Example:
  
            #pragma ADDRESS port3 0x103
--- 62586,62606 ----
  6.64.3 M32C Pragmas
  -------------------
  
! ‘GCC memregs NUMBER’
!      Overrides the command-line option ‘-memregs=’ for the current file.
       Use with care!  This pragma must be before any function in the
       file, and mixing different memregs values in different objects may
       make them incompatible.  This pragma is useful when a
       performance-critical function uses a memreg for temporary values,
       as it may allow you to reduce the number of memregs used.
  
! ‘ADDRESS NAME ADDRESS’
       For any declared symbols matching NAME, this does three things to
       that symbol: it forces the symbol to be located at the given
       address (a number), it forces the symbol to be volatile, and it
       changes the symbol's scope to be static.  This pragma exists for
       compatibility with other compilers, but note that the common
!      ‘1234H’ numeric syntax is not supported (use ‘0x1234’ instead).
       Example:
  
            #pragma ADDRESS port3 0x103
*************** File: gcc.info,  Node: PRU Pragmas,  Nex
*** 62601,62607 ****
  6.64.4 PRU Pragmas
  ------------------
  
! 'ctable_entry INDEX CONSTANT_ADDRESS'
       Specifies that the PRU CTABLE entry given by INDEX has the value
       CONSTANT_ADDRESS.  This enables GCC to emit LBCO/SBCO instructions
       when the load/store address is known and can be addressed with some
--- 62612,62618 ----
  6.64.4 PRU Pragmas
  ------------------
  
! ‘ctable_entry INDEX CONSTANT_ADDRESS’
       Specifies that the PRU CTABLE entry given by INDEX has the value
       CONSTANT_ADDRESS.  This enables GCC to emit LBCO/SBCO instructions
       when the load/store address is known and can be addressed with some
*************** File: gcc.info,  Node: RS/6000 and Power
*** 62618,62635 ****
  ----------------------------------
  
  The RS/6000 and PowerPC targets define one pragma for controlling
! whether or not the 'longcall' attribute is added to function
! declarations by default.  This pragma overrides the '-mlongcall' option,
! but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
  PowerPC Options::, for more information about when long calls are and
  are not necessary.
  
! 'longcall (1)'
!      Apply the 'longcall' attribute to all subsequent function
       declarations.
  
! 'longcall (0)'
!      Do not apply the 'longcall' attribute to subsequent function
       declarations.
  
  
--- 62629,62646 ----
  ----------------------------------
  
  The RS/6000 and PowerPC targets define one pragma for controlling
! whether or not the ‘longcall’ attribute is added to function
! declarations by default.  This pragma overrides the ‘-mlongcall’ option,
! but not the ‘longcall’ and ‘shortcall’ attributes.  *Note RS/6000 and
  PowerPC Options::, for more information about when long calls are and
  are not necessary.
  
! ‘longcall (1)’
!      Apply the ‘longcall’ attribute to all subsequent function
       declarations.
  
! ‘longcall (0)’
!      Do not apply the ‘longcall’ attribute to subsequent function
       declarations.
  
  
*************** File: gcc.info,  Node: S/390 Pragmas,  N
*** 62641,62651 ****
  The pragmas defined by the S/390 target correspond to the S/390 target
  function attributes and some the additional options:
  
! 'zvector'
! 'no-zvector'
  
   Note that options of the pragma, unlike options of the target
! attribute, do change the value of preprocessor macros like '__VEC__'.
  They can be specified as below:
  
       #pragma GCC target("string[,string]...")
--- 62652,62662 ----
  The pragmas defined by the S/390 target correspond to the S/390 target
  function attributes and some the additional options:
  
! ‘zvector’
! ‘no-zvector’
  
   Note that options of the pragma, unlike options of the target
! attribute, do change the value of preprocessor macros like ‘__VEC__’.
  They can be specified as below:
  
       #pragma GCC target("string[,string]...")
*************** The following pragmas are available for
*** 62661,62683 ****
  Darwin operating system.  These are useful for compatibility with other
  macOS compilers.
  
! 'mark TOKENS...'
       This pragma is accepted, but has no effect.
  
! 'options align=ALIGNMENT'
       This pragma sets the alignment of fields in structures.  The values
!      of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
!      'power', to emulate PowerPC alignment.  Uses of this pragma nest
!      properly; to restore the previous setting, use 'reset' for the
       ALIGNMENT.
  
! 'segment TOKENS...'
       This pragma is accepted, but has no effect.
  
! 'unused (VAR [, VAR]...)'
       This pragma declares variables to be possibly unused.  GCC does not
       produce warnings for the listed variables.  The effect is similar
!      to that of the 'unused' attribute, except that this pragma may
       appear anywhere within the variables' scopes.
  
  
--- 62672,62694 ----
  Darwin operating system.  These are useful for compatibility with other
  macOS compilers.
  
! ‘mark TOKENS...’
       This pragma is accepted, but has no effect.
  
! ‘options align=ALIGNMENT’
       This pragma sets the alignment of fields in structures.  The values
!      of ALIGNMENT may be ‘mac68k’, to emulate m68k alignment, or
!      ‘power’, to emulate PowerPC alignment.  Uses of this pragma nest
!      properly; to restore the previous setting, use ‘reset’ for the
       ALIGNMENT.
  
! ‘segment TOKENS...’
       This pragma is accepted, but has no effect.
  
! ‘unused (VAR [, VAR]...)’
       This pragma declares variables to be possibly unused.  GCC does not
       produce warnings for the listed variables.  The effect is similar
!      to that of the ‘unused’ attribute, except that this pragma may
       appear anywhere within the variables' scopes.
  
  
*************** File: gcc.info,  Node: Solaris Pragmas,
*** 62686,62715 ****
  6.64.8 Solaris Pragmas
  ----------------------
  
! The Solaris target supports '#pragma redefine_extname' (*note
! Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
  directives for compatibility with the system compiler.
  
! 'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
  
       Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
!      is the same as GCC's 'aligned' attribute *note Variable
       Attributes::).  Macro expansion occurs on the arguments to this
       pragma when compiling C and Objective-C.  It does not currently
       occur when compiling C++, but this is a bug which may be fixed in a
       future release.
  
! 'fini (FUNCTION [, FUNCTION]...)'
  
       This pragma causes each listed FUNCTION to be called after main, or
!      during shared module unloading, by adding a call to the '.fini'
       section.
  
! 'init (FUNCTION [, FUNCTION]...)'
  
       This pragma causes each listed FUNCTION to be called during
!      initialization (before 'main') or during shared module loading, by
!      adding a call to the '.init' section.
  
  
  File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
--- 62697,62726 ----
  6.64.8 Solaris Pragmas
  ----------------------
  
! The Solaris target supports ‘#pragma redefine_extname’ (*note
! Symbol-Renaming Pragmas::).  It also supports additional ‘#pragma’
  directives for compatibility with the system compiler.
  
! ‘align ALIGNMENT (VARIABLE [, VARIABLE]...)’
  
       Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
!      is the same as GCC's ‘aligned’ attribute *note Variable
       Attributes::).  Macro expansion occurs on the arguments to this
       pragma when compiling C and Objective-C.  It does not currently
       occur when compiling C++, but this is a bug which may be fixed in a
       future release.
  
! ‘fini (FUNCTION [, FUNCTION]...)’
  
       This pragma causes each listed FUNCTION to be called after main, or
!      during shared module unloading, by adding a call to the ‘.fini’
       section.
  
! ‘init (FUNCTION [, FUNCTION]...)’
  
       This pragma causes each listed FUNCTION to be called during
!      initialization (before ‘main’) or during shared module loading, by
!      adding a call to the ‘.init’ section.
  
  
  File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
*************** File: gcc.info,  Node: Symbol-Renaming P
*** 62717,62742 ****
  6.64.9 Symbol-Renaming Pragmas
  ------------------------------
  
! GCC supports a '#pragma' directive that changes the name used in
  assembly for a given declaration.  While this pragma is supported on all
  platforms, it is intended primarily to provide compatibility with the
  Solaris system headers.  This effect can also be achieved using the asm
  labels extension (*note Asm Labels::).
  
! 'redefine_extname OLDNAME NEWNAME'
  
       This pragma gives the C function OLDNAME the assembly symbol
!      NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
       defined if this pragma is available (currently on all platforms).
  
!  This pragma and the 'asm' labels extension interact in a complicated
  manner.  Here are some corner cases you may want to be aware of:
  
    1. This pragma silently applies only to declarations with external
!      linkage.  The 'asm' label feature does not have this restriction.
  
    2. In C++, this pragma silently applies only to declarations with "C"
!      linkage.  Again, 'asm' labels do not have this restriction.
  
    3. If either of the ways of changing the assembly name of a
       declaration are applied to a declaration whose assembly name has
--- 62728,62753 ----
  6.64.9 Symbol-Renaming Pragmas
  ------------------------------
  
! GCC supports a ‘#pragma’ directive that changes the name used in
  assembly for a given declaration.  While this pragma is supported on all
  platforms, it is intended primarily to provide compatibility with the
  Solaris system headers.  This effect can also be achieved using the asm
  labels extension (*note Asm Labels::).
  
! ‘redefine_extname OLDNAME NEWNAME’
  
       This pragma gives the C function OLDNAME the assembly symbol
!      NEWNAME.  The preprocessor macro ‘__PRAGMA_REDEFINE_EXTNAME’ is
       defined if this pragma is available (currently on all platforms).
  
!  This pragma and the ‘asm’ labels extension interact in a complicated
  manner.  Here are some corner cases you may want to be aware of:
  
    1. This pragma silently applies only to declarations with external
!      linkage.  The ‘asm’ label feature does not have this restriction.
  
    2. In C++, this pragma silently applies only to declarations with "C"
!      linkage.  Again, ‘asm’ labels do not have this restriction.
  
    3. If either of the ways of changing the assembly name of a
       declaration are applied to a declaration whose assembly name has
*************** manner.  Here are some corner cases you
*** 62745,62751 ****
       to generate code), and the new name is different, a warning issues
       and the name does not change.
  
!   4. The OLDNAME used by '#pragma redefine_extname' is always the
       C-language name.
  
  
--- 62756,62762 ----
       to generate code), and the new name is different, a warning issues
       and the name does not change.
  
!   4. The OLDNAME used by ‘#pragma redefine_extname’ is always the
       C-language name.
  
  
*************** File: gcc.info,  Node: Structure-Layout
*** 62755,62797 ****
  --------------------------------
  
  For compatibility with Microsoft Windows compilers, GCC supports a set
! of '#pragma' directives that change the maximum alignment of members of
  structures (other than zero-width bit-fields), unions, and classes
  subsequently defined.  The N value below always is required to be a
  small power of two and specifies the new alignment in bytes.
  
!   1. '#pragma pack(N)' simply sets the new alignment.
!   2. '#pragma pack()' sets the alignment to the one that was in effect
       when compilation started (see also command-line option
!      '-fpack-struct[=N]' *note Code Gen Options::).
!   3. '#pragma pack(push[,N])' pushes the current alignment setting on an
       internal stack and then optionally sets the new alignment.
!   4. '#pragma pack(pop)' restores the alignment setting to the one saved
       at the top of the internal stack (and removes that stack entry).
!      Note that '#pragma pack([N])' does not influence this internal
!      stack; thus it is possible to have '#pragma pack(push)' followed by
!      multiple '#pragma pack(N)' instances and finalized by a single
!      '#pragma pack(pop)'.
  
!  Some targets, e.g. x86 and PowerPC, support the '#pragma ms_struct'
  directive which lays out structures and unions subsequently defined as
! the documented '__attribute__ ((ms_struct))'.
  
!   1. '#pragma ms_struct on' turns on the Microsoft layout.
!   2. '#pragma ms_struct off' turns off the Microsoft layout.
!   3. '#pragma ms_struct reset' goes back to the default layout.
  
!  Most targets also support the '#pragma scalar_storage_order' directive
  which lays out structures and unions subsequently defined as the
! documented '__attribute__ ((scalar_storage_order))'.
  
!   1. '#pragma scalar_storage_order big-endian' sets the storage order of
       the scalar fields to big-endian.
!   2. '#pragma scalar_storage_order little-endian' sets the storage order
       of the scalar fields to little-endian.
!   3. '#pragma scalar_storage_order default' goes back to the endianness
       that was in effect when compilation started (see also command-line
!      option '-fsso-struct=ENDIANNESS' *note C Dialect Options::).
  
  
  File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
--- 62766,62808 ----
  --------------------------------
  
  For compatibility with Microsoft Windows compilers, GCC supports a set
! of ‘#pragma’ directives that change the maximum alignment of members of
  structures (other than zero-width bit-fields), unions, and classes
  subsequently defined.  The N value below always is required to be a
  small power of two and specifies the new alignment in bytes.
  
!   1. ‘#pragma pack(N)’ simply sets the new alignment.
!   2. ‘#pragma pack()’ sets the alignment to the one that was in effect
       when compilation started (see also command-line option
!      ‘-fpack-struct[=N]’ *note Code Gen Options::).
!   3. ‘#pragma pack(push[,N])’ pushes the current alignment setting on an
       internal stack and then optionally sets the new alignment.
!   4. ‘#pragma pack(pop)’ restores the alignment setting to the one saved
       at the top of the internal stack (and removes that stack entry).
!      Note that ‘#pragma pack([N])’ does not influence this internal
!      stack; thus it is possible to have ‘#pragma pack(push)’ followed by
!      multiple ‘#pragma pack(N)’ instances and finalized by a single
!      ‘#pragma pack(pop)’.
  
!  Some targets, e.g. x86 and PowerPC, support the ‘#pragma ms_struct’
  directive which lays out structures and unions subsequently defined as
! the documented ‘__attribute__ ((ms_struct))’.
  
!   1. ‘#pragma ms_struct on’ turns on the Microsoft layout.
!   2. ‘#pragma ms_struct off’ turns off the Microsoft layout.
!   3. ‘#pragma ms_struct reset’ goes back to the default layout.
  
!  Most targets also support the ‘#pragma scalar_storage_order’ directive
  which lays out structures and unions subsequently defined as the
! documented ‘__attribute__ ((scalar_storage_order))’.
  
!   1. ‘#pragma scalar_storage_order big-endian’ sets the storage order of
       the scalar fields to big-endian.
!   2. ‘#pragma scalar_storage_order little-endian’ sets the storage order
       of the scalar fields to little-endian.
!   3. ‘#pragma scalar_storage_order default’ goes back to the endianness
       that was in effect when compilation started (see also command-line
!      option ‘-fsso-struct=ENDIANNESS’ *note C Dialect Options::).
  
  
  File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
*************** File: gcc.info,  Node: Weak Pragmas,  Ne
*** 62799,62814 ****
  6.64.11 Weak Pragmas
  --------------------
  
! For compatibility with SVR4, GCC supports a set of '#pragma' directives
  for declaring symbols to be weak, and defining weak aliases.
  
! '#pragma weak SYMBOL'
       This pragma declares SYMBOL to be weak, as if the declaration had
       the attribute of the same name.  The pragma may appear before or
       after the declaration of SYMBOL.  It is not an error for SYMBOL to
       never be defined at all.
  
! '#pragma weak SYMBOL1 = SYMBOL2'
       This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
       an error if SYMBOL2 is not defined in the current translation unit.
  
--- 62810,62825 ----
  6.64.11 Weak Pragmas
  --------------------
  
! For compatibility with SVR4, GCC supports a set of ‘#pragma’ directives
  for declaring symbols to be weak, and defining weak aliases.
  
! ‘#pragma weak SYMBOL’
       This pragma declares SYMBOL to be weak, as if the declaration had
       the attribute of the same name.  The pragma may appear before or
       after the declaration of SYMBOL.  It is not an error for SYMBOL to
       never be defined at all.
  
! ‘#pragma weak SYMBOL1 = SYMBOL2’
       This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
       an error if SYMBOL2 is not defined in the current translation unit.
  
*************** File: gcc.info,  Node: Diagnostic Pragma
*** 62820,62841 ****
  
  GCC allows the user to selectively enable or disable certain types of
  diagnostics, and change the kind of the diagnostic.  For example, a
! project's policy might require that all sources compile with '-Werror'
  but certain files might have exceptions allowing specific types of
  warnings.  Or, a project might selectively enable diagnostics and treat
  them as errors depending on which preprocessor macros are defined.
  
! '#pragma GCC diagnostic KIND OPTION'
  
       Modifies the disposition of a diagnostic.  Note that not all
       diagnostics are modifiable; at the moment only warnings (normally
!      controlled by '-W...') can be controlled, and not all of them.  Use
!      '-fdiagnostics-show-option' to determine which diagnostics are
       controllable and which option controls them.
  
!      KIND is 'error' to treat this diagnostic as an error, 'warning' to
!      treat it like a warning (even if '-Werror' is in effect), or
!      'ignored' if the diagnostic is to be ignored.  OPTION is a double
       quoted string that matches the command-line option.
  
            #pragma GCC diagnostic warning "-Wformat"
--- 62831,62852 ----
  
  GCC allows the user to selectively enable or disable certain types of
  diagnostics, and change the kind of the diagnostic.  For example, a
! project's policy might require that all sources compile with ‘-Werror’
  but certain files might have exceptions allowing specific types of
  warnings.  Or, a project might selectively enable diagnostics and treat
  them as errors depending on which preprocessor macros are defined.
  
! ‘#pragma GCC diagnostic KIND OPTION’
  
       Modifies the disposition of a diagnostic.  Note that not all
       diagnostics are modifiable; at the moment only warnings (normally
!      controlled by ‘-W...’) can be controlled, and not all of them.  Use
!      ‘-fdiagnostics-show-option’ to determine which diagnostics are
       controllable and which option controls them.
  
!      KIND is ‘error’ to treat this diagnostic as an error, ‘warning’ to
!      treat it like a warning (even if ‘-Werror’ is in effect), or
!      ‘ignored’ if the diagnostic is to be ignored.  OPTION is a double
       quoted string that matches the command-line option.
  
            #pragma GCC diagnostic warning "-Wformat"
*************** them as errors depending on which prepro
*** 62848,62859 ****
       pragmas occurring after a line do not affect diagnostics caused by
       that line.
  
! '#pragma GCC diagnostic push'
! '#pragma GCC diagnostic pop'
  
       Causes GCC to remember the state of the diagnostics as of each
!      'push', and restore to that point at each 'pop'.  If a 'pop' has no
!      matching 'push', the command-line options are restored.
  
            #pragma GCC diagnostic error "-Wuninitialized"
              foo(a);                       /* error is given for this one */
--- 62859,62870 ----
       pragmas occurring after a line do not affect diagnostics caused by
       that line.
  
! ‘#pragma GCC diagnostic push’
! ‘#pragma GCC diagnostic pop’
  
       Causes GCC to remember the state of the diagnostics as of each
!      ‘push’, and restore to that point at each ‘pop’.  If a ‘pop’ has no
!      matching ‘push’, the command-line options are restored.
  
            #pragma GCC diagnostic error "-Wuninitialized"
              foo(a);                       /* error is given for this one */
*************** them as errors depending on which prepro
*** 62865,62880 ****
            #pragma GCC diagnostic pop
              foo(d);                       /* depends on command-line options */
  
! '#pragma GCC diagnostic ignored_attributes'
  
!      Similarly to '-Wno-attributes=', this pragma allows users to
       suppress warnings about unknown scoped attributes (in C++11 and
!      C23).  For example, '#pragma GCC diagnostic ignored_attributes
!      "vendor::attr"' disables warning about the following declaration:
  
            [[vendor::attr]] void f();
  
!      whereas '#pragma GCC diagnostic ignored_attributes "vendor::"'
       prevents warning about both of these declarations:
  
            [[vendor::safe]] void f();
--- 62876,62891 ----
            #pragma GCC diagnostic pop
              foo(d);                       /* depends on command-line options */
  
! ‘#pragma GCC diagnostic ignored_attributes’
  
!      Similarly to ‘-Wno-attributes=’, this pragma allows users to
       suppress warnings about unknown scoped attributes (in C++11 and
!      C23).  For example, ‘#pragma GCC diagnostic ignored_attributes
!      "vendor::attr"’ disables warning about the following declaration:
  
            [[vendor::attr]] void f();
  
!      whereas ‘#pragma GCC diagnostic ignored_attributes "vendor::"’
       prevents warning about both of these declarations:
  
            [[vendor::safe]] void f();
*************** them as errors depending on which prepro
*** 62883,62893 ****
   GCC also offers a simple mechanism for printing messages during
  compilation.
  
! '#pragma message STRING'
  
       Prints STRING as a compiler message on compilation.  The message is
       informational only, and is neither a compilation warning nor an
!      error.  Newlines can be included in the string by using the '\n'
       escape sequence.
  
            #pragma message "Compiling " __FILE__ "..."
--- 62894,62904 ----
   GCC also offers a simple mechanism for printing messages during
  compilation.
  
! ‘#pragma message STRING’
  
       Prints STRING as a compiler message on compilation.  The message is
       informational only, and is neither a compilation warning nor an
!      error.  Newlines can be included in the string by using the ‘\n’
       escape sequence.
  
            #pragma message "Compiling " __FILE__ "..."
*************** compilation.
*** 62900,62916 ****
  
            TODO(Remember to fix this)
  
!      prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
!      fix this'.
  
! '#pragma GCC error MESSAGE'
       Generates an error message.  This pragma _is_ considered to
       indicate an error in the compilation, and it will be treated as
       such.
  
!      Newlines can be included in the string by using the '\n' escape
       sequence.  They will be displayed as newlines even if the
!      '-fmessage-length' option is set to zero.
  
       The error is only generated if the pragma is present in the code
       after pre-processing has been completed.  It does not matter
--- 62911,62927 ----
  
            TODO(Remember to fix this)
  
!      prints ‘/tmp/file.c:4: note: #pragma message: TODO - Remember to
!      fix this’.
  
! ‘#pragma GCC error MESSAGE’
       Generates an error message.  This pragma _is_ considered to
       indicate an error in the compilation, and it will be treated as
       such.
  
!      Newlines can be included in the string by using the ‘\n’ escape
       sequence.  They will be displayed as newlines even if the
!      ‘-fmessage-length’ option is set to zero.
  
       The error is only generated if the pragma is present in the code
       after pre-processing has been completed.  It does not matter
*************** compilation.
*** 62925,62933 ****
            #pragma GCC error "this error is seen"
            }
  
! '#pragma GCC warning MESSAGE'
!      This is just like 'pragma GCC error' except that a warning message
!      is issued instead of an error message.  Unless '-Werror' is in
       effect, in which case this pragma will generate an error as well.
  
  
--- 62936,62944 ----
            #pragma GCC error "this error is seen"
            }
  
! ‘#pragma GCC warning MESSAGE’
!      This is just like ‘pragma GCC error’ except that a warning message
!      is issued instead of an error message.  Unless ‘-Werror’ is in
       effect, in which case this pragma will generate an error as well.
  
  
*************** File: gcc.info,  Node: Visibility Pragma
*** 62936,62949 ****
  6.64.13 Visibility Pragmas
  --------------------------
  
! '#pragma GCC visibility push(VISIBILITY)'
! '#pragma GCC visibility pop'
  
       This pragma allows the user to set the visibility for multiple
       declarations without having to give each a visibility attribute
       (*note Function Attributes::).
  
!      In C++, '#pragma GCC visibility' affects only namespace-scope
       declarations.  Class members and template specializations are not
       affected; if you want to override the visibility for a particular
       member or instantiation, you must use an attribute.
--- 62947,62960 ----
  6.64.13 Visibility Pragmas
  --------------------------
  
! ‘#pragma GCC visibility push(VISIBILITY)’
! ‘#pragma GCC visibility pop’
  
       This pragma allows the user to set the visibility for multiple
       declarations without having to give each a visibility attribute
       (*note Function Attributes::).
  
!      In C++, ‘#pragma GCC visibility’ affects only namespace-scope
       declarations.  Class members and template specializations are not
       affected; if you want to override the visibility for a particular
       member or instantiation, you must use an attribute.
*************** File: gcc.info,  Node: Push/Pop Macro Pr
*** 62955,62968 ****
  ------------------------------
  
  For compatibility with Microsoft Windows compilers, GCC supports
! '#pragma push_macro("MACRO_NAME")' and '#pragma
! pop_macro("MACRO_NAME")'.
  
! '#pragma push_macro("MACRO_NAME")'
       This pragma saves the value of the macro named as MACRO_NAME to the
       top of the stack for this macro.
  
! '#pragma pop_macro("MACRO_NAME")'
       This pragma sets the value of the macro named as MACRO_NAME to the
       value on top of the stack for this macro.  If the stack for
       MACRO_NAME is empty, the value of the macro remains unchanged.
--- 62966,62979 ----
  ------------------------------
  
  For compatibility with Microsoft Windows compilers, GCC supports
! ‘#pragma push_macro("MACRO_NAME")’ and ‘#pragma
! pop_macro("MACRO_NAME")’.
  
! ‘#pragma push_macro("MACRO_NAME")’
       This pragma saves the value of the macro named as MACRO_NAME to the
       top of the stack for this macro.
  
! ‘#pragma pop_macro("MACRO_NAME")’
       This pragma sets the value of the macro named as MACRO_NAME to the
       value on top of the stack for this macro.  If the stack for
       MACRO_NAME is empty, the value of the macro remains unchanged.
*************** pop_macro("MACRO_NAME")'.
*** 62976,62983 ****
       #pragma pop_macro("X")
       int x [X];
  
! In this example, the definition of X as 1 is saved by '#pragma
! push_macro' and restored by '#pragma pop_macro'.
  
  
  File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
--- 62987,62994 ----
       #pragma pop_macro("X")
       int x [X];
  
! In this example, the definition of X as 1 is saved by ‘#pragma
! push_macro’ and restored by ‘#pragma pop_macro’.
  
  
  File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
*************** File: gcc.info,  Node: Function Specific
*** 62985,63028 ****
  6.64.15 Function Specific Option Pragmas
  ----------------------------------------
  
! '#pragma GCC target (STRING, ...)'
  
       This pragma allows you to set target-specific options for functions
       defined later in the source file.  One or more strings can be
       specified.  Each function that is defined after this point is
!      treated as if it had been declared with one 'target('STRING')'
       attribute for each STRING argument.  The parentheses around the
       strings in the pragma are optional.  *Note Function Attributes::,
!      for more information about the 'target' attribute and the attribute
       syntax.
  
!      The '#pragma GCC target' pragma is presently implemented for x86,
       ARM, AArch64, PowerPC, S/390, and Nios II targets only.
  
! '#pragma GCC optimize (STRING, ...)'
  
       This pragma allows you to set global optimization options for
       functions defined later in the source file.  One or more strings
       can be specified.  Each function that is defined after this point
!      is treated as if it had been declared with one 'optimize('STRING')'
       attribute for each STRING argument.  The parentheses around the
       strings in the pragma are optional.  *Note Function Attributes::,
!      for more information about the 'optimize' attribute and the
       attribute syntax.
  
! '#pragma GCC push_options'
! '#pragma GCC pop_options'
  
       These pragmas maintain a stack of the current target and
       optimization options.  It is intended for include files where you
!      temporarily want to switch to using a different '#pragma GCC
!      target' or '#pragma GCC optimize' and then to pop back to the
       previous options.
  
! '#pragma GCC reset_options'
  
!      This pragma clears the current '#pragma GCC target' and '#pragma
!      GCC optimize' to use the default switches as specified on the
       command line.
  
  
--- 62996,63039 ----
  6.64.15 Function Specific Option Pragmas
  ----------------------------------------
  
! ‘#pragma GCC target (STRING, ...)’
  
       This pragma allows you to set target-specific options for functions
       defined later in the source file.  One or more strings can be
       specified.  Each function that is defined after this point is
!      treated as if it had been declared with one ‘target(’STRING‘)’
       attribute for each STRING argument.  The parentheses around the
       strings in the pragma are optional.  *Note Function Attributes::,
!      for more information about the ‘target’ attribute and the attribute
       syntax.
  
!      The ‘#pragma GCC target’ pragma is presently implemented for x86,
       ARM, AArch64, PowerPC, S/390, and Nios II targets only.
  
! ‘#pragma GCC optimize (STRING, ...)’
  
       This pragma allows you to set global optimization options for
       functions defined later in the source file.  One or more strings
       can be specified.  Each function that is defined after this point
!      is treated as if it had been declared with one ‘optimize(’STRING‘)’
       attribute for each STRING argument.  The parentheses around the
       strings in the pragma are optional.  *Note Function Attributes::,
!      for more information about the ‘optimize’ attribute and the
       attribute syntax.
  
! ‘#pragma GCC push_options’
! ‘#pragma GCC pop_options’
  
       These pragmas maintain a stack of the current target and
       optimization options.  It is intended for include files where you
!      temporarily want to switch to using a different ‘#pragma GCC
!      target’ or ‘#pragma GCC optimize’ and then to pop back to the
       previous options.
  
! ‘#pragma GCC reset_options’
  
!      This pragma clears the current ‘#pragma GCC target’ and ‘#pragma
!      GCC optimize’ to use the default switches as specified on the
       command line.
  
  
*************** File: gcc.info,  Node: Loop-Specific Pra
*** 63031,63037 ****
  6.64.16 Loop-Specific Pragmas
  -----------------------------
  
! '#pragma GCC ivdep'
  
       With this pragma, the programmer asserts that there are no
       loop-carried dependencies which would prevent consecutive
--- 63042,63048 ----
  6.64.16 Loop-Specific Pragmas
  -----------------------------
  
! ‘#pragma GCC ivdep’
  
       With this pragma, the programmer asserts that there are no
       loop-carried dependencies which would prevent consecutive
*************** File: gcc.info,  Node: Loop-Specific Pra
*** 63049,63055 ****
                a[i] = b[i] + c[i];
            }
  
!      In this example, using the 'restrict' qualifier had the same
       effect.  In the following example, that would not be possible.
       Assume k < -m or k >= m.  Only with the pragma, the compiler knows
       that it can unconditionally vectorize the following loop:
--- 63060,63066 ----
                a[i] = b[i] + c[i];
            }
  
!      In this example, using the ‘restrict’ qualifier had the same
       effect.  In the following example, that would not be possible.
       Assume k < -m or k >= m.  Only with the pragma, the compiler knows
       that it can unconditionally vectorize the following loop:
*************** File: gcc.info,  Node: Loop-Specific Pra
*** 63061,63067 ****
                a[i] = a[i + k] * c;
            }
  
! '#pragma GCC novector'
  
       With this pragma, the programmer asserts that the following loop
       should be prevented from executing concurrently with SIMD (single
--- 63072,63078 ----
                a[i] = a[i + k] * c;
            }
  
! ‘#pragma GCC novector’
  
       With this pragma, the programmer asserts that the following loop
       should be prevented from executing concurrently with SIMD (single
*************** File: gcc.info,  Node: Loop-Specific Pra
*** 63078,63088 ****
                a[i] = b[i] + c[i];
            }
  
! '#pragma GCC unroll N'
  
       You can use this pragma to control how many times a loop should be
!      unrolled.  It must be placed immediately before a 'for', 'while' or
!      'do' loop or a '#pragma GCC ivdep', and applies only to the loop
       that follows.  N is an integer constant expression specifying the
       unrolling factor.  The values of 0 and 1 block any unrolling of the
       loop.
--- 63089,63099 ----
                a[i] = b[i] + c[i];
            }
  
! ‘#pragma GCC unroll N’
  
       You can use this pragma to control how many times a loop should be
!      unrolled.  It must be placed immediately before a ‘for’, ‘while’ or
!      ‘do’ loop or a ‘#pragma GCC ivdep’, and applies only to the loop
       that follows.  N is an integer constant expression specifying the
       unrolling factor.  The values of 0 and 1 block any unrolling of the
       loop.
*************** structures and unions without names.  Fo
*** 63107,63114 ****
       } foo;
  
  In this example, you are able to access members of the unnamed union
! with code like 'foo.b'.  Note that only unnamed structs and unions are
! allowed, you may not have, for example, an unnamed 'int'.
  
   You must never create such structures that cause ambiguous field
  definitions.  For example, in this structure:
--- 63118,63125 ----
       } foo;
  
  In this example, you are able to access members of the unnamed union
! with code like ‘foo.b’.  Note that only unnamed structs and unions are
! allowed, you may not have, for example, an unnamed ‘int’.
  
   You must never create such structures that cause ambiguous field
  definitions.  For example, in this structure:
*************** definitions.  For example, in this struc
*** 63120,63136 ****
         };
       } foo;
  
! it is ambiguous which 'a' is being referred to with 'foo.a'.  The
  compiler gives errors for such constructs.
  
!  Unless '-fms-extensions' is used, the unnamed field must be a structure
! or union definition without a tag (for example, 'struct { int a; };').
! If '-fms-extensions' is used, the field may also be a definition with a
! tag such as 'struct foo { int a; };', a reference to a previously
! defined structure or union such as 'struct foo;', or a reference to a
! 'typedef' name for a previously defined structure or union type.
  
!  The option '-fplan9-extensions' enables '-fms-extensions' as well as
  two other extensions.  First, a pointer to a structure is automatically
  converted to a pointer to an anonymous field for assignments and
  function calls.  For example:
--- 63131,63147 ----
         };
       } foo;
  
! it is ambiguous which ‘a’ is being referred to with ‘foo.a’.  The
  compiler gives errors for such constructs.
  
!  Unless ‘-fms-extensions’ is used, the unnamed field must be a structure
! or union definition without a tag (for example, ‘struct { int a; };’).
! If ‘-fms-extensions’ is used, the field may also be a definition with a
! tag such as ‘struct foo { int a; };’, a reference to a previously
! defined structure or union such as ‘struct foo;’, or a reference to a
! ‘typedef’ name for a previously defined structure or union type.
  
!  The option ‘-fplan9-extensions’ enables ‘-fms-extensions’ as well as
  two other extensions.  First, a pointer to a structure is automatically
  converted to a pointer to an anonymous field for assignments and
  function calls.  For example:
*************** function calls.  For example:
*** 63140,63151 ****
       extern void f1 (struct s1 *);
       void f2 (struct s2 *p) { f1 (p); }
  
! In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
  pointer to the anonymous field.
  
!  Second, when the type of an anonymous field is a 'typedef' for a
! 'struct' or 'union', code may refer to the field using the name of the
! 'typedef'.
  
       typedef struct { int a; } s1;
       struct s2 { s1; };
--- 63151,63162 ----
       extern void f1 (struct s1 *);
       void f2 (struct s2 *p) { f1 (p); }
  
! In the call to ‘f1’ inside ‘f2’, the pointer ‘p’ is converted into a
  pointer to the anonymous field.
  
!  Second, when the type of an anonymous field is a ‘typedef’ for a
! ‘struct’ or ‘union’, code may refer to the field using the name of the
! ‘typedef’.
  
       typedef struct { int a; } s1;
       struct s2 { s1; };
*************** allocated such that there is one instanc
*** 63164,63185 ****
  thread.  The runtime model GCC uses to implement this originates in the
  IA-64 processor-specific ABI, but has since been migrated to other
  processors as well.  It requires significant support from the linker
! ('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
! 'libpthread.so'), so it is not available everywhere.
  
   At the user level, the extension is visible with a new storage class
! keyword: '__thread'.  For example:
  
       __thread int i;
       extern __thread struct state s;
       static __thread char *p;
  
!  The '__thread' specifier may be used alone, with the 'extern' or
! 'static' specifiers, but with no other storage class specifier.  When
! used with 'extern' or 'static', '__thread' must appear immediately after
  the other storage class specifier.
  
!  The '__thread' specifier may be applied to any global, file-scoped
  static, function-scoped static, or static data member of a class.  It
  may not be applied to block-scoped automatic or non-static data member.
  
--- 63175,63196 ----
  thread.  The runtime model GCC uses to implement this originates in the
  IA-64 processor-specific ABI, but has since been migrated to other
  processors as well.  It requires significant support from the linker
! (‘ld’), dynamic linker (‘ld.so’), and system libraries (‘libc.so’ and
! ‘libpthread.so’), so it is not available everywhere.
  
   At the user level, the extension is visible with a new storage class
! keyword: ‘__thread’.  For example:
  
       __thread int i;
       extern __thread struct state s;
       static __thread char *p;
  
!  The ‘__thread’ specifier may be used alone, with the ‘extern’ or
! ‘static’ specifiers, but with no other storage class specifier.  When
! used with ‘extern’ or ‘static’, ‘__thread’ must appear immediately after
  the other storage class specifier.
  
!  The ‘__thread’ specifier may be applied to any global, file-scoped
  static, function-scoped static, or static data member of a class.  It
  may not be applied to block-scoped automatic or non-static data member.
  
*************** File: gcc.info,  Node: C99 Thread-Local
*** 63215,63225 ****
  The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
  document the exact semantics of the language extension.
  
!    * '5.1.2 Execution environments'
  
       Add new text after paragraph 1
  
!           Within either execution environment, a "thread" is a flow of
            control within a program.  It is implementation defined
            whether or not there may be more than one thread associated
            with a program.  It is implementation defined how threads
--- 63226,63236 ----
  The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
  document the exact semantics of the language extension.
  
!    • ‘5.1.2 Execution environments’
  
       Add new text after paragraph 1
  
!           Within either execution environment, a “thread” is a flow of
            control within a program.  It is implementation defined
            whether or not there may be more than one thread associated
            with a program.  It is implementation defined how threads
*************** document the exact semantics of the lang
*** 63228,63264 ****
            terminated.  However, objects with thread storage duration
            shall be initialized before thread startup.
  
!    * '6.2.4 Storage durations of objects'
  
       Add new text before paragraph 3
  
            An object whose identifier is declared with the storage-class
!           specifier '__thread' has "thread storage duration".  Its
            lifetime is the entire execution of the thread, and its stored
            value is initialized only once, prior to thread startup.
  
!    * '6.4.1 Keywords'
  
!      Add '__thread'.
  
!    * '6.7.1 Storage-class specifiers'
  
!      Add '__thread' to the list of storage class specifiers in paragraph
       1.
  
       Change paragraph 2 to
  
!           With the exception of '__thread', at most one storage-class
!           specifier may be given [...].  The '__thread' specifier may be
!           used alone, or immediately following 'extern' or 'static'.
  
       Add new text after paragraph 6
  
            The declaration of an identifier for a variable that has block
!           scope that specifies '__thread' shall also specify either
!           'extern' or 'static'.
  
!           The '__thread' specifier shall be used only with variables.
  
  
  File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
--- 63239,63275 ----
            terminated.  However, objects with thread storage duration
            shall be initialized before thread startup.
  
!    • ‘6.2.4 Storage durations of objects’
  
       Add new text before paragraph 3
  
            An object whose identifier is declared with the storage-class
!           specifier ‘__thread’ has “thread storage duration”.  Its
            lifetime is the entire execution of the thread, and its stored
            value is initialized only once, prior to thread startup.
  
!    • ‘6.4.1 Keywords’
  
!      Add ‘__thread’.
  
!    • ‘6.7.1 Storage-class specifiers’
  
!      Add ‘__thread’ to the list of storage class specifiers in paragraph
       1.
  
       Change paragraph 2 to
  
!           With the exception of ‘__thread’, at most one storage-class
!           specifier may be given [...].  The ‘__thread’ specifier may be
!           used alone, or immediately following ‘extern’ or ‘static’.
  
       Add new text after paragraph 6
  
            The declaration of an identifier for a variable that has block
!           scope that specifies ‘__thread’ shall also specify either
!           ‘extern’ or ‘static’.
  
!           The ‘__thread’ specifier shall be used only with variables.
  
  
  File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
*************** File: gcc.info,  Node: C++98 Thread-Loca
*** 63269,63279 ****
  The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
  that document the exact semantics of the language extension.
  
!    * [intro.execution]
  
       New text after paragraph 4
  
!           A "thread" is a flow of control within the abstract machine.
            It is implementation defined whether or not there may be more
            than one thread.
  
--- 63280,63290 ----
  The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
  that document the exact semantics of the language extension.
  
!    • [intro.execution]
  
       New text after paragraph 4
  
!           A “thread” is a flow of control within the abstract machine.
            It is implementation defined whether or not there may be more
            than one thread.
  
*************** that document the exact semantics of the
*** 63283,63306 ****
            ensure when and whether side effects are visible to other
            threads.
  
!    * [lex.key]
  
!      Add '__thread'.
  
!    * [basic.start.main]
  
       Add after paragraph 5
  
!           The thread that begins execution at the 'main' function is
!           called the "main thread".  It is implementation defined how
            functions beginning threads other than the main thread are
            designated or typed.  A function so designated, as well as the
!           'main' function, is called a "thread startup function".  It is
            implementation defined what happens if a thread startup
            function returns.  It is implementation defined what happens
!           to other threads when any thread calls 'exit'.
  
!    * [basic.start.init]
  
       Add after paragraph 4
  
--- 63294,63317 ----
            ensure when and whether side effects are visible to other
            threads.
  
!    • [lex.key]
  
!      Add ‘__thread’.
  
!    • [basic.start.main]
  
       Add after paragraph 5
  
!           The thread that begins execution at the ‘main’ function is
!           called the “main thread”.  It is implementation defined how
            functions beginning threads other than the main thread are
            designated or typed.  A function so designated, as well as the
!           ‘main’ function, is called a “thread startup function”.  It is
            implementation defined what happens if a thread startup
            function returns.  It is implementation defined what happens
!           to other threads when any thread calls ‘exit’.
  
!    • [basic.start.init]
  
       Add after paragraph 4
  
*************** that document the exact semantics of the
*** 63309,63315 ****
            thread startup function.  An object of thread storage duration
            shall not require dynamic initialization.
  
!    * [basic.start.term]
  
       Add after paragraph 3
  
--- 63320,63326 ----
            thread startup function.  An object of thread storage duration
            shall not require dynamic initialization.
  
!    • [basic.start.term]
  
       Add after paragraph 3
  
*************** that document the exact semantics of the
*** 63318,63324 ****
            whose elements (directly or indirectly) have non-trivial
            destructors.
  
!    * [basic.stc]
  
       Add "thread storage duration" to the list in paragraph 1.
  
--- 63329,63335 ----
            whose elements (directly or indirectly) have non-trivial
            destructors.
  
!    • [basic.stc]
  
       Add "thread storage duration" to the list in paragraph 1.
  
*************** that document the exact semantics of the
*** 63327,63383 ****
            Thread, static, and automatic storage durations are associated
            with objects introduced by declarations [...].
  
!      Add '__thread' to the list of specifiers in paragraph 3.
  
!    * [basic.stc.thread]
  
       New section before [basic.stc.static]
  
!           The keyword '__thread' applied to a non-local object gives the
            object thread storage duration.
  
!           A local variable or class data member declared both 'static'
!           and '__thread' gives the variable or member thread storage
            duration.
  
!    * [basic.stc.static]
  
       Change paragraph 1
  
            All objects that have neither thread storage duration, dynamic
            storage duration nor are local [...].
  
!    * [dcl.stc]
  
!      Add '__thread' to the list in paragraph 1.
  
       Change paragraph 1
  
!           With the exception of '__thread', at most one
            STORAGE-CLASS-SPECIFIER shall appear in a given
!           DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
!           alone, or immediately following the 'extern' or 'static'
            specifiers.  [...]
  
       Add after paragraph 5
  
!           The '__thread' specifier can be applied only to the names of
            objects and to anonymous unions.
  
!    * [class.mem]
  
       Add after paragraph 6
  
!           Non-'static' members shall not be '__thread'.
  
  
  File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
  
! 6.67 Binary Constants using the '0b' Prefix
  ===========================================
  
  Integer constants can be written as binary constants, consisting of a
! sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
  particularly useful in environments that operate a lot on the bit level
  (like microcontrollers).
  
--- 63338,63394 ----
            Thread, static, and automatic storage durations are associated
            with objects introduced by declarations [...].
  
!      Add ‘__thread’ to the list of specifiers in paragraph 3.
  
!    • [basic.stc.thread]
  
       New section before [basic.stc.static]
  
!           The keyword ‘__thread’ applied to a non-local object gives the
            object thread storage duration.
  
!           A local variable or class data member declared both ‘static’
!           and ‘__thread’ gives the variable or member thread storage
            duration.
  
!    • [basic.stc.static]
  
       Change paragraph 1
  
            All objects that have neither thread storage duration, dynamic
            storage duration nor are local [...].
  
!    • [dcl.stc]
  
!      Add ‘__thread’ to the list in paragraph 1.
  
       Change paragraph 1
  
!           With the exception of ‘__thread’, at most one
            STORAGE-CLASS-SPECIFIER shall appear in a given
!           DECL-SPECIFIER-SEQ.  The ‘__thread’ specifier may be used
!           alone, or immediately following the ‘extern’ or ‘static’
            specifiers.  [...]
  
       Add after paragraph 5
  
!           The ‘__thread’ specifier can be applied only to the names of
            objects and to anonymous unions.
  
!    • [class.mem]
  
       Add after paragraph 6
  
!           Non-‘static’ members shall not be ‘__thread’.
  
  
  File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
  
! 6.67 Binary Constants using the ‘0b’ Prefix
  ===========================================
  
  Integer constants can be written as binary constants, consisting of a
! sequence of ‘0’ and ‘1’ digits, prefixed by ‘0b’ or ‘0B’.  This is
  particularly useful in environments that operate a lot on the bit level
  (like microcontrollers).
  
*************** particularly useful in environments that
*** 63389,63395 ****
       i = 0b101010;
  
   The type of these constants follows the same rules as for octal or
! hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
  applied.
  
  
--- 63400,63406 ----
       i = 0b101010;
  
   The type of these constants follows the same rules as for octal or
! hexadecimal integer constants, so suffixes like ‘L’ or ‘UL’ can be
  applied.
  
  
*************** The GNU compiler provides these extensio
*** 63402,63409 ****
  can also use most of the C language extensions in your C++ programs).
  If you want to write code that checks whether these features are
  available, you can test for the GNU compiler the same way as for C
! programs: check for a predefined macro '__GNUC__'.  You can also use
! '__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
  (cpp)Common Predefined Macros.).
  
  * Menu:
--- 63413,63420 ----
  can also use most of the C language extensions in your C++ programs).
  If you want to write code that checks whether these features are
  available, you can test for the GNU compiler the same way as for C
! programs: check for a predefined macro ‘__GNUC__’.  You can also use
! ‘__GNUG__’ to test specifically for GNU C++ (*note Predefined Macros:
  (cpp)Common Predefined Macros.).
  
  * Menu:
*************** programs: check for a predefined macro '
*** 63416,63422 ****
  * Template Instantiation:: Methods for ensuring that exactly one copy of
                          each needed template instantiation is emitted.
  * Bound member functions:: You can extract a function pointer to the
!                         method denoted by a '->*' or '.*' expression.
  * C++ Attributes::      Variable, function, and type attributes for C++ only.
  * Function Multiversioning::   Declaring multiple function versions.
  * Type Traits::         Compiler support for type traits.
--- 63427,63433 ----
  * Template Instantiation:: Methods for ensuring that exactly one copy of
                          each needed template instantiation is emitted.
  * Bound member functions:: You can extract a function pointer to the
!                         method denoted by a ‘->*’ or ‘.*’ expression.
  * C++ Attributes::      Variable, function, and type attributes for C++ only.
  * Function Multiversioning::   Declaring multiple function versions.
  * Type Traits::         Compiler support for type traits.
*************** File: gcc.info,  Node: Restricted Pointe
*** 63481,63489 ****
  ================================
  
  As with the C front end, G++ understands the C99 feature of restricted
! pointers, specified with the '__restrict__', or '__restrict' type
! qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
! language flag, 'restrict' is not a keyword in C++.
  
   In addition to allowing restricted pointers, you can specify restricted
  references, which indicate that the reference is not aliased in the
--- 63492,63500 ----
  ================================
  
  As with the C front end, G++ understands the C99 feature of restricted
! pointers, specified with the ‘__restrict__’, or ‘__restrict’ type
! qualifier.  Because you cannot compile C++ by specifying the ‘-std=c99’
! language flag, ‘restrict’ is not a keyword in C++.
  
   In addition to allowing restricted pointers, you can specify restricted
  references, which indicate that the reference is not aliased in the
*************** local context.
*** 63494,63520 ****
         /* ... */
       }
  
! In the body of 'fn', RPTR points to an unaliased integer and RREF refers
  to a (different) unaliased integer.
  
   You may also specify whether a member function's THIS pointer is
! unaliased by using '__restrict__' as a member function qualifier.
  
       void T::fn () __restrict__
       {
         /* ... */
       }
  
! Within the body of 'T::fn', THIS has the effective definition 'T
! *__restrict__ const this'.  Notice that the interpretation of a
! '__restrict__' member function qualifier is different to that of 'const'
! or 'volatile' qualifier, in that it is applied to the pointer rather
  than the object.  This is consistent with other compilers that implement
  restricted pointers.
  
!  As with all outermost parameter qualifiers, '__restrict__' is ignored
  in function definition matching.  This means you only need to specify
! '__restrict__' in a function definition, rather than in a function
  prototype as well.
  
  
--- 63505,63531 ----
         /* ... */
       }
  
! In the body of ‘fn’, RPTR points to an unaliased integer and RREF refers
  to a (different) unaliased integer.
  
   You may also specify whether a member function's THIS pointer is
! unaliased by using ‘__restrict__’ as a member function qualifier.
  
       void T::fn () __restrict__
       {
         /* ... */
       }
  
! Within the body of ‘T::fn’, THIS has the effective definition ‘T
! *__restrict__ const this’.  Notice that the interpretation of a
! ‘__restrict__’ member function qualifier is different to that of ‘const’
! or ‘volatile’ qualifier, in that it is applied to the pointer rather
  than the object.  This is consistent with other compilers that implement
  restricted pointers.
  
!  As with all outermost parameter qualifiers, ‘__restrict__’ is ignored
  in function definition matching.  This means you only need to specify
! ‘__restrict__’ in a function definition, rather than in a function
  prototype as well.
  
  
*************** VTables
*** 63558,63571 ****
       Make sure that any inline virtuals are declared inline in the class
       body, even if they are not defined there.
  
! 'type_info' objects
       C++ requires information about types to be written out in order to
!      implement 'dynamic_cast', 'typeid' and exception handling.  For
       polymorphic classes (classes with virtual functions), the
!      'type_info' object is written out along with the vtable so that
!      'dynamic_cast' can determine the dynamic type of a class object at
!      run time.  For all other types, we write out the 'type_info' object
!      when it is used: when applying 'typeid' to an expression, throwing
       an object, or referring to a type in a catch clause or exception
       specification.
  
--- 63569,63582 ----
       Make sure that any inline virtuals are declared inline in the class
       body, even if they are not defined there.
  
! ‘type_info’ objects
       C++ requires information about types to be written out in order to
!      implement ‘dynamic_cast’, ‘typeid’ and exception handling.  For
       polymorphic classes (classes with virtual functions), the
!      ‘type_info’ object is written out along with the vtable so that
!      ‘dynamic_cast’ can determine the dynamic type of a class object at
!      run time.  For all other types, we write out the ‘type_info’ object
!      when it is used: when applying ‘typeid’ to an expression, throwing
       an object, or referring to a type in a catch clause or exception
       specification.
  
*************** File: gcc.info,  Node: C++ Interface,  N
*** 63598,63614 ****
  7.4 C++ Interface and Implementation Pragmas
  ============================================
  
! '#pragma interface' and '#pragma implementation' provide the user with a
  way of explicitly directing the compiler to emit entities with vague
  linkage (and debugging information) in a particular translation unit.
  
!  _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
  support and the "key method" heuristic mentioned in *note Vague
  Linkage::.  Using them can actually cause your program to grow due to
  unnecessary out-of-line copies of inline functions.
  
! '#pragma interface'
! '#pragma interface "SUBDIR/OBJECTS.h"'
       Use this directive in _header files_ that define object classes, to
       save space in most of the object files that use those classes.
       Normally, local copies of certain information (backup copies of
--- 63609,63625 ----
  7.4 C++ Interface and Implementation Pragmas
  ============================================
  
! ‘#pragma interface’ and ‘#pragma implementation’ provide the user with a
  way of explicitly directing the compiler to emit entities with vague
  linkage (and debugging information) in a particular translation unit.
  
!  _Note:_ These ‘#pragma’s have been superceded as of GCC 2.7.2 by COMDAT
  support and the "key method" heuristic mentioned in *note Vague
  Linkage::.  Using them can actually cause your program to grow due to
  unnecessary out-of-line copies of inline functions.
  
! ‘#pragma interface’
! ‘#pragma interface "SUBDIR/OBJECTS.h"’
       Use this directive in _header files_ that define object classes, to
       save space in most of the object files that use those classes.
       Normally, local copies of certain information (backup copies of
*************** unnecessary out-of-line copies of inline
*** 63616,63675 ****
       tables that implement virtual functions) must be kept in each
       object file that includes class definitions.  You can use this
       pragma to avoid such duplication.  When a header file containing
!      '#pragma interface' is included in a compilation, this auxiliary
       information is not generated (unless the main input source file
!      itself uses '#pragma implementation').  Instead, the object files
       contain references to be resolved at link time.
  
       The second form of this directive is useful for the case where you
       have multiple headers with the same name in different directories.
!      If you use this form, you must specify the same string to '#pragma
!      implementation'.
  
! '#pragma implementation'
! '#pragma implementation "OBJECTS.h"'
       Use this pragma in a _main input file_, when you want full output
       from included header files to be generated (and made globally
!      visible).  The included header file, in turn, should use '#pragma
!      interface'.  Backup copies of inline member functions, debugging
       information, and the internal tables used to implement virtual
       functions are all generated in implementation files.
  
!      If you use '#pragma implementation' with no argument, it applies to
       an include file with the same basename(1) as your source file.  For
!      example, in 'allclass.cc', giving just '#pragma implementation' by
!      itself is equivalent to '#pragma implementation "allclass.h"'.
  
       Use the string argument if you want a single implementation file to
       include code from multiple header files.  (You must also use
!      '#include' to include the header file; '#pragma implementation'
       only specifies how to use the file--it doesn't actually include
       it.)
  
       There is no way to split up the contents of a single header file
       into multiple implementation files.
  
!  '#pragma implementation' and '#pragma interface' also have an effect on
  function inlining.
  
!  If you define a class in a header file marked with '#pragma interface',
  the effect on an inline function defined in that class is similar to an
! explicit 'extern' declaration--the compiler emits no code at all to
  define an independent version of the function.  Its definition is used
  only for inlining with its callers.
  
   Conversely, when you include the same header file in a main source file
! that declares it as '#pragma implementation', the compiler emits code
  for the function itself; this defines a version of the function that can
  be found via pointers (or by callers compiled without inlining).  If all
  calls to the function can be inlined, you can avoid emitting the
! function by compiling with '-fno-implement-inlines'.  If any calls are
  not inlined, you will get linker errors.
  
     ---------- Footnotes ----------
  
!    (1) A file's "basename" is the name stripped of all leading path
! information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
  
  
  File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
--- 63627,63686 ----
       tables that implement virtual functions) must be kept in each
       object file that includes class definitions.  You can use this
       pragma to avoid such duplication.  When a header file containing
!      ‘#pragma interface’ is included in a compilation, this auxiliary
       information is not generated (unless the main input source file
!      itself uses ‘#pragma implementation’).  Instead, the object files
       contain references to be resolved at link time.
  
       The second form of this directive is useful for the case where you
       have multiple headers with the same name in different directories.
!      If you use this form, you must specify the same string to ‘#pragma
!      implementation’.
  
! ‘#pragma implementation’
! ‘#pragma implementation "OBJECTS.h"’
       Use this pragma in a _main input file_, when you want full output
       from included header files to be generated (and made globally
!      visible).  The included header file, in turn, should use ‘#pragma
!      interface’.  Backup copies of inline member functions, debugging
       information, and the internal tables used to implement virtual
       functions are all generated in implementation files.
  
!      If you use ‘#pragma implementation’ with no argument, it applies to
       an include file with the same basename(1) as your source file.  For
!      example, in ‘allclass.cc’, giving just ‘#pragma implementation’ by
!      itself is equivalent to ‘#pragma implementation "allclass.h"’.
  
       Use the string argument if you want a single implementation file to
       include code from multiple header files.  (You must also use
!      ‘#include’ to include the header file; ‘#pragma implementation’
       only specifies how to use the file--it doesn't actually include
       it.)
  
       There is no way to split up the contents of a single header file
       into multiple implementation files.
  
!  ‘#pragma implementation’ and ‘#pragma interface’ also have an effect on
  function inlining.
  
!  If you define a class in a header file marked with ‘#pragma interface’,
  the effect on an inline function defined in that class is similar to an
! explicit ‘extern’ declaration--the compiler emits no code at all to
  define an independent version of the function.  Its definition is used
  only for inlining with its callers.
  
   Conversely, when you include the same header file in a main source file
! that declares it as ‘#pragma implementation’, the compiler emits code
  for the function itself; this defines a version of the function that can
  be found via pointers (or by callers compiled without inlining).  If all
  calls to the function can be inlined, you can avoid emitting the
! function by compiling with ‘-fno-implement-inlines’.  If any calls are
  not inlined, you will get linker errors.
  
     ---------- Footnotes ----------
  
!    (1) A file's “basename” is the name stripped of all leading path
! information and of trailing suffixes, such as ‘.h’ or ‘.C’ or ‘.cc’.
  
  
  File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
*************** instantiations:
*** 63734,63740 ****
       explicit instantiation in one object file, and preventing the
       compiler from doing implicit instantiations in any other object
       files by using an explicit instantiation declaration, using the
!      'extern template' syntax:
  
            extern template int max (int, int);
  
--- 63745,63751 ----
       explicit instantiation in one object file, and preventing the
       compiler from doing implicit instantiations in any other object
       files by using an explicit instantiation declaration, using the
!      ‘extern template’ syntax:
  
            extern template int max (int, int);
  
*************** instantiations:
*** 63765,63771 ****
       alternative and programs using this approach will work with most
       modern compilers.
  
!   2. Compile your code with '-fno-implicit-templates' to disable the
       implicit generation of template instances, and explicitly
       instantiate all the ones you use.  This approach requires more
       knowledge of exactly which instances you need than do the others,
--- 63776,63782 ----
       alternative and programs using this approach will work with most
       modern compilers.
  
!   2. Compile your code with ‘-fno-implicit-templates’ to disable the
       implicit generation of template instances, and explicitly
       instantiate all the ones you use.  This approach requires more
       knowledge of exactly which instances you need than do the others,
*************** instantiations:
*** 63773,63793 ****
       ensure that only the intended instances are used.
  
       If you are using Cfront-model code, you can probably get away with
!      not using '-fno-implicit-templates' when compiling files that don't
!      '#include' the member template definitions.
  
       If you use one big file to do the instantiations, you may want to
!      compile it without '-fno-implicit-templates' so you get all of the
       instances required by your explicit instantiations (but not by any
       other files) without having to specify them as well.
  
       In addition to forward declaration of explicit instantiations (with
!      'extern'), G++ has extended the template instantiation syntax to
       support instantiation of the compiler support data for a template
       class (i.e. the vtable) without instantiating any of its members
!      (with 'inline'), and instantiation of only the static data members
       of a template class, without the support data or member functions
!      (with 'static'):
  
            inline template class Foo<int>;
            static template class Foo<int>;
--- 63784,63804 ----
       ensure that only the intended instances are used.
  
       If you are using Cfront-model code, you can probably get away with
!      not using ‘-fno-implicit-templates’ when compiling files that don't
!      ‘#include’ the member template definitions.
  
       If you use one big file to do the instantiations, you may want to
!      compile it without ‘-fno-implicit-templates’ so you get all of the
       instances required by your explicit instantiations (but not by any
       other files) without having to specify them as well.
  
       In addition to forward declaration of explicit instantiations (with
!      ‘extern’), G++ has extended the template instantiation syntax to
       support instantiation of the compiler support data for a template
       class (i.e. the vtable) without instantiating any of its members
!      (with ‘inline’), and instantiation of only the static data members
       of a template class, without the support data or member functions
!      (with ‘static’):
  
            inline template class Foo<int>;
            static template class Foo<int>;
*************** File: gcc.info,  Node: Bound member func
*** 63800,63806 ****
  
  In C++, pointer to member functions (PMFs) are implemented using a wide
  pointer of sorts to handle all the possible call mechanisms; the PMF
! needs to store information about how to adjust the 'this' pointer, and
  if the function pointed to is virtual, where to find the vtable, and
  where in the vtable to look for the member function.  If you are using
  PMFs in an inner loop, you should really reconsider that decision.  If
--- 63811,63817 ----
  
  In C++, pointer to member functions (PMFs) are implemented using a wide
  pointer of sorts to handle all the possible call mechanisms; the PMF
! needs to store information about how to adjust the ‘this’ pointer, and
  if the function pointed to is virtual, where to find the vtable, and
  where in the vtable to look for the member function.  If you are using
  PMFs in an inner loop, you should really reconsider that decision.  If
*************** function calls.
*** 63821,63833 ****
  
       fptr p = (fptr)(a.*fp);
  
!  For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
  object is needed to obtain the address of the function.  They can be
  converted to function pointers directly:
  
       fptr p1 = (fptr)(&A::foo);
  
!  You must specify '-Wno-pmf-conversions' to use this extension.
  
  
  File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
--- 63832,63844 ----
  
       fptr p = (fptr)(a.*fp);
  
!  For PMF constants (i.e. expressions of the form ‘&Klasse::Member’), no
  object is needed to obtain the address of the function.  They can be
  converted to function pointers directly:
  
       fptr p1 = (fptr)(&A::foo);
  
!  You must specify ‘-Wno-pmf-conversions’ to use this extension.
  
  
  File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
*************** File: gcc.info,  Node: C++ Attributes,
*** 63837,63844 ****
  
  Some attributes only make sense for C++ programs.
  
! 'abi_tag ("TAG", ...)'
!      The 'abi_tag' attribute can be applied to a function, variable, or
       class declaration.  It modifies the mangled name of the entity to
       incorporate the tag name, in order to distinguish the function or
       class from an earlier version with a different ABI; perhaps the
--- 63848,63855 ----
  
  Some attributes only make sense for C++ programs.
  
! ‘abi_tag ("TAG", ...)’
!      The ‘abi_tag’ attribute can be applied to a function, variable, or
       class declaration.  It modifies the mangled name of the entity to
       incorporate the tag name, in order to distinguish the function or
       class from an earlier version with a different ABI; perhaps the
*************** Some attributes only make sense for C++
*** 63847,63853 ****
  
       The attribute can also be applied to an inline namespace, but does
       not affect the mangled name of the namespace; in this case it is
!      only used for '-Wabi-tag' warnings and automatic tagging of
       functions and variables.  Tagging inline namespaces is generally
       preferable to tagging individual declarations, but the latter is
       sometimes necessary, such as when only certain members of a class
--- 63858,63864 ----
  
       The attribute can also be applied to an inline namespace, but does
       not affect the mangled name of the namespace; in this case it is
!      only used for ‘-Wabi-tag’ warnings and automatic tagging of
       functions and variables.  Tagging inline namespaces is generally
       preferable to tagging individual declarations, but the latter is
       sometimes necessary, such as when only certain members of a class
*************** Some attributes only make sense for C++
*** 63865,63871 ****
       will be ignored if applied to an explicit specialization or
       instantiation.
  
!      The '-Wabi-tag' flag enables a warning about a class which does not
       have all the ABI tags used by its subobjects and virtual functions;
       for users with code that needs to coexist with an earlier ABI,
       using this option can help to find all affected types that need to
--- 63876,63882 ----
       will be ignored if applied to an explicit specialization or
       instantiation.
  
!      The ‘-Wabi-tag’ flag enables a warning about a class which does not
       have all the ABI tags used by its subobjects and virtual functions;
       for users with code that needs to coexist with an earlier ABI,
       using this option can help to find all affected types that need to
*************** Some attributes only make sense for C++
*** 63874,63897 ****
       When a type involving an ABI tag is used as the type of a variable
       or return type of a function where that tag is not already present
       in the signature of the function, the tag is automatically applied
!      to the variable or function.  '-Wabi-tag' also warns about this
       situation; this warning can be avoided by explicitly tagging the
       variable or function or moving it into a tagged inline namespace.
  
! 'init_priority (PRIORITY)'
  
       In Standard C++, objects defined at namespace scope are guaranteed
       to be initialized in an order in strict accordance with that of
       their definitions _in a given translation unit_.  No guarantee is
       made for initializations across translation units.  However, GNU
       C++ allows users to control the order of initialization of objects
!      defined at namespace scope with the 'init_priority' attribute by
       specifying a relative PRIORITY, a constant integral expression
       currently bounded between 101 and 65535 inclusive.  Lower numbers
       indicate a higher priority.
  
!      In the following example, 'A' would normally be created before 'B',
!      but the 'init_priority' attribute reverses that order:
  
            Some_Class  A  __attribute__ ((init_priority (2000)));
            Some_Class  B  __attribute__ ((init_priority (543)));
--- 63885,63908 ----
       When a type involving an ABI tag is used as the type of a variable
       or return type of a function where that tag is not already present
       in the signature of the function, the tag is automatically applied
!      to the variable or function.  ‘-Wabi-tag’ also warns about this
       situation; this warning can be avoided by explicitly tagging the
       variable or function or moving it into a tagged inline namespace.
  
! ‘init_priority (PRIORITY)’
  
       In Standard C++, objects defined at namespace scope are guaranteed
       to be initialized in an order in strict accordance with that of
       their definitions _in a given translation unit_.  No guarantee is
       made for initializations across translation units.  However, GNU
       C++ allows users to control the order of initialization of objects
!      defined at namespace scope with the ‘init_priority’ attribute by
       specifying a relative PRIORITY, a constant integral expression
       currently bounded between 101 and 65535 inclusive.  Lower numbers
       indicate a higher priority.
  
!      In the following example, ‘A’ would normally be created before ‘B’,
!      but the ‘init_priority’ attribute reverses that order:
  
            Some_Class  A  __attribute__ ((init_priority (2000)));
            Some_Class  B  __attribute__ ((init_priority (543)));
*************** Some attributes only make sense for C++
*** 63899,63911 ****
       Note that the particular values of PRIORITY do not matter; only
       their relative ordering.
  
! 'no_dangling'
  
       This attribute can be applied on a class type, function, or member
       function.  Dangling references to classes marked with this
!      attribute will have the '-Wdangling-reference' diagnostic
       suppressed; so will references returned from the
!      'gnu::no_dangling'-marked functions.  For example:
  
            class [[gnu::no_dangling]] S { ... };
  
--- 63910,63922 ----
       Note that the particular values of PRIORITY do not matter; only
       their relative ordering.
  
! ‘no_dangling’
  
       This attribute can be applied on a class type, function, or member
       function.  Dangling references to classes marked with this
!      attribute will have the ‘-Wdangling-reference’ diagnostic
       suppressed; so will references returned from the
!      ‘gnu::no_dangling’-marked functions.  For example:
  
            class [[gnu::no_dangling]] S { ... };
  
*************** Some attributes only make sense for C++
*** 63938,63944 ****
              ...
            };
  
! 'warn_unused'
  
       For C++ types with non-trivial constructors and/or destructors it
       is impossible for the compiler to determine whether a variable of
--- 63949,63955 ----
              ...
            };
  
! ‘warn_unused’
  
       For C++ types with non-trivial constructors and/or destructors it
       is impossible for the compiler to determine whether a variable of
*************** Some attributes only make sense for C++
*** 63948,63983 ****
       fundamental types.
  
       This attribute is appropriate for types which just represent a
!      value, such as 'std::string'; it is not appropriate for types which
!      control a resource, such as 'std::lock_guard'.
  
       This attribute is also accepted in C, but it is unnecessary because
       C does not have constructors or destructors.
  
! 'cold'
  
!      In addition to functions and labels, GNU C++ allows the 'cold'
       attribute to be used on C++ classes, structs, or unions.  Applying
!      the 'cold' attribute on a type has the effect of treating every
       member function of the type, including implicit special member
!      functions, as cold.  If a member function is marked with the 'hot'
!      function attribute, the 'hot' attribute takes precedence and the
!      'cold' attribute is not propagated.
  
!      For the effects of the 'cold' attribute on functions, see *note
       Common Function Attributes::.
  
! 'hot'
  
!      In addition to functions and labels, GNU C++ allows the 'hot'
       attribute to be used on C++ classes, structs, or unions.  Applying
!      the 'hot' attribute on a type has the effect of treating every
       member function of the type, including implicit special member
!      functions, as hot.  If a member function is marked with the 'cold'
!      function attribute, the 'cold' attribute takes precedence and the
!      'hot' attribute is not propagated.
  
!      For the effects of the 'hot' attribute on functions, see *note
       Common Function Attributes::.
  
  
--- 63959,63994 ----
       fundamental types.
  
       This attribute is appropriate for types which just represent a
!      value, such as ‘std::string’; it is not appropriate for types which
!      control a resource, such as ‘std::lock_guard’.
  
       This attribute is also accepted in C, but it is unnecessary because
       C does not have constructors or destructors.
  
! ‘cold’
  
!      In addition to functions and labels, GNU C++ allows the ‘cold’
       attribute to be used on C++ classes, structs, or unions.  Applying
!      the ‘cold’ attribute on a type has the effect of treating every
       member function of the type, including implicit special member
!      functions, as cold.  If a member function is marked with the ‘hot’
!      function attribute, the ‘hot’ attribute takes precedence and the
!      ‘cold’ attribute is not propagated.
  
!      For the effects of the ‘cold’ attribute on functions, see *note
       Common Function Attributes::.
  
! ‘hot’
  
!      In addition to functions and labels, GNU C++ allows the ‘hot’
       attribute to be used on C++ classes, structs, or unions.  Applying
!      the ‘hot’ attribute on a type has the effect of treating every
       member function of the type, including implicit special member
!      functions, as hot.  If a member function is marked with the ‘cold’
!      function attribute, the ‘cold’ attribute takes precedence and the
!      ‘hot’ attribute is not propagated.
  
!      For the effects of the ‘hot’ attribute on functions, see *note
       Common Function Attributes::.
  
  
*************** compile-time determination of various ch
*** 64049,64185 ****
  pair of types).
  
   -- Built-in Function: bool __has_nothrow_assign (TYPE)
!      If TYPE is 'const'-qualified or is a reference type then the trait
!      is 'false'.  Otherwise if '__has_trivial_assign (type)' is 'true'
!      then the trait is 'true', else if TYPE is a cv-qualified class or
       union type with copy assignment operators that are known not to
!      throw an exception then the trait is 'true', else it is 'false'.
       Requires: TYPE shall be a complete type, (possibly cv-qualified)
!      'void', or an array of unknown bound.
  
   -- Built-in Function: bool __has_nothrow_copy (TYPE)
!      If '__has_trivial_copy (type)' is 'true' then the trait is 'true',
       else if TYPE is a cv-qualified class or union type with copy
       constructors that are known not to throw an exception then the
!      trait is 'true', else it is 'false'.  Requires: TYPE shall be a
!      complete type, (possibly cv-qualified) 'void', or an array of
       unknown bound.
  
   -- Built-in Function: bool __has_nothrow_constructor (TYPE)
!      If '__has_trivial_constructor (type)' is 'true' then the trait is
!      'true', else if TYPE is a cv class or union type (or array thereof)
       with a default constructor that is known not to throw an exception
!      then the trait is 'true', else it is 'false'.  Requires: TYPE shall
!      be a complete type, (possibly cv-qualified) 'void', or an array of
       unknown bound.
  
   -- Built-in Function: bool __has_trivial_assign (TYPE)
!      If TYPE is 'const'- qualified or is a reference type then the trait
!      is 'false'.  Otherwise if '__is_trivial (type)' is 'true' then the
!      trait is 'true', else if TYPE is a cv-qualified class or union type
       with a trivial copy assignment ([class.copy]) then the trait is
!      'true', else it is 'false'.  Requires: TYPE shall be a complete
!      type, (possibly cv-qualified) 'void', or an array of unknown bound.
  
   -- Built-in Function: bool __has_trivial_copy (TYPE)
!      If '__is_trivial (type)' is 'true' or TYPE is a reference type then
!      the trait is 'true', else if TYPE is a cv class or union type with
!      a trivial copy constructor ([class.copy]) then the trait is 'true',
!      else it is 'false'.  Requires: TYPE shall be a complete type,
!      (possibly cv-qualified) 'void', or an array of unknown bound.
  
   -- Built-in Function: bool __has_trivial_constructor (TYPE)
!      If '__is_trivial (type)' is 'true' then the trait is 'true', else
       if TYPE is a cv-qualified class or union type (or array thereof)
       with a trivial default constructor ([class.ctor]) then the trait is
!      'true', else it is 'false'.  Requires: TYPE shall be a complete
!      type, (possibly cv-qualified) 'void', or an array of unknown bound.
  
   -- Built-in Function: bool __has_trivial_destructor (TYPE)
!      If '__is_trivial (type)' is 'true' or TYPE is a reference type then
!      the trait is 'true', else if TYPE is a cv class or union type (or
       array thereof) with a trivial destructor ([class.dtor]) then the
!      trait is 'true', else it is 'false'.  Requires: TYPE shall be a
!      complete type, (possibly cv-qualified) 'void', or an array of
       unknown bound.
  
   -- Built-in Function: bool __has_virtual_destructor (TYPE)
       If TYPE is a class type with a virtual destructor ([class.dtor])
!      then the trait is 'true', else it is 'false'.  Requires: If TYPE is
       a non-union class type, it shall be a complete type.
  
   -- Built-in Function: bool __is_abstract (TYPE)
       If TYPE is an abstract class ([class.abstract]) then the trait is
!      'true', else it is 'false'.  Requires: If TYPE is a non-union class
       type, it shall be a complete type.
  
   -- Built-in Function: bool __is_aggregate (TYPE)
!      If TYPE is an aggregate type ([dcl.init.aggr]) the trait is 'true',
!      else it is 'false'.  Requires: If TYPE is a class type, it shall be
       a complete type.
  
   -- Built-in Function: bool __is_base_of (BASE_TYPE, DERIVED_TYPE)
       If BASE_TYPE is a base class of DERIVED_TYPE ([class.derived]) then
!      the trait is 'true', otherwise it is 'false'.  Top-level
       cv-qualifications of BASE_TYPE and DERIVED_TYPE are ignored.  For
       the purposes of this trait, a class type is considered is own base.
!      Requires: if '__is_class (base_type)' and '__is_class
!      (derived_type)' are 'true' and BASE_TYPE and DERIVED_TYPE are not
       the same type (disregarding cv-qualifiers), DERIVED_TYPE shall be a
       complete type.  A diagnostic is produced if this requirement is not
       met.
  
   -- Built-in Function: bool __is_class (TYPE)
       If TYPE is a cv-qualified class type, and not a union type
!      ([basic.compound]) the trait is 'true', else it is 'false'.
  
   -- Built-in Function: bool __is_empty (TYPE)
!      If '__is_class (type)' is 'false' then the trait is 'false'.
       Otherwise TYPE is considered empty if and only if: TYPE has no
       non-static data members, or all non-static data members, if any,
       are bit-fields of length 0, and TYPE has no virtual members, and
       TYPE has no virtual base classes, and TYPE has no base classes
!      BASE_TYPE for which '__is_empty (base_type)' is 'false'.  Requires:
       If TYPE is a non-union class type, it shall be a complete type.
  
   -- Built-in Function: bool __is_enum (TYPE)
       If TYPE is a cv enumeration type ([basic.compound]) the trait is
!      'true', else it is 'false'.
  
   -- Built-in Function: bool __is_final (TYPE)
!      If TYPE is a class or union type marked 'final', then the trait is
!      'true', else it is 'false'.  Requires: If TYPE is a class type, it
       shall be a complete type.
  
   -- Built-in Function: bool __is_literal_type (TYPE)
!      If TYPE is a literal type ([basic.types]) the trait is 'true', else
!      it is 'false'.  Requires: TYPE shall be a complete type, (possibly
!      cv-qualified) 'void', or an array of unknown bound.
  
   -- Built-in Function: bool __is_pod (TYPE)
!      If TYPE is a cv POD type ([basic.types]) then the trait is 'true',
!      else it is 'false'.  Requires: TYPE shall be a complete type,
!      (possibly cv-qualified) 'void', or an array of unknown bound.
  
   -- Built-in Function: bool __is_polymorphic (TYPE)
       If TYPE is a polymorphic class ([class.virtual]) then the trait is
!      'true', else it is 'false'.  Requires: If TYPE is a non-union class
       type, it shall be a complete type.
  
   -- Built-in Function: bool __is_standard_layout (TYPE)
       If TYPE is a standard-layout type ([basic.types]) the trait is
!      'true', else it is 'false'.  Requires: TYPE shall be a complete
       type, an array of complete types, or (possibly cv-qualified)
!      'void'.
  
   -- Built-in Function: bool __is_trivial (TYPE)
!      If TYPE is a trivial type ([basic.types]) the trait is 'true', else
!      it is 'false'.  Requires: TYPE shall be a complete type, an array
!      of complete types, or (possibly cv-qualified) 'void'.
  
   -- Built-in Function: bool __is_union (TYPE)
!      If TYPE is a cv union type ([basic.compound]) the trait is 'true',
!      else it is 'false'.
  
   -- Built-in Function: bool __underlying_type (TYPE)
       The underlying type of TYPE.  Requires: TYPE shall be an
--- 64060,64196 ----
  pair of types).
  
   -- Built-in Function: bool __has_nothrow_assign (TYPE)
!      If TYPE is ‘const’-qualified or is a reference type then the trait
!      is ‘false’.  Otherwise if ‘__has_trivial_assign (type)’ is ‘true’
!      then the trait is ‘true’, else if TYPE is a cv-qualified class or
       union type with copy assignment operators that are known not to
!      throw an exception then the trait is ‘true’, else it is ‘false’.
       Requires: TYPE shall be a complete type, (possibly cv-qualified)
!      ‘void’, or an array of unknown bound.
  
   -- Built-in Function: bool __has_nothrow_copy (TYPE)
!      If ‘__has_trivial_copy (type)’ is ‘true’ then the trait is ‘true’,
       else if TYPE is a cv-qualified class or union type with copy
       constructors that are known not to throw an exception then the
!      trait is ‘true’, else it is ‘false’.  Requires: TYPE shall be a
!      complete type, (possibly cv-qualified) ‘void’, or an array of
       unknown bound.
  
   -- Built-in Function: bool __has_nothrow_constructor (TYPE)
!      If ‘__has_trivial_constructor (type)’ is ‘true’ then the trait is
!      ‘true’, else if TYPE is a cv class or union type (or array thereof)
       with a default constructor that is known not to throw an exception
!      then the trait is ‘true’, else it is ‘false’.  Requires: TYPE shall
!      be a complete type, (possibly cv-qualified) ‘void’, or an array of
       unknown bound.
  
   -- Built-in Function: bool __has_trivial_assign (TYPE)
!      If TYPE is ‘const’- qualified or is a reference type then the trait
!      is ‘false’.  Otherwise if ‘__is_trivial (type)’ is ‘true’ then the
!      trait is ‘true’, else if TYPE is a cv-qualified class or union type
       with a trivial copy assignment ([class.copy]) then the trait is
!      ‘true’, else it is ‘false’.  Requires: TYPE shall be a complete
!      type, (possibly cv-qualified) ‘void’, or an array of unknown bound.
  
   -- Built-in Function: bool __has_trivial_copy (TYPE)
!      If ‘__is_trivial (type)’ is ‘true’ or TYPE is a reference type then
!      the trait is ‘true’, else if TYPE is a cv class or union type with
!      a trivial copy constructor ([class.copy]) then the trait is ‘true’,
!      else it is ‘false’.  Requires: TYPE shall be a complete type,
!      (possibly cv-qualified) ‘void’, or an array of unknown bound.
  
   -- Built-in Function: bool __has_trivial_constructor (TYPE)
!      If ‘__is_trivial (type)’ is ‘true’ then the trait is ‘true’, else
       if TYPE is a cv-qualified class or union type (or array thereof)
       with a trivial default constructor ([class.ctor]) then the trait is
!      ‘true’, else it is ‘false’.  Requires: TYPE shall be a complete
!      type, (possibly cv-qualified) ‘void’, or an array of unknown bound.
  
   -- Built-in Function: bool __has_trivial_destructor (TYPE)
!      If ‘__is_trivial (type)’ is ‘true’ or TYPE is a reference type then
!      the trait is ‘true’, else if TYPE is a cv class or union type (or
       array thereof) with a trivial destructor ([class.dtor]) then the
!      trait is ‘true’, else it is ‘false’.  Requires: TYPE shall be a
!      complete type, (possibly cv-qualified) ‘void’, or an array of
       unknown bound.
  
   -- Built-in Function: bool __has_virtual_destructor (TYPE)
       If TYPE is a class type with a virtual destructor ([class.dtor])
!      then the trait is ‘true’, else it is ‘false’.  Requires: If TYPE is
       a non-union class type, it shall be a complete type.
  
   -- Built-in Function: bool __is_abstract (TYPE)
       If TYPE is an abstract class ([class.abstract]) then the trait is
!      ‘true’, else it is ‘false’.  Requires: If TYPE is a non-union class
       type, it shall be a complete type.
  
   -- Built-in Function: bool __is_aggregate (TYPE)
!      If TYPE is an aggregate type ([dcl.init.aggr]) the trait is ‘true’,
!      else it is ‘false’.  Requires: If TYPE is a class type, it shall be
       a complete type.
  
   -- Built-in Function: bool __is_base_of (BASE_TYPE, DERIVED_TYPE)
       If BASE_TYPE is a base class of DERIVED_TYPE ([class.derived]) then
!      the trait is ‘true’, otherwise it is ‘false’.  Top-level
       cv-qualifications of BASE_TYPE and DERIVED_TYPE are ignored.  For
       the purposes of this trait, a class type is considered is own base.
!      Requires: if ‘__is_class (base_type)’ and ‘__is_class
!      (derived_type)’ are ‘true’ and BASE_TYPE and DERIVED_TYPE are not
       the same type (disregarding cv-qualifiers), DERIVED_TYPE shall be a
       complete type.  A diagnostic is produced if this requirement is not
       met.
  
   -- Built-in Function: bool __is_class (TYPE)
       If TYPE is a cv-qualified class type, and not a union type
!      ([basic.compound]) the trait is ‘true’, else it is ‘false’.
  
   -- Built-in Function: bool __is_empty (TYPE)
!      If ‘__is_class (type)’ is ‘false’ then the trait is ‘false’.
       Otherwise TYPE is considered empty if and only if: TYPE has no
       non-static data members, or all non-static data members, if any,
       are bit-fields of length 0, and TYPE has no virtual members, and
       TYPE has no virtual base classes, and TYPE has no base classes
!      BASE_TYPE for which ‘__is_empty (base_type)’ is ‘false’.  Requires:
       If TYPE is a non-union class type, it shall be a complete type.
  
   -- Built-in Function: bool __is_enum (TYPE)
       If TYPE is a cv enumeration type ([basic.compound]) the trait is
!      ‘true’, else it is ‘false’.
  
   -- Built-in Function: bool __is_final (TYPE)
!      If TYPE is a class or union type marked ‘final’, then the trait is
!      ‘true’, else it is ‘false’.  Requires: If TYPE is a class type, it
       shall be a complete type.
  
   -- Built-in Function: bool __is_literal_type (TYPE)
!      If TYPE is a literal type ([basic.types]) the trait is ‘true’, else
!      it is ‘false’.  Requires: TYPE shall be a complete type, (possibly
!      cv-qualified) ‘void’, or an array of unknown bound.
  
   -- Built-in Function: bool __is_pod (TYPE)
!      If TYPE is a cv POD type ([basic.types]) then the trait is ‘true’,
!      else it is ‘false’.  Requires: TYPE shall be a complete type,
!      (possibly cv-qualified) ‘void’, or an array of unknown bound.
  
   -- Built-in Function: bool __is_polymorphic (TYPE)
       If TYPE is a polymorphic class ([class.virtual]) then the trait is
!      ‘true’, else it is ‘false’.  Requires: If TYPE is a non-union class
       type, it shall be a complete type.
  
   -- Built-in Function: bool __is_standard_layout (TYPE)
       If TYPE is a standard-layout type ([basic.types]) the trait is
!      ‘true’, else it is ‘false’.  Requires: TYPE shall be a complete
       type, an array of complete types, or (possibly cv-qualified)
!      ‘void’.
  
   -- Built-in Function: bool __is_trivial (TYPE)
!      If TYPE is a trivial type ([basic.types]) the trait is ‘true’, else
!      it is ‘false’.  Requires: TYPE shall be a complete type, an array
!      of complete types, or (possibly cv-qualified) ‘void’.
  
   -- Built-in Function: bool __is_union (TYPE)
!      If TYPE is a cv union type ([basic.compound]) the trait is ‘true’,
!      else it is ‘false’.
  
   -- Built-in Function: bool __underlying_type (TYPE)
       The underlying type of TYPE.  Requires: TYPE shall be an
*************** pair of types).
*** 64188,64195 ****
   -- Built-in Function: bool __integer_pack (LENGTH)
       When used as the pattern of a pack expansion within a template
       definition, expands to a template argument pack containing integers
!      from '0' to 'LENGTH-1'.  This is provided for efficient
!      implementation of 'std::make_integer_sequence'.
  
  
  File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
--- 64199,64206 ----
   -- Built-in Function: bool __integer_pack (LENGTH)
       When used as the pattern of a pack expansion within a template
       definition, expands to a template argument pack containing integers
!      from ‘0’ to ‘LENGTH-1’.  This is provided for efficient
!      implementation of ‘std::make_integer_sequence’.
  
  
  File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
*************** rather than their type names.
*** 64206,64228 ****
  
   The following keywords are reserved for concepts.
  
! 'assumes'
       States an expression as an assumption, and if possible, verifies
!      that the assumption is valid.  For example, 'assume(n > 0)'.
  
! 'axiom'
       Introduces an axiom definition.  Axioms introduce requirements on
       values.
  
! 'forall'
       Introduces a universally quantified object in an axiom.  For
!      example, 'forall (int n) n + 0 == n'.
  
! 'concept'
       Introduces a concept definition.  Concepts are sets of syntactic
       and semantic requirements on types and their values.
  
! 'requires'
       Introduces constraints on template arguments or requirements for a
       member function of a class template.
  
--- 64217,64239 ----
  
   The following keywords are reserved for concepts.
  
! ‘assumes’
       States an expression as an assumption, and if possible, verifies
!      that the assumption is valid.  For example, ‘assume(n > 0)’.
  
! ‘axiom’
       Introduces an axiom definition.  Axioms introduce requirements on
       values.
  
! ‘forall’
       Introduces a universally quantified object in an axiom.  For
!      example, ‘forall (int n) n + 0 == n’.
  
! ‘concept’
       Introduces a concept definition.  Concepts are sets of syntactic
       and semantic requirements on types and their values.
  
! ‘requires’
       Introduces constraints on template arguments or requirements for a
       member function of a class template.
  
*************** used to simplify the writing of type tra
*** 64231,64237 ****
  traits are likely to be removed in the future.
  
   -- Built-in Function: bool __is_same (TYPE1, TYPE2)
!      A binary type trait: 'true' whenever the TYPE1 and TYPE2 refer to
       the same type.
  
  
--- 64242,64248 ----
  traits are likely to be removed in the future.
  
   -- Built-in Function: bool __is_same (TYPE1, TYPE2)
!      A binary type trait: ‘true’ whenever the TYPE1 and TYPE2 refer to
       the same type.
  
  
*************** superior alternatives.  Using the old fe
*** 64247,64253 ****
  some cases that the feature will be dropped in the future.  In other
  cases, the feature might be gone already.
  
!  G++ allows a virtual function returning 'void *' to be overridden by
  one returning a different pointer type.  This extension to the covariant
  return type rules is now deprecated and will be removed from a future
  version.
--- 64258,64264 ----
  some cases that the feature will be dropped in the future.  In other
  cases, the feature might be gone already.
  
!  G++ allows a virtual function returning ‘void *’ to be overridden by
  one returning a different pointer type.  This extension to the covariant
  return type rules is now deprecated and will be removed from a future
  version.
*************** and other places where they are not perm
*** 64257,64263 ****
  deprecated and will be removed from a future version of G++.
  
   G++ allows floating-point literals to appear in integral constant
! expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
  deprecated and will be removed from a future version.
  
   G++ allows static data members of const floating-point type to be
--- 64268,64274 ----
  deprecated and will be removed from a future version of G++.
  
   G++ allows floating-point literals to appear in integral constant
! expressions, e.g. ‘ enum E { e = int(2.2 * 3.7) } ’ This extension is
  deprecated and will be removed from a future version.
  
   G++ allows static data members of const floating-point type to be
*************** enumeration types so this extension has
*** 64267,64273 ****
  removed from a future version.
  
   G++ allows attributes to follow a parenthesized direct initializer,
! e.g. ' int f (0) __attribute__ ((something)); ' This extension has been
  ignored since G++ 3.3 and is deprecated.
  
   G++ allows anonymous structs and unions to have members that are not
--- 64278,64284 ----
  removed from a future version.
  
   G++ allows attributes to follow a parenthesized direct initializer,
! e.g. ‘ int f (0) __attribute__ ((something)); ’ This extension has been
  ignored since G++ 3.3 and is deprecated.
  
   G++ allows anonymous structs and unions to have members that are not
*************** backwards compatibilities.  _All such ba
*** 64289,64300 ****
  are liable to disappear in future versions of G++._  They should be
  considered deprecated.  *Note Deprecated Features::.
  
! 'Implicit C language'
!      Old C system header files did not contain an 'extern "C" {...}'
       scope to set the language.  On such systems, all system header
       files are implicitly scoped inside a C language scope.  Such
       headers must correctly prototype function argument types, there is
!      no leeway for '()' to indicate an unspecified set of arguments.
  
  
  File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
--- 64300,64311 ----
  are liable to disappear in future versions of G++._  They should be
  considered deprecated.  *Note Deprecated Features::.
  
! ‘Implicit C language’
!      Old C system header files did not contain an ‘extern "C" {...}’
       scope to set the language.  On such systems, all system header
       files are implicitly scoped inside a C language scope.  Such
       headers must correctly prototype function argument types, there is
!      no leeway for ‘()’ to indicate an unspecified set of arguments.
  
  
  File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
*************** provided by the "Objective-C 2.0" Apple/
*** 64356,64395 ****
  API is documented in the public header files of the GNU Objective-C
  runtime:
  
!    * 'objc/objc.h': this is the basic Objective-C header file, defining
!      the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
       have to include this header to do almost anything with Objective-C.
  
!    * 'objc/runtime.h': this header declares most of the public runtime
       API functions allowing you to inspect and manipulate the
       Objective-C runtime data structures.  These functions are fairly
       standardized across Objective-C runtimes and are almost identical
       to the Apple/NeXT Objective-C runtime ones.  It does not declare
       functions in some specialized areas (constructing and forwarding
       message invocations, threading) which are in the other headers
!      below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
!      use any of the functions, such as 'class_getName()', declared in
!      'objc/runtime.h'.
  
!    * 'objc/message.h': this header declares public functions used to
       construct, deconstruct and forward message invocations.  Because
       messaging is done in quite a different way on different runtimes,
       functions in this header are specific to the GNU Objective-C
       runtime implementation.
  
!    * 'objc/objc-exception.h': this header declares some public functions
       related to Objective-C exceptions.  For example functions in this
       header allow you to throw an Objective-C exception from plain C/C++
       code.
  
!    * 'objc/objc-sync.h': this header declares some public functions
!      related to the Objective-C '@synchronized()' syntax, allowing you
!      to emulate an Objective-C '@synchronized()' block in plain C/C++
       code.
  
!    * 'objc/thr.h': this header declares a public runtime API threading
       layer that is only provided by the GNU Objective-C runtime.  It
!      declares functions such as 'objc_mutex_lock()', which provide a
       platform-independent set of threading functions.
  
   The header files contain detailed documentation for each function in
--- 64367,64406 ----
  API is documented in the public header files of the GNU Objective-C
  runtime:
  
!    • ‘objc/objc.h’: this is the basic Objective-C header file, defining
!      the basic Objective-C types such as ‘id’, ‘Class’ and ‘BOOL’.  You
       have to include this header to do almost anything with Objective-C.
  
!    • ‘objc/runtime.h’: this header declares most of the public runtime
       API functions allowing you to inspect and manipulate the
       Objective-C runtime data structures.  These functions are fairly
       standardized across Objective-C runtimes and are almost identical
       to the Apple/NeXT Objective-C runtime ones.  It does not declare
       functions in some specialized areas (constructing and forwarding
       message invocations, threading) which are in the other headers
!      below.  You have to include ‘objc/objc.h’ and ‘objc/runtime.h’ to
!      use any of the functions, such as ‘class_getName()’, declared in
!      ‘objc/runtime.h’.
  
!    • ‘objc/message.h’: this header declares public functions used to
       construct, deconstruct and forward message invocations.  Because
       messaging is done in quite a different way on different runtimes,
       functions in this header are specific to the GNU Objective-C
       runtime implementation.
  
!    • ‘objc/objc-exception.h’: this header declares some public functions
       related to Objective-C exceptions.  For example functions in this
       header allow you to throw an Objective-C exception from plain C/C++
       code.
  
!    • ‘objc/objc-sync.h’: this header declares some public functions
!      related to the Objective-C ‘@synchronized()’ syntax, allowing you
!      to emulate an Objective-C ‘@synchronized()’ block in plain C/C++
       code.
  
!    • ‘objc/thr.h’: this header declares a public runtime API threading
       layer that is only provided by the GNU Objective-C runtime.  It
!      declares functions such as ‘objc_mutex_lock()’, which provide a
       platform-independent set of threading functions.
  
   The header files contain detailed documentation for each function in
*************** File: gcc.info,  Node: Traditional GNU O
*** 64404,64412 ****
  The GNU Objective-C runtime used to provide a different API, which we
  call the "traditional" GNU Objective-C runtime API. Functions belonging
  to this API are easy to recognize because they use a different naming
! convention, such as 'class_get_super_class()' (traditional API) instead
! of 'class_getSuperclass()' (modern API). Software using this API
! includes the file 'objc/objc-api.h' where it is declared.
  
   Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
  available.
--- 64415,64423 ----
  The GNU Objective-C runtime used to provide a different API, which we
  call the "traditional" GNU Objective-C runtime API. Functions belonging
  to this API are easy to recognize because they use a different naming
! convention, such as ‘class_get_super_class()’ (traditional API) instead
! of ‘class_getSuperclass()’ (modern API). Software using this API
! includes the file ‘objc/objc-api.h’ where it is declared.
  
   Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
  available.
*************** available.
*** 64414,64439 ****
  
  File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
  
! 8.2 '+load': Executing Code before 'main'
  =========================================
  
  This section is specific for the GNU Objective-C runtime.  If you are
  using a different runtime, you can skip it.
  
   The GNU Objective-C runtime provides a way that allows you to execute
! code before the execution of the program enters the 'main' function.
  The code is executed on a per-class and a per-category basis, through a
! special class method '+load'.
  
   This facility is very useful if you want to initialize global variables
  which can be accessed by the program directly, without sending a message
  to the class first.  The usual way to initialize global variables, in
! the '+initialize' method, might not be useful because '+initialize' is
  only called when the first message is sent to a class object, which in
  some cases could be too late.
  
!  Suppose for example you have a 'FileStream' class that declares
! 'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
  
  
       FileStream *Stdin = nil;
--- 64425,64450 ----
  
  File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
  
! 8.2 ‘+load’: Executing Code before ‘main’
  =========================================
  
  This section is specific for the GNU Objective-C runtime.  If you are
  using a different runtime, you can skip it.
  
   The GNU Objective-C runtime provides a way that allows you to execute
! code before the execution of the program enters the ‘main’ function.
  The code is executed on a per-class and a per-category basis, through a
! special class method ‘+load’.
  
   This facility is very useful if you want to initialize global variables
  which can be accessed by the program directly, without sending a message
  to the class first.  The usual way to initialize global variables, in
! the ‘+initialize’ method, might not be useful because ‘+initialize’ is
  only called when the first message is sent to a class object, which in
  some cases could be too late.
  
!  Suppose for example you have a ‘FileStream’ class that declares
! ‘Stdin’, ‘Stdout’ and ‘Stderr’ as global variables, like below:
  
  
       FileStream *Stdin = nil;
*************** some cases could be too late.
*** 64453,64468 ****
       @end
  
  
!  In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
! in '+initialize' occurs too late.  The programmer can send a message to
  one of these objects before the variables are actually initialized, thus
! sending messages to the 'nil' object.  The '+initialize' method which
  actually initializes the global variables is not invoked until the first
  message is sent to the class object.  The solution would require these
! variables to be initialized just before entering 'main'.
  
!  The correct solution of the above problem is to use the '+load' method
! instead of '+initialize':
  
  
       @implementation FileStream
--- 64464,64479 ----
       @end
  
  
!  In this example, the initialization of ‘Stdin’, ‘Stdout’ and ‘Stderr’
! in ‘+initialize’ occurs too late.  The programmer can send a message to
  one of these objects before the variables are actually initialized, thus
! sending messages to the ‘nil’ object.  The ‘+initialize’ method which
  actually initializes the global variables is not invoked until the first
  message is sent to the class object.  The solution would require these
! variables to be initialized just before entering ‘main’.
  
!  The correct solution of the above problem is to use the ‘+load’ method
! instead of ‘+initialize’:
  
  
       @implementation FileStream
*************** instead of '+initialize':
*** 64478,64491 ****
       @end
  
  
!  The '+load' is a method that is not overridden by categories.  If a
! class and a category of it both implement '+load', both methods are
  invoked.  This allows some additional initializations to be performed in
  a category.
  
!  This mechanism is not intended to be a replacement for '+initialize'.
  You should be aware of its limitations when you decide to use it instead
! of '+initialize'.
  
  * Menu:
  
--- 64489,64502 ----
       @end
  
  
!  The ‘+load’ is a method that is not overridden by categories.  If a
! class and a category of it both implement ‘+load’, both methods are
  invoked.  This allows some additional initializations to be performed in
  a category.
  
!  This mechanism is not intended to be a replacement for ‘+initialize’.
  You should be aware of its limitations when you decide to use it instead
! of ‘+initialize’.
  
  * Menu:
  
*************** of '+initialize'.
*** 64494,64548 ****
  
  File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
  
! 8.2.1 What You Can and Cannot Do in '+load'
  -------------------------------------------
  
! '+load' is to be used only as a last resort.  Because it is executed
  very early, most of the Objective-C runtime machinery will not be ready
! when '+load' is executed; hence '+load' works best for executing C code
  that is independent on the Objective-C runtime.
  
!  The '+load' implementation in the GNU runtime guarantees you the
  following things:
  
!    * you can write whatever C code you like;
  
!    * you can allocate and send messages to objects whose class is
       implemented in the same file;
  
!    * the '+load' implementation of all super classes of a class are
!      executed before the '+load' of that class is executed;
  
!    * the '+load' implementation of a class is executed before the
!      '+load' implementation of any category.
  
   In particular, the following things, even if they can work in a
  particular case, are not guaranteed:
  
!    * allocation of or sending messages to arbitrary objects;
  
!    * allocation of or sending messages to objects whose classes have a
       category implemented in the same file;
  
!    * sending messages to Objective-C constant strings ('@"this is a
!      constant string"');
  
!  You should make no assumptions about receiving '+load' in sibling
! classes when you write '+load' of a class.  The order in which sibling
! classes receive '+load' is not guaranteed.
  
!  The order in which '+load' and '+initialize' are called could be
  problematic if this matters.  If you don't allocate objects inside
! '+load', it is guaranteed that '+load' is called before '+initialize'.
! If you create an object inside '+load' the '+initialize' method of
! object's class is invoked even if '+load' was not invoked.  Note if you
! explicitly call '+load' on a class, '+initialize' will be called first.
  To avoid possible problems try to implement only one of these methods.
  
!  The '+load' method is also invoked when a bundle is dynamically loaded
  into your running program.  This happens automatically without any
  intervening operation from you.  When you write bundles and you need to
! write '+load' you can safely create and send messages to objects whose
  classes already exist in the running program.  The same restrictions as
  above apply to classes defined in bundle.
  
--- 64505,64559 ----
  
  File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
  
! 8.2.1 What You Can and Cannot Do in ‘+load’
  -------------------------------------------
  
! ‘+load’ is to be used only as a last resort.  Because it is executed
  very early, most of the Objective-C runtime machinery will not be ready
! when ‘+load’ is executed; hence ‘+load’ works best for executing C code
  that is independent on the Objective-C runtime.
  
!  The ‘+load’ implementation in the GNU runtime guarantees you the
  following things:
  
!    • you can write whatever C code you like;
  
!    • you can allocate and send messages to objects whose class is
       implemented in the same file;
  
!    • the ‘+load’ implementation of all super classes of a class are
!      executed before the ‘+load’ of that class is executed;
  
!    • the ‘+load’ implementation of a class is executed before the
!      ‘+load’ implementation of any category.
  
   In particular, the following things, even if they can work in a
  particular case, are not guaranteed:
  
!    • allocation of or sending messages to arbitrary objects;
  
!    • allocation of or sending messages to objects whose classes have a
       category implemented in the same file;
  
!    • sending messages to Objective-C constant strings (‘@"this is a
!      constant string"’);
  
!  You should make no assumptions about receiving ‘+load’ in sibling
! classes when you write ‘+load’ of a class.  The order in which sibling
! classes receive ‘+load’ is not guaranteed.
  
!  The order in which ‘+load’ and ‘+initialize’ are called could be
  problematic if this matters.  If you don't allocate objects inside
! ‘+load’, it is guaranteed that ‘+load’ is called before ‘+initialize’.
! If you create an object inside ‘+load’ the ‘+initialize’ method of
! object's class is invoked even if ‘+load’ was not invoked.  Note if you
! explicitly call ‘+load’ on a class, ‘+initialize’ will be called first.
  To avoid possible problems try to implement only one of these methods.
  
!  The ‘+load’ method is also invoked when a bundle is dynamically loaded
  into your running program.  This happens automatically without any
  intervening operation from you.  When you write bundles and you need to
! write ‘+load’ you can safely create and send messages to objects whose
  classes already exist in the running program.  The same restrictions as
  above apply to classes defined in bundle.
  
*************** selectors and methods and about objects
*** 64562,64595 ****
  
   The types are encoded in the following way:
  
! '_Bool'            'B'
! 'char'             'c'
! 'unsigned char'    'C'
! 'short'            's'
! 'unsigned short'   'S'
! 'int'              'i'
! 'unsigned int'     'I'
! 'long'             'l'
! 'unsigned long'    'L'
! 'long long'        'q'
! 'unsigned long     'Q'
! long'
! 'float'            'f'
! 'double'           'd'
! 'long double'      'D'
! 'void'             'v'
! 'id'               '@'
! 'Class'            '#'
! 'SEL'              ':'
! 'char*'            '*'
! 'enum'             an 'enum' is encoded exactly as the integer type
                     that the compiler uses for it, which depends on the
                     enumeration values.  Often the compiler users
!                    'unsigned int', which is then encoded as 'I'.
! unknown type       '?'
! Complex types      'j' followed by the inner type.  For example
!                    '_Complex double' is encoded as "jd".
! bit-fields         'b' followed by the starting position of the
                     bit-field, the type of the bit-field and the size of
                     the bit-field (the bit-fields encoding was changed
                     from the NeXT's compiler encoding, see below)
--- 64573,64606 ----
  
   The types are encoded in the following way:
  
! ‘_Bool’            ‘B’
! ‘char’             ‘c’
! ‘unsigned char’    ‘C’
! ‘short’            ‘s’
! ‘unsigned short’   ‘S’
! ‘int’              ‘i’
! ‘unsigned int’     ‘I’
! ‘long’             ‘l’
! ‘unsigned long’    ‘L’
! ‘long long’        ‘q’
! ‘unsigned long     ‘Q’
! long’
! ‘float’            ‘f’
! ‘double’           ‘d’
! ‘long double’      ‘D’
! ‘void’             ‘v’
! ‘id’               ‘@’
! ‘Class’            ‘#’
! ‘SEL’              ‘:’
! ‘char*’            ‘*’
! ‘enum’             an ‘enum’ is encoded exactly as the integer type
                     that the compiler uses for it, which depends on the
                     enumeration values.  Often the compiler users
!                    ‘unsigned int’, which is then encoded as ‘I’.
! unknown type       ‘?’
! Complex types      ‘j’ followed by the inner type.  For example
!                    ‘_Complex double’ is encoded as "jd".
! bit-fields         ‘b’ followed by the starting position of the
                     bit-field, the type of the bit-field and the size of
                     the bit-field (the bit-fields encoding was changed
                     from the NeXT's compiler encoding, see below)
*************** bit closest to the beginning of the stru
*** 64610,64628 ****
  
   The non-atomic types are encoded as follows:
  
! pointers       '^' followed by the pointed type.
! arrays         '[' followed by the number of elements in the array
!                followed by the type of the elements followed by ']'
! structures     '{' followed by the name of the structure (or '?' if the
!                structure is unnamed), the '=' sign, the type of the
!                members and by '}'
! unions         '(' followed by the name of the structure (or '?' if the
!                union is unnamed), the '=' sign, the type of the members
!                followed by ')'
! vectors        '![' followed by the vector_size (the number of bytes
                 composing the vector) followed by a comma, followed by
                 the alignment (in bytes) of the vector, followed by the
!                type of the elements followed by ']'
  
   Here are some types and their encodings, as they are generated by the
  compiler on an i386 machine:
--- 64621,64639 ----
  
   The non-atomic types are encoded as follows:
  
! pointers       ‘^’ followed by the pointed type.
! arrays         ‘[’ followed by the number of elements in the array
!                followed by the type of the elements followed by ‘]’
! structures     ‘{’ followed by the name of the structure (or ‘?’ if the
!                structure is unnamed), the ‘=’ sign, the type of the
!                members and by ‘}’
! unions         ‘(’ followed by the name of the structure (or ‘?’ if the
!                union is unnamed), the ‘=’ sign, the type of the members
!                followed by ‘)’
! vectors        ‘![’ followed by the vector_size (the number of bytes
                 composing the vector) followed by a comma, followed by
                 the alignment (in bytes) of the vector, followed by the
!                type of the elements followed by ‘]’
  
   Here are some types and their encodings, as they are generated by the
  compiler on an i386 machine:
*************** compiler on an i386 machine:
*** 64630,64644 ****
  
  Objective-C type                            Compiler encoding
  --------------------------------------------------------------------------
!      int a[10];                             '[10i]'
!      struct {                               '{?=i[3f]b128i3b131i2c}'
         int i;
         float f[3];
         int a:3;
         int b:2;
         char c;
       }
!      int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment
                                              depends on the machine)
  
  
--- 64641,64655 ----
  
  Objective-C type                            Compiler encoding
  --------------------------------------------------------------------------
!      int a[10];                             ‘[10i]’
!      struct {                               ‘{?=i[3f]b128i3b131i2c}’
         int i;
         float f[3];
         int a:3;
         int b:2;
         char c;
       }
!      int a __attribute__ ((vector_size (16)));‘![16,16i]’ (alignment
                                              depends on the machine)
  
  
*************** specifiers:
*** 64649,64690 ****
  
  Specifier          Encoding
  --------------------------------------------------------------------------
! 'const'            'r'
! 'in'               'n'
! 'inout'            'N'
! 'out'              'o'
! 'bycopy'           'O'
! 'byref'            'R'
! 'oneway'           'V'
  
  
   The type specifiers are encoded just before the type.  Unlike types
  however, the type specifiers are only encoded when they appear in method
  argument types.
  
!  Note how 'const' interacts with pointers:
  
  
  Objective-C type   Compiler encoding
  --------------------------------------------------------------------------
!      const int     'ri'
!      const int*    '^ri'
!      int *const    'r^i'
  
  
!  'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
! 'int* const', instead, is a 'const' pointer to an 'int', and so is
! encoded as 'r^i'.
  
!  Finally, there is a complication when encoding 'const char *' versus
! 'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
! there is no way to express the fact that 'r' applies to the pointer or
  to the pointee.
  
!  Hence, it is assumed as a convention that 'r*' means 'const char *'
  (since it is what is most often meant), and there is no way to encode
! 'char *const'.  'char *const' would simply be encoded as '*', and the
! 'const' is lost.
  
  * Menu:
  
--- 64660,64701 ----
  
  Specifier          Encoding
  --------------------------------------------------------------------------
! ‘const’            ‘r’
! ‘in’               ‘n’
! ‘inout’            ‘N’
! ‘out’              ‘o’
! ‘bycopy’           ‘O’
! ‘byref’            ‘R’
! ‘oneway’           ‘V’
  
  
   The type specifiers are encoded just before the type.  Unlike types
  however, the type specifiers are only encoded when they appear in method
  argument types.
  
!  Note how ‘const’ interacts with pointers:
  
  
  Objective-C type   Compiler encoding
  --------------------------------------------------------------------------
!      const int     ‘ri’
!      const int*    ‘^ri’
!      int *const    ‘r^i’
  
  
!  ‘const int*’ is a pointer to a ‘const int’, and so is encoded as ‘^ri’.
! ‘int* const’, instead, is a ‘const’ pointer to an ‘int’, and so is
! encoded as ‘r^i’.
  
!  Finally, there is a complication when encoding ‘const char *’ versus
! ‘char * const’.  Because ‘char *’ is encoded as ‘*’ and not as ‘^c’,
! there is no way to express the fact that ‘r’ applies to the pointer or
  to the pointee.
  
!  Hence, it is assumed as a convention that ‘r*’ means ‘const char *’
  (since it is what is most often meant), and there is no way to encode
! ‘char *const’.  ‘char *const’ would simply be encoded as ‘*’, and the
! ‘const’ is lost.
  
  * Menu:
  
*************** encoding code.  The NeXT runtime expects
*** 64703,64737 ****
  this historical format (compatible with GCC-3.3), so when using the NeXT
  runtime, GCC will introduce on purpose a number of incorrect encodings:
  
!    * the read-only qualifier of the pointee gets emitted before the '^'.
       The read-only qualifier of the pointer itself gets ignored, unless
       it is a typedef.  Also, the 'r' is only emitted for the outermost
       type.
  
!    * 32-bit longs are encoded as 'l' or 'L', but not always.  For
       typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
       field or a pointer.
  
!    * 'enum's are always encoded as 'i' (int) even if they are actually
       unsigned or long.
  
   In addition to that, the NeXT runtime uses a different encoding for
! bitfields.  It encodes them as 'b' followed by the size, without a bit
  offset or the underlying field type.
  
  
  File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
  
! 8.3.2 '@encode'
  ---------------
  
! GNU Objective-C supports the '@encode' syntax that allows you to create
! a type encoding from a C/Objective-C type.  For example, '@encode(int)'
! is compiled by the compiler into '"i"'.
  
!  '@encode' does not support type qualifiers other than 'const'.  For
! example, '@encode(const char*)' is valid and is compiled into '"r*"',
! while '@encode(bycopy char *)' is invalid and will cause a compilation
  error.
  
  
--- 64714,64748 ----
  this historical format (compatible with GCC-3.3), so when using the NeXT
  runtime, GCC will introduce on purpose a number of incorrect encodings:
  
!    • the read-only qualifier of the pointee gets emitted before the '^'.
       The read-only qualifier of the pointer itself gets ignored, unless
       it is a typedef.  Also, the 'r' is only emitted for the outermost
       type.
  
!    • 32-bit longs are encoded as 'l' or 'L', but not always.  For
       typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
       field or a pointer.
  
!    • ‘enum’s are always encoded as 'i' (int) even if they are actually
       unsigned or long.
  
   In addition to that, the NeXT runtime uses a different encoding for
! bitfields.  It encodes them as ‘b’ followed by the size, without a bit
  offset or the underlying field type.
  
  
  File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
  
! 8.3.2 ‘@encode’
  ---------------
  
! GNU Objective-C supports the ‘@encode’ syntax that allows you to create
! a type encoding from a C/Objective-C type.  For example, ‘@encode(int)’
! is compiled by the compiler into ‘"i"’.
  
!  ‘@encode’ does not support type qualifiers other than ‘const’.  For
! example, ‘@encode(const char*)’ is valid and is compiled into ‘"r*"’,
! while ‘@encode(bycopy char *)’ is invalid and will cause a compilation
  error.
  
  
*************** arguments.
*** 64757,64782 ****
  
   The "signature" is a null-terminated string, composed of the following:
  
!    * The return type, including type qualifiers.  For example, a method
!      returning 'int' would have 'i' here.
  
!    * The total size (in bytes) required to pass all the parameters.
!      This includes the two hidden parameters (the object 'self' and the
!      method selector '_cmd').
  
!    * Each argument, with the type encoding, followed by the offset (in
       bytes) of the argument in the list of parameters.
  
!  For example, a method with no arguments and returning 'int' would have
! the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
! interpreted as follows: the 'i' is the return type (an 'int'), the '8'
  is the total size of the parameters in bytes (two pointers each of size
! 4), the '@0' is the first parameter (an object at byte offset '0') and
! ':4' is the second parameter (a 'SEL' at byte offset '4').
  
   You can easily find more examples by running the "strings" program on
  an Objective-C object file compiled by GCC. You'll see a lot of strings
! that look very much like 'i8@0:4'.  They are signatures of Objective-C
  methods.
  
  
--- 64768,64793 ----
  
   The "signature" is a null-terminated string, composed of the following:
  
!    • The return type, including type qualifiers.  For example, a method
!      returning ‘int’ would have ‘i’ here.
  
!    • The total size (in bytes) required to pass all the parameters.
!      This includes the two hidden parameters (the object ‘self’ and the
!      method selector ‘_cmd’).
  
!    • Each argument, with the type encoding, followed by the offset (in
       bytes) of the argument in the list of parameters.
  
!  For example, a method with no arguments and returning ‘int’ would have
! the signature ‘i8@0:4’ if the size of a pointer is 4.  The signature is
! interpreted as follows: the ‘i’ is the return type (an ‘int’), the ‘8’
  is the total size of the parameters in bytes (two pointers each of size
! 4), the ‘@0’ is the first parameter (an object at byte offset ‘0’) and
! ‘:4’ is the second parameter (a ‘SEL’ at byte offset ‘4’).
  
   You can easily find more examples by running the "strings" program on
  an Objective-C object file compiled by GCC. You'll see a lot of strings
! that look very much like ‘i8@0:4’.  They are signatures of Objective-C
  methods.
  
  
*************** using a powerful conservative garbage co
*** 64793,64802 ****
  Boehm-Demers-Weiser conservative garbage collector.
  
   To enable the support for it you have to configure the compiler using
! an additional argument, '--enable-objc-gc'.  This will build the
  boehm-gc library, and build an additional runtime library which has
  several enhancements to support the garbage collector.  The new library
! has a new name, 'libobjc_gc.a' to not conflict with the
  non-garbage-collected library.
  
   When the garbage collector is used, the objects are allocated using the
--- 64804,64813 ----
  Boehm-Demers-Weiser conservative garbage collector.
  
   To enable the support for it you have to configure the compiler using
! an additional argument, ‘--enable-objc-gc’.  This will build the
  boehm-gc library, and build an additional runtime library which has
  several enhancements to support the garbage collector.  The new library
! has a new name, ‘libobjc_gc.a’ to not conflict with the
  non-garbage-collected library.
  
   When the garbage collector is used, the objects are allocated using the
*************** on where pointers are located inside obj
*** 64806,64819 ****
  computed once per class, immediately after the class has been
  initialized.
  
!  There is a new runtime function 'class_ivar_set_gcinvisible()' which
! can be used to declare a so-called "weak pointer" reference.  Such a
  pointer is basically hidden for the garbage collector; this can be
  useful in certain situations, especially when you want to keep track of
  the allocated objects, yet allow them to be collected.  This kind of
  pointers can only be members of objects, you cannot declare a global
  pointer as a weak reference.  Every type which is a pointer type can be
! declared a weak pointer, including 'id', 'Class' and 'SEL'.
  
   Here is an example of how to use this feature.  Suppose you want to
  implement a class whose instances hold a weak pointer reference; the
--- 64817,64830 ----
  computed once per class, immediately after the class has been
  initialized.
  
!  There is a new runtime function ‘class_ivar_set_gcinvisible()’ which
! can be used to declare a so-called “weak pointer” reference.  Such a
  pointer is basically hidden for the garbage collector; this can be
  useful in certain situations, especially when you want to keep track of
  the allocated objects, yet allow them to be collected.  This kind of
  pointers can only be members of objects, you cannot declare a global
  pointer as a weak reference.  Every type which is a pointer type can be
! declared a weak pointer, including ‘id’, ‘Class’ and ‘SEL’.
  
   Here is an example of how to use this feature.  Suppose you want to
  implement a class whose instances hold a weak pointer reference; the
*************** following class does this:
*** 64853,64859 ****
  
  
   Weak pointers are supported through a new type character specifier
! represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
  function adds or removes this specifier to the string type description
  of the instance variable named as argument.
  
--- 64864,64870 ----
  
  
   Weak pointers are supported through a new type character specifier
! represented by the ‘!’ character.  The ‘class_ivar_set_gcinvisible()’
  function adds or removes this specifier to the string type description
  of the instance variable named as argument.
  
*************** File: gcc.info,  Node: Constant string o
*** 64865,64884 ****
  
  GNU Objective-C provides constant string objects that are generated
  directly by the compiler.  You declare a constant string object by
! prefixing a C constant string with the character '@':
  
         id myString = @"this is a constant string object";
  
   The constant string objects are by default instances of the
! 'NXConstantString' class which is provided by the GNU Objective-C
  runtime.  To get the definition of this class you must include the
! 'objc/NXConstStr.h' header file.
  
   User defined libraries may want to implement their own constant string
  class.  To be able to support them, the GNU Objective-C compiler
  provides a new command line options
! '-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
! to a strict structure, the same as 'NXConstantString''s structure:
  
  
       @interface MyConstantStringClass
--- 64876,64895 ----
  
  GNU Objective-C provides constant string objects that are generated
  directly by the compiler.  You declare a constant string object by
! prefixing a C constant string with the character ‘@’:
  
         id myString = @"this is a constant string object";
  
   The constant string objects are by default instances of the
! ‘NXConstantString’ class which is provided by the GNU Objective-C
  runtime.  To get the definition of this class you must include the
! ‘objc/NXConstStr.h’ header file.
  
   User defined libraries may want to implement their own constant string
  class.  To be able to support them, the GNU Objective-C compiler
  provides a new command line options
! ‘-fconstant-string-class=CLASS-NAME’.  The provided class should adhere
! to a strict structure, the same as ‘NXConstantString’'s structure:
  
  
       @interface MyConstantStringClass
*************** to a strict structure, the same as 'NXCo
*** 64890,64914 ****
       @end
  
  
!  'NXConstantString' inherits from 'Object'; user class libraries may
  choose to inherit the customized constant string class from a different
! class than 'Object'.  There is no requirement in the methods the
  constant string class has to implement, but the final ivar layout of the
  class must be the compatible with the given structure.
  
   When the compiler creates the statically allocated constant string
! object, the 'c_string' field will be filled by the compiler with the
! string; the 'length' field will be filled by the compiler with the
! string length; the 'isa' pointer will be filled with 'NULL' by the
  compiler, and it will later be fixed up automatically at runtime by the
  GNU Objective-C runtime library to point to the class which was set by
! the '-fconstant-string-class' option when the object file is loaded (if
  you wonder how it works behind the scenes, the name of the class to use,
  and the list of static objects to fixup, are stored by the compiler in
  the object file in a place where the GNU runtime library will find them
  at runtime).
  
!  As a result, when a file is compiled with the '-fconstant-string-class'
  option, all the constant string objects will be instances of the class
  specified as argument to this option.  It is possible to have multiple
  compilation units referring to different constant string classes,
--- 64901,64925 ----
       @end
  
  
!  ‘NXConstantString’ inherits from ‘Object’; user class libraries may
  choose to inherit the customized constant string class from a different
! class than ‘Object’.  There is no requirement in the methods the
  constant string class has to implement, but the final ivar layout of the
  class must be the compatible with the given structure.
  
   When the compiler creates the statically allocated constant string
! object, the ‘c_string’ field will be filled by the compiler with the
! string; the ‘length’ field will be filled by the compiler with the
! string length; the ‘isa’ pointer will be filled with ‘NULL’ by the
  compiler, and it will later be fixed up automatically at runtime by the
  GNU Objective-C runtime library to point to the class which was set by
! the ‘-fconstant-string-class’ option when the object file is loaded (if
  you wonder how it works behind the scenes, the name of the class to use,
  and the list of static objects to fixup, are stored by the compiler in
  the object file in a place where the GNU runtime library will find them
  at runtime).
  
!  As a result, when a file is compiled with the ‘-fconstant-string-class’
  option, all the constant string objects will be instances of the class
  specified as argument to this option.  It is possible to have multiple
  compilation units referring to different constant string classes,
*************** this.
*** 64918,64940 ****
  
  File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
  
! 8.6 'compatibility_alias'
  =========================
  
! The keyword '@compatibility_alias' allows you to define a class name as
  equivalent to another class name.  For example:
  
       @compatibility_alias WOApplication GSWApplication;
  
!  tells the compiler that each time it encounters 'WOApplication' as a
! class name, it should replace it with 'GSWApplication' (that is,
! 'WOApplication' is just an alias for 'GSWApplication').
  
   There are some constraints on how this can be used--
  
!    * 'WOApplication' (the alias) must not be an existing class;
  
!    * 'GSWApplication' (the real class) must be an existing class.
  
  
  File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
--- 64929,64951 ----
  
  File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
  
! 8.6 ‘compatibility_alias’
  =========================
  
! The keyword ‘@compatibility_alias’ allows you to define a class name as
  equivalent to another class name.  For example:
  
       @compatibility_alias WOApplication GSWApplication;
  
!  tells the compiler that each time it encounters ‘WOApplication’ as a
! class name, it should replace it with ‘GSWApplication’ (that is,
! ‘WOApplication’ is just an alias for ‘GSWApplication’).
  
   There are some constraints on how this can be used--
  
!    • ‘WOApplication’ (the alias) must not be an existing class;
  
!    • ‘GSWApplication’ (the real class) must be an existing class.
  
  
  File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
*************** in the following example:
*** 64969,65013 ****
           ...
         }
  
!  The '@throw' statement may appear anywhere in an Objective-C or
! Objective-C++ program; when used inside of a '@catch' block, the
! '@throw' may appear without an argument (as shown above), in which case
! the object caught by the '@catch' will be rethrown.
  
   Note that only (pointers to) Objective-C objects may be thrown and
  caught using this scheme.  When an object is thrown, it will be caught
! by the nearest '@catch' clause capable of handling objects of that type,
! analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
! ...)' clause (as shown above) may also be provided to catch any and all
! Objective-C exceptions not caught by previous '@catch' clauses (if any).
  
!  The '@finally' clause, if present, will be executed upon exit from the
! immediately preceding '@try ... @catch' section.  This will happen
  regardless of whether any exceptions are thrown, caught or rethrown
! inside the '@try ... @catch' section, analogously to the behavior of the
! 'finally' clause in Java.
  
   There are several caveats to using the new exception mechanism:
  
!    * The '-fobjc-exceptions' command line option must be used when
       compiling Objective-C files that use exceptions.
  
!    * With the GNU runtime, exceptions are always implemented as "native"
!      exceptions and it is recommended that the '-fexceptions' and
!      '-shared-libgcc' options are used when linking.
  
!    * With the NeXT runtime, although currently designed to be binary
!      compatible with 'NS_HANDLER'-style idioms provided by the
!      'NSException' class, the new exceptions can only be used on Mac OS
       X 10.3 (Panther) and later systems, due to additional functionality
       needed in the NeXT Objective-C runtime.
  
!    * As mentioned above, the new exceptions do not support handling
       types other than Objective-C objects.  Furthermore, when used from
       Objective-C++, the Objective-C exception model does not
       interoperate with C++ exceptions at this time.  This means you
!      cannot '@throw' an exception from Objective-C and 'catch' it in
!      C++, or vice versa (i.e., 'throw ... @catch').
  
  
  File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
--- 64980,65024 ----
           ...
         }
  
!  The ‘@throw’ statement may appear anywhere in an Objective-C or
! Objective-C++ program; when used inside of a ‘@catch’ block, the
! ‘@throw’ may appear without an argument (as shown above), in which case
! the object caught by the ‘@catch’ will be rethrown.
  
   Note that only (pointers to) Objective-C objects may be thrown and
  caught using this scheme.  When an object is thrown, it will be caught
! by the nearest ‘@catch’ clause capable of handling objects of that type,
! analogously to how ‘catch’ blocks work in C++ and Java.  A ‘@catch(id
! ...)’ clause (as shown above) may also be provided to catch any and all
! Objective-C exceptions not caught by previous ‘@catch’ clauses (if any).
  
!  The ‘@finally’ clause, if present, will be executed upon exit from the
! immediately preceding ‘@try ... @catch’ section.  This will happen
  regardless of whether any exceptions are thrown, caught or rethrown
! inside the ‘@try ... @catch’ section, analogously to the behavior of the
! ‘finally’ clause in Java.
  
   There are several caveats to using the new exception mechanism:
  
!    • The ‘-fobjc-exceptions’ command line option must be used when
       compiling Objective-C files that use exceptions.
  
!    • With the GNU runtime, exceptions are always implemented as "native"
!      exceptions and it is recommended that the ‘-fexceptions’ and
!      ‘-shared-libgcc’ options are used when linking.
  
!    • With the NeXT runtime, although currently designed to be binary
!      compatible with ‘NS_HANDLER’-style idioms provided by the
!      ‘NSException’ class, the new exceptions can only be used on Mac OS
       X 10.3 (Panther) and later systems, due to additional functionality
       needed in the NeXT Objective-C runtime.
  
!    • As mentioned above, the new exceptions do not support handling
       types other than Objective-C objects.  Furthermore, when used from
       Objective-C++, the Objective-C exception model does not
       interoperate with C++ exceptions at this time.  This means you
!      cannot ‘@throw’ an exception from Objective-C and ‘catch’ it in
!      C++, or vice versa (i.e., ‘throw ... @catch’).
  
  
  File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
*************** GNU Objective-C provides support for syn
*** 65021,65043 ****
           ...
         }
  
!  Upon entering the '@synchronized' block, a thread of execution shall
! first check whether a lock has been placed on the corresponding 'guard'
  object by another thread.  If it has, the current thread shall wait
! until the other thread relinquishes its lock.  Once 'guard' becomes
  available, the current thread will place its own lock on it, execute the
! code contained in the '@synchronized' block, and finally relinquish the
! lock (thereby making 'guard' available to other threads).
  
   Unlike Java, Objective-C does not allow for entire methods to be marked
! '@synchronized'.  Note that throwing exceptions out of '@synchronized'
  blocks is allowed, and will cause the guarding object to be unlocked
  properly.
  
   Because of the interactions between synchronization and exception
! handling, you can only use '@synchronized' when compiling with
  exceptions enabled, that is with the command line option
! '-fobjc-exceptions'.
  
  
  File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
--- 65032,65054 ----
           ...
         }
  
!  Upon entering the ‘@synchronized’ block, a thread of execution shall
! first check whether a lock has been placed on the corresponding ‘guard’
  object by another thread.  If it has, the current thread shall wait
! until the other thread relinquishes its lock.  Once ‘guard’ becomes
  available, the current thread will place its own lock on it, execute the
! code contained in the ‘@synchronized’ block, and finally relinquish the
! lock (thereby making ‘guard’ available to other threads).
  
   Unlike Java, Objective-C does not allow for entire methods to be marked
! ‘@synchronized’.  Note that throwing exceptions out of ‘@synchronized’
  blocks is allowed, and will cause the guarding object to be unlocked
  properly.
  
   Because of the interactions between synchronization and exception
! handling, you can only use ‘@synchronized’ when compiling with
  exceptions enabled, that is with the command line option
! ‘-fobjc-exceptions’.
  
  
  File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
*************** GNU Objective-C provides support for the
*** 65068,65086 ****
           /* Do something with 'object' */
         }
  
!  'array' needs to be an Objective-C object (usually a collection object,
  for example an array, a dictionary or a set) which implements the "Fast
  Enumeration Protocol" (see below).  If you are using a Foundation
  library such as GNUstep Base or Apple Cocoa Foundation, all collection
  objects in the library implement this protocol and can be used in this
  way.
  
!  The code above would iterate over all objects in 'array'.  For each of
! them, it assigns it to 'object', then executes the 'Do something with
! 'object'' statements.
  
   Here is a fully worked-out example using a Foundation library (which
! provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
  
         NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
         NSString *object;
--- 65079,65097 ----
           /* Do something with 'object' */
         }
  
!  ‘array’ needs to be an Objective-C object (usually a collection object,
  for example an array, a dictionary or a set) which implements the "Fast
  Enumeration Protocol" (see below).  If you are using a Foundation
  library such as GNUstep Base or Apple Cocoa Foundation, all collection
  objects in the library implement this protocol and can be used in this
  way.
  
!  The code above would iterate over all objects in ‘array’.  For each of
! them, it assigns it to ‘object’, then executes the ‘Do something with
! 'object'’ statements.
  
   Here is a fully worked-out example using a Foundation library (which
! provides the implementation of ‘NSArray’, ‘NSString’ and ‘NSLog’):
  
         NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
         NSString *object;
*************** A c99-like declaration syntax is also al
*** 65117,65123 ****
  
   but can save some typing.
  
!  Note that the option '-std=c99' is not required to allow this syntax in
  Objective-C.
  
  
--- 65128,65134 ----
  
   but can save some typing.
  
!  Note that the option ‘-std=c99’ is not required to allow this syntax in
  Objective-C.
  
  
*************** the code
*** 65136,65177 ****
  
   here is what happens when you run it:
  
!    * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
       used as the collection object to iterate over.  This means it is
!      safe to write code such as 'for (object in [NSDictionary
!      keyEnumerator]) ...'.
  
!    * the iteration is implemented by the compiler by repeatedly getting
       batches of objects from the collection object using the fast
       enumeration protocol (see below), then iterating over all objects
       in the batch.  This is faster than a normal enumeration where
       objects are retrieved one by one (hence the name "fast
       enumeration").
  
!    * if there are no objects in the collection, then 'OBJECT EXPRESSION'
!      is set to 'nil' and the loop immediately terminates.
  
!    * if there are objects in the collection, then for each object in the
!      collection (in the order they are returned) 'OBJECT EXPRESSION' is
!      set to the object, then 'STATEMENTS' are executed.
  
!    * 'STATEMENTS' can contain 'break' and 'continue' commands, which
       will abort the iteration or skip to the next loop iteration as
       expected.
  
!    * when the iteration ends because there are no more objects to
!      iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
!      to determine whether the iteration finished because a 'break'
!      command was used (in which case 'OBJECT EXPRESSION' will remain set
       to the last object that was iterated over) or because it iterated
!      over all the objects (in which case 'OBJECT EXPRESSION' will be set
!      to 'nil').
  
!    * 'STATEMENTS' must not make any changes to the collection object; if
       they do, it is a hard error and the fast enumeration terminates by
!      invoking 'objc_enumerationMutation', a runtime function that
       normally aborts the program but which can be customized by
!      Foundation libraries via 'objc_set_mutation_handler' to do
       something different, such as raising an exception.
  
  
--- 65147,65188 ----
  
   here is what happens when you run it:
  
!    • ‘COLLECTION EXPRESSION’ is evaluated exactly once and the result is
       used as the collection object to iterate over.  This means it is
!      safe to write code such as ‘for (object in [NSDictionary
!      keyEnumerator]) ...’.
  
!    • the iteration is implemented by the compiler by repeatedly getting
       batches of objects from the collection object using the fast
       enumeration protocol (see below), then iterating over all objects
       in the batch.  This is faster than a normal enumeration where
       objects are retrieved one by one (hence the name "fast
       enumeration").
  
!    • if there are no objects in the collection, then ‘OBJECT EXPRESSION’
!      is set to ‘nil’ and the loop immediately terminates.
  
!    • if there are objects in the collection, then for each object in the
!      collection (in the order they are returned) ‘OBJECT EXPRESSION’ is
!      set to the object, then ‘STATEMENTS’ are executed.
  
!    • ‘STATEMENTS’ can contain ‘break’ and ‘continue’ commands, which
       will abort the iteration or skip to the next loop iteration as
       expected.
  
!    • when the iteration ends because there are no more objects to
!      iterate over, ‘OBJECT EXPRESSION’ is set to ‘nil’.  This allows you
!      to determine whether the iteration finished because a ‘break’
!      command was used (in which case ‘OBJECT EXPRESSION’ will remain set
       to the last object that was iterated over) or because it iterated
!      over all the objects (in which case ‘OBJECT EXPRESSION’ will be set
!      to ‘nil’).
  
!    • ‘STATEMENTS’ must not make any changes to the collection object; if
       they do, it is a hard error and the fast enumeration terminates by
!      invoking ‘objc_enumerationMutation’, a runtime function that
       normally aborts the program but which can be customized by
!      Foundation libraries via ‘objc_set_mutation_handler’ to do
       something different, such as raising an exception.
  
  
*************** enumeration, you need to have it impleme
*** 65187,65193 ****
                                             objects: (id *)objects
                                               count: (unsigned long)len;
  
!  where 'NSFastEnumerationState' must be defined in your code as follows:
  
       typedef struct
       {
--- 65198,65204 ----
                                             objects: (id *)objects
                                               count: (unsigned long)len;
  
!  where ‘NSFastEnumerationState’ must be defined in your code as follows:
  
       typedef struct
       {
*************** enumeration, you need to have it impleme
*** 65197,65207 ****
         unsigned long extra[5];
       } NSFastEnumerationState;
  
!  If no 'NSFastEnumerationState' is defined in your code, the compiler
! will automatically replace 'NSFastEnumerationState *' with 'struct
! __objcFastEnumerationState *', where that type is silently defined by
  the compiler in an identical way.  This can be confusing and we
! recommend that you define 'NSFastEnumerationState' (as shown above)
  instead.
  
   The method is called repeatedly during a fast enumeration to retrieve
--- 65208,65218 ----
         unsigned long extra[5];
       } NSFastEnumerationState;
  
!  If no ‘NSFastEnumerationState’ is defined in your code, the compiler
! will automatically replace ‘NSFastEnumerationState *’ with ‘struct
! __objcFastEnumerationState *’, where that type is silently defined by
  the compiler in an identical way.  This can be confusing and we
! recommend that you define ‘NSFastEnumerationState’ (as shown above)
  instead.
  
   The method is called repeatedly during a fast enumeration to retrieve
*************** batches of objects.  Each invocation of
*** 65209,65236 ****
  next batch of objects.
  
   The return value of the method is the number of objects in the current
! batch; this should not exceed 'len', which is the maximum size of a
  batch as requested by the caller.  The batch itself is returned in the
! 'itemsPtr' field of the 'NSFastEnumerationState' struct.
  
!  To help with returning the objects, the 'objects' array is a C array
! preallocated by the caller (on the stack) of size 'len'.  In many cases
! you can put the objects you want to return in that 'objects' array, then
! do 'itemsPtr = objects'.  But you don't have to; if your collection
  already has the objects to return in some form of C array, it could
  return them from there instead.
  
!  The 'state' and 'extra' fields of the 'NSFastEnumerationState'
  structure allows your collection object to keep track of the state of
! the enumeration.  In a simple array implementation, 'state' may keep
! track of the index of the last object that was returned, and 'extra' may
  be unused.
  
!  The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
  keep track of mutations.  It should point to a number; before working on
  each object, the fast enumeration loop will check that this number has
  not changed.  If it has, a mutation has happened and the fast
! enumeration will abort.  So, 'mutationsPtr' could be set to point to
  some sort of version number of your collection, which is increased by
  one every time there is a change (for example when an object is added or
  removed).  Or, if you are content with less strict mutation checks, it
--- 65220,65247 ----
  next batch of objects.
  
   The return value of the method is the number of objects in the current
! batch; this should not exceed ‘len’, which is the maximum size of a
  batch as requested by the caller.  The batch itself is returned in the
! ‘itemsPtr’ field of the ‘NSFastEnumerationState’ struct.
  
!  To help with returning the objects, the ‘objects’ array is a C array
! preallocated by the caller (on the stack) of size ‘len’.  In many cases
! you can put the objects you want to return in that ‘objects’ array, then
! do ‘itemsPtr = objects’.  But you don't have to; if your collection
  already has the objects to return in some form of C array, it could
  return them from there instead.
  
!  The ‘state’ and ‘extra’ fields of the ‘NSFastEnumerationState’
  structure allows your collection object to keep track of the state of
! the enumeration.  In a simple array implementation, ‘state’ may keep
! track of the index of the last object that was returned, and ‘extra’ may
  be unused.
  
!  The ‘mutationsPtr’ field of the ‘NSFastEnumerationState’ is used to
  keep track of mutations.  It should point to a number; before working on
  each object, the fast enumeration loop will check that this number has
  not changed.  If it has, a mutation has happened and the fast
! enumeration will abort.  So, ‘mutationsPtr’ could be set to point to
  some sort of version number of your collection, which is increased by
  one every time there is a change (for example when an object is added or
  removed).  Or, if you are content with less strict mutation checks, it
*************** could point to the number of objects in
*** 65238,65246 ****
  value that can be checked to perform an approximate check that the
  collection has not been mutated.
  
!  Finally, note how we declared the 'len' argument and the return value
! to be of type 'unsigned long'.  They could also be declared to be of
! type 'unsigned int' and everything would still work.
  
  
  File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
--- 65249,65257 ----
  value that can be checked to perform an approximate check that the
  collection has not been mutated.
  
!  Finally, note how we declared the ‘len’ argument and the return value
! to be of type ‘unsigned long’.  They could also be declared to be of
! type ‘unsigned int’ and everything would still work.
  
  
  File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
*************** designed to be portable, and so is based
*** 65256,65272 ****
  
   Sending a message in the GNU Objective-C runtime is composed of two
  separate steps.  First, there is a call to the lookup function,
! 'objc_msg_lookup ()' (or, in the case of messages to super,
! 'objc_msg_lookup_super ()').  This runtime function takes as argument
  the receiver and the selector of the method to be called; it returns the
! 'IMP', that is a pointer to the function implementing the method.  The
  second step of method invocation consists of casting this pointer
  function to the appropriate function pointer type, and calling the
  function pointed to it with the right arguments.
  
   For example, when the compiler encounters a method invocation such as
! '[object init]', it compiles it into a call to 'objc_msg_lookup (object,
! @selector(init))' followed by a cast of the returned value to the
  appropriate function pointer type, and then it calls it.
  
  * Menu:
--- 65267,65283 ----
  
   Sending a message in the GNU Objective-C runtime is composed of two
  separate steps.  First, there is a call to the lookup function,
! ‘objc_msg_lookup ()’ (or, in the case of messages to super,
! ‘objc_msg_lookup_super ()’).  This runtime function takes as argument
  the receiver and the selector of the method to be called; it returns the
! ‘IMP’, that is a pointer to the function implementing the method.  The
  second step of method invocation consists of casting this pointer
  function to the appropriate function pointer type, and calling the
  function pointed to it with the right arguments.
  
   For example, when the compiler encounters a method invocation such as
! ‘[object init]’, it compiles it into a call to ‘objc_msg_lookup (object,
! @selector(init))’ followed by a cast of the returned value to the
  appropriate function pointer type, and then it calls it.
  
  * Menu:
*************** File: gcc.info,  Node: Dynamically regis
*** 65280,65286 ****
  8.10.1 Dynamically Registering Methods
  --------------------------------------
  
! If 'objc_msg_lookup()' does not find a suitable method implementation,
  because the receiver does not implement the required method, it tries to
  see if the class can dynamically register the method.
  
--- 65291,65297 ----
  8.10.1 Dynamically Registering Methods
  --------------------------------------
  
! If ‘objc_msg_lookup()’ does not find a suitable method implementation,
  because the receiver does not implement the required method, it tries to
  see if the class can dynamically register the method.
  
*************** the method
*** 65295,65316 ****
  
   in the case of a class method.  If the class implements it, the runtime
  invokes it, passing as argument the selector of the original method, and
! if it returns 'YES', the runtime tries the lookup again, which could now
  succeed if a matching method was added dynamically by
! '+resolveInstanceMethod:' or '+resolveClassMethod:'.
  
   This allows classes to dynamically register methods (by adding them to
! the class using 'class_addMethod') when they are first called.  To do
! so, a class should implement '+resolveInstanceMethod:' (or, depending on
! the case, '+resolveClassMethod:') and have it recognize the selectors of
  methods that can be registered dynamically at runtime, register them,
! and return 'YES'.  It should return 'NO' for methods that it does not
  dynamically registered at runtime.
  
!  If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
! implemented or returns 'NO', the runtime then tries the forwarding hook.
  
!  Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
  added to the GNU Objective-C runtime in GCC version 4.6.
  
  
--- 65306,65327 ----
  
   in the case of a class method.  If the class implements it, the runtime
  invokes it, passing as argument the selector of the original method, and
! if it returns ‘YES’, the runtime tries the lookup again, which could now
  succeed if a matching method was added dynamically by
! ‘+resolveInstanceMethod:’ or ‘+resolveClassMethod:’.
  
   This allows classes to dynamically register methods (by adding them to
! the class using ‘class_addMethod’) when they are first called.  To do
! so, a class should implement ‘+resolveInstanceMethod:’ (or, depending on
! the case, ‘+resolveClassMethod:’) and have it recognize the selectors of
  methods that can be registered dynamically at runtime, register them,
! and return ‘YES’.  It should return ‘NO’ for methods that it does not
  dynamically registered at runtime.
  
!  If ‘+resolveInstanceMethod:’ (or ‘+resolveClassMethod:’) is not
! implemented or returns ‘NO’, the runtime then tries the forwarding hook.
  
!  Support for ‘+resolveInstanceMethod:’ and ‘resolveClassMethod:’ was
  added to the GNU Objective-C runtime in GCC version 4.6.
  
  
*************** File: gcc.info,  Node: Forwarding hook,
*** 65320,65372 ****
  ----------------------
  
  The GNU Objective-C runtime provides a hook, called
! '__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
  cannot find a method implementation in the runtime tables and after
! calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
  attempted and did not succeed in dynamically registering the method.
  
   To configure the hook, you set the global variable
! '__objc_msg_forward2' to a function with the same argument and return
! types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' cannot find a
  method implementation, it invokes the hook function you provided to get
  a method implementation to return.  So, in practice
! '__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
  some custom code that is called to do a further lookup when no standard
  method implementation can be found using the normal lookup.
  
   This hook is generally reserved for "Foundation" libraries such as
  GNUstep Base, which use it to implement their high-level method
! forwarding API, typically based around the 'forwardInvocation:' method.
  So, unless you are implementing your own "Foundation" library, you
  should not set this hook.
  
!  In a typical forwarding implementation, the '__objc_msg_forward2' hook
  function determines the argument and return type of the method that is
  being looked up, and then creates a function that takes these arguments
  and has that return type, and returns it to the caller.  Creating this
  function is non-trivial and is typically performed using a dedicated
! library such as 'libffi'.
  
   The forwarding method implementation thus created is returned by
! 'objc_msg_lookup()' and is executed as if it was a normal method
  implementation.  When the forwarding method implementation is called, it
  is usually expected to pack all arguments into some sort of object
! (typically, an 'NSInvocation' in a "Foundation" library), and hand it
! over to the programmer ('forwardInvocation:') who is then allowed to
  manipulate the method invocation using a high-level API provided by the
  "Foundation" library.  For example, the programmer may want to examine
  the method invocation arguments and name and potentially change them
  before forwarding the method invocation to one or more local objects
! ('performInvocation:') or even to remote objects (by using Distributed
  Objects or some other mechanism).  When all this completes, the return
  value is passed back and must be returned correctly to the original
  caller.
  
   Note that the GNU Objective-C runtime currently provides no support for
  method forwarding or method invocations other than the
! '__objc_msg_forward2' hook.
  
!  If the forwarding hook does not exist or returns 'NULL', the runtime
  currently attempts forwarding using an older, deprecated API, and if
  that fails, it aborts the program.  In future versions of the GNU
  Objective-C runtime, the runtime will immediately abort.
--- 65331,65383 ----
  ----------------------
  
  The GNU Objective-C runtime provides a hook, called
! ‘__objc_msg_forward2’, which is called by ‘objc_msg_lookup()’ when it
  cannot find a method implementation in the runtime tables and after
! calling ‘+resolveInstanceMethod:’ and ‘+resolveClassMethod:’ has been
  attempted and did not succeed in dynamically registering the method.
  
   To configure the hook, you set the global variable
! ‘__objc_msg_forward2’ to a function with the same argument and return
! types of ‘objc_msg_lookup()’.  When ‘objc_msg_lookup()’ cannot find a
  method implementation, it invokes the hook function you provided to get
  a method implementation to return.  So, in practice
! ‘__objc_msg_forward2’ allows you to extend ‘objc_msg_lookup()’ by adding
  some custom code that is called to do a further lookup when no standard
  method implementation can be found using the normal lookup.
  
   This hook is generally reserved for "Foundation" libraries such as
  GNUstep Base, which use it to implement their high-level method
! forwarding API, typically based around the ‘forwardInvocation:’ method.
  So, unless you are implementing your own "Foundation" library, you
  should not set this hook.
  
!  In a typical forwarding implementation, the ‘__objc_msg_forward2’ hook
  function determines the argument and return type of the method that is
  being looked up, and then creates a function that takes these arguments
  and has that return type, and returns it to the caller.  Creating this
  function is non-trivial and is typically performed using a dedicated
! library such as ‘libffi’.
  
   The forwarding method implementation thus created is returned by
! ‘objc_msg_lookup()’ and is executed as if it was a normal method
  implementation.  When the forwarding method implementation is called, it
  is usually expected to pack all arguments into some sort of object
! (typically, an ‘NSInvocation’ in a "Foundation" library), and hand it
! over to the programmer (‘forwardInvocation:’) who is then allowed to
  manipulate the method invocation using a high-level API provided by the
  "Foundation" library.  For example, the programmer may want to examine
  the method invocation arguments and name and potentially change them
  before forwarding the method invocation to one or more local objects
! (‘performInvocation:’) or even to remote objects (by using Distributed
  Objects or some other mechanism).  When all this completes, the return
  value is passed back and must be returned correctly to the original
  caller.
  
   Note that the GNU Objective-C runtime currently provides no support for
  method forwarding or method invocations other than the
! ‘__objc_msg_forward2’ hook.
  
!  If the forwarding hook does not exist or returns ‘NULL’, the runtime
  currently attempts forwarding using an older, deprecated API, and if
  that fails, it aborts the program.  In future versions of the GNU
  Objective-C runtime, the runtime will immediately abort.
*************** File: gcc.info,  Node: Compatibility,  N
*** 65379,65385 ****
  
  Binary compatibility encompasses several related concepts:
  
! "application binary interface (ABI)"
       The set of runtime conventions followed by all of the tools that
       deal with binary representations of a program, including compilers,
       assemblers, linkers, and language runtime support.  Some ABIs are
--- 65390,65396 ----
  
  Binary compatibility encompasses several related concepts:
  
! “application binary interface (ABI)”
       The set of runtime conventions followed by all of the tools that
       deal with binary representations of a program, including compilers,
       assemblers, linkers, and language runtime support.  Some ABIs are
*************** Binary compatibility encompasses several
*** 65387,65393 ****
       interested parties.  Others are simply the way things are actually
       done by a particular set of tools.
  
! "ABI conformance"
       A compiler conforms to an ABI if it generates code that follows all
       of the specifications enumerated by that ABI.  A library conforms
       to an ABI if it is implemented according to that ABI.  An
--- 65398,65404 ----
       interested parties.  Others are simply the way things are actually
       done by a particular set of tools.
  
! “ABI conformance”
       A compiler conforms to an ABI if it generates code that follows all
       of the specifications enumerated by that ABI.  A library conforms
       to an ABI if it is implemented according to that ABI.  An
*************** Binary compatibility encompasses several
*** 65395,65405 ****
       conform to that ABI and does not contain source code that
       specifically changes behavior specified by the ABI.
  
! "calling conventions"
       Calling conventions are a subset of an ABI that specify of how
       arguments are passed and function results are returned.
  
! "interoperability"
       Different sets of tools are interoperable if they generate files
       that can be used in the same program.  The set of tools includes
       compilers, assemblers, linkers, libraries, header files, startup
--- 65406,65416 ----
       conform to that ABI and does not contain source code that
       specifically changes behavior specified by the ABI.
  
! “calling conventions”
       Calling conventions are a subset of an ABI that specify of how
       arguments are passed and function results are returned.
  
! “interoperability”
       Different sets of tools are interoperable if they generate files
       that can be used in the same program.  The set of tools includes
       compilers, assemblers, linkers, libraries, header files, startup
*************** Binary compatibility encompasses several
*** 65408,65426 ****
       applies to different versions of the same tools as well as tools
       from different vendors.
  
! "intercallability"
       Whether a function in a binary built by one set of tools can call a
       function in a binary built by a different set of tools is a subset
       of interoperability.
  
! "implementation-defined features"
       Language standards include lists of implementation-defined features
       whose behavior can vary from one implementation to another.  Some
       of these features are normally covered by a platform's ABI and
       others are not.  The features that are not covered by an ABI
       generally affect how a program behaves, but not intercallability.
  
! "compatibility"
       Conformance to the same ABI and the same behavior of
       implementation-defined features are both relevant for
       compatibility.
--- 65419,65437 ----
       applies to different versions of the same tools as well as tools
       from different vendors.
  
! “intercallability”
       Whether a function in a binary built by one set of tools can call a
       function in a binary built by a different set of tools is a subset
       of interoperability.
  
! “implementation-defined features”
       Language standards include lists of implementation-defined features
       whose behavior can vary from one implementation to another.  Some
       of these features are normally covered by a platform's ABI and
       others are not.  The features that are not covered by an ABI
       generally affect how a program behaves, but not intercallability.
  
! “compatibility”
       Conformance to the same ABI and the same behavior of
       implementation-defined features are both relevant for
       compatibility.
*************** Binary compatibility encompasses several
*** 65428,65447 ****
   The application binary interface implemented by a C or C++ compiler
  affects code generation and runtime support for:
  
!    * size and alignment of data types
!    * layout of structured types
!    * calling conventions
!    * register usage conventions
!    * interfaces for runtime arithmetic support
!    * object file formats
  
   In addition, the application binary interface implemented by a C++
  compiler affects code generation and runtime support for:
!    * name mangling
!    * exception handling
!    * invoking constructors and destructors
!    * layout, alignment, and padding of classes
!    * layout and alignment of virtual tables
  
   Some GCC compilation options cause the compiler to generate code that
  does not conform to the platform's default ABI.  Other options cause
--- 65439,65458 ----
   The application binary interface implemented by a C or C++ compiler
  affects code generation and runtime support for:
  
!    • size and alignment of data types
!    • layout of structured types
!    • calling conventions
!    • register usage conventions
!    • interfaces for runtime arithmetic support
!    • object file formats
  
   In addition, the application binary interface implemented by a C++
  compiler affects code generation and runtime support for:
!    • name mangling
!    • exception handling
!    • invoking constructors and destructors
!    • layout, alignment, and padding of classes
!    • layout and alignment of virtual tables
  
   Some GCC compilation options cause the compiler to generate code that
  does not conform to the platform's default ABI.  Other options cause
*************** GCC releases, but it is possible that we
*** 65464,65470 ****
  make this difficult.  Such problems could include different
  interpretations of the C++ ABI by different vendors, bugs in the ABI, or
  bugs in the implementation of the ABI in different compilers.  GCC's
! '-Wabi' switch warns when G++ generates code that is probably not
  compatible with the C++ ABI.
  
   The C++ library used with a C++ compiler includes the Standard C++
--- 65475,65481 ----
  make this difficult.  Such problems could include different
  interpretations of the C++ ABI by different vendors, bugs in the ABI, or
  bugs in the implementation of the ABI in different compilers.  GCC's
! ‘-Wabi’ switch warns when G++ generates code that is probably not
  compatible with the C++ ABI.
  
   The C++ library used with a C++ compiler includes the Standard C++
*************** with those compilers can be used in the
*** 65483,65489 ****
  the same C++ library.  This requires specifying the location of the C++
  library header files when invoking the compiler whose usual library is
  not being used.  The location of GCC's C++ header files depends on how
! the GCC build was configured, but can be seen by using the G++ '-v'
  option.  With default configuration options for G++ 3.3 the compile line
  for a different C++ compiler needs to include
  
--- 65494,65500 ----
  the same C++ library.  This requires specifying the location of the C++
  library header files when invoking the compiler whose usual library is
  not being used.  The location of GCC's C++ header files depends on how
! the GCC build was configured, but can be seen by using the G++ ‘-v’
  option.  With default configuration options for G++ 3.3 the compile line
  for a different C++ compiler needs to include
  
*************** files for that other library.
*** 65495,65519 ****
  
   The most straightforward way to link a program to use a particular C++
  library is to use a C++ driver that specifies that C++ library by
! default.  The 'g++' driver, for example, tells the linker where to find
! GCC's C++ library ('libstdc++') plus the other libraries and startup
  files it needs, in the proper order.
  
   If a program must use a different C++ library and it's not possible to
  do the final link using a C++ driver that uses that library by default,
! it is necessary to tell 'g++' the location and name of that library.  It
  might also be necessary to specify different startup files and other
  runtime support libraries, and to suppress the use of GCC's support
! libraries with one or more of the options '-nostdlib', '-nostartfiles',
! and '-nodefaultlibs'.
  
  
  File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
  
! 10 'gcov'--a Test Coverage Program
  **********************************
  
! 'gcov' is a tool you can use in conjunction with GCC to test code
  coverage in your programs.
  
  * Menu:
--- 65506,65530 ----
  
   The most straightforward way to link a program to use a particular C++
  library is to use a C++ driver that specifies that C++ library by
! default.  The ‘g++’ driver, for example, tells the linker where to find
! GCC's C++ library (‘libstdc++’) plus the other libraries and startup
  files it needs, in the proper order.
  
   If a program must use a different C++ library and it's not possible to
  do the final link using a C++ driver that uses that library by default,
! it is necessary to tell ‘g++’ the location and name of that library.  It
  might also be necessary to specify different startup files and other
  runtime support libraries, and to suppress the use of GCC's support
! libraries with one or more of the options ‘-nostdlib’, ‘-nostartfiles’,
! and ‘-nodefaultlibs’.
  
  
  File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
  
! 10 ‘gcov’--a Test Coverage Program
  **********************************
  
! ‘gcov’ is a tool you can use in conjunction with GCC to test code
  coverage in your programs.
  
  * Menu:
*************** coverage in your programs.
*** 65529,65558 ****
  
  File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
  
! 10.1 Introduction to 'gcov'
  ===========================
  
! 'gcov' is a test coverage program.  Use it in concert with GCC to
  analyze your programs to help create more efficient, faster running code
! and to discover untested parts of your program.  You can use 'gcov' as a
  profiling tool to help discover where your optimization efforts will
! best affect your code.  You can also use 'gcov' along with the other
! profiling tool, 'gprof', to assess which parts of your code use the
  greatest amount of computing time.
  
   Profiling tools help you analyze your code's performance.  Using a
! profiler such as 'gcov' or 'gprof', you can find out some basic
  performance statistics, such as:
  
!    * how often each line of code executes
  
!    * what lines of code are actually executed
  
!    * how much computing time each section of code uses
  
   Once you know these things about how your code works when compiled, you
  can look at each module to see which modules should be optimized.
! 'gcov' helps you determine where to work on optimization.
  
   Software developers also use coverage testing in concert with
  testsuites, to make sure software is actually good enough for a release.
--- 65540,65569 ----
  
  File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
  
! 10.1 Introduction to ‘gcov’
  ===========================
  
! ‘gcov’ is a test coverage program.  Use it in concert with GCC to
  analyze your programs to help create more efficient, faster running code
! and to discover untested parts of your program.  You can use ‘gcov’ as a
  profiling tool to help discover where your optimization efforts will
! best affect your code.  You can also use ‘gcov’ along with the other
! profiling tool, ‘gprof’, to assess which parts of your code use the
  greatest amount of computing time.
  
   Profiling tools help you analyze your code's performance.  Using a
! profiler such as ‘gcov’ or ‘gprof’, you can find out some basic
  performance statistics, such as:
  
!    • how often each line of code executes
  
!    • what lines of code are actually executed
  
!    • how much computing time each section of code uses
  
   Once you know these things about how your code works when compiled, you
  can look at each module to see which modules should be optimized.
! ‘gcov’ helps you determine where to work on optimization.
  
   Software developers also use coverage testing in concert with
  testsuites, to make sure software is actually good enough for a release.
*************** to be added to the testsuites to create
*** 65563,65572 ****
  final product.
  
   You should compile your code without optimization if you plan to use
! 'gcov' because the optimization, by combining some lines of code into
  one function, may not give you as much information as you need to look
  for 'hot spots' where the code is using a great deal of computer time.
! Likewise, because 'gcov' accumulates statistics by line (at the lowest
  resolution), it works best with a programming style that places only one
  statement on each line.  If you use complicated macros that expand to
  loops or to other control structures, the statistics are less
--- 65574,65583 ----
  final product.
  
   You should compile your code without optimization if you plan to use
! ‘gcov’ because the optimization, by combining some lines of code into
  one function, may not give you as much information as you need to look
  for 'hot spots' where the code is using a great deal of computer time.
! Likewise, because ‘gcov’ accumulates statistics by line (at the lowest
  resolution), it works best with a programming style that places only one
  statement on each line.  If you use complicated macros that expand to
  loops or to other control structures, the statistics are less
*************** helpful--they only report on the line wh
*** 65574,65646 ****
  your complex macros behave like functions, you can replace them with
  inline functions to solve this problem.
  
!  'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
! many times each line of a source file 'SOURCEFILE.c' has executed.  You
! can use these logfiles along with 'gprof' to aid in fine-tuning the
! performance of your programs.  'gprof' gives timing information you can
! use along with the information you get from 'gcov'.
  
!  'gcov' works only on code compiled with GCC.  It is not compatible with
  any other profiling or test coverage mechanism.
  
  
  File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
  
! 10.2 Invoking 'gcov'
  ====================
  
       gcov [OPTIONS] FILES
  
!  'gcov' accepts the following options:
  
! '-a'
! '--all-blocks'
       Write individual execution counts for every basic block.  Normally
       gcov outputs execution counts only for the main blocks of a line.
       With this option you can determine if blocks within a single line
       are not being executed.
  
! '-b'
! '--branch-probabilities'
       Write branch frequencies to the output file, and write branch
       summary info to the standard output.  This option allows you to see
       how often each branch in your program was taken.  Unconditional
!      branches will not be shown, unless the '-u' option is given.
  
! '-c'
! '--branch-counts'
       Write branch frequencies as the number of branches taken, rather
       than the percentage of branches taken.
  
! '-g'
! '--conditions'
       Write condition coverage to the output file, and write condition
       summary info to the standard output.  This option allows you to see
       if the conditions in your program at least once had an independent
       effect on the outcome of the boolean expression (modified
       condition/decision coverage).  This requires you to compile the
!      source with '-fcondition-coverage'.
  
! '-d'
! '--display-progress'
       Display the progress on the standard output.
  
! '-f'
! '--function-summaries'
       Output summaries for each function in addition to the file level
       summary.
  
! '-h'
! '--help'
!      Display help about using 'gcov' (on the standard output), and exit
       without doing any further processing.
  
! '-j'
! '--json-format'
       Output gcov file in an easy-to-parse JSON intermediate format which
       does not require source code for generation.  The JSON file is
       compressed with gzip compression algorithm and the files have
!      '.gcov.json.gz' extension.
  
       Structure of the JSON is following:
  
--- 65585,65657 ----
  your complex macros behave like functions, you can replace them with
  inline functions to solve this problem.
  
!  ‘gcov’ creates a logfile called ‘SOURCEFILE.gcov’ which indicates how
! many times each line of a source file ‘SOURCEFILE.c’ has executed.  You
! can use these logfiles along with ‘gprof’ to aid in fine-tuning the
! performance of your programs.  ‘gprof’ gives timing information you can
! use along with the information you get from ‘gcov’.
  
!  ‘gcov’ works only on code compiled with GCC.  It is not compatible with
  any other profiling or test coverage mechanism.
  
  
  File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
  
! 10.2 Invoking ‘gcov’
  ====================
  
       gcov [OPTIONS] FILES
  
!  ‘gcov’ accepts the following options:
  
! ‘-a’
! ‘--all-blocks’
       Write individual execution counts for every basic block.  Normally
       gcov outputs execution counts only for the main blocks of a line.
       With this option you can determine if blocks within a single line
       are not being executed.
  
! ‘-b’
! ‘--branch-probabilities’
       Write branch frequencies to the output file, and write branch
       summary info to the standard output.  This option allows you to see
       how often each branch in your program was taken.  Unconditional
!      branches will not be shown, unless the ‘-u’ option is given.
  
! ‘-c’
! ‘--branch-counts’
       Write branch frequencies as the number of branches taken, rather
       than the percentage of branches taken.
  
! ‘-g’
! ‘--conditions’
       Write condition coverage to the output file, and write condition
       summary info to the standard output.  This option allows you to see
       if the conditions in your program at least once had an independent
       effect on the outcome of the boolean expression (modified
       condition/decision coverage).  This requires you to compile the
!      source with ‘-fcondition-coverage’.
  
! ‘-d’
! ‘--display-progress’
       Display the progress on the standard output.
  
! ‘-f’
! ‘--function-summaries’
       Output summaries for each function in addition to the file level
       summary.
  
! ‘-h’
! ‘--help’
!      Display help about using ‘gcov’ (on the standard output), and exit
       without doing any further processing.
  
! ‘-j’
! ‘--json-format’
       Output gcov file in an easy-to-parse JSON intermediate format which
       does not require source code for generation.  The JSON file is
       compressed with gzip compression algorithm and the files have
!      ‘.gcov.json.gz’ extension.
  
       Structure of the JSON is following:
  
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65654,65670 ****
  
       Fields of the root element have following semantics:
  
!         * CURRENT_WORKING_DIRECTORY: working directory where a
            compilation unit was compiled
  
!         * DATA_FILE: name of the data file (GCDA)
  
!         * FORMAT_VERSION: semantic version of the format
  
            Changes in version _2_:
!              * CALLS: information about function calls is added
  
!         * GCC_VERSION: version of the GCC compiler
  
       Each FILE has the following form:
  
--- 65665,65681 ----
  
       Fields of the root element have following semantics:
  
!         • CURRENT_WORKING_DIRECTORY: working directory where a
            compilation unit was compiled
  
!         • DATA_FILE: name of the data file (GCDA)
  
!         • FORMAT_VERSION: semantic version of the format
  
            Changes in version _2_:
!              • CALLS: information about function calls is added
  
!         • GCC_VERSION: version of the GCC compiler
  
       Each FILE has the following form:
  
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65676,65682 ****
  
       Fields of the FILE element have following semantics:
  
!         * FILE_NAME: name of the source file
  
       Each FUNCTION has the following form:
  
--- 65687,65693 ----
  
       Fields of the FILE element have following semantics:
  
!         • FILE_NAME: name of the source file
  
       Each FUNCTION has the following form:
  
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65694,65717 ****
  
       Fields of the FUNCTION element have following semantics:
  
!         * BLOCKS: number of blocks that are in the function
  
!         * BLOCKS_EXECUTED: number of executed blocks of the function
  
!         * DEMANGLED_NAME: demangled name of the function
  
!         * END_COLUMN: column in the source file where the function ends
  
!         * END_LINE: line in the source file where the function ends
  
!         * EXECUTION_COUNT: number of executions of the function
  
!         * NAME: name of the function
  
!         * START_COLUMN: column in the source file where the function
            begins
  
!         * START_LINE: line in the source file where the function begins
  
       Note that line numbers and column numbers number from 1.  In the
       current implementation, START_LINE and START_COLUMN do not include
--- 65705,65728 ----
  
       Fields of the FUNCTION element have following semantics:
  
!         • BLOCKS: number of blocks that are in the function
  
!         • BLOCKS_EXECUTED: number of executed blocks of the function
  
!         • DEMANGLED_NAME: demangled name of the function
  
!         • END_COLUMN: column in the source file where the function ends
  
!         • END_LINE: line in the source file where the function ends
  
!         • EXECUTION_COUNT: number of executions of the function
  
!         • NAME: name of the function
  
!         • START_COLUMN: column in the source file where the function
            begins
  
!         • START_LINE: line in the source file where the function begins
  
       Note that line numbers and column numbers number from 1.  In the
       current implementation, START_LINE and START_COLUMN do not include
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65734,65749 ****
       Branches and calls are present only with -B option.  Fields of the
       LINE element have following semantics:
  
!         * BLOCK_IDS: IDs of basic blocks that belong to the line
  
!         * COUNT: number of executions of the line
  
!         * LINE_NUMBER: line number
  
!         * UNEXECUTED_BLOCK: flag whether the line contains an unexecuted
            block (not all statements on the line are executed)
  
!         * FUNCTION_NAME: a name of a function this LINE belongs to (for
            a line with an inlined statements can be not set)
  
       Each BRANCH has the following form:
--- 65745,65760 ----
       Branches and calls are present only with -B option.  Fields of the
       LINE element have following semantics:
  
!         • BLOCK_IDS: IDs of basic blocks that belong to the line
  
!         • COUNT: number of executions of the line
  
!         • LINE_NUMBER: line number
  
!         • UNEXECUTED_BLOCK: flag whether the line contains an unexecuted
            block (not all statements on the line are executed)
  
!         • FUNCTION_NAME: a name of a function this LINE belongs to (for
            a line with an inlined statements can be not set)
  
       Each BRANCH has the following form:
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65758,65773 ****
  
       Fields of the BRANCH element have following semantics:
  
!         * COUNT: number of executions of the branch
  
!         * FALLTHROUGH: true when the branch is a fall through branch
  
!         * THROW: true when the branch is an exceptional branch
  
!         * ISOURCE_BLOCK_ID: ID of the basic block where this branch
            happens
  
!         * DESTINATION_BLOCK_ID: ID of the basic block this branch jumps
            to
  
       Each CALL has the following form:
--- 65769,65784 ----
  
       Fields of the BRANCH element have following semantics:
  
!         • COUNT: number of executions of the branch
  
!         • FALLTHROUGH: true when the branch is a fall through branch
  
!         • THROW: true when the branch is an exceptional branch
  
!         • ISOURCE_BLOCK_ID: ID of the basic block where this branch
            happens
  
!         • DESTINATION_BLOCK_ID: ID of the basic block this branch jumps
            to
  
       Each CALL has the following form:
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65780,65792 ****
  
       Fields of the CALL element have following semantics:
  
!         * RETURNED: number of times a function call returned (call count
            is equal to LINE::COUNT)
  
!         * ISOURCE_BLOCK_ID: ID of the basic block where this call
            happens
  
!         * DESTINATION_BLOCK_ID: ID of the basic block this calls
            continues after return
  
       Each CONDITION has the following form:
--- 65791,65803 ----
  
       Fields of the CALL element have following semantics:
  
!         • RETURNED: number of times a function call returned (call count
            is equal to LINE::COUNT)
  
!         • ISOURCE_BLOCK_ID: ID of the basic block where this call
            happens
  
!         • DESTINATION_BLOCK_ID: ID of the basic block this calls
            continues after return
  
       Each CONDITION has the following form:
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65801,65882 ****
  
       Fields of the CONDITION element have following semantics:
  
!         * COUNT: number of condition outcomes in this expression
  
!         * COVERED: number of covered condition outcomes in this
            expression
  
!         * NOT_COVERED_TRUE: terms, by index, not seen as true in this
            expression
  
!         * NOT_COVERED_FALSE: terms, by index, not seen as false in this
            expression
  
! '-H'
! '--human-readable'
       Write counts in human readable format (like 24.6k).
  
! '-k'
! '--use-colors'
  
       Use colors for lines of code that have zero coverage.  We use red
       color for non-exceptional lines and cyan for exceptional.  Same
!      colors are used for basic blocks with '-a' option.
  
! '-l'
! '--long-file-names'
       Create long file names for included source files.  For example, if
!      the header file 'x.h' contains code, and was included in the file
!      'a.c', then running 'gcov' on the file 'a.c' will produce an output
!      file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
!      useful if 'x.h' is included in multiple source files and you want
!      to see the individual contributions.  If you use the '-p' option,
       both the including and included file names will be complete path
       names.
  
! '-m'
! '--demangled-names'
       Display demangled function names in output.  The default is to show
       mangled function names.
  
! '-n'
! '--no-output'
!      Do not create the 'gcov' output file.
  
! '-o DIRECTORY|FILE'
! '--object-directory DIRECTORY'
! '--object-file FILE'
       Specify either the directory containing the gcov data files, or the
!      object path name.  The '.gcno', and '.gcda' data files are searched
       for using this option.  If a directory is specified, the data files
       are in that directory and named after the input file name, without
       its extension.  If a file is specified here, the data files are
       named after that file, without its extension.
  
! '-p'
! '--preserve-paths'
       Preserve complete path information in the names of generated
!      '.gcov' files.  Without this option, just the filename component is
!      used.  With this option, all directories are used, with '/'
!      characters translated to '#' characters, '.' directory components
!      removed and unremoveable '..' components renamed to '^'.  This is
       useful if sourcefiles are in several different directories.
  
! '-q'
! '--use-hotness-colors'
  
       Emit perf-like colored output for hot lines.  Legend of the color
       scale is printed at the very beginning of the output file.
  
! '-r'
! '--relative-only'
       Only output information about source files with a relative pathname
       (after source prefix elision).  Absolute paths are usually system
       header files and coverage of any inline functions therein is
       normally uninteresting.
  
! '-s DIRECTORY'
! '--source-prefix DIRECTORY'
       A prefix for source file names to remove when generating the output
       coverage files.  This option is useful when building in a separate
       directory, and the pathname to the source directory is not wanted
--- 65812,65893 ----
  
       Fields of the CONDITION element have following semantics:
  
!         • COUNT: number of condition outcomes in this expression
  
!         • COVERED: number of covered condition outcomes in this
            expression
  
!         • NOT_COVERED_TRUE: terms, by index, not seen as true in this
            expression
  
!         • NOT_COVERED_FALSE: terms, by index, not seen as false in this
            expression
  
! ‘-H’
! ‘--human-readable’
       Write counts in human readable format (like 24.6k).
  
! ‘-k’
! ‘--use-colors’
  
       Use colors for lines of code that have zero coverage.  We use red
       color for non-exceptional lines and cyan for exceptional.  Same
!      colors are used for basic blocks with ‘-a’ option.
  
! ‘-l’
! ‘--long-file-names’
       Create long file names for included source files.  For example, if
!      the header file ‘x.h’ contains code, and was included in the file
!      ‘a.c’, then running ‘gcov’ on the file ‘a.c’ will produce an output
!      file called ‘a.c##x.h.gcov’ instead of ‘x.h.gcov’.  This can be
!      useful if ‘x.h’ is included in multiple source files and you want
!      to see the individual contributions.  If you use the ‘-p’ option,
       both the including and included file names will be complete path
       names.
  
! ‘-m’
! ‘--demangled-names’
       Display demangled function names in output.  The default is to show
       mangled function names.
  
! ‘-n’
! ‘--no-output’
!      Do not create the ‘gcov’ output file.
  
! ‘-o DIRECTORY|FILE’
! ‘--object-directory DIRECTORY’
! ‘--object-file FILE’
       Specify either the directory containing the gcov data files, or the
!      object path name.  The ‘.gcno’, and ‘.gcda’ data files are searched
       for using this option.  If a directory is specified, the data files
       are in that directory and named after the input file name, without
       its extension.  If a file is specified here, the data files are
       named after that file, without its extension.
  
! ‘-p’
! ‘--preserve-paths’
       Preserve complete path information in the names of generated
!      ‘.gcov’ files.  Without this option, just the filename component is
!      used.  With this option, all directories are used, with ‘/’
!      characters translated to ‘#’ characters, ‘.’ directory components
!      removed and unremoveable ‘..’ components renamed to ‘^’.  This is
       useful if sourcefiles are in several different directories.
  
! ‘-q’
! ‘--use-hotness-colors’
  
       Emit perf-like colored output for hot lines.  Legend of the color
       scale is printed at the very beginning of the output file.
  
! ‘-r’
! ‘--relative-only’
       Only output information about source files with a relative pathname
       (after source prefix elision).  Absolute paths are usually system
       header files and coverage of any inline functions therein is
       normally uninteresting.
  
! ‘-s DIRECTORY’
! ‘--source-prefix DIRECTORY’
       A prefix for source file names to remove when generating the output
       coverage files.  This option is useful when building in a separate
       directory, and the pathname to the source directory is not wanted
*************** File: gcc.info,  Node: Invoking Gcov,  N
*** 65884,65952 ****
       detection is applied before determining whether the source file is
       absolute.
  
! '-t'
! '--stdout'
       Output to standard output instead of output files.
  
! '-u'
! '--unconditional-branches'
       When branch probabilities are given, include those of unconditional
       branches.  Unconditional branches are normally not interesting.
  
! '-v'
! '--version'
!      Display the 'gcov' version number (on the standard output), and
       exit without doing any further processing.
  
! '-w'
! '--verbose'
       Print verbose informations related to basic blocks and arcs.
  
! '-x'
! '--hash-filenames'
       When using -PRESERVE-PATHS, gcov uses the full pathname of the
       source files to create an output filename.  This can lead to long
       filenames that can overflow filesystem limits.  This option creates
!      names of the form 'SOURCE-FILE##MD5.gcov', where the SOURCE-FILE
       component is the final filename part and the MD5 component is
       calculated from the full mangled name that would have been used
       otherwise.  The option is an alternative to the -PRESERVE-PATHS on
       systems which have a filesystem limit.
  
!  'gcov' should be run with the current directory the same as that when
  you invoked the compiler.  Otherwise it will not be able to locate the
! source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
  current directory.  These contain the coverage information of the source
! file they correspond to.  One '.gcov' file is produced for each source
  (or header) file containing code, which was compiled to produce the data
  files.  The MANGLEDNAME part of the output file name is usually simply
! the source file name, but can be something more complicated if the '-l'
! or '-p' options are given.  Refer to those options for details.
  
!  If you invoke 'gcov' with multiple input files, the contributions from
  each input file are summed.  Typically you would invoke it with the same
  list of files as the final link of your executable.
  
!  The '.gcov' files contain the ':' separated fields along with program
  source code.  The format is
  
       EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
  
   Additional block information may succeed each line, when requested by
! command line option.  The EXECUTION_COUNT is '-' for lines containing no
! code.  Unexecuted lines are marked '#####' or '=====', depending on
  whether they are reachable by non-exceptional paths or only exceptional
! paths such as C++ exception handlers, respectively.  Given the '-a'
! option, unexecuted blocks are marked '$$$$$' or '%%%%%', depending on
  whether a basic block is reachable via non-exceptional or exceptional
  paths.  Executed basic blocks having a statement with zero
! EXECUTION_COUNT end with '*' character and are colored with magenta
! color with the '-k' option.  This functionality is not supported in Ada.
  
   Note that GCC can completely remove the bodies of functions that are
  not needed - for instance if they are inlined everywhere.  Such
! functions are marked with '-', which can be confusing.  Use the
! '-fkeep-inline-functions' and '-fkeep-static-functions' options to
  retain these functions and allow gcov to properly show their
  EXECUTION_COUNT.
  
--- 65895,65963 ----
       detection is applied before determining whether the source file is
       absolute.
  
! ‘-t’
! ‘--stdout’
       Output to standard output instead of output files.
  
! ‘-u’
! ‘--unconditional-branches’
       When branch probabilities are given, include those of unconditional
       branches.  Unconditional branches are normally not interesting.
  
! ‘-v’
! ‘--version’
!      Display the ‘gcov’ version number (on the standard output), and
       exit without doing any further processing.
  
! ‘-w’
! ‘--verbose’
       Print verbose informations related to basic blocks and arcs.
  
! ‘-x’
! ‘--hash-filenames’
       When using -PRESERVE-PATHS, gcov uses the full pathname of the
       source files to create an output filename.  This can lead to long
       filenames that can overflow filesystem limits.  This option creates
!      names of the form ‘SOURCE-FILE##MD5.gcov’, where the SOURCE-FILE
       component is the final filename part and the MD5 component is
       calculated from the full mangled name that would have been used
       otherwise.  The option is an alternative to the -PRESERVE-PATHS on
       systems which have a filesystem limit.
  
!  ‘gcov’ should be run with the current directory the same as that when
  you invoked the compiler.  Otherwise it will not be able to locate the
! source files.  ‘gcov’ produces files called ‘MANGLEDNAME.gcov’ in the
  current directory.  These contain the coverage information of the source
! file they correspond to.  One ‘.gcov’ file is produced for each source
  (or header) file containing code, which was compiled to produce the data
  files.  The MANGLEDNAME part of the output file name is usually simply
! the source file name, but can be something more complicated if the ‘-l’
! or ‘-p’ options are given.  Refer to those options for details.
  
!  If you invoke ‘gcov’ with multiple input files, the contributions from
  each input file are summed.  Typically you would invoke it with the same
  list of files as the final link of your executable.
  
!  The ‘.gcov’ files contain the ‘:’ separated fields along with program
  source code.  The format is
  
       EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
  
   Additional block information may succeed each line, when requested by
! command line option.  The EXECUTION_COUNT is ‘-’ for lines containing no
! code.  Unexecuted lines are marked ‘#####’ or ‘=====’, depending on
  whether they are reachable by non-exceptional paths or only exceptional
! paths such as C++ exception handlers, respectively.  Given the ‘-a’
! option, unexecuted blocks are marked ‘$$$$$’ or ‘%%%%%’, depending on
  whether a basic block is reachable via non-exceptional or exceptional
  paths.  Executed basic blocks having a statement with zero
! EXECUTION_COUNT end with ‘*’ character and are colored with magenta
! color with the ‘-k’ option.  This functionality is not supported in Ada.
  
   Note that GCC can completely remove the bodies of functions that are
  not needed - for instance if they are inlined everywhere.  Such
! functions are marked with ‘-’, which can be confusing.  Use the
! ‘-fkeep-inline-functions’ and ‘-fkeep-static-functions’ options to
  retain these functions and allow gcov to properly show their
  EXECUTION_COUNT.
  
*************** preamble lines are of the form
*** 65956,65962 ****
       -:0:TAG:VALUE
  
   The ordering and number of these preamble lines will be augmented as
! 'gcov' development progresses -- do not rely on them remaining
  unchanged.  Use TAG to locate a particular preamble line.
  
   The additional block information is of the form
--- 65967,65973 ----
       -:0:TAG:VALUE
  
   The ordering and number of these preamble lines will be augmented as
! ‘gcov’ development progresses -- do not rely on them remaining
  unchanged.  Use TAG to locate a particular preamble line.
  
   The additional block information is of the form
*************** are _exactly_ 0% and 100% respectively.
*** 65971,65991 ****
  conventionally be rounded to 0% or 100% are instead printed as the
  nearest non-boundary value.
  
!  When using 'gcov', you must first compile your program with a special
! GCC option '--coverage'.  This tells the compiler to generate additional
  information needed by gcov (basically a flow graph of the program) and
  also includes additional code in the object files for generating the
  extra profiling information needed by gcov.  These additional files are
  placed in the directory where the object file is located.
  
   Running the program will cause profile output to be generated.  For
! each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
  file will be placed in the object file directory.
  
!  Running 'gcov' with your program's source file names as arguments will
  now produce a listing of the code along with frequency of execution for
! each line.  For example, if your program is called 'tmp.cpp', this is
! what you see when you use the basic 'gcov' facility:
  
       $ g++ --coverage tmp.cpp -c
       $ g++ --coverage tmp.o
--- 65982,66002 ----
  conventionally be rounded to 0% or 100% are instead printed as the
  nearest non-boundary value.
  
!  When using ‘gcov’, you must first compile your program with a special
! GCC option ‘--coverage’.  This tells the compiler to generate additional
  information needed by gcov (basically a flow graph of the program) and
  also includes additional code in the object files for generating the
  extra profiling information needed by gcov.  These additional files are
  placed in the directory where the object file is located.
  
   Running the program will cause profile output to be generated.  For
! each source file compiled with ‘-fprofile-arcs’, an accompanying ‘.gcda’
  file will be placed in the object file directory.
  
!  Running ‘gcov’ with your program's source file names as arguments will
  now produce a listing of the code along with frequency of execution for
! each line.  For example, if your program is called ‘tmp.cpp’, this is
! what you see when you use the basic ‘gcov’ facility:
  
       $ g++ --coverage tmp.cpp -c
       $ g++ --coverage tmp.o
*************** what you see when you use the basic 'gco
*** 65995,66001 ****
       Lines executed:92.86% of 14
       Creating 'tmp.cpp.gcov'
  
!  The file 'tmp.cpp.gcov' contains output from 'gcov'.  Here is a sample:
  
               -:    0:Source:tmp.cpp
               -:    0:Working directory:/home/gcc/testcase
--- 66006,66012 ----
       Lines executed:92.86% of 14
       Creating 'tmp.cpp.gcov'
  
!  The file ‘tmp.cpp.gcov’ contains output from ‘gcov’.  Here is a sample:
  
               -:    0:Source:tmp.cpp
               -:    0:Working directory:/home/gcc/testcase
*************** two belong to instances of class Foo con
*** 66061,66067 ****
  line 30 contains some unexecuted basic blocks and thus execution count
  has asterisk symbol.
  
!  When you use the '-a' option, you will get individual block counts, and
  the output looks like this:
  
               -:    0:Source:tmp.cpp
--- 66072,66078 ----
  line 30 contains some unexecuted basic blocks and thus execution count
  has asterisk symbol.
  
!  When you use the ‘-a’ option, you will get individual block counts, and
  the output looks like this:
  
               -:    0:Source:tmp.cpp
*************** contain code, unless previous blocks end
*** 66142,66154 ****
  execution count of a line is shown and subsequent lines show the
  execution counts for individual blocks that end on that line.  After
  each block, the branch and call counts of the block will be shown, if
! the '-b' option is given.
  
   Because of the way GCC instruments calls, a call count can be shown
  after a line with no individual blocks.  As you can see, line 33
  contains a basic block that was not executed.
  
!  When you use the '-b' option, your output looks like this:
  
               -:    0:Source:tmp.cpp
               -:    0:Working directory:/home/gcc/testcase
--- 66153,66165 ----
  execution count of a line is shown and subsequent lines show the
  execution counts for individual blocks that end on that line.  After
  each block, the branch and call counts of the block will be shown, if
! the ‘-b’ option is given.
  
   Because of the way GCC instruments calls, a call count can be shown
  after a line with no individual blocks.  As you can see, line 33
  contains a basic block that was not executed.
  
!  When you use the ‘-b’ option, your output looks like this:
  
               -:    0:Source:tmp.cpp
               -:    0:Working directory:/home/gcc/testcase
*************** message "never executed" is printed.
*** 66255,66265 ****
   For a call, if it was executed at least once, then a percentage
  indicating the number of times the call returned divided by the number
  of times the call was executed will be printed.  This will usually be
! 100%, but may be less for functions that call 'exit' or 'longjmp', and
  thus may not return every time they are called.
  
   The execution counts are cumulative.  If the example program were
! executed again without removing the '.gcda' file, the count for the
  number of times each line in the source was executed would be added to
  the results of the previous run(s).  This is potentially useful in
  several ways.  For example, it could be used to accumulate data over a
--- 66266,66276 ----
   For a call, if it was executed at least once, then a percentage
  indicating the number of times the call returned divided by the number
  of times the call was executed will be printed.  This will usually be
! 100%, but may be less for functions that call ‘exit’ or ‘longjmp’, and
  thus may not return every time they are called.
  
   The execution counts are cumulative.  If the example program were
! executed again without removing the ‘.gcda’ file, the count for the
  number of times each line in the source was executed would be added to
  the results of the previous run(s).  This is potentially useful in
  several ways.  For example, it could be used to accumulate data over a
*************** number of program runs as part of a test
*** 66267,66275 ****
  provide more accurate long-term information over a large number of
  program runs.
  
!  The data in the '.gcda' files is saved immediately before the program
! exits.  For each source file compiled with '-fprofile-arcs', the
! profiling code first attempts to read in an existing '.gcda' file; if
  the file doesn't match the executable (differing number of basic block
  counts) it will ignore the contents of the file.  It then adds in the
  new execution counts and finally writes the data to the file.
--- 66278,66286 ----
  provide more accurate long-term information over a large number of
  program runs.
  
!  The data in the ‘.gcda’ files is saved immediately before the program
! exits.  For each source file compiled with ‘-fprofile-arcs’, the
! profiling code first attempts to read in an existing ‘.gcda’ file; if
  the file doesn't match the executable (differing number of basic block
  counts) it will ignore the contents of the file.  It then adds in the
  new execution counts and finally writes the data to the file.
*************** new execution counts and finally writes
*** 66277,66287 ****
  
  File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
  
! 10.3 Using 'gcov' with GCC Optimization
  =======================================
  
! If you plan to use 'gcov' to help optimize your code, you must first
! compile your program with a special GCC option '--coverage'.  Aside from
  that, you can use any other GCC options; but if you want to prove that
  every single line in your program was executed, you should not compile
  with optimization at the same time.  On some machines the optimizer can
--- 66288,66298 ----
  
  File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
  
! 10.3 Using ‘gcov’ with GCC Optimization
  =======================================
  
! If you plan to use ‘gcov’ to help optimize your code, you must first
! compile your program with a special GCC option ‘--coverage’.  Aside from
  that, you can use any other GCC options; but if you want to prove that
  every single line in your program was executed, you should not compile
  with optimization at the same time.  On some machines the optimizer can
*************** For example, code like this:
*** 66294,66302 ****
         c = 0;
  
  can be compiled into one instruction on some machines.  In this case,
! there is no way for 'gcov' to calculate separate execution counts for
  each line because there isn't separate code for each line.  Hence the
! 'gcov' output looks like this if you compiled the program with
  optimization:
  
             100:   12:if (a != b)
--- 66305,66313 ----
         c = 0;
  
  can be compiled into one instruction on some machines.  In this case,
! there is no way for ‘gcov’ to calculate separate execution counts for
  each line because there isn't separate code for each line.  Hence the
! ‘gcov’ output looks like this if you compiled the program with
  optimization:
  
             100:   12:if (a != b)
*************** shown depends on where the function is i
*** 66316,66325 ****
  at all.
  
   If the function is not inlined, the compiler must emit an out of line
! copy of the function, in any object file that needs it.  If 'fileA.o'
! and 'fileB.o' both contain out of line bodies of a particular inlineable
  function, they will also both contain coverage counts for that function.
! When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
  many systems, select one of those out of line bodies for all calls to
  that function, and remove or ignore the other.  Unfortunately, it will
  not remove the coverage counters for the unused function body.  Hence
--- 66327,66336 ----
  at all.
  
   If the function is not inlined, the compiler must emit an out of line
! copy of the function, in any object file that needs it.  If ‘fileA.o’
! and ‘fileB.o’ both contain out of line bodies of a particular inlineable
  function, they will also both contain coverage counts for that function.
! When ‘fileA.o’ and ‘fileB.o’ are linked together, the linker will, on
  many systems, select one of those out of line bodies for all calls to
  that function, and remove or ignore the other.  Unfortunately, it will
  not remove the coverage counters for the unused function body.  Hence
*************** now be calculable at compile time in som
*** 66332,66387 ****
  coverage of all the uses of the inline function will be shown for the
  same source lines, the line counts themselves might seem inconsistent.
  
!  Long-running applications can use the '__gcov_reset' and '__gcov_dump'
  facilities to restrict profile collection to the program region of
! interest.  Calling '__gcov_reset(void)' will clear all run-time profile
! counters to zero, and calling '__gcov_dump(void)' will cause the profile
! information collected at that point to be dumped to '.gcda' output
  files.  Instrumented applications use a static destructor with priority
! 99 to invoke the '__gcov_dump' function.  Thus '__gcov_dump' is executed
  after all user defined static destructors, as well as handlers
! registered with 'atexit'.
  
   If an executable loads a dynamic shared object via dlopen
! functionality, '-Wl,--dynamic-list-data' is needed to dump all profile
  data.
  
   Profiling run-time library reports various errors related to profile
  manipulation and profile saving.  Errors are printed into standard error
! output or 'GCOV_ERROR_FILE' file, if environment variable is used.  In
  order to terminate immediately after an errors occurs set
! 'GCOV_EXIT_AT_ERROR' environment variable.  That can help users to find
  profile clashing which leads to a misleading profile.
  
  
  File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
  
! 10.4 Brief Description of 'gcov' Data Files
  ===========================================
  
! 'gcov' uses two files for profiling.  The names of these files are
  derived from the original _object_ file by substituting the file suffix
! with either '.gcno', or '.gcda'.  The files contain coverage and profile
! data stored in a platform-independent format.  The '.gcno' files are
  placed in the same directory as the object file.  By default, the
! '.gcda' files are also stored in the same directory as the object file,
! but the GCC '-fprofile-dir' option may be used to store the '.gcda'
  files in a separate directory.
  
!  The '.gcno' notes file is generated when the source file is compiled
! with the GCC '-ftest-coverage' option.  It contains information to
  reconstruct the basic block graphs and assign source line numbers to
  blocks.
  
!  The '.gcda' count data file is generated when a program containing
! object files built with the GCC '-fprofile-arcs' option is executed.  A
! separate '.gcda' file is created for each object file compiled with this
  option.  It contains arc transition counts, value profile counts, and
  some summary information.
  
   It is not recommended to access the coverage files directly.  Consumers
! should use the intermediate format that is provided by 'gcov' tool via
! '--json-format' option.
  
  
  File: gcc.info,  Node: Cross-profiling,  Next: Freestanding Environments,  Prev: Gcov Data Files,  Up: Gcov
--- 66343,66398 ----
  coverage of all the uses of the inline function will be shown for the
  same source lines, the line counts themselves might seem inconsistent.
  
!  Long-running applications can use the ‘__gcov_reset’ and ‘__gcov_dump’
  facilities to restrict profile collection to the program region of
! interest.  Calling ‘__gcov_reset(void)’ will clear all run-time profile
! counters to zero, and calling ‘__gcov_dump(void)’ will cause the profile
! information collected at that point to be dumped to ‘.gcda’ output
  files.  Instrumented applications use a static destructor with priority
! 99 to invoke the ‘__gcov_dump’ function.  Thus ‘__gcov_dump’ is executed
  after all user defined static destructors, as well as handlers
! registered with ‘atexit’.
  
   If an executable loads a dynamic shared object via dlopen
! functionality, ‘-Wl,--dynamic-list-data’ is needed to dump all profile
  data.
  
   Profiling run-time library reports various errors related to profile
  manipulation and profile saving.  Errors are printed into standard error
! output or ‘GCOV_ERROR_FILE’ file, if environment variable is used.  In
  order to terminate immediately after an errors occurs set
! ‘GCOV_EXIT_AT_ERROR’ environment variable.  That can help users to find
  profile clashing which leads to a misleading profile.
  
  
  File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
  
! 10.4 Brief Description of ‘gcov’ Data Files
  ===========================================
  
! ‘gcov’ uses two files for profiling.  The names of these files are
  derived from the original _object_ file by substituting the file suffix
! with either ‘.gcno’, or ‘.gcda’.  The files contain coverage and profile
! data stored in a platform-independent format.  The ‘.gcno’ files are
  placed in the same directory as the object file.  By default, the
! ‘.gcda’ files are also stored in the same directory as the object file,
! but the GCC ‘-fprofile-dir’ option may be used to store the ‘.gcda’
  files in a separate directory.
  
!  The ‘.gcno’ notes file is generated when the source file is compiled
! with the GCC ‘-ftest-coverage’ option.  It contains information to
  reconstruct the basic block graphs and assign source line numbers to
  blocks.
  
!  The ‘.gcda’ count data file is generated when a program containing
! object files built with the GCC ‘-fprofile-arcs’ option is executed.  A
! separate ‘.gcda’ file is created for each object file compiled with this
  option.  It contains arc transition counts, value profile counts, and
  some summary information.
  
   It is not recommended to access the coverage files directly.  Consumers
! should use the intermediate format that is provided by ‘gcov’ tool via
! ‘--json-format’ option.
  
  
  File: gcc.info,  Node: Cross-profiling,  Next: Freestanding Environments,  Prev: Gcov Data Files,  Up: Gcov
*************** File: gcc.info,  Node: Cross-profiling,
*** 66390,66427 ****
  ====================================================
  
  Running the program will cause profile output to be generated.  For each
! source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
  will be placed in the object file directory.  That implicitly requires
  running the program on the same system as it was built or having the
  same absolute directory structure on the target system.  The program
  will try to create the needed directory structure, if it is not already
  present.
  
!  To support cross-profiling, a program compiled with '-fprofile-arcs'
  can relocate the data files based on two environment variables:
  
!    * GCOV_PREFIX contains the prefix to add to the absolute paths in the
       object file.  Prefix can be absolute, or relative.  The default is
       no prefix.
  
!    * GCOV_PREFIX_STRIP indicates the how many initial directory names to
       strip off the hardwired absolute paths.  Default value is 0.
  
       _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
       undefined, then a relative path is made out of the hardwired
       absolute paths.
  
!  For example, if the object file '/user/build/foo.o' was built with
! '-fprofile-arcs', the final executable will try to create the data file
! '/user/build/foo.gcda' when running on the target system.  This will
  fail if the corresponding directory does not exist and it is unable to
  create it.  This can be overcome by, for example, setting the
! environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
! Such a setting will name the data file '/target/run/build/foo.gcda'.
  
   You must move the data files to the expected directory tree in order to
! use them for profile directed optimizations ('-fprofile-use'), or to use
! the 'gcov' tool.
  
  
  File: gcc.info,  Node: Freestanding Environments,  Prev: Cross-profiling,  Up: Gcov
--- 66401,66438 ----
  ====================================================
  
  Running the program will cause profile output to be generated.  For each
! source file compiled with ‘-fprofile-arcs’, an accompanying ‘.gcda’ file
  will be placed in the object file directory.  That implicitly requires
  running the program on the same system as it was built or having the
  same absolute directory structure on the target system.  The program
  will try to create the needed directory structure, if it is not already
  present.
  
!  To support cross-profiling, a program compiled with ‘-fprofile-arcs’
  can relocate the data files based on two environment variables:
  
!    • GCOV_PREFIX contains the prefix to add to the absolute paths in the
       object file.  Prefix can be absolute, or relative.  The default is
       no prefix.
  
!    • GCOV_PREFIX_STRIP indicates the how many initial directory names to
       strip off the hardwired absolute paths.  Default value is 0.
  
       _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
       undefined, then a relative path is made out of the hardwired
       absolute paths.
  
!  For example, if the object file ‘/user/build/foo.o’ was built with
! ‘-fprofile-arcs’, the final executable will try to create the data file
! ‘/user/build/foo.gcda’ when running on the target system.  This will
  fail if the corresponding directory does not exist and it is unable to
  create it.  This can be overcome by, for example, setting the
! environment as ‘GCOV_PREFIX=/target/run’ and ‘GCOV_PREFIX_STRIP=1’.
! Such a setting will name the data file ‘/target/run/build/foo.gcda’.
  
   You must move the data files to the expected directory tree in order to
! use them for profile directed optimizations (‘-fprofile-use’), or to use
! the ‘gcov’ tool.
  
  
  File: gcc.info,  Node: Freestanding Environments,  Prev: Cross-profiling,  Up: Gcov
*************** then this section is likely not relevant
*** 66434,66442 ****
  intended for application developers targeting freestanding environments
  (for example embedded systems) with limited resources.  In particular,
  systems or test cases which do not support constructors/destructors or
! the C library file I/O. In this section, the "target system" runs your
  application instrumented for profiling or test coverage.  You develop
! and analyze your application on the "host system".  We now provide an
  overview how profiling and test coverage can be obtained in this
  scenario followed by a tutorial which can be exercised on the host
  system.  Finally, some system initialization caveats are listed.
--- 66445,66453 ----
  intended for application developers targeting freestanding environments
  (for example embedded systems) with limited resources.  In particular,
  systems or test cases which do not support constructors/destructors or
! the C library file I/O. In this section, the “target system” runs your
  application instrumented for profiling or test coverage.  You develop
! and analyze your application on the “host system”.  We now provide an
  overview how profiling and test coverage can be obtained in this
  scenario followed by a tutorial which can be exercised on the host
  system.  Finally, some system initialization caveats are listed.
*************** system.  Finally, some system initializa
*** 66447,66459 ****
  For an application instrumented for profiling or test coverage, the
  compiler generates some global data structures which are updated by
  instrumentation code while the application runs.  These data structures
! are called the "gcov information".  Normally, when the application
! exits, the gcov information is stored to '.gcda' files.  There is one
  file per translation unit instrumented for profiling or test coverage.
! The function '__gcov_exit()', which stores the gcov information to a
  file, is called by a global destructor function for each translation
  unit instrumented for profiling or test coverage.  It runs at process
! exit.  In a global constructor function, the '__gcov_init()' function is
  called to register the gcov information of a translation unit in a
  global list.  In some situations, this procedure does not work.
  Firstly, if you want to profile the global constructor or exit
--- 66458,66470 ----
  For an application instrumented for profiling or test coverage, the
  compiler generates some global data structures which are updated by
  instrumentation code while the application runs.  These data structures
! are called the “gcov information”.  Normally, when the application
! exits, the gcov information is stored to ‘.gcda’ files.  There is one
  file per translation unit instrumented for profiling or test coverage.
! The function ‘__gcov_exit()’, which stores the gcov information to a
  file, is called by a global destructor function for each translation
  unit instrumented for profiling or test coverage.  It runs at process
! exit.  In a global constructor function, the ‘__gcov_init()’ function is
  called to register the gcov information of a translation unit in a
  global list.  In some situations, this procedure does not work.
  Firstly, if you want to profile the global constructor or exit
*************** parts of the system initialization or ab
*** 66463,66474 ****
  do not allow a global constructor or exit processing.  Thirdly, you need
  a filesystem to store the files.
  
!  The '-fprofile-info-section' GCC option enables you to use profiling
  and test coverage in freestanding environments.  This option disables
  the use of global constructors and destructors for the gcov information.
  Instead, a pointer to the gcov information is stored in a special linker
  input section for each translation unit which is compiled with this
! option.  By default, the section name is '.gcov_info'.  The gcov
  information is statically initialized.  The pointers to the gcov
  information from all translation units of an executable can be collected
  by the linker in a contiguous memory block.  For the GNU linker, the
--- 66474,66485 ----
  do not allow a global constructor or exit processing.  Thirdly, you need
  a filesystem to store the files.
  
!  The ‘-fprofile-info-section’ GCC option enables you to use profiling
  and test coverage in freestanding environments.  This option disables
  the use of global constructors and destructors for the gcov information.
  Instead, a pointer to the gcov information is stored in a special linker
  input section for each translation unit which is compiled with this
! option.  By default, the section name is ‘.gcov_info’.  The gcov
  information is statically initialized.  The pointers to the gcov
  information from all translation units of an executable can be collected
  by the linker in a contiguous memory block.  For the GNU linker, the
*************** this:
*** 66482,66490 ****
           PROVIDE (__gcov_info_end = .);
         }
  
!  The linker will provide two global symbols, '__gcov_info_start' and
! '__gcov_info_end', which define the start and end of the array of
! pointers to gcov information blocks, respectively.  The 'KEEP ()'
  directive is required to prevent a garbage collection of the pointers.
  They are not directly referenced by anything in the executable.  The
  section may be placed in a read-only memory area.
--- 66493,66501 ----
           PROVIDE (__gcov_info_end = .);
         }
  
!  The linker will provide two global symbols, ‘__gcov_info_start’ and
! ‘__gcov_info_end’, which define the start and end of the array of
! pointers to gcov information blocks, respectively.  The ‘KEEP ()’
  directive is required to prevent a garbage collection of the pointers.
  They are not directly referenced by anything in the executable.  The
  section may be placed in a read-only memory area.
*************** target to the host system, the applicati
*** 66494,66504 ****
  produce a reliable in order byte stream from the target to the host.
  The byte stream may be compressed and encoded using error detection and
  correction codes to meet application-specific requirements.  The GCC
! provided 'libgcov' target library provides two functions,
! '__gcov_info_to_gcda()' and '__gcov_filename_to_gcfn()', to generate a
  byte stream from a gcov information bock.  The functions are declared in
! '#include <gcov.h>'.  The byte stream can be deserialized by the
! 'merge-stream' subcommand of the 'gcov-tool' to create or update '.gcda'
  files in the host filesystem for the instrumented application.
  
  10.6.2 Tutorial
--- 66505,66515 ----
  produce a reliable in order byte stream from the target to the host.
  The byte stream may be compressed and encoded using error detection and
  correction codes to meet application-specific requirements.  The GCC
! provided ‘libgcov’ target library provides two functions,
! ‘__gcov_info_to_gcda()’ and ‘__gcov_filename_to_gcfn()’, to generate a
  byte stream from a gcov information bock.  The functions are declared in
! ‘#include <gcov.h>’.  The byte stream can be deserialized by the
! ‘merge-stream’ subcommand of the ‘gcov-tool’ to create or update ‘.gcda’
  files in the host filesystem for the instrumented application.
  
  10.6.2 Tutorial
*************** files in the host filesystem for the ins
*** 66506,66530 ****
  
  This tutorial should be exercised on the host system.  We will build a
  program instrumented for test coverage.  The program runs an application
! and dumps the gcov information to 'stderr' encoded as a printable
  character stream.  The application simply decodes such character streams
! from 'stdin' and writes the decoded character stream to 'stdout'
  (warning: this is binary data).  The decoded character stream is
! consumed by the 'merge-stream' subcommand of the 'gcov-tool' to create
! or update the '.gcda' files.
  
   To get started, create an empty directory.  Change into the new
  directory.  Then you will create the following three files in this
  directory
  
!   1. 'app.h' - a header file included by 'app.c' and 'main.c',
  
!   2. 'app.c' - a source file which contains an example application, and
  
!   3. 'main.c' - a source file which contains the program main function
       and code to dump the gcov information.
  
!  Firstly, create the header file 'app.h' with the following content:
  
       static const unsigned char a = 'a';
  
--- 66517,66541 ----
  
  This tutorial should be exercised on the host system.  We will build a
  program instrumented for test coverage.  The program runs an application
! and dumps the gcov information to ‘stderr’ encoded as a printable
  character stream.  The application simply decodes such character streams
! from ‘stdin’ and writes the decoded character stream to ‘stdout’
  (warning: this is binary data).  The decoded character stream is
! consumed by the ‘merge-stream’ subcommand of the ‘gcov-tool’ to create
! or update the ‘.gcda’ files.
  
   To get started, create an empty directory.  Change into the new
  directory.  Then you will create the following three files in this
  directory
  
!   1. ‘app.h’ - a header file included by ‘app.c’ and ‘main.c’,
  
!   2. ‘app.c’ - a source file which contains an example application, and
  
!   3. ‘main.c’ - a source file which contains the program main function
       and code to dump the gcov information.
  
!  Firstly, create the header file ‘app.h’ with the following content:
  
       static const unsigned char a = 'a';
  
*************** directory
*** 66538,66544 ****
  
       extern void application (void);
  
!  Secondly, create the source file 'app.c' with the following content:
  
       #include "app.h"
  
--- 66549,66555 ----
  
       extern void application (void);
  
!  Secondly, create the source file ‘app.c’ with the following content:
  
       #include "app.h"
  
*************** directory
*** 66577,66583 ****
           }
       }
  
!  Thirdly, create the source file 'main.c' with the following content:
  
       #include "app.h"
  
--- 66588,66594 ----
           }
       }
  
!  Thirdly, create the source file ‘main.c’ with the following content:
  
       #include "app.h"
  
*************** directory
*** 66658,66668 ****
         return 0;
       }
  
!  If we compile 'app.c' with test coverage and no extra profiling
! options, then a global constructor ('_sub_I_00100_0' here, it may have a
! different name in your environment) and destructor ('_sub_D_00100_1') is
  used to register and dump the gcov information, respectively.  We also
! see undefined references to '__gcov_init' and '__gcov_exit':
  
       $ gcc --coverage -c app.c
       $ nm app.o
--- 66669,66679 ----
         return 0;
       }
  
!  If we compile ‘app.c’ with test coverage and no extra profiling
! options, then a global constructor (‘_sub_I_00100_0’ here, it may have a
! different name in your environment) and destructor (‘_sub_D_00100_1’) is
  used to register and dump the gcov information, respectively.  We also
! see undefined references to ‘__gcov_init’ and ‘__gcov_exit’:
  
       $ gcc --coverage -c app.c
       $ nm app.o
*************** see undefined references to '__gcov_init
*** 66683,66692 ****
       0000000000000161 t _sub_D_00100_1
       0000000000000151 t _sub_I_00100_0
  
!  Compile 'app.c' and 'main.c' with test coverage and
! '-fprofile-info-section'.  Now, a read-only pointer size object is
! present in the '.gcov_info' section and there are no undefined
! references to '__gcov_init' and '__gcov_exit':
  
       $ gcc --coverage -fprofile-info-section -c main.c
       $ gcc --coverage -fprofile-info-section -c app.c
--- 66694,66703 ----
       0000000000000161 t _sub_D_00100_1
       0000000000000151 t _sub_I_00100_0
  
!  Compile ‘app.c’ and ‘main.c’ with test coverage and
! ‘-fprofile-info-section’.  Now, a read-only pointer size object is
! present in the ‘.gcov_info’ section and there are no undefined
! references to ‘__gcov_init’ and ‘__gcov_exit’:
  
       $ gcc --coverage -fprofile-info-section -c main.c
       $ gcc --coverage -fprofile-info-section -c app.c
*************** references to '__gcov_init' and '__gcov_
*** 66714,66736 ****
                         CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  
   We have to customize the program link procedure so that all the
! '.gcov_info' linker input sections are placed in a contiguous memory
  block with a begin and end symbol.  Firstly, get the default linker
  script using the following commands (we assume a GNU linker):
  
       $ ld --verbose | sed '1,/^===/d' | sed '/^===/d' > linkcmds
  
!  Secondly, open the file 'linkcmds' with a text editor and place the
! linker output section definition from the overview after the '.rodata'
  section definition.  Link the program executable using the customized
  linker script:
  
       $ gcc --coverage main.o app.o -T linkcmds -Wl,-Map,app.map
  
!  In the linker map file 'app.map', we see that the linker placed the
! read-only pointer size objects of our objects files 'main.o' and 'app.o'
  into a contiguous memory block and provided the symbols
! '__gcov_info_start' and '__gcov_info_end':
  
       $ grep -C 1 "\.gcov_info" app.map
  
--- 66725,66747 ----
                         CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  
   We have to customize the program link procedure so that all the
! ‘.gcov_info’ linker input sections are placed in a contiguous memory
  block with a begin and end symbol.  Firstly, get the default linker
  script using the following commands (we assume a GNU linker):
  
       $ ld --verbose | sed '1,/^===/d' | sed '/^===/d' > linkcmds
  
!  Secondly, open the file ‘linkcmds’ with a text editor and place the
! linker output section definition from the overview after the ‘.rodata’
  section definition.  Link the program executable using the customized
  linker script:
  
       $ gcc --coverage main.o app.o -T linkcmds -Wl,-Map,app.map
  
!  In the linker map file ‘app.map’, we see that the linker placed the
! read-only pointer size objects of our objects files ‘main.o’ and ‘app.o’
  into a contiguous memory block and provided the symbols
! ‘__gcov_info_start’ and ‘__gcov_info_end’:
  
       $ grep -C 1 "\.gcov_info" app.map
  
*************** into a contiguous memory block and provi
*** 66741,66751 ****
        .gcov_info     0x0000000000403ac8        0x8 app.o
                       0x0000000000403ad0                PROVIDE (__gcov_info_end = .)
  
!  Make sure no '.gcda' files are present.  Run the program with nothing
! to decode and dump 'stderr' to the file 'gcda-0.txt' (first run).  Run
! the program to decode 'gcda-0.txt' and send it to the 'gcov-tool' using
! the 'merge-stream' subcommand to create the '.gcda' files (second run).
! Run 'gcov' to produce a report for 'app.c'.  We see that the first run
  with nothing to decode results in a partially covered application:
  
       $ rm -f app.gcda main.gcda
--- 66752,66762 ----
        .gcov_info     0x0000000000403ac8        0x8 app.o
                       0x0000000000403ad0                PROVIDE (__gcov_info_end = .)
  
!  Make sure no ‘.gcda’ files are present.  Run the program with nothing
! to decode and dump ‘stderr’ to the file ‘gcda-0.txt’ (first run).  Run
! the program to decode ‘gcda-0.txt’ and send it to the ‘gcov-tool’ using
! the ‘merge-stream’ subcommand to create the ‘.gcda’ files (second run).
! Run ‘gcov’ to produce a report for ‘app.c’.  We see that the first run
  with nothing to decode results in a partially covered application:
  
       $ rm -f app.gcda main.gcda
*************** with nothing to decode results in a part
*** 66761,66769 ****
  
       Lines executed:69.23% of 13
  
!  Run the program to decode 'gcda-1.txt' and send it to the 'gcov-tool'
! using the 'merge-stream' subcommand to update the '.gcda' files.  Run
! 'gcov' to produce a report for 'app.c'.  Since the second run decoded
  the gcov information of the first run, we have now a fully covered
  application:
  
--- 66772,66780 ----
  
       Lines executed:69.23% of 13
  
!  Run the program to decode ‘gcda-1.txt’ and send it to the ‘gcov-tool’
! using the ‘merge-stream’ subcommand to update the ‘.gcda’ files.  Run
! ‘gcov’ to produce a report for ‘app.c’.  Since the second run decoded
  the gcov information of the first run, we have now a fully covered
  application:
  
*************** flow graph edge counters in a zero-initi
*** 66787,66793 ****
  safe to run instrumented code before the zero-initialized data is
  cleared to zero.  The coverage information obtained before the
  zero-initialized data is cleared to zero is unusable.  Dumping the gcov
! information using '__gcov_info_to_gcda()' before the zero-initialized
  data is cleared to zero or the initialized data is loaded, is undefined
  behaviour.  Clearing the zero-initialized data to zero through a
  function instrumented for profiling or test coverage is undefined
--- 66798,66804 ----
  safe to run instrumented code before the zero-initialized data is
  cleared to zero.  The coverage information obtained before the
  zero-initialized data is cleared to zero is unusable.  Dumping the gcov
! information using ‘__gcov_info_to_gcda()’ before the zero-initialized
  data is cleared to zero or the initialized data is loaded, is undefined
  behaviour.  Clearing the zero-initialized data to zero through a
  function instrumented for profiling or test coverage is undefined
*************** counters for example.
*** 66797,66806 ****
  
  File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
  
! 11 'gcov-tool'--an Offline Gcda Profile Processing Tool
  *******************************************************
  
! 'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
  or process gcda profile files offline.
  
  * Menu:
--- 66808,66817 ----
  
  File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
  
! 11 ‘gcov-tool’--an Offline Gcda Profile Processing Tool
  *******************************************************
  
! ‘gcov-tool’ is a tool you can use in conjunction with GCC to manipulate
  or process gcda profile files offline.
  
  * Menu:
*************** or process gcda profile files offline.
*** 66811,66951 ****
  
  File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
  
! 11.1 Introduction to 'gcov-tool'
  ================================
  
! 'gcov-tool' is an offline tool to process gcc's gcda profile files.
  
   Current gcov-tool supports the following functionalities:
  
!    * merge two sets of profiles with weights.
  
!    * read a stream of profiles with associated filenames and merge it
       with a set of profiles with weights.
  
!    * read one set of profile and rewrite profile contents.  One can
       scale or normalize the count values.
  
   Examples of the use cases for this tool are:
!    * Collect the profiles for different set of inputs, and use this tool
       to merge them.  One can specify the weight to factor in the
       relative importance of each input.
  
!    * Collect profiles from target systems without a filesystem
       (freestanding environments).  Merge the collected profiles with
       associated profiles present on the host system.  One can specify
       the weight to factor in the relative importance of each input.
  
!    * Rewrite the profile after removing a subset of the gcda files,
       while maintaining the consistency of the summary and the histogram.
  
!    * It can also be used to debug or libgcov code as the tools shares
       the majority code as the runtime library.
  
   Note that for the merging operation, this profile generated offline may
  contain slight different values from the online merged profile.  Here
  are a list of typical differences:
  
!    * histogram difference: This offline tool recomputes the histogram
       after merging the counters.  The resulting histogram, therefore, is
       precise.  The online merging does not have this capability - the
       histogram is merged from two histograms and the result is an
       approximation.
  
!    * summary checksum difference: Summary checksum uses a CRC32
       operation.  The value depends on the link list order of gcov-info
       objects.  This order is different in gcov-tool from that in the
       online merge.  It's expected to have different summary checksums.
       It does not really matter as the compiler does not use this
       checksum anywhere.
  
!    * value profile counter values difference: Some counter values for
       value profile are runtime dependent, like heap addresses.  It's
       normal to see some difference in these kind of counters.
  
  
  File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
  
! 11.2 Invoking 'gcov-tool'
  =========================
  
       gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
  
!  'gcov-tool' accepts the following options:
  
! '-h'
! '--help'
!      Display help about using 'gcov-tool' (on the standard output), and
       exit without doing any further processing.
  
! '-v'
! '--version'
!      Display the 'gcov-tool' version number (on the standard output),
       and exit without doing any further processing.
  
! 'merge'
       Merge two profile directories.
  
!      '-o DIRECTORY'
!      '--output DIRECTORY'
            Set the output profile directory.  Default output directory
            name is MERGED_PROFILE.
  
!      '-v'
!      '--verbose'
            Set the verbose mode.
  
!      '-w W1,W2'
!      '--weight W1,W2'
            Set the merge weights of the DIRECTORY1 and DIRECTORY2,
            respectively.  The default weights are 1 for both.
  
! 'merge-stream'
       Collect profiles with associated filenames from a _gcfn_ and _gcda_
       data stream.  Read the stream from the file specified by FILE or
!      from 'stdin'.  Merge the profiles with associated profiles in the
       host filesystem.  Apply the optional weights while merging
       profiles.
  
       For the generation of a _gcfn_ and _gcda_ data stream on the target
!      system, please have a look at the '__gcov_filename_to_gcfn()' and
!      '__gcov_info_to_gcda()' functions declared in '#include <gcov.h>'.
  
!      '-v'
!      '--verbose'
            Set the verbose mode.
  
!      '-w W1,W2'
!      '--weight W1,W2'
            Set the merge weights of the profiles from the _gcfn_ and
            _gcda_ data stream and the associated profiles in the host
            filesystem, respectively.  The default weights are 1 for both.
  
! 'rewrite'
       Read the specified profile directory and rewrite to a new
       directory.
  
!      '-n LONG_LONG_VALUE'
!      '--normalize <long_long_value>'
            Normalize the profile.  The specified value is the max counter
            value in the new profile.
  
!      '-o DIRECTORY'
!      '--output DIRECTORY'
            Set the output profile directory.  Default output name is
            REWRITE_PROFILE.
  
!      '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
!      '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
            Scale the profile counters.  The specified value can be in
            floating point value, or simple fraction value form, such 1,
            2, 2/3, and 5/3.
  
!      '-v'
!      '--verbose'
            Set the verbose mode.
  
! 'overlap'
       Compute the overlap score between the two specified profile
       directories.  The overlap score is computed based on the arc
       profiles.  It is defined as the sum of min (p1_counter[i] /
--- 66822,66962 ----
  
  File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
  
! 11.1 Introduction to ‘gcov-tool’
  ================================
  
! ‘gcov-tool’ is an offline tool to process gcc's gcda profile files.
  
   Current gcov-tool supports the following functionalities:
  
!    • merge two sets of profiles with weights.
  
!    • read a stream of profiles with associated filenames and merge it
       with a set of profiles with weights.
  
!    • read one set of profile and rewrite profile contents.  One can
       scale or normalize the count values.
  
   Examples of the use cases for this tool are:
!    • Collect the profiles for different set of inputs, and use this tool
       to merge them.  One can specify the weight to factor in the
       relative importance of each input.
  
!    • Collect profiles from target systems without a filesystem
       (freestanding environments).  Merge the collected profiles with
       associated profiles present on the host system.  One can specify
       the weight to factor in the relative importance of each input.
  
!    • Rewrite the profile after removing a subset of the gcda files,
       while maintaining the consistency of the summary and the histogram.
  
!    • It can also be used to debug or libgcov code as the tools shares
       the majority code as the runtime library.
  
   Note that for the merging operation, this profile generated offline may
  contain slight different values from the online merged profile.  Here
  are a list of typical differences:
  
!    • histogram difference: This offline tool recomputes the histogram
       after merging the counters.  The resulting histogram, therefore, is
       precise.  The online merging does not have this capability - the
       histogram is merged from two histograms and the result is an
       approximation.
  
!    • summary checksum difference: Summary checksum uses a CRC32
       operation.  The value depends on the link list order of gcov-info
       objects.  This order is different in gcov-tool from that in the
       online merge.  It's expected to have different summary checksums.
       It does not really matter as the compiler does not use this
       checksum anywhere.
  
!    • value profile counter values difference: Some counter values for
       value profile are runtime dependent, like heap addresses.  It's
       normal to see some difference in these kind of counters.
  
  
  File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
  
! 11.2 Invoking ‘gcov-tool’
  =========================
  
       gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
  
!  ‘gcov-tool’ accepts the following options:
  
! ‘-h’
! ‘--help’
!      Display help about using ‘gcov-tool’ (on the standard output), and
       exit without doing any further processing.
  
! ‘-v’
! ‘--version’
!      Display the ‘gcov-tool’ version number (on the standard output),
       and exit without doing any further processing.
  
! ‘merge’
       Merge two profile directories.
  
!      ‘-o DIRECTORY’
!      ‘--output DIRECTORY’
            Set the output profile directory.  Default output directory
            name is MERGED_PROFILE.
  
!      ‘-v’
!      ‘--verbose’
            Set the verbose mode.
  
!      ‘-w W1,W2’
!      ‘--weight W1,W2’
            Set the merge weights of the DIRECTORY1 and DIRECTORY2,
            respectively.  The default weights are 1 for both.
  
! ‘merge-stream’
       Collect profiles with associated filenames from a _gcfn_ and _gcda_
       data stream.  Read the stream from the file specified by FILE or
!      from ‘stdin’.  Merge the profiles with associated profiles in the
       host filesystem.  Apply the optional weights while merging
       profiles.
  
       For the generation of a _gcfn_ and _gcda_ data stream on the target
!      system, please have a look at the ‘__gcov_filename_to_gcfn()’ and
!      ‘__gcov_info_to_gcda()’ functions declared in ‘#include <gcov.h>’.
  
!      ‘-v’
!      ‘--verbose’
            Set the verbose mode.
  
!      ‘-w W1,W2’
!      ‘--weight W1,W2’
            Set the merge weights of the profiles from the _gcfn_ and
            _gcda_ data stream and the associated profiles in the host
            filesystem, respectively.  The default weights are 1 for both.
  
! ‘rewrite’
       Read the specified profile directory and rewrite to a new
       directory.
  
!      ‘-n LONG_LONG_VALUE’
!      ‘--normalize <long_long_value>’
            Normalize the profile.  The specified value is the max counter
            value in the new profile.
  
!      ‘-o DIRECTORY’
!      ‘--output DIRECTORY’
            Set the output profile directory.  Default output name is
            REWRITE_PROFILE.
  
!      ‘-s FLOAT_OR_SIMPLE-FRAC_VALUE’
!      ‘--scale FLOAT_OR_SIMPLE-FRAC_VALUE’
            Scale the profile counters.  The specified value can be in
            floating point value, or simple fraction value form, such 1,
            2, 2/3, and 5/3.
  
!      ‘-v’
!      ‘--verbose’
            Set the verbose mode.
  
! ‘overlap’
       Compute the overlap score between the two specified profile
       directories.  The overlap score is computed based on the arc
       profiles.  It is defined as the sum of min (p1_counter[i] /
*************** File: gcc.info,  Node: Invoking Gcov-too
*** 66954,66987 ****
       p1_sum_all and p2_sum_all are the sum of counter values in profile
       1 and profile 2, respectively.
  
!      '-f'
!      '--function'
            Print function level overlap score.
  
!      '-F'
!      '--fullname'
            Print full gcda filename.
  
!      '-h'
!      '--hotonly'
            Only print info for hot objects/functions.
  
!      '-o'
!      '--object'
            Print object level overlap score.
  
!      '-t FLOAT'
!      '--hot_threshold <float>'
            Set the threshold for hot counter value.
  
!      '-v'
!      '--verbose'
            Set the verbose mode.
  
  
  File: gcc.info,  Node: Gcov-dump,  Next: lto-dump,  Prev: Gcov-tool,  Up: Top
  
! 12 'gcov-dump'--an Offline Gcda and Gcno Profile Dump Tool
  **********************************************************
  
  * Menu:
--- 66965,66998 ----
       p1_sum_all and p2_sum_all are the sum of counter values in profile
       1 and profile 2, respectively.
  
!      ‘-f’
!      ‘--function’
            Print function level overlap score.
  
!      ‘-F’
!      ‘--fullname’
            Print full gcda filename.
  
!      ‘-h’
!      ‘--hotonly’
            Only print info for hot objects/functions.
  
!      ‘-o’
!      ‘--object’
            Print object level overlap score.
  
!      ‘-t FLOAT’
!      ‘--hot_threshold <float>’
            Set the threshold for hot counter value.
  
!      ‘-v’
!      ‘--verbose’
            Set the verbose mode.
  
  
  File: gcc.info,  Node: Gcov-dump,  Next: lto-dump,  Prev: Gcov-tool,  Up: Top
  
! 12 ‘gcov-dump’--an Offline Gcda and Gcno Profile Dump Tool
  **********************************************************
  
  * Menu:
*************** File: gcc.info,  Node: Gcov-dump,  Next:
*** 66992,67043 ****
  
  File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
  
! 12.1 Introduction to 'gcov-dump'
  ================================
  
! 'gcov-dump' is a tool you can use in conjunction with GCC to dump
  content of gcda and gcno profile files offline.
  
  
  File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
  
! 12.2 Invoking 'gcov-dump'
  =========================
  
       Usage: gcov-dump [OPTION] ... GCOVFILES
  
!  'gcov-dump' accepts the following options:
  
! '-h'
! '--help'
!      Display help about using 'gcov-dump' (on the standard output), and
       exit without doing any further processing.
  
! '-l'
! '--long'
       Dump content of records.
  
! '-p'
! '--positions'
       Dump positions of records.
  
! '-r'
! '--raw'
       Print content records in raw format.
  
! '-s'
! '--stable'
       Print content in stable format usable for comparison.
  
! '-v'
! '--version'
!      Display the 'gcov-dump' version number (on the standard output),
       and exit without doing any further processing.
  
  
  File: gcc.info,  Node: lto-dump,  Next: Trouble,  Prev: Gcov-dump,  Up: Top
  
! 13 'lto-dump'--Tool for dumping LTO object files.
  *************************************************
  
  * Menu:
--- 67003,67054 ----
  
  File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
  
! 12.1 Introduction to ‘gcov-dump’
  ================================
  
! ‘gcov-dump’ is a tool you can use in conjunction with GCC to dump
  content of gcda and gcno profile files offline.
  
  
  File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
  
! 12.2 Invoking ‘gcov-dump’
  =========================
  
       Usage: gcov-dump [OPTION] ... GCOVFILES
  
!  ‘gcov-dump’ accepts the following options:
  
! ‘-h’
! ‘--help’
!      Display help about using ‘gcov-dump’ (on the standard output), and
       exit without doing any further processing.
  
! ‘-l’
! ‘--long’
       Dump content of records.
  
! ‘-p’
! ‘--positions’
       Dump positions of records.
  
! ‘-r’
! ‘--raw’
       Print content records in raw format.
  
! ‘-s’
! ‘--stable’
       Print content in stable format usable for comparison.
  
! ‘-v’
! ‘--version’
!      Display the ‘gcov-dump’ version number (on the standard output),
       and exit without doing any further processing.
  
  
  File: gcc.info,  Node: lto-dump,  Next: Trouble,  Prev: Gcov-dump,  Up: Top
  
! 13 ‘lto-dump’--Tool for dumping LTO object files.
  *************************************************
  
  * Menu:
*************** File: gcc.info,  Node: lto-dump,  Next:
*** 67048,67115 ****
  
  File: gcc.info,  Node: lto-dump Intro,  Next: Invoking lto-dump,  Up: lto-dump
  
! 13.1 Introduction to 'lto-dump'
  ===============================
  
! 'lto-dump' is a tool you can use in conjunction with GCC to dump link
  time optimization object files.
  
  
  File: gcc.info,  Node: Invoking lto-dump,  Prev: lto-dump Intro,  Up: lto-dump
  
! 13.2 Invoking 'lto-dump'
  ========================
  
       Usage: lto-dump [OPTION] ... OBJFILES
  
!  'lto-dump' accepts the following options:
  
! '-list'
       Dumps list of details of functions and variables.
  
! '-demangle'
       Dump the demangled output.
  
! '-defined-only'
       Dump only the defined symbols.
  
! '-print-value'
       Dump initial values of the variables.
  
! '-name-sort'
       Sort the symbols alphabetically.
  
! '-size-sort'
       Sort the symbols according to size.
  
! '-reverse-sort'
       Dump the symbols in reverse order.
  
! '-no-sort'
       Dump the symbols in order of occurrence.
  
! '-symbol='
       Dump the details of specific symbol.
  
! '-objects'
       Dump the details of LTO objects.
  
! '-type-stats'
       Dump the statistics of tree types.
  
! '-tree-stats'
       Dump the statistics of trees.
  
! '-gimple-stats'
       Dump the statistics of gimple statements.
  
! '-dump-level='
       For deciding the optimization level of body.
  
! '-dump-body='
       Dump the specific gimple body.
  
! '-help'
       Display the dump tool help.
  
  
--- 67059,67126 ----
  
  File: gcc.info,  Node: lto-dump Intro,  Next: Invoking lto-dump,  Up: lto-dump
  
! 13.1 Introduction to ‘lto-dump’
  ===============================
  
! ‘lto-dump’ is a tool you can use in conjunction with GCC to dump link
  time optimization object files.
  
  
  File: gcc.info,  Node: Invoking lto-dump,  Prev: lto-dump Intro,  Up: lto-dump
  
! 13.2 Invoking ‘lto-dump’
  ========================
  
       Usage: lto-dump [OPTION] ... OBJFILES
  
!  ‘lto-dump’ accepts the following options:
  
! ‘-list’
       Dumps list of details of functions and variables.
  
! ‘-demangle’
       Dump the demangled output.
  
! ‘-defined-only’
       Dump only the defined symbols.
  
! ‘-print-value’
       Dump initial values of the variables.
  
! ‘-name-sort’
       Sort the symbols alphabetically.
  
! ‘-size-sort’
       Sort the symbols according to size.
  
! ‘-reverse-sort’
       Dump the symbols in reverse order.
  
! ‘-no-sort’
       Dump the symbols in order of occurrence.
  
! ‘-symbol=’
       Dump the details of specific symbol.
  
! ‘-objects’
       Dump the details of LTO objects.
  
! ‘-type-stats’
       Dump the statistics of tree types.
  
! ‘-tree-stats’
       Dump the statistics of trees.
  
! ‘-gimple-stats’
       Dump the statistics of gimple statements.
  
! ‘-dump-level=’
       For deciding the optimization level of body.
  
! ‘-dump-body=’
       Dump the specific gimple body.
  
! ‘-help’
       Display the dump tool help.
  
  
*************** File: gcc.info,  Node: Actual Bugs,  Nex
*** 67148,67156 ****
  14.1 Actual Bugs We Haven't Fixed Yet
  =====================================
  
!    * The 'fixincludes' script interacts badly with automounters; if the
       directory of system header files is automounted, it tends to be
!      unmounted while 'fixincludes' is running.  This would seem to be a
       bug in the automounter.  We don't know any good way to work around
       it.
  
--- 67159,67167 ----
  14.1 Actual Bugs We Haven't Fixed Yet
  =====================================
  
!    • The ‘fixincludes’ script interacts badly with automounters; if the
       directory of system header files is automounted, it tends to be
!      unmounted while ‘fixincludes’ is running.  This would seem to be a
       bug in the automounter.  We don't know any good way to work around
       it.
  
*************** This section lists various difficulties
*** 67164,67170 ****
  together with other compilers or with the assemblers, linkers, libraries
  and debuggers on certain systems.
  
!    * On many platforms, GCC supports a different ABI for C++ than do
       other compilers, so the object files compiled by GCC cannot be used
       with object files generated by another C++ compiler.
  
--- 67175,67181 ----
  together with other compilers or with the assemblers, linkers, libraries
  and debuggers on certain systems.
  
!    • On many platforms, GCC supports a different ABI for C++ than do
       other compilers, so the object files compiled by GCC cannot be used
       with object files generated by another C++ compiler.
  
*************** and debuggers on certain systems.
*** 67179,67196 ****
       Incompatible libraries are then detected at link time, rather than
       at run time.
  
!    * On some BSD systems, including some versions of Ultrix, use of
       profiling causes static variable destructors (currently used only
       in C++) not to be run.
  
!    * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
!      boundary, and it expects every 'double' to be so aligned.  The Sun
!      compiler usually gives 'double' values 8-byte alignment, with one
!      exception: function arguments of type 'double' may not be aligned.
  
       As a result, if a function compiled with Sun CC takes the address
!      of an argument of type 'double' and passes this pointer of type
!      'double *' to a function compiled with GCC, dereferencing the
       pointer may cause a fatal signal.
  
       One way to solve this problem is to compile your entire program
--- 67190,67207 ----
       Incompatible libraries are then detected at link time, rather than
       at run time.
  
!    • On some BSD systems, including some versions of Ultrix, use of
       profiling causes static variable destructors (currently used only
       in C++) not to be run.
  
!    • On a SPARC, GCC aligns all values of type ‘double’ on an 8-byte
!      boundary, and it expects every ‘double’ to be so aligned.  The Sun
!      compiler usually gives ‘double’ values 8-byte alignment, with one
!      exception: function arguments of type ‘double’ may not be aligned.
  
       As a result, if a function compiled with Sun CC takes the address
!      of an argument of type ‘double’ and passes this pointer of type
!      ‘double *’ to a function compiled with GCC, dereferencing the
       pointer may cause a fatal signal.
  
       One way to solve this problem is to compile your entire program
*************** and debuggers on certain systems.
*** 67198,67205 ****
       compiled with Sun CC to copy the argument into a local variable;
       local variables are always properly aligned.  A third solution is
       to modify the function that uses the pointer to dereference it via
!      the following function 'access_double' instead of directly with
!      '*':
  
            inline double
            access_double (double *unaligned_ptr)
--- 67209,67216 ----
       compiled with Sun CC to copy the argument into a local variable;
       local variables are always properly aligned.  A third solution is
       to modify the function that uses the pointer to dereference it via
!      the following function ‘access_double’ instead of directly with
!      ‘*’:
  
            inline double
            access_double (double *unaligned_ptr)
*************** and debuggers on certain systems.
*** 67217,67258 ****
  
       Storing into the pointer can be done likewise with the same union.
  
!    * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
       allocate memory that is only 4 byte aligned.  Since GCC on the
       SPARC assumes that doubles are 8 byte aligned, this may result in a
       fatal signal if doubles are stored in memory allocated by the
!      'libmalloc.a' library.
  
!      The solution is to not use the 'libmalloc.a' library.  Use instead
!      'malloc' and related functions from 'libc.a'; they do not have this
       problem.
  
!    * On the HP PA machine, ADB sometimes fails to work on functions
       compiled with GCC.  Specifically, it fails to work on functions
!      that use 'alloca' or variable-size arrays.  This is because GCC
       doesn't generate HP-UX unwind descriptors for such functions.  It
       may even be impossible to generate them.
  
!    * Debugging ('-g') is not supported on the HP PA machine, unless you
       use the preliminary GNU tools.
  
!    * Taking the address of a label may generate errors from the HP-UX PA
       assembler.  GAS for the PA does not have this problem.
  
!    * Using floating point parameters for indirect calls to static
       functions will not work when using the HP assembler.  There simply
       is no way for GCC to specify what registers hold arguments for
       static functions when using the HP assembler.  GAS for the PA does
       not have this problem.
  
!    * In extremely rare cases involving some very large functions you may
       receive errors from the HP linker complaining about an out of
       bounds unconditional branch offset.  This used to occur more often
       in previous versions of GCC, but is now exceptionally rare.  If you
       should run into it, you can work around by making your function
       smaller.
  
!    * GCC compiled code sometimes emits warnings from the HP-UX assembler
       of the form:
  
            (warning) Use of GR3 when
--- 67228,67269 ----
  
       Storing into the pointer can be done likewise with the same union.
  
!    • On Solaris, the ‘malloc’ function in the ‘libmalloc.a’ library may
       allocate memory that is only 4 byte aligned.  Since GCC on the
       SPARC assumes that doubles are 8 byte aligned, this may result in a
       fatal signal if doubles are stored in memory allocated by the
!      ‘libmalloc.a’ library.
  
!      The solution is to not use the ‘libmalloc.a’ library.  Use instead
!      ‘malloc’ and related functions from ‘libc.a’; they do not have this
       problem.
  
!    • On the HP PA machine, ADB sometimes fails to work on functions
       compiled with GCC.  Specifically, it fails to work on functions
!      that use ‘alloca’ or variable-size arrays.  This is because GCC
       doesn't generate HP-UX unwind descriptors for such functions.  It
       may even be impossible to generate them.
  
!    • Debugging (‘-g’) is not supported on the HP PA machine, unless you
       use the preliminary GNU tools.
  
!    • Taking the address of a label may generate errors from the HP-UX PA
       assembler.  GAS for the PA does not have this problem.
  
!    • Using floating point parameters for indirect calls to static
       functions will not work when using the HP assembler.  There simply
       is no way for GCC to specify what registers hold arguments for
       static functions when using the HP assembler.  GAS for the PA does
       not have this problem.
  
!    • In extremely rare cases involving some very large functions you may
       receive errors from the HP linker complaining about an out of
       bounds unconditional branch offset.  This used to occur more often
       in previous versions of GCC, but is now exceptionally rare.  If you
       should run into it, you can work around by making your function
       smaller.
  
!    • GCC compiled code sometimes emits warnings from the HP-UX assembler
       of the form:
  
            (warning) Use of GR3 when
*************** and debuggers on certain systems.
*** 67260,67302 ****
  
       These warnings are harmless and can be safely ignored.
  
!    * In extremely rare cases involving some very large functions you may
       receive errors from the AIX Assembler complaining about a
       displacement that is too large.  If you should run into it, you can
       work around by making your function smaller.
  
!    * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
       semantics which merges global symbols between libraries and
       applications, especially necessary for C++ streams functionality.
       This is not the default behavior of AIX shared libraries and
!      dynamic linking.  'libstdc++.a' is built on AIX with
       "runtime-linking" enabled so that symbol merging can occur.  To
!      utilize this feature, the application linked with 'libstdc++.a'
!      must include the '-Wl,-brtl' flag on the link line.  G++ cannot
       impose this because this option may interfere with the semantics of
!      the user program and users may not always use 'g++' to link his or
       her application.  Applications are not required to use the
!      '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
       library which is not dependent on the symbol merging semantics will
       continue to function correctly.
  
!    * An application can interpose its own definition of functions for
!      functions invoked by 'libstdc++.a' with "runtime-linking" enabled
       on AIX.  To accomplish this the application must be linked with
       "runtime-linking" option and the functions explicitly must be
!      exported by the application ('-Wl,-brtl,-bE:exportfile').
  
!    * AIX on the RS/6000 provides support (NLS) for environments outside
       of the United States.  Compilers and assemblers use NLS to support
       locale-specific representations of various objects including
!      floating-point numbers ('.' vs ',' for separating decimal
       fractions).  There have been problems reported where the library
       linked with GCC does not produce the same floating-point formats
       that the assembler accepts.  If you have this problem, set the
!      'LANG' environment variable to 'C' or 'En_US'.
  
!    * Even if you specify '-fdollars-in-identifiers', you cannot
!      successfully use '$' in identifiers on the RS/6000 due to a
       restriction in the IBM assembler.  GAS supports these identifiers.
  
  
--- 67271,67313 ----
  
       These warnings are harmless and can be safely ignored.
  
!    • In extremely rare cases involving some very large functions you may
       receive errors from the AIX Assembler complaining about a
       displacement that is too large.  If you should run into it, you can
       work around by making your function smaller.
  
!    • The ‘libstdc++.a’ library in GCC relies on the SVR4 dynamic linker
       semantics which merges global symbols between libraries and
       applications, especially necessary for C++ streams functionality.
       This is not the default behavior of AIX shared libraries and
!      dynamic linking.  ‘libstdc++.a’ is built on AIX with
       "runtime-linking" enabled so that symbol merging can occur.  To
!      utilize this feature, the application linked with ‘libstdc++.a’
!      must include the ‘-Wl,-brtl’ flag on the link line.  G++ cannot
       impose this because this option may interfere with the semantics of
!      the user program and users may not always use ‘g++’ to link his or
       her application.  Applications are not required to use the
!      ‘-Wl,-brtl’ flag on the link line--the rest of the ‘libstdc++.a’
       library which is not dependent on the symbol merging semantics will
       continue to function correctly.
  
!    • An application can interpose its own definition of functions for
!      functions invoked by ‘libstdc++.a’ with "runtime-linking" enabled
       on AIX.  To accomplish this the application must be linked with
       "runtime-linking" option and the functions explicitly must be
!      exported by the application (‘-Wl,-brtl,-bE:exportfile’).
  
!    • AIX on the RS/6000 provides support (NLS) for environments outside
       of the United States.  Compilers and assemblers use NLS to support
       locale-specific representations of various objects including
!      floating-point numbers (‘.’ vs ‘,’ for separating decimal
       fractions).  There have been problems reported where the library
       linked with GCC does not produce the same floating-point formats
       that the assembler accepts.  If you have this problem, set the
!      ‘LANG’ environment variable to ‘C’ or ‘En_US’.
  
!    • Even if you specify ‘-fdollars-in-identifiers’, you cannot
!      successfully use ‘$’ in identifiers on the RS/6000 due to a
       restriction in the IBM assembler.  GAS supports these identifiers.
  
  
*************** File: gcc.info,  Node: Incompatibilities
*** 67308,67345 ****
  There are several noteworthy incompatibilities between GNU C and K&R
  (non-ISO) versions of C.
  
!    * GCC normally makes string constants read-only.  If several
       identical-looking string constants are used, GCC stores only one
       copy of the string.
  
!      One consequence is that you cannot call 'mktemp' with a string
!      constant argument.  The function 'mktemp' always alters the string
       its argument points to.
  
!      Another consequence is that 'sscanf' does not work on some very old
       systems when passed a string constant as its format control string
!      or input.  This is because 'sscanf' incorrectly tries to write into
!      the string constant.  Likewise 'fscanf' and 'scanf'.
  
       The solution to these problems is to change the program to use
!      'char'-array variables with initialization strings for these
       purposes instead of string constants.
  
!    * '-2147483648' is positive.
  
!      This is because 2147483648 cannot fit in the type 'int', so
!      (following the ISO C rules) its data type is 'unsigned long int'.
       Negating this value yields 2147483648 again.
  
!    * GCC does not substitute macro arguments when they appear inside of
       string constants.  For example, the following macro in GCC
  
            #define foo(a) "a"
  
!      will produce output '"a"' regardless of what the argument A is.
  
!    * When you use 'setjmp' and 'longjmp', the only automatic variables
!      guaranteed to remain valid are those declared 'volatile'.  This is
       a consequence of automatic register allocation.  Consider this
       function:
  
--- 67319,67356 ----
  There are several noteworthy incompatibilities between GNU C and K&R
  (non-ISO) versions of C.
  
!    • GCC normally makes string constants read-only.  If several
       identical-looking string constants are used, GCC stores only one
       copy of the string.
  
!      One consequence is that you cannot call ‘mktemp’ with a string
!      constant argument.  The function ‘mktemp’ always alters the string
       its argument points to.
  
!      Another consequence is that ‘sscanf’ does not work on some very old
       systems when passed a string constant as its format control string
!      or input.  This is because ‘sscanf’ incorrectly tries to write into
!      the string constant.  Likewise ‘fscanf’ and ‘scanf’.
  
       The solution to these problems is to change the program to use
!      ‘char’-array variables with initialization strings for these
       purposes instead of string constants.
  
!    • ‘-2147483648’ is positive.
  
!      This is because 2147483648 cannot fit in the type ‘int’, so
!      (following the ISO C rules) its data type is ‘unsigned long int’.
       Negating this value yields 2147483648 again.
  
!    • GCC does not substitute macro arguments when they appear inside of
       string constants.  For example, the following macro in GCC
  
            #define foo(a) "a"
  
!      will produce output ‘"a"’ regardless of what the argument A is.
  
!    • When you use ‘setjmp’ and ‘longjmp’, the only automatic variables
!      guaranteed to remain valid are those declared ‘volatile’.  This is
       a consequence of automatic register allocation.  Consider this
       function:
  
*************** There are several noteworthy incompatibi
*** 67354,67372 ****
                return a;
  
              a = fun2 ();
!             /* 'longjmp (j)' may occur in 'fun3'. */
              return a + fun3 ();
            }
  
!      Here 'a' may or may not be restored to its first value when the
!      'longjmp' occurs.  If 'a' is allocated in a register, then its
       first value is restored; otherwise, it keeps the last value stored
       in it.
  
!      If you use the '-W' option with the '-O' option, you will get a
       warning when GCC thinks such a problem might be possible.
  
!    * Programs that use preprocessing directives in the middle of macro
       arguments do not work with GCC.  For example, a program like this
       will not work:
  
--- 67365,67383 ----
                return a;
  
              a = fun2 ();
!             /* ‘longjmp (j)’ may occur in ‘fun3’. */
              return a + fun3 ();
            }
  
!      Here ‘a’ may or may not be restored to its first value when the
!      ‘longjmp’ occurs.  If ‘a’ is allocated in a register, then its
       first value is restored; otherwise, it keeps the last value stored
       in it.
  
!      If you use the ‘-W’ option with the ‘-O’ option, you will get a
       warning when GCC thinks such a problem might be possible.
  
!    • Programs that use preprocessing directives in the middle of macro
       arguments do not work with GCC.  For example, a program like this
       will not work:
  
*************** There are several noteworthy incompatibi
*** 67376,67421 ****
  
       ISO C does not permit such a construct.
  
!    * K&R compilers allow comments to cross over an inclusion boundary
       (i.e. started in an include file and ended in the including file).
  
!    * Declarations of external variables and functions within a block
       apply only to the block containing the declaration.  In other
       words, they have the same scope as any other declaration in the
       same place.
  
!      In some other C compilers, an 'extern' declaration affects all the
       rest of the file even if it happens within a block.
  
!    * In traditional C, you can combine 'long', etc., with a typedef
       name, as shown here:
  
            typedef int foo;
            typedef long foo bar;
  
!      In ISO C, this is not allowed: 'long' and other type modifiers
!      require an explicit 'int'.
  
!    * PCC allows typedef names to be used as function parameters.
  
!    * Traditional C allows the following erroneous pair of declarations
       to appear together in a given scope:
  
            typedef int foo;
            typedef foo foo;
  
!    * GCC treats all characters of identifiers as significant.  According
       to K&R-1 (2.2), "No more than the first eight characters are
       significant, although more may be used.".  Also according to K&R-1
       (2.2), "An identifier is a sequence of letters and digits; the
       first character must be a letter.  The underscore _ counts as a
       letter.", but GCC also allows dollar signs in identifiers.
  
!    * PCC allows whitespace in the middle of compound assignment
!      operators such as '+='.  GCC, following the ISO standard, does not
       allow this.
  
!    * GCC complains about unterminated character constants inside of
       preprocessing conditionals that fail.  Some programs have English
       comments enclosed in conditionals that are guaranteed to fail; if
       these comments contain apostrophes, GCC will probably report an
--- 67387,67432 ----
  
       ISO C does not permit such a construct.
  
!    • K&R compilers allow comments to cross over an inclusion boundary
       (i.e. started in an include file and ended in the including file).
  
!    • Declarations of external variables and functions within a block
       apply only to the block containing the declaration.  In other
       words, they have the same scope as any other declaration in the
       same place.
  
!      In some other C compilers, an ‘extern’ declaration affects all the
       rest of the file even if it happens within a block.
  
!    • In traditional C, you can combine ‘long’, etc., with a typedef
       name, as shown here:
  
            typedef int foo;
            typedef long foo bar;
  
!      In ISO C, this is not allowed: ‘long’ and other type modifiers
!      require an explicit ‘int’.
  
!    • PCC allows typedef names to be used as function parameters.
  
!    • Traditional C allows the following erroneous pair of declarations
       to appear together in a given scope:
  
            typedef int foo;
            typedef foo foo;
  
!    • GCC treats all characters of identifiers as significant.  According
       to K&R-1 (2.2), "No more than the first eight characters are
       significant, although more may be used.".  Also according to K&R-1
       (2.2), "An identifier is a sequence of letters and digits; the
       first character must be a letter.  The underscore _ counts as a
       letter.", but GCC also allows dollar signs in identifiers.
  
!    • PCC allows whitespace in the middle of compound assignment
!      operators such as ‘+=’.  GCC, following the ISO standard, does not
       allow this.
  
!    • GCC complains about unterminated character constants inside of
       preprocessing conditionals that fail.  Some programs have English
       comments enclosed in conditionals that are guaranteed to fail; if
       these comments contain apostrophes, GCC will probably report an
*************** There are several noteworthy incompatibi
*** 67426,67451 ****
            #endif
  
       The best solution to such a problem is to put the text into an
!      actual C comment delimited by '/*...*/'.
  
!    * Many user programs contain the declaration 'long time ();'.  In the
       past, the system header files on many systems did not actually
!      declare 'time', so it did not matter what type your program
!      declared it to return.  But in systems with ISO C headers, 'time'
!      is declared to return 'time_t', and if that is not the same as
!      'long', then 'long time ();' is erroneous.
  
       The solution is to change your program to use appropriate system
!      headers ('<time.h>' on systems with ISO C headers) and not to
!      declare 'time' if the system header files declare it, or failing
!      that to use 'time_t' as the return type of 'time'.
  
!    * When compiling functions that return 'float', PCC converts it to a
!      double.  GCC actually returns a 'float'.  If you are concerned with
       PCC compatibility, you should declare your functions to return
!      'double'; you might as well say what you mean.
  
!    * When compiling functions that return structures or unions, GCC
       output code normally uses a method different from that used on most
       versions of Unix.  As a result, code compiled with GCC cannot call
       a structure-returning function compiled with PCC, and vice versa.
--- 67437,67462 ----
            #endif
  
       The best solution to such a problem is to put the text into an
!      actual C comment delimited by ‘/*...*/’.
  
!    • Many user programs contain the declaration ‘long time ();’.  In the
       past, the system header files on many systems did not actually
!      declare ‘time’, so it did not matter what type your program
!      declared it to return.  But in systems with ISO C headers, ‘time’
!      is declared to return ‘time_t’, and if that is not the same as
!      ‘long’, then ‘long time ();’ is erroneous.
  
       The solution is to change your program to use appropriate system
!      headers (‘<time.h>’ on systems with ISO C headers) and not to
!      declare ‘time’ if the system header files declare it, or failing
!      that to use ‘time_t’ as the return type of ‘time’.
  
!    • When compiling functions that return ‘float’, PCC converts it to a
!      double.  GCC actually returns a ‘float’.  If you are concerned with
       PCC compatibility, you should declare your functions to return
!      ‘double’; you might as well say what you mean.
  
!    • When compiling functions that return structures or unions, GCC
       output code normally uses a method different from that used on most
       versions of Unix.  As a result, code compiled with GCC cannot call
       a structure-returning function compiled with PCC, and vice versa.
*************** There are several noteworthy incompatibi
*** 67455,67461 ****
       union with any other size is stored into an address supplied by the
       caller (usually in a special, fixed register, but on some machines
       it is passed on the stack).  The target hook
!      'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
  
       By contrast, PCC on most target machines returns structures and
       unions of any size by copying the data into an area of static
--- 67466,67472 ----
       union with any other size is stored into an address supplied by the
       caller (usually in a special, fixed register, but on some machines
       it is passed on the stack).  The target hook
!      ‘TARGET_STRUCT_VALUE_RTX’ tells GCC where to pass this address.
  
       By contrast, PCC on most target machines returns structures and
       unions of any size by copying the data into an area of static
*************** There are several noteworthy incompatibi
*** 67470,67490 ****
       memory, but still returns small structures and unions in registers.
  
       You can tell GCC to use a compatible convention for all structure
!      and union returning with the option '-fpcc-struct-return'.
  
!    * GCC complains about program fragments such as '0x74ae-0x4000' which
       appear to be two hexadecimal constants separated by the minus
!      operator.  Actually, this string is a single "preprocessing token".
       Each such token must correspond to one token in C.  Since this does
       not, GCC prints an error message.  Although it may appear obvious
       that what is meant is an operator and two values, the ISO C
       standard specifically requires that this be treated as erroneous.
  
!      A "preprocessing token" is a "preprocessing number" if it begins
       with a digit and is followed by letters, underscores, digits,
!      periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
!      character sequences.  (In strict C90 mode, the sequences 'p+',
!      'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
  
       To make the above program fragment valid, place whitespace in front
       of the minus sign.  This whitespace will end the preprocessing
--- 67481,67501 ----
       memory, but still returns small structures and unions in registers.
  
       You can tell GCC to use a compatible convention for all structure
!      and union returning with the option ‘-fpcc-struct-return’.
  
!    • GCC complains about program fragments such as ‘0x74ae-0x4000’ which
       appear to be two hexadecimal constants separated by the minus
!      operator.  Actually, this string is a single “preprocessing token”.
       Each such token must correspond to one token in C.  Since this does
       not, GCC prints an error message.  Although it may appear obvious
       that what is meant is an operator and two values, the ISO C
       standard specifically requires that this be treated as erroneous.
  
!      A “preprocessing token” is a “preprocessing number” if it begins
       with a digit and is followed by letters, underscores, digits,
!      periods and ‘e+’, ‘e-’, ‘E+’, ‘E-’, ‘p+’, ‘p-’, ‘P+’, or ‘P-’
!      character sequences.  (In strict C90 mode, the sequences ‘p+’,
!      ‘p-’, ‘P+’ and ‘P-’ cannot appear in preprocessing numbers.)
  
       To make the above program fragment valid, place whitespace in front
       of the minus sign.  This whitespace will end the preprocessing
*************** incompatible with ISO C, and some depend
*** 67503,67518 ****
  compilers.
  
   Installing GCC automatically creates and installs the fixed header
! files, by running a program called 'fixincludes'.  Normally, you don't
  need to pay attention to this.  But there are cases where it doesn't do
  the right thing automatically.
  
!    * If you update the system's header files, such as by installing a
       new system version, the fixed header files of GCC are not
!      automatically updated.  They can be updated using the 'mkheaders'
!      script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
  
!    * On some systems, header file directories contain machine-specific
       symbolic links in certain places.  This makes it possible to share
       most of the header files among hosts running the same version of
       the system on different machine models.
--- 67514,67529 ----
  compilers.
  
   Installing GCC automatically creates and installs the fixed header
! files, by running a program called ‘fixincludes’.  Normally, you don't
  need to pay attention to this.  But there are cases where it doesn't do
  the right thing automatically.
  
!    • If you update the system's header files, such as by installing a
       new system version, the fixed header files of GCC are not
!      automatically updated.  They can be updated using the ‘mkheaders’
!      script installed in ‘LIBEXECDIR/gcc/TARGET/VERSION/install-tools/’.
  
!    • On some systems, header file directories contain machine-specific
       symbolic links in certain places.  This makes it possible to share
       most of the header files among hosts running the same version of
       the system on different machine models.
*************** what this means.  Beyond the library fac
*** 67538,67553 ****
  implementation, the rest of the C library is supplied by the vendor of
  the operating system.  If that C library doesn't conform to the C
  standards, then your programs might get warnings (especially when using
! '-Wall') that you don't expect.
  
!  For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
! while the C standard says that 'sprintf' returns an 'int'.  The
! 'fixincludes' program could make the prototype for this function match
  the Standard, but that would be wrong, since the function will still
! return 'char *'.
  
   If you need a Standard compliant library, then you need to find one, as
! GCC does not provide one.  The GNU C library (called 'glibc') provides
  ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
  HURD-based GNU systems; no recent version of it supports other systems,
  though some very old versions did.  Version 2.2 of the GNU C library
--- 67549,67564 ----
  implementation, the rest of the C library is supplied by the vendor of
  the operating system.  If that C library doesn't conform to the C
  standards, then your programs might get warnings (especially when using
! ‘-Wall’) that you don't expect.
  
!  For example, the ‘sprintf’ function on SunOS 4.1.3 returns ‘char *’
! while the C standard says that ‘sprintf’ returns an ‘int’.  The
! ‘fixincludes’ program could make the prototype for this function match
  the Standard, but that would be wrong, since the function will still
! return ‘char *’.
  
   If you need a Standard compliant library, then you need to find one, as
! GCC does not provide one.  The GNU C library (called ‘glibc’) provides
  ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
  HURD-based GNU systems; no recent version of it supports other systems,
  though some very old versions did.  Version 2.2 of the GNU C library
*************** File: gcc.info,  Node: Disappointments,
*** 67563,67569 ****
  These problems are perhaps regrettable, but we don't know any practical
  way around them.
  
!    * Certain local variables aren't recognized by debuggers when you
       compile with optimization.
  
       This occurs because sometimes GCC optimizes the variable out of
--- 67574,67580 ----
  These problems are perhaps regrettable, but we don't know any practical
  way around them.
  
!    • Certain local variables aren't recognized by debuggers when you
       compile with optimization.
  
       This occurs because sometimes GCC optimizes the variable out of
*************** way around them.
*** 67575,67581 ****
       You have to expect a certain amount of disagreement between the
       executable and your source code, when you use optimization.
  
!    * Users often think it is a bug when GCC reports an error for code
       like this:
  
            int foo (struct mumble *);
--- 67586,67592 ----
       You have to expect a certain amount of disagreement between the
       executable and your source code, when you use optimization.
  
!    • Users often think it is a bug when GCC reports an error for code
       like this:
  
            int foo (struct mumble *);
*************** way around them.
*** 67585,67607 ****
            int foo (struct mumble *x)
            { ... }
  
!      This code really is erroneous, because the scope of 'struct mumble'
       in the prototype is limited to the argument list containing it.  It
!      does not refer to the 'struct mumble' defined with file scope
       immediately below--they are two unrelated types with similar names
       in different scopes.
  
!      But in the definition of 'foo', the file-scope type is used because
       that is available to be inherited.  Thus, the definition and the
       prototype do not match, and you get an error.
  
       This behavior may seem silly, but it's what the ISO standard
       specifies.  It is easy enough for you to make your code work by
!      moving the definition of 'struct mumble' above the prototype.  It's
       not worth being incompatible with ISO C just to avoid an error for
       the example shown above.
  
!    * Accesses to bit-fields even in volatile objects works by accessing
       larger objects, such as a byte or a word.  You cannot rely on what
       size of object is accessed in order to read or write the bit-field;
       it may even vary for a given bit-field according to the precise
--- 67596,67618 ----
            int foo (struct mumble *x)
            { ... }
  
!      This code really is erroneous, because the scope of ‘struct mumble’
       in the prototype is limited to the argument list containing it.  It
!      does not refer to the ‘struct mumble’ defined with file scope
       immediately below--they are two unrelated types with similar names
       in different scopes.
  
!      But in the definition of ‘foo’, the file-scope type is used because
       that is available to be inherited.  Thus, the definition and the
       prototype do not match, and you get an error.
  
       This behavior may seem silly, but it's what the ISO standard
       specifies.  It is easy enough for you to make your code work by
!      moving the definition of ‘struct mumble’ above the prototype.  It's
       not worth being incompatible with ISO C just to avoid an error for
       the example shown above.
  
!    • Accesses to bit-fields even in volatile objects works by accessing
       larger objects, such as a byte or a word.  You cannot rely on what
       size of object is accessed in order to read or write the bit-field;
       it may even vary for a given bit-field according to the precise
*************** way around them.
*** 67610,67616 ****
       If you care about controlling the amount of memory that is
       accessed, use volatile but do not use bit-fields.
  
!    * GCC comes with shell scripts to fix certain known problems in
       system header files.  They install corrected copies of various
       header files in a special directory where only GCC will normally
       look for them.  The scripts adapt to various systems by searching
--- 67621,67627 ----
       If you care about controlling the amount of memory that is
       accessed, use volatile but do not use bit-fields.
  
!    • GCC comes with shell scripts to fix certain known problems in
       system header files.  They install corrected copies of various
       header files in a special directory where only GCC will normally
       look for them.  The scripts adapt to various systems by searching
*************** way around them.
*** 67619,67644 ****
  
       If new system header files are installed, nothing automatically
       arranges to update the corrected header files.  They can be updated
!      using the 'mkheaders' script installed in
!      'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
  
!    * On 68000 and x86 systems, for instance, you can get paradoxical
       results if you test the precise values of floating point numbers.
       For example, you can find that a floating point value which is not
       a NaN is not equal to itself.  This results from the fact that the
       floating point registers hold a few more bits of precision than fit
!      in a 'double' in memory.  Compiled code moves values between memory
       and floating point registers at its convenience, and moving them
       into memory truncates them.
  
!      You can partially avoid this problem by using the '-ffloat-store'
       option (*note Optimize Options::).
  
!    * On AIX and other platforms without weak symbol support, templates
       need to be instantiated explicitly and symbols for static members
       of templates will not be generated.
  
!    * On AIX, GCC scans object files and library archives for static
       constructors and destructors when linking an application before the
       linker prunes unreferenced symbols.  This is necessary to prevent
       the AIX linker from mistakenly assuming that static constructor or
--- 67630,67655 ----
  
       If new system header files are installed, nothing automatically
       arranges to update the corrected header files.  They can be updated
!      using the ‘mkheaders’ script installed in
!      ‘LIBEXECDIR/gcc/TARGET/VERSION/install-tools/’.
  
!    • On 68000 and x86 systems, for instance, you can get paradoxical
       results if you test the precise values of floating point numbers.
       For example, you can find that a floating point value which is not
       a NaN is not equal to itself.  This results from the fact that the
       floating point registers hold a few more bits of precision than fit
!      in a ‘double’ in memory.  Compiled code moves values between memory
       and floating point registers at its convenience, and moving them
       into memory truncates them.
  
!      You can partially avoid this problem by using the ‘-ffloat-store’
       option (*note Optimize Options::).
  
!    • On AIX and other platforms without weak symbol support, templates
       need to be instantiated explicitly and symbols for static members
       of templates will not be generated.
  
!    • On AIX, GCC scans object files and library archives for static
       constructors and destructors when linking an application before the
       linker prunes unreferenced symbols.  This is necessary to prevent
       the AIX linker from mistakenly assuming that static constructor or
*************** static member; you must also _define_ it
*** 67683,67700 ****
         static int bar;
       };
  
!  This declaration only establishes that the class 'Foo' has an 'int'
! named 'Foo::bar', and a member function named 'Foo::method'.  But you
! still need to define _both_ 'method' and 'bar' elsewhere.  According to
  the ISO standard, you must supply an initializer in one (and only one)
  source file, such as:
  
       int Foo::bar = 0;
  
   Other C++ compilers may not correctly implement the standard behavior.
! As a result, when you switch to 'g++' from one of these compilers, you
  may discover that a program that appeared to work correctly in fact does
! not conform to the standard: 'g++' reports as undefined symbols any
  static data members that lack definitions.
  
  
--- 67694,67711 ----
         static int bar;
       };
  
!  This declaration only establishes that the class ‘Foo’ has an ‘int’
! named ‘Foo::bar’, and a member function named ‘Foo::method’.  But you
! still need to define _both_ ‘method’ and ‘bar’ elsewhere.  According to
  the ISO standard, you must supply an initializer in one (and only one)
  source file, such as:
  
       int Foo::bar = 0;
  
   Other C++ compilers may not correctly implement the standard behavior.
! As a result, when you switch to ‘g++’ from one of these compilers, you
  may discover that a program that appeared to work correctly in fact does
! not conform to the standard: ‘g++’ reports as undefined symbols any
  static data members that lack definitions.
  
  
*************** looked up at the point of instantiation.
*** 67723,67742 ****
           static const int N;
         };
  
!  Here, the names 'foo' and 'N' appear in a context that does not depend
! on the type of 'T'.  The compiler will thus require that they are
  defined in the context of use in the template, not only before the point
! of instantiation, and will here use '::foo(double)' and 'A::N',
  respectively.  In particular, it will convert the integer value to a
! 'double' when passing it to '::foo(double)'.
  
!  Conversely, 'bar' and the call to 'foo' in the fourth marked line are
! used in contexts that do depend on the type of 'T', so they are only
  looked up at the point of instantiation, and you can provide
  declarations for them after declaring the template, but before
! instantiating it.  In particular, if you instantiate 'A::f<int>', the
! last line will call an overloaded '::foo(int)' if one was provided, even
! if after the declaration of 'struct A'.
  
   This distinction between lookup of dependent and non-dependent names is
  called two-stage (or dependent) name lookup.  G++ implements it since
--- 67734,67753 ----
           static const int N;
         };
  
!  Here, the names ‘foo’ and ‘N’ appear in a context that does not depend
! on the type of ‘T’.  The compiler will thus require that they are
  defined in the context of use in the template, not only before the point
! of instantiation, and will here use ‘::foo(double)’ and ‘A::N’,
  respectively.  In particular, it will convert the integer value to a
! ‘double’ when passing it to ‘::foo(double)’.
  
!  Conversely, ‘bar’ and the call to ‘foo’ in the fourth marked line are
! used in contexts that do depend on the type of ‘T’, so they are only
  looked up at the point of instantiation, and you can provide
  declarations for them after declaring the template, but before
! instantiating it.  In particular, if you instantiate ‘A::f<int>’, the
! last line will call an overloaded ‘::foo(int)’ if one was provided, even
! if after the declaration of ‘struct A’.
  
   This distinction between lookup of dependent and non-dependent names is
  called two-stage (or dependent) name lookup.  G++ implements it since
*************** different from non-template codes.  The
*** 67753,67773 ****
           int get_i() { return i; }
         };
  
!  In 'get_i()', 'i' is not used in a dependent context, so the compiler
  will look for a name declared at the enclosing namespace scope (which is
  the global scope here).  It will not look into the base class, since
! that is dependent and you may declare specializations of 'Base' even
! after declaring 'Derived', so the compiler cannot really know what 'i'
! would refer to.  If there is no global variable 'i', then you will get
  an error message.
  
   In order to make it clear that you want the member of the base class,
  you need to defer lookup until instantiation time, at which the base
! class is known.  For this, you need to access 'i' in a dependent
! context, by either using 'this->i' (remember that 'this' is of type
! 'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
! Alternatively, 'Base<T>::i' might be brought into scope by a
! 'using'-declaration.
  
   Another, similar example involves calling member functions of a base
  class:
--- 67764,67784 ----
           int get_i() { return i; }
         };
  
!  In ‘get_i()’, ‘i’ is not used in a dependent context, so the compiler
  will look for a name declared at the enclosing namespace scope (which is
  the global scope here).  It will not look into the base class, since
! that is dependent and you may declare specializations of ‘Base’ even
! after declaring ‘Derived’, so the compiler cannot really know what ‘i’
! would refer to.  If there is no global variable ‘i’, then you will get
  an error message.
  
   In order to make it clear that you want the member of the base class,
  you need to defer lookup until instantiation time, at which the base
! class is known.  For this, you need to access ‘i’ in a dependent
! context, by either using ‘this->i’ (remember that ‘this’ is of type
! ‘Derived<T>*’, so is obviously dependent), or using ‘Base<T>::i’.
! Alternatively, ‘Base<T>::i’ might be brought into scope by a
! ‘using’-declaration.
  
   Another, similar example involves calling member functions of a base
  class:
*************** class:
*** 67780,67787 ****
             int g() { return f(); };
         };
  
!  Again, the call to 'f()' is not dependent on template arguments (there
! are no arguments that depend on the type 'T', and it is also not
  otherwise specified that the call should be in a dependent context).
  Thus a global declaration of such a function must be available, since
  the one in the base class is not visible until instantiation time.  The
--- 67791,67798 ----
             int g() { return f(); };
         };
  
!  Again, the call to ‘f()’ is not dependent on template arguments (there
! are no arguments that depend on the type ‘T’, and it is also not
  otherwise specified that the call should be in a dependent context).
  Thus a global declaration of such a function must be available, since
  the one in the base class is not visible until instantiation time.  The
*************** compiler will consequently produce the f
*** 67793,67804 ****
         x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
            allowing the use of an undeclared name is deprecated)
  
!  To make the code valid either use 'this->f()', or 'Base<T>::f()'.
! Using the '-fpermissive' flag will also let the compiler accept the
  code, by marking all function calls for which no declaration is visible
  at the time of definition of the template for later lookup at
  instantiation time, as if it were a dependent call.  We do not recommend
! using '-fpermissive' to work around invalid code, and it will also only
  catch cases where functions in base classes are called, not where
  variables in base classes are used (as in the example above).
  
--- 67804,67815 ----
         x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
            allowing the use of an undeclared name is deprecated)
  
!  To make the code valid either use ‘this->f()’, or ‘Base<T>::f()’.
! Using the ‘-fpermissive’ flag will also let the compiler accept the
  code, by marking all function calls for which no declaration is visible
  at the time of definition of the template for later lookup at
  instantiation time, as if it were a dependent call.  We do not recommend
! using ‘-fpermissive’ to work around invalid code, and it will also only
  catch cases where functions in base classes are called, not where
  variables in base classes are used (as in the example above).
  
*************** It is dangerous to use pointers or refer
*** 67822,67836 ****
  temporary object.  The compiler may very well delete the object before
  you expect it to, leaving a pointer to garbage.  The most common place
  where this problem crops up is in classes like string classes,
! especially ones that define a conversion function to type 'char *' or
! 'const char *'--which is one reason why the standard 'string' class
! requires you to call the 'c_str' member function.  However, any class
  that returns a pointer to some internal structure is potentially subject
  to this problem.
  
!  For example, a program may use a function 'strfunc' that returns
! 'string' objects, and another function 'charfunc' that operates on
! pointers to 'char':
  
       string strfunc ();
       void charfunc (const char *);
--- 67833,67847 ----
  temporary object.  The compiler may very well delete the object before
  you expect it to, leaving a pointer to garbage.  The most common place
  where this problem crops up is in classes like string classes,
! especially ones that define a conversion function to type ‘char *’ or
! ‘const char *’--which is one reason why the standard ‘string’ class
! requires you to call the ‘c_str’ member function.  However, any class
  that returns a pointer to some internal structure is potentially subject
  to this problem.
  
!  For example, a program may use a function ‘strfunc’ that returns
! ‘string’ objects, and another function ‘charfunc’ that operates on
! pointers to ‘char’:
  
       string strfunc ();
       void charfunc (const char *);
*************** pointers to 'char':
*** 67846,67855 ****
       }
  
  In this situation, it may seem reasonable to save a pointer to the C
! string returned by the 'c_str' member function and use that rather than
! call 'c_str' repeatedly.  However, the temporary string created by the
! call to 'strfunc' is destroyed after 'p' is initialized, at which point
! 'p' is left pointing to freed memory.
  
   Code like this may run successfully under some other compilers,
  particularly obsolete cfront-based compilers that delete temporaries
--- 67857,67866 ----
       }
  
  In this situation, it may seem reasonable to save a pointer to the C
! string returned by the ‘c_str’ member function and use that rather than
! call ‘c_str’ repeatedly.  However, the temporary string created by the
! call to ‘strfunc’ is destroyed after ‘p’ is initialized, at which point
! ‘p’ is left pointing to freed memory.
  
   Code like this may run successfully under some other compilers,
  particularly obsolete cfront-based compilers that delete temporaries
*************** such objects behave unspecified when bei
*** 67904,67920 ****
         d1 = d2;
       }
  
!  The C++ standard specifies that 'Base::Base' is only called once when
  constructing or copy-constructing a Derived object.  It is unspecified
! whether 'Base::operator=' is called more than once when the implicit
! copy-assignment for Derived objects is invoked (as it is inside 'func'
  in the example).
  
   G++ implements the "intuitive" algorithm for copy-assignment: assign
  all direct bases, then assign all members.  In that algorithm, the
  virtual base subobject can be encountered more than once.  In the
! example, copying proceeds in the following order: 'name' (via 'strdup'),
! 'val', 'name' again, and 'bval'.
  
   If application code relies on copy-assignment, a user-defined
  copy-assignment operator removes any uncertainties.  With such an
--- 67915,67931 ----
         d1 = d2;
       }
  
!  The C++ standard specifies that ‘Base::Base’ is only called once when
  constructing or copy-constructing a Derived object.  It is unspecified
! whether ‘Base::operator=’ is called more than once when the implicit
! copy-assignment for Derived objects is invoked (as it is inside ‘func’
  in the example).
  
   G++ implements the "intuitive" algorithm for copy-assignment: assign
  all direct bases, then assign all members.  In that algorithm, the
  virtual base subobject can be encountered more than once.  In the
! example, copying proceeds in the following order: ‘name’ (via ‘strdup’),
! ‘val’, ‘name’ again, and ‘bval’.
  
   If application code relies on copy-assignment, a user-defined
  copy-assignment operator removes any uncertainties.  With such an
*************** File: gcc.info,  Node: Non-bugs,  Next:
*** 67930,67936 ****
  This section lists changes that people frequently request, but which we
  do not make because we think GCC is better without them.
  
!    * Checking the number and type of arguments to a function which has
       an old-fashioned definition and no prototype.
  
       Such a feature would work only occasionally--only for calls that
--- 67941,67947 ----
  This section lists changes that people frequently request, but which we
  do not make because we think GCC is better without them.
  
!    • Checking the number and type of arguments to a function which has
       an old-fashioned definition and no prototype.
  
       Such a feature would work only occasionally--only for calls that
*************** do not make because we think GCC is bett
*** 67939,67969 ****
       prototype for the function.  But adding a prototype eliminates the
       motivation for this feature.  So the feature is not worthwhile.
  
!    * Warning about using an expression whose type is signed as a shift
       count.
  
       Shift count operands are probably signed more often than unsigned.
       Warning about this would cause far more annoyance than good.
  
!    * Warning about assigning a signed value to an unsigned variable.
  
       Such assignments must be very common; warning about them would
       cause more annoyance than good.
  
!    * Warning when a non-void function value is ignored.
  
       C contains many standard functions that return a value that most
!      programs choose to ignore.  One obvious example is 'printf'.
       Warning about this practice only leads the defensive programmer to
!      clutter programs with dozens of casts to 'void'.  Such casts are
       required so frequently that they become visual noise.  Writing
       those casts becomes so automatic that they no longer convey useful
       information about the intentions of the programmer.  For functions
       where the return value should never be ignored, use the
!      'warn_unused_result' function attribute (*note Function
       Attributes::).
  
!    * Making '-fshort-enums' the default.
  
       This would cause storage layout to be incompatible with most other
       C compilers.  And it doesn't seem very important, given that you
--- 67950,67980 ----
       prototype for the function.  But adding a prototype eliminates the
       motivation for this feature.  So the feature is not worthwhile.
  
!    • Warning about using an expression whose type is signed as a shift
       count.
  
       Shift count operands are probably signed more often than unsigned.
       Warning about this would cause far more annoyance than good.
  
!    • Warning about assigning a signed value to an unsigned variable.
  
       Such assignments must be very common; warning about them would
       cause more annoyance than good.
  
!    • Warning when a non-void function value is ignored.
  
       C contains many standard functions that return a value that most
!      programs choose to ignore.  One obvious example is ‘printf’.
       Warning about this practice only leads the defensive programmer to
!      clutter programs with dozens of casts to ‘void’.  Such casts are
       required so frequently that they become visual noise.  Writing
       those casts becomes so automatic that they no longer convey useful
       information about the intentions of the programmer.  For functions
       where the return value should never be ignored, use the
!      ‘warn_unused_result’ function attribute (*note Function
       Attributes::).
  
!    • Making ‘-fshort-enums’ the default.
  
       This would cause storage layout to be incompatible with most other
       C compilers.  And it doesn't seem very important, given that you
*************** do not make because we think GCC is bett
*** 67971,67990 ****
       most is when the enumeration-valued object is inside a structure,
       and in that case you can specify a field width explicitly.
  
!    * Making bit-fields unsigned by default on particular machines where
       "the ABI standard" says to do so.
  
       The ISO C standard leaves it up to the implementation whether a
!      bit-field declared plain 'int' is signed or not.  This in effect
       creates two alternative dialects of C.
  
       The GNU C compiler supports both dialects; you can specify the
!      signed dialect with '-fsigned-bitfields' and the unsigned dialect
!      with '-funsigned-bitfields'.  However, this leaves open the
       question of which dialect to use by default.
  
       Currently, the preferred dialect makes plain bit-fields signed,
!      because this is simplest.  Since 'int' is the same as 'signed int'
       in every other context, it is cleanest for them to be the same in
       bit-fields as well.
  
--- 67982,68001 ----
       most is when the enumeration-valued object is inside a structure,
       and in that case you can specify a field width explicitly.
  
!    • Making bit-fields unsigned by default on particular machines where
       "the ABI standard" says to do so.
  
       The ISO C standard leaves it up to the implementation whether a
!      bit-field declared plain ‘int’ is signed or not.  This in effect
       creates two alternative dialects of C.
  
       The GNU C compiler supports both dialects; you can specify the
!      signed dialect with ‘-fsigned-bitfields’ and the unsigned dialect
!      with ‘-funsigned-bitfields’.  However, this leaves open the
       question of which dialect to use by default.
  
       Currently, the preferred dialect makes plain bit-fields signed,
!      because this is simplest.  Since ‘int’ is the same as ‘signed int’
       in every other context, it is cleanest for them to be the same in
       bit-fields as well.
  
*************** do not make because we think GCC is bett
*** 68028,68089 ****
       In this way, they write programs which have the same meaning in
       both C dialects.)
  
!    * Undefining '__STDC__' when '-ansi' is not used.
  
!      Currently, GCC defines '__STDC__' unconditionally.  This provides
       good results in practice.
  
!      Programmers normally use conditionals on '__STDC__' to ask whether
       it is safe to use certain features of ISO C, such as function
!      prototypes or ISO token concatenation.  Since plain 'gcc' supports
       all the features of ISO C, the correct answer to these questions is
       "yes".
  
!      Some users try to use '__STDC__' to check for the availability of
       certain library facilities.  This is actually incorrect usage in an
       ISO C program, because the ISO C standard says that a conforming
!      freestanding implementation should define '__STDC__' even though it
!      does not have the library facilities.  'gcc -ansi -pedantic' is a
       conforming freestanding implementation, and it is therefore
!      required to define '__STDC__', even though it does not come with an
       ISO C library.
  
!      Sometimes people say that defining '__STDC__' in a compiler that
       does not completely conform to the ISO C standard somehow violates
       the standard.  This is illogical.  The standard is a standard for
!      compilers that claim to support ISO C, such as 'gcc -ansi'--not for
!      other compilers such as plain 'gcc'.  Whatever the ISO C standard
!      says is relevant to the design of plain 'gcc' without '-ansi' only
       for pragmatic reasons, not as a requirement.
  
!      GCC normally defines '__STDC__' to be 1, and in addition defines
!      '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
       option for strict conformance to some version of ISO C.  On some
       hosts, system include files use a different convention, where
!      '__STDC__' is normally 0, but is 1 if the user specifies strict
       conformance to the C Standard.  GCC follows the host convention
       when processing system include files, but when processing user
       files it follows the usual GNU C convention.
  
!    * Undefining '__STDC__' in C++.
  
       Programs written to compile with C++-to-C translators get the value
!      of '__STDC__' that goes with the C compiler that is subsequently
!      used.  These programs must test '__STDC__' to determine what kind
       of C preprocessor that compiler uses: whether they should
       concatenate tokens in the ISO C fashion or in the traditional
       fashion.
  
!      These programs work properly with GNU C++ if '__STDC__' is defined.
       They would not work otherwise.
  
       In addition, many header files are written to provide prototypes in
       ISO C but not in traditional C.  Many of these header files can
!      work without change in C++ provided '__STDC__' is defined.  If
!      '__STDC__' is not defined, they will all fail, and will all need to
       be changed to test explicitly for C++ as well.
  
!    * Deleting "empty" loops.
  
       Historically, GCC has not deleted "empty" loops under the
       assumption that the most likely reason you would put one in a
--- 68039,68100 ----
       In this way, they write programs which have the same meaning in
       both C dialects.)
  
!    • Undefining ‘__STDC__’ when ‘-ansi’ is not used.
  
!      Currently, GCC defines ‘__STDC__’ unconditionally.  This provides
       good results in practice.
  
!      Programmers normally use conditionals on ‘__STDC__’ to ask whether
       it is safe to use certain features of ISO C, such as function
!      prototypes or ISO token concatenation.  Since plain ‘gcc’ supports
       all the features of ISO C, the correct answer to these questions is
       "yes".
  
!      Some users try to use ‘__STDC__’ to check for the availability of
       certain library facilities.  This is actually incorrect usage in an
       ISO C program, because the ISO C standard says that a conforming
!      freestanding implementation should define ‘__STDC__’ even though it
!      does not have the library facilities.  ‘gcc -ansi -pedantic’ is a
       conforming freestanding implementation, and it is therefore
!      required to define ‘__STDC__’, even though it does not come with an
       ISO C library.
  
!      Sometimes people say that defining ‘__STDC__’ in a compiler that
       does not completely conform to the ISO C standard somehow violates
       the standard.  This is illogical.  The standard is a standard for
!      compilers that claim to support ISO C, such as ‘gcc -ansi’--not for
!      other compilers such as plain ‘gcc’.  Whatever the ISO C standard
!      says is relevant to the design of plain ‘gcc’ without ‘-ansi’ only
       for pragmatic reasons, not as a requirement.
  
!      GCC normally defines ‘__STDC__’ to be 1, and in addition defines
!      ‘__STRICT_ANSI__’ if you specify the ‘-ansi’ option, or a ‘-std’
       option for strict conformance to some version of ISO C.  On some
       hosts, system include files use a different convention, where
!      ‘__STDC__’ is normally 0, but is 1 if the user specifies strict
       conformance to the C Standard.  GCC follows the host convention
       when processing system include files, but when processing user
       files it follows the usual GNU C convention.
  
!    • Undefining ‘__STDC__’ in C++.
  
       Programs written to compile with C++-to-C translators get the value
!      of ‘__STDC__’ that goes with the C compiler that is subsequently
!      used.  These programs must test ‘__STDC__’ to determine what kind
       of C preprocessor that compiler uses: whether they should
       concatenate tokens in the ISO C fashion or in the traditional
       fashion.
  
!      These programs work properly with GNU C++ if ‘__STDC__’ is defined.
       They would not work otherwise.
  
       In addition, many header files are written to provide prototypes in
       ISO C but not in traditional C.  Many of these header files can
!      work without change in C++ provided ‘__STDC__’ is defined.  If
!      ‘__STDC__’ is not defined, they will all fail, and will all need to
       be changed to test explicitly for C++ as well.
  
!    • Deleting "empty" loops.
  
       Historically, GCC has not deleted "empty" loops under the
       assumption that the most likely reason you would put one in a
*************** do not make because we think GCC is bett
*** 68101,68107 ****
  
       Be aware of this when performing timing tests, for instance the
       following loop can be completely removed, provided
!      'some_expression' can provably not change any global state.
  
            {
               int sum = 0;
--- 68112,68118 ----
  
       Be aware of this when performing timing tests, for instance the
       following loop can be completely removed, provided
!      ‘some_expression’ can provably not change any global state.
  
            {
               int sum = 0;
*************** do not make because we think GCC is bett
*** 68111,68120 ****
                  sum += some_expression;
            }
  
!      Even though 'sum' is accumulated in the loop, no use is made of
       that summation, so the accumulation can be removed.
  
!    * Making side effects happen in the same order as in some other
       compiler.
  
       It is never safe to depend on the order of evaluation of side
--- 68122,68131 ----
                  sum += some_expression;
            }
  
!      Even though ‘sum’ is accumulated in the loop, no use is made of
       that summation, so the accumulation can be removed.
  
!    • Making side effects happen in the same order as in some other
       compiler.
  
       It is never safe to depend on the order of evaluation of side
*************** do not make because we think GCC is bett
*** 68128,68138 ****
  
       There is no guarantee (in either the C or the C++ standard language
       definitions) that the increments will be evaluated in any
!      particular order.  Either increment might happen first.  'func'
!      might get the arguments '2, 3', or it might get '3, 2', or even '2,
!      2'.
  
!    * Making certain warnings into errors by default.
  
       Some ISO C testsuites report failure when the compiler does not
       produce an error message for a certain program.
--- 68139,68149 ----
  
       There is no guarantee (in either the C or the C++ standard language
       definitions) that the increments will be evaluated in any
!      particular order.  Either increment might happen first.  ‘func’
!      might get the arguments ‘2, 3’, or it might get ‘3, 2’, or even ‘2,
!      2’.
  
!    • Making certain warnings into errors by default.
  
       Some ISO C testsuites report failure when the compiler does not
       produce an error message for a certain program.
*************** do not make because we think GCC is bett
*** 68141,68147 ****
       programs, but a warning is defined by GCC to count as a diagnostic.
       If GCC produces a warning but not an error, that is correct ISO C
       support.  If testsuites call this "failure", they should be run
!      with the GCC option '-pedantic-errors', which will turn these
       warnings into errors.
  
  
--- 68152,68158 ----
       programs, but a warning is defined by GCC to count as a diagnostic.
       If GCC produces a warning but not an error, that is correct ISO C
       support.  If testsuites call this "failure", they should be run
!      with the GCC option ‘-pedantic-errors’, which will turn these
       warnings into errors.
  
  
*************** File: gcc.info,  Node: Warnings and Erro
*** 68153,68181 ****
  The GNU compiler can produce two kinds of diagnostics: errors and
  warnings.  Each kind has a different purpose:
  
!      "Errors" report problems that make it impossible to compile your
       program.  GCC reports errors with the source file name and line
       number where the problem is apparent.
  
!      "Warnings" report other unusual conditions in your code that _may_
       indicate a problem, although compilation can (and does) proceed.
       Warning messages also report the source file name and line number,
!      but include the text 'warning:' to distinguish them from error
       messages.
  
   Warnings may indicate danger points where you should check to make sure
  that your program really does what you intend; or the use of obsolete
  features; or the use of nonstandard features of GNU C or C++.  Many
! warnings are issued only if you ask for them, with one of the '-W'
! options (for instance, '-Wall' requests a variety of useful warnings).
  
   GCC always tries to compile your program if possible; it never
  gratuitously rejects a program whose meaning is clear merely because
  (for instance) it fails to conform to a standard.  In some cases,
  however, the C and C++ standards specify that certain extensions are
  forbidden, and a diagnostic _must_ be issued by a conforming compiler.
! The '-pedantic' option tells GCC to issue warnings in such cases;
! '-pedantic-errors' says to make them errors instead.  This does not mean
  that _all_ non-ISO constructs get warnings or errors.
  
   *Note Options to Request or Suppress Warnings: Warning Options, for
--- 68164,68192 ----
  The GNU compiler can produce two kinds of diagnostics: errors and
  warnings.  Each kind has a different purpose:
  
!      “Errors” report problems that make it impossible to compile your
       program.  GCC reports errors with the source file name and line
       number where the problem is apparent.
  
!      “Warnings” report other unusual conditions in your code that _may_
       indicate a problem, although compilation can (and does) proceed.
       Warning messages also report the source file name and line number,
!      but include the text ‘warning:’ to distinguish them from error
       messages.
  
   Warnings may indicate danger points where you should check to make sure
  that your program really does what you intend; or the use of obsolete
  features; or the use of nonstandard features of GNU C or C++.  Many
! warnings are issued only if you ask for them, with one of the ‘-W’
! options (for instance, ‘-Wall’ requests a variety of useful warnings).
  
   GCC always tries to compile your program if possible; it never
  gratuitously rejects a program whose meaning is clear merely because
  (for instance) it fails to conform to a standard.  In some cases,
  however, the C and C++ standards specify that certain extensions are
  forbidden, and a diagnostic _must_ be issued by a conforming compiler.
! The ‘-pedantic’ option tells GCC to issue warnings in such cases;
! ‘-pedantic-errors’ says to make them errors instead.  This does not mean
  that _all_ non-ISO constructs get warnings or errors.
  
   *Note Options to Request or Suppress Warnings: Warning Options, for
*************** File: gcc.info,  Node: Bug Criteria,  Ne
*** 68207,68234 ****
  If you are not sure whether you have found a bug, here are some
  guidelines:
  
!    * If the compiler gets a fatal signal, for any input whatever, that
       is a compiler bug.  Reliable compilers never crash.
  
!    * If the compiler produces invalid assembly code, for any input
!      whatever (except an 'asm' statement), that is a compiler bug,
       unless the compiler reports errors (not just warnings) which would
       ordinarily prevent the assembler from being run.
  
!    * If the compiler produces valid assembly code that does not
       correctly execute the input source code, that is a compiler bug.
  
       However, you must double-check to make sure, because you may have a
       program whose behavior is undefined, which happened by chance to
       give the desired results with another C or C++ compiler.
  
!      For example, in many nonoptimizing compilers, you can write 'x;' at
!      the end of a function instead of 'return x;', with the same
!      results.  But the value of the function is undefined if 'return' is
       omitted; it is not a bug when GCC produces different results.
  
       Problems often result from expressions with two increment
!      operators, as in 'f (*p++, *p++)'.  Your previous compiler might
       have interpreted that expression the way you intended; GCC might
       interpret it another way.  Neither compiler is wrong.  The bug is
       in your code.
--- 68218,68245 ----
  If you are not sure whether you have found a bug, here are some
  guidelines:
  
!    • If the compiler gets a fatal signal, for any input whatever, that
       is a compiler bug.  Reliable compilers never crash.
  
!    • If the compiler produces invalid assembly code, for any input
!      whatever (except an ‘asm’ statement), that is a compiler bug,
       unless the compiler reports errors (not just warnings) which would
       ordinarily prevent the assembler from being run.
  
!    • If the compiler produces valid assembly code that does not
       correctly execute the input source code, that is a compiler bug.
  
       However, you must double-check to make sure, because you may have a
       program whose behavior is undefined, which happened by chance to
       give the desired results with another C or C++ compiler.
  
!      For example, in many nonoptimizing compilers, you can write ‘x;’ at
!      the end of a function instead of ‘return x;’, with the same
!      results.  But the value of the function is undefined if ‘return’ is
       omitted; it is not a bug when GCC produces different results.
  
       Problems often result from expressions with two increment
!      operators, as in ‘f (*p++, *p++)’.  Your previous compiler might
       have interpreted that expression the way you intended; GCC might
       interpret it another way.  Neither compiler is wrong.  The bug is
       in your code.
*************** guidelines:
*** 68237,68251 ****
       should be easy to check for these things.  If your program is
       correct and well defined, you have found a compiler bug.
  
!    * If the compiler produces an error message for valid input, that is
       a compiler bug.
  
!    * If the compiler does not produce an error message for invalid
       input, that is a compiler bug.  However, you should note that your
       idea of "invalid input" might be someone else's idea of "an
       extension" or "support for traditional practice".
  
!    * If you are an experienced user of one of the languages GCC
       supports, your suggestions for improvement of GCC are welcome in
       any case.
  
--- 68248,68262 ----
       should be easy to check for these things.  If your program is
       correct and well defined, you have found a compiler bug.
  
!    • If the compiler produces an error message for valid input, that is
       a compiler bug.
  
!    • If the compiler does not produce an error message for invalid
       input, that is a compiler bug.  However, you should note that your
       idea of "invalid input" might be someone else's idea of "an
       extension" or "support for traditional practice".
  
!    • If you are an experienced user of one of the languages GCC
       supports, your suggestions for improvement of GCC are welcome in
       any case.
  
*************** File: gcc.info,  Node: Service,  Next: C
*** 68267,68280 ****
  If you need help installing, using or changing GCC, there are two ways
  to find it:
  
!    * Send a message to a suitable network mailing list.  First try
       <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
       that brings no response, try <gcc@gcc.gnu.org>.  For help changing
       GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
       GCC, please report it following the instructions at *note Bug
       Reporting::.
  
!    * Look in the service directory for someone who might help you for a
       fee.  The service directory is found at
       <https://www.fsf.org/resources/service>.
  
--- 68278,68291 ----
  If you need help installing, using or changing GCC, there are two ways
  to find it:
  
!    • Send a message to a suitable network mailing list.  First try
       <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
       that brings no response, try <gcc@gcc.gnu.org>.  For help changing
       GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
       GCC, please report it following the instructions at *note Bug
       Reporting::.
  
!    • Look in the service directory for someone who might help you for a
       fee.  The service directory is found at
       <https://www.fsf.org/resources/service>.
  
*************** more; major new features or packages con
*** 68347,68353 ****
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright (C) 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
--- 68358,68364 ----
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright © 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
*************** GNU General Public License
*** 68376,68382 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 68387,68393 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 69063,69073 ****
  like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!  The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 69074,69084 ----
  like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!  The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** GNU Free Documentation License
*** 69092,69098 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 69103,69109 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 69101,69107 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 69112,69118 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** Any omissions in this list are accidenta
*** 69579,69963 ****
  out or some of your contributions are not listed.  Please keep this list
  in alphabetical order.
  
!    * Analog Devices helped implement the support for complex data types
       and iterators.
  
!    * John David Anglin for threading-related fixes and improvements to
       libstdc++-v3, and the HP-UX port.
  
!    * James van Artsdalen wrote the code that makes efficient use of the
       Intel 80387 register stack.
  
!    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
       Series port.
  
!    * Alasdair Baird for various bug fixes.
  
!    * Giovanni Bajo for analyzing lots of complicated C++ problem
       reports.
  
!    * Peter Barada for his work to improve code generation for new
       ColdFire cores.
  
!    * Gerald Baumgartner added the signature extension to the C++ front
       end.
  
!    * Godmar Back for his Java improvements and encouragement.
  
!    * Scott Bambrough for help porting the Java compiler.
  
!    * Wolfgang Bangerth for processing tons of bug reports.
  
!    * Jon Beniston for his Microsoft Windows port of Java and port to
       Lattice Mico32.
  
!    * Daniel Berlin for better DWARF 2 support, faster/better
       optimizations, improved alias analysis, plus migrating GCC to
       Bugzilla.
  
!    * Geoff Berry for his Java object serialization work and various
       patches.
  
!    * David Binderman tests weekly snapshots of GCC trunk against Fedora
       Rawhide for several architectures.
  
!    * Laurynas Biveinis for memory management work and DJGPP port fixes.
  
!    * Uros Bizjak for the implementation of x87 math built-in functions
       and for various middle end and i386 back end improvements and bug
       fixes.
  
!    * Eric Blake for helping to make GCJ and libgcj conform to the
       specifications.
  
!    * Janne Blomqvist for contributions to GNU Fortran.
  
!    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
       other Java work.
  
!    * Segher Boessenkool for helping maintain the PowerPC port and the
       instruction combiner plus various contributions to the middle end.
  
!    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
       miscellaneous clean-ups.
  
!    * Steven Bosscher for integrating the GNU Fortran front end into GCC
       and for contributing to the tree-ssa branch.
  
!    * Eric Botcazou for fixing middle- and backend bugs left and right.
  
!    * Per Bothner for his direction via the steering committee and
       various improvements to the infrastructure for supporting new
       languages.  Chill front end implementation.  Initial
       implementations of cpplib, fix-header, config.guess, libio, and
       past C++ library (libg++) maintainer.  Dreaming up, designing and
       implementing much of GCJ.
  
!    * Devon Bowen helped port GCC to the Tahoe.
  
!    * Don Bowman for mips-vxworks contributions.
  
!    * James Bowman for the FT32 port.
  
!    * Dave Brolley for work on cpplib and Chill.
  
!    * Paul Brook for work on the ARM architecture and maintaining GNU
       Fortran.
  
!    * Robert Brown implemented the support for Encore 32000 systems.
  
!    * Christian Bruel for improvements to local store elimination.
  
!    * Herman A.J. ten Brugge for various fixes.
  
!    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
       FAQ.
  
!    * Joe Buck for his direction via the steering committee from its
       creation to 2013.
  
!    * Iain Buclaw for the D frontend.
  
!    * Craig Burley for leadership of the G77 Fortran effort.
  
!    * Tobias Burnus for contributions to GNU Fortran.
  
!    * Stephan Buys for contributing Doxygen notes for libstdc++.
  
!    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
       to the C++ strings, streambufs and formatted I/O, hard detective
       work on the frustrating localization issues, and keeping up with
       the problem reports.
  
!    * John Carr for his alias work, SPARC hacking, infrastructure
       improvements, previous contributions to the steering committee,
       loop optimizations, etc.
  
!    * Stephane Carrez for 68HC11 and 68HC12 ports.
  
!    * Steve Chamberlain for support for the Renesas SH and H8 processors
       and the PicoJava processor, and for GCJ config fixes.
  
!    * Glenn Chambers for help with the GCJ FAQ.
  
!    * John-Marc Chandonia for various libgcj patches.
  
!    * Denis Chertykov for contributing and maintaining the AVR port, the
       first GCC port for an 8-bit architecture.
  
!    * Kito Cheng for his work on the RISC-V port, including bringing up
       the test suite and maintenance.
  
!    * Scott Christley for his Objective-C contributions.
  
!    * Eric Christopher for his Java porting help and clean-ups.
  
!    * Branko Cibej for more warning contributions.
  
!    * The GNU Classpath project for all of their merged runtime code.
  
!    * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
!      '--help', and other random hacking.
  
!    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
  
!    * R. Kelley Cook for making GCC buildable from a read-only directory
       as well as other miscellaneous build process and documentation
       clean-ups.
  
!    * Ralf Corsepius for SH testing and minor bug fixing.
  
!    * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
  
!    * Stan Cox for care and feeding of the x86 port and lots of behind
       the scenes hacking.
  
!    * Alex Crain provided changes for the 3b1.
  
!    * Ian Dall for major improvements to the NS32k port.
  
!    * Paul Dale for his work to add uClinux platform support to the m68k
       backend.
  
!    * Palmer Dabbelt for his work maintaining the RISC-V port.
  
!    * Dario Dariol contributed the four varieties of sample programs that
       print a copy of their source.
  
!    * Russell Davidson for fstream and stringstream fixes in libstdc++.
  
!    * Bud Davis for work on the G77 and GNU Fortran compilers.
  
!    * Mo DeJong for GCJ and libgcj bug fixes.
  
!    * Jerry DeLisle for contributions to GNU Fortran.
  
!    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
       various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
  
!    * Arnaud Desitter for helping to debug GNU Fortran.
  
!    * Gabriel Dos Reis for contributions to G++, contributions and
       maintenance of GCC diagnostics infrastructure, libstdc++-v3,
!      including 'valarray<>', 'complex<>', maintaining the numerics
!      library (including that pesky '<limits>' :-) and keeping up-to-date
       anything to do with numbers.
  
!    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
       ISO C99 support, CFG dumping support, etc., plus support of the C++
       runtime libraries including for all kinds of C interface issues,
!      contributing and maintaining 'complex<>', sanity checking and
       disbursement, configuration architecture, libio maintenance, and
       early math work.
  
!    * Franc,ois Dumont for his work on libstdc++-v3, especially
!      maintaining and improving 'debug-mode' and associative and
       unordered containers.
  
!    * Zdenek Dvorak for a new loop unroller and various fixes.
  
!    * Michael Eager for his work on the Xilinx MicroBlaze port.
  
!    * Richard Earnshaw for his ongoing work with the ARM.
  
!    * David Edelsohn for his direction via the steering committee,
       ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
       loop changes, doing the entire AIX port of libstdc++ with his bare
       hands, and for ensuring GCC properly keeps working on AIX.
  
!    * Kevin Ediger for the floating point formatting of num_put::do_put
       in libstdc++.
  
!    * Phil Edwards for libstdc++ work including configuration hackery,
       documentation maintainer, chief breaker of the web pages, the
       occasional iostream bug fix, and work on shared library symbol
       versioning.
  
!    * Paul Eggert for random hacking all over GCC.
  
!    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
       configuration support for locales and fstream-related fixes.
  
!    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
       iostreams.
  
!    * Christian Ehrhardt for dealing with bug reports.
  
!    * Ben Elliston for his work to move the Objective-C runtime into its
       own subdirectory and for his work on autoconf.
  
!    * Revital Eres for work on the PowerPC 750CL port.
  
!    * Marc Espie for OpenBSD support.
  
!    * Doug Evans for much of the global optimization framework, arc,
       m32r, and SPARC work.
  
!    * Christopher Faylor for his work on the Cygwin port and for caring
       and feeding the gcc.gnu.org box and saving its users tons of spam.
  
!    * Fred Fish for BeOS support and Ada fixes.
  
!    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
  
!    * Peter Gerwinski for various bug fixes and the Pascal front end.
  
!    * Kaveh R. Ghazi for his direction via the steering committee,
!      amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
       on a plethora of platforms.  Kaveh extends his gratitude to the
       CAIP Center at Rutgers University for providing him with computing
       resources to work on Free Software from the late 1980s to 2010.
  
!    * John Gilmore for a donation to the FSF earmarked improving GNU
       Java.
  
!    * Judy Goldberg for c++ contributions.
  
!    * Torbjorn Granlund for various fixes and the c-torture testsuite,
       multiply- and divide-by-constant optimization, improved long long
       support, improved leaf function register allocation, and his
       direction via the steering committee.
  
!    * Jonny Grant for improvements to 'collect2's' '--help'
       documentation.
  
!    * Anthony Green for his '-Os' contributions, the moxie port, and Java
       front end work.
  
!    * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
       code.
  
!    * Michael K. Gschwind contributed the port to the PDP-11.
  
!    * Richard Biener for his ongoing middle-end contributions and bug
       fixes and for release management.
  
!    * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
       the support for DWARF 1 symbolic debugging information, and much of
       the support for System V Release 4.  He has also worked heavily on
       the Intel 386 and 860 support.
  
!    * Sumanth Gundapaneni for contributing the CR16 port.
  
!    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
       GCSE.
  
!    * Bruno Haible for improvements in the runtime overhead for EH, new
       warnings and assorted bug fixes.
  
!    * Andrew Haley for his amazing Java compiler and library efforts.
  
!    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
       series 300.
  
!    * Michael Hayes for various thankless work he's done trying to get
       the c30/c40 ports functional.  Lots of loop and unroll improvements
       and fixes.
  
!    * Dara Hazeghi for wading through myriads of target-specific bug
       reports.
  
!    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
  
!    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
       work, loop opts, and generally fixing lots of old problems we've
       ignored for years, flow rewrite and lots of further stuff,
       including reviewing tons of patches.
  
!    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
       various fixes.
  
!    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
       contributed the support for the Sony NEWS machine.
  
!    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
       various fixes.
  
!    * Katherine Holcomb for work on GNU Fortran.
  
!    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
       of testing and bug fixing, particularly of GCC configury code.
  
!    * Steve Holmgren for MachTen patches.
  
!    * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
  
!    * Jan Hubicka for his x86 port improvements.
  
!    * Falk Hueffner for working on C and optimization bug reports.
  
!    * Bernardo Innocenti for his m68k work, including merging of ColdFire
       improvements and uClinux support.
  
!    * Christian Iseli for various bug fixes.
  
!    * Kamil Iskra for general m68k hacking.
  
!    * Lee Iverson for random fixes and MIPS testing.
  
!    * Balaji V. Iyer for Cilk+ development and merging.
  
!    * Andreas Jaeger for testing and benchmarking of GCC and various bug
       fixes.
  
!    * Martin Jambor for his work on inter-procedural optimizations, the
       switch conversion pass, and scalar replacement of aggregates.
  
!    * Jakub Jelinek for his SPARC work and sibling call optimizations as
       well as lots of bug fixes and test cases, and for improving the
       Java build system.
  
!    * Janis Johnson for ia64 testing and fixes, her quality improvement
       sidetracks, and web page maintenance.
  
!    * Kean Johnston for SCO OpenServer support and various fixes.
  
!    * Tim Josling for the sample language treelang based originally on
       Richard Kenner's "toy" language.
  
!    * Nicolai Josuttis for additional libstdc++ documentation.
  
!    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
       target.
  
!    * Steven G. Kargl for work on GNU Fortran.
  
!    * David Kashtan of SRI adapted GCC to VMS.
  
!    * Ryszard Kabatek for many, many libstdc++ bug fixes and
       optimizations of strings, especially member functions, and for
       auto_ptr fixes.
  
!    * Geoffrey Keating for his ongoing work to make the PPC work for
       GNU/Linux and his automatic regression tester.
  
!    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
       work in just about every part of libstdc++.
  
!    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
       MIL-STD-1750A.
  
!    * Richard Kenner of the New York University Ultracomputer Research
       Laboratory wrote the machine descriptions for the AMD 29000, the
       DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
       support for instruction attributes.  He also made changes to better
--- 69590,69974 ----
  out or some of your contributions are not listed.  Please keep this list
  in alphabetical order.
  
!    • Analog Devices helped implement the support for complex data types
       and iterators.
  
!    • John David Anglin for threading-related fixes and improvements to
       libstdc++-v3, and the HP-UX port.
  
!    • James van Artsdalen wrote the code that makes efficient use of the
       Intel 80387 register stack.
  
!    • Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
       Series port.
  
!    • Alasdair Baird for various bug fixes.
  
!    • Giovanni Bajo for analyzing lots of complicated C++ problem
       reports.
  
!    • Peter Barada for his work to improve code generation for new
       ColdFire cores.
  
!    • Gerald Baumgartner added the signature extension to the C++ front
       end.
  
!    • Godmar Back for his Java improvements and encouragement.
  
!    • Scott Bambrough for help porting the Java compiler.
  
!    • Wolfgang Bangerth for processing tons of bug reports.
  
!    • Jon Beniston for his Microsoft Windows port of Java and port to
       Lattice Mico32.
  
!    • Daniel Berlin for better DWARF 2 support, faster/better
       optimizations, improved alias analysis, plus migrating GCC to
       Bugzilla.
  
!    • Geoff Berry for his Java object serialization work and various
       patches.
  
!    • David Binderman tests weekly snapshots of GCC trunk against Fedora
       Rawhide for several architectures.
  
!    • Laurynas Biveinis for memory management work and DJGPP port fixes.
  
!    • Uros Bizjak for the implementation of x87 math built-in functions
       and for various middle end and i386 back end improvements and bug
       fixes.
  
!    • Eric Blake for helping to make GCJ and libgcj conform to the
       specifications.
  
!    • Janne Blomqvist for contributions to GNU Fortran.
  
!    • Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
       other Java work.
  
!    • Segher Boessenkool for helping maintain the PowerPC port and the
       instruction combiner plus various contributions to the middle end.
  
!    • Neil Booth for work on cpplib, lang hooks, debug hooks and other
       miscellaneous clean-ups.
  
!    • Steven Bosscher for integrating the GNU Fortran front end into GCC
       and for contributing to the tree-ssa branch.
  
!    • Eric Botcazou for fixing middle- and backend bugs left and right.
  
!    • Per Bothner for his direction via the steering committee and
       various improvements to the infrastructure for supporting new
       languages.  Chill front end implementation.  Initial
       implementations of cpplib, fix-header, config.guess, libio, and
       past C++ library (libg++) maintainer.  Dreaming up, designing and
       implementing much of GCJ.
  
!    • Devon Bowen helped port GCC to the Tahoe.
  
!    • Don Bowman for mips-vxworks contributions.
  
!    • James Bowman for the FT32 port.
  
!    • Dave Brolley for work on cpplib and Chill.
  
!    • Paul Brook for work on the ARM architecture and maintaining GNU
       Fortran.
  
!    • Robert Brown implemented the support for Encore 32000 systems.
  
!    • Christian Bruel for improvements to local store elimination.
  
!    • Herman A.J. ten Brugge for various fixes.
  
!    • Joerg Brunsmann for Java compiler hacking and help with the GCJ
       FAQ.
  
!    • Joe Buck for his direction via the steering committee from its
       creation to 2013.
  
!    • Iain Buclaw for the D frontend.
  
!    • Craig Burley for leadership of the G77 Fortran effort.
  
!    • Tobias Burnus for contributions to GNU Fortran.
  
!    • Stephan Buys for contributing Doxygen notes for libstdc++.
  
!    • Paolo Carlini for libstdc++ work: lots of efficiency improvements
       to the C++ strings, streambufs and formatted I/O, hard detective
       work on the frustrating localization issues, and keeping up with
       the problem reports.
  
!    • John Carr for his alias work, SPARC hacking, infrastructure
       improvements, previous contributions to the steering committee,
       loop optimizations, etc.
  
!    • Stephane Carrez for 68HC11 and 68HC12 ports.
  
!    • Steve Chamberlain for support for the Renesas SH and H8 processors
       and the PicoJava processor, and for GCJ config fixes.
  
!    • Glenn Chambers for help with the GCJ FAQ.
  
!    • John-Marc Chandonia for various libgcj patches.
  
!    • Denis Chertykov for contributing and maintaining the AVR port, the
       first GCC port for an 8-bit architecture.
  
!    • Kito Cheng for his work on the RISC-V port, including bringing up
       the test suite and maintenance.
  
!    • Scott Christley for his Objective-C contributions.
  
!    • Eric Christopher for his Java porting help and clean-ups.
  
!    • Branko Cibej for more warning contributions.
  
!    • The GNU Classpath project for all of their merged runtime code.
  
!    • Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
!      ‘--help’, and other random hacking.
  
!    • Michael Cook for libstdc++ cleanup patches to reduce warnings.
  
!    • R. Kelley Cook for making GCC buildable from a read-only directory
       as well as other miscellaneous build process and documentation
       clean-ups.
  
!    • Ralf Corsepius for SH testing and minor bug fixing.
  
!    • François-Xavier Coudert for contributions to GNU Fortran.
  
!    • Stan Cox for care and feeding of the x86 port and lots of behind
       the scenes hacking.
  
!    • Alex Crain provided changes for the 3b1.
  
!    • Ian Dall for major improvements to the NS32k port.
  
!    • Paul Dale for his work to add uClinux platform support to the m68k
       backend.
  
!    • Palmer Dabbelt for his work maintaining the RISC-V port.
  
!    • Dario Dariol contributed the four varieties of sample programs that
       print a copy of their source.
  
!    • Russell Davidson for fstream and stringstream fixes in libstdc++.
  
!    • Bud Davis for work on the G77 and GNU Fortran compilers.
  
!    • Mo DeJong for GCJ and libgcj bug fixes.
  
!    • Jerry DeLisle for contributions to GNU Fortran.
  
!    • DJ Delorie for the DJGPP port, build and libiberty maintenance,
       various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
  
!    • Arnaud Desitter for helping to debug GNU Fortran.
  
!    • Gabriel Dos Reis for contributions to G++, contributions and
       maintenance of GCC diagnostics infrastructure, libstdc++-v3,
!      including ‘valarray<>’, ‘complex<>’, maintaining the numerics
!      library (including that pesky ‘<limits>’ :-) and keeping up-to-date
       anything to do with numbers.
  
!    • Ulrich Drepper for his work on glibc, testing of GCC using glibc,
       ISO C99 support, CFG dumping support, etc., plus support of the C++
       runtime libraries including for all kinds of C interface issues,
!      contributing and maintaining ‘complex<>’, sanity checking and
       disbursement, configuration architecture, libio maintenance, and
       early math work.
  
!    • François Dumont for his work on libstdc++-v3, especially
!      maintaining and improving ‘debug-mode’ and associative and
       unordered containers.
  
!    • Zdenek Dvorak for a new loop unroller and various fixes.
  
!    • Michael Eager for his work on the Xilinx MicroBlaze port.
  
!    • Richard Earnshaw for his ongoing work with the ARM.
  
!    • David Edelsohn for his direction via the steering committee,
       ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
       loop changes, doing the entire AIX port of libstdc++ with his bare
       hands, and for ensuring GCC properly keeps working on AIX.
  
!    • Kevin Ediger for the floating point formatting of num_put::do_put
       in libstdc++.
  
!    • Phil Edwards for libstdc++ work including configuration hackery,
       documentation maintainer, chief breaker of the web pages, the
       occasional iostream bug fix, and work on shared library symbol
       versioning.
  
!    • Paul Eggert for random hacking all over GCC.
  
!    • Mark Elbrecht for various DJGPP improvements, and for libstdc++
       configuration support for locales and fstream-related fixes.
  
!    • Vadim Egorov for libstdc++ fixes in strings, streambufs, and
       iostreams.
  
!    • Christian Ehrhardt for dealing with bug reports.
  
!    • Ben Elliston for his work to move the Objective-C runtime into its
       own subdirectory and for his work on autoconf.
  
!    • Revital Eres for work on the PowerPC 750CL port.
  
!    • Marc Espie for OpenBSD support.
  
!    • Doug Evans for much of the global optimization framework, arc,
       m32r, and SPARC work.
  
!    • Christopher Faylor for his work on the Cygwin port and for caring
       and feeding the gcc.gnu.org box and saving its users tons of spam.
  
!    • Fred Fish for BeOS support and Ada fixes.
  
!    • Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
  
!    • Peter Gerwinski for various bug fixes and the Pascal front end.
  
!    • Kaveh R. Ghazi for his direction via the steering committee,
!      amazing work to make ‘-W -Wall -W* -Werror’ useful, and testing GCC
       on a plethora of platforms.  Kaveh extends his gratitude to the
       CAIP Center at Rutgers University for providing him with computing
       resources to work on Free Software from the late 1980s to 2010.
  
!    • John Gilmore for a donation to the FSF earmarked improving GNU
       Java.
  
!    • Judy Goldberg for c++ contributions.
  
!    • Torbjorn Granlund for various fixes and the c-torture testsuite,
       multiply- and divide-by-constant optimization, improved long long
       support, improved leaf function register allocation, and his
       direction via the steering committee.
  
!    • Jonny Grant for improvements to ‘collect2's’ ‘--help’
       documentation.
  
!    • Anthony Green for his ‘-Os’ contributions, the moxie port, and Java
       front end work.
  
!    • Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
       code.
  
!    • Michael K. Gschwind contributed the port to the PDP-11.
  
!    • Richard Biener for his ongoing middle-end contributions and bug
       fixes and for release management.
  
!    • Ron Guilmette implemented the ‘protoize’ and ‘unprotoize’ tools,
       the support for DWARF 1 symbolic debugging information, and much of
       the support for System V Release 4.  He has also worked heavily on
       the Intel 386 and 860 support.
  
!    • Sumanth Gundapaneni for contributing the CR16 port.
  
!    • Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
       GCSE.
  
!    • Bruno Haible for improvements in the runtime overhead for EH, new
       warnings and assorted bug fixes.
  
!    • Andrew Haley for his amazing Java compiler and library efforts.
  
!    • Chris Hanson assisted in making GCC work on HP-UX for the 9000
       series 300.
  
!    • Michael Hayes for various thankless work he's done trying to get
       the c30/c40 ports functional.  Lots of loop and unroll improvements
       and fixes.
  
!    • Dara Hazeghi for wading through myriads of target-specific bug
       reports.
  
!    • Kate Hedstrom for staking the G77 folks with an initial testsuite.
  
!    • Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
       work, loop opts, and generally fixing lots of old problems we've
       ignored for years, flow rewrite and lots of further stuff,
       including reviewing tons of patches.
  
!    • Aldy Hernandez for working on the PowerPC port, SIMD support, and
       various fixes.
  
!    • Nobuyuki Hikichi of Software Research Associates, Tokyo,
       contributed the support for the Sony NEWS machine.
  
!    • Kazu Hirata for caring and feeding the Renesas H8/300 port and
       various fixes.
  
!    • Katherine Holcomb for work on GNU Fortran.
  
!    • Manfred Hollstein for his ongoing work to keep the m88k alive, lots
       of testing and bug fixing, particularly of GCC configury code.
  
!    • Steve Holmgren for MachTen patches.
  
!    • Mat Hostetter for work on the TILE-Gx and TILEPro ports.
  
!    • Jan Hubicka for his x86 port improvements.
  
!    • Falk Hueffner for working on C and optimization bug reports.
  
!    • Bernardo Innocenti for his m68k work, including merging of ColdFire
       improvements and uClinux support.
  
!    • Christian Iseli for various bug fixes.
  
!    • Kamil Iskra for general m68k hacking.
  
!    • Lee Iverson for random fixes and MIPS testing.
  
!    • Balaji V. Iyer for Cilk+ development and merging.
  
!    • Andreas Jaeger for testing and benchmarking of GCC and various bug
       fixes.
  
!    • Martin Jambor for his work on inter-procedural optimizations, the
       switch conversion pass, and scalar replacement of aggregates.
  
!    • Jakub Jelinek for his SPARC work and sibling call optimizations as
       well as lots of bug fixes and test cases, and for improving the
       Java build system.
  
!    • Janis Johnson for ia64 testing and fixes, her quality improvement
       sidetracks, and web page maintenance.
  
!    • Kean Johnston for SCO OpenServer support and various fixes.
  
!    • Tim Josling for the sample language treelang based originally on
       Richard Kenner's "toy" language.
  
!    • Nicolai Josuttis for additional libstdc++ documentation.
  
!    • Klaus Kaempf for his ongoing work to make alpha-vms a viable
       target.
  
!    • Steven G. Kargl for work on GNU Fortran.
  
!    • David Kashtan of SRI adapted GCC to VMS.
  
!    • Ryszard Kabatek for many, many libstdc++ bug fixes and
       optimizations of strings, especially member functions, and for
       auto_ptr fixes.
  
!    • Geoffrey Keating for his ongoing work to make the PPC work for
       GNU/Linux and his automatic regression tester.
  
!    • Brendan Kehoe for his ongoing work with G++ and for a lot of early
       work in just about every part of libstdc++.
  
!    • Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
       MIL-STD-1750A.
  
!    • Richard Kenner of the New York University Ultracomputer Research
       Laboratory wrote the machine descriptions for the AMD 29000, the
       DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
       support for instruction attributes.  He also made changes to better
*************** in alphabetical order.
*** 69968,70883 ****
       Richard Kenner was also the head maintainer of GCC for several
       years.
  
!    * Mumit Khan for various contributions to the Cygwin and Mingw32
       ports and maintaining binary releases for Microsoft Windows hosts,
       and for massive libstdc++ porting work to Cygwin/Mingw32.
  
!    * Robin Kirkham for cpu32 support.
  
!    * Mark Klein for PA improvements.
  
!    * Thomas Koenig for various bug fixes.
  
!    * Bruce Korb for the new and improved fixincludes code.
  
!    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
       effort.
  
!    * Maxim Kuvyrkov for contributions to the instruction scheduler, the
       Android and m68k/Coldfire ports, and optimizations.
  
!    * Charles LaBrec contributed the support for the Integrated Solutions
       68020 system.
  
!    * Asher Langton and Mike Kumbera for contributing Cray pointer
       support to GNU Fortran, and for other GNU Fortran improvements.
  
!    * Jeff Law for his direction via the steering committee, coordinating
       the entire egcs project and GCC 2.95, rolling out snapshots and
       releases, handling merges from GCC2, reviewing tons of patches that
       might have fallen through the cracks else, and random but extensive
       hacking.
  
!    * Walter Lee for work on the TILE-Gx and TILEPro ports.
  
!    * Marc Lehmann for his direction via the steering committee and
       helping with analysis and improvements of x86 performance.
  
!    * Victor Leikehman for work on GNU Fortran.
  
!    * Ted Lemon wrote parts of the RTL reader and printer.
  
!    * Kriang Lerdsuwanakij for C++ improvements including template as
       template parameter support, and many C++ fixes.
  
!    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
       and random work on the Java front end.
  
!    * Alain Lichnewsky ported GCC to the MIPS CPU.
  
!    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
       and patches.
  
!    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
  
!    * Chen Liqin for various S+core related fixes/improvement, and for
       maintaining the S+core port.
  
!    * Martin Liska for his work on identical code folding, the
       sanitizers, HSA, general bug fixing and for running automated
       regression testing of GCC and reporting numerous bugs.
  
!    * Weiwen Liu for testing and various bug fixes.
  
!    * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
       diagnostics fixes and improvements.
  
!    * Dave Love for his ongoing work with the Fortran front end and
       runtime libraries.
  
!    * Martin von Lo"wis for internal consistency checking infrastructure,
       various C++ improvements including namespace support, and tons of
       assistance with libstdc++/compiler merges.
  
!    * H.J. Lu for his previous contributions to the steering committee,
       many x86 bug reports, prototype patches, and keeping the GNU/Linux
       ports working.
  
!    * Greg McGary for random fixes and (someday) bounded pointers.
  
!    * Andrew MacLeod for his ongoing work in building a real EH system,
       various code generation improvements, work on the global optimizer,
       etc.
  
!    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
       hacking improvements to compile-time performance, overall knowledge
       and direction in the area of instruction scheduling, design and
       implementation of the automaton based instruction scheduler and
       design and implementation of the integrated and local register
       allocators.
  
!    * David Malcolm for his work on improving GCC diagnostics, JIT,
       self-tests and unit testing.
  
!    * Bob Manson for his behind the scenes work on dejagnu.
  
!    * Jose E. Marchesi for contributing the eBPF backend and his ongoing
       work maintaining it.
  
!    * John Marino for contributing the DragonFly BSD port.
  
!    * Philip Martin for lots of libstdc++ string and vector iterator
       fixes and improvements, and string clean up and testsuites.
  
!    * Michael Matz for his work on dominance tree discovery, the x86-64
       port, link-time optimization framework and general optimization
       improvements.
  
!    * All of the Mauve project contributors for Java test code.
  
!    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
  
!    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
  
!    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
       powerpc, haifa, ECOFF debug support, and other assorted hacking.
  
!    * Jason Merrill for his direction via the steering committee and
       leading the G++ effort.
  
!    * Martin Michlmayr for testing GCC on several architectures using the
       entire Debian archive.
  
!    * David Miller for his direction via the steering committee, lots of
       SPARC work, improvements in jump.cc and interfacing with the Linux
       kernel developers.
  
!    * Gary Miller ported GCC to Charles River Data Systems machines.
  
!    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
       the entire libstdc++ testsuite namespace-compatible.
  
!    * Mark Mitchell for his direction via the steering committee,
       mountains of C++ work, load/store hoisting out of loops, alias
!      analysis improvements, ISO C 'restrict' support, and serving as
       release manager from 2000 to 2011.
  
!    * Alan Modra for various GNU/Linux bits and testing.
  
!    * Toon Moene for his direction via the steering committee, Fortran
       maintenance, and his ongoing work to make us make Fortran run fast.
  
!    * Jason Molenda for major help in the care and feeding of all the
       services on the gcc.gnu.org (formerly egcs.cygnus.com)
       machine--mail, web services, ftp services, etc etc.  Doing all this
       work on scrap paper and the backs of envelopes would have been...
       difficult.
  
!    * Catherine Moore for fixing various ugly problems we have sent her
       way, including the haifa bug which was killing the Alpha & PowerPC
       Linux kernels.
  
!    * Mike Moreton for his various Java patches.
  
!    * David Mosberger-Tang for various Alpha improvements, and for the
       initial IA-64 port.
  
!    * Stephen Moshier contributed the floating point emulator that
       assists in cross-compilation and permits support for floating point
       numbers wider than 64 bits and for ISO C99 support.
  
!    * Bill Moyer for his behind the scenes work on various issues.
  
!    * Philippe De Muyter for his work on the m68k port.
  
!    * Joseph S. Myers for his work on the PDP-11 port, format checking
       and ISO C99 support, and continuous emphasis on (and contributions
       to) documentation.
  
!    * Nathan Myers for his work on libstdc++-v3: architecture and
       authorship through the first three snapshots, including
       implementation of locale infrastructure, string, shadow C headers,
       and the initial project documentation (DESIGN, CHECKLIST, and so
       forth).  Later, more work on MT-safe string and shadow headers.
  
!    * Felix Natter for documentation on porting libstdc++.
  
!    * Nathanael Nerode for cleaning up the configuration/build process.
  
!    * NeXT, Inc. donated the front end that supports the Objective-C
       language.
  
!    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
       search engine setup, various documentation fixes and other small
       fixes.
  
!    * Geoff Noer for his work on getting cygwin native builds working.
  
!    * Vegard Nossum for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
       tracking web pages, GIMPLE tuples, and assorted fixes.
  
!    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
       FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
       infrastructure improvements.
  
!    * Alexandre Oliva for various build infrastructure improvements,
       scripts and amazing testing work, including keeping libtool issues
       sane and happy.
  
!    * Stefan Olsson for work on mt_alloc.
  
!    * Melissa O'Neill for various NeXT fixes.
  
!    * Rainer Orth for random MIPS work, including improvements to GCC's
       o32 ABI support, improvements to dejagnu's MIPS support, Java
       configuration clean-ups and porting work, and maintaining the IRIX,
       Solaris 2, and Tru64 UNIX ports.
  
!    * Patrick Palka for contributions to the C++ library and front end.
  
!    * Steven Pemberton for his contribution of 'enquire' which allowed
       GCC to determine various properties of the floating point unit and
!      generate 'float.h' in older versions of GCC.
  
!    * Hartmut Penner for work on the s390 port.
  
!    * Paul Petersen wrote the machine description for the Alliant FX/8.
  
!    * Alexandre Petit-Bianco for implementing much of the Java compiler
       and continued Java maintainership.
  
!    * Matthias Pfaller for major improvements to the NS32k port.
  
!    * Gerald Pfeifer for his direction via the steering committee,
       pointing out lots of problems we need to solve, maintenance of the
       web pages, and taking care of documentation maintenance in general.
  
!    * Marek Polacek for his work on the C front end, the sanitizers and
       general bug fixing.
  
!    * Andrew Pinski for processing bug reports by the dozen, maintenance
       of the Objective-C runtime libraries, and many scalar
       optimizations.
  
!    * Ovidiu Predescu for his work on the Objective-C front end and
       runtime libraries.
  
!    * Jerry Quinn for major performance improvements in C++ formatted
       I/O.
  
!    * Ken Raeburn for various improvements to checker, MIPS ports and
       various cleanups in the compiler.
  
!    * Rolf W. Rasmussen for hacking on AWT.
  
!    * David Reese of Sun Microsystems contributed to the Solaris on
       PowerPC port.
  
!    * John Regehr for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Volker Reichelt for running automated regression testing of GCC and
       reporting numerous bugs and for keeping up with the problem
       reports.
  
!    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
       hacking and developing and maintaining the Epiphany port.
  
!    * Loren J. Rittle for improvements to libstdc++-v3 including the
       FreeBSD port, threading fixes, thread-related configury changes,
       critical threading documentation, and solutions to really tricky
       I/O problems, as well as keeping GCC properly working on FreeBSD
       and continuous testing.
  
!    * Craig Rodrigues for processing tons of bug reports.
  
!    * Ola Ro"nnerup for work on mt_alloc.
  
!    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
  
!    * David Ronis inspired and encouraged Craig to rewrite the G77
       documentation in texinfo format by contributing a first pass at a
!      translation of the old 'g77-0.5.16/f/DOC' file.
  
!    * Ken Rose for fixes to GCC's delay slot filling code.
  
!    * Ira Rosen for her contributions to the auto-vectorizer.
  
!    * Paul Rubin wrote most of the preprocessor.
  
!    * Pe'tur Runo'lfsson for major performance improvements in C++
       formatted I/O and large file support in C++ filebuf.
  
!    * Chip Salzenberg for libstdc++ patches and improvements to locales,
       traits, Makefiles, libio, libtool hackery, and "long long" support.
  
!    * Juha Sarlin for improvements to the H8 code generator.
  
!    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
       300.
  
!    * Roger Sayle for improvements to constant folding and GCC's RTL
       optimizers as well as for fixing numerous bugs.
  
!    * Bradley Schatz for his work on the GCJ FAQ.
  
!    * Peter Schauer wrote the code to allow debugging to work on the
       Alpha.
  
!    * William Schelter did most of the work on the Intel 80386 support.
  
!    * Tobias Schlu"ter for work on GNU Fortran.
  
!    * Bernd Schmidt for various code generation improvements and major
       work in the reload pass, serving as release manager for GCC 2.95.3,
       and work on the Blackfin and C6X ports.
  
!    * Peter Schmid for constant testing of libstdc++--especially
       application testing, going above and beyond what was requested for
       the release criteria--and libstdc++ header file tweaks.
  
!    * Jason Schroeder for jcf-dump patches.
  
!    * Andreas Schwab for his work on the m68k port.
  
!    * Lars Segerlund for work on GNU Fortran.
  
!    * Dodji Seketeli for numerous C++ bug fixes and debug info
       improvements.
  
!    * Tim Shen for major work on '<regex>'.
  
!    * Joel Sherrill for his direction via the steering committee, RTEMS
       contributions and RTEMS testing.
  
!    * Nathan Sidwell for many C++ fixes/improvements.
  
!    * Jeffrey Siegal for helping RMS with the original design of GCC,
       some code which handles the parse tree and RTL data structures,
       constant folding and help with the original VAX & m68k ports.
  
!    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
       from the LWG (thereby keeping GCC in line with updates from the
       ISO).
  
!    * Franz Sirl for his ongoing work with making the PPC port stable for
       GNU/Linux.
  
!    * Andrey Slepuhin for assorted AIX hacking.
  
!    * Trevor Smigiel for contributing the SPU port.
  
!    * Christopher Smith did the port for Convex machines.
  
!    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
       Retired from GCC maintainership August 2010, having mentored two
       new maintainers into the role.
  
!    * Randy Smith finished the Sun FPA support.
  
!    * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
!      functions, '<random>', and various improvements to C++11 features.
  
!    * Scott Snyder for queue, iterator, istream, and string fixes and
       libstdc++ testsuite entries.  Also for providing the patch to G77
!      to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
!      'LOGICAL*1'.
  
!    * Zdenek Sojka for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Arseny Solokha for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Jayant Sonar for contributing the CR16 port.
  
!    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
  
!    * Richard Stallman, for writing the original GCC and launching the
       GNU project.
  
!    * Jan Stein of the Chalmers Computer Society provided support for
       Genix, as well as part of the 32000 machine description.
  
!    * Gerhard Steinmetz for running automated regression testing of GCC
       and reporting numerous bugs.
  
!    * Nigel Stephens for various mips16 related fixes/improvements.
  
!    * Jonathan Stone wrote the machine description for the Pyramid
       computer.
  
!    * Graham Stott for various infrastructure improvements.
  
!    * John Stracke for his Java HTTP protocol fixes.
  
!    * Mike Stump for his Elxsi port, G++ contributions over the years and
       more recently his vxworks contributions
  
!    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
  
!    * Zhendong Su for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Chengnian Sun for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Shigeya Suzuki for this fixes for the bsdi platforms.
  
!    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
       support, general configury hacking, fixincludes, etc.
  
!    * Holger Teutsch provided the support for the Clipper CPU.
  
!    * Gary Thomas for his ongoing work to make the PPC work for
       GNU/Linux.
  
!    * Paul Thomas for contributions to GNU Fortran.
  
!    * Philipp Thomas for random bug fixes throughout the compiler
  
!    * Jason Thorpe for thread support in libstdc++ on NetBSD.
  
!    * Kresten Krab Thorup wrote the run time support for the Objective-C
       language and the fantastic Java bytecode interpreter.
  
!    * Michael Tiemann for random bug fixes, the first instruction
       scheduler, initial C++ support, function integration, NS32k, SPARC
       and M88k machine description work, delay slot scheduling.
  
!    * Andreas Tobler for his work porting libgcj to Darwin.
  
!    * Teemu Torma for thread safe exception handling support.
  
!    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
       definitions, and of the VAX machine description.
  
!    * Daniel Towner and Hariharan Sandanagobalane contributed and
       maintain the picoChip port.
  
!    * Tom Tromey for internationalization support and for his many Java
       contributions and libgcj maintainership.
  
!    * Lassi Tuura for improvements to config.guess to determine HP
       processor types.
  
!    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
  
!    * Andy Vaught for the design and initial implementation of the GNU
       Fortran front end.
  
!    * Brent Verner for work with the libstdc++ cshadow files and their
       associated configure steps.
  
!    * Todd Vierling for contributions for NetBSD ports.
  
!    * Andrew Waterman for contributing the RISC-V port, as well as
       maintaining it.
  
!    * Jonathan Wakely for contributing to and maintaining libstdc++.
  
!    * Dean Wakerley for converting the install documentation from HTML to
       texinfo in time for GCC 3.0.
  
!    * Krister Walfridsson for random bug fixes.
  
!    * Feng Wang for contributions to GNU Fortran.
  
!    * Stephen M. Webb for time and effort on making libstdc++ shadow
       files work with the tricky Solaris 8+ headers, and for pushing the
       build-time header tree.  Also, for starting and driving the
!      '<regex>' effort.
  
!    * John Wehle for various improvements for the x86 code generator,
       related infrastructure improvements to help x86 code generation,
       value range propagation and other work, WE32k port.
  
!    * Ulrich Weigand for work on the s390 port.
  
!    * Janus Weil for contributions to GNU Fortran.
  
!    * Zack Weinberg for major work on cpplib and various other bug fixes.
  
!    * Matt Welsh for help with Linux Threads support in GCJ.
  
!    * Urban Widmark for help fixing java.io.
  
!    * Mark Wielaard for new Java library code and his work integrating
       with Classpath.
  
!    * Dale Wiles helped port GCC to the Tahoe.
  
!    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
  
!    * Jim Wilson for his direction via the steering committee, tackling
       hard problems in various places that nobody else wanted to work on,
       strength reduction and other loop optimizations.
  
!    * Paul Woegerer and Tal Agmon for the CRX port.
  
!    * Carlo Wood for various fixes.
  
!    * Tom Wood for work on the m88k port.
  
!    * Chung-Ju Wu for his work on the Andes NDS32 port.
  
!    * Canqun Yang for work on GNU Fortran.
  
!    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
       description for the Tron architecture (specifically, the Gmicro).
  
!    * Kevin Zachmann helped port GCC to the Tahoe.
  
!    * Ayal Zaks for Swing Modulo Scheduling (SMS).
  
!    * Qirun Zhang for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Xiaoqiang Zhang for work on GNU Fortran.
  
!    * Gilles Zunino for help porting Java to Irix.
  
   The following people are recognized for their contributions to GNAT,
  the Ada front end of GCC:
!    * Bernard Banner
  
!    * Romain Berrendonner
  
!    * Geert Bosch
  
!    * Emmanuel Briot
  
!    * Joel Brobecker
  
!    * Ben Brosgol
  
!    * Vincent Celier
  
!    * Arnaud Charlet
  
!    * Chien Chieng
  
!    * Cyrille Comar
  
!    * Cyrille Crozes
  
!    * Robert Dewar
  
!    * Gary Dismukes
  
!    * Robert Duff
  
!    * Ed Falis
  
!    * Ramon Fernandez
  
!    * Sam Figueroa
  
!    * Vasiliy Fofanov
  
!    * Michael Friess
  
!    * Franco Gasperoni
  
!    * Ted Giering
  
!    * Matthew Gingell
  
!    * Laurent Guerby
  
!    * Jerome Guitton
  
!    * Olivier Hainque
  
!    * Jerome Hugues
  
!    * Hristian Kirtchev
  
!    * Jerome Lambourg
  
!    * Bruno Leclerc
  
!    * Albert Lee
  
!    * Sean McNeil
  
!    * Javier Miranda
  
!    * Laurent Nana
  
!    * Pascal Obry
  
!    * Dong-Ik Oh
  
!    * Laurent Pautet
  
!    * Brett Porter
  
!    * Thomas Quinot
  
!    * Nicolas Roche
  
!    * Pat Rogers
  
!    * Jose Ruiz
  
!    * Douglas Rupp
  
!    * Sergey Rybin
  
!    * Gail Schenker
  
!    * Ed Schonberg
  
!    * Nicolas Setton
  
!    * Samuel Tardieu
  
   The following people are recognized for their contributions of new
  features, bug reports, testing and integration of classpath/libgcj for
  GCC version 4.1:
!    * Lillian Angel for 'JTree' implementation and lots Free Swing
       additions and bug fixes.
  
!    * Wolfgang Baer for 'GapContent' bug fixes.
  
!    * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
!      event fixes, lots of Free Swing work including 'JTable' editing.
  
!    * Stuart Ballard for RMI constant fixes.
  
!    * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
  
!    * Gary Benson for 'MessageFormat' fixes.
  
!    * Daniel Bonniot for 'Serialization' fixes.
  
!    * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
!      and 'DOM xml:id' support.
  
!    * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
  
!    * Archie Cobbs for build fixes, VM interface updates,
!      'URLClassLoader' updates.
  
!    * Kelley Cook for build fixes.
  
!    * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
  
!    * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
       improvements.
  
!    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
       2D support.  Lots of imageio framework additions, lots of AWT and
       Free Swing bug fixes.
  
!    * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
!      fixes, better 'Proxy' support, bug fixes and IKVM integration.
  
!    * Santiago Gala for 'AccessControlContext' fixes.
  
!    * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
       improvements.
  
!    * David Gilbert for 'basic' and 'metal' icon and plaf support and
       lots of documenting, Lots of Free Swing and metal theme additions.
!      'MetalIconFactory' implementation.
  
!    * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
  
!    * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
       build speedups.
  
!    * Kim Ho for 'JFileChooser' implementation.
  
!    * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
!      'Serialization' fixes, 'Properties' XML support and generic branch
       work, VMIntegration guide update.
  
!    * Bastiaan Huisman for 'TimeZone' bug fixing.
  
!    * Andreas Jaeger for mprec updates.
  
!    * Paul Jenner for better '-Werror' support.
  
!    * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
  
!    * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
       bug fixes all over.  Lots of Free Swing work including styled text.
  
!    * Simon Kitching for 'String' cleanups and optimization suggestions.
  
!    * Michael Koch for configuration fixes, 'Locale' updates, bug and
       build fixes.
  
!    * Guilhem Lavaux for configuration, thread and channel fixes and
!      Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
       fixes.
  
!    * David Lichteblau for JCL support library global/local reference
       cleanups.
  
!    * Aaron Luchko for JDWP updates and documentation fixes.
  
!    * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
       features.
  
!    * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
!      fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
       and implementing the Qt4 peers.
  
!    * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
!      'SystemLogger' and 'FileHandler' rotate implementations, NIO
!      'FileChannel.map' support, security and policy updates.
  
!    * Bryce McKinlay for RMI work.
  
!    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
       testing and documenting.
  
!    * Kalle Olavi Niemitalo for build fixes.
  
!    * Rainer Orth for build fixes.
  
!    * Andrew Overholt for 'File' locking fixes.
  
!    * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
  
!    * Olga Rodimina for 'MenuSelectionManager' implementation.
  
!    * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
  
!    * Julian Scheid for documentation updates and gjdoc support.
  
!    * Christian Schlichtherle for zip fixes and cleanups.
  
!    * Robert Schuster for documentation updates and beans fixes,
!      'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
       and URL, AWT and Free Swing bug fixes.
  
!    * Keith Seitz for lots of JDWP work.
  
!    * Christian Thalinger for 64-bit cleanups, Configuration and VM
!      interface fixes and 'CACAO' integration, 'fdlibm' updates.
  
!    * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
  
!    * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
!      support for Darwin / macOS, 'Graphics2D' support, 'gtk+' updates.
  
!    * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
!      integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
!      'GdkPixbugDecoder' updates.
  
!    * Tom Tromey for Eclipse integration, generics work, lots of bug
       fixes and gcj integration including coordinating The Big Merge.
  
!    * Mark Wielaard for bug fixes, packaging and release management,
!      'Clipboard' implementation, system call interrupts and network
!      timeouts and 'GdkPixpufDecoder' fixes.
  
   In addition to the above, all of which also contributed time and energy
  in testing GCC, we would like to thank the following for their
  contributions to testing:
  
!    * Michael Abd-El-Malek
  
!    * Thomas Arend
  
!    * Bonzo Armstrong
  
!    * Steven Ashe
  
!    * Chris Baldwin
  
!    * David Billinghurst
  
!    * Jim Blandy
  
!    * Stephane Bortzmeyer
  
!    * Horst von Brand
  
!    * Frank Braun
  
!    * Rodney Brown
  
!    * Sidney Cadot
  
!    * Bradford Castalia
  
!    * Robert Clark
  
!    * Jonathan Corbet
  
!    * Ralph Doncaster
  
!    * Richard Emberson
  
!    * Levente Farkas
  
!    * Graham Fawcett
  
!    * Mark Fernyhough
  
!    * Robert A. French
  
!    * Jo"rgen Freyh
  
!    * Mark K. Gardner
  
!    * Charles-Antoine Gauthier
  
!    * Yung Shing Gene
  
!    * David Gilbert
  
!    * Simon Gornall
  
!    * Fred Gray
  
!    * John Griffin
  
!    * Patrik Hagglund
  
!    * Phil Hargett
  
!    * Amancio Hasty
  
!    * Takafumi Hayashi
  
!    * Bryan W. Headley
  
!    * Kevin B. Hendricks
  
!    * Joep Jansen
  
!    * Christian Joensson
  
!    * Michel Kern
  
!    * David Kidd
  
!    * Tobias Kuipers
  
!    * Anand Krishnaswamy
  
!    * A. O. V. Le Blanc
  
!    * llewelly
  
!    * Damon Love
  
!    * Brad Lucier
  
!    * Matthias Klose
  
!    * Martin Knoblauch
  
!    * Rick Lutowski
  
!    * Jesse Macnish
  
!    * Stefan Morrell
  
!    * Anon A. Mous
  
!    * Matthias Mueller
  
!    * Pekka Nikander
  
!    * Rick Niles
  
!    * Jon Olson
  
!    * Magnus Persson
  
!    * Chris Pollard
  
!    * Richard Polton
  
!    * Derk Reefman
  
!    * David Rees
  
!    * Paul Reilly
  
!    * Tom Reilly
  
!    * Torsten Rueger
  
!    * Danny Sadinoff
  
!    * Marc Schifer
  
!    * Erik Schnetter
  
!    * Wayne K. Schroll
  
!    * David Schuler
  
!    * Vin Shelton
  
!    * Tim Souder
  
!    * Adam Sulmicki
  
!    * Bill Thorson
  
!    * George Talbot
  
!    * Pedro A. M. Vazquez
  
!    * Gregory Warnes
  
!    * Ian Watson
  
!    * David E. Young
  
!    * And many others
  
   And finally we'd like to thank everyone who uses the compiler, provides
  feedback and generally reminds us why we're doing this work in the first
--- 69979,70894 ----
       Richard Kenner was also the head maintainer of GCC for several
       years.
  
!    • Mumit Khan for various contributions to the Cygwin and Mingw32
       ports and maintaining binary releases for Microsoft Windows hosts,
       and for massive libstdc++ porting work to Cygwin/Mingw32.
  
!    • Robin Kirkham for cpu32 support.
  
!    • Mark Klein for PA improvements.
  
!    • Thomas Koenig for various bug fixes.
  
!    • Bruce Korb for the new and improved fixincludes code.
  
!    • Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
       effort.
  
!    • Maxim Kuvyrkov for contributions to the instruction scheduler, the
       Android and m68k/Coldfire ports, and optimizations.
  
!    • Charles LaBrec contributed the support for the Integrated Solutions
       68020 system.
  
!    • Asher Langton and Mike Kumbera for contributing Cray pointer
       support to GNU Fortran, and for other GNU Fortran improvements.
  
!    • Jeff Law for his direction via the steering committee, coordinating
       the entire egcs project and GCC 2.95, rolling out snapshots and
       releases, handling merges from GCC2, reviewing tons of patches that
       might have fallen through the cracks else, and random but extensive
       hacking.
  
!    • Walter Lee for work on the TILE-Gx and TILEPro ports.
  
!    • Marc Lehmann for his direction via the steering committee and
       helping with analysis and improvements of x86 performance.
  
!    • Victor Leikehman for work on GNU Fortran.
  
!    • Ted Lemon wrote parts of the RTL reader and printer.
  
!    • Kriang Lerdsuwanakij for C++ improvements including template as
       template parameter support, and many C++ fixes.
  
!    • Warren Levy for tremendous work on libgcj (Java Runtime Library)
       and random work on the Java front end.
  
!    • Alain Lichnewsky ported GCC to the MIPS CPU.
  
!    • Oskar Liljeblad for hacking on AWT and his many Java bug reports
       and patches.
  
!    • Robert Lipe for OpenServer support, new testsuites, testing, etc.
  
!    • Chen Liqin for various S+core related fixes/improvement, and for
       maintaining the S+core port.
  
!    • Martin Liska for his work on identical code folding, the
       sanitizers, HSA, general bug fixing and for running automated
       regression testing of GCC and reporting numerous bugs.
  
!    • Weiwen Liu for testing and various bug fixes.
  
!    • Manuel López-Ibáñez for improving ‘-Wconversion’ and many other
       diagnostics fixes and improvements.
  
!    • Dave Love for his ongoing work with the Fortran front end and
       runtime libraries.
  
!    • Martin von Löwis for internal consistency checking infrastructure,
       various C++ improvements including namespace support, and tons of
       assistance with libstdc++/compiler merges.
  
!    • H.J. Lu for his previous contributions to the steering committee,
       many x86 bug reports, prototype patches, and keeping the GNU/Linux
       ports working.
  
!    • Greg McGary for random fixes and (someday) bounded pointers.
  
!    • Andrew MacLeod for his ongoing work in building a real EH system,
       various code generation improvements, work on the global optimizer,
       etc.
  
!    • Vladimir Makarov for hacking some ugly i960 problems, PowerPC
       hacking improvements to compile-time performance, overall knowledge
       and direction in the area of instruction scheduling, design and
       implementation of the automaton based instruction scheduler and
       design and implementation of the integrated and local register
       allocators.
  
!    • David Malcolm for his work on improving GCC diagnostics, JIT,
       self-tests and unit testing.
  
!    • Bob Manson for his behind the scenes work on dejagnu.
  
!    • Jose E. Marchesi for contributing the eBPF backend and his ongoing
       work maintaining it.
  
!    • John Marino for contributing the DragonFly BSD port.
  
!    • Philip Martin for lots of libstdc++ string and vector iterator
       fixes and improvements, and string clean up and testsuites.
  
!    • Michael Matz for his work on dominance tree discovery, the x86-64
       port, link-time optimization framework and general optimization
       improvements.
  
!    • All of the Mauve project contributors for Java test code.
  
!    • Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
  
!    • Adam Megacz for his work on the Microsoft Windows port of GCJ.
  
!    • Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
       powerpc, haifa, ECOFF debug support, and other assorted hacking.
  
!    • Jason Merrill for his direction via the steering committee and
       leading the G++ effort.
  
!    • Martin Michlmayr for testing GCC on several architectures using the
       entire Debian archive.
  
!    • David Miller for his direction via the steering committee, lots of
       SPARC work, improvements in jump.cc and interfacing with the Linux
       kernel developers.
  
!    • Gary Miller ported GCC to Charles River Data Systems machines.
  
!    • Alfred Minarik for libstdc++ string and ios bug fixes, and turning
       the entire libstdc++ testsuite namespace-compatible.
  
!    • Mark Mitchell for his direction via the steering committee,
       mountains of C++ work, load/store hoisting out of loops, alias
!      analysis improvements, ISO C ‘restrict’ support, and serving as
       release manager from 2000 to 2011.
  
!    • Alan Modra for various GNU/Linux bits and testing.
  
!    • Toon Moene for his direction via the steering committee, Fortran
       maintenance, and his ongoing work to make us make Fortran run fast.
  
!    • Jason Molenda for major help in the care and feeding of all the
       services on the gcc.gnu.org (formerly egcs.cygnus.com)
       machine--mail, web services, ftp services, etc etc.  Doing all this
       work on scrap paper and the backs of envelopes would have been...
       difficult.
  
!    • Catherine Moore for fixing various ugly problems we have sent her
       way, including the haifa bug which was killing the Alpha & PowerPC
       Linux kernels.
  
!    • Mike Moreton for his various Java patches.
  
!    • David Mosberger-Tang for various Alpha improvements, and for the
       initial IA-64 port.
  
!    • Stephen Moshier contributed the floating point emulator that
       assists in cross-compilation and permits support for floating point
       numbers wider than 64 bits and for ISO C99 support.
  
!    • Bill Moyer for his behind the scenes work on various issues.
  
!    • Philippe De Muyter for his work on the m68k port.
  
!    • Joseph S. Myers for his work on the PDP-11 port, format checking
       and ISO C99 support, and continuous emphasis on (and contributions
       to) documentation.
  
!    • Nathan Myers for his work on libstdc++-v3: architecture and
       authorship through the first three snapshots, including
       implementation of locale infrastructure, string, shadow C headers,
       and the initial project documentation (DESIGN, CHECKLIST, and so
       forth).  Later, more work on MT-safe string and shadow headers.
  
!    • Felix Natter for documentation on porting libstdc++.
  
!    • Nathanael Nerode for cleaning up the configuration/build process.
  
!    • NeXT, Inc. donated the front end that supports the Objective-C
       language.
  
!    • Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
       search engine setup, various documentation fixes and other small
       fixes.
  
!    • Geoff Noer for his work on getting cygwin native builds working.
  
!    • Vegard Nossum for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
       tracking web pages, GIMPLE tuples, and assorted fixes.
  
!    • David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
       FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
       infrastructure improvements.
  
!    • Alexandre Oliva for various build infrastructure improvements,
       scripts and amazing testing work, including keeping libtool issues
       sane and happy.
  
!    • Stefan Olsson for work on mt_alloc.
  
!    • Melissa O'Neill for various NeXT fixes.
  
!    • Rainer Orth for random MIPS work, including improvements to GCC's
       o32 ABI support, improvements to dejagnu's MIPS support, Java
       configuration clean-ups and porting work, and maintaining the IRIX,
       Solaris 2, and Tru64 UNIX ports.
  
!    • Patrick Palka for contributions to the C++ library and front end.
  
!    • Steven Pemberton for his contribution of ‘enquire’ which allowed
       GCC to determine various properties of the floating point unit and
!      generate ‘float.h’ in older versions of GCC.
  
!    • Hartmut Penner for work on the s390 port.
  
!    • Paul Petersen wrote the machine description for the Alliant FX/8.
  
!    • Alexandre Petit-Bianco for implementing much of the Java compiler
       and continued Java maintainership.
  
!    • Matthias Pfaller for major improvements to the NS32k port.
  
!    • Gerald Pfeifer for his direction via the steering committee,
       pointing out lots of problems we need to solve, maintenance of the
       web pages, and taking care of documentation maintenance in general.
  
!    • Marek Polacek for his work on the C front end, the sanitizers and
       general bug fixing.
  
!    • Andrew Pinski for processing bug reports by the dozen, maintenance
       of the Objective-C runtime libraries, and many scalar
       optimizations.
  
!    • Ovidiu Predescu for his work on the Objective-C front end and
       runtime libraries.
  
!    • Jerry Quinn for major performance improvements in C++ formatted
       I/O.
  
!    • Ken Raeburn for various improvements to checker, MIPS ports and
       various cleanups in the compiler.
  
!    • Rolf W. Rasmussen for hacking on AWT.
  
!    • David Reese of Sun Microsystems contributed to the Solaris on
       PowerPC port.
  
!    • John Regehr for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Volker Reichelt for running automated regression testing of GCC and
       reporting numerous bugs and for keeping up with the problem
       reports.
  
!    • Joern Rennecke for maintaining the sh port, loop, regmove & reload
       hacking and developing and maintaining the Epiphany port.
  
!    • Loren J. Rittle for improvements to libstdc++-v3 including the
       FreeBSD port, threading fixes, thread-related configury changes,
       critical threading documentation, and solutions to really tricky
       I/O problems, as well as keeping GCC properly working on FreeBSD
       and continuous testing.
  
!    • Craig Rodrigues for processing tons of bug reports.
  
!    • Ola Rönnerup for work on mt_alloc.
  
!    • Gavin Romig-Koch for lots of behind the scenes MIPS work.
  
!    • David Ronis inspired and encouraged Craig to rewrite the G77
       documentation in texinfo format by contributing a first pass at a
!      translation of the old ‘g77-0.5.16/f/DOC’ file.
  
!    • Ken Rose for fixes to GCC's delay slot filling code.
  
!    • Ira Rosen for her contributions to the auto-vectorizer.
  
!    • Paul Rubin wrote most of the preprocessor.
  
!    • Pétur Runólfsson for major performance improvements in C++
       formatted I/O and large file support in C++ filebuf.
  
!    • Chip Salzenberg for libstdc++ patches and improvements to locales,
       traits, Makefiles, libio, libtool hackery, and "long long" support.
  
!    • Juha Sarlin for improvements to the H8 code generator.
  
!    • Greg Satz assisted in making GCC work on HP-UX for the 9000 series
       300.
  
!    • Roger Sayle for improvements to constant folding and GCC's RTL
       optimizers as well as for fixing numerous bugs.
  
!    • Bradley Schatz for his work on the GCJ FAQ.
  
!    • Peter Schauer wrote the code to allow debugging to work on the
       Alpha.
  
!    • William Schelter did most of the work on the Intel 80386 support.
  
!    • Tobias Schlüter for work on GNU Fortran.
  
!    • Bernd Schmidt for various code generation improvements and major
       work in the reload pass, serving as release manager for GCC 2.95.3,
       and work on the Blackfin and C6X ports.
  
!    • Peter Schmid for constant testing of libstdc++--especially
       application testing, going above and beyond what was requested for
       the release criteria--and libstdc++ header file tweaks.
  
!    • Jason Schroeder for jcf-dump patches.
  
!    • Andreas Schwab for his work on the m68k port.
  
!    • Lars Segerlund for work on GNU Fortran.
  
!    • Dodji Seketeli for numerous C++ bug fixes and debug info
       improvements.
  
!    • Tim Shen for major work on ‘<regex>’.
  
!    • Joel Sherrill for his direction via the steering committee, RTEMS
       contributions and RTEMS testing.
  
!    • Nathan Sidwell for many C++ fixes/improvements.
  
!    • Jeffrey Siegal for helping RMS with the original design of GCC,
       some code which handles the parse tree and RTL data structures,
       constant folding and help with the original VAX & m68k ports.
  
!    • Kenny Simpson for prompting libstdc++ fixes due to defect reports
       from the LWG (thereby keeping GCC in line with updates from the
       ISO).
  
!    • Franz Sirl for his ongoing work with making the PPC port stable for
       GNU/Linux.
  
!    • Andrey Slepuhin for assorted AIX hacking.
  
!    • Trevor Smigiel for contributing the SPU port.
  
!    • Christopher Smith did the port for Convex machines.
  
!    • Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
       Retired from GCC maintainership August 2010, having mentored two
       new maintainers into the role.
  
!    • Randy Smith finished the Sun FPA support.
  
!    • Ed Smith-Rowland for his continuous work on libstdc++-v3, special
!      functions, ‘<random>’, and various improvements to C++11 features.
  
!    • Scott Snyder for queue, iterator, istream, and string fixes and
       libstdc++ testsuite entries.  Also for providing the patch to G77
!      to add rudimentary support for ‘INTEGER*1’, ‘INTEGER*2’, and
!      ‘LOGICAL*1’.
  
!    • Zdenek Sojka for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Arseny Solokha for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Jayant Sonar for contributing the CR16 port.
  
!    • Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
  
!    • Richard Stallman, for writing the original GCC and launching the
       GNU project.
  
!    • Jan Stein of the Chalmers Computer Society provided support for
       Genix, as well as part of the 32000 machine description.
  
!    • Gerhard Steinmetz for running automated regression testing of GCC
       and reporting numerous bugs.
  
!    • Nigel Stephens for various mips16 related fixes/improvements.
  
!    • Jonathan Stone wrote the machine description for the Pyramid
       computer.
  
!    • Graham Stott for various infrastructure improvements.
  
!    • John Stracke for his Java HTTP protocol fixes.
  
!    • Mike Stump for his Elxsi port, G++ contributions over the years and
       more recently his vxworks contributions
  
!    • Jeff Sturm for Java porting help, bug fixes, and encouragement.
  
!    • Zhendong Su for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Chengnian Sun for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Shigeya Suzuki for this fixes for the bsdi platforms.
  
!    • Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
       support, general configury hacking, fixincludes, etc.
  
!    • Holger Teutsch provided the support for the Clipper CPU.
  
!    • Gary Thomas for his ongoing work to make the PPC work for
       GNU/Linux.
  
!    • Paul Thomas for contributions to GNU Fortran.
  
!    • Philipp Thomas for random bug fixes throughout the compiler
  
!    • Jason Thorpe for thread support in libstdc++ on NetBSD.
  
!    • Kresten Krab Thorup wrote the run time support for the Objective-C
       language and the fantastic Java bytecode interpreter.
  
!    • Michael Tiemann for random bug fixes, the first instruction
       scheduler, initial C++ support, function integration, NS32k, SPARC
       and M88k machine description work, delay slot scheduling.
  
!    • Andreas Tobler for his work porting libgcj to Darwin.
  
!    • Teemu Torma for thread safe exception handling support.
  
!    • Leonard Tower wrote parts of the parser, RTL generator, and RTL
       definitions, and of the VAX machine description.
  
!    • Daniel Towner and Hariharan Sandanagobalane contributed and
       maintain the picoChip port.
  
!    • Tom Tromey for internationalization support and for his many Java
       contributions and libgcj maintainership.
  
!    • Lassi Tuura for improvements to config.guess to determine HP
       processor types.
  
!    • Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
  
!    • Andy Vaught for the design and initial implementation of the GNU
       Fortran front end.
  
!    • Brent Verner for work with the libstdc++ cshadow files and their
       associated configure steps.
  
!    • Todd Vierling for contributions for NetBSD ports.
  
!    • Andrew Waterman for contributing the RISC-V port, as well as
       maintaining it.
  
!    • Jonathan Wakely for contributing to and maintaining libstdc++.
  
!    • Dean Wakerley for converting the install documentation from HTML to
       texinfo in time for GCC 3.0.
  
!    • Krister Walfridsson for random bug fixes.
  
!    • Feng Wang for contributions to GNU Fortran.
  
!    • Stephen M. Webb for time and effort on making libstdc++ shadow
       files work with the tricky Solaris 8+ headers, and for pushing the
       build-time header tree.  Also, for starting and driving the
!      ‘<regex>’ effort.
  
!    • John Wehle for various improvements for the x86 code generator,
       related infrastructure improvements to help x86 code generation,
       value range propagation and other work, WE32k port.
  
!    • Ulrich Weigand for work on the s390 port.
  
!    • Janus Weil for contributions to GNU Fortran.
  
!    • Zack Weinberg for major work on cpplib and various other bug fixes.
  
!    • Matt Welsh for help with Linux Threads support in GCJ.
  
!    • Urban Widmark for help fixing java.io.
  
!    • Mark Wielaard for new Java library code and his work integrating
       with Classpath.
  
!    • Dale Wiles helped port GCC to the Tahoe.
  
!    • Bob Wilson from Tensilica, Inc. for the Xtensa port.
  
!    • Jim Wilson for his direction via the steering committee, tackling
       hard problems in various places that nobody else wanted to work on,
       strength reduction and other loop optimizations.
  
!    • Paul Woegerer and Tal Agmon for the CRX port.
  
!    • Carlo Wood for various fixes.
  
!    • Tom Wood for work on the m88k port.
  
!    • Chung-Ju Wu for his work on the Andes NDS32 port.
  
!    • Canqun Yang for work on GNU Fortran.
  
!    • Masanobu Yuhara of Fujitsu Laboratories implemented the machine
       description for the Tron architecture (specifically, the Gmicro).
  
!    • Kevin Zachmann helped port GCC to the Tahoe.
  
!    • Ayal Zaks for Swing Modulo Scheduling (SMS).
  
!    • Qirun Zhang for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Xiaoqiang Zhang for work on GNU Fortran.
  
!    • Gilles Zunino for help porting Java to Irix.
  
   The following people are recognized for their contributions to GNAT,
  the Ada front end of GCC:
!    • Bernard Banner
  
!    • Romain Berrendonner
  
!    • Geert Bosch
  
!    • Emmanuel Briot
  
!    • Joel Brobecker
  
!    • Ben Brosgol
  
!    • Vincent Celier
  
!    • Arnaud Charlet
  
!    • Chien Chieng
  
!    • Cyrille Comar
  
!    • Cyrille Crozes
  
!    • Robert Dewar
  
!    • Gary Dismukes
  
!    • Robert Duff
  
!    • Ed Falis
  
!    • Ramon Fernandez
  
!    • Sam Figueroa
  
!    • Vasiliy Fofanov
  
!    • Michael Friess
  
!    • Franco Gasperoni
  
!    • Ted Giering
  
!    • Matthew Gingell
  
!    • Laurent Guerby
  
!    • Jerome Guitton
  
!    • Olivier Hainque
  
!    • Jerome Hugues
  
!    • Hristian Kirtchev
  
!    • Jerome Lambourg
  
!    • Bruno Leclerc
  
!    • Albert Lee
  
!    • Sean McNeil
  
!    • Javier Miranda
  
!    • Laurent Nana
  
!    • Pascal Obry
  
!    • Dong-Ik Oh
  
!    • Laurent Pautet
  
!    • Brett Porter
  
!    • Thomas Quinot
  
!    • Nicolas Roche
  
!    • Pat Rogers
  
!    • Jose Ruiz
  
!    • Douglas Rupp
  
!    • Sergey Rybin
  
!    • Gail Schenker
  
!    • Ed Schonberg
  
!    • Nicolas Setton
  
!    • Samuel Tardieu
  
   The following people are recognized for their contributions of new
  features, bug reports, testing and integration of classpath/libgcj for
  GCC version 4.1:
!    • Lillian Angel for ‘JTree’ implementation and lots Free Swing
       additions and bug fixes.
  
!    • Wolfgang Baer for ‘GapContent’ bug fixes.
  
!    • Anthony Balkissoon for ‘JList’, Free Swing 1.5 updates and mouse
!      event fixes, lots of Free Swing work including ‘JTable’ editing.
  
!    • Stuart Ballard for RMI constant fixes.
  
!    • Goffredo Baroncelli for ‘HTTPURLConnection’ fixes.
  
!    • Gary Benson for ‘MessageFormat’ fixes.
  
!    • Daniel Bonniot for ‘Serialization’ fixes.
  
!    • Chris Burdess for lots of gnu.xml and http protocol fixes, ‘StAX’
!      and ‘DOM xml:id’ support.
  
!    • Ka-Hing Cheung for ‘TreePath’ and ‘TreeSelection’ fixes.
  
!    • Archie Cobbs for build fixes, VM interface updates,
!      ‘URLClassLoader’ updates.
  
!    • Kelley Cook for build fixes.
  
!    • Martin Cordova for Suggestions for better ‘SocketTimeoutException’.
  
!    • David Daney for ‘BitSet’ bug fixes, ‘HttpURLConnection’ rewrite and
       improvements.
  
!    • Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
       2D support.  Lots of imageio framework additions, lots of AWT and
       Free Swing bug fixes.
  
!    • Jeroen Frijters for ‘ClassLoader’ and nio cleanups, serialization
!      fixes, better ‘Proxy’ support, bug fixes and IKVM integration.
  
!    • Santiago Gala for ‘AccessControlContext’ fixes.
  
!    • Nicolas Geoffray for ‘VMClassLoader’ and ‘AccessController’
       improvements.
  
!    • David Gilbert for ‘basic’ and ‘metal’ icon and plaf support and
       lots of documenting, Lots of Free Swing and metal theme additions.
!      ‘MetalIconFactory’ implementation.
  
!    • Anthony Green for ‘MIDI’ framework, ‘ALSA’ and ‘DSSI’ providers.
  
!    • Andrew Haley for ‘Serialization’ and ‘URLClassLoader’ fixes, gcj
       build speedups.
  
!    • Kim Ho for ‘JFileChooser’ implementation.
  
!    • Andrew John Hughes for ‘Locale’ and net fixes, URI RFC2986 updates,
!      ‘Serialization’ fixes, ‘Properties’ XML support and generic branch
       work, VMIntegration guide update.
  
!    • Bastiaan Huisman for ‘TimeZone’ bug fixing.
  
!    • Andreas Jaeger for mprec updates.
  
!    • Paul Jenner for better ‘-Werror’ support.
  
!    • Ito Kazumitsu for ‘NetworkInterface’ implementation and updates.
  
!    • Roman Kennke for ‘BoxLayout’, ‘GrayFilter’ and ‘SplitPane’, plus
       bug fixes all over.  Lots of Free Swing work including styled text.
  
!    • Simon Kitching for ‘String’ cleanups and optimization suggestions.
  
!    • Michael Koch for configuration fixes, ‘Locale’ updates, bug and
       build fixes.
  
!    • Guilhem Lavaux for configuration, thread and channel fixes and
!      Kaffe integration.  JCL native ‘Pointer’ updates.  Logger bug
       fixes.
  
!    • David Lichteblau for JCL support library global/local reference
       cleanups.
  
!    • Aaron Luchko for JDWP updates and documentation fixes.
  
!    • Ziga Mahkovec for ‘Graphics2D’ upgraded to Cairo 0.5 and new regex
       features.
  
!    • Sven de Marothy for BMP imageio support, CSS and ‘TextLayout’
!      fixes.  ‘GtkImage’ rewrite, 2D, awt, free swing and date/time fixes
       and implementing the Qt4 peers.
  
!    • Casey Marshall for crypto algorithm fixes, ‘FileChannel’ lock,
!      ‘SystemLogger’ and ‘FileHandler’ rotate implementations, NIO
!      ‘FileChannel.map’ support, security and policy updates.
  
!    • Bryce McKinlay for RMI work.
  
!    • Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
       testing and documenting.
  
!    • Kalle Olavi Niemitalo for build fixes.
  
!    • Rainer Orth for build fixes.
  
!    • Andrew Overholt for ‘File’ locking fixes.
  
!    • Ingo Proetel for ‘Image’, ‘Logger’ and ‘URLClassLoader’ updates.
  
!    • Olga Rodimina for ‘MenuSelectionManager’ implementation.
  
!    • Jan Roehrich for ‘BasicTreeUI’ and ‘JTree’ fixes.
  
!    • Julian Scheid for documentation updates and gjdoc support.
  
!    • Christian Schlichtherle for zip fixes and cleanups.
  
!    • Robert Schuster for documentation updates and beans fixes,
!      ‘TreeNode’ enumerations and ‘ActionCommand’ and various fixes, XML
       and URL, AWT and Free Swing bug fixes.
  
!    • Keith Seitz for lots of JDWP work.
  
!    • Christian Thalinger for 64-bit cleanups, Configuration and VM
!      interface fixes and ‘CACAO’ integration, ‘fdlibm’ updates.
  
!    • Gael Thomas for ‘VMClassLoader’ boot packages support suggestions.
  
!    • Andreas Tobler for Darwin and Solaris testing and fixing, ‘Qt4’
!      support for Darwin / macOS, ‘Graphics2D’ support, ‘gtk+’ updates.
  
!    • Dalibor Topic for better ‘DEBUG’ support, build cleanups and Kaffe
!      integration.  ‘Qt4’ build infrastructure, ‘SHA1PRNG’ and
!      ‘GdkPixbugDecoder’ updates.
  
!    • Tom Tromey for Eclipse integration, generics work, lots of bug
       fixes and gcj integration including coordinating The Big Merge.
  
!    • Mark Wielaard for bug fixes, packaging and release management,
!      ‘Clipboard’ implementation, system call interrupts and network
!      timeouts and ‘GdkPixpufDecoder’ fixes.
  
   In addition to the above, all of which also contributed time and energy
  in testing GCC, we would like to thank the following for their
  contributions to testing:
  
!    • Michael Abd-El-Malek
  
!    • Thomas Arend
  
!    • Bonzo Armstrong
  
!    • Steven Ashe
  
!    • Chris Baldwin
  
!    • David Billinghurst
  
!    • Jim Blandy
  
!    • Stephane Bortzmeyer
  
!    • Horst von Brand
  
!    • Frank Braun
  
!    • Rodney Brown
  
!    • Sidney Cadot
  
!    • Bradford Castalia
  
!    • Robert Clark
  
!    • Jonathan Corbet
  
!    • Ralph Doncaster
  
!    • Richard Emberson
  
!    • Levente Farkas
  
!    • Graham Fawcett
  
!    • Mark Fernyhough
  
!    • Robert A. French
  
!    • Jörgen Freyh
  
!    • Mark K. Gardner
  
!    • Charles-Antoine Gauthier
  
!    • Yung Shing Gene
  
!    • David Gilbert
  
!    • Simon Gornall
  
!    • Fred Gray
  
!    • John Griffin
  
!    • Patrik Hagglund
  
!    • Phil Hargett
  
!    • Amancio Hasty
  
!    • Takafumi Hayashi
  
!    • Bryan W. Headley
  
!    • Kevin B. Hendricks
  
!    • Joep Jansen
  
!    • Christian Joensson
  
!    • Michel Kern
  
!    • David Kidd
  
!    • Tobias Kuipers
  
!    • Anand Krishnaswamy
  
!    • A. O. V. Le Blanc
  
!    • llewelly
  
!    • Damon Love
  
!    • Brad Lucier
  
!    • Matthias Klose
  
!    • Martin Knoblauch
  
!    • Rick Lutowski
  
!    • Jesse Macnish
  
!    • Stefan Morrell
  
!    • Anon A. Mous
  
!    • Matthias Mueller
  
!    • Pekka Nikander
  
!    • Rick Niles
  
!    • Jon Olson
  
!    • Magnus Persson
  
!    • Chris Pollard
  
!    • Richard Polton
  
!    • Derk Reefman
  
!    • David Rees
  
!    • Paul Reilly
  
!    • Tom Reilly
  
!    • Torsten Rueger
  
!    • Danny Sadinoff
  
!    • Marc Schifer
  
!    • Erik Schnetter
  
!    • Wayne K. Schroll
  
!    • David Schuler
  
!    • Vin Shelton
  
!    • Tim Souder
  
!    • Adam Sulmicki
  
!    • Bill Thorson
  
!    • George Talbot
  
!    • Pedro A. M. Vazquez
  
!    • Gregory Warnes
  
!    • Ian Watson
  
!    • David E. Young
  
!    • And many others
  
   And finally we'd like to thank everyone who uses the compiler, provides
  feedback and generally reminds us why we're doing this work in the first
*************** File: gcc.info,  Node: Option Index,  Ne
*** 70900,70922 ****
  A.1 Option Index
  ================
  
! GCC's command line options are indexed here without any initial '-' or
! '--'.  Where an option has both positive and negative forms (such as
! '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
  indexed under the most appropriate form; it may sometimes be useful to
  look up both forms.
  
  [index]
  * Menu:
  
- * ###:                                   Overall Options.    (line  473)
  * -fstrub=disable:                       Instrumentation Options.
                                                               (line 1046)
  * -minline-memops-threshold:             eBPF Options.       (line  106)
  * A:                                     Preprocessor Options.
                                                               (line  336)
- * allowable_client:                      Darwin Options.     (line  204)
  * all_load:                              Darwin Options.     (line  117)
  * analyzer:                              Static Analyzer Options.
                                                               (line    6)
  * ansi:                                  Standards.          (line   13)
--- 70911,70933 ----
  A.1 Option Index
  ================
  
! GCC's command line options are indexed here without any initial ‘-’ or
! ‘--’.  Where an option has both positive and negative forms (such as
! ‘-fOPTION’ and ‘-fno-OPTION’), relevant entries in the manual are
  indexed under the most appropriate form; it may sometimes be useful to
  look up both forms.
  
  [index]
  * Menu:
  
  * -fstrub=disable:                       Instrumentation Options.
                                                               (line 1046)
  * -minline-memops-threshold:             eBPF Options.       (line  106)
+ * ###:                                   Overall Options.    (line  477)
  * A:                                     Preprocessor Options.
                                                               (line  336)
  * all_load:                              Darwin Options.     (line  117)
+ * allowable_client:                      Darwin Options.     (line  204)
  * analyzer:                              Static Analyzer Options.
                                                               (line    6)
  * ansi:                                  Standards.          (line   13)
*************** look up both forms.
*** 70933,70939 ****
  * Bstatic:                               VxWorks Options.    (line   26)
  * bundle:                                Darwin Options.     (line  130)
  * bundle_loader:                         Darwin Options.     (line  134)
! * c:                                     Overall Options.    (line  166)
  * C:                                     Preprocessor Options.
                                                               (line  345)
  * c <1>:                                 Link Options.       (line   17)
--- 70944,70950 ----
  * Bstatic:                               VxWorks Options.    (line   26)
  * bundle:                                Darwin Options.     (line  130)
  * bundle_loader:                         Darwin Options.     (line  134)
! * c:                                     Overall Options.    (line  170)
  * C:                                     Preprocessor Options.
                                                               (line  345)
  * c <1>:                                 Link Options.       (line   17)
*************** look up both forms.
*** 70977,70985 ****
                                                               (line 1016)
  * dump-analyzer-infinite-loop:           Static Analyzer Options.
                                                               (line 1022)
! * dumpbase:                              Overall Options.    (line  253)
! * dumpbase-ext:                          Overall Options.    (line  326)
! * dumpdir:                               Overall Options.    (line  354)
  * dumpfullversion:                       Developer Options.  (line 1130)
  * dumpmachine:                           Developer Options.  (line 1118)
  * dumpspecs:                             Developer Options.  (line 1135)
--- 70988,70996 ----
                                                               (line 1016)
  * dump-analyzer-infinite-loop:           Static Analyzer Options.
                                                               (line 1022)
! * dumpbase:                              Overall Options.    (line  257)
! * dumpbase-ext:                          Overall Options.    (line  330)
! * dumpdir:                               Overall Options.    (line  358)
  * dumpfullversion:                       Developer Options.  (line 1130)
  * dumpmachine:                           Developer Options.  (line 1118)
  * dumpspecs:                             Developer Options.  (line 1135)
*************** look up both forms.
*** 70989,71001 ****
  * dylinker_install_name:                 Darwin Options.     (line  204)
  * dynamic:                               Darwin Options.     (line  204)
  * dynamiclib:                            Darwin Options.     (line  138)
! * E:                                     Overall Options.    (line  187)
  * E <1>:                                 Link Options.       (line   17)
  * e:                                     Link Options.       (line  173)
! * EB:                                    ARC Options.        (line  601)
  * EB <1>:                                C-SKY Options.      (line   27)
  * EB <2>:                                MIPS Options.       (line    6)
! * EL:                                    ARC Options.        (line  610)
  * EL <1>:                                C-SKY Options.      (line   27)
  * EL <2>:                                MIPS Options.       (line    9)
  * entry:                                 Link Options.       (line  173)
--- 71000,71012 ----
  * dylinker_install_name:                 Darwin Options.     (line  204)
  * dynamic:                               Darwin Options.     (line  204)
  * dynamiclib:                            Darwin Options.     (line  138)
! * E:                                     Overall Options.    (line  191)
  * E <1>:                                 Link Options.       (line   17)
  * e:                                     Link Options.       (line  173)
! * EB:                                    ARC Options.        (line  599)
  * EB <1>:                                C-SKY Options.      (line   27)
  * EB <2>:                                MIPS Options.       (line    6)
! * EL:                                    ARC Options.        (line  606)
  * EL <1>:                                C-SKY Options.      (line   27)
  * EL <2>:                                MIPS Options.       (line    9)
  * entry:                                 Link Options.       (line  173)
*************** look up both forms.
*** 71007,71013 ****
                                                               (line   23)
  * faccess-control:                       C++ Dialect Options.
                                                               (line  120)
! * fada-spec-parent:                      Overall Options.    (line  668)
  * faggressive-loop-optimizations:        Optimize Options.   (line  567)
  * falign-functions:                      Optimize Options.   (line 1766)
  * falign-jumps:                          Optimize Options.   (line 1852)
--- 71018,71024 ----
                                                               (line   23)
  * faccess-control:                       C++ Dialect Options.
                                                               (line  120)
! * fada-spec-parent:                      Overall Options.    (line  672)
  * faggressive-loop-optimizations:        Optimize Options.   (line  567)
  * falign-functions:                      Optimize Options.   (line 1766)
  * falign-jumps:                          Optimize Options.   (line 1852)
*************** look up both forms.
*** 71057,71063 ****
  * fcall-used:                            Code Gen Options.   (line  442)
  * fcaller-saves:                         Optimize Options.   (line  948)
  * fcallgraph-info:                       Developer Options.  (line   32)
! * fcanon-prefix-map:                     Overall Options.    (line  642)
  * fcf-protection:                        Instrumentation Options.
                                                               (line  771)
  * fchar8_t:                              C++ Dialect Options.
--- 71068,71074 ----
  * fcall-used:                            Code Gen Options.   (line  442)
  * fcaller-saves:                         Optimize Options.   (line  948)
  * fcallgraph-info:                       Developer Options.  (line   32)
! * fcanon-prefix-map:                     Overall Options.    (line  646)
  * fcf-protection:                        Instrumentation Options.
                                                               (line  771)
  * fchar8_t:                              C++ Dialect Options.
*************** look up both forms.
*** 71129,71138 ****
  * fdelayed-branch:                       Optimize Options.   (line  772)
  * fdelete-dead-exceptions:               Code Gen Options.   (line  141)
  * fdelete-null-pointer-checks:           Optimize Options.   (line  629)
! * fdeps-:                                C Dialect Options.  (line  479)
! * fdeps-file:                            C Dialect Options.  (line  488)
! * fdeps-format:                          C Dialect Options.  (line  491)
! * fdeps-target:                          C Dialect Options.  (line  498)
  * fdevirtualize:                         Optimize Options.   (line  650)
  * fdevirtualize-at-ltrans:               Optimize Options.   (line  667)
  * fdevirtualize-speculatively:           Optimize Options.   (line  657)
--- 71140,71149 ----
  * fdelayed-branch:                       Optimize Options.   (line  772)
  * fdelete-dead-exceptions:               Code Gen Options.   (line  141)
  * fdelete-null-pointer-checks:           Optimize Options.   (line  629)
! * fdeps-:                                C Dialect Options.  (line  477)
! * fdeps-file:                            C Dialect Options.  (line  486)
! * fdeps-format:                          C Dialect Options.  (line  489)
! * fdeps-target:                          C Dialect Options.  (line  496)
  * fdevirtualize:                         Optimize Options.   (line  650)
  * fdevirtualize-at-ltrans:               Optimize Options.   (line  667)
  * fdevirtualize-speculatively:           Optimize Options.   (line  657)
*************** look up both forms.
*** 71188,71194 ****
  * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
  * fdpic:                                 SH Options.         (line  387)
  * fdse:                                  Optimize Options.   (line  599)
! * fdump-ada-spec:                        Overall Options.    (line  663)
  * fdump-analyzer:                        Static Analyzer Options.
                                                               (line  981)
  * fdump-analyzer-callgraph:              Static Analyzer Options.
--- 71199,71205 ----
  * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
  * fdpic:                                 SH Options.         (line  387)
  * fdse:                                  Optimize Options.   (line  599)
! * fdump-ada-spec:                        Overall Options.    (line  667)
  * fdump-analyzer:                        Static Analyzer Options.
                                                               (line  981)
  * fdump-analyzer-callgraph:              Static Analyzer Options.
*************** look up both forms.
*** 71210,71216 ****
  * fdump-debug:                           Developer Options.  (line  272)
  * fdump-earlydebug:                      Developer Options.  (line  276)
  * fdump-final-insns:                     Developer Options.  (line  861)
! * fdump-go-spec:                         Overall Options.    (line  672)
  * fdump-ipa:                             Developer Options.  (line  301)
  * fdump-ipa-clones:                      Developer Options.  (line  340)
  * fdump-lang:                            Developer Options.  (line  411)
--- 71221,71227 ----
  * fdump-debug:                           Developer Options.  (line  272)
  * fdump-earlydebug:                      Developer Options.  (line  276)
  * fdump-final-insns:                     Developer Options.  (line  861)
! * fdump-go-spec:                         Overall Options.    (line  676)
  * fdump-ipa:                             Developer Options.  (line  301)
  * fdump-ipa-clones:                      Developer Options.  (line  340)
  * fdump-lang:                            Developer Options.  (line  411)
*************** look up both forms.
*** 71319,71325 ****
                                                               (line  337)
  * ffast-math:                            Optimize Options.   (line 2397)
  * ffat-lto-objects:                      Optimize Options.   (line 2219)
! * ffile-prefix-map:                      Overall Options.    (line  631)
  * ffinite-loops:                         Optimize Options.   (line 1237)
  * ffinite-math-only:                     Optimize Options.   (line 2474)
  * ffix-and-continue:                     Darwin Options.     (line  109)
--- 71330,71336 ----
                                                               (line  337)
  * ffast-math:                            Optimize Options.   (line 2397)
  * ffat-lto-objects:                      Optimize Options.   (line 2219)
! * ffile-prefix-map:                      Overall Options.    (line  635)
  * ffinite-loops:                         Optimize Options.   (line 1237)
  * ffinite-math-only:                     Optimize Options.   (line 2474)
  * ffix-and-continue:                     Darwin Options.     (line  109)
*************** look up both forms.
*** 71653,71668 ****
                                                               (line   65)
  * fno-show-column:                       Diagnostic Message Formatting Options.
                                                               (line  432)
! * fno-signed-bitfields:                  C Dialect Options.  (line  514)
  * fno-signed-zeros:                      Optimize Options.   (line 2486)
  * fno-stack-limit:                       Instrumentation Options.
                                                               (line 1009)
! * fno-strict-flex-arrays:                C Dialect Options.  (line  548)
  * fno-threadsafe-statics:                C++ Dialect Options.
                                                               (line  577)
  * fno-toplevel-reorder:                  Optimize Options.   (line 1907)
  * fno-trapping-math:                     Optimize Options.   (line 2496)
! * fno-unsigned-bitfields:                C Dialect Options.  (line  514)
  * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                               (line  590)
  * fno-var-tracking-assignments:          Debugging Options.  (line  168)
--- 71664,71679 ----
                                                               (line   65)
  * fno-show-column:                       Diagnostic Message Formatting Options.
                                                               (line  432)
! * fno-signed-bitfields:                  C Dialect Options.  (line  512)
  * fno-signed-zeros:                      Optimize Options.   (line 2486)
  * fno-stack-limit:                       Instrumentation Options.
                                                               (line 1009)
! * fno-strict-flex-arrays:                C Dialect Options.  (line  546)
  * fno-threadsafe-statics:                C++ Dialect Options.
                                                               (line  577)
  * fno-toplevel-reorder:                  Optimize Options.   (line 1907)
  * fno-trapping-math:                     Optimize Options.   (line 2496)
! * fno-unsigned-bitfields:                C Dialect Options.  (line  512)
  * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                               (line  590)
  * fno-var-tracking-assignments:          Debugging Options.  (line  168)
*************** look up both forms.
*** 71697,71706 ****
  * foffload-options:                      C Dialect Options.  (line  382)
  * fomit-frame-pointer:                   Optimize Options.   (line  256)
  * fopenacc:                              C Dialect Options.  (line  397)
! * fopenacc-dim:                          C Dialect Options.  (line  407)
! * fopenmp:                               C Dialect Options.  (line  413)
! * fopenmp-simd:                          C Dialect Options.  (line  426)
! * fopenmp-target-simd-clone:             C Dialect Options.  (line  439)
  * foperator-names:                       C++ Dialect Options.
                                                               (line  500)
  * fopt-info:                             Developer Options.  (line  564)
--- 71708,71717 ----
  * foffload-options:                      C Dialect Options.  (line  382)
  * fomit-frame-pointer:                   Optimize Options.   (line  256)
  * fopenacc:                              C Dialect Options.  (line  397)
! * fopenacc-dim:                          C Dialect Options.  (line  406)
! * fopenmp:                               C Dialect Options.  (line  412)
! * fopenmp-simd:                          C Dialect Options.  (line  424)
! * fopenmp-target-simd-clone:             C Dialect Options.  (line  437)
  * foperator-names:                       C++ Dialect Options.
                                                               (line  500)
  * fopt-info:                             Developer Options.  (line  564)
*************** look up both forms.
*** 71724,71741 ****
  * fpeephole:                             Optimize Options.   (line 1631)
  * fpeephole2:                            Optimize Options.   (line 1631)
  * fpermissive:                           Warning Options.    (line  170)
! * fpermitted-flt-eval-methods:           C Dialect Options.  (line  457)
! * fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  457)
! * fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  457)
  * fpic:                                  Code Gen Options.   (line  357)
  * fPIC:                                  Code Gen Options.   (line  378)
  * fpie:                                  Code Gen Options.   (line  390)
  * fPIE:                                  Code Gen Options.   (line  390)
! * fplan9-extensions:                     C Dialect Options.  (line  504)
  * fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
  * fplt:                                  Code Gen Options.   (line  400)
! * fplugin:                               Overall Options.    (line  652)
! * fplugin-arg:                           Overall Options.    (line  659)
  * fpost-ipa-mem-report:                  Developer Options.  (line  965)
  * fpre-ipa-mem-report:                   Developer Options.  (line  965)
  * fpredictive-commoning:                 Optimize Options.   (line 1591)
--- 71735,71752 ----
  * fpeephole:                             Optimize Options.   (line 1631)
  * fpeephole2:                            Optimize Options.   (line 1631)
  * fpermissive:                           Warning Options.    (line  170)
! * fpermitted-flt-eval-methods:           C Dialect Options.  (line  455)
! * fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  455)
! * fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  455)
  * fpic:                                  Code Gen Options.   (line  357)
  * fPIC:                                  Code Gen Options.   (line  378)
  * fpie:                                  Code Gen Options.   (line  390)
  * fPIE:                                  Code Gen Options.   (line  390)
! * fplan9-extensions:                     C Dialect Options.  (line  502)
  * fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
  * fplt:                                  Code Gen Options.   (line  400)
! * fplugin:                               Overall Options.    (line  656)
! * fplugin-arg:                           Overall Options.    (line  663)
  * fpost-ipa-mem-report:                  Developer Options.  (line  965)
  * fpre-ipa-mem-report:                   Developer Options.  (line  965)
  * fpredictive-commoning:                 Optimize Options.   (line 1591)
*************** look up both forms.
*** 71912,71920 ****
  * fshrink-wrap:                          Optimize Options.   (line  937)
  * fshrink-wrap-separate:                 Optimize Options.   (line  942)
  * fsignaling-nans:                       Optimize Options.   (line 2537)
! * fsigned-bitfields:                     C Dialect Options.  (line  514)
  * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
! * fsigned-char:                          C Dialect Options.  (line  523)
  * fsigned-char <1>:                      Characters implementation.
                                                               (line   31)
  * fsigned-zeros:                         Optimize Options.   (line 2486)
--- 71923,71931 ----
  * fshrink-wrap:                          Optimize Options.   (line  937)
  * fshrink-wrap-separate:                 Optimize Options.   (line  942)
  * fsignaling-nans:                       Optimize Options.   (line 2537)
! * fsigned-bitfields:                     C Dialect Options.  (line  512)
  * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
! * fsigned-char:                          C Dialect Options.  (line  521)
  * fsigned-char <1>:                      Characters implementation.
                                                               (line   31)
  * fsigned-zeros:                         Optimize Options.   (line 2486)
*************** look up both forms.
*** 71933,71939 ****
  * fsplit-wide-types-early:               Optimize Options.   (line  495)
  * fssa-backprop:                         Optimize Options.   (line 1203)
  * fssa-phiopt:                           Optimize Options.   (line 1209)
! * fsso-struct:                           C Dialect Options.  (line  575)
  * fstack-check:                          Instrumentation Options.
                                                               (line  954)
  * fstack-clash-protection:               Instrumentation Options.
--- 71944,71951 ----
  * fsplit-wide-types-early:               Optimize Options.   (line  495)
  * fssa-backprop:                         Optimize Options.   (line 1203)
  * fssa-phiopt:                           Optimize Options.   (line 1209)
! * fsso-struct:                           C Dialect Options.  (line  573)
! * fstack_reuse:                          Code Gen Options.   (line   14)
  * fstack-check:                          Instrumentation Options.
                                                               (line  954)
  * fstack-clash-protection:               Instrumentation Options.
*************** look up both forms.
*** 71951,71967 ****
  * fstack-protector-strong:               Instrumentation Options.
                                                               (line  943)
  * fstack-usage:                          Developer Options.  (line 1002)
- * fstack_reuse:                          Code Gen Options.   (line   14)
  * fstats:                                Developer Options.  (line 1031)
  * fstdarg-opt:                           Optimize Options.   (line 2775)
  * fstore-merging:                        Optimize Options.   (line 1427)
  * fstrict-aliasing:                      Optimize Options.   (line 1711)
  * fstrict-enums:                         C++ Dialect Options.
                                                               (line  546)
! * fstrict-flex-arrays:                   C Dialect Options.  (line  548)
! * fstrict-flex-arrays=LEVEL:             C Dialect Options.  (line  548)
  * fstrict-overflow:                      Code Gen Options.   (line  114)
! * fstrict-volatile-bitfields:            Code Gen Options.   (line  615)
  * fstrong-eval-order:                    C++ Dialect Options.
                                                               (line  556)
  * fstrub=all:                            Instrumentation Options.
--- 71963,71978 ----
  * fstack-protector-strong:               Instrumentation Options.
                                                               (line  943)
  * fstack-usage:                          Developer Options.  (line 1002)
  * fstats:                                Developer Options.  (line 1031)
  * fstdarg-opt:                           Optimize Options.   (line 2775)
  * fstore-merging:                        Optimize Options.   (line 1427)
  * fstrict-aliasing:                      Optimize Options.   (line 1711)
  * fstrict-enums:                         C++ Dialect Options.
                                                               (line  546)
! * fstrict-flex-arrays:                   C Dialect Options.  (line  546)
! * fstrict-flex-arrays=LEVEL:             C Dialect Options.  (line  546)
  * fstrict-overflow:                      Code Gen Options.   (line  114)
! * fstrict-volatile-bitfields:            Code Gen Options.   (line  614)
  * fstrong-eval-order:                    C++ Dialect Options.
                                                               (line  556)
  * fstrub=all:                            Instrumentation Options.
*************** look up both forms.
*** 71974,71980 ****
                                                               (line 1057)
  * fstrub=strict:                         Instrumentation Options.
                                                               (line 1050)
! * fsync-libcalls:                        Code Gen Options.   (line  647)
  * fsyntax-only:                          Warning Options.    (line   13)
  * ftabstop:                              Preprocessor Options.
                                                               (line  240)
--- 71985,71991 ----
                                                               (line 1057)
  * fstrub=strict:                         Instrumentation Options.
                                                               (line 1050)
! * fsync-libcalls:                        Code Gen Options.   (line  646)
  * fsyntax-only:                          Warning Options.    (line   13)
  * ftabstop:                              Preprocessor Options.
                                                               (line  240)
*************** look up both forms.
*** 72040,72050 ****
  * funroll-all-loops:                     Optimize Options.   (line 2684)
  * funroll-loops:                         Optimize Options.   (line 2674)
  * funsafe-math-optimizations:            Optimize Options.   (line 2429)
! * funsigned-bitfields:                   C Dialect Options.  (line  514)
  * funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
                                                               (line   17)
  * funsigned-bitfields <2>:               Non-bugs.           (line   57)
! * funsigned-char:                        C Dialect Options.  (line  530)
  * funsigned-char <1>:                    Characters implementation.
                                                               (line   31)
  * funswitch-loops:                       Optimize Options.   (line 2716)
--- 72051,72061 ----
  * funroll-all-loops:                     Optimize Options.   (line 2684)
  * funroll-loops:                         Optimize Options.   (line 2674)
  * funsafe-math-optimizations:            Optimize Options.   (line 2429)
! * funsigned-bitfields:                   C Dialect Options.  (line  512)
  * funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
                                                               (line   17)
  * funsigned-bitfields <2>:               Non-bugs.           (line   57)
! * funsigned-char:                        C Dialect Options.  (line  528)
  * funsigned-char <1>:                    Characters implementation.
                                                               (line   31)
  * funswitch-loops:                       Optimize Options.   (line 2716)
*************** look up both forms.
*** 72094,72100 ****
  * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
                                                               (line  141)
  * g:                                     Debugging Options.  (line   27)
! * G:                                     ARC Options.        (line  423)
  * G <1>:                                 M32R/D Options.     (line   56)
  * G <2>:                                 MIPS Options.       (line  465)
  * G <3>:                                 Nios II Options.    (line    8)
--- 72105,72111 ----
  * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
                                                               (line  141)
  * g:                                     Debugging Options.  (line   27)
! * G:                                     ARC Options.        (line  421)
  * G <1>:                                 M32R/D Options.     (line   56)
  * G <2>:                                 MIPS Options.       (line  465)
  * G <3>:                                 Nios II Options.    (line    8)
*************** look up both forms.
*** 72140,72146 ****
  * H:                                     Preprocessor Options.
                                                               (line  404)
  * headerpad_max_install_names:           Darwin Options.     (line  204)
! * help:                                  Overall Options.    (line  479)
  * I:                                     Directory Options.  (line    9)
  * I-:                                    Directory Options.  (line   64)
  * idirafter:                             Directory Options.  (line    9)
--- 72151,72157 ----
  * H:                                     Preprocessor Options.
                                                               (line  404)
  * headerpad_max_install_names:           Darwin Options.     (line  204)
! * help:                                  Overall Options.    (line  483)
  * I:                                     Directory Options.  (line    9)
  * I-:                                    Directory Options.  (line   64)
  * idirafter:                             Directory Options.  (line    9)
*************** look up both forms.
*** 72168,72176 ****
                                                               (line   76)
  * m1:                                    SH Options.         (line    8)
  * m10:                                   PDP-11 Options.     (line   28)
! * m128bit-long-double:                   x86 Options.        (line  784)
! * m16:                                   x86 Options.        (line 1743)
! * m16-bit:                               CRIS Options.       (line   60)
  * m16-bit <1>:                           NDS32 Options.      (line   50)
  * m1reg-:                                Adapteva Epiphany Options.
                                                               (line  130)
--- 72179,72187 ----
                                                               (line   76)
  * m1:                                    SH Options.         (line    8)
  * m10:                                   PDP-11 Options.     (line   28)
! * m128bit-long-double:                   x86 Options.        (line  783)
! * m16:                                   x86 Options.        (line 1742)
! * m16-bit:                               CRIS Options.       (line   59)
  * m16-bit <1>:                           NDS32 Options.      (line   50)
  * m1reg-:                                Adapteva Epiphany Options.
                                                               (line  130)
*************** look up both forms.
*** 72186,72201 ****
  * m32:                                   RS/6000 and PowerPC Options.
                                                               (line  235)
  * m32 <1>:                               SPARC Options.      (line  313)
! * m32 <2>:                               x86 Options.        (line 1743)
! * m32-bit:                               CRIS Options.       (line   60)
  * m32bit-doubles:                        RL78 Options.       (line   71)
  * m32bit-doubles <1>:                    RX Options.         (line    8)
  * m32r:                                  M32R/D Options.     (line   14)
  * m32r2:                                 M32R/D Options.     (line    8)
  * m32rx:                                 M32R/D Options.     (line   11)
  * m340:                                  MCore Options.      (line   41)
! * m3dnow:                                x86 Options.        (line 1017)
! * m3dnowa:                               x86 Options.        (line 1018)
  * m3e:                                   SH Options.         (line   36)
  * m4:                                    SH Options.         (line   50)
  * m4-100:                                SH Options.         (line   53)
--- 72197,72212 ----
  * m32:                                   RS/6000 and PowerPC Options.
                                                               (line  235)
  * m32 <1>:                               SPARC Options.      (line  313)
! * m32 <2>:                               x86 Options.        (line 1742)
! * m32-bit:                               CRIS Options.       (line   59)
  * m32bit-doubles:                        RL78 Options.       (line   71)
  * m32bit-doubles <1>:                    RX Options.         (line    8)
  * m32r:                                  M32R/D Options.     (line   14)
  * m32r2:                                 M32R/D Options.     (line    8)
  * m32rx:                                 M32R/D Options.     (line   11)
  * m340:                                  MCore Options.      (line   41)
! * m3dnow:                                x86 Options.        (line 1016)
! * m3dnowa:                               x86 Options.        (line 1017)
  * m3e:                                   SH Options.         (line   36)
  * m4:                                    SH Options.         (line   50)
  * m4-100:                                SH Options.         (line   53)
*************** look up both forms.
*** 72234,72240 ****
  * m64 <2>:                               S/390 and zSeries Options.
                                                               (line   84)
  * m64 <3>:                               SPARC Options.      (line  313)
! * m64 <4>:                               x86 Options.        (line 1743)
  * m64bit-doubles:                        RL78 Options.       (line   71)
  * m64bit-doubles <1>:                    RX Options.         (line    8)
  * m68000:                                M680x0 Options.     (line   92)
--- 72245,72251 ----
  * m64 <2>:                               S/390 and zSeries Options.
                                                               (line   84)
  * m64 <3>:                               SPARC Options.      (line  313)
! * m64 <4>:                               x86 Options.        (line 1742)
  * m64bit-doubles:                        RL78 Options.       (line   71)
  * m64bit-doubles <1>:                    RX Options.         (line    8)
  * m68000:                                M680x0 Options.     (line   92)
*************** look up both forms.
*** 72246,72256 ****
  * m68040:                                M680x0 Options.     (line  117)
  * m68060:                                M680x0 Options.     (line  126)
  * m68881:                                M680x0 Options.     (line  193)
! * m8-bit:                                CRIS Options.       (line   60)
! * m80387:                                x86 Options.        (line  732)
! * m8bit-idiv:                            x86 Options.        (line 1635)
  * m8byte-align:                          V850 Options.       (line  168)
! * m96bit-long-double:                    x86 Options.        (line  784)
  * mA6:                                   ARC Options.        (line   23)
  * mA7:                                   ARC Options.        (line   29)
  * mabi:                                  AArch64 Options.    (line    8)
--- 72257,72267 ----
  * m68040:                                M680x0 Options.     (line  117)
  * m68060:                                M680x0 Options.     (line  126)
  * m68881:                                M680x0 Options.     (line  193)
! * m8-bit:                                CRIS Options.       (line   59)
! * m80387:                                x86 Options.        (line  731)
! * m8bit-idiv:                            x86 Options.        (line 1634)
  * m8byte-align:                          V850 Options.       (line  168)
! * m96bit-long-double:                    x86 Options.        (line  783)
  * mA6:                                   ARC Options.        (line   23)
  * mA7:                                   ARC Options.        (line   29)
  * mabi:                                  AArch64 Options.    (line    8)
*************** look up both forms.
*** 72261,72267 ****
  * mabi <5>:                              RISC-V Options.     (line   16)
  * mabi <6>:                              RS/6000 and PowerPC Options.
                                                               (line  543)
! * mabi <7>:                              x86 Options.        (line 1319)
  * mabi <8>:                              Xtensa Options.     (line  102)
  * mabi=call0:                            Xtensa Options.     (line  107)
  * mabi=elfv1:                            RS/6000 and PowerPC Options.
--- 72272,72278 ----
  * mabi <5>:                              RISC-V Options.     (line   16)
  * mabi <6>:                              RS/6000 and PowerPC Options.
                                                               (line  543)
! * mabi <7>:                              x86 Options.        (line 1318)
  * mabi <8>:                              Xtensa Options.     (line  102)
  * mabi=call0:                            Xtensa Options.     (line  107)
  * mabi=elfv1:                            RS/6000 and PowerPC Options.
*************** look up both forms.
*** 72276,72298 ****
  * mabi=mmixware:                         MMIX Options.       (line   18)
  * mabi=windowed:                         Xtensa Options.     (line  114)
  * mabicalls:                             MIPS Options.       (line  196)
! * mabm:                                  x86 Options.        (line 1020)
  * mabort-on-noreturn:                    ARM Options.        (line  779)
  * mabs=2008:                             MIPS Options.       (line  304)
  * mabs=legacy:                           MIPS Options.       (line  304)
! * mabsdata:                              AVR Options.        (line  191)
  * mac0:                                  PDP-11 Options.     (line   15)
  * macc-4:                                FRV Options.        (line  138)
  * macc-8:                                FRV Options.        (line  142)
! * maccumulate-args:                      AVR Options.        (line  198)
  * maccumulate-outgoing-args:             SH Options.         (line  313)
! * maccumulate-outgoing-args <1>:         x86 Options.        (line 1373)
! * maddress-mode=long:                    x86 Options.        (line 1797)
! * maddress-mode=short:                   x86 Options.        (line 1802)
  * mads:                                  RS/6000 and PowerPC Options.
                                                               (line  605)
! * madx:                                  x86 Options.        (line 1021)
! * maes:                                  x86 Options.        (line  998)
  * maix-struct-return:                    RS/6000 and PowerPC Options.
                                                               (line  536)
  * maix32:                                RS/6000 and PowerPC Options.
--- 72287,72309 ----
  * mabi=mmixware:                         MMIX Options.       (line   18)
  * mabi=windowed:                         Xtensa Options.     (line  114)
  * mabicalls:                             MIPS Options.       (line  196)
! * mabm:                                  x86 Options.        (line 1019)
  * mabort-on-noreturn:                    ARM Options.        (line  779)
  * mabs=2008:                             MIPS Options.       (line  304)
  * mabs=legacy:                           MIPS Options.       (line  304)
! * mabsdata:                              AVR Options.        (line  194)
  * mac0:                                  PDP-11 Options.     (line   15)
  * macc-4:                                FRV Options.        (line  138)
  * macc-8:                                FRV Options.        (line  142)
! * maccumulate-args:                      AVR Options.        (line  201)
  * maccumulate-outgoing-args:             SH Options.         (line  313)
! * maccumulate-outgoing-args <1>:         x86 Options.        (line 1372)
! * maddress-mode=long:                    x86 Options.        (line 1796)
! * maddress-mode=short:                   x86 Options.        (line 1801)
  * mads:                                  RS/6000 and PowerPC Options.
                                                               (line  605)
! * madx:                                  x86 Options.        (line 1020)
! * maes:                                  x86 Options.        (line  997)
  * maix-struct-return:                    RS/6000 and PowerPC Options.
                                                               (line  536)
  * maix32:                                RS/6000 and PowerPC Options.
*************** look up both forms.
*** 72300,72309 ****
  * maix64:                                RS/6000 and PowerPC Options.
                                                               (line  273)
  * malign-300:                            H8/300 Options.     (line   40)
! * malign-call:                           ARC Options.        (line  442)
  * malign-data:                           RISC-V Options.     (line  499)
! * malign-data <1>:                       x86 Options.        (line  825)
! * malign-double:                         x86 Options.        (line  769)
  * malign-int:                            M680x0 Options.     (line  260)
  * malign-labels:                         FRV Options.        (line  127)
  * malign-loops:                          M32R/D Options.     (line   72)
--- 72311,72320 ----
  * maix64:                                RS/6000 and PowerPC Options.
                                                               (line  273)
  * malign-300:                            H8/300 Options.     (line   40)
! * malign-call:                           ARC Options.        (line  440)
  * malign-data:                           RISC-V Options.     (line  499)
! * malign-data <1>:                       x86 Options.        (line  824)
! * malign-double:                         x86 Options.        (line  768)
  * malign-int:                            M680x0 Options.     (line  260)
  * malign-labels:                         FRV Options.        (line  127)
  * malign-loops:                          M32R/D Options.     (line   72)
*************** look up both forms.
*** 72311,72317 ****
                                                               (line  311)
  * malign-power:                          RS/6000 and PowerPC Options.
                                                               (line  311)
! * malign-stringops:                      x86 Options.        (line 1509)
  * malloc-cc:                             FRV Options.        (line   30)
  * mallow-string-insns:                   RX Options.         (line  148)
  * mallregs:                              RL78 Options.       (line   65)
--- 72322,72328 ----
                                                               (line  311)
  * malign-power:                          RS/6000 and PowerPC Options.
                                                               (line  311)
! * malign-stringops:                      x86 Options.        (line 1508)
  * malloc-cc:                             FRV Options.        (line   30)
  * mallow-string-insns:                   RX Options.         (line  148)
  * mallregs:                              RL78 Options.       (line   65)
*************** look up both forms.
*** 72321,72331 ****
  * mam33:                                 MN10300 Options.    (line   16)
  * mam33-2:                               MN10300 Options.    (line   23)
  * mam34:                                 MN10300 Options.    (line   26)
! * mamx-bf16:                             x86 Options.        (line 1059)
! * mamx-complex:                          x86 Options.        (line 1070)
! * mamx-fp16:                             x86 Options.        (line 1067)
! * mamx-int8:                             x86 Options.        (line 1058)
! * mamx-tile:                             x86 Options.        (line 1057)
  * manchor:                               C-SKY Options.      (line  124)
  * mandroid:                              GNU/Linux Options.  (line   25)
  * mannotate-align:                       ARC Options.        (line  390)
--- 72332,72342 ----
  * mam33:                                 MN10300 Options.    (line   16)
  * mam33-2:                               MN10300 Options.    (line   23)
  * mam34:                                 MN10300 Options.    (line   26)
! * mamx-bf16:                             x86 Options.        (line 1058)
! * mamx-complex:                          x86 Options.        (line 1069)
! * mamx-fp16:                             x86 Options.        (line 1066)
! * mamx-int8:                             x86 Options.        (line 1057)
! * mamx-tile:                             x86 Options.        (line 1056)
  * manchor:                               C-SKY Options.      (line  124)
  * mandroid:                              GNU/Linux Options.  (line   25)
  * mannotate-align:                       ARC Options.        (line  390)
*************** look up both forms.
*** 72333,72340 ****
  * mapcs-frame:                           ARM Options.        (line   12)
  * mapp-regs:                             SPARC Options.      (line    8)
  * mapp-regs <1>:                         V850 Options.       (line  180)
! * mapx-inline-asm-use-gpr32:             x86 Options.        (line 1728)
! * mapxf:                                 x86 Options.        (line 1075)
  * mARC600:                               ARC Options.        (line   23)
  * mARC601:                               ARC Options.        (line   26)
  * mARC700:                               ARC Options.        (line   29)
--- 72344,72351 ----
  * mapcs-frame:                           ARM Options.        (line   12)
  * mapp-regs:                             SPARC Options.      (line    8)
  * mapp-regs <1>:                         V850 Options.       (line  180)
! * mapx-inline-asm-use-gpr32:             x86 Options.        (line 1727)
! * mapxf:                                 x86 Options.        (line 1074)
  * mARC600:                               ARC Options.        (line   23)
  * mARC601:                               ARC Options.        (line   26)
  * mARC700:                               ARC Options.        (line   29)
*************** look up both forms.
*** 72358,72424 ****
  * march <16>:                            x86 Options.        (line    8)
  * march=:                                C-SKY Options.      (line    8)
  * marclinux:                             ARC Options.        (line  395)
! * marclinux_prof:                        ARC Options.        (line  402)
! * margonaut:                             ARC Options.        (line  598)
  * marm:                                  ARM Options.        (line  850)
  * mas100-syntax:                         RX Options.         (line   74)
  * masm-hex:                              MSP430 Options.     (line    8)
  * masm-syntax-unified:                   ARM Options.        (line  962)
  * masm=DIALECT:                          eBPF Options.       (line   94)
! * masm=DIALECT <1>:                      x86 Options.        (line  719)
  * matomic:                               ARC Options.        (line  163)
  * matomic-libcalls:                      HPPA Options.       (line   22)
  * matomic-model=MODEL:                   SH Options.         (line  192)
  * mauto-litpools:                        Xtensa Options.     (line   58)
! * mauto-modify-reg:                      ARC Options.        (line  445)
  * mauto-pic:                             IA-64 Options.      (line   49)
  * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
                                                               (line  350)
! * mavx:                                  x86 Options.        (line  986)
! * mavx10.1:                              x86 Options.        (line 1077)
! * mavx10.1-256:                          x86 Options.        (line 1078)
! * mavx10.1-512:                          x86 Options.        (line 1079)
! * mavx2:                                 x86 Options.        (line  987)
! * mavx256-split-unaligned-load:          x86 Options.        (line 1643)
! * mavx256-split-unaligned-store:         x86 Options.        (line 1643)
! * mavx5124fmaps:                         x86 Options.        (line 1051)
! * mavx5124vnniw:                         x86 Options.        (line 1054)
! * mavx512bf16:                           x86 Options.        (line 1037)
! * mavx512bitalg:                         x86 Options.        (line 1043)
! * mavx512bw:                             x86 Options.        (line  993)
! * mavx512cd:                             x86 Options.        (line  991)
! * mavx512dq:                             x86 Options.        (line  994)
! * mavx512er:                             x86 Options.        (line  990)
! * mavx512f:                              x86 Options.        (line  988)
! * mavx512fp16:                           x86 Options.        (line 1038)
! * mavx512ifma:                           x86 Options.        (line  995)
! * mavx512pf:                             x86 Options.        (line  989)
! * mavx512vbmi:                           x86 Options.        (line  996)
! * mavx512vbmi2:                          x86 Options.        (line 1036)
! * mavx512vl:                             x86 Options.        (line  992)
! * mavx512vnni:                           x86 Options.        (line 1052)
! * mavx512vp2intersect:                   x86 Options.        (line 1050)
! * mavx512vpopcntdq:                      x86 Options.        (line 1049)
! * mavxifma:                              x86 Options.        (line 1063)
! * mavxneconvert:                         x86 Options.        (line 1065)
! * mavxvnni:                              x86 Options.        (line 1053)
! * mavxvnniint16:                         x86 Options.        (line 1071)
! * mavxvnniint8:                          x86 Options.        (line 1064)
  * max-vect-align:                        Adapteva Epiphany Options.
                                                               (line  118)
  * mb:                                    SH Options.         (line  125)
  * mbackchain:                            S/390 and zSeries Options.
                                                               (line   33)
  * mbarrel-shift-enabled:                 LM32 Options.       (line    8)
  * mbarrel-shifter:                       ARC Options.        (line    9)
- * mbarrel_shifter:                       ARC Options.        (line  618)
  * mbase-addresses:                       MMIX Options.       (line   51)
! * mbbit-peephole:                        ARC Options.        (line  448)
  * mbe8:                                  ARM Options.        (line   70)
  * mbig:                                  RS/6000 and PowerPC Options.
                                                               (line  430)
  * mbig-endian:                           AArch64 Options.    (line   19)
! * mbig-endian <1>:                       ARC Options.        (line  601)
  * mbig-endian <2>:                       ARM Options.        (line   66)
  * mbig-endian <3>:                       C6X Options.        (line   12)
  * mbig-endian <4>:                       C-SKY Options.      (line   27)
--- 72369,72435 ----
  * march <16>:                            x86 Options.        (line    8)
  * march=:                                C-SKY Options.      (line    8)
  * marclinux:                             ARC Options.        (line  395)
! * marclinux_prof:                        ARC Options.        (line  401)
! * margonaut:                             ARC Options.        (line  596)
  * marm:                                  ARM Options.        (line  850)
  * mas100-syntax:                         RX Options.         (line   74)
  * masm-hex:                              MSP430 Options.     (line    8)
  * masm-syntax-unified:                   ARM Options.        (line  962)
  * masm=DIALECT:                          eBPF Options.       (line   94)
! * masm=DIALECT <1>:                      x86 Options.        (line  718)
  * matomic:                               ARC Options.        (line  163)
  * matomic-libcalls:                      HPPA Options.       (line   22)
  * matomic-model=MODEL:                   SH Options.         (line  192)
  * mauto-litpools:                        Xtensa Options.     (line   58)
! * mauto-modify-reg:                      ARC Options.        (line  443)
  * mauto-pic:                             IA-64 Options.      (line   49)
  * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
                                                               (line  350)
! * mavx:                                  x86 Options.        (line  985)
! * mavx10.1:                              x86 Options.        (line 1076)
! * mavx10.1-256:                          x86 Options.        (line 1077)
! * mavx10.1-512:                          x86 Options.        (line 1078)
! * mavx2:                                 x86 Options.        (line  986)
! * mavx256-split-unaligned-load:          x86 Options.        (line 1642)
! * mavx256-split-unaligned-store:         x86 Options.        (line 1642)
! * mavx5124fmaps:                         x86 Options.        (line 1050)
! * mavx5124vnniw:                         x86 Options.        (line 1053)
! * mavx512bf16:                           x86 Options.        (line 1036)
! * mavx512bitalg:                         x86 Options.        (line 1042)
! * mavx512bw:                             x86 Options.        (line  992)
! * mavx512cd:                             x86 Options.        (line  990)
! * mavx512dq:                             x86 Options.        (line  993)
! * mavx512er:                             x86 Options.        (line  989)
! * mavx512f:                              x86 Options.        (line  987)
! * mavx512fp16:                           x86 Options.        (line 1037)
! * mavx512ifma:                           x86 Options.        (line  994)
! * mavx512pf:                             x86 Options.        (line  988)
! * mavx512vbmi:                           x86 Options.        (line  995)
! * mavx512vbmi2:                          x86 Options.        (line 1035)
! * mavx512vl:                             x86 Options.        (line  991)
! * mavx512vnni:                           x86 Options.        (line 1051)
! * mavx512vp2intersect:                   x86 Options.        (line 1049)
! * mavx512vpopcntdq:                      x86 Options.        (line 1048)
! * mavxifma:                              x86 Options.        (line 1062)
! * mavxneconvert:                         x86 Options.        (line 1064)
! * mavxvnni:                              x86 Options.        (line 1052)
! * mavxvnniint16:                         x86 Options.        (line 1070)
! * mavxvnniint8:                          x86 Options.        (line 1063)
  * max-vect-align:                        Adapteva Epiphany Options.
                                                               (line  118)
  * mb:                                    SH Options.         (line  125)
  * mbackchain:                            S/390 and zSeries Options.
                                                               (line   33)
+ * mbarrel_shifter:                       ARC Options.        (line  613)
  * mbarrel-shift-enabled:                 LM32 Options.       (line    8)
  * mbarrel-shifter:                       ARC Options.        (line    9)
  * mbase-addresses:                       MMIX Options.       (line   51)
! * mbbit-peephole:                        ARC Options.        (line  446)
  * mbe8:                                  ARM Options.        (line   70)
  * mbig:                                  RS/6000 and PowerPC Options.
                                                               (line  430)
  * mbig-endian:                           AArch64 Options.    (line   19)
! * mbig-endian <1>:                       ARC Options.        (line  599)
  * mbig-endian <2>:                       ARM Options.        (line   66)
  * mbig-endian <3>:                       C6X Options.        (line   12)
  * mbig-endian <4>:                       C-SKY Options.      (line   27)
*************** look up both forms.
*** 72445,72456 ****
                                                               (line  691)
  * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
                                                               (line  679)
! * mbmi:                                  x86 Options.        (line 1022)
! * mbmi2:                                 x86 Options.        (line 1023)
  * mboard:                                OpenRISC Options.   (line    8)
  * mbranch-cost:                          Adapteva Epiphany Options.
                                                               (line   17)
! * mbranch-cost <1>:                      AVR Options.        (line  213)
  * mbranch-cost <2>:                      LoongArch Options.  (line  118)
  * mbranch-cost <3>:                      MIPS Options.       (line  804)
  * mbranch-cost <4>:                      RISC-V Options.     (line    8)
--- 72456,72467 ----
                                                               (line  691)
  * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
                                                               (line  679)
! * mbmi:                                  x86 Options.        (line 1021)
! * mbmi2:                                 x86 Options.        (line 1022)
  * mboard:                                OpenRISC Options.   (line    8)
  * mbranch-cost:                          Adapteva Epiphany Options.
                                                               (line   17)
! * mbranch-cost <1>:                      AVR Options.        (line  216)
  * mbranch-cost <2>:                      LoongArch Options.  (line  118)
  * mbranch-cost <3>:                      MIPS Options.       (line  804)
  * mbranch-cost <4>:                      RISC-V Options.     (line    8)
*************** look up both forms.
*** 72481,72492 ****
                                                               (line  520)
  * mcall-linux:                           RS/6000 and PowerPC Options.
                                                               (line  516)
! * mcall-ms2sysv-xlogues:                 x86 Options.        (line 1349)
  * mcall-netbsd:                          RS/6000 and PowerPC Options.
                                                               (line  524)
  * mcall-openbsd:                         RS/6000 and PowerPC Options.
                                                               (line  528)
! * mcall-prologues:                       AVR Options.        (line  218)
  * mcall-sysv:                            RS/6000 and PowerPC Options.
                                                               (line  498)
  * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
--- 72492,72503 ----
                                                               (line  520)
  * mcall-linux:                           RS/6000 and PowerPC Options.
                                                               (line  516)
! * mcall-ms2sysv-xlogues:                 x86 Options.        (line 1348)
  * mcall-netbsd:                          RS/6000 and PowerPC Options.
                                                               (line  524)
  * mcall-openbsd:                         RS/6000 and PowerPC Options.
                                                               (line  528)
! * mcall-prologues:                       AVR Options.        (line  221)
  * mcall-sysv:                            RS/6000 and PowerPC Options.
                                                               (line  498)
  * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
*************** look up both forms.
*** 72497,72537 ****
  * mcaller-copies:                        HPPA Options.       (line   46)
  * mcaller-super-interworking:            ARM Options.        (line  887)
  * mcallgraph-data:                       MCore Options.      (line   29)
! * mcase-vector-pcrel:                    ARC Options.        (line  457)
  * mcbcond:                               SPARC Options.      (line  258)
  * mcbranch-force-delay-slot:             SH Options.         (line  348)
! * mcc-init:                              CRIS Options.       (line   40)
  * mccrt:                                 C-SKY Options.      (line  153)
! * mcet-switch:                           x86 Options.        (line 1339)
  * mcfv4e:                                M680x0 Options.     (line  169)
  * mcheck-zero-division:                  LoongArch Options.  (line  121)
  * mcheck-zero-division <1>:              MIPS Options.       (line  578)
  * mcix:                                  DEC Alpha Options.  (line  155)
! * mcld:                                  x86 Options.        (line 1132)
! * mcldemote:                             x86 Options.        (line 1055)
  * mclear-hwcap:                          Solaris 2 Options.  (line    8)
! * mclflushopt:                           x86 Options.        (line 1000)
! * mclwb:                                 x86 Options.        (line 1001)
! * mclzero:                               x86 Options.        (line 1034)
  * mcmodel:                               LoongArch Options.  (line  161)
  * mcmodel <1>:                           NDS32 Options.      (line   66)
  * mcmodel <2>:                           SPARC Options.      (line  319)
! * mcmodel=kernel:                        x86 Options.        (line 1781)
  * mcmodel=large:                         AArch64 Options.    (line   44)
  * mcmodel=large <1>:                     OpenRISC Options.   (line   76)
  * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
                                                               (line  130)
! * mcmodel=large <3>:                     x86 Options.        (line 1793)
  * mcmodel=medany:                        RISC-V Options.     (line  469)
  * mcmodel=medium:                        RS/6000 and PowerPC Options.
                                                               (line  125)
! * mcmodel=medium <1>:                    x86 Options.        (line 1786)
  * mcmodel=medlow:                        RISC-V Options.     (line  462)
  * mcmodel=small:                         AArch64 Options.    (line   38)
  * mcmodel=small <1>:                     OpenRISC Options.   (line   72)
  * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
                                                               (line  121)
! * mcmodel=small <3>:                     x86 Options.        (line 1775)
  * mcmodel=tiny:                          AArch64 Options.    (line   33)
  * mcmov:                                 NDS32 Options.      (line   20)
  * mcmov <1>:                             OpenRISC Options.   (line   44)
--- 72508,72548 ----
  * mcaller-copies:                        HPPA Options.       (line   46)
  * mcaller-super-interworking:            ARM Options.        (line  887)
  * mcallgraph-data:                       MCore Options.      (line   29)
! * mcase-vector-pcrel:                    ARC Options.        (line  455)
  * mcbcond:                               SPARC Options.      (line  258)
  * mcbranch-force-delay-slot:             SH Options.         (line  348)
! * mcc-init:                              CRIS Options.       (line   39)
  * mccrt:                                 C-SKY Options.      (line  153)
! * mcet-switch:                           x86 Options.        (line 1338)
  * mcfv4e:                                M680x0 Options.     (line  169)
  * mcheck-zero-division:                  LoongArch Options.  (line  121)
  * mcheck-zero-division <1>:              MIPS Options.       (line  578)
  * mcix:                                  DEC Alpha Options.  (line  155)
! * mcld:                                  x86 Options.        (line 1131)
! * mcldemote:                             x86 Options.        (line 1054)
  * mclear-hwcap:                          Solaris 2 Options.  (line    8)
! * mclflushopt:                           x86 Options.        (line  999)
! * mclwb:                                 x86 Options.        (line 1000)
! * mclzero:                               x86 Options.        (line 1033)
  * mcmodel:                               LoongArch Options.  (line  161)
  * mcmodel <1>:                           NDS32 Options.      (line   66)
  * mcmodel <2>:                           SPARC Options.      (line  319)
! * mcmodel=kernel:                        x86 Options.        (line 1780)
  * mcmodel=large:                         AArch64 Options.    (line   44)
  * mcmodel=large <1>:                     OpenRISC Options.   (line   76)
  * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
                                                               (line  130)
! * mcmodel=large <3>:                     x86 Options.        (line 1792)
  * mcmodel=medany:                        RISC-V Options.     (line  469)
  * mcmodel=medium:                        RS/6000 and PowerPC Options.
                                                               (line  125)
! * mcmodel=medium <1>:                    x86 Options.        (line 1785)
  * mcmodel=medlow:                        RISC-V Options.     (line  462)
  * mcmodel=small:                         AArch64 Options.    (line   38)
  * mcmodel=small <1>:                     OpenRISC Options.   (line   72)
  * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
                                                               (line  121)
! * mcmodel=small <3>:                     x86 Options.        (line 1774)
  * mcmodel=tiny:                          AArch64 Options.    (line   33)
  * mcmov:                                 NDS32 Options.      (line   20)
  * mcmov <1>:                             OpenRISC Options.   (line   44)
*************** look up both forms.
*** 72539,72556 ****
                                                               (line   22)
  * mcmpb:                                 RS/6000 and PowerPC Options.
                                                               (line   21)
! * mcmpccxadd:                            x86 Options.        (line 1066)
  * mcmse:                                 ARM Options.        (line  991)
  * mco-re:                                eBPF Options.       (line   79)
  * mcode-density:                         ARC Options.        (line  171)
! * mcode-density-frame:                   ARC Options.        (line  518)
  * mcode-readable:                        MIPS Options.       (line  535)
  * mcode-region:                          MSP430 Options.     (line  148)
  * mcoherent-ldcw:                        HPPA Options.       (line   53)
  * mcompact-branches=always:              MIPS Options.       (line  821)
  * mcompact-branches=never:               MIPS Options.       (line  821)
  * mcompact-branches=optimal:             MIPS Options.       (line  821)
! * mcompact-casesi:                       ARC Options.        (line  461)
  * mcompat-align-parm:                    RS/6000 and PowerPC Options.
                                                               (line  889)
  * mcompress:                             FT32 Options.       (line   25)
--- 72550,72567 ----
                                                               (line   22)
  * mcmpb:                                 RS/6000 and PowerPC Options.
                                                               (line   21)
! * mcmpccxadd:                            x86 Options.        (line 1065)
  * mcmse:                                 ARM Options.        (line  991)
  * mco-re:                                eBPF Options.       (line   79)
  * mcode-density:                         ARC Options.        (line  171)
! * mcode-density-frame:                   ARC Options.        (line  516)
  * mcode-readable:                        MIPS Options.       (line  535)
  * mcode-region:                          MSP430 Options.     (line  148)
  * mcoherent-ldcw:                        HPPA Options.       (line   53)
  * mcompact-branches=always:              MIPS Options.       (line  821)
  * mcompact-branches=never:               MIPS Options.       (line  821)
  * mcompact-branches=optimal:             MIPS Options.       (line  821)
! * mcompact-casesi:                       ARC Options.        (line  459)
  * mcompat-align-parm:                    RS/6000 and PowerPC Options.
                                                               (line  889)
  * mcompress:                             FT32 Options.       (line   25)
*************** look up both forms.
*** 72560,72566 ****
  * mcond-move-int:                        LoongArch Options.  (line  127)
  * mconsole:                              x86 Windows Options.
                                                               (line    8)
! * mconst-align:                          CRIS Options.       (line   48)
  * mconst16:                              Xtensa Options.     (line    8)
  * mconstant-cfstrings:                   Darwin Options.     (line   74)
  * mconstant-gp:                          IA-64 Options.      (line   45)
--- 72571,72577 ----
  * mcond-move-int:                        LoongArch Options.  (line  127)
  * mconsole:                              x86 Windows Options.
                                                               (line    8)
! * mconst-align:                          CRIS Options.       (line   47)
  * mconst16:                              Xtensa Options.     (line    8)
  * mconstant-cfstrings:                   Darwin Options.     (line   74)
  * mconstant-gp:                          IA-64 Options.      (line   45)
*************** look up both forms.
*** 72583,72597 ****
  * mcpu <11>:                             RX Options.         (line   29)
  * mcpu <12>:                             SPARC Options.      (line  114)
  * mcpu <13>:                             Visium Options.     (line   32)
! * mcpu <14>:                             x86 Options.        (line  665)
! * mcpu32:                                M680x0 Options.     (line  135)
  * mcpu=:                                 Blackfin Options.   (line    6)
  * mcpu= <1>:                             C-SKY Options.      (line   13)
  * mcpu= <2>:                             M32C Options.       (line    6)
  * mcpu= <3>:                             MicroBlaze Options. (line   19)
  * mcpu= <4>:                             MSP430 Options.     (line   71)
  * mcrc:                                  MIPS Options.       (line  420)
! * mcrc32:                                x86 Options.        (line 1235)
  * mcrtdll:                               x86 Windows Options.
                                                               (line   15)
  * mcrypto:                               RS/6000 and PowerPC Options.
--- 72594,72608 ----
  * mcpu <11>:                             RX Options.         (line   29)
  * mcpu <12>:                             SPARC Options.      (line  114)
  * mcpu <13>:                             Visium Options.     (line   32)
! * mcpu <14>:                             x86 Options.        (line  664)
  * mcpu=:                                 Blackfin Options.   (line    6)
  * mcpu= <1>:                             C-SKY Options.      (line   13)
  * mcpu= <2>:                             M32C Options.       (line    6)
  * mcpu= <3>:                             MicroBlaze Options. (line   19)
  * mcpu= <4>:                             MSP430 Options.     (line   71)
+ * mcpu32:                                M680x0 Options.     (line  135)
  * mcrc:                                  MIPS Options.       (line  420)
! * mcrc32:                                x86 Options.        (line 1234)
  * mcrtdll:                               x86 Windows Options.
                                                               (line   15)
  * mcrypto:                               RS/6000 and PowerPC Options.
*************** look up both forms.
*** 72602,72614 ****
  * mctor-dtor:                            NDS32 Options.      (line   80)
  * mcustom-fpu-cfg:                       Nios II Options.    (line  258)
  * mcustom-INSN:                          Nios II Options.    (line  137)
! * mcx16:                                 x86 Options.        (line 1208)
  * MD:                                    Preprocessor Options.
                                                               (line  171)
  * mdalign:                               SH Options.         (line  131)
! * mdata-align:                           CRIS Options.       (line   48)
  * mdata-region:                          MSP430 Options.     (line  148)
! * mdaz-ftz:                              x86 Options.        (line  912)
  * mdebug:                                M32R/D Options.     (line   68)
  * mdebug <1>:                            S/390 and zSeries Options.
                                                               (line  142)
--- 72613,72625 ----
  * mctor-dtor:                            NDS32 Options.      (line   80)
  * mcustom-fpu-cfg:                       Nios II Options.    (line  258)
  * mcustom-INSN:                          Nios II Options.    (line  137)
! * mcx16:                                 x86 Options.        (line 1207)
  * MD:                                    Preprocessor Options.
                                                               (line  171)
  * mdalign:                               SH Options.         (line  131)
! * mdata-align:                           CRIS Options.       (line   47)
  * mdata-region:                          MSP430 Options.     (line  148)
! * mdaz-ftz:                              x86 Options.        (line  911)
  * mdebug:                                M32R/D Options.     (line   68)
  * mdebug <1>:                            S/390 and zSeries Options.
                                                               (line  142)
*************** look up both forms.
*** 72616,72622 ****
  * mdebug-main=PREFIX:                    VMS Options.        (line   12)
  * mdec-asm:                              PDP-11 Options.     (line   45)
  * mdirect-extern-access:                 LoongArch Options.  (line  205)
! * mdirect-extern-access <1>:             x86 Options.        (line 1813)
  * mdisable-callt:                        V850 Options.       (line   90)
  * mdisable-fpregs:                       HPPA Options.       (line   56)
  * mdisable-indexing:                     HPPA Options.       (line   59)
--- 72627,72633 ----
  * mdebug-main=PREFIX:                    VMS Options.        (line   12)
  * mdec-asm:                              PDP-11 Options.     (line   45)
  * mdirect-extern-access:                 LoongArch Options.  (line  205)
! * mdirect-extern-access <1>:             x86 Options.        (line 1812)
  * mdisable-callt:                        V850 Options.       (line   90)
  * mdisable-fpregs:                       HPPA Options.       (line   56)
  * mdisable-indexing:                     HPPA Options.       (line   59)
*************** look up both forms.
*** 72625,72632 ****
  * mdiv <2>:                              MCore Options.      (line   13)
  * mdiv <3>:                              RISC-V Options.     (line   48)
  * mdiv-rem:                              ARC Options.        (line  168)
- * mdiv32:                                LoongArch Options.  (line  295)
  * mdiv=STRATEGY:                         SH Options.         (line  283)
  * mdivide-breaks:                        MIPS Options.       (line  584)
  * mdivide-enabled:                       LM32 Options.       (line   11)
  * mdivide-traps:                         MIPS Options.       (line  584)
--- 72636,72643 ----
  * mdiv <2>:                              MCore Options.      (line   13)
  * mdiv <3>:                              RISC-V Options.     (line   48)
  * mdiv-rem:                              ARC Options.        (line  168)
  * mdiv=STRATEGY:                         SH Options.         (line  283)
+ * mdiv32:                                LoongArch Options.  (line  295)
  * mdivide-breaks:                        MIPS Options.       (line  584)
  * mdivide-enabled:                       LM32 Options.       (line   11)
  * mdivide-traps:                         MIPS Options.       (line  584)
*************** look up both forms.
*** 72636,72658 ****
  * mdlmzb:                                RS/6000 and PowerPC Options.
                                                               (line  375)
  * mdmx:                                  MIPS Options.       (line  380)
! * mdouble:                               AVR Options.        (line  230)
  * mdouble <1>:                           FRV Options.        (line   47)
  * mdouble-float:                         C-SKY Options.      (line   56)
  * mdouble-float <1>:                     LoongArch Options.  (line  100)
  * mdouble-float <2>:                     MIPS Options.       (line  293)
  * mdouble-float <3>:                     OpenRISC Options.   (line   32)
  * mdpfp:                                 ARC Options.        (line  107)
  * mdpfp-compact:                         ARC Options.        (line  107)
  * mdpfp-fast:                            ARC Options.        (line  112)
- * mdpfp_compact:                         ARC Options.        (line  621)
- * mdpfp_fast:                            ARC Options.        (line  624)
  * mdsp:                                  C-SKY Options.      (line  101)
  * mdsp <1>:                              MIPS Options.       (line  357)
  * mdsp-packa:                            ARC Options.        (line  343)
  * mdspr2:                                MIPS Options.       (line  363)
! * mdsp_packa:                            ARC Options.        (line  627)
! * mdump-tune-features:                   x86 Options.        (line 1114)
  * mdvbf:                                 ARC Options.        (line  348)
  * mdwarf2-asm:                           IA-64 Options.      (line   92)
  * mdword:                                FRV Options.        (line   39)
--- 72647,72669 ----
  * mdlmzb:                                RS/6000 and PowerPC Options.
                                                               (line  375)
  * mdmx:                                  MIPS Options.       (line  380)
! * mdouble:                               AVR Options.        (line  233)
  * mdouble <1>:                           FRV Options.        (line   47)
  * mdouble-float:                         C-SKY Options.      (line   56)
  * mdouble-float <1>:                     LoongArch Options.  (line  100)
  * mdouble-float <2>:                     MIPS Options.       (line  293)
  * mdouble-float <3>:                     OpenRISC Options.   (line   32)
  * mdpfp:                                 ARC Options.        (line  107)
+ * mdpfp_compact:                         ARC Options.        (line  616)
+ * mdpfp_fast:                            ARC Options.        (line  619)
  * mdpfp-compact:                         ARC Options.        (line  107)
  * mdpfp-fast:                            ARC Options.        (line  112)
  * mdsp:                                  C-SKY Options.      (line  101)
  * mdsp <1>:                              MIPS Options.       (line  357)
+ * mdsp_packa:                            ARC Options.        (line  622)
  * mdsp-packa:                            ARC Options.        (line  343)
  * mdspr2:                                MIPS Options.       (line  363)
! * mdump-tune-features:                   x86 Options.        (line 1113)
  * mdvbf:                                 ARC Options.        (line  348)
  * mdwarf2-asm:                           IA-64 Options.      (line   92)
  * mdword:                                FRV Options.        (line   39)
*************** look up both forms.
*** 72660,72669 ****
  * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
                                                               (line  436)
  * mea:                                   ARC Options.        (line  120)
! * mEA:                                   ARC Options.        (line  630)
  * meabi:                                 RS/6000 and PowerPC Options.
                                                               (line  623)
! * mearly-cbranchsi:                      ARC Options.        (line  483)
  * mearly-ldp-fusion:                     AArch64 Options.    (line  340)
  * mearly-ra:                             AArch64 Options.    (line  325)
  * mearly-stop-bits:                      IA-64 Options.      (line   98)
--- 72671,72680 ----
  * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
                                                               (line  436)
  * mea:                                   ARC Options.        (line  120)
! * mEA:                                   ARC Options.        (line  625)
  * meabi:                                 RS/6000 and PowerPC Options.
                                                               (line  623)
! * mearly-cbranchsi:                      ARC Options.        (line  481)
  * mearly-ldp-fusion:                     AArch64 Options.    (line  340)
  * mearly-ra:                             AArch64 Options.    (line  325)
  * mearly-stop-bits:                      IA-64 Options.      (line   98)
*************** look up both forms.
*** 72672,72694 ****
  * medsp:                                 C-SKY Options.      (line  101)
  * mel:                                   Moxie Options.      (line   10)
  * mel <1>:                               Nios II Options.    (line   88)
! * melf:                                  CRIS Options.       (line   78)
  * melf <1>:                              MMIX Options.       (line   42)
  * melrw:                                 C-SKY Options.      (line   74)
  * memb:                                  RS/6000 and PowerPC Options.
                                                               (line  619)
  * membedded-data:                        MIPS Options.       (line  521)
  * memregs=:                              M32C Options.       (line   20)
! * menqcmd:                               x86 Options.        (line 1046)
  * mep:                                   V850 Options.       (line   14)
  * mepsilon:                              MMIX Options.       (line   13)
  * mesa:                                  S/390 and zSeries Options.
                                                               (line   92)
! * metrax100:                             CRIS Options.       (line   24)
! * metrax4:                               CRIS Options.       (line   24)
  * meva:                                  MIPS Options.       (line  407)
! * mevex512:                              x86 Options.        (line 1735)
! * mexpand-adddi:                         ARC Options.        (line  486)
  * mexplicit-relocs:                      DEC Alpha Options.  (line  174)
  * mexplicit-relocs <1>:                  LoongArch Options.  (line  199)
  * mexplicit-relocs <2>:                  MIPS Options.       (line  565)
--- 72683,72705 ----
  * medsp:                                 C-SKY Options.      (line  101)
  * mel:                                   Moxie Options.      (line   10)
  * mel <1>:                               Nios II Options.    (line   88)
! * melf:                                  CRIS Options.       (line   77)
  * melf <1>:                              MMIX Options.       (line   42)
  * melrw:                                 C-SKY Options.      (line   74)
  * memb:                                  RS/6000 and PowerPC Options.
                                                               (line  619)
  * membedded-data:                        MIPS Options.       (line  521)
  * memregs=:                              M32C Options.       (line   20)
! * menqcmd:                               x86 Options.        (line 1045)
  * mep:                                   V850 Options.       (line   14)
  * mepsilon:                              MMIX Options.       (line   13)
  * mesa:                                  S/390 and zSeries Options.
                                                               (line   92)
! * metrax100:                             CRIS Options.       (line   23)
! * metrax4:                               CRIS Options.       (line   23)
  * meva:                                  MIPS Options.       (line  407)
! * mevex512:                              x86 Options.        (line 1734)
! * mexpand-adddi:                         ARC Options.        (line  484)
  * mexplicit-relocs:                      DEC Alpha Options.  (line  174)
  * mexplicit-relocs <1>:                  LoongArch Options.  (line  199)
  * mexplicit-relocs <2>:                  MIPS Options.       (line  565)
*************** look up both forms.
*** 72701,72708 ****
  * mextra-l32r-costs:                     Xtensa Options.     (line  123)
  * MF:                                    Preprocessor Options.
                                                               (line  110)
! * mf16c:                                 x86 Options.        (line 1005)
! * mfancy-math-387:                       x86 Options.        (line  760)
  * mfast-fp:                              Blackfin Options.   (line  129)
  * mfast-indirect-calls:                  HPPA Options.       (line   64)
  * mfast-sw-div:                          Nios II Options.    (line  113)
--- 72712,72719 ----
  * mextra-l32r-costs:                     Xtensa Options.     (line  123)
  * MF:                                    Preprocessor Options.
                                                               (line  110)
! * mf16c:                                 x86 Options.        (line 1004)
! * mfancy-math-387:                       x86 Options.        (line  759)
  * mfast-fp:                              Blackfin Options.   (line  129)
  * mfast-indirect-calls:                  HPPA Options.       (line   64)
  * mfast-sw-div:                          Nios II Options.    (line  113)
*************** look up both forms.
*** 72711,72719 ****
  * mfdivdu:                               C-SKY Options.      (line   62)
  * mfdpic:                                ARM Options.        (line 1014)
  * mfdpic <1>:                            FRV Options.        (line   71)
! * mfentry:                               x86 Options.        (line 1582)
! * mfentry-name:                          x86 Options.        (line 1614)
! * mfentry-section:                       x86 Options.        (line 1618)
  * mfix:                                  DEC Alpha Options.  (line  155)
  * mfix-24k:                              MIPS Options.       (line  659)
  * mfix-and-continue:                     Darwin Options.     (line  109)
--- 72722,72730 ----
  * mfdivdu:                               C-SKY Options.      (line   62)
  * mfdpic:                                ARM Options.        (line 1014)
  * mfdpic <1>:                            FRV Options.        (line   71)
! * mfentry:                               x86 Options.        (line 1581)
! * mfentry-name:                          x86 Options.        (line 1613)
! * mfentry-section:                       x86 Options.        (line 1617)
  * mfix:                                  DEC Alpha Options.  (line  155)
  * mfix-24k:                              MIPS Options.       (line  659)
  * mfix-and-continue:                     Darwin Options.     (line  109)
*************** look up both forms.
*** 72740,72746 ****
  * mflat:                                 SPARC Options.      (line   20)
  * mflip-mips16:                          MIPS Options.       (line  133)
  * mflip-thumb:                           ARM Options.        (line  863)
! * mflmap:                                AVR Options.        (line  694)
  * mfloat-abi:                            ARM Options.        (line   40)
  * mfloat-abi <1>:                        C-SKY Options.      (line   34)
  * mfloat-ieee:                           DEC Alpha Options.  (line  169)
--- 72751,72757 ----
  * mflat:                                 SPARC Options.      (line   20)
  * mflip-mips16:                          MIPS Options.       (line  133)
  * mflip-thumb:                           ARM Options.        (line  863)
! * mflmap:                                AVR Options.        (line  691)
  * mfloat-abi:                            ARM Options.        (line   40)
  * mfloat-abi <1>:                        C-SKY Options.      (line   34)
  * mfloat-ieee:                           DEC Alpha Options.  (line  169)
*************** look up both forms.
*** 72752,72775 ****
  * mflush-func:                           MIPS Options.       (line  794)
  * mflush-func=NAME:                      M32R/D Options.     (line   92)
  * mflush-trap=NUMBER:                    M32R/D Options.     (line   85)
! * mfma:                                  x86 Options.        (line 1006)
! * mfma4:                                 x86 Options.        (line 1009)
  * mfmaf:                                 SPARC Options.      (line  265)
  * mfmovd:                                SH Options.         (line  147)
! * mforce-indirect-call:                  x86 Options.        (line 1328)
  * mforce-no-pic:                         Xtensa Options.     (line   40)
  * mfp-exceptions:                        MIPS Options.       (line  844)
  * mfp-mode:                              Adapteva Epiphany Options.
                                                               (line   70)
  * mfp-reg:                               DEC Alpha Options.  (line   23)
! * mfp-ret-in-387:                        x86 Options.        (line  750)
  * mfp-rounding-mode:                     DEC Alpha Options.  (line   84)
  * mfp-trap-mode:                         DEC Alpha Options.  (line   62)
  * mfp16-format:                          ARM Options.        (line  757)
  * mfp32:                                 MIPS Options.       (line  263)
  * mfp64:                                 MIPS Options.       (line  266)
  * mfpmath:                               Optimize Options.   (line 2391)
! * mfpmath <1>:                           x86 Options.        (line  668)
  * mfpr-32:                               FRV Options.        (line   14)
  * mfpr-64:                               FRV Options.        (line   18)
  * mfprnd:                                RS/6000 and PowerPC Options.
--- 72763,72786 ----
  * mflush-func:                           MIPS Options.       (line  794)
  * mflush-func=NAME:                      M32R/D Options.     (line   92)
  * mflush-trap=NUMBER:                    M32R/D Options.     (line   85)
! * mfma:                                  x86 Options.        (line 1005)
! * mfma4:                                 x86 Options.        (line 1008)
  * mfmaf:                                 SPARC Options.      (line  265)
  * mfmovd:                                SH Options.         (line  147)
! * mforce-indirect-call:                  x86 Options.        (line 1327)
  * mforce-no-pic:                         Xtensa Options.     (line   40)
  * mfp-exceptions:                        MIPS Options.       (line  844)
  * mfp-mode:                              Adapteva Epiphany Options.
                                                               (line   70)
  * mfp-reg:                               DEC Alpha Options.  (line   23)
! * mfp-ret-in-387:                        x86 Options.        (line  749)
  * mfp-rounding-mode:                     DEC Alpha Options.  (line   84)
  * mfp-trap-mode:                         DEC Alpha Options.  (line   62)
  * mfp16-format:                          ARM Options.        (line  757)
  * mfp32:                                 MIPS Options.       (line  263)
  * mfp64:                                 MIPS Options.       (line  266)
  * mfpmath:                               Optimize Options.   (line 2391)
! * mfpmath <1>:                           x86 Options.        (line  667)
  * mfpr-32:                               FRV Options.        (line   14)
  * mfpr-64:                               FRV Options.        (line   18)
  * mfprnd:                                RS/6000 and PowerPC Options.
*************** look up both forms.
*** 72782,72802 ****
  * mfpu <5>:                              Visium Options.     (line   17)
  * mfpu=:                                 C-SKY Options.      (line   68)
  * mfpxx:                                 MIPS Options.       (line  269)
! * mfract-convert-truncate:               AVR Options.        (line  307)
  * mframe-header-opt:                     MIPS Options.       (line  905)
  * mfrecipe:                              LoongArch Options.  (line  289)
  * mfriz:                                 RS/6000 and PowerPC Options.
                                                               (line  860)
  * mfsca:                                 SH Options.         (line  363)
! * mfsgsbase:                             x86 Options.        (line 1002)
  * mfsmuld:                               SPARC Options.      (line  272)
  * mfsrra:                                SH Options.         (line  372)
  * mft32b:                                FT32 Options.       (line   22)
  * mfull-regs:                            NDS32 Options.      (line   17)
  * mfull-toc:                             RS/6000 and PowerPC Options.
                                                               (line  244)
! * mfunction-return:                      x86 Options.        (line 1693)
! * mfuse-add:                             AVR Options.        (line  222)
  * mfused-madd:                           IA-64 Options.      (line   86)
  * mfused-madd <1>:                       MIPS Options.       (line  642)
  * mfused-madd <2>:                       RS/6000 and PowerPC Options.
--- 72793,72813 ----
  * mfpu <5>:                              Visium Options.     (line   17)
  * mfpu=:                                 C-SKY Options.      (line   68)
  * mfpxx:                                 MIPS Options.       (line  269)
! * mfract-convert-truncate:               AVR Options.        (line  309)
  * mframe-header-opt:                     MIPS Options.       (line  905)
  * mfrecipe:                              LoongArch Options.  (line  289)
  * mfriz:                                 RS/6000 and PowerPC Options.
                                                               (line  860)
  * mfsca:                                 SH Options.         (line  363)
! * mfsgsbase:                             x86 Options.        (line 1001)
  * mfsmuld:                               SPARC Options.      (line  272)
  * mfsrra:                                SH Options.         (line  372)
  * mft32b:                                FT32 Options.       (line   22)
  * mfull-regs:                            NDS32 Options.      (line   17)
  * mfull-toc:                             RS/6000 and PowerPC Options.
                                                               (line  244)
! * mfunction-return:                      x86 Options.        (line 1692)
! * mfuse-add:                             AVR Options.        (line  225)
  * mfused-madd:                           IA-64 Options.      (line   86)
  * mfused-madd <1>:                       MIPS Options.       (line  642)
  * mfused-madd <2>:                       RS/6000 and PowerPC Options.
*************** look up both forms.
*** 72805,72811 ****
                                                               (line  181)
  * mfused-madd <4>:                       SH Options.         (line  354)
  * mfused-madd <5>:                       Xtensa Options.     (line   17)
! * mfxsr:                                 x86 Options.        (line 1025)
  * MG:                                    Preprocessor Options.
                                                               (line  121)
  * mg:                                    VAX Options.        (line   16)
--- 72816,72822 ----
                                                               (line  181)
  * mfused-madd <4>:                       SH Options.         (line  354)
  * mfused-madd <5>:                       Xtensa Options.     (line   17)
! * mfxsr:                                 x86 Options.        (line 1024)
  * MG:                                    Preprocessor Options.
                                                               (line  121)
  * mg:                                    VAX Options.        (line   16)
*************** look up both forms.
*** 72813,72824 ****
  * mg13:                                  RL78 Options.       (line   58)
  * mg14:                                  RL78 Options.       (line   58)
  * mgas:                                  HPPA Options.       (line   78)
! * mgas-isr-prologues:                    AVR Options.        (line  239)
  * mgcc-abi:                              V850 Options.       (line  147)
  * mgeneral-regs-only:                    AArch64 Options.    (line   23)
  * mgeneral-regs-only <1>:                ARM Options.        (line   56)
! * mgeneral-regs-only <2>:                x86 Options.        (line 1662)
! * mgfni:                                 x86 Options.        (line 1039)
  * mghs:                                  V850 Options.       (line  125)
  * mginv:                                 MIPS Options.       (line  425)
  * mglibc:                                GNU/Linux Options.  (line    8)
--- 72824,72835 ----
  * mg13:                                  RL78 Options.       (line   58)
  * mg14:                                  RL78 Options.       (line   58)
  * mgas:                                  HPPA Options.       (line   78)
! * mgas-isr-prologues:                    AVR Options.        (line  242)
  * mgcc-abi:                              V850 Options.       (line  147)
  * mgeneral-regs-only:                    AArch64 Options.    (line   23)
  * mgeneral-regs-only <1>:                ARM Options.        (line   56)
! * mgeneral-regs-only <2>:                x86 Options.        (line 1661)
! * mgfni:                                 x86 Options.        (line 1038)
  * mghs:                                  V850 Options.       (line  125)
  * mginv:                                 MIPS Options.       (line  425)
  * mglibc:                                GNU/Linux Options.  (line    8)
*************** look up both forms.
*** 72860,72877 ****
  * mhard-float <8>:                       SPARC Options.      (line   32)
  * mhard-float <9>:                       V850 Options.       (line  111)
  * mhard-float <10>:                      Visium Options.     (line   17)
! * mhard-float <11>:                      x86 Options.        (line  732)
  * mhard-mul:                             OpenRISC Options.   (line   22)
  * mhard-quad-float:                      SPARC Options.      (line   54)
  * mharden-sls:                           AArch64 Options.    (line  317)
! * mharden-sls <1>:                       x86 Options.        (line 1715)
  * mhardlit:                              MCore Options.      (line    8)
  * mhigh-registers:                       C-SKY Options.      (line  118)
! * mhle:                                  x86 Options.        (line 1031)
  * mhotpatch:                             S/390 and zSeries Options.
                                                               (line  217)
  * mhp-ld:                                HPPA Options.       (line   93)
! * mhreset:                               x86 Options.        (line 1060)
  * mhtm:                                  RS/6000 and PowerPC Options.
                                                               (line  182)
  * mhtm <1>:                              S/390 and zSeries Options.
--- 72871,72888 ----
  * mhard-float <8>:                       SPARC Options.      (line   32)
  * mhard-float <9>:                       V850 Options.       (line  111)
  * mhard-float <10>:                      Visium Options.     (line   17)
! * mhard-float <11>:                      x86 Options.        (line  731)
  * mhard-mul:                             OpenRISC Options.   (line   22)
  * mhard-quad-float:                      SPARC Options.      (line   54)
  * mharden-sls:                           AArch64 Options.    (line  317)
! * mharden-sls <1>:                       x86 Options.        (line 1714)
  * mhardlit:                              MCore Options.      (line    8)
  * mhigh-registers:                       C-SKY Options.      (line  118)
! * mhle:                                  x86 Options.        (line 1030)
  * mhotpatch:                             S/390 and zSeries Options.
                                                               (line  217)
  * mhp-ld:                                HPPA Options.       (line   93)
! * mhreset:                               x86 Options.        (line 1059)
  * mhtm:                                  RS/6000 and PowerPC Options.
                                                               (line  182)
  * mhtm <1>:                              S/390 and zSeries Options.
*************** look up both forms.
*** 72880,72903 ****
  * mhw-mul:                               Nios II Options.    (line  118)
  * mhw-mulx:                              Nios II Options.    (line  118)
  * mhwmult=:                              MSP430 Options.     (line   92)
! * miamcu:                                x86 Options.        (line 1743)
  * micplb:                                Blackfin Options.   (line  174)
  * mid-shared-library:                    Blackfin Options.   (line   77)
  * mid-shared-library <1>:                Blackfin Options.   (line   84)
  * mieee:                                 DEC Alpha Options.  (line   38)
  * mieee <1>:                             SH Options.         (line  163)
  * mieee-conformant:                      DEC Alpha Options.  (line  133)
! * mieee-fp:                              x86 Options.        (line  726)
  * mieee-with-inexact:                    DEC Alpha Options.  (line   51)
  * milp32:                                IA-64 Options.      (line  119)
  * mimadd:                                MIPS Options.       (line  635)
  * mimpure-text:                          Solaris 2 Options.  (line   14)
! * mincoming-stack-boundary:              x86 Options.        (line  952)
! * mindexed-loads:                        ARC Options.        (line  490)
! * mindirect-branch:                      x86 Options.        (line 1674)
! * mindirect-branch-cs-prefix:            x86 Options.        (line 1722)
! * mindirect-branch-register:             x86 Options.        (line 1712)
! * minline-all-stringops:                 x86 Options.        (line 1514)
  * minline-atomics:                       RISC-V Options.     (line  412)
  * minline-float-divide-max-throughput:   IA-64 Options.      (line   57)
  * minline-float-divide-min-latency:      IA-64 Options.      (line   53)
--- 72891,72914 ----
  * mhw-mul:                               Nios II Options.    (line  118)
  * mhw-mulx:                              Nios II Options.    (line  118)
  * mhwmult=:                              MSP430 Options.     (line   92)
! * miamcu:                                x86 Options.        (line 1742)
  * micplb:                                Blackfin Options.   (line  174)
  * mid-shared-library:                    Blackfin Options.   (line   77)
  * mid-shared-library <1>:                Blackfin Options.   (line   84)
  * mieee:                                 DEC Alpha Options.  (line   38)
  * mieee <1>:                             SH Options.         (line  163)
  * mieee-conformant:                      DEC Alpha Options.  (line  133)
! * mieee-fp:                              x86 Options.        (line  725)
  * mieee-with-inexact:                    DEC Alpha Options.  (line   51)
  * milp32:                                IA-64 Options.      (line  119)
  * mimadd:                                MIPS Options.       (line  635)
  * mimpure-text:                          Solaris 2 Options.  (line   14)
! * mincoming-stack-boundary:              x86 Options.        (line  951)
! * mindexed-loads:                        ARC Options.        (line  488)
! * mindirect-branch:                      x86 Options.        (line 1673)
! * mindirect-branch-cs-prefix:            x86 Options.        (line 1721)
! * mindirect-branch-register:             x86 Options.        (line 1711)
! * minline-all-stringops:                 x86 Options.        (line 1513)
  * minline-atomics:                       RISC-V Options.     (line  412)
  * minline-float-divide-max-throughput:   IA-64 Options.      (line   57)
  * minline-float-divide-min-latency:      IA-64 Options.      (line   53)
*************** look up both forms.
*** 72910,72928 ****
  * minline-sqrt-max-throughput:           IA-64 Options.      (line   79)
  * minline-sqrt-min-latency:              IA-64 Options.      (line   75)
  * minline-strcmp:                        RISC-V Options.     (line  425)
! * minline-stringops-dynamically:         x86 Options.        (line 1522)
  * minline-strlen:                        RISC-V Options.     (line  418)
  * minline-strncmp:                       RISC-V Options.     (line  436)
  * minrt:                                 MSP430 Options.     (line  114)
  * minrt <1>:                             PRU Options.        (line    8)
  * minsert-sched-nops:                    RS/6000 and PowerPC Options.
                                                               (line  476)
! * minstrument-return:                    x86 Options.        (line 1602)
  * mint-register:                         RX Options.         (line   99)
  * mint16:                                PDP-11 Options.     (line   31)
  * mint32:                                H8/300 Options.     (line   37)
  * mint32 <1>:                            PDP-11 Options.     (line   35)
! * mint8:                                 AVR Options.        (line  249)
  * minterlink-compressed:                 MIPS Options.       (line  139)
  * minterlink-mips16:                     MIPS Options.       (line  151)
  * mips1:                                 MIPS Options.       (line   79)
--- 72921,72939 ----
  * minline-sqrt-max-throughput:           IA-64 Options.      (line   79)
  * minline-sqrt-min-latency:              IA-64 Options.      (line   75)
  * minline-strcmp:                        RISC-V Options.     (line  425)
! * minline-stringops-dynamically:         x86 Options.        (line 1521)
  * minline-strlen:                        RISC-V Options.     (line  418)
  * minline-strncmp:                       RISC-V Options.     (line  436)
  * minrt:                                 MSP430 Options.     (line  114)
  * minrt <1>:                             PRU Options.        (line    8)
  * minsert-sched-nops:                    RS/6000 and PowerPC Options.
                                                               (line  476)
! * minstrument-return:                    x86 Options.        (line 1601)
  * mint-register:                         RX Options.         (line   99)
  * mint16:                                PDP-11 Options.     (line   31)
  * mint32:                                H8/300 Options.     (line   37)
  * mint32 <1>:                            PDP-11 Options.     (line   35)
! * mint8:                                 AVR Options.        (line  251)
  * minterlink-compressed:                 MIPS Options.       (line  139)
  * minterlink-mips16:                     MIPS Options.       (line  151)
  * mips1:                                 MIPS Options.       (line   79)
*************** look up both forms.
*** 72956,72970 ****
  * mjsr:                                  RX Options.         (line  167)
  * mjump-in-delay:                        HPPA Options.       (line  143)
  * mkernel:                               Darwin Options.     (line   89)
! * mkl:                                   x86 Options.        (line 1060)
  * mknuthdiv:                             MMIX Options.       (line   30)
  * ml:                                    SH Options.         (line  128)
! * mlam:                                  x86 Options.        (line 1830)
  * mlam-bh:                               LoongArch Options.  (line  301)
  * mlamcas:                               LoongArch Options.  (line  307)
  * mlarge:                                MSP430 Options.     (line   81)
  * mlarge-data:                           DEC Alpha Options.  (line  185)
! * mlarge-data-threshold:                 x86 Options.        (line  832)
  * mlarge-text:                           DEC Alpha Options.  (line  203)
  * mlate-ldp-fusion:                      AArch64 Options.    (line  345)
  * mld-seq-sa:                            LoongArch Options.  (line  313)
--- 72967,72982 ----
  * mjsr:                                  RX Options.         (line  167)
  * mjump-in-delay:                        HPPA Options.       (line  143)
  * mkernel:                               Darwin Options.     (line   89)
! * mkl:                                   x86 Options.        (line 1059)
  * mknuthdiv:                             MMIX Options.       (line   30)
  * ml:                                    SH Options.         (line  128)
! * ml[a]sx:                               LoongArch Options.  (line  105)
! * mlam:                                  x86 Options.        (line 1829)
  * mlam-bh:                               LoongArch Options.  (line  301)
  * mlamcas:                               LoongArch Options.  (line  307)
  * mlarge:                                MSP430 Options.     (line   81)
  * mlarge-data:                           DEC Alpha Options.  (line  185)
! * mlarge-data-threshold:                 x86 Options.        (line  831)
  * mlarge-text:                           DEC Alpha Options.  (line  203)
  * mlate-ldp-fusion:                      AArch64 Options.    (line  345)
  * mld-seq-sa:                            LoongArch Options.  (line  313)
*************** look up both forms.
*** 72977,72983 ****
  * mlittle:                               RS/6000 and PowerPC Options.
                                                               (line  424)
  * mlittle-endian:                        AArch64 Options.    (line   29)
! * mlittle-endian <1>:                    ARC Options.        (line  610)
  * mlittle-endian <2>:                    ARM Options.        (line   62)
  * mlittle-endian <3>:                    C6X Options.        (line   15)
  * mlittle-endian <4>:                    C-SKY Options.      (line   27)
--- 72989,72995 ----
  * mlittle:                               RS/6000 and PowerPC Options.
                                                               (line  424)
  * mlittle-endian:                        AArch64 Options.    (line   29)
! * mlittle-endian <1>:                    ARC Options.        (line  606)
  * mlittle-endian <2>:                    ARM Options.        (line   62)
  * mlittle-endian <3>:                    C6X Options.        (line   15)
  * mlittle-endian <4>:                    C-SKY Options.      (line   27)
*************** look up both forms.
*** 72998,73018 ****
  * mlock:                                 ARC Options.        (line  353)
  * mlong-calls:                           Adapteva Epiphany Options.
                                                               (line   54)
! * mlong-calls <1>:                       ARC Options.        (line  411)
  * mlong-calls <2>:                       ARM Options.        (line  783)
  * mlong-calls <3>:                       Blackfin Options.   (line  116)
  * mlong-calls <4>:                       FRV Options.        (line  121)
  * mlong-calls <5>:                       HPPA Options.       (line  112)
  * mlong-calls <6>:                       MIPS Options.       (line  621)
  * mlong-calls <7>:                       V850 Options.       (line    8)
! * mlong-double:                          AVR Options.        (line  230)
  * mlong-double-128:                      S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-128 <1>:                  x86 Options.        (line  809)
  * mlong-double-64:                       S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-64 <1>:                   x86 Options.        (line  809)
! * mlong-double-80:                       x86 Options.        (line  809)
  * mlong-jump-table-offsets:              M680x0 Options.     (line  339)
  * mlong-jumps:                           V850 Options.       (line  106)
  * mlong-load-store:                      HPPA Options.       (line  138)
--- 73010,73030 ----
  * mlock:                                 ARC Options.        (line  353)
  * mlong-calls:                           Adapteva Epiphany Options.
                                                               (line   54)
! * mlong-calls <1>:                       ARC Options.        (line  409)
  * mlong-calls <2>:                       ARM Options.        (line  783)
  * mlong-calls <3>:                       Blackfin Options.   (line  116)
  * mlong-calls <4>:                       FRV Options.        (line  121)
  * mlong-calls <5>:                       HPPA Options.       (line  112)
  * mlong-calls <6>:                       MIPS Options.       (line  621)
  * mlong-calls <7>:                       V850 Options.       (line    8)
! * mlong-double:                          AVR Options.        (line  233)
  * mlong-double-128:                      S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-128 <1>:                  x86 Options.        (line  808)
  * mlong-double-64:                       S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-64 <1>:                   x86 Options.        (line  808)
! * mlong-double-80:                       x86 Options.        (line  808)
  * mlong-jump-table-offsets:              M680x0 Options.     (line  339)
  * mlong-jumps:                           V850 Options.       (line  106)
  * mlong-load-store:                      HPPA Options.       (line  138)
*************** look up both forms.
*** 73032,73067 ****
  * mlow64k:                               Blackfin Options.   (line   66)
  * mlp64:                                 IA-64 Options.      (line  119)
  * mlpc-width:                            ARC Options.        (line  321)
! * mlra:                                  ARC Options.        (line  495)
  * mlra <1>:                              FT32 Options.       (line   15)
  * mlra <2>:                              PDP-11 Options.     (line   51)
  * mlra <3>:                              SPARC Options.      (line  109)
  * mlra <4>:                              VAX Options.        (line   20)
! * mlra-priority-compact:                 ARC Options.        (line  503)
! * mlra-priority-noncompact:              ARC Options.        (line  506)
! * mlra-priority-none:                    ARC Options.        (line  500)
! * mlwp:                                  x86 Options.        (line 1016)
  * mlxc1-sxc1:                            MIPS Options.       (line  915)
! * mlzcnt:                                x86 Options.        (line 1024)
! * ml[a]sx:                               LoongArch Options.  (line  105)
  * MM:                                    Preprocessor Options.
                                                               (line  101)
  * mmac-24:                               ARC Options.        (line  362)
  * mmac-d16:                              ARC Options.        (line  358)
  * mmacosx-version-min:                   Darwin Options.     (line   79)
- * mmac_24:                               ARC Options.        (line  633)
- * mmac_d16:                              ARC Options.        (line  636)
  * mmad:                                  MIPS Options.       (line  630)
  * mmadd4:                                MIPS Options.       (line  920)
! * mmain-is-OS_task:                      AVR Options.        (line  255)
  * mmainkernel:                           Nvidia PTX Options. (line   40)
  * mmalloc64:                             VMS Options.        (line   16)
! * mmanual-endbr:                         x86 Options.        (line 1333)
  * mmax:                                  DEC Alpha Options.  (line  155)
  * mmax-constant-size:                    RX Options.         (line   81)
  * mmax-inline-memcpy-size:               LoongArch Options.  (line  156)
  * mmax-inline-shift=:                    MSP430 Options.     (line  133)
! * mmax-stack-frame:                      CRIS Options.       (line   21)
  * mmcount-ra-address:                    MIPS Options.       (line  892)
  * mmcu:                                  AVR Options.        (line    8)
  * mmcu <1>:                              MIPS Options.       (line  403)
--- 73044,73078 ----
  * mlow64k:                               Blackfin Options.   (line   66)
  * mlp64:                                 IA-64 Options.      (line  119)
  * mlpc-width:                            ARC Options.        (line  321)
! * mlra:                                  ARC Options.        (line  493)
  * mlra <1>:                              FT32 Options.       (line   15)
  * mlra <2>:                              PDP-11 Options.     (line   51)
  * mlra <3>:                              SPARC Options.      (line  109)
  * mlra <4>:                              VAX Options.        (line   20)
! * mlra-priority-compact:                 ARC Options.        (line  501)
! * mlra-priority-noncompact:              ARC Options.        (line  504)
! * mlra-priority-none:                    ARC Options.        (line  498)
! * mlwp:                                  x86 Options.        (line 1015)
  * mlxc1-sxc1:                            MIPS Options.       (line  915)
! * mlzcnt:                                x86 Options.        (line 1023)
  * MM:                                    Preprocessor Options.
                                                               (line  101)
+ * mmac_24:                               ARC Options.        (line  628)
+ * mmac_d16:                              ARC Options.        (line  631)
  * mmac-24:                               ARC Options.        (line  362)
  * mmac-d16:                              ARC Options.        (line  358)
  * mmacosx-version-min:                   Darwin Options.     (line   79)
  * mmad:                                  MIPS Options.       (line  630)
  * mmadd4:                                MIPS Options.       (line  920)
! * mmain-is-OS_task:                      AVR Options.        (line  257)
  * mmainkernel:                           Nvidia PTX Options. (line   40)
  * mmalloc64:                             VMS Options.        (line   16)
! * mmanual-endbr:                         x86 Options.        (line 1332)
  * mmax:                                  DEC Alpha Options.  (line  155)
  * mmax-constant-size:                    RX Options.         (line   81)
  * mmax-inline-memcpy-size:               LoongArch Options.  (line  156)
  * mmax-inline-shift=:                    MSP430 Options.     (line  133)
! * mmax-stack-frame:                      CRIS Options.       (line   20)
  * mmcount-ra-address:                    MIPS Options.       (line  892)
  * mmcu:                                  AVR Options.        (line    8)
  * mmcu <1>:                              MIPS Options.       (line  403)
*************** look up both forms.
*** 73070,73109 ****
  * MMD:                                   Preprocessor Options.
                                                               (line  187)
  * mmedia:                                FRV Options.        (line   55)
! * mmedium-calls:                         ARC Options.        (line  415)
  * mmemcpy:                               LoongArch Options.  (line  137)
  * mmemcpy <1>:                           MicroBlaze Options. (line   12)
  * mmemcpy <2>:                           MIPS Options.       (line  615)
! * mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1544)
  * mmemory-latency:                       DEC Alpha Options.  (line  267)
  * mmemory-model:                         SPARC Options.      (line  347)
! * mmemset-strategy=STRATEGY:             x86 Options.        (line 1556)
  * mmfcrf:                                RS/6000 and PowerPC Options.
                                                               (line   21)
  * mmicromips:                            MIPS Options.       (line  391)
! * mmillicode:                            ARC Options.        (line  509)
  * mminimal-toc:                          RS/6000 and PowerPC Options.
                                                               (line  244)
  * mmips16e2:                             MIPS Options.       (line  127)
! * mmixed-code:                           ARC Options.        (line  523)
  * mmma:                                  RS/6000 and PowerPC Options.
                                                               (line  934)
! * mmmx:                                  x86 Options.        (line  977)
  * mmodel=large:                          M32R/D Options.     (line   32)
  * mmodel=medium:                         M32R/D Options.     (line   26)
  * mmodel=small:                          M32R/D Options.     (line   17)
! * mmovbe:                                x86 Options.        (line 1227)
  * mmovcc:                                RISC-V Options.     (line  405)
! * mmovdir64b:                            x86 Options.        (line 1045)
! * mmovdiri:                              x86 Options.        (line 1044)
! * mmove-max:                             x86 Options.        (line 1177)
  * mmp:                                   C-SKY Options.      (line   86)
  * mmpy:                                  ARC Options.        (line  125)
  * mmpy-option:                           ARC Options.        (line  181)
! * mms-bitfields:                         x86 Options.        (line 1388)
  * mmt:                                   MIPS Options.       (line  399)
  * mmul:                                  RL78 Options.       (line   10)
! * mmul-bug-workaround:                   CRIS Options.       (line   29)
  * mmul.x:                                Moxie Options.      (line   13)
  * mmul32x16:                             ARC Options.        (line  129)
  * mmul64:                                ARC Options.        (line  132)
--- 73081,73120 ----
  * MMD:                                   Preprocessor Options.
                                                               (line  187)
  * mmedia:                                FRV Options.        (line   55)
! * mmedium-calls:                         ARC Options.        (line  413)
  * mmemcpy:                               LoongArch Options.  (line  137)
  * mmemcpy <1>:                           MicroBlaze Options. (line   12)
  * mmemcpy <2>:                           MIPS Options.       (line  615)
! * mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1543)
  * mmemory-latency:                       DEC Alpha Options.  (line  267)
  * mmemory-model:                         SPARC Options.      (line  347)
! * mmemset-strategy=STRATEGY:             x86 Options.        (line 1555)
  * mmfcrf:                                RS/6000 and PowerPC Options.
                                                               (line   21)
  * mmicromips:                            MIPS Options.       (line  391)
! * mmillicode:                            ARC Options.        (line  507)
  * mminimal-toc:                          RS/6000 and PowerPC Options.
                                                               (line  244)
  * mmips16e2:                             MIPS Options.       (line  127)
! * mmixed-code:                           ARC Options.        (line  521)
  * mmma:                                  RS/6000 and PowerPC Options.
                                                               (line  934)
! * mmmx:                                  x86 Options.        (line  976)
  * mmodel=large:                          M32R/D Options.     (line   32)
  * mmodel=medium:                         M32R/D Options.     (line   26)
  * mmodel=small:                          M32R/D Options.     (line   17)
! * mmovbe:                                x86 Options.        (line 1226)
  * mmovcc:                                RISC-V Options.     (line  405)
! * mmovdir64b:                            x86 Options.        (line 1044)
! * mmovdiri:                              x86 Options.        (line 1043)
! * mmove-max:                             x86 Options.        (line 1176)
  * mmp:                                   C-SKY Options.      (line   86)
  * mmpy:                                  ARC Options.        (line  125)
  * mmpy-option:                           ARC Options.        (line  181)
! * mms-bitfields:                         x86 Options.        (line 1387)
  * mmt:                                   MIPS Options.       (line  399)
  * mmul:                                  RL78 Options.       (line   10)
! * mmul-bug-workaround:                   CRIS Options.       (line   28)
  * mmul.x:                                Moxie Options.      (line   13)
  * mmul32x16:                             ARC Options.        (line  129)
  * mmul64:                                ARC Options.        (line  132)
*************** look up both forms.
*** 73111,73117 ****
  * mmulhw:                                RS/6000 and PowerPC Options.
                                                               (line  368)
  * mmult-bug:                             MN10300 Options.    (line    8)
! * mmultcost:                             ARC Options.        (line  588)
  * mmulti-cond-exec:                      FRV Options.        (line  214)
  * mmulticore:                            Blackfin Options.   (line  138)
  * mmultiple:                             RS/6000 and PowerPC Options.
--- 73122,73128 ----
  * mmulhw:                                RS/6000 and PowerPC Options.
                                                               (line  368)
  * mmult-bug:                             MN10300 Options.    (line    8)
! * mmultcost:                             ARC Options.        (line  586)
  * mmulti-cond-exec:                      FRV Options.        (line  214)
  * mmulticore:                            Blackfin Options.   (line  138)
  * mmultiple:                             RS/6000 and PowerPC Options.
*************** look up both forms.
*** 73122,73134 ****
                                                               (line  136)
  * mmvme:                                 RS/6000 and PowerPC Options.
                                                               (line  600)
! * mmwait:                                x86 Options.        (line 1241)
! * mmwaitx:                               x86 Options.        (line 1033)
  * mn:                                    H8/300 Options.     (line   19)
! * mn-flash:                              AVR Options.        (line  690)
  * mnan=2008:                             MIPS Options.       (line  324)
  * mnan=legacy:                           MIPS Options.       (line  324)
! * mneeded:                               x86 Options.        (line 1807)
  * mneon-for-64bits:                      ARM Options.        (line  953)
  * mnested-cond-exec:                     FRV Options.        (line  229)
  * mnewlib:                               OpenRISC Options.   (line   12)
--- 73133,73145 ----
                                                               (line  136)
  * mmvme:                                 RS/6000 and PowerPC Options.
                                                               (line  600)
! * mmwait:                                x86 Options.        (line 1240)
! * mmwaitx:                               x86 Options.        (line 1032)
  * mn:                                    H8/300 Options.     (line   19)
! * mn-flash:                              AVR Options.        (line  687)
  * mnan=2008:                             MIPS Options.       (line  324)
  * mnan=legacy:                           MIPS Options.       (line  324)
! * mneeded:                               x86 Options.        (line 1806)
  * mneon-for-64bits:                      ARM Options.        (line  953)
  * mnested-cond-exec:                     FRV Options.        (line  229)
  * mnewlib:                               OpenRISC Options.   (line   12)
*************** look up both forms.
*** 73137,73146 ****
  * mno-8byte-align:                       V850 Options.       (line  168)
  * mno-abicalls:                          MIPS Options.       (line  196)
  * mno-ac0:                               PDP-11 Options.     (line   19)
! * mno-align-double:                      x86 Options.        (line  769)
  * mno-align-int:                         M680x0 Options.     (line  260)
  * mno-align-loops:                       M32R/D Options.     (line   75)
! * mno-align-stringops:                   x86 Options.        (line 1509)
  * mno-allow-string-insns:                RX Options.         (line  148)
  * mno-altivec:                           RS/6000 and PowerPC Options.
                                                               (line  135)
--- 73148,73157 ----
  * mno-8byte-align:                       V850 Options.       (line  168)
  * mno-abicalls:                          MIPS Options.       (line  196)
  * mno-ac0:                               PDP-11 Options.     (line   19)
! * mno-align-double:                      x86 Options.        (line  768)
  * mno-align-int:                         M680x0 Options.     (line  260)
  * mno-align-loops:                       M32R/D Options.     (line   75)
! * mno-align-stringops:                   x86 Options.        (line 1508)
  * mno-allow-string-insns:                RX Options.         (line  148)
  * mno-altivec:                           RS/6000 and PowerPC Options.
                                                               (line  135)
*************** look up both forms.
*** 73160,73170 ****
  * mno-bitfield:                          M680x0 Options.     (line  226)
  * mno-branch-likely:                     MIPS Options.       (line  810)
  * mno-branch-predict:                    MMIX Options.       (line   46)
! * mno-brcc:                              ARC Options.        (line  451)
  * mno-bwx:                               DEC Alpha Options.  (line  155)
  * mno-bypass-cache:                      Nios II Options.    (line  101)
  * mno-cache-volatile:                    Nios II Options.    (line  107)
! * mno-call-ms2sysv-xlogues:              x86 Options.        (line 1349)
  * mno-callgraph-data:                    MCore Options.      (line   29)
  * mno-cbcond:                            SPARC Options.      (line  258)
  * mno-check-zero-division:               MIPS Options.       (line  578)
--- 73171,73181 ----
  * mno-bitfield:                          M680x0 Options.     (line  226)
  * mno-branch-likely:                     MIPS Options.       (line  810)
  * mno-branch-predict:                    MMIX Options.       (line   46)
! * mno-brcc:                              ARC Options.        (line  449)
  * mno-bwx:                               DEC Alpha Options.  (line  155)
  * mno-bypass-cache:                      Nios II Options.    (line  101)
  * mno-cache-volatile:                    Nios II Options.    (line  107)
! * mno-call-ms2sysv-xlogues:              x86 Options.        (line 1348)
  * mno-callgraph-data:                    MCore Options.      (line   29)
  * mno-cbcond:                            SPARC Options.      (line  258)
  * mno-check-zero-division:               MIPS Options.       (line  578)
*************** look up both forms.
*** 73174,73183 ****
  * mno-cmpb:                              RS/6000 and PowerPC Options.
                                                               (line   21)
  * mno-co-re:                             eBPF Options.       (line   83)
! * mno-cond-exec:                         ARC Options.        (line  465)
  * mno-cond-exec <1>:                     FRV Options.        (line  193)
  * mno-cond-move:                         FRV Options.        (line  165)
! * mno-const-align:                       CRIS Options.       (line   48)
  * mno-const16:                           Xtensa Options.     (line    8)
  * mno-crc:                               MIPS Options.       (line  420)
  * mno-crt0:                              MN10300 Options.    (line   42)
--- 73185,73194 ----
  * mno-cmpb:                              RS/6000 and PowerPC Options.
                                                               (line   21)
  * mno-co-re:                             eBPF Options.       (line   83)
! * mno-cond-exec:                         ARC Options.        (line  463)
  * mno-cond-exec <1>:                     FRV Options.        (line  193)
  * mno-cond-move:                         FRV Options.        (line  165)
! * mno-const-align:                       CRIS Options.       (line   47)
  * mno-const16:                           Xtensa Options.     (line    8)
  * mno-crc:                               MIPS Options.       (line  420)
  * mno-crt0:                              MN10300 Options.    (line   42)
*************** look up both forms.
*** 73186,73196 ****
                                                               (line  176)
  * mno-csync-anomaly:                     Blackfin Options.   (line   62)
  * mno-custom-INSN:                       Nios II Options.    (line  137)
! * mno-data-align:                        CRIS Options.       (line   48)
  * mno-debug:                             S/390 and zSeries Options.
                                                               (line  142)
! * mno-default:                           x86 Options.        (line 1128)
! * mno-direct-extern-access:              x86 Options.        (line 1813)
  * mno-direct-extern-access <1>:          x86 Function Attributes.
                                                               (line  785)
  * mno-disable-callt:                     V850 Options.       (line   90)
--- 73197,73207 ----
                                                               (line  176)
  * mno-csync-anomaly:                     Blackfin Options.   (line   62)
  * mno-custom-INSN:                       Nios II Options.    (line  137)
! * mno-data-align:                        CRIS Options.       (line   47)
  * mno-debug:                             S/390 and zSeries Options.
                                                               (line  142)
! * mno-default:                           x86 Options.        (line 1127)
! * mno-direct-extern-access:              x86 Options.        (line 1812)
  * mno-direct-extern-access <1>:          x86 Function Attributes.
                                                               (line  785)
  * mno-disable-callt:                     V850 Options.       (line   90)
*************** look up both forms.
*** 73221,73227 ****
  * mno-ext-perf2:                         NDS32 Options.      (line   35)
  * mno-ext-string:                        NDS32 Options.      (line   41)
  * mno-extern-sdata:                      MIPS Options.       (line  484)
! * mno-fancy-math-387:                    x86 Options.        (line  760)
  * mno-fast-sw-div:                       Nios II Options.    (line  113)
  * mno-faster-structs:                    SPARC Options.      (line   89)
  * mno-fdpic:                             ARM Options.        (line 1014)
--- 73232,73238 ----
  * mno-ext-perf2:                         NDS32 Options.      (line   35)
  * mno-ext-string:                        NDS32 Options.      (line   41)
  * mno-extern-sdata:                      MIPS Options.       (line  484)
! * mno-fancy-math-387:                    x86 Options.        (line  759)
  * mno-fast-sw-div:                       Nios II Options.    (line  113)
  * mno-faster-structs:                    SPARC Options.      (line   89)
  * mno-fdpic:                             ARM Options.        (line 1014)
*************** look up both forms.
*** 73245,73251 ****
  * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                               (line  244)
  * mno-fp-regs:                           DEC Alpha Options.  (line   23)
! * mno-fp-ret-in-387:                     x86 Options.        (line  750)
  * mno-fprnd:                             RS/6000 and PowerPC Options.
                                                               (line   21)
  * mno-fpu:                               SPARC Options.      (line   37)
--- 73256,73262 ----
  * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                               (line  244)
  * mno-fp-regs:                           DEC Alpha Options.  (line   23)
! * mno-fp-ret-in-387:                     x86 Options.        (line  749)
  * mno-fprnd:                             RS/6000 and PowerPC Options.
                                                               (line   21)
  * mno-fpu:                               SPARC Options.      (line   37)
*************** look up both forms.
*** 73283,73289 ****
  * mno-hw-mulx:                           Nios II Options.    (line  118)
  * mno-id-shared-library:                 Blackfin Options.   (line   84)
  * mno-ieee:                              SH Options.         (line  163)
! * mno-ieee-fp:                           x86 Options.        (line  726)
  * mno-imadd:                             MIPS Options.       (line  635)
  * mno-inline-float-divide:               IA-64 Options.      (line   61)
  * mno-inline-int-divide:                 IA-64 Options.      (line   72)
--- 73294,73300 ----
  * mno-hw-mulx:                           Nios II Options.    (line  118)
  * mno-id-shared-library:                 Blackfin Options.   (line   84)
  * mno-ieee:                              SH Options.         (line  163)
! * mno-ieee-fp:                           x86 Options.        (line  725)
  * mno-imadd:                             MIPS Options.       (line  635)
  * mno-inline-float-divide:               IA-64 Options.      (line   61)
  * mno-inline-int-divide:                 IA-64 Options.      (line   72)
*************** look up both forms.
*** 73292,73298 ****
  * mno-int32:                             PDP-11 Options.     (line   31)
  * mno-interlink-compressed:              MIPS Options.       (line  139)
  * mno-interlink-mips16:                  MIPS Options.       (line  151)
! * mno-interrupts:                        AVR Options.        (line  260)
  * mno-isel:                              RS/6000 and PowerPC Options.
                                                               (line  165)
  * mno-jsr:                               RX Options.         (line  167)
--- 73303,73309 ----
  * mno-int32:                             PDP-11 Options.     (line   31)
  * mno-interlink-compressed:              MIPS Options.       (line  139)
  * mno-interlink-mips16:                  MIPS Options.       (line  151)
! * mno-interrupts:                        AVR Options.        (line  262)
  * mno-isel:                              RS/6000 and PowerPC Options.
                                                               (line  165)
  * mno-jsr:                               RX Options.         (line  167)
*************** look up both forms.
*** 73344,73352 ****
  * Mno-modules:                           Preprocessor Options.
                                                               (line  131)
  * mno-mpy:                               ARC Options.        (line  125)
! * mno-ms-bitfields:                      x86 Options.        (line 1388)
  * mno-mt:                                MIPS Options.       (line  399)
! * mno-mul-bug-workaround:                CRIS Options.       (line   29)
  * mno-muladd:                            FRV Options.        (line   67)
  * mno-mulhw:                             RS/6000 and PowerPC Options.
                                                               (line  368)
--- 73355,73363 ----
  * Mno-modules:                           Preprocessor Options.
                                                               (line  131)
  * mno-mpy:                               ARC Options.        (line  125)
! * mno-ms-bitfields:                      x86 Options.        (line 1387)
  * mno-mt:                                MIPS Options.       (line  399)
! * mno-mul-bug-workaround:                CRIS Options.       (line   28)
  * mno-muladd:                            FRV Options.        (line   67)
  * mno-mulhw:                             RS/6000 and PowerPC Options.
                                                               (line  368)
*************** look up both forms.
*** 73395,73411 ****
  * mno-privileged:                        RS/6000 and PowerPC Options.
                                                               (line  945)
  * mno-prolog-function:                   V850 Options.       (line   21)
! * mno-prologue-epilogue:                 CRIS Options.       (line   68)
  * mno-prototype:                         RS/6000 and PowerPC Options.
                                                               (line  583)
! * mno-push-args:                         x86 Options.        (line 1365)
  * mno-quad-memory:                       RS/6000 and PowerPC Options.
                                                               (line  194)
  * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
                                                               (line  200)
  * mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
                                                               (line  675)
! * mno-red-zone:                          x86 Options.        (line 1767)
  * mno-register-names:                    IA-64 Options.      (line   35)
  * mno-regnames:                          RS/6000 and PowerPC Options.
                                                               (line  712)
--- 73406,73422 ----
  * mno-privileged:                        RS/6000 and PowerPC Options.
                                                               (line  945)
  * mno-prolog-function:                   V850 Options.       (line   21)
! * mno-prologue-epilogue:                 CRIS Options.       (line   67)
  * mno-prototype:                         RS/6000 and PowerPC Options.
                                                               (line  583)
! * mno-push-args:                         x86 Options.        (line 1364)
  * mno-quad-memory:                       RS/6000 and PowerPC Options.
                                                               (line  194)
  * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
                                                               (line  200)
  * mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
                                                               (line  675)
! * mno-red-zone:                          x86 Options.        (line 1766)
  * mno-register-names:                    IA-64 Options.      (line   35)
  * mno-regnames:                          RS/6000 and PowerPC Options.
                                                               (line  712)
*************** look up both forms.
*** 73434,73440 ****
  * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  176)
  * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  169)
  * mno-sched-prolog:                      ARM Options.        (line   31)
! * mno-sdata:                             ARC Options.        (line  429)
  * mno-sdata <1>:                         IA-64 Options.      (line   40)
  * mno-sdata <2>:                         RS/6000 and PowerPC Options.
                                                               (line  669)
--- 73445,73451 ----
  * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  176)
  * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  169)
  * mno-sched-prolog:                      ARM Options.        (line   31)
! * mno-sdata:                             ARC Options.        (line  427)
  * mno-sdata <1>:                         IA-64 Options.      (line   40)
  * mno-sdata <2>:                         RS/6000 and PowerPC Options.
                                                               (line  669)
*************** look up both forms.
*** 73442,73448 ****
  * mno-serialize-volatile:                Xtensa Options.     (line   33)
  * mno-setlb:                             MN10300 Options.    (line   68)
  * mno-short:                             M680x0 Options.     (line  222)
! * mno-side-effects:                      CRIS Options.       (line   44)
  * mno-sim:                               RX Options.         (line   69)
  * mno-single-exit:                       MMIX Options.       (line   63)
  * mno-slow-bytes:                        MCore Options.      (line   33)
--- 73453,73459 ----
  * mno-serialize-volatile:                Xtensa Options.     (line   33)
  * mno-setlb:                             MN10300 Options.    (line   68)
  * mno-short:                             M680x0 Options.     (line  222)
! * mno-side-effects:                      CRIS Options.       (line   43)
  * mno-sim:                               RX Options.         (line   69)
  * mno-single-exit:                       MMIX Options.       (line   63)
  * mno-slow-bytes:                        MCore Options.      (line   33)
*************** look up both forms.
*** 73457,73463 ****
  * mno-split-addresses:                   MIPS Options.       (line  559)
  * mno-split-lohi:                        Adapteva Epiphany Options.
                                                               (line  106)
! * mno-stack-align:                       CRIS Options.       (line   48)
  * mno-stack-bias:                        SPARC Options.      (line  370)
  * mno-std-struct-return:                 SPARC Options.      (line  100)
  * mno-strict-align:                      AArch64 Options.    (line   59)
--- 73468,73474 ----
  * mno-split-addresses:                   MIPS Options.       (line  559)
  * mno-split-lohi:                        Adapteva Epiphany Options.
                                                               (line  106)
! * mno-stack-align:                       CRIS Options.       (line   47)
  * mno-stack-bias:                        SPARC Options.      (line  370)
  * mno-std-struct-return:                 SPARC Options.      (line  100)
  * mno-strict-align:                      AArch64 Options.    (line   59)
*************** look up both forms.
*** 73485,73491 ****
  * mno-unaligned-access <1>:              MIPS Options.       (line  605)
  * mno-unaligned-doubles:                 SPARC Options.      (line   71)
  * mno-uninit-const-in-rodata:            MIPS Options.       (line  529)
! * mno-unroll-only-small-loops:           x86 Options.        (line 1824)
  * mno-update:                            RS/6000 and PowerPC Options.
                                                               (line  340)
  * mno-user-mode:                         SPARC Options.      (line   83)
--- 73496,73502 ----
  * mno-unaligned-access <1>:              MIPS Options.       (line  605)
  * mno-unaligned-doubles:                 SPARC Options.      (line   71)
  * mno-uninit-const-in-rodata:            MIPS Options.       (line  529)
! * mno-unroll-only-small-loops:           x86 Options.        (line 1823)
  * mno-update:                            RS/6000 and PowerPC Options.
                                                               (line  340)
  * mno-user-mode:                         SPARC Options.      (line   83)
*************** look up both forms.
*** 73502,73508 ****
  * mno-vis4b:                             SPARC Options.      (line  249)
  * mno-vliw-branch:                       FRV Options.        (line  207)
  * mno-volatile-asm-stop:                 IA-64 Options.      (line   30)
! * mno-volatile-cache:                    ARC Options.        (line  438)
  * mno-vrsave:                            RS/6000 and PowerPC Options.
                                                               (line  151)
  * mno-vsx:                               RS/6000 and PowerPC Options.
--- 73513,73519 ----
  * mno-vis4b:                             SPARC Options.      (line  249)
  * mno-vliw-branch:                       FRV Options.        (line  207)
  * mno-volatile-asm-stop:                 IA-64 Options.      (line   30)
! * mno-volatile-cache:                    ARC Options.        (line  436)
  * mno-vrsave:                            RS/6000 and PowerPC Options.
                                                               (line  151)
  * mno-vsx:                               RS/6000 and PowerPC Options.
*************** look up both forms.
*** 73527,73542 ****
  * mnomacsave:                            SH Options.         (line  159)
  * mnop-fun-dllimport:                    x86 Windows Options.
                                                               (line   41)
! * mnop-mcount:                           x86 Options.        (line 1595)
  * mnopm:                                 FT32 Options.       (line   28)
  * mnops:                                 Adapteva Epiphany Options.
                                                               (line   25)
! * mnoreturn-no-callee-saved-registers:   x86 Options.        (line 1200)
  * mnorm:                                 ARC Options.        (line  136)
  * modd-spreg:                            MIPS Options.       (line  297)
  * momit-leaf-frame-pointer:              AArch64 Options.    (line   65)
  * momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   42)
! * momit-leaf-frame-pointer <2>:          x86 Options.        (line 1560)
  * mone-byte-bool:                        Darwin Options.     (line   97)
  * moptimize:                             Nvidia PTX Options. (line   44)
  * moptimize-membar:                      FRV Options.        (line  243)
--- 73538,73553 ----
  * mnomacsave:                            SH Options.         (line  159)
  * mnop-fun-dllimport:                    x86 Windows Options.
                                                               (line   41)
! * mnop-mcount:                           x86 Options.        (line 1594)
  * mnopm:                                 FT32 Options.       (line   28)
  * mnops:                                 Adapteva Epiphany Options.
                                                               (line   25)
! * mnoreturn-no-callee-saved-registers:   x86 Options.        (line 1199)
  * mnorm:                                 ARC Options.        (line  136)
  * modd-spreg:                            MIPS Options.       (line  297)
  * momit-leaf-frame-pointer:              AArch64 Options.    (line   65)
  * momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   42)
! * momit-leaf-frame-pointer <2>:          x86 Options.        (line 1559)
  * mone-byte-bool:                        Darwin Options.     (line   97)
  * moptimize:                             Nvidia PTX Options. (line   44)
  * moptimize-membar:                      FRV Options.        (line  243)
*************** look up both forms.
*** 73553,73570 ****
                                                               (line   52)
  * mpadstruct:                            SH Options.         (line  188)
  * mpaired-single:                        MIPS Options.       (line  374)
! * mpartial-vector-fp-math:               x86 Options.        (line 1160)
  * mpass-mrelax-to-as:                    LoongArch Options.  (line  229)
  * mpc-relative-literal-loads:            AArch64 Options.    (line  289)
! * mpc32:                                 x86 Options.        (line  889)
! * mpc64:                                 x86 Options.        (line  889)
! * mpc80:                                 x86 Options.        (line  889)
! * mpclmul:                               x86 Options.        (line  999)
! * mpconfig:                              x86 Options.        (line 1007)
  * mpcrel:                                M680x0 Options.     (line  273)
  * mpcrel <1>:                            RS/6000 and PowerPC Options.
                                                               (line  922)
! * mpdebug:                               CRIS Options.       (line   34)
  * mpe:                                   RS/6000 and PowerPC Options.
                                                               (line  301)
  * mpe-aligned-commons:                   x86 Windows Options.
--- 73564,73581 ----
                                                               (line   52)
  * mpadstruct:                            SH Options.         (line  188)
  * mpaired-single:                        MIPS Options.       (line  374)
! * mpartial-vector-fp-math:               x86 Options.        (line 1159)
  * mpass-mrelax-to-as:                    LoongArch Options.  (line  229)
  * mpc-relative-literal-loads:            AArch64 Options.    (line  289)
! * mpc32:                                 x86 Options.        (line  888)
! * mpc64:                                 x86 Options.        (line  888)
! * mpc80:                                 x86 Options.        (line  888)
! * mpclmul:                               x86 Options.        (line  998)
! * mpconfig:                              x86 Options.        (line 1006)
  * mpcrel:                                M680x0 Options.     (line  273)
  * mpcrel <1>:                            RS/6000 and PowerPC Options.
                                                               (line  922)
! * mpdebug:                               CRIS Options.       (line   33)
  * mpe:                                   RS/6000 and PowerPC Options.
                                                               (line  301)
  * mpe-aligned-commons:                   x86 Windows Options.
*************** look up both forms.
*** 73573,73579 ****
  * mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   91)
  * mpic-register:                         ARM Options.        (line  814)
  * mpid:                                  RX Options.         (line  115)
! * mpku:                                  x86 Options.        (line 1035)
  * mplt:                                  MIPS Options.       (line  223)
  * mpltseq:                               RS/6000 and PowerPC Options.
                                                               (line  755)
--- 73584,73590 ----
  * mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   91)
  * mpic-register:                         ARM Options.        (line  814)
  * mpid:                                  RX Options.         (line  115)
! * mpku:                                  x86 Options.        (line 1034)
  * mplt:                                  MIPS Options.       (line  223)
  * mpltseq:                               RS/6000 and PowerPC Options.
                                                               (line  755)
*************** look up both forms.
*** 73582,73588 ****
                                                               (line  868)
  * mpoke-function-name:                   ARM Options.        (line  829)
  * mpopc:                                 SPARC Options.      (line  279)
! * mpopcnt:                               x86 Options.        (line 1019)
  * mpopcntb:                              RS/6000 and PowerPC Options.
                                                               (line   21)
  * mpopcntd:                              RS/6000 and PowerPC Options.
--- 73593,73599 ----
                                                               (line  868)
  * mpoke-function-name:                   ARM Options.        (line  829)
  * mpopc:                                 SPARC Options.      (line  279)
! * mpopcnt:                               x86 Options.        (line 1018)
  * mpopcntb:                              RS/6000 and PowerPC Options.
                                                               (line   21)
  * mpopcntd:                              RS/6000 and PowerPC Options.
*************** look up both forms.
*** 73600,73668 ****
                                                               (line   21)
  * mpowerpc64:                            RS/6000 and PowerPC Options.
                                                               (line   21)
! * mprefer-avx128:                        x86 Options.        (line 1152)
  * mprefer-short-insn-regs:               Adapteva Epiphany Options.
                                                               (line   12)
! * mprefer-vector-width:                  x86 Options.        (line 1156)
  * mprefergot:                            SH Options.         (line  267)
  * mpreferred-stack-boundary:             RISC-V Options.     (line  386)
! * mpreferred-stack-boundary <1>:         x86 Options.        (line  931)
! * mprefetchi:                            x86 Options.        (line 1068)
! * mprefetchwt1:                          x86 Options.        (line 1012)
  * mprefixed:                             RS/6000 and PowerPC Options.
                                                               (line  928)
  * mpretend-cmove:                        SH Options.         (line  382)
! * mprfchw:                               x86 Options.        (line 1010)
  * mprint-tune-info:                      ARM Options.        (line  974)
  * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
                                                               (line  448)
  * mprivileged:                           RS/6000 and PowerPC Options.
                                                               (line  945)
  * mprolog-function:                      V850 Options.       (line   21)
! * mprologue-epilogue:                    CRIS Options.       (line   68)
  * mprototype:                            RS/6000 and PowerPC Options.
                                                               (line  583)
! * mptwrite:                              x86 Options.        (line 1003)
  * mptx:                                  Nvidia PTX Options. (line   29)
  * mpure-code:                            ARM Options.        (line  984)
! * mpush-args:                            x86 Options.        (line 1365)
  * mpushpop:                              C-SKY Options.      (line  128)
  * MQ:                                    Preprocessor Options.
                                                               (line  161)
! * mq-class:                              ARC Options.        (line  526)
  * mquad-memory:                          RS/6000 and PowerPC Options.
                                                               (line  194)
  * mquad-memory-atomic:                   RS/6000 and PowerPC Options.
                                                               (line  200)
  * mr0rel-sec:                            Nios II Options.    (line   75)
  * mr10k-cache-barrier:                   MIPS Options.       (line  733)
! * mraoint:                               x86 Options.        (line 1069)
! * mRcq:                                  ARC Options.        (line  530)
! * mRcw:                                  ARC Options.        (line  533)
! * mrdpid:                                x86 Options.        (line 1011)
! * mrdrnd:                                x86 Options.        (line 1004)
! * mrdseed:                               x86 Options.        (line 1013)
  * mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
                                                               (line  675)
  * mrecip:                                LoongArch Options.  (line  239)
  * mrecip <1>:                            RS/6000 and PowerPC Options.
                                                               (line  775)
! * mrecip <2>:                            x86 Options.        (line 1246)
  * mrecip-precision:                      RS/6000 and PowerPC Options.
                                                               (line  832)
  * mrecip=opt:                            LoongArch Options.  (line  253)
  * mrecip=opt <1>:                        RS/6000 and PowerPC Options.
                                                               (line  789)
! * mrecip=opt <2>:                        x86 Options.        (line 1268)
! * mrecord-mcount:                        x86 Options.        (line 1589)
! * mrecord-return:                        x86 Options.        (line 1609)
! * mred-zone:                             x86 Options.        (line 1767)
  * mreduced-regs:                         NDS32 Options.      (line   14)
  * mregister-names:                       IA-64 Options.      (line   35)
  * mregnames:                             RS/6000 and PowerPC Options.
                                                               (line  712)
! * mregparm:                              x86 Options.        (line  861)
! * mrelax:                                AVR Options.        (line  264)
  * mrelax <1>:                            H8/300 Options.     (line    8)
  * mrelax <2>:                            LoongArch Options.  (line  217)
  * mrelax <3>:                            MN10300 Options.    (line   45)
--- 73611,73679 ----
                                                               (line   21)
  * mpowerpc64:                            RS/6000 and PowerPC Options.
                                                               (line   21)
! * mprefer-avx128:                        x86 Options.        (line 1151)
  * mprefer-short-insn-regs:               Adapteva Epiphany Options.
                                                               (line   12)
! * mprefer-vector-width:                  x86 Options.        (line 1155)
  * mprefergot:                            SH Options.         (line  267)
  * mpreferred-stack-boundary:             RISC-V Options.     (line  386)
! * mpreferred-stack-boundary <1>:         x86 Options.        (line  930)
! * mprefetchi:                            x86 Options.        (line 1067)
! * mprefetchwt1:                          x86 Options.        (line 1011)
  * mprefixed:                             RS/6000 and PowerPC Options.
                                                               (line  928)
  * mpretend-cmove:                        SH Options.         (line  382)
! * mprfchw:                               x86 Options.        (line 1009)
  * mprint-tune-info:                      ARM Options.        (line  974)
  * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
                                                               (line  448)
  * mprivileged:                           RS/6000 and PowerPC Options.
                                                               (line  945)
  * mprolog-function:                      V850 Options.       (line   21)
! * mprologue-epilogue:                    CRIS Options.       (line   67)
  * mprototype:                            RS/6000 and PowerPC Options.
                                                               (line  583)
! * mptwrite:                              x86 Options.        (line 1002)
  * mptx:                                  Nvidia PTX Options. (line   29)
  * mpure-code:                            ARM Options.        (line  984)
! * mpush-args:                            x86 Options.        (line 1364)
  * mpushpop:                              C-SKY Options.      (line  128)
  * MQ:                                    Preprocessor Options.
                                                               (line  161)
! * mq-class:                              ARC Options.        (line  524)
  * mquad-memory:                          RS/6000 and PowerPC Options.
                                                               (line  194)
  * mquad-memory-atomic:                   RS/6000 and PowerPC Options.
                                                               (line  200)
  * mr0rel-sec:                            Nios II Options.    (line   75)
  * mr10k-cache-barrier:                   MIPS Options.       (line  733)
! * mraoint:                               x86 Options.        (line 1068)
! * mRcq:                                  ARC Options.        (line  528)
! * mRcw:                                  ARC Options.        (line  531)
! * mrdpid:                                x86 Options.        (line 1010)
! * mrdrnd:                                x86 Options.        (line 1003)
! * mrdseed:                               x86 Options.        (line 1012)
  * mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
                                                               (line  675)
  * mrecip:                                LoongArch Options.  (line  239)
  * mrecip <1>:                            RS/6000 and PowerPC Options.
                                                               (line  775)
! * mrecip <2>:                            x86 Options.        (line 1245)
  * mrecip-precision:                      RS/6000 and PowerPC Options.
                                                               (line  832)
  * mrecip=opt:                            LoongArch Options.  (line  253)
  * mrecip=opt <1>:                        RS/6000 and PowerPC Options.
                                                               (line  789)
! * mrecip=opt <2>:                        x86 Options.        (line 1267)
! * mrecord-mcount:                        x86 Options.        (line 1588)
! * mrecord-return:                        x86 Options.        (line 1608)
! * mred-zone:                             x86 Options.        (line 1766)
  * mreduced-regs:                         NDS32 Options.      (line   14)
  * mregister-names:                       IA-64 Options.      (line   35)
  * mregnames:                             RS/6000 and PowerPC Options.
                                                               (line  712)
! * mregparm:                              x86 Options.        (line  860)
! * mrelax:                                AVR Options.        (line  266)
  * mrelax <1>:                            H8/300 Options.     (line    8)
  * mrelax <2>:                            LoongArch Options.  (line  217)
  * mrelax <3>:                            MN10300 Options.    (line   45)
*************** look up both forms.
*** 73672,73678 ****
  * mrelax <7>:                            RX Options.         (line   94)
  * mrelax <8>:                            SH Options.         (line  136)
  * mrelax <9>:                            V850 Options.       (line  101)
! * mrelax-cmpxchg-loop:                   x86 Options.        (line 1667)
  * mrelax-immediate:                      MCore Options.      (line   17)
  * mrelax-pic-calls:                      MIPS Options.       (line  879)
  * mrelocatable:                          RS/6000 and PowerPC Options.
--- 73683,73689 ----
  * mrelax <7>:                            RX Options.         (line   94)
  * mrelax <8>:                            SH Options.         (line  136)
  * mrelax <9>:                            V850 Options.       (line  101)
! * mrelax-cmpxchg-loop:                   x86 Options.        (line 1666)
  * mrelax-immediate:                      MCore Options.      (line   17)
  * mrelax-pic-calls:                      MIPS Options.       (line  879)
  * mrelocatable:                          RS/6000 and PowerPC Options.
*************** look up both forms.
*** 73687,73694 ****
  * mrh850-abi:                            V850 Options.       (line  125)
  * mriscv-attribute:                      RISC-V Options.     (line  490)
  * mrl78:                                 RL78 Options.       (line   58)
! * mrmw:                                  AVR Options.        (line  698)
! * mrodata-in-ram:                        AVR Options.        (line  278)
  * mrop-protect:                          RS/6000 and PowerPC Options.
                                                               (line  939)
  * mror:                                  OpenRISC Options.   (line   48)
--- 73698,73705 ----
  * mrh850-abi:                            V850 Options.       (line  125)
  * mriscv-attribute:                      RISC-V Options.     (line  490)
  * mrl78:                                 RL78 Options.       (line   58)
! * mrmw:                                  AVR Options.        (line  695)
! * mrodata-in-ram:                        AVR Options.        (line  280)
  * mrop-protect:                          RS/6000 and PowerPC Options.
                                                               (line  939)
  * mror:                                  OpenRISC Options.   (line   48)
*************** look up both forms.
*** 73696,73710 ****
  * mround-nearest:                        Adapteva Epiphany Options.
                                                               (line   50)
  * mrtd:                                  M680x0 Options.     (line  236)
! * mrtd <1>:                              x86 Options.        (line  837)
  * mrtd <2>:                              x86 Function Attributes.
                                                               (line    8)
! * mrtm:                                  x86 Options.        (line 1030)
  * mrtp:                                  VxWorks Options.    (line   10)
  * mrtsc:                                 ARC Options.        (line  366)
  * ms:                                    H8/300 Options.     (line   16)
  * ms2600:                                H8/300 Options.     (line   23)
! * msahf:                                 x86 Options.        (line 1217)
  * msave-acc-in-interrupts:               RX Options.         (line  108)
  * msave-mduc-in-interrupts:              RL78 Options.       (line   77)
  * msave-restore:                         RISC-V Options.     (line  399)
--- 73707,73721 ----
  * mround-nearest:                        Adapteva Epiphany Options.
                                                               (line   50)
  * mrtd:                                  M680x0 Options.     (line  236)
! * mrtd <1>:                              x86 Options.        (line  836)
  * mrtd <2>:                              x86 Function Attributes.
                                                               (line    8)
! * mrtm:                                  x86 Options.        (line 1029)
  * mrtp:                                  VxWorks Options.    (line   10)
  * mrtsc:                                 ARC Options.        (line  366)
  * ms:                                    H8/300 Options.     (line   16)
  * ms2600:                                H8/300 Options.     (line   23)
! * msahf:                                 x86 Options.        (line 1216)
  * msave-acc-in-interrupts:               RX Options.         (line  108)
  * msave-mduc-in-interrupts:              RL78 Options.       (line   77)
  * msave-restore:                         RISC-V Options.     (line  399)
*************** look up both forms.
*** 73732,73738 ****
  * msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  197)
  * mschedule:                             HPPA Options.       (line  161)
  * msda:                                  V850 Options.       (line   39)
! * msdata:                                ARC Options.        (line  429)
  * msdata <1>:                            IA-64 Options.      (line   40)
  * msdata <2>:                            RS/6000 and PowerPC Options.
                                                               (line  656)
--- 73743,73749 ----
  * msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  197)
  * mschedule:                             HPPA Options.       (line  161)
  * msda:                                  V850 Options.       (line   39)
! * msdata:                                ARC Options.        (line  427)
  * msdata <1>:                            IA-64 Options.      (line   40)
  * msdata <2>:                            RS/6000 and PowerPC Options.
                                                               (line  656)
*************** look up both forms.
*** 73760,73780 ****
  * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  206)
  * msep-data:                             Blackfin Options.   (line  106)
  * msep-data <1>:                         Blackfin Options.   (line  112)
! * mserialize:                            x86 Options.        (line 1056)
  * mserialize-volatile:                   Xtensa Options.     (line   33)
  * msetlb:                                MN10300 Options.    (line   63)
  * msext:                                 OpenRISC Options.   (line   58)
  * msfimm:                                OpenRISC Options.   (line   62)
! * msgx:                                  x86 Options.        (line 1014)
! * msha:                                  x86 Options.        (line  997)
! * msha512:                               x86 Options.        (line 1073)
  * mshared-library-id:                    Blackfin Options.   (line   99)
  * mshftimm:                              OpenRISC Options.   (line   67)
  * mshort:                                M680x0 Options.     (line  216)
! * mshort-calls:                          AVR Options.        (line  702)
  * mshorten-memrefs:                      RISC-V Options.     (line  447)
! * mshstk:                                x86 Options.        (line 1231)
! * mside-effects:                         CRIS Options.       (line   44)
  * msign-extend-enabled:                  LM32 Options.       (line   17)
  * msign-return-address:                  AArch64 Options.    (line  296)
  * msilicon-errata:                       MSP430 Options.     (line  158)
--- 73771,73791 ----
  * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  206)
  * msep-data:                             Blackfin Options.   (line  106)
  * msep-data <1>:                         Blackfin Options.   (line  112)
! * mserialize:                            x86 Options.        (line 1055)
  * mserialize-volatile:                   Xtensa Options.     (line   33)
  * msetlb:                                MN10300 Options.    (line   63)
  * msext:                                 OpenRISC Options.   (line   58)
  * msfimm:                                OpenRISC Options.   (line   62)
! * msgx:                                  x86 Options.        (line 1013)
! * msha:                                  x86 Options.        (line  996)
! * msha512:                               x86 Options.        (line 1072)
  * mshared-library-id:                    Blackfin Options.   (line   99)
  * mshftimm:                              OpenRISC Options.   (line   67)
  * mshort:                                M680x0 Options.     (line  216)
! * mshort-calls:                          AVR Options.        (line  699)
  * mshorten-memrefs:                      RISC-V Options.     (line  447)
! * mshstk:                                x86 Options.        (line 1230)
! * mside-effects:                         CRIS Options.       (line   43)
  * msign-extend-enabled:                  LM32 Options.       (line   17)
  * msign-return-address:                  AArch64 Options.    (line  296)
  * msilicon-errata:                       MSP430 Options.     (line  158)
*************** look up both forms.
*** 73800,73812 ****
  * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
                                                               (line  442)
  * msio:                                  HPPA Options.       (line  168)
! * msize-level:                           ARC Options.        (line  536)
! * mskip-bug:                             AVR Options.        (line  708)
! * mskip-rax-setup:                       x86 Options.        (line 1622)
  * mslow-bytes:                           MCore Options.      (line   33)
  * mslow-flash-data:                      ARM Options.        (line  956)
! * msm3:                                  x86 Options.        (line 1072)
! * msm4:                                  x86 Options.        (line 1074)
  * msmall:                                MSP430 Options.     (line   84)
  * msmall-data:                           DEC Alpha Options.  (line  185)
  * msmall-data-limit:                     LoongArch Options.  (line  152)
--- 73811,73823 ----
  * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
                                                               (line  442)
  * msio:                                  HPPA Options.       (line  168)
! * msize-level:                           ARC Options.        (line  534)
! * mskip-bug:                             AVR Options.        (line  705)
! * mskip-rax-setup:                       x86 Options.        (line 1621)
  * mslow-bytes:                           MCore Options.      (line   33)
  * mslow-flash-data:                      ARM Options.        (line  956)
! * msm3:                                  x86 Options.        (line 1071)
! * msm4:                                  x86 Options.        (line 1073)
  * msmall:                                MSP430 Options.     (line   84)
  * msmall-data:                           DEC Alpha Options.  (line  185)
  * msmall-data-limit:                     LoongArch Options.  (line  152)
*************** look up both forms.
*** 73845,73865 ****
  * msoft-float <13>:                      SPARC Options.      (line   37)
  * msoft-float <14>:                      V850 Options.       (line  111)
  * msoft-float <15>:                      Visium Options.     (line   22)
! * msoft-float <16>:                      x86 Options.        (line  736)
  * msoft-mul:                             OpenRISC Options.   (line   22)
  * msoft-mult:                            HPPA Options.       (line  188)
  * msoft-quad-float:                      SPARC Options.      (line   58)
  * msoft-stack:                           Nvidia PTX Options. (line   48)
! * msp8:                                  AVR Options.        (line  713)
  * mspace:                                V850 Options.       (line   29)
  * mspace-regs:                           HPPA Options.       (line  147)
  * mspecld-anomaly:                       Blackfin Options.   (line   47)
  * mspecld-anomaly <1>:                   Blackfin Options.   (line   52)
  * mspfp:                                 ARC Options.        (line  140)
  * mspfp-compact:                         ARC Options.        (line  140)
  * mspfp-fast:                            ARC Options.        (line  145)
- * mspfp_compact:                         ARC Options.        (line  639)
- * mspfp_fast:                            ARC Options.        (line  642)
  * msplit:                                PDP-11 Options.     (line   39)
  * msplit-addresses:                      MIPS Options.       (line  559)
  * msplit-lohi:                           Adapteva Epiphany Options.
--- 73856,73876 ----
  * msoft-float <13>:                      SPARC Options.      (line   37)
  * msoft-float <14>:                      V850 Options.       (line  111)
  * msoft-float <15>:                      Visium Options.     (line   22)
! * msoft-float <16>:                      x86 Options.        (line  735)
  * msoft-mul:                             OpenRISC Options.   (line   22)
  * msoft-mult:                            HPPA Options.       (line  188)
  * msoft-quad-float:                      SPARC Options.      (line   58)
  * msoft-stack:                           Nvidia PTX Options. (line   48)
! * msp8:                                  AVR Options.        (line  710)
  * mspace:                                V850 Options.       (line   29)
  * mspace-regs:                           HPPA Options.       (line  147)
  * mspecld-anomaly:                       Blackfin Options.   (line   47)
  * mspecld-anomaly <1>:                   Blackfin Options.   (line   52)
  * mspfp:                                 ARC Options.        (line  140)
+ * mspfp_compact:                         ARC Options.        (line  634)
+ * mspfp_fast:                            ARC Options.        (line  637)
  * mspfp-compact:                         ARC Options.        (line  140)
  * mspfp-fast:                            ARC Options.        (line  145)
  * msplit:                                PDP-11 Options.     (line   39)
  * msplit-addresses:                      MIPS Options.       (line  559)
  * msplit-lohi:                           Adapteva Epiphany Options.
*************** look up both forms.
*** 73867,73883 ****
  * msplit-vecmove-early:                  Adapteva Epiphany Options.
                                                               (line  125)
  * msram-ecc:                             AMD GCN Options.    (line   45)
! * msse:                                  x86 Options.        (line  978)
! * msse2:                                 x86 Options.        (line  979)
! * msse2avx:                              x86 Options.        (line 1577)
! * msse3:                                 x86 Options.        (line  980)
! * msse4:                                 x86 Options.        (line  982)
! * msse4.1:                               x86 Options.        (line  984)
! * msse4.2:                               x86 Options.        (line  985)
! * msse4a:                                x86 Options.        (line  983)
! * msseregparm:                           x86 Options.        (line  872)
! * mssse3:                                x86 Options.        (line  981)
! * mstack-align:                          CRIS Options.       (line   48)
  * mstack-bias:                           SPARC Options.      (line  370)
  * mstack-check-l1:                       Blackfin Options.   (line   73)
  * mstack-guard:                          S/390 and zSeries Options.
--- 73878,73894 ----
  * msplit-vecmove-early:                  Adapteva Epiphany Options.
                                                               (line  125)
  * msram-ecc:                             AMD GCN Options.    (line   45)
! * msse:                                  x86 Options.        (line  977)
! * msse2:                                 x86 Options.        (line  978)
! * msse2avx:                              x86 Options.        (line 1576)
! * msse3:                                 x86 Options.        (line  979)
! * msse4:                                 x86 Options.        (line  981)
! * msse4.1:                               x86 Options.        (line  983)
! * msse4.2:                               x86 Options.        (line  984)
! * msse4a:                                x86 Options.        (line  982)
! * msseregparm:                           x86 Options.        (line  871)
! * mssse3:                                x86 Options.        (line  980)
! * mstack-align:                          CRIS Options.       (line   47)
  * mstack-bias:                           SPARC Options.      (line  370)
  * mstack-check-l1:                       Blackfin Options.   (line   73)
  * mstack-guard:                          S/390 and zSeries Options.
*************** look up both forms.
*** 73890,73916 ****
  * mstack-protector-guard <2>:            RISC-V Options.     (line  514)
  * mstack-protector-guard <3>:            RS/6000 and PowerPC Options.
                                                               (line  904)
! * mstack-protector-guard <4>:            x86 Options.        (line 1647)
  * mstack-protector-guard-offset:         AArch64 Options.    (line   70)
  * mstack-protector-guard-offset <1>:     ARM Options.        (line 1006)
  * mstack-protector-guard-offset <2>:     RISC-V Options.     (line  514)
  * mstack-protector-guard-offset <3>:     RS/6000 and PowerPC Options.
                                                               (line  904)
! * mstack-protector-guard-offset <4>:     x86 Options.        (line 1647)
  * mstack-protector-guard-reg:            AArch64 Options.    (line   70)
  * mstack-protector-guard-reg <1>:        RISC-V Options.     (line  514)
  * mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
                                                               (line  904)
! * mstack-protector-guard-reg <3>:        x86 Options.        (line 1647)
  * mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
                                                               (line  904)
  * mstack-size:                           AMD GCN Options.    (line   53)
  * mstack-size <1>:                       C-SKY Options.      (line  148)
  * mstack-size <2>:                       S/390 and zSeries Options.
                                                               (line  200)
! * mstackrealign:                         x86 Options.        (line  922)
  * mstd-struct-return:                    SPARC Options.      (line  100)
! * mstore-max:                            x86 Options.        (line 1182)
  * mstrict-align:                         AArch64 Options.    (line   59)
  * mstrict-align <1>:                     LoongArch Options.  (line  146)
  * mstrict-align <2>:                     M680x0 Options.     (line  279)
--- 73901,73927 ----
  * mstack-protector-guard <2>:            RISC-V Options.     (line  514)
  * mstack-protector-guard <3>:            RS/6000 and PowerPC Options.
                                                               (line  904)
! * mstack-protector-guard <4>:            x86 Options.        (line 1646)
  * mstack-protector-guard-offset:         AArch64 Options.    (line   70)
  * mstack-protector-guard-offset <1>:     ARM Options.        (line 1006)
  * mstack-protector-guard-offset <2>:     RISC-V Options.     (line  514)
  * mstack-protector-guard-offset <3>:     RS/6000 and PowerPC Options.
                                                               (line  904)
! * mstack-protector-guard-offset <4>:     x86 Options.        (line 1646)
  * mstack-protector-guard-reg:            AArch64 Options.    (line   70)
  * mstack-protector-guard-reg <1>:        RISC-V Options.     (line  514)
  * mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
                                                               (line  904)
! * mstack-protector-guard-reg <3>:        x86 Options.        (line 1646)
  * mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
                                                               (line  904)
  * mstack-size:                           AMD GCN Options.    (line   53)
  * mstack-size <1>:                       C-SKY Options.      (line  148)
  * mstack-size <2>:                       S/390 and zSeries Options.
                                                               (line  200)
! * mstackrealign:                         x86 Options.        (line  921)
  * mstd-struct-return:                    SPARC Options.      (line  100)
! * mstore-max:                            x86 Options.        (line 1181)
  * mstrict-align:                         AArch64 Options.    (line   59)
  * mstrict-align <1>:                     LoongArch Options.  (line  146)
  * mstrict-align <2>:                     M680x0 Options.     (line  279)
*************** look up both forms.
*** 73919,73928 ****
  * mstrict-align <5>:                     RS/6000 and PowerPC Options.
                                                               (line  393)
  * mstrict-align <6>:                     Xtensa Options.     (line  130)
! * mstrict-X:                             AVR Options.        (line  290)
  * mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
                                                               (line  699)
! * mstringop-strategy=ALG:                x86 Options.        (line 1526)
  * mstructure-size-boundary:              ARM Options.        (line  763)
  * msubxc:                                SPARC Options.      (line  286)
  * msv-mode:                              Visium Options.     (line   51)
--- 73930,73939 ----
  * mstrict-align <5>:                     RS/6000 and PowerPC Options.
                                                               (line  393)
  * mstrict-align <6>:                     Xtensa Options.     (line  130)
! * mstrict-X:                             AVR Options.        (line  292)
  * mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
                                                               (line  699)
! * mstringop-strategy=ALG:                x86 Options.        (line 1525)
  * mstructure-size-boundary:              ARM Options.        (line  763)
  * msubxc:                                SPARC Options.      (line  286)
  * msv-mode:                              Visium Options.     (line   51)
*************** look up both forms.
*** 73939,73965 ****
                                                               (line  146)
  * mtarget-align:                         Xtensa Options.     (line   72)
  * mtas:                                  SH Options.         (line  258)
! * mtbm:                                  x86 Options.        (line 1032)
  * mtda:                                  V850 Options.       (line   33)
  * mtelephony:                            ARC Options.        (line  376)
  * mtext-section-literals:                Xtensa Options.     (line   45)
! * mthreads:                              x86 Options.        (line 1381)
  * mthreads <1>:                          x86 Windows Options.
                                                               (line   45)
  * mthumb:                                ARM Options.        (line  850)
  * mthumb-interwork:                      ARM Options.        (line   23)
  * mtiny-printf:                          MSP430 Options.     (line  121)
! * mtiny-stack:                           AVR Options.        (line  304)
  * mTLS:                                  FRV Options.        (line   89)
  * mtls:                                  FRV Options.        (line   93)
  * mtls-dialect:                          ARM Options.        (line  906)
  * mtls-dialect <1>:                      LoongArch Options.  (line  319)
! * mtls-dialect <2>:                      x86 Options.        (line 1359)
  * mtls-dialect=desc:                     AArch64 Options.    (line   85)
  * mtls-dialect=desc <1>:                 RISC-V Options.     (line  528)
  * mtls-dialect=trad:                     RISC-V Options.     (line  532)
  * mtls-dialect=traditional:              AArch64 Options.    (line   89)
! * mtls-direct-seg-refs:                  x86 Options.        (line 1567)
  * mtls-markers:                          RS/6000 and PowerPC Options.
                                                               (line  767)
  * mtls-size:                             AArch64 Options.    (line   93)
--- 73950,73976 ----
                                                               (line  146)
  * mtarget-align:                         Xtensa Options.     (line   72)
  * mtas:                                  SH Options.         (line  258)
! * mtbm:                                  x86 Options.        (line 1031)
  * mtda:                                  V850 Options.       (line   33)
  * mtelephony:                            ARC Options.        (line  376)
  * mtext-section-literals:                Xtensa Options.     (line   45)
! * mthreads:                              x86 Options.        (line 1380)
  * mthreads <1>:                          x86 Windows Options.
                                                               (line   45)
  * mthumb:                                ARM Options.        (line  850)
  * mthumb-interwork:                      ARM Options.        (line   23)
  * mtiny-printf:                          MSP430 Options.     (line  121)
! * mtiny-stack:                           AVR Options.        (line  306)
  * mTLS:                                  FRV Options.        (line   89)
  * mtls:                                  FRV Options.        (line   93)
  * mtls-dialect:                          ARM Options.        (line  906)
  * mtls-dialect <1>:                      LoongArch Options.  (line  319)
! * mtls-dialect <2>:                      x86 Options.        (line 1358)
  * mtls-dialect=desc:                     AArch64 Options.    (line   85)
  * mtls-dialect=desc <1>:                 RISC-V Options.     (line  528)
  * mtls-dialect=trad:                     RISC-V Options.     (line  532)
  * mtls-dialect=traditional:              AArch64 Options.    (line   89)
! * mtls-direct-seg-refs:                  x86 Options.        (line 1566)
  * mtls-markers:                          RS/6000 and PowerPC Options.
                                                               (line  767)
  * mtls-size:                             AArch64 Options.    (line   93)
*************** look up both forms.
*** 73981,73993 ****
                                                               (line  532)
  * mtrap-precision:                       DEC Alpha Options.  (line  108)
  * mtrust:                                C-SKY Options.      (line   98)
! * mtsxldtrk:                             x86 Options.        (line 1048)
  * mtune:                                 AArch64 Options.    (line  202)
  * mtune <1>:                             AMD GCN Options.    (line    8)
! * mtune <2>:                             ARC Options.        (line  557)
! * mtune <3>:                             ARC Options.        (line  645)
  * mtune <4>:                             ARM Options.        (line  574)
! * mtune <5>:                             CRIS Options.       (line   15)
  * mtune <6>:                             DEC Alpha Options.  (line  258)
  * mtune <7>:                             IA-64 Options.      (line  115)
  * mtune <8>:                             LoongArch Options.  (line   32)
--- 73992,74004 ----
                                                               (line  532)
  * mtrap-precision:                       DEC Alpha Options.  (line  108)
  * mtrust:                                C-SKY Options.      (line   98)
! * mtsxldtrk:                             x86 Options.        (line 1047)
  * mtune:                                 AArch64 Options.    (line  202)
  * mtune <1>:                             AMD GCN Options.    (line    8)
! * mtune <2>:                             ARC Options.        (line  555)
! * mtune <3>:                             ARC Options.        (line  640)
  * mtune <4>:                             ARM Options.        (line  574)
! * mtune <5>:                             CRIS Options.       (line   14)
  * mtune <6>:                             DEC Alpha Options.  (line  258)
  * mtune <7>:                             IA-64 Options.      (line  115)
  * mtune <8>:                             LoongArch Options.  (line   32)
*************** look up both forms.
*** 74001,74018 ****
                                                               (line  161)
  * mtune <15>:                            SPARC Options.      (line  198)
  * mtune <16>:                            Visium Options.     (line   46)
! * mtune <17>:                            x86 Options.        (line  611)
! * mtune-ctrl=FEATURE-LIST:               x86 Options.        (line 1119)
  * muclibc:                               GNU/Linux Options.  (line   13)
! * muintr:                                x86 Options.        (line 1046)
! * multcost:                              ARC Options.        (line  650)
  * multcost=NUMBER:                       SH Options.         (line  280)
  * multilib-library-pic:                  FRV Options.        (line  109)
- * multiply-enabled:                      LM32 Options.       (line   14)
  * multiply_defined:                      Darwin Options.     (line  204)
  * multiply_defined_unused:               Darwin Options.     (line  204)
! * multi_module:                          Darwin Options.     (line  204)
! * munalign-prob-threshold:               ARC Options.        (line  592)
  * munaligned-access:                     ARM Options.        (line  939)
  * munaligned-access <1>:                 MIPS Options.       (line  605)
  * munaligned-doubles:                    SPARC Options.      (line   71)
--- 74012,74029 ----
                                                               (line  161)
  * mtune <15>:                            SPARC Options.      (line  198)
  * mtune <16>:                            Visium Options.     (line   46)
! * mtune <17>:                            x86 Options.        (line  610)
! * mtune-ctrl=FEATURE-LIST:               x86 Options.        (line 1118)
  * muclibc:                               GNU/Linux Options.  (line   13)
! * muintr:                                x86 Options.        (line 1045)
! * multcost:                              ARC Options.        (line  645)
  * multcost=NUMBER:                       SH Options.         (line  280)
+ * multi_module:                          Darwin Options.     (line  204)
  * multilib-library-pic:                  FRV Options.        (line  109)
  * multiply_defined:                      Darwin Options.     (line  204)
  * multiply_defined_unused:               Darwin Options.     (line  204)
! * multiply-enabled:                      LM32 Options.       (line   14)
! * munalign-prob-threshold:               ARC Options.        (line  590)
  * munaligned-access:                     ARM Options.        (line  939)
  * munaligned-access <1>:                 MIPS Options.       (line  605)
  * munaligned-doubles:                    SPARC Options.      (line   71)
*************** look up both forms.
*** 74023,74036 ****
  * munix:                                 VAX Options.        (line    8)
  * munix-asm:                             PDP-11 Options.     (line   42)
  * munordered-float:                      OpenRISC Options.   (line   38)
! * munroll-only-small-loops:              x86 Options.        (line 1824)
  * mupdate:                               RS/6000 and PowerPC Options.
                                                               (line  340)
  * muser-enabled:                         LM32 Options.       (line   20)
  * muser-mode:                            SPARC Options.      (line   83)
  * muser-mode <1>:                        Visium Options.     (line   56)
  * musermode:                             SH Options.         (line  272)
! * musermsr:                              x86 Options.        (line 1076)
  * mv3-atomics:                           eBPF Options.       (line   33)
  * mv3push:                               NDS32 Options.      (line   44)
  * mv850:                                 V850 Options.       (line   48)
--- 74034,74047 ----
  * munix:                                 VAX Options.        (line    8)
  * munix-asm:                             PDP-11 Options.     (line   42)
  * munordered-float:                      OpenRISC Options.   (line   38)
! * munroll-only-small-loops:              x86 Options.        (line 1823)
  * mupdate:                               RS/6000 and PowerPC Options.
                                                               (line  340)
  * muser-enabled:                         LM32 Options.       (line   20)
  * muser-mode:                            SPARC Options.      (line   83)
  * muser-mode <1>:                        Visium Options.     (line   56)
  * musermode:                             SH Options.         (line  272)
! * musermsr:                              x86 Options.        (line 1075)
  * mv3-atomics:                           eBPF Options.       (line   33)
  * mv3push:                               NDS32 Options.      (line   44)
  * mv850:                                 V850 Options.       (line   48)
*************** look up both forms.
*** 74042,74055 ****
  * mv850e3v5:                             V850 Options.       (line   51)
  * mv850es:                               V850 Options.       (line   74)
  * mv8plus:                               SPARC Options.      (line  212)
! * mvaes:                                 x86 Options.        (line 1040)
  * mvdsp:                                 C-SKY Options.      (line  101)
  * mveclibabi:                            RS/6000 and PowerPC Options.
                                                               (line  842)
! * mveclibabi <1>:                        x86 Options.        (line 1297)
  * mvect-double:                          Adapteva Epiphany Options.
                                                               (line  114)
! * mvect8-ret-in-mem:                     x86 Options.        (line  882)
  * mverbose-cost-dump:                    AArch64 Options.    (line  285)
  * mverbose-cost-dump <1>:                ARM Options.        (line  980)
  * mvirt:                                 MIPS Options.       (line  411)
--- 74053,74066 ----
  * mv850e3v5:                             V850 Options.       (line   51)
  * mv850es:                               V850 Options.       (line   74)
  * mv8plus:                               SPARC Options.      (line  212)
! * mvaes:                                 x86 Options.        (line 1039)
  * mvdsp:                                 C-SKY Options.      (line  101)
  * mveclibabi:                            RS/6000 and PowerPC Options.
                                                               (line  842)
! * mveclibabi <1>:                        x86 Options.        (line 1296)
  * mvect-double:                          Adapteva Epiphany Options.
                                                               (line  114)
! * mvect8-ret-in-mem:                     x86 Options.        (line  881)
  * mverbose-cost-dump:                    AArch64 Options.    (line  285)
  * mverbose-cost-dump <1>:                ARM Options.        (line  980)
  * mvirt:                                 MIPS Options.       (line  411)
*************** look up both forms.
*** 74061,74069 ****
  * mvliw-branch:                          FRV Options.        (line  200)
  * mvms-return-codes:                     VMS Options.        (line    8)
  * mvolatile-asm-stop:                    IA-64 Options.      (line   30)
! * mvolatile-cache:                       ARC Options.        (line  434)
! * mvolatile-cache <1>:                   ARC Options.        (line  438)
! * mvpclmulqdq:                           x86 Options.        (line 1042)
  * mvr4130-align:                         MIPS Options.       (line  854)
  * mvrsave:                               RS/6000 and PowerPC Options.
                                                               (line  151)
--- 74072,74080 ----
  * mvliw-branch:                          FRV Options.        (line  200)
  * mvms-return-codes:                     VMS Options.        (line    8)
  * mvolatile-asm-stop:                    IA-64 Options.      (line   30)
! * mvolatile-cache:                       ARC Options.        (line  432)
! * mvolatile-cache <1>:                   ARC Options.        (line  436)
! * mvpclmulqdq:                           x86 Options.        (line 1041)
  * mvr4130-align:                         MIPS Options.       (line  854)
  * mvrsave:                               RS/6000 and PowerPC Options.
                                                               (line  151)
*************** look up both forms.
*** 74073,74080 ****
                                                               (line  110)
  * mvxworks:                              RS/6000 and PowerPC Options.
                                                               (line  615)
! * mvzeroupper:                           x86 Options.        (line 1146)
! * mwaitpkg:                              x86 Options.        (line 1041)
  * mwarn-devices-csv:                     MSP430 Options.     (line  166)
  * mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                               (line  195)
--- 74084,74091 ----
                                                               (line  110)
  * mvxworks:                              RS/6000 and PowerPC Options.
                                                               (line  615)
! * mvzeroupper:                           x86 Options.        (line 1145)
! * mwaitpkg:                              x86 Options.        (line 1040)
  * mwarn-devices-csv:                     MSP430 Options.     (line  166)
  * mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                               (line  195)
*************** look up both forms.
*** 74082,74096 ****
                                                               (line  187)
  * mwarn-mcu:                             MSP430 Options.     (line   63)
  * mwarn-multiple-fast-interrupts:        RX Options.         (line  141)
! * mwbnoinvd:                             x86 Options.        (line 1008)
  * mwide-bitfields:                       MCore Options.      (line   21)
! * mwidekl:                               x86 Options.        (line 1062)
  * mwin32:                                x86 Windows Options.
                                                               (line   54)
  * mwindows:                              x86 Windows Options.
                                                               (line   60)
  * mword-relocations:                     ARM Options.        (line  917)
! * mx32:                                  x86 Options.        (line 1743)
  * mxgot:                                 M680x0 Options.     (line  311)
  * mxgot <1>:                             MIPS Options.       (line  233)
  * mxl-barrel-shift:                      MicroBlaze Options. (line   31)
--- 74093,74107 ----
                                                               (line  187)
  * mwarn-mcu:                             MSP430 Options.     (line   63)
  * mwarn-multiple-fast-interrupts:        RX Options.         (line  141)
! * mwbnoinvd:                             x86 Options.        (line 1007)
  * mwide-bitfields:                       MCore Options.      (line   21)
! * mwidekl:                               x86 Options.        (line 1061)
  * mwin32:                                x86 Windows Options.
                                                               (line   54)
  * mwindows:                              x86 Windows Options.
                                                               (line   60)
  * mword-relocations:                     ARM Options.        (line  917)
! * mx32:                                  x86 Options.        (line 1742)
  * mxgot:                                 M680x0 Options.     (line  311)
  * mxgot <1>:                             MIPS Options.       (line  233)
  * mxl-barrel-shift:                      MicroBlaze Options. (line   31)
*************** look up both forms.
*** 74106,74117 ****
  * mxl-soft-mul:                          MicroBlaze Options. (line   25)
  * mxl-stack-check:                       MicroBlaze Options. (line   40)
  * mxnack:                                AMD GCN Options.    (line   60)
! * mxop:                                  x86 Options.        (line 1015)
  * mxpa:                                  MIPS Options.       (line  415)
! * mxsave:                                x86 Options.        (line 1026)
! * mxsavec:                               x86 Options.        (line 1028)
! * mxsaveopt:                             x86 Options.        (line 1027)
! * mxsaves:                               x86 Options.        (line 1029)
  * mxy:                                   ARC Options.        (line  381)
  * myellowknife:                          RS/6000 and PowerPC Options.
                                                               (line  610)
--- 74117,74128 ----
  * mxl-soft-mul:                          MicroBlaze Options. (line   25)
  * mxl-stack-check:                       MicroBlaze Options. (line   40)
  * mxnack:                                AMD GCN Options.    (line   60)
! * mxop:                                  x86 Options.        (line 1014)
  * mxpa:                                  MIPS Options.       (line  415)
! * mxsave:                                x86 Options.        (line 1025)
! * mxsavec:                               x86 Options.        (line 1027)
! * mxsaveopt:                             x86 Options.        (line 1026)
! * mxsaves:                               x86 Options.        (line 1028)
  * mxy:                                   ARC Options.        (line  381)
  * myellowknife:                          RS/6000 and PowerPC Options.
                                                               (line  610)
*************** look up both forms.
*** 74122,74128 ****
  * mzero-extend:                          MMIX Options.       (line   24)
  * mzvector:                              S/390 and zSeries Options.
                                                               (line  121)
! * no-80387:                              x86 Options.        (line  736)
  * no-block-ops-unaligned-vsx:            RS/6000 and PowerPC Options.
                                                               (line  949)
  * no-canonical-prefixes:                 Directory Options.  (line  163)
--- 74133,74140 ----
  * mzero-extend:                          MMIX Options.       (line   24)
  * mzvector:                              S/390 and zSeries Options.
                                                               (line  121)
! * no_dead_strip_inits_and_terms:         Darwin Options.     (line  204)
! * no-80387:                              x86 Options.        (line  735)
  * no-block-ops-unaligned-vsx:            RS/6000 and PowerPC Options.
                                                               (line  949)
  * no-canonical-prefixes:                 Directory Options.  (line  163)
*************** look up both forms.
*** 74134,74141 ****
  * nocpp:                                 MIPS Options.       (line  655)
  * nodefaultlibs:                         Link Options.       (line  121)
  * nodefaultrpaths:                       Darwin Options.     (line  146)
! * nodevicelib:                           AVR Options.        (line  311)
! * nodevicespecs:                         AVR Options.        (line  314)
  * nofixprebinding:                       Darwin Options.     (line  204)
  * nofpu:                                 RX Options.         (line   15)
  * nolibc:                                Link Options.       (line  133)
--- 74146,74153 ----
  * nocpp:                                 MIPS Options.       (line  655)
  * nodefaultlibs:                         Link Options.       (line  121)
  * nodefaultrpaths:                       Darwin Options.     (line  146)
! * nodevicelib:                           AVR Options.        (line  313)
! * nodevicespecs:                         AVR Options.        (line  316)
  * nofixprebinding:                       Darwin Options.     (line  204)
  * nofpu:                                 RX Options.         (line   15)
  * nolibc:                                Link Options.       (line  133)
*************** look up both forms.
*** 74151,74158 ****
  * nostdinc++ <1>:                        Directory Options.  (line  107)
  * nostdlib:                              Link Options.       (line  145)
  * nostdlib++:                            Link Options.       (line  170)
! * no_dead_strip_inits_and_terms:         Darwin Options.     (line  204)
! * o:                                     Overall Options.    (line  194)
  * O:                                     Optimize Options.   (line   37)
  * O0:                                    Optimize Options.   (line  165)
  * O1:                                    Optimize Options.   (line   37)
--- 74163,74169 ----
  * nostdinc++ <1>:                        Directory Options.  (line  107)
  * nostdlib:                              Link Options.       (line  145)
  * nostdlib++:                            Link Options.       (line  170)
! * o:                                     Overall Options.    (line  198)
  * O:                                     Optimize Options.   (line   37)
  * O0:                                    Optimize Options.   (line  165)
  * O1:                                    Optimize Options.   (line   37)
*************** look up both forms.
*** 74170,74176 ****
                                                               (line  856)
  * pagezero_size:                         Darwin Options.     (line  204)
  * param:                                 Optimize Options.   (line 2816)
! * pass-exit-codes:                       Overall Options.    (line  598)
  * pedantic:                              Standards.          (line   13)
  * pedantic <1>:                          Warning Options.    (line   86)
  * pedantic <2>:                          C Extensions.       (line    6)
--- 74181,74187 ----
                                                               (line  856)
  * pagezero_size:                         Darwin Options.     (line  204)
  * param:                                 Optimize Options.   (line 2816)
! * pass-exit-codes:                       Overall Options.    (line  602)
  * pedantic:                              Standards.          (line   13)
  * pedantic <1>:                          Warning Options.    (line   86)
  * pedantic <2>:                          C Extensions.       (line    6)
*************** look up both forms.
*** 74187,74193 ****
  * pg <1>:                                Common Function Attributes.
                                                               (line  856)
  * pie:                                   Link Options.       (line  180)
! * pipe:                                  Overall Options.    (line  606)
  * plt:                                   RISC-V Options.     (line   11)
  * prebind:                               Darwin Options.     (line  204)
  * prebind_all_twolevel_modules:          Darwin Options.     (line  204)
--- 74198,74204 ----
  * pg <1>:                                Common Function Attributes.
                                                               (line  856)
  * pie:                                   Link Options.       (line  180)
! * pipe:                                  Overall Options.    (line  610)
  * plt:                                   RISC-V Options.     (line   11)
  * prebind:                               Darwin Options.     (line  204)
  * prebind_all_twolevel_modules:          Darwin Options.     (line  204)
*************** look up both forms.
*** 74216,74222 ****
  * read_only_relocs:                      Darwin Options.     (line  204)
  * remap:                                 Preprocessor Options.
                                                               (line  400)
! * S:                                     Overall Options.    (line  177)
  * S <1>:                                 Link Options.       (line   17)
  * s:                                     Link Options.       (line  215)
  * save-temps:                            Developer Options.  (line  814)
--- 74227,74233 ----
  * read_only_relocs:                      Darwin Options.     (line  204)
  * remap:                                 Preprocessor Options.
                                                               (line  400)
! * S:                                     Overall Options.    (line  181)
  * S <1>:                                 Link Options.       (line   17)
  * s:                                     Link Options.       (line  215)
  * save-temps:                            Developer Options.  (line  814)
*************** look up both forms.
*** 74227,74232 ****
--- 74238,74245 ----
  * sectobjectsymbols:                     Darwin Options.     (line  204)
  * sectobjectsymbols <1>:                 Darwin Options.     (line  204)
  * sectorder:                             Darwin Options.     (line  204)
+ * seg_addr_table:                        Darwin Options.     (line  204)
+ * seg_addr_table_filename:               Darwin Options.     (line  204)
  * seg1addr:                              Darwin Options.     (line  204)
  * segaddr:                               Darwin Options.     (line  204)
  * seglinkedit:                           Darwin Options.     (line  204)
*************** look up both forms.
*** 74235,74250 ****
  * segs_read_only_addr <1>:               Darwin Options.     (line  204)
  * segs_read_write_addr:                  Darwin Options.     (line  204)
  * segs_read_write_addr <1>:              Darwin Options.     (line  204)
- * seg_addr_table:                        Darwin Options.     (line  204)
- * seg_addr_table_filename:               Darwin Options.     (line  204)
  * shared:                                Link Options.       (line  224)
  * shared-libgcc:                         Link Options.       (line  231)
  * short-calls:                           Adapteva Epiphany Options.
                                                               (line   60)
! * sim:                                   CRIS Options.       (line   81)
! * sim2:                                  CRIS Options.       (line   86)
  * single_module:                         Darwin Options.     (line  204)
! * specs:                                 Overall Options.    (line  612)
  * static:                                Link Options.       (line  219)
  * static <1>:                            Darwin Options.     (line  204)
  * static <2>:                            HPPA Options.       (line  223)
--- 74248,74261 ----
  * segs_read_only_addr <1>:               Darwin Options.     (line  204)
  * segs_read_write_addr:                  Darwin Options.     (line  204)
  * segs_read_write_addr <1>:              Darwin Options.     (line  204)
  * shared:                                Link Options.       (line  224)
  * shared-libgcc:                         Link Options.       (line  231)
  * short-calls:                           Adapteva Epiphany Options.
                                                               (line   60)
! * sim:                                   CRIS Options.       (line   80)
! * sim2:                                  CRIS Options.       (line   85)
  * single_module:                         Darwin Options.     (line  204)
! * specs:                                 Overall Options.    (line  616)
  * static:                                Link Options.       (line  219)
  * static <1>:                            Darwin Options.     (line  204)
  * static <2>:                            HPPA Options.       (line  223)
*************** look up both forms.
*** 74266,74272 ****
  * symbolic:                              Link Options.       (line  310)
  * sysroot:                               Directory Options.  (line  167)
  * T:                                     Link Options.       (line  316)
! * target-help:                           Overall Options.    (line  488)
  * threads:                               HPPA Options.       (line  236)
  * time:                                  Developer Options.  (line  834)
  * tno-android-cc:                        GNU/Linux Options.  (line   35)
--- 74277,74283 ----
  * symbolic:                              Link Options.       (line  310)
  * sysroot:                               Directory Options.  (line  167)
  * T:                                     Link Options.       (line  316)
! * target-help:                           Overall Options.    (line  492)
  * threads:                               HPPA Options.       (line  236)
  * time:                                  Developer Options.  (line  834)
  * tno-android-cc:                        GNU/Linux Options.  (line   35)
*************** look up both forms.
*** 74287,74294 ****
                                                               (line   65)
  * undefined:                             Darwin Options.     (line  204)
  * unexported_symbols_list:               Darwin Options.     (line  204)
! * v:                                     Overall Options.    (line  467)
! * version:                               Overall Options.    (line  595)
  * w:                                     Warning Options.    (line   24)
  * W:                                     Warning Options.    (line  289)
  * W <1>:                                 Warning Options.    (line 3380)
--- 74298,74305 ----
                                                               (line   65)
  * undefined:                             Darwin Options.     (line  204)
  * unexported_symbols_list:               Darwin Options.     (line  204)
! * v:                                     Overall Options.    (line  471)
! * version:                               Overall Options.    (line  599)
  * w:                                     Warning Options.    (line   24)
  * W:                                     Warning Options.    (line  289)
  * W <1>:                                 Warning Options.    (line 3380)
*************** look up both forms.
*** 74299,74305 ****
  * Wabi-tag:                              C++ Dialect Options.
                                                               (line  703)
  * Wabsolute-value:                       Warning Options.    (line 2683)
! * Waddr-space-convert:                   AVR Options.        (line  329)
  * Waddress:                              Warning Options.    (line 3191)
  * Waddress-of-packed-member:             Warning Options.    (line 3225)
  * Waggregate-return:                     Warning Options.    (line 3253)
--- 74310,74316 ----
  * Wabi-tag:                              C++ Dialect Options.
                                                               (line  703)
  * Wabsolute-value:                       Warning Options.    (line 2683)
! * Waddr-space-convert:                   AVR Options.        (line  331)
  * Waddress:                              Warning Options.    (line 3191)
  * Waddress-of-packed-member:             Warning Options.    (line 3225)
  * Waggregate-return:                     Warning Options.    (line 3253)
*************** look up both forms.
*** 74623,74629 ****
  * Wmissing-requires:                     Warning Options.    (line 3410)
  * Wmissing-template-keyword:             Warning Options.    (line 3427)
  * Wmissing-variable-declarations:        Warning Options.    (line 3365)
! * Wmisspelled-isr:                       AVR Options.        (line  334)
  * Wmultichar:                            Warning Options.    (line 3455)
  * Wmultiple-inheritance:                 C++ Dialect Options.
                                                               (line 1341)
--- 74634,74640 ----
  * Wmissing-requires:                     Warning Options.    (line 3410)
  * Wmissing-template-keyword:             Warning Options.    (line 3427)
  * Wmissing-variable-declarations:        Warning Options.    (line 3365)
! * Wmisspelled-isr:                       AVR Options.        (line  336)
  * Wmultichar:                            Warning Options.    (line 3455)
  * Wmultiple-inheritance:                 C++ Dialect Options.
                                                               (line 1341)
*************** look up both forms.
*** 74635,74641 ****
  * Wnested-externs:                       Warning Options.    (line 3630)
  * Wno-abi:                               Warning Options.    (line  340)
  * Wno-absolute-value:                    Warning Options.    (line 2683)
! * Wno-addr-space-convert:                AVR Options.        (line  329)
  * Wno-address:                           Warning Options.    (line 3191)
  * Wno-address-of-packed-member:          Warning Options.    (line 3225)
  * Wno-aggregate-return:                  Warning Options.    (line 3253)
--- 74646,74652 ----
  * Wnested-externs:                       Warning Options.    (line 3630)
  * Wno-abi:                               Warning Options.    (line  340)
  * Wno-absolute-value:                    Warning Options.    (line 2683)
! * Wno-addr-space-convert:                AVR Options.        (line  331)
  * Wno-address:                           Warning Options.    (line 3191)
  * Wno-address-of-packed-member:          Warning Options.    (line 3225)
  * Wno-aggregate-return:                  Warning Options.    (line 3253)
*************** look up both forms.
*** 74939,74945 ****
  * Wno-missing-requires:                  Warning Options.    (line 3410)
  * Wno-missing-template-keyword:          Warning Options.    (line 3427)
  * Wno-missing-variable-declarations:     Warning Options.    (line 3365)
! * Wno-misspelled-isr:                    AVR Options.        (line  334)
  * Wno-multichar:                         Warning Options.    (line 3455)
  * Wno-multiple-inheritance:              C++ Dialect Options.
                                                               (line 1341)
--- 74950,74956 ----
  * Wno-missing-requires:                  Warning Options.    (line 3410)
  * Wno-missing-template-keyword:          Warning Options.    (line 3427)
  * Wno-missing-variable-declarations:     Warning Options.    (line 3365)
! * Wno-misspelled-isr:                    AVR Options.        (line  336)
  * Wno-multichar:                         Warning Options.    (line 3455)
  * Wno-multiple-inheritance:              C++ Dialect Options.
                                                               (line 1341)
*************** look up both forms.
*** 75188,75194 ****
                                                               (line  179)
  * Wrange-loop-construct:                 C++ Dialect Options.
                                                               (line 1112)
! * wrapper:                               Overall Options.    (line  621)
  * Wredundant-decls:                      Warning Options.    (line 3607)
  * Wredundant-move:                       C++ Dialect Options.
                                                               (line 1073)
--- 75199,75205 ----
                                                               (line  179)
  * Wrange-loop-construct:                 C++ Dialect Options.
                                                               (line 1112)
! * wrapper:                               Overall Options.    (line  625)
  * Wredundant-decls:                      Warning Options.    (line 3607)
  * Wredundant-move:                       C++ Dialect Options.
                                                               (line 1073)
*************** A.2 Concept and Symbol Index
*** 75341,75419 ****
  [index]
  * Menu:
  
- * #pragma:                               Pragmas.            (line    6)
- * #pragma implementation:                C++ Interface.      (line   34)
- * #pragma implementation, implied:       C++ Interface.      (line   43)
- * #pragma interface:                     C++ Interface.      (line   15)
- * $:                                     Dollar Signs.       (line    6)
- * % in constraint:                       Modifiers.          (line   52)
- * %include:                              Spec Files.         (line   25)
- * %include_noerr:                        Spec Files.         (line   29)
- * %rename:                               Spec Files.         (line   33)
- * & in constraint:                       Modifiers.          (line   25)
- * ':                                     Incompatibilities.  (line  116)
- * + in constraint:                       Modifiers.          (line   12)
- * -lgcc, use with -nodefaultlibs:        Link Options.       (line  157)
- * -lgcc, use with -nostdlib:             Link Options.       (line  157)
- * -march feature modifiers:              AArch64 Options.    (line  373)
- * -mcpu feature modifiers:               AArch64 Options.    (line  373)
- * -nodefaultlibs and unresolved references: Link Options.    (line  157)
- * -nostdlib and unresolved references:   Link Options.       (line  157)
- * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
-                                                              (line  705)
- * //:                                    C++ Comments.       (line    6)
- * 0 in constraint:                       Simple Constraints. (line  125)
- * < in constraint:                       Simple Constraints. (line   47)
- * = in constraint:                       Modifiers.          (line    8)
- * > in constraint:                       Simple Constraints. (line   59)
- * ?: extensions:                         Conditionals.       (line    6)
- * ?: side effect:                        Conditionals.       (line   20)
  * _ in variables in macros:              Typeof.             (line   46)
- * _Accum data type:                      Fixed-Point.        (line    6)
- * _Complex keyword:                      Complex.            (line    6)
- * _Decimal128 data type:                 Decimal Float.      (line    6)
- * _Decimal32 data type:                  Decimal Float.      (line    6)
- * _Decimal64 data type:                  Decimal Float.      (line    6)
- * _Exit:                                 Other Builtins.     (line    6)
- * _exit:                                 Other Builtins.     (line    6)
- * _FloatN data types:                    Floating Types.     (line    6)
- * _FloatNx data types:                   Floating Types.     (line    6)
- * _Fract data type:                      Fixed-Point.        (line    6)
- * _get_ssp:                              x86 control-flow protection intrinsics.
-                                                              (line    6)
- * _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
-                                                              (line   47)
- * _HTM_TBEGIN_INDETERMINATE:             S/390 System z Built-in Functions.
-                                                              (line   35)
- * _HTM_TBEGIN_PERSISTENT:                S/390 System z Built-in Functions.
-                                                              (line   43)
- * _HTM_TBEGIN_STARTED:                   S/390 System z Built-in Functions.
-                                                              (line   31)
- * _HTM_TBEGIN_TRANSIENT:                 S/390 System z Built-in Functions.
-                                                              (line   39)
- * _inc_ssp:                              x86 control-flow protection intrinsics.
-                                                              (line   12)
- * _Sat data type:                        Fixed-Point.        (line    6)
- * _xabort:                               x86 transactional memory intrinsics.
-                                                              (line   62)
- * _XABORT_CAPACITY:                      x86 transactional memory intrinsics.
-                                                              (line   40)
- * _XABORT_CONFLICT:                      x86 transactional memory intrinsics.
-                                                              (line   36)
- * _XABORT_DEBUG:                         x86 transactional memory intrinsics.
-                                                              (line   44)
- * _XABORT_EXPLICIT:                      x86 transactional memory intrinsics.
-                                                              (line   28)
- * _XABORT_NESTED:                        x86 transactional memory intrinsics.
-                                                              (line   47)
- * _XABORT_RETRY:                         x86 transactional memory intrinsics.
-                                                              (line   33)
- * _xbegin:                               x86 transactional memory intrinsics.
-                                                              (line   19)
- * _xend:                                 x86 transactional memory intrinsics.
-                                                              (line   53)
- * _xtest:                                x86 transactional memory intrinsics.
-                                                              (line   58)
  * __atomic_add_fetch:                    __atomic Builtins.  (line  177)
  * __atomic_always_lock_free:             __atomic Builtins.  (line  265)
  * __atomic_and_fetch:                    __atomic Builtins.  (line  181)
--- 75352,75358 ----
*************** A.2 Concept and Symbol Index
*** 75441,75446 ****
--- 75380,75419 ----
  * __atomic_thread_fence:                 __atomic Builtins.  (line  251)
  * __atomic_xor_fetch:                    __atomic Builtins.  (line  183)
  * __auto_type in GNU C:                  Typeof.             (line   90)
+ * __builtin___clear_cache:               Other Builtins.     (line  772)
+ * __builtin___memcpy_chk:                Object Size Checking.
+                                                              (line    9)
+ * __builtin___memmove_chk:               Object Size Checking.
+                                                              (line    9)
+ * __builtin___mempcpy_chk:               Object Size Checking.
+                                                              (line    9)
+ * __builtin___memset_chk:                Object Size Checking.
+                                                              (line    9)
+ * __builtin___snprintf_chk:              Object Size Checking.
+                                                              (line  122)
+ * __builtin___sprintf_chk:               Object Size Checking.
+                                                              (line  120)
+ * __builtin___stpcpy_chk:                Object Size Checking.
+                                                              (line    9)
+ * __builtin___strcat_chk:                Object Size Checking.
+                                                              (line    9)
+ * __builtin___strcpy_chk:                Object Size Checking.
+                                                              (line    9)
+ * __builtin___strncat_chk:               Object Size Checking.
+                                                              (line    9)
+ * __builtin___strncpy_chk:               Object Size Checking.
+                                                              (line    9)
+ * __builtin___strub_enter:               Stack Scrubbing.    (line   25)
+ * __builtin___strub_leave:               Stack Scrubbing.    (line   38)
+ * __builtin___strub_update:              Stack Scrubbing.    (line   31)
+ * __builtin___vsnprintf_chk:             Object Size Checking.
+                                                              (line  126)
+ * __builtin___vsprintf_chk:              Object Size Checking.
+                                                              (line  124)
+ * __builtin_add_overflow:                Integer Overflow Builtins.
+                                                              (line    9)
+ * __builtin_add_overflow_p:              Integer Overflow Builtins.
+                                                              (line   86)
  * __builtin_addc:                        Integer Overflow Builtins.
                                                               (line  129)
  * __builtin_addcl:                       Integer Overflow Builtins.
*************** A.2 Concept and Symbol Index
*** 75449,75458 ****
                                                               (line  135)
  * __builtin_addf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   15)
- * __builtin_add_overflow:                Integer Overflow Builtins.
-                                                              (line    9)
- * __builtin_add_overflow_p:              Integer Overflow Builtins.
-                                                              (line   86)
  * __builtin_alloca:                      Other Builtins.     (line  138)
  * __builtin_alloca_with_align:           Other Builtins.     (line  175)
  * __builtin_alloca_with_align_and_max:   Other Builtins.     (line  220)
--- 75422,75427 ----
*************** A.2 Concept and Symbol Index
*** 75588,75594 ****
  * __builtin_divf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   30)
  * __builtin_dynamic_object_size:         Object Size Checking.
!                                                              (line   56)
  * __builtin_dynamic_object_size <1>:     Other Builtins.     (line  830)
  * __builtin_expect:                      Other Builtins.     (line  599)
  * __builtin_expect_with_probability:     Other Builtins.     (line  634)
--- 75557,75563 ----
  * __builtin_divf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   30)
  * __builtin_dynamic_object_size:         Object Size Checking.
!                                                              (line   57)
  * __builtin_dynamic_object_size <1>:     Other Builtins.     (line  830)
  * __builtin_expect:                      Other Builtins.     (line  599)
  * __builtin_expect_with_probability:     Other Builtins.     (line  634)
*************** A.2 Concept and Symbol Index
*** 75669,75674 ****
--- 75638,75644 ----
  * __builtin_infl:                        Other Builtins.     (line  910)
  * __builtin_infq:                        x86 Built-in Functions.
                                                               (line   46)
+ * __builtin_is_constant_evaluated:       Other Builtins.     (line  547)
  * __builtin_iseqsig:                     Other Builtins.     (line    6)
  * __builtin_isfinite:                    Other Builtins.     (line    6)
  * __builtin_isgreater:                   Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 75677,75691 ****
  * __builtin_isnormal:                    Other Builtins.     (line    6)
  * __builtin_issignaling:                 Other Builtins.     (line  996)
  * __builtin_isunordered:                 Other Builtins.     (line    6)
- * __builtin_is_constant_evaluated:       Other Builtins.     (line  547)
  * __builtin_LINE:                        Other Builtins.     (line  732)
  * __builtin_longjmp:                     Nonlocal Gotos.     (line   37)
- * __builtin_mulf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
-                                                              (line   25)
  * __builtin_mul_overflow:                Integer Overflow Builtins.
                                                               (line   63)
  * __builtin_mul_overflow_p:              Integer Overflow Builtins.
                                                               (line   90)
  * __builtin_nan:                         Other Builtins.     (line  928)
  * __builtin_nand128:                     Other Builtins.     (line  950)
  * __builtin_nand32:                      Other Builtins.     (line  944)
--- 75647,75660 ----
  * __builtin_isnormal:                    Other Builtins.     (line    6)
  * __builtin_issignaling:                 Other Builtins.     (line  996)
  * __builtin_isunordered:                 Other Builtins.     (line    6)
  * __builtin_LINE:                        Other Builtins.     (line  732)
  * __builtin_longjmp:                     Nonlocal Gotos.     (line   37)
  * __builtin_mul_overflow:                Integer Overflow Builtins.
                                                               (line   63)
  * __builtin_mul_overflow_p:              Integer Overflow Builtins.
                                                               (line   90)
+ * __builtin_mulf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
+                                                              (line   25)
  * __builtin_nan:                         Other Builtins.     (line  928)
  * __builtin_nand128:                     Other Builtins.     (line  950)
  * __builtin_nand32:                      Other Builtins.     (line  944)
*************** A.2 Concept and Symbol Index
*** 75876,75893 ****
                                                               (line  517)
  * __builtin_riscv_cv_simd_and_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  521)
- * __builtin_riscv_cv_simd_avgu_b:        CORE-V Built-in Functions.
-                                                              (line  273)
- * __builtin_riscv_cv_simd_avgu_h:        CORE-V Built-in Functions.
-                                                              (line  269)
- * __builtin_riscv_cv_simd_avgu_sc_b:     CORE-V Built-in Functions.
-                                                              (line  285)
- * __builtin_riscv_cv_simd_avgu_sc_b <1>: CORE-V Built-in Functions.
-                                                              (line  289)
- * __builtin_riscv_cv_simd_avgu_sc_h:     CORE-V Built-in Functions.
-                                                              (line  277)
- * __builtin_riscv_cv_simd_avgu_sc_h <1>: CORE-V Built-in Functions.
-                                                              (line  281)
  * __builtin_riscv_cv_simd_avg_b:         CORE-V Built-in Functions.
                                                               (line  249)
  * __builtin_riscv_cv_simd_avg_h:         CORE-V Built-in Functions.
--- 75845,75850 ----
*************** A.2 Concept and Symbol Index
*** 75900,75905 ****
--- 75857,75874 ----
                                                               (line  253)
  * __builtin_riscv_cv_simd_avg_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  257)
+ * __builtin_riscv_cv_simd_avgu_b:        CORE-V Built-in Functions.
+                                                              (line  273)
+ * __builtin_riscv_cv_simd_avgu_h:        CORE-V Built-in Functions.
+                                                              (line  269)
+ * __builtin_riscv_cv_simd_avgu_sc_b:     CORE-V Built-in Functions.
+                                                              (line  285)
+ * __builtin_riscv_cv_simd_avgu_sc_b <1>: CORE-V Built-in Functions.
+                                                              (line  289)
+ * __builtin_riscv_cv_simd_avgu_sc_h:     CORE-V Built-in Functions.
+                                                              (line  277)
+ * __builtin_riscv_cv_simd_avgu_sc_h <1>: CORE-V Built-in Functions.
+                                                              (line  281)
  * __builtin_riscv_cv_simd_cmpeq_b:       CORE-V Built-in Functions.
                                                               (line  763)
  * __builtin_riscv_cv_simd_cmpeq_h:       CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 75912,75929 ****
                                                               (line  767)
  * __builtin_riscv_cv_simd_cmpeq_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  771)
- * __builtin_riscv_cv_simd_cmpgeu_b:      CORE-V Built-in Functions.
-                                                              (line  931)
- * __builtin_riscv_cv_simd_cmpgeu_h:      CORE-V Built-in Functions.
-                                                              (line  927)
- * __builtin_riscv_cv_simd_cmpgeu_sc_b:   CORE-V Built-in Functions.
-                                                              (line  943)
- * __builtin_riscv_cv_simd_cmpgeu_sc_b <1>: CORE-V Built-in Functions.
-                                                              (line  947)
- * __builtin_riscv_cv_simd_cmpgeu_sc_h:   CORE-V Built-in Functions.
-                                                              (line  935)
- * __builtin_riscv_cv_simd_cmpgeu_sc_h <1>: CORE-V Built-in Functions.
-                                                              (line  939)
  * __builtin_riscv_cv_simd_cmpge_b:       CORE-V Built-in Functions.
                                                               (line  835)
  * __builtin_riscv_cv_simd_cmpge_h:       CORE-V Built-in Functions.
--- 75881,75886 ----
*************** A.2 Concept and Symbol Index
*** 75936,75953 ****
                                                               (line  839)
  * __builtin_riscv_cv_simd_cmpge_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  843)
! * __builtin_riscv_cv_simd_cmpgtu_b:      CORE-V Built-in Functions.
!                                                              (line  907)
! * __builtin_riscv_cv_simd_cmpgtu_h:      CORE-V Built-in Functions.
!                                                              (line  903)
! * __builtin_riscv_cv_simd_cmpgtu_sc_b:   CORE-V Built-in Functions.
!                                                              (line  919)
! * __builtin_riscv_cv_simd_cmpgtu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  923)
! * __builtin_riscv_cv_simd_cmpgtu_sc_h:   CORE-V Built-in Functions.
!                                                              (line  911)
! * __builtin_riscv_cv_simd_cmpgtu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  915)
  * __builtin_riscv_cv_simd_cmpgt_b:       CORE-V Built-in Functions.
                                                               (line  811)
  * __builtin_riscv_cv_simd_cmpgt_h:       CORE-V Built-in Functions.
--- 75893,75910 ----
                                                               (line  839)
  * __builtin_riscv_cv_simd_cmpge_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  843)
! * __builtin_riscv_cv_simd_cmpgeu_b:      CORE-V Built-in Functions.
!                                                              (line  931)
! * __builtin_riscv_cv_simd_cmpgeu_h:      CORE-V Built-in Functions.
!                                                              (line  927)
! * __builtin_riscv_cv_simd_cmpgeu_sc_b:   CORE-V Built-in Functions.
!                                                              (line  943)
! * __builtin_riscv_cv_simd_cmpgeu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  947)
! * __builtin_riscv_cv_simd_cmpgeu_sc_h:   CORE-V Built-in Functions.
!                                                              (line  935)
! * __builtin_riscv_cv_simd_cmpgeu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  939)
  * __builtin_riscv_cv_simd_cmpgt_b:       CORE-V Built-in Functions.
                                                               (line  811)
  * __builtin_riscv_cv_simd_cmpgt_h:       CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 75960,75977 ****
                                                               (line  815)
  * __builtin_riscv_cv_simd_cmpgt_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  819)
! * __builtin_riscv_cv_simd_cmpleu_b:      CORE-V Built-in Functions.
!                                                              (line  979)
! * __builtin_riscv_cv_simd_cmpleu_h:      CORE-V Built-in Functions.
!                                                              (line  975)
! * __builtin_riscv_cv_simd_cmpleu_sc_b:   CORE-V Built-in Functions.
!                                                              (line  991)
! * __builtin_riscv_cv_simd_cmpleu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  995)
! * __builtin_riscv_cv_simd_cmpleu_sc_h:   CORE-V Built-in Functions.
!                                                              (line  983)
! * __builtin_riscv_cv_simd_cmpleu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  987)
  * __builtin_riscv_cv_simd_cmple_b:       CORE-V Built-in Functions.
                                                               (line  883)
  * __builtin_riscv_cv_simd_cmple_h:       CORE-V Built-in Functions.
--- 75917,75934 ----
                                                               (line  815)
  * __builtin_riscv_cv_simd_cmpgt_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  819)
! * __builtin_riscv_cv_simd_cmpgtu_b:      CORE-V Built-in Functions.
!                                                              (line  907)
! * __builtin_riscv_cv_simd_cmpgtu_h:      CORE-V Built-in Functions.
!                                                              (line  903)
! * __builtin_riscv_cv_simd_cmpgtu_sc_b:   CORE-V Built-in Functions.
!                                                              (line  919)
! * __builtin_riscv_cv_simd_cmpgtu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  923)
! * __builtin_riscv_cv_simd_cmpgtu_sc_h:   CORE-V Built-in Functions.
!                                                              (line  911)
! * __builtin_riscv_cv_simd_cmpgtu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  915)
  * __builtin_riscv_cv_simd_cmple_b:       CORE-V Built-in Functions.
                                                               (line  883)
  * __builtin_riscv_cv_simd_cmple_h:       CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 75984,76001 ****
                                                               (line  887)
  * __builtin_riscv_cv_simd_cmple_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  891)
! * __builtin_riscv_cv_simd_cmpltu_b:      CORE-V Built-in Functions.
!                                                              (line  955)
! * __builtin_riscv_cv_simd_cmpltu_h:      CORE-V Built-in Functions.
!                                                              (line  951)
! * __builtin_riscv_cv_simd_cmpltu_sc_b:   CORE-V Built-in Functions.
!                                                              (line  967)
! * __builtin_riscv_cv_simd_cmpltu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  971)
! * __builtin_riscv_cv_simd_cmpltu_sc_h:   CORE-V Built-in Functions.
!                                                              (line  959)
! * __builtin_riscv_cv_simd_cmpltu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  963)
  * __builtin_riscv_cv_simd_cmplt_b:       CORE-V Built-in Functions.
                                                               (line  859)
  * __builtin_riscv_cv_simd_cmplt_h:       CORE-V Built-in Functions.
--- 75941,75958 ----
                                                               (line  887)
  * __builtin_riscv_cv_simd_cmple_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  891)
! * __builtin_riscv_cv_simd_cmpleu_b:      CORE-V Built-in Functions.
!                                                              (line  979)
! * __builtin_riscv_cv_simd_cmpleu_h:      CORE-V Built-in Functions.
!                                                              (line  975)
! * __builtin_riscv_cv_simd_cmpleu_sc_b:   CORE-V Built-in Functions.
!                                                              (line  991)
! * __builtin_riscv_cv_simd_cmpleu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  995)
! * __builtin_riscv_cv_simd_cmpleu_sc_h:   CORE-V Built-in Functions.
!                                                              (line  983)
! * __builtin_riscv_cv_simd_cmpleu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  987)
  * __builtin_riscv_cv_simd_cmplt_b:       CORE-V Built-in Functions.
                                                               (line  859)
  * __builtin_riscv_cv_simd_cmplt_h:       CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76008,76013 ****
--- 75965,75982 ----
                                                               (line  863)
  * __builtin_riscv_cv_simd_cmplt_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  867)
+ * __builtin_riscv_cv_simd_cmpltu_b:      CORE-V Built-in Functions.
+                                                              (line  955)
+ * __builtin_riscv_cv_simd_cmpltu_h:      CORE-V Built-in Functions.
+                                                              (line  951)
+ * __builtin_riscv_cv_simd_cmpltu_sc_b:   CORE-V Built-in Functions.
+                                                              (line  967)
+ * __builtin_riscv_cv_simd_cmpltu_sc_b <1>: CORE-V Built-in Functions.
+                                                              (line  971)
+ * __builtin_riscv_cv_simd_cmpltu_sc_h:   CORE-V Built-in Functions.
+                                                              (line  959)
+ * __builtin_riscv_cv_simd_cmpltu_sc_h <1>: CORE-V Built-in Functions.
+                                                              (line  963)
  * __builtin_riscv_cv_simd_cmpne_b:       CORE-V Built-in Functions.
                                                               (line  787)
  * __builtin_riscv_cv_simd_cmpne_h:       CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76074,76103 ****
                                                               (line  571)
  * __builtin_riscv_cv_simd_dotusp_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  575)
- * __builtin_riscv_cv_simd_extractu_b:    CORE-V Built-in Functions.
-                                                              (line  695)
- * __builtin_riscv_cv_simd_extractu_h:    CORE-V Built-in Functions.
-                                                              (line  691)
  * __builtin_riscv_cv_simd_extract_b:     CORE-V Built-in Functions.
                                                               (line  687)
  * __builtin_riscv_cv_simd_extract_h:     CORE-V Built-in Functions.
                                                               (line  683)
  * __builtin_riscv_cv_simd_insert_b:      CORE-V Built-in Functions.
                                                               (line  703)
  * __builtin_riscv_cv_simd_insert_h:      CORE-V Built-in Functions.
                                                               (line  699)
- * __builtin_riscv_cv_simd_maxu_b:        CORE-V Built-in Functions.
-                                                              (line  369)
- * __builtin_riscv_cv_simd_maxu_h:        CORE-V Built-in Functions.
-                                                              (line  365)
- * __builtin_riscv_cv_simd_maxu_sc_b:     CORE-V Built-in Functions.
-                                                              (line  381)
- * __builtin_riscv_cv_simd_maxu_sc_b <1>: CORE-V Built-in Functions.
-                                                              (line  385)
- * __builtin_riscv_cv_simd_maxu_sc_h:     CORE-V Built-in Functions.
-                                                              (line  373)
- * __builtin_riscv_cv_simd_maxu_sc_h <1>: CORE-V Built-in Functions.
-                                                              (line  377)
  * __builtin_riscv_cv_simd_max_b:         CORE-V Built-in Functions.
                                                               (line  345)
  * __builtin_riscv_cv_simd_max_h:         CORE-V Built-in Functions.
--- 76043,76060 ----
                                                               (line  571)
  * __builtin_riscv_cv_simd_dotusp_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  575)
  * __builtin_riscv_cv_simd_extract_b:     CORE-V Built-in Functions.
                                                               (line  687)
  * __builtin_riscv_cv_simd_extract_h:     CORE-V Built-in Functions.
                                                               (line  683)
+ * __builtin_riscv_cv_simd_extractu_b:    CORE-V Built-in Functions.
+                                                              (line  695)
+ * __builtin_riscv_cv_simd_extractu_h:    CORE-V Built-in Functions.
+                                                              (line  691)
  * __builtin_riscv_cv_simd_insert_b:      CORE-V Built-in Functions.
                                                               (line  703)
  * __builtin_riscv_cv_simd_insert_h:      CORE-V Built-in Functions.
                                                               (line  699)
  * __builtin_riscv_cv_simd_max_b:         CORE-V Built-in Functions.
                                                               (line  345)
  * __builtin_riscv_cv_simd_max_h:         CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76110,76127 ****
                                                               (line  349)
  * __builtin_riscv_cv_simd_max_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  353)
! * __builtin_riscv_cv_simd_minu_b:        CORE-V Built-in Functions.
!                                                              (line  321)
! * __builtin_riscv_cv_simd_minu_h:        CORE-V Built-in Functions.
!                                                              (line  317)
! * __builtin_riscv_cv_simd_minu_sc_b:     CORE-V Built-in Functions.
!                                                              (line  333)
! * __builtin_riscv_cv_simd_minu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  337)
! * __builtin_riscv_cv_simd_minu_sc_h:     CORE-V Built-in Functions.
!                                                              (line  325)
! * __builtin_riscv_cv_simd_minu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  329)
  * __builtin_riscv_cv_simd_min_b:         CORE-V Built-in Functions.
                                                               (line  297)
  * __builtin_riscv_cv_simd_min_h:         CORE-V Built-in Functions.
--- 76067,76084 ----
                                                               (line  349)
  * __builtin_riscv_cv_simd_max_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  353)
! * __builtin_riscv_cv_simd_maxu_b:        CORE-V Built-in Functions.
!                                                              (line  369)
! * __builtin_riscv_cv_simd_maxu_h:        CORE-V Built-in Functions.
!                                                              (line  365)
! * __builtin_riscv_cv_simd_maxu_sc_b:     CORE-V Built-in Functions.
!                                                              (line  381)
! * __builtin_riscv_cv_simd_maxu_sc_b <1>: CORE-V Built-in Functions.
!                                                              (line  385)
! * __builtin_riscv_cv_simd_maxu_sc_h:     CORE-V Built-in Functions.
!                                                              (line  373)
! * __builtin_riscv_cv_simd_maxu_sc_h <1>: CORE-V Built-in Functions.
!                                                              (line  377)
  * __builtin_riscv_cv_simd_min_b:         CORE-V Built-in Functions.
                                                               (line  297)
  * __builtin_riscv_cv_simd_min_h:         CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76134,76139 ****
--- 76091,76108 ----
                                                               (line  301)
  * __builtin_riscv_cv_simd_min_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  305)
+ * __builtin_riscv_cv_simd_minu_b:        CORE-V Built-in Functions.
+                                                              (line  321)
+ * __builtin_riscv_cv_simd_minu_h:        CORE-V Built-in Functions.
+                                                              (line  317)
+ * __builtin_riscv_cv_simd_minu_sc_b:     CORE-V Built-in Functions.
+                                                              (line  333)
+ * __builtin_riscv_cv_simd_minu_sc_b <1>: CORE-V Built-in Functions.
+                                                              (line  337)
+ * __builtin_riscv_cv_simd_minu_sc_h:     CORE-V Built-in Functions.
+                                                              (line  325)
+ * __builtin_riscv_cv_simd_minu_sc_h <1>: CORE-V Built-in Functions.
+                                                              (line  329)
  * __builtin_riscv_cv_simd_or_b:          CORE-V Built-in Functions.
                                                               (line  465)
  * __builtin_riscv_cv_simd_or_h:          CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76190,76195 ****
--- 76159,76170 ----
                                                               (line  643)
  * __builtin_riscv_cv_simd_sdotusp_sc_h <1>: CORE-V Built-in Functions.
                                                               (line  647)
+ * __builtin_riscv_cv_simd_shuffle_b:     CORE-V Built-in Functions.
+                                                              (line  711)
+ * __builtin_riscv_cv_simd_shuffle_h:     CORE-V Built-in Functions.
+                                                              (line  707)
+ * __builtin_riscv_cv_simd_shuffle_sci_h: CORE-V Built-in Functions.
+                                                              (line  715)
  * __builtin_riscv_cv_simd_shuffle2_b:    CORE-V Built-in Functions.
                                                               (line  739)
  * __builtin_riscv_cv_simd_shuffle2_h:    CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76202,76213 ****
                                                               (line  727)
  * __builtin_riscv_cv_simd_shufflei3_sci_b: CORE-V Built-in Functions.
                                                               (line  731)
- * __builtin_riscv_cv_simd_shuffle_b:     CORE-V Built-in Functions.
-                                                              (line  711)
- * __builtin_riscv_cv_simd_shuffle_h:     CORE-V Built-in Functions.
-                                                              (line  707)
- * __builtin_riscv_cv_simd_shuffle_sci_h: CORE-V Built-in Functions.
-                                                              (line  715)
  * __builtin_riscv_cv_simd_sll_b:         CORE-V Built-in Functions.
                                                               (line  441)
  * __builtin_riscv_cv_simd_sll_h:         CORE-V Built-in Functions.
--- 76177,76182 ----
*************** A.2 Concept and Symbol Index
*** 76244,76257 ****
                                                               (line  397)
  * __builtin_riscv_cv_simd_srl_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  401)
- * __builtin_riscv_cv_simd_subrotmj:      CORE-V Built-in Functions.
-                                                              (line 1035)
- * __builtin_riscv_cv_simd_subrotmj <1>:  CORE-V Built-in Functions.
-                                                              (line 1039)
- * __builtin_riscv_cv_simd_subrotmj <2>:  CORE-V Built-in Functions.
-                                                              (line 1043)
- * __builtin_riscv_cv_simd_subrotmj <3>:  CORE-V Built-in Functions.
-                                                              (line 1047)
  * __builtin_riscv_cv_simd_sub_b:         CORE-V Built-in Functions.
                                                               (line  225)
  * __builtin_riscv_cv_simd_sub_h:         CORE-V Built-in Functions.
--- 76213,76218 ----
*************** A.2 Concept and Symbol Index
*** 76270,76275 ****
--- 76231,76244 ----
                                                               (line  229)
  * __builtin_riscv_cv_simd_sub_sc_h <1>:  CORE-V Built-in Functions.
                                                               (line  233)
+ * __builtin_riscv_cv_simd_subrotmj:      CORE-V Built-in Functions.
+                                                              (line 1035)
+ * __builtin_riscv_cv_simd_subrotmj <1>:  CORE-V Built-in Functions.
+                                                              (line 1039)
+ * __builtin_riscv_cv_simd_subrotmj <2>:  CORE-V Built-in Functions.
+                                                              (line 1043)
+ * __builtin_riscv_cv_simd_subrotmj <3>:  CORE-V Built-in Functions.
+                                                              (line 1047)
  * __builtin_riscv_cv_simd_xor_b:         CORE-V Built-in Functions.
                                                               (line  489)
  * __builtin_riscv_cv_simd_xor_h:         CORE-V Built-in Functions.
*************** A.2 Concept and Symbol Index
*** 76326,76362 ****
                                                               (line   91)
  * __builtin_rx_wait:                     RX Built-in Functions.
                                                               (line   95)
- * __builtin_saddll_overflow:             Integer Overflow Builtins.
-                                                              (line   15)
- * __builtin_saddl_overflow:              Integer Overflow Builtins.
-                                                              (line   13)
  * __builtin_sadd_overflow:               Integer Overflow Builtins.
                                                               (line   11)
! * __builtin_setjmp:                      Nonlocal Gotos.     (line   32)
  * __builtin_set_thread_pointer:          SH Built-in Functions.
                                                               (line    9)
! * __builtin_shuffle:                     Vector Extensions.  (line  135)
! * __builtin_shufflevector:               Vector Extensions.  (line  173)
  * __builtin_sh_get_fpscr:                SH Built-in Functions.
                                                               (line   35)
  * __builtin_sh_set_fpscr:                SH Built-in Functions.
                                                               (line   38)
! * __builtin_smulll_overflow:             Integer Overflow Builtins.
!                                                              (line   69)
! * __builtin_smull_overflow:              Integer Overflow Builtins.
!                                                              (line   67)
  * __builtin_smul_overflow:               Integer Overflow Builtins.
                                                               (line   65)
  * __builtin_speculation_safe_value:      Other Builtins.     (line    6)
  * __builtin_speculation_safe_value <1>:  Other Builtins.     (line  270)
  * __builtin_sqrtf128_round_to_odd:       Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   35)
- * __builtin_ssubll_overflow:             Integer Overflow Builtins.
-                                                              (line   49)
- * __builtin_ssubl_overflow:              Integer Overflow Builtins.
-                                                              (line   47)
  * __builtin_ssub_overflow:               Integer Overflow Builtins.
                                                               (line   45)
  * __builtin_stack_address:               Return Address.     (line   92)
  * __builtin_stdc_bit_ceil:               Other Builtins.     (line 1116)
  * __builtin_stdc_bit_floor:              Other Builtins.     (line 1125)
--- 76295,76331 ----
                                                               (line   91)
  * __builtin_rx_wait:                     RX Built-in Functions.
                                                               (line   95)
  * __builtin_sadd_overflow:               Integer Overflow Builtins.
                                                               (line   11)
! * __builtin_saddl_overflow:              Integer Overflow Builtins.
!                                                              (line   13)
! * __builtin_saddll_overflow:             Integer Overflow Builtins.
!                                                              (line   15)
  * __builtin_set_thread_pointer:          SH Built-in Functions.
                                                               (line    9)
! * __builtin_setjmp:                      Nonlocal Gotos.     (line   32)
  * __builtin_sh_get_fpscr:                SH Built-in Functions.
                                                               (line   35)
  * __builtin_sh_set_fpscr:                SH Built-in Functions.
                                                               (line   38)
! * __builtin_shuffle:                     Vector Extensions.  (line  135)
! * __builtin_shufflevector:               Vector Extensions.  (line  173)
  * __builtin_smul_overflow:               Integer Overflow Builtins.
                                                               (line   65)
+ * __builtin_smull_overflow:              Integer Overflow Builtins.
+                                                              (line   67)
+ * __builtin_smulll_overflow:             Integer Overflow Builtins.
+                                                              (line   69)
  * __builtin_speculation_safe_value:      Other Builtins.     (line    6)
  * __builtin_speculation_safe_value <1>:  Other Builtins.     (line  270)
  * __builtin_sqrtf128_round_to_odd:       Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   35)
  * __builtin_ssub_overflow:               Integer Overflow Builtins.
                                                               (line   45)
+ * __builtin_ssubl_overflow:              Integer Overflow Builtins.
+                                                              (line   47)
+ * __builtin_ssubll_overflow:             Integer Overflow Builtins.
+                                                              (line   49)
  * __builtin_stack_address:               Return Address.     (line   92)
  * __builtin_stdc_bit_ceil:               Other Builtins.     (line 1116)
  * __builtin_stdc_bit_floor:              Other Builtins.     (line 1125)
*************** A.2 Concept and Symbol Index
*** 76372,76377 ****
--- 76341,76350 ----
  * __builtin_stdc_leading_zeros:          Other Builtins.     (line 1205)
  * __builtin_stdc_trailing_ones:          Other Builtins.     (line 1213)
  * __builtin_stdc_trailing_zeros:         Other Builtins.     (line 1221)
+ * __builtin_sub_overflow:                Integer Overflow Builtins.
+                                                              (line   43)
+ * __builtin_sub_overflow_p:              Integer Overflow Builtins.
+                                                              (line   88)
  * __builtin_subc:                        Integer Overflow Builtins.
                                                               (line  153)
  * __builtin_subcl:                       Integer Overflow Builtins.
*************** A.2 Concept and Symbol Index
*** 76380,76401 ****
                                                               (line  159)
  * __builtin_subf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   20)
- * __builtin_sub_overflow:                Integer Overflow Builtins.
-                                                              (line   43)
- * __builtin_sub_overflow_p:              Integer Overflow Builtins.
-                                                              (line   88)
  * __builtin_tabort:                      S/390 System z Built-in Functions.
                                                               (line   85)
  * __builtin_tbegin:                      S/390 System z Built-in Functions.
                                                               (line    6)
- * __builtin_tbeginc:                     S/390 System z Built-in Functions.
-                                                              (line   76)
  * __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
                                                               (line   57)
  * __builtin_tbegin_retry:                S/390 System z Built-in Functions.
                                                               (line   63)
  * __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
                                                               (line   70)
  * __builtin_tend:                        S/390 System z Built-in Functions.
                                                               (line   80)
  * __builtin_tgmath:                      Other Builtins.     (line  445)
--- 76353,76370 ----
                                                               (line  159)
  * __builtin_subf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
                                                               (line   20)
  * __builtin_tabort:                      S/390 System z Built-in Functions.
                                                               (line   85)
  * __builtin_tbegin:                      S/390 System z Built-in Functions.
                                                               (line    6)
  * __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
                                                               (line   57)
  * __builtin_tbegin_retry:                S/390 System z Built-in Functions.
                                                               (line   63)
  * __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
                                                               (line   70)
+ * __builtin_tbeginc:                     S/390 System z Built-in Functions.
+                                                              (line   76)
  * __builtin_tend:                        S/390 System z Built-in Functions.
                                                               (line   80)
  * __builtin_tgmath:                      Other Builtins.     (line  445)
*************** A.2 Concept and Symbol Index
*** 76411,76467 ****
  * __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
                                                               (line   96)
  * __builtin_types_compatible_p:          Other Builtins.     (line  349)
- * __builtin_uaddll_overflow:             Integer Overflow Builtins.
-                                                              (line   21)
- * __builtin_uaddl_overflow:              Integer Overflow Builtins.
-                                                              (line   19)
  * __builtin_uadd_overflow:               Integer Overflow Builtins.
                                                               (line   17)
! * __builtin_umulll_overflow:             Integer Overflow Builtins.
!                                                              (line   75)
! * __builtin_umull_overflow:              Integer Overflow Builtins.
!                                                              (line   73)
  * __builtin_umul_overflow:               Integer Overflow Builtins.
                                                               (line   71)
  * __builtin_unreachable:                 Other Builtins.     (line  650)
- * __builtin_usubll_overflow:             Integer Overflow Builtins.
-                                                              (line   55)
- * __builtin_usubl_overflow:              Integer Overflow Builtins.
-                                                              (line   53)
  * __builtin_usub_overflow:               Integer Overflow Builtins.
                                                               (line   51)
  * __builtin_va_arg_pack:                 Constructing Calls. (line   52)
  * __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
- * __builtin___clear_cache:               Other Builtins.     (line  772)
- * __builtin___memcpy_chk:                Object Size Checking.
-                                                              (line    9)
- * __builtin___memmove_chk:               Object Size Checking.
-                                                              (line    9)
- * __builtin___mempcpy_chk:               Object Size Checking.
-                                                              (line    9)
- * __builtin___memset_chk:                Object Size Checking.
-                                                              (line    9)
- * __builtin___snprintf_chk:              Object Size Checking.
-                                                              (line  121)
- * __builtin___sprintf_chk:               Object Size Checking.
-                                                              (line  119)
- * __builtin___stpcpy_chk:                Object Size Checking.
-                                                              (line    9)
- * __builtin___strcat_chk:                Object Size Checking.
-                                                              (line    9)
- * __builtin___strcpy_chk:                Object Size Checking.
-                                                              (line    9)
- * __builtin___strncat_chk:               Object Size Checking.
-                                                              (line    9)
- * __builtin___strncpy_chk:               Object Size Checking.
-                                                              (line    9)
- * __builtin___strub_enter:               Stack Scrubbing.    (line   25)
- * __builtin___strub_leave:               Stack Scrubbing.    (line   38)
- * __builtin___strub_update:              Stack Scrubbing.    (line   31)
- * __builtin___vsnprintf_chk:             Object Size Checking.
-                                                              (line  125)
- * __builtin___vsprintf_chk:              Object Size Checking.
-                                                              (line  123)
  * __complex__ keyword:                   Complex.            (line    6)
  * __declspec(dllexport):                 Microsoft Windows Function Attributes.
                                                               (line    9)
--- 76380,76406 ----
  * __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
                                                               (line   96)
  * __builtin_types_compatible_p:          Other Builtins.     (line  349)
  * __builtin_uadd_overflow:               Integer Overflow Builtins.
                                                               (line   17)
! * __builtin_uaddl_overflow:              Integer Overflow Builtins.
!                                                              (line   19)
! * __builtin_uaddll_overflow:             Integer Overflow Builtins.
!                                                              (line   21)
  * __builtin_umul_overflow:               Integer Overflow Builtins.
                                                               (line   71)
+ * __builtin_umull_overflow:              Integer Overflow Builtins.
+                                                              (line   73)
+ * __builtin_umulll_overflow:             Integer Overflow Builtins.
+                                                              (line   75)
  * __builtin_unreachable:                 Other Builtins.     (line  650)
  * __builtin_usub_overflow:               Integer Overflow Builtins.
                                                               (line   51)
+ * __builtin_usubl_overflow:              Integer Overflow Builtins.
+                                                              (line   53)
+ * __builtin_usubll_overflow:             Integer Overflow Builtins.
+                                                              (line   55)
  * __builtin_va_arg_pack:                 Constructing Calls. (line   52)
  * __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
  * __complex__ keyword:                   Complex.            (line    6)
  * __declspec(dllexport):                 Microsoft Windows Function Attributes.
                                                               (line    9)
*************** A.2 Concept and Symbol Index
*** 76473,76479 ****
  * __far M32C Named Address Spaces:       Named Address Spaces.
                                                               (line  155)
  * __far RL78 Named Address Spaces:       Named Address Spaces.
!                                                              (line  179)
  * __flash AVR Named Address Spaces:      Named Address Spaces.
                                                               (line   43)
  * __flash1 AVR Named Address Spaces:     Named Address Spaces.
--- 76412,76418 ----
  * __far M32C Named Address Spaces:       Named Address Spaces.
                                                               (line  155)
  * __far RL78 Named Address Spaces:       Named Address Spaces.
!                                                              (line  178)
  * __flash AVR Named Address Spaces:      Named Address Spaces.
                                                               (line   43)
  * __flash1 AVR Named Address Spaces:     Named Address Spaces.
*************** A.2 Concept and Symbol Index
*** 76490,76497 ****
  * __Float16 data type:                   Half-Precision.     (line    6)
  * __float80 data type:                   Floating Types.     (line    6)
  * __fp16 data type:                      Half-Precision.     (line    6)
- * __FUNCTION__ identifier:               Function Names.     (line    6)
  * __func__ identifier:                   Function Names.     (line    6)
  * __halt:                                PRU Built-in Functions.
                                                               (line   20)
  * __has_nothrow_assign:                  Type Traits.        (line   10)
--- 76429,76436 ----
  * __Float16 data type:                   Half-Precision.     (line    6)
  * __float80 data type:                   Floating Types.     (line    6)
  * __fp16 data type:                      Half-Precision.     (line    6)
  * __func__ identifier:                   Function Names.     (line    6)
+ * __FUNCTION__ identifier:               Function Names.     (line    6)
  * __halt:                                PRU Built-in Functions.
                                                               (line   20)
  * __has_nothrow_assign:                  Type Traits.        (line   10)
*************** A.2 Concept and Symbol Index
*** 76527,76537 ****
  * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
  * __real__ keyword:                      Complex.            (line   43)
  * __regio_symbol PRU Named Address Spaces: Named Address Spaces.
!                                                              (line  164)
  * __seg_fs x86 named address space:      Named Address Spaces.
!                                                              (line  190)
  * __seg_gs x86 named address space:      Named Address Spaces.
!                                                              (line  190)
  * __STDC_HOSTED__:                       Standards.          (line   13)
  * __sync_add_and_fetch:                  __sync Builtins.    (line   72)
  * __sync_and_and_fetch:                  __sync Builtins.    (line   78)
--- 76466,76476 ----
  * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
  * __real__ keyword:                      Complex.            (line   43)
  * __regio_symbol PRU Named Address Spaces: Named Address Spaces.
!                                                              (line  163)
  * __seg_fs x86 named address space:      Named Address Spaces.
!                                                              (line  189)
  * __seg_gs x86 named address space:      Named Address Spaces.
!                                                              (line  189)
  * __STDC_HOSTED__:                       Standards.          (line   13)
  * __sync_add_and_fetch:                  __sync Builtins.    (line   72)
  * __sync_and_and_fetch:                  __sync Builtins.    (line   78)
*************** A.2 Concept and Symbol Index
*** 76552,76557 ****
--- 76491,76568 ----
  * __sync_xor_and_fetch:                  __sync Builtins.    (line   80)
  * __thread:                              Thread-Local.       (line    6)
  * __underlying_type:                     Type Traits.        (line  143)
+ * _Accum data type:                      Fixed-Point.        (line    6)
+ * _Complex keyword:                      Complex.            (line    6)
+ * _Decimal128 data type:                 Decimal Float.      (line    6)
+ * _Decimal32 data type:                  Decimal Float.      (line    6)
+ * _Decimal64 data type:                  Decimal Float.      (line    6)
+ * _Exit:                                 Other Builtins.     (line    6)
+ * _exit:                                 Other Builtins.     (line    6)
+ * _FloatN data types:                    Floating Types.     (line    6)
+ * _FloatNx data types:                   Floating Types.     (line    6)
+ * _Fract data type:                      Fixed-Point.        (line    6)
+ * _get_ssp:                              x86 control-flow protection intrinsics.
+                                                              (line    6)
+ * _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
+                                                              (line   47)
+ * _HTM_TBEGIN_INDETERMINATE:             S/390 System z Built-in Functions.
+                                                              (line   35)
+ * _HTM_TBEGIN_PERSISTENT:                S/390 System z Built-in Functions.
+                                                              (line   43)
+ * _HTM_TBEGIN_STARTED:                   S/390 System z Built-in Functions.
+                                                              (line   31)
+ * _HTM_TBEGIN_TRANSIENT:                 S/390 System z Built-in Functions.
+                                                              (line   39)
+ * _inc_ssp:                              x86 control-flow protection intrinsics.
+                                                              (line   12)
+ * _Sat data type:                        Fixed-Point.        (line    6)
+ * _xabort:                               x86 transactional memory intrinsics.
+                                                              (line   62)
+ * _XABORT_CAPACITY:                      x86 transactional memory intrinsics.
+                                                              (line   40)
+ * _XABORT_CONFLICT:                      x86 transactional memory intrinsics.
+                                                              (line   36)
+ * _XABORT_DEBUG:                         x86 transactional memory intrinsics.
+                                                              (line   44)
+ * _XABORT_EXPLICIT:                      x86 transactional memory intrinsics.
+                                                              (line   28)
+ * _XABORT_NESTED:                        x86 transactional memory intrinsics.
+                                                              (line   47)
+ * _XABORT_RETRY:                         x86 transactional memory intrinsics.
+                                                              (line   33)
+ * _xbegin:                               x86 transactional memory intrinsics.
+                                                              (line   19)
+ * _xend:                                 x86 transactional memory intrinsics.
+                                                              (line   53)
+ * _xtest:                                x86 transactional memory intrinsics.
+                                                              (line   58)
+ * -lgcc, use with -nodefaultlibs:        Link Options.       (line  157)
+ * -lgcc, use with -nostdlib:             Link Options.       (line  157)
+ * -march feature modifiers:              AArch64 Options.    (line  373)
+ * -mcpu feature modifiers:               AArch64 Options.    (line  373)
+ * -nodefaultlibs and unresolved references: Link Options.    (line  157)
+ * -nostdlib and unresolved references:   Link Options.       (line  157)
+ * ?: extensions:                         Conditionals.       (line    6)
+ * ?: side effect:                        Conditionals.       (line   20)
+ * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
+                                                              (line  705)
+ * ':                                     Incompatibilities.  (line  116)
+ * //:                                    C++ Comments.       (line    6)
+ * & in constraint:                       Modifiers.          (line   25)
+ * #pragma:                               Pragmas.            (line    6)
+ * #pragma implementation:                C++ Interface.      (line   34)
+ * #pragma implementation, implied:       C++ Interface.      (line   43)
+ * #pragma interface:                     C++ Interface.      (line   15)
+ * % in constraint:                       Modifiers.          (line   52)
+ * %include:                              Spec Files.         (line   25)
+ * %include_noerr:                        Spec Files.         (line   29)
+ * %rename:                               Spec Files.         (line   33)
+ * + in constraint:                       Modifiers.          (line   12)
+ * < in constraint:                       Simple Constraints. (line   47)
+ * = in constraint:                       Modifiers.          (line    8)
+ * > in constraint:                       Simple Constraints. (line   59)
+ * $:                                     Dollar Signs.       (line    6)
+ * 0 in constraint:                       Simple Constraints. (line  125)
  * AArch64 Options:                       AArch64 Options.    (line    6)
  * ABI:                                   Compatibility.      (line    6)
  * abi_tag function attribute:            C++ Attributes.     (line    8)
*************** A.2 Concept and Symbol Index
*** 76590,76597 ****
  * aligned variable attribute:            Common Variable Attributes.
                                                               (line   31)
  * alignment:                             Alignment.          (line    6)
- * alloca:                                Other Builtins.     (line    6)
- * alloca vs variable-length arrays:      Variable Length.    (line   35)
  * alloc_align function attribute:        Common Function Attributes.
                                                               (line  146)
  * alloc_size function attribute:         Common Function Attributes.
--- 76601,76606 ----
*************** A.2 Concept and Symbol Index
*** 76600,76605 ****
--- 76609,76616 ----
                                                               (line   91)
  * alloc_size variable attribute:         Common Variable Attributes.
                                                               (line  106)
+ * alloca:                                Other Builtins.     (line    6)
+ * alloca vs variable-length arrays:      Variable Length.    (line   35)
  * Allow nesting in an interrupt handler on the Blackfin processor: Blackfin Function Attributes.
                                                               (line   44)
  * Altera Nios II options:                Nios II Options.    (line    6)
*************** A.2 Concept and Symbol Index
*** 76628,76636 ****
                                                               (line   97)
  * arch= function attribute, RISC-V:      RISC-V Function Attributes.
                                                               (line   45)
- * ARM options:                           ARM Options.        (line    6)
  * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
                                                               (line    6)
  * arrays of length zero:                 Zero Length.        (line    6)
  * arrays of variable length:             Variable Length.    (line    6)
  * arrays, non-lvalue:                    Subscripting.       (line    6)
--- 76639,76647 ----
                                                               (line   97)
  * arch= function attribute, RISC-V:      RISC-V Function Attributes.
                                                               (line   45)
  * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
                                                               (line    6)
+ * ARM options:                           ARM Options.        (line    6)
  * arrays of length zero:                 Zero Length.        (line    6)
  * arrays of variable length:             Variable Length.    (line    6)
  * arrays, non-lvalue:                    Subscripting.       (line    6)
*************** A.2 Concept and Symbol Index
*** 76663,76671 ****
  * assembly language in C, extended:      Extended Asm.       (line    6)
  * assume statement attribute:            Statement Attributes.
                                                               (line   37)
- * assumes:                               C++ Concepts.       (line   15)
  * assume_aligned function attribute:     Common Function Attributes.
                                                               (line  209)
  * atan:                                  Other Builtins.     (line    6)
  * atan2:                                 Other Builtins.     (line    6)
  * atan2f:                                Other Builtins.     (line    6)
--- 76674,76682 ----
  * assembly language in C, extended:      Extended Asm.       (line    6)
  * assume statement attribute:            Statement Attributes.
                                                               (line   37)
  * assume_aligned function attribute:     Common Function Attributes.
                                                               (line  209)
+ * assumes:                               C++ Concepts.       (line   15)
  * atan:                                  Other Builtins.     (line    6)
  * atan2:                                 Other Builtins.     (line    6)
  * atan2f:                                Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 76721,76726 ****
--- 76732,76740 ----
  * C standard:                            Standards.          (line   13)
  * C standard attributes:                 Attribute Syntax.   (line    6)
  * C standards:                           Standards.          (line   13)
+ * C_INCLUDE_PATH:                        Environment Variables.
+                                                              (line  145)
+ * C-SKY Options:                         C-SKY Options.      (line    6)
  * c++:                                   Invoking G++.       (line   14)
  * C++:                                   G++ and GCC.        (line   29)
  * C++ comments:                          C++ Comments.       (line    6)
*************** A.2 Concept and Symbol Index
*** 76741,76747 ****
  * C++ standard attributes:               Attribute Syntax.   (line    6)
  * C++ static data, declaring and defining: Static Definitions.
                                                               (line    6)
- * C-SKY Options:                         C-SKY Options.      (line    6)
  * C11:                                   Standards.          (line   13)
  * C17:                                   Standards.          (line   13)
  * C1X:                                   Standards.          (line   13)
--- 76755,76760 ----
*************** A.2 Concept and Symbol Index
*** 76827,76836 ****
                                                               (line   26)
  * COBOL:                                 G++ and GCC.        (line   23)
  * code generation conventions:           Code Gen Options.   (line    6)
- * code, mixed with declarations:         Mixed Labels and Declarations.
-                                                              (line    6)
  * code_readable function attribute, MIPS: MIPS Function Attributes.
                                                               (line  119)
  * cold function attribute:               Common Function Attributes.
                                                               (line  226)
  * cold label attribute:                  Label Attributes.   (line   45)
--- 76840,76849 ----
                                                               (line   26)
  * COBOL:                                 G++ and GCC.        (line   23)
  * code generation conventions:           Code Gen Options.   (line    6)
  * code_readable function attribute, MIPS: MIPS Function Attributes.
                                                               (line  119)
+ * code, mixed with declarations:         Mixed Labels and Declarations.
+                                                              (line    6)
  * cold function attribute:               Common Function Attributes.
                                                               (line  226)
  * cold label attribute:                  Label Attributes.   (line   45)
*************** A.2 Concept and Symbol Index
*** 76931,76938 ****
  * ctanl:                                 Other Builtins.     (line    6)
  * CXX_MODULE_MAPPER environment variable: C++ Dialect Options.
                                                               (line  452)
- * C_INCLUDE_PATH:                        Environment Variables.
-                                                              (line  145)
  * D:                                     G++ and GCC.        (line    6)
  * Darwin options:                        Darwin Options.     (line    6)
  * dcgettext:                             Other Builtins.     (line    6)
--- 76944,76949 ----
*************** A.2 Concept and Symbol Index
*** 76952,76964 ****
  * declaring static data in C++:          Static Definitions. (line    6)
  * defining static data in C++:           Static Definitions. (line    6)
  * dependencies for make as output:       Environment Variables.
!                                                              (line  172)
  * dependencies for make as output <1>:   Environment Variables.
!                                                              (line  188)
  * dependencies, make:                    Preprocessor Options.
                                                               (line   76)
- * DEPENDENCIES_OUTPUT:                   Environment Variables.
-                                                              (line  172)
  * dependent name lookup:                 Name lookup.        (line    6)
  * deprecated enumerator attribute:       Enumerator Attributes.
                                                               (line   27)
--- 76963,76975 ----
  * declaring static data in C++:          Static Definitions. (line    6)
  * defining static data in C++:           Static Definitions. (line    6)
  * dependencies for make as output:       Environment Variables.
!                                                              (line  171)
  * dependencies for make as output <1>:   Environment Variables.
!                                                              (line  187)
! * DEPENDENCIES_OUTPUT:                   Environment Variables.
!                                                              (line  171)
  * dependencies, make:                    Preprocessor Options.
                                                               (line   76)
  * dependent name lookup:                 Name lookup.        (line    6)
  * deprecated enumerator attribute:       Enumerator Attributes.
                                                               (line   27)
*************** A.2 Concept and Symbol Index
*** 77018,77024 ****
                                                               (line    8)
  * eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
                                                               (line    8)
! * EIND:                                  AVR Options.        (line  341)
  * either function attribute, MSP430:     MSP430 Function Attributes.
                                                               (line   54)
  * either variable attribute, MSP430:     MSP430 Variable Attributes.
--- 77029,77035 ----
                                                               (line    8)
  * eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
                                                               (line    8)
! * EIND:                                  AVR Options.        (line  343)
  * either function attribute, MSP430:     MSP430 Function Attributes.
                                                               (line   54)
  * either variable attribute, MSP430:     MSP430 Variable Attributes.
*************** A.2 Concept and Symbol Index
*** 77086,77111 ****
                                                               (line   13)
  * far function attribute, MIPS:          MIPS Function Attributes.
                                                               (line   59)
- * fastcall function attribute, x86-32:   x86 Function Attributes.
-                                                              (line   14)
  * fast_interrupt function attribute, M32C: M32C Function Attributes.
                                                               (line   13)
  * fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
                                                               (line   25)
  * fast_interrupt function attribute, RX: RX Function Attributes.
                                                               (line    8)
  * fatal signal:                          Bug Criteria.       (line    9)
- * fdim:                                  Other Builtins.     (line    6)
- * fdimf:                                 Other Builtins.     (line    6)
- * fdiml:                                 Other Builtins.     (line    6)
- * FDL, GNU Free Documentation License:   GNU Free Documentation License.
-                                                              (line    6)
  * fd_arg function attribute:             Common Function Attributes.
                                                               (line  410)
  * fd_arg_read function attribute:        Common Function Attributes.
                                                               (line  427)
  * fd_arg_write function attribute:       Common Function Attributes.
                                                               (line  437)
  * fentry_name function attribute, x86:   x86 Function Attributes.
                                                               (line  774)
  * fentry_section function attribute, x86: x86 Function Attributes.
--- 77097,77122 ----
                                                               (line   13)
  * far function attribute, MIPS:          MIPS Function Attributes.
                                                               (line   59)
  * fast_interrupt function attribute, M32C: M32C Function Attributes.
                                                               (line   13)
  * fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
                                                               (line   25)
  * fast_interrupt function attribute, RX: RX Function Attributes.
                                                               (line    8)
+ * fastcall function attribute, x86-32:   x86 Function Attributes.
+                                                              (line   14)
  * fatal signal:                          Bug Criteria.       (line    9)
  * fd_arg function attribute:             Common Function Attributes.
                                                               (line  410)
  * fd_arg_read function attribute:        Common Function Attributes.
                                                               (line  427)
  * fd_arg_write function attribute:       Common Function Attributes.
                                                               (line  437)
+ * fdim:                                  Other Builtins.     (line    6)
+ * fdimf:                                 Other Builtins.     (line    6)
+ * fdiml:                                 Other Builtins.     (line    6)
+ * FDL, GNU Free Documentation License:   GNU Free Documentation License.
+                                                              (line    6)
  * fentry_name function attribute, x86:   x86 Function Attributes.
                                                               (line  774)
  * fentry_section function attribute, x86: x86 Function Attributes.
*************** A.2 Concept and Symbol Index
*** 77178,77183 ****
--- 77189,77202 ----
                                                               (line    6)
  * function versions:                     Function Multiversioning.
                                                               (line    6)
+ * function_return function attribute, x86: x86 Function Attributes.
+                                                              (line  701)
+ * function_vector function attribute, H8/300: H8/300 Function Attributes.
+                                                              (line    8)
+ * function_vector function attribute, M16C/M32C: M32C Function Attributes.
+                                                              (line   19)
+ * function_vector function attribute, SH: SH Function Attributes.
+                                                              (line    8)
  * function, size of pointer to:          Pointer Arith.      (line    6)
  * functions in arbitrary sections:       Common Function Attributes.
                                                               (line 1247)
*************** A.2 Concept and Symbol Index
*** 77207,77230 ****
                                                               (line  960)
  * functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
                                                               (line  453)
- * function_return function attribute, x86: x86 Function Attributes.
-                                                              (line  701)
- * function_vector function attribute, H8/300: H8/300 Function Attributes.
-                                                              (line    8)
- * function_vector function attribute, M16C/M32C: M32C Function Attributes.
-                                                              (line   19)
- * function_vector function attribute, SH: SH Function Attributes.
-                                                              (line    8)
  * G in constraint:                       Simple Constraints. (line   96)
  * g in constraint:                       Simple Constraints. (line  118)
  * g++:                                   Invoking G++.       (line   14)
  * G++:                                   G++ and GCC.        (line   29)
  * gamma:                                 Other Builtins.     (line    6)
  * gammaf:                                Other Builtins.     (line    6)
  * gammaf_r:                              Other Builtins.     (line    6)
  * gammal:                                Other Builtins.     (line    6)
  * gammal_r:                              Other Builtins.     (line    6)
- * gamma_r:                               Other Builtins.     (line    6)
  * GCC:                                   G++ and GCC.        (line    6)
  * GCC command options:                   Invoking GCC.       (line    6)
  * GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
--- 77226,77241 ----
                                                               (line  960)
  * functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
                                                               (line  453)
  * G in constraint:                       Simple Constraints. (line   96)
  * g in constraint:                       Simple Constraints. (line  118)
  * g++:                                   Invoking G++.       (line   14)
  * G++:                                   G++ and GCC.        (line   29)
  * gamma:                                 Other Builtins.     (line    6)
+ * gamma_r:                               Other Builtins.     (line    6)
  * gammaf:                                Other Builtins.     (line    6)
  * gammaf_r:                              Other Builtins.     (line    6)
  * gammal:                                Other Builtins.     (line    6)
  * gammal_r:                              Other Builtins.     (line    6)
  * GCC:                                   G++ and GCC.        (line    6)
  * GCC command options:                   Invoking GCC.       (line    6)
  * GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
*************** A.2 Concept and Symbol Index
*** 77317,77323 ****
  * increment operators:                   Bug Criteria.       (line   17)
  * index:                                 Other Builtins.     (line    6)
  * indirect calls, ARC:                   ARC Function Attributes.
!                                                              (line   24)
  * indirect calls, ARM:                   ARM Function Attributes.
                                                               (line   36)
  * indirect calls, Blackfin:              Blackfin Function Attributes.
--- 77328,77334 ----
  * increment operators:                   Bug Criteria.       (line   17)
  * index:                                 Other Builtins.     (line    6)
  * indirect calls, ARC:                   ARC Function Attributes.
!                                                              (line   23)
  * indirect calls, ARM:                   ARM Function Attributes.
                                                               (line   36)
  * indirect calls, Blackfin:              Blackfin Function Attributes.
*************** A.2 Concept and Symbol Index
*** 77334,77343 ****
                                                               (line  692)
  * indirect_return function attribute, x86: x86 Function Attributes.
                                                               (line  768)
  * initializations in expressions:        Compound Literals.  (line    6)
  * initializers with labeled elements:    Designated Inits.   (line    6)
  * initializers, non-constant:            Initializers.       (line    6)
- * init_priority variable attribute:      C++ Attributes.     (line   49)
  * inline assembly language:              Using Assembly Language with C.
                                                               (line    6)
  * inline automatic for C++ member fns:   Inline.             (line   68)
--- 77345,77354 ----
                                                               (line  692)
  * indirect_return function attribute, x86: x86 Function Attributes.
                                                               (line  768)
+ * init_priority variable attribute:      C++ Attributes.     (line   49)
  * initializations in expressions:        Compound Literals.  (line    6)
  * initializers with labeled elements:    Designated Inits.   (line    6)
  * initializers, non-constant:            Initializers.       (line    6)
  * inline assembly language:              Using Assembly Language with C.
                                                               (line    6)
  * inline automatic for C++ member fns:   Inline.             (line   68)
*************** A.2 Concept and Symbol Index
*** 77465,77473 ****
  * j1f:                                   Other Builtins.     (line    6)
  * j1l:                                   Other Builtins.     (line    6)
  * jli_always function attribute, ARC:    ARC Function Attributes.
!                                                              (line   43)
  * jli_fixed function attribute, ARC:     ARC Function Attributes.
!                                                              (line   49)
  * jn:                                    Other Builtins.     (line    6)
  * jnf:                                   Other Builtins.     (line    6)
  * jnl:                                   Other Builtins.     (line    6)
--- 77476,77484 ----
  * j1f:                                   Other Builtins.     (line    6)
  * j1l:                                   Other Builtins.     (line    6)
  * jli_always function attribute, ARC:    ARC Function Attributes.
!                                                              (line   42)
  * jli_fixed function attribute, ARC:     ARC Function Attributes.
!                                                              (line   48)
  * jn:                                    Other Builtins.     (line    6)
  * jnf:                                   Other Builtins.     (line    6)
  * jnl:                                   Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 77517,77527 ****
                                                               (line  711)
  * length-zero arrays:                    Zero Length.        (line    6)
  * lgamma:                                Other Builtins.     (line    6)
  * lgammaf:                               Other Builtins.     (line    6)
  * lgammaf_r:                             Other Builtins.     (line    6)
  * lgammal:                               Other Builtins.     (line    6)
  * lgammal_r:                             Other Builtins.     (line    6)
- * lgamma_r:                              Other Builtins.     (line    6)
  * Libraries:                             Link Options.       (line   85)
  * LIBRARY_PATH:                          Environment Variables.
                                                               (line   96)
--- 77528,77538 ----
                                                               (line  711)
  * length-zero arrays:                    Zero Length.        (line    6)
  * lgamma:                                Other Builtins.     (line    6)
+ * lgamma_r:                              Other Builtins.     (line    6)
  * lgammaf:                               Other Builtins.     (line    6)
  * lgammaf_r:                             Other Builtins.     (line    6)
  * lgammal:                               Other Builtins.     (line    6)
  * lgammal_r:                             Other Builtins.     (line    6)
  * Libraries:                             Link Options.       (line   85)
  * LIBRARY_PATH:                          Environment Variables.
                                                               (line   96)
*************** A.2 Concept and Symbol Index
*** 77569,77574 ****
--- 77580,77593 ----
  * logf:                                  Other Builtins.     (line    6)
  * logl:                                  Other Builtins.     (line    6)
  * long long data types:                  Long Long.          (line    6)
+ * long_call function attribute, ARC:     ARC Function Attributes.
+                                                              (line   23)
+ * long_call function attribute, ARM:     ARM Function Attributes.
+                                                              (line   36)
+ * long_call function attribute, Epiphany: Epiphany Function Attributes.
+                                                              (line   55)
+ * long_call function attribute, MIPS:    MIPS Function Attributes.
+                                                              (line   59)
  * longcall function attribute, Blackfin: Blackfin Function Attributes.
                                                               (line   36)
  * longcall function attribute, PowerPC:  PowerPC Function Attributes.
*************** A.2 Concept and Symbol Index
*** 77577,77590 ****
                                                               (line   92)
  * longjmp incompatibilities:             Incompatibilities.  (line   39)
  * longjmp warnings:                      Warning Options.    (line 1617)
- * long_call function attribute, ARC:     ARC Function Attributes.
-                                                              (line   24)
- * long_call function attribute, ARM:     ARM Function Attributes.
-                                                              (line   36)
- * long_call function attribute, Epiphany: Epiphany Function Attributes.
-                                                              (line   55)
- * long_call function attribute, MIPS:    MIPS Function Attributes.
-                                                              (line   59)
  * LoongArch Options:                     LoongArch Options.  (line    6)
  * lower function attribute, MSP430:      MSP430 Function Attributes.
                                                               (line   54)
--- 77596,77601 ----
*************** A.2 Concept and Symbol Index
*** 77621,77627 ****
                                                               (line  253)
  * MCore options:                         MCore Options.      (line    6)
  * medium_call function attribute, ARC:   ARC Function Attributes.
!                                                              (line   24)
  * member fns, automatically inline:      Inline.             (line   68)
  * memchr:                                Other Builtins.     (line    6)
  * memcmp:                                Other Builtins.     (line    6)
--- 77632,77638 ----
                                                               (line  253)
  * MCore options:                         MCore Options.      (line    6)
  * medium_call function attribute, ARC:   ARC Function Attributes.
!                                                              (line   23)
  * member fns, automatically inline:      Inline.             (line   68)
  * memchr:                                Other Builtins.     (line    6)
  * memcmp:                                Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 77668,77674 ****
  * modfl:                                 Other Builtins.     (line    6)
  * modifiers in constraints:              Modifiers.          (line    6)
  * Moxie Options:                         Moxie Options.      (line    6)
- * MSP430 Options:                        MSP430 Options.     (line    6)
  * ms_abi function attribute, x86:        x86 Function Attributes.
                                                               (line   32)
  * ms_hook_prologue function attribute, x86: x86 Function Attributes.
--- 77679,77684 ----
*************** A.2 Concept and Symbol Index
*** 77681,77691 ****
                                                               (line    9)
  * ms_struct variable attribute, x86:     x86 Variable Attributes.
                                                               (line    9)
  * multiple alternative constraints:      Multi-Alternative.  (line    6)
  * multiprecision arithmetic:             Long Long.          (line    6)
  * n in constraint:                       Simple Constraints. (line   73)
  * naked function attribute, ARC:         ARC Function Attributes.
!                                                              (line   58)
  * naked function attribute, ARM:         ARM Function Attributes.
                                                               (line   47)
  * naked function attribute, AVR:         AVR Function Attributes.
--- 77691,77702 ----
                                                               (line    9)
  * ms_struct variable attribute, x86:     x86 Variable Attributes.
                                                               (line    9)
+ * MSP430 Options:                        MSP430 Options.     (line    6)
  * multiple alternative constraints:      Multi-Alternative.  (line    6)
  * multiprecision arithmetic:             Long Long.          (line    6)
  * n in constraint:                       Simple Constraints. (line   73)
  * naked function attribute, ARC:         ARC Function Attributes.
!                                                              (line   57)
  * naked function attribute, ARM:         ARM Function Attributes.
                                                               (line   47)
  * naked function attribute, AVR:         AVR Function Attributes.
*************** A.2 Concept and Symbol Index
*** 77741,77746 ****
--- 77752,77791 ----
                                                               (line   49)
  * nmi_handler function attribute, Blackfin: Blackfin Function Attributes.
                                                               (line   49)
+ * no_callee_saved_registers function attribute, x86: x86 Function Attributes.
+                                                              (line  112)
+ * no_caller_saved_registers function attribute, x86: x86 Function Attributes.
+                                                              (line  119)
+ * no_dangling function attribute:        C++ Attributes.     (line   70)
+ * no_dangling type attribute:            C++ Attributes.     (line   70)
+ * no_gccisr function attribute, AVR:     AVR Function Attributes.
+                                                              (line   54)
+ * no_icf function attribute:             Common Function Attributes.
+                                                              (line  852)
+ * no_icf variable attribute:             Common Variable Attributes.
+                                                              (line  212)
+ * no_instrument_function function attribute: Common Function Attributes.
+                                                              (line  856)
+ * no_profile_instrument_function function attribute: Common Function Attributes.
+                                                              (line  862)
+ * no_reorder function attribute:         Common Function Attributes.
+                                                              (line  867)
+ * no_sanitize function attribute:        Common Function Attributes.
+                                                              (line  875)
+ * no_sanitize_address function attribute: Common Function Attributes.
+                                                              (line  886)
+ * no_sanitize_coverage function attribute: Common Function Attributes.
+                                                              (line  906)
+ * no_sanitize_thread function attribute: Common Function Attributes.
+                                                              (line  895)
+ * no_sanitize_undefined function attribute: Common Function Attributes.
+                                                              (line  900)
+ * no_split_stack function attribute:     Common Function Attributes.
+                                                              (line  911)
+ * no_stack_limit function attribute:     Common Function Attributes.
+                                                              (line  917)
+ * no_stack_protector function attribute: Common Function Attributes.
+                                                              (line  922)
  * nocf_check function attribute:         x86 Function Attributes.
                                                               (line  709)
  * noclone function attribute:            Common Function Attributes.
*************** A.2 Concept and Symbol Index
*** 77774,77821 ****
                                                               (line 1032)
  * nosave_low_regs function attribute, SH: SH Function Attributes.
                                                               (line   33)
  * note GCC_COLORS capability:            Diagnostic Message Formatting Options.
                                                               (line   98)
  * nothrow function attribute:            Common Function Attributes.
                                                               (line 1066)
  * notshared type attribute, ARM:         ARM Type Attributes.
                                                               (line    6)
- * not_nested function attribute, NDS32:  NDS32 Function Attributes.
-                                                              (line   19)
- * no_callee_saved_registers function attribute, x86: x86 Function Attributes.
-                                                              (line  112)
- * no_caller_saved_registers function attribute, x86: x86 Function Attributes.
-                                                              (line  119)
- * no_dangling function attribute:        C++ Attributes.     (line   70)
- * no_dangling type attribute:            C++ Attributes.     (line   70)
- * no_gccisr function attribute, AVR:     AVR Function Attributes.
-                                                              (line   54)
- * no_icf function attribute:             Common Function Attributes.
-                                                              (line  852)
- * no_icf variable attribute:             Common Variable Attributes.
-                                                              (line  212)
- * no_instrument_function function attribute: Common Function Attributes.
-                                                              (line  856)
- * no_profile_instrument_function function attribute: Common Function Attributes.
-                                                              (line  862)
- * no_reorder function attribute:         Common Function Attributes.
-                                                              (line  867)
- * no_sanitize function attribute:        Common Function Attributes.
-                                                              (line  875)
- * no_sanitize_address function attribute: Common Function Attributes.
-                                                              (line  886)
- * no_sanitize_coverage function attribute: Common Function Attributes.
-                                                              (line  906)
- * no_sanitize_thread function attribute: Common Function Attributes.
-                                                              (line  895)
- * no_sanitize_undefined function attribute: Common Function Attributes.
-                                                              (line  900)
- * no_split_stack function attribute:     Common Function Attributes.
-                                                              (line  911)
- * no_stack_limit function attribute:     Common Function Attributes.
-                                                              (line  917)
- * no_stack_protector function attribute: Common Function Attributes.
-                                                              (line  922)
  * null_terminated_string_arg function attribute: Common Function Attributes.
                                                               (line 1073)
  * Nvidia PTX options:                    Nvidia PTX Options. (line    6)
--- 77819,77832 ----
                                                               (line 1032)
  * nosave_low_regs function attribute, SH: SH Function Attributes.
                                                               (line   33)
+ * not_nested function attribute, NDS32:  NDS32 Function Attributes.
+                                                              (line   19)
  * note GCC_COLORS capability:            Diagnostic Message Formatting Options.
                                                               (line   98)
  * nothrow function attribute:            Common Function Attributes.
                                                               (line 1066)
  * notshared type attribute, ARM:         ARM Type Attributes.
                                                               (line    6)
  * null_terminated_string_arg function attribute: Common Function Attributes.
                                                               (line 1073)
  * Nvidia PTX options:                    Nvidia PTX Options. (line    6)
*************** A.2 Concept and Symbol Index
*** 77843,77857 ****
  * omitted middle-operands:               Conditionals.       (line    6)
  * open coding:                           Inline.             (line    6)
  * OpenACC accelerator programming:       C Dialect Options.  (line  397)
! * OpenACC accelerator programming <1>:   C Dialect Options.  (line  407)
  * OpenACC accelerator programming <2>:   Warning Options.    (line 3528)
  * OpenACC offloading options:            C Dialect Options.  (line  382)
  * OpenACC offloading targets:            C Dialect Options.  (line  368)
  * OpenMP offloading options:             C Dialect Options.  (line  382)
  * OpenMP offloading targets:             C Dialect Options.  (line  368)
! * OpenMP parallel:                       C Dialect Options.  (line  413)
! * OpenMP SIMD:                           C Dialect Options.  (line  426)
! * OpenMP target SIMD clone:              C Dialect Options.  (line  439)
  * OpenRISC Options:                      OpenRISC Options.   (line    6)
  * operand constraints, asm:              Constraints.        (line    6)
  * optimize function attribute:           Common Function Attributes.
--- 77854,77868 ----
  * omitted middle-operands:               Conditionals.       (line    6)
  * open coding:                           Inline.             (line    6)
  * OpenACC accelerator programming:       C Dialect Options.  (line  397)
! * OpenACC accelerator programming <1>:   C Dialect Options.  (line  406)
  * OpenACC accelerator programming <2>:   Warning Options.    (line 3528)
  * OpenACC offloading options:            C Dialect Options.  (line  382)
  * OpenACC offloading targets:            C Dialect Options.  (line  368)
  * OpenMP offloading options:             C Dialect Options.  (line  382)
  * OpenMP offloading targets:             C Dialect Options.  (line  368)
! * OpenMP parallel:                       C Dialect Options.  (line  412)
! * OpenMP SIMD:                           C Dialect Options.  (line  424)
! * OpenMP target SIMD clone:              C Dialect Options.  (line  437)
  * OpenRISC Options:                      OpenRISC Options.   (line    6)
  * operand constraints, asm:              Constraints.        (line    6)
  * optimize function attribute:           Common Function Attributes.
*************** A.2 Concept and Symbol Index
*** 77890,77896 ****
  * other register constraints:            Simple Constraints. (line  161)
  * outline-atomics function attribute, AArch64: AArch64 Function Attributes.
                                                               (line   81)
! * output file option:                    Overall Options.    (line  194)
  * overloaded virtual function, warning:  C++ Dialect Options.
                                                               (line 1223)
  * p in constraint:                       Simple Constraints. (line  152)
--- 77901,77907 ----
  * other register constraints:            Simple Constraints. (line  161)
  * outline-atomics function attribute, AArch64: AArch64 Function Attributes.
                                                               (line   81)
! * output file option:                    Overall Options.    (line  198)
  * overloaded virtual function, warning:  C++ Dialect Options.
                                                               (line 1223)
  * p in constraint:                       Simple Constraints. (line  152)
*************** A.2 Concept and Symbol Index
*** 77953,77962 ****
  * pragma, diagnostic <3>:                Diagnostic Pragmas. (line  113)
  * pragma, fini:                          Solaris Pragmas.    (line   19)
  * pragma, init:                          Solaris Pragmas.    (line   25)
- * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
-                                                              (line   13)
  * pragma, long_calls:                    ARM Pragmas.        (line   10)
  * pragma, long_calls_off:                ARM Pragmas.        (line   16)
  * pragma, mark:                          Darwin Pragmas.     (line   10)
  * pragma, memregs:                       M32C Pragmas.       (line    6)
  * pragma, no_long_calls:                 ARM Pragmas.        (line   13)
--- 77964,77973 ----
  * pragma, diagnostic <3>:                Diagnostic Pragmas. (line  113)
  * pragma, fini:                          Solaris Pragmas.    (line   19)
  * pragma, init:                          Solaris Pragmas.    (line   25)
  * pragma, long_calls:                    ARM Pragmas.        (line   10)
  * pragma, long_calls_off:                ARM Pragmas.        (line   16)
+ * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
+                                                              (line   13)
  * pragma, mark:                          Darwin Pragmas.     (line   10)
  * pragma, memregs:                       M32C Pragmas.       (line    6)
  * pragma, no_long_calls:                 ARM Pragmas.        (line   13)
*************** A.2 Concept and Symbol Index
*** 78012,78021 ****
  * r fixed-suffix:                        Fixed-Point.        (line    6)
  * R fixed-suffix:                        Fixed-Point.        (line    6)
  * r in constraint:                       Simple Constraints. (line   64)
! * RAMPD:                                 AVR Options.        (line  452)
! * RAMPX:                                 AVR Options.        (line  452)
! * RAMPY:                                 AVR Options.        (line  452)
! * RAMPZ:                                 AVR Options.        (line  452)
  * range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
                                                               (line  107)
  * range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
--- 78023,78032 ----
  * r fixed-suffix:                        Fixed-Point.        (line    6)
  * R fixed-suffix:                        Fixed-Point.        (line    6)
  * r in constraint:                       Simple Constraints. (line   64)
! * RAMPD:                                 AVR Options.        (line  454)
! * RAMPX:                                 AVR Options.        (line  454)
! * RAMPY:                                 AVR Options.        (line  454)
! * RAMPZ:                                 AVR Options.        (line  454)
  * range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
                                                               (line  107)
  * range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
*************** A.2 Concept and Symbol Index
*** 78098,78111 ****
                                                               (line   55)
  * save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
                                                               (line   22)
- * saveall function attribute, Blackfin:  Blackfin Function Attributes.
-                                                              (line   55)
- * saveall function attribute, H8/300:    H8/300 Function Attributes.
-                                                              (line   22)
  * save_all function attribute, NDS32:    NDS32 Function Attributes.
                                                               (line   26)
  * save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
                                                               (line    8)
  * scalar_storage_order type attribute:   Common Type Attributes.
                                                               (line  341)
  * scalb:                                 Other Builtins.     (line    6)
--- 78109,78122 ----
                                                               (line   55)
  * save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
                                                               (line   22)
  * save_all function attribute, NDS32:    NDS32 Function Attributes.
                                                               (line   26)
  * save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
                                                               (line    8)
+ * saveall function attribute, Blackfin:  Blackfin Function Attributes.
+                                                              (line   55)
+ * saveall function attribute, H8/300:    H8/300 Function Attributes.
+                                                              (line   22)
  * scalar_storage_order type attribute:   Common Type Attributes.
                                                               (line  341)
  * scalb:                                 Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 78129,78135 ****
  * section variable attribute:            Common Variable Attributes.
                                                               (line  316)
  * secure_call function attribute, ARC:   ARC Function Attributes.
!                                                              (line   53)
  * selectany variable attribute:          Microsoft Windows Variable Attributes.
                                                               (line   15)
  * sentinel function attribute:           Common Function Attributes.
--- 78140,78146 ----
  * section variable attribute:            Common Variable Attributes.
                                                               (line  316)
  * secure_call function attribute, ARC:   ARC Function Attributes.
!                                                              (line   52)
  * selectany variable attribute:          Microsoft Windows Variable Attributes.
                                                               (line   15)
  * sentinel function attribute:           Common Function Attributes.
*************** A.2 Concept and Symbol Index
*** 78142,78159 ****
  * shared strings:                        Incompatibilities.  (line    9)
  * shared variable attribute:             Microsoft Windows Variable Attributes.
                                                               (line   36)
- * shortcall function attribute, Blackfin: Blackfin Function Attributes.
-                                                              (line   36)
- * shortcall function attribute, PowerPC: PowerPC Function Attributes.
-                                                              (line    8)
  * short_call function attribute, ARC:    ARC Function Attributes.
!                                                              (line   24)
  * short_call function attribute, ARM:    ARM Function Attributes.
                                                               (line   36)
  * short_call function attribute, Epiphany: Epiphany Function Attributes.
                                                               (line   55)
  * short_call function attribute, MIPS:   MIPS Function Attributes.
                                                               (line   59)
  * side effect in ?::                     Conditionals.       (line   20)
  * side effects, macro argument:          Statement Exprs.    (line   35)
  * side effects, order of evaluation:     Non-bugs.           (line  196)
--- 78153,78170 ----
  * shared strings:                        Incompatibilities.  (line    9)
  * shared variable attribute:             Microsoft Windows Variable Attributes.
                                                               (line   36)
  * short_call function attribute, ARC:    ARC Function Attributes.
!                                                              (line   23)
  * short_call function attribute, ARM:    ARM Function Attributes.
                                                               (line   36)
  * short_call function attribute, Epiphany: Epiphany Function Attributes.
                                                               (line   55)
  * short_call function attribute, MIPS:   MIPS Function Attributes.
                                                               (line   59)
+ * shortcall function attribute, Blackfin: Blackfin Function Attributes.
+                                                              (line   36)
+ * shortcall function attribute, PowerPC: PowerPC Function Attributes.
+                                                              (line    8)
  * side effect in ?::                     Conditionals.       (line   20)
  * side effects, macro argument:          Statement Exprs.    (line   35)
  * side effects, order of evaluation:     Non-bugs.           (line  196)
*************** A.2 Concept and Symbol Index
*** 78172,78178 ****
  * significand:                           Other Builtins.     (line    6)
  * significandf:                          Other Builtins.     (line    6)
  * significandl:                          Other Builtins.     (line    6)
! * SIMD:                                  C Dialect Options.  (line  426)
  * simd function attribute:               Common Function Attributes.
                                                               (line 1290)
  * simple constraints:                    Simple Constraints. (line    6)
--- 78183,78189 ----
  * significand:                           Other Builtins.     (line    6)
  * significandf:                          Other Builtins.     (line    6)
  * significandl:                          Other Builtins.     (line    6)
! * SIMD:                                  C Dialect Options.  (line  424)
  * simd function attribute:               Common Function Attributes.
                                                               (line 1290)
  * simple constraints:                    Simple Constraints. (line    6)
*************** A.2 Concept and Symbol Index
*** 78193,78199 ****
  * snprintf:                              Other Builtins.     (line    6)
  * Solaris 2 options:                     Solaris 2 Options.  (line    6)
  * SOURCE_DATE_EPOCH:                     Environment Variables.
!                                                              (line  194)
  * SPARC options:                         SPARC Options.      (line    6)
  * Spec Files:                            Spec Files.         (line    6)
  * specified registers:                   Explicit Register Variables.
--- 78204,78212 ----
  * snprintf:                              Other Builtins.     (line    6)
  * Solaris 2 options:                     Solaris 2 Options.  (line    6)
  * SOURCE_DATE_EPOCH:                     Environment Variables.
!                                                              (line  193)
! * sp_switch function attribute, SH:      SH Function Attributes.
!                                                              (line   57)
  * SPARC options:                         SPARC Options.      (line    6)
  * Spec Files:                            Spec Files.         (line    6)
  * specified registers:                   Explicit Register Variables.
*************** A.2 Concept and Symbol Index
*** 78208,78215 ****
                                                               (line    6)
  * speed of compilation <1>:              C++ Modules.        (line    6)
  * sprintf:                               Other Builtins.     (line    6)
- * sp_switch function attribute, SH:      SH Function Attributes.
-                                                              (line   57)
  * sqrt:                                  Other Builtins.     (line    6)
  * sqrtf:                                 Other Builtins.     (line    6)
  * sqrtl:                                 Other Builtins.     (line    6)
--- 78221,78226 ----
*************** A.2 Concept and Symbol Index
*** 78238,78247 ****
  * strdup:                                Other Builtins.     (line    6)
  * strfmon:                               Other Builtins.     (line    6)
  * strftime:                              Other Builtins.     (line    6)
- * strict-align function attribute, AArch64: AArch64 Function Attributes.
-                                                              (line   31)
  * strict_flex_array variable attribute:  Common Variable Attributes.
                                                               (line  361)
  * string constants:                      Incompatibilities.  (line    9)
  * strlen:                                Other Builtins.     (line    6)
  * strncasecmp:                           Other Builtins.     (line    6)
--- 78249,78258 ----
  * strdup:                                Other Builtins.     (line    6)
  * strfmon:                               Other Builtins.     (line    6)
  * strftime:                              Other Builtins.     (line    6)
  * strict_flex_array variable attribute:  Common Variable Attributes.
                                                               (line  361)
+ * strict-align function attribute, AArch64: AArch64 Function Attributes.
+                                                              (line   31)
  * string constants:                      Incompatibilities.  (line    9)
  * strlen:                                Other Builtins.     (line    6)
  * strncasecmp:                           Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 78268,78274 ****
  * subscripting and function values:      Subscripting.       (line    6)
  * suffixes for C++ source:               Invoking G++.       (line    6)
  * SUNPRO_DEPENDENCIES:                   Environment Variables.
!                                                              (line  188)
  * suppressing warnings:                  Warning Options.    (line    6)
  * surprises in C++:                      C++ Misunderstandings.
                                                               (line    6)
--- 78279,78285 ----
  * subscripting and function values:      Subscripting.       (line    6)
  * suffixes for C++ source:               Invoking G++.       (line    6)
  * SUNPRO_DEPENDENCIES:                   Environment Variables.
!                                                              (line  187)
  * suppressing warnings:                  Warning Options.    (line    6)
  * surprises in C++:                      C++ Misunderstandings.
                                                               (line    6)
*************** A.2 Concept and Symbol Index
*** 78301,78306 ****
--- 78312,78320 ----
  * target function attribute <5>:         x86 Function Attributes.
                                                               (line  186)
  * target machine, specifying:            Invoking GCC.       (line   24)
+ * target_clones function attribute:      Common Function Attributes.
+                                                              (line 1415)
+ * target-dependent options:              Submodel Options.   (line    6)
  * target("3dnow") function attribute, x86: x86 Function Attributes.
                                                               (line  191)
  * target("3dnowa") function attribute, x86: x86 Function Attributes.
*************** A.2 Concept and Symbol Index
*** 78335,78346 ****
                                                               (line  140)
  * target("avx") function attribute, x86: x86 Function Attributes.
                                                               (line  213)
- * target("avx10.1") function attribute, x86: x86 Function Attributes.
-                                                              (line  616)
  * target("avx10.1-256") function attribute, x86: x86 Function Attributes.
                                                               (line  606)
  * target("avx10.1-512") function attribute, x86: x86 Function Attributes.
                                                               (line  611)
  * target("avx2") function attribute, x86: x86 Function Attributes.
                                                               (line  217)
  * target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
--- 78349,78360 ----
                                                               (line  140)
  * target("avx") function attribute, x86: x86 Function Attributes.
                                                               (line  213)
  * target("avx10.1-256") function attribute, x86: x86 Function Attributes.
                                                               (line  606)
  * target("avx10.1-512") function attribute, x86: x86 Function Attributes.
                                                               (line  611)
+ * target("avx10.1") function attribute, x86: x86 Function Attributes.
+                                                              (line  616)
  * target("avx2") function attribute, x86: x86 Function Attributes.
                                                               (line  217)
  * target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
*************** A.2 Concept and Symbol Index
*** 78515,78524 ****
                                                               (line  414)
  * target("rdseed") function attribute, x86: x86 Function Attributes.
                                                               (line  418)
- * target("recip") function attribute, x86: x86 Function Attributes.
-                                                              (line  649)
  * target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
                                                               (line  111)
  * target("rtm") function attribute, x86: x86 Function Attributes.
                                                               (line  422)
  * target("sahf") function attribute, x86: x86 Function Attributes.
--- 78529,78538 ----
                                                               (line  414)
  * target("rdseed") function attribute, x86: x86 Function Attributes.
                                                               (line  418)
  * target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
                                                               (line  111)
+ * target("recip") function attribute, x86: x86 Function Attributes.
+                                                              (line  649)
  * target("rtm") function attribute, x86: x86 Function Attributes.
                                                               (line  422)
  * target("sahf") function attribute, x86: x86 Function Attributes.
*************** A.2 Concept and Symbol Index
*** 78541,78552 ****
                                                               (line  446)
  * target("sse3") function attribute, x86: x86 Function Attributes.
                                                               (line  450)
- * target("sse4") function attribute, x86: x86 Function Attributes.
-                                                              (line  454)
  * target("sse4.1") function attribute, x86: x86 Function Attributes.
                                                               (line  459)
  * target("sse4.2") function attribute, x86: x86 Function Attributes.
                                                               (line  463)
  * target("sse4a") function attribute, x86: x86 Function Attributes.
                                                               (line  467)
  * target("ssse3") function attribute, x86: x86 Function Attributes.
--- 78555,78566 ----
                                                               (line  446)
  * target("sse3") function attribute, x86: x86 Function Attributes.
                                                               (line  450)
  * target("sse4.1") function attribute, x86: x86 Function Attributes.
                                                               (line  459)
  * target("sse4.2") function attribute, x86: x86 Function Attributes.
                                                               (line  463)
+ * target("sse4") function attribute, x86: x86 Function Attributes.
+                                                              (line  454)
  * target("sse4a") function attribute, x86: x86 Function Attributes.
                                                               (line  467)
  * target("ssse3") function attribute, x86: x86 Function Attributes.
*************** A.2 Concept and Symbol Index
*** 78589,78597 ****
                                                               (line  507)
  * target("xsaves") function attribute, x86: x86 Function Attributes.
                                                               (line  511)
- * target-dependent options:              Submodel Options.   (line    6)
- * target_clones function attribute:      Common Function Attributes.
-                                                              (line 1415)
  * targs GCC_COLORS capability:           Diagnostic Message Formatting Options.
                                                               (line  123)
  * TC1:                                   Standards.          (line   13)
--- 78603,78608 ----
*************** A.2 Concept and Symbol Index
*** 78621,78630 ****
  * tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
                                                               (line   18)
  * TLS:                                   Thread-Local.       (line    6)
- * tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
-                                                              (line   47)
  * tls_model variable attribute:          Common Variable Attributes.
                                                               (line  392)
  * TMPDIR:                                Environment Variables.
                                                               (line   44)
  * toascii:                               Other Builtins.     (line    6)
--- 78632,78641 ----
  * tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
                                                               (line   18)
  * TLS:                                   Thread-Local.       (line    6)
  * tls_model variable attribute:          Common Variable Attributes.
                                                               (line  392)
+ * tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
+                                                              (line   47)
  * TMPDIR:                                Environment Variables.
                                                               (line   44)
  * toascii:                               Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 78636,78645 ****
                                                               (line  375)
  * transparent_union type attribute:      Common Type Attributes.
                                                               (line  629)
- * trapa_handler function attribute, SH:  SH Function Attributes.
-                                                              (line   72)
  * trap_exit function attribute, SH:      SH Function Attributes.
                                                               (line   67)
  * trunc:                                 Other Builtins.     (line    6)
  * truncf:                                Other Builtins.     (line    6)
  * truncl:                                Other Builtins.     (line    6)
--- 78647,78656 ----
                                                               (line  375)
  * transparent_union type attribute:      Common Type Attributes.
                                                               (line  629)
  * trap_exit function attribute, SH:      SH Function Attributes.
                                                               (line   67)
+ * trapa_handler function attribute, SH:  SH Function Attributes.
+                                                              (line   72)
  * trunc:                                 Other Builtins.     (line    6)
  * truncf:                                Other Builtins.     (line    6)
  * truncl:                                Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 78650,78660 ****
  * two-stage name lookup:                 Name lookup.        (line    6)
  * type alignment:                        Alignment.          (line    6)
  * type attributes:                       Type Attributes.    (line    6)
  * type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
                                                               (line  146)
  * typedef names as function parameters:  Incompatibilities.  (line   97)
  * typeof:                                Typeof.             (line    6)
- * type_info:                             Vague Linkage.      (line   41)
  * uhk fixed-suffix:                      Fixed-Point.        (line    6)
  * UHK fixed-suffix:                      Fixed-Point.        (line    6)
  * uhr fixed-suffix:                      Fixed-Point.        (line    6)
--- 78661,78671 ----
  * two-stage name lookup:                 Name lookup.        (line    6)
  * type alignment:                        Alignment.          (line    6)
  * type attributes:                       Type Attributes.    (line    6)
+ * type_info:                             Vague Linkage.      (line   41)
  * type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
                                                               (line  146)
  * typedef names as function parameters:  Incompatibilities.  (line   97)
  * typeof:                                Typeof.             (line    6)
  * uhk fixed-suffix:                      Fixed-Point.        (line    6)
  * UHK fixed-suffix:                      Fixed-Point.        (line    6)
  * uhr fixed-suffix:                      Fixed-Point.        (line    6)
*************** A.2 Concept and Symbol Index
*** 78706,78723 ****
  * UR fixed-suffix:                       Fixed-Point.        (line    6)
  * urls:                                  Diagnostic Message Formatting Options.
                                                               (line  158)
- * used function attribute:               Common Function Attributes.
-                                                              (line 1458)
- * used variable attribute:               Common Variable Attributes.
-                                                              (line  421)
- * User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
-                                                              (line   20)
  * use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
                                                               (line   38)
  * use_hazard_barrier_return function attribute, MIPS: MIPS Function Attributes.
                                                               (line  113)
  * use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
                                                               (line   27)
  * V in constraint:                       Simple Constraints. (line   43)
  * V850 Options:                          V850 Options.       (line    6)
  * vague linkage:                         Vague Linkage.      (line    6)
--- 78717,78734 ----
  * UR fixed-suffix:                       Fixed-Point.        (line    6)
  * urls:                                  Diagnostic Message Formatting Options.
                                                               (line  158)
  * use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
                                                               (line   38)
  * use_hazard_barrier_return function attribute, MIPS: MIPS Function Attributes.
                                                               (line  113)
  * use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
                                                               (line   27)
+ * used function attribute:               Common Function Attributes.
+                                                              (line 1458)
+ * used variable attribute:               Common Variable Attributes.
+                                                              (line  421)
+ * User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
+                                                              (line   20)
  * V in constraint:                       Simple Constraints. (line   43)
  * V850 Options:                          V850 Options.       (line    6)
  * vague linkage:                         Vague Linkage.      (line    6)
*************** A.2 Concept and Symbol Index
*** 78741,78754 ****
                                                               (line    6)
  * variadic macros:                       Variadic Macros.    (line    6)
  * VAX options:                           VAX Options.        (line    6)
- * vector function attribute, RX:         RX Function Attributes.
-                                                              (line   48)
- * vector types, using with x86 intrinsics: Vector Extensions.
-                                                              (line  220)
- * vector_size type attribute:            Common Type Attributes.
-                                                              (line  702)
- * vector_size variable attribute:        Common Variable Attributes.
-                                                              (line  456)
  * vec_blendv:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  308)
  * vec_cfuge:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
--- 78752,78757 ----
*************** A.2 Concept and Symbol Index
*** 78787,78796 ****
                                                               (line  235)
  * vec_splati:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  265)
- * vec_splatid:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
-                                                              (line  270)
  * vec_splati_ins:                        PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  281)
  * vec_srdb:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  258)
  * vec_stril:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
--- 78790,78799 ----
                                                               (line  235)
  * vec_splati:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  265)
  * vec_splati_ins:                        PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  281)
+ * vec_splatid:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
+                                                              (line  270)
  * vec_srdb:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
                                                               (line  258)
  * vec_stril:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
*************** A.2 Concept and Symbol Index
*** 78819,78824 ****
--- 78822,78835 ----
                                                               (line   73)
  * vec_xst_trunc <7>:                     Basic PowerPC Built-in Functions Available on ISA 3.1.
                                                               (line   75)
+ * vector function attribute, RX:         RX Function Attributes.
+                                                              (line   48)
+ * vector types, using with x86 intrinsics: Vector Extensions.
+                                                              (line  220)
+ * vector_size type attribute:            Common Type Attributes.
+                                                              (line  702)
+ * vector_size variable attribute:        Common Variable Attributes.
+                                                              (line  456)
  * version_id function attribute, IA-64:  IA-64 Function Attributes.
                                                               (line   15)
  * vfprintf:                              Other Builtins.     (line    6)
*************** A.2 Concept and Symbol Index
*** 78871,78876 ****
--- 78882,78894 ----
                                                               (line   48)
  * warm function attribute, NDS32:        NDS32 Function Attributes.
                                                               (line   50)
+ * warn_if_not_aligned type attribute:    Common Type Attributes.
+                                                              (line  743)
+ * warn_if_not_aligned variable attribute: Common Variable Attributes.
+                                                              (line  489)
+ * warn_unused type attribute:            C++ Attributes.     (line  109)
+ * warn_unused_result function attribute: Common Function Attributes.
+                                                              (line 1568)
  * warning for comparison of signed and unsigned values: Warning Options.
                                                               (line 3093)
  * warning for overloaded virtual function: C++ Dialect Options.
*************** A.2 Concept and Symbol Index
*** 78886,78898 ****
  * warnings from system headers:          Warning Options.    (line 2362)
  * warnings vs errors:                    Warnings and Errors.
                                                               (line    6)
- * warn_if_not_aligned type attribute:    Common Type Attributes.
-                                                              (line  743)
- * warn_if_not_aligned variable attribute: Common Variable Attributes.
-                                                              (line  489)
- * warn_unused type attribute:            C++ Attributes.     (line  109)
- * warn_unused_result function attribute: Common Function Attributes.
-                                                              (line 1568)
  * weak function attribute:               Common Function Attributes.
                                                               (line 1585)
  * weak variable attribute:               Common Variable Attributes.
--- 78904,78909 ----
*************** A.2 Concept and Symbol Index
*** 78905,78911 ****
  * X in constraint:                       Simple Constraints. (line  122)
  * X3.159-1989:                           Standards.          (line   13)
  * x86 named address spaces:              Named Address Spaces.
!                                                              (line  187)
  * x86 Options:                           x86 Options.        (line    6)
  * x86 Windows Options:                   x86 Windows Options.
                                                               (line    6)
--- 78916,78922 ----
  * X in constraint:                       Simple Constraints. (line  122)
  * X3.159-1989:                           Standards.          (line   13)
  * x86 named address spaces:              Named Address Spaces.
!                                                              (line  186)
  * x86 Options:                           x86 Options.        (line    6)
  * x86 Windows Options:                   x86 Windows Options.
                                                               (line    6)
*************** A.2 Concept and Symbol Index
*** 78922,79392 ****
  * ynl:                                   Other Builtins.     (line    6)
  * zda variable attribute, V850:          V850 Variable Attributes.
                                                               (line   16)
- * zero-length arrays:                    Zero Length.        (line    6)
- * zero-size structures:                  Empty Structures.   (line    6)
  * zero_call_used_regs function attribute: Common Function Attributes.
                                                               (line 1639)
  * zSeries options:                       zSeries Options.    (line    6)
  
  
  
  Tag Table:
! Node: Top2226
! Node: G++ and GCC4129
! Node: Standards6175
! Node: Invoking GCC20571
! Node: Option Summary25798
! Node: Overall Options88078
! Node: Invoking G++116256
! Node: C Dialect Options117779
! Node: C++ Dialect Options143421
! Node: Objective-C and Objective-C++ Dialect Options213303
! Node: Diagnostic Message Formatting Options225188
! Node: Warning Options258846
! Ref: Wtrigraphs378735
! Node: Static Analyzer Options429415
! Node: Debugging Options472885
! Node: Optimize Options492999
! Ref: Type-punning567639
! Node: Instrumentation Options695386
! Node: Preprocessor Options756658
! Ref: dashMF761505
! Ref: fdollars-in-identifiers766167
! Node: Assembler Options779446
! Node: Link Options780137
! Ref: Link Options-Footnote-1797169
! Node: Directory Options797683
! Node: Code Gen Options806086
! Node: Developer Options835821
! Node: Submodel Options882105
! Node: AArch64 Options883825
! Ref: aarch64-feature-modifiers901424
! Node: Adapteva Epiphany Options907820
! Node: AMD GCN Options913772
! Node: ARC Options916069
! Node: ARM Options937054
! Node: AVR Options982157
! Ref: avr2983055
! Ref: avr25983322
! Ref: avr3983902
! Ref: avr31984029
! Ref: avr35984146
! Ref: avr4984441
! Ref: avr5984913
! Ref: avr51986770
! Ref: avr6987071
! Ref: avrxmega2987275
! Ref: avrxmega3987938
! Ref: avrxmega4989421
! Ref: avrxmega5989824
! Ref: avrxmega6990012
! Ref: avrxmega7990484
! Ref: avrtiny990674
! Ref: avr1990944
! Ref: eind997411
! Ref: ramp1002182
! Ref: avr-macros1003689
! Node: Blackfin Options1012546
! Node: C6X Options1020438
! Node: CRIS Options1021981
! Node: C-SKY Options1025168
! Node: Darwin Options1030895
! Node: DEC Alpha Options1039046
! Node: eBPF Options1050662
! Node: FR30 Options1054244
! Node: FT32 Options1054804
! Node: FRV Options1055750
! Node: GNU/Linux Options1062514
! Node: H8/300 Options1063895
! Node: HPPA Options1065347
! Node: IA-64 Options1075992
! Node: LM32 Options1084120
! Node: LoongArch Options1084648
! Node: M32C Options1097580
! Node: M32R/D Options1098858
! Node: M680x0 Options1102403
! Node: MCore Options1116558
! Node: MicroBlaze Options1118067
! Node: MIPS Options1121134
! Node: MMIX Options1158556
! Node: MN10300 Options1161033
! Node: Moxie Options1163576
! Node: MSP430 Options1164063
! Node: NDS32 Options1171824
! Node: Nios II Options1173994
! Node: Nvidia PTX Options1187210
! Node: OpenRISC Options1190744
! Node: PDP-11 Options1193498
! Node: PowerPC Options1194746
! Node: PRU Options1194964
! Node: RISC-V Options1197765
! Node: RL78 Options1220530
! Node: RS/6000 and PowerPC Options1224305
! Node: RX Options1265824
! Node: S/390 and zSeries Options1274426
! Node: SH Options1285223
! Node: Solaris 2 Options1300375
! Node: SPARC Options1301613
! Node: System V Options1317265
! Node: V850 Options1318090
! Node: VAX Options1324778
! Node: Visium Options1325470
! Node: VMS Options1327778
! Node: VxWorks Options1328594
! Node: x86 Options1330015
! Node: x86 Windows Options1409599
! Node: Xstormy16 Options1413617
! Node: Xtensa Options1413911
! Node: zSeries Options1420754
! Node: Spec Files1420950
! Node: Environment Variables1447029
! Node: Precompiled Headers1456462
! Node: C++ Modules1462671
! Ref: C++ Modules-Footnote-11468334
! Node: C++ Module Mapper1468587
! Node: C++ Module Preprocessing1473740
! Node: C++ Compiled Module Interface1475569
! Ref: C++ Compiled Module Interface-Footnote-11478953
! Ref: C++ Compiled Module Interface-Footnote-21479042
! Node: C Implementation1479098
! Node: Translation implementation1480789
! Node: Environment implementation1481380
! Node: Identifiers implementation1481934
! Node: Characters implementation1483020
! Node: Integers implementation1486670
! Node: Floating point implementation1488719
! Node: Arrays and pointers implementation1491819
! Ref: Arrays and pointers implementation-Footnote-11493279
! Node: Hints implementation1493405
! Node: Structures unions enumerations and bit-fields implementation1494900
! Node: Qualifiers implementation1497124
! Node: Declarators implementation1499185
! Node: Statements implementation1499526
! Node: Preprocessing directives implementation1499852
! Node: Library functions implementation1502173
! Node: Architecture implementation1502822
! Node: Locale-specific behavior implementation1504467
! Node: C++ Implementation1504772
! Node: Conditionally-supported behavior1506056
! Node: Exception handling1506673
! Node: C Extensions1507081
! Node: Statement Exprs1512436
! Node: Local Labels1517808
! Node: Labels as Values1520781
! Ref: Labels as Values-Footnote-11523419
! Node: Nested Functions1523604
! Node: Nonlocal Gotos1527558
! Node: Constructing Calls1529824
! Node: Typeof1534536
! Node: Conditionals1538801
! Node: __int1281539690
! Node: Long Long1540215
! Node: Complex1541706
! Node: Floating Types1546451
! Node: Half-Precision1549947
! Node: Decimal Float1553415
! Node: Hex Floats1555269
! Node: Fixed-Point1556343
! Node: Named Address Spaces1559601
! Ref: AVR Named Address Spaces1560287
! Node: Zero Length1567679
! Node: Empty Structures1573532
! Node: Variable Length1573938
! Node: Variadic Macros1576656
! Node: Escaped Newlines1579034
! Node: Subscripting1579895
! Node: Pointer Arith1580620
! Node: Variadic Pointer Args1581197
! Node: Pointers to Arrays1581922
! Node: Initializers1582675
! Node: Compound Literals1583176
! Node: Designated Inits1586743
! Node: Case Ranges1590667
! Node: Cast to Union1591348
! Node: Mixed Labels and Declarations1593082
! Node: Function Attributes1593719
! Node: Common Function Attributes1598127
! Ref: Common Function Attributes-Footnote-11680564
! Node: AArch64 Function Attributes1680881
! Node: AMD GCN Function Attributes1687075
! Node: ARC Function Attributes1690128
! Node: ARM Function Attributes1693065
! Node: AVR Function Attributes1698204
! Node: Blackfin Function Attributes1702637
! Node: BPF Function Attributes1705134
! Node: C-SKY Function Attributes1706258
! Node: Epiphany Function Attributes1707554
! Node: H8/300 Function Attributes1710309
! Node: IA-64 Function Attributes1711507
! Node: M32C Function Attributes1712549
! Node: M32R/D Function Attributes1714887
! Node: m68k Function Attributes1716361
! Node: MCORE Function Attributes1717305
! Node: MicroBlaze Function Attributes1718123
! Node: Microsoft Windows Function Attributes1719632
! Node: MIPS Function Attributes1724201
! Node: MSP430 Function Attributes1730601
! Node: NDS32 Function Attributes1734680
! Node: Nios II Function Attributes1737104
! Node: Nvidia PTX Function Attributes1738401
! Node: PowerPC Function Attributes1739016
! Node: RISC-V Function Attributes1745790
! Node: RL78 Function Attributes1749131
! Node: RX Function Attributes1750370
! Node: S/390 Function Attributes1752917
! Node: SH Function Attributes1754745
! Node: Symbian OS Function Attributes1758173
! Node: V850 Function Attributes1758509
! Node: Visium Function Attributes1759054
! Node: x86 Function Attributes1759582
! Node: Xstormy16 Function Attributes1786306
! Node: Variable Attributes1786813
! Node: Common Variable Attributes1788538
! Node: ARC Variable Attributes1812343
! Node: AVR Variable Attributes1812725
! Node: Blackfin Variable Attributes1818266
! Node: H8/300 Variable Attributes1819124
! Node: IA-64 Variable Attributes1820197
! Node: LoongArch Variable Attributes1820951
! Node: M32R/D Variable Attributes1821627
! Node: Microsoft Windows Variable Attributes1822428
! Node: MSP430 Variable Attributes1824884
! Node: Nvidia PTX Variable Attributes1826098
! Node: PowerPC Variable Attributes1826715
! Node: RL78 Variable Attributes1827272
! Node: V850 Variable Attributes1827691
! Node: x86 Variable Attributes1828324
! Node: Xstormy16 Variable Attributes1829380
! Node: Type Attributes1829950
! Node: Common Type Attributes1831800
! Node: ARC Type Attributes1869088
! Node: ARM Type Attributes1869560
! Node: BPF Type Attributes1870342
! Node: PowerPC Type Attributes1870863
! Node: x86 Type Attributes1871852
! Node: Label Attributes1872844
! Node: Enumerator Attributes1874871
! Node: Statement Attributes1876403
! Node: Attribute Syntax1878703
! Node: Function Prototypes1891001
! Node: C++ Comments1892781
! Node: Dollar Signs1893300
! Node: Character Escapes1893765
! Node: Alignment1894049
! Node: Inline1895702
! Node: Const and Volatile Functions1900538
! Node: Volatiles1901744
! Node: Using Assembly Language with C1904665
! Node: Basic Asm1905902
! Node: Extended Asm1911525
! Ref: Volatile1915639
! Ref: AssemblerTemplate1919752
! Ref: OutputOperands1923992
! Ref: FlagOutputOperands1931072
! Ref: InputOperands1934177
! Ref: Clobbers and Scratch Registers1938562
! Ref: GotoLabels1947203
! Ref: GenericOperandmodifiers1950826
! Ref: aarch64Operandmodifiers1951784
! Ref: x86Operandmodifiers1952849
! Ref: x86floatingpointasmoperands1957667
! Ref: msp430Operandmodifiers1960998
! Ref: loongarchOperandmodifiers1962656
! Ref: riscvOperandmodifiers1964444
! Node: Constraints1964854
! Node: Simple Constraints1965960
! Node: Multi-Alternative1973274
! Node: Modifiers1974949
! Node: Machine Constraints1977748
! Node: Asm Labels2032100
! Node: Explicit Register Variables2033716
! Ref: Explicit Reg Vars2033930
! Node: Global Register Variables2034539
! Ref: Global Reg Vars2034747
! Node: Local Register Variables2039529
! Ref: Local Reg Vars2039749
! Node: Size of an asm2043377
! Node: Alternate Keywords2044855
! Node: Incomplete Enums2046601
! Node: Function Names2047358
! Node: Return Address2049262
! Node: Stack Scrubbing2055105
! Node: Vector Extensions2057395
! Node: Offsetof2068719
! Node: __sync Builtins2069552
! Node: __atomic Builtins2076481
! Node: Integer Overflow Builtins2089994
! Node: x86 specific memory model extensions for transactional memory2098941
! Node: Object Size Checking2100207
! Node: Other Builtins2107716
! Node: Target Builtins2170694
! Node: AArch64 Built-in Functions2172577
! Node: Alpha Built-in Functions2173273
! Node: Altera Nios II Built-in Functions2176367
! Node: ARC Built-in Functions2180806
! Node: ARC SIMD Built-in Functions2186372
! Node: ARM iWMMXt Built-in Functions2196714
! Node: ARM C Language Extensions (ACLE)2203850
! Node: ARM Floating Point Status and Control Intrinsics2205127
! Node: ARM ARMv8-M Security Extensions2205614
! Node: AVR Built-in Functions2206906
! Node: Blackfin Built-in Functions2210943
! Node: BPF Built-in Functions2211563
! Node: FR-V Built-in Functions2217975
! Node: Argument Types2218844
! Node: Directly-mapped Integer Functions2220675
! Node: Directly-mapped Media Functions2221835
! Node: Raw read/write Functions2230117
! Node: Other Built-in Functions2231025
! Node: LoongArch Base Built-in Functions2232211
! Node: LoongArch SX Vector Intrinsics2238959
! Node: LoongArch ASX Vector Intrinsics2277765
! Node: MIPS DSP Built-in Functions2318981
! Node: MIPS Paired-Single Support2331744
! Node: MIPS Loongson Built-in Functions2333243
! Node: Paired-Single Arithmetic2339765
! Node: Paired-Single Built-in Functions2340788
! Node: MIPS-3D Built-in Functions2343455
! Node: MIPS SIMD Architecture (MSA) Support2348849
! Node: MIPS SIMD Architecture Built-in Functions2351689
! Node: Other MIPS Built-in Functions2378543
! Node: MSP430 Built-in Functions2379552
! Node: NDS32 Built-in Functions2380953
! Node: Nvidia PTX Built-in Functions2382248
! Node: Basic PowerPC Built-in Functions2382842
! Node: Basic PowerPC Built-in Functions Available on all Configurations2383702
! Node: Basic PowerPC Built-in Functions Available on ISA 2.052392699
! Node: Basic PowerPC Built-in Functions Available on ISA 2.062398675
! Node: Basic PowerPC Built-in Functions Available on ISA 2.072400755
! Node: Basic PowerPC Built-in Functions Available on ISA 3.02401590
! Node: Basic PowerPC Built-in Functions Available on ISA 3.12408865
! Node: PowerPC AltiVec/VSX Built-in Functions2412782
! Node: PowerPC AltiVec Built-in Functions on ISA 2.052420851
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062446251
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072453317
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02463451
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12480181
! Node: PowerPC Hardware Transactional Memory Built-in Functions2513465
! Node: PowerPC Atomic Memory Operation Functions2522015
! Node: PowerPC Matrix-Multiply Assist Built-in Functions2524578
! Node: PRU Built-in Functions2530703
! Node: RISC-V Built-in Functions2531983
! Node: RISC-V Vector Intrinsics2532653
! Node: CORE-V Built-in Functions2533152
! Node: RX Built-in Functions2571955
! Node: S/390 System z Built-in Functions2575957
! Node: SH Built-in Functions2581226
! Node: SPARC VIS Built-in Functions2582954
! Node: TI C6X Built-in Functions2591485
! Node: x86 Built-in Functions2592532
! Node: x86 transactional memory intrinsics2659302
! Node: x86 control-flow protection intrinsics2662628
! Node: Target Format Checks2664399
! Node: Solaris Format Checks2664831
! Node: Darwin Format Checks2665257
! Node: Pragmas2666220
! Node: AArch64 Pragmas2667145
! Node: ARM Pragmas2667602
! Node: M32C Pragmas2668229
! Node: PRU Pragmas2669301
! Node: RS/6000 and PowerPC Pragmas2669880
! Node: S/390 Pragmas2670620
! Node: Darwin Pragmas2671186
! Node: Solaris Pragmas2672238
! Node: Symbol-Renaming Pragmas2673402
! Node: Structure-Layout Pragmas2675037
! Node: Weak Pragmas2677317
! Node: Diagnostic Pragmas2678052
! Node: Visibility Pragmas2682804
! Node: Push/Pop Macro Pragmas2683489
! Node: Function Specific Option Pragmas2684462
! Node: Loop-Specific Pragmas2686428
! Node: Unnamed Fields2688529
! Node: Thread-Local2690726
! Node: C99 Thread-Local Edits2692832
! Node: C++98 Thread-Local Edits2694830
! Node: Binary constants2698275
! Node: C++ Extensions2698946
! Node: C++ Volatiles2700576
! Node: Restricted Pointers2702924
! Node: Vague Linkage2704515
! Node: C++ Interface2708138
! Ref: C++ Interface-Footnote-12711935
! Node: Template Instantiation2712073
! Node: Bound member functions2718161
! Node: C++ Attributes2719693
! Node: Function Multiversioning2725934
! Node: Type Traits2727742
! Node: C++ Concepts2735464
! Node: Deprecated Features2737006
! Node: Backwards Compatibility2738831
! Node: Objective-C2739903
! Node: GNU Objective-C runtime API2740510
! Node: Modern GNU Objective-C runtime API2741517
! Node: Traditional GNU Objective-C runtime API2743953
! Node: Executing code before main2744680
! Node: What you can and what you cannot do in +load2747424
! Node: Type encoding2749794
! Node: Legacy type encoding2755160
! Node: @encode2756250
! Node: Method signatures2756795
! Node: Garbage Collection2758787
! Node: Constant string objects2761477
! Node: compatibility_alias2763986
! Node: Exceptions2764711
! Node: Synchronization2767421
! Node: Fast enumeration2768605
! Node: Using fast enumeration2768917
! Node: c99-like fast enumeration syntax2770128
! Node: Fast enumeration details2770831
! Node: Fast enumeration protocol2773171
! Node: Messaging with the GNU Objective-C runtime2776323
! Node: Dynamically registering methods2777695
! Node: Forwarding hook2779386
! Node: Compatibility2782426
! Node: Gcov2788982
! Node: Gcov Intro2789650
! Node: Invoking Gcov2792368
! Node: Gcov and Optimization2817165
! Node: Gcov Data Files2820918
! Node: Cross-profiling2822327
! Node: Freestanding Environments2824215
! Node: Gcov-tool2839078
! Node: Gcov-tool Intro2839503
! Node: Invoking Gcov-tool2841857
! Node: Gcov-dump2845270
! Node: Gcov-dump Intro2845593
! Node: Invoking Gcov-dump2845860
! Node: lto-dump2846593
! Node: lto-dump Intro2846892
! Node: Invoking lto-dump2847142
! Node: Trouble2848238
! Node: Actual Bugs2849655
! Node: Interoperation2850102
! Node: Incompatibilities2856993
! Node: Fixed Headers2865145
! Node: Standard Libraries2866803
! Node: Disappointments2868175
! Node: C++ Misunderstandings2872534
! Node: Static Definitions2873345
! Node: Name lookup2874398
! Ref: Name lookup-Footnote-12879179
! Node: Temporaries2879368
! Node: Copy Assignment2881344
! Node: Non-bugs2883179
! Node: Warnings and Errors2893685
! Node: Bugs2895447
! Node: Bug Criteria2895914
! Node: Bug Reporting2898124
! Node: Service2898342
! Node: Contributing2899163
! Node: Funding2899909
! Node: GNU Project2902399
! Node: Copying2903047
! Node: GNU Free Documentation License2940561
! Node: Contributors2965684
! Node: Indices3006880
! Node: Option Index3007126
! Node: Concept and Symbol Index3325666
  
  End Tag Table
--- 78933,79408 ----
  * ynl:                                   Other Builtins.     (line    6)
  * zda variable attribute, V850:          V850 Variable Attributes.
                                                               (line   16)
  * zero_call_used_regs function attribute: Common Function Attributes.
                                                               (line 1639)
+ * zero-length arrays:                    Zero Length.        (line    6)
+ * zero-size structures:                  Empty Structures.   (line    6)
  * zSeries options:                       zSeries Options.    (line    6)
  
  
  
  Tag Table:
! Node: Top2240
! Node: G++ and GCC4175
! Node: Standards6233
! Node: Invoking GCC21043
! Node: Option Summary26374
! Node: Overall Options88654
! Node: Invoking G++118122
! Node: C Dialect Options119733
! Node: C++ Dialect Options146695
! Node: Objective-C and Objective-C++ Dialect Options218389
! Node: Diagnostic Message Formatting Options230582
! Node: Warning Options265102
! Ref: Wtrigraphs389085
! Node: Static Analyzer Options441417
! Node: Debugging Options486593
! Node: Optimize Options507283
! Ref: Type-punning584661
! Node: Instrumentation Options715820
! Node: Preprocessor Options779036
! Ref: dashMF784063
! Ref: fdollars-in-identifiers788993
! Node: Assembler Options802692
! Node: Link Options803395
! Ref: Link Options-Footnote-1821135
! Node: Directory Options821673
! Node: Code Gen Options830516
! Node: Developer Options861001
! Node: Submodel Options908959
! Node: AArch64 Options910683
! Ref: aarch64-feature-modifiers929427
! Node: Adapteva Epiphany Options936127
! Node: AMD GCN Options942273
! Node: ARC Options944666
! Node: ARM Options966855
! Node: AVR Options1014346
! Ref: avr21015278
! Ref: avr251015597
! Ref: avr31016305
! Ref: avr311016445
! Ref: avr351016574
! Ref: avr41016917
! Ref: avr51017497
! Ref: avr511019790
! Ref: avr61020143
! Ref: avrxmega21020367
! Ref: avrxmega31021248
! Ref: avrxmega41023361
! Ref: avrxmega51023918
! Ref: avrxmega61024118
! Ref: avrxmega71024670
! Ref: avrtiny1024876
! Ref: avr11025182
! Ref: eind1031963
! Ref: ramp1036900
! Ref: avr-macros1038493
! Node: Blackfin Options1048046
! Node: C6X Options1056314
! Node: CRIS Options1057957
! Node: C-SKY Options1061304
! Node: Darwin Options1067595
! Node: DEC Alpha Options1076326
! Node: eBPF Options1088382
! Node: FR30 Options1092142
! Node: FT32 Options1092714
! Node: FRV Options1093684
! Node: GNU/Linux Options1100792
! Node: H8/300 Options1102277
! Node: HPPA Options1103805
! Node: IA-64 Options1114902
! Node: LM32 Options1123362
! Node: LoongArch Options1123914
! Node: M32C Options1137526
! Node: M32R/D Options1138832
! Node: M680x0 Options1142537
! Node: MCore Options1157752
! Node: MicroBlaze Options1159353
! Node: MIPS Options1162584
! Node: MMIX Options1202140
! Node: MN10300 Options1204729
! Node: Moxie Options1207388
! Node: MSP430 Options1207899
! Node: NDS32 Options1215968
! Node: Nios II Options1218238
! Node: Nvidia PTX Options1232070
! Node: OpenRISC Options1235784
! Node: PDP-11 Options1238690
! Node: PowerPC Options1240010
! Node: PRU Options1240228
! Node: RISC-V Options1243105
! Node: RL78 Options1266572
! Node: RS/6000 and PowerPC Options1270519
! Node: RX Options1314214
! Node: S/390 and zSeries Options1323172
! Node: SH Options1334489
! Node: Solaris 2 Options1350233
! Node: SPARC Options1351523
! Node: System V Options1367961
! Node: V850 Options1368826
! Node: VAX Options1375862
! Node: Visium Options1376582
! Node: VMS Options1378970
! Node: VxWorks Options1379834
! Node: x86 Options1381303
! Node: x86 Windows Options1463634
! Node: Xstormy16 Options1467804
! Node: Xtensa Options1468102
! Node: zSeries Options1475205
! Node: Spec Files1475401
! Node: Environment Variables1502772
! Node: Precompiled Headers1512593
! Node: C++ Modules1518926
! Ref: C++ Modules-Footnote-11524661
! Node: C++ Module Mapper1524922
! Node: C++ Module Preprocessing1530175
! Node: C++ Compiled Module Interface1532048
! Ref: C++ Compiled Module Interface-Footnote-11535476
! Ref: C++ Compiled Module Interface-Footnote-21535565
! Node: C Implementation1535621
! Node: Translation implementation1537312
! Node: Environment implementation1537915
! Node: Identifiers implementation1538475
! Node: Characters implementation1539579
! Node: Integers implementation1543363
! Node: Floating point implementation1545464
! Node: Arrays and pointers implementation1548696
! Ref: Arrays and pointers implementation-Footnote-11550168
! Node: Hints implementation1550298
! Node: Structures unions enumerations and bit-fields implementation1551851
! Node: Qualifiers implementation1554199
! Node: Declarators implementation1556282
! Node: Statements implementation1556629
! Node: Preprocessing directives implementation1556969
! Node: Library functions implementation1559400
! Node: Architecture implementation1560075
! Node: Locale-specific behavior implementation1561776
! Node: C++ Implementation1562081
! Node: Conditionally-supported behavior1563365
! Node: Exception handling1563992
! Node: C Extensions1564406
! Node: Statement Exprs1569813
! Node: Local Labels1575337
! Node: Labels as Values1578326
! Ref: Labels as Values-Footnote-11581004
! Node: Nested Functions1581189
! Node: Nonlocal Gotos1585215
! Node: Constructing Calls1587541
! Node: Typeof1592281
! Node: Conditionals1596696
! Node: __int1281597593
! Node: Long Long1598138
! Node: Complex1599673
! Node: Floating Types1604642
! Node: Half-Precision1608356
! Node: Decimal Float1611948
! Node: Hex Floats1613902
! Node: Fixed-Point1615032
! Node: Named Address Spaces1618816
! Ref: AVR Named Address Spaces1619510
! Node: Zero Length1627168
! Node: Empty Structures1633117
! Node: Variable Length1633527
! Node: Variadic Macros1636281
! Node: Escaped Newlines1638679
! Node: Subscripting1639540
! Node: Pointer Arith1640269
! Node: Variadic Pointer Args1640870
! Node: Pointers to Arrays1641611
! Node: Initializers1642376
! Node: Compound Literals1642877
! Node: Designated Inits1646492
! Node: Case Ranges1650484
! Node: Cast to Union1651177
! Node: Mixed Labels and Declarations1652941
! Node: Function Attributes1653578
! Node: Common Function Attributes1658038
! Ref: Common Function Attributes-Footnote-11742877
! Node: AArch64 Function Attributes1743194
! Node: AMD GCN Function Attributes1749644
! Node: ARC Function Attributes1752849
! Node: ARM Function Attributes1755890
! Node: AVR Function Attributes1761193
! Node: Blackfin Function Attributes1765794
! Node: BPF Function Attributes1768383
! Node: C-SKY Function Attributes1769527
! Node: Epiphany Function Attributes1770851
! Node: H8/300 Function Attributes1773678
! Node: IA-64 Function Attributes1774888
! Node: M32C Function Attributes1775946
! Node: M32R/D Function Attributes1778324
! Node: m68k Function Attributes1779846
! Node: MCORE Function Attributes1780806
! Node: MicroBlaze Function Attributes1781640
! Node: Microsoft Windows Function Attributes1783193
! Node: MIPS Function Attributes1787878
! Node: MSP430 Function Attributes1794474
! Node: NDS32 Function Attributes1798693
! Node: Nios II Function Attributes1801177
! Node: Nvidia PTX Function Attributes1802510
! Node: PowerPC Function Attributes1803133
! Node: RISC-V Function Attributes1810151
! Node: RL78 Function Attributes1813592
! Node: RX Function Attributes1814875
! Node: S/390 Function Attributes1817478
! Node: SH Function Attributes1819426
! Node: Symbian OS Function Attributes1822914
! Node: V850 Function Attributes1823258
! Node: Visium Function Attributes1823811
! Node: x86 Function Attributes1824343
! Node: Xstormy16 Function Attributes1852335
! Node: Variable Attributes1852846
! Node: Common Variable Attributes1854583
! Node: ARC Variable Attributes1879112
! Node: AVR Variable Attributes1879502
! Node: Blackfin Variable Attributes1885255
! Node: H8/300 Variable Attributes1886161
! Node: IA-64 Variable Attributes1887242
! Node: LoongArch Variable Attributes1888008
! Node: M32R/D Variable Attributes1888704
! Node: Microsoft Windows Variable Attributes1889529
! Node: MSP430 Variable Attributes1892045
! Node: Nvidia PTX Variable Attributes1893295
! Node: PowerPC Variable Attributes1893920
! Node: RL78 Variable Attributes1894493
! Node: V850 Variable Attributes1894916
! Node: x86 Variable Attributes1895561
! Node: Xstormy16 Variable Attributes1896653
! Node: Type Attributes1897247
! Node: Common Type Attributes1899129
! Node: ARC Type Attributes1937435
! Node: ARM Type Attributes1937923
! Node: BPF Type Attributes1938733
! Node: PowerPC Type Attributes1939266
! Node: x86 Type Attributes1940303
! Node: Label Attributes1941331
! Node: Enumerator Attributes1943414
! Node: Statement Attributes1944974
! Node: Attribute Syntax1947314
! Node: Function Prototypes1959864
! Node: C++ Comments1961676
! Node: Dollar Signs1962211
! Node: Character Escapes1962676
! Node: Alignment1962964
! Node: Inline1964673
! Node: Const and Volatile Functions1969649
! Node: Volatiles1970891
! Node: Using Assembly Language with C1973812
! Node: Basic Asm1975089
! Node: Extended Asm1980928
! Ref: Volatile1985174
! Ref: AssemblerTemplate1989379
! Ref: OutputOperands1993707
! Ref: FlagOutputOperands2000987
! Ref: InputOperands2004308
! Ref: Clobbers and Scratch Registers2008777
! Ref: GotoLabels2017630
! Ref: GenericOperandmodifiers2021389
! Ref: aarch64Operandmodifiers2022383
! Ref: x86Operandmodifiers2023512
! Ref: x86floatingpointasmoperands2028894
! Ref: msp430Operandmodifiers2032317
! Ref: loongarchOperandmodifiers2034107
! Ref: riscvOperandmodifiers2035959
! Node: Constraints2036385
! Node: Simple Constraints2037511
! Node: Multi-Alternative2045085
! Node: Modifiers2046784
! Node: Machine Constraints2049667
! Node: Asm Labels2108205
! Node: Explicit Register Variables2109853
! Ref: Explicit Reg Vars2110067
! Node: Global Register Variables2110676
! Ref: Global Reg Vars2110884
! Node: Local Register Variables2115738
! Ref: Local Reg Vars2115958
! Node: Size of an asm2119648
! Node: Alternate Keywords2121150
! Node: Incomplete Enums2122992
! Node: Function Names2123773
! Node: Return Address2125721
! Node: Stack Scrubbing2131644
! Node: Vector Extensions2133958
! Node: Offsetof2145570
! Node: __sync Builtins2146415
! Node: __atomic Builtins2153476
! Node: Integer Overflow Builtins2167301
! Node: x86 specific memory model extensions for transactional memory2176280
! Node: Object Size Checking2177566
! Node: Other Builtins2185229
! Node: Target Builtins2251053
! Node: AArch64 Built-in Functions2252936
! Node: Alpha Built-in Functions2253632
! Node: Altera Nios II Built-in Functions2256770
! Node: ARC Built-in Functions2261253
! Node: ARC SIMD Built-in Functions2266879
! Node: ARM iWMMXt Built-in Functions2277385
! Node: ARM C Language Extensions (ACLE)2284525
! Node: ARM Floating Point Status and Control Intrinsics2285806
! Node: ARM ARMv8-M Security Extensions2286293
! Node: AVR Built-in Functions2287593
! Node: Blackfin Built-in Functions2291710
! Node: BPF Built-in Functions2292338
! Node: FR-V Built-in Functions2298866
! Node: Argument Types2299747
! Node: Directly-mapped Integer Functions2301682
! Node: Directly-mapped Media Functions2302962
! Node: Raw read/write Functions2312300
! Node: Other Built-in Functions2313244
! Node: LoongArch Base Built-in Functions2314462
! Node: LoongArch SX Vector Intrinsics2321262
! Node: LoongArch ASX Vector Intrinsics2360202
! Node: MIPS DSP Built-in Functions2401552
! Node: MIPS Paired-Single Support2414519
! Node: MIPS Loongson Built-in Functions2416042
! Node: Paired-Single Arithmetic2422604
! Node: Paired-Single Built-in Functions2423731
! Node: MIPS-3D Built-in Functions2426594
! Node: MIPS SIMD Architecture (MSA) Support2432368
! Node: MIPS SIMD Architecture Built-in Functions2435372
! Node: Other MIPS Built-in Functions2462226
! Node: MSP430 Built-in Functions2463259
! Node: NDS32 Built-in Functions2464672
! Node: Nvidia PTX Built-in Functions2465967
! Node: Basic PowerPC Built-in Functions2466561
! Node: Basic PowerPC Built-in Functions Available on all Configurations2467421
! Node: Basic PowerPC Built-in Functions Available on ISA 2.052476794
! Node: Basic PowerPC Built-in Functions Available on ISA 2.062482954
! Node: Basic PowerPC Built-in Functions Available on ISA 2.072485070
! Node: Basic PowerPC Built-in Functions Available on ISA 3.02485933
! Node: Basic PowerPC Built-in Functions Available on ISA 3.12493468
! Node: PowerPC AltiVec/VSX Built-in Functions2497449
! Node: PowerPC AltiVec Built-in Functions on ISA 2.052506398
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062531802
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072538916
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02549050
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12566080
! Node: PowerPC Hardware Transactional Memory Built-in Functions2599776
! Node: PowerPC Atomic Memory Operation Functions2608378
! Node: PowerPC Matrix-Multiply Assist Built-in Functions2610945
! Node: PRU Built-in Functions2617074
! Node: RISC-V Built-in Functions2618354
! Node: RISC-V Vector Intrinsics2619032
! Node: CORE-V Built-in Functions2619535
! Node: RX Built-in Functions2659414
! Node: S/390 System z Built-in Functions2663508
! Node: SH Built-in Functions2668869
! Node: SPARC VIS Built-in Functions2670633
! Node: TI C6X Built-in Functions2679184
! Node: x86 Built-in Functions2680235
! Node: x86 transactional memory intrinsics2747769
! Node: x86 control-flow protection intrinsics2751123
! Node: Target Format Checks2752910
! Node: Solaris Format Checks2753342
! Node: Darwin Format Checks2753792
! Node: Pragmas2754799
! Node: AArch64 Pragmas2755724
! Node: ARM Pragmas2756189
! Node: M32C Pragmas2756852
! Node: PRU Pragmas2757944
! Node: RS/6000 and PowerPC Pragmas2758527
! Node: S/390 Pragmas2759299
! Node: Darwin Pragmas2759877
! Node: Solaris Pragmas2760961
! Node: Symbol-Renaming Pragmas2762161
! Node: Structure-Layout Pragmas2763824
! Node: Weak Pragmas2766188
! Node: Diagnostic Pragmas2766935
! Node: Visibility Pragmas2771795
! Node: Push/Pop Macro Pragmas2772492
! Node: Function Specific Option Pragmas2773489
! Node: Loop-Specific Pragmas2775519
! Node: Unnamed Fields2777652
! Node: Thread-Local2779925
! Node: C99 Thread-Local Edits2782079
! Node: C++98 Thread-Local Edits2784153
! Node: Binary constants2787694
! Node: C++ Extensions2788393
! Node: C++ Volatiles2790039
! Node: Restricted Pointers2792387
! Node: Vague Linkage2794030
! Node: C++ Interface2797681
! Ref: C++ Interface-Footnote-12801570
! Node: Template Instantiation2801724
! Node: Bound member functions2807844
! Node: C++ Attributes2809388
! Node: Function Multiversioning2815749
! Node: Type Traits2817557
! Node: C++ Concepts2825631
! Node: Deprecated Features2827205
! Node: Backwards Compatibility2829042
! Node: Objective-C2830126
! Node: GNU Objective-C runtime API2830733
! Node: Modern GNU Objective-C runtime API2831740
! Node: Traditional GNU Objective-C runtime API2834252
! Node: Executing code before main2834991
! Node: What you can and what you cannot do in +load2837827
! Node: Type encoding2840311
! Node: Legacy type encoding2846073
! Node: @encode2847177
! Node: Method signatures2847758
! Node: Garbage Collection2849816
! Node: Constant string objects2852542
! Node: compatibility_alias2855107
! Node: Exceptions2855868
! Node: Synchronization2858666
! Node: Fast enumeration2859886
! Node: Using fast enumeration2860198
! Node: c99-like fast enumeration syntax2861437
! Node: Fast enumeration details2862144
! Node: Fast enumeration protocol2864570
! Node: Messaging with the GNU Objective-C runtime2867814
! Node: Dynamically registering methods2869206
! Node: Forwarding hook2870953
! Node: Compatibility2874065
! Node: Gcov2880703
! Node: Gcov Intro2881379
! Node: Invoking Gcov2884171
! Node: Gcov and Optimization2909480
! Node: Gcov Data Files2913313
! Node: Cross-profiling2914782
! Node: Freestanding Environments2916718
! Node: Gcov-tool2931849
! Node: Gcov-tool Intro2932282
! Node: Invoking Gcov-tool2934664
! Node: Gcov-dump2938261
! Node: Gcov-dump Intro2938588
! Node: Invoking Gcov-dump2938863
! Node: lto-dump2939660
! Node: lto-dump Intro2939963
! Node: Invoking lto-dump2940221
! Node: Trouble2941389
! Node: Actual Bugs2942806
! Node: Interoperation2943263
! Node: Incompatibilities2950312
! Node: Fixed Headers2958730
! Node: Standard Libraries2960404
! Node: Disappointments2961808
! Node: C++ Misunderstandings2966213
! Node: Static Definitions2967024
! Node: Name lookup2968109
! Ref: Name lookup-Footnote-12973018
! Node: Temporaries2973207
! Node: Copy Assignment2975235
! Node: Non-bugs2977102
! Node: Warnings and Errors2987794
! Node: Bugs2989584
! Node: Bug Criteria2990051
! Node: Bug Reporting2992293
! Node: Service2992511
! Node: Contributing2993336
! Node: Funding2994082
! Node: GNU Project2996571
! Node: Copying2997219
! Node: GNU Free Documentation License3034748
! Node: Contributors3059874
! Node: Indices3102432
! Node: Option Index3102678
! Node: Concept and Symbol Index3421234
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/gccgo.1 gcc-14.3.0-RC-20260619/gcc/doc/gccgo.1
*** gcc-14.3.0/gcc/doc/gccgo.1	Fri May 23 11:28:13 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gccgo.1	Fri Jun 19 07:14:58 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,142 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GCCGO 1"
! .TH GCCGO 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gccgo \- A GCC\-based compiler for the Go language
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  gccgo [\fB\-c\fR|\fB\-S\fR]
        [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
--- 38,71 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GCCGO 1"
! .TH GCCGO 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gccgo \- A GCC\-based compiler for the Go language
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  gccgo [\fB\-c\fR|\fB\-S\fR]
        [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
*************** gccgo [\fB\-c\fR|\fB\-S\fR]
*** 145,151 ****
  .PP
  Only the most useful options are listed here; see below for the
  remainder.
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
  The \fBgccgo\fR command is a frontend to \fBgcc\fR and
  supports many of the same options.    This manual
--- 74,80 ----
  .PP
  Only the most useful options are listed here; see below for the
  remainder.
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
  The \fBgccgo\fR command is a frontend to \fBgcc\fR and
  supports many of the same options.    This manual
*************** the link command.
*** 170,186 ****
  Go programs must generally be compiled with debugging information, and
  \&\fB\-g1\fR is the default as described below.  Stripping a Go
  program will generally cause it to misbehave or fail.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
! .IP "\fB\-I\fR\fIdir\fR" 4
  .IX Item "-Idir"
  Specify a directory to use when searching for an import package at
  compile time.
! .IP "\fB\-L\fR\fIdir\fR" 4
  .IX Item "-Ldir"
  When linking, specify a library search directory, as with
  \&\fBgcc\fR.
! .IP "\fB\-fgo\-pkgpath=\fR\fIstring\fR" 4
  .IX Item "-fgo-pkgpath=string"
  Set the package path to use.  This sets the value returned by the
  PkgPath method of reflect.Type objects.  It is also used for the names
--- 99,115 ----
  Go programs must generally be compiled with debugging information, and
  \&\fB\-g1\fR is the default as described below.  Stripping a Go
  program will generally cause it to misbehave or fail.
! .SH OPTIONS
  .IX Header "OPTIONS"
! .IP \fB\-I\fR\fIdir\fR 4
  .IX Item "-Idir"
  Specify a directory to use when searching for an import package at
  compile time.
! .IP \fB\-L\fR\fIdir\fR 4
  .IX Item "-Ldir"
  When linking, specify a library search directory, as with
  \&\fBgcc\fR.
! .IP \fB\-fgo\-pkgpath=\fR\fIstring\fR 4
  .IX Item "-fgo-pkgpath=string"
  Set the package path to use.  This sets the value returned by the
  PkgPath method of reflect.Type objects.  It is also used for the names
*************** of globally visible symbols.  The argume
*** 188,194 ****
  normally be the string that will be used to import this package after
  it has been installed; in other words, a pathname within the
  directories specified by the \fB\-I\fR option.
! .IP "\fB\-fgo\-prefix=\fR\fIstring\fR" 4
  .IX Item "-fgo-prefix=string"
  An alternative to \fB\-fgo\-pkgpath\fR.  The argument will be
  combined with the package name from the source file to produce the
--- 117,123 ----
  normally be the string that will be used to import this package after
  it has been installed; in other words, a pathname within the
  directories specified by the \fB\-I\fR option.
! .IP \fB\-fgo\-prefix=\fR\fIstring\fR 4
  .IX Item "-fgo-prefix=string"
  An alternative to \fB\-fgo\-pkgpath\fR.  The argument will be
  combined with the package name from the source file to produce the
*************** compiling a package.
*** 205,237 ****
  Using either \fB\-fgo\-pkgpath\fR or \fB\-fgo\-prefix\fR disables
  the special treatment of the \f(CW\*(C`main\*(C'\fR package and permits that
  package to be imported like any other.
! .IP "\fB\-fgo\-relative\-import\-path=\fR\fIdir\fR" 4
  .IX Item "-fgo-relative-import-path=dir"
  A relative import is an import that starts with \fI./\fR or
  \&\fI../\fR.  If this option is used, \fBgccgo\fR will use
  \&\fIdir\fR as a prefix for the relative import when searching for it.
! .IP "\fB\-frequire\-return\-statement\fR" 4
  .IX Item "-frequire-return-statement"
  .PD 0
! .IP "\fB\-fno\-require\-return\-statement\fR" 4
  .IX Item "-fno-require-return-statement"
  .PD
  By default \fBgccgo\fR will warn about functions which have one or
  more return parameters but lack an explicit \f(CW\*(C`return\*(C'\fR statement.
  This warning may be disabled using
  \&\fB\-fno\-require\-return\-statement\fR.
! .IP "\fB\-fgo\-check\-divide\-zero\fR" 4
  .IX Item "-fgo-check-divide-zero"
  Add explicit checks for division by zero.  In Go a division (or
  modulos) by zero causes a panic.  On Unix systems this is detected in
  the runtime by catching the \f(CW\*(C`SIGFPE\*(C'\fR signal.  Some processors,
! such as PowerPC, do not generate a \s-1SIGFPE\s0 on division by zero.  Some
  runtimes do not generate a signal that can be caught.  On those
  systems, this option may be used.  Or the checks may be removed via
  \&\fB\-fno\-go\-check\-divide\-zero\fR.  This option is currently on by
  default, but in the future may be off by default on systems that do
  not require it.
! .IP "\fB\-fgo\-check\-divide\-overflow\fR" 4
  .IX Item "-fgo-check-divide-overflow"
  Add explicit checks for division overflow.  For example, division
  overflow occurs when computing \f(CW\*(C`INT_MIN / \-1\*(C'\fR.  In Go this should
--- 134,166 ----
  Using either \fB\-fgo\-pkgpath\fR or \fB\-fgo\-prefix\fR disables
  the special treatment of the \f(CW\*(C`main\*(C'\fR package and permits that
  package to be imported like any other.
! .IP \fB\-fgo\-relative\-import\-path=\fR\fIdir\fR 4
  .IX Item "-fgo-relative-import-path=dir"
  A relative import is an import that starts with \fI./\fR or
  \&\fI../\fR.  If this option is used, \fBgccgo\fR will use
  \&\fIdir\fR as a prefix for the relative import when searching for it.
! .IP \fB\-frequire\-return\-statement\fR 4
  .IX Item "-frequire-return-statement"
  .PD 0
! .IP \fB\-fno\-require\-return\-statement\fR 4
  .IX Item "-fno-require-return-statement"
  .PD
  By default \fBgccgo\fR will warn about functions which have one or
  more return parameters but lack an explicit \f(CW\*(C`return\*(C'\fR statement.
  This warning may be disabled using
  \&\fB\-fno\-require\-return\-statement\fR.
! .IP \fB\-fgo\-check\-divide\-zero\fR 4
  .IX Item "-fgo-check-divide-zero"
  Add explicit checks for division by zero.  In Go a division (or
  modulos) by zero causes a panic.  On Unix systems this is detected in
  the runtime by catching the \f(CW\*(C`SIGFPE\*(C'\fR signal.  Some processors,
! such as PowerPC, do not generate a SIGFPE on division by zero.  Some
  runtimes do not generate a signal that can be caught.  On those
  systems, this option may be used.  Or the checks may be removed via
  \&\fB\-fno\-go\-check\-divide\-zero\fR.  This option is currently on by
  default, but in the future may be off by default on systems that do
  not require it.
! .IP \fB\-fgo\-check\-divide\-overflow\fR 4
  .IX Item "-fgo-check-divide-overflow"
  Add explicit checks for division overflow.  For example, division
  overflow occurs when computing \f(CW\*(C`INT_MIN / \-1\*(C'\fR.  In Go this should
*************** may be used.  Or the checks may be remov
*** 241,288 ****
  \&\fB\-fno\-go\-check\-divide\-overflow\fR.  This option is currently on
  by default, but in the future may be off by default on systems that do
  not require it.
! .IP "\fB\-fno\-go\-optimize\-allocs\fR" 4
  .IX Item "-fno-go-optimize-allocs"
  Disable escape analysis, which tries to allocate objects on the stack
  rather than the heap.
! .IP "\fB\-fgo\-debug\-escape\fR\fIn\fR" 4
  .IX Item "-fgo-debug-escapen"
  Output escape analysis debugging information.  Larger values of
  \&\fIn\fR generate more information.
! .IP "\fB\-fgo\-debug\-escape\-hash=\fR\fIn\fR" 4
  .IX Item "-fgo-debug-escape-hash=n"
  A hash value to debug escape analysis.  \fIn\fR is a binary string.
  This runs escape analysis only on functions whose names hash to values
  that match the given suffix \fIn\fR.  This can be used to binary
  search across functions to uncover escape analysis bugs.
! .IP "\fB\-fgo\-debug\-optimization\fR" 4
  .IX Item "-fgo-debug-optimization"
  Output optimization diagnostics.
! .IP "\fB\-fgo\-c\-header=\fR\fIfile\fR" 4
  .IX Item "-fgo-c-header=file"
! Write top-level named Go struct definitions to \fIfile\fR as C code.
  This is used when compiling the runtime package.
! .IP "\fB\-fgo\-compiling\-runtime\fR" 4
  .IX Item "-fgo-compiling-runtime"
  Apply special rules for compiling the runtime package.  Implicit
  memory allocation is forbidden.  Some additional compiler directives
  are supported.
! .IP "\fB\-fgo\-embedcfg=\fR\fIfile\fR" 4
  .IX Item "-fgo-embedcfg=file"
! Identify a \s-1JSON\s0 file used to map patterns used with special
  \&\f(CW\*(C`//go:embed\*(C'\fR comments to the files named by the patterns.  The
! \&\s-1JSON\s0 file should have two components: \f(CW\*(C`Patterns\*(C'\fR maps each
  pattern to a list of file names, and \f(CW\*(C`Files\*(C'\fR maps each file name
  to a full path to the file.  This option is intended for use by the
  \&\fBgo\fR command to implement \f(CW\*(C`//go:embed\*(C'\fR.
! .IP "\fB\-fgo\-importcfg=\fR\fIfile\fR" 4
  .IX Item "-fgo-importcfg=file"
  Identify a file that provides mappings for import package paths found
  in the Go source files.  The file can contain two commands:
  \&\f(CW\*(C`importpath\*(C'\fR to rename import paths for vendoring and
  \&\f(CW\*(C`packagefile\*(C'\fR to map from package path to files containing export
  data.  This option is intended for use by the \fBgo\fR command.
! .IP "\fB\-g\fR" 4
  .IX Item "-g"
  This is the standard \fBgcc\fR option.  It
  is mentioned here because by default \fBgccgo\fR turns on
--- 170,217 ----
  \&\fB\-fno\-go\-check\-divide\-overflow\fR.  This option is currently on
  by default, but in the future may be off by default on systems that do
  not require it.
! .IP \fB\-fno\-go\-optimize\-allocs\fR 4
  .IX Item "-fno-go-optimize-allocs"
  Disable escape analysis, which tries to allocate objects on the stack
  rather than the heap.
! .IP \fB\-fgo\-debug\-escape\fR\fIn\fR 4
  .IX Item "-fgo-debug-escapen"
  Output escape analysis debugging information.  Larger values of
  \&\fIn\fR generate more information.
! .IP \fB\-fgo\-debug\-escape\-hash=\fR\fIn\fR 4
  .IX Item "-fgo-debug-escape-hash=n"
  A hash value to debug escape analysis.  \fIn\fR is a binary string.
  This runs escape analysis only on functions whose names hash to values
  that match the given suffix \fIn\fR.  This can be used to binary
  search across functions to uncover escape analysis bugs.
! .IP \fB\-fgo\-debug\-optimization\fR 4
  .IX Item "-fgo-debug-optimization"
  Output optimization diagnostics.
! .IP \fB\-fgo\-c\-header=\fR\fIfile\fR 4
  .IX Item "-fgo-c-header=file"
! Write top\-level named Go struct definitions to \fIfile\fR as C code.
  This is used when compiling the runtime package.
! .IP \fB\-fgo\-compiling\-runtime\fR 4
  .IX Item "-fgo-compiling-runtime"
  Apply special rules for compiling the runtime package.  Implicit
  memory allocation is forbidden.  Some additional compiler directives
  are supported.
! .IP \fB\-fgo\-embedcfg=\fR\fIfile\fR 4
  .IX Item "-fgo-embedcfg=file"
! Identify a JSON file used to map patterns used with special
  \&\f(CW\*(C`//go:embed\*(C'\fR comments to the files named by the patterns.  The
! JSON file should have two components: \f(CW\*(C`Patterns\*(C'\fR maps each
  pattern to a list of file names, and \f(CW\*(C`Files\*(C'\fR maps each file name
  to a full path to the file.  This option is intended for use by the
  \&\fBgo\fR command to implement \f(CW\*(C`//go:embed\*(C'\fR.
! .IP \fB\-fgo\-importcfg=\fR\fIfile\fR 4
  .IX Item "-fgo-importcfg=file"
  Identify a file that provides mappings for import package paths found
  in the Go source files.  The file can contain two commands:
  \&\f(CW\*(C`importpath\*(C'\fR to rename import paths for vendoring and
  \&\f(CW\*(C`packagefile\*(C'\fR to map from package path to files containing export
  data.  This option is intended for use by the \fBgo\fR command.
! .IP \fB\-g\fR 4
  .IX Item "-g"
  This is the standard \fBgcc\fR option.  It
  is mentioned here because by default \fBgccgo\fR turns on
*************** debugging information, in which case cer
*** 294,320 ****
  functions, such as \f(CW\*(C`runtime.Callers\*(C'\fR, will not operate correctly.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1)
  and the Info entries for \fIgccgo\fR and \fIgcc\fR.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2010\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 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
! man page \fIgfdl\fR\|(7).
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 223,249 ----
  functions, such as \f(CW\*(C`runtime.Callers\*(C'\fR, will not operate correctly.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1)
  and the Info entries for \fIgccgo\fR and \fIgcc\fR.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2010\-2024 Free Software Foundation, Inc.
  .PP
  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
! man page \fBgfdl\fR\|(7).
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gccgo.info gcc-14.3.0-RC-20260619/gcc/doc/gccgo.info
*** gcc-14.3.0/gcc/doc/gccgo.info	Fri May 23 11:28:13 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gccgo.info	Fri Jun 19 07:14:58 2026
***************
*** 1,6 ****
! This is gccgo.info, produced by makeinfo version 6.5 from gccgo.texi.
  
! Copyright (C) 2010-2024 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
--- 1,6 ----
! This is gccgo.info, produced by makeinfo version 7.1 from gccgo.texi.
  
! Copyright © 2010-2024 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
*************** START-INFO-DIR-ENTRY
*** 24,30 ****
  END-INFO-DIR-ENTRY
  
  
!    Copyright (C) 2010-2024 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
--- 24,30 ----
  END-INFO-DIR-ENTRY
  
  
!    Copyright © 2010-2024 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
*************** File: gccgo.info,  Node: Top,  Next: Cop
*** 49,56 ****
  Introduction
  ************
  
! This manual describes how to use 'gccgo', the GNU compiler for the Go
! programming language.  This manual is specifically about 'gccgo'.  For
  more information about the Go programming language in general, including
  language specifications and standard package documentation, see
  <https://golang.org/>.
--- 49,56 ----
  Introduction
  ************
  
! This manual describes how to use ‘gccgo’, the GNU compiler for the Go
! programming language.  This manual is specifically about ‘gccgo’.  For
  more information about the Go programming language in general, including
  language specifications and standard package documentation, see
  <https://golang.org/>.
*************** GNU General Public License
*** 74,80 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 74,80 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 761,771 ****
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!    The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 761,771 ----
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!    The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** GNU Free Documentation License
*** 790,796 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 790,796 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 799,805 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 799,805 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** File: gccgo.info,  Node: Invoking gccgo,
*** 1270,1411 ****
  1 Invoking gccgo
  ****************
  
! The 'gccgo' command is a frontend to 'gcc' and supports many of the same
  options.  *Note Option Summary: (gcc)Option Summary.  This manual only
! documents the options specific to 'gccgo'.
  
!    The 'gccgo' command may be used to compile Go source code into an
  object file, link a collection of object files together, or do both in
  sequence.
  
     Go source code is compiled as packages.  A package consists of one or
  more Go source files.  All the files in a single package must be
! compiled together, by passing all the files as arguments to 'gccgo'.  A
! single invocation of 'gccgo' may only compile a single package.
  
!    One Go package may 'import' a different Go package.  The imported
! package must have already been compiled; 'gccgo' will read the import
  data directly from the compiled package.  When this package is later
  linked, the compiled form of the package must be included in the link
  command.
  
     Go programs must generally be compiled with debugging information,
! and '-g1' is the default as described below.  Stripping a Go program
  will generally cause it to misbehave or fail.
  
! '-IDIR'
       Specify a directory to use when searching for an import package at
       compile time.
  
! '-LDIR'
!      When linking, specify a library search directory, as with 'gcc'.
  
! '-fgo-pkgpath=STRING'
       Set the package path to use.  This sets the value returned by the
       PkgPath method of reflect.Type objects.  It is also used for the
       names of globally visible symbols.  The argument to this option
       should normally be the string that will be used to import this
       package after it has been installed; in other words, a pathname
!      within the directories specified by the '-I' option.
  
! '-fgo-prefix=STRING'
!      An alternative to '-fgo-pkgpath'.  The argument will be combined
       with the package name from the source file to produce the package
!      path.  If '-fgo-pkgpath' is used, '-fgo-prefix' will be ignored.
  
       Go permits a single program to include more than one package with
!      the same name in the 'package' clause in the source file, though
       obviously the two packages must be imported using different
!      pathnames.  In order for this to work with 'gccgo', either
!      '-fgo-pkgpath' or '-fgo-prefix' must be specified when compiling a
       package.
  
!      Using either '-fgo-pkgpath' or '-fgo-prefix' disables the special
!      treatment of the 'main' package and permits that package to be
       imported like any other.
  
! '-fgo-relative-import-path=DIR'
!      A relative import is an import that starts with './' or '../'.  If
!      this option is used, 'gccgo' will use DIR as a prefix for the
       relative import when searching for it.
  
! '-frequire-return-statement'
! '-fno-require-return-statement'
!      By default 'gccgo' will warn about functions which have one or more
!      return parameters but lack an explicit 'return' statement.  This
!      warning may be disabled using '-fno-require-return-statement'.
  
! '-fgo-check-divide-zero'
       Add explicit checks for division by zero.  In Go a division (or
       modulos) by zero causes a panic.  On Unix systems this is detected
!      in the runtime by catching the 'SIGFPE' signal.  Some processors,
       such as PowerPC, do not generate a SIGFPE on division by zero.
       Some runtimes do not generate a signal that can be caught.  On
       those systems, this option may be used.  Or the checks may be
!      removed via '-fno-go-check-divide-zero'.  This option is currently
       on by default, but in the future may be off by default on systems
       that do not require it.
  
! '-fgo-check-divide-overflow'
       Add explicit checks for division overflow.  For example, division
!      overflow occurs when computing 'INT_MIN / -1'.  In Go this should
!      be wrapped, to produce 'INT_MIN'.  Some processors, such as x86,
       generate a trap on division overflow.  On those systems, this
       option may be used.  Or the checks may be removed via
!      '-fno-go-check-divide-overflow'.  This option is currently on by
       default, but in the future may be off by default on systems that do
       not require it.
  
! '-fno-go-optimize-allocs'
       Disable escape analysis, which tries to allocate objects on the
       stack rather than the heap.
  
! '-fgo-debug-escapeN'
       Output escape analysis debugging information.  Larger values of N
       generate more information.
  
! '-fgo-debug-escape-hash=N'
       A hash value to debug escape analysis.  N is a binary string.  This
       runs escape analysis only on functions whose names hash to values
       that match the given suffix N.  This can be used to binary search
       across functions to uncover escape analysis bugs.
  
! '-fgo-debug-optimization'
       Output optimization diagnostics.
  
! '-fgo-c-header=FILE'
       Write top-level named Go struct definitions to FILE as C code.
       This is used when compiling the runtime package.
  
! '-fgo-compiling-runtime'
       Apply special rules for compiling the runtime package.  Implicit
       memory allocation is forbidden.  Some additional compiler
       directives are supported.
  
! '-fgo-embedcfg=FILE'
       Identify a JSON file used to map patterns used with special
!      '//go:embed' comments to the files named by the patterns.  The JSON
!      file should have two components: 'Patterns' maps each pattern to a
!      list of file names, and 'Files' maps each file name to a full path
!      to the file.  This option is intended for use by the 'go' command
!      to implement '//go:embed'.
  
! '-fgo-importcfg=FILE'
       Identify a file that provides mappings for import package paths
       found in the Go source files.  The file can contain two commands:
!      'importpath' to rename import paths for vendoring and 'packagefile'
       to map from package path to files containing export data.  This
!      option is intended for use by the 'go' command.
  
! '-g'
!      This is the standard 'gcc' option (*note Debugging Options:
       (gcc)Debugging Options.).  It is mentioned here because by default
!      'gccgo' turns on debugging information generation with the
!      equivalent of the standard option '-g1'.  This is because Go
       programs require debugging information to be available in order to
!      get backtrace information.  An explicit '-g0' may be used to
       disable the generation of debugging information, in which case
!      certain standard library functions, such as 'runtime.Callers', will
       not operate correctly.
  
  
--- 1270,1411 ----
  1 Invoking gccgo
  ****************
  
! The ‘gccgo’ command is a frontend to ‘gcc’ and supports many of the same
  options.  *Note Option Summary: (gcc)Option Summary.  This manual only
! documents the options specific to ‘gccgo’.
  
!    The ‘gccgo’ command may be used to compile Go source code into an
  object file, link a collection of object files together, or do both in
  sequence.
  
     Go source code is compiled as packages.  A package consists of one or
  more Go source files.  All the files in a single package must be
! compiled together, by passing all the files as arguments to ‘gccgo’.  A
! single invocation of ‘gccgo’ may only compile a single package.
  
!    One Go package may ‘import’ a different Go package.  The imported
! package must have already been compiled; ‘gccgo’ will read the import
  data directly from the compiled package.  When this package is later
  linked, the compiled form of the package must be included in the link
  command.
  
     Go programs must generally be compiled with debugging information,
! and ‘-g1’ is the default as described below.  Stripping a Go program
  will generally cause it to misbehave or fail.
  
! ‘-IDIR’
       Specify a directory to use when searching for an import package at
       compile time.
  
! ‘-LDIR’
!      When linking, specify a library search directory, as with ‘gcc’.
  
! ‘-fgo-pkgpath=STRING’
       Set the package path to use.  This sets the value returned by the
       PkgPath method of reflect.Type objects.  It is also used for the
       names of globally visible symbols.  The argument to this option
       should normally be the string that will be used to import this
       package after it has been installed; in other words, a pathname
!      within the directories specified by the ‘-I’ option.
  
! ‘-fgo-prefix=STRING’
!      An alternative to ‘-fgo-pkgpath’.  The argument will be combined
       with the package name from the source file to produce the package
!      path.  If ‘-fgo-pkgpath’ is used, ‘-fgo-prefix’ will be ignored.
  
       Go permits a single program to include more than one package with
!      the same name in the ‘package’ clause in the source file, though
       obviously the two packages must be imported using different
!      pathnames.  In order for this to work with ‘gccgo’, either
!      ‘-fgo-pkgpath’ or ‘-fgo-prefix’ must be specified when compiling a
       package.
  
!      Using either ‘-fgo-pkgpath’ or ‘-fgo-prefix’ disables the special
!      treatment of the ‘main’ package and permits that package to be
       imported like any other.
  
! ‘-fgo-relative-import-path=DIR’
!      A relative import is an import that starts with ‘./’ or ‘../’.  If
!      this option is used, ‘gccgo’ will use DIR as a prefix for the
       relative import when searching for it.
  
! ‘-frequire-return-statement’
! ‘-fno-require-return-statement’
!      By default ‘gccgo’ will warn about functions which have one or more
!      return parameters but lack an explicit ‘return’ statement.  This
!      warning may be disabled using ‘-fno-require-return-statement’.
  
! ‘-fgo-check-divide-zero’
       Add explicit checks for division by zero.  In Go a division (or
       modulos) by zero causes a panic.  On Unix systems this is detected
!      in the runtime by catching the ‘SIGFPE’ signal.  Some processors,
       such as PowerPC, do not generate a SIGFPE on division by zero.
       Some runtimes do not generate a signal that can be caught.  On
       those systems, this option may be used.  Or the checks may be
!      removed via ‘-fno-go-check-divide-zero’.  This option is currently
       on by default, but in the future may be off by default on systems
       that do not require it.
  
! ‘-fgo-check-divide-overflow’
       Add explicit checks for division overflow.  For example, division
!      overflow occurs when computing ‘INT_MIN / -1’.  In Go this should
!      be wrapped, to produce ‘INT_MIN’.  Some processors, such as x86,
       generate a trap on division overflow.  On those systems, this
       option may be used.  Or the checks may be removed via
!      ‘-fno-go-check-divide-overflow’.  This option is currently on by
       default, but in the future may be off by default on systems that do
       not require it.
  
! ‘-fno-go-optimize-allocs’
       Disable escape analysis, which tries to allocate objects on the
       stack rather than the heap.
  
! ‘-fgo-debug-escapeN’
       Output escape analysis debugging information.  Larger values of N
       generate more information.
  
! ‘-fgo-debug-escape-hash=N’
       A hash value to debug escape analysis.  N is a binary string.  This
       runs escape analysis only on functions whose names hash to values
       that match the given suffix N.  This can be used to binary search
       across functions to uncover escape analysis bugs.
  
! ‘-fgo-debug-optimization’
       Output optimization diagnostics.
  
! ‘-fgo-c-header=FILE’
       Write top-level named Go struct definitions to FILE as C code.
       This is used when compiling the runtime package.
  
! ‘-fgo-compiling-runtime’
       Apply special rules for compiling the runtime package.  Implicit
       memory allocation is forbidden.  Some additional compiler
       directives are supported.
  
! ‘-fgo-embedcfg=FILE’
       Identify a JSON file used to map patterns used with special
!      ‘//go:embed’ comments to the files named by the patterns.  The JSON
!      file should have two components: ‘Patterns’ maps each pattern to a
!      list of file names, and ‘Files’ maps each file name to a full path
!      to the file.  This option is intended for use by the ‘go’ command
!      to implement ‘//go:embed’.
  
! ‘-fgo-importcfg=FILE’
       Identify a file that provides mappings for import package paths
       found in the Go source files.  The file can contain two commands:
!      ‘importpath’ to rename import paths for vendoring and ‘packagefile’
       to map from package path to files containing export data.  This
!      option is intended for use by the ‘go’ command.
  
! ‘-g’
!      This is the standard ‘gcc’ option (*note Debugging Options:
       (gcc)Debugging Options.).  It is mentioned here because by default
!      ‘gccgo’ turns on debugging information generation with the
!      equivalent of the standard option ‘-g1’.  This is because Go
       programs require debugging information to be available in order to
!      get backtrace information.  An explicit ‘-g0’ may be used to
       disable the generation of debugging information, in which case
!      certain standard library functions, such as ‘runtime.Callers’, will
       not operate correctly.
  
  
*************** File: gccgo.info,  Node: Import and Expo
*** 1414,1451 ****
  2 Import and Export
  *******************
  
! When 'gccgo' compiles a package which exports anything, the export
  information will be stored directly in the object file.  When a package
! is imported, 'gccgo' must be able to find the file.
  
!    When Go code imports the package 'GOPACKAGE', 'gccgo' will look for
  the import data using the following filenames, using the first one that
  it finds.
  
! 'GOPACKAGE.gox'
! 'libGOPACKAGE.so'
! 'libGOPACKAGE.a'
! 'GOPACKAGE.o'
  
     The compiler will search for these files in the directories named by
! any '-I' options, in order in which the directories appear on the
  command line.  The compiler will then search several standard system
  directories.  Finally the compiler will search the current directory (to
! search the current directory earlier, use '-I.').
  
     The compiler will extract the export information directly from the
! compiled object file.  The file 'GOPACKAGE.gox' will typically contain
! nothing but export data.  This can be generated from 'GOPACKAGE.o' via
  
       objcopy -j .go_export GOPACKAGE.o GOPACKAGE.gox
  
     For example, it may be desirable to extract the export information
! from several different packages into their independent 'GOPACKAGE.gox'
  files, and then to combine the different package object files together
  into a single shared library or archive.
  
!    At link time you must explicitly tell 'gccgo' which files to link
! together into the executable, as is usual with 'gcc'.  This is different
  from the behavior of other Go compilers.
  
  
--- 1414,1451 ----
  2 Import and Export
  *******************
  
! When ‘gccgo’ compiles a package which exports anything, the export
  information will be stored directly in the object file.  When a package
! is imported, ‘gccgo’ must be able to find the file.
  
!    When Go code imports the package ‘GOPACKAGE’, ‘gccgo’ will look for
  the import data using the following filenames, using the first one that
  it finds.
  
! ‘GOPACKAGE.gox’
! ‘libGOPACKAGE.so’
! ‘libGOPACKAGE.a’
! ‘GOPACKAGE.o’
  
     The compiler will search for these files in the directories named by
! any ‘-I’ options, in order in which the directories appear on the
  command line.  The compiler will then search several standard system
  directories.  Finally the compiler will search the current directory (to
! search the current directory earlier, use ‘-I.’).
  
     The compiler will extract the export information directly from the
! compiled object file.  The file ‘GOPACKAGE.gox’ will typically contain
! nothing but export data.  This can be generated from ‘GOPACKAGE.o’ via
  
       objcopy -j .go_export GOPACKAGE.o GOPACKAGE.gox
  
     For example, it may be desirable to extract the export information
! from several different packages into their independent ‘GOPACKAGE.gox’
  files, and then to combine the different package object files together
  into a single shared library or archive.
  
!    At link time you must explicitly tell ‘gccgo’ which files to link
! together into the executable, as is usual with ‘gcc’.  This is different
  from the behavior of other Go compilers.
  
  
*************** File: gccgo.info,  Node: Compiler Direct
*** 1455,1481 ****
  *********************
  
  The Go compiler supports a few compiler directives.  A compiler
! directive uses a '//' comment at the start of a line.  There must be no
! space between the '//' and the name of the directive.
  
! '//line FILE:LINE'
!      The '//line' directive specifies that the source line that follows
       should be recorded as having come from the given file path and line
       number.  Successive lines are recorded using increasing line
       numbers, until the next directive.  This directive typically
       appears in machine-generated code, so that compilers and debuggers
       will show lines in the original input to the generator.
  
! '//extern EXTERN_NAME'
!      The 'extern' directive sets the externally visible name of the next
       function declaration.  See *note Function Names::.
  
! '//go:compile GO_NAME EXTERN_NAME'
!      The 'go:compile' directives sets the externally visible name of a
       function definition or declaration.  See *note Function Names::.
  
! '//go:noescape'
!      The '//go:noescape' directive specifies that the next declaration
       in the file, which must be a func without a body (meaning that it
       has an implementation not written in Go) does not allow any of the
       pointers passed as arguments to escape into the heap or into the
--- 1455,1481 ----
  *********************
  
  The Go compiler supports a few compiler directives.  A compiler
! directive uses a ‘//’ comment at the start of a line.  There must be no
! space between the ‘//’ and the name of the directive.
  
! ‘//line FILE:LINE’
!      The ‘//line’ directive specifies that the source line that follows
       should be recorded as having come from the given file path and line
       number.  Successive lines are recorded using increasing line
       numbers, until the next directive.  This directive typically
       appears in machine-generated code, so that compilers and debuggers
       will show lines in the original input to the generator.
  
! ‘//extern EXTERN_NAME’
!      The ‘extern’ directive sets the externally visible name of the next
       function declaration.  See *note Function Names::.
  
! ‘//go:compile GO_NAME EXTERN_NAME’
!      The ‘go:compile’ directives sets the externally visible name of a
       function definition or declaration.  See *note Function Names::.
  
! ‘//go:noescape’
!      The ‘//go:noescape’ directive specifies that the next declaration
       in the file, which must be a func without a body (meaning that it
       has an implementation not written in Go) does not allow any of the
       pointers passed as arguments to escape into the heap or into the
*************** space between the '//' and the name of t
*** 1483,1496 ****
       during the compiler's escape analysis of Go code calling the
       function.
  
! '//go:nosplit'
!      The '//go:nosplit' directive specifies that the next function
       declared in the file must not include a stack overflow check.  This
       is most commonly used by low-level runtime sources invoked at times
       when it is unsafe for the calling goroutine to be preempted.
  
! '//go:noinline'
!      The '//go:noinline' directive specifies that the next function
       defined in the file may not be inlined.
  
  
--- 1483,1496 ----
       during the compiler's escape analysis of Go code calling the
       function.
  
! ‘//go:nosplit’
!      The ‘//go:nosplit’ directive specifies that the next function
       declared in the file must not include a stack overflow check.  This
       is most commonly used by low-level runtime sources invoked at times
       when it is unsafe for the calling goroutine to be preempted.
  
! ‘//go:noinline’
!      The ‘//go:noinline’ directive specifies that the next function
       defined in the file may not be inlined.
  
  
*************** File: gccgo.info,  Node: C Interoperabil
*** 1499,1510 ****
  4 C Interoperability
  ********************
  
! When using 'gccgo' there is limited interoperability with C, or with C++
! code compiled using 'extern "C"'.
  
     This information is provided largely for documentation purposes.  For
  ordinary use it is best to build programs with the go tool and then use
! 'import "C"', as described at <https://golang.org/cmd/cgo>.
  
  * Menu:
  
--- 1499,1510 ----
  4 C Interoperability
  ********************
  
! When using ‘gccgo’ there is limited interoperability with C, or with C++
! code compiled using ‘extern "C"’.
  
     This information is provided largely for documentation purposes.  For
  ordinary use it is best to build programs with the go tool and then use
! ‘import "C"’, as described at <https://golang.org/cmd/cgo>.
  
  * Menu:
  
*************** File: gccgo.info,  Node: C Type Interope
*** 1517,1528 ****
  4.1 C Type Interoperability
  ===========================
  
! Basic types map directly: an 'int' in Go is an 'int' in C, etc.  Go
! 'byte' is equivalent to C 'unsigned char'.  Pointers in Go are pointers
! in C. A Go 'struct' is the same as C 'struct' with the same field names
  and types.
  
!    The Go 'string' type is currently defined as a two-element structure:
  
       struct __go_string {
         const unsigned char *__data;
--- 1517,1528 ----
  4.1 C Type Interoperability
  ===========================
  
! Basic types map directly: an ‘int’ in Go is an ‘int’ in C, etc.  Go
! ‘byte’ is equivalent to C ‘unsigned char’.  Pointers in Go are pointers
! in C. A Go ‘struct’ is the same as C ‘struct’ with the same field names
  and types.
  
!    The Go ‘string’ type is currently defined as a two-element structure:
  
       struct __go_string {
         const unsigned char *__data;
*************** and types.
*** 1531,1537 ****
  
     You can't pass arrays between C and Go.  However, a pointer to an
  array in Go is equivalent to a C pointer to the equivalent of the
! element type.  For example, Go '*[10]int' is equivalent to C 'int*',
  assuming that the C pointer does point to 10 elements.
  
     A slice in Go is a structure.  The current definition is:
--- 1531,1537 ----
  
     You can't pass arrays between C and Go.  However, a pointer to an
  array in Go is equivalent to a C pointer to the equivalent of the
! element type.  For example, Go ‘*[10]int’ is equivalent to C ‘int*’,
  assuming that the C pointer does point to 10 elements.
  
     A slice in Go is a structure.  The current definition is:
*************** example, these functions have equivalent
*** 1553,1565 ****
     A pointer to a Go function is equivalent to a pointer to a C function
  when the functions have equivalent types.
  
!    Go 'interface', 'channel', and 'map' types have no corresponding C
! type ('interface' is a two-element struct and 'channel' and 'map' are
  pointers to structs in C, but the structs are deliberately
! undocumented).  C 'enum' types correspond to some integer type, but
  precisely which one is difficult to predict in general; use a cast.  C
! 'union' types have no corresponding Go type.  C 'struct' types
! containing bitfields have no corresponding Go type.  C++ 'class' types
  have no corresponding Go type.
  
     Memory allocation is completely different between C and Go, as Go
--- 1553,1565 ----
     A pointer to a Go function is equivalent to a pointer to a C function
  when the functions have equivalent types.
  
!    Go ‘interface’, ‘channel’, and ‘map’ types have no corresponding C
! type (‘interface’ is a two-element struct and ‘channel’ and ‘map’ are
  pointers to structs in C, but the structs are deliberately
! undocumented).  C ‘enum’ types correspond to some integer type, but
  precisely which one is difficult to predict in general; use a cast.  C
! ‘union’ types have no corresponding Go type.  C ‘struct’ types
! containing bitfields have no corresponding Go type.  C++ ‘class’ types
  have no corresponding Go type.
  
     Memory allocation is completely different between C and Go, as Go
*************** File: gccgo.info,  Node: Function Names,
*** 1579,1621 ****
  4.2 Function Names
  ==================
  
! Go code can call C functions directly using the '//extern' or
! '//go:linkname' compiler directives.  An '//extern' directive must be at
! the beginning of the line and must start with '//extern'.  This must be
  followed by a space and then the external name of the function.  The
  function declaration must be on the line immediately after the comment.
! For example, here is how the C function 'open' can be declared in Go:
  
       //extern open
       func c_open(name *byte, mode int, perm int) int
  
!    You can do the same thing using the '//go:linkname' compiler
! directive.  The '//go:linkname' directive must be at the start of the
  line.  It is followed by whitespace, the name of the Go function, more
! whitespace, and the external name of the function.  Unlike '//extern',
! '//go:linkname' does not need to appear immediately adjacent to the
  function definition or declaration.
  
       //go:linkname c_open open
       func c_open(name *byte, mode int, perm int) int
  
     The C function naturally expects a nul terminated string, which in Go
! is equivalent to a pointer to an array (not a slice!)  of 'byte' with a
  terminating zero byte.  So a sample call from Go would look like (after
! importing the 'os' package):
  
       var name = [4]byte{'f', 'o', 'o', 0};
       i := c_open(&name[0], os.O_RDONLY, 0);
  
     Note that this serves as an example only.  To open a file in Go
! please use Go's 'os.Open' function instead.
  
     The name of Go functions accessed from C is subject to change.  At
  present the name of a Go function that does not have a receiver is
! 'pkgpath.Functionname'.  The PKGPATH is set by the '-fgo-pkgpath' option
  used when the package is compiled; if the option is not used, the
! default is 'go.PACKAGENAME'.  To call the function from C you must set
! the name using the 'gcc' '__asm__' extension.
  
       extern int go_function(int) __asm__ ("mypkgpath.Function");
  
--- 1579,1621 ----
  4.2 Function Names
  ==================
  
! Go code can call C functions directly using the ‘//extern’ or
! ‘//go:linkname’ compiler directives.  An ‘//extern’ directive must be at
! the beginning of the line and must start with ‘//extern’.  This must be
  followed by a space and then the external name of the function.  The
  function declaration must be on the line immediately after the comment.
! For example, here is how the C function ‘open’ can be declared in Go:
  
       //extern open
       func c_open(name *byte, mode int, perm int) int
  
!    You can do the same thing using the ‘//go:linkname’ compiler
! directive.  The ‘//go:linkname’ directive must be at the start of the
  line.  It is followed by whitespace, the name of the Go function, more
! whitespace, and the external name of the function.  Unlike ‘//extern’,
! ‘//go:linkname’ does not need to appear immediately adjacent to the
  function definition or declaration.
  
       //go:linkname c_open open
       func c_open(name *byte, mode int, perm int) int
  
     The C function naturally expects a nul terminated string, which in Go
! is equivalent to a pointer to an array (not a slice!)  of ‘byte’ with a
  terminating zero byte.  So a sample call from Go would look like (after
! importing the ‘os’ package):
  
       var name = [4]byte{'f', 'o', 'o', 0};
       i := c_open(&name[0], os.O_RDONLY, 0);
  
     Note that this serves as an example only.  To open a file in Go
! please use Go's ‘os.Open’ function instead.
  
     The name of Go functions accessed from C is subject to change.  At
  present the name of a Go function that does not have a receiver is
! ‘pkgpath.Functionname’.  The PKGPATH is set by the ‘-fgo-pkgpath’ option
  used when the package is compiled; if the option is not used, the
! default is ‘go.PACKAGENAME’.  To call the function from C you must set
! the name using the ‘gcc’ ‘__asm__’ extension.
  
       extern int go_function(int) __asm__ ("mypkgpath.Function");
  
*************** Index
*** 1662,1676 ****
  
  
  Tag Table:
! Node: Top1688
! Node: Copying2548
! Node: GNU Free Documentation License40087
! Node: Invoking gccgo65220
! Node: Import and Export71758
! Node: Compiler Directives73354
! Node: C Interoperability75338
! Node: C Type Interoperability75925
! Node: Function Names78484
! Node: Index80488
  
  End Tag Table
--- 1662,1681 ----
  
  
  Tag Table:
! Node: Top1686
! Node: Copying2554
! Node: GNU Free Documentation License40108
! Node: Invoking gccgo65244
! Node: Import and Export72034
! Node: Compiler Directives73690
! Node: C Interoperability75730
! Node: C Type Interoperability76329
! Node: Function Names78964
! Node: Index81036
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/gccinstall.info gcc-14.3.0-RC-20260619/gcc/doc/gccinstall.info
*** gcc-14.3.0/gcc/doc/gccinstall.info	Fri May 23 11:19:45 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gccinstall.info	Fri Jun 19 07:07:44 2026
***************
*** 1,7 ****
! This is gccinstall.info, produced by makeinfo version 6.5 from
  install.texi.
  
! Copyright (C) 1988-2024 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
--- 1,7 ----
! This is gccinstall.info, produced by makeinfo version 7.1 from
  install.texi.
  
! Copyright © 1988-2024 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
*************** START-INFO-DIR-ENTRY
*** 24,30 ****
  * gccinstall: (gccinstall).    Installing the GNU Compiler Collection.
  END-INFO-DIR-ENTRY
  
!    Copyright (C) 1988-2024 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
--- 24,30 ----
  * gccinstall: (gccinstall).    Installing the GNU Compiler Collection.
  END-INFO-DIR-ENTRY
  
!    Copyright © 1988-2024 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
*************** browse the entire generic installation i
*** 91,97 ****
  * Testing:: (optional)
  * Final install::
  
!    Please note that GCC does not support 'make uninstall' and probably
  won't do so in the near future as this would open a can of worms.
  Instead, we suggest that you install GCC into a directory of its own and
  simply remove that directory when you do not need that specific version
--- 91,97 ----
  * Testing:: (optional)
  * Final install::
  
!    Please note that GCC does not support ‘make uninstall’ and probably
  won't do so in the near future as this would open a can of worms.
  Instead, we suggest that you install GCC into a directory of its own and
  simply remove that directory when you do not need that specific version
*************** C standard library and headers
*** 132,158 ****
       present for all target variants for which target libraries will be
       built (and not only the variant of the host C++ compiler).
  
!      This affects the popular 'x86_64-pc-linux-gnu' platform (among
!      other multilib targets), for which 64-bit ('x86_64') and 32-bit
!      ('i386') libc headers are usually packaged separately.  If you do a
!      build of a native compiler on 'x86_64-pc-linux-gnu', make sure you
       either have the 32-bit libc developer package properly installed
       (the exact name of the package depends on your distro) or you must
       build GCC as a 64-bit only compiler by configuring with the option
!      '--disable-multilib'.  Otherwise, you may encounter an error such
!      as 'fatal error: gnu/stubs-32.h: No such file'
  
  Python
!      If you configure a RISC-V compiler with the option '--with-arch'
       and the specified architecture string is non-canonical, then you
!      will need 'python' installed on the build system.
  
  GNAT
  
       In order to build GNAT, the Ada compiler, you need a working GNAT
       compiler (GCC version 5.1 or later).
  
!      This includes GNAT tools such as 'gnatmake' and 'gnatlink', since
       the Ada front end is written in Ada and uses some GNAT-specific
       extensions.
  
--- 132,158 ----
       present for all target variants for which target libraries will be
       built (and not only the variant of the host C++ compiler).
  
!      This affects the popular ‘x86_64-pc-linux-gnu’ platform (among
!      other multilib targets), for which 64-bit (‘x86_64’) and 32-bit
!      (‘i386’) libc headers are usually packaged separately.  If you do a
!      build of a native compiler on ‘x86_64-pc-linux-gnu’, make sure you
       either have the 32-bit libc developer package properly installed
       (the exact name of the package depends on your distro) or you must
       build GCC as a 64-bit only compiler by configuring with the option
!      ‘--disable-multilib’.  Otherwise, you may encounter an error such
!      as ‘fatal error: gnu/stubs-32.h: No such file’
  
  Python
!      If you configure a RISC-V compiler with the option ‘--with-arch’
       and the specified architecture string is non-canonical, then you
!      will need ‘python’ installed on the build system.
  
  GNAT
  
       In order to build GNAT, the Ada compiler, you need a working GNAT
       compiler (GCC version 5.1 or later).
  
!      This includes GNAT tools such as ‘gnatmake’ and ‘gnatlink’, since
       the Ada front end is written in Ada and uses some GNAT-specific
       extensions.
  
*************** GNAT
*** 167,188 ****
       built are not guaranteed to work and will often fail during the
       build with compilation errors.
  
!      Note that 'configure' does not test whether the GNAT installation
       works and has a sufficiently recent version; if too old a GNAT
!      version is installed and '--enable-languages=ada' is used, the
       build will fail.
  
!      'ADA_INCLUDE_PATH' and 'ADA_OBJECT_PATH' environment variables must
       not be set when building the Ada compiler, the Ada tools, or the
       Ada runtime libraries.  You can check that your build environment
!      is clean by verifying that 'gnatls -v' lists only one explicit path
       in each section.
  
  GDC
  
       In order to build GDC, the D compiler, you need a working GDC
       compiler (GCC version 9.4 or later) and D runtime library,
!      'libphobos', as the D front end is written in D.
  
       Versions of GDC prior to 12 can be built with an ISO C++11
       compiler, which can then be installed and used to bootstrap newer
--- 167,188 ----
       built are not guaranteed to work and will often fail during the
       build with compilation errors.
  
!      Note that ‘configure’ does not test whether the GNAT installation
       works and has a sufficiently recent version; if too old a GNAT
!      version is installed and ‘--enable-languages=ada’ is used, the
       build will fail.
  
!      ‘ADA_INCLUDE_PATH’ and ‘ADA_OBJECT_PATH’ environment variables must
       not be set when building the Ada compiler, the Ada tools, or the
       Ada runtime libraries.  You can check that your build environment
!      is clean by verifying that ‘gnatls -v’ lists only one explicit path
       in each section.
  
  GDC
  
       In order to build GDC, the D compiler, you need a working GDC
       compiler (GCC version 9.4 or later) and D runtime library,
!      ‘libphobos’, as the D front end is written in D.
  
       Versions of GDC prior to 12 can be built with an ISO C++11
       compiler, which can then be installed and used to bootstrap newer
*************** GDC
*** 193,230 ****
       guaranteed to work and will often fail during the build with
       compilation errors relating to deprecations or removed features.
  
!      Note that 'configure' does not test whether the GDC installation
       works and has a sufficiently recent version.  Though the
       implementation of the D front end does not make use of any
       GDC-specific extensions, or novel features of the D language, if
!      too old a GDC version is installed and '--enable-languages=d' is
       used, the build will fail.
  
!      On some targets, 'libphobos' isn't enabled by default, but compiles
!      and works if '--enable-libphobos' is used.  Specifics are
       documented for affected targets.
  
  GM2
  
       Python3 is required if you want to build the complete Modula-2
!      documentation including the target 'SYSTEM' definition module.  If
       Python3 is unavailable Modula-2 documentation will include a target
       independent version of the SYSTEM modules.
  
  A "working" POSIX compatible shell, or GNU bash
  
!      Necessary when running 'configure' because some '/bin/sh' shells
       have bugs and may crash when configuring the target libraries.  In
!      other cases, '/bin/sh' or 'ksh' have disastrous corner-case
!      performance problems.  This can cause target 'configure' runs to
       literally take days to complete in some cases.
  
!      So on some platforms '/bin/ksh' is sufficient, on others it isn't.
       See the host/target specific instructions for your platform, or use
!      'bash' to be sure.  Then set 'CONFIG_SHELL' in your environment to
!      your "good" shell prior to running 'configure'/'make'.
  
!      'zsh' is not a fully compliant POSIX shell and will not work when
       configuring GCC.
  
  GNU flex
--- 193,230 ----
       guaranteed to work and will often fail during the build with
       compilation errors relating to deprecations or removed features.
  
!      Note that ‘configure’ does not test whether the GDC installation
       works and has a sufficiently recent version.  Though the
       implementation of the D front end does not make use of any
       GDC-specific extensions, or novel features of the D language, if
!      too old a GDC version is installed and ‘--enable-languages=d’ is
       used, the build will fail.
  
!      On some targets, ‘libphobos’ isn't enabled by default, but compiles
!      and works if ‘--enable-libphobos’ is used.  Specifics are
       documented for affected targets.
  
  GM2
  
       Python3 is required if you want to build the complete Modula-2
!      documentation including the target ‘SYSTEM’ definition module.  If
       Python3 is unavailable Modula-2 documentation will include a target
       independent version of the SYSTEM modules.
  
  A "working" POSIX compatible shell, or GNU bash
  
!      Necessary when running ‘configure’ because some ‘/bin/sh’ shells
       have bugs and may crash when configuring the target libraries.  In
!      other cases, ‘/bin/sh’ or ‘ksh’ have disastrous corner-case
!      performance problems.  This can cause target ‘configure’ runs to
       literally take days to complete in some cases.
  
!      So on some platforms ‘/bin/ksh’ is sufficient, on others it isn't.
       See the host/target specific instructions for your platform, or use
!      ‘bash’ to be sure.  Then set ‘CONFIG_SHELL’ in your environment to
!      your "good" shell prior to running ‘configure’/‘make’.
  
!      ‘zsh’ is not a fully compliant POSIX shell and will not work when
       configuring GCC.
  
  GNU flex
*************** GNU binutils
*** 249,255 ****
  gzip version 1.2.4 (or later) or
  bzip2 version 1.0.2 (or later)
  
!      Necessary to uncompress GCC 'tar' files when source code is
       obtained via HTTPS mirror sites.
  
  GNU make version 3.80 (or later)
--- 249,255 ----
  gzip version 1.2.4 (or later) or
  bzip2 version 1.0.2 (or later)
  
!      Necessary to uncompress GCC ‘tar’ files when source code is
       obtained via HTTPS mirror sites.
  
  GNU make version 3.80 (or later)
*************** GNU make version 3.80 (or later)
*** 259,283 ****
  GNU tar version 1.14 (or later)
  
       Necessary (only on some platforms) to untar the source code.  Many
!      systems' 'tar' programs will also work, only try GNU 'tar' if you
       have problems.
  
  Perl version 5.6.1 (or later)
  
!      Necessary when targeting Darwin, building 'libstdc++', and not
!      using '--disable-symvers'.  Necessary when targeting Solaris with
!      Solaris 'ld' and not using '--disable-symvers'.
  
!      Necessary when regenerating 'Makefile' dependencies in libiberty.
!      Necessary when regenerating 'libiberty/functions.texi'.  Necessary
       when generating manpages from Texinfo manuals.  Used by various
       scripts to generate some files included in the source repository
       (mainly Unicode-related and rarely changing) from source tables.
  
!      Used by 'automake'.
  
!      If available, enables parallel testing of 'libgomp' in case that
!      'flock' is not available.
  
     Several support libraries are necessary to build GCC, some are
  required, others optional.  While any sufficiently new version of
--- 259,283 ----
  GNU tar version 1.14 (or later)
  
       Necessary (only on some platforms) to untar the source code.  Many
!      systems' ‘tar’ programs will also work, only try GNU ‘tar’ if you
       have problems.
  
  Perl version 5.6.1 (or later)
  
!      Necessary when targeting Darwin, building ‘libstdc++’, and not
!      using ‘--disable-symvers’.  Necessary when targeting Solaris with
!      Solaris ‘ld’ and not using ‘--disable-symvers’.
  
!      Necessary when regenerating ‘Makefile’ dependencies in libiberty.
!      Necessary when regenerating ‘libiberty/functions.texi’.  Necessary
       when generating manpages from Texinfo manuals.  Used by various
       scripts to generate some files included in the source repository
       (mainly Unicode-related and rarely changing) from source tables.
  
!      Used by ‘automake’.
  
!      If available, enables parallel testing of ‘libgomp’ in case that
!      ‘flock’ is not available.
  
     Several support libraries are necessary to build GCC, some are
  required, others optional.  While any sufficiently new version of
*************** GNU Multiple Precision Library (GMP) ver
*** 292,313 ****
  
       Necessary to build GCC.  It can be downloaded from
       <https://gmplib.org/>.  If a GMP source distribution is found in a
!      subdirectory of your GCC sources named 'gmp', it will be built
       together with GCC. Alternatively, if GMP is already installed but
       it is not in your library search path, you will have to configure
!      with the '--with-gmp' configure option.  See also '--with-gmp-lib'
!      and '--with-gmp-include'.  The in-tree build is only supported with
       the GMP version that download_prerequisites installs.
  
  MPFR Library version 3.1.0 (or later)
  
       Necessary to build GCC.  It can be downloaded from
       <https://www.mpfr.org>.  If an MPFR source distribution is found in
!      a subdirectory of your GCC sources named 'mpfr', it will be built
       together with GCC. Alternatively, if MPFR is already installed but
!      it is not in your default library search path, the '--with-mpfr'
!      configure option should be used.  See also '--with-mpfr-lib' and
!      '--with-mpfr-include'.  The in-tree build is only supported with
       the MPFR version that download_prerequisites installs.
  
  MPC Library version 1.0.1 (or later)
--- 292,313 ----
  
       Necessary to build GCC.  It can be downloaded from
       <https://gmplib.org/>.  If a GMP source distribution is found in a
!      subdirectory of your GCC sources named ‘gmp’, it will be built
       together with GCC. Alternatively, if GMP is already installed but
       it is not in your library search path, you will have to configure
!      with the ‘--with-gmp’ configure option.  See also ‘--with-gmp-lib’
!      and ‘--with-gmp-include’.  The in-tree build is only supported with
       the GMP version that download_prerequisites installs.
  
  MPFR Library version 3.1.0 (or later)
  
       Necessary to build GCC.  It can be downloaded from
       <https://www.mpfr.org>.  If an MPFR source distribution is found in
!      a subdirectory of your GCC sources named ‘mpfr’, it will be built
       together with GCC. Alternatively, if MPFR is already installed but
!      it is not in your default library search path, the ‘--with-mpfr’
!      configure option should be used.  See also ‘--with-mpfr-lib’ and
!      ‘--with-mpfr-include’.  The in-tree build is only supported with
       the MPFR version that download_prerequisites installs.
  
  MPC Library version 1.0.1 (or later)
*************** MPC Library version 1.0.1 (or later)
*** 315,324 ****
       Necessary to build GCC.  It can be downloaded from
       <https://www.multiprecision.org/mpc/>.  If an MPC source
       distribution is found in a subdirectory of your GCC sources named
!      'mpc', it will be built together with GCC. Alternatively, if MPC is
       already installed but it is not in your default library search
!      path, the '--with-mpc' configure option should be used.  See also
!      '--with-mpc-lib' and '--with-mpc-include'.  The in-tree build is
       only supported with the MPC version that download_prerequisites
       installs.
  
--- 315,324 ----
       Necessary to build GCC.  It can be downloaded from
       <https://www.multiprecision.org/mpc/>.  If an MPC source
       distribution is found in a subdirectory of your GCC sources named
!      ‘mpc’, it will be built together with GCC. Alternatively, if MPC is
       already installed but it is not in your default library search
!      path, the ‘--with-mpc’ configure option should be used.  See also
!      ‘--with-mpc-lib’ and ‘--with-mpc-include’.  The in-tree build is
       only supported with the MPC version that download_prerequisites
       installs.
  
*************** isl Library version 0.15 or later.
*** 328,342 ****
       can be downloaded from
       <https://gcc.gnu.org/pub/gcc/infrastructure/>.  If an isl source
       distribution is found in a subdirectory of your GCC sources named
!      'isl', it will be built together with GCC. Alternatively, the
!      '--with-isl' configure option should be used if isl is not
       installed in your default library search path.
  
  zstd Library.
  
       Necessary to build GCC with zstd compression used for LTO bytecode.
       The library is searched in your default library patch search.
!      Alternatively, the '--with-zstd' configure option should be used.
  
  Python3 modules
  
--- 328,342 ----
       can be downloaded from
       <https://gcc.gnu.org/pub/gcc/infrastructure/>.  If an isl source
       distribution is found in a subdirectory of your GCC sources named
!      ‘isl’, it will be built together with GCC. Alternatively, the
!      ‘--with-isl’ configure option should be used if isl is not
       installed in your default library search path.
  
  zstd Library.
  
       Necessary to build GCC with zstd compression used for LTO bytecode.
       The library is searched in your default library patch search.
!      Alternatively, the ‘--with-zstd’ configure option should be used.
  
  Python3 modules
  
*************** Python3 modules
*** 344,380 ****
       subcomponent is shown below:
  
       internal debugging in gdbhooks
!           'gdb', 'gdb.printing', 'gdb.types', 'os.path', 're', 'sys' and
!           'tempfile',
  
       g++ testsuite
!           'gcov', 'gzip', 'json', 'os' and 'pytest'.
  
       SARIF testsuite
!           Tests of SARIF output will use the 'check-jsonschema' program
!           from the 'check-jsonschema' module (if available) to validate
            generated .sarif files.  If this tool is not found, the
            validation parts of those tests are skipped.
  
       c++ cxx api generation
!           'csv', 'os', 'sys' and 'time'.
  
       modula-2 documentation
!           'argparse', 'os', 'pathlib', 'shutil' and 'sys'.
  
       git developer tools
!           'os' and 'sys'.
  
       ada documentation
!           'latex_elements', 'os', 'pygments', 're', 'sys' and 'time'.
  
  GNU gettext
  
       Necessary to build GCC with internationalization support via
!      '--enable-nls'.  It can be downloaded from
       <https://www.gnu.org/software/gettext/>.  If a GNU gettext
       distribution is found in a subdirectory of your GCC sources named
!      'gettext', it will be built together with GCC, unless present in
       the system (either in libc or as a stand-alone library).
  
       The in-tree configuration requires GNU gettext version 0.22 or
--- 344,380 ----
       subcomponent is shown below:
  
       internal debugging in gdbhooks
!           ‘gdb’, ‘gdb.printing’, ‘gdb.types’, ‘os.path’, ‘re’, ‘sys’ and
!           ‘tempfile’,
  
       g++ testsuite
!           ‘gcov’, ‘gzip’, ‘json’, ‘os’ and ‘pytest’.
  
       SARIF testsuite
!           Tests of SARIF output will use the ‘check-jsonschema’ program
!           from the ‘check-jsonschema’ module (if available) to validate
            generated .sarif files.  If this tool is not found, the
            validation parts of those tests are skipped.
  
       c++ cxx api generation
!           ‘csv’, ‘os’, ‘sys’ and ‘time’.
  
       modula-2 documentation
!           ‘argparse’, ‘os’, ‘pathlib’, ‘shutil’ and ‘sys’.
  
       git developer tools
!           ‘os’ and ‘sys’.
  
       ada documentation
!           ‘latex_elements’, ‘os’, ‘pygments’, ‘re’, ‘sys’ and ‘time’.
  
  GNU gettext
  
       Necessary to build GCC with internationalization support via
!      ‘--enable-nls’.  It can be downloaded from
       <https://www.gnu.org/software/gettext/>.  If a GNU gettext
       distribution is found in a subdirectory of your GCC sources named
!      ‘gettext’, it will be built together with GCC, unless present in
       the system (either in libc or as a stand-alone library).
  
       The in-tree configuration requires GNU gettext version 0.22 or
*************** Tools/packages necessary for modifying G
*** 386,402 ****
  autoconf version 2.69
  GNU m4 version 1.4.6 (or later)
  
!      Necessary when modifying 'configure.ac', 'aclocal.m4', etc. to
!      regenerate 'configure' and 'config.in' files.
  
  automake version 1.15.1
  
!      Necessary when modifying a 'Makefile.am' file to regenerate its
!      associated 'Makefile.in'.
  
       Much of GCC does not use automake, so directly edit the
!      'Makefile.in' file.  Specifically this applies to the 'gcc',
!      'intl', 'libcpp', 'libiberty', 'libobjc' directories as well as any
       of their subdirectories.
  
       For directories that use automake, GCC requires the latest release
--- 386,402 ----
  autoconf version 2.69
  GNU m4 version 1.4.6 (or later)
  
!      Necessary when modifying ‘configure.ac’, ‘aclocal.m4’, etc. to
!      regenerate ‘configure’ and ‘config.in’ files.
  
  automake version 1.15.1
  
!      Necessary when modifying a ‘Makefile.am’ file to regenerate its
!      associated ‘Makefile.in’.
  
       Much of GCC does not use automake, so directly edit the
!      ‘Makefile.in’ file.  Specifically this applies to the ‘gcc’,
!      ‘intl’, ‘libcpp’, ‘libiberty’, ‘libobjc’ directories as well as any
       of their subdirectories.
  
       For directories that use automake, GCC requires the latest release
*************** automake version 1.15.1
*** 406,418 ****
  
  gettext version 0.14.5 (or later)
  
!      Needed to regenerate 'gcc.pot'.
  
  gperf version 2.7.2 (or later)
  
!      Necessary when modifying 'gperf' input files, e.g.
!      'gcc/cp/cfns.gperf' to regenerate its associated header file, e.g.
!      'gcc/cp/cfns.h'.
  
  DejaGnu version 1.5.3 (or later)
  Expect
--- 406,418 ----
  
  gettext version 0.14.5 (or later)
  
!      Needed to regenerate ‘gcc.pot’.
  
  gperf version 2.7.2 (or later)
  
!      Necessary when modifying ‘gperf’ input files, e.g.
!      ‘gcc/cp/cfns.gperf’ to regenerate its associated header file, e.g.
!      ‘gcc/cp/cfns.h’.
  
  DejaGnu version 1.5.3 (or later)
  Expect
*************** Tcl
*** 424,442 ****
  autogen version 5.5.4 (or later) and
  guile version 1.4.1 (or later)
  
!      Necessary to regenerate 'fixinc/fixincl.x' from
!      'fixinc/inclhack.def' and 'fixinc/*.tpl'.
  
!      Necessary to run 'make check' for 'fixinc'.
  
!      Necessary to regenerate the top level 'Makefile.in' file from
!      'Makefile.tpl' and 'Makefile.def'.
  
!      Necessary to regenerate the 'bits/version.h' header for libstdc++.
  
  Flex version 2.5.4 (or later)
  
!      Necessary when modifying '*.l' files.
  
       Necessary to build GCC during development because the generated
       output files are not included in the version-controlled source
--- 424,442 ----
  autogen version 5.5.4 (or later) and
  guile version 1.4.1 (or later)
  
!      Necessary to regenerate ‘fixinc/fixincl.x’ from
!      ‘fixinc/inclhack.def’ and ‘fixinc/*.tpl’.
  
!      Necessary to run ‘make check’ for ‘fixinc’.
  
!      Necessary to regenerate the top level ‘Makefile.in’ file from
!      ‘Makefile.tpl’ and ‘Makefile.def’.
  
!      Necessary to regenerate the ‘bits/version.h’ header for libstdc++.
  
  Flex version 2.5.4 (or later)
  
!      Necessary when modifying ‘*.l’ files.
  
       Necessary to build GCC during development because the generated
       output files are not included in the version-controlled source
*************** Flex version 2.5.4 (or later)
*** 444,455 ****
  
  Texinfo version 4.7 (or later)
  
!      Necessary for running 'makeinfo' when modifying '*.texi' files to
       test your changes.
  
!      Necessary for running 'make dvi', 'make pdf', or 'make html' to
       create formatted documentation.  Texinfo version 4.8 or later is
!      required for 'make pdf'.
  
       Necessary to build GCC documentation in info format during
       development because the generated output files are not included in
--- 444,455 ----
  
  Texinfo version 4.7 (or later)
  
!      Necessary for running ‘makeinfo’ when modifying ‘*.texi’ files to
       test your changes.
  
!      Necessary for running ‘make dvi’, ‘make pdf’, or ‘make html’ to
       create formatted documentation.  Texinfo version 4.8 or later is
!      required for ‘make pdf’.
  
       Necessary to build GCC documentation in info format during
       development because the generated output files are not included in
*************** Texinfo version 4.7 (or later)
*** 465,478 ****
  
  TeX (any working version)
  
!      Necessary for running 'texi2dvi' and 'texi2pdf', which are used
!      when running 'make dvi' or 'make pdf' to create DVI or PDF files,
       respectively.
  
  Sphinx version 1.0 (or later)
  
!      Necessary to regenerate 'jit/docs/_build/texinfo' from the '.rst'
!      files in the directories below 'jit/docs'.
  
  git (any version)
  SSH (any version)
--- 465,478 ----
  
  TeX (any working version)
  
!      Necessary for running ‘texi2dvi’ and ‘texi2pdf’, which are used
!      when running ‘make dvi’ or ‘make pdf’ to create DVI or PDF files,
       respectively.
  
  Sphinx version 1.0 (or later)
  
!      Necessary to regenerate ‘jit/docs/_build/texinfo’ from the ‘.rst’
!      files in the directories below ‘jit/docs’.
  
  git (any version)
  SSH (any version)
*************** GNU diffutils version 2.7 (or later)
*** 487,493 ****
  
  patch version 2.5.4 (or later)
  
!      Necessary when applying patches, created with 'diff', to one's own
       sources.
  
  
--- 487,493 ----
  
  patch version 2.5.4 (or later)
  
!      Necessary when applying patches, created with ‘diff’, to one's own
       sources.
  
  
*************** File: gccinstall.info,  Node: Downloadin
*** 497,503 ****
  *****************
  
  GCC is distributed via git and via HTTPS as tarballs compressed with
! 'gzip' or 'bzip2'.
  
     Please refer to the releases web page for information on how to
  obtain GCC.
--- 497,503 ----
  *****************
  
  GCC is distributed via git and via HTTPS as tarballs compressed with
! ‘gzip’ or ‘bzip2’.
  
     Please refer to the releases web page for information on how to
  obtain GCC.
*************** language front end and the language runt
*** 514,529 ****
  installation or for use in place of the corresponding tools of your OS),
  unpack the binutils distribution either in the same directory or a
  separate one.  In the latter case, add symbolic links to any components
! of the binutils you intend to build alongside the compiler ('bfd',
! 'binutils', 'gas', 'gprof', 'ld', 'opcodes', ...) to the directory
  containing the GCC sources.
  
     Likewise the GMP, MPFR, MPC and Gettext libraries can be
  automatically built together with GCC. You may simply run the
! 'contrib/download_prerequisites' script in the GCC source directory to
  set up everything.  Otherwise unpack the GMP, MPFR, MPC and/or Gettext
  source distributions in the directory containing the GCC sources and
! rename their directories to 'gmp', 'mpfr', 'mpc' and 'gettext',
  respectively (or use symbolic links with the same name).
  
  
--- 514,529 ----
  installation or for use in place of the corresponding tools of your OS),
  unpack the binutils distribution either in the same directory or a
  separate one.  In the latter case, add symbolic links to any components
! of the binutils you intend to build alongside the compiler (‘bfd’,
! ‘binutils’, ‘gas’, ‘gprof’, ‘ld’, ‘opcodes’, ...) to the directory
  containing the GCC sources.
  
     Likewise the GMP, MPFR, MPC and Gettext libraries can be
  automatically built together with GCC. You may simply run the
! ‘contrib/download_prerequisites’ script in the GCC source directory to
  set up everything.  Otherwise unpack the GMP, MPFR, MPC and/or Gettext
  source distributions in the directory containing the GCC sources and
! rename their directories to ‘gmp’, ‘mpfr’, ‘mpc’ and ‘gettext’,
  respectively (or use symbolic links with the same name).
  
  
*************** native and cross targets.
*** 540,554 ****
  use OBJDIR to refer to the toplevel build/object directory.
  
     If you obtained the sources by cloning the repository, SRCDIR must
! refer to the top 'gcc' directory, the one where the 'MAINTAINERS' file
! can be found, and not its 'gcc' subdirectory, otherwise the build will
  fail.
  
     If either SRCDIR or OBJDIR is located on an automounted NFS file
! system, the shell's built-in 'pwd' command will return temporary
  pathnames.  Using these can lead to various sorts of build problems.  To
! avoid this issue, set the 'PWDCMD' environment variable to an
! automounter-aware 'pwd' command, e.g., 'pawd' or 'amq -w', during the
  configuration and build phases.
  
     First, we *highly* recommend that GCC be built into a separate
--- 540,554 ----
  use OBJDIR to refer to the toplevel build/object directory.
  
     If you obtained the sources by cloning the repository, SRCDIR must
! refer to the top ‘gcc’ directory, the one where the ‘MAINTAINERS’ file
! can be found, and not its ‘gcc’ subdirectory, otherwise the build will
  fail.
  
     If either SRCDIR or OBJDIR is located on an automounted NFS file
! system, the shell's built-in ‘pwd’ command will return temporary
  pathnames.  Using these can lead to various sorts of build problems.  To
! avoid this issue, set the ‘PWDCMD’ environment variable to an
! automounter-aware ‘pwd’ command, e.g., ‘pawd’ or ‘amq -w’, during the
  configuration and build phases.
  
     First, we *highly* recommend that GCC be built into a separate
*************** subdirectory of SRCDIR should work as we
*** 558,573 ****
  SRCDIR is unsupported.
  
     If you have previously built GCC in the same directory for a
! different target machine, do 'make distclean' to delete all files that
! might be invalid.  One of the files this deletes is 'Makefile'; if 'make
! distclean' complains that 'Makefile' does not exist or issues a message
  like "don't know how to make distclean" it probably means that the
  directory is already suitably clean.  However, with the recommended
  method of building in a separate OBJDIR, you should simply use a
  different OBJDIR for each target.
  
!    Second, when configuring a native system, either 'cc' or 'gcc' must
! be in your path or you must set 'CC' in your environment before running
  configure.  Otherwise the configuration scripts may fail.
  
     To configure GCC:
--- 558,573 ----
  SRCDIR is unsupported.
  
     If you have previously built GCC in the same directory for a
! different target machine, do ‘make distclean’ to delete all files that
! might be invalid.  One of the files this deletes is ‘Makefile’; if ‘make
! distclean’ complains that ‘Makefile’ does not exist or issues a message
  like "don't know how to make distclean" it probably means that the
  directory is already suitably clean.  However, with the recommended
  method of building in a separate OBJDIR, you should simply use a
  different OBJDIR for each target.
  
!    Second, when configuring a native system, either ‘cc’ or ‘gcc’ must
! be in your path or you must set ‘CC’ in your environment before running
  configure.  Otherwise the configuration scripts may fail.
  
     To configure GCC:
*************** If you will be distributing binary versi
*** 583,597 ****
  to the source code, you should use the options described in this section
  to make clear that your version contains modifications.
  
! '--with-pkgversion=VERSION'
       Specify a string that identifies your package.  You may wish to
       include a build number or build date.  This version string will be
!      included in the output of 'gcc --version'.  This suffix does not
!      replace the default version string, only the 'GCC' part.
  
!      The default value is 'GCC'.
  
! '--with-bugurl=URL'
       Specify the URL that users should visit if they wish to report a
       bug.  You are of course welcome to forward bugs reported to you to
       the FSF, if you determine that they are not bugs in your
--- 583,597 ----
  to the source code, you should use the options described in this section
  to make clear that your version contains modifications.
  
! ‘--with-pkgversion=VERSION’
       Specify a string that identifies your package.  You may wish to
       include a build number or build date.  This version string will be
!      included in the output of ‘gcc --version’.  This suffix does not
!      replace the default version string, only the ‘GCC’ part.
  
!      The default value is ‘GCC’.
  
! ‘--with-bugurl=URL’
       Specify the URL that users should visit if they wish to report a
       bug.  You are of course welcome to forward bugs reported to you to
       the FSF, if you determine that they are not bugs in your
*************** to make clear that your version contains
*** 599,616 ****
  
       The default value refers to the FSF's GCC bug tracker.
  
! '--with-documentation-root-url=URL'
       Specify the URL root that contains GCC option documentation.  The
!      URL should end with a '/' character.
  
       The default value is https://gcc.gnu.org/onlinedocs/ on the GCC
       main development trunk.  On release branches, the default is
!      'https://gcc.gnu.org/onlinedocs/gcc-MAJOR.MINOR.0/'.
  
! '--with-changes-root-url=URL'
       Specify the URL root that contains information about changes in GCC
!      releases like 'gcc-VERSION/changes.html'.  The URL should end with
!      a '/' character.
  
       The default value is https://gcc.gnu.org/.
  
--- 599,616 ----
  
       The default value refers to the FSF's GCC bug tracker.
  
! ‘--with-documentation-root-url=URL’
       Specify the URL root that contains GCC option documentation.  The
!      URL should end with a ‘/’ character.
  
       The default value is https://gcc.gnu.org/onlinedocs/ on the GCC
       main development trunk.  On release branches, the default is
!      ‘https://gcc.gnu.org/onlinedocs/gcc-MAJOR.MINOR.0/’.
  
! ‘--with-changes-root-url=URL’
       Specify the URL root that contains information about changes in GCC
!      releases like ‘gcc-VERSION/changes.html’.  The URL should end with
!      a ‘/’ character.
  
       The default value is https://gcc.gnu.org/.
  
*************** Host, Build and Target specification
*** 618,640 ****
  ====================================
  
  Specify the host, build and target machine configurations.  You do this
! when you run the 'configure' script.
  
!    The "build" machine is the system which you are using, the "host"
  machine is the system where you want to run the resulting compiler
! (normally the build machine), and the "target" machine is the system for
  which you want the compiler to generate code.
  
     If you are building a compiler to produce code for the machine it
  runs on (a native compiler), you normally do not need to specify any
! operands to 'configure'; it will try to guess the type of machine you
  are on and use that as the build, host and target machines.  So you
  don't need to specify a configuration when building a native compiler
! unless 'configure' cannot figure out what your configuration is or
  guesses wrong.
  
!    In those cases, specify the build machine's "configuration name" with
! the '--host' option; the host and target will default to be the same as
  the host machine.
  
     Here is an example:
--- 618,640 ----
  ====================================
  
  Specify the host, build and target machine configurations.  You do this
! when you run the ‘configure’ script.
  
!    The “build” machine is the system which you are using, the “host”
  machine is the system where you want to run the resulting compiler
! (normally the build machine), and the “target” machine is the system for
  which you want the compiler to generate code.
  
     If you are building a compiler to produce code for the machine it
  runs on (a native compiler), you normally do not need to specify any
! operands to ‘configure’; it will try to guess the type of machine you
  are on and use that as the build, host and target machines.  So you
  don't need to specify a configuration when building a native compiler
! unless ‘configure’ cannot figure out what your configuration is or
  guesses wrong.
  
!    In those cases, specify the build machine's “configuration name” with
! the ‘--host’ option; the host and target will default to be the same as
  the host machine.
  
     Here is an example:
*************** the host machine.
*** 642,651 ****
       ./configure --host=x86_64-pc-linux-gnu
  
     A configuration name may be canonical or it may be more or less
! abbreviated ('config.sub' script produces canonical versions).
  
     A canonical configuration name has three parts, separated by dashes.
! It looks like this: 'CPU-COMPANY-SYSTEM'.
  
     Here are the possible CPU types:
  
--- 642,651 ----
       ./configure --host=x86_64-pc-linux-gnu
  
     A configuration name may be canonical or it may be more or less
! abbreviated (‘config.sub’ script produces canonical versions).
  
     A canonical configuration name has three parts, separated by dashes.
! It looks like this: ‘CPU-COMPANY-SYSTEM’.
  
     Here are the possible CPU types:
  
*************** Options specification
*** 677,794 ****
  =====================
  
  Use OPTIONS to override several configure time options for GCC.  A list
! of supported OPTIONS follows; 'configure --help' may list other options,
  but those not listed below may not work and should not normally be used.
  
!    Note that each '--enable' option has a corresponding '--disable'
! option and that each '--with' option has a corresponding '--without'
  option.
  
! '--prefix=DIRNAME'
       Specify the toplevel installation directory.  This is the
       recommended way to install the tools into a directory other than
       the default.  The toplevel installation directory defaults to
!      '/usr/local'.
  
       We *highly* recommend against DIRNAME being the same or a
       subdirectory of OBJDIR or vice versa.  If specifying a directory
       beneath a user's home directory tree, some shells will not expand
!      DIRNAME correctly if it contains the '~' metacharacter; use '$HOME'
       instead.
  
!      The following standard 'autoconf' options are supported.  Normally
       you should not need to use these options.
!      '--exec-prefix=DIRNAME'
            Specify the toplevel installation directory for
!           architecture-dependent files.  The default is 'PREFIX'.
  
!      '--bindir=DIRNAME'
            Specify the installation directory for the executables called
!           by users (such as 'gcc' and 'g++').  The default is
!           'EXEC-PREFIX/bin'.
  
!      '--libdir=DIRNAME'
            Specify the installation directory for object code libraries
            and internal data files of GCC.  The default is
!           'EXEC-PREFIX/lib'.
  
!      '--libexecdir=DIRNAME'
            Specify the installation directory for internal executables of
!           GCC.  The default is 'EXEC-PREFIX/libexec'.
  
!      '--with-slibdir=DIRNAME'
            Specify the installation directory for the shared libgcc
!           library.  The default is 'LIBDIR'.
  
!      '--datarootdir=DIRNAME'
            Specify the root of the directory tree for read-only
            architecture-independent data files referenced by GCC.  The
!           default is 'PREFIX/share'.
  
!      '--infodir=DIRNAME'
            Specify the installation directory for documentation in info
!           format.  The default is 'DATAROOTDIR/info'.
  
!      '--datadir=DIRNAME'
            Specify the installation directory for some
            architecture-independent data files referenced by GCC.  The
!           default is 'DATAROOTDIR'.
  
!      '--docdir=DIRNAME'
            Specify the installation directory for documentation files
!           (other than Info) for GCC.  The default is 'DATAROOTDIR/doc'.
  
!      '--htmldir=DIRNAME'
            Specify the installation directory for HTML documentation
!           files.  The default is 'DOCDIR'.
  
!      '--pdfdir=DIRNAME'
            Specify the installation directory for PDF documentation
!           files.  The default is 'DOCDIR'.
  
!      '--mandir=DIRNAME'
            Specify the installation directory for manual pages.  The
!           default is 'DATAROOTDIR/man'.  (Note that the manual pages are
            only extracts from the full GCC manuals, which are provided in
            Texinfo format.  The manpages are derived by an automatic
            conversion process from parts of the full manual.)
  
!      '--with-gxx-include-dir=DIRNAME'
            Specify the installation directory for G++ header files.  The
            default depends on other configuration options, and differs
            between cross and native configurations.
  
!      '--with-specs=SPECS'
            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
!           '--with-specs=%{!fcommon:%{!fno-common:-fno-common}}'.  *Note
            Specifying subprocesses and the switches to pass to them:
            (gcc)Spec Files,
  
! '--program-prefix=PREFIX'
       GCC supports some transformations of the names of its programs when
       installing them.  This option prepends PREFIX to the names of
       programs to install in BINDIR (see above).  For example, specifying
!      '--program-prefix=foo-' would result in 'gcc' being installed as
!      '/usr/local/bin/foo-gcc'.
  
! '--program-suffix=SUFFIX'
       Appends SUFFIX to the names of programs to install in BINDIR (see
!      above).  For example, specifying '--program-suffix=-3.1' would
!      result in 'gcc' being installed as '/usr/local/bin/gcc-3.1'.
  
! '--program-transform-name=PATTERN'
!      Applies the 'sed' script PATTERN to be applied to the names of
       programs to install in BINDIR (see above).  PATTERN has to consist
!      of one or more basic 'sed' editing commands, separated by
!      semicolons.  For example, if you want the 'gcc' program name to be
!      transformed to the installed program '/usr/local/bin/myowngcc' and
!      the 'g++' program name to be transformed to
!      '/usr/local/bin/gspecial++' without changing other program names,
       you could use the pattern
!      '--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/''
       to achieve this effect.
  
       All three options can be combined and used together, resulting in
--- 677,794 ----
  =====================
  
  Use OPTIONS to override several configure time options for GCC.  A list
! of supported OPTIONS follows; ‘configure --help’ may list other options,
  but those not listed below may not work and should not normally be used.
  
!    Note that each ‘--enable’ option has a corresponding ‘--disable’
! option and that each ‘--with’ option has a corresponding ‘--without’
  option.
  
! ‘--prefix=DIRNAME’
       Specify the toplevel installation directory.  This is the
       recommended way to install the tools into a directory other than
       the default.  The toplevel installation directory defaults to
!      ‘/usr/local’.
  
       We *highly* recommend against DIRNAME being the same or a
       subdirectory of OBJDIR or vice versa.  If specifying a directory
       beneath a user's home directory tree, some shells will not expand
!      DIRNAME correctly if it contains the ‘~’ metacharacter; use ‘$HOME’
       instead.
  
!      The following standard ‘autoconf’ options are supported.  Normally
       you should not need to use these options.
!      ‘--exec-prefix=DIRNAME’
            Specify the toplevel installation directory for
!           architecture-dependent files.  The default is ‘PREFIX’.
  
!      ‘--bindir=DIRNAME’
            Specify the installation directory for the executables called
!           by users (such as ‘gcc’ and ‘g++’).  The default is
!           ‘EXEC-PREFIX/bin’.
  
!      ‘--libdir=DIRNAME’
            Specify the installation directory for object code libraries
            and internal data files of GCC.  The default is
!           ‘EXEC-PREFIX/lib’.
  
!      ‘--libexecdir=DIRNAME’
            Specify the installation directory for internal executables of
!           GCC.  The default is ‘EXEC-PREFIX/libexec’.
  
!      ‘--with-slibdir=DIRNAME’
            Specify the installation directory for the shared libgcc
!           library.  The default is ‘LIBDIR’.
  
!      ‘--datarootdir=DIRNAME’
            Specify the root of the directory tree for read-only
            architecture-independent data files referenced by GCC.  The
!           default is ‘PREFIX/share’.
  
!      ‘--infodir=DIRNAME’
            Specify the installation directory for documentation in info
!           format.  The default is ‘DATAROOTDIR/info’.
  
!      ‘--datadir=DIRNAME’
            Specify the installation directory for some
            architecture-independent data files referenced by GCC.  The
!           default is ‘DATAROOTDIR’.
  
!      ‘--docdir=DIRNAME’
            Specify the installation directory for documentation files
!           (other than Info) for GCC.  The default is ‘DATAROOTDIR/doc’.
  
!      ‘--htmldir=DIRNAME’
            Specify the installation directory for HTML documentation
!           files.  The default is ‘DOCDIR’.
  
!      ‘--pdfdir=DIRNAME’
            Specify the installation directory for PDF documentation
!           files.  The default is ‘DOCDIR’.
  
!      ‘--mandir=DIRNAME’
            Specify the installation directory for manual pages.  The
!           default is ‘DATAROOTDIR/man’.  (Note that the manual pages are
            only extracts from the full GCC manuals, which are provided in
            Texinfo format.  The manpages are derived by an automatic
            conversion process from parts of the full manual.)
  
!      ‘--with-gxx-include-dir=DIRNAME’
            Specify the installation directory for G++ header files.  The
            default depends on other configuration options, and differs
            between cross and native configurations.
  
!      ‘--with-specs=SPECS’
            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
!           ‘--with-specs=%{!fcommon:%{!fno-common:-fno-common}}’.  *Note
            Specifying subprocesses and the switches to pass to them:
            (gcc)Spec Files,
  
! ‘--program-prefix=PREFIX’
       GCC supports some transformations of the names of its programs when
       installing them.  This option prepends PREFIX to the names of
       programs to install in BINDIR (see above).  For example, specifying
!      ‘--program-prefix=foo-’ would result in ‘gcc’ being installed as
!      ‘/usr/local/bin/foo-gcc’.
  
! ‘--program-suffix=SUFFIX’
       Appends SUFFIX to the names of programs to install in BINDIR (see
!      above).  For example, specifying ‘--program-suffix=-3.1’ would
!      result in ‘gcc’ being installed as ‘/usr/local/bin/gcc-3.1’.
  
! ‘--program-transform-name=PATTERN’
!      Applies the ‘sed’ script PATTERN to be applied to the names of
       programs to install in BINDIR (see above).  PATTERN has to consist
!      of one or more basic ‘sed’ editing commands, separated by
!      semicolons.  For example, if you want the ‘gcc’ program name to be
!      transformed to the installed program ‘/usr/local/bin/myowngcc’ and
!      the ‘g++’ program name to be transformed to
!      ‘/usr/local/bin/gspecial++’ without changing other program names,
       you could use the pattern
!      ‘--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'’
       to achieve this effect.
  
       All three options can be combined and used together, resulting in
*************** option.
*** 803,837 ****
  
       For native builds, some of the installed programs are also
       installed with the target alias in front of their name, as in
!      'i686-pc-linux-gnu-gcc'.  All of the above transformations happen
       before the target alias is prepended to the name--so, specifying
!      '--program-prefix=foo-' and 'program-suffix=-3.1', the resulting
       binary would be installed as
!      '/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1'.
  
       As a last shortcoming, none of the installed Ada programs are
       transformed yet, which will be fixed in some time.
  
! '--with-local-prefix=DIRNAME'
       Specify the installation directory for local include files.  The
!      default is '/usr/local'.  Specify this option if you want the
!      compiler to search directory 'DIRNAME/include' for locally
!      installed header files _instead_ of '/usr/local/include'.
  
!      You should specify '--with-local-prefix' *only* if your site has a
!      different convention (not '/usr/local') for where to put
       site-specific files.
  
!      The default value for '--with-local-prefix' is '/usr/local'
!      regardless of the value of '--prefix'.  Specifying '--prefix' has
       no effect on which directory GCC searches for local header files.
       This may seem counterintuitive, but actually it is logical.
  
!      The purpose of '--prefix' is to specify where to _install GCC_. The
!      local header files in '/usr/local/include'--if you put any in that
       directory--are not part of GCC.  They are part of other
       programs--perhaps many others.  (GCC installs its own header files
!      in another directory which is based on the '--prefix' value.)
  
       Both the local-prefix include directory and the GCC-prefix include
       directory are part of GCC's "system include" directories.  Although
--- 803,837 ----
  
       For native builds, some of the installed programs are also
       installed with the target alias in front of their name, as in
!      ‘i686-pc-linux-gnu-gcc’.  All of the above transformations happen
       before the target alias is prepended to the name--so, specifying
!      ‘--program-prefix=foo-’ and ‘program-suffix=-3.1’, the resulting
       binary would be installed as
!      ‘/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1’.
  
       As a last shortcoming, none of the installed Ada programs are
       transformed yet, which will be fixed in some time.
  
! ‘--with-local-prefix=DIRNAME’
       Specify the installation directory for local include files.  The
!      default is ‘/usr/local’.  Specify this option if you want the
!      compiler to search directory ‘DIRNAME/include’ for locally
!      installed header files _instead_ of ‘/usr/local/include’.
  
!      You should specify ‘--with-local-prefix’ *only* if your site has a
!      different convention (not ‘/usr/local’) for where to put
       site-specific files.
  
!      The default value for ‘--with-local-prefix’ is ‘/usr/local’
!      regardless of the value of ‘--prefix’.  Specifying ‘--prefix’ has
       no effect on which directory GCC searches for local header files.
       This may seem counterintuitive, but actually it is logical.
  
!      The purpose of ‘--prefix’ is to specify where to _install GCC_. The
!      local header files in ‘/usr/local/include’--if you put any in that
       directory--are not part of GCC.  They are part of other
       programs--perhaps many others.  (GCC installs its own header files
!      in another directory which is based on the ‘--prefix’ value.)
  
       Both the local-prefix include directory and the GCC-prefix include
       directory are part of GCC's "system include" directories.  Although
*************** option.
*** 842,848 ****
       include directories is that pedantic warnings are turned off for
       headers in these directories.
  
!      Some autoconf macros add '-I DIRECTORY' options to the compiler
       command line, to ensure that directories containing installed
       packages' headers are searched.  When DIRECTORY is one of GCC's
       system include directories, GCC will ignore the option so that
--- 842,848 ----
       include directories is that pedantic warnings are turned off for
       headers in these directories.
  
!      Some autoconf macros add ‘-I DIRECTORY’ options to the compiler
       command line, to ensure that directories containing installed
       packages' headers are searched.  When DIRECTORY is one of GCC's
       system include directories, GCC will ignore the option so that
*************** option.
*** 851,901 ****
       but the directory will still be searched.
  
       GCC automatically searches for ordinary libraries using
!      'GCC_EXEC_PREFIX'.  Thus, when the same installation prefix is used
       for both GCC and packages, GCC will automatically search for both
       headers and libraries.  This provides a configuration that is easy
       to use.  GCC behaves in a manner similar to that when it is
!      installed as a system compiler in '/usr'.
  
       Sites that need to install multiple versions of GCC may not want to
       use the above simple configuration.  It is possible to use the
!      '--program-prefix', '--program-suffix' and
!      '--program-transform-name' options to install multiple versions
       into a single directory, but it may be simpler to use different
!      prefixes and the '--with-local-prefix' option to specify the
       location of the site-specific files for each version.  It will then
       be necessary for users to specify explicitly the location of local
!      site libraries (e.g., with 'LIBRARY_PATH').
  
!      The same value can be used for both '--with-local-prefix' and
!      '--prefix' provided it is not '/usr'.  This can be used to avoid
!      the default search of '/usr/local/include'.
  
!      *Do not* specify '/usr' as the '--with-local-prefix'!  The
!      directory you use for '--with-local-prefix' *must not* contain any
       of the system's standard header files.  If it did contain them,
       certain programs would be miscompiled (including GNU Emacs, on
       certain targets), because this would override and nullify the
!      header file corrections made by the 'fixincludes' script.
  
       Indications are that people who use this option use it based on
       mistaken ideas of what it is for.  People use it as if it specified
       where to install part of GCC.  Perhaps they make this assumption
       because installing GCC creates the directory.
  
! '--with-gcc-major-version-only'
       Specifies that GCC should use only the major number rather than
       MAJOR.MINOR.PATCHLEVEL in filesystem paths.
  
! '--with-native-system-header-dir=DIRNAME'
       Specifies that DIRNAME is the directory that contains native system
!      header files, rather than '/usr/include'.  This option is most
       useful if you are creating a compiler that should be isolated from
       the system as much as possible.  It is most commonly used with the
!      '--with-sysroot' option and will cause GCC to search DIRNAME inside
       the system root specified by that option.
  
! '--enable-shared[=PACKAGE[,...]]'
       Build shared versions of libraries, if shared libraries are
       supported on the target platform.  Unlike GCC 2.95.x and earlier,
       shared libraries are enabled by default on all platforms that
--- 851,901 ----
       but the directory will still be searched.
  
       GCC automatically searches for ordinary libraries using
!      ‘GCC_EXEC_PREFIX’.  Thus, when the same installation prefix is used
       for both GCC and packages, GCC will automatically search for both
       headers and libraries.  This provides a configuration that is easy
       to use.  GCC behaves in a manner similar to that when it is
!      installed as a system compiler in ‘/usr’.
  
       Sites that need to install multiple versions of GCC may not want to
       use the above simple configuration.  It is possible to use the
!      ‘--program-prefix’, ‘--program-suffix’ and
!      ‘--program-transform-name’ options to install multiple versions
       into a single directory, but it may be simpler to use different
!      prefixes and the ‘--with-local-prefix’ option to specify the
       location of the site-specific files for each version.  It will then
       be necessary for users to specify explicitly the location of local
!      site libraries (e.g., with ‘LIBRARY_PATH’).
  
!      The same value can be used for both ‘--with-local-prefix’ and
!      ‘--prefix’ provided it is not ‘/usr’.  This can be used to avoid
!      the default search of ‘/usr/local/include’.
  
!      *Do not* specify ‘/usr’ as the ‘--with-local-prefix’!  The
!      directory you use for ‘--with-local-prefix’ *must not* contain any
       of the system's standard header files.  If it did contain them,
       certain programs would be miscompiled (including GNU Emacs, on
       certain targets), because this would override and nullify the
!      header file corrections made by the ‘fixincludes’ script.
  
       Indications are that people who use this option use it based on
       mistaken ideas of what it is for.  People use it as if it specified
       where to install part of GCC.  Perhaps they make this assumption
       because installing GCC creates the directory.
  
! ‘--with-gcc-major-version-only’
       Specifies that GCC should use only the major number rather than
       MAJOR.MINOR.PATCHLEVEL in filesystem paths.
  
! ‘--with-native-system-header-dir=DIRNAME’
       Specifies that DIRNAME is the directory that contains native system
!      header files, rather than ‘/usr/include’.  This option is most
       useful if you are creating a compiler that should be isolated from
       the system as much as possible.  It is most commonly used with the
!      ‘--with-sysroot’ option and will cause GCC to search DIRNAME inside
       the system root specified by that option.
  
! ‘--enable-shared[=PACKAGE[,...]]’
       Build shared versions of libraries, if shared libraries are
       supported on the target platform.  Unlike GCC 2.95.x and earlier,
       shared libraries are enabled by default on all platforms that
*************** option.
*** 904,1030 ****
       If a list of packages is given as an argument, build shared
       libraries only for the listed packages.  For other packages, only
       static libraries will be built.  Package names currently recognized
!      in the GCC tree are 'libgcc' (also known as 'gcc'), 'libstdc++'
!      (not 'libstdc++-v3'), 'libffi', 'zlib', 'boehm-gc', 'ada',
!      'libada', 'libgo', 'libobjc', and 'libphobos'.  Note 'libiberty'
       does not support shared libraries at all.
  
!      Use '--disable-shared' to build only static libraries.  Note that
!      '--disable-shared' does not accept a list of package names as
!      argument, only '--enable-shared' does.
  
!      Contrast with '--enable-host-shared', which affects _host_ code.
  
! '--enable-host-shared'
       Specify that the _host_ code should be built into
!      position-independent machine code (with '-fPIC'), allowing it to be
       used within shared libraries, but yielding a slightly slower
       compiler.
  
       This option is required when building the libgccjit.so library.
  
!      Contrast with '--enable-shared', which affects _target_ libraries.
  
! '--enable-host-pie'
       Specify that the _host_ executables should be built into
!      position-independent executables (with '-fPIE' and '-pie'),
       yielding a slightly slower compiler (but faster than
!      '--enable-host-shared').  Position-independent executables are
       loaded at random addresses each time they are executed, therefore
       provide additional protection against Return Oriented Programming
       (ROP) attacks.
  
!      '--enable-host-pie' may be used with '--enable-host-shared', in
!      which case '-fPIC' is used when compiling, and '-pie' when linking.
  
! '--enable-host-bind-now'
       Specify that the _host_ executables should be linked with the
!      option '-Wl,-z,now', which means that the dynamic linker will
       resolve all symbols when the executables are started, and that in
       turn allows RELRO to mark the GOT read-only, resulting in better
       security.
  
! '--with-gnu-as'
       Specify that the compiler should assume that the assembler it finds
       is the GNU assembler.  However, this does not modify the rules to
       find an assembler and will result in confusion if the assembler
       found is not actually the GNU assembler.  (Confusion may also
       result if the compiler finds the GNU assembler but has not been
!      configured with '--with-gnu-as'.)  If you have more than one
       assembler installed on your system, you may want to use this option
!      in connection with '--with-as=PATHNAME' or
!      '--with-build-time-tools=PATHNAME'.
  
       The following systems are the only ones where it makes a difference
       whether you use the GNU assembler.  On any other system,
!      '--with-gnu-as' has no effect.
  
!         * 'hppa1.0-ANY-ANY'
!         * 'hppa1.1-ANY-ANY'
!         * '*-*-solaris2.11'
  
! '--with-as=PATHNAME'
       Specify that the compiler should use the assembler pointed to by
       PATHNAME, rather than the one found by the standard rules to find
       an assembler, which are:
!         * Unless GCC is being built with a cross compiler, check the
!           'LIBEXEC/gcc/TARGET/VERSION' directory.  LIBEXEC defaults to
!           'EXEC-PREFIX/libexec'; EXEC-PREFIX defaults to PREFIX, which
!           defaults to '/usr/local' unless overridden by the
!           '--prefix=PATHNAME' switch described above.  TARGET is the
!           target system triple, such as 'sparc-sun-solaris2.11', and
            VERSION denotes the GCC version, such as 3.0.
  
!         * If the target system is the same that you are building on,
            check operating system specific directories.
  
!         * Check in the 'PATH' for a tool whose name is prefixed by the
            target system triple.
  
!         * Check in the 'PATH' for a tool whose name is not prefixed by
            the target system triple, if the host and target system triple
            are the same (in other words, we use a host tool if it can be
            used for the target as well).
  
!      You may want to use '--with-as' if no assembler is installed in the
       directories listed above, or if you have multiple assemblers
       installed and want to choose one that is not found by the above
       rules.
  
! '--with-gnu-ld'
!      Same as '--with-gnu-as' but for the linker.
  
! '--with-ld=PATHNAME'
!      Same as '--with-as' but for the linker.
  
! '--with-dsymutil=PATHNAME'
!      Same as '--with-as' but for the debug linker (only used on Darwin
       platforms so far).
  
! '--with-tls=DIALECT'
!      Specify the default TLS dialect, for systems were there is a
!      choice.  For ARM targets, possible values for DIALECT are 'gnu' or
!      'gnu2', which select between the original GNU dialect and the GNU
       TLS descriptor-based dialect.  For RISC-V targets, possible values
!      for DIALECT are 'trad' or 'desc', which select between the
       traditional GNU dialect and the GNU TLS descriptor-based dialect.
  
! '--enable-multiarch'
       Specify whether to enable or disable multiarch support.  The
       default is to check for glibc start files in a multiarch location,
       and enable it if the files are found.  The auto detection is
       enabled for native builds, and for cross builds configured with
!      '--with-sysroot', and without '--with-native-system-header-dir'.
       More documentation about multiarch can be found at
       <https://wiki.debian.org/Multiarch>.
  
! '--enable-sjlj-exceptions'
!      Force use of the 'setjmp'/'longjmp'-based scheme for exceptions.
!      'configure' ordinarily picks the correct value based on the
       platform.  Only use this option if you are sure you need a
       different setting.
  
! '--enable-vtable-verify'
       Specify whether to enable or disable the vtable verification
       feature.  Enabling this feature causes libstdc++ to be built with
       its virtual calls in verifiable mode.  This means that, when linked
--- 904,1030 ----
       If a list of packages is given as an argument, build shared
       libraries only for the listed packages.  For other packages, only
       static libraries will be built.  Package names currently recognized
!      in the GCC tree are ‘libgcc’ (also known as ‘gcc’), ‘libstdc++’
!      (not ‘libstdc++-v3’), ‘libffi’, ‘zlib’, ‘boehm-gc’, ‘ada’,
!      ‘libada’, ‘libgo’, ‘libobjc’, and ‘libphobos’.  Note ‘libiberty’
       does not support shared libraries at all.
  
!      Use ‘--disable-shared’ to build only static libraries.  Note that
!      ‘--disable-shared’ does not accept a list of package names as
!      argument, only ‘--enable-shared’ does.
  
!      Contrast with ‘--enable-host-shared’, which affects _host_ code.
  
! ‘--enable-host-shared’
       Specify that the _host_ code should be built into
!      position-independent machine code (with ‘-fPIC’), allowing it to be
       used within shared libraries, but yielding a slightly slower
       compiler.
  
       This option is required when building the libgccjit.so library.
  
!      Contrast with ‘--enable-shared’, which affects _target_ libraries.
  
! ‘--enable-host-pie’
       Specify that the _host_ executables should be built into
!      position-independent executables (with ‘-fPIE’ and ‘-pie’),
       yielding a slightly slower compiler (but faster than
!      ‘--enable-host-shared’).  Position-independent executables are
       loaded at random addresses each time they are executed, therefore
       provide additional protection against Return Oriented Programming
       (ROP) attacks.
  
!      ‘--enable-host-pie’ may be used with ‘--enable-host-shared’, in
!      which case ‘-fPIC’ is used when compiling, and ‘-pie’ when linking.
  
! ‘--enable-host-bind-now’
       Specify that the _host_ executables should be linked with the
!      option ‘-Wl,-z,now’, which means that the dynamic linker will
       resolve all symbols when the executables are started, and that in
       turn allows RELRO to mark the GOT read-only, resulting in better
       security.
  
! ‘--with-gnu-as’
       Specify that the compiler should assume that the assembler it finds
       is the GNU assembler.  However, this does not modify the rules to
       find an assembler and will result in confusion if the assembler
       found is not actually the GNU assembler.  (Confusion may also
       result if the compiler finds the GNU assembler but has not been
!      configured with ‘--with-gnu-as’.)  If you have more than one
       assembler installed on your system, you may want to use this option
!      in connection with ‘--with-as=PATHNAME’ or
!      ‘--with-build-time-tools=PATHNAME’.
  
       The following systems are the only ones where it makes a difference
       whether you use the GNU assembler.  On any other system,
!      ‘--with-gnu-as’ has no effect.
  
!         • ‘hppa1.0-ANY-ANY’
!         • ‘hppa1.1-ANY-ANY’
!         • ‘*-*-solaris2.11’
  
! ‘--with-as=PATHNAME’
       Specify that the compiler should use the assembler pointed to by
       PATHNAME, rather than the one found by the standard rules to find
       an assembler, which are:
!         • Unless GCC is being built with a cross compiler, check the
!           ‘LIBEXEC/gcc/TARGET/VERSION’ directory.  LIBEXEC defaults to
!           ‘EXEC-PREFIX/libexec’; EXEC-PREFIX defaults to PREFIX, which
!           defaults to ‘/usr/local’ unless overridden by the
!           ‘--prefix=PATHNAME’ switch described above.  TARGET is the
!           target system triple, such as ‘sparc-sun-solaris2.11’, and
            VERSION denotes the GCC version, such as 3.0.
  
!         • If the target system is the same that you are building on,
            check operating system specific directories.
  
!         • Check in the ‘PATH’ for a tool whose name is prefixed by the
            target system triple.
  
!         • Check in the ‘PATH’ for a tool whose name is not prefixed by
            the target system triple, if the host and target system triple
            are the same (in other words, we use a host tool if it can be
            used for the target as well).
  
!      You may want to use ‘--with-as’ if no assembler is installed in the
       directories listed above, or if you have multiple assemblers
       installed and want to choose one that is not found by the above
       rules.
  
! ‘--with-gnu-ld’
!      Same as ‘--with-gnu-as’ but for the linker.
  
! ‘--with-ld=PATHNAME’
!      Same as ‘--with-as’ but for the linker.
  
! ‘--with-dsymutil=PATHNAME’
!      Same as ‘--with-as’ but for the debug linker (only used on Darwin
       platforms so far).
  
! ‘--with-tls=DIALECT’
!      Specify the default TLS dialect, for systems where there is a
!      choice.  For ARM targets, possible values for DIALECT are ‘gnu’ or
!      ‘gnu2’, which select between the original GNU dialect and the GNU
       TLS descriptor-based dialect.  For RISC-V targets, possible values
!      for DIALECT are ‘trad’ or ‘desc’, which select between the
       traditional GNU dialect and the GNU TLS descriptor-based dialect.
  
! ‘--enable-multiarch’
       Specify whether to enable or disable multiarch support.  The
       default is to check for glibc start files in a multiarch location,
       and enable it if the files are found.  The auto detection is
       enabled for native builds, and for cross builds configured with
!      ‘--with-sysroot’, and without ‘--with-native-system-header-dir’.
       More documentation about multiarch can be found at
       <https://wiki.debian.org/Multiarch>.
  
! ‘--enable-sjlj-exceptions’
!      Force use of the ‘setjmp’/‘longjmp’-based scheme for exceptions.
!      ‘configure’ ordinarily picks the correct value based on the
       platform.  Only use this option if you are sure you need a
       different setting.
  
! ‘--enable-vtable-verify’
       Specify whether to enable or disable the vtable verification
       feature.  Enabling this feature causes libstdc++ to be built with
       its virtual calls in verifiable mode.  This means that, when linked
*************** option.
*** 1034,1204 ****
       functions (in libstdc++ itself) and do nothing.  If vtable
       verification is disabled, then libstdc++ is not built with its
       virtual calls in verifiable mode at all.  However the libvtv
!      library will still be built (see '--disable-libvtv' to turn off
!      building libvtv).  '--disable-vtable-verify' is the default.
  
! '--disable-gcov'
       Specify that the run-time library used for coverage analysis and
       associated host tools should not be built.
  
! '--disable-multilib'
       Specify that multiple target libraries to support different target
       variants, calling conventions, etc. should not be built.  The
       default is to build a predefined set of them.
  
       Some targets provide finer-grained control over which multilibs are
!      built (e.g., '--disable-softfloat'):
!      'arm-*-*'
            fpu, 26bit, underscore, interwork, biendian, nofmult.
  
!      'm68*-*-*'
            softfloat, m68881, m68000, m68020.
  
!      'mips*-*-*'
            single-float, biendian, softfloat.
  
!      'msp430-*-*'
            no-exceptions
  
!      'powerpc*-*-*, rs6000*-*-*'
            aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos,
            biendian, sysv, aix.
  
! '--with-multilib-list=LIST'
! '--without-multilib-list'
       Specify what multilibs to build.  LIST is a comma separated list of
       values, possibly consisting of a single value.  Currently only
       implemented for aarch64*-*-*, amdgcn*-*-*, arm*-*-*,
       loongarch*-*-*, riscv*-*-*, sh*-*-* and x86-64-*-linux*.  The
       accepted values and meaning for each target is given below.
  
!      'aarch64*-*-*'
!           LIST is a comma separated list of 'ilp32', and 'lp64' to
            enable ILP32 and LP64 run-time libraries, respectively.  If
            LIST is empty, then there will be no multilibs and only the
!           default run-time library will be built.  If LIST is 'default'
            or -with-multilib-list= is not specified, then the default set
!           of libraries is selected based on the value of '--target'.
  
!      'amdgcn*-*-*'
            LIST is a comma separated list of ISA names (allowed values:
!           'fiji', 'gfx900', 'gfx906', 'gfx908', 'gfx90a', 'gfx90c',
!           'gfx1030', 'gfx1036', 'gfx1100', 'gfx1103').  It ought not
            include the name of the default ISA, specified via
!           '--with-arch'.  If LIST is empty, then there will be no
            multilibs and only the default run-time library will be built.
!           If LIST is 'default' or '--with-multilib-list=' is not
            specified, then the default set of libraries is selected.
  
!      'arm*-*-*'
!           LIST is a comma separated list of 'aprofile' and 'rmprofile'
            to build multilibs for A or R and M architecture profiles
            respectively.  Note that, due to some limitation of the
            current multilib framework, using the combined
!           'aprofile,rmprofile' multilibs selects in some cases a less
            optimal multilib than when using the multilib profile for the
!           architecture targetted.  The special value 'default' is also
            accepted and is equivalent to omitting the option, i.e., only
            the default run-time library will be enabled.
  
!           LIST may instead contain '@name', to use the multilib
!           configuration Makefile fragment 'name' in 'gcc/config/arm' in
            the source tree (it is part of the corresponding sources,
            after all).  It is recommended, but not required, that files
!           used for this purpose to be named starting with 't-ml-', to
            make their intended purpose self-evident, in line with GCC
            conventions.  Such files enable custom, user-chosen multilib
            lists to be configured.  Whether multiple such files can be
            used together depends on the contents of the supplied files.
!           See 'gcc/config/arm/t-multilib' and its supplementary
!           'gcc/config/arm/t-*profile' files for an example of what such
            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
!           'MULTILIB'-related macros expected by the version of GCC you
            are building.  *Note Target Makefile Fragments: (gccint)Target
            Fragment.
  
            The table below gives the combination of ISAs, architectures,
            FPUs and floating-point ABIs for which multilibs are built for
            each predefined profile.  The union of these options is
!           considered when specifying both 'aprofile' and 'rmprofile'.
  
            Option      aprofile             rmprofile
!           ISAs        '-marm' and          '-mthumb'
!                       '-mthumb'
            Architecturesdefault             default architecture
!                       architecture         '-march=armv6s-m'
!                       '-march=armv7-a'     '-march=armv7-m'
!                       '-march=armv7ve'     '-march=armv7e-m'
!                       '-march=armv8-a'     '-march=armv8-m.base'
!                                            '-march=armv8-m.main'
!                                            '-march=armv7'
            FPUs        none                 none
!                       '-mfpu=vfpv3-d16'    '-mfpu=vfpv3-d16'
!                       '-mfpu=neon'         '-mfpu=fpv4-sp-d16'
!                       '-mfpu=vfpv4-d16'    '-mfpu=fpv5-sp-d16'
!                       '-mfpu=neon-vfpv4'   '-mfpu=fpv5-d16'
!                       '-mfpu=neon-fp-armv8'
!           floating-point'-mfloat-abi=soft' '-mfloat-abi=soft'
!           ABIs        '-mfloat-abi=softfp' '-mfloat-abi=softfp'
!                       '-mfloat-abi=hard'   '-mfloat-abi=hard'
  
!      'loongarch*-*-*'
            LIST is a comma-separated list, with each of the element
!           starting with the following ABI identifiers: 'lp64d[/base]'
!           'lp64f[/base]' 'lp64d[/base]' (the '/base' suffix may be
            omitted) to enable their respective run-time libraries.
  
!           A suffix '[/ARCH][/OPTION/...]' may follow immediately after
            the ABI identifier to customize the compiler options for
            building the given set of libraries.  ARCH denotes the
!           architecture name recognized by the '-march=ARCH' compiler
            option, which acts as a basic target ISA configuration that
            can be adjusted using the subsequent OPTION suffixes, where
            each OPTION is a compiler option without a leading dash ('-').
  
            If no such suffix is present for a given multilib variant, the
!           configured value of '--with-multilib-default' is appended as a
!           default suffix.  If '--with-multilib-default' is not given,
!           the default build option '-march=abi-default' is applied when
            building the variants without a suffix.
  
!           As a special case, 'fixed' may be used in the position of
            ARCH, which means using the architecture configured with
!           '--with-arch=ARCH', or its default value (e.g.  'loongarch64'
!           for 'loongarch64-*' targets).
  
!           If LIST is empty or 'default', or if '--with-multilib-list' is
            not specified, then only the default variant of the libraries
            are built, where the default ABI is implied by the configured
            target triplet.
  
!      'riscv*-*-*'
            LIST is a single ABI name.  The target architecture must be
!           either 'rv32gc' or 'rv64gc'.  This will build a single
            multilib for the specified architecture and ABI pair.  If
!           '--with-multilib-list' is not given, then a default set of
!           multilibs is selected based on the value of '--target'.  This
            is usually a large set of multilibs.
  
!      'sh*-*-*'
            LIST is a comma separated list of CPU names.  These must be of
!           the form 'sh*' or 'm*' (in which case they match the compiler
            option for that processor).  The list should not contain any
!           endian options - these are handled by '--with-endian'.
  
            If LIST is empty, then there will be no multilibs for extra
            processors.  The multilib for the secondary endian remains
            enabled.
  
!           As a special case, if an entry in the list starts with a '!'
            (exclamation point), then it is added to the list of excluded
            multilibs.  Entries of this sort should be compatible with
!           'MULTILIB_EXCLUDES' (once the leading '!' has been stripped).
  
!           If '--with-multilib-list' is not given, then a default set of
!           multilibs is selected based on the value of '--target'.  This
            is usually the complete set of libraries, but some targets
            imply a more specialized subset.
  
--- 1034,1204 ----
       functions (in libstdc++ itself) and do nothing.  If vtable
       verification is disabled, then libstdc++ is not built with its
       virtual calls in verifiable mode at all.  However the libvtv
!      library will still be built (see ‘--disable-libvtv’ to turn off
!      building libvtv).  ‘--disable-vtable-verify’ is the default.
  
! ‘--disable-gcov’
       Specify that the run-time library used for coverage analysis and
       associated host tools should not be built.
  
! ‘--disable-multilib’
       Specify that multiple target libraries to support different target
       variants, calling conventions, etc. should not be built.  The
       default is to build a predefined set of them.
  
       Some targets provide finer-grained control over which multilibs are
!      built (e.g., ‘--disable-softfloat’):
!      ‘arm-*-*’
            fpu, 26bit, underscore, interwork, biendian, nofmult.
  
!      ‘m68*-*-*’
            softfloat, m68881, m68000, m68020.
  
!      ‘mips*-*-*’
            single-float, biendian, softfloat.
  
!      ‘msp430-*-*’
            no-exceptions
  
!      ‘powerpc*-*-*, rs6000*-*-*’
            aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos,
            biendian, sysv, aix.
  
! ‘--with-multilib-list=LIST’
! ‘--without-multilib-list’
       Specify what multilibs to build.  LIST is a comma separated list of
       values, possibly consisting of a single value.  Currently only
       implemented for aarch64*-*-*, amdgcn*-*-*, arm*-*-*,
       loongarch*-*-*, riscv*-*-*, sh*-*-* and x86-64-*-linux*.  The
       accepted values and meaning for each target is given below.
  
!      ‘aarch64*-*-*’
!           LIST is a comma separated list of ‘ilp32’, and ‘lp64’ to
            enable ILP32 and LP64 run-time libraries, respectively.  If
            LIST is empty, then there will be no multilibs and only the
!           default run-time library will be built.  If LIST is ‘default’
            or -with-multilib-list= is not specified, then the default set
!           of libraries is selected based on the value of ‘--target’.
  
!      ‘amdgcn*-*-*’
            LIST is a comma separated list of ISA names (allowed values:
!           ‘fiji’, ‘gfx900’, ‘gfx906’, ‘gfx908’, ‘gfx90a’, ‘gfx90c’,
!           ‘gfx1030’, ‘gfx1036’, ‘gfx1100’, ‘gfx1103’).  It ought not
            include the name of the default ISA, specified via
!           ‘--with-arch’.  If LIST is empty, then there will be no
            multilibs and only the default run-time library will be built.
!           If LIST is ‘default’ or ‘--with-multilib-list=’ is not
            specified, then the default set of libraries is selected.
  
!      ‘arm*-*-*’
!           LIST is a comma separated list of ‘aprofile’ and ‘rmprofile’
            to build multilibs for A or R and M architecture profiles
            respectively.  Note that, due to some limitation of the
            current multilib framework, using the combined
!           ‘aprofile,rmprofile’ multilibs selects in some cases a less
            optimal multilib than when using the multilib profile for the
!           architecture targetted.  The special value ‘default’ is also
            accepted and is equivalent to omitting the option, i.e., only
            the default run-time library will be enabled.
  
!           LIST may instead contain ‘@name’, to use the multilib
!           configuration Makefile fragment ‘name’ in ‘gcc/config/arm’ in
            the source tree (it is part of the corresponding sources,
            after all).  It is recommended, but not required, that files
!           used for this purpose to be named starting with ‘t-ml-’, to
            make their intended purpose self-evident, in line with GCC
            conventions.  Such files enable custom, user-chosen multilib
            lists to be configured.  Whether multiple such files can be
            used together depends on the contents of the supplied files.
!           See ‘gcc/config/arm/t-multilib’ and its supplementary
!           ‘gcc/config/arm/t-*profile’ files for an example of what such
            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
!           ‘MULTILIB’-related macros expected by the version of GCC you
            are building.  *Note Target Makefile Fragments: (gccint)Target
            Fragment.
  
            The table below gives the combination of ISAs, architectures,
            FPUs and floating-point ABIs for which multilibs are built for
            each predefined profile.  The union of these options is
!           considered when specifying both ‘aprofile’ and ‘rmprofile’.
  
            Option      aprofile             rmprofile
!           ISAs        ‘-marm’ and          ‘-mthumb’
!                       ‘-mthumb’
            Architecturesdefault             default architecture
!                       architecture         ‘-march=armv6s-m’
!                       ‘-march=armv7-a’     ‘-march=armv7-m’
!                       ‘-march=armv7ve’     ‘-march=armv7e-m’
!                       ‘-march=armv8-a’     ‘-march=armv8-m.base’
!                                            ‘-march=armv8-m.main’
!                                            ‘-march=armv7’
            FPUs        none                 none
!                       ‘-mfpu=vfpv3-d16’    ‘-mfpu=vfpv3-d16’
!                       ‘-mfpu=neon’         ‘-mfpu=fpv4-sp-d16’
!                       ‘-mfpu=vfpv4-d16’    ‘-mfpu=fpv5-sp-d16’
!                       ‘-mfpu=neon-vfpv4’   ‘-mfpu=fpv5-d16’
!                       ‘-mfpu=neon-fp-armv8’
!           floating-point‘-mfloat-abi=soft’ ‘-mfloat-abi=soft’
!           ABIs        ‘-mfloat-abi=softfp’ ‘-mfloat-abi=softfp’
!                       ‘-mfloat-abi=hard’   ‘-mfloat-abi=hard’
  
!      ‘loongarch*-*-*’
            LIST is a comma-separated list, with each of the element
!           starting with the following ABI identifiers: ‘lp64d[/base]’
!           ‘lp64f[/base]’ ‘lp64d[/base]’ (the ‘/base’ suffix may be
            omitted) to enable their respective run-time libraries.
  
!           A suffix ‘[/ARCH][/OPTION/...]’ may follow immediately after
            the ABI identifier to customize the compiler options for
            building the given set of libraries.  ARCH denotes the
!           architecture name recognized by the ‘-march=ARCH’ compiler
            option, which acts as a basic target ISA configuration that
            can be adjusted using the subsequent OPTION suffixes, where
            each OPTION is a compiler option without a leading dash ('-').
  
            If no such suffix is present for a given multilib variant, the
!           configured value of ‘--with-multilib-default’ is appended as a
!           default suffix.  If ‘--with-multilib-default’ is not given,
!           the default build option ‘-march=abi-default’ is applied when
            building the variants without a suffix.
  
!           As a special case, ‘fixed’ may be used in the position of
            ARCH, which means using the architecture configured with
!           ‘--with-arch=ARCH’, or its default value (e.g.  ‘loongarch64’
!           for ‘loongarch64-*’ targets).
  
!           If LIST is empty or ‘default’, or if ‘--with-multilib-list’ is
            not specified, then only the default variant of the libraries
            are built, where the default ABI is implied by the configured
            target triplet.
  
!      ‘riscv*-*-*’
            LIST is a single ABI name.  The target architecture must be
!           either ‘rv32gc’ or ‘rv64gc’.  This will build a single
            multilib for the specified architecture and ABI pair.  If
!           ‘--with-multilib-list’ is not given, then a default set of
!           multilibs is selected based on the value of ‘--target’.  This
            is usually a large set of multilibs.
  
!      ‘sh*-*-*’
            LIST is a comma separated list of CPU names.  These must be of
!           the form ‘sh*’ or ‘m*’ (in which case they match the compiler
            option for that processor).  The list should not contain any
!           endian options - these are handled by ‘--with-endian’.
  
            If LIST is empty, then there will be no multilibs for extra
            processors.  The multilib for the secondary endian remains
            enabled.
  
!           As a special case, if an entry in the list starts with a ‘!’
            (exclamation point), then it is added to the list of excluded
            multilibs.  Entries of this sort should be compatible with
!           ‘MULTILIB_EXCLUDES’ (once the leading ‘!’ has been stripped).
  
!           If ‘--with-multilib-list’ is not given, then a default set of
!           multilibs is selected based on the value of ‘--target’.  This
            is usually the complete set of libraries, but some targets
            imply a more specialized subset.
  
*************** option.
*** 1211,1243 ****
                 --with-cpu=sh4a --with-endian=little,big \
                 --with-multilib-list=sh4al,!mb/m4al
  
!      'x86-64-*-linux*'
!           LIST is a comma separated list of 'm32', 'm64' and 'mx32' to
            enable 32-bit, 64-bit and x32 run-time libraries,
            respectively.  If LIST is empty, then there will be no
            multilibs and only the default run-time library will be
            enabled.
  
!           If '--with-multilib-list' is not given, then only 32-bit and
            64-bit run-time libraries will be enabled.
  
! '--with-multilib-default'
       On LoongArch targets, set the default build options for enabled
       multilibs without build options appended to their corresponding
!      '--with-multilib-list' items.  The format of this value is
!      '[/ARCH][/OPTION/...]', where ARCH is an architecture name
!      recognized by '-march=ARCH' compiler option, and subsequent OPTION
       suffixes are compiler options minus a leading dash ('-').
  
       Multiple OPTIONs may appear consecutively while ARCH may only
       appear in the beginning or be omitted (which means
!      '-march=abi-default' is applied when building the libraries).
  
! '--with-strict-align-lib'
       On LoongArch targets, build all enabled multilibs with
!      '-mstrict-align' (Not enabled by default).
  
! '--with-multilib-generator=CONFIG'
       Specify what multilibs to build.  CONFIG is a semicolon separated
       list of values, possibly consisting of a single value.  Currently
       only implemented for riscv*-*-elf*.  The accepted values and
--- 1211,1243 ----
                 --with-cpu=sh4a --with-endian=little,big \
                 --with-multilib-list=sh4al,!mb/m4al
  
!      ‘x86-64-*-linux*’
!           LIST is a comma separated list of ‘m32’, ‘m64’ and ‘mx32’ to
            enable 32-bit, 64-bit and x32 run-time libraries,
            respectively.  If LIST is empty, then there will be no
            multilibs and only the default run-time library will be
            enabled.
  
!           If ‘--with-multilib-list’ is not given, then only 32-bit and
            64-bit run-time libraries will be enabled.
  
! ‘--with-multilib-default’
       On LoongArch targets, set the default build options for enabled
       multilibs without build options appended to their corresponding
!      ‘--with-multilib-list’ items.  The format of this value is
!      ‘[/ARCH][/OPTION/...]’, where ARCH is an architecture name
!      recognized by ‘-march=ARCH’ compiler option, and subsequent OPTION
       suffixes are compiler options minus a leading dash ('-').
  
       Multiple OPTIONs may appear consecutively while ARCH may only
       appear in the beginning or be omitted (which means
!      ‘-march=abi-default’ is applied when building the libraries).
  
! ‘--with-strict-align-lib’
       On LoongArch targets, build all enabled multilibs with
!      ‘-mstrict-align’ (Not enabled by default).
  
! ‘--with-multilib-generator=CONFIG’
       Specify what multilibs to build.  CONFIG is a semicolon separated
       list of values, possibly consisting of a single value.  Currently
       only implemented for riscv*-*-elf*.  The accepted values and
*************** option.
*** 1263,1270 ****
       this multi-lib set.
            rv64ima-lp64--f,c,fc
  
!      '--with-multilib-generator' have an optional configuration argument
!      '--cmodel=val' for code model, this option will expand with other
       config options, VAL is a comma separated list of possible code
       model, currently we support medlow and medany.
  
--- 1263,1270 ----
       this multi-lib set.
            rv64ima-lp64--f,c,fc
  
!      ‘--with-multilib-generator’ have an optional configuration argument
!      ‘--cmodel=val’ for code model, this option will expand with other
       config options, VAL is a comma separated list of possible code
       model, currently we support medlow and medany.
  
*************** option.
*** 1277,1299 ****
       model
            rv64ima-lp64--;--cmodel=medlow,medany
  
! '--with-endian=ENDIANS'
       Specify what endians to use.  Currently only implemented for
       sh*-*-*.
  
       ENDIANS may be one of the following:
!      'big'
            Use big endian exclusively.
!      'little'
            Use little endian exclusively.
!      'big,little'
            Use big endian by default.  Provide a multilib for little
            endian.
!      'little,big'
            Use little endian by default.  Provide a multilib for big
            endian.
  
! '--enable-threads'
       Specify that the target supports threads.  This affects the
       Objective-C compiler and runtime library, and exception handling
       for other languages like C++.  On some systems, this is the
--- 1277,1299 ----
       model
            rv64ima-lp64--;--cmodel=medlow,medany
  
! ‘--with-endian=ENDIANS’
       Specify what endians to use.  Currently only implemented for
       sh*-*-*.
  
       ENDIANS may be one of the following:
!      ‘big’
            Use big endian exclusively.
!      ‘little’
            Use little endian exclusively.
!      ‘big,little’
            Use big endian by default.  Provide a multilib for little
            endian.
!      ‘little,big’
            Use little endian by default.  Provide a multilib for big
            endian.
  
! ‘--enable-threads’
       Specify that the target supports threads.  This affects the
       Objective-C compiler and runtime library, and exception handling
       for other languages like C++.  On some systems, this is the
*************** option.
*** 1303,1465 ****
       model available will be configured for use.  Beware that on some
       systems, GCC has not been taught what threading models are
       generally available for the system.  In this case,
!      '--enable-threads' is an alias for '--enable-threads=single'.
  
! '--disable-threads'
       Specify that threading support should be disabled for the system.
!      This is an alias for '--enable-threads=single'.
  
! '--enable-threads=LIB'
       Specify that LIB is the thread support library.  This affects the
       Objective-C compiler and runtime library, and exception handling
       for other languages like C++.  The possibilities for LIB are:
  
!      'aix'
            AIX thread support.
!      'dce'
            DCE thread support.
!      'lynx'
            LynxOS thread support.
!      'mipssde'
            MIPS SDE thread support.
!      'no'
!           This is an alias for 'single'.
!      'posix'
            Generic POSIX/Unix98 thread support.
!      'rtems'
            RTEMS thread support.
!      'single'
            Disable thread support, should work for all platforms.
!      'tpf'
            TPF thread support.
!      'vxworks'
            VxWorks thread support.
!      'win32'
            Microsoft Win32 API thread support.
  
! '--enable-tls'
       Specify that the target supports TLS (Thread Local Storage).
       Usually configure can correctly determine if TLS is supported.  In
       cases where it guesses incorrectly, TLS can be explicitly enabled
!      or disabled with '--enable-tls' or '--disable-tls'.  This can
       happen if the assembler supports TLS but the C library does not, or
       if the assumptions made by the configure test are incorrect.
  
! '--disable-tls'
       Specify that the target does not support TLS. This is an alias for
!      '--enable-tls=no'.
  
! '--disable-tm-clone-registry'
       Disable TM clone registry in libgcc.  It is enabled in libgcc by
       default.  This option helps to reduce code size for embedded
       targets which do not use transactional memory.
  
! '--with-cpu=CPU'
! '--with-cpu-32=CPU'
! '--with-cpu-64=CPU'
       Specify which cpu variant the compiler should generate code for by
!      default.  CPU will be used as the default value of the '-mcpu='
       switch.  This option is only supported on some targets, including
       ARC, ARM, i386, M68k, PowerPC, and SPARC.  It is mandatory for ARC.
!      The '--with-cpu-32' and '--with-cpu-64' options specify separate
       default CPUs for 32-bit and 64-bit modes; these options are only
       supported for aarch64, i386, x86-64, PowerPC, and SPARC.
  
! '--with-schedule=CPU'
! '--with-arch=CPU'
! '--with-arch-32=CPU'
! '--with-arch-64=CPU'
! '--with-tune=CPU'
! '--with-tune-32=CPU'
! '--with-tune-64=CPU'
! '--with-abi=ABI'
! '--with-fpu=TYPE'
! '--with-float=TYPE'
! '--with-simd=TYPE'
       These configure options provide default values for the
!      '-mschedule=', '-march=', '-mtune=', '-mabi=', and '-mfpu=' options
!      and for '-mhard-float' or '-msoft-float'.  As with '--with-cpu',
       which switches will be accepted and acceptable values of the
       arguments depend on the target.
  
! '--with-mode=MODE'
!      Specify if the compiler should default to '-marm' or '-mthumb'.
       This option is only supported on ARM targets.
  
! '--with-stack-offset=NUM'
       This option sets the default for the -mstack-offset=NUM option, and
       will thus generally also control the setting of this option for
       libraries.  This option is only supported on Epiphany targets.
  
! '--with-fpmath=ISA'
!      This options sets '-mfpmath=sse' by default and specifies the
       default ISA for floating-point arithmetics.  You can select either
!      'sse' which enables '-msse2' or 'avx' which enables '-mavx' by
       default.  This option is only supported on i386 and x86-64 targets.
  
! '--with-fp-32=MODE'
!      On MIPS targets, set the default value for the '-mfp' option when
       using the o32 ABI. The possibilities for MODE are:
!      '32'
!           Use the o32 FP32 ABI extension, as with the '-mfp32'
            command-line option.
!      'xx'
!           Use the o32 FPXX ABI extension, as with the '-mfpxx'
            command-line option.
!      '64'
!           Use the o32 FP64 ABI extension, as with the '-mfp64'
            command-line option.
       In the absence of this configuration option the default is to use
       the o32 FP32 ABI extension.
  
! '--with-odd-spreg-32'
!      On MIPS targets, set the '-modd-spreg' option by default when using
       the o32 ABI.
  
! '--without-odd-spreg-32'
!      On MIPS targets, set the '-mno-odd-spreg' option by default when
       using the o32 ABI. This is normally used in conjunction with
!      '--with-fp-32=64' in order to target the o32 FP64A ABI extension.
  
! '--with-nan=ENCODING'
       On MIPS targets, set the default encoding convention to use for the
       special not-a-number (NaN) IEEE 754 floating-point data.  The
       possibilities for ENCODING are:
!      'legacy'
!           Use the legacy encoding, as with the '-mnan=legacy'
            command-line option.
!      '2008'
!           Use the 754-2008 encoding, as with the '-mnan=2008'
            command-line option.
       To use this configuration option you must have an assembler version
!      installed that supports the '-mnan=' command-line option too.  In
       the absence of this configuration option the default convention is
!      the legacy encoding, as when neither of the '-mnan=2008' and
!      '-mnan=legacy' command-line options has been used.
  
! '--with-divide=TYPE'
       Specify how the compiler should generate code for checking for
       division by zero.  This option is only supported on the MIPS
       target.  The possibilities for TYPE are:
!      'traps'
            Division by zero checks use conditional traps (this is the
            default on systems that support conditional traps).
!      'breaks'
            Division by zero checks use the break instruction.
  
! '--with-compact-branches=POLICY'
       Specify how the compiler should generate branch instructions.  This
       option is only supported on the MIPS target.  The possibilities for
       TYPE are:
!      'optimal'
            Cause a delay slot branch to be used if one is available in
            the current ISA and the delay slot is successfully filled.  If
            the delay slot is not filled, a compact branch will be chosen
            if one is available.
!      'never'
            Ensures that compact branch instructions will never be
            generated.
!      'always'
            Ensures that a compact branch instruction will be generated if
            available.  If a compact branch instruction is not available,
            a delay slot form of the branch will be used instead.  This
--- 1303,1465 ----
       model available will be configured for use.  Beware that on some
       systems, GCC has not been taught what threading models are
       generally available for the system.  In this case,
!      ‘--enable-threads’ is an alias for ‘--enable-threads=single’.
  
! ‘--disable-threads’
       Specify that threading support should be disabled for the system.
!      This is an alias for ‘--enable-threads=single’.
  
! ‘--enable-threads=LIB’
       Specify that LIB is the thread support library.  This affects the
       Objective-C compiler and runtime library, and exception handling
       for other languages like C++.  The possibilities for LIB are:
  
!      ‘aix’
            AIX thread support.
!      ‘dce’
            DCE thread support.
!      ‘lynx’
            LynxOS thread support.
!      ‘mipssde’
            MIPS SDE thread support.
!      ‘no’
!           This is an alias for ‘single’.
!      ‘posix’
            Generic POSIX/Unix98 thread support.
!      ‘rtems’
            RTEMS thread support.
!      ‘single’
            Disable thread support, should work for all platforms.
!      ‘tpf’
            TPF thread support.
!      ‘vxworks’
            VxWorks thread support.
!      ‘win32’
            Microsoft Win32 API thread support.
  
! ‘--enable-tls’
       Specify that the target supports TLS (Thread Local Storage).
       Usually configure can correctly determine if TLS is supported.  In
       cases where it guesses incorrectly, TLS can be explicitly enabled
!      or disabled with ‘--enable-tls’ or ‘--disable-tls’.  This can
       happen if the assembler supports TLS but the C library does not, or
       if the assumptions made by the configure test are incorrect.
  
! ‘--disable-tls’
       Specify that the target does not support TLS. This is an alias for
!      ‘--enable-tls=no’.
  
! ‘--disable-tm-clone-registry’
       Disable TM clone registry in libgcc.  It is enabled in libgcc by
       default.  This option helps to reduce code size for embedded
       targets which do not use transactional memory.
  
! ‘--with-cpu=CPU’
! ‘--with-cpu-32=CPU’
! ‘--with-cpu-64=CPU’
       Specify which cpu variant the compiler should generate code for by
!      default.  CPU will be used as the default value of the ‘-mcpu=’
       switch.  This option is only supported on some targets, including
       ARC, ARM, i386, M68k, PowerPC, and SPARC.  It is mandatory for ARC.
!      The ‘--with-cpu-32’ and ‘--with-cpu-64’ options specify separate
       default CPUs for 32-bit and 64-bit modes; these options are only
       supported for aarch64, i386, x86-64, PowerPC, and SPARC.
  
! ‘--with-schedule=CPU’
! ‘--with-arch=CPU’
! ‘--with-arch-32=CPU’
! ‘--with-arch-64=CPU’
! ‘--with-tune=CPU’
! ‘--with-tune-32=CPU’
! ‘--with-tune-64=CPU’
! ‘--with-abi=ABI’
! ‘--with-fpu=TYPE’
! ‘--with-float=TYPE’
! ‘--with-simd=TYPE’
       These configure options provide default values for the
!      ‘-mschedule=’, ‘-march=’, ‘-mtune=’, ‘-mabi=’, and ‘-mfpu=’ options
!      and for ‘-mhard-float’ or ‘-msoft-float’.  As with ‘--with-cpu’,
       which switches will be accepted and acceptable values of the
       arguments depend on the target.
  
! ‘--with-mode=MODE’
!      Specify if the compiler should default to ‘-marm’ or ‘-mthumb’.
       This option is only supported on ARM targets.
  
! ‘--with-stack-offset=NUM’
       This option sets the default for the -mstack-offset=NUM option, and
       will thus generally also control the setting of this option for
       libraries.  This option is only supported on Epiphany targets.
  
! ‘--with-fpmath=ISA’
!      This options sets ‘-mfpmath=sse’ by default and specifies the
       default ISA for floating-point arithmetics.  You can select either
!      ‘sse’ which enables ‘-msse2’ or ‘avx’ which enables ‘-mavx’ by
       default.  This option is only supported on i386 and x86-64 targets.
  
! ‘--with-fp-32=MODE’
!      On MIPS targets, set the default value for the ‘-mfp’ option when
       using the o32 ABI. The possibilities for MODE are:
!      ‘32’
!           Use the o32 FP32 ABI extension, as with the ‘-mfp32’
            command-line option.
!      ‘xx’
!           Use the o32 FPXX ABI extension, as with the ‘-mfpxx’
            command-line option.
!      ‘64’
!           Use the o32 FP64 ABI extension, as with the ‘-mfp64’
            command-line option.
       In the absence of this configuration option the default is to use
       the o32 FP32 ABI extension.
  
! ‘--with-odd-spreg-32’
!      On MIPS targets, set the ‘-modd-spreg’ option by default when using
       the o32 ABI.
  
! ‘--without-odd-spreg-32’
!      On MIPS targets, set the ‘-mno-odd-spreg’ option by default when
       using the o32 ABI. This is normally used in conjunction with
!      ‘--with-fp-32=64’ in order to target the o32 FP64A ABI extension.
  
! ‘--with-nan=ENCODING’
       On MIPS targets, set the default encoding convention to use for the
       special not-a-number (NaN) IEEE 754 floating-point data.  The
       possibilities for ENCODING are:
!      ‘legacy’
!           Use the legacy encoding, as with the ‘-mnan=legacy’
            command-line option.
!      ‘2008’
!           Use the 754-2008 encoding, as with the ‘-mnan=2008’
            command-line option.
       To use this configuration option you must have an assembler version
!      installed that supports the ‘-mnan=’ command-line option too.  In
       the absence of this configuration option the default convention is
!      the legacy encoding, as when neither of the ‘-mnan=2008’ and
!      ‘-mnan=legacy’ command-line options has been used.
  
! ‘--with-divide=TYPE’
       Specify how the compiler should generate code for checking for
       division by zero.  This option is only supported on the MIPS
       target.  The possibilities for TYPE are:
!      ‘traps’
            Division by zero checks use conditional traps (this is the
            default on systems that support conditional traps).
!      ‘breaks’
            Division by zero checks use the break instruction.
  
! ‘--with-compact-branches=POLICY’
       Specify how the compiler should generate branch instructions.  This
       option is only supported on the MIPS target.  The possibilities for
       TYPE are:
!      ‘optimal’
            Cause a delay slot branch to be used if one is available in
            the current ISA and the delay slot is successfully filled.  If
            the delay slot is not filled, a compact branch will be chosen
            if one is available.
!      ‘never’
            Ensures that compact branch instructions will never be
            generated.
!      ‘always’
            Ensures that a compact branch instruction will be generated if
            available.  If a compact branch instruction is not available,
            a delay slot form of the branch will be used instead.  This
*************** option.
*** 1467,1496 ****
            pre-R6/microMIPS/MIPS16, this option is just same as
            never/optimal.
  
! '--with-llsc'
!      On MIPS targets, make '-mllsc' the default when no '-mno-llsc'
       option is passed.  This is the default for Linux-based targets, as
       the kernel will emulate them if the ISA does not provide them.
  
! '--without-llsc'
!      On MIPS targets, make '-mno-llsc' the default when no '-mllsc'
       option is passed.
  
! '--with-synci'
!      On MIPS targets, make '-msynci' the default when no '-mno-synci'
       option is passed.
  
! '--without-synci'
!      On MIPS targets, make '-mno-synci' the default when no '-msynci'
       option is passed.  This is the default.
  
! '--with-lxc1-sxc1'
!      On MIPS targets, make '-mlxc1-sxc1' the default when no
!      '-mno-lxc1-sxc1' option is passed.  This is the default.
  
! '--without-lxc1-sxc1'
!      On MIPS targets, make '-mno-lxc1-sxc1' the default when no
!      '-mlxc1-sxc1' option is passed.  The indexed load/store
       instructions are not directly a problem but can lead to unexpected
       behaviour when deployed in an application intended for a 32-bit
       address space but run on a 64-bit processor.  The issue is seen
--- 1467,1496 ----
            pre-R6/microMIPS/MIPS16, this option is just same as
            never/optimal.
  
! ‘--with-llsc’
!      On MIPS targets, make ‘-mllsc’ the default when no ‘-mno-llsc’
       option is passed.  This is the default for Linux-based targets, as
       the kernel will emulate them if the ISA does not provide them.
  
! ‘--without-llsc’
!      On MIPS targets, make ‘-mno-llsc’ the default when no ‘-mllsc’
       option is passed.
  
! ‘--with-synci’
!      On MIPS targets, make ‘-msynci’ the default when no ‘-mno-synci’
       option is passed.
  
! ‘--without-synci’
!      On MIPS targets, make ‘-mno-synci’ the default when no ‘-msynci’
       option is passed.  This is the default.
  
! ‘--with-lxc1-sxc1’
!      On MIPS targets, make ‘-mlxc1-sxc1’ the default when no
!      ‘-mno-lxc1-sxc1’ option is passed.  This is the default.
  
! ‘--without-lxc1-sxc1’
!      On MIPS targets, make ‘-mno-lxc1-sxc1’ the default when no
!      ‘-mlxc1-sxc1’ option is passed.  The indexed load/store
       instructions are not directly a problem but can lead to unexpected
       behaviour when deployed in an application intended for a 32-bit
       address space but run on a 64-bit processor.  The issue is seen
*************** option.
*** 1498,1516 ****
       applications with 64-bit addressing enabled which affects the
       overflow behaviour of the indexed addressing mode.  GCC will assume
       that ordinary 32-bit arithmetic overflow behaviour is the same
!      whether performed as an 'addu' instruction or as part of the
!      address calculation in 'lwxc1' type instructions.  This assumption
       holds true in a pure 32-bit environment and can hold true in a
       64-bit environment if the address space is accurately set to be
       32-bit for o32 and n32.
  
! '--with-madd4'
!      On MIPS targets, make '-mmadd4' the default when no '-mno-madd4'
       option is passed.  This is the default.
  
! '--without-madd4'
!      On MIPS targets, make '-mno-madd4' the default when no '-mmadd4'
!      option is passed.  The 'madd4' instruction family can be
       problematic when targeting a combination of cores that implement
       these instructions differently.  There are two known cores that
       implement these as fused operations instead of unfused (where
--- 1498,1516 ----
       applications with 64-bit addressing enabled which affects the
       overflow behaviour of the indexed addressing mode.  GCC will assume
       that ordinary 32-bit arithmetic overflow behaviour is the same
!      whether performed as an ‘addu’ instruction or as part of the
!      address calculation in ‘lwxc1’ type instructions.  This assumption
       holds true in a pure 32-bit environment and can hold true in a
       64-bit environment if the address space is accurately set to be
       32-bit for o32 and n32.
  
! ‘--with-madd4’
!      On MIPS targets, make ‘-mmadd4’ the default when no ‘-mno-madd4’
       option is passed.  This is the default.
  
! ‘--without-madd4’
!      On MIPS targets, make ‘-mno-madd4’ the default when no ‘-mmadd4’
!      option is passed.  The ‘madd4’ instruction family can be
       problematic when targeting a combination of cores that implement
       these instructions differently.  There are two known cores that
       implement these as fused operations instead of unfused (where
*************** option.
*** 1518,1594 ****
       only way to ensure compatible code is generated; this will incur a
       performance penalty.
  
! '--with-msa'
!      On MIPS targets, make '-mmsa' the default when no '-mno-msa' option
       is passed.
  
! '--without-msa'
!      On MIPS targets, make '-mno-msa' the default when no '-mmsa' option
       is passed.  This is the default.
  
! '--with-mips-plt'
       On MIPS targets, make use of copy relocations and PLTs.  These
       features are extensions to the traditional SVR4-based MIPS ABIs and
       require support from GNU binutils and the runtime C library.
  
! '--with-stack-clash-protection-guard-size=SIZE'
       On certain targets this option sets the default stack clash
       protection guard size as a power of two in bytes.  On AArch64 SIZE
       is required to be either 12 (4KB) or 16 (64KB).
  
! '--with-isa-spec=ISA-SPEC-STRING'
       On RISC-V targets specify the default version of the RISC-V
       Unprivileged (formerly User-Level) ISA specification to produce
       code conforming to.  The possibilities for ISA-SPEC-STRING are:
!      '2.2'
            Produce code conforming to version 2.2.
!      '20190608'
            Produce code conforming to version 20190608.
!      '20191213'
            Produce code conforming to version 20191213.
       In the absence of this configuration option the default version is
       20191213.
  
! '--enable-__cxa_atexit'
       Define if you want to use __cxa_atexit, rather than atexit, to
       register C++ destructors for local statics and global objects.
       This is essential for fully standards-compliant handling of
       destructors, but requires __cxa_atexit in libc.  This option is
       currently only available on systems with GNU libc.  When enabled,
!      this will cause '-fuse-cxa-atexit' to be passed by default.
  
! '--enable-gnu-indirect-function'
!      Define if you want to enable the 'ifunc' attribute.  This option is
       currently only available on systems with GNU libc on certain
       targets.
  
! '--enable-target-optspace'
       Specify that target libraries should be optimized for code space
       instead of code speed.  This is the default for the m32r platform.
  
! '--with-cpp-install-dir=DIRNAME'
!      Specify that the user visible 'cpp' program should be installed in
!      'PREFIX/DIRNAME/cpp', in addition to BINDIR.
  
! '--enable-comdat'
       Enable COMDAT group support.  This is primarily used to override
       the automatically detected value.
  
! '--enable-initfini-array'
!      Force the use of sections '.init_array' and '.fini_array' (instead
!      of '.init' and '.fini') for constructors and destructors.  Option
!      '--disable-initfini-array' has the opposite effect.  If neither
       option is specified, the configure script will try to guess whether
!      the '.init_array' and '.fini_array' sections are supported and, if
       they are, use them.
  
! '--enable-link-mutex'
       When building GCC, use a mutex to avoid linking the compilers for
       multiple languages at the same time, to avoid thrashing on build
       systems with limited free memory.  The default is not to use such a
       mutex.
  
! '--enable-link-serialization'
       When building GCC, use make dependencies to serialize linking the
       compilers for multiple languages, to avoid thrashing on build
       systems with limited free memory.  The default is not to add such
--- 1518,1594 ----
       only way to ensure compatible code is generated; this will incur a
       performance penalty.
  
! ‘--with-msa’
!      On MIPS targets, make ‘-mmsa’ the default when no ‘-mno-msa’ option
       is passed.
  
! ‘--without-msa’
!      On MIPS targets, make ‘-mno-msa’ the default when no ‘-mmsa’ option
       is passed.  This is the default.
  
! ‘--with-mips-plt’
       On MIPS targets, make use of copy relocations and PLTs.  These
       features are extensions to the traditional SVR4-based MIPS ABIs and
       require support from GNU binutils and the runtime C library.
  
! ‘--with-stack-clash-protection-guard-size=SIZE’
       On certain targets this option sets the default stack clash
       protection guard size as a power of two in bytes.  On AArch64 SIZE
       is required to be either 12 (4KB) or 16 (64KB).
  
! ‘--with-isa-spec=ISA-SPEC-STRING’
       On RISC-V targets specify the default version of the RISC-V
       Unprivileged (formerly User-Level) ISA specification to produce
       code conforming to.  The possibilities for ISA-SPEC-STRING are:
!      ‘2.2’
            Produce code conforming to version 2.2.
!      ‘20190608’
            Produce code conforming to version 20190608.
!      ‘20191213’
            Produce code conforming to version 20191213.
       In the absence of this configuration option the default version is
       20191213.
  
! ‘--enable-__cxa_atexit’
       Define if you want to use __cxa_atexit, rather than atexit, to
       register C++ destructors for local statics and global objects.
       This is essential for fully standards-compliant handling of
       destructors, but requires __cxa_atexit in libc.  This option is
       currently only available on systems with GNU libc.  When enabled,
!      this will cause ‘-fuse-cxa-atexit’ to be passed by default.
  
! ‘--enable-gnu-indirect-function’
!      Define if you want to enable the ‘ifunc’ attribute.  This option is
       currently only available on systems with GNU libc on certain
       targets.
  
! ‘--enable-target-optspace’
       Specify that target libraries should be optimized for code space
       instead of code speed.  This is the default for the m32r platform.
  
! ‘--with-cpp-install-dir=DIRNAME’
!      Specify that the user visible ‘cpp’ program should be installed in
!      ‘PREFIX/DIRNAME/cpp’, in addition to BINDIR.
  
! ‘--enable-comdat’
       Enable COMDAT group support.  This is primarily used to override
       the automatically detected value.
  
! ‘--enable-initfini-array’
!      Force the use of sections ‘.init_array’ and ‘.fini_array’ (instead
!      of ‘.init’ and ‘.fini’) for constructors and destructors.  Option
!      ‘--disable-initfini-array’ has the opposite effect.  If neither
       option is specified, the configure script will try to guess whether
!      the ‘.init_array’ and ‘.fini_array’ sections are supported and, if
       they are, use them.
  
! ‘--enable-link-mutex’
       When building GCC, use a mutex to avoid linking the compilers for
       multiple languages at the same time, to avoid thrashing on build
       systems with limited free memory.  The default is not to use such a
       mutex.
  
! ‘--enable-link-serialization’
       When building GCC, use make dependencies to serialize linking the
       compilers for multiple languages, to avoid thrashing on build
       systems with limited free memory.  The default is not to add such
*************** option.
*** 1597,1625 ****
       allow that number of concurrent link processes for the large
       binaries.
  
! '--enable-maintainer-mode'
       The build rules that regenerate the Autoconf and Automake output
!      files as well as the GCC master message catalog 'gcc.pot' are
       normally disabled.  This is because it can only be rebuilt if the
       complete source tree is present.  If you have changed the sources
       and want to rebuild the catalog, configuring with
!      '--enable-maintainer-mode' will enable this.  Note that you need a
!      recent version of the 'gettext' tools to do so.
  
! '--disable-bootstrap'
       For a native build, the default configuration is to perform a
!      3-stage bootstrap of the compiler when 'make' is invoked, testing
       that GCC can compile itself correctly.  If you want to disable this
!      process, you can configure with '--disable-bootstrap'.
  
! '--enable-bootstrap'
       In special cases, you may want to perform a 3-stage build even if
       the target and host triplets are different.  This is possible when
       the host can run code compiled for the target (e.g. host is
       i686-linux, target is i486-linux).  Starting from GCC 4.2, to do
!      this you have to configure explicitly with '--enable-bootstrap'.
  
! '--enable-generated-files-in-srcdir'
       Neither the .c and .h files that are generated from Bison and flex
       nor the info manuals and man pages that are built from the .texi
       files are present in the repository development tree.  When
--- 1597,1625 ----
       allow that number of concurrent link processes for the large
       binaries.
  
! ‘--enable-maintainer-mode’
       The build rules that regenerate the Autoconf and Automake output
!      files as well as the GCC master message catalog ‘gcc.pot’ are
       normally disabled.  This is because it can only be rebuilt if the
       complete source tree is present.  If you have changed the sources
       and want to rebuild the catalog, configuring with
!      ‘--enable-maintainer-mode’ will enable this.  Note that you need a
!      recent version of the ‘gettext’ tools to do so.
  
! ‘--disable-bootstrap’
       For a native build, the default configuration is to perform a
!      3-stage bootstrap of the compiler when ‘make’ is invoked, testing
       that GCC can compile itself correctly.  If you want to disable this
!      process, you can configure with ‘--disable-bootstrap’.
  
! ‘--enable-bootstrap’
       In special cases, you may want to perform a 3-stage build even if
       the target and host triplets are different.  This is possible when
       the host can run code compiled for the target (e.g. host is
       i686-linux, target is i486-linux).  Starting from GCC 4.2, to do
!      this you have to configure explicitly with ‘--enable-bootstrap’.
  
! ‘--enable-generated-files-in-srcdir’
       Neither the .c and .h files that are generated from Bison and flex
       nor the info manuals and man pages that are built from the .texi
       files are present in the repository development tree.  When
*************** option.
*** 1628,1825 ****
       directory, which allows for the source to be in a readonly
       directory.
  
!      If you configure with '--enable-generated-files-in-srcdir' then
       those generated files will go into the source directory.  This is
       mainly intended for generating release or prerelease tarballs of
       the GCC sources, since it is not a requirement that the users of
       source releases to have flex, Bison, or makeinfo.
  
! '--enable-version-specific-runtime-libs'
       Specify that runtime libraries should be installed in the compiler
!      specific subdirectory ('LIBDIR/gcc') rather than the usual places.
!      In addition, 'libstdc++''s include files will be installed into
!      'LIBDIR' unless you overruled it by using
!      '--with-gxx-include-dir=DIRNAME'.  Using this option is
       particularly useful if you intend to use several versions of GCC in
!      parallel.  The default is 'yes' for 'libada', and 'no' for the
       remaining libraries.
  
! '--with-darwin-extra-rpath'
       This is provided to allow distributions to add a single additional
       runpath on Darwin / macOS systems.  This allows for cases where the
       installed GCC library directories are then symlinked to a common
       directory outside of the GCC installation.
  
! '--with-aix-soname='aix', 'svr4' or 'both''
!      Traditional AIX shared library versioning (versioned 'Shared
!      Object' files as members of unversioned 'Archive Library' files
!      named 'lib.a') causes numerous headaches for package managers.
!      However, 'Import Files' as members of 'Archive Library' files allow
       for *filename-based versioning* of shared libraries as seen on
       Linux/SVR4, where this is called the "SONAME". But as they prevent
!      static linking, 'Import Files' may be used with 'Runtime Linking'
!      only, where the linker does search for 'libNAME.so' before
!      'libNAME.a' library filenames with the '-lNAME' linker flag.
  
       For detailed information please refer to the AIX ld Command
       reference.
  
       As long as shared library creation is enabled, upon:
!      '--with-aix-soname=aix'
!      '--with-aix-soname=both'
!           A (traditional AIX) 'Shared Archive Library' file is created:
!              * using the 'libNAME.a' filename scheme
!              * with the 'Shared Object' file as archive member named
!                'libNAME.so.V' (except for 'libgcc_s', where the 'Shared
!                Object' file is named 'shr.o' for backwards
                 compatibility), which
!                   - is used for runtime loading from inside the
!                     'libNAME.a' file
!                   - is used for dynamic loading via
!                     'dlopen("libNAME.a(libNAME.so.V)", RTLD_MEMBER)'
!                   - is used for shared linking
!                   - is used for static linking, so no separate 'Static
!                     Archive Library' file is needed
!      '--with-aix-soname=both'
!      '--with-aix-soname=svr4'
!           A (second) 'Shared Archive Library' file is created:
!              * using the 'libNAME.so.V' filename scheme
!              * with the 'Shared Object' file as archive member named
!                'shr.o', which
!                   - is created with the '-G linker flag'
!                   - has the 'F_LOADONLY' flag set
!                   - is used for runtime loading from inside the
!                     'libNAME.so.V' file
!                   - is used for dynamic loading via
!                     'dlopen("libNAME.so.V(shr.o)", RTLD_MEMBER)'
!              * with the 'Import File' as archive member named 'shr.imp',
                 which
!                   - refers to 'libNAME.so.V(shr.o)' as the "SONAME", to
!                     be recorded in the 'Loader Section' of subsequent
                      binaries
!                   - indicates whether 'libNAME.so.V(shr.o)' is 32 or 64
                      bit
!                   - lists all the public symbols exported by
!                     'lib.so.V(shr.o)', eventually decorated with the
!                     ''weak' Keyword'
!                   - is necessary for shared linking against
!                     'lib.so.V(shr.o)'
!           A symbolic link using the 'libNAME.so' filename scheme is
            created:
!              * pointing to the 'libNAME.so.V' 'Shared Archive Library'
                 file
!              * to permit the 'ld Command' to find 'lib.so.V(shr.imp)'
!                via the '-lNAME' argument (requires 'Runtime Linking' to
                 be enabled)
!              * to permit dynamic loading of 'lib.so.V(shr.o)' without
                 the need to specify the version number via
!                'dlopen("libNAME.so(shr.o)", RTLD_MEMBER)'
  
       As long as static library creation is enabled, upon:
!      '--with-aix-soname=svr4'
!           A 'Static Archive Library' is created:
!              * using the 'libNAME.a' filename scheme
!              * with all the 'Static Object' files as archive members,
                 which
!                   - are used for static linking
  
!      While the aix-soname='svr4' option does not create 'Shared Object'
!      files as members of unversioned 'Archive Library' files any more,
!      package managers still are responsible to transfer 'Shared Object'
       files found as member of a previously installed unversioned
!      'Archive Library' file into the newly installed 'Archive Library'
       file with the same filename.
  
!      _WARNING:_ Creating 'Shared Object' files with 'Runtime Linking'
!      enabled may bloat the TOC, eventually leading to 'TOC overflow'
!      errors, requiring the use of either the '-Wl,-bbigtoc' linker flag
!      (seen to break with the 'GDB' debugger) or some of the TOC-related
       compiler flags, *Note RS/6000 and PowerPC Options: (gcc)RS/6000 and
       PowerPC Options.
  
!      '--with-aix-soname' is currently supported by 'libgcc_s' only, so
       this option is still experimental and not for normal use yet.
  
!      Default is the traditional behavior '--with-aix-soname='aix''.
  
! '--enable-languages=LANG1,LANG2,...'
       Specify that only a particular subset of compilers and their
       runtime libraries should be built.  For a list of valid values for
!      LANGN you can issue the following command in the 'gcc' directory of
       your GCC source tree:
            grep ^language= */config-lang.in
!      Currently, you can use any of the following: 'all', 'default',
!      'ada', 'c', 'c++', 'd', 'fortran', 'go', 'jit', 'lto', 'm2',
!      'objc', 'obj-c++'.  Building the Ada compiler has special
       requirements, see below.  If you do not pass this flag, or specify
!      the option 'default', then the default languages available in the
!      'gcc' sub-tree will be configured.  Ada, D, Go, Jit, Objective-C++
       and Modula-2 are not default languages.  LTO is not a default
!      language, but is built by default because '--enable-lto' is enabled
!      by default.  The other languages are default languages.  If 'all'
       is specified, then all available languages are built.  An exception
!      is 'jit' language, which requires '--enable-host-shared' to be
!      included with 'all'.
  
! '--enable-stage1-languages=LANG1,LANG2,...'
       Specify that a particular subset of compilers and their runtime
       libraries should be built with the system C compiler during stage 1
       of the bootstrap process, rather than only in later stages with the
       bootstrapped C compiler.  The list of valid values is the same as
!      for '--enable-languages', and the option 'all' will select all of
!      the languages enabled by '--enable-languages'.  This option is
       primarily useful for GCC development; for instance, when a
       development version of the compiler cannot bootstrap due to
       compiler bugs, or when one is debugging front ends other than the C
       front end.  When this option is used, one can then build the target
       libraries for the specified languages with the stage-1 compiler by
!      using 'make stage1-bubble all-target', or run the testsuite on the
!      stage-1 compiler for the specified languages using 'make
!      stage1-start check-gcc'.
  
! '--disable-libada'
       Specify that the run-time libraries and tools used by GNAT should
       not be built.  This can be useful for debugging, or for
       compatibility with previous Ada build procedures, when it was
!      required to explicitly do a 'make -C gcc gnatlib_and_tools'.
  
! '--disable-libgm2'
       Specify that the run-time libraries and tools used by Modula-2
       should not be built.  This can be useful for debugging.
  
! '--disable-libsanitizer'
       Specify that the run-time libraries for the various sanitizers
       should not be built.
  
! '--disable-libssp'
       Specify that the run-time libraries for stack smashing protection
       should not be built or linked against.  On many targets library
       support is provided by the C library instead.
  
! '--disable-libquadmath'
       Specify that the GCC quad-precision math library should not be
       built.  On some systems, the library is required to be linkable
       when building the Fortran front end, unless
!      '--disable-libquadmath-support' is used.
  
! '--disable-libquadmath-support'
!      Specify that the Fortran front end and 'libgfortran' do not add
!      support for 'libquadmath' on systems supporting it.
  
! '--disable-libgomp'
       Specify that the GNU Offloading and Multi Processing Runtime
       Library should not be built.
  
! '--disable-libvtv'
       Specify that the run-time libraries used by vtable verification
       should not be built.
  
! '--with-dwarf2'
       Specify that the compiler should use DWARF debugging information as
       the default; the exact DWARF version that is the default is
       target-specific.
  
! '--with-advance-toolchain=AT'
       On 64-bit PowerPC Linux systems, configure the compiler to use the
       header files, library files, and the dynamic linker from the
       Advance Toolchain release AT instead of the default versions that
--- 1628,1825 ----
       directory, which allows for the source to be in a readonly
       directory.
  
!      If you configure with ‘--enable-generated-files-in-srcdir’ then
       those generated files will go into the source directory.  This is
       mainly intended for generating release or prerelease tarballs of
       the GCC sources, since it is not a requirement that the users of
       source releases to have flex, Bison, or makeinfo.
  
! ‘--enable-version-specific-runtime-libs’
       Specify that runtime libraries should be installed in the compiler
!      specific subdirectory (‘LIBDIR/gcc’) rather than the usual places.
!      In addition, ‘libstdc++’'s include files will be installed into
!      ‘LIBDIR’ unless you overruled it by using
!      ‘--with-gxx-include-dir=DIRNAME’.  Using this option is
       particularly useful if you intend to use several versions of GCC in
!      parallel.  The default is ‘yes’ for ‘libada’, and ‘no’ for the
       remaining libraries.
  
! ‘--with-darwin-extra-rpath’
       This is provided to allow distributions to add a single additional
       runpath on Darwin / macOS systems.  This allows for cases where the
       installed GCC library directories are then symlinked to a common
       directory outside of the GCC installation.
  
! ‘--with-aix-soname=‘aix’, ‘svr4’ or ‘both’’
!      Traditional AIX shared library versioning (versioned ‘Shared
!      Object’ files as members of unversioned ‘Archive Library’ files
!      named ‘lib.a’) causes numerous headaches for package managers.
!      However, ‘Import Files’ as members of ‘Archive Library’ files allow
       for *filename-based versioning* of shared libraries as seen on
       Linux/SVR4, where this is called the "SONAME". But as they prevent
!      static linking, ‘Import Files’ may be used with ‘Runtime Linking’
!      only, where the linker does search for ‘libNAME.so’ before
!      ‘libNAME.a’ library filenames with the ‘-lNAME’ linker flag.
  
       For detailed information please refer to the AIX ld Command
       reference.
  
       As long as shared library creation is enabled, upon:
!      ‘--with-aix-soname=aix’
!      ‘--with-aix-soname=both’
!           A (traditional AIX) ‘Shared Archive Library’ file is created:
!              • using the ‘libNAME.a’ filename scheme
!              • with the ‘Shared Object’ file as archive member named
!                ‘libNAME.so.V’ (except for ‘libgcc_s’, where the ‘Shared
!                Object’ file is named ‘shr.o’ for backwards
                 compatibility), which
!                   − is used for runtime loading from inside the
!                     ‘libNAME.a’ file
!                   − is used for dynamic loading via
!                     ‘dlopen("libNAME.a(libNAME.so.V)", RTLD_MEMBER)’
!                   − is used for shared linking
!                   − is used for static linking, so no separate ‘Static
!                     Archive Library’ file is needed
!      ‘--with-aix-soname=both’
!      ‘--with-aix-soname=svr4’
!           A (second) ‘Shared Archive Library’ file is created:
!              • using the ‘libNAME.so.V’ filename scheme
!              • with the ‘Shared Object’ file as archive member named
!                ‘shr.o’, which
!                   − is created with the ‘-G linker flag’
!                   − has the ‘F_LOADONLY’ flag set
!                   − is used for runtime loading from inside the
!                     ‘libNAME.so.V’ file
!                   − is used for dynamic loading via
!                     ‘dlopen("libNAME.so.V(shr.o)", RTLD_MEMBER)’
!              • with the ‘Import File’ as archive member named ‘shr.imp’,
                 which
!                   − refers to ‘libNAME.so.V(shr.o)’ as the "SONAME", to
!                     be recorded in the ‘Loader Section’ of subsequent
                      binaries
!                   − indicates whether ‘libNAME.so.V(shr.o)’ is 32 or 64
                      bit
!                   − lists all the public symbols exported by
!                     ‘lib.so.V(shr.o)’, eventually decorated with the
!                     ‘‘weak’ Keyword’
!                   − is necessary for shared linking against
!                     ‘lib.so.V(shr.o)’
!           A symbolic link using the ‘libNAME.so’ filename scheme is
            created:
!              • pointing to the ‘libNAME.so.V’ ‘Shared Archive Library’
                 file
!              • to permit the ‘ld Command’ to find ‘lib.so.V(shr.imp)’
!                via the ‘-lNAME’ argument (requires ‘Runtime Linking’ to
                 be enabled)
!              • to permit dynamic loading of ‘lib.so.V(shr.o)’ without
                 the need to specify the version number via
!                ‘dlopen("libNAME.so(shr.o)", RTLD_MEMBER)’
  
       As long as static library creation is enabled, upon:
!      ‘--with-aix-soname=svr4’
!           A ‘Static Archive Library’ is created:
!              • using the ‘libNAME.a’ filename scheme
!              • with all the ‘Static Object’ files as archive members,
                 which
!                   − are used for static linking
  
!      While the aix-soname=‘svr4’ option does not create ‘Shared Object’
!      files as members of unversioned ‘Archive Library’ files any more,
!      package managers still are responsible to transfer ‘Shared Object’
       files found as member of a previously installed unversioned
!      ‘Archive Library’ file into the newly installed ‘Archive Library’
       file with the same filename.
  
!      _WARNING:_ Creating ‘Shared Object’ files with ‘Runtime Linking’
!      enabled may bloat the TOC, eventually leading to ‘TOC overflow’
!      errors, requiring the use of either the ‘-Wl,-bbigtoc’ linker flag
!      (seen to break with the ‘GDB’ debugger) or some of the TOC-related
       compiler flags, *Note RS/6000 and PowerPC Options: (gcc)RS/6000 and
       PowerPC Options.
  
!      ‘--with-aix-soname’ is currently supported by ‘libgcc_s’ only, so
       this option is still experimental and not for normal use yet.
  
!      Default is the traditional behavior ‘--with-aix-soname=‘aix’’.
  
! ‘--enable-languages=LANG1,LANG2,...’
       Specify that only a particular subset of compilers and their
       runtime libraries should be built.  For a list of valid values for
!      LANGN you can issue the following command in the ‘gcc’ directory of
       your GCC source tree:
            grep ^language= */config-lang.in
!      Currently, you can use any of the following: ‘all’, ‘default’,
!      ‘ada’, ‘c’, ‘c++’, ‘d’, ‘fortran’, ‘go’, ‘jit’, ‘lto’, ‘m2’,
!      ‘objc’, ‘obj-c++’.  Building the Ada compiler has special
       requirements, see below.  If you do not pass this flag, or specify
!      the option ‘default’, then the default languages available in the
!      ‘gcc’ sub-tree will be configured.  Ada, D, Go, Jit, Objective-C++
       and Modula-2 are not default languages.  LTO is not a default
!      language, but is built by default because ‘--enable-lto’ is enabled
!      by default.  The other languages are default languages.  If ‘all’
       is specified, then all available languages are built.  An exception
!      is ‘jit’ language, which requires ‘--enable-host-shared’ to be
!      included with ‘all’.
  
! ‘--enable-stage1-languages=LANG1,LANG2,...’
       Specify that a particular subset of compilers and their runtime
       libraries should be built with the system C compiler during stage 1
       of the bootstrap process, rather than only in later stages with the
       bootstrapped C compiler.  The list of valid values is the same as
!      for ‘--enable-languages’, and the option ‘all’ will select all of
!      the languages enabled by ‘--enable-languages’.  This option is
       primarily useful for GCC development; for instance, when a
       development version of the compiler cannot bootstrap due to
       compiler bugs, or when one is debugging front ends other than the C
       front end.  When this option is used, one can then build the target
       libraries for the specified languages with the stage-1 compiler by
!      using ‘make stage1-bubble all-target’, or run the testsuite on the
!      stage-1 compiler for the specified languages using ‘make
!      stage1-start check-gcc’.
  
! ‘--disable-libada’
       Specify that the run-time libraries and tools used by GNAT should
       not be built.  This can be useful for debugging, or for
       compatibility with previous Ada build procedures, when it was
!      required to explicitly do a ‘make -C gcc gnatlib_and_tools’.
  
! ‘--disable-libgm2’
       Specify that the run-time libraries and tools used by Modula-2
       should not be built.  This can be useful for debugging.
  
! ‘--disable-libsanitizer’
       Specify that the run-time libraries for the various sanitizers
       should not be built.
  
! ‘--disable-libssp’
       Specify that the run-time libraries for stack smashing protection
       should not be built or linked against.  On many targets library
       support is provided by the C library instead.
  
! ‘--disable-libquadmath’
       Specify that the GCC quad-precision math library should not be
       built.  On some systems, the library is required to be linkable
       when building the Fortran front end, unless
!      ‘--disable-libquadmath-support’ is used.
  
! ‘--disable-libquadmath-support’
!      Specify that the Fortran front end and ‘libgfortran’ do not add
!      support for ‘libquadmath’ on systems supporting it.
  
! ‘--disable-libgomp’
       Specify that the GNU Offloading and Multi Processing Runtime
       Library should not be built.
  
! ‘--disable-libvtv’
       Specify that the run-time libraries used by vtable verification
       should not be built.
  
! ‘--with-dwarf2’
       Specify that the compiler should use DWARF debugging information as
       the default; the exact DWARF version that is the default is
       target-specific.
  
! ‘--with-advance-toolchain=AT’
       On 64-bit PowerPC Linux systems, configure the compiler to use the
       header files, library files, and the dynamic linker from the
       Advance Toolchain release AT instead of the default versions that
*************** option.
*** 1827,1834 ****
       intended for the developers of GCC, and it is not intended for
       general use.
  
! '--enable-targets=all'
! '--enable-targets=TARGET_LIST'
       Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers.
       These are compilers that are able to generate either 64-bit or
       32-bit code.  Typically, the corresponding 32-bit target, e.g.
--- 1827,1834 ----
       intended for the developers of GCC, and it is not intended for
       general use.
  
! ‘--enable-targets=all’
! ‘--enable-targets=TARGET_LIST’
       Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers.
       These are compilers that are able to generate either 64-bit or
       32-bit code.  Typically, the corresponding 32-bit target, e.g.
*************** option.
*** 1841,1906 ****
       affects sparc-linux, powerpc-linux, x86-linux, mips-linux and
       s390-linux.
  
! '--enable-default-pie'
!      Turn on '-fPIE' and '-pie' by default.
  
! '--enable-secureplt'
!      This option enables '-msecure-plt' by default for powerpc-linux.
       *Note RS/6000 and PowerPC Options: (gcc)RS/6000 and PowerPC
       Options,
  
! '--enable-default-ssp'
!      Turn on '-fstack-protector-strong' by default.
  
! '--enable-cld'
!      This option enables '-mcld' by default for 32-bit x86 targets.
       *Note i386 and x86-64 Options: (gcc)i386 and x86-64 Options,
  
! '--enable-large-address-aware'
!      The '--enable-large-address-aware' option arranges for MinGW
!      executables to be linked using the '--large-address-aware' option,
       that enables the use of more than 2GB of memory.  If GCC is
       configured with this option, its effects can be reversed by passing
!      the '-Wl,--disable-large-address-aware' option to the so-configured
       compiler driver.
  
! '--enable-win32-registry'
! '--enable-win32-registry=KEY'
! '--disable-win32-registry'
!      The '--enable-win32-registry' option enables Microsoft
       Windows-hosted GCC to look up installations paths in the registry
       using the following key:
  
            HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\KEY
  
       KEY defaults to GCC version number, and can be overridden by the
!      '--enable-win32-registry=KEY' option.  Vendors and distributors who
       use custom installers are encouraged to provide a different key,
       perhaps one comprised of vendor name and GCC version number, to
       avoid conflict with existing installations.  This feature is
       enabled by default, and can be disabled by
!      '--disable-win32-registry' option.  This option has no effect on
       the other hosts.
  
! '--nfp'
       Specify that the machine does not have a floating point unit.  This
!      option only applies to 'm68k-sun-sunosN'.  On any other system,
!      '--nfp' has no effect.
  
! '--enable-werror'
! '--disable-werror'
! '--enable-werror=yes'
! '--enable-werror=no'
       When you specify this option, it controls whether certain files in
!      the compiler are built with '-Werror' in bootstrap stage2 and
!      later.  If you don't specify it, '-Werror' is turned on for the
       main development trunk.  However it defaults to off for release
       branches and final releases.  The specific files which get
!      '-Werror' are controlled by the Makefiles.
  
! '--enable-checking'
! '--disable-checking'
! '--enable-checking=LIST'
       This option controls performing internal consistency checks in the
       compiler.  It does not change the generated code, but adds error
       checking of the requested complexity.  This slows down the compiler
--- 1841,1906 ----
       affects sparc-linux, powerpc-linux, x86-linux, mips-linux and
       s390-linux.
  
! ‘--enable-default-pie’
!      Turn on ‘-fPIE’ and ‘-pie’ by default.
  
! ‘--enable-secureplt’
!      This option enables ‘-msecure-plt’ by default for powerpc-linux.
       *Note RS/6000 and PowerPC Options: (gcc)RS/6000 and PowerPC
       Options,
  
! ‘--enable-default-ssp’
!      Turn on ‘-fstack-protector-strong’ by default.
  
! ‘--enable-cld’
!      This option enables ‘-mcld’ by default for 32-bit x86 targets.
       *Note i386 and x86-64 Options: (gcc)i386 and x86-64 Options,
  
! ‘--enable-large-address-aware’
!      The ‘--enable-large-address-aware’ option arranges for MinGW
!      executables to be linked using the ‘--large-address-aware’ option,
       that enables the use of more than 2GB of memory.  If GCC is
       configured with this option, its effects can be reversed by passing
!      the ‘-Wl,--disable-large-address-aware’ option to the so-configured
       compiler driver.
  
! ‘--enable-win32-registry’
! ‘--enable-win32-registry=KEY’
! ‘--disable-win32-registry’
!      The ‘--enable-win32-registry’ option enables Microsoft
       Windows-hosted GCC to look up installations paths in the registry
       using the following key:
  
            HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\KEY
  
       KEY defaults to GCC version number, and can be overridden by the
!      ‘--enable-win32-registry=KEY’ option.  Vendors and distributors who
       use custom installers are encouraged to provide a different key,
       perhaps one comprised of vendor name and GCC version number, to
       avoid conflict with existing installations.  This feature is
       enabled by default, and can be disabled by
!      ‘--disable-win32-registry’ option.  This option has no effect on
       the other hosts.
  
! ‘--nfp’
       Specify that the machine does not have a floating point unit.  This
!      option only applies to ‘m68k-sun-sunosN’.  On any other system,
!      ‘--nfp’ has no effect.
  
! ‘--enable-werror’
! ‘--disable-werror’
! ‘--enable-werror=yes’
! ‘--enable-werror=no’
       When you specify this option, it controls whether certain files in
!      the compiler are built with ‘-Werror’ in bootstrap stage2 and
!      later.  If you don't specify it, ‘-Werror’ is turned on for the
       main development trunk.  However it defaults to off for release
       branches and final releases.  The specific files which get
!      ‘-Werror’ are controlled by the Makefiles.
  
! ‘--enable-checking’
! ‘--disable-checking’
! ‘--enable-checking=LIST’
       This option controls performing internal consistency checks in the
       compiler.  It does not change the generated code, but adds error
       checking of the requested complexity.  This slows down the compiler
*************** option.
*** 1909,2002 ****
  
       When the option is not specified, the active set of checks depends
       on context.  Namely, bootstrap stage 1 defaults to
!      '--enable-checking=yes', builds from release branches or release
!      archives default to '--enable-checking=release', and otherwise
!      '--enable-checking=yes,extra' is used.  When the option is
       specified without a LIST, the result is the same as
!      '--enable-checking=yes'.  Likewise, '--disable-checking' is
!      equivalent to '--enable-checking=no'.
  
!      The categories of checks available in LIST are 'yes' (most common
!      checks 'assert,misc,gc,gimple,rtlflag,runtime,tree,types'), 'no'
!      (no checks at all), 'all' (all but 'valgrind'), 'release' (cheapest
!      checks 'assert,runtime') or 'none' (same as 'no').  'release'
!      checks are always on and to disable them '--disable-checking' or
!      '--enable-checking=no[,<other checks>]' must be explicitly
       requested.  Disabling assertions makes the compiler and runtime
       slightly faster but increases the risk of undetected internal
       errors causing wrong code to be generated.
  
!      Individual checks can be enabled with these flags: 'assert', 'df',
!      'extra', 'fold', 'gc', 'gcac', 'gimple', 'misc', 'rtl', 'rtlflag',
!      'runtime', 'tree', 'types' and 'valgrind'.  'extra' extends 'misc'
       checking with extra checks that might affect code generation and
       should therefore not differ between stage1 and later stages in
       bootstrap.
  
!      The 'valgrind' check requires the external 'valgrind' simulator,
!      available from <https://valgrind.org>.  The 'rtl' checks are
!      expensive and the 'df', 'gcac' and 'valgrind' checks are very
       expensive.
  
! '--disable-stage1-checking'
! '--enable-stage1-checking'
! '--enable-stage1-checking=LIST'
       This option affects only bootstrap build.  If no
!      '--enable-checking' option is specified the stage1 compiler is
!      built with 'yes' checking enabled, otherwise the stage1 checking
!      flags are the same as specified by '--enable-checking'.  To build
       the stage1 compiler with different checking options use
!      '--enable-stage1-checking'.  The list of checking options is the
!      same as for '--enable-checking'.  If your system is too slow or too
       small to bootstrap a released compiler with checking for stage1
!      enabled, you can use '--disable-stage1-checking' to disable
       checking for the stage1 compiler.
  
! '--enable-coverage'
! '--enable-coverage=LEVEL'
       With this option, the compiler is built to collect self coverage
       information, every time it is run.  This is for internal
       development purposes, and only works when the compiler is being
       built with gcc.  The LEVEL argument controls whether the compiler
!      is built optimized or not, values are 'opt' and 'noopt'.  For
       coverage analysis you want to disable optimization, for performance
       analysis you want to enable optimization.  When coverage is
       enabled, the default level is without optimization.
  
! '--enable-gather-detailed-mem-stats'
       When this option is specified more detailed information on memory
       allocation is gathered.  This information is printed when using
!      '-fmem-report'.
  
! '--enable-valgrind-annotations'
       Mark selected memory related operations in the compiler when run
       under valgrind to suppress false positives.
  
! '--enable-nls'
! '--disable-nls'
!      The '--enable-nls' option enables Native Language Support (NLS),
       which lets GCC output diagnostics in languages other than American
       English.  Native Language Support is enabled by default if not
!      doing a canadian cross build.  The '--disable-nls' option disables
       NLS.
  
       Note that this functionality requires either libintl (provided by
       GNU gettext) or C standard library that contains support for
       gettext (such as the GNU C Library).  *Note -with-included-gettext:
!      with-included-gettext.  for more information on the conditions
       required to get gettext support.
  
! '--with-libintl-prefix=DIR'
! '--without-libintl-prefix'
!      Searches for libintl in 'DIR/include' and 'DIR/lib', or disables
       manual searching for it, letting the linker handle it.
  
! '--with-libintl-type=TYPE'
       Specifies the type of library to search for when looking for
!      libintl.  TYPE can be one of 'auto', 'static' or 'shared'.
  
! '--with-included-gettext'
!      Only available if 'gettext' is present in the source tree.
  
       Forces the gettext tree to be configured to build and use a new
       static libintl, overriding the system libintl.  Results in GCC
--- 1909,2002 ----
  
       When the option is not specified, the active set of checks depends
       on context.  Namely, bootstrap stage 1 defaults to
!      ‘--enable-checking=yes’, builds from release branches or release
!      archives default to ‘--enable-checking=release’, and otherwise
!      ‘--enable-checking=yes,extra’ is used.  When the option is
       specified without a LIST, the result is the same as
!      ‘--enable-checking=yes’.  Likewise, ‘--disable-checking’ is
!      equivalent to ‘--enable-checking=no’.
  
!      The categories of checks available in LIST are ‘yes’ (most common
!      checks ‘assert,misc,gc,gimple,rtlflag,runtime,tree,types’), ‘no’
!      (no checks at all), ‘all’ (all but ‘valgrind’), ‘release’ (cheapest
!      checks ‘assert,runtime’) or ‘none’ (same as ‘no’).  ‘release’
!      checks are always on and to disable them ‘--disable-checking’ or
!      ‘--enable-checking=no[,<other checks>]’ must be explicitly
       requested.  Disabling assertions makes the compiler and runtime
       slightly faster but increases the risk of undetected internal
       errors causing wrong code to be generated.
  
!      Individual checks can be enabled with these flags: ‘assert’, ‘df’,
!      ‘extra’, ‘fold’, ‘gc’, ‘gcac’, ‘gimple’, ‘misc’, ‘rtl’, ‘rtlflag’,
!      ‘runtime’, ‘tree’, ‘types’ and ‘valgrind’.  ‘extra’ extends ‘misc’
       checking with extra checks that might affect code generation and
       should therefore not differ between stage1 and later stages in
       bootstrap.
  
!      The ‘valgrind’ check requires the external ‘valgrind’ simulator,
!      available from <https://valgrind.org>.  The ‘rtl’ checks are
!      expensive and the ‘df’, ‘gcac’ and ‘valgrind’ checks are very
       expensive.
  
! ‘--disable-stage1-checking’
! ‘--enable-stage1-checking’
! ‘--enable-stage1-checking=LIST’
       This option affects only bootstrap build.  If no
!      ‘--enable-checking’ option is specified the stage1 compiler is
!      built with ‘yes’ checking enabled, otherwise the stage1 checking
!      flags are the same as specified by ‘--enable-checking’.  To build
       the stage1 compiler with different checking options use
!      ‘--enable-stage1-checking’.  The list of checking options is the
!      same as for ‘--enable-checking’.  If your system is too slow or too
       small to bootstrap a released compiler with checking for stage1
!      enabled, you can use ‘--disable-stage1-checking’ to disable
       checking for the stage1 compiler.
  
! ‘--enable-coverage’
! ‘--enable-coverage=LEVEL’
       With this option, the compiler is built to collect self coverage
       information, every time it is run.  This is for internal
       development purposes, and only works when the compiler is being
       built with gcc.  The LEVEL argument controls whether the compiler
!      is built optimized or not, values are ‘opt’ and ‘noopt’.  For
       coverage analysis you want to disable optimization, for performance
       analysis you want to enable optimization.  When coverage is
       enabled, the default level is without optimization.
  
! ‘--enable-gather-detailed-mem-stats’
       When this option is specified more detailed information on memory
       allocation is gathered.  This information is printed when using
!      ‘-fmem-report’.
  
! ‘--enable-valgrind-annotations’
       Mark selected memory related operations in the compiler when run
       under valgrind to suppress false positives.
  
! ‘--enable-nls’
! ‘--disable-nls’
!      The ‘--enable-nls’ option enables Native Language Support (NLS),
       which lets GCC output diagnostics in languages other than American
       English.  Native Language Support is enabled by default if not
!      doing a canadian cross build.  The ‘--disable-nls’ option disables
       NLS.
  
       Note that this functionality requires either libintl (provided by
       GNU gettext) or C standard library that contains support for
       gettext (such as the GNU C Library).  *Note -with-included-gettext:
!      with-included-gettext. for more information on the conditions
       required to get gettext support.
  
! ‘--with-libintl-prefix=DIR’
! ‘--without-libintl-prefix’
!      Searches for libintl in ‘DIR/include’ and ‘DIR/lib’, or disables
       manual searching for it, letting the linker handle it.
  
! ‘--with-libintl-type=TYPE’
       Specifies the type of library to search for when looking for
!      libintl.  TYPE can be one of ‘auto’, ‘static’ or ‘shared’.
  
! ‘--with-included-gettext’
!      Only available if ‘gettext’ is present in the source tree.
  
       Forces the gettext tree to be configured to build and use a new
       static libintl, overriding the system libintl.  Results in GCC
*************** option.
*** 2007,2013 ****
       where to get gettext routines from.  The following table is a
       summary of the possible options:
  
!      GNU       libintl   'gettext' '--with-included-gettext'Effects on localization
       gettext   installed present                  
       present   on the    in libc
       in        system
--- 2007,2013 ----
       where to get gettext routines from.  The following table is a
       summary of the possible options:
  
!      GNU       libintl   ‘gettext’ ‘--with-included-gettext’Effects on localization
       gettext   installed present                  
       present   on the    in libc
       in        system
*************** option.
*** 2027,2044 ****
       Yes       Yes       Yes       No             Localized, libintl
       Yes       Yes       Yes       Yes            Localized, new, static libintl
  
! '--with-catgets'
!      If NLS is enabled, and if the host lacks 'gettext' but has the
!      inferior 'catgets' interface, the GCC build procedure normally
!      ignores 'catgets' and instead uses GCC's copy of the GNU 'gettext'
!      library.  The '--with-catgets' option causes the build procedure to
!      use the host's 'catgets' in this situation.
  
! '--with-libiconv-prefix=DIR'
!      Search for libiconv header files in 'DIR/include' and libiconv
!      library files in 'DIR/lib'.
  
! '--enable-obsolete'
       Enable configuration for an obsoleted system.  If you attempt to
       configure GCC for a system (build, host, or target) which has been
       obsoleted, and you do not specify this flag, configure will halt
--- 2027,2044 ----
       Yes       Yes       Yes       No             Localized, libintl
       Yes       Yes       Yes       Yes            Localized, new, static libintl
  
! ‘--with-catgets’
!      If NLS is enabled, and if the host lacks ‘gettext’ but has the
!      inferior ‘catgets’ interface, the GCC build procedure normally
!      ignores ‘catgets’ and instead uses GCC's copy of the GNU ‘gettext’
!      library.  The ‘--with-catgets’ option causes the build procedure to
!      use the host's ‘catgets’ in this situation.
  
! ‘--with-libiconv-prefix=DIR’
!      Search for libiconv header files in ‘DIR/include’ and libiconv
!      library files in ‘DIR/lib’.
  
! ‘--enable-obsolete’
       Enable configuration for an obsoleted system.  If you attempt to
       configure GCC for a system (build, host, or target) which has been
       obsoleted, and you do not specify this flag, configure will halt
*************** option.
*** 2048,2148 ****
       GCC is removed entirely in the next major release, unless someone
       steps forward to maintain the port.
  
! '--enable-decimal-float'
! '--enable-decimal-float=yes'
! '--enable-decimal-float=no'
! '--enable-decimal-float=bid'
! '--enable-decimal-float=dpd'
! '--disable-decimal-float'
       Enable (or disable) support for the C decimal floating point
       extension that is in the IEEE 754-2008 standard.  This is enabled
       by default only on AArch64, PowerPC, i386, and x86_64 GNU/Linux
       systems.  Other systems may also support it, but require the user
       to specifically enable it.  You can optionally control which
!      decimal floating point format is used (either 'bid' or 'dpd').  The
!      'bid' (binary integer decimal) format is default on AArch64, i386
!      and x86_64 systems, and the 'dpd' (densely packed decimal) format
       is default on PowerPC systems.
  
! '--enable-fixed-point'
! '--disable-fixed-point'
       Enable (or disable) support for C fixed-point arithmetic.  This
       option is enabled by default for some targets (such as MIPS) which
       have hardware-support for fixed-point operations.  On other
       targets, you may enable this option manually.
  
! '--with-long-double-128'
!      Specify if 'long double' type should be 128-bit by default on
       selected GNU/Linux architectures.  If using
!      '--without-long-double-128', 'long double' will be by default
!      64-bit, the same as 'double' type.  When neither of these configure
!      options are used, the default will be 128-bit 'long double' when
!      built against GNU C Library 2.4 and later, 64-bit 'long double'
       otherwise.
  
! '--with-long-double-format=ibm'
! '--with-long-double-format=ieee'
!      Specify whether 'long double' uses the IBM extended double format
       or the IEEE 128-bit floating point format on PowerPC Linux systems.
       This configuration switch will only work on little endian PowerPC
       Linux systems and on big endian 64-bit systems where the default
!      cpu is at least power7 (i.e. '--with-cpu=power7',
!      '--with-cpu=power8', or '--with-cpu=power9' is used).
  
!      If you use the '--with-long-double-64' configuration option, the
!      '--with-long-double-format=ibm' and
!      '--with-long-double-format=ieee' options are ignored.
  
!      The default 'long double' format is to use IBM extended double.
       Until all of the libraries are converted to use IEEE 128-bit
       floating point, it is not recommended to use
!      '--with-long-double-format=ieee'.
  
! '--enable-fdpic'
       On SH Linux systems, generate ELF FDPIC code.
  
! '--with-gmp=PATHNAME'
! '--with-gmp-include=PATHNAME'
! '--with-gmp-lib=PATHNAME'
! '--with-mpfr=PATHNAME'
! '--with-mpfr-include=PATHNAME'
! '--with-mpfr-lib=PATHNAME'
! '--with-mpc=PATHNAME'
! '--with-mpc-include=PATHNAME'
! '--with-mpc-lib=PATHNAME'
       If you want to build GCC but do not have the GMP library, the MPFR
       library and/or the MPC library installed in a standard location and
       do not have their sources present in the GCC source tree then you
       can explicitly specify the directory where they are installed
!      ('--with-gmp=GMPINSTALLDIR', '--with-mpfr=MPFRINSTALLDIR',
!      '--with-mpc=MPCINSTALLDIR').  The '--with-gmp=GMPINSTALLDIR' option
!      is shorthand for '--with-gmp-lib=GMPINSTALLDIR/lib' and
!      '--with-gmp-include=GMPINSTALLDIR/include'.  Likewise the
!      '--with-mpfr=MPFRINSTALLDIR' option is shorthand for
!      '--with-mpfr-lib=MPFRINSTALLDIR/lib' and
!      '--with-mpfr-include=MPFRINSTALLDIR/include', also the
!      '--with-mpc=MPCINSTALLDIR' option is shorthand for
!      '--with-mpc-lib=MPCINSTALLDIR/lib' and
!      '--with-mpc-include=MPCINSTALLDIR/include'.  If these shorthand
       assumptions are not correct, you can use the explicit include and
       lib options directly.  You might also need to ensure the shared
       libraries can be found by the dynamic linker when building and
       using GCC, for example by setting the runtime shared library path
!      variable ('LD_LIBRARY_PATH' on GNU/Linux and Solaris systems).
  
       These flags are applicable to the host platform only.  When
       building a cross compiler, they will not be used to configure
       target libraries.
  
! '--with-isl=PATHNAME'
! '--with-isl-include=PATHNAME'
! '--with-isl-lib=PATHNAME'
       If you do not have the isl library installed in a standard location
       and you want to build GCC, you can explicitly specify the directory
!      where it is installed ('--with-isl=ISLINSTALLDIR').  The
!      '--with-isl=ISLINSTALLDIR' option is shorthand for
!      '--with-isl-lib=ISLINSTALLDIR/lib' and
!      '--with-isl-include=ISLINSTALLDIR/include'.  If this shorthand
       assumption is not correct, you can use the explicit include and lib
       options directly.
  
--- 2048,2148 ----
       GCC is removed entirely in the next major release, unless someone
       steps forward to maintain the port.
  
! ‘--enable-decimal-float’
! ‘--enable-decimal-float=yes’
! ‘--enable-decimal-float=no’
! ‘--enable-decimal-float=bid’
! ‘--enable-decimal-float=dpd’
! ‘--disable-decimal-float’
       Enable (or disable) support for the C decimal floating point
       extension that is in the IEEE 754-2008 standard.  This is enabled
       by default only on AArch64, PowerPC, i386, and x86_64 GNU/Linux
       systems.  Other systems may also support it, but require the user
       to specifically enable it.  You can optionally control which
!      decimal floating point format is used (either ‘bid’ or ‘dpd’).  The
!      ‘bid’ (binary integer decimal) format is default on AArch64, i386
!      and x86_64 systems, and the ‘dpd’ (densely packed decimal) format
       is default on PowerPC systems.
  
! ‘--enable-fixed-point’
! ‘--disable-fixed-point’
       Enable (or disable) support for C fixed-point arithmetic.  This
       option is enabled by default for some targets (such as MIPS) which
       have hardware-support for fixed-point operations.  On other
       targets, you may enable this option manually.
  
! ‘--with-long-double-128’
!      Specify if ‘long double’ type should be 128-bit by default on
       selected GNU/Linux architectures.  If using
!      ‘--without-long-double-128’, ‘long double’ will be by default
!      64-bit, the same as ‘double’ type.  When neither of these configure
!      options are used, the default will be 128-bit ‘long double’ when
!      built against GNU C Library 2.4 and later, 64-bit ‘long double’
       otherwise.
  
! ‘--with-long-double-format=ibm’
! ‘--with-long-double-format=ieee’
!      Specify whether ‘long double’ uses the IBM extended double format
       or the IEEE 128-bit floating point format on PowerPC Linux systems.
       This configuration switch will only work on little endian PowerPC
       Linux systems and on big endian 64-bit systems where the default
!      cpu is at least power7 (i.e. ‘--with-cpu=power7’,
!      ‘--with-cpu=power8’, or ‘--with-cpu=power9’ is used).
  
!      If you use the ‘--with-long-double-64’ configuration option, the
!      ‘--with-long-double-format=ibm’ and
!      ‘--with-long-double-format=ieee’ options are ignored.
  
!      The default ‘long double’ format is to use IBM extended double.
       Until all of the libraries are converted to use IEEE 128-bit
       floating point, it is not recommended to use
!      ‘--with-long-double-format=ieee’.
  
! ‘--enable-fdpic’
       On SH Linux systems, generate ELF FDPIC code.
  
! ‘--with-gmp=PATHNAME’
! ‘--with-gmp-include=PATHNAME’
! ‘--with-gmp-lib=PATHNAME’
! ‘--with-mpfr=PATHNAME’
! ‘--with-mpfr-include=PATHNAME’
! ‘--with-mpfr-lib=PATHNAME’
! ‘--with-mpc=PATHNAME’
! ‘--with-mpc-include=PATHNAME’
! ‘--with-mpc-lib=PATHNAME’
       If you want to build GCC but do not have the GMP library, the MPFR
       library and/or the MPC library installed in a standard location and
       do not have their sources present in the GCC source tree then you
       can explicitly specify the directory where they are installed
!      (‘--with-gmp=GMPINSTALLDIR’, ‘--with-mpfr=MPFRINSTALLDIR’,
!      ‘--with-mpc=MPCINSTALLDIR’).  The ‘--with-gmp=GMPINSTALLDIR’ option
!      is shorthand for ‘--with-gmp-lib=GMPINSTALLDIR/lib’ and
!      ‘--with-gmp-include=GMPINSTALLDIR/include’.  Likewise the
!      ‘--with-mpfr=MPFRINSTALLDIR’ option is shorthand for
!      ‘--with-mpfr-lib=MPFRINSTALLDIR/lib’ and
!      ‘--with-mpfr-include=MPFRINSTALLDIR/include’, also the
!      ‘--with-mpc=MPCINSTALLDIR’ option is shorthand for
!      ‘--with-mpc-lib=MPCINSTALLDIR/lib’ and
!      ‘--with-mpc-include=MPCINSTALLDIR/include’.  If these shorthand
       assumptions are not correct, you can use the explicit include and
       lib options directly.  You might also need to ensure the shared
       libraries can be found by the dynamic linker when building and
       using GCC, for example by setting the runtime shared library path
!      variable (‘LD_LIBRARY_PATH’ on GNU/Linux and Solaris systems).
  
       These flags are applicable to the host platform only.  When
       building a cross compiler, they will not be used to configure
       target libraries.
  
! ‘--with-isl=PATHNAME’
! ‘--with-isl-include=PATHNAME’
! ‘--with-isl-lib=PATHNAME’
       If you do not have the isl library installed in a standard location
       and you want to build GCC, you can explicitly specify the directory
!      where it is installed (‘--with-isl=ISLINSTALLDIR’).  The
!      ‘--with-isl=ISLINSTALLDIR’ option is shorthand for
!      ‘--with-isl-lib=ISLINSTALLDIR/lib’ and
!      ‘--with-isl-include=ISLINSTALLDIR/include’.  If this shorthand
       assumption is not correct, you can use the explicit include and lib
       options directly.
  
*************** option.
*** 2150,2233 ****
       building a cross compiler, they will not be used to configure
       target libraries.
  
! '--with-stage1-ldflags=FLAGS'
       This option may be used to set linker flags to be used when linking
       stage 1 of GCC. These are also used when linking GCC if configured
!      with '--disable-bootstrap'.  If '--with-stage1-libs' is not set to
!      a value, then the default is '-static-libstdc++ -static-libgcc', if
       supported.
  
! '--with-stage1-libs=LIBS'
       This option may be used to set libraries to be used when linking
       stage 1 of GCC. These are also used when linking GCC if configured
!      with '--disable-bootstrap'.
  
! '--with-boot-ldflags=FLAGS'
       This option may be used to set linker flags to be used when linking
       stage 2 and later when bootstrapping GCC. If -with-boot-libs is not
!      is set to a value, then the default is '-static-libstdc++
!      -static-libgcc'.
  
! '--with-boot-libs=LIBS'
       This option may be used to set libraries to be used when linking
       stage 2 and later when bootstrapping GCC.
  
! '--with-debug-prefix-map=MAP'
!      Convert source directory names using '-fdebug-prefix-map' when
!      building runtime libraries.  'MAP' is a space-separated list of
!      maps of the form 'OLD=NEW'.
  
! '--enable-linker-build-id'
!      Tells GCC to pass '--build-id' option to the linker for all final
!      links (links performed without the '-r' or '--relocatable' option),
       if the linker supports it.  If you specify
!      '--enable-linker-build-id', but your linker does not support
!      '--build-id' option, a warning is issued and the
!      '--enable-linker-build-id' option is ignored.  The default is off.
  
! '--with-linker-hash-style=CHOICE'
!      Tells GCC to pass '--hash-style=CHOICE' option to the linker for
!      all final links.  CHOICE can be one of 'sysv', 'gnu', and 'both'
!      where 'sysv' is the default.
  
! '--enable-gnu-unique-object'
! '--disable-gnu-unique-object'
       Tells GCC to use the gnu_unique_object relocation for C++ template
       static data members and inline function local statics.  Enabled by
       default for a toolchain with an assembler that accepts it and GLIBC
       2.11 or above, otherwise disabled.
  
! '--with-diagnostics-color=CHOICE'
!      Tells GCC to use CHOICE as the default for '-fdiagnostics-color='
       option (if not used explicitly on the command line).  CHOICE can be
!      one of 'never', 'auto', 'always', and 'auto-if-env' where 'auto' is
!      the default.  'auto-if-env' makes '-fdiagnostics-color=auto' the
!      default if 'GCC_COLORS' is present and non-empty in the environment
!      of the compiler, and '-fdiagnostics-color=never' otherwise.
  
! '--with-diagnostics-urls=CHOICE'
!      Tells GCC to use CHOICE as the default for '-fdiagnostics-urls='
       option (if not used explicitly on the command line).  CHOICE can be
!      one of 'never', 'auto', 'always', and 'auto-if-env' where 'auto' is
!      the default.  'auto-if-env' makes '-fdiagnostics-urls=auto' the
!      default if 'GCC_URLS' or 'TERM_URLS' is present and non-empty in
!      the environment of the compiler, and '-fdiagnostics-urls=never'
       otherwise.
  
! '--enable-lto'
! '--disable-lto'
       Enable support for link-time optimization (LTO). This is enabled by
!      default, and may be disabled using '--disable-lto'.
  
! '--enable-linker-plugin-configure-flags=FLAGS'
! '--enable-linker-plugin-flags=FLAGS'
       By default, linker plugins (such as the LTO plugin) are built for
       the host system architecture.  For the case that the linker has a
       different (but run-time compatible) architecture, these flags can
       be specified to build plugins that are compatible to the linker.
       For example, if you are building GCC for a 64-bit x86_64
!      ('x86_64-pc-linux-gnu') host system, but have a 32-bit x86
!      GNU/Linux ('i686-pc-linux-gnu') linker executable (which is
       executable on the former system), you can configure GCC as follows
       for getting compatible linker plugins:
  
--- 2150,2233 ----
       building a cross compiler, they will not be used to configure
       target libraries.
  
! ‘--with-stage1-ldflags=FLAGS’
       This option may be used to set linker flags to be used when linking
       stage 1 of GCC. These are also used when linking GCC if configured
!      with ‘--disable-bootstrap’.  If ‘--with-stage1-libs’ is not set to
!      a value, then the default is ‘-static-libstdc++ -static-libgcc’, if
       supported.
  
! ‘--with-stage1-libs=LIBS’
       This option may be used to set libraries to be used when linking
       stage 1 of GCC. These are also used when linking GCC if configured
!      with ‘--disable-bootstrap’.
  
! ‘--with-boot-ldflags=FLAGS’
       This option may be used to set linker flags to be used when linking
       stage 2 and later when bootstrapping GCC. If -with-boot-libs is not
!      is set to a value, then the default is ‘-static-libstdc++
!      -static-libgcc’.
  
! ‘--with-boot-libs=LIBS’
       This option may be used to set libraries to be used when linking
       stage 2 and later when bootstrapping GCC.
  
! ‘--with-debug-prefix-map=MAP’
!      Convert source directory names using ‘-fdebug-prefix-map’ when
!      building runtime libraries.  ‘MAP’ is a space-separated list of
!      maps of the form ‘OLD=NEW’.
  
! ‘--enable-linker-build-id’
!      Tells GCC to pass ‘--build-id’ option to the linker for all final
!      links (links performed without the ‘-r’ or ‘--relocatable’ option),
       if the linker supports it.  If you specify
!      ‘--enable-linker-build-id’, but your linker does not support
!      ‘--build-id’ option, a warning is issued and the
!      ‘--enable-linker-build-id’ option is ignored.  The default is off.
  
! ‘--with-linker-hash-style=CHOICE’
!      Tells GCC to pass ‘--hash-style=CHOICE’ option to the linker for
!      all final links.  CHOICE can be one of ‘sysv’, ‘gnu’, and ‘both’
!      where ‘sysv’ is the default.
  
! ‘--enable-gnu-unique-object’
! ‘--disable-gnu-unique-object’
       Tells GCC to use the gnu_unique_object relocation for C++ template
       static data members and inline function local statics.  Enabled by
       default for a toolchain with an assembler that accepts it and GLIBC
       2.11 or above, otherwise disabled.
  
! ‘--with-diagnostics-color=CHOICE’
!      Tells GCC to use CHOICE as the default for ‘-fdiagnostics-color=’
       option (if not used explicitly on the command line).  CHOICE can be
!      one of ‘never’, ‘auto’, ‘always’, and ‘auto-if-env’ where ‘auto’ is
!      the default.  ‘auto-if-env’ makes ‘-fdiagnostics-color=auto’ the
!      default if ‘GCC_COLORS’ is present and non-empty in the environment
!      of the compiler, and ‘-fdiagnostics-color=never’ otherwise.
  
! ‘--with-diagnostics-urls=CHOICE’
!      Tells GCC to use CHOICE as the default for ‘-fdiagnostics-urls=’
       option (if not used explicitly on the command line).  CHOICE can be
!      one of ‘never’, ‘auto’, ‘always’, and ‘auto-if-env’ where ‘auto’ is
!      the default.  ‘auto-if-env’ makes ‘-fdiagnostics-urls=auto’ the
!      default if ‘GCC_URLS’ or ‘TERM_URLS’ is present and non-empty in
!      the environment of the compiler, and ‘-fdiagnostics-urls=never’
       otherwise.
  
! ‘--enable-lto’
! ‘--disable-lto’
       Enable support for link-time optimization (LTO). This is enabled by
!      default, and may be disabled using ‘--disable-lto’.
  
! ‘--enable-linker-plugin-configure-flags=FLAGS’
! ‘--enable-linker-plugin-flags=FLAGS’
       By default, linker plugins (such as the LTO plugin) are built for
       the host system architecture.  For the case that the linker has a
       different (but run-time compatible) architecture, these flags can
       be specified to build plugins that are compatible to the linker.
       For example, if you are building GCC for a 64-bit x86_64
!      (‘x86_64-pc-linux-gnu’) host system, but have a 32-bit x86
!      GNU/Linux (‘i686-pc-linux-gnu’) linker executable (which is
       executable on the former system), you can configure GCC as follows
       for getting compatible linker plugins:
  
*************** option.
*** 2236,2257 ****
                --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
                --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
  
! '--with-plugin-ld=PATHNAME'
       Enable an alternate linker to be used at link-time optimization
!      (LTO) link time when '-fuse-linker-plugin' is enabled.  This linker
       should have plugin support such as gold starting with version 2.20
!      or GNU ld starting with version 2.21.  See '-fuse-linker-plugin'
       for details.
  
! '--enable-canonical-system-headers'
! '--disable-canonical-system-headers'
!      Enable system header path canonicalization for 'libcpp'.  This can
       produce shorter header file paths in diagnostics and dependency
       output files, but these changed header paths may conflict with some
       compilation environments.  Enabled by default, and may be disabled
!      using '--disable-canonical-system-headers'.
  
! '--with-glibc-version=MAJOR.MINOR'
       Tell GCC that when the GNU C Library (glibc) is used on the target
       it will be version MAJOR.MINOR or later.  Normally this can be
       detected from the C library's header files, but this option may be
--- 2236,2257 ----
                --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
                --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
  
! ‘--with-plugin-ld=PATHNAME’
       Enable an alternate linker to be used at link-time optimization
!      (LTO) link time when ‘-fuse-linker-plugin’ is enabled.  This linker
       should have plugin support such as gold starting with version 2.20
!      or GNU ld starting with version 2.21.  See ‘-fuse-linker-plugin’
       for details.
  
! ‘--enable-canonical-system-headers’
! ‘--disable-canonical-system-headers’
!      Enable system header path canonicalization for ‘libcpp’.  This can
       produce shorter header file paths in diagnostics and dependency
       output files, but these changed header paths may conflict with some
       compilation environments.  Enabled by default, and may be disabled
!      using ‘--disable-canonical-system-headers’.
  
! ‘--with-glibc-version=MAJOR.MINOR’
       Tell GCC that when the GNU C Library (glibc) is used on the target
       it will be version MAJOR.MINOR or later.  Normally this can be
       detected from the C library's header files, but this option may be
*************** option.
*** 2263,2282 ****
       glibc.  However, such configurations may not work well as not all
       the relevant configuration in GCC is on a per-multilib basis.
  
! '--enable-as-accelerator-for=TARGET'
       Build as offload target compiler.  Specify offload host triple by
       TARGET.
  
! '--enable-offload-targets=TARGET1[=PATH1],...,TARGETN[=PATHN]'
       Enable offloading to targets TARGET1, ..., TARGETN.  Offload
       compilers are expected to be already installed.  Default search
!      path for them is 'EXEC-PREFIX', but it can be changed by specifying
       paths PATH1, ..., PATHN.
  
            % SRCDIR/configure \
                --enable-offload-targets=amdgcn-amdhsa,nvptx-none
  
! '--enable-offload-defaulted'
  
       Tell GCC that configured but not installed offload compilers and
       libgomp plugins are silently ignored.  Useful for distribution
--- 2263,2282 ----
       glibc.  However, such configurations may not work well as not all
       the relevant configuration in GCC is on a per-multilib basis.
  
! ‘--enable-as-accelerator-for=TARGET’
       Build as offload target compiler.  Specify offload host triple by
       TARGET.
  
! ‘--enable-offload-targets=TARGET1[=PATH1],...,TARGETN[=PATHN]’
       Enable offloading to targets TARGET1, ..., TARGETN.  Offload
       compilers are expected to be already installed.  Default search
!      path for them is ‘EXEC-PREFIX’, but it can be changed by specifying
       paths PATH1, ..., PATHN.
  
            % SRCDIR/configure \
                --enable-offload-targets=amdgcn-amdhsa,nvptx-none
  
! ‘--enable-offload-defaulted’
  
       Tell GCC that configured but not installed offload compilers and
       libgomp plugins are silently ignored.  Useful for distribution
*************** option.
*** 2285,2330 ****
       the actual supported offloading target set rather than the GCC
       configure-time selection.
  
! '--enable-cet'
! '--disable-cet'
       Enable building target run-time libraries with control-flow
!      instrumentation, see '-fcf-protection' option.  When '--enable-cet'
       is specified target libraries are configured to add
!      '-fcf-protection' and, if needed, other target specific options to
       a set of building options.
  
!      '--enable-cet=auto' is default.  CET is enabled on Linux/x86 if
!      target binutils supports 'Intel CET' instructions and disabled
       otherwise.  In this case, the target libraries are configured to
!      get additional '-fcf-protection' option.
  
! '--with-riscv-attribute='yes', 'no' or 'default''
       Generate RISC-V attribute by default, in order to record extra
       build information in object.
  
       The option is disabled by default.  It is enabled on RISC-V/ELF
       (bare-metal) target if target binutils supported.
  
! '--enable-s390-excess-float-precision'
! '--disable-s390-excess-float-precision'
       On s390(x) targets, enable treatment of float expressions with
       double precision when in standards-compliant mode (e.g., when
!      '--std=c99' or '-fexcess-precision=standard' are given).
  
       For a native build and cross compiles that have target headers, the
       option's default is derived from glibc's behavior.  When glibc
       clamps float_t to double, GCC follows and enables the option.  For
       other cross compiles, the default is disabled.
  
! '--with-zstd=PATHNAME'
! '--with-zstd-include=PATHNAME'
! '--with-zstd-lib=PATHNAME'
!      If you do not have the 'zstd' library installed in a standard
       location and you want to build GCC, you can explicitly specify the
!      directory where it is installed ('--with-zstd=ZSTDINSTALLDIR').
!      The '--with-zstd=ZSTDINSTALLDIR' option is shorthand for
!      '--with-zstd-lib=ZSTDINSTALLDIR/lib' and
!      '--with-zstd-include=ZSTDINSTALLDIR/include'.  If this shorthand
       assumption is not correct, you can use the explicit include and lib
       options directly.
  
--- 2285,2330 ----
       the actual supported offloading target set rather than the GCC
       configure-time selection.
  
! ‘--enable-cet’
! ‘--disable-cet’
       Enable building target run-time libraries with control-flow
!      instrumentation, see ‘-fcf-protection’ option.  When ‘--enable-cet’
       is specified target libraries are configured to add
!      ‘-fcf-protection’ and, if needed, other target specific options to
       a set of building options.
  
!      ‘--enable-cet=auto’ is default.  CET is enabled on Linux/x86 if
!      target binutils supports ‘Intel CET’ instructions and disabled
       otherwise.  In this case, the target libraries are configured to
!      get additional ‘-fcf-protection’ option.
  
! ‘--with-riscv-attribute=‘yes’, ‘no’ or ‘default’’
       Generate RISC-V attribute by default, in order to record extra
       build information in object.
  
       The option is disabled by default.  It is enabled on RISC-V/ELF
       (bare-metal) target if target binutils supported.
  
! ‘--enable-s390-excess-float-precision’
! ‘--disable-s390-excess-float-precision’
       On s390(x) targets, enable treatment of float expressions with
       double precision when in standards-compliant mode (e.g., when
!      ‘--std=c99’ or ‘-fexcess-precision=standard’ are given).
  
       For a native build and cross compiles that have target headers, the
       option's default is derived from glibc's behavior.  When glibc
       clamps float_t to double, GCC follows and enables the option.  For
       other cross compiles, the default is disabled.
  
! ‘--with-zstd=PATHNAME’
! ‘--with-zstd-include=PATHNAME’
! ‘--with-zstd-lib=PATHNAME’
!      If you do not have the ‘zstd’ library installed in a standard
       location and you want to build GCC, you can explicitly specify the
!      directory where it is installed (‘--with-zstd=ZSTDINSTALLDIR’).
!      The ‘--with-zstd=ZSTDINSTALLDIR’ option is shorthand for
!      ‘--with-zstd-lib=ZSTDINSTALLDIR/lib’ and
!      ‘--with-zstd-include=ZSTDINSTALLDIR/include’.  If this shorthand
       assumption is not correct, you can use the explicit include and lib
       options directly.
  
*************** Cross-Compiler-Specific Options
*** 2337,2377 ****
  
  The following options only apply to building cross compilers.
  
! '--with-toolexeclibdir=DIR'
       Specify the installation directory for libraries built with a cross
!      compiler.  The default is '${gcc_tooldir}/lib'.
  
! '--with-sysroot'
! '--with-sysroot=DIR'
       Tells GCC to consider DIR as the root of a tree that contains (a
       subset of) the root filesystem of the target operating system.
       Target system headers, libraries and run-time object files will be
       searched for in there.  More specifically, this acts as if
!      '--sysroot=DIR' was added to the default options of the built
       compiler.  The specified directory is not copied into the install
!      tree, unlike the options '--with-headers' and '--with-libs' that
!      this option obsoletes.  The default value, in case '--with-sysroot'
!      is not given an argument, is '${gcc_tooldir}/sys-root'.  If the
!      specified directory is a subdirectory of '${exec_prefix}', then it
       will be found relative to the GCC binaries if the installation tree
       is moved.
  
       This option affects the system root for the compiler used to build
       target libraries (which runs on the build system) and the compiler
!      newly installed with 'make install'; it does not affect the
       compiler which is used to build GCC itself.
  
!      If you specify the '--with-native-system-header-dir=DIRNAME' option
       then the compiler will search that directory within DIRNAME for
!      native system headers rather than the default '/usr/include'.
  
! '--with-build-sysroot'
! '--with-build-sysroot=DIR'
!      Tells GCC to consider DIR as the system root (see '--with-sysroot')
       while building target libraries, instead of the directory specified
!      with '--with-sysroot'.  This option is only useful when you are
!      already using '--with-sysroot'.  You can use '--with-build-sysroot'
!      when you are configuring with '--prefix' set to a directory that is
       different from the one in which you are installing GCC and your
       target libraries.
  
--- 2337,2377 ----
  
  The following options only apply to building cross compilers.
  
! ‘--with-toolexeclibdir=DIR’
       Specify the installation directory for libraries built with a cross
!      compiler.  The default is ‘${gcc_tooldir}/lib’.
  
! ‘--with-sysroot’
! ‘--with-sysroot=DIR’
       Tells GCC to consider DIR as the root of a tree that contains (a
       subset of) the root filesystem of the target operating system.
       Target system headers, libraries and run-time object files will be
       searched for in there.  More specifically, this acts as if
!      ‘--sysroot=DIR’ was added to the default options of the built
       compiler.  The specified directory is not copied into the install
!      tree, unlike the options ‘--with-headers’ and ‘--with-libs’ that
!      this option obsoletes.  The default value, in case ‘--with-sysroot’
!      is not given an argument, is ‘${gcc_tooldir}/sys-root’.  If the
!      specified directory is a subdirectory of ‘${exec_prefix}’, then it
       will be found relative to the GCC binaries if the installation tree
       is moved.
  
       This option affects the system root for the compiler used to build
       target libraries (which runs on the build system) and the compiler
!      newly installed with ‘make install’; it does not affect the
       compiler which is used to build GCC itself.
  
!      If you specify the ‘--with-native-system-header-dir=DIRNAME’ option
       then the compiler will search that directory within DIRNAME for
!      native system headers rather than the default ‘/usr/include’.
  
! ‘--with-build-sysroot’
! ‘--with-build-sysroot=DIR’
!      Tells GCC to consider DIR as the system root (see ‘--with-sysroot’)
       while building target libraries, instead of the directory specified
!      with ‘--with-sysroot’.  This option is only useful when you are
!      already using ‘--with-sysroot’.  You can use ‘--with-build-sysroot’
!      when you are configuring with ‘--prefix’ set to a directory that is
       different from the one in which you are installing GCC and your
       target libraries.
  
*************** The following options only apply to buil
*** 2379,2516 ****
       target libraries (which runs on the build system); it does not
       affect the compiler which is used to build GCC itself.
  
!      If you specify the '--with-native-system-header-dir=DIRNAME' option
       then the compiler will search that directory within DIRNAME for
!      native system headers rather than the default '/usr/include'.
  
! '--with-headers'
! '--with-headers=DIR'
!      Deprecated in favor of '--with-sysroot'.  Specifies that target
       headers are available when building a cross compiler.  The DIR
       argument specifies a directory which has the target include files.
!      These include files will be copied into the 'gcc' install
       directory.  _This option with the DIR argument is required_ when
!      building a cross compiler, if 'PREFIX/TARGET/sys-include' doesn't
!      pre-exist.  If 'PREFIX/TARGET/sys-include' does pre-exist, the DIR
!      argument may be omitted.  'fixincludes' will be run on these files
       to make them compatible with GCC.
  
! '--without-headers'
       Tells GCC not use any target headers from a libc when building a
       cross compiler.  When crossing to GNU/Linux, you need the headers
       so GCC can build the exception handling for libgcc.
  
! '--with-libs'
! '--with-libs="DIR1 DIR2 ... DIRN"'
!      Deprecated in favor of '--with-sysroot'.  Specifies a list of
       directories which contain the target runtime libraries.  These
!      libraries will be copied into the 'gcc' install directory.  If the
       directory list is omitted, this option has no effect.
  
! '--with-newlib'
!      Specifies that 'newlib' is being used as the target C library.
!      This causes '__eprintf' to be omitted from 'libgcc.a' on the
!      assumption that it will be provided by 'newlib'.
  
! '--with-avrlibc'
!      Only supported for the AVR target.  Specifies that 'AVR-Libc' is
       being used as the target C  library.  This causes float support
!      functions like '__addsf3' to be omitted from 'libgcc.a' on the
!      assumption that it will be provided by 'libm.a'.  For more
       technical details, cf.  PR54461.  It is not supported for RTEMS
       configurations, which currently use newlib.  The option is
       supported since version 4.7.2 and is the default in 4.8.0 and
       newer.
  
! '--with-double={32|64|32,64|64,32}'
! '--with-long-double={32|64|32,64|64,32|double}'
       Only supported for the AVR target since version 10.  Specify the
!      default layout available for the C/C++ 'double' and 'long double'
       type, respectively.  The following rules apply:
!         * The first value after the '=' specifies the default layout (in
!           bits) of the type and also the default for the '-mdouble='
!           resp.  '-mlong-double=' compiler option.
!         * If more than one value is specified, respective multilib
!           variants are available, and '-mdouble=' resp.
!           '-mlong-double=' acts as a multilib option.
!         * If '--with-long-double=double' is specified, 'double' and
!           'long double' will have the same layout.
!         * The defaults are '--with-long-double=64,32' and
!           '--with-double=32,64'.  The default 'double' layout imposed by
            the latter is compatible with older versions of the compiler
!           that implement 'double' as a 32-bit type, which does not
            comply to the language standard.
!      Not all combinations of '--with-double=' and '--with-long-double='
!      are valid.  For example, the combination '--with-double=32,64'
!      '--with-long-double=32' will be rejected because the first option
!      specifies the availability of multilibs for 'double', whereas the
!      second option implies that 'long double' -- and hence also 'double'
       -- is always 32 bits wide.
  
! '--with-double-comparison={tristate|bool|libf7}'
       Only supported for the AVR target since version 10.  Specify what
       result format is returned by library functions that compare 64-bit
!      floating point values ('DFmode').  The GCC default is 'tristate'.
       If the floating point implementation returns a boolean instead, set
!      it to 'bool'.
  
! '--with-libf7={libgcc|math|math-symbols|no}'
       Only supported for the AVR target since version 10.  Specify to
       which degree code from LibF7 is included in libgcc.  LibF7 is an
       ad-hoc, AVR-specific, 64-bit floating point emulation written in C
!      and (inline) assembly.  'libgcc' adds support for functions that
       one would usually expect in libgcc like double addition, double
!      comparisons and double conversions.  'math' also adds routines that
!      one would expect in 'libm.a', but with '__' (two underscores)
!      prepended to the symbol names as specified by 'math.h'.
!      'math-symbols' also defines weak aliases for the functions declared
!      in 'math.h'.  However, '--with-libf7' won't install no 'math.h'
       header file whatsoever, this file must come from elsewhere.  This
!      option sets '--with-double-comparison' to 'bool'.
  
! '--with-nds32-lib=LIBRARY'
!      Specifies that LIBRARY setting is used for building 'libgcc.a'.
!      Currently, the valid LIBRARY is 'newlib' or 'mculib'.  This option
       is only supported for the NDS32 target.
  
! '--with-build-time-tools=DIR'
       Specifies where to find the set of target tools (assembler, linker,
       etc.)  that will be used while building GCC itself.  This option
       can be useful if the directory layouts are different between the
       system you are building GCC on, and the system where you will
       deploy it.
  
!      For example, on an 'ia64-hp-hpux' system, you may have the GNU
!      assembler and linker in '/usr/bin', and the native tools in a
       different path, and build a toolchain that expects to find the
!      native tools in '/usr/bin'.
  
!      When you use this option, you should ensure that DIR includes 'ar',
!      'as', 'ld', 'nm', 'ranlib' and 'strip' if necessary, and possibly
!      'objdump'.  Otherwise, GCC may use an inconsistent set of tools.
  
! Overriding 'configure' test results
  ...................................
  
  Sometimes, it might be necessary to override the result of some
! 'configure' test, for example in order to ease porting to a new system
! or work around a bug in a test.  The toplevel 'configure' script
  provides three variables for this:
  
! 'build_configargs'
!      The contents of this variable is passed to all build 'configure'
       scripts.
  
! 'host_configargs'
!      The contents of this variable is passed to all host 'configure'
       scripts.
  
! 'target_configargs'
!      The contents of this variable is passed to all target 'configure'
       scripts.
  
!    In order to avoid shell and 'make' quoting issues for complex
! overrides, you can pass a setting for 'CONFIG_SITE' and set variables in
  the site file.
  
  Objective-C-Specific Options
--- 2379,2516 ----
       target libraries (which runs on the build system); it does not
       affect the compiler which is used to build GCC itself.
  
!      If you specify the ‘--with-native-system-header-dir=DIRNAME’ option
       then the compiler will search that directory within DIRNAME for
!      native system headers rather than the default ‘/usr/include’.
  
! ‘--with-headers’
! ‘--with-headers=DIR’
!      Deprecated in favor of ‘--with-sysroot’.  Specifies that target
       headers are available when building a cross compiler.  The DIR
       argument specifies a directory which has the target include files.
!      These include files will be copied into the ‘gcc’ install
       directory.  _This option with the DIR argument is required_ when
!      building a cross compiler, if ‘PREFIX/TARGET/sys-include’ doesn't
!      pre-exist.  If ‘PREFIX/TARGET/sys-include’ does pre-exist, the DIR
!      argument may be omitted.  ‘fixincludes’ will be run on these files
       to make them compatible with GCC.
  
! ‘--without-headers’
       Tells GCC not use any target headers from a libc when building a
       cross compiler.  When crossing to GNU/Linux, you need the headers
       so GCC can build the exception handling for libgcc.
  
! ‘--with-libs’
! ‘--with-libs="DIR1 DIR2 ... DIRN"’
!      Deprecated in favor of ‘--with-sysroot’.  Specifies a list of
       directories which contain the target runtime libraries.  These
!      libraries will be copied into the ‘gcc’ install directory.  If the
       directory list is omitted, this option has no effect.
  
! ‘--with-newlib’
!      Specifies that ‘newlib’ is being used as the target C library.
!      This causes ‘__eprintf’ to be omitted from ‘libgcc.a’ on the
!      assumption that it will be provided by ‘newlib’.
  
! ‘--with-avrlibc’
!      Only supported for the AVR target.  Specifies that ‘AVR-Libc’ is
       being used as the target C  library.  This causes float support
!      functions like ‘__addsf3’ to be omitted from ‘libgcc.a’ on the
!      assumption that it will be provided by ‘libm.a’.  For more
       technical details, cf.  PR54461.  It is not supported for RTEMS
       configurations, which currently use newlib.  The option is
       supported since version 4.7.2 and is the default in 4.8.0 and
       newer.
  
! ‘--with-double={32|64|32,64|64,32}’
! ‘--with-long-double={32|64|32,64|64,32|double}’
       Only supported for the AVR target since version 10.  Specify the
!      default layout available for the C/C++ ‘double’ and ‘long double’
       type, respectively.  The following rules apply:
!         • The first value after the ‘=’ specifies the default layout (in
!           bits) of the type and also the default for the ‘-mdouble=’
!           resp.  ‘-mlong-double=’ compiler option.
!         • If more than one value is specified, respective multilib
!           variants are available, and ‘-mdouble=’ resp.
!           ‘-mlong-double=’ acts as a multilib option.
!         • If ‘--with-long-double=double’ is specified, ‘double’ and
!           ‘long double’ will have the same layout.
!         • The defaults are ‘--with-long-double=64,32’ and
!           ‘--with-double=32,64’.  The default ‘double’ layout imposed by
            the latter is compatible with older versions of the compiler
!           that implement ‘double’ as a 32-bit type, which does not
            comply to the language standard.
!      Not all combinations of ‘--with-double=’ and ‘--with-long-double=’
!      are valid.  For example, the combination ‘--with-double=32,64’
!      ‘--with-long-double=32’ will be rejected because the first option
!      specifies the availability of multilibs for ‘double’, whereas the
!      second option implies that ‘long double’ -- and hence also ‘double’
       -- is always 32 bits wide.
  
! ‘--with-double-comparison={tristate|bool|libf7}’
       Only supported for the AVR target since version 10.  Specify what
       result format is returned by library functions that compare 64-bit
!      floating point values (‘DFmode’).  The GCC default is ‘tristate’.
       If the floating point implementation returns a boolean instead, set
!      it to ‘bool’.
  
! ‘--with-libf7={libgcc|math|math-symbols|no}’
       Only supported for the AVR target since version 10.  Specify to
       which degree code from LibF7 is included in libgcc.  LibF7 is an
       ad-hoc, AVR-specific, 64-bit floating point emulation written in C
!      and (inline) assembly.  ‘libgcc’ adds support for functions that
       one would usually expect in libgcc like double addition, double
!      comparisons and double conversions.  ‘math’ also adds routines that
!      one would expect in ‘libm.a’, but with ‘__’ (two underscores)
!      prepended to the symbol names as specified by ‘math.h’.
!      ‘math-symbols’ also defines weak aliases for the functions declared
!      in ‘math.h’.  However, ‘--with-libf7’ won't install no ‘math.h’
       header file whatsoever, this file must come from elsewhere.  This
!      option sets ‘--with-double-comparison’ to ‘bool’.
  
! ‘--with-nds32-lib=LIBRARY’
!      Specifies that LIBRARY setting is used for building ‘libgcc.a’.
!      Currently, the valid LIBRARY is ‘newlib’ or ‘mculib’.  This option
       is only supported for the NDS32 target.
  
! ‘--with-build-time-tools=DIR’
       Specifies where to find the set of target tools (assembler, linker,
       etc.)  that will be used while building GCC itself.  This option
       can be useful if the directory layouts are different between the
       system you are building GCC on, and the system where you will
       deploy it.
  
!      For example, on an ‘ia64-hp-hpux’ system, you may have the GNU
!      assembler and linker in ‘/usr/bin’, and the native tools in a
       different path, and build a toolchain that expects to find the
!      native tools in ‘/usr/bin’.
  
!      When you use this option, you should ensure that DIR includes ‘ar’,
!      ‘as’, ‘ld’, ‘nm’, ‘ranlib’ and ‘strip’ if necessary, and possibly
!      ‘objdump’.  Otherwise, GCC may use an inconsistent set of tools.
  
! Overriding ‘configure’ test results
  ...................................
  
  Sometimes, it might be necessary to override the result of some
! ‘configure’ test, for example in order to ease porting to a new system
! or work around a bug in a test.  The toplevel ‘configure’ script
  provides three variables for this:
  
! ‘build_configargs’
!      The contents of this variable is passed to all build ‘configure’
       scripts.
  
! ‘host_configargs’
!      The contents of this variable is passed to all host ‘configure’
       scripts.
  
! ‘target_configargs’
!      The contents of this variable is passed to all target ‘configure’
       scripts.
  
!    In order to avoid shell and ‘make’ quoting issues for complex
! overrides, you can pass a setting for ‘CONFIG_SITE’ and set variables in
  the site file.
  
  Objective-C-Specific Options
*************** Objective-C-Specific Options
*** 2519,2551 ****
  The following options apply to the build of the Objective-C runtime
  library.
  
! '--enable-objc-gc'
       Specify that an additional variant of the GNU Objective-C runtime
       library is built, using an external build of the
       Boehm-Demers-Weiser garbage collector
       (<https://www.hboehm.info/gc/>).  This library needs to be
       available for each multilib variant, unless configured with
!      '--enable-objc-gc='auto'' in which case the build of the additional
       runtime library is skipped when not available and the build
       continues.
  
! '--with-target-bdw-gc=LIST'
! '--with-target-bdw-gc-include=LIST'
! '--with-target-bdw-gc-lib=LIST'
       Specify search directories for the garbage collector header files
       and libraries.  LIST is a comma separated list of key value pairs
!      of the form 'MULTILIBDIR=PATH', where the default multilib key is
!      named as '.' (dot), or is omitted (e.g.
!      '--with-target-bdw-gc=/opt/bdw-gc,32=/opt-bdw-gc32').
  
!      The options '--with-target-bdw-gc-include' and
!      '--with-target-bdw-gc-lib' must always be specified together for
       each multilib variant and they take precedence over
!      '--with-target-bdw-gc'.  If '--with-target-bdw-gc-include' is
       missing values for a multilib, then the value for the default
       multilib is used (e.g.
!      '--with-target-bdw-gc-include=/opt/bdw-gc/include'
!      '--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32').
       If none of these options are specified, the library is assumed in
       default locations.
  
--- 2519,2551 ----
  The following options apply to the build of the Objective-C runtime
  library.
  
! ‘--enable-objc-gc’
       Specify that an additional variant of the GNU Objective-C runtime
       library is built, using an external build of the
       Boehm-Demers-Weiser garbage collector
       (<https://www.hboehm.info/gc/>).  This library needs to be
       available for each multilib variant, unless configured with
!      ‘--enable-objc-gc=‘auto’’ in which case the build of the additional
       runtime library is skipped when not available and the build
       continues.
  
! ‘--with-target-bdw-gc=LIST’
! ‘--with-target-bdw-gc-include=LIST’
! ‘--with-target-bdw-gc-lib=LIST’
       Specify search directories for the garbage collector header files
       and libraries.  LIST is a comma separated list of key value pairs
!      of the form ‘MULTILIBDIR=PATH’, where the default multilib key is
!      named as ‘.’ (dot), or is omitted (e.g.
!      ‘--with-target-bdw-gc=/opt/bdw-gc,32=/opt-bdw-gc32’).
  
!      The options ‘--with-target-bdw-gc-include’ and
!      ‘--with-target-bdw-gc-lib’ must always be specified together for
       each multilib variant and they take precedence over
!      ‘--with-target-bdw-gc’.  If ‘--with-target-bdw-gc-include’ is
       missing values for a multilib, then the value for the default
       multilib is used (e.g.
!      ‘--with-target-bdw-gc-include=/opt/bdw-gc/include’
!      ‘--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32’).
       If none of these options are specified, the library is assumed in
       default locations.
  
*************** D-Specific Options
*** 2554,2596 ****
  
  The following options apply to the build of the D runtime library.
  
! '--enable-libphobos-checking'
! '--disable-libphobos-checking'
! '--enable-libphobos-checking=LIST'
       This option controls whether run-time checks and contracts are
       compiled into the D runtime library.  When the option is not
!      specified, the library is built with 'release' checking.  When the
       option is specified without a LIST, the result is the same as
!      '--enable-libphobos-checking=yes'.  Likewise,
!      '--disable-libphobos-checking' is equivalent to
!      '--enable-libphobos-checking=no'.
  
!      The categories of checks available in LIST are 'yes' (compiles
!      libphobos with '-fno-release'), 'no' (compiles libphobos with
!      '-frelease'), 'all' (same as 'yes'), 'none' or 'release' (same as
!      'no').
  
!      Individual checks available in LIST are 'assert' (compiles
!      libphobos with an extra option '-fassert').
  
! '--with-libphobos-druntime-only'
! '--with-libphobos-druntime-only=CHOICE'
       Specify whether to build only the core D runtime library
       (druntime), or both the core and standard library (phobos) into
       libphobos.  This is useful for targets that have full support in
       druntime, but no or incomplete support in phobos.  CHOICE can be
!      one of 'auto', 'yes', and 'no' where 'auto' is the default.
  
!      When the option is not specified, the default choice 'auto' means
       that it is inferred whether the target has support for the phobos
       standard library.  When the option is specified without a CHOICE,
!      the result is the same as '--with-libphobos-druntime-only=yes'.
  
! '--with-target-system-zlib'
!      Use installed 'zlib' rather than that included with GCC.  This
       needs to be available for each multilib variant, unless configured
!      with '--with-target-system-zlib='auto'' in which case the
!      GCC included 'zlib' is only used when the system installed library
       is not available.
  
  
--- 2554,2596 ----
  
  The following options apply to the build of the D runtime library.
  
! ‘--enable-libphobos-checking’
! ‘--disable-libphobos-checking’
! ‘--enable-libphobos-checking=LIST’
       This option controls whether run-time checks and contracts are
       compiled into the D runtime library.  When the option is not
!      specified, the library is built with ‘release’ checking.  When the
       option is specified without a LIST, the result is the same as
!      ‘--enable-libphobos-checking=yes’.  Likewise,
!      ‘--disable-libphobos-checking’ is equivalent to
!      ‘--enable-libphobos-checking=no’.
  
!      The categories of checks available in LIST are ‘yes’ (compiles
!      libphobos with ‘-fno-release’), ‘no’ (compiles libphobos with
!      ‘-frelease’), ‘all’ (same as ‘yes’), ‘none’ or ‘release’ (same as
!      ‘no’).
  
!      Individual checks available in LIST are ‘assert’ (compiles
!      libphobos with an extra option ‘-fassert’).
  
! ‘--with-libphobos-druntime-only’
! ‘--with-libphobos-druntime-only=CHOICE’
       Specify whether to build only the core D runtime library
       (druntime), or both the core and standard library (phobos) into
       libphobos.  This is useful for targets that have full support in
       druntime, but no or incomplete support in phobos.  CHOICE can be
!      one of ‘auto’, ‘yes’, and ‘no’ where ‘auto’ is the default.
  
!      When the option is not specified, the default choice ‘auto’ means
       that it is inferred whether the target has support for the phobos
       standard library.  When the option is specified without a CHOICE,
!      the result is the same as ‘--with-libphobos-druntime-only=yes’.
  
! ‘--with-target-system-zlib’
!      Use installed ‘zlib’ rather than that included with GCC.  This
       needs to be available for each multilib variant, unless configured
!      with ‘--with-target-system-zlib=‘auto’’ in which case the
!      GCC included ‘zlib’ is only used when the system installed library
       is not available.
  
  
*************** Now that GCC is configured, you are read
*** 2603,2609 ****
  runtime libraries.
  
     Some commands executed when making the compiler may fail (return a
! nonzero status) and be ignored by 'make'.  These failures, which are
  often due to files that were not found, are expected, and can safely be
  ignored.
  
--- 2603,2609 ----
  runtime libraries.
  
     Some commands executed when making the compiler may fail (return a
! nonzero status) and be ignored by ‘make’.  These failures, which are
  often due to files that were not found, are expected, and can safely be
  ignored.
  
*************** ignored.
*** 2611,2620 ****
  Unless you are a GCC developer, you can generally ignore these warnings
  unless they cause compilation to fail.  Developers should attempt to fix
  any warnings encountered, however they can temporarily continue past
! warnings-as-errors by specifying the configure flag '--disable-werror'.
  
     On certain old systems, defining certain environment variables such
! as 'CC' can interfere with the functioning of 'make'.
  
     If you encounter seemingly strange errors when trying to build the
  compiler in a directory other than the source directory, it could be
--- 2611,2620 ----
  Unless you are a GCC developer, you can generally ignore these warnings
  unless they cause compilation to fail.  Developers should attempt to fix
  any warnings encountered, however they can temporarily continue past
! warnings-as-errors by specifying the configure flag ‘--disable-werror’.
  
     On certain old systems, defining certain environment variables such
! as ‘CC’ can interfere with the functioning of ‘make’.
  
     If you encounter seemingly strange errors when trying to build the
  compiler in a directory other than the source directory, it could be
*************** because you have previously configured t
*** 2622,2638 ****
  directory.  Make sure you have done all the necessary preparations.
  
     If you build GCC on a BSD system using a directory stored in an old
! System V file system, problems may occur in running 'fixincludes' if the
  System V file system doesn't support symbolic links.  These problems
! result in a failure to fix the declaration of 'size_t' in 'sys/types.h'.
! If you find that 'size_t' is a signed type and that type mismatches
  occur, this could be the cause.
  
     The solution is not to use such a directory for building GCC.
  
     Similarly, when building from the source repository or snapshots, or
! if you modify '*.l' files, you need the Flex lexical analyzer generator
! installed.  If you do not modify '*.l' files, releases contain the
  Flex-generated files and you do not need Flex installed to build them.
  There is still one Flex-based lexical analyzer (part of the build
  machinery, not of GCC itself) that is used even if you only build the C
--- 2622,2638 ----
  directory.  Make sure you have done all the necessary preparations.
  
     If you build GCC on a BSD system using a directory stored in an old
! System V file system, problems may occur in running ‘fixincludes’ if the
  System V file system doesn't support symbolic links.  These problems
! result in a failure to fix the declaration of ‘size_t’ in ‘sys/types.h’.
! If you find that ‘size_t’ is a signed type and that type mismatches
  occur, this could be the cause.
  
     The solution is not to use such a directory for building GCC.
  
     Similarly, when building from the source repository or snapshots, or
! if you modify ‘*.l’ files, you need the Flex lexical analyzer generator
! installed.  If you do not modify ‘*.l’ files, releases contain the
  Flex-generated files and you do not need Flex installed to build them.
  There is still one Flex-based lexical analyzer (part of the build
  machinery, not of GCC itself) that is used even if you only build the C
*************** the release.
*** 2648,2683 ****
  ==============================
  
  For a native build, the default configuration is to perform a 3-stage
! bootstrap of the compiler when 'make' is invoked.  This will build the
  entire GCC system and ensure that it compiles itself correctly.  It can
! be disabled with the '--disable-bootstrap' parameter to 'configure', but
  bootstrapping is suggested because the compiler will be tested more
  completely and could also have better performance.
  
     The bootstrapping process will complete the following steps:
  
!    * Build tools necessary to build the compiler.
  
!    * Perform a 3-stage bootstrap of the compiler.  This includes
       building three times the target tools for use by the compiler such
       as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they
       have been individually linked or moved into the top level GCC
       source tree before configuring.
  
!    * Perform a comparison test of the stage2 and stage3 compilers.
  
!    * Build runtime libraries using the stage3 compiler from the previous
       step.
  
!    If you are short on disk space you might consider 'make
! bootstrap-lean' instead.  The sequence of compilation is the same
  described above, but object files from the stage1 and stage2 of the
  3-stage bootstrap of the compiler are deleted as soon as they are no
  longer needed.
  
     If you wish to use non-default GCC flags when compiling the stage2
! and stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing
! 'make'.  For example, if you want to save additional space during the
  bootstrap and in the final installation as well, you can build the
  compiler binaries without debugging information as in the following
  example.  This will save roughly 40% of disk space both for the
--- 2648,2683 ----
  ==============================
  
  For a native build, the default configuration is to perform a 3-stage
! bootstrap of the compiler when ‘make’ is invoked.  This will build the
  entire GCC system and ensure that it compiles itself correctly.  It can
! be disabled with the ‘--disable-bootstrap’ parameter to ‘configure’, but
  bootstrapping is suggested because the compiler will be tested more
  completely and could also have better performance.
  
     The bootstrapping process will complete the following steps:
  
!    • Build tools necessary to build the compiler.
  
!    • Perform a 3-stage bootstrap of the compiler.  This includes
       building three times the target tools for use by the compiler such
       as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they
       have been individually linked or moved into the top level GCC
       source tree before configuring.
  
!    • Perform a comparison test of the stage2 and stage3 compilers.
  
!    • Build runtime libraries using the stage3 compiler from the previous
       step.
  
!    If you are short on disk space you might consider ‘make
! bootstrap-lean’ instead.  The sequence of compilation is the same
  described above, but object files from the stage1 and stage2 of the
  3-stage bootstrap of the compiler are deleted as soon as they are no
  longer needed.
  
     If you wish to use non-default GCC flags when compiling the stage2
! and stage3 compilers, set ‘BOOT_CFLAGS’ on the command line when doing
! ‘make’.  For example, if you want to save additional space during the
  bootstrap and in the final installation as well, you can build the
  compiler binaries without debugging information as in the following
  example.  This will save roughly 40% of disk space both for the
*************** debugging information.)
*** 2686,2830 ****
  
       make BOOT_CFLAGS='-O' bootstrap
  
!    You can place non-default optimization flags into 'BOOT_CFLAGS'; they
! are less well tested here than the default of '-g -O2', but should still
  work.  In a few cases, you may find that you need to specify special
! flags such as '-msoft-float' here to complete the bootstrap; or, if the
  native compiler miscompiles the stage1 compiler, you may need to work
! around this, by choosing 'BOOT_CFLAGS' to avoid the parts of the stage1
! compiler that were miscompiled, or by using 'make bootstrap4' to
  increase the number of stages of bootstrap.
  
!    'BOOT_CFLAGS' does not apply to bootstrapped target libraries.  Since
  these are always compiled with the compiler currently being
! bootstrapped, you can use 'CFLAGS_FOR_TARGET' to modify their
  compilation flags, as for non-bootstrapped target libraries.  Again, if
  the native compiler miscompiles the stage1 compiler, you may need to
  work around this by avoiding non-working parts of the stage1 compiler.
! Use 'STAGE1_TFLAGS' to this end.
  
!    If you used the flag '--enable-languages=...' to restrict the
  compilers to be built, only those you've actually enabled will be built.
  This will of course only build those runtime libraries, for which the
  particular compiler has been built.  Please note, that re-defining
! 'LANGUAGES' when calling 'make' *does not* work anymore!
  
     If the comparison of stage2 and stage3 fails, this normally indicates
  that the stage2 compiler has compiled GCC incorrectly, and is therefore
  a potentially serious bug which you should investigate and report.  (On
  a few systems, meaningful comparison of object files is impossible; they
  always appear "different".  If you encounter this problem, you will need
! to disable comparison in the 'Makefile'.)
  
     If you do not want to bootstrap your compiler, you can configure with
! '--disable-bootstrap'.  In particular cases, you may want to bootstrap
  your compiler even if the target system is not the same as the one you
  are building on: for example, you could build a
! 'powerpc-unknown-linux-gnu' toolchain on a 'powerpc64-unknown-linux-gnu'
! host.  In this case, pass '--enable-bootstrap' to the configure script.
  
!    'BUILD_CONFIG' can be used to bring in additional customization to
  the build.  It can be set to a whitespace-separated list of names.  For
! each such 'NAME', top-level 'config/NAME.mk' will be included by the
! top-level 'Makefile', bringing in any settings it contains.  The default
! 'BUILD_CONFIG' can be set using the configure option
! '--with-build-config=NAME...'.  Some examples of supported build
  configurations are:
  
! 'bootstrap-O1'
!      Removes any '-O'-started option from 'BOOT_CFLAGS', and adds '-O1'
!      to it.  'BUILD_CONFIG=bootstrap-O1' is equivalent to
!      'BOOT_CFLAGS='-g -O1''.
  
! 'bootstrap-O3'
! 'bootstrap-Og'
!      Analogous to 'bootstrap-O1'.
  
! 'bootstrap-lto'
       Enables Link-Time Optimization for host tools during bootstrapping.
!      'BUILD_CONFIG=bootstrap-lto' is equivalent to adding '-flto' to
!      'BOOT_CFLAGS'.  This option assumes that the host supports the
       linker plugin (e.g. GNU ld version 2.21 or later or GNU gold
       version 2.21 or later).
  
! 'bootstrap-lto-noplugin'
!      This option is similar to 'bootstrap-lto', but is intended for
       hosts that do not support the linker plugin.  Without the linker
       plugin static libraries are not compiled with link-time
       optimizations.  Since the GCC middle end and back end are in
!      'libbackend.a' this means that only the front end is actually LTO
       optimized.
  
! 'bootstrap-lto-lean'
!      This option is similar to 'bootstrap-lto', but is intended for
       faster build by only using LTO in the final bootstrap stage.  With
!      'make profiledbootstrap' the LTO frontend is trained only on
       generator files.
  
! 'bootstrap-debug'
       Verifies that the compiler generates the same executable code,
       whether or not it is asked to emit debug information.  To this end,
       this option builds stage2 host programs without debug information,
!      and uses 'contrib/compare-debug' to compare them with the stripped
!      stage3 object files.  If 'BOOT_CFLAGS' is overridden so as to not
       enable debug information, stage2 will have it, and stage3 won't.
       This option is enabled by default when GCC bootstrapping is
!      enabled, if 'strip' can turn object files compiled with and without
       debug info into identical object files.  In addition to better test
       coverage, this option makes default bootstraps faster and leaner.
  
! 'bootstrap-debug-big'
       Rather than comparing stripped object files, as in
!      'bootstrap-debug', this option saves internal compiler dumps during
       stage2 and stage3 and compares them as well, which helps catch
       additional potential problems, but at a great cost in terms of disk
!      space.  It can be specified in addition to 'bootstrap-debug'.
  
! 'bootstrap-debug-lean'
!      This option saves disk space compared with 'bootstrap-debug-big',
       but at the expense of some recompilation.  Instead of saving the
       dumps of stage2 and stage3 until the final compare, it uses
!      '-fcompare-debug' to generate, compare and remove the dumps during
       stage3, repeating the compilation that already took place in
       stage2, whose dumps were not saved.
  
! 'bootstrap-debug-lib'
       This option tests executable code invariance over debug information
!      generation on target libraries, just like 'bootstrap-debug-lean'
       tests it on host programs.  It builds stage3 libraries with
!      '-fcompare-debug', and it can be used along with any of the
!      'bootstrap-debug' options above.
  
!      There aren't '-lean' or '-big' counterparts to this option because
       most libraries are only build in stage3, so bootstrap compares
       would not get significant coverage.  Moreover, the few libraries
       built in stage2 are used in stage3 host programs, so we wouldn't
       want to compile stage2 libraries with different options for
       comparison purposes.
  
! 'bootstrap-debug-ckovw'
       Arranges for error messages to be issued if the compiler built on
!      any stage is run without the option '-fcompare-debug'.  This is
!      useful to verify the full '-fcompare-debug' testing coverage.  It
!      must be used along with 'bootstrap-debug-lean' and
!      'bootstrap-debug-lib'.
  
! 'bootstrap-cet'
       This option enables Intel CET for host tools during bootstrapping.
!      'BUILD_CONFIG=bootstrap-cet' is equivalent to adding
!      '-fcf-protection' to 'BOOT_CFLAGS'.  This option assumes that the
       host supports Intel CET (e.g. GNU assembler version 2.30 or later).
  
! 'bootstrap-time'
       Arranges for the run time of each program started by the GCC
!      driver, built in any stage, to be logged to 'time.log', in the top
       level of the build tree.
  
! 'bootstrap-asan'
       Compiles GCC itself using Address Sanitization in order to catch
       invalid memory accesses within the GCC code.
  
! 'bootstrap-hwasan'
       Compiles GCC itself using HWAddress Sanitization in order to catch
       invalid memory accesses within the GCC code.  This option is only
       available on AArch64 systems that are running Linux kernel version
--- 2686,2830 ----
  
       make BOOT_CFLAGS='-O' bootstrap
  
!    You can place non-default optimization flags into ‘BOOT_CFLAGS’; they
! are less well tested here than the default of ‘-g -O2’, but should still
  work.  In a few cases, you may find that you need to specify special
! flags such as ‘-msoft-float’ here to complete the bootstrap; or, if the
  native compiler miscompiles the stage1 compiler, you may need to work
! around this, by choosing ‘BOOT_CFLAGS’ to avoid the parts of the stage1
! compiler that were miscompiled, or by using ‘make bootstrap4’ to
  increase the number of stages of bootstrap.
  
!    ‘BOOT_CFLAGS’ does not apply to bootstrapped target libraries.  Since
  these are always compiled with the compiler currently being
! bootstrapped, you can use ‘CFLAGS_FOR_TARGET’ to modify their
  compilation flags, as for non-bootstrapped target libraries.  Again, if
  the native compiler miscompiles the stage1 compiler, you may need to
  work around this by avoiding non-working parts of the stage1 compiler.
! Use ‘STAGE1_TFLAGS’ to this end.
  
!    If you used the flag ‘--enable-languages=...’ to restrict the
  compilers to be built, only those you've actually enabled will be built.
  This will of course only build those runtime libraries, for which the
  particular compiler has been built.  Please note, that re-defining
! ‘LANGUAGES’ when calling ‘make’ *does not* work anymore!
  
     If the comparison of stage2 and stage3 fails, this normally indicates
  that the stage2 compiler has compiled GCC incorrectly, and is therefore
  a potentially serious bug which you should investigate and report.  (On
  a few systems, meaningful comparison of object files is impossible; they
  always appear "different".  If you encounter this problem, you will need
! to disable comparison in the ‘Makefile’.)
  
     If you do not want to bootstrap your compiler, you can configure with
! ‘--disable-bootstrap’.  In particular cases, you may want to bootstrap
  your compiler even if the target system is not the same as the one you
  are building on: for example, you could build a
! ‘powerpc-unknown-linux-gnu’ toolchain on a ‘powerpc64-unknown-linux-gnu’
! host.  In this case, pass ‘--enable-bootstrap’ to the configure script.
  
!    ‘BUILD_CONFIG’ can be used to bring in additional customization to
  the build.  It can be set to a whitespace-separated list of names.  For
! each such ‘NAME’, top-level ‘config/NAME.mk’ will be included by the
! top-level ‘Makefile’, bringing in any settings it contains.  The default
! ‘BUILD_CONFIG’ can be set using the configure option
! ‘--with-build-config=NAME...’.  Some examples of supported build
  configurations are:
  
! ‘bootstrap-O1’
!      Removes any ‘-O’-started option from ‘BOOT_CFLAGS’, and adds ‘-O1’
!      to it.  ‘BUILD_CONFIG=bootstrap-O1’ is equivalent to
!      ‘BOOT_CFLAGS='-g -O1'’.
  
! ‘bootstrap-O3’
! ‘bootstrap-Og’
!      Analogous to ‘bootstrap-O1’.
  
! ‘bootstrap-lto’
       Enables Link-Time Optimization for host tools during bootstrapping.
!      ‘BUILD_CONFIG=bootstrap-lto’ is equivalent to adding ‘-flto’ to
!      ‘BOOT_CFLAGS’.  This option assumes that the host supports the
       linker plugin (e.g. GNU ld version 2.21 or later or GNU gold
       version 2.21 or later).
  
! ‘bootstrap-lto-noplugin’
!      This option is similar to ‘bootstrap-lto’, but is intended for
       hosts that do not support the linker plugin.  Without the linker
       plugin static libraries are not compiled with link-time
       optimizations.  Since the GCC middle end and back end are in
!      ‘libbackend.a’ this means that only the front end is actually LTO
       optimized.
  
! ‘bootstrap-lto-lean’
!      This option is similar to ‘bootstrap-lto’, but is intended for
       faster build by only using LTO in the final bootstrap stage.  With
!      ‘make profiledbootstrap’ the LTO frontend is trained only on
       generator files.
  
! ‘bootstrap-debug’
       Verifies that the compiler generates the same executable code,
       whether or not it is asked to emit debug information.  To this end,
       this option builds stage2 host programs without debug information,
!      and uses ‘contrib/compare-debug’ to compare them with the stripped
!      stage3 object files.  If ‘BOOT_CFLAGS’ is overridden so as to not
       enable debug information, stage2 will have it, and stage3 won't.
       This option is enabled by default when GCC bootstrapping is
!      enabled, if ‘strip’ can turn object files compiled with and without
       debug info into identical object files.  In addition to better test
       coverage, this option makes default bootstraps faster and leaner.
  
! ‘bootstrap-debug-big’
       Rather than comparing stripped object files, as in
!      ‘bootstrap-debug’, this option saves internal compiler dumps during
       stage2 and stage3 and compares them as well, which helps catch
       additional potential problems, but at a great cost in terms of disk
!      space.  It can be specified in addition to ‘bootstrap-debug’.
  
! ‘bootstrap-debug-lean’
!      This option saves disk space compared with ‘bootstrap-debug-big’,
       but at the expense of some recompilation.  Instead of saving the
       dumps of stage2 and stage3 until the final compare, it uses
!      ‘-fcompare-debug’ to generate, compare and remove the dumps during
       stage3, repeating the compilation that already took place in
       stage2, whose dumps were not saved.
  
! ‘bootstrap-debug-lib’
       This option tests executable code invariance over debug information
!      generation on target libraries, just like ‘bootstrap-debug-lean’
       tests it on host programs.  It builds stage3 libraries with
!      ‘-fcompare-debug’, and it can be used along with any of the
!      ‘bootstrap-debug’ options above.
  
!      There aren't ‘-lean’ or ‘-big’ counterparts to this option because
       most libraries are only build in stage3, so bootstrap compares
       would not get significant coverage.  Moreover, the few libraries
       built in stage2 are used in stage3 host programs, so we wouldn't
       want to compile stage2 libraries with different options for
       comparison purposes.
  
! ‘bootstrap-debug-ckovw’
       Arranges for error messages to be issued if the compiler built on
!      any stage is run without the option ‘-fcompare-debug’.  This is
!      useful to verify the full ‘-fcompare-debug’ testing coverage.  It
!      must be used along with ‘bootstrap-debug-lean’ and
!      ‘bootstrap-debug-lib’.
  
! ‘bootstrap-cet’
       This option enables Intel CET for host tools during bootstrapping.
!      ‘BUILD_CONFIG=bootstrap-cet’ is equivalent to adding
!      ‘-fcf-protection’ to ‘BOOT_CFLAGS’.  This option assumes that the
       host supports Intel CET (e.g. GNU assembler version 2.30 or later).
  
! ‘bootstrap-time’
       Arranges for the run time of each program started by the GCC
!      driver, built in any stage, to be logged to ‘time.log’, in the top
       level of the build tree.
  
! ‘bootstrap-asan’
       Compiles GCC itself using Address Sanitization in order to catch
       invalid memory accesses within the GCC code.
  
! ‘bootstrap-hwasan’
       Compiles GCC itself using HWAddress Sanitization in order to catch
       invalid memory accesses within the GCC code.  This option is only
       available on AArch64 systems that are running Linux kernel version
*************** the cross compiler.  The installed nativ
*** 2843,2880 ****
  version 2.95 or later.
  
     Assuming you have already installed a native copy of GCC and
! configured your cross compiler, issue the command 'make', which performs
  the following steps:
  
!    * Build host tools necessary to build the compiler.
  
!    * Build target tools for use by the compiler such as binutils (bfd,
       binutils, gas, gprof, ld, and opcodes) if they have been
       individually linked or moved into the top level GCC source tree
       before configuring.
  
!    * Build the compiler (single stage only).
  
!    * Build runtime libraries using the compiler from the previous step.
  
     Note that if an error occurs in any step the make process will exit.
  
     If you are not building GNU binutils in the same source tree as GCC,
  you will need a cross-assembler and cross-linker installed before
! configuring GCC.  Put them in the directory 'PREFIX/TARGET/bin'.  Here
  is a table of the tools you should put in this directory:
  
! 'as'
       This should be the cross-assembler.
  
! 'ld'
       This should be the cross-linker.
  
! 'ar'
       This should be the cross-archiver: a program which can manipulate
       archive files (linker libraries) in the target machine's format.
  
! 'ranlib'
       This should be a program to construct a symbol table in an archive
       file.
  
--- 2843,2880 ----
  version 2.95 or later.
  
     Assuming you have already installed a native copy of GCC and
! configured your cross compiler, issue the command ‘make’, which performs
  the following steps:
  
!    • Build host tools necessary to build the compiler.
  
!    • Build target tools for use by the compiler such as binutils (bfd,
       binutils, gas, gprof, ld, and opcodes) if they have been
       individually linked or moved into the top level GCC source tree
       before configuring.
  
!    • Build the compiler (single stage only).
  
!    • Build runtime libraries using the compiler from the previous step.
  
     Note that if an error occurs in any step the make process will exit.
  
     If you are not building GNU binutils in the same source tree as GCC,
  you will need a cross-assembler and cross-linker installed before
! configuring GCC.  Put them in the directory ‘PREFIX/TARGET/bin’.  Here
  is a table of the tools you should put in this directory:
  
! ‘as’
       This should be the cross-assembler.
  
! ‘ld’
       This should be the cross-linker.
  
! ‘ar’
       This should be the cross-archiver: a program which can manipulate
       archive files (linker libraries) in the target machine's format.
  
! ‘ranlib’
       This should be a program to construct a symbol table in an archive
       file.
  
*************** and copy or link them to the proper plac
*** 2883,2908 ****
  find them when run later.
  
     The easiest way to provide these files is to build the Binutils
! package.  Configure it with the same '--host' and '--target' options
  that you use for configuring GCC, then build and install them.  They
  install their executables automatically into the proper directory.
  Alas, they do not support all the targets that GCC supports.
  
     If you are not building a C library in the same source tree as GCC,
  you should also provide the target libraries and headers before
! configuring GCC, specifying the directories with '--with-sysroot' or
! '--with-headers' and '--with-libs'.  Many targets also require "start
! files" such as 'crt0.o' and 'crtn.o' which are linked into each
! executable.  There may be several alternatives for 'crt0.o', for use
  with profiling or other compilation options.  Check your target's
! definition of 'STARTFILE_SPEC' to find out what start files it uses.
  
  5.3 Building in parallel
  ========================
  
  GNU Make 3.80 and above, which is necessary to build GCC, support
! building in parallel.  To activate this, you can use 'make -j 2' instead
! of 'make'.  You can also specify a bigger number, and in most cases
  using a value greater than the number of processors in your machine will
  result in fewer and shorter I/O latency hits, thus improving overall
  throughput; this is especially true for slow drives and network
--- 2883,2908 ----
  find them when run later.
  
     The easiest way to provide these files is to build the Binutils
! package.  Configure it with the same ‘--host’ and ‘--target’ options
  that you use for configuring GCC, then build and install them.  They
  install their executables automatically into the proper directory.
  Alas, they do not support all the targets that GCC supports.
  
     If you are not building a C library in the same source tree as GCC,
  you should also provide the target libraries and headers before
! configuring GCC, specifying the directories with ‘--with-sysroot’ or
! ‘--with-headers’ and ‘--with-libs’.  Many targets also require "start
! files" such as ‘crt0.o’ and ‘crtn.o’ which are linked into each
! executable.  There may be several alternatives for ‘crt0.o’, for use
  with profiling or other compilation options.  Check your target's
! definition of ‘STARTFILE_SPEC’ to find out what start files it uses.
  
  5.3 Building in parallel
  ========================
  
  GNU Make 3.80 and above, which is necessary to build GCC, support
! building in parallel.  To activate this, you can use ‘make -j 2’ instead
! of ‘make’.  You can also specify a bigger number, and in most cases
  using a value greater than the number of processors in your machine will
  result in fewer and shorter I/O latency hits, thus improving overall
  throughput; this is especially true for slow drives and network
*************** filesystems.
*** 2924,2947 ****
  It is possible to use profile feedback to optimize the compiler itself.
  This should result in a faster compiler binary.  Experiments done on x86
  using gcc 3.3 showed approximately 7 percent speedup on compiling C
! programs.  To bootstrap the compiler with profile feedback, use 'make
! profiledbootstrap'.
  
!    When 'make profiledbootstrap' is run, it will first build a 'stage1'
! compiler.  This compiler is used to build a 'stageprofile' compiler
  instrumented to collect execution counts of instruction and branch
! probabilities.  Training run is done by building 'stagetrain' compiler.
! Finally a 'stagefeedback' compiler is built using the information
  collected.
  
     Unlike standard bootstrap, several additional restrictions apply.
! The compiler used to build 'stage1' needs to support a 64-bit integral
  type.  It is recommended to only use GCC for this.
  
     On Linux/x86_64 hosts with some restrictions (no virtualization) it
! is also possible to do autofdo build with 'make autoprofiledbootstrap'.
  This uses Linux perf to sample branches in the binary and then rebuild
! it with feedback derived from the profile.  Linux perf and the 'autofdo'
  toolkit needs to be installed for this.
  
     Only the profile from the current build is used, so when an error
--- 2924,2947 ----
  It is possible to use profile feedback to optimize the compiler itself.
  This should result in a faster compiler binary.  Experiments done on x86
  using gcc 3.3 showed approximately 7 percent speedup on compiling C
! programs.  To bootstrap the compiler with profile feedback, use ‘make
! profiledbootstrap’.
  
!    When ‘make profiledbootstrap’ is run, it will first build a ‘stage1’
! compiler.  This compiler is used to build a ‘stageprofile’ compiler
  instrumented to collect execution counts of instruction and branch
! probabilities.  Training run is done by building ‘stagetrain’ compiler.
! Finally a ‘stagefeedback’ compiler is built using the information
  collected.
  
     Unlike standard bootstrap, several additional restrictions apply.
! The compiler used to build ‘stage1’ needs to support a 64-bit integral
  type.  It is recommended to only use GCC for this.
  
     On Linux/x86_64 hosts with some restrictions (no virtualization) it
! is also possible to do autofdo build with ‘make autoprofiledbootstrap’.
  This uses Linux perf to sample branches in the binary and then rebuild
! it with feedback derived from the profile.  Linux perf and the ‘autofdo’
  toolkit needs to be installed for this.
  
     Only the profile from the current build is used, so when an error
*************** in the source tarball.
*** 2968,2977 ****
  DejaGnu, Tcl, and Expect; the DejaGnu site has links to these.  Some
  optional tests also require Python3 and pytest module.
  
!    If the directories where 'runtest' and 'expect' were installed are
! not in the 'PATH', you may need to set the following environment
  variables appropriately, as in the following example (which assumes that
! DejaGnu has been installed under '/usr/local'):
  
       TCL_LIBRARY = /usr/local/share/tcl8.0
       DEJAGNULIBS = /usr/local/share/dejagnu
--- 2968,2977 ----
  DejaGnu, Tcl, and Expect; the DejaGnu site has links to these.  Some
  optional tests also require Python3 and pytest module.
  
!    If the directories where ‘runtest’ and ‘expect’ were installed are
! not in the ‘PATH’, you may need to set the following environment
  variables appropriately, as in the following example (which assumes that
! DejaGnu has been installed under ‘/usr/local’):
  
       TCL_LIBRARY = /usr/local/share/tcl8.0
       DEJAGNULIBS = /usr/local/share/dejagnu
*************** portability in the DejaGnu code.)
*** 2985,2992 ****
  
     This will test various components of GCC, such as compiler front ends
  and runtime libraries.  While running the testsuite, DejaGnu might emit
! some harmless messages resembling 'WARNING: Couldn't find the global
! config file.' or 'WARNING: Couldn't find tool init file' that can be
  ignored.
  
     If you are testing a cross-compiler, you may want to run the
--- 2985,2992 ----
  
     This will test various components of GCC, such as compiler front ends
  and runtime libraries.  While running the testsuite, DejaGnu might emit
! some harmless messages resembling ‘WARNING: Couldn't find the global
! config file.’ or ‘WARNING: Couldn't find tool init file’ that can be
  ignored.
  
     If you are testing a cross-compiler, you may want to run the
*************** testsuite on a simulator as described at
*** 2996,3019 ****
  6.1 How can you run the testsuite on selected tests?
  ====================================================
  
! In order to run sets of tests selectively, there are targets 'make
! check-gcc' and language specific 'make check-c', 'make check-c++', 'make
! check-d' 'make check-fortran', 'make check-ada', 'make check-m2', 'make
! check-objc', 'make check-obj-c++', 'make check-lto' in the 'gcc'
! subdirectory of the object directory.  You can also just run 'make
! check' in a subdirectory of the object directory.
  
!    A more selective way to just run all 'gcc' execute tests in the
  testsuite is to use
  
       make check-gcc RUNTESTFLAGS="execute.exp OTHER-OPTIONS"
  
!    Likewise, in order to run only the 'g++' "old-deja" tests in the
! testsuite with filenames matching '9805*', you would use
  
       make check-g++ RUNTESTFLAGS="old-deja.exp=9805* OTHER-OPTIONS"
  
!    The file-matching expression following FILENAME'.exp=' is treated as
  a series of whitespace-delimited glob expressions so that multiple
  patterns may be passed, although any whitespace must either be escaped
  or surrounded by single quotes if multiple expressions are desired.  For
--- 2996,3019 ----
  6.1 How can you run the testsuite on selected tests?
  ====================================================
  
! In order to run sets of tests selectively, there are targets ‘make
! check-gcc’ and language specific ‘make check-c’, ‘make check-c++’, ‘make
! check-d’ ‘make check-fortran’, ‘make check-ada’, ‘make check-m2’, ‘make
! check-objc’, ‘make check-obj-c++’, ‘make check-lto’ in the ‘gcc’
! subdirectory of the object directory.  You can also just run ‘make
! check’ in a subdirectory of the object directory.
  
!    A more selective way to just run all ‘gcc’ execute tests in the
  testsuite is to use
  
       make check-gcc RUNTESTFLAGS="execute.exp OTHER-OPTIONS"
  
!    Likewise, in order to run only the ‘g++’ "old-deja" tests in the
! testsuite with filenames matching ‘9805*’, you would use
  
       make check-g++ RUNTESTFLAGS="old-deja.exp=9805* OTHER-OPTIONS"
  
!    The file-matching expression following FILENAME‘.exp=’ is treated as
  a series of whitespace-delimited glob expressions so that multiple
  patterns may be passed, although any whitespace must either be escaped
  or surrounded by single quotes if multiple expressions are desired.  For
*************** example,
*** 3022,3045 ****
       make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c OTHER-OPTIONS"
       make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' OTHER-OPTIONS"
  
!    The '*.exp' files are located in the testsuite directories of the GCC
! source, the most important ones being 'compile.exp', 'execute.exp',
! 'dg.exp' and 'old-deja.exp'.  To get a list of the possible '*.exp'
! files, pipe the output of 'make check' into a file and look at the
! 'Running ... .exp' lines.
  
  6.2 Passing options and running multiple testsuites
  ===================================================
  
  You can pass multiple options to the testsuite using the
! '--target_board' option of DejaGNU, either passed as part of
! 'RUNTESTFLAGS', or directly to 'runtest' if you prefer to work outside
  the makefiles.  For example,
  
       make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
  
!    will run the standard 'g++' testsuites ("unix" is the target name for
! a standard native testsuite situation), passing '-O3 -fmerge-constants'
  to the compiler on every test, i.e., slashes separate options.
  
     You can run the testsuites multiple times using combinations of
--- 3022,3045 ----
       make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c OTHER-OPTIONS"
       make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' OTHER-OPTIONS"
  
!    The ‘*.exp’ files are located in the testsuite directories of the GCC
! source, the most important ones being ‘compile.exp’, ‘execute.exp’,
! ‘dg.exp’ and ‘old-deja.exp’.  To get a list of the possible ‘*.exp’
! files, pipe the output of ‘make check’ into a file and look at the
! ‘Running ... .exp’ lines.
  
  6.2 Passing options and running multiple testsuites
  ===================================================
  
  You can pass multiple options to the testsuite using the
! ‘--target_board’ option of DejaGNU, either passed as part of
! ‘RUNTESTFLAGS’, or directly to ‘runtest’ if you prefer to work outside
  the makefiles.  For example,
  
       make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
  
!    will run the standard ‘g++’ testsuites ("unix" is the target name for
! a standard native testsuite situation), passing ‘-O3 -fmerge-constants’
  to the compiler on every test, i.e., slashes separate options.
  
     You can run the testsuites multiple times using combinations of
*************** options with a syntax similar to the bra
*** 3049,3055 ****
  
     (Note the empty option caused by the trailing comma in the final
  group.)  The following will run each testsuite eight times using the
! 'arm-sim' target, as if you had specified all possible combinations
  yourself:
  
       --target_board='arm-sim/-mhard-float/-O1 \
--- 3049,3055 ----
  
     (Note the empty option caused by the trailing comma in the final
  group.)  The following will run each testsuite eight times using the
! ‘arm-sim’ target, as if you had specified all possible combinations
  yourself:
  
       --target_board='arm-sim/-mhard-float/-O1 \
*************** This list:
*** 3066,3078 ****
  
       ..."--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}"
  
!    will generate four combinations, all involving '-Wextra'.
  
     The disadvantage to this method is that the testsuites are run in
  serial, which is a waste on multiprocessor systems.  For users with GNU
  Make and a shell which performs brace expansion, you can run the
  testsuites in parallel by having the shell perform the combinations and
! 'make' do the parallel runs.  Instead of using '--target_board', use a
  special makefile target:
  
       make -jN check-TESTSUITE//TEST-TARGET/OPTION1/OPTION2/...
--- 3066,3078 ----
  
       ..."--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}"
  
!    will generate four combinations, all involving ‘-Wextra’.
  
     The disadvantage to this method is that the testsuites are run in
  serial, which is a waste on multiprocessor systems.  For users with GNU
  Make and a shell which performs brace expansion, you can run the
  testsuites in parallel by having the shell perform the combinations and
! ‘make’ do the parallel runs.  Instead of using ‘--target_board’, use a
  special makefile target:
  
       make -jN check-TESTSUITE//TEST-TARGET/OPTION1/OPTION2/...
*************** special makefile target:
*** 3083,3107 ****
  
     will run three concurrent "make-gcc" testsuites, eventually testing
  all ten combinations as described above.  Note that this is currently
! only supported in the 'gcc' subdirectory.  (To see how this works, try
! typing 'echo' before the example given here.)
  
  6.3 How to interpret test results
  =================================
  
! The result of running the testsuite are various '*.sum' and '*.log'
! files in the testsuite subdirectories.  The '*.log' files contain a
  detailed log of the compiler invocations and the corresponding results,
! the '*.sum' files summarize the results.  These summaries contain status
  codes for all tests:
  
!    * PASS: the test passed as expected
!    * XPASS: the test unexpectedly passed
!    * FAIL: the test unexpectedly failed
!    * XFAIL: the test failed as expected
!    * UNSUPPORTED: the test is not supported on this platform
!    * ERROR: the testsuite detected an error
!    * WARNING: the testsuite detected a possible problem
  
     It is normal for some tests to report unexpected failures.  At the
  current time the testing harness does not allow fine grained control
--- 3083,3107 ----
  
     will run three concurrent "make-gcc" testsuites, eventually testing
  all ten combinations as described above.  Note that this is currently
! only supported in the ‘gcc’ subdirectory.  (To see how this works, try
! typing ‘echo’ before the example given here.)
  
  6.3 How to interpret test results
  =================================
  
! The result of running the testsuite are various ‘*.sum’ and ‘*.log’
! files in the testsuite subdirectories.  The ‘*.log’ files contain a
  detailed log of the compiler invocations and the corresponding results,
! the ‘*.sum’ files summarize the results.  These summaries contain status
  codes for all tests:
  
!    • PASS: the test passed as expected
!    • XPASS: the test unexpectedly passed
!    • FAIL: the test unexpectedly failed
!    • XFAIL: the test failed as expected
!    • UNSUPPORTED: the test is not supported on this platform
!    • ERROR: the testsuite detected an error
!    • WARNING: the testsuite detected a possible problem
  
     It is normal for some tests to report unexpected failures.  At the
  current time the testing harness does not allow fine grained control
*************** fixed in future releases.
*** 3112,3124 ****
  ===========================
  
  If you want to report the results to the GCC project, use the
! 'contrib/test_summary' shell script.  Start it in the OBJDIR with
  
       SRCDIR/contrib/test_summary -p your_commentary.txt \
           -m gcc-testresults@gcc.gnu.org |sh
  
!    This script uses the 'Mail' program to send the results, so make sure
! it is in your 'PATH'.  The file 'your_commentary.txt' is prepended to
  the testsuite summary and should contain any special remarks you have on
  your results or your build environment.  Please do not edit the
  testsuite result block or the subject line, as these messages may be
--- 3112,3124 ----
  ===========================
  
  If you want to report the results to the GCC project, use the
! ‘contrib/test_summary’ shell script.  Start it in the OBJDIR with
  
       SRCDIR/contrib/test_summary -p your_commentary.txt \
           -m gcc-testresults@gcc.gnu.org |sh
  
!    This script uses the ‘Mail’ program to send the results, so make sure
! it is in your ‘PATH’.  The file ‘your_commentary.txt’ is prepended to
  the testsuite summary and should contain any special remarks you have on
  your results or your build environment.  Please do not edit the
  testsuite result block or the subject line, as these messages may be
*************** that depend on this debugging informatio
*** 3141,3177 ****
  instance).
  
     That step completes the installation of GCC; user level binaries can
! be found in 'PREFIX/bin' where PREFIX is the value you specified with
! the '--prefix' to configure (or '/usr/local' by default).  (If you
! specified '--bindir', that directory will be used instead; otherwise, if
! you specified '--exec-prefix', 'EXEC-PREFIX/bin' will be used.)  Headers
! for the C++ library are installed in 'PREFIX/include'; libraries in
! 'LIBDIR' (normally 'PREFIX/lib'); internal parts of the compiler in
! 'LIBDIR/gcc' and 'LIBEXECDIR/gcc'; documentation in info format in
! 'INFODIR' (normally 'PREFIX/info').
  
     When installing cross-compilers, GCC's executables are not only
! installed into 'BINDIR', that is, 'EXEC-PREFIX/bin', but additionally
! into 'EXEC-PREFIX/TARGET-ALIAS/bin', if that directory exists.
! Typically, such "tooldirs" hold target-specific binutils, including
  assembler and linker.
  
!    Installation into a temporary staging area or into a 'chroot' jail
  can be achieved with the command
  
       make DESTDIR=PATH-TO-ROOTDIR install
  
  where PATH-TO-ROOTDIR is the absolute path of a directory relative to
  which all installation paths will be interpreted.  Note that the
! directory specified by 'DESTDIR' need not exist yet; it will be created
  if necessary.
  
!    There is a subtle point with tooldirs and 'DESTDIR': If you relocate
! a cross-compiler installation with e.g. 'DESTDIR=ROOTDIR', then the
! directory 'ROOTDIR/EXEC-PREFIX/TARGET-ALIAS/bin' will be filled with
  duplicated GCC executables only if it already exists, it will not be
  created otherwise.  This is regarded as a feature, not as a bug, because
! it gives slightly more control to the packagers using the 'DESTDIR'
  feature.
  
     You can install stripped programs and libraries with
--- 3141,3177 ----
  instance).
  
     That step completes the installation of GCC; user level binaries can
! be found in ‘PREFIX/bin’ where PREFIX is the value you specified with
! the ‘--prefix’ to configure (or ‘/usr/local’ by default).  (If you
! specified ‘--bindir’, that directory will be used instead; otherwise, if
! you specified ‘--exec-prefix’, ‘EXEC-PREFIX/bin’ will be used.)  Headers
! for the C++ library are installed in ‘PREFIX/include’; libraries in
! ‘LIBDIR’ (normally ‘PREFIX/lib’); internal parts of the compiler in
! ‘LIBDIR/gcc’ and ‘LIBEXECDIR/gcc’; documentation in info format in
! ‘INFODIR’ (normally ‘PREFIX/info’).
  
     When installing cross-compilers, GCC's executables are not only
! installed into ‘BINDIR’, that is, ‘EXEC-PREFIX/bin’, but additionally
! into ‘EXEC-PREFIX/TARGET-ALIAS/bin’, if that directory exists.
! Typically, such “tooldirs” hold target-specific binutils, including
  assembler and linker.
  
!    Installation into a temporary staging area or into a ‘chroot’ jail
  can be achieved with the command
  
       make DESTDIR=PATH-TO-ROOTDIR install
  
  where PATH-TO-ROOTDIR is the absolute path of a directory relative to
  which all installation paths will be interpreted.  Note that the
! directory specified by ‘DESTDIR’ need not exist yet; it will be created
  if necessary.
  
!    There is a subtle point with tooldirs and ‘DESTDIR’: If you relocate
! a cross-compiler installation with e.g. ‘DESTDIR=ROOTDIR’, then the
! directory ‘ROOTDIR/EXEC-PREFIX/TARGET-ALIAS/bin’ will be filled with
  duplicated GCC executables only if it already exists, it will not be
  created otherwise.  This is regarded as a feature, not as a bug, because
! it gives slightly more control to the packagers using the ‘DESTDIR’
  feature.
  
     You can install stripped programs and libraries with
*************** various reasons.
*** 3219,3243 ****
  them.  If you have any problems installing them, please contact their
  makers.
  
!    * AIX:
!         * AIX Open Source Packages (AIX5L AIX 6.1 AIX 7.1).
  
!    * DOS--DJGPP.
  
!    * HP-UX:
!         * HP-UX Porting Center;
  
!    * macOS:
!         * The Homebrew package manager;
!         * MacPorts.
  
!    * Microsoft Windows:
!         * The Cygwin project;
!         * The MinGW and mingw-w64 projects.
  
!    * OpenPKG offers binaries for quite a number of platforms.
  
!    * The GFortran Wiki has links to GNU Fortran binaries for several
       platforms.
  
  
--- 3219,3243 ----
  them.  If you have any problems installing them, please contact their
  makers.
  
!    • AIX:
!         • AIX Open Source Packages (AIX5L AIX 6.1 AIX 7.1).
  
!    • DOS--DJGPP.
  
!    • HP-UX:
!         • HP-UX Porting Center;
  
!    • macOS:
!         • The Homebrew package manager;
!         • MacPorts.
  
!    • Microsoft Windows:
!         • The Cygwin project;
!         • The MinGW and mingw-w64 projects.
  
!    • OpenPKG offers binaries for quite a number of platforms.
  
!    • The GFortran Wiki has links to GNU Fortran binaries for several
       platforms.
  
  
*************** have to.
*** 3257,3301 ****
  aarch64*-*-*
  ============
  
! Binutils pre 2.24 does not have support for selecting '-mabi' and does
  not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
! not support option '-mabi=ilp32'.
  
     To enable a workaround for the Cortex-A53 erratum number 835769 by
  default (for all CPUs regardless of -mcpu option given) at configure
! time use the '--enable-fix-cortex-a53-835769' option.  This will enable
  the fix by default and can be explicitly disabled during compilation by
! passing the '-mno-fix-cortex-a53-835769' option.  Conversely,
! '--disable-fix-cortex-a53-835769' will disable the workaround by
  default.  The workaround is disabled by default if neither of
! '--enable-fix-cortex-a53-835769' or '--disable-fix-cortex-a53-835769' is
  given at configure time.
  
     To enable a workaround for the Cortex-A53 erratum number 843419 by
  default (for all CPUs regardless of -mcpu option given) at configure
! time use the '--enable-fix-cortex-a53-843419' option.  This workaround
  is applied at link time.  Enabling the workaround will cause GCC to pass
  the relevant option to the linker.  It can be explicitly disabled during
! compilation by passing the '-mno-fix-cortex-a53-843419' option.
! Conversely, '--disable-fix-cortex-a53-843419' will disable the
  workaround by default.  The workaround is disabled by default if neither
! of '--enable-fix-cortex-a53-843419' or '--disable-fix-cortex-a53-843419'
  is given at configure time.
  
     To enable Branch Target Identification Mechanism and Return Address
  Signing by default at configure time use the
! '--enable-standard-branch-protection' option.  This is equivalent to
! having '-mbranch-protection=standard' during compilation.  This can be
  explicitly disabled during compilation by passing the
! '-mbranch-protection=none' option which turns off all types of branch
! protections.  Conversely, '--disable-standard-branch-protection' will
  disable both the protections by default.  This mechanism is turned off
  by default if neither of the options are given at configure time.
  
  amd64-*-solaris2*
  =================
  
! This is a synonym for 'x86_64-*-solaris2*'.
  
  amdgcn-*-amdhsa
  ===============
--- 3257,3301 ----
  aarch64*-*-*
  ============
  
! Binutils pre 2.24 does not have support for selecting ‘-mabi’ and does
  not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
! not support option ‘-mabi=ilp32’.
  
     To enable a workaround for the Cortex-A53 erratum number 835769 by
  default (for all CPUs regardless of -mcpu option given) at configure
! time use the ‘--enable-fix-cortex-a53-835769’ option.  This will enable
  the fix by default and can be explicitly disabled during compilation by
! passing the ‘-mno-fix-cortex-a53-835769’ option.  Conversely,
! ‘--disable-fix-cortex-a53-835769’ will disable the workaround by
  default.  The workaround is disabled by default if neither of
! ‘--enable-fix-cortex-a53-835769’ or ‘--disable-fix-cortex-a53-835769’ is
  given at configure time.
  
     To enable a workaround for the Cortex-A53 erratum number 843419 by
  default (for all CPUs regardless of -mcpu option given) at configure
! time use the ‘--enable-fix-cortex-a53-843419’ option.  This workaround
  is applied at link time.  Enabling the workaround will cause GCC to pass
  the relevant option to the linker.  It can be explicitly disabled during
! compilation by passing the ‘-mno-fix-cortex-a53-843419’ option.
! Conversely, ‘--disable-fix-cortex-a53-843419’ will disable the
  workaround by default.  The workaround is disabled by default if neither
! of ‘--enable-fix-cortex-a53-843419’ or ‘--disable-fix-cortex-a53-843419’
  is given at configure time.
  
     To enable Branch Target Identification Mechanism and Return Address
  Signing by default at configure time use the
! ‘--enable-standard-branch-protection’ option.  This is equivalent to
! having ‘-mbranch-protection=standard’ during compilation.  This can be
  explicitly disabled during compilation by passing the
! ‘-mbranch-protection=none’ option which turns off all types of branch
! protections.  Conversely, ‘--disable-standard-branch-protection’ will
  disable both the protections by default.  This mechanism is turned off
  by default if neither of the options are given at configure time.
  
  amd64-*-solaris2*
  =================
  
! This is a synonym for ‘x86_64-*-solaris2*’.
  
  amdgcn-*-amdhsa
  ===============
*************** amdgcn-*-amdhsa
*** 3303,3340 ****
  AMD GCN GPU target.
  
     Instead of GNU Binutils, you will need to install LLVM 15, or later,
! and copy 'bin/llvm-mc' to 'amdgcn-amdhsa/bin/as', 'bin/lld' to
! 'amdgcn-amdhsa/bin/ld', 'bin/llvm-nm' to 'amdgcn-amdhsa/bin/nm', and
! 'bin/llvm-ar' to both 'bin/amdgcn-amdhsa-ar' and
! 'bin/amdgcn-amdhsa-ranlib'.  Note that LLVM 13.0.1 or LLVM 14 can be
! used by specifying a '--with-multilib-list=' that does not list
! 'gfx1100' and 'gfx1103'.
  
     Use Newlib (4.3.0 or newer; 4.4.0 contains some improvements and git
  commit 7dd4eb1db (2025-03-25, post-4.4.0) fixes device console output
  for GFX10 and GFX11 devices).
  
     To run the binaries, install the HSA Runtime from the ROCm Platform,
! and use 'libexec/gcc/amdhsa-amdhsa/VERSION/gcn-run' to launch them on
  the GPU.
  
     To enable support for GCN3 Fiji devices (gfx803), GCC has to be
! configured with '--with-arch=fiji' or '--with-multilib-list=fiji,...'.
  Note that support for Fiji devices has been removed in ROCm 4.0 and
  support in LLVM was deprecated and has been removed in LLVM 18.
  
  arc-*-elf32
  ===========
  
! Use 'configure --target=arc-elf32 --with-cpu=CPU
! --enable-languages="c,c++"' to configure GCC, with CPU being one of
! 'arc600', 'arc601', or 'arc700'.
  
  arc-linux-uclibc
  ================
  
! Use 'configure --target=arc-linux-uclibc --with-cpu=arc700
! --enable-languages="c,c++"' to configure GCC.
  
  arm-*-eabi
  ==========
--- 3303,3340 ----
  AMD GCN GPU target.
  
     Instead of GNU Binutils, you will need to install LLVM 15, or later,
! and copy ‘bin/llvm-mc’ to ‘amdgcn-amdhsa/bin/as’, ‘bin/lld’ to
! ‘amdgcn-amdhsa/bin/ld’, ‘bin/llvm-nm’ to ‘amdgcn-amdhsa/bin/nm’, and
! ‘bin/llvm-ar’ to both ‘bin/amdgcn-amdhsa-ar’ and
! ‘bin/amdgcn-amdhsa-ranlib’.  Note that LLVM 13.0.1 or LLVM 14 can be
! used by specifying a ‘--with-multilib-list=’ that does not list
! ‘gfx1100’ and ‘gfx1103’.
  
     Use Newlib (4.3.0 or newer; 4.4.0 contains some improvements and git
  commit 7dd4eb1db (2025-03-25, post-4.4.0) fixes device console output
  for GFX10 and GFX11 devices).
  
     To run the binaries, install the HSA Runtime from the ROCm Platform,
! and use ‘libexec/gcc/amdhsa-amdhsa/VERSION/gcn-run’ to launch them on
  the GPU.
  
     To enable support for GCN3 Fiji devices (gfx803), GCC has to be
! configured with ‘--with-arch=fiji’ or ‘--with-multilib-list=fiji,...’.
  Note that support for Fiji devices has been removed in ROCm 4.0 and
  support in LLVM was deprecated and has been removed in LLVM 18.
  
  arc-*-elf32
  ===========
  
! Use ‘configure --target=arc-elf32 --with-cpu=CPU
! --enable-languages="c,c++"’ to configure GCC, with CPU being one of
! ‘arc600’, ‘arc601’, or ‘arc700’.
  
  arc-linux-uclibc
  ================
  
! Use ‘configure --target=arc-linux-uclibc --with-cpu=arc700
! --enable-languages="c,c++"’ to configure GCC.
  
  arm-*-eabi
  ==========
*************** arm-*-eabi
*** 3342,3348 ****
  ARM-family processors.
  
     Building the Ada frontend commonly fails (an infinite loop executing
! 'xsinfo') if the host compiler is GNAT 4.8.  Host compilers built from
  the GNAT 4.6, 4.9 or 5 release branches are known to succeed.
  
  avr
--- 3342,3348 ----
  ARM-family processors.
  
     Building the Ada frontend commonly fails (an infinite loop executing
! ‘xsinfo’) if the host compiler is GNAT 4.8.  Host compilers built from
  the GNAT 4.6, 4.9 or 5 release branches are known to succeed.
  
  avr
*************** ATMEL AVR-family micro controllers.  The
*** 3352,3364 ****
  applications.  There are no standard Unix configurations.  *Note AVR
  Options: (gcc)AVR Options, for the list of supported MCU types.
  
!    Use 'configure --target=avr --enable-languages="c"' to configure GCC.
  
     Further installation notes and other useful information about AVR
  tools can also be obtained from:
  
!    * http://www.nongnu.org/avr/
!    * http://www.amelek.gda.pl/avr/
  
     The following error:
       Error: register required
--- 3352,3364 ----
  applications.  There are no standard Unix configurations.  *Note AVR
  Options: (gcc)AVR Options, for the list of supported MCU types.
  
!    Use ‘configure --target=avr --enable-languages="c"’ to configure GCC.
  
     Further installation notes and other useful information about AVR
  tools can also be obtained from:
  
!    • http://www.nongnu.org/avr/
!    • http://www.amelek.gda.pl/avr/
  
     The following error:
       Error: register required
*************** example the ETRAX series.  These are use
*** 3384,3390 ****
     *Note CRIS Options: (gcc)CRIS Options, for a list of CRIS-specific
  options.
  
!    Use 'configure --target=cris-elf' to configure GCC for building a
  cross-compiler for CRIS.
  
  DOS
--- 3384,3390 ----
     *Note CRIS Options: (gcc)CRIS Options, for a list of CRIS-specific
  options.
  
!    Use ‘configure --target=cris-elf’ to configure GCC for building a
  cross-compiler for CRIS.
  
  DOS
*************** all CPU architectures.  There are no kno
*** 3410,3421 ****
  files and libraries with different debugging formats.
  
     We recommend bootstrapping against the latest GNU binutils or the
! version found in the 'devel/binutils' port.  This also has been known to
  enable additional features and improve overall testsuite results.
  
     Ada and D (or rather their respective libraries) are broken on
  FreeBSD/i386.  This also affects building 32-bit libraries on
! FreeBSD/amd64, so configure with '--disable-multilib' there in case you
  are building one of these front ends.
  
     Go (or rather libgo) is generally broken on FreeBSD.
--- 3410,3421 ----
  files and libraries with different debugging formats.
  
     We recommend bootstrapping against the latest GNU binutils or the
! version found in the ‘devel/binutils’ port.  This also has been known to
  enable additional features and improve overall testsuite results.
  
     Ada and D (or rather their respective libraries) are broken on
  FreeBSD/i386.  This also affects building 32-bit libraries on
! FreeBSD/amd64, so configure with ‘--disable-multilib’ there in case you
  are building one of these front ends.
  
     Go (or rather libgo) is generally broken on FreeBSD.
*************** hppa*-hp-hpux*
*** 3444,3457 ****
  We require using gas on all hppa platforms.  Version 2.19 or later is
  recommended.
  
!    It may be helpful to configure GCC with the '--with-gnu-as' and
! '--with-as=...' options to ensure that GCC can find GAS.
  
     There are two default scheduling models for instructions.  These are
  PROCESSOR_7100LC and PROCESSOR_8000.  They are selected from the pa-risc
  architecture specified for the target machine when configuring.
  PROCESSOR_8000 is the default.  PROCESSOR_7100LC is selected when the
! target is a 'hppa1*' machine.
  
     The PROCESSOR_8000 model is not well suited to older processors.
  Thus, it is important to completely specify the machine architecture
--- 3444,3457 ----
  We require using gas on all hppa platforms.  Version 2.19 or later is
  recommended.
  
!    It may be helpful to configure GCC with the ‘--with-gnu-as’ and
! ‘--with-as=...’ options to ensure that GCC can find GAS.
  
     There are two default scheduling models for instructions.  These are
  PROCESSOR_7100LC and PROCESSOR_8000.  They are selected from the pa-risc
  architecture specified for the target machine when configuring.
  PROCESSOR_8000 is the default.  PROCESSOR_7100LC is selected when the
! target is a ‘hppa1*’ machine.
  
     The PROCESSOR_8000 model is not well suited to older processors.
  Thus, it is important to completely specify the machine architecture
*************** default scheduling model is desired.
*** 3464,3475 ****
  namespace change might cause problems when bootstrapping with an earlier
  version of GCC or the HP compiler as essentially the same namespace is
  required for an entire build.  This problem can be avoided in a number
! of ways.  With HP cc, 'UNIX_STD' can be set to '95' or '98'.  Another
! way is to add an appropriate set of predefines to 'CC'.  The description
! for the 'munix=' option contains a list of the predefines used with each
  standard.
  
!    More specific information to 'hppa*-hp-hpux*' targets follows.
  
  hppa*-hp-hpux11
  ===============
--- 3464,3475 ----
  namespace change might cause problems when bootstrapping with an earlier
  version of GCC or the HP compiler as essentially the same namespace is
  required for an entire build.  This problem can be avoided in a number
! of ways.  With HP cc, ‘UNIX_STD’ can be set to ‘95’ or ‘98’.  Another
! way is to add an appropriate set of predefines to ‘CC’.  The description
! for the ‘munix=’ option contains a list of the predefines used with each
  standard.
  
!    More specific information to ‘hppa*-hp-hpux*’ targets follows.
  
  hppa*-hp-hpux11
  ===============
*************** start from a binary distribution.
*** 3496,3526 ****
  
     On 64-bit capable systems, there are two distinct targets.  Different
  installation prefixes must be used if both are to be installed on the
! same system.  The 'hppa[1-2]*-hp-hpux11*' target generates code for the
  32-bit PA-RISC runtime architecture and uses the HP linker.  The
! 'hppa64-hp-hpux11*' target generates 64-bit code for the PA-RISC 2.0
  architecture.
  
     The script config.guess now selects the target type based on the
! compiler detected during configuration.  You must define 'PATH' or 'CC'
  so that configure finds an appropriate compiler for the initial
! bootstrap.  When 'CC' is used, the definition should contain the options
! that are needed whenever 'CC' is used.
  
     Specifically, options that determine the runtime architecture must be
! in 'CC' to correctly select the target for the build.  It is also
! convenient to place many other compiler options in 'CC'.  For example,
! 'CC="cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE"' can be
  used to bootstrap the GCC 3.3 branch with the HP compiler in 64-bit
! K&R/bundled mode.  The '+DA2.0W' option will result in the automatic
! selection of the 'hppa64-hp-hpux11*' target.  The macro definition table
  of cpp needs to be increased for a successful build with the HP
  compiler.  _CLASSIC_TYPES and _HPUX_SOURCE need to be defined when
! building with the bundled compiler, or when using the '-Ac' option.
! These defines aren't necessary with '-Ae'.
  
!    It is best to explicitly configure the 'hppa64-hp-hpux11*' target
! with the '--with-ld=...' option.  This overrides the standard search for
  ld.  The two linkers supported on this target require different
  commands.  The default linker is determined during configuration.  As a
  result, it's not possible to switch linkers in the middle of a GCC
--- 3496,3526 ----
  
     On 64-bit capable systems, there are two distinct targets.  Different
  installation prefixes must be used if both are to be installed on the
! same system.  The ‘hppa[1-2]*-hp-hpux11*’ target generates code for the
  32-bit PA-RISC runtime architecture and uses the HP linker.  The
! ‘hppa64-hp-hpux11*’ target generates 64-bit code for the PA-RISC 2.0
  architecture.
  
     The script config.guess now selects the target type based on the
! compiler detected during configuration.  You must define ‘PATH’ or ‘CC’
  so that configure finds an appropriate compiler for the initial
! bootstrap.  When ‘CC’ is used, the definition should contain the options
! that are needed whenever ‘CC’ is used.
  
     Specifically, options that determine the runtime architecture must be
! in ‘CC’ to correctly select the target for the build.  It is also
! convenient to place many other compiler options in ‘CC’.  For example,
! ‘CC="cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE"’ can be
  used to bootstrap the GCC 3.3 branch with the HP compiler in 64-bit
! K&R/bundled mode.  The ‘+DA2.0W’ option will result in the automatic
! selection of the ‘hppa64-hp-hpux11*’ target.  The macro definition table
  of cpp needs to be increased for a successful build with the HP
  compiler.  _CLASSIC_TYPES and _HPUX_SOURCE need to be defined when
! building with the bundled compiler, or when using the ‘-Ac’ option.
! These defines aren't necessary with ‘-Ae’.
  
!    It is best to explicitly configure the ‘hppa64-hp-hpux11*’ target
! with the ‘--with-ld=...’ option.  This overrides the standard search for
  ld.  The two linkers supported on this target require different
  commands.  The default linker is determined during configuration.  As a
  result, it's not possible to switch linkers in the middle of a GCC
*************** build.  This has been reported to someti
*** 3528,3536 ****
  binutils and GCC.
  
     A recent linker patch must be installed for the correct operation of
! GCC 3.3 and later.  'PHSS_26559' and 'PHSS_24304' are the oldest linker
  patches that are known to work.  They are for HP-UX 11.00 and 11.11,
! respectively.  'PHSS_24303', the companion to 'PHSS_24304', might be
  usable but it hasn't been tested.  These patches have been superseded.
  Consult the HP patch database to obtain the currently recommended linker
  patch for your system.
--- 3528,3536 ----
  binutils and GCC.
  
     A recent linker patch must be installed for the correct operation of
! GCC 3.3 and later.  ‘PHSS_26559’ and ‘PHSS_24304’ are the oldest linker
  patches that are known to work.  They are for HP-UX 11.00 and 11.11,
! respectively.  ‘PHSS_24303’, the companion to ‘PHSS_24304’, might be
  usable but it hasn't been tested.  These patches have been superseded.
  Consult the HP patch database to obtain the currently recommended linker
  patch for your system.
*************** issues involving secondary symbols.
*** 3545,3577 ****
  
     GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to
  run initializers and finalizers on the 64-bit port.  The 32-bit port
! uses the linker '+init' and '+fini' options for the same purpose.  The
  patches correct various problems with the +init/+fini options, including
  program core dumps.  Binutils 2.14 corrects a problem on the 64-bit port
  resulting from HP's non-standard use of the .init and .fini sections for
  array initializers and finalizers.
  
!    Only the HP linker is supported for the 'hppa64-hp-hpux11*' target.
  
     At this time, the GNU linker does not support the creation of long
  branch stubs.  As a result, it cannot successfully link binaries
  containing branch offsets larger than 8 megabytes.  In addition, there
  are problems linking shared libraries, linking executables with
! '-static', and with dwarf2 unwind and exception support.  It also
  doesn't provide stubs for internal calls to global functions in shared
  libraries, so these calls cannot be overloaded.
  
     The HP dynamic loader does not support GNU symbol versioning, so
  symbol versioning is not supported.  It may be necessary to disable
! symbol versioning with '--disable-symvers' when using GNU ld.
  
     POSIX threads are the default.  The optional DCE thread library is
! not supported, so '--enable-threads=dce' does not work.
  
  *-*-linux-gnu
  =============
  
! The '.init_array' and '.fini_array' sections are enabled unconditionally
  which requires at least glibc 2.1 and binutils 2.12.
  
     Versions of libstdc++-v3 starting with 3.2.1 require bug fixes
--- 3545,3577 ----
  
     GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to
  run initializers and finalizers on the 64-bit port.  The 32-bit port
! uses the linker ‘+init’ and ‘+fini’ options for the same purpose.  The
  patches correct various problems with the +init/+fini options, including
  program core dumps.  Binutils 2.14 corrects a problem on the 64-bit port
  resulting from HP's non-standard use of the .init and .fini sections for
  array initializers and finalizers.
  
!    Only the HP linker is supported for the ‘hppa64-hp-hpux11*’ target.
  
     At this time, the GNU linker does not support the creation of long
  branch stubs.  As a result, it cannot successfully link binaries
  containing branch offsets larger than 8 megabytes.  In addition, there
  are problems linking shared libraries, linking executables with
! ‘-static’, and with dwarf2 unwind and exception support.  It also
  doesn't provide stubs for internal calls to global functions in shared
  libraries, so these calls cannot be overloaded.
  
     The HP dynamic loader does not support GNU symbol versioning, so
  symbol versioning is not supported.  It may be necessary to disable
! symbol versioning with ‘--disable-symvers’ when using GNU ld.
  
     POSIX threads are the default.  The optional DCE thread library is
! not supported, so ‘--enable-threads=dce’ does not work.
  
  *-*-linux-gnu
  =============
  
! The ‘.init_array’ and ‘.fini_array’ sections are enabled unconditionally
  which requires at least glibc 2.1 and binutils 2.12.
  
     Versions of libstdc++-v3 starting with 3.2.1 require bug fixes
*************** i?86-*-solaris2*
*** 3592,3600 ****
  ================
  
  Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
! with GCC 4.7, there is also a 64-bit 'amd64-*-solaris2*' or
! 'x86_64-*-solaris2*' configuration that corresponds to
! 'sparcv9-sun-solaris2*'.
  
  ia64-*-linux
  ============
--- 3592,3600 ----
  ================
  
  Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
! with GCC 4.7, there is also a 64-bit ‘amd64-*-solaris2*’ or
! ‘x86_64-*-solaris2*’ configuration that corresponds to
! ‘sparcv9-sun-solaris2*’.
  
  ia64-*-linux
  ============
*************** IA-64 processor (also known as IPF, or I
*** 3603,3616 ****
  GNU/Linux.
  
     If you are using the installed system libunwind library with
! '--with-system-libunwind', then you must use libunwind 0.98 or later.
  
  ia64-*-hpux*
  ============
  
  Building GCC on this target requires the GNU Assembler.  The bundled HP
  assembler will not work.  To prevent GCC from using the wrong assembler,
! the option '--with-gnu-as' may be necessary.
  
  *-ibm-aix*
  ==========
--- 3603,3616 ----
  GNU/Linux.
  
     If you are using the installed system libunwind library with
! ‘--with-system-libunwind’, then you must use libunwind 0.98 or later.
  
  ia64-*-hpux*
  ============
  
  Building GCC on this target requires the GNU Assembler.  The bundled HP
  assembler will not work.  To prevent GCC from using the wrong assembler,
! the option ‘--with-gnu-as’ may be necessary.
  
  *-ibm-aix*
  ==========
*************** Support for AIX version 4.2 and older wa
*** 3620,3626 ****
  
     "out of memory" bootstrap failures may indicate a problem with
  process resource limits (ulimit).  Hard limits are configured in the
! '/etc/security/limits' system configuration file.
  
     GCC 4.9 and above require a C++ compiler for bootstrap.  IBM VAC++ /
  xlC cannot bootstrap GCC. xlc can bootstrap an older version of GCC and
--- 3620,3626 ----
  
     "out of memory" bootstrap failures may indicate a problem with
  process resource limits (ulimit).  Hard limits are configured in the
! ‘/etc/security/limits’ system configuration file.
  
     GCC 4.9 and above require a C++ compiler for bootstrap.  IBM VAC++ /
  xlC cannot bootstrap GCC. xlc can bootstrap an older version of GCC and
*************** sources.  One may delete GCC's "fixed" h
*** 3639,3645 ****
  version of GCC built for an earlier release of AIX.
  
     To speed up the configuration phases of bootstrapping and installing
! GCC, one may use GNU Bash instead of AIX '/bin/sh', e.g.,
  
       % CONFIG_SHELL=/opt/freeware/bin/bash
       % export CONFIG_SHELL
--- 3639,3645 ----
  version of GCC built for an earlier release of AIX.
  
     To speed up the configuration phases of bootstrapping and installing
! GCC, one may use GNU Bash instead of AIX ‘/bin/sh’, e.g.,
  
       % CONFIG_SHELL=/opt/freeware/bin/bash
       % export CONFIG_SHELL
*************** SRCDIR/configure.
*** 3653,3669 ****
  required by gfortran must be 32-bit libraries.  Building GMP and MPFR as
  static archive libraries works better than shared libraries.
  
!    Errors involving 'alloca' when building GCC generally are due to an
! incorrect definition of 'CC' in the Makefile or mixing files compiled
  with the native C compiler and GCC.  During the stage1 phase of the
! build, the native AIX compiler *must* be invoked as 'cc' (not 'xlc').
! Once 'configure' has been informed of 'xlc', one needs to use 'make
! distclean' to remove the configure cache files and ensure that 'CC'
  environment variable does not provide a definition that will confuse
! 'configure'.  If this error occurs during stage2 or later, then the
  problem most likely is the version of Make (see above).
  
!    The native 'as' and 'ld' are recommended for bootstrapping on AIX.
  The GNU Assembler, GNU Linker, and GNU Binutils version 2.20 is the
  minimum level that supports bootstrap on AIX 5.  The GNU Assembler has
  not been updated to support AIX 6 or AIX 7.  The native AIX tools do
--- 3653,3669 ----
  required by gfortran must be 32-bit libraries.  Building GMP and MPFR as
  static archive libraries works better than shared libraries.
  
!    Errors involving ‘alloca’ when building GCC generally are due to an
! incorrect definition of ‘CC’ in the Makefile or mixing files compiled
  with the native C compiler and GCC.  During the stage1 phase of the
! build, the native AIX compiler *must* be invoked as ‘cc’ (not ‘xlc’).
! Once ‘configure’ has been informed of ‘xlc’, one needs to use ‘make
! distclean’ to remove the configure cache files and ensure that ‘CC’
  environment variable does not provide a definition that will confuse
! ‘configure’.  If this error occurs during stage2 or later, then the
  problem most likely is the version of Make (see above).
  
!    The native ‘as’ and ‘ld’ are recommended for bootstrapping on AIX.
  The GNU Assembler, GNU Linker, and GNU Binutils version 2.20 is the
  minimum level that supports bootstrap on AIX 5.  The GNU Assembler has
  not been updated to support AIX 6 or AIX 7.  The native AIX tools do
*************** AIX 5.3 TL11 and IZ98134 for AIX 5.3 TL1
*** 3684,3718 ****
  TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6, AIX 6.1
  TL07 and AIX 7.1 TL01 should include the fix.
  
!    Building 'libstdc++.a' requires a fix for an AIX Assembler bug APAR
  IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).  It also requires a fix for
  another AIX Assembler bug and a co-dependent AIX Archiver fix referenced
  as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
  
!    'libstdc++' in GCC 3.4 increments the major version number of the
! shared object and GCC installation places the 'libstdc++.a' shared
  library in a common location which will overwrite the and GCC 3.3
  version of the shared library.  Applications either need to be re-linked
  against the new shared library or the GCC 3.1 and GCC 3.3 versions of
! the 'libstdc++' shared object needs to be available to the AIX runtime
! loader.  The GCC 3.1 'libstdc++.so.4', if present, and GCC 3.3
! 'libstdc++.so.5' shared objects can be installed for runtime dynamic
! loading using the following steps to set the 'F_LOADONLY' flag in the
! shared object for _each_ multilib 'libstdc++.a' installed:
  
!    Extract the shared objects from the currently installed 'libstdc++.a'
  archive:
       % ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  
!    Enable the 'F_LOADONLY' flag so that the shared object will be
  available for runtime dynamic loading, but not linking:
       % strip -e libstdc++.so.4 libstdc++.so.5
  
!    Archive the runtime-only shared object in the GCC 3.4 'libstdc++.a'
  archive:
       % ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  
!    Eventually, the '--with-aix-soname=svr4' configure option may drop
  the need for this procedure for libraries that support it.
  
     Linking executables and shared libraries may produce warnings of
--- 3684,3718 ----
  TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6, AIX 6.1
  TL07 and AIX 7.1 TL01 should include the fix.
  
!    Building ‘libstdc++.a’ requires a fix for an AIX Assembler bug APAR
  IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).  It also requires a fix for
  another AIX Assembler bug and a co-dependent AIX Archiver fix referenced
  as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
  
!    ‘libstdc++’ in GCC 3.4 increments the major version number of the
! shared object and GCC installation places the ‘libstdc++.a’ shared
  library in a common location which will overwrite the and GCC 3.3
  version of the shared library.  Applications either need to be re-linked
  against the new shared library or the GCC 3.1 and GCC 3.3 versions of
! the ‘libstdc++’ shared object needs to be available to the AIX runtime
! loader.  The GCC 3.1 ‘libstdc++.so.4’, if present, and GCC 3.3
! ‘libstdc++.so.5’ shared objects can be installed for runtime dynamic
! loading using the following steps to set the ‘F_LOADONLY’ flag in the
! shared object for _each_ multilib ‘libstdc++.a’ installed:
  
!    Extract the shared objects from the currently installed ‘libstdc++.a’
  archive:
       % ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  
!    Enable the ‘F_LOADONLY’ flag so that the shared object will be
  available for runtime dynamic loading, but not linking:
       % strip -e libstdc++.so.4 libstdc++.so.5
  
!    Archive the runtime-only shared object in the GCC 3.4 ‘libstdc++.a’
  archive:
       % ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  
!    Eventually, the ‘--with-aix-soname=svr4’ configure option may drop
  the need for this procedure for libraries that support it.
  
     Linking executables and shared libraries may produce warnings of
*************** executable.
*** 3727,3739 ****
  to parse archive libraries did not handle the new format correctly.
  These routines are used by GCC and result in error messages during
  linking such as "not a COFF file".  The version of the routines shipped
! with AIX 4.3.1 should work for a 32-bit environment.  The '-g' option of
  the archive command may be used to create archives of 32-bit objects
  using the original "small format".  A correct version of the routines is
  shipped with AIX 4.3.2 and above.
  
     Some versions of the AIX binder (linker) can fail with a relocation
! overflow severe error when the '-bbigtoc' option is used to link
  GCC-produced object files into an executable that overflows the TOC.  A
  fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC)
  is available from IBM Customer Support and from its
--- 3727,3739 ----
  to parse archive libraries did not handle the new format correctly.
  These routines are used by GCC and result in error messages during
  linking such as "not a COFF file".  The version of the routines shipped
! with AIX 4.3.1 should work for a 32-bit environment.  The ‘-g’ option of
  the archive command may be used to create archives of 32-bit objects
  using the original "small format".  A correct version of the routines is
  shipped with AIX 4.3.2 and above.
  
     Some versions of the AIX binder (linker) can fail with a relocation
! overflow severe error when the ‘-bbigtoc’ option is used to link
  GCC-produced object files into an executable that overflows the TOC.  A
  fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC)
  is available from IBM Customer Support and from its
*************** fix is incorporated in AIX 4.3.1 and abo
*** 3753,3766 ****
  
     AIX provides National Language Support (NLS).  Compilers and
  assemblers use NLS to support locale-specific representations of various
! data formats including floating-point numbers (e.g., '.' vs ',' for
  separating decimal fractions).  There have been problems reported where
  GCC does not produce the same floating-point formats that the assembler
! expects.  If one encounters this problem, set the 'LANG' environment
! variable to 'C' or 'En_US'.
  
!    A default can be specified with the '-mcpu=CPU_TYPE' switch and using
! the configure option '--with-cpu-CPU_TYPE'.
  
  iq2000-*-elf
  ============
--- 3753,3766 ----
  
     AIX provides National Language Support (NLS).  Compilers and
  assemblers use NLS to support locale-specific representations of various
! data formats including floating-point numbers (e.g., ‘.’ vs ‘,’ for
  separating decimal fractions).  There have been problems reported where
  GCC does not produce the same floating-point formats that the assembler
! expects.  If one encounters this problem, set the ‘LANG’ environment
! variable to ‘C’ or ‘En_US’.
  
!    A default can be specified with the ‘-mcpu=CPU_TYPE’ switch and using
! the configure option ‘--with-cpu-CPU_TYPE’.
  
  iq2000-*-elf
  ============
*************** LoongArch
*** 3784,3802 ****
  =========
  
  LoongArch processor.  The following LoongArch targets are available:
! 'loongarch64-linux-gnu*'
       LoongArch processor running GNU/Linux.  This target triplet may be
       coupled with a small set of possible suffixes to identify their
       default ABI type:
!      'f64'
!           Uses 'lp64d/base' ABI by default.
!      'f32'
!           Uses 'lp64f/base' ABI by default.
!      'sf'
!           Uses 'lp64s/base' ABI by default.
  
! 'loongarch64-linux-gnu'
!      Same as 'loongarch64-linux-gnuf64' for legacy support.
  
     More information about LoongArch can be found at
  <https://github.com/loongson/LoongArch-Documentation>.
--- 3784,3802 ----
  =========
  
  LoongArch processor.  The following LoongArch targets are available:
! ‘loongarch64-linux-gnu*’
       LoongArch processor running GNU/Linux.  This target triplet may be
       coupled with a small set of possible suffixes to identify their
       default ABI type:
!      ‘f64’
!           Uses ‘lp64d/base’ ABI by default.
!      ‘f32’
!           Uses ‘lp64f/base’ ABI by default.
!      ‘sf’
!           Uses ‘lp64s/base’ ABI by default.
  
! ‘loongarch64-linux-gnu’
!      Same as ‘loongarch64-linux-gnuf64’ for legacy support.
  
     More information about LoongArch can be found at
  <https://github.com/loongson/LoongArch-Documentation>.
*************** systems.
*** 3816,3837 ****
  m68k-*-*
  ========
  
! By default, 'm68k-*-elf*', 'm68k-*-rtems', 'm68k-*-uclinux' and
! 'm68k-*-linux' build libraries for both M680x0 and ColdFire processors.
  If you only need the M680x0 libraries, you can omit the ColdFire ones by
! passing '--with-arch=m68k' to 'configure'.  Alternatively, you can omit
! the M680x0 libraries by passing '--with-arch=cf' to 'configure'.  These
  targets default to 5206 or 5475 code as appropriate for the target
! system when configured with '--with-arch=cf' and 68020 code otherwise.
  
!    The 'm68k-*-netbsd' and 'm68k-*-openbsd' targets also support the
! '--with-arch' option.  They will generate ColdFire CFV4e code when
! configured with '--with-arch=cf' and 68020 code otherwise.
  
     You can override the default processors listed above by configuring
! with '--with-cpu=TARGET'.  This TARGET can either be a '-mcpu' argument
! or one of the following values: 'm68000', 'm68010', 'm68020', 'm68030',
! 'm68040', 'm68060', 'm68020-40' and 'm68020-60'.
  
     GCC requires at least binutils version 2.17 on these targets.
  
--- 3816,3837 ----
  m68k-*-*
  ========
  
! By default, ‘m68k-*-elf*’, ‘m68k-*-rtems’, ‘m68k-*-uclinux’ and
! ‘m68k-*-linux’ build libraries for both M680x0 and ColdFire processors.
  If you only need the M680x0 libraries, you can omit the ColdFire ones by
! passing ‘--with-arch=m68k’ to ‘configure’.  Alternatively, you can omit
! the M680x0 libraries by passing ‘--with-arch=cf’ to ‘configure’.  These
  targets default to 5206 or 5475 code as appropriate for the target
! system when configured with ‘--with-arch=cf’ and 68020 code otherwise.
  
!    The ‘m68k-*-netbsd’ and ‘m68k-*-openbsd’ targets also support the
! ‘--with-arch’ option.  They will generate ColdFire CFV4e code when
! configured with ‘--with-arch=cf’ and 68020 code otherwise.
  
     You can override the default processors listed above by configuring
! with ‘--with-cpu=TARGET’.  This TARGET can either be a ‘-mcpu’ argument
! or one of the following values: ‘m68000’, ‘m68010’, ‘m68020’, ‘m68030’,
! ‘m68040’, ‘m68060’, ‘m68020-40’ and ‘m68020-60’.
  
     GCC requires at least binutils version 2.17 on these targets.
  
*************** m68k-*-uclinux
*** 3839,3845 ****
  ==============
  
  GCC 4.3 changed the uClinux configuration so that it uses the
! 'm68k-linux-gnu' ABI rather than the 'm68k-elf' ABI. It also added
  improved support for C++ and flat shared libraries, both of which were
  ABI changes.
  
--- 3839,3845 ----
  ==============
  
  GCC 4.3 changed the uClinux configuration so that it uses the
! ‘m68k-linux-gnu’ ABI rather than the ‘m68k-elf’ ABI. It also added
  improved support for C++ and flat shared libraries, both of which were
  ABI changes.
  
*************** optional, and there should not be a warn
*** 3863,3889 ****
  
     The libstdc++ atomic locking routines for MIPS targets requires MIPS
  II and later.  A patch went in just after the GCC 3.3 release to make
! 'mips*-*-*' use the generic implementation instead.  You can also
! configure for 'mipsel-elf' as a workaround.  The 'mips*-*-linux*' target
  continues to use the MIPS II routines.  More work on this is expected in
  future releases.
  
!    The built-in '__sync_*' functions are available on MIPS II and later
! systems and others that support the 'll', 'sc' and 'sync' instructions.
! This can be overridden by passing '--with-llsc' or '--without-llsc' when
  configuring GCC. Since the Linux kernel emulates these instructions if
! they are missing, the default for 'mips*-*-linux*' targets is
! '--with-llsc'.  The '--with-llsc' and '--without-llsc' configure options
! may be overridden at compile time by passing the '-mllsc' or '-mno-llsc'
  options to the compiler.
  
     MIPS systems check for division by zero (unless
! '-mno-check-zero-division' is passed to the compiler) by generating
  either a conditional trap or a break instruction.  Using trap results in
  smaller code, but is only supported on MIPS II and later.  Also, some
  versions of the Linux kernel have a bug that prevents trap from
! generating the proper signal ('SIGFPE').  To enable the use of break,
! use the '--with-divide=breaks' 'configure' option when configuring GCC.
  The default is to use traps on systems that support them.
  
  moxie-*-elf
--- 3863,3889 ----
  
     The libstdc++ atomic locking routines for MIPS targets requires MIPS
  II and later.  A patch went in just after the GCC 3.3 release to make
! ‘mips*-*-*’ use the generic implementation instead.  You can also
! configure for ‘mipsel-elf’ as a workaround.  The ‘mips*-*-linux*’ target
  continues to use the MIPS II routines.  More work on this is expected in
  future releases.
  
!    The built-in ‘__sync_*’ functions are available on MIPS II and later
! systems and others that support the ‘ll’, ‘sc’ and ‘sync’ instructions.
! This can be overridden by passing ‘--with-llsc’ or ‘--without-llsc’ when
  configuring GCC. Since the Linux kernel emulates these instructions if
! they are missing, the default for ‘mips*-*-linux*’ targets is
! ‘--with-llsc’.  The ‘--with-llsc’ and ‘--without-llsc’ configure options
! may be overridden at compile time by passing the ‘-mllsc’ or ‘-mno-llsc’
  options to the compiler.
  
     MIPS systems check for division by zero (unless
! ‘-mno-check-zero-division’ is passed to the compiler) by generating
  either a conditional trap or a break instruction.  Using trap results in
  smaller code, but is only supported on MIPS II and later.  Also, some
  versions of the Linux kernel have a bug that prevents trap from
! generating the proper signal (‘SIGFPE’).  To enable the use of break,
! use the ‘--with-divide=breaks’ ‘configure’ option when configuring GCC.
  The default is to use traps on systems that support them.
  
  moxie-*-elf
*************** msp430-*-elf*
*** 3897,3913 ****
  TI MSP430 processor.  This configuration is intended for embedded
  systems.
  
!    'msp430-*-elf' is the standard configuration with most GCC features
  enabled by default.
  
!    'msp430-*-elfbare' is tuned for a bare-metal environment, and
  disables features related to shared libraries and other functionality
  not used for this device.  This reduces code and data usage of the GCC
  libraries, resulting in a minimal run-time environment by default.
  
     Features disabled by default include:
!    * transactional memory
!    * __cxa_atexit
  
  nds32le-*-elf
  =============
--- 3897,3913 ----
  TI MSP430 processor.  This configuration is intended for embedded
  systems.
  
!    ‘msp430-*-elf’ is the standard configuration with most GCC features
  enabled by default.
  
!    ‘msp430-*-elfbare’ is tuned for a bare-metal environment, and
  disables features related to shared libraries and other functionality
  not used for this device.  This reduces code and data usage of the GCC
  libraries, resulting in a minimal run-time environment by default.
  
     Features disabled by default include:
!    • transactional memory
!    • __cxa_atexit
  
  nds32le-*-elf
  =============
*************** Nvidia PTX target.
*** 3926,3947 ****
  
     Instead of GNU binutils, you will need to install nvptx-tools.  Tell
  GCC where to find it:
! '--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin'.
  
     You will need newlib 4.3.0 or later.  It can be automatically built
  together with GCC.  For this, add a symbolic link to nvptx-newlib's
! 'newlib' directory to the directory containing the GCC sources.
  
!    Use the '--disable-sjlj-exceptions' and
! '--enable-newlib-io-long-long' options when configuring.
  
!    The '--with-arch' option may be specified to override the default
! value for the '-march' option, and to also build corresponding target
! libraries.  The default is '--with-arch=sm_30'.
  
!    For example, if '--with-arch=sm_70' is specified, '-march=sm_30' and
! '-march=sm_70' target libraries are built, and code generation defaults
! to '-march=sm_70'.
  
  or1k-*-elf
  ==========
--- 3926,3947 ----
  
     Instead of GNU binutils, you will need to install nvptx-tools.  Tell
  GCC where to find it:
! ‘--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin’.
  
     You will need newlib 4.3.0 or later.  It can be automatically built
  together with GCC.  For this, add a symbolic link to nvptx-newlib's
! ‘newlib’ directory to the directory containing the GCC sources.
  
!    Use the ‘--disable-sjlj-exceptions’ and
! ‘--enable-newlib-io-long-long’ options when configuring.
  
!    The ‘--with-arch’ option may be specified to override the default
! value for the ‘-march’ option, and to also build corresponding target
! libraries.  The default is ‘--with-arch=sm_30’.
  
!    For example, if ‘--with-arch=sm_70’ is specified, ‘-march=sm_30’ and
! ‘-march=sm_70’ target libraries are built, and code generation defaults
! to ‘-march=sm_70’.
  
  or1k-*-elf
  ==========
*************** The OpenRISC 1000 32-bit processor with
*** 3957,3964 ****
  powerpc-*-*
  ===========
  
! You can specify a default version for the '-mcpu=CPU_TYPE' switch by
! using the configure option '--with-cpu-CPU_TYPE'.
  
     You will need GNU binutils 2.20 or newer.
  
--- 3957,3964 ----
  powerpc-*-*
  ===========
  
! You can specify a default version for the ‘-mcpu=CPU_TYPE’ switch by
! using the configure option ‘--with-cpu-CPU_TYPE’.
  
     You will need GNU binutils 2.20 or newer.
  
*************** cross-compilation target only.
*** 4075,4141 ****
  =============
  
  Support for Solaris 11.3 and earlier has been obsoleted in GCC 13, but
! can still be enabled by configuring with '--enable-obsolete'.  Support
  for Solaris 10 has been removed in GCC 10.  Support for Solaris 9 has
  been removed in GCC 5.  Support for Solaris 8 has been removed in GCC
  4.8.  Support for Solaris 7 has been removed in GCC 4.6.
  
     Solaris 11.3 provides GCC 4.5.2, 4.7.3, and 4.8.2 as
! '/usr/gcc/4.5/bin/gcc' or similar.  Solaris 11.4 provides one or more of
  GCC 5, 7, 9, 10, 11, and 12.
  
!    You need to install the 'system/header', 'system/linker', and
! 'developer/assembler' packages.
  
!    Trying to use the compatibility tools in '/usr/ucb', from the
! 'compatibility/ucb' package, to install GCC has been observed to cause
! trouble.  The fix is to remove '/usr/ucb' from your 'PATH'.
  
     The build process works more smoothly with the legacy Solaris tools
! so, if you have '/usr/xpg4/bin' in your 'PATH', we recommend that you
! place '/usr/bin' before '/usr/xpg4/bin' for the duration of the build.
  
     We recommend the use of the Solaris assembler or the GNU assembler,
  in conjunction with the Solaris linker.
  
!    The GNU 'as' versions included in Solaris 11.3, from GNU binutils
! 2.23.1 or newer (in '/usr/bin/gas' and '/usr/gnu/bin/as'), are known to
  work.  The version from GNU binutils 2.40 is known to work as well.
! Recent versions of the Solaris assembler in '/usr/bin/as' work almost as
! well, though.  To use GNU 'as', configure with the options
! '--with-gnu-as --with-as=/usr/gnu/bin/as'.
  
     For linking, the Solaris linker is preferred.  If you want to use the
  GNU linker instead, the version in Solaris 11.3, from GNU binutils
! 2.23.1 or newer (in '/usr/gnu/bin/ld' and '/usr/bin/gld'), works, as
  does the version from GNU binutils 2.40.  However, it generally lacks
! platform specific features, so better stay with Solaris 'ld'.  To use
! the LTO linker plugin ('-fuse-linker-plugin') with GNU 'ld', GNU
! binutils _must_ be configured with '--enable-largefile'.  To use Solaris
! 'ld', we recommend to configure with '--without-gnu-ld
! --with-ld=/usr/bin/ld' to guarantee the right linker is found
! irrespective of the user's 'PATH'.
  
     Note that your mileage may vary if you use a combination of the GNU
! tools and the Solaris tools: while the combination GNU 'as' and Solaris
! 'ld' works well, the reverse combination Solaris 'as' with GNU 'ld' may
  fail to build or cause memory corruption at runtime in some cases for
  C++ programs.
  
!    To enable symbol versioning in 'libstdc++' and other runtime
  libraries with the Solaris linker, you need to have any version of GNU
! 'c++filt', which is part of GNU binutils.  Symbol versioning will be
! disabled if no appropriate version is found.  Solaris 'c++filt' from the
  Solaris Studio compilers does _not_ work.
  
     In order to build the GNU Ada compiler, GNAT, a working GNAT is
  needed.  Since Solaris 11.4 SRU 39, GNAT 11 or 12 is bundled in the
! 'developer/gcc/gcc-gnat' package.
  
!    In order to build the GNU D compiler, GDC, a working 'libphobos' is
  needed.  That library wasn't built by default in GCC 9-11 on SPARC, or
  on x86 when the Solaris assembler is used, but can be enabled by
! configuring with '--enable-libphobos'.  Also, GDC 9.4.0 is required on
  x86, while GDC 9.3.0 is known to work on SPARC.
  
     The versions of the GNU Multiple Precision Library (GMP), the MPFR
--- 4075,4141 ----
  =============
  
  Support for Solaris 11.3 and earlier has been obsoleted in GCC 13, but
! can still be enabled by configuring with ‘--enable-obsolete’.  Support
  for Solaris 10 has been removed in GCC 10.  Support for Solaris 9 has
  been removed in GCC 5.  Support for Solaris 8 has been removed in GCC
  4.8.  Support for Solaris 7 has been removed in GCC 4.6.
  
     Solaris 11.3 provides GCC 4.5.2, 4.7.3, and 4.8.2 as
! ‘/usr/gcc/4.5/bin/gcc’ or similar.  Solaris 11.4 provides one or more of
  GCC 5, 7, 9, 10, 11, and 12.
  
!    You need to install the ‘system/header’, ‘system/linker’, and
! ‘developer/assembler’ packages.
  
!    Trying to use the compatibility tools in ‘/usr/ucb’, from the
! ‘compatibility/ucb’ package, to install GCC has been observed to cause
! trouble.  The fix is to remove ‘/usr/ucb’ from your ‘PATH’.
  
     The build process works more smoothly with the legacy Solaris tools
! so, if you have ‘/usr/xpg4/bin’ in your ‘PATH’, we recommend that you
! place ‘/usr/bin’ before ‘/usr/xpg4/bin’ for the duration of the build.
  
     We recommend the use of the Solaris assembler or the GNU assembler,
  in conjunction with the Solaris linker.
  
!    The GNU ‘as’ versions included in Solaris 11.3, from GNU binutils
! 2.23.1 or newer (in ‘/usr/bin/gas’ and ‘/usr/gnu/bin/as’), are known to
  work.  The version from GNU binutils 2.40 is known to work as well.
! Recent versions of the Solaris assembler in ‘/usr/bin/as’ work almost as
! well, though.  To use GNU ‘as’, configure with the options
! ‘--with-gnu-as --with-as=/usr/gnu/bin/as’.
  
     For linking, the Solaris linker is preferred.  If you want to use the
  GNU linker instead, the version in Solaris 11.3, from GNU binutils
! 2.23.1 or newer (in ‘/usr/gnu/bin/ld’ and ‘/usr/bin/gld’), works, as
  does the version from GNU binutils 2.40.  However, it generally lacks
! platform specific features, so better stay with Solaris ‘ld’.  To use
! the LTO linker plugin (‘-fuse-linker-plugin’) with GNU ‘ld’, GNU
! binutils _must_ be configured with ‘--enable-largefile’.  To use Solaris
! ‘ld’, we recommend to configure with ‘--without-gnu-ld
! --with-ld=/usr/bin/ld’ to guarantee the right linker is found
! irrespective of the user's ‘PATH’.
  
     Note that your mileage may vary if you use a combination of the GNU
! tools and the Solaris tools: while the combination GNU ‘as’ and Solaris
! ‘ld’ works well, the reverse combination Solaris ‘as’ with GNU ‘ld’ may
  fail to build or cause memory corruption at runtime in some cases for
  C++ programs.
  
!    To enable symbol versioning in ‘libstdc++’ and other runtime
  libraries with the Solaris linker, you need to have any version of GNU
! ‘c++filt’, which is part of GNU binutils.  Symbol versioning will be
! disabled if no appropriate version is found.  Solaris ‘c++filt’ from the
  Solaris Studio compilers does _not_ work.
  
     In order to build the GNU Ada compiler, GNAT, a working GNAT is
  needed.  Since Solaris 11.4 SRU 39, GNAT 11 or 12 is bundled in the
! ‘developer/gcc/gcc-gnat’ package.
  
!    In order to build the GNU D compiler, GDC, a working ‘libphobos’ is
  needed.  That library wasn't built by default in GCC 9-11 on SPARC, or
  on x86 when the Solaris assembler is used, but can be enabled by
! configuring with ‘--enable-libphobos’.  Also, GDC 9.4.0 is required on
  x86, while GDC 9.3.0 is known to work on SPARC.
  
     The versions of the GNU Multiple Precision Library (GMP), the MPFR
*************** library and the MPC library bundled with
*** 4143,4153 ****
  usually recent enough to match GCC's requirements.  There are two
  caveats:
  
!    * While the version of the GMP library in Solaris 11.3 works with
       GCC, you need to configure with
!      '--with-gmp-include=/usr/include/gmp'.
  
!    * The version of the MPFR libary included in Solaris 11.3 is too old;
       you need to provide a more recent one.
  
  sparc*-*-*
--- 4143,4153 ----
  usually recent enough to match GCC's requirements.  There are two
  caveats:
  
!    • While the version of the GMP library in Solaris 11.3 works with
       GCC, you need to configure with
!      ‘--with-gmp-include=/usr/include/gmp’.
  
!    • The version of the MPFR libary included in Solaris 11.3 is too old;
       you need to provide a more recent one.
  
  sparc*-*-*
*************** information.
*** 4173,4184 ****
  
     Starting with Solaris 7, the operating system is capable of executing
  64-bit SPARC V9 binaries.  GCC 3.1 and later properly supports this; the
! '-m64' option enables 64-bit code generation.
  
     When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library on Solaris, the canonical target triplet must
! be specified as the 'build' parameter on the 'configure' line.  This
! target triplet can be obtained by invoking './config.guess' in the
  toplevel source directory of GCC (and not that of GMP or MPFR or MPC).
  For example:
  
--- 4173,4184 ----
  
     Starting with Solaris 7, the operating system is capable of executing
  64-bit SPARC V9 binaries.  GCC 3.1 and later properly supports this; the
! ‘-m64’ option enables 64-bit code generation.
  
     When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library on Solaris, the canonical target triplet must
! be specified as the ‘build’ parameter on the ‘configure’ line.  This
! target triplet can be obtained by invoking ‘./config.guess’ in the
  toplevel source directory of GCC (and not that of GMP or MPFR or MPC).
  For example:
  
*************** sparc-*-linux*
*** 4190,4210 ****
  sparc64-*-solaris2*
  ===================
  
! This is a synonym for 'sparcv9-*-solaris2*'.
  
  sparcv9-*-solaris2*
  ===================
  
  When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
  build compiler that generates 64-bit code, either by default or by
! specifying 'CC='gcc -m64' CXX='g++ -m64' GDC='gdc -m64'' to 'configure'.
! Additionally, you _must_ pass '--build=sparcv9-sun-solaris2.11' or
! '--build=sparc64-sun-solaris2.11' because 'config.guess' misdetects this
  situation, which can cause build failures.
  
     When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library, the canonical target triplet must be
! specified as the 'build' parameter on the 'configure' line.  For
  example:
  
       % SRCDIR/configure --build=sparcv9-sun-solaris2.11 --prefix=DIRNAME
--- 4190,4210 ----
  sparc64-*-solaris2*
  ===================
  
! This is a synonym for ‘sparcv9-*-solaris2*’.
  
  sparcv9-*-solaris2*
  ===================
  
  When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
  build compiler that generates 64-bit code, either by default or by
! specifying ‘CC='gcc -m64' CXX='g++ -m64' GDC='gdc -m64'’ to ‘configure’.
! Additionally, you _must_ pass ‘--build=sparcv9-sun-solaris2.11’ or
! ‘--build=sparc64-sun-solaris2.11’ because ‘config.guess’ misdetects this
  situation, which can cause build failures.
  
     When configuring the GNU Multiple Precision Library (GMP), the MPFR
  library or the MPC library, the canonical target triplet must be
! specified as the ‘build’ parameter on the ‘configure’ line.  For
  example:
  
       % SRCDIR/configure --build=sparcv9-sun-solaris2.11 --prefix=DIRNAME
*************** not interested in supporting older, a.ou
*** 4233,4254 ****
  VxWorks in GCC 3.
  
     VxWorks comes with an older version of GCC installed in
! '$WIND_BASE/host'; we recommend you do not overwrite it.  Choose an
  installation PREFIX entirely outside $WIND_BASE.  Before running
! 'configure', create the directories 'PREFIX' and 'PREFIX/bin'.  Link or
! copy the appropriate assembler, linker, etc. into 'PREFIX/bin', and set
! your PATH to include that directory while running both 'configure' and
! 'make'.
  
!    You must give 'configure' the '--with-headers=$WIND_BASE/target/h'
  switch so that it can find the VxWorks system headers.  Since VxWorks is
  a cross compilation target only, you must also specify
! '--target=TARGET'.  'configure' will attempt to create the directory
! 'PREFIX/TARGET/sys-include' and copy files into it; make sure the user
! running 'configure' has sufficient privilege to do so.
  
     GCC's exception handling runtime requires a special "configlette"
! module, 'contrib/gthr_supp_vxw_5x.c'.  Follow the instructions in that
  file to add the module to your kernel build.  (Future versions of
  VxWorks will incorporate this module.)
  
--- 4233,4254 ----
  VxWorks in GCC 3.
  
     VxWorks comes with an older version of GCC installed in
! ‘$WIND_BASE/host’; we recommend you do not overwrite it.  Choose an
  installation PREFIX entirely outside $WIND_BASE.  Before running
! ‘configure’, create the directories ‘PREFIX’ and ‘PREFIX/bin’.  Link or
! copy the appropriate assembler, linker, etc. into ‘PREFIX/bin’, and set
! your PATH to include that directory while running both ‘configure’ and
! ‘make’.
  
!    You must give ‘configure’ the ‘--with-headers=$WIND_BASE/target/h’
  switch so that it can find the VxWorks system headers.  Since VxWorks is
  a cross compilation target only, you must also specify
! ‘--target=TARGET’.  ‘configure’ will attempt to create the directory
! ‘PREFIX/TARGET/sys-include’ and copy files into it; make sure the user
! running ‘configure’ has sufficient privilege to do so.
  
     GCC's exception handling runtime requires a special "configlette"
! module, ‘contrib/gthr_supp_vxw_5x.c’.  Follow the instructions in that
  file to add the module to your kernel build.  (Future versions of
  VxWorks will incorporate this module.)
  
*************** x86_64-*-*, amd64-*-*
*** 4258,4288 ****
  GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
  On GNU/Linux the default is a bi-arch compiler which is able to generate
! both 64-bit x86-64 and 32-bit x86 code (via the '-m32' switch).
  
  x86_64-*-solaris2*
  ==================
  
  GCC also supports the x86-64 architecture implemented by the AMD64
! processor ('amd64-*-*' is an alias for 'x86_64-*-*').  Unlike other
  systems, without special options a bi-arch compiler is built which
  generates 32-bit code by default, but can generate 64-bit x86-64 code
! with the '-m64' switch.  Since GCC 4.7, there is also a configuration
! that defaults to 64-bit code, but can generate 32-bit code with '-m32'.
  To configure and build this way, you have to provide all support
! libraries like 'libgmp' as 64-bit code, configure with
! '--target=x86_64-pc-solaris2.11' and 'CC=gcc -m64'.
  
  xtensa*-*-elf
  =============
  
! This target is intended for embedded Xtensa systems using the 'newlib' C
  library.  It uses ELF but does not support shared objects.
  Designed-defined instructions specified via the Tensilica Instruction
  Extension (TIE) language are only supported through inline assembly.
  
     The Xtensa configuration information must be specified prior to
! building GCC.  The 'include/xtensa-config.h' header file contains the
  configuration information.  If you created your own Xtensa configuration
  with the Xtensa Processor Generator, the downloaded files include a
  customized copy of this header file, which you can use to replace the
--- 4258,4288 ----
  GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
  On GNU/Linux the default is a bi-arch compiler which is able to generate
! both 64-bit x86-64 and 32-bit x86 code (via the ‘-m32’ switch).
  
  x86_64-*-solaris2*
  ==================
  
  GCC also supports the x86-64 architecture implemented by the AMD64
! processor (‘amd64-*-*’ is an alias for ‘x86_64-*-*’).  Unlike other
  systems, without special options a bi-arch compiler is built which
  generates 32-bit code by default, but can generate 64-bit x86-64 code
! with the ‘-m64’ switch.  Since GCC 4.7, there is also a configuration
! that defaults to 64-bit code, but can generate 32-bit code with ‘-m32’.
  To configure and build this way, you have to provide all support
! libraries like ‘libgmp’ as 64-bit code, configure with
! ‘--target=x86_64-pc-solaris2.11’ and ‘CC=gcc -m64’.
  
  xtensa*-*-elf
  =============
  
! This target is intended for embedded Xtensa systems using the ‘newlib’ C
  library.  It uses ELF but does not support shared objects.
  Designed-defined instructions specified via the Tensilica Instruction
  Extension (TIE) language are only supported through inline assembly.
  
     The Xtensa configuration information must be specified prior to
! building GCC.  The ‘include/xtensa-config.h’ header file contains the
  configuration information.  If you created your own Xtensa configuration
  with the Xtensa Processor Generator, the downloaded files include a
  customized copy of this header file, which you can use to replace the
*************** xtensa*-*-linux*
*** 4293,4301 ****
  
  This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
! position-independent code (PIC) regardless of whether the '-fpic' or
! '-fPIC' options are used.  In other respects, this target is the same as
! the 'xtensa*-*-elf' target.
  
  Microsoft Windows
  =================
--- 4293,4301 ----
  
  This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
! position-independent code (PIC) regardless of whether the ‘-fpic’ or
! ‘-fPIC’ options are used.  In other respects, this target is the same as
! the ‘xtensa*-*-elf’ target.
  
  Microsoft Windows
  =================
*************** Windows XP, and Windows Vista, are suppo
*** 4317,4327 ****
  platforms.  These targets differ in which Windows subsystem they target
  and which C libraries are used.
  
!    * Cygwin *-*-cygwin: Cygwin provides a user-space Linux API emulation
       layer in the Win32 subsystem.
!    * MinGW *-*-mingw32: MinGW is a native GCC port for the Win32
       subsystem that provides a subset of POSIX.
!    * MKS i386-pc-mks: NuTCracker from MKS. See
       <https://www.mkssoftware.com> for more information.
  
  Intel 64-bit versions
--- 4317,4327 ----
  platforms.  These targets differ in which Windows subsystem they target
  and which C libraries are used.
  
!    • Cygwin *-*-cygwin: Cygwin provides a user-space Linux API emulation
       layer in the Win32 subsystem.
!    • MinGW *-*-mingw32: MinGW is a native GCC port for the Win32
       subsystem that provides a subset of POSIX.
!    • MKS i386-pc-mks: NuTCracker from MKS. See
       <https://www.mkssoftware.com> for more information.
  
  Intel 64-bit versions
*************** version 2.20 or above if building your o
*** 4369,4378 ****
  
  GCC will build with and support only MinGW runtime 3.12 and later.
  Earlier versions of headers are incompatible with the new default
! semantics of 'extern inline' in '-std=c99' and '-std=gnu99' modes.
  
     To support emitting DWARF debugging info you need to use GNU binutils
! version 2.16 or above containing support for the '.secrel32' assembler
  pseudo-op.
  
  Older systems
--- 4369,4378 ----
  
  GCC will build with and support only MinGW runtime 3.12 and later.
  Earlier versions of headers are incompatible with the new default
! semantics of ‘extern inline’ in ‘-std=c99’ and ‘-std=gnu99’ modes.
  
     To support emitting DWARF debugging info you need to use GNU binutils
! version 2.16 or above containing support for the ‘.secrel32’ assembler
  pseudo-op.
  
  Older systems
*************** and may suffer from bitrot.
*** 4385,4391 ****
  
     Starting with GCC 3.1, each release has a list of "obsoleted"
  systems.  Support for these systems is still present in that release,
! but 'configure' will fail unless the '--enable-obsolete' option is
  given.  Unless a maintainer steps forward, support for these systems
  will be removed from the next release of GCC.
  
--- 4385,4391 ----
  
     Starting with GCC 3.1, each release has a list of "obsoleted"
  systems.  Support for these systems is still present in that release,
! but ‘configure’ will fail unless the ‘--enable-obsolete’ option is
  given.  Unless a maintainer steps forward, support for these systems
  will be removed from the next release of GCC.
  
*************** bring GCC up on such a system, if still
*** 4396,4403 ****
  require first installing an old version of GCC which did work on that
  system, and using it to compile a more recent GCC, to avoid bugs in the
  vendor compiler.  Old releases of GCC 1 and GCC 2 are available in the
! 'old-releases' directory on the GCC mirror sites.  Header bugs may
! generally be avoided using 'fixincludes', but bugs or deficiencies in
  libraries and the operating system may still cause problems.
  
     Support for older systems as targets for cross-compilation is less
--- 4396,4403 ----
  require first installing an old version of GCC which did work on that
  system, and using it to compile a more recent GCC, to avoid bugs in the
  vendor compiler.  Old releases of GCC 1 and GCC 2 are available in the
! ‘old-releases’ directory on the GCC mirror sites.  Header bugs may
! generally be avoided using ‘fixincludes’, but bugs or deficiencies in
  libraries and the operating system may still cause problems.
  
     Support for older systems as targets for cross-compilation is less
*************** would be likely to be accepted, since th
*** 4409,4415 ****
  for more modern targets.
  
     For some systems, old versions of GNU binutils may also be useful,
! and are available from 'pub/binutils/old-releases' on sourceware.org
  mirror sites.
  
     Some of the information on specific systems above relates to such
--- 4409,4415 ----
  for more modern targets.
  
     For some systems, old versions of GNU binutils may also be useful,
! and are available from ‘pub/binutils/old-releases’ on sourceware.org
  mirror sites.
  
     Some of the information on specific systems above relates to such
*************** GNU Free Documentation License
*** 4432,4438 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 4432,4438 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 4441,4447 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 4441,4447 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** Concept Index
*** 4916,4922 ****
  * Menu:
  
  * Binaries:                              Binaries.           (line    6)
! * build_configargs:                      Configuration.      (line 1972)
  * Configuration:                         Configuration.      (line    6)
  * Downloading GCC:                       Downloading the source.
                                                               (line    6)
--- 4916,4922 ----
  * Menu:
  
  * Binaries:                              Binaries.           (line    6)
! * build_configargs:                      Configuration.      (line 1971)
  * Configuration:                         Configuration.      (line    6)
  * Downloading GCC:                       Downloading the source.
                                                               (line    6)
*************** Concept Index
*** 4925,4931 ****
  * FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                               (line    6)
  * Host specific installation:            Specific.           (line    6)
! * host_configargs:                       Configuration.      (line 1976)
  * Installing GCC: Binaries:              Binaries.           (line    6)
  * Installing GCC: Building:              Building.           (line    6)
  * Installing GCC: Configuration:         Configuration.      (line    6)
--- 4925,4931 ----
  * FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                               (line    6)
  * Host specific installation:            Specific.           (line    6)
! * host_configargs:                       Configuration.      (line 1975)
  * Installing GCC: Binaries:              Binaries.           (line    6)
  * Installing GCC: Building:              Building.           (line    6)
  * Installing GCC: Configuration:         Configuration.      (line    6)
*************** Concept Index
*** 4935,5044 ****
  * Specific installation notes:           Specific.           (line    6)
  * Target specific installation:          Specific.           (line    6)
  * Target specific installation notes:    Specific.           (line    6)
! * target_configargs:                     Configuration.      (line 1980)
  * Testing:                               Testing.            (line    6)
  * Testsuite:                             Testing.            (line    6)
  
  
  
  Tag Table:
! Node: Top1696
! Node: Installing GCC2201
! Node: Prerequisites3659
! Ref: GNAT-prerequisite5850
! Ref: GDC-prerequisite7247
! Ref: GM2-prerequisite8430
! Node: Downloading the source19229
! Node: Configuration20948
! Ref: with-gnu-as40213
! Ref: with-as41064
! Ref: with-gnu-ld42429
! Ref: WithAixSoname72268
! Ref: AixLdCommand72929
! Ref: with-included-gettext88814
! Node: Building117169
! Node: Testing133380
! Node: Final install140911
! Node: Binaries144089
! Node: Specific145074
! Ref: aarch64-x-x145608
! Ref: amd64-x-solaris2147628
! Ref: amdgcn-x-amdhsa147710
! Ref: arc-x-elf32148772
! Ref: arc-linux-uclibc148948
! Ref: arm-x-eabi149089
! Ref: avr149342
! Ref: bfin149923
! Ref: cris150186
! Ref: dos150512
! Ref: epiphany-x-elf150837
! Ref: x-x-freebsd150942
! Ref: ft32-x-elf151670
! Ref: h8300-hms151768
! Ref: hppa-hp-hpux152120
! Ref: hppa-hp-hpux11153634
! Ref: x-x-linux-gnu158740
! Ref: ix86-x-linux159063
! Ref: ix86-x-solaris2159376
! Ref: ia64-x-linux159624
! Ref: ia64-x-hpux159871
! Ref: x-ibm-aix160089
! Ref: TransferAixShobj163751
! Ref: iq2000-x-elf167561
! Ref: lm32-x-elf167701
! Ref: lm32-x-uclinux167805
! Ref: loongarch167933
! Ref: m32c-x-elf168570
! Ref: m32r-x-elf168672
! Ref: m68k-x-x168774
! Ref: m68k-x-uclinux169812
! Ref: microblaze-x-elf170057
! Ref: mips-x-x170176
! Ref: moxie-x-elf172086
! Ref: msp430-x-elf172133
! Ref: nds32le-x-elf172690
! Ref: nds32be-x-elf172762
! Ref: nvptx-x-none172831
! Ref: or1k-x-elf173694
! Ref: or1k-x-linux173825
! Ref: powerpc-x-x173906
! Ref: powerpc-x-darwin174097
! Ref: powerpc-x-elf174592
! Ref: powerpc-x-linux-gnu174677
! Ref: powerpc-x-netbsd174772
! Ref: powerpc-x-eabisim174860
! Ref: powerpc-x-eabi174986
! Ref: powerpcle-x-elf175062
! Ref: powerpcle-x-eabisim175154
! Ref: powerpcle-x-eabi175287
! Ref: rl78-x-elf175370
! Ref: riscv32-x-elf175476
! Ref: riscv32-x-linux175665
! Ref: riscv64-x-elf175822
! Ref: riscv64-x-linux176011
! Ref: rx-x-elf176168
! Ref: s390-x-linux176214
! Ref: s390x-x-linux176286
! Ref: s390x-ibm-tpf176373
! Ref: x-x-solaris2176504
! Ref: sparc-x-x180277
! Ref: sparc-sun-solaris2180779
! Ref: sparc-x-linux181678
! Ref: sparc64-x-solaris2181709
! Ref: sparcv9-x-solaris2181796
! Ref: c6x-x-x182517
! Ref: visium-x-elf182609
! Ref: x-x-vxworks182717
! Ref: x86-64-x-x184240
! Ref: x86-64-x-solaris2184568
! Ref: xtensa-x-elf185194
! Ref: xtensa-x-linux185865
! Ref: windows186206
! Ref: x-x-cygwin187853
! Ref: x-x-mingw32188406
! Ref: older188788
! Ref: elf190905
! Node: GNU Free Documentation License191159
! Node: Concept Index216297
  
  End Tag Table
--- 4935,5049 ----
  * Specific installation notes:           Specific.           (line    6)
  * Target specific installation:          Specific.           (line    6)
  * Target specific installation notes:    Specific.           (line    6)
! * target_configargs:                     Configuration.      (line 1979)
  * Testing:                               Testing.            (line    6)
  * Testsuite:                             Testing.            (line    6)
  
  
  
  Tag Table:
! Node: Top1694
! Node: Installing GCC2199
! Node: Prerequisites3661
! Ref: GNAT-prerequisite5884
! Ref: GDC-prerequisite7309
! Ref: GM2-prerequisite8512
! Node: Downloading the source19759
! Node: Configuration21530
! Ref: with-gnu-as41433
! Ref: with-as42322
! Ref: with-gnu-ld43731
! Ref: WithAixSoname74795
! Ref: AixLdCommand75510
! Ref: with-included-gettext92252
! Node: Building121911
! Node: Testing138586
! Node: Final install146327
! Node: Binaries149597
! Node: Specific150608
! Ref: aarch64-x-x151142
! Ref: amd64-x-solaris2153226
! Ref: amdgcn-x-amdhsa153312
! Ref: arc-x-elf32154434
! Ref: arc-linux-uclibc154626
! Ref: arm-x-eabi154771
! Ref: avr155028
! Ref: bfin155617
! Ref: cris155880
! Ref: dos156210
! Ref: epiphany-x-elf156535
! Ref: x-x-freebsd156640
! Ref: ft32-x-elf157376
! Ref: h8300-hms157474
! Ref: hppa-hp-hpux157826
! Ref: hppa-hp-hpux11159376
! Ref: x-x-linux-gnu164582
! Ref: ix86-x-linux164913
! Ref: ix86-x-solaris2165226
! Ref: ia64-x-linux165486
! Ref: ia64-x-hpux165737
! Ref: x-ibm-aix165959
! Ref: TransferAixShobj169677
! Ref: iq2000-x-elf173567
! Ref: lm32-x-elf173707
! Ref: lm32-x-uclinux173811
! Ref: loongarch173939
! Ref: m32c-x-elf174612
! Ref: m32r-x-elf174714
! Ref: m68k-x-x174816
! Ref: m68k-x-uclinux175946
! Ref: microblaze-x-elf176199
! Ref: mips-x-x176318
! Ref: moxie-x-elf178304
! Ref: msp430-x-elf178351
! Ref: nds32le-x-elf178920
! Ref: nds32be-x-elf178992
! Ref: nvptx-x-none179061
! Ref: or1k-x-elf179968
! Ref: or1k-x-linux180099
! Ref: powerpc-x-x180180
! Ref: powerpc-x-darwin180379
! Ref: powerpc-x-elf180874
! Ref: powerpc-x-linux-gnu180959
! Ref: powerpc-x-netbsd181054
! Ref: powerpc-x-eabisim181142
! Ref: powerpc-x-eabi181268
! Ref: powerpcle-x-elf181344
! Ref: powerpcle-x-eabisim181436
! Ref: powerpcle-x-eabi181569
! Ref: rl78-x-elf181652
! Ref: riscv32-x-elf181758
! Ref: riscv32-x-linux181947
! Ref: riscv64-x-elf182104
! Ref: riscv64-x-linux182293
! Ref: rx-x-elf182450
! Ref: s390-x-linux182496
! Ref: s390x-x-linux182568
! Ref: s390x-ibm-tpf182655
! Ref: x-x-solaris2182786
! Ref: sparc-x-x186719
! Ref: sparc-sun-solaris2187221
! Ref: sparc-x-linux188136
! Ref: sparc64-x-solaris2188167
! Ref: sparcv9-x-solaris2188258
! Ref: c6x-x-x189007
! Ref: visium-x-elf189099
! Ref: x-x-vxworks189207
! Ref: x86-64-x-x190786
! Ref: x86-64-x-solaris2191118
! Ref: xtensa-x-elf191772
! Ref: xtensa-x-linux192451
! Ref: windows192804
! Ref: x-x-cygwin194457
! Ref: x-x-mingw32195010
! Ref: older195408
! Ref: elf197545
! Node: GNU Free Documentation License197799
! Node: Concept Index222940
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/gccint.info gcc-14.3.0-RC-20260619/gcc/doc/gccint.info
*** gcc-14.3.0/gcc/doc/gccint.info	Fri May 23 11:19:50 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gccint.info	Fri Jun 19 07:07:46 2026
***************
*** 1,6 ****
! This is gccint.info, produced by makeinfo version 6.5 from gccint.texi.
  
! Copyright (C) 1988-2024 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
--- 1,6 ----
! This is gccint.info, produced by makeinfo version 7.1 from gccint.texi.
  
! Copyright © 1988-2024 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
*************** END-INFO-DIR-ENTRY
*** 26,32 ****
  
   This file documents the internals of the GNU compilers.
  
!  Copyright (C) 1988-2024 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
--- 26,32 ----
  
   This file documents the internals of the GNU compilers.
  
!  Copyright © 1988-2024 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
*************** Copies published by the Free Software Fo
*** 47,53 ****
  development.
  
  
! File: gccint.info,  Node: Top,  Next: Contributing
  
  Introduction
  ************
--- 47,53 ----
  development.
  
  
! File: gccint.info,  Node: Top,  Next: Contributing,  Up: (dir)
  
  Introduction
  ************
*************** Introduction
*** 55,61 ****
  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 (GCC)
! version 14.3.0.  The use of the GNU compilers is documented in a
  separate manual.  *Note Introduction: (gcc)Top.
  
   This manual is mainly a reference manual rather than a tutorial.  It
--- 55,61 ----
  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 (GCC)
! version 14.3.1.  The use of the GNU compilers is documented in a
  separate manual.  *Note Introduction: (gcc)Top.
  
   This manual is mainly a reference manual rather than a tutorial.  It
*************** GCC.
*** 91,99 ****
  * Loop Analysis and Representation:: Analysis and representation of loops
  * Machine Desc::    How to write machine description instruction patterns.
  * Target Macros::   How to write the machine description C macros and functions.
! * Host Config::     Writing the 'xm-MACHINE.h' file.
! * Fragments::       Writing the 't-TARGET' and 'x-HOST' files.
! * Collect2::        How 'collect2' works; how it finds 'ld'.
  * Header Dirs::     Understanding the standard header file directories.
  * Type Information:: GCC's memory management; generating type information.
  * Plugins::         Extending the compiler with plugins.
--- 91,99 ----
  * Loop Analysis and Representation:: Analysis and representation of loops
  * Machine Desc::    How to write machine description instruction patterns.
  * Target Macros::   How to write the machine description C macros and functions.
! * Host Config::     Writing the ‘xm-MACHINE.h’ file.
! * Fragments::       Writing the ‘t-TARGET’ and ‘x-HOST’ files.
! * Collect2::        How ‘collect2’ works; how it finds ‘ld’.
  * Header Dirs::     Understanding the standard header file directories.
  * Type Information:: GCC's memory management; generating type information.
  * Plugins::         Extending the compiler with plugins.
*************** File: gccint.info,  Node: Portability,
*** 140,149 ****
  2 GCC and Portability
  *********************
  
! GCC itself aims to be portable to any machine where 'int' is at least a
  32-bit type.  It aims to target machines with a flat (non-segmented)
  byte addressed data address space (the code address space can be
! separate).  Target ABIs may have 8, 16, 32 or 64-bit 'int' type.  'char'
  can be wider than 8 bits.
  
   GCC gets most of the information about the target machine from a
--- 140,149 ----
  2 GCC and Portability
  *********************
  
! GCC itself aims to be portable to any machine where ‘int’ is at least a
  32-bit type.  It aims to target machines with a flat (non-segmented)
  byte addressed data address space (the code address space can be
! separate).  Target ABIs may have 8, 16, 32 or 64-bit ‘int’ type.  ‘char’
  can be wider than 8 bits.
  
   GCC gets most of the information about the target machine from a
*************** that are usable for different combinatio
*** 164,170 ****
  all possible cases have been addressed, but only the common ones or only
  the ones that have been encountered.  As a result, a new target may
  require additional strategies.  You will know if this happens because
! the compiler will call 'abort'.  Fortunately, the new strategies can be
  added in a machine-independent fashion, and will affect only the target
  machines that need them.
  
--- 164,170 ----
  all possible cases have been addressed, but only the common ones or only
  the ones that have been encountered.  As a result, a new target may
  require additional strategies.  You will know if this happens because
! the compiler will call ‘abort’.  Fortunately, the new strategies can be
  added in a machine-independent fashion, and will affect only the target
  machines that need them.
  
*************** vice versa.  This does not cause trouble
*** 185,195 ****
  routines return structures or unions.
  
   GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long
! in the same registers used for 'int' or 'double' return values.  (GCC
  typically allocates variables of such types in registers also.)
  Structures and unions of other sizes are returned by storing them into
  an address passed by the caller (usually in a register).  The target
! hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
  
   By contrast, PCC on most target machines returns structures and unions
  of any size by copying the data into an area of static storage, and then
--- 185,195 ----
  routines return structures or unions.
  
   GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long
! in the same registers used for ‘int’ or ‘double’ return values.  (GCC
  typically allocates variables of such types in registers also.)
  Structures and unions of other sizes are returned by storing them into
  an address passed by the caller (usually in a register).  The target
! hook ‘TARGET_STRUCT_VALUE_RTX’ tells GCC where to pass this address.
  
   By contrast, PCC on most target machines returns structures and unions
  of any size by copying the data into an area of static storage, and then
*************** are passed "by invisible reference".  Th
*** 220,228 ****
  stored in memory, and the address of the memory location is passed to
  the subroutine.
  
!  If you use 'longjmp', beware of automatic variables.  ISO C says that
! automatic variables that are not declared 'volatile' have undefined
! values after a 'longjmp'.  And this is all GCC promises to do, because
  it is very difficult to restore register variables correctly, and one of
  GCC's features is that it can put variables in registers without your
  asking it to.
--- 220,228 ----
  stored in memory, and the address of the memory location is passed to
  the subroutine.
  
!  If you use ‘longjmp’, beware of automatic variables.  ISO C says that
! automatic variables that are not declared ‘volatile’ have undefined
! values after a ‘longjmp’.  And this is all GCC promises to do, because
  it is very difficult to restore register variables correctly, and one of
  GCC's features is that it can put variables in registers without your
  asking it to.
*************** File: gccint.info,  Node: Libgcc,  Next:
*** 233,247 ****
  4 The GCC low-level runtime library
  ***********************************
  
! GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1'
  on some platforms.  GCC generates calls to routines in this library
  automatically, whenever it needs to perform some operation that is too
  complicated to emit inline code for.
  
!  Most of the routines in 'libgcc' handle arithmetic operations that the
  target processor cannot perform directly.  This includes integer
  multiply and divide on some machines, and all floating-point and
! fixed-point operations on other machines.  'libgcc' also includes
  routines for exception handling, and a handful of miscellaneous
  operations.
  
--- 233,247 ----
  4 The GCC low-level runtime library
  ***********************************
  
! GCC provides a low-level runtime library, ‘libgcc.a’ or ‘libgcc_s.so.1’
  on some platforms.  GCC generates calls to routines in this library
  automatically, whenever it needs to perform some operation that is too
  complicated to emit inline code for.
  
!  Most of the routines in ‘libgcc’ handle arithmetic operations that the
  target processor cannot perform directly.  This includes integer
  multiply and divide on some machines, and all floating-point and
! fixed-point operations on other machines.  ‘libgcc’ also includes
  routines for exception handling, and a handful of miscellaneous
  operations.
  
*************** operations.
*** 249,266 ****
  Others must be hand-written in assembly language for each processor that
  needs them.
  
!  GCC will also generate calls to C library routines, such as 'memcpy'
! and 'memset', in some cases.  The set of routines that GCC may possibly
  use is documented in *note (gcc)Other Builtins::.
  
   These routines take arguments and return values of a specific machine
  mode, not a specific C type.  *Note Machine Modes::, for an explanation
  of this concept.  For illustrative purposes, in this chapter the
! floating point type 'float' is assumed to correspond to 'SFmode';
! 'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'.
! Similarly, the integer types 'int' and 'unsigned int' correspond to
! 'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and
! 'unsigned long long' to 'TImode'.
  
  * Menu:
  
--- 249,266 ----
  Others must be hand-written in assembly language for each processor that
  needs them.
  
!  GCC will also generate calls to C library routines, such as ‘memcpy’
! and ‘memset’, in some cases.  The set of routines that GCC may possibly
  use is documented in *note (gcc)Other Builtins::.
  
   These routines take arguments and return values of a specific machine
  mode, not a specific C type.  *Note Machine Modes::, for an explanation
  of this concept.  For illustrative purposes, in this chapter the
! floating point type ‘float’ is assumed to correspond to ‘SFmode’;
! ‘double’ to ‘DFmode’; and ‘long double’ to both ‘TFmode’ and ‘XFmode’.
! Similarly, the integer types ‘int’ and ‘unsigned int’ correspond to
! ‘SImode’; ‘long’ and ‘unsigned long’ to ‘DImode’; and ‘long long’ and
! ‘unsigned long long’ to ‘TImode’.
  
  * Menu:
  
*************** result using either signed or unsigned c
*** 374,380 ****
  -----------------------------------
  
  The following functions implement trapping arithmetic.  These functions
! call the libc function 'abort' upon signed arithmetic overflow.
  
   -- Runtime Function: int __absvsi2 (int A)
   -- Runtime Function: long __absvdi2 (long A)
--- 374,380 ----
  -----------------------------------
  
  The following functions implement trapping arithmetic.  These functions
! call the libc function ‘abort’ upon signed arithmetic overflow.
  
   -- Runtime Function: int __absvsi2 (int A)
   -- Runtime Function: long __absvdi2 (long A)
*************** call the libc function 'abort' upon sign
*** 382,401 ****
  
   -- Runtime Function: int __addvsi3 (int A, int B)
   -- Runtime Function: long __addvdi3 (long A, long B)
!      These functions return the sum of A and B; that is 'A + B'.
  
   -- Runtime Function: int __mulvsi3 (int A, int B)
   -- Runtime Function: long __mulvdi3 (long A, long B)
!      The functions return the product of A and B; that is 'A * B'.
  
   -- Runtime Function: int __negvsi2 (int A)
   -- Runtime Function: long __negvdi2 (long A)
!      These functions return the negation of A; that is '-A'.
  
   -- Runtime Function: int __subvsi3 (int A, int B)
   -- Runtime Function: long __subvdi3 (long A, long B)
!      These functions return the difference between B and A; that is 'A -
!      B'.
  
  4.1.4 Bit operations
  --------------------
--- 382,401 ----
  
   -- Runtime Function: int __addvsi3 (int A, int B)
   -- Runtime Function: long __addvdi3 (long A, long B)
!      These functions return the sum of A and B; that is ‘A + B’.
  
   -- Runtime Function: int __mulvsi3 (int A, int B)
   -- Runtime Function: long __mulvdi3 (long A, long B)
!      The functions return the product of A and B; that is ‘A * B’.
  
   -- Runtime Function: int __negvsi2 (int A)
   -- Runtime Function: long __negvdi2 (long A)
!      These functions return the negation of A; that is ‘-A’.
  
   -- Runtime Function: int __subvsi3 (int A, int B)
   -- Runtime Function: long __subvdi3 (long A, long B)
!      These functions return the difference between B and A; that is ‘A -
!      B’.
  
  4.1.4 Bit operations
  --------------------
*************** call the libc function 'abort' upon sign
*** 438,447 ****
  4.1.5 Bit-precise integer arithmetic functions
  ----------------------------------------------
  
! '_BitInt(N)' library functions operate on arrays of limbs, where each
! limb has '__LIBGCC_BITINT_LIMB_WIDTH__' bits and the limbs are ordered
! according to '__LIBGCC_BITINT_ORDER__' ordering.  The most significant
! limb if N is not divisible by '__LIBGCC_BITINT_LIMB_WIDTH__' contains
  padding bits which should be ignored on read (sign or zero extended),
  but extended on write.  For the library functions, all bit-precise
  integers regardless of N are represented like that, even when the target
--- 438,447 ----
  4.1.5 Bit-precise integer arithmetic functions
  ----------------------------------------------
  
! ‘_BitInt(N)’ library functions operate on arrays of limbs, where each
! limb has ‘__LIBGCC_BITINT_LIMB_WIDTH__’ bits and the limbs are ordered
! according to ‘__LIBGCC_BITINT_ORDER__’ ordering.  The most significant
! limb if N is not divisible by ‘__LIBGCC_BITINT_LIMB_WIDTH__’ contains
  padding bits which should be ignored on read (sign or zero extended),
  but extended on write.  For the library functions, all bit-precise
  integers regardless of N are represented like that, even when the target
*************** sign or zero extensions on the input or
*** 457,486 ****
  figures value will need certain lower number of bits.  For big-endian
  ordering of limbs, when lowering the bit size argument the pointer
  argument needs to be adjusted as well.  Negative bit size argument
! should be always smaller or equal to '-2', because 'signed _BitInt(1)'
  is not valid.  For output arguments, either the corresponding bit size
  argument should be always positive (for multiplication and division), or
  is negative when the output of conversion from floating-point value is
  signed and positive when unsigned.  The arrays of limbs output arguments
  point to should not overlap any inputs, while input arrays of limbs can
! overlap.  'UBILtype' below stands for unsigned integer type with
! '__LIBGCC_BITINT_LIMB_WIDTH__' bit precision.
  
!  -- Runtime Function: void __mulbitint3 ('UBILtype' *RET, int32_t
!           RETPREC, const 'UBILtype' *u, int32_t UPREC, const 'UBILtype'
!           *v, int32_t VPREC)
       This function multiplies bit-precise integer operands U and V and
       stores result into RETPREC precision bit-precise integer result
       RET.
  
!  -- Runtime Function: void __divmodbitint4 ('UBILtype' *Q, int32_t
!           QPREC, 'UBILtype' *R, int32_t RPREC, const 'UBILtype' *u,
!           int32_t UPREC, const 'UBILtype' *v, int32_t VPREC)
       This function divides bit-precise integer operands U and V and
       stores quotient into QPREC precision bit-precise integer result Q
!      (unless Q is 'NULL' and QPREC is 0, in that case quotient is not
       stored anywhere) and remainder into RPREC precision bit-precise
!      integer result R (similarly, unless R is 'NULL' and RPREC is 0).
  
  
  File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
--- 457,486 ----
  figures value will need certain lower number of bits.  For big-endian
  ordering of limbs, when lowering the bit size argument the pointer
  argument needs to be adjusted as well.  Negative bit size argument
! should be always smaller or equal to ‘-2’, because ‘signed _BitInt(1)’
  is not valid.  For output arguments, either the corresponding bit size
  argument should be always positive (for multiplication and division), or
  is negative when the output of conversion from floating-point value is
  signed and positive when unsigned.  The arrays of limbs output arguments
  point to should not overlap any inputs, while input arrays of limbs can
! overlap.  ‘UBILtype’ below stands for unsigned integer type with
! ‘__LIBGCC_BITINT_LIMB_WIDTH__’ bit precision.
  
!  -- Runtime Function: void __mulbitint3 (UBILtype *RET, int32_t RETPREC,
!           const UBILtype *u, int32_t UPREC, const UBILtype *v, int32_t
!           VPREC)
       This function multiplies bit-precise integer operands U and V and
       stores result into RETPREC precision bit-precise integer result
       RET.
  
!  -- Runtime Function: void __divmodbitint4 (UBILtype *Q, int32_t QPREC,
!           UBILtype *R, int32_t RPREC, const UBILtype *u, int32_t UPREC,
!           const UBILtype *v, int32_t VPREC)
       This function divides bit-precise integer operands U and V and
       stores quotient into QPREC precision bit-precise integer result Q
!      (unless Q is ‘NULL’ and QPREC is 0, in that case quotient is not
       stored anywhere) and remainder into RPREC precision bit-precise
!      integer result R (similarly, unless R is ‘NULL’ and RPREC is 0).
  
  
  File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
*************** File: gccint.info,  Node: Soft float lib
*** 490,504 ****
  
  The software floating point library is used on machines which do not
  have hardware support for floating point.  It is also used whenever
! '-msoft-float' is used to disable generation of floating point
  instructions.  (Not all targets support this switch.)
  
   For compatibility with other compilers, the floating point emulation
! routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note
  Library Calls::).  In this section, the default names are used.
  
!  Presently the library does not support 'XFmode', which is used for
! 'long double' on some architectures.
  
  4.2.1 Arithmetic functions
  --------------------------
--- 490,504 ----
  
  The software floating point library is used on machines which do not
  have hardware support for floating point.  It is also used whenever
! ‘-msoft-float’ is used to disable generation of floating point
  instructions.  (Not all targets support this switch.)
  
   For compatibility with other compilers, the floating point emulation
! routines can be renamed with the ‘DECLARE_LIBRARY_RENAMES’ macro (*note
  Library Calls::).  In this section, the default names are used.
  
!  Presently the library does not support ‘XFmode’, which is used for
! ‘long double’ on some architectures.
  
  4.2.1 Arithmetic functions
  --------------------------
*************** Library Calls::).  In this section, the
*** 639,668 ****
       These functions convert I, an unsigned long long, to floating
       point.
  
!  -- Runtime Function: void __fixsfbitint ('UBILtype' *R, int32_t RPREC,
            float A)
!  -- Runtime Function: void __fixdfbitint ('UBILtype' *R, int32_t RPREC,
            double A)
!  -- Runtime Function: void __fixxfbitint ('UBILtype' *R, int32_t RPREC,
            __float80 A)
!  -- Runtime Function: void __fixtfbitint ('UBILtype' *R, int32_t RPREC,
            _Float128 A)
       These functions convert A to bit-precise integer R, rounding toward
       zero.  If RPREC is positive, it converts to unsigned bit-precise
       integer and negative values all become zero, if RPREC is negative,
       it converts to signed bit-precise integer.
  
!  -- Runtime Function: float __floatbitintsf ('UBILtype' *I, int32_t
!           IPREC)
!  -- Runtime Function: double __floatbitintdf ('UBILtype' *I, int32_t
            IPREC)
!  -- Runtime Function: __float80 __floatbitintxf ('UBILtype' *I, int32_t
            IPREC)
!  -- Runtime Function: _Float128 __floatbitinttf ('UBILtype' *I, int32_t
            IPREC)
!  -- Runtime Function: _Float16 __floatbitinthf ('UBILtype' *I, int32_t
            IPREC)
!  -- Runtime Function: __bf16 __floatbitintbf ('UBILtype' *I, int32_t
            IPREC)
       These functions convert bit-precise integer I to floating point.
       If IPREC is positive, it is conversion from unsigned bit-precise
--- 639,667 ----
       These functions convert I, an unsigned long long, to floating
       point.
  
!  -- Runtime Function: void __fixsfbitint (UBILtype *R, int32_t RPREC,
            float A)
!  -- Runtime Function: void __fixdfbitint (UBILtype *R, int32_t RPREC,
            double A)
!  -- Runtime Function: void __fixxfbitint (UBILtype *R, int32_t RPREC,
            __float80 A)
!  -- Runtime Function: void __fixtfbitint (UBILtype *R, int32_t RPREC,
            _Float128 A)
       These functions convert A to bit-precise integer R, rounding toward
       zero.  If RPREC is positive, it converts to unsigned bit-precise
       integer and negative values all become zero, if RPREC is negative,
       it converts to signed bit-precise integer.
  
!  -- Runtime Function: float __floatbitintsf (UBILtype *I, int32_t IPREC)
!  -- Runtime Function: double __floatbitintdf (UBILtype *I, int32_t
            IPREC)
!  -- Runtime Function: __float80 __floatbitintxf (UBILtype *I, int32_t
            IPREC)
!  -- Runtime Function: _Float128 __floatbitinttf (UBILtype *I, int32_t
            IPREC)
!  -- Runtime Function: _Float16 __floatbitinthf (UBILtype *I, int32_t
            IPREC)
!  -- Runtime Function: __bf16 __floatbitintbf (UBILtype *I, int32_t
            IPREC)
       These functions convert bit-precise integer I to floating point.
       If IPREC is positive, it is conversion from unsigned bit-precise
*************** There are two sets of basic comparison f
*** 677,683 ****
   -- Runtime Function: int __cmpdf2 (double A, double B)
   -- Runtime Function: int __cmptf2 (long double A, long double B)
       These functions calculate a <=> b.  That is, if A is less than B,
!      they return -1; if A is greater than B, they return 1; and if A and
       B are equal they return 0.  If either argument is NaN they return
       1, but you should not rely on this; if NaN is a possibility, use
       one of the higher-level comparison functions.
--- 676,682 ----
   -- Runtime Function: int __cmpdf2 (double A, double B)
   -- Runtime Function: int __cmptf2 (long double A, long double B)
       These functions calculate a <=> b.  That is, if A is less than B,
!      they return −1; if A is greater than B, they return 1; and if A and
       B are equal they return 0.  If either argument is NaN they return
       1, but you should not rely on this; if NaN is a possibility, use
       one of the higher-level comparison functions.
*************** selected at configure time.
*** 998,1008 ****
       These functions convert I, an unsigned long, to decimal floating
       point.
  
!  -- Runtime Function: void __bid_fixsdbitint ('UBILtype' *R, int32_t
            RPREC, _Decimal32 A)
!  -- Runtime Function: void __bid_fixddbitint ('UBILtype' *R, int32_t
            RPREC, _Decimal64 A)
!  -- Runtime Function: void __bid_fixtdbitint ('UBILtype' *R, int32_t
            RPREC, _Decimal128 A)
       These functions convert A to bit-precise integer R, rounding toward
       zero.  If RPREC is positive, it converts to unsigned bit-precise
--- 997,1007 ----
       These functions convert I, an unsigned long, to decimal floating
       point.
  
!  -- Runtime Function: void __bid_fixsdbitint (UBILtype *R, int32_t
            RPREC, _Decimal32 A)
!  -- Runtime Function: void __bid_fixddbitint (UBILtype *R, int32_t
            RPREC, _Decimal64 A)
!  -- Runtime Function: void __bid_fixtdbitint (UBILtype *R, int32_t
            RPREC, _Decimal128 A)
       These functions convert A to bit-precise integer R, rounding toward
       zero.  If RPREC is positive, it converts to unsigned bit-precise
*************** selected at configure time.
*** 1010,1020 ****
       it converts to signed bit-precise integer.  So far implemented for
       BID format only.
  
!  -- Runtime Function: _Decimal32 __bid_floatbitintsd ('UBILtype' *I,
            int32_t IPREC)
!  -- Runtime Function: _Decimal64 __bid_floatbitintdd ('UBILtype' *I,
            int32_t IPREC)
!  -- Runtime Function: _Decimal128 __bid_floatbitinttd ('UBILtype' *I,
            int32_t IPREC)
       These functions convert bit-precise integer I to decimal floating
       point.  If IPREC is positive, it is conversion from unsigned
--- 1009,1019 ----
       it converts to signed bit-precise integer.  So far implemented for
       BID format only.
  
!  -- Runtime Function: _Decimal32 __bid_floatbitintsd (UBILtype *I,
            int32_t IPREC)
!  -- Runtime Function: _Decimal64 __bid_floatbitintdd (UBILtype *I,
            int32_t IPREC)
!  -- Runtime Function: _Decimal128 __bid_floatbitinttd (UBILtype *I,
            int32_t IPREC)
       These functions convert bit-precise integer I to decimal floating
       point.  If IPREC is positive, it is conversion from unsigned
*************** File: gccint.info,  Node: Fixed-point fr
*** 1111,1130 ****
  The software fixed-point library implements fixed-point fractional
  arithmetic, and is only activated on selected targets.
  
!  For ease of comprehension 'fract' is an alias for the '_Fract' type,
! 'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'.
  
   For illustrative purposes, in this section the fixed-point fractional
! type 'short fract' is assumed to correspond to machine mode 'QQmode';
! 'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode';
! 'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode';
! 'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and
! 'unsigned long long fract' to 'UDQmode'.  Similarly the fixed-point
! accumulator type 'short accum' corresponds to 'HAmode';
! 'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode';
! 'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode';
! 'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and
! 'unsigned long long accum' to 'UTAmode'.
  
  4.4.1 Arithmetic functions
  --------------------------
--- 1110,1129 ----
  The software fixed-point library implements fixed-point fractional
  arithmetic, and is only activated on selected targets.
  
!  For ease of comprehension ‘fract’ is an alias for the ‘_Fract’ type,
! ‘accum’ an alias for ‘_Accum’, and ‘sat’ an alias for ‘_Sat’.
  
   For illustrative purposes, in this section the fixed-point fractional
! type ‘short fract’ is assumed to correspond to machine mode ‘QQmode’;
! ‘unsigned short fract’ to ‘UQQmode’; ‘fract’ to ‘HQmode’;
! ‘unsigned fract’ to ‘UHQmode’; ‘long fract’ to ‘SQmode’;
! ‘unsigned long fract’ to ‘USQmode’; ‘long long fract’ to ‘DQmode’; and
! ‘unsigned long long fract’ to ‘UDQmode’.  Similarly the fixed-point
! accumulator type ‘short accum’ corresponds to ‘HAmode’;
! ‘unsigned short accum’ to ‘UHAmode’; ‘accum’ to ‘SAmode’;
! ‘unsigned accum’ to ‘USAmode’; ‘long accum’ to ‘DAmode’;
! ‘unsigned long accum’ to ‘UDAmode’; ‘long long accum’ to ‘TAmode’; and
! ‘unsigned long long accum’ to ‘UTAmode’.
  
  4.4.1 Arithmetic functions
  --------------------------
*************** accumulator type 'short accum' correspon
*** 1219,1225 ****
            A, unsigned long accum B)
   -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
            long accum A, unsigned long long accum B)
!      These functions return the difference of A and B; that is, 'A - B'.
  
   -- Runtime Function: short fract __sssubqq3 (short fract A, short fract
            B)
--- 1218,1224 ----
            A, unsigned long accum B)
   -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
            long accum A, unsigned long long accum B)
!      These functions return the difference of A and B; that is, ‘A - B’.
  
   -- Runtime Function: short fract __sssubqq3 (short fract A, short fract
            B)
*************** accumulator type 'short accum' correspon
*** 1234,1240 ****
   -- Runtime Function: long long accum __sssubta3 (long long accum A,
            long long accum B)
       These functions return the difference of A and B with signed
!      saturation; that is, 'A - B'.
  
   -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
            fract A, unsigned short fract B)
--- 1233,1239 ----
   -- Runtime Function: long long accum __sssubta3 (long long accum A,
            long long accum B)
       These functions return the difference of A and B with signed
!      saturation; that is, ‘A - B’.
  
   -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
            fract A, unsigned short fract B)
*************** accumulator type 'short accum' correspon
*** 1253,1259 ****
   -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
            long long accum A, unsigned long long accum B)
       These functions return the difference of A and B with unsigned
!      saturation; that is, 'A - B'.
  
   -- Runtime Function: short fract __mulqq3 (short fract A, short fract
            B)
--- 1252,1258 ----
   -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
            long long accum A, unsigned long long accum B)
       These functions return the difference of A and B with unsigned
!      saturation; that is, ‘A - B’.
  
   -- Runtime Function: short fract __mulqq3 (short fract A, short fract
            B)
*************** File: gccint.info,  Node: Miscellaneous
*** 3042,3048 ****
   -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
            *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
            **INITIAL_SP)
!      When using '-fsplit-stack', this call may be used to iterate over
       the stack segments.  It may be called like this:
              void *next_segment = NULL;
              void *next_sp = NULL;
--- 3041,3047 ----
   -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
            *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
            **INITIAL_SP)
!      When using ‘-fsplit-stack’, this call may be used to iterate over
       the stack segments.  It may be called like this:
              void *next_segment = NULL;
              void *next_sp = NULL;
*************** File: gccint.info,  Node: Miscellaneous
*** 3063,3077 ****
       with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
       NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
       one way or another.  A different thread may run the subsequent
!      '__splitstack_find' iterations.  Of course, this will only work if
       the first thread is suspended while the second thread is calling
!      '__splitstack_find'.  If not, the second thread could be looking at
       the stack while it is changing, and anything could happen.
  
   -- Variable: __morestack_segments
   -- Variable: __morestack_current_segment
   -- Variable: __morestack_initial_sp
!      Internal variables used by the '-fsplit-stack' implementation.
  
  
  File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
--- 3062,3076 ----
       with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
       NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
       one way or another.  A different thread may run the subsequent
!      ‘__splitstack_find’ iterations.  Of course, this will only work if
       the first thread is suspended while the second thread is calling
!      ‘__splitstack_find’.  If not, the second thread could be looking at
       the stack while it is changing, and anything could happen.
  
   -- Variable: __morestack_segments
   -- Variable: __morestack_current_segment
   -- Variable: __morestack_initial_sp
!      Internal variables used by the ‘-fsplit-stack’ implementation.
  
  
  File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
*************** File: gccint.info,  Node: Languages,  Ne
*** 3080,3086 ****
  ****************************
  
  The interface to front ends for languages in GCC, and in particular the
! 'tree' structure (*note GENERIC::), was initially designed for C, and
  many aspects of it are still somewhat biased towards C and C-like
  languages.  It is, however, reasonably well suited to other procedural
  languages, and front ends for many such languages have been written for
--- 3079,3085 ----
  ****************************
  
  The interface to front ends for languages in GCC, and in particular the
! ‘tree’ structure (*note GENERIC::), was initially designed for C, and
  many aspects of it are still somewhat biased towards C and C-like
  languages.  It is, however, reasonably well suited to other procedural
  languages, and front ends for many such languages have been written for
*************** GCC.
*** 3090,3102 ****
  directly to assembler or generating C code which is then compiled by
  GCC, has several advantages:
  
!    * GCC front ends benefit from the support for many different target
       machines already present in GCC.
!    * GCC front ends benefit from all the optimizations in GCC.  Some of
       these, such as alias analysis, may work better when GCC is
       compiling directly from source code than when it is compiling from
       generated C code.
!    * Better debugging information is generated when compiling directly
       from source code than when going via intermediate generated C code.
  
   Because of the advantages of writing a compiler as a GCC front end, GCC
--- 3089,3101 ----
  directly to assembler or generating C code which is then compiled by
  GCC, has several advantages:
  
!    • GCC front ends benefit from the support for many different target
       machines already present in GCC.
!    • GCC front ends benefit from all the optimizations in GCC.  Some of
       these, such as alias analysis, may work better when GCC is
       compiling directly from source code than when it is compiling from
       generated C code.
!    • Better debugging information is generated when compiling directly
       from source code than when going via intermediate generated C code.
  
   Because of the advantages of writing a compiler as a GCC front end, GCC
*************** presumed that you are familiar.
*** 3121,3127 ****
  
  * Configure Terms:: Configuration terminology and history.
  * Top Level::       The top level source directory.
! * gcc Directory::   The 'gcc' subdirectory.
  
  
  File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
--- 3120,3126 ----
  
  * Configure Terms:: Configuration terminology and history.
  * Top Level::       The top level source directory.
! * gcc Directory::   The ‘gcc’ subdirectory.
  
  
  File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
*************** in detail, here are a few things that ev
*** 3136,3180 ****
  know.
  
   There are three system names that the build knows about: the machine
! you are building on ("build"), the machine that you are building for
! ("host"), and the machine that GCC will produce code for ("target").
! When you configure GCC, you specify these with '--build=', '--host=',
! and '--target='.
  
   Specifying the host without specifying the build should be avoided, as
! 'configure' may (and once did) assume that the host you specify is also
  the build, which may not be true.
  
!  If build, host, and target are all the same, this is called a "native".
  If build and host are the same but target is different, this is called a
! "cross".  If build, host, and target are all different this is called a
! "canadian" (for obscure reasons dealing with Canada's political party
  and the background of the person working on the build at that time).  If
  host and target are the same, but build is different, you are using a
  cross-compiler to build a native for a different system.  Some people
! call this a "host-x-host", "crossed native", or "cross-built native".
  If build and target are the same, but host is different, you are using a
  cross compiler to build a cross compiler that produces code for the
  machine you're building on.  This is rare, so there is no common way of
! describing it.  There is a proposal to call this a "crossback".
  
   If build and host are the same, the GCC you are building will also be
! used to build the target libraries (like 'libstdc++').  If build and
  host are different, you must have already built and installed a cross
  compiler that will be used to build the target libraries (if you
! configured with '--target=foo-bar', this compiler will be called
! 'foo-bar-gcc').
  
   In the case of target libraries, the machine you're building for is the
! machine you specified with '--target'.  So, build is the machine you're
  building on (no change there), host is the machine you're building for
  (the target libraries are built for the target, so host is the target
  you specified), and target doesn't apply (because you're not building a
  compiler, you're building libraries).  The configure/make process will
! adjust these variables as needed.  It also sets '$with_cross_host' to
! the original '--host' value in case you need it.
  
!  The 'libiberty' support library is built up to three times: once for
  the host, once for the target (even if they are the same), and once for
  the build if build and host are different.  This allows it to be used by
  all programs which are generated in the course of the build process.
--- 3135,3179 ----
  know.
  
   There are three system names that the build knows about: the machine
! you are building on (“build”), the machine that you are building for
! (“host”), and the machine that GCC will produce code for (“target”).
! When you configure GCC, you specify these with ‘--build=’, ‘--host=’,
! and ‘--target=’.
  
   Specifying the host without specifying the build should be avoided, as
! ‘configure’ may (and once did) assume that the host you specify is also
  the build, which may not be true.
  
!  If build, host, and target are all the same, this is called a “native”.
  If build and host are the same but target is different, this is called a
! “cross”.  If build, host, and target are all different this is called a
! “canadian” (for obscure reasons dealing with Canada's political party
  and the background of the person working on the build at that time).  If
  host and target are the same, but build is different, you are using a
  cross-compiler to build a native for a different system.  Some people
! call this a “host-x-host”, “crossed native”, or “cross-built native”.
  If build and target are the same, but host is different, you are using a
  cross compiler to build a cross compiler that produces code for the
  machine you're building on.  This is rare, so there is no common way of
! describing it.  There is a proposal to call this a “crossback”.
  
   If build and host are the same, the GCC you are building will also be
! used to build the target libraries (like ‘libstdc++’).  If build and
  host are different, you must have already built and installed a cross
  compiler that will be used to build the target libraries (if you
! configured with ‘--target=foo-bar’, this compiler will be called
! ‘foo-bar-gcc’).
  
   In the case of target libraries, the machine you're building for is the
! machine you specified with ‘--target’.  So, build is the machine you're
  building on (no change there), host is the machine you're building for
  (the target libraries are built for the target, so host is the target
  you specified), and target doesn't apply (because you're not building a
  compiler, you're building libraries).  The configure/make process will
! adjust these variables as needed.  It also sets ‘$with_cross_host’ to
! the original ‘--host’ value in case you need it.
  
!  The ‘libiberty’ support library is built up to three times: once for
  the host, once for the target (even if they are the same), and once for
  the build if build and host are different.  This allows it to be used by
  all programs which are generated in the course of the build process.
*************** files and directories that are shared wi
*** 3190,3316 ****
  such as that of GNU Binutils.  It also contains several subdirectories
  that contain parts of GCC and its runtime libraries:
  
! 'c++tools'
       Contains the sources for the g++-mapper-server, a tool used with
       C++ modules.
  
! 'config'
       Autoconf macros and Makefile fragments used throughout the tree.
  
! 'contrib'
       Contributed scripts that may be found useful in conjunction with
!      GCC.  One of these, 'contrib/texi2pod.pl', is used to generate man
       pages from Texinfo manuals as part of the GCC build process.
  
! 'fixincludes'
       The support for fixing system headers to work with GCC.  See
!      'fixincludes/README' for more information.  The headers fixed by
!      this mechanism are installed in 'LIBSUBDIR/include-fixed'.  Along
!      with those headers, 'README-fixinc' is also installed, as
!      'LIBSUBDIR/include-fixed/README'.
  
! 'gcc'
       The main sources of GCC itself (except for runtime libraries),
       including optimizers, support for different target architectures,
!      language front ends, and testsuites.  *Note The 'gcc' Subdirectory:
       gcc Directory, for details.
  
! 'gnattools'
       Support tools for GNAT.
  
! 'gotools'
       Support tools for Go.
  
! 'include'
!      Headers for the 'libiberty' library.
  
! 'intl'
!      GNU 'libintl', from GNU 'gettext', for systems which do not include
!      it in 'libc'.
  
! 'libada'
       The Ada runtime library.
  
! 'libatomic'
       The runtime support library for atomic operations (e.g. for
!      '__sync' and '__atomic').
  
! 'libbacktrace'
       A library that allows GCC to produce backtraces when it crashes.
  
! 'libcc1'
       A library that allows GDB to make use of the compiler.
  
! 'libcody'
       A compiler dynamism library to allow communication between
       compilers and build systems, for purposes such as C++ modules.
  
! 'libcpp'
       The C preprocessor library.
  
! 'libdecnumber'
       The Decimal Float support library.
  
! 'libffi'
!      The 'libffi' library, used as part of the Go runtime library.
  
! 'libgcc'
       The GCC runtime library.
  
! 'libgfortran'
       The Fortran runtime library.
  
! 'libgm2'
       The Modula-2 runtime library.
  
! 'libgo'
       The Go runtime library.  The bulk of this library is mirrored from
       the master Go repository (https://github.com/golang/go).
  
! 'libgomp'
       The GNU Offloading and Multi Processing Runtime Library.
  
! 'libiberty'
!      The 'libiberty' library, used for portability and for some
       generally useful data structures and algorithms.  *Note
       Introduction: (libiberty)Top, for more information about this
       library.
  
! 'libitm'
       The runtime support library for transactional memory.
  
! 'libobjc'
       The Objective-C and Objective-C++ runtime library.
  
! 'libphobos'
       The D standard and runtime library.  The bulk of this library is
       mirrored from the master D repositories (https://github.com/dlang).
  
! 'libquadmath'
       The runtime support library for quad-precision math operations.
  
! 'libsanitizer'
       Libraries for various sanitizers.  The bulk of this directory is
       mirrored from the Google sanitizers repositories
       (https://github.com/google/sanitizers).
  
! 'libssp'
       The Stack protector runtime library.
  
! 'libstdc++-v3'
       The C++ runtime library.
  
! 'libvtv'
       The vtable verification library.
  
! 'lto-plugin'
       Plugin used by the linker if link-time optimizations are enabled.
  
! 'maintainer-scripts'
!      Scripts used by the 'gccadmin' account on 'gcc.gnu.org'.
  
! 'zlib'
!      The 'zlib' compression library, used for compressing and
       uncompressing GCC's intermediate language in LTO object files.
  
   The build system in the top level directory, including how recursion
--- 3189,3315 ----
  such as that of GNU Binutils.  It also contains several subdirectories
  that contain parts of GCC and its runtime libraries:
  
! ‘c++tools’
       Contains the sources for the g++-mapper-server, a tool used with
       C++ modules.
  
! ‘config’
       Autoconf macros and Makefile fragments used throughout the tree.
  
! ‘contrib’
       Contributed scripts that may be found useful in conjunction with
!      GCC.  One of these, ‘contrib/texi2pod.pl’, is used to generate man
       pages from Texinfo manuals as part of the GCC build process.
  
! ‘fixincludes’
       The support for fixing system headers to work with GCC.  See
!      ‘fixincludes/README’ for more information.  The headers fixed by
!      this mechanism are installed in ‘LIBSUBDIR/include-fixed’.  Along
!      with those headers, ‘README-fixinc’ is also installed, as
!      ‘LIBSUBDIR/include-fixed/README’.
  
! ‘gcc’
       The main sources of GCC itself (except for runtime libraries),
       including optimizers, support for different target architectures,
!      language front ends, and testsuites.  *Note The ‘gcc’ Subdirectory:
       gcc Directory, for details.
  
! ‘gnattools’
       Support tools for GNAT.
  
! ‘gotools’
       Support tools for Go.
  
! ‘include’
!      Headers for the ‘libiberty’ library.
  
! ‘intl’
!      GNU ‘libintl’, from GNU ‘gettext’, for systems which do not include
!      it in ‘libc’.
  
! ‘libada’
       The Ada runtime library.
  
! ‘libatomic’
       The runtime support library for atomic operations (e.g. for
!      ‘__sync’ and ‘__atomic’).
  
! ‘libbacktrace’
       A library that allows GCC to produce backtraces when it crashes.
  
! ‘libcc1’
       A library that allows GDB to make use of the compiler.
  
! ‘libcody’
       A compiler dynamism library to allow communication between
       compilers and build systems, for purposes such as C++ modules.
  
! ‘libcpp’
       The C preprocessor library.
  
! ‘libdecnumber’
       The Decimal Float support library.
  
! ‘libffi’
!      The ‘libffi’ library, used as part of the Go runtime library.
  
! ‘libgcc’
       The GCC runtime library.
  
! ‘libgfortran’
       The Fortran runtime library.
  
! ‘libgm2’
       The Modula-2 runtime library.
  
! ‘libgo’
       The Go runtime library.  The bulk of this library is mirrored from
       the master Go repository (https://github.com/golang/go).
  
! ‘libgomp’
       The GNU Offloading and Multi Processing Runtime Library.
  
! ‘libiberty’
!      The ‘libiberty’ library, used for portability and for some
       generally useful data structures and algorithms.  *Note
       Introduction: (libiberty)Top, for more information about this
       library.
  
! ‘libitm’
       The runtime support library for transactional memory.
  
! ‘libobjc’
       The Objective-C and Objective-C++ runtime library.
  
! ‘libphobos’
       The D standard and runtime library.  The bulk of this library is
       mirrored from the master D repositories (https://github.com/dlang).
  
! ‘libquadmath’
       The runtime support library for quad-precision math operations.
  
! ‘libsanitizer’
       Libraries for various sanitizers.  The bulk of this directory is
       mirrored from the Google sanitizers repositories
       (https://github.com/google/sanitizers).
  
! ‘libssp’
       The Stack protector runtime library.
  
! ‘libstdc++-v3’
       The C++ runtime library.
  
! ‘libvtv’
       The vtable verification library.
  
! ‘lto-plugin’
       Plugin used by the linker if link-time optimizations are enabled.
  
! ‘maintainer-scripts’
!      Scripts used by the ‘gccadmin’ account on ‘gcc.gnu.org’.
  
! ‘zlib’
!      The ‘zlib’ compression library, used for compressing and
       uncompressing GCC's intermediate language in LTO object files.
  
   The build system in the top level directory, including how recursion
*************** GNU Binutils.
*** 3321,3330 ****
  
  File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
  
! 6.3 The 'gcc' Subdirectory
  ==========================
  
! The 'gcc' directory contains many files that are part of the C sources
  of GCC, other files used as part of the configuration and build process,
  and subdirectories including documentation and a testsuite.  The files
  that are sources of GCC are documented in a separate chapter.  *Note
--- 3320,3329 ----
  
  File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
  
! 6.3 The ‘gcc’ Subdirectory
  ==========================
  
! The ‘gcc’ directory contains many files that are part of the C sources
  of GCC, other files used as part of the configuration and build process,
  and subdirectories including documentation and a testsuite.  The files
  that are sources of GCC are documented in a separate chapter.  *Note
*************** Passes and Files of the Compiler: Passes
*** 3332,3342 ****
  
  * Menu:
  
! * Subdirectories:: Subdirectories of 'gcc'.
  * Configuration::  The configuration process, and the files it uses.
! * Build::          The build system in the 'gcc' directory.
! * Makefile::       Targets in 'gcc/Makefile'.
! * Library Files::  Library source files and headers under 'gcc/'.
  * Headers::        Headers installed by GCC.
  * Documentation::  Building documentation in GCC.
  * Front End::      Anatomy of a language front end.
--- 3331,3341 ----
  
  * Menu:
  
! * Subdirectories:: Subdirectories of ‘gcc’.
  * Configuration::  The configuration process, and the files it uses.
! * Build::          The build system in the ‘gcc’ directory.
! * Makefile::       Targets in ‘gcc/Makefile’.
! * Library Files::  Library source files and headers under ‘gcc/’.
  * Headers::        Headers installed by GCC.
  * Documentation::  Building documentation in GCC.
  * Front End::      Anatomy of a language front end.
*************** Passes and Files of the Compiler: Passes
*** 3345,3461 ****
  
  File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
  
! 6.3.1 Subdirectories of 'gcc'
  -----------------------------
  
! The 'gcc' directory contains the following subdirectories:
  
! 'LANGUAGE'
       Subdirectories for various languages.  Directories containing a
!      file 'config-lang.in' are language subdirectories.  The contents of
!      the subdirectories 'c' (for C), 'cp' (for C++), 'm2' (for
!      Modula-2), 'objc' (for Objective-C), 'objcp' (for Objective-C++),
!      and 'lto' (for LTO) are documented in this manual (*note Passes and
       Files of the Compiler: Passes.); those for other languages are not.
       *Note Anatomy of a Language Front End: Front End, for details of
       the files in these directories.
  
! 'common'
!      Source files shared between the compiler drivers (such as 'gcc')
!      and the compilers proper (such as 'cc1').  If an architecture
       defines target hooks shared between those places, it also has a
!      subdirectory in 'common/config'.  *Note Target Structure::.
  
! 'config'
       Configuration files for supported architectures and operating
       systems.  *Note Anatomy of a Target Back End: Back End, for details
       of the files in this directory.
  
! 'doc'
       Texinfo documentation for GCC, together with automatically
       generated man pages and support for converting the installation
       manual to HTML.  *Note Documentation::.
  
! 'ginclude'
       System headers installed by GCC, mainly those required by the C
       standard of freestanding implementations.  *Note Headers Installed
       by GCC: Headers, for details of when these and other headers are
       installed.
  
! 'po'
       Message catalogs with translations of messages produced by GCC into
!      various languages, 'LANGUAGE.po'.  This directory also contains
!      'gcc.pot', the template for these message catalogues, 'exgettext',
!      a wrapper around 'gettext' to extract the messages from the GCC
!      sources and create 'gcc.pot', which is run by 'make gcc.pot', and
!      'EXCLUDES', a list of files from which messages should not be
       extracted.
  
! 'testsuite'
       The GCC testsuites (except for those for runtime libraries).  *Note
       Testsuites::.
  
  
  File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
  
! 6.3.2 Configuration in the 'gcc' Directory
  ------------------------------------------
  
! The 'gcc' directory is configured with an Autoconf-generated script
! 'configure'.  The 'configure' script is generated from 'configure.ac'
! and 'aclocal.m4'.  From the files 'configure.ac' and 'acconfig.h',
! Autoheader generates the file 'config.in'.  The file 'cstamp-h.in' is
  used as a timestamp.
  
  * Menu:
  
! * Config Fragments::     Scripts used by 'configure'.
! * System Config::        The 'config.build', 'config.host', and
!                          'config.gcc' files.
! * Configuration Files::  Files created by running 'configure'.
  
  
  File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
  
! 6.3.2.1 Scripts Used by 'configure'
  ...................................
  
! 'configure' uses some other scripts to help in its work:
  
!    * The standard GNU 'config.sub' and 'config.guess' files, kept in the
       top level directory, are used.
  
!    * The file 'config.gcc' is used to handle configuration specific to
!      the particular target machine.  The file 'config.build' is used to
       handle configuration specific to the particular build machine.  The
!      file 'config.host' is used to handle configuration specific to the
       particular host machine.  (In general, these should only be used
       for features that cannot reasonably be tested in Autoconf feature
!      tests.)  *Note The 'config.build'; 'config.host'; and 'config.gcc'
       Files: System Config, for details of the contents of these files.
  
!    * Each language subdirectory has a file 'LANGUAGE/config-lang.in'
       that is used for front-end-specific configuration.  *Note The Front
!      End 'config-lang.in' File: Front End Config, for details of this
       file.
  
!    * A helper script 'configure.frag' is used as part of creating the
!      output of 'configure'.
  
  
  File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
  
! 6.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files
  .................................................................
  
! The 'config.build' file contains specific rules for particular systems
  which GCC is built on.  This should be used as rarely as possible, as
  the behavior of the build system can always be detected by autoconf.
  
!  The 'config.host' file contains specific rules for particular systems
  which GCC will run on.  This is rarely needed.
  
!  The 'config.gcc' file contains specific rules for particular systems
  which GCC will generate code for.  This is usually needed.
  
   Each file has a list of the shell variables it sets, with descriptions,
--- 3344,3460 ----
  
  File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
  
! 6.3.1 Subdirectories of ‘gcc’
  -----------------------------
  
! The ‘gcc’ directory contains the following subdirectories:
  
! ‘LANGUAGE’
       Subdirectories for various languages.  Directories containing a
!      file ‘config-lang.in’ are language subdirectories.  The contents of
!      the subdirectories ‘c’ (for C), ‘cp’ (for C++), ‘m2’ (for
!      Modula-2), ‘objc’ (for Objective-C), ‘objcp’ (for Objective-C++),
!      and ‘lto’ (for LTO) are documented in this manual (*note Passes and
       Files of the Compiler: Passes.); those for other languages are not.
       *Note Anatomy of a Language Front End: Front End, for details of
       the files in these directories.
  
! ‘common’
!      Source files shared between the compiler drivers (such as ‘gcc’)
!      and the compilers proper (such as ‘cc1’).  If an architecture
       defines target hooks shared between those places, it also has a
!      subdirectory in ‘common/config’.  *Note Target Structure::.
  
! ‘config’
       Configuration files for supported architectures and operating
       systems.  *Note Anatomy of a Target Back End: Back End, for details
       of the files in this directory.
  
! ‘doc’
       Texinfo documentation for GCC, together with automatically
       generated man pages and support for converting the installation
       manual to HTML.  *Note Documentation::.
  
! ‘ginclude’
       System headers installed by GCC, mainly those required by the C
       standard of freestanding implementations.  *Note Headers Installed
       by GCC: Headers, for details of when these and other headers are
       installed.
  
! ‘po’
       Message catalogs with translations of messages produced by GCC into
!      various languages, ‘LANGUAGE.po’.  This directory also contains
!      ‘gcc.pot’, the template for these message catalogues, ‘exgettext’,
!      a wrapper around ‘gettext’ to extract the messages from the GCC
!      sources and create ‘gcc.pot’, which is run by ‘make gcc.pot’, and
!      ‘EXCLUDES’, a list of files from which messages should not be
       extracted.
  
! ‘testsuite’
       The GCC testsuites (except for those for runtime libraries).  *Note
       Testsuites::.
  
  
  File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
  
! 6.3.2 Configuration in the ‘gcc’ Directory
  ------------------------------------------
  
! The ‘gcc’ directory is configured with an Autoconf-generated script
! ‘configure’.  The ‘configure’ script is generated from ‘configure.ac’
! and ‘aclocal.m4’.  From the files ‘configure.ac’ and ‘acconfig.h’,
! Autoheader generates the file ‘config.in’.  The file ‘cstamp-h.in’ is
  used as a timestamp.
  
  * Menu:
  
! * Config Fragments::     Scripts used by ‘configure’.
! * System Config::        The ‘config.build’, ‘config.host’, and
!                          ‘config.gcc’ files.
! * Configuration Files::  Files created by running ‘configure’.
  
  
  File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
  
! 6.3.2.1 Scripts Used by ‘configure’
  ...................................
  
! ‘configure’ uses some other scripts to help in its work:
  
!    • The standard GNU ‘config.sub’ and ‘config.guess’ files, kept in the
       top level directory, are used.
  
!    • The file ‘config.gcc’ is used to handle configuration specific to
!      the particular target machine.  The file ‘config.build’ is used to
       handle configuration specific to the particular build machine.  The
!      file ‘config.host’ is used to handle configuration specific to the
       particular host machine.  (In general, these should only be used
       for features that cannot reasonably be tested in Autoconf feature
!      tests.)  *Note The ‘config.build’; ‘config.host’; and ‘config.gcc’
       Files: System Config, for details of the contents of these files.
  
!    • Each language subdirectory has a file ‘LANGUAGE/config-lang.in’
       that is used for front-end-specific configuration.  *Note The Front
!      End ‘config-lang.in’ File: Front End Config, for details of this
       file.
  
!    • A helper script ‘configure.frag’ is used as part of creating the
!      output of ‘configure’.
  
  
  File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
  
! 6.3.2.2 The ‘config.build’; ‘config.host’; and ‘config.gcc’ Files
  .................................................................
  
! The ‘config.build’ file contains specific rules for particular systems
  which GCC is built on.  This should be used as rarely as possible, as
  the behavior of the build system can always be detected by autoconf.
  
!  The ‘config.host’ file contains specific rules for particular systems
  which GCC will run on.  This is rarely needed.
  
!  The ‘config.gcc’ file contains specific rules for particular systems
  which GCC will generate code for.  This is usually needed.
  
   Each file has a list of the shell variables it sets, with descriptions,
*************** be set to control build, host and target
*** 3467,3524 ****
  
  File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
  
! 6.3.2.3 Files Created by 'configure'
  ....................................
  
! Here we spell out what files will be set up by 'configure' in the 'gcc'
  directory.  Some other files are created as temporary files in the
  configuration process, and are not used in the subsequent build; these
  are not documented.
  
!    * 'Makefile' is constructed from 'Makefile.in', together with the
       host and target fragments (*note Makefile Fragments: Fragments.)
!      't-TARGET' and 'x-HOST' from 'config', if any, and language
!      Makefile fragments 'LANGUAGE/Make-lang.in'.
!    * 'auto-host.h' contains information about the host machine
!      determined by 'configure'.  If the host machine is different from
!      the build machine, then 'auto-build.h' is also created, containing
       such information about the build machine.
!    * 'config.status' is a script that may be run to recreate the current
       configuration.
!    * 'configargs.h' is a header containing details of the arguments
!      passed to 'configure' to configure GCC, and of the thread model
       used.
!    * 'cstamp-h' is used as a timestamp.
!    * If a language 'config-lang.in' file (*note The Front End
!      'config-lang.in' File: Front End Config.) sets 'outputs', then the
!      files listed in 'outputs' there are also generated.
  
   The following configuration headers are created from the Makefile,
! using 'mkconfig.sh', rather than directly by 'configure'.  'config.h',
! 'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if
  any, appropriate to the host, build and target machines respectively,
  the configuration headers for the target, and some definitions; for the
  host and build machines, these include the autoconfigured headers
! generated by 'configure'.  The other configuration headers are
! determined by 'config.gcc'.  They also contain the typedefs for 'rtx',
! 'rtvec' and 'tree'.
  
!    * 'config.h', for use in programs that run on the host machine.
!    * 'bconfig.h', for use in programs that run on the build machine.
!    * 'tconfig.h', for use in programs and libraries for the target
       machine.
!    * 'tm_p.h', which includes the header 'MACHINE-protos.h' that
!      contains prototypes for functions in the target 'MACHINE.c' file.
!      The 'MACHINE-protos.h' header is included after the 'rtl.h' and/or
!      'tree.h' would have been included.  The 'tm_p.h' also includes the
!      header 'tm-preds.h' which is generated by 'genpreds' program during
       the build to define the declarations and inline functions for the
       predicate functions.
  
  
  File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
  
! 6.3.3 Build System in the 'gcc' Directory
  -----------------------------------------
  
  FIXME: describe the build system, including what is built in what
--- 3466,3523 ----
  
  File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
  
! 6.3.2.3 Files Created by ‘configure’
  ....................................
  
! Here we spell out what files will be set up by ‘configure’ in the ‘gcc’
  directory.  Some other files are created as temporary files in the
  configuration process, and are not used in the subsequent build; these
  are not documented.
  
!    • ‘Makefile’ is constructed from ‘Makefile.in’, together with the
       host and target fragments (*note Makefile Fragments: Fragments.)
!      ‘t-TARGET’ and ‘x-HOST’ from ‘config’, if any, and language
!      Makefile fragments ‘LANGUAGE/Make-lang.in’.
!    • ‘auto-host.h’ contains information about the host machine
!      determined by ‘configure’.  If the host machine is different from
!      the build machine, then ‘auto-build.h’ is also created, containing
       such information about the build machine.
!    • ‘config.status’ is a script that may be run to recreate the current
       configuration.
!    • ‘configargs.h’ is a header containing details of the arguments
!      passed to ‘configure’ to configure GCC, and of the thread model
       used.
!    • ‘cstamp-h’ is used as a timestamp.
!    • If a language ‘config-lang.in’ file (*note The Front End
!      ‘config-lang.in’ File: Front End Config.) sets ‘outputs’, then the
!      files listed in ‘outputs’ there are also generated.
  
   The following configuration headers are created from the Makefile,
! using ‘mkconfig.sh’, rather than directly by ‘configure’.  ‘config.h’,
! ‘bconfig.h’ and ‘tconfig.h’ all contain the ‘xm-MACHINE.h’ header, if
  any, appropriate to the host, build and target machines respectively,
  the configuration headers for the target, and some definitions; for the
  host and build machines, these include the autoconfigured headers
! generated by ‘configure’.  The other configuration headers are
! determined by ‘config.gcc’.  They also contain the typedefs for ‘rtx’,
! ‘rtvec’ and ‘tree’.
  
!    • ‘config.h’, for use in programs that run on the host machine.
!    • ‘bconfig.h’, for use in programs that run on the build machine.
!    • ‘tconfig.h’, for use in programs and libraries for the target
       machine.
!    • ‘tm_p.h’, which includes the header ‘MACHINE-protos.h’ that
!      contains prototypes for functions in the target ‘MACHINE.c’ file.
!      The ‘MACHINE-protos.h’ header is included after the ‘rtl.h’ and/or
!      ‘tree.h’ would have been included.  The ‘tm_p.h’ also includes the
!      header ‘tm-preds.h’ which is generated by ‘genpreds’ program during
       the build to define the declarations and inline functions for the
       predicate functions.
  
  
  File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
  
! 6.3.3 Build System in the ‘gcc’ Directory
  -----------------------------------------
  
  FIXME: describe the build system, including what is built in what
*************** File: gccint.info,  Node: Makefile,  Nex
*** 3532,3598 ****
  6.3.4 Makefile Targets
  ----------------------
  
! These targets are available from the 'gcc' directory:
  
! 'all'
       This is the default target.  Depending on what your
       build/host/target configuration is, it coordinates all the things
       that need to be built.
  
! 'doc'
       Produce info-formatted documentation and man pages.  Essentially it
!      calls 'make man' and 'make info'.
  
! 'dvi'
       Produce DVI-formatted documentation.
  
! 'pdf'
       Produce PDF-formatted documentation.
  
! 'html'
       Produce HTML-formatted documentation.
  
! 'man'
       Generate man pages.
  
! 'info'
       Generate info-formatted pages.
  
! 'mostlyclean'
       Delete the files made while building the compiler.
  
! 'clean'
!      That, and all the other files built by 'make all'.
  
! 'distclean'
!      That, and all the files created by 'configure'.
  
! 'maintainer-clean'
       Distclean plus any file that can be generated from other files.
       Note that additional tools may be required beyond what is normally
       needed to build GCC.
  
! 'srcextra'
       Generates files in the source directory that are not
       version-controlled but should go into a release tarball.
  
! 'srcinfo'
! 'srcman'
       Copies the info-formatted and manpage documentation into the source
       directory usually for the purpose of generating a release tarball.
  
! 'install'
       Installs GCC.
  
! 'uninstall'
       Deletes installed files, though this is not supported.
  
! 'check'
!      Run the testsuite.  This creates a 'testsuite' subdirectory that
!      has various '.sum' and '.log' files containing the results of the
!      testing.  You can run subsets with, for example, 'make check-gcc'.
!      You can specify specific tests by setting 'RUNTESTFLAGS' to be the
!      name of the '.exp' file, optionally followed by (for some tests) an
       equals and a file wildcard, like:
  
            make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
--- 3531,3597 ----
  6.3.4 Makefile Targets
  ----------------------
  
! These targets are available from the ‘gcc’ directory:
  
! ‘all’
       This is the default target.  Depending on what your
       build/host/target configuration is, it coordinates all the things
       that need to be built.
  
! ‘doc’
       Produce info-formatted documentation and man pages.  Essentially it
!      calls ‘make man’ and ‘make info’.
  
! ‘dvi’
       Produce DVI-formatted documentation.
  
! ‘pdf’
       Produce PDF-formatted documentation.
  
! ‘html’
       Produce HTML-formatted documentation.
  
! ‘man’
       Generate man pages.
  
! ‘info’
       Generate info-formatted pages.
  
! ‘mostlyclean’
       Delete the files made while building the compiler.
  
! ‘clean’
!      That, and all the other files built by ‘make all’.
  
! ‘distclean’
!      That, and all the files created by ‘configure’.
  
! ‘maintainer-clean’
       Distclean plus any file that can be generated from other files.
       Note that additional tools may be required beyond what is normally
       needed to build GCC.
  
! ‘srcextra’
       Generates files in the source directory that are not
       version-controlled but should go into a release tarball.
  
! ‘srcinfo’
! ‘srcman’
       Copies the info-formatted and manpage documentation into the source
       directory usually for the purpose of generating a release tarball.
  
! ‘install’
       Installs GCC.
  
! ‘uninstall’
       Deletes installed files, though this is not supported.
  
! ‘check’
!      Run the testsuite.  This creates a ‘testsuite’ subdirectory that
!      has various ‘.sum’ and ‘.log’ files containing the results of the
!      testing.  You can run subsets with, for example, ‘make check-gcc’.
!      You can specify specific tests by setting ‘RUNTESTFLAGS’ to be the
!      name of the ‘.exp’ file, optionally followed by (for some tests) an
       equals and a file wildcard, like:
  
            make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
*************** steps of the build, including bootstrapp
*** 3606,3616 ****
  new compiler to build target libraries.
  
   When GCC is configured for a native configuration, the default action
! for 'make' is to do a full three-stage bootstrap.  This means that GCC
  is built three times--once with the native compiler, once with the
  native-built compiler it just built, and once with the compiler it built
  the second time.  In theory, the last two should produce the same
! results, which 'make compare' can check.  Each stage is configured
  separately and compiled into a separate directory, to minimize problems
  due to ABI incompatibilities between the native compiler and GCC.
  
--- 3605,3615 ----
  new compiler to build target libraries.
  
   When GCC is configured for a native configuration, the default action
! for ‘make’ is to do a full three-stage bootstrap.  This means that GCC
  is built three times--once with the native compiler, once with the
  native-built compiler it just built, and once with the compiler it built
  the second time.  In theory, the last two should produce the same
! results, which ‘make compare’ can check.  Each stage is configured
  separately and compiled into a separate directory, to minimize problems
  due to ABI incompatibilities between the native compiler and GCC.
  
*************** mistake), and avoids spurious bootstrap
*** 3626,3705 ****
  
   Other targets available from the top level include:
  
! 'bootstrap-lean'
!      Like 'bootstrap', except that the various stages are removed once
       they're no longer needed.  This saves disk space.
  
! 'bootstrap2'
! 'bootstrap2-lean'
       Performs only the first two stages of bootstrap.  Unlike a
       three-stage bootstrap, this does not perform a comparison to test
       that the compiler is running properly.  Note that the disk space
       required by a "lean" bootstrap is approximately independent of the
       number of stages.
  
! 'stageN-bubble (N = 1...4, profile, feedback)'
       Rebuild all the stages up to N, with the appropriate flags,
       "bubbling" the changes as described above.
  
! 'all-stageN (N = 1...4, profile, feedback)'
       Assuming that stage N has already been built, rebuild it with the
       appropriate flags.  This is rarely needed.
  
! 'cleanstrap'
!      Remove everything ('make clean') and rebuilds ('make bootstrap').
  
! 'compare'
       Compares the results of stages 2 and 3.  This ensures that the
       compiler is running properly, since it should produce the same
       object files regardless of how it itself was compiled.
  
! 'distclean-stageN (N = 1...4, profile, feedback)'
       Wipe stage N and all the following ones.
  
!      For example, 'make distclean-stage3' wipes stage 3 and all the
!      following ones, so that another 'make' then rebuilds them from
       scratch.  This can be useful if you're doing changes where
       "bubbling" the changes as described above is not sufficient, but a
!      full 'make restrap' isn't necessary either.
  
! 'profiledbootstrap'
       Builds a compiler with profiling feedback information.  In this
!      case, the second and third stages are named 'profile' and
!      'feedback', respectively.  For more information, see the
       installation instructions.
  
! 'restrap'
       Restart a bootstrap, so that everything that was not built with the
       system compiler is rebuilt.
  
! 'stageN-start (N = 1...4, profile, feedback)'
       For each package that is bootstrapped, rename directories so that,
!      for example, 'gcc' points to the stageN GCC, compiled with the
       stageN-1 GCC(2).
  
       You will invoke this target if you need to test or debug the stageN
!      GCC.  If you only need to execute GCC (but you need not run 'make'
       either to rebuild it or to run test suites), you should be able to
!      work directly in the 'stageN-gcc' directory.  This makes it easier
       to debug multiple stages in parallel.
  
! 'stage'
       For each package that is bootstrapped, relocate its build directory
!      to indicate its stage.  For example, if the 'gcc' directory points
       to the stage2 GCC, after invoking this target it will be renamed to
!      'stage2-gcc'.
  
   If you wish to use non-default GCC flags when compiling the stage2 and
! stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing
! 'make'.
  
   Usually, the first stage only builds the languages that the compiler is
  written in: typically, C and maybe Ada.  If you are debugging a
  miscompilation of a different stage2 front-end (for example, of the
  Fortran front-end), you may want to have front-ends for other languages
! in the first stage as well.  To do so, set 'STAGE1_LANGUAGES' on the
! command line when doing 'make'.
  
   For example, in the aforementioned scenario of debugging a Fortran
  front-end miscompilation caused by the stage1 compiler, you may need a
--- 3625,3704 ----
  
   Other targets available from the top level include:
  
! ‘bootstrap-lean’
!      Like ‘bootstrap’, except that the various stages are removed once
       they're no longer needed.  This saves disk space.
  
! ‘bootstrap2’
! ‘bootstrap2-lean’
       Performs only the first two stages of bootstrap.  Unlike a
       three-stage bootstrap, this does not perform a comparison to test
       that the compiler is running properly.  Note that the disk space
       required by a "lean" bootstrap is approximately independent of the
       number of stages.
  
! ‘stageN-bubble (N = 1...4, profile, feedback)’
       Rebuild all the stages up to N, with the appropriate flags,
       "bubbling" the changes as described above.
  
! ‘all-stageN (N = 1...4, profile, feedback)’
       Assuming that stage N has already been built, rebuild it with the
       appropriate flags.  This is rarely needed.
  
! ‘cleanstrap’
!      Remove everything (‘make clean’) and rebuilds (‘make bootstrap’).
  
! ‘compare’
       Compares the results of stages 2 and 3.  This ensures that the
       compiler is running properly, since it should produce the same
       object files regardless of how it itself was compiled.
  
! ‘distclean-stageN (N = 1...4, profile, feedback)’
       Wipe stage N and all the following ones.
  
!      For example, ‘make distclean-stage3’ wipes stage 3 and all the
!      following ones, so that another ‘make’ then rebuilds them from
       scratch.  This can be useful if you're doing changes where
       "bubbling" the changes as described above is not sufficient, but a
!      full ‘make restrap’ isn't necessary either.
  
! ‘profiledbootstrap’
       Builds a compiler with profiling feedback information.  In this
!      case, the second and third stages are named ‘profile’ and
!      ‘feedback’, respectively.  For more information, see the
       installation instructions.
  
! ‘restrap’
       Restart a bootstrap, so that everything that was not built with the
       system compiler is rebuilt.
  
! ‘stageN-start (N = 1...4, profile, feedback)’
       For each package that is bootstrapped, rename directories so that,
!      for example, ‘gcc’ points to the stageN GCC, compiled with the
       stageN-1 GCC(2).
  
       You will invoke this target if you need to test or debug the stageN
!      GCC.  If you only need to execute GCC (but you need not run ‘make’
       either to rebuild it or to run test suites), you should be able to
!      work directly in the ‘stageN-gcc’ directory.  This makes it easier
       to debug multiple stages in parallel.
  
! ‘stage’
       For each package that is bootstrapped, relocate its build directory
!      to indicate its stage.  For example, if the ‘gcc’ directory points
       to the stage2 GCC, after invoking this target it will be renamed to
!      ‘stage2-gcc’.
  
   If you wish to use non-default GCC flags when compiling the stage2 and
! stage3 compilers, set ‘BOOT_CFLAGS’ on the command line when doing
! ‘make’.
  
   Usually, the first stage only builds the languages that the compiler is
  written in: typically, C and maybe Ada.  If you are debugging a
  miscompilation of a different stage2 front-end (for example, of the
  Fortran front-end), you may want to have front-ends for other languages
! in the first stage as well.  To do so, set ‘STAGE1_LANGUAGES’ on the
! command line when doing ‘make’.
  
   For example, in the aforementioned scenario of debugging a Fortran
  front-end miscompilation caused by the stage1 compiler, you may need a
*************** command like
*** 3708,3735 ****
       make stage2-bubble STAGE1_LANGUAGES=c,fortran
  
   Alternatively, you can use per-language targets to build and test
! languages that are not enabled by default in stage1.  For example, 'make
! f951' will build a Fortran compiler even in the stage1 build directory.
  
     ---------- Footnotes ----------
  
     (1) Except if the compiler was buggy and miscompiled some of the
! files that were not modified.  In this case, it's best to use 'make
! restrap'.
  
!    (2) Customarily, the system compiler is also termed the 'stage0' GCC.
  
  
  File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
  
! 6.3.5 Library Source Files and Headers under the 'gcc' Directory
  ----------------------------------------------------------------
  
  FIXME: list here, with explanation, all the C source files and headers
! under the 'gcc' directory that aren't built into the GCC executable but
  rather are part of runtime libraries and object files, such as
! 'crtstuff.c' and 'unwind-dw2.c'.  *Note Headers Installed by GCC:
! Headers, for more information about the 'ginclude' directory.
  
  
  File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
--- 3707,3734 ----
       make stage2-bubble STAGE1_LANGUAGES=c,fortran
  
   Alternatively, you can use per-language targets to build and test
! languages that are not enabled by default in stage1.  For example, ‘make
! f951’ will build a Fortran compiler even in the stage1 build directory.
  
     ---------- Footnotes ----------
  
     (1) Except if the compiler was buggy and miscompiled some of the
! files that were not modified.  In this case, it's best to use ‘make
! restrap’.
  
!    (2) Customarily, the system compiler is also termed the ‘stage0’ GCC.
  
  
  File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
  
! 6.3.5 Library Source Files and Headers under the ‘gcc’ Directory
  ----------------------------------------------------------------
  
  FIXME: list here, with explanation, all the C source files and headers
! under the ‘gcc’ directory that aren't built into the GCC executable but
  rather are part of runtime libraries and object files, such as
! ‘crtstuff.c’ and ‘unwind-dw2.c’.  *Note Headers Installed by GCC:
! Headers, for more information about the ‘ginclude’ directory.
  
  
  File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
*************** In general, GCC expects the system C lib
*** 3741,3778 ****
  headers to be used with it.  However, GCC will fix those headers if
  necessary to make them work with GCC, and will install some headers
  required of freestanding implementations.  These headers are installed
! in 'LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
  installed by GCC; these are not documented here.  (FIXME: document them
  somewhere.)
  
!  Several of the headers GCC installs are in the 'ginclude' directory.
! These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are
! installed in 'LIBSUBDIR/include', unless the target Makefile fragment
! (*note Target Fragment::) overrides this by setting 'USER_H'.
  
   In addition to these headers and those generated by fixing system
  headers to work with GCC, some other headers may also be installed in
! 'LIBSUBDIR/include'.  'config.gcc' may set 'extra_headers'; this
! specifies additional headers under 'config' to be installed on some
  systems.
  
!  GCC installs its own version of '<float.h>', from 'ginclude/float.h'.
  This is done to cope with command-line options that change the
  representation of floating point numbers.
  
!  GCC also installs its own version of '<limits.h>'; this is generated
! from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system
! also has its own version of '<limits.h>'.  (GCC provides its own header
  because it is required of ISO C freestanding implementations, but needs
  to include the system header from its own header as well because other
  standards such as POSIX specify additional values to be defined in
! '<limits.h>'.)  The system's '<limits.h>' header is used via
! 'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if
  it does not need fixing to work with GCC; if it needs fixing,
! 'syslimits.h' is the fixed copy.
  
!  GCC can also install '<tgmath.h>'.  It will do this when 'config.gcc'
! sets 'use_gcc_tgmath' to 'yes'.
  
  
  File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
--- 3740,3777 ----
  headers to be used with it.  However, GCC will fix those headers if
  necessary to make them work with GCC, and will install some headers
  required of freestanding implementations.  These headers are installed
! in ‘LIBSUBDIR/include’.  Headers for non-C runtime libraries are also
  installed by GCC; these are not documented here.  (FIXME: document them
  somewhere.)
  
!  Several of the headers GCC installs are in the ‘ginclude’ directory.
! These headers, ‘iso646.h’, ‘stdarg.h’, ‘stdbool.h’, and ‘stddef.h’, are
! installed in ‘LIBSUBDIR/include’, unless the target Makefile fragment
! (*note Target Fragment::) overrides this by setting ‘USER_H’.
  
   In addition to these headers and those generated by fixing system
  headers to work with GCC, some other headers may also be installed in
! ‘LIBSUBDIR/include’.  ‘config.gcc’ may set ‘extra_headers’; this
! specifies additional headers under ‘config’ to be installed on some
  systems.
  
!  GCC installs its own version of ‘<float.h>’, from ‘ginclude/float.h’.
  This is done to cope with command-line options that change the
  representation of floating point numbers.
  
!  GCC also installs its own version of ‘<limits.h>’; this is generated
! from ‘glimits.h’, together with ‘limitx.h’ and ‘limity.h’ if the system
! also has its own version of ‘<limits.h>’.  (GCC provides its own header
  because it is required of ISO C freestanding implementations, but needs
  to include the system header from its own header as well because other
  standards such as POSIX specify additional values to be defined in
! ‘<limits.h>’.)  The system's ‘<limits.h>’ header is used via
! ‘LIBSUBDIR/include/syslimits.h’, which is copied from ‘gsyslimits.h’ if
  it does not need fixing to work with GCC; if it needs fixing,
! ‘syslimits.h’ is the fixed copy.
  
!  GCC can also install ‘<tgmath.h>’.  It will do this when ‘config.gcc’
! sets ‘use_gcc_tgmath’ to ‘yes’.
  
  
  File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
*************** File: gccint.info,  Node: Documentation,
*** 3782,3792 ****
  
  The main GCC documentation is in the form of manuals in Texinfo format.
  These are installed in Info format; DVI versions may be generated by
! 'make dvi', PDF versions by 'make pdf', and HTML versions by 'make
! html'.  In addition, some man pages are generated from the Texinfo
  manuals, there are some other text files with miscellaneous
  documentation, and runtime libraries have their own documentation
! outside the 'gcc' directory.  FIXME: document the documentation for
  runtime libraries somewhere.
  
  * Menu:
--- 3781,3791 ----
  
  The main GCC documentation is in the form of manuals in Texinfo format.
  These are installed in Info format; DVI versions may be generated by
! ‘make dvi’, PDF versions by ‘make pdf’, and HTML versions by ‘make
! html’.  In addition, some man pages are generated from the Texinfo
  manuals, there are some other text files with miscellaneous
  documentation, and runtime libraries have their own documentation
! outside the ‘gcc’ directory.  FIXME: document the documentation for
  runtime libraries somewhere.
  
  * Menu:
*************** File: gccint.info,  Node: Texinfo Manual
*** 3802,3850 ****
  .......................
  
  The manuals for GCC as a whole, and the C and C++ front ends, are in
! files 'doc/*.texi'.  Other front ends have their own manuals in files
! 'LANGUAGE/*.texi'.  Common files 'doc/include/*.texi' are provided which
  may be included in multiple manuals; the following files are in
! 'doc/include':
  
! 'fdl.texi'
       The GNU Free Documentation License.
! 'funding.texi'
       The section "Funding Free Software".
! 'gcc-common.texi'
       Common definitions for manuals.
! 'gpl_v3.texi'
       The GNU General Public License.
! 'texinfo.tex'
!      A copy of 'texinfo.tex' known to work with the GCC manuals.
  
!  DVI-formatted manuals are generated by 'make dvi', which uses
! 'texi2dvi' (via the Makefile macro '$(TEXI2DVI)').  PDF-formatted
! manuals are generated by 'make pdf', which uses 'texi2pdf' (via the
! Makefile macro '$(TEXI2PDF)').  HTML formatted manuals are generated by
! 'make html'.  Info manuals are generated by 'make info' (which is run as
  part of a bootstrap); this generates the manuals in the source
! directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and
  they are included in release distributions.
  
   Manuals are also provided on the GCC web site, in both HTML and
  PostScript forms.  This is done via the script
! 'maintainer-scripts/update_web_docs_git'.  Each manual to be provided
! online must be listed in the definition of 'MANUALS' in that file; a
! file 'NAME.texi' must only appear once in the source tree, and the
  output manual must have the same name as the source file.  (However,
  other Texinfo files, included in manuals but not themselves the root
  files of manuals, may have names that appear more than once in the
! source tree.)  The manual file 'NAME.texi' should only include other
! files in its own directory or in 'doc/include'.  HTML manuals will be
! generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and
! 'dvips', and PDF manuals by 'texi2pdf'.  All Texinfo files that are
  parts of manuals must be version-controlled, even if they are generated
  files, for the generation of online manuals to work.
  
!  The installation manual, 'doc/install.texi', is also provided on the
  GCC web site.  The HTML version is generated by the script
! 'doc/install.texi2html'.
  
  
  File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
--- 3801,3849 ----
  .......................
  
  The manuals for GCC as a whole, and the C and C++ front ends, are in
! files ‘doc/*.texi’.  Other front ends have their own manuals in files
! ‘LANGUAGE/*.texi’.  Common files ‘doc/include/*.texi’ are provided which
  may be included in multiple manuals; the following files are in
! ‘doc/include’:
  
! ‘fdl.texi’
       The GNU Free Documentation License.
! ‘funding.texi’
       The section "Funding Free Software".
! ‘gcc-common.texi’
       Common definitions for manuals.
! ‘gpl_v3.texi’
       The GNU General Public License.
! ‘texinfo.tex’
!      A copy of ‘texinfo.tex’ known to work with the GCC manuals.
  
!  DVI-formatted manuals are generated by ‘make dvi’, which uses
! ‘texi2dvi’ (via the Makefile macro ‘$(TEXI2DVI)’).  PDF-formatted
! manuals are generated by ‘make pdf’, which uses ‘texi2pdf’ (via the
! Makefile macro ‘$(TEXI2PDF)’).  HTML formatted manuals are generated by
! ‘make html’.  Info manuals are generated by ‘make info’ (which is run as
  part of a bootstrap); this generates the manuals in the source
! directory, using ‘makeinfo’ via the Makefile macro ‘$(MAKEINFO)’, and
  they are included in release distributions.
  
   Manuals are also provided on the GCC web site, in both HTML and
  PostScript forms.  This is done via the script
! ‘maintainer-scripts/update_web_docs_git’.  Each manual to be provided
! online must be listed in the definition of ‘MANUALS’ in that file; a
! file ‘NAME.texi’ must only appear once in the source tree, and the
  output manual must have the same name as the source file.  (However,
  other Texinfo files, included in manuals but not themselves the root
  files of manuals, may have names that appear more than once in the
! source tree.)  The manual file ‘NAME.texi’ should only include other
! files in its own directory or in ‘doc/include’.  HTML manuals will be
! generated by ‘makeinfo --html’, PostScript manuals by ‘texi2dvi’ and
! ‘dvips’, and PDF manuals by ‘texi2pdf’.  All Texinfo files that are
  parts of manuals must be version-controlled, even if they are generated
  files, for the generation of online manuals to work.
  
!  The installation manual, ‘doc/install.texi’, is also provided on the
  GCC web site.  The HTML version is generated by the script
! ‘doc/install.texi2html’.
  
  
  File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
*************** File: gccint.info,  Node: Man Page Gener
*** 3854,3886 ****
  
  Because of user demand, in addition to full Texinfo manuals, man pages
  are provided which contain extracts from those manuals.  These man pages
! are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and
! 'pod2man'.  (The man page for 'g++', 'cp/g++.1', just contains a '.so'
! reference to 'gcc.1', but all the other man pages are generated from
  Texinfo manuals.)
  
   Because many systems may not have the necessary tools installed to
! generate the man pages, they are only generated if the 'configure'
  script detects that recent enough tools are installed, and the Makefiles
  allow generating man pages to fail without aborting the build.  Man
  pages are also included in release distributions.  They are generated in
  the source directory.
  
!  Magic comments in Texinfo files starting '@c man' control what parts of
  a Texinfo file go into a man page.  Only a subset of Texinfo is
! supported by 'texi2pod.pl', and it may be necessary to add support for
  more Texinfo features to this script when generating new man pages.  To
  improve the man page output, some special Texinfo macros are provided in
! 'doc/include/gcc-common.texi' which 'texi2pod.pl' understands:
  
! '@gcctabopt'
!      Use in the form '@table @gcctabopt' for tables of options, where
!      for printed output the effect of '@code' is better than that of
!      '@option' but for man page output a different effect is wanted.
! '@gccoptlist'
       Use for summary lists of options in manuals.
  
!  FIXME: describe the 'texi2pod.pl' input language and magic comments in
  more detail.
  
  
--- 3853,3885 ----
  
  Because of user demand, in addition to full Texinfo manuals, man pages
  are provided which contain extracts from those manuals.  These man pages
! are generated from the Texinfo manuals using ‘contrib/texi2pod.pl’ and
! ‘pod2man’.  (The man page for ‘g++’, ‘cp/g++.1’, just contains a ‘.so’
! reference to ‘gcc.1’, but all the other man pages are generated from
  Texinfo manuals.)
  
   Because many systems may not have the necessary tools installed to
! generate the man pages, they are only generated if the ‘configure’
  script detects that recent enough tools are installed, and the Makefiles
  allow generating man pages to fail without aborting the build.  Man
  pages are also included in release distributions.  They are generated in
  the source directory.
  
!  Magic comments in Texinfo files starting ‘@c man’ control what parts of
  a Texinfo file go into a man page.  Only a subset of Texinfo is
! supported by ‘texi2pod.pl’, and it may be necessary to add support for
  more Texinfo features to this script when generating new man pages.  To
  improve the man page output, some special Texinfo macros are provided in
! ‘doc/include/gcc-common.texi’ which ‘texi2pod.pl’ understands:
  
! ‘@gcctabopt’
!      Use in the form ‘@table @gcctabopt’ for tables of options, where
!      for printed output the effect of ‘@code’ is better than that of
!      ‘@option’ but for man page output a different effect is wanted.
! ‘@gccoptlist’
       Use for summary lists of options in manuals.
  
!  FIXME: describe the ‘texi2pod.pl’ input language and magic comments in
  more detail.
  
  
*************** File: gccint.info,  Node: Miscellaneous
*** 3890,3926 ****
  ...................................
  
  In addition to the formal documentation that is installed by GCC, there
! are several other text files in the 'gcc' subdirectory with
  miscellaneous documentation:
  
! 'ABOUT-GCC-NLS'
       Notes on GCC's Native Language Support.  FIXME: this should be part
       of this manual rather than a separate file.
! 'ABOUT-NLS'
       Notes on the Free Translation Project.
! 'COPYING'
! 'COPYING3'
       The GNU General Public License, Versions 2 and 3.
! 'COPYING.LIB'
! 'COPYING3.LIB'
       The GNU Lesser General Public License, Versions 2.1 and 3.
! '*ChangeLog*'
! '*/ChangeLog*'
       Change log files for various parts of GCC.
! 'LANGUAGES'
       Details of a few changes to the GCC front-end interface.  FIXME:
       the information in this file should be part of general
       documentation of the front-end interface in this manual.
! 'ONEWS'
       Information about new features in old versions of GCC.  (For recent
       versions, the information is on the GCC web site.)
! 'README.Portability'
       Information about portability issues when writing code in GCC.
       FIXME: why isn't this part of this manual or of the GCC Coding
       Conventions?
  
!  FIXME: document such files in subdirectories, at least 'config', 'c',
! 'cp', 'objc', 'testsuite'.
  
  
  File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
--- 3889,3925 ----
  ...................................
  
  In addition to the formal documentation that is installed by GCC, there
! are several other text files in the ‘gcc’ subdirectory with
  miscellaneous documentation:
  
! ‘ABOUT-GCC-NLS’
       Notes on GCC's Native Language Support.  FIXME: this should be part
       of this manual rather than a separate file.
! ‘ABOUT-NLS’
       Notes on the Free Translation Project.
! ‘COPYING’
! ‘COPYING3’
       The GNU General Public License, Versions 2 and 3.
! ‘COPYING.LIB’
! ‘COPYING3.LIB’
       The GNU Lesser General Public License, Versions 2.1 and 3.
! ‘*ChangeLog*’
! ‘*/ChangeLog*’
       Change log files for various parts of GCC.
! ‘LANGUAGES’
       Details of a few changes to the GCC front-end interface.  FIXME:
       the information in this file should be part of general
       documentation of the front-end interface in this manual.
! ‘ONEWS’
       Information about new features in old versions of GCC.  (For recent
       versions, the information is on the GCC web site.)
! ‘README.Portability’
       Information about portability issues when writing code in GCC.
       FIXME: why isn't this part of this manual or of the GCC Coding
       Conventions?
  
!  FIXME: document such files in subdirectories, at least ‘config’, ‘c’,
! ‘cp’, ‘objc’, ‘testsuite’.
  
  
  File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
*************** File: gccint.info,  Node: Front End,  Ne
*** 3930,4180 ****
  
  A front end for a language in GCC has the following parts:
  
!    * A directory 'LANGUAGE' under 'gcc' containing source files for that
!      front end.  *Note The Front End 'LANGUAGE' Directory: Front End
       Directory, for details.
!    * A mention of the language in the list of supported languages in
!      'gcc/doc/install.texi'.
!    * A mention of the name under which the language's runtime library is
!      recognized by '--enable-shared=PACKAGE' in the documentation of
!      that option in 'gcc/doc/install.texi'.
!    * A mention of any special prerequisites for building the front end
!      in the documentation of prerequisites in 'gcc/doc/install.texi'.
!    * Details of contributors to that front end in
!      'gcc/doc/contrib.texi'.  If the details are in that front end's own
       manual then there should be a link to that manual's list in
!      'contrib.texi'.
!    * Information about support for that language in
!      'gcc/doc/frontends.texi'.
!    * Information about standards for that language, and the front end's
!      support for them, in 'gcc/doc/standards.texi'.  This may be a link
       to such information in the front end's own manual.
!    * Details of source file suffixes for that language and '-x LANG'
!      options supported, in 'gcc/doc/invoke.texi'.
!    * Entries in 'default_compilers' in 'gcc.cc' for source file suffixes
       for that language.
!    * Preferably testsuites, which may be under 'gcc/testsuite' or
       runtime library directories.  FIXME: document somewhere how to
       write testsuite harnesses.
!    * Probably a runtime library for the language, outside the 'gcc'
       directory.  FIXME: document this further.
!    * Details of the directories of any runtime libraries in
!      'gcc/doc/sourcebuild.texi'.
!    * Check targets in 'Makefile.def' for the top-level 'Makefile' to
       check just the compiler or the compiler and runtime library for the
       language.
  
   If the front end is added to the official GCC source repository, the
  following are also necessary:
  
!    * At least one Bugzilla component for bugs in that front end and
       runtime libraries.  This category needs to be added to the Bugzilla
       database.
!    * Normally, one or more maintainers of that front end listed in
!      'MAINTAINERS'.
!    * Mentions on the GCC web site in 'index.html' and 'frontends.html',
!      with any relevant links on 'readings.html'.  (Front ends that are
!      not an official part of GCC may also be listed on 'frontends.html',
       with relevant links.)
!    * A news item on 'index.html', and possibly an announcement on the
       <gcc-announce@gcc.gnu.org> mailing list.
!    * The front end's manuals should be mentioned in
!      'maintainer-scripts/update_web_docs_git' (*note Texinfo Manuals::)
       and the online manuals should be linked to from
!      'onlinedocs/index.html'.
!    * If the front end has its own manual with its own index of options,
!      the generated 'Option-Index.html' should be added to
!      'PER_LANGUAGE_OPTION_INDEXES' in 'gcc/regenerate-opt-urls.py' and
!      to 'OPT_URLS_HTML_DEPS' in 'gcc/Makefile.in'.
!    * Any old releases or CVS repositories of the front end, before its
       inclusion in GCC, should be made available on the GCC web site at
       <https://gcc.gnu.org/pub/gcc/old-releases/>.
!    * The release and snapshot script 'maintainer-scripts/gcc_release'
       should be updated to generate appropriate tarballs for this front
       end.
!    * If this front end includes its own version files that include the
!      current date, 'maintainer-scripts/update_version' should be updated
       accordingly.
  
  * Menu:
  
! * Front End Directory::  The front end 'LANGUAGE' directory.
! * Front End Config::     The front end 'config-lang.in' file.
! * Front End Makefile::   The front end 'Make-lang.in' file.
  
  
  File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
  
! 6.3.8.1 The Front End 'LANGUAGE' Directory
  ..........................................
  
! A front end 'LANGUAGE' directory contains the source files of that front
! end (but not of any runtime libraries, which should be outside the 'gcc'
  directory).  This includes documentation, and possibly some subsidiary
  programs built alongside the front end.  Certain files are special and
  other parts of the compiler depend on their names:
  
! 'config-lang.in'
       This file is required in all language subdirectories.  *Note The
!      Front End 'config-lang.in' File: Front End Config, for details of
       its contents
! 'Make-lang.in'
       This file is required in all language subdirectories.  *Note The
!      Front End 'Make-lang.in' File: Front End Makefile, for details of
       its contents.
! 'lang.opt'
       This file registers the set of switches that the front end accepts
!      on the command line, and their '--help' text.  *Note Options::.
! 'lang-specs.h'
!      This file provides entries for 'default_compilers' in 'gcc.cc'
       which override the default of giving an error that a compiler for
       that language is not installed.
! 'LANGUAGE-tree.def'
       This file, which need not exist, defines any language-specific tree
       codes.
  
  
  File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
  
! 6.3.8.2 The Front End 'config-lang.in' File
  ...........................................
  
! Each language subdirectory contains a 'config-lang.in' file.  This file
  is a shell script that may define some variables describing the
  language:
  
! 'language'
       This definition must be present, and gives the name of the language
!      for some purposes such as arguments to '--enable-languages'.
! 'lang_requires'
       If defined, this variable lists (space-separated) language front
       ends other than C that this front end requires to be enabled (with
!      the names given being their 'language' settings).  For example, the
       Obj-C++ front end depends on the C++ and ObjC front ends, so sets
!      'lang_requires="objc c++"'.
! 'subdir_requires'
       If defined, this variable lists (space-separated) front end
       directories other than C that this front end requires to be
       present.  For example, the Objective-C++ front end uses source
       files from the C++ and Objective-C front ends, so sets
!      'subdir_requires="cp objc"'.
! 'target_libs'
       If defined, this variable lists (space-separated) targets in the
!      top level 'Makefile' to build the runtime libraries for this
!      language, such as 'target-libobjc'.
! 'lang_dirs'
       If defined, this variable lists (space-separated) top level
!      directories (parallel to 'gcc'), apart from the runtime libraries,
       that should not be configured if this front end is not built.
! 'build_by_default'
!      If defined to 'no', this language front end is not built unless
!      enabled in a '--enable-languages' argument.  Otherwise, front ends
       are built by default, subject to any special logic in
!      'configure.ac' (as is present to disable the Ada front end if the
       Ada compiler is not already installed).
! 'boot_language'
!      If defined to 'yes', this front end is built in stage1 of the
       bootstrap.  This is only relevant to front ends written in their
       own languages.
! 'compilers'
       If defined, a space-separated list of compiler executables that
       will be run by the driver.  The names here will each end with
!      '\$(exeext)'.
! 'outputs'
       If defined, a space-separated list of files that should be
!      generated by 'configure' substituting values in them.  This
!      mechanism can be used to create a file 'LANGUAGE/Makefile' from
!      'LANGUAGE/Makefile.in', but this is deprecated, building everything
!      from the single 'gcc/Makefile' is preferred.
! 'gtfiles'
       If defined, a space-separated list of files that should be scanned
!      by 'gengtype.cc' to generate the garbage collection tables and
       routines for this language.  This excludes the files that are
       common to all front ends.  *Note Type Information::.
  
  
  File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
  
! 6.3.8.3 The Front End 'Make-lang.in' File
  .........................................
  
! Each language subdirectory contains a 'Make-lang.in' file.  It contains
! targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in
! 'config-lang.in') for the following values of 'HOOK', and any other
  Makefile rules required to build those targets (which may if necessary
! use other Makefiles specified in 'outputs' in 'config-lang.in', although
  this is deprecated).  It also adds any testsuite targets that can use
! the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'.
  
! 'all.cross'
! 'start.encap'
! 'rest.encap'
       FIXME: exactly what goes in each of these targets?
! 'tags'
!      Build an 'etags' 'TAGS' file in the language subdirectory in the
       source tree.
! 'info'
       Build info documentation for the front end, in the build directory.
!      This target is only called by 'make bootstrap' if a suitable
!      version of 'makeinfo' is available, so does not need to check for
       this, and should fail if an error occurs.
! 'dvi'
       Build DVI documentation for the front end, in the build directory.
!      This should be done using '$(TEXI2DVI)', with appropriate '-I'
       arguments pointing to directories of included files.
! 'pdf'
       Build PDF documentation for the front end, in the build directory.
!      This should be done using '$(TEXI2PDF)', with appropriate '-I'
       arguments pointing to directories of included files.
! 'html'
       Build HTML documentation for the front end, in the build directory.
! 'man'
       Build generated man pages for the front end from Texinfo manuals
       (*note Man Page Generation::), in the build directory.  This target
       is only called if the necessary tools are available, but should
       ignore errors so as not to stop the build if errors occur; man
       pages are optional and the tools involved may be installed in a
       broken way.
! 'install-common'
       Install everything that is part of the front end, apart from the
!      compiler executables listed in 'compilers' in 'config-lang.in'.
! 'install-info'
       Install info documentation for the front end, if it is present in
       the source directory.  This target should have dependencies on info
       files that should be installed.
! 'install-man'
       Install man pages for the front end.  This target should ignore
       errors.
! 'install-plugin'
       Install headers needed for plugins.
! 'srcextra'
       Copies its dependencies into the source directory.  This generally
       should be used for generated files such as Bison output files which
       are not version-controlled, but should be included in any release
       tarballs.  This target will be executed during a bootstrap if
!      '--enable-generated-files-in-srcdir' was specified as a 'configure'
       option.
! 'srcinfo'
! 'srcman'
       Copies its dependencies into the source directory.  These targets
       will be executed during a bootstrap if
!      '--enable-generated-files-in-srcdir' was specified as a 'configure'
       option.
! 'uninstall'
       Uninstall files installed by installing the compiler.  This is
       currently documented not to be supported, so the hook need not do
       anything.
! 'mostlyclean'
! 'clean'
! 'distclean'
! 'maintainer-clean'
!      The language parts of the standard GNU '*clean' targets.  *Note
       Standard Targets for Users: (standards)Standard Targets, for
!      details of the standard targets.  For GCC, 'maintainer-clean'
       should delete all generated files in the source directory that are
       not version-controlled, but should not delete anything that is.
  
!  'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of
  host object files that are used by that language.
  
  
--- 3929,4179 ----
  
  A front end for a language in GCC has the following parts:
  
!    • A directory ‘LANGUAGE’ under ‘gcc’ containing source files for that
!      front end.  *Note The Front End ‘LANGUAGE’ Directory: Front End
       Directory, for details.
!    • A mention of the language in the list of supported languages in
!      ‘gcc/doc/install.texi’.
!    • A mention of the name under which the language's runtime library is
!      recognized by ‘--enable-shared=PACKAGE’ in the documentation of
!      that option in ‘gcc/doc/install.texi’.
!    • A mention of any special prerequisites for building the front end
!      in the documentation of prerequisites in ‘gcc/doc/install.texi’.
!    • Details of contributors to that front end in
!      ‘gcc/doc/contrib.texi’.  If the details are in that front end's own
       manual then there should be a link to that manual's list in
!      ‘contrib.texi’.
!    • Information about support for that language in
!      ‘gcc/doc/frontends.texi’.
!    • Information about standards for that language, and the front end's
!      support for them, in ‘gcc/doc/standards.texi’.  This may be a link
       to such information in the front end's own manual.
!    • Details of source file suffixes for that language and ‘-x LANG’
!      options supported, in ‘gcc/doc/invoke.texi’.
!    • Entries in ‘default_compilers’ in ‘gcc.cc’ for source file suffixes
       for that language.
!    • Preferably testsuites, which may be under ‘gcc/testsuite’ or
       runtime library directories.  FIXME: document somewhere how to
       write testsuite harnesses.
!    • Probably a runtime library for the language, outside the ‘gcc’
       directory.  FIXME: document this further.
!    • Details of the directories of any runtime libraries in
!      ‘gcc/doc/sourcebuild.texi’.
!    • Check targets in ‘Makefile.def’ for the top-level ‘Makefile’ to
       check just the compiler or the compiler and runtime library for the
       language.
  
   If the front end is added to the official GCC source repository, the
  following are also necessary:
  
!    • At least one Bugzilla component for bugs in that front end and
       runtime libraries.  This category needs to be added to the Bugzilla
       database.
!    • Normally, one or more maintainers of that front end listed in
!      ‘MAINTAINERS’.
!    • Mentions on the GCC web site in ‘index.html’ and ‘frontends.html’,
!      with any relevant links on ‘readings.html’.  (Front ends that are
!      not an official part of GCC may also be listed on ‘frontends.html’,
       with relevant links.)
!    • A news item on ‘index.html’, and possibly an announcement on the
       <gcc-announce@gcc.gnu.org> mailing list.
!    • The front end's manuals should be mentioned in
!      ‘maintainer-scripts/update_web_docs_git’ (*note Texinfo Manuals::)
       and the online manuals should be linked to from
!      ‘onlinedocs/index.html’.
!    • If the front end has its own manual with its own index of options,
!      the generated ‘Option-Index.html’ should be added to
!      ‘PER_LANGUAGE_OPTION_INDEXES’ in ‘gcc/regenerate-opt-urls.py’ and
!      to ‘OPT_URLS_HTML_DEPS’ in ‘gcc/Makefile.in’.
!    • Any old releases or CVS repositories of the front end, before its
       inclusion in GCC, should be made available on the GCC web site at
       <https://gcc.gnu.org/pub/gcc/old-releases/>.
!    • The release and snapshot script ‘maintainer-scripts/gcc_release’
       should be updated to generate appropriate tarballs for this front
       end.
!    • If this front end includes its own version files that include the
!      current date, ‘maintainer-scripts/update_version’ should be updated
       accordingly.
  
  * Menu:
  
! * Front End Directory::  The front end ‘LANGUAGE’ directory.
! * Front End Config::     The front end ‘config-lang.in’ file.
! * Front End Makefile::   The front end ‘Make-lang.in’ file.
  
  
  File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
  
! 6.3.8.1 The Front End ‘LANGUAGE’ Directory
  ..........................................
  
! A front end ‘LANGUAGE’ directory contains the source files of that front
! end (but not of any runtime libraries, which should be outside the ‘gcc’
  directory).  This includes documentation, and possibly some subsidiary
  programs built alongside the front end.  Certain files are special and
  other parts of the compiler depend on their names:
  
! ‘config-lang.in’
       This file is required in all language subdirectories.  *Note The
!      Front End ‘config-lang.in’ File: Front End Config, for details of
       its contents
! ‘Make-lang.in’
       This file is required in all language subdirectories.  *Note The
!      Front End ‘Make-lang.in’ File: Front End Makefile, for details of
       its contents.
! ‘lang.opt’
       This file registers the set of switches that the front end accepts
!      on the command line, and their ‘--help’ text.  *Note Options::.
! ‘lang-specs.h’
!      This file provides entries for ‘default_compilers’ in ‘gcc.cc’
       which override the default of giving an error that a compiler for
       that language is not installed.
! ‘LANGUAGE-tree.def’
       This file, which need not exist, defines any language-specific tree
       codes.
  
  
  File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
  
! 6.3.8.2 The Front End ‘config-lang.in’ File
  ...........................................
  
! Each language subdirectory contains a ‘config-lang.in’ file.  This file
  is a shell script that may define some variables describing the
  language:
  
! ‘language’
       This definition must be present, and gives the name of the language
!      for some purposes such as arguments to ‘--enable-languages’.
! ‘lang_requires’
       If defined, this variable lists (space-separated) language front
       ends other than C that this front end requires to be enabled (with
!      the names given being their ‘language’ settings).  For example, the
       Obj-C++ front end depends on the C++ and ObjC front ends, so sets
!      ‘lang_requires="objc c++"’.
! ‘subdir_requires’
       If defined, this variable lists (space-separated) front end
       directories other than C that this front end requires to be
       present.  For example, the Objective-C++ front end uses source
       files from the C++ and Objective-C front ends, so sets
!      ‘subdir_requires="cp objc"’.
! ‘target_libs’
       If defined, this variable lists (space-separated) targets in the
!      top level ‘Makefile’ to build the runtime libraries for this
!      language, such as ‘target-libobjc’.
! ‘lang_dirs’
       If defined, this variable lists (space-separated) top level
!      directories (parallel to ‘gcc’), apart from the runtime libraries,
       that should not be configured if this front end is not built.
! ‘build_by_default’
!      If defined to ‘no’, this language front end is not built unless
!      enabled in a ‘--enable-languages’ argument.  Otherwise, front ends
       are built by default, subject to any special logic in
!      ‘configure.ac’ (as is present to disable the Ada front end if the
       Ada compiler is not already installed).
! ‘boot_language’
!      If defined to ‘yes’, this front end is built in stage1 of the
       bootstrap.  This is only relevant to front ends written in their
       own languages.
! ‘compilers’
       If defined, a space-separated list of compiler executables that
       will be run by the driver.  The names here will each end with
!      ‘\$(exeext)’.
! ‘outputs’
       If defined, a space-separated list of files that should be
!      generated by ‘configure’ substituting values in them.  This
!      mechanism can be used to create a file ‘LANGUAGE/Makefile’ from
!      ‘LANGUAGE/Makefile.in’, but this is deprecated, building everything
!      from the single ‘gcc/Makefile’ is preferred.
! ‘gtfiles’
       If defined, a space-separated list of files that should be scanned
!      by ‘gengtype.cc’ to generate the garbage collection tables and
       routines for this language.  This excludes the files that are
       common to all front ends.  *Note Type Information::.
  
  
  File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
  
! 6.3.8.3 The Front End ‘Make-lang.in’ File
  .........................................
  
! Each language subdirectory contains a ‘Make-lang.in’ file.  It contains
! targets ‘LANG.HOOK’ (where ‘LANG’ is the setting of ‘language’ in
! ‘config-lang.in’) for the following values of ‘HOOK’, and any other
  Makefile rules required to build those targets (which may if necessary
! use other Makefiles specified in ‘outputs’ in ‘config-lang.in’, although
  this is deprecated).  It also adds any testsuite targets that can use
! the standard rule in ‘gcc/Makefile.in’ to the variable ‘lang_checks’.
  
! ‘all.cross’
! ‘start.encap’
! ‘rest.encap’
       FIXME: exactly what goes in each of these targets?
! ‘tags’
!      Build an ‘etags’ ‘TAGS’ file in the language subdirectory in the
       source tree.
! ‘info’
       Build info documentation for the front end, in the build directory.
!      This target is only called by ‘make bootstrap’ if a suitable
!      version of ‘makeinfo’ is available, so does not need to check for
       this, and should fail if an error occurs.
! ‘dvi’
       Build DVI documentation for the front end, in the build directory.
!      This should be done using ‘$(TEXI2DVI)’, with appropriate ‘-I’
       arguments pointing to directories of included files.
! ‘pdf’
       Build PDF documentation for the front end, in the build directory.
!      This should be done using ‘$(TEXI2PDF)’, with appropriate ‘-I’
       arguments pointing to directories of included files.
! ‘html’
       Build HTML documentation for the front end, in the build directory.
! ‘man’
       Build generated man pages for the front end from Texinfo manuals
       (*note Man Page Generation::), in the build directory.  This target
       is only called if the necessary tools are available, but should
       ignore errors so as not to stop the build if errors occur; man
       pages are optional and the tools involved may be installed in a
       broken way.
! ‘install-common’
       Install everything that is part of the front end, apart from the
!      compiler executables listed in ‘compilers’ in ‘config-lang.in’.
! ‘install-info’
       Install info documentation for the front end, if it is present in
       the source directory.  This target should have dependencies on info
       files that should be installed.
! ‘install-man’
       Install man pages for the front end.  This target should ignore
       errors.
! ‘install-plugin’
       Install headers needed for plugins.
! ‘srcextra’
       Copies its dependencies into the source directory.  This generally
       should be used for generated files such as Bison output files which
       are not version-controlled, but should be included in any release
       tarballs.  This target will be executed during a bootstrap if
!      ‘--enable-generated-files-in-srcdir’ was specified as a ‘configure’
       option.
! ‘srcinfo’
! ‘srcman’
       Copies its dependencies into the source directory.  These targets
       will be executed during a bootstrap if
!      ‘--enable-generated-files-in-srcdir’ was specified as a ‘configure’
       option.
! ‘uninstall’
       Uninstall files installed by installing the compiler.  This is
       currently documented not to be supported, so the hook need not do
       anything.
! ‘mostlyclean’
! ‘clean’
! ‘distclean’
! ‘maintainer-clean’
!      The language parts of the standard GNU ‘*clean’ targets.  *Note
       Standard Targets for Users: (standards)Standard Targets, for
!      details of the standard targets.  For GCC, ‘maintainer-clean’
       should delete all generated files in the source directory that are
       not version-controlled, but should not delete anything that is.
  
!  ‘Make-lang.in’ must also define a variable ‘LANG_OBJS’ to a list of
  host object files that are used by that language.
  
  
*************** File: gccint.info,  Node: Back End,  Pre
*** 4185,4278 ****
  
  A back end for a target architecture in GCC has the following parts:
  
!    * A directory 'MACHINE' under 'gcc/config', containing a machine
!      description 'MACHINE.md' file (*note Machine Descriptions: Machine
!      Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a
!      source file 'MACHINE.c' (*note Target Description Macros and
       Functions: Target Macros.), possibly a target Makefile fragment
!      't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.),
       and maybe some other files.  The names of these files may be
       changed from the defaults given by explicit specifications in
!      'config.gcc'.
!    * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE'
       directory, containing additional machine modes to represent
       condition codes.  *Note Condition Code::, for further details.
!    * An optional 'MACHINE.opt' file in the 'MACHINE' directory,
       containing a list of target-specific options.  You can also add
!      other option files using the 'extra_options' variable in
!      'config.gcc'.  *Note Options::.
!    * Entries in 'config.gcc' (*note The 'config.gcc' File: System
       Config.) for the systems with this target architecture.
!    * Documentation in 'gcc/doc/invoke.texi' for any command-line options
       supported by this target (*note Run-time Target Specification:
       Run-time Target.).  This means both entries in the summary table of
       options and details of the individual options.
!    * An entry in 'gcc/regenerate-opt-urls.py''s TARGET_SPECIFIC_PAGES
       dictionary mapping from target-specific HTML documentation pages to
       the target specific source directory.
!    * Documentation in 'gcc/doc/extend.texi' for any target-specific
       attributes supported (*note Defining target-specific uses of
!      '__attribute__': Target Attributes.), including where the same
       attribute is already supported on some targets, which are
       enumerated in the manual.
!    * Documentation in 'gcc/doc/extend.texi' for any target-specific
       pragmas supported.
!    * Documentation in 'gcc/doc/extend.texi' of any target-specific
       built-in functions supported.
!    * Documentation in 'gcc/doc/extend.texi' of any target-specific
       format checking styles supported.
!    * Documentation in 'gcc/doc/md.texi' of any target-specific
       constraint letters (*note Constraints for Particular Machines:
       Machine Constraints.).
!    * A note in 'gcc/doc/contrib.texi' under the person or people who
       contributed the target support.
!    * Entries in 'gcc/doc/install.texi' for all target triplets supported
       with this target architecture, giving details of any special notes
       about installation for this target, or saying that there are no
       special notes if there are none.
!    * Possibly other support outside the 'gcc' directory for runtime
!      libraries.  FIXME: reference docs for this.  The 'libstdc++'
       porting manual needs to be installed as info for this to work, or
       to be a chapter of this manual.
  
!  The 'MACHINE.h' header is included very early in GCC's standard
! sequence of header files, while 'MACHINE-protos.h' is included late in
! the sequence.  Thus 'MACHINE-protos.h' can include declarations
! referencing types that are not defined when 'MACHINE.h' is included,
! specifically including those from 'rtl.h' and 'tree.h'.  Since both RTL
  and tree types may not be available in every context where
! 'MACHINE-protos.h' is included, in this file you should guard
! declarations using these types inside appropriate '#ifdef RTX_CODE' or
! '#ifdef TREE_CODE' conditional code segments.
  
!  If the backend uses shared data structures that require 'GTY' markers
  for garbage collection (*note Type Information::), you must declare
! those in 'MACHINE.h' rather than 'MACHINE-protos.h'.  Any definitions
! required for building libgcc must also go in 'MACHINE.h'.
  
!  GCC uses the macro 'IN_TARGET_CODE' to distinguish between
! machine-specific '.c' and '.cc' files and machine-independent '.c' and
! '.cc' files.  Machine-specific files should use the directive:
  
       #define IN_TARGET_CODE 1
  
!  before including 'config.h'.
  
   If the back end is added to the official GCC source repository, the
  following are also necessary:
  
!    * An entry for the target architecture in 'readings.html' on the GCC
       web site, with any relevant links.
!    * Details of the properties of the back end and target architecture
!      in 'backends.html' on the GCC web site.
!    * A news item about the contribution of support for that target
!      architecture, in 'index.html' on the GCC web site.
!    * Normally, one or more maintainers of that target listed in
!      'MAINTAINERS'.  Some existing architectures may be unmaintained,
       but it would be unusual to add support for a target that does not
       have a maintainer when support is added.
!    * Target triplets covering all 'config.gcc' stanzas for the target,
!      in the list in 'contrib/config-list.mk'.
  
  
  File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
--- 4184,4277 ----
  
  A back end for a target architecture in GCC has the following parts:
  
!    • A directory ‘MACHINE’ under ‘gcc/config’, containing a machine
!      description ‘MACHINE.md’ file (*note Machine Descriptions: Machine
!      Desc.), header files ‘MACHINE.h’ and ‘MACHINE-protos.h’ and a
!      source file ‘MACHINE.c’ (*note Target Description Macros and
       Functions: Target Macros.), possibly a target Makefile fragment
!      ‘t-MACHINE’ (*note The Target Makefile Fragment: Target Fragment.),
       and maybe some other files.  The names of these files may be
       changed from the defaults given by explicit specifications in
!      ‘config.gcc’.
!    • If necessary, a file ‘MACHINE-modes.def’ in the ‘MACHINE’
       directory, containing additional machine modes to represent
       condition codes.  *Note Condition Code::, for further details.
!    • An optional ‘MACHINE.opt’ file in the ‘MACHINE’ directory,
       containing a list of target-specific options.  You can also add
!      other option files using the ‘extra_options’ variable in
!      ‘config.gcc’.  *Note Options::.
!    • Entries in ‘config.gcc’ (*note The ‘config.gcc’ File: System
       Config.) for the systems with this target architecture.
!    • Documentation in ‘gcc/doc/invoke.texi’ for any command-line options
       supported by this target (*note Run-time Target Specification:
       Run-time Target.).  This means both entries in the summary table of
       options and details of the individual options.
!    • An entry in ‘gcc/regenerate-opt-urls.py’'s TARGET_SPECIFIC_PAGES
       dictionary mapping from target-specific HTML documentation pages to
       the target specific source directory.
!    • Documentation in ‘gcc/doc/extend.texi’ for any target-specific
       attributes supported (*note Defining target-specific uses of
!      ‘__attribute__’: Target Attributes.), including where the same
       attribute is already supported on some targets, which are
       enumerated in the manual.
!    • Documentation in ‘gcc/doc/extend.texi’ for any target-specific
       pragmas supported.
!    • Documentation in ‘gcc/doc/extend.texi’ of any target-specific
       built-in functions supported.
!    • Documentation in ‘gcc/doc/extend.texi’ of any target-specific
       format checking styles supported.
!    • Documentation in ‘gcc/doc/md.texi’ of any target-specific
       constraint letters (*note Constraints for Particular Machines:
       Machine Constraints.).
!    • A note in ‘gcc/doc/contrib.texi’ under the person or people who
       contributed the target support.
!    • Entries in ‘gcc/doc/install.texi’ for all target triplets supported
       with this target architecture, giving details of any special notes
       about installation for this target, or saying that there are no
       special notes if there are none.
!    • Possibly other support outside the ‘gcc’ directory for runtime
!      libraries.  FIXME: reference docs for this.  The ‘libstdc++’
       porting manual needs to be installed as info for this to work, or
       to be a chapter of this manual.
  
!  The ‘MACHINE.h’ header is included very early in GCC's standard
! sequence of header files, while ‘MACHINE-protos.h’ is included late in
! the sequence.  Thus ‘MACHINE-protos.h’ can include declarations
! referencing types that are not defined when ‘MACHINE.h’ is included,
! specifically including those from ‘rtl.h’ and ‘tree.h’.  Since both RTL
  and tree types may not be available in every context where
! ‘MACHINE-protos.h’ is included, in this file you should guard
! declarations using these types inside appropriate ‘#ifdef RTX_CODE’ or
! ‘#ifdef TREE_CODE’ conditional code segments.
  
!  If the backend uses shared data structures that require ‘GTY’ markers
  for garbage collection (*note Type Information::), you must declare
! those in ‘MACHINE.h’ rather than ‘MACHINE-protos.h’.  Any definitions
! required for building libgcc must also go in ‘MACHINE.h’.
  
!  GCC uses the macro ‘IN_TARGET_CODE’ to distinguish between
! machine-specific ‘.c’ and ‘.cc’ files and machine-independent ‘.c’ and
! ‘.cc’ files.  Machine-specific files should use the directive:
  
       #define IN_TARGET_CODE 1
  
!  before including ‘config.h’.
  
   If the back end is added to the official GCC source repository, the
  following are also necessary:
  
!    • An entry for the target architecture in ‘readings.html’ on the GCC
       web site, with any relevant links.
!    • Details of the properties of the back end and target architecture
!      in ‘backends.html’ on the GCC web site.
!    • A news item about the contribution of support for that target
!      architecture, in ‘index.html’ on the GCC web site.
!    • Normally, one or more maintainers of that target listed in
!      ‘MAINTAINERS’.  Some existing architectures may be unmaintained,
       but it would be unusual to add support for a target that does not
       have a maintainer when support is added.
!    • Target triplets covering all ‘config.gcc’ stanzas for the target,
!      in the list in ‘contrib/config-list.mk’.
  
  
  File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
*************** File: gccint.info,  Node: Test Idioms,
*** 4305,4317 ****
  7.1 Idioms Used in Testsuite Code
  =================================
  
! In general, C testcases have a trailing '-N.c', starting with '-1.c', in
  case other testcases with similar names are added later.  If the test is
  a test of some well-defined feature, it should have a name referring to
! that feature such as 'FEATURE-1.c'.  If it does not test a well-defined
  feature but just happens to exercise a bug somewhere in the compiler,
  and a bug report has been filed for this bug in the GCC bug database,
! 'prBUG-NUMBER-1.c' is the appropriate form of name.  Otherwise (for
  miscellaneous bugs not filed in the GCC bug database), and previously
  more generally, test cases are named after the date on which they were
  added.  This allows people to tell at a glance whether a test failure is
--- 4304,4316 ----
  7.1 Idioms Used in Testsuite Code
  =================================
  
! In general, C testcases have a trailing ‘-N.c’, starting with ‘-1.c’, in
  case other testcases with similar names are added later.  If the test is
  a test of some well-defined feature, it should have a name referring to
! that feature such as ‘FEATURE-1.c’.  If it does not test a well-defined
  feature but just happens to exercise a bug somewhere in the compiler,
  and a bug report has been filed for this bug in the GCC bug database,
! ‘prBUG-NUMBER-1.c’ is the appropriate form of name.  Otherwise (for
  miscellaneous bugs not filed in the GCC bug database), and previously
  more generally, test cases are named after the date on which they were
  added.  This allows people to tell at a glance whether a test failure is
*************** it may be a regression, but does not giv
*** 4320,4329 ****
  the bug or where discussion of it may be found.  Some other language
  testsuites follow similar conventions.
  
!  In the 'gcc.dg' testsuite, it is often necessary to test that an error
  is indeed a hard error and not just a warning--for example, where it is
  a constraint violation in the C standard, which must become an error
! with '-pedantic-errors'.  The following idiom, where the first line
  shown is line LINE of the file and the line that generates the error, is
  used for this:
  
--- 4319,4328 ----
  the bug or where discussion of it may be found.  Some other language
  testsuites follow similar conventions.
  
!  In the ‘gcc.dg’ testsuite, it is often necessary to test that an error
  is indeed a hard error and not just a warning--for example, where it is
  a constraint violation in the C standard, which must become an error
! with ‘-pedantic-errors’.  The following idiom, where the first line
  shown is line LINE of the file and the line that generates the error, is
  used for this:
  
*************** used for this:
*** 4331,4346 ****
       /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
  
   It may be necessary to check that an expression is an integer constant
! expression and has a certain value.  To check that 'E' has value 'V', an
  idiom similar to the following is used:
  
       char x[((E) == (V) ? 1 : -1)];
  
!  In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions
  about the types of expressions.  See, for example,
! 'gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
  rules for the types of conditional expressions in the C standard; see,
! for example, 'gcc.dg/c99-intconst-1.c'.
  
   It is useful to be able to test that optimizations are being made
  properly.  This cannot be done in all cases, but it can be done where
--- 4330,4345 ----
       /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
  
   It may be necessary to check that an expression is an integer constant
! expression and has a certain value.  To check that ‘E’ has value ‘V’, an
  idiom similar to the following is used:
  
       char x[((E) == (V) ? 1 : -1)];
  
!  In ‘gcc.dg’ tests, ‘__typeof__’ is sometimes used to make assertions
  about the types of expressions.  See, for example,
! ‘gcc.dg/c99-condexpr-1.c’.  The more subtle uses depend on the exact
  rules for the types of conditional expressions in the C standard; see,
! for example, ‘gcc.dg/c99-intconst-1.c’.
  
   It is useful to be able to test that optimizations are being made
  properly.  This cannot be done in all cases, but it can be done where
*************** the optimization will lead to code being
*** 4348,4355 ****
  where flow analysis or alias analysis should show that certain code
  cannot be called) or to functions not being called because they have
  been expanded as built-in functions.  Such tests go in
! 'gcc.c-torture/execute'.  Where code should be optimized away, a call to
! a nonexistent function such as 'link_failure ()' may be inserted; a
  definition
  
       #ifndef __OPTIMIZE__
--- 4347,4354 ----
  where flow analysis or alias analysis should show that certain code
  cannot be called) or to functions not being called because they have
  been expanded as built-in functions.  Such tests go in
! ‘gcc.c-torture/execute’.  Where code should be optimized away, a call to
! a nonexistent function such as ‘link_failure ()’ may be inserted; a
  definition
  
       #ifndef __OPTIMIZE__
*************** definition
*** 4363,4370 ****
  will also be needed so that linking still succeeds when the test is run
  without optimization.  When all calls to a built-in function should have
  been optimized and no calls to the non-built-in version of the function
! should remain, that function may be defined as 'static' to call 'abort
! ()' (although redeclaring a function as static may not work on all
  targets).
  
   All testcases must be portable.  Target-specific testcases must have
--- 4362,4369 ----
  will also be needed so that linking still succeeds when the test is run
  without optimization.  When all calls to a built-in function should have
  been optimized and no calls to the non-built-in version of the function
! should remain, that function may be defined as ‘static’ to call ‘abort
! ()’ (although redeclaring a function as static may not work on all
  targets).
  
   All testcases must be portable.  Target-specific testcases must have
*************** File: gccint.info,  Node: Test Directive
*** 4384,4392 ****
  * Directives::  Syntax and descriptions of test directives.
  * Selectors:: Selecting targets to which a test applies.
  * Effective-Target Keywords:: Keywords describing target attributes.
! * Add Options:: Features for 'dg-add-options'
! * Require Support:: Variants of 'dg-require-SUPPORT'
! * Final Actions:: Commands for use in 'dg-final'
  
  
  File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
--- 4383,4391 ----
  * Directives::  Syntax and descriptions of test directives.
  * Selectors:: Selecting targets to which a test applies.
  * Effective-Target Keywords:: Keywords describing target attributes.
! * Add Options:: Features for ‘dg-add-options’
! * Require Support:: Variants of ‘dg-require-SUPPORT’
! * Final Actions:: Commands for use in ‘dg-final’
  
  
  File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
*************** File: gccint.info,  Node: Directives,  N
*** 4395,4401 ****
  ------------------------------------------------
  
  Test directives appear within comments in a test source file and begin
! with 'dg-'.  Some of these are defined within DejaGnu and others are
  local to the GCC testsuite.
  
   The order in which test directives appear in a test can be important:
--- 4394,4400 ----
  ------------------------------------------------
  
  Test directives appear within comments in a test source file and begin
! with ‘dg-’.  Some of these are defined within DejaGnu and others are
  local to the GCC testsuite.
  
   The order in which test directives appear in a test can be important:
*************** DejaGnu directives, which know nothing a
*** 4404,4458 ****
  DejaGnu directives must precede GCC directives.
  
   Several test directives include selectors (*note Selectors::) which are
! usually preceded by the keyword 'target' or 'xfail'.
  
  7.2.1.1 Specify how to build the test
  .....................................
  
! '{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
       DO-WHAT-KEYWORD specifies how the test is compiled and whether it
       is executed.  It is one of:
  
!      'preprocess'
!           Compile with '-E' to run only the preprocessor.
!      'compile'
!           Compile with '-S' to produce an assembly code file.
!      'assemble'
!           Compile with '-c' to produce a relocatable object file.
!      'link'
            Compile, assemble, and link to produce an executable file.
!      'run'
            Produce and run an executable file, which is expected to
            return an exit code of 0.
  
!      The default is 'compile'.  That can be overridden for a set of
!      tests by redefining 'dg-do-what-default' within the '.exp' file for
       those tests.
  
!      If the directive includes the optional '{ target SELECTOR }' then
       the test is skipped unless the target system matches the SELECTOR.
  
!      If DO-WHAT-KEYWORD is 'run' and the directive includes the optional
!      '{ xfail SELECTOR }' and the selector is met then the test is
!      expected to fail.  The 'xfail' clause is ignored for other values
!      of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'.
  
  7.2.1.2 Specify additional compiler options
  ...........................................
  
! '{ dg-options OPTIONS [{ target SELECTOR }] }'
       This DejaGnu directive provides a list of compiler options, to be
       used if the target system matches SELECTOR, that replace the
       default options used for this set of tests.
  
! '{ dg-add-options FEATURE ... }'
       Add any compiler options that are needed to access certain
       features.  This directive does nothing on targets that enable the
       features by default, or that don't provide them at all.  It must
!      come after all 'dg-options' directives.  For supported values of
       FEATURE see *note Add Options::.
  
! '{ dg-additional-options OPTIONS [{ target SELECTOR }] }'
       This directive provides a list of compiler options, to be used if
       the target system matches SELECTOR, that are added to the default
       options used for this set of tests.
--- 4403,4457 ----
  DejaGnu directives must precede GCC directives.
  
   Several test directives include selectors (*note Selectors::) which are
! usually preceded by the keyword ‘target’ or ‘xfail’.
  
  7.2.1.1 Specify how to build the test
  .....................................
  
! ‘{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }’
       DO-WHAT-KEYWORD specifies how the test is compiled and whether it
       is executed.  It is one of:
  
!      ‘preprocess’
!           Compile with ‘-E’ to run only the preprocessor.
!      ‘compile’
!           Compile with ‘-S’ to produce an assembly code file.
!      ‘assemble’
!           Compile with ‘-c’ to produce a relocatable object file.
!      ‘link’
            Compile, assemble, and link to produce an executable file.
!      ‘run’
            Produce and run an executable file, which is expected to
            return an exit code of 0.
  
!      The default is ‘compile’.  That can be overridden for a set of
!      tests by redefining ‘dg-do-what-default’ within the ‘.exp’ file for
       those tests.
  
!      If the directive includes the optional ‘{ target SELECTOR }’ then
       the test is skipped unless the target system matches the SELECTOR.
  
!      If DO-WHAT-KEYWORD is ‘run’ and the directive includes the optional
!      ‘{ xfail SELECTOR }’ and the selector is met then the test is
!      expected to fail.  The ‘xfail’ clause is ignored for other values
!      of DO-WHAT-KEYWORD; those tests can use directive ‘dg-xfail-if’.
  
  7.2.1.2 Specify additional compiler options
  ...........................................
  
! ‘{ dg-options OPTIONS [{ target SELECTOR }] }’
       This DejaGnu directive provides a list of compiler options, to be
       used if the target system matches SELECTOR, that replace the
       default options used for this set of tests.
  
! ‘{ dg-add-options FEATURE ... }’
       Add any compiler options that are needed to access certain
       features.  This directive does nothing on targets that enable the
       features by default, or that don't provide them at all.  It must
!      come after all ‘dg-options’ directives.  For supported values of
       FEATURE see *note Add Options::.
  
! ‘{ dg-additional-options OPTIONS [{ target SELECTOR }] }’
       This directive provides a list of compiler options, to be used if
       the target system matches SELECTOR, that are added to the default
       options used for this set of tests.
*************** usually preceded by the keyword 'target'
*** 4463,4539 ****
  The normal timeout limit, in seconds, is found by searching the
  following in order:
  
!    * the value defined by an earlier 'dg-timeout' directive in the test
  
!    * variable TOOL_TIMEOUT defined by the set of tests
  
!    * GCC,TIMEOUT set in the target board
  
!    * 300
  
! '{ dg-timeout N [{target SELECTOR }] }'
       Set the time limit for the compilation and for the execution of the
       test to the specified number of seconds.
  
! '{ dg-timeout-factor X [{ target SELECTOR }] }'
       Multiply the normal time limit for compilation and execution of the
       test by the specified floating-point factor.
  
  7.2.1.4 Skip a test for some targets
  ....................................
  
! '{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
       Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
       element is a string of zero or more GCC options.  Skip the test if
       all of the following conditions are met:
!         * the test system is included in SELECTOR
  
!         * for at least one of the option strings in INCLUDE-OPTS, every
            option from that string is in the set of options with which
!           the test would be compiled; use '"*"' for an INCLUDE-OPTS list
            that matches any options; that is the default if INCLUDE-OPTS
            is not specified
  
!         * for each of the option strings in EXCLUDE-OPTS, at least one
            option from that string is not in the set of options with
!           which the test would be compiled; use '""' for an empty
            EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
            specified
  
!      For example, to skip a test if option '-Os' is present:
  
            /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
  
!      To skip a test if both options '-O2' and '-g' are present:
  
            /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
  
!      To skip a test if either '-O2' or '-O3' is present:
  
            /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
  
!      To skip a test unless option '-Os' is present:
  
            /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
  
!      To skip a test if either '-O2' or '-O3' is used with '-g' but not
!      if '-fpic' is also present:
  
            /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
  
! '{ dg-require-effective-target KEYWORD [{ target SELECTOR }] }'
       Skip the test if the test target, including current multilib flags,
       is not covered by the effective-target keyword.  If the directive
!      includes the optional '{ SELECTOR }' then the effective-target test
       is only performed if the target system matches the SELECTOR.  This
!      directive must appear after any 'dg-do' directive in the test and
!      before any 'dg-additional-sources' directive.  *Note
       Effective-Target Keywords::.
  
! '{ dg-require-SUPPORT args }'
       Skip the test if the target does not provide the required support.
!      These directives must appear after any 'dg-do' directive in the
!      test and before any 'dg-additional-sources' directive.  They
       require at least one argument, which can be an empty string if the
       specific procedure does not examine the argument.  *Note Require
       Support::, for a complete list of these directives.
--- 4462,4538 ----
  The normal timeout limit, in seconds, is found by searching the
  following in order:
  
!    • the value defined by an earlier ‘dg-timeout’ directive in the test
  
!    • variable TOOL_TIMEOUT defined by the set of tests
  
!    • GCC,TIMEOUT set in the target board
  
!    • 300
  
! ‘{ dg-timeout N [{target SELECTOR }] }’
       Set the time limit for the compilation and for the execution of the
       test to the specified number of seconds.
  
! ‘{ dg-timeout-factor X [{ target SELECTOR }] }’
       Multiply the normal time limit for compilation and execution of the
       test by the specified floating-point factor.
  
  7.2.1.4 Skip a test for some targets
  ....................................
  
! ‘{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }’
       Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
       element is a string of zero or more GCC options.  Skip the test if
       all of the following conditions are met:
!         • the test system is included in SELECTOR
  
!         • for at least one of the option strings in INCLUDE-OPTS, every
            option from that string is in the set of options with which
!           the test would be compiled; use ‘"*"’ for an INCLUDE-OPTS list
            that matches any options; that is the default if INCLUDE-OPTS
            is not specified
  
!         • for each of the option strings in EXCLUDE-OPTS, at least one
            option from that string is not in the set of options with
!           which the test would be compiled; use ‘""’ for an empty
            EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
            specified
  
!      For example, to skip a test if option ‘-Os’ is present:
  
            /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
  
!      To skip a test if both options ‘-O2’ and ‘-g’ are present:
  
            /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
  
!      To skip a test if either ‘-O2’ or ‘-O3’ is present:
  
            /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
  
!      To skip a test unless option ‘-Os’ is present:
  
            /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
  
!      To skip a test if either ‘-O2’ or ‘-O3’ is used with ‘-g’ but not
!      if ‘-fpic’ is also present:
  
            /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
  
! ‘{ dg-require-effective-target KEYWORD [{ target SELECTOR }] }’
       Skip the test if the test target, including current multilib flags,
       is not covered by the effective-target keyword.  If the directive
!      includes the optional ‘{ SELECTOR }’ then the effective-target test
       is only performed if the target system matches the SELECTOR.  This
!      directive must appear after any ‘dg-do’ directive in the test and
!      before any ‘dg-additional-sources’ directive.  *Note
       Effective-Target Keywords::.
  
! ‘{ dg-require-SUPPORT args }’
       Skip the test if the target does not provide the required support.
!      These directives must appear after any ‘dg-do’ directive in the
!      test and before any ‘dg-additional-sources’ directive.  They
       require at least one argument, which can be an empty string if the
       specific procedure does not examine the argument.  *Note Require
       Support::, for a complete list of these directives.
*************** following in order:
*** 4541,4676 ****
  7.2.1.5 Expect a test to fail for some targets
  ..............................................
  
! '{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
       Expect the test to fail if the conditions (which are the same as
!      for 'dg-skip-if') are met.  This does not affect the execute step.
  
! '{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
       Expect the execute step of a test to fail if the conditions (which
!      are the same as for 'dg-skip-if') are met.
  
  7.2.1.6 Expect the compiler to crash
  ....................................
  
! '{ dg-ice COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
       Expect the compiler to crash with an internal compiler error and
       return a nonzero exit status if the conditions (which are the same
!      as for 'dg-skip-if') are met.  Used for tests that test bugs that
       have not been fixed yet.
  
  7.2.1.7 Expect the test executable to fail
  ..........................................
  
! '{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
       Expect the test executable to return a nonzero exit status if the
!      conditions (which are the same as for 'dg-skip-if') are met.
  
  7.2.1.8 Verify compiler messages
  ................................
  
! Where LINE is an accepted argument for these commands, a value of '0'
  can be used if there is no line associated with the message.
  
! '{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
       This DejaGnu directive appears on a source line that is expected to
       get an error message, or else specifies the source line associated
       with the message.  If there is no message for that line or if the
       text of that message is not matched by REGEXP then the check fails
!      and COMMENT is included in the 'FAIL' message.  The check does not
!      look for the string 'error' unless it is part of REGEXP.
  
! '{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
       This DejaGnu directive appears on a source line that is expected to
       get a warning message, or else specifies the source line associated
       with the message.  If there is no message for that line or if the
       text of that message is not matched by REGEXP then the check fails
!      and COMMENT is included in the 'FAIL' message.  The check does not
!      look for the string 'warning' unless it is part of REGEXP.
  
! '{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
       The line is expected to get a message other than an error or
       warning.  If there is no message for that line or if the text of
       that message is not matched by REGEXP then the check fails and
!      COMMENT is included in the 'FAIL' message.
  
! '{ dg-note REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
!      The line is expected to get a 'note' message.  If there is no
       message for that line or if the text of that message is not matched
       by REGEXP then the check fails and COMMENT is included in the
!      'FAIL' message.
  
!      By default, any _excess_ 'note' messages are pruned, meaning their
!      appearance doesn't trigger _excess errors_.  However, if 'dg-note'
       is used at least once in a testcase, they're not pruned and instead
       must _all_ be handled explicitly.  Thus, if looking for just single
!      instances of messages with 'note: ' prefixes without caring for all
!      of them, use 'dg-message "note: [...]"' instead of 'dg-note', or
!      use 'dg-note' together with 'dg-prune-output "note: "'.
  
! '{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
       This DejaGnu directive appears on a source line that should not get
       a message matching REGEXP, or else specifies the source line
!      associated with the bogus message.  It is usually used with 'xfail'
       to indicate that the message is a known problem for a particular
       set of targets.
  
! '{ dg-line LINENUMVAR }'
       This DejaGnu directive sets the variable LINENUMVAR to the line
       number of the source line.  The variable LINENUMVAR can then be
!      used in subsequent 'dg-error', 'dg-warning', 'dg-message',
!      'dg-note' and 'dg-bogus' directives.  For example:
  
            int a;   /* { dg-line first_def_a } */
            float a; /* { dg-error "conflicting types of" } */
            /* { dg-message "previous declaration of" "" { target *-*-* } first_def_a } */
  
! '{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
       This DejaGnu directive indicates that the test is expected to fail
!      due to compiler messages that are not handled by 'dg-error',
!      'dg-warning', 'dg-message', 'dg-note' or 'dg-bogus'.  For this
!      directive 'xfail' has the same effect as 'target'.
  
! '{ dg-prune-output REGEXP }'
       Prune messages matching REGEXP from the test output.
  
  7.2.1.9 Verify output of the test executable
  ............................................
  
! '{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
       This DejaGnu directive compares REGEXP to the combined output that
!      the test executable writes to 'stdout' and 'stderr'.
  
  7.2.1.10 Specify environment variables for a test
  .................................................
  
! '{ dg-set-compiler-env-var VAR_NAME "VAR_VALUE" }'
       Specify that the environment variable VAR_NAME needs to be set to
       VAR_VALUE before invoking the compiler on the test file.
  
! '{ dg-set-target-env-var VAR_NAME "VAR_VALUE" }'
       Specify that the environment variable VAR_NAME needs to be set to
       VAR_VALUE before execution of the program created by the test.
  
  7.2.1.11 Specify additional files for a test
  ............................................
  
! '{ dg-additional-files "FILELIST" }'
       Specify additional files, other than source files, that must be
       copied to the system where the compiler runs.
  
! '{ dg-additional-sources "FILELIST" }'
       Specify additional source files to appear in the compile line
       following the main test file.
  
  7.2.1.12 Add checks at the end of a test
  ........................................
  
! '{ dg-final { LOCAL-DIRECTIVE } }'
       This DejaGnu directive is placed within a comment anywhere in the
       source file and is processed after the test has been compiled and
!      run.  Multiple 'dg-final' commands are processed in the order in
       which they appear in the source file.  *Note Final Actions::, for a
!      list of directives that can be used within 'dg-final'.
  
  
  File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
--- 4540,4675 ----
  7.2.1.5 Expect a test to fail for some targets
  ..............................................
  
! ‘{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }’
       Expect the test to fail if the conditions (which are the same as
!      for ‘dg-skip-if’) are met.  This does not affect the execute step.
  
! ‘{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }’
       Expect the execute step of a test to fail if the conditions (which
!      are the same as for ‘dg-skip-if’) are met.
  
  7.2.1.6 Expect the compiler to crash
  ....................................
  
! ‘{ dg-ice COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }’
       Expect the compiler to crash with an internal compiler error and
       return a nonzero exit status if the conditions (which are the same
!      as for ‘dg-skip-if’) are met.  Used for tests that test bugs that
       have not been fixed yet.
  
  7.2.1.7 Expect the test executable to fail
  ..........................................
  
! ‘{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }’
       Expect the test executable to return a nonzero exit status if the
!      conditions (which are the same as for ‘dg-skip-if’) are met.
  
  7.2.1.8 Verify compiler messages
  ................................
  
! Where LINE is an accepted argument for these commands, a value of ‘0’
  can be used if there is no line associated with the message.
  
! ‘{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’
       This DejaGnu directive appears on a source line that is expected to
       get an error message, or else specifies the source line associated
       with the message.  If there is no message for that line or if the
       text of that message is not matched by REGEXP then the check fails
!      and COMMENT is included in the ‘FAIL’ message.  The check does not
!      look for the string ‘error’ unless it is part of REGEXP.
  
! ‘{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’
       This DejaGnu directive appears on a source line that is expected to
       get a warning message, or else specifies the source line associated
       with the message.  If there is no message for that line or if the
       text of that message is not matched by REGEXP then the check fails
!      and COMMENT is included in the ‘FAIL’ message.  The check does not
!      look for the string ‘warning’ unless it is part of REGEXP.
  
! ‘{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’
       The line is expected to get a message other than an error or
       warning.  If there is no message for that line or if the text of
       that message is not matched by REGEXP then the check fails and
!      COMMENT is included in the ‘FAIL’ message.
  
! ‘{ dg-note REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’
!      The line is expected to get a ‘note’ message.  If there is no
       message for that line or if the text of that message is not matched
       by REGEXP then the check fails and COMMENT is included in the
!      ‘FAIL’ message.
  
!      By default, any _excess_ ‘note’ messages are pruned, meaning their
!      appearance doesn't trigger _excess errors_.  However, if ‘dg-note’
       is used at least once in a testcase, they're not pruned and instead
       must _all_ be handled explicitly.  Thus, if looking for just single
!      instances of messages with ‘note: ’ prefixes without caring for all
!      of them, use ‘dg-message "note: [...]"’ instead of ‘dg-note’, or
!      use ‘dg-note’ together with ‘dg-prune-output "note: "’.
  
! ‘{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’
       This DejaGnu directive appears on a source line that should not get
       a message matching REGEXP, or else specifies the source line
!      associated with the bogus message.  It is usually used with ‘xfail’
       to indicate that the message is a known problem for a particular
       set of targets.
  
! ‘{ dg-line LINENUMVAR }’
       This DejaGnu directive sets the variable LINENUMVAR to the line
       number of the source line.  The variable LINENUMVAR can then be
!      used in subsequent ‘dg-error’, ‘dg-warning’, ‘dg-message’,
!      ‘dg-note’ and ‘dg-bogus’ directives.  For example:
  
            int a;   /* { dg-line first_def_a } */
            float a; /* { dg-error "conflicting types of" } */
            /* { dg-message "previous declaration of" "" { target *-*-* } first_def_a } */
  
! ‘{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }’
       This DejaGnu directive indicates that the test is expected to fail
!      due to compiler messages that are not handled by ‘dg-error’,
!      ‘dg-warning’, ‘dg-message’, ‘dg-note’ or ‘dg-bogus’.  For this
!      directive ‘xfail’ has the same effect as ‘target’.
  
! ‘{ dg-prune-output REGEXP }’
       Prune messages matching REGEXP from the test output.
  
  7.2.1.9 Verify output of the test executable
  ............................................
  
! ‘{ dg-output REGEXP [{ target/xfail SELECTOR }] }’
       This DejaGnu directive compares REGEXP to the combined output that
!      the test executable writes to ‘stdout’ and ‘stderr’.
  
  7.2.1.10 Specify environment variables for a test
  .................................................
  
! ‘{ dg-set-compiler-env-var VAR_NAME "VAR_VALUE" }’
       Specify that the environment variable VAR_NAME needs to be set to
       VAR_VALUE before invoking the compiler on the test file.
  
! ‘{ dg-set-target-env-var VAR_NAME "VAR_VALUE" }’
       Specify that the environment variable VAR_NAME needs to be set to
       VAR_VALUE before execution of the program created by the test.
  
  7.2.1.11 Specify additional files for a test
  ............................................
  
! ‘{ dg-additional-files "FILELIST" }’
       Specify additional files, other than source files, that must be
       copied to the system where the compiler runs.
  
! ‘{ dg-additional-sources "FILELIST" }’
       Specify additional source files to appear in the compile line
       following the main test file.
  
  7.2.1.12 Add checks at the end of a test
  ........................................
  
! ‘{ dg-final { LOCAL-DIRECTIVE } }’
       This DejaGnu directive is placed within a comment anywhere in the
       source file and is processed after the test has been compiled and
!      run.  Multiple ‘dg-final’ commands are processed in the order in
       which they appear in the source file.  *Note Final Actions::, for a
!      list of directives that can be used within ‘dg-final’.
  
  
  File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
*************** a test is run or to declare that a test
*** 4683,4717 ****
  particular targets.
  
   A selector is:
!    * one or more target triplets, possibly including wildcard
!      characters; use '*-*-*' to match any target
!    * a single effective-target keyword (*note Effective-Target
       Keywords::)
!    * a list of compiler options that should be included or excluded (as
       described in more detail below)
!    * a logical expression
  
   Depending on the context, the selector specifies whether a test is
  skipped and reported as unsupported or is expected to fail.  A context
! that allows either 'target' or 'xfail' also allows '{ target SELECTOR1
! xfail SELECTOR2 }' to skip the test for targets that don't match
  SELECTOR1 and the test to fail for targets that match SELECTOR2.
  
   A selector expression appears within curly braces and uses a single
! logical operator: one of '!', '&&', or '||'.  An operand is one of the
  following:
  
!    * another selector expression, in curly braces
  
!    * an effective-target keyword, such as 'lp64'
  
!    * a single target triplet
  
!    * a list of target triplets within quotes or curly braces
  
!    * one of the following:
  
!      '{ any-opts OPT1 ... OPTN }'
            Each of OPT1 to OPTN is a space-separated list of option
            globs.  The selector expression evaluates to true if, for one
            of these strings, every glob in the string matches an option
--- 4682,4716 ----
  particular targets.
  
   A selector is:
!    • one or more target triplets, possibly including wildcard
!      characters; use ‘*-*-*’ to match any target
!    • a single effective-target keyword (*note Effective-Target
       Keywords::)
!    • a list of compiler options that should be included or excluded (as
       described in more detail below)
!    • a logical expression
  
   Depending on the context, the selector specifies whether a test is
  skipped and reported as unsupported or is expected to fail.  A context
! that allows either ‘target’ or ‘xfail’ also allows ‘{ target SELECTOR1
! xfail SELECTOR2 }’ to skip the test for targets that don't match
  SELECTOR1 and the test to fail for targets that match SELECTOR2.
  
   A selector expression appears within curly braces and uses a single
! logical operator: one of ‘!’, ‘&&’, or ‘||’.  An operand is one of the
  following:
  
!    • another selector expression, in curly braces
  
!    • an effective-target keyword, such as ‘lp64’
  
!    • a single target triplet
  
!    • a list of target triplets within quotes or curly braces
  
!    • one of the following:
  
!      ‘{ any-opts OPT1 ... OPTN }’
            Each of OPT1 to OPTN is a space-separated list of option
            globs.  The selector expression evaluates to true if, for one
            of these strings, every glob in the string matches an option
*************** following:
*** 4721,4739 ****
  
            is true if any of the following are true:
  
!              * '-O2' was passed to the compiler
  
!              * '-Og' was passed to the compiler
  
!              * both '-O3' and '-flto' were passed to the compiler
  
!           This kind of selector can only be used within 'dg-final'
!           directives.  Use 'dg-skip-if', 'dg-xfail-if' or
!           'dg-xfail-run-if' to skip whole tests based on options, or to
            mark them as expected to fail with certain options.
  
!      '{ no-opts OPT1 ... OPTN }'
!           As for 'any-opts' above, each of OPT1 to OPTN is a
            space-separated list of option globs.  The selector expression
            evaluates to true if, for all of these strings, there is at
            least one glob that does not match an option that was passed
--- 4720,4738 ----
  
            is true if any of the following are true:
  
!              • ‘-O2’ was passed to the compiler
  
!              • ‘-Og’ was passed to the compiler
  
!              • both ‘-O3’ and ‘-flto’ were passed to the compiler
  
!           This kind of selector can only be used within ‘dg-final’
!           directives.  Use ‘dg-skip-if’, ‘dg-xfail-if’ or
!           ‘dg-xfail-run-if’ to skip whole tests based on options, or to
            mark them as expected to fail with certain options.
  
!      ‘{ no-opts OPT1 ... OPTN }’
!           As for ‘any-opts’ above, each of OPT1 to OPTN is a
            space-separated list of option globs.  The selector expression
            evaluates to true if, for all of these strings, there is at
            least one glob that does not match an option that was passed
*************** following:
*** 4747,4761 ****
  
            is true if all of the following are true:
  
!              * '-O2' was not passed to the compiler
  
!              * '-Og' was not passed to the compiler
  
!              * at least one of '-O3' or '-flto' was not passed to the
                 compiler
  
!           Like 'any-opts', this kind of selector can only be used within
!           'dg-final' directives.
  
   Here are some examples of full target selectors:
  
--- 4746,4760 ----
  
            is true if all of the following are true:
  
!              • ‘-O2’ was not passed to the compiler
  
!              • ‘-Og’ was not passed to the compiler
  
!              • at least one of ‘-O3’ or ‘-flto’ was not passed to the
                 compiler
  
!           Like ‘any-opts’, this kind of selector can only be used within
!           ‘dg-final’ directives.
  
   Here are some examples of full target selectors:
  
*************** particular functionality.  They are used
*** 4775,5069 ****
  for particular targets, or to specify that particular sets of targets
  are expected to fail some tests.
  
!  Effective-target keywords are defined in 'lib/target-supports.exp' in
  the GCC testsuite, with the exception of those that are documented as
  being local to a particular test directory.
  
!  The 'effective target' takes into account all of the compiler options
  with which the test will be compiled, including the multilib options.
! By convention, keywords ending in '_nocache' can also include options
! specified for the particular test in an earlier 'dg-options' or
! 'dg-add-options' directive.
  
  7.2.3.1 Endianness
  ..................
  
! 'be'
       Target uses big-endian memory order for multi-byte and multi-word
       data.
  
! 'le'
       Target uses little-endian memory order for multi-byte and
       multi-word data.
  
  7.2.3.2 Data type sizes
  .......................
  
! 'ilp32'
!      Target has 32-bit 'int', 'long', and pointers.
  
! 'lp64'
!      Target has 32-bit 'int', 64-bit 'long' and pointers.
  
! 'llp64'
!      Target has 32-bit 'int' and 'long', 64-bit 'long long' and
       pointers.
  
! 'double64'
!      Target has 64-bit 'double'.
  
! 'double64plus'
!      Target has 'double' that is 64 bits or longer.
  
! 'longdouble128'
!      Target has 128-bit 'long double'.
  
! 'int32plus'
!      Target has 'int' that is at 32 bits or longer.
  
! 'int16'
!      Target has 'int' that is 16 bits or shorter.
  
! 'longlong64'
!      Target has 64-bit 'long long'.
  
! 'long_neq_int'
!      Target has 'int' and 'long' with different sizes.
  
! 'short_eq_int'
!      Target has 'short' and 'int' with the same size.
  
! 'ptr_eq_short'
!      Target has pointers ('void *') and 'short' with the same size.
  
! 'int_eq_float'
!      Target has 'int' and 'float' with the same size.
  
! 'ptr_eq_long'
!      Target has pointers ('void *') and 'long' with the same size.
  
! 'large_double'
!      Target supports 'double' that is longer than 'float'.
  
! 'large_long_double'
!      Target supports 'long double' that is longer than 'double'.
  
! 'ptr32plus'
       Target has pointers that are 32 bits or longer.
  
! 'size20plus'
       Target has a 20-bit or larger address space, so supports at least
       16-bit array and structure sizes.
  
! 'size24plus'
       Target has a 24-bit or larger address space, so supports at least
       20-bit array and structure sizes.
  
! 'size32plus'
       Target has a 32-bit or larger address space, so supports at least
       24-bit array and structure sizes.
  
! '4byte_wchar_t'
!      Target has 'wchar_t' that is at least 4 bytes.
  
! 'floatN'
!      Target has the '_FloatN' type.
  
! 'floatNx'
!      Target has the '_FloatNx' type.
  
! 'floatN_runtime'
!      Target has the '_FloatN' type, including runtime support for any
!      options added with 'dg-add-options'.
  
! 'floatNx_runtime'
!      Target has the '_FloatNx' type, including runtime support for any
!      options added with 'dg-add-options'.
  
! 'floatn_nx_runtime'
       Target has runtime support for any options added with
!      'dg-add-options' for any '_FloatN' or '_FloatNx' type.
  
! 'inf'
!      Target supports floating point infinite ('inf') for type 'double'.
  
! 'inff'
!      Target supports floating point infinite ('inf') for type 'float'.
  
  7.2.3.3 Fortran-specific attributes
  ...................................
  
! 'fortran_integer_16'
!      Target supports Fortran 'integer' that is 16 bytes or longer.
  
! 'fortran_real_10'
!      Target supports Fortran 'real' that is 10 bytes or longer.
  
! 'fortran_real_16'
!      Target supports Fortran 'real' that is 16 bytes or longer.
  
! 'fortran_large_int'
!      Target supports Fortran 'integer' kinds larger than 'integer(8)'.
  
! 'fortran_large_real'
!      Target supports Fortran 'real' kinds larger than 'real(8)'.
  
  7.2.3.4 Vector-specific attributes
  ..................................
  
! 'vect_align_stack_vars'
       The target's ABI allows stack variables to be aligned to the
       preferred vector alignment.
  
! 'vect_avg_qi'
       Target supports both signed and unsigned averaging operations on
       vectors of bytes.
  
! 'vect_mulhrs_hi'
       Target supports both signed and unsigned
       multiply-high-with-round-and-scale operations on vectors of
       half-words.
  
! 'vect_sdiv_pow2_si'
       Target supports signed division by constant power-of-2 operations
       on vectors of 4-byte integers.
  
! 'vect_condition'
       Target supports vector conditional operations.
  
! 'vect_cond_mixed'
       Target supports vector conditional operations where comparison
       operands have different type from the value operands.
  
! 'vect_double'
!      Target supports hardware vectors of 'double'.
  
! 'vect_double_cond_arith'
       Target supports conditional addition, subtraction, multiplication,
!      division, minimum and maximum on vectors of 'double', via the
!      'cond_' optabs.
  
! 'vect_element_align_preferred'
       The target's preferred vector alignment is the same as the element
       alignment.
  
! 'vect_float'
!      Target supports hardware vectors of 'float' when
!      '-funsafe-math-optimizations' is in effect.
  
! 'vect_float_strict'
!      Target supports hardware vectors of 'float' when
!      '-funsafe-math-optimizations' is not in effect.  This implies
!      'vect_float'.
  
! 'vect_early_break'
       Target supports vectorization codegen of loops with early breaks.
       This requires an implementation of the cbranch optab for vectors.
  
! 'vect_early_break_hw'
       Target supports hardware vectorization and running of loops with
       early breaks.  This requires an implementation of the cbranch optab
       for vectors.
  
! 'vect_int'
!      Target supports hardware vectors of 'int'.
  
! 'vect_long'
!      Target supports hardware vectors of 'long'.
  
! 'vect_long_long'
!      Target supports hardware vectors of 'long long'.
  
! 'vect_check_ptrs'
!      Target supports the 'check_raw_ptrs' and 'check_war_ptrs' optabs on
       vectors.
  
! 'vect_fully_masked'
       Target supports fully-masked (also known as fully-predicated)
       loops, so that vector loops can handle partial as well as full
       vectors.
  
! 'vect_masked_load'
       Target supports vector masked loads.
  
! 'vect_masked_store'
       Target supports vector masked stores.
  
! 'vect_gather_load_ifn'
       Target supports vector gather loads using internal functions
       (rather than via built-in functions or emulation).
  
! 'vect_scatter_store'
       Target supports vector scatter stores.
  
! 'vect_aligned_arrays'
       Target aligns arrays to vector alignment boundary.
  
! 'vect_hw_misalign'
       Target supports a vector misalign access.
  
! 'vect_no_align'
       Target does not support a vector alignment mechanism.
  
! 'vect_peeling_profitable'
       Target might require to peel loops for alignment purposes.
  
! 'vect_no_int_min_max'
!      Target does not support a vector min and max instruction on 'int'.
  
! 'vect_no_int_add'
!      Target does not support a vector add instruction on 'int'.
  
! 'vect_no_bitwise'
       Target does not support vector bitwise instructions.
  
! 'vect_bool_cmp'
!      Target supports comparison of 'bool' vectors for at least one
       vector length.
  
! 'vect_char_add'
!      Target supports addition of 'char' vectors for at least one vector
       length.
  
! 'vect_char_mult'
!      Target supports 'vector char' multiplication.
  
! 'vect_short_mult'
!      Target supports 'vector short' multiplication.
  
! 'vect_int_mult'
!      Target supports 'vector int' multiplication.
  
! 'vect_long_mult'
!      Target supports 64 bit 'vector long' multiplication.
  
! 'vect_extract_even_odd'
       Target supports vector even/odd element extraction.
  
! 'vect_extract_even_odd_wide'
       Target supports vector even/odd element extraction of vectors with
!      elements 'SImode' or larger.
  
! 'vect_interleave'
       Target supports vector interleaving.
  
! 'vect_strided'
       Target supports vector interleaving and extract even/odd.
  
! 'vect_strided_wide'
       Target supports vector interleaving and extract even/odd for wide
       element types.
  
! 'vect_perm'
       Target supports vector permutation.
  
! 'vect_perm_byte'
       Target supports permutation of vectors with 8-bit elements.
  
! 'vect_perm_short'
       Target supports permutation of vectors with 16-bit elements.
  
! 'vect_perm3_byte'
       Target supports permutation of vectors with 8-bit elements, and for
       the default vector length it is possible to permute:
            { a0, a1, a2, b0, b1, b2, ... }
--- 4774,5068 ----
  for particular targets, or to specify that particular sets of targets
  are expected to fail some tests.
  
!  Effective-target keywords are defined in ‘lib/target-supports.exp’ in
  the GCC testsuite, with the exception of those that are documented as
  being local to a particular test directory.
  
!  The ‘effective target’ takes into account all of the compiler options
  with which the test will be compiled, including the multilib options.
! By convention, keywords ending in ‘_nocache’ can also include options
! specified for the particular test in an earlier ‘dg-options’ or
! ‘dg-add-options’ directive.
  
  7.2.3.1 Endianness
  ..................
  
! ‘be’
       Target uses big-endian memory order for multi-byte and multi-word
       data.
  
! ‘le’
       Target uses little-endian memory order for multi-byte and
       multi-word data.
  
  7.2.3.2 Data type sizes
  .......................
  
! ‘ilp32’
!      Target has 32-bit ‘int’, ‘long’, and pointers.
  
! ‘lp64’
!      Target has 32-bit ‘int’, 64-bit ‘long’ and pointers.
  
! ‘llp64’
!      Target has 32-bit ‘int’ and ‘long’, 64-bit ‘long long’ and
       pointers.
  
! ‘double64’
!      Target has 64-bit ‘double’.
  
! ‘double64plus’
!      Target has ‘double’ that is 64 bits or longer.
  
! ‘longdouble128’
!      Target has 128-bit ‘long double’.
  
! ‘int32plus’
!      Target has ‘int’ that is at 32 bits or longer.
  
! ‘int16’
!      Target has ‘int’ that is 16 bits or shorter.
  
! ‘longlong64’
!      Target has 64-bit ‘long long’.
  
! ‘long_neq_int’
!      Target has ‘int’ and ‘long’ with different sizes.
  
! ‘short_eq_int’
!      Target has ‘short’ and ‘int’ with the same size.
  
! ‘ptr_eq_short’
!      Target has pointers (‘void *’) and ‘short’ with the same size.
  
! ‘int_eq_float’
!      Target has ‘int’ and ‘float’ with the same size.
  
! ‘ptr_eq_long’
!      Target has pointers (‘void *’) and ‘long’ with the same size.
  
! ‘large_double’
!      Target supports ‘double’ that is longer than ‘float’.
  
! ‘large_long_double’
!      Target supports ‘long double’ that is longer than ‘double’.
  
! ‘ptr32plus’
       Target has pointers that are 32 bits or longer.
  
! ‘size20plus’
       Target has a 20-bit or larger address space, so supports at least
       16-bit array and structure sizes.
  
! ‘size24plus’
       Target has a 24-bit or larger address space, so supports at least
       20-bit array and structure sizes.
  
! ‘size32plus’
       Target has a 32-bit or larger address space, so supports at least
       24-bit array and structure sizes.
  
! ‘4byte_wchar_t’
!      Target has ‘wchar_t’ that is at least 4 bytes.
  
! ‘floatN’
!      Target has the ‘_FloatN’ type.
  
! ‘floatNx’
!      Target has the ‘_FloatNx’ type.
  
! ‘floatN_runtime’
!      Target has the ‘_FloatN’ type, including runtime support for any
!      options added with ‘dg-add-options’.
  
! ‘floatNx_runtime’
!      Target has the ‘_FloatNx’ type, including runtime support for any
!      options added with ‘dg-add-options’.
  
! ‘floatn_nx_runtime’
       Target has runtime support for any options added with
!      ‘dg-add-options’ for any ‘_FloatN’ or ‘_FloatNx’ type.
  
! ‘inf’
!      Target supports floating point infinite (‘inf’) for type ‘double’.
  
! ‘inff’
!      Target supports floating point infinite (‘inf’) for type ‘float’.
  
  7.2.3.3 Fortran-specific attributes
  ...................................
  
! ‘fortran_integer_16’
!      Target supports Fortran ‘integer’ that is 16 bytes or longer.
  
! ‘fortran_real_10’
!      Target supports Fortran ‘real’ that is 10 bytes or longer.
  
! ‘fortran_real_16’
!      Target supports Fortran ‘real’ that is 16 bytes or longer.
  
! ‘fortran_large_int’
!      Target supports Fortran ‘integer’ kinds larger than ‘integer(8)’.
  
! ‘fortran_large_real’
!      Target supports Fortran ‘real’ kinds larger than ‘real(8)’.
  
  7.2.3.4 Vector-specific attributes
  ..................................
  
! ‘vect_align_stack_vars’
       The target's ABI allows stack variables to be aligned to the
       preferred vector alignment.
  
! ‘vect_avg_qi’
       Target supports both signed and unsigned averaging operations on
       vectors of bytes.
  
! ‘vect_mulhrs_hi’
       Target supports both signed and unsigned
       multiply-high-with-round-and-scale operations on vectors of
       half-words.
  
! ‘vect_sdiv_pow2_si’
       Target supports signed division by constant power-of-2 operations
       on vectors of 4-byte integers.
  
! ‘vect_condition’
       Target supports vector conditional operations.
  
! ‘vect_cond_mixed’
       Target supports vector conditional operations where comparison
       operands have different type from the value operands.
  
! ‘vect_double’
!      Target supports hardware vectors of ‘double’.
  
! ‘vect_double_cond_arith’
       Target supports conditional addition, subtraction, multiplication,
!      division, minimum and maximum on vectors of ‘double’, via the
!      ‘cond_’ optabs.
  
! ‘vect_element_align_preferred’
       The target's preferred vector alignment is the same as the element
       alignment.
  
! ‘vect_float’
!      Target supports hardware vectors of ‘float’ when
!      ‘-funsafe-math-optimizations’ is in effect.
  
! ‘vect_float_strict’
!      Target supports hardware vectors of ‘float’ when
!      ‘-funsafe-math-optimizations’ is not in effect.  This implies
!      ‘vect_float’.
  
! ‘vect_early_break’
       Target supports vectorization codegen of loops with early breaks.
       This requires an implementation of the cbranch optab for vectors.
  
! ‘vect_early_break_hw’
       Target supports hardware vectorization and running of loops with
       early breaks.  This requires an implementation of the cbranch optab
       for vectors.
  
! ‘vect_int’
!      Target supports hardware vectors of ‘int’.
  
! ‘vect_long’
!      Target supports hardware vectors of ‘long’.
  
! ‘vect_long_long’
!      Target supports hardware vectors of ‘long long’.
  
! ‘vect_check_ptrs’
!      Target supports the ‘check_raw_ptrs’ and ‘check_war_ptrs’ optabs on
       vectors.
  
! ‘vect_fully_masked’
       Target supports fully-masked (also known as fully-predicated)
       loops, so that vector loops can handle partial as well as full
       vectors.
  
! ‘vect_masked_load’
       Target supports vector masked loads.
  
! ‘vect_masked_store’
       Target supports vector masked stores.
  
! ‘vect_gather_load_ifn’
       Target supports vector gather loads using internal functions
       (rather than via built-in functions or emulation).
  
! ‘vect_scatter_store’
       Target supports vector scatter stores.
  
! ‘vect_aligned_arrays’
       Target aligns arrays to vector alignment boundary.
  
! ‘vect_hw_misalign’
       Target supports a vector misalign access.
  
! ‘vect_no_align’
       Target does not support a vector alignment mechanism.
  
! ‘vect_peeling_profitable’
       Target might require to peel loops for alignment purposes.
  
! ‘vect_no_int_min_max’
!      Target does not support a vector min and max instruction on ‘int’.
  
! ‘vect_no_int_add’
!      Target does not support a vector add instruction on ‘int’.
  
! ‘vect_no_bitwise’
       Target does not support vector bitwise instructions.
  
! ‘vect_bool_cmp’
!      Target supports comparison of ‘bool’ vectors for at least one
       vector length.
  
! ‘vect_char_add’
!      Target supports addition of ‘char’ vectors for at least one vector
       length.
  
! ‘vect_char_mult’
!      Target supports ‘vector char’ multiplication.
  
! ‘vect_short_mult’
!      Target supports ‘vector short’ multiplication.
  
! ‘vect_int_mult’
!      Target supports ‘vector int’ multiplication.
  
! ‘vect_long_mult’
!      Target supports 64 bit ‘vector long’ multiplication.
  
! ‘vect_extract_even_odd’
       Target supports vector even/odd element extraction.
  
! ‘vect_extract_even_odd_wide’
       Target supports vector even/odd element extraction of vectors with
!      elements ‘SImode’ or larger.
  
! ‘vect_interleave’
       Target supports vector interleaving.
  
! ‘vect_strided’
       Target supports vector interleaving and extract even/odd.
  
! ‘vect_strided_wide’
       Target supports vector interleaving and extract even/odd for wide
       element types.
  
! ‘vect_perm’
       Target supports vector permutation.
  
! ‘vect_perm_byte’
       Target supports permutation of vectors with 8-bit elements.
  
! ‘vect_perm_short’
       Target supports permutation of vectors with 16-bit elements.
  
! ‘vect_perm3_byte’
       Target supports permutation of vectors with 8-bit elements, and for
       the default vector length it is possible to permute:
            { a0, a1, a2, b0, b1, b2, ... }
*************** specified for the particular test in an
*** 5074,6468 ****
       using only two-vector permutes, regardless of how long the sequence
       is.
  
! 'vect_perm3_int'
!      Like 'vect_perm3_byte', but for 32-bit elements.
  
! 'vect_perm3_short'
!      Like 'vect_perm3_byte', but for 16-bit elements.
  
! 'vect_shift'
       Target supports a hardware vector shift operation.
  
! 'vect_unaligned_possible'
       Target prefers vectors to have an alignment greater than element
       alignment, but also allows unaligned vector accesses in some
       circumstances.
  
! 'vect_variable_length'
       Target has variable-length vectors.
  
! 'vect64'
       Target supports vectors of 64 bits.
  
! 'vect32'
       Target supports vectors of 32 bits.
  
! 'vect_widen_sum_hi_to_si'
!      Target supports a vector widening summation of 'short' operands
!      into 'int' results, or can promote (unpack) from 'short' to 'int'.
  
! 'vect_widen_sum_qi_to_hi'
!      Target supports a vector widening summation of 'char' operands into
!      'short' results, or can promote (unpack) from 'char' to 'short'.
  
! 'vect_widen_sum_qi_to_si'
!      Target supports a vector widening summation of 'char' operands into
!      'int' results.
  
! 'vect_widen_mult_qi_to_hi'
!      Target supports a vector widening multiplication of 'char' operands
!      into 'short' results, or can promote (unpack) from 'char' to
!      'short' and perform non-widening multiplication of 'short'.
  
! 'vect_widen_mult_hi_to_si'
!      Target supports a vector widening multiplication of 'short'
!      operands into 'int' results, or can promote (unpack) from 'short'
!      to 'int' and perform non-widening multiplication of 'int'.
  
! 'vect_widen_mult_si_to_di_pattern'
!      Target supports a vector widening multiplication of 'int' operands
!      into 'long' results.
  
! 'vect_sdot_qi'
!      Target supports a vector dot-product of 'signed char'.
  
! 'vect_udot_qi'
!      Target supports a vector dot-product of 'unsigned char'.
  
! 'vect_usdot_qi'
       Target supports a vector dot-product where one operand of the
!      multiply is 'signed char' and the other of 'unsigned char'.
  
! 'vect_sdot_hi'
!      Target supports a vector dot-product of 'signed short'.
  
! 'vect_udot_hi'
!      Target supports a vector dot-product of 'unsigned short'.
  
! 'vect_pack_trunc'
!      Target supports a vector demotion (packing) of 'short' to 'char'
!      and from 'int' to 'short' using modulo arithmetic.
  
! 'vect_unpack'
!      Target supports a vector promotion (unpacking) of 'char' to 'short'
!      and from 'char' to 'int'.
  
! 'vect_intfloat_cvt'
!      Target supports conversion from 'signed int' to 'float'.
  
! 'vect_uintfloat_cvt'
!      Target supports conversion from 'unsigned int' to 'float'.
  
! 'vect_floatint_cvt'
!      Target supports conversion from 'float' to 'signed int'.
  
! 'vect_floatuint_cvt'
!      Target supports conversion from 'float' to 'unsigned int'.
  
! 'vect_intdouble_cvt'
!      Target supports conversion from 'signed int' to 'double'.
  
! 'vect_doubleint_cvt'
!      Target supports conversion from 'double' to 'signed int'.
  
! 'vect_max_reduc'
       Target supports max reduction for vectors.
  
! 'vect_sizes_16B_8B'
       Target supports 16- and 8-bytes vectors.
  
! 'vect_sizes_32B_16B'
       Target supports 32- and 16-bytes vectors.
  
! 'vect_logical_reduc'
       Target supports AND, IOR and XOR reduction on vectors.
  
! 'vect_fold_extract_last'
!      Target supports the 'fold_extract_last' optab.
  
! 'vect_len_load_store'
!      Target supports the 'len_load' and 'len_store' optabs.
  
! 'vect_partial_vectors_usage_1'
       Target supports loop vectorization with partial vectors and
!      'vect-partial-vector-usage' is set to 1.
  
! 'vect_partial_vectors_usage_2'
       Target supports loop vectorization with partial vectors and
!      'vect-partial-vector-usage' is set to 2.
  
! 'vect_partial_vectors'
       Target supports loop vectorization with partial vectors and
!      'vect-partial-vector-usage' is nonzero.
  
! 'vect_slp_v2qi_store_align'
       Target supports vectorization of 2-byte char stores with 2-byte
!      aligned address at plain '-O2'.
  
! 'vect_slp_v4qi_store_align'
       Target supports vectorization of 4-byte char stores with 4-byte
!      aligned address at plain '-O2'.
  
! 'vect_slp_v4qi_store_unalign'
       Target supports vectorization of 4-byte char stores with unaligned
!      address at plain '-O2'.
  
! 'struct_4char_block_move'
       Target supports block move for 8-byte aligned 4-byte size struct
       initialization.
  
! 'vect_slp_v4qi_store_unalign_1'
       Target supports vectorization of 4-byte char stores with unaligned
!      address or store them with constant pool at plain '-O2'.
  
! 'struct_8char_block_move'
       Target supports block move for 8-byte aligned 8-byte size struct
       initialization.
  
! 'vect_slp_v8qi_store_unalign_1'
       Target supports vectorization of 8-byte char stores with unaligned
!      address or store them with constant pool at plain '-O2'.
  
! 'struct_16char_block_move'
       Target supports block move for 8-byte aligned 16-byte size struct
       initialization.
  
! 'vect_slp_v16qi_store_unalign_1'
       Target supports vectorization of 16-byte char stores with unaligned
!      address or store them with constant pool at plain '-O2'.
  
! 'vect_slp_v2hi_store_align'
       Target supports vectorization of 4-byte short stores with 4-byte
!      aligned addressat plain '-O2'.
  
! 'vect_slp_v2hi_store_unalign'
       Target supports vectorization of 4-byte short stores with unaligned
!      address at plain '-O2'.
  
! 'vect_slp_v4hi_store_unalign'
       Target supports vectorization of 8-byte short stores with unaligned
!      address at plain '-O2'.
  
! 'vect_slp_v2si_store_align'
       Target supports vectorization of 8-byte int stores with 8-byte
!      aligned address at plain '-O2'.
  
! 'vect_slp_v4si_store_unalign'
       Target supports vectorization of 16-byte int stores with unaligned
!      address at plain '-O2'.
  
  7.2.3.5 Thread Local Storage attributes
  .......................................
  
! 'tls'
       Target supports thread-local storage.
  
! 'tls_native'
       Target supports native (rather than emulated) thread-local storage.
  
! 'tls_runtime'
       Test system supports executing TLS executables.
  
  7.2.3.6 Decimal floating point attributes
  .........................................
  
! 'dfp'
       Targets supports compiling decimal floating point extension to C.
  
! 'dfp_nocache'
       Including the options used to compile this particular test, the
       target supports compiling decimal floating point extension to C.
  
! 'dfprt'
       Test system can execute decimal floating point tests.
  
! 'dfprt_nocache'
       Including the options used to compile this particular test, the
       test system can execute decimal floating point tests.
  
! 'hard_dfp'
       Target generates decimal floating point instructions with current
       options.
  
! 'dfp_bid'
       Target uses the BID format for decimal floating point.
  
  7.2.3.7 ARM-specific attributes
  ...............................
  
! 'arm32'
       ARM target generates 32-bit code.
  
! 'arm_little_endian'
       ARM target that generates little-endian code.
  
! 'arm_eabi'
       ARM target adheres to the ABI for the ARM Architecture.
  
! 'arm_fp_ok'
!      ARM target defines '__ARM_FP' using '-mfloat-abi=softfp' or
       equivalent options.  Some multilibs may be incompatible with these
       options.
  
! 'arm_fp_dp_ok'
!      ARM target defines '__ARM_FP' with double-precision support using
!      '-mfloat-abi=softfp' or equivalent options.  Some multilibs may be
       incompatible with these options.
  
! 'arm_hf_eabi'
       ARM target adheres to the VFP and Advanced SIMD Register Arguments
       variant of the ABI for the ARM Architecture (as selected with
!      '-mfloat-abi=hard').
  
! 'arm_softfloat'
       ARM target uses emulated floating point operations.
  
! 'arm_hard_vfp_ok'
!      ARM target supports '-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
       may be incompatible with these options.
  
! 'arm_iwmmxt_ok'
!      ARM target supports '-mcpu=iwmmxt'.  Some multilibs may be
       incompatible with this option.
  
! 'arm_neon'
       ARM target supports generating NEON instructions.
  
! 'arm_tune_string_ops_prefer_neon'
       Test CPU tune supports inlining string operations with NEON
       instructions.
  
! 'arm_neon_hw'
       Test system supports executing NEON instructions.
  
! 'arm_neonv2_hw'
       Test system supports executing NEON v2 instructions.
  
! 'arm_neon_ok'
!      ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible
       options.  Some multilibs may be incompatible with these options.
  
! 'arm_neon_ok_no_float_abi'
!      ARM Target supports NEON with '-mfpu=neon', but without any
       -mfloat-abi= option.  Some multilibs may be incompatible with this
       option.
  
! 'arm_neonv2_ok'
!      ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or
       compatible options.  Some multilibs may be incompatible with these
       options.
  
! 'arm_fp16_ok'
       Target supports options to generate VFP half-precision
       floating-point instructions.  Some multilibs may be incompatible
       with these options.  This test is valid for ARM only.
  
! 'arm_fp16_hw'
       Target supports executing VFP half-precision floating-point
       instructions.  This test is valid for ARM only.
  
! 'arm_neon_fp16_ok'
!      ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or
!      compatible options, including '-mfp16-format=ieee' if necessary to
!      obtain the '__fp16' type.  Some multilibs may be incompatible with
       these options.
  
! 'arm_neon_fp16_hw'
       Test system supports executing Neon half-precision float
       instructions.  (Implies previous.)
  
! 'arm_fp16_alternative_ok'
       ARM target supports the ARM FP16 alternative format.  Some
       multilibs may be incompatible with the options needed.
  
! 'arm_fp16_none_ok'
       ARM target supports specifying none as the ARM FP16 format.
  
! 'arm_thumb1_ok'
!      ARM target generates Thumb-1 code for '-mthumb'.
  
! 'arm_thumb2_ok'
!      ARM target generates Thumb-2 code for '-mthumb'.
  
! 'arm_nothumb'
       ARM target that is not using Thumb.
  
! 'arm_vfp_ok'
!      ARM target supports '-mfpu=vfp -mfloat-abi=softfp'.  Some multilibs
       may be incompatible with these options.
  
! 'arm_vfp3_ok'
!      ARM target supports '-mfpu=vfp3 -mfloat-abi=softfp'.  Some
       multilibs may be incompatible with these options.
  
! 'arm_arch_v8a_hard_ok'
!      The compiler is targeting 'arm*-*-*' and can compile and assemble
!      code using the options '-march=armv8-a -mfpu=neon-fp-armv8
!      -mfloat-abi=hard'.  This is not enough to guarantee that linking
       works.
  
! 'arm_arch_v8a_hard_multilib'
!      The compiler is targeting 'arm*-*-*' and can build programs using
!      the options '-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard'.
       The target can also run the resulting binaries.
  
! 'arm_v8_vfp_ok'
!      ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'.  Some
       multilibs may be incompatible with these options.
  
! 'arm_v8_neon_ok'
!      ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'.  Some
       multilibs may be incompatible with these options.
  
! 'arm_v8_1a_neon_ok'
       ARM target supports options to generate ARMv8.1-A Adv.SIMD
       instructions.  Some multilibs may be incompatible with these
       options.
  
! 'arm_v8_1a_neon_hw'
       ARM target supports executing ARMv8.1-A Adv.SIMD instructions.
       Some multilibs may be incompatible with the options needed.
       Implies arm_v8_1a_neon_ok.
  
! 'arm_acq_rel'
       ARM target supports acquire-release instructions.
  
! 'arm_v8_2a_fp16_scalar_ok'
       ARM target supports options to generate instructions for ARMv8.2-A
       and scalar instructions from the FP16 extension.  Some multilibs
       may be incompatible with these options.
  
! 'arm_v8_2a_fp16_scalar_hw'
       ARM target supports executing instructions for ARMv8.2-A and scalar
       instructions from the FP16 extension.  Some multilibs may be
       incompatible with these options.  Implies arm_v8_2a_fp16_neon_ok.
  
! 'arm_v8_2a_fp16_neon_ok'
       ARM target supports options to generate instructions from ARMv8.2-A
       with the FP16 extension.  Some multilibs may be incompatible with
       these options.  Implies arm_v8_2a_fp16_scalar_ok.
  
! 'arm_v8_2a_fp16_neon_hw'
       ARM target supports executing instructions from ARMv8.2-A with the
       FP16 extension.  Some multilibs may be incompatible with these
       options.  Implies arm_v8_2a_fp16_neon_ok and
       arm_v8_2a_fp16_scalar_hw.
  
! 'arm_v8_2a_dotprod_neon_ok'
       ARM target supports options to generate instructions from ARMv8.2-A
       with the Dot Product extension.  Some multilibs may be incompatible
       with these options.
  
! 'arm_v8_2a_dotprod_neon_hw'
       ARM target supports executing instructions from ARMv8.2-A with the
       Dot Product extension.  Some multilibs may be incompatible with
       these options.  Implies arm_v8_2a_dotprod_neon_ok.
  
! 'arm_v8_2a_i8mm_neon_hw'
       ARM target supports executing instructions from ARMv8.2-A with the
       8-bit Matrix Multiply extension.  Some multilibs may be
       incompatible with these options.  Implies arm_v8_2a_i8mm_ok.
  
! 'arm_fp16fml_neon_ok'
!      ARM target supports extensions to generate the 'VFMAL' and 'VFMLS'
       half-precision floating-point instructions available from ARMv8.2-A
       and onwards.  Some multilibs may be incompatible with these
       options.
  
! 'arm_v8_2a_bf16_neon_ok'
       ARM target supports options to generate instructions from ARMv8.2-A
       with the BFloat16 extension (bf16).  Some multilibs may be
       incompatible with these options.
  
! 'arm_v8_2a_i8mm_ok'
       ARM target supports options to generate instructions from ARMv8.2-A
       with the 8-Bit Integer Matrix Multiply extension (i8mm).  Some
       multilibs may be incompatible with these options.
  
! 'arm_v8_1m_mve_ok'
       ARM target supports options to generate instructions from ARMv8.1-M
       with the M-Profile Vector Extension (MVE). Some multilibs may be
       incompatible with these options.
  
! 'arm_v8_1m_mve_fp_ok'
       ARM target supports options to generate instructions from ARMv8.1-M
       with the Half-precision floating-point instructions (HP),
       Floating-point Extension (FP) along with M-Profile Vector Extension
       (MVE). Some multilibs may be incompatible with these options.
  
! 'arm_mve_hw'
       Test system supports executing MVE instructions.
  
! 'arm_v8m_main_cde'
       ARM target supports options to generate instructions from ARMv8-M
       with the Custom Datapath Extension (CDE). Some multilibs may be
       incompatible with these options.
  
! 'arm_v8m_main_cde_fp'
       ARM target supports options to generate instructions from ARMv8-M
       with the Custom Datapath Extension (CDE) and floating-point (VFP).
       Some multilibs may be incompatible with these options.
  
! 'arm_v8_1m_main_cde_mve'
       Arm target supports options to generate instructions from Armv8.1-M
       with the Custom Datapath Extension (CDE) and M-Profile Vector
       Extension (MVE). Some multilibs may be incompatible with these
       options.
  
! 'arm_v8_1m_main_cde_mve_fp'
       Arm target supports options to generate instructions from Armv8.1-M
       with the Custom Datapath Extension (CDE) and M-Profile Vector
       Extension (MVE) with floating-point support.  Some multilibs may be
       incompatible with these options.
  
! 'arm_pacbti_hw'
       Test system supports executing Pointer Authentication and Branch
       Target Identification instructions.
  
! 'arm_prefer_ldrd_strd'
!      ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and
!      'STM' instructions.
  
! 'arm_thumb1_movt_ok'
!      ARM target generates Thumb-1 code for '-mthumb' with 'MOVW' and
!      'MOVT' instructions available.
  
! 'arm_thumb1_cbz_ok'
!      ARM target generates Thumb-1 code for '-mthumb' with 'CBZ' and
!      'CBNZ' instructions available.
  
! 'arm_divmod_simode'
       ARM target for which divmod transform is disabled, if it supports
       hardware div instruction.
  
! 'arm_cmse_ok'
       ARM target supports ARMv8-M Security Extensions, enabled by the
!      '-mcmse' option.
  
! 'arm_cmse_hw'
       Test system supports executing CMSE instructions.
  
! 'arm_coproc1_ok'
!      ARM target supports the following coprocessor instructions: 'CDP',
!      'LDC', 'STC', 'MCR' and 'MRC'.
  
! 'arm_coproc2_ok'
       ARM target supports all the coprocessor instructions also listed as
       supported in *note arm_coproc1_ok:: in addition to the following:
!      'CDP2', 'LDC2', 'LDC2l', 'STC2', 'STC2l', 'MCR2' and 'MRC2'.
  
! 'arm_coproc3_ok'
       ARM target supports all the coprocessor instructions also listed as
       supported in *note arm_coproc2_ok:: in addition the following:
!      'MCRR' and 'MRRC'.
  
! 'arm_coproc4_ok'
       ARM target supports all the coprocessor instructions also listed as
       supported in *note arm_coproc3_ok:: in addition the following:
!      'MCRR2' and 'MRRC2'.
  
! 'arm_simd32_ok'
       ARM Target supports options suitable for accessing the SIMD32
!      intrinsics from 'arm_acle.h'.  Some multilibs may be incompatible
       with these options.
  
! 'arm_sat_ok'
       ARM Target supports options suitable for accessing the saturation
!      intrinsics from 'arm_acle.h'.  Some multilibs may be incompatible
       with these options.
  
! 'arm_dsp_ok'
       ARM Target supports options suitable for accessing the DSP
!      intrinsics from 'arm_acle.h'.  Some multilibs may be incompatible
       with these options.
  
! 'arm_softfp_ok'
!      ARM target supports the '-mfloat-abi=softfp' option.
  
! 'arm_hard_ok'
!      ARM target supports the '-mfloat-abi=hard' option.
  
! 'arm_mve'
       ARM target supports generating MVE instructions.
  
! 'arm_v8_1_lob_ok'
       ARM Target supports executing the Armv8.1-M Mainline Low Overhead
!      Loop instructions 'DLS' and 'LE'.  Some multilibs may be
       incompatible with these options.
  
! 'arm_thumb2_no_arm_v8_1_lob'
       ARM target where Thumb-2 is used without options but does not
       support executing the Armv8.1-M Mainline Low Overhead Loop
!      instructions 'DLS' and 'LE'.
  
! 'arm_thumb2_ok_no_arm_v8_1_lob'
!      ARM target generates Thumb-2 code for '-mthumb' but does not
       support executing the Armv8.1-M Mainline Low Overhead Loop
!      instructions 'DLS' and 'LE'.
  
! 'mbranch_protection_ok'
!      ARM target supporting '-mbranch-protection=standard'.
  
! 'arm_pacbti_hw'
       Test system supports for executing non nop pacbti instructions.
  
  7.2.3.8 AArch64-specific attributes
  ...................................
  
! 'aarch64_asm_<ext>_ok'
!      AArch64 assembler supports the architecture extension 'ext' via the
!      '.arch_extension' pseudo-op.
! 'aarch64_tiny'
       AArch64 target which generates instruction sequences for tiny
       memory model.
! 'aarch64_small'
       AArch64 target which generates instruction sequences for small
       memory model.
! 'aarch64_large'
       AArch64 target which generates instruction sequences for large
       memory model.
! 'aarch64_little_endian'
       AArch64 target which generates instruction sequences for little
       endian.
! 'aarch64_big_endian'
       AArch64 target which generates instruction sequences for big
       endian.
! 'aarch64_small_fpic'
       Binutils installed on test system supports relocation types
       required by -fpic for AArch64 small memory model.
! 'aarch64_sme'
       AArch64 target that generates instructions for SME.
! 'aarch64_sme2'
       AArch64 target that generates instructions for SME2.
! 'aarch64_sve_hw'
       AArch64 target that is able to generate and execute SVE code
       (regardless of whether it does so by default).
! 'aarch64_sve128_hw'
! 'aarch64_sve256_hw'
! 'aarch64_sve512_hw'
! 'aarch64_sve1024_hw'
! 'aarch64_sve2048_hw'
!      Like 'aarch64_sve_hw', but also test for an exact hardware vector
       length.
  
! 'aarch64_fjcvtzs_hw'
       AArch64 target that is able to generate and execute armv8.3-a
       FJCVTZS instruction.
  
  7.2.3.9 LoongArch specific attributes
  .....................................
  
! 'loongarch_sx'
       LoongArch target that generates instructions for SX.
  
! 'loongarch_asx'
       LoongArch target that generates instructions for ASX.
  
! 'loongarch_sx_hw'
       LoongArch target that is able to generate and execute SX code.
  
! 'loongarch_asx_hw'
       LoongArch target that is able to generate and execute ASX code.
  
! 'loongarch_call36_support'
       LoongArch binutils supports call36 relocation.
  
  7.2.3.10 MIPS-specific attributes
  .................................
  
! 'mips64'
       MIPS target supports 64-bit instructions.
  
! 'nomips16'
       MIPS target does not produce MIPS16 code.
  
! 'mips16_attribute'
       MIPS target can generate MIPS16 code.
  
! 'mips_loongson'
       MIPS target is a Loongson-2E or -2F target using an ABI that
       supports the Loongson vector modes.
  
! 'mips_msa'
!      MIPS target supports '-mmsa', MIPS SIMD Architecture (MSA).
  
! 'mips_newabi_large_long_double'
!      MIPS target supports 'long double' larger than 'double' when using
       the new ABI.
  
! 'mpaired_single'
!      MIPS target supports '-mpaired-single'.
  
  7.2.3.11 MSP430-specific attributes
  ...................................
  
! 'msp430_small'
!      MSP430 target has the small memory model enabled ('-msmall').
  
! 'msp430_large'
!      MSP430 target has the large memory model enabled ('-mlarge').
  
  7.2.3.12 PowerPC-specific attributes
  ....................................
  
! 'dfp_hw'
       PowerPC target supports executing hardware DFP instructions.
  
! 'p8vector_hw'
       PowerPC target supports executing VSX instructions (ISA 2.07).
  
! 'powerpc64'
       Test system supports executing 64-bit instructions.
  
! 'powerpc_altivec'
       PowerPC target supports AltiVec.
  
! 'powerpc_altivec_ok'
!      PowerPC target supports '-maltivec'.
  
! 'powerpc_eabi_ok'
!      PowerPC target supports '-meabi'.
  
! 'powerpc_elfv2'
!      PowerPC target supports '-mabi=elfv2'.
  
! 'powerpc_fprs'
       PowerPC target supports floating-point registers.
  
! 'powerpc_hard_double'
       PowerPC target supports hardware double-precision floating-point.
  
! 'powerpc_htm_ok'
!      PowerPC target supports '-mhtm'
  
! 'powerpc_popcntb_ok'
!      PowerPC target supports the 'popcntb' instruction, indicating that
!      this target supports '-mcpu=power5'.
  
! 'powerpc_ppu_ok'
!      PowerPC target supports '-mcpu=cell'.
  
! 'powerpc_spe'
       PowerPC target supports PowerPC SPE.
  
! 'powerpc_spe_nocache'
       Including the options used to compile this particular test, the
       PowerPC target supports PowerPC SPE.
  
! 'powerpc_spu'
       PowerPC target supports PowerPC SPU.
  
! 'powerpc_vsx_ok'
!      PowerPC target supports '-mvsx'.
  
! 'powerpc_405_nocache'
       Including the options used to compile this particular test, the
       PowerPC target supports PowerPC 405.
  
! 'ppc_recip_hw'
       PowerPC target supports executing reciprocal estimate instructions.
  
! 'vmx_hw'
       PowerPC target supports executing AltiVec instructions.
  
! 'vsx_hw'
       PowerPC target supports executing VSX instructions (ISA 2.06).
  
! 'has_arch_pwr5'
!      PowerPC target pre-defines macro _ARCH_PWR5 which means the '-mcpu'
       setting is Power5 or later.
  
! 'has_arch_pwr6'
!      PowerPC target pre-defines macro _ARCH_PWR6 which means the '-mcpu'
       setting is Power6 or later.
  
! 'has_arch_pwr7'
!      PowerPC target pre-defines macro _ARCH_PWR7 which means the '-mcpu'
       setting is Power7 or later.
  
! 'has_arch_pwr8'
!      PowerPC target pre-defines macro _ARCH_PWR8 which means the '-mcpu'
       setting is Power8 or later.
  
! 'has_arch_pwr9'
!      PowerPC target pre-defines macro _ARCH_PWR9 which means the '-mcpu'
       setting is Power9 or later.
  
  7.2.3.13 RISC-V specific attributes
  ...................................
  
! 'rv32'
       Test system has an integer register width of 32 bits.
  
! 'rv64'
       Test system has an integer register width of 64 bits.
  
! 'cv_bi'
       Test system has support for the CORE-V BI extension.
  
  7.2.3.14 CORE-V specific attributes
  ...................................
  
! 'cv_mac'
       Test system has support for the CORE-V MAC extension.
  
! 'cv_alu'
       Test system has support for the CORE-V ALU extension.
  
! 'cv_elw'
       Test system has support for the CORE-V ELW extension.
  
! 'cv_simd'
       Test system has support for the CORE-V SIMD extension.
  
  7.2.3.15 Other hardware attributes
  ..................................
  
! 'autoincdec'
       Target supports autoincrement/decrement addressing.
  
! 'avx'
!      Target supports compiling 'avx' instructions.
  
! 'avx_runtime'
!      Target supports the execution of 'avx' instructions.
  
! 'avx10.1-256'
!      Target supports the execution of 'avx10.1-256' instructions.
  
! 'avx10.1-512'
!      Target supports the execution of 'avx10.1-512' instructions.
  
! 'avx10.1'
!      Target supports the execution of 'avx10.1' instructions.
  
! 'avx2'
!      Target supports compiling 'avx2' instructions.
  
! 'avx2_runtime'
!      Target supports the execution of 'avx2' instructions.
  
! 'avxvnni'
!      Target supports the execution of 'avxvnni' instructions.
  
! 'avx512f'
!      Target supports compiling 'avx512f' instructions.
  
! 'avx512f_runtime'
!      Target supports the execution of 'avx512f' instructions.
  
! 'avx512vp2intersect'
!      Target supports the execution of 'avx512vp2intersect' instructions.
  
! 'avxifma'
!      Target supports the execution of 'avxifma' instructions.
  
! 'avxneconvert'
!      Target supports the execution of 'avxneconvert' instructions.
  
! 'avxvnniint8'
!      Target supports the execution of 'avxvnniint8' instructions.
  
! 'avxvnniint16'
!      Target supports the execution of 'avxvnniint16' instructions.
  
! 'amx_tile'
!      Target supports the execution of 'amx-tile' instructions.
  
! 'amx_int8'
!      Target supports the execution of 'amx-int8' instructions.
  
! 'amx_bf16'
!      Target supports the execution of 'amx-bf16' instructions.
  
! 'amx_complex'
!      Target supports the execution of 'amx-complex' instructions.
  
! 'amx_fp16'
!      Target supports the execution of 'amx-fp16' instructions.
  
! 'cell_hw'
       Test system can execute AltiVec and Cell PPU instructions.
  
! 'clz'
       Target supports a clz optab on int.
  
! 'clzl'
       Target supports a clz optab on long.
  
! 'clzll'
       Target supports a clz optab on long long.
  
! 'ctz'
       Target supports a ctz optab on int.
  
! 'ctzl'
       Target supports a ctz optab on long.
  
! 'ctzll'
       Target supports a ctz optab on long long.
  
! 'cmpccxadd'
!      Target supports the execution of 'cmpccxadd' instructions.
  
! 'coldfire_fpu'
       Target uses a ColdFire FPU.
  
! 'divmod'
       Target supporting hardware divmod insn or divmod libcall.
  
! 'divmod_simode'
       Target supporting hardware divmod insn or divmod libcall for
       SImode.
  
! 'hard_float'
       Target supports FPU instructions.
  
! 'non_strict_align'
       Target does not require strict alignment.
  
! 'opt_mstrict_align'
!      Target supports '-mstrict-align' and '-mno-strict-align'.
  
! 'pie_copyreloc'
       The x86-64 target linker supports PIE with copy reloc.
  
! 'popcount'
       Target supports a popcount optab on int.
  
! 'popcountl'
       Target supports a popcount optab on long.
  
! 'popcountll'
       Target supports a popcount optab on long long.
  
! 'prefetchi'
!      Target supports the execution of 'prefetchi' instructions.
  
! 'raoint'
!      Target supports the execution of 'raoint' instructions.
  
! 'rdrand'
!      Target supports x86 'rdrand' instruction.
  
! 'sha512'
!      Target supports the execution of 'sha512' instructions.
  
! 'sm3'
!      Target supports the execution of 'sm3' instructions.
  
! 'sm4'
!      Target supports the execution of 'sm4' instructions.
  
! 'sqrt_insn'
       Target has a square root instruction that the compiler can
       generate.
  
! 'sse'
!      Target supports compiling 'sse' instructions.
  
! 'sse_runtime'
!      Target supports the execution of 'sse' instructions.
  
! 'sse2'
!      Target supports compiling 'sse2' instructions.
  
! 'sse2_runtime'
!      Target supports the execution of 'sse2' instructions.
  
! 'sync_char_short'
!      Target supports atomic operations on 'char' and 'short'.
  
! 'sync_int_long'
!      Target supports atomic operations on 'int' and 'long'.
  
! 'ultrasparc_hw'
       Test environment appears to run executables on a simulator that
!      accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS'
!      or 'EM_SPARCV9' executables.
  
! 'user_msr'
!      Target supports the execution of 'user_msr' instructions.
  
! 'vect_cmdline_needed'
       Target requires a command line argument to enable a SIMD
       instruction set.
  
! 'xorsign'
       Target supports the xorsign optab expansion.
  
! 'ifn_copysign'
       Target supports the copysign optab expansion of float and double
       for both scalar and vector modes.
  
  7.2.3.16 Environment attributes
  ...............................
  
! 'c'
       The language for the compiler under test is C.
  
! 'c++'
       The language for the compiler under test is C++.
  
! 'c99_runtime'
       Target provides a full C99 runtime.
  
! 'cfi'
       Target supports DWARF CFI directives.
  
! 'correct_iso_cpp_string_wchar_protos'
!      Target 'string.h' and 'wchar.h' headers provide C++ required
!      overloads for 'strchr' etc.  functions.
  
! 'd_runtime'
       Target provides the D runtime.
  
! 'd_runtime_has_std_library'
       Target provides the D standard library (Phobos).
  
! 'dummy_wcsftime'
!      Target uses a dummy 'wcsftime' function that always returns zero.
  
! 'fd_truncate'
       Target can truncate a file from a file descriptor, as used by
!      'libgfortran/io/unix.c:fd_truncate'; i.e. 'ftruncate' or 'chsize'.
  
! 'fenv'
!      Target provides 'fenv.h' include file.
  
! 'fenv_exceptions'
!      Target supports 'fenv.h' with all the standard IEEE exceptions and
       floating-point exceptions are raised by arithmetic operations.
  
! 'fenv_exceptions_dfp'
!      Target supports 'fenv.h' with all the standard IEEE exceptions and
       floating-point exceptions are raised by arithmetic operations for
       decimal floating point.
  
! 'fileio'
!      Target offers such file I/O library functions as 'fopen', 'fclose',
!      'tmpnam', and 'remove'.  This is a link-time requirement for the
       presence of the functions in the library; even if they fail at
       runtime, the requirement is still regarded as satisfied.
  
! 'freestanding'
!      Target is 'freestanding' as defined in section 4 of the C99
       standard.  Effectively, it is a target which supports no extra
       headers or libraries other than what is considered essential.
  
! 'gettimeofday'
!      Target supports 'gettimeofday'.
  
! 'init_priority'
       Target supports constructors with initialization priority
       arguments.
  
! 'inttypes_types'
!      Target has the basic signed and unsigned types in 'inttypes.h'.
       This is for tests that GCC's notions of these types agree with
!      those in the header, as some systems have only 'inttypes.h'.
  
! 'lax_strtofp'
       Target might have errors of a few ULP in string to floating-point
       conversion functions and overflow is not always detected correctly
       by those functions.
  
! 'mempcpy'
!      Target provides 'mempcpy' function.
  
! 'mmap'
!      Target supports 'mmap'.
  
! 'newlib'
       Target supports Newlib.
  
! 'newlib_nano_io'
!      GCC was configured with '--enable-newlib-nano-formatted-io', which
       reduces the code size of Newlib formatted I/O functions.
  
! 'posix_memalign'
!      Target supports 'posix_memalign'.
  
! 'pow10'
!      Target provides 'pow10' function.
  
! 'pthread'
!      Target can compile using 'pthread.h' with no errors or warnings.
  
! 'pthread_h'
!      Target has 'pthread.h'.
  
! 'sockets'
!      Target can compile using 'sys/socket.h' with no errors or warnings.
  
! 'run_expensive_tests'
       Expensive testcases (usually those that consume excessive amounts
       of CPU time) should be run on this target.  This can be enabled by
!      setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a
       non-empty string.
  
! 'simulator'
       Test system runs executables on a simulator (i.e. slowly) rather
       than hardware (i.e. fast).
  
! 'signal'
!      Target has 'signal.h'.
  
! 'stabs'
       Target supports the stabs debugging format.
  
! 'stdint_types'
!      Target has the basic signed and unsigned C types in 'stdint.h'.
!      This will be obsolete when GCC ensures a working 'stdint.h' for all
       targets.
  
! 'stdint_types_mbig_endian'
!      Target accepts the option '-mbig-endian' and 'stdint.h' can be
!      included without error when '-mbig-endian' is passed.
  
! 'stpcpy'
!      Target provides 'stpcpy' function.
  
! 'strndup'
!      Target provides 'strndup' function.
  
! 'sysconf'
!      Target supports 'sysconf'.
  
! 'trampolines'
       Target supports trampolines.
  
! 'two_plus_gigs'
       Target supports linking programs with 2+GiB of data.
  
! 'uclibc'
       Target supports uClibc.
  
! 'unwrapped'
       Target does not use a status wrapper.
  
! 'vxworks_kernel'
       Target is a VxWorks kernel.
  
! 'vxworks_rtp'
       Target is a VxWorks RTP.
  
! 'wchar'
       Target supports wide characters.
  
! 'weak_undefined'
       Target supports weak undefined symbols
  
  7.2.3.17 Other attributes
  .........................
  
! 'R_flag_in_section'
       Target supports the 'R' flag in .section directive in assembly
       inputs.
  
! 'asm_goto_with_outputs'
       Target supports 'asm goto' with outputs.
  
! 'automatic_stack_alignment'
       Target supports automatic stack alignment.
  
! 'branch_cost'
!      Target supports '-branch-cost=N'.
  
! 'const_volatile_readonly_section'
       Target places const volatile variables in readonly sections.
  
! 'cxa_atexit'
!      Target uses '__cxa_atexit'.
  
! 'default_packed'
       Target has packed layout of structure members by default.
  
! 'exceptions'
       Target supports exceptions.
  
! 'exceptions_enabled'
       Target supports exceptions and they are enabled in the current
       testing configuration.
  
! 'fgraphite'
       Target supports Graphite optimizations.
  
! 'fixed_point'
       Target supports fixed-point extension to C.
  
! 'bitint'
       Target supports _BitInt(N).
  
! 'bitint128'
       Target supports _BitInt(128).
  
! 'bitint575'
       Target supports _BitInt(575).
  
! 'bitint65535'
       Target supports _BitInt(65535).
  
! 'fopenacc'
!      Target supports OpenACC via '-fopenacc'.
  
! 'fopenmp'
!      Target supports OpenMP via '-fopenmp'.
  
! 'fpic'
!      Target supports '-fpic' and '-fPIC'.
  
! 'freorder'
!      Target supports '-freorder-blocks-and-partition'.
  
! 'fstack_protector'
!      Target supports '-fstack-protector'.
  
! 'gas'
!      Target uses GNU 'as'.
  
! 'gc_sections'
!      Target supports '--gc-sections'.
  
! 'gld'
!      Target uses GNU 'ld'.
  
! 'keeps_null_pointer_checks'
       Target keeps null pointer checks, either due to the use of
!      '-fno-delete-null-pointer-checks' or hardwired into the target.
  
! 'llvm_binutils'
       Target is using an LLVM assembler and/or linker, instead of GNU
       Binutils.
  
! 'lra'
       Target supports local register allocator (LRA). This must not be
!      called (results in 'ERROR') for targets that don't do register
       allocation, and therefore neither use nor don't use LRA.
  
! 'lto'
       Compiler has been configured to support link-time optimization
       (LTO).
  
! 'lto_incremental'
       Compiler and linker support link-time optimization relocatable
!      linking with '-r' and '-flto' options.
  
! 'thread_fence'
!      Target implements '__atomic_thread_fence' without relying on
!      non-implemented '__sync_synchronize()'.
  
! 'naked_functions'
!      Target supports the 'naked' function attribute.
  
! 'named_sections'
       Target supports named sections.
  
! 'natural_alignment_32'
       Target uses natural alignment (aligned to type size) for types of
       32 bits or less.
  
! 'tail_call'
       Target supports tail-call optimizations.
  
! 'target_natural_alignment_64'
       Target uses natural alignment (aligned to type size) for types of
       64 bits or less.
  
! 'no_alignment_constraints'
       Target defines __BIGGEST_ALIGNMENT__=1.  Hence target imposes no
       alignment constraints.  This is similar, but not necessarily the
!      same as *note default_packed::.  Although 'BIGGEST_FIELD_ALIGNMENT'
!      defaults to 'BIGGEST_ALIGNMENT' for most targets, it is possible
       for a target to set those two with different values and have
       different alignment constraints for aggregate and non-aggregate
       types.
  
! 'noinit'
!      Target supports the 'noinit' variable attribute.
  
! 'nonpic'
       Target does not generate PIC by default.
  
! 'o_flag_in_section'
       Target supports the 'o' flag in .section directive in assembly
       inputs.
  
! 'offload_gcn'
       Target has been configured for OpenACC/OpenMP offloading on AMD
       GCN.
  
! 'persistent'
!      Target supports the 'persistent' variable attribute.
  
! 'pie_enabled'
       Target generates PIE by default.
  
! 'pcc_bitfield_type_matters'
!      Target defines 'PCC_BITFIELD_TYPE_MATTERS'.
  
! 'pe_aligned_commons'
!      Target supports '-mpe-aligned-commons'.
  
! 'pie'
!      Target supports '-pie', '-fpie' and '-fPIE'.
  
! 'linker_plugin'
       Target supports the linker plugin.
  
! 'rdynamic'
!      Target supports '-rdynamic'.
  
! 'scalar_all_fma'
!      Target supports all four fused multiply-add optabs for both 'float'
!      and 'double'.  These optabs are: 'fma_optab', 'fms_optab',
!      'fnma_optab' and 'fnms_optab'.
  
! 'section_anchors'
       Target supports section anchors.
  
! 'short_enums'
       Target defaults to short enums.
  
! 'stack_size'
       Target has limited stack size.  The stack size limit can be
       obtained using the STACK_SIZE macro defined by *note
!      'dg-add-options' feature 'stack_size': stack_size_ao.
  
       Note that for certain targets, stack size limits are relevant for
!      execution only, and therefore considered only if 'dg-do run' is in
       effect, otherwise unlimited.
  
! 'static'
!      Target supports '-static'.
  
! 'static_libgfortran'
!      Target supports statically linking 'libgfortran'.
  
! 'string_merging'
       Target supports merging string constants at link time.
  
! 'strub'
!      Target supports attribute 'strub' for stack scrubbing.
  
! 'ucn'
       Target supports compiling and assembling UCN.
  
! 'ucn_nocache'
       Including the options used to compile this particular test, the
       target supports compiling and assembling UCN.
  
! 'unaligned_stack'
!      Target does not guarantee that its 'STACK_BOUNDARY' is greater than
       or equal to the required vector alignment.
  
! 'vector_alignment_reachable'
       Vector alignment is reachable for types of 32 bits or less.
  
! 'vector_alignment_reachable_for_64bit'
       Vector alignment is reachable for types of 64 bits or less.
  
! 'vma_equals_lma'
       Target generates executable with VMA equal to LMA for .data
       section.
  
! 'wchar_t_char16_t_compatible'
!      Target supports 'wchar_t' that is compatible with 'char16_t'.
  
! 'wchar_t_char32_t_compatible'
!      Target supports 'wchar_t' that is compatible with 'char32_t'.
  
! 'comdat_group'
       Target uses comdat groups.
  
! 'indirect_calls'
       Target supports indirect calls, i.e.  calls where the target is not
       constant.
  
! 'lgccjit'
       Target supports -lgccjit, i.e.  libgccjit.so can be linked into jit
       tests.
  
! '__OPTIMIZE__'
!      Optimizations are enabled ('__OPTIMIZE__') per the current compiler
       flags.
  
! 7.2.3.18 Local to tests in 'gcc.target/i386'
  ............................................
  
! '3dnow'
!      Target supports compiling '3dnow' instructions.
  
! 'aes'
!      Target supports compiling 'aes' instructions.
  
! 'fma4'
!      Target supports compiling 'fma4' instructions.
  
! 'mfentry'
!      Target supports the '-mfentry' option that alters the position of
       profiling calls such that they precede the prologue.
  
! 'ms_hook_prologue'
!      Target supports attribute 'ms_hook_prologue'.
  
! 'pclmul'
!      Target supports compiling 'pclmul' instructions.
  
! 'sse3'
!      Target supports compiling 'sse3' instructions.
  
! 'sse4'
!      Target supports compiling 'sse4' instructions.
  
! 'sse4a'
!      Target supports compiling 'sse4a' instructions.
  
! 'ssse3'
!      Target supports compiling 'ssse3' instructions.
  
! 'vaes'
!      Target supports compiling 'vaes' instructions.
  
! 'vpclmul'
!      Target supports compiling 'vpclmul' instructions.
  
! 'xop'
!      Target supports compiling 'xop' instructions.
  
! 7.2.3.19 Local to tests in 'gcc.test-framework'
  ...............................................
  
! 'no'
       Always returns 0.
  
! 'yes'
       Always returns 1.
  
  
  File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
  
! 7.2.4 Features for 'dg-add-options'
  -----------------------------------
  
! The supported values of FEATURE for directive 'dg-add-options' are:
  
! 'arm_fp'
!      '__ARM_FP' definition.  Only ARM targets support this feature, and
       only then in certain modes; see the *note arm_fp_ok effective
       target keyword: arm_fp_ok.
  
! 'arm_fp_dp'
!      '__ARM_FP' definition with double-precision support.  Only ARM
       targets support this feature, and only then in certain modes; see
       the *note arm_fp_dp_ok effective target keyword: arm_fp_dp_ok.
  
! 'arm_neon'
       NEON support.  Only ARM targets support this feature, and only then
       in certain modes; see the *note arm_neon_ok effective target
       keyword: arm_neon_ok.
  
! 'arm_fp16'
       VFP half-precision floating point support.  This does not select
       the FP16 format; for that, use *note arm_fp16_ieee: arm_fp16_ieee.
       or *note arm_fp16_alternative: arm_fp16_alternative. instead.  This
--- 5073,6470 ----
       using only two-vector permutes, regardless of how long the sequence
       is.
  
! ‘vect_perm3_int’
!      Like ‘vect_perm3_byte’, but for 32-bit elements.
  
! ‘vect_perm3_short’
!      Like ‘vect_perm3_byte’, but for 16-bit elements.
  
! ‘vect_shift’
       Target supports a hardware vector shift operation.
  
! ‘vect_unaligned_possible’
       Target prefers vectors to have an alignment greater than element
       alignment, but also allows unaligned vector accesses in some
       circumstances.
  
! ‘vect_variable_length’
       Target has variable-length vectors.
  
! ‘vect64’
       Target supports vectors of 64 bits.
  
! ‘vect32’
       Target supports vectors of 32 bits.
  
! ‘vect_widen_sum_hi_to_si’
!      Target supports a vector widening summation of ‘short’ operands
!      into ‘int’ results, or can promote (unpack) from ‘short’ to ‘int’.
  
! ‘vect_widen_sum_qi_to_hi’
!      Target supports a vector widening summation of ‘char’ operands into
!      ‘short’ results, or can promote (unpack) from ‘char’ to ‘short’.
  
! ‘vect_widen_sum_qi_to_si’
!      Target supports a vector widening summation of ‘char’ operands into
!      ‘int’ results.
  
! ‘vect_widen_mult_qi_to_hi’
!      Target supports a vector widening multiplication of ‘char’ operands
!      into ‘short’ results, or can promote (unpack) from ‘char’ to
!      ‘short’ and perform non-widening multiplication of ‘short’.
  
! ‘vect_widen_mult_hi_to_si’
!      Target supports a vector widening multiplication of ‘short’
!      operands into ‘int’ results, or can promote (unpack) from ‘short’
!      to ‘int’ and perform non-widening multiplication of ‘int’.
  
! ‘vect_widen_mult_si_to_di_pattern’
!      Target supports a vector widening multiplication of ‘int’ operands
!      into ‘long’ results.
  
! ‘vect_sdot_qi’
!      Target supports a vector dot-product of ‘signed char’.
  
! ‘vect_udot_qi’
!      Target supports a vector dot-product of ‘unsigned char’.
  
! ‘vect_usdot_qi’
       Target supports a vector dot-product where one operand of the
!      multiply is ‘signed char’ and the other of ‘unsigned char’.
  
! ‘vect_sdot_hi’
!      Target supports a vector dot-product of ‘signed short’.
  
! ‘vect_udot_hi’
!      Target supports a vector dot-product of ‘unsigned short’.
  
! ‘vect_pack_trunc’
!      Target supports a vector demotion (packing) of ‘short’ to ‘char’
!      and from ‘int’ to ‘short’ using modulo arithmetic.
  
! ‘vect_unpack’
!      Target supports a vector promotion (unpacking) of ‘char’ to ‘short’
!      and from ‘char’ to ‘int’.
  
! ‘vect_intfloat_cvt’
!      Target supports conversion from ‘signed int’ to ‘float’.
  
! ‘vect_uintfloat_cvt’
!      Target supports conversion from ‘unsigned int’ to ‘float’.
  
! ‘vect_floatint_cvt’
!      Target supports conversion from ‘float’ to ‘signed int’.
  
! ‘vect_floatuint_cvt’
!      Target supports conversion from ‘float’ to ‘unsigned int’.
  
! ‘vect_intdouble_cvt’
!      Target supports conversion from ‘signed int’ to ‘double’.
  
! ‘vect_doubleint_cvt’
!      Target supports conversion from ‘double’ to ‘signed int’.
  
! ‘vect_max_reduc’
       Target supports max reduction for vectors.
  
! ‘vect_sizes_16B_8B’
       Target supports 16- and 8-bytes vectors.
  
! ‘vect_sizes_32B_16B’
       Target supports 32- and 16-bytes vectors.
  
! ‘vect_logical_reduc’
       Target supports AND, IOR and XOR reduction on vectors.
  
! ‘vect_fold_extract_last’
!      Target supports the ‘fold_extract_last’ optab.
  
! ‘vect_len_load_store’
!      Target supports the ‘len_load’ and ‘len_store’ optabs.
  
! ‘vect_partial_vectors_usage_1’
       Target supports loop vectorization with partial vectors and
!      ‘vect-partial-vector-usage’ is set to 1.
  
! ‘vect_partial_vectors_usage_2’
       Target supports loop vectorization with partial vectors and
!      ‘vect-partial-vector-usage’ is set to 2.
  
! ‘vect_partial_vectors’
       Target supports loop vectorization with partial vectors and
!      ‘vect-partial-vector-usage’ is nonzero.
  
! ‘vect_slp_v2qi_store_align’
       Target supports vectorization of 2-byte char stores with 2-byte
!      aligned address at plain ‘-O2’.
  
! ‘vect_slp_v4qi_store_align’
       Target supports vectorization of 4-byte char stores with 4-byte
!      aligned address at plain ‘-O2’.
  
! ‘vect_slp_v4qi_store_unalign’
       Target supports vectorization of 4-byte char stores with unaligned
!      address at plain ‘-O2’.
  
! ‘struct_4char_block_move’
       Target supports block move for 8-byte aligned 4-byte size struct
       initialization.
  
! ‘vect_slp_v4qi_store_unalign_1’
       Target supports vectorization of 4-byte char stores with unaligned
!      address or store them with constant pool at plain ‘-O2’.
  
! ‘struct_8char_block_move’
       Target supports block move for 8-byte aligned 8-byte size struct
       initialization.
  
! ‘vect_slp_v8qi_store_unalign_1’
       Target supports vectorization of 8-byte char stores with unaligned
!      address or store them with constant pool at plain ‘-O2’.
  
! ‘struct_16char_block_move’
       Target supports block move for 8-byte aligned 16-byte size struct
       initialization.
  
! ‘vect_slp_v16qi_store_unalign_1’
       Target supports vectorization of 16-byte char stores with unaligned
!      address or store them with constant pool at plain ‘-O2’.
  
! ‘vect_slp_v2hi_store_align’
       Target supports vectorization of 4-byte short stores with 4-byte
!      aligned addressat plain ‘-O2’.
  
! ‘vect_slp_v2hi_store_unalign’
       Target supports vectorization of 4-byte short stores with unaligned
!      address at plain ‘-O2’.
  
! ‘vect_slp_v4hi_store_unalign’
       Target supports vectorization of 8-byte short stores with unaligned
!      address at plain ‘-O2’.
  
! ‘vect_slp_v2si_store_align’
       Target supports vectorization of 8-byte int stores with 8-byte
!      aligned address at plain ‘-O2’.
  
! ‘vect_slp_v4si_store_unalign’
       Target supports vectorization of 16-byte int stores with unaligned
!      address at plain ‘-O2’.
  
  7.2.3.5 Thread Local Storage attributes
  .......................................
  
! ‘tls’
       Target supports thread-local storage.
  
! ‘tls_native’
       Target supports native (rather than emulated) thread-local storage.
  
! ‘tls_runtime’
       Test system supports executing TLS executables.
  
  7.2.3.6 Decimal floating point attributes
  .........................................
  
! ‘dfp’
       Targets supports compiling decimal floating point extension to C.
  
! ‘dfp_nocache’
       Including the options used to compile this particular test, the
       target supports compiling decimal floating point extension to C.
  
! ‘dfprt’
       Test system can execute decimal floating point tests.
  
! ‘dfprt_nocache’
       Including the options used to compile this particular test, the
       test system can execute decimal floating point tests.
  
! ‘hard_dfp’
       Target generates decimal floating point instructions with current
       options.
  
! ‘dfp_bid’
       Target uses the BID format for decimal floating point.
  
  7.2.3.7 ARM-specific attributes
  ...............................
  
! ‘arm32’
       ARM target generates 32-bit code.
  
! ‘arm_little_endian’
       ARM target that generates little-endian code.
  
! ‘arm_eabi’
       ARM target adheres to the ABI for the ARM Architecture.
  
! ‘arm_fp_ok’
!      ARM target defines ‘__ARM_FP’ using ‘-mfloat-abi=softfp’ or
       equivalent options.  Some multilibs may be incompatible with these
       options.
  
! ‘arm_fp_dp_ok’
!      ARM target defines ‘__ARM_FP’ with double-precision support using
!      ‘-mfloat-abi=softfp’ or equivalent options.  Some multilibs may be
       incompatible with these options.
  
! ‘arm_hf_eabi’
       ARM target adheres to the VFP and Advanced SIMD Register Arguments
       variant of the ABI for the ARM Architecture (as selected with
!      ‘-mfloat-abi=hard’).
  
! ‘arm_softfloat’
       ARM target uses emulated floating point operations.
  
! ‘arm_hard_vfp_ok’
!      ARM target supports ‘-mfpu=vfp -mfloat-abi=hard’.  Some multilibs
       may be incompatible with these options.
  
! ‘arm_iwmmxt_ok’
!      ARM target supports ‘-mcpu=iwmmxt’.  Some multilibs may be
       incompatible with this option.
  
! ‘arm_neon’
       ARM target supports generating NEON instructions.
  
! ‘arm_tune_string_ops_prefer_neon’
       Test CPU tune supports inlining string operations with NEON
       instructions.
  
! ‘arm_neon_hw’
       Test system supports executing NEON instructions.
  
! ‘arm_neonv2_hw’
       Test system supports executing NEON v2 instructions.
  
! ‘arm_neon_ok’
!      ARM Target supports ‘-mfpu=neon -mfloat-abi=softfp’ or compatible
       options.  Some multilibs may be incompatible with these options.
  
! ‘arm_neon_ok_no_float_abi’
!      ARM Target supports NEON with ‘-mfpu=neon’, but without any
       -mfloat-abi= option.  Some multilibs may be incompatible with this
       option.
  
! ‘arm_neonv2_ok’
!      ARM Target supports ‘-mfpu=neon-vfpv4 -mfloat-abi=softfp’ or
       compatible options.  Some multilibs may be incompatible with these
       options.
  
! ‘arm_fp16_ok’
       Target supports options to generate VFP half-precision
       floating-point instructions.  Some multilibs may be incompatible
       with these options.  This test is valid for ARM only.
  
! ‘arm_fp16_hw’
       Target supports executing VFP half-precision floating-point
       instructions.  This test is valid for ARM only.
  
! ‘arm_neon_fp16_ok’
!      ARM Target supports ‘-mfpu=neon-fp16 -mfloat-abi=softfp’ or
!      compatible options, including ‘-mfp16-format=ieee’ if necessary to
!      obtain the ‘__fp16’ type.  Some multilibs may be incompatible with
       these options.
  
! ‘arm_neon_fp16_hw’
       Test system supports executing Neon half-precision float
       instructions.  (Implies previous.)
  
! ‘arm_fp16_alternative_ok’
       ARM target supports the ARM FP16 alternative format.  Some
       multilibs may be incompatible with the options needed.
  
! ‘arm_fp16_none_ok’
       ARM target supports specifying none as the ARM FP16 format.
  
! ‘arm_thumb1_ok’
!      ARM target generates Thumb-1 code for ‘-mthumb’.
  
! ‘arm_thumb2_ok’
!      ARM target generates Thumb-2 code for ‘-mthumb’.
  
! ‘arm_nothumb’
       ARM target that is not using Thumb.
  
! ‘arm_vfp_ok’
!      ARM target supports ‘-mfpu=vfp -mfloat-abi=softfp’.  Some multilibs
       may be incompatible with these options.
  
! ‘arm_vfp3_ok’
!      ARM target supports ‘-mfpu=vfp3 -mfloat-abi=softfp’.  Some
       multilibs may be incompatible with these options.
  
! ‘arm_arch_v8a_hard_ok’
!      The compiler is targeting ‘arm*-*-*’ and can compile and assemble
!      code using the options ‘-march=armv8-a -mfpu=neon-fp-armv8
!      -mfloat-abi=hard’.  This is not enough to guarantee that linking
       works.
  
! ‘arm_arch_v8a_hard_multilib’
!      The compiler is targeting ‘arm*-*-*’ and can build programs using
!      the options ‘-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard’.
       The target can also run the resulting binaries.
  
! ‘arm_v8_vfp_ok’
!      ARM target supports ‘-mfpu=fp-armv8 -mfloat-abi=softfp’.  Some
       multilibs may be incompatible with these options.
  
! ‘arm_v8_neon_ok’
!      ARM target supports ‘-mfpu=neon-fp-armv8 -mfloat-abi=softfp’.  Some
       multilibs may be incompatible with these options.
  
! ‘arm_v8_1a_neon_ok’
       ARM target supports options to generate ARMv8.1-A Adv.SIMD
       instructions.  Some multilibs may be incompatible with these
       options.
  
! ‘arm_v8_1a_neon_hw’
       ARM target supports executing ARMv8.1-A Adv.SIMD instructions.
       Some multilibs may be incompatible with the options needed.
       Implies arm_v8_1a_neon_ok.
  
! ‘arm_acq_rel’
       ARM target supports acquire-release instructions.
  
! ‘arm_v8_2a_fp16_scalar_ok’
       ARM target supports options to generate instructions for ARMv8.2-A
       and scalar instructions from the FP16 extension.  Some multilibs
       may be incompatible with these options.
  
! ‘arm_v8_2a_fp16_scalar_hw’
       ARM target supports executing instructions for ARMv8.2-A and scalar
       instructions from the FP16 extension.  Some multilibs may be
       incompatible with these options.  Implies arm_v8_2a_fp16_neon_ok.
  
! ‘arm_v8_2a_fp16_neon_ok’
       ARM target supports options to generate instructions from ARMv8.2-A
       with the FP16 extension.  Some multilibs may be incompatible with
       these options.  Implies arm_v8_2a_fp16_scalar_ok.
  
! ‘arm_v8_2a_fp16_neon_hw’
       ARM target supports executing instructions from ARMv8.2-A with the
       FP16 extension.  Some multilibs may be incompatible with these
       options.  Implies arm_v8_2a_fp16_neon_ok and
       arm_v8_2a_fp16_scalar_hw.
  
! ‘arm_v8_2a_dotprod_neon_ok’
       ARM target supports options to generate instructions from ARMv8.2-A
       with the Dot Product extension.  Some multilibs may be incompatible
       with these options.
  
! ‘arm_v8_2a_dotprod_neon_hw’
       ARM target supports executing instructions from ARMv8.2-A with the
       Dot Product extension.  Some multilibs may be incompatible with
       these options.  Implies arm_v8_2a_dotprod_neon_ok.
  
! ‘arm_v8_2a_i8mm_neon_hw’
       ARM target supports executing instructions from ARMv8.2-A with the
       8-bit Matrix Multiply extension.  Some multilibs may be
       incompatible with these options.  Implies arm_v8_2a_i8mm_ok.
  
! ‘arm_fp16fml_neon_ok’
!      ARM target supports extensions to generate the ‘VFMAL’ and ‘VFMLS’
       half-precision floating-point instructions available from ARMv8.2-A
       and onwards.  Some multilibs may be incompatible with these
       options.
  
! ‘arm_v8_2a_bf16_neon_ok’
       ARM target supports options to generate instructions from ARMv8.2-A
       with the BFloat16 extension (bf16).  Some multilibs may be
       incompatible with these options.
  
! ‘arm_v8_2a_i8mm_ok’
       ARM target supports options to generate instructions from ARMv8.2-A
       with the 8-Bit Integer Matrix Multiply extension (i8mm).  Some
       multilibs may be incompatible with these options.
  
! ‘arm_v8_1m_mve_ok’
       ARM target supports options to generate instructions from ARMv8.1-M
       with the M-Profile Vector Extension (MVE). Some multilibs may be
       incompatible with these options.
  
! ‘arm_v8_1m_mve_fp_ok’
       ARM target supports options to generate instructions from ARMv8.1-M
       with the Half-precision floating-point instructions (HP),
       Floating-point Extension (FP) along with M-Profile Vector Extension
       (MVE). Some multilibs may be incompatible with these options.
  
! ‘arm_mve_hw’
       Test system supports executing MVE instructions.
  
! ‘arm_v8m_main_cde’
       ARM target supports options to generate instructions from ARMv8-M
       with the Custom Datapath Extension (CDE). Some multilibs may be
       incompatible with these options.
  
! ‘arm_v8m_main_cde_fp’
       ARM target supports options to generate instructions from ARMv8-M
       with the Custom Datapath Extension (CDE) and floating-point (VFP).
       Some multilibs may be incompatible with these options.
  
! ‘arm_v8_1m_main_cde_mve’
       Arm target supports options to generate instructions from Armv8.1-M
       with the Custom Datapath Extension (CDE) and M-Profile Vector
       Extension (MVE). Some multilibs may be incompatible with these
       options.
  
! ‘arm_v8_1m_main_cde_mve_fp’
       Arm target supports options to generate instructions from Armv8.1-M
       with the Custom Datapath Extension (CDE) and M-Profile Vector
       Extension (MVE) with floating-point support.  Some multilibs may be
       incompatible with these options.
  
! ‘arm_pacbti_hw’
       Test system supports executing Pointer Authentication and Branch
       Target Identification instructions.
  
! ‘arm_prefer_ldrd_strd’
!      ARM target prefers ‘LDRD’ and ‘STRD’ instructions over ‘LDM’ and
!      ‘STM’ instructions.
  
! ‘arm_thumb1_movt_ok’
!      ARM target generates Thumb-1 code for ‘-mthumb’ with ‘MOVW’ and
!      ‘MOVT’ instructions available.
  
! ‘arm_thumb1_cbz_ok’
!      ARM target generates Thumb-1 code for ‘-mthumb’ with ‘CBZ’ and
!      ‘CBNZ’ instructions available.
  
! ‘arm_divmod_simode’
       ARM target for which divmod transform is disabled, if it supports
       hardware div instruction.
  
! ‘arm_cmse_ok’
       ARM target supports ARMv8-M Security Extensions, enabled by the
!      ‘-mcmse’ option.
  
! ‘arm_cmse_hw’
       Test system supports executing CMSE instructions.
  
! ‘arm_coproc1_ok’
!      ARM target supports the following coprocessor instructions: ‘CDP’,
!      ‘LDC’, ‘STC’, ‘MCR’ and ‘MRC’.
  
! ‘arm_coproc2_ok’
       ARM target supports all the coprocessor instructions also listed as
       supported in *note arm_coproc1_ok:: in addition to the following:
!      ‘CDP2’, ‘LDC2’, ‘LDC2l’, ‘STC2’, ‘STC2l’, ‘MCR2’ and ‘MRC2’.
  
! ‘arm_coproc3_ok’
       ARM target supports all the coprocessor instructions also listed as
       supported in *note arm_coproc2_ok:: in addition the following:
!      ‘MCRR’ and ‘MRRC’.
  
! ‘arm_coproc4_ok’
       ARM target supports all the coprocessor instructions also listed as
       supported in *note arm_coproc3_ok:: in addition the following:
!      ‘MCRR2’ and ‘MRRC2’.
  
! ‘arm_simd32_ok’
       ARM Target supports options suitable for accessing the SIMD32
!      intrinsics from ‘arm_acle.h’.  Some multilibs may be incompatible
       with these options.
  
! ‘arm_sat_ok’
       ARM Target supports options suitable for accessing the saturation
!      intrinsics from ‘arm_acle.h’.  Some multilibs may be incompatible
       with these options.
  
! ‘arm_dsp_ok’
       ARM Target supports options suitable for accessing the DSP
!      intrinsics from ‘arm_acle.h’.  Some multilibs may be incompatible
       with these options.
  
! ‘arm_softfp_ok’
!      ARM target supports the ‘-mfloat-abi=softfp’ option.
  
! ‘arm_hard_ok’
!      ARM target supports the ‘-mfloat-abi=hard’ option.
  
! ‘arm_mve’
       ARM target supports generating MVE instructions.
  
! ‘arm_v8_1_lob_ok’
       ARM Target supports executing the Armv8.1-M Mainline Low Overhead
!      Loop instructions ‘DLS’ and ‘LE’.  Some multilibs may be
       incompatible with these options.
  
! ‘arm_thumb2_no_arm_v8_1_lob’
       ARM target where Thumb-2 is used without options but does not
       support executing the Armv8.1-M Mainline Low Overhead Loop
!      instructions ‘DLS’ and ‘LE’.
  
! ‘arm_thumb2_ok_no_arm_v8_1_lob’
!      ARM target generates Thumb-2 code for ‘-mthumb’ but does not
       support executing the Armv8.1-M Mainline Low Overhead Loop
!      instructions ‘DLS’ and ‘LE’.
  
! ‘mbranch_protection_ok’
!      ARM target supporting ‘-mbranch-protection=standard’.
  
! ‘arm_pacbti_hw’
       Test system supports for executing non nop pacbti instructions.
  
  7.2.3.8 AArch64-specific attributes
  ...................................
  
! ‘aarch64_asm_<ext>_ok’
!      AArch64 assembler supports the architecture extension ‘ext’ via the
!      ‘.arch_extension’ pseudo-op.
! ‘aarch64_tiny’
       AArch64 target which generates instruction sequences for tiny
       memory model.
! ‘aarch64_small’
       AArch64 target which generates instruction sequences for small
       memory model.
! ‘aarch64_large’
       AArch64 target which generates instruction sequences for large
       memory model.
! ‘aarch64_little_endian’
       AArch64 target which generates instruction sequences for little
       endian.
! ‘aarch64_big_endian’
       AArch64 target which generates instruction sequences for big
       endian.
! ‘aarch64_small_fpic’
       Binutils installed on test system supports relocation types
       required by -fpic for AArch64 small memory model.
! ‘aarch64_sme’
       AArch64 target that generates instructions for SME.
! ‘aarch64_sme2’
       AArch64 target that generates instructions for SME2.
! ‘aarch64_sve_hw’
       AArch64 target that is able to generate and execute SVE code
       (regardless of whether it does so by default).
! ‘aarch64_sve128_hw’
! ‘aarch64_sve256_hw’
! ‘aarch64_sve512_hw’
! ‘aarch64_sve1024_hw’
! ‘aarch64_sve2048_hw’
!      Like ‘aarch64_sve_hw’, but also test for an exact hardware vector
       length.
+ ‘aarch64_sme_hw’
+      AArch64 target that is able to generate and execute SME code
+      (regardless of whether it does so by default).
  
! ‘aarch64_fjcvtzs_hw’
       AArch64 target that is able to generate and execute armv8.3-a
       FJCVTZS instruction.
  
  7.2.3.9 LoongArch specific attributes
  .....................................
  
! ‘loongarch_sx’
       LoongArch target that generates instructions for SX.
  
! ‘loongarch_asx’
       LoongArch target that generates instructions for ASX.
  
! ‘loongarch_sx_hw’
       LoongArch target that is able to generate and execute SX code.
  
! ‘loongarch_asx_hw’
       LoongArch target that is able to generate and execute ASX code.
  
! ‘loongarch_call36_support’
       LoongArch binutils supports call36 relocation.
  
  7.2.3.10 MIPS-specific attributes
  .................................
  
! ‘mips64’
       MIPS target supports 64-bit instructions.
  
! ‘nomips16’
       MIPS target does not produce MIPS16 code.
  
! ‘mips16_attribute’
       MIPS target can generate MIPS16 code.
  
! ‘mips_loongson’
       MIPS target is a Loongson-2E or -2F target using an ABI that
       supports the Loongson vector modes.
  
! ‘mips_msa’
!      MIPS target supports ‘-mmsa’, MIPS SIMD Architecture (MSA).
  
! ‘mips_newabi_large_long_double’
!      MIPS target supports ‘long double’ larger than ‘double’ when using
       the new ABI.
  
! ‘mpaired_single’
!      MIPS target supports ‘-mpaired-single’.
  
  7.2.3.11 MSP430-specific attributes
  ...................................
  
! ‘msp430_small’
!      MSP430 target has the small memory model enabled (‘-msmall’).
  
! ‘msp430_large’
!      MSP430 target has the large memory model enabled (‘-mlarge’).
  
  7.2.3.12 PowerPC-specific attributes
  ....................................
  
! ‘dfp_hw’
       PowerPC target supports executing hardware DFP instructions.
  
! ‘p8vector_hw’
       PowerPC target supports executing VSX instructions (ISA 2.07).
  
! ‘powerpc64’
       Test system supports executing 64-bit instructions.
  
! ‘powerpc_altivec’
       PowerPC target supports AltiVec.
  
! ‘powerpc_altivec_ok’
!      PowerPC target supports ‘-maltivec’.
  
! ‘powerpc_eabi_ok’
!      PowerPC target supports ‘-meabi’.
  
! ‘powerpc_elfv2’
!      PowerPC target supports ‘-mabi=elfv2’.
  
! ‘powerpc_fprs’
       PowerPC target supports floating-point registers.
  
! ‘powerpc_hard_double’
       PowerPC target supports hardware double-precision floating-point.
  
! ‘powerpc_htm_ok’
!      PowerPC target supports ‘-mhtm’
  
! ‘powerpc_popcntb_ok’
!      PowerPC target supports the ‘popcntb’ instruction, indicating that
!      this target supports ‘-mcpu=power5’.
  
! ‘powerpc_ppu_ok’
!      PowerPC target supports ‘-mcpu=cell’.
  
! ‘powerpc_spe’
       PowerPC target supports PowerPC SPE.
  
! ‘powerpc_spe_nocache’
       Including the options used to compile this particular test, the
       PowerPC target supports PowerPC SPE.
  
! ‘powerpc_spu’
       PowerPC target supports PowerPC SPU.
  
! ‘powerpc_vsx_ok’
!      PowerPC target supports ‘-mvsx’.
  
! ‘powerpc_405_nocache’
       Including the options used to compile this particular test, the
       PowerPC target supports PowerPC 405.
  
! ‘ppc_recip_hw’
       PowerPC target supports executing reciprocal estimate instructions.
  
! ‘vmx_hw’
       PowerPC target supports executing AltiVec instructions.
  
! ‘vsx_hw’
       PowerPC target supports executing VSX instructions (ISA 2.06).
  
! ‘has_arch_pwr5’
!      PowerPC target pre-defines macro _ARCH_PWR5 which means the ‘-mcpu’
       setting is Power5 or later.
  
! ‘has_arch_pwr6’
!      PowerPC target pre-defines macro _ARCH_PWR6 which means the ‘-mcpu’
       setting is Power6 or later.
  
! ‘has_arch_pwr7’
!      PowerPC target pre-defines macro _ARCH_PWR7 which means the ‘-mcpu’
       setting is Power7 or later.
  
! ‘has_arch_pwr8’
!      PowerPC target pre-defines macro _ARCH_PWR8 which means the ‘-mcpu’
       setting is Power8 or later.
  
! ‘has_arch_pwr9’
!      PowerPC target pre-defines macro _ARCH_PWR9 which means the ‘-mcpu’
       setting is Power9 or later.
  
  7.2.3.13 RISC-V specific attributes
  ...................................
  
! ‘rv32’
       Test system has an integer register width of 32 bits.
  
! ‘rv64’
       Test system has an integer register width of 64 bits.
  
! ‘cv_bi’
       Test system has support for the CORE-V BI extension.
  
  7.2.3.14 CORE-V specific attributes
  ...................................
  
! ‘cv_mac’
       Test system has support for the CORE-V MAC extension.
  
! ‘cv_alu’
       Test system has support for the CORE-V ALU extension.
  
! ‘cv_elw’
       Test system has support for the CORE-V ELW extension.
  
! ‘cv_simd’
       Test system has support for the CORE-V SIMD extension.
  
  7.2.3.15 Other hardware attributes
  ..................................
  
! ‘autoincdec’
       Target supports autoincrement/decrement addressing.
  
! ‘avx’
!      Target supports compiling ‘avx’ instructions.
  
! ‘avx_runtime’
!      Target supports the execution of ‘avx’ instructions.
  
! ‘avx10.1-256’
!      Target supports the execution of ‘avx10.1-256’ instructions.
  
! ‘avx10.1-512’
!      Target supports the execution of ‘avx10.1-512’ instructions.
  
! ‘avx10.1’
!      Target supports the execution of ‘avx10.1’ instructions.
  
! ‘avx2’
!      Target supports compiling ‘avx2’ instructions.
  
! ‘avx2_runtime’
!      Target supports the execution of ‘avx2’ instructions.
  
! ‘avxvnni’
!      Target supports the execution of ‘avxvnni’ instructions.
  
! ‘avx512f’
!      Target supports compiling ‘avx512f’ instructions.
  
! ‘avx512f_runtime’
!      Target supports the execution of ‘avx512f’ instructions.
  
! ‘avx512vp2intersect’
!      Target supports the execution of ‘avx512vp2intersect’ instructions.
  
! ‘avxifma’
!      Target supports the execution of ‘avxifma’ instructions.
  
! ‘avxneconvert’
!      Target supports the execution of ‘avxneconvert’ instructions.
  
! ‘avxvnniint8’
!      Target supports the execution of ‘avxvnniint8’ instructions.
  
! ‘avxvnniint16’
!      Target supports the execution of ‘avxvnniint16’ instructions.
  
! ‘amx_tile’
!      Target supports the execution of ‘amx-tile’ instructions.
  
! ‘amx_int8’
!      Target supports the execution of ‘amx-int8’ instructions.
  
! ‘amx_bf16’
!      Target supports the execution of ‘amx-bf16’ instructions.
  
! ‘amx_complex’
!      Target supports the execution of ‘amx-complex’ instructions.
  
! ‘amx_fp16’
!      Target supports the execution of ‘amx-fp16’ instructions.
  
! ‘cell_hw’
       Test system can execute AltiVec and Cell PPU instructions.
  
! ‘clz’
       Target supports a clz optab on int.
  
! ‘clzl’
       Target supports a clz optab on long.
  
! ‘clzll’
       Target supports a clz optab on long long.
  
! ‘ctz’
       Target supports a ctz optab on int.
  
! ‘ctzl’
       Target supports a ctz optab on long.
  
! ‘ctzll’
       Target supports a ctz optab on long long.
  
! ‘cmpccxadd’
!      Target supports the execution of ‘cmpccxadd’ instructions.
  
! ‘coldfire_fpu’
       Target uses a ColdFire FPU.
  
! ‘divmod’
       Target supporting hardware divmod insn or divmod libcall.
  
! ‘divmod_simode’
       Target supporting hardware divmod insn or divmod libcall for
       SImode.
  
! ‘hard_float’
       Target supports FPU instructions.
  
! ‘non_strict_align’
       Target does not require strict alignment.
  
! ‘opt_mstrict_align’
!      Target supports ‘-mstrict-align’ and ‘-mno-strict-align’.
  
! ‘pie_copyreloc’
       The x86-64 target linker supports PIE with copy reloc.
  
! ‘popcount’
       Target supports a popcount optab on int.
  
! ‘popcountl’
       Target supports a popcount optab on long.
  
! ‘popcountll’
       Target supports a popcount optab on long long.
  
! ‘prefetchi’
!      Target supports the execution of ‘prefetchi’ instructions.
  
! ‘raoint’
!      Target supports the execution of ‘raoint’ instructions.
  
! ‘rdrand’
!      Target supports x86 ‘rdrand’ instruction.
  
! ‘sha512’
!      Target supports the execution of ‘sha512’ instructions.
  
! ‘sm3’
!      Target supports the execution of ‘sm3’ instructions.
  
! ‘sm4’
!      Target supports the execution of ‘sm4’ instructions.
  
! ‘sqrt_insn’
       Target has a square root instruction that the compiler can
       generate.
  
! ‘sse’
!      Target supports compiling ‘sse’ instructions.
  
! ‘sse_runtime’
!      Target supports the execution of ‘sse’ instructions.
  
! ‘sse2’
!      Target supports compiling ‘sse2’ instructions.
  
! ‘sse2_runtime’
!      Target supports the execution of ‘sse2’ instructions.
  
! ‘sync_char_short’
!      Target supports atomic operations on ‘char’ and ‘short’.
  
! ‘sync_int_long’
!      Target supports atomic operations on ‘int’ and ‘long’.
  
! ‘ultrasparc_hw’
       Test environment appears to run executables on a simulator that
!      accepts only ‘EM_SPARC’ executables and chokes on ‘EM_SPARC32PLUS’
!      or ‘EM_SPARCV9’ executables.
  
! ‘user_msr’
!      Target supports the execution of ‘user_msr’ instructions.
  
! ‘vect_cmdline_needed’
       Target requires a command line argument to enable a SIMD
       instruction set.
  
! ‘xorsign’
       Target supports the xorsign optab expansion.
  
! ‘ifn_copysign’
       Target supports the copysign optab expansion of float and double
       for both scalar and vector modes.
  
  7.2.3.16 Environment attributes
  ...............................
  
! ‘c’
       The language for the compiler under test is C.
  
! ‘c++’
       The language for the compiler under test is C++.
  
! ‘c99_runtime’
       Target provides a full C99 runtime.
  
! ‘cfi’
       Target supports DWARF CFI directives.
  
! ‘correct_iso_cpp_string_wchar_protos’
!      Target ‘string.h’ and ‘wchar.h’ headers provide C++ required
!      overloads for ‘strchr’ etc.  functions.
  
! ‘d_runtime’
       Target provides the D runtime.
  
! ‘d_runtime_has_std_library’
       Target provides the D standard library (Phobos).
  
! ‘dummy_wcsftime’
!      Target uses a dummy ‘wcsftime’ function that always returns zero.
  
! ‘fd_truncate’
       Target can truncate a file from a file descriptor, as used by
!      ‘libgfortran/io/unix.c:fd_truncate’; i.e. ‘ftruncate’ or ‘chsize’.
  
! ‘fenv’
!      Target provides ‘fenv.h’ include file.
  
! ‘fenv_exceptions’
!      Target supports ‘fenv.h’ with all the standard IEEE exceptions and
       floating-point exceptions are raised by arithmetic operations.
  
! ‘fenv_exceptions_dfp’
!      Target supports ‘fenv.h’ with all the standard IEEE exceptions and
       floating-point exceptions are raised by arithmetic operations for
       decimal floating point.
  
! ‘fileio’
!      Target offers such file I/O library functions as ‘fopen’, ‘fclose’,
!      ‘tmpnam’, and ‘remove’.  This is a link-time requirement for the
       presence of the functions in the library; even if they fail at
       runtime, the requirement is still regarded as satisfied.
  
! ‘freestanding’
!      Target is ‘freestanding’ as defined in section 4 of the C99
       standard.  Effectively, it is a target which supports no extra
       headers or libraries other than what is considered essential.
  
! ‘gettimeofday’
!      Target supports ‘gettimeofday’.
  
! ‘init_priority’
       Target supports constructors with initialization priority
       arguments.
  
! ‘inttypes_types’
!      Target has the basic signed and unsigned types in ‘inttypes.h’.
       This is for tests that GCC's notions of these types agree with
!      those in the header, as some systems have only ‘inttypes.h’.
  
! ‘lax_strtofp’
       Target might have errors of a few ULP in string to floating-point
       conversion functions and overflow is not always detected correctly
       by those functions.
  
! ‘mempcpy’
!      Target provides ‘mempcpy’ function.
  
! ‘mmap’
!      Target supports ‘mmap’.
  
! ‘newlib’
       Target supports Newlib.
  
! ‘newlib_nano_io’
!      GCC was configured with ‘--enable-newlib-nano-formatted-io’, which
       reduces the code size of Newlib formatted I/O functions.
  
! ‘posix_memalign’
!      Target supports ‘posix_memalign’.
  
! ‘pow10’
!      Target provides ‘pow10’ function.
  
! ‘pthread’
!      Target can compile using ‘pthread.h’ with no errors or warnings.
  
! ‘pthread_h’
!      Target has ‘pthread.h’.
  
! ‘sockets’
!      Target can compile using ‘sys/socket.h’ with no errors or warnings.
  
! ‘run_expensive_tests’
       Expensive testcases (usually those that consume excessive amounts
       of CPU time) should be run on this target.  This can be enabled by
!      setting the ‘GCC_TEST_RUN_EXPENSIVE’ environment variable to a
       non-empty string.
  
! ‘simulator’
       Test system runs executables on a simulator (i.e. slowly) rather
       than hardware (i.e. fast).
  
! ‘signal’
!      Target has ‘signal.h’.
  
! ‘stabs’
       Target supports the stabs debugging format.
  
! ‘stdint_types’
!      Target has the basic signed and unsigned C types in ‘stdint.h’.
!      This will be obsolete when GCC ensures a working ‘stdint.h’ for all
       targets.
  
! ‘stdint_types_mbig_endian’
!      Target accepts the option ‘-mbig-endian’ and ‘stdint.h’ can be
!      included without error when ‘-mbig-endian’ is passed.
  
! ‘stpcpy’
!      Target provides ‘stpcpy’ function.
  
! ‘strndup’
!      Target provides ‘strndup’ function.
  
! ‘sysconf’
!      Target supports ‘sysconf’.
  
! ‘trampolines’
       Target supports trampolines.
  
! ‘two_plus_gigs’
       Target supports linking programs with 2+GiB of data.
  
! ‘uclibc’
       Target supports uClibc.
  
! ‘unwrapped’
       Target does not use a status wrapper.
  
! ‘vxworks_kernel’
       Target is a VxWorks kernel.
  
! ‘vxworks_rtp’
       Target is a VxWorks RTP.
  
! ‘wchar’
       Target supports wide characters.
  
! ‘weak_undefined’
       Target supports weak undefined symbols
  
  7.2.3.17 Other attributes
  .........................
  
! ‘R_flag_in_section’
       Target supports the 'R' flag in .section directive in assembly
       inputs.
  
! ‘asm_goto_with_outputs’
       Target supports 'asm goto' with outputs.
  
! ‘automatic_stack_alignment’
       Target supports automatic stack alignment.
  
! ‘branch_cost’
!      Target supports ‘-branch-cost=N’.
  
! ‘const_volatile_readonly_section’
       Target places const volatile variables in readonly sections.
  
! ‘cxa_atexit’
!      Target uses ‘__cxa_atexit’.
  
! ‘default_packed’
       Target has packed layout of structure members by default.
  
! ‘exceptions’
       Target supports exceptions.
  
! ‘exceptions_enabled’
       Target supports exceptions and they are enabled in the current
       testing configuration.
  
! ‘fgraphite’
       Target supports Graphite optimizations.
  
! ‘fixed_point’
       Target supports fixed-point extension to C.
  
! ‘bitint’
       Target supports _BitInt(N).
  
! ‘bitint128’
       Target supports _BitInt(128).
  
! ‘bitint575’
       Target supports _BitInt(575).
  
! ‘bitint65535’
       Target supports _BitInt(65535).
  
! ‘fopenacc’
!      Target supports OpenACC via ‘-fopenacc’.
  
! ‘fopenmp’
!      Target supports OpenMP via ‘-fopenmp’.
  
! ‘fpic’
!      Target supports ‘-fpic’ and ‘-fPIC’.
  
! ‘freorder’
!      Target supports ‘-freorder-blocks-and-partition’.
  
! ‘fstack_protector’
!      Target supports ‘-fstack-protector’.
  
! ‘gas’
!      Target uses GNU ‘as’.
  
! ‘gc_sections’
!      Target supports ‘--gc-sections’.
  
! ‘gld’
!      Target uses GNU ‘ld’.
  
! ‘keeps_null_pointer_checks’
       Target keeps null pointer checks, either due to the use of
!      ‘-fno-delete-null-pointer-checks’ or hardwired into the target.
  
! ‘llvm_binutils’
       Target is using an LLVM assembler and/or linker, instead of GNU
       Binutils.
  
! ‘lra’
       Target supports local register allocator (LRA). This must not be
!      called (results in ‘ERROR’) for targets that don't do register
       allocation, and therefore neither use nor don't use LRA.
  
! ‘lto’
       Compiler has been configured to support link-time optimization
       (LTO).
  
! ‘lto_incremental’
       Compiler and linker support link-time optimization relocatable
!      linking with ‘-r’ and ‘-flto’ options.
  
! ‘thread_fence’
!      Target implements ‘__atomic_thread_fence’ without relying on
!      non-implemented ‘__sync_synchronize()’.
  
! ‘naked_functions’
!      Target supports the ‘naked’ function attribute.
  
! ‘named_sections’
       Target supports named sections.
  
! ‘natural_alignment_32’
       Target uses natural alignment (aligned to type size) for types of
       32 bits or less.
  
! ‘tail_call’
       Target supports tail-call optimizations.
  
! ‘target_natural_alignment_64’
       Target uses natural alignment (aligned to type size) for types of
       64 bits or less.
  
! ‘no_alignment_constraints’
       Target defines __BIGGEST_ALIGNMENT__=1.  Hence target imposes no
       alignment constraints.  This is similar, but not necessarily the
!      same as *note default_packed::.  Although ‘BIGGEST_FIELD_ALIGNMENT’
!      defaults to ‘BIGGEST_ALIGNMENT’ for most targets, it is possible
       for a target to set those two with different values and have
       different alignment constraints for aggregate and non-aggregate
       types.
  
! ‘noinit’
!      Target supports the ‘noinit’ variable attribute.
  
! ‘nonpic’
       Target does not generate PIC by default.
  
! ‘o_flag_in_section’
       Target supports the 'o' flag in .section directive in assembly
       inputs.
  
! ‘offload_gcn’
       Target has been configured for OpenACC/OpenMP offloading on AMD
       GCN.
  
! ‘persistent’
!      Target supports the ‘persistent’ variable attribute.
  
! ‘pie_enabled’
       Target generates PIE by default.
  
! ‘pcc_bitfield_type_matters’
!      Target defines ‘PCC_BITFIELD_TYPE_MATTERS’.
  
! ‘pe_aligned_commons’
!      Target supports ‘-mpe-aligned-commons’.
  
! ‘pie’
!      Target supports ‘-pie’, ‘-fpie’ and ‘-fPIE’.
  
! ‘linker_plugin’
       Target supports the linker plugin.
  
! ‘rdynamic’
!      Target supports ‘-rdynamic’.
  
! ‘scalar_all_fma’
!      Target supports all four fused multiply-add optabs for both ‘float’
!      and ‘double’.  These optabs are: ‘fma_optab’, ‘fms_optab’,
!      ‘fnma_optab’ and ‘fnms_optab’.
  
! ‘section_anchors’
       Target supports section anchors.
  
! ‘short_enums’
       Target defaults to short enums.
  
! ‘stack_size’
       Target has limited stack size.  The stack size limit can be
       obtained using the STACK_SIZE macro defined by *note
!      ‘dg-add-options’ feature ‘stack_size’: stack_size_ao.
  
       Note that for certain targets, stack size limits are relevant for
!      execution only, and therefore considered only if ‘dg-do run’ is in
       effect, otherwise unlimited.
  
! ‘static’
!      Target supports ‘-static’.
  
! ‘static_libgfortran’
!      Target supports statically linking ‘libgfortran’.
  
! ‘string_merging’
       Target supports merging string constants at link time.
  
! ‘strub’
!      Target supports attribute ‘strub’ for stack scrubbing.
  
! ‘ucn’
       Target supports compiling and assembling UCN.
  
! ‘ucn_nocache’
       Including the options used to compile this particular test, the
       target supports compiling and assembling UCN.
  
! ‘unaligned_stack’
!      Target does not guarantee that its ‘STACK_BOUNDARY’ is greater than
       or equal to the required vector alignment.
  
! ‘vector_alignment_reachable’
       Vector alignment is reachable for types of 32 bits or less.
  
! ‘vector_alignment_reachable_for_64bit’
       Vector alignment is reachable for types of 64 bits or less.
  
! ‘vma_equals_lma’
       Target generates executable with VMA equal to LMA for .data
       section.
  
! ‘wchar_t_char16_t_compatible’
!      Target supports ‘wchar_t’ that is compatible with ‘char16_t’.
  
! ‘wchar_t_char32_t_compatible’
!      Target supports ‘wchar_t’ that is compatible with ‘char32_t’.
  
! ‘comdat_group’
       Target uses comdat groups.
  
! ‘indirect_calls’
       Target supports indirect calls, i.e.  calls where the target is not
       constant.
  
! ‘lgccjit’
       Target supports -lgccjit, i.e.  libgccjit.so can be linked into jit
       tests.
  
! ‘__OPTIMIZE__’
!      Optimizations are enabled (‘__OPTIMIZE__’) per the current compiler
       flags.
  
! 7.2.3.18 Local to tests in ‘gcc.target/i386’
  ............................................
  
! ‘3dnow’
!      Target supports compiling ‘3dnow’ instructions.
  
! ‘aes’
!      Target supports compiling ‘aes’ instructions.
  
! ‘fma4’
!      Target supports compiling ‘fma4’ instructions.
  
! ‘mfentry’
!      Target supports the ‘-mfentry’ option that alters the position of
       profiling calls such that they precede the prologue.
  
! ‘ms_hook_prologue’
!      Target supports attribute ‘ms_hook_prologue’.
  
! ‘pclmul’
!      Target supports compiling ‘pclmul’ instructions.
  
! ‘sse3’
!      Target supports compiling ‘sse3’ instructions.
  
! ‘sse4’
!      Target supports compiling ‘sse4’ instructions.
  
! ‘sse4a’
!      Target supports compiling ‘sse4a’ instructions.
  
! ‘ssse3’
!      Target supports compiling ‘ssse3’ instructions.
  
! ‘vaes’
!      Target supports compiling ‘vaes’ instructions.
  
! ‘vpclmul’
!      Target supports compiling ‘vpclmul’ instructions.
  
! ‘xop’
!      Target supports compiling ‘xop’ instructions.
  
! 7.2.3.19 Local to tests in ‘gcc.test-framework’
  ...............................................
  
! ‘no’
       Always returns 0.
  
! ‘yes’
       Always returns 1.
  
  
  File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
  
! 7.2.4 Features for ‘dg-add-options’
  -----------------------------------
  
! The supported values of FEATURE for directive ‘dg-add-options’ are:
  
! ‘arm_fp’
!      ‘__ARM_FP’ definition.  Only ARM targets support this feature, and
       only then in certain modes; see the *note arm_fp_ok effective
       target keyword: arm_fp_ok.
  
! ‘arm_fp_dp’
!      ‘__ARM_FP’ definition with double-precision support.  Only ARM
       targets support this feature, and only then in certain modes; see
       the *note arm_fp_dp_ok effective target keyword: arm_fp_dp_ok.
  
! ‘arm_neon’
       NEON support.  Only ARM targets support this feature, and only then
       in certain modes; see the *note arm_neon_ok effective target
       keyword: arm_neon_ok.
  
! ‘arm_fp16’
       VFP half-precision floating point support.  This does not select
       the FP16 format; for that, use *note arm_fp16_ieee: arm_fp16_ieee.
       or *note arm_fp16_alternative: arm_fp16_alternative. instead.  This
*************** The supported values of FEATURE for dire
*** 6470,6737 ****
       modes; see the *note arm_fp16_ok effective target keyword:
       arm_fp16_ok.
  
! 'arm_fp16_ieee'
       ARM IEEE 754-2008 format VFP half-precision floating point support.
       This feature is only supported by ARM targets and then only in
       certain modes; see the *note arm_fp16_ok effective target keyword:
       arm_fp16_ok.
  
! 'arm_fp16_alternative'
       ARM Alternative format VFP half-precision floating point support.
       This feature is only supported by ARM targets and then only in
       certain modes; see the *note arm_fp16_ok effective target keyword:
       arm_fp16_ok.
  
! 'arm_neon_fp16'
       NEON and half-precision floating point support.  Only ARM targets
       support this feature, and only then in certain modes; see the *note
       arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok.
  
! 'arm_vfp3'
       arm vfp3 floating point support; see the *note arm_vfp3_ok
       effective target keyword: arm_vfp3_ok.
  
! 'arm_arch_v8a_hard'
       Add options for ARMv8-A and the hard-float variant of the AAPCS, if
       this is supported by the compiler; see the *note
       arm_arch_v8a_hard_ok: arm_arch_v8a_hard_ok. effective target
       keyword.
  
! 'arm_v8_1a_neon'
       Add options for ARMv8.1-A with Adv.SIMD support, if this is
       supported by the target; see the *note arm_v8_1a_neon_ok:
       arm_v8_1a_neon_ok. effective target keyword.
  
! 'arm_v8_2a_fp16_scalar'
       Add options for ARMv8.2-A with scalar FP16 support, if this is
       supported by the target; see the *note arm_v8_2a_fp16_scalar_ok:
       arm_v8_2a_fp16_scalar_ok. effective target keyword.
  
! 'arm_v8_2a_fp16_neon'
       Add options for ARMv8.2-A with Adv.SIMD FP16 support, if this is
       supported by the target; see the *note arm_v8_2a_fp16_neon_ok:
       arm_v8_2a_fp16_neon_ok. effective target keyword.
  
! 'arm_v8_2a_dotprod_neon'
       Add options for ARMv8.2-A with Adv.SIMD Dot Product support, if
       this is supported by the target; see the *note
       arm_v8_2a_dotprod_neon_ok:: effective target keyword.
  
! 'arm_fp16fml_neon'
!      Add options to enable generation of the 'VFMAL' and 'VFMSL'
       instructions, if this is supported by the target; see the *note
       arm_fp16fml_neon_ok:: effective target keyword.
  
! 'arm_dsp'
       Add options for ARM DSP intrinsics support, if this is supported by
       the target; see the *note arm_dsp_ok effective target keyword:
       arm_dsp_ok.
  
! 'bind_pic_locally'
       Add the target-specific flags needed to enable functions to bind
       locally when using pic/PIC passes in the testsuite.
  
! 'floatN'
!      Add the target-specific flags needed to use the '_FloatN' type.
  
! 'floatNx'
!      Add the target-specific flags needed to use the '_FloatNx' type.
  
! 'ieee'
       Add the target-specific flags needed to enable full IEEE compliance
       mode.
  
! 'mips16_attribute'
!      'mips16' function attributes.  Only MIPS targets support this
       feature, and only then in certain modes.
  
! 'stack_size'
       Add the flags needed to define macro STACK_SIZE and set it to the
!      stack size limit associated with the *note 'stack_size' effective
       target: stack_size_et.
  
! 'sqrt_insn'
       Add the target-specific flags needed to enable hardware square root
       instructions, if any.
  
! 'tls'
       Add the target-specific flags needed to use thread-local storage.
  
! 'vect_early_break'
       Add the target-specific flags needed to enable early break
       vectorization for a target, if any.  This requires the target to
!      have an implementation of the 'cbranch' optab.
  
! 'weak_undefined'
       Add the flags needed to enable support for weak undefined symbols.
  
  
  File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
  
! 7.2.5 Variants of 'dg-require-SUPPORT'
  --------------------------------------
  
! A few of the 'dg-require' directives take arguments.
  
! 'dg-require-iconv CODESET'
       Skip the test if the target does not support iconv.  CODESET is the
       codeset to convert to.
  
! 'dg-require-profiling PROFOPT'
       Skip the test if the target does not support profiling with option
       PROFOPT.
  
! 'dg-require-stack-check CHECK'
!      Skip the test if the target does not support the '-fstack-check'
!      option.  If CHECK is '""', support for '-fstack-check' is checked,
!      for '-fstack-check=("CHECK")' otherwise.
  
! 'dg-require-stack-size SIZE'
       Skip the test if the target does not support a stack size of SIZE.
  
! 'dg-require-visibility VIS'
!      Skip the test if the target does not support the 'visibility'
!      attribute.  If VIS is '""', support for 'visibility("hidden")' is
!      checked, for 'visibility("VIS")' otherwise.
  
!  The original 'dg-require' directives were defined before there was
  support for effective-target keywords.  The directives that do not take
  arguments could be replaced with effective-target keywords.
  
! 'dg-require-alias ""'
!      Skip the test if the target does not support the 'alias' attribute.
  
! 'dg-require-ascii-locale ""'
       Skip the test if the host does not support an ASCII locale.
  
! 'dg-require-compat-dfp ""'
!      Skip this test unless both compilers in a 'compat' testsuite
       support decimal floating point.
  
! 'dg-require-cxa-atexit ""'
!      Skip the test if the target does not support '__cxa_atexit'.  This
!      is equivalent to 'dg-require-effective-target cxa_atexit'.
  
! 'dg-require-dll ""'
       Skip the test if the target does not support DLL attributes.
  
! 'dg-require-dot ""'
!      Skip the test if the host does not have 'dot'.
  
! 'dg-require-fork ""'
!      Skip the test if the target does not support 'fork'.
  
! 'dg-require-gc-sections ""'
       Skip the test if the target's linker does not support the
!      '--gc-sections' flags.  This is equivalent to
!      'dg-require-effective-target gc-sections'.
  
! 'dg-require-host-local ""'
       Skip the test if the host is remote, rather than the same as the
       build system.  Some tests are incompatible with DejaGnu's handling
       of remote hosts, which involves copying the source file to the host
!      and compiling it with a relative path and "'-o a.out'".
  
! 'dg-require-linker-plugin ""'
       Skip the test is the target does not support the linker plugin.
!      This is equivalent to 'dg-require-effective-target linker_plugin'.
  
! 'dg-require-mkfifo ""'
!      Skip the test if the target does not support 'mkfifo'.
  
! 'dg-require-named-sections ""'
       Skip the test is the target does not support named sections.  This
!      is equivalent to 'dg-require-effective-target named_sections'.
  
! 'dg-require-weak ""'
       Skip the test if the target does not support weak symbols.
  
! 'dg-require-weak-override ""'
       Skip the test if the target does not support overriding weak
       symbols.
  
  
  File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
  
! 7.2.6 Commands for use in 'dg-final'
  ------------------------------------
  
  The GCC testsuite defines the following directives to be used within
! 'dg-final'.
  
  7.2.6.1 Scan a particular file
  ..............................
  
! 'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
       Passes if REGEXP matches text in FILENAME.
! 'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
       Passes if REGEXP does not match text in FILENAME.
! 'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
       Passes if REGEXP matches in Fortran module MODULE.
! 'dg-check-dot FILENAME'
!      Passes if FILENAME is a valid '.dot' file (by running 'dot -Tpng'
       on it, and verifying the exit code is 0).
! 'scan-sarif-file REGEXP [{ target/xfail SELECTOR }]'
       Passes if REGEXP matches text in the file generated by
!      '-fdiagnostics-format=sarif-file'.
! 'scan-sarif-file-not REGEXP [{ target/xfail SELECTOR }]'
       Passes if REGEXP does not match text in the file generated by
!      '-fdiagnostics-format=sarif-file'.
  
  7.2.6.2 Scan the assembly output
  ................................
  
! 'scan-assembler REGEX [{ target/xfail SELECTOR }]'
       Passes if REGEX matches text in the test's assembler output,
       excluding LTO sections.
  
! 'scan-raw-assembler REGEX [{ target/xfail SELECTOR }]'
       Passes if REGEX matches text in the test's assembler output,
       including LTO sections.
  
! 'scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
       Passes if REGEX does not match text in the test's assembler output,
       excluding LTO sections.
  
! 'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
       Passes if REGEX is matched exactly NUM times in the test's
       assembler output, excluding LTO sections.
  
! 'scan-assembler-bound REGEX CMP NUM [{ target/xfail SELECTOR }]'
       Passes if REGEX is matched CMP NUM times in the test's assembler
       output, excluding LTO sections.  CMP is a comparitor.
  
! 'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
       Passes if REGEX matches text in the test's demangled assembler
       output, excluding LTO sections.
  
! 'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
       Passes if REGEX does not match text in the test's demangled
       assembler output, excluding LTO sections.
  
! 'scan-assembler-symbol-section FUNCTIONS SECTION [{ target/xfail SELECTOR }]'
       Passes if FUNCTIONS are all in SECTION.  The caller needs to allow
!      for 'USER_LABEL_PREFIX' and different section name conventions.
  
! 'scan-symbol-section FILENAME FUNCTIONS SECTION [{ target/xfail SELECTOR }]'
       Passes if FUNCTIONS are all in SECTIONin FILENAME.  The same
!      caveats as for 'scan-assembler-symbol-section' apply.
  
! 'scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
       Passes if SYMBOL is defined as a hidden symbol in the test's
       assembly output.
  
! 'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
       Passes if SYMBOL is not defined as a hidden symbol in the test's
       assembly output.
  
! 'check-function-bodies PREFIX TERMINATOR [OPTIONS [{ target/xfail SELECTOR } [MATCHED]]]'
       Looks through the source file for comments that give the expected
       assembly output for selected functions.  Each line of expected
       output starts with the prefix string PREFIX and the expected output
       for a function as a whole is followed by a line that starts with
       the string TERMINATOR.  Specifying an empty terminator is
!      equivalent to specifying '"*/"'.
  
       OPTIONS, if specified, is a list of regular expressions, each of
       which matches a full command-line option.  A non-empty list
--- 6472,6739 ----
       modes; see the *note arm_fp16_ok effective target keyword:
       arm_fp16_ok.
  
! ‘arm_fp16_ieee’
       ARM IEEE 754-2008 format VFP half-precision floating point support.
       This feature is only supported by ARM targets and then only in
       certain modes; see the *note arm_fp16_ok effective target keyword:
       arm_fp16_ok.
  
! ‘arm_fp16_alternative’
       ARM Alternative format VFP half-precision floating point support.
       This feature is only supported by ARM targets and then only in
       certain modes; see the *note arm_fp16_ok effective target keyword:
       arm_fp16_ok.
  
! ‘arm_neon_fp16’
       NEON and half-precision floating point support.  Only ARM targets
       support this feature, and only then in certain modes; see the *note
       arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok.
  
! ‘arm_vfp3’
       arm vfp3 floating point support; see the *note arm_vfp3_ok
       effective target keyword: arm_vfp3_ok.
  
! ‘arm_arch_v8a_hard’
       Add options for ARMv8-A and the hard-float variant of the AAPCS, if
       this is supported by the compiler; see the *note
       arm_arch_v8a_hard_ok: arm_arch_v8a_hard_ok. effective target
       keyword.
  
! ‘arm_v8_1a_neon’
       Add options for ARMv8.1-A with Adv.SIMD support, if this is
       supported by the target; see the *note arm_v8_1a_neon_ok:
       arm_v8_1a_neon_ok. effective target keyword.
  
! ‘arm_v8_2a_fp16_scalar’
       Add options for ARMv8.2-A with scalar FP16 support, if this is
       supported by the target; see the *note arm_v8_2a_fp16_scalar_ok:
       arm_v8_2a_fp16_scalar_ok. effective target keyword.
  
! ‘arm_v8_2a_fp16_neon’
       Add options for ARMv8.2-A with Adv.SIMD FP16 support, if this is
       supported by the target; see the *note arm_v8_2a_fp16_neon_ok:
       arm_v8_2a_fp16_neon_ok. effective target keyword.
  
! ‘arm_v8_2a_dotprod_neon’
       Add options for ARMv8.2-A with Adv.SIMD Dot Product support, if
       this is supported by the target; see the *note
       arm_v8_2a_dotprod_neon_ok:: effective target keyword.
  
! ‘arm_fp16fml_neon’
!      Add options to enable generation of the ‘VFMAL’ and ‘VFMSL’
       instructions, if this is supported by the target; see the *note
       arm_fp16fml_neon_ok:: effective target keyword.
  
! ‘arm_dsp’
       Add options for ARM DSP intrinsics support, if this is supported by
       the target; see the *note arm_dsp_ok effective target keyword:
       arm_dsp_ok.
  
! ‘bind_pic_locally’
       Add the target-specific flags needed to enable functions to bind
       locally when using pic/PIC passes in the testsuite.
  
! ‘floatN’
!      Add the target-specific flags needed to use the ‘_FloatN’ type.
  
! ‘floatNx’
!      Add the target-specific flags needed to use the ‘_FloatNx’ type.
  
! ‘ieee’
       Add the target-specific flags needed to enable full IEEE compliance
       mode.
  
! ‘mips16_attribute’
!      ‘mips16’ function attributes.  Only MIPS targets support this
       feature, and only then in certain modes.
  
! ‘stack_size’
       Add the flags needed to define macro STACK_SIZE and set it to the
!      stack size limit associated with the *note ‘stack_size’ effective
       target: stack_size_et.
  
! ‘sqrt_insn’
       Add the target-specific flags needed to enable hardware square root
       instructions, if any.
  
! ‘tls’
       Add the target-specific flags needed to use thread-local storage.
  
! ‘vect_early_break’
       Add the target-specific flags needed to enable early break
       vectorization for a target, if any.  This requires the target to
!      have an implementation of the ‘cbranch’ optab.
  
! ‘weak_undefined’
       Add the flags needed to enable support for weak undefined symbols.
  
  
  File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
  
! 7.2.5 Variants of ‘dg-require-SUPPORT’
  --------------------------------------
  
! A few of the ‘dg-require’ directives take arguments.
  
! ‘dg-require-iconv CODESET’
       Skip the test if the target does not support iconv.  CODESET is the
       codeset to convert to.
  
! ‘dg-require-profiling PROFOPT’
       Skip the test if the target does not support profiling with option
       PROFOPT.
  
! ‘dg-require-stack-check CHECK’
!      Skip the test if the target does not support the ‘-fstack-check’
!      option.  If CHECK is ‘""’, support for ‘-fstack-check’ is checked,
!      for ‘-fstack-check=("CHECK")’ otherwise.
  
! ‘dg-require-stack-size SIZE’
       Skip the test if the target does not support a stack size of SIZE.
  
! ‘dg-require-visibility VIS’
!      Skip the test if the target does not support the ‘visibility’
!      attribute.  If VIS is ‘""’, support for ‘visibility("hidden")’ is
!      checked, for ‘visibility("VIS")’ otherwise.
  
!  The original ‘dg-require’ directives were defined before there was
  support for effective-target keywords.  The directives that do not take
  arguments could be replaced with effective-target keywords.
  
! ‘dg-require-alias ""’
!      Skip the test if the target does not support the ‘alias’ attribute.
  
! ‘dg-require-ascii-locale ""’
       Skip the test if the host does not support an ASCII locale.
  
! ‘dg-require-compat-dfp ""’
!      Skip this test unless both compilers in a ‘compat’ testsuite
       support decimal floating point.
  
! ‘dg-require-cxa-atexit ""’
!      Skip the test if the target does not support ‘__cxa_atexit’.  This
!      is equivalent to ‘dg-require-effective-target cxa_atexit’.
  
! ‘dg-require-dll ""’
       Skip the test if the target does not support DLL attributes.
  
! ‘dg-require-dot ""’
!      Skip the test if the host does not have ‘dot’.
  
! ‘dg-require-fork ""’
!      Skip the test if the target does not support ‘fork’.
  
! ‘dg-require-gc-sections ""’
       Skip the test if the target's linker does not support the
!      ‘--gc-sections’ flags.  This is equivalent to
!      ‘dg-require-effective-target gc-sections’.
  
! ‘dg-require-host-local ""’
       Skip the test if the host is remote, rather than the same as the
       build system.  Some tests are incompatible with DejaGnu's handling
       of remote hosts, which involves copying the source file to the host
!      and compiling it with a relative path and "‘-o a.out’".
  
! ‘dg-require-linker-plugin ""’
       Skip the test is the target does not support the linker plugin.
!      This is equivalent to ‘dg-require-effective-target linker_plugin’.
  
! ‘dg-require-mkfifo ""’
!      Skip the test if the target does not support ‘mkfifo’.
  
! ‘dg-require-named-sections ""’
       Skip the test is the target does not support named sections.  This
!      is equivalent to ‘dg-require-effective-target named_sections’.
  
! ‘dg-require-weak ""’
       Skip the test if the target does not support weak symbols.
  
! ‘dg-require-weak-override ""’
       Skip the test if the target does not support overriding weak
       symbols.
  
  
  File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
  
! 7.2.6 Commands for use in ‘dg-final’
  ------------------------------------
  
  The GCC testsuite defines the following directives to be used within
! ‘dg-final’.
  
  7.2.6.1 Scan a particular file
  ..............................
  
! ‘scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]’
       Passes if REGEXP matches text in FILENAME.
! ‘scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]’
       Passes if REGEXP does not match text in FILENAME.
! ‘scan-module MODULE REGEXP [{ target/xfail SELECTOR }]’
       Passes if REGEXP matches in Fortran module MODULE.
! ‘dg-check-dot FILENAME’
!      Passes if FILENAME is a valid ‘.dot’ file (by running ‘dot -Tpng’
       on it, and verifying the exit code is 0).
! ‘scan-sarif-file REGEXP [{ target/xfail SELECTOR }]’
       Passes if REGEXP matches text in the file generated by
!      ‘-fdiagnostics-format=sarif-file’.
! ‘scan-sarif-file-not REGEXP [{ target/xfail SELECTOR }]’
       Passes if REGEXP does not match text in the file generated by
!      ‘-fdiagnostics-format=sarif-file’.
  
  7.2.6.2 Scan the assembly output
  ................................
  
! ‘scan-assembler REGEX [{ target/xfail SELECTOR }]’
       Passes if REGEX matches text in the test's assembler output,
       excluding LTO sections.
  
! ‘scan-raw-assembler REGEX [{ target/xfail SELECTOR }]’
       Passes if REGEX matches text in the test's assembler output,
       including LTO sections.
  
! ‘scan-assembler-not REGEX [{ target/xfail SELECTOR }]’
       Passes if REGEX does not match text in the test's assembler output,
       excluding LTO sections.
  
! ‘scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]’
       Passes if REGEX is matched exactly NUM times in the test's
       assembler output, excluding LTO sections.
  
! ‘scan-assembler-bound REGEX CMP NUM [{ target/xfail SELECTOR }]’
       Passes if REGEX is matched CMP NUM times in the test's assembler
       output, excluding LTO sections.  CMP is a comparitor.
  
! ‘scan-assembler-dem REGEX [{ target/xfail SELECTOR }]’
       Passes if REGEX matches text in the test's demangled assembler
       output, excluding LTO sections.
  
! ‘scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]’
       Passes if REGEX does not match text in the test's demangled
       assembler output, excluding LTO sections.
  
! ‘scan-assembler-symbol-section FUNCTIONS SECTION [{ target/xfail SELECTOR }]’
       Passes if FUNCTIONS are all in SECTION.  The caller needs to allow
!      for ‘USER_LABEL_PREFIX’ and different section name conventions.
  
! ‘scan-symbol-section FILENAME FUNCTIONS SECTION [{ target/xfail SELECTOR }]’
       Passes if FUNCTIONS are all in SECTIONin FILENAME.  The same
!      caveats as for ‘scan-assembler-symbol-section’ apply.
  
! ‘scan-hidden SYMBOL [{ target/xfail SELECTOR }]’
       Passes if SYMBOL is defined as a hidden symbol in the test's
       assembly output.
  
! ‘scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]’
       Passes if SYMBOL is not defined as a hidden symbol in the test's
       assembly output.
  
! ‘check-function-bodies PREFIX TERMINATOR [OPTIONS [{ target/xfail SELECTOR } [MATCHED]]]’
       Looks through the source file for comments that give the expected
       assembly output for selected functions.  Each line of expected
       output starts with the prefix string PREFIX and the expected output
       for a function as a whole is followed by a line that starts with
       the string TERMINATOR.  Specifying an empty terminator is
!      equivalent to specifying ‘"*/"’.
  
       OPTIONS, if specified, is a list of regular expressions, each of
       which matches a full command-line option.  A non-empty list
*************** The GCC testsuite defines the following
*** 6749,6765 ****
       both cases, whitespace after PREFIX is not significant.
  
       Depending on the configuration (see
!      'configure_check-function-bodies' in
!      'gcc/testsuite/lib/scanasm.exp'), the test may discard from the
!      compiler's assembly output directives such as '.cfi_startproc',
!      local label definitions such as '.LFB0', and more.  This behavior
       can be overridden using the optional MATCHED argument, which
       specifies a regexp for lines that should not be discarded in this
       way.
  
       The test then matches the result against the expected output for a
       function as a single regular expression.  This means that later
!      lines can use backslashes to refer back to '(...)' captures on
       earlier lines.  For example:
  
            /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
--- 6751,6767 ----
       both cases, whitespace after PREFIX is not significant.
  
       Depending on the configuration (see
!      ‘configure_check-function-bodies’ in
!      ‘gcc/testsuite/lib/scanasm.exp’), the test may discard from the
!      compiler's assembly output directives such as ‘.cfi_startproc’,
!      local label definitions such as ‘.LFB0’, and more.  This behavior
       can be overridden using the optional MATCHED argument, which
       specifies a regexp for lines that should not be discarded in this
       way.
  
       The test then matches the result against the expected output for a
       function as a single regular expression.  This means that later
!      lines can use backslashes to refer back to ‘(...)’ captures on
       earlier lines.  For example:
  
            /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
*************** The GCC testsuite defines the following
*** 6780,6792 ****
            */
            svint8_t add_b0_s8_m (...) { ... }
  
!      checks whether the implementations of 'add_w0_s8_m' and
!      'add_b0_s8_m' match the regular expressions given.  The test only
!      runs when '-DCHECK_ASM' is passed on the command line.
  
       It is possible to create non-capturing multi-line regular
!      expression groups of the form '(A|B|...)' by putting the '(', '|'
!      and ')' on separate lines (each still using PREFIX).  For example:
  
            /*
            ** cmple_f16_tied:
--- 6782,6794 ----
            */
            svint8_t add_b0_s8_m (...) { ... }
  
!      checks whether the implementations of ‘add_w0_s8_m’ and
!      ‘add_b0_s8_m’ match the regular expressions given.  The test only
!      runs when ‘-DCHECK_ASM’ is passed on the command line.
  
       It is possible to create non-capturing multi-line regular
!      expression groups of the form ‘(A|B|...)’ by putting the ‘(’, ‘|’
!      and ‘)’ on separate lines (each still using PREFIX).  For example:
  
            /*
            ** cmple_f16_tied:
*************** The GCC testsuite defines the following
*** 6799,6807 ****
            */
            svbool_t cmple_f16_tied (...) { ... }
  
!      checks whether 'cmple_f16_tied' is implemented by the 'fcmge'
!      instruction followed by 'ret' or by the 'fcmle' instruction
!      followed by 'ret'.  The test is still a single regular rexpression.
  
       A line containing just:
  
--- 6801,6809 ----
            */
            svbool_t cmple_f16_tied (...) { ... }
  
!      checks whether ‘cmple_f16_tied’ is implemented by the ‘fcmge’
!      instruction followed by ‘ret’ or by the ‘fcmle’ instruction
!      followed by ‘ret’.  The test is still a single regular rexpression.
  
       A line containing just:
  
*************** The GCC testsuite defines the following
*** 6813,6838 ****
  7.2.6.3 Scan optimization dump files
  ....................................
  
! These commands are available for KIND of 'tree', 'ltrans-tree',
! 'offload-tree', 'rtl', 'offload-rtl', 'ipa', 'offload-ipa', and
! 'wpa-ipa'.
  
! 'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
       Passes if REGEX matches text in the dump file with suffix SUFFIX.
  
! 'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
       Passes if REGEX does not match text in the dump file with suffix
       SUFFIX.
  
! 'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
       Passes if REGEX is found exactly NUM times in the dump file with
       suffix SUFFIX.
  
! 'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
       Passes if REGEX matches demangled text in the dump file with suffix
       SUFFIX.
  
! 'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
       Passes if REGEX does not match demangled text in the dump file with
       suffix SUFFIX.
  
--- 6815,6840 ----
  7.2.6.3 Scan optimization dump files
  ....................................
  
! These commands are available for KIND of ‘tree’, ‘ltrans-tree’,
! ‘offload-tree’, ‘rtl’, ‘offload-rtl’, ‘ipa’, ‘offload-ipa’, and
! ‘wpa-ipa’.
  
! ‘scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]’
       Passes if REGEX matches text in the dump file with suffix SUFFIX.
  
! ‘scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]’
       Passes if REGEX does not match text in the dump file with suffix
       SUFFIX.
  
! ‘scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]’
       Passes if REGEX is found exactly NUM times in the dump file with
       suffix SUFFIX.
  
! ‘scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]’
       Passes if REGEX matches demangled text in the dump file with suffix
       SUFFIX.
  
! ‘scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]’
       Passes if REGEX does not match demangled text in the dump file with
       suffix SUFFIX.
  
*************** instances 1, 2, 3 of a tree pass "mypass
*** 6846,6853 ****
       /* { dg-options "-fdump-tree-mypass" } */
       /* { dg-final { scan-tree-dump "code has been optimized" "mypass\[1-3\]" } } */
  
!  The 'offload-...' ones by default separately scan the dump file of each
! enabled offload target.  You may use the 'only_for_offload_target'
  wrapper to restrict the scanning to one specific offload target:
  
       /* { dg-do link { target offload_target_amdgcn } } */
--- 6848,6855 ----
       /* { dg-options "-fdump-tree-mypass" } */
       /* { dg-final { scan-tree-dump "code has been optimized" "mypass\[1-3\]" } } */
  
!  The ‘offload-...’ ones by default separately scan the dump file of each
! enabled offload target.  You may use the ‘only_for_offload_target’
  wrapper to restrict the scanning to one specific offload target:
  
       /* { dg-do link { target offload_target_amdgcn } } */
*************** wrapper to restrict the scanning to one
*** 6855,6865 ****
       /* { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-ipa-dump REGEX_AMDGCN simdclone } } */
  
   This test case is active if GCN offload compilation is enabled (but
! potentially also additional offload targets).  The 'simdclone' IPA dump
  file is (potentially) produced for all offload targets, but only the GCN
  offload one is scanned.
  
!  If a test case doesn't have a '{ target SELECTOR }', and you need to
  scan, for example, for different REGEXes for each of host and
  potentially several offload targets, use a pattern like this:
  
--- 6857,6867 ----
       /* { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-ipa-dump REGEX_AMDGCN simdclone } } */
  
   This test case is active if GCN offload compilation is enabled (but
! potentially also additional offload targets).  The ‘simdclone’ IPA dump
  file is (potentially) produced for all offload targets, but only the GCN
  offload one is scanned.
  
!  If a test case doesn't have a ‘{ target SELECTOR }’, and you need to
  scan, for example, for different REGEXes for each of host and
  potentially several offload targets, use a pattern like this:
  
*************** in the nvptx offload compilation dump fi
*** 6876,6905 ****
  7.2.6.4 Check for output files
  ..............................
  
! 'output-exists [{ target/xfail SELECTOR }]'
       Passes if compiler output file exists.
  
! 'output-exists-not [{ target/xfail SELECTOR }]'
       Passes if compiler output file does not exist.
  
! 'scan-symbol REGEXP [{ target/xfail SELECTOR }]'
       Passes if the pattern is present in the final executable.
  
! 'scan-symbol-not REGEXP [{ target/xfail SELECTOR }]'
       Passes if the pattern is absent from the final executable.
  
! 7.2.6.5 Checks for 'gcov' tests
  ...............................
  
! 'run-gcov SOURCEFILE'
!      Check line counts in 'gcov' tests.
  
! 'run-gcov [branches] [calls] { OPTS SOURCEFILE }'
       Check branch and/or call counts, in addition to line counts, in
!      'gcov' tests.
  
! 'run-gcov-pytest { SOURCEFILE PYTEST_FILE }'
!      Check output of 'gcov' intermediate format with a pytest script.
  
  7.2.6.6 Clean up generated test files
  .....................................
--- 6878,6907 ----
  7.2.6.4 Check for output files
  ..............................
  
! ‘output-exists [{ target/xfail SELECTOR }]’
       Passes if compiler output file exists.
  
! ‘output-exists-not [{ target/xfail SELECTOR }]’
       Passes if compiler output file does not exist.
  
! ‘scan-symbol REGEXP [{ target/xfail SELECTOR }]’
       Passes if the pattern is present in the final executable.
  
! ‘scan-symbol-not REGEXP [{ target/xfail SELECTOR }]’
       Passes if the pattern is absent from the final executable.
  
! 7.2.6.5 Checks for ‘gcov’ tests
  ...............................
  
! ‘run-gcov SOURCEFILE’
!      Check line counts in ‘gcov’ tests.
  
! ‘run-gcov [branches] [calls] { OPTS SOURCEFILE }’
       Check branch and/or call counts, in addition to line counts, in
!      ‘gcov’ tests.
  
! ‘run-gcov-pytest { SOURCEFILE PYTEST_FILE }’
!      Check output of ‘gcov’ intermediate format with a pytest script.
  
  7.2.6.6 Clean up generated test files
  .....................................
*************** passed to the tool and schedules a final
*** 6911,6920 ****
  
   There are, however, following additional cleanup directives that can be
  used to annotate a testcase "manually".
! 'cleanup-coverage-files'
       Removes coverage data files generated for this test.
  
! 'cleanup-modules "LIST-OF-EXTRA-MODULES"'
       Removes Fortran module files generated for this test, excluding the
       module names listed in keep-modules.  Cleaning up module files is
       usually done automatically by the testsuite by looking at the
--- 6913,6922 ----
  
   There are, however, following additional cleanup directives that can be
  used to annotate a testcase "manually".
! ‘cleanup-coverage-files’
       Removes coverage data files generated for this test.
  
! ‘cleanup-modules "LIST-OF-EXTRA-MODULES"’
       Removes Fortran module files generated for this test, excluding the
       module names listed in keep-modules.  Cleaning up module files is
       usually done automatically by the testsuite by looking at the
*************** used to annotate a testcase "manually".
*** 6931,6937 ****
            ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant
            ! { dg-final { keep-modules "mod3 mod4" } }
  
! 'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"'
       Whitespace separated list of module names that should not be
       deleted by cleanup-modules.  If the list of modules is empty, all
       modules defined in this file are kept.
--- 6933,6939 ----
            ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant
            ! { dg-final { keep-modules "mod3 mod4" } }
  
! ‘keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"’
       Whitespace separated list of module names that should not be
       deleted by cleanup-modules.  If the list of modules is empty, all
       modules defined in this file are kept.
*************** used to annotate a testcase "manually".
*** 6944,6959 ****
            ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two
            ! { dg-final { keep-modules "" } } ! keep all
  
! 'dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"'
       Whitespace separated list of suffixes that should not be deleted
!      automatically in a testcase that uses '-save-temps'.
            // { dg-options "-save-temps -fpch-preprocess -I." }
            int main() { return 0; }
            // { dg-keep-saved-temps ".s" } ! just keep assembler file
            // { dg-keep-saved-temps ".s" ".i" } ! ... and .i
            // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o
  
! 'cleanup-profile-file'
       Removes profiling files generated for this test.
  
  
--- 6946,6961 ----
            ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two
            ! { dg-final { keep-modules "" } } ! keep all
  
! ‘dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"’
       Whitespace separated list of suffixes that should not be deleted
!      automatically in a testcase that uses ‘-save-temps’.
            // { dg-options "-save-temps -fpch-preprocess -I." }
            int main() { return 0; }
            // { dg-keep-saved-temps ".s" } ! just keep assembler file
            // { dg-keep-saved-temps ".s" ".i" } ! ... and .i
            // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o
  
! ‘cleanup-profile-file’
       Removes profiling files generated for this test.
  
  
*************** File: gccint.info,  Node: Ada Tests,  Ne
*** 6965,6990 ****
  The Ada testsuite includes executable tests from the ACATS testsuite,
  publicly available at <http://www.ada-auth.org/acats.html>.
  
!  These tests are integrated in the GCC testsuite in the 'ada/acats'
! directory, and enabled automatically when running 'make check', assuming
  the Ada language has been enabled when configuring GCC.
  
!  You can also run the Ada testsuite independently, using 'make
! check-ada', or run a subset of the tests by specifying which chapter to
  run, e.g.:
  
       $ make check-ada CHAPTERS="c3 c9"
  
   The tests are organized by directory, each directory corresponding to a
! chapter of the Ada Reference Manual.  So for example, 'c9' corresponds
  to chapter 9, which deals with tasking features of the language.
  
!  The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'.
  To run the tests using a simulator or a cross target, see the small
! customization section at the top of 'run_all.sh'.
  
   These tests are run using the build tree: they can be run without doing
! a 'make install'.
  
  
  File: gccint.info,  Node: C Tests,  Next: LTO Testing,  Prev: Ada Tests,  Up: Testsuites
--- 6967,6992 ----
  The Ada testsuite includes executable tests from the ACATS testsuite,
  publicly available at <http://www.ada-auth.org/acats.html>.
  
!  These tests are integrated in the GCC testsuite in the ‘ada/acats’
! directory, and enabled automatically when running ‘make check’, assuming
  the Ada language has been enabled when configuring GCC.
  
!  You can also run the Ada testsuite independently, using ‘make
! check-ada’, or run a subset of the tests by specifying which chapter to
  run, e.g.:
  
       $ make check-ada CHAPTERS="c3 c9"
  
   The tests are organized by directory, each directory corresponding to a
! chapter of the Ada Reference Manual.  So for example, ‘c9’ corresponds
  to chapter 9, which deals with tasking features of the language.
  
!  The tests are run using two ‘sh’ scripts: ‘run_acats’ and ‘run_all.sh’.
  To run the tests using a simulator or a cross target, see the small
! customization section at the top of ‘run_all.sh’.
  
   These tests are run using the build tree: they can be run without doing
! a ‘make install’.
  
  
  File: gccint.info,  Node: C Tests,  Next: LTO Testing,  Prev: Ada Tests,  Up: Testsuites
*************** File: gccint.info,  Node: C Tests,  Next
*** 6992,7034 ****
  7.4 C Language Testsuites
  =========================
  
! GCC contains the following C language testsuites, in the 'gcc/testsuite'
  directory:
  
! 'gcc.dg'
       This contains tests of particular features of the C compiler, using
!      the more modern 'dg' harness.  Correctness tests for various
       compiler features should go here if possible.
  
       Magic comments determine whether the file is preprocessed,
       compiled, linked or run.  In these tests, error and warning message
       texts are compared against expected texts or regular expressions
!      given in comments.  These tests are run with the options '-ansi
!      -pedantic' unless other options are given in the test.  Except as
       noted below they are not run with multiple optimization options.
! 'gcc.dg/compat'
       This subdirectory contains tests for binary compatibility using
!      'lib/compat.exp', which in turn uses the language-independent
       support (*note Support for testing binary compatibility: compat
       Testing.).
! 'gcc.dg/cpp'
       This subdirectory contains tests of the preprocessor.
! 'gcc.dg/debug'
       This subdirectory contains tests for debug formats.  Tests in this
       subdirectory are run for each debug format that the compiler
       supports.
! 'gcc.dg/format'
!      This subdirectory contains tests of the '-Wformat' format checking.
!      Tests in this directory are run with and without '-DWIDE'.
! 'gcc.dg/noncompile'
       This subdirectory contains tests of code that should not compile
       and does not need any special compilation options.  They are run
       with multiple optimization options, since sometimes invalid code
       crashes the compiler with optimization.
! 'gcc.dg/special'
       FIXME: describe this.
  
! 'gcc.c-torture'
       This contains particular code fragments which have historically
       broken easily.  These tests are run with multiple optimization
       options, so tests for features which only break at some
--- 6994,7036 ----
  7.4 C Language Testsuites
  =========================
  
! GCC contains the following C language testsuites, in the ‘gcc/testsuite’
  directory:
  
! ‘gcc.dg’
       This contains tests of particular features of the C compiler, using
!      the more modern ‘dg’ harness.  Correctness tests for various
       compiler features should go here if possible.
  
       Magic comments determine whether the file is preprocessed,
       compiled, linked or run.  In these tests, error and warning message
       texts are compared against expected texts or regular expressions
!      given in comments.  These tests are run with the options ‘-ansi
!      -pedantic’ unless other options are given in the test.  Except as
       noted below they are not run with multiple optimization options.
! ‘gcc.dg/compat’
       This subdirectory contains tests for binary compatibility using
!      ‘lib/compat.exp’, which in turn uses the language-independent
       support (*note Support for testing binary compatibility: compat
       Testing.).
! ‘gcc.dg/cpp’
       This subdirectory contains tests of the preprocessor.
! ‘gcc.dg/debug’
       This subdirectory contains tests for debug formats.  Tests in this
       subdirectory are run for each debug format that the compiler
       supports.
! ‘gcc.dg/format’
!      This subdirectory contains tests of the ‘-Wformat’ format checking.
!      Tests in this directory are run with and without ‘-DWIDE’.
! ‘gcc.dg/noncompile’
       This subdirectory contains tests of code that should not compile
       and does not need any special compilation options.  They are run
       with multiple optimization options, since sometimes invalid code
       crashes the compiler with optimization.
! ‘gcc.dg/special’
       FIXME: describe this.
  
! ‘gcc.c-torture’
       This contains particular code fragments which have historically
       broken easily.  These tests are run with multiple optimization
       options, so tests for features which only break at some
*************** directory:
*** 7037,7092 ****
       separate the correctness tests cleanly from the code quality tests,
       but it hasn't been done yet.
  
! 'gcc.c-torture/compat'
       FIXME: describe this.
  
       This directory should probably not be used for new tests.
! 'gcc.c-torture/compile'
       This testsuite contains test cases that should compile, but do not
       need to link or run.  These test cases are compiled with several
       different combinations of optimization options.  All warnings are
       disabled for these test cases, so this directory is not suitable if
       you wish to test for the presence or absence of compiler warnings.
       While special options can be set, and tests disabled on specific
!      platforms, by the use of '.x' files, mostly these test cases should
       not contain platform dependencies.  FIXME: discuss how defines such
!      as 'STACK_SIZE' are used.
! 'gcc.c-torture/execute'
       This testsuite contains test cases that should compile, link and
!      run; otherwise the same comments as for 'gcc.c-torture/compile'
       apply.
! 'gcc.c-torture/execute/ieee'
       This contains tests which are specific to IEEE floating point.
! 'gcc.c-torture/unsorted'
       FIXME: describe this.
  
       This directory should probably not be used for new tests.
! 'gcc.misc-tests'
       This directory contains C tests that require special handling.
       Some of these tests have individual expect files, and others share
       special-purpose expect files:
  
!      'bprob*.c'
!           Test '-fbranch-probabilities' using
!           'gcc.misc-tests/bprob.exp', which in turn uses the generic,
            language-independent framework (*note Support for testing
            profile-directed optimizations: profopt Testing.).
  
!      'gcov*.c'
!           Test 'gcov' output using 'gcov.exp', which in turn uses the
            language-independent support (*note Support for testing gcov:
            gcov Testing.).
  
!      'i386-pf-*.c'
            Test i386-specific support for data prefetch using
!           'i386-prefetch.exp'.
  
! 'gcc.test-framework'
!      'dg-*.c'
            Test the testsuite itself using
!           'gcc.test-framework/test-framework.exp'.
  
!  FIXME: merge in 'testsuite/README.gcc' and discuss the format of test
  cases and magic comments more.
  
  
--- 7039,7094 ----
       separate the correctness tests cleanly from the code quality tests,
       but it hasn't been done yet.
  
! ‘gcc.c-torture/compat’
       FIXME: describe this.
  
       This directory should probably not be used for new tests.
! ‘gcc.c-torture/compile’
       This testsuite contains test cases that should compile, but do not
       need to link or run.  These test cases are compiled with several
       different combinations of optimization options.  All warnings are
       disabled for these test cases, so this directory is not suitable if
       you wish to test for the presence or absence of compiler warnings.
       While special options can be set, and tests disabled on specific
!      platforms, by the use of ‘.x’ files, mostly these test cases should
       not contain platform dependencies.  FIXME: discuss how defines such
!      as ‘STACK_SIZE’ are used.
! ‘gcc.c-torture/execute’
       This testsuite contains test cases that should compile, link and
!      run; otherwise the same comments as for ‘gcc.c-torture/compile’
       apply.
! ‘gcc.c-torture/execute/ieee’
       This contains tests which are specific to IEEE floating point.
! ‘gcc.c-torture/unsorted’
       FIXME: describe this.
  
       This directory should probably not be used for new tests.
! ‘gcc.misc-tests’
       This directory contains C tests that require special handling.
       Some of these tests have individual expect files, and others share
       special-purpose expect files:
  
!      ‘bprob*.c’
!           Test ‘-fbranch-probabilities’ using
!           ‘gcc.misc-tests/bprob.exp’, which in turn uses the generic,
            language-independent framework (*note Support for testing
            profile-directed optimizations: profopt Testing.).
  
!      ‘gcov*.c’
!           Test ‘gcov’ output using ‘gcov.exp’, which in turn uses the
            language-independent support (*note Support for testing gcov:
            gcov Testing.).
  
!      ‘i386-pf-*.c’
            Test i386-specific support for data prefetch using
!           ‘i386-prefetch.exp’.
  
! ‘gcc.test-framework’
!      ‘dg-*.c’
            Test the testsuite itself using
!           ‘gcc.test-framework/test-framework.exp’.
  
!  FIXME: merge in ‘testsuite/README.gcc’ and discuss the format of test
  cases and magic comments more.
  
  
*************** Tests for link-time optimizations usuall
*** 7099,7175 ****
  that are compiled separately, perhaps with different sets of options.
  There are several special-purpose test directives used for these tests.
  
! '{ dg-lto-do DO-WHAT-KEYWORD }'
       DO-WHAT-KEYWORD specifies how the test is compiled and whether it
       is executed.  It is one of:
  
!      'assemble'
!           Compile with '-c' to produce a relocatable object file.
!      'link'
            Compile, assemble, and link to produce an executable file.
!      'run'
            Produce and run an executable file, which is expected to
            return an exit code of 0.
  
!      The default is 'assemble'.  That can be overridden for a set of
!      tests by redefining 'dg-do-what-default' within the '.exp' file for
       those tests.
  
!      Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target'
!      or 'xfail' list.  Use 'dg-skip-if', 'dg-xfail-if', or
!      'dg-xfail-run-if'.
  
! '{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
       This directive provides a list of one or more sets of compiler
       options to override LTO_OPTIONS.  Each test will be compiled and
       run with each of these sets of options.
  
! '{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}'
       This directive adds OPTIONS to the linker options used.
  
! '{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}'
       This directive removes OPTIONS from the set of linker options used.
  
  
  File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
  
! 7.6 Support for testing 'gcov'
  ==============================
  
! Language-independent support for testing 'gcov', and for checking that
  branch profiling produces expected values, is provided by the expect
! file 'lib/gcov.exp'.  'gcov' tests also rely on procedures in
! 'lib/gcc-dg.exp' to compile and run the test program.  A typical 'gcov'
  test contains the following DejaGnu commands within comments:
  
       { dg-options "--coverage" }
       { dg-do run { target native } }
       { dg-final { run-gcov sourcefile } }
  
!  Checks of 'gcov' output can include line counts, branch percentages,
  and call return percentages.  All of these checks are requested via
  commands that appear in comments in the test's source file.  Commands to
  check line counts are processed by default.  Commands to check branch
! percentages and call return percentages are processed if the 'run-gcov'
! command has arguments 'branches' or 'calls', respectively.  For example,
! the following specifies checking both, as well as passing '-b' to
! 'gcov':
  
       { dg-final { run-gcov branches calls { -b sourcefile } } }
  
   A line count command appears within a comment on the source line that
! is expected to get the specified count and has the form 'count(CNT)'.  A
  test should only check line counts for lines that will get the same
  count for any architecture.
  
!  Commands to check branch percentages ('branch') and call return
! percentages ('returns') are very similar to each other.  A beginning
  command appears on or before the first of a range of lines that will
  report the percentage, and the ending command follows that range of
  lines.  The beginning command can include a list of percentages, all of
  which are expected to be found within the range.  A range is terminated
! by the next command of the same kind.  A command 'branch(end)' or
! 'returns(end)' marks the end of a range without starting a new one.  For
  example:
  
       if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
--- 7101,7177 ----
  that are compiled separately, perhaps with different sets of options.
  There are several special-purpose test directives used for these tests.
  
! ‘{ dg-lto-do DO-WHAT-KEYWORD }’
       DO-WHAT-KEYWORD specifies how the test is compiled and whether it
       is executed.  It is one of:
  
!      ‘assemble’
!           Compile with ‘-c’ to produce a relocatable object file.
!      ‘link’
            Compile, assemble, and link to produce an executable file.
!      ‘run’
            Produce and run an executable file, which is expected to
            return an exit code of 0.
  
!      The default is ‘assemble’.  That can be overridden for a set of
!      tests by redefining ‘dg-do-what-default’ within the ‘.exp’ file for
       those tests.
  
!      Unlike ‘dg-do’, ‘dg-lto-do’ does not support an optional ‘target’
!      or ‘xfail’ list.  Use ‘dg-skip-if’, ‘dg-xfail-if’, or
!      ‘dg-xfail-run-if’.
  
! ‘{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}’
       This directive provides a list of one or more sets of compiler
       options to override LTO_OPTIONS.  Each test will be compiled and
       run with each of these sets of options.
  
! ‘{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}’
       This directive adds OPTIONS to the linker options used.
  
! ‘{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}’
       This directive removes OPTIONS from the set of linker options used.
  
  
  File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
  
! 7.6 Support for testing ‘gcov’
  ==============================
  
! Language-independent support for testing ‘gcov’, and for checking that
  branch profiling produces expected values, is provided by the expect
! file ‘lib/gcov.exp’.  ‘gcov’ tests also rely on procedures in
! ‘lib/gcc-dg.exp’ to compile and run the test program.  A typical ‘gcov’
  test contains the following DejaGnu commands within comments:
  
       { dg-options "--coverage" }
       { dg-do run { target native } }
       { dg-final { run-gcov sourcefile } }
  
!  Checks of ‘gcov’ output can include line counts, branch percentages,
  and call return percentages.  All of these checks are requested via
  commands that appear in comments in the test's source file.  Commands to
  check line counts are processed by default.  Commands to check branch
! percentages and call return percentages are processed if the ‘run-gcov’
! command has arguments ‘branches’ or ‘calls’, respectively.  For example,
! the following specifies checking both, as well as passing ‘-b’ to
! ‘gcov’:
  
       { dg-final { run-gcov branches calls { -b sourcefile } } }
  
   A line count command appears within a comment on the source line that
! is expected to get the specified count and has the form ‘count(CNT)’.  A
  test should only check line counts for lines that will get the same
  count for any architecture.
  
!  Commands to check branch percentages (‘branch’) and call return
! percentages (‘returns’) are very similar to each other.  A beginning
  command appears on or before the first of a range of lines that will
  report the percentage, and the ending command follows that range of
  lines.  The beginning command can include a list of percentages, all of
  which are expected to be found within the range.  A range is terminated
! by the next command of the same kind.  A command ‘branch(end)’ or
! ‘returns(end)’ marks the end of a range without starting a new one.  For
  example:
  
       if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
*************** File: gccint.info,  Node: profopt Testin
*** 7198,7204 ****
  7.7 Support for testing profile-directed optimizations
  ======================================================
  
! The file 'profopt.exp' provides language-independent support for
  checking correct execution of a test built with profile-directed
  optimization.  This testing requires that a test program be built and
  executed twice.  The first time it is compiled to generate profile data,
--- 7200,7206 ----
  7.7 Support for testing profile-directed optimizations
  ======================================================
  
! The file ‘profopt.exp’ provides language-independent support for
  checking correct execution of a test built with profile-directed
  optimization.  This testing requires that a test program be built and
  executed twice.  The first time it is compiled to generate profile data,
*************** test produces the expected results.
*** 7209,7241 ****
   To check that the optimization actually generated better code, a test
  can be built and run a third time with normal optimizations to verify
  that the performance is better with the profile-directed optimizations.
! 'profopt.exp' has the beginnings of this kind of support.
  
!  'profopt.exp' provides generic support for profile-directed
  optimizations.  Each set of tests that uses it provides information
  about a specific optimization:
  
! 'tool'
!      tool being tested, e.g., 'gcc'
  
! 'profile_option'
       options used to generate profile data
  
! 'feedback_option'
       options used to optimize using that profile data
  
! 'prof_ext'
       suffix of profile data files
  
! 'PROFOPT_OPTIONS'
       list of options with which to run each test, similar to the lists
       for torture tests
  
! '{ dg-final-generate { LOCAL-DIRECTIVE } }'
!      This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is
       run after the generation of profile data.
  
! '{ dg-final-use { LOCAL-DIRECTIVE } }'
       The LOCAL-DIRECTIVE is run after the profile data have been used.
  
  
--- 7211,7243 ----
   To check that the optimization actually generated better code, a test
  can be built and run a third time with normal optimizations to verify
  that the performance is better with the profile-directed optimizations.
! ‘profopt.exp’ has the beginnings of this kind of support.
  
!  ‘profopt.exp’ provides generic support for profile-directed
  optimizations.  Each set of tests that uses it provides information
  about a specific optimization:
  
! ‘tool’
!      tool being tested, e.g., ‘gcc’
  
! ‘profile_option’
       options used to generate profile data
  
! ‘feedback_option’
       options used to optimize using that profile data
  
! ‘prof_ext’
       suffix of profile data files
  
! ‘PROFOPT_OPTIONS’
       list of options with which to run each test, similar to the lists
       for torture tests
  
! ‘{ dg-final-generate { LOCAL-DIRECTIVE } }’
!      This directive is similar to ‘dg-final’, but the LOCAL-DIRECTIVE is
       run after the generation of profile data.
  
! ‘{ dg-final-use { LOCAL-DIRECTIVE } }’
       The LOCAL-DIRECTIVE is run after the profile data have been used.
  
  
*************** File: gccint.info,  Node: compat Testing
*** 7244,7250 ****
  7.8 Support for testing binary compatibility
  ============================================
  
! The file 'compat.exp' provides language-independent support for binary
  compatibility testing.  It supports testing interoperability of two
  compilers that follow the same ABI, or of multiple sets of compiler
  options that should not affect binary compatibility.  It is intended to
--- 7246,7252 ----
  7.8 Support for testing binary compatibility
  ============================================
  
! The file ‘compat.exp’ provides language-independent support for binary
  compatibility testing.  It supports testing interoperability of two
  compilers that follow the same ABI, or of multiple sets of compiler
  options that should not affect binary compatibility.  It is intended to
*************** be used for testsuites that complement A
*** 7254,7268 ****
  source file: a main program and two pieces that interact with each other
  to split up the functionality being tested.
  
! 'TESTNAME_main.SUFFIX'
       Contains the main program, which calls a function in file
!      'TESTNAME_x.SUFFIX'.
  
! 'TESTNAME_x.SUFFIX'
!      Contains at least one call to a function in 'TESTNAME_y.SUFFIX'.
  
! 'TESTNAME_y.SUFFIX'
!      Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'.
  
   Within each test, the main program and one functional piece are
  compiled by the GCC under test.  The other piece can be compiled by an
--- 7256,7270 ----
  source file: a main program and two pieces that interact with each other
  to split up the functionality being tested.
  
! ‘TESTNAME_main.SUFFIX’
       Contains the main program, which calls a function in file
!      ‘TESTNAME_x.SUFFIX’.
  
! ‘TESTNAME_x.SUFFIX’
!      Contains at least one call to a function in ‘TESTNAME_y.SUFFIX’.
  
! ‘TESTNAME_y.SUFFIX’
!      Shares data with, or gets arguments from, ‘TESTNAME_x.SUFFIX’.
  
   Within each test, the main program and one functional piece are
  compiled by the GCC under test.  The other piece can be compiled by an
*************** pair specifies options used with the GCC
*** 7273,7305 ****
  element of the pair specifies options used with the alternate compiler.
  Each test is compiled with each pair of options.
  
!  'compat.exp' defines default pairs of compiler options.  These can be
! overridden by defining the environment variable 'COMPAT_OPTIONS' as:
  
       COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
         ...[list {TSTN} {ALTN}]]"
  
   where TSTI and ALTI are lists of options, with TSTI used by the
  compiler under test and ALTI used by the alternate compiler.  For
! example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
! the test is first built with '-g -O0' by the compiler under test and
! with '-O3' by the alternate compiler.  The test is built a second time
! using '-fpic' by the compiler under test and '-fPIC -O2' by the
  alternate compiler.
  
   An alternate compiler is specified by defining an environment variable
  to be the full pathname of an installed compiler; for C define
! 'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'.  These
! will be written to the 'site.exp' file used by DejaGnu.  The default is
  to build each test with the compiler under test using the first of each
! pair of compiler options from 'COMPAT_OPTIONS'.  When
! 'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is
  built using the compiler under test but with combinations of the options
! from 'COMPAT_OPTIONS'.
  
   To run only the C++ compatibility suite using the compiler under test
  and another version of GCC using specific compiler options, do the
! following from 'OBJDIR/gcc':
  
       rm site.exp
       make -k \
--- 7275,7307 ----
  element of the pair specifies options used with the alternate compiler.
  Each test is compiled with each pair of options.
  
!  ‘compat.exp’ defines default pairs of compiler options.  These can be
! overridden by defining the environment variable ‘COMPAT_OPTIONS’ as:
  
       COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
         ...[list {TSTN} {ALTN}]]"
  
   where TSTI and ALTI are lists of options, with TSTI used by the
  compiler under test and ALTI used by the alternate compiler.  For
! example, with ‘[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]’,
! the test is first built with ‘-g -O0’ by the compiler under test and
! with ‘-O3’ by the alternate compiler.  The test is built a second time
! using ‘-fpic’ by the compiler under test and ‘-fPIC -O2’ by the
  alternate compiler.
  
   An alternate compiler is specified by defining an environment variable
  to be the full pathname of an installed compiler; for C define
! ‘ALT_CC_UNDER_TEST’, and for C++ define ‘ALT_CXX_UNDER_TEST’.  These
! will be written to the ‘site.exp’ file used by DejaGnu.  The default is
  to build each test with the compiler under test using the first of each
! pair of compiler options from ‘COMPAT_OPTIONS’.  When
! ‘ALT_CC_UNDER_TEST’ or ‘ALT_CXX_UNDER_TEST’ is ‘same’, each test is
  built using the compiler under test but with combinations of the options
! from ‘COMPAT_OPTIONS’.
  
   To run only the C++ compatibility suite using the compiler under test
  and another version of GCC using specific compiler options, do the
! following from ‘OBJDIR/gcc’:
  
       rm site.exp
       make -k \
*************** compiler under test but is present in th
*** 7318,7334 ****
   The binary compatibility tests support a small number of test framework
  commands that appear within comments in a test file.
  
! 'dg-require-*'
!      These commands can be used in 'TESTNAME_main.SUFFIX' to skip the
       test if specific support is not available on the target.
  
! 'dg-options'
       The specified options are used for compiling this particular source
!      file, appended to the options from 'COMPAT_OPTIONS'.  When this
!      command appears in 'TESTNAME_main.SUFFIX' the options are also used
       to link the test program.
  
! 'dg-xfail-if'
       This command can be used in a secondary source file to specify that
       compilation is expected to fail for particular options on
       particular targets.
--- 7320,7336 ----
   The binary compatibility tests support a small number of test framework
  commands that appear within comments in a test file.
  
! ‘dg-require-*’
!      These commands can be used in ‘TESTNAME_main.SUFFIX’ to skip the
       test if specific support is not available on the target.
  
! ‘dg-options’
       The specified options are used for compiling this particular source
!      file, appended to the options from ‘COMPAT_OPTIONS’.  When this
!      command appears in ‘TESTNAME_main.SUFFIX’ the options are also used
       to link the test program.
  
! ‘dg-xfail-if’
       This command can be used in a secondary source file to specify that
       compilation is expected to fail for particular options on
       particular targets.
*************** File: gccint.info,  Node: Torture Tests,
*** 7341,7376 ****
  
  Throughout the compiler testsuite there are several directories whose
  tests are run multiple times, each with a different set of options.
! These are known as torture tests.  'lib/torture-options.exp' defines
  procedures to set up these lists:
  
! 'torture-init'
       Initialize use of torture lists.
! 'set-torture-options'
       Set lists of torture options to use for tests with and without
       loops.  Optionally combine a set of torture options with a set of
       other options, as is done with Objective-C runtime options.
! 'torture-finish'
       Finalize use of torture lists.
  
!  The '.exp' file for a set of tests that use torture options must
  include calls to these three procedures if:
  
!    * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
  
!    * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL
!      is 'c', 'fortran', or 'objc'.
  
!    * It calls 'dg-pch'.
  
!  It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to
  call the torture procedures if the tests should use the list in
! DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'.
  
   Most uses of torture options can override the default lists by defining
  TORTURE_OPTIONS or add to the default list by defining
! ADDITIONAL_TORTURE_OPTIONS.  Define these in a '.dejagnurc' file or add
! them to the 'site.exp' file; for example
  
       set ADDITIONAL_TORTURE_OPTIONS  [list \
         { -O2 -ftree-loop-linear } \
--- 7343,7378 ----
  
  Throughout the compiler testsuite there are several directories whose
  tests are run multiple times, each with a different set of options.
! These are known as torture tests.  ‘lib/torture-options.exp’ defines
  procedures to set up these lists:
  
! ‘torture-init’
       Initialize use of torture lists.
! ‘set-torture-options’
       Set lists of torture options to use for tests with and without
       loops.  Optionally combine a set of torture options with a set of
       other options, as is done with Objective-C runtime options.
! ‘torture-finish’
       Finalize use of torture lists.
  
!  The ‘.exp’ file for a set of tests that use torture options must
  include calls to these three procedures if:
  
!    • It calls ‘gcc-dg-runtest’ and overrides DG_TORTURE_OPTIONS.
  
!    • It calls ${TOOL}‘-torture’ or ${TOOL}‘-torture-execute’, where TOOL
!      is ‘c’, ‘fortran’, or ‘objc’.
  
!    • It calls ‘dg-pch’.
  
!  It is not necessary for a ‘.exp’ file that calls ‘gcc-dg-runtest’ to
  call the torture procedures if the tests should use the list in
! DG_TORTURE_OPTIONS defined in ‘gcc-dg.exp’.
  
   Most uses of torture options can override the default lists by defining
  TORTURE_OPTIONS or add to the default list by defining
! ADDITIONAL_TORTURE_OPTIONS.  Define these in a ‘.dejagnurc’ file or add
! them to the ‘site.exp’ file; for example
  
       set ADDITIONAL_TORTURE_OPTIONS  [list \
         { -O2 -ftree-loop-linear } \
*************** File: gccint.info,  Node: GIMPLE Tests,
*** 7382,7390 ****
  7.10 Support for testing GIMPLE passes
  ======================================
  
! As of gcc 7, C functions can be tagged with '__GIMPLE' to indicate that
  the function body will be GIMPLE, rather than C. The compiler requires
! the option '-fgimple' to enable this functionality.  For example:
  
       /* { dg-do compile } */
       /* { dg-options "-O -fgimple" } */
--- 7384,7392 ----
  7.10 Support for testing GIMPLE passes
  ======================================
  
! As of gcc 7, C functions can be tagged with ‘__GIMPLE’ to indicate that
  the function body will be GIMPLE, rather than C. The compiler requires
! the option ‘-fgimple’ to enable this functionality.  For example:
  
       /* { dg-do compile } */
       /* { dg-options "-O -fgimple" } */
*************** the option '-fgimple' to enable this fun
*** 7413,7427 ****
         return;
       }
  
!  The 'startwith' argument indicates at which pass to begin.
  
!  Use the dump modifier '-gimple' (e.g. '-fdump-tree-all-gimple') to make
  tree dumps more closely follow the format accepted by the GIMPLE parser.
  
   Example DejaGnu tests of GIMPLE can be seen in the source tree at
! 'gcc/testsuite/gcc.dg/gimplefe-*.c'.
  
!  The '__GIMPLE' parser is integrated with the C tokenizer and
  preprocessor, so it should be possible to use macros to build out test
  coverage.
  
--- 7415,7429 ----
         return;
       }
  
!  The ‘startwith’ argument indicates at which pass to begin.
  
!  Use the dump modifier ‘-gimple’ (e.g. ‘-fdump-tree-all-gimple’) to make
  tree dumps more closely follow the format accepted by the GIMPLE parser.
  
   Example DejaGnu tests of GIMPLE can be seen in the source tree at
! ‘gcc/testsuite/gcc.dg/gimplefe-*.c’.
  
!  The ‘__GIMPLE’ parser is integrated with the C tokenizer and
  preprocessor, so it should be possible to use macros to build out test
  coverage.
  
*************** File: gccint.info,  Node: RTL Tests,  Pr
*** 7431,7437 ****
  7.11 Support for testing RTL passes
  ===================================
  
! As of gcc 7, C functions can be tagged with '__RTL' to indicate that the
  function body will be RTL, rather than C. For example:
  
       double __RTL (startwith ("ira")) test (struct foo *f, const struct bar *b)
--- 7433,7439 ----
  7.11 Support for testing RTL passes
  ===================================
  
! As of gcc 7, C functions can be tagged with ‘__RTL’ to indicate that the
  function body will be RTL, rather than C. For example:
  
       double __RTL (startwith ("ira")) test (struct foo *f, const struct bar *b)
*************** function body will be RTL, rather than C
*** 7441,7447 ****
         ) ;; function "test"
       }
  
!  The 'startwith' argument indicates at which pass to begin.
  
   The parser expects the RTL body to be in the format emitted by this
  dumping function:
--- 7443,7449 ----
         ) ;; function "test"
       }
  
!  The ‘startwith’ argument indicates at which pass to begin.
  
   The parser expects the RTL body to be in the format emitted by this
  dumping function:
*************** from the debugger using:
*** 7457,7465 ****
   and copy and paste the output into the body of the C function.
  
   Example DejaGnu tests of RTL can be seen in the source tree under
! 'gcc/testsuite/gcc.dg/rtl'.
  
!  The '__RTL' parser is not integrated with the C tokenizer or
  preprocessor, and works simply by reading the relevant lines within the
  braces.  In particular, the RTL body must be on separate lines from the
  enclosing braces, and the preprocessor is not usable within it.
--- 7459,7467 ----
   and copy and paste the output into the body of the C function.
  
   Example DejaGnu tests of RTL can be seen in the source tree under
! ‘gcc/testsuite/gcc.dg/rtl’.
  
!  The ‘__RTL’ parser is not integrated with the C tokenizer or
  preprocessor, and works simply by reading the relevant lines within the
  braces.  In particular, the RTL body must be on separate lines from the
  enclosing braces, and the preprocessor is not usable within it.
*************** File: gccint.info,  Node: Options,  Next
*** 7471,7477 ****
  ****************************
  
  Most GCC command-line options are described by special option definition
! files, the names of which conventionally end in '.opt'.  This chapter
  describes the format of these files.
  
  * Menu:
--- 7473,7479 ----
  ****************************
  
  Most GCC command-line options are described by special option definition
! files, the names of which conventionally end in ‘.opt’.  This chapter
  describes the format of these files.
  
  * Menu:
*************** semicolon.
*** 7493,7620 ****
  
   The files can contain the following types of record:
  
!    * A language definition record.  These records have two fields: the
!      string 'Language' and the name of the language.  Once a language
       has been declared in this way, it can be used as an option
       property.  *Note Option properties::.
  
!    * A target specific save record to save additional information.
!      These records have two fields: the string 'TargetSave', and a
!      declaration type to go in the 'cl_target_option' structure.
  
!    * A variable record to define a variable used to store option
!      information.  These records have two fields: the string 'Variable',
       and a declaration of the type and name of the variable, optionally
!      with an initializer (but without any trailing ';').  These records
       may be used for variables used for many options where declaring the
       initializer in a single option definition record, or duplicating it
       in many records, would be inappropriate, or for variables set in
!      option handlers rather than referenced by 'Var' properties.
  
!    * A variable record to define a variable used to store option
       information.  These records have two fields: the string
!      'TargetVariable', and a declaration of the type and name of the
       variable, optionally with an initializer (but without any trailing
!      ';').  'TargetVariable' is a combination of 'Variable' and
!      'TargetSave' records in that the variable is defined in the
!      'gcc_options' structure, but these variables are also stored in the
!      'cl_target_option' structure.  The variables are saved in the
       target save code and restored in the target restore code.
  
!    * A variable record to record any additional files that the
!      'options.h' file should include.  This is useful to provide
       enumeration or structure definitions needed for target variables.
!      These records have two fields: the string 'HeaderInclude' and the
       name of the include file.
  
!    * A variable record to record any additional files that the
!      'options.cc' or 'options-save.cc' file should include.  This is
       useful to provide inline functions needed for target variables
!      and/or '#ifdef' sequences to properly set up the initialization.
!      These records have two fields: the string 'SourceInclude' and the
       name of the include file.
  
!    * An enumeration record to define a set of strings that may be used
       as arguments to an option or options.  These records have three
!      fields: the string 'Enum', a space-separated list of properties and
!      help text used to describe the set of strings in '--help' output.
       Properties use the same format as option properties; the following
       are valid:
!      'Name(NAME)'
            This property is required; NAME must be a name (suitable for
            use in C identifiers) used to identify the set of strings in
!           'Enum' option properties.
  
!      'Type(TYPE)'
            This property is required; TYPE is the C type for variables
!           set by options using this enumeration together with 'Var'.
  
!      'UnknownError(MESSAGE)'
            The message MESSAGE will be used as an error message if the
!           argument is invalid; for enumerations without 'UnknownError',
            a generic error message is used.  MESSAGE should contain a
!           single '%qs' format, which will be used to format the invalid
            argument.
  
!    * An enumeration value record to define one of the strings in a set
!      given in an 'Enum' record.  These records have two fields: the
!      string 'EnumValue' and a space-separated list of properties.
       Properties use the same format as option properties; the following
       are valid:
!      'Enum(NAME)'
!           This property is required; NAME says which 'Enum' record this
!           'EnumValue' record corresponds to.
  
!      'String(STRING)'
            This property is required; STRING is the string option
            argument being described by this record.
  
!      'Value(VALUE)'
            This property is required; it says what value (representable
!           as 'int') should be used for the given string.
  
!      'Canonical'
            This property is optional.  If present, it says the present
            string is the canonical one among all those with the given
            value.  Other strings yielding that value will be mapped to
            this one so specs do not need to handle them.
  
!      'DriverOnly'
            This property is optional.  If present, the present string
            will only be accepted by the driver.  This is used for cases
!           such as '-march=native' that are processed by the driver so
!           that 'gcc -v' shows how the options chosen depended on the
            system on which the compiler was run.
  
!      'Set(NUMBER)'
            This property is optional, required for enumerations used in
!           'EnumSet' options.  NUMBER should be decimal number between 1
            and 64 inclusive and divides the enumeration into a set of
            sets of mutually exclusive arguments.  Arguments with the same
            NUMBER can't be specified together in the same option, but
            arguments with different NUMBER can.  VALUE needs to be chosen
            such that a mask of all VALUE values from the same set NUMBER
            bitwise ored doesn't overlap with masks for other sets.  When
!           '-foption=arg_from_set1,arg_from_set4' and
!           '-fno-option=arg_from_set3' are used, the effect is that
!           previous value of the 'Var' will get bits from set 1 and 4
!           masks cleared, ored 'Value' of 'arg_from_set1' and
!           'arg_from_set4' and then will get bits from set 3 mask
            cleared.
  
!    * An option definition record.  These records have the following
       fields:
         1. the name of the option, with the leading "-" removed
         2. a space-separated list of option properties (*note Option
            properties::)
!        3. the help text to use for '--help' (omitted if the second field
!           contains the 'Undocumented' property).
  
       By default, all options beginning with "f", "g", "W" or "m" are
       implicitly assumed to take a "no-" form.  This form should not be
       listed separately.  If an option beginning with one of these
       letters does not have a "no-" form, you can use the
!      'RejectNegative' property to reject it.
  
       The help text is automatically line-wrapped before being displayed.
       Normally the name of the option is printed on the left-hand side of
--- 7495,7622 ----
  
   The files can contain the following types of record:
  
!    • A language definition record.  These records have two fields: the
!      string ‘Language’ and the name of the language.  Once a language
       has been declared in this way, it can be used as an option
       property.  *Note Option properties::.
  
!    • A target specific save record to save additional information.
!      These records have two fields: the string ‘TargetSave’, and a
!      declaration type to go in the ‘cl_target_option’ structure.
  
!    • A variable record to define a variable used to store option
!      information.  These records have two fields: the string ‘Variable’,
       and a declaration of the type and name of the variable, optionally
!      with an initializer (but without any trailing ‘;’).  These records
       may be used for variables used for many options where declaring the
       initializer in a single option definition record, or duplicating it
       in many records, would be inappropriate, or for variables set in
!      option handlers rather than referenced by ‘Var’ properties.
  
!    • A variable record to define a variable used to store option
       information.  These records have two fields: the string
!      ‘TargetVariable’, and a declaration of the type and name of the
       variable, optionally with an initializer (but without any trailing
!      ‘;’).  ‘TargetVariable’ is a combination of ‘Variable’ and
!      ‘TargetSave’ records in that the variable is defined in the
!      ‘gcc_options’ structure, but these variables are also stored in the
!      ‘cl_target_option’ structure.  The variables are saved in the
       target save code and restored in the target restore code.
  
!    • A variable record to record any additional files that the
!      ‘options.h’ file should include.  This is useful to provide
       enumeration or structure definitions needed for target variables.
!      These records have two fields: the string ‘HeaderInclude’ and the
       name of the include file.
  
!    • A variable record to record any additional files that the
!      ‘options.cc’ or ‘options-save.cc’ file should include.  This is
       useful to provide inline functions needed for target variables
!      and/or ‘#ifdef’ sequences to properly set up the initialization.
!      These records have two fields: the string ‘SourceInclude’ and the
       name of the include file.
  
!    • An enumeration record to define a set of strings that may be used
       as arguments to an option or options.  These records have three
!      fields: the string ‘Enum’, a space-separated list of properties and
!      help text used to describe the set of strings in ‘--help’ output.
       Properties use the same format as option properties; the following
       are valid:
!      ‘Name(NAME)’
            This property is required; NAME must be a name (suitable for
            use in C identifiers) used to identify the set of strings in
!           ‘Enum’ option properties.
  
!      ‘Type(TYPE)’
            This property is required; TYPE is the C type for variables
!           set by options using this enumeration together with ‘Var’.
  
!      ‘UnknownError(MESSAGE)’
            The message MESSAGE will be used as an error message if the
!           argument is invalid; for enumerations without ‘UnknownError’,
            a generic error message is used.  MESSAGE should contain a
!           single ‘%qs’ format, which will be used to format the invalid
            argument.
  
!    • An enumeration value record to define one of the strings in a set
!      given in an ‘Enum’ record.  These records have two fields: the
!      string ‘EnumValue’ and a space-separated list of properties.
       Properties use the same format as option properties; the following
       are valid:
!      ‘Enum(NAME)’
!           This property is required; NAME says which ‘Enum’ record this
!           ‘EnumValue’ record corresponds to.
  
!      ‘String(STRING)’
            This property is required; STRING is the string option
            argument being described by this record.
  
!      ‘Value(VALUE)’
            This property is required; it says what value (representable
!           as ‘int’) should be used for the given string.
  
!      ‘Canonical’
            This property is optional.  If present, it says the present
            string is the canonical one among all those with the given
            value.  Other strings yielding that value will be mapped to
            this one so specs do not need to handle them.
  
!      ‘DriverOnly’
            This property is optional.  If present, the present string
            will only be accepted by the driver.  This is used for cases
!           such as ‘-march=native’ that are processed by the driver so
!           that ‘gcc -v’ shows how the options chosen depended on the
            system on which the compiler was run.
  
!      ‘Set(NUMBER)’
            This property is optional, required for enumerations used in
!           ‘EnumSet’ options.  NUMBER should be decimal number between 1
            and 64 inclusive and divides the enumeration into a set of
            sets of mutually exclusive arguments.  Arguments with the same
            NUMBER can't be specified together in the same option, but
            arguments with different NUMBER can.  VALUE needs to be chosen
            such that a mask of all VALUE values from the same set NUMBER
            bitwise ored doesn't overlap with masks for other sets.  When
!           ‘-foption=arg_from_set1,arg_from_set4’ and
!           ‘-fno-option=arg_from_set3’ are used, the effect is that
!           previous value of the ‘Var’ will get bits from set 1 and 4
!           masks cleared, ored ‘Value’ of ‘arg_from_set1’ and
!           ‘arg_from_set4’ and then will get bits from set 3 mask
            cleared.
  
!    • An option definition record.  These records have the following
       fields:
         1. the name of the option, with the leading "-" removed
         2. a space-separated list of option properties (*note Option
            properties::)
!        3. the help text to use for ‘--help’ (omitted if the second field
!           contains the ‘Undocumented’ property).
  
       By default, all options beginning with "f", "g", "W" or "m" are
       implicitly assumed to take a "no-" form.  This form should not be
       listed separately.  If an option beginning with one of these
       letters does not have a "no-" form, you can use the
!      ‘RejectNegative’ property to reject it.
  
       The help text is automatically line-wrapped before being displayed.
       Normally the name of the option is printed on the left-hand side of
*************** semicolon.
*** 7629,7646 ****
       generic description that is correct for all of them.
  
       If an option has multiple option definition records (in different
!      front ends' '*.opt' files, and/or 'gcc/common.opt', for example),
       convention is to not duplicate the help text for each of them, but
!      instead put a comment like '; documented in common.opt' in place of
       the help text for all but one of the multiple option definition
       records.
  
!    * A target mask record.  These records have one field of the form
!      'Mask(X)'.  The options-processing script will automatically
!      allocate a bit in 'target_flags' (*note Run-time Target::) for each
!      mask name X and set the macro 'MASK_X' to the appropriate bitmask.
!      It will also declare a 'TARGET_X' macro that has the value 1 when
!      bit 'MASK_X' is set and 0 otherwise.
  
       They are primarily intended to declare target masks that are not
       associated with user options, either because these masks represent
--- 7631,7648 ----
       generic description that is correct for all of them.
  
       If an option has multiple option definition records (in different
!      front ends' ‘*.opt’ files, and/or ‘gcc/common.opt’, for example),
       convention is to not duplicate the help text for each of them, but
!      instead put a comment like ‘; documented in common.opt’ in place of
       the help text for all but one of the multiple option definition
       records.
  
!    • A target mask record.  These records have one field of the form
!      ‘Mask(X)’.  The options-processing script will automatically
!      allocate a bit in ‘target_flags’ (*note Run-time Target::) for each
!      mask name X and set the macro ‘MASK_X’ to the appropriate bitmask.
!      It will also declare a ‘TARGET_X’ macro that has the value 1 when
!      bit ‘MASK_X’ is set and 0 otherwise.
  
       They are primarily intended to declare target masks that are not
       associated with user options, either because these masks represent
*************** demarcate it, e.g.:
*** 7663,8050 ****
  
       Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
  
! 'Common'
       The option is available for all languages and targets.
  
! 'Target'
       The option is available for all languages but is target-specific.
  
! 'Driver'
       The option is handled by the compiler driver using code not shared
!      with the compilers proper ('cc1' etc.).
  
! 'LANGUAGE'
       The option is available when compiling for the given language.
  
       It is possible to specify several different languages for the same
       option.  Each LANGUAGE must have been declared by an earlier
!      'Language' record.  *Note Option file format::.
  
! 'RejectDriver'
!      The option is only handled by the compilers proper ('cc1' etc.) and
       should not be accepted by the driver.
  
! 'RejectNegative'
       The option does not have a "no-" form.  All options beginning with
       "f", "g", "W" or "m" are assumed to have a "no-" form unless this
       property is used.
  
! 'Negative(OTHERNAME)'
       The option will turn off another option OTHERNAME, which is the
       option name with the leading "-" removed.  This chain action will
!      propagate through the 'Negative' property of the option to be
       turned off.  The driver will prune options, removing those that are
       turned off by some later option.  This pruning is not done for
!      options with 'Joined' or 'JoinedOrMissing' properties, unless the
!      options have both the 'RejectNegative' property and the 'Negative'
       property mentions itself.
  
       As a consequence, if you have a group of mutually-exclusive
!      options, their 'Negative' properties should form a circular chain.
!      For example, if options '-A', '-B' and '-C' are mutually exclusive,
!      their respective 'Negative' properties should be 'Negative(B)',
!      'Negative(C)' and 'Negative(A)'.
  
! 'Joined'
! 'Separate'
!      The option takes a mandatory argument.  'Joined' indicates that the
!      option and argument can be included in the same 'argv' entry (as
!      with '-mflush-func=NAME', for example).  'Separate' indicates that
!      the option and argument can be separate 'argv' entries (as with
!      '-o').  An option is allowed to have both of these properties.
  
! 'JoinedOrMissing'
       The option takes an optional argument.  If the argument is given,
!      it will be part of the same 'argv' entry as the option itself.
  
!      This property cannot be used alongside 'Joined' or 'Separate'.
  
! 'MissingArgError(MESSAGE)'
!      For an option marked 'Joined' or 'Separate', the message MESSAGE
       will be used as an error message if the mandatory argument is
!      missing; for options without 'MissingArgError', a generic error
!      message is used.  MESSAGE should contain a single '%qs' format,
       which will be used to format the name of the option passed.
  
! 'Args(N)'
!      For an option marked 'Separate', indicate that it takes N
       arguments.  The default is 1.
  
! 'UInteger'
       The option's argument is a non-negative integer consisting of
!      either decimal or hexadecimal digits interpreted as 'int'.
!      Hexadecimal integers may optionally start with the '0x' or '0X'
       prefix.  The option parser validates and converts the argument
!      before passing it to the relevant option handler.  'UInteger'
!      should also be used with options like '-falign-loops' where both
!      '-falign-loops' and '-falign-loops'=N are supported to make sure
       the saved options are given a full integer.  Positive values of the
!      argument in excess of 'INT_MAX' wrap around zero.
  
! 'Host_Wide_Int'
       The option's argument is a non-negative integer consisting of
       either decimal or hexadecimal digits interpreted as the widest
!      integer type on the host.  As with an 'UInteger' argument,
!      hexadecimal integers may optionally start with the '0x' or '0X'
       prefix.  The option parser validates and converts the argument
!      before passing it to the relevant option handler.  'Host_Wide_Int'
       should be used with options that need to accept very large values.
!      Positive values of the argument in excess of 'HOST_WIDE_INT_M1U'
!      are assigned 'HOST_WIDE_INT_M1U'.
  
! 'IntegerRange(N, M)'
!      The options's arguments are integers of type 'int'.  The option's
       parser validates that the value of an option integer argument is
       within the closed range [N, M].
  
! 'ByteSize'
!      A property applicable only to 'UInteger' or 'Host_Wide_Int'
       arguments.  The option's integer argument is interpreted as if in
       infinite precision using saturation arithmetic in the corresponding
!      type.  The argument may be followed by a 'byte-size' suffix
!      designating a multiple of bytes such as 'kB' and 'KiB' for kilobyte
!      and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
!      mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on.
!      'ByteSize' should be used for with options that take a very large
!      argument representing a size in bytes, such as '-Wlarger-than='.
  
! 'ToLower'
       The option's argument should be converted to lowercase as part of
       putting it in canonical form, and before comparing with the strings
!      indicated by any 'Enum' property.
  
! 'NoDriverArg'
!      For an option marked 'Separate', the option only takes an argument
       in the compiler proper, not in the driver.  This is for
       compatibility with existing options that are used both directly and
!      via '-Wp,'; new options should not have this property.
  
! 'Var(VAR)'
       The state of this option should be stored in variable VAR (actually
!      a macro for 'global_options.x_VAR').  The way that the state is
       stored depends on the type of option:
  
!         * If the option uses the 'Mask' or 'InverseMask' properties, VAR
            is the integer variable that contains the mask.
  
!         * If the option is a normal on/off switch, VAR is an integer
            variable that is nonzero when the option is enabled.  The
            options parser will set the variable to 1 when the positive
            form of the option is used and 0 when the "no-" form is used.
  
!         * If the option takes an argument and has the 'UInteger'
            property, VAR is an integer variable that stores the value of
            the argument.
  
!         * If the option takes an argument and has the 'Enum' property,
!           VAR is a variable (type given in the 'Type' property of the
!           'Enum' record whose 'Name' property has the same argument as
!           the 'Enum' property of this option) that stores the value of
            the argument.
  
!         * If the option has the 'Defer' property, VAR is a pointer to a
!           'VEC(cl_deferred_option,heap)' that stores the option for
!           later processing.  (VAR is declared with type 'void *' and
!           needs to be cast to 'VEC(cl_deferred_option,heap)' before
            use.)
  
!         * Otherwise, if the option takes an argument, VAR is a pointer
            to the argument string.  The pointer will be null if the
            argument is optional and wasn't given.
  
       The option-processing script will usually zero-initialize VAR.  You
!      can modify this behavior using 'Init'.
  
! 'Var(VAR, SET)'
       The option controls an integer variable VAR and is active when VAR
       equals SET.  The option parser will set VAR to SET when the
!      positive form of the option is used and '!SET' when the "no-" form
       is used.
  
       VAR is declared in the same way as for the single-argument form
       described above.
  
! 'Init(VALUE)'
!      The variable specified by the 'Var' property should be statically
       initialized to VALUE.  If more than one option using the same
!      variable specifies 'Init', all must specify the same initializer.
  
! 'WarnRemoved'
       The option is removed and every usage of such option will result in
       a warning.  We use it option backward compatibility.
  
! 'Mask(NAME)'
!      The option is associated with a bit in the 'target_flags' variable
       (*note Run-time Target::) and is active when that bit is set.  You
!      may also specify 'Var' to select a variable other than
!      'target_flags'.
  
       The options-processing script will automatically allocate a unique
!      bit for the option.  If the option is attached to 'target_flags' or
!      'Var' which is defined by 'TargetVariable', the script will set the
!      macro 'MASK_NAME' to the appropriate bitmask.  It will also declare
!      a 'TARGET_NAME', 'TARGET_NAME_P' and 'TARGET_NAME_OPTS_P':
!      'TARGET_NAME' macros that has the value 1 when the option is active
!      and 0 otherwise, 'TARGET_NAME_P' is similar to 'TARGET_NAME' but
!      take an argument as 'target_flags' or 'TargetVariable', and
!      'TARGET_NAME_OPTS_P' also similar to 'TARGET_NAME' but take an
!      argument as 'gcc_options'.  If you use 'Var' to attach the option
!      to a different variable which is not defined by 'TargetVariable',
!      the bitmask macro with be called 'OPTION_MASK_NAME'.
  
! 'InverseMask(OTHERNAME)'
! 'InverseMask(OTHERNAME, THISNAME)'
       The option is the inverse of another option that has the
!      'Mask(OTHERNAME)' property.  If THISNAME is given, the
!      options-processing script will declare 'TARGET_THISNAME',
!      'TARGET_NAME_P' and 'TARGET_NAME_OPTS_P' macros: 'TARGET_THISNAME'
!      is 1 when the option is active and 0 otherwise, 'TARGET_NAME_P' is
!      similar to 'TARGET_NAME' but takes an argument as 'target_flags',
!      and 'TARGET_NAME_OPTS_P' is also similar to 'TARGET_NAME' but takes
!      an argument as 'gcc_options'.
  
! 'Enum(NAME)'
       The option's argument is a string from the set of strings
!      associated with the corresponding 'Enum' record.  The string is
       checked and converted to the integer specified in the corresponding
!      'EnumValue' record before being passed to option handlers.
  
! 'EnumSet'
!      Must be used together with the 'Enum(NAME)' property.
!      Corresponding 'Enum' record must use 'Set' properties.  The
       option's argument is either a string from the set like for
!      'Enum(NAME)', but with a slightly different behavior that the whole
!      'Var' isn't overwritten, but only the bits in all the enumeration
       values with the same set bitwise ored together.  Or option's
       argument can be a comma separated list of strings where each string
!      is from a different 'Set(NUMBER)'.
  
! 'EnumBitSet'
!      Must be used together with the 'Enum(NAME)' property.  Similar to
!      'EnumSet', but corresponding 'Enum' record must not use 'Set'
!      properties, each 'EnumValue' should have 'Value' that is a power of
       2, each value is treated as its own set and its value as the set's
       mask, so there are no mutually exclusive arguments.
  
! 'Defer'
!      The option should be stored in a vector, specified with 'Var', for
       later processing.
  
! 'Alias(OPT)'
! 'Alias(OPT, ARG)'
! 'Alias(OPT, POSARG, NEGARG)'
!      The option is an alias for '-OPT' (or the negative form of that
!      option, depending on 'NegativeAlias').  In the first form, any
!      argument passed to the alias is considered to be passed to '-OPT',
!      and '-OPT' is considered to be negated if the alias is used in
       negated form.  In the second form, the alias may not be negated or
       have an argument, and POSARG is considered to be passed as an
!      argument to '-OPT'.  In the third form, the alias may not have an
       argument, if the alias is used in the positive form then POSARG is
!      considered to be passed to '-OPT', and if the alias is used in the
!      negative form then NEGARG is considered to be passed to '-OPT'.
  
!      Aliases should not specify 'Var' or 'Mask' or 'UInteger'.  Aliases
       should normally specify the same languages as the target of the
       alias; the flags on the target will be used to determine any
       diagnostic for use of an option for the wrong language, while those
       on the alias will be used to identify what command-line text is the
       option and what text is any argument to that option.
  
!      When an 'Alias' definition is used for an option, driver specs do
!      not need to handle it and no 'OPT_' enumeration value is defined
       for it; only the canonical form of the option will be seen in those
       places.
  
! 'NegativeAlias'
!      For an option marked with 'Alias(OPT)', the option is considered to
!      be an alias for the positive form of '-OPT' if negated and for the
!      negative form of '-OPT' if not negated.  'NegativeAlias' may not be
!      used with the forms of 'Alias' taking more than one argument.
  
! 'Ignore'
       This option is ignored apart from printing any warning specified
!      using 'Warn'.  The option will not be seen by specs and no 'OPT_'
       enumeration value is defined for it.
  
! 'SeparateAlias'
!      For an option marked with 'Joined', 'Separate' and 'Alias', the
       option only acts as an alias when passed a separate argument; with
!      a joined argument it acts as a normal option, with an 'OPT_'
!      enumeration value.  This is for compatibility with the Java '-d'
       option and should not be used for new options.
  
! 'Warn(MESSAGE)'
       If this option is used, output the warning MESSAGE.  MESSAGE is a
!      format string, either taking a single operand with a '%qs' format
       which is the option name, or not taking any operands, which is
!      passed to the 'warning' function.  If an alias is marked 'Warn',
!      the target of the alias must not also be marked 'Warn'.
  
! 'Warning'
!      This is a warning option and should be shown as such in '--help'
       output.  This flag does not currently affect anything other than
!      '--help'.
  
! 'Optimization'
       This is an optimization option.  It should be shown as such in
!      '--help' output, and any associated variable named using 'Var'
       should be saved and restored when the optimization level is changed
!      with 'optimize' attributes.
  
! 'PerFunction'
       This is an option that can be overridden on a per-function basis.
!      'Optimization' implies 'PerFunction', but options that do not
       affect executable code generation may use this flag instead, so
       that the option is not taken into account in ways that might affect
       executable code generation.
  
! 'Param'
       This is an option that is a parameter.
  
! 'Undocumented'
       The option is deliberately missing documentation and should not be
!      included in the '--help' output.
  
! 'Condition(COND)'
       The option should only be accepted if preprocessor condition COND
       is true.  Note that any C declarations associated with the option
       will be present even if COND is false; COND simply controls whether
!      the option is accepted and whether it is printed in the '--help'
       output.
  
! 'Save'
!      Build the 'cl_target_option' structure to hold a copy of the
!      option, add the functions 'cl_target_option_save' and
!      'cl_target_option_restore' to save and restore the options.
  
! 'SetByCombined'
       The option may also be set by a combined option such as
!      '-ffast-math'.  This causes the 'gcc_options' struct to have a
!      field 'frontend_set_NAME', where 'NAME' is the name of the field
!      holding the value of this option (without the leading 'x_').  This
       gives the front end a way to indicate that the value has been set
       explicitly and should not be changed by the combined option.  For
!      example, some front ends use this to prevent '-ffast-math' and
!      '-fno-fast-math' from changing the value of '-fmath-errno' for
!      languages that do not use 'errno'.
  
! 'EnabledBy(OPT)'
! 'EnabledBy(OPT || OPT2)'
! 'EnabledBy(OPT && OPT2)'
!      If not explicitly set, the option is set to the value of '-OPT';
!      multiple options can be given, separated by '||'.  The third form
!      using '&&' specifies that the option is only set if both OPT and
!      OPT2 are set.  The options OPT and OPT2 must have the 'Common'
!      property; otherwise, use 'LangEnabledBy'.
  
! 'LangEnabledBy(LANGUAGE, OPT)'
! 'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)'
       When compiling for the given language, the option is set to the
!      value of '-OPT', if not explicitly set.  OPT can be also a list of
!      '||' separated options.  In the second form, if OPT is used in the
       positive form then POSARG is considered to be passed to the option,
       and if OPT is used in the negative form then NEGARG is considered
       to be passed to the option.  It is possible to specify several
       different languages.  Each LANGUAGE must have been declared by an
!      earlier 'Language' record.  *Note Option file format::.
  
! 'NoDWARFRecord'
       The option is omitted from the producer string written by
!      '-grecord-gcc-switches'.
  
! 'PchIgnore'
       Even if this is a target option, this option will not be recorded /
       compared to determine if a precompiled header file matches.
  
! 'CPP(VAR)'
       The state of this option should be kept in sync with the
       preprocessor option VAR.  If this property is set, then properties
!      'Var' and 'Init' must be set as well.
  
! 'CppReason(CPP_W_ENUM)'
!      This warning option corresponds to 'cpplib.h' warning reason code
       CPP_W_ENUM.  This should only be used for warning options of the
       C-family front-ends.
  
! 'UrlSuffix(URL_SUFFIX)'
!      Adjacent to each human-written '.opt' file in the source tree is a
!      corresponding file with a '.opt.urls' extension.  These files
!      contain 'UrlSuffix' directives giving the ending part of the URL
       for the documentation of the option, such as:
  
            Wabi-tag
            UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
  
!      These URL suffixes are relative to 'DOCUMENTATION_ROOT_URL'.
  
!      There files are generated from the '.opt' files and the generated
!      HTML documentation by 'regenerate-opt-urls.py', and should be
!      regenerated when adding new options, via manually invoking 'make
!      regenerate-opt-urls'.
  
! 'LangUrlSuffix_LANG(URL_SUFFIX)'
!      In addition to 'UrlSuffix' directives, 'regenerate-opt-urls.py' can
       generate language-specific URLs, such as:
  
            LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
--- 7665,8052 ----
  
       Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
  
! ‘Common’
       The option is available for all languages and targets.
  
! ‘Target’
       The option is available for all languages but is target-specific.
  
! ‘Driver’
       The option is handled by the compiler driver using code not shared
!      with the compilers proper (‘cc1’ etc.).
  
! ‘LANGUAGE’
       The option is available when compiling for the given language.
  
       It is possible to specify several different languages for the same
       option.  Each LANGUAGE must have been declared by an earlier
!      ‘Language’ record.  *Note Option file format::.
  
! ‘RejectDriver’
!      The option is only handled by the compilers proper (‘cc1’ etc.) and
       should not be accepted by the driver.
  
! ‘RejectNegative’
       The option does not have a "no-" form.  All options beginning with
       "f", "g", "W" or "m" are assumed to have a "no-" form unless this
       property is used.
  
! ‘Negative(OTHERNAME)’
       The option will turn off another option OTHERNAME, which is the
       option name with the leading "-" removed.  This chain action will
!      propagate through the ‘Negative’ property of the option to be
       turned off.  The driver will prune options, removing those that are
       turned off by some later option.  This pruning is not done for
!      options with ‘Joined’ or ‘JoinedOrMissing’ properties, unless the
!      options have both the ‘RejectNegative’ property and the ‘Negative’
       property mentions itself.
  
       As a consequence, if you have a group of mutually-exclusive
!      options, their ‘Negative’ properties should form a circular chain.
!      For example, if options ‘-A’, ‘-B’ and ‘-C’ are mutually exclusive,
!      their respective ‘Negative’ properties should be ‘Negative(B)’,
!      ‘Negative(C)’ and ‘Negative(A)’.
  
! ‘Joined’
! ‘Separate’
!      The option takes a mandatory argument.  ‘Joined’ indicates that the
!      option and argument can be included in the same ‘argv’ entry (as
!      with ‘-mflush-func=NAME’, for example).  ‘Separate’ indicates that
!      the option and argument can be separate ‘argv’ entries (as with
!      ‘-o’).  An option is allowed to have both of these properties.
  
! ‘JoinedOrMissing’
       The option takes an optional argument.  If the argument is given,
!      it will be part of the same ‘argv’ entry as the option itself.
  
!      This property cannot be used alongside ‘Joined’ or ‘Separate’.
  
! ‘MissingArgError(MESSAGE)’
!      For an option marked ‘Joined’ or ‘Separate’, the message MESSAGE
       will be used as an error message if the mandatory argument is
!      missing; for options without ‘MissingArgError’, a generic error
!      message is used.  MESSAGE should contain a single ‘%qs’ format,
       which will be used to format the name of the option passed.
  
! ‘Args(N)’
!      For an option marked ‘Separate’, indicate that it takes N
       arguments.  The default is 1.
  
! ‘UInteger’
       The option's argument is a non-negative integer consisting of
!      either decimal or hexadecimal digits interpreted as ‘int’.
!      Hexadecimal integers may optionally start with the ‘0x’ or ‘0X’
       prefix.  The option parser validates and converts the argument
!      before passing it to the relevant option handler.  ‘UInteger’
!      should also be used with options like ‘-falign-loops’ where both
!      ‘-falign-loops’ and ‘-falign-loops’=N are supported to make sure
       the saved options are given a full integer.  Positive values of the
!      argument in excess of ‘INT_MAX’ wrap around zero.
  
! ‘Host_Wide_Int’
       The option's argument is a non-negative integer consisting of
       either decimal or hexadecimal digits interpreted as the widest
!      integer type on the host.  As with an ‘UInteger’ argument,
!      hexadecimal integers may optionally start with the ‘0x’ or ‘0X’
       prefix.  The option parser validates and converts the argument
!      before passing it to the relevant option handler.  ‘Host_Wide_Int’
       should be used with options that need to accept very large values.
!      Positive values of the argument in excess of ‘HOST_WIDE_INT_M1U’
!      are assigned ‘HOST_WIDE_INT_M1U’.
  
! ‘IntegerRange(N, M)’
!      The options's arguments are integers of type ‘int’.  The option's
       parser validates that the value of an option integer argument is
       within the closed range [N, M].
  
! ‘ByteSize’
!      A property applicable only to ‘UInteger’ or ‘Host_Wide_Int’
       arguments.  The option's integer argument is interpreted as if in
       infinite precision using saturation arithmetic in the corresponding
!      type.  The argument may be followed by a ‘byte-size’ suffix
!      designating a multiple of bytes such as ‘kB’ and ‘KiB’ for kilobyte
!      and kibibyte, respectively, ‘MB’ and ‘MiB’ for megabyte and
!      mebibyte, ‘GB’ and ‘GiB’ for gigabyte and gigibyte, and so on.
!      ‘ByteSize’ should be used for with options that take a very large
!      argument representing a size in bytes, such as ‘-Wlarger-than=’.
  
! ‘ToLower’
       The option's argument should be converted to lowercase as part of
       putting it in canonical form, and before comparing with the strings
!      indicated by any ‘Enum’ property.
  
! ‘NoDriverArg’
!      For an option marked ‘Separate’, the option only takes an argument
       in the compiler proper, not in the driver.  This is for
       compatibility with existing options that are used both directly and
!      via ‘-Wp,’; new options should not have this property.
  
! ‘Var(VAR)’
       The state of this option should be stored in variable VAR (actually
!      a macro for ‘global_options.x_VAR’).  The way that the state is
       stored depends on the type of option:
  
!         • If the option uses the ‘Mask’ or ‘InverseMask’ properties, VAR
            is the integer variable that contains the mask.
  
!         • If the option is a normal on/off switch, VAR is an integer
            variable that is nonzero when the option is enabled.  The
            options parser will set the variable to 1 when the positive
            form of the option is used and 0 when the "no-" form is used.
  
!         • If the option takes an argument and has the ‘UInteger’
            property, VAR is an integer variable that stores the value of
            the argument.
  
!         • If the option takes an argument and has the ‘Enum’ property,
!           VAR is a variable (type given in the ‘Type’ property of the
!           ‘Enum’ record whose ‘Name’ property has the same argument as
!           the ‘Enum’ property of this option) that stores the value of
            the argument.
  
!         • If the option has the ‘Defer’ property, VAR is a pointer to a
!           ‘VEC(cl_deferred_option,heap)’ that stores the option for
!           later processing.  (VAR is declared with type ‘void *’ and
!           needs to be cast to ‘VEC(cl_deferred_option,heap)’ before
            use.)
  
!         • Otherwise, if the option takes an argument, VAR is a pointer
            to the argument string.  The pointer will be null if the
            argument is optional and wasn't given.
  
       The option-processing script will usually zero-initialize VAR.  You
!      can modify this behavior using ‘Init’.
  
! ‘Var(VAR, SET)’
       The option controls an integer variable VAR and is active when VAR
       equals SET.  The option parser will set VAR to SET when the
!      positive form of the option is used and ‘!SET’ when the "no-" form
       is used.
  
       VAR is declared in the same way as for the single-argument form
       described above.
  
! ‘Init(VALUE)’
!      The variable specified by the ‘Var’ property should be statically
       initialized to VALUE.  If more than one option using the same
!      variable specifies ‘Init’, all must specify the same initializer.
  
! ‘WarnRemoved’
       The option is removed and every usage of such option will result in
       a warning.  We use it option backward compatibility.
  
! ‘Mask(NAME)’
!      The option is associated with a bit in the ‘target_flags’ variable
       (*note Run-time Target::) and is active when that bit is set.  You
!      may also specify ‘Var’ to select a variable other than
!      ‘target_flags’.
  
       The options-processing script will automatically allocate a unique
!      bit for the option.  If the option is attached to ‘target_flags’ or
!      ‘Var’ which is defined by ‘TargetVariable’, the script will set the
!      macro ‘MASK_NAME’ to the appropriate bitmask.  It will also declare
!      a ‘TARGET_NAME’, ‘TARGET_NAME_P’ and ‘TARGET_NAME_OPTS_P’:
!      ‘TARGET_NAME’ macros that has the value 1 when the option is active
!      and 0 otherwise, ‘TARGET_NAME_P’ is similar to ‘TARGET_NAME’ but
!      take an argument as ‘target_flags’ or ‘TargetVariable’, and
!      ‘TARGET_NAME_OPTS_P’ also similar to ‘TARGET_NAME’ but take an
!      argument as ‘gcc_options’.  If you use ‘Var’ to attach the option
!      to a different variable which is not defined by ‘TargetVariable’,
!      the bitmask macro with be called ‘OPTION_MASK_NAME’.
  
! ‘InverseMask(OTHERNAME)’
! ‘InverseMask(OTHERNAME, THISNAME)’
       The option is the inverse of another option that has the
!      ‘Mask(OTHERNAME)’ property.  If THISNAME is given, the
!      options-processing script will declare ‘TARGET_THISNAME’,
!      ‘TARGET_NAME_P’ and ‘TARGET_NAME_OPTS_P’ macros: ‘TARGET_THISNAME’
!      is 1 when the option is active and 0 otherwise, ‘TARGET_NAME_P’ is
!      similar to ‘TARGET_NAME’ but takes an argument as ‘target_flags’,
!      and ‘TARGET_NAME_OPTS_P’ is also similar to ‘TARGET_NAME’ but takes
!      an argument as ‘gcc_options’.
  
! ‘Enum(NAME)’
       The option's argument is a string from the set of strings
!      associated with the corresponding ‘Enum’ record.  The string is
       checked and converted to the integer specified in the corresponding
!      ‘EnumValue’ record before being passed to option handlers.
  
! ‘EnumSet’
!      Must be used together with the ‘Enum(NAME)’ property.
!      Corresponding ‘Enum’ record must use ‘Set’ properties.  The
       option's argument is either a string from the set like for
!      ‘Enum(NAME)’, but with a slightly different behavior that the whole
!      ‘Var’ isn't overwritten, but only the bits in all the enumeration
       values with the same set bitwise ored together.  Or option's
       argument can be a comma separated list of strings where each string
!      is from a different ‘Set(NUMBER)’.
  
! ‘EnumBitSet’
!      Must be used together with the ‘Enum(NAME)’ property.  Similar to
!      ‘EnumSet’, but corresponding ‘Enum’ record must not use ‘Set’
!      properties, each ‘EnumValue’ should have ‘Value’ that is a power of
       2, each value is treated as its own set and its value as the set's
       mask, so there are no mutually exclusive arguments.
  
! ‘Defer’
!      The option should be stored in a vector, specified with ‘Var’, for
       later processing.
  
! ‘Alias(OPT)’
! ‘Alias(OPT, ARG)’
! ‘Alias(OPT, POSARG, NEGARG)’
!      The option is an alias for ‘-OPT’ (or the negative form of that
!      option, depending on ‘NegativeAlias’).  In the first form, any
!      argument passed to the alias is considered to be passed to ‘-OPT’,
!      and ‘-OPT’ is considered to be negated if the alias is used in
       negated form.  In the second form, the alias may not be negated or
       have an argument, and POSARG is considered to be passed as an
!      argument to ‘-OPT’.  In the third form, the alias may not have an
       argument, if the alias is used in the positive form then POSARG is
!      considered to be passed to ‘-OPT’, and if the alias is used in the
!      negative form then NEGARG is considered to be passed to ‘-OPT’.
  
!      Aliases should not specify ‘Var’ or ‘Mask’ or ‘UInteger’.  Aliases
       should normally specify the same languages as the target of the
       alias; the flags on the target will be used to determine any
       diagnostic for use of an option for the wrong language, while those
       on the alias will be used to identify what command-line text is the
       option and what text is any argument to that option.
  
!      When an ‘Alias’ definition is used for an option, driver specs do
!      not need to handle it and no ‘OPT_’ enumeration value is defined
       for it; only the canonical form of the option will be seen in those
       places.
  
! ‘NegativeAlias’
!      For an option marked with ‘Alias(OPT)’, the option is considered to
!      be an alias for the positive form of ‘-OPT’ if negated and for the
!      negative form of ‘-OPT’ if not negated.  ‘NegativeAlias’ may not be
!      used with the forms of ‘Alias’ taking more than one argument.
  
! ‘Ignore’
       This option is ignored apart from printing any warning specified
!      using ‘Warn’.  The option will not be seen by specs and no ‘OPT_’
       enumeration value is defined for it.
  
! ‘SeparateAlias’
!      For an option marked with ‘Joined’, ‘Separate’ and ‘Alias’, the
       option only acts as an alias when passed a separate argument; with
!      a joined argument it acts as a normal option, with an ‘OPT_’
!      enumeration value.  This is for compatibility with the Java ‘-d’
       option and should not be used for new options.
  
! ‘Warn(MESSAGE)’
       If this option is used, output the warning MESSAGE.  MESSAGE is a
!      format string, either taking a single operand with a ‘%qs’ format
       which is the option name, or not taking any operands, which is
!      passed to the ‘warning’ function.  If an alias is marked ‘Warn’,
!      the target of the alias must not also be marked ‘Warn’.
  
! ‘Warning’
!      This is a warning option and should be shown as such in ‘--help’
       output.  This flag does not currently affect anything other than
!      ‘--help’.
  
! ‘Optimization’
       This is an optimization option.  It should be shown as such in
!      ‘--help’ output, and any associated variable named using ‘Var’
       should be saved and restored when the optimization level is changed
!      with ‘optimize’ attributes.
  
! ‘PerFunction’
       This is an option that can be overridden on a per-function basis.
!      ‘Optimization’ implies ‘PerFunction’, but options that do not
       affect executable code generation may use this flag instead, so
       that the option is not taken into account in ways that might affect
       executable code generation.
  
! ‘Param’
       This is an option that is a parameter.
  
! ‘Undocumented’
       The option is deliberately missing documentation and should not be
!      included in the ‘--help’ output.
  
! ‘Condition(COND)’
       The option should only be accepted if preprocessor condition COND
       is true.  Note that any C declarations associated with the option
       will be present even if COND is false; COND simply controls whether
!      the option is accepted and whether it is printed in the ‘--help’
       output.
  
! ‘Save’
!      Build the ‘cl_target_option’ structure to hold a copy of the
!      option, add the functions ‘cl_target_option_save’ and
!      ‘cl_target_option_restore’ to save and restore the options.
  
! ‘SetByCombined’
       The option may also be set by a combined option such as
!      ‘-ffast-math’.  This causes the ‘gcc_options’ struct to have a
!      field ‘frontend_set_NAME’, where ‘NAME’ is the name of the field
!      holding the value of this option (without the leading ‘x_’).  This
       gives the front end a way to indicate that the value has been set
       explicitly and should not be changed by the combined option.  For
!      example, some front ends use this to prevent ‘-ffast-math’ and
!      ‘-fno-fast-math’ from changing the value of ‘-fmath-errno’ for
!      languages that do not use ‘errno’.
  
! ‘EnabledBy(OPT)’
! ‘EnabledBy(OPT || OPT2)’
! ‘EnabledBy(OPT && OPT2)’
!      If not explicitly set, the option is set to the value of ‘-OPT’;
!      multiple options can be given, separated by ‘||’.  The third form
!      using ‘&&’ specifies that the option is only set if both OPT and
!      OPT2 are set.  The options OPT and OPT2 must have the ‘Common’
!      property; otherwise, use ‘LangEnabledBy’.
  
! ‘LangEnabledBy(LANGUAGE, OPT)’
! ‘LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)’
       When compiling for the given language, the option is set to the
!      value of ‘-OPT’, if not explicitly set.  OPT can be also a list of
!      ‘||’ separated options.  In the second form, if OPT is used in the
       positive form then POSARG is considered to be passed to the option,
       and if OPT is used in the negative form then NEGARG is considered
       to be passed to the option.  It is possible to specify several
       different languages.  Each LANGUAGE must have been declared by an
!      earlier ‘Language’ record.  *Note Option file format::.
  
! ‘NoDWARFRecord’
       The option is omitted from the producer string written by
!      ‘-grecord-gcc-switches’.
  
! ‘PchIgnore’
       Even if this is a target option, this option will not be recorded /
       compared to determine if a precompiled header file matches.
  
! ‘CPP(VAR)’
       The state of this option should be kept in sync with the
       preprocessor option VAR.  If this property is set, then properties
!      ‘Var’ and ‘Init’ must be set as well.
  
! ‘CppReason(CPP_W_ENUM)’
!      This warning option corresponds to ‘cpplib.h’ warning reason code
       CPP_W_ENUM.  This should only be used for warning options of the
       C-family front-ends.
  
! ‘UrlSuffix(URL_SUFFIX)’
!      Adjacent to each human-written ‘.opt’ file in the source tree is a
!      corresponding file with a ‘.opt.urls’ extension.  These files
!      contain ‘UrlSuffix’ directives giving the ending part of the URL
       for the documentation of the option, such as:
  
            Wabi-tag
            UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
  
!      These URL suffixes are relative to ‘DOCUMENTATION_ROOT_URL’.
  
!      There files are generated from the ‘.opt’ files and the generated
!      HTML documentation by ‘regenerate-opt-urls.py’, and should be
!      regenerated when adding new options, via manually invoking ‘make
!      regenerate-opt-urls’.
  
! ‘LangUrlSuffix_LANG(URL_SUFFIX)’
!      In addition to ‘UrlSuffix’ directives, ‘regenerate-opt-urls.py’ can
       generate language-specific URLs, such as:
  
            LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
*************** File: gccint.info,  Node: Parsing pass,
*** 8077,8086 ****
  ================
  
  The language front end is invoked only once, via
! 'lang_hooks.parse_file', to parse the entire input.  The language front
  end may use any intermediate language representation deemed appropriate.
  The C front end uses GENERIC trees (*note GENERIC::), plus a double
! handful of language specific tree codes defined in 'c-common.def'.  The
  Fortran front end uses a completely different private representation.
  
   At some point the front end must translate the representation used in
--- 8079,8088 ----
  ================
  
  The language front end is invoked only once, via
! ‘lang_hooks.parse_file’, to parse the entire input.  The language front
  end may use any intermediate language representation deemed appropriate.
  The C front end uses GENERIC trees (*note GENERIC::), plus a double
! handful of language specific tree codes defined in ‘c-common.def’.  The
  Fortran front end uses a completely different private representation.
  
   At some point the front end must translate the representation used in
*************** all be passed as well.
*** 8123,8131 ****
  
   In any case, the front end needs each complete top-level function or
  data declaration, and each data definition should be passed to
! 'rest_of_decl_compilation'.  Each complete type definition should be
! passed to 'rest_of_type_compilation'.  Each function definition should
! be passed to 'cgraph_finalize_function'.
  
   TODO: I know rest_of_compilation currently has all sorts of RTL
  generation semantics.  I plan to move all code generation bits (both
--- 8125,8133 ----
  
   In any case, the front end needs each complete top-level function or
  data declaration, and each data definition should be passed to
! ‘rest_of_decl_compilation’.  Each complete type definition should be
! passed to ‘rest_of_type_compilation’.  Each function definition should
! be passed to ‘cgraph_finalize_function’.
  
   TODO: I know rest_of_compilation currently has all sorts of RTL
  generation semantics.  I plan to move all code generation bits (both
*************** File: gccint.info,  Node: Gimplification
*** 8143,8149 ****
  9.2 Gimplification pass
  =======================
  
! "Gimplification" is a whimsical term for the process of converting the
  intermediate representation of a function into the GIMPLE language
  (*note GIMPLE::).  The term stuck, and so words like "gimplification",
  "gimplify", "gimplifier" and the like are sprinkled throughout this
--- 8145,8151 ----
  9.2 Gimplification pass
  =======================
  
! “Gimplification” is a whimsical term for the process of converting the
  intermediate representation of a function into the GIMPLE language
  (*note GIMPLE::).  The term stuck, and so words like "gimplification",
  "gimplify", "gimplifier" and the like are sprinkled throughout this
*************** intermediate language used by the front
*** 8155,8177 ****
  Usually it is easier to generate GENERIC trees plus extensions and let
  the language-independent gimplifier do most of the work.
  
!  The main entry point to this pass is 'gimplify_function_tree' located
! in 'gimplify.cc'.  From here we process the entire function gimplifying
  each statement in turn.  The main workhorse for this pass is
! 'gimplify_expr'.  Approximately everything passes through here at least
! once, and it is from here that we invoke the 'lang_hooks.gimplify_expr'
  callback.
  
   The callback should examine the expression in question and return
! 'GS_UNHANDLED' if the expression is not a language specific construct
  that requires attention.  Otherwise it should alter the expression in
  some way to such that forward progress is made toward producing valid
  GIMPLE.  If the callback is certain that the transformation is complete
! and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'.
! Otherwise it should return 'GS_OK', which will cause the expression to
  be processed again.  If the callback encounters an error during the
  transformation (because the front end is relying on the gimplification
! process to finish semantic checks), it should return 'GS_ERROR'.
  
  
  File: gccint.info,  Node: Pass manager,  Next: IPA passes,  Prev: Gimplification pass,  Up: Passes
--- 8157,8179 ----
  Usually it is easier to generate GENERIC trees plus extensions and let
  the language-independent gimplifier do most of the work.
  
!  The main entry point to this pass is ‘gimplify_function_tree’ located
! in ‘gimplify.cc’.  From here we process the entire function gimplifying
  each statement in turn.  The main workhorse for this pass is
! ‘gimplify_expr’.  Approximately everything passes through here at least
! once, and it is from here that we invoke the ‘lang_hooks.gimplify_expr’
  callback.
  
   The callback should examine the expression in question and return
! ‘GS_UNHANDLED’ if the expression is not a language specific construct
  that requires attention.  Otherwise it should alter the expression in
  some way to such that forward progress is made toward producing valid
  GIMPLE.  If the callback is certain that the transformation is complete
! and the expression is valid GIMPLE, it should return ‘GS_ALL_DONE’.
! Otherwise it should return ‘GS_OK’, which will cause the expression to
  be processed again.  If the callback encounters an error during the
  transformation (because the front end is relying on the gimplification
! process to finish semantic checks), it should return ‘GS_ERROR’.
  
  
  File: gccint.info,  Node: Pass manager,  Next: IPA passes,  Prev: Gimplification pass,  Up: Passes
*************** File: gccint.info,  Node: Pass manager,
*** 8179,8186 ****
  9.3 Pass manager
  ================
  
! The pass manager is located in 'passes.cc', 'tree-optimize.c' and
! 'tree-pass.h'.  It processes passes as described in 'passes.def'.  Its
  job is to run all of the individual passes in the correct order, and
  take care of standard bookkeeping that applies to every pass.
  
--- 8181,8188 ----
  9.3 Pass manager
  ================
  
! The pass manager is located in ‘passes.cc’, ‘tree-optimize.c’ and
! ‘tree-pass.h’.  It processes passes as described in ‘passes.def’.  Its
  job is to run all of the individual passes in the correct order, and
  take care of standard bookkeeping that applies to every pass.
  
*************** some particular order, and the pass mana
*** 8192,8198 ****
  happen in the correct order.
  
   The actuality doesn't completely live up to the theory at present.
! Command-line switches and 'timevar_id_t' enumerations must still be
  defined elsewhere.  The pass manager validates constraints but does not
  attempt to (re-)generate data structures or lower intermediate language
  form based on the requirements of the next pass.  Nevertheless, what is
--- 8194,8200 ----
  happen in the correct order.
  
   The actuality doesn't completely live up to the theory at present.
! Command-line switches and ‘timevar_id_t’ enumerations must still be
  defined elsewhere.  The pass manager validates constraints but does not
  attempt to (re-)generate data structures or lower intermediate language
  form based on the requirements of the next pass.  Nevertheless, what is
*************** File: gccint.info,  Node: Small IPA pass
*** 8240,8332 ****
  9.4.1 Small IPA passes
  ----------------------
  
! A small IPA pass is a pass derived from 'simple_ipa_opt_pass'.  As
  described in *note IPA::, it does everything at once and defines only
  the _Execute_ stage.  During this stage it accesses and modifies the
! function bodies.  No 'generate_summary', 'read_summary', or
! 'write_summary' hooks are defined.
  
!    * IPA free lang data
  
       This pass frees resources that are used by the front end but are
!      not needed once it is done.  It is located in 'tree.cc' and is
!      described by 'pass_ipa_free_lang_data'.
  
!    * IPA function and variable visibility
  
       This is a local function pass handling visibilities of all symbols.
!      This happens before LTO streaming, so '-fwhole-program' should be
!      ignored at this level.  It is located in 'ipa-visibility.cc' and is
!      described by 'pass_ipa_function_and_variable_visibility'.
  
!    * IPA remove symbols
  
       This pass performs reachability analysis and reclaims all
!      unreachable nodes.  It is located in 'passes.cc' and is described
!      by 'pass_ipa_remove_symbols'.
  
!    * IPA OpenACC
  
       This is a pass group for OpenACC processing.  It is located in
!      'tree-ssa-loop.cc' and is described by 'pass_ipa_oacc'.
  
!    * IPA points-to analysis
  
       This is a tree-based points-to analysis pass.  The idea behind this
       analyzer is to generate set constraints from the program, then
       solve the resulting constraints in order to generate the points-to
!      sets.  It is located in 'tree-ssa-structalias.cc' and is described
!      by 'pass_ipa_pta'.
  
!    * IPA OpenACC kernels
  
       This is a pass group for processing OpenACC kernels regions.  It is
       a subpass of the IPA OpenACC pass group that runs on offloaded
       functions containing OpenACC kernels loops.  It is located in
!      'tree-ssa-loop.cc' and is described by 'pass_ipa_oacc_kernels'.
  
!    * Target clone
  
       This is a pass for parsing functions with multiple target
!      attributes.  It is located in 'multiple_target.cc' and is described
!      by 'pass_target_clone'.
  
!    * IPA auto profile
  
       This pass uses AutoFDO profiling data to annotate the control flow
!      graph.  It is located in 'auto-profile.cc' and is described by
!      'pass_ipa_auto_profile'.
  
!    * IPA tree profile
  
       This pass does profiling for all functions in the call graph.  It
       calculates branch probabilities and basic block execution counts.
!      It is located in 'tree-profile.cc' and is described by
!      'pass_ipa_tree_profile'.
  
!    * IPA free function summary
  
!      This pass is a small IPA pass when argument 'small_p' is true.  It
       releases inline function summaries and call summaries.  It is
!      located in 'ipa-fnsummary.cc' and is described by
!      'pass_ipa_free_free_fn_summary'.
  
!    * IPA increase alignment
  
       This pass increases the alignment of global arrays to improve
!      vectorization.  It is located in 'tree-vectorizer.cc' and is
!      described by 'pass_ipa_increase_alignment'.
  
!    * IPA transactional memory
  
       This pass is for transactional memory support.  It is located in
!      'trans-mem.cc' and is described by 'pass_ipa_tm'.
  
!    * IPA lower emulated TLS
  
       This pass lowers thread-local storage (TLS) operations to emulation
!      functions provided by libgcc.  It is located in 'tree-emutls.cc'
!      and is described by 'pass_ipa_lower_emutls'.
  
  
  File: gccint.info,  Node: Regular IPA passes,  Next: Late IPA passes,  Prev: Small IPA passes,  Up: IPA passes
--- 8242,8334 ----
  9.4.1 Small IPA passes
  ----------------------
  
! A small IPA pass is a pass derived from ‘simple_ipa_opt_pass’.  As
  described in *note IPA::, it does everything at once and defines only
  the _Execute_ stage.  During this stage it accesses and modifies the
! function bodies.  No ‘generate_summary’, ‘read_summary’, or
! ‘write_summary’ hooks are defined.
  
!    • IPA free lang data
  
       This pass frees resources that are used by the front end but are
!      not needed once it is done.  It is located in ‘tree.cc’ and is
!      described by ‘pass_ipa_free_lang_data’.
  
!    • IPA function and variable visibility
  
       This is a local function pass handling visibilities of all symbols.
!      This happens before LTO streaming, so ‘-fwhole-program’ should be
!      ignored at this level.  It is located in ‘ipa-visibility.cc’ and is
!      described by ‘pass_ipa_function_and_variable_visibility’.
  
!    • IPA remove symbols
  
       This pass performs reachability analysis and reclaims all
!      unreachable nodes.  It is located in ‘passes.cc’ and is described
!      by ‘pass_ipa_remove_symbols’.
  
!    • IPA OpenACC
  
       This is a pass group for OpenACC processing.  It is located in
!      ‘tree-ssa-loop.cc’ and is described by ‘pass_ipa_oacc’.
  
!    • IPA points-to analysis
  
       This is a tree-based points-to analysis pass.  The idea behind this
       analyzer is to generate set constraints from the program, then
       solve the resulting constraints in order to generate the points-to
!      sets.  It is located in ‘tree-ssa-structalias.cc’ and is described
!      by ‘pass_ipa_pta’.
  
!    • IPA OpenACC kernels
  
       This is a pass group for processing OpenACC kernels regions.  It is
       a subpass of the IPA OpenACC pass group that runs on offloaded
       functions containing OpenACC kernels loops.  It is located in
!      ‘tree-ssa-loop.cc’ and is described by ‘pass_ipa_oacc_kernels’.
  
!    • Target clone
  
       This is a pass for parsing functions with multiple target
!      attributes.  It is located in ‘multiple_target.cc’ and is described
!      by ‘pass_target_clone’.
  
!    • IPA auto profile
  
       This pass uses AutoFDO profiling data to annotate the control flow
!      graph.  It is located in ‘auto-profile.cc’ and is described by
!      ‘pass_ipa_auto_profile’.
  
!    • IPA tree profile
  
       This pass does profiling for all functions in the call graph.  It
       calculates branch probabilities and basic block execution counts.
!      It is located in ‘tree-profile.cc’ and is described by
!      ‘pass_ipa_tree_profile’.
  
!    • IPA free function summary
  
!      This pass is a small IPA pass when argument ‘small_p’ is true.  It
       releases inline function summaries and call summaries.  It is
!      located in ‘ipa-fnsummary.cc’ and is described by
!      ‘pass_ipa_free_free_fn_summary’.
  
!    • IPA increase alignment
  
       This pass increases the alignment of global arrays to improve
!      vectorization.  It is located in ‘tree-vectorizer.cc’ and is
!      described by ‘pass_ipa_increase_alignment’.
  
!    • IPA transactional memory
  
       This pass is for transactional memory support.  It is located in
!      ‘trans-mem.cc’ and is described by ‘pass_ipa_tm’.
  
!    • IPA lower emulated TLS
  
       This pass lowers thread-local storage (TLS) operations to emulation
!      functions provided by libgcc.  It is located in ‘tree-emutls.cc’
!      and is described by ‘pass_ipa_lower_emutls’.
  
  
  File: gccint.info,  Node: Regular IPA passes,  Next: Late IPA passes,  Prev: Small IPA passes,  Up: IPA passes
*************** File: gccint.info,  Node: Regular IPA pa
*** 8334,8449 ****
  9.4.2 Regular IPA passes
  ------------------------
  
! A regular IPA pass is a pass derived from 'ipa_opt_pass_d' that is
  executed in WHOPR compilation.  Regular IPA passes may have summary
  hooks implemented in any of the LGEN, WPA or LTRANS stages (*note
  IPA::).
  
!    * IPA whole program visibility
  
       This pass performs various optimizations involving symbol
!      visibility with '-fwhole-program', including symbol privatization,
       discovering local functions, and dismantling comdat groups.  It is
!      located in 'ipa-visibility.cc' and is described by
!      'pass_ipa_whole_program_visibility'.
  
!    * IPA profile
  
       The IPA profile pass propagates profiling frequencies across the
!      call graph.  It is located in 'ipa-profile.cc' and is described by
!      'pass_ipa_profile'.
  
!    * IPA identical code folding
  
       This is the inter-procedural identical code folding pass.  The goal
       of this transformation is to discover functions and read-only
       variables that have exactly the same semantics.  It is located in
!      'ipa-icf.cc' and is described by 'pass_ipa_icf'.
  
!    * IPA devirtualization
  
       This pass performs speculative devirtualization based on the type
       inheritance graph.  When a polymorphic call has only one likely
       target in the unit, it is turned into a speculative call.  It is
!      located in 'ipa-devirt.cc' and is described by 'pass_ipa_devirt'.
  
!    * IPA constant propagation
  
       The goal of this pass is to discover functions that are always
       invoked with some arguments with the same known constant values and
       to modify the functions accordingly.  It can also do partial
       specialization and type-based devirtualization.  It is located in
!      'ipa-cp.cc' and is described by 'pass_ipa_cp'.
  
!    * IPA scalar replacement of aggregates
  
       This pass can replace an aggregate parameter with a set of other
       parameters representing part of the original, turning those passed
       by reference into new ones which pass the value directly.  It also
       removes unused function return values and unused function
!      parameters.  This pass is located in 'ipa-sra.cc' and is described
!      by 'pass_ipa_sra'.
  
!    * IPA constructor/destructor merge
  
       This pass merges multiple constructors and destructors for static
       objects into single functions.  It's only run at LTO time unless
       the target doesn't support constructors and destructors natively.
!      The pass is located in 'ipa.cc' and is described by
!      'pass_ipa_cdtor_merge'.
  
!    * IPA function summary
  
       This pass provides function analysis for inter-procedural passes.
       It collects estimates of function body size, execution time, and
       frame size for each function.  It also estimates information about
       function calls: call statement size, time and how often the
       parameters change for each call.  It is located in
!      'ipa-fnsummary.cc' and is described by 'pass_ipa_fn_summary'.
  
!    * IPA inline
  
       The IPA inline pass handles function inlining with whole-program
       knowledge.  Small functions that are candidates for inlining are
       ordered in increasing badness, bounded by unit growth parameters.
       Unreachable functions are removed from the call graph.  Functions
       called once and not exported from the unit are inlined.  This pass
!      is located in 'ipa-inline.cc' and is described by
!      'pass_ipa_inline'.
  
!    * IPA pure/const analysis
  
!      This pass marks functions as being either const ('TREE_READONLY')
!      or pure ('DECL_PURE_P').  The per-function information is produced
!      by 'pure_const_generate_summary', then the global information is
       computed by performing a transitive closure over the call graph.
!      It is located in 'ipa-pure-const.cc' and is described by
!      'pass_ipa_pure_const'.
  
!    * IPA free function summary
  
!      This pass is a regular IPA pass when argument 'small_p' is false.
       It releases inline function summaries and call summaries.  It is
!      located in 'ipa-fnsummary.cc' and is described by
!      'pass_ipa_free_fn_summary'.
  
!    * IPA reference
  
       This pass gathers information about how variables whose scope is
       confined to the compilation unit are used.  It is located in
!      'ipa-reference.cc' and is described by 'pass_ipa_reference'.
  
!    * IPA single use
  
       This pass checks whether variables are used by a single function.
!      It is located in 'ipa.cc' and is described by
!      'pass_ipa_single_use'.
  
!    * IPA comdats
  
       This pass looks for static symbols that are used exclusively within
       one comdat group, and moves them into that comdat group.  It is
!      located in 'ipa-comdats.cc' and is described by 'pass_ipa_comdats'.
  
  
  File: gccint.info,  Node: Late IPA passes,  Prev: Regular IPA passes,  Up: IPA passes
--- 8336,8451 ----
  9.4.2 Regular IPA passes
  ------------------------
  
! A regular IPA pass is a pass derived from ‘ipa_opt_pass_d’ that is
  executed in WHOPR compilation.  Regular IPA passes may have summary
  hooks implemented in any of the LGEN, WPA or LTRANS stages (*note
  IPA::).
  
!    • IPA whole program visibility
  
       This pass performs various optimizations involving symbol
!      visibility with ‘-fwhole-program’, including symbol privatization,
       discovering local functions, and dismantling comdat groups.  It is
!      located in ‘ipa-visibility.cc’ and is described by
!      ‘pass_ipa_whole_program_visibility’.
  
!    • IPA profile
  
       The IPA profile pass propagates profiling frequencies across the
!      call graph.  It is located in ‘ipa-profile.cc’ and is described by
!      ‘pass_ipa_profile’.
  
!    • IPA identical code folding
  
       This is the inter-procedural identical code folding pass.  The goal
       of this transformation is to discover functions and read-only
       variables that have exactly the same semantics.  It is located in
!      ‘ipa-icf.cc’ and is described by ‘pass_ipa_icf’.
  
!    • IPA devirtualization
  
       This pass performs speculative devirtualization based on the type
       inheritance graph.  When a polymorphic call has only one likely
       target in the unit, it is turned into a speculative call.  It is
!      located in ‘ipa-devirt.cc’ and is described by ‘pass_ipa_devirt’.
  
!    • IPA constant propagation
  
       The goal of this pass is to discover functions that are always
       invoked with some arguments with the same known constant values and
       to modify the functions accordingly.  It can also do partial
       specialization and type-based devirtualization.  It is located in
!      ‘ipa-cp.cc’ and is described by ‘pass_ipa_cp’.
  
!    • IPA scalar replacement of aggregates
  
       This pass can replace an aggregate parameter with a set of other
       parameters representing part of the original, turning those passed
       by reference into new ones which pass the value directly.  It also
       removes unused function return values and unused function
!      parameters.  This pass is located in ‘ipa-sra.cc’ and is described
!      by ‘pass_ipa_sra’.
  
!    • IPA constructor/destructor merge
  
       This pass merges multiple constructors and destructors for static
       objects into single functions.  It's only run at LTO time unless
       the target doesn't support constructors and destructors natively.
!      The pass is located in ‘ipa.cc’ and is described by
!      ‘pass_ipa_cdtor_merge’.
  
!    • IPA function summary
  
       This pass provides function analysis for inter-procedural passes.
       It collects estimates of function body size, execution time, and
       frame size for each function.  It also estimates information about
       function calls: call statement size, time and how often the
       parameters change for each call.  It is located in
!      ‘ipa-fnsummary.cc’ and is described by ‘pass_ipa_fn_summary’.
  
!    • IPA inline
  
       The IPA inline pass handles function inlining with whole-program
       knowledge.  Small functions that are candidates for inlining are
       ordered in increasing badness, bounded by unit growth parameters.
       Unreachable functions are removed from the call graph.  Functions
       called once and not exported from the unit are inlined.  This pass
!      is located in ‘ipa-inline.cc’ and is described by
!      ‘pass_ipa_inline’.
  
!    • IPA pure/const analysis
  
!      This pass marks functions as being either const (‘TREE_READONLY’)
!      or pure (‘DECL_PURE_P’).  The per-function information is produced
!      by ‘pure_const_generate_summary’, then the global information is
       computed by performing a transitive closure over the call graph.
!      It is located in ‘ipa-pure-const.cc’ and is described by
!      ‘pass_ipa_pure_const’.
  
!    • IPA free function summary
  
!      This pass is a regular IPA pass when argument ‘small_p’ is false.
       It releases inline function summaries and call summaries.  It is
!      located in ‘ipa-fnsummary.cc’ and is described by
!      ‘pass_ipa_free_fn_summary’.
  
!    • IPA reference
  
       This pass gathers information about how variables whose scope is
       confined to the compilation unit are used.  It is located in
!      ‘ipa-reference.cc’ and is described by ‘pass_ipa_reference’.
  
!    • IPA single use
  
       This pass checks whether variables are used by a single function.
!      It is located in ‘ipa.cc’ and is described by
!      ‘pass_ipa_single_use’.
  
!    • IPA comdats
  
       This pass looks for static symbols that are used exclusively within
       one comdat group, and moves them into that comdat group.  It is
!      located in ‘ipa-comdats.cc’ and is described by ‘pass_ipa_comdats’.
  
  
  File: gccint.info,  Node: Late IPA passes,  Prev: Regular IPA passes,  Up: IPA passes
*************** Late IPA passes are simple IPA passes ex
*** 8455,8477 ****
  In WHOPR mode the passes are executed after partitioning and thus see
  just parts of the compiled unit.
  
!    * Materialize all clones
  
       Once all functions from compilation unit are in memory, produce all
!      clones and update all calls.  It is located in 'ipa.cc' and is
!      described by 'pass_materialize_all_clones'.
  
!    * IPA points-to analysis
  
       Points-to analysis; this is the same as the points-to-analysis pass
       run with the small IPA passes (*note Small IPA passes::).
  
!    * OpenMP simd clone
  
       This is the OpenMP constructs' SIMD clone pass.  It creates the
       appropriate SIMD clones for functions tagged as elemental SIMD
!      functions.  It is located in 'omp-simd-clone.cc' and is described
!      by 'pass_omp_simd_clone'.
  
  
  File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: IPA passes,  Up: Passes
--- 8457,8479 ----
  In WHOPR mode the passes are executed after partitioning and thus see
  just parts of the compiled unit.
  
!    • Materialize all clones
  
       Once all functions from compilation unit are in memory, produce all
!      clones and update all calls.  It is located in ‘ipa.cc’ and is
!      described by ‘pass_materialize_all_clones’.
  
!    • IPA points-to analysis
  
       Points-to analysis; this is the same as the points-to-analysis pass
       run with the small IPA passes (*note Small IPA passes::).
  
!    • OpenMP simd clone
  
       This is the OpenMP constructs' SIMD clone pass.  It creates the
       appropriate SIMD clones for functions tagged as elemental SIMD
!      functions.  It is located in ‘omp-simd-clone.cc’ and is described
!      by ‘pass_omp_simd_clone’.
  
  
  File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: IPA passes,  Up: Passes
*************** File: gccint.info,  Node: Tree SSA passe
*** 8482,8799 ****
  The following briefly describes the Tree optimization passes that are
  run after gimplification and what source files they are located in.
  
!    * Remove useless statements
  
       This pass is an extremely simple sweep across the gimple code in
       which we identify obviously dead code and remove it.  Here we do
!      things like simplify 'if' statements with constant conditions,
       remove exception handling constructs surrounding code that
       obviously cannot throw, remove lexical bindings that contain no
       variables, and other assorted simplistic cleanups.  The idea is to
       get rid of the obvious stuff quickly rather than wait until later
       when it's more work to get rid of it.  This pass is located in
!      'tree-cfg.cc' and described by 'pass_remove_useless_stmts'.
  
!    * OpenMP lowering
  
!      If OpenMP generation ('-fopenmp') is enabled, this pass lowers
       OpenMP constructs into GIMPLE.
  
       Lowering of OpenMP constructs involves creating replacement
       expressions for local variables that have been mapped using data
       sharing clauses, exposing the control flow of most synchronization
       directives and adding region markers to facilitate the creation of
!      the control flow graph.  The pass is located in 'omp-low.cc' and is
!      described by 'pass_lower_omp'.
  
!    * OpenMP expansion
  
!      If OpenMP generation ('-fopenmp') is enabled, this pass expands
       parallel regions into their own functions to be invoked by the
!      thread library.  The pass is located in 'omp-low.cc' and is
!      described by 'pass_expand_omp'.
  
!    * Lower control flow
  
!      This pass flattens 'if' statements ('COND_EXPR') and moves lexical
!      bindings ('BIND_EXPR') out of line.  After this pass, all 'if'
!      statements will have exactly two 'goto' statements in its 'then'
!      and 'else' arms.  Lexical binding information for each statement
!      will be found in 'TREE_BLOCK' rather than being inferred from its
!      position under a 'BIND_EXPR'.  This pass is found in
!      'gimple-low.cc' and is described by 'pass_lower_cf'.
  
!    * Lower exception handling control flow
  
       This pass decomposes high-level exception handling constructs
!      ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that
       explicitly represents the control flow involved.  After this pass,
!      'lookup_stmt_eh_region' will return a non-negative number for any
       statement that may have EH control flow semantics; examine
!      'tree_can_throw_internal' or 'tree_can_throw_external' for exact
       semantics.  Exact control flow may be extracted from
!      'foreach_reachable_handler'.  The EH region nesting tree is defined
!      in 'except.h' and built in 'except.cc'.  The lowering pass itself
!      is in 'tree-eh.cc' and is described by 'pass_lower_eh'.
  
!    * Build the control flow graph
  
       This pass decomposes a function into basic blocks and creates all
!      of the edges that connect them.  It is located in 'tree-cfg.cc' and
!      is described by 'pass_build_cfg'.
  
!    * Find all referenced variables
  
       This pass walks the entire function and collects an array of all
!      variables referenced in the function, 'referenced_vars'.  The index
       at which a variable is found in the array is used as a UID for the
       variable within this function.  This data is needed by the SSA
!      rewriting routines.  The pass is located in 'tree-dfa.cc' and is
!      described by 'pass_referenced_vars'.
  
!    * Enter static single assignment form
  
       This pass rewrites the function such that it is in SSA form.  After
!      this pass, all 'is_gimple_reg' variables will be referenced by
!      'SSA_NAME', and all occurrences of other variables will be
!      annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been
       inserted as necessary for each basic block.  This pass is located
!      in 'tree-ssa.cc' and is described by 'pass_build_ssa'.
  
!    * Warn for uninitialized variables
  
!      This pass scans the function for uses of 'SSA_NAME's that are fed
       by default definition.  For non-parameter variables, such uses are
       uninitialized.  The pass is run twice, before and after
       optimization (if turned on).  In the first pass we only warn for
       uses that are positively uninitialized; in the second pass we warn
       for uses that are possibly uninitialized.  The pass is located in
!      'tree-ssa.cc' and is defined by 'pass_early_warn_uninitialized' and
!      'pass_late_warn_uninitialized'.
  
!    * Dead code elimination
  
       This pass scans the function for statements without side effects
       whose result is unused.  It does not do memory lifetime analysis,
       so any value that is stored in memory is considered used.  The pass
       is run multiple times throughout the optimization process.  It is
!      located in 'tree-ssa-dce.cc' and is described by 'pass_dce'.
  
!    * Dominator optimizations
  
       This pass performs trivial dominator-based copy and constant
       propagation, expression simplification, and jump threading.  It is
       run multiple times throughout the optimization process.  It is
!      located in 'tree-ssa-dom.cc' and is described by 'pass_dominator'.
  
!    * Forward propagation of single-use variables
  
       This pass attempts to remove redundant computation by substituting
       variables that are used once into the expression that uses them and
       seeing if the result can be simplified.  It is located in
!      'tree-ssa-forwprop.cc' and is described by 'pass_forwprop'.
  
!    * Copy Renaming
  
       This pass attempts to change the name of compiler temporaries
       involved in copy operations such that SSA->normal can coalesce the
       copy away.  When compiler temporaries are copies of user variables,
       it also renames the compiler temporary to the user variable
       resulting in better use of user symbols.  It is located in
!      'tree-ssa-copyrename.c' and is described by 'pass_copyrename'.
  
!    * PHI node optimizations
  
       This pass recognizes forms of PHI inputs that can be represented as
       conditional expressions and rewrites them into straight line code.
!      It is located in 'tree-ssa-phiopt.cc' and is described by
!      'pass_phiopt'.
  
!    * May-alias optimization
  
       This pass performs a flow sensitive SSA-based points-to analysis.
       The resulting may-alias, must-alias, and escape analysis
       information is used to promote variables from in-memory addressable
       objects to non-aliased variables that can be renamed into SSA form.
!      We also update the 'VDEF'/'VUSE' memory tags for non-renameable
       aggregates so that we get fewer false kills.  The pass is located
!      in 'tree-ssa-alias.cc' and is described by 'pass_may_alias'.
  
       Interprocedural points-to information is located in
!      'tree-ssa-structalias.cc' and described by 'pass_ipa_pta'.
  
!    * Profiling
  
       This pass instruments the function in order to collect runtime
       block and value profiling data.  Such data may be fed back into the
       compiler on a subsequent run so as to allow optimization based on
       expected execution frequencies.  The pass is located in
!      'tree-profile.cc' and is described by 'pass_ipa_tree_profile'.
  
!    * Static profile estimation
  
       This pass implements series of heuristics to guess propababilities
       of branches.  The resulting predictions are turned into edge
       profile by propagating branches across the control flow graphs.
!      The pass is located in 'tree-profile.cc' and is described by
!      'pass_profile'.
  
!    * Lower complex arithmetic
  
       This pass rewrites complex arithmetic operations into their
       component scalar arithmetic operations.  The pass is located in
!      'tree-complex.cc' and is described by 'pass_lower_complex'.
  
!    * Scalar replacement of aggregates
  
       This pass rewrites suitable non-aliased local aggregate variables
       into a set of scalar variables.  The resulting scalar variables are
       rewritten into SSA form, which allows subsequent optimization
       passes to do a significantly better job with them.  The pass is
!      located in 'tree-sra.cc' and is described by 'pass_sra'.
  
!    * Dead store elimination
  
       This pass eliminates stores to memory that are subsequently
       overwritten by another store, without any intervening loads.  The
!      pass is located in 'tree-ssa-dse.cc' and is described by
!      'pass_dse'.
  
!    * Tail recursion elimination
  
       This pass transforms tail recursion into a loop.  It is located in
!      'tree-tailcall.cc' and is described by 'pass_tail_recursion'.
  
!    * Forward store motion
  
       This pass sinks stores and assignments down the flowgraph closer to
!      their use point.  The pass is located in 'tree-ssa-sink.cc' and is
!      described by 'pass_sink_code'.
  
!    * Partial redundancy elimination
  
       This pass eliminates partially redundant computations, as well as
!      performing load motion.  The pass is located in 'tree-ssa-pre.cc'
!      and is described by 'pass_pre'.
  
       Just before partial redundancy elimination, if
!      '-funsafe-math-optimizations' is on, GCC tries to convert divisions
       to multiplications by the reciprocal.  The pass is located in
!      'tree-ssa-math-opts.cc' and is described by 'pass_cse_reciprocal'.
  
!    * Full redundancy elimination
  
       This is a simpler form of PRE that only eliminates redundancies
!      that occur on all paths.  It is located in 'tree-ssa-pre.cc' and
!      described by 'pass_fre'.
  
!    * Loop optimization
  
!      The main driver of the pass is placed in 'tree-ssa-loop.cc' and
!      described by 'pass_loop'.
  
       The optimizations performed by this pass are:
  
       Loop invariant motion.  This pass moves only invariants that would
       be hard to handle on RTL level (function calls, operations that
!      expand to nontrivial sequences of insns).  With '-funswitch-loops'
       it also moves operands of conditions that are invariant out of the
       loop, so that we can use just trivial invariantness analysis in
       loop unswitching.  The pass also includes store motion.  The pass
!      is implemented in 'tree-ssa-loop-im.cc'.
  
       Canonical induction variable creation.  This pass creates a simple
       counter for number of iterations of the loop and replaces the exit
       condition of the loop using it, in case when a complicated analysis
       is necessary to determine the number of iterations.  Later
       optimizations then may determine the number easily.  The pass is
!      implemented in 'tree-ssa-loop-ivcanon.cc'.
  
       Induction variable optimizations.  This pass performs standard
       induction variable optimizations, including strength reduction,
       induction variable merging and induction variable elimination.  The
!      pass is implemented in 'tree-ssa-loop-ivopts.cc'.
  
       Loop unswitching.  This pass moves the conditional jumps that are
       invariant out of the loops.  To achieve this, a duplicate of the
       loop is created for each possible outcome of conditional jump(s).
!      The pass is implemented in 'tree-ssa-loop-unswitch.cc'.
  
       Loop splitting.  If a loop contains a conditional statement that is
       always true for one part of the iteration space and false for the
       other this pass splits the loop into two, one dealing with one side
       the other only with the other, thereby removing one inner-loop
!      conditional.  The pass is implemented in 'tree-ssa-loop-split.cc'.
  
       The optimizations also use various utility functions contained in
!      'tree-ssa-loop-manip.cc', 'cfgloop.cc', 'cfgloopanal.cc' and
!      'cfgloopmanip.cc'.
  
       Vectorization.  This pass transforms loops to operate on vector
       types instead of scalar types.  Data parallelism across loop
       iterations is exploited to group data elements from consecutive
       iterations into a vector and operate on them in parallel.
       Depending on available target support the loop is conceptually
!      unrolled by a factor 'VF' (vectorization factor), which is the
       number of elements operated upon in parallel in each iteration, and
!      the 'VF' copies of each scalar operation are fused to form a vector
       operation.  Additional loop transformations such as peeling and
       versioning may take place to align the number of iterations, and to
       align the memory accesses in the loop.  The pass is implemented in
!      'tree-vectorizer.cc' (the main driver), 'tree-vect-loop.cc' and
!      'tree-vect-loop-manip.cc' (loop specific parts and general loop
!      utilities), 'tree-vect-slp' (loop-aware SLP functionality),
!      'tree-vect-stmts.cc', 'tree-vect-data-refs.cc' and
!      'tree-vect-slp-patterns.cc' containing the SLP pattern matcher.
!      Analysis of data references is in 'tree-data-ref.cc'.
  
       SLP Vectorization.  This pass performs vectorization of
       straight-line code.  The pass is implemented in
!      'tree-vectorizer.cc' (the main driver), 'tree-vect-slp.cc',
!      'tree-vect-stmts.cc' and 'tree-vect-data-refs.cc'.
  
       Autoparallelization.  This pass splits the loop iteration space to
       run into several threads.  The pass is implemented in
!      'tree-parloops.cc'.
  
       Graphite is a loop transformation framework based on the polyhedral
       model.  Graphite stands for Gimple Represented as Polyhedra.  The
       internals of this infrastructure are documented in
       <https://gcc.gnu.org/wiki/Graphite>.  The passes working on this
!      representation are implemented in the various 'graphite-*' files.
  
!    * Tree level if-conversion for vectorizer
  
       This pass applies if-conversion to simple loops to help vectorizer.
       We identify if convertible loops, if-convert statements and merge
       basic blocks in one big block.  The idea is to present loop in such
       form so that vectorizer can have one to one mapping between
       statements and available vector operations.  This pass is located
!      in 'tree-if-conv.cc' and is described by 'pass_if_conversion'.
  
!    * Conditional constant propagation
  
       This pass relaxes a lattice of values in order to identify those
       that must be constant even in the presence of conditional branches.
!      The pass is located in 'tree-ssa-ccp.cc' and is described by
!      'pass_ccp'.
  
       A related pass that works on memory loads and stores, and not just
!      register values, is located in 'tree-ssa-ccp.cc' and described by
!      'pass_store_ccp'.
  
!    * Conditional copy propagation
  
       This is similar to constant propagation but the lattice of values
       is the "copy-of" relation.  It eliminates redundant copies from the
!      code.  The pass is located in 'tree-ssa-copy.cc' and described by
!      'pass_copy_prop'.
  
       A related pass that works on memory copies, and not just register
!      copies, is located in 'tree-ssa-copy.cc' and described by
!      'pass_store_copy_prop'.
  
!    * Value range propagation
  
       This transformation is similar to constant propagation but instead
       of propagating single constant values, it propagates known value
--- 8484,8801 ----
  The following briefly describes the Tree optimization passes that are
  run after gimplification and what source files they are located in.
  
!    • Remove useless statements
  
       This pass is an extremely simple sweep across the gimple code in
       which we identify obviously dead code and remove it.  Here we do
!      things like simplify ‘if’ statements with constant conditions,
       remove exception handling constructs surrounding code that
       obviously cannot throw, remove lexical bindings that contain no
       variables, and other assorted simplistic cleanups.  The idea is to
       get rid of the obvious stuff quickly rather than wait until later
       when it's more work to get rid of it.  This pass is located in
!      ‘tree-cfg.cc’ and described by ‘pass_remove_useless_stmts’.
  
!    • OpenMP lowering
  
!      If OpenMP generation (‘-fopenmp’) is enabled, this pass lowers
       OpenMP constructs into GIMPLE.
  
       Lowering of OpenMP constructs involves creating replacement
       expressions for local variables that have been mapped using data
       sharing clauses, exposing the control flow of most synchronization
       directives and adding region markers to facilitate the creation of
!      the control flow graph.  The pass is located in ‘omp-low.cc’ and is
!      described by ‘pass_lower_omp’.
  
!    • OpenMP expansion
  
!      If OpenMP generation (‘-fopenmp’) is enabled, this pass expands
       parallel regions into their own functions to be invoked by the
!      thread library.  The pass is located in ‘omp-low.cc’ and is
!      described by ‘pass_expand_omp’.
  
!    • Lower control flow
  
!      This pass flattens ‘if’ statements (‘COND_EXPR’) and moves lexical
!      bindings (‘BIND_EXPR’) out of line.  After this pass, all ‘if’
!      statements will have exactly two ‘goto’ statements in its ‘then’
!      and ‘else’ arms.  Lexical binding information for each statement
!      will be found in ‘TREE_BLOCK’ rather than being inferred from its
!      position under a ‘BIND_EXPR’.  This pass is found in
!      ‘gimple-low.cc’ and is described by ‘pass_lower_cf’.
  
!    • Lower exception handling control flow
  
       This pass decomposes high-level exception handling constructs
!      (‘TRY_FINALLY_EXPR’ and ‘TRY_CATCH_EXPR’) into a form that
       explicitly represents the control flow involved.  After this pass,
!      ‘lookup_stmt_eh_region’ will return a non-negative number for any
       statement that may have EH control flow semantics; examine
!      ‘tree_can_throw_internal’ or ‘tree_can_throw_external’ for exact
       semantics.  Exact control flow may be extracted from
!      ‘foreach_reachable_handler’.  The EH region nesting tree is defined
!      in ‘except.h’ and built in ‘except.cc’.  The lowering pass itself
!      is in ‘tree-eh.cc’ and is described by ‘pass_lower_eh’.
  
!    • Build the control flow graph
  
       This pass decomposes a function into basic blocks and creates all
!      of the edges that connect them.  It is located in ‘tree-cfg.cc’ and
!      is described by ‘pass_build_cfg’.
  
!    • Find all referenced variables
  
       This pass walks the entire function and collects an array of all
!      variables referenced in the function, ‘referenced_vars’.  The index
       at which a variable is found in the array is used as a UID for the
       variable within this function.  This data is needed by the SSA
!      rewriting routines.  The pass is located in ‘tree-dfa.cc’ and is
!      described by ‘pass_referenced_vars’.
  
!    • Enter static single assignment form
  
       This pass rewrites the function such that it is in SSA form.  After
!      this pass, all ‘is_gimple_reg’ variables will be referenced by
!      ‘SSA_NAME’, and all occurrences of other variables will be
!      annotated with ‘VDEFS’ and ‘VUSES’; PHI nodes will have been
       inserted as necessary for each basic block.  This pass is located
!      in ‘tree-ssa.cc’ and is described by ‘pass_build_ssa’.
  
!    • Warn for uninitialized variables
  
!      This pass scans the function for uses of ‘SSA_NAME’s that are fed
       by default definition.  For non-parameter variables, such uses are
       uninitialized.  The pass is run twice, before and after
       optimization (if turned on).  In the first pass we only warn for
       uses that are positively uninitialized; in the second pass we warn
       for uses that are possibly uninitialized.  The pass is located in
!      ‘tree-ssa.cc’ and is defined by ‘pass_early_warn_uninitialized’ and
!      ‘pass_late_warn_uninitialized’.
  
!    • Dead code elimination
  
       This pass scans the function for statements without side effects
       whose result is unused.  It does not do memory lifetime analysis,
       so any value that is stored in memory is considered used.  The pass
       is run multiple times throughout the optimization process.  It is
!      located in ‘tree-ssa-dce.cc’ and is described by ‘pass_dce’.
  
!    • Dominator optimizations
  
       This pass performs trivial dominator-based copy and constant
       propagation, expression simplification, and jump threading.  It is
       run multiple times throughout the optimization process.  It is
!      located in ‘tree-ssa-dom.cc’ and is described by ‘pass_dominator’.
  
!    • Forward propagation of single-use variables
  
       This pass attempts to remove redundant computation by substituting
       variables that are used once into the expression that uses them and
       seeing if the result can be simplified.  It is located in
!      ‘tree-ssa-forwprop.cc’ and is described by ‘pass_forwprop’.
  
!    • Copy Renaming
  
       This pass attempts to change the name of compiler temporaries
       involved in copy operations such that SSA->normal can coalesce the
       copy away.  When compiler temporaries are copies of user variables,
       it also renames the compiler temporary to the user variable
       resulting in better use of user symbols.  It is located in
!      ‘tree-ssa-copyrename.c’ and is described by ‘pass_copyrename’.
  
!    • PHI node optimizations
  
       This pass recognizes forms of PHI inputs that can be represented as
       conditional expressions and rewrites them into straight line code.
!      It is located in ‘tree-ssa-phiopt.cc’ and is described by
!      ‘pass_phiopt’.
  
!    • May-alias optimization
  
       This pass performs a flow sensitive SSA-based points-to analysis.
       The resulting may-alias, must-alias, and escape analysis
       information is used to promote variables from in-memory addressable
       objects to non-aliased variables that can be renamed into SSA form.
!      We also update the ‘VDEF’/‘VUSE’ memory tags for non-renameable
       aggregates so that we get fewer false kills.  The pass is located
!      in ‘tree-ssa-alias.cc’ and is described by ‘pass_may_alias’.
  
       Interprocedural points-to information is located in
!      ‘tree-ssa-structalias.cc’ and described by ‘pass_ipa_pta’.
  
!    • Profiling
  
       This pass instruments the function in order to collect runtime
       block and value profiling data.  Such data may be fed back into the
       compiler on a subsequent run so as to allow optimization based on
       expected execution frequencies.  The pass is located in
!      ‘tree-profile.cc’ and is described by ‘pass_ipa_tree_profile’.
  
!    • Static profile estimation
  
       This pass implements series of heuristics to guess propababilities
       of branches.  The resulting predictions are turned into edge
       profile by propagating branches across the control flow graphs.
!      The pass is located in ‘tree-profile.cc’ and is described by
!      ‘pass_profile’.
  
!    • Lower complex arithmetic
  
       This pass rewrites complex arithmetic operations into their
       component scalar arithmetic operations.  The pass is located in
!      ‘tree-complex.cc’ and is described by ‘pass_lower_complex’.
  
!    • Scalar replacement of aggregates
  
       This pass rewrites suitable non-aliased local aggregate variables
       into a set of scalar variables.  The resulting scalar variables are
       rewritten into SSA form, which allows subsequent optimization
       passes to do a significantly better job with them.  The pass is
!      located in ‘tree-sra.cc’ and is described by ‘pass_sra’.
  
!    • Dead store elimination
  
       This pass eliminates stores to memory that are subsequently
       overwritten by another store, without any intervening loads.  The
!      pass is located in ‘tree-ssa-dse.cc’ and is described by
!      ‘pass_dse’.
  
!    • Tail recursion elimination
  
       This pass transforms tail recursion into a loop.  It is located in
!      ‘tree-tailcall.cc’ and is described by ‘pass_tail_recursion’.
  
!    • Forward store motion
  
       This pass sinks stores and assignments down the flowgraph closer to
!      their use point.  The pass is located in ‘tree-ssa-sink.cc’ and is
!      described by ‘pass_sink_code’.
  
!    • Partial redundancy elimination
  
       This pass eliminates partially redundant computations, as well as
!      performing load motion.  The pass is located in ‘tree-ssa-pre.cc’
!      and is described by ‘pass_pre’.
  
       Just before partial redundancy elimination, if
!      ‘-funsafe-math-optimizations’ is on, GCC tries to convert divisions
       to multiplications by the reciprocal.  The pass is located in
!      ‘tree-ssa-math-opts.cc’ and is described by ‘pass_cse_reciprocal’.
  
!    • Full redundancy elimination
  
       This is a simpler form of PRE that only eliminates redundancies
!      that occur on all paths.  It is located in ‘tree-ssa-pre.cc’ and
!      described by ‘pass_fre’.
  
!    • Loop optimization
  
!      The main driver of the pass is placed in ‘tree-ssa-loop.cc’ and
!      described by ‘pass_loop’.
  
       The optimizations performed by this pass are:
  
       Loop invariant motion.  This pass moves only invariants that would
       be hard to handle on RTL level (function calls, operations that
!      expand to nontrivial sequences of insns).  With ‘-funswitch-loops’
       it also moves operands of conditions that are invariant out of the
       loop, so that we can use just trivial invariantness analysis in
       loop unswitching.  The pass also includes store motion.  The pass
!      is implemented in ‘tree-ssa-loop-im.cc’.
  
       Canonical induction variable creation.  This pass creates a simple
       counter for number of iterations of the loop and replaces the exit
       condition of the loop using it, in case when a complicated analysis
       is necessary to determine the number of iterations.  Later
       optimizations then may determine the number easily.  The pass is
!      implemented in ‘tree-ssa-loop-ivcanon.cc’.
  
       Induction variable optimizations.  This pass performs standard
       induction variable optimizations, including strength reduction,
       induction variable merging and induction variable elimination.  The
!      pass is implemented in ‘tree-ssa-loop-ivopts.cc’.
  
       Loop unswitching.  This pass moves the conditional jumps that are
       invariant out of the loops.  To achieve this, a duplicate of the
       loop is created for each possible outcome of conditional jump(s).
!      The pass is implemented in ‘tree-ssa-loop-unswitch.cc’.
  
       Loop splitting.  If a loop contains a conditional statement that is
       always true for one part of the iteration space and false for the
       other this pass splits the loop into two, one dealing with one side
       the other only with the other, thereby removing one inner-loop
!      conditional.  The pass is implemented in ‘tree-ssa-loop-split.cc’.
  
       The optimizations also use various utility functions contained in
!      ‘tree-ssa-loop-manip.cc’, ‘cfgloop.cc’, ‘cfgloopanal.cc’ and
!      ‘cfgloopmanip.cc’.
  
       Vectorization.  This pass transforms loops to operate on vector
       types instead of scalar types.  Data parallelism across loop
       iterations is exploited to group data elements from consecutive
       iterations into a vector and operate on them in parallel.
       Depending on available target support the loop is conceptually
!      unrolled by a factor ‘VF’ (vectorization factor), which is the
       number of elements operated upon in parallel in each iteration, and
!      the ‘VF’ copies of each scalar operation are fused to form a vector
       operation.  Additional loop transformations such as peeling and
       versioning may take place to align the number of iterations, and to
       align the memory accesses in the loop.  The pass is implemented in
!      ‘tree-vectorizer.cc’ (the main driver), ‘tree-vect-loop.cc’ and
!      ‘tree-vect-loop-manip.cc’ (loop specific parts and general loop
!      utilities), ‘tree-vect-slp’ (loop-aware SLP functionality),
!      ‘tree-vect-stmts.cc’, ‘tree-vect-data-refs.cc’ and
!      ‘tree-vect-slp-patterns.cc’ containing the SLP pattern matcher.
!      Analysis of data references is in ‘tree-data-ref.cc’.
  
       SLP Vectorization.  This pass performs vectorization of
       straight-line code.  The pass is implemented in
!      ‘tree-vectorizer.cc’ (the main driver), ‘tree-vect-slp.cc’,
!      ‘tree-vect-stmts.cc’ and ‘tree-vect-data-refs.cc’.
  
       Autoparallelization.  This pass splits the loop iteration space to
       run into several threads.  The pass is implemented in
!      ‘tree-parloops.cc’.
  
       Graphite is a loop transformation framework based on the polyhedral
       model.  Graphite stands for Gimple Represented as Polyhedra.  The
       internals of this infrastructure are documented in
       <https://gcc.gnu.org/wiki/Graphite>.  The passes working on this
!      representation are implemented in the various ‘graphite-*’ files.
  
!    • Tree level if-conversion for vectorizer
  
       This pass applies if-conversion to simple loops to help vectorizer.
       We identify if convertible loops, if-convert statements and merge
       basic blocks in one big block.  The idea is to present loop in such
       form so that vectorizer can have one to one mapping between
       statements and available vector operations.  This pass is located
!      in ‘tree-if-conv.cc’ and is described by ‘pass_if_conversion’.
  
!    • Conditional constant propagation
  
       This pass relaxes a lattice of values in order to identify those
       that must be constant even in the presence of conditional branches.
!      The pass is located in ‘tree-ssa-ccp.cc’ and is described by
!      ‘pass_ccp’.
  
       A related pass that works on memory loads and stores, and not just
!      register values, is located in ‘tree-ssa-ccp.cc’ and described by
!      ‘pass_store_ccp’.
  
!    • Conditional copy propagation
  
       This is similar to constant propagation but the lattice of values
       is the "copy-of" relation.  It eliminates redundant copies from the
!      code.  The pass is located in ‘tree-ssa-copy.cc’ and described by
!      ‘pass_copy_prop’.
  
       A related pass that works on memory copies, and not just register
!      copies, is located in ‘tree-ssa-copy.cc’ and described by
!      ‘pass_store_copy_prop’.
  
!    • Value range propagation
  
       This transformation is similar to constant propagation but instead
       of propagating single constant values, it propagates known value
*************** run after gimplification and what source
*** 8804,8921 ****
       branch probabilities nor it uses more than a single range per SSA
       name.  This means that the current implementation cannot be used
       for branch prediction (though adapting it would not be difficult).
!      The pass is located in 'tree-vrp.cc' and is described by
!      'pass_vrp'.
  
!    * Folding built-in functions
  
       This pass simplifies built-in functions, as applicable, with
       constant arguments or with inferable string lengths.  It is located
!      in 'tree-ssa-ccp.cc' and is described by 'pass_fold_builtins'.
  
!    * Split critical edges
  
       This pass identifies critical edges and inserts empty basic blocks
       such that the edge is no longer critical.  The pass is located in
!      'tree-cfg.cc' and is described by 'pass_split_crit_edges'.
  
!    * Control dependence dead code elimination
  
       This pass is a stronger form of dead code elimination that can
       eliminate unnecessary control flow statements.  It is located in
!      'tree-ssa-dce.cc' and is described by 'pass_cd_dce'.
  
!    * Tail call elimination
  
       This pass identifies function calls that may be rewritten into
       jumps.  No code transformation is actually applied here, but the
       data and control flow problem is solved.  The code transformation
       requires target support, and so is delayed until RTL.  In the
!      meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility.
!      The pass is located in 'tree-tailcall.cc' and is described by
!      'pass_tail_calls'.  The RTL transformation is handled by
!      'fixup_tail_calls' in 'calls.cc'.
  
!    * Warn for function return without value
  
       For non-void functions, this pass locates return statements that do
       not specify a value and issues a warning.  Such a statement may
       have been injected by falling off the end of the function.  This
       pass is run last so that we have as much time as possible to prove
       that the statement is not reachable.  It is located in
!      'tree-cfg.cc' and is described by 'pass_warn_function_return'.
  
!    * Leave static single assignment form
  
       This pass rewrites the function such that it is in normal form.  At
       the same time, we eliminate as many single-use temporaries as
       possible, so the intermediate language is no longer GIMPLE, but
!      GENERIC.  The pass is located in 'tree-outof-ssa.cc' and is
!      described by 'pass_del_ssa'.
  
!    * Merge PHI nodes that feed into one another
  
       This is part of the CFG cleanup passes.  It attempts to join PHI
       nodes from a forwarder CFG block into another block with PHI nodes.
!      The pass is located in 'tree-cfgcleanup.cc' and is described by
!      'pass_merge_phi'.
  
!    * Return value optimization
  
       If a function always returns the same local variable, and that
       local variable is an aggregate type, then the variable is replaced
       with the return value for the function (i.e., the function's
       DECL_RESULT). This is equivalent to the C++ named return value
       optimization applied to GIMPLE.  The pass is located in
!      'tree-nrv.cc' and is described by 'pass_nrv'.
  
!    * Return slot optimization
  
!      If a function returns a memory object and is called as 'var =
!      foo()', this pass tries to change the call so that the address of
!      'var' is sent to the caller to avoid an extra memory copy.  This
!      pass is located in 'tree-nrv.cc' and is described by
!      'pass_return_slot'.
  
!    * Optimize calls to '__builtin_object_size' or
!      '__builtin_dynamic_object_size'
  
       This is a propagation pass similar to CCP that tries to remove
!      calls to '__builtin_object_size' when the upper or lower bound for
       the size of the object can be computed at compile-time.  It also
!      tries to replace calls to '__builtin_dynamic_object_size' with an
       expression that evaluates the upper or lower bound for the size of
!      the object.  This pass is located in 'tree-object-size.cc' and is
!      described by 'pass_object_sizes'.
  
!    * Loop invariant motion
  
       This pass removes expensive loop-invariant computations out of
!      loops.  The pass is located in 'tree-ssa-loop.cc' and described by
!      'pass_lim'.
  
!    * Loop nest optimizations
  
       This is a family of loop transformations that works on loop nests.
       It includes loop interchange, scaling, skewing and reversal and
       they are all geared to the optimization of data locality in array
       traversals and the removal of dependencies that hamper
       optimizations such as loop parallelization and vectorization.  The
!      pass is located in 'tree-loop-linear.c' and described by
!      'pass_linear_transform'.
  
!    * Removal of empty loops
  
       This pass removes loops with no code in them.  The pass is located
!      in 'tree-ssa-loop-ivcanon.cc' and described by 'pass_empty_loop'.
  
!    * Unrolling of small loops
  
       This pass completely unrolls loops with few iterations.  The pass
!      is located in 'tree-ssa-loop-ivcanon.cc' and described by
!      'pass_complete_unroll'.
  
!    * Predictive commoning
  
       This pass makes the code reuse the computations from the previous
       iterations of the loops, especially loads and stores to memory.  It
--- 8806,8923 ----
       branch probabilities nor it uses more than a single range per SSA
       name.  This means that the current implementation cannot be used
       for branch prediction (though adapting it would not be difficult).
!      The pass is located in ‘tree-vrp.cc’ and is described by
!      ‘pass_vrp’.
  
!    • Folding built-in functions
  
       This pass simplifies built-in functions, as applicable, with
       constant arguments or with inferable string lengths.  It is located
!      in ‘tree-ssa-ccp.cc’ and is described by ‘pass_fold_builtins’.
  
!    • Split critical edges
  
       This pass identifies critical edges and inserts empty basic blocks
       such that the edge is no longer critical.  The pass is located in
!      ‘tree-cfg.cc’ and is described by ‘pass_split_crit_edges’.
  
!    • Control dependence dead code elimination
  
       This pass is a stronger form of dead code elimination that can
       eliminate unnecessary control flow statements.  It is located in
!      ‘tree-ssa-dce.cc’ and is described by ‘pass_cd_dce’.
  
!    • Tail call elimination
  
       This pass identifies function calls that may be rewritten into
       jumps.  No code transformation is actually applied here, but the
       data and control flow problem is solved.  The code transformation
       requires target support, and so is delayed until RTL.  In the
!      meantime ‘CALL_EXPR_TAILCALL’ is set indicating the possibility.
!      The pass is located in ‘tree-tailcall.cc’ and is described by
!      ‘pass_tail_calls’.  The RTL transformation is handled by
!      ‘fixup_tail_calls’ in ‘calls.cc’.
  
!    • Warn for function return without value
  
       For non-void functions, this pass locates return statements that do
       not specify a value and issues a warning.  Such a statement may
       have been injected by falling off the end of the function.  This
       pass is run last so that we have as much time as possible to prove
       that the statement is not reachable.  It is located in
!      ‘tree-cfg.cc’ and is described by ‘pass_warn_function_return’.
  
!    • Leave static single assignment form
  
       This pass rewrites the function such that it is in normal form.  At
       the same time, we eliminate as many single-use temporaries as
       possible, so the intermediate language is no longer GIMPLE, but
!      GENERIC.  The pass is located in ‘tree-outof-ssa.cc’ and is
!      described by ‘pass_del_ssa’.
  
!    • Merge PHI nodes that feed into one another
  
       This is part of the CFG cleanup passes.  It attempts to join PHI
       nodes from a forwarder CFG block into another block with PHI nodes.
!      The pass is located in ‘tree-cfgcleanup.cc’ and is described by
!      ‘pass_merge_phi’.
  
!    • Return value optimization
  
       If a function always returns the same local variable, and that
       local variable is an aggregate type, then the variable is replaced
       with the return value for the function (i.e., the function's
       DECL_RESULT). This is equivalent to the C++ named return value
       optimization applied to GIMPLE.  The pass is located in
!      ‘tree-nrv.cc’ and is described by ‘pass_nrv’.
  
!    • Return slot optimization
  
!      If a function returns a memory object and is called as ‘var =
!      foo()’, this pass tries to change the call so that the address of
!      ‘var’ is sent to the caller to avoid an extra memory copy.  This
!      pass is located in ‘tree-nrv.cc’ and is described by
!      ‘pass_return_slot’.
  
!    • Optimize calls to ‘__builtin_object_size’ or
!      ‘__builtin_dynamic_object_size’
  
       This is a propagation pass similar to CCP that tries to remove
!      calls to ‘__builtin_object_size’ when the upper or lower bound for
       the size of the object can be computed at compile-time.  It also
!      tries to replace calls to ‘__builtin_dynamic_object_size’ with an
       expression that evaluates the upper or lower bound for the size of
!      the object.  This pass is located in ‘tree-object-size.cc’ and is
!      described by ‘pass_object_sizes’.
  
!    • Loop invariant motion
  
       This pass removes expensive loop-invariant computations out of
!      loops.  The pass is located in ‘tree-ssa-loop.cc’ and described by
!      ‘pass_lim’.
  
!    • Loop nest optimizations
  
       This is a family of loop transformations that works on loop nests.
       It includes loop interchange, scaling, skewing and reversal and
       they are all geared to the optimization of data locality in array
       traversals and the removal of dependencies that hamper
       optimizations such as loop parallelization and vectorization.  The
!      pass is located in ‘tree-loop-linear.c’ and described by
!      ‘pass_linear_transform’.
  
!    • Removal of empty loops
  
       This pass removes loops with no code in them.  The pass is located
!      in ‘tree-ssa-loop-ivcanon.cc’ and described by ‘pass_empty_loop’.
  
!    • Unrolling of small loops
  
       This pass completely unrolls loops with few iterations.  The pass
!      is located in ‘tree-ssa-loop-ivcanon.cc’ and described by
!      ‘pass_complete_unroll’.
  
!    • Predictive commoning
  
       This pass makes the code reuse the computations from the previous
       iterations of the loops, especially loads and stores to memory.  It
*************** run after gimplification and what source
*** 8924,8955 ****
       the need for this rotation, the loop is then unrolled and the
       copies of the loop body are rewritten to use the appropriate
       version of the temporary variable.  This pass is located in
!      'tree-predcom.cc' and described by 'pass_predcom'.
  
!    * Array prefetching
  
       This pass issues prefetch instructions for array references inside
!      loops.  The pass is located in 'tree-ssa-loop-prefetch.cc' and
!      described by 'pass_loop_prefetch'.
  
!    * Reassociation
  
       This pass rewrites arithmetic expressions to enable optimizations
       that operate on them, like redundancy elimination and
!      vectorization.  The pass is located in 'tree-ssa-reassoc.cc' and
!      described by 'pass_reassoc'.
  
!    * Optimization of 'stdarg' functions
  
       This pass tries to avoid the saving of register arguments into the
!      stack on entry to 'stdarg' functions.  If the function doesn't use
!      any 'va_start' macros, no registers need to be saved.  If
!      'va_start' macros are used, the 'va_list' variables don't escape
       the function, it is only necessary to save registers that will be
!      used in 'va_arg' macros.  For instance, if 'va_arg' is only used
       with integral types in the function, floating point registers don't
!      need to be saved.  This pass is located in 'tree-stdarg.cc' and
!      described by 'pass_stdarg'.
  
  
  File: gccint.info,  Node: RTL passes,  Next: Optimization info,  Prev: Tree SSA passes,  Up: Passes
--- 8926,8957 ----
       the need for this rotation, the loop is then unrolled and the
       copies of the loop body are rewritten to use the appropriate
       version of the temporary variable.  This pass is located in
!      ‘tree-predcom.cc’ and described by ‘pass_predcom’.
  
!    • Array prefetching
  
       This pass issues prefetch instructions for array references inside
!      loops.  The pass is located in ‘tree-ssa-loop-prefetch.cc’ and
!      described by ‘pass_loop_prefetch’.
  
!    • Reassociation
  
       This pass rewrites arithmetic expressions to enable optimizations
       that operate on them, like redundancy elimination and
!      vectorization.  The pass is located in ‘tree-ssa-reassoc.cc’ and
!      described by ‘pass_reassoc’.
  
!    • Optimization of ‘stdarg’ functions
  
       This pass tries to avoid the saving of register arguments into the
!      stack on entry to ‘stdarg’ functions.  If the function doesn't use
!      any ‘va_start’ macros, no registers need to be saved.  If
!      ‘va_start’ macros are used, the ‘va_list’ variables don't escape
       the function, it is only necessary to save registers that will be
!      used in ‘va_arg’ macros.  For instance, if ‘va_arg’ is only used
       with integral types in the function, floating point registers don't
!      need to be saved.  This pass is located in ‘tree-stdarg.cc’ and
!      described by ‘pass_stdarg’.
  
  
  File: gccint.info,  Node: RTL passes,  Next: Optimization info,  Prev: Tree SSA passes,  Up: Passes
*************** File: gccint.info,  Node: RTL passes,  N
*** 8960,9012 ****
  The following briefly describes the RTL generation and optimization
  passes that are run after the Tree optimization passes.
  
!    * RTL generation
  
!      The source files for RTL generation include 'stmt.cc', 'calls.cc',
!      'expr.cc', 'explow.cc', 'expmed.cc', 'function.cc', 'optabs.cc' and
!      'emit-rtl.cc'.  Also, the file 'insn-emit.cc', generated from the
!      machine description by the program 'genemit', is used in this pass.
!      The header file 'expr.h' is used for communication within this
       pass.
  
!      The header files 'insn-flags.h' and 'insn-codes.h', generated from
!      the machine description by the programs 'genflags' and 'gencodes',
       tell this pass which standard names are available for use and which
       patterns correspond to them.
  
!    * Generation of exception landing pads
  
       This pass generates the glue that handles communication between the
       exception handling library routines and the exception handlers
       within the function.  Entry points in the function that are invoked
!      by the exception handling library are called "landing pads".  The
!      code for this pass is located in 'except.cc'.
  
!    * Control flow graph cleanup
  
       This pass removes unreachable code, simplifies jumps to next, jumps
       to jump, jumps across jumps, etc.  The pass is run multiple times.
       For historical reasons, it is occasionally referred to as the "jump
       optimization pass".  The bulk of the code for this pass is in
!      'cfgcleanup.cc', and there are support routines in 'cfgrtl.cc' and
!      'jump.cc'.
  
!    * Forward propagation of single-def values
  
       This pass attempts to remove redundant computation by substituting
       variables that come from a single definition, and seeing if the
       result can be simplified.  It performs copy propagation and
       addressing mode selection.  The pass is run twice, with values
       being propagated into loops only on the second run.  The code is
!      located in 'fwprop.cc'.
  
!    * Common subexpression elimination
  
       This pass removes redundant computation within basic blocks, and
       optimizes addressing modes based on cost.  The pass is run twice.
!      The code for this pass is located in 'cse.cc'.
  
!    * Global common subexpression elimination
  
       This pass performs two different types of GCSE depending on whether
       you are optimizing for size or not (LCM based GCSE tends to
--- 8962,9014 ----
  The following briefly describes the RTL generation and optimization
  passes that are run after the Tree optimization passes.
  
!    • RTL generation
  
!      The source files for RTL generation include ‘stmt.cc’, ‘calls.cc’,
!      ‘expr.cc’, ‘explow.cc’, ‘expmed.cc’, ‘function.cc’, ‘optabs.cc’ and
!      ‘emit-rtl.cc’.  Also, the file ‘insn-emit.cc’, generated from the
!      machine description by the program ‘genemit’, is used in this pass.
!      The header file ‘expr.h’ is used for communication within this
       pass.
  
!      The header files ‘insn-flags.h’ and ‘insn-codes.h’, generated from
!      the machine description by the programs ‘genflags’ and ‘gencodes’,
       tell this pass which standard names are available for use and which
       patterns correspond to them.
  
!    • Generation of exception landing pads
  
       This pass generates the glue that handles communication between the
       exception handling library routines and the exception handlers
       within the function.  Entry points in the function that are invoked
!      by the exception handling library are called “landing pads”.  The
!      code for this pass is located in ‘except.cc’.
  
!    • Control flow graph cleanup
  
       This pass removes unreachable code, simplifies jumps to next, jumps
       to jump, jumps across jumps, etc.  The pass is run multiple times.
       For historical reasons, it is occasionally referred to as the "jump
       optimization pass".  The bulk of the code for this pass is in
!      ‘cfgcleanup.cc’, and there are support routines in ‘cfgrtl.cc’ and
!      ‘jump.cc’.
  
!    • Forward propagation of single-def values
  
       This pass attempts to remove redundant computation by substituting
       variables that come from a single definition, and seeing if the
       result can be simplified.  It performs copy propagation and
       addressing mode selection.  The pass is run twice, with values
       being propagated into loops only on the second run.  The code is
!      located in ‘fwprop.cc’.
  
!    • Common subexpression elimination
  
       This pass removes redundant computation within basic blocks, and
       optimizes addressing modes based on cost.  The pass is run twice.
!      The code for this pass is located in ‘cse.cc’.
  
!    • Global common subexpression elimination
  
       This pass performs two different types of GCSE depending on whether
       you are optimizing for size or not (LCM based GCSE tends to
*************** passes that are run after the Tree optim
*** 9022,9088 ****
       perform load and store motion when optimizing for speed.
       Regardless of which type of GCSE is used, the GCSE pass also
       performs global constant and copy propagation.  The source file for
!      this pass is 'gcse.cc', and the LCM routines are in 'lcm.cc'.
  
!    * Loop optimization
  
       This pass performs several loop related optimizations.  The source
!      files 'cfgloopanal.cc' and 'cfgloopmanip.cc' contain generic loop
       analysis and manipulation code.  Initialization and finalization of
!      loop structures is handled by 'loop-init.cc'.  A loop invariant
!      motion pass is implemented in 'loop-invariant.cc'.  Basic block
       level optimizations--unrolling, and peeling loops-- are implemented
!      in 'loop-unroll.cc'.  Replacing of the exit condition of loops by
       special machine-dependent instructions is handled by
!      'loop-doloop.cc'.
  
!    * Jump bypassing
  
       This pass is an aggressive form of GCSE that transforms the control
       flow graph of a function by propagating constants into conditional
!      branch instructions.  The source file for this pass is 'gcse.cc'.
  
!    * If conversion
  
       This pass attempts to replace conditional branches and surrounding
       assignments with arithmetic, boolean value producing comparison
       instructions, and conditional move instructions.  In the very last
       invocation after reload/LRA, it will generate predicated
       instructions when supported by the target.  The code is located in
!      'ifcvt.cc'.
  
!    * Web construction
  
       This pass splits independent uses of each pseudo-register.  This
       can improve effect of the other transformation, such as CSE or
       register allocation.  The code for this pass is located in
!      'web.cc'.
  
!    * Instruction combination
  
       This pass attempts to combine groups of two or three instructions
       that are related by data flow into single instructions.  It
       combines the RTL expressions for the instructions by substitution,
       simplifies the result using algebra, and then attempts to match the
       result against the machine description.  The code is located in
!      'combine.cc'.
  
!    * Mode switching optimization
  
       This pass looks for instructions that require the processor to be
       in a specific "mode" and minimizes the number of mode changes
       required to satisfy all users.  What these modes are, and what they
       apply to are completely target-specific.  The code for this pass is
!      located in 'mode-switching.cc'.
  
!    * Modulo scheduling
  
       This pass looks at innermost loops and reorders their instructions
       by overlapping different iterations.  Modulo scheduling is
       performed immediately before instruction scheduling.  The code for
!      this pass is located in 'modulo-sched.cc'.
  
!    * Instruction scheduling
  
       This pass looks for instructions whose output will not be available
       by the time that it is used in subsequent instructions.  Memory
--- 9024,9090 ----
       perform load and store motion when optimizing for speed.
       Regardless of which type of GCSE is used, the GCSE pass also
       performs global constant and copy propagation.  The source file for
!      this pass is ‘gcse.cc’, and the LCM routines are in ‘lcm.cc’.
  
!    • Loop optimization
  
       This pass performs several loop related optimizations.  The source
!      files ‘cfgloopanal.cc’ and ‘cfgloopmanip.cc’ contain generic loop
       analysis and manipulation code.  Initialization and finalization of
!      loop structures is handled by ‘loop-init.cc’.  A loop invariant
!      motion pass is implemented in ‘loop-invariant.cc’.  Basic block
       level optimizations--unrolling, and peeling loops-- are implemented
!      in ‘loop-unroll.cc’.  Replacing of the exit condition of loops by
       special machine-dependent instructions is handled by
!      ‘loop-doloop.cc’.
  
!    • Jump bypassing
  
       This pass is an aggressive form of GCSE that transforms the control
       flow graph of a function by propagating constants into conditional
!      branch instructions.  The source file for this pass is ‘gcse.cc’.
  
!    • If conversion
  
       This pass attempts to replace conditional branches and surrounding
       assignments with arithmetic, boolean value producing comparison
       instructions, and conditional move instructions.  In the very last
       invocation after reload/LRA, it will generate predicated
       instructions when supported by the target.  The code is located in
!      ‘ifcvt.cc’.
  
!    • Web construction
  
       This pass splits independent uses of each pseudo-register.  This
       can improve effect of the other transformation, such as CSE or
       register allocation.  The code for this pass is located in
!      ‘web.cc’.
  
!    • Instruction combination
  
       This pass attempts to combine groups of two or three instructions
       that are related by data flow into single instructions.  It
       combines the RTL expressions for the instructions by substitution,
       simplifies the result using algebra, and then attempts to match the
       result against the machine description.  The code is located in
!      ‘combine.cc’.
  
!    • Mode switching optimization
  
       This pass looks for instructions that require the processor to be
       in a specific "mode" and minimizes the number of mode changes
       required to satisfy all users.  What these modes are, and what they
       apply to are completely target-specific.  The code for this pass is
!      located in ‘mode-switching.cc’.
  
!    • Modulo scheduling
  
       This pass looks at innermost loops and reorders their instructions
       by overlapping different iterations.  Modulo scheduling is
       performed immediately before instruction scheduling.  The code for
!      this pass is located in ‘modulo-sched.cc’.
  
!    • Instruction scheduling
  
       This pass looks for instructions whose output will not be available
       by the time that it is used in subsequent instructions.  Memory
*************** passes that are run after the Tree optim
*** 9091,9107 ****
       try to separate the definition and use of items that otherwise
       would cause pipeline stalls.  This pass is performed twice, before
       and after register allocation.  The code for this pass is located
!      in 'haifa-sched.cc', 'sched-deps.cc', 'sched-ebb.cc',
!      'sched-rgn.cc' and 'sched-vis.c'.
  
!    * Register allocation
  
       These passes make sure that all occurrences of pseudo registers are
       eliminated, either by allocating them to a hard register, replacing
       them by an equivalent expression (e.g. a constant) or by placing
       them on the stack.  This is done in several subpasses:
  
!         * The integrated register allocator (IRA).  It is called
            integrated because coalescing, register live range splitting,
            and hard register preferencing are done on-the-fly during
            coloring.  It also has better integration with the reload/LRA
--- 9093,9109 ----
       try to separate the definition and use of items that otherwise
       would cause pipeline stalls.  This pass is performed twice, before
       and after register allocation.  The code for this pass is located
!      in ‘haifa-sched.cc’, ‘sched-deps.cc’, ‘sched-ebb.cc’,
!      ‘sched-rgn.cc’ and ‘sched-vis.c’.
  
!    • Register allocation
  
       These passes make sure that all occurrences of pseudo registers are
       eliminated, either by allocating them to a hard register, replacing
       them by an equivalent expression (e.g. a constant) or by placing
       them on the stack.  This is done in several subpasses:
  
!         • The integrated register allocator (IRA).  It is called
            integrated because coalescing, register live range splitting,
            and hard register preferencing are done on-the-fly during
            coloring.  It also has better integration with the reload/LRA
*************** passes that are run after the Tree optim
*** 9116,9128 ****
            regions using register pressure but the user can force it to
            use one region or regions corresponding to all loops.
  
!           Source files of the allocator are 'ira.cc', 'ira-build.cc',
!           'ira-costs.cc', 'ira-conflicts.cc', 'ira-color.cc',
!           'ira-emit.cc', 'ira-lives', plus header files 'ira.h' and
!           'ira-int.h' used for the communication between the allocator
            and the rest of the compiler and between the IRA files.
  
!         * Reloading.  This pass renumbers pseudo registers with the
            hardware registers numbers they were allocated.  Pseudo
            registers that did not get hard registers are replaced with
            stack slots.  Then it finds instructions that are invalid
--- 9118,9130 ----
            regions using register pressure but the user can force it to
            use one region or regions corresponding to all loops.
  
!           Source files of the allocator are ‘ira.cc’, ‘ira-build.cc’,
!           ‘ira-costs.cc’, ‘ira-conflicts.cc’, ‘ira-color.cc’,
!           ‘ira-emit.cc’, ‘ira-lives’, plus header files ‘ira.h’ and
!           ‘ira-int.h’ used for the communication between the allocator
            and the rest of the compiler and between the IRA files.
  
!         • Reloading.  This pass renumbers pseudo registers with the
            hardware registers numbers they were allocated.  Pseudo
            registers that did not get hard registers are replaced with
            stack slots.  Then it finds instructions that are invalid
*************** passes that are run after the Tree optim
*** 9136,9149 ****
            and inserts instructions to save and restore call-clobbered
            registers around calls.
  
!           Source files are 'reload.cc' and 'reload1.cc', plus the header
!           'reload.h' used for communication between them.
  
!         * This pass is a modern replacement of the reload pass.  Source
!           files are 'lra.cc', 'lra-assign.c', 'lra-coalesce.cc',
!           'lra-constraints.cc', 'lra-eliminations.cc', 'lra-lives.cc',
!           'lra-remat.cc', 'lra-spills.cc', the header 'lra-int.h' used
!           for communication between them, and the header 'lra.h' used
            for communication between LRA and the rest of compiler.
  
            Unlike the reload pass, intermediate LRA decisions are
--- 9138,9151 ----
            and inserts instructions to save and restore call-clobbered
            registers around calls.
  
!           Source files are ‘reload.cc’ and ‘reload1.cc’, plus the header
!           ‘reload.h’ used for communication between them.
  
!         • This pass is a modern replacement of the reload pass.  Source
!           files are ‘lra.cc’, ‘lra-assign.c’, ‘lra-coalesce.cc’,
!           ‘lra-constraints.cc’, ‘lra-eliminations.cc’, ‘lra-lives.cc’,
!           ‘lra-remat.cc’, ‘lra-spills.cc’, the header ‘lra-int.h’ used
!           for communication between them, and the header ‘lra.h’ used
            for communication between LRA and the rest of compiler.
  
            Unlike the reload pass, intermediate LRA decisions are
*************** passes that are run after the Tree optim
*** 9153,9182 ****
  
            LRA is run on targets for which TARGET_LRA_P returns true.
  
!    * Basic block reordering
  
       This pass implements profile guided code positioning.  If profile
       information is not available, various types of static analysis are
       performed to make the predictions normally coming from the profile
       feedback (IE execution frequency, branch probability, etc).  It is
!      implemented in the file 'bb-reorder.cc', and the various prediction
!      routines are in 'predict.cc'.
  
!    * Variable tracking
  
       This pass computes where the variables are stored at each position
       in code and generates notes describing the variable locations to
       RTL code.  The location lists are then generated according to these
       notes to debug information if the debugging information format
!      supports location lists.  The code is located in 'var-tracking.cc'.
  
!    * Delayed branch scheduling
  
       This optional pass attempts to find instructions that can go into
       the delay slots of other instructions, usually jumps and calls.
!      The code for this pass is located in 'reorg.cc'.
  
!    * Branch shortening
  
       On many RISC machines, branch instructions have a limited range.
       Thus, longer sequences of instructions must be used for long
--- 9155,9184 ----
  
            LRA is run on targets for which TARGET_LRA_P returns true.
  
!    • Basic block reordering
  
       This pass implements profile guided code positioning.  If profile
       information is not available, various types of static analysis are
       performed to make the predictions normally coming from the profile
       feedback (IE execution frequency, branch probability, etc).  It is
!      implemented in the file ‘bb-reorder.cc’, and the various prediction
!      routines are in ‘predict.cc’.
  
!    • Variable tracking
  
       This pass computes where the variables are stored at each position
       in code and generates notes describing the variable locations to
       RTL code.  The location lists are then generated according to these
       notes to debug information if the debugging information format
!      supports location lists.  The code is located in ‘var-tracking.cc’.
  
!    • Delayed branch scheduling
  
       This optional pass attempts to find instructions that can go into
       the delay slots of other instructions, usually jumps and calls.
!      The code for this pass is located in ‘reorg.cc’.
  
!    • Branch shortening
  
       On many RISC machines, branch instructions have a limited range.
       Thus, longer sequences of instructions must be used for long
*************** passes that are run after the Tree optim
*** 9184,9213 ****
       instruction will be from each other instruction, and therefore
       whether the usual instructions, or the longer sequences, must be
       used for each branch.  The code for this pass is located in
!      'final.cc'.
  
!    * Register-to-stack conversion
  
       Conversion from usage of some hard registers to usage of a register
       stack may be done at this point.  Currently, this is supported only
       for the floating-point registers of the Intel 80387 coprocessor.
!      The code for this pass is located in 'reg-stack.cc'.
  
!    * Final
  
       This pass outputs the assembler code for the function.  The source
!      files are 'final.cc' plus 'insn-output.cc'; the latter is generated
!      automatically from the machine description by the tool 'genoutput'.
!      The header file 'conditions.h' is used for communication between
       these files.
  
!    * Debugging information output
  
       This is run after final because it must output the stack slot
       offsets for pseudo registers that did not get hard registers.
!      Source files are 'dwarfout.c' for DWARF symbol table format, files
!      'dwarf2out.cc' and 'dwarf2asm.cc' for DWARF2 symbol table format,
!      and 'vmsdbgout.cc' for VMS debug symbol table format.
  
  
  File: gccint.info,  Node: Optimization info,  Prev: RTL passes,  Up: Passes
--- 9186,9215 ----
       instruction will be from each other instruction, and therefore
       whether the usual instructions, or the longer sequences, must be
       used for each branch.  The code for this pass is located in
!      ‘final.cc’.
  
!    • Register-to-stack conversion
  
       Conversion from usage of some hard registers to usage of a register
       stack may be done at this point.  Currently, this is supported only
       for the floating-point registers of the Intel 80387 coprocessor.
!      The code for this pass is located in ‘reg-stack.cc’.
  
!    • Final
  
       This pass outputs the assembler code for the function.  The source
!      files are ‘final.cc’ plus ‘insn-output.cc’; the latter is generated
!      automatically from the machine description by the tool ‘genoutput’.
!      The header file ‘conditions.h’ is used for communication between
       these files.
  
!    • Debugging information output
  
       This is run after final because it must output the stack slot
       offsets for pseudo registers that did not get hard registers.
!      Source files are ‘dwarfout.c’ for DWARF symbol table format, files
!      ‘dwarf2out.cc’ and ‘dwarf2asm.cc’ for DWARF2 symbol table format,
!      and ‘vmsdbgout.cc’ for VMS debug symbol table format.
  
  
  File: gccint.info,  Node: Optimization info,  Prev: RTL passes,  Up: Passes
*************** File: gccint.info,  Node: Dump setup,  N
*** 9235,9258 ****
  9.7.1 Dump setup
  ----------------
  
! A dump_manager class is defined in 'dumpfile.h'.  Various passes
! register dumping pass-specific information via 'dump_register' in
! 'passes.cc'.  During the registration, an optimization pass can select
  its optimization group (*note Optimization groups::).  After that
  optimization information corresponding to the entire group (presumably
  from multiple passes) can be output via command-line switches.  Note
  that if a pass does not fit into any of the pre-defined groups, it can
! select 'OPTGROUP_NONE'.
  
   Note that in general, a pass need not know its dump output file name,
  whether certain flags are enabled, etc.  However, for legacy reasons,
! passes could also call 'dump_begin' which returns a stream in case the
  particular pass has optimization dumps enabled.  A pass could call
! 'dump_end' when the dump has ended.  These methods should go away once
  all the passes are converted to use the new dump infrastructure.
  
!  The recommended way to setup the dump output is via 'dump_start' and
! 'dump_end'.
  
  
  File: gccint.info,  Node: Optimization groups,  Next: Dump files and streams,  Prev: Dump setup,  Up: Optimization info
--- 9237,9260 ----
  9.7.1 Dump setup
  ----------------
  
! A dump_manager class is defined in ‘dumpfile.h’.  Various passes
! register dumping pass-specific information via ‘dump_register’ in
! ‘passes.cc’.  During the registration, an optimization pass can select
  its optimization group (*note Optimization groups::).  After that
  optimization information corresponding to the entire group (presumably
  from multiple passes) can be output via command-line switches.  Note
  that if a pass does not fit into any of the pre-defined groups, it can
! select ‘OPTGROUP_NONE’.
  
   Note that in general, a pass need not know its dump output file name,
  whether certain flags are enabled, etc.  However, for legacy reasons,
! passes could also call ‘dump_begin’ which returns a stream in case the
  particular pass has optimization dumps enabled.  A pass could call
! ‘dump_end’ when the dump has ended.  These methods should go away once
  all the passes are converted to use the new dump infrastructure.
  
!  The recommended way to setup the dump output is via ‘dump_start’ and
! ‘dump_end’.
  
  
  File: gccint.info,  Node: Optimization groups,  Next: Dump files and streams,  Prev: Dump setup,  Up: Optimization info
*************** File: gccint.info,  Node: Optimization g
*** 9261,9289 ****
  -------------------------
  
  The optimization passes are grouped into several categories.  Currently
! defined categories in 'dumpfile.h' are
  
! 'OPTGROUP_IPA'
!      IPA optimization passes.  Enabled by '-ipa'
  
! 'OPTGROUP_LOOP'
!      Loop optimization passes.  Enabled by '-loop'.
  
! 'OPTGROUP_INLINE'
!      Inlining passes.  Enabled by '-inline'.
  
! 'OPTGROUP_OMP'
!      OMP (Offloading and Multi Processing) passes.  Enabled by '-omp'.
  
! 'OPTGROUP_VEC'
!      Vectorization passes.  Enabled by '-vec'.
  
! 'OPTGROUP_OTHER'
       All other optimization passes which do not fall into one of the
       above.
  
! 'OPTGROUP_ALL'
!      All optimization passes.  Enabled by '-optall'.
  
   By using groups a user could selectively enable optimization
  information only for a group of passes.  By default, the optimization
--- 9263,9291 ----
  -------------------------
  
  The optimization passes are grouped into several categories.  Currently
! defined categories in ‘dumpfile.h’ are
  
! ‘OPTGROUP_IPA’
!      IPA optimization passes.  Enabled by ‘-ipa’
  
! ‘OPTGROUP_LOOP’
!      Loop optimization passes.  Enabled by ‘-loop’.
  
! ‘OPTGROUP_INLINE’
!      Inlining passes.  Enabled by ‘-inline’.
  
! ‘OPTGROUP_OMP’
!      OMP (Offloading and Multi Processing) passes.  Enabled by ‘-omp’.
  
! ‘OPTGROUP_VEC’
!      Vectorization passes.  Enabled by ‘-vec’.
  
! ‘OPTGROUP_OTHER’
       All other optimization passes which do not fall into one of the
       above.
  
! ‘OPTGROUP_ALL’
!      All optimization passes.  Enabled by ‘-optall’.
  
   By using groups a user could selectively enable optimization
  information only for a group of passes.  By default, the optimization
*************** File: gccint.info,  Node: Dump files and
*** 9297,9320 ****
  
  There are two separate output streams available for outputting
  optimization information from passes.  Note that both these streams
! accept 'stderr' and 'stdout' as valid streams and thus it is possible to
  dump output to standard output or error.  This is specially handy for
  outputting all available information in a single file by redirecting
! 'stderr'.
  
! 'pstream'
       This stream is for pass-specific dump output.  For example,
!      '-fdump-tree-vect=foo.v' dumps tree vectorization pass output into
!      the given file name 'foo.v'.  If the file name is not provided, the
       default file name is based on the source file and pass number.
!      Note that one could also use special file names 'stdout' and
!      'stderr' for dumping to standard output and standard error
       respectively.
  
! 'alt_stream'
       This stream is used for printing optimization specific output in
!      response to the '-fopt-info'.  Again a file name can be given.  If
!      the file name is not given, it defaults to 'stderr'.
  
  
  File: gccint.info,  Node: Dump output verbosity,  Next: Dump types,  Prev: Dump files and streams,  Up: Optimization info
--- 9299,9322 ----
  
  There are two separate output streams available for outputting
  optimization information from passes.  Note that both these streams
! accept ‘stderr’ and ‘stdout’ as valid streams and thus it is possible to
  dump output to standard output or error.  This is specially handy for
  outputting all available information in a single file by redirecting
! ‘stderr’.
  
! ‘pstream’
       This stream is for pass-specific dump output.  For example,
!      ‘-fdump-tree-vect=foo.v’ dumps tree vectorization pass output into
!      the given file name ‘foo.v’.  If the file name is not provided, the
       default file name is based on the source file and pass number.
!      Note that one could also use special file names ‘stdout’ and
!      ‘stderr’ for dumping to standard output and standard error
       respectively.
  
! ‘alt_stream’
       This stream is used for printing optimization specific output in
!      response to the ‘-fopt-info’.  Again a file name can be given.  If
!      the file name is not given, it defaults to ‘stderr’.
  
  
  File: gccint.info,  Node: Dump output verbosity,  Next: Dump types,  Prev: Dump files and streams,  Up: Optimization info
*************** File: gccint.info,  Node: Dump output ve
*** 9324,9336 ****
  
  The dump verbosity has the following options
  
! 'optimized'
       Print information when an optimization is successfully applied.  It
       is up to a pass to decide which information is relevant.  For
       example, the vectorizer passes print the source location of loops
       which got successfully vectorized.
  
! 'missed'
       Print information about missed optimizations.  Individual passes
       control which information to include in the output.  For example,
  
--- 9326,9338 ----
  
  The dump verbosity has the following options
  
! ‘optimized’
       Print information when an optimization is successfully applied.  It
       is up to a pass to decide which information is relevant.  For
       example, the vectorizer passes print the source location of loops
       which got successfully vectorized.
  
! ‘missed’
       Print information about missed optimizations.  Individual passes
       control which information to include in the output.  For example,
  
*************** The dump verbosity has the following opt
*** 9339,9349 ****
       will print information about missed optimization opportunities from
       vectorization passes on stderr.
  
! 'note'
       Print verbose information about optimizations, such as certain
       transformations, more detailed messages about decisions etc.
  
! 'all'
       Print detailed optimization information.  This includes OPTIMIZED,
       MISSED, and NOTE.
  
--- 9341,9351 ----
       will print information about missed optimization opportunities from
       vectorization passes on stderr.
  
! ‘note’
       Print verbose information about optimizations, such as certain
       transformations, more detailed messages about decisions etc.
  
! ‘all’
       Print detailed optimization information.  This includes OPTIMIZED,
       MISSED, and NOTE.
  
*************** File: gccint.info,  Node: Dump types,  N
*** 9353,9403 ****
  9.7.5 Dump types
  ----------------
  
! 'dump_printf'
  
       This is a generic method for doing formatted output.  It takes an
!      additional argument 'dump_kind' which signifies the type of dump.
       This method outputs information only when the dumps are enabled for
!      this particular 'dump_kind'.  Note that the caller doesn't need to
       know if the particular dump is enabled or not, or even the file
       name.  The caller only needs to decide which dump output
       information is relevant, and under what conditions.  This
       determines the associated flags.
  
!      Consider the following example from 'loop-unroll.cc' where an
       informative message about a loop (along with its location) is
       printed when any of the following flags is enabled
  
!         - optimization messages
!         - RTL dumps
!         - detailed dumps
  
            int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS;
            dump_printf_loc (report_flags, insn,
                             "loop turned into non-loop; it never loops.\n");
  
! 'dump_basic_block'
       Output basic block.
! 'dump_generic_expr'
       Output generic expression.
! 'dump_gimple_stmt'
       Output gimple statement.
  
       Note that the above methods also have variants prefixed with
!      '_loc', such as 'dump_printf_loc', which are similar except they
!      also output the source location information.  The '_loc' variants
!      take a 'const dump_location_t &'.  This class can be constructed
!      from a 'gimple *' or from a 'rtx_insn *', and so callers can pass a
!      'gimple *' or a 'rtx_insn *' as the '_loc' argument.  The
!      'dump_location_t' constructor will extract the source location from
       the statement or instruction, along with the profile count, and the
       location in GCC's own source code (or the plugin) from which the
       dump call was emitted.  Only the source location is currently used.
!      There is also a 'dump_user_location_t' class, capturing the source
       location and profile count, but not the dump emission location, so
       that locations in the user's code can be passed around.  This can
!      also be constructed from a 'gimple *' and from a 'rtx_insn *', and
!      it too can be passed as the '_loc' argument.
  
  
  File: gccint.info,  Node: Dump examples,  Prev: Dump types,  Up: Optimization info
--- 9355,9405 ----
  9.7.5 Dump types
  ----------------
  
! ‘dump_printf’
  
       This is a generic method for doing formatted output.  It takes an
!      additional argument ‘dump_kind’ which signifies the type of dump.
       This method outputs information only when the dumps are enabled for
!      this particular ‘dump_kind’.  Note that the caller doesn't need to
       know if the particular dump is enabled or not, or even the file
       name.  The caller only needs to decide which dump output
       information is relevant, and under what conditions.  This
       determines the associated flags.
  
!      Consider the following example from ‘loop-unroll.cc’ where an
       informative message about a loop (along with its location) is
       printed when any of the following flags is enabled
  
!         − optimization messages
!         − RTL dumps
!         − detailed dumps
  
            int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS;
            dump_printf_loc (report_flags, insn,
                             "loop turned into non-loop; it never loops.\n");
  
! ‘dump_basic_block’
       Output basic block.
! ‘dump_generic_expr’
       Output generic expression.
! ‘dump_gimple_stmt’
       Output gimple statement.
  
       Note that the above methods also have variants prefixed with
!      ‘_loc’, such as ‘dump_printf_loc’, which are similar except they
!      also output the source location information.  The ‘_loc’ variants
!      take a ‘const dump_location_t &’.  This class can be constructed
!      from a ‘gimple *’ or from a ‘rtx_insn *’, and so callers can pass a
!      ‘gimple *’ or a ‘rtx_insn *’ as the ‘_loc’ argument.  The
!      ‘dump_location_t’ constructor will extract the source location from
       the statement or instruction, along with the profile count, and the
       location in GCC's own source code (or the plugin) from which the
       dump call was emitted.  Only the source location is currently used.
!      There is also a ‘dump_user_location_t’ class, capturing the source
       location and profile count, but not the dump emission location, so
       that locations in the user's code can be passed around.  This can
!      also be constructed from a ‘gimple *’ and from a ‘rtx_insn *’, and
!      it too can be passed as the ‘_loc’ argument.
  
  
  File: gccint.info,  Node: Dump examples,  Prev: Dump types,  Up: Optimization info
*************** File: gccint.info,  Node: Dump examples,
*** 9408,9442 ****
       gcc -O3 -fopt-info-missed=missed.all
  
   outputs missed optimization report from all the passes into
! 'missed.all'.
  
   As another example,
       gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
  
   will output information about missed optimizations as well as optimized
! locations from all the inlining passes into 'inline.txt'.
  
   If the FILENAME is provided, then the dumps from all the applicable
! optimizations are concatenated into the 'filename'.  Otherwise the dump
! is output onto 'stderr'.  If OPTIONS is omitted, it defaults to
! 'optimized-optall', which means dump all information about successful
  optimizations from all the passes.  In the following example, the
! optimization information is output on to 'stderr'.
  
       gcc -O3 -fopt-info
  
!  Note that '-fopt-info-vec-missed' behaves the same as
! '-fopt-info-missed-vec'.  The order of the optimization group names and
! message types listed after '-fopt-info' does not matter.
  
   As another example, consider
  
       gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
  
!  Here the two output file names 'vec.miss' and 'loop.opt' are in
  conflict since only one output file is allowed.  In this case, only the
  first option takes effect and the subsequent options are ignored.  Thus
! only the 'vec.miss' is produced which containts dumps from the
  vectorizer about missed opportunities.
  
  
--- 9410,9444 ----
       gcc -O3 -fopt-info-missed=missed.all
  
   outputs missed optimization report from all the passes into
! ‘missed.all’.
  
   As another example,
       gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
  
   will output information about missed optimizations as well as optimized
! locations from all the inlining passes into ‘inline.txt’.
  
   If the FILENAME is provided, then the dumps from all the applicable
! optimizations are concatenated into the ‘filename’.  Otherwise the dump
! is output onto ‘stderr’.  If OPTIONS is omitted, it defaults to
! ‘optimized-optall’, which means dump all information about successful
  optimizations from all the passes.  In the following example, the
! optimization information is output on to ‘stderr’.
  
       gcc -O3 -fopt-info
  
!  Note that ‘-fopt-info-vec-missed’ behaves the same as
! ‘-fopt-info-missed-vec’.  The order of the optimization group names and
! message types listed after ‘-fopt-info’ does not matter.
  
   As another example, consider
  
       gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
  
!  Here the two output file names ‘vec.miss’ and ‘loop.opt’ are in
  conflict since only one output file is allowed.  In this case, only the
  first option takes effect and the subsequent options are ignored.  Thus
! only the ‘vec.miss’ is produced which containts dumps from the
  vectorizer about missed opportunities.
  
  
*************** rather than a compile-time constant.  Th
*** 9450,9474 ****
  sizes and offsets must also be runtime invariants rather than
  compile-time constants, such as:
  
!    * the size of a general 'machine_mode' (*note Machine Modes::);
  
!    * the size of a spill slot;
  
!    * the offset of something within a stack frame;
  
!    * the number of elements in a vector;
  
!    * the size and offset of a 'mem' rtx (*note Regs and Memory::); and
  
!    * the byte offset in a 'subreg' rtx (*note Regs and Memory::).
  
   The motivating example is the Arm SVE ISA, whose vector registers can
  be any multiple of 128 bits between 128 and 2048 inclusive.  The
  compiler normally produces code that works for all SVE register sizes,
  with the actual size only being known at runtime.
  
!  GCC's main representation of such runtime invariants is the 'poly_int'
! class.  This chapter describes what 'poly_int' does, lists the available
  operations, and gives some general usage guidelines.
  
  * Menu:
--- 9452,9476 ----
  sizes and offsets must also be runtime invariants rather than
  compile-time constants, such as:
  
!    • the size of a general ‘machine_mode’ (*note Machine Modes::);
  
!    • the size of a spill slot;
  
!    • the offset of something within a stack frame;
  
!    • the number of elements in a vector;
  
!    • the size and offset of a ‘mem’ rtx (*note Regs and Memory::); and
  
!    • the byte offset in a ‘subreg’ rtx (*note Regs and Memory::).
  
   The motivating example is the Arm SVE ISA, whose vector registers can
  be any multiple of 128 bits between 128 and 2048 inclusive.  The
  compiler normally produces code that works for all SVE register sizes,
  with the actual size only being known at runtime.
  
!  GCC's main representation of such runtime invariants is the ‘poly_int’
! class.  This chapter describes what ‘poly_int’ does, lists the available
  operations, and gives some general usage guidelines.
  
  * Menu:
*************** operations, and gives some general usage
*** 9486,9492 ****
  
  File: gccint.info,  Node: Overview of poly_int,  Next: Consequences of using poly_int,  Up: poly_int
  
! 10.1 Overview of 'poly_int'
  ===========================
  
  We define indeterminates X1, ..., XN whose values are only known at
--- 9488,9494 ----
  
  File: gccint.info,  Node: Overview of poly_int,  Next: Consequences of using poly_int,  Up: poly_int
  
! 10.1 Overview of ‘poly_int’
  ===========================
  
  We define indeterminates X1, ..., XN whose values are only known at
*************** indeterminates.  The coefficients C0, ..
*** 9499,9520 ****
  compile time, with the C0 term being the "constant" part that does not
  depend on any runtime value.
  
!  GCC uses the 'poly_int' class to represent these coefficients.  The
  class has two template parameters: the first specifies the number of
  coefficients (N + 1) and the second specifies the type of the
! coefficients.  For example, 'poly_int<2, unsigned short>' represents a
  polynomial with two coefficients (and thus one indeterminate), with each
! coefficient having type 'unsigned short'.  When N is 0, the class
  degenerates to a single compile-time constant C0.
  
   The number of coefficients needed for compilation is a fixed property
  of each target and is specified by the configuration macro
! 'NUM_POLY_INT_COEFFS'.  The default value is 1, since most targets do
  not have such runtime invariants.  Targets that need a different value
! should '#define' the macro in their 'CPU-modes.def' file.  *Note Back
  End::.
  
!  'poly_int' makes the simplifying requirement that each indeterminate
  must be a nonnegative integer.  An indeterminate value of 0 should
  usually represent the minimum possible runtime value, with C0 specifying
  the value in that case.
--- 9501,9522 ----
  compile time, with the C0 term being the "constant" part that does not
  depend on any runtime value.
  
!  GCC uses the ‘poly_int’ class to represent these coefficients.  The
  class has two template parameters: the first specifies the number of
  coefficients (N + 1) and the second specifies the type of the
! coefficients.  For example, ‘poly_int<2, unsigned short>’ represents a
  polynomial with two coefficients (and thus one indeterminate), with each
! coefficient having type ‘unsigned short’.  When N is 0, the class
  degenerates to a single compile-time constant C0.
  
   The number of coefficients needed for compilation is a fixed property
  of each target and is specified by the configuration macro
! ‘NUM_POLY_INT_COEFFS’.  The default value is 1, since most targets do
  not have such runtime invariants.  Targets that need a different value
! should ‘#define’ the macro in their ‘CPU-modes.def’ file.  *Note Back
  End::.
  
!  ‘poly_int’ makes the simplifying requirement that each indeterminate
  must be a nonnegative integer.  An indeterminate value of 0 should
  usually represent the minimum possible runtime value, with C0 specifying
  the value in that case.
*************** length of 128 bits_.  Thus the number of
*** 9525,9568 ****
  is 2 + 2 * X1.  If an aggregate has a single SVE vector and 16
  additional bytes, its total size is 32 + 16 * X1 bytes.
  
!  The header file 'poly-int-types.h' provides typedefs for the most
! common forms of 'poly_int', all having 'NUM_POLY_INT_COEFFS'
  coefficients:
  
! 'poly_uint16'
!      a 'poly_int' with 'unsigned short' coefficients.
  
! 'poly_int64'
!      a 'poly_int' with 'HOST_WIDE_INT' coefficients.
  
! 'poly_uint64'
!      a 'poly_int' with 'unsigned HOST_WIDE_INT' coefficients.
  
! 'poly_offset_int'
!      a 'poly_int' with 'offset_int' coefficients.
  
! 'poly_wide_int'
!      a 'poly_int' with 'wide_int' coefficients.
  
! 'poly_widest_int'
!      a 'poly_int' with 'widest_int' coefficients.
  
!  Since the main purpose of 'poly_int' is to represent sizes and offsets,
  the last two typedefs are only rarely used.
  
  
  File: gccint.info,  Node: Consequences of using poly_int,  Next: Comparisons involving poly_int,  Prev: Overview of poly_int,  Up: poly_int
  
! 10.2 Consequences of using 'poly_int'
  =====================================
  
  The two main consequences of using polynomial sizes and offsets are
  that:
  
!    * there is no total ordering between the values at compile time, and
  
!    * some operations might yield results that cannot be expressed as a
!      'poly_int'.
  
   For example, if X is a runtime invariant, we cannot tell at compile
  time whether:
--- 9527,9570 ----
  is 2 + 2 * X1.  If an aggregate has a single SVE vector and 16
  additional bytes, its total size is 32 + 16 * X1 bytes.
  
!  The header file ‘poly-int-types.h’ provides typedefs for the most
! common forms of ‘poly_int’, all having ‘NUM_POLY_INT_COEFFS’
  coefficients:
  
! ‘poly_uint16’
!      a ‘poly_int’ with ‘unsigned short’ coefficients.
  
! ‘poly_int64’
!      a ‘poly_int’ with ‘HOST_WIDE_INT’ coefficients.
  
! ‘poly_uint64’
!      a ‘poly_int’ with ‘unsigned HOST_WIDE_INT’ coefficients.
  
! ‘poly_offset_int’
!      a ‘poly_int’ with ‘offset_int’ coefficients.
  
! ‘poly_wide_int’
!      a ‘poly_int’ with ‘wide_int’ coefficients.
  
! ‘poly_widest_int’
!      a ‘poly_int’ with ‘widest_int’ coefficients.
  
!  Since the main purpose of ‘poly_int’ is to represent sizes and offsets,
  the last two typedefs are only rarely used.
  
  
  File: gccint.info,  Node: Consequences of using poly_int,  Next: Comparisons involving poly_int,  Prev: Overview of poly_int,  Up: poly_int
  
! 10.2 Consequences of using ‘poly_int’
  =====================================
  
  The two main consequences of using polynomial sizes and offsets are
  that:
  
!    • there is no total ordering between the values at compile time, and
  
!    • some operations might yield results that cannot be expressed as a
!      ‘poly_int’.
  
   For example, if X is a runtime invariant, we cannot tell at compile
  time whether:
*************** time whether:
*** 9571,9577 ****
  
   since the condition is false when X <= 1 and true when X >= 2.
  
!  Similarly, 'poly_int' cannot represent the result of:
  
       (3 + 4X) * (1 + 5X)
  
--- 9573,9579 ----
  
   since the condition is false when X <= 1 and true when X >= 2.
  
!  Similarly, ‘poly_int’ cannot represent the result of:
  
       (3 + 4X) * (1 + 5X)
  
*************** than one.  It also cannot represent the
*** 9582,9604 ****
  
   The following sections describe how we deal with these restrictions.
  
!  As described earlier, a 'poly_int<1, T>' has no indeterminates and so
  degenerates to a compile-time constant of type T.  It would be possible
  in that case to do all normal arithmetic on the T, and to compare the T
  using the normal C++ operators.  We deliberately prevent
  target-independent code from doing this, since the compiler needs to
! support other 'poly_int<N, T>' as well, regardless of the current
! target's 'NUM_POLY_INT_COEFFS'.
  
   However, it would be very artificial to force target-specific code to
  follow these restrictions if the target has no runtime indeterminates.
! There is therefore an implicit conversion from 'poly_int<1, T>' to T
  when compiling target-specific translation units.
  
  
  File: gccint.info,  Node: Comparisons involving poly_int,  Next: Arithmetic on poly_ints,  Prev: Consequences of using poly_int,  Up: poly_int
  
! 10.3 Comparisons involving 'poly_int'
  =====================================
  
  In general we need to compare sizes and offsets in two situations: those
--- 9584,9606 ----
  
   The following sections describe how we deal with these restrictions.
  
!  As described earlier, a ‘poly_int<1, T>’ has no indeterminates and so
  degenerates to a compile-time constant of type T.  It would be possible
  in that case to do all normal arithmetic on the T, and to compare the T
  using the normal C++ operators.  We deliberately prevent
  target-independent code from doing this, since the compiler needs to
! support other ‘poly_int<N, T>’ as well, regardless of the current
! target's ‘NUM_POLY_INT_COEFFS’.
  
   However, it would be very artificial to force target-specific code to
  follow these restrictions if the target has no runtime indeterminates.
! There is therefore an implicit conversion from ‘poly_int<1, T>’ to T
  when compiling target-specific translation units.
  
  
  File: gccint.info,  Node: Comparisons involving poly_int,  Next: Arithmetic on poly_ints,  Prev: Consequences of using poly_int,  Up: poly_int
  
! 10.3 Comparisons involving ‘poly_int’
  =====================================
  
  In general we need to compare sizes and offsets in two situations: those
*************** latter is alias analysis: we might want
*** 9613,9621 ****
  memory references overlap.
  
   Referring back to the examples in the previous section, it makes sense
! to ask whether a memory reference of size '3 + 4X' overlaps one of size
! '1 + 5X', but it does not make sense to have a subreg in which the outer
! mode has '3 + 4X' bytes and the inner mode has '1 + 5X' bytes (or vice
  versa).  Such subregs are always invalid and should trigger an internal
  compiler error if formed.
  
--- 9615,9623 ----
  memory references overlap.
  
   Referring back to the examples in the previous section, it makes sense
! to ask whether a memory reference of size ‘3 + 4X’ overlaps one of size
! ‘1 + 5X’, but it does not make sense to have a subreg in which the outer
! mode has ‘3 + 4X’ bytes and the inner mode has ‘1 + 5X’ bytes (or vice
  versa).  Such subregs are always invalid and should trigger an internal
  compiler error if formed.
  
*************** distinction affects how they are used.
*** 9635,9644 ****
  
  File: gccint.info,  Node: Comparison functions for poly_int,  Next: Properties of the poly_int comparisons,  Up: Comparisons involving poly_int
  
! 10.3.1 Comparison functions for 'poly_int'
  ------------------------------------------
  
! 'poly_int' provides the following routines for checking whether a
  particular condition "may be" (might be) true:
  
       maybe_lt maybe_le maybe_eq maybe_ge maybe_gt
--- 9637,9646 ----
  
  File: gccint.info,  Node: Comparison functions for poly_int,  Next: Properties of the poly_int comparisons,  Up: Comparisons involving poly_int
  
! 10.3.1 Comparison functions for ‘poly_int’
  ------------------------------------------
  
! ‘poly_int’ provides the following routines for checking whether a
  particular condition "may be" (might be) true:
  
       maybe_lt maybe_le maybe_eq maybe_ge maybe_gt
*************** particular condition "may be" (might be)
*** 9646,9670 ****
  
   The functions have their natural meaning:
  
! 'maybe_lt(A, B)'
       Return true if A might be less than B.
  
! 'maybe_le(A, B)'
       Return true if A might be less than or equal to B.
  
! 'maybe_eq(A, B)'
       Return true if A might be equal to B.
  
! 'maybe_ne(A, B)'
       Return true if A might not be equal to B.
  
! 'maybe_ge(A, B)'
       Return true if A might be greater than or equal to B.
  
! 'maybe_gt(A, B)'
       Return true if A might be greater than B.
  
!  For readability, 'poly_int' also provides "known" inverses of these
  functions:
  
       known_lt (A, B) == !maybe_ge (A, B)
--- 9648,9672 ----
  
   The functions have their natural meaning:
  
! ‘maybe_lt(A, B)’
       Return true if A might be less than B.
  
! ‘maybe_le(A, B)’
       Return true if A might be less than or equal to B.
  
! ‘maybe_eq(A, B)’
       Return true if A might be equal to B.
  
! ‘maybe_ne(A, B)’
       Return true if A might not be equal to B.
  
! ‘maybe_ge(A, B)’
       Return true if A might be greater than or equal to B.
  
! ‘maybe_gt(A, B)’
       Return true if A might be greater than B.
  
!  For readability, ‘poly_int’ also provides "known" inverses of these
  functions:
  
       known_lt (A, B) == !maybe_ge (A, B)
*************** functions:
*** 9677,9700 ****
  
  File: gccint.info,  Node: Properties of the poly_int comparisons,  Next: Comparing potentially-unordered poly_ints,  Prev: Comparison functions for poly_int,  Up: Comparisons involving poly_int
  
! 10.3.2 Properties of the 'poly_int' comparisons
  -----------------------------------------------
  
! All "maybe" relations except 'maybe_ne' are transitive, so for example:
  
       maybe_lt (A, B) && maybe_lt (B, C) implies maybe_lt (A, C)
  
!  for all A, B and C.  'maybe_lt', 'maybe_gt' and 'maybe_ne' are
  irreflexive, so for example:
  
       !maybe_lt (A, A)
  
!  is true for all A.  'maybe_le', 'maybe_eq' and 'maybe_ge' are
  reflexive, so for example:
  
       maybe_le (A, A)
  
!  is true for all A.  'maybe_eq' and 'maybe_ne' are symmetric, so:
  
       maybe_eq (A, B) == maybe_eq (B, A)
       maybe_ne (A, B) == maybe_ne (B, A)
--- 9679,9702 ----
  
  File: gccint.info,  Node: Properties of the poly_int comparisons,  Next: Comparing potentially-unordered poly_ints,  Prev: Comparison functions for poly_int,  Up: Comparisons involving poly_int
  
! 10.3.2 Properties of the ‘poly_int’ comparisons
  -----------------------------------------------
  
! All "maybe" relations except ‘maybe_ne’ are transitive, so for example:
  
       maybe_lt (A, B) && maybe_lt (B, C) implies maybe_lt (A, C)
  
!  for all A, B and C.  ‘maybe_lt’, ‘maybe_gt’ and ‘maybe_ne’ are
  irreflexive, so for example:
  
       !maybe_lt (A, A)
  
!  is true for all A.  ‘maybe_le’, ‘maybe_eq’ and ‘maybe_ge’ are
  reflexive, so for example:
  
       maybe_le (A, A)
  
!  is true for all A.  ‘maybe_eq’ and ‘maybe_ne’ are symmetric, so:
  
       maybe_eq (A, B) == maybe_eq (B, A)
       maybe_ne (A, B) == maybe_ne (B, A)
*************** reflexive, so for example:
*** 9711,9728 ****
       maybe_le (A, B) && maybe_le (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)]
       maybe_ge (A, B) && maybe_ge (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)]
  
!  One example is again 'A == 3 + 4X' and 'B == 1 + 5X', where 'maybe_le
! (A, B)', 'maybe_ge (A, B)' and 'maybe_ne (A, B)' all hold.  'maybe_le'
! and 'maybe_ge' are therefore not antisymetric and do not form a partial
  order.
  
   From the above, it follows that:
  
!    * All "known" relations except 'known_ne' are transitive.
  
!    * 'known_lt', 'known_ne' and 'known_gt' are irreflexive.
  
!    * 'known_le', 'known_eq' and 'known_ge' are reflexive.
  
   Also:
  
--- 9713,9730 ----
       maybe_le (A, B) && maybe_le (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)]
       maybe_ge (A, B) && maybe_ge (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)]
  
!  One example is again ‘A == 3 + 4X’ and ‘B == 1 + 5X’, where ‘maybe_le
! (A, B)’, ‘maybe_ge (A, B)’ and ‘maybe_ne (A, B)’ all hold.  ‘maybe_le’
! and ‘maybe_ge’ are therefore not antisymetric and do not form a partial
  order.
  
   From the above, it follows that:
  
!    • All "known" relations except ‘known_ne’ are transitive.
  
!    • ‘known_lt’, ‘known_ne’ and ‘known_gt’ are irreflexive.
  
!    • ‘known_le’, ‘known_eq’ and ‘known_ge’ are reflexive.
  
   Also:
  
*************** order.
*** 9733,9761 ****
       known_le (A, B) && known_le (B, A) == known_eq (A, B) [== !maybe_ne (A, B)]
       known_ge (A, B) && known_ge (B, A) == known_eq (A, B) [== !maybe_ne (A, B)]
  
!  'known_le' and 'known_ge' are therefore antisymmetric and are partial
  orders.  However:
  
       known_le (A, B) does not imply known_lt (A, B) || known_eq (A, B)
       known_ge (A, B) does not imply known_gt (A, B) || known_eq (A, B)
  
!  For example, 'known_le (4, 4 + 4X)' holds because the runtime
! indeterminate X is a nonnegative integer, but neither 'known_lt (4, 4 +
! 4X)' nor 'known_eq (4, 4 + 4X)' hold.
  
  
  File: gccint.info,  Node: Comparing potentially-unordered poly_ints,  Next: Comparing ordered poly_ints,  Prev: Properties of the poly_int comparisons,  Up: Comparisons involving poly_int
  
! 10.3.3 Comparing potentially-unordered 'poly_int's
  --------------------------------------------------
  
! In cases where there is no definite link between two 'poly_int's, we can
  usually make a conservatively-correct assumption.  For example, the
  conservative assumption for alias analysis is that two references
  _might_ alias.
  
   One way of checking whether [BEGIN1, END1) might overlap [BEGIN2, END2)
! using the 'poly_int' comparisons is:
  
       maybe_gt (END1, BEGIN2) && maybe_gt (END2, BEGIN1)
  
--- 9735,9763 ----
       known_le (A, B) && known_le (B, A) == known_eq (A, B) [== !maybe_ne (A, B)]
       known_ge (A, B) && known_ge (B, A) == known_eq (A, B) [== !maybe_ne (A, B)]
  
!  ‘known_le’ and ‘known_ge’ are therefore antisymmetric and are partial
  orders.  However:
  
       known_le (A, B) does not imply known_lt (A, B) || known_eq (A, B)
       known_ge (A, B) does not imply known_gt (A, B) || known_eq (A, B)
  
!  For example, ‘known_le (4, 4 + 4X)’ holds because the runtime
! indeterminate X is a nonnegative integer, but neither ‘known_lt (4, 4 +
! 4X)’ nor ‘known_eq (4, 4 + 4X)’ hold.
  
  
  File: gccint.info,  Node: Comparing potentially-unordered poly_ints,  Next: Comparing ordered poly_ints,  Prev: Properties of the poly_int comparisons,  Up: Comparisons involving poly_int
  
! 10.3.3 Comparing potentially-unordered ‘poly_int’s
  --------------------------------------------------
  
! In cases where there is no definite link between two ‘poly_int’s, we can
  usually make a conservatively-correct assumption.  For example, the
  conservative assumption for alias analysis is that two references
  _might_ alias.
  
   One way of checking whether [BEGIN1, END1) might overlap [BEGIN2, END2)
! using the ‘poly_int’ comparisons is:
  
       maybe_gt (END1, BEGIN2) && maybe_gt (END2, BEGIN1)
  
*************** helper functions instead.  *Note Range c
*** 9769,9827 ****
  
  File: gccint.info,  Node: Comparing ordered poly_ints,  Next: Checking for a poly_int marker value,  Prev: Comparing potentially-unordered poly_ints,  Up: Comparisons involving poly_int
  
! 10.3.4 Comparing ordered 'poly_int's
  ------------------------------------
  
! In cases where there is a definite link between two 'poly_int's, such as
  the outer and inner sizes of subregs, we usually require the sizes to be
! ordered by the 'known_le' partial order.  'poly_int' provides the
  following utility functions for ordered values:
  
! 'ordered_p (A, B)'
!      Return true if A and B are ordered by the 'known_le' partial order.
  
! 'ordered_min (A, B)'
!      Assert that A and B are ordered by 'known_le' and return the
       minimum of the two.  When using this function, please add a comment
       explaining why the values are known to be ordered.
  
! 'ordered_max (A, B)'
!      Assert that A and B are ordered by 'known_le' and return the
       maximum of the two.  When using this function, please add a comment
       explaining why the values are known to be ordered.
  
   For example, if a subreg has an outer mode of size OUTER and an inner
  mode of size INNER:
  
!    * the subreg is complete if known_eq (INNER, OUTER)
  
!    * otherwise, the subreg is paradoxical if known_le (INNER, OUTER)
  
!    * otherwise, the subreg is partial if known_le (OUTER, INNER)
  
!    * otherwise, the subreg is ill-formed
  
!  Thus the subreg is only valid if 'ordered_p (OUTER, INNER)' is true.
  If this condition is already known to be true then:
  
!    * the subreg is complete if known_eq (INNER, OUTER)
  
!    * the subreg is paradoxical if maybe_lt (INNER, OUTER)
  
!    * the subreg is partial if maybe_lt (OUTER, INNER)
  
   with the three conditions being mutually exclusive.
  
   Code that checks whether a subreg is valid would therefore generally
! check whether 'ordered_p' holds (in addition to whatever other checks
  are required for subreg validity).  Code that is dealing with existing
! subregs can assert that 'ordered_p' holds and use either of the
  classifications above.
  
  
  File: gccint.info,  Node: Checking for a poly_int marker value,  Next: Range checks on poly_ints,  Prev: Comparing ordered poly_ints,  Up: Comparisons involving poly_int
  
! 10.3.5 Checking for a 'poly_int' marker value
  ---------------------------------------------
  
  It is sometimes useful to have a special "marker value" that is not
--- 9771,9829 ----
  
  File: gccint.info,  Node: Comparing ordered poly_ints,  Next: Checking for a poly_int marker value,  Prev: Comparing potentially-unordered poly_ints,  Up: Comparisons involving poly_int
  
! 10.3.4 Comparing ordered ‘poly_int’s
  ------------------------------------
  
! In cases where there is a definite link between two ‘poly_int’s, such as
  the outer and inner sizes of subregs, we usually require the sizes to be
! ordered by the ‘known_le’ partial order.  ‘poly_int’ provides the
  following utility functions for ordered values:
  
! ‘ordered_p (A, B)’
!      Return true if A and B are ordered by the ‘known_le’ partial order.
  
! ‘ordered_min (A, B)’
!      Assert that A and B are ordered by ‘known_le’ and return the
       minimum of the two.  When using this function, please add a comment
       explaining why the values are known to be ordered.
  
! ‘ordered_max (A, B)’
!      Assert that A and B are ordered by ‘known_le’ and return the
       maximum of the two.  When using this function, please add a comment
       explaining why the values are known to be ordered.
  
   For example, if a subreg has an outer mode of size OUTER and an inner
  mode of size INNER:
  
!    • the subreg is complete if known_eq (INNER, OUTER)
  
!    • otherwise, the subreg is paradoxical if known_le (INNER, OUTER)
  
!    • otherwise, the subreg is partial if known_le (OUTER, INNER)
  
!    • otherwise, the subreg is ill-formed
  
!  Thus the subreg is only valid if ‘ordered_p (OUTER, INNER)’ is true.
  If this condition is already known to be true then:
  
!    • the subreg is complete if known_eq (INNER, OUTER)
  
!    • the subreg is paradoxical if maybe_lt (INNER, OUTER)
  
!    • the subreg is partial if maybe_lt (OUTER, INNER)
  
   with the three conditions being mutually exclusive.
  
   Code that checks whether a subreg is valid would therefore generally
! check whether ‘ordered_p’ holds (in addition to whatever other checks
  are required for subreg validity).  Code that is dealing with existing
! subregs can assert that ‘ordered_p’ holds and use either of the
  classifications above.
  
  
  File: gccint.info,  Node: Checking for a poly_int marker value,  Next: Range checks on poly_ints,  Prev: Comparing ordered poly_ints,  Up: Comparisons involving poly_int
  
! 10.3.5 Checking for a ‘poly_int’ marker value
  ---------------------------------------------
  
  It is sometimes useful to have a special "marker value" that is not
*************** to represent an unknown size, rather tha
*** 9830,9850 ****
  separate boolean to say whether the size is known.
  
   The best way of checking whether something is a marker value is
! 'known_eq'.  Conversely the best way of checking whether something is
! _not_ a marker value is 'maybe_ne'.
  
!  Thus in the size example just mentioned, 'known_eq (size, -1)' would
! check for an unknown size and 'maybe_ne (size, -1)' would check for a
  known size.
  
  
  File: gccint.info,  Node: Range checks on poly_ints,  Next: Sorting poly_ints,  Prev: Checking for a poly_int marker value,  Up: Comparisons involving poly_int
  
! 10.3.6 Range checks on 'poly_int's
  ----------------------------------
  
  As well as the core comparisons (*note Comparison functions for
! poly_int::), 'poly_int' provides utilities for various kinds of range
  check.  In each case the range is represented by a start position and a
  size rather than a start position and an end position; this is because
  the former is used much more often than the latter in GCC.  Also, the
--- 9832,9852 ----
  separate boolean to say whether the size is known.
  
   The best way of checking whether something is a marker value is
! ‘known_eq’.  Conversely the best way of checking whether something is
! _not_ a marker value is ‘maybe_ne’.
  
!  Thus in the size example just mentioned, ‘known_eq (size, -1)’ would
! check for an unknown size and ‘maybe_ne (size, -1)’ would check for a
  known size.
  
  
  File: gccint.info,  Node: Range checks on poly_ints,  Next: Sorting poly_ints,  Prev: Checking for a poly_int marker value,  Up: Comparisons involving poly_int
  
! 10.3.6 Range checks on ‘poly_int’s
  ----------------------------------
  
  As well as the core comparisons (*note Comparison functions for
! poly_int::), ‘poly_int’ provides utilities for various kinds of range
  check.  In each case the range is represented by a start position and a
  size rather than a start position and an end position; this is because
  the former is used much more often than the latter in GCC.  Also, the
*************** with a known start position but an unkno
*** 9853,9909 ****
  be nonnegative.  A range of size 0 does not contain anything or overlap
  anything.
  
! 'known_size_p (SIZE)'
       Return true if SIZE represents a known range size, false if it is
       -1 or all ones (for signed and unsigned types respectively).
  
! 'ranges_maybe_overlap_p (POS1, SIZE1, POS2, SIZE2)'
       Return true if the range described by POS1 and SIZE1 _might_
       overlap the range described by POS2 and SIZE2 (in other words,
       return true if we cannot prove that the ranges are disjoint).
  
! 'ranges_known_overlap_p (POS1, SIZE1, POS2, SIZE2)'
       Return true if the range described by POS1 and SIZE1 is known to
       overlap the range described by POS2 and SIZE2.
  
! 'known_subrange_p (POS1, SIZE1, POS2, SIZE2)'
       Return true if the range described by POS1 and SIZE1 is known to be
       contained in the range described by POS2 and SIZE2.
  
! 'maybe_in_range_p (VALUE, POS, SIZE)'
       Return true if VALUE _might_ be in the range described by POS and
       SIZE (in other words, return true if we cannot prove that VALUE is
       outside that range).
  
! 'known_in_range_p (VALUE, POS, SIZE)'
       Return true if VALUE is known to be in the range described by POS
       and SIZE.
  
! 'endpoint_representable_p (POS, SIZE)'
       Return true if the range described by POS and SIZE is open-ended or
       if the endpoint (POS + SIZE) is representable in the same type as
       POS and SIZE.  The function returns false if adding SIZE to POS
       makes conceptual sense but could overflow.
  
!  There is also a 'poly_int' version of the 'IN_RANGE_P' macro:
  
! 'coeffs_in_range_p (X, LOWER, UPPER)'
       Return true if every coefficient of X is in the inclusive range
       [LOWER, UPPER].  This function can be useful when testing whether
       an operation would cause the values of coefficients to overflow.
  
       Note that the function does not indicate whether X itself is in the
!      given range.  X can be either a constant or a 'poly_int'.
  
  
  File: gccint.info,  Node: Sorting poly_ints,  Prev: Range checks on poly_ints,  Up: Comparisons involving poly_int
  
! 10.3.7 Sorting 'poly_int's
  --------------------------
  
! 'poly_int' provides the following routine for sorting:
  
! 'compare_sizes_for_sort (A, B)'
       Compare A and B in reverse lexicographical order (that is, compare
       the highest-indexed coefficients first).  This can be useful when
       sorting data structures, since it has the effect of separating
--- 9855,9911 ----
  be nonnegative.  A range of size 0 does not contain anything or overlap
  anything.
  
! ‘known_size_p (SIZE)’
       Return true if SIZE represents a known range size, false if it is
       -1 or all ones (for signed and unsigned types respectively).
  
! ‘ranges_maybe_overlap_p (POS1, SIZE1, POS2, SIZE2)’
       Return true if the range described by POS1 and SIZE1 _might_
       overlap the range described by POS2 and SIZE2 (in other words,
       return true if we cannot prove that the ranges are disjoint).
  
! ‘ranges_known_overlap_p (POS1, SIZE1, POS2, SIZE2)’
       Return true if the range described by POS1 and SIZE1 is known to
       overlap the range described by POS2 and SIZE2.
  
! ‘known_subrange_p (POS1, SIZE1, POS2, SIZE2)’
       Return true if the range described by POS1 and SIZE1 is known to be
       contained in the range described by POS2 and SIZE2.
  
! ‘maybe_in_range_p (VALUE, POS, SIZE)’
       Return true if VALUE _might_ be in the range described by POS and
       SIZE (in other words, return true if we cannot prove that VALUE is
       outside that range).
  
! ‘known_in_range_p (VALUE, POS, SIZE)’
       Return true if VALUE is known to be in the range described by POS
       and SIZE.
  
! ‘endpoint_representable_p (POS, SIZE)’
       Return true if the range described by POS and SIZE is open-ended or
       if the endpoint (POS + SIZE) is representable in the same type as
       POS and SIZE.  The function returns false if adding SIZE to POS
       makes conceptual sense but could overflow.
  
!  There is also a ‘poly_int’ version of the ‘IN_RANGE_P’ macro:
  
! ‘coeffs_in_range_p (X, LOWER, UPPER)’
       Return true if every coefficient of X is in the inclusive range
       [LOWER, UPPER].  This function can be useful when testing whether
       an operation would cause the values of coefficients to overflow.
  
       Note that the function does not indicate whether X itself is in the
!      given range.  X can be either a constant or a ‘poly_int’.
  
  
  File: gccint.info,  Node: Sorting poly_ints,  Prev: Range checks on poly_ints,  Up: Comparisons involving poly_int
  
! 10.3.7 Sorting ‘poly_int’s
  --------------------------
  
! ‘poly_int’ provides the following routine for sorting:
  
! ‘compare_sizes_for_sort (A, B)’
       Compare A and B in reverse lexicographical order (that is, compare
       the highest-indexed coefficients first).  This can be useful when
       sorting data structures, since it has the effect of separating
*************** File: gccint.info,  Node: Sorting poly_i
*** 9911,9929 ****
       the constant values come first.
  
       Note that the values do not necessarily end up in numerical order.
!      For example, '1 + 1X' would come after '100' in the sort order, but
!      may well be less than '100' at run time.
  
  
  File: gccint.info,  Node: Arithmetic on poly_ints,  Next: Alignment of poly_ints,  Prev: Comparisons involving poly_int,  Up: poly_int
  
! 10.4 Arithmetic on 'poly_int's
  ==============================
  
  Addition, subtraction, negation and bit inversion all work normally for
! 'poly_int's.  Multiplication by a constant multiplier and left shifting
  by a constant shift amount also work normally.  General multiplication
! of two 'poly_int's is not supported and is not useful in practice.
  
   Other operations are only conditionally supported: the operation might
  succeed or might fail, depending on the inputs.
--- 9913,9931 ----
       the constant values come first.
  
       Note that the values do not necessarily end up in numerical order.
!      For example, ‘1 + 1X’ would come after ‘100’ in the sort order, but
!      may well be less than ‘100’ at run time.
  
  
  File: gccint.info,  Node: Arithmetic on poly_ints,  Next: Alignment of poly_ints,  Prev: Comparisons involving poly_int,  Up: poly_int
  
! 10.4 Arithmetic on ‘poly_int’s
  ==============================
  
  Addition, subtraction, negation and bit inversion all work normally for
! ‘poly_int’s.  Multiplication by a constant multiplier and left shifting
  by a constant shift amount also work normally.  General multiplication
! of two ‘poly_int’s is not supported and is not useful in practice.
  
   Other operations are only conditionally supported: the operation might
  succeed or might fail, depending on the inputs.
*************** succeed or might fail, depending on the
*** 9940,9950 ****
  
  File: gccint.info,  Node: Using poly_int with C++ arithmetic operators,  Next: wi arithmetic on poly_ints,  Up: Arithmetic on poly_ints
  
! 10.4.1 Using 'poly_int' with C++ arithmetic operators
  -----------------------------------------------------
  
  The following C++ expressions are supported, where P1 and P2 are
! 'poly_int's and where C1 and C2 are scalars:
  
       -P1
       ~P1
--- 9942,9952 ----
  
  File: gccint.info,  Node: Using poly_int with C++ arithmetic operators,  Next: wi arithmetic on poly_ints,  Up: Arithmetic on poly_ints
  
! 10.4.1 Using ‘poly_int’ with C++ arithmetic operators
  -----------------------------------------------------
  
  The following C++ expressions are supported, where P1 and P2 are
! ‘poly_int’s and where C1 and C2 are scalars:
  
       -P1
       ~P1
*************** The following C++ expressions are suppor
*** 9973,9980 ****
  
   These arithmetic operations handle integer ranks in a similar way to
  C++.  The main difference is that every coefficient narrower than
! 'HOST_WIDE_INT' promotes to 'HOST_WIDE_INT', whereas in C++ everything
! narrower than 'int' promotes to 'int'.  For example:
  
       poly_uint16     + int          -> poly_int64
       unsigned int    + poly_uint16  -> poly_int64
--- 9975,9982 ----
  
   These arithmetic operations handle integer ranks in a similar way to
  C++.  The main difference is that every coefficient narrower than
! ‘HOST_WIDE_INT’ promotes to ‘HOST_WIDE_INT’, whereas in C++ everything
! narrower than ‘int’ promotes to ‘int’.  For example:
  
       poly_uint16     + int          -> poly_int64
       unsigned int    + poly_uint16  -> poly_int64
*************** narrower than 'int' promotes to 'int'.
*** 9985,10003 ****
       offset_int      + poly_uint16  -> poly_offset_int
  
   In the first two examples, both coefficients are narrower than
! 'HOST_WIDE_INT', so the result has coefficients of type 'HOST_WIDE_INT'.
  In the other examples, the coefficient with the highest rank "wins".
  
!  If one of the operands is 'wide_int' or 'poly_wide_int', the rules are
! the same as for 'wide_int' arithmetic.
  
  
  File: gccint.info,  Node: wi arithmetic on poly_ints,  Next: Division of poly_ints,  Prev: Using poly_int with C++ arithmetic operators,  Up: Arithmetic on poly_ints
  
! 10.4.2 'wi' arithmetic on 'poly_int's
  -------------------------------------
  
! As well as the C++ operators, 'poly_int' supports the following 'wi'
  routines:
  
       wi::neg (P1, &OVERFLOW)
--- 9987,10005 ----
       offset_int      + poly_uint16  -> poly_offset_int
  
   In the first two examples, both coefficients are narrower than
! ‘HOST_WIDE_INT’, so the result has coefficients of type ‘HOST_WIDE_INT’.
  In the other examples, the coefficient with the highest rank "wins".
  
!  If one of the operands is ‘wide_int’ or ‘poly_wide_int’, the rules are
! the same as for ‘wide_int’ arithmetic.
  
  
  File: gccint.info,  Node: wi arithmetic on poly_ints,  Next: Division of poly_ints,  Prev: Using poly_int with C++ arithmetic operators,  Up: Arithmetic on poly_ints
  
! 10.4.2 ‘wi’ arithmetic on ‘poly_int’s
  -------------------------------------
  
! As well as the C++ operators, ‘poly_int’ supports the following ‘wi’
  routines:
  
       wi::neg (P1, &OVERFLOW)
*************** final runtime value would overflow.
*** 10025,10096 ****
  
  File: gccint.info,  Node: Division of poly_ints,  Next: Other poly_int arithmetic,  Prev: wi arithmetic on poly_ints,  Up: Arithmetic on poly_ints
  
! 10.4.3 Division of 'poly_int's
  ------------------------------
  
! Division of 'poly_int's is possible for certain inputs.  The functions
  for division return true if the operation is possible and in most cases
  return the results by pointer.  The routines are:
  
! 'multiple_p (A, B)'
! 'multiple_p (A, B, &QUOTIENT)'
       Return true if A is an exact multiple of B, storing the result in
       QUOTIENT if so.  There are overloads for various combinations of
       polynomial and constant A, B and QUOTIENT.
  
! 'constant_multiple_p (A, B)'
! 'constant_multiple_p (A, B, &QUOTIENT)'
!      Like 'multiple_p', but also test whether the multiple is a
       compile-time constant.
  
! 'can_div_trunc_p (A, B, &QUOTIENT)'
! 'can_div_trunc_p (A, B, &QUOTIENT, &REMAINDER)'
!      Return true if we can calculate 'trunc (A / B)' at compile time,
       storing the result in QUOTIENT and REMAINDER if so.
  
! 'can_div_away_from_zero_p (A, B, &QUOTIENT)'
!      Return true if we can calculate 'A / B' at compile time, rounding
       away from zero.  Store the result in QUOTIENT if so.
  
!      Note that this is true if and only if 'can_div_trunc_p' is true.
       The only difference is in the rounding of the result.
  
   There is also an asserting form of division:
  
! 'exact_div (A, B)'
!      Assert that A is a multiple of B and return 'A / B'.  The result is
!      a 'poly_int' if A is a 'poly_int'.
  
  
  File: gccint.info,  Node: Other poly_int arithmetic,  Prev: Division of poly_ints,  Up: Arithmetic on poly_ints
  
! 10.4.4 Other 'poly_int' arithmetic
  ----------------------------------
  
  There are tentative routines for other operations besides division:
  
! 'can_ior_p (A, B, &RESULT)'
!      Return true if we can calculate 'A | B' at compile time, storing
       the result in RESULT if so.
  
!  Also, ANDs with a value '(1 << Y) - 1' or its inverse can be treated as
  alignment operations.  *Note Alignment of poly_ints::.
  
   In addition, the following miscellaneous routines are available:
  
! 'coeff_gcd (A)'
       Return the greatest common divisor of all nonzero coefficients in
       A, or zero if A is known to be zero.
  
! 'common_multiple (A, B)'
       Return a value that is a multiple of both A and B, where one value
!      is a 'poly_int' and the other is a scalar.  The result will be the
       least common multiple for some indeterminate values but not
       necessarily for all.
  
! 'force_common_multiple (A, B)'
!      Return a value that is a multiple of both 'poly_int' A and
!      'poly_int' B, asserting that such a value exists.  The result will
       be the least common multiple for some indeterminate values but not
       necessarily for all.
  
--- 10027,10098 ----
  
  File: gccint.info,  Node: Division of poly_ints,  Next: Other poly_int arithmetic,  Prev: wi arithmetic on poly_ints,  Up: Arithmetic on poly_ints
  
! 10.4.3 Division of ‘poly_int’s
  ------------------------------
  
! Division of ‘poly_int’s is possible for certain inputs.  The functions
  for division return true if the operation is possible and in most cases
  return the results by pointer.  The routines are:
  
! ‘multiple_p (A, B)’
! ‘multiple_p (A, B, &QUOTIENT)’
       Return true if A is an exact multiple of B, storing the result in
       QUOTIENT if so.  There are overloads for various combinations of
       polynomial and constant A, B and QUOTIENT.
  
! ‘constant_multiple_p (A, B)’
! ‘constant_multiple_p (A, B, &QUOTIENT)’
!      Like ‘multiple_p’, but also test whether the multiple is a
       compile-time constant.
  
! ‘can_div_trunc_p (A, B, &QUOTIENT)’
! ‘can_div_trunc_p (A, B, &QUOTIENT, &REMAINDER)’
!      Return true if we can calculate ‘trunc (A / B)’ at compile time,
       storing the result in QUOTIENT and REMAINDER if so.
  
! ‘can_div_away_from_zero_p (A, B, &QUOTIENT)’
!      Return true if we can calculate ‘A / B’ at compile time, rounding
       away from zero.  Store the result in QUOTIENT if so.
  
!      Note that this is true if and only if ‘can_div_trunc_p’ is true.
       The only difference is in the rounding of the result.
  
   There is also an asserting form of division:
  
! ‘exact_div (A, B)’
!      Assert that A is a multiple of B and return ‘A / B’.  The result is
!      a ‘poly_int’ if A is a ‘poly_int’.
  
  
  File: gccint.info,  Node: Other poly_int arithmetic,  Prev: Division of poly_ints,  Up: Arithmetic on poly_ints
  
! 10.4.4 Other ‘poly_int’ arithmetic
  ----------------------------------
  
  There are tentative routines for other operations besides division:
  
! ‘can_ior_p (A, B, &RESULT)’
!      Return true if we can calculate ‘A | B’ at compile time, storing
       the result in RESULT if so.
  
!  Also, ANDs with a value ‘(1 << Y) - 1’ or its inverse can be treated as
  alignment operations.  *Note Alignment of poly_ints::.
  
   In addition, the following miscellaneous routines are available:
  
! ‘coeff_gcd (A)’
       Return the greatest common divisor of all nonzero coefficients in
       A, or zero if A is known to be zero.
  
! ‘common_multiple (A, B)’
       Return a value that is a multiple of both A and B, where one value
!      is a ‘poly_int’ and the other is a scalar.  The result will be the
       least common multiple for some indeterminate values but not
       necessarily for all.
  
! ‘force_common_multiple (A, B)’
!      Return a value that is a multiple of both ‘poly_int’ A and
!      ‘poly_int’ B, asserting that such a value exists.  The result will
       be the least common multiple for some indeterminate values but not
       necessarily for all.
  
*************** alignment operations.  *Note Alignment o
*** 10102,10136 ****
  
  File: gccint.info,  Node: Alignment of poly_ints,  Next: Computing bounds on poly_ints,  Prev: Arithmetic on poly_ints,  Up: poly_int
  
! 10.5 Alignment of 'poly_int's
  =============================
  
! 'poly_int' provides various routines for aligning values and for
  querying misalignments.  In each case the alignment must be a power of
  2.
  
! 'can_align_p (VALUE, ALIGN)'
       Return true if we can align VALUE up or down to the nearest
       multiple of ALIGN at compile time.  The answer is the same for both
       directions.
  
! 'can_align_down (VALUE, ALIGN, &ALIGNED)'
!      Return true if 'can_align_p'; if so, set ALIGNED to the greatest
       aligned value that is less than or equal to VALUE.
  
! 'can_align_up (VALUE, ALIGN, &ALIGNED)'
!      Return true if 'can_align_p'; if so, set ALIGNED to the lowest
       aligned value that is greater than or equal to VALUE.
  
! 'known_equal_after_align_down (A, B, ALIGN)'
       Return true if we can align A and B down to the nearest ALIGN
       boundary at compile time and if the two results are equal.
  
! 'known_equal_after_align_up (A, B, ALIGN)'
       Return true if we can align A and B up to the nearest ALIGN
       boundary at compile time and if the two results are equal.
  
! 'aligned_lower_bound (VALUE, ALIGN)'
       Return a result that is no greater than VALUE and that is aligned
       to ALIGN.  The result will the closest aligned value for some
       indeterminate values but not necessarily for all.
--- 10104,10138 ----
  
  File: gccint.info,  Node: Alignment of poly_ints,  Next: Computing bounds on poly_ints,  Prev: Arithmetic on poly_ints,  Up: poly_int
  
! 10.5 Alignment of ‘poly_int’s
  =============================
  
! ‘poly_int’ provides various routines for aligning values and for
  querying misalignments.  In each case the alignment must be a power of
  2.
  
! ‘can_align_p (VALUE, ALIGN)’
       Return true if we can align VALUE up or down to the nearest
       multiple of ALIGN at compile time.  The answer is the same for both
       directions.
  
! ‘can_align_down (VALUE, ALIGN, &ALIGNED)’
!      Return true if ‘can_align_p’; if so, set ALIGNED to the greatest
       aligned value that is less than or equal to VALUE.
  
! ‘can_align_up (VALUE, ALIGN, &ALIGNED)’
!      Return true if ‘can_align_p’; if so, set ALIGNED to the lowest
       aligned value that is greater than or equal to VALUE.
  
! ‘known_equal_after_align_down (A, B, ALIGN)’
       Return true if we can align A and B down to the nearest ALIGN
       boundary at compile time and if the two results are equal.
  
! ‘known_equal_after_align_up (A, B, ALIGN)’
       Return true if we can align A and B up to the nearest ALIGN
       boundary at compile time and if the two results are equal.
  
! ‘aligned_lower_bound (VALUE, ALIGN)’
       Return a result that is no greater than VALUE and that is aligned
       to ALIGN.  The result will the closest aligned value for some
       indeterminate values but not necessarily for all.
*************** querying misalignments.  In each case th
*** 10142,10180 ****
  
            aligned_lower_bound (LIMIT - SIZE, ALIGN)
  
! 'aligned_upper_bound (VALUE, ALIGN)'
       Likewise return a result that is no less than VALUE and that is
       aligned to ALIGN.  This is the routine that would be used for
       upward-growing stacks in the scenario just described.
  
! 'known_misalignment (VALUE, ALIGN, &MISALIGN)'
       Return true if we can calculate the misalignment of VALUE with
       respect to ALIGN at compile time, storing the result in MISALIGN if
       so.
  
! 'known_alignment (VALUE)'
       Return the minimum alignment that VALUE is known to have (in other
       words, the largest alignment that can be guaranteed whatever the
       values of the indeterminates turn out to be).  Return 0 if VALUE is
       known to be 0.
  
! 'force_align_down (VALUE, ALIGN)'
       Assert that VALUE can be aligned down to ALIGN at compile time and
       return the result.  When using this routine, please add a comment
       explaining why the assertion is known to hold.
  
! 'force_align_up (VALUE, ALIGN)'
       Likewise, but aligning up.
  
! 'force_align_down_and_div (VALUE, ALIGN)'
!      Divide the result of 'force_align_down' by ALIGN.  Again, please
!      add a comment explaining why the assertion in 'force_align_down' is
       known to hold.
  
! 'force_align_up_and_div (VALUE, ALIGN)'
!      Likewise for 'force_align_up'.
  
! 'force_get_misalignment (VALUE, ALIGN)'
       Assert that we can calculate the misalignment of VALUE with respect
       to ALIGN at compile time and return the misalignment.  When using
       this function, please add a comment explaining why the assertion is
--- 10144,10182 ----
  
            aligned_lower_bound (LIMIT - SIZE, ALIGN)
  
! ‘aligned_upper_bound (VALUE, ALIGN)’
       Likewise return a result that is no less than VALUE and that is
       aligned to ALIGN.  This is the routine that would be used for
       upward-growing stacks in the scenario just described.
  
! ‘known_misalignment (VALUE, ALIGN, &MISALIGN)’
       Return true if we can calculate the misalignment of VALUE with
       respect to ALIGN at compile time, storing the result in MISALIGN if
       so.
  
! ‘known_alignment (VALUE)’
       Return the minimum alignment that VALUE is known to have (in other
       words, the largest alignment that can be guaranteed whatever the
       values of the indeterminates turn out to be).  Return 0 if VALUE is
       known to be 0.
  
! ‘force_align_down (VALUE, ALIGN)’
       Assert that VALUE can be aligned down to ALIGN at compile time and
       return the result.  When using this routine, please add a comment
       explaining why the assertion is known to hold.
  
! ‘force_align_up (VALUE, ALIGN)’
       Likewise, but aligning up.
  
! ‘force_align_down_and_div (VALUE, ALIGN)’
!      Divide the result of ‘force_align_down’ by ALIGN.  Again, please
!      add a comment explaining why the assertion in ‘force_align_down’ is
       known to hold.
  
! ‘force_align_up_and_div (VALUE, ALIGN)’
!      Likewise for ‘force_align_up’.
  
! ‘force_get_misalignment (VALUE, ALIGN)’
       Assert that we can calculate the misalignment of VALUE with respect
       to ALIGN at compile time and return the misalignment.  When using
       this function, please add a comment explaining why the assertion is
*************** querying misalignments.  In each case th
*** 10183,10216 ****
  
  File: gccint.info,  Node: Computing bounds on poly_ints,  Next: Converting poly_ints,  Prev: Alignment of poly_ints,  Up: poly_int
  
! 10.6 Computing bounds on 'poly_int's
  ====================================
  
! 'poly_int' also provides routines for calculating lower and upper
  bounds:
  
! 'constant_lower_bound (A)'
       Assert that A is nonnegative and return the smallest value it can
       have.
  
! 'constant_lower_bound_with_limit (A, B)'
       Return the least value A can have, given that the context in which
       A appears guarantees that the answer is no less than B.  In other
       words, the caller is asserting that A is greater than or equal to B
!      even if 'known_ge (A, B)' doesn't hold.
  
! 'constant_upper_bound_with_limit (A, B)'
       Return the greatest value A can have, given that the context in
       which A appears guarantees that the answer is no greater than B.
       In other words, the caller is asserting that A is less than or
!      equal to B even if 'known_le (A, B)' doesn't hold.
  
! 'lower_bound (A, B)'
       Return a value that is always less than or equal to both A and B.
       It will be the greatest such value for some indeterminate values
       but necessarily for all.
  
! 'upper_bound (A, B)'
       Return a value that is always greater than or equal to both A and
       B.  It will be the least such value for some indeterminate values
       but necessarily for all.
--- 10185,10218 ----
  
  File: gccint.info,  Node: Computing bounds on poly_ints,  Next: Converting poly_ints,  Prev: Alignment of poly_ints,  Up: poly_int
  
! 10.6 Computing bounds on ‘poly_int’s
  ====================================
  
! ‘poly_int’ also provides routines for calculating lower and upper
  bounds:
  
! ‘constant_lower_bound (A)’
       Assert that A is nonnegative and return the smallest value it can
       have.
  
! ‘constant_lower_bound_with_limit (A, B)’
       Return the least value A can have, given that the context in which
       A appears guarantees that the answer is no less than B.  In other
       words, the caller is asserting that A is greater than or equal to B
!      even if ‘known_ge (A, B)’ doesn't hold.
  
! ‘constant_upper_bound_with_limit (A, B)’
       Return the greatest value A can have, given that the context in
       which A appears guarantees that the answer is no greater than B.
       In other words, the caller is asserting that A is less than or
!      equal to B even if ‘known_le (A, B)’ doesn't hold.
  
! ‘lower_bound (A, B)’
       Return a value that is always less than or equal to both A and B.
       It will be the greatest such value for some indeterminate values
       but necessarily for all.
  
! ‘upper_bound (A, B)’
       Return a value that is always greater than or equal to both A and
       B.  It will be the least such value for some indeterminate values
       but necessarily for all.
*************** bounds:
*** 10218,10350 ****
  
  File: gccint.info,  Node: Converting poly_ints,  Next: Miscellaneous poly_int routines,  Prev: Computing bounds on poly_ints,  Up: poly_int
  
! 10.7 Converting 'poly_int's
  ===========================
  
! A 'poly_int<N, T>' can be constructed from up to N individual T
  coefficients, with the remaining coefficients being implicitly zero.  In
! particular, this means that every 'poly_int<N, T>' can be constructed
  from a single scalar T, or something compatible with T.
  
!  Also, a 'poly_int<N, T>' can be constructed from a 'poly_int<N, U>' if
  T can be constructed from U.
  
   The following functions provide other forms of conversion, or test
  whether such a conversion would succeed.
  
! 'VALUE.is_constant ()'
!      Return true if 'poly_int' VALUE is a compile-time constant.
  
! 'VALUE.is_constant (&C1)'
!      Return true if 'poly_int' VALUE is a compile-time constant, storing
       it in C1 if so.  C1 must be able to hold all constant values of
       VALUE without loss of precision.
  
! 'VALUE.to_constant ()'
       Assert that VALUE is a compile-time constant and return its value.
       When using this function, please add a comment explaining why the
       condition is known to hold (for example, because an earlier phase
       of analysis rejected non-constants).
  
! 'VALUE.to_shwi (&P2)'
!      Return true if 'poly_int<N, T>' VALUE can be represented without
!      loss of precision as a 'poly_int<N, 'HOST_WIDE_INT'>', storing it
       in that form in P2 if so.
  
! 'VALUE.to_uhwi (&P2)'
!      Return true if 'poly_int<N, T>' VALUE can be represented without
!      loss of precision as a 'poly_int<N, 'unsigned HOST_WIDE_INT'>',
       storing it in that form in P2 if so.
  
! 'VALUE.force_shwi ()'
!      Forcibly convert each coefficient of 'poly_int<N, T>' VALUE to
!      'HOST_WIDE_INT', truncating any that are out of range.  Return the
!      result as a 'poly_int<N, 'HOST_WIDE_INT'>'.
  
! 'VALUE.force_uhwi ()'
!      Forcibly convert each coefficient of 'poly_int<N, T>' VALUE to
!      'unsigned HOST_WIDE_INT', truncating any that are out of range.
!      Return the result as a 'poly_int<N, 'unsigned HOST_WIDE_INT'>'.
  
! 'wi::shwi (VALUE, PRECISION)'
!      Return a 'poly_int' with the same value as VALUE, but with the
!      coefficients converted from 'HOST_WIDE_INT' to 'wide_int'.
!      PRECISION specifies the precision of the 'wide_int' cofficients; if
!      this is wider than a 'HOST_WIDE_INT', the coefficients of VALUE
       will be sign-extended to fit.
  
! 'wi::uhwi (VALUE, PRECISION)'
!      Like 'wi::shwi', except that VALUE has coefficients of type
!      'unsigned HOST_WIDE_INT'.  If PRECISION is wider than a
!      'HOST_WIDE_INT', the coefficients of VALUE will be zero-extended to
       fit.
  
! 'wi::sext (VALUE, PRECISION)'
!      Return a 'poly_int' of the same type as VALUE, sign-extending every
       coefficient from the low PRECISION bits.  This in effect applies
!      'wi::sext' to each coefficient individually.
  
! 'wi::zext (VALUE, PRECISION)'
!      Like 'wi::sext', but for zero extension.
  
! 'poly_wide_int::from (VALUE, PRECISION, SIGN)'
!      Convert VALUE to a 'poly_wide_int' in which each coefficient has
       PRECISION bits.  Extend the coefficients according to SIGN if the
       coefficients have fewer bits.
  
! 'poly_offset_int::from (VALUE, SIGN)'
!      Convert VALUE to a 'poly_offset_int', extending its coefficients
!      according to SIGN if they have fewer bits than 'offset_int'.
  
! 'poly_widest_int::from (VALUE, SIGN)'
!      Convert VALUE to a 'poly_widest_int', extending its coefficients
!      according to SIGN if they have fewer bits than 'widest_int'.
  
  
  File: gccint.info,  Node: Miscellaneous poly_int routines,  Next: Guidelines for using poly_int,  Prev: Converting poly_ints,  Up: poly_int
  
! 10.8 Miscellaneous 'poly_int' routines
  ======================================
  
! 'print_dec (VALUE, FILE, SIGN)'
! 'print_dec (VALUE, FILE)'
       Print VALUE to FILE as a decimal value, interpreting the
       coefficients according to SIGN.  The final argument is optional if
!      VALUE has an inherent sign; for example, 'poly_int64' values print
!      as signed by default and 'poly_uint64' values print as unsigned by
       default.
  
!      This is a simply a 'poly_int' version of a wide-int routine.
  
  
  File: gccint.info,  Node: Guidelines for using poly_int,  Prev: Miscellaneous poly_int routines,  Up: poly_int
  
! 10.9 Guidelines for using 'poly_int'
  ====================================
  
! One of the main design goals of 'poly_int' was to make it easy to write
  target-independent code that handles variable-sized registers even when
  the current target has fixed-sized registers.  There are two aspects to
  this:
  
!    * The set of 'poly_int' operations should be complete enough that the
       question in most cases becomes "Can we do this operation on these
!      particular 'poly_int' values?  If not, bail out" rather than "Are
!      these 'poly_int' values constant?  If so, do the operation,
       otherwise bail out".
  
!    * If target-independent code compiles and runs correctly on a target
!      with one value of 'NUM_POLY_INT_COEFFS', and if the code does not
!      use asserting functions like 'to_constant', it is reasonable to
       assume that the code also works on targets with other values of
!      'NUM_POLY_INT_COEFFS'.  There is no need to check this during
       everyday development.
  
   So the general principle is: if target-independent code is dealing with
! a 'poly_int' value, it is better to operate on it as a 'poly_int' if at
  all possible, choosing conservatively-correct behavior if a particular
! operation fails.  For example, the following code handles an index 'pos'
! into a sequence of vectors that each have 'nunits' elements:
  
       /* Calculate which vector contains the result, and which lane of
          that vector we need.  */
--- 10220,10352 ----
  
  File: gccint.info,  Node: Converting poly_ints,  Next: Miscellaneous poly_int routines,  Prev: Computing bounds on poly_ints,  Up: poly_int
  
! 10.7 Converting ‘poly_int’s
  ===========================
  
! A ‘poly_int<N, T>’ can be constructed from up to N individual T
  coefficients, with the remaining coefficients being implicitly zero.  In
! particular, this means that every ‘poly_int<N, T>’ can be constructed
  from a single scalar T, or something compatible with T.
  
!  Also, a ‘poly_int<N, T>’ can be constructed from a ‘poly_int<N, U>’ if
  T can be constructed from U.
  
   The following functions provide other forms of conversion, or test
  whether such a conversion would succeed.
  
! ‘VALUE.is_constant ()’
!      Return true if ‘poly_int’ VALUE is a compile-time constant.
  
! ‘VALUE.is_constant (&C1)’
!      Return true if ‘poly_int’ VALUE is a compile-time constant, storing
       it in C1 if so.  C1 must be able to hold all constant values of
       VALUE without loss of precision.
  
! ‘VALUE.to_constant ()’
       Assert that VALUE is a compile-time constant and return its value.
       When using this function, please add a comment explaining why the
       condition is known to hold (for example, because an earlier phase
       of analysis rejected non-constants).
  
! ‘VALUE.to_shwi (&P2)’
!      Return true if ‘poly_int<N, T>’ VALUE can be represented without
!      loss of precision as a ‘poly_int<N, ‘HOST_WIDE_INT’>’, storing it
       in that form in P2 if so.
  
! ‘VALUE.to_uhwi (&P2)’
!      Return true if ‘poly_int<N, T>’ VALUE can be represented without
!      loss of precision as a ‘poly_int<N, ‘unsigned HOST_WIDE_INT’>’,
       storing it in that form in P2 if so.
  
! ‘VALUE.force_shwi ()’
!      Forcibly convert each coefficient of ‘poly_int<N, T>’ VALUE to
!      ‘HOST_WIDE_INT’, truncating any that are out of range.  Return the
!      result as a ‘poly_int<N, ‘HOST_WIDE_INT’>’.
  
! ‘VALUE.force_uhwi ()’
!      Forcibly convert each coefficient of ‘poly_int<N, T>’ VALUE to
!      ‘unsigned HOST_WIDE_INT’, truncating any that are out of range.
!      Return the result as a ‘poly_int<N, ‘unsigned HOST_WIDE_INT’>’.
  
! ‘wi::shwi (VALUE, PRECISION)’
!      Return a ‘poly_int’ with the same value as VALUE, but with the
!      coefficients converted from ‘HOST_WIDE_INT’ to ‘wide_int’.
!      PRECISION specifies the precision of the ‘wide_int’ cofficients; if
!      this is wider than a ‘HOST_WIDE_INT’, the coefficients of VALUE
       will be sign-extended to fit.
  
! ‘wi::uhwi (VALUE, PRECISION)’
!      Like ‘wi::shwi’, except that VALUE has coefficients of type
!      ‘unsigned HOST_WIDE_INT’.  If PRECISION is wider than a
!      ‘HOST_WIDE_INT’, the coefficients of VALUE will be zero-extended to
       fit.
  
! ‘wi::sext (VALUE, PRECISION)’
!      Return a ‘poly_int’ of the same type as VALUE, sign-extending every
       coefficient from the low PRECISION bits.  This in effect applies
!      ‘wi::sext’ to each coefficient individually.
  
! ‘wi::zext (VALUE, PRECISION)’
!      Like ‘wi::sext’, but for zero extension.
  
! ‘poly_wide_int::from (VALUE, PRECISION, SIGN)’
!      Convert VALUE to a ‘poly_wide_int’ in which each coefficient has
       PRECISION bits.  Extend the coefficients according to SIGN if the
       coefficients have fewer bits.
  
! ‘poly_offset_int::from (VALUE, SIGN)’
!      Convert VALUE to a ‘poly_offset_int’, extending its coefficients
!      according to SIGN if they have fewer bits than ‘offset_int’.
  
! ‘poly_widest_int::from (VALUE, SIGN)’
!      Convert VALUE to a ‘poly_widest_int’, extending its coefficients
!      according to SIGN if they have fewer bits than ‘widest_int’.
  
  
  File: gccint.info,  Node: Miscellaneous poly_int routines,  Next: Guidelines for using poly_int,  Prev: Converting poly_ints,  Up: poly_int
  
! 10.8 Miscellaneous ‘poly_int’ routines
  ======================================
  
! ‘print_dec (VALUE, FILE, SIGN)’
! ‘print_dec (VALUE, FILE)’
       Print VALUE to FILE as a decimal value, interpreting the
       coefficients according to SIGN.  The final argument is optional if
!      VALUE has an inherent sign; for example, ‘poly_int64’ values print
!      as signed by default and ‘poly_uint64’ values print as unsigned by
       default.
  
!      This is a simply a ‘poly_int’ version of a wide-int routine.
  
  
  File: gccint.info,  Node: Guidelines for using poly_int,  Prev: Miscellaneous poly_int routines,  Up: poly_int
  
! 10.9 Guidelines for using ‘poly_int’
  ====================================
  
! One of the main design goals of ‘poly_int’ was to make it easy to write
  target-independent code that handles variable-sized registers even when
  the current target has fixed-sized registers.  There are two aspects to
  this:
  
!    • The set of ‘poly_int’ operations should be complete enough that the
       question in most cases becomes "Can we do this operation on these
!      particular ‘poly_int’ values?  If not, bail out" rather than "Are
!      these ‘poly_int’ values constant?  If so, do the operation,
       otherwise bail out".
  
!    • If target-independent code compiles and runs correctly on a target
!      with one value of ‘NUM_POLY_INT_COEFFS’, and if the code does not
!      use asserting functions like ‘to_constant’, it is reasonable to
       assume that the code also works on targets with other values of
!      ‘NUM_POLY_INT_COEFFS’.  There is no need to check this during
       everyday development.
  
   So the general principle is: if target-independent code is dealing with
! a ‘poly_int’ value, it is better to operate on it as a ‘poly_int’ if at
  all possible, choosing conservatively-correct behavior if a particular
! operation fails.  For example, the following code handles an index ‘pos’
! into a sequence of vectors that each have ‘nunits’ elements:
  
       /* Calculate which vector contains the result, and which lane of
          that vector we need.  */
*************** into a sequence of vectors that each hav
*** 10357,10363 ****
           return false;
         }
  
!  However, there are some contexts in which operating on a 'poly_int' is
  not possible or does not make sense.  One example is when handling
  static initializers, since no current target supports the concept of a
  variable-length static initializer.  In these situations, a reasonable
--- 10359,10365 ----
           return false;
         }
  
!  However, there are some contexts in which operating on a ‘poly_int’ is
  not possible or does not make sense.  One example is when handling
  static initializers, since no current target supports the concept of a
  variable-length static initializer.  In these situations, a reasonable
*************** fallback is:
*** 10376,10393 ****
           ...
         }
  
!  'poly_int' also provides some asserting functions like 'to_constant'.
  Please only use these functions if there is a good theoretical reason to
  believe that the assertion cannot fire.  For example, if some work is
  divided into an analysis phase and an implementation phase, the analysis
! phase might reject inputs that are not 'is_constant', in which case the
! implementation phase can reasonably use 'to_constant' on the remaining
  inputs.  The assertions should not be used to discover whether a
  condition ever occurs "in the field"; in other words, they should not be
  used to restrict code to constants at first, with the intention of only
! implementing a 'poly_int' version if a user hits the assertion.
  
!  If a particular asserting function like 'to_constant' is needed more
  than once for the same reason, it is probably worth adding a helper
  function or macro for that situation, so that the justification only
  needs to be given once.  For example:
--- 10378,10395 ----
           ...
         }
  
!  ‘poly_int’ also provides some asserting functions like ‘to_constant’.
  Please only use these functions if there is a good theoretical reason to
  believe that the assertion cannot fire.  For example, if some work is
  divided into an analysis phase and an implementation phase, the analysis
! phase might reject inputs that are not ‘is_constant’, in which case the
! implementation phase can reasonably use ‘to_constant’ on the remaining
  inputs.  The assertions should not be used to discover whether a
  condition ever occurs "in the field"; in other words, they should not be
  used to restrict code to constants at first, with the intention of only
! implementing a ‘poly_int’ version if a user hits the assertion.
  
!  If a particular asserting function like ‘to_constant’ is needed more
  than once for the same reason, it is probably worth adding a helper
  function or macro for that situation, so that the justification only
  needs to be given once.  For example:
*************** needs to be given once.  For example:
*** 10401,10428 ****
       #define vector_element_size(SIZE, NELTS) \
         (exact_div (SIZE, NELTS).to_constant ())
  
!  Target-specific code in 'config/CPU' only needs to handle non-constant
! 'poly_int's if 'NUM_POLY_INT_COEFFS' is greater than one.  For other
! targets, 'poly_int' degenerates to a compile-time constant and is often
  interchangable with a normal scalar integer.  There are two main
  exceptions:
  
!    * Sometimes an explicit cast to an integer type might be needed, such
!      as to resolve ambiguities in a '?:' expression, or when passing
!      values through '...' to things like print functions.
  
!    * Target macros are included in target-independent code and so do not
       have access to the implicit conversion to a scalar integer.  If
       this becomes a problem for a particular target macro, the possible
       solutions, in order of preference, are:
  
!         * Convert the target macro to a target hook (for all targets).
  
!         * Put the target's implementation of the target macro in its
!           'CPU.c' file and call it from the target macro in the 'CPU.h'
            file.
  
!         * Add 'to_constant ()' calls where necessary.  The previous
            option is preferable because it will help with any future
            conversion of the macro to a hook.
  
--- 10403,10430 ----
       #define vector_element_size(SIZE, NELTS) \
         (exact_div (SIZE, NELTS).to_constant ())
  
!  Target-specific code in ‘config/CPU’ only needs to handle non-constant
! ‘poly_int’s if ‘NUM_POLY_INT_COEFFS’ is greater than one.  For other
! targets, ‘poly_int’ degenerates to a compile-time constant and is often
  interchangable with a normal scalar integer.  There are two main
  exceptions:
  
!    • Sometimes an explicit cast to an integer type might be needed, such
!      as to resolve ambiguities in a ‘?:’ expression, or when passing
!      values through ‘...’ to things like print functions.
  
!    • Target macros are included in target-independent code and so do not
       have access to the implicit conversion to a scalar integer.  If
       this becomes a problem for a particular target macro, the possible
       solutions, in order of preference, are:
  
!         • Convert the target macro to a target hook (for all targets).
  
!         • Put the target's implementation of the target macro in its
!           ‘CPU.c’ file and call it from the target macro in the ‘CPU.h’
            file.
  
!         • Add ‘to_constant ()’ calls where necessary.  The previous
            option is preferable because it will help with any future
            conversion of the macro to a hook.
  
*************** The purpose of GENERIC is simply to prov
*** 10436,10448 ****
  of representing an entire function in trees.  To this end, it was
  necessary to add a few new tree codes to the back end, but almost
  everything was already there.  If you can express it with the codes in
! 'gcc/tree.def', it's GENERIC.
  
   Early on, there was a great deal of debate about how to think about
  statements in a tree IL.  In GENERIC, a statement is defined as any
  expression whose value, if any, is ignored.  A statement will always
! have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a
! non-statement expression may also have side effects.  A 'CALL_EXPR', for
  instance.
  
   It would be possible for some local optimizations to work on the
--- 10438,10450 ----
  of representing an entire function in trees.  To this end, it was
  necessary to add a few new tree codes to the back end, but almost
  everything was already there.  If you can express it with the codes in
! ‘gcc/tree.def’, it's GENERIC.
  
   Early on, there was a great deal of debate about how to think about
  statements in a tree IL.  In GENERIC, a statement is defined as any
  expression whose value, if any, is ignored.  A statement will always
! have ‘TREE_SIDE_EFFECTS’ set (or it will be discarded), but a
! non-statement expression may also have side effects.  A ‘CALL_EXPR’, for
  instance.
  
   It would be possible for some local optimizations to work on the
*************** GENERIC form of a function; indeed, the
*** 10450,10461 ****
  on GENERIC, but the current compiler performs inlining after lowering to
  GIMPLE (a restricted form described in the next section).  Indeed,
  currently the frontends perform this lowering before handing off to
! 'tree_rest_of_compilation', but this seems inelegant.
  
  * Menu:
  
  * Deficiencies::                Topics not yet covered in this document.
! * Tree overview::               All about 'tree's.
  * Types::                       Fundamental and aggregate types.
  * Declarations::                Type declarations and variables.
  * Attributes::                  Declaration and type attributes.
--- 10452,10463 ----
  on GENERIC, but the current compiler performs inlining after lowering to
  GIMPLE (a restricted form described in the next section).  Indeed,
  currently the frontends perform this lowering before handing off to
! ‘tree_rest_of_compilation’, but this seems inelegant.
  
  * Menu:
  
  * Deficiencies::                Topics not yet covered in this document.
! * Tree overview::               All about ‘tree’s.
  * Types::                       Fundamental and aggregate types.
  * Declarations::                Type declarations and variables.
  * Attributes::                  Declaration and type attributes.
*************** File: gccint.info,  Node: Tree overview,
*** 10481,10514 ****
  =============
  
  The central data structure used by the internal representation is the
! 'tree'.  These nodes, while all of the C type 'tree', are of many
! varieties.  A 'tree' is a pointer type, but the object to which it
  points may be of a variety of types.  From this point forward, we will
! refer to trees in ordinary type, rather than in 'this font', except when
! talking about the actual C type 'tree'.
  
   You can tell what kind of node a particular tree is by using the
! 'TREE_CODE' macro.  Many, many macros take trees as input and return
  trees as output.  However, most macros require a certain kind of tree
  node as input.  In other words, there is a type-system for trees, but it
  is not reflected in the C type-system.
  
!  For safety, it is useful to configure GCC with '--enable-checking'.
  Although this results in a significant performance penalty (since all
  tree types are checked at run-time), and is therefore inappropriate in a
  release version, it is extremely helpful during the development process.
  
   Many macros behave as predicates.  Many, although not all, of these
! predicates end in '_P'.  Do not rely on the result type of these macros
  being of any particular type.  You may, however, rely on the fact that
! the type can be compared to '0', so that statements like
       if (TEST_P (t) && !TEST_P (y))
         x = 1;
  and
       int i = (TEST_P (t) != 0);
! are legal.  Macros that return 'int' values now may be changed to return
! 'tree' values, or other pointers in the future.  Even those that
! continue to return 'int' may return multiple nonzero codes where
  previously they returned only zero and one.  Therefore, you should not
  write code like
       if (TEST_P (t) == 1)
--- 10483,10516 ----
  =============
  
  The central data structure used by the internal representation is the
! ‘tree’.  These nodes, while all of the C type ‘tree’, are of many
! varieties.  A ‘tree’ is a pointer type, but the object to which it
  points may be of a variety of types.  From this point forward, we will
! refer to trees in ordinary type, rather than in ‘this font’, except when
! talking about the actual C type ‘tree’.
  
   You can tell what kind of node a particular tree is by using the
! ‘TREE_CODE’ macro.  Many, many macros take trees as input and return
  trees as output.  However, most macros require a certain kind of tree
  node as input.  In other words, there is a type-system for trees, but it
  is not reflected in the C type-system.
  
!  For safety, it is useful to configure GCC with ‘--enable-checking’.
  Although this results in a significant performance penalty (since all
  tree types are checked at run-time), and is therefore inappropriate in a
  release version, it is extremely helpful during the development process.
  
   Many macros behave as predicates.  Many, although not all, of these
! predicates end in ‘_P’.  Do not rely on the result type of these macros
  being of any particular type.  You may, however, rely on the fact that
! the type can be compared to ‘0’, so that statements like
       if (TEST_P (t) && !TEST_P (y))
         x = 1;
  and
       int i = (TEST_P (t) != 0);
! are legal.  Macros that return ‘int’ values now may be changed to return
! ‘tree’ values, or other pointers in the future.  Even those that
! continue to return ‘int’ may return multiple nonzero codes where
  previously they returned only zero and one.  Therefore, you should not
  write code like
       if (TEST_P (t) == 1)
*************** made up entirely of uppercase letters ma
*** 10525,10541 ****
  than once.  You may assume that a macro or function whose name is made
  up entirely of lowercase letters will evaluate its arguments only once.
  
!  The 'error_mark_node' is a special tree.  Its tree code is
! 'ERROR_MARK', but since there is only ever one node with that code, the
! usual practice is to compare the tree against 'error_mark_node'.  (This
  test is just a test for pointer equality.)  If an error has occurred
! during front-end processing the flag 'errorcount' will be set.  If the
  front end has encountered code it cannot handle, it will issue a message
! to the user and set 'sorrycount'.  When these flags are set, any macro
  or function which normally returns a tree of a particular kind may
! instead return the 'error_mark_node'.  Thus, if you intend to do any
  processing of erroneous code, you must be prepared to deal with the
! 'error_mark_node'.
  
   Occasionally, a particular tree slot (like an operand to an expression,
  or a particular field in a declaration) will be referred to as "reserved
--- 10527,10543 ----
  than once.  You may assume that a macro or function whose name is made
  up entirely of lowercase letters will evaluate its arguments only once.
  
!  The ‘error_mark_node’ is a special tree.  Its tree code is
! ‘ERROR_MARK’, but since there is only ever one node with that code, the
! usual practice is to compare the tree against ‘error_mark_node’.  (This
  test is just a test for pointer equality.)  If an error has occurred
! during front-end processing the flag ‘errorcount’ will be set.  If the
  front end has encountered code it cannot handle, it will issue a message
! to the user and set ‘sorrycount’.  When these flags are set, any macro
  or function which normally returns a tree of a particular kind may
! instead return the ‘error_mark_node’.  Thus, if you intend to do any
  processing of erroneous code, you must be prepared to deal with the
! ‘error_mark_node’.
  
   Occasionally, a particular tree slot (like an operand to an expression,
  or a particular field in a declaration) will be referred to as "reserved
*************** File: gccint.info,  Node: Macros and Fun
*** 10563,10590 ****
  11.2.1 Trees
  ------------
  
! All GENERIC trees have two fields in common.  First, 'TREE_CHAIN' is a
  pointer that can be used as a singly-linked list to other trees.  The
! other is 'TREE_TYPE'.  Many trees store the type of an expression or
  declaration in this field.
  
   These are some other functions for handling trees:
  
! 'tree_size'
       Return the number of bytes a tree takes.
  
! 'build0'
! 'build1'
! 'build2'
! 'build3'
! 'build4'
! 'build5'
! 'build6'
  
       These functions build a tree and supply values to put in each
!      parameter.  The basic signature is 'code, type, [operands]'.
!      'code' is the 'TREE_CODE', and 'type' is a tree representing the
!      'TREE_TYPE'.  These are followed by the operands, each of which is
       also a tree.
  
  
--- 10565,10592 ----
  11.2.1 Trees
  ------------
  
! All GENERIC trees have two fields in common.  First, ‘TREE_CHAIN’ is a
  pointer that can be used as a singly-linked list to other trees.  The
! other is ‘TREE_TYPE’.  Many trees store the type of an expression or
  declaration in this field.
  
   These are some other functions for handling trees:
  
! ‘tree_size’
       Return the number of bytes a tree takes.
  
! ‘build0’
! ‘build1’
! ‘build2’
! ‘build3’
! ‘build4’
! ‘build5’
! ‘build6’
  
       These functions build a tree and supply values to put in each
!      parameter.  The basic signature is ‘code, type, [operands]’.
!      ‘code’ is the ‘TREE_CODE’, and ‘type’ is a tree representing the
!      ‘TREE_TYPE’.  These are followed by the operands, each of which is
       also a tree.
  
  
*************** File: gccint.info,  Node: Identifiers,
*** 10593,10629 ****
  11.2.2 Identifiers
  ------------------
  
! An 'IDENTIFIER_NODE' represents a slightly more general concept than the
  standard C or C++ concept of identifier.  In particular, an
! 'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters.
  
!  There are never two distinct 'IDENTIFIER_NODE's representing the same
  identifier.  Therefore, you may use pointer equality to compare
! 'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'.  Use
! 'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied
  string.
  
   You can use the following macros to access identifiers:
! 'IDENTIFIER_POINTER'
!      The string represented by the identifier, represented as a 'char*'.
!      This string is always 'NUL'-terminated, and contains no embedded
!      'NUL' characters.
  
! 'IDENTIFIER_LENGTH'
!      The length of the string returned by 'IDENTIFIER_POINTER', not
!      including the trailing 'NUL'.  This value of 'IDENTIFIER_LENGTH
!      (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'.
  
! 'IDENTIFIER_OPNAME_P'
       This predicate holds if the identifier represents the name of an
       overloaded operator.  In this case, you should not depend on the
!      contents of either the 'IDENTIFIER_POINTER' or the
!      'IDENTIFIER_LENGTH'.
  
! 'IDENTIFIER_TYPENAME_P'
       This predicate holds if the identifier represents the name of a
!      user-defined conversion operator.  In this case, the 'TREE_TYPE' of
!      the 'IDENTIFIER_NODE' holds the type to which the conversion
       operator converts.
  
  
--- 10595,10631 ----
  11.2.2 Identifiers
  ------------------
  
! An ‘IDENTIFIER_NODE’ represents a slightly more general concept than the
  standard C or C++ concept of identifier.  In particular, an
! ‘IDENTIFIER_NODE’ may contain a ‘$’, or other extraordinary characters.
  
!  There are never two distinct ‘IDENTIFIER_NODE’s representing the same
  identifier.  Therefore, you may use pointer equality to compare
! ‘IDENTIFIER_NODE’s, rather than using a routine like ‘strcmp’.  Use
! ‘get_identifier’ to obtain the unique ‘IDENTIFIER_NODE’ for a supplied
  string.
  
   You can use the following macros to access identifiers:
! ‘IDENTIFIER_POINTER’
!      The string represented by the identifier, represented as a ‘char*’.
!      This string is always ‘NUL’-terminated, and contains no embedded
!      ‘NUL’ characters.
  
! ‘IDENTIFIER_LENGTH’
!      The length of the string returned by ‘IDENTIFIER_POINTER’, not
!      including the trailing ‘NUL’.  This value of ‘IDENTIFIER_LENGTH
!      (x)’ is always the same as ‘strlen (IDENTIFIER_POINTER (x))’.
  
! ‘IDENTIFIER_OPNAME_P’
       This predicate holds if the identifier represents the name of an
       overloaded operator.  In this case, you should not depend on the
!      contents of either the ‘IDENTIFIER_POINTER’ or the
!      ‘IDENTIFIER_LENGTH’.
  
! ‘IDENTIFIER_TYPENAME_P’
       This predicate holds if the identifier represents the name of a
!      user-defined conversion operator.  In this case, the ‘TREE_TYPE’ of
!      the ‘IDENTIFIER_NODE’ holds the type to which the conversion
       operator converts.
  
  
*************** File: gccint.info,  Node: Containers,  P
*** 10633,10652 ****
  -----------------
  
  Two common container data structures can be represented directly with
! tree nodes.  A 'TREE_LIST' is a singly linked list containing two trees
! per node.  These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node.
! (Often, the 'TREE_PURPOSE' contains some kind of tag, or additional
! information, while the 'TREE_VALUE' contains the majority of the
! payload.  In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE',
! while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of
! equal stature.)  Given one 'TREE_LIST' node, the next node is found by
! following the 'TREE_CHAIN'.  If the 'TREE_CHAIN' is 'NULL_TREE', then
  you have reached the end of the list.
  
!  A 'TREE_VEC' is a simple vector.  The 'TREE_VEC_LENGTH' is an integer
  (not a tree) giving the number of nodes in the vector.  The nodes
! themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two
! arguments.  The first is the 'TREE_VEC' in question; the second is an
  integer indicating which element in the vector is desired.  The elements
  are indexed from zero.
  
--- 10635,10654 ----
  -----------------
  
  Two common container data structures can be represented directly with
! tree nodes.  A ‘TREE_LIST’ is a singly linked list containing two trees
! per node.  These are the ‘TREE_PURPOSE’ and ‘TREE_VALUE’ of each node.
! (Often, the ‘TREE_PURPOSE’ contains some kind of tag, or additional
! information, while the ‘TREE_VALUE’ contains the majority of the
! payload.  In other cases, the ‘TREE_PURPOSE’ is simply ‘NULL_TREE’,
! while in still others both the ‘TREE_PURPOSE’ and ‘TREE_VALUE’ are of
! equal stature.)  Given one ‘TREE_LIST’ node, the next node is found by
! following the ‘TREE_CHAIN’.  If the ‘TREE_CHAIN’ is ‘NULL_TREE’, then
  you have reached the end of the list.
  
!  A ‘TREE_VEC’ is a simple vector.  The ‘TREE_VEC_LENGTH’ is an integer
  (not a tree) giving the number of nodes in the vector.  The nodes
! themselves are accessed using the ‘TREE_VEC_ELT’ macro, which takes two
! arguments.  The first is the ‘TREE_VEC’ in question; the second is an
  integer indicating which element in the vector is desired.  The elements
  are indexed from zero.
  
*************** that there is exactly one tree node corr
*** 10661,10920 ****
  are often multiple nodes corresponding to the same type.
  
   For the most part, different kinds of types have different tree codes.
! (For example, pointer types use a 'POINTER_TYPE' code while arrays use
! an 'ARRAY_TYPE' code.)  However, pointers to member functions use the
! 'RECORD_TYPE' code.  Therefore, when writing a 'switch' statement that
  depends on the code associated with a particular type, you should take
! care to handle pointers to member functions under the 'RECORD_TYPE' case
  label.
  
   The following functions and macros deal with cv-qualification of types:
! 'TYPE_MAIN_VARIANT'
       This macro returns the unqualified version of a type.  It may be
       applied to an unqualified type, but it is not always the identity
       function in that case.
  
   A few other macros and functions are usable with all types:
! 'TYPE_SIZE'
       The number of bits required to represent the type, represented as
!      an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
!      'NULL_TREE'.
  
! 'TYPE_ALIGN'
!      The alignment of the type, in bits, represented as an 'int'.
  
! 'TYPE_NAME'
!      This macro returns a declaration (in the form of a 'TYPE_DECL') for
!      the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
       as you might expect, given its name!)  You can look at the
!      'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
!      type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
       built-in type, the result of a typedef, or a named class type.
  
! 'TYPE_CANONICAL'
       This macro returns the "canonical" type for the given type node.
       Canonical types are used to improve performance in the C++ and
       Objective-C++ front ends by allowing efficient comparison between
!      two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of
       the types are equal, the types are equivalent; otherwise, the types
       are not equivalent.  The notion of equivalence for canonical types
       is the same as the notion of type equivalence in the language
       itself.  For instance,
  
!      When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type
       for the given type node.  In this case, comparison between this
       type and any other type requires the compiler to perform a deep,
       "structural" comparison to see if the two type nodes have the same
       form and properties.
  
       The canonical type for a node is always the most fundamental type
!      in the equivalence class of types.  For instance, 'int' is its own
!      canonical type.  A typedef 'I' of 'int' will have 'int' as its
!      canonical type.  Similarly, 'I*' and a typedef 'IP' (defined to
!      'I*') will has 'int*' as their canonical type.  When building a new
!      type node, be sure to set 'TYPE_CANONICAL' to the appropriate
       canonical type.  If the new type is a compound type (built from
       other types), and any of those other types require structural
!      equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new
       type also requires structural equality.  Finally, if for some
!      reason you cannot guarantee that 'TYPE_CANONICAL' will point to the
!      canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure
       that the new type-and any type constructed based on it-requires
       structural equality.  If you suspect that the canonical type system
!      is miscomparing types, pass '--param verify-canonical-types=1' to
!      the compiler or configure with '--enable-checking' to force the
       compiler to verify its canonical-type comparisons against the
       structural comparisons; the compiler will then print any warnings
       if the canonical types miscompare.
  
! 'TYPE_STRUCTURAL_EQUALITY_P'
       This predicate holds when the node requires structural equality
!      checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'.
  
! 'SET_TYPE_STRUCTURAL_EQUALITY'
       This macro states that the type node it is given requires
!      structural equality checks, e.g., it sets 'TYPE_CANONICAL' to
!      'NULL_TREE'.
  
! 'same_type_p'
       This predicate takes two types as input, and holds if they are the
!      same type.  For example, if one type is a 'typedef' for the other,
!      or both are 'typedef's for the same type.  This predicate also
       holds if the two trees given as input are simply copies of one
       another; i.e., there is no difference between them at the source
       level, but, for whatever reason, a duplicate has been made in the
!      representation.  You should never use '==' (pointer equality) to
!      compare types; always use 'same_type_p' instead.
  
   Detailed below are the various kinds of types, and the macros that can
  be used to access them.  Although other kinds of types are used
  elsewhere in G++, the types described here are the only ones that you
  will encounter while examining the intermediate representation.
  
! 'VOID_TYPE'
!      Used to represent the 'void' type.
  
! 'INTEGER_TYPE'
!      Used to represent the various integral types, including 'char',
!      'short', 'int', 'long', and 'long long'.  This code is not used for
!      enumeration types, nor for the 'bool' type.  The 'TYPE_PRECISION'
       is the number of bits used in the representation, represented as an
!      'unsigned int'.  (Note that in the general case this is not the
!      same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer
       type, but that alignment requirements for the ABI required 32-bit
!      alignment.  Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32,
!      while 'TYPE_PRECISION' would be 24.)  The integer type is unsigned
!      if 'TYPE_UNSIGNED' holds; otherwise, it is signed.
  
!      The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer
       that may be represented by this type.  Similarly, the
!      'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that
       may be represented by this type.
  
! 'BITINT_TYPE'
!      Used to represent the bit-precise integer types, '_BitInt(N)'.
!      These types are similar to 'INTEGER_TYPE', but can have arbitrary
       user selected precisions and do or can have different alignment,
       function argument and return value passing conventions.  Larger
!      BITINT_TYPEs can have 'BLKmode' 'TYPE_MODE' and need to be lowered
       by a special BITINT_TYPE lowering pass.
  
! 'REAL_TYPE'
!      Used to represent the 'float', 'double', and 'long double' types.
       The number of bits in the floating-point representation is given by
!      'TYPE_PRECISION', as in the 'INTEGER_TYPE' case.
  
! 'FIXED_POINT_TYPE'
!      Used to represent the 'short _Fract', '_Fract', 'long _Fract',
!      'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and
!      'long long _Accum' types.  The number of bits in the fixed-point
!      representation is given by 'TYPE_PRECISION', as in the
!      'INTEGER_TYPE' case.  There may be padding bits, fractional bits
       and integral bits.  The number of fractional bits is given by
!      'TYPE_FBIT', and the number of integral bits is given by
!      'TYPE_IBIT'.  The fixed-point type is unsigned if 'TYPE_UNSIGNED'
       holds; otherwise, it is signed.  The fixed-point type is saturating
!      if 'TYPE_SATURATING' holds; otherwise, it is not saturating.
  
! 'COMPLEX_TYPE'
!      Used to represent GCC built-in '__complex__' data types.  The
!      'TREE_TYPE' is the type of the real and imaginary parts.
  
! 'ENUMERAL_TYPE'
!      Used to represent an enumeration type.  The 'TYPE_PRECISION' gives
!      (as an 'int'), the number of bits used to represent the type.  If
!      there are no negative enumeration constants, 'TYPE_UNSIGNED' will
       hold.  The minimum and maximum enumeration constants may be
!      obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively;
!      each of these macros returns an 'INTEGER_CST'.
  
       The actual enumeration constants themselves may be obtained by
!      looking at the 'TYPE_VALUES'.  This macro will return a
!      'TREE_LIST', containing the constants.  The 'TREE_PURPOSE' of each
!      node will be an 'IDENTIFIER_NODE' giving the name of the constant;
!      the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned
       to that constant.  These constants will appear in the order in
!      which they were declared.  The 'TREE_TYPE' of each of these
       constants will be the type of enumeration type itself.
  
! 'OPAQUE_TYPE'
!      Used for things that have a 'MODE_OPAQUE' mode class in the
       backend.  Opaque types have a size and precision, and can be held
       in memory or registers.  They are used when we do not want the
       compiler to make assumptions about the availability of other
       operations as would happen with integer types.
  
! 'BOOLEAN_TYPE'
!      Used to represent the 'bool' type.
  
! 'POINTER_TYPE'
       Used to represent pointer types, and pointer to data member types.
!      The 'TREE_TYPE' gives the type to which this type points.
  
! 'REFERENCE_TYPE'
!      Used to represent reference types.  The 'TREE_TYPE' gives the type
       to which this type refers.
  
! 'FUNCTION_TYPE'
       Used to represent the type of non-member functions and of static
!      member functions.  The 'TREE_TYPE' gives the return type of the
!      function.  The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument
!      types.  The 'TREE_VALUE' of each node in this list is the type of
!      the corresponding argument; the 'TREE_PURPOSE' is an expression for
       the default argument value, if any.  If the last node in the list
!      is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the
!      'void_type_node'), then functions of this type do not take variable
       arguments.  Otherwise, they do take a variable number of arguments.
  
!      Note that in C (but not in C++) a function declared like 'void f()'
       is an unprototyped function taking a variable number of arguments;
!      the 'TYPE_ARG_TYPES' of such a function will be 'NULL'.
  
! 'METHOD_TYPE'
       Used to represent the type of a non-static member function.  Like a
!      'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'.  The
!      type of '*this', i.e., the class of which functions of this type
!      are a member, is given by the 'TYPE_METHOD_BASETYPE'.  The
!      'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE',
!      and includes the 'this' argument.
  
! 'ARRAY_TYPE'
!      Used to represent array types.  The 'TREE_TYPE' gives the type of
       the elements in the array.  If the array-bound is present in the
!      type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE'
!      and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the
!      array, respectively.  The 'TYPE_MIN_VALUE' will always be an
!      'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less
       than the number of elements in the array, i.e., the highest value
       which may be used to index an element in the array.
  
! 'RECORD_TYPE'
!      Used to represent 'struct' and 'class' types, as well as pointers
       to member functions and similar constructs in other languages.
!      'TYPE_FIELDS' contains the items contained in this type, each of
!      which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or
!      'TYPE_DECL'.  You may not make any assumptions about the ordering
       of the fields in the type or whether one or more of them overlap.
  
! 'UNION_TYPE'
!      Used to represent 'union' types.  Similar to 'RECORD_TYPE' except
!      that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position
       zero.
  
! 'QUAL_UNION_TYPE'
       Used to represent part of a variant record in Ada.  Similar to
!      'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER'
       field, which contains a boolean expression that indicates whether
       the field is present in the object.  The type will only have one
!      field, so each field's 'DECL_QUALIFIER' is only evaluated if none
!      of the expressions in the previous fields in 'TYPE_FIELDS' are
       nonzero.  Normally these expressions will reference a field in the
!      outer object using a 'PLACEHOLDER_EXPR'.
  
! 'LANG_TYPE'
       This node is used to represent a language-specific type.  The front
       end must handle it.
  
! 'OFFSET_TYPE'
       This node is used to represent a pointer-to-data member.  For a
!      data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the
!      'TREE_TYPE' is the type of 'm'.
  
   There are variables whose values represent some of the basic types.
  These include:
! 'void_type_node'
!      A node for 'void'.
  
! 'integer_type_node'
!      A node for 'int'.
  
! 'unsigned_type_node.'
!      A node for 'unsigned int'.
  
! 'char_type_node.'
!      A node for 'char'.
  It may sometimes be useful to compare one of these variables with a type
! in hand, using 'same_type_p'.
  
  
  File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
--- 10663,10922 ----
  are often multiple nodes corresponding to the same type.
  
   For the most part, different kinds of types have different tree codes.
! (For example, pointer types use a ‘POINTER_TYPE’ code while arrays use
! an ‘ARRAY_TYPE’ code.)  However, pointers to member functions use the
! ‘RECORD_TYPE’ code.  Therefore, when writing a ‘switch’ statement that
  depends on the code associated with a particular type, you should take
! care to handle pointers to member functions under the ‘RECORD_TYPE’ case
  label.
  
   The following functions and macros deal with cv-qualification of types:
! ‘TYPE_MAIN_VARIANT’
       This macro returns the unqualified version of a type.  It may be
       applied to an unqualified type, but it is not always the identity
       function in that case.
  
   A few other macros and functions are usable with all types:
! ‘TYPE_SIZE’
       The number of bits required to represent the type, represented as
!      an ‘INTEGER_CST’.  For an incomplete type, ‘TYPE_SIZE’ will be
!      ‘NULL_TREE’.
  
! ‘TYPE_ALIGN’
!      The alignment of the type, in bits, represented as an ‘int’.
  
! ‘TYPE_NAME’
!      This macro returns a declaration (in the form of a ‘TYPE_DECL’) for
!      the type.  (Note this macro does _not_ return an ‘IDENTIFIER_NODE’,
       as you might expect, given its name!)  You can look at the
!      ‘DECL_NAME’ of the ‘TYPE_DECL’ to obtain the actual name of the
!      type.  The ‘TYPE_NAME’ will be ‘NULL_TREE’ for a type that is not a
       built-in type, the result of a typedef, or a named class type.
  
! ‘TYPE_CANONICAL’
       This macro returns the "canonical" type for the given type node.
       Canonical types are used to improve performance in the C++ and
       Objective-C++ front ends by allowing efficient comparison between
!      two type nodes in ‘same_type_p’: if the ‘TYPE_CANONICAL’ values of
       the types are equal, the types are equivalent; otherwise, the types
       are not equivalent.  The notion of equivalence for canonical types
       is the same as the notion of type equivalence in the language
       itself.  For instance,
  
!      When ‘TYPE_CANONICAL’ is ‘NULL_TREE’, there is no canonical type
       for the given type node.  In this case, comparison between this
       type and any other type requires the compiler to perform a deep,
       "structural" comparison to see if the two type nodes have the same
       form and properties.
  
       The canonical type for a node is always the most fundamental type
!      in the equivalence class of types.  For instance, ‘int’ is its own
!      canonical type.  A typedef ‘I’ of ‘int’ will have ‘int’ as its
!      canonical type.  Similarly, ‘I*’ and a typedef ‘IP’ (defined to
!      ‘I*’) will has ‘int*’ as their canonical type.  When building a new
!      type node, be sure to set ‘TYPE_CANONICAL’ to the appropriate
       canonical type.  If the new type is a compound type (built from
       other types), and any of those other types require structural
!      equality, use ‘SET_TYPE_STRUCTURAL_EQUALITY’ to ensure that the new
       type also requires structural equality.  Finally, if for some
!      reason you cannot guarantee that ‘TYPE_CANONICAL’ will point to the
!      canonical type, use ‘SET_TYPE_STRUCTURAL_EQUALITY’ to make sure
       that the new type-and any type constructed based on it-requires
       structural equality.  If you suspect that the canonical type system
!      is miscomparing types, pass ‘--param verify-canonical-types=1’ to
!      the compiler or configure with ‘--enable-checking’ to force the
       compiler to verify its canonical-type comparisons against the
       structural comparisons; the compiler will then print any warnings
       if the canonical types miscompare.
  
! ‘TYPE_STRUCTURAL_EQUALITY_P’
       This predicate holds when the node requires structural equality
!      checks, e.g., when ‘TYPE_CANONICAL’ is ‘NULL_TREE’.
  
! ‘SET_TYPE_STRUCTURAL_EQUALITY’
       This macro states that the type node it is given requires
!      structural equality checks, e.g., it sets ‘TYPE_CANONICAL’ to
!      ‘NULL_TREE’.
  
! ‘same_type_p’
       This predicate takes two types as input, and holds if they are the
!      same type.  For example, if one type is a ‘typedef’ for the other,
!      or both are ‘typedef’s for the same type.  This predicate also
       holds if the two trees given as input are simply copies of one
       another; i.e., there is no difference between them at the source
       level, but, for whatever reason, a duplicate has been made in the
!      representation.  You should never use ‘==’ (pointer equality) to
!      compare types; always use ‘same_type_p’ instead.
  
   Detailed below are the various kinds of types, and the macros that can
  be used to access them.  Although other kinds of types are used
  elsewhere in G++, the types described here are the only ones that you
  will encounter while examining the intermediate representation.
  
! ‘VOID_TYPE’
!      Used to represent the ‘void’ type.
  
! ‘INTEGER_TYPE’
!      Used to represent the various integral types, including ‘char’,
!      ‘short’, ‘int’, ‘long’, and ‘long long’.  This code is not used for
!      enumeration types, nor for the ‘bool’ type.  The ‘TYPE_PRECISION’
       is the number of bits used in the representation, represented as an
!      ‘unsigned int’.  (Note that in the general case this is not the
!      same value as ‘TYPE_SIZE’; suppose that there were a 24-bit integer
       type, but that alignment requirements for the ABI required 32-bit
!      alignment.  Then, ‘TYPE_SIZE’ would be an ‘INTEGER_CST’ for 32,
!      while ‘TYPE_PRECISION’ would be 24.)  The integer type is unsigned
!      if ‘TYPE_UNSIGNED’ holds; otherwise, it is signed.
  
!      The ‘TYPE_MIN_VALUE’ is an ‘INTEGER_CST’ for the smallest integer
       that may be represented by this type.  Similarly, the
!      ‘TYPE_MAX_VALUE’ is an ‘INTEGER_CST’ for the largest integer that
       may be represented by this type.
  
! ‘BITINT_TYPE’
!      Used to represent the bit-precise integer types, ‘_BitInt(N)’.
!      These types are similar to ‘INTEGER_TYPE’, but can have arbitrary
       user selected precisions and do or can have different alignment,
       function argument and return value passing conventions.  Larger
!      BITINT_TYPEs can have ‘BLKmode’ ‘TYPE_MODE’ and need to be lowered
       by a special BITINT_TYPE lowering pass.
  
! ‘REAL_TYPE’
!      Used to represent the ‘float’, ‘double’, and ‘long double’ types.
       The number of bits in the floating-point representation is given by
!      ‘TYPE_PRECISION’, as in the ‘INTEGER_TYPE’ case.
  
! ‘FIXED_POINT_TYPE’
!      Used to represent the ‘short _Fract’, ‘_Fract’, ‘long _Fract’,
!      ‘long long _Fract’, ‘short _Accum’, ‘_Accum’, ‘long _Accum’, and
!      ‘long long _Accum’ types.  The number of bits in the fixed-point
!      representation is given by ‘TYPE_PRECISION’, as in the
!      ‘INTEGER_TYPE’ case.  There may be padding bits, fractional bits
       and integral bits.  The number of fractional bits is given by
!      ‘TYPE_FBIT’, and the number of integral bits is given by
!      ‘TYPE_IBIT’.  The fixed-point type is unsigned if ‘TYPE_UNSIGNED’
       holds; otherwise, it is signed.  The fixed-point type is saturating
!      if ‘TYPE_SATURATING’ holds; otherwise, it is not saturating.
  
! ‘COMPLEX_TYPE’
!      Used to represent GCC built-in ‘__complex__’ data types.  The
!      ‘TREE_TYPE’ is the type of the real and imaginary parts.
  
! ‘ENUMERAL_TYPE’
!      Used to represent an enumeration type.  The ‘TYPE_PRECISION’ gives
!      (as an ‘int’), the number of bits used to represent the type.  If
!      there are no negative enumeration constants, ‘TYPE_UNSIGNED’ will
       hold.  The minimum and maximum enumeration constants may be
!      obtained with ‘TYPE_MIN_VALUE’ and ‘TYPE_MAX_VALUE’, respectively;
!      each of these macros returns an ‘INTEGER_CST’.
  
       The actual enumeration constants themselves may be obtained by
!      looking at the ‘TYPE_VALUES’.  This macro will return a
!      ‘TREE_LIST’, containing the constants.  The ‘TREE_PURPOSE’ of each
!      node will be an ‘IDENTIFIER_NODE’ giving the name of the constant;
!      the ‘TREE_VALUE’ will be an ‘INTEGER_CST’ giving the value assigned
       to that constant.  These constants will appear in the order in
!      which they were declared.  The ‘TREE_TYPE’ of each of these
       constants will be the type of enumeration type itself.
  
! ‘OPAQUE_TYPE’
!      Used for things that have a ‘MODE_OPAQUE’ mode class in the
       backend.  Opaque types have a size and precision, and can be held
       in memory or registers.  They are used when we do not want the
       compiler to make assumptions about the availability of other
       operations as would happen with integer types.
  
! ‘BOOLEAN_TYPE’
!      Used to represent the ‘bool’ type.
  
! ‘POINTER_TYPE’
       Used to represent pointer types, and pointer to data member types.
!      The ‘TREE_TYPE’ gives the type to which this type points.
  
! ‘REFERENCE_TYPE’
!      Used to represent reference types.  The ‘TREE_TYPE’ gives the type
       to which this type refers.
  
! ‘FUNCTION_TYPE’
       Used to represent the type of non-member functions and of static
!      member functions.  The ‘TREE_TYPE’ gives the return type of the
!      function.  The ‘TYPE_ARG_TYPES’ are a ‘TREE_LIST’ of the argument
!      types.  The ‘TREE_VALUE’ of each node in this list is the type of
!      the corresponding argument; the ‘TREE_PURPOSE’ is an expression for
       the default argument value, if any.  If the last node in the list
!      is ‘void_list_node’ (a ‘TREE_LIST’ node whose ‘TREE_VALUE’ is the
!      ‘void_type_node’), then functions of this type do not take variable
       arguments.  Otherwise, they do take a variable number of arguments.
  
!      Note that in C (but not in C++) a function declared like ‘void f()’
       is an unprototyped function taking a variable number of arguments;
!      the ‘TYPE_ARG_TYPES’ of such a function will be ‘NULL’.
  
! ‘METHOD_TYPE’
       Used to represent the type of a non-static member function.  Like a
!      ‘FUNCTION_TYPE’, the return type is given by the ‘TREE_TYPE’.  The
!      type of ‘*this’, i.e., the class of which functions of this type
!      are a member, is given by the ‘TYPE_METHOD_BASETYPE’.  The
!      ‘TYPE_ARG_TYPES’ is the parameter list, as for a ‘FUNCTION_TYPE’,
!      and includes the ‘this’ argument.
  
! ‘ARRAY_TYPE’
!      Used to represent array types.  The ‘TREE_TYPE’ gives the type of
       the elements in the array.  If the array-bound is present in the
!      type, the ‘TYPE_DOMAIN’ is an ‘INTEGER_TYPE’ whose ‘TYPE_MIN_VALUE’
!      and ‘TYPE_MAX_VALUE’ will be the lower and upper bounds of the
!      array, respectively.  The ‘TYPE_MIN_VALUE’ will always be an
!      ‘INTEGER_CST’ for zero, while the ‘TYPE_MAX_VALUE’ will be one less
       than the number of elements in the array, i.e., the highest value
       which may be used to index an element in the array.
  
! ‘RECORD_TYPE’
!      Used to represent ‘struct’ and ‘class’ types, as well as pointers
       to member functions and similar constructs in other languages.
!      ‘TYPE_FIELDS’ contains the items contained in this type, each of
!      which can be a ‘FIELD_DECL’, ‘VAR_DECL’, ‘CONST_DECL’, or
!      ‘TYPE_DECL’.  You may not make any assumptions about the ordering
       of the fields in the type or whether one or more of them overlap.
  
! ‘UNION_TYPE’
!      Used to represent ‘union’ types.  Similar to ‘RECORD_TYPE’ except
!      that all ‘FIELD_DECL’ nodes in ‘TYPE_FIELD’ start at bit position
       zero.
  
! ‘QUAL_UNION_TYPE’
       Used to represent part of a variant record in Ada.  Similar to
!      ‘UNION_TYPE’ except that each ‘FIELD_DECL’ has a ‘DECL_QUALIFIER’
       field, which contains a boolean expression that indicates whether
       the field is present in the object.  The type will only have one
!      field, so each field's ‘DECL_QUALIFIER’ is only evaluated if none
!      of the expressions in the previous fields in ‘TYPE_FIELDS’ are
       nonzero.  Normally these expressions will reference a field in the
!      outer object using a ‘PLACEHOLDER_EXPR’.
  
! ‘LANG_TYPE’
       This node is used to represent a language-specific type.  The front
       end must handle it.
  
! ‘OFFSET_TYPE’
       This node is used to represent a pointer-to-data member.  For a
!      data member ‘X::m’ the ‘TYPE_OFFSET_BASETYPE’ is ‘X’ and the
!      ‘TREE_TYPE’ is the type of ‘m’.
  
   There are variables whose values represent some of the basic types.
  These include:
! ‘void_type_node’
!      A node for ‘void’.
  
! ‘integer_type_node’
!      A node for ‘int’.
  
! ‘unsigned_type_node.’
!      A node for ‘unsigned int’.
  
! ‘char_type_node.’
!      A node for ‘char’.
  It may sometimes be useful to compare one of these variables with a type
! in hand, using ‘same_type_p’.
  
  
  File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
*************** File: gccint.info,  Node: Declarations,
*** 10924,10930 ****
  
  This section covers the various kinds of declarations that appear in the
  internal representation, except for declarations of functions
! (represented by 'FUNCTION_DECL' nodes), which are described in *note
  Functions::.
  
  * Menu:
--- 10926,10932 ----
  
  This section covers the various kinds of declarations that appear in the
  internal representation, except for declarations of functions
! (represented by ‘FUNCTION_DECL’ nodes), which are described in *note
  Functions::.
  
  * Menu:
*************** File: gccint.info,  Node: Working with d
*** 10940,11062 ****
  --------------------------------
  
  Some macros can be used with any kind of declaration.  These include:
! 'DECL_NAME'
!      This macro returns an 'IDENTIFIER_NODE' giving the name of the
       entity.
  
! 'TREE_TYPE'
       This macro returns the type of the entity declared.
  
! 'EXPR_FILENAME'
       This macro returns the name of the file in which the entity was
!      declared, as a 'char*'.  For an entity declared implicitly by the
!      compiler (like '__builtin_memcpy'), this will be the string
!      '"<internal>"'.
  
! 'EXPR_LINENO'
       This macro returns the line number at which the entity was
!      declared, as an 'int'.
  
! 'DECL_ARTIFICIAL'
       This predicate holds if the declaration was implicitly generated by
       the compiler.  For example, this predicate will hold of an
!      implicitly declared member function, or of the 'TYPE_DECL'
       implicitly generated for a class type.  Recall that in C++ code
       like:
            struct S {};
       is roughly equivalent to C code like:
            struct S {};
            typedef struct S S;
!      The implicitly generated 'typedef' declaration is represented by a
!      'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds.
  
   The various kinds of declarations include:
! 'LABEL_DECL'
       These nodes are used to represent labels in function bodies.  For
       more information, see *note Functions::.  These nodes only appear
       in block scopes.
  
! 'CONST_DECL'
       These nodes are used to represent enumeration constants.  The value
!      of the constant is given by 'DECL_INITIAL' which will be an
!      'INTEGER_CST' with the same type as the 'TREE_TYPE' of the
!      'CONST_DECL', i.e., an 'ENUMERAL_TYPE'.
  
! 'RESULT_DECL'
       These nodes represent the value returned by a function.  When a
!      value is assigned to a 'RESULT_DECL', that indicates that the value
       should be returned, via bitwise copy, by the function.  You can use
!      'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a
!      'VAR_DECL'.
  
! 'TYPE_DECL'
!      These nodes represent 'typedef' declarations.  The 'TREE_TYPE' is
!      the type declared to have the name given by 'DECL_NAME'.  In some
       cases, there is no associated name.
  
! 'VAR_DECL'
       These nodes represent variables with namespace or block scope, as
!      well as static data members.  The 'DECL_SIZE' and 'DECL_ALIGN' are
!      analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'.  For a declaration, you
!      should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the
!      'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since
       special attributes may have been applied to the variable to give it
       a particular size and alignment.  You may use the predicates
!      'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the
!      storage class specifiers 'static' or 'extern' were used to declare
       a variable.
  
       If this variable is initialized (but does not require a
!      constructor), the 'DECL_INITIAL' will be an expression for the
       initializer.  The initializer should be evaluated, and a bitwise
!      copy into the variable performed.  If the 'DECL_INITIAL' is the
!      'error_mark_node', there is an initializer, but it is given by an
       explicit statement later in the code; no bitwise copy is required.
  
       GCC provides an extension that allows either automatic variables,
       or global variables, to be placed in particular registers.  This
!      extension is being used for a particular 'VAR_DECL' if
!      'DECL_REGISTER' holds for the 'VAR_DECL', and if
!      'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'.  In that case,
!      'DECL_ASSEMBLER_NAME' is the name of the register into which the
       variable will be placed.
  
! 'PARM_DECL'
       Used to represent a parameter to a function.  Treat these nodes
!      similarly to 'VAR_DECL' nodes.  These nodes only appear in the
!      'DECL_ARGUMENTS' for a 'FUNCTION_DECL'.
  
!      The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will
       actually be used when a value is passed to this function.  It may
!      be a wider type than the 'TREE_TYPE' of the parameter; for example,
!      the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is
!      'int'.
  
! 'DEBUG_EXPR_DECL'
       Used to represent an anonymous debug-information temporary created
       to hold an expression as it is optimized away, so that its value
       can be referenced in debug bind statements.
  
! 'FIELD_DECL'
!      These nodes represent non-static data members.  The 'DECL_SIZE' and
!      'DECL_ALIGN' behave as for 'VAR_DECL' nodes.  The position of the
       field within the parent record is specified by a combination of
!      three attributes.  'DECL_FIELD_OFFSET' is the position, counting in
!      bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit
       of the field closest to the beginning of the structure.
!      'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
       field within this word; this may be nonzero even for fields that
!      are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than
       the natural alignment of the field's type.
  
!      If 'DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
!      bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was
       originally specified for it, while DECL_TYPE may be a modified type
       with lesser precision, according to the size of the bit field.
  
! 'NAMESPACE_DECL'
       Namespaces provide a name hierarchy for other declarations.  They
!      appear in the 'DECL_CONTEXT' of other '_DECL' nodes.
  
  
  File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
--- 10942,11064 ----
  --------------------------------
  
  Some macros can be used with any kind of declaration.  These include:
! ‘DECL_NAME’
!      This macro returns an ‘IDENTIFIER_NODE’ giving the name of the
       entity.
  
! ‘TREE_TYPE’
       This macro returns the type of the entity declared.
  
! ‘EXPR_FILENAME’
       This macro returns the name of the file in which the entity was
!      declared, as a ‘char*’.  For an entity declared implicitly by the
!      compiler (like ‘__builtin_memcpy’), this will be the string
!      ‘"<internal>"’.
  
! ‘EXPR_LINENO’
       This macro returns the line number at which the entity was
!      declared, as an ‘int’.
  
! ‘DECL_ARTIFICIAL’
       This predicate holds if the declaration was implicitly generated by
       the compiler.  For example, this predicate will hold of an
!      implicitly declared member function, or of the ‘TYPE_DECL’
       implicitly generated for a class type.  Recall that in C++ code
       like:
            struct S {};
       is roughly equivalent to C code like:
            struct S {};
            typedef struct S S;
!      The implicitly generated ‘typedef’ declaration is represented by a
!      ‘TYPE_DECL’ for which ‘DECL_ARTIFICIAL’ holds.
  
   The various kinds of declarations include:
! ‘LABEL_DECL’
       These nodes are used to represent labels in function bodies.  For
       more information, see *note Functions::.  These nodes only appear
       in block scopes.
  
! ‘CONST_DECL’
       These nodes are used to represent enumeration constants.  The value
!      of the constant is given by ‘DECL_INITIAL’ which will be an
!      ‘INTEGER_CST’ with the same type as the ‘TREE_TYPE’ of the
!      ‘CONST_DECL’, i.e., an ‘ENUMERAL_TYPE’.
  
! ‘RESULT_DECL’
       These nodes represent the value returned by a function.  When a
!      value is assigned to a ‘RESULT_DECL’, that indicates that the value
       should be returned, via bitwise copy, by the function.  You can use
!      ‘DECL_SIZE’ and ‘DECL_ALIGN’ on a ‘RESULT_DECL’, just as with a
!      ‘VAR_DECL’.
  
! ‘TYPE_DECL’
!      These nodes represent ‘typedef’ declarations.  The ‘TREE_TYPE’ is
!      the type declared to have the name given by ‘DECL_NAME’.  In some
       cases, there is no associated name.
  
! ‘VAR_DECL’
       These nodes represent variables with namespace or block scope, as
!      well as static data members.  The ‘DECL_SIZE’ and ‘DECL_ALIGN’ are
!      analogous to ‘TYPE_SIZE’ and ‘TYPE_ALIGN’.  For a declaration, you
!      should always use the ‘DECL_SIZE’ and ‘DECL_ALIGN’ rather than the
!      ‘TYPE_SIZE’ and ‘TYPE_ALIGN’ given by the ‘TREE_TYPE’, since
       special attributes may have been applied to the variable to give it
       a particular size and alignment.  You may use the predicates
!      ‘DECL_THIS_STATIC’ or ‘DECL_THIS_EXTERN’ to test whether the
!      storage class specifiers ‘static’ or ‘extern’ were used to declare
       a variable.
  
       If this variable is initialized (but does not require a
!      constructor), the ‘DECL_INITIAL’ will be an expression for the
       initializer.  The initializer should be evaluated, and a bitwise
!      copy into the variable performed.  If the ‘DECL_INITIAL’ is the
!      ‘error_mark_node’, there is an initializer, but it is given by an
       explicit statement later in the code; no bitwise copy is required.
  
       GCC provides an extension that allows either automatic variables,
       or global variables, to be placed in particular registers.  This
!      extension is being used for a particular ‘VAR_DECL’ if
!      ‘DECL_REGISTER’ holds for the ‘VAR_DECL’, and if
!      ‘DECL_ASSEMBLER_NAME’ is not equal to ‘DECL_NAME’.  In that case,
!      ‘DECL_ASSEMBLER_NAME’ is the name of the register into which the
       variable will be placed.
  
! ‘PARM_DECL’
       Used to represent a parameter to a function.  Treat these nodes
!      similarly to ‘VAR_DECL’ nodes.  These nodes only appear in the
!      ‘DECL_ARGUMENTS’ for a ‘FUNCTION_DECL’.
  
!      The ‘DECL_ARG_TYPE’ for a ‘PARM_DECL’ is the type that will
       actually be used when a value is passed to this function.  It may
!      be a wider type than the ‘TREE_TYPE’ of the parameter; for example,
!      the ordinary type might be ‘short’ while the ‘DECL_ARG_TYPE’ is
!      ‘int’.
  
! ‘DEBUG_EXPR_DECL’
       Used to represent an anonymous debug-information temporary created
       to hold an expression as it is optimized away, so that its value
       can be referenced in debug bind statements.
  
! ‘FIELD_DECL’
!      These nodes represent non-static data members.  The ‘DECL_SIZE’ and
!      ‘DECL_ALIGN’ behave as for ‘VAR_DECL’ nodes.  The position of the
       field within the parent record is specified by a combination of
!      three attributes.  ‘DECL_FIELD_OFFSET’ is the position, counting in
!      bytes, of the ‘DECL_OFFSET_ALIGN’-bit sized word containing the bit
       of the field closest to the beginning of the structure.
!      ‘DECL_FIELD_BIT_OFFSET’ is the bit offset of the first bit of the
       field within this word; this may be nonzero even for fields that
!      are not bit-fields, since ‘DECL_OFFSET_ALIGN’ may be greater than
       the natural alignment of the field's type.
  
!      If ‘DECL_C_BIT_FIELD’ holds, this field is a bit-field.  In a
!      bit-field, ‘DECL_BIT_FIELD_TYPE’ also contains the type that was
       originally specified for it, while DECL_TYPE may be a modified type
       with lesser precision, according to the size of the bit field.
  
! ‘NAMESPACE_DECL’
       Namespaces provide a name hierarchy for other declarations.  They
!      appear in the ‘DECL_CONTEXT’ of other ‘_DECL’ nodes.
  
  
  File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
*************** File: gccint.info,  Node: Internal struc
*** 11064,11070 ****
  11.4.2 Internal structure
  -------------------------
  
! 'DECL' nodes are represented internally as a hierarchy of structures.
  
  * Menu:
  
--- 11066,11072 ----
  11.4.2 Internal structure
  -------------------------
  
! ‘DECL’ nodes are represented internally as a hierarchy of structures.
  
  * Menu:
  
*************** File: gccint.info,  Node: Current struct
*** 11079,11135 ****
  11.4.2.1 Current structure hierarchy
  ....................................
  
! 'struct tree_decl_minimal'
       This is the minimal structure to inherit from in order for common
!      'DECL' macros to work.  The fields it contains are a unique ID,
       source location, context, and name.
  
! 'struct tree_decl_common'
!      This structure inherits from 'struct tree_decl_minimal'.  It
!      contains fields that most 'DECL' nodes need, such as a field to
       store alignment, machine mode, size, and attributes.
  
! 'struct tree_field_decl'
!      This structure inherits from 'struct tree_decl_common'.  It is used
!      to represent 'FIELD_DECL'.
  
! 'struct tree_label_decl'
!      This structure inherits from 'struct tree_decl_common'.  It is used
!      to represent 'LABEL_DECL'.
  
! 'struct tree_translation_unit_decl'
!      This structure inherits from 'struct tree_decl_common'.  It is used
!      to represent 'TRANSLATION_UNIT_DECL'.
  
! 'struct tree_decl_with_rtl'
!      This structure inherits from 'struct tree_decl_common'.  It
       contains a field to store the low-level RTL associated with a
!      'DECL' node.
  
! 'struct tree_result_decl'
!      This structure inherits from 'struct tree_decl_with_rtl'.  It is
!      used to represent 'RESULT_DECL'.
  
! 'struct tree_const_decl'
!      This structure inherits from 'struct tree_decl_with_rtl'.  It is
!      used to represent 'CONST_DECL'.
  
! 'struct tree_parm_decl'
!      This structure inherits from 'struct tree_decl_with_rtl'.  It is
!      used to represent 'PARM_DECL'.
  
! 'struct tree_decl_with_vis'
!      This structure inherits from 'struct tree_decl_with_rtl'.  It
       contains fields necessary to store visibility information, as well
       as a section name and assembler name.
  
! 'struct tree_var_decl'
!      This structure inherits from 'struct tree_decl_with_vis'.  It is
!      used to represent 'VAR_DECL'.
  
! 'struct tree_function_decl'
!      This structure inherits from 'struct tree_decl_with_vis'.  It is
!      used to represent 'FUNCTION_DECL'.
  
  
  File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
--- 11081,11137 ----
  11.4.2.1 Current structure hierarchy
  ....................................
  
! ‘struct tree_decl_minimal’
       This is the minimal structure to inherit from in order for common
!      ‘DECL’ macros to work.  The fields it contains are a unique ID,
       source location, context, and name.
  
! ‘struct tree_decl_common’
!      This structure inherits from ‘struct tree_decl_minimal’.  It
!      contains fields that most ‘DECL’ nodes need, such as a field to
       store alignment, machine mode, size, and attributes.
  
! ‘struct tree_field_decl’
!      This structure inherits from ‘struct tree_decl_common’.  It is used
!      to represent ‘FIELD_DECL’.
  
! ‘struct tree_label_decl’
!      This structure inherits from ‘struct tree_decl_common’.  It is used
!      to represent ‘LABEL_DECL’.
  
! ‘struct tree_translation_unit_decl’
!      This structure inherits from ‘struct tree_decl_common’.  It is used
!      to represent ‘TRANSLATION_UNIT_DECL’.
  
! ‘struct tree_decl_with_rtl’
!      This structure inherits from ‘struct tree_decl_common’.  It
       contains a field to store the low-level RTL associated with a
!      ‘DECL’ node.
  
! ‘struct tree_result_decl’
!      This structure inherits from ‘struct tree_decl_with_rtl’.  It is
!      used to represent ‘RESULT_DECL’.
  
! ‘struct tree_const_decl’
!      This structure inherits from ‘struct tree_decl_with_rtl’.  It is
!      used to represent ‘CONST_DECL’.
  
! ‘struct tree_parm_decl’
!      This structure inherits from ‘struct tree_decl_with_rtl’.  It is
!      used to represent ‘PARM_DECL’.
  
! ‘struct tree_decl_with_vis’
!      This structure inherits from ‘struct tree_decl_with_rtl’.  It
       contains fields necessary to store visibility information, as well
       as a section name and assembler name.
  
! ‘struct tree_var_decl’
!      This structure inherits from ‘struct tree_decl_with_vis’.  It is
!      used to represent ‘VAR_DECL’.
  
! ‘struct tree_function_decl’
!      This structure inherits from ‘struct tree_decl_with_vis’.  It is
!      used to represent ‘FUNCTION_DECL’.
  
  
  File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
*************** File: gccint.info,  Node: Adding new DEC
*** 11137,11151 ****
  11.4.2.2 Adding new DECL node types
  ...................................
  
! Adding a new 'DECL' tree consists of the following steps
  
! Add a new tree code for the 'DECL' node
!      For language specific 'DECL' nodes, there is a '.def' file in each
!      frontend directory where the tree code should be added.  For 'DECL'
       nodes that are part of the middle-end, the code should be added to
!      'tree.def'.
  
! Create a new structure type for the 'DECL' node
       These structures should inherit from one of the existing structures
       in the language hierarchy by using that structure as the first
       member.
--- 11139,11153 ----
  11.4.2.2 Adding new DECL node types
  ...................................
  
! Adding a new ‘DECL’ tree consists of the following steps
  
! Add a new tree code for the ‘DECL’ node
!      For language specific ‘DECL’ nodes, there is a ‘.def’ file in each
!      frontend directory where the tree code should be added.  For ‘DECL’
       nodes that are part of the middle-end, the code should be added to
!      ‘tree.def’.
  
! Create a new structure type for the ‘DECL’ node
       These structures should inherit from one of the existing structures
       in the language hierarchy by using that structure as the first
       member.
*************** Create a new structure type for the 'DEC
*** 11155,11213 ****
               struct tree_decl_with_vis common;
            }
  
!      Would create a structure name 'tree_foo_decl' that inherits from
!      'struct tree_decl_with_vis'.
  
!      For language specific 'DECL' nodes, this new structure type should
!      go in the appropriate '.h' file.  For 'DECL' nodes that are part of
!      the middle-end, the structure type should go in 'tree.h'.
  
  Add a member to the tree structure enumerator for the node
!      For garbage collection and dynamic checking purposes, each 'DECL'
       node structure type is required to have a unique enumerator value
!      specified with it.  For language specific 'DECL' nodes, this new
!      enumerator value should go in the appropriate '.def' file.  For
!      'DECL' nodes that are part of the middle-end, the enumerator values
!      are specified in 'treestruct.def'.
  
! Update 'union tree_node'
       In order to make your new structure type usable, it must be added
!      to 'union tree_node'.  For language specific 'DECL' nodes, a new
!      entry should be added to the appropriate '.h' file of the form
              struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
!      For 'DECL' nodes that are part of the middle-end, the additional
!      member goes directly into 'union tree_node' in 'tree.h'.
  
  Update dynamic checking info
       In order to be able to check whether accessing a named portion of
!      'union tree_node' is legal, and whether a certain 'DECL' node
!      contains one of the enumerated 'DECL' node structures in the
       hierarchy, a simple lookup table is used.  This lookup table needs
       to be kept up to date with the tree structure hierarchy, or else
       checking and containment macros will fail inappropriately.
  
!      For language specific 'DECL' nodes, there is an 'init_ts' function
!      in an appropriate '.c' file, which initializes the lookup table.
!      Code setting up the table for new 'DECL' nodes should be added
!      there.  For each 'DECL' tree code and enumerator value representing
       a member of the inheritance hierarchy, the table should contain 1
       if that tree code inherits (directly or indirectly) from that
!      member.  Thus, a 'FOO_DECL' node derived from 'struct
!      decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up
       as follows
            tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
            tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
            tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
            tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
  
!      For 'DECL' nodes that are part of the middle-end, the setup code
!      goes into 'tree.cc'.
  
  Add macros to access any new fields and flags
  
       Each added field or flag should have a macro that is used to access
       it, that performs appropriate checking to ensure only the right
!      type of 'DECL' nodes access the field.
  
       These macros generally take the following form
            #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
--- 11157,11215 ----
               struct tree_decl_with_vis common;
            }
  
!      Would create a structure name ‘tree_foo_decl’ that inherits from
!      ‘struct tree_decl_with_vis’.
  
!      For language specific ‘DECL’ nodes, this new structure type should
!      go in the appropriate ‘.h’ file.  For ‘DECL’ nodes that are part of
!      the middle-end, the structure type should go in ‘tree.h’.
  
  Add a member to the tree structure enumerator for the node
!      For garbage collection and dynamic checking purposes, each ‘DECL’
       node structure type is required to have a unique enumerator value
!      specified with it.  For language specific ‘DECL’ nodes, this new
!      enumerator value should go in the appropriate ‘.def’ file.  For
!      ‘DECL’ nodes that are part of the middle-end, the enumerator values
!      are specified in ‘treestruct.def’.
  
! Update ‘union tree_node’
       In order to make your new structure type usable, it must be added
!      to ‘union tree_node’.  For language specific ‘DECL’ nodes, a new
!      entry should be added to the appropriate ‘.h’ file of the form
              struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
!      For ‘DECL’ nodes that are part of the middle-end, the additional
!      member goes directly into ‘union tree_node’ in ‘tree.h’.
  
  Update dynamic checking info
       In order to be able to check whether accessing a named portion of
!      ‘union tree_node’ is legal, and whether a certain ‘DECL’ node
!      contains one of the enumerated ‘DECL’ node structures in the
       hierarchy, a simple lookup table is used.  This lookup table needs
       to be kept up to date with the tree structure hierarchy, or else
       checking and containment macros will fail inappropriately.
  
!      For language specific ‘DECL’ nodes, there is an ‘init_ts’ function
!      in an appropriate ‘.c’ file, which initializes the lookup table.
!      Code setting up the table for new ‘DECL’ nodes should be added
!      there.  For each ‘DECL’ tree code and enumerator value representing
       a member of the inheritance hierarchy, the table should contain 1
       if that tree code inherits (directly or indirectly) from that
!      member.  Thus, a ‘FOO_DECL’ node derived from ‘struct
!      decl_with_rtl’, and enumerator value ‘TS_FOO_DECL’, would be set up
       as follows
            tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
            tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
            tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
            tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
  
!      For ‘DECL’ nodes that are part of the middle-end, the setup code
!      goes into ‘tree.cc’.
  
  Add macros to access any new fields and flags
  
       Each added field or flag should have a macro that is used to access
       it, that performs appropriate checking to ensure only the right
!      type of ‘DECL’ nodes access the field.
  
       These macros generally take the following form
            #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
*************** Add macros to access any new fields and
*** 11217,11225 ****
            #define BASE_STRUCT_FIELDNAME(NODE) \
               (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
  
!      Reading them from the generated 'all-tree.def' file (which in turn
!      includes all the 'tree.def' files), 'gencheck.cc' is used during
!      GCC's build to generate the '*_CHECK' macros for all tree codes.
  
  
  File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
--- 11219,11227 ----
            #define BASE_STRUCT_FIELDNAME(NODE) \
               (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
  
!      Reading them from the generated ‘all-tree.def’ file (which in turn
!      includes all the ‘tree.def’ files), ‘gencheck.cc’ is used during
!      GCC's build to generate the ‘*_CHECK’ macros for all tree codes.
  
  
  File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
*************** File: gccint.info,  Node: Attributes,  N
*** 11227,11240 ****
  11.5 Attributes in trees
  ========================
  
! Attributes, as specified using the '__attribute__' keyword, are
! represented internally as a 'TREE_LIST'.  The 'TREE_PURPOSE' is the name
! of the attribute, as an 'IDENTIFIER_NODE'.  The 'TREE_VALUE' is a
! 'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if
! there are no arguments; the arguments are stored as the 'TREE_VALUE' of
  successive entries in the list, and may be identifiers or expressions.
! The 'TREE_CHAIN' of the attribute is the next attribute in a list of
! attributes applying to the same declaration or type, or 'NULL_TREE' if
  there are no further attributes in the list.
  
   Attributes may be attached to declarations and to types; these
--- 11229,11242 ----
  11.5 Attributes in trees
  ========================
  
! Attributes, as specified using the ‘__attribute__’ keyword, are
! represented internally as a ‘TREE_LIST’.  The ‘TREE_PURPOSE’ is the name
! of the attribute, as an ‘IDENTIFIER_NODE’.  The ‘TREE_VALUE’ is a
! ‘TREE_LIST’ of the arguments of the attribute, if any, or ‘NULL_TREE’ if
! there are no arguments; the arguments are stored as the ‘TREE_VALUE’ of
  successive entries in the list, and may be identifiers or expressions.
! The ‘TREE_CHAIN’ of the attribute is the next attribute in a list of
! attributes applying to the same declaration or type, or ‘NULL_TREE’ if
  there are no further attributes in the list.
  
   Attributes may be attached to declarations and to types; these
*************** of nodes being unshared.
*** 11265,11277 ****
  
   The following macros can be used with all expression nodes:
  
! 'TREE_TYPE'
       Returns the type of the expression.  This value may not be
       precisely the same type that would be given the expression in the
       original program.
  
   In what follows, some nodes that one might expect to always have type
! 'bool' are documented to have either integral or boolean type.  At some
  point in the future, the C front end may also make use of this same
  intermediate representation, and at this point these nodes will
  certainly have integral type.  The previous sentence is not meant to
--- 11267,11279 ----
  
   The following macros can be used with all expression nodes:
  
! ‘TREE_TYPE’
       Returns the type of the expression.  This value may not be
       precisely the same type that would be given the expression in the
       original program.
  
   In what follows, some nodes that one might expect to always have type
! ‘bool’ are documented to have either integral or boolean type.  At some
  point in the future, the C front end may also make use of this same
  intermediate representation, and at this point these nodes will
  certainly have integral type.  The previous sentence is not meant to
*************** integral type.
*** 11280,11287 ****
  
   Below, we list the various kinds of expression nodes.  Except where
  noted otherwise, the operands to an expression are accessed using the
! 'TREE_OPERAND' macro.  For example, to access the first operand to a
! binary plus expression 'expr', use:
  
       TREE_OPERAND (expr, 0)
  
--- 11282,11289 ----
  
   Below, we list the various kinds of expression nodes.  Except where
  noted otherwise, the operands to an expression are accessed using the
! ‘TREE_OPERAND’ macro.  For example, to access the first operand to a
! binary plus expression ‘expr’, use:
  
       TREE_OPERAND (expr, 0)
  
*************** The table below begins with constants, m
*** 11304,11350 ****
  then proceeds to binary expressions, and concludes with various other
  kinds of expressions:
  
! 'INTEGER_CST'
       These nodes represent integer constants.  Note that the type of
!      these constants is obtained with 'TREE_TYPE'; they are not always
!      of type 'int'.  In particular, 'char' constants are represented
!      with 'INTEGER_CST' nodes.  The value of the integer constant 'e' is
       represented in an array of HOST_WIDE_INT. There are enough elements
       in the array to represent the value without taking extra elements
       for redundant 0s or -1.  The number of elements used to represent
!      'e' is available via 'TREE_INT_CST_NUNITS'.  Element 'i' can be
!      extracted by using 'TREE_INT_CST_ELT (e, i)'.  'TREE_INT_CST_LOW'
!      is a shorthand for 'TREE_INT_CST_ELT (e, 0)'.
  
!      The functions 'tree_fits_shwi_p' and 'tree_fits_uhwi_p' can be used
       to tell if the value is small enough to fit in a signed
       HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively.  The value
!      can then be extracted using 'tree_to_shwi' and 'tree_to_uhwi'.
  
! 'REAL_CST'
  
       FIXME: Talk about how to obtain representations of this constant,
       do comparisons, and so forth.
  
! 'FIXED_CST'
  
       These nodes represent fixed-point constants.  The type of these
!      constants is obtained with 'TREE_TYPE'.  'TREE_FIXED_CST_PTR'
!      points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the
!      structure itself.  'struct fixed_value' contains 'data' with the
!      size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated
!      fixed-point machine mode for 'data'.
  
! 'COMPLEX_CST'
       These nodes are used to represent complex number constants, that is
!      a '__complex__' whose parts are constant nodes.  The
!      'TREE_REALPART' and 'TREE_IMAGPART' return the real and the
       imaginary parts respectively.
  
! 'VECTOR_CST'
       These nodes are used to represent vector constants.  Each vector
       constant V is treated as a specific instance of an arbitrary-length
!      sequence that itself contains 'VECTOR_CST_NPATTERNS (V)'
       interleaved patterns.  Each pattern has the form:
  
            { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... }
--- 11306,11352 ----
  then proceeds to binary expressions, and concludes with various other
  kinds of expressions:
  
! ‘INTEGER_CST’
       These nodes represent integer constants.  Note that the type of
!      these constants is obtained with ‘TREE_TYPE’; they are not always
!      of type ‘int’.  In particular, ‘char’ constants are represented
!      with ‘INTEGER_CST’ nodes.  The value of the integer constant ‘e’ is
       represented in an array of HOST_WIDE_INT. There are enough elements
       in the array to represent the value without taking extra elements
       for redundant 0s or -1.  The number of elements used to represent
!      ‘e’ is available via ‘TREE_INT_CST_NUNITS’.  Element ‘i’ can be
!      extracted by using ‘TREE_INT_CST_ELT (e, i)’.  ‘TREE_INT_CST_LOW’
!      is a shorthand for ‘TREE_INT_CST_ELT (e, 0)’.
  
!      The functions ‘tree_fits_shwi_p’ and ‘tree_fits_uhwi_p’ can be used
       to tell if the value is small enough to fit in a signed
       HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively.  The value
!      can then be extracted using ‘tree_to_shwi’ and ‘tree_to_uhwi’.
  
! ‘REAL_CST’
  
       FIXME: Talk about how to obtain representations of this constant,
       do comparisons, and so forth.
  
! ‘FIXED_CST’
  
       These nodes represent fixed-point constants.  The type of these
!      constants is obtained with ‘TREE_TYPE’.  ‘TREE_FIXED_CST_PTR’
!      points to a ‘struct fixed_value’; ‘TREE_FIXED_CST’ returns the
!      structure itself.  ‘struct fixed_value’ contains ‘data’ with the
!      size of two ‘HOST_BITS_PER_WIDE_INT’ and ‘mode’ as the associated
!      fixed-point machine mode for ‘data’.
  
! ‘COMPLEX_CST’
       These nodes are used to represent complex number constants, that is
!      a ‘__complex__’ whose parts are constant nodes.  The
!      ‘TREE_REALPART’ and ‘TREE_IMAGPART’ return the real and the
       imaginary parts respectively.
  
! ‘VECTOR_CST’
       These nodes are used to represent vector constants.  Each vector
       constant V is treated as a specific instance of an arbitrary-length
!      sequence that itself contains ‘VECTOR_CST_NPATTERNS (V)’
       interleaved patterns.  Each pattern has the form:
  
            { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... }
*************** kinds of expressions:
*** 11354,11360 ****
       only the first two elements are needed.  If in addition each BASE1
       is equal to the corresponding BASE0, only the first element in each
       pattern is needed.  The number of encoded elements per pattern is
!      given by 'VECTOR_CST_NELTS_PER_PATTERN (V)'.
  
       For example, the constant:
  
--- 11356,11362 ----
       only the first two elements are needed.  If in addition each BASE1
       is equal to the corresponding BASE0, only the first element in each
       pattern is needed.  The number of encoded elements per pattern is
!      given by ‘VECTOR_CST_NELTS_PER_PATTERN (V)’.
  
       For example, the constant:
  
*************** kinds of expressions:
*** 11375,11382 ****
            VECTOR_CST_NPATTERNS (V) == 2
            VECTOR_CST_NELTS_PER_PATTERN (V) == 3
  
!      The vector is therefore encoded using the first 6 elements ('{ 0,
!      1, 2, 6, 3, 8 }'), with the remaining 10 elements being implicit
       extensions of them.
  
       Sometimes this scheme can create two possible encodings of the same
--- 11377,11384 ----
            VECTOR_CST_NPATTERNS (V) == 2
            VECTOR_CST_NELTS_PER_PATTERN (V) == 3
  
!      The vector is therefore encoded using the first 6 elements (‘{ 0,
!      1, 2, 6, 3, 8 }’), with the remaining 10 elements being implicit
       extensions of them.
  
       Sometimes this scheme can create two possible encodings of the same
*************** kinds of expressions:
*** 11386,11437 ****
       patterns or (if both encodings have the same number of patterns)
       the one with the fewest encoded elements.
  
!      'vector_cst_encoding_nelts (V)' gives the total number of encoded
       elements in V, which is 6 in the example above.
!      'VECTOR_CST_ENCODED_ELTS (V)' gives a pointer to the elements
!      encoded in V and 'VECTOR_CST_ENCODED_ELT (V, I)' accesses the value
       of encoded element I.
  
!      'VECTOR_CST_DUPLICATE_P (V)' is true if V simply contains repeated
!      instances of 'VECTOR_CST_NPATTERNS (V)' values.  This is a
!      shorthand for testing 'VECTOR_CST_NELTS_PER_PATTERN (V) == 1'.
  
!      'VECTOR_CST_STEPPED_P (V)' is true if at least one pattern in V has
       a nonzero step.  This is a shorthand for testing
!      'VECTOR_CST_NELTS_PER_PATTERN (V) == 3'.
  
!      The utility function 'vector_cst_elt' gives the value of an
!      arbitrary index as a 'tree'.  'vector_cst_int_elt' gives the same
!      value as a 'wide_int'.
  
! 'STRING_CST'
!      These nodes represent string-constants.  The 'TREE_STRING_LENGTH'
!      returns the length of the string, as an 'int'.  The
!      'TREE_STRING_POINTER' is a 'char*' containing the string itself.
!      The string may not be 'NUL'-terminated, and it may contain embedded
!      'NUL' characters.  Therefore, the 'TREE_STRING_LENGTH' includes the
!      trailing 'NUL' if it is present.
  
!      For wide string constants, the 'TREE_STRING_LENGTH' is the number
!      of bytes in the string, and the 'TREE_STRING_POINTER' points to an
       array of the bytes of the string, as represented on the target
       system (that is, as integers in the target endianness).  Wide and
!      non-wide string constants are distinguished only by the 'TREE_TYPE'
!      of the 'STRING_CST'.
  
       FIXME: The formats of string constants are not well-defined when
       the target system bytes are not the same width as host system
       bytes.
  
! 'POLY_INT_CST'
       These nodes represent invariants that depend on some
       target-specific runtime parameters.  They consist of
!      'NUM_POLY_INT_COEFFS' coefficients, with the first coefficient
       being the constant term and the others being multipliers that are
       applied to the runtime parameters.
  
!      'POLY_INT_CST_ELT (X, I)' references coefficient number I of
!      'POLY_INT_CST' node X.  Each coefficient is an 'INTEGER_CST'.
  
  
  File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
--- 11388,11439 ----
       patterns or (if both encodings have the same number of patterns)
       the one with the fewest encoded elements.
  
!      ‘vector_cst_encoding_nelts (V)’ gives the total number of encoded
       elements in V, which is 6 in the example above.
!      ‘VECTOR_CST_ENCODED_ELTS (V)’ gives a pointer to the elements
!      encoded in V and ‘VECTOR_CST_ENCODED_ELT (V, I)’ accesses the value
       of encoded element I.
  
!      ‘VECTOR_CST_DUPLICATE_P (V)’ is true if V simply contains repeated
!      instances of ‘VECTOR_CST_NPATTERNS (V)’ values.  This is a
!      shorthand for testing ‘VECTOR_CST_NELTS_PER_PATTERN (V) == 1’.
  
!      ‘VECTOR_CST_STEPPED_P (V)’ is true if at least one pattern in V has
       a nonzero step.  This is a shorthand for testing
!      ‘VECTOR_CST_NELTS_PER_PATTERN (V) == 3’.
  
!      The utility function ‘vector_cst_elt’ gives the value of an
!      arbitrary index as a ‘tree’.  ‘vector_cst_int_elt’ gives the same
!      value as a ‘wide_int’.
  
! ‘STRING_CST’
!      These nodes represent string-constants.  The ‘TREE_STRING_LENGTH’
!      returns the length of the string, as an ‘int’.  The
!      ‘TREE_STRING_POINTER’ is a ‘char*’ containing the string itself.
!      The string may not be ‘NUL’-terminated, and it may contain embedded
!      ‘NUL’ characters.  Therefore, the ‘TREE_STRING_LENGTH’ includes the
!      trailing ‘NUL’ if it is present.
  
!      For wide string constants, the ‘TREE_STRING_LENGTH’ is the number
!      of bytes in the string, and the ‘TREE_STRING_POINTER’ points to an
       array of the bytes of the string, as represented on the target
       system (that is, as integers in the target endianness).  Wide and
!      non-wide string constants are distinguished only by the ‘TREE_TYPE’
!      of the ‘STRING_CST’.
  
       FIXME: The formats of string constants are not well-defined when
       the target system bytes are not the same width as host system
       bytes.
  
! ‘POLY_INT_CST’
       These nodes represent invariants that depend on some
       target-specific runtime parameters.  They consist of
!      ‘NUM_POLY_INT_COEFFS’ coefficients, with the first coefficient
       being the constant term and the others being multipliers that are
       applied to the runtime parameters.
  
!      ‘POLY_INT_CST_ELT (X, I)’ references coefficient number I of
!      ‘POLY_INT_CST’ node X.  Each coefficient is an ‘INTEGER_CST’.
  
  
  File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
*************** File: gccint.info,  Node: Storage Refere
*** 11439,11445 ****
  11.6.2 References to storage
  ----------------------------
  
! 'ARRAY_REF'
       These nodes represent array accesses.  The first operand is the
       array; the second is the index.  To calculate the address of the
       memory accessed, you must scale the index by the size of the type
--- 11441,11447 ----
  11.6.2 References to storage
  ----------------------------
  
! ‘ARRAY_REF’
       These nodes represent array accesses.  The first operand is the
       array; the second is the index.  To calculate the address of the
       memory accessed, you must scale the index by the size of the type
*************** File: gccint.info,  Node: Storage Refere
*** 11447,11487 ****
       type of a component of the array.  The third and fourth operands
       are used after gimplification to represent the lower bound and
       component size but should not be used directly; call
!      'array_ref_low_bound' and 'array_ref_element_size' instead.
  
! 'ARRAY_RANGE_REF'
       These nodes represent access to a range (or "slice") of an array.
!      The operands are the same as that for 'ARRAY_REF' and have the same
       meanings.  The type of these expressions must be an array whose
       component type is the same as that of the first operand.  The range
       of that array type determines the amount of data these expressions
       access.
  
! 'COMPONENT_REF'
       These nodes represent non-static data member accesses.  The first
       operand is the object (rather than a pointer to it); the second
!      operand is the 'FIELD_DECL' for the data member.  The third operand
       represents the byte offset of the field, but should not be used
!      directly; call 'component_ref_field_offset' instead.
  
! 'ADDR_EXPR'
       These nodes are used to represent the address of an object.  (These
       expressions will always have pointer or reference type.)  The
       operand may be another expression, or it may be a declaration.
  
       As an extension, GCC allows users to take the address of a label.
!      In this case, the operand of the 'ADDR_EXPR' will be a
!      'LABEL_DECL'.  The type of such an expression is 'void*'.
  
       If the object addressed is not an lvalue, a temporary is created,
       and the address of the temporary is used.
  
! 'INDIRECT_REF'
       These nodes are used to represent the object pointed to by a
       pointer.  The operand is the pointer being dereferenced; it will
       always have pointer or reference type.
  
! 'MEM_REF'
       These nodes are used to represent the object pointed to by a
       pointer offset by a constant.  The first operand is the pointer
       being dereferenced; it will always have pointer or reference type.
--- 11449,11489 ----
       type of a component of the array.  The third and fourth operands
       are used after gimplification to represent the lower bound and
       component size but should not be used directly; call
!      ‘array_ref_low_bound’ and ‘array_ref_element_size’ instead.
  
! ‘ARRAY_RANGE_REF’
       These nodes represent access to a range (or "slice") of an array.
!      The operands are the same as that for ‘ARRAY_REF’ and have the same
       meanings.  The type of these expressions must be an array whose
       component type is the same as that of the first operand.  The range
       of that array type determines the amount of data these expressions
       access.
  
! ‘COMPONENT_REF’
       These nodes represent non-static data member accesses.  The first
       operand is the object (rather than a pointer to it); the second
!      operand is the ‘FIELD_DECL’ for the data member.  The third operand
       represents the byte offset of the field, but should not be used
!      directly; call ‘component_ref_field_offset’ instead.
  
! ‘ADDR_EXPR’
       These nodes are used to represent the address of an object.  (These
       expressions will always have pointer or reference type.)  The
       operand may be another expression, or it may be a declaration.
  
       As an extension, GCC allows users to take the address of a label.
!      In this case, the operand of the ‘ADDR_EXPR’ will be a
!      ‘LABEL_DECL’.  The type of such an expression is ‘void*’.
  
       If the object addressed is not an lvalue, a temporary is created,
       and the address of the temporary is used.
  
! ‘INDIRECT_REF’
       These nodes are used to represent the object pointed to by a
       pointer.  The operand is the pointer being dereferenced; it will
       always have pointer or reference type.
  
! ‘MEM_REF’
       These nodes are used to represent the object pointed to by a
       pointer offset by a constant.  The first operand is the pointer
       being dereferenced; it will always have pointer or reference type.
*************** File: gccint.info,  Node: Storage Refere
*** 11490,11510 ****
       the type to be used for type-based alias analysis.  The type of the
       node specifies the alignment of the access.
  
! 'TARGET_MEM_REF'
       These nodes represent memory accesses whose address directly map to
       an addressing mode of the target architecture.  The first argument
!      is 'TMR_BASE' and is a pointer to the object being accessed.  The
!      second argument is 'TMR_OFFSET' which is a pointer constant with
       dual purpose serving both as constant offset and holder of the type
       used for type-based alias analysis.  The first two operands have
!      exactly the same semantics as 'MEM_REF'.  The third and fourth
!      operand are 'TMR_INDEX' and 'TMR_STEP' where the former is an
       integer and the latter an integer constant.  The fifth and last
!      operand is 'TMR_INDEX2' which is an alternate non-constant offset.
!      Any of the third to last operands may be 'NULL' if the
       corresponding component does not appear in the address, but
!      'TMR_INDEX' and 'TMR_STEP' shall be always supplied in pair.  The
!      Address of the 'TARGET_MEM_REF' is determined in the following way.
  
            TMR_BASE + TMR_OFFSET + TMR_INDEX * TMR_STEP + TMR_INDEX2
  
--- 11492,11512 ----
       the type to be used for type-based alias analysis.  The type of the
       node specifies the alignment of the access.
  
! ‘TARGET_MEM_REF’
       These nodes represent memory accesses whose address directly map to
       an addressing mode of the target architecture.  The first argument
!      is ‘TMR_BASE’ and is a pointer to the object being accessed.  The
!      second argument is ‘TMR_OFFSET’ which is a pointer constant with
       dual purpose serving both as constant offset and holder of the type
       used for type-based alias analysis.  The first two operands have
!      exactly the same semantics as ‘MEM_REF’.  The third and fourth
!      operand are ‘TMR_INDEX’ and ‘TMR_STEP’ where the former is an
       integer and the latter an integer constant.  The fifth and last
!      operand is ‘TMR_INDEX2’ which is an alternate non-constant offset.
!      Any of the third to last operands may be ‘NULL’ if the
       corresponding component does not appear in the address, but
!      ‘TMR_INDEX’ and ‘TMR_STEP’ shall be always supplied in pair.  The
!      Address of the ‘TARGET_MEM_REF’ is determined in the following way.
  
            TMR_BASE + TMR_OFFSET + TMR_INDEX * TMR_STEP + TMR_INDEX2
  
*************** File: gccint.info,  Node: Unary and Bina
*** 11516,11625 ****
  11.6.3 Unary and Binary Expressions
  -----------------------------------
  
! 'NEGATE_EXPR'
       These nodes represent unary negation of the single operand, for
       both integer and floating-point types.  The type of negation can be
       determined by looking at the type of the expression.
  
       The behavior of this operation on signed arithmetic overflow is
!      controlled by the 'flag_wrapv' and 'flag_trapv' variables.
  
! 'ABS_EXPR'
       These nodes represent the absolute value of the single operand, for
       both integer and floating-point types.  This is typically used to
!      implement the 'abs', 'labs' and 'llabs' builtins for integer types,
!      and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point
       types.  The type of abs operation can be determined by looking at
       the type of the expression.
  
       This node is not used for complex types.  To represent the modulus
!      or complex abs of a complex value, use the 'BUILT_IN_CABS',
!      'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement
!      the C99 'cabs', 'cabsf' and 'cabsl' built-in functions.
  
! 'ABSU_EXPR'
       These nodes represent the absolute value of the single operand in
!      equivalent unsigned type such that 'ABSU_EXPR' of 'TYPE_MIN' is
       well defined.
  
! 'BIT_NOT_EXPR'
       These nodes represent bitwise complement, and will always have
       integral type.  The only operand is the value to be complemented.
  
! 'TRUTH_NOT_EXPR'
       These nodes represent logical negation, and will always have
       integral (or boolean) type.  The operand is the value being
       negated.  The type of the operand and that of the result are always
!      of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.
  
! 'PREDECREMENT_EXPR'
! 'PREINCREMENT_EXPR'
! 'POSTDECREMENT_EXPR'
! 'POSTINCREMENT_EXPR'
       These nodes represent increment and decrement expressions.  The
       value of the single operand is computed, and the operand
!      incremented or decremented.  In the case of 'PREDECREMENT_EXPR' and
!      'PREINCREMENT_EXPR', the value of the expression is the value
       resulting after the increment or decrement; in the case of
!      'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before
       the increment or decrement occurs.  The type of the operand, like
       that of the result, will be either integral, boolean, or
       floating-point.
  
! 'FIX_TRUNC_EXPR'
       These nodes represent conversion of a floating-point value to an
       integer.  The single operand will have a floating-point type, while
       the complete expression will have an integral (or boolean) type.
       The operand is rounded towards zero.
  
! 'FLOAT_EXPR'
       These nodes represent conversion of an integral (or boolean) value
       to a floating-point value.  The single operand will have integral
       type, while the complete expression will have a floating-point
       type.
  
       FIXME: How is the operand supposed to be rounded?  Is this
!      dependent on '-mieee'?
  
! 'COMPLEX_EXPR'
       These nodes are used to represent complex numbers constructed from
       two expressions of the same (integer or real) type.  The first
       operand is the real part and the second operand is the imaginary
       part.
  
! 'CONJ_EXPR'
       These nodes represent the conjugate of their operand.
  
! 'REALPART_EXPR'
! 'IMAGPART_EXPR'
       These nodes represent respectively the real and the imaginary parts
       of complex numbers (their sole argument).
  
! 'NON_LVALUE_EXPR'
       These nodes indicate that their one and only operand is not an
       lvalue.  A back end can treat these identically to the single
       operand.
  
! 'NOP_EXPR'
       These nodes are used to represent conversions that do not require
!      any code-generation.  For example, conversion of a 'char*' to an
!      'int*' does not require any code be generated; such a conversion is
!      represented by a 'NOP_EXPR'.  The single operand is the expression
       to be converted.  The conversion from a pointer to a reference is
!      also represented with a 'NOP_EXPR'.
  
! 'CONVERT_EXPR'
!      These nodes are similar to 'NOP_EXPR's, but are used in those
       situations where code may need to be generated.  For example, if an
!      'int*' is converted to an 'int' code may need to be generated on
       some platforms.  These nodes are never used for C++-specific
       conversions, like conversions between pointers to different classes
       in an inheritance hierarchy.  Any adjustments that need to be made
       in such cases are always indicated explicitly.  Similarly, a
!      user-defined conversion is never represented by a 'CONVERT_EXPR';
       instead, the function calls are made explicit.
  
! 'FIXED_CONVERT_EXPR'
       These nodes are used to represent conversions that involve
       fixed-point values.  For example, from a fixed-point value to
       another fixed-point value, from an integer to a fixed-point value,
--- 11518,11627 ----
  11.6.3 Unary and Binary Expressions
  -----------------------------------
  
! ‘NEGATE_EXPR’
       These nodes represent unary negation of the single operand, for
       both integer and floating-point types.  The type of negation can be
       determined by looking at the type of the expression.
  
       The behavior of this operation on signed arithmetic overflow is
!      controlled by the ‘flag_wrapv’ and ‘flag_trapv’ variables.
  
! ‘ABS_EXPR’
       These nodes represent the absolute value of the single operand, for
       both integer and floating-point types.  This is typically used to
!      implement the ‘abs’, ‘labs’ and ‘llabs’ builtins for integer types,
!      and the ‘fabs’, ‘fabsf’ and ‘fabsl’ builtins for floating point
       types.  The type of abs operation can be determined by looking at
       the type of the expression.
  
       This node is not used for complex types.  To represent the modulus
!      or complex abs of a complex value, use the ‘BUILT_IN_CABS’,
!      ‘BUILT_IN_CABSF’ or ‘BUILT_IN_CABSL’ builtins, as used to implement
!      the C99 ‘cabs’, ‘cabsf’ and ‘cabsl’ built-in functions.
  
! ‘ABSU_EXPR’
       These nodes represent the absolute value of the single operand in
!      equivalent unsigned type such that ‘ABSU_EXPR’ of ‘TYPE_MIN’ is
       well defined.
  
! ‘BIT_NOT_EXPR’
       These nodes represent bitwise complement, and will always have
       integral type.  The only operand is the value to be complemented.
  
! ‘TRUTH_NOT_EXPR’
       These nodes represent logical negation, and will always have
       integral (or boolean) type.  The operand is the value being
       negated.  The type of the operand and that of the result are always
!      of ‘BOOLEAN_TYPE’ or ‘INTEGER_TYPE’.
  
! ‘PREDECREMENT_EXPR’
! ‘PREINCREMENT_EXPR’
! ‘POSTDECREMENT_EXPR’
! ‘POSTINCREMENT_EXPR’
       These nodes represent increment and decrement expressions.  The
       value of the single operand is computed, and the operand
!      incremented or decremented.  In the case of ‘PREDECREMENT_EXPR’ and
!      ‘PREINCREMENT_EXPR’, the value of the expression is the value
       resulting after the increment or decrement; in the case of
!      ‘POSTDECREMENT_EXPR’ and ‘POSTINCREMENT_EXPR’ is the value before
       the increment or decrement occurs.  The type of the operand, like
       that of the result, will be either integral, boolean, or
       floating-point.
  
! ‘FIX_TRUNC_EXPR’
       These nodes represent conversion of a floating-point value to an
       integer.  The single operand will have a floating-point type, while
       the complete expression will have an integral (or boolean) type.
       The operand is rounded towards zero.
  
! ‘FLOAT_EXPR’
       These nodes represent conversion of an integral (or boolean) value
       to a floating-point value.  The single operand will have integral
       type, while the complete expression will have a floating-point
       type.
  
       FIXME: How is the operand supposed to be rounded?  Is this
!      dependent on ‘-mieee’?
  
! ‘COMPLEX_EXPR’
       These nodes are used to represent complex numbers constructed from
       two expressions of the same (integer or real) type.  The first
       operand is the real part and the second operand is the imaginary
       part.
  
! ‘CONJ_EXPR’
       These nodes represent the conjugate of their operand.
  
! ‘REALPART_EXPR’
! ‘IMAGPART_EXPR’
       These nodes represent respectively the real and the imaginary parts
       of complex numbers (their sole argument).
  
! ‘NON_LVALUE_EXPR’
       These nodes indicate that their one and only operand is not an
       lvalue.  A back end can treat these identically to the single
       operand.
  
! ‘NOP_EXPR’
       These nodes are used to represent conversions that do not require
!      any code-generation.  For example, conversion of a ‘char*’ to an
!      ‘int*’ does not require any code be generated; such a conversion is
!      represented by a ‘NOP_EXPR’.  The single operand is the expression
       to be converted.  The conversion from a pointer to a reference is
!      also represented with a ‘NOP_EXPR’.
  
! ‘CONVERT_EXPR’
!      These nodes are similar to ‘NOP_EXPR’s, but are used in those
       situations where code may need to be generated.  For example, if an
!      ‘int*’ is converted to an ‘int’ code may need to be generated on
       some platforms.  These nodes are never used for C++-specific
       conversions, like conversions between pointers to different classes
       in an inheritance hierarchy.  Any adjustments that need to be made
       in such cases are always indicated explicitly.  Similarly, a
!      user-defined conversion is never represented by a ‘CONVERT_EXPR’;
       instead, the function calls are made explicit.
  
! ‘FIXED_CONVERT_EXPR’
       These nodes are used to represent conversions that involve
       fixed-point values.  For example, from a fixed-point value to
       another fixed-point value, from an integer to a fixed-point value,
*************** File: gccint.info,  Node: Unary and Bina
*** 11627,11636 ****
       to a fixed-point value, or from a fixed-point value to a
       floating-point value.
  
! 'LSHIFT_EXPR'
! 'RSHIFT_EXPR'
! 'LROTATE_EXPR'
! 'RROTATE_EXPR'
       These nodes represent left and right shifts and rotates,
       respectively.  The first operand is the value to shift or rotate;
       it will always be of integral type.  The second operand is an
--- 11629,11638 ----
       to a fixed-point value, or from a fixed-point value to a
       floating-point value.
  
! ‘LSHIFT_EXPR’
! ‘RSHIFT_EXPR’
! ‘LROTATE_EXPR’
! ‘RROTATE_EXPR’
       These nodes represent left and right shifts and rotates,
       respectively.  The first operand is the value to shift or rotate;
       it will always be of integral type.  The second operand is an
*************** File: gccint.info,  Node: Unary and Bina
*** 11644,11683 ****
       Unlike most nodes, these can have a vector as first operand and a
       scalar as second operand.
  
! 'BIT_IOR_EXPR'
! 'BIT_XOR_EXPR'
! 'BIT_AND_EXPR'
       These nodes represent bitwise inclusive or, bitwise exclusive or,
       and bitwise and, respectively.  Both operands will always have
       integral type.
  
! 'TRUTH_ANDIF_EXPR'
! 'TRUTH_ORIF_EXPR'
       These nodes represent logical "and" and logical "or", respectively.
       These operators are not strict; i.e., the second operand is
       evaluated only if the value of the expression is not determined by
       evaluation of the first operand.  The type of the operands and that
!      of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.
  
! 'TRUTH_AND_EXPR'
! 'TRUTH_OR_EXPR'
! 'TRUTH_XOR_EXPR'
       These nodes represent logical and, logical or, and logical
       exclusive or.  They are strict; both arguments are always
       evaluated.  There are no corresponding operators in C or C++, but
       the front end will sometimes generate these expressions anyhow, if
       it can tell that strictness does not matter.  The type of the
!      operands and that of the result are always of 'BOOLEAN_TYPE' or
!      'INTEGER_TYPE'.
  
! 'POINTER_PLUS_EXPR'
       This node represents pointer arithmetic.  The first operand is
       always a pointer/reference type.  The second operand is always an
       unsigned integer type compatible with sizetype.  This and
       POINTER_DIFF_EXPR are the only binary arithmetic operators that can
       operate on pointer types.
  
! 'POINTER_DIFF_EXPR'
       This node represents pointer subtraction.  The two operands always
       have pointer/reference type.  It returns a signed integer of the
       same precision as the pointers.  The behavior is undefined if the
--- 11646,11685 ----
       Unlike most nodes, these can have a vector as first operand and a
       scalar as second operand.
  
! ‘BIT_IOR_EXPR’
! ‘BIT_XOR_EXPR’
! ‘BIT_AND_EXPR’
       These nodes represent bitwise inclusive or, bitwise exclusive or,
       and bitwise and, respectively.  Both operands will always have
       integral type.
  
! ‘TRUTH_ANDIF_EXPR’
! ‘TRUTH_ORIF_EXPR’
       These nodes represent logical "and" and logical "or", respectively.
       These operators are not strict; i.e., the second operand is
       evaluated only if the value of the expression is not determined by
       evaluation of the first operand.  The type of the operands and that
!      of the result are always of ‘BOOLEAN_TYPE’ or ‘INTEGER_TYPE’.
  
! ‘TRUTH_AND_EXPR’
! ‘TRUTH_OR_EXPR’
! ‘TRUTH_XOR_EXPR’
       These nodes represent logical and, logical or, and logical
       exclusive or.  They are strict; both arguments are always
       evaluated.  There are no corresponding operators in C or C++, but
       the front end will sometimes generate these expressions anyhow, if
       it can tell that strictness does not matter.  The type of the
!      operands and that of the result are always of ‘BOOLEAN_TYPE’ or
!      ‘INTEGER_TYPE’.
  
! ‘POINTER_PLUS_EXPR’
       This node represents pointer arithmetic.  The first operand is
       always a pointer/reference type.  The second operand is always an
       unsigned integer type compatible with sizetype.  This and
       POINTER_DIFF_EXPR are the only binary arithmetic operators that can
       operate on pointer types.
  
! ‘POINTER_DIFF_EXPR’
       This node represents pointer subtraction.  The two operands always
       have pointer/reference type.  It returns a signed integer of the
       same precision as the pointers.  The behavior is undefined if the
*************** File: gccint.info,  Node: Unary and Bina
*** 11686,11694 ****
       does not depend on the pointer type, it is not divided by the size
       of the pointed-to type.
  
! 'PLUS_EXPR'
! 'MINUS_EXPR'
! 'MULT_EXPR'
       These nodes represent various binary arithmetic operations.
       Respectively, these operations are addition, subtraction (of the
       second operand from the first) and multiplication.  Their operands
--- 11688,11696 ----
       does not depend on the pointer type, it is not divided by the size
       of the pointed-to type.
  
! ‘PLUS_EXPR’
! ‘MINUS_EXPR’
! ‘MULT_EXPR’
       These nodes represent various binary arithmetic operations.
       Respectively, these operations are addition, subtraction (of the
       second operand from the first) and multiplication.  Their operands
*************** File: gccint.info,  Node: Unary and Bina
*** 11697,11761 ****
       integral type.
  
       The behavior of these operations on signed arithmetic overflow is
!      controlled by the 'flag_wrapv' and 'flag_trapv' variables.
  
! 'WIDEN_MULT_EXPR'
       This node represents a widening multiplication.  The operands have
       integral types with same B bits of precision, producing an integral
       type result with at least 2B bits of precision.  The behaviour is
       equivalent to extending both operands, possibly of different
       signedness, to the result type, then multiplying them.
  
! 'MULT_HIGHPART_EXPR'
       This node represents the "high-part" of a widening multiplication.
       For an integral type with B bits of precision, the result is the
       most significant B bits of the full 2B product.  Both operands must
       have the same precision and same signedness.
  
! 'RDIV_EXPR'
       This node represents a floating point division operation.
  
! 'TRUNC_DIV_EXPR'
! 'FLOOR_DIV_EXPR'
! 'CEIL_DIV_EXPR'
! 'ROUND_DIV_EXPR'
       These nodes represent integer division operations that return an
!      integer result.  'TRUNC_DIV_EXPR' rounds towards zero,
!      'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR'
!      rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the
       closest integer.  Integer division in C and C++ is truncating, i.e.
!      'TRUNC_DIV_EXPR'.
  
       The behavior of these operations on signed arithmetic overflow,
       when dividing the minimum signed integer by minus one, is
!      controlled by the 'flag_wrapv' and 'flag_trapv' variables.
  
! 'TRUNC_MOD_EXPR'
! 'FLOOR_MOD_EXPR'
! 'CEIL_MOD_EXPR'
! 'ROUND_MOD_EXPR'
       These nodes represent the integer remainder or modulus operation.
!      The integer modulus of two operands 'a' and 'b' is defined as 'a -
!      (a/b)*b' where the division calculated using the corresponding
!      division operator.  Hence for 'TRUNC_MOD_EXPR' this definition
       assumes division using truncation towards zero, i.e.
!      'TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
!      division, i.e. 'TRUNC_MOD_EXPR'.
  
! 'EXACT_DIV_EXPR'
!      The 'EXACT_DIV_EXPR' code is used to represent integer divisions
       where the numerator is known to be an exact multiple of the
       denominator.  This allows the backend to choose between the faster
!      of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the
       current target.
  
! 'LT_EXPR'
! 'LE_EXPR'
! 'GT_EXPR'
! 'GE_EXPR'
! 'LTGT_EXPR'
! 'EQ_EXPR'
! 'NE_EXPR'
       These nodes represent the less than, less than or equal to, greater
       than, greater than or equal to, less or greater than, equal, and
       not equal comparison operators.  The first and second operands will
--- 11699,11763 ----
       integral type.
  
       The behavior of these operations on signed arithmetic overflow is
!      controlled by the ‘flag_wrapv’ and ‘flag_trapv’ variables.
  
! ‘WIDEN_MULT_EXPR’
       This node represents a widening multiplication.  The operands have
       integral types with same B bits of precision, producing an integral
       type result with at least 2B bits of precision.  The behaviour is
       equivalent to extending both operands, possibly of different
       signedness, to the result type, then multiplying them.
  
! ‘MULT_HIGHPART_EXPR’
       This node represents the "high-part" of a widening multiplication.
       For an integral type with B bits of precision, the result is the
       most significant B bits of the full 2B product.  Both operands must
       have the same precision and same signedness.
  
! ‘RDIV_EXPR’
       This node represents a floating point division operation.
  
! ‘TRUNC_DIV_EXPR’
! ‘FLOOR_DIV_EXPR’
! ‘CEIL_DIV_EXPR’
! ‘ROUND_DIV_EXPR’
       These nodes represent integer division operations that return an
!      integer result.  ‘TRUNC_DIV_EXPR’ rounds towards zero,
!      ‘FLOOR_DIV_EXPR’ rounds towards negative infinity, ‘CEIL_DIV_EXPR’
!      rounds towards positive infinity and ‘ROUND_DIV_EXPR’ rounds to the
       closest integer.  Integer division in C and C++ is truncating, i.e.
!      ‘TRUNC_DIV_EXPR’.
  
       The behavior of these operations on signed arithmetic overflow,
       when dividing the minimum signed integer by minus one, is
!      controlled by the ‘flag_wrapv’ and ‘flag_trapv’ variables.
  
! ‘TRUNC_MOD_EXPR’
! ‘FLOOR_MOD_EXPR’
! ‘CEIL_MOD_EXPR’
! ‘ROUND_MOD_EXPR’
       These nodes represent the integer remainder or modulus operation.
!      The integer modulus of two operands ‘a’ and ‘b’ is defined as ‘a -
!      (a/b)*b’ where the division calculated using the corresponding
!      division operator.  Hence for ‘TRUNC_MOD_EXPR’ this definition
       assumes division using truncation towards zero, i.e.
!      ‘TRUNC_DIV_EXPR’.  Integer remainder in C and C++ uses truncating
!      division, i.e. ‘TRUNC_MOD_EXPR’.
  
! ‘EXACT_DIV_EXPR’
!      The ‘EXACT_DIV_EXPR’ code is used to represent integer divisions
       where the numerator is known to be an exact multiple of the
       denominator.  This allows the backend to choose between the faster
!      of ‘TRUNC_DIV_EXPR’, ‘CEIL_DIV_EXPR’ and ‘FLOOR_DIV_EXPR’ for the
       current target.
  
! ‘LT_EXPR’
! ‘LE_EXPR’
! ‘GT_EXPR’
! ‘GE_EXPR’
! ‘LTGT_EXPR’
! ‘EQ_EXPR’
! ‘NE_EXPR’
       These nodes represent the less than, less than or equal to, greater
       than, greater than or equal to, less or greater than, equal, and
       not equal comparison operators.  The first and second operands will
*************** File: gccint.info,  Node: Unary and Bina
*** 11768,11780 ****
       zero (false) or minus one (true) for vectors.
  
       For floating point comparisons, if we honor IEEE NaNs and either
!      operand is NaN, then 'NE_EXPR' always returns true and the
       remaining operators always return false.  On some targets,
       comparisons against an IEEE NaN, other than equality and
       inequality, may generate a floating-point exception.
  
! 'ORDERED_EXPR'
! 'UNORDERED_EXPR'
       These nodes represent non-trapping ordered and unordered comparison
       operators.  These operations take two floating point operands and
       determine whether they are ordered or unordered relative to each
--- 11770,11782 ----
       zero (false) or minus one (true) for vectors.
  
       For floating point comparisons, if we honor IEEE NaNs and either
!      operand is NaN, then ‘NE_EXPR’ always returns true and the
       remaining operators always return false.  On some targets,
       comparisons against an IEEE NaN, other than equality and
       inequality, may generate a floating-point exception.
  
! ‘ORDERED_EXPR’
! ‘UNORDERED_EXPR’
       These nodes represent non-trapping ordered and unordered comparison
       operators.  These operations take two floating point operands and
       determine whether they are ordered or unordered relative to each
*************** File: gccint.info,  Node: Unary and Bina
*** 11785,11832 ****
       type's zero value for false, and the result type's one value for
       true.
  
! 'UNLT_EXPR'
! 'UNLE_EXPR'
! 'UNGT_EXPR'
! 'UNGE_EXPR'
! 'UNEQ_EXPR'
       These nodes represent the unordered comparison operators.  These
       operations take two floating point operands and determine whether
       the operands are unordered or are less than, less than or equal to,
       greater than, greater than or equal to, or equal respectively.  For
!      example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN
       or the first operand is less than the second.  All these operations
       are guaranteed not to generate a floating point exception.  The
       result type of these expressions will always be of integral or
       boolean type.  These operations return the result type's zero value
       for false, and the result type's one value for true.
  
! 'MODIFY_EXPR'
       These nodes represent assignment.  The left-hand side is the first
       operand; the right-hand side is the second operand.  The left-hand
!      side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or
       other lvalue.
  
!      These nodes are used to represent not only assignment with '=' but
!      also compound assignments (like '+='), by reduction to '='
!      assignment.  In other words, the representation for 'i += 3' looks
!      just like that for 'i = i + 3'.
  
! 'INIT_EXPR'
!      These nodes are just like 'MODIFY_EXPR', but are used only when a
       variable is initialized, rather than assigned to subsequently.
       This means that we can assume that the target of the initialization
       is not used in computing its own value; any reference to the lhs in
       computing the rhs is undefined.
  
! 'COMPOUND_EXPR'
       These nodes represent comma-expressions.  The first operand is an
       expression whose value is computed and thrown away prior to the
       evaluation of the second operand.  The value of the entire
       expression is the value of the second operand.
  
! 'COND_EXPR'
!      These nodes represent '?:' expressions.  The first operand is of
       boolean or integral type.  If it evaluates to a nonzero value, the
       second operand should be evaluated, and returned as the value of
       the expression.  Otherwise, the third operand is evaluated, and
--- 11787,11834 ----
       type's zero value for false, and the result type's one value for
       true.
  
! ‘UNLT_EXPR’
! ‘UNLE_EXPR’
! ‘UNGT_EXPR’
! ‘UNGE_EXPR’
! ‘UNEQ_EXPR’
       These nodes represent the unordered comparison operators.  These
       operations take two floating point operands and determine whether
       the operands are unordered or are less than, less than or equal to,
       greater than, greater than or equal to, or equal respectively.  For
!      example, ‘UNLT_EXPR’ returns true if either operand is an IEEE NaN
       or the first operand is less than the second.  All these operations
       are guaranteed not to generate a floating point exception.  The
       result type of these expressions will always be of integral or
       boolean type.  These operations return the result type's zero value
       for false, and the result type's one value for true.
  
! ‘MODIFY_EXPR’
       These nodes represent assignment.  The left-hand side is the first
       operand; the right-hand side is the second operand.  The left-hand
!      side will be a ‘VAR_DECL’, ‘INDIRECT_REF’, ‘COMPONENT_REF’, or
       other lvalue.
  
!      These nodes are used to represent not only assignment with ‘=’ but
!      also compound assignments (like ‘+=’), by reduction to ‘=’
!      assignment.  In other words, the representation for ‘i += 3’ looks
!      just like that for ‘i = i + 3’.
  
! ‘INIT_EXPR’
!      These nodes are just like ‘MODIFY_EXPR’, but are used only when a
       variable is initialized, rather than assigned to subsequently.
       This means that we can assume that the target of the initialization
       is not used in computing its own value; any reference to the lhs in
       computing the rhs is undefined.
  
! ‘COMPOUND_EXPR’
       These nodes represent comma-expressions.  The first operand is an
       expression whose value is computed and thrown away prior to the
       evaluation of the second operand.  The value of the entire
       expression is the value of the second operand.
  
! ‘COND_EXPR’
!      These nodes represent ‘?:’ expressions.  The first operand is of
       boolean or integral type.  If it evaluates to a nonzero value, the
       second operand should be evaluated, and returned as the value of
       the expression.  Otherwise, the third operand is evaluated, and
*************** File: gccint.info,  Node: Unary and Bina
*** 11836,11867 ****
       expression, unless it unconditionally throws an exception or calls
       a noreturn function, in which case it should have void type.  The
       same constraints apply to the third operand.  This allows array
!      bounds checks to be represented conveniently as '(i >= 0 && i < 10)
!      ? i : abort()'.
  
       As a GNU extension, the C language front-ends allow the second
!      operand of the '?:' operator may be omitted in the source.  For
!      example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x'
       is an expression without side effects.  In the tree representation,
       however, the second operand is always present, possibly protected
!      by 'SAVE_EXPR' if the first argument does cause side effects.
  
! 'CALL_EXPR'
       These nodes are used to represent calls to functions, including
!      non-static member functions.  'CALL_EXPR's are implemented as
       expression nodes with a variable number of operands.  Rather than
!      using 'TREE_OPERAND' to extract them, it is preferable to use the
       specialized accessor macros and functions that operate specifically
!      on 'CALL_EXPR' nodes.
  
!      'CALL_EXPR_FN' returns a pointer to the function to call; it is
!      always an expression whose type is a 'POINTER_TYPE'.
  
       The number of arguments to the call is returned by
!      'call_expr_nargs', while the arguments themselves can be accessed
!      with the 'CALL_EXPR_ARG' macro.  The arguments are zero-indexed and
       numbered left-to-right.  You can iterate over the arguments using
!      'FOR_EACH_CALL_EXPR_ARG', as in:
  
            tree call, arg;
            call_expr_arg_iterator iter;
--- 11838,11869 ----
       expression, unless it unconditionally throws an exception or calls
       a noreturn function, in which case it should have void type.  The
       same constraints apply to the third operand.  This allows array
!      bounds checks to be represented conveniently as ‘(i >= 0 && i < 10)
!      ? i : abort()’.
  
       As a GNU extension, the C language front-ends allow the second
!      operand of the ‘?:’ operator may be omitted in the source.  For
!      example, ‘x ? : 3’ is equivalent to ‘x ? x : 3’, assuming that ‘x’
       is an expression without side effects.  In the tree representation,
       however, the second operand is always present, possibly protected
!      by ‘SAVE_EXPR’ if the first argument does cause side effects.
  
! ‘CALL_EXPR’
       These nodes are used to represent calls to functions, including
!      non-static member functions.  ‘CALL_EXPR’s are implemented as
       expression nodes with a variable number of operands.  Rather than
!      using ‘TREE_OPERAND’ to extract them, it is preferable to use the
       specialized accessor macros and functions that operate specifically
!      on ‘CALL_EXPR’ nodes.
  
!      ‘CALL_EXPR_FN’ returns a pointer to the function to call; it is
!      always an expression whose type is a ‘POINTER_TYPE’.
  
       The number of arguments to the call is returned by
!      ‘call_expr_nargs’, while the arguments themselves can be accessed
!      with the ‘CALL_EXPR_ARG’ macro.  The arguments are zero-indexed and
       numbered left-to-right.  You can iterate over the arguments using
!      ‘FOR_EACH_CALL_EXPR_ARG’, as in:
  
            tree call, arg;
            call_expr_arg_iterator iter;
*************** File: gccint.info,  Node: Unary and Bina
*** 11870,11909 ****
              ...;
  
       For non-static member functions, there will be an operand
!      corresponding to the 'this' pointer.  There will always be
       expressions corresponding to all of the arguments, even if the
       function is declared with default arguments and some arguments are
       not explicitly provided at the call sites.
  
!      'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is
       used to implement nested functions.  This operand is otherwise
       null.
  
! 'CLEANUP_POINT_EXPR'
       These nodes represent full-expressions.  The single operand is an
       expression to evaluate.  Any destructor calls engendered by the
       creation of temporaries during the evaluation of that expression
       should be performed immediately after the expression is evaluated.
  
! 'CONSTRUCTOR'
       These nodes represent the brace-enclosed initializers for a
       structure or an array.  They contain a sequence of component values
!      made out of a vector of constructor_elt, which is a ('INDEX',
!      'VALUE') pair.
  
!      If the 'TREE_TYPE' of the 'CONSTRUCTOR' is a 'RECORD_TYPE',
!      'UNION_TYPE' or 'QUAL_UNION_TYPE' then the 'INDEX' of each node in
!      the sequence will be a 'FIELD_DECL' and the 'VALUE' will be the
       expression used to initialize that field.
  
!      If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then
!      the 'INDEX' of each node in the sequence will be an 'INTEGER_CST'
!      or a 'RANGE_EXPR' of two 'INTEGER_CST's.  A single 'INTEGER_CST'
       indicates which element of the array is being assigned to.  A
!      'RANGE_EXPR' indicates an inclusive range of elements to
!      initialize.  In both cases the 'VALUE' is the corresponding
       initializer.  It is re-evaluated for each element of a
!      'RANGE_EXPR'.  If the 'INDEX' is 'NULL_TREE', then the initializer
       is for the next available array element.
  
       In the front end, you should not depend on the fields appearing in
--- 11872,11911 ----
              ...;
  
       For non-static member functions, there will be an operand
!      corresponding to the ‘this’ pointer.  There will always be
       expressions corresponding to all of the arguments, even if the
       function is declared with default arguments and some arguments are
       not explicitly provided at the call sites.
  
!      ‘CALL_EXPR’s also have a ‘CALL_EXPR_STATIC_CHAIN’ operand that is
       used to implement nested functions.  This operand is otherwise
       null.
  
! ‘CLEANUP_POINT_EXPR’
       These nodes represent full-expressions.  The single operand is an
       expression to evaluate.  Any destructor calls engendered by the
       creation of temporaries during the evaluation of that expression
       should be performed immediately after the expression is evaluated.
  
! ‘CONSTRUCTOR’
       These nodes represent the brace-enclosed initializers for a
       structure or an array.  They contain a sequence of component values
!      made out of a vector of constructor_elt, which is a (‘INDEX’,
!      ‘VALUE’) pair.
  
!      If the ‘TREE_TYPE’ of the ‘CONSTRUCTOR’ is a ‘RECORD_TYPE’,
!      ‘UNION_TYPE’ or ‘QUAL_UNION_TYPE’ then the ‘INDEX’ of each node in
!      the sequence will be a ‘FIELD_DECL’ and the ‘VALUE’ will be the
       expression used to initialize that field.
  
!      If the ‘TREE_TYPE’ of the ‘CONSTRUCTOR’ is an ‘ARRAY_TYPE’, then
!      the ‘INDEX’ of each node in the sequence will be an ‘INTEGER_CST’
!      or a ‘RANGE_EXPR’ of two ‘INTEGER_CST’s.  A single ‘INTEGER_CST’
       indicates which element of the array is being assigned to.  A
!      ‘RANGE_EXPR’ indicates an inclusive range of elements to
!      initialize.  In both cases the ‘VALUE’ is the corresponding
       initializer.  It is re-evaluated for each element of a
!      ‘RANGE_EXPR’.  If the ‘INDEX’ is ‘NULL_TREE’, then the initializer
       is for the next available array element.
  
       In the front end, you should not depend on the fields appearing in
*************** File: gccint.info,  Node: Unary and Bina
*** 11913,11974 ****
       (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which
       case their value becomes undefined.
  
! 'COMPOUND_LITERAL_EXPR'
       These nodes represent ISO C99 compound literals.  The
!      'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an
!      anonymous 'VAR_DECL' for the unnamed object represented by the
!      compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a
!      'CONSTRUCTOR' representing the brace-enclosed list of initializers
!      in the compound literal.  That anonymous 'VAR_DECL' can also be
!      accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro.
  
! 'SAVE_EXPR'
  
!      A 'SAVE_EXPR' represents an expression (possibly involving side
       effects) that is used more than once.  The side effects should
       occur only the first time the expression is evaluated.  Subsequent
       uses should just reuse the computed value.  The first operand to
!      the 'SAVE_EXPR' is the expression to evaluate.  The side effects
!      should be executed where the 'SAVE_EXPR' is first encountered in a
       depth-first preorder traversal of the expression tree.
  
! 'TARGET_EXPR'
!      A 'TARGET_EXPR' represents a temporary object.  The first operand
!      is a 'VAR_DECL' for the temporary variable.  The second operand is
       the initializer for the temporary.  The initializer is evaluated
       and, if non-void, copied (bitwise) into the temporary.  If the
       initializer is void, that means that it will perform the
       initialization itself.
  
!      Often, a 'TARGET_EXPR' occurs on the right-hand side of an
       assignment, or as the second operand to a comma-expression which is
       itself the right-hand side of an assignment, etc.  In this case, we
!      say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is
!      "orphaned".  For a normal 'TARGET_EXPR' the temporary variable
       should be treated as an alias for the left-hand side of the
       assignment, rather than as a new temporary variable.
  
!      The third operand to the 'TARGET_EXPR', if present, is a
       cleanup-expression (i.e., destructor call) for the temporary.  If
       this expression is orphaned, then this expression must be executed
       when the statement containing this expression is complete.  These
       cleanups must always be executed in the order opposite to that in
       which they were encountered.  Note that if a temporary is created
       on one branch of a conditional operator (i.e., in the second or
!      third operand to a 'COND_EXPR'), the cleanup must be run only if
       that branch is actually executed.
  
! 'VA_ARG_EXPR'
       This node is used to implement support for the C/C++ variable
!      argument-list mechanism.  It represents expressions like 'va_arg
!      (ap, type)'.  Its 'TREE_TYPE' yields the tree representation for
!      'type' and its sole argument yields the representation for 'ap'.
  
! 'ANNOTATE_EXPR'
       This node is used to attach markers to an expression.  The first
!      operand is the annotated expression, the second is an 'INTEGER_CST'
!      with a value from 'enum annot_expr_kind', the third is an
!      'INTEGER_CST'.
  
  
  File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
--- 11915,11976 ----
       (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which
       case their value becomes undefined.
  
! ‘COMPOUND_LITERAL_EXPR’
       These nodes represent ISO C99 compound literals.  The
!      ‘COMPOUND_LITERAL_EXPR_DECL_EXPR’ is a ‘DECL_EXPR’ containing an
!      anonymous ‘VAR_DECL’ for the unnamed object represented by the
!      compound literal; the ‘DECL_INITIAL’ of that ‘VAR_DECL’ is a
!      ‘CONSTRUCTOR’ representing the brace-enclosed list of initializers
!      in the compound literal.  That anonymous ‘VAR_DECL’ can also be
!      accessed directly by the ‘COMPOUND_LITERAL_EXPR_DECL’ macro.
  
! ‘SAVE_EXPR’
  
!      A ‘SAVE_EXPR’ represents an expression (possibly involving side
       effects) that is used more than once.  The side effects should
       occur only the first time the expression is evaluated.  Subsequent
       uses should just reuse the computed value.  The first operand to
!      the ‘SAVE_EXPR’ is the expression to evaluate.  The side effects
!      should be executed where the ‘SAVE_EXPR’ is first encountered in a
       depth-first preorder traversal of the expression tree.
  
! ‘TARGET_EXPR’
!      A ‘TARGET_EXPR’ represents a temporary object.  The first operand
!      is a ‘VAR_DECL’ for the temporary variable.  The second operand is
       the initializer for the temporary.  The initializer is evaluated
       and, if non-void, copied (bitwise) into the temporary.  If the
       initializer is void, that means that it will perform the
       initialization itself.
  
!      Often, a ‘TARGET_EXPR’ occurs on the right-hand side of an
       assignment, or as the second operand to a comma-expression which is
       itself the right-hand side of an assignment, etc.  In this case, we
!      say that the ‘TARGET_EXPR’ is "normal"; otherwise, we say it is
!      "orphaned".  For a normal ‘TARGET_EXPR’ the temporary variable
       should be treated as an alias for the left-hand side of the
       assignment, rather than as a new temporary variable.
  
!      The third operand to the ‘TARGET_EXPR’, if present, is a
       cleanup-expression (i.e., destructor call) for the temporary.  If
       this expression is orphaned, then this expression must be executed
       when the statement containing this expression is complete.  These
       cleanups must always be executed in the order opposite to that in
       which they were encountered.  Note that if a temporary is created
       on one branch of a conditional operator (i.e., in the second or
!      third operand to a ‘COND_EXPR’), the cleanup must be run only if
       that branch is actually executed.
  
! ‘VA_ARG_EXPR’
       This node is used to implement support for the C/C++ variable
!      argument-list mechanism.  It represents expressions like ‘va_arg
!      (ap, type)’.  Its ‘TREE_TYPE’ yields the tree representation for
!      ‘type’ and its sole argument yields the representation for ‘ap’.
  
! ‘ANNOTATE_EXPR’
       This node is used to attach markers to an expression.  The first
!      operand is the annotated expression, the second is an ‘INTEGER_CST’
!      with a value from ‘enum annot_expr_kind’, the third is an
!      ‘INTEGER_CST’.
  
  
  File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
*************** File: gccint.info,  Node: Vectors,  Prev
*** 11976,11995 ****
  11.6.4 Vectors
  --------------
  
! 'VEC_DUPLICATE_EXPR'
       This node has a single operand and represents a vector in which
       every element is equal to that operand.
  
! 'VEC_SERIES_EXPR'
       This node represents a vector formed from a scalar base and step,
       given as the first and second operands respectively.  Element I of
!      the result is equal to 'BASE + I*STEP'.
  
       This node is restricted to integral types, in order to avoid
       specifying the rounding behavior for floating-point types.
  
! 'VEC_LSHIFT_EXPR'
! 'VEC_RSHIFT_EXPR'
       These nodes represent whole vector left and right shifts,
       respectively.  The first operand is the vector to shift; it will
       always be of vector type.  The second operand is an expression for
--- 11978,11997 ----
  11.6.4 Vectors
  --------------
  
! ‘VEC_DUPLICATE_EXPR’
       This node has a single operand and represents a vector in which
       every element is equal to that operand.
  
! ‘VEC_SERIES_EXPR’
       This node represents a vector formed from a scalar base and step,
       given as the first and second operands respectively.  Element I of
!      the result is equal to ‘BASE + I*STEP’.
  
       This node is restricted to integral types, in order to avoid
       specifying the rounding behavior for floating-point types.
  
! ‘VEC_LSHIFT_EXPR’
! ‘VEC_RSHIFT_EXPR’
       These nodes represent whole vector left and right shifts,
       respectively.  The first operand is the vector to shift; it will
       always be of vector type.  The second operand is an expression for
*************** File: gccint.info,  Node: Vectors,  Prev
*** 11997,12135 ****
       undefined if the second operand is larger than or equal to the
       first operand's type size.
  
! 'VEC_WIDEN_MULT_HI_EXPR'
! 'VEC_WIDEN_MULT_LO_EXPR'
       These nodes represent widening vector multiplication of the high
       and low parts of the two input vectors, respectively.  Their
!      operands are vectors that contain the same number of elements ('N')
       of the same integral type.  The result is a vector that contains
       half as many elements, of an integral type whose size is twice as
!      wide.  In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2'
       elements of the two vector are multiplied to produce the vector of
!      'N/2' products.  In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low
!      'N/2' elements of the two vector are multiplied to produce the
!      vector of 'N/2' products.
  
! 'IFN_VEC_WIDEN_PLUS'
       This internal function represents widening vector addition of two
       input vectors.  Its operands are vectors that contain the same
!      number of elements ('N') of the same integral type.  The result is
!      a vector that contains the same amount ('N') of elements, of an
       integral type whose size is twice as wide, as the input vectors.
       If the current target does not implement the corresponding optabs
       the vectorizer may choose to split it into either a pair of
!      'IFN_VEC_WIDEN_PLUS_HI' and 'IFN_VEC_WIDEN_PLUS_LO' or
!      'IFN_VEC_WIDEN_PLUS_EVEN' and 'IFN_VEC_WIDEN_PLUS_ODD', depending
       on what optabs the target implements.
  
! 'IFN_VEC_WIDEN_PLUS_HI'
! 'IFN_VEC_WIDEN_PLUS_LO'
       These internal functions represent widening vector addition of the
       high and low parts of the two input vectors, respectively.  Their
!      operands are vectors that contain the same number of elements ('N')
       of the same integral type.  The result is a vector that contains
       half as many elements, of an integral type whose size is twice as
!      wide.  In the case of 'IFN_VEC_WIDEN_PLUS_HI' the high 'N/2'
       elements of the two vectors are added to produce the vector of
!      'N/2' additions.  In the case of 'IFN_VEC_WIDEN_PLUS_LO' the low
!      'N/2' elements of the two vectors are added to produce the vector
!      of 'N/2' additions.
  
! 'IFN_VEC_WIDEN_PLUS_EVEN'
! 'IFN_VEC_WIDEN_PLUS_ODD'
       These internal functions represent widening vector addition of the
       even and odd elements of the two input vectors, respectively.
       Their operands are vectors that contain the same number of elements
!      ('N') of the same integral type.  The result is a vector that
       contains half as many elements, of an integral type whose size is
!      twice as wide.  In the case of 'IFN_VEC_WIDEN_PLUS_EVEN' the even
!      'N/2' elements of the two vectors are added to produce the vector
!      of 'N/2' additions.  In the case of 'IFN_VEC_WIDEN_PLUS_ODD' the
!      odd 'N/2' elements of the two vectors are added to produce the
!      vector of 'N/2' additions.
  
! 'IFN_VEC_WIDEN_MINUS'
       This internal function represents widening vector subtraction of
       two input vectors.  Its operands are vectors that contain the same
!      number of elements ('N') of the same integral type.  The result is
!      a vector that contains the same amount ('N') of elements, of an
       integral type whose size is twice as wide, as the input vectors.
       If the current target does not implement the corresponding optabs
       the vectorizer may choose to split it into either a pair of
!      'IFN_VEC_WIDEN_MINUS_HI' and 'IFN_VEC_WIDEN_MINUS_LO' or
!      'IFN_VEC_WIDEN_MINUS_EVEN' and 'IFN_VEC_WIDEN_MINUS_ODD', depending
       on what optabs the target implements.
  
! 'IFN_VEC_WIDEN_MINUS_HI'
! 'IFN_VEC_WIDEN_MINUS_LO'
       These internal functions represent widening vector subtraction of
       the high and low parts of the two input vectors, respectively.
       Their operands are vectors that contain the same number of elements
!      ('N') of the same integral type.  The high/low elements of the
       second vector are subtracted from the high/low elements of the
       first.  The result is a vector that contains half as many elements,
       of an integral type whose size is twice as wide.  In the case of
!      'IFN_VEC_WIDEN_MINUS_HI' the high 'N/2' elements of the second
!      vector are subtracted from the high 'N/2' of the first to produce
!      the vector of 'N/2' subtractions.  In the case of
!      'IFN_VEC_WIDEN_MINUS_LO' the low 'N/2' elements of the second
!      vector are subtracted from the low 'N/2' of the first to produce
!      the vector of 'N/2' subtractions.
  
! 'IFN_VEC_WIDEN_MINUS_EVEN'
! 'IFN_VEC_WIDEN_MINUS_ODD'
       These internal functions represent widening vector subtraction of
       the even and odd parts of the two input vectors, respectively.
       Their operands are vectors that contain the same number of elements
!      ('N') of the same integral type.  The even/odd elements of the
       second vector are subtracted from the even/odd elements of the
       first.  The result is a vector that contains half as many elements,
       of an integral type whose size is twice as wide.  In the case of
!      'IFN_VEC_WIDEN_MINUS_EVEN' the even 'N/2' elements of the second
!      vector are subtracted from the even 'N/2' of the first to produce
!      the vector of 'N/2' subtractions.  In the case of
!      'IFN_VEC_WIDEN_MINUS_ODD' the odd 'N/2' elements of the second
!      vector are subtracted from the odd 'N/2' of the first to produce
!      the vector of 'N/2' subtractions.
  
! 'VEC_UNPACK_HI_EXPR'
! 'VEC_UNPACK_LO_EXPR'
       These nodes represent unpacking of the high and low parts of the
       input vector, respectively.  The single operand is a vector that
!      contains 'N' elements of the same integral or floating point type.
       The result is a vector that contains half as many elements, of an
       integral or floating point type whose size is twice as wide.  In
!      the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the
       vector are extracted and widened (promoted).  In the case of
!      'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are
       extracted and widened (promoted).
  
! 'VEC_UNPACK_FLOAT_HI_EXPR'
! 'VEC_UNPACK_FLOAT_LO_EXPR'
       These nodes represent unpacking of the high and low parts of the
       input vector, where the values are converted from fixed point to
!      floating point.  The single operand is a vector that contains 'N'
       elements of the same integral type.  The result is a vector that
       contains half as many elements of a floating point type whose size
!      is twice as wide.  In the case of 'VEC_UNPACK_FLOAT_HI_EXPR' the
!      high 'N/2' elements of the vector are extracted, converted and
!      widened.  In the case of 'VEC_UNPACK_FLOAT_LO_EXPR' the low 'N/2'
       elements of the vector are extracted, converted and widened.
  
! 'VEC_UNPACK_FIX_TRUNC_HI_EXPR'
! 'VEC_UNPACK_FIX_TRUNC_LO_EXPR'
       These nodes represent unpacking of the high and low parts of the
       input vector, where the values are truncated from floating point to
!      fixed point.  The single operand is a vector that contains 'N'
       elements of the same floating point type.  The result is a vector
       that contains half as many elements of an integral type whose size
!      is twice as wide.  In the case of 'VEC_UNPACK_FIX_TRUNC_HI_EXPR'
!      the high 'N/2' elements of the vector are extracted and converted
!      with truncation.  In the case of 'VEC_UNPACK_FIX_TRUNC_LO_EXPR' the
!      low 'N/2' elements of the vector are extracted and converted with
       truncation.
  
! 'VEC_PACK_TRUNC_EXPR'
       This node represents packing of truncated elements of the two input
       vectors into the output vector.  Input operands are vectors that
       contain the same number of elements of the same integral or
--- 11999,12137 ----
       undefined if the second operand is larger than or equal to the
       first operand's type size.
  
! ‘VEC_WIDEN_MULT_HI_EXPR’
! ‘VEC_WIDEN_MULT_LO_EXPR’
       These nodes represent widening vector multiplication of the high
       and low parts of the two input vectors, respectively.  Their
!      operands are vectors that contain the same number of elements (‘N’)
       of the same integral type.  The result is a vector that contains
       half as many elements, of an integral type whose size is twice as
!      wide.  In the case of ‘VEC_WIDEN_MULT_HI_EXPR’ the high ‘N/2’
       elements of the two vector are multiplied to produce the vector of
!      ‘N/2’ products.  In the case of ‘VEC_WIDEN_MULT_LO_EXPR’ the low
!      ‘N/2’ elements of the two vector are multiplied to produce the
!      vector of ‘N/2’ products.
  
! ‘IFN_VEC_WIDEN_PLUS’
       This internal function represents widening vector addition of two
       input vectors.  Its operands are vectors that contain the same
!      number of elements (‘N’) of the same integral type.  The result is
!      a vector that contains the same amount (‘N’) of elements, of an
       integral type whose size is twice as wide, as the input vectors.
       If the current target does not implement the corresponding optabs
       the vectorizer may choose to split it into either a pair of
!      ‘IFN_VEC_WIDEN_PLUS_HI’ and ‘IFN_VEC_WIDEN_PLUS_LO’ or
!      ‘IFN_VEC_WIDEN_PLUS_EVEN’ and ‘IFN_VEC_WIDEN_PLUS_ODD’, depending
       on what optabs the target implements.
  
! ‘IFN_VEC_WIDEN_PLUS_HI’
! ‘IFN_VEC_WIDEN_PLUS_LO’
       These internal functions represent widening vector addition of the
       high and low parts of the two input vectors, respectively.  Their
!      operands are vectors that contain the same number of elements (‘N’)
       of the same integral type.  The result is a vector that contains
       half as many elements, of an integral type whose size is twice as
!      wide.  In the case of ‘IFN_VEC_WIDEN_PLUS_HI’ the high ‘N/2’
       elements of the two vectors are added to produce the vector of
!      ‘N/2’ additions.  In the case of ‘IFN_VEC_WIDEN_PLUS_LO’ the low
!      ‘N/2’ elements of the two vectors are added to produce the vector
!      of ‘N/2’ additions.
  
! ‘IFN_VEC_WIDEN_PLUS_EVEN’
! ‘IFN_VEC_WIDEN_PLUS_ODD’
       These internal functions represent widening vector addition of the
       even and odd elements of the two input vectors, respectively.
       Their operands are vectors that contain the same number of elements
!      (‘N’) of the same integral type.  The result is a vector that
       contains half as many elements, of an integral type whose size is
!      twice as wide.  In the case of ‘IFN_VEC_WIDEN_PLUS_EVEN’ the even
!      ‘N/2’ elements of the two vectors are added to produce the vector
!      of ‘N/2’ additions.  In the case of ‘IFN_VEC_WIDEN_PLUS_ODD’ the
!      odd ‘N/2’ elements of the two vectors are added to produce the
!      vector of ‘N/2’ additions.
  
! ‘IFN_VEC_WIDEN_MINUS’
       This internal function represents widening vector subtraction of
       two input vectors.  Its operands are vectors that contain the same
!      number of elements (‘N’) of the same integral type.  The result is
!      a vector that contains the same amount (‘N’) of elements, of an
       integral type whose size is twice as wide, as the input vectors.
       If the current target does not implement the corresponding optabs
       the vectorizer may choose to split it into either a pair of
!      ‘IFN_VEC_WIDEN_MINUS_HI’ and ‘IFN_VEC_WIDEN_MINUS_LO’ or
!      ‘IFN_VEC_WIDEN_MINUS_EVEN’ and ‘IFN_VEC_WIDEN_MINUS_ODD’, depending
       on what optabs the target implements.
  
! ‘IFN_VEC_WIDEN_MINUS_HI’
! ‘IFN_VEC_WIDEN_MINUS_LO’
       These internal functions represent widening vector subtraction of
       the high and low parts of the two input vectors, respectively.
       Their operands are vectors that contain the same number of elements
!      (‘N’) of the same integral type.  The high/low elements of the
       second vector are subtracted from the high/low elements of the
       first.  The result is a vector that contains half as many elements,
       of an integral type whose size is twice as wide.  In the case of
!      ‘IFN_VEC_WIDEN_MINUS_HI’ the high ‘N/2’ elements of the second
!      vector are subtracted from the high ‘N/2’ of the first to produce
!      the vector of ‘N/2’ subtractions.  In the case of
!      ‘IFN_VEC_WIDEN_MINUS_LO’ the low ‘N/2’ elements of the second
!      vector are subtracted from the low ‘N/2’ of the first to produce
!      the vector of ‘N/2’ subtractions.
  
! ‘IFN_VEC_WIDEN_MINUS_EVEN’
! ‘IFN_VEC_WIDEN_MINUS_ODD’
       These internal functions represent widening vector subtraction of
       the even and odd parts of the two input vectors, respectively.
       Their operands are vectors that contain the same number of elements
!      (‘N’) of the same integral type.  The even/odd elements of the
       second vector are subtracted from the even/odd elements of the
       first.  The result is a vector that contains half as many elements,
       of an integral type whose size is twice as wide.  In the case of
!      ‘IFN_VEC_WIDEN_MINUS_EVEN’ the even ‘N/2’ elements of the second
!      vector are subtracted from the even ‘N/2’ of the first to produce
!      the vector of ‘N/2’ subtractions.  In the case of
!      ‘IFN_VEC_WIDEN_MINUS_ODD’ the odd ‘N/2’ elements of the second
!      vector are subtracted from the odd ‘N/2’ of the first to produce
!      the vector of ‘N/2’ subtractions.
  
! ‘VEC_UNPACK_HI_EXPR’
! ‘VEC_UNPACK_LO_EXPR’
       These nodes represent unpacking of the high and low parts of the
       input vector, respectively.  The single operand is a vector that
!      contains ‘N’ elements of the same integral or floating point type.
       The result is a vector that contains half as many elements, of an
       integral or floating point type whose size is twice as wide.  In
!      the case of ‘VEC_UNPACK_HI_EXPR’ the high ‘N/2’ elements of the
       vector are extracted and widened (promoted).  In the case of
!      ‘VEC_UNPACK_LO_EXPR’ the low ‘N/2’ elements of the vector are
       extracted and widened (promoted).
  
! ‘VEC_UNPACK_FLOAT_HI_EXPR’
! ‘VEC_UNPACK_FLOAT_LO_EXPR’
       These nodes represent unpacking of the high and low parts of the
       input vector, where the values are converted from fixed point to
!      floating point.  The single operand is a vector that contains ‘N’
       elements of the same integral type.  The result is a vector that
       contains half as many elements of a floating point type whose size
!      is twice as wide.  In the case of ‘VEC_UNPACK_FLOAT_HI_EXPR’ the
!      high ‘N/2’ elements of the vector are extracted, converted and
!      widened.  In the case of ‘VEC_UNPACK_FLOAT_LO_EXPR’ the low ‘N/2’
       elements of the vector are extracted, converted and widened.
  
! ‘VEC_UNPACK_FIX_TRUNC_HI_EXPR’
! ‘VEC_UNPACK_FIX_TRUNC_LO_EXPR’
       These nodes represent unpacking of the high and low parts of the
       input vector, where the values are truncated from floating point to
!      fixed point.  The single operand is a vector that contains ‘N’
       elements of the same floating point type.  The result is a vector
       that contains half as many elements of an integral type whose size
!      is twice as wide.  In the case of ‘VEC_UNPACK_FIX_TRUNC_HI_EXPR’
!      the high ‘N/2’ elements of the vector are extracted and converted
!      with truncation.  In the case of ‘VEC_UNPACK_FIX_TRUNC_LO_EXPR’ the
!      low ‘N/2’ elements of the vector are extracted and converted with
       truncation.
  
! ‘VEC_PACK_TRUNC_EXPR’
       This node represents packing of truncated elements of the two input
       vectors into the output vector.  Input operands are vectors that
       contain the same number of elements of the same integral or
*************** File: gccint.info,  Node: Vectors,  Prev
*** 12138,12144 ****
       half as wide.  The elements of the two vectors are demoted and
       merged (concatenated) to form the output vector.
  
! 'VEC_PACK_SAT_EXPR'
       This node represents packing of elements of the two input vectors
       into the output vector using saturation.  Input operands are
       vectors that contain the same number of elements of the same
--- 12140,12146 ----
       half as wide.  The elements of the two vectors are demoted and
       merged (concatenated) to form the output vector.
  
! ‘VEC_PACK_SAT_EXPR’
       This node represents packing of elements of the two input vectors
       into the output vector using saturation.  Input operands are
       vectors that contain the same number of elements of the same
*************** File: gccint.info,  Node: Vectors,  Prev
*** 12147,12153 ****
       elements of the two vectors are demoted and merged (concatenated)
       to form the output vector.
  
! 'VEC_PACK_FIX_TRUNC_EXPR'
       This node represents packing of elements of the two input vectors
       into the output vector, where the values are converted from
       floating point to fixed point.  Input operands are vectors that
--- 12149,12155 ----
       elements of the two vectors are demoted and merged (concatenated)
       to form the output vector.
  
! ‘VEC_PACK_FIX_TRUNC_EXPR’
       This node represents packing of elements of the two input vectors
       into the output vector, where the values are converted from
       floating point to fixed point.  Input operands are vectors that
*************** File: gccint.info,  Node: Vectors,  Prev
*** 12156,12162 ****
       integral type whose size is half as wide.  The elements of the two
       vectors are merged (concatenated) to form the output vector.
  
! 'VEC_PACK_FLOAT_EXPR'
       This node represents packing of elements of the two input vectors
       into the output vector, where the values are converted from fixed
       point to floating point.  Input operands are vectors that contain
--- 12158,12164 ----
       integral type whose size is half as wide.  The elements of the two
       vectors are merged (concatenated) to form the output vector.
  
! ‘VEC_PACK_FLOAT_EXPR’
       This node represents packing of elements of the two input vectors
       into the output vector, where the values are converted from fixed
       point to floating point.  Input operands are vectors that contain
*************** File: gccint.info,  Node: Vectors,  Prev
*** 12165,12172 ****
       whose size is half as wide.  The elements of the two vectors are
       merged (concatenated) to form the output vector.
  
! 'VEC_COND_EXPR'
!      These nodes represent '?:' expressions.  The three operands must be
       vectors of the same size and number of elements.  The second and
       third operands must have the same type as the entire expression.
       The first operand is of signed integral vector type.  If an element
--- 12167,12174 ----
       whose size is half as wide.  The elements of the two vectors are
       merged (concatenated) to form the output vector.
  
! ‘VEC_COND_EXPR’
!      These nodes represent ‘?:’ expressions.  The three operands must be
       vectors of the same size and number of elements.  The second and
       third operands must have the same type as the entire expression.
       The first operand is of signed integral vector type.  If an element
*************** File: gccint.info,  Node: Vectors,  Prev
*** 12175,12183 ****
       evaluates to a minus one value, it is taken from the second
       operand.  It should never evaluate to any other value currently,
       but optimizations should not rely on that property.  In contrast
!      with a 'COND_EXPR', all operands are always evaluated.
  
! 'SAD_EXPR'
       This node represents the Sum of Absolute Differences operation.
       The three operands must be vectors of integral types.  The first
       and second operand must have the same type.  The size of the vector
--- 12177,12185 ----
       evaluates to a minus one value, it is taken from the second
       operand.  It should never evaluate to any other value currently,
       but optimizations should not rely on that property.  In contrast
!      with a ‘COND_EXPR’, all operands are always evaluated.
  
! ‘SAD_EXPR’
       This node represents the Sum of Absolute Differences operation.
       The three operands must be vectors of integral types.  The first
       and second operand must have the same type.  The size of the vector
*************** File: gccint.info,  Node: Statements,  N
*** 12193,12200 ****
  ===============
  
  Most statements in GIMPLE are assignment statements, represented by
! 'GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
! a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'.
  
   There are also several varieties of complex statements.
  
--- 12195,12202 ----
  ===============
  
  Most statements in GIMPLE are assignment statements, represented by
! ‘GIMPLE_ASSIGN’.  No other C expressions can appear at statement level;
! a reference to a volatile object is converted into a ‘GIMPLE_ASSIGN’.
  
   There are also several varieties of complex statements.
  
*************** File: gccint.info,  Node: Basic Statemen
*** 12215,12320 ****
  11.7.1 Basic Statements
  -----------------------
  
! 'ASM_EXPR'
  
       Used to represent an inline assembly statement.  For an inline
       assembly statement like:
            asm ("mov x, y");
!      The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x,
!      y"'.  If the original statement made use of the extended-assembly
!      syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will
       be the outputs, inputs, and clobbers for the statement, represented
!      as 'STRING_CST' nodes.  The extended-assembly syntax looks like:
            asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
!      The first string is the 'ASM_STRING', containing the instruction
       template.  The next two strings are the output and inputs,
       respectively; this statement has no clobbers.  As this example
       indicates, "plain" assembly statements are merely a special case of
       extended assembly statements; they have no cv-qualifiers, outputs,
!      inputs, or clobbers.  All of the strings will be 'NUL'-terminated,
!      and will contain no embedded 'NUL'-characters.
  
!      If the assembly statement is declared 'volatile', or if the
       statement was not an extended assembly statement, and is therefore
!      implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold
!      of the 'ASM_EXPR'.
  
! 'DECL_EXPR'
  
!      Used to represent a local declaration.  The 'DECL_EXPR_DECL' macro
       can be used to obtain the entity declared.  This declaration may be
!      a 'LABEL_DECL', indicating that the label declared is a local
       label.  (As an extension, GCC allows the declaration of labels with
!      scope.)  In C, this declaration may be a 'FUNCTION_DECL',
       indicating the use of the GCC nested function extension.  For more
       information, *note Functions::.
  
! 'LABEL_EXPR'
  
!      Used to represent a label.  The 'LABEL_DECL' declared by this
!      statement can be obtained with the 'LABEL_EXPR_LABEL' macro.  The
!      'IDENTIFIER_NODE' giving the name of the label can be obtained from
!      the 'LABEL_DECL' with 'DECL_NAME'.
  
! 'GOTO_EXPR'
  
!      Used to represent a 'goto' statement.  The 'GOTO_DESTINATION' will
!      usually be a 'LABEL_DECL'.  However, if the "computed goto"
!      extension has been used, the 'GOTO_DESTINATION' will be an
       arbitrary expression indicating the destination.  This expression
       will always have pointer type.
  
! 'RETURN_EXPR'
  
!      Used to represent a 'return' statement.  Operand 0 represents the
!      value to return.  It should either be the 'RESULT_DECL' for the
!      containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the
!      function's 'RESULT_DECL'.  It will be 'NULL_TREE' if the statement
       was just
            return;
  
! 'LOOP_EXPR'
!      These nodes represent "infinite" loops.  The 'LOOP_EXPR_BODY'
       represents the body of the loop.  It should be executed forever,
!      unless an 'EXIT_EXPR' is encountered.
  
! 'EXIT_EXPR'
       These nodes represent conditional exits from the nearest enclosing
!      'LOOP_EXPR'.  The single operand is the condition; if it is
!      nonzero, then the loop should be exited.  An 'EXIT_EXPR' will only
!      appear within a 'LOOP_EXPR'.
  
! 'SWITCH_EXPR'
  
!      Used to represent a 'switch' statement.  The 'SWITCH_COND' is the
!      expression on which the switch is occurring.  The 'SWITCH_BODY' is
!      the body of the switch statement.  'SWITCH_ALL_CASES_P' is true if
       the switch includes a default label or the case label ranges cover
       all possible values of the condition expression.
  
!      Note that 'TREE_TYPE' for a 'SWITCH_EXPR' represents the original
       type of switch expression as given in the source, before any
       compiler conversions, instead of the type of the switch expression
       itself (which is not meaningful).
  
! 'CASE_LABEL_EXPR'
  
!      Use to represent a 'case' label, range of 'case' labels, or a
!      'default' label.  If 'CASE_LOW' is 'NULL_TREE', then this is a
!      'default' label.  Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then
!      this is an ordinary 'case' label.  In this case, 'CASE_LOW' is an
!      expression giving the value of the label.  Both 'CASE_LOW' and
!      'CASE_HIGH' are 'INTEGER_CST' nodes.  These values will have the
       same type as the condition expression in the switch statement.
  
!      Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the
       statement is a range of case labels.  Such statements originate
       with the extension that allows users to write things of the form:
            case 2 ... 5:
!      The first value will be 'CASE_LOW', while the second will be
!      'CASE_HIGH'.
  
! 'DEBUG_BEGIN_STMT'
  
       Marks the beginning of a source statement, for purposes of debug
       information generation.
--- 12217,12322 ----
  11.7.1 Basic Statements
  -----------------------
  
! ‘ASM_EXPR’
  
       Used to represent an inline assembly statement.  For an inline
       assembly statement like:
            asm ("mov x, y");
!      The ‘ASM_STRING’ macro will return a ‘STRING_CST’ node for ‘"mov x,
!      y"’.  If the original statement made use of the extended-assembly
!      syntax, then ‘ASM_OUTPUTS’, ‘ASM_INPUTS’, and ‘ASM_CLOBBERS’ will
       be the outputs, inputs, and clobbers for the statement, represented
!      as ‘STRING_CST’ nodes.  The extended-assembly syntax looks like:
            asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
!      The first string is the ‘ASM_STRING’, containing the instruction
       template.  The next two strings are the output and inputs,
       respectively; this statement has no clobbers.  As this example
       indicates, "plain" assembly statements are merely a special case of
       extended assembly statements; they have no cv-qualifiers, outputs,
!      inputs, or clobbers.  All of the strings will be ‘NUL’-terminated,
!      and will contain no embedded ‘NUL’-characters.
  
!      If the assembly statement is declared ‘volatile’, or if the
       statement was not an extended assembly statement, and is therefore
!      implicitly volatile, then the predicate ‘ASM_VOLATILE_P’ will hold
!      of the ‘ASM_EXPR’.
  
! ‘DECL_EXPR’
  
!      Used to represent a local declaration.  The ‘DECL_EXPR_DECL’ macro
       can be used to obtain the entity declared.  This declaration may be
!      a ‘LABEL_DECL’, indicating that the label declared is a local
       label.  (As an extension, GCC allows the declaration of labels with
!      scope.)  In C, this declaration may be a ‘FUNCTION_DECL’,
       indicating the use of the GCC nested function extension.  For more
       information, *note Functions::.
  
! ‘LABEL_EXPR’
  
!      Used to represent a label.  The ‘LABEL_DECL’ declared by this
!      statement can be obtained with the ‘LABEL_EXPR_LABEL’ macro.  The
!      ‘IDENTIFIER_NODE’ giving the name of the label can be obtained from
!      the ‘LABEL_DECL’ with ‘DECL_NAME’.
  
! ‘GOTO_EXPR’
  
!      Used to represent a ‘goto’ statement.  The ‘GOTO_DESTINATION’ will
!      usually be a ‘LABEL_DECL’.  However, if the "computed goto"
!      extension has been used, the ‘GOTO_DESTINATION’ will be an
       arbitrary expression indicating the destination.  This expression
       will always have pointer type.
  
! ‘RETURN_EXPR’
  
!      Used to represent a ‘return’ statement.  Operand 0 represents the
!      value to return.  It should either be the ‘RESULT_DECL’ for the
!      containing function, or a ‘MODIFY_EXPR’ or ‘INIT_EXPR’ setting the
!      function's ‘RESULT_DECL’.  It will be ‘NULL_TREE’ if the statement
       was just
            return;
  
! ‘LOOP_EXPR’
!      These nodes represent "infinite" loops.  The ‘LOOP_EXPR_BODY’
       represents the body of the loop.  It should be executed forever,
!      unless an ‘EXIT_EXPR’ is encountered.
  
! ‘EXIT_EXPR’
       These nodes represent conditional exits from the nearest enclosing
!      ‘LOOP_EXPR’.  The single operand is the condition; if it is
!      nonzero, then the loop should be exited.  An ‘EXIT_EXPR’ will only
!      appear within a ‘LOOP_EXPR’.
  
! ‘SWITCH_EXPR’
  
!      Used to represent a ‘switch’ statement.  The ‘SWITCH_COND’ is the
!      expression on which the switch is occurring.  The ‘SWITCH_BODY’ is
!      the body of the switch statement.  ‘SWITCH_ALL_CASES_P’ is true if
       the switch includes a default label or the case label ranges cover
       all possible values of the condition expression.
  
!      Note that ‘TREE_TYPE’ for a ‘SWITCH_EXPR’ represents the original
       type of switch expression as given in the source, before any
       compiler conversions, instead of the type of the switch expression
       itself (which is not meaningful).
  
! ‘CASE_LABEL_EXPR’
  
!      Use to represent a ‘case’ label, range of ‘case’ labels, or a
!      ‘default’ label.  If ‘CASE_LOW’ is ‘NULL_TREE’, then this is a
!      ‘default’ label.  Otherwise, if ‘CASE_HIGH’ is ‘NULL_TREE’, then
!      this is an ordinary ‘case’ label.  In this case, ‘CASE_LOW’ is an
!      expression giving the value of the label.  Both ‘CASE_LOW’ and
!      ‘CASE_HIGH’ are ‘INTEGER_CST’ nodes.  These values will have the
       same type as the condition expression in the switch statement.
  
!      Otherwise, if both ‘CASE_LOW’ and ‘CASE_HIGH’ are defined, the
       statement is a range of case labels.  Such statements originate
       with the extension that allows users to write things of the form:
            case 2 ... 5:
!      The first value will be ‘CASE_LOW’, while the second will be
!      ‘CASE_HIGH’.
  
! ‘DEBUG_BEGIN_STMT’
  
       Marks the beginning of a source statement, for purposes of debug
       information generation.
*************** File: gccint.info,  Node: Blocks,  Next:
*** 12326,12357 ****
  -------------
  
  Block scopes and the variables they declare in GENERIC are expressed
! using the 'BIND_EXPR' code, which in previous versions of GCC was
  primarily used for the C statement-expression extension.
  
!  Variables in a block are collected into 'BIND_EXPR_VARS' in declaration
! order through their 'TREE_CHAIN' field.  Any runtime initialization is
! moved out of 'DECL_INITIAL' and into a statement in the controlled
  block.  When gimplifying from C or C++, this initialization replaces the
! 'DECL_STMT'.  These variables will never require cleanups.  The scope of
  these variables is just the body
  
   Variable-length arrays (VLAs) complicate this process, as their size
  often refers to variables initialized earlier in the block and their
  initialization involves an explicit stack allocation.  To handle this,
  we add an indirection and replace them with a pointer to stack space
! allocated by means of 'alloca'.  In most cases, we also arrange for this
! space to be reclaimed when the enclosing 'BIND_EXPR' is exited, the
! exception to this being when there is an explicit call to 'alloca' in
  the source code, in which case the stack is left depressed on exit of
! the 'BIND_EXPR'.
  
!  A C++ program will usually contain more 'BIND_EXPR's than there are
  syntactic blocks in the source code, since several C++ constructs have
  implicit scopes associated with them.  On the other hand, although the
  C++ front end uses pseudo-scopes to handle cleanups for objects with
  destructors, these don't translate into the GIMPLE form; multiple
! declarations at the same level use the same 'BIND_EXPR'.
  
  
  File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
--- 12328,12359 ----
  -------------
  
  Block scopes and the variables they declare in GENERIC are expressed
! using the ‘BIND_EXPR’ code, which in previous versions of GCC was
  primarily used for the C statement-expression extension.
  
!  Variables in a block are collected into ‘BIND_EXPR_VARS’ in declaration
! order through their ‘TREE_CHAIN’ field.  Any runtime initialization is
! moved out of ‘DECL_INITIAL’ and into a statement in the controlled
  block.  When gimplifying from C or C++, this initialization replaces the
! ‘DECL_STMT’.  These variables will never require cleanups.  The scope of
  these variables is just the body
  
   Variable-length arrays (VLAs) complicate this process, as their size
  often refers to variables initialized earlier in the block and their
  initialization involves an explicit stack allocation.  To handle this,
  we add an indirection and replace them with a pointer to stack space
! allocated by means of ‘alloca’.  In most cases, we also arrange for this
! space to be reclaimed when the enclosing ‘BIND_EXPR’ is exited, the
! exception to this being when there is an explicit call to ‘alloca’ in
  the source code, in which case the stack is left depressed on exit of
! the ‘BIND_EXPR’.
  
!  A C++ program will usually contain more ‘BIND_EXPR’s than there are
  syntactic blocks in the source code, since several C++ constructs have
  implicit scopes associated with them.  On the other hand, although the
  C++ front end uses pseudo-scopes to handle cleanups for objects with
  destructors, these don't translate into the GIMPLE form; multiple
! declarations at the same level use the same ‘BIND_EXPR’.
  
  
  File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
*************** File: gccint.info,  Node: Statement Sequ
*** 12360,12367 ****
  --------------------------
  
  Multiple statements at the same nesting level are collected into a
! 'STATEMENT_LIST'.  Statement lists are modified and traversed using the
! interface in 'tree-iterator.h'.
  
  
  File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
--- 12362,12369 ----
  --------------------------
  
  Multiple statements at the same nesting level are collected into a
! ‘STATEMENT_LIST’.  Statement lists are modified and traversed using the
! interface in ‘tree-iterator.h’.
  
  
  File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
*************** File: gccint.info,  Node: Empty Statemen
*** 12372,12382 ****
  Whenever possible, statements with no effect are discarded.  But if they
  are nested within another construct which cannot be discarded for some
  reason, they are instead replaced with an empty statement, generated by
! 'build_empty_stmt'.  Initially, all empty statements were shared, after
  the pattern of the Java front end, but this caused a lot of trouble in
  practice.
  
!  An empty statement is represented as '(void)0'.
  
  
  File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
--- 12374,12384 ----
  Whenever possible, statements with no effect are discarded.  But if they
  are nested within another construct which cannot be discarded for some
  reason, they are instead replaced with an empty statement, generated by
! ‘build_empty_stmt’.  Initially, all empty statements were shared, after
  the pattern of the Java front end, but this caused a lot of trouble in
  practice.
  
!  An empty statement is represented as ‘(void)0’.
  
  
  File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
*************** File: gccint.info,  Node: Jumps,  Next:
*** 12384,12400 ****
  11.7.5 Jumps
  ------------
  
! Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'.
  
!  The operand of a 'GOTO_EXPR' must be either a label or a variable
  containing the address to jump to.
  
!  The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or
! a 'MODIFY_EXPR' which sets the return value.  It would be nice to move
! the 'MODIFY_EXPR' into a separate statement, but the special return
! semantics in 'expand_return' make that difficult.  It may still happen
  in the future, perhaps by moving most of that logic into
! 'expand_assignment'.
  
  
  File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
--- 12386,12402 ----
  11.7.5 Jumps
  ------------
  
! Other jumps are expressed by either ‘GOTO_EXPR’ or ‘RETURN_EXPR’.
  
!  The operand of a ‘GOTO_EXPR’ must be either a label or a variable
  containing the address to jump to.
  
!  The operand of a ‘RETURN_EXPR’ is either ‘NULL_TREE’, ‘RESULT_DECL’, or
! a ‘MODIFY_EXPR’ which sets the return value.  It would be nice to move
! the ‘MODIFY_EXPR’ into a separate statement, but the special return
! semantics in ‘expand_return’ make that difficult.  It may still happen
  in the future, perhaps by moving most of that logic into
! ‘expand_assignment’.
  
  
  File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
*************** File: gccint.info,  Node: Cleanups,  Nex
*** 12403,12409 ****
  ---------------
  
  Destructors for local C++ objects and similar dynamic cleanups are
! represented in GIMPLE by a 'TRY_FINALLY_EXPR'.  'TRY_FINALLY_EXPR' has
  two operands, both of which are a sequence of statements to execute.
  The first sequence is executed.  When it completes the second sequence
  is executed.
--- 12405,12411 ----
  ---------------
  
  Destructors for local C++ objects and similar dynamic cleanups are
! represented in GIMPLE by a ‘TRY_FINALLY_EXPR’.  ‘TRY_FINALLY_EXPR’ has
  two operands, both of which are a sequence of statements to execute.
  The first sequence is executed.  When it completes the second sequence
  is executed.
*************** is executed.
*** 12412,12427 ****
  
    1. Execute the last statement in the sequence and fall off the end.
  
!   2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside
       the sequence.
  
!   3. Execute a return statement ('RETURN_EXPR').
  
    4. Throw an exception.  This is currently not explicitly represented
       in GIMPLE.
  
   The second sequence is not executed if the first sequence completes by
! calling 'setjmp' or 'exit' or any other function that does not return.
  The second sequence is also not executed if the first sequence completes
  via a non-local goto or a computed goto (in general the compiler does
  not know whether such a goto statement exits the first sequence or not,
--- 12414,12429 ----
  
    1. Execute the last statement in the sequence and fall off the end.
  
!   2. Execute a goto statement (‘GOTO_EXPR’) to an ordinary label outside
       the sequence.
  
!   3. Execute a return statement (‘RETURN_EXPR’).
  
    4. Throw an exception.  This is currently not explicitly represented
       in GIMPLE.
  
   The second sequence is not executed if the first sequence completes by
! calling ‘setjmp’ or ‘exit’ or any other function that does not return.
  The second sequence is also not executed if the first sequence completes
  via a non-local goto or a computed goto (in general the compiler does
  not know whether such a goto statement exits the first sequence or not,
*************** so we assume that it doesn't).
*** 12431,12447 ****
  falling off the end, execution continues wherever the first sequence
  would have continued, by falling off the end, or doing a goto, etc.
  
!  If the second sequence is an 'EH_ELSE_EXPR' selector, then the sequence
  in its first operand is used when the first sequence completes normally,
  and that in its second operand is used for exceptional cleanups, i.e.,
  when an exception propagates out of the first sequence.
  
!  'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
  to appear on every edge out of the controlled block; this reduces the
  freedom to move code across these edges.  Therefore, the EH lowering
  pass which runs before most of the optimization passes eliminates these
  expressions by explicitly adding the cleanup to each edge.  Rethrowing
! the exception is represented using 'RESX_EXPR'.
  
  
  File: gccint.info,  Node: OpenMP,  Next: OpenACC,  Prev: Cleanups,  Up: Statements
--- 12433,12449 ----
  falling off the end, execution continues wherever the first sequence
  would have continued, by falling off the end, or doing a goto, etc.
  
!  If the second sequence is an ‘EH_ELSE_EXPR’ selector, then the sequence
  in its first operand is used when the first sequence completes normally,
  and that in its second operand is used for exceptional cleanups, i.e.,
  when an exception propagates out of the first sequence.
  
!  ‘TRY_FINALLY_EXPR’ complicates the flow graph, since the cleanup needs
  to appear on every edge out of the controlled block; this reduces the
  freedom to move code across these edges.  Therefore, the EH lowering
  pass which runs before most of the optimization passes eliminates these
  expressions by explicitly adding the cleanup to each edge.  Rethrowing
! the exception is represented using ‘RESX_EXPR’.
  
  
  File: gccint.info,  Node: OpenMP,  Next: OpenACC,  Prev: Cleanups,  Up: Statements
*************** File: gccint.info,  Node: OpenMP,  Next:
*** 12449,12489 ****
  11.7.7 OpenMP
  -------------
  
! All the statements starting with 'OMP_' represent directives and clauses
  used by the OpenMP API <https://www.openmp.org>.
  
! 'OMP_PARALLEL'
  
!      Represents '#pragma omp parallel [clause1 ... clauseN]'.  It has
       four operands:
  
!      Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High
       GIMPLE forms.  It contains the body of code to be executed by all
!      the threads.  During GIMPLE lowering, this operand becomes 'NULL'
!      and the body is emitted linearly after 'OMP_PARALLEL'.
  
!      Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated
       with the directive.
  
!      Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it
!      contains the 'FUNCTION_DECL' for the function that will contain the
       body of the parallel region.
  
!      Operand 'OMP_PARALLEL_DATA_ARG' is also created by
!      'pass_lower_omp'.  If there are shared variables to be communicated
!      to the children threads, this operand will contain the 'VAR_DECL'
       that contains all the shared values and variables.
  
! 'OMP_FOR'
! 'OMP_SIMD'
! 'OMP_DISTRIBUTE'
! 'OMP_TASKLOOP'
! 'OMP_LOOP'
  
!      Represents '#pragma omp for [clause1 ... clauseN]' and related loop
       constructs (respectively).
  
!      A single 'OMP_FOR' node represents an entire nest of collapsed
       loops; as noted below, some of its arguments are vectors of length
       equal to the collapse depth, and the corresponding elements holding
       data specific to a particular loop in the nest.  These vectors are
--- 12451,12491 ----
  11.7.7 OpenMP
  -------------
  
! All the statements starting with ‘OMP_’ represent directives and clauses
  used by the OpenMP API <https://www.openmp.org>.
  
! ‘OMP_PARALLEL’
  
!      Represents ‘#pragma omp parallel [clause1 ... clauseN]’.  It has
       four operands:
  
!      Operand ‘OMP_PARALLEL_BODY’ is valid while in GENERIC and High
       GIMPLE forms.  It contains the body of code to be executed by all
!      the threads.  During GIMPLE lowering, this operand becomes ‘NULL’
!      and the body is emitted linearly after ‘OMP_PARALLEL’.
  
!      Operand ‘OMP_PARALLEL_CLAUSES’ is the list of clauses associated
       with the directive.
  
!      Operand ‘OMP_PARALLEL_FN’ is created by ‘pass_lower_omp’, it
!      contains the ‘FUNCTION_DECL’ for the function that will contain the
       body of the parallel region.
  
!      Operand ‘OMP_PARALLEL_DATA_ARG’ is also created by
!      ‘pass_lower_omp’.  If there are shared variables to be communicated
!      to the children threads, this operand will contain the ‘VAR_DECL’
       that contains all the shared values and variables.
  
! ‘OMP_FOR’
! ‘OMP_SIMD’
! ‘OMP_DISTRIBUTE’
! ‘OMP_TASKLOOP’
! ‘OMP_LOOP’
  
!      Represents ‘#pragma omp for [clause1 ... clauseN]’ and related loop
       constructs (respectively).
  
!      A single ‘OMP_FOR’ node represents an entire nest of collapsed
       loops; as noted below, some of its arguments are vectors of length
       equal to the collapse depth, and the corresponding elements holding
       data specific to a particular loop in the nest.  These vectors are
*************** used by the OpenMP API <https://www.open
*** 12492,12533 ****
  
       These constructs have seven operands:
  
!      Operand 'OMP_FOR_BODY' contains the loop body.
  
!      Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with
       the directive.
  
!      Operand 'OMP_FOR_INIT' is a vector containing iteration variable
!      initializations of the form 'VAR = N1'.
  
!      Operand 'OMP_FOR_COND' is vector containing loop conditional
!      expressions of the form 'VAR {<,>,<=,>=,!=} N2'.
  
!      Operand 'OMP_FOR_INCR' is a vector containing loop index increment
!      expressions of the form 'VAR {+=,-=} INCR'.
  
!      Operand 'OMP_FOR_PRE_BODY' contains side effect code from operands
!      'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INCR'.  These side
!      effects are part of the 'OMP_FOR' block but must be evaluated
!      before the start of loop body.  'OMP_FOR_PRE_BODY' specifically
!      includes 'DECL_EXPR's for iteration variables that are declared in
!      the nested 'for' loops.  Note this field is not a vector; it may be
       null, but otherwise is usually a statement list collecting the side
       effect code from all the collapsed loops.
  
!      Operand 'OMP_FOR_ORIG_DECLS' holds 'VAR_DECLS' for the original
       user-specified iterator variables in the source code.  In some
!      cases, like C++ class iterators or range 'for' with decomposition,
!      the 'for' loop is rewritten by the front end to use a temporary
       iteration variable.  The purpose of this field is to make the
       original variables available to the gimplifier so it can adjust
       their data-sharing attributes and diagnose errors.
!      'OMP_FOR_ORIG_DECLS' is a vector field, with each element holding a
!      list of 'VAR_DECLS' for the corresponding collapse level.
  
!      The loop index variable 'VAR' must be an integer variable, which is
       implicitly private to each thread.  For rectangular loops, the
!      bounds 'N1' and 'N2' and the increment expression 'INCR' are
       required to be loop-invariant integer expressions that are
       evaluated without any synchronization.  The evaluation order,
       frequency of evaluation and side effects are otherwise unspecified
--- 12494,12535 ----
  
       These constructs have seven operands:
  
!      Operand ‘OMP_FOR_BODY’ contains the loop body.
  
!      Operand ‘OMP_FOR_CLAUSES’ is the list of clauses associated with
       the directive.
  
!      Operand ‘OMP_FOR_INIT’ is a vector containing iteration variable
!      initializations of the form ‘VAR = N1’.
  
!      Operand ‘OMP_FOR_COND’ is vector containing loop conditional
!      expressions of the form ‘VAR {<,>,<=,>=,!=} N2’.
  
!      Operand ‘OMP_FOR_INCR’ is a vector containing loop index increment
!      expressions of the form ‘VAR {+=,-=} INCR’.
  
!      Operand ‘OMP_FOR_PRE_BODY’ contains side effect code from operands
!      ‘OMP_FOR_INIT’, ‘OMP_FOR_COND’ and ‘OMP_FOR_INCR’.  These side
!      effects are part of the ‘OMP_FOR’ block but must be evaluated
!      before the start of loop body.  ‘OMP_FOR_PRE_BODY’ specifically
!      includes ‘DECL_EXPR’s for iteration variables that are declared in
!      the nested ‘for’ loops.  Note this field is not a vector; it may be
       null, but otherwise is usually a statement list collecting the side
       effect code from all the collapsed loops.
  
!      Operand ‘OMP_FOR_ORIG_DECLS’ holds ‘VAR_DECLS’ for the original
       user-specified iterator variables in the source code.  In some
!      cases, like C++ class iterators or range ‘for’ with decomposition,
!      the ‘for’ loop is rewritten by the front end to use a temporary
       iteration variable.  The purpose of this field is to make the
       original variables available to the gimplifier so it can adjust
       their data-sharing attributes and diagnose errors.
!      ‘OMP_FOR_ORIG_DECLS’ is a vector field, with each element holding a
!      list of ‘VAR_DECLS’ for the corresponding collapse level.
  
!      The loop index variable ‘VAR’ must be an integer variable, which is
       implicitly private to each thread.  For rectangular loops, the
!      bounds ‘N1’ and ‘N2’ and the increment expression ‘INCR’ are
       required to be loop-invariant integer expressions that are
       evaluated without any synchronization.  The evaluation order,
       frequency of evaluation and side effects are otherwise unspecified
*************** used by the OpenMP API <https://www.open
*** 12535,12618 ****
  
       For non-rectangular loops, in which the bounds of an inner loop
       depend on the index of an outer loop, the bit
!      'OMP_FOR_NON_RECTANGULAR' must be set.  In this case 'N1' and 'N2'
!      are not ordinary expressions, but instead a 'TREE_VEC' with three
!      elements: the 'DECL' for the outer loop variable, a multiplication
       factor, and an offset.
  
! 'OMP_SECTIONS'
  
!      Represents '#pragma omp sections [clause1 ... clauseN]'.
  
!      Operand 'OMP_SECTIONS_BODY' contains the sections body, which in
!      turn contains a set of 'OMP_SECTION' nodes for each of the
!      concurrent sections delimited by '#pragma omp section'.
  
!      Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated
       with the directive.
  
! 'OMP_SECTION'
  
!      Section delimiter for 'OMP_SECTIONS'.
  
! 'OMP_SINGLE'
  
!      Represents '#pragma omp single'.
  
!      Operand 'OMP_SINGLE_BODY' contains the body of code to be executed
       by a single thread.
  
!      Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with
       the directive.
  
! 'OMP_MASTER'
  
!      Represents '#pragma omp master'.
  
!      Operand 'OMP_MASTER_BODY' contains the body of code to be executed
       by the master thread.
  
! 'OMP_ORDERED'
  
!      Represents '#pragma omp ordered'.
  
!      Operand 'OMP_ORDERED_BODY' contains the body of code to be executed
       in the sequential order dictated by the loop index variable.
  
! 'OMP_CRITICAL'
  
!      Represents '#pragma omp critical [name]'.
  
!      Operand 'OMP_CRITICAL_BODY' is the critical section.
  
!      Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the
       critical section.
  
! 'OMP_RETURN'
  
       This does not represent any OpenMP directive, it is an artificial
       marker to indicate the end of the body of an OpenMP.  It is used by
!      the flow graph ('tree-cfg.cc') and OpenMP region building code
!      ('omp-low.cc').
  
! 'OMP_CONTINUE'
  
       Similarly, this instruction does not represent an OpenMP directive,
!      it is used by 'OMP_FOR' (and similar codes) as well as
!      'OMP_SECTIONS' to mark the place where the code needs to loop to
       the next iteration, or the next section, respectively.
  
!      In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'.
       But if there are cleanups that need to occur right after the
!      looping body, it will be emitted between 'OMP_CONTINUE' and
!      'OMP_RETURN'.
  
! 'OMP_STRUCTURED_BLOCK'
  
       This is another statement that doesn't correspond to an OpenMP
       directive.  It is used to mark sections of code in another
       directive that must be structured block sequences, in particular
!      for sequences of intervening code in the body of an 'OMP_FOR'.  It
       is not necessary to use this when the entire body of a directive is
       required to be a structured block sequence, since that is implicit
       in the representation of the corresponding node.
--- 12537,12620 ----
  
       For non-rectangular loops, in which the bounds of an inner loop
       depend on the index of an outer loop, the bit
!      ‘OMP_FOR_NON_RECTANGULAR’ must be set.  In this case ‘N1’ and ‘N2’
!      are not ordinary expressions, but instead a ‘TREE_VEC’ with three
!      elements: the ‘DECL’ for the outer loop variable, a multiplication
       factor, and an offset.
  
! ‘OMP_SECTIONS’
  
!      Represents ‘#pragma omp sections [clause1 ... clauseN]’.
  
!      Operand ‘OMP_SECTIONS_BODY’ contains the sections body, which in
!      turn contains a set of ‘OMP_SECTION’ nodes for each of the
!      concurrent sections delimited by ‘#pragma omp section’.
  
!      Operand ‘OMP_SECTIONS_CLAUSES’ is the list of clauses associated
       with the directive.
  
! ‘OMP_SECTION’
  
!      Section delimiter for ‘OMP_SECTIONS’.
  
! ‘OMP_SINGLE’
  
!      Represents ‘#pragma omp single’.
  
!      Operand ‘OMP_SINGLE_BODY’ contains the body of code to be executed
       by a single thread.
  
!      Operand ‘OMP_SINGLE_CLAUSES’ is the list of clauses associated with
       the directive.
  
! ‘OMP_MASTER’
  
!      Represents ‘#pragma omp master’.
  
!      Operand ‘OMP_MASTER_BODY’ contains the body of code to be executed
       by the master thread.
  
! ‘OMP_ORDERED’
  
!      Represents ‘#pragma omp ordered’.
  
!      Operand ‘OMP_ORDERED_BODY’ contains the body of code to be executed
       in the sequential order dictated by the loop index variable.
  
! ‘OMP_CRITICAL’
  
!      Represents ‘#pragma omp critical [name]’.
  
!      Operand ‘OMP_CRITICAL_BODY’ is the critical section.
  
!      Operand ‘OMP_CRITICAL_NAME’ is an optional identifier to label the
       critical section.
  
! ‘OMP_RETURN’
  
       This does not represent any OpenMP directive, it is an artificial
       marker to indicate the end of the body of an OpenMP.  It is used by
!      the flow graph (‘tree-cfg.cc’) and OpenMP region building code
!      (‘omp-low.cc’).
  
! ‘OMP_CONTINUE’
  
       Similarly, this instruction does not represent an OpenMP directive,
!      it is used by ‘OMP_FOR’ (and similar codes) as well as
!      ‘OMP_SECTIONS’ to mark the place where the code needs to loop to
       the next iteration, or the next section, respectively.
  
!      In some cases, ‘OMP_CONTINUE’ is placed right before ‘OMP_RETURN’.
       But if there are cleanups that need to occur right after the
!      looping body, it will be emitted between ‘OMP_CONTINUE’ and
!      ‘OMP_RETURN’.
  
! ‘OMP_STRUCTURED_BLOCK’
  
       This is another statement that doesn't correspond to an OpenMP
       directive.  It is used to mark sections of code in another
       directive that must be structured block sequences, in particular
!      for sequences of intervening code in the body of an ‘OMP_FOR’.  It
       is not necessary to use this when the entire body of a directive is
       required to be a structured block sequence, since that is implicit
       in the representation of the corresponding node.
*************** used by the OpenMP API <https://www.open
*** 12620,12631 ****
       This tree node is used only to allow error checking transfers of
       control in/out of the structured block sequence after
       gimplification.  It has a single operand
!      ('OMP_STRUCTURED_BLOCK_BODY') that is the code within the
       structured block sequence.
  
! 'OMP_ATOMIC'
  
!      Represents '#pragma omp atomic'.
  
       Operand 0 is the address at which the atomic operation is to be
       performed.
--- 12622,12633 ----
       This tree node is used only to allow error checking transfers of
       control in/out of the structured block sequence after
       gimplification.  It has a single operand
!      (‘OMP_STRUCTURED_BLOCK_BODY’) that is the code within the
       structured block sequence.
  
! ‘OMP_ATOMIC’
  
!      Represents ‘#pragma omp atomic’.
  
       Operand 0 is the address at which the atomic operation is to be
       performed.
*************** used by the OpenMP API <https://www.open
*** 12636,12660 ****
       compare-and-swap loop is attempted.  If that also fails, a regular
       critical section around the expression is used.
  
! 'OMP_CLAUSE'
  
!      Represents clauses associated with one of the 'OMP_' directives.
!      Clauses are represented by separate subcodes defined in 'tree.h'.
!      Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE',
!      'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE',
!      'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN',
!      'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF',
!      'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE',
!      'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT',
!      'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED',
!      'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'.  Each code
       represents the corresponding OpenMP clause.
  
       Clauses associated with the same directive are chained together via
!      'OMP_CLAUSE_CHAIN'.  Those clauses that accept a list of variables
!      are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'.
!      Therefore, multiple variables under the same clause 'C' need to be
!      represented as multiple 'C' clauses chained together.  This
       facilitates adding new clauses during compilation.
  
  
--- 12638,12662 ----
       compare-and-swap loop is attempted.  If that also fails, a regular
       critical section around the expression is used.
  
! ‘OMP_CLAUSE’
  
!      Represents clauses associated with one of the ‘OMP_’ directives.
!      Clauses are represented by separate subcodes defined in ‘tree.h’.
!      Clauses codes can be one of: ‘OMP_CLAUSE_PRIVATE’,
!      ‘OMP_CLAUSE_SHARED’, ‘OMP_CLAUSE_FIRSTPRIVATE’,
!      ‘OMP_CLAUSE_LASTPRIVATE’, ‘OMP_CLAUSE_COPYIN’,
!      ‘OMP_CLAUSE_COPYPRIVATE’, ‘OMP_CLAUSE_IF’,
!      ‘OMP_CLAUSE_NUM_THREADS’, ‘OMP_CLAUSE_SCHEDULE’,
!      ‘OMP_CLAUSE_NOWAIT’, ‘OMP_CLAUSE_ORDERED’, ‘OMP_CLAUSE_DEFAULT’,
!      ‘OMP_CLAUSE_REDUCTION’, ‘OMP_CLAUSE_COLLAPSE’, ‘OMP_CLAUSE_UNTIED’,
!      ‘OMP_CLAUSE_FINAL’, and ‘OMP_CLAUSE_MERGEABLE’.  Each code
       represents the corresponding OpenMP clause.
  
       Clauses associated with the same directive are chained together via
!      ‘OMP_CLAUSE_CHAIN’.  Those clauses that accept a list of variables
!      are restricted to exactly one, accessed with ‘OMP_CLAUSE_VAR’.
!      Therefore, multiple variables under the same clause ‘C’ need to be
!      represented as multiple ‘C’ clauses chained together.  This
       facilitates adding new clauses during compilation.
  
  
*************** File: gccint.info,  Node: OpenACC,  Prev
*** 12663,12716 ****
  11.7.8 OpenACC
  --------------
  
! All the statements starting with 'OACC_' represent directives and
  clauses used by the OpenACC API <https://www.openacc.org>.
  
! 'OACC_CACHE'
  
!      Represents '#pragma acc cache (var ...)'.
  
! 'OACC_DATA'
  
!      Represents '#pragma acc data [clause1 ... clauseN]'.
  
! 'OACC_DECLARE'
  
!      Represents '#pragma acc declare [clause1 ... clauseN]'.
  
! 'OACC_ENTER_DATA'
  
!      Represents '#pragma acc enter data [clause1 ... clauseN]'.
  
! 'OACC_EXIT_DATA'
  
!      Represents '#pragma acc exit data [clause1 ... clauseN]'.
  
! 'OACC_HOST_DATA'
  
!      Represents '#pragma acc host_data [clause1 ... clauseN]'.
  
! 'OACC_KERNELS'
  
!      Represents '#pragma acc kernels [clause1 ... clauseN]'.
  
! 'OACC_LOOP'
  
!      Represents '#pragma acc loop [clause1 ... clauseN]'.
  
!      See the description of the 'OMP_FOR' code.
  
! 'OACC_PARALLEL'
  
!      Represents '#pragma acc parallel [clause1 ... clauseN]'.
  
! 'OACC_SERIAL'
  
!      Represents '#pragma acc serial [clause1 ... clauseN]'.
  
! 'OACC_UPDATE'
  
!      Represents '#pragma acc update [clause1 ... clauseN]'.
  
  
  File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
--- 12665,12718 ----
  11.7.8 OpenACC
  --------------
  
! All the statements starting with ‘OACC_’ represent directives and
  clauses used by the OpenACC API <https://www.openacc.org>.
  
! ‘OACC_CACHE’
  
!      Represents ‘#pragma acc cache (var ...)’.
  
! ‘OACC_DATA’
  
!      Represents ‘#pragma acc data [clause1 ... clauseN]’.
  
! ‘OACC_DECLARE’
  
!      Represents ‘#pragma acc declare [clause1 ... clauseN]’.
  
! ‘OACC_ENTER_DATA’
  
!      Represents ‘#pragma acc enter data [clause1 ... clauseN]’.
  
! ‘OACC_EXIT_DATA’
  
!      Represents ‘#pragma acc exit data [clause1 ... clauseN]’.
  
! ‘OACC_HOST_DATA’
  
!      Represents ‘#pragma acc host_data [clause1 ... clauseN]’.
  
! ‘OACC_KERNELS’
  
!      Represents ‘#pragma acc kernels [clause1 ... clauseN]’.
  
! ‘OACC_LOOP’
  
!      Represents ‘#pragma acc loop [clause1 ... clauseN]’.
  
!      See the description of the ‘OMP_FOR’ code.
  
! ‘OACC_PARALLEL’
  
!      Represents ‘#pragma acc parallel [clause1 ... clauseN]’.
  
! ‘OACC_SERIAL’
  
!      Represents ‘#pragma acc serial [clause1 ... clauseN]’.
  
! ‘OACC_UPDATE’
  
!      Represents ‘#pragma acc update [clause1 ... clauseN]’.
  
  
  File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
*************** File: gccint.info,  Node: Functions,  Ne
*** 12718,12724 ****
  11.8 Functions
  ==============
  
! A function is represented by a 'FUNCTION_DECL' node.  It stores the
  basic pieces of the function such as body, parameters, and return type
  as well as information on the surrounding context, visibility, and
  linkage.
--- 12720,12726 ----
  11.8 Functions
  ==============
  
! A function is represented by a ‘FUNCTION_DECL’ node.  It stores the
  basic pieces of the function such as body, parameters, and return type
  as well as information on the surrounding context, visibility, and
  linkage.
*************** File: gccint.info,  Node: Function Basic
*** 12736,12795 ****
  
  A function has four core parts: the name, the parameters, the result,
  and the body.  The following macros and functions access these parts of
! a 'FUNCTION_DECL' as well as other basic features:
! 'DECL_NAME'
       This macro returns the unqualified name of the function, as an
!      'IDENTIFIER_NODE'.  For an instantiation of a function template,
!      the 'DECL_NAME' is the unqualified name of the template, not
!      something like 'f<int>'.  The value of 'DECL_NAME' is undefined
       when used on a constructor, destructor, overloaded operator, or
       type-conversion operator, or any function that is implicitly
       generated by the compiler.  See below for macros that can be used
       to distinguish these cases.
  
! 'DECL_ASSEMBLER_NAME'
       This macro returns the mangled name of the function, also an
!      'IDENTIFIER_NODE'.  This name does not contain leading underscores
       on systems that prefix all identifiers with underscores.  The
       mangled name is computed in the same way on all platforms; if
       special processing is required to deal with the object file format
       used on a particular platform, it is the responsibility of the back
       end to perform those modifications.  (Of course, the back end
!      should not modify 'DECL_ASSEMBLER_NAME' itself.)
  
!      Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be
       allocated (for the mangled name of the entity) so it should be used
       only when emitting assembly code.  It should not be used within the
       optimizers to determine whether or not two declarations are the
       same, even though some of the existing optimizers do use it in that
       way.  These uses will be removed over time.
  
! 'DECL_ARGUMENTS'
!      This macro returns the 'PARM_DECL' for the first argument to the
!      function.  Subsequent 'PARM_DECL' nodes can be obtained by
!      following the 'TREE_CHAIN' links.
  
! 'DECL_RESULT'
!      This macro returns the 'RESULT_DECL' for the function.
  
! 'DECL_SAVED_TREE'
       This macro returns the complete body of the function.
  
! 'TREE_TYPE'
!      This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the
       function.
  
! 'DECL_INITIAL'
       A function that has a definition in the current translation unit
!      will have a non-'NULL' 'DECL_INITIAL'.  However, back ends should
!      not make use of the particular value given by 'DECL_INITIAL'.
  
!      It should contain a tree of 'BLOCK' nodes that mirrors the scopes
       that variables are bound in the function.  Each block contains a
       list of decls declared in a basic block, a pointer to a chain of
       blocks at the next lower scope level, then a pointer to the next
!      block at the same level and a backpointer to the parent 'BLOCK' or
!      'FUNCTION_DECL'.  So given a function as follows:
  
            void foo()
            {
--- 12738,12797 ----
  
  A function has four core parts: the name, the parameters, the result,
  and the body.  The following macros and functions access these parts of
! a ‘FUNCTION_DECL’ as well as other basic features:
! ‘DECL_NAME’
       This macro returns the unqualified name of the function, as an
!      ‘IDENTIFIER_NODE’.  For an instantiation of a function template,
!      the ‘DECL_NAME’ is the unqualified name of the template, not
!      something like ‘f<int>’.  The value of ‘DECL_NAME’ is undefined
       when used on a constructor, destructor, overloaded operator, or
       type-conversion operator, or any function that is implicitly
       generated by the compiler.  See below for macros that can be used
       to distinguish these cases.
  
! ‘DECL_ASSEMBLER_NAME’
       This macro returns the mangled name of the function, also an
!      ‘IDENTIFIER_NODE’.  This name does not contain leading underscores
       on systems that prefix all identifiers with underscores.  The
       mangled name is computed in the same way on all platforms; if
       special processing is required to deal with the object file format
       used on a particular platform, it is the responsibility of the back
       end to perform those modifications.  (Of course, the back end
!      should not modify ‘DECL_ASSEMBLER_NAME’ itself.)
  
!      Using ‘DECL_ASSEMBLER_NAME’ will cause additional memory to be
       allocated (for the mangled name of the entity) so it should be used
       only when emitting assembly code.  It should not be used within the
       optimizers to determine whether or not two declarations are the
       same, even though some of the existing optimizers do use it in that
       way.  These uses will be removed over time.
  
! ‘DECL_ARGUMENTS’
!      This macro returns the ‘PARM_DECL’ for the first argument to the
!      function.  Subsequent ‘PARM_DECL’ nodes can be obtained by
!      following the ‘TREE_CHAIN’ links.
  
! ‘DECL_RESULT’
!      This macro returns the ‘RESULT_DECL’ for the function.
  
! ‘DECL_SAVED_TREE’
       This macro returns the complete body of the function.
  
! ‘TREE_TYPE’
!      This macro returns the ‘FUNCTION_TYPE’ or ‘METHOD_TYPE’ for the
       function.
  
! ‘DECL_INITIAL’
       A function that has a definition in the current translation unit
!      will have a non-‘NULL’ ‘DECL_INITIAL’.  However, back ends should
!      not make use of the particular value given by ‘DECL_INITIAL’.
  
!      It should contain a tree of ‘BLOCK’ nodes that mirrors the scopes
       that variables are bound in the function.  Each block contains a
       list of decls declared in a basic block, a pointer to a chain of
       blocks at the next lower scope level, then a pointer to the next
!      block at the same level and a backpointer to the parent ‘BLOCK’ or
!      ‘FUNCTION_DECL’.  So given a function as follows:
  
            void foo()
            {
*************** File: gccint.info,  Node: Function Prope
*** 12825,12872 ****
  11.8.2 Function Properties
  --------------------------
  
! To determine the scope of a function, you can use the 'DECL_CONTEXT'
! macro.  This macro will return the class (either a 'RECORD_TYPE' or a
! 'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
  a member.  For a virtual function, this macro returns the class in which
  the function was actually defined, not the base class in which the
  virtual declaration occurred.
  
!  In C, the 'DECL_CONTEXT' for a function maybe another function.  This
  representation indicates that the GNU nested function extension is in
  use.  For details on the semantics of nested functions, see the GCC
  Manual.  The nested function can refer to local variables in its
  containing function.  Such references are not explicitly marked in the
! tree structure; back ends must look at the 'DECL_CONTEXT' for the
! referenced 'VAR_DECL'.  If the 'DECL_CONTEXT' for the referenced
! 'VAR_DECL' is not the same as the function currently being processed,
! and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference
  is to a local variable in a containing function, and the back end must
  take appropriate action.
  
! 'DECL_EXTERNAL'
       This predicate holds if the function is undefined.
  
! 'TREE_PUBLIC'
       This predicate holds if the function has external linkage.
  
! 'TREE_STATIC'
       This predicate holds if the function has been defined.
  
! 'TREE_THIS_VOLATILE'
       This predicate holds if the function does not return normally.
  
! 'TREE_READONLY'
       This predicate holds if the function can only read its arguments.
  
! 'DECL_PURE_P'
       This predicate holds if the function can only read its arguments,
       but may also read global memory.
  
! 'DECL_VIRTUAL_P'
       This predicate holds if the function is virtual.
  
! 'DECL_ARTIFICIAL'
       This macro holds if the function was implicitly generated by the
       compiler, rather than explicitly declared.  In addition to
       implicitly generated class member functions, this macro holds for
--- 12827,12874 ----
  11.8.2 Function Properties
  --------------------------
  
! To determine the scope of a function, you can use the ‘DECL_CONTEXT’
! macro.  This macro will return the class (either a ‘RECORD_TYPE’ or a
! ‘UNION_TYPE’) or namespace (a ‘NAMESPACE_DECL’) of which the function is
  a member.  For a virtual function, this macro returns the class in which
  the function was actually defined, not the base class in which the
  virtual declaration occurred.
  
!  In C, the ‘DECL_CONTEXT’ for a function maybe another function.  This
  representation indicates that the GNU nested function extension is in
  use.  For details on the semantics of nested functions, see the GCC
  Manual.  The nested function can refer to local variables in its
  containing function.  Such references are not explicitly marked in the
! tree structure; back ends must look at the ‘DECL_CONTEXT’ for the
! referenced ‘VAR_DECL’.  If the ‘DECL_CONTEXT’ for the referenced
! ‘VAR_DECL’ is not the same as the function currently being processed,
! and neither ‘DECL_EXTERNAL’ nor ‘TREE_STATIC’ hold, then the reference
  is to a local variable in a containing function, and the back end must
  take appropriate action.
  
! ‘DECL_EXTERNAL’
       This predicate holds if the function is undefined.
  
! ‘TREE_PUBLIC’
       This predicate holds if the function has external linkage.
  
! ‘TREE_STATIC’
       This predicate holds if the function has been defined.
  
! ‘TREE_THIS_VOLATILE’
       This predicate holds if the function does not return normally.
  
! ‘TREE_READONLY’
       This predicate holds if the function can only read its arguments.
  
! ‘DECL_PURE_P’
       This predicate holds if the function can only read its arguments,
       but may also read global memory.
  
! ‘DECL_VIRTUAL_P’
       This predicate holds if the function is virtual.
  
! ‘DECL_ARTIFICIAL’
       This macro holds if the function was implicitly generated by the
       compiler, rather than explicitly declared.  In addition to
       implicitly generated class member functions, this macro holds for
*************** take appropriate action.
*** 12874,12889 ****
       and destruction, to compute run-time type information, and so
       forth.
  
! 'DECL_FUNCTION_SPECIFIC_TARGET'
       This macro returns a tree node that holds the target options that
!      are to be used to compile this particular function or 'NULL_TREE'
       if the function is to be compiled with the target options specified
       on the command line.
  
! 'DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
       This macro returns a tree node that holds the optimization options
       that are to be used to compile this particular function or
!      'NULL_TREE' if the function is to be compiled with the optimization
       options specified on the command line.
  
  
--- 12876,12891 ----
       and destruction, to compute run-time type information, and so
       forth.
  
! ‘DECL_FUNCTION_SPECIFIC_TARGET’
       This macro returns a tree node that holds the target options that
!      are to be used to compile this particular function or ‘NULL_TREE’
       if the function is to be compiled with the target options specified
       on the command line.
  
! ‘DECL_FUNCTION_SPECIFIC_OPTIMIZATION’
       This macro returns a tree node that holds the optimization options
       that are to be used to compile this particular function or
!      ‘NULL_TREE’ if the function is to be compiled with the optimization
       options specified on the command line.
  
  
*************** File: gccint.info,  Node: Language-depen
*** 12895,12901 ****
  Front ends may wish to keep some state associated with various GENERIC
  trees while parsing.  To support this, trees provide a set of flags that
  may be used by the front end.  They are accessed using
! 'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6.
  
   If necessary, a front end can use some language-dependent tree codes in
  its GENERIC representation, so long as it provides a hook for converting
--- 12897,12903 ----
  Front ends may wish to keep some state associated with various GENERIC
  trees while parsing.  To support this, trees provide a set of flags that
  may be used by the front end.  They are accessed using
! ‘TREE_LANG_FLAG_n’ where ‘n’ is currently 0 through 6.
  
   If necessary, a front end can use some language-dependent tree codes in
  its GENERIC representation, so long as it provides a hook for converting
*************** submit your patches for inclusion in GCC
*** 12959,12965 ****
  * Classes::                     Classes.
  * Functions for C++::           Overloading and accessors for C++.
  * Statements for C and C++::    Statements specific to C and C++.
! * C++ Expressions::    From 'typeid' to 'throw'.
  
  
  File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
--- 12961,12967 ----
  * Classes::                     Classes.
  * Functions for C++::           Overloading and accessors for C++.
  * Statements for C and C++::    Statements specific to C and C++.
! * C++ Expressions::    From ‘typeid’ to ‘throw’.
  
  
  File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
*************** representation.  The macros described he
*** 12973,13085 ****
  qualification of the underlying element type when applied to an array
  type.  (If the element type is itself an array, then the recursion
  continues until a non-array type is found, and the qualification of this
! type is examined.)  So, for example, 'CP_TYPE_CONST_P' will hold of the
! type 'const int ()[7]', denoting an array of seven 'int's.
  
   The following functions and macros deal with cv-qualification of types:
! 'cp_type_quals'
       This function returns the set of type qualifiers applied to this
!      type.  This value is 'TYPE_UNQUALIFIED' if no qualifiers have been
!      applied.  The 'TYPE_QUAL_CONST' bit is set if the type is
!      'const'-qualified.  The 'TYPE_QUAL_VOLATILE' bit is set if the type
!      is 'volatile'-qualified.  The 'TYPE_QUAL_RESTRICT' bit is set if
!      the type is 'restrict'-qualified.
  
! 'CP_TYPE_CONST_P'
!      This macro holds if the type is 'const'-qualified.
  
! 'CP_TYPE_VOLATILE_P'
!      This macro holds if the type is 'volatile'-qualified.
  
! 'CP_TYPE_RESTRICT_P'
!      This macro holds if the type is 'restrict'-qualified.
  
! 'CP_TYPE_CONST_NON_VOLATILE_P'
!      This predicate holds for a type that is 'const'-qualified, but
!      _not_ 'volatile'-qualified; other cv-qualifiers are ignored as
!      well: only the 'const'-ness is tested.
  
   A few other macros and functions are usable with all types:
! 'TYPE_SIZE'
       The number of bits required to represent the type, represented as
!      an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
!      'NULL_TREE'.
  
! 'TYPE_ALIGN'
!      The alignment of the type, in bits, represented as an 'int'.
  
! 'TYPE_NAME'
!      This macro returns a declaration (in the form of a 'TYPE_DECL') for
!      the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
       as you might expect, given its name!)  You can look at the
!      'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
!      type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
       built-in type, the result of a typedef, or a named class type.
  
! 'CP_INTEGRAL_TYPE'
       This predicate holds if the type is an integral type.  Notice that
       in C++, enumerations are _not_ integral types.
  
! 'ARITHMETIC_TYPE_P'
       This predicate holds if the type is an integral type (in the C++
       sense) or a floating point type.
  
! 'CLASS_TYPE_P'
       This predicate holds for a class-type.
  
! 'TYPE_BUILT_IN'
       This predicate holds for a built-in type.
  
! 'TYPE_PTRDATAMEM_P'
       This predicate holds if the type is a pointer to data member.
  
! 'TYPE_PTR_P'
       This predicate holds if the type is a pointer type, and the pointee
       is not a data member.
  
! 'TYPE_PTRFN_P'
       This predicate holds for a pointer to function type.
  
! 'TYPE_PTROB_P'
       This predicate holds for a pointer to object type.  Note however
!      that it does not hold for the generic pointer to object type 'void
!      *'.  You may use 'TYPE_PTROBV_P' to test for a pointer to object
!      type as well as 'void *'.
  
   The table below describes types specific to C and C++ as well as
  language-dependent info about GENERIC types.
  
! 'POINTER_TYPE'
       Used to represent pointer types, and pointer to data member types.
!      If 'TREE_TYPE' is a pointer to data member type, then
!      'TYPE_PTRDATAMEM_P' will hold.  For a pointer to data member type
!      of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type
!      'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'.
  
! 'RECORD_TYPE'
!      Used to represent 'struct' and 'class' types in C and C++.  If
!      'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
!      type.  In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a
!      'POINTER_TYPE' pointing to a 'METHOD_TYPE'.  The 'METHOD_TYPE' is
       the type of a function pointed to by the pointer-to-member
!      function.  If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a
       class type.  For more information, *note Classes::.
  
! 'UNKNOWN_TYPE'
       This node is used to represent a type the knowledge of which is
       insufficient for a sound processing.
  
! 'TYPENAME_TYPE'
!      Used to represent a construct of the form 'typename T::A'.  The
!      'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for
!      'A'.  If the type is specified via a template-id, then
!      'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'.  The
!      'TREE_TYPE' is non-'NULL' if the node is implicitly generated in
       support for the implicit typename extension; in which case the
!      'TREE_TYPE' is a type node for the base-class.
  
! 'TYPEOF_TYPE'
!      Used to represent the '__typeof__' extension.  The 'TYPE_FIELDS' is
       the expression the type of which is being represented.
  
  
--- 12975,13087 ----
  qualification of the underlying element type when applied to an array
  type.  (If the element type is itself an array, then the recursion
  continues until a non-array type is found, and the qualification of this
! type is examined.)  So, for example, ‘CP_TYPE_CONST_P’ will hold of the
! type ‘const int ()[7]’, denoting an array of seven ‘int’s.
  
   The following functions and macros deal with cv-qualification of types:
! ‘cp_type_quals’
       This function returns the set of type qualifiers applied to this
!      type.  This value is ‘TYPE_UNQUALIFIED’ if no qualifiers have been
!      applied.  The ‘TYPE_QUAL_CONST’ bit is set if the type is
!      ‘const’-qualified.  The ‘TYPE_QUAL_VOLATILE’ bit is set if the type
!      is ‘volatile’-qualified.  The ‘TYPE_QUAL_RESTRICT’ bit is set if
!      the type is ‘restrict’-qualified.
  
! ‘CP_TYPE_CONST_P’
!      This macro holds if the type is ‘const’-qualified.
  
! ‘CP_TYPE_VOLATILE_P’
!      This macro holds if the type is ‘volatile’-qualified.
  
! ‘CP_TYPE_RESTRICT_P’
!      This macro holds if the type is ‘restrict’-qualified.
  
! ‘CP_TYPE_CONST_NON_VOLATILE_P’
!      This predicate holds for a type that is ‘const’-qualified, but
!      _not_ ‘volatile’-qualified; other cv-qualifiers are ignored as
!      well: only the ‘const’-ness is tested.
  
   A few other macros and functions are usable with all types:
! ‘TYPE_SIZE’
       The number of bits required to represent the type, represented as
!      an ‘INTEGER_CST’.  For an incomplete type, ‘TYPE_SIZE’ will be
!      ‘NULL_TREE’.
  
! ‘TYPE_ALIGN’
!      The alignment of the type, in bits, represented as an ‘int’.
  
! ‘TYPE_NAME’
!      This macro returns a declaration (in the form of a ‘TYPE_DECL’) for
!      the type.  (Note this macro does _not_ return an ‘IDENTIFIER_NODE’,
       as you might expect, given its name!)  You can look at the
!      ‘DECL_NAME’ of the ‘TYPE_DECL’ to obtain the actual name of the
!      type.  The ‘TYPE_NAME’ will be ‘NULL_TREE’ for a type that is not a
       built-in type, the result of a typedef, or a named class type.
  
! ‘CP_INTEGRAL_TYPE’
       This predicate holds if the type is an integral type.  Notice that
       in C++, enumerations are _not_ integral types.
  
! ‘ARITHMETIC_TYPE_P’
       This predicate holds if the type is an integral type (in the C++
       sense) or a floating point type.
  
! ‘CLASS_TYPE_P’
       This predicate holds for a class-type.
  
! ‘TYPE_BUILT_IN’
       This predicate holds for a built-in type.
  
! ‘TYPE_PTRDATAMEM_P’
       This predicate holds if the type is a pointer to data member.
  
! ‘TYPE_PTR_P’
       This predicate holds if the type is a pointer type, and the pointee
       is not a data member.
  
! ‘TYPE_PTRFN_P’
       This predicate holds for a pointer to function type.
  
! ‘TYPE_PTROB_P’
       This predicate holds for a pointer to object type.  Note however
!      that it does not hold for the generic pointer to object type ‘void
!      *’.  You may use ‘TYPE_PTROBV_P’ to test for a pointer to object
!      type as well as ‘void *’.
  
   The table below describes types specific to C and C++ as well as
  language-dependent info about GENERIC types.
  
! ‘POINTER_TYPE’
       Used to represent pointer types, and pointer to data member types.
!      If ‘TREE_TYPE’ is a pointer to data member type, then
!      ‘TYPE_PTRDATAMEM_P’ will hold.  For a pointer to data member type
!      of the form ‘T X::*’, ‘TYPE_PTRMEM_CLASS_TYPE’ will be the type
!      ‘X’, while ‘TYPE_PTRMEM_POINTED_TO_TYPE’ will be the type ‘T’.
  
! ‘RECORD_TYPE’
!      Used to represent ‘struct’ and ‘class’ types in C and C++.  If
!      ‘TYPE_PTRMEMFUNC_P’ holds, then this type is a pointer-to-member
!      type.  In that case, the ‘TYPE_PTRMEMFUNC_FN_TYPE’ is a
!      ‘POINTER_TYPE’ pointing to a ‘METHOD_TYPE’.  The ‘METHOD_TYPE’ is
       the type of a function pointed to by the pointer-to-member
!      function.  If ‘TYPE_PTRMEMFUNC_P’ does not hold, this type is a
       class type.  For more information, *note Classes::.
  
! ‘UNKNOWN_TYPE’
       This node is used to represent a type the knowledge of which is
       insufficient for a sound processing.
  
! ‘TYPENAME_TYPE’
!      Used to represent a construct of the form ‘typename T::A’.  The
!      ‘TYPE_CONTEXT’ is ‘T’; the ‘TYPE_NAME’ is an ‘IDENTIFIER_NODE’ for
!      ‘A’.  If the type is specified via a template-id, then
!      ‘TYPENAME_TYPE_FULLNAME’ yields a ‘TEMPLATE_ID_EXPR’.  The
!      ‘TREE_TYPE’ is non-‘NULL’ if the node is implicitly generated in
       support for the implicit typename extension; in which case the
!      ‘TREE_TYPE’ is a type node for the base-class.
  
! ‘TYPEOF_TYPE’
!      Used to represent the ‘__typeof__’ extension.  The ‘TYPE_FIELDS’ is
       the expression the type of which is being represented.
  
  
*************** File: gccint.info,  Node: Namespaces,  N
*** 13089,13095 ****
  ------------------
  
  The root of the entire intermediate representation is the variable
! 'global_namespace'.  This is the namespace specified with '::' in C++
  source code.  All other namespaces, types, variables, functions, and so
  forth can be found starting with this namespace.
  
--- 13091,13097 ----
  ------------------
  
  The root of the entire intermediate representation is the variable
! ‘global_namespace’.  This is the namespace specified with ‘::’ in C++
  source code.  All other namespaces, types, variables, functions, and so
  forth can be found starting with this namespace.
  
*************** the representation, the global namespace
*** 13098,13157 ****
  namespace.  Thus, in what follows, we describe namespaces generally,
  rather than the global namespace in particular.
  
!  A namespace is represented by a 'NAMESPACE_DECL' node.
  
!  The following macros and functions can be used on a 'NAMESPACE_DECL':
  
! 'DECL_NAME'
!      This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to
       the unqualified name of the name of the namespace (*note
!      Identifiers::).  The name of the global namespace is '::', even
       though in C++ the global namespace is unnamed.  However, you should
!      use comparison with 'global_namespace', rather than 'DECL_NAME' to
       determine whether or not a namespace is the global one.  An unnamed
!      namespace will have a 'DECL_NAME' equal to
!      'anonymous_namespace_name'.  Within a single translation unit, all
       unnamed namespaces will have the same name.
  
! 'DECL_CONTEXT'
!      This macro returns the enclosing namespace.  The 'DECL_CONTEXT' for
!      the 'global_namespace' is 'NULL_TREE'.
  
! 'DECL_NAMESPACE_ALIAS'
       If this declaration is for a namespace alias, then
!      'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
       alias.
  
!      Do not attempt to use 'cp_namespace_decls' for a namespace which is
!      an alias.  Instead, follow 'DECL_NAMESPACE_ALIAS' links until you
       reach an ordinary, non-alias, namespace, and call
!      'cp_namespace_decls' there.
  
! 'DECL_NAMESPACE_STD_P'
!      This predicate holds if the namespace is the special '::std'
       namespace.
  
! 'cp_namespace_decls'
       This function will return the declarations contained in the
       namespace, including types, overloaded functions, other namespaces,
       and so forth.  If there are no declarations, this function will
!      return 'NULL_TREE'.  The declarations are connected through their
!      'TREE_CHAIN' fields.
  
       Although most entries on this list will be declarations,
!      'TREE_LIST' nodes may also appear.  In this case, the 'TREE_VALUE'
!      will be an 'OVERLOAD'.  The value of the 'TREE_PURPOSE' is
       unspecified; back ends should ignore this value.  As with the other
!      kinds of declarations returned by 'cp_namespace_decls', the
!      'TREE_CHAIN' will point to the next declaration in this list.
  
       For more information on the kinds of declarations that can occur on
       this list, *Note Declarations::.  Some declarations will not appear
!      on this list.  In particular, no 'FIELD_DECL', 'LABEL_DECL', or
!      'PARM_DECL' nodes will appear here.
  
       This function cannot be used with namespaces that have
!      'DECL_NAMESPACE_ALIAS' set.
  
  
  File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
--- 13100,13159 ----
  namespace.  Thus, in what follows, we describe namespaces generally,
  rather than the global namespace in particular.
  
!  A namespace is represented by a ‘NAMESPACE_DECL’ node.
  
!  The following macros and functions can be used on a ‘NAMESPACE_DECL’:
  
! ‘DECL_NAME’
!      This macro is used to obtain the ‘IDENTIFIER_NODE’ corresponding to
       the unqualified name of the name of the namespace (*note
!      Identifiers::).  The name of the global namespace is ‘::’, even
       though in C++ the global namespace is unnamed.  However, you should
!      use comparison with ‘global_namespace’, rather than ‘DECL_NAME’ to
       determine whether or not a namespace is the global one.  An unnamed
!      namespace will have a ‘DECL_NAME’ equal to
!      ‘anonymous_namespace_name’.  Within a single translation unit, all
       unnamed namespaces will have the same name.
  
! ‘DECL_CONTEXT’
!      This macro returns the enclosing namespace.  The ‘DECL_CONTEXT’ for
!      the ‘global_namespace’ is ‘NULL_TREE’.
  
! ‘DECL_NAMESPACE_ALIAS’
       If this declaration is for a namespace alias, then
!      ‘DECL_NAMESPACE_ALIAS’ is the namespace for which this one is an
       alias.
  
!      Do not attempt to use ‘cp_namespace_decls’ for a namespace which is
!      an alias.  Instead, follow ‘DECL_NAMESPACE_ALIAS’ links until you
       reach an ordinary, non-alias, namespace, and call
!      ‘cp_namespace_decls’ there.
  
! ‘DECL_NAMESPACE_STD_P’
!      This predicate holds if the namespace is the special ‘::std’
       namespace.
  
! ‘cp_namespace_decls’
       This function will return the declarations contained in the
       namespace, including types, overloaded functions, other namespaces,
       and so forth.  If there are no declarations, this function will
!      return ‘NULL_TREE’.  The declarations are connected through their
!      ‘TREE_CHAIN’ fields.
  
       Although most entries on this list will be declarations,
!      ‘TREE_LIST’ nodes may also appear.  In this case, the ‘TREE_VALUE’
!      will be an ‘OVERLOAD’.  The value of the ‘TREE_PURPOSE’ is
       unspecified; back ends should ignore this value.  As with the other
!      kinds of declarations returned by ‘cp_namespace_decls’, the
!      ‘TREE_CHAIN’ will point to the next declaration in this list.
  
       For more information on the kinds of declarations that can occur on
       this list, *Note Declarations::.  Some declarations will not appear
!      on this list.  In particular, no ‘FIELD_DECL’, ‘LABEL_DECL’, or
!      ‘PARM_DECL’ nodes will appear here.
  
       This function cannot be used with namespaces that have
!      ‘DECL_NAMESPACE_ALIAS’ set.
  
  
  File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
*************** File: gccint.info,  Node: Classes,  Next
*** 13160,13264 ****
  ---------------
  
  Besides namespaces, the other high-level scoping construct in C++ is the
! class.  (Throughout this manual the term "class" is used to mean the
  types referred to in the ANSI/ISO C++ Standard as classes; these include
! types defined with the 'class', 'struct', and 'union' keywords.)
  
!  A class type is represented by either a 'RECORD_TYPE' or a
! 'UNION_TYPE'.  A class declared with the 'union' tag is represented by a
! 'UNION_TYPE', while classes declared with either the 'struct' or the
! 'class' tag are represented by 'RECORD_TYPE's.  You can use the
! 'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
! type is a 'class' as opposed to a 'struct'.  This macro will be true
! only for classes declared with the 'class' tag.
  
!  Almost all members are available on the 'TYPE_FIELDS' list.  Given one
! member, the next can be found by following the 'TREE_CHAIN'.  You should
  not depend in any way on the order in which fields appear on this list.
! All nodes on this list will be 'DECL' nodes.  A 'FIELD_DECL' is used to
! represent a non-static data member, a 'VAR_DECL' is used to represent a
! static data member, and a 'TYPE_DECL' is used to represent a type.  Note
! that the 'CONST_DECL' for an enumeration constant will appear on this
  list, if the enumeration type was declared in the class.  (Of course,
! the 'TYPE_DECL' for the enumeration type will appear here as well.)
  There are no entries for base classes on this list.  In particular,
! there is no 'FIELD_DECL' for the "base-class portion" of an object.  If
  a function member is overloaded, each of the overloaded functions
! appears; no 'OVERLOAD' nodes appear on the 'TYPE_FIELDS' list.
  Implicitly declared functions (including default constructors, copy
  constructors, assignment operators, and destructors) will appear on this
  list as well.
  
!  The 'TYPE_VFIELD' is a compiler-generated field used to point to
! virtual function tables.  It may or may not appear on the 'TYPE_FIELDS'
! list.  However, back ends should handle the 'TYPE_VFIELD' just like all
! the entries on the 'TYPE_FIELDS' list.
  
!  Every class has an associated "binfo", which can be obtained with
! 'TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
! given by 'TYPE_BINFO' is the degenerate case, whereby every class is
  considered to be its own base-class.  The base binfos for a particular
  binfo are held in a vector, whose length is obtained with
! 'BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
! 'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'.  To add a new binfo, use
! 'BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
! 'BINFO_BASE_BINFOS', but normally you do not need to use that.  The
! class type associated with a binfo is given by 'BINFO_TYPE'.  It is not
! always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
! and qualified types.  Neither is it the case that 'TYPE_BINFO
! (BINFO_TYPE (y))' is the same binfo as 'y'.  The reason is that if 'y'
! is a binfo representing a base-class 'B' of a derived class 'D', then
! 'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be
! 'B' as its own base-class, rather than as a base-class of 'D'.
  
!  The access to a base type can be found with 'BINFO_BASE_ACCESS'.  This
! will produce 'access_public_node', 'access_private_node' or
! 'access_protected_node'.  If bases are always public,
! 'BINFO_BASE_ACCESSES' may be 'NULL'.
  
!  'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
! virtually or not.  The other flags, 'BINFO_FLAG_0' to 'BINFO_FLAG_6',
  can be used for language specific use.
  
   The following macros can be used on a tree node representing a
  class-type.
  
! 'LOCAL_CLASS_P'
       This predicate holds if the class is local class _i.e._ declared
       inside a function body.
  
! 'TYPE_POLYMORPHIC_P'
       This predicate holds if the class has at least one virtual function
       (declared or inherited).
  
! 'TYPE_HAS_DEFAULT_CONSTRUCTOR'
       This predicate holds whenever its argument represents a class-type
       with default constructor.
  
! 'CLASSTYPE_HAS_MUTABLE'
! 'TYPE_HAS_MUTABLE_P'
       These predicates hold for a class-type having a mutable data
       member.
  
! 'CLASSTYPE_NON_POD_P'
       This predicate holds only for class-types that are not PODs.
  
! 'TYPE_HAS_NEW_OPERATOR'
!      This predicate holds for a class-type that defines 'operator new'.
  
! 'TYPE_HAS_ARRAY_NEW_OPERATOR'
!      This predicate holds for a class-type for which 'operator new[]' is
       defined.
  
! 'TYPE_OVERLOADS_CALL_EXPR'
       This predicate holds for class-type for which the function call
!      'operator()' is overloaded.
  
! 'TYPE_OVERLOADS_ARRAY_REF'
!      This predicate holds for a class-type that overloads 'operator[]'
  
! 'TYPE_OVERLOADS_ARROW'
!      This predicate holds for a class-type for which 'operator->' is
       overloaded.
  
  
--- 13162,13266 ----
  ---------------
  
  Besides namespaces, the other high-level scoping construct in C++ is the
! class.  (Throughout this manual the term “class” is used to mean the
  types referred to in the ANSI/ISO C++ Standard as classes; these include
! types defined with the ‘class’, ‘struct’, and ‘union’ keywords.)
  
!  A class type is represented by either a ‘RECORD_TYPE’ or a
! ‘UNION_TYPE’.  A class declared with the ‘union’ tag is represented by a
! ‘UNION_TYPE’, while classes declared with either the ‘struct’ or the
! ‘class’ tag are represented by ‘RECORD_TYPE’s.  You can use the
! ‘CLASSTYPE_DECLARED_CLASS’ macro to discern whether or not a particular
! type is a ‘class’ as opposed to a ‘struct’.  This macro will be true
! only for classes declared with the ‘class’ tag.
  
!  Almost all members are available on the ‘TYPE_FIELDS’ list.  Given one
! member, the next can be found by following the ‘TREE_CHAIN’.  You should
  not depend in any way on the order in which fields appear on this list.
! All nodes on this list will be ‘DECL’ nodes.  A ‘FIELD_DECL’ is used to
! represent a non-static data member, a ‘VAR_DECL’ is used to represent a
! static data member, and a ‘TYPE_DECL’ is used to represent a type.  Note
! that the ‘CONST_DECL’ for an enumeration constant will appear on this
  list, if the enumeration type was declared in the class.  (Of course,
! the ‘TYPE_DECL’ for the enumeration type will appear here as well.)
  There are no entries for base classes on this list.  In particular,
! there is no ‘FIELD_DECL’ for the "base-class portion" of an object.  If
  a function member is overloaded, each of the overloaded functions
! appears; no ‘OVERLOAD’ nodes appear on the ‘TYPE_FIELDS’ list.
  Implicitly declared functions (including default constructors, copy
  constructors, assignment operators, and destructors) will appear on this
  list as well.
  
!  The ‘TYPE_VFIELD’ is a compiler-generated field used to point to
! virtual function tables.  It may or may not appear on the ‘TYPE_FIELDS’
! list.  However, back ends should handle the ‘TYPE_VFIELD’ just like all
! the entries on the ‘TYPE_FIELDS’ list.
  
!  Every class has an associated “binfo”, which can be obtained with
! ‘TYPE_BINFO’.  Binfos are used to represent base-classes.  The binfo
! given by ‘TYPE_BINFO’ is the degenerate case, whereby every class is
  considered to be its own base-class.  The base binfos for a particular
  binfo are held in a vector, whose length is obtained with
! ‘BINFO_N_BASE_BINFOS’.  The base binfos themselves are obtained with
! ‘BINFO_BASE_BINFO’ and ‘BINFO_BASE_ITERATE’.  To add a new binfo, use
! ‘BINFO_BASE_APPEND’.  The vector of base binfos can be obtained with
! ‘BINFO_BASE_BINFOS’, but normally you do not need to use that.  The
! class type associated with a binfo is given by ‘BINFO_TYPE’.  It is not
! always the case that ‘BINFO_TYPE (TYPE_BINFO (x))’, because of typedefs
! and qualified types.  Neither is it the case that ‘TYPE_BINFO
! (BINFO_TYPE (y))’ is the same binfo as ‘y’.  The reason is that if ‘y’
! is a binfo representing a base-class ‘B’ of a derived class ‘D’, then
! ‘BINFO_TYPE (y)’ will be ‘B’, and ‘TYPE_BINFO (BINFO_TYPE (y))’ will be
! ‘B’ as its own base-class, rather than as a base-class of ‘D’.
  
!  The access to a base type can be found with ‘BINFO_BASE_ACCESS’.  This
! will produce ‘access_public_node’, ‘access_private_node’ or
! ‘access_protected_node’.  If bases are always public,
! ‘BINFO_BASE_ACCESSES’ may be ‘NULL’.
  
!  ‘BINFO_VIRTUAL_P’ is used to specify whether the binfo is inherited
! virtually or not.  The other flags, ‘BINFO_FLAG_0’ to ‘BINFO_FLAG_6’,
  can be used for language specific use.
  
   The following macros can be used on a tree node representing a
  class-type.
  
! ‘LOCAL_CLASS_P’
       This predicate holds if the class is local class _i.e._ declared
       inside a function body.
  
! ‘TYPE_POLYMORPHIC_P’
       This predicate holds if the class has at least one virtual function
       (declared or inherited).
  
! ‘TYPE_HAS_DEFAULT_CONSTRUCTOR’
       This predicate holds whenever its argument represents a class-type
       with default constructor.
  
! ‘CLASSTYPE_HAS_MUTABLE’
! ‘TYPE_HAS_MUTABLE_P’
       These predicates hold for a class-type having a mutable data
       member.
  
! ‘CLASSTYPE_NON_POD_P’
       This predicate holds only for class-types that are not PODs.
  
! ‘TYPE_HAS_NEW_OPERATOR’
!      This predicate holds for a class-type that defines ‘operator new’.
  
! ‘TYPE_HAS_ARRAY_NEW_OPERATOR’
!      This predicate holds for a class-type for which ‘operator new[]’ is
       defined.
  
! ‘TYPE_OVERLOADS_CALL_EXPR’
       This predicate holds for class-type for which the function call
!      ‘operator()’ is overloaded.
  
! ‘TYPE_OVERLOADS_ARRAY_REF’
!      This predicate holds for a class-type that overloads ‘operator[]’
  
! ‘TYPE_OVERLOADS_ARROW’
!      This predicate holds for a class-type for which ‘operator->’ is
       overloaded.
  
  
*************** File: gccint.info,  Node: Functions for
*** 13267,13394 ****
  11.10.4 Functions for C++
  -------------------------
  
! A function is represented by a 'FUNCTION_DECL' node.  A set of
! overloaded functions is sometimes represented by an 'OVERLOAD' node.
  
!  An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros
! should be used on an 'OVERLOAD'.  An 'OVERLOAD' node is similar to a
! 'TREE_LIST'.  Use 'OVL_CURRENT' to get the function associated with an
! 'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the
! list of overloaded functions.  The macros 'OVL_CURRENT' and 'OVL_NEXT'
! are actually polymorphic; you can use them to work with 'FUNCTION_DECL'
! nodes as well as with overloads.  In the case of a 'FUNCTION_DECL',
! 'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT'
! will always be 'NULL_TREE'.
  
!  To determine the scope of a function, you can use the 'DECL_CONTEXT'
! macro.  This macro will return the class (either a 'RECORD_TYPE' or a
! 'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
  a member.  For a virtual function, this macro returns the class in which
  the function was actually defined, not the base class in which the
  virtual declaration occurred.
  
   If a friend function is defined in a class scope, the
! 'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
  it was defined.  For example, in
       class C { friend void f() {} };
! the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the
! 'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'.
  
!  The following macros and functions can be used on a 'FUNCTION_DECL':
! 'DECL_MAIN_P'
       This predicate holds for a function that is the program entry point
!      '::code'.
  
! 'DECL_LOCAL_FUNCTION_P'
       This predicate holds if the function was declared at block scope,
       even though it has a global scope.
  
! 'DECL_ANTICIPATED'
       This predicate holds if the function is a built-in function but its
       prototype is not yet explicitly declared.
  
! 'DECL_EXTERN_C_FUNCTION_P'
!      This predicate holds if the function is declared as an ''extern
!      "C"'' function.
  
! 'DECL_LINKONCE_P'
       This macro holds if multiple copies of this function may be emitted
       in various translation units.  It is the responsibility of the
       linker to merge the various copies.  Template instantiations are
!      the most common example of functions for which 'DECL_LINKONCE_P'
       holds; G++ instantiates needed templates in all translation units
       which require them, and then relies on the linker to remove
       duplicate instantiations.
  
       FIXME: This macro is not yet implemented.
  
! 'DECL_FUNCTION_MEMBER_P'
       This macro holds if the function is a member of a class, rather
       than a member of a namespace.
  
! 'DECL_STATIC_FUNCTION_P'
       This predicate holds if the function a static member function.
  
! 'DECL_NONSTATIC_MEMBER_FUNCTION_P'
       This macro holds for a non-static member function.
  
! 'DECL_CONST_MEMFUNC_P'
!      This predicate holds for a 'const'-member function.
  
! 'DECL_VOLATILE_MEMFUNC_P'
!      This predicate holds for a 'volatile'-member function.
  
! 'DECL_CONSTRUCTOR_P'
       This macro holds if the function is a constructor.
  
! 'DECL_NONCONVERTING_P'
       This predicate holds if the constructor is a non-converting
       constructor.
  
! 'DECL_COMPLETE_CONSTRUCTOR_P'
       This predicate holds for a function which is a constructor for an
       object of a complete type.
  
! 'DECL_BASE_CONSTRUCTOR_P'
       This predicate holds for a function which is a constructor for a
       base class sub-object.
  
! 'DECL_COPY_CONSTRUCTOR_P'
       This predicate holds for a function which is a copy-constructor.
  
! 'DECL_DESTRUCTOR_P'
       This macro holds if the function is a destructor.
  
! 'DECL_COMPLETE_DESTRUCTOR_P'
       This predicate holds if the function is the destructor for an
       object a complete type.
  
! 'DECL_OVERLOADED_OPERATOR_P'
       This macro holds if the function is an overloaded operator.
  
! 'DECL_CONV_FN_P'
       This macro holds if the function is a type-conversion operator.
  
! 'DECL_GLOBAL_CTOR_P'
       This predicate holds if the function is a file-scope initialization
       function.
  
! 'DECL_GLOBAL_DTOR_P'
       This predicate holds if the function is a file-scope finalization
       function.
  
! 'DECL_THUNK_P'
       This predicate holds if the function is a thunk.
  
!      These functions represent stub code that adjusts the 'this' pointer
       and then jumps to another function.  When the jumped-to function
       returns, control is transferred directly to the caller, without
       returning to the thunk.  The first parameter to the thunk is always
!      the 'this' pointer; the thunk should add 'THUNK_DELTA' to this
!      value.  (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.)
  
!      Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the
!      adjusted 'this' pointer must be adjusted again.  The complete
       calculation is given by the following pseudo-code:
  
            this += THUNK_DELTA
--- 13269,13396 ----
  11.10.4 Functions for C++
  -------------------------
  
! A function is represented by a ‘FUNCTION_DECL’ node.  A set of
! overloaded functions is sometimes represented by an ‘OVERLOAD’ node.
  
!  An ‘OVERLOAD’ node is not a declaration, so none of the ‘DECL_’ macros
! should be used on an ‘OVERLOAD’.  An ‘OVERLOAD’ node is similar to a
! ‘TREE_LIST’.  Use ‘OVL_CURRENT’ to get the function associated with an
! ‘OVERLOAD’ node; use ‘OVL_NEXT’ to get the next ‘OVERLOAD’ node in the
! list of overloaded functions.  The macros ‘OVL_CURRENT’ and ‘OVL_NEXT’
! are actually polymorphic; you can use them to work with ‘FUNCTION_DECL’
! nodes as well as with overloads.  In the case of a ‘FUNCTION_DECL’,
! ‘OVL_CURRENT’ will always return the function itself, and ‘OVL_NEXT’
! will always be ‘NULL_TREE’.
  
!  To determine the scope of a function, you can use the ‘DECL_CONTEXT’
! macro.  This macro will return the class (either a ‘RECORD_TYPE’ or a
! ‘UNION_TYPE’) or namespace (a ‘NAMESPACE_DECL’) of which the function is
  a member.  For a virtual function, this macro returns the class in which
  the function was actually defined, not the base class in which the
  virtual declaration occurred.
  
   If a friend function is defined in a class scope, the
! ‘DECL_FRIEND_CONTEXT’ macro can be used to determine the class in which
  it was defined.  For example, in
       class C { friend void f() {} };
! the ‘DECL_CONTEXT’ for ‘f’ will be the ‘global_namespace’, but the
! ‘DECL_FRIEND_CONTEXT’ will be the ‘RECORD_TYPE’ for ‘C’.
  
!  The following macros and functions can be used on a ‘FUNCTION_DECL’:
! ‘DECL_MAIN_P’
       This predicate holds for a function that is the program entry point
!      ‘::code’.
  
! ‘DECL_LOCAL_FUNCTION_P’
       This predicate holds if the function was declared at block scope,
       even though it has a global scope.
  
! ‘DECL_ANTICIPATED’
       This predicate holds if the function is a built-in function but its
       prototype is not yet explicitly declared.
  
! ‘DECL_EXTERN_C_FUNCTION_P’
!      This predicate holds if the function is declared as an '‘extern
!      "C"’' function.
  
! ‘DECL_LINKONCE_P’
       This macro holds if multiple copies of this function may be emitted
       in various translation units.  It is the responsibility of the
       linker to merge the various copies.  Template instantiations are
!      the most common example of functions for which ‘DECL_LINKONCE_P’
       holds; G++ instantiates needed templates in all translation units
       which require them, and then relies on the linker to remove
       duplicate instantiations.
  
       FIXME: This macro is not yet implemented.
  
! ‘DECL_FUNCTION_MEMBER_P’
       This macro holds if the function is a member of a class, rather
       than a member of a namespace.
  
! ‘DECL_STATIC_FUNCTION_P’
       This predicate holds if the function a static member function.
  
! ‘DECL_NONSTATIC_MEMBER_FUNCTION_P’
       This macro holds for a non-static member function.
  
! ‘DECL_CONST_MEMFUNC_P’
!      This predicate holds for a ‘const’-member function.
  
! ‘DECL_VOLATILE_MEMFUNC_P’
!      This predicate holds for a ‘volatile’-member function.
  
! ‘DECL_CONSTRUCTOR_P’
       This macro holds if the function is a constructor.
  
! ‘DECL_NONCONVERTING_P’
       This predicate holds if the constructor is a non-converting
       constructor.
  
! ‘DECL_COMPLETE_CONSTRUCTOR_P’
       This predicate holds for a function which is a constructor for an
       object of a complete type.
  
! ‘DECL_BASE_CONSTRUCTOR_P’
       This predicate holds for a function which is a constructor for a
       base class sub-object.
  
! ‘DECL_COPY_CONSTRUCTOR_P’
       This predicate holds for a function which is a copy-constructor.
  
! ‘DECL_DESTRUCTOR_P’
       This macro holds if the function is a destructor.
  
! ‘DECL_COMPLETE_DESTRUCTOR_P’
       This predicate holds if the function is the destructor for an
       object a complete type.
  
! ‘DECL_OVERLOADED_OPERATOR_P’
       This macro holds if the function is an overloaded operator.
  
! ‘DECL_CONV_FN_P’
       This macro holds if the function is a type-conversion operator.
  
! ‘DECL_GLOBAL_CTOR_P’
       This predicate holds if the function is a file-scope initialization
       function.
  
! ‘DECL_GLOBAL_DTOR_P’
       This predicate holds if the function is a file-scope finalization
       function.
  
! ‘DECL_THUNK_P’
       This predicate holds if the function is a thunk.
  
!      These functions represent stub code that adjusts the ‘this’ pointer
       and then jumps to another function.  When the jumped-to function
       returns, control is transferred directly to the caller, without
       returning to the thunk.  The first parameter to the thunk is always
!      the ‘this’ pointer; the thunk should add ‘THUNK_DELTA’ to this
!      value.  (The ‘THUNK_DELTA’ is an ‘int’, not an ‘INTEGER_CST’.)
  
!      Then, if ‘THUNK_VCALL_OFFSET’ (an ‘INTEGER_CST’) is nonzero the
!      adjusted ‘this’ pointer must be adjusted again.  The complete
       calculation is given by the following pseudo-code:
  
            this += THUNK_DELTA
*************** the 'DECL_CONTEXT' for 'f' will be the '
*** 13396,13427 ****
              this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
  
       Finally, the thunk should jump to the location given by
!      'DECL_INITIAL'; this will always be an expression for the address
       of a function.
  
! 'DECL_NON_THUNK_FUNCTION_P'
       This predicate holds if the function is _not_ a thunk function.
  
! 'GLOBAL_INIT_PRIORITY'
!      If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then
       this gives the initialization priority for the function.  The
       linker will arrange that all functions for which
!      'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
!      before 'main' is called.  When the program exits, all functions for
!      which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
  
! 'TYPE_RAISES_EXCEPTIONS'
       This macro returns the list of exceptions that a (member-)function
!      can raise.  The returned list, if non 'NULL', is comprised of nodes
!      whose 'TREE_VALUE' represents a type.
  
! 'TYPE_NOTHROW_P'
       This predicate holds when the exception-specification of its
!      arguments is of the form ''()''.
  
! 'DECL_ARRAY_DELETE_OPERATOR_P'
!      This predicate holds if the function an overloaded 'operator
!      delete[]'.
  
  
  File: gccint.info,  Node: Statements for C and C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
--- 13398,13429 ----
              this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
  
       Finally, the thunk should jump to the location given by
!      ‘DECL_INITIAL’; this will always be an expression for the address
       of a function.
  
! ‘DECL_NON_THUNK_FUNCTION_P’
       This predicate holds if the function is _not_ a thunk function.
  
! ‘GLOBAL_INIT_PRIORITY’
!      If either ‘DECL_GLOBAL_CTOR_P’ or ‘DECL_GLOBAL_DTOR_P’ holds, then
       this gives the initialization priority for the function.  The
       linker will arrange that all functions for which
!      ‘DECL_GLOBAL_CTOR_P’ holds are run in increasing order of priority
!      before ‘main’ is called.  When the program exits, all functions for
!      which ‘DECL_GLOBAL_DTOR_P’ holds are run in the reverse order.
  
! ‘TYPE_RAISES_EXCEPTIONS’
       This macro returns the list of exceptions that a (member-)function
!      can raise.  The returned list, if non ‘NULL’, is comprised of nodes
!      whose ‘TREE_VALUE’ represents a type.
  
! ‘TYPE_NOTHROW_P’
       This predicate holds when the exception-specification of its
!      arguments is of the form '‘()’'.
  
! ‘DECL_ARRAY_DELETE_OPERATOR_P’
!      This predicate holds if the function an overloaded ‘operator
!      delete[]’.
  
  
  File: gccint.info,  Node: Statements for C and C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
*************** File: gccint.info,  Node: Statements for
*** 13430,13439 ****
  --------------------------------
  
  A function that has a definition in the current translation unit has a
! non-'NULL' 'DECL_INITIAL'.  However, back ends should not make use of
! the particular value given by 'DECL_INITIAL'.
  
!  The 'DECL_SAVED_TREE' gives the complete body of the function.
  
   There are tree nodes corresponding to all of the source-level statement
  constructs, used within the C and C++ frontends.  These are enumerated
--- 13432,13441 ----
  --------------------------------
  
  A function that has a definition in the current translation unit has a
! non-‘NULL’ ‘DECL_INITIAL’.  However, back ends should not make use of
! the particular value given by ‘DECL_INITIAL’.
  
!  The ‘DECL_SAVED_TREE’ gives the complete body of the function.
  
   There are tree nodes corresponding to all of the source-level statement
  constructs, used within the C and C++ frontends.  These are enumerated
*************** here, together with a list of the variou
*** 13441,13454 ****
  obtain information about them.  There are a few macros that can be used
  with all statements:
  
! 'STMT_IS_FULL_EXPR_P'
       In C++, statements normally constitute "full expressions";
       temporaries created during a statement are destroyed when the
       statement is complete.  However, G++ sometimes represents
       expressions by statements; these statements will not have
!      'STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
       statements should be destroyed when the innermost enclosing
!      statement with 'STMT_IS_FULL_EXPR_P' set is exited.
  
   Here is the list of the various statement nodes, and the macros used to
  access them.  This documentation describes the use of these nodes in
--- 13443,13456 ----
  obtain information about them.  There are a few macros that can be used
  with all statements:
  
! ‘STMT_IS_FULL_EXPR_P’
       In C++, statements normally constitute "full expressions";
       temporaries created during a statement are destroyed when the
       statement is complete.  However, G++ sometimes represents
       expressions by statements; these statements will not have
!      ‘STMT_IS_FULL_EXPR_P’ set.  Temporaries created during such
       statements should be destroyed when the innermost enclosing
!      statement with ‘STMT_IS_FULL_EXPR_P’ set is exited.
  
   Here is the list of the various statement nodes, and the macros used to
  access them.  This documentation describes the use of these nodes in
*************** non-template functions (including instan
*** 13456,13467 ****
  In template functions, the same nodes are used, but sometimes in
  slightly different ways.
  
!  Many of the statements have substatements.  For example, a 'while' loop
  has a body, which is itself a statement.  If the substatement is
! 'NULL_TREE', it is considered equivalent to a statement consisting of a
! single ';', i.e., an expression statement in which the expression has
  been omitted.  A substatement may in fact be a list of statements,
! connected via their 'TREE_CHAIN's.  So, you should always process the
  statement tree by looping over substatements, like this:
       void process_stmt (stmt)
            tree stmt;
--- 13458,13469 ----
  In template functions, the same nodes are used, but sometimes in
  slightly different ways.
  
!  Many of the statements have substatements.  For example, a ‘while’ loop
  has a body, which is itself a statement.  If the substatement is
! ‘NULL_TREE’, it is considered equivalent to a statement consisting of a
! single ‘;’, i.e., an expression statement in which the expression has
  been omitted.  A substatement may in fact be a list of statements,
! connected via their ‘TREE_CHAIN’s.  So, you should always process the
  statement tree by looping over substatements, like this:
       void process_stmt (stmt)
            tree stmt;
*************** statement tree by looping over substatem
*** 13481,13566 ****
             stmt = TREE_CHAIN (stmt);
           }
       }
!  In other words, while the 'then' clause of an 'if' statement in C++ can
  be only one statement (although that one statement may be a compound
  statement), the intermediate representation sometimes uses several
  statements chained together.
  
! 'BREAK_STMT'
  
!      Used to represent a 'break' statement.  There are no additional
       fields.
  
! 'CLEANUP_STMT'
  
       Used to represent an action that should take place upon exit from
       the enclosing scope.  Typically, these actions are calls to
       destructors for local objects, but back ends cannot rely on this
       fact.  If these nodes are in fact representing such destructors,
!      'CLEANUP_DECL' will be the 'VAR_DECL' destroyed.  Otherwise,
!      'CLEANUP_DECL' will be 'NULL_TREE'.  In any case, the
!      'CLEANUP_EXPR' is the expression to execute.  The cleanups executed
       on exit from a scope should be run in the reverse order of the
!      order in which the associated 'CLEANUP_STMT's were encountered.
  
! 'CONTINUE_STMT'
  
!      Used to represent a 'continue' statement.  There are no additional
       fields.
  
! 'CTOR_STMT'
  
!      Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if
!      'CTOR_END_P' holds of the main body of a constructor.  See also
!      'SUBOBJECT' for more information on how to use these nodes.
  
! 'DO_STMT'
  
!      Used to represent a 'do' loop.  The body of the loop is given by
!      'DO_BODY' while the termination condition for the loop is given by
!      'DO_COND'.  The condition for a 'do'-statement is always an
       expression.
  
! 'EMPTY_CLASS_EXPR'
  
       Used to represent a temporary object of a class with no data whose
       address is never taken.  (All such objects are interchangeable.)
!      The 'TREE_TYPE' represents the type of the object.
  
! 'EXPR_STMT'
  
!      Used to represent an expression statement.  Use 'EXPR_STMT_EXPR' to
       obtain the expression.
  
! 'FOR_STMT'
  
!      Used to represent a 'for' statement.  The 'FOR_INIT_STMT' is the
!      initialization statement for the loop.  The 'FOR_COND' is the
!      termination condition.  The 'FOR_EXPR' is the expression executed
!      right before the 'FOR_COND' on each loop iteration; often, this
       expression increments a counter.  The body of the loop is given by
!      'FOR_BODY'.  'FOR_SCOPE' holds the scope of the 'for' statement
!      (used in the C++ front end only).  Note that 'FOR_INIT_STMT' and
!      'FOR_BODY' return statements, while 'FOR_COND' and 'FOR_EXPR'
       return expressions.
  
! 'HANDLER'
  
!      Used to represent a C++ 'catch' block.  The 'HANDLER_TYPE' is the
       type of exception that will be caught by this handler; it is equal
!      (by pointer equality) to 'NULL' if this handler is for all types.
!      'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and
!      'HANDLER_BODY' is the code for the block itself.
  
! 'IF_STMT'
  
!      Used to represent an 'if' statement.  The 'IF_COND' is the
       expression.
  
!      If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a
!      statement (usually a 'DECL_STMT').  Each time the condition is
       evaluated, the statement should be executed.  Then, the
!      'TREE_VALUE' should be used as the conditional expression itself.
       This representation is used to handle C++ code like this:
  
            if (int i = 7) ...
--- 13483,13568 ----
             stmt = TREE_CHAIN (stmt);
           }
       }
!  In other words, while the ‘then’ clause of an ‘if’ statement in C++ can
  be only one statement (although that one statement may be a compound
  statement), the intermediate representation sometimes uses several
  statements chained together.
  
! ‘BREAK_STMT’
  
!      Used to represent a ‘break’ statement.  There are no additional
       fields.
  
! ‘CLEANUP_STMT’
  
       Used to represent an action that should take place upon exit from
       the enclosing scope.  Typically, these actions are calls to
       destructors for local objects, but back ends cannot rely on this
       fact.  If these nodes are in fact representing such destructors,
!      ‘CLEANUP_DECL’ will be the ‘VAR_DECL’ destroyed.  Otherwise,
!      ‘CLEANUP_DECL’ will be ‘NULL_TREE’.  In any case, the
!      ‘CLEANUP_EXPR’ is the expression to execute.  The cleanups executed
       on exit from a scope should be run in the reverse order of the
!      order in which the associated ‘CLEANUP_STMT’s were encountered.
  
! ‘CONTINUE_STMT’
  
!      Used to represent a ‘continue’ statement.  There are no additional
       fields.
  
! ‘CTOR_STMT’
  
!      Used to mark the beginning (if ‘CTOR_BEGIN_P’ holds) or end (if
!      ‘CTOR_END_P’ holds of the main body of a constructor.  See also
!      ‘SUBOBJECT’ for more information on how to use these nodes.
  
! ‘DO_STMT’
  
!      Used to represent a ‘do’ loop.  The body of the loop is given by
!      ‘DO_BODY’ while the termination condition for the loop is given by
!      ‘DO_COND’.  The condition for a ‘do’-statement is always an
       expression.
  
! ‘EMPTY_CLASS_EXPR’
  
       Used to represent a temporary object of a class with no data whose
       address is never taken.  (All such objects are interchangeable.)
!      The ‘TREE_TYPE’ represents the type of the object.
  
! ‘EXPR_STMT’
  
!      Used to represent an expression statement.  Use ‘EXPR_STMT_EXPR’ to
       obtain the expression.
  
! ‘FOR_STMT’
  
!      Used to represent a ‘for’ statement.  The ‘FOR_INIT_STMT’ is the
!      initialization statement for the loop.  The ‘FOR_COND’ is the
!      termination condition.  The ‘FOR_EXPR’ is the expression executed
!      right before the ‘FOR_COND’ on each loop iteration; often, this
       expression increments a counter.  The body of the loop is given by
!      ‘FOR_BODY’.  ‘FOR_SCOPE’ holds the scope of the ‘for’ statement
!      (used in the C++ front end only).  Note that ‘FOR_INIT_STMT’ and
!      ‘FOR_BODY’ return statements, while ‘FOR_COND’ and ‘FOR_EXPR’
       return expressions.
  
! ‘HANDLER’
  
!      Used to represent a C++ ‘catch’ block.  The ‘HANDLER_TYPE’ is the
       type of exception that will be caught by this handler; it is equal
!      (by pointer equality) to ‘NULL’ if this handler is for all types.
!      ‘HANDLER_PARMS’ is the ‘DECL_STMT’ for the catch parameter, and
!      ‘HANDLER_BODY’ is the code for the block itself.
  
! ‘IF_STMT’
  
!      Used to represent an ‘if’ statement.  The ‘IF_COND’ is the
       expression.
  
!      If the condition is a ‘TREE_LIST’, then the ‘TREE_PURPOSE’ is a
!      statement (usually a ‘DECL_STMT’).  Each time the condition is
       evaluated, the statement should be executed.  Then, the
!      ‘TREE_VALUE’ should be used as the conditional expression itself.
       This representation is used to handle C++ code like this:
  
            if (int i = 7) ...
*************** statements chained together.
*** 13568,13635 ****
       where there is a new local variable (or variables) declared within
       the condition.
  
!      The 'THEN_CLAUSE' represents the statement given by the 'then'
!      condition, while the 'ELSE_CLAUSE' represents the statement given
!      by the 'else' condition.
  
!      C++ distinguishes between this and 'COND_EXPR' for handling
       templates.
  
! 'SUBOBJECT'
  
       In a constructor, these nodes are used to mark the point at which a
!      subobject of 'this' is fully constructed.  If, after this point, an
!      exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is
!      encountered, the 'SUBOBJECT_CLEANUP' must be executed.  The
       cleanups must be executed in the reverse order in which they
       appear.
  
! 'SWITCH_STMT'
  
!      Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
       the expression on which the switch is occurring.  See the
!      documentation for an 'IF_STMT' for more information on the
!      representation used for the condition.  The 'SWITCH_STMT_BODY' is
!      the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
       original type of switch expression as given in the source, before
!      any compiler conversions.  The 'SWITCH_STMT_SCOPE' is the statement
       scope (used in the C++ front end only).
  
!      There are also two boolean flags used with 'SWITCH_STMT'.
!      'SWITCH_STMT_ALL_CASES_P' is true if the switch includes a default
       label or the case label ranges cover all possible values of the
!      condition expression.  'SWITCH_STMT_NO_BREAK_P' is true if there
!      are no 'break' statements in the switch.
  
! 'TRY_BLOCK'
!      Used to represent a 'try' block.  The body of the try block is
!      given by 'TRY_STMTS'.  Each of the catch blocks is a 'HANDLER'
!      node.  The first handler is given by 'TRY_HANDLERS'.  Subsequent
!      handlers are obtained by following the 'TREE_CHAIN' link from one
       handler to the next.  The body of the handler is given by
!      'HANDLER_BODY'.
  
!      If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS'
!      will not be a 'HANDLER' node.  Instead, it will be an expression
       that should be executed if an exception is thrown in the try block.
       It must rethrow the exception after executing that code.  And, if
       an exception is thrown while the expression is executing,
!      'terminate' must be called.
  
! 'USING_STMT'
!      Used to represent a 'using' directive.  The namespace is given by
!      'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
       is needed inside template functions, to implement using directives
       during instantiation.
  
! 'WHILE_STMT'
  
!      Used to represent a 'while' loop.  The 'WHILE_COND' is the
       termination condition for the loop.  See the documentation for an
!      'IF_STMT' for more information on the representation used for the
       condition.
  
!      The 'WHILE_BODY' is the body of the loop.
  
  
  File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C and C++,  Up: C and C++ Trees
--- 13570,13637 ----
       where there is a new local variable (or variables) declared within
       the condition.
  
!      The ‘THEN_CLAUSE’ represents the statement given by the ‘then’
!      condition, while the ‘ELSE_CLAUSE’ represents the statement given
!      by the ‘else’ condition.
  
!      C++ distinguishes between this and ‘COND_EXPR’ for handling
       templates.
  
! ‘SUBOBJECT’
  
       In a constructor, these nodes are used to mark the point at which a
!      subobject of ‘this’ is fully constructed.  If, after this point, an
!      exception is thrown before a ‘CTOR_STMT’ with ‘CTOR_END_P’ set is
!      encountered, the ‘SUBOBJECT_CLEANUP’ must be executed.  The
       cleanups must be executed in the reverse order in which they
       appear.
  
! ‘SWITCH_STMT’
  
!      Used to represent a ‘switch’ statement.  The ‘SWITCH_STMT_COND’ is
       the expression on which the switch is occurring.  See the
!      documentation for an ‘IF_STMT’ for more information on the
!      representation used for the condition.  The ‘SWITCH_STMT_BODY’ is
!      the body of the switch statement.  The ‘SWITCH_STMT_TYPE’ is the
       original type of switch expression as given in the source, before
!      any compiler conversions.  The ‘SWITCH_STMT_SCOPE’ is the statement
       scope (used in the C++ front end only).
  
!      There are also two boolean flags used with ‘SWITCH_STMT’.
!      ‘SWITCH_STMT_ALL_CASES_P’ is true if the switch includes a default
       label or the case label ranges cover all possible values of the
!      condition expression.  ‘SWITCH_STMT_NO_BREAK_P’ is true if there
!      are no ‘break’ statements in the switch.
  
! ‘TRY_BLOCK’
!      Used to represent a ‘try’ block.  The body of the try block is
!      given by ‘TRY_STMTS’.  Each of the catch blocks is a ‘HANDLER’
!      node.  The first handler is given by ‘TRY_HANDLERS’.  Subsequent
!      handlers are obtained by following the ‘TREE_CHAIN’ link from one
       handler to the next.  The body of the handler is given by
!      ‘HANDLER_BODY’.
  
!      If ‘CLEANUP_P’ holds of the ‘TRY_BLOCK’, then the ‘TRY_HANDLERS’
!      will not be a ‘HANDLER’ node.  Instead, it will be an expression
       that should be executed if an exception is thrown in the try block.
       It must rethrow the exception after executing that code.  And, if
       an exception is thrown while the expression is executing,
!      ‘terminate’ must be called.
  
! ‘USING_STMT’
!      Used to represent a ‘using’ directive.  The namespace is given by
!      ‘USING_STMT_NAMESPACE’, which will be a NAMESPACE_DECL.  This node
       is needed inside template functions, to implement using directives
       during instantiation.
  
! ‘WHILE_STMT’
  
!      Used to represent a ‘while’ loop.  The ‘WHILE_COND’ is the
       termination condition for the loop.  See the documentation for an
!      ‘IF_STMT’ for more information on the representation used for the
       condition.
  
!      The ‘WHILE_BODY’ is the body of the loop.
  
  
  File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C and C++,  Up: C and C++ Trees
*************** File: gccint.info,  Node: C++ Expression
*** 13639,13679 ****
  
  This section describes expressions specific to the C and C++ front ends.
  
! 'TYPEID_EXPR'
  
!      Used to represent a 'typeid' expression.
  
! 'NEW_EXPR'
! 'VEC_NEW_EXPR'
  
!      Used to represent a call to 'new' and 'new[]' respectively.
  
! 'DELETE_EXPR'
! 'VEC_DELETE_EXPR'
  
!      Used to represent a call to 'delete' and 'delete[]' respectively.
  
! 'MEMBER_REF'
  
       Represents a reference to a member of a class.
  
! 'THROW_EXPR'
  
!      Represents an instance of 'throw' in the program.  Operand 0, which
!      is the expression to throw, may be 'NULL_TREE'.
  
! 'AGGR_INIT_EXPR'
!      An 'AGGR_INIT_EXPR' represents the initialization as the return
       value of a function call, or as the result of a constructor.  An
!      'AGGR_INIT_EXPR' will only appear as a full-expression, or as the
!      second operand of a 'TARGET_EXPR'.  'AGGR_INIT_EXPR's have a
!      representation similar to that of 'CALL_EXPR's.  You can use the
!      'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the
       function to call and the arguments to pass.
  
!      If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the
       initialization is via a constructor call.  The address of the
!      'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is
       taken, and this value replaces the first argument in the argument
       list.
  
--- 13641,13681 ----
  
  This section describes expressions specific to the C and C++ front ends.
  
! ‘TYPEID_EXPR’
  
!      Used to represent a ‘typeid’ expression.
  
! ‘NEW_EXPR’
! ‘VEC_NEW_EXPR’
  
!      Used to represent a call to ‘new’ and ‘new[]’ respectively.
  
! ‘DELETE_EXPR’
! ‘VEC_DELETE_EXPR’
  
!      Used to represent a call to ‘delete’ and ‘delete[]’ respectively.
  
! ‘MEMBER_REF’
  
       Represents a reference to a member of a class.
  
! ‘THROW_EXPR’
  
!      Represents an instance of ‘throw’ in the program.  Operand 0, which
!      is the expression to throw, may be ‘NULL_TREE’.
  
! ‘AGGR_INIT_EXPR’
!      An ‘AGGR_INIT_EXPR’ represents the initialization as the return
       value of a function call, or as the result of a constructor.  An
!      ‘AGGR_INIT_EXPR’ will only appear as a full-expression, or as the
!      second operand of a ‘TARGET_EXPR’.  ‘AGGR_INIT_EXPR’s have a
!      representation similar to that of ‘CALL_EXPR’s.  You can use the
!      ‘AGGR_INIT_EXPR_FN’ and ‘AGGR_INIT_EXPR_ARG’ macros to access the
       function to call and the arguments to pass.
  
!      If ‘AGGR_INIT_VIA_CTOR_P’ holds of the ‘AGGR_INIT_EXPR’, then the
       initialization is via a constructor call.  The address of the
!      ‘AGGR_INIT_EXPR_SLOT’ operand, which is always a ‘VAR_DECL’, is
       taken, and this value replaces the first argument in the argument
       list.
  
*************** breaking down GENERIC expressions into t
*** 13690,13696 ****
  (with some exceptions like function calls).  GIMPLE was heavily
  influenced by the SIMPLE IL used by the McCAT compiler project at McGill
  University, though we have made some different choices.  For one thing,
! SIMPLE doesn't support 'goto'.
  
   Temporaries are introduced to hold intermediate values needed to
  compute complex expressions.  Additionally, all the control structures
--- 13692,13698 ----
  (with some exceptions like function calls).  GIMPLE was heavily
  influenced by the SIMPLE IL used by the McCAT compiler project at McGill
  University, though we have made some different choices.  For one thing,
! SIMPLE doesn't support ‘goto’.
  
   Temporaries are introduced to hold intermediate values needed to
  compute complex expressions.  Additionally, all the control structures
*************** removed and exception regions are conver
*** 13699,13705 ****
  exception region tree.
  
   The compiler pass which converts GENERIC into GIMPLE is referred to as
! the 'gimplifier'.  The gimplifier works recursively, generating GIMPLE
  tuples out of the original GENERIC expressions.
  
   One of the early implementation strategies used for the GIMPLE
--- 13701,13707 ----
  exception region tree.
  
   The compiler pass which converts GENERIC into GIMPLE is referred to as
! the ‘gimplifier’.  The gimplifier works recursively, generating GIMPLE
  tuples out of the original GENERIC expressions.
  
   One of the early implementation strategies used for the GIMPLE
*************** syntax trees (AST), therefore it does no
*** 13711,13739 ****
  complexity provided by the main tree data structure.
  
   The GENERIC representation of a function is stored in the
! 'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node.  It
! is converted to GIMPLE by a call to 'gimplify_function_tree'.
  
   If a front end wants to include language-specific tree codes in the
  tree representation which it provides to the back end, it must provide a
! definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
  front end trees to GIMPLE.  Usually such a hook will involve much of the
  same code for expanding front end trees to RTL.  This function can
  return fully lowered GIMPLE, or it can return GENERIC trees and let the
  main gimplifier lower them the rest of the way; this is often simpler.
  GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
! of the IL before the pass 'pass_lower_cf'.  High GIMPLE contains some
! container statements like lexical scopes (represented by 'GIMPLE_BIND')
! and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes
  all of the implicit jumps for control and exception expressions directly
  in the IL and EH region trees.
  
   The C and C++ front ends currently convert directly from front end
  trees to GIMPLE, and hand that off to the back end rather than first
  converting to GENERIC.  Their gimplifier hooks know about all the
! '_STMT' nodes and how to convert them to GENERIC forms.  There was some
  work done on a genericization pass which would run first, but the
! existence of 'STMT_EXPR' meant that in order to convert all of the C
  statements into GENERIC equivalents would involve walking the entire
  tree anyway, so it was simpler to lower all the way.  This might change
  in the future if someone writes an optimization pass which would work
--- 13713,13741 ----
  complexity provided by the main tree data structure.
  
   The GENERIC representation of a function is stored in the
! ‘DECL_SAVED_TREE’ field of the associated ‘FUNCTION_DECL’ tree node.  It
! is converted to GIMPLE by a call to ‘gimplify_function_tree’.
  
   If a front end wants to include language-specific tree codes in the
  tree representation which it provides to the back end, it must provide a
! definition of ‘LANG_HOOKS_GIMPLIFY_EXPR’ which knows how to convert the
  front end trees to GIMPLE.  Usually such a hook will involve much of the
  same code for expanding front end trees to RTL.  This function can
  return fully lowered GIMPLE, or it can return GENERIC trees and let the
  main gimplifier lower them the rest of the way; this is often simpler.
  GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
! of the IL before the pass ‘pass_lower_cf’.  High GIMPLE contains some
! container statements like lexical scopes (represented by ‘GIMPLE_BIND’)
! and nested expressions (e.g., ‘GIMPLE_TRY’), while "Low GIMPLE" exposes
  all of the implicit jumps for control and exception expressions directly
  in the IL and EH region trees.
  
   The C and C++ front ends currently convert directly from front end
  trees to GIMPLE, and hand that off to the back end rather than first
  converting to GENERIC.  Their gimplifier hooks know about all the
! ‘_STMT’ nodes and how to convert them to GENERIC forms.  There was some
  work done on a genericization pass which would run first, but the
! existence of ‘STMT_EXPR’ meant that in order to convert all of the C
  statements into GENERIC equivalents would involve walking the entire
  tree anyway, so it was simpler to lower all the way.  This might change
  in the future if someone writes an optimization pass which would work
*************** better with higher-level trees, but curr
*** 13741,13747 ****
  GIMPLE.
  
   You can request to dump a C-like representation of the GIMPLE form with
! the flag '-fdump-tree-gimple'.
  
  * Menu:
  
--- 13743,13749 ----
  GIMPLE.
  
   You can request to dump a C-like representation of the GIMPLE form with
! the flag ‘-fdump-tree-gimple’.
  
  * Menu:
  
*************** header describing the instruction and it
*** 13769,13775 ****
  length body with all the operands.  Tuples are organized into a
  hierarchy with 3 main classes of tuples.
  
! 12.1.1 'gimple' (gsbase)
  ------------------------
  
  This is the root of the hierarchy, it holds basic information needed by
--- 13771,13777 ----
  length body with all the operands.  Tuples are organized into a
  hierarchy with 3 main classes of tuples.
  
! 12.1.1 ‘gimple’ (gsbase)
  ------------------------
  
  This is the root of the hierarchy, it holds basic information needed by
*************** structure more compact).  The structure
*** 13780,13930 ****
  bit hosts:
  
  Field                   Size (bits)
! 'code'                  8
! 'subcode'               16
! 'no_warning'            1
! 'visited'               1
! 'nontemporal_move'      1
! 'plf'                   2
! 'modified'              1
! 'has_volatile_ops'      1
! 'references_memory_p'   1
! 'uid'                   32
! 'location'              32
! 'num_ops'               32
! 'bb'                    64
! 'block'                 63
  Total size              32 bytes
  
!    * 'code' Main identifier for a GIMPLE instruction.
  
!    * 'subcode' Used to distinguish different variants of the same basic
       instruction or provide flags applicable to a given code.  The
!      'subcode' flags field has different uses depending on the code of
       the instruction, but mostly it distinguishes instructions of the
       same family.  The most prominent use of this field is in
       assignments, where subcode indicates the operation done on the RHS
       of the assignment.  For example, a = b + c is encoded as
!      'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
  
!    * 'no_warning' Bitflag to indicate whether a warning has already been
       issued on this statement.
  
!    * 'visited' General purpose "visited" marker.  Set and cleared by
       each pass when needed.
  
!    * 'nontemporal_move' Bitflag used in assignments that represent
       non-temporal moves.  Although this bitflag is only used in
       assignments, it was moved into the base to take advantage of the
       bit holes left by the previous fields.
  
!    * 'plf' Pass Local Flags.  This 2-bit mask can be used as general
       purpose markers by any pass.  Passes are responsible for clearing
       and setting these two flags accordingly.
  
!    * 'modified' Bitflag to indicate whether the statement has been
       modified.  Used mainly by the operand scanner to determine when to
       re-scan a statement for operands.
  
!    * 'has_volatile_ops' Bitflag to indicate whether this statement
       contains operands that have been marked volatile.
  
!    * 'references_memory_p' Bitflag to indicate whether this statement
       contains memory references (i.e., its operands are either global
       variables, or pointer dereferences or anything that must reside in
       memory).
  
!    * 'uid' This is an unsigned integer used by passes that want to
       assign IDs to every statement.  These IDs must be assigned and used
       by each pass.
  
!    * 'location' This is a 'location_t' identifier to specify source code
       location for this statement.  It is inherited from the front end.
  
!    * 'num_ops' Number of operands that this statement has.  This
       specifies the size of the operand vector embedded in the tuple.
       Only used in some tuples, but it is declared in the base tuple to
       take advantage of the 32-bit hole left by the previous fields.
  
!    * 'bb' Basic block holding the instruction.
  
!    * 'block' Lexical block holding this statement.  Also used for debug
       information generation.
  
! 12.1.2 'gimple_statement_with_ops'
  ----------------------------------
  
! This tuple is actually split in two: 'gimple_statement_with_ops_base'
! and 'gimple_statement_with_ops'.  This is needed to accommodate the way
  the operand vector is allocated.  The operand vector is defined to be an
  array of 1 element.  So, to allocate a dynamic number of operands, the
! memory allocator ('gimple_alloc') simply allocates enough memory to hold
! the structure itself plus 'N - 1' operands which run "off the end" of
  the structure.  For example, to allocate space for a tuple with 3
! operands, 'gimple_alloc' reserves 'sizeof (struct
! gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
  
   On the other hand, several fields in this tuple need to be shared with
! the 'gimple_statement_with_memory_ops' tuple.  So, these common fields
! are placed in 'gimple_statement_with_ops_base' which is then inherited
  from the other two tuples.
  
! 'gsbase'    256
! 'def_ops'   64
! 'use_ops'   64
! 'op'        'num_ops' * 64
! Total       48 + 8 * 'num_ops' bytes
  size
  
!    * 'gsbase' Inherited from 'struct gimple'.
  
!    * 'def_ops' Array of pointers into the operand array indicating all
       the slots that contain a variable written-to by the statement.
       This array is also used for immediate use chaining.  Note that it
       would be possible to not rely on this array, but the changes
       required to implement this are pretty invasive.
  
!    * 'use_ops' Similar to 'def_ops' but for variables read by the
       statement.
  
!    * 'op' Array of trees with 'num_ops' slots.
  
! 12.1.3 'gimple_statement_with_memory_ops'
  -----------------------------------------
  
! This tuple is essentially identical to 'gimple_statement_with_ops',
  except that it contains 4 additional fields to hold vectors related
  memory stores and loads.  Similar to the previous case, the structure is
  split in two to accommodate for the operand vector
! ('gimple_statement_with_memory_ops_base' and
! 'gimple_statement_with_memory_ops').
  
  Field        Size (bits)
! 'gsbase'     256
! 'def_ops'    64
! 'use_ops'    64
! 'vdef_ops'   64
! 'vuse_ops'   64
! 'stores'     64
! 'loads'      64
! 'op'         'num_ops' * 64
! Total size   80 + 8 * 'num_ops' bytes
  
!    * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators.  There is
       one entry per memory symbol written by this statement.  This is
       used to maintain the memory SSA use-def and def-def chains.
  
!    * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators.  There is
       one entry per memory symbol loaded by this statement.  This is used
       to maintain the memory SSA use-def chains.
  
!    * 'stores' Bitset with all the UIDs for the symbols written-to by the
!      statement.  This is different than 'vdef_ops' in that all the
       affected symbols are mentioned in this set.  If memory partitioning
!      is enabled, the 'vdef_ops' vector will refer to memory partitions.
       Furthermore, no SSA information is stored in this set.
  
!    * 'loads' Similar to 'stores', but for memory loads.  (Note that
       there is some amount of redundancy here, it should be possible to
       reduce memory utilization further by removing these sets).
  
--- 13782,13932 ----
  bit hosts:
  
  Field                   Size (bits)
! ‘code’                  8
! ‘subcode’               16
! ‘no_warning’            1
! ‘visited’               1
! ‘nontemporal_move’      1
! ‘plf’                   2
! ‘modified’              1
! ‘has_volatile_ops’      1
! ‘references_memory_p’   1
! ‘uid’                   32
! ‘location’              32
! ‘num_ops’               32
! ‘bb’                    64
! ‘block’                 63
  Total size              32 bytes
  
!    • ‘code’ Main identifier for a GIMPLE instruction.
  
!    • ‘subcode’ Used to distinguish different variants of the same basic
       instruction or provide flags applicable to a given code.  The
!      ‘subcode’ flags field has different uses depending on the code of
       the instruction, but mostly it distinguishes instructions of the
       same family.  The most prominent use of this field is in
       assignments, where subcode indicates the operation done on the RHS
       of the assignment.  For example, a = b + c is encoded as
!      ‘GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>’.
  
!    • ‘no_warning’ Bitflag to indicate whether a warning has already been
       issued on this statement.
  
!    • ‘visited’ General purpose "visited" marker.  Set and cleared by
       each pass when needed.
  
!    • ‘nontemporal_move’ Bitflag used in assignments that represent
       non-temporal moves.  Although this bitflag is only used in
       assignments, it was moved into the base to take advantage of the
       bit holes left by the previous fields.
  
!    • ‘plf’ Pass Local Flags.  This 2-bit mask can be used as general
       purpose markers by any pass.  Passes are responsible for clearing
       and setting these two flags accordingly.
  
!    • ‘modified’ Bitflag to indicate whether the statement has been
       modified.  Used mainly by the operand scanner to determine when to
       re-scan a statement for operands.
  
!    • ‘has_volatile_ops’ Bitflag to indicate whether this statement
       contains operands that have been marked volatile.
  
!    • ‘references_memory_p’ Bitflag to indicate whether this statement
       contains memory references (i.e., its operands are either global
       variables, or pointer dereferences or anything that must reside in
       memory).
  
!    • ‘uid’ This is an unsigned integer used by passes that want to
       assign IDs to every statement.  These IDs must be assigned and used
       by each pass.
  
!    • ‘location’ This is a ‘location_t’ identifier to specify source code
       location for this statement.  It is inherited from the front end.
  
!    • ‘num_ops’ Number of operands that this statement has.  This
       specifies the size of the operand vector embedded in the tuple.
       Only used in some tuples, but it is declared in the base tuple to
       take advantage of the 32-bit hole left by the previous fields.
  
!    • ‘bb’ Basic block holding the instruction.
  
!    • ‘block’ Lexical block holding this statement.  Also used for debug
       information generation.
  
! 12.1.2 ‘gimple_statement_with_ops’
  ----------------------------------
  
! This tuple is actually split in two: ‘gimple_statement_with_ops_base’
! and ‘gimple_statement_with_ops’.  This is needed to accommodate the way
  the operand vector is allocated.  The operand vector is defined to be an
  array of 1 element.  So, to allocate a dynamic number of operands, the
! memory allocator (‘gimple_alloc’) simply allocates enough memory to hold
! the structure itself plus ‘N - 1’ operands which run "off the end" of
  the structure.  For example, to allocate space for a tuple with 3
! operands, ‘gimple_alloc’ reserves ‘sizeof (struct
! gimple_statement_with_ops) + 2 * sizeof (tree)’ bytes.
  
   On the other hand, several fields in this tuple need to be shared with
! the ‘gimple_statement_with_memory_ops’ tuple.  So, these common fields
! are placed in ‘gimple_statement_with_ops_base’ which is then inherited
  from the other two tuples.
  
! ‘gsbase’    256
! ‘def_ops’   64
! ‘use_ops’   64
! ‘op’        ‘num_ops’ * 64
! Total       48 + 8 * ‘num_ops’ bytes
  size
  
!    • ‘gsbase’ Inherited from ‘struct gimple’.
  
!    • ‘def_ops’ Array of pointers into the operand array indicating all
       the slots that contain a variable written-to by the statement.
       This array is also used for immediate use chaining.  Note that it
       would be possible to not rely on this array, but the changes
       required to implement this are pretty invasive.
  
!    • ‘use_ops’ Similar to ‘def_ops’ but for variables read by the
       statement.
  
!    • ‘op’ Array of trees with ‘num_ops’ slots.
  
! 12.1.3 ‘gimple_statement_with_memory_ops’
  -----------------------------------------
  
! This tuple is essentially identical to ‘gimple_statement_with_ops’,
  except that it contains 4 additional fields to hold vectors related
  memory stores and loads.  Similar to the previous case, the structure is
  split in two to accommodate for the operand vector
! (‘gimple_statement_with_memory_ops_base’ and
! ‘gimple_statement_with_memory_ops’).
  
  Field        Size (bits)
! ‘gsbase’     256
! ‘def_ops’    64
! ‘use_ops’    64
! ‘vdef_ops’   64
! ‘vuse_ops’   64
! ‘stores’     64
! ‘loads’      64
! ‘op’         ‘num_ops’ * 64
! Total size   80 + 8 * ‘num_ops’ bytes
  
!    • ‘vdef_ops’ Similar to ‘def_ops’ but for ‘VDEF’ operators.  There is
       one entry per memory symbol written by this statement.  This is
       used to maintain the memory SSA use-def and def-def chains.
  
!    • ‘vuse_ops’ Similar to ‘use_ops’ but for ‘VUSE’ operators.  There is
       one entry per memory symbol loaded by this statement.  This is used
       to maintain the memory SSA use-def chains.
  
!    • ‘stores’ Bitset with all the UIDs for the symbols written-to by the
!      statement.  This is different than ‘vdef_ops’ in that all the
       affected symbols are mentioned in this set.  If memory partitioning
!      is enabled, the ‘vdef_ops’ vector will refer to memory partitions.
       Furthermore, no SSA information is stored in this set.
  
!    • ‘loads’ Similar to ‘stores’, but for memory loads.  (Note that
       there is some amount of redundancy here, it should be possible to
       reduce memory utilization further by removing these sets).
  
*************** File: gccint.info,  Node: Class hierarch
*** 13938,13945 ****
  =========================================
  
  The following diagram shows the C++ inheritance hierarchy of statement
! kinds, along with their relationships to 'GSS_' values (layouts) and
! 'GIMPLE_' values (codes):
  
          gimple
            |    layout: GSS_BASE
--- 13940,13947 ----
  =========================================
  
  The following diagram shows the C++ inheritance hierarchy of statement
! kinds, along with their relationships to ‘GSS_’ values (layouts) and
! ‘GIMPLE_’ values (codes):
  
          gimple
            |    layout: GSS_BASE
*************** File: gccint.info,  Node: GIMPLE instruc
*** 14083,14118 ****
  The following table briefly describes the GIMPLE instruction set.
  
  Instruction                    High GIMPLE   Low GIMPLE
! 'GIMPLE_ASM'                   x             x
! 'GIMPLE_ASSIGN'                x             x
! 'GIMPLE_BIND'                  x
! 'GIMPLE_CALL'                  x             x
! 'GIMPLE_CATCH'                 x
! 'GIMPLE_COND'                  x             x
! 'GIMPLE_DEBUG'                 x             x
! 'GIMPLE_EH_FILTER'             x
! 'GIMPLE_GOTO'                  x             x
! 'GIMPLE_LABEL'                 x             x
! 'GIMPLE_NOP'                   x             x
! 'GIMPLE_OMP_ATOMIC_LOAD'       x             x
! 'GIMPLE_OMP_ATOMIC_STORE'      x             x
! 'GIMPLE_OMP_CONTINUE'          x             x
! 'GIMPLE_OMP_CRITICAL'          x             x
! 'GIMPLE_OMP_FOR'               x             x
! 'GIMPLE_OMP_MASTER'            x             x
! 'GIMPLE_OMP_ORDERED'           x             x
! 'GIMPLE_OMP_PARALLEL'          x             x
! 'GIMPLE_OMP_RETURN'            x             x
! 'GIMPLE_OMP_SECTION'           x             x
! 'GIMPLE_OMP_SECTIONS'          x             x
! 'GIMPLE_OMP_SECTIONS_SWITCH'   x             x
! 'GIMPLE_OMP_SINGLE'            x             x
! 'GIMPLE_PHI'                                 x
! 'GIMPLE_OMP_STRUCTURED_BLOCK'  x
! 'GIMPLE_RESX'                                x
! 'GIMPLE_RETURN'                x             x
! 'GIMPLE_SWITCH'                x             x
! 'GIMPLE_TRY'                   x
  
  
  File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
--- 14085,14120 ----
  The following table briefly describes the GIMPLE instruction set.
  
  Instruction                    High GIMPLE   Low GIMPLE
! ‘GIMPLE_ASM’                   x             x
! ‘GIMPLE_ASSIGN’                x             x
! ‘GIMPLE_BIND’                  x
! ‘GIMPLE_CALL’                  x             x
! ‘GIMPLE_CATCH’                 x
! ‘GIMPLE_COND’                  x             x
! ‘GIMPLE_DEBUG’                 x             x
! ‘GIMPLE_EH_FILTER’             x
! ‘GIMPLE_GOTO’                  x             x
! ‘GIMPLE_LABEL’                 x             x
! ‘GIMPLE_NOP’                   x             x
! ‘GIMPLE_OMP_ATOMIC_LOAD’       x             x
! ‘GIMPLE_OMP_ATOMIC_STORE’      x             x
! ‘GIMPLE_OMP_CONTINUE’          x             x
! ‘GIMPLE_OMP_CRITICAL’          x             x
! ‘GIMPLE_OMP_FOR’               x             x
! ‘GIMPLE_OMP_MASTER’            x             x
! ‘GIMPLE_OMP_ORDERED’           x             x
! ‘GIMPLE_OMP_PARALLEL’          x             x
! ‘GIMPLE_OMP_RETURN’            x             x
! ‘GIMPLE_OMP_SECTION’           x             x
! ‘GIMPLE_OMP_SECTIONS’          x             x
! ‘GIMPLE_OMP_SECTIONS_SWITCH’   x             x
! ‘GIMPLE_OMP_SINGLE’            x             x
! ‘GIMPLE_PHI’                                 x
! ‘GIMPLE_OMP_STRUCTURED_BLOCK’  x
! ‘GIMPLE_RESX’                                x
! ‘GIMPLE_RETURN’                x             x
! ‘GIMPLE_SWITCH’                x             x
! ‘GIMPLE_TRY’                   x
  
  
  File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
*************** File: gccint.info,  Node: GIMPLE Excepti
*** 14121,14143 ****
  =======================
  
  Other exception handling constructs are represented using
! 'GIMPLE_TRY_CATCH'.  'GIMPLE_TRY_CATCH' has two operands.  The first
  operand is a sequence of statements to execute.  If executing these
  statements does not throw an exception, then the second operand is
  ignored.  Otherwise, if an exception is thrown, then the second operand
! of the 'GIMPLE_TRY_CATCH' is checked.  The second operand may have the
  following forms:
  
    1. A sequence of statements to execute.  When an exception occurs,
       these statements are executed, and then the exception is rethrown.
  
!   2. A sequence of 'GIMPLE_CATCH' statements.  Each 'GIMPLE_CATCH' has a
       list of applicable exception types and handler code.  If the thrown
       exception matches one of the caught types, the associated handler
       code is executed.  If the handler code falls off the bottom,
!      execution continues after the original 'GIMPLE_TRY_CATCH'.
  
!   3. A 'GIMPLE_EH_FILTER' statement.  This has a list of permitted
       exception types, and code to handle a match failure.  If the thrown
       exception does not match one of the allowed types, the associated
       match failure code is executed.  If the thrown exception does
--- 14123,14145 ----
  =======================
  
  Other exception handling constructs are represented using
! ‘GIMPLE_TRY_CATCH’.  ‘GIMPLE_TRY_CATCH’ has two operands.  The first
  operand is a sequence of statements to execute.  If executing these
  statements does not throw an exception, then the second operand is
  ignored.  Otherwise, if an exception is thrown, then the second operand
! of the ‘GIMPLE_TRY_CATCH’ is checked.  The second operand may have the
  following forms:
  
    1. A sequence of statements to execute.  When an exception occurs,
       these statements are executed, and then the exception is rethrown.
  
!   2. A sequence of ‘GIMPLE_CATCH’ statements.  Each ‘GIMPLE_CATCH’ has a
       list of applicable exception types and handler code.  If the thrown
       exception matches one of the caught types, the associated handler
       code is executed.  If the handler code falls off the bottom,
!      execution continues after the original ‘GIMPLE_TRY_CATCH’.
  
!   3. A ‘GIMPLE_EH_FILTER’ statement.  This has a list of permitted
       exception types, and code to handle a match failure.  If the thrown
       exception does not match one of the allowed types, the associated
       match failure code is executed.  If the thrown exception does
*************** future we will want to add some way to e
*** 14150,14158 ****
  an exception of a known type.
  
   Just before running the optimizers, the compiler lowers the high-level
! EH constructs above into a set of 'goto's, magic labels, and EH regions.
  Continuing to unwind at the end of a cleanup is represented with a
! 'GIMPLE_RESX'.
  
  
  File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
--- 14152,14160 ----
  an exception of a known type.
  
   Just before running the optimizers, the compiler lowers the high-level
! EH constructs above into a set of ‘goto’s, magic labels, and EH regions.
  Continuing to unwind at the end of a cleanup is represented with a
! ‘GIMPLE_RESX’.
  
  
  File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
*************** File: gccint.info,  Node: Temporaries,
*** 14163,14179 ****
  When gimplification encounters a subexpression that is too complex, it
  creates a new temporary variable to hold the value of the subexpression,
  and adds a new statement to initialize it before the current statement.
! These special temporaries are known as 'expression temporaries', and are
! allocated using 'get_formal_tmp_var'.  The compiler tries to always
  evaluate identical expressions into the same temporary, to simplify
  elimination of redundant calculations.
  
   We can only use expression temporaries when we know that it will not be
  reevaluated before its value is used, and that it will not be otherwise
  modified(1).  Other temporaries can be allocated using
! 'get_initialized_tmp_var' or 'create_tmp_var'.
  
!  Currently, an expression like 'a = b + 5' is not reduced any further.
  We tried converting it to something like
       T1 = b + 5;
       a = T1;
--- 14165,14181 ----
  When gimplification encounters a subexpression that is too complex, it
  creates a new temporary variable to hold the value of the subexpression,
  and adds a new statement to initialize it before the current statement.
! These special temporaries are known as ‘expression temporaries’, and are
! allocated using ‘get_formal_tmp_var’.  The compiler tries to always
  evaluate identical expressions into the same temporary, to simplify
  elimination of redundant calculations.
  
   We can only use expression temporaries when we know that it will not be
  reevaluated before its value is used, and that it will not be otherwise
  modified(1).  Other temporaries can be allocated using
! ‘get_initialized_tmp_var’ or ‘create_tmp_var’.
  
!  Currently, an expression like ‘a = b + 5’ is not reduced any further.
  We tried converting it to something like
       T1 = b + 5;
       a = T1;
*************** File: gccint.info,  Node: Operands,  Nex
*** 14195,14211 ****
  
  In general, expressions in GIMPLE consist of an operation and the
  appropriate number of simple operands; these operands must either be a
! GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable.
  More complex operands are factored out into temporaries, so that
       a = b + c + d
   becomes
       T1 = b + c;
       a = T1 + d;
  
!  The same rule holds for arguments to a 'GIMPLE_CALL'.
  
   The target of an assignment is usually a variable, but can also be a
! 'MEM_REF' or a compound lvalue as described below.
  
  * Menu:
  
--- 14197,14213 ----
  
  In general, expressions in GIMPLE consist of an operation and the
  appropriate number of simple operands; these operands must either be a
! GIMPLE rvalue (‘is_gimple_val’), i.e. a constant or a register variable.
  More complex operands are factored out into temporaries, so that
       a = b + c + d
   becomes
       T1 = b + c;
       a = T1 + d;
  
!  The same rule holds for arguments to a ‘GIMPLE_CALL’.
  
   The target of an assignment is usually a variable, but can also be a
! ‘MEM_REF’ or a compound lvalue as described below.
  
  * Menu:
  
*************** File: gccint.info,  Node: Compound Lvalu
*** 14230,14236 ****
  -----------------------
  
  Currently compound lvalues involving array and structure field
! references are not broken down; an expression like 'a.b[2] = 42' is not
  reduced any further (though complex array subscripts are).  This
  restriction is a workaround for limitations in later optimizers; if we
  were to convert this to
--- 14232,14238 ----
  -----------------------
  
  Currently compound lvalues involving array and structure field
! references are not broken down; an expression like ‘a.b[2] = 42’ is not
  reduced any further (though complex array subscripts are).  This
  restriction is a workaround for limitations in later optimizers; if we
  were to convert this to
*************** were to convert this to
*** 14238,14246 ****
       T1 = &a.b;
       T1[2] = 42;
  
!  alias analysis would not remember that the reference to 'T1[2]' came by
! way of 'a.b', so it would think that the assignment could alias another
! member of 'a'; this broke 'struct-alias-1.c'.  Future optimizer
  improvements may make this limitation unnecessary.
  
  
--- 14240,14248 ----
       T1 = &a.b;
       T1[2] = 42;
  
!  alias analysis would not remember that the reference to ‘T1[2]’ came by
! way of ‘a.b’, so it would think that the assignment could alias another
! member of ‘a’; this broke ‘struct-alias-1.c’.  Future optimizer
  improvements may make this limitation unnecessary.
  
  
*************** File: gccint.info,  Node: Conditional Ex
*** 14249,14255 ****
  12.6.3 Conditional Expressions
  ------------------------------
  
! A C '?:' expression is converted into an 'if' statement with each branch
  assigning to the same temporary.  So,
  
       a = b ? c : d;
--- 14251,14257 ----
  12.6.3 Conditional Expressions
  ------------------------------
  
! A C ‘?:’ expression is converted into an ‘if’ statement with each branch
  assigning to the same temporary.  So,
  
       a = b ? c : d;
*************** assigning to the same temporary.  So,
*** 14260,14271 ****
         T1 = d;
       a = T1;
  
!  The GIMPLE level if-conversion pass re-introduces '?:' expression, if
  appropriate.  It is used to vectorize loops with conditions using vector
  conditional operations.
  
!  Note that in GIMPLE, 'if' statements are represented using
! 'GIMPLE_COND', as described below.
  
  
  File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
--- 14262,14273 ----
         T1 = d;
       a = T1;
  
!  The GIMPLE level if-conversion pass re-introduces ‘?:’ expression, if
  appropriate.  It is used to vectorize loops with conditions using vector
  conditional operations.
  
!  Note that in GIMPLE, ‘if’ statements are represented using
! ‘GIMPLE_COND’, as described below.
  
  
  File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
*************** File: gccint.info,  Node: Logical Operat
*** 14273,14280 ****
  12.6.4 Logical Operators
  ------------------------
  
! Except when they appear in the condition operand of a 'GIMPLE_COND',
! logical 'and' and 'or' operators are simplified as follows: 'a = b && c'
  becomes
  
       T1 = (bool)b;
--- 14275,14282 ----
  12.6.4 Logical Operators
  ------------------------
  
! Except when they appear in the condition operand of a ‘GIMPLE_COND’,
! logical 'and' and 'or' operators are simplified as follows: ‘a = b && c’
  becomes
  
       T1 = (bool)b;
*************** becomes
*** 14282,14322 ****
         T1 = (bool)c;
       a = T1;
  
!  Note that 'T1' in this example cannot be an expression temporary,
  because it has two different assignments.
  
  12.6.5 Manipulating operands
  ----------------------------
  
! All gimple operands are of type 'tree'.  But only certain types of trees
  are allowed to be used as operand tuples.  Basic validation is
! controlled by the function 'get_gimple_rhs_class', which given a tree
! code, returns an 'enum' with the following values of type 'enum
! gimple_rhs_class'
  
!    * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
  
!    * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation.
  
!    * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
  
!    * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
  
!    * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
!      split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL',
!      'COMPONENT_REF', etc).
  
       This operand class also acts as an escape hatch for tree nodes that
       may be flattened out into the operand vector, but would need more
!      than two slots on the RHS. For instance, a 'COND_EXPR' expression
!      of the form '(a op b) ? x : y' could be flattened out on the
       operand vector using 4 slots, but it would also require additional
!      processing to distinguish 'c = a op b' from 'c = a op b ? x : y'.
       In time, these special case tree expressions should be flattened
       into the operand vector.
  
!  For tree nodes in the categories 'GIMPLE_TERNARY_RHS',
! 'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside
  tuples directly.  They first need to be flattened and separated into
  individual components.  For instance, given the GENERIC expression
  
--- 14284,14324 ----
         T1 = (bool)c;
       a = T1;
  
!  Note that ‘T1’ in this example cannot be an expression temporary,
  because it has two different assignments.
  
  12.6.5 Manipulating operands
  ----------------------------
  
! All gimple operands are of type ‘tree’.  But only certain types of trees
  are allowed to be used as operand tuples.  Basic validation is
! controlled by the function ‘get_gimple_rhs_class’, which given a tree
! code, returns an ‘enum’ with the following values of type ‘enum
! gimple_rhs_class’
  
!    • ‘GIMPLE_INVALID_RHS’ The tree cannot be used as a GIMPLE operand.
  
!    • ‘GIMPLE_TERNARY_RHS’ The tree is a valid GIMPLE ternary operation.
  
!    • ‘GIMPLE_BINARY_RHS’ The tree is a valid GIMPLE binary operation.
  
!    • ‘GIMPLE_UNARY_RHS’ The tree is a valid GIMPLE unary operation.
  
!    • ‘GIMPLE_SINGLE_RHS’ The tree is a single object, that cannot be
!      split into simpler operands (for instance, ‘SSA_NAME’, ‘VAR_DECL’,
!      ‘COMPONENT_REF’, etc).
  
       This operand class also acts as an escape hatch for tree nodes that
       may be flattened out into the operand vector, but would need more
!      than two slots on the RHS. For instance, a ‘COND_EXPR’ expression
!      of the form ‘(a op b) ? x : y’ could be flattened out on the
       operand vector using 4 slots, but it would also require additional
!      processing to distinguish ‘c = a op b’ from ‘c = a op b ? x : y’.
       In time, these special case tree expressions should be flattened
       into the operand vector.
  
!  For tree nodes in the categories ‘GIMPLE_TERNARY_RHS’,
! ‘GIMPLE_BINARY_RHS’ and ‘GIMPLE_UNARY_RHS’, they cannot be stored inside
  tuples directly.  They first need to be flattened and separated into
  individual components.  For instance, given the GENERIC expression
  
*************** individual components.  For instance, gi
*** 14327,14335 ****
       MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
  
   In this case, the GIMPLE form for this statement is logically identical
! to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the
  assignment is not represented as a tree, instead the two operands are
! taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE
  tuple as follows:
  
       GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
--- 14329,14337 ----
       MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
  
   In this case, the GIMPLE form for this statement is logically identical
! to its GENERIC form but in GIMPLE, the ‘PLUS_EXPR’ on the RHS of the
  assignment is not represented as a tree, instead the two operands are
! taken out of the ‘PLUS_EXPR’ sub-tree and flattened into the GIMPLE
  tuple as follows:
  
       GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
*************** of the structure.  To access tuple opera
*** 14346,14367 ****
       Returns the number of operands in statement G.
  
   -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
!      Returns operand 'I' from statement 'G'.
  
   -- GIMPLE function: tree * gimple_ops (gimple g)
!      Returns a pointer into the operand vector for statement 'G'.  This
!      is computed using an internal table called 'gimple_ops_offset_'[].
!      This table is indexed by the gimple code of 'G'.
  
       When the compiler is built, this table is filled-in using the sizes
       of the structures used by each statement code defined in
       gimple.def.  Since the operand vector is at the bottom of the
!      structure, for a gimple code 'C' the offset is computed as sizeof
!      (struct-of 'C') - sizeof (tree).
  
       This mechanism adds one memory indirection to every access when
!      using 'gimple_op'(), if this becomes a bottleneck, a pass can
!      choose to memoize the result from 'gimple_ops'() and use that to
       access the operands.
  
  12.6.7 Operand validation
--- 14348,14369 ----
       Returns the number of operands in statement G.
  
   -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
!      Returns operand ‘I’ from statement ‘G’.
  
   -- GIMPLE function: tree * gimple_ops (gimple g)
!      Returns a pointer into the operand vector for statement ‘G’.  This
!      is computed using an internal table called ‘gimple_ops_offset_’[].
!      This table is indexed by the gimple code of ‘G’.
  
       When the compiler is built, this table is filled-in using the sizes
       of the structures used by each statement code defined in
       gimple.def.  Since the operand vector is at the bottom of the
!      structure, for a gimple code ‘C’ the offset is computed as sizeof
!      (struct-of ‘C’) - sizeof (tree).
  
       This mechanism adds one memory indirection to every access when
!      using ‘gimple_op’(), if this becomes a bottleneck, a pass can
!      choose to memoize the result from ‘gimple_ops’() and use that to
       access the operands.
  
  12.6.7 Operand validation
*************** of the structure.  To access tuple opera
*** 14369,14398 ****
  
  When adding a new operand to a gimple statement, the operand will be
  validated according to what each tuple accepts in its operand vector.
! These predicates are called by the 'gimple_NAME_set_...()'.  Each tuple
  will use one of the following predicates (Note, this list is not
  exhaustive):
  
   -- GIMPLE function: bool is_gimple_val (tree t)
       Returns true if t is a "GIMPLE value", which are all the
       non-addressable stack variables (variables for which
!      'is_gimple_reg' returns true) and constants (expressions for which
!      'is_gimple_min_invariant' returns true).
  
   -- GIMPLE function: bool is_gimple_addressable (tree t)
       Returns true if t is a symbol or memory reference whose address can
       be taken.
  
   -- GIMPLE function: bool is_gimple_asm_val (tree t)
!      Similar to 'is_gimple_val' but it also accepts hard registers.
  
   -- GIMPLE function: bool is_gimple_call_addr (tree t)
       Return true if t is a valid expression to use as the function
!      called by a 'GIMPLE_CALL'.
  
   -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
       Return true if t is a valid expression to use as first operand of a
!      'MEM_REF' expression.
  
   -- GIMPLE function: bool is_gimple_constant (tree t)
       Return true if t is a valid gimple constant.
--- 14371,14400 ----
  
  When adding a new operand to a gimple statement, the operand will be
  validated according to what each tuple accepts in its operand vector.
! These predicates are called by the ‘gimple_NAME_set_...()’.  Each tuple
  will use one of the following predicates (Note, this list is not
  exhaustive):
  
   -- GIMPLE function: bool is_gimple_val (tree t)
       Returns true if t is a "GIMPLE value", which are all the
       non-addressable stack variables (variables for which
!      ‘is_gimple_reg’ returns true) and constants (expressions for which
!      ‘is_gimple_min_invariant’ returns true).
  
   -- GIMPLE function: bool is_gimple_addressable (tree t)
       Returns true if t is a symbol or memory reference whose address can
       be taken.
  
   -- GIMPLE function: bool is_gimple_asm_val (tree t)
!      Similar to ‘is_gimple_val’ but it also accepts hard registers.
  
   -- GIMPLE function: bool is_gimple_call_addr (tree t)
       Return true if t is a valid expression to use as the function
!      called by a ‘GIMPLE_CALL’.
  
   -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
       Return true if t is a valid expression to use as first operand of a
!      ‘MEM_REF’ expression.
  
   -- GIMPLE function: bool is_gimple_constant (tree t)
       Return true if t is a valid gimple constant.
*************** exhaustive):
*** 14409,14450 ****
       of a global variable but not of a local one).
  
   -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
!      Return true if t is an 'ADDR_EXPR' that does not change once the
       program is running (and which is valid in all functions).
  
  12.6.8 Statement validation
  ---------------------------
  
   -- GIMPLE function: bool is_gimple_assign (gimple g)
!      Return true if the code of g is 'GIMPLE_ASSIGN'.
  
   -- GIMPLE function: bool is_gimple_call (gimple g)
!      Return true if the code of g is 'GIMPLE_CALL'.
  
   -- GIMPLE function: bool is_gimple_debug (gimple g)
!      Return true if the code of g is 'GIMPLE_DEBUG'.
  
   -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g)
!      Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast
       operation.
  
   -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
!      Return true if g is a 'GIMPLE_DEBUG' that binds the value of an
       expression to a variable.
  
   -- GIMPLE function: bool is_gimple_omp (gimple g)
       Return true if g is any of the OpenMP codes.
  
   -- GIMPLE function: bool gimple_debug_begin_stmt_p (gimple g)
!      Return true if g is a 'GIMPLE_DEBUG' that marks the beginning of a
       source statement.
  
   -- GIMPLE function: bool gimple_debug_inline_entry_p (gimple g)
!      Return true if g is a 'GIMPLE_DEBUG' that marks the entry point of
       an inlined function.
  
   -- GIMPLE function: bool gimple_debug_nonbind_marker_p (gimple g)
!      Return true if g is a 'GIMPLE_DEBUG' that marks a program location,
       without any variable binding.
  
  
--- 14411,14452 ----
       of a global variable but not of a local one).
  
   -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
!      Return true if t is an ‘ADDR_EXPR’ that does not change once the
       program is running (and which is valid in all functions).
  
  12.6.8 Statement validation
  ---------------------------
  
   -- GIMPLE function: bool is_gimple_assign (gimple g)
!      Return true if the code of g is ‘GIMPLE_ASSIGN’.
  
   -- GIMPLE function: bool is_gimple_call (gimple g)
!      Return true if the code of g is ‘GIMPLE_CALL’.
  
   -- GIMPLE function: bool is_gimple_debug (gimple g)
!      Return true if the code of g is ‘GIMPLE_DEBUG’.
  
   -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g)
!      Return true if g is a ‘GIMPLE_ASSIGN’ that performs a type cast
       operation.
  
   -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
!      Return true if g is a ‘GIMPLE_DEBUG’ that binds the value of an
       expression to a variable.
  
   -- GIMPLE function: bool is_gimple_omp (gimple g)
       Return true if g is any of the OpenMP codes.
  
   -- GIMPLE function: bool gimple_debug_begin_stmt_p (gimple g)
!      Return true if g is a ‘GIMPLE_DEBUG’ that marks the beginning of a
       source statement.
  
   -- GIMPLE function: bool gimple_debug_inline_entry_p (gimple g)
!      Return true if g is a ‘GIMPLE_DEBUG’ that marks the entry point of
       an inlined function.
  
   -- GIMPLE function: bool gimple_debug_nonbind_marker_p (gimple g)
!      Return true if g is a ‘GIMPLE_DEBUG’ that marks a program location,
       without any variable binding.
  
  
*************** GIMPLE instructions.
*** 14462,14593 ****
  The following are common accessors for gimple statements.
  
   -- GIMPLE function: enum gimple_code gimple_code (gimple g)
!      Return the code for statement 'G'.
  
   -- GIMPLE function: basic_block gimple_bb (gimple g)
!      Return the basic block to which statement 'G' belongs to.
  
   -- GIMPLE function: tree gimple_block (gimple g)
!      Return the lexical scope block holding statement 'G'.
  
   -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
!      Return the tree code for the expression computed by 'STMT'.  This
!      is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and
!      'GIMPLE_COND'.  If 'STMT' is 'GIMPLE_CALL', it will return
!      'CALL_EXPR'.  For 'GIMPLE_COND', it returns the code of the
!      comparison predicate.  For 'GIMPLE_ASSIGN' it returns the code of
!      the operation performed by the 'RHS' of the assignment.
  
   -- GIMPLE function: void gimple_set_block (gimple g, tree block)
!      Set the lexical scope block of 'G' to 'BLOCK'.
  
   -- GIMPLE function: location_t gimple_locus (gimple g)
!      Return locus information for statement 'G'.
  
   -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
!      Set locus information for statement 'G'.
  
   -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
!      Return true if 'G' does not have locus information.
  
   -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
!      Return true if no warnings should be emitted for statement 'STMT'.
  
   -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
            visited_p)
!      Set the visited status on statement 'STMT' to 'VISITED_P'.
  
   -- GIMPLE function: bool gimple_visited_p (gimple stmt)
!      Return the visited status on statement 'STMT'.
  
   -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
            plf, bool val_p)
!      Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'.
  
   -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask
            plf)
!      Return the value of pass local flag 'PLF' on statement 'STMT'.
  
   -- GIMPLE function: bool gimple_has_ops (gimple g)
!      Return true if statement 'G' has register or memory operands.
  
   -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
!      Return true if statement 'G' has memory operands.
  
   -- GIMPLE function: unsigned gimple_num_ops (gimple g)
!      Return the number of operands for statement 'G'.
  
   -- GIMPLE function: tree * gimple_ops (gimple g)
!      Return the array of operands for statement 'G'.
  
   -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
!      Return operand 'I' for statement 'G'.
  
   -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
!      Return a pointer to operand 'I' for statement 'G'.
  
   -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
!      Set operand 'I' of statement 'G' to 'OP'.
  
   -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
       Return the set of symbols that have had their address taken by
!      'STMT'.
  
   -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
!      Return the set of 'DEF' operands for statement 'G'.
  
   -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
            def_optype_d *def)
!      Set 'DEF' to be the set of 'DEF' operands for statement 'G'.
  
   -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
!      Return the set of 'USE' operands for statement 'G'.
  
   -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
            use_optype_d *use)
!      Set 'USE' to be the set of 'USE' operands for statement 'G'.
  
   -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
!      Return the set of 'VUSE' operands for statement 'G'.
  
   -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
            voptype_d *ops)
!      Set 'OPS' to be the set of 'VUSE' operands for statement 'G'.
  
   -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
!      Return the set of 'VDEF' operands for statement 'G'.
  
   -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
            voptype_d *ops)
!      Set 'OPS' to be the set of 'VDEF' operands for statement 'G'.
  
   -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
!      Return the set of symbols loaded by statement 'G'.  Each element of
!      the set is the 'DECL_UID' of the corresponding symbol.
  
   -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
!      Return the set of symbols stored by statement 'G'.  Each element of
!      the set is the 'DECL_UID' of the corresponding symbol.
  
   -- GIMPLE function: bool gimple_modified_p (gimple g)
!      Return true if statement 'G' has operands and the modified field
       has been set.
  
   -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
!      Return true if statement 'STMT' contains volatile operands.
  
   -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool
            volatilep)
!      Return true if statement 'STMT' contains volatile operands.
  
   -- GIMPLE function: void update_stmt (gimple s)
!      Mark statement 'S' as modified, and update it.
  
   -- GIMPLE function: void update_stmt_if_modified (gimple s)
!      Update statement 'S' if it has been marked modified.
  
   -- GIMPLE function: gimple gimple_copy (gimple stmt)
!      Return a deep copy of statement 'STMT'.
  
  
  File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
--- 14464,14595 ----
  The following are common accessors for gimple statements.
  
   -- GIMPLE function: enum gimple_code gimple_code (gimple g)
!      Return the code for statement ‘G’.
  
   -- GIMPLE function: basic_block gimple_bb (gimple g)
!      Return the basic block to which statement ‘G’ belongs to.
  
   -- GIMPLE function: tree gimple_block (gimple g)
!      Return the lexical scope block holding statement ‘G’.
  
   -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
!      Return the tree code for the expression computed by ‘STMT’.  This
!      is only meaningful for ‘GIMPLE_CALL’, ‘GIMPLE_ASSIGN’ and
!      ‘GIMPLE_COND’.  If ‘STMT’ is ‘GIMPLE_CALL’, it will return
!      ‘CALL_EXPR’.  For ‘GIMPLE_COND’, it returns the code of the
!      comparison predicate.  For ‘GIMPLE_ASSIGN’ it returns the code of
!      the operation performed by the ‘RHS’ of the assignment.
  
   -- GIMPLE function: void gimple_set_block (gimple g, tree block)
!      Set the lexical scope block of ‘G’ to ‘BLOCK’.
  
   -- GIMPLE function: location_t gimple_locus (gimple g)
!      Return locus information for statement ‘G’.
  
   -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
!      Set locus information for statement ‘G’.
  
   -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
!      Return true if ‘G’ does not have locus information.
  
   -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
!      Return true if no warnings should be emitted for statement ‘STMT’.
  
   -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
            visited_p)
!      Set the visited status on statement ‘STMT’ to ‘VISITED_P’.
  
   -- GIMPLE function: bool gimple_visited_p (gimple stmt)
!      Return the visited status on statement ‘STMT’.
  
   -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
            plf, bool val_p)
!      Set pass local flag ‘PLF’ on statement ‘STMT’ to ‘VAL_P’.
  
   -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask
            plf)
!      Return the value of pass local flag ‘PLF’ on statement ‘STMT’.
  
   -- GIMPLE function: bool gimple_has_ops (gimple g)
!      Return true if statement ‘G’ has register or memory operands.
  
   -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
!      Return true if statement ‘G’ has memory operands.
  
   -- GIMPLE function: unsigned gimple_num_ops (gimple g)
!      Return the number of operands for statement ‘G’.
  
   -- GIMPLE function: tree * gimple_ops (gimple g)
!      Return the array of operands for statement ‘G’.
  
   -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
!      Return operand ‘I’ for statement ‘G’.
  
   -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
!      Return a pointer to operand ‘I’ for statement ‘G’.
  
   -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
!      Set operand ‘I’ of statement ‘G’ to ‘OP’.
  
   -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
       Return the set of symbols that have had their address taken by
!      ‘STMT’.
  
   -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
!      Return the set of ‘DEF’ operands for statement ‘G’.
  
   -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
            def_optype_d *def)
!      Set ‘DEF’ to be the set of ‘DEF’ operands for statement ‘G’.
  
   -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
!      Return the set of ‘USE’ operands for statement ‘G’.
  
   -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
            use_optype_d *use)
!      Set ‘USE’ to be the set of ‘USE’ operands for statement ‘G’.
  
   -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
!      Return the set of ‘VUSE’ operands for statement ‘G’.
  
   -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
            voptype_d *ops)
!      Set ‘OPS’ to be the set of ‘VUSE’ operands for statement ‘G’.
  
   -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
!      Return the set of ‘VDEF’ operands for statement ‘G’.
  
   -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
            voptype_d *ops)
!      Set ‘OPS’ to be the set of ‘VDEF’ operands for statement ‘G’.
  
   -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
!      Return the set of symbols loaded by statement ‘G’.  Each element of
!      the set is the ‘DECL_UID’ of the corresponding symbol.
  
   -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
!      Return the set of symbols stored by statement ‘G’.  Each element of
!      the set is the ‘DECL_UID’ of the corresponding symbol.
  
   -- GIMPLE function: bool gimple_modified_p (gimple g)
!      Return true if statement ‘G’ has operands and the modified field
       has been set.
  
   -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
!      Return true if statement ‘STMT’ contains volatile operands.
  
   -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool
            volatilep)
!      Return true if statement ‘STMT’ contains volatile operands.
  
   -- GIMPLE function: void update_stmt (gimple s)
!      Mark statement ‘S’ as modified, and update it.
  
   -- GIMPLE function: void update_stmt_if_modified (gimple s)
!      Update statement ‘S’ if it has been marked modified.
  
   -- GIMPLE function: gimple gimple_copy (gimple stmt)
!      Return a deep copy of statement ‘STMT’.
  
  
  File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
*************** File: gccint.info,  Node: Tuple specific
*** 14631,14700 ****
  
  File: gccint.info,  Node: GIMPLE_ASM,  Next: GIMPLE_ASSIGN,  Up: Tuple specific accessors
  
! 12.8.1 'GIMPLE_ASM'
  -------------------
  
   -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string,
            vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree,
            va_gc> *clobbers, vec<tree, va_gc> *labels)
!      Build a 'GIMPLE_ASM' statement.  This statement is used for
!      building in-line assembly constructs.  'STRING' is the assembly
!      code.  'INPUTS', 'OUTPUTS', 'CLOBBERS' and 'LABELS' are the inputs,
       outputs, clobbered registers and labels.
  
   -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g)
!      Return the number of input operands for 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g)
!      Return the number of output operands for 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g)
!      Return the number of clobber operands for 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned
            index)
!      Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned
            index, tree in_op)
!      Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned
            index)
!      Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned
            index, tree out_op)
!      Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned
            index)
!      Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned
            index, tree clobber_op)
!      Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: const char * gimple_asm_string (const gasm *g)
       Return the string representing the assembly instruction in
!      'GIMPLE_ASM' 'G'.
  
   -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g)
!      Return true if 'G' is an asm statement marked volatile.
  
   -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool
            volatile_p)
!      Mark asm statement 'G' as volatile or non-volatile based on
!      'VOLATILE_P'.
  
  
  File: gccint.info,  Node: GIMPLE_ASSIGN,  Next: GIMPLE_BIND,  Prev: GIMPLE_ASM,  Up: Tuple specific accessors
  
! 12.8.2 'GIMPLE_ASSIGN'
  ----------------------
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs)
!      Build a 'GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
       passed in lhs.  The right-hand side can be either a unary or binary
       tree expression.  The expression tree rhs will be flattened and its
       operands assigned to the corresponding operand slots in the new
--- 14633,14702 ----
  
  File: gccint.info,  Node: GIMPLE_ASM,  Next: GIMPLE_ASSIGN,  Up: Tuple specific accessors
  
! 12.8.1 ‘GIMPLE_ASM’
  -------------------
  
   -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string,
            vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree,
            va_gc> *clobbers, vec<tree, va_gc> *labels)
!      Build a ‘GIMPLE_ASM’ statement.  This statement is used for
!      building in-line assembly constructs.  ‘STRING’ is the assembly
!      code.  ‘INPUTS’, ‘OUTPUTS’, ‘CLOBBERS’ and ‘LABELS’ are the inputs,
       outputs, clobbered registers and labels.
  
   -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g)
!      Return the number of input operands for ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g)
!      Return the number of output operands for ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g)
!      Return the number of clobber operands for ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned
            index)
!      Return input operand ‘INDEX’ of ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned
            index, tree in_op)
!      Set ‘IN_OP’ to be input operand ‘INDEX’ in ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned
            index)
!      Return output operand ‘INDEX’ of ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned
            index, tree out_op)
!      Set ‘OUT_OP’ to be output operand ‘INDEX’ in ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned
            index)
!      Return clobber operand ‘INDEX’ of ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned
            index, tree clobber_op)
!      Set ‘CLOBBER_OP’ to be clobber operand ‘INDEX’ in ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: const char * gimple_asm_string (const gasm *g)
       Return the string representing the assembly instruction in
!      ‘GIMPLE_ASM’ ‘G’.
  
   -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g)
!      Return true if ‘G’ is an asm statement marked volatile.
  
   -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool
            volatile_p)
!      Mark asm statement ‘G’ as volatile or non-volatile based on
!      ‘VOLATILE_P’.
  
  
  File: gccint.info,  Node: GIMPLE_ASSIGN,  Next: GIMPLE_BIND,  Prev: GIMPLE_ASM,  Up: Tuple specific accessors
  
! 12.8.2 ‘GIMPLE_ASSIGN’
  ----------------------
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs)
!      Build a ‘GIMPLE_ASSIGN’ statement.  The left-hand side is an lvalue
       passed in lhs.  The right-hand side can be either a unary or binary
       tree expression.  The expression tree rhs will be flattened and its
       operands assigned to the corresponding operand slots in the new
*************** File: gccint.info,  Node: GIMPLE_ASSIGN,
*** 14702,15131 ****
       expression that you want to convert into a tuple.  However, try to
       avoid building expression trees for the sole purpose of calling
       this function.  If you already have the operands in separate trees,
!      it is better to use 'gimple_build_assign' with 'enum tree_code'
       argument and separate arguments for each operand.
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
            tree_code subcode, tree op1, tree op2, tree op3)
!      This function is similar to two operand 'gimple_build_assign', but
!      is used to build a 'GIMPLE_ASSIGN' statement when the operands of
       the right-hand side of the assignment are already split into
       different operands.
  
       The left-hand side is an lvalue passed in lhs.  Subcode is the
!      'tree_code' for the right-hand side of the assignment.  Op1, op2
       and op3 are the operands.
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
            tree_code subcode, tree op1, tree op2)
!      Like the above 5 operand 'gimple_build_assign', but with the last
!      argument 'NULL' - this overload should not be used for
!      'GIMPLE_TERNARY_RHS' assignments.
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
            tree_code subcode, tree op1)
!      Like the above 4 operand 'gimple_build_assign', but with the last
!      argument 'NULL' - this overload should be used only for
!      'GIMPLE_UNARY_RHS' and 'GIMPLE_SINGLE_RHS' assignments.
  
   -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
            gimple_seq *seq_p)
!      Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of
!      '*SEQ_P'.
  
!  'DST'/'SRC' are the destination and source respectively.  You can pass
! ungimplified trees in 'DST' or 'SRC', in which case they will be
  converted to a gimple operand if necessary.
  
!  This function returns the newly created 'GIMPLE_ASSIGN' tuple.
  
   -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
!      Return the code of the expression computed on the 'RHS' of
!      assignment statement 'G'.
  
   -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
            (gimple g)
       Return the gimple rhs class of the code for the expression computed
!      on the rhs of assignment statement 'G'.  This will never return
!      'GIMPLE_INVALID_RHS'.
  
   -- GIMPLE function: tree gimple_assign_lhs (gimple g)
!      Return the 'LHS' of assignment statement 'G'.
  
   -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
!      Return a pointer to the 'LHS' of assignment statement 'G'.
  
   -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
!      Return the first operand on the 'RHS' of assignment statement 'G'.
  
   -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
!      Return the address of the first operand on the 'RHS' of assignment
!      statement 'G'.
  
   -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
!      Return the second operand on the 'RHS' of assignment statement 'G'.
  
   -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
!      Return the address of the second operand on the 'RHS' of assignment
!      statement 'G'.
  
   -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
!      Return the third operand on the 'RHS' of assignment statement 'G'.
  
   -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
!      Return the address of the third operand on the 'RHS' of assignment
!      statement 'G'.
  
   -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
!      Set 'LHS' to be the 'LHS' operand of assignment statement 'G'.
  
   -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
!      Set 'RHS' to be the first operand on the 'RHS' of assignment
!      statement 'G'.
  
   -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
!      Set 'RHS' to be the second operand on the 'RHS' of assignment
!      statement 'G'.
  
   -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
!      Set 'RHS' to be the third operand on the 'RHS' of assignment
!      statement 'G'.
  
   -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s)
!      Return true if 'S' is a type-cast assignment.
  
  
  File: gccint.info,  Node: GIMPLE_BIND,  Next: GIMPLE_CALL,  Prev: GIMPLE_ASSIGN,  Up: Tuple specific accessors
  
! 12.8.3 'GIMPLE_BIND'
  --------------------
  
   -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq
            body)
!      Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS'
!      and a body of statements in sequence 'BODY'.
  
   -- GIMPLE function: tree gimple_bind_vars (const gbind *g)
!      Return the variables declared in the 'GIMPLE_BIND' statement 'G'.
  
   -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars)
!      Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND'
!      statement 'G'.
  
   -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars)
!      Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND'
!      statement 'G'.
  
   -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g)
!      Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement
!      'G'.
  
   -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq
            seq)
!      Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement
!      'G'.
  
   -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt)
!      Append a statement to the end of a 'GIMPLE_BIND''s body.
  
   -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq
            seq)
!      Append a sequence of statements to the end of a 'GIMPLE_BIND''s
       body.
  
   -- GIMPLE function: tree gimple_bind_block (const gbind *g)
!      Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND'
!      statement 'G'.  This is analogous to the 'BIND_EXPR_BLOCK' field in
       trees.
  
   -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block)
!      Set 'BLOCK' to be the 'TREE_BLOCK' node associated with
!      'GIMPLE_BIND' statement 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_CALL,  Next: GIMPLE_CATCH,  Prev: GIMPLE_BIND,  Up: Tuple specific accessors
  
! 12.8.4 'GIMPLE_CALL'
  --------------------
  
   -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs,
            ...)
!      Build a 'GIMPLE_CALL' statement to function 'FN'.  The argument
!      'FN' must be either a 'FUNCTION_DECL' or a gimple call address as
!      determined by 'is_gimple_call_addr'.  'NARGS' are the number of
!      arguments.  The rest of the arguments follow the argument 'NARGS',
       and must be trees that are valid as rvalues in gimple (i.e., each
!      operand is validated with 'is_gimple_operand').
  
   -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr,
            tree fnptrtype)
!      Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node.  The arguments and
       the function are taken from the expression directly.  The type of
!      the 'GIMPLE_CALL' is set from the second parameter passed by a
!      caller.  This routine assumes that 'call_expr' is already in GIMPLE
       form.  That is, its operands are GIMPLE values and the function
       call needs no further simplification.  All the call flags in
!      'call_expr' are copied over to the new 'GIMPLE_CALL'.
  
!  -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec<tree>'
            args)
!      Identical to 'gimple_build_call' but the arguments are stored in a
!      'vec<tree>'.
  
   -- GIMPLE function: tree gimple_call_lhs (gimple g)
!      Return the 'LHS' of call statement 'G'.
  
   -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
!      Return a pointer to the 'LHS' of call statement 'G'.
  
   -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
!      Set 'LHS' to be the 'LHS' operand of call statement 'G'.
  
   -- GIMPLE function: tree gimple_call_fn (gimple g)
       Return the tree node representing the function called by call
!      statement 'G'.
  
   -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn)
!      Set 'FN' to be the function called by call statement 'G'.  This has
       to be a gimple value specifying the address of the called function.
  
   -- GIMPLE function: tree gimple_call_fndecl (gimple g)
!      If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it.
!      Otherwise return 'NULL'.  This function is analogous to
!      'get_callee_fndecl' in 'GENERIC'.
  
   -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
!      Set the called function to 'FNDECL'.
  
   -- GIMPLE function: tree gimple_call_return_type (const gcall *g)
!      Return the type returned by call statement 'G'.
  
   -- GIMPLE function: tree gimple_call_chain (gimple g)
!      Return the static chain for call statement 'G'.
  
   -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain)
!      Set 'CHAIN' to be the static chain for call statement 'G'.
  
   -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
!      Return the number of arguments used by call statement 'G'.
  
   -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
!      Return the argument at position 'INDEX' for call statement 'G'.
       The first argument is 0.
  
   -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
            index)
!      Return a pointer to the argument at position 'INDEX' for call
!      statement 'G'.
  
   -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index,
            tree arg)
!      Set 'ARG' to be the argument at position 'INDEX' for call statement
!      'G'.
  
   -- GIMPLE function: void gimple_call_set_tail (gcall *s)
!      Mark call statement 'S' as being a tail call (i.e., a call just
       before the exit of a function).  These calls are candidate for tail
       call optimization.
  
   -- GIMPLE function: bool gimple_call_tail_p (gcall *s)
!      Return true if 'GIMPLE_CALL' 'S' is marked as a tail call.
  
   -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
!      Return true if 'S' is a noreturn call.
  
   -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt,
            bitmap args_to_skip)
!      Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the
!      arguments in the positions marked by the set 'ARGS_TO_SKIP'.
  
  
  File: gccint.info,  Node: GIMPLE_CATCH,  Next: GIMPLE_COND,  Prev: GIMPLE_CALL,  Up: Tuple specific accessors
  
! 12.8.5 'GIMPLE_CATCH'
  ---------------------
  
   -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq
            handler)
!      Build a 'GIMPLE_CATCH' statement.  'TYPES' are the tree types this
!      catch handles.  'HANDLER' is a sequence of statements with the code
       for the handler.
  
   -- GIMPLE function: tree gimple_catch_types (const gcatch *g)
!      Return the types handled by 'GIMPLE_CATCH' statement 'G'.
  
   -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g)
!      Return a pointer to the types handled by 'GIMPLE_CATCH' statement
!      'G'.
  
   -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g)
       Return the GIMPLE sequence representing the body of the handler of
!      'GIMPLE_CATCH' statement 'G'.
  
   -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t)
!      Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'.
  
   -- GIMPLE function: void gimple_catch_set_handler (gcatch *g,
            gimple_seq handler)
!      Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_COND,  Next: GIMPLE_DEBUG,  Prev: GIMPLE_CATCH,  Up: Tuple specific accessors
  
! 12.8.6 'GIMPLE_COND'
  --------------------
  
   -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code
            pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
!      Build a 'GIMPLE_COND' statement.  'A' 'GIMPLE_COND' statement
!      compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is
!      true, jump to the label in 't_label', otherwise jump to the label
!      in 'f_label'.  'PRED_CODE' are relational operator tree codes like
!      'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc.
  
   -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree
            t_label, tree f_label)
!      Build a 'GIMPLE_COND' statement from the conditional expression
!      tree 'COND'.  'T_LABEL' and 'F_LABEL' are as in
!      'gimple_build_cond'.
  
   -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
       Return the code of the predicate computed by conditional statement
!      'G'.
  
   -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code
            code)
!      Set 'CODE' to be the predicate code for the conditional statement
!      'G'.
  
   -- GIMPLE function: tree gimple_cond_lhs (gimple g)
!      Return the 'LHS' of the predicate computed by conditional statement
!      'G'.
  
   -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs)
!      Set 'LHS' to be the 'LHS' operand of the predicate computed by
!      conditional statement 'G'.
  
   -- GIMPLE function: tree gimple_cond_rhs (gimple g)
!      Return the 'RHS' operand of the predicate computed by conditional
!      'G'.
  
   -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs)
!      Set 'RHS' to be the 'RHS' operand of the predicate computed by
!      conditional statement 'G'.
  
   -- GIMPLE function: tree gimple_cond_true_label (const gcond *g)
!      Return the label used by conditional statement 'G' when its
       predicate evaluates to true.
  
   -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree
            label)
!      Set 'LABEL' to be the label used by conditional statement 'G' when
       its predicate evaluates to true.
  
   -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree
            label)
!      Set 'LABEL' to be the label used by conditional statement 'G' when
       its predicate evaluates to false.
  
   -- GIMPLE function: tree gimple_cond_false_label (const gcond *g)
!      Return the label used by conditional statement 'G' when its
       predicate evaluates to false.
  
   -- GIMPLE function: void gimple_cond_make_false (gcond *g)
!      Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'.
  
   -- GIMPLE function: void gimple_cond_make_true (gcond *g)
!      Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'.
  
  
  File: gccint.info,  Node: GIMPLE_DEBUG,  Next: GIMPLE_EH_FILTER,  Prev: GIMPLE_COND,  Up: Tuple specific accessors
  
! 12.8.7 'GIMPLE_DEBUG'
  ---------------------
  
   -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree
            value, gimple stmt)
!      Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND'
!      'subcode'.  The effect of this statement is to tell debug
       information generation machinery that the value of user variable
!      'var' is given by 'value' at that point, and to remain with that
!      value until 'var' runs out of scope, a dynamically-subsequent debug
       bind statement overrides the binding, or conflicting values reach a
!      control flow merge point.  Even if components of the 'value'
       expression change afterwards, the variable is supposed to retain
       the same value, though not necessarily the same location.
  
!      It is expected that 'var' be most often a tree for automatic user
!      variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements
       for gimple registers, but it may also be a tree for a scalarized
!      component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a
!      debug temporary ('DEBUG_EXPR_DECL').
  
!      As for 'value', it can be an arbitrary tree expression, but it is
       recommended that it be in a suitable form for a gimple assignment
!      'RHS'.  It is not expected that user variables that could appear as
!      'var' ever appear in 'value', because in the latter we'd have their
!      'SSA_NAME's instead, but even if they were not in SSA form, user
!      variables appearing in 'value' are to be regarded as part of the
!      executable code space, whereas those in 'var' are to be regarded as
       part of the source code space.  There is no way to refer to the
!      value bound to a user variable within a 'value' expression.
  
!      If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information
!      generation machinery is informed that the variable 'var' is
       unbound, i.e., that its value is indeterminate, which sometimes
       means it is really unavailable, and other times that the compiler
       could not keep track of it.
  
       Block and location information for the newly-created stmt are taken
!      from 'stmt', if given.
  
   -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
!      Return the user variable VAR that is bound at 'stmt'.
  
   -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
       Return the value expression that is bound to a user variable at
!      'stmt'.
  
   -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
            stmt)
       Return a pointer to the value expression that is bound to a user
!      variable at 'stmt'.
  
   -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
            var)
!      Modify the user variable bound at 'stmt' to VAR.
  
   -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree
            var)
!      Modify the value bound to the user variable bound at 'stmt' to
       VALUE.
  
   -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
!      Modify the value bound to the user variable bound at 'stmt' so that
       the variable becomes unbound.
  
   -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
!      Return 'TRUE' if 'stmt' binds a user variable to a value, and
!      'FALSE' if it unbinds the variable.
  
   -- GIMPLE function: gimple gimple_build_debug_begin_stmt (tree block,
            location_t location)
!      Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BEGIN_STMT'
!      'subcode'.  The effect of this statement is to tell debug
       information generation machinery that the user statement at the
!      given 'location' and 'block' starts at the point at which the
       statement is inserted.  The intent is that side effects (e.g.
       variable bindings) of all prior user statements are observable, and
       that none of the side effects of subsequent user statements are.
  
   -- GIMPLE function: gimple gimple_build_debug_inline_entry (tree block,
            location_t location)
!      Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_INLINE_ENTRY'
!      'subcode'.  The effect of this statement is to tell debug
!      information generation machinery that a function call at 'location'
!      underwent inline substitution, that 'block' is the enclosing
       lexical block created for the substitution, and that at the point
       of the program in which the stmt is inserted, all parameters for
       the inlined function are bound to the respective arguments, and
--- 14704,15133 ----
       expression that you want to convert into a tuple.  However, try to
       avoid building expression trees for the sole purpose of calling
       this function.  If you already have the operands in separate trees,
!      it is better to use ‘gimple_build_assign’ with ‘enum tree_code’
       argument and separate arguments for each operand.
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
            tree_code subcode, tree op1, tree op2, tree op3)
!      This function is similar to two operand ‘gimple_build_assign’, but
!      is used to build a ‘GIMPLE_ASSIGN’ statement when the operands of
       the right-hand side of the assignment are already split into
       different operands.
  
       The left-hand side is an lvalue passed in lhs.  Subcode is the
!      ‘tree_code’ for the right-hand side of the assignment.  Op1, op2
       and op3 are the operands.
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
            tree_code subcode, tree op1, tree op2)
!      Like the above 5 operand ‘gimple_build_assign’, but with the last
!      argument ‘NULL’ - this overload should not be used for
!      ‘GIMPLE_TERNARY_RHS’ assignments.
  
   -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
            tree_code subcode, tree op1)
!      Like the above 4 operand ‘gimple_build_assign’, but with the last
!      argument ‘NULL’ - this overload should be used only for
!      ‘GIMPLE_UNARY_RHS’ and ‘GIMPLE_SINGLE_RHS’ assignments.
  
   -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
            gimple_seq *seq_p)
!      Build a new ‘GIMPLE_ASSIGN’ tuple and append it to the end of
!      ‘*SEQ_P’.
  
!  ‘DST’/‘SRC’ are the destination and source respectively.  You can pass
! ungimplified trees in ‘DST’ or ‘SRC’, in which case they will be
  converted to a gimple operand if necessary.
  
!  This function returns the newly created ‘GIMPLE_ASSIGN’ tuple.
  
   -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
!      Return the code of the expression computed on the ‘RHS’ of
!      assignment statement ‘G’.
  
   -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
            (gimple g)
       Return the gimple rhs class of the code for the expression computed
!      on the rhs of assignment statement ‘G’.  This will never return
!      ‘GIMPLE_INVALID_RHS’.
  
   -- GIMPLE function: tree gimple_assign_lhs (gimple g)
!      Return the ‘LHS’ of assignment statement ‘G’.
  
   -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
!      Return a pointer to the ‘LHS’ of assignment statement ‘G’.
  
   -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
!      Return the first operand on the ‘RHS’ of assignment statement ‘G’.
  
   -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
!      Return the address of the first operand on the ‘RHS’ of assignment
!      statement ‘G’.
  
   -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
!      Return the second operand on the ‘RHS’ of assignment statement ‘G’.
  
   -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
!      Return the address of the second operand on the ‘RHS’ of assignment
!      statement ‘G’.
  
   -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
!      Return the third operand on the ‘RHS’ of assignment statement ‘G’.
  
   -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
!      Return the address of the third operand on the ‘RHS’ of assignment
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
!      Set ‘LHS’ to be the ‘LHS’ operand of assignment statement ‘G’.
  
   -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
!      Set ‘RHS’ to be the first operand on the ‘RHS’ of assignment
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
!      Set ‘RHS’ to be the second operand on the ‘RHS’ of assignment
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
!      Set ‘RHS’ to be the third operand on the ‘RHS’ of assignment
!      statement ‘G’.
  
   -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s)
!      Return true if ‘S’ is a type-cast assignment.
  
  
  File: gccint.info,  Node: GIMPLE_BIND,  Next: GIMPLE_CALL,  Prev: GIMPLE_ASSIGN,  Up: Tuple specific accessors
  
! 12.8.3 ‘GIMPLE_BIND’
  --------------------
  
   -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq
            body)
!      Build a ‘GIMPLE_BIND’ statement with a list of variables in ‘VARS’
!      and a body of statements in sequence ‘BODY’.
  
   -- GIMPLE function: tree gimple_bind_vars (const gbind *g)
!      Return the variables declared in the ‘GIMPLE_BIND’ statement ‘G’.
  
   -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars)
!      Set ‘VARS’ to be the set of variables declared in the ‘GIMPLE_BIND’
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars)
!      Append ‘VARS’ to the set of variables declared in the ‘GIMPLE_BIND’
!      statement ‘G’.
  
   -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g)
!      Return the GIMPLE sequence contained in the ‘GIMPLE_BIND’ statement
!      ‘G’.
  
   -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq
            seq)
!      Set ‘SEQ’ to be sequence contained in the ‘GIMPLE_BIND’ statement
!      ‘G’.
  
   -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt)
!      Append a statement to the end of a ‘GIMPLE_BIND’'s body.
  
   -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq
            seq)
!      Append a sequence of statements to the end of a ‘GIMPLE_BIND’'s
       body.
  
   -- GIMPLE function: tree gimple_bind_block (const gbind *g)
!      Return the ‘TREE_BLOCK’ node associated with ‘GIMPLE_BIND’
!      statement ‘G’.  This is analogous to the ‘BIND_EXPR_BLOCK’ field in
       trees.
  
   -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block)
!      Set ‘BLOCK’ to be the ‘TREE_BLOCK’ node associated with
!      ‘GIMPLE_BIND’ statement ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_CALL,  Next: GIMPLE_CATCH,  Prev: GIMPLE_BIND,  Up: Tuple specific accessors
  
! 12.8.4 ‘GIMPLE_CALL’
  --------------------
  
   -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs,
            ...)
!      Build a ‘GIMPLE_CALL’ statement to function ‘FN’.  The argument
!      ‘FN’ must be either a ‘FUNCTION_DECL’ or a gimple call address as
!      determined by ‘is_gimple_call_addr’.  ‘NARGS’ are the number of
!      arguments.  The rest of the arguments follow the argument ‘NARGS’,
       and must be trees that are valid as rvalues in gimple (i.e., each
!      operand is validated with ‘is_gimple_operand’).
  
   -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr,
            tree fnptrtype)
!      Build a ‘GIMPLE_CALL’ from a ‘CALL_EXPR’ node.  The arguments and
       the function are taken from the expression directly.  The type of
!      the ‘GIMPLE_CALL’ is set from the second parameter passed by a
!      caller.  This routine assumes that ‘call_expr’ is already in GIMPLE
       form.  That is, its operands are GIMPLE values and the function
       call needs no further simplification.  All the call flags in
!      ‘call_expr’ are copied over to the new ‘GIMPLE_CALL’.
  
!  -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, vec<tree>
            args)
!      Identical to ‘gimple_build_call’ but the arguments are stored in a
!      ‘vec<tree>’.
  
   -- GIMPLE function: tree gimple_call_lhs (gimple g)
!      Return the ‘LHS’ of call statement ‘G’.
  
   -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
!      Return a pointer to the ‘LHS’ of call statement ‘G’.
  
   -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
!      Set ‘LHS’ to be the ‘LHS’ operand of call statement ‘G’.
  
   -- GIMPLE function: tree gimple_call_fn (gimple g)
       Return the tree node representing the function called by call
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn)
!      Set ‘FN’ to be the function called by call statement ‘G’.  This has
       to be a gimple value specifying the address of the called function.
  
   -- GIMPLE function: tree gimple_call_fndecl (gimple g)
!      If a given ‘GIMPLE_CALL’'s callee is a ‘FUNCTION_DECL’, return it.
!      Otherwise return ‘NULL’.  This function is analogous to
!      ‘get_callee_fndecl’ in ‘GENERIC’.
  
   -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
!      Set the called function to ‘FNDECL’.
  
   -- GIMPLE function: tree gimple_call_return_type (const gcall *g)
!      Return the type returned by call statement ‘G’.
  
   -- GIMPLE function: tree gimple_call_chain (gimple g)
!      Return the static chain for call statement ‘G’.
  
   -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain)
!      Set ‘CHAIN’ to be the static chain for call statement ‘G’.
  
   -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
!      Return the number of arguments used by call statement ‘G’.
  
   -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
!      Return the argument at position ‘INDEX’ for call statement ‘G’.
       The first argument is 0.
  
   -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
            index)
!      Return a pointer to the argument at position ‘INDEX’ for call
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index,
            tree arg)
!      Set ‘ARG’ to be the argument at position ‘INDEX’ for call statement
!      ‘G’.
  
   -- GIMPLE function: void gimple_call_set_tail (gcall *s)
!      Mark call statement ‘S’ as being a tail call (i.e., a call just
       before the exit of a function).  These calls are candidate for tail
       call optimization.
  
   -- GIMPLE function: bool gimple_call_tail_p (gcall *s)
!      Return true if ‘GIMPLE_CALL’ ‘S’ is marked as a tail call.
  
   -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
!      Return true if ‘S’ is a noreturn call.
  
   -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt,
            bitmap args_to_skip)
!      Build a ‘GIMPLE_CALL’ identical to ‘STMT’ but skipping the
!      arguments in the positions marked by the set ‘ARGS_TO_SKIP’.
  
  
  File: gccint.info,  Node: GIMPLE_CATCH,  Next: GIMPLE_COND,  Prev: GIMPLE_CALL,  Up: Tuple specific accessors
  
! 12.8.5 ‘GIMPLE_CATCH’
  ---------------------
  
   -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq
            handler)
!      Build a ‘GIMPLE_CATCH’ statement.  ‘TYPES’ are the tree types this
!      catch handles.  ‘HANDLER’ is a sequence of statements with the code
       for the handler.
  
   -- GIMPLE function: tree gimple_catch_types (const gcatch *g)
!      Return the types handled by ‘GIMPLE_CATCH’ statement ‘G’.
  
   -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g)
!      Return a pointer to the types handled by ‘GIMPLE_CATCH’ statement
!      ‘G’.
  
   -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g)
       Return the GIMPLE sequence representing the body of the handler of
!      ‘GIMPLE_CATCH’ statement ‘G’.
  
   -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t)
!      Set ‘T’ to be the set of types handled by ‘GIMPLE_CATCH’ ‘G’.
  
   -- GIMPLE function: void gimple_catch_set_handler (gcatch *g,
            gimple_seq handler)
!      Set ‘HANDLER’ to be the body of ‘GIMPLE_CATCH’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_COND,  Next: GIMPLE_DEBUG,  Prev: GIMPLE_CATCH,  Up: Tuple specific accessors
  
! 12.8.6 ‘GIMPLE_COND’
  --------------------
  
   -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code
            pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
!      Build a ‘GIMPLE_COND’ statement.  ‘A’ ‘GIMPLE_COND’ statement
!      compares ‘LHS’ and ‘RHS’ and if the condition in ‘PRED_CODE’ is
!      true, jump to the label in ‘t_label’, otherwise jump to the label
!      in ‘f_label’.  ‘PRED_CODE’ are relational operator tree codes like
!      ‘EQ_EXPR’, ‘LT_EXPR’, ‘LE_EXPR’, ‘NE_EXPR’, etc.
  
   -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree
            t_label, tree f_label)
!      Build a ‘GIMPLE_COND’ statement from the conditional expression
!      tree ‘COND’.  ‘T_LABEL’ and ‘F_LABEL’ are as in
!      ‘gimple_build_cond’.
  
   -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
       Return the code of the predicate computed by conditional statement
!      ‘G’.
  
   -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code
            code)
!      Set ‘CODE’ to be the predicate code for the conditional statement
!      ‘G’.
  
   -- GIMPLE function: tree gimple_cond_lhs (gimple g)
!      Return the ‘LHS’ of the predicate computed by conditional statement
!      ‘G’.
  
   -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs)
!      Set ‘LHS’ to be the ‘LHS’ operand of the predicate computed by
!      conditional statement ‘G’.
  
   -- GIMPLE function: tree gimple_cond_rhs (gimple g)
!      Return the ‘RHS’ operand of the predicate computed by conditional
!      ‘G’.
  
   -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs)
!      Set ‘RHS’ to be the ‘RHS’ operand of the predicate computed by
!      conditional statement ‘G’.
  
   -- GIMPLE function: tree gimple_cond_true_label (const gcond *g)
!      Return the label used by conditional statement ‘G’ when its
       predicate evaluates to true.
  
   -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree
            label)
!      Set ‘LABEL’ to be the label used by conditional statement ‘G’ when
       its predicate evaluates to true.
  
   -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree
            label)
!      Set ‘LABEL’ to be the label used by conditional statement ‘G’ when
       its predicate evaluates to false.
  
   -- GIMPLE function: tree gimple_cond_false_label (const gcond *g)
!      Return the label used by conditional statement ‘G’ when its
       predicate evaluates to false.
  
   -- GIMPLE function: void gimple_cond_make_false (gcond *g)
!      Set the conditional ‘COND_STMT’ to be of the form 'if (1 == 0)'.
  
   -- GIMPLE function: void gimple_cond_make_true (gcond *g)
!      Set the conditional ‘COND_STMT’ to be of the form 'if (1 == 1)'.
  
  
  File: gccint.info,  Node: GIMPLE_DEBUG,  Next: GIMPLE_EH_FILTER,  Prev: GIMPLE_COND,  Up: Tuple specific accessors
  
! 12.8.7 ‘GIMPLE_DEBUG’
  ---------------------
  
   -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree
            value, gimple stmt)
!      Build a ‘GIMPLE_DEBUG’ statement with ‘GIMPLE_DEBUG_BIND’
!      ‘subcode’.  The effect of this statement is to tell debug
       information generation machinery that the value of user variable
!      ‘var’ is given by ‘value’ at that point, and to remain with that
!      value until ‘var’ runs out of scope, a dynamically-subsequent debug
       bind statement overrides the binding, or conflicting values reach a
!      control flow merge point.  Even if components of the ‘value’
       expression change afterwards, the variable is supposed to retain
       the same value, though not necessarily the same location.
  
!      It is expected that ‘var’ be most often a tree for automatic user
!      variables (‘VAR_DECL’ or ‘PARM_DECL’) that satisfy the requirements
       for gimple registers, but it may also be a tree for a scalarized
!      component of a user variable (‘ARRAY_REF’, ‘COMPONENT_REF’), or a
!      debug temporary (‘DEBUG_EXPR_DECL’).
  
!      As for ‘value’, it can be an arbitrary tree expression, but it is
       recommended that it be in a suitable form for a gimple assignment
!      ‘RHS’.  It is not expected that user variables that could appear as
!      ‘var’ ever appear in ‘value’, because in the latter we'd have their
!      ‘SSA_NAME’s instead, but even if they were not in SSA form, user
!      variables appearing in ‘value’ are to be regarded as part of the
!      executable code space, whereas those in ‘var’ are to be regarded as
       part of the source code space.  There is no way to refer to the
!      value bound to a user variable within a ‘value’ expression.
  
!      If ‘value’ is ‘GIMPLE_DEBUG_BIND_NOVALUE’, debug information
!      generation machinery is informed that the variable ‘var’ is
       unbound, i.e., that its value is indeterminate, which sometimes
       means it is really unavailable, and other times that the compiler
       could not keep track of it.
  
       Block and location information for the newly-created stmt are taken
!      from ‘stmt’, if given.
  
   -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
!      Return the user variable VAR that is bound at ‘stmt’.
  
   -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
       Return the value expression that is bound to a user variable at
!      ‘stmt’.
  
   -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
            stmt)
       Return a pointer to the value expression that is bound to a user
!      variable at ‘stmt’.
  
   -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
            var)
!      Modify the user variable bound at ‘stmt’ to VAR.
  
   -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree
            var)
!      Modify the value bound to the user variable bound at ‘stmt’ to
       VALUE.
  
   -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
!      Modify the value bound to the user variable bound at ‘stmt’ so that
       the variable becomes unbound.
  
   -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
!      Return ‘TRUE’ if ‘stmt’ binds a user variable to a value, and
!      ‘FALSE’ if it unbinds the variable.
  
   -- GIMPLE function: gimple gimple_build_debug_begin_stmt (tree block,
            location_t location)
!      Build a ‘GIMPLE_DEBUG’ statement with ‘GIMPLE_DEBUG_BEGIN_STMT’
!      ‘subcode’.  The effect of this statement is to tell debug
       information generation machinery that the user statement at the
!      given ‘location’ and ‘block’ starts at the point at which the
       statement is inserted.  The intent is that side effects (e.g.
       variable bindings) of all prior user statements are observable, and
       that none of the side effects of subsequent user statements are.
  
   -- GIMPLE function: gimple gimple_build_debug_inline_entry (tree block,
            location_t location)
!      Build a ‘GIMPLE_DEBUG’ statement with ‘GIMPLE_DEBUG_INLINE_ENTRY’
!      ‘subcode’.  The effect of this statement is to tell debug
!      information generation machinery that a function call at ‘location’
!      underwent inline substitution, that ‘block’ is the enclosing
       lexical block created for the substitution, and that at the point
       of the program in which the stmt is inserted, all parameters for
       the inlined function are bound to the respective arguments, and
*************** File: gccint.info,  Node: GIMPLE_DEBUG,
*** 15134,15167 ****
  
  File: gccint.info,  Node: GIMPLE_EH_FILTER,  Next: GIMPLE_LABEL,  Prev: GIMPLE_DEBUG,  Up: Tuple specific accessors
  
! 12.8.8 'GIMPLE_EH_FILTER'
  -------------------------
  
   -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types,
            gimple_seq failure)
!      Build a 'GIMPLE_EH_FILTER' statement.  'TYPES' are the filter's
!      types.  'FAILURE' is a sequence with the filter's failure action.
  
   -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
!      Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'.
  
   -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
!      Return a pointer to the types handled by 'GIMPLE_EH_FILTER'
!      statement 'G'.
  
   -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
!      Return the sequence of statement to execute when 'GIMPLE_EH_FILTER'
       statement fails.
  
   -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g,
            tree types)
!      Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER'
!      'G'.
  
   -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g,
            gimple_seq failure)
!      Set 'FAILURE' to be the sequence of statements to execute on
!      failure for 'GIMPLE_EH_FILTER' 'G'.
  
   -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt
            *eh_mnt_stmt)
--- 15136,15169 ----
  
  File: gccint.info,  Node: GIMPLE_EH_FILTER,  Next: GIMPLE_LABEL,  Prev: GIMPLE_DEBUG,  Up: Tuple specific accessors
  
! 12.8.8 ‘GIMPLE_EH_FILTER’
  -------------------------
  
   -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types,
            gimple_seq failure)
!      Build a ‘GIMPLE_EH_FILTER’ statement.  ‘TYPES’ are the filter's
!      types.  ‘FAILURE’ is a sequence with the filter's failure action.
  
   -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
!      Return the types handled by ‘GIMPLE_EH_FILTER’ statement ‘G’.
  
   -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
!      Return a pointer to the types handled by ‘GIMPLE_EH_FILTER’
!      statement ‘G’.
  
   -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
!      Return the sequence of statement to execute when ‘GIMPLE_EH_FILTER’
       statement fails.
  
   -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g,
            tree types)
!      Set ‘TYPES’ to be the set of types handled by ‘GIMPLE_EH_FILTER’
!      ‘G’.
  
   -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g,
            gimple_seq failure)
!      Set ‘FAILURE’ to be the sequence of statements to execute on
!      failure for ‘GIMPLE_EH_FILTER’ ‘G’.
  
   -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt
            *eh_mnt_stmt)
*************** File: gccint.info,  Node: GIMPLE_EH_FILT
*** 15174,15257 ****
  
  File: gccint.info,  Node: GIMPLE_LABEL,  Next: GIMPLE_GOTO,  Prev: GIMPLE_EH_FILTER,  Up: Tuple specific accessors
  
! 12.8.9 'GIMPLE_LABEL'
  ---------------------
  
   -- GIMPLE function: glabel *gimple_build_label (tree label)
!      Build a 'GIMPLE_LABEL' statement with corresponding to the tree
!      label, 'LABEL'.
  
   -- GIMPLE function: tree gimple_label_label (const glabel *g)
!      Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'.
  
   -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label)
!      Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL'
!      statement 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_GOTO,  Next: GIMPLE_NOP,  Prev: GIMPLE_LABEL,  Up: Tuple specific accessors
  
! 12.8.10 'GIMPLE_GOTO'
  ---------------------
  
   -- GIMPLE function: ggoto *gimple_build_goto (tree dest)
!      Build a 'GIMPLE_GOTO' statement to label 'DEST'.
  
   -- GIMPLE function: tree gimple_goto_dest (gimple g)
!      Return the destination of the unconditional jump 'G'.
  
   -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest)
!      Set 'DEST' to be the destination of the unconditional jump 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_NOP,  Next: GIMPLE_OMP_ATOMIC_LOAD,  Prev: GIMPLE_GOTO,  Up: Tuple specific accessors
  
! 12.8.11 'GIMPLE_NOP'
  --------------------
  
   -- GIMPLE function: gimple gimple_build_nop (void)
!      Build a 'GIMPLE_NOP' statement.
  
   -- GIMPLE function: bool gimple_nop_p (gimple g)
!      Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_ATOMIC_LOAD,  Next: GIMPLE_OMP_ATOMIC_STORE,  Prev: GIMPLE_NOP,  Up: Tuple specific accessors
  
! 12.8.12 'GIMPLE_OMP_ATOMIC_LOAD'
  --------------------------------
  
   -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load (
            tree lhs, tree rhs)
!      Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement.  'LHS' is the left-hand
!      side of the assignment.  'RHS' is the right-hand side of the
       assignment.
  
   -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (
            gomp_atomic_load *g, tree lhs)
!      Set the 'LHS' of an atomic load.
  
   -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const
            gomp_atomic_load *g)
!      Get the 'LHS' of an atomic load.
  
   -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (
            gomp_atomic_load *g, tree rhs)
!      Set the 'RHS' of an atomic set.
  
   -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const
            gomp_atomic_load *g)
!      Get the 'RHS' of an atomic set.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_ATOMIC_STORE,  Next: GIMPLE_OMP_CONTINUE,  Prev: GIMPLE_OMP_ATOMIC_LOAD,  Up: Tuple specific accessors
  
! 12.8.13 'GIMPLE_OMP_ATOMIC_STORE'
  ---------------------------------
  
   -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store (
            tree val)
!      Build a 'GIMPLE_OMP_ATOMIC_STORE' statement.  'VAL' is the value to
       be stored.
  
   -- GIMPLE function: void gimple_omp_atomic_store_set_val (
--- 15176,15259 ----
  
  File: gccint.info,  Node: GIMPLE_LABEL,  Next: GIMPLE_GOTO,  Prev: GIMPLE_EH_FILTER,  Up: Tuple specific accessors
  
! 12.8.9 ‘GIMPLE_LABEL’
  ---------------------
  
   -- GIMPLE function: glabel *gimple_build_label (tree label)
!      Build a ‘GIMPLE_LABEL’ statement with corresponding to the tree
!      label, ‘LABEL’.
  
   -- GIMPLE function: tree gimple_label_label (const glabel *g)
!      Return the ‘LABEL_DECL’ node used by ‘GIMPLE_LABEL’ statement ‘G’.
  
   -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label)
!      Set ‘LABEL’ to be the ‘LABEL_DECL’ node used by ‘GIMPLE_LABEL’
!      statement ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_GOTO,  Next: GIMPLE_NOP,  Prev: GIMPLE_LABEL,  Up: Tuple specific accessors
  
! 12.8.10 ‘GIMPLE_GOTO’
  ---------------------
  
   -- GIMPLE function: ggoto *gimple_build_goto (tree dest)
!      Build a ‘GIMPLE_GOTO’ statement to label ‘DEST’.
  
   -- GIMPLE function: tree gimple_goto_dest (gimple g)
!      Return the destination of the unconditional jump ‘G’.
  
   -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest)
!      Set ‘DEST’ to be the destination of the unconditional jump ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_NOP,  Next: GIMPLE_OMP_ATOMIC_LOAD,  Prev: GIMPLE_GOTO,  Up: Tuple specific accessors
  
! 12.8.11 ‘GIMPLE_NOP’
  --------------------
  
   -- GIMPLE function: gimple gimple_build_nop (void)
!      Build a ‘GIMPLE_NOP’ statement.
  
   -- GIMPLE function: bool gimple_nop_p (gimple g)
!      Returns ‘TRUE’ if statement ‘G’ is a ‘GIMPLE_NOP’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_ATOMIC_LOAD,  Next: GIMPLE_OMP_ATOMIC_STORE,  Prev: GIMPLE_NOP,  Up: Tuple specific accessors
  
! 12.8.12 ‘GIMPLE_OMP_ATOMIC_LOAD’
  --------------------------------
  
   -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load (
            tree lhs, tree rhs)
!      Build a ‘GIMPLE_OMP_ATOMIC_LOAD’ statement.  ‘LHS’ is the left-hand
!      side of the assignment.  ‘RHS’ is the right-hand side of the
       assignment.
  
   -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (
            gomp_atomic_load *g, tree lhs)
!      Set the ‘LHS’ of an atomic load.
  
   -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const
            gomp_atomic_load *g)
!      Get the ‘LHS’ of an atomic load.
  
   -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (
            gomp_atomic_load *g, tree rhs)
!      Set the ‘RHS’ of an atomic set.
  
   -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const
            gomp_atomic_load *g)
!      Get the ‘RHS’ of an atomic set.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_ATOMIC_STORE,  Next: GIMPLE_OMP_CONTINUE,  Prev: GIMPLE_OMP_ATOMIC_LOAD,  Up: Tuple specific accessors
  
! 12.8.13 ‘GIMPLE_OMP_ATOMIC_STORE’
  ---------------------------------
  
   -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store (
            tree val)
!      Build a ‘GIMPLE_OMP_ATOMIC_STORE’ statement.  ‘VAL’ is the value to
       be stored.
  
   -- GIMPLE function: void gimple_omp_atomic_store_set_val (
*************** File: gccint.info,  Node: GIMPLE_OMP_ATO
*** 15265,15283 ****
  
  File: gccint.info,  Node: GIMPLE_OMP_CONTINUE,  Next: GIMPLE_OMP_CRITICAL,  Prev: GIMPLE_OMP_ATOMIC_STORE,  Up: Tuple specific accessors
  
! 12.8.14 'GIMPLE_OMP_CONTINUE'
  -----------------------------
  
   -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree
            control_def, tree control_use)
!      Build a 'GIMPLE_OMP_CONTINUE' statement.  'CONTROL_DEF' is the
!      definition of the control variable.  'CONTROL_USE' is the use of
       the control variable.
  
   -- GIMPLE function: tree gimple_omp_continue_control_def ( const
            gomp_continue *s)
       Return the definition of the control variable on a
!      'GIMPLE_OMP_CONTINUE' in 'S'.
  
   -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (
            gomp_continue *s)
--- 15267,15285 ----
  
  File: gccint.info,  Node: GIMPLE_OMP_CONTINUE,  Next: GIMPLE_OMP_CRITICAL,  Prev: GIMPLE_OMP_ATOMIC_STORE,  Up: Tuple specific accessors
  
! 12.8.14 ‘GIMPLE_OMP_CONTINUE’
  -----------------------------
  
   -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree
            control_def, tree control_use)
!      Build a ‘GIMPLE_OMP_CONTINUE’ statement.  ‘CONTROL_DEF’ is the
!      definition of the control variable.  ‘CONTROL_USE’ is the use of
       the control variable.
  
   -- GIMPLE function: tree gimple_omp_continue_control_def ( const
            gomp_continue *s)
       Return the definition of the control variable on a
!      ‘GIMPLE_OMP_CONTINUE’ in ‘S’.
  
   -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (
            gomp_continue *s)
*************** File: gccint.info,  Node: GIMPLE_OMP_CON
*** 15285,15297 ****
  
   -- GIMPLE function: tree gimple_omp_continue_set_control_def (
            gomp_continue *s)
!      Set the control variable definition for a 'GIMPLE_OMP_CONTINUE'
!      statement in 'S'.
  
   -- GIMPLE function: tree gimple_omp_continue_control_use ( const
            gomp_continue *s)
!      Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE'
!      in 'S'.
  
   -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (
            gomp_continue *s)
--- 15287,15299 ----
  
   -- GIMPLE function: tree gimple_omp_continue_set_control_def (
            gomp_continue *s)
!      Set the control variable definition for a ‘GIMPLE_OMP_CONTINUE’
!      statement in ‘S’.
  
   -- GIMPLE function: tree gimple_omp_continue_control_use ( const
            gomp_continue *s)
!      Return the use of the control variable on a ‘GIMPLE_OMP_CONTINUE’
!      in ‘S’.
  
   -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (
            gomp_continue *s)
*************** File: gccint.info,  Node: GIMPLE_OMP_CON
*** 15299,15729 ****
  
   -- GIMPLE function: tree gimple_omp_continue_set_control_use (
            gomp_continue *s)
!      Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement
!      in 'S'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_CRITICAL,  Next: GIMPLE_OMP_FOR,  Prev: GIMPLE_OMP_CONTINUE,  Up: Tuple specific accessors
  
! 12.8.15 'GIMPLE_OMP_CRITICAL'
  -----------------------------
  
   -- GIMPLE function: gomp_critical *gimple_build_omp_critical (
            gimple_seq body, tree name)
!      Build a 'GIMPLE_OMP_CRITICAL' statement.  'BODY' is the sequence of
!      statements for which only one thread can execute.  'NAME' is an
       optional identifier for this critical block.
  
   -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical
            *g)
!      Return the name associated with 'OMP_CRITICAL' statement 'G'.
  
   -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical
            *g)
!      Return a pointer to the name associated with 'OMP' critical
!      statement 'G'.
  
   -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical
            *g, tree name)
!      Set 'NAME' to be the name associated with 'OMP' critical statement
!      'G'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_FOR,  Next: GIMPLE_OMP_MASTER,  Prev: GIMPLE_OMP_CRITICAL,  Up: Tuple specific accessors
  
! 12.8.16 'GIMPLE_OMP_FOR'
  ------------------------
  
   -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body,
            tree clauses, tree index, tree initial, tree final, tree incr,
            gimple_seq pre_body, enum tree_code omp_for_cond)
!      Build a 'GIMPLE_OMP_FOR' statement.  'BODY' is sequence of
!      statements inside the for loop.  'CLAUSES', are any of the loop
!      construct's clauses.  'PRE_BODY' is the sequence of statements that
!      are loop invariant.  'INDEX' is the index variable.  'INITIAL' is
!      the initial value of 'INDEX'.  'FINAL' is final value of 'INDEX'.
!      OMP_FOR_COND is the predicate used to compare 'INDEX' and 'FINAL'.
!      'INCR' is the increment expression.
  
   -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
!      Return the clauses associated with 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
!      Return a pointer to the 'OMP_FOR' 'G'.
  
   -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
            clauses)
!      Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR'
!      'G'.
  
   -- GIMPLE function: tree gimple_omp_for_index (gimple g)
!      Return the index variable for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
!      Return a pointer to the index variable for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
            index)
!      Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
!      Return the initial value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
!      Return a pointer to the initial value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
            initial)
!      Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree gimple_omp_for_final (gimple g)
!      Return the final value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
!      turn a pointer to the final value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
            final)
!      Set 'FINAL' to be the final value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
!      Return the increment value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
!      Return a pointer to the increment value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
!      Set 'INCR' to be the increment value for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
!      Return the sequence of statements to execute before the 'OMP_FOR'
!      statement 'G' starts.
  
   -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
            gimple_seq pre_body)
!      Set 'PRE_BODY' to be the sequence of statements to execute before
!      the 'OMP_FOR' statement 'G' starts.
  
   -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
            tree_code cond)
!      Set 'COND' to be the condition code for 'OMP_FOR' 'G'.
  
   -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
!      Return the condition code associated with 'OMP_FOR' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_MASTER,  Next: GIMPLE_OMP_ORDERED,  Prev: GIMPLE_OMP_FOR,  Up: Tuple specific accessors
  
! 12.8.17 'GIMPLE_OMP_MASTER'
  ---------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
!      Build a 'GIMPLE_OMP_MASTER' statement.  'BODY' is the sequence of
       statements to be executed by just the master.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_ORDERED,  Next: GIMPLE_OMP_PARALLEL,  Prev: GIMPLE_OMP_MASTER,  Up: Tuple specific accessors
  
! 12.8.18 'GIMPLE_OMP_ORDERED'
  ----------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
!      Build a 'GIMPLE_OMP_ORDERED' statement.
  
!      'BODY' is the sequence of statements inside a loop that will
       executed in sequence.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_PARALLEL,  Next: GIMPLE_OMP_RETURN,  Prev: GIMPLE_OMP_ORDERED,  Up: Tuple specific accessors
  
! 12.8.19 'GIMPLE_OMP_PARALLEL'
  -----------------------------
  
   -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel
            (gimple_seq body, tree clauses, tree child_fn, tree data_arg)
!      Build a 'GIMPLE_OMP_PARALLEL' statement.
  
!      'BODY' is sequence of statements which are executed in parallel.
!      'CLAUSES', are the 'OMP' parallel construct's clauses.  'CHILD_FN'
       is the function created for the parallel threads to execute.
!      'DATA_ARG' are the shared data argument(s).
  
   -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
!      Return true if 'OMP' parallel statement 'G' has the
!      'GF_OMP_PARALLEL_COMBINED' flag set.
  
   -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
!      Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel
!      statement 'G'.
  
   -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
!      Return the body for the 'OMP' statement 'G'.
  
   -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
            body)
!      Set 'BODY' to be the body for the 'OMP' statement 'G'.
  
   -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
!      Return the clauses associated with 'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (
            gomp_parallel *g)
!      Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: void gimple_omp_parallel_set_clauses (
            gomp_parallel *g, tree clauses)
!      Set 'CLAUSES' to be the list of clauses associated with
!      'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const
            gomp_parallel *g)
!      Return the child function used to hold the body of 'OMP_PARALLEL'
!      'G'.
  
   -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (
            gomp_parallel *g)
       Return a pointer to the child function used to hold the body of
!      'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: void gimple_omp_parallel_set_child_fn (
            gomp_parallel *g, tree child_fn)
!      Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const
            gomp_parallel *g)
       Return the artificial argument used to send variables and values
!      from the parent to the children threads in 'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (
            gomp_parallel *g)
!      Return a pointer to the data argument for 'OMP_PARALLEL' 'G'.
  
   -- GIMPLE function: void gimple_omp_parallel_set_data_arg (
            gomp_parallel *g, tree data_arg)
!      Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_RETURN,  Next: GIMPLE_OMP_SECTION,  Prev: GIMPLE_OMP_PARALLEL,  Up: Tuple specific accessors
  
! 12.8.20 'GIMPLE_OMP_RETURN'
  ---------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
!      Build a 'GIMPLE_OMP_RETURN' statement.  'WAIT_P' is true if this is
       a non-waiting return.
  
   -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
!      Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'.
  
   -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
!      Return true if 'OMP' return statement 'G' has the
!      'GF_OMP_RETURN_NOWAIT' flag set.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_SECTION,  Next: GIMPLE_OMP_SECTIONS,  Prev: GIMPLE_OMP_RETURN,  Up: Tuple specific accessors
  
! 12.8.21 'GIMPLE_OMP_SECTION'
  ----------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
!      Build a 'GIMPLE_OMP_SECTION' statement for a sections statement.
  
!      'BODY' is the sequence of statements in the section.
  
   -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
!      Return true if 'OMP' section statement 'G' has the
!      'GF_OMP_SECTION_LAST' flag set.
  
   -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
!      Set the 'GF_OMP_SECTION_LAST' flag on 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_SECTIONS,  Next: GIMPLE_OMP_SINGLE,  Prev: GIMPLE_OMP_SECTION,  Up: Tuple specific accessors
  
! 12.8.22 'GIMPLE_OMP_SECTIONS'
  -----------------------------
  
   -- GIMPLE function: gomp_sections *gimple_build_omp_sections (
            gimple_seq body, tree clauses)
!      Build a 'GIMPLE_OMP_SECTIONS' statement.  'BODY' is a sequence of
!      section statements.  'CLAUSES' are any of the 'OMP' sections
       construct's clauses: private, firstprivate, lastprivate, reduction,
       and nowait.
  
   -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
!      Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement.
  
   -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
       Return the control variable associated with the
!      'GIMPLE_OMP_SECTIONS' in 'G'.
  
   -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
       Return a pointer to the clauses associated with the
!      'GIMPLE_OMP_SECTIONS' in 'G'.
  
   -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
            tree control)
!      Set 'CONTROL' to be the set of clauses associated with the
!      'GIMPLE_OMP_SECTIONS' in 'G'.
  
   -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
!      Return the clauses associated with 'OMP_SECTIONS' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
!      Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'.
  
   -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
            tree clauses)
!      Set 'CLAUSES' to be the set of clauses associated with
!      'OMP_SECTIONS' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_SINGLE,  Next: GIMPLE_OMP_STRUCTURED_BLOCK,  Prev: GIMPLE_OMP_SECTIONS,  Up: Tuple specific accessors
  
! 12.8.23 'GIMPLE_OMP_SINGLE'
  ---------------------------
  
   -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq
            body, tree clauses)
!      Build a 'GIMPLE_OMP_SINGLE' statement.  'BODY' is the sequence of
!      statements that will be executed once.  'CLAUSES' are any of the
!      'OMP' single construct's clauses: private, firstprivate,
       copyprivate, nowait.
  
   -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
!      Return the clauses associated with 'OMP_SINGLE' 'G'.
  
   -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
!      Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'.
  
   -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single
            *g, tree clauses)
!      Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_STRUCTURED_BLOCK,  Next: GIMPLE_PHI,  Prev: GIMPLE_OMP_SINGLE,  Up: Tuple specific accessors
  
! 12.8.24 'GIMPLE_OMP_STRUCTURED_BLOCK'
  -------------------------------------
  
! Like the GENERIC equivalent 'OMP_STRUCTURED_BLOCK', this GIMPLE
  statement does not correspond directly to an OpenMP directive, and
  exists only to permit error checking of transfers of control in/out of
! structured block sequences (the 'diagnose_omp_blocks' pass in
! 'omp-low.cc').  All 'GIMPLE_OMP_STRUCTURED_BLOCK' nodes are eliminated
  during OpenMP lowering.
  
   -- GIMPLE function: gimple gimple_build_omp_structured_block
            (gimple_seq body)
!      Build a 'GIMPLE_OMP_STRUCTURED_BLOCK' statement.  'BODY' is the
       sequence of statements in the structured block sequence.
  
  
  File: gccint.info,  Node: GIMPLE_PHI,  Next: GIMPLE_RESX,  Prev: GIMPLE_OMP_STRUCTURED_BLOCK,  Up: Tuple specific accessors
  
! 12.8.25 'GIMPLE_PHI'
  --------------------
  
   -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
!      Return the maximum number of arguments supported by 'GIMPLE_PHI'
!      'G'.
  
   -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
!      Return the number of arguments in 'GIMPLE_PHI' 'G'.  This must
       always be exactly the number of incoming edges for the basic block
!      holding 'G'.
  
   -- GIMPLE function: tree gimple_phi_result (gimple g)
!      Return the 'SSA' name created by 'GIMPLE_PHI' 'G'.
  
   -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
!      Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'.
  
   -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result)
!      Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'.
  
   -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
!      Return the 'PHI' argument corresponding to incoming edge 'INDEX'
!      for 'GIMPLE_PHI' 'G'.
  
   -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct
            phi_arg_d * phiarg)
!      Set 'PHIARG' to be the argument corresponding to incoming edge
!      'INDEX' for 'GIMPLE_PHI' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_RESX,  Next: GIMPLE_RETURN,  Prev: GIMPLE_PHI,  Up: Tuple specific accessors
  
! 12.8.26 'GIMPLE_RESX'
  ---------------------
  
   -- GIMPLE function: gresx *gimple_build_resx (int region)
!      Build a 'GIMPLE_RESX' statement which is a statement.  This
       statement is a placeholder for _Unwind_Resume before we know if a
!      function call or a branch is needed.  'REGION' is the exception
       region from which control is flowing.
  
   -- GIMPLE function: int gimple_resx_region (const gresx *g)
!      Return the region number for 'GIMPLE_RESX' 'G'.
  
   -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region)
!      Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_RETURN,  Next: GIMPLE_SWITCH,  Prev: GIMPLE_RESX,  Up: Tuple specific accessors
  
! 12.8.27 'GIMPLE_RETURN'
  -----------------------
  
   -- GIMPLE function: greturn *gimple_build_return (tree retval)
!      Build a 'GIMPLE_RETURN' statement whose return value is retval.
  
   -- GIMPLE function: tree gimple_return_retval (const greturn *g)
!      Return the return value for 'GIMPLE_RETURN' 'G'.
  
   -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree
            retval)
!      Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_SWITCH,  Next: GIMPLE_TRY,  Prev: GIMPLE_RETURN,  Up: Tuple specific accessors
  
! 12.8.28 'GIMPLE_SWITCH'
  -----------------------
  
   -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree
!           default_label, 'vec'<tree> *args)
!      Build a 'GIMPLE_SWITCH' statement.  'INDEX' is the index variable
!      to switch on, and 'DEFAULT_LABEL' represents the default label.
!      'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the
       non-default case labels.  Each label is a tree of code
!      'CASE_LABEL_EXPR'.
  
   -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch
            *g)
       Return the number of labels associated with the switch statement
!      'G'.
  
   -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g,
            unsigned nlabels)
!      Set 'NLABELS' to be the number of labels for the switch statement
!      'G'.
  
   -- GIMPLE function: tree gimple_switch_index (const gswitch *g)
!      Return the index variable used by the switch statement 'G'.
  
   -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree
            index)
!      Set 'INDEX' to be the index variable for switch statement 'G'.
  
   -- GIMPLE function: tree gimple_switch_label (const gswitch *g,
            unsigned index)
!      Return the label numbered 'INDEX'.  The default label is 0,
       followed by any labels in a switch statement.
  
   -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned
            index, tree label)
!      Set the label number 'INDEX' to 'LABEL'.  0 is always the default
       label.
  
   -- GIMPLE function: tree gimple_switch_default_label ( const gswitch
--- 15301,15731 ----
  
   -- GIMPLE function: tree gimple_omp_continue_set_control_use (
            gomp_continue *s)
!      Set the control variable use for a ‘GIMPLE_OMP_CONTINUE’ statement
!      in ‘S’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_CRITICAL,  Next: GIMPLE_OMP_FOR,  Prev: GIMPLE_OMP_CONTINUE,  Up: Tuple specific accessors
  
! 12.8.15 ‘GIMPLE_OMP_CRITICAL’
  -----------------------------
  
   -- GIMPLE function: gomp_critical *gimple_build_omp_critical (
            gimple_seq body, tree name)
!      Build a ‘GIMPLE_OMP_CRITICAL’ statement.  ‘BODY’ is the sequence of
!      statements for which only one thread can execute.  ‘NAME’ is an
       optional identifier for this critical block.
  
   -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical
            *g)
!      Return the name associated with ‘OMP_CRITICAL’ statement ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical
            *g)
!      Return a pointer to the name associated with ‘OMP’ critical
!      statement ‘G’.
  
   -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical
            *g, tree name)
!      Set ‘NAME’ to be the name associated with ‘OMP’ critical statement
!      ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_FOR,  Next: GIMPLE_OMP_MASTER,  Prev: GIMPLE_OMP_CRITICAL,  Up: Tuple specific accessors
  
! 12.8.16 ‘GIMPLE_OMP_FOR’
  ------------------------
  
   -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body,
            tree clauses, tree index, tree initial, tree final, tree incr,
            gimple_seq pre_body, enum tree_code omp_for_cond)
!      Build a ‘GIMPLE_OMP_FOR’ statement.  ‘BODY’ is sequence of
!      statements inside the for loop.  ‘CLAUSES’, are any of the loop
!      construct's clauses.  ‘PRE_BODY’ is the sequence of statements that
!      are loop invariant.  ‘INDEX’ is the index variable.  ‘INITIAL’ is
!      the initial value of ‘INDEX’.  ‘FINAL’ is final value of ‘INDEX’.
!      OMP_FOR_COND is the predicate used to compare ‘INDEX’ and ‘FINAL’.
!      ‘INCR’ is the increment expression.
  
   -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
!      Return the clauses associated with ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
!      Return a pointer to the ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
            clauses)
!      Set ‘CLAUSES’ to be the list of clauses associated with ‘OMP_FOR’
!      ‘G’.
  
   -- GIMPLE function: tree gimple_omp_for_index (gimple g)
!      Return the index variable for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
!      Return a pointer to the index variable for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
            index)
!      Set ‘INDEX’ to be the index variable for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
!      Return the initial value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
!      Return a pointer to the initial value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
            initial)
!      Set ‘INITIAL’ to be the initial value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree gimple_omp_for_final (gimple g)
!      Return the final value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
!      turn a pointer to the final value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
            final)
!      Set ‘FINAL’ to be the final value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
!      Return the increment value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
!      Return a pointer to the increment value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
!      Set ‘INCR’ to be the increment value for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
!      Return the sequence of statements to execute before the ‘OMP_FOR’
!      statement ‘G’ starts.
  
   -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
            gimple_seq pre_body)
!      Set ‘PRE_BODY’ to be the sequence of statements to execute before
!      the ‘OMP_FOR’ statement ‘G’ starts.
  
   -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
            tree_code cond)
!      Set ‘COND’ to be the condition code for ‘OMP_FOR’ ‘G’.
  
   -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
!      Return the condition code associated with ‘OMP_FOR’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_MASTER,  Next: GIMPLE_OMP_ORDERED,  Prev: GIMPLE_OMP_FOR,  Up: Tuple specific accessors
  
! 12.8.17 ‘GIMPLE_OMP_MASTER’
  ---------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
!      Build a ‘GIMPLE_OMP_MASTER’ statement.  ‘BODY’ is the sequence of
       statements to be executed by just the master.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_ORDERED,  Next: GIMPLE_OMP_PARALLEL,  Prev: GIMPLE_OMP_MASTER,  Up: Tuple specific accessors
  
! 12.8.18 ‘GIMPLE_OMP_ORDERED’
  ----------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
!      Build a ‘GIMPLE_OMP_ORDERED’ statement.
  
!      ‘BODY’ is the sequence of statements inside a loop that will
       executed in sequence.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_PARALLEL,  Next: GIMPLE_OMP_RETURN,  Prev: GIMPLE_OMP_ORDERED,  Up: Tuple specific accessors
  
! 12.8.19 ‘GIMPLE_OMP_PARALLEL’
  -----------------------------
  
   -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel
            (gimple_seq body, tree clauses, tree child_fn, tree data_arg)
!      Build a ‘GIMPLE_OMP_PARALLEL’ statement.
  
!      ‘BODY’ is sequence of statements which are executed in parallel.
!      ‘CLAUSES’, are the ‘OMP’ parallel construct's clauses.  ‘CHILD_FN’
       is the function created for the parallel threads to execute.
!      ‘DATA_ARG’ are the shared data argument(s).
  
   -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
!      Return true if ‘OMP’ parallel statement ‘G’ has the
!      ‘GF_OMP_PARALLEL_COMBINED’ flag set.
  
   -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
!      Set the ‘GF_OMP_PARALLEL_COMBINED’ field in ‘OMP’ parallel
!      statement ‘G’.
  
   -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
!      Return the body for the ‘OMP’ statement ‘G’.
  
   -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
            body)
!      Set ‘BODY’ to be the body for the ‘OMP’ statement ‘G’.
  
   -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
!      Return the clauses associated with ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (
            gomp_parallel *g)
!      Return a pointer to the clauses associated with ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_parallel_set_clauses (
            gomp_parallel *g, tree clauses)
!      Set ‘CLAUSES’ to be the list of clauses associated with
!      ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const
            gomp_parallel *g)
!      Return the child function used to hold the body of ‘OMP_PARALLEL’
!      ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (
            gomp_parallel *g)
       Return a pointer to the child function used to hold the body of
!      ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_parallel_set_child_fn (
            gomp_parallel *g, tree child_fn)
!      Set ‘CHILD_FN’ to be the child function for ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const
            gomp_parallel *g)
       Return the artificial argument used to send variables and values
!      from the parent to the children threads in ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (
            gomp_parallel *g)
!      Return a pointer to the data argument for ‘OMP_PARALLEL’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_parallel_set_data_arg (
            gomp_parallel *g, tree data_arg)
!      Set ‘DATA_ARG’ to be the data argument for ‘OMP_PARALLEL’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_RETURN,  Next: GIMPLE_OMP_SECTION,  Prev: GIMPLE_OMP_PARALLEL,  Up: Tuple specific accessors
  
! 12.8.20 ‘GIMPLE_OMP_RETURN’
  ---------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
!      Build a ‘GIMPLE_OMP_RETURN’ statement.  ‘WAIT_P’ is true if this is
       a non-waiting return.
  
   -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
!      Set the nowait flag on ‘GIMPLE_OMP_RETURN’ statement ‘S’.
  
   -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
!      Return true if ‘OMP’ return statement ‘G’ has the
!      ‘GF_OMP_RETURN_NOWAIT’ flag set.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_SECTION,  Next: GIMPLE_OMP_SECTIONS,  Prev: GIMPLE_OMP_RETURN,  Up: Tuple specific accessors
  
! 12.8.21 ‘GIMPLE_OMP_SECTION’
  ----------------------------
  
   -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
!      Build a ‘GIMPLE_OMP_SECTION’ statement for a sections statement.
  
!      ‘BODY’ is the sequence of statements in the section.
  
   -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
!      Return true if ‘OMP’ section statement ‘G’ has the
!      ‘GF_OMP_SECTION_LAST’ flag set.
  
   -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
!      Set the ‘GF_OMP_SECTION_LAST’ flag on ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_SECTIONS,  Next: GIMPLE_OMP_SINGLE,  Prev: GIMPLE_OMP_SECTION,  Up: Tuple specific accessors
  
! 12.8.22 ‘GIMPLE_OMP_SECTIONS’
  -----------------------------
  
   -- GIMPLE function: gomp_sections *gimple_build_omp_sections (
            gimple_seq body, tree clauses)
!      Build a ‘GIMPLE_OMP_SECTIONS’ statement.  ‘BODY’ is a sequence of
!      section statements.  ‘CLAUSES’ are any of the ‘OMP’ sections
       construct's clauses: private, firstprivate, lastprivate, reduction,
       and nowait.
  
   -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
!      Build a ‘GIMPLE_OMP_SECTIONS_SWITCH’ statement.
  
   -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
       Return the control variable associated with the
!      ‘GIMPLE_OMP_SECTIONS’ in ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
       Return a pointer to the clauses associated with the
!      ‘GIMPLE_OMP_SECTIONS’ in ‘G’.
  
   -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
            tree control)
!      Set ‘CONTROL’ to be the set of clauses associated with the
!      ‘GIMPLE_OMP_SECTIONS’ in ‘G’.
  
   -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
!      Return the clauses associated with ‘OMP_SECTIONS’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
!      Return a pointer to the clauses associated with ‘OMP_SECTIONS’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
            tree clauses)
!      Set ‘CLAUSES’ to be the set of clauses associated with
!      ‘OMP_SECTIONS’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_SINGLE,  Next: GIMPLE_OMP_STRUCTURED_BLOCK,  Prev: GIMPLE_OMP_SECTIONS,  Up: Tuple specific accessors
  
! 12.8.23 ‘GIMPLE_OMP_SINGLE’
  ---------------------------
  
   -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq
            body, tree clauses)
!      Build a ‘GIMPLE_OMP_SINGLE’ statement.  ‘BODY’ is the sequence of
!      statements that will be executed once.  ‘CLAUSES’ are any of the
!      ‘OMP’ single construct's clauses: private, firstprivate,
       copyprivate, nowait.
  
   -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
!      Return the clauses associated with ‘OMP_SINGLE’ ‘G’.
  
   -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
!      Return a pointer to the clauses associated with ‘OMP_SINGLE’ ‘G’.
  
   -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single
            *g, tree clauses)
!      Set ‘CLAUSES’ to be the clauses associated with ‘OMP_SINGLE’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_OMP_STRUCTURED_BLOCK,  Next: GIMPLE_PHI,  Prev: GIMPLE_OMP_SINGLE,  Up: Tuple specific accessors
  
! 12.8.24 ‘GIMPLE_OMP_STRUCTURED_BLOCK’
  -------------------------------------
  
! Like the GENERIC equivalent ‘OMP_STRUCTURED_BLOCK’, this GIMPLE
  statement does not correspond directly to an OpenMP directive, and
  exists only to permit error checking of transfers of control in/out of
! structured block sequences (the ‘diagnose_omp_blocks’ pass in
! ‘omp-low.cc’).  All ‘GIMPLE_OMP_STRUCTURED_BLOCK’ nodes are eliminated
  during OpenMP lowering.
  
   -- GIMPLE function: gimple gimple_build_omp_structured_block
            (gimple_seq body)
!      Build a ‘GIMPLE_OMP_STRUCTURED_BLOCK’ statement.  ‘BODY’ is the
       sequence of statements in the structured block sequence.
  
  
  File: gccint.info,  Node: GIMPLE_PHI,  Next: GIMPLE_RESX,  Prev: GIMPLE_OMP_STRUCTURED_BLOCK,  Up: Tuple specific accessors
  
! 12.8.25 ‘GIMPLE_PHI’
  --------------------
  
   -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
!      Return the maximum number of arguments supported by ‘GIMPLE_PHI’
!      ‘G’.
  
   -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
!      Return the number of arguments in ‘GIMPLE_PHI’ ‘G’.  This must
       always be exactly the number of incoming edges for the basic block
!      holding ‘G’.
  
   -- GIMPLE function: tree gimple_phi_result (gimple g)
!      Return the ‘SSA’ name created by ‘GIMPLE_PHI’ ‘G’.
  
   -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
!      Return a pointer to the ‘SSA’ name created by ‘GIMPLE_PHI’ ‘G’.
  
   -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result)
!      Set ‘RESULT’ to be the ‘SSA’ name created by ‘GIMPLE_PHI’ ‘G’.
  
   -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
!      Return the ‘PHI’ argument corresponding to incoming edge ‘INDEX’
!      for ‘GIMPLE_PHI’ ‘G’.
  
   -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct
            phi_arg_d * phiarg)
!      Set ‘PHIARG’ to be the argument corresponding to incoming edge
!      ‘INDEX’ for ‘GIMPLE_PHI’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_RESX,  Next: GIMPLE_RETURN,  Prev: GIMPLE_PHI,  Up: Tuple specific accessors
  
! 12.8.26 ‘GIMPLE_RESX’
  ---------------------
  
   -- GIMPLE function: gresx *gimple_build_resx (int region)
!      Build a ‘GIMPLE_RESX’ statement which is a statement.  This
       statement is a placeholder for _Unwind_Resume before we know if a
!      function call or a branch is needed.  ‘REGION’ is the exception
       region from which control is flowing.
  
   -- GIMPLE function: int gimple_resx_region (const gresx *g)
!      Return the region number for ‘GIMPLE_RESX’ ‘G’.
  
   -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region)
!      Set ‘REGION’ to be the region number for ‘GIMPLE_RESX’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_RETURN,  Next: GIMPLE_SWITCH,  Prev: GIMPLE_RESX,  Up: Tuple specific accessors
  
! 12.8.27 ‘GIMPLE_RETURN’
  -----------------------
  
   -- GIMPLE function: greturn *gimple_build_return (tree retval)
!      Build a ‘GIMPLE_RETURN’ statement whose return value is retval.
  
   -- GIMPLE function: tree gimple_return_retval (const greturn *g)
!      Return the return value for ‘GIMPLE_RETURN’ ‘G’.
  
   -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree
            retval)
!      Set ‘RETVAL’ to be the return value for ‘GIMPLE_RETURN’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_SWITCH,  Next: GIMPLE_TRY,  Prev: GIMPLE_RETURN,  Up: Tuple specific accessors
  
! 12.8.28 ‘GIMPLE_SWITCH’
  -----------------------
  
   -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree
!           default_label, vec<tree> *args)
!      Build a ‘GIMPLE_SWITCH’ statement.  ‘INDEX’ is the index variable
!      to switch on, and ‘DEFAULT_LABEL’ represents the default label.
!      ‘ARGS’ is a vector of ‘CASE_LABEL_EXPR’ trees that contain the
       non-default case labels.  Each label is a tree of code
!      ‘CASE_LABEL_EXPR’.
  
   -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch
            *g)
       Return the number of labels associated with the switch statement
!      ‘G’.
  
   -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g,
            unsigned nlabels)
!      Set ‘NLABELS’ to be the number of labels for the switch statement
!      ‘G’.
  
   -- GIMPLE function: tree gimple_switch_index (const gswitch *g)
!      Return the index variable used by the switch statement ‘G’.
  
   -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree
            index)
!      Set ‘INDEX’ to be the index variable for switch statement ‘G’.
  
   -- GIMPLE function: tree gimple_switch_label (const gswitch *g,
            unsigned index)
!      Return the label numbered ‘INDEX’.  The default label is 0,
       followed by any labels in a switch statement.
  
   -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned
            index, tree label)
!      Set the label number ‘INDEX’ to ‘LABEL’.  0 is always the default
       label.
  
   -- GIMPLE function: tree gimple_switch_default_label ( const gswitch
*************** File: gccint.info,  Node: GIMPLE_SWITCH,
*** 15737,15805 ****
  
  File: gccint.info,  Node: GIMPLE_TRY,  Next: GIMPLE_WITH_CLEANUP_EXPR,  Prev: GIMPLE_SWITCH,  Up: Tuple specific accessors
  
! 12.8.29 'GIMPLE_TRY'
  --------------------
  
   -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq
            cleanup, unsigned int kind)
!      Build a 'GIMPLE_TRY' statement.  'EVAL' is a sequence with the
!      expression to evaluate.  'CLEANUP' is a sequence of statements to
!      run at clean-up time.  'KIND' is the enumeration value
!      'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
!      or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
       construct.
  
   -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
!      Return the kind of try block represented by 'GIMPLE_TRY' 'G'.  This
!      is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'.
  
   -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
!      Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
  
   -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
!      Return the sequence of statements used as the body for 'GIMPLE_TRY'
!      'G'.
  
   -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
       Return the sequence of statements used as the cleanup body for
!      'GIMPLE_TRY' 'G'.
  
   -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
            bool catch_is_cleanup)
!      Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
  
   -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval)
!      Set 'EVAL' to be the sequence of statements to use as the body for
!      'GIMPLE_TRY' 'G'.
  
   -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq
            cleanup)
!      Set 'CLEANUP' to be the sequence of statements to use as the
!      cleanup body for 'GIMPLE_TRY' 'G'.
  
  
  File: gccint.info,  Node: GIMPLE_WITH_CLEANUP_EXPR,  Prev: GIMPLE_TRY,  Up: Tuple specific accessors
  
! 12.8.30 'GIMPLE_WITH_CLEANUP_EXPR'
  ----------------------------------
  
   -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
!      Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement.  'CLEANUP' is the
       clean-up expression.
  
   -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
!      Return the cleanup sequence for cleanup statement 'G'.
  
   -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
            cleanup)
!      Set 'CLEANUP' to be the cleanup sequence for 'G'.
  
   -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
!      Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.
  
   -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool
            eh_only_p)
!      Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.
  
  
  File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
--- 15739,15807 ----
  
  File: gccint.info,  Node: GIMPLE_TRY,  Next: GIMPLE_WITH_CLEANUP_EXPR,  Prev: GIMPLE_SWITCH,  Up: Tuple specific accessors
  
! 12.8.29 ‘GIMPLE_TRY’
  --------------------
  
   -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq
            cleanup, unsigned int kind)
!      Build a ‘GIMPLE_TRY’ statement.  ‘EVAL’ is a sequence with the
!      expression to evaluate.  ‘CLEANUP’ is a sequence of statements to
!      run at clean-up time.  ‘KIND’ is the enumeration value
!      ‘GIMPLE_TRY_CATCH’ if this statement denotes a try/catch construct
!      or ‘GIMPLE_TRY_FINALLY’ if this statement denotes a try/finally
       construct.
  
   -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
!      Return the kind of try block represented by ‘GIMPLE_TRY’ ‘G’.  This
!      is either ‘GIMPLE_TRY_CATCH’ or ‘GIMPLE_TRY_FINALLY’.
  
   -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
!      Return the ‘GIMPLE_TRY_CATCH_IS_CLEANUP’ flag.
  
   -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
!      Return the sequence of statements used as the body for ‘GIMPLE_TRY’
!      ‘G’.
  
   -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
       Return the sequence of statements used as the cleanup body for
!      ‘GIMPLE_TRY’ ‘G’.
  
   -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
            bool catch_is_cleanup)
!      Set the ‘GIMPLE_TRY_CATCH_IS_CLEANUP’ flag.
  
   -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval)
!      Set ‘EVAL’ to be the sequence of statements to use as the body for
!      ‘GIMPLE_TRY’ ‘G’.
  
   -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq
            cleanup)
!      Set ‘CLEANUP’ to be the sequence of statements to use as the
!      cleanup body for ‘GIMPLE_TRY’ ‘G’.
  
  
  File: gccint.info,  Node: GIMPLE_WITH_CLEANUP_EXPR,  Prev: GIMPLE_TRY,  Up: Tuple specific accessors
  
! 12.8.30 ‘GIMPLE_WITH_CLEANUP_EXPR’
  ----------------------------------
  
   -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
!      Build a ‘GIMPLE_WITH_CLEANUP_EXPR’ statement.  ‘CLEANUP’ is the
       clean-up expression.
  
   -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
!      Return the cleanup sequence for cleanup statement ‘G’.
  
   -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
            cleanup)
!      Set ‘CLEANUP’ to be the cleanup sequence for ‘G’.
  
   -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
!      Return the ‘CLEANUP_EH_ONLY’ flag for a ‘WCE’ tuple.
  
   -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool
            eh_only_p)
!      Set the ‘CLEANUP_EH_ONLY’ flag for a ‘WCE’ tuple.
  
  
  File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
*************** File: gccint.info,  Node: GIMPLE sequenc
*** 15807,15824 ****
  12.9 GIMPLE sequences
  =====================
  
! GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in
! 'GENERIC'.  They are used to chain statements together, and when used in
  conjunction with sequence iterators, provide a framework for iterating
  through statements.
  
!  GIMPLE sequences are of type struct 'gimple_sequence', but are more
  commonly passed by reference to functions dealing with sequences.  The
! type for a sequence pointer is 'gimple_seq' which is the same as struct
! 'gimple_sequence' *.  When declaring a local sequence, you can define a
! local variable of type struct 'gimple_sequence'.  When declaring a
  sequence allocated on the garbage collected heap, use the function
! 'gimple_seq_alloc' documented below.
  
   There are convenience functions for iterating through sequences in the
  section entitled Sequence Iterators.
--- 15809,15826 ----
  12.9 GIMPLE sequences
  =====================
  
! GIMPLE sequences are the tuple equivalent of ‘STATEMENT_LIST’'s used in
! ‘GENERIC’.  They are used to chain statements together, and when used in
  conjunction with sequence iterators, provide a framework for iterating
  through statements.
  
!  GIMPLE sequences are of type struct ‘gimple_sequence’, but are more
  commonly passed by reference to functions dealing with sequences.  The
! type for a sequence pointer is ‘gimple_seq’ which is the same as struct
! ‘gimple_sequence’ *.  When declaring a local sequence, you can define a
! local variable of type struct ‘gimple_sequence’.  When declaring a
  sequence allocated on the garbage collected heap, use the function
! ‘gimple_seq_alloc’ documented below.
  
   There are convenience functions for iterating through sequences in the
  section entitled Sequence Iterators.
*************** section entitled Sequence Iterators.
*** 15827,15866 ****
  
   -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
            g)
!      Link a gimple statement to the end of the sequence *'SEQ' if 'G' is
!      not 'NULL'.  If *'SEQ' is 'NULL', allocate a sequence before
       linking.
  
   -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
            gimple_seq src)
!      Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is
!      not 'NULL'.  If *'DEST' is 'NULL', allocate a new sequence before
       appending.
  
   -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
!      Perform a deep copy of sequence 'SRC' and return the result.
  
   -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
!      Reverse the order of the statements in the sequence 'SEQ'.  Return
!      'SEQ'.
  
   -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
!      Return the first statement in sequence 'S'.
  
   -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
!      Return the last statement in sequence 'S'.
  
   -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
            last)
!      Set the last statement in sequence 'S' to the statement in 'LAST'.
  
   -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
            first)
!      Set the first statement in sequence 'S' to the statement in
!      'FIRST'.
  
   -- GIMPLE function: void gimple_seq_init (gimple_seq s)
!      Initialize sequence 'S' to an empty sequence.
  
   -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
       Allocate a new sequence in the garbage collected store and return
--- 15829,15868 ----
  
   -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
            g)
!      Link a gimple statement to the end of the sequence *‘SEQ’ if ‘G’ is
!      not ‘NULL’.  If *‘SEQ’ is ‘NULL’, allocate a sequence before
       linking.
  
   -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
            gimple_seq src)
!      Append sequence ‘SRC’ to the end of sequence *‘DEST’ if ‘SRC’ is
!      not ‘NULL’.  If *‘DEST’ is ‘NULL’, allocate a new sequence before
       appending.
  
   -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
!      Perform a deep copy of sequence ‘SRC’ and return the result.
  
   -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
!      Reverse the order of the statements in the sequence ‘SEQ’.  Return
!      ‘SEQ’.
  
   -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
!      Return the first statement in sequence ‘S’.
  
   -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
!      Return the last statement in sequence ‘S’.
  
   -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
            last)
!      Set the last statement in sequence ‘S’ to the statement in ‘LAST’.
  
   -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
            first)
!      Set the first statement in sequence ‘S’ to the statement in
!      ‘FIRST’.
  
   -- GIMPLE function: void gimple_seq_init (gimple_seq s)
!      Initialize sequence ‘S’ to an empty sequence.
  
   -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
       Allocate a new sequence in the garbage collected store and return
*************** section entitled Sequence Iterators.
*** 15868,15886 ****
  
   -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
            src)
!      Copy the sequence 'SRC' into the sequence 'DEST'.
  
   -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
!      Return true if the sequence 'S' is empty.
  
   -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
!      Returns the sequence of statements in 'BB'.
  
   -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
!      Sets the sequence of statements in 'BB' to 'SEQ'.
  
   -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
!      Determine whether 'SEQ' contains exactly one statement.
  
  
  File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
--- 15870,15888 ----
  
   -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
            src)
!      Copy the sequence ‘SRC’ into the sequence ‘DEST’.
  
   -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
!      Return true if the sequence ‘S’ is empty.
  
   -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
!      Returns the sequence of statements in ‘BB’.
  
   -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
!      Sets the sequence of statements in ‘BB’ to ‘SEQ’.
  
   -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
!      Determine whether ‘SEQ’ contains exactly one statement.
  
  
  File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
*************** File: gccint.info,  Node: Sequence itera
*** 15889,15895 ****
  ========================
  
  Sequence iterators are convenience constructs for iterating through
! statements in a sequence.  Given a sequence 'SEQ', here is a typical use
  of gimple sequence iterators:
  
       gimple_stmt_iterator gsi;
--- 15891,15897 ----
  ========================
  
  Sequence iterators are convenience constructs for iterating through
! statements in a sequence.  Given a sequence ‘SEQ’, here is a typical use
  of gimple sequence iterators:
  
       gimple_stmt_iterator gsi;
*************** of gimple sequence iterators:
*** 15905,15951 ****
               for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
  
   Forward and backward iterations on basic blocks are possible with
! 'gsi_start_bb' and 'gsi_last_bb'.
  
   In the documentation below we sometimes refer to enum
! 'gsi_iterator_update'.  The valid options for this enumeration are:
  
!    * 'GSI_NEW_STMT' Only valid when a single statement is added.  Move
       the iterator to it.
  
!    * 'GSI_SAME_STMT' Leave the iterator at the same statement.
  
!    * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is
       suitable for linking other statements in the same direction.
  
   Below is a list of the functions used to manipulate and use statement
  iterators.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
!      Return a new iterator pointing to the sequence 'SEQ''s first
!      statement.  If 'SEQ' is empty, the iterator's basic block is
!      'NULL'.  Use 'gsi_start_bb' instead when the iterator needs to
       always have the correct basic block set.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
       Return a new iterator pointing to the first statement in basic
!      block 'BB'.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
       Return a new iterator initially pointing to the last statement of
!      sequence 'SEQ'.  If 'SEQ' is empty, the iterator's basic block is
!      'NULL'.  Use 'gsi_last_bb' instead when the iterator needs to
       always have the correct basic block set.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
       Return a new iterator pointing to the last statement in basic block
!      'BB'.
  
   -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
!      Return 'TRUE' if at the end of 'I'.
  
   -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
!      Return 'TRUE' if we're one statement before the end of 'I'.
  
   -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
       Advance the iterator to the next gimple statement.
--- 15907,15953 ----
               for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
  
   Forward and backward iterations on basic blocks are possible with
! ‘gsi_start_bb’ and ‘gsi_last_bb’.
  
   In the documentation below we sometimes refer to enum
! ‘gsi_iterator_update’.  The valid options for this enumeration are:
  
!    • ‘GSI_NEW_STMT’ Only valid when a single statement is added.  Move
       the iterator to it.
  
!    • ‘GSI_SAME_STMT’ Leave the iterator at the same statement.
  
!    • ‘GSI_CONTINUE_LINKING’ Move iterator to whatever position is
       suitable for linking other statements in the same direction.
  
   Below is a list of the functions used to manipulate and use statement
  iterators.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
!      Return a new iterator pointing to the sequence ‘SEQ’'s first
!      statement.  If ‘SEQ’ is empty, the iterator's basic block is
!      ‘NULL’.  Use ‘gsi_start_bb’ instead when the iterator needs to
       always have the correct basic block set.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
       Return a new iterator pointing to the first statement in basic
!      block ‘BB’.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
       Return a new iterator initially pointing to the last statement of
!      sequence ‘SEQ’.  If ‘SEQ’ is empty, the iterator's basic block is
!      ‘NULL’.  Use ‘gsi_last_bb’ instead when the iterator needs to
       always have the correct basic block set.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
       Return a new iterator pointing to the last statement in basic block
!      ‘BB’.
  
   -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
!      Return ‘TRUE’ if at the end of ‘I’.
  
   -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
!      Return ‘TRUE’ if we're one statement before the end of ‘I’.
  
   -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
       Advance the iterator to the next gimple statement.
*************** iterators.
*** 15959,15965 ****
   -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
            bb)
       Return a block statement iterator that points to the first
!      non-label statement in block 'BB'.
  
   -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
       Return a pointer to the current stmt.
--- 15961,15967 ----
   -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
            bb)
       Return a block statement iterator that points to the first
!      non-label statement in block ‘BB’.
  
   -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
       Return a pointer to the current stmt.
*************** iterators.
*** 15973,16079 ****
   -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
            remove_eh_info)
       Remove the current stmt from the sequence.  The iterator is updated
!      to point to the next statement.  When 'REMOVE_EH_INFO' is true we
!      remove the statement pointed to by iterator 'I' from the 'EH'
!      tables.  Otherwise we do not modify the 'EH' tables.  Generally,
!      'REMOVE_EH_INFO' should be true when the statement is going to be
!      removed from the 'IL' and not reinserted elsewhere.
  
   -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
            gimple_seq seq, enum gsi_iterator_update mode)
!      Links the sequence of statements 'SEQ' before the statement pointed
!      by iterator 'I'.  'MODE' indicates what to do with the iterator
!      after insertion (see 'enum gsi_iterator_update' above).
  
   -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
            gimple g, enum gsi_iterator_update mode)
!      Links statement 'G' before the statement pointed-to by iterator
!      'I'.  Updates iterator 'I' according to 'MODE'.
  
   -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
            gimple_seq seq, enum gsi_iterator_update mode)
!      Links sequence 'SEQ' after the statement pointed-to by iterator
!      'I'.  'MODE' is as in 'gsi_insert_after'.
  
   -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
            gimple g, enum gsi_iterator_update mode)
!      Links statement 'G' after the statement pointed-to by iterator 'I'.
!      'MODE' is as in 'gsi_insert_after'.
  
   -- GIMPLE function: gimple_seq gsi_split_seq_after
            (gimple_stmt_iterator i)
!      Move all statements in the sequence after 'I' to a new sequence.
       Return this new sequence.
  
   -- GIMPLE function: gimple_seq gsi_split_seq_before
            (gimple_stmt_iterator *i)
!      Move all statements in the sequence before 'I' to a new sequence.
       Return this new sequence.
  
   -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
            stmt, bool update_eh_info)
!      Replace the statement pointed-to by 'I' to 'STMT'.  If
!      'UPDATE_EH_INFO' is true, the exception handling information of the
       original statement is moved to the new statement.
  
   -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
            gimple stmt, enum gsi_iterator_update mode)
!      Insert statement 'STMT' before the statement pointed-to by iterator
!      'I', update 'STMT''s basic block and scan it for new operands.
!      'MODE' specifies how to update iterator 'I' after insertion (see
!      enum 'gsi_iterator_update').
  
   -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
            *i, gimple_seq seq, enum gsi_iterator_update mode)
!      Like 'gsi_insert_before', but for all the statements in 'SEQ'.
  
   -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
            gimple stmt, enum gsi_iterator_update mode)
!      Insert statement 'STMT' after the statement pointed-to by iterator
!      'I', update 'STMT''s basic block and scan it for new operands.
!      'MODE' specifies how to update iterator 'I' after insertion (see
!      enum 'gsi_iterator_update').
  
   -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i,
            gimple_seq seq, enum gsi_iterator_update mode)
!      Like 'gsi_insert_after', but for all the statements in 'SEQ'.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
!      Finds iterator for 'STMT'.
  
   -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
            gimple_stmt_iterator *to)
!      Move the statement at 'FROM' so it comes right after the statement
!      at 'TO'.
  
   -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
            gimple_stmt_iterator *to)
!      Move the statement at 'FROM' so it comes right before the statement
!      at 'TO'.
  
   -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
            *from, basic_block bb)
!      Move the statement at 'FROM' to the end of basic block 'BB'.
  
   -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
!      Add 'STMT' to the pending list of edge 'E'.  No actual insertion is
!      made until a call to 'gsi_commit_edge_inserts'() is made.
  
   -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
            seq)
!      Add the sequence of statements in 'SEQ' to the pending list of edge
!      'E'.  No actual insertion is made until a call to
!      'gsi_commit_edge_inserts'() is made.
  
   -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
            gimple stmt)
!      Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'.  If a
       new block has to be created, it is returned.
  
   -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
            basic_block *new_bb)
!      Commit insertions pending at edge 'E'.  If a new block is created,
!      set 'NEW_BB' to this block, otherwise set it to 'NULL'.
  
   -- GIMPLE function: void gsi_commit_edge_inserts (void)
       This routine will commit all pending edge insertions, creating any
--- 15975,16081 ----
   -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
            remove_eh_info)
       Remove the current stmt from the sequence.  The iterator is updated
!      to point to the next statement.  When ‘REMOVE_EH_INFO’ is true we
!      remove the statement pointed to by iterator ‘I’ from the ‘EH’
!      tables.  Otherwise we do not modify the ‘EH’ tables.  Generally,
!      ‘REMOVE_EH_INFO’ should be true when the statement is going to be
!      removed from the ‘IL’ and not reinserted elsewhere.
  
   -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
            gimple_seq seq, enum gsi_iterator_update mode)
!      Links the sequence of statements ‘SEQ’ before the statement pointed
!      by iterator ‘I’.  ‘MODE’ indicates what to do with the iterator
!      after insertion (see ‘enum gsi_iterator_update’ above).
  
   -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
            gimple g, enum gsi_iterator_update mode)
!      Links statement ‘G’ before the statement pointed-to by iterator
!      ‘I’.  Updates iterator ‘I’ according to ‘MODE’.
  
   -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
            gimple_seq seq, enum gsi_iterator_update mode)
!      Links sequence ‘SEQ’ after the statement pointed-to by iterator
!      ‘I’.  ‘MODE’ is as in ‘gsi_insert_after’.
  
   -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
            gimple g, enum gsi_iterator_update mode)
!      Links statement ‘G’ after the statement pointed-to by iterator ‘I’.
!      ‘MODE’ is as in ‘gsi_insert_after’.
  
   -- GIMPLE function: gimple_seq gsi_split_seq_after
            (gimple_stmt_iterator i)
!      Move all statements in the sequence after ‘I’ to a new sequence.
       Return this new sequence.
  
   -- GIMPLE function: gimple_seq gsi_split_seq_before
            (gimple_stmt_iterator *i)
!      Move all statements in the sequence before ‘I’ to a new sequence.
       Return this new sequence.
  
   -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
            stmt, bool update_eh_info)
!      Replace the statement pointed-to by ‘I’ to ‘STMT’.  If
!      ‘UPDATE_EH_INFO’ is true, the exception handling information of the
       original statement is moved to the new statement.
  
   -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
            gimple stmt, enum gsi_iterator_update mode)
!      Insert statement ‘STMT’ before the statement pointed-to by iterator
!      ‘I’, update ‘STMT’'s basic block and scan it for new operands.
!      ‘MODE’ specifies how to update iterator ‘I’ after insertion (see
!      enum ‘gsi_iterator_update’).
  
   -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
            *i, gimple_seq seq, enum gsi_iterator_update mode)
!      Like ‘gsi_insert_before’, but for all the statements in ‘SEQ’.
  
   -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
            gimple stmt, enum gsi_iterator_update mode)
!      Insert statement ‘STMT’ after the statement pointed-to by iterator
!      ‘I’, update ‘STMT’'s basic block and scan it for new operands.
!      ‘MODE’ specifies how to update iterator ‘I’ after insertion (see
!      enum ‘gsi_iterator_update’).
  
   -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i,
            gimple_seq seq, enum gsi_iterator_update mode)
!      Like ‘gsi_insert_after’, but for all the statements in ‘SEQ’.
  
   -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
!      Finds iterator for ‘STMT’.
  
   -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
            gimple_stmt_iterator *to)
!      Move the statement at ‘FROM’ so it comes right after the statement
!      at ‘TO’.
  
   -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
            gimple_stmt_iterator *to)
!      Move the statement at ‘FROM’ so it comes right before the statement
!      at ‘TO’.
  
   -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
            *from, basic_block bb)
!      Move the statement at ‘FROM’ to the end of basic block ‘BB’.
  
   -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
!      Add ‘STMT’ to the pending list of edge ‘E’.  No actual insertion is
!      made until a call to ‘gsi_commit_edge_inserts’() is made.
  
   -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
            seq)
!      Add the sequence of statements in ‘SEQ’ to the pending list of edge
!      ‘E’.  No actual insertion is made until a call to
!      ‘gsi_commit_edge_inserts’() is made.
  
   -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
            gimple stmt)
!      Similar to ‘gsi_insert_on_edge’+‘gsi_commit_edge_inserts’.  If a
       new block has to be created, it is returned.
  
   -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
            basic_block *new_bb)
!      Commit insertions pending at edge ‘E’.  If a new block is created,
!      set ‘NEW_BB’ to this block, otherwise set it to ‘NULL’.
  
   -- GIMPLE function: void gsi_commit_edge_inserts (void)
       This routine will commit all pending edge insertions, creating any
*************** File: gccint.info,  Node: Adding a new G
*** 16086,16112 ****
  ========================================
  
  The first step in adding a new GIMPLE statement code, is modifying the
! file 'gimple.def', which contains all the GIMPLE codes.  Then you must
! add a corresponding gimple subclass located in 'gimple.h'.  This in
! turn, will require you to add a corresponding 'GTY' tag in
! 'gsstruct.def', and code to handle this tag in 'gss_for_code' which is
! located in 'gimple.cc'.
  
   In order for the garbage collector to know the size of the structure
! you created in 'gimple.h', you need to add a case to handle your new
! GIMPLE statement in 'gimple_size' which is located in 'gimple.cc'.
  
   You will probably want to create a function to build the new gimple
! statement in 'gimple.cc'.  The function should be called
! 'gimple_build_NEW-TUPLE-NAME', and should return the new tuple as a
  pointer to the appropriate gimple subclass.
  
   If your new statement requires accessors for any members or operands it
! may have, put simple inline accessors in 'gimple.h' and any non-trivial
! accessors in 'gimple.cc' with a corresponding prototype in 'gimple.h'.
  
   You should add the new statement subclass to the class hierarchy
! diagram in 'gimple.texi'.
  
  
  File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
--- 16088,16114 ----
  ========================================
  
  The first step in adding a new GIMPLE statement code, is modifying the
! file ‘gimple.def’, which contains all the GIMPLE codes.  Then you must
! add a corresponding gimple subclass located in ‘gimple.h’.  This in
! turn, will require you to add a corresponding ‘GTY’ tag in
! ‘gsstruct.def’, and code to handle this tag in ‘gss_for_code’ which is
! located in ‘gimple.cc’.
  
   In order for the garbage collector to know the size of the structure
! you created in ‘gimple.h’, you need to add a case to handle your new
! GIMPLE statement in ‘gimple_size’ which is located in ‘gimple.cc’.
  
   You will probably want to create a function to build the new gimple
! statement in ‘gimple.cc’.  The function should be called
! ‘gimple_build_NEW-TUPLE-NAME’, and should return the new tuple as a
  pointer to the appropriate gimple subclass.
  
   If your new statement requires accessors for any members or operands it
! may have, put simple inline accessors in ‘gimple.h’ and any non-trivial
! accessors in ‘gimple.cc’ with a corresponding prototype in ‘gimple.h’.
  
   You should add the new statement subclass to the class hierarchy
! diagram in ‘gimple.texi’.
  
  
  File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
*************** File: gccint.info,  Node: Statement and
*** 16115,16168 ****
  ======================================
  
  There are two functions available for walking statements and sequences:
! 'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third
! function for walking the operands in a statement: 'walk_gimple_op'.
  
   -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
            walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
            walk_stmt_info *wi)
!      This function is used to walk the current statement in 'GSI',
!      optionally using traversal state stored in 'WI'.  If 'WI' is
!      'NULL', no state is kept during the traversal.
  
!      The callback 'CALLBACK_STMT' is called.  If 'CALLBACK_STMT' returns
       true, it means that the callback function has handled all the
       operands of the statement and it is not necessary to walk its
       operands.
  
!      If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is
!      called on each operand of the statement via 'walk_gimple_op'.  If
!      'walk_gimple_op' returns non-'NULL' for any operand, the remaining
       operands are not scanned.
  
       The return value is that returned by the last call to
!      'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified.
  
   -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
            callback_op, struct walk_stmt_info *wi)
!      Use this function to walk the operands of statement 'STMT'.  Every
!      operand is walked via 'walk_tree' with optional state information
!      in 'WI'.
  
!      'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'.
!      Additional parameters to 'walk_tree' must be stored in 'WI'.  For
!      each operand 'OP', 'walk_tree' is called as:
  
            walk_tree (&OP, CALLBACK_OP, WI, PSET)
  
!      If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining
       operands are not scanned.  The return value is that returned by the
!      last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is
       specified.
  
   -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
            callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info
            *wi)
!      This function walks all the statements in the sequence 'SEQ'
!      calling 'walk_gimple_stmt' on each one.  'WI' is as in
!      'walk_gimple_stmt'.  If 'walk_gimple_stmt' returns non-'NULL', the
       walk is stopped and the value returned.  Otherwise, all the
!      statements are walked and 'NULL_TREE' returned.
  
  
  File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top
--- 16117,16170 ----
  ======================================
  
  There are two functions available for walking statements and sequences:
! ‘walk_gimple_stmt’ and ‘walk_gimple_seq’, accordingly, and a third
! function for walking the operands in a statement: ‘walk_gimple_op’.
  
   -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
            walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
            walk_stmt_info *wi)
!      This function is used to walk the current statement in ‘GSI’,
!      optionally using traversal state stored in ‘WI’.  If ‘WI’ is
!      ‘NULL’, no state is kept during the traversal.
  
!      The callback ‘CALLBACK_STMT’ is called.  If ‘CALLBACK_STMT’ returns
       true, it means that the callback function has handled all the
       operands of the statement and it is not necessary to walk its
       operands.
  
!      If ‘CALLBACK_STMT’ is ‘NULL’ or it returns false, ‘CALLBACK_OP’ is
!      called on each operand of the statement via ‘walk_gimple_op’.  If
!      ‘walk_gimple_op’ returns non-‘NULL’ for any operand, the remaining
       operands are not scanned.
  
       The return value is that returned by the last call to
!      ‘walk_gimple_op’, or ‘NULL_TREE’ if no ‘CALLBACK_OP’ is specified.
  
   -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
            callback_op, struct walk_stmt_info *wi)
!      Use this function to walk the operands of statement ‘STMT’.  Every
!      operand is walked via ‘walk_tree’ with optional state information
!      in ‘WI’.
  
!      ‘CALLBACK_OP’ is called on each operand of ‘STMT’ via ‘walk_tree’.
!      Additional parameters to ‘walk_tree’ must be stored in ‘WI’.  For
!      each operand ‘OP’, ‘walk_tree’ is called as:
  
            walk_tree (&OP, CALLBACK_OP, WI, PSET)
  
!      If ‘CALLBACK_OP’ returns non-‘NULL’ for an operand, the remaining
       operands are not scanned.  The return value is that returned by the
!      last call to ‘walk_tree’, or ‘NULL_TREE’ if no ‘CALLBACK_OP’ is
       specified.
  
   -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
            callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info
            *wi)
!      This function walks all the statements in the sequence ‘SEQ’
!      calling ‘walk_gimple_stmt’ on each one.  ‘WI’ is as in
!      ‘walk_gimple_stmt’.  If ‘walk_gimple_stmt’ returns non-‘NULL’, the
       walk is stopped and the value returned.  Otherwise, all the
!      statements are walked and ‘NULL_TREE’ returned.
  
  
  File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top
*************** File: gccint.info,  Node: Annotations,
*** 16211,16218 ****
  The optimizers need to associate attributes with variables during the
  optimization process.  For instance, we need to know whether a variable
  has aliases.  All these attributes are stored in data structures called
! annotations which are then linked to the field 'ann' in 'struct
! tree_common'.
  
  
  File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
--- 16213,16220 ----
  The optimizers need to associate attributes with variables during the
  optimization process.  For instance, we need to know whether a variable
  has aliases.  All these attributes are stored in data structures called
! annotations which are then linked to the field ‘ann’ in ‘struct
! tree_common’.
  
  
  File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
*************** their operands are going to be located a
*** 16226,16238 ****
  statement's tree.  To facilitate access to the statement's operands,
  they are organized into lists associated inside each statement's
  annotation.  Each element in an operand list is a pointer to a
! 'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node.  This provides a very
  convenient way of examining and replacing operands.
  
   Data flow analysis and optimization is done on all tree nodes
! representing variables.  Any node for which 'SSA_VAR_P' returns nonzero
  is considered when scanning statement operands.  However, not all
! 'SSA_VAR_P' variables are processed in the same way.  For the purposes
  of optimization, we need to distinguish between references to local
  scalar variables and references to globals, statics, structures, arrays,
  aliased variables, etc.  The reason is simple, the compiler can gather
--- 16228,16240 ----
  statement's tree.  To facilitate access to the statement's operands,
  they are organized into lists associated inside each statement's
  annotation.  Each element in an operand list is a pointer to a
! ‘VAR_DECL’, ‘PARM_DECL’ or ‘SSA_NAME’ tree node.  This provides a very
  convenient way of examining and replacing operands.
  
   Data flow analysis and optimization is done on all tree nodes
! representing variables.  Any node for which ‘SSA_VAR_P’ returns nonzero
  is considered when scanning statement operands.  However, not all
! ‘SSA_VAR_P’ variables are processed in the same way.  For the purposes
  of optimization, we need to distinguish between references to local
  scalar variables and references to globals, statics, structures, arrays,
  aliased variables, etc.  The reason is simple, the compiler can gather
*************** global variable may be modified by a fun
*** 16241,16248 ****
  possible to keep track of all the elements of an array or the fields of
  a structure, etc.
  
!  The operand scanner gathers two kinds of operands: "real" and
! "virtual".  An operand for which 'is_gimple_reg' returns true is
  considered real, otherwise it is a virtual operand.  We also distinguish
  between uses and definitions.  An operand is used if its value is loaded
  by the statement (e.g., the operand at the RHS of an assignment).  If
--- 16243,16250 ----
  possible to keep track of all the elements of an array or the fields of
  a structure, etc.
  
!  The operand scanner gathers two kinds of operands: “real” and
! “virtual”.  An operand for which ‘is_gimple_reg’ returns true is
  considered real, otherwise it is a virtual operand.  We also distinguish
  between uses and definitions.  An operand is used if its value is loaded
  by the statement (e.g., the operand at the RHS of an assignment).  If
*************** that they represent.  For instance, give
*** 16258,16267 ****
         a = b
       }
  
!  Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will
! have one real definition and one real use because variable 'a' is
! completely modified with the contents of variable 'b'.  Real definition
! are also known as "killing definitions".  Similarly, the use of 'b'
  reads all its bits.
  
   In contrast, virtual operands are used with variables that can have a
--- 16260,16269 ----
         a = b
       }
  
!  Since ‘a’ and ‘b’ are non-aliased locals, the statement ‘a = b’ will
! have one real definition and one real use because variable ‘a’ is
! completely modified with the contents of variable ‘b’.  Real definition
! are also known as “killing definitions”.  Similarly, the use of ‘b’
  reads all its bits.
  
   In contrast, virtual operands are used with variables that can have a
*************** partial or ambiguous reference.  This in
*** 16269,16279 ****
  globals, and aliased variables.  In these cases, we have two types of
  definitions.  For globals, structures, and arrays, we can determine from
  a statement whether a variable of these types has a killing definition.
! If the variable does, then the statement is marked as having a "must
! definition" of that variable.  However, if a statement is only defining
  a part of the variable (i.e. a field in a structure), or if we know that
  a statement might define the variable but we cannot say for sure, then
! we mark that statement as having a "may definition".  For instance,
  given
  
       {
--- 16271,16281 ----
  globals, and aliased variables.  In these cases, we have two types of
  definitions.  For globals, structures, and arrays, we can determine from
  a statement whether a variable of these types has a killing definition.
! If the variable does, then the statement is marked as having a “must
! definition” of that variable.  However, if a statement is only defining
  a part of the variable (i.e. a field in a structure), or if we know that
  a statement might define the variable but we cannot say for sure, then
! we mark that statement as having a “may definition”.  For instance,
  given
  
       {
*************** given
*** 16287,16299 ****
         return *p;
       }
  
!  The assignment '*p = 5' may be a definition of 'a' or 'b'.  If we
! cannot determine statically where 'p' is pointing to at the time of the
  store operation, we create virtual definitions to mark that statement as
! a potential definition site for 'a' and 'b'.  Memory loads are similarly
  marked with virtual use operands.  Virtual operands are shown in tree
  dumps right before the statement that contains them.  To request a tree
! dump with virtual operands, use the '-vops' option to '-fdump-tree':
  
       {
         int a, b, *p;
--- 16289,16301 ----
         return *p;
       }
  
!  The assignment ‘*p = 5’ may be a definition of ‘a’ or ‘b’.  If we
! cannot determine statically where ‘p’ is pointing to at the time of the
  store operation, we create virtual definitions to mark that statement as
! a potential definition site for ‘a’ and ‘b’.  Memory loads are similarly
  marked with virtual use operands.  Virtual operands are shown in tree
  dumps right before the statement that contains them.  To request a tree
! dump with virtual operands, use the ‘-vops’ option to ‘-fdump-tree’:
  
       {
         int a, b, *p;
*************** dump with virtual operands, use the '-vo
*** 16311,16364 ****
         return *p;
       }
  
!  Notice that 'VDEF' operands have two copies of the referenced variable.
  This indicates that this is not a killing definition of that variable.
! In this case we refer to it as a "may definition" or "aliased store".
! The presence of the second copy of the variable in the 'VDEF' operand
  will become important when the function is converted into SSA form.
  This will be used to link all the non-killing definitions to prevent
  optimizations from making incorrect assumptions about them.
  
   Operands are updated as soon as the statement is finished via a call to
! 'update_stmt'.  If statement elements are changed via 'SET_USE' or
! 'SET_DEF', then no further action is required (i.e., those macros take
  care of updating the statement).  If changes are made by manipulating
! the statement's tree directly, then a call must be made to 'update_stmt'
! when complete.  Calling one of the 'bsi_insert' routines or
! 'bsi_replace' performs an implicit call to 'update_stmt'.
  
  13.2.1 Operand Iterators And Access Routines
  --------------------------------------------
  
! Operands are collected by 'tree-ssa-operands.cc'.  They are stored
  inside each statement's annotation and can be accessed through either
  the operand iterators or an access routine.
  
   The following access routines are available for examining operands:
  
!   1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
       NULL unless there is exactly one operand matching the specified
       flags.  If there is exactly one operand, the operand is returned as
!      either a 'tree', 'def_operand_p', or 'use_operand_p'.
  
            tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
            use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
            def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
  
!   2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no
       operands matching the specified flags.
  
            if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
              return;
  
!   3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands
       matching 'flags'.  This actually executes a loop to perform the
       count, so only use this if it is really needed.
  
            int count = NUM_SSA_OPERANDS (stmt, flags)
  
   If you wish to iterate over some or all operands, use the
! 'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
  all the operands for a statement:
  
       void
--- 16313,16366 ----
         return *p;
       }
  
!  Notice that ‘VDEF’ operands have two copies of the referenced variable.
  This indicates that this is not a killing definition of that variable.
! In this case we refer to it as a “may definition” or “aliased store”.
! The presence of the second copy of the variable in the ‘VDEF’ operand
  will become important when the function is converted into SSA form.
  This will be used to link all the non-killing definitions to prevent
  optimizations from making incorrect assumptions about them.
  
   Operands are updated as soon as the statement is finished via a call to
! ‘update_stmt’.  If statement elements are changed via ‘SET_USE’ or
! ‘SET_DEF’, then no further action is required (i.e., those macros take
  care of updating the statement).  If changes are made by manipulating
! the statement's tree directly, then a call must be made to ‘update_stmt’
! when complete.  Calling one of the ‘bsi_insert’ routines or
! ‘bsi_replace’ performs an implicit call to ‘update_stmt’.
  
  13.2.1 Operand Iterators And Access Routines
  --------------------------------------------
  
! Operands are collected by ‘tree-ssa-operands.cc’.  They are stored
  inside each statement's annotation and can be accessed through either
  the operand iterators or an access routine.
  
   The following access routines are available for examining operands:
  
!   1. ‘SINGLE_SSA_{USE,DEF,TREE}_OPERAND’: These accessors will return
       NULL unless there is exactly one operand matching the specified
       flags.  If there is exactly one operand, the operand is returned as
!      either a ‘tree’, ‘def_operand_p’, or ‘use_operand_p’.
  
            tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
            use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
            def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
  
!   2. ‘ZERO_SSA_OPERANDS’: This macro returns true if there are no
       operands matching the specified flags.
  
            if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
              return;
  
!   3. ‘NUM_SSA_OPERANDS’: This macro Returns the number of operands
       matching 'flags'.  This actually executes a loop to perform the
       count, so only use this if it is really needed.
  
            int count = NUM_SSA_OPERANDS (stmt, flags)
  
   If you wish to iterate over some or all operands, use the
! ‘FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND’ iterator.  For example, to print
  all the operands for a statement:
  
       void
*************** all the operands for a statement:
*** 16388,16394 ****
  
    3. Determine which operands you wish to use, and specify the flags of
       those you are interested in.  They are documented in
!      'tree-ssa-operands.h':
  
            #define SSA_OP_USE              0x01    /* Real USE operands.  */
            #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
--- 16390,16396 ----
  
    3. Determine which operands you wish to use, and specify the flags of
       those you are interested in.  They are documented in
!      ‘tree-ssa-operands.h’:
  
            #define SSA_OP_USE              0x01    /* Real USE operands.  */
            #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
*************** all the operands for a statement:
*** 16403,16409 ****
            #define SSA_OP_ALL_DEFS		(SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
            #define SSA_OP_ALL_OPERANDS	(SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
  
!  So if you want to look at the use pointers for all the 'USE' and 'VUSE'
  operands, you would do something like:
  
         use_operand_p use_p;
--- 16405,16411 ----
            #define SSA_OP_ALL_DEFS		(SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
            #define SSA_OP_ALL_OPERANDS	(SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
  
!  So if you want to look at the use pointers for all the ‘USE’ and ‘VUSE’
  operands, you would do something like:
  
         use_operand_p use_p;
*************** operands, you would do something like:
*** 16414,16422 ****
             process_use_ptr (use_p);
           }
  
!  The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros,
! only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and
! 'DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use and
  defs flags can be mixed.
  
         tree var;
--- 16416,16424 ----
             process_use_ptr (use_p);
           }
  
!  The ‘TREE’ macro is basically the same as the ‘USE’ and ‘DEF’ macros,
! only with the use or def dereferenced via ‘USE_FROM_PTR (use_p)’ and
! ‘DEF_FROM_PTR (def_p)’.  Since we aren't using operand pointers, use and
  defs flags can be mixed.
  
         tree var;
*************** defs flags can be mixed.
*** 16427,16443 ****
              print_generic_expr (stderr, var, TDF_SLIM);
           }
  
!  'VDEF's are broken into two flags, one for the 'DEF' portion
! ('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VUSE').
  
   There are many examples in the code, in addition to the documentation
! in 'tree-ssa-operands.h' and 'ssa-iterators.h'.
  
   There are also a couple of variants on the stmt iterators regarding PHI
  nodes.
  
!  'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND',
! except it works over 'PHI' arguments instead of statement operands.
  
       /* Look at every virtual PHI use.  */
       FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
--- 16429,16445 ----
              print_generic_expr (stderr, var, TDF_SLIM);
           }
  
!  ‘VDEF’s are broken into two flags, one for the ‘DEF’ portion
! (‘SSA_OP_VDEF’) and one for the USE portion (‘SSA_OP_VUSE’).
  
   There are many examples in the code, in addition to the documentation
! in ‘tree-ssa-operands.h’ and ‘ssa-iterators.h’.
  
   There are also a couple of variants on the stmt iterators regarding PHI
  nodes.
  
!  ‘FOR_EACH_PHI_ARG’ Works exactly like ‘FOR_EACH_SSA_USE_OPERAND’,
! except it works over ‘PHI’ arguments instead of statement operands.
  
       /* Look at every virtual PHI use.  */
       FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
*************** except it works over 'PHI' arguments ins
*** 16453,16463 ****
       FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
         my_code;
  
!  'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
! 'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
! statement or a 'PHI' node.  These should be used when it is appropriate
! but they are not quite as efficient as the individual 'FOR_EACH_PHI' and
! 'FOR_EACH_SSA' routines.
  
       FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
         {
--- 16455,16465 ----
       FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
         my_code;
  
!  ‘FOR_EACH_PHI_OR_STMT_{USE,DEF}’ works exactly like
! ‘FOR_EACH_SSA_{USE,DEF}_OPERAND’, except it will function on either a
! statement or a ‘PHI’ node.  These should be used when it is appropriate
! but they are not quite as efficient as the individual ‘FOR_EACH_PHI’ and
! ‘FOR_EACH_SSA’ routines.
  
       FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
         {
*************** but they are not quite as efficient as t
*** 16473,16480 ****
  ---------------------
  
  Immediate use information is now always available.  Using the immediate
! use iterators, you may examine every use of any 'SSA_NAME'.  For
! instance, to change each use of 'ssa_var' to 'ssa_var2' and call
  fold_stmt on each stmt after that is done:
  
         use_operand_p imm_use_p;
--- 16475,16482 ----
  ---------------------
  
  Immediate use information is now always available.  Using the immediate
! use iterators, you may examine every use of any ‘SSA_NAME’.  For
! instance, to change each use of ‘ssa_var’ to ‘ssa_var2’ and call
  fold_stmt on each stmt after that is done:
  
         use_operand_p imm_use_p;
*************** fold_stmt on each stmt after that is don
*** 16489,16501 ****
             fold_stmt (stmt);
           }
  
!  There are 2 iterators which can be used.  'FOR_EACH_IMM_USE_FAST' is
  used when the immediate uses are not changed, i.e., you are looking at
  the uses, but not setting them.
  
   If they do get changed, then care must be taken that things are not
! changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and
! 'FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
  sanity of the use list by moving all the uses for a statement into a
  controlled position, and then iterating over those uses.  Then the
  optimization can manipulate the stmt when all the uses have been
--- 16491,16503 ----
             fold_stmt (stmt);
           }
  
!  There are 2 iterators which can be used.  ‘FOR_EACH_IMM_USE_FAST’ is
  used when the immediate uses are not changed, i.e., you are looking at
  the uses, but not setting them.
  
   If they do get changed, then care must be taken that things are not
! changed under the iterators, so use the ‘FOR_EACH_IMM_USE_STMT’ and
! ‘FOR_EACH_IMM_USE_ON_STMT’ iterators.  They attempt to preserve the
  sanity of the use list by moving all the uses for a statement into a
  controlled position, and then iterating over those uses.  Then the
  optimization can manipulate the stmt when all the uses have been
*************** processed.  This is a little slower than
*** 16503,16534 ****
  a placeholder element and must sort through the list a bit for each
  statement.  This placeholder element must be also be removed if the loop
  is terminated early; a destructor takes care of that when leaving the
! 'FOR_EACH_IMM_USE_STMT' scope.
  
!  There are checks in 'verify_ssa' which verify that the immediate use
  list is up to date, as well as checking that an optimization didn't
  break from the loop without using this macro.  It is safe to simply
! 'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse.
  
   Some useful functions and macros:
!   1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of
!      'ssa_var'.
!   2. 'has_single_use (ssa_var)' : Returns true if there is only a single
!      use of 'ssa_var'.
!   3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
!      Returns true if there is only a single use of 'ssa_var', and also
       returns the use pointer and statement it occurs in, in the second
       and third parameters.
!   4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of
!      'ssa_var'.  It is better not to use this if possible since it
       simply utilizes a loop to count the uses.
!   5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node,
       return the index number for the use.  An assert is triggered if the
!      use isn't located in a 'PHI' node.
!   6. 'USE_STMT (use_p)' : Return the statement a use occurs in.
  
   Note that uses are not put into an immediate use list until their
! statement is actually inserted into the instruction stream via a 'bsi_*'
  routine.
  
   It is also still possible to utilize lazy updating of statements, but
--- 16505,16536 ----
  a placeholder element and must sort through the list a bit for each
  statement.  This placeholder element must be also be removed if the loop
  is terminated early; a destructor takes care of that when leaving the
! ‘FOR_EACH_IMM_USE_STMT’ scope.
  
!  There are checks in ‘verify_ssa’ which verify that the immediate use
  list is up to date, as well as checking that an optimization didn't
  break from the loop without using this macro.  It is safe to simply
! 'break'; from a ‘FOR_EACH_IMM_USE_FAST’ traverse.
  
   Some useful functions and macros:
!   1. ‘has_zero_uses (ssa_var)’ : Returns true if there are no uses of
!      ‘ssa_var’.
!   2. ‘has_single_use (ssa_var)’ : Returns true if there is only a single
!      use of ‘ssa_var’.
!   3. ‘single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)’ :
!      Returns true if there is only a single use of ‘ssa_var’, and also
       returns the use pointer and statement it occurs in, in the second
       and third parameters.
!   4. ‘num_imm_uses (ssa_var)’ : Returns the number of immediate uses of
!      ‘ssa_var’.  It is better not to use this if possible since it
       simply utilizes a loop to count the uses.
!   5. ‘PHI_ARG_INDEX_FROM_USE (use_p)’ : Given a use within a ‘PHI’ node,
       return the index number for the use.  An assert is triggered if the
!      use isn't located in a ‘PHI’ node.
!   6. ‘USE_STMT (use_p)’ : Return the statement a use occurs in.
  
   Note that uses are not put into an immediate use list until their
! statement is actually inserted into the instruction stream via a ‘bsi_*’
  routine.
  
   It is also still possible to utilize lazy updating of statements, but
*************** and the dominator optimizations currentl
*** 16537,16547 ****
  
   When lazy updating is being used, the immediate use information is out
  of date and cannot be used reliably.  Lazy updating is achieved by
! simply marking statements modified via calls to 'gimple_set_modified'
! instead of 'update_stmt'.  When lazy updating is no longer required, all
! the modified statements must have 'update_stmt' called in order to bring
  them up to date.  This must be done before the optimization is finished,
! or 'verify_ssa' will trigger an abort.
  
   This is done with a simple loop over the instruction stream:
         block_stmt_iterator bsi;
--- 16539,16549 ----
  
   When lazy updating is being used, the immediate use information is out
  of date and cannot be used reliably.  Lazy updating is achieved by
! simply marking statements modified via calls to ‘gimple_set_modified’
! instead of ‘update_stmt’.  When lazy updating is no longer required, all
! the modified statements must have ‘update_stmt’ called in order to bring
  them up to date.  This must be done before the optimization is finished,
! or ‘verify_ssa’ will trigger an abort.
  
   This is done with a simple loop over the instruction stream:
         block_stmt_iterator bsi;
*************** File: gccint.info,  Node: SSA,  Next: Al
*** 16560,16569 ****
  
  Most of the tree optimizers rely on the data flow information provided
  by the Static Single Assignment (SSA) form.  We implement the SSA form
! as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
  Zadeck. Efficiently Computing Static Single Assignment Form and the
  Control Dependence Graph. ACM Transactions on Programming Languages and
! Systems, 13(4):451-490, October 1991'.
  
   The SSA form is based on the premise that program variables are
  assigned in exactly one location in the program.  Multiple assignments
--- 16562,16571 ----
  
  Most of the tree optimizers rely on the data flow information provided
  by the Static Single Assignment (SSA) form.  We implement the SSA form
! as described in ‘R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
  Zadeck. Efficiently Computing Static Single Assignment Form and the
  Control Dependence Graph. ACM Transactions on Programming Languages and
! Systems, 13(4):451-490, October 1991’.
  
   The SSA form is based on the premise that program variables are
  assigned in exactly one location in the program.  Multiple assignments
*************** version number.  Variables used in the r
*** 16577,16592 ****
  are renamed so that their version number matches that of the most recent
  assignment.
  
!  We represent variable versions using 'SSA_NAME' nodes.  The renaming
! process in 'tree-ssa.cc' wraps every real and virtual operand with an
! 'SSA_NAME' node which contains the version number and the statement that
! created the 'SSA_NAME'.  Only definitions and virtual definitions may
! create new 'SSA_NAME' nodes.
  
   Sometimes, flow of control makes it impossible to determine the most
  recent version of a variable.  In these cases, the compiler inserts an
! artificial definition for that variable called "PHI function" or "PHI
! node".  This new definition merges all the incoming versions of the
  variable to create a new name for it.  For instance,
  
       if (...)
--- 16579,16594 ----
  are renamed so that their version number matches that of the most recent
  assignment.
  
!  We represent variable versions using ‘SSA_NAME’ nodes.  The renaming
! process in ‘tree-ssa.cc’ wraps every real and virtual operand with an
! ‘SSA_NAME’ node which contains the version number and the statement that
! created the ‘SSA_NAME’.  Only definitions and virtual definitions may
! create new ‘SSA_NAME’ nodes.
  
   Sometimes, flow of control makes it impossible to determine the most
  recent version of a variable.  In these cases, the compiler inserts an
! artificial definition for that variable called “PHI function” or “PHI
! node”.  This new definition merges all the incoming versions of the
  variable to create a new name for it.  For instance,
  
       if (...)
*************** variable to create a new name for it.  F
*** 16600,16614 ****
       return a_4;
  
   Since it is not possible to determine which of the three branches will
! be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use
  at the return statement.  So, the SSA renamer creates a new version
! 'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'.
  Hence, PHI nodes mean "one of these operands.  I don't know which".
  
   The following functions can be used to examine PHI nodes
  
   -- Function: gimple_phi_result (PHI)
!      Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
  
   -- Function: gimple_phi_num_args (PHI)
       Returns the number of arguments in PHI.  This number is exactly the
--- 16602,16616 ----
       return a_4;
  
   Since it is not possible to determine which of the three branches will
! be taken at runtime, we don't know which of ‘a_1’, ‘a_2’ or ‘a_3’ to use
  at the return statement.  So, the SSA renamer creates a new version
! ‘a_4’ which is assigned the result of "merging" ‘a_1’, ‘a_2’ and ‘a_3’.
  Hence, PHI nodes mean "one of these operands.  I don't know which".
  
   The following functions can be used to examine PHI nodes
  
   -- Function: gimple_phi_result (PHI)
!      Returns the ‘SSA_NAME’ created by PHI node PHI (i.e., PHI's LHS).
  
   -- Function: gimple_phi_num_args (PHI)
       Returns the number of arguments in PHI.  This number is exactly the
*************** Hence, PHI nodes mean "one of these oper
*** 16621,16627 ****
       Returns the incoming edge for the Ith argument of PHI.
  
   -- Function: gimple_phi_arg_def (PHI, I)
!      Returns the 'SSA_NAME' for the Ith argument of PHI.
  
  13.3.1 Preserving the SSA form
  ------------------------------
--- 16623,16629 ----
       Returns the incoming edge for the Ith argument of PHI.
  
   -- Function: gimple_phi_arg_def (PHI, I)
!      Returns the ‘SSA_NAME’ for the Ith argument of PHI.
  
  13.3.1 Preserving the SSA form
  ------------------------------
*************** program.
*** 16655,16661 ****
            10   goto L0;
            11 endif
  
!  Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8').
  
            1  L0:
            2  x_1 = PHI (0, x_5)
--- 16657,16663 ----
            10   goto L0;
            11 endif
  
!  Suppose that we insert new names ‘x_10’ and ‘x_11’ (lines ‘4’ and ‘8’).
  
            1  L0:
            2  x_1 = PHI (0, x_5)
*************** program.
*** 16671,16685 ****
            12   goto L0;
            13 endif
  
!  We want to replace all the uses of 'x_1' with the new definitions of
! 'x_10' and 'x_11'.  Note that the only uses that should be replaced are
! those at lines '5', '9' and '11'.  Also, the use of 'x_7' at line '9'
! should _not_ be replaced (this is why we cannot just mark symbol 'x' for
  renaming).
  
!  Additionally, we may need to insert a PHI node at line '11' because
! that is a merge point for 'x_10' and 'x_11'.  So the use of 'x_1' at
! line '11' will be replaced with the new PHI node.  The insertion of PHI
  nodes is optional.  They are not strictly necessary to preserve the SSA
  form, and depending on what the caller inserted, they may not even be
  useful for the optimizers.
--- 16673,16687 ----
            12   goto L0;
            13 endif
  
!  We want to replace all the uses of ‘x_1’ with the new definitions of
! ‘x_10’ and ‘x_11’.  Note that the only uses that should be replaced are
! those at lines ‘5’, ‘9’ and ‘11’.  Also, the use of ‘x_7’ at line ‘9’
! should _not_ be replaced (this is why we cannot just mark symbol ‘x’ for
  renaming).
  
!  Additionally, we may need to insert a PHI node at line ‘11’ because
! that is a merge point for ‘x_10’ and ‘x_11’.  So the use of ‘x_1’ at
! line ‘11’ will be replaced with the new PHI node.  The insertion of PHI
  nodes is optional.  They are not strictly necessary to preserve the SSA
  form, and depending on what the caller inserted, they may not even be
  useful for the optimizers.
*************** useful for the optimizers.
*** 16688,16748 ****
  identify which names need to be updated and/or which symbols need to be
  renamed into SSA form for the first time.  When new names are introduced
  to replace existing names in the program, the mapping between the old
! and the new names are registered by calling 'register_new_name_mapping'
  (note that if your pass creates new code by duplicating basic blocks,
! the call to 'tree_duplicate_bb' will set up the necessary mappings
  automatically).
  
   After the replacement mappings have been registered and new symbols
! marked for renaming, a call to 'update_ssa' makes the registered
! changes.  This can be done with an explicit call or by creating 'TODO'
! flags in the 'tree_opt_pass' structure for your pass.  There are several
! 'TODO' flags that control the behavior of 'update_ssa':
  
!    * 'TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
       newly exposed symbols and virtual names marked for updating.  When
!      updating real names, only insert PHI nodes for a real name 'O_j' in
!      blocks reached by all the new and old definitions for 'O_j'.  If
!      the iterated dominance frontier for 'O_j' is not pruned, we may end
       up inserting PHI nodes in blocks that have one or more edges with
!      no incoming definition for 'O_j'.  This would lead to uninitialized
!      warnings for 'O_j''s symbol.
  
!    * 'TODO_update_ssa_no_phi'.  Update the SSA form without inserting
       any new PHI nodes at all.  This is used by passes that have either
       inserted all the PHI nodes themselves or passes that need only to
       patch use-def and def-def chains for virtuals (e.g., DCE).
  
!    * 'TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
       needed.  No pruning of the IDF is done.  This is used by passes
!      that need the PHI nodes for 'O_j' even if it means that some
!      arguments will come from the default definition of 'O_j''s symbol
!      (e.g., 'pass_linear_transform').
  
       WARNING: If you need to use this flag, chances are that your pass
       may be doing something wrong.  Inserting PHI nodes for an old name
       where not all edges carry a new replacement may lead to silent
       codegen errors or spurious uninitialized warnings.
  
!    * 'TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
       on their own may want to delegate the updating of virtual names to
       the generic updater.  Since FUD chains are easier to maintain, this
       simplifies the work they need to do.  NOTE: If this flag is used,
       any OLD->NEW mappings for real names are explicitly destroyed and
       only the symbols marked for renaming are processed.
  
! 13.3.2 Examining 'SSA_NAME' nodes
  ---------------------------------
  
! The following macros can be used to examine 'SSA_NAME' nodes
  
   -- Macro: SSA_NAME_DEF_STMT (VAR)
!      Returns the statement S that creates the 'SSA_NAME' VAR.  If S is
!      an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it
       means that the first reference to this variable is a USE or a VUSE.
  
   -- Macro: SSA_NAME_VERSION (VAR)
!      Returns the version number of the 'SSA_NAME' object VAR.
  
  13.3.3 Walking the dominator tree
  ---------------------------------
--- 16690,16750 ----
  identify which names need to be updated and/or which symbols need to be
  renamed into SSA form for the first time.  When new names are introduced
  to replace existing names in the program, the mapping between the old
! and the new names are registered by calling ‘register_new_name_mapping’
  (note that if your pass creates new code by duplicating basic blocks,
! the call to ‘tree_duplicate_bb’ will set up the necessary mappings
  automatically).
  
   After the replacement mappings have been registered and new symbols
! marked for renaming, a call to ‘update_ssa’ makes the registered
! changes.  This can be done with an explicit call or by creating ‘TODO’
! flags in the ‘tree_opt_pass’ structure for your pass.  There are several
! ‘TODO’ flags that control the behavior of ‘update_ssa’:
  
!    • ‘TODO_update_ssa’.  Update the SSA form inserting PHI nodes for
       newly exposed symbols and virtual names marked for updating.  When
!      updating real names, only insert PHI nodes for a real name ‘O_j’ in
!      blocks reached by all the new and old definitions for ‘O_j’.  If
!      the iterated dominance frontier for ‘O_j’ is not pruned, we may end
       up inserting PHI nodes in blocks that have one or more edges with
!      no incoming definition for ‘O_j’.  This would lead to uninitialized
!      warnings for ‘O_j’'s symbol.
  
!    • ‘TODO_update_ssa_no_phi’.  Update the SSA form without inserting
       any new PHI nodes at all.  This is used by passes that have either
       inserted all the PHI nodes themselves or passes that need only to
       patch use-def and def-def chains for virtuals (e.g., DCE).
  
!    • ‘TODO_update_ssa_full_phi’.  Insert PHI nodes everywhere they are
       needed.  No pruning of the IDF is done.  This is used by passes
!      that need the PHI nodes for ‘O_j’ even if it means that some
!      arguments will come from the default definition of ‘O_j’'s symbol
!      (e.g., ‘pass_linear_transform’).
  
       WARNING: If you need to use this flag, chances are that your pass
       may be doing something wrong.  Inserting PHI nodes for an old name
       where not all edges carry a new replacement may lead to silent
       codegen errors or spurious uninitialized warnings.
  
!    • ‘TODO_update_ssa_only_virtuals’.  Passes that update the SSA form
       on their own may want to delegate the updating of virtual names to
       the generic updater.  Since FUD chains are easier to maintain, this
       simplifies the work they need to do.  NOTE: If this flag is used,
       any OLD->NEW mappings for real names are explicitly destroyed and
       only the symbols marked for renaming are processed.
  
! 13.3.2 Examining ‘SSA_NAME’ nodes
  ---------------------------------
  
! The following macros can be used to examine ‘SSA_NAME’ nodes
  
   -- Macro: SSA_NAME_DEF_STMT (VAR)
!      Returns the statement S that creates the ‘SSA_NAME’ VAR.  If S is
!      an empty statement (i.e., ‘IS_EMPTY_STMT (S)’ returns ‘true’), it
       means that the first reference to this variable is a USE or a VUSE.
  
   -- Macro: SSA_NAME_VERSION (VAR)
!      Returns the version number of the ‘SSA_NAME’ object VAR.
  
  13.3.3 Walking the dominator tree
  ---------------------------------
*************** The following macros can be used to exam
*** 16751,16757 ****
  
       This function walks the dominator tree for the current CFG calling
       a set of callback functions defined in STRUCT DOM_WALK_DATA in
!      'domwalk.h'.  The call back functions you need to define give you
       hooks to execute custom code at various points during traversal:
  
         1. Once to initialize any local data needed while processing BB
--- 16753,16759 ----
  
       This function walks the dominator tree for the current CFG calling
       a set of callback functions defined in STRUCT DOM_WALK_DATA in
!      ‘domwalk.h’.  The call back functions you need to define give you
       hooks to execute custom code at various points during traversal:
  
         1. Once to initialize any local data needed while processing BB
*************** disambiguate explicit and implicit memor
*** 16808,16816 ****
              return i;
            }
  
!      The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'.
!      The store to the global variable 'i' defines '.MEM_3' invalidating
!      '.MEM_2(D)'.  The load from 'i' uses that new state '.MEM_3'.
  
       The virtual SSA web serves as constraints to SSA optimizers
       preventing illegitimate code-motion and optimization.  It also
--- 16810,16818 ----
              return i;
            }
  
!      The virtual SSA names in this case are ‘.MEM_2(D)’ and ‘.MEM_3’.
!      The store to the global variable ‘i’ defines ‘.MEM_3’ invalidating
!      ‘.MEM_2(D)’.  The load from ‘i’ uses that new state ‘.MEM_3’.
  
       The virtual SSA web serves as constraints to SSA optimizers
       preventing illegitimate code-motion and optimization.  It also
*************** disambiguate explicit and implicit memor
*** 16826,16853 ****
       what it may possibly point to.
  
       This points-to solution for a given SSA name pointer is stored in
!      the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record.
       The following accessor functions are available:
  
!         * 'pt_solution_includes'
!         * 'pt_solutions_intersect'
  
       Points-to analysis also computes the solution for two special set
!      of pointers, 'ESCAPED' and 'CALLUSED'.  Those represent all memory
       that has escaped the scope of analysis or that is used by pure or
       nested const calls.
  
    3. Type-based alias analysis
  
       Type-based alias analysis is frontend dependent though generic
!      support is provided by the middle-end in 'alias.cc'.  TBAA code is
       used by both tree optimizers and RTL optimizers.
  
       Every language that wishes to perform language-specific alias
!      analysis should define a function that computes, given a 'tree'
       node, an alias set for the node.  Nodes in different alias sets are
       not allowed to alias.  For an example, see the C front-end function
!      'c_get_alias_set'.
  
    4. Tree alias-oracle
  
--- 16828,16855 ----
       what it may possibly point to.
  
       This points-to solution for a given SSA name pointer is stored in
!      the ‘pt_solution’ sub-structure of the ‘SSA_NAME_PTR_INFO’ record.
       The following accessor functions are available:
  
!         • ‘pt_solution_includes’
!         • ‘pt_solutions_intersect’
  
       Points-to analysis also computes the solution for two special set
!      of pointers, ‘ESCAPED’ and ‘CALLUSED’.  Those represent all memory
       that has escaped the scope of analysis or that is used by pure or
       nested const calls.
  
    3. Type-based alias analysis
  
       Type-based alias analysis is frontend dependent though generic
!      support is provided by the middle-end in ‘alias.cc’.  TBAA code is
       used by both tree optimizers and RTL optimizers.
  
       Every language that wishes to perform language-specific alias
!      analysis should define a function that computes, given a ‘tree’
       node, an alias set for the node.  Nodes in different alias sets are
       not allowed to alias.  For an example, see the C front-end function
!      ‘c_get_alias_set’.
  
    4. Tree alias-oracle
  
*************** disambiguate explicit and implicit memor
*** 16855,16870 ****
       references and memory references against statements.  The following
       queries are available:
  
!         * 'refs_may_alias_p'
!         * 'ref_maybe_used_by_stmt_p'
!         * 'stmt_may_clobber_ref_p'
  
       In addition to those two kind of statement walkers are available
       walking statements related to a reference ref.
!      'walk_non_aliased_vuses' walks over dominating memory defining
       statements and calls back if the statement does not clobber ref
       providing the non-aliased VUSE. The walk stops at the first
!      clobbering statement or if asked to.  'walk_aliased_vdefs' walks
       over dominating memory defining statements and calls back on each
       statement clobbering ref providing its aliasing VDEF. The walk
       stops if asked to.
--- 16857,16872 ----
       references and memory references against statements.  The following
       queries are available:
  
!         • ‘refs_may_alias_p’
!         • ‘ref_maybe_used_by_stmt_p’
!         • ‘stmt_may_clobber_ref_p’
  
       In addition to those two kind of statement walkers are available
       walking statements related to a reference ref.
!      ‘walk_non_aliased_vuses’ walks over dominating memory defining
       statements and calls back if the statement does not clobber ref
       providing the non-aliased VUSE. The walk stops at the first
!      clobbering statement or if asked to.  ‘walk_aliased_vdefs’ walks
       over dominating memory defining statements and calls back on each
       statement clobbering ref providing its aliasing VDEF. The walk
       stops if asked to.
*************** internal form.
*** 16931,16937 ****
  * RTL Declarations::  Declaring volatility, constancy, etc.
  * Side Effects::      Expressions for storing in registers, etc.
  * Incdec::            Embedded side-effects for autoincrement addressing.
! * Assembler::         Representing 'asm' with operands.
  * Debug Information:: Expressions representing debugging information.
  * Insns::             Expression types for entire insns.
  * Calls::             RTL representation of function call insns.
--- 16933,16939 ----
  * RTL Declarations::  Declaring volatility, constancy, etc.
  * Side Effects::      Expressions for storing in registers, etc.
  * Incdec::            Embedded side-effects for autoincrement addressing.
! * Assembler::         Representing ‘asm’ with operands.
  * Debug Information:: Expressions representing debugging information.
  * Insns::             Expression types for entire insns.
  * Calls::             RTL representation of function call insns.
*************** File: gccint.info,  Node: RTL Objects,
*** 16948,16966 ****
  RTL uses five kinds of objects: expressions, integers, wide integers,
  strings and vectors.  Expressions are the most important ones.  An RTL
  expression ("RTX", for short) is a C structure, but it is usually
! referred to with a pointer; a type that is given the typedef name 'rtx'.
  
!  An integer is simply an 'int'; their written form uses decimal digits.
! A wide integer is an integral object whose type is 'HOST_WIDE_INT';
  their written form uses decimal digits.
  
   A string is a sequence of characters.  In core it is represented as a
! 'char *' in usual C fashion, and it is written in C syntax as well.
  However, strings in RTL may never be null.  If you write an empty string
  in a machine description, it is represented in core as a null pointer
  rather than as a pointer to a null character.  In certain contexts,
  these null pointers instead of strings are valid.  Within RTL code,
! strings are most commonly found inside 'symbol_ref' expressions, but
  they appear in other contexts in the RTL expressions that make up
  machine descriptions.
  
--- 16950,16968 ----
  RTL uses five kinds of objects: expressions, integers, wide integers,
  strings and vectors.  Expressions are the most important ones.  An RTL
  expression ("RTX", for short) is a C structure, but it is usually
! referred to with a pointer; a type that is given the typedef name ‘rtx’.
  
!  An integer is simply an ‘int’; their written form uses decimal digits.
! A wide integer is an integral object whose type is ‘HOST_WIDE_INT’;
  their written form uses decimal digits.
  
   A string is a sequence of characters.  In core it is represented as a
! ‘char *’ in usual C fashion, and it is written in C syntax as well.
  However, strings in RTL may never be null.  If you write an empty string
  in a machine description, it is represented in core as a null pointer
  rather than as a pointer to a null character.  In certain contexts,
  these null pointers instead of strings are valid.  Within RTL code,
! strings are most commonly found inside ‘symbol_ref’ expressions, but
  they appear in other contexts in the RTL expressions that make up
  machine descriptions.
  
*************** need not escape each quote character wit
*** 16981,17019 ****
  
   A vector contains an arbitrary number of pointers to expressions.  The
  number of elements in the vector is explicitly present in the vector.
! The written form of a vector consists of square brackets ('[...]')
  surrounding the elements, in sequence and with whitespace separating
  them.  Vectors of length zero are not created; null pointers are used
  instead.
  
!  Expressions are classified by "expression codes" (also called RTX
! codes).  The expression code is a name defined in 'rtl.def', which is
  also (in uppercase) a C enumeration constant.  The possible expression
  codes and their meanings are machine-independent.  The code of an RTX
! can be extracted with the macro 'GET_CODE (X)' and altered with
! 'PUT_CODE (X, NEWCODE)'.
  
   The expression code determines how many operands the expression
  contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
  cannot tell by looking at an operand what kind of object it is.
  Instead, you must know from its context--from the expression code of the
! containing expression.  For example, in an expression of code 'subreg',
  the first operand is to be regarded as an expression and the second
! operand as a polynomial integer.  In an expression of code 'plus', there
  are two operands, both of which are to be regarded as expressions.  In a
! 'symbol_ref' expression, there is one operand, which is to be regarded
  as a string.
  
   Expressions are written as parentheses containing the name of the
  expression type, its flags and machine mode if any, and then the
  operands of the expression (separated by spaces).
  
!  Expression code names in the 'md' file are written in lowercase, but
  when they appear in C code they are written in uppercase.  In this
! manual, they are shown as follows: 'const_int'.
  
   In a few contexts a null pointer is valid where an expression is
! normally wanted.  The written form of this is '(nil)'.
  
  
  File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
--- 16983,17021 ----
  
   A vector contains an arbitrary number of pointers to expressions.  The
  number of elements in the vector is explicitly present in the vector.
! The written form of a vector consists of square brackets (‘[...]’)
  surrounding the elements, in sequence and with whitespace separating
  them.  Vectors of length zero are not created; null pointers are used
  instead.
  
!  Expressions are classified by “expression codes” (also called RTX
! codes).  The expression code is a name defined in ‘rtl.def’, which is
  also (in uppercase) a C enumeration constant.  The possible expression
  codes and their meanings are machine-independent.  The code of an RTX
! can be extracted with the macro ‘GET_CODE (X)’ and altered with
! ‘PUT_CODE (X, NEWCODE)’.
  
   The expression code determines how many operands the expression
  contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
  cannot tell by looking at an operand what kind of object it is.
  Instead, you must know from its context--from the expression code of the
! containing expression.  For example, in an expression of code ‘subreg’,
  the first operand is to be regarded as an expression and the second
! operand as a polynomial integer.  In an expression of code ‘plus’, there
  are two operands, both of which are to be regarded as expressions.  In a
! ‘symbol_ref’ expression, there is one operand, which is to be regarded
  as a string.
  
   Expressions are written as parentheses containing the name of the
  expression type, its flags and machine mode if any, and then the
  operands of the expression (separated by spaces).
  
!  Expression code names in the ‘md’ file are written in lowercase, but
  when they appear in C code they are written in uppercase.  In this
! manual, they are shown as follows: ‘const_int’.
  
   In a few contexts a null pointer is valid where an expression is
! normally wanted.  The written form of this is ‘(nil)’.
  
  
  File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
*************** File: gccint.info,  Node: RTL Classes,
*** 17021,17184 ****
  14.2 RTL Classes and Formats
  ============================
  
! The various expression codes are divided into several "classes", which
  are represented by single characters.  You can determine the class of an
! RTX code with the macro 'GET_RTX_CLASS (CODE)'.  Currently, 'rtl.def'
  defines these classes:
  
! 'RTX_OBJ'
       An RTX code that represents an actual object, such as a register
!      ('REG') or a memory location ('MEM', 'SYMBOL_REF').  'LO_SUM' is
!      also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in
!      this class, but in class 'RTX_EXTRA'.
  
! 'RTX_CONST_OBJ'
!      An RTX code that represents a constant object.  'HIGH' is also
       included in this class.
  
! 'RTX_COMPARE'
!      An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'.
  
! 'RTX_COMM_COMPARE'
!      An RTX code for a symmetric (commutative) comparison, such as 'EQ'
!      or 'ORDERED'.
  
! 'RTX_UNARY'
!      An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT',
!      or 'ABS'.  This category also includes value extension (sign or
       zero) and conversions between integer and floating point.
  
! 'RTX_COMM_ARITH'
!      An RTX code for a commutative binary operation, such as 'PLUS' or
!      'AND'.  'NE' and 'EQ' are comparisons, so they have class
!      'RTX_COMM_COMPARE'.
  
! 'RTX_BIN_ARITH'
       An RTX code for a non-commutative binary operation, such as
!      'MINUS', 'DIV', or 'ASHIFTRT'.
  
! 'RTX_BITFIELD_OPS'
       An RTX code for a bit-field operation.  Currently only
!      'ZERO_EXTRACT' and 'SIGN_EXTRACT'.  These have three inputs and are
       lvalues (so they can be used for insertion as well).  *Note
       Bit-Fields::.
  
! 'RTX_TERNARY'
       An RTX code for other three input operations.  Currently only
!      'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and
!      'FMA'.
  
! 'RTX_INSN'
!      An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and
!      'CALL_INSN'.  *Note Insns::.
  
! 'RTX_MATCH'
       An RTX code for something that matches in insns, such as
!      'MATCH_DUP'.  These only occur in machine descriptions.
  
! 'RTX_AUTOINC'
       An RTX code for an auto-increment addressing mode, such as
!      'POST_INC'.  'XEXP (X, 0)' gives the auto-modified register.
  
! 'RTX_EXTRA'
       All other RTX codes.  This category includes the remaining codes
!      used only in machine descriptions ('DEFINE_*', etc.).  It also
!      includes all the codes describing side effects ('SET', 'USE',
!      'CLOBBER', etc.)  and the non-insns that may appear on an insn
!      chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'.  'SUBREG' is
       also part of this class.
  
!  For each expression code, 'rtl.def' specifies the number of contained
  objects and their kinds using a sequence of characters called the
! "format" of the expression code.  For example, the format of 'subreg' is
! 'ep'.
  
   These are the most commonly used format characters:
  
! 'e'
       An expression (actually a pointer to an expression).
  
! 'i'
       An integer.
  
! 'w'
       A wide integer.
  
! 's'
       A string.
  
! 'E'
       A vector of expressions.
  
   A few other format characters are used occasionally:
  
! 'u'
!      'u' is equivalent to 'e' except that it is printed differently in
       debugging dumps.  It is used for pointers to insns.
  
! 'n'
!      'n' is equivalent to 'i' except that it is printed differently in
       debugging dumps.  It is used for the line number or code number of
!      a 'note' insn.
  
! 'S'
!      'S' indicates a string which is optional.  In the RTL objects in
!      core, 'S' is equivalent to 's', but when the object is read, from
!      an 'md' file, the string value of this operand may be omitted.  An
       omitted string is taken to be the null string.
  
! 'V'
!      'V' indicates a vector which is optional.  In the RTL objects in
!      core, 'V' is equivalent to 'E', but when the object is read from an
!      'md' file, the vector value of this operand may be omitted.  An
       omitted vector is effectively the same as a vector of no elements.
  
! 'B'
!      'B' indicates a pointer to basic block structure.
  
! 'p'
       A polynomial integer.  At present this is used only for
!      'SUBREG_BYTE'.
  
! '0'
!      '0' means a slot whose contents do not fit any normal category.
!      '0' slots are not printed at all in dumps, and are often used in
       special ways by small parts of the compiler.
  
   There are macros to get the number of operands and the format of an
  expression code:
  
! 'GET_RTX_LENGTH (CODE)'
       Number of operands of an RTX of code CODE.
  
! 'GET_RTX_FORMAT (CODE)'
       The format of an RTX of code CODE, as a C string.
  
   Some classes of RTX codes always have the same format.  For example, it
! is safe to assume that all comparison operations have format 'ee'.
  
! 'RTX_UNARY'
!      All codes of this class have format 'e'.
  
! 'RTX_BIN_ARITH'
! 'RTX_COMM_ARITH'
! 'RTX_COMM_COMPARE'
! 'RTX_COMPARE'
!      All codes of these classes have format 'ee'.
  
! 'RTX_BITFIELD_OPS'
! 'RTX_TERNARY'
!      All codes of these classes have format 'eee'.
  
! 'RTX_INSN'
!      All codes of this class have formats that begin with 'iuueiee'.
       *Note Insns::.  Note that not all RTL objects linked onto an insn
!      chain are of class 'RTX_INSN'.
  
! 'RTX_CONST_OBJ'
! 'RTX_OBJ'
! 'RTX_MATCH'
! 'RTX_EXTRA'
       You can make no assumptions about the format of these codes.
  
  
--- 17023,17186 ----
  14.2 RTL Classes and Formats
  ============================
  
! The various expression codes are divided into several “classes”, which
  are represented by single characters.  You can determine the class of an
! RTX code with the macro ‘GET_RTX_CLASS (CODE)’.  Currently, ‘rtl.def’
  defines these classes:
  
! ‘RTX_OBJ’
       An RTX code that represents an actual object, such as a register
!      (‘REG’) or a memory location (‘MEM’, ‘SYMBOL_REF’).  ‘LO_SUM’ is
!      also included; instead, ‘SUBREG’ and ‘STRICT_LOW_PART’ are not in
!      this class, but in class ‘RTX_EXTRA’.
  
! ‘RTX_CONST_OBJ’
!      An RTX code that represents a constant object.  ‘HIGH’ is also
       included in this class.
  
! ‘RTX_COMPARE’
!      An RTX code for a non-symmetric comparison, such as ‘GEU’ or ‘LT’.
  
! ‘RTX_COMM_COMPARE’
!      An RTX code for a symmetric (commutative) comparison, such as ‘EQ’
!      or ‘ORDERED’.
  
! ‘RTX_UNARY’
!      An RTX code for a unary arithmetic operation, such as ‘NEG’, ‘NOT’,
!      or ‘ABS’.  This category also includes value extension (sign or
       zero) and conversions between integer and floating point.
  
! ‘RTX_COMM_ARITH’
!      An RTX code for a commutative binary operation, such as ‘PLUS’ or
!      ‘AND’.  ‘NE’ and ‘EQ’ are comparisons, so they have class
!      ‘RTX_COMM_COMPARE’.
  
! ‘RTX_BIN_ARITH’
       An RTX code for a non-commutative binary operation, such as
!      ‘MINUS’, ‘DIV’, or ‘ASHIFTRT’.
  
! ‘RTX_BITFIELD_OPS’
       An RTX code for a bit-field operation.  Currently only
!      ‘ZERO_EXTRACT’ and ‘SIGN_EXTRACT’.  These have three inputs and are
       lvalues (so they can be used for insertion as well).  *Note
       Bit-Fields::.
  
! ‘RTX_TERNARY’
       An RTX code for other three input operations.  Currently only
!      ‘IF_THEN_ELSE’, ‘VEC_MERGE’, ‘SIGN_EXTRACT’, ‘ZERO_EXTRACT’, and
!      ‘FMA’.
  
! ‘RTX_INSN’
!      An RTX code for an entire instruction: ‘INSN’, ‘JUMP_INSN’, and
!      ‘CALL_INSN’.  *Note Insns::.
  
! ‘RTX_MATCH’
       An RTX code for something that matches in insns, such as
!      ‘MATCH_DUP’.  These only occur in machine descriptions.
  
! ‘RTX_AUTOINC’
       An RTX code for an auto-increment addressing mode, such as
!      ‘POST_INC’.  ‘XEXP (X, 0)’ gives the auto-modified register.
  
! ‘RTX_EXTRA’
       All other RTX codes.  This category includes the remaining codes
!      used only in machine descriptions (‘DEFINE_*’, etc.).  It also
!      includes all the codes describing side effects (‘SET’, ‘USE’,
!      ‘CLOBBER’, etc.)  and the non-insns that may appear on an insn
!      chain, such as ‘NOTE’, ‘BARRIER’, and ‘CODE_LABEL’.  ‘SUBREG’ is
       also part of this class.
  
!  For each expression code, ‘rtl.def’ specifies the number of contained
  objects and their kinds using a sequence of characters called the
! “format” of the expression code.  For example, the format of ‘subreg’ is
! ‘ep’.
  
   These are the most commonly used format characters:
  
! ‘e’
       An expression (actually a pointer to an expression).
  
! ‘i’
       An integer.
  
! ‘w’
       A wide integer.
  
! ‘s’
       A string.
  
! ‘E’
       A vector of expressions.
  
   A few other format characters are used occasionally:
  
! ‘u’
!      ‘u’ is equivalent to ‘e’ except that it is printed differently in
       debugging dumps.  It is used for pointers to insns.
  
! ‘n’
!      ‘n’ is equivalent to ‘i’ except that it is printed differently in
       debugging dumps.  It is used for the line number or code number of
!      a ‘note’ insn.
  
! ‘S’
!      ‘S’ indicates a string which is optional.  In the RTL objects in
!      core, ‘S’ is equivalent to ‘s’, but when the object is read, from
!      an ‘md’ file, the string value of this operand may be omitted.  An
       omitted string is taken to be the null string.
  
! ‘V’
!      ‘V’ indicates a vector which is optional.  In the RTL objects in
!      core, ‘V’ is equivalent to ‘E’, but when the object is read from an
!      ‘md’ file, the vector value of this operand may be omitted.  An
       omitted vector is effectively the same as a vector of no elements.
  
! ‘B’
!      ‘B’ indicates a pointer to basic block structure.
  
! ‘p’
       A polynomial integer.  At present this is used only for
!      ‘SUBREG_BYTE’.
  
! ‘0’
!      ‘0’ means a slot whose contents do not fit any normal category.
!      ‘0’ slots are not printed at all in dumps, and are often used in
       special ways by small parts of the compiler.
  
   There are macros to get the number of operands and the format of an
  expression code:
  
! ‘GET_RTX_LENGTH (CODE)’
       Number of operands of an RTX of code CODE.
  
! ‘GET_RTX_FORMAT (CODE)’
       The format of an RTX of code CODE, as a C string.
  
   Some classes of RTX codes always have the same format.  For example, it
! is safe to assume that all comparison operations have format ‘ee’.
  
! ‘RTX_UNARY’
!      All codes of this class have format ‘e’.
  
! ‘RTX_BIN_ARITH’
! ‘RTX_COMM_ARITH’
! ‘RTX_COMM_COMPARE’
! ‘RTX_COMPARE’
!      All codes of these classes have format ‘ee’.
  
! ‘RTX_BITFIELD_OPS’
! ‘RTX_TERNARY’
!      All codes of these classes have format ‘eee’.
  
! ‘RTX_INSN’
!      All codes of this class have formats that begin with ‘iuueiee’.
       *Note Insns::.  Note that not all RTL objects linked onto an insn
!      chain are of class ‘RTX_INSN’.
  
! ‘RTX_CONST_OBJ’
! ‘RTX_OBJ’
! ‘RTX_MATCH’
! ‘RTX_EXTRA’
       You can make no assumptions about the format of these codes.
  
  
*************** File: gccint.info,  Node: Accessors,  Ne
*** 17187,17194 ****
  14.3 Access to Operands
  =======================
  
! Operands of expressions are accessed using the macros 'XEXP', 'XINT',
! 'XWINT' and 'XSTR'.  Each of these macros takes two arguments: an
  expression-pointer (RTX) and an operand number (counting from zero).
  Thus,
  
--- 17189,17196 ----
  14.3 Access to Operands
  =======================
  
! Operands of expressions are accessed using the macros ‘XEXP’, ‘XINT’,
! ‘XWINT’ and ‘XSTR’.  Each of these macros takes two arguments: an
  expression-pointer (RTX) and an operand number (counting from zero).
  Thus,
  
*************** accesses operand 2 of expression X, as a
*** 17198,17204 ****
  
       XINT (X, 2)
  
! accesses the same operand as an integer.  'XSTR', used in the same
  fashion, would access it as a string.
  
   Any operand can be accessed as an integer, as an expression or as a
--- 17200,17206 ----
  
       XINT (X, 2)
  
! accesses the same operand as an integer.  ‘XSTR’, used in the same
  fashion, would access it as a string.
  
   Any operand can be accessed as an integer, as an expression or as a
*************** value actually stored in the operand.  Y
*** 17207,17237 ****
  expression code of the containing expression.  That is also how you
  would know how many operands there are.
  
!  For example, if X is an 'int_list' expression, you know that it has two
! operands which can be correctly accessed as 'XINT (X, 0)' and 'XEXP (X,
! 1)'.  Incorrect accesses like 'XEXP (X, 0)' and 'XINT (X, 1)' would
  compile, but would trigger an internal compiler error when rtl checking
! is enabled.  Nothing stops you from writing 'XEXP (X, 28)' either, but
  this will access memory past the end of the expression with
  unpredictable results.
  
   Access to operands which are vectors is more complicated.  You can use
! the macro 'XVEC' to get the vector-pointer itself, or the macros
! 'XVECEXP' and 'XVECLEN' to access the elements and length of a vector.
  
! 'XVEC (EXP, IDX)'
       Access the vector-pointer which is operand number IDX in EXP.
  
! 'XVECLEN (EXP, IDX)'
       Access the length (number of elements) in the vector which is in
!      operand number IDX in EXP.  This value is an 'int'.
  
! 'XVECEXP (EXP, IDX, ELTNUM)'
       Access element number ELTNUM in the vector which is in operand
       number IDX in EXP.  This value is an RTX.
  
       It is up to you to make sure that ELTNUM is not negative and is
!      less than 'XVECLEN (EXP, IDX)'.
  
   All the macros defined in this section expand into lvalues and
  therefore can be used to assign the operands, lengths and vector
--- 17209,17239 ----
  expression code of the containing expression.  That is also how you
  would know how many operands there are.
  
!  For example, if X is an ‘int_list’ expression, you know that it has two
! operands which can be correctly accessed as ‘XINT (X, 0)’ and ‘XEXP (X,
! 1)’.  Incorrect accesses like ‘XEXP (X, 0)’ and ‘XINT (X, 1)’ would
  compile, but would trigger an internal compiler error when rtl checking
! is enabled.  Nothing stops you from writing ‘XEXP (X, 28)’ either, but
  this will access memory past the end of the expression with
  unpredictable results.
  
   Access to operands which are vectors is more complicated.  You can use
! the macro ‘XVEC’ to get the vector-pointer itself, or the macros
! ‘XVECEXP’ and ‘XVECLEN’ to access the elements and length of a vector.
  
! ‘XVEC (EXP, IDX)’
       Access the vector-pointer which is operand number IDX in EXP.
  
! ‘XVECLEN (EXP, IDX)’
       Access the length (number of elements) in the vector which is in
!      operand number IDX in EXP.  This value is an ‘int’.
  
! ‘XVECEXP (EXP, IDX, ELTNUM)’
       Access element number ELTNUM in the vector which is in operand
       number IDX in EXP.  This value is an RTX.
  
       It is up to you to make sure that ELTNUM is not negative and is
!      less than ‘XVECLEN (EXP, IDX)’.
  
   All the macros defined in this section expand into lvalues and
  therefore can be used to assign the operands, lengths and vector
*************** File: gccint.info,  Node: Special Access
*** 17245,17380 ****
  
  Some RTL nodes have special annotations associated with them.
  
! 'MEM'
!      'MEM_ALIAS_SET (X)'
            If 0, X is not in any alias set, and may alias anything.
!           Otherwise, X can only alias 'MEM's in a conflicting alias set.
            This value is set in a language-dependent manner in the
            front-end, and should not be altered in the back-end.  In some
            front-ends, these numbers may correspond in some way to types,
            or other language-level entities, but they need not, and the
            back-end makes no such assumptions.  These set numbers are
!           tested with 'alias_sets_conflict_p'.
  
!      'MEM_EXPR (X)'
            If this register is known to hold the value of some user-level
            declaration, this is that tree node.  It may also be a
!           'COMPONENT_REF', in which case this is some field reference,
!           and 'TREE_OPERAND (X, 0)' contains the declaration, or another
!           'COMPONENT_REF', or null if there is no compile-time object
            associated with the reference.
  
!      'MEM_OFFSET_KNOWN_P (X)'
!           True if the offset of the memory reference from 'MEM_EXPR' is
!           known.  'MEM_OFFSET (X)' provides the offset if so.
  
!      'MEM_OFFSET (X)'
!           The offset from the start of 'MEM_EXPR'.  The value is only
!           valid if 'MEM_OFFSET_KNOWN_P (X)' is true.
  
!      'MEM_SIZE_KNOWN_P (X)'
!           True if the size of the memory reference is known.  'MEM_SIZE
!           (X)' provides its size if so.
  
!      'MEM_SIZE (X)'
            The size in bytes of the memory reference.  This is mostly
!           relevant for 'BLKmode' references as otherwise the size is
            implied by the mode.  The value is only valid if
!           'MEM_SIZE_KNOWN_P (X)' is true.
  
!      'MEM_ALIGN (X)'
            The known alignment in bits of the memory reference.
  
!      'MEM_ADDR_SPACE (X)'
            The address space of the memory reference.  This will commonly
            be zero for the generic address space.
  
! 'REG'
!      'ORIGINAL_REGNO (X)'
            This field holds the number the register "originally" had; for
            a pseudo register turned into a hard reg this will hold the
            old pseudo register number.
  
!      'REG_EXPR (X)'
            If this register is known to hold the value of some user-level
            declaration, this is that tree node.
  
!      'REG_OFFSET (X)'
            If this register is known to hold the value of some user-level
            declaration, this is the offset into that logical storage.
  
! 'SYMBOL_REF'
!      'SYMBOL_REF_DECL (X)'
!           If the 'symbol_ref' X was created for a 'VAR_DECL' or a
!           'FUNCTION_DECL', that tree is recorded here.  If this value is
            null, then X was created by back end code generation routines,
            and there is no associated front end symbol table entry.
  
!           'SYMBOL_REF_DECL' may also point to a tree of class ''c'',
            that is, some sort of constant.  In this case, the
!           'symbol_ref' is an entry in the per-file constant pool; again,
            there is no associated front end symbol table entry.
  
!      'SYMBOL_REF_CONSTANT (X)'
!           If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
            pool entry for X.  It is null otherwise.
  
!      'SYMBOL_REF_DATA (X)'
!           A field of opaque type used to store 'SYMBOL_REF_DECL' or
!           'SYMBOL_REF_CONSTANT'.
  
!      'SYMBOL_REF_FLAGS (X)'
!           In a 'symbol_ref', this is used to communicate various
            predicates about the symbol.  Some of these are common enough
            to be computed by common code, some are specific to the
            target.  The common bits are:
  
!           'SYMBOL_FLAG_FUNCTION'
                 Set if the symbol refers to a function.
  
!           'SYMBOL_FLAG_LOCAL'
                 Set if the symbol is local to this "module".  See
!                'TARGET_BINDS_LOCAL_P'.
  
!           'SYMBOL_FLAG_EXTERNAL'
                 Set if this symbol is not defined in this translation
                 unit.  Note that this is not the inverse of
!                'SYMBOL_FLAG_LOCAL'.
  
!           'SYMBOL_FLAG_SMALL'
                 Set if the symbol is located in the small data section.
!                See 'TARGET_IN_SMALL_DATA_P'.
  
!           'SYMBOL_REF_TLS_MODEL (X)'
                 This is a multi-bit field accessor that returns the
!                'tls_model' to be used for a thread-local storage symbol.
                 It returns zero for non-thread-local symbols.
  
!           'SYMBOL_FLAG_HAS_BLOCK_INFO'
!                Set if the symbol has 'SYMBOL_REF_BLOCK' and
!                'SYMBOL_REF_BLOCK_OFFSET' fields.
  
!           'SYMBOL_FLAG_ANCHOR'
                 Set if the symbol is used as a section anchor.  "Section
                 anchors" are symbols that have a known position within an
!                'object_block' and that can be used to access nearby
                 members of that block.  They are used to implement
!                '-fsection-anchors'.
  
!                If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO'
                 will be too.
  
!           Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for
            the target's use.
  
! 'SYMBOL_REF_BLOCK (X)'
!      If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block'
!      structure to which the symbol belongs, or 'NULL' if it has not been
       assigned a block.
  
! 'SYMBOL_REF_BLOCK_OFFSET (X)'
!      If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
!      the first object in 'SYMBOL_REF_BLOCK (X)'.  The value is negative
       if X has not yet been assigned to a block, or it has not been given
       an offset within that block.
  
--- 17247,17382 ----
  
  Some RTL nodes have special annotations associated with them.
  
! ‘MEM’
!      ‘MEM_ALIAS_SET (X)’
            If 0, X is not in any alias set, and may alias anything.
!           Otherwise, X can only alias ‘MEM’s in a conflicting alias set.
            This value is set in a language-dependent manner in the
            front-end, and should not be altered in the back-end.  In some
            front-ends, these numbers may correspond in some way to types,
            or other language-level entities, but they need not, and the
            back-end makes no such assumptions.  These set numbers are
!           tested with ‘alias_sets_conflict_p’.
  
!      ‘MEM_EXPR (X)’
            If this register is known to hold the value of some user-level
            declaration, this is that tree node.  It may also be a
!           ‘COMPONENT_REF’, in which case this is some field reference,
!           and ‘TREE_OPERAND (X, 0)’ contains the declaration, or another
!           ‘COMPONENT_REF’, or null if there is no compile-time object
            associated with the reference.
  
!      ‘MEM_OFFSET_KNOWN_P (X)’
!           True if the offset of the memory reference from ‘MEM_EXPR’ is
!           known.  ‘MEM_OFFSET (X)’ provides the offset if so.
  
!      ‘MEM_OFFSET (X)’
!           The offset from the start of ‘MEM_EXPR’.  The value is only
!           valid if ‘MEM_OFFSET_KNOWN_P (X)’ is true.
  
!      ‘MEM_SIZE_KNOWN_P (X)’
!           True if the size of the memory reference is known.  ‘MEM_SIZE
!           (X)’ provides its size if so.
  
!      ‘MEM_SIZE (X)’
            The size in bytes of the memory reference.  This is mostly
!           relevant for ‘BLKmode’ references as otherwise the size is
            implied by the mode.  The value is only valid if
!           ‘MEM_SIZE_KNOWN_P (X)’ is true.
  
!      ‘MEM_ALIGN (X)’
            The known alignment in bits of the memory reference.
  
!      ‘MEM_ADDR_SPACE (X)’
            The address space of the memory reference.  This will commonly
            be zero for the generic address space.
  
! ‘REG’
!      ‘ORIGINAL_REGNO (X)’
            This field holds the number the register "originally" had; for
            a pseudo register turned into a hard reg this will hold the
            old pseudo register number.
  
!      ‘REG_EXPR (X)’
            If this register is known to hold the value of some user-level
            declaration, this is that tree node.
  
!      ‘REG_OFFSET (X)’
            If this register is known to hold the value of some user-level
            declaration, this is the offset into that logical storage.
  
! ‘SYMBOL_REF’
!      ‘SYMBOL_REF_DECL (X)’
!           If the ‘symbol_ref’ X was created for a ‘VAR_DECL’ or a
!           ‘FUNCTION_DECL’, that tree is recorded here.  If this value is
            null, then X was created by back end code generation routines,
            and there is no associated front end symbol table entry.
  
!           ‘SYMBOL_REF_DECL’ may also point to a tree of class ‘'c'’,
            that is, some sort of constant.  In this case, the
!           ‘symbol_ref’ is an entry in the per-file constant pool; again,
            there is no associated front end symbol table entry.
  
!      ‘SYMBOL_REF_CONSTANT (X)’
!           If ‘CONSTANT_POOL_ADDRESS_P (X)’ is true, this is the constant
            pool entry for X.  It is null otherwise.
  
!      ‘SYMBOL_REF_DATA (X)’
!           A field of opaque type used to store ‘SYMBOL_REF_DECL’ or
!           ‘SYMBOL_REF_CONSTANT’.
  
!      ‘SYMBOL_REF_FLAGS (X)’
!           In a ‘symbol_ref’, this is used to communicate various
            predicates about the symbol.  Some of these are common enough
            to be computed by common code, some are specific to the
            target.  The common bits are:
  
!           ‘SYMBOL_FLAG_FUNCTION’
                 Set if the symbol refers to a function.
  
!           ‘SYMBOL_FLAG_LOCAL’
                 Set if the symbol is local to this "module".  See
!                ‘TARGET_BINDS_LOCAL_P’.
  
!           ‘SYMBOL_FLAG_EXTERNAL’
                 Set if this symbol is not defined in this translation
                 unit.  Note that this is not the inverse of
!                ‘SYMBOL_FLAG_LOCAL’.
  
!           ‘SYMBOL_FLAG_SMALL’
                 Set if the symbol is located in the small data section.
!                See ‘TARGET_IN_SMALL_DATA_P’.
  
!           ‘SYMBOL_REF_TLS_MODEL (X)’
                 This is a multi-bit field accessor that returns the
!                ‘tls_model’ to be used for a thread-local storage symbol.
                 It returns zero for non-thread-local symbols.
  
!           ‘SYMBOL_FLAG_HAS_BLOCK_INFO’
!                Set if the symbol has ‘SYMBOL_REF_BLOCK’ and
!                ‘SYMBOL_REF_BLOCK_OFFSET’ fields.
  
!           ‘SYMBOL_FLAG_ANCHOR’
                 Set if the symbol is used as a section anchor.  "Section
                 anchors" are symbols that have a known position within an
!                ‘object_block’ and that can be used to access nearby
                 members of that block.  They are used to implement
!                ‘-fsection-anchors’.
  
!                If this flag is set, then ‘SYMBOL_FLAG_HAS_BLOCK_INFO’
                 will be too.
  
!           Bits beginning with ‘SYMBOL_FLAG_MACH_DEP’ are available for
            the target's use.
  
! ‘SYMBOL_REF_BLOCK (X)’
!      If ‘SYMBOL_REF_HAS_BLOCK_INFO_P (X)’, this is the ‘object_block’
!      structure to which the symbol belongs, or ‘NULL’ if it has not been
       assigned a block.
  
! ‘SYMBOL_REF_BLOCK_OFFSET (X)’
!      If ‘SYMBOL_REF_HAS_BLOCK_INFO_P (X)’, this is the offset of X from
!      the first object in ‘SYMBOL_REF_BLOCK (X)’.  The value is negative
       if X has not yet been assigned to a block, or it has not been given
       an offset within that block.
  
*************** RTL expressions contain several flags (o
*** 17388,17395 ****
  in certain types of expression.  Most often they are accessed with the
  following macros, which expand into lvalues.
  
! 'CROSSING_JUMP_P (X)'
!      Nonzero in a 'jump_insn' if it crosses between hot and cold
       sections, which could potentially be very far apart in the
       executable.  The presence of this flag indicates to other
       optimizations that this branching instruction should not be
--- 17390,17397 ----
  in certain types of expression.  Most often they are accessed with the
  following macros, which expand into lvalues.
  
! ‘CROSSING_JUMP_P (X)’
!      Nonzero in a ‘jump_insn’ if it crosses between hot and cold
       sections, which could potentially be very far apart in the
       executable.  The presence of this flag indicates to other
       optimizations that this branching instruction should not be
*************** following macros, which expand into lval
*** 17397,17463 ****
       the optimization to partition basic blocks into hot and cold
       sections is turned on.
  
! 'CONSTANT_POOL_ADDRESS_P (X)'
!      Nonzero in a 'symbol_ref' if it refers to part of the current
       function's constant pool.  For most targets these addresses are in
!      a '.rodata' section entirely separate from the function, but for
       some targets the addresses are close to the beginning of the
       function.  In either case GCC assumes these addresses can be
       addressed directly, perhaps with the help of base registers.
!      Stored in the 'unchanging' field and printed as '/u'.
  
! 'INSN_ANNULLED_BRANCH_P (X)'
!      In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch
!      is an annulling one.  See the discussion under 'sequence' below.
!      Stored in the 'unchanging' field and printed as '/u'.
  
! 'INSN_DELETED_P (X)'
!      In an 'insn', 'call_insn', 'jump_insn', 'code_label',
!      'jump_table_data', 'barrier', or 'note', nonzero if the insn has
!      been deleted.  Stored in the 'volatil' field and printed as '/v'.
  
! 'INSN_FROM_TARGET_P (X)'
!      In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a
       branch, indicates that the insn is from the target of the branch.
!      If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will
       only be executed if the branch is taken.  For annulled branches
!      with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if
!      the branch is not taken.  When 'INSN_ANNULLED_BRANCH_P' is not set,
!      this insn will always be executed.  Stored in the 'in_struct' field
!      and printed as '/s'.
  
! 'LABEL_PRESERVE_P (X)'
!      In a 'code_label' or 'note', indicates that the label is referenced
       by code or data not visible to the RTL of a given function.  Labels
       referenced by a non-local goto will have this bit set.  Stored in
!      the 'in_struct' field and printed as '/s'.
  
! 'LABEL_REF_NONLOCAL_P (X)'
!      In 'label_ref' and 'reg_label' expressions, nonzero if this is a
!      reference to a non-local label.  Stored in the 'volatil' field and
!      printed as '/v'.
  
! 'MEM_KEEP_ALIAS_SET_P (X)'
!      In 'mem' expressions, 1 if we should keep the alias set for this
       mem unchanged when we access a component.  Set to 1, for example,
       when we are already in a non-addressable component of an aggregate.
!      Stored in the 'jump' field and printed as '/j'.
  
! 'MEM_VOLATILE_P (X)'
!      In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for
!      volatile memory references.  Stored in the 'volatil' field and
!      printed as '/v'.
  
! 'MEM_NOTRAP_P (X)'
!      In 'mem', nonzero for memory references that will not trap.  Stored
!      in the 'call' field and printed as '/c'.
  
! 'MEM_POINTER (X)'
!      Nonzero in a 'mem' if the memory reference holds a pointer.  Stored
!      in the 'frame_related' field and printed as '/f'.
  
! 'MEM_READONLY_P (X)'
!      Nonzero in a 'mem', if the memory is statically allocated and
       read-only.
  
       Read-only in this context means never modified during the lifetime
--- 17399,17465 ----
       the optimization to partition basic blocks into hot and cold
       sections is turned on.
  
! ‘CONSTANT_POOL_ADDRESS_P (X)’
!      Nonzero in a ‘symbol_ref’ if it refers to part of the current
       function's constant pool.  For most targets these addresses are in
!      a ‘.rodata’ section entirely separate from the function, but for
       some targets the addresses are close to the beginning of the
       function.  In either case GCC assumes these addresses can be
       addressed directly, perhaps with the help of base registers.
!      Stored in the ‘unchanging’ field and printed as ‘/u’.
  
! ‘INSN_ANNULLED_BRANCH_P (X)’
!      In a ‘jump_insn’, ‘call_insn’, or ‘insn’ indicates that the branch
!      is an annulling one.  See the discussion under ‘sequence’ below.
!      Stored in the ‘unchanging’ field and printed as ‘/u’.
  
! ‘INSN_DELETED_P (X)’
!      In an ‘insn’, ‘call_insn’, ‘jump_insn’, ‘code_label’,
!      ‘jump_table_data’, ‘barrier’, or ‘note’, nonzero if the insn has
!      been deleted.  Stored in the ‘volatil’ field and printed as ‘/v’.
  
! ‘INSN_FROM_TARGET_P (X)’
!      In an ‘insn’ or ‘jump_insn’ or ‘call_insn’ in a delay slot of a
       branch, indicates that the insn is from the target of the branch.
!      If the branch insn has ‘INSN_ANNULLED_BRANCH_P’ set, this insn will
       only be executed if the branch is taken.  For annulled branches
!      with ‘INSN_FROM_TARGET_P’ clear, the insn will be executed only if
!      the branch is not taken.  When ‘INSN_ANNULLED_BRANCH_P’ is not set,
!      this insn will always be executed.  Stored in the ‘in_struct’ field
!      and printed as ‘/s’.
  
! ‘LABEL_PRESERVE_P (X)’
!      In a ‘code_label’ or ‘note’, indicates that the label is referenced
       by code or data not visible to the RTL of a given function.  Labels
       referenced by a non-local goto will have this bit set.  Stored in
!      the ‘in_struct’ field and printed as ‘/s’.
  
! ‘LABEL_REF_NONLOCAL_P (X)’
!      In ‘label_ref’ and ‘reg_label’ expressions, nonzero if this is a
!      reference to a non-local label.  Stored in the ‘volatil’ field and
!      printed as ‘/v’.
  
! ‘MEM_KEEP_ALIAS_SET_P (X)’
!      In ‘mem’ expressions, 1 if we should keep the alias set for this
       mem unchanged when we access a component.  Set to 1, for example,
       when we are already in a non-addressable component of an aggregate.
!      Stored in the ‘jump’ field and printed as ‘/j’.
  
! ‘MEM_VOLATILE_P (X)’
!      In ‘mem’, ‘asm_operands’, and ‘asm_input’ expressions, nonzero for
!      volatile memory references.  Stored in the ‘volatil’ field and
!      printed as ‘/v’.
  
! ‘MEM_NOTRAP_P (X)’
!      In ‘mem’, nonzero for memory references that will not trap.  Stored
!      in the ‘call’ field and printed as ‘/c’.
  
! ‘MEM_POINTER (X)’
!      Nonzero in a ‘mem’ if the memory reference holds a pointer.  Stored
!      in the ‘frame_related’ field and printed as ‘/f’.
  
! ‘MEM_READONLY_P (X)’
!      Nonzero in a ‘mem’, if the memory is statically allocated and
       read-only.
  
       Read-only in this context means never modified during the lifetime
*************** following macros, which expand into lval
*** 17468,17525 ****
       from the runtime loader to the application, this memory will never
       be subsequently modified.
  
!      Stored in the 'unchanging' field and printed as '/u'.
  
! 'PREFETCH_SCHEDULE_BARRIER_P (X)'
!      In a 'prefetch', indicates that the prefetch is a scheduling
       barrier.  No other INSNs will be moved over it.  Stored in the
!      'volatil' field and printed as '/v'.
  
! 'REG_FUNCTION_VALUE_P (X)'
!      Nonzero in a 'reg' if it is the place in which this function's
       value is going to be returned.  (This happens only in a hard
!      register.)  Stored in the 'return_val' field and printed as '/i'.
  
! 'REG_POINTER (X)'
!      Nonzero in a 'reg' if the register holds a pointer.  Stored in the
!      'frame_related' field and printed as '/f'.
  
! 'REG_USERVAR_P (X)'
!      In a 'reg', nonzero if it corresponds to a variable present in the
       user's source code.  Zero for temporaries generated internally by
!      the compiler.  Stored in the 'volatil' field and printed as '/v'.
  
       The same hard register may be used also for collecting the values
!      of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero
       in this kind of use.
  
! 'RTL_CONST_CALL_P (X)'
!      In a 'call_insn' indicates that the insn represents a call to a
!      const function.  Stored in the 'unchanging' field and printed as
!      '/u'.
  
! 'RTL_PURE_CALL_P (X)'
!      In a 'call_insn' indicates that the insn represents a call to a
!      pure function.  Stored in the 'return_val' field and printed as
!      '/i'.
  
! 'RTL_CONST_OR_PURE_CALL_P (X)'
!      In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P'
       is true.
  
! 'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
!      In a 'call_insn' indicates that the insn represents a possibly
       infinite looping call to a const or pure function.  Stored in the
!      'call' field and printed as '/c'.  Only true if one of
!      'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true.
  
! 'RTX_FRAME_RELATED_P (X)'
!      Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set'
       which is part of a function prologue and sets the stack pointer,
       sets the frame pointer, or saves a register.  This flag should also
       be set on an instruction that sets up a temporary register to use
!      in place of the frame pointer.  Stored in the 'frame_related' field
!      and printed as '/f'.
  
       In particular, on RISC targets where there are limits on the sizes
       of immediate constants, it is sometimes impossible to reach the
--- 17470,17527 ----
       from the runtime loader to the application, this memory will never
       be subsequently modified.
  
!      Stored in the ‘unchanging’ field and printed as ‘/u’.
  
! ‘PREFETCH_SCHEDULE_BARRIER_P (X)’
!      In a ‘prefetch’, indicates that the prefetch is a scheduling
       barrier.  No other INSNs will be moved over it.  Stored in the
!      ‘volatil’ field and printed as ‘/v’.
  
! ‘REG_FUNCTION_VALUE_P (X)’
!      Nonzero in a ‘reg’ if it is the place in which this function's
       value is going to be returned.  (This happens only in a hard
!      register.)  Stored in the ‘return_val’ field and printed as ‘/i’.
  
! ‘REG_POINTER (X)’
!      Nonzero in a ‘reg’ if the register holds a pointer.  Stored in the
!      ‘frame_related’ field and printed as ‘/f’.
  
! ‘REG_USERVAR_P (X)’
!      In a ‘reg’, nonzero if it corresponds to a variable present in the
       user's source code.  Zero for temporaries generated internally by
!      the compiler.  Stored in the ‘volatil’ field and printed as ‘/v’.
  
       The same hard register may be used also for collecting the values
!      of functions called by this one, but ‘REG_FUNCTION_VALUE_P’ is zero
       in this kind of use.
  
! ‘RTL_CONST_CALL_P (X)’
!      In a ‘call_insn’ indicates that the insn represents a call to a
!      const function.  Stored in the ‘unchanging’ field and printed as
!      ‘/u’.
  
! ‘RTL_PURE_CALL_P (X)’
!      In a ‘call_insn’ indicates that the insn represents a call to a
!      pure function.  Stored in the ‘return_val’ field and printed as
!      ‘/i’.
  
! ‘RTL_CONST_OR_PURE_CALL_P (X)’
!      In a ‘call_insn’, true if ‘RTL_CONST_CALL_P’ or ‘RTL_PURE_CALL_P’
       is true.
  
! ‘RTL_LOOPING_CONST_OR_PURE_CALL_P (X)’
!      In a ‘call_insn’ indicates that the insn represents a possibly
       infinite looping call to a const or pure function.  Stored in the
!      ‘call’ field and printed as ‘/c’.  Only true if one of
!      ‘RTL_CONST_CALL_P’ or ‘RTL_PURE_CALL_P’ is true.
  
! ‘RTX_FRAME_RELATED_P (X)’
!      Nonzero in an ‘insn’, ‘call_insn’, ‘jump_insn’, ‘barrier’, or ‘set’
       which is part of a function prologue and sets the stack pointer,
       sets the frame pointer, or saves a register.  This flag should also
       be set on an instruction that sets up a temporary register to use
!      in place of the frame pointer.  Stored in the ‘frame_related’ field
!      and printed as ‘/f’.
  
       In particular, on RISC targets where there are limits on the sizes
       of immediate constants, it is sometimes impossible to reach the
*************** following macros, which expand into lval
*** 17528,17742 ****
       save area, and the Canonical Frame Address, i.e., DWARF2's logical
       frame pointer, register must (temporarily) be changed to be this
       temporary register.  So, the instruction that sets this temporary
!      register must be marked as 'RTX_FRAME_RELATED_P'.
  
       If the marked instruction is overly complex (defined in terms of
!      what 'dwarf2out_frame_debug_expr' can handle), you will also have
!      to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the
       instruction.  This note should contain a simple expression of the
       computation performed by this instruction, i.e., one that
!      'dwarf2out_frame_debug_expr' can handle.
  
       This flag is required for exception handling support on targets
       with RTL prologues.
  
! 'SCHED_GROUP_P (X)'
!      During instruction scheduling, in an 'insn', 'call_insn',
!      'jump_insn' or 'jump_table_data', indicates that the previous insn
       must be scheduled together with this insn.  This is used to ensure
       that certain groups of instructions will not be split up by the
!      instruction scheduling pass, for example, 'use' insns before a
!      'call_insn' may not be separated from the 'call_insn'.  Stored in
!      the 'in_struct' field and printed as '/s'.
  
! 'SET_IS_RETURN_P (X)'
!      For a 'set', nonzero if it is for a return.  Stored in the 'jump'
!      field and printed as '/j'.
  
! 'SIBLING_CALL_P (X)'
!      For a 'call_insn', nonzero if the insn is a sibling call.  Stored
!      in the 'jump' field and printed as '/j'.
  
! 'STRING_POOL_ADDRESS_P (X)'
!      For a 'symbol_ref' expression, nonzero if it addresses this
!      function's string constant pool.  Stored in the 'frame_related'
!      field and printed as '/f'.
  
! 'SUBREG_PROMOTED_UNSIGNED_P (X)'
!      Returns a value greater then zero for a 'subreg' that has
!      'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
       kept zero-extended, zero if it is kept sign-extended, and less then
!      zero if it is extended some other way via the 'ptr_extend'
!      instruction.  Stored in the 'unchanging' field and 'volatil' field,
!      printed as '/u' and '/v'.  This macro may only be used to get the
       value it may not be used to change the value.  Use
!      'SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
  
! 'SUBREG_PROMOTED_UNSIGNED_SET (X)'
!      Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect
!      zero, sign, or other extension.  If 'volatil' is zero, then
!      'unchanging' as nonzero means zero extension and as zero means sign
!      extension.  If 'volatil' is nonzero then some other type of
!      extension was done via the 'ptr_extend' instruction.
  
! 'SUBREG_PROMOTED_VAR_P (X)'
!      Nonzero in a 'subreg' if it was made when accessing an object that
!      was promoted to a wider mode in accord with the 'PROMOTED_MODE'
       machine description macro (*note Storage Layout::).  In this case,
!      the mode of the 'subreg' is the declared mode of the object and the
!      mode of 'SUBREG_REG' is the mode of the register that holds the
       object.  Promoted variables are always either sign- or
       zero-extended to the wider mode on every assignment.  Stored in the
!      'in_struct' field and printed as '/s'.
  
! 'SYMBOL_REF_USED (X)'
!      In a 'symbol_ref', indicates that X has been used.  This is
       normally only used to ensure that X is only declared external once.
!      Stored in the 'used' field.
  
! 'SYMBOL_REF_WEAK (X)'
!      In a 'symbol_ref', indicates that X has been declared weak.  Stored
!      in the 'return_val' field and printed as '/i'.
  
! 'SYMBOL_REF_FLAG (X)'
!      In a 'symbol_ref', this is used as a flag for machine-specific
!      purposes.  Stored in the 'volatil' field and printed as '/v'.
  
!      Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by
!      'SYMBOL_REF_FLAGS'.  Certainly use of 'SYMBOL_REF_FLAGS' is
       mandatory if the target requires more than one bit of storage.
  
   These are the fields to which the above macros refer:
  
! 'call'
!      In a 'mem', 1 means that the memory reference will not trap.
  
!      In a 'call', 1 means that this pure or const call may possibly
       infinite loop.
  
!      In an RTL dump, this flag is represented as '/c'.
  
! 'frame_related'
!      In an 'insn' or 'set' expression, 1 means that it is part of a
       function prologue and sets the stack pointer, sets the frame
       pointer, saves a register, or sets up a temporary register to use
       in place of the frame pointer.
  
!      In 'reg' expressions, 1 means that the register holds a pointer.
  
!      In 'mem' expressions, 1 means that the memory reference holds a
       pointer.
  
!      In 'symbol_ref' expressions, 1 means that the reference addresses
       this function's string constant pool.
  
!      In an RTL dump, this flag is represented as '/f'.
  
! 'in_struct'
!      In 'reg' expressions, it is 1 if the register has its entire life
       contained within the test expression of some loop.
  
!      In 'subreg' expressions, 1 means that the 'subreg' is accessing an
       object that has had its mode promoted from a wider mode.
  
!      In 'label_ref' expressions, 1 means that the referenced label is
       outside the innermost loop containing the insn in which the
!      'label_ref' was found.
  
!      In 'code_label' expressions, it is 1 if the label may never be
       deleted.  This is used for labels which are the target of non-local
       gotos.  Such a label that would have been deleted is replaced with
!      a 'note' of type 'NOTE_INSN_DELETED_LABEL'.
  
!      In an 'insn' during dead-code elimination, 1 means that the insn is
       dead code.
  
!      In an 'insn' or 'jump_insn' during reorg for an insn in the delay
       slot of a branch, 1 means that this insn is from the target of the
       branch.
  
!      In an 'insn' during instruction scheduling, 1 means that this insn
       must be scheduled as part of a group together with the previous
       insn.
  
!      In an RTL dump, this flag is represented as '/s'.
  
! 'return_val'
!      In 'reg' expressions, 1 means the register contains the value to be
       returned by the current function.  On machines that pass parameters
       in registers, the same register number may be used for parameters
       as well, but this flag is not set on such uses.
  
!      In 'symbol_ref' expressions, 1 means the referenced symbol is weak.
  
!      In 'call' expressions, 1 means the call is pure.
  
!      In an RTL dump, this flag is represented as '/i'.
  
! 'jump'
!      In a 'mem' expression, 1 means we should keep the alias set for
       this mem unchanged when we access a component.
  
!      In a 'set', 1 means it is for a return.
  
!      In a 'call_insn', 1 means it is a sibling call.
  
!      In a 'jump_insn', 1 means it is a crossing jump.
  
!      In an RTL dump, this flag is represented as '/j'.
  
! 'unchanging'
!      In 'reg' and 'mem' expressions, 1 means that the value of the
       expression never changes.
  
!      In 'subreg' expressions, it is 1 if the 'subreg' references an
       unsigned object whose mode has been promoted to a wider mode.
  
!      In an 'insn' or 'jump_insn' in the delay slot of a branch
       instruction, 1 means an annulling branch should be used.
  
!      In a 'symbol_ref' expression, 1 means that this symbol addresses
       something in the per-function constant pool.
  
!      In a 'call_insn' 1 means that this instruction is a call to a const
       function.
  
!      In an RTL dump, this flag is represented as '/u'.
  
! 'used'
       This flag is used directly (without an access macro) at the end of
       RTL generation for a function, to count the number of times an
       expression appears in insns.  Expressions that appear more than
       once are copied, according to the rules for shared structure (*note
       Sharing::).
  
!      For a 'reg', it is used directly (without an access macro) by the
       leaf register renumbering code to ensure that each register is only
       renumbered once.
  
!      In a 'symbol_ref', it indicates that an external declaration for
       the symbol has already been written.
  
! 'volatil'
!      In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if
       the memory reference is volatile.  Volatile memory references may
       not be deleted, reordered or combined.
  
!      In a 'symbol_ref' expression, it is used for machine-specific
       purposes.
  
!      In a 'reg' expression, it is 1 if the value is a user-level
       variable.  0 indicates an internal compiler temporary.
  
!      In an 'insn', 1 means the insn has been deleted.
  
!      In 'label_ref' and 'reg_label' expressions, 1 means a reference to
       a non-local label.
  
!      In 'prefetch' expressions, 1 means that the containing insn is a
       scheduling barrier.
  
!      In an RTL dump, this flag is represented as '/v'.
  
  
  File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
--- 17530,17744 ----
       save area, and the Canonical Frame Address, i.e., DWARF2's logical
       frame pointer, register must (temporarily) be changed to be this
       temporary register.  So, the instruction that sets this temporary
!      register must be marked as ‘RTX_FRAME_RELATED_P’.
  
       If the marked instruction is overly complex (defined in terms of
!      what ‘dwarf2out_frame_debug_expr’ can handle), you will also have
!      to create a ‘REG_FRAME_RELATED_EXPR’ note and attach it to the
       instruction.  This note should contain a simple expression of the
       computation performed by this instruction, i.e., one that
!      ‘dwarf2out_frame_debug_expr’ can handle.
  
       This flag is required for exception handling support on targets
       with RTL prologues.
  
! ‘SCHED_GROUP_P (X)’
!      During instruction scheduling, in an ‘insn’, ‘call_insn’,
!      ‘jump_insn’ or ‘jump_table_data’, indicates that the previous insn
       must be scheduled together with this insn.  This is used to ensure
       that certain groups of instructions will not be split up by the
!      instruction scheduling pass, for example, ‘use’ insns before a
!      ‘call_insn’ may not be separated from the ‘call_insn’.  Stored in
!      the ‘in_struct’ field and printed as ‘/s’.
  
! ‘SET_IS_RETURN_P (X)’
!      For a ‘set’, nonzero if it is for a return.  Stored in the ‘jump’
!      field and printed as ‘/j’.
  
! ‘SIBLING_CALL_P (X)’
!      For a ‘call_insn’, nonzero if the insn is a sibling call.  Stored
!      in the ‘jump’ field and printed as ‘/j’.
  
! ‘STRING_POOL_ADDRESS_P (X)’
!      For a ‘symbol_ref’ expression, nonzero if it addresses this
!      function's string constant pool.  Stored in the ‘frame_related’
!      field and printed as ‘/f’.
  
! ‘SUBREG_PROMOTED_UNSIGNED_P (X)’
!      Returns a value greater then zero for a ‘subreg’ that has
!      ‘SUBREG_PROMOTED_VAR_P’ nonzero if the object being referenced is
       kept zero-extended, zero if it is kept sign-extended, and less then
!      zero if it is extended some other way via the ‘ptr_extend’
!      instruction.  Stored in the ‘unchanging’ field and ‘volatil’ field,
!      printed as ‘/u’ and ‘/v’.  This macro may only be used to get the
       value it may not be used to change the value.  Use
!      ‘SUBREG_PROMOTED_UNSIGNED_SET’ to change the value.
  
! ‘SUBREG_PROMOTED_UNSIGNED_SET (X)’
!      Set the ‘unchanging’ and ‘volatil’ fields in a ‘subreg’ to reflect
!      zero, sign, or other extension.  If ‘volatil’ is zero, then
!      ‘unchanging’ as nonzero means zero extension and as zero means sign
!      extension.  If ‘volatil’ is nonzero then some other type of
!      extension was done via the ‘ptr_extend’ instruction.
  
! ‘SUBREG_PROMOTED_VAR_P (X)’
!      Nonzero in a ‘subreg’ if it was made when accessing an object that
!      was promoted to a wider mode in accord with the ‘PROMOTED_MODE’
       machine description macro (*note Storage Layout::).  In this case,
!      the mode of the ‘subreg’ is the declared mode of the object and the
!      mode of ‘SUBREG_REG’ is the mode of the register that holds the
       object.  Promoted variables are always either sign- or
       zero-extended to the wider mode on every assignment.  Stored in the
!      ‘in_struct’ field and printed as ‘/s’.
  
! ‘SYMBOL_REF_USED (X)’
!      In a ‘symbol_ref’, indicates that X has been used.  This is
       normally only used to ensure that X is only declared external once.
!      Stored in the ‘used’ field.
  
! ‘SYMBOL_REF_WEAK (X)’
!      In a ‘symbol_ref’, indicates that X has been declared weak.  Stored
!      in the ‘return_val’ field and printed as ‘/i’.
  
! ‘SYMBOL_REF_FLAG (X)’
!      In a ‘symbol_ref’, this is used as a flag for machine-specific
!      purposes.  Stored in the ‘volatil’ field and printed as ‘/v’.
  
!      Most uses of ‘SYMBOL_REF_FLAG’ are historic and may be subsumed by
!      ‘SYMBOL_REF_FLAGS’.  Certainly use of ‘SYMBOL_REF_FLAGS’ is
       mandatory if the target requires more than one bit of storage.
  
   These are the fields to which the above macros refer:
  
! ‘call’
!      In a ‘mem’, 1 means that the memory reference will not trap.
  
!      In a ‘call’, 1 means that this pure or const call may possibly
       infinite loop.
  
!      In an RTL dump, this flag is represented as ‘/c’.
  
! ‘frame_related’
!      In an ‘insn’ or ‘set’ expression, 1 means that it is part of a
       function prologue and sets the stack pointer, sets the frame
       pointer, saves a register, or sets up a temporary register to use
       in place of the frame pointer.
  
!      In ‘reg’ expressions, 1 means that the register holds a pointer.
  
!      In ‘mem’ expressions, 1 means that the memory reference holds a
       pointer.
  
!      In ‘symbol_ref’ expressions, 1 means that the reference addresses
       this function's string constant pool.
  
!      In an RTL dump, this flag is represented as ‘/f’.
  
! ‘in_struct’
!      In ‘reg’ expressions, it is 1 if the register has its entire life
       contained within the test expression of some loop.
  
!      In ‘subreg’ expressions, 1 means that the ‘subreg’ is accessing an
       object that has had its mode promoted from a wider mode.
  
!      In ‘label_ref’ expressions, 1 means that the referenced label is
       outside the innermost loop containing the insn in which the
!      ‘label_ref’ was found.
  
!      In ‘code_label’ expressions, it is 1 if the label may never be
       deleted.  This is used for labels which are the target of non-local
       gotos.  Such a label that would have been deleted is replaced with
!      a ‘note’ of type ‘NOTE_INSN_DELETED_LABEL’.
  
!      In an ‘insn’ during dead-code elimination, 1 means that the insn is
       dead code.
  
!      In an ‘insn’ or ‘jump_insn’ during reorg for an insn in the delay
       slot of a branch, 1 means that this insn is from the target of the
       branch.
  
!      In an ‘insn’ during instruction scheduling, 1 means that this insn
       must be scheduled as part of a group together with the previous
       insn.
  
!      In an RTL dump, this flag is represented as ‘/s’.
  
! ‘return_val’
!      In ‘reg’ expressions, 1 means the register contains the value to be
       returned by the current function.  On machines that pass parameters
       in registers, the same register number may be used for parameters
       as well, but this flag is not set on such uses.
  
!      In ‘symbol_ref’ expressions, 1 means the referenced symbol is weak.
  
!      In ‘call’ expressions, 1 means the call is pure.
  
!      In an RTL dump, this flag is represented as ‘/i’.
  
! ‘jump’
!      In a ‘mem’ expression, 1 means we should keep the alias set for
       this mem unchanged when we access a component.
  
!      In a ‘set’, 1 means it is for a return.
  
!      In a ‘call_insn’, 1 means it is a sibling call.
  
!      In a ‘jump_insn’, 1 means it is a crossing jump.
  
!      In an RTL dump, this flag is represented as ‘/j’.
  
! ‘unchanging’
!      In ‘reg’ and ‘mem’ expressions, 1 means that the value of the
       expression never changes.
  
!      In ‘subreg’ expressions, it is 1 if the ‘subreg’ references an
       unsigned object whose mode has been promoted to a wider mode.
  
!      In an ‘insn’ or ‘jump_insn’ in the delay slot of a branch
       instruction, 1 means an annulling branch should be used.
  
!      In a ‘symbol_ref’ expression, 1 means that this symbol addresses
       something in the per-function constant pool.
  
!      In a ‘call_insn’ 1 means that this instruction is a call to a const
       function.
  
!      In an RTL dump, this flag is represented as ‘/u’.
  
! ‘used’
       This flag is used directly (without an access macro) at the end of
       RTL generation for a function, to count the number of times an
       expression appears in insns.  Expressions that appear more than
       once are copied, according to the rules for shared structure (*note
       Sharing::).
  
!      For a ‘reg’, it is used directly (without an access macro) by the
       leaf register renumbering code to ensure that each register is only
       renumbered once.
  
!      In a ‘symbol_ref’, it indicates that an external declaration for
       the symbol has already been written.
  
! ‘volatil’
!      In a ‘mem’, ‘asm_operands’, or ‘asm_input’ expression, it is 1 if
       the memory reference is volatile.  Volatile memory references may
       not be deleted, reordered or combined.
  
!      In a ‘symbol_ref’ expression, it is used for machine-specific
       purposes.
  
!      In a ‘reg’ expression, it is 1 if the value is a user-level
       variable.  0 indicates an internal compiler temporary.
  
!      In an ‘insn’, 1 means the insn has been deleted.
  
!      In ‘label_ref’ and ‘reg_label’ expressions, 1 means a reference to
       a non-local label.
  
!      In ‘prefetch’ expressions, 1 means that the containing insn is a
       scheduling barrier.
  
!      In an RTL dump, this flag is represented as ‘/v’.
  
  
  File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
*************** File: gccint.info,  Node: Machine Modes,
*** 17746,18178 ****
  
  A machine mode describes a size of data object and the representation
  used for it.  In the C code, machine modes are represented by an
! enumeration type, 'machine_mode', defined in 'machmode.def'.  Each RTL
  expression has room for a machine mode and so do certain kinds of tree
  expressions (declarations and types, to be precise).
  
   In debugging dumps and machine descriptions, the machine mode of an RTL
  expression is written after the expression code with a colon to separate
! them.  The letters 'mode' which appear at the end of each machine mode
! name are omitted.  For example, '(reg:SI 38)' is a 'reg' expression with
! machine mode 'SImode'.  If the mode is 'VOIDmode', it is not written at
  all.
  
   Here is a table of machine modes.  The term "byte" below refers to an
! object of 'BITS_PER_UNIT' bits (*note Storage Layout::).
  
! 'BImode'
       "Bit" mode represents a single bit, for predicate registers.
  
! 'QImode'
       "Quarter-Integer" mode represents a single byte treated as an
       integer.
  
! 'HImode'
       "Half-Integer" mode represents a two-byte integer.
  
! 'PSImode'
       "Partial Single Integer" mode represents an integer which occupies
       four bytes but which doesn't really use all four.  On some
       machines, this is the right mode to use for pointers.
  
! 'SImode'
       "Single Integer" mode represents a four-byte integer.
  
! 'PDImode'
       "Partial Double Integer" mode represents an integer which occupies
       eight bytes but which doesn't really use all eight.  On some
       machines, this is the right mode to use for certain pointers.
  
! 'DImode'
       "Double Integer" mode represents an eight-byte integer.
  
! 'TImode'
       "Tetra Integer" (?)  mode represents a sixteen-byte integer.
  
! 'OImode'
       "Octa Integer" (?)  mode represents a thirty-two-byte integer.
  
! 'XImode'
       "Hexadeca Integer" (?)  mode represents a sixty-four-byte integer.
  
! 'QFmode'
       "Quarter-Floating" mode represents a quarter-precision (single
       byte) floating point number.
  
! 'HFmode'
       "Half-Floating" mode represents a half-precision (two byte)
       floating point number.
  
! 'TQFmode'
       "Three-Quarter-Floating" (?)  mode represents a
       three-quarter-precision (three byte) floating point number.
  
! 'SFmode'
       "Single Floating" mode represents a four byte floating point
       number.  In the common case, of a processor with IEEE arithmetic
       and 8-bit bytes, this is a single-precision IEEE floating point
       number; it can also be used for double-precision (on processors
       with 16-bit bytes) and single-precision VAX and IBM types.
  
! 'DFmode'
       "Double Floating" mode represents an eight byte floating point
       number.  In the common case, of a processor with IEEE arithmetic
       and 8-bit bytes, this is a double-precision IEEE floating point
       number.
  
! 'XFmode'
       "Extended Floating" mode represents an IEEE extended floating point
       number.  This mode only has 80 meaningful bits (ten bytes).  Some
       processors require such numbers to be padded to twelve bytes,
       others to sixteen; this mode is used for either.
  
! 'SDmode'
       "Single Decimal Floating" mode represents a four byte decimal
       floating point number (as distinct from conventional binary
       floating point).
  
! 'DDmode'
       "Double Decimal Floating" mode represents an eight byte decimal
       floating point number.
  
! 'TDmode'
       "Tetra Decimal Floating" mode represents a sixteen byte decimal
       floating point number all 128 of whose bits are meaningful.
  
! 'TFmode'
       "Tetra Floating" mode represents a sixteen byte floating point
       number all 128 of whose bits are meaningful.  One common use is the
       IEEE quad-precision format.
  
! 'QQmode'
       "Quarter-Fractional" mode represents a single byte treated as a
       signed fractional number.  The default format is "s.7".
  
! 'HQmode'
       "Half-Fractional" mode represents a two-byte signed fractional
       number.  The default format is "s.15".
  
! 'SQmode'
       "Single Fractional" mode represents a four-byte signed fractional
       number.  The default format is "s.31".
  
! 'DQmode'
       "Double Fractional" mode represents an eight-byte signed fractional
       number.  The default format is "s.63".
  
! 'TQmode'
       "Tetra Fractional" mode represents a sixteen-byte signed fractional
       number.  The default format is "s.127".
  
! 'UQQmode'
       "Unsigned Quarter-Fractional" mode represents a single byte treated
       as an unsigned fractional number.  The default format is ".8".
  
! 'UHQmode'
       "Unsigned Half-Fractional" mode represents a two-byte unsigned
       fractional number.  The default format is ".16".
  
! 'USQmode'
       "Unsigned Single Fractional" mode represents a four-byte unsigned
       fractional number.  The default format is ".32".
  
! 'UDQmode'
       "Unsigned Double Fractional" mode represents an eight-byte unsigned
       fractional number.  The default format is ".64".
  
! 'UTQmode'
       "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
       fractional number.  The default format is ".128".
  
! 'HAmode'
       "Half-Accumulator" mode represents a two-byte signed accumulator.
       The default format is "s8.7".
  
! 'SAmode'
       "Single Accumulator" mode represents a four-byte signed
       accumulator.  The default format is "s16.15".
  
! 'DAmode'
       "Double Accumulator" mode represents an eight-byte signed
       accumulator.  The default format is "s32.31".
  
! 'TAmode'
       "Tetra Accumulator" mode represents a sixteen-byte signed
       accumulator.  The default format is "s64.63".
  
! 'UHAmode'
       "Unsigned Half-Accumulator" mode represents a two-byte unsigned
       accumulator.  The default format is "8.8".
  
! 'USAmode'
       "Unsigned Single Accumulator" mode represents a four-byte unsigned
       accumulator.  The default format is "16.16".
  
! 'UDAmode'
       "Unsigned Double Accumulator" mode represents an eight-byte
       unsigned accumulator.  The default format is "32.32".
  
! 'UTAmode'
       "Unsigned Tetra Accumulator" mode represents a sixteen-byte
       unsigned accumulator.  The default format is "64.64".
  
! 'CCmode'
       "Condition Code" mode represents the value of a condition code,
       which is a machine-specific set of bits used to represent the
       result of a comparison operation.  Other machine-specific modes may
       also be used for the condition code.  (*note Condition Code::).
  
! 'BLKmode'
       "Block" mode represents values that are aggregates to which none of
       the other modes apply.  In RTL, only memory references can have
       this mode, and only if they appear in string-move or vector
       instructions.  On machines which have no such instructions,
!      'BLKmode' will not appear in RTL.
  
! 'VOIDmode'
       Void mode means the absence of a mode or an unspecified mode.  For
!      example, RTL expressions of code 'const_int' have mode 'VOIDmode'
       because they can be taken to have whatever mode the context
!      requires.  In debugging dumps of RTL, 'VOIDmode' is expressed by
       the absence of any mode.
  
! 'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
       These modes stand for a complex number represented as a pair of
!      floating point values.  The floating point values are in 'QFmode',
!      'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively.
  
! 'CQImode, CHImode, CSImode, CDImode, CTImode, COImode, CPSImode'
       These modes stand for a complex number represented as a pair of
!      integer values.  The integer values are in 'QImode', 'HImode',
!      'SImode', 'DImode', 'TImode', 'OImode', and 'PSImode',
       respectively.
  
! 'BND32mode BND64mode'
       These modes stand for bounds for pointer of 32 and 64 bit size
       respectively.  Mode size is double pointer mode size.
  
!  The machine description defines 'Pmode' as a C macro which expands into
  the machine mode used for addresses.  Normally this is the mode whose
! size is 'BITS_PER_WORD', 'SImode' on 32-bit machines.
  
!  The only modes which a machine description must support are 'QImode',
! and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and
! 'DOUBLE_TYPE_SIZE'.  The compiler will attempt to use 'DImode' for
  8-byte structures and unions, but this can be prevented by overriding
! the definition of 'MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
! the compiler use 'TImode' for 16-byte structures and unions.  Likewise,
! you can arrange for the C type 'short int' to avoid using 'HImode'.
  
   Very few explicit references to machine modes remain in the compiler
  and these few references will soon be removed.  Instead, the machine
  modes are divided into mode classes.  These are represented by the
! enumeration type 'enum mode_class' defined in 'machmode.h'.  The
  possible mode classes are:
  
! 'MODE_INT'
!      Integer modes.  By default these are 'BImode', 'QImode', 'HImode',
!      'SImode', 'DImode', 'TImode', and 'OImode'.
  
! 'MODE_PARTIAL_INT'
!      The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and
!      'PDImode'.
  
! 'MODE_FLOAT'
!      Floating point modes.  By default these are 'QFmode', 'HFmode',
!      'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'.
  
! 'MODE_DECIMAL_FLOAT'
!      Decimal floating point modes.  By default these are 'SDmode',
!      'DDmode' and 'TDmode'.
  
! 'MODE_FRACT'
!      Signed fractional modes.  By default these are 'QQmode', 'HQmode',
!      'SQmode', 'DQmode' and 'TQmode'.
  
! 'MODE_UFRACT'
!      Unsigned fractional modes.  By default these are 'UQQmode',
!      'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'.
  
! 'MODE_ACCUM'
!      Signed accumulator modes.  By default these are 'HAmode', 'SAmode',
!      'DAmode' and 'TAmode'.
  
! 'MODE_UACCUM'
!      Unsigned accumulator modes.  By default these are 'UHAmode',
!      'USAmode', 'UDAmode' and 'UTAmode'.
  
! 'MODE_COMPLEX_INT'
       Complex integer modes.  (These are not currently implemented).
  
! 'MODE_COMPLEX_FLOAT'
!      Complex floating point modes.  By default these are 'QCmode',
!      'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'.
  
! 'MODE_CC'
!      Modes representing condition code values.  These are 'CCmode' plus
!      any 'CC_MODE' modes listed in the 'MACHINE-modes.def'.  *Note Jump
       Patterns::, also see *note Condition Code::.
  
! 'MODE_POINTER_BOUNDS'
       Pointer bounds modes.  Used to represent values of pointer bounds
       type.  Operations in these modes may be executed as NOPs depending
       on hardware features and environment setup.
  
! 'MODE_OPAQUE'
       This is a mode class for modes that don't want to provide
       operations other than register moves, memory moves, loads, stores,
!      and 'unspec's.  They have a size and precision and that's all.
  
! 'MODE_RANDOM'
       This is a catchall mode class for modes which don't fit into the
!      above classes.  Currently 'VOIDmode' and 'BLKmode' are in
!      'MODE_RANDOM'.
  
!  'machmode.h' also defines various wrapper classes that combine a
! 'machine_mode' with a static assertion that a particular condition
  holds.  The classes are:
  
! 'scalar_int_mode'
!      A mode that has class 'MODE_INT' or 'MODE_PARTIAL_INT'.
  
! 'scalar_float_mode'
!      A mode that has class 'MODE_FLOAT' or 'MODE_DECIMAL_FLOAT'.
  
! 'scalar_mode'
       A mode that holds a single numerical value.  In practice this means
!      that the mode is a 'scalar_int_mode', is a 'scalar_float_mode', or
!      has class 'MODE_FRACT', 'MODE_UFRACT', 'MODE_ACCUM', 'MODE_UACCUM'
!      or 'MODE_POINTER_BOUNDS'.
  
! 'complex_mode'
!      A mode that has class 'MODE_COMPLEX_INT' or 'MODE_COMPLEX_FLOAT'.
  
! 'fixed_size_mode'
       A mode whose size is known at compile time.
  
   Named modes use the most constrained of the available wrapper classes,
! if one exists, otherwise they use 'machine_mode'.  For example, 'QImode'
! is a 'scalar_int_mode', 'SFmode' is a 'scalar_float_mode' and 'BLKmode'
! is a plain 'machine_mode'.  It is possible to refer to any mode as a raw
! 'machine_mode' by adding the 'E_' prefix, where 'E' stands for
! "enumeration".  For example, the raw 'machine_mode' names of the modes
! just mentioned are 'E_QImode', 'E_SFmode' and 'E_BLKmode' respectively.
  
!  The wrapper classes implicitly convert to 'machine_mode' and to any
  wrapper class that represents a more general condition; for example
! 'scalar_int_mode' and 'scalar_float_mode' both convert to 'scalar_mode'
! and all three convert to 'fixed_size_mode'.  The classes act like
! 'machine_mode's that accept only certain named modes.
  
!  'machmode.h' also defines a template class 'opt_mode<T>' that holds a
! 'T' or nothing, where 'T' can be either 'machine_mode' or one of the
! wrapper classes above.  The main operations on an 'opt_mode<T>' X are as
  follows:
  
! 'X.exists ()'
       Return true if X holds a mode rather than nothing.
  
! 'X.exists (&Y)'
       Return true if X holds a mode rather than nothing, storing the mode
       in Y if so.  Y must be assignment-compatible with T.
  
! 'X.require ()'
       Assert that X holds a mode rather than nothing and return that
       mode.
  
! 'X = Y'
       Set X to Y, where Y is a T or implicitly converts to a T.
  
!  The default constructor sets an 'opt_mode<T>' to nothing.  There is
  also a constructor that takes an initial value of type T.
  
!  It is possible to use the 'is-a.h' accessors on a 'machine_mode' or
  machine mode wrapper X:
  
! 'is_a <T> (X)'
       Return true if X meets the conditions for wrapper class T.
  
! 'is_a <T> (X, &Y)'
       Return true if X meets the conditions for wrapper class T, storing
       it in Y if so.  Y must be assignment-compatible with T.
  
! 'as_a <T> (X)'
       Assert that X meets the conditions for wrapper class T and return
       it as a T.
  
! 'dyn_cast <T> (X)'
!      Return an 'opt_mode<T>' that holds X if X meets the conditions for
       wrapper class T and that holds nothing otherwise.
  
   The purpose of these wrapper classes is to give stronger static type
! checking.  For example, if a function takes a 'scalar_int_mode', a
! caller that has a general 'machine_mode' must either check or assert
  that the code is indeed a scalar integer first, using one of the
  functions above.
  
   The wrapper classes are normal C++ classes, with user-defined
  constructors.  Sometimes it is useful to have a POD version of the same
! type, particularly if the type appears in a 'union'.  The template class
! 'pod_mode<T>' provides a POD version of wrapper class T.  It is
  assignment-compatible with T and implicitly converts to both
! 'machine_mode' and T.
  
   Here are some C macros that relate to machine modes:
  
! 'GET_MODE (X)'
       Returns the machine mode of the RTX X.
  
! 'PUT_MODE (X, NEWMODE)'
       Alters the machine mode of the RTX X to be NEWMODE.
  
! 'NUM_MACHINE_MODES'
       Stands for the number of machine modes available on the target
       machine.  This is one greater than the largest numeric value of any
       machine mode.
  
! 'GET_MODE_NAME (M)'
       Returns the name of mode M as a string.
  
! 'GET_MODE_CLASS (M)'
       Returns the mode class of mode M.
  
! 'GET_MODE_WIDER_MODE (M)'
       Returns the next wider natural mode.  For example, the expression
!      'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'.
  
! 'GET_MODE_SIZE (M)'
       Returns the size in bytes of a datum of mode M.
  
! 'GET_MODE_BITSIZE (M)'
       Returns the size in bits of a datum of mode M.
  
! 'GET_MODE_IBIT (M)'
       Returns the number of integral bits of a datum of fixed-point mode
       M.
  
! 'GET_MODE_FBIT (M)'
       Returns the number of fractional bits of a datum of fixed-point
       mode M.
  
! 'GET_MODE_MASK (M)'
       Returns a bitmask containing 1 for all bits in a word that fit
       within mode M.  This macro can only be used for modes whose bitsize
!      is less than or equal to 'HOST_BITS_PER_INT'.
  
! 'GET_MODE_ALIGNMENT (M)'
       Return the required alignment, in bits, for an object of mode M.
  
! 'GET_MODE_UNIT_SIZE (M)'
       Returns the size in bytes of the subunits of a datum of mode M.
!      This is the same as 'GET_MODE_SIZE' except in the case of complex
       modes.  For them, the unit size is the size of the real or
       imaginary part.
  
! 'GET_MODE_NUNITS (M)'
       Returns the number of units contained in a mode, i.e.,
!      'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'.
  
! 'GET_CLASS_NARROWEST_MODE (C)'
       Returns the narrowest mode in mode class C.
  
   The following 3 variables are defined on every target.  They can be
--- 17748,18180 ----
  
  A machine mode describes a size of data object and the representation
  used for it.  In the C code, machine modes are represented by an
! enumeration type, ‘machine_mode’, defined in ‘machmode.def’.  Each RTL
  expression has room for a machine mode and so do certain kinds of tree
  expressions (declarations and types, to be precise).
  
   In debugging dumps and machine descriptions, the machine mode of an RTL
  expression is written after the expression code with a colon to separate
! them.  The letters ‘mode’ which appear at the end of each machine mode
! name are omitted.  For example, ‘(reg:SI 38)’ is a ‘reg’ expression with
! machine mode ‘SImode’.  If the mode is ‘VOIDmode’, it is not written at
  all.
  
   Here is a table of machine modes.  The term "byte" below refers to an
! object of ‘BITS_PER_UNIT’ bits (*note Storage Layout::).
  
! ‘BImode’
       "Bit" mode represents a single bit, for predicate registers.
  
! ‘QImode’
       "Quarter-Integer" mode represents a single byte treated as an
       integer.
  
! ‘HImode’
       "Half-Integer" mode represents a two-byte integer.
  
! ‘PSImode’
       "Partial Single Integer" mode represents an integer which occupies
       four bytes but which doesn't really use all four.  On some
       machines, this is the right mode to use for pointers.
  
! ‘SImode’
       "Single Integer" mode represents a four-byte integer.
  
! ‘PDImode’
       "Partial Double Integer" mode represents an integer which occupies
       eight bytes but which doesn't really use all eight.  On some
       machines, this is the right mode to use for certain pointers.
  
! ‘DImode’
       "Double Integer" mode represents an eight-byte integer.
  
! ‘TImode’
       "Tetra Integer" (?)  mode represents a sixteen-byte integer.
  
! ‘OImode’
       "Octa Integer" (?)  mode represents a thirty-two-byte integer.
  
! ‘XImode’
       "Hexadeca Integer" (?)  mode represents a sixty-four-byte integer.
  
! ‘QFmode’
       "Quarter-Floating" mode represents a quarter-precision (single
       byte) floating point number.
  
! ‘HFmode’
       "Half-Floating" mode represents a half-precision (two byte)
       floating point number.
  
! ‘TQFmode’
       "Three-Quarter-Floating" (?)  mode represents a
       three-quarter-precision (three byte) floating point number.
  
! ‘SFmode’
       "Single Floating" mode represents a four byte floating point
       number.  In the common case, of a processor with IEEE arithmetic
       and 8-bit bytes, this is a single-precision IEEE floating point
       number; it can also be used for double-precision (on processors
       with 16-bit bytes) and single-precision VAX and IBM types.
  
! ‘DFmode’
       "Double Floating" mode represents an eight byte floating point
       number.  In the common case, of a processor with IEEE arithmetic
       and 8-bit bytes, this is a double-precision IEEE floating point
       number.
  
! ‘XFmode’
       "Extended Floating" mode represents an IEEE extended floating point
       number.  This mode only has 80 meaningful bits (ten bytes).  Some
       processors require such numbers to be padded to twelve bytes,
       others to sixteen; this mode is used for either.
  
! ‘SDmode’
       "Single Decimal Floating" mode represents a four byte decimal
       floating point number (as distinct from conventional binary
       floating point).
  
! ‘DDmode’
       "Double Decimal Floating" mode represents an eight byte decimal
       floating point number.
  
! ‘TDmode’
       "Tetra Decimal Floating" mode represents a sixteen byte decimal
       floating point number all 128 of whose bits are meaningful.
  
! ‘TFmode’
       "Tetra Floating" mode represents a sixteen byte floating point
       number all 128 of whose bits are meaningful.  One common use is the
       IEEE quad-precision format.
  
! ‘QQmode’
       "Quarter-Fractional" mode represents a single byte treated as a
       signed fractional number.  The default format is "s.7".
  
! ‘HQmode’
       "Half-Fractional" mode represents a two-byte signed fractional
       number.  The default format is "s.15".
  
! ‘SQmode’
       "Single Fractional" mode represents a four-byte signed fractional
       number.  The default format is "s.31".
  
! ‘DQmode’
       "Double Fractional" mode represents an eight-byte signed fractional
       number.  The default format is "s.63".
  
! ‘TQmode’
       "Tetra Fractional" mode represents a sixteen-byte signed fractional
       number.  The default format is "s.127".
  
! ‘UQQmode’
       "Unsigned Quarter-Fractional" mode represents a single byte treated
       as an unsigned fractional number.  The default format is ".8".
  
! ‘UHQmode’
       "Unsigned Half-Fractional" mode represents a two-byte unsigned
       fractional number.  The default format is ".16".
  
! ‘USQmode’
       "Unsigned Single Fractional" mode represents a four-byte unsigned
       fractional number.  The default format is ".32".
  
! ‘UDQmode’
       "Unsigned Double Fractional" mode represents an eight-byte unsigned
       fractional number.  The default format is ".64".
  
! ‘UTQmode’
       "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
       fractional number.  The default format is ".128".
  
! ‘HAmode’
       "Half-Accumulator" mode represents a two-byte signed accumulator.
       The default format is "s8.7".
  
! ‘SAmode’
       "Single Accumulator" mode represents a four-byte signed
       accumulator.  The default format is "s16.15".
  
! ‘DAmode’
       "Double Accumulator" mode represents an eight-byte signed
       accumulator.  The default format is "s32.31".
  
! ‘TAmode’
       "Tetra Accumulator" mode represents a sixteen-byte signed
       accumulator.  The default format is "s64.63".
  
! ‘UHAmode’
       "Unsigned Half-Accumulator" mode represents a two-byte unsigned
       accumulator.  The default format is "8.8".
  
! ‘USAmode’
       "Unsigned Single Accumulator" mode represents a four-byte unsigned
       accumulator.  The default format is "16.16".
  
! ‘UDAmode’
       "Unsigned Double Accumulator" mode represents an eight-byte
       unsigned accumulator.  The default format is "32.32".
  
! ‘UTAmode’
       "Unsigned Tetra Accumulator" mode represents a sixteen-byte
       unsigned accumulator.  The default format is "64.64".
  
! ‘CCmode’
       "Condition Code" mode represents the value of a condition code,
       which is a machine-specific set of bits used to represent the
       result of a comparison operation.  Other machine-specific modes may
       also be used for the condition code.  (*note Condition Code::).
  
! ‘BLKmode’
       "Block" mode represents values that are aggregates to which none of
       the other modes apply.  In RTL, only memory references can have
       this mode, and only if they appear in string-move or vector
       instructions.  On machines which have no such instructions,
!      ‘BLKmode’ will not appear in RTL.
  
! ‘VOIDmode’
       Void mode means the absence of a mode or an unspecified mode.  For
!      example, RTL expressions of code ‘const_int’ have mode ‘VOIDmode’
       because they can be taken to have whatever mode the context
!      requires.  In debugging dumps of RTL, ‘VOIDmode’ is expressed by
       the absence of any mode.
  
! ‘QCmode, HCmode, SCmode, DCmode, XCmode, TCmode’
       These modes stand for a complex number represented as a pair of
!      floating point values.  The floating point values are in ‘QFmode’,
!      ‘HFmode’, ‘SFmode’, ‘DFmode’, ‘XFmode’, and ‘TFmode’, respectively.
  
! ‘CQImode, CHImode, CSImode, CDImode, CTImode, COImode, CPSImode’
       These modes stand for a complex number represented as a pair of
!      integer values.  The integer values are in ‘QImode’, ‘HImode’,
!      ‘SImode’, ‘DImode’, ‘TImode’, ‘OImode’, and ‘PSImode’,
       respectively.
  
! ‘BND32mode BND64mode’
       These modes stand for bounds for pointer of 32 and 64 bit size
       respectively.  Mode size is double pointer mode size.
  
!  The machine description defines ‘Pmode’ as a C macro which expands into
  the machine mode used for addresses.  Normally this is the mode whose
! size is ‘BITS_PER_WORD’, ‘SImode’ on 32-bit machines.
  
!  The only modes which a machine description must support are ‘QImode’,
! and the modes corresponding to ‘BITS_PER_WORD’, ‘FLOAT_TYPE_SIZE’ and
! ‘DOUBLE_TYPE_SIZE’.  The compiler will attempt to use ‘DImode’ for
  8-byte structures and unions, but this can be prevented by overriding
! the definition of ‘MAX_FIXED_MODE_SIZE’.  Alternatively, you can have
! the compiler use ‘TImode’ for 16-byte structures and unions.  Likewise,
! you can arrange for the C type ‘short int’ to avoid using ‘HImode’.
  
   Very few explicit references to machine modes remain in the compiler
  and these few references will soon be removed.  Instead, the machine
  modes are divided into mode classes.  These are represented by the
! enumeration type ‘enum mode_class’ defined in ‘machmode.h’.  The
  possible mode classes are:
  
! ‘MODE_INT’
!      Integer modes.  By default these are ‘BImode’, ‘QImode’, ‘HImode’,
!      ‘SImode’, ‘DImode’, ‘TImode’, and ‘OImode’.
  
! ‘MODE_PARTIAL_INT’
!      The "partial integer" modes, ‘PQImode’, ‘PHImode’, ‘PSImode’ and
!      ‘PDImode’.
  
! ‘MODE_FLOAT’
!      Floating point modes.  By default these are ‘QFmode’, ‘HFmode’,
!      ‘TQFmode’, ‘SFmode’, ‘DFmode’, ‘XFmode’ and ‘TFmode’.
  
! ‘MODE_DECIMAL_FLOAT’
!      Decimal floating point modes.  By default these are ‘SDmode’,
!      ‘DDmode’ and ‘TDmode’.
  
! ‘MODE_FRACT’
!      Signed fractional modes.  By default these are ‘QQmode’, ‘HQmode’,
!      ‘SQmode’, ‘DQmode’ and ‘TQmode’.
  
! ‘MODE_UFRACT’
!      Unsigned fractional modes.  By default these are ‘UQQmode’,
!      ‘UHQmode’, ‘USQmode’, ‘UDQmode’ and ‘UTQmode’.
  
! ‘MODE_ACCUM’
!      Signed accumulator modes.  By default these are ‘HAmode’, ‘SAmode’,
!      ‘DAmode’ and ‘TAmode’.
  
! ‘MODE_UACCUM’
!      Unsigned accumulator modes.  By default these are ‘UHAmode’,
!      ‘USAmode’, ‘UDAmode’ and ‘UTAmode’.
  
! ‘MODE_COMPLEX_INT’
       Complex integer modes.  (These are not currently implemented).
  
! ‘MODE_COMPLEX_FLOAT’
!      Complex floating point modes.  By default these are ‘QCmode’,
!      ‘HCmode’, ‘SCmode’, ‘DCmode’, ‘XCmode’, and ‘TCmode’.
  
! ‘MODE_CC’
!      Modes representing condition code values.  These are ‘CCmode’ plus
!      any ‘CC_MODE’ modes listed in the ‘MACHINE-modes.def’.  *Note Jump
       Patterns::, also see *note Condition Code::.
  
! ‘MODE_POINTER_BOUNDS’
       Pointer bounds modes.  Used to represent values of pointer bounds
       type.  Operations in these modes may be executed as NOPs depending
       on hardware features and environment setup.
  
! ‘MODE_OPAQUE’
       This is a mode class for modes that don't want to provide
       operations other than register moves, memory moves, loads, stores,
!      and ‘unspec’s.  They have a size and precision and that's all.
  
! ‘MODE_RANDOM’
       This is a catchall mode class for modes which don't fit into the
!      above classes.  Currently ‘VOIDmode’ and ‘BLKmode’ are in
!      ‘MODE_RANDOM’.
  
!  ‘machmode.h’ also defines various wrapper classes that combine a
! ‘machine_mode’ with a static assertion that a particular condition
  holds.  The classes are:
  
! ‘scalar_int_mode’
!      A mode that has class ‘MODE_INT’ or ‘MODE_PARTIAL_INT’.
  
! ‘scalar_float_mode’
!      A mode that has class ‘MODE_FLOAT’ or ‘MODE_DECIMAL_FLOAT’.
  
! ‘scalar_mode’
       A mode that holds a single numerical value.  In practice this means
!      that the mode is a ‘scalar_int_mode’, is a ‘scalar_float_mode’, or
!      has class ‘MODE_FRACT’, ‘MODE_UFRACT’, ‘MODE_ACCUM’, ‘MODE_UACCUM’
!      or ‘MODE_POINTER_BOUNDS’.
  
! ‘complex_mode’
!      A mode that has class ‘MODE_COMPLEX_INT’ or ‘MODE_COMPLEX_FLOAT’.
  
! ‘fixed_size_mode’
       A mode whose size is known at compile time.
  
   Named modes use the most constrained of the available wrapper classes,
! if one exists, otherwise they use ‘machine_mode’.  For example, ‘QImode’
! is a ‘scalar_int_mode’, ‘SFmode’ is a ‘scalar_float_mode’ and ‘BLKmode’
! is a plain ‘machine_mode’.  It is possible to refer to any mode as a raw
! ‘machine_mode’ by adding the ‘E_’ prefix, where ‘E’ stands for
! "enumeration".  For example, the raw ‘machine_mode’ names of the modes
! just mentioned are ‘E_QImode’, ‘E_SFmode’ and ‘E_BLKmode’ respectively.
  
!  The wrapper classes implicitly convert to ‘machine_mode’ and to any
  wrapper class that represents a more general condition; for example
! ‘scalar_int_mode’ and ‘scalar_float_mode’ both convert to ‘scalar_mode’
! and all three convert to ‘fixed_size_mode’.  The classes act like
! ‘machine_mode’s that accept only certain named modes.
  
!  ‘machmode.h’ also defines a template class ‘opt_mode<T>’ that holds a
! ‘T’ or nothing, where ‘T’ can be either ‘machine_mode’ or one of the
! wrapper classes above.  The main operations on an ‘opt_mode<T>’ X are as
  follows:
  
! ‘X.exists ()’
       Return true if X holds a mode rather than nothing.
  
! ‘X.exists (&Y)’
       Return true if X holds a mode rather than nothing, storing the mode
       in Y if so.  Y must be assignment-compatible with T.
  
! ‘X.require ()’
       Assert that X holds a mode rather than nothing and return that
       mode.
  
! ‘X = Y’
       Set X to Y, where Y is a T or implicitly converts to a T.
  
!  The default constructor sets an ‘opt_mode<T>’ to nothing.  There is
  also a constructor that takes an initial value of type T.
  
!  It is possible to use the ‘is-a.h’ accessors on a ‘machine_mode’ or
  machine mode wrapper X:
  
! ‘is_a <T> (X)’
       Return true if X meets the conditions for wrapper class T.
  
! ‘is_a <T> (X, &Y)’
       Return true if X meets the conditions for wrapper class T, storing
       it in Y if so.  Y must be assignment-compatible with T.
  
! ‘as_a <T> (X)’
       Assert that X meets the conditions for wrapper class T and return
       it as a T.
  
! ‘dyn_cast <T> (X)’
!      Return an ‘opt_mode<T>’ that holds X if X meets the conditions for
       wrapper class T and that holds nothing otherwise.
  
   The purpose of these wrapper classes is to give stronger static type
! checking.  For example, if a function takes a ‘scalar_int_mode’, a
! caller that has a general ‘machine_mode’ must either check or assert
  that the code is indeed a scalar integer first, using one of the
  functions above.
  
   The wrapper classes are normal C++ classes, with user-defined
  constructors.  Sometimes it is useful to have a POD version of the same
! type, particularly if the type appears in a ‘union’.  The template class
! ‘pod_mode<T>’ provides a POD version of wrapper class T.  It is
  assignment-compatible with T and implicitly converts to both
! ‘machine_mode’ and T.
  
   Here are some C macros that relate to machine modes:
  
! ‘GET_MODE (X)’
       Returns the machine mode of the RTX X.
  
! ‘PUT_MODE (X, NEWMODE)’
       Alters the machine mode of the RTX X to be NEWMODE.
  
! ‘NUM_MACHINE_MODES’
       Stands for the number of machine modes available on the target
       machine.  This is one greater than the largest numeric value of any
       machine mode.
  
! ‘GET_MODE_NAME (M)’
       Returns the name of mode M as a string.
  
! ‘GET_MODE_CLASS (M)’
       Returns the mode class of mode M.
  
! ‘GET_MODE_WIDER_MODE (M)’
       Returns the next wider natural mode.  For example, the expression
!      ‘GET_MODE_WIDER_MODE (QImode)’ returns ‘HImode’.
  
! ‘GET_MODE_SIZE (M)’
       Returns the size in bytes of a datum of mode M.
  
! ‘GET_MODE_BITSIZE (M)’
       Returns the size in bits of a datum of mode M.
  
! ‘GET_MODE_IBIT (M)’
       Returns the number of integral bits of a datum of fixed-point mode
       M.
  
! ‘GET_MODE_FBIT (M)’
       Returns the number of fractional bits of a datum of fixed-point
       mode M.
  
! ‘GET_MODE_MASK (M)’
       Returns a bitmask containing 1 for all bits in a word that fit
       within mode M.  This macro can only be used for modes whose bitsize
!      is less than or equal to ‘HOST_BITS_PER_INT’.
  
! ‘GET_MODE_ALIGNMENT (M)’
       Return the required alignment, in bits, for an object of mode M.
  
! ‘GET_MODE_UNIT_SIZE (M)’
       Returns the size in bytes of the subunits of a datum of mode M.
!      This is the same as ‘GET_MODE_SIZE’ except in the case of complex
       modes.  For them, the unit size is the size of the real or
       imaginary part.
  
! ‘GET_MODE_NUNITS (M)’
       Returns the number of units contained in a mode, i.e.,
!      ‘GET_MODE_SIZE’ divided by ‘GET_MODE_UNIT_SIZE’.
  
! ‘GET_CLASS_NARROWEST_MODE (C)’
       Returns the narrowest mode in mode class C.
  
   The following 3 variables are defined on every target.  They can be
*************** overridden by defining them in the targe
*** 18182,18209 ****
  value must be a constant that can determined very early in the
  compilation process.  The third symbol cannot be overridden.
  
! 'BITS_PER_UNIT'
       The number of bits in an addressable storage unit (byte).  If you
       do not define this, the default is 8.
  
! 'MAX_BITSIZE_MODE_ANY_INT'
       The maximum bitsize of any mode that is used in integer math.  This
       should be overridden by the target if it uses large integers as
       containers for larger vectors but otherwise never uses the contents
       to compute integer values.
  
! 'MAX_BITSIZE_MODE_ANY_MODE'
       The bitsize of the largest mode on the target.  The default value
       is the largest mode size given in the mode definition file, which
       is always correct for targets whose modes have a fixed size.
       Targets that might increase the size of a mode beyond this default
!      should define 'MAX_BITSIZE_MODE_ANY_MODE' to the actual upper limit
!      in 'MACHINE-modes.def'.
  
!  The global variables 'byte_mode' and 'word_mode' contain modes whose
! classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or
! 'BITS_PER_WORD', respectively.  On 32-bit machines, these are 'QImode'
! and 'SImode', respectively.
  
  
  File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
--- 18184,18211 ----
  value must be a constant that can determined very early in the
  compilation process.  The third symbol cannot be overridden.
  
! ‘BITS_PER_UNIT’
       The number of bits in an addressable storage unit (byte).  If you
       do not define this, the default is 8.
  
! ‘MAX_BITSIZE_MODE_ANY_INT’
       The maximum bitsize of any mode that is used in integer math.  This
       should be overridden by the target if it uses large integers as
       containers for larger vectors but otherwise never uses the contents
       to compute integer values.
  
! ‘MAX_BITSIZE_MODE_ANY_MODE’
       The bitsize of the largest mode on the target.  The default value
       is the largest mode size given in the mode definition file, which
       is always correct for targets whose modes have a fixed size.
       Targets that might increase the size of a mode beyond this default
!      should define ‘MAX_BITSIZE_MODE_ANY_MODE’ to the actual upper limit
!      in ‘MACHINE-modes.def’.
  
!  The global variables ‘byte_mode’ and ‘word_mode’ contain modes whose
! classes are ‘MODE_INT’ and whose bitsizes are either ‘BITS_PER_UNIT’ or
! ‘BITS_PER_WORD’, respectively.  On 32-bit machines, these are ‘QImode’
! and ‘SImode’, respectively.
  
  
  File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
*************** File: gccint.info,  Node: Constants,  Ne
*** 18213,18280 ****
  
  The simplest RTL expressions are those that represent constant values.
  
! '(const_int I)'
       This type of expression represents the integer value I.  I is
!      customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)',
!      which is equivalent to 'XWINT (EXP, 0)'.
  
       Constants generated for modes with fewer bits than in
!      'HOST_WIDE_INT' must be sign extended to full width (e.g., with
!      'gen_int_mode').  For constants for modes with more bits than in
!      'HOST_WIDE_INT' the implied high order bits of that constant are
       copies of the top bit.  Note however that values are neither
       inherently signed nor inherently unsigned; where necessary,
       signedness is determined by the rtl operation instead.
  
       There is only one expression object for the integer value zero; it
!      is the value of the variable 'const0_rtx'.  Likewise, the only
!      expression for integer value one is found in 'const1_rtx', the only
!      expression for integer value two is found in 'const2_rtx', and the
       only expression for integer value negative one is found in
!      'constm1_rtx'.  Any attempt to create an expression of code
!      'const_int' and value zero, one, two or negative one will return
!      'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as
       appropriate.
  
       Similarly, there is only one object for the integer whose value is
!      'STORE_FLAG_VALUE'.  It is found in 'const_true_rtx'.  If
!      'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will
!      point to the same object.  If 'STORE_FLAG_VALUE' is -1,
!      'const_true_rtx' and 'constm1_rtx' will point to the same object.
  
! '(const_double:M I0 I1 ...)'
       This represents either a floating-point constant of mode M or (on
!      older ports that do not define 'TARGET_SUPPORTS_WIDE_INT') an
!      integer constant too large to fit into 'HOST_BITS_PER_WIDE_INT'
       bits but small enough to fit within twice that number of bits.  In
!      the latter case, M will be 'VOIDmode'.  For integral values
       constants for modes with more bits than twice the number in
!      'HOST_WIDE_INT' the implied high order bits of that constant are
!      copies of the top bit of 'CONST_DOUBLE_HIGH'.  Note however that
       integral values are neither inherently signed nor inherently
       unsigned; where necessary, signedness is determined by the rtl
       operation instead.
  
!      On more modern ports, 'CONST_DOUBLE' only represents floating point
!      values.  New ports define 'TARGET_SUPPORTS_WIDE_INT' to make this
       designation.
  
!      If M is 'VOIDmode', the bits of the value are stored in I0 and I1.
!      I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1
!      with 'CONST_DOUBLE_HIGH'.
  
       If the constant is floating point (regardless of its precision),
       then the number of integers used to store the value depends on the
!      size of 'REAL_VALUE_TYPE' (*note Floating Point::).  The integers
       represent a floating point number, but not precisely in the target
       machine's or host machine's floating point format.  To convert them
       to the precise bit pattern used by the target machine, use the
!      macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
       Output::).
  
       The host dependency for the number of integers used to store a
       double value makes it problematic for machine descriptions to use
!      expressions of code 'const_double' and therefore a syntactic alias
       has been provided:
  
            (const_double_zero:M)
--- 18215,18282 ----
  
  The simplest RTL expressions are those that represent constant values.
  
! ‘(const_int I)’
       This type of expression represents the integer value I.  I is
!      customarily accessed with the macro ‘INTVAL’ as in ‘INTVAL (EXP)’,
!      which is equivalent to ‘XWINT (EXP, 0)’.
  
       Constants generated for modes with fewer bits than in
!      ‘HOST_WIDE_INT’ must be sign extended to full width (e.g., with
!      ‘gen_int_mode’).  For constants for modes with more bits than in
!      ‘HOST_WIDE_INT’ the implied high order bits of that constant are
       copies of the top bit.  Note however that values are neither
       inherently signed nor inherently unsigned; where necessary,
       signedness is determined by the rtl operation instead.
  
       There is only one expression object for the integer value zero; it
!      is the value of the variable ‘const0_rtx’.  Likewise, the only
!      expression for integer value one is found in ‘const1_rtx’, the only
!      expression for integer value two is found in ‘const2_rtx’, and the
       only expression for integer value negative one is found in
!      ‘constm1_rtx’.  Any attempt to create an expression of code
!      ‘const_int’ and value zero, one, two or negative one will return
!      ‘const0_rtx’, ‘const1_rtx’, ‘const2_rtx’ or ‘constm1_rtx’ as
       appropriate.
  
       Similarly, there is only one object for the integer whose value is
!      ‘STORE_FLAG_VALUE’.  It is found in ‘const_true_rtx’.  If
!      ‘STORE_FLAG_VALUE’ is one, ‘const_true_rtx’ and ‘const1_rtx’ will
!      point to the same object.  If ‘STORE_FLAG_VALUE’ is −1,
!      ‘const_true_rtx’ and ‘constm1_rtx’ will point to the same object.
  
! ‘(const_double:M I0 I1 ...)’
       This represents either a floating-point constant of mode M or (on
!      older ports that do not define ‘TARGET_SUPPORTS_WIDE_INT’) an
!      integer constant too large to fit into ‘HOST_BITS_PER_WIDE_INT’
       bits but small enough to fit within twice that number of bits.  In
!      the latter case, M will be ‘VOIDmode’.  For integral values
       constants for modes with more bits than twice the number in
!      ‘HOST_WIDE_INT’ the implied high order bits of that constant are
!      copies of the top bit of ‘CONST_DOUBLE_HIGH’.  Note however that
       integral values are neither inherently signed nor inherently
       unsigned; where necessary, signedness is determined by the rtl
       operation instead.
  
!      On more modern ports, ‘CONST_DOUBLE’ only represents floating point
!      values.  New ports define ‘TARGET_SUPPORTS_WIDE_INT’ to make this
       designation.
  
!      If M is ‘VOIDmode’, the bits of the value are stored in I0 and I1.
!      I0 is customarily accessed with the macro ‘CONST_DOUBLE_LOW’ and I1
!      with ‘CONST_DOUBLE_HIGH’.
  
       If the constant is floating point (regardless of its precision),
       then the number of integers used to store the value depends on the
!      size of ‘REAL_VALUE_TYPE’ (*note Floating Point::).  The integers
       represent a floating point number, but not precisely in the target
       machine's or host machine's floating point format.  To convert them
       to the precise bit pattern used by the target machine, use the
!      macro ‘REAL_VALUE_TO_TARGET_DOUBLE’ and friends (*note Data
       Output::).
  
       The host dependency for the number of integers used to store a
       double value makes it problematic for machine descriptions to use
!      expressions of code ‘const_double’ and therefore a syntactic alias
       has been provided:
  
            (const_double_zero:M)
*************** The simplest RTL expressions are those t
*** 18286,18339 ****
       for matching the floating-point value zero, possibly the only
       useful one.
  
! '(const_wide_int:M NUNITS ELT0 ...)'
!      This contains an array of 'HOST_WIDE_INT's that is large enough to
       hold any constant that can be represented on the target.  This form
       of rtl is only used on targets that define
!      'TARGET_SUPPORTS_WIDE_INT' to be nonzero and then 'CONST_DOUBLE's
       are only used to hold floating-point values.  If the target leaves
!      'TARGET_SUPPORTS_WIDE_INT' defined as 0, 'CONST_WIDE_INT's are not
!      used and 'CONST_DOUBLE's are as they were before.
  
       The values are stored in a compressed format.  The higher-order 0s
       or -1s are not represented if they are just the logical sign
       extension of the number that is represented.
  
! 'CONST_WIDE_INT_VEC (CODE)'
!      Returns the entire array of 'HOST_WIDE_INT's that are used to store
       the value.  This macro should be rarely used.
  
! 'CONST_WIDE_INT_NUNITS (CODE)'
!      The number of 'HOST_WIDE_INT's used to represent the number.  Note
!      that this generally is smaller than the number of 'HOST_WIDE_INT's
       implied by the mode size.
  
! 'CONST_WIDE_INT_ELT (CODE,I)'
!      Returns the 'i'th element of the array.  Element 0 is contains the
       low order bits of the constant.
  
! '(const_fixed:M ...)'
       Represents a fixed-point constant of mode M.  The operand is a data
!      structure of type 'struct fixed_value' and is accessed with the
!      macro 'CONST_FIXED_VALUE'.  The high part of data is accessed with
!      'CONST_FIXED_VALUE_HIGH'; the low part is accessed with
!      'CONST_FIXED_VALUE_LOW'.
  
! '(const_poly_int:M [C0 C1 ...])'
!      Represents a 'poly_int'-style polynomial integer with coefficients
!      C0, C1, ....  The coefficients are 'wide_int'-based integers rather
!      than rtxes.  'CONST_POLY_INT_COEFFS' gives the values of individual
       coefficients (which is mostly only useful in low-level routines)
!      and 'const_poly_int_value' gives the full 'poly_int' value.
  
! '(const_vector:M [X0 X1 ...])'
       Represents a vector constant.  The values in square brackets are
!      elements of the vector, which are always 'const_int',
!      'const_wide_int', 'const_double' or 'const_fixed' expressions.
  
       Each vector constant V is treated as a specific instance of an
       arbitrary-length sequence that itself contains
!      'CONST_VECTOR_NPATTERNS (V)' interleaved patterns.  Each pattern
       has the form:
  
            { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... }
--- 18288,18341 ----
       for matching the floating-point value zero, possibly the only
       useful one.
  
! ‘(const_wide_int:M NUNITS ELT0 ...)’
!      This contains an array of ‘HOST_WIDE_INT’s that is large enough to
       hold any constant that can be represented on the target.  This form
       of rtl is only used on targets that define
!      ‘TARGET_SUPPORTS_WIDE_INT’ to be nonzero and then ‘CONST_DOUBLE’s
       are only used to hold floating-point values.  If the target leaves
!      ‘TARGET_SUPPORTS_WIDE_INT’ defined as 0, ‘CONST_WIDE_INT’s are not
!      used and ‘CONST_DOUBLE’s are as they were before.
  
       The values are stored in a compressed format.  The higher-order 0s
       or -1s are not represented if they are just the logical sign
       extension of the number that is represented.
  
! ‘CONST_WIDE_INT_VEC (CODE)’
!      Returns the entire array of ‘HOST_WIDE_INT’s that are used to store
       the value.  This macro should be rarely used.
  
! ‘CONST_WIDE_INT_NUNITS (CODE)’
!      The number of ‘HOST_WIDE_INT’s used to represent the number.  Note
!      that this generally is smaller than the number of ‘HOST_WIDE_INT’s
       implied by the mode size.
  
! ‘CONST_WIDE_INT_ELT (CODE,I)’
!      Returns the ‘i’th element of the array.  Element 0 is contains the
       low order bits of the constant.
  
! ‘(const_fixed:M ...)’
       Represents a fixed-point constant of mode M.  The operand is a data
!      structure of type ‘struct fixed_value’ and is accessed with the
!      macro ‘CONST_FIXED_VALUE’.  The high part of data is accessed with
!      ‘CONST_FIXED_VALUE_HIGH’; the low part is accessed with
!      ‘CONST_FIXED_VALUE_LOW’.
  
! ‘(const_poly_int:M [C0 C1 ...])’
!      Represents a ‘poly_int’-style polynomial integer with coefficients
!      C0, C1, ....  The coefficients are ‘wide_int’-based integers rather
!      than rtxes.  ‘CONST_POLY_INT_COEFFS’ gives the values of individual
       coefficients (which is mostly only useful in low-level routines)
!      and ‘const_poly_int_value’ gives the full ‘poly_int’ value.
  
! ‘(const_vector:M [X0 X1 ...])’
       Represents a vector constant.  The values in square brackets are
!      elements of the vector, which are always ‘const_int’,
!      ‘const_wide_int’, ‘const_double’ or ‘const_fixed’ expressions.
  
       Each vector constant V is treated as a specific instance of an
       arbitrary-length sequence that itself contains
!      ‘CONST_VECTOR_NPATTERNS (V)’ interleaved patterns.  Each pattern
       has the form:
  
            { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... }
*************** The simplest RTL expressions are those t
*** 18343,18349 ****
       only the first two elements are needed.  If in addition each BASE1
       is equal to the corresponding BASE0, only the first element in each
       pattern is needed.  The number of determining elements per pattern
!      is given by 'CONST_VECTOR_NELTS_PER_PATTERN (V)'.
  
       For example, the constant:
  
--- 18345,18351 ----
       only the first two elements are needed.  If in addition each BASE1
       is equal to the corresponding BASE0, only the first element in each
       pattern is needed.  The number of determining elements per pattern
!      is given by ‘CONST_VECTOR_NELTS_PER_PATTERN (V)’.
  
       For example, the constant:
  
*************** The simplest RTL expressions are those t
*** 18364,18377 ****
            CONST_VECTOR_NPATTERNS (V) == 2
            CONST_VECTOR_NELTS_PER_PATTERN (V) == 3
  
!      Thus the first 6 elements ('{ 0, 1, 2, 6, 3, 8 }') are enough to
       determine the whole sequence; we refer to them as the "encoded"
       elements.  They are the only elements present in the square
!      brackets for variable-length 'const_vector's (i.e. for
!      'const_vector's whose mode M has a variable number of elements).
       However, as a convenience to code that needs to handle both
!      'const_vector's and 'parallel's, all elements are present in the
!      square brackets for fixed-length 'const_vector's; the encoding
       scheme simply reduces the amount of work involved in processing
       constants that follow a regular pattern.
  
--- 18366,18379 ----
            CONST_VECTOR_NPATTERNS (V) == 2
            CONST_VECTOR_NELTS_PER_PATTERN (V) == 3
  
!      Thus the first 6 elements (‘{ 0, 1, 2, 6, 3, 8 }’) are enough to
       determine the whole sequence; we refer to them as the "encoded"
       elements.  They are the only elements present in the square
!      brackets for variable-length ‘const_vector’s (i.e. for
!      ‘const_vector’s whose mode M has a variable number of elements).
       However, as a convenience to code that needs to handle both
!      ‘const_vector’s and ‘parallel’s, all elements are present in the
!      square brackets for fixed-length ‘const_vector’s; the encoding
       scheme simply reduces the amount of work involved in processing
       constants that follow a regular pattern.
  
*************** The simplest RTL expressions are those t
*** 18382,18461 ****
       patterns or (if both encodings have the same number of patterns)
       the one with the fewest encoded elements.
  
!      'const_vector_encoding_nelts (V)' gives the total number of encoded
       elements in V, which is 6 in the example above.
!      'CONST_VECTOR_ENCODED_ELT (V, I)' accesses the value of encoded
       element I.
  
!      'CONST_VECTOR_DUPLICATE_P (V)' is true if V simply contains
!      repeated instances of 'CONST_VECTOR_NPATTERNS (V)' values.  This is
!      a shorthand for testing 'CONST_VECTOR_NELTS_PER_PATTERN (V) == 1'.
  
!      'CONST_VECTOR_STEPPED_P (V)' is true if at least one pattern in V
       has a nonzero step.  This is a shorthand for testing
!      'CONST_VECTOR_NELTS_PER_PATTERN (V) == 3'.
  
!      'CONST_VECTOR_NUNITS (V)' gives the total number of elements in V;
!      it is a shorthand for getting the number of units in 'GET_MODE
!      (V)'.
  
!      The utility function 'const_vector_elt' gives the value of an
!      arbitrary element as an 'rtx'.  'const_vector_int_elt' gives the
!      same value as a 'wide_int'.
  
! '(const_string STR)'
       Represents a constant string with value STR.  Currently this is
       used only for insn attributes (*note Insn Attributes::) since
       constant strings in C are placed in memory.
  
! '(symbol_ref:MODE SYMBOL)'
       Represents the value of an assembler label for data.  SYMBOL is a
       string that describes the name of the assembler label.  If it
!      starts with a '*', the label is the rest of SYMBOL not including
!      the '*'.  Otherwise, the label is SYMBOL, usually prefixed with
!      '_'.
  
!      The 'symbol_ref' contains a mode, which is usually 'Pmode'.
       Usually that is the only mode for which a symbol is directly valid.
  
! '(label_ref:MODE LABEL)'
       Represents the value of an assembler label for code.  It contains
!      one operand, an expression, which must be a 'code_label' or a
!      'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the
       instruction sequence to identify the place where the label should
       go.
  
       The reason for using a distinct expression type for code label
       references is so that jump optimization can distinguish them.
  
!      The 'label_ref' contains a mode, which is usually 'Pmode'.  Usually
       that is the only mode for which a label is directly valid.
  
! '(const:M EXP)'
       Represents a constant that is the result of an assembly-time
       arithmetic computation.  The operand, EXP, contains only
!      'const_int', 'symbol_ref', 'label_ref' or 'unspec' expressions,
!      combined with 'plus' and 'minus'.  Any such 'unspec's are
       target-specific and typically represent some form of relocation
       operator.  M should be a valid address mode.
  
! '(high:M EXP)'
       Represents the high-order bits of EXP.  The number of bits is
       machine-dependent and is normally the number of bits specified in
       an instruction that initializes the high order bits of a register.
!      It is used with 'lo_sum' to represent the typical two-instruction
       sequence used in RISC machines to reference large immediate values
       and/or link-time constants such as global memory addresses.  In the
!      latter case, M is 'Pmode' and EXP is usually a constant expression
!      involving 'symbol_ref'.
  
!  The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in
! mode MODE.  If mode MODE is of mode class 'MODE_INT', it returns
! 'const0_rtx'.  If mode MODE is of mode class 'MODE_FLOAT', it returns a
! 'CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
! 'CONST_VECTOR' expression in mode MODE.  Similarly, the macro
! 'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
! and similarly for 'CONST2_RTX'.  The 'CONST1_RTX' and 'CONST2_RTX'
  macros are undefined for vector modes.
  
  
--- 18384,18463 ----
       patterns or (if both encodings have the same number of patterns)
       the one with the fewest encoded elements.
  
!      ‘const_vector_encoding_nelts (V)’ gives the total number of encoded
       elements in V, which is 6 in the example above.
!      ‘CONST_VECTOR_ENCODED_ELT (V, I)’ accesses the value of encoded
       element I.
  
!      ‘CONST_VECTOR_DUPLICATE_P (V)’ is true if V simply contains
!      repeated instances of ‘CONST_VECTOR_NPATTERNS (V)’ values.  This is
!      a shorthand for testing ‘CONST_VECTOR_NELTS_PER_PATTERN (V) == 1’.
  
!      ‘CONST_VECTOR_STEPPED_P (V)’ is true if at least one pattern in V
       has a nonzero step.  This is a shorthand for testing
!      ‘CONST_VECTOR_NELTS_PER_PATTERN (V) == 3’.
  
!      ‘CONST_VECTOR_NUNITS (V)’ gives the total number of elements in V;
!      it is a shorthand for getting the number of units in ‘GET_MODE
!      (V)’.
  
!      The utility function ‘const_vector_elt’ gives the value of an
!      arbitrary element as an ‘rtx’.  ‘const_vector_int_elt’ gives the
!      same value as a ‘wide_int’.
  
! ‘(const_string STR)’
       Represents a constant string with value STR.  Currently this is
       used only for insn attributes (*note Insn Attributes::) since
       constant strings in C are placed in memory.
  
! ‘(symbol_ref:MODE SYMBOL)’
       Represents the value of an assembler label for data.  SYMBOL is a
       string that describes the name of the assembler label.  If it
!      starts with a ‘*’, the label is the rest of SYMBOL not including
!      the ‘*’.  Otherwise, the label is SYMBOL, usually prefixed with
!      ‘_’.
  
!      The ‘symbol_ref’ contains a mode, which is usually ‘Pmode’.
       Usually that is the only mode for which a symbol is directly valid.
  
! ‘(label_ref:MODE LABEL)’
       Represents the value of an assembler label for code.  It contains
!      one operand, an expression, which must be a ‘code_label’ or a
!      ‘note’ of type ‘NOTE_INSN_DELETED_LABEL’ that appears in the
       instruction sequence to identify the place where the label should
       go.
  
       The reason for using a distinct expression type for code label
       references is so that jump optimization can distinguish them.
  
!      The ‘label_ref’ contains a mode, which is usually ‘Pmode’.  Usually
       that is the only mode for which a label is directly valid.
  
! ‘(const:M EXP)’
       Represents a constant that is the result of an assembly-time
       arithmetic computation.  The operand, EXP, contains only
!      ‘const_int’, ‘symbol_ref’, ‘label_ref’ or ‘unspec’ expressions,
!      combined with ‘plus’ and ‘minus’.  Any such ‘unspec’s are
       target-specific and typically represent some form of relocation
       operator.  M should be a valid address mode.
  
! ‘(high:M EXP)’
       Represents the high-order bits of EXP.  The number of bits is
       machine-dependent and is normally the number of bits specified in
       an instruction that initializes the high order bits of a register.
!      It is used with ‘lo_sum’ to represent the typical two-instruction
       sequence used in RISC machines to reference large immediate values
       and/or link-time constants such as global memory addresses.  In the
!      latter case, M is ‘Pmode’ and EXP is usually a constant expression
!      involving ‘symbol_ref’.
  
!  The macro ‘CONST0_RTX (MODE)’ refers to an expression with value 0 in
! mode MODE.  If mode MODE is of mode class ‘MODE_INT’, it returns
! ‘const0_rtx’.  If mode MODE is of mode class ‘MODE_FLOAT’, it returns a
! ‘CONST_DOUBLE’ expression in mode MODE.  Otherwise, it returns a
! ‘CONST_VECTOR’ expression in mode MODE.  Similarly, the macro
! ‘CONST1_RTX (MODE)’ refers to an expression with value 1 in mode MODE
! and similarly for ‘CONST2_RTX’.  The ‘CONST1_RTX’ and ‘CONST2_RTX’
  macros are undefined for vector modes.
  
  
*************** File: gccint.info,  Node: Regs and Memor
*** 18467,18477 ****
  Here are the RTL expression types for describing access to machine
  registers and to main memory.
  
! '(reg:M N)'
       For small values of the integer N (those that are less than
!      'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
!      register number N: a "hard register".  For larger values of N, it
!      stands for a temporary value or "pseudo register".  The compiler's
       strategy is to generate code assuming an unlimited number of such
       pseudo registers, and later convert them into hard registers or
       into memory references.
--- 18469,18479 ----
  Here are the RTL expression types for describing access to machine
  registers and to main memory.
  
! ‘(reg:M N)’
       For small values of the integer N (those that are less than
!      ‘FIRST_PSEUDO_REGISTER’), this stands for a reference to machine
!      register number N: a “hard register”.  For larger values of N, it
!      stands for a temporary value or “pseudo register”.  The compiler's
       strategy is to generate code assuming an unlimited number of such
       pseudo registers, and later convert them into hard registers or
       into memory references.
*************** registers and to main memory.
*** 18486,18492 ****
       Even for a register that the machine can access in only one mode,
       the mode must always be specified.
  
!      The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine
       description, since the number of hard registers on the machine is
       an invariant characteristic of the machine.  Note, however, that
       not all of the machine registers must be general registers.  All
--- 18488,18494 ----
       Even for a register that the machine can access in only one mode,
       the mode must always be specified.
  
!      The symbol ‘FIRST_PSEUDO_REGISTER’ is defined by the machine
       description, since the number of hard registers on the machine is
       an invariant characteristic of the machine.  Note, however, that
       not all of the machine registers must be general registers.  All
*************** registers and to main memory.
*** 18497,18523 ****
       A hard register may be accessed in various modes throughout one
       function, but each pseudo register is given a natural mode and is
       accessed only in that mode.  When it is necessary to describe an
!      access to a pseudo register using a nonnatural mode, a 'subreg'
       expression is used.
  
!      A 'reg' expression with a machine mode that specifies more than one
       word of data may actually stand for several consecutive registers.
       If in addition the register number specifies a hardware register,
       then it actually represents several consecutive hardware registers
       starting with the specified one.
  
       Each pseudo register number used in a function's RTL code is
!      represented by a unique 'reg' expression.
  
       Some pseudo register numbers, those within the range of
!      'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear
       during the RTL generation phase and are eliminated before the
       optimization phases.  These represent locations in the stack frame
       that cannot be determined until RTL generation for the function has
       been completed.  The following virtual register numbers are
       defined:
  
!      'VIRTUAL_INCOMING_ARGS_REGNUM'
            This points to the first word of the incoming arguments passed
            on the stack.  Normally these arguments are placed there by
            the caller, but the callee may have pushed some arguments that
--- 18499,18525 ----
       A hard register may be accessed in various modes throughout one
       function, but each pseudo register is given a natural mode and is
       accessed only in that mode.  When it is necessary to describe an
!      access to a pseudo register using a nonnatural mode, a ‘subreg’
       expression is used.
  
!      A ‘reg’ expression with a machine mode that specifies more than one
       word of data may actually stand for several consecutive registers.
       If in addition the register number specifies a hardware register,
       then it actually represents several consecutive hardware registers
       starting with the specified one.
  
       Each pseudo register number used in a function's RTL code is
!      represented by a unique ‘reg’ expression.
  
       Some pseudo register numbers, those within the range of
!      ‘FIRST_VIRTUAL_REGISTER’ to ‘LAST_VIRTUAL_REGISTER’ only appear
       during the RTL generation phase and are eliminated before the
       optimization phases.  These represent locations in the stack frame
       that cannot be determined until RTL generation for the function has
       been completed.  The following virtual register numbers are
       defined:
  
!      ‘VIRTUAL_INCOMING_ARGS_REGNUM’
            This points to the first word of the incoming arguments passed
            on the stack.  Normally these arguments are placed there by
            the caller, but the callee may have pushed some arguments that
*************** registers and to main memory.
*** 18525,18638 ****
  
            When RTL generation is complete, this virtual register is
            replaced by the sum of the register given by
!           'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'.
  
!      'VIRTUAL_STACK_VARS_REGNUM'
!           If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
            points to immediately above the first variable on the stack.
            Otherwise, it points to the first variable on the stack.
  
!           'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
!           register given by 'FRAME_POINTER_REGNUM' and the value
!           'TARGET_STARTING_FRAME_OFFSET'.
  
!      'VIRTUAL_STACK_DYNAMIC_REGNUM'
            This points to the location of dynamically allocated memory on
            the stack immediately after the stack pointer has been
            adjusted by the amount of memory desired.
  
            This virtual register is replaced by the sum of the register
!           given by 'STACK_POINTER_REGNUM' and the value
!           'STACK_DYNAMIC_OFFSET'.
  
!      'VIRTUAL_OUTGOING_ARGS_REGNUM'
            This points to the location in the stack at which outgoing
            arguments should be written when the stack is pre-pushed
            (arguments pushed using push insns should always use
!           'STACK_POINTER_REGNUM').
  
            This virtual register is replaced by the sum of the register
!           given by 'STACK_POINTER_REGNUM' and the value
!           'STACK_POINTER_OFFSET'.
  
! '(subreg:M1 REG:M2 BYTENUM)'
  
!      'subreg' expressions are used to refer to a register in a machine
       mode other than its natural one, or to refer to one register of a
!      multi-part 'reg' that actually refers to several registers.
  
       Each pseudo register has a natural mode.  If it is necessary to
       operate on it in a different mode, the register must be enclosed in
!      a 'subreg'.
  
       There are currently three supported types for the first operand of
!      a 'subreg':
!         * pseudo registers This is the most common case.  Most 'subreg's
!           have pseudo 'reg's as their first operand.
  
!         * mem 'subreg's of 'mem' were common in earlier versions of GCC
            and are still supported.  During the reload pass these are
!           replaced by plain 'mem's.  On machines that do not do
!           instruction scheduling, use of 'subreg's of 'mem' are still
!           used, but this is no longer recommended.  Such 'subreg's are
!           considered to be 'register_operand's rather than
!           'memory_operand's before and during reload.  Because of this,
            the scheduling passes cannot properly schedule instructions
!           with 'subreg's of 'mem', so for machines that do scheduling,
!           'subreg's of 'mem' should never be used.  To support this, the
            combine and recog passes have explicit code to inhibit the
!           creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is
            defined.
  
!           The use of 'subreg's of 'mem' after the reload pass is an area
            that is not well understood and should be avoided.  There is
            still some code in the compiler to support this, but this code
!           has possibly rotted.  This use of 'subreg's is discouraged and
            will most likely not be supported in the future.
  
!         * hard registers It is seldom necessary to wrap hard registers
!           in 'subreg's; such registers would normally reduce to a single
!           'reg' rtx.  This use of 'subreg's is discouraged and may not
            be supported in the future.
  
!      'subreg's of 'subreg's are not supported.  Using
!      'simplify_gen_subreg' is the recommended way to avoid this problem.
  
!      'subreg's come in two distinct flavors, each having its own usage
       and rules:
  
       Paradoxical subregs
!           When M1 is strictly wider than M2, the 'subreg' expression is
!           called "paradoxical".  The canonical test for this class of
!           'subreg' is:
  
                 paradoxical_subreg_p (M1, M2)
  
!           Paradoxical 'subreg's can be used as both lvalues and rvalues.
            When used as an lvalue, the low-order bits of the source value
            are stored in REG and the high-order bits are discarded.  When
!           used as an rvalue, the low-order bits of the 'subreg' are
            taken from REG while the high-order bits may or may not be
            defined.
  
            The high-order bits of rvalues are defined in the following
            circumstances:
  
!              * 'subreg's of 'mem' When M2 is smaller than a word, the
!                macro 'LOAD_EXTEND_OP', can control how the high-order
                 bits are defined.
  
!              * 'subreg' of 'reg's The upper bits are defined when
!                'SUBREG_PROMOTED_VAR_P' is true.
!                'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
                 bits hold.  Such subregs usually represent local
                 variables, register variables and parameter pseudo
                 variables that have been promoted to a wider mode.
  
!           BYTENUM is always zero for a paradoxical 'subreg', even on
            big-endian targets.
  
!           For example, the paradoxical 'subreg':
  
                 (set (subreg:SI (reg:HI X) 0) Y)
  
--- 18527,18640 ----
  
            When RTL generation is complete, this virtual register is
            replaced by the sum of the register given by
!           ‘ARG_POINTER_REGNUM’ and the value of ‘FIRST_PARM_OFFSET’.
  
!      ‘VIRTUAL_STACK_VARS_REGNUM’
!           If ‘FRAME_GROWS_DOWNWARD’ is defined to a nonzero value, this
            points to immediately above the first variable on the stack.
            Otherwise, it points to the first variable on the stack.
  
!           ‘VIRTUAL_STACK_VARS_REGNUM’ is replaced with the sum of the
!           register given by ‘FRAME_POINTER_REGNUM’ and the value
!           ‘TARGET_STARTING_FRAME_OFFSET’.
  
!      ‘VIRTUAL_STACK_DYNAMIC_REGNUM’
            This points to the location of dynamically allocated memory on
            the stack immediately after the stack pointer has been
            adjusted by the amount of memory desired.
  
            This virtual register is replaced by the sum of the register
!           given by ‘STACK_POINTER_REGNUM’ and the value
!           ‘STACK_DYNAMIC_OFFSET’.
  
!      ‘VIRTUAL_OUTGOING_ARGS_REGNUM’
            This points to the location in the stack at which outgoing
            arguments should be written when the stack is pre-pushed
            (arguments pushed using push insns should always use
!           ‘STACK_POINTER_REGNUM’).
  
            This virtual register is replaced by the sum of the register
!           given by ‘STACK_POINTER_REGNUM’ and the value
!           ‘STACK_POINTER_OFFSET’.
  
! ‘(subreg:M1 REG:M2 BYTENUM)’
  
!      ‘subreg’ expressions are used to refer to a register in a machine
       mode other than its natural one, or to refer to one register of a
!      multi-part ‘reg’ that actually refers to several registers.
  
       Each pseudo register has a natural mode.  If it is necessary to
       operate on it in a different mode, the register must be enclosed in
!      a ‘subreg’.
  
       There are currently three supported types for the first operand of
!      a ‘subreg’:
!         • pseudo registers This is the most common case.  Most ‘subreg’s
!           have pseudo ‘reg’s as their first operand.
  
!         • mem ‘subreg’s of ‘mem’ were common in earlier versions of GCC
            and are still supported.  During the reload pass these are
!           replaced by plain ‘mem’s.  On machines that do not do
!           instruction scheduling, use of ‘subreg’s of ‘mem’ are still
!           used, but this is no longer recommended.  Such ‘subreg’s are
!           considered to be ‘register_operand’s rather than
!           ‘memory_operand’s before and during reload.  Because of this,
            the scheduling passes cannot properly schedule instructions
!           with ‘subreg’s of ‘mem’, so for machines that do scheduling,
!           ‘subreg’s of ‘mem’ should never be used.  To support this, the
            combine and recog passes have explicit code to inhibit the
!           creation of ‘subreg’s of ‘mem’ when ‘INSN_SCHEDULING’ is
            defined.
  
!           The use of ‘subreg’s of ‘mem’ after the reload pass is an area
            that is not well understood and should be avoided.  There is
            still some code in the compiler to support this, but this code
!           has possibly rotted.  This use of ‘subreg’s is discouraged and
            will most likely not be supported in the future.
  
!         • hard registers It is seldom necessary to wrap hard registers
!           in ‘subreg’s; such registers would normally reduce to a single
!           ‘reg’ rtx.  This use of ‘subreg’s is discouraged and may not
            be supported in the future.
  
!      ‘subreg’s of ‘subreg’s are not supported.  Using
!      ‘simplify_gen_subreg’ is the recommended way to avoid this problem.
  
!      ‘subreg’s come in two distinct flavors, each having its own usage
       and rules:
  
       Paradoxical subregs
!           When M1 is strictly wider than M2, the ‘subreg’ expression is
!           called “paradoxical”.  The canonical test for this class of
!           ‘subreg’ is:
  
                 paradoxical_subreg_p (M1, M2)
  
!           Paradoxical ‘subreg’s can be used as both lvalues and rvalues.
            When used as an lvalue, the low-order bits of the source value
            are stored in REG and the high-order bits are discarded.  When
!           used as an rvalue, the low-order bits of the ‘subreg’ are
            taken from REG while the high-order bits may or may not be
            defined.
  
            The high-order bits of rvalues are defined in the following
            circumstances:
  
!              • ‘subreg’s of ‘mem’ When M2 is smaller than a word, the
!                macro ‘LOAD_EXTEND_OP’, can control how the high-order
                 bits are defined.
  
!              • ‘subreg’ of ‘reg’s The upper bits are defined when
!                ‘SUBREG_PROMOTED_VAR_P’ is true.
!                ‘SUBREG_PROMOTED_UNSIGNED_P’ describes what the upper
                 bits hold.  Such subregs usually represent local
                 variables, register variables and parameter pseudo
                 variables that have been promoted to a wider mode.
  
!           BYTENUM is always zero for a paradoxical ‘subreg’, even on
            big-endian targets.
  
!           For example, the paradoxical ‘subreg’:
  
                 (set (subreg:SI (reg:HI X) 0) Y)
  
*************** registers and to main memory.
*** 18642,18716 ****
                 (set Z (subreg:SI (reg:HI X) 0))
  
            would set the lower two bytes of Z to Y and set the upper two
!           bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is
            false.
  
       Normal subregs
!           When M1 is at least as narrow as M2 the 'subreg' expression is
!           called "normal".
  
!           Normal 'subreg's restrict consideration to certain bits of
            REG.  For this purpose, REG is divided into
            individually-addressable blocks in which each block has:
  
                 REGMODE_NATURAL_SIZE (M2)
  
!           bytes.  Usually the value is 'UNITS_PER_WORD'; that is, most
            targets usually treat each word of a register as being
            independently addressable.
  
!           There are two types of normal 'subreg'.  If M1 is known to be
!           no bigger than a block, the 'subreg' refers to the
!           least-significant part (or "lowpart") of one block of REG.  If
!           M1 is known to be larger than a block, the 'subreg' refers to
            two or more complete blocks.
  
!           When used as an lvalue, 'subreg' is a block-based accessor.
!           Storing to a 'subreg' modifies all the blocks of REG that
!           overlap the 'subreg', but it leaves the other blocks of REG
            alone.
  
!           When storing to a normal 'subreg' that is smaller than a
            block, the other bits of the referenced block are usually left
            in an undefined state.  This laxity makes it easier to
            generate efficient code for such instructions.  To represent
            an instruction that preserves all the bits outside of those in
!           the 'subreg', use 'strict_low_part' or 'zero_extract' around
!           the 'subreg'.
  
            BYTENUM must identify the offset of the first byte of the
!           'subreg' from the start of REG, assuming that REG is laid out
            in memory order.  The memory order of bytes is defined by two
!           target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN':
  
!              * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number
                 zero is part of the most significant word; otherwise, it
                 is part of the least significant word.
  
!              * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number
                 zero is the most significant byte within a word;
                 otherwise, it is the least significant byte within a
                 word.
  
!           On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with
!           'WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
            floating point values as if they had the same endianness as
            integer values.  This works because they handle them solely as
            a collection of integer values, with no particular numerical
            value.  Only real.cc and the runtime libraries care about
!           'FLOAT_WORDS_BIG_ENDIAN'.
  
            Thus,
  
                 (subreg:HI (reg:SI X) 2)
  
!           on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the
            same as
  
                 (subreg:HI (reg:SI X) 0)
  
!           on a little-endian, 'UNITS_PER_WORD == 4' target.  Both
!           'subreg's access the lower two bytes of register X.
  
            Note that the byte offset is a polynomial integer; it may not
            be a compile-time constant on targets with variable-sized
--- 18644,18718 ----
                 (set Z (subreg:SI (reg:HI X) 0))
  
            would set the lower two bytes of Z to Y and set the upper two
!           bytes to an unknown value assuming ‘SUBREG_PROMOTED_VAR_P’ is
            false.
  
       Normal subregs
!           When M1 is at least as narrow as M2 the ‘subreg’ expression is
!           called “normal”.
  
!           Normal ‘subreg’s restrict consideration to certain bits of
            REG.  For this purpose, REG is divided into
            individually-addressable blocks in which each block has:
  
                 REGMODE_NATURAL_SIZE (M2)
  
!           bytes.  Usually the value is ‘UNITS_PER_WORD’; that is, most
            targets usually treat each word of a register as being
            independently addressable.
  
!           There are two types of normal ‘subreg’.  If M1 is known to be
!           no bigger than a block, the ‘subreg’ refers to the
!           least-significant part (or “lowpart”) of one block of REG.  If
!           M1 is known to be larger than a block, the ‘subreg’ refers to
            two or more complete blocks.
  
!           When used as an lvalue, ‘subreg’ is a block-based accessor.
!           Storing to a ‘subreg’ modifies all the blocks of REG that
!           overlap the ‘subreg’, but it leaves the other blocks of REG
            alone.
  
!           When storing to a normal ‘subreg’ that is smaller than a
            block, the other bits of the referenced block are usually left
            in an undefined state.  This laxity makes it easier to
            generate efficient code for such instructions.  To represent
            an instruction that preserves all the bits outside of those in
!           the ‘subreg’, use ‘strict_low_part’ or ‘zero_extract’ around
!           the ‘subreg’.
  
            BYTENUM must identify the offset of the first byte of the
!           ‘subreg’ from the start of REG, assuming that REG is laid out
            in memory order.  The memory order of bytes is defined by two
!           target macros, ‘WORDS_BIG_ENDIAN’ and ‘BYTES_BIG_ENDIAN’:
  
!              • ‘WORDS_BIG_ENDIAN’, if set to 1, says that byte number
                 zero is part of the most significant word; otherwise, it
                 is part of the least significant word.
  
!              • ‘BYTES_BIG_ENDIAN’, if set to 1, says that byte number
                 zero is the most significant byte within a word;
                 otherwise, it is the least significant byte within a
                 word.
  
!           On a few targets, ‘FLOAT_WORDS_BIG_ENDIAN’ disagrees with
!           ‘WORDS_BIG_ENDIAN’.  However, most parts of the compiler treat
            floating point values as if they had the same endianness as
            integer values.  This works because they handle them solely as
            a collection of integer values, with no particular numerical
            value.  Only real.cc and the runtime libraries care about
!           ‘FLOAT_WORDS_BIG_ENDIAN’.
  
            Thus,
  
                 (subreg:HI (reg:SI X) 2)
  
!           on a ‘BYTES_BIG_ENDIAN’, ‘UNITS_PER_WORD == 4’ target is the
            same as
  
                 (subreg:HI (reg:SI X) 0)
  
!           on a little-endian, ‘UNITS_PER_WORD == 4’ target.  Both
!           ‘subreg’s access the lower two bytes of register X.
  
            Note that the byte offset is a polynomial integer; it may not
            be a compile-time constant on targets with variable-sized
*************** registers and to main memory.
*** 18720,18761 ****
            blocks a valid subreg occupies, and whether the subreg is a
            lowpart of a block.
  
!      A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the
!      corresponding 'MODE_INT' mode, except that it has a number of
       undefined bits, which are determined by the precision of the mode.
  
!      For example, on a little-endian target which defines 'PSImode' to
       have a precision of 20 bits:
  
            (subreg:PSI (reg:SI 0) 0)
  
!      accesses the low 20 bits of '(reg:SI 0)'.
  
!      Continuing with a 'PSImode' precision of 20 bits, if we assume
!      'REGMODE_NATURAL_SIZE (DImode) <= 4', then the following two
!      'subreg's:
  
            (subreg:PSI (reg:DI 0) 0)
            (subreg:PSI (reg:DI 0) 4)
  
!      represent accesses to the low 20 bits of the two halves of '(reg:DI
!      0)'.
  
!      If 'REGMODE_NATURAL_SIZE (PSImode) <= 2' then these two 'subreg's:
  
            (subreg:HI (reg:PSI 0) 0)
            (subreg:HI (reg:PSI 0) 2)
  
       represent independent 2-byte accesses that together span the whole
!      of '(reg:PSI 0)'.  Storing to the first 'subreg' does not affect
       the value of the second, and vice versa, so the assignment:
  
            (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
  
!      sets the low 16 bits of '(reg:PSI 0)' to '(reg:HI 4)', and the high
!      4 defined bits of '(reg:PSI 0)' retain their original value.  The
!      behavior here is the same as for normal 'subreg's, when there are
!      no 'MODE_PARTIAL_INT' modes involved.
  
       The rules above apply to both pseudo REGs and hard REGs.  If the
       semantics are not correct for particular combinations of M1, M2 and
--- 18722,18763 ----
            blocks a valid subreg occupies, and whether the subreg is a
            lowpart of a block.
  
!      A ‘MODE_PARTIAL_INT’ mode behaves as if it were as wide as the
!      corresponding ‘MODE_INT’ mode, except that it has a number of
       undefined bits, which are determined by the precision of the mode.
  
!      For example, on a little-endian target which defines ‘PSImode’ to
       have a precision of 20 bits:
  
            (subreg:PSI (reg:SI 0) 0)
  
!      accesses the low 20 bits of ‘(reg:SI 0)’.
  
!      Continuing with a ‘PSImode’ precision of 20 bits, if we assume
!      ‘REGMODE_NATURAL_SIZE (DImode) <= 4’, then the following two
!      ‘subreg’s:
  
            (subreg:PSI (reg:DI 0) 0)
            (subreg:PSI (reg:DI 0) 4)
  
!      represent accesses to the low 20 bits of the two halves of ‘(reg:DI
!      0)’.
  
!      If ‘REGMODE_NATURAL_SIZE (PSImode) <= 2’ then these two ‘subreg’s:
  
            (subreg:HI (reg:PSI 0) 0)
            (subreg:HI (reg:PSI 0) 2)
  
       represent independent 2-byte accesses that together span the whole
!      of ‘(reg:PSI 0)’.  Storing to the first ‘subreg’ does not affect
       the value of the second, and vice versa, so the assignment:
  
            (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
  
!      sets the low 16 bits of ‘(reg:PSI 0)’ to ‘(reg:HI 4)’, and the high
!      4 defined bits of ‘(reg:PSI 0)’ retain their original value.  The
!      behavior here is the same as for normal ‘subreg’s, when there are
!      no ‘MODE_PARTIAL_INT’ modes involved.
  
       The rules above apply to both pseudo REGs and hard REGs.  If the
       semantics are not correct for particular combinations of M1, M2 and
*************** registers and to main memory.
*** 18770,18799 ****
       paradoxical, whether it occupies a whole number of blocks, or
       whether it is a lowpart of a block.  This means that certain
       combinations of variable-sized mode are not permitted.  For
!      example, if M2 holds N 'SI' values, where N is greater than zero,
!      it is not possible to form a 'DI' 'subreg' of it; such a 'subreg'
       would be paradoxical when N is 1 but not when N is greater than 1.
  
!      The first operand of a 'subreg' expression is customarily accessed
!      with the 'SUBREG_REG' macro and the second operand is customarily
!      accessed with the 'SUBREG_BYTE' macro.
  
       It has been several years since a platform in which
!      'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested.
       Anyone wishing to support such a platform in the future may be
       confronted with code rot.
  
! '(scratch:M)'
       This represents a scratch register that will be required for the
       execution of a single instruction and not used subsequently.  It is
!      converted into a 'reg' by either the local register allocator or
       the reload pass.
  
!      'scratch' is usually present inside a 'clobber' operation (*note
       Side Effects::).
  
       On some machines, the condition code register is given a register
!      number and a 'reg' is used.  Other machines store condition codes
       in general registers; in such cases a pseudo register should be
       used.
  
--- 18772,18801 ----
       paradoxical, whether it occupies a whole number of blocks, or
       whether it is a lowpart of a block.  This means that certain
       combinations of variable-sized mode are not permitted.  For
!      example, if M2 holds N ‘SI’ values, where N is greater than zero,
!      it is not possible to form a ‘DI’ ‘subreg’ of it; such a ‘subreg’
       would be paradoxical when N is 1 but not when N is greater than 1.
  
!      The first operand of a ‘subreg’ expression is customarily accessed
!      with the ‘SUBREG_REG’ macro and the second operand is customarily
!      accessed with the ‘SUBREG_BYTE’ macro.
  
       It has been several years since a platform in which
!      ‘BYTES_BIG_ENDIAN’ not equal to ‘WORDS_BIG_ENDIAN’ has been tested.
       Anyone wishing to support such a platform in the future may be
       confronted with code rot.
  
! ‘(scratch:M)’
       This represents a scratch register that will be required for the
       execution of a single instruction and not used subsequently.  It is
!      converted into a ‘reg’ by either the local register allocator or
       the reload pass.
  
!      ‘scratch’ is usually present inside a ‘clobber’ operation (*note
       Side Effects::).
  
       On some machines, the condition code register is given a register
!      number and a ‘reg’ is used.  Other machines store condition codes
       in general registers; in such cases a pseudo register should be
       used.
  
*************** registers and to main memory.
*** 18802,18843 ****
       the condition code.  This is best handled by normally generating
       the instruction that does not set the condition code, and making a
       pattern that both performs the arithmetic and sets the condition
!      code register.  For examples, search for 'addcc' and 'andcc' in
!      'sparc.md'.
  
! '(pc)'
       This represents the machine's program counter.  It has no operands
!      and may not have a machine mode.  '(pc)' may be validly used only
       in certain specific contexts in jump instructions.
  
!      There is only one expression object of code 'pc'; it is the value
!      of the variable 'pc_rtx'.  Any attempt to create an expression of
!      code 'pc' will return 'pc_rtx'.
  
       All instructions that do not jump alter the program counter
       implicitly by incrementing it, but there is no need to mention this
       in the RTL.
  
! '(mem:M ADDR ALIAS)'
       This RTX represents a reference to main memory at an address
       represented by the expression ADDR.  M specifies how large a unit
       of memory is accessed.  ALIAS specifies an alias set for the
       reference.  In general two items are in different alias sets if
       they cannot reference the same memory address.
  
!      The construct '(mem:BLK (scratch))' is considered to alias all
       other memories.  Thus it may be used as a memory barrier in
       epilogue stack deallocation patterns.
  
! '(concatM RTX RTX)'
       This RTX represents the concatenation of two other RTXs.  This is
       used for complex values.  It should only appear in the RTL attached
       to declarations and during RTL generation.  It should not appear in
       the ordinary insn chain.
  
! '(concatnM [RTX ...])'
       This RTX represents the concatenation of all the RTX to make a
!      single value.  Like 'concat', this should only appear in
       declarations, and not in the insn chain.
  
  
--- 18804,18845 ----
       the condition code.  This is best handled by normally generating
       the instruction that does not set the condition code, and making a
       pattern that both performs the arithmetic and sets the condition
!      code register.  For examples, search for ‘addcc’ and ‘andcc’ in
!      ‘sparc.md’.
  
! ‘(pc)’
       This represents the machine's program counter.  It has no operands
!      and may not have a machine mode.  ‘(pc)’ may be validly used only
       in certain specific contexts in jump instructions.
  
!      There is only one expression object of code ‘pc’; it is the value
!      of the variable ‘pc_rtx’.  Any attempt to create an expression of
!      code ‘pc’ will return ‘pc_rtx’.
  
       All instructions that do not jump alter the program counter
       implicitly by incrementing it, but there is no need to mention this
       in the RTL.
  
! ‘(mem:M ADDR ALIAS)’
       This RTX represents a reference to main memory at an address
       represented by the expression ADDR.  M specifies how large a unit
       of memory is accessed.  ALIAS specifies an alias set for the
       reference.  In general two items are in different alias sets if
       they cannot reference the same memory address.
  
!      The construct ‘(mem:BLK (scratch))’ is considered to alias all
       other memories.  Thus it may be used as a memory barrier in
       epilogue stack deallocation patterns.
  
! ‘(concatM RTX RTX)’
       This RTX represents the concatenation of two other RTXs.  This is
       used for complex values.  It should only appear in the RTL attached
       to declarations and during RTL generation.  It should not appear in
       the ordinary insn chain.
  
! ‘(concatnM [RTX ...])’
       This RTX represents the concatenation of all the RTX to make a
!      single value.  Like ‘concat’, this should only appear in
       declarations, and not in the insn chain.
  
  
*************** File: gccint.info,  Node: Arithmetic,  N
*** 18848,18892 ****
  
  Unless otherwise specified, all the operands of arithmetic expressions
  must be valid for mode M.  An operand is valid for mode M if it has mode
! M, or if it is a 'const_int' or 'const_double' and M is a mode of class
! 'MODE_INT'.
  
   For commutative binary operations, constants should be placed in the
  second operand.
  
! '(plus:M X Y)'
! '(ss_plus:M X Y)'
! '(us_plus:M X Y)'
  
       These three expressions all represent the sum of the values
       represented by X and Y carried out in machine mode M.  They differ
!      in their behavior on overflow of integer modes.  'plus' wraps round
!      modulo the width of M; 'ss_plus' saturates at the maximum signed
!      value representable in M; 'us_plus' saturates at the maximum
       unsigned value.
  
! '(lo_sum:M X Y)'
  
       This expression represents the sum of X and the low-order bits of
!      Y.  It is used with 'high' (*note Constants::) to represent the
       typical two-instruction sequence used in RISC machines to reference
       large immediate values and/or link-time constants such as global
!      memory addresses.  In the latter case, M is 'Pmode' and Y is
!      usually a constant expression involving 'symbol_ref'.
  
       The number of low order bits is machine-dependent but is normally
       the number of bits in mode M minus the number of bits set by
!      'high'.
  
! '(minus:M X Y)'
! '(ss_minus:M X Y)'
! '(us_minus:M X Y)'
  
       These three expressions represent the result of subtracting Y from
       X, carried out in mode M.  Behavior on overflow is the same as for
!      the three variants of 'plus' (see above).
  
! '(compare:M X Y)'
       Represents the result of subtracting Y from X for purposes of
       comparison.  The result is computed without overflow, as if with
       infinite precision.
--- 18850,18894 ----
  
  Unless otherwise specified, all the operands of arithmetic expressions
  must be valid for mode M.  An operand is valid for mode M if it has mode
! M, or if it is a ‘const_int’ or ‘const_double’ and M is a mode of class
! ‘MODE_INT’.
  
   For commutative binary operations, constants should be placed in the
  second operand.
  
! ‘(plus:M X Y)’
! ‘(ss_plus:M X Y)’
! ‘(us_plus:M X Y)’
  
       These three expressions all represent the sum of the values
       represented by X and Y carried out in machine mode M.  They differ
!      in their behavior on overflow of integer modes.  ‘plus’ wraps round
!      modulo the width of M; ‘ss_plus’ saturates at the maximum signed
!      value representable in M; ‘us_plus’ saturates at the maximum
       unsigned value.
  
! ‘(lo_sum:M X Y)’
  
       This expression represents the sum of X and the low-order bits of
!      Y.  It is used with ‘high’ (*note Constants::) to represent the
       typical two-instruction sequence used in RISC machines to reference
       large immediate values and/or link-time constants such as global
!      memory addresses.  In the latter case, M is ‘Pmode’ and Y is
!      usually a constant expression involving ‘symbol_ref’.
  
       The number of low order bits is machine-dependent but is normally
       the number of bits in mode M minus the number of bits set by
!      ‘high’.
  
! ‘(minus:M X Y)’
! ‘(ss_minus:M X Y)’
! ‘(us_minus:M X Y)’
  
       These three expressions represent the result of subtracting Y from
       X, carried out in mode M.  Behavior on overflow is the same as for
!      the three variants of ‘plus’ (see above).
  
! ‘(compare:M X Y)’
       Represents the result of subtracting Y from X for purposes of
       comparison.  The result is computed without overflow, as if with
       infinite precision.
*************** second operand.
*** 18900,18942 ****
  
       The mode M is not related to the modes of X and Y, but instead is
       the mode of the condition code value.  It is some mode in class
!      'MODE_CC', often 'CCmode'.  *Note Condition Code::.  If M is
!      'CCmode', the operation returns sufficient information (in an
       unspecified format) so that any comparison operator can be applied
!      to the result of the 'COMPARE' operation.  For other modes in class
!      'MODE_CC', the operation only returns a subset of this information.
  
!      Normally, X and Y must have the same mode.  Otherwise, 'compare' is
!      valid only if the mode of X is in class 'MODE_INT' and Y is a
!      'const_int' or 'const_double' with mode 'VOIDmode'.  The mode of X
       determines what mode the comparison is to be done in; thus it must
!      not be 'VOIDmode'.
  
       If one of the operands is a constant, it should be placed in the
       second operand and the comparison code adjusted as appropriate.
  
!      A 'compare' specifying two 'VOIDmode' constants is not valid since
       there is no way to know in what mode the comparison is to be
       performed; the comparison must either be folded during the
       compilation or the first operand must be loaded into a register
       while its mode is still known.
  
! '(neg:M X)'
! '(ss_neg:M X)'
! '(us_neg:M X)'
       These two expressions represent the negation (subtraction from
       zero) of the value represented by X, carried out in mode M.  They
       differ in the behavior on overflow of integer modes.  In the case
!      of 'neg', the negation of the operand may be a number not
       representable in mode M, in which case it is truncated to M.
!      'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates
       to the maximum or minimum signed or unsigned value.
  
! '(mult:M X Y)'
! '(ss_mult:M X Y)'
! '(us_mult:M X Y)'
       Represents the signed product of the values represented by X and Y
!      carried out in machine mode M.  'ss_mult' and 'us_mult' ensure that
       an out-of-bounds result saturates to the maximum or minimum signed
       or unsigned value.
  
--- 18902,18944 ----
  
       The mode M is not related to the modes of X and Y, but instead is
       the mode of the condition code value.  It is some mode in class
!      ‘MODE_CC’, often ‘CCmode’.  *Note Condition Code::.  If M is
!      ‘CCmode’, the operation returns sufficient information (in an
       unspecified format) so that any comparison operator can be applied
!      to the result of the ‘COMPARE’ operation.  For other modes in class
!      ‘MODE_CC’, the operation only returns a subset of this information.
  
!      Normally, X and Y must have the same mode.  Otherwise, ‘compare’ is
!      valid only if the mode of X is in class ‘MODE_INT’ and Y is a
!      ‘const_int’ or ‘const_double’ with mode ‘VOIDmode’.  The mode of X
       determines what mode the comparison is to be done in; thus it must
!      not be ‘VOIDmode’.
  
       If one of the operands is a constant, it should be placed in the
       second operand and the comparison code adjusted as appropriate.
  
!      A ‘compare’ specifying two ‘VOIDmode’ constants is not valid since
       there is no way to know in what mode the comparison is to be
       performed; the comparison must either be folded during the
       compilation or the first operand must be loaded into a register
       while its mode is still known.
  
! ‘(neg:M X)’
! ‘(ss_neg:M X)’
! ‘(us_neg:M X)’
       These two expressions represent the negation (subtraction from
       zero) of the value represented by X, carried out in mode M.  They
       differ in the behavior on overflow of integer modes.  In the case
!      of ‘neg’, the negation of the operand may be a number not
       representable in mode M, in which case it is truncated to M.
!      ‘ss_neg’ and ‘us_neg’ ensure that an out-of-bounds result saturates
       to the maximum or minimum signed or unsigned value.
  
! ‘(mult:M X Y)’
! ‘(ss_mult:M X Y)’
! ‘(us_mult:M X Y)’
       Represents the signed product of the values represented by X and Y
!      carried out in machine mode M.  ‘ss_mult’ and ‘us_mult’ ensure that
       an out-of-bounds result saturates to the maximum or minimum signed
       or unsigned value.
  
*************** second operand.
*** 18949,19108 ****
       same.
  
       For unsigned widening multiplication, use the same idiom, but with
!      'zero_extend' instead of 'sign_extend'.
  
! '(smul_highpart:M X Y)'
! '(umul_highpart:M X Y)'
       Represents the high-part multiplication of X and Y carried out in
!      machine mode M.  'smul_highpart' returns the high part of a signed
!      multiplication, 'umul_highpart' returns the high part of an
       unsigned multiplication.
  
! '(fma:M X Y Z)'
!      Represents the 'fma', 'fmaf', and 'fmal' builtin functions, which
!      compute 'X * Y + Z' without doing an intermediate rounding step.
  
! '(div:M X Y)'
! '(ss_div:M X Y)'
       Represents the quotient in signed division of X by Y, carried out
       in machine mode M.  If M is a floating point mode, it represents
!      the exact quotient; otherwise, the integerized quotient.  'ss_div'
       ensures that an out-of-bounds result saturates to the maximum or
       minimum signed value.
  
       Some machines have division instructions in which the operands and
       quotient widths are not all the same; you should represent such
!      instructions using 'truncate' and 'sign_extend' as in,
  
            (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
  
! '(udiv:M X Y)'
! '(us_div:M X Y)'
!      Like 'div' but represents unsigned division.  'us_div' ensures that
       an out-of-bounds result saturates to the maximum or minimum
       unsigned value.
  
! '(mod:M X Y)'
! '(umod:M X Y)'
!      Like 'div' and 'udiv' but represent the remainder instead of the
       quotient.
  
! '(smin:M X Y)'
! '(smax:M X Y)'
!      Represents the smaller (for 'smin') or larger (for 'smax') of X and
       Y, interpreted as signed values in mode M.  When used with floating
!      point, if both operands are zeros, or if either operand is 'NaN',
       then it is unspecified which of the two operands is returned as the
       result.
  
! '(umin:M X Y)'
! '(umax:M X Y)'
!      Like 'smin' and 'smax', but the values are interpreted as unsigned
       integers.
  
! '(not:M X)'
       Represents the bitwise complement of the value represented by X,
       carried out in mode M, which must be a fixed-point machine mode.
  
! '(and:M X Y)'
       Represents the bitwise logical-and of the values represented by X
       and Y, carried out in machine mode M, which must be a fixed-point
       machine mode.
  
! '(ior:M X Y)'
       Represents the bitwise inclusive-or of the values represented by X
       and Y, carried out in machine mode M, which must be a fixed-point
       mode.
  
! '(xor:M X Y)'
       Represents the bitwise exclusive-or of the values represented by X
       and Y, carried out in machine mode M, which must be a fixed-point
       mode.
  
! '(ashift:M X C)'
! '(ss_ashift:M X C)'
! '(us_ashift:M X C)'
       These three expressions represent the result of arithmetically
       shifting X left by C places.  They differ in their behavior on
!      overflow of integer modes.  An 'ashift' operation is a plain shift
       with no special behavior in case of a change in the sign bit;
!      'ss_ashift' and 'us_ashift' saturates to the minimum or maximum
       representable value if any of the bits shifted out differs from the
       final sign bit.
  
       X have mode M, a fixed-point machine mode.  C be a fixed-point mode
!      or be a constant with mode 'VOIDmode'; which mode is determined by
       the mode called for in the machine description entry for the
       left-shift instruction.  For example, on the VAX, the mode of C is
!      'QImode' regardless of M.
  
! '(lshiftrt:M X C)'
! '(ashiftrt:M X C)'
!      Like 'ashift' but for right shift.  Unlike the case for left shift,
       these two operations are distinct.
  
! '(rotate:M X C)'
! '(rotatert:M X C)'
       Similar but represent left and right rotate.  If C is a constant,
!      use 'rotate'.
  
! '(abs:M X)'
! '(ss_abs:M X)'
!      Represents the absolute value of X, computed in mode M.  'ss_abs'
       ensures that an out-of-bounds result saturates to the maximum
       signed value.
  
! '(sqrt:M X)'
       Represents the square root of X, computed in mode M.  Most often M
       will be a floating point mode.
  
! '(ffs:M X)'
       Represents one plus the index of the least significant 1-bit in X,
       represented as an integer of mode M.  (The value is zero if X is
!      zero.)  The mode of X must be M or 'VOIDmode'.
  
! '(clrsb:M X)'
       Represents the number of redundant leading sign bits in X,
       represented as an integer of mode M, starting at the most
       significant bit position.  This is one less than the number of
       leading sign bits (either 0 or 1), with no special cases.  The mode
!      of X must be M or 'VOIDmode'.
  
! '(clz:M X)'
       Represents the number of leading 0-bits in X, represented as an
       integer of mode M, starting at the most significant bit position.
       If X is zero, the value is determined by
!      'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
       of the few expressions that is not invariant under widening.  The
!      mode of X must be M or 'VOIDmode'.
  
! '(ctz:M X)'
       Represents the number of trailing 0-bits in X, represented as an
       integer of mode M, starting at the least significant bit position.
       If X is zero, the value is determined by
!      'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
!      'ctz(x)' is equivalent to 'ffs(X) - 1'.  The mode of X must be M or
!      'VOIDmode'.
  
! '(popcount:M X)'
       Represents the number of 1-bits in X, represented as an integer of
!      mode M.  The mode of X must be M or 'VOIDmode'.
  
! '(parity:M X)'
       Represents the number of 1-bits modulo 2 in X, represented as an
!      integer of mode M.  The mode of X must be M or 'VOIDmode'.
  
! '(bswap:M X)'
       Represents the value X with the order of bytes reversed, carried
       out in mode M, which must be a fixed-point machine mode.  The mode
!      of X must be M or 'VOIDmode'.
  
! '(bitreverse:M X)'
       Represents the value X with the order of bits reversed, carried out
       in mode M, which must be a fixed-point machine mode.  The mode of X
!      must be M or 'VOIDmode'.
  
! '(copysign:M X Y)'
       Represents the value X with the sign of Y.  Both X and Y must have
       floating point machine mode M.
  
--- 18951,19110 ----
       same.
  
       For unsigned widening multiplication, use the same idiom, but with
!      ‘zero_extend’ instead of ‘sign_extend’.
  
! ‘(smul_highpart:M X Y)’
! ‘(umul_highpart:M X Y)’
       Represents the high-part multiplication of X and Y carried out in
!      machine mode M.  ‘smul_highpart’ returns the high part of a signed
!      multiplication, ‘umul_highpart’ returns the high part of an
       unsigned multiplication.
  
! ‘(fma:M X Y Z)’
!      Represents the ‘fma’, ‘fmaf’, and ‘fmal’ builtin functions, which
!      compute ‘X * Y + Z’ without doing an intermediate rounding step.
  
! ‘(div:M X Y)’
! ‘(ss_div:M X Y)’
       Represents the quotient in signed division of X by Y, carried out
       in machine mode M.  If M is a floating point mode, it represents
!      the exact quotient; otherwise, the integerized quotient.  ‘ss_div’
       ensures that an out-of-bounds result saturates to the maximum or
       minimum signed value.
  
       Some machines have division instructions in which the operands and
       quotient widths are not all the same; you should represent such
!      instructions using ‘truncate’ and ‘sign_extend’ as in,
  
            (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
  
! ‘(udiv:M X Y)’
! ‘(us_div:M X Y)’
!      Like ‘div’ but represents unsigned division.  ‘us_div’ ensures that
       an out-of-bounds result saturates to the maximum or minimum
       unsigned value.
  
! ‘(mod:M X Y)’
! ‘(umod:M X Y)’
!      Like ‘div’ and ‘udiv’ but represent the remainder instead of the
       quotient.
  
! ‘(smin:M X Y)’
! ‘(smax:M X Y)’
!      Represents the smaller (for ‘smin’) or larger (for ‘smax’) of X and
       Y, interpreted as signed values in mode M.  When used with floating
!      point, if both operands are zeros, or if either operand is ‘NaN’,
       then it is unspecified which of the two operands is returned as the
       result.
  
! ‘(umin:M X Y)’
! ‘(umax:M X Y)’
!      Like ‘smin’ and ‘smax’, but the values are interpreted as unsigned
       integers.
  
! ‘(not:M X)’
       Represents the bitwise complement of the value represented by X,
       carried out in mode M, which must be a fixed-point machine mode.
  
! ‘(and:M X Y)’
       Represents the bitwise logical-and of the values represented by X
       and Y, carried out in machine mode M, which must be a fixed-point
       machine mode.
  
! ‘(ior:M X Y)’
       Represents the bitwise inclusive-or of the values represented by X
       and Y, carried out in machine mode M, which must be a fixed-point
       mode.
  
! ‘(xor:M X Y)’
       Represents the bitwise exclusive-or of the values represented by X
       and Y, carried out in machine mode M, which must be a fixed-point
       mode.
  
! ‘(ashift:M X C)’
! ‘(ss_ashift:M X C)’
! ‘(us_ashift:M X C)’
       These three expressions represent the result of arithmetically
       shifting X left by C places.  They differ in their behavior on
!      overflow of integer modes.  An ‘ashift’ operation is a plain shift
       with no special behavior in case of a change in the sign bit;
!      ‘ss_ashift’ and ‘us_ashift’ saturates to the minimum or maximum
       representable value if any of the bits shifted out differs from the
       final sign bit.
  
       X have mode M, a fixed-point machine mode.  C be a fixed-point mode
!      or be a constant with mode ‘VOIDmode’; which mode is determined by
       the mode called for in the machine description entry for the
       left-shift instruction.  For example, on the VAX, the mode of C is
!      ‘QImode’ regardless of M.
  
! ‘(lshiftrt:M X C)’
! ‘(ashiftrt:M X C)’
!      Like ‘ashift’ but for right shift.  Unlike the case for left shift,
       these two operations are distinct.
  
! ‘(rotate:M X C)’
! ‘(rotatert:M X C)’
       Similar but represent left and right rotate.  If C is a constant,
!      use ‘rotate’.
  
! ‘(abs:M X)’
! ‘(ss_abs:M X)’
!      Represents the absolute value of X, computed in mode M.  ‘ss_abs’
       ensures that an out-of-bounds result saturates to the maximum
       signed value.
  
! ‘(sqrt:M X)’
       Represents the square root of X, computed in mode M.  Most often M
       will be a floating point mode.
  
! ‘(ffs:M X)’
       Represents one plus the index of the least significant 1-bit in X,
       represented as an integer of mode M.  (The value is zero if X is
!      zero.)  The mode of X must be M or ‘VOIDmode’.
  
! ‘(clrsb:M X)’
       Represents the number of redundant leading sign bits in X,
       represented as an integer of mode M, starting at the most
       significant bit position.  This is one less than the number of
       leading sign bits (either 0 or 1), with no special cases.  The mode
!      of X must be M or ‘VOIDmode’.
  
! ‘(clz:M X)’
       Represents the number of leading 0-bits in X, represented as an
       integer of mode M, starting at the most significant bit position.
       If X is zero, the value is determined by
!      ‘CLZ_DEFINED_VALUE_AT_ZERO’ (*note Misc::).  Note that this is one
       of the few expressions that is not invariant under widening.  The
!      mode of X must be M or ‘VOIDmode’.
  
! ‘(ctz:M X)’
       Represents the number of trailing 0-bits in X, represented as an
       integer of mode M, starting at the least significant bit position.
       If X is zero, the value is determined by
!      ‘CTZ_DEFINED_VALUE_AT_ZERO’ (*note Misc::).  Except for this case,
!      ‘ctz(x)’ is equivalent to ‘ffs(X) - 1’.  The mode of X must be M or
!      ‘VOIDmode’.
  
! ‘(popcount:M X)’
       Represents the number of 1-bits in X, represented as an integer of
!      mode M.  The mode of X must be M or ‘VOIDmode’.
  
! ‘(parity:M X)’
       Represents the number of 1-bits modulo 2 in X, represented as an
!      integer of mode M.  The mode of X must be M or ‘VOIDmode’.
  
! ‘(bswap:M X)’
       Represents the value X with the order of bytes reversed, carried
       out in mode M, which must be a fixed-point machine mode.  The mode
!      of X must be M or ‘VOIDmode’.
  
! ‘(bitreverse:M X)’
       Represents the value X with the order of bits reversed, carried out
       in mode M, which must be a fixed-point machine mode.  The mode of X
!      must be M or ‘VOIDmode’.
  
! ‘(copysign:M X Y)’
       Represents the value X with the sign of Y.  Both X and Y must have
       floating point machine mode M.
  
*************** File: gccint.info,  Node: Comparisons,
*** 19114,19130 ****
  
  Comparison operators test a relation on two operands and are considered
  to represent a machine-dependent nonzero value described by, but not
! necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation
  holds, or zero if it does not, for comparison operators whose results
! have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
  relation holds, or zero if it does not, for comparison operators that
  return floating-point values, and a vector of either
! 'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
  zeros if it does not, for comparison operators that return vector
  results.  The mode of the comparison operation is independent of the
  mode of the data being compared.  If the comparison operation is being
! tested (e.g., the first operand of an 'if_then_else'), the mode must be
! 'VOIDmode'.
  
   A comparison operation compares two data objects.  The mode of the
  comparison is determined by the operands; they must both be valid for a
--- 19116,19132 ----
  
  Comparison operators test a relation on two operands and are considered
  to represent a machine-dependent nonzero value described by, but not
! necessarily equal to, ‘STORE_FLAG_VALUE’ (*note Misc::) if the relation
  holds, or zero if it does not, for comparison operators whose results
! have a 'MODE_INT' mode, ‘FLOAT_STORE_FLAG_VALUE’ (*note Misc::) if the
  relation holds, or zero if it does not, for comparison operators that
  return floating-point values, and a vector of either
! ‘VECTOR_STORE_FLAG_VALUE’ (*note Misc::) if the relation holds, or of
  zeros if it does not, for comparison operators that return vector
  results.  The mode of the comparison operation is independent of the
  mode of the data being compared.  If the comparison operation is being
! tested (e.g., the first operand of an ‘if_then_else’), the mode must be
! ‘VOIDmode’.
  
   A comparison operation compares two data objects.  The mode of the
  comparison is determined by the operands; they must both be valid for a
*************** comparison should never exist in RTL due
*** 19134,19193 ****
  
   Usually only one style of comparisons is supported on a particular
  machine, but the combine pass will try to merge operations to produce
! code like '(eq X Y)', in case it exists in the context of the particular
  insn involved.
  
   Inequality comparisons come in two flavors, signed and unsigned.  Thus,
! there are distinct expression codes 'gt' and 'gtu' for signed and
  unsigned greater-than.  These can produce different results for the same
! pair of integer values: for example, 1 is signed greater-than -1 but not
! unsigned greater-than, because -1 when regarded as unsigned is actually
! '0xffffffff' which is greater than 1.
  
   The signed comparisons are also used for floating point values.
  Floating point comparisons are distinguished by the machine modes of the
  operands.
  
! '(eq:M X Y)'
!      'STORE_FLAG_VALUE' if the values represented by X and Y are equal,
       otherwise 0.
  
! '(ne:M X Y)'
!      'STORE_FLAG_VALUE' if the values represented by X and Y are not
       equal, otherwise 0.
  
! '(gt:M X Y)'
!      'STORE_FLAG_VALUE' if the X is greater than Y.  If they are
       fixed-point, the comparison is done in a signed sense.
  
! '(gtu:M X Y)'
!      Like 'gt' but does unsigned comparison, on fixed-point numbers
       only.
  
! '(lt:M X Y)'
! '(ltu:M X Y)'
!      Like 'gt' and 'gtu' but test for "less than".
  
! '(ge:M X Y)'
! '(geu:M X Y)'
!      Like 'gt' and 'gtu' but test for "greater than or equal".
  
! '(le:M X Y)'
! '(leu:M X Y)'
!      Like 'gt' and 'gtu' but test for "less than or equal".
  
! '(if_then_else COND THEN ELSE)'
       This is not a comparison operation but is listed here because it is
       always used in conjunction with a comparison operation.  To be
       precise, COND is a comparison expression.  This expression
       represents a choice, according to COND, between the value
       represented by THEN and the one represented by ELSE.
  
!      On most machines, 'if_then_else' expressions are valid only to
       express conditional jumps.
  
! '(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
!      Similar to 'if_then_else', but more general.  Each of TEST1, TEST2,
       ... is performed in turn.  The result of this expression is the
       VALUE corresponding to the first nonzero test, or DEFAULT if none
       of the tests are nonzero expressions.
--- 19136,19195 ----
  
   Usually only one style of comparisons is supported on a particular
  machine, but the combine pass will try to merge operations to produce
! code like ‘(eq X Y)’, in case it exists in the context of the particular
  insn involved.
  
   Inequality comparisons come in two flavors, signed and unsigned.  Thus,
! there are distinct expression codes ‘gt’ and ‘gtu’ for signed and
  unsigned greater-than.  These can produce different results for the same
! pair of integer values: for example, 1 is signed greater-than −1 but not
! unsigned greater-than, because −1 when regarded as unsigned is actually
! ‘0xffffffff’ which is greater than 1.
  
   The signed comparisons are also used for floating point values.
  Floating point comparisons are distinguished by the machine modes of the
  operands.
  
! ‘(eq:M X Y)’
!      ‘STORE_FLAG_VALUE’ if the values represented by X and Y are equal,
       otherwise 0.
  
! ‘(ne:M X Y)’
!      ‘STORE_FLAG_VALUE’ if the values represented by X and Y are not
       equal, otherwise 0.
  
! ‘(gt:M X Y)’
!      ‘STORE_FLAG_VALUE’ if the X is greater than Y.  If they are
       fixed-point, the comparison is done in a signed sense.
  
! ‘(gtu:M X Y)’
!      Like ‘gt’ but does unsigned comparison, on fixed-point numbers
       only.
  
! ‘(lt:M X Y)’
! ‘(ltu:M X Y)’
!      Like ‘gt’ and ‘gtu’ but test for "less than".
  
! ‘(ge:M X Y)’
! ‘(geu:M X Y)’
!      Like ‘gt’ and ‘gtu’ but test for "greater than or equal".
  
! ‘(le:M X Y)’
! ‘(leu:M X Y)’
!      Like ‘gt’ and ‘gtu’ but test for "less than or equal".
  
! ‘(if_then_else COND THEN ELSE)’
       This is not a comparison operation but is listed here because it is
       always used in conjunction with a comparison operation.  To be
       precise, COND is a comparison expression.  This expression
       represents a choice, according to COND, between the value
       represented by THEN and the one represented by ELSE.
  
!      On most machines, ‘if_then_else’ expressions are valid only to
       express conditional jumps.
  
! ‘(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)’
!      Similar to ‘if_then_else’, but more general.  Each of TEST1, TEST2,
       ... is performed in turn.  The result of this expression is the
       VALUE corresponding to the first nonzero test, or DEFAULT if none
       of the tests are nonzero expressions.
*************** File: gccint.info,  Node: Bit-Fields,  N
*** 19203,19236 ****
  
  Special expression codes exist to represent bit-field instructions.
  
! '(sign_extract:M LOC SIZE POS)'
       This represents a reference to a sign-extended bit-field contained
       or starting in LOC (a memory or register reference).  The bit-field
       is SIZE bits wide and starts at bit POS.  The compilation option
!      'BITS_BIG_ENDIAN' says which end of the memory unit POS counts
       from.
  
       If LOC is in memory, its mode must be a single-byte integer mode.
       If LOC is in a register, the mode to use is specified by the
!      operand of the 'insv' or 'extv' pattern (*note Standard Names::)
       and is usually a full-word integer mode, which is the default if
       none is specified.
  
       The mode of POS is machine-specific and is also specified in the
!      'insv' or 'extv' pattern.
  
       The mode M is the same as the mode that would be used for LOC if it
       were a register.
  
!      A 'sign_extract' cannot appear as an lvalue, or part thereof, in
       RTL.
  
! '(zero_extract:M LOC SIZE POS)'
!      Like 'sign_extract' but refers to an unsigned or zero-extended
       bit-field.  The same sequence of bits are extracted, but they are
       filled to an entire word with zeros instead of by sign-extension.
  
!      Unlike 'sign_extract', this type of expressions can be lvalues in
       RTL; they may appear on the left side of an assignment, indicating
       insertion of a value into the specified bit-field.
  
--- 19205,19238 ----
  
  Special expression codes exist to represent bit-field instructions.
  
! ‘(sign_extract:M LOC SIZE POS)’
       This represents a reference to a sign-extended bit-field contained
       or starting in LOC (a memory or register reference).  The bit-field
       is SIZE bits wide and starts at bit POS.  The compilation option
!      ‘BITS_BIG_ENDIAN’ says which end of the memory unit POS counts
       from.
  
       If LOC is in memory, its mode must be a single-byte integer mode.
       If LOC is in a register, the mode to use is specified by the
!      operand of the ‘insv’ or ‘extv’ pattern (*note Standard Names::)
       and is usually a full-word integer mode, which is the default if
       none is specified.
  
       The mode of POS is machine-specific and is also specified in the
!      ‘insv’ or ‘extv’ pattern.
  
       The mode M is the same as the mode that would be used for LOC if it
       were a register.
  
!      A ‘sign_extract’ cannot appear as an lvalue, or part thereof, in
       RTL.
  
! ‘(zero_extract:M LOC SIZE POS)’
!      Like ‘sign_extract’ but refers to an unsigned or zero-extended
       bit-field.  The same sequence of bits are extracted, but they are
       filled to an entire word with zeros instead of by sign-extension.
  
!      Unlike ‘sign_extract’, this type of expressions can be lvalues in
       RTL; they may appear on the left side of an assignment, indicating
       insertion of a value into the specified bit-field.
  
*************** interpreted as operating on each part of
*** 19245,19283 ****
  Additionally, there are a few new expressions to describe specific
  vector operations.
  
! '(vec_merge:M VEC1 VEC2 ITEMS)'
       This describes a merge operation between two vectors.  The result
       is a vector of mode M; its elements are selected from either VEC1
       or VEC2.  Which elements are selected is described by ITEMS, which
!      is a bit mask represented by a 'const_int'; a zero bit indicates
       the corresponding element in the result vector is taken from VEC2
       while a set bit indicates it is taken from VEC1.
  
! '(vec_select:M VEC1 SELECTION)'
       This describes an operation that selects parts of a vector.  VEC1
!      is the source vector, and SELECTION is a 'parallel' that contains a
!      'const_int' (or another expression, if the selection can be made at
       runtime) for each of the subparts of the result vector, giving the
       number of the source subpart that should be stored into it.  The
       result mode M is either the submode for a single element of VEC1
       (if only one subpart is selected), or another vector mode with that
       element submode (if multiple subparts are selected).
  
! '(vec_concat:M X1 X2)'
       Describes a vector concat operation.  The result is a concatenation
       of the vectors or scalars X1 and X2; its length is the sum of the
       lengths of the two inputs.
  
! '(vec_duplicate:M X)'
       This operation converts a scalar into a vector or a small vector
       into a larger one by duplicating the input values.  The output
       vector mode must have the same submodes as the input vector mode or
       the scalar modes, and the number of output parts must be an integer
       multiple of the number of input parts.
  
! '(vec_series:M BASE STEP)'
       This operation creates a vector in which element I is equal to
!      'BASE + I*STEP'.  M must be a vector integer mode.
  
  
  File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
--- 19247,19285 ----
  Additionally, there are a few new expressions to describe specific
  vector operations.
  
! ‘(vec_merge:M VEC1 VEC2 ITEMS)’
       This describes a merge operation between two vectors.  The result
       is a vector of mode M; its elements are selected from either VEC1
       or VEC2.  Which elements are selected is described by ITEMS, which
!      is a bit mask represented by a ‘const_int’; a zero bit indicates
       the corresponding element in the result vector is taken from VEC2
       while a set bit indicates it is taken from VEC1.
  
! ‘(vec_select:M VEC1 SELECTION)’
       This describes an operation that selects parts of a vector.  VEC1
!      is the source vector, and SELECTION is a ‘parallel’ that contains a
!      ‘const_int’ (or another expression, if the selection can be made at
       runtime) for each of the subparts of the result vector, giving the
       number of the source subpart that should be stored into it.  The
       result mode M is either the submode for a single element of VEC1
       (if only one subpart is selected), or another vector mode with that
       element submode (if multiple subparts are selected).
  
! ‘(vec_concat:M X1 X2)’
       Describes a vector concat operation.  The result is a concatenation
       of the vectors or scalars X1 and X2; its length is the sum of the
       lengths of the two inputs.
  
! ‘(vec_duplicate:M X)’
       This operation converts a scalar into a vector or a small vector
       into a larger one by duplicating the input values.  The output
       vector mode must have the same submodes as the input vector mode or
       the scalar modes, and the number of output parts must be an integer
       multiple of the number of input parts.
  
! ‘(vec_series:M BASE STEP)’
       This operation creates a vector in which element I is equal to
!      ‘BASE + I*STEP’.  M must be a vector integer mode.
  
  
  File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
*************** File: gccint.info,  Node: Conversions,
*** 19287,19294 ****
  
  All conversions between machine modes must be represented by explicit
  conversion operations.  For example, an expression which is the sum of a
! byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI
! 80))' because the 'plus' operation requires two operands of the same
  machine mode.  Therefore, the byte-sized operand is enclosed in a
  conversion operation, as in
  
--- 19289,19296 ----
  
  All conversions between machine modes must be represented by explicit
  conversion operations.  For example, an expression which is the sum of a
! byte and a full word cannot be written as ‘(plus:SI (reg:QI 34) (reg:SI
! 80))’ because the ‘plus’ operation requires two operands of the same
  machine mode.  Therefore, the byte-sized operand is enclosed in a
  conversion operation, as in
  
*************** conversion operation, as in
*** 19298,19351 ****
  be more than one way of converting from a given starting mode to the
  desired final mode.  The conversion operation code says how to do it.
  
!  For all conversion operations, X must not be 'VOIDmode' because the
  mode in which to do the conversion would not be known.  The conversion
  must either be done at compile-time or X must be placed into a register.
  
! '(sign_extend:M X)'
       Represents the result of sign-extending the value X to machine mode
       M.  M must be a fixed-point mode and X a fixed-point value of a
       mode narrower than M.
  
! '(zero_extend:M X)'
       Represents the result of zero-extending the value X to machine mode
       M.  M must be a fixed-point mode and X a fixed-point value of a
       mode narrower than M.
  
! '(float_extend:M X)'
       Represents the result of extending the value X to machine mode M.
       M must be a floating point mode and X a floating point value of a
       mode narrower than M.
  
! '(truncate:M X)'
       Represents the result of truncating the value X to machine mode M.
       M must be a fixed-point mode and X a fixed-point value of a mode
       wider than M.
  
! '(ss_truncate:M X)'
       Represents the result of truncating the value X to machine mode M,
       using signed saturation in the case of overflow.  Both M and the
       mode of X must be fixed-point modes.
  
! '(us_truncate:M X)'
       Represents the result of truncating the value X to machine mode M,
       using unsigned saturation in the case of overflow.  Both M and the
       mode of X must be fixed-point modes.
  
! '(float_truncate:M X)'
       Represents the result of truncating the value X to machine mode M.
       M must be a floating point mode and X a floating point value of a
       mode wider than M.
  
! '(float:M X)'
       Represents the result of converting fixed point value X, regarded
       as signed, to floating point mode M.
  
! '(unsigned_float:M X)'
       Represents the result of converting fixed point value X, regarded
       as unsigned, to floating point mode M.
  
! '(fix:M X)'
       When M is a floating-point mode, represents the result of
       converting floating point value X (valid for mode M) to an integer,
       still represented in floating point mode M, by rounding towards
--- 19300,19353 ----
  be more than one way of converting from a given starting mode to the
  desired final mode.  The conversion operation code says how to do it.
  
!  For all conversion operations, X must not be ‘VOIDmode’ because the
  mode in which to do the conversion would not be known.  The conversion
  must either be done at compile-time or X must be placed into a register.
  
! ‘(sign_extend:M X)’
       Represents the result of sign-extending the value X to machine mode
       M.  M must be a fixed-point mode and X a fixed-point value of a
       mode narrower than M.
  
! ‘(zero_extend:M X)’
       Represents the result of zero-extending the value X to machine mode
       M.  M must be a fixed-point mode and X a fixed-point value of a
       mode narrower than M.
  
! ‘(float_extend:M X)’
       Represents the result of extending the value X to machine mode M.
       M must be a floating point mode and X a floating point value of a
       mode narrower than M.
  
! ‘(truncate:M X)’
       Represents the result of truncating the value X to machine mode M.
       M must be a fixed-point mode and X a fixed-point value of a mode
       wider than M.
  
! ‘(ss_truncate:M X)’
       Represents the result of truncating the value X to machine mode M,
       using signed saturation in the case of overflow.  Both M and the
       mode of X must be fixed-point modes.
  
! ‘(us_truncate:M X)’
       Represents the result of truncating the value X to machine mode M,
       using unsigned saturation in the case of overflow.  Both M and the
       mode of X must be fixed-point modes.
  
! ‘(float_truncate:M X)’
       Represents the result of truncating the value X to machine mode M.
       M must be a floating point mode and X a floating point value of a
       mode wider than M.
  
! ‘(float:M X)’
       Represents the result of converting fixed point value X, regarded
       as signed, to floating point mode M.
  
! ‘(unsigned_float:M X)’
       Represents the result of converting fixed point value X, regarded
       as unsigned, to floating point mode M.
  
! ‘(fix:M X)’
       When M is a floating-point mode, represents the result of
       converting floating point value X (valid for mode M) to an integer,
       still represented in floating point mode M, by rounding towards
*************** must either be done at compile-time or X
*** 19356,19367 ****
       is done is not specified, so this operation may be used validly in
       compiling C code only for integer-valued operands.
  
! '(unsigned_fix:M X)'
       Represents the result of converting floating point value X to fixed
       point mode M, regarded as unsigned.  How rounding is done is not
       specified.
  
! '(fract_convert:M X)'
       Represents the result of converting fixed-point value X to
       fixed-point mode M, signed integer value X to fixed-point mode M,
       floating-point value X to fixed-point mode M, fixed-point value X
--- 19358,19369 ----
       is done is not specified, so this operation may be used validly in
       compiling C code only for integer-valued operands.
  
! ‘(unsigned_fix:M X)’
       Represents the result of converting floating point value X to fixed
       point mode M, regarded as unsigned.  How rounding is done is not
       specified.
  
! ‘(fract_convert:M X)’
       Represents the result of converting fixed-point value X to
       fixed-point mode M, signed integer value X to fixed-point mode M,
       floating-point value X to fixed-point mode M, fixed-point value X
*************** must either be done at compile-time or X
*** 19369,19388 ****
       floating-point mode M.  When overflows or underflows happen, the
       results are undefined.
  
! '(sat_fract:M X)'
       Represents the result of converting fixed-point value X to
       fixed-point mode M, signed integer value X to fixed-point mode M,
       or floating-point value X to fixed-point mode M.  When overflows or
       underflows happen, the results are saturated to the maximum or the
       minimum.
  
! '(unsigned_fract_convert:M X)'
       Represents the result of converting fixed-point value X to integer
       mode M regarded as unsigned, or unsigned integer value X to
       fixed-point mode M.  When overflows or underflows happen, the
       results are undefined.
  
! '(unsigned_sat_fract:M X)'
       Represents the result of converting unsigned integer value X to
       fixed-point mode M.  When overflows or underflows happen, the
       results are saturated to the maximum or the minimum.
--- 19371,19390 ----
       floating-point mode M.  When overflows or underflows happen, the
       results are undefined.
  
! ‘(sat_fract:M X)’
       Represents the result of converting fixed-point value X to
       fixed-point mode M, signed integer value X to fixed-point mode M,
       or floating-point value X to fixed-point mode M.  When overflows or
       underflows happen, the results are saturated to the maximum or the
       minimum.
  
! ‘(unsigned_fract_convert:M X)’
       Represents the result of converting fixed-point value X to integer
       mode M regarded as unsigned, or unsigned integer value X to
       fixed-point mode M.  When overflows or underflows happen, the
       results are undefined.
  
! ‘(unsigned_sat_fract:M X)’
       Represents the result of converting unsigned integer value X to
       fixed-point mode M.  When overflows or underflows happen, the
       results are saturated to the maximum or the minimum.
*************** File: gccint.info,  Node: RTL Declaratio
*** 19396,19412 ****
  Declaration expression codes do not represent arithmetic operations but
  rather state assertions about their operands.
  
! '(strict_low_part (subreg:M (reg:N R) 0))'
       This expression code is used in only one context: as the
!      destination operand of a 'set' expression.  In addition, the
!      operand of this expression must be a non-paradoxical 'subreg'
       expression.
  
!      The presence of 'strict_low_part' says that the part of the
       register which is meaningful in mode N, but is not part of mode M,
       is not to be altered.  Normally, an assignment to such a subreg is
       allowed to have undefined effects on the rest of the register when
!      M is smaller than 'REGMODE_NATURAL_SIZE (N)'.
  
  
  File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
--- 19398,19414 ----
  Declaration expression codes do not represent arithmetic operations but
  rather state assertions about their operands.
  
! ‘(strict_low_part (subreg:M (reg:N R) 0))’
       This expression code is used in only one context: as the
!      destination operand of a ‘set’ expression.  In addition, the
!      operand of this expression must be a non-paradoxical ‘subreg’
       expression.
  
!      The presence of ‘strict_low_part’ says that the part of the
       register which is meaningful in mode N, but is not part of mode M,
       is not to be altered.  Normally, an assignment to such a subreg is
       allowed to have undefined effects on the rest of the register when
!      M is smaller than ‘REGMODE_NATURAL_SIZE (N)’.
  
  
  File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
*************** codes are used to represent side effects
*** 19423,19516 ****
  the codes described above, which represent values, appear only as the
  operands of these.
  
! '(set LVAL X)'
       Represents the action of storing the value of X into the place
       represented by LVAL.  LVAL must be an expression representing a
!      place that can be stored in: 'reg' (or 'subreg', 'strict_low_part'
!      or 'zero_extract'), 'mem', 'pc', or 'parallel'.
  
!      If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then
       X must be valid for that mode.
  
!      If LVAL is a 'reg' whose machine mode is less than the full width
       of the register, then it means that the part of the register
       specified by the machine mode is given the specified value and the
       rest of the register receives an undefined value.  Likewise, if
!      LVAL is a 'subreg' whose machine mode is narrower than the mode of
       the register, the rest of the register can be changed in an
       undefined way.
  
!      If LVAL is a 'strict_low_part' of a subreg, then the part of the
!      register specified by the machine mode of the 'subreg' is given the
       value X and the rest of the register is not changed.
  
!      If LVAL is a 'zero_extract', then the referenced part of the
       bit-field (a memory or register reference) specified by the
!      'zero_extract' is given the value X and the rest of the bit-field
!      is not changed.  Note that 'sign_extract' cannot appear in LVAL.
  
!      If LVAL is a 'parallel', it is used to represent the case of a
       function returning a structure in multiple registers.  Each element
!      of the 'parallel' is an 'expr_list' whose first operand is a 'reg'
!      and whose second operand is a 'const_int' representing the offset
       (in bytes) into the structure at which the data in that register
       corresponds.  The first element may be null to indicate that the
       structure is also passed partly in memory.
  
!      If LVAL is '(pc)', we have a jump instruction, and the
!      possibilities for X are very limited.  It may be a 'label_ref'
!      expression (unconditional jump).  It may be an 'if_then_else'
       (conditional jump), in which case either the second or the third
!      operand must be '(pc)' (for the case which does not jump) and the
!      other of the two must be a 'label_ref' (for the case which does
!      jump).  X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be
!      a 'reg' or a 'mem'; these unusual patterns are used to represent
       jumps through branch tables.
  
!      If LVAL is not '(pc)', the mode of LVAL must not be 'VOIDmode' and
       the mode of X must be valid for the mode of LVAL.
  
!      LVAL is customarily accessed with the 'SET_DEST' macro and X with
!      the 'SET_SRC' macro.
  
! '(return)'
       As the sole expression in a pattern, represents a return from the
       current function, on machines where this can be done with one
       instruction, such as VAXen.  On machines where a multi-instruction
       "epilogue" must be executed in order to return from the function,
       returning is done by jumping to a label which precedes the
!      epilogue, and the 'return' expression code is never used.
  
!      Inside an 'if_then_else' expression, represents the value to be
!      placed in 'pc' to return to the caller.
  
!      Note that an insn pattern of '(return)' is logically equivalent to
!      '(set (pc) (return))', but the latter form is never used.
  
! '(simple_return)'
!      Like '(return)', but truly represents only a function return, while
!      '(return)' may represent an insn that also performs other functions
!      of the function epilogue.  Like '(return)', this may also occur in
       conditional jumps.
  
! '(call FUNCTION NARGS)'
!      Represents a function call.  FUNCTION is a 'mem' expression whose
       address is the address of the function to be called.  NARGS is an
       expression which can be used for two purposes: on some machines it
       represents the number of bytes of stack argument; on others, it
       represents the number of argument registers.
  
       Each machine has a standard machine mode which FUNCTION must have.
!      The machine description defines macro 'FUNCTION_MODE' to expand
       into the requisite mode name.  The purpose of this mode is to
       specify what kind of addressing is allowed, on machines where the
       allowed kinds of addressing depend on the machine mode being
       addressed.
  
! '(clobber X)'
       Represents the storing or possible storing of an unpredictable,
!      undescribed value into X, which must be a 'reg', 'scratch',
!      'parallel' or 'mem' expression.
  
       One place this is used is in string instructions that store
       standard values into particular hard registers.  It may not be
--- 19425,19518 ----
  the codes described above, which represent values, appear only as the
  operands of these.
  
! ‘(set LVAL X)’
       Represents the action of storing the value of X into the place
       represented by LVAL.  LVAL must be an expression representing a
!      place that can be stored in: ‘reg’ (or ‘subreg’, ‘strict_low_part’
!      or ‘zero_extract’), ‘mem’, ‘pc’, or ‘parallel’.
  
!      If LVAL is a ‘reg’, ‘subreg’ or ‘mem’, it has a machine mode; then
       X must be valid for that mode.
  
!      If LVAL is a ‘reg’ whose machine mode is less than the full width
       of the register, then it means that the part of the register
       specified by the machine mode is given the specified value and the
       rest of the register receives an undefined value.  Likewise, if
!      LVAL is a ‘subreg’ whose machine mode is narrower than the mode of
       the register, the rest of the register can be changed in an
       undefined way.
  
!      If LVAL is a ‘strict_low_part’ of a subreg, then the part of the
!      register specified by the machine mode of the ‘subreg’ is given the
       value X and the rest of the register is not changed.
  
!      If LVAL is a ‘zero_extract’, then the referenced part of the
       bit-field (a memory or register reference) specified by the
!      ‘zero_extract’ is given the value X and the rest of the bit-field
!      is not changed.  Note that ‘sign_extract’ cannot appear in LVAL.
  
!      If LVAL is a ‘parallel’, it is used to represent the case of a
       function returning a structure in multiple registers.  Each element
!      of the ‘parallel’ is an ‘expr_list’ whose first operand is a ‘reg’
!      and whose second operand is a ‘const_int’ representing the offset
       (in bytes) into the structure at which the data in that register
       corresponds.  The first element may be null to indicate that the
       structure is also passed partly in memory.
  
!      If LVAL is ‘(pc)’, we have a jump instruction, and the
!      possibilities for X are very limited.  It may be a ‘label_ref’
!      expression (unconditional jump).  It may be an ‘if_then_else’
       (conditional jump), in which case either the second or the third
!      operand must be ‘(pc)’ (for the case which does not jump) and the
!      other of the two must be a ‘label_ref’ (for the case which does
!      jump).  X may also be a ‘mem’ or ‘(plus:SI (pc) Y)’, where Y may be
!      a ‘reg’ or a ‘mem’; these unusual patterns are used to represent
       jumps through branch tables.
  
!      If LVAL is not ‘(pc)’, the mode of LVAL must not be ‘VOIDmode’ and
       the mode of X must be valid for the mode of LVAL.
  
!      LVAL is customarily accessed with the ‘SET_DEST’ macro and X with
!      the ‘SET_SRC’ macro.
  
! ‘(return)’
       As the sole expression in a pattern, represents a return from the
       current function, on machines where this can be done with one
       instruction, such as VAXen.  On machines where a multi-instruction
       "epilogue" must be executed in order to return from the function,
       returning is done by jumping to a label which precedes the
!      epilogue, and the ‘return’ expression code is never used.
  
!      Inside an ‘if_then_else’ expression, represents the value to be
!      placed in ‘pc’ to return to the caller.
  
!      Note that an insn pattern of ‘(return)’ is logically equivalent to
!      ‘(set (pc) (return))’, but the latter form is never used.
  
! ‘(simple_return)’
!      Like ‘(return)’, but truly represents only a function return, while
!      ‘(return)’ may represent an insn that also performs other functions
!      of the function epilogue.  Like ‘(return)’, this may also occur in
       conditional jumps.
  
! ‘(call FUNCTION NARGS)’
!      Represents a function call.  FUNCTION is a ‘mem’ expression whose
       address is the address of the function to be called.  NARGS is an
       expression which can be used for two purposes: on some machines it
       represents the number of bytes of stack argument; on others, it
       represents the number of argument registers.
  
       Each machine has a standard machine mode which FUNCTION must have.
!      The machine description defines macro ‘FUNCTION_MODE’ to expand
       into the requisite mode name.  The purpose of this mode is to
       specify what kind of addressing is allowed, on machines where the
       allowed kinds of addressing depend on the machine mode being
       addressed.
  
! ‘(clobber X)’
       Represents the storing or possible storing of an unpredictable,
!      undescribed value into X, which must be a ‘reg’, ‘scratch’,
!      ‘parallel’ or ‘mem’ expression.
  
       One place this is used is in string instructions that store
       standard values into particular hard registers.  It may not be
*************** operands of these.
*** 19519,19540 ****
       altered, lest it attempt to keep data in them across the string
       instruction.
  
!      If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it
       means that all memory locations must be presumed clobbered.  If X
!      is a 'parallel', it has the same meaning as a 'parallel' in a 'set'
       expression.
  
       Note that the machine description classifies certain hard registers
       as "call-clobbered".  All function call instructions are assumed by
       default to clobber these registers, so there is no need to use
!      'clobber' expressions to indicate this fact.  Also, each function
       call is assumed to have the potential to alter any memory location,
!      unless the function is declared 'const'.
  
!      If the last group of expressions in a 'parallel' are each a
!      'clobber' expression whose arguments are 'reg' or 'match_scratch'
       (*note RTL Template::) expressions, the combiner phase can add the
!      appropriate 'clobber' expressions to an insn it has constructed
       when doing so will cause a pattern to be matched.
  
       This feature can be used, for example, on a machine that whose
--- 19521,19542 ----
       altered, lest it attempt to keep data in them across the string
       instruction.
  
!      If X is ‘(mem:BLK (const_int 0))’ or ‘(mem:BLK (scratch))’, it
       means that all memory locations must be presumed clobbered.  If X
!      is a ‘parallel’, it has the same meaning as a ‘parallel’ in a ‘set’
       expression.
  
       Note that the machine description classifies certain hard registers
       as "call-clobbered".  All function call instructions are assumed by
       default to clobber these registers, so there is no need to use
!      ‘clobber’ expressions to indicate this fact.  Also, each function
       call is assumed to have the potential to alter any memory location,
!      unless the function is declared ‘const’.
  
!      If the last group of expressions in a ‘parallel’ are each a
!      ‘clobber’ expression whose arguments are ‘reg’ or ‘match_scratch’
       (*note RTL Template::) expressions, the combiner phase can add the
!      appropriate ‘clobber’ expressions to an insn it has constructed
       when doing so will cause a pattern to be matched.
  
       This feature can be used, for example, on a machine that whose
*************** operands of these.
*** 19543,19583 ****
       register.  Similarly, a combined instruction might require a
       temporary register while the constituent instructions might not.
  
!      When a 'clobber' expression for a register appears inside a
!      'parallel' with other side effects, the register allocator
       guarantees that the register is unoccupied both before and after
       that insn if it is a hard register clobber.  For pseudo-register
       clobber, the register allocator and the reload pass do not assign
       the same hard register to the clobber and the input operands if
!      there is an insn alternative containing the '&' constraint (*note
       Modifiers::) for the clobber and the hard register is in register
       classes of the clobber in the alternative.  You can clobber either
!      a specific hard register, a pseudo register, or a 'scratch'
       expression; in the latter two cases, GCC will allocate a hard
       register that is available there for use as a temporary.
  
       For instructions that require a temporary register, you should use
!      'scratch' instead of a pseudo-register because this will allow the
!      combiner phase to add the 'clobber' when required.  You do this by
!      coding ('clobber' ('match_scratch' ...)).  If you do clobber a
       pseudo register, use one which appears nowhere else--generate a new
       one each time.  Otherwise, you may confuse CSE.
  
       There is one other known use for clobbering a pseudo register in a
!      'parallel': when one of the input operands of the insn is also
       clobbered by the insn.  In this case, using the same pseudo
       register in the clobber and elsewhere in the insn produces the
       expected results.
  
! '(use X)'
       Represents the use of the value of X.  It indicates that the value
       in X at this point in the program is needed, even though it may not
       be apparent why this is so.  Therefore, the compiler will not
       attempt to delete previous instructions whose only effect is to
!      store a value in X.  X must be a 'reg' expression.
  
!      In some situations, it may be tempting to add a 'use' of a register
!      in a 'parallel' to describe a situation where the value of a
       special register will modify the behavior of the instruction.  A
       hypothetical example might be a pattern for an addition that can
       either wrap around or use saturating addition depending on the
--- 19545,19585 ----
       register.  Similarly, a combined instruction might require a
       temporary register while the constituent instructions might not.
  
!      When a ‘clobber’ expression for a register appears inside a
!      ‘parallel’ with other side effects, the register allocator
       guarantees that the register is unoccupied both before and after
       that insn if it is a hard register clobber.  For pseudo-register
       clobber, the register allocator and the reload pass do not assign
       the same hard register to the clobber and the input operands if
!      there is an insn alternative containing the ‘&’ constraint (*note
       Modifiers::) for the clobber and the hard register is in register
       classes of the clobber in the alternative.  You can clobber either
!      a specific hard register, a pseudo register, or a ‘scratch’
       expression; in the latter two cases, GCC will allocate a hard
       register that is available there for use as a temporary.
  
       For instructions that require a temporary register, you should use
!      ‘scratch’ instead of a pseudo-register because this will allow the
!      combiner phase to add the ‘clobber’ when required.  You do this by
!      coding (‘clobber’ (‘match_scratch’ ...)).  If you do clobber a
       pseudo register, use one which appears nowhere else--generate a new
       one each time.  Otherwise, you may confuse CSE.
  
       There is one other known use for clobbering a pseudo register in a
!      ‘parallel’: when one of the input operands of the insn is also
       clobbered by the insn.  In this case, using the same pseudo
       register in the clobber and elsewhere in the insn produces the
       expected results.
  
! ‘(use X)’
       Represents the use of the value of X.  It indicates that the value
       in X at this point in the program is needed, even though it may not
       be apparent why this is so.  Therefore, the compiler will not
       attempt to delete previous instructions whose only effect is to
!      store a value in X.  X must be a ‘reg’ expression.
  
!      In some situations, it may be tempting to add a ‘use’ of a register
!      in a ‘parallel’ to describe a situation where the value of a
       special register will modify the behavior of the instruction.  A
       hypothetical example might be a pattern for an addition that can
       either wrap around or use saturating addition depending on the
*************** operands of these.
*** 19587,19622 ****
                                                   (reg:SI 4)] 0))
                       (use (reg:SI 1))])
  
- 
       This will not work, several of the optimizers only look at
       expressions locally; it is very likely that if you have multiple
!      insns with identical inputs to the 'unspec', they will be optimized
       away even if register 1 changes in between.
  
!      This means that 'use' can _only_ be used to describe that the
!      register is live.  You should think twice before adding 'use'
!      statements, more often you will want to use 'unspec' instead.  The
!      'use' RTX is most commonly useful to describe that a fixed register
       is implicitly used in an insn.  It is also safe to use in patterns
       where the compiler knows for other reasons that the result of the
!      whole pattern is variable, such as 'cpymemM' or 'call' patterns.
  
!      During the reload phase, an insn that has a 'use' as pattern can
!      carry a reg_equal note.  These 'use' insns will be deleted before
       the reload phase exits.
  
       During the delayed branch scheduling phase, X may be an insn.  This
       indicates that X previously was located at this place in the code
       and its data dependencies need to be taken into account.  These
!      'use' insns will be deleted before the delayed branch scheduling
       phase exits.
  
! '(parallel [X0 X1 ...])'
       Represents several side effects performed in parallel.  The square
!      brackets stand for a vector; the operand of 'parallel' is a vector
       of expressions.  X0, X1 and so on are individual side effect
!      expressions--expressions of code 'set', 'call', 'return',
!      'simple_return', 'clobber' or 'use'.
  
       "In parallel" means that first all the values used in the
       individual side-effects are computed, and second all the actual
--- 19589,19623 ----
                                                   (reg:SI 4)] 0))
                       (use (reg:SI 1))])
  
       This will not work, several of the optimizers only look at
       expressions locally; it is very likely that if you have multiple
!      insns with identical inputs to the ‘unspec’, they will be optimized
       away even if register 1 changes in between.
  
!      This means that ‘use’ can _only_ be used to describe that the
!      register is live.  You should think twice before adding ‘use’
!      statements, more often you will want to use ‘unspec’ instead.  The
!      ‘use’ RTX is most commonly useful to describe that a fixed register
       is implicitly used in an insn.  It is also safe to use in patterns
       where the compiler knows for other reasons that the result of the
!      whole pattern is variable, such as ‘cpymemM’ or ‘call’ patterns.
  
!      During the reload phase, an insn that has a ‘use’ as pattern can
!      carry a reg_equal note.  These ‘use’ insns will be deleted before
       the reload phase exits.
  
       During the delayed branch scheduling phase, X may be an insn.  This
       indicates that X previously was located at this place in the code
       and its data dependencies need to be taken into account.  These
!      ‘use’ insns will be deleted before the delayed branch scheduling
       phase exits.
  
! ‘(parallel [X0 X1 ...])’
       Represents several side effects performed in parallel.  The square
!      brackets stand for a vector; the operand of ‘parallel’ is a vector
       of expressions.  X0, X1 and so on are individual side effect
!      expressions--expressions of code ‘set’, ‘call’, ‘return’,
!      ‘simple_return’, ‘clobber’ or ‘use’.
  
       "In parallel" means that first all the values used in the
       individual side-effects are computed, and second all the actual
*************** operands of these.
*** 19627,19637 ****
  
       says unambiguously that the values of hard register 1 and the
       memory location addressed by it are interchanged.  In both places
!      where '(reg:SI 1)' appears as a memory address it refers to the
       value in register 1 _before_ the execution of the insn.
  
!      It follows that it is _incorrect_ to use 'parallel' and expect the
!      result of one 'set' to be available for the next one.  For example,
       people sometimes attempt to represent a jump-if-zero instruction
       this way:
  
--- 19628,19638 ----
  
       says unambiguously that the values of hard register 1 and the
       memory location addressed by it are interchanged.  In both places
!      where ‘(reg:SI 1)’ appears as a memory address it refers to the
       value in register 1 _before_ the execution of the insn.
  
!      It follows that it is _incorrect_ to use ‘parallel’ and expect the
!      result of one ‘set’ to be available for the next one.  For example,
       people sometimes attempt to represent a jump-if-zero instruction
       this way:
  
*************** operands of these.
*** 19647,19721 ****
  
       Peephole optimization, which takes place together with final
       assembly code output, can produce insns whose patterns consist of a
!      'parallel' whose elements are the operands needed to output the
!      resulting assembler code--often 'reg', 'mem' or constant
       expressions.  This would not be well-formed RTL at any other stage
       in compilation, but it is OK then because no further optimization
       remains to be done.
  
! '(cond_exec [COND EXPR])'
       Represents a conditionally executed expression.  The EXPR is
       executed only if the COND is nonzero.  The COND expression must not
       have side-effects, but the EXPR may very well have side-effects.
  
! '(sequence [INSNS ...])'
!      Represents a sequence of insns.  If a 'sequence' appears in the
       chain of insns, then each of the INSNS that appears in the sequence
       must be suitable for appearing in the chain of insns, i.e. must
!      satisfy the 'INSN_P' predicate.
  
       After delay-slot scheduling is completed, an insn and all the insns
       that reside in its delay slots are grouped together into a
!      'sequence'.  The insn requiring the delay slot is the first insn in
       the vector; subsequent insns are to be placed in the delay slot.
  
!      'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
       indicate that a branch insn should be used that will conditionally
       annul the effect of the insns in the delay slots.  In such a case,
!      'INSN_FROM_TARGET_P' indicates that the insn is from the target of
       the branch and should be executed only if the branch is taken;
       otherwise the insn should be executed only if the branch is not
       taken.  *Note Delay Slots::.
  
!      Some back ends also use 'sequence' objects for purposes other than
       delay-slot groups.  This is not supported in the common parts of
       the compiler, which treat such sequences as delay-slot groups.
  
       DWARF2 Call Frame Address (CFA) adjustments are sometimes also
!      expressed using 'sequence' objects as the value of a
!      'RTX_FRAME_RELATED_P' note.  This only happens if the CFA
       adjustments cannot be easily derived from the pattern of the
       instruction to which the note is attached.  In such cases, the
       value of the note is used instead of best-guesing the semantics of
       the instruction.  The back end can attach notes containing a
!      'sequence' of 'set' patterns that express the effect of the parent
       instruction.
  
   These expression codes appear in place of a side effect, as the body of
  an insn, though strictly speaking they do not always describe side
  effects as such:
  
! '(asm_input S)'
       Represents literal assembler code as described by the string S.
  
! '(unspec [OPERANDS ...] INDEX)'
! '(unspec_volatile [OPERANDS ...] INDEX)'
       Represents a machine-specific operation on OPERANDS.  INDEX selects
!      between multiple machine-specific operations.  'unspec_volatile' is
!      used for volatile operations and operations that may trap; 'unspec'
       is used for other operations.
  
!      These codes may appear inside a 'pattern' of an insn, inside a
!      'parallel', or inside an expression.
  
! '(addr_vec:M [LR0 LR1 ...])'
       Represents a table of jump addresses.  The vector elements LR0,
!      etc., are 'label_ref' expressions.  The mode M specifies how much
!      space is given to each address; normally M would be 'Pmode'.
  
! '(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
       Represents a table of jump addresses expressed as offsets from
!      BASE.  The vector elements LR0, etc., are 'label_ref' expressions
       and so is BASE.  The mode M specifies how much space is given to
       each address-difference.  MIN and MAX are set up by branch
       shortening and hold a label with a minimum and a maximum address,
--- 19648,19722 ----
  
       Peephole optimization, which takes place together with final
       assembly code output, can produce insns whose patterns consist of a
!      ‘parallel’ whose elements are the operands needed to output the
!      resulting assembler code--often ‘reg’, ‘mem’ or constant
       expressions.  This would not be well-formed RTL at any other stage
       in compilation, but it is OK then because no further optimization
       remains to be done.
  
! ‘(cond_exec [COND EXPR])’
       Represents a conditionally executed expression.  The EXPR is
       executed only if the COND is nonzero.  The COND expression must not
       have side-effects, but the EXPR may very well have side-effects.
  
! ‘(sequence [INSNS ...])’
!      Represents a sequence of insns.  If a ‘sequence’ appears in the
       chain of insns, then each of the INSNS that appears in the sequence
       must be suitable for appearing in the chain of insns, i.e. must
!      satisfy the ‘INSN_P’ predicate.
  
       After delay-slot scheduling is completed, an insn and all the insns
       that reside in its delay slots are grouped together into a
!      ‘sequence’.  The insn requiring the delay slot is the first insn in
       the vector; subsequent insns are to be placed in the delay slot.
  
!      ‘INSN_ANNULLED_BRANCH_P’ is set on an insn in a delay slot to
       indicate that a branch insn should be used that will conditionally
       annul the effect of the insns in the delay slots.  In such a case,
!      ‘INSN_FROM_TARGET_P’ indicates that the insn is from the target of
       the branch and should be executed only if the branch is taken;
       otherwise the insn should be executed only if the branch is not
       taken.  *Note Delay Slots::.
  
!      Some back ends also use ‘sequence’ objects for purposes other than
       delay-slot groups.  This is not supported in the common parts of
       the compiler, which treat such sequences as delay-slot groups.
  
       DWARF2 Call Frame Address (CFA) adjustments are sometimes also
!      expressed using ‘sequence’ objects as the value of a
!      ‘RTX_FRAME_RELATED_P’ note.  This only happens if the CFA
       adjustments cannot be easily derived from the pattern of the
       instruction to which the note is attached.  In such cases, the
       value of the note is used instead of best-guesing the semantics of
       the instruction.  The back end can attach notes containing a
!      ‘sequence’ of ‘set’ patterns that express the effect of the parent
       instruction.
  
   These expression codes appear in place of a side effect, as the body of
  an insn, though strictly speaking they do not always describe side
  effects as such:
  
! ‘(asm_input S)’
       Represents literal assembler code as described by the string S.
  
! ‘(unspec [OPERANDS ...] INDEX)’
! ‘(unspec_volatile [OPERANDS ...] INDEX)’
       Represents a machine-specific operation on OPERANDS.  INDEX selects
!      between multiple machine-specific operations.  ‘unspec_volatile’ is
!      used for volatile operations and operations that may trap; ‘unspec’
       is used for other operations.
  
!      These codes may appear inside a ‘pattern’ of an insn, inside a
!      ‘parallel’, or inside an expression.
  
! ‘(addr_vec:M [LR0 LR1 ...])’
       Represents a table of jump addresses.  The vector elements LR0,
!      etc., are ‘label_ref’ expressions.  The mode M specifies how much
!      space is given to each address; normally M would be ‘Pmode’.
  
! ‘(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)’
       Represents a table of jump addresses expressed as offsets from
!      BASE.  The vector elements LR0, etc., are ‘label_ref’ expressions
       and so is BASE.  The mode M specifies how much space is given to
       each address-difference.  MIN and MAX are set up by branch
       shortening and hold a label with a minimum and a maximum address,
*************** effects as such:
*** 19723,19729 ****
       and MAX to the containing insn and of MIN and MAX to BASE.  See
       rtl.def for details.
  
! '(prefetch:M ADDR RW LOCALITY)'
       Represents prefetch of memory at address ADDR.  Operand RW is 1 if
       the prefetch is for data to be written, 0 otherwise; targets that
       do not support write prefetches should treat this as a normal
--- 19724,19730 ----
       and MAX to the containing insn and of MIN and MAX to BASE.  See
       rtl.def for details.
  
! ‘(prefetch:M ADDR RW LOCALITY)’
       Represents prefetch of memory at address ADDR.  Operand RW is 1 if
       the prefetch is for data to be written, 0 otherwise; targets that
       do not support write prefetches should treat this as a normal
*************** File: gccint.info,  Node: Incdec,  Next:
*** 19744,19753 ****
  
  Six special side-effect expression codes appear as memory addresses.
  
! '(pre_dec:M X)'
       Represents the side effect of decrementing X by a standard amount
       and represents also the value that X has after being decremented.
!      X must be a 'reg' or 'mem', but most machines allow only a 'reg'.
       M must be the machine mode for pointers on the machine in use.  The
       amount X is decremented by is the length in bytes of the machine
       mode of the containing memory reference of which this expression
--- 19745,19754 ----
  
  Six special side-effect expression codes appear as memory addresses.
  
! ‘(pre_dec:M X)’
       Represents the side effect of decrementing X by a standard amount
       and represents also the value that X has after being decremented.
!      X must be a ‘reg’ or ‘mem’, but most machines allow only a ‘reg’.
       M must be the machine mode for pointers on the machine in use.  The
       amount X is decremented by is the length in bytes of the machine
       mode of the containing memory reference of which this expression
*************** Six special side-effect expression codes
*** 19756,19783 ****
            (mem:DF (pre_dec:SI (reg:SI 39)))
  
       This says to decrement pseudo register 39 by the length of a
!      'DFmode' value and use the result to address a 'DFmode' value.
  
! '(pre_inc:M X)'
       Similar, but specifies incrementing X instead of decrementing it.
  
! '(post_dec:M X)'
!      Represents the same side effect as 'pre_dec' but a different value.
       The value represented here is the value X has before being
       decremented.
  
! '(post_inc:M X)'
       Similar, but specifies incrementing X instead of decrementing it.
  
! '(post_modify:M X Y)'
  
       Represents the side effect of setting X to Y and represents X
!      before X is modified.  X must be a 'reg' or 'mem', but most
!      machines allow only a 'reg'.  M must be the machine mode for
       pointers on the machine in use.
  
!      The expression Y must be one of three forms: '(plus:M X Z)',
!      '(minus:M X Z)', or '(plus:M X I)', where Z is an index register
       and I is a constant.
  
       Here is an example of its use:
--- 19757,19784 ----
            (mem:DF (pre_dec:SI (reg:SI 39)))
  
       This says to decrement pseudo register 39 by the length of a
!      ‘DFmode’ value and use the result to address a ‘DFmode’ value.
  
! ‘(pre_inc:M X)’
       Similar, but specifies incrementing X instead of decrementing it.
  
! ‘(post_dec:M X)’
!      Represents the same side effect as ‘pre_dec’ but a different value.
       The value represented here is the value X has before being
       decremented.
  
! ‘(post_inc:M X)’
       Similar, but specifies incrementing X instead of decrementing it.
  
! ‘(post_modify:M X Y)’
  
       Represents the side effect of setting X to Y and represents X
!      before X is modified.  X must be a ‘reg’ or ‘mem’, but most
!      machines allow only a ‘reg’.  M must be the machine mode for
       pointers on the machine in use.
  
!      The expression Y must be one of three forms: ‘(plus:M X Z)’,
!      ‘(minus:M X Z)’, or ‘(plus:M X I)’, where Z is an index register
       and I is a constant.
  
       Here is an example of its use:
*************** Six special side-effect expression codes
*** 19788,19800 ****
       This says to modify pseudo register 42 by adding the contents of
       pseudo register 48 to it, after the use of what ever 42 points to.
  
! '(pre_modify:M X EXPR)'
       Similar except side effects happen before the use.
  
   These embedded side effect expressions must be used with care.
! Instruction patterns may not use them.  Until the 'flow' pass of the
  compiler, they may occur only to represent pushes onto the stack.  The
! 'flow' pass finds cases where registers are incremented or decremented
  in one instruction and used as an address shortly before or after; these
  cases are then transformed to use pre- or post-increment or -decrement.
  
--- 19789,19801 ----
       This says to modify pseudo register 42 by adding the contents of
       pseudo register 48 to it, after the use of what ever 42 points to.
  
! ‘(pre_modify:M X EXPR)’
       Similar except side effects happen before the use.
  
   These embedded side effect expressions must be used with care.
! Instruction patterns may not use them.  Until the ‘flow’ pass of the
  compiler, they may occur only to represent pushes onto the stack.  The
! ‘flow’ pass finds cases where registers are incremented or decremented
  in one instruction and used as an address shortly before or after; these
  cases are then transformed to use pre- or post-increment or -decrement.
  
*************** insns behave differently on different ma
*** 19806,19813 ****
  as ambiguous and disallowed.
  
   An instruction that can be represented with an embedded side effect
! could also be represented using 'parallel' containing an additional
! 'set' to describe how the address register is altered.  This is not done
  because machines that allow these operations at all typically allow them
  wherever a memory address is called for.  Describing them as additional
  parallel stores would require doubling the number of entries in the
--- 19807,19814 ----
  as ambiguous and disallowed.
  
   An instruction that can be represented with an embedded side effect
! could also be represented using ‘parallel’ containing an additional
! ‘set’ to describe how the address register is altered.  This is not done
  because machines that allow these operations at all typically allow them
  wherever a memory address is called for.  Describing them as additional
  parallel stores would require doubling the number of entries in the
*************** File: gccint.info,  Node: Assembler,  Ne
*** 19819,19833 ****
  14.17 Assembler Instructions as Expressions
  ===========================================
  
! The RTX code 'asm_operands' represents a value produced by a
! user-specified assembler instruction.  It is used to represent an 'asm'
! statement with arguments.  An 'asm' statement with a single output
  operand, like this:
  
       asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
  
! is represented using a single 'asm_operands' RTX which represents the
! value that is stored in 'outputvar':
  
       (set RTX-FOR-OUTPUTVAR
            (asm_operands "foo %1,%2,%0" "a" 0
--- 19820,19834 ----
  14.17 Assembler Instructions as Expressions
  ===========================================
  
! The RTX code ‘asm_operands’ represents a value produced by a
! user-specified assembler instruction.  It is used to represent an ‘asm’
! statement with arguments.  An ‘asm’ statement with a single output
  operand, like this:
  
       asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
  
! is represented using a single ‘asm_operands’ RTX which represents the
! value that is stored in ‘outputvar’:
  
       (set RTX-FOR-OUTPUTVAR
            (asm_operands "foo %1,%2,%0" "a" 0
*************** value that is stored in 'outputvar':
*** 19835,19849 ****
                          [(asm_input:M1 "g")
                           (asm_input:M2 "di")]))
  
! Here the operands of the 'asm_operands' RTX are the assembler template
  string, the output-operand's constraint, the index-number of the output
  operand among the output operands specified, a vector of input operand
  RTX's, and a vector of input-operand modes and constraints.  The mode M1
! is the mode of the sum 'x+y'; M2 is that of '*z'.
  
!  When an 'asm' statement has multiple output values, its insn has
! several such 'set' RTX's inside of a 'parallel'.  Each 'set' contains an
! 'asm_operands'; all of these share the same assembler template and
  vectors, but each contains the constraint for the respective output
  operand.  They are also distinguished by the output-operand index
  number, which is 0, 1, ... for successive output operands.
--- 19836,19850 ----
                          [(asm_input:M1 "g")
                           (asm_input:M2 "di")]))
  
! Here the operands of the ‘asm_operands’ RTX are the assembler template
  string, the output-operand's constraint, the index-number of the output
  operand among the output operands specified, a vector of input operand
  RTX's, and a vector of input-operand modes and constraints.  The mode M1
! is the mode of the sum ‘x+y’; M2 is that of ‘*z’.
  
!  When an ‘asm’ statement has multiple output values, its insn has
! several such ‘set’ RTX's inside of a ‘parallel’.  Each ‘set’ contains an
! ‘asm_operands’; all of these share the same assembler template and
  vectors, but each contains the constraint for the respective output
  operand.  They are also distinguished by the output-operand index
  number, which is 0, 1, ... for successive output operands.
*************** File: gccint.info,  Node: Debug Informat
*** 19854,19860 ****
  14.18 Variable Location Debug Information in RTL
  ================================================
  
! Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to
  determine what user variables memory and register references refer to.
  
   Variable tracking at assignments uses these notes only when they refer
--- 19855,19861 ----
  14.18 Variable Location Debug Information in RTL
  ================================================
  
! Variable tracking relies on ‘MEM_EXPR’ and ‘REG_EXPR’ annotations to
  determine what user variables memory and register references refer to.
  
   Variable tracking at assignments uses these notes only when they refer
*************** to variables that live at fixed location
*** 19862,19896 ****
  global non-automatic variables).  For variables whose location may vary,
  it relies on the following types of notes.
  
! '(var_location:MODE VAR EXP STAT)'
!      Binds variable 'var', a tree, to value EXP, an RTL expression.  It
!      appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with
       slightly different meanings.  MODE, if present, represents the mode
       of EXP, which is useful if it is a modeless expression.  STAT is
       only meaningful in notes, indicating whether the variable is known
       to be initialized or uninitialized.
  
! '(debug_expr:MODE DECL)'
!      Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that
!      points back to it, within value expressions in 'VAR_LOCATION'
       nodes.
  
! '(debug_implicit_ptr:MODE DECL)'
       Stands for the location of a DECL that is no longer addressable.
  
! '(entry_value:MODE DECL)'
       Stands for the value a DECL had at the entry point of the
       containing function.
  
! '(debug_parameter_ref:MODE DECL)'
       Refers to a parameter that was completely optimized out.
  
! '(debug_marker:MODE)'
!      Marks a program location.  With 'VOIDmode', it stands for the
       beginning of a statement, a recommended inspection point logically
       after all prior side effects, and before any subsequent side
!      effects.  With 'BLKmode', it indicates an inline entry point: the
!      lexical block encoded in the 'INSN_LOCATION' is the enclosing block
       that encloses the inlined function.
  
  
--- 19863,19897 ----
  global non-automatic variables).  For variables whose location may vary,
  it relies on the following types of notes.
  
! ‘(var_location:MODE VAR EXP STAT)’
!      Binds variable ‘var’, a tree, to value EXP, an RTL expression.  It
!      appears only in ‘NOTE_INSN_VAR_LOCATION’ and ‘DEBUG_INSN’s, with
       slightly different meanings.  MODE, if present, represents the mode
       of EXP, which is useful if it is a modeless expression.  STAT is
       only meaningful in notes, indicating whether the variable is known
       to be initialized or uninitialized.
  
! ‘(debug_expr:MODE DECL)’
!      Stands for the value bound to the ‘DEBUG_EXPR_DECL’ DECL, that
!      points back to it, within value expressions in ‘VAR_LOCATION’
       nodes.
  
! ‘(debug_implicit_ptr:MODE DECL)’
       Stands for the location of a DECL that is no longer addressable.
  
! ‘(entry_value:MODE DECL)’
       Stands for the value a DECL had at the entry point of the
       containing function.
  
! ‘(debug_parameter_ref:MODE DECL)’
       Refers to a parameter that was completely optimized out.
  
! ‘(debug_marker:MODE)’
!      Marks a program location.  With ‘VOIDmode’, it stands for the
       beginning of a statement, a recommended inspection point logically
       after all prior side effects, and before any subsequent side
!      effects.  With ‘BLKmode’, it indicates an inline entry point: the
!      lexical block encoded in the ‘INSN_LOCATION’ is the enclosing block
       that encloses the inlined function.
  
  
*************** File: gccint.info,  Node: Insns,  Next:
*** 19900,19908 ****
  ===========
  
  The RTL representation of the code for a function is a doubly-linked
! chain of objects called "insns".  Insns are expressions with special
  codes that are used for no other purpose.  Some insns are actual
! instructions; others represent dispatch tables for 'switch' statements;
  others represent labels to jump to or various sorts of declarative
  information.
  
--- 19901,19909 ----
  ===========
  
  The RTL representation of the code for a function is a doubly-linked
! chain of objects called “insns”.  Insns are expressions with special
  codes that are used for no other purpose.  Some insns are actual
! instructions; others represent dispatch tables for ‘switch’ statements;
  others represent labels to jump to or various sorts of declarative
  information.
  
*************** id-number that distinguishes it from all
*** 19911,19935 ****
  function (after delayed branch scheduling, copies of an insn with the
  same id-number may be present in multiple places in a function, but
  these copies will always be identical and will only appear inside a
! 'sequence'), and chain pointers to the preceding and following insns.
  These three fields occupy the same position in every insn, independent
! of the expression code of the insn.  They could be accessed with 'XEXP'
! and 'XINT', but instead three special macros are always used:
  
! 'INSN_UID (I)'
       Accesses the unique id of insn I.
  
! 'PREV_INSN (I)'
       Accesses the chain pointer to the insn preceding I.  If I is the
       first insn, this is a null pointer.
  
! 'NEXT_INSN (I)'
       Accesses the chain pointer to the insn following I.  If I is the
       last insn, this is a null pointer.
  
!  The first insn in the chain is obtained by calling 'get_insns'; the
! last insn is the result of calling 'get_last_insn'.  Within the chain
! delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must
  always correspond: if INSN is not the first insn,
  
       NEXT_INSN (PREV_INSN (INSN)) == INSN
--- 19912,19936 ----
  function (after delayed branch scheduling, copies of an insn with the
  same id-number may be present in multiple places in a function, but
  these copies will always be identical and will only appear inside a
! ‘sequence’), and chain pointers to the preceding and following insns.
  These three fields occupy the same position in every insn, independent
! of the expression code of the insn.  They could be accessed with ‘XEXP’
! and ‘XINT’, but instead three special macros are always used:
  
! ‘INSN_UID (I)’
       Accesses the unique id of insn I.
  
! ‘PREV_INSN (I)’
       Accesses the chain pointer to the insn preceding I.  If I is the
       first insn, this is a null pointer.
  
! ‘NEXT_INSN (I)’
       Accesses the chain pointer to the insn following I.  If I is the
       last insn, this is a null pointer.
  
!  The first insn in the chain is obtained by calling ‘get_insns’; the
! last insn is the result of calling ‘get_last_insn’.  Within the chain
! delimited by these insns, the ‘NEXT_INSN’ and ‘PREV_INSN’ pointers must
  always correspond: if INSN is not the first insn,
  
       NEXT_INSN (PREV_INSN (INSN)) == INSN
*************** is always true and if INSN is not the la
*** 19941,20048 ****
  is always true.
  
   After delay slot scheduling, some of the insns in the chain might be
! 'sequence' expressions, which contain a vector of insns.  The value of
! 'NEXT_INSN' in all but the last of these insns is the next insn in the
! vector; the value of 'NEXT_INSN' of the last insn in the vector is the
! same as the value of 'NEXT_INSN' for the 'sequence' in which it is
! contained.  Similar rules apply for 'PREV_INSN'.
  
   This means that the above invariants are not necessarily true for insns
! inside 'sequence' expressions.  Specifically, if INSN is the first insn
! in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing
! the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN
! (INSN))' if INSN is the last insn in the 'sequence' expression.  You can
! use these expressions to find the containing 'sequence' expression.
  
   Every insn has one of the following expression codes:
  
! 'insn'
!      The expression code 'insn' is used for instructions that do not
!      jump and do not do function calls.  'sequence' expressions are
!      always contained in insns with code 'insn' even if one of those
       insns should jump or do function calls.
  
!      Insns with code 'insn' have four additional fields beyond the three
       mandatory ones listed above.  These four are described in a table
       below.
  
! 'jump_insn'
!      The expression code 'jump_insn' is used for instructions that may
!      jump (or, more generally, may contain 'label_ref' expressions to
!      which 'pc' can be set in that instruction).  If there is an
       instruction to return from the current function, it is recorded as
!      a 'jump_insn'.
  
!      'jump_insn' insns have the same extra fields as 'insn' insns,
       accessed in the same way and in addition contain a field
!      'JUMP_LABEL' which is defined once jump optimization has completed.
  
       For simple conditional and unconditional jumps, this field contains
!      the 'code_label' to which this insn will (possibly conditionally)
!      branch.  In a more complex jump, 'JUMP_LABEL' records one of the
       labels that the insn refers to; other jump target labels are
!      recorded as 'REG_LABEL_TARGET' notes.  The exception is 'addr_vec'
!      and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only
       way to find the labels is to scan the entire body of the insn.
  
!      Return insns count as jumps, but their 'JUMP_LABEL' is 'RETURN' or
!      'SIMPLE_RETURN'.
  
! 'call_insn'
!      The expression code 'call_insn' is used for instructions that may
       do function calls.  It is important to distinguish these
       instructions because they imply that certain registers and memory
       locations may be altered unpredictably.
  
!      'call_insn' insns have the same extra fields as 'insn' insns,
       accessed in the same way and in addition contain a field
!      'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
!      'expr_list' expressions) containing 'use', 'clobber' and sometimes
!      'set' expressions that denote hard registers and 'mem's used or
       clobbered by the called function.
  
!      A 'mem' generally points to a stack slot in which arguments passed
       to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
       Register Arguments.) are stored.  If the argument is caller-copied
       (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
!      will be mentioned in 'clobber' and 'use' entries; if it's
!      callee-copied, only a 'use' will appear, and the 'mem' may point to
       addresses that are not stack slots.
  
!      Registers occurring inside a 'clobber' in this list augment
!      registers specified in 'CALL_USED_REGISTERS' (*note Register
       Basics::).
  
!      If the list contains a 'set' involving two registers, it indicates
!      that the function returns one of its arguments.  Such a 'set' may
       look like a no-op if the same register holds the argument and the
       return value.
  
! 'code_label'
!      A 'code_label' insn represents a label that a jump insn can jump
       to.  It contains two special fields of data in addition to the
!      three standard ones.  'CODE_LABEL_NUMBER' is used to hold the
!      "label number", a number that identifies this label uniquely among
       all the labels in the compilation (not just in the current
       function).  Ultimately, the label is represented in the assembler
!      output as an assembler label, usually of the form 'LN' where N is
       the label number.
  
!      When a 'code_label' appears in an RTL expression, it normally
!      appears within a 'label_ref' which represents the address of the
       label, as a number.
  
!      Besides as a 'code_label', a label can also be represented as a
!      'note' of type 'NOTE_INSN_DELETED_LABEL'.
  
!      The field 'LABEL_NUSES' is only defined once the jump optimization
       phase is completed.  It contains the number of times this label is
       referenced in the current function.
  
!      The field 'LABEL_KIND' differentiates four different types of
!      labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY',
!      and 'LABEL_WEAK_ENTRY'.  The only labels that do not have type
!      'LABEL_NORMAL' are "alternate entry points" to the current
       function.  These may be static (visible only in the containing
       translation unit), global (exposed to all translation units), or
       weak (global, but can be overridden by another symbol with the same
--- 19942,20049 ----
  is always true.
  
   After delay slot scheduling, some of the insns in the chain might be
! ‘sequence’ expressions, which contain a vector of insns.  The value of
! ‘NEXT_INSN’ in all but the last of these insns is the next insn in the
! vector; the value of ‘NEXT_INSN’ of the last insn in the vector is the
! same as the value of ‘NEXT_INSN’ for the ‘sequence’ in which it is
! contained.  Similar rules apply for ‘PREV_INSN’.
  
   This means that the above invariants are not necessarily true for insns
! inside ‘sequence’ expressions.  Specifically, if INSN is the first insn
! in a ‘sequence’, ‘NEXT_INSN (PREV_INSN (INSN))’ is the insn containing
! the ‘sequence’ expression, as is the value of ‘PREV_INSN (NEXT_INSN
! (INSN))’ if INSN is the last insn in the ‘sequence’ expression.  You can
! use these expressions to find the containing ‘sequence’ expression.
  
   Every insn has one of the following expression codes:
  
! ‘insn’
!      The expression code ‘insn’ is used for instructions that do not
!      jump and do not do function calls.  ‘sequence’ expressions are
!      always contained in insns with code ‘insn’ even if one of those
       insns should jump or do function calls.
  
!      Insns with code ‘insn’ have four additional fields beyond the three
       mandatory ones listed above.  These four are described in a table
       below.
  
! ‘jump_insn’
!      The expression code ‘jump_insn’ is used for instructions that may
!      jump (or, more generally, may contain ‘label_ref’ expressions to
!      which ‘pc’ can be set in that instruction).  If there is an
       instruction to return from the current function, it is recorded as
!      a ‘jump_insn’.
  
!      ‘jump_insn’ insns have the same extra fields as ‘insn’ insns,
       accessed in the same way and in addition contain a field
!      ‘JUMP_LABEL’ which is defined once jump optimization has completed.
  
       For simple conditional and unconditional jumps, this field contains
!      the ‘code_label’ to which this insn will (possibly conditionally)
!      branch.  In a more complex jump, ‘JUMP_LABEL’ records one of the
       labels that the insn refers to; other jump target labels are
!      recorded as ‘REG_LABEL_TARGET’ notes.  The exception is ‘addr_vec’
!      and ‘addr_diff_vec’, where ‘JUMP_LABEL’ is ‘NULL_RTX’ and the only
       way to find the labels is to scan the entire body of the insn.
  
!      Return insns count as jumps, but their ‘JUMP_LABEL’ is ‘RETURN’ or
!      ‘SIMPLE_RETURN’.
  
! ‘call_insn’
!      The expression code ‘call_insn’ is used for instructions that may
       do function calls.  It is important to distinguish these
       instructions because they imply that certain registers and memory
       locations may be altered unpredictably.
  
!      ‘call_insn’ insns have the same extra fields as ‘insn’ insns,
       accessed in the same way and in addition contain a field
!      ‘CALL_INSN_FUNCTION_USAGE’, which contains a list (chain of
!      ‘expr_list’ expressions) containing ‘use’, ‘clobber’ and sometimes
!      ‘set’ expressions that denote hard registers and ‘mem’s used or
       clobbered by the called function.
  
!      A ‘mem’ generally points to a stack slot in which arguments passed
       to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
       Register Arguments.) are stored.  If the argument is caller-copied
       (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
!      will be mentioned in ‘clobber’ and ‘use’ entries; if it's
!      callee-copied, only a ‘use’ will appear, and the ‘mem’ may point to
       addresses that are not stack slots.
  
!      Registers occurring inside a ‘clobber’ in this list augment
!      registers specified in ‘CALL_USED_REGISTERS’ (*note Register
       Basics::).
  
!      If the list contains a ‘set’ involving two registers, it indicates
!      that the function returns one of its arguments.  Such a ‘set’ may
       look like a no-op if the same register holds the argument and the
       return value.
  
! ‘code_label’
!      A ‘code_label’ insn represents a label that a jump insn can jump
       to.  It contains two special fields of data in addition to the
!      three standard ones.  ‘CODE_LABEL_NUMBER’ is used to hold the
!      “label number”, a number that identifies this label uniquely among
       all the labels in the compilation (not just in the current
       function).  Ultimately, the label is represented in the assembler
!      output as an assembler label, usually of the form ‘LN’ where N is
       the label number.
  
!      When a ‘code_label’ appears in an RTL expression, it normally
!      appears within a ‘label_ref’ which represents the address of the
       label, as a number.
  
!      Besides as a ‘code_label’, a label can also be represented as a
!      ‘note’ of type ‘NOTE_INSN_DELETED_LABEL’.
  
!      The field ‘LABEL_NUSES’ is only defined once the jump optimization
       phase is completed.  It contains the number of times this label is
       referenced in the current function.
  
!      The field ‘LABEL_KIND’ differentiates four different types of
!      labels: ‘LABEL_NORMAL’, ‘LABEL_STATIC_ENTRY’, ‘LABEL_GLOBAL_ENTRY’,
!      and ‘LABEL_WEAK_ENTRY’.  The only labels that do not have type
!      ‘LABEL_NORMAL’ are “alternate entry points” to the current
       function.  These may be static (visible only in the containing
       translation unit), global (exposed to all translation units), or
       weak (global, but can be overridden by another symbol with the same
*************** use these expressions to find the contai
*** 20050,20138 ****
  
       Much of the compiler treats all four kinds of label identically.
       Some of it needs to know whether or not a label is an alternate
!      entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is
!      provided.  It is equivalent to testing whether 'LABEL_KIND (label)
!      == LABEL_NORMAL'.  The only place that cares about the distinction
       between static, global, and weak alternate entry points, besides
       the front-end code that creates them, is the function
!      'output_alternate_entry_point', in 'final.cc'.
  
!      To set the kind of a label, use the 'SET_LABEL_KIND' macro.
  
! 'jump_table_data'
!      A 'jump_table_data' insn is a placeholder for the jump-table data
!      of a 'casesi' or 'tablejump' insn.  They are placed after a
!      'tablejump_p' insn.  A 'jump_table_data' insn is not part o a basic
       blockm but it is associated with the basic block that ends with the
!      'tablejump_p' insn.  The 'PATTERN' of a 'jump_table_data' is always
!      either an 'addr_vec' or an 'addr_diff_vec', and a 'jump_table_data'
!      insn is always preceded by a 'code_label'.  The 'tablejump_p' insn
!      refers to that 'code_label' via its 'JUMP_LABEL'.
  
! 'barrier'
       Barriers are placed in the instruction stream when control cannot
       flow past them.  They are placed after unconditional jump
       instructions to indicate that the jumps are unconditional and after
!      calls to 'volatile' functions, which do not return (e.g., 'exit').
       They contain no information beyond the three standard fields.
  
! 'note'
!      'note' insns are used to represent additional debugging and
       declarative information.  They contain two nonstandard fields, an
!      integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a
!      string accessed with 'NOTE_SOURCE_FILE'.
  
!      If 'NOTE_LINE_NUMBER' is positive, the note represents the position
!      of a source line and 'NOTE_SOURCE_FILE' is the source file name
       that the line came from.  These notes control generation of line
       number data in the assembler output.
  
!      Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a
!      code with one of the following values (and 'NOTE_SOURCE_FILE' must
       contain a null pointer):
  
!      'NOTE_INSN_DELETED'
            Such a note is completely ignorable.  Some passes of the
            compiler delete insns by altering them into notes of this
            kind.
  
!      'NOTE_INSN_DELETED_LABEL'
!           This marks what used to be a 'code_label', but was not used
            for other purposes than taking its address and was transformed
            to mark that no code jumps to it.
  
!      'NOTE_INSN_BLOCK_BEG'
!      'NOTE_INSN_BLOCK_END'
            These types of notes indicate the position of the beginning
            and end of a level of scoping of variable names.  They control
            the output of debugging information.
  
!      'NOTE_INSN_EH_REGION_BEG'
!      'NOTE_INSN_EH_REGION_END'
            These types of notes indicate the position of the beginning
            and end of a level of scoping for exception handling.
!           'NOTE_EH_HANDLER' identifies which region is associated with
            these notes.
  
!      'NOTE_INSN_FUNCTION_BEG'
            Appears at the start of the function body, after the function
            prologue.
  
!      'NOTE_INSN_VAR_LOCATION'
            This note is used to generate variable location debugging
            information.  It indicates that the user variable in its
!           'VAR_LOCATION' operand is at the location given in the RTL
            expression, or holds a value that can be computed by
            evaluating the RTL expression from that static point in the
            program up to the next such note for the same user variable.
  
!      'NOTE_INSN_BEGIN_STMT'
!           This note is used to generate 'is_stmt' markers in line number
            debugging information.  It indicates the beginning of a user
            statement.
  
!      'NOTE_INSN_INLINE_ENTRY'
!           This note is used to generate 'entry_pc' for inlined
            subroutines in debugging information.  It indicates an
            inspection point at which all arguments for the inlined
            function have been bound, and before its first statement.
--- 20051,20139 ----
  
       Much of the compiler treats all four kinds of label identically.
       Some of it needs to know whether or not a label is an alternate
!      entry point; for this purpose, the macro ‘LABEL_ALT_ENTRY_P’ is
!      provided.  It is equivalent to testing whether ‘LABEL_KIND (label)
!      == LABEL_NORMAL’.  The only place that cares about the distinction
       between static, global, and weak alternate entry points, besides
       the front-end code that creates them, is the function
!      ‘output_alternate_entry_point’, in ‘final.cc’.
  
!      To set the kind of a label, use the ‘SET_LABEL_KIND’ macro.
  
! ‘jump_table_data’
!      A ‘jump_table_data’ insn is a placeholder for the jump-table data
!      of a ‘casesi’ or ‘tablejump’ insn.  They are placed after a
!      ‘tablejump_p’ insn.  A ‘jump_table_data’ insn is not part o a basic
       blockm but it is associated with the basic block that ends with the
!      ‘tablejump_p’ insn.  The ‘PATTERN’ of a ‘jump_table_data’ is always
!      either an ‘addr_vec’ or an ‘addr_diff_vec’, and a ‘jump_table_data’
!      insn is always preceded by a ‘code_label’.  The ‘tablejump_p’ insn
!      refers to that ‘code_label’ via its ‘JUMP_LABEL’.
  
! ‘barrier’
       Barriers are placed in the instruction stream when control cannot
       flow past them.  They are placed after unconditional jump
       instructions to indicate that the jumps are unconditional and after
!      calls to ‘volatile’ functions, which do not return (e.g., ‘exit’).
       They contain no information beyond the three standard fields.
  
! ‘note’
!      ‘note’ insns are used to represent additional debugging and
       declarative information.  They contain two nonstandard fields, an
!      integer which is accessed with the macro ‘NOTE_LINE_NUMBER’ and a
!      string accessed with ‘NOTE_SOURCE_FILE’.
  
!      If ‘NOTE_LINE_NUMBER’ is positive, the note represents the position
!      of a source line and ‘NOTE_SOURCE_FILE’ is the source file name
       that the line came from.  These notes control generation of line
       number data in the assembler output.
  
!      Otherwise, ‘NOTE_LINE_NUMBER’ is not really a line number but a
!      code with one of the following values (and ‘NOTE_SOURCE_FILE’ must
       contain a null pointer):
  
!      ‘NOTE_INSN_DELETED’
            Such a note is completely ignorable.  Some passes of the
            compiler delete insns by altering them into notes of this
            kind.
  
!      ‘NOTE_INSN_DELETED_LABEL’
!           This marks what used to be a ‘code_label’, but was not used
            for other purposes than taking its address and was transformed
            to mark that no code jumps to it.
  
!      ‘NOTE_INSN_BLOCK_BEG’
!      ‘NOTE_INSN_BLOCK_END’
            These types of notes indicate the position of the beginning
            and end of a level of scoping of variable names.  They control
            the output of debugging information.
  
!      ‘NOTE_INSN_EH_REGION_BEG’
!      ‘NOTE_INSN_EH_REGION_END’
            These types of notes indicate the position of the beginning
            and end of a level of scoping for exception handling.
!           ‘NOTE_EH_HANDLER’ identifies which region is associated with
            these notes.
  
!      ‘NOTE_INSN_FUNCTION_BEG’
            Appears at the start of the function body, after the function
            prologue.
  
!      ‘NOTE_INSN_VAR_LOCATION’
            This note is used to generate variable location debugging
            information.  It indicates that the user variable in its
!           ‘VAR_LOCATION’ operand is at the location given in the RTL
            expression, or holds a value that can be computed by
            evaluating the RTL expression from that static point in the
            program up to the next such note for the same user variable.
  
!      ‘NOTE_INSN_BEGIN_STMT’
!           This note is used to generate ‘is_stmt’ markers in line number
            debugging information.  It indicates the beginning of a user
            statement.
  
!      ‘NOTE_INSN_INLINE_ENTRY’
!           This note is used to generate ‘entry_pc’ for inlined
            subroutines in debugging information.  It indicates an
            inspection point at which all arguments for the inlined
            function have been bound, and before its first statement.
*************** use these expressions to find the contai
*** 20140,20249 ****
       These codes are printed symbolically when they appear in debugging
       dumps.
  
! 'debug_insn'
!      The expression code 'debug_insn' is used for pseudo-instructions
       that hold debugging information for variable tracking at
!      assignments (see '-fvar-tracking-assignments' option).  They are
!      the RTL representation of 'GIMPLE_DEBUG' statements (*note
!      GIMPLE_DEBUG::), with a 'VAR_LOCATION' operand that binds a user
!      variable tree to an RTL representation of the 'value' in the
!      corresponding statement.  A 'DEBUG_EXPR' in it stands for the value
!      bound to the corresponding 'DEBUG_EXPR_DECL'.
  
!      'GIMPLE_DEBUG_BEGIN_STMT' and 'GIMPLE_DEBUG_INLINE_ENTRY' are
!      expanded to RTL as a 'DEBUG_INSN' with a 'DEBUG_MARKER' 'PATTERN';
!      the difference is the RTL mode: the former's 'DEBUG_MARKER' is
!      'VOIDmode', whereas the latter is 'BLKmode'; information about the
       inlined function can be taken from the lexical block encoded in the
!      'INSN_LOCATION'.  These 'DEBUG_INSN's, that do not carry
!      'VAR_LOCATION' information, just 'DEBUG_MARKER's, can be detected
!      by testing 'DEBUG_MARKER_INSN_P', whereas those that do can be
!      recognized as 'DEBUG_BIND_INSN_P'.
  
!      Throughout optimization passes, 'DEBUG_INSN's are not reordered
       with respect to each other, particularly during scheduling.
       Binding information is kept in pseudo-instruction form, so that,
       unlike notes, it gets the same treatment and adjustments that
       regular instructions would.  It is the variable tracking pass that
!      turns these pseudo-instructions into 'NOTE_INSN_VAR_LOCATION',
!      'NOTE_INSN_BEGIN_STMT' and 'NOTE_INSN_INLINE_ENTRY' notes,
       analyzing control flow, value equivalences and changes to registers
       and memory referenced in value expressions, propagating the values
       of debug temporaries and determining expressions that can be used
       to compute the value of each user variable at as many points
       (ranges, actually) in the program as possible.
  
!      Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an
!      'INSN_VAR_LOCATION' denotes a value at that specific point in the
       program, rather than an expression that can be evaluated at any
!      later point before an overriding 'VAR_LOCATION' is encountered.
!      E.g., if a user variable is bound to a 'REG' and then a subsequent
!      insn modifies the 'REG', the note location would keep mapping the
       user variable to the register across the insn, whereas the insn
       location would keep the variable bound to the value, so that the
       variable tracking pass would emit another location note for the
       variable at the point in which the register is modified.
  
!  The machine mode of an insn is normally 'VOIDmode', but some phases use
  the mode for various purposes.
  
   The common subexpression elimination pass sets the mode of an insn to
! 'QImode' when it is the first insn in a block that has already been
  processed.
  
   The second Haifa scheduling pass, for targets that can multiple issue,
! sets the mode of an insn to 'TImode' when it is believed that the
  instruction begins an issue group.  That is, when the instruction cannot
  issue simultaneously with the previous.  This may be relied on by later
  passes, in particular machine-dependent reorg.
  
!  Here is a table of the extra fields of 'insn', 'jump_insn' and
! 'call_insn' insns:
  
! 'PATTERN (I)'
       An expression for the side effect performed by this insn.  This
!      must be one of the following codes: 'set', 'call', 'use',
!      'clobber', 'return', 'simple_return', 'asm_input', 'asm_output',
!      'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec',
!      'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'.  If it
!      is a 'parallel', each element of the 'parallel' must be one these
!      codes, except that 'parallel' expressions cannot be nested and
!      'addr_vec' and 'addr_diff_vec' are not permitted inside a
!      'parallel' expression.
  
! 'INSN_CODE (I)'
       An integer that says which pattern in the machine description
!      matches this insn, or -1 if the matching has not yet been
       attempted.
  
!      Such matching is never attempted and this field remains -1 on an
!      insn whose pattern consists of a single 'use', 'clobber',
!      'asm_input', 'addr_vec' or 'addr_diff_vec' expression.
  
!      Matching is also never attempted on insns that result from an 'asm'
!      statement.  These contain at least one 'asm_operands' expression.
!      The function 'asm_noperands' returns a non-negative value for such
       insns.
  
       In the debugging output, this field is printed as a number followed
!      by a symbolic representation that locates the pattern in the 'md'
       file as some small positive or negative offset from a named
       pattern.
  
! 'REG_NOTES (I)'
!      A list (chain of 'expr_list', 'insn_list' and 'int_list'
       expressions) giving miscellaneous information about the insn.  It
       is often information pertaining to the registers used in this insn.
  
!  The 'REG_NOTES' field of an insn is a chain that includes 'expr_list'
! and 'int_list' expressions as well as 'insn_list' expressions.  There
  are several kinds of register notes, which are distinguished by the
  machine mode, which in a register note is really understood as being an
! 'enum reg_note'.  The first operand OP of the note is data whose meaning
  depends on the kind of note.
  
!  The macro 'REG_NOTE_KIND (X)' returns the kind of register note.  Its
! counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
  register note type of X to be NEWKIND.
  
   Register notes are of three classes: They may say something about an
--- 20141,20250 ----
       These codes are printed symbolically when they appear in debugging
       dumps.
  
! ‘debug_insn’
!      The expression code ‘debug_insn’ is used for pseudo-instructions
       that hold debugging information for variable tracking at
!      assignments (see ‘-fvar-tracking-assignments’ option).  They are
!      the RTL representation of ‘GIMPLE_DEBUG’ statements (*note
!      GIMPLE_DEBUG::), with a ‘VAR_LOCATION’ operand that binds a user
!      variable tree to an RTL representation of the ‘value’ in the
!      corresponding statement.  A ‘DEBUG_EXPR’ in it stands for the value
!      bound to the corresponding ‘DEBUG_EXPR_DECL’.
  
!      ‘GIMPLE_DEBUG_BEGIN_STMT’ and ‘GIMPLE_DEBUG_INLINE_ENTRY’ are
!      expanded to RTL as a ‘DEBUG_INSN’ with a ‘DEBUG_MARKER’ ‘PATTERN’;
!      the difference is the RTL mode: the former's ‘DEBUG_MARKER’ is
!      ‘VOIDmode’, whereas the latter is ‘BLKmode’; information about the
       inlined function can be taken from the lexical block encoded in the
!      ‘INSN_LOCATION’.  These ‘DEBUG_INSN’s, that do not carry
!      ‘VAR_LOCATION’ information, just ‘DEBUG_MARKER’s, can be detected
!      by testing ‘DEBUG_MARKER_INSN_P’, whereas those that do can be
!      recognized as ‘DEBUG_BIND_INSN_P’.
  
!      Throughout optimization passes, ‘DEBUG_INSN’s are not reordered
       with respect to each other, particularly during scheduling.
       Binding information is kept in pseudo-instruction form, so that,
       unlike notes, it gets the same treatment and adjustments that
       regular instructions would.  It is the variable tracking pass that
!      turns these pseudo-instructions into ‘NOTE_INSN_VAR_LOCATION’,
!      ‘NOTE_INSN_BEGIN_STMT’ and ‘NOTE_INSN_INLINE_ENTRY’ notes,
       analyzing control flow, value equivalences and changes to registers
       and memory referenced in value expressions, propagating the values
       of debug temporaries and determining expressions that can be used
       to compute the value of each user variable at as many points
       (ranges, actually) in the program as possible.
  
!      Unlike ‘NOTE_INSN_VAR_LOCATION’, the value expression in an
!      ‘INSN_VAR_LOCATION’ denotes a value at that specific point in the
       program, rather than an expression that can be evaluated at any
!      later point before an overriding ‘VAR_LOCATION’ is encountered.
!      E.g., if a user variable is bound to a ‘REG’ and then a subsequent
!      insn modifies the ‘REG’, the note location would keep mapping the
       user variable to the register across the insn, whereas the insn
       location would keep the variable bound to the value, so that the
       variable tracking pass would emit another location note for the
       variable at the point in which the register is modified.
  
!  The machine mode of an insn is normally ‘VOIDmode’, but some phases use
  the mode for various purposes.
  
   The common subexpression elimination pass sets the mode of an insn to
! ‘QImode’ when it is the first insn in a block that has already been
  processed.
  
   The second Haifa scheduling pass, for targets that can multiple issue,
! sets the mode of an insn to ‘TImode’ when it is believed that the
  instruction begins an issue group.  That is, when the instruction cannot
  issue simultaneously with the previous.  This may be relied on by later
  passes, in particular machine-dependent reorg.
  
!  Here is a table of the extra fields of ‘insn’, ‘jump_insn’ and
! ‘call_insn’ insns:
  
! ‘PATTERN (I)’
       An expression for the side effect performed by this insn.  This
!      must be one of the following codes: ‘set’, ‘call’, ‘use’,
!      ‘clobber’, ‘return’, ‘simple_return’, ‘asm_input’, ‘asm_output’,
!      ‘addr_vec’, ‘addr_diff_vec’, ‘trap_if’, ‘unspec’,
!      ‘unspec_volatile’, ‘parallel’, ‘cond_exec’, or ‘sequence’.  If it
!      is a ‘parallel’, each element of the ‘parallel’ must be one these
!      codes, except that ‘parallel’ expressions cannot be nested and
!      ‘addr_vec’ and ‘addr_diff_vec’ are not permitted inside a
!      ‘parallel’ expression.
  
! ‘INSN_CODE (I)’
       An integer that says which pattern in the machine description
!      matches this insn, or −1 if the matching has not yet been
       attempted.
  
!      Such matching is never attempted and this field remains −1 on an
!      insn whose pattern consists of a single ‘use’, ‘clobber’,
!      ‘asm_input’, ‘addr_vec’ or ‘addr_diff_vec’ expression.
  
!      Matching is also never attempted on insns that result from an ‘asm’
!      statement.  These contain at least one ‘asm_operands’ expression.
!      The function ‘asm_noperands’ returns a non-negative value for such
       insns.
  
       In the debugging output, this field is printed as a number followed
!      by a symbolic representation that locates the pattern in the ‘md’
       file as some small positive or negative offset from a named
       pattern.
  
! ‘REG_NOTES (I)’
!      A list (chain of ‘expr_list’, ‘insn_list’ and ‘int_list’
       expressions) giving miscellaneous information about the insn.  It
       is often information pertaining to the registers used in this insn.
  
!  The ‘REG_NOTES’ field of an insn is a chain that includes ‘expr_list’
! and ‘int_list’ expressions as well as ‘insn_list’ expressions.  There
  are several kinds of register notes, which are distinguished by the
  machine mode, which in a register note is really understood as being an
! ‘enum reg_note’.  The first operand OP of the note is data whose meaning
  depends on the kind of note.
  
!  The macro ‘REG_NOTE_KIND (X)’ returns the kind of register note.  Its
! counterpart, the macro ‘PUT_REG_NOTE_KIND (X, NEWKIND)’ sets the
  register note type of X to be NEWKIND.
  
   Register notes are of three classes: They may say something about an
*************** they may create a linkage between two in
*** 20252,20258 ****
  
   These register notes annotate inputs to an insn:
  
! 'REG_DEAD'
       The value in OP dies in this insn; that is to say, altering the
       value immediately after this insn would not affect the future
       behavior of the program.
--- 20253,20259 ----
  
   These register notes annotate inputs to an insn:
  
! ‘REG_DEAD’
       The value in OP dies in this insn; that is to say, altering the
       value immediately after this insn would not affect the future
       behavior of the program.
*************** they may create a linkage between two in
*** 20261,20323 ****
       this insn since OP is not necessarily modified by this insn.
       Rather, no subsequent instruction uses the contents of OP.
  
! 'REG_UNUSED'
       The register OP being set by this insn will not be used in a
!      subsequent insn.  This differs from a 'REG_DEAD' note, which
       indicates that the value in an input will not be used subsequently.
       These two notes are independent; both may be present for the same
       register.
  
! 'REG_INC'
       The register OP is incremented (or decremented; at this level there
       is no distinction) by an embedded side effect inside this insn.
!      This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or
!      'pre_dec' expression.
  
! 'REG_NONNEG'
       The register OP is known to have a nonnegative value when this insn
       is reached.  This is used by special looping instructions that
       terminate when the register goes negative.
  
!      The 'REG_NONNEG' note is added only to 'doloop_end' insns, if its
!      pattern uses a 'ge' condition.
  
! 'REG_LABEL_OPERAND'
!      This insn uses OP, a 'code_label' or a 'note' of type
!      'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a
!      'jump_insn' that refers to the operand as an ordinary operand.  The
       label may still eventually be a jump target, but if so in an
       indirect jump in a subsequent insn.  The presence of this note
       allows jump optimization to be aware that OP is, in fact, being
       used, and flow optimization to build an accurate flow graph.
  
! 'REG_LABEL_TARGET'
!      This insn is a 'jump_insn' but not an 'addr_vec' or
!      'addr_diff_vec'.  It uses OP, a 'code_label' as a direct or
       indirect jump target.  Its purpose is similar to that of
!      'REG_LABEL_OPERAND'.  This note is only present if the insn has
       multiple targets; the last label in the insn (in the highest
!      numbered insn-field) goes into the 'JUMP_LABEL' field and does not
!      have a 'REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
  
! 'REG_SETJMP'
!      Appears attached to each 'CALL_INSN' to 'setjmp' or a related
       function.
  
   The following notes describe attributes of outputs of an insn:
  
! 'REG_EQUIV'
! 'REG_EQUAL'
       This note is only valid on an insn that sets only one register and
       indicates that that register will be equal to OP at run time; the
       scope of this equivalence differs between the two types of notes.
       The value which the insn explicitly copies into the register may
       look different from OP, but they will be equal at run time.  If the
!      output of the single 'set' is a 'strict_low_part' or 'zero_extract'
       expression, the note refers to the register that is contained in
       its first operand.
  
!      For 'REG_EQUIV', the register is equivalent to OP throughout the
       entire function, and could validly be replaced in all its
       occurrences by OP.  ("Validly" here refers to the data flow of the
       program; simple replacement may make some insns invalid.)  For
--- 20262,20324 ----
       this insn since OP is not necessarily modified by this insn.
       Rather, no subsequent instruction uses the contents of OP.
  
! ‘REG_UNUSED’
       The register OP being set by this insn will not be used in a
!      subsequent insn.  This differs from a ‘REG_DEAD’ note, which
       indicates that the value in an input will not be used subsequently.
       These two notes are independent; both may be present for the same
       register.
  
! ‘REG_INC’
       The register OP is incremented (or decremented; at this level there
       is no distinction) by an embedded side effect inside this insn.
!      This means it appears in a ‘post_inc’, ‘pre_inc’, ‘post_dec’ or
!      ‘pre_dec’ expression.
  
! ‘REG_NONNEG’
       The register OP is known to have a nonnegative value when this insn
       is reached.  This is used by special looping instructions that
       terminate when the register goes negative.
  
!      The ‘REG_NONNEG’ note is added only to ‘doloop_end’ insns, if its
!      pattern uses a ‘ge’ condition.
  
! ‘REG_LABEL_OPERAND’
!      This insn uses OP, a ‘code_label’ or a ‘note’ of type
!      ‘NOTE_INSN_DELETED_LABEL’, but is not a ‘jump_insn’, or it is a
!      ‘jump_insn’ that refers to the operand as an ordinary operand.  The
       label may still eventually be a jump target, but if so in an
       indirect jump in a subsequent insn.  The presence of this note
       allows jump optimization to be aware that OP is, in fact, being
       used, and flow optimization to build an accurate flow graph.
  
! ‘REG_LABEL_TARGET’
!      This insn is a ‘jump_insn’ but not an ‘addr_vec’ or
!      ‘addr_diff_vec’.  It uses OP, a ‘code_label’ as a direct or
       indirect jump target.  Its purpose is similar to that of
!      ‘REG_LABEL_OPERAND’.  This note is only present if the insn has
       multiple targets; the last label in the insn (in the highest
!      numbered insn-field) goes into the ‘JUMP_LABEL’ field and does not
!      have a ‘REG_LABEL_TARGET’ note.  *Note JUMP_LABEL: Insns.
  
! ‘REG_SETJMP’
!      Appears attached to each ‘CALL_INSN’ to ‘setjmp’ or a related
       function.
  
   The following notes describe attributes of outputs of an insn:
  
! ‘REG_EQUIV’
! ‘REG_EQUAL’
       This note is only valid on an insn that sets only one register and
       indicates that that register will be equal to OP at run time; the
       scope of this equivalence differs between the two types of notes.
       The value which the insn explicitly copies into the register may
       look different from OP, but they will be equal at run time.  If the
!      output of the single ‘set’ is a ‘strict_low_part’ or ‘zero_extract’
       expression, the note refers to the register that is contained in
       its first operand.
  
!      For ‘REG_EQUIV’, the register is equivalent to OP throughout the
       entire function, and could validly be replaced in all its
       occurrences by OP.  ("Validly" here refers to the data flow of the
       program; simple replacement may make some insns invalid.)  For
*************** they may create a linkage between two in
*** 20331,20337 ****
       still valid to replace the register by the stack slot throughout
       the function.
  
!      A 'REG_EQUIV' note is also used on an instruction which copies a
       register parameter into a pseudo-register at entry to a function,
       if there is a stack slot where that parameter could be stored.
       Although other insns may set the pseudo-register, it is valid for
--- 20332,20338 ----
       still valid to replace the register by the stack slot throughout
       the function.
  
!      A ‘REG_EQUIV’ note is also used on an instruction which copies a
       register parameter into a pseudo-register at entry to a function,
       if there is a stack slot where that parameter could be stored.
       Although other insns may set the pseudo-register, it is valid for
*************** they may create a linkage between two in
*** 20340,20348 ****
       stack slot is properly initialized by making the replacement in the
       initial copy instruction as well.  This is used on machines for
       which the calling convention allocates stack space for register
!      parameters.  See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::.
  
!      In the case of 'REG_EQUAL', the register that is set by this insn
       will be equal to OP at run time at the end of this insn but not
       necessarily elsewhere in the function.  In this case, OP is
       typically an arithmetic expression.  For example, when a sequence
--- 20341,20349 ----
       stack slot is properly initialized by making the replacement in the
       initial copy instruction as well.  This is used on machines for
       which the calling convention allocates stack space for register
!      parameters.  See ‘REG_PARM_STACK_SPACE’ in *note Stack Arguments::.
  
!      In the case of ‘REG_EQUAL’, the register that is set by this insn
       will be equal to OP at run time at the end of this insn but not
       necessarily elsewhere in the function.  In this case, OP is
       typically an arithmetic expression.  For example, when a sequence
*************** they may create a linkage between two in
*** 20351,20434 ****
       or copies the final value.
  
       These two notes are used in different ways by the compiler passes.
!      'REG_EQUAL' is used by passes prior to register allocation (such as
       common subexpression elimination and loop optimization) to tell
!      them how to think of that value.  'REG_EQUIV' notes are used by
       register allocation to indicate that there is an available
!      substitute expression (either a constant or a 'mem' expression for
       the location of a parameter on the stack) that may be used in place
       of a register if insufficient registers are available.
  
       Except for stack homes for parameters, which are indicated by a
!      'REG_EQUIV' note and are not useful to the early optimization
       passes and pseudo registers that are equivalent to a memory
       location throughout their entire life, which is not detected until
       later in the compilation, all equivalences are initially indicated
!      by an attached 'REG_EQUAL' note.  In the early stages of register
!      allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note
       if OP is a constant and the insn represents the only set of its
       destination register.
  
       Thus, compiler passes prior to register allocation need only check
!      for 'REG_EQUAL' notes and passes subsequent to register allocation
!      need only check for 'REG_EQUIV' notes.
  
   These notes describe linkages between insns.  They occur in pairs: one
  insn has one of a pair of notes that points to a second insn, which has
  the inverse note pointing back to the first insn.
  
! 'REG_DEP_TRUE'
       This indicates a true dependence (a read after write dependence).
  
! 'REG_DEP_OUTPUT'
       This indicates an output dependence (a write after write
       dependence).
  
! 'REG_DEP_ANTI'
       This indicates an anti dependence (a write after read dependence).
  
   These notes describe information gathered from gcov profile data.  They
! are stored in the 'REG_NOTES' field of an insn.
  
! 'REG_BR_PROB'
       This is used to specify the ratio of branches to non-branches of a
       branch insn according to the profile data.  The note is represented
!      as an 'int_list' expression whose integer value is an encoding of
!      'profile_probability' type.  'profile_probability' provide member
!      function 'from_reg_br_prob_note' and 'to_reg_br_prob_note' to
       extract and store the probability into the RTL encoding.
  
! 'REG_BR_PRED'
       These notes are found in JUMP insns after delayed branch scheduling
       has taken place.  They indicate both the direction and the
       likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
       values.
  
! 'REG_FRAME_RELATED_EXPR'
       This is used on an RTX_FRAME_RELATED_P insn wherein the attached
       expression is used in place of the actual insn pattern.  This is
       done in cases where the pattern is either complex or misleading.
  
!  The note 'REG_CALL_NOCF_CHECK' is used in conjunction with the
! '-fcf-protection=branch' option.  The note is set if a 'nocf_check'
  attribute is specified for a function type or a pointer to function
! type.  The note is stored in the 'REG_NOTES' field of an insn.
  
! 'REG_CALL_NOCF_CHECK'
!      Users have control through the 'nocf_check' attribute to identify
       which calls to a function should be skipped from control-flow
!      instrumentation when the option '-fcf-protection=branch' is
!      specified.  The compiler puts a 'REG_CALL_NOCF_CHECK' note on each
!      'CALL_INSN' instruction that has a function type marked with a
!      'nocf_check' attribute.
  
!  For convenience, the machine mode in an 'insn_list' or 'expr_list' is
  printed using these symbolic codes in debugging dumps.
  
!  The only difference between the expression codes 'insn_list' and
! 'expr_list' is that the first operand of an 'insn_list' is assumed to be
  an insn and is printed in debugging dumps as the insn's unique id; the
! first operand of an 'expr_list' is printed in the ordinary way as an
  expression.
  
  
--- 20352,20435 ----
       or copies the final value.
  
       These two notes are used in different ways by the compiler passes.
!      ‘REG_EQUAL’ is used by passes prior to register allocation (such as
       common subexpression elimination and loop optimization) to tell
!      them how to think of that value.  ‘REG_EQUIV’ notes are used by
       register allocation to indicate that there is an available
!      substitute expression (either a constant or a ‘mem’ expression for
       the location of a parameter on the stack) that may be used in place
       of a register if insufficient registers are available.
  
       Except for stack homes for parameters, which are indicated by a
!      ‘REG_EQUIV’ note and are not useful to the early optimization
       passes and pseudo registers that are equivalent to a memory
       location throughout their entire life, which is not detected until
       later in the compilation, all equivalences are initially indicated
!      by an attached ‘REG_EQUAL’ note.  In the early stages of register
!      allocation, a ‘REG_EQUAL’ note is changed into a ‘REG_EQUIV’ note
       if OP is a constant and the insn represents the only set of its
       destination register.
  
       Thus, compiler passes prior to register allocation need only check
!      for ‘REG_EQUAL’ notes and passes subsequent to register allocation
!      need only check for ‘REG_EQUIV’ notes.
  
   These notes describe linkages between insns.  They occur in pairs: one
  insn has one of a pair of notes that points to a second insn, which has
  the inverse note pointing back to the first insn.
  
! ‘REG_DEP_TRUE’
       This indicates a true dependence (a read after write dependence).
  
! ‘REG_DEP_OUTPUT’
       This indicates an output dependence (a write after write
       dependence).
  
! ‘REG_DEP_ANTI’
       This indicates an anti dependence (a write after read dependence).
  
   These notes describe information gathered from gcov profile data.  They
! are stored in the ‘REG_NOTES’ field of an insn.
  
! ‘REG_BR_PROB’
       This is used to specify the ratio of branches to non-branches of a
       branch insn according to the profile data.  The note is represented
!      as an ‘int_list’ expression whose integer value is an encoding of
!      ‘profile_probability’ type.  ‘profile_probability’ provide member
!      function ‘from_reg_br_prob_note’ and ‘to_reg_br_prob_note’ to
       extract and store the probability into the RTL encoding.
  
! ‘REG_BR_PRED’
       These notes are found in JUMP insns after delayed branch scheduling
       has taken place.  They indicate both the direction and the
       likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
       values.
  
! ‘REG_FRAME_RELATED_EXPR’
       This is used on an RTX_FRAME_RELATED_P insn wherein the attached
       expression is used in place of the actual insn pattern.  This is
       done in cases where the pattern is either complex or misleading.
  
!  The note ‘REG_CALL_NOCF_CHECK’ is used in conjunction with the
! ‘-fcf-protection=branch’ option.  The note is set if a ‘nocf_check’
  attribute is specified for a function type or a pointer to function
! type.  The note is stored in the ‘REG_NOTES’ field of an insn.
  
! ‘REG_CALL_NOCF_CHECK’
!      Users have control through the ‘nocf_check’ attribute to identify
       which calls to a function should be skipped from control-flow
!      instrumentation when the option ‘-fcf-protection=branch’ is
!      specified.  The compiler puts a ‘REG_CALL_NOCF_CHECK’ note on each
!      ‘CALL_INSN’ instruction that has a function type marked with a
!      ‘nocf_check’ attribute.
  
!  For convenience, the machine mode in an ‘insn_list’ or ‘expr_list’ is
  printed using these symbolic codes in debugging dumps.
  
!  The only difference between the expression codes ‘insn_list’ and
! ‘expr_list’ is that the first operand of an ‘insn_list’ is assumed to be
  an insn and is printed in debugging dumps as the insn's unique id; the
! first operand of an ‘expr_list’ is printed in the ordinary way as an
  expression.
  
  
*************** File: gccint.info,  Node: Calls,  Next:
*** 20437,20460 ****
  14.20 RTL Representation of Function-Call Insns
  ===============================================
  
! Insns that call subroutines have the RTL expression code 'call_insn'.
  These insns must satisfy special rules, and their bodies must use a
! special RTL expression code, 'call'.
  
!  A 'call' expression has two operands, as follows:
  
       (call (mem:FM ADDR) NBYTES)
  
  Here NBYTES is an operand that represents the number of bytes of
  argument data being passed to the subroutine, FM is a machine mode
! (which must equal as the definition of the 'FUNCTION_MODE' macro in the
  machine description) and ADDR represents the address of the subroutine.
  
!  For a subroutine that returns no value, the 'call' expression as shown
  above is the entire body of the insn, except that the insn might also
! contain 'use' or 'clobber' expressions.
  
!  For a subroutine that returns a value whose mode is not 'BLKmode', the
  value is returned in a hard register.  If this register's number is R,
  then the body of the call insn looks like this:
  
--- 20438,20461 ----
  14.20 RTL Representation of Function-Call Insns
  ===============================================
  
! Insns that call subroutines have the RTL expression code ‘call_insn’.
  These insns must satisfy special rules, and their bodies must use a
! special RTL expression code, ‘call’.
  
!  A ‘call’ expression has two operands, as follows:
  
       (call (mem:FM ADDR) NBYTES)
  
  Here NBYTES is an operand that represents the number of bytes of
  argument data being passed to the subroutine, FM is a machine mode
! (which must equal as the definition of the ‘FUNCTION_MODE’ macro in the
  machine description) and ADDR represents the address of the subroutine.
  
!  For a subroutine that returns no value, the ‘call’ expression as shown
  above is the entire body of the insn, except that the insn might also
! contain ‘use’ or ‘clobber’ expressions.
  
!  For a subroutine that returns a value whose mode is not ‘BLKmode’, the
  value is returned in a hard register.  If this register's number is R,
  then the body of the call insn looks like this:
  
*************** then the body of the call insn looks lik
*** 20464,20493 ****
  This RTL expression makes it clear (to the optimizer passes) that the
  appropriate register receives a useful value in this insn.
  
!  When a subroutine returns a 'BLKmode' value, it is handled by passing
  to the subroutine the address of a place to store the value.  So the
  call insn itself does not "return" any value, and it has the same RTL
  form as a call that returns nothing.
  
   On some machines, the call instruction itself clobbers some register,
! for example to contain the return address.  'call_insn' insns on these
! machines should have a body which is a 'parallel' that contains both the
! 'call' expression and 'clobber' expressions that indicate which
  registers are destroyed.  Similarly, if the call instruction requires
  some register other than the stack pointer that is not explicitly
! mentioned in its RTL, a 'use' subexpression should mention that
  register.
  
   Functions that are called are assumed to modify all registers listed in
! the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::)
! and, with the exception of 'const' functions and library calls, to
  modify all of memory.
  
!  Insns containing just 'use' expressions directly precede the
! 'call_insn' insn to indicate which registers contain inputs to the
  function.  Similarly, if registers other than those in
! 'CALL_USED_REGISTERS' are clobbered by the called function, insns
! containing a single 'clobber' follow immediately after the call to
  indicate which registers.
  
  
--- 20465,20494 ----
  This RTL expression makes it clear (to the optimizer passes) that the
  appropriate register receives a useful value in this insn.
  
!  When a subroutine returns a ‘BLKmode’ value, it is handled by passing
  to the subroutine the address of a place to store the value.  So the
  call insn itself does not "return" any value, and it has the same RTL
  form as a call that returns nothing.
  
   On some machines, the call instruction itself clobbers some register,
! for example to contain the return address.  ‘call_insn’ insns on these
! machines should have a body which is a ‘parallel’ that contains both the
! ‘call’ expression and ‘clobber’ expressions that indicate which
  registers are destroyed.  Similarly, if the call instruction requires
  some register other than the stack pointer that is not explicitly
! mentioned in its RTL, a ‘use’ subexpression should mention that
  register.
  
   Functions that are called are assumed to modify all registers listed in
! the configuration macro ‘CALL_USED_REGISTERS’ (*note Register Basics::)
! and, with the exception of ‘const’ functions and library calls, to
  modify all of memory.
  
!  Insns containing just ‘use’ expressions directly precede the
! ‘call_insn’ insn to indicate which registers contain inputs to the
  function.  Similarly, if registers other than those in
! ‘CALL_USED_REGISTERS’ are clobbered by the called function, insns
! containing a single ‘clobber’ follow immediately after the call to
  indicate which registers.
  
  
*************** is used.  One way of obtaining this info
*** 20504,20510 ****
  form, which provides a Static Single Assignment representation of the
  RTL instructions.
  
!  The RTL SSA code is located in the 'rtl-ssa' subdirectory of the GCC
  source tree.  This section only gives a brief overview of it; please see
  the comments in the source code for more details.
  
--- 20505,20511 ----
  form, which provides a Static Single Assignment representation of the
  RTL instructions.
  
!  The RTL SSA code is located in the ‘rtl-ssa’ subdirectory of the GCC
  source tree.  This section only gives a brief overview of it; please see
  the comments in the source code for more details.
  
*************** following:
*** 20538,20544 ****
       #include "df.h"
       #include "rtl-ssa.h"
  
!  All the RTL SSA code is contained in the 'rtl_ssa' namespace, so most
  passes will then want to do:
  
       using namespace rtl_ssa;
--- 20539,20545 ----
       #include "df.h"
       #include "rtl-ssa.h"
  
!  All the RTL SSA code is contained in the ‘rtl_ssa’ namespace, so most
  passes will then want to do:
  
       using namespace rtl_ssa;
*************** applies on top of the normal RTL instruc
*** 20551,20564 ****
  individual RTL passes and is not maintained across passes.
  
   However, in order to allow the RTL SSA information to be preserved
! across passes in future, 'crtl->ssa' points to the current function's
  SSA form (if any).  Passes that want to use the RTL SSA form should
  first do:
  
       crtl->ssa = new rtl_ssa::function_info (FN);
  
   where FN is the function that the pass is processing.  (Passes that are
! 'using namespace rtl_ssa' do not need the 'rtl_ssa::'.)
  
   Once the pass has finished with the SSA form, it should do the
  following:
--- 20552,20565 ----
  individual RTL passes and is not maintained across passes.
  
   However, in order to allow the RTL SSA information to be preserved
! across passes in future, ‘crtl->ssa’ points to the current function's
  SSA form (if any).  Passes that want to use the RTL SSA form should
  first do:
  
       crtl->ssa = new rtl_ssa::function_info (FN);
  
   where FN is the function that the pass is processing.  (Passes that are
! ‘using namespace rtl_ssa’ do not need the ‘rtl_ssa::’.)
  
   Once the pass has finished with the SSA form, it should do the
  following:
*************** following:
*** 20570,20580 ****
       delete crtl->ssa;
       crtl->ssa = nullptr;
  
!  The 'free_dominance_info' call is necessary because dominance
  information is not currently maintained between RTL passes.  The next
  two lines commit any changes to the RTL instructions that were queued
  for later; see the comment above the declaration of
! 'perform_pending_updates' for details.  The final two lines discard the
  RTL SSA form and free the associated memory.
  
  
--- 20571,20581 ----
       delete crtl->ssa;
       crtl->ssa = nullptr;
  
!  The ‘free_dominance_info’ call is necessary because dominance
  information is not currently maintained between RTL passes.  The next
  two lines commit any changes to the RTL instructions that were queued
  for later; see the comment above the declaration of
! ‘perform_pending_updates’ for details.  The final two lines discard the
  RTL SSA form and free the associated memory.
  
  
*************** File: gccint.info,  Node: RTL SSA Instru
*** 20583,20589 ****
  14.21.2 RTL SSA Instructions
  ----------------------------
  
! RTL SSA instructions are represented by an 'rtl_ssa::insn_info'.  These
  instructions are chained together in a single list that follows a
  reverse postorder (RPO) traversal of the function.  This means that if
  any path through the function can execute an instruction I1 and then
--- 20584,20590 ----
  14.21.2 RTL SSA Instructions
  ----------------------------
  
! RTL SSA instructions are represented by an ‘rtl_ssa::insn_info’.  These
  instructions are chained together in a single list that follows a
  reverse postorder (RPO) traversal of the function.  This means that if
  any path through the function can execute an instruction I1 and then
*************** the C++ comparison operators, such as:
*** 20596,20602 ****
  
       *INSN1 < *INSN2
  
!  Another way is to use the 'compare_with' function:
  
       INSN1->compare_with (INSN2)
  
--- 20597,20603 ----
  
       *INSN1 < *INSN2
  
!  Another way is to use the ‘compare_with’ function:
  
       INSN1->compare_with (INSN2)
  
*************** RPO, less than zero if INSN1 comes befor
*** 20605,20611 ****
  INSN1 and INSN2 are the same.  This order is maintained even if
  instructions are added to the function or moved around.
  
!  The main purpose of 'rtl_ssa::insn_info' is to hold SSA information
  about an instruction.  However, it also caches certain properties of the
  instruction, such as whether it is an inline assembly instruction,
  whether it has volatile accesses, and so on.
--- 20606,20612 ----
  INSN1 and INSN2 are the same.  This order is maintained even if
  instructions are added to the function or moved around.
  
!  The main purpose of ‘rtl_ssa::insn_info’ is to hold SSA information
  about an instruction.  However, it also caches certain properties of the
  instruction, such as whether it is an inline assembly instruction,
  whether it has volatile accesses, and so on.
*************** File: gccint.info,  Node: RTL SSA Basic
*** 20622,20630 ****
  ----------------------------
  
  RTL SSA instructions (*note RTL SSA Instructions::) are organized into
! basic blocks, with each block being represented by an 'rtl_ssa:bb_info'.
! There is a one-to-one mapping between these 'rtl_ssa:bb_info' structures
! and the underlying CFG 'basic_block' structures (*note Basic Blocks::).
  
   If a CFG basic block BB contains an RTL instruction INSN, the RTL SSA
  represenation of BB also contains an RTL SSA representation of INSN(1).
--- 20623,20631 ----
  ----------------------------
  
  RTL SSA instructions (*note RTL SSA Instructions::) are organized into
! basic blocks, with each block being represented by an ‘rtl_ssa:bb_info’.
! There is a one-to-one mapping between these ‘rtl_ssa:bb_info’ structures
! and the underlying CFG ‘basic_block’ structures (*note Basic Blocks::).
  
   If a CFG basic block BB contains an RTL instruction INSN, the RTL SSA
  represenation of BB also contains an RTL SSA representation of INSN(1).
*************** postorder.  This list includes the entry
*** 20645,20651 ****
  first) and the exit block (which always comes last).
  
   RTL SSA basic blocks are chained together into "extended basic blocks"
! (EBBs), represented by an 'rtl_ssa::ebb_info'.  Extended basic blocks
  contain one or more basic blocks.  They have the property that if a
  block BBY comes immediately after a block BBX in an EBB, then BBY can
  only be reached by BBX; in other words, BBX is the sole predecessor of
--- 20646,20652 ----
  first) and the exit block (which always comes last).
  
   RTL SSA basic blocks are chained together into "extended basic blocks"
! (EBBs), represented by an ‘rtl_ssa::ebb_info’.  Extended basic blocks
  contain one or more basic blocks.  They have the property that if a
  block BBY comes immediately after a block BBX in an EBB, then BBY can
  only be reached by BBX; in other words, BBX is the sole predecessor of
*************** nodes because their live values can only
*** 20659,20681 ****
   The contents of a function are therefore represented using a four-level
  hierarchy:
  
!    * functions ('rtl_ssa::function_info'), which contain ...
  
!    * extended basic blocks ('rtl_ssa::ebb_info'), which contain ...
  
!    * basic blocks ('rtl_ssa::bb_info'), which contain ...
  
!    * instructions ('rtl_ssa::insn_info')
  
!  In dumps, a basic block is identified as 'bbN', where N is the index of
! the associated CFG 'basic_block' structure.  An EBB is in turn
  identified by the index of its first block.  For example, an EBB that
! contains 'bb10', 'bb5', 'bb6' and 'bb9' is identified as EBB10.
  
     ---------- Footnotes ----------
  
!    (1) Note that this excludes non-instruction things like 'note's and
! 'barrier's that also appear in the chain of RTL instructions.
  
  
  File: gccint.info,  Node: RTL SSA Resources,  Next: RTL SSA Accesses,  Prev: RTL SSA Basic Blocks,  Up: RTL SSA
--- 20660,20682 ----
   The contents of a function are therefore represented using a four-level
  hierarchy:
  
!    • functions (‘rtl_ssa::function_info’), which contain ...
  
!    • extended basic blocks (‘rtl_ssa::ebb_info’), which contain ...
  
!    • basic blocks (‘rtl_ssa::bb_info’), which contain ...
  
!    • instructions (‘rtl_ssa::insn_info’)
  
!  In dumps, a basic block is identified as ‘bbN’, where N is the index of
! the associated CFG ‘basic_block’ structure.  An EBB is in turn
  identified by the index of its first block.  For example, an EBB that
! contains ‘bb10’, ‘bb5’, ‘bb6’ and ‘bb9’ is identified as EBB10.
  
     ---------- Footnotes ----------
  
!    (1) Note that this excludes non-instruction things like ‘note’s and
! ‘barrier’s that also appear in the chain of RTL instructions.
  
  
  File: gccint.info,  Node: RTL SSA Resources,  Next: RTL SSA Accesses,  Prev: RTL SSA Basic Blocks,  Up: RTL SSA
*************** single unified resource, like it is in G
*** 20689,20702 ****
  
   Each resource has a unique identifier.  The unique identifier for a
  register is simply its register number.  The unique identifier for
! memory is a special register number called 'MEM_REGNO'.
  
   Since resource numbers so closely match register numbers, it is
  sometimes convenient to refer to them simply as register numbers, or
  "regnos" for short.  However, the RTL SSA form also provides an
! abstraction of resources in the form of 'rtl_ssa::resource_info'.  This
  is a lightweight class that records both the regno of a resource and the
! 'machine_mode' that the resource has (*note Machine Modes::).  It has
  functions for testing whether a resource is a register or memory.  In
  principle it could be extended to other kinds of resource in future.
  
--- 20690,20703 ----
  
   Each resource has a unique identifier.  The unique identifier for a
  register is simply its register number.  The unique identifier for
! memory is a special register number called ‘MEM_REGNO’.
  
   Since resource numbers so closely match register numbers, it is
  sometimes convenient to refer to them simply as register numbers, or
  "regnos" for short.  However, the RTL SSA form also provides an
! abstraction of resources in the form of ‘rtl_ssa::resource_info’.  This
  is a lightweight class that records both the regno of a resource and the
! ‘machine_mode’ that the resource has (*note Machine Modes::).  It has
  functions for testing whether a resource is a register or memory.  In
  principle it could be extended to other kinds of resource in future.
  
*************** File: gccint.info,  Node: RTL SSA Access
*** 20707,20713 ****
  --------------------------------------------
  
  In the RTL SSA form, most reads or writes of a resource are represented
! as a 'rtl_ssa::access_info'(1).  These 'rtl_ssa::access_info's are
  organized into the following class hierarchy:
  
       rtl_ssa::access_info
--- 20708,20714 ----
  --------------------------------------------
  
  In the RTL SSA form, most reads or writes of a resource are represented
! as a ‘rtl_ssa::access_info’(1).  These ‘rtl_ssa::access_info’s are
  organized into the following class hierarchy:
  
       rtl_ssa::access_info
*************** organized into the following class hiera
*** 20722,20750 ****
                     |
                     +-- rtl_ssa::phi_info
  
!  A 'rtl_ssa::use_info' represents a read or use of a resource and a
! 'rtl_ssa::def_info' represents a write or definition of a resource.  As
  in the main RTL representation, there are two basic types of definition:
  clobbers and sets.  The difference is that a clobber leaves the register
  with an unspecified value that cannot be used or relied on by later
  instructions, while a set leaves the register with a known value that
  later instructions could use if they wanted to.  A
! 'rtl_ssa::clobber_info' represents a clobber and a 'rtl_ssa::set_info'
  represent a set.
  
!  Each 'rtl_ssa::use_info' records which single 'rtl_ssa::set_info'
  provides the value of the resource; this is null if the resource is
! completely undefined at the point of use.  Each 'rtl_ssa::set_info' in
! turn records all the 'rtl_ssa::use_info's that use its value.
  
   If a value of a resource can come from multiple sources, a
! 'rtl_ssa::phi_info' brings those multiple sources together into a single
  definition (*note RTL SSA Phi Nodes::).
  
     ---------- Footnotes ----------
  
     (1) The exceptions are call clobbers, which are generally represented
! separately.  See the comment above 'rtl_ssa::insn_info' for details.
  
  
  File: gccint.info,  Node: RTL SSA Phi Nodes,  Next: RTL SSA Access Lists,  Prev: RTL SSA Accesses,  Up: RTL SSA
--- 20723,20751 ----
                     |
                     +-- rtl_ssa::phi_info
  
!  A ‘rtl_ssa::use_info’ represents a read or use of a resource and a
! ‘rtl_ssa::def_info’ represents a write or definition of a resource.  As
  in the main RTL representation, there are two basic types of definition:
  clobbers and sets.  The difference is that a clobber leaves the register
  with an unspecified value that cannot be used or relied on by later
  instructions, while a set leaves the register with a known value that
  later instructions could use if they wanted to.  A
! ‘rtl_ssa::clobber_info’ represents a clobber and a ‘rtl_ssa::set_info’
  represent a set.
  
!  Each ‘rtl_ssa::use_info’ records which single ‘rtl_ssa::set_info’
  provides the value of the resource; this is null if the resource is
! completely undefined at the point of use.  Each ‘rtl_ssa::set_info’ in
! turn records all the ‘rtl_ssa::use_info’s that use its value.
  
   If a value of a resource can come from multiple sources, a
! ‘rtl_ssa::phi_info’ brings those multiple sources together into a single
  definition (*note RTL SSA Phi Nodes::).
  
     ---------- Footnotes ----------
  
     (1) The exceptions are call clobbers, which are generally represented
! separately.  See the comment above ‘rtl_ssa::insn_info’ for details.
  
  
  File: gccint.info,  Node: RTL SSA Phi Nodes,  Next: RTL SSA Access Lists,  Prev: RTL SSA Accesses,  Up: RTL SSA
*************** This is in contrast to a native SSA repr
*** 20793,20800 ****
  the phi inputs can be arbitrary expressions.  As a result, RTL SSA phi
  nodes never involve "hidden" moves: all moves are instead explicit.
  
!  Phi nodes are represented as a 'rtl_ssa::phi_node'.  Each input to a
! phi node is represented as an 'rtl_ssa::use_info'.
  
  
  File: gccint.info,  Node: RTL SSA Access Lists,  Next: Changing RTL Instructions,  Prev: RTL SSA Phi Nodes,  Up: RTL SSA
--- 20794,20801 ----
  the phi inputs can be arbitrary expressions.  As a result, RTL SSA phi
  nodes never involve "hidden" moves: all moves are instead explicit.
  
!  Phi nodes are represented as a ‘rtl_ssa::phi_node’.  Each input to a
! phi node is represented as an ‘rtl_ssa::use_info’.
  
  
  File: gccint.info,  Node: RTL SSA Access Lists,  Next: Changing RTL Instructions,  Prev: RTL SSA Phi Nodes,  Up: RTL SSA
*************** File: gccint.info,  Node: RTL SSA Access
*** 20804,20815 ****
  
  All the definitions of a resource are chained together in reverse
  postorder.  In general, this list can contain an arbitrary mix of both
! sets ('rtl_ssa::set_info') and clobbers ('rtl_ssa::clobber_info').
  However, it is often useful to skip over all intervening clobbers of a
  resource in order to find the next set.  The list is constructed in such
  a way that this can be done in amortized constant time.
  
!  All uses ('rtl_ssa::use_info') of a given set are also chained together
  into a list.  This list of uses is divided into three parts:
  
    1. uses by "real" nondebug instructions (*note real RTL SSA insns::)
--- 20805,20816 ----
  
  All the definitions of a resource are chained together in reverse
  postorder.  In general, this list can contain an arbitrary mix of both
! sets (‘rtl_ssa::set_info’) and clobbers (‘rtl_ssa::clobber_info’).
  However, it is often useful to skip over all intervening clobbers of a
  resource in order to find the next set.  The list is constructed in such
  a way that this can be done in amortized constant time.
  
!  All uses (‘rtl_ssa::use_info’) of a given set are also chained together
  into a list.  This list of uses is divided into three parts:
  
    1. uses by "real" nondebug instructions (*note real RTL SSA insns::)
*************** third part has no particular order.
*** 20825,20860 ****
  reverse postorder than the next definition of the resource (if any).
  This means that the accesses follow a linear sequence of the form:
  
!    * first definition of resource R
  
!         * first use by a real nondebug instruction of the first
            definition of resource R
  
!         * ...
  
!         * last use by a real nondebug instruction of the first
            definition of resource R
  
!    * second definition of resource R
  
!         * first use by a real nondebug instruction of the second
            definition of resource R
  
!         * ...
  
!         * last use by a real nondebug instruction of the second
            definition of resource R
  
!    * ...
  
!    * last definition of resource R
  
!         * first use by a real nondebug instruction of the last
            definition of resource R
  
!         * ...
  
!         * last use by a real nondebug instruction of the last definition
            of resource R
  
   (Note that clobbers never have uses; only sets do.)
--- 20826,20861 ----
  reverse postorder than the next definition of the resource (if any).
  This means that the accesses follow a linear sequence of the form:
  
!    • first definition of resource R
  
!         • first use by a real nondebug instruction of the first
            definition of resource R
  
!         • ...
  
!         • last use by a real nondebug instruction of the first
            definition of resource R
  
!    • second definition of resource R
  
!         • first use by a real nondebug instruction of the second
            definition of resource R
  
!         • ...
  
!         • last use by a real nondebug instruction of the second
            definition of resource R
  
!    • ...
  
!    • last definition of resource R
  
!         • first use by a real nondebug instruction of the last
            definition of resource R
  
!         • ...
  
!         • last use by a real nondebug instruction of the last definition
            of resource R
  
   (Note that clobbers never have uses; only sets do.)
*************** following:
*** 20881,20896 ****
  
   The list of accesses would begin as follows:
  
!    * definition of R by A
  
!         * use of A's definition of R by B
  
!    * definition of R by C
  
   The next access to R is in D, but the value of R that D uses comes from
  A rather than C.
  
!  This is resolved by adding a phi node for 'ebb4'.  All inputs to this
  phi node have the same value, which in the example above is A's
  definition of R.  In other circumstances, it would not be necessary to
  create a phi node when all inputs are equal, so these phi nodes are
--- 20882,20897 ----
  
   The list of accesses would begin as follows:
  
!    • definition of R by A
  
!         • use of A's definition of R by B
  
!    • definition of R by C
  
   The next access to R is in D, but the value of R that D uses comes from
  A rather than C.
  
!  This is resolved by adding a phi node for ‘ebb4’.  All inputs to this
  phi node have the same value, which in the example above is A's
  definition of R.  In other circumstances, it would not be necessary to
  create a phi node when all inputs are equal, so these phi nodes are
*************** referred to as "degenerate" phi nodes.
*** 20898,20920 ****
  
   The full list of accesses to R is therefore:
  
!    * definition of R by A
  
!         * use of A's definition of R by B
  
!    * definition of R by C
  
!    * definition of R by ebb4's phi instruction, with the input coming
       from A
  
!         * use of the ebb4's R phi definition of R by B
  
   Note that A's definition is also used by ebb4's phi node, but this use
  belongs to the third part of the use list described above and so does
  not form part of the linear sequence.
  
   It is possible to "look through" any degenerate phi to the ultimate
! definition using the function 'look_through_degenerate_phi'.  Note that
  the input to a degenerate phi is never itself provided by a degenerate
  phi.
  
--- 20899,20921 ----
  
   The full list of accesses to R is therefore:
  
!    • definition of R by A
  
!         • use of A's definition of R by B
  
!    • definition of R by C
  
!    • definition of R by ebb4's phi instruction, with the input coming
       from A
  
!         • use of the ebb4's R phi definition of R by B
  
   Note that A's definition is also used by ebb4's phi node, but this use
  belongs to the third part of the use list described above and so does
  not form part of the linear sequence.
  
   It is possible to "look through" any degenerate phi to the ultimate
! definition using the function ‘look_through_degenerate_phi’.  Note that
  the input to a degenerate phi is never itself provided by a degenerate
  phi.
  
*************** phi.
*** 20922,20932 ****
  guarantees that, for any given resource RES, one of the following is
  true:
  
!    * The resource has a single definition DEF, which is not a phi node.
       Excluding uses of undefined registers, all uses of RES by real
       nondebug instructions use the value provided by DEF.
  
!    * Excluding uses of undefined registers, all uses of RES use values
       provided by definitions that occur earlier in the same extended
       basic block.  These definitions might come from phi nodes or from
       real instructions.
--- 20923,20933 ----
  guarantees that, for any given resource RES, one of the following is
  true:
  
!    • The resource has a single definition DEF, which is not a phi node.
       Excluding uses of undefined registers, all uses of RES by real
       nondebug instructions use the value provided by DEF.
  
!    • Excluding uses of undefined registers, all uses of RES use values
       provided by definitions that occur earlier in the same extended
       basic block.  These definitions might come from phi nodes or from
       real instructions.
*************** following:
*** 20959,20996 ****
  
       auto attempt = crtl->ssa->new_change_attempt ();
  
!  Here, 'attempt' is an RAII object that should remain in scope for the
  entire change attempt.  It automatically frees temporary memory related
  to the changes when it goes out of scope.
  
!  Next, the pass should create an 'rtl_ssa::insn_change' object for the
  instruction that it wants to change.  This object specifies several
  things:
  
!    * what the instruction's new list of uses should be ('new_uses').  By
       default this is the same as the instruction's current list of uses.
  
!    * what the instruction's new list of definitions should be
!      ('new_defs').  By default this is the same as the instruction's
       current list of definitions.
  
!    * where the instruction should be located ('move_range').  This is a
       range of instructions after which the instruction could be placed,
!      represented as an 'rtl_ssa::insn_range'.  By default the
       instruction must remain at its current position.
  
   If a pass was attempting to change all these properties of an
! instruction 'insn', it might do something like this:
  
       rtl_ssa::insn_change change (insn);
       change.new_defs = ...;
       change.new_uses = ...;
       change.move_range = ...;
  
!  This 'rtl_ssa::insn_change' only describes something that the pass
  _might_ do; at this stage, nothing has actually changed.
  
!  As noted above, the default 'move_range' requires the instruction to
  remain where it is.  At the other extreme, it is possible to allow the
  instruction to move anywhere within its extended basic block, provided
  that all the new uses and definitions can be performed at the new
--- 20960,20997 ----
  
       auto attempt = crtl->ssa->new_change_attempt ();
  
!  Here, ‘attempt’ is an RAII object that should remain in scope for the
  entire change attempt.  It automatically frees temporary memory related
  to the changes when it goes out of scope.
  
!  Next, the pass should create an ‘rtl_ssa::insn_change’ object for the
  instruction that it wants to change.  This object specifies several
  things:
  
!    • what the instruction's new list of uses should be (‘new_uses’).  By
       default this is the same as the instruction's current list of uses.
  
!    • what the instruction's new list of definitions should be
!      (‘new_defs’).  By default this is the same as the instruction's
       current list of definitions.
  
!    • where the instruction should be located (‘move_range’).  This is a
       range of instructions after which the instruction could be placed,
!      represented as an ‘rtl_ssa::insn_range’.  By default the
       instruction must remain at its current position.
  
   If a pass was attempting to change all these properties of an
! instruction ‘insn’, it might do something like this:
  
       rtl_ssa::insn_change change (insn);
       change.new_defs = ...;
       change.new_uses = ...;
       change.move_range = ...;
  
!  This ‘rtl_ssa::insn_change’ only describes something that the pass
  _might_ do; at this stage, nothing has actually changed.
  
!  As noted above, the default ‘move_range’ requires the instruction to
  remain where it is.  At the other extreme, it is possible to allow the
  instruction to move anywhere within its extended basic block, provided
  that all the new uses and definitions can be performed at the new
*************** consistent with the new uses and definit
*** 21004,21024 ****
       if (!rtl_ssa::restrict_movement (change))
         return false;
  
!  This function tries to limit 'move_range' to a range of instructions at
! which 'new_uses' and 'new_defs' can be correctly performed.  It returns
  true on success or false if no suitable location exists.
  
   The pass should also tentatively change the pattern of the instruction
  to whatever form the pass wants the instruction to have.  This should
! use the facilities provided by 'recog.cc'.  For example:
  
       rtl_insn *rtl = insn->rtl ();
       insn_change_watermark watermark;
       validate_change (rtl, &PATTERN (rtl), new_pat, 1);
  
!  will tentatively replace 'insn''s pattern with 'new_pat'.
  
!  These changes and the construction of the 'rtl_ssa::insn_change' can
  happen in either order or be interleaved.
  
   After the tentative changes to the instruction are complete, the pass
--- 21005,21025 ----
       if (!rtl_ssa::restrict_movement (change))
         return false;
  
!  This function tries to limit ‘move_range’ to a range of instructions at
! which ‘new_uses’ and ‘new_defs’ can be correctly performed.  It returns
  true on success or false if no suitable location exists.
  
   The pass should also tentatively change the pattern of the instruction
  to whatever form the pass wants the instruction to have.  This should
! use the facilities provided by ‘recog.cc’.  For example:
  
       rtl_insn *rtl = insn->rtl ();
       insn_change_watermark watermark;
       validate_change (rtl, &PATTERN (rtl), new_pat, 1);
  
!  will tentatively replace ‘insn’'s pattern with ‘new_pat’.
  
!  These changes and the construction of the ‘rtl_ssa::insn_change’ can
  happen in either order or be interleaved.
  
   After the tentative changes to the instruction are complete, the pass
*************** satisfies the requirements of an inline
*** 21032,21049 ****
  it match.  It might also add new definitions or restrict the range of
  the move.  For example, if the new pattern did not match in its original
  form, but could be made to match by adding a clobber of the flags
! register, 'rtl_ssa::recog' will check whether the flags register is free
  at an appropriate point.  If so, it will add a clobber of the flags
! register to 'new_defs' and restrict 'move_range' to the locations at
  which the flags register can be safely clobbered.
  
   Even if the proposed new instruction is valid according to
! 'rtl_ssa::recog', the change might not be worthwhile.  For example, when
  optimizing for speed, the new instruction might turn out to be slower
  than the original one.  When optimizing for size, the new instruction
  might turn out to be bigger than the original one.
  
!  Passes should check for this case using 'change_is_worthwhile'.  For
  example:
  
       if (!rtl_ssa::change_is_worthwhile (change))
--- 21033,21050 ----
  it match.  It might also add new definitions or restrict the range of
  the move.  For example, if the new pattern did not match in its original
  form, but could be made to match by adding a clobber of the flags
! register, ‘rtl_ssa::recog’ will check whether the flags register is free
  at an appropriate point.  If so, it will add a clobber of the flags
! register to ‘new_defs’ and restrict ‘move_range’ to the locations at
  which the flags register can be safely clobbered.
  
   Even if the proposed new instruction is valid according to
! ‘rtl_ssa::recog’, the change might not be worthwhile.  For example, when
  optimizing for speed, the new instruction might turn out to be slower
  than the original one.  When optimizing for size, the new instruction
  might turn out to be bigger than the original one.
  
!  Passes should check for this case using ‘change_is_worthwhile’.  For
  example:
  
       if (!rtl_ssa::change_is_worthwhile (change))
*************** Instruction::).  The pass should again s
*** 21089,21100 ****
  
       auto attempt = crtl->ssa->new_change_attempt ();
  
!  and keep 'attempt' in scope for the duration of the change attempt.  It
! should then construct an 'rtl_ssa::insn_change' for each change that it
  wants to make.
  
   After this, it should combine the changes into a sequence of
! 'rtl_ssa::insn_change' pointers.  This sequence must be in reverse
  postorder; the instructions will remain strictly in the order that the
  sequence specifies.
  
--- 21090,21101 ----
  
       auto attempt = crtl->ssa->new_change_attempt ();
  
!  and keep ‘attempt’ in scope for the duration of the change attempt.  It
! should then construct an ‘rtl_ssa::insn_change’ for each change that it
  wants to make.
  
   After this, it should combine the changes into a sequence of
! ‘rtl_ssa::insn_change’ pointers.  This sequence must be in reverse
  postorder; the instructions will remain strictly in the order that the
  sequence specifies.
  
*************** do:
*** 21103,21114 ****
  
       rtl_ssa::insn_change *changes[] = { &change1, &change2 };
  
!  where 'change1''s instruction must come before 'change2''s.
  Alternatively, if the pass is changing a variable number of
  instructions, it might build up the sequence in a
! 'vec<rtl_ssa::insn_change *>'.
  
!  By default, 'rtl_ssa::restrict_movement' assumes that all instructions
  other than the one passed to it will remain in their current positions
  and will retain their current uses and definitions.  When changing
  multiple instructions, it is usually more effective to ignore the other
--- 21104,21115 ----
  
       rtl_ssa::insn_change *changes[] = { &change1, &change2 };
  
!  where ‘change1’'s instruction must come before ‘change2’'s.
  Alternatively, if the pass is changing a variable number of
  instructions, it might build up the sequence in a
! ‘vec<rtl_ssa::insn_change *>’.
  
!  By default, ‘rtl_ssa::restrict_movement’ assumes that all instructions
  other than the one passed to it will remain in their current positions
  and will retain their current uses and definitions.  When changing
  multiple instructions, it is usually more effective to ignore the other
*************** to each other.  The way to do this is:
*** 21119,21125 ****
       if (!rtl_ssa::restrict_movement_ignoring (change, insn_is_changing (changes)))
         return false;
  
!  Similarly, when 'rtl_ssa::restrict_movement' is detecting whether a
  register can be clobbered, it by default assumes that all other
  instructions will remain in their current positions and retain their
  current form.  It is again more effective to ignore changing
--- 21120,21126 ----
       if (!rtl_ssa::restrict_movement_ignoring (change, insn_is_changing (changes)))
         return false;
  
!  Similarly, when ‘rtl_ssa::restrict_movement’ is detecting whether a
  register can be clobbered, it by default assumes that all other
  instructions will remain in their current positions and retain their
  current form.  It is again more effective to ignore changing
*************** changes as a whole are worthwhile.  The
*** 21137,21146 ****
         return false;
  
   The process for changing single instructions makes sure that one
! 'rtl_ssa::insn_change' in isolation is valid.  But when changing
  multiple instructions, it is also necessary to test whether the sequence
  as a whole is valid.  For example, it might be impossible to satisfy all
! of the 'move_range's at once.
  
   Therefore, once the pass has a sequence of changes that are
  individually correct, it should use:
--- 21138,21147 ----
         return false;
  
   The process for changing single instructions makes sure that one
! ‘rtl_ssa::insn_change’ in isolation is valid.  But when changing
  multiple instructions, it is also necessary to test whether the sequence
  as a whole is valid.  For example, it might be impossible to satisfy all
! of the ‘move_range’s at once.
  
   Therefore, once the pass has a sequence of changes that are
  individually correct, it should use:
*************** objects that describe global variables a
*** 21204,21261 ****
  standard objects such as small integer constants, no RTL objects are
  common to two functions.
  
!    * Each pseudo-register has only a single 'reg' object to represent
       it, and therefore only a single machine mode.
  
!    * For any symbolic label, there is only one 'symbol_ref' object
       referring to it.
  
!    * All 'const_int' expressions with equal values are shared.
  
!    * All 'const_poly_int' expressions with equal modes and values are
       shared.
  
!    * There is only one 'pc' expression.
  
!    * There is only one 'const_double' expression with value 0 for each
       floating point mode.  Likewise for values 1 and 2.
  
!    * There is only one 'const_vector' expression with value 0 for each
       vector mode, be it an integer or a double constant vector.
  
!    * No 'label_ref' or 'scratch' appears in more than one place in the
       RTL structure; in other words, it is safe to do a tree-walk of all
!      the insns in the function and assume that each time a 'label_ref'
!      or 'scratch' is seen it is distinct from all others that are seen.
  
!    * Only one 'mem' object is normally created for each static variable
       or stack slot, so these objects are frequently shared in all the
       places they appear.  However, separate but equal objects for these
       variables are occasionally made.
  
!    * When a single 'asm' statement has multiple output operands, a
!      distinct 'asm_operands' expression is made for each output operand.
       However, these all share the vector which contains the sequence of
       input operands.  This sharing is used later on to test whether two
!      'asm_operands' expressions come from the same statement, so all
       optimizations must carefully preserve the sharing if they copy the
       vector at all.
  
!    * No RTL object appears in more than one place in the RTL structure
       except as described above.  Many passes of the compiler rely on
       this by assuming that they can modify RTL objects in place without
       unwanted side-effects on other insns.
  
!    * During initial RTL generation, shared structure is freely
       introduced.  After all the RTL for a function has been generated,
!      all shared structure is copied by 'unshare_all_rtl' in
!      'emit-rtl.cc', after which the above rules are guaranteed to be
       followed.
  
!    * During the combiner pass, shared structure within an insn can exist
       temporarily.  However, the shared structure is copied before the
       combiner is finished with the insn.  This is done by calling
!      'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'.
  
  
  File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
--- 21205,21262 ----
  standard objects such as small integer constants, no RTL objects are
  common to two functions.
  
!    • Each pseudo-register has only a single ‘reg’ object to represent
       it, and therefore only a single machine mode.
  
!    • For any symbolic label, there is only one ‘symbol_ref’ object
       referring to it.
  
!    • All ‘const_int’ expressions with equal values are shared.
  
!    • All ‘const_poly_int’ expressions with equal modes and values are
       shared.
  
!    • There is only one ‘pc’ expression.
  
!    • There is only one ‘const_double’ expression with value 0 for each
       floating point mode.  Likewise for values 1 and 2.
  
!    • There is only one ‘const_vector’ expression with value 0 for each
       vector mode, be it an integer or a double constant vector.
  
!    • No ‘label_ref’ or ‘scratch’ appears in more than one place in the
       RTL structure; in other words, it is safe to do a tree-walk of all
!      the insns in the function and assume that each time a ‘label_ref’
!      or ‘scratch’ is seen it is distinct from all others that are seen.
  
!    • Only one ‘mem’ object is normally created for each static variable
       or stack slot, so these objects are frequently shared in all the
       places they appear.  However, separate but equal objects for these
       variables are occasionally made.
  
!    • When a single ‘asm’ statement has multiple output operands, a
!      distinct ‘asm_operands’ expression is made for each output operand.
       However, these all share the vector which contains the sequence of
       input operands.  This sharing is used later on to test whether two
!      ‘asm_operands’ expressions come from the same statement, so all
       optimizations must carefully preserve the sharing if they copy the
       vector at all.
  
!    • No RTL object appears in more than one place in the RTL structure
       except as described above.  Many passes of the compiler rely on
       this by assuming that they can modify RTL objects in place without
       unwanted side-effects on other insns.
  
!    • During initial RTL generation, shared structure is freely
       introduced.  After all the RTL for a function has been generated,
!      all shared structure is copied by ‘unshare_all_rtl’ in
!      ‘emit-rtl.cc’, after which the above rules are guaranteed to be
       followed.
  
!    • During the combiner pass, shared structure within an insn can exist
       temporarily.  However, the shared structure is copied before the
       combiner is finished with the insn.  This is done by calling
!      ‘copy_rtx_if_shared’, which is a subroutine of ‘unshare_all_rtl’.
  
  
  File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
*************** File: gccint.info,  Node: Reading RTL,
*** 21263,21271 ****
  14.23 Reading RTL
  =================
  
! To read an RTL object from a file, call 'read_rtx'.  It takes one
  argument, a stdio stream, and returns a single RTL object.  This routine
! is defined in 'read-rtl.cc'.  It is not available in the compiler
  itself, only the various programs that generate the compiler back end
  from the machine description.
  
--- 21264,21272 ----
  14.23 Reading RTL
  =================
  
! To read an RTL object from a file, call ‘read_rtx’.  It takes one
  argument, a stdio stream, and returns a single RTL object.  This routine
! is defined in ‘read-rtl.cc’.  It is not available in the compiler
  itself, only the various programs that generate the compiler back end
  from the machine description.
  
*************** program is very dependent on the particu
*** 21278,21284 ****
  does not contain all the information about the program.
  
   The proper way to interface GCC to a new language front end is with the
! "tree" data structure, described in the files 'tree.h' and 'tree.def'.
  The documentation for this structure (*note GENERIC::) is incomplete.
  
  
--- 21279,21285 ----
  does not contain all the information about the program.
  
   The proper way to interface GCC to a new language front end is with the
! "tree" data structure, described in the files ‘tree.h’ and ‘tree.def’.
  The documentation for this structure (*note GENERIC::) is incomplete.
  
  
*************** File: gccint.info,  Node: Control Flow,
*** 21288,21308 ****
  *********************
  
  A control flow graph (CFG) is a data structure built on top of the
! intermediate code representation (the RTL or 'GIMPLE' instruction
  stream) abstracting the control flow behavior of a function that is
  being compiled.  The CFG is a directed graph where the vertices
  represent basic blocks and edges represent possible transfer of control
  flow from one basic block to another.  The data structures used to
! represent the control flow graph are defined in 'basic-block.h'.
  
   In GCC, the representation of control flow is maintained throughout the
! compilation process, from constructing the CFG early in 'pass_build_cfg'
! to 'pass_free_cfg' (see 'passes.def').  The CFG takes various different
  modes and may undergo extensive manipulations, but the graph is always
  valid between its construction and its release.  This way, transfer of
  information such as data flow, a measured profile, or the loop tree, can
! be propagated through the passes pipeline, and even from 'GIMPLE' to
! 'RTL'.
  
   Often the CFG may be better viewed as integral part of instruction
  chain, than structure built on the top of it.  Updating the compiler's
--- 21289,21309 ----
  *********************
  
  A control flow graph (CFG) is a data structure built on top of the
! intermediate code representation (the RTL or ‘GIMPLE’ instruction
  stream) abstracting the control flow behavior of a function that is
  being compiled.  The CFG is a directed graph where the vertices
  represent basic blocks and edges represent possible transfer of control
  flow from one basic block to another.  The data structures used to
! represent the control flow graph are defined in ‘basic-block.h’.
  
   In GCC, the representation of control flow is maintained throughout the
! compilation process, from constructing the CFG early in ‘pass_build_cfg’
! to ‘pass_free_cfg’ (see ‘passes.def’).  The CFG takes various different
  modes and may undergo extensive manipulations, but the graph is always
  valid between its construction and its release.  This way, transfer of
  information such as data flow, a measured profile, or the loop tree, can
! be propagated through the passes pipeline, and even from ‘GIMPLE’ to
! ‘RTL’.
  
   Often the CFG may be better viewed as integral part of instruction
  chain, than structure built on the top of it.  Updating the compiler's
*************** File: gccint.info,  Node: Basic Blocks,
*** 21325,21387 ****
  
  A basic block is a straight-line sequence of code with only one entry
  point and only one exit.  In GCC, basic blocks are represented using the
! 'basic_block' data type.
  
   Special basic blocks represent possible entry and exit points of a
! function.  These blocks are called 'ENTRY_BLOCK_PTR' and
! 'EXIT_BLOCK_PTR'.  These blocks do not contain any code.
  
!  The 'BASIC_BLOCK' array contains all basic blocks in an unspecified
! order.  Each 'basic_block' structure has a field that holds a unique
! integer identifier 'index' that is the index of the block in the
! 'BASIC_BLOCK' array.  The total number of basic blocks in the function
! is 'n_basic_blocks'.  Both the basic block indices and the total number
  of basic blocks may vary during the compilation process, as passes
  reorder, create, duplicate, and destroy basic blocks.  The index for any
! block should never be greater than 'last_basic_block'.  The indices 0
! and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the
! indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'.
  
!  Two pointer members of the 'basic_block' structure are the pointers
! 'next_bb' and 'prev_bb'.  These are used to keep doubly linked chain of
  basic blocks in the same order as the underlying instruction stream.
  The chain of basic blocks is updated transparently by the provided API
! for manipulating the CFG.  The macro 'FOR_EACH_BB' can be used to visit
! all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and
! 'EXIT_BLOCK'.  The macro 'FOR_ALL_BB' also visits all basic blocks in
! lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'.
  
!  The functions 'post_order_compute' and 'inverted_post_order_compute'
  can be used to compute topological orders of the CFG. The orders are
! stored as vectors of basic block indices.  The 'BASIC_BLOCK' array can
  be used to iterate each basic block by index.  Dominator traversals are
! also possible using 'walk_dominator_tree'.  Given two basic blocks A and
  B, block A dominates block B if A is _always_ executed before B.
  
!  Each 'basic_block' also contains pointers to the first instruction (the
! "head") and the last instruction (the "tail") or "end" of the
  instruction stream contained in a basic block.  In fact, since the
! 'basic_block' data type is used to represent blocks in both major
! intermediate representations of GCC ('GIMPLE' and RTL), there are
  pointers to the head and end of a basic block for both representations,
! stored in intermediate representation specific data in the 'il' field of
! 'struct basic_block_def'.
  
!  For RTL, these pointers are 'BB_HEAD' and 'BB_END'.
  
   In the RTL representation of a function, the instruction stream
! contains not only the "real" instructions, but also "notes" or "insn
! notes" (to distinguish them from "reg notes").  Any function that moves
  or duplicates the basic blocks needs to take care of updating of these
  notes.  Many of these notes expect that the instruction stream consists
  of linear regions, so updating can sometimes be tedious.  All types of
! insn notes are defined in 'insn-notes.def'.
  
   In the RTL function representation, the instructions contained in a
! basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more
! 'CODE_LABEL' nodes can precede the block note.  A basic block ends with
  a control flow instruction or with the last instruction before the next
! 'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'.  By definition, a 'CODE_LABEL'
  cannot appear in the middle of the instruction stream of a basic block.
  
   In addition to notes, the jump table vectors are also represented as
--- 21326,21388 ----
  
  A basic block is a straight-line sequence of code with only one entry
  point and only one exit.  In GCC, basic blocks are represented using the
! ‘basic_block’ data type.
  
   Special basic blocks represent possible entry and exit points of a
! function.  These blocks are called ‘ENTRY_BLOCK_PTR’ and
! ‘EXIT_BLOCK_PTR’.  These blocks do not contain any code.
  
!  The ‘BASIC_BLOCK’ array contains all basic blocks in an unspecified
! order.  Each ‘basic_block’ structure has a field that holds a unique
! integer identifier ‘index’ that is the index of the block in the
! ‘BASIC_BLOCK’ array.  The total number of basic blocks in the function
! is ‘n_basic_blocks’.  Both the basic block indices and the total number
  of basic blocks may vary during the compilation process, as passes
  reorder, create, duplicate, and destroy basic blocks.  The index for any
! block should never be greater than ‘last_basic_block’.  The indices 0
! and 1 are special codes reserved for ‘ENTRY_BLOCK’ and ‘EXIT_BLOCK’, the
! indices of ‘ENTRY_BLOCK_PTR’ and ‘EXIT_BLOCK_PTR’.
  
!  Two pointer members of the ‘basic_block’ structure are the pointers
! ‘next_bb’ and ‘prev_bb’.  These are used to keep doubly linked chain of
  basic blocks in the same order as the underlying instruction stream.
  The chain of basic blocks is updated transparently by the provided API
! for manipulating the CFG.  The macro ‘FOR_EACH_BB’ can be used to visit
! all the basic blocks in lexicographical order, except ‘ENTRY_BLOCK’ and
! ‘EXIT_BLOCK’.  The macro ‘FOR_ALL_BB’ also visits all basic blocks in
! lexicographical order, including ‘ENTRY_BLOCK’ and ‘EXIT_BLOCK’.
  
!  The functions ‘post_order_compute’ and ‘inverted_post_order_compute’
  can be used to compute topological orders of the CFG. The orders are
! stored as vectors of basic block indices.  The ‘BASIC_BLOCK’ array can
  be used to iterate each basic block by index.  Dominator traversals are
! also possible using ‘walk_dominator_tree’.  Given two basic blocks A and
  B, block A dominates block B if A is _always_ executed before B.
  
!  Each ‘basic_block’ also contains pointers to the first instruction (the
! “head”) and the last instruction (the “tail”) or “end” of the
  instruction stream contained in a basic block.  In fact, since the
! ‘basic_block’ data type is used to represent blocks in both major
! intermediate representations of GCC (‘GIMPLE’ and RTL), there are
  pointers to the head and end of a basic block for both representations,
! stored in intermediate representation specific data in the ‘il’ field of
! ‘struct basic_block_def’.
  
!  For RTL, these pointers are ‘BB_HEAD’ and ‘BB_END’.
  
   In the RTL representation of a function, the instruction stream
! contains not only the "real" instructions, but also “notes” or “insn
! notes” (to distinguish them from “reg notes”).  Any function that moves
  or duplicates the basic blocks needs to take care of updating of these
  notes.  Many of these notes expect that the instruction stream consists
  of linear regions, so updating can sometimes be tedious.  All types of
! insn notes are defined in ‘insn-notes.def’.
  
   In the RTL function representation, the instructions contained in a
! basic block always follow a ‘NOTE_INSN_BASIC_BLOCK’, but zero or more
! ‘CODE_LABEL’ nodes can precede the block note.  A basic block ends with
  a control flow instruction or with the last instruction before the next
! ‘CODE_LABEL’ or ‘NOTE_INSN_BASIC_BLOCK’.  By definition, a ‘CODE_LABEL’
  cannot appear in the middle of the instruction stream of a basic block.
  
   In addition to notes, the jump table vectors are also represented as
*************** it is often difficult to eliminate the c
*** 21392,21408 ****
  referencing the vector, so cleaning up these vectors is postponed until
  after liveness analysis.  Thus the jump table vectors may appear in the
  insn stream unreferenced and without any purpose.  Before any edge is
! made "fall-thru", the existence of such construct in the way needs to be
! checked by calling 'can_fallthru' function.
  
!  For the 'GIMPLE' representation, the PHI nodes and statements contained
! in a basic block are in a 'gimple_seq' pointed to by the basic block
  intermediate language specific pointers.  Abstract containers and
  iterators are used to access the PHI nodes and statements in a basic
! blocks.  These iterators are called "GIMPLE statement iterators" (GSIs).
! Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files.  There is
! a 'gimple_stmt_iterator' type for iterating over all kinds of statement,
! and a 'gphi_iterator' subclass for iterating over PHI nodes.  The
  following snippet will pretty-print all PHI nodes the statements of the
  current function in the GIMPLE representation.
  
--- 21393,21409 ----
  referencing the vector, so cleaning up these vectors is postponed until
  after liveness analysis.  Thus the jump table vectors may appear in the
  insn stream unreferenced and without any purpose.  Before any edge is
! made “fall-thru”, the existence of such construct in the way needs to be
! checked by calling ‘can_fallthru’ function.
  
!  For the ‘GIMPLE’ representation, the PHI nodes and statements contained
! in a basic block are in a ‘gimple_seq’ pointed to by the basic block
  intermediate language specific pointers.  Abstract containers and
  iterators are used to access the PHI nodes and statements in a basic
! blocks.  These iterators are called “GIMPLE statement iterators” (GSIs).
! Grep for ‘^gsi’ in the various ‘gimple-*’ and ‘tree-*’ files.  There is
! a ‘gimple_stmt_iterator’ type for iterating over all kinds of statement,
! and a ‘gphi_iterator’ subclass for iterating over PHI nodes.  The
  following snippet will pretty-print all PHI nodes the statements of the
  current function in the GIMPLE representation.
  
*************** File: gccint.info,  Node: Edges,  Next:
*** 21434,21485 ****
  Edges represent possible control flow transfers from the end of some
  basic block A to the head of another basic block B.  We say that A is a
  predecessor of B, and B is a successor of A.  Edges are represented in
! GCC with the 'edge' data type.  Each 'edge' acts as a link between two
! basic blocks: The 'src' member of an edge points to the predecessor
! basic block of the 'dest' basic block.  The members 'preds' and 'succs'
! of the 'basic_block' data type point to type-safe vectors of edges to
  the predecessors and successors of the block.
  
!  When walking the edges in an edge vector, "edge iterators" should be
! used.  Edge iterators are constructed using the 'edge_iterator' data
  structure and several methods are available to operate on them:
  
! 'ei_start'
!      This function initializes an 'edge_iterator' that points to the
       first edge in a vector of edges.
  
! 'ei_last'
!      This function initializes an 'edge_iterator' that points to the
       last edge in a vector of edges.
  
! 'ei_end_p'
!      This predicate is 'true' if an 'edge_iterator' represents the last
       edge in an edge vector.
  
! 'ei_one_before_end_p'
!      This predicate is 'true' if an 'edge_iterator' represents the
       second last edge in an edge vector.
  
! 'ei_next'
!      This function takes a pointer to an 'edge_iterator' and makes it
       point to the next edge in the sequence.
  
! 'ei_prev'
!      This function takes a pointer to an 'edge_iterator' and makes it
       point to the previous edge in the sequence.
  
! 'ei_edge'
!      This function returns the 'edge' currently pointed to by an
!      'edge_iterator'.
  
! 'ei_safe_edge'
!      This function returns the 'edge' currently pointed to by an
!      'edge_iterator', but returns 'NULL' if the iterator is pointing at
       the end of the sequence.  This function has been provided for
!      existing code makes the assumption that a 'NULL' edge indicates the
       end of the sequence.
  
!  The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the
  edges in a sequence of predecessor or successor edges.  It must not be
  used when an element might be removed during the traversal, otherwise
  elements will be missed.  Here is an example of how to use the macro:
--- 21435,21486 ----
  Edges represent possible control flow transfers from the end of some
  basic block A to the head of another basic block B.  We say that A is a
  predecessor of B, and B is a successor of A.  Edges are represented in
! GCC with the ‘edge’ data type.  Each ‘edge’ acts as a link between two
! basic blocks: The ‘src’ member of an edge points to the predecessor
! basic block of the ‘dest’ basic block.  The members ‘preds’ and ‘succs’
! of the ‘basic_block’ data type point to type-safe vectors of edges to
  the predecessors and successors of the block.
  
!  When walking the edges in an edge vector, “edge iterators” should be
! used.  Edge iterators are constructed using the ‘edge_iterator’ data
  structure and several methods are available to operate on them:
  
! ‘ei_start’
!      This function initializes an ‘edge_iterator’ that points to the
       first edge in a vector of edges.
  
! ‘ei_last’
!      This function initializes an ‘edge_iterator’ that points to the
       last edge in a vector of edges.
  
! ‘ei_end_p’
!      This predicate is ‘true’ if an ‘edge_iterator’ represents the last
       edge in an edge vector.
  
! ‘ei_one_before_end_p’
!      This predicate is ‘true’ if an ‘edge_iterator’ represents the
       second last edge in an edge vector.
  
! ‘ei_next’
!      This function takes a pointer to an ‘edge_iterator’ and makes it
       point to the next edge in the sequence.
  
! ‘ei_prev’
!      This function takes a pointer to an ‘edge_iterator’ and makes it
       point to the previous edge in the sequence.
  
! ‘ei_edge’
!      This function returns the ‘edge’ currently pointed to by an
!      ‘edge_iterator’.
  
! ‘ei_safe_edge’
!      This function returns the ‘edge’ currently pointed to by an
!      ‘edge_iterator’, but returns ‘NULL’ if the iterator is pointing at
       the end of the sequence.  This function has been provided for
!      existing code makes the assumption that a ‘NULL’ edge indicates the
       end of the sequence.
  
!  The convenience macro ‘FOR_EACH_EDGE’ can be used to visit all of the
  edges in a sequence of predecessor or successor edges.  It must not be
  used when an element might be removed during the traversal, otherwise
  elements will be missed.  Here is an example of how to use the macro:
*************** elements will be missed.  Here is an exa
*** 21495,21504 ****
  
   There are various reasons why control flow may transfer from one block
  to another.  One possibility is that some instruction, for example a
! 'CODE_LABEL', in a linearized instruction stream just always starts a
! new basic block.  In this case a "fall-thru" edge links the basic block
  to the first following basic block.  But there are several other reasons
! why edges may be created.  The 'flags' field of the 'edge' data type is
  used to store information about the type of edge we are dealing with.
  Each edge is of one of the following types:
  
--- 21496,21505 ----
  
   There are various reasons why control flow may transfer from one block
  to another.  One possibility is that some instruction, for example a
! ‘CODE_LABEL’, in a linearized instruction stream just always starts a
! new basic block.  In this case a “fall-thru” edge links the basic block
  to the first following basic block.  But there are several other reasons
! why edges may be created.  The ‘flags’ field of the ‘edge’ data type is
  used to store information about the type of edge we are dealing with.
  Each edge is of one of the following types:
  
*************** _jump_
*** 21512,21521 ****
  _fall-thru_
       Fall-thru edges are present in case where the basic block may
       continue execution to the following one without branching.  These
!      edges have the 'EDGE_FALLTHRU' flag set.  Unlike other types of
       edges, these edges must come into the basic block immediately
       following in the instruction stream.  The function
!      'force_nonfallthru' is available to insert an unconditional jump in
       the case that redirection is needed.  Note that this may require
       creation of a new basic block.
  
--- 21513,21522 ----
  _fall-thru_
       Fall-thru edges are present in case where the basic block may
       continue execution to the following one without branching.  These
!      edges have the ‘EDGE_FALLTHRU’ flag set.  Unlike other types of
       edges, these edges must come into the basic block immediately
       following in the instruction stream.  The function
!      ‘force_nonfallthru’ is available to insert an unconditional jump in
       the case that redirection is needed.  Note that this may require
       creation of a new basic block.
  
*************** _exception handling_
*** 21526,21559 ****
       Ada exceptions like division by zero or segmentation fault are
       defined and thus each instruction possibly throwing this kind of
       exception needs to be handled as control flow instruction.
!      Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set.
  
       When updating the instruction stream it is easy to change possibly
       trapping instruction to non-trapping, by simply removing the
       exception edge.  The opposite conversion is difficult, but should
       not happen anyway.  The edges can be eliminated via
!      'purge_dead_edges' call.
  
       In the RTL representation, the destination of an exception edge is
!      specified by 'REG_EH_REGION' note attached to the insn.  In case of
!      a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too.  In the
!      'GIMPLE' representation, this extra flag is not set.
  
!      In the RTL representation, the predicate 'may_trap_p' may be used
       to check whether instruction still may trap or not.  For the tree
!      representation, the 'tree_could_trap_p' predicate is available, but
       this predicate only checks for possible memory traps, as in
       dereferencing an invalid pointer location.
  
  _sibling calls_
       Sibling calls or tail calls terminate the function in a
       non-standard way and thus an edge to the exit must be present.
!      'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case.  These
       edges only exist in the RTL representation.
  
  _computed jumps_
       Computed jumps contain edges to all labels in the function
!      referenced from the code.  All those edges have 'EDGE_ABNORMAL'
       flag set.  The edges used to represent computed jumps often cause
       compile time performance problems, since functions consisting of
       many taken labels and many computed jumps may have _very_ dense
--- 21527,21560 ----
       Ada exceptions like division by zero or segmentation fault are
       defined and thus each instruction possibly throwing this kind of
       exception needs to be handled as control flow instruction.
!      Exception edges have the ‘EDGE_ABNORMAL’ and ‘EDGE_EH’ flags set.
  
       When updating the instruction stream it is easy to change possibly
       trapping instruction to non-trapping, by simply removing the
       exception edge.  The opposite conversion is difficult, but should
       not happen anyway.  The edges can be eliminated via
!      ‘purge_dead_edges’ call.
  
       In the RTL representation, the destination of an exception edge is
!      specified by ‘REG_EH_REGION’ note attached to the insn.  In case of
!      a trapping call the ‘EDGE_ABNORMAL_CALL’ flag is set too.  In the
!      ‘GIMPLE’ representation, this extra flag is not set.
  
!      In the RTL representation, the predicate ‘may_trap_p’ may be used
       to check whether instruction still may trap or not.  For the tree
!      representation, the ‘tree_could_trap_p’ predicate is available, but
       this predicate only checks for possible memory traps, as in
       dereferencing an invalid pointer location.
  
  _sibling calls_
       Sibling calls or tail calls terminate the function in a
       non-standard way and thus an edge to the exit must be present.
!      ‘EDGE_SIBCALL’ and ‘EDGE_ABNORMAL’ are set in such case.  These
       edges only exist in the RTL representation.
  
  _computed jumps_
       Computed jumps contain edges to all labels in the function
!      referenced from the code.  All those edges have ‘EDGE_ABNORMAL’
       flag set.  The edges used to represent computed jumps often cause
       compile time performance problems, since functions consisting of
       many taken labels and many computed jumps may have _very_ dense
*************** _computed jumps_
*** 21590,21615 ****
       has a runtime cost in there resulting code: An extra jump.
       Therefore, the computed jumps are un-factored in the later passes
       of the compiler (in the pass called
!      'pass_duplicate_computed_gotos').  Be aware of that when you work
       on passes in that area.  There have been numerous examples already
       where the compile time for code with unfactored computed jumps
       caused some serious headaches.
  
  _nonlocal goto handlers_
!      GCC allows nested functions to return into caller using a 'goto' to
       a label passed to as an argument to the callee.  The labels passed
       to nested functions contain special code to cleanup after function
       call.  Such sections of code are referred to as "nonlocal goto
       receivers".  If a function contains such nonlocal goto receivers,
       an edge from the call to the label is created with the
!      'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set.
  
  _function entry points_
       By definition, execution of function starts at basic block 0, so
!      there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block
!      0.  There is no 'GIMPLE' representation for alternate entry points
       at this moment.  In RTL, alternate entry points are specified by
!      'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined.  This feature is
       currently used for multiple entry point prologues and is limited to
       post-reload passes only.  This can be used by back-ends to emit
       alternate prologues for functions called from different contexts.
--- 21591,21616 ----
       has a runtime cost in there resulting code: An extra jump.
       Therefore, the computed jumps are un-factored in the later passes
       of the compiler (in the pass called
!      ‘pass_duplicate_computed_gotos’).  Be aware of that when you work
       on passes in that area.  There have been numerous examples already
       where the compile time for code with unfactored computed jumps
       caused some serious headaches.
  
  _nonlocal goto handlers_
!      GCC allows nested functions to return into caller using a ‘goto’ to
       a label passed to as an argument to the callee.  The labels passed
       to nested functions contain special code to cleanup after function
       call.  Such sections of code are referred to as "nonlocal goto
       receivers".  If a function contains such nonlocal goto receivers,
       an edge from the call to the label is created with the
!      ‘EDGE_ABNORMAL’ and ‘EDGE_ABNORMAL_CALL’ flags set.
  
  _function entry points_
       By definition, execution of function starts at basic block 0, so
!      there is always an edge from the ‘ENTRY_BLOCK_PTR’ to basic block
!      0.  There is no ‘GIMPLE’ representation for alternate entry points
       at this moment.  In RTL, alternate entry points are specified by
!      ‘CODE_LABEL’ with ‘LABEL_ALTERNATE_NAME’ defined.  This feature is
       currently used for multiple entry point prologues and is limited to
       post-reload passes only.  This can be used by back-ends to emit
       alternate prologues for functions called from different contexts.
*************** one part of code for speed in another, o
*** 21635,21641 ****
  speed.  In such cases it is useful to know information about how often
  some given block will be executed.  That is the purpose for maintaining
  profile within the flow graph.  GCC can handle profile information
! obtained through "profile feedback", but it can also estimate branch
  probabilities based on statics and heuristics.
  
   The feedback based profile is produced by compiling the program with
--- 21636,21642 ----
  speed.  In such cases it is useful to know information about how often
  some given block will be executed.  That is the purpose for maintaining
  profile within the flow graph.  GCC can handle profile information
! obtained through “profile feedback”, but it can also estimate branch
  probabilities based on statics and heuristics.
  
   The feedback based profile is produced by compiling the program with
*************** different data sets.
*** 21650,21674 ****
  
   When profile feedback is not available, the compiler may be asked to
  attempt to predict the behavior of each branch in the program using a
! set of heuristics (see 'predict.def' for details) and compute estimated
  frequencies of each basic block by propagating the probabilities over
  the graph.
  
!  Each 'basic_block' contains two integer fields to represent profile
! information: 'frequency' and 'count'.  The 'frequency' is an estimation
  how often is basic block executed within a function.  It is represented
! as an integer scaled in the range from 0 to 'BB_FREQ_BASE'.  The most
  frequently executed basic block in function is initially set to
! 'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
  During optimization, the frequency of the most frequent basic block can
  both decrease (for instance by loop unrolling) or grow (for instance by
  cross-jumping optimization), so scaling sometimes has to be performed
  multiple times.
  
!  The 'count' contains hard-counted numbers of execution measured during
  training runs and is nonzero only when profile feedback is available.
  This value is represented as the host's widest integer (typically a 64
! bit integer) of the special type 'gcov_type'.
  
   Most optimization passes can use only the frequency information of a
  basic block, but a few passes may want to know hard execution counts.
--- 21651,21675 ----
  
   When profile feedback is not available, the compiler may be asked to
  attempt to predict the behavior of each branch in the program using a
! set of heuristics (see ‘predict.def’ for details) and compute estimated
  frequencies of each basic block by propagating the probabilities over
  the graph.
  
!  Each ‘basic_block’ contains two integer fields to represent profile
! information: ‘frequency’ and ‘count’.  The ‘frequency’ is an estimation
  how often is basic block executed within a function.  It is represented
! as an integer scaled in the range from 0 to ‘BB_FREQ_BASE’.  The most
  frequently executed basic block in function is initially set to
! ‘BB_FREQ_BASE’ and the rest of frequencies are scaled accordingly.
  During optimization, the frequency of the most frequent basic block can
  both decrease (for instance by loop unrolling) or grow (for instance by
  cross-jumping optimization), so scaling sometimes has to be performed
  multiple times.
  
!  The ‘count’ contains hard-counted numbers of execution measured during
  training runs and is nonzero only when profile feedback is available.
  This value is represented as the host's widest integer (typically a 64
! bit integer) of the special type ‘gcov_type’.
  
   Most optimization passes can use only the frequency information of a
  basic block, but a few passes may want to know hard execution counts.
*************** during updating of the profile informati
*** 21677,21704 ****
  accumulate into quite large errors.
  
   Each edge also contains a branch probability field: an integer in the
! range from 0 to 'REG_BR_PROB_BASE'.  It represents probability of
! passing control from the end of the 'src' basic block to the 'dest'
  basic block, i.e. the probability that control will flow along this
! edge.  The 'EDGE_FREQUENCY' macro is available to compute how frequently
! a given edge is taken.  There is a 'count' field for each edge as well,
  representing same information as for a basic block.
  
   The basic block frequencies are not represented in the instruction
  stream, but in the RTL representation the edge frequencies are
! represented for conditional jumps (via the 'REG_BR_PROB' macro) since
  they are used when instructions are output to the assembly file and the
  flow graph is no longer maintained.
  
   The probability that control flow arrives via a given edge to its
! destination basic block is called "reverse probability" and is not
  directly represented, but it may be easily computed from frequencies of
  basic blocks.
  
   Updating profile information is a delicate task that can unfortunately
  not be easily integrated with the CFG manipulation API.  Many of the
  functions and hooks to modify the CFG, such as
! 'redirect_edge_and_branch', do not have enough information to easily
  update the profile, so updating it is in the majority of cases left up
  to the caller.  It is difficult to uncover bugs in the profile updating
  code, because they manifest themselves only by producing worse code, and
--- 21678,21705 ----
  accumulate into quite large errors.
  
   Each edge also contains a branch probability field: an integer in the
! range from 0 to ‘REG_BR_PROB_BASE’.  It represents probability of
! passing control from the end of the ‘src’ basic block to the ‘dest’
  basic block, i.e. the probability that control will flow along this
! edge.  The ‘EDGE_FREQUENCY’ macro is available to compute how frequently
! a given edge is taken.  There is a ‘count’ field for each edge as well,
  representing same information as for a basic block.
  
   The basic block frequencies are not represented in the instruction
  stream, but in the RTL representation the edge frequencies are
! represented for conditional jumps (via the ‘REG_BR_PROB’ macro) since
  they are used when instructions are output to the assembly file and the
  flow graph is no longer maintained.
  
   The probability that control flow arrives via a given edge to its
! destination basic block is called “reverse probability” and is not
  directly represented, but it may be easily computed from frequencies of
  basic blocks.
  
   Updating profile information is a delicate task that can unfortunately
  not be easily integrated with the CFG manipulation API.  Many of the
  functions and hooks to modify the CFG, such as
! ‘redirect_edge_and_branch’, do not have enough information to easily
  update the profile, so updating it is in the majority of cases left up
  to the caller.  It is difficult to uncover bugs in the profile updating
  code, because they manifest themselves only by producing worse code, and
*************** checking profile consistency is not poss
*** 21706,21715 ****
  accumulation.  Hence special attention needs to be given to this issue
  in each pass that modifies the CFG.
  
!  It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE'
  are both set low enough to be possible to compute second power of any
  frequency or probability in the flow graph, it is not possible to even
! square the 'count' field, as modern CPUs are fast enough to execute
  $2^32$ operations quickly.
  
  
--- 21707,21716 ----
  accumulation.  Hence special attention needs to be given to this issue
  in each pass that modifies the CFG.
  
!  It is important to point out that ‘REG_BR_PROB_BASE’ and ‘BB_FREQ_BASE’
  are both set low enough to be possible to compute second power of any
  frequency or probability in the flow graph, it is not possible to even
! square the ‘count’ field, as modern CPUs are fast enough to execute
  $2^32$ operations quickly.
  
  
*************** very expensive and lost profile informat
*** 21725,21834 ****
  all.
  
   GCC has two major intermediate representations, and both use the
! 'basic_block' and 'edge' data types to represent control flow.  Both
  representations share as much of the CFG maintenance code as possible.
! For each representation, a set of "hooks" is defined so that each
  representation can provide its own implementation of CFG manipulation
! routines when necessary.  These hooks are defined in 'cfghooks.h'.
  There are hooks for almost all common CFG manipulations, including block
  splitting and merging, edge redirection and creating and deleting basic
  blocks.  These hooks should provide everything you need to maintain and
! manipulate the CFG in both the RTL and 'GIMPLE' representation.
  
   At the moment, the basic block boundaries are maintained transparently
  when modifying instructions, so there rarely is a need to move them
  manually (such as in case someone wants to output instruction outside
  basic block explicitly).
  
!  In the RTL representation, each instruction has a 'BLOCK_FOR_INSN'
  value that represents pointer to the basic block that contains the
! instruction.  In the 'GIMPLE' representation, the function 'gimple_bb'
  returns a pointer to the basic block containing the queried statement.
  
!  When changes need to be applied to a function in its 'GIMPLE'
! representation, "GIMPLE statement iterators" should be used.  These
  iterators provide an integrated abstraction of the flow graph and the
  instruction stream.  Block statement iterators are constructed using the
! 'gimple_stmt_iterator' data structure and several modifiers are
  available, including the following:
  
! 'gsi_start'
!      This function initializes a 'gimple_stmt_iterator' that points to
       the first non-empty statement in a basic block.
  
! 'gsi_last'
!      This function initializes a 'gimple_stmt_iterator' that points to
       the last statement in a basic block.
  
! 'gsi_end_p'
!      This predicate is 'true' if a 'gimple_stmt_iterator' represents the
       end of a basic block.
  
! 'gsi_next'
!      This function takes a 'gimple_stmt_iterator' and makes it point to
       its successor.
  
! 'gsi_prev'
!      This function takes a 'gimple_stmt_iterator' and makes it point to
       its predecessor.
  
! 'gsi_insert_after'
!      This function inserts a statement after the 'gimple_stmt_iterator'
       passed in.  The final parameter determines whether the statement
       iterator is updated to point to the newly inserted statement, or
       left pointing to the original statement.
  
! 'gsi_insert_before'
!      This function inserts a statement before the 'gimple_stmt_iterator'
       passed in.  The final parameter determines whether the statement
       iterator is updated to point to the newly inserted statement, or
       left pointing to the original statement.
  
! 'gsi_remove'
!      This function removes the 'gimple_stmt_iterator' passed in and
       rechains the remaining statements in a basic block, if any.
  
!  In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be
! used to get the head and end 'rtx' of a basic block.  No abstract
  iterators are defined for traversing the insn chain, but you can just
! use 'NEXT_INSN' and 'PREV_INSN' instead.  *Note Insns::.
  
   Usually a code manipulating pass simplifies the instruction stream and
  the flow of control, possibly eliminating some edges.  This may for
  example happen when a conditional jump is replaced with an unconditional
  jump.  Updating of edges is not transparent and each optimization pass
  is required to do so manually.  However only few cases occur in
! practice.  The pass may call 'purge_dead_edges' on a given basic block
  to remove superfluous edges, if any.
  
   Another common scenario is redirection of branch instructions, but this
  is best modeled as redirection of edges in the control flow graph and
! thus use of 'redirect_edge_and_branch' is preferred over more low level
! functions, such as 'redirect_jump' that operate on RTL chain only.  The
! CFG hooks defined in 'cfghooks.h' should provide the complete API
  required for manipulating and maintaining the CFG.
  
   It is also possible that a pass has to insert control flow instruction
  into the middle of a basic block, thus creating an entry point in the
  middle of the basic block, which is impossible by definition: The block
  must be split to make sure it only has one entry point, i.e. the head of
! the basic block.  The CFG hook 'split_block' may be used when an
  instruction in the middle of a basic block has to become the target of a
  jump or branch instruction.
  
   For a global optimizer, a common operation is to split edges in the
  flow graph and insert instructions on them.  In the RTL representation,
! this can be easily done using the 'insert_insn_on_edge' function that
  emits an instruction "on the edge", caching it for a later
! 'commit_edge_insertions' call that will take care of moving the inserted
  instructions off the edge into the instruction stream contained in a
  basic block.  This includes the creation of new basic blocks where
! needed.  In the 'GIMPLE' representation, the equivalent functions are
! 'gsi_insert_on_edge' which inserts a block statement iterator on an
! edge, and 'gsi_commit_edge_inserts' which flushes the instruction to
  actual instruction stream.
  
!  While debugging the optimization pass, the 'verify_flow_info' function
  may be useful to find bugs in the control flow graph updating code.
  
  
--- 21726,21835 ----
  all.
  
   GCC has two major intermediate representations, and both use the
! ‘basic_block’ and ‘edge’ data types to represent control flow.  Both
  representations share as much of the CFG maintenance code as possible.
! For each representation, a set of “hooks” is defined so that each
  representation can provide its own implementation of CFG manipulation
! routines when necessary.  These hooks are defined in ‘cfghooks.h’.
  There are hooks for almost all common CFG manipulations, including block
  splitting and merging, edge redirection and creating and deleting basic
  blocks.  These hooks should provide everything you need to maintain and
! manipulate the CFG in both the RTL and ‘GIMPLE’ representation.
  
   At the moment, the basic block boundaries are maintained transparently
  when modifying instructions, so there rarely is a need to move them
  manually (such as in case someone wants to output instruction outside
  basic block explicitly).
  
!  In the RTL representation, each instruction has a ‘BLOCK_FOR_INSN’
  value that represents pointer to the basic block that contains the
! instruction.  In the ‘GIMPLE’ representation, the function ‘gimple_bb’
  returns a pointer to the basic block containing the queried statement.
  
!  When changes need to be applied to a function in its ‘GIMPLE’
! representation, “GIMPLE statement iterators” should be used.  These
  iterators provide an integrated abstraction of the flow graph and the
  instruction stream.  Block statement iterators are constructed using the
! ‘gimple_stmt_iterator’ data structure and several modifiers are
  available, including the following:
  
! ‘gsi_start’
!      This function initializes a ‘gimple_stmt_iterator’ that points to
       the first non-empty statement in a basic block.
  
! ‘gsi_last’
!      This function initializes a ‘gimple_stmt_iterator’ that points to
       the last statement in a basic block.
  
! ‘gsi_end_p’
!      This predicate is ‘true’ if a ‘gimple_stmt_iterator’ represents the
       end of a basic block.
  
! ‘gsi_next’
!      This function takes a ‘gimple_stmt_iterator’ and makes it point to
       its successor.
  
! ‘gsi_prev’
!      This function takes a ‘gimple_stmt_iterator’ and makes it point to
       its predecessor.
  
! ‘gsi_insert_after’
!      This function inserts a statement after the ‘gimple_stmt_iterator’
       passed in.  The final parameter determines whether the statement
       iterator is updated to point to the newly inserted statement, or
       left pointing to the original statement.
  
! ‘gsi_insert_before’
!      This function inserts a statement before the ‘gimple_stmt_iterator’
       passed in.  The final parameter determines whether the statement
       iterator is updated to point to the newly inserted statement, or
       left pointing to the original statement.
  
! ‘gsi_remove’
!      This function removes the ‘gimple_stmt_iterator’ passed in and
       rechains the remaining statements in a basic block, if any.
  
!  In the RTL representation, the macros ‘BB_HEAD’ and ‘BB_END’ may be
! used to get the head and end ‘rtx’ of a basic block.  No abstract
  iterators are defined for traversing the insn chain, but you can just
! use ‘NEXT_INSN’ and ‘PREV_INSN’ instead.  *Note Insns::.
  
   Usually a code manipulating pass simplifies the instruction stream and
  the flow of control, possibly eliminating some edges.  This may for
  example happen when a conditional jump is replaced with an unconditional
  jump.  Updating of edges is not transparent and each optimization pass
  is required to do so manually.  However only few cases occur in
! practice.  The pass may call ‘purge_dead_edges’ on a given basic block
  to remove superfluous edges, if any.
  
   Another common scenario is redirection of branch instructions, but this
  is best modeled as redirection of edges in the control flow graph and
! thus use of ‘redirect_edge_and_branch’ is preferred over more low level
! functions, such as ‘redirect_jump’ that operate on RTL chain only.  The
! CFG hooks defined in ‘cfghooks.h’ should provide the complete API
  required for manipulating and maintaining the CFG.
  
   It is also possible that a pass has to insert control flow instruction
  into the middle of a basic block, thus creating an entry point in the
  middle of the basic block, which is impossible by definition: The block
  must be split to make sure it only has one entry point, i.e. the head of
! the basic block.  The CFG hook ‘split_block’ may be used when an
  instruction in the middle of a basic block has to become the target of a
  jump or branch instruction.
  
   For a global optimizer, a common operation is to split edges in the
  flow graph and insert instructions on them.  In the RTL representation,
! this can be easily done using the ‘insert_insn_on_edge’ function that
  emits an instruction "on the edge", caching it for a later
! ‘commit_edge_insertions’ call that will take care of moving the inserted
  instructions off the edge into the instruction stream contained in a
  basic block.  This includes the creation of new basic blocks where
! needed.  In the ‘GIMPLE’ representation, the equivalent functions are
! ‘gsi_insert_on_edge’ which inserts a block statement iterator on an
! edge, and ‘gsi_commit_edge_inserts’ which flushes the instruction to
  actual instruction stream.
  
!  While debugging the optimization pass, the ‘verify_flow_info’ function
  may be useful to find bugs in the control flow graph updating code.
  
  
*************** live.  The hard registers and stack slot
*** 21846,21873 ****
  values when a register is dead.
  
   Liveness information is available in the back end starting with
! 'pass_df_initialize' and ending with 'pass_df_finish'.  Three flavors of
! live analysis are available: With 'LR', it is possible to determine at
! any point 'P' in the function if the register may be used on some path
! from 'P' to the end of the function.  With 'UR', it is possible to
! determine if there is a path from the beginning of the function to 'P'
! that defines the variable.  'LIVE' is the intersection of the 'LR' and
! 'UR' and a variable is live at 'P' if there is both an assignment that
  reaches it from the beginning of the function and a use that can be
! reached on some path from 'P' to the end of the function.
  
!  In general 'LIVE' is the most useful of the three.  The macros
! 'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
  macros take a basic block number and return a bitmap that is indexed by
  the register number.  This information is only guaranteed to be up to
! date after calls are made to 'df_analyze'.  See the file 'df-core.cc'
  for details on using the dataflow.
  
   The liveness information is stored partly in the RTL instruction stream
  and partly in the flow graph.  Local information is stored in the
! instruction stream: Each instruction may contain 'REG_DEAD' notes
  representing that the value of a given register is no longer needed, or
! 'REG_UNUSED' notes representing that the value computed by the
  instruction is never used.  The second is useful for instructions
  computing multiple values at once.
  
--- 21847,21874 ----
  values when a register is dead.
  
   Liveness information is available in the back end starting with
! ‘pass_df_initialize’ and ending with ‘pass_df_finish’.  Three flavors of
! live analysis are available: With ‘LR’, it is possible to determine at
! any point ‘P’ in the function if the register may be used on some path
! from ‘P’ to the end of the function.  With ‘UR’, it is possible to
! determine if there is a path from the beginning of the function to ‘P’
! that defines the variable.  ‘LIVE’ is the intersection of the ‘LR’ and
! ‘UR’ and a variable is live at ‘P’ if there is both an assignment that
  reaches it from the beginning of the function and a use that can be
! reached on some path from ‘P’ to the end of the function.
  
!  In general ‘LIVE’ is the most useful of the three.  The macros
! ‘DF_[LR,UR,LIVE]_[IN,OUT]’ can be used to access this information.  The
  macros take a basic block number and return a bitmap that is indexed by
  the register number.  This information is only guaranteed to be up to
! date after calls are made to ‘df_analyze’.  See the file ‘df-core.cc’
  for details on using the dataflow.
  
   The liveness information is stored partly in the RTL instruction stream
  and partly in the flow graph.  Local information is stored in the
! instruction stream: Each instruction may contain ‘REG_DEAD’ notes
  representing that the value of a given register is no longer needed, or
! ‘REG_UNUSED’ notes representing that the value computed by the
  instruction is never used.  The second is useful for instructions
  computing multiple values at once.
  
*************** File: gccint.info,  Node: Loop represent
*** 21902,21908 ****
  
  This chapter describes the representation of loops in GCC, and functions
  that can be used to build, modify and analyze this representation.  Most
! of the interfaces and data structures are declared in 'cfgloop.h'.  Loop
  structures are analyzed and this information disposed or updated at the
  discretion of individual passes.  Still most of the generic CFG
  manipulation routines are aware of loop structures and try to keep them
--- 21903,21909 ----
  
  This chapter describes the representation of loops in GCC, and functions
  that can be used to build, modify and analyze this representation.  Most
! of the interfaces and data structures are declared in ‘cfgloop.h’.  Loop
  structures are analyzed and this information disposed or updated at the
  discretion of individual passes.  Still most of the generic CFG
  manipulation routines are aware of loop structures and try to keep them
*************** correspond to sub-loops or to control fl
*** 21924,21930 ****
  that the analysis sometimes changes the CFG, and if you run it in the
  middle of an optimization pass, you must be able to deal with the new
  blocks.  You may avoid CFG changes by passing
! 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
  however that most other loop manipulation functions will not work
  correctly for loops with multiple latch edges (the functions that only
  query membership of blocks to loops and subloop relationships, or
--- 21925,21931 ----
  that the analysis sometimes changes the CFG, and if you run it in the
  middle of an optimization pass, you must be able to deal with the new
  blocks.  You may avoid CFG changes by passing
! ‘LOOPS_MAY_HAVE_MULTIPLE_LATCHES’ flag to the loop discovery, note
  however that most other loop manipulation functions will not work
  correctly for loops with multiple latch edges (the functions that only
  query membership of blocks to loops and subloop relationships, or
*************** enumerate and test loop exits, can be ex
*** 21934,21956 ****
  and reachable from its latch against the direction of edges in CFG.  The
  loops are organized in a containment hierarchy (tree) such that all the
  loops immediately contained inside loop L are the children of L in the
! tree.  This tree is represented by the 'struct loops' structure.  The
  root of this tree is a fake loop that contains all blocks in the
! function.  Each of the loops is represented in a 'struct loop'
! structure.  Each loop is assigned an index ('num' field of the 'struct
! loop' structure), and the pointer to the loop is stored in the
! corresponding field of the 'larray' vector in the loops structure.  The
! indices do not have to be continuous, there may be empty ('NULL')
! entries in the 'larray' created by deleting loops.  Also, there is no
  guarantee on the relative order of a loop and its subloops in the
  numbering.  The index of a loop never changes.
  
!  The entries of the 'larray' field should not be accessed directly.  The
! function 'get_loop' returns the loop description for a loop with the
! given index.  'number_of_loops' function returns number of loops in the
  function.  To traverse all loops, use a range-based for loop with class
! 'loops_list' instance.  The 'flags' argument passed to the constructor
! function of class 'loops_list' is used to determine the direction of
  traversal and the set of loops visited.  Each loop is guaranteed to be
  visited exactly once, regardless of the changes to the loop tree, and
  the loops may be removed during the traversal.  The newly created loops
--- 21935,21957 ----
  and reachable from its latch against the direction of edges in CFG.  The
  loops are organized in a containment hierarchy (tree) such that all the
  loops immediately contained inside loop L are the children of L in the
! tree.  This tree is represented by the ‘struct loops’ structure.  The
  root of this tree is a fake loop that contains all blocks in the
! function.  Each of the loops is represented in a ‘struct loop’
! structure.  Each loop is assigned an index (‘num’ field of the ‘struct
! loop’ structure), and the pointer to the loop is stored in the
! corresponding field of the ‘larray’ vector in the loops structure.  The
! indices do not have to be continuous, there may be empty (‘NULL’)
! entries in the ‘larray’ created by deleting loops.  Also, there is no
  guarantee on the relative order of a loop and its subloops in the
  numbering.  The index of a loop never changes.
  
!  The entries of the ‘larray’ field should not be accessed directly.  The
! function ‘get_loop’ returns the loop description for a loop with the
! given index.  ‘number_of_loops’ function returns number of loops in the
  function.  To traverse all loops, use a range-based for loop with class
! ‘loops_list’ instance.  The ‘flags’ argument passed to the constructor
! function of class ‘loops_list’ is used to determine the direction of
  traversal and the set of loops visited.  Each loop is guaranteed to be
  visited exactly once, regardless of the changes to the loop tree, and
  the loops may be removed during the traversal.  The newly created loops
*************** are never traversed, if they need to be
*** 21958,21988 ****
  separately after their creation.
  
   Each basic block contains the reference to the innermost loop it
! belongs to ('loop_father').  For this reason, it is only possible to
! have one 'struct loops' structure initialized at the same time for each
! CFG.  The global variable 'current_loops' contains the 'struct loops'
  structure.  Many of the loop manipulation functions assume that
  dominance information is up-to-date.
  
!  The loops are analyzed through 'loop_optimizer_init' function.  The
  argument of this function is a set of flags represented in an integer
  bitmask.  These flags specify what other properties of the loop
  structures should be calculated/enforced and preserved later:
  
!    * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
       to CFG will be performed in the loop analysis, in particular, loops
       with multiple latch edges will not be disambiguated.  If a loop has
       multiple latches, its latch block is set to NULL.  Most of the loop
       manipulation functions will not work for loops in this shape.  No
       other flags that require CFG changes can be passed to
       loop_optimizer_init.
!    * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way
       that each loop has only one entry edge, and additionally, the
       source block of this entry edge has only one successor.  This
       creates a natural place where the code can be moved out of the
       loop, and ensures that the entry edge of the loop leads from its
       immediate super-loop.
!    * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
       the latch block of each loop to have only one successor.  This
       ensures that the latch of the loop does not belong to any of its
       sub-loops, and makes manipulation with the loops significantly
--- 21959,21989 ----
  separately after their creation.
  
   Each basic block contains the reference to the innermost loop it
! belongs to (‘loop_father’).  For this reason, it is only possible to
! have one ‘struct loops’ structure initialized at the same time for each
! CFG.  The global variable ‘current_loops’ contains the ‘struct loops’
  structure.  Many of the loop manipulation functions assume that
  dominance information is up-to-date.
  
!  The loops are analyzed through ‘loop_optimizer_init’ function.  The
  argument of this function is a set of flags represented in an integer
  bitmask.  These flags specify what other properties of the loop
  structures should be calculated/enforced and preserved later:
  
!    • ‘LOOPS_MAY_HAVE_MULTIPLE_LATCHES’: If this flag is set, no changes
       to CFG will be performed in the loop analysis, in particular, loops
       with multiple latch edges will not be disambiguated.  If a loop has
       multiple latches, its latch block is set to NULL.  Most of the loop
       manipulation functions will not work for loops in this shape.  No
       other flags that require CFG changes can be passed to
       loop_optimizer_init.
!    • ‘LOOPS_HAVE_PREHEADERS’: Forwarder blocks are created in such a way
       that each loop has only one entry edge, and additionally, the
       source block of this entry edge has only one successor.  This
       creates a natural place where the code can be moved out of the
       loop, and ensures that the entry edge of the loop leads from its
       immediate super-loop.
!    • ‘LOOPS_HAVE_SIMPLE_LATCHES’: Forwarder blocks are created to force
       the latch block of each loop to have only one successor.  This
       ensures that the latch of the loop does not belong to any of its
       sub-loops, and makes manipulation with the loops significantly
*************** structures should be calculated/enforced
*** 21990,22027 ****
       loops are in this shape.  Note that with this flag, the "normal"
       loop without any control flow inside and with one exit consists of
       two basic blocks.
!    * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
       the strongly connected components that are not natural loops (have
!      more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP'
!      and 'EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
       and edges that belong to natural loops that are in such an
       irreducible region (but it is set for the entry and exit edges of
       such a loop, if they lead to/from this region).
!    * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
       updated for each loop.  This makes some functions (e.g.,
!      'get_loop_exit_edges') more efficient.  Some functions (e.g.,
!      'single_exit') can be used only if the lists of exits are recorded.
  
   These properties may also be computed/enforced later, using functions
! 'create_preheaders', 'force_single_succ_latches',
! 'mark_irreducible_loops' and 'record_loop_exits'.  The properties can be
! queried using 'loops_state_satisfies_p'.
  
   The memory occupied by the loops structures should be freed with
! 'loop_optimizer_finalize' function.  When loop structures are setup to
  be preserved across passes this function reduces the information to be
! kept up-to-date to a minimum (only 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES'
  set).
  
   The CFG manipulation functions in general do not update loop
  structures.  Specialized versions that additionally do so are provided
! for the most common tasks.  On GIMPLE, 'cleanup_tree_cfg_loop' function
  can be used to cleanup CFG while updating the loops structures if
! 'current_loops' is set.
  
   At the moment loop structure is preserved from the start of GIMPLE loop
  optimizations until the end of RTL loop optimizations.  During this time
! a loop can be tracked by its 'struct loop' and number.
  
  
  File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
--- 21991,22028 ----
       loops are in this shape.  Note that with this flag, the "normal"
       loop without any control flow inside and with one exit consists of
       two basic blocks.
!    • ‘LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS’: Basic blocks and edges in
       the strongly connected components that are not natural loops (have
!      more than one entry block) are marked with ‘BB_IRREDUCIBLE_LOOP’
!      and ‘EDGE_IRREDUCIBLE_LOOP’ flags.  The flag is not set for blocks
       and edges that belong to natural loops that are in such an
       irreducible region (but it is set for the entry and exit edges of
       such a loop, if they lead to/from this region).
!    • ‘LOOPS_HAVE_RECORDED_EXITS’: The lists of exits are recorded and
       updated for each loop.  This makes some functions (e.g.,
!      ‘get_loop_exit_edges’) more efficient.  Some functions (e.g.,
!      ‘single_exit’) can be used only if the lists of exits are recorded.
  
   These properties may also be computed/enforced later, using functions
! ‘create_preheaders’, ‘force_single_succ_latches’,
! ‘mark_irreducible_loops’ and ‘record_loop_exits’.  The properties can be
! queried using ‘loops_state_satisfies_p’.
  
   The memory occupied by the loops structures should be freed with
! ‘loop_optimizer_finalize’ function.  When loop structures are setup to
  be preserved across passes this function reduces the information to be
! kept up-to-date to a minimum (only ‘LOOPS_MAY_HAVE_MULTIPLE_LATCHES’
  set).
  
   The CFG manipulation functions in general do not update loop
  structures.  Specialized versions that additionally do so are provided
! for the most common tasks.  On GIMPLE, ‘cleanup_tree_cfg_loop’ function
  can be used to cleanup CFG while updating the loops structures if
! ‘current_loops’ is set.
  
   At the moment loop structure is preserved from the start of GIMPLE loop
  optimizations until the end of RTL loop optimizations.  During this time
! a loop can be tracked by its ‘struct loop’ and number.
  
  
  File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
*************** File: gccint.info,  Node: Loop querying,
*** 22030,22044 ****
  ==================
  
  The functions to query the information about loops are declared in
! 'cfgloop.h'.  Some of the information can be taken directly from the
! structures.  'loop_father' field of each basic block contains the
  innermost loop to that the block belongs.  The most useful fields of
  loop structure (that are kept up-to-date at all times) are:
  
!    * 'header', 'latch': Header and latch basic blocks of the loop.
!    * 'num_nodes': Number of basic blocks in the loop (including the
       basic blocks of the sub-loops).
!    * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and
       the sibling of the loop in the loops tree.
  
   There are other fields in the loop structures, many of them used only
--- 22031,22045 ----
  ==================
  
  The functions to query the information about loops are declared in
! ‘cfgloop.h’.  Some of the information can be taken directly from the
! structures.  ‘loop_father’ field of each basic block contains the
  innermost loop to that the block belongs.  The most useful fields of
  loop structure (that are kept up-to-date at all times) are:
  
!    • ‘header’, ‘latch’: Header and latch basic blocks of the loop.
!    • ‘num_nodes’: Number of basic blocks in the loop (including the
       basic blocks of the sub-loops).
!    • ‘outer’, ‘inner’, ‘next’: The super-loop, the first sub-loop, and
       the sibling of the loop in the loops tree.
  
   There are other fields in the loop structures, many of them used only
*************** they should not be accessed directly.
*** 22047,22080 ****
  
   The most important functions to query loop structures are:
  
!    * 'loop_depth': The depth of the loop in the loops tree, i.e., the
       number of super-loops of the loop.
!    * 'flow_loops_dump': Dumps the information about loops to a file.
!    * 'verify_loop_structure': Checks consistency of the loop structures.
!    * 'loop_latch_edge': Returns the latch edge of a loop.
!    * 'loop_preheader_edge': If loops have preheaders, returns the
       preheader edge of a loop.
!    * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another
       loop.
!    * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a
       loop (including its sub-loops).
!    * 'find_common_loop': Finds the common super-loop of two loops.
!    * 'superloop_at_depth': Returns the super-loop of a loop with the
       given depth.
!    * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of
       insns in the loop, on GIMPLE and on RTL.
!    * 'loop_exit_edge_p': Tests whether edge is an exit from a loop.
!    * 'mark_loop_exit_edges': Marks all exit edges of all loops with
!      'EDGE_LOOP_EXIT' flag.
!    * 'get_loop_body', 'get_loop_body_in_dom_order',
!      'get_loop_body_in_bfs_order': Enumerates the basic blocks in the
       loop in depth-first search order in reversed CFG, ordered by
       dominance relation, and breath-first search order, respectively.
!    * 'single_exit': Returns the single exit edge of the loop, or 'NULL'
       if the loop has more than one exit.  You can only use this function
!      if 'LOOPS_HAVE_RECORDED_EXITS' is used.
!    * 'get_loop_exit_edges': Enumerates the exit edges of a loop.
!    * 'just_once_each_iteration_p': Returns true if the basic block is
       executed exactly once during each iteration of a loop (that is, it
       does not belong to a sub-loop, and it dominates the latch of the
       loop).
--- 22048,22081 ----
  
   The most important functions to query loop structures are:
  
!    • ‘loop_depth’: The depth of the loop in the loops tree, i.e., the
       number of super-loops of the loop.
!    • ‘flow_loops_dump’: Dumps the information about loops to a file.
!    • ‘verify_loop_structure’: Checks consistency of the loop structures.
!    • ‘loop_latch_edge’: Returns the latch edge of a loop.
!    • ‘loop_preheader_edge’: If loops have preheaders, returns the
       preheader edge of a loop.
!    • ‘flow_loop_nested_p’: Tests whether loop is a sub-loop of another
       loop.
!    • ‘flow_bb_inside_loop_p’: Tests whether a basic block belongs to a
       loop (including its sub-loops).
!    • ‘find_common_loop’: Finds the common super-loop of two loops.
!    • ‘superloop_at_depth’: Returns the super-loop of a loop with the
       given depth.
!    • ‘tree_num_loop_insns’, ‘num_loop_insns’: Estimates the number of
       insns in the loop, on GIMPLE and on RTL.
!    • ‘loop_exit_edge_p’: Tests whether edge is an exit from a loop.
!    • ‘mark_loop_exit_edges’: Marks all exit edges of all loops with
!      ‘EDGE_LOOP_EXIT’ flag.
!    • ‘get_loop_body’, ‘get_loop_body_in_dom_order’,
!      ‘get_loop_body_in_bfs_order’: Enumerates the basic blocks in the
       loop in depth-first search order in reversed CFG, ordered by
       dominance relation, and breath-first search order, respectively.
!    • ‘single_exit’: Returns the single exit edge of the loop, or ‘NULL’
       if the loop has more than one exit.  You can only use this function
!      if ‘LOOPS_HAVE_RECORDED_EXITS’ is used.
!    • ‘get_loop_exit_edges’: Enumerates the exit edges of a loop.
!    • ‘just_once_each_iteration_p’: Returns true if the basic block is
       executed exactly once during each iteration of a loop (that is, it
       does not belong to a sub-loop, and it dominates the latch of the
       loop).
*************** File: gccint.info,  Node: Loop manipulat
*** 22087,22102 ****
  
  The loops tree can be manipulated using the following functions:
  
!    * 'flow_loop_tree_node_add': Adds a node to the tree.
!    * 'flow_loop_tree_node_remove': Removes a node from the tree.
!    * 'add_bb_to_loop': Adds a basic block to a loop.
!    * 'remove_bb_from_loops': Removes a basic block from loops.
  
   Most low-level CFG functions update loops automatically.  The following
  functions handle some more complicated cases of CFG manipulations:
  
!    * 'remove_path': Removes an edge and all blocks it dominates.
!    * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that
       PHI node arguments remain in the loop (this ensures that
       loop-closed SSA form is preserved).  Only useful on GIMPLE.
  
--- 22088,22103 ----
  
  The loops tree can be manipulated using the following functions:
  
!    • ‘flow_loop_tree_node_add’: Adds a node to the tree.
!    • ‘flow_loop_tree_node_remove’: Removes a node from the tree.
!    • ‘add_bb_to_loop’: Adds a basic block to a loop.
!    • ‘remove_bb_from_loops’: Removes a basic block from loops.
  
   Most low-level CFG functions update loops automatically.  The following
  functions handle some more complicated cases of CFG manipulations:
  
!    • ‘remove_path’: Removes an edge and all blocks it dominates.
!    • ‘split_loop_exit_edge’: Splits exit edge of the loop, ensuring that
       PHI node arguments remain in the loop (this ensures that
       loop-closed SSA form is preserved).  Only useful on GIMPLE.
  
*************** While some of them are written so that t
*** 22105,22127 ****
  loops, they are mostly untested in that case, and at the moment, they
  are only reliable for the innermost loops:
  
!    * 'create_iv': Creates a new induction variable.  Only works on
!      GIMPLE.  'standard_iv_increment_position' can be used to find a
       suitable place for the iv increment.
!    * 'duplicate_loop_body_to_header_edge',
!      'tree_duplicate_loop_body_to_header_edge': These functions (on RTL
       and on GIMPLE) duplicate the body of the loop prescribed number of
       times on one of the edges entering loop header, thus performing
!      either loop unrolling or loop peeling.  'can_duplicate_loop_p'
!      ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated
       loop.
!    * 'loop_version': This function creates a copy of a loop, and a
       branch before them that selects one of them depending on the
       prescribed condition.  This is useful for optimizations that need
       to verify some assumptions in runtime (one of the copies of the
       loop is usually left unchanged, while the other one is transformed
       in some way).
!    * 'tree_unroll_loop': Unrolls the loop, including peeling the extra
       iterations to make the number of iterations divisible by unroll
       factor, updating the exit condition, and removing the exits that
       now cannot be taken.  Works only on GIMPLE.
--- 22106,22128 ----
  loops, they are mostly untested in that case, and at the moment, they
  are only reliable for the innermost loops:
  
!    • ‘create_iv’: Creates a new induction variable.  Only works on
!      GIMPLE.  ‘standard_iv_increment_position’ can be used to find a
       suitable place for the iv increment.
!    • ‘duplicate_loop_body_to_header_edge’,
!      ‘tree_duplicate_loop_body_to_header_edge’: These functions (on RTL
       and on GIMPLE) duplicate the body of the loop prescribed number of
       times on one of the edges entering loop header, thus performing
!      either loop unrolling or loop peeling.  ‘can_duplicate_loop_p’
!      (‘can_unroll_loop_p’ on GIMPLE) must be true for the duplicated
       loop.
!    • ‘loop_version’: This function creates a copy of a loop, and a
       branch before them that selects one of them depending on the
       prescribed condition.  This is useful for optimizations that need
       to verify some assumptions in runtime (one of the copies of the
       loop is usually left unchanged, while the other one is transformed
       in some way).
!    • ‘tree_unroll_loop’: Unrolls the loop, including peeling the extra
       iterations to make the number of iterations divisible by unroll
       factor, updating the exit condition, and removing the exits that
       now cannot be taken.  Works only on GIMPLE.
*************** held in LCSSA, in order to save memory.
*** 22142,22156 ****
  
   There are various benefits of LCSSA:
  
!    * Many optimizations (value range analysis, final value replacement)
       are interested in the values that are defined in the loop and used
       outside of it, i.e., exactly those for that we create new PHI
       nodes.
!    * In induction variable analysis, it is not necessary to specify the
       loop in that the analysis should be performed - the scalar
       evolution analysis always returns the results with respect to the
       loop in that the SSA name is defined.
!    * It makes updating of SSA form during loop transformations simpler.
       Without LCSSA, operations like loop unrolling may force creation of
       PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA
       form can be updated locally.  However, since we only keep real
--- 22143,22157 ----
  
   There are various benefits of LCSSA:
  
!    • Many optimizations (value range analysis, final value replacement)
       are interested in the values that are defined in the loop and used
       outside of it, i.e., exactly those for that we create new PHI
       nodes.
!    • In induction variable analysis, it is not necessary to specify the
       loop in that the analysis should be performed - the scalar
       evolution analysis always returns the results with respect to the
       loop in that the SSA name is defined.
!    • It makes updating of SSA form during loop transformations simpler.
       Without LCSSA, operations like loop unrolling may force creation of
       PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA
       form can be updated locally.  However, since we only keep real
*************** held in LCSSA, in order to save memory.
*** 22163,22170 ****
  straightforward, unless you create a new value in loop and use it
  outside, or unless you manipulate loop exit edges (functions are
  provided to make these manipulations simple).
! 'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and
! 'verify_loop_closed_ssa' to check that the invariant of LCSSA is
  preserved.
  
  
--- 22164,22171 ----
  straightforward, unless you create a new value in loop and use it
  outside, or unless you manipulate loop exit edges (functions are
  provided to make these manipulations simple).
! ‘rewrite_into_loop_closed_ssa’ is used to rewrite SSA form to LCSSA, and
! ‘verify_loop_closed_ssa’ to check that the invariant of LCSSA is
  preserved.
  
  
*************** variable analysis on GIMPLE.  They enabl
*** 22178,22214 ****
  complicated behavior in a simple and consistent way (we only use it to
  express values of polynomial induction variables, but it is possible to
  extend it).  The interfaces to SCEV analysis are declared in
! 'tree-scalar-evolution.h'.  To use scalar evolutions analysis,
! 'scev_initialize' must be used.  To stop using SCEV, 'scev_finalize'
  should be used.  SCEV analysis caches results in order to save time and
  memory.  This cache however is made invalid by most of the loop
  transformations, including removal of code.  If such a transformation is
! performed, 'scev_reset' must be called to clean the caches.
  
   Given an SSA name, its behavior in loops can be analyzed using the
! 'analyze_scalar_evolution' function.  The returned SCEV however does not
  have to be fully analyzed and it may contain references to other SSA
  names defined in the loop.  To resolve these (potentially recursive)
! references, 'instantiate_parameters' or 'resolve_mixers' functions must
! be used.  'instantiate_parameters' is useful when you use the results of
  SCEV only for some analysis, and when you work with whole nest of loops
  at once.  It will try replacing all SSA names by their SCEV in all
  loops, including the super-loops of the current loop, thus providing a
  complete information about the behavior of the variable in the loop
! nest.  'resolve_mixers' is useful if you work with only one loop at a
  time, and if you possibly need to create code based on the value of the
  induction variable.  It will only resolve the SSA names defined in the
  current loop, leaving the SSA names defined outside unchanged, even if
  their evolution in the outer loops is known.
  
   The SCEV is a normal tree expression, except for the fact that it may
! contain several special tree nodes.  One of them is 'SCEV_NOT_KNOWN',
  used for SSA names whose value cannot be expressed.  The other one is
! 'POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
  and loop (both base and step may contain further polynomial chrecs).
  Type of the expression and of base and step must be the same.  A
! variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in
! the specified loop) equivalent to 'x_1' in the following example
  
       while (...)
         {
--- 22179,22215 ----
  complicated behavior in a simple and consistent way (we only use it to
  express values of polynomial induction variables, but it is possible to
  extend it).  The interfaces to SCEV analysis are declared in
! ‘tree-scalar-evolution.h’.  To use scalar evolutions analysis,
! ‘scev_initialize’ must be used.  To stop using SCEV, ‘scev_finalize’
  should be used.  SCEV analysis caches results in order to save time and
  memory.  This cache however is made invalid by most of the loop
  transformations, including removal of code.  If such a transformation is
! performed, ‘scev_reset’ must be called to clean the caches.
  
   Given an SSA name, its behavior in loops can be analyzed using the
! ‘analyze_scalar_evolution’ function.  The returned SCEV however does not
  have to be fully analyzed and it may contain references to other SSA
  names defined in the loop.  To resolve these (potentially recursive)
! references, ‘instantiate_parameters’ or ‘resolve_mixers’ functions must
! be used.  ‘instantiate_parameters’ is useful when you use the results of
  SCEV only for some analysis, and when you work with whole nest of loops
  at once.  It will try replacing all SSA names by their SCEV in all
  loops, including the super-loops of the current loop, thus providing a
  complete information about the behavior of the variable in the loop
! nest.  ‘resolve_mixers’ is useful if you work with only one loop at a
  time, and if you possibly need to create code based on the value of the
  induction variable.  It will only resolve the SSA names defined in the
  current loop, leaving the SSA names defined outside unchanged, even if
  their evolution in the outer loops is known.
  
   The SCEV is a normal tree expression, except for the fact that it may
! contain several special tree nodes.  One of them is ‘SCEV_NOT_KNOWN’,
  used for SSA names whose value cannot be expressed.  The other one is
! ‘POLYNOMIAL_CHREC’.  Polynomial chrec has three arguments - base, step
  and loop (both base and step may contain further polynomial chrecs).
  Type of the expression and of base and step must be the same.  A
! variable has evolution ‘POLYNOMIAL_CHREC(base, step, loop)’ if it is (in
! the specified loop) equivalent to ‘x_1’ in the following example
  
       while (...)
         {
*************** the specified loop) equivalent to 'x_1'
*** 22217,22223 ****
         }
  
   Note that this includes the language restrictions on the operations.
! For example, if we compile C code and 'x' has signed type, then the
  overflow in addition would cause undefined behavior, and we may assume
  that this does not happen.  Hence, the value with this SCEV cannot
  overflow (which restricts the number of iterations of such a loop).
--- 22218,22224 ----
         }
  
   Note that this includes the language restrictions on the operations.
! For example, if we compile C code and ‘x’ has signed type, then the
  overflow in addition would cause undefined behavior, and we may assume
  that this does not happen.  Hence, the value with this SCEV cannot
  overflow (which restricts the number of iterations of such a loop).
*************** overflow (which restricts the number of
*** 22225,22231 ****
   In many cases, one wants to restrict the attention just to affine
  induction variables.  In this case, the extra expressive power of SCEV
  is not useful, and may complicate the optimizations.  In this case,
! 'simple_iv' function may be used to analyze a value - the result is a
  loop-invariant base and step.
  
  
--- 22226,22232 ----
   In many cases, one wants to restrict the attention just to affine
  induction variables.  In this case, the extra expressive power of SCEV
  is not useful, and may complicate the optimizations.  In this case,
! ‘simple_iv’ function may be used to analyze a value - the result is a
  loop-invariant base and step.
  
  
*************** File: gccint.info,  Node: loop-iv,  Next
*** 22236,22273 ****
  
  The induction variable on RTL is simple and only allows analysis of
  affine induction variables, and only in one loop at once.  The interface
! is declared in 'cfgloop.h'.  Before analyzing induction variables in a
! loop L, 'iv_analysis_loop_init' function must be called on L. After the
! analysis (possibly calling 'iv_analysis_loop_init' for several loops) is
! finished, 'iv_analysis_done' should be called.  The following functions
  can be used to access the results of the analysis:
  
!    * 'iv_analyze': Analyzes a single register used in the given insn.
       If no use of the register in this insn is found, the following
       insns are scanned, so that this function can be called on the insn
       returned by get_condition.
!    * 'iv_analyze_result': Analyzes result of the assignment in the given
       insn.
!    * 'iv_analyze_expr': Analyzes a more complicated expression.  All its
!      operands are analyzed by 'iv_analyze', and hence they must be used
       in the specified insn or one of the following insns.
  
!  The description of the induction variable is provided in 'struct
! rtx_iv'.  In order to handle subregs, the representation is a bit
! complicated; if the value of the 'extend' field is not 'UNKNOWN', the
  value of the induction variable in the i-th iteration is
  
       delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
  
!  with the following exception: if 'first_special' is true, then the
! value in the first iteration (when 'i' is zero) is 'delta + mult *
! base'.  However, if 'extend' is equal to 'UNKNOWN', then 'first_special'
! must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration
  is
  
       subreg_{mode} (base + i * step)
  
!  The function 'get_iv_value' can be used to perform these calculations.
  
  
  File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
--- 22237,22274 ----
  
  The induction variable on RTL is simple and only allows analysis of
  affine induction variables, and only in one loop at once.  The interface
! is declared in ‘cfgloop.h’.  Before analyzing induction variables in a
! loop L, ‘iv_analysis_loop_init’ function must be called on L. After the
! analysis (possibly calling ‘iv_analysis_loop_init’ for several loops) is
! finished, ‘iv_analysis_done’ should be called.  The following functions
  can be used to access the results of the analysis:
  
!    • ‘iv_analyze’: Analyzes a single register used in the given insn.
       If no use of the register in this insn is found, the following
       insns are scanned, so that this function can be called on the insn
       returned by get_condition.
!    • ‘iv_analyze_result’: Analyzes result of the assignment in the given
       insn.
!    • ‘iv_analyze_expr’: Analyzes a more complicated expression.  All its
!      operands are analyzed by ‘iv_analyze’, and hence they must be used
       in the specified insn or one of the following insns.
  
!  The description of the induction variable is provided in ‘struct
! rtx_iv’.  In order to handle subregs, the representation is a bit
! complicated; if the value of the ‘extend’ field is not ‘UNKNOWN’, the
  value of the induction variable in the i-th iteration is
  
       delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
  
!  with the following exception: if ‘first_special’ is true, then the
! value in the first iteration (when ‘i’ is zero) is ‘delta + mult *
! base’.  However, if ‘extend’ is equal to ‘UNKNOWN’, then ‘first_special’
! must be false, ‘delta’ 0, ‘mult’ 1 and the value in the i-th iteration
  is
  
       subreg_{mode} (base + i * step)
  
!  The function ‘get_iv_value’ can be used to perform these calculations.
  
  
  File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
*************** program; if it fails, the conditions are
*** 22286,22347 ****
  result.  The following information and conditions are provided by the
  analysis:
  
!    * 'assumptions': If this condition is false, the rest of the
       information is invalid.
!    * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this
       condition is true, the loop exits in the first iteration.
!    * 'infinite': If this condition is true, the loop is infinite.  This
       condition is only available on RTL.  On GIMPLE, conditions for
!      finiteness of the loop are included in 'assumptions'.
!    * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives
       number of iterations.  The number of iterations is defined as the
       number of executions of the loop latch.
  
   Both on GIMPLE and on RTL, it necessary for the induction variable
  analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
! On GIMPLE, the results are stored to 'struct tree_niter_desc' structure.
  Number of iterations before the loop is exited through a given exit can
! be determined using 'number_of_iterations_exit' function.  On RTL, the
! results are returned in 'struct niter_desc' structure.  The
! corresponding function is named 'check_simple_exit'.  There are also
  functions that pass through all the exits of a loop and try to find one
! with easy to determine number of iterations - 'find_loop_niter' on
! GIMPLE and 'find_simple_exit' on RTL.  Finally, there are functions that
  provide the same information, but additionally cache it, so that
  repeated calls to number of iterations are not so costly -
! 'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on
  RTL.
  
   Note that some of these functions may behave slightly differently than
  others - some of them return only the expression for the number of
  iterations, and fail if there are some assumptions.  The function
! 'number_of_latch_executions' works only for single-exit loops.  The
! function 'number_of_cond_exit_executions' can be used to determine
  number of executions of the exit condition of a single-exit loop (i.e.,
! the 'number_of_latch_executions' increased by one).
  
   On GIMPLE, below constraint flags affect semantics of some APIs of
  number of iterations analyzer:
  
!    * 'LOOP_C_INFINITE': If this constraint flag is set, the loop is
!      known to be infinite.  APIs like 'number_of_iterations_exit' can
       return false directly without doing any analysis.
!    * 'LOOP_C_FINITE': If this constraint flag is set, the loop is known
       to be finite, in other words, loop's number of iterations can be
!      computed with 'assumptions' be true.
  
   Generally, the constraint flags are set/cleared by consumers which are
  loop optimizers.  It's also the consumers' responsibility to set/clear
  constraints correctly.  Failing to do that might result in hard to track
  down bugs in scev/niter consumers.  One typical use case is vectorizer:
! it drives number of iterations analyzer by setting 'LOOP_C_FINITE' and
  vectorizes possibly infinite loop by versioning loop with analysis
  result.  In return, constraints set by consumers can also help number of
! iterations analyzer in following optimizers.  For example, 'niter' of a
! loop versioned under 'assumptions' is valid unconditionally.
  
   Other constraints may be added in the future, for example, a constraint
! indicating that loops' latch must roll thus 'may_be_zero' would be false
  unconditionally.
  
  
--- 22287,22348 ----
  result.  The following information and conditions are provided by the
  analysis:
  
!    • ‘assumptions’: If this condition is false, the rest of the
       information is invalid.
!    • ‘noloop_assumptions’ on RTL, ‘may_be_zero’ on GIMPLE: If this
       condition is true, the loop exits in the first iteration.
!    • ‘infinite’: If this condition is true, the loop is infinite.  This
       condition is only available on RTL.  On GIMPLE, conditions for
!      finiteness of the loop are included in ‘assumptions’.
!    • ‘niter_expr’ on RTL, ‘niter’ on GIMPLE: The expression that gives
       number of iterations.  The number of iterations is defined as the
       number of executions of the loop latch.
  
   Both on GIMPLE and on RTL, it necessary for the induction variable
  analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
! On GIMPLE, the results are stored to ‘struct tree_niter_desc’ structure.
  Number of iterations before the loop is exited through a given exit can
! be determined using ‘number_of_iterations_exit’ function.  On RTL, the
! results are returned in ‘struct niter_desc’ structure.  The
! corresponding function is named ‘check_simple_exit’.  There are also
  functions that pass through all the exits of a loop and try to find one
! with easy to determine number of iterations - ‘find_loop_niter’ on
! GIMPLE and ‘find_simple_exit’ on RTL.  Finally, there are functions that
  provide the same information, but additionally cache it, so that
  repeated calls to number of iterations are not so costly -
! ‘number_of_latch_executions’ on GIMPLE and ‘get_simple_loop_desc’ on
  RTL.
  
   Note that some of these functions may behave slightly differently than
  others - some of them return only the expression for the number of
  iterations, and fail if there are some assumptions.  The function
! ‘number_of_latch_executions’ works only for single-exit loops.  The
! function ‘number_of_cond_exit_executions’ can be used to determine
  number of executions of the exit condition of a single-exit loop (i.e.,
! the ‘number_of_latch_executions’ increased by one).
  
   On GIMPLE, below constraint flags affect semantics of some APIs of
  number of iterations analyzer:
  
!    • ‘LOOP_C_INFINITE’: If this constraint flag is set, the loop is
!      known to be infinite.  APIs like ‘number_of_iterations_exit’ can
       return false directly without doing any analysis.
!    • ‘LOOP_C_FINITE’: If this constraint flag is set, the loop is known
       to be finite, in other words, loop's number of iterations can be
!      computed with ‘assumptions’ be true.
  
   Generally, the constraint flags are set/cleared by consumers which are
  loop optimizers.  It's also the consumers' responsibility to set/clear
  constraints correctly.  Failing to do that might result in hard to track
  down bugs in scev/niter consumers.  One typical use case is vectorizer:
! it drives number of iterations analyzer by setting ‘LOOP_C_FINITE’ and
  vectorizes possibly infinite loop by versioning loop with analysis
  result.  In return, constraints set by consumers can also help number of
! iterations analyzer in following optimizers.  For example, ‘niter’ of a
! loop versioned under ‘assumptions’ is valid unconditionally.
  
   Other constraints may be added in the future, for example, a constraint
! indicating that loops' latch must roll thus ‘may_be_zero’ would be false
  unconditionally.
  
  
*************** File: gccint.info,  Node: Dependency ana
*** 22351,22370 ****
  =============================
  
  The code for the data dependence analysis can be found in
! 'tree-data-ref.cc' and its interface and data structures are described
! in 'tree-data-ref.h'.  The function that computes the data dependences
  for all the array and pointer references for a given loop is
! 'compute_data_dependences_for_loop'.  This function is currently used by
  the linear loop transform and the vectorization passes.  Before calling
  this function, one has to allocate two vectors: a first vector will
  contain the set of data references that are contained in the analyzed
  loop body, and the second vector will contain the dependence relations
  between the data references.  Thus if the vector of data references is
! of size 'n', the vector containing the dependence relations will contain
! 'n*n' elements.  However if the analyzed loop contains side effects,
  such as calls that potentially can interfere with the data references in
  the current analyzed loop, the analysis stops while scanning the loop
! body for data references, and inserts a single 'chrec_dont_know' in the
  dependence relation array.
  
   The data references are discovered in a particular order during the
--- 22352,22371 ----
  =============================
  
  The code for the data dependence analysis can be found in
! ‘tree-data-ref.cc’ and its interface and data structures are described
! in ‘tree-data-ref.h’.  The function that computes the data dependences
  for all the array and pointer references for a given loop is
! ‘compute_data_dependences_for_loop’.  This function is currently used by
  the linear loop transform and the vectorization passes.  Before calling
  this function, one has to allocate two vectors: a first vector will
  contain the set of data references that are contained in the analyzed
  loop body, and the second vector will contain the dependence relations
  between the data references.  Thus if the vector of data references is
! of size ‘n’, the vector containing the dependence relations will contain
! ‘n*n’ elements.  However if the analyzed loop contains side effects,
  such as calls that potentially can interfere with the data references in
  the current analyzed loop, the analysis stops while scanning the loop
! body for data references, and inserts a single ‘chrec_dont_know’ in the
  dependence relation array.
  
   The data references are discovered in a particular order during the
*************** queries to the loop body representation.
*** 22378,22397 ****
  
   Three types of data references are currently handled: ARRAY_REF,
  INDIRECT_REF and COMPONENT_REF.  The data structure for the data
! reference is 'data_reference', where 'data_reference_p' is a name of a
  pointer to the data reference structure.  The structure contains the
  following elements:
  
!    * 'base_object_info': Provides information about the base object of
       the data reference and its access functions.  These access
       functions represent the evolution of the data reference in the loop
       relative to its base, in keeping with the classical meaning of the
       data reference access function for the support of arrays.  For
!      example, for a reference 'a.b[i][j]', the base object is 'a.b' and
!      the access functions, one for each array subscript, are: '{i_init,
!      + i_step}_1, {j_init, +, j_step}_2'.
  
!    * 'first_location_in_loop': Provides information about the first
       location accessed by the data reference in the loop and about the
       access function used to represent evolution relative to this
       location.  This data is used to support pointers, and is not used
--- 22379,22398 ----
  
   Three types of data references are currently handled: ARRAY_REF,
  INDIRECT_REF and COMPONENT_REF.  The data structure for the data
! reference is ‘data_reference’, where ‘data_reference_p’ is a name of a
  pointer to the data reference structure.  The structure contains the
  following elements:
  
!    • ‘base_object_info’: Provides information about the base object of
       the data reference and its access functions.  These access
       functions represent the evolution of the data reference in the loop
       relative to its base, in keeping with the classical meaning of the
       data reference access function for the support of arrays.  For
!      example, for a reference ‘a.b[i][j]’, the base object is ‘a.b’ and
!      the access functions, one for each array subscript, are: ‘{i_init,
!      + i_step}_1, {j_init, +, j_step}_2’.
  
!    • ‘first_location_in_loop’: Provides information about the first
       location accessed by the data reference in the loop and about the
       access function used to represent evolution relative to this
       location.  This data is used to support pointers, and is not used
*************** following elements:
*** 22403,22412 ****
                     for2 j
                      *((int *)p + i + j) = a[i][j];
  
!      The access function of the pointer access is '{0, + 4B}_for2'
!      relative to 'p + i'.  The access functions of the array are
!      '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative
!      to 'a'.
  
       Usually, the object the pointer refers to is either unknown, or we
       cannot prove that the access is confined to the boundaries of a
--- 22404,22413 ----
                     for2 j
                      *((int *)p + i + j) = a[i][j];
  
!      The access function of the pointer access is ‘{0, + 4B}_for2’
!      relative to ‘p + i’.  The access functions of the array are
!      ‘{i_init, + i_step}_for1’ and ‘{j_init, +, j_step}_for2’ relative
!      to ‘a’.
  
       Usually, the object the pointer refers to is either unknown, or we
       cannot prove that the access is confined to the boundaries of a
*************** following elements:
*** 22417,22466 ****
       references.
  
       The current strategy for data dependence tests is as follows: If
!      both 'a' and 'b' are represented as arrays, compare 'a.base_object'
!      and 'b.base_object'; if they are equal, apply dependence tests (use
!      access functions based on base_objects).  Else if both 'a' and 'b'
!      are represented as pointers, compare 'a.first_location' and
!      'b.first_location'; if they are equal, apply dependence tests (use
!      access functions based on first location).  However, if 'a' and 'b'
       are represented differently, only try to prove that the bases are
       definitely different.
  
!    * Aliasing information.
!    * Alignment information.
  
   The structure describing the relation between two data references is
! 'data_dependence_relation' and the shorter name for a pointer to such a
! structure is 'ddr_p'.  This structure contains:
  
!    * a pointer to each data reference,
!    * a tree node 'are_dependent' that is set to 'chrec_known' if the
       analysis has proved that there is no dependence between these two
!      data references, 'chrec_dont_know' if the analysis was not able to
       determine any useful result and potentially there could exist a
!      dependence between these data references, and 'are_dependent' is
!      set to 'NULL_TREE' if there exist a dependence relation between the
       data references, and the description of this dependence relation is
!      given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays,
!    * a boolean that determines whether the dependence relation can be
       represented by a classical distance vector,
!    * an array 'subscripts' that contains a description of each subscript
       of the data references.  Given two array accesses a subscript is
       the tuple composed of the access functions for a given dimension.
!      For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are
!      three subscripts: '(f1, g1), (f2, g2), (f3, g3)'.
!    * two arrays 'dir_vects' and 'dist_vects' that contain classical
       representations of the data dependences under the form of direction
       and distance dependence vectors,
!    * an array of loops 'loop_nest' that contains the loops to which the
       distance and direction vectors refer to.
  
   Several functions for pretty printing the information extracted by the
! data dependence analysis are available: 'dump_ddrs' prints with a
  maximum verbosity the details of a data dependence relations array,
! 'dump_dist_dir_vectors' prints only the classical distance and direction
  vectors for a data dependence relations array, and
! 'dump_data_references' prints the details of the data references
  contained in a data reference array.
  
  
--- 22418,22467 ----
       references.
  
       The current strategy for data dependence tests is as follows: If
!      both ‘a’ and ‘b’ are represented as arrays, compare ‘a.base_object’
!      and ‘b.base_object’; if they are equal, apply dependence tests (use
!      access functions based on base_objects).  Else if both ‘a’ and ‘b’
!      are represented as pointers, compare ‘a.first_location’ and
!      ‘b.first_location’; if they are equal, apply dependence tests (use
!      access functions based on first location).  However, if ‘a’ and ‘b’
       are represented differently, only try to prove that the bases are
       definitely different.
  
!    • Aliasing information.
!    • Alignment information.
  
   The structure describing the relation between two data references is
! ‘data_dependence_relation’ and the shorter name for a pointer to such a
! structure is ‘ddr_p’.  This structure contains:
  
!    • a pointer to each data reference,
!    • a tree node ‘are_dependent’ that is set to ‘chrec_known’ if the
       analysis has proved that there is no dependence between these two
!      data references, ‘chrec_dont_know’ if the analysis was not able to
       determine any useful result and potentially there could exist a
!      dependence between these data references, and ‘are_dependent’ is
!      set to ‘NULL_TREE’ if there exist a dependence relation between the
       data references, and the description of this dependence relation is
!      given in the ‘subscripts’, ‘dir_vects’, and ‘dist_vects’ arrays,
!    • a boolean that determines whether the dependence relation can be
       represented by a classical distance vector,
!    • an array ‘subscripts’ that contains a description of each subscript
       of the data references.  Given two array accesses a subscript is
       the tuple composed of the access functions for a given dimension.
!      For example, given ‘A[f1][f2][f3]’ and ‘B[g1][g2][g3]’, there are
!      three subscripts: ‘(f1, g1), (f2, g2), (f3, g3)’.
!    • two arrays ‘dir_vects’ and ‘dist_vects’ that contain classical
       representations of the data dependences under the form of direction
       and distance dependence vectors,
!    • an array of loops ‘loop_nest’ that contains the loops to which the
       distance and direction vectors refer to.
  
   Several functions for pretty printing the information extracted by the
! data dependence analysis are available: ‘dump_ddrs’ prints with a
  maximum verbosity the details of a data dependence relations array,
! ‘dump_dist_dir_vectors’ prints only the classical distance and direction
  vectors for a data dependence relations array, and
! ‘dump_data_references’ prints the details of the data references
  contained in a data reference array.
  
  
*************** File: gccint.info,  Node: Machine Desc,
*** 22470,22478 ****
  ***********************
  
  A machine description has two parts: a file of instruction patterns
! ('.md' file) and a C header file of macro definitions.
  
!  The '.md' file for a target machine contains a pattern for each
  instruction that the target machine supports (or at least each
  instruction that is worth telling the compiler about).  It may also
  contain comments.  A semicolon causes the rest of the line to be a
--- 22471,22479 ----
  ***********************
  
  A machine description has two parts: a file of instruction patterns
! (‘.md’ file) and a C header file of macro definitions.
  
!  The ‘.md’ file for a target machine contains a pattern for each
  instruction that the target machine supports (or at least each
  instruction that is worth telling the compiler about).  It may also
  contain comments.  A semicolon causes the rest of the line to be a
*************** comment, unless the semicolon is inside
*** 22484,22490 ****
  
  * Overview::            How the machine description is used.
  * Patterns::            How to write instruction patterns.
! * Example::             An explained example of a 'define_insn' pattern.
  * RTL Template::        The RTL template defines what insns match a pattern.
  * Output Template::     The output template says how to make assembler code
                          from such an insn.
--- 22485,22491 ----
  
  * Overview::            How the machine description is used.
  * Patterns::            How to write instruction patterns.
! * Example::             An explained example of a ‘define_insn’ pattern.
  * RTL Template::        The RTL template defines what insns match a pattern.
  * Output Template::     The output template says how to make assembler code
                          from such an insn.
*************** comment, unless the semicolon is inside
*** 22506,22514 ****
  * Including Patterns::  Including Patterns in Machine Descriptions.
  * Peephole Definitions::Defining machine-specific peephole optimizations.
  * Insn Attributes::     Specifying the value of attributes for generated insns.
! * Conditional Execution::Generating 'define_insn' patterns for
                           predication.
! * Define Subst::	Generating 'define_insn' and 'define_expand'
  			patterns from other patterns.
  * Constant Definitions::Defining symbolic constants that can be used in the
                          md file.
--- 22507,22515 ----
  * Including Patterns::  Including Patterns in Machine Descriptions.
  * Peephole Definitions::Defining machine-specific peephole optimizations.
  * Insn Attributes::     Specifying the value of attributes for generated insns.
! * Conditional Execution::Generating ‘define_insn’ patterns for
                           predication.
! * Define Subst::	Generating ‘define_insn’ and ‘define_expand’
  			patterns from other patterns.
  * Constant Definitions::Defining symbolic constants that can be used in the
                          md file.
*************** There are three main conversions that ha
*** 22531,22537 ****
       assembler code.
  
   For the generate pass, only the names of the insns matter, from either
! a named 'define_insn' or a 'define_expand'.  The compiler will choose
  the pattern with the right name and apply the operands according to the
  documentation later in this chapter, without regard for the RTL template
  or operand constraints.  Note that the names the compiler looks for are
--- 22532,22538 ----
       assembler code.
  
   For the generate pass, only the names of the insns matter, from either
! a named ‘define_insn’ or a ‘define_expand’.  The compiler will choose
  the pattern with the right name and apply the operands according to the
  documentation later in this chapter, without regard for the RTL template
  or operand constraints.  Note that the names the compiler looks for are
*************** hard-coded in the compiler--it will igno
*** 22539,22560 ****
  with names it doesn't know about, but if you don't provide a named
  pattern it needs, it will abort.
  
!  If a 'define_insn' is used, the template given is inserted into the
! insn list.  If a 'define_expand' is used, one of three things happens,
  based on the condition logic.  The condition logic may manually create
! new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'.
! For certain named patterns, it may invoke 'FAIL' to tell the compiler to
  use an alternate way of performing that task.  If it invokes neither
! 'DONE' nor 'FAIL', the template given in the pattern is inserted, as if
! the 'define_expand' were a 'define_insn'.
  
   Once the insn list is generated, various optimization passes convert,
  replace, and rearrange the insns in the insn list.  This is where the
! 'define_split' and 'define_peephole' patterns get used, for example.
  
   Finally, the insn list's RTL is matched up with the RTL templates in
! the 'define_insn' patterns, and those patterns are used to emit the
! final assembly code.  For this purpose, each named 'define_insn' acts
  like it's unnamed, since the names are ignored.
  
  
--- 22540,22561 ----
  with names it doesn't know about, but if you don't provide a named
  pattern it needs, it will abort.
  
!  If a ‘define_insn’ is used, the template given is inserted into the
! insn list.  If a ‘define_expand’ is used, one of three things happens,
  based on the condition logic.  The condition logic may manually create
! new insns for the insn list, say via ‘emit_insn()’, and invoke ‘DONE’.
! For certain named patterns, it may invoke ‘FAIL’ to tell the compiler to
  use an alternate way of performing that task.  If it invokes neither
! ‘DONE’ nor ‘FAIL’, the template given in the pattern is inserted, as if
! the ‘define_expand’ were a ‘define_insn’.
  
   Once the insn list is generated, various optimization passes convert,
  replace, and rearrange the insns in the insn list.  This is where the
! ‘define_split’ and ‘define_peephole’ patterns get used, for example.
  
   Finally, the insn list's RTL is matched up with the RTL templates in
! the ‘define_insn’ patterns, and those patterns are used to emit the
! final assembly code.  For this purpose, each named ‘define_insn’ acts
  like it's unnamed, since the names are ignored.
  
  
*************** File: gccint.info,  Node: Patterns,  Nex
*** 22563,22582 ****
  17.2 Everything about Instruction Patterns
  ==========================================
  
! A 'define_insn' expression is used to define instruction patterns to
! which insns may be matched.  A 'define_insn' expression contains an
  incomplete RTL expression, with pieces to be filled in later, operand
  constraints that restrict how the pieces can be filled in, and an output
  template or C code to generate the assembler output.
  
!  A 'define_insn' is an RTL expression containing four or five operands:
  
    1. An optional name N.  When a name is present, the compiler
!      automically generates a C++ function 'gen_N' that takes the
       operands of the instruction as arguments and returns the
       instruction's rtx pattern.  The compiler also assigns the
!      instruction a unique code 'CODE_FOR_N', with all such codes
!      belonging to an enum called 'insn_code'.
  
       These names serve one of two purposes.  The first is to indicate
       that the instruction performs a certain standard job for the
--- 22564,22583 ----
  17.2 Everything about Instruction Patterns
  ==========================================
  
! A ‘define_insn’ expression is used to define instruction patterns to
! which insns may be matched.  A ‘define_insn’ expression contains an
  incomplete RTL expression, with pieces to be filled in later, operand
  constraints that restrict how the pieces can be filled in, and an output
  template or C code to generate the assembler output.
  
!  A ‘define_insn’ is an RTL expression containing four or five operands:
  
    1. An optional name N.  When a name is present, the compiler
!      automically generates a C++ function ‘gen_N’ that takes the
       operands of the instruction as arguments and returns the
       instruction's rtx pattern.  The compiler also assigns the
!      instruction a unique code ‘CODE_FOR_N’, with all such codes
!      belonging to an enum called ‘insn_code’.
  
       These names serve one of two purposes.  The first is to indicate
       that the instruction performs a certain standard job for the
*************** template or C code to generate the assem
*** 22594,22622 ****
       to be combined later on.
  
       For the purpose of debugging the compiler, you may also specify a
!      name beginning with the '*' character.  Such a name is used only
       for identifying the instruction in RTL dumps; it is equivalent to
       having a nameless pattern for all other purposes.  Names beginning
!      with the '*' character are not required to be unique.
  
!      The name may also have the form '@N'.  This has the same effect as
!      a name 'N', but in addition tells the compiler to generate further
       helper functions; see *note Parameterized Names:: for details.
  
!   2. The "RTL template": This is a vector of incomplete RTL expressions
       which describe the semantics of the instruction (*note RTL
       Template::).  It is incomplete because it may contain
!      'match_operand', 'match_operator', and 'match_dup' expressions that
       stand for operands of the instruction.
  
       If the vector has multiple elements, the RTL template is treated as
!      a 'parallel' expression.
  
    3. The condition: This is a string which contains a C expression.
       When the compiler attempts to match RTL against a pattern, the
!      condition is evaluated.  If the condition evaluates to 'true', the
       match is permitted.  The condition may be an empty string, which is
!      treated as always 'true'.
  
       For a named pattern, the condition may not depend on the data in
       the insn being matched, but only the target-machine-type flags.
--- 22595,22623 ----
       to be combined later on.
  
       For the purpose of debugging the compiler, you may also specify a
!      name beginning with the ‘*’ character.  Such a name is used only
       for identifying the instruction in RTL dumps; it is equivalent to
       having a nameless pattern for all other purposes.  Names beginning
!      with the ‘*’ character are not required to be unique.
  
!      The name may also have the form ‘@N’.  This has the same effect as
!      a name ‘N’, but in addition tells the compiler to generate further
       helper functions; see *note Parameterized Names:: for details.
  
!   2. The “RTL template”: This is a vector of incomplete RTL expressions
       which describe the semantics of the instruction (*note RTL
       Template::).  It is incomplete because it may contain
!      ‘match_operand’, ‘match_operator’, and ‘match_dup’ expressions that
       stand for operands of the instruction.
  
       If the vector has multiple elements, the RTL template is treated as
!      a ‘parallel’ expression.
  
    3. The condition: This is a string which contains a C expression.
       When the compiler attempts to match RTL against a pattern, the
!      condition is evaluated.  If the condition evaluates to ‘true’, the
       match is permitted.  The condition may be an empty string, which is
!      treated as always ‘true’.
  
       For a named pattern, the condition may not depend on the data in
       the insn being matched, but only the target-machine-type flags.
*************** template or C code to generate the assem
*** 22627,22639 ****
       For nameless patterns, the condition is applied only when matching
       an individual insn, and only after the insn has matched the
       pattern's recognition template.  The insn's operands may be found
!      in the vector 'operands'.
  
       An instruction condition cannot become more restrictive as
       compilation progresses.  If the condition accepts a particular RTL
       instruction at one stage of compilation, it must continue to accept
       that instruction until the final pass.  For example,
!      '!reload_completed' and 'can_create_pseudo_p ()' are both invalid
       instruction conditions, because they are true during the earlier
       RTL passes and false during the later ones.  For the same reason,
       if a condition accepts an instruction before register allocation,
--- 22628,22640 ----
       For nameless patterns, the condition is applied only when matching
       an individual insn, and only after the insn has matched the
       pattern's recognition template.  The insn's operands may be found
!      in the vector ‘operands’.
  
       An instruction condition cannot become more restrictive as
       compilation progresses.  If the condition accepts a particular RTL
       instruction at one stage of compilation, it must continue to accept
       that instruction until the final pass.  For example,
!      ‘!reload_completed’ and ‘can_create_pseudo_p ()’ are both invalid
       instruction conditions, because they are true during the earlier
       RTL passes and false during the later ones.  For the same reason,
       if a condition accepts an instruction before register allocation,
*************** template or C code to generate the assem
*** 22643,22665 ****
       Although a condition cannot become more restrictive as compilation
       progresses, the condition for a nameless pattern _can_ become more
       permissive.  For example, a nameless instruction can require
!      'reload_completed' to be true, in which case it only matches after
       register allocation.
  
!   4. The "output template" or "output statement": This is either a
       string, or a fragment of C code which returns a string.
  
       When simple substitution isn't general enough, you can specify a
       piece of C code to compute the output.  *Note Output Statement::.
  
!   5. The "insn attributes": This is an optional vector containing the
       values of attributes for insns matching this pattern (*note Insn
       Attributes::).
  
  
  File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
  
! 17.3 Example of 'define_insn'
  =============================
  
  Here is an example of an instruction pattern, taken from the machine
--- 22644,22666 ----
       Although a condition cannot become more restrictive as compilation
       progresses, the condition for a nameless pattern _can_ become more
       permissive.  For example, a nameless instruction can require
!      ‘reload_completed’ to be true, in which case it only matches after
       register allocation.
  
!   4. The “output template” or “output statement”: This is either a
       string, or a fragment of C code which returns a string.
  
       When simple substitution isn't general enough, you can specify a
       piece of C code to compute the output.  *Note Output Statement::.
  
!   5. The “insn attributes”: This is an optional vector containing the
       values of attributes for insns matching this pattern (*note Insn
       Attributes::).
  
  
  File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
  
! 17.3 Example of ‘define_insn’
  =============================
  
  Here is an example of an instruction pattern, taken from the machine
*************** This can also be written using braced st
*** 22691,22697 ****
   This describes an instruction which sets the condition codes based on
  the value of a general operand.  It has no condition, so any insn with
  an RTL description of the form shown may be matched to this pattern.
! The name 'tstsi' means "test a 'SImode' value" and tells the RTL
  generation pass that, when it is necessary to test such a value, an insn
  to do so can be constructed using this pattern.
  
--- 22692,22698 ----
   This describes an instruction which sets the condition codes based on
  the value of a general operand.  It has no condition, so any insn with
  an RTL description of the form shown may be matched to this pattern.
! The name ‘tstsi’ means "test a ‘SImode’ value" and tells the RTL
  generation pass that, when it is necessary to test such a value, an insn
  to do so can be constructed using this pattern.
  
*************** to do so can be constructed using this p
*** 22699,22705 ****
  output template to return based on the kind of operand and the specific
  type of CPU for which code is being generated.
  
!  '"rm"' is an operand constraint.  Its meaning is explained below.
  
  
  File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
--- 22700,22706 ----
  output template to return based on the kind of operand and the specific
  type of CPU for which code is being generated.
  
!  ‘"rm"’ is an operand constraint.  Its meaning is explained below.
  
  
  File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
*************** the operands in the insn being matched.
*** 22717,22723 ****
  controlled by special expression types that direct matching and
  substitution of the operands.
  
! '(match_operand:M N PREDICATE CONSTRAINT)'
       This expression is a placeholder for operand number N of the insn.
       When constructing an insn, operand number N will be substituted at
       this point.  When matching an insn, whatever appears at this
--- 22718,22724 ----
  controlled by special expression types that direct matching and
  substitution of the operands.
  
! ‘(match_operand:M N PREDICATE CONSTRAINT)’
       This expression is a placeholder for operand number N of the insn.
       When constructing an insn, operand number N will be substituted at
       this point.  When matching an insn, whatever appears at this
*************** substitution of the operands.
*** 22726,22753 ****
       all.
  
       Operand numbers must be chosen consecutively counting from zero in
!      each instruction pattern.  There may be only one 'match_operand'
       expression in the pattern for each operand number.  Usually
!      operands are numbered in the order of appearance in 'match_operand'
!      expressions.  In the case of a 'define_expand', any operand numbers
!      used only in 'match_dup' expressions have higher values than all
       other operand numbers.
  
       PREDICATE is a string that is the name of a function that accepts
       two arguments, an expression and a machine mode.  *Note
       Predicates::.  During matching, the function will be called with
       the putative operand as the expression and M as the mode argument
!      (if M is not specified, 'VOIDmode' will be used, which normally
       causes PREDICATE to accept any mode).  If it returns zero, this
       instruction pattern fails to match.  PREDICATE may be an empty
       string; then it means no test is to be done on the operand, so
       anything which occurs in this position is valid.
  
       Most of the time, PREDICATE will reject modes other than M--but not
!      always.  For example, the predicate 'address_operand' uses M as the
       mode of memory ref that the address should be valid for.  Many
!      predicates accept 'const_int' nodes even though their mode is
!      'VOIDmode'.
  
       CONSTRAINT controls reloading and the choice of the best register
       class to use for a value, as explained later (*note Constraints::).
--- 22727,22754 ----
       all.
  
       Operand numbers must be chosen consecutively counting from zero in
!      each instruction pattern.  There may be only one ‘match_operand’
       expression in the pattern for each operand number.  Usually
!      operands are numbered in the order of appearance in ‘match_operand’
!      expressions.  In the case of a ‘define_expand’, any operand numbers
!      used only in ‘match_dup’ expressions have higher values than all
       other operand numbers.
  
       PREDICATE is a string that is the name of a function that accepts
       two arguments, an expression and a machine mode.  *Note
       Predicates::.  During matching, the function will be called with
       the putative operand as the expression and M as the mode argument
!      (if M is not specified, ‘VOIDmode’ will be used, which normally
       causes PREDICATE to accept any mode).  If it returns zero, this
       instruction pattern fails to match.  PREDICATE may be an empty
       string; then it means no test is to be done on the operand, so
       anything which occurs in this position is valid.
  
       Most of the time, PREDICATE will reject modes other than M--but not
!      always.  For example, the predicate ‘address_operand’ uses M as the
       mode of memory ref that the address should be valid for.  Many
!      predicates accept ‘const_int’ nodes even though their mode is
!      ‘VOIDmode’.
  
       CONSTRAINT controls reloading and the choice of the best register
       class to use for a value, as explained later (*note Constraints::).
*************** substitution of the operands.
*** 22759,22802 ****
       decision; instead, it controls various decisions in the case of an
       insn which does match.
  
! '(match_scratch:M N CONSTRAINT)'
       This expression is also a placeholder for operand number N and
!      indicates that operand must be a 'scratch' or 'reg' expression.
  
       When matching patterns, this is equivalent to
  
            (match_operand:M N "scratch_operand" CONSTRAINT)
  
!      but, when generating RTL, it produces a ('scratch':M) expression.
  
!      If the last few expressions in a 'parallel' are 'clobber'
       expressions whose operands are either a hard register or
!      'match_scratch', the combiner can add or delete them when
       necessary.  *Note Side Effects::.
  
! '(match_dup N)'
       This expression is also a placeholder for operand number N.  It is
       used when the operand needs to appear more than once in the insn.
  
!      In construction, 'match_dup' acts just like 'match_operand': the
       operand is substituted into the insn being constructed.  But in
!      matching, 'match_dup' behaves differently.  It assumes that operand
!      number N has already been determined by a 'match_operand' appearing
       earlier in the recognition template, and it matches only an
       identical-looking expression.
  
!      Note that 'match_dup' should not be used to tell the compiler that
       a particular register is being used for two operands (example:
!      'add' that adds one register to another; the second register is
       both an input operand and the output operand).  Use a matching
!      constraint (*note Simple Constraints::) for those.  'match_dup' is
       for the cases where one operand is used in two places in the
       template, such as an instruction that computes both a quotient and
       a remainder, where the opcode takes two input operands but the RTL
       template has to refer to each of those twice; once for the quotient
       pattern and once for the remainder pattern.
  
! '(match_operator:M N PREDICATE [OPERANDS...])'
       This pattern is a kind of placeholder for a variable RTL expression
       code.
  
--- 22760,22803 ----
       decision; instead, it controls various decisions in the case of an
       insn which does match.
  
! ‘(match_scratch:M N CONSTRAINT)’
       This expression is also a placeholder for operand number N and
!      indicates that operand must be a ‘scratch’ or ‘reg’ expression.
  
       When matching patterns, this is equivalent to
  
            (match_operand:M N "scratch_operand" CONSTRAINT)
  
!      but, when generating RTL, it produces a (‘scratch’:M) expression.
  
!      If the last few expressions in a ‘parallel’ are ‘clobber’
       expressions whose operands are either a hard register or
!      ‘match_scratch’, the combiner can add or delete them when
       necessary.  *Note Side Effects::.
  
! ‘(match_dup N)’
       This expression is also a placeholder for operand number N.  It is
       used when the operand needs to appear more than once in the insn.
  
!      In construction, ‘match_dup’ acts just like ‘match_operand’: the
       operand is substituted into the insn being constructed.  But in
!      matching, ‘match_dup’ behaves differently.  It assumes that operand
!      number N has already been determined by a ‘match_operand’ appearing
       earlier in the recognition template, and it matches only an
       identical-looking expression.
  
!      Note that ‘match_dup’ should not be used to tell the compiler that
       a particular register is being used for two operands (example:
!      ‘add’ that adds one register to another; the second register is
       both an input operand and the output operand).  Use a matching
!      constraint (*note Simple Constraints::) for those.  ‘match_dup’ is
       for the cases where one operand is used in two places in the
       template, such as an instruction that computes both a quotient and
       a remainder, where the opcode takes two input operands but the RTL
       template has to refer to each of those twice; once for the quotient
       pattern and once for the remainder pattern.
  
! ‘(match_operator:M N PREDICATE [OPERANDS...])’
       This pattern is a kind of placeholder for a variable RTL expression
       code.
  
*************** substitution of the operands.
*** 22808,22814 ****
       function PREDICATE returns nonzero on that expression _and_ the
       patterns OPERANDS match the operands of the expression.
  
!      Suppose that the function 'commutative_operator' is defined as
       follows, to match any expression whose operator is one of the
       commutative arithmetic operators of RTL and whose mode is MODE:
  
--- 22809,22815 ----
       function PREDICATE returns nonzero on that expression _and_ the
       patterns OPERANDS match the operands of the expression.
  
!      Suppose that the function ‘commutative_operator’ is defined as
       follows, to match any expression whose operator is one of the
       commutative arithmetic operators of RTL and whose mode is MODE:
  
*************** substitution of the operands.
*** 22831,22847 ****
              [(match_operand:SI 1 "general_operand" "g")
               (match_operand:SI 2 "general_operand" "g")])
  
!      Here the vector '[OPERANDS...]' contains two patterns because the
       expressions to be matched all contain two operands.
  
       When this pattern does match, the two operands of the commutative
       operator are recorded as operands 1 and 2 of the insn.  (This is
!      done by the two instances of 'match_operand'.)  Operand 3 of the
!      insn will be the entire commutative expression: use 'GET_CODE
!      (operands[3])' to see which commutative operator was used.
  
!      The machine mode M of 'match_operator' works like that of
!      'match_operand': it is passed as the second argument to the
       predicate function, and that function is solely responsible for
       deciding whether the expression to be matched "has" that mode.
  
--- 22832,22848 ----
              [(match_operand:SI 1 "general_operand" "g")
               (match_operand:SI 2 "general_operand" "g")])
  
!      Here the vector ‘[OPERANDS...]’ contains two patterns because the
       expressions to be matched all contain two operands.
  
       When this pattern does match, the two operands of the commutative
       operator are recorded as operands 1 and 2 of the insn.  (This is
!      done by the two instances of ‘match_operand’.)  Operand 3 of the
!      insn will be the entire commutative expression: use ‘GET_CODE
!      (operands[3])’ to see which commutative operator was used.
  
!      The machine mode M of ‘match_operator’ works like that of
!      ‘match_operand’: it is passed as the second argument to the
       predicate function, and that function is solely responsible for
       deciding whether the expression to be matched "has" that mode.
  
*************** substitution of the operands.
*** 22852,22896 ****
       2 of the gen-function.  The subexpressions of argument 3 are not
       used; only its expression code matters.
  
!      When 'match_operator' is used in a pattern for matching an insn, it
!      usually best if the operand number of the 'match_operator' is
       higher than that of the actual operands of the insn.  This improves
       register allocation because the register allocator often looks at
       operands 1 and 2 of insns to see if it can do register tying.
  
!      There is no way to specify constraints in 'match_operator'.  The
!      operand of the insn which corresponds to the 'match_operator' never
       has any constraints because it is never reloaded as a whole.
!      However, if parts of its OPERANDS are matched by 'match_operand'
       patterns, those parts may have constraints of their own.
  
! '(match_op_dup:M N[OPERANDS...])'
!      Like 'match_dup', except that it applies to operators instead of
       operands.  When constructing an insn, operand number N will be
!      substituted at this point.  But in matching, 'match_op_dup' behaves
       differently.  It assumes that operand number N has already been
!      determined by a 'match_operator' appearing earlier in the
       recognition template, and it matches only an identical-looking
       expression.
  
! '(match_parallel N PREDICATE [SUBPAT...])'
       This pattern is a placeholder for an insn that consists of a
!      'parallel' expression with a variable number of elements.  This
       expression should only appear at the top level of an insn pattern.
  
       When constructing an insn, operand number N will be substituted at
       this point.  When matching an insn, it matches if the body of the
!      insn is a 'parallel' expression with at least as many elements as
!      the vector of SUBPAT expressions in the 'match_parallel', if each
!      SUBPAT matches the corresponding element of the 'parallel', _and_
!      the function PREDICATE returns nonzero on the 'parallel' that is
       the body of the insn.  It is the responsibility of the predicate to
!      validate elements of the 'parallel' beyond those listed in the
!      'match_parallel'.
  
!      A typical use of 'match_parallel' is to match load and store
       multiple expressions, which can contain a variable number of
!      elements in a 'parallel'.  For example,
  
            (define_insn ""
              [(match_parallel 0 "load_multiple_operation"
--- 22853,22897 ----
       2 of the gen-function.  The subexpressions of argument 3 are not
       used; only its expression code matters.
  
!      When ‘match_operator’ is used in a pattern for matching an insn, it
!      usually best if the operand number of the ‘match_operator’ is
       higher than that of the actual operands of the insn.  This improves
       register allocation because the register allocator often looks at
       operands 1 and 2 of insns to see if it can do register tying.
  
!      There is no way to specify constraints in ‘match_operator’.  The
!      operand of the insn which corresponds to the ‘match_operator’ never
       has any constraints because it is never reloaded as a whole.
!      However, if parts of its OPERANDS are matched by ‘match_operand’
       patterns, those parts may have constraints of their own.
  
! ‘(match_op_dup:M N[OPERANDS...])’
!      Like ‘match_dup’, except that it applies to operators instead of
       operands.  When constructing an insn, operand number N will be
!      substituted at this point.  But in matching, ‘match_op_dup’ behaves
       differently.  It assumes that operand number N has already been
!      determined by a ‘match_operator’ appearing earlier in the
       recognition template, and it matches only an identical-looking
       expression.
  
! ‘(match_parallel N PREDICATE [SUBPAT...])’
       This pattern is a placeholder for an insn that consists of a
!      ‘parallel’ expression with a variable number of elements.  This
       expression should only appear at the top level of an insn pattern.
  
       When constructing an insn, operand number N will be substituted at
       this point.  When matching an insn, it matches if the body of the
!      insn is a ‘parallel’ expression with at least as many elements as
!      the vector of SUBPAT expressions in the ‘match_parallel’, if each
!      SUBPAT matches the corresponding element of the ‘parallel’, _and_
!      the function PREDICATE returns nonzero on the ‘parallel’ that is
       the body of the insn.  It is the responsibility of the predicate to
!      validate elements of the ‘parallel’ beyond those listed in the
!      ‘match_parallel’.
  
!      A typical use of ‘match_parallel’ is to match load and store
       multiple expressions, which can contain a variable number of
!      elements in a ‘parallel’.  For example,
  
            (define_insn ""
              [(match_parallel 0 "load_multiple_operation"
*************** substitution of the operands.
*** 22901,22909 ****
              ""
              "loadm 0,0,%1,%2")
  
!      This example comes from 'a29k.md'.  The function
!      'load_multiple_operation' is defined in 'a29k.c' and checks that
!      subsequent elements in the 'parallel' are the same as the 'set' in
       the pattern, except that they are referencing subsequent registers
       and memory locations.
  
--- 22902,22910 ----
              ""
              "loadm 0,0,%1,%2")
  
!      This example comes from ‘a29k.md’.  The function
!      ‘load_multiple_operation’ is defined in ‘a29k.c’ and checks that
!      subsequent elements in the ‘parallel’ are the same as the ‘set’ in
       the pattern, except that they are referencing subsequent registers
       and memory locations.
  
*************** substitution of the operands.
*** 22920,22928 ****
                   (mem:SI (plus:SI (reg:SI 100)
                                    (const_int 8))))])
  
! '(match_par_dup N [SUBPAT...])'
!      Like 'match_op_dup', but for 'match_parallel' instead of
!      'match_operator'.
  
  
  File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
--- 22921,22929 ----
                   (mem:SI (plus:SI (reg:SI 100)
                                    (const_int 8))))])
  
! ‘(match_par_dup N [SUBPAT...])’
!      Like ‘match_op_dup’, but for ‘match_parallel’ instead of
!      ‘match_operator’.
  
  
  File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
*************** File: gccint.info,  Node: Output Templat
*** 22930,22977 ****
  17.5 Output Templates and Operand Substitution
  ==============================================
  
! The "output template" is a string which specifies how to output the
  assembler code for an instruction pattern.  Most of the template is a
! fixed string which is output literally.  The character '%' is used to
  specify where to substitute an operand; it can also be used to identify
  places where different variants of the assembler require different
  syntax.
  
!  In the simplest case, a '%' followed by a digit N says to output
  operand N at that point in the string.
  
!  '%' followed by a letter and a digit says to output an operand in an
  alternate fashion.  Four letters have standard, built-in meanings
! described below.  The machine description macro 'PRINT_OPERAND' can
  define additional letters with nonstandard meanings.
  
!  '%cDIGIT' can be used to substitute an operand that is a constant value
  without the syntax that normally indicates an immediate operand.
  
!  '%nDIGIT' is like '%cDIGIT' except that the value of the constant is
  negated before printing.
  
!  '%aDIGIT' can be used to substitute an operand as if it were a memory
  reference, with the actual operand treated as the address.  This may be
  useful when outputting a "load address" instruction, because often the
  assembler syntax for such an instruction requires you to write the
  operand as if it were a memory reference.
  
!  '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction.
  
!  '%=' outputs a number which is unique to each instruction in the entire
  compilation.  This is useful for making local labels to be referred to
  more than once in a single template that generates multiple assembler
  instructions.
  
!  '%' followed by a punctuation character specifies a substitution that
! does not use an operand.  Only one case is standard: '%%' outputs a '%'
  into the assembler code.  Other nonstandard cases can be defined in the
! 'PRINT_OPERAND' macro.  You must also define which punctuation
! characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro.
  
   The template may generate multiple assembler instructions.  Write the
! text for the instructions, with '\;' between them.
  
   When the RTL contains two operands which are required by constraint to
  match each other, the output template must refer only to the
--- 22931,22978 ----
  17.5 Output Templates and Operand Substitution
  ==============================================
  
! The “output template” is a string which specifies how to output the
  assembler code for an instruction pattern.  Most of the template is a
! fixed string which is output literally.  The character ‘%’ is used to
  specify where to substitute an operand; it can also be used to identify
  places where different variants of the assembler require different
  syntax.
  
!  In the simplest case, a ‘%’ followed by a digit N says to output
  operand N at that point in the string.
  
!  ‘%’ followed by a letter and a digit says to output an operand in an
  alternate fashion.  Four letters have standard, built-in meanings
! described below.  The machine description macro ‘PRINT_OPERAND’ can
  define additional letters with nonstandard meanings.
  
!  ‘%cDIGIT’ can be used to substitute an operand that is a constant value
  without the syntax that normally indicates an immediate operand.
  
!  ‘%nDIGIT’ is like ‘%cDIGIT’ except that the value of the constant is
  negated before printing.
  
!  ‘%aDIGIT’ can be used to substitute an operand as if it were a memory
  reference, with the actual operand treated as the address.  This may be
  useful when outputting a "load address" instruction, because often the
  assembler syntax for such an instruction requires you to write the
  operand as if it were a memory reference.
  
!  ‘%lDIGIT’ is used to substitute a ‘label_ref’ into a jump instruction.
  
!  ‘%=’ outputs a number which is unique to each instruction in the entire
  compilation.  This is useful for making local labels to be referred to
  more than once in a single template that generates multiple assembler
  instructions.
  
!  ‘%’ followed by a punctuation character specifies a substitution that
! does not use an operand.  Only one case is standard: ‘%%’ outputs a ‘%’
  into the assembler code.  Other nonstandard cases can be defined in the
! ‘PRINT_OPERAND’ macro.  You must also define which punctuation
! characters are valid with the ‘PRINT_OPERAND_PUNCT_VALID_P’ macro.
  
   The template may generate multiple assembler instructions.  Write the
! text for the instructions, with ‘\;’ between them.
  
   When the RTL contains two operands which are required by constraint to
  match each other, the output template must refer only to the
*************** lower-numbered operand.  Matching operan
*** 22979,23011 ****
  the rest of the compiler arranges to put the proper RTL expression for
  printing into the lower-numbered operand.
  
!  One use of nonstandard letters or punctuation following '%' is to
  distinguish between different assembler languages for the same machine;
  for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
  syntax requires periods in most opcode names, while MIT syntax does not.
! For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola
  syntax.  The same file of patterns is used for both kinds of output
! syntax, but the character sequence '%.' is used in each place where
! Motorola syntax wants a period.  The 'PRINT_OPERAND' macro for Motorola
  syntax defines the sequence to output a period; the macro for MIT syntax
  defines it to do nothing.
  
!  As a special case, a template consisting of the single character '#'
  instructs the compiler to first split the insn, and then output the
  resulting instructions separately.  This helps eliminate redundancy in
! the output templates.  If you have a 'define_insn' that needs to emit
! multiple assembler instructions, and there is a matching 'define_split'
! already defined, then you can simply use '#' as the output template
  instead of writing an output template that emits the multiple assembler
  instructions.
  
!  Note that '#' only has an effect while generating assembly code; it
  does not affect whether a split occurs earlier.  An associated
! 'define_split' must exist and it must be suitable for use after register
  allocation.
  
!  If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of
! the form '{option0|option1|option2}' in the templates.  These describe
  multiple variants of assembler language syntax.  *Note Instruction
  Output::.
  
--- 22980,23012 ----
  the rest of the compiler arranges to put the proper RTL expression for
  printing into the lower-numbered operand.
  
!  One use of nonstandard letters or punctuation following ‘%’ is to
  distinguish between different assembler languages for the same machine;
  for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
  syntax requires periods in most opcode names, while MIT syntax does not.
! For example, the opcode ‘movel’ in MIT syntax is ‘move.l’ in Motorola
  syntax.  The same file of patterns is used for both kinds of output
! syntax, but the character sequence ‘%.’ is used in each place where
! Motorola syntax wants a period.  The ‘PRINT_OPERAND’ macro for Motorola
  syntax defines the sequence to output a period; the macro for MIT syntax
  defines it to do nothing.
  
!  As a special case, a template consisting of the single character ‘#’
  instructs the compiler to first split the insn, and then output the
  resulting instructions separately.  This helps eliminate redundancy in
! the output templates.  If you have a ‘define_insn’ that needs to emit
! multiple assembler instructions, and there is a matching ‘define_split’
! already defined, then you can simply use ‘#’ as the output template
  instead of writing an output template that emits the multiple assembler
  instructions.
  
!  Note that ‘#’ only has an effect while generating assembly code; it
  does not affect whether a split occurs earlier.  An associated
! ‘define_split’ must exist and it must be suitable for use after register
  allocation.
  
!  If the macro ‘ASSEMBLER_DIALECT’ is defined, you can use construct of
! the form ‘{option0|option1|option2}’ in the templates.  These describe
  multiple variants of assembler language syntax.  *Note Instruction
  Output::.
  
*************** single instruction pattern.  For example
*** 23021,23032 ****
  kinds of operands; or some unfortunate combinations of operands may
  require extra machine instructions.
  
!  If the output control string starts with a '@', then it is actually a
  series of templates, each on a separate line.  (Blank lines and leading
  spaces and tabs are ignored.)  The templates correspond to the pattern's
  constraint alternatives (*note Multi-Alternative::).  For example, if a
! target machine has a two-address add instruction 'addr' to add into a
! register and another 'addm' to add a register to memory, you might write
  this pattern:
  
       (define_insn "addsi3"
--- 23022,23033 ----
  kinds of operands; or some unfortunate combinations of operands may
  require extra machine instructions.
  
!  If the output control string starts with a ‘@’, then it is actually a
  series of templates, each on a separate line.  (Blank lines and leading
  spaces and tabs are ignored.)  The templates correspond to the pattern's
  constraint alternatives (*note Multi-Alternative::).  For example, if a
! target machine has a two-address add instruction ‘addr’ to add into a
! register and another ‘addm’ to add a register to memory, you might write
  this pattern:
  
       (define_insn "addsi3"
*************** this pattern:
*** 23038,23082 ****
          addr %2,%0
          addm %2,%0")
  
!  If the output control string starts with a '*', then it is not an
  output template but rather a piece of C program that should compute a
! template.  It should execute a 'return' statement to return the
  template-string you want.  Most such templates use C string literals,
  which require doublequote characters to delimit them.  To include these
! doublequote characters in the string, prefix each one with '\'.
  
   If the output control string is written as a brace block instead of a
  double-quoted string, it is automatically assumed to be C code.  In that
  case, it is not necessary to put in a leading asterisk, or to escape the
  doublequotes surrounding C string literals.
  
!  The operands may be found in the array 'operands', whose C data type is
! 'rtx []'.
  
   It is very common to select different ways of generating assembler code
  based on whether an immediate operand is within a certain range.  Be
! careful when doing this, because the result of 'INTVAL' is an integer on
! the host machine.  If the host machine has more bits in an 'int' than
  the target machine has in the mode in which the constant will be used,
! then some of the bits you get from 'INTVAL' will be superfluous.  For
  proper results, you must carefully disregard the values of those bits.
  
   It is possible to output an assembler instruction and then go on to
! output or compute more of them, using the subroutine 'output_asm_insn'.
  This receives two arguments: a template-string and a vector of operands.
! The vector may be 'operands', or it may be another array of 'rtx' that
  you declare locally and initialize yourself.
  
   When an insn pattern has multiple alternatives in its constraints,
  often the appearance of the assembler code is determined mostly by which
  alternative was matched.  When this is so, the C code can test the
! variable 'which_alternative', which is the ordinal number of the
  alternative that was actually satisfied (0 for the first, 1 for the
  second alternative, etc.).
  
!  For example, suppose there are two opcodes for storing zero, 'clrreg'
! for registers and 'clrmem' for memory locations.  Here is how a pattern
! could use 'which_alternative' to choose between them:
  
       (define_insn ""
         [(set (match_operand:SI 0 "general_operand" "=r,m")
--- 23039,23083 ----
          addr %2,%0
          addm %2,%0")
  
!  If the output control string starts with a ‘*’, then it is not an
  output template but rather a piece of C program that should compute a
! template.  It should execute a ‘return’ statement to return the
  template-string you want.  Most such templates use C string literals,
  which require doublequote characters to delimit them.  To include these
! doublequote characters in the string, prefix each one with ‘\’.
  
   If the output control string is written as a brace block instead of a
  double-quoted string, it is automatically assumed to be C code.  In that
  case, it is not necessary to put in a leading asterisk, or to escape the
  doublequotes surrounding C string literals.
  
!  The operands may be found in the array ‘operands’, whose C data type is
! ‘rtx []’.
  
   It is very common to select different ways of generating assembler code
  based on whether an immediate operand is within a certain range.  Be
! careful when doing this, because the result of ‘INTVAL’ is an integer on
! the host machine.  If the host machine has more bits in an ‘int’ than
  the target machine has in the mode in which the constant will be used,
! then some of the bits you get from ‘INTVAL’ will be superfluous.  For
  proper results, you must carefully disregard the values of those bits.
  
   It is possible to output an assembler instruction and then go on to
! output or compute more of them, using the subroutine ‘output_asm_insn’.
  This receives two arguments: a template-string and a vector of operands.
! The vector may be ‘operands’, or it may be another array of ‘rtx’ that
  you declare locally and initialize yourself.
  
   When an insn pattern has multiple alternatives in its constraints,
  often the appearance of the assembler code is determined mostly by which
  alternative was matched.  When this is so, the C code can test the
! variable ‘which_alternative’, which is the ordinal number of the
  alternative that was actually satisfied (0 for the first, 1 for the
  second alternative, etc.).
  
!  For example, suppose there are two opcodes for storing zero, ‘clrreg’
! for registers and ‘clrmem’ for memory locations.  Here is how a pattern
! could use ‘which_alternative’ to choose between them:
  
       (define_insn ""
         [(set (match_operand:SI 0 "general_operand" "=r,m")
*************** could use 'which_alternative' to choose
*** 23089,23095 ****
  
   The example above, where the assembler code to generate was _solely_
  determined by the alternative, could also have been specified as
! follows, having the output control string start with a '@':
  
       (define_insn ""
         [(set (match_operand:SI 0 "general_operand" "=r,m")
--- 23090,23096 ----
  
   The example above, where the assembler code to generate was _solely_
  determined by the alternative, could also have been specified as
! follows, having the output control string start with a ‘@’:
  
       (define_insn ""
         [(set (match_operand:SI 0 "general_operand" "=r,m")
*************** follows, having the output control strin
*** 23100,23106 ****
          clrmem %0")
  
   If you just need a little bit of C code in one (or a few) alternatives,
! you can use '*' inside of a '@' multi-alternative template:
  
       (define_insn ""
         [(set (match_operand:SI 0 "general_operand" "=r,<,m")
--- 23101,23107 ----
          clrmem %0")
  
   If you just need a little bit of C code in one (or a few) alternatives,
! you can use ‘*’ inside of a ‘@’ multi-alternative template:
  
       (define_insn ""
         [(set (match_operand:SI 0 "general_operand" "=r,<,m")
*************** File: gccint.info,  Node: Compact Syntax
*** 23117,23123 ****
  17.7 Compact Syntax
  ===================
  
! When a 'define_insn' or 'define_insn_and_split' has multiple
  alternatives it may be beneficial to use the compact syntax when
  specifying alternatives.
  
--- 23118,23124 ----
  17.7 Compact Syntax
  ===================
  
! When a ‘define_insn’ or ‘define_insn_and_split’ has multiple
  alternatives it may be beneficial to use the compact syntax when
  specifying alternatives.
  
*************** line as the instruction assembly templat
*** 23172,23224 ****
       )
  
   The syntax rules are as follows:
!    * Templates must start with '{@' to use the new syntax.
  
!    * '{@' is followed by a layout in square brackets which is 'cons:'
       followed by a comma-separated list of
!      'match_operand'/'match_scratch' operand numbers, then a semicolon,
!      followed by the same for attributes ('attrs:').  Operand modifiers
!      like '=' and '+' can be placed before an operand number.  Both
!      sections are optional (so you can use only 'cons', or only 'attrs',
!      or both), and 'cons' must come before 'attrs' if present.
  
!    * Each alternative begins with any amount of whitespace.
  
!    * Following the whitespace is a comma-separated list of "constraints"
!      and/or "attributes" within brackets '[]', with sections separated
       by a semicolon.
  
!    * Should you want to copy the previous asm line, the symbol '^' can
       be used.  This allows less copy pasting between alternative and
       reduces the number of lines to update on changes.
  
!    * When using C functions for output, the idiom '* return FUNCTION;'
!      can be replaced with the shorthand '<< FUNCTION;'.
  
!    * Following the closing ']' is any amount of whitespace, and then the
       actual asm output.
  
!    * Spaces are allowed in the list (they will simply be removed).
  
!    * All constraint alternatives should be specified.  For example, a
!      list of of three blank alternatives should be written '[,,]' rather
!      than '[]'.
  
!    * All attribute alternatives should be non-empty, with '*'
       representing the default attribute value.  For example, a list of
!      three default attribute values should be written '[*,*,*]' rather
!      than '[]'.
  
!    * Within an '{@' block both multiline and singleline C comments are
       allowed, but when used outside of a C block they must be the only
       non-whitespace blocks on the line.
  
!    * Within an '{@' block, any iterators that do not get expanded will
!      result in an error.  If for some reason it is required to have '<'
!      or '>' in the output then these must be escaped using '\'.
  
!    * It is possible to use the 'attrs' list to specify some attributes
!      and to use the normal 'set_attr' syntax to specify other
       attributes.  There must not be any overlap between the two lists.
  
       In other words, the following is valid:
--- 23173,23225 ----
       )
  
   The syntax rules are as follows:
!    • Templates must start with ‘{@’ to use the new syntax.
  
!    • ‘{@’ is followed by a layout in square brackets which is ‘cons:’
       followed by a comma-separated list of
!      ‘match_operand’/‘match_scratch’ operand numbers, then a semicolon,
!      followed by the same for attributes (‘attrs:’).  Operand modifiers
!      like ‘=’ and ‘+’ can be placed before an operand number.  Both
!      sections are optional (so you can use only ‘cons’, or only ‘attrs’,
!      or both), and ‘cons’ must come before ‘attrs’ if present.
  
!    • Each alternative begins with any amount of whitespace.
  
!    • Following the whitespace is a comma-separated list of "constraints"
!      and/or "attributes" within brackets ‘[]’, with sections separated
       by a semicolon.
  
!    • Should you want to copy the previous asm line, the symbol ‘^’ can
       be used.  This allows less copy pasting between alternative and
       reduces the number of lines to update on changes.
  
!    • When using C functions for output, the idiom ‘* return FUNCTION;’
!      can be replaced with the shorthand ‘<< FUNCTION;’.
  
!    • Following the closing ‘]’ is any amount of whitespace, and then the
       actual asm output.
  
!    • Spaces are allowed in the list (they will simply be removed).
  
!    • All constraint alternatives should be specified.  For example, a
!      list of of three blank alternatives should be written ‘[,,]’ rather
!      than ‘[]’.
  
!    • All attribute alternatives should be non-empty, with ‘*’
       representing the default attribute value.  For example, a list of
!      three default attribute values should be written ‘[*,*,*]’ rather
!      than ‘[]’.
  
!    • Within an ‘{@’ block both multiline and singleline C comments are
       allowed, but when used outside of a C block they must be the only
       non-whitespace blocks on the line.
  
!    • Within an ‘{@’ block, any iterators that do not get expanded will
!      result in an error.  If for some reason it is required to have ‘<’
!      or ‘>’ in the output then these must be escaped using ‘\’.
  
!    • It is possible to use the ‘attrs’ list to specify some attributes
!      and to use the normal ‘set_attr’ syntax to specify other
       attributes.  There must not be any overlap between the two lists.
  
       In other words, the following is valid:
*************** line as the instruction assembly templat
*** 23242,23248 ****
               (set_attr "foo" "mov_imm")]
            )
  
!      because it specifies 'arch' twice.
  
  
  File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Compact Syntax,  Up: Machine Desc
--- 23243,23249 ----
               (set_attr "foo" "mov_imm")]
            )
  
!      because it specifies ‘arch’ twice.
  
  
  File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Compact Syntax,  Up: Machine Desc
*************** File: gccint.info,  Node: Predicates,  N
*** 23250,23267 ****
  17.8 Predicates
  ===============
  
! A predicate determines whether a 'match_operand' or 'match_operator'
  expression matches, and therefore whether the surrounding instruction
  pattern will be used for that combination of operands.  GCC has a number
  of machine-independent predicates, and you can define machine-specific
  predicates as needed.  By convention, predicates used with
! 'match_operand' have names that end in '_operand', and those used with
! 'match_operator' have names that end in '_operator'.
  
   All predicates are boolean functions (in the mathematical sense) of two
  arguments: the RTL expression that is being considered at that position
  in the instruction pattern, and the machine mode that the
! 'match_operand' or 'match_operator' specifies.  In this section, the
  first argument is called OP and the second argument MODE.  Predicates
  can be called from C as ordinary two-argument functions; this can be
  useful in output templates or other machine-specific code.
--- 23251,23268 ----
  17.8 Predicates
  ===============
  
! A predicate determines whether a ‘match_operand’ or ‘match_operator’
  expression matches, and therefore whether the surrounding instruction
  pattern will be used for that combination of operands.  GCC has a number
  of machine-independent predicates, and you can define machine-specific
  predicates as needed.  By convention, predicates used with
! ‘match_operand’ have names that end in ‘_operand’, and those used with
! ‘match_operator’ have names that end in ‘_operator’.
  
   All predicates are boolean functions (in the mathematical sense) of two
  arguments: the RTL expression that is being considered at that position
  in the instruction pattern, and the machine mode that the
! ‘match_operand’ or ‘match_operator’ specifies.  In this section, the
  first argument is called OP and the second argument MODE.  Predicates
  can be called from C as ordinary two-argument functions; this can be
  useful in output templates or other machine-specific code.
*************** allows only constants, or else enforce t
*** 23276,23298 ****
  condition.
  
   Most predicates handle their MODE argument in a uniform manner.  If
! MODE is 'VOIDmode' (unspecified), then OP can have any mode.  If MODE is
  anything else, then OP must have the same mode, unless OP is a
! 'CONST_INT' or integer 'CONST_DOUBLE'.  These RTL expressions always
! have 'VOIDmode', so it would be counterproductive to check that their
! mode matches.  Instead, predicates that accept 'CONST_INT' and/or
! integer 'CONST_DOUBLE' check that the value stored in the constant will
  fit in the requested mode.
  
!  Predicates with this behavior are called "normal".  'genrecog' can
  optimize the instruction recognizer based on knowledge of how normal
  predicates treat modes.  It can also diagnose certain kinds of common
  errors in the use of normal predicates; for instance, it is almost
  always an error to use a normal predicate without specifying a mode.
  
   Predicates that do something different with their MODE argument are
! called "special".  The generic predicates 'address_operand' and
! 'pmode_register_operand' are special predicates.  'genrecog' does not do
  any optimizations or diagnosis when special predicates are used.
  
  * Menu:
--- 23277,23299 ----
  condition.
  
   Most predicates handle their MODE argument in a uniform manner.  If
! MODE is ‘VOIDmode’ (unspecified), then OP can have any mode.  If MODE is
  anything else, then OP must have the same mode, unless OP is a
! ‘CONST_INT’ or integer ‘CONST_DOUBLE’.  These RTL expressions always
! have ‘VOIDmode’, so it would be counterproductive to check that their
! mode matches.  Instead, predicates that accept ‘CONST_INT’ and/or
! integer ‘CONST_DOUBLE’ check that the value stored in the constant will
  fit in the requested mode.
  
!  Predicates with this behavior are called “normal”.  ‘genrecog’ can
  optimize the instruction recognizer based on knowledge of how normal
  predicates treat modes.  It can also diagnose certain kinds of common
  errors in the use of normal predicates; for instance, it is almost
  always an error to use a normal predicate without specifying a mode.
  
   Predicates that do something different with their MODE argument are
! called “special”.  The generic predicates ‘address_operand’ and
! ‘pmode_register_operand’ are special predicates.  ‘genrecog’ does not do
  any optimizations or diagnosis when special predicates are used.
  
  * Menu:
*************** File: gccint.info,  Node: Machine-Indepe
*** 23308,23315 ****
  -------------------------------------
  
  These are the generic predicates available to all back ends.  They are
! defined in 'recog.cc'.  The first category of predicates allow only
! constant, or "immediate", operands.
  
   -- Function: immediate_operand
       This predicate allows any sort of constant that fits in MODE.  It
--- 23309,23316 ----
  -------------------------------------
  
  These are the generic predicates available to all back ends.  They are
! defined in ‘recog.cc’.  The first category of predicates allow only
! constant, or “immediate”, operands.
  
   -- Function: immediate_operand
       This predicate allows any sort of constant that fits in MODE.  It
*************** constant, or "immediate", operands.
*** 23317,23342 ****
       must be constant.
  
   -- Function: const_int_operand
!      This predicate allows any 'CONST_INT' expression that fits in MODE.
       It is an appropriate choice for an immediate operand that does not
       allow a symbol or label.
  
   -- Function: const_double_operand
!      This predicate accepts any 'CONST_DOUBLE' expression that has
!      exactly MODE.  If MODE is 'VOIDmode', it will also accept
!      'CONST_INT'.  It is intended for immediate floating point
       constants.
  
  The second category of predicates allow only some kind of machine
  register.
  
   -- Function: register_operand
!      This predicate allows any 'REG' or 'SUBREG' expression that is
       valid for MODE.  It is often suitable for arithmetic instruction
       operands on a RISC machine.
  
   -- Function: pmode_register_operand
!      This is a slight variant on 'register_operand' which works around a
       limitation in the machine-description reader.
  
            (match_operand N "pmode_register_operand" CONSTRAINT)
--- 23318,23343 ----
       must be constant.
  
   -- Function: const_int_operand
!      This predicate allows any ‘CONST_INT’ expression that fits in MODE.
       It is an appropriate choice for an immediate operand that does not
       allow a symbol or label.
  
   -- Function: const_double_operand
!      This predicate accepts any ‘CONST_DOUBLE’ expression that has
!      exactly MODE.  If MODE is ‘VOIDmode’, it will also accept
!      ‘CONST_INT’.  It is intended for immediate floating point
       constants.
  
  The second category of predicates allow only some kind of machine
  register.
  
   -- Function: register_operand
!      This predicate allows any ‘REG’ or ‘SUBREG’ expression that is
       valid for MODE.  It is often suitable for arithmetic instruction
       operands on a RISC machine.
  
   -- Function: pmode_register_operand
!      This is a slight variant on ‘register_operand’ which works around a
       limitation in the machine-description reader.
  
            (match_operand N "pmode_register_operand" CONSTRAINT)
*************** register.
*** 23345,23358 ****
  
            (match_operand:P N "register_operand" CONSTRAINT)
  
!      would mean, if the machine-description reader accepted ':P' mode
!      suffixes.  Unfortunately, it cannot, because 'Pmode' is an alias
       for some other mode, and might vary with machine-specific options.
       *Note Misc::.
  
   -- Function: scratch_operand
!      This predicate allows hard registers and 'SCRATCH' expressions, but
!      not pseudo-registers.  It is used internally by 'match_scratch'; it
       should not be used directly.
  
  The third category of predicates allow only some kind of memory
--- 23346,23359 ----
  
            (match_operand:P N "register_operand" CONSTRAINT)
  
!      would mean, if the machine-description reader accepted ‘:P’ mode
!      suffixes.  Unfortunately, it cannot, because ‘Pmode’ is an alias
       for some other mode, and might vary with machine-specific options.
       *Note Misc::.
  
   -- Function: scratch_operand
!      This predicate allows hard registers and ‘SCRATCH’ expressions, but
!      not pseudo-registers.  It is used internally by ‘match_scratch’; it
       should not be used directly.
  
  The third category of predicates allow only some kind of memory
*************** reference.
*** 23361,23398 ****
   -- Function: memory_operand
       This predicate allows any valid reference to a quantity of mode
       MODE in memory, as determined by the weak form of
!      'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
  
   -- Function: address_operand
       This predicate is a little unusual; it allows any operand that is a
       valid expression for the _address_ of a quantity of mode MODE,
!      again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'.
!      To first order, if '(mem:MODE (EXP))' is acceptable to
!      'memory_operand', then EXP is acceptable to 'address_operand'.
       Note that EXP does not necessarily have the mode MODE.
  
   -- Function: indirect_operand
!      This is a stricter form of 'memory_operand' which allows only
!      memory references with a 'general_operand' as the address
       expression.  New uses of this predicate are discouraged, because
!      'general_operand' is very permissive, so it's hard to tell what an
!      'indirect_operand' does or does not allow.  If a target has
       different requirements for memory operands for different
       instructions, it is better to define target-specific predicates
       which enforce the hardware's requirements explicitly.
  
   -- Function: push_operand
       This predicate allows a memory reference suitable for pushing a
!      value onto the stack.  This will be a 'MEM' which refers to
!      'stack_pointer_rtx', with a side effect in its address expression
!      (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE'
       macro (*note Frame Layout::).
  
   -- Function: pop_operand
       This predicate allows a memory reference suitable for popping a
!      value off the stack.  Again, this will be a 'MEM' referring to
!      'stack_pointer_rtx', with a side effect in its address expression.
!      However, this time 'STACK_POP_CODE' is expected.
  
  The fourth category of predicates allow some combination of the above
  operands.
--- 23362,23399 ----
   -- Function: memory_operand
       This predicate allows any valid reference to a quantity of mode
       MODE in memory, as determined by the weak form of
!      ‘GO_IF_LEGITIMATE_ADDRESS’ (*note Addressing Modes::).
  
   -- Function: address_operand
       This predicate is a little unusual; it allows any operand that is a
       valid expression for the _address_ of a quantity of mode MODE,
!      again determined by the weak form of ‘GO_IF_LEGITIMATE_ADDRESS’.
!      To first order, if ‘(mem:MODE (EXP))’ is acceptable to
!      ‘memory_operand’, then EXP is acceptable to ‘address_operand’.
       Note that EXP does not necessarily have the mode MODE.
  
   -- Function: indirect_operand
!      This is a stricter form of ‘memory_operand’ which allows only
!      memory references with a ‘general_operand’ as the address
       expression.  New uses of this predicate are discouraged, because
!      ‘general_operand’ is very permissive, so it's hard to tell what an
!      ‘indirect_operand’ does or does not allow.  If a target has
       different requirements for memory operands for different
       instructions, it is better to define target-specific predicates
       which enforce the hardware's requirements explicitly.
  
   -- Function: push_operand
       This predicate allows a memory reference suitable for pushing a
!      value onto the stack.  This will be a ‘MEM’ which refers to
!      ‘stack_pointer_rtx’, with a side effect in its address expression
!      (*note Incdec::); which one is determined by the ‘STACK_PUSH_CODE’
       macro (*note Frame Layout::).
  
   -- Function: pop_operand
       This predicate allows a memory reference suitable for popping a
!      value off the stack.  Again, this will be a ‘MEM’ referring to
!      ‘stack_pointer_rtx’, with a side effect in its address expression.
!      However, this time ‘STACK_POP_CODE’ is expected.
  
  The fourth category of predicates allow some combination of the above
  operands.
*************** Finally, there are two generic operator
*** 23413,23426 ****
  
   -- Function: comparison_operator
       This predicate matches any expression which performs an arithmetic
!      comparison in MODE; that is, 'COMPARISON_P' is true for the
       expression code.
  
   -- Function: ordered_comparison_operator
       This predicate matches any expression which performs an arithmetic
       comparison in MODE and whose expression code is valid for integer
!      modes; that is, the expression code will be one of 'eq', 'ne',
!      'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'.
  
  
  File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
--- 23414,23427 ----
  
   -- Function: comparison_operator
       This predicate matches any expression which performs an arithmetic
!      comparison in MODE; that is, ‘COMPARISON_P’ is true for the
       expression code.
  
   -- Function: ordered_comparison_operator
       This predicate matches any expression which performs an arithmetic
       comparison in MODE and whose expression code is valid for integer
!      modes; that is, the expression code will be one of ‘eq’, ‘ne’,
!      ‘lt’, ‘ltu’, ‘le’, ‘leu’, ‘gt’, ‘gtu’, ‘ge’, ‘geu’.
  
  
  File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
*************** File: gccint.info,  Node: Defining Predi
*** 23430,23460 ****
  
  Many machines have requirements for their operands that cannot be
  expressed precisely using the generic predicates.  You can define
! additional predicates using 'define_predicate' and
! 'define_special_predicate' expressions.  These expressions have three
  operands:
  
!    * The name of the predicate, as it will be referred to in
!      'match_operand' or 'match_operator' expressions.
  
!    * An RTL expression which evaluates to true if the predicate allows
       the operand OP, false if it does not.  This expression can only use
       the following RTL codes:
  
!      'MATCH_OPERAND'
!           When written inside a predicate expression, a 'MATCH_OPERAND'
            expression evaluates to true if the predicate it names would
            allow OP.  The operand number and constraint are ignored.  Due
!           to limitations in 'genrecog', you can only refer to generic
            predicates and predicates that have already been defined.
  
!      'MATCH_CODE'
            This expression evaluates to true if OP or a specified
            subexpression of OP has one of a given list of RTX codes.
  
            The first operand of this expression is a string constant
            containing a comma-separated list of RTX code names (in lower
!           case).  These are the codes for which the 'MATCH_CODE' will be
            true.
  
            The second operand is a string constant which indicates what
--- 23431,23461 ----
  
  Many machines have requirements for their operands that cannot be
  expressed precisely using the generic predicates.  You can define
! additional predicates using ‘define_predicate’ and
! ‘define_special_predicate’ expressions.  These expressions have three
  operands:
  
!    • The name of the predicate, as it will be referred to in
!      ‘match_operand’ or ‘match_operator’ expressions.
  
!    • An RTL expression which evaluates to true if the predicate allows
       the operand OP, false if it does not.  This expression can only use
       the following RTL codes:
  
!      ‘MATCH_OPERAND’
!           When written inside a predicate expression, a ‘MATCH_OPERAND’
            expression evaluates to true if the predicate it names would
            allow OP.  The operand number and constraint are ignored.  Due
!           to limitations in ‘genrecog’, you can only refer to generic
            predicates and predicates that have already been defined.
  
!      ‘MATCH_CODE’
            This expression evaluates to true if OP or a specified
            subexpression of OP has one of a given list of RTX codes.
  
            The first operand of this expression is a string constant
            containing a comma-separated list of RTX code names (in lower
!           case).  These are the codes for which the ‘MATCH_CODE’ will be
            true.
  
            The second operand is a string constant which indicates what
*************** operands:
*** 23464,23516 ****
            character indicates a subexpression to extract from the
            current expression; for the first character this is OP, for
            the second and subsequent characters it is the result of the
!           previous character.  A digit N extracts 'XEXP (E, N)'; a
!           letter L extracts 'XVECEXP (E, 0, N)' where N is the
            alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on).
!           The 'MATCH_CODE' then examines the RTX code of the
            subexpression extracted by the complete string.  It is not
!           possible to extract components of an 'rtvec' that is not at
            position 0 within its RTX object.
  
!      'MATCH_TEST'
            This expression has one operand, a string constant containing
            a C expression.  The predicate's arguments, OP and MODE, are
            available with those names in the C expression.  The
!           'MATCH_TEST' evaluates to true if the C expression evaluates
!           to a nonzero value.  'MATCH_TEST' expressions must not have
            side effects.
  
!      'AND'
!      'IOR'
!      'NOT'
!      'IF_THEN_ELSE'
!           The basic 'MATCH_' expressions can be combined using these
            logical operators, which have the semantics of the C operators
!           '&&', '||', '!', and '? :' respectively.  As in Common Lisp,
!           you may give an 'AND' or 'IOR' expression an arbitrary number
            of arguments; this has exactly the same effect as writing a
!           chain of two-argument 'AND' or 'IOR' expressions.
  
!    * An optional block of C code, which should execute 'return true' if
!      the predicate is found to match and 'return false' if it does not.
       It must not have any side effects.  The predicate arguments, OP and
       MODE, are available with those names.
  
       If a code block is present in a predicate definition, then the RTL
       expression must evaluate to true _and_ the code block must execute
!      'return true' for the predicate to allow the operand.  The RTL
       expression is evaluated first; do not re-check anything in the code
       block that was checked in the RTL expression.
  
!  The program 'genrecog' scans 'define_predicate' and
! 'define_special_predicate' expressions to determine which RTX codes are
  possibly allowed.  You should always make this explicit in the RTL
! predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'.
  
   Here is an example of a simple predicate definition, from the IA64
  machine description:
  
!      ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section.
       (define_predicate "small_addr_symbolic_operand"
         (and (match_code "symbol_ref")
              (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
--- 23465,23517 ----
            character indicates a subexpression to extract from the
            current expression; for the first character this is OP, for
            the second and subsequent characters it is the result of the
!           previous character.  A digit N extracts ‘XEXP (E, N)’; a
!           letter L extracts ‘XVECEXP (E, 0, N)’ where N is the
            alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on).
!           The ‘MATCH_CODE’ then examines the RTX code of the
            subexpression extracted by the complete string.  It is not
!           possible to extract components of an ‘rtvec’ that is not at
            position 0 within its RTX object.
  
!      ‘MATCH_TEST’
            This expression has one operand, a string constant containing
            a C expression.  The predicate's arguments, OP and MODE, are
            available with those names in the C expression.  The
!           ‘MATCH_TEST’ evaluates to true if the C expression evaluates
!           to a nonzero value.  ‘MATCH_TEST’ expressions must not have
            side effects.
  
!      ‘AND’
!      ‘IOR’
!      ‘NOT’
!      ‘IF_THEN_ELSE’
!           The basic ‘MATCH_’ expressions can be combined using these
            logical operators, which have the semantics of the C operators
!           ‘&&’, ‘||’, ‘!’, and ‘? :’ respectively.  As in Common Lisp,
!           you may give an ‘AND’ or ‘IOR’ expression an arbitrary number
            of arguments; this has exactly the same effect as writing a
!           chain of two-argument ‘AND’ or ‘IOR’ expressions.
  
!    • An optional block of C code, which should execute ‘return true’ if
!      the predicate is found to match and ‘return false’ if it does not.
       It must not have any side effects.  The predicate arguments, OP and
       MODE, are available with those names.
  
       If a code block is present in a predicate definition, then the RTL
       expression must evaluate to true _and_ the code block must execute
!      ‘return true’ for the predicate to allow the operand.  The RTL
       expression is evaluated first; do not re-check anything in the code
       block that was checked in the RTL expression.
  
!  The program ‘genrecog’ scans ‘define_predicate’ and
! ‘define_special_predicate’ expressions to determine which RTX codes are
  possibly allowed.  You should always make this explicit in the RTL
! predicate expression, using ‘MATCH_OPERAND’ and ‘MATCH_CODE’.
  
   Here is an example of a simple predicate definition, from the IA64
  machine description:
  
!      ;; True if OP is a ‘SYMBOL_REF’ which refers to the sdata section.
       (define_predicate "small_addr_symbolic_operand"
         (and (match_code "symbol_ref")
              (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
*************** And here is another, showing the use of
*** 23529,23553 ****
         return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
       })
  
!  Predicates written with 'define_predicate' automatically include a test
! that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a
! 'CONST_INT' or 'CONST_DOUBLE'.  They do _not_ check specifically for
! integer 'CONST_DOUBLE', nor do they test that the value of either kind
  of constant fits in the requested mode.  This is because target-specific
  predicates that take constants usually have to do more stringent value
! checks anyway.  If you need the exact same treatment of 'CONST_INT' or
! 'CONST_DOUBLE' that the generic predicates provide, use a
! 'MATCH_OPERAND' subexpression to call 'const_int_operand',
! 'const_double_operand', or 'immediate_operand'.
  
!  Predicates written with 'define_special_predicate' do not get any
  automatic mode checks, and are treated as having special mode handling
! by 'genrecog'.
  
!  The program 'genpreds' is responsible for generating code to test
  predicates.  It also writes a header file containing function
  declarations for all machine-specific predicates.  It is not necessary
! to declare these predicates in 'CPU-protos.h'.
  
  
  File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
--- 23530,23554 ----
         return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
       })
  
!  Predicates written with ‘define_predicate’ automatically include a test
! that MODE is ‘VOIDmode’, or OP has the same mode as MODE, or OP is a
! ‘CONST_INT’ or ‘CONST_DOUBLE’.  They do _not_ check specifically for
! integer ‘CONST_DOUBLE’, nor do they test that the value of either kind
  of constant fits in the requested mode.  This is because target-specific
  predicates that take constants usually have to do more stringent value
! checks anyway.  If you need the exact same treatment of ‘CONST_INT’ or
! ‘CONST_DOUBLE’ that the generic predicates provide, use a
! ‘MATCH_OPERAND’ subexpression to call ‘const_int_operand’,
! ‘const_double_operand’, or ‘immediate_operand’.
  
!  Predicates written with ‘define_special_predicate’ do not get any
  automatic mode checks, and are treated as having special mode handling
! by ‘genrecog’.
  
!  The program ‘genpreds’ is responsible for generating code to test
  predicates.  It also writes a header file containing function
  declarations for all machine-specific predicates.  It is not necessary
! to declare these predicates in ‘CPU-protos.h’.
  
  
  File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
*************** File: gccint.info,  Node: Constraints,
*** 23555,23561 ****
  17.9 Operand Constraints
  ========================
  
! Each 'match_operand' in an instruction pattern can specify constraints
  for the operands allowed.  The constraints allow you to fine-tune
  matching within the set of operands allowed by the predicate.
  
--- 23556,23562 ----
  17.9 Operand Constraints
  ========================
  
! Each ‘match_operand’ in an instruction pattern can specify constraints
  for the operands allowed.  The constraints allow you to fine-tune
  matching within the set of operands allowed by the predicate.
  
*************** kinds of register; whether the operand c
*** 23564,23570 ****
  which kinds of address; whether the operand may be an immediate
  constant, and which possible values it may have.  Constraints can also
  require two operands to match.  Side-effects aren't allowed in operands
! of inline 'asm', unless '<' or '>' constraints are used, because there
  is no guarantee that the side effects will happen exactly once in an
  instruction that can update the addressing register.
  
--- 23565,23571 ----
  which kinds of address; whether the operand may be an immediate
  constant, and which possible values it may have.  Constraints can also
  require two operands to match.  Side-effects aren't allowed in operands
! of inline ‘asm’, unless ‘<’ or ‘>’ constraints are used, because there
  is no guarantee that the side effects will happen exactly once in an
  instruction that can update the addressing register.
  
*************** whitespace
*** 23596,23610 ****
       description even if they have different number of constraints and
       modifiers.
  
! 'm'
       A memory operand is allowed, with any kind of address that the
       machine supports in general.  Note that the letter used for the
       general memory constraint can be re-defined by a back end using the
!      'TARGET_MEM_CONSTRAINT' macro.
  
! 'o'
       A memory operand is allowed, but only if the address is
!      "offsettable".  This means that adding a small integer (actually,
       the width in bytes of the operand, as determined by its machine
       mode) may be added to the address and the result is also a valid
       memory address.
--- 23597,23611 ----
       description even if they have different number of constraints and
       modifiers.
  
! ‘m’
       A memory operand is allowed, with any kind of address that the
       machine supports in general.  Note that the letter used for the
       general memory constraint can be re-defined by a back end using the
!      ‘TARGET_MEM_CONSTRAINT’ macro.
  
! ‘o’
       A memory operand is allowed, but only if the address is
!      “offsettable”.  This means that adding a small integer (actually,
       the width in bytes of the operand, as determined by its machine
       mode) may be added to the address and the result is also a valid
       memory address.
*************** whitespace
*** 23618,23713 ****
       on the other addressing modes that the machine supports.
  
       Note that in an output operand which can be matched by another
!      operand, the constraint letter 'o' is valid only when accompanied
!      by both '<' (if the target machine has predecrement addressing) and
!      '>' (if the target machine has preincrement addressing).
  
! 'V'
       A memory operand that is not offsettable.  In other words, anything
!      that would fit the 'm' constraint but not the 'o' constraint.
  
! '<'
       A memory operand with autodecrement addressing (either predecrement
!      or postdecrement) is allowed.  In inline 'asm' this constraint is
       only allowed if the operand is used exactly once in an instruction
!      that can handle the side effects.  Not using an operand with '<' in
!      constraint string in the inline 'asm' pattern at all or using it in
       multiple instructions isn't valid, because the side effects
       wouldn't be performed or would be performed more than once.
!      Furthermore, on some targets the operand with '<' in constraint
       string must be accompanied by special instruction suffixes like
!      '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
  
! '>'
       A memory operand with autoincrement addressing (either preincrement
!      or postincrement) is allowed.  In inline 'asm' the same
!      restrictions as for '<' apply.
  
! 'r'
       A register operand is allowed provided that it is in a general
       register.
  
! 'i'
       An immediate integer operand (one with constant value) is allowed.
       This includes symbolic constants whose values will be known only at
       assembly time or later.
  
! 'n'
       An immediate integer operand with a known numeric value is allowed.
       Many systems cannot support assembly-time constants for operands
       less than a word wide.  Constraints for these operands should use
!      'n' rather than 'i'.
  
! 'I', 'J', 'K', ... 'P'
!      Other letters in the range 'I' through 'P' may be defined in a
       machine-dependent fashion to permit immediate integer operands with
       explicit integer values in specified ranges.  For example, on the
!      68000, 'I' is defined to stand for the range of values 1 to 8.
       This is the range permitted as a shift count in the shift
       instructions.
  
! 'E'
!      An immediate floating operand (expression code 'const_double') is
       allowed, but only if the target floating point format is the same
       as that of the host machine (on which the compiler is running).
  
! 'F'
!      An immediate floating operand (expression code 'const_double' or
!      'const_vector') is allowed.
  
! 'G', 'H'
!      'G' and 'H' may be defined in a machine-dependent fashion to permit
       immediate floating operands in particular ranges of values.
  
! 's'
       An immediate integer operand whose value is not an explicit integer
       is allowed.
  
       This might appear strange; if an insn allows a constant operand
       with a value not known at compile time, it certainly must allow any
!      known value.  So why use 's' instead of 'i'?  Sometimes it allows
       better code to be generated.
  
       For example, on the 68000 in a fullword instruction it is possible
       to use an immediate operand; but if the immediate value is between
!      -128 and 127, better code results from loading the value into a
       register and using the register.  This is because the load into the
!      register can be done with a 'moveq' instruction.  We arrange for
!      this to happen by defining the letter 'K' to mean "any integer
!      outside the range -128 to 127", and then specifying 'Ks' in the
       operand constraints.
  
! 'g'
       Any register, memory or immediate integer operand is allowed,
       except for registers that are not general registers.
  
! 'X'
       Any operand whatsoever is allowed, even if it does not satisfy
!      'general_operand'.  This is normally used in the constraint of a
!      'match_scratch' when certain alternatives will not actually require
       a scratch register.
  
! '0', '1', '2', ... '9'
       An operand that matches the specified operand number is allowed.
       If a digit is used together with letters within the same
       alternative, the digit should come last.
--- 23619,23714 ----
       on the other addressing modes that the machine supports.
  
       Note that in an output operand which can be matched by another
!      operand, the constraint letter ‘o’ is valid only when accompanied
!      by both ‘<’ (if the target machine has predecrement addressing) and
!      ‘>’ (if the target machine has preincrement addressing).
  
! ‘V’
       A memory operand that is not offsettable.  In other words, anything
!      that would fit the ‘m’ constraint but not the ‘o’ constraint.
  
! ‘<’
       A memory operand with autodecrement addressing (either predecrement
!      or postdecrement) is allowed.  In inline ‘asm’ this constraint is
       only allowed if the operand is used exactly once in an instruction
!      that can handle the side effects.  Not using an operand with ‘<’ in
!      constraint string in the inline ‘asm’ pattern at all or using it in
       multiple instructions isn't valid, because the side effects
       wouldn't be performed or would be performed more than once.
!      Furthermore, on some targets the operand with ‘<’ in constraint
       string must be accompanied by special instruction suffixes like
!      ‘%U0’ instruction suffix on PowerPC or ‘%P0’ on IA-64.
  
! ‘>’
       A memory operand with autoincrement addressing (either preincrement
!      or postincrement) is allowed.  In inline ‘asm’ the same
!      restrictions as for ‘<’ apply.
  
! ‘r’
       A register operand is allowed provided that it is in a general
       register.
  
! ‘i’
       An immediate integer operand (one with constant value) is allowed.
       This includes symbolic constants whose values will be known only at
       assembly time or later.
  
! ‘n’
       An immediate integer operand with a known numeric value is allowed.
       Many systems cannot support assembly-time constants for operands
       less than a word wide.  Constraints for these operands should use
!      ‘n’ rather than ‘i’.
  
! ‘I’, ‘J’, ‘K’, ... ‘P’
!      Other letters in the range ‘I’ through ‘P’ may be defined in a
       machine-dependent fashion to permit immediate integer operands with
       explicit integer values in specified ranges.  For example, on the
!      68000, ‘I’ is defined to stand for the range of values 1 to 8.
       This is the range permitted as a shift count in the shift
       instructions.
  
! ‘E’
!      An immediate floating operand (expression code ‘const_double’) is
       allowed, but only if the target floating point format is the same
       as that of the host machine (on which the compiler is running).
  
! ‘F’
!      An immediate floating operand (expression code ‘const_double’ or
!      ‘const_vector’) is allowed.
  
! ‘G’, ‘H’
!      ‘G’ and ‘H’ may be defined in a machine-dependent fashion to permit
       immediate floating operands in particular ranges of values.
  
! ‘s’
       An immediate integer operand whose value is not an explicit integer
       is allowed.
  
       This might appear strange; if an insn allows a constant operand
       with a value not known at compile time, it certainly must allow any
!      known value.  So why use ‘s’ instead of ‘i’?  Sometimes it allows
       better code to be generated.
  
       For example, on the 68000 in a fullword instruction it is possible
       to use an immediate operand; but if the immediate value is between
!      −128 and 127, better code results from loading the value into a
       register and using the register.  This is because the load into the
!      register can be done with a ‘moveq’ instruction.  We arrange for
!      this to happen by defining the letter ‘K’ to mean "any integer
!      outside the range −128 to 127", and then specifying ‘Ks’ in the
       operand constraints.
  
! ‘g’
       Any register, memory or immediate integer operand is allowed,
       except for registers that are not general registers.
  
! ‘X’
       Any operand whatsoever is allowed, even if it does not satisfy
!      ‘general_operand’.  This is normally used in the constraint of a
!      ‘match_scratch’ when certain alternatives will not actually require
       a scratch register.
  
! ‘0’, ‘1’, ‘2’, ... ‘9’
       An operand that matches the specified operand number is allowed.
       If a digit is used together with letters within the same
       alternative, the digit should come last.
*************** whitespace
*** 23715,23725 ****
       This number is allowed to be more than a single digit.  If multiple
       digits are encountered consecutively, they are interpreted as a
       single decimal integer.  There is scant chance for ambiguity, since
!      to-date it has never been desirable that '10' be interpreted as
       matching either operand 1 _or_ operand 0.  Should this be desired,
       one can use multiple alternatives instead.
  
!      This is called a "matching constraint" and what it really means is
       that the assembler has only a single operand that fills two roles
       considered separate in the RTL insn.  For example, an add insn has
       two input operands and one output operand in the RTL, but on most
--- 23716,23726 ----
       This number is allowed to be more than a single digit.  If multiple
       digits are encountered consecutively, they are interpreted as a
       single decimal integer.  There is scant chance for ambiguity, since
!      to-date it has never been desirable that ‘10’ be interpreted as
       matching either operand 1 _or_ operand 0.  Should this be desired,
       one can use multiple alternatives instead.
  
!      This is called a “matching constraint” and what it really means is
       that the assembler has only a single operand that fills two roles
       considered separate in the RTL insn.  For example, an add insn has
       two input operands and one output operand in the RTL, but on most
*************** whitespace
*** 23736,23759 ****
  
       For operands to match in a particular case usually means that they
       are identical-looking RTL expressions.  But in a few special cases
!      specific kinds of dissimilarity are allowed.  For example, '*x' as
!      an input operand will match '*x++' as an output operand.  For
       proper results in such cases, the output template should always use
       the output-operand's number when printing the operand.
  
! 'p'
       An operand that is a valid memory address is allowed.  This is for
       "load address" and "push address" instructions.
  
!      'p' in the constraint must be accompanied by 'address_operand' as
!      the predicate in the 'match_operand'.  This predicate interprets
!      the mode specified in the 'match_operand' as the mode of the memory
       reference for which the address would be valid.
  
  OTHER-LETTERS
       Other letters can be defined in machine-dependent fashion to stand
       for particular classes of registers or other arbitrary operand
!      types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
       for data, address and floating point registers.
  
   In order to have valid assembler code, each operand must satisfy its
--- 23737,23760 ----
  
       For operands to match in a particular case usually means that they
       are identical-looking RTL expressions.  But in a few special cases
!      specific kinds of dissimilarity are allowed.  For example, ‘*x’ as
!      an input operand will match ‘*x++’ as an output operand.  For
       proper results in such cases, the output template should always use
       the output-operand's number when printing the operand.
  
! ‘p’
       An operand that is a valid memory address is allowed.  This is for
       "load address" and "push address" instructions.
  
!      ‘p’ in the constraint must be accompanied by ‘address_operand’ as
!      the predicate in the ‘match_operand’.  This predicate interprets
!      the mode specified in the ‘match_operand’ as the mode of the memory
       reference for which the address would be valid.
  
  OTHER-LETTERS
       Other letters can be defined in machine-dependent fashion to stand
       for particular classes of registers or other arbitrary operand
!      types.  ‘d’, ‘a’ and ‘f’ are defined on the 68000/68020 to stand
       for data, address and floating point registers.
  
   In order to have valid assembler code, each operand must satisfy its
*************** The constraints don't need to _allow_ an
*** 23814,23848 ****
  the case, they do not constrain--but they must at least point the way to
  reloading any possible operand so that it will fit.
  
!    * If the constraint accepts whatever operands the predicate permits,
       there is no problem: reloading is never necessary for this operand.
  
       For example, an operand whose constraints permit everything except
       registers is safe provided its predicate rejects registers.
  
       An operand whose predicate accepts only constant values is safe
!      provided its constraints include the letter 'i'.  If any possible
!      constant value is accepted, then nothing less than 'i' will do; if
       the predicate is more selective, then the constraints may also be
       more selective.
  
!    * Any operand expression can be reloaded by copying it into a
       register.  So if an operand's constraints allow some kind of
       register, it is certain to be safe.  It need not permit all classes
       of registers; the compiler knows how to copy a register into
       another register of the proper class in order to make an
       instruction valid.
  
!    * A nonoffsettable memory reference can be reloaded by copying the
!      address into a register.  So if the constraint uses the letter 'o',
       all memory references are taken care of.
  
!    * A constant operand can be reloaded by allocating space in memory to
       hold it as preinitialized data.  Then the memory reference can be
       used in place of the constant.  So if the constraint uses the
!      letters 'o' or 'm', constant operands are not a problem.
  
!    * If the constraint permits a constant and a pseudo register used in
       an insn was not allocated to a hard register and is equivalent to a
       constant, the register will be replaced with the constant.  If the
       predicate does not permit a constant and the insn is re-recognized
--- 23815,23849 ----
  the case, they do not constrain--but they must at least point the way to
  reloading any possible operand so that it will fit.
  
!    • If the constraint accepts whatever operands the predicate permits,
       there is no problem: reloading is never necessary for this operand.
  
       For example, an operand whose constraints permit everything except
       registers is safe provided its predicate rejects registers.
  
       An operand whose predicate accepts only constant values is safe
!      provided its constraints include the letter ‘i’.  If any possible
!      constant value is accepted, then nothing less than ‘i’ will do; if
       the predicate is more selective, then the constraints may also be
       more selective.
  
!    • Any operand expression can be reloaded by copying it into a
       register.  So if an operand's constraints allow some kind of
       register, it is certain to be safe.  It need not permit all classes
       of registers; the compiler knows how to copy a register into
       another register of the proper class in order to make an
       instruction valid.
  
!    • A nonoffsettable memory reference can be reloaded by copying the
!      address into a register.  So if the constraint uses the letter ‘o’,
       all memory references are taken care of.
  
!    • A constant operand can be reloaded by allocating space in memory to
       hold it as preinitialized data.  Then the memory reference can be
       used in place of the constant.  So if the constraint uses the
!      letters ‘o’ or ‘m’, constant operands are not a problem.
  
!    • If the constraint permits a constant and a pseudo register used in
       an insn was not allocated to a hard register and is equivalent to a
       constant, the register will be replaced with the constant.  If the
       predicate does not permit a constant and the insn is re-recognized
*************** does not know how to copy a register tem
*** 23856,23866 ****
  
   If the predicate accepts a unary operator, the constraint applies to
  the operand.  For example, the MIPS processor at ISA level 3 supports an
! instruction which adds two registers in 'SImode' to produce a 'DImode'
  result, but only if the registers are correctly sign extended.  This
! predicate for the input operands accepts a 'sign_extend' of an 'SImode'
  register.  Write the constraint to indicate the type of register that is
! required for the operand of the 'sign_extend'.
  
  
  File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
--- 23857,23867 ----
  
   If the predicate accepts a unary operator, the constraint applies to
  the operand.  For example, the MIPS processor at ISA level 3 supports an
! instruction which adds two registers in ‘SImode’ to produce a ‘DImode’
  result, but only if the registers are correctly sign extended.  This
! predicate for the input operands accepts a ‘sign_extend’ of an ‘SImode’
  register.  Write the constraint to indicate the type of register that is
! required for the operand of the ‘sign_extend’.
  
  
  File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
*************** on the 68000:
*** 23889,23898 ****
                       (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
         ...)
  
!  The first alternative has 'm' (memory) for operand 0, '0' for operand 1
! (meaning it must match operand 0), and 'dKs' for operand 2.  The second
! alternative has 'd' (data register) for operand 0, '0' for operand 1,
! and 'dmKs' for operand 2.  The '=' and '%' in the constraints apply to
  all the alternatives; their meaning is explained in a later section
  (*note Modifiers::).
  
--- 23890,23899 ----
                       (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
         ...)
  
!  The first alternative has ‘m’ (memory) for operand 0, ‘0’ for operand 1
! (meaning it must match operand 0), and ‘dKs’ for operand 2.  The second
! alternative has ‘d’ (data register) for operand 0, ‘0’ for operand 1,
! and ‘dmKs’ for operand 2.  The ‘=’ and ‘%’ in the constraints apply to
  all the alternatives; their meaning is explained in a later section
  (*note Modifiers::).
  
*************** Otherwise, for each alternative, the com
*** 23901,23932 ****
  instructions must be added to copy the operands so that that alternative
  applies.  The alternative requiring the least copying is chosen.  If two
  alternatives need the same amount of copying, the one that comes first
! is chosen.  These choices can be altered with the '?' and '!'
  characters:
  
! '?'
!      Disparage slightly the alternative that the '?' appears in, as a
       choice when no alternative applies exactly.  The compiler regards
!      this alternative as one unit more costly for each '?' that appears
       in it.
  
! '!'
!      Disparage severely the alternative that the '!' appears in.  This
       alternative can still be used if it fits without reloading, but if
       reloading is needed, some other alternative will be used.
  
! '^'
!      This constraint is analogous to '?' but it disparages slightly the
!      alternative only if the operand with the '^' needs a reload.
  
! '$'
!      This constraint is analogous to '!' but it disparages severely the
!      alternative only if the operand with the '$' needs a reload.
  
   When an insn pattern has multiple alternatives in its constraints,
  often the appearance of the assembler code is determined mostly by which
  alternative was matched.  When this is so, the C code for writing the
! assembler code can use the variable 'which_alternative', which is the
  ordinal number of the alternative that was actually satisfied (0 for the
  first, 1 for the second alternative, etc.).  *Note Output Statement::.
  
--- 23902,23933 ----
  instructions must be added to copy the operands so that that alternative
  applies.  The alternative requiring the least copying is chosen.  If two
  alternatives need the same amount of copying, the one that comes first
! is chosen.  These choices can be altered with the ‘?’ and ‘!’
  characters:
  
! ‘?’
!      Disparage slightly the alternative that the ‘?’ appears in, as a
       choice when no alternative applies exactly.  The compiler regards
!      this alternative as one unit more costly for each ‘?’ that appears
       in it.
  
! ‘!’
!      Disparage severely the alternative that the ‘!’ appears in.  This
       alternative can still be used if it fits without reloading, but if
       reloading is needed, some other alternative will be used.
  
! ‘^’
!      This constraint is analogous to ‘?’ but it disparages slightly the
!      alternative only if the operand with the ‘^’ needs a reload.
  
! ‘$’
!      This constraint is analogous to ‘!’ but it disparages severely the
!      alternative only if the operand with the ‘$’ needs a reload.
  
   When an insn pattern has multiple alternatives in its constraints,
  often the appearance of the assembler code is determined mostly by which
  alternative was matched.  When this is so, the C code for writing the
! assembler code can use the variable ‘which_alternative’, which is the
  ordinal number of the alternative that was actually satisfied (0 for the
  first, 1 for the second alternative, etc.).  *Note Output Statement::.
  
*************** The operand constraints have another fun
*** 23940,23948 ****
  to decide which kind of hardware register a pseudo register is best
  allocated to.  The compiler examines the constraints that apply to the
  insns that use the pseudo register, looking for the machine-dependent
! letters such as 'd' and 'a' that specify classes of registers.  The
  pseudo register is put in whichever class gets the most "votes".  The
! constraint letters 'g' and 'r' also vote: they vote in favor of a
  general register.  The machine description says which registers are
  considered general.
  
--- 23941,23949 ----
  to decide which kind of hardware register a pseudo register is best
  allocated to.  The compiler examines the constraints that apply to the
  insns that use the pseudo register, looking for the machine-dependent
! letters such as ‘d’ and ‘a’ that specify classes of registers.  The
  pseudo register is put in whichever class gets the most "votes".  The
! constraint letters ‘g’ and ‘r’ also vote: they vote in favor of a
  general register.  The machine description says which registers are
  considered general.
  
*************** File: gccint.info,  Node: Modifiers,  Ne
*** 23957,23989 ****
  
  Here are constraint modifier characters.
  
! '='
       Means that this operand is written to by this instruction: the
       previous value is discarded and replaced by new data.
  
! '+'
       Means that this operand is both read and written by the
       instruction.
  
       When the compiler fixes up the operands to satisfy the constraints,
       it needs to know which operands are read by the instruction and
!      which are written by it.  '=' identifies an operand which is only
!      written; '+' identifies an operand that is both read and written;
       all other operands are assumed to only be read.
  
!      If you specify '=' or '+' in a constraint, you put it in the first
       character of the constraint string.
  
! '&'
       Means (in a particular alternative) that this operand is an
!      "earlyclobber" operand, which is written before the instruction is
       finished using the input operands.  Therefore, this operand may not
       lie in a register that is read by the instruction or as part of any
       memory address.
  
!      '&' applies only to the alternative in which it is written.  In
       constraints with multiple alternatives, sometimes one alternative
!      requires '&' while others do not.  See, for example, the 'movdf'
       insn of the 68000.
  
       An operand which is read by the instruction can be tied to an
--- 23958,23990 ----
  
  Here are constraint modifier characters.
  
! ‘=’
       Means that this operand is written to by this instruction: the
       previous value is discarded and replaced by new data.
  
! ‘+’
       Means that this operand is both read and written by the
       instruction.
  
       When the compiler fixes up the operands to satisfy the constraints,
       it needs to know which operands are read by the instruction and
!      which are written by it.  ‘=’ identifies an operand which is only
!      written; ‘+’ identifies an operand that is both read and written;
       all other operands are assumed to only be read.
  
!      If you specify ‘=’ or ‘+’ in a constraint, you put it in the first
       character of the constraint string.
  
! ‘&’
       Means (in a particular alternative) that this operand is an
!      “earlyclobber” operand, which is written before the instruction is
       finished using the input operands.  Therefore, this operand may not
       lie in a register that is read by the instruction or as part of any
       memory address.
  
!      ‘&’ applies only to the alternative in which it is written.  In
       constraints with multiple alternatives, sometimes one alternative
!      requires ‘&’ while others do not.  See, for example, the ‘movdf’
       insn of the 68000.
  
       An operand which is read by the instruction can be tied to an
*************** Here are constraint modifier characters.
*** 23991,24013 ****
       early result is written.  Adding alternatives of this form often
       allows GCC to produce better code when only some of the read
       operands can be affected by the earlyclobber.  See, for example,
!      the 'mulsi3' insn of the ARM.
  
!      Furthermore, if the "earlyclobber" operand is also a read/write
       operand, then that operand is written only after it's used.
  
!      '&' does not obviate the need to write '=' or '+'.  As
!      "earlyclobber" operands are always written, a read-only
!      "earlyclobber" operand is ill-formed and will be rejected by the
       compiler.
  
! '%'
       Declares the instruction to be commutative for this operand and the
       following operand.  This means that the compiler may interchange
       the two operands if that is the cheapest way to make all operands
!      fit the constraints.  '%' applies to all alternatives and must
       appear as the first character in the constraint.  Only read-only
!      operands can use '%'.
  
       This is often used in patterns for addition instructions that
       really have only two operands: the result must go in one of the
--- 23992,24014 ----
       early result is written.  Adding alternatives of this form often
       allows GCC to produce better code when only some of the read
       operands can be affected by the earlyclobber.  See, for example,
!      the ‘mulsi3’ insn of the ARM.
  
!      Furthermore, if the “earlyclobber” operand is also a read/write
       operand, then that operand is written only after it's used.
  
!      ‘&’ does not obviate the need to write ‘=’ or ‘+’.  As
!      “earlyclobber” operands are always written, a read-only
!      “earlyclobber” operand is ill-formed and will be rejected by the
       compiler.
  
! ‘%’
       Declares the instruction to be commutative for this operand and the
       following operand.  This means that the compiler may interchange
       the two operands if that is the cheapest way to make all operands
!      fit the constraints.  ‘%’ applies to all alternatives and must
       appear as the first character in the constraint.  Only read-only
!      operands can use ‘%’.
  
       This is often used in patterns for addition instructions that
       really have only two operands: the result must go in one of the
*************** Here are constraint modifier characters.
*** 24024,24042 ****
       modifier if the two alternatives are strictly identical; this would
       only waste time in the reload pass.  The modifier is not
       operational after register allocation, so the result of
!      'define_peephole2' and 'define_split's performed after reload
!      cannot rely on '%' to make the intended insn match.
  
! '#'
       Says that all following characters, up to the next comma, are to be
       ignored as a constraint.  They are significant only for choosing
       register preferences.
  
! '*'
       Says that the following character should be ignored when choosing
!      register preferences.  '*' has no effect on the meaning of the
       constraint as a constraint, and no effect on reloading.  For LRA
!      '*' additionally disparages slightly the alternative if the
       following character matches the operand.
  
       Here is an example: the 68000 has an instruction to sign-extend a
--- 24025,24043 ----
       modifier if the two alternatives are strictly identical; this would
       only waste time in the reload pass.  The modifier is not
       operational after register allocation, so the result of
!      ‘define_peephole2’ and ‘define_split’s performed after reload
!      cannot rely on ‘%’ to make the intended insn match.
  
! ‘#’
       Says that all following characters, up to the next comma, are to be
       ignored as a constraint.  They are significant only for choosing
       register preferences.
  
! ‘*’
       Says that the following character should be ignored when choosing
!      register preferences.  ‘*’ has no effect on the meaning of the
       constraint as a constraint, and no effect on reloading.  For LRA
!      ‘*’ additionally disparages slightly the alternative if the
       following character matches the operand.
  
       Here is an example: the 68000 has an instruction to sign-extend a
*************** Here are constraint modifier characters.
*** 24044,24050 ****
       copying it into an address register.  While either kind of register
       is acceptable, the constraints on an address-register destination
       are less strict, so it is best if register allocation makes an
!      address register its goal.  Therefore, '*' is used so that the 'd'
       constraint letter (for data register) is ignored when computing
       register preferences.
  
--- 24045,24051 ----
       copying it into an address register.  While either kind of register
       is acceptable, the constraints on an address-register destination
       are less strict, so it is best if register allocation makes an
!      address register its goal.  Therefore, ‘*’ is used so that the ‘d’
       constraint letter (for data register) is ignored when computing
       register preferences.
  
*************** File: gccint.info,  Node: Machine Constr
*** 24061,24585 ****
  ------------------------------------------
  
  Whenever possible, you should use the general-purpose constraint letters
! in 'asm' arguments, since they will convey meaning more readily to
  people reading your code.  Failing that, use the constraint letters that
  usually have very similar meanings across architectures.  The most
! commonly used constraints are 'm' and 'r' (for memory and
  general-purpose registers respectively; *note Simple Constraints::), and
! 'I', usually the letter indicating the most common immediate-constant
  format.
  
   Each architecture defines additional constraints.  These constraints
  are used by the compiler itself for instruction generation, as well as
! for 'asm' statements; therefore, some of the constraints are not
! particularly useful for 'asm'.  Here is a summary of some of the
  machine-dependent constraints available on some particular machines; it
! includes both constraints that are useful for 'asm' and constraints that
  aren't.  The compiler source file mentioned in the table heading for
  each architecture is the definitive reference for the meanings of that
  architecture's constraints.
  
! _AArch64 family--'config/aarch64/constraints.md'_
!      'k'
!           The stack pointer register ('SP')
  
!      'w'
            Floating point register, Advanced SIMD vector register or SVE
            vector register
  
!      'x'
!           Like 'w', but restricted to registers 0 to 15 inclusive.
  
!      'y'
!           Like 'w', but restricted to registers 0 to 7 inclusive.
  
!      'Upl'
!           One of the low eight SVE predicate registers ('P0' to 'P7')
  
!      'Upa'
!           Any of the SVE predicate registers ('P0' to 'P15')
  
!      'I'
            Integer constant that is valid as an immediate operand in an
!           'ADD' instruction
  
!      'J'
            Integer constant that is valid as an immediate operand in a
!           'SUB' instruction (once negated)
  
!      'K'
            Integer constant that can be used with a 32-bit logical
            instruction
  
!      'L'
            Integer constant that can be used with a 64-bit logical
            instruction
  
!      'M'
            Integer constant that is valid as an immediate operand in a
!           32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
            to one of several different machine instructions depending on
            the value
  
!      'N'
            Integer constant that is valid as an immediate operand in a
!           64-bit 'MOV' pseudo instruction
  
!      'S'
            An absolute symbolic address or a label reference
  
!      'Y'
            Floating point constant zero
  
!      'Z'
            Integer constant zero
  
!      'Ush'
            The high part (bits 12 and upwards) of the pc-relative address
            of a symbol within 4GB of the instruction
  
!      'Q'
            A memory address which uses a single base register with no
            offset
  
!      'Ump'
            A memory address suitable for a load/store pair instruction in
            SI, DI, SF and DF modes
  
! _AMD GCN --'config/gcn/constraints.md'_
!      'I'
!           Immediate integer in the range -16 to 64
  
!      'J'
            Immediate 16-bit signed integer
  
!      'Kf'
!           Immediate constant -1
  
!      'L'
            Immediate 15-bit unsigned integer
  
!      'A'
            Immediate constant that can be inlined in an instruction
!           encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
!           +/-2.0, +/-4.0, 1.0/(2.0*PI)
  
!      'B'
            Immediate 32-bit signed integer that can be attached to an
            instruction encoding
  
!      'C'
!           Immediate 32-bit integer in range -16..4294967295 (i.e.
!           32-bit unsigned integer or 'A' constraint)
  
!      'DA'
!           Immediate 64-bit constant that can be split into two 'A'
            constants
  
!      'DB'
!           Immediate 64-bit constant that can be split into two 'B'
            constants
  
!      'U'
!           Any 'unspec'
  
!      'Y'
!           Any 'symbol_ref' or 'label_ref'
  
!      'v'
            VGPR register
  
!      'a'
            Accelerator VGPR register (CDNA1 onwards)
  
!      'Sg'
            SGPR register
  
!      'SD'
            SGPR registers valid for instruction destinations, including
            VCC, M0 and EXEC
  
!      'SS'
            SGPR registers valid for instruction sources, including VCC,
            M0, EXEC and SCC
  
!      'Sm'
            SGPR registers valid as a source for scalar memory
            instructions (excludes M0 and EXEC)
  
!      'Sv'
            SGPR registers valid as a source or destination for vector
            instructions (excludes EXEC)
  
!      'ca'
            All condition registers: SCC, VCCZ, EXECZ
  
!      'cs'
            Scalar condition register: SCC
  
!      'cV'
            Vector condition register: VCC, VCC_LO, VCC_HI
  
!      'e'
            EXEC register (EXEC_LO and EXEC_HI)
  
!      'RB'
!           Memory operand with address space suitable for 'buffer_*'
            instructions
  
!      'RF'
!           Memory operand with address space suitable for 'flat_*'
            instructions
  
!      'RS'
!           Memory operand with address space suitable for 's_*'
            instructions
  
!      'RL'
!           Memory operand with address space suitable for 'ds_*' LDS
            instructions
  
!      'RG'
!           Memory operand with address space suitable for 'ds_*' GDS
            instructions
  
!      'RD'
!           Memory operand with address space suitable for any 'ds_*'
            instructions
  
!      'RM'
!           Memory operand with address space suitable for 'global_*'
            instructions
  
! _ARC --'config/arc/constraints.md'_
!      'q'
!           Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
!           'r12'-'r15'.  This constraint can only match when the '-mq'
            option is in effect.
  
!      'e'
            Registers usable as base-regs of memory addresses in ARCompact
!           16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
!           This constraint can only match when the '-mq' option is in
            effect.
!      'D'
!           ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
  
!      'I'
            A signed 12-bit integer constant.
  
!      'Cal'
            constant for arithmetic/logical operations.  This might be any
            constant that can be put into a long immediate by the assmbler
            or linker without involving a PIC relocation.
  
!      'K'
            A 3-bit unsigned integer constant.
  
!      'L'
            A 6-bit unsigned integer constant.
  
!      'CnL'
            One's complement of a 6-bit unsigned integer constant.
  
!      'CmL'
            Two's complement of a 6-bit unsigned integer constant.
  
!      'M'
            A 5-bit unsigned integer constant.
  
!      'O'
            A 7-bit unsigned integer constant.
  
!      'P'
            A 8-bit unsigned integer constant.
  
!      'H'
            Any const_double value.
  
! _ARM family--'config/arm/constraints.md'_
  
!      'h'
!           In Thumb state, the core registers 'r8'-'r15'.
  
!      'k'
            The stack pointer register.
  
!      'l'
!           In Thumb State the core registers 'r0'-'r7'.  In ARM state
!           this is an alias for the 'r' constraint.
  
!      't'
!           VFP floating-point registers 's0'-'s31'.  Used for 32 bit
            values.
  
!      'w'
!           VFP floating-point registers 'd0'-'d31' and the appropriate
!           subset 'd0'-'d15' based on command line options.  Used for 64
            bit values only.  Not valid for Thumb1.
  
!      'y'
            The iWMMX co-processor registers.
  
!      'z'
            The iWMMX GR registers.
  
!      'G'
            The floating-point constant 0.0
  
!      'I'
            Integer that is valid as an immediate operand in a data
            processing instruction.  That is, an integer in the range 0 to
            255 rotated by a multiple of 2
  
!      'J'
!           Integer in the range -4095 to 4095
  
!      'K'
!           Integer that satisfies constraint 'I' when inverted (ones
            complement)
  
!      'L'
!           Integer that satisfies constraint 'I' when negated (twos
            complement)
  
!      'M'
            Integer in the range 0 to 32
  
!      'Q'
            A memory reference where the exact address is in a single
!           register (''m'' is preferable for 'asm' statements)
  
!      'R'
            An item in the constant pool
  
!      'S'
            A symbol in the text segment of the current file
  
!      'Uv'
            A memory reference suitable for VFP load/store insns
            (reg+constant offset)
  
!      'Uy'
            A memory reference suitable for iWMMXt load/store
            instructions.
  
!      'Uq'
            A memory reference suitable for the ARMv4 ldrsb instruction.
  
! _AVR family--'config/avr/constraints.md'_
!      'l'
            Registers from r0 to r15
  
!      'a'
            Registers from r16 to r23
  
!      'd'
            Registers from r16 to r31
  
!      'w'
            Registers from r24 to r31.  These registers can be used in
!           'adiw' command
  
!      'e'
            Pointer register (r26-r31)
  
!      'b'
            Base pointer register (r28-r31)
  
!      'q'
            Stack pointer register (SPH:SPL)
  
!      't'
            Temporary register r0
  
!      'x'
            Register pair X (r27:r26)
  
!      'y'
            Register pair Y (r29:r28)
  
!      'z'
            Register pair Z (r31:r30)
  
!      'I'
!           Constant greater than -1, less than 64
  
!      'J'
!           Constant greater than -64, less than 1
  
!      'K'
            Constant integer 2
  
!      'L'
            Constant integer 0
  
!      'M'
            Constant that fits in 8 bits
  
!      'N'
!           Constant integer -1
  
!      'O'
            Constant integer 8, 16, or 24
  
!      'P'
            Constant integer 1
  
!      'G'
            A floating point constant 0.0
  
!      'Q'
            A memory address based on Y or Z pointer with displacement.
  
! _Blackfin family--'config/bfin/constraints.md'_
!      'a'
            P register
  
!      'd'
            D register
  
!      'z'
            A call clobbered P register.
  
!      'qN'
            A single register.  If N is in the range 0 to 7, the
!           corresponding D register.  If it is 'A', then the register P0.
  
!      'D'
            Even-numbered D register
  
!      'W'
            Odd-numbered D register
  
!      'e'
            Accumulator register.
  
!      'A'
            Even-numbered accumulator register.
  
!      'B'
            Odd-numbered accumulator register.
  
!      'b'
            I register
  
!      'v'
            B register
  
!      'f'
            M register
  
!      'c'
            Registers used for circular buffering, i.e. I, B, or L
            registers.
  
!      'C'
            The CC register.
  
!      't'
            LT0 or LT1.
  
!      'k'
            LC0 or LC1.
  
!      'u'
            LB0 or LB1.
  
!      'x'
            Any D, P, B, M, I or L register.
  
!      'y'
            Additional registers typically used only in prologues and
            epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
            USP.
  
!      'w'
            Any register except accumulators or CC.
  
!      'Ksh'
!           Signed 16 bit integer (in the range -32768 to 32767)
  
!      'Kuh'
            Unsigned 16 bit integer (in the range 0 to 65535)
  
!      'Ks7'
!           Signed 7 bit integer (in the range -64 to 63)
  
!      'Ku7'
            Unsigned 7 bit integer (in the range 0 to 127)
  
!      'Ku5'
            Unsigned 5 bit integer (in the range 0 to 31)
  
!      'Ks4'
!           Signed 4 bit integer (in the range -8 to 7)
  
!      'Ks3'
!           Signed 3 bit integer (in the range -3 to 4)
  
!      'Ku3'
            Unsigned 3 bit integer (in the range 0 to 7)
  
!      'PN'
            Constant N, where N is a single-digit constant in the range 0
            to 4.
  
!      'PA'
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use with either accumulator.
  
!      'PB'
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use only with accumulator A1.
  
!      'M1'
            Constant 255.
  
!      'M2'
            Constant 65535.
  
!      'J'
            An integer constant with exactly a single bit set.
  
!      'L'
            An integer constant with all bits set except exactly one.
  
!      'H'
!      'Q'
            Any SYMBOL_REF.
  
! _C-SKY--'config/csky/constraints.md'_
  
!      'a'
            The mini registers r0 - r7.
  
!      'b'
            The low registers r0 - r15.
  
!      'c'
            C register.
  
!      'y'
            HI and LO registers.
  
!      'l'
            LO register.
  
!      'h'
            HI register.
  
!      'v'
            Vector registers.
  
!      'z'
            Stack pointer register (SP).
  
!      'Q'
            A memory address which uses a base register with a short
            offset or with a index register with its scale.
  
!      'W'
            A memory address which uses a base register with a index
            register with its scale.
  
--- 24062,24586 ----
  ------------------------------------------
  
  Whenever possible, you should use the general-purpose constraint letters
! in ‘asm’ arguments, since they will convey meaning more readily to
  people reading your code.  Failing that, use the constraint letters that
  usually have very similar meanings across architectures.  The most
! commonly used constraints are ‘m’ and ‘r’ (for memory and
  general-purpose registers respectively; *note Simple Constraints::), and
! ‘I’, usually the letter indicating the most common immediate-constant
  format.
  
   Each architecture defines additional constraints.  These constraints
  are used by the compiler itself for instruction generation, as well as
! for ‘asm’ statements; therefore, some of the constraints are not
! particularly useful for ‘asm’.  Here is a summary of some of the
  machine-dependent constraints available on some particular machines; it
! includes both constraints that are useful for ‘asm’ and constraints that
  aren't.  The compiler source file mentioned in the table heading for
  each architecture is the definitive reference for the meanings of that
  architecture's constraints.
  
! _AArch64 family--‘config/aarch64/constraints.md’_
!      ‘k’
!           The stack pointer register (‘SP’)
  
!      ‘w’
            Floating point register, Advanced SIMD vector register or SVE
            vector register
  
!      ‘x’
!           Like ‘w’, but restricted to registers 0 to 15 inclusive.
  
!      ‘y’
!           Like ‘w’, but restricted to registers 0 to 7 inclusive.
  
!      ‘Upl’
!           One of the low eight SVE predicate registers (‘P0’ to ‘P7’)
  
!      ‘Upa’
!           Any of the SVE predicate registers (‘P0’ to ‘P15’)
  
!      ‘I’
            Integer constant that is valid as an immediate operand in an
!           ‘ADD’ instruction
  
!      ‘J’
            Integer constant that is valid as an immediate operand in a
!           ‘SUB’ instruction (once negated)
  
!      ‘K’
            Integer constant that can be used with a 32-bit logical
            instruction
  
!      ‘L’
            Integer constant that can be used with a 64-bit logical
            instruction
  
!      ‘M’
            Integer constant that is valid as an immediate operand in a
!           32-bit ‘MOV’ pseudo instruction.  The ‘MOV’ may be assembled
            to one of several different machine instructions depending on
            the value
  
!      ‘N’
            Integer constant that is valid as an immediate operand in a
!           64-bit ‘MOV’ pseudo instruction
  
!      ‘S’
            An absolute symbolic address or a label reference
  
!      ‘Y’
            Floating point constant zero
  
!      ‘Z’
            Integer constant zero
  
!      ‘Ush’
            The high part (bits 12 and upwards) of the pc-relative address
            of a symbol within 4GB of the instruction
  
!      ‘Q’
            A memory address which uses a single base register with no
            offset
  
!      ‘Ump’
            A memory address suitable for a load/store pair instruction in
            SI, DI, SF and DF modes
  
! _AMD GCN --‘config/gcn/constraints.md’_
!      ‘I’
!           Immediate integer in the range −16 to 64
  
!      ‘J’
            Immediate 16-bit signed integer
  
!      ‘Kf’
!           Immediate constant −1
  
!      ‘L’
            Immediate 15-bit unsigned integer
  
!      ‘A’
            Immediate constant that can be inlined in an instruction
!           encoding: integer −16..64, or float 0.0, +/−0.5, +/−1.0,
!           +/−2.0, +/−4.0, 1.0/(2.0*PI)
  
!      ‘B’
            Immediate 32-bit signed integer that can be attached to an
            instruction encoding
  
!      ‘C’
!           Immediate 32-bit integer in range −16..4294967295 (i.e.
!           32-bit unsigned integer or ‘A’ constraint)
  
!      ‘DA’
!           Immediate 64-bit constant that can be split into two ‘A’
            constants
  
!      ‘DB’
!           Immediate 64-bit constant that can be split into two ‘B’
            constants
  
!      ‘U’
!           Any ‘unspec’
  
!      ‘Y’
!           Any ‘symbol_ref’ or ‘label_ref’
  
!      ‘v’
            VGPR register
  
!      ‘a’
            Accelerator VGPR register (CDNA1 onwards)
  
!      ‘Sg’
            SGPR register
  
!      ‘SD’
            SGPR registers valid for instruction destinations, including
            VCC, M0 and EXEC
  
!      ‘SS’
            SGPR registers valid for instruction sources, including VCC,
            M0, EXEC and SCC
  
!      ‘Sm’
            SGPR registers valid as a source for scalar memory
            instructions (excludes M0 and EXEC)
  
!      ‘Sv’
            SGPR registers valid as a source or destination for vector
            instructions (excludes EXEC)
  
!      ‘ca’
            All condition registers: SCC, VCCZ, EXECZ
  
!      ‘cs’
            Scalar condition register: SCC
  
!      ‘cV’
            Vector condition register: VCC, VCC_LO, VCC_HI
  
!      ‘e’
            EXEC register (EXEC_LO and EXEC_HI)
  
!      ‘RB’
!           Memory operand with address space suitable for ‘buffer_*’
            instructions
  
!      ‘RF’
!           Memory operand with address space suitable for ‘flat_*’
            instructions
  
!      ‘RS’
!           Memory operand with address space suitable for ‘s_*’
            instructions
  
!      ‘RL’
!           Memory operand with address space suitable for ‘ds_*’ LDS
            instructions
  
!      ‘RG’
!           Memory operand with address space suitable for ‘ds_*’ GDS
            instructions
  
!      ‘RD’
!           Memory operand with address space suitable for any ‘ds_*’
            instructions
  
!      ‘RM’
!           Memory operand with address space suitable for ‘global_*’
            instructions
  
! _ARC --‘config/arc/constraints.md’_
!      ‘q’
!           Registers usable in ARCompact 16-bit instructions: ‘r0’-‘r3’,
!           ‘r12’-‘r15’.  This constraint can only match when the ‘-mq’
            option is in effect.
  
!      ‘e’
            Registers usable as base-regs of memory addresses in ARCompact
!           16-bit memory instructions: ‘r0’-‘r3’, ‘r12’-‘r15’, ‘sp’.
!           This constraint can only match when the ‘-mq’ option is in
            effect.
!      ‘D’
!           ARC FPX (dpfp) 64-bit registers.  ‘D0’, ‘D1’.
  
!      ‘I’
            A signed 12-bit integer constant.
  
!      ‘Cal’
            constant for arithmetic/logical operations.  This might be any
            constant that can be put into a long immediate by the assmbler
            or linker without involving a PIC relocation.
  
!      ‘K’
            A 3-bit unsigned integer constant.
  
!      ‘L’
            A 6-bit unsigned integer constant.
  
!      ‘CnL’
            One's complement of a 6-bit unsigned integer constant.
  
!      ‘CmL’
            Two's complement of a 6-bit unsigned integer constant.
  
!      ‘M’
            A 5-bit unsigned integer constant.
  
!      ‘O’
            A 7-bit unsigned integer constant.
  
!      ‘P’
            A 8-bit unsigned integer constant.
  
!      ‘H’
            Any const_double value.
  
! _ARM family--‘config/arm/constraints.md’_
  
!      ‘h’
!           In Thumb state, the core registers ‘r8’-‘r15’.
  
!      ‘k’
            The stack pointer register.
  
!      ‘l’
!           In Thumb State the core registers ‘r0’-‘r7’.  In ARM state
!           this is an alias for the ‘r’ constraint.
  
!      ‘t’
!           VFP floating-point registers ‘s0’-‘s31’.  Used for 32 bit
            values.
  
!      ‘w’
!           VFP floating-point registers ‘d0’-‘d31’ and the appropriate
!           subset ‘d0’-‘d15’ based on command line options.  Used for 64
            bit values only.  Not valid for Thumb1.
  
!      ‘y’
            The iWMMX co-processor registers.
  
!      ‘z’
            The iWMMX GR registers.
  
!      ‘G’
            The floating-point constant 0.0
  
!      ‘I’
            Integer that is valid as an immediate operand in a data
            processing instruction.  That is, an integer in the range 0 to
            255 rotated by a multiple of 2
  
!      ‘J’
!           Integer in the range −4095 to 4095
  
!      ‘K’
!           Integer that satisfies constraint ‘I’ when inverted (ones
            complement)
  
!      ‘L’
!           Integer that satisfies constraint ‘I’ when negated (twos
            complement)
  
!      ‘M’
            Integer in the range 0 to 32
  
!      ‘Q’
            A memory reference where the exact address is in a single
!           register ('‘m’' is preferable for ‘asm’ statements)
  
!      ‘R’
            An item in the constant pool
  
!      ‘S’
            A symbol in the text segment of the current file
  
!      ‘Uv’
            A memory reference suitable for VFP load/store insns
            (reg+constant offset)
  
!      ‘Uy’
            A memory reference suitable for iWMMXt load/store
            instructions.
  
!      ‘Uq’
            A memory reference suitable for the ARMv4 ldrsb instruction.
  
! _AVR family--‘config/avr/constraints.md’_
!      ‘l’
            Registers from r0 to r15
  
!      ‘a’
            Registers from r16 to r23
  
!      ‘d’
            Registers from r16 to r31
  
!      ‘w’
            Registers from r24 to r31.  These registers can be used in
!           ‘adiw’ command
  
!      ‘e’
            Pointer register (r26-r31)
  
!      ‘b’
            Base pointer register (r28-r31)
  
!      ‘q’
            Stack pointer register (SPH:SPL)
  
!      ‘t’
            Temporary register r0
  
!      ‘x’
            Register pair X (r27:r26)
  
!      ‘y’
            Register pair Y (r29:r28)
  
!      ‘z’
            Register pair Z (r31:r30)
  
!      ‘I’
!           Constant greater than −1, less than 64
  
!      ‘J’
!           Constant greater than −64, less than 1
  
!      ‘K’
            Constant integer 2
  
!      ‘L’
            Constant integer 0
  
!      ‘M’
            Constant that fits in 8 bits
  
!      ‘N’
!           Constant integer −1
  
!      ‘O’
            Constant integer 8, 16, or 24
  
!      ‘P’
            Constant integer 1
  
!      ‘G’
            A floating point constant 0.0
  
!      ‘Q’
            A memory address based on Y or Z pointer with displacement.
  
! _Blackfin family--‘config/bfin/constraints.md’_
!      ‘a’
            P register
  
!      ‘d’
            D register
  
!      ‘z’
            A call clobbered P register.
  
!      ‘qN’
            A single register.  If N is in the range 0 to 7, the
!           corresponding D register.  If it is ‘A’, then the register P0.
  
!      ‘D’
            Even-numbered D register
  
!      ‘W’
            Odd-numbered D register
  
!      ‘e’
            Accumulator register.
  
!      ‘A’
            Even-numbered accumulator register.
  
!      ‘B’
            Odd-numbered accumulator register.
  
!      ‘b’
            I register
  
!      ‘v’
            B register
  
!      ‘f’
            M register
  
!      ‘c’
            Registers used for circular buffering, i.e. I, B, or L
            registers.
  
!      ‘C’
            The CC register.
  
!      ‘t’
            LT0 or LT1.
  
!      ‘k’
            LC0 or LC1.
  
!      ‘u’
            LB0 or LB1.
  
!      ‘x’
            Any D, P, B, M, I or L register.
  
!      ‘y’
            Additional registers typically used only in prologues and
            epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
            USP.
  
!      ‘w’
            Any register except accumulators or CC.
  
!      ‘Ksh’
!           Signed 16 bit integer (in the range −32768 to 32767)
  
!      ‘Kuh’
            Unsigned 16 bit integer (in the range 0 to 65535)
  
!      ‘Ks7’
!           Signed 7 bit integer (in the range −64 to 63)
  
!      ‘Ku7’
            Unsigned 7 bit integer (in the range 0 to 127)
  
!      ‘Ku5’
            Unsigned 5 bit integer (in the range 0 to 31)
  
!      ‘Ks4’
!           Signed 4 bit integer (in the range −8 to 7)
  
!      ‘Ks3’
!           Signed 3 bit integer (in the range −3 to 4)
  
!      ‘Ku3’
            Unsigned 3 bit integer (in the range 0 to 7)
  
!      ‘PN’
            Constant N, where N is a single-digit constant in the range 0
            to 4.
  
!      ‘PA’
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use with either accumulator.
  
!      ‘PB’
            An integer equal to one of the MACFLAG_XXX constants that is
            suitable for use only with accumulator A1.
  
!      ‘M1’
            Constant 255.
  
!      ‘M2’
            Constant 65535.
  
!      ‘J’
            An integer constant with exactly a single bit set.
  
!      ‘L’
            An integer constant with all bits set except exactly one.
  
!      ‘H’
!      ‘Q’
            Any SYMBOL_REF.
  
! _C-SKY--‘config/csky/constraints.md’_
  
!      ‘a’
            The mini registers r0 - r7.
  
!      ‘b’
            The low registers r0 - r15.
  
!      ‘c’
            C register.
  
!      ‘y’
            HI and LO registers.
  
!      ‘l’
            LO register.
  
!      ‘h’
            HI register.
  
!      ‘v’
            Vector registers.
  
!      ‘z’
            Stack pointer register (SP).
  
!      ‘Q’
            A memory address which uses a base register with a short
            offset or with a index register with its scale.
  
!      ‘W’
            A memory address which uses a base register with a index
            register with its scale.
  
*************** _C-SKY--'config/csky/constraints.md'_
*** 24589,25675 ****
       ranges accepted by particular instruction encodings.  Refer to the
       source code for details.
  
! _Epiphany--'config/epiphany/constraints.md'_
!      'U16'
            An unsigned 16-bit constant.
  
!      'K'
            An unsigned 5-bit constant.
  
!      'L'
            A signed 11-bit constant.
  
!      'Cm1'
!           A signed 11-bit constant added to -1.  Can only match when the
!           '-m1reg-REG' option is active.
  
!      'Cl1'
!           Left-shift of -1, i.e., a bit mask with a block of leading
            ones, the rest being a block of trailing zeroes.  Can only
!           match when the '-m1reg-REG' option is active.
  
!      'Cr1'
!           Right-shift of -1, i.e., a bit mask with a trailing block of
            ones, the rest being zeroes.  Or to put it another way, one
            less than a power of two.  Can only match when the
!           '-m1reg-REG' option is active.
  
!      'Cal'
!           Constant for arithmetic/logical operations.  This is like 'i',
            except that for position independent code, no symbols /
            expressions needing relocations are allowed.
  
!      'Csy'
            Symbolic constant for call/jump instruction.
  
!      'Rcs'
            The register class usable in short insns.  This is a register
            class constraint, and can thus drive register allocation.
!           This constraint won't match unless '-mprefer-short-insn-regs'
            is in effect.
  
!      'Rsc'
            The register class of registers that can be used to hold a
            sibcall call address.  I.e., a caller-saved register.
  
!      'Rct'
            Core control register class.
  
!      'Rgs'
            The register group usable in short insns.  This constraint
            does not use a register class, so that it only passively
            matches suitable registers, and doesn't drive register
            allocation.
  
!      'Car'
            Constant suitable for the addsi3_r pattern.  This is a valid
            offset For byte, halfword, or word addressing.
  
!      'Rra'
            Matches the return address if it can be replaced with the link
            register.
  
!      'Rcc'
            Matches the integer condition code register.
  
!      'Sra'
            Matches the return address if it is in a stack slot.
  
!      'Cfm'
            Matches control register values to switch fp mode, which are
!           encapsulated in 'UNSPEC_FP_MODE'.
  
! _FRV--'config/frv/frv.h'_
!      'a'
!           Register in the class 'ACC_REGS' ('acc0' to 'acc7').
  
!      'b'
!           Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
  
!      'c'
!           Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
!           to 'icc3').
  
!      'd'
!           Register in the class 'GPR_REGS' ('gr0' to 'gr63').
  
!      'e'
!           Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      'f'
!           Register in the class 'FPR_REGS' ('fr0' to 'fr63').
  
!      'h'
!           Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      'l'
!           Register in the class 'LR_REG' (the 'lr' register).
  
!      'q'
!           Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
            numbers not divisible by 4 are excluded not in the class but
            through the use of a machine mode larger than 8 bytes.
  
!      't'
!           Register in the class 'ICC_REGS' ('icc0' to 'icc3').
  
!      'u'
!           Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
  
!      'v'
!           Register in the class 'ICR_REGS' ('cc4' to 'cc7').
  
!      'w'
!           Register in the class 'FCR_REGS' ('cc0' to 'cc3').
  
!      'x'
!           Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
            Register numbers not divisible by 4 are excluded not in the
            class but through the use of a machine mode larger than 8
            bytes.
  
!      'z'
!           Register in the class 'SPR_REGS' ('lcr' and 'lr').
  
!      'A'
!           Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
  
!      'B'
!           Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
  
!      'C'
!           Register in the class 'CR_REGS' ('cc0' to 'cc7').
  
!      'G'
            Floating point constant zero
  
!      'I'
            6-bit signed integer constant
  
!      'J'
            10-bit signed integer constant
  
!      'L'
            16-bit signed integer constant
  
!      'M'
            16-bit unsigned integer constant
  
!      'N'
            12-bit signed integer constant that is negative--i.e. in the
!           range of -2048 to -1
  
!      'O'
            Constant zero
  
!      'P'
            12-bit signed integer constant that is greater than zero--i.e.
            in the range of 1 to 2047.
  
! _FT32--'config/ft32/constraints.md'_
!      'A'
            An absolute address
  
!      'B'
            An offset address
  
!      'W'
            A register indirect memory operand
  
!      'e'
            An offset address.
  
!      'f'
            An offset address.
  
!      'O'
            The constant zero or one
  
!      'I'
!           A 16-bit signed constant (-32768 ... 32767)
  
!      'w'
            A bitfield mask suitable for bext or bins
  
!      'x'
            An inverted bitfield mask suitable for bext or bins
  
!      'L'
            A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
  
!      'S'
!           A 20-bit signed constant (-524288 ... 524287)
  
!      'b'
            A constant for a bitfield width (1 ... 16)
  
!      'KA'
!           A 10-bit signed constant (-512 ... 511)
  
! _Hewlett-Packard PA-RISC--'config/pa/pa.h'_
!      'a'
            General register 1
  
!      'f'
            Floating point register
  
!      'q'
            Shift amount register
  
!      'x'
            Floating point register (deprecated)
  
!      'y'
            Upper floating point register (32-bit), floating point
            register (64-bit)
  
!      'Z'
            Any register
  
!      'I'
            Signed 11-bit integer constant
  
!      'J'
            Signed 14-bit integer constant
  
!      'K'
!           Integer constant that can be deposited with a 'zdepi'
            instruction
  
!      'L'
            Signed 5-bit integer constant
  
!      'M'
            Integer constant 0
  
!      'N'
!           Integer constant that can be loaded with a 'ldil' instruction
  
!      'O'
            Integer constant whose value plus one is a power of 2
  
!      'P'
!           Integer constant that can be used for 'and' operations in
!           'depi' and 'extru' instructions
  
!      'S'
            Integer constant 31
  
!      'U'
            Integer constant 63
  
!      'G'
            Floating-point constant 0.0
  
!      'A'
!           A 'lo_sum' data-linkage-table memory operand
  
!      'Q'
            A memory operand that can be used as the destination operand
            of an integer store instruction
  
!      'R'
            A scaled or unscaled indexed memory operand
  
!      'T'
            A memory operand for floating-point loads and stores
  
!      'W'
            A register indirect memory operand
  
! _Intel IA-64--'config/ia64/ia64.h'_
!      'a'
!           General register 'r0' to 'r3' for 'addl' instruction
  
!      'b'
            Branch register
  
!      'c'
!           Predicate register ('c' as in "conditional")
  
!      'd'
            Application register residing in M-unit
  
!      'e'
            Application register residing in I-unit
  
!      'f'
            Floating-point register
  
!      'm'
!           Memory operand.  If used together with '<' or '>', the operand
            can have postincrement and postdecrement which require
!           printing with '%Pn' on IA-64.
  
!      'G'
            Floating-point constant 0.0 or 1.0
  
!      'I'
            14-bit signed integer constant
  
!      'J'
            22-bit signed integer constant
  
!      'K'
            8-bit signed integer constant for logical instructions
  
!      'L'
            8-bit adjusted signed integer constant for compare pseudo-ops
  
!      'M'
            6-bit unsigned integer constant for shift counts
  
!      'N'
            9-bit signed integer constant for load and store
            postincrements
  
!      'O'
            The constant zero
  
!      'P'
!           0 or -1 for 'dep' instruction
  
!      'Q'
            Non-volatile memory for floating-point loads and stores
  
!      'R'
!           Integer constant in the range 1 to 4 for 'shladd' instruction
  
!      'S'
            Memory operand except postincrement and postdecrement.  This
!           is now roughly the same as 'm' when not used together with '<'
!           or '>'.
  
! _M32C--'config/m32c/m32c.cc'_
!      'Rsp'
!      'Rfb'
!      'Rsb'
!           '$sp', '$fb', '$sb'.
  
!      'Rcr'
            Any control register, when they're 16 bits wide (nothing if
            control registers are 24 bits wide)
  
!      'Rcl'
            Any control register, when they're 24 bits wide.
  
!      'R0w'
!      'R1w'
!      'R2w'
!      'R3w'
            $r0, $r1, $r2, $r3.
  
!      'R02'
            $r0 or $r2, or $r2r0 for 32 bit values.
  
!      'R13'
            $r1 or $r3, or $r3r1 for 32 bit values.
  
!      'Rdi'
            A register that can hold a 64 bit value.
  
!      'Rhl'
            $r0 or $r1 (registers with addressable high/low bytes)
  
!      'R23'
            $r2 or $r3
  
!      'Raa'
            Address registers
  
!      'Raw'
            Address registers when they're 16 bits wide.
  
!      'Ral'
            Address registers when they're 24 bits wide.
  
!      'Rqi'
            Registers that can hold QI values.
  
!      'Rad'
            Registers that can be used with displacements ($a0, $a1, $sb).
  
!      'Rsi'
            Registers that can hold 32 bit values.
  
!      'Rhi'
            Registers that can hold 16 bit values.
  
!      'Rhc'
            Registers chat can hold 16 bit values, including all control
            registers.
  
!      'Rra'
            $r0 through R1, plus $a0 and $a1.
  
!      'Rfl'
            The flags register.
  
!      'Rmm'
            The memory-based pseudo-registers $mem0 through $mem15.
  
!      'Rpi'
            Registers that can hold pointers (16 bit registers for r8c,
            m16c; 24 bit registers for m32cm, m32c).
  
!      'Rpa'
            Matches multiple registers in a PARALLEL to form a larger
            register.  Used to match function return values.
  
!      'Is3'
!           -8 ... 7
  
!      'IS1'
!           -128 ... 127
  
!      'IS2'
!           -32768 ... 32767
  
!      'IU2'
            0 ... 65535
  
!      'In4'
!           -8 ... -1 or 1 ... 8
  
!      'In5'
!           -16 ... -1 or 1 ... 16
  
!      'In6'
!           -32 ... -1 or 1 ... 32
  
!      'IM2'
!           -65536 ... -1
  
!      'Ilb'
            An 8 bit value with exactly one bit set.
  
!      'Ilw'
            A 16 bit value with exactly one bit set.
  
!      'Sd'
            The common src/dest memory addressing modes.
  
!      'Sa'
            Memory addressed using $a0 or $a1.
  
!      'Si'
            Memory addressed with immediate addresses.
  
!      'Ss'
            Memory addressed using the stack pointer ($sp).
  
!      'Sf'
            Memory addressed using the frame base register ($fb).
  
!      'Ss'
            Memory addressed using the small base register ($sb).
  
!      'S1'
            $r1h
  
! _LoongArch--'config/loongarch/constraints.md'_
!      'f'
            A floating-point or vector register (if available).
!      'k'
            A memory operand whose address is formed by a base register
            and (optionally scaled) index register.
!      'l'
            A signed 16-bit constant.
!      'm'
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as 'st.w' and 'ld.w'.
!      'I'
            A signed 12-bit constant (for arithmetic instructions).
!      'K'
            An unsigned 12-bit constant (for logic instructions).
!      'M'
!           A constant that cannot be loaded using 'lui', 'addiu' or
!           'ori'.
!      'N'
            A constant in the range -65535 to -1 (inclusive).
!      'O'
            A signed 15-bit constant.
!      'P'
            A constant in the range 1 to 65535 (inclusive).
!      'R'
            An address that can be used in a non-macro load or store.
!      'ZB'
            An address that is held in a general-purpose register.  The
            offset is zero.
!      'ZC'
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as 'll.w' and 'sc.w'.
  
! _MicroBlaze--'config/microblaze/constraints.md'_
!      'd'
!           A general register ('r0' to 'r31').
  
!      'z'
!           A status register ('rmsr', '$fcc1' to '$fcc7').
  
! _MIPS--'config/mips/constraints.md'_
!      'd'
!           A general-purpose register.  This is equivalent to 'r' unless
            generating MIPS16 code, in which case the MIPS16 register set
            is used.
  
!      'f'
            A floating-point register (if available).
  
!      'h'
!           Formerly the 'hi' register.  This constraint is no longer
            supported.
  
!      'l'
!           The 'lo' register.  Use this register to store values that are
            no bigger than a word.
  
!      'x'
!           The concatenated 'hi' and 'lo' registers.  Use this register
            to store doubleword values.
  
!      'c'
            A register suitable for use in an indirect jump.  This will
!           always be '$25' for '-mabicalls'.
  
!      'v'
!           Register '$3'.  Do not use this constraint in new code; it is
            retained only for compatibility with glibc.
  
!      'y'
!           Equivalent to 'r'; retained for backwards compatibility.
  
!      'z'
            A floating-point condition code register.
  
!      'I'
            A signed 16-bit constant (for arithmetic instructions).
  
!      'J'
            Integer zero.
  
!      'K'
            An unsigned 16-bit constant (for logic instructions).
  
!      'L'
            A signed 32-bit constant in which the lower 16 bits are zero.
!           Such constants can be loaded using 'lui'.
  
!      'M'
!           A constant that cannot be loaded using 'lui', 'addiu' or
!           'ori'.
  
!      'N'
!           A constant in the range -65535 to -1 (inclusive).
  
!      'O'
            A signed 15-bit constant.
  
!      'P'
            A constant in the range 1 to 65535 (inclusive).
  
!      'G'
            Floating-point zero.
  
!      'R'
            An address that can be used in a non-macro load or store.
  
!      'ZC'
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as 'll' and 'sc'.
  
!      'ZD'
!           An address suitable for a 'prefetch' instruction, or for any
!           other instruction with the same addressing mode as 'prefetch'.
  
! _Motorola 680x0--'config/m68k/constraints.md'_
!      'a'
            Address register
  
!      'd'
            Data register
  
!      'f'
            68881 floating-point register, if available
  
!      'I'
            Integer in the range 1 to 8
  
!      'J'
            16-bit signed number
  
!      'K'
            Signed number whose magnitude is greater than 0x80
  
!      'L'
!           Integer in the range -8 to -1
  
!      'M'
            Signed number whose magnitude is greater than 0x100
  
!      'N'
            Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
  
!      'O'
            16 (for rotate using swap)
  
!      'P'
            Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
  
!      'R'
            Numbers that mov3q can handle
  
!      'G'
            Floating point constant that is not a 68881 constant
  
!      'S'
            Operands that satisfy 'm' when -mpcrel is in effect
  
!      'T'
            Operands that satisfy 's' when -mpcrel is not in effect
  
!      'Q'
            Address register indirect addressing mode
  
!      'U'
            Register offset addressing
  
!      'W'
            const_call_operand
  
!      'Cs'
            symbol_ref or const
  
!      'Ci'
            const_int
  
!      'C0'
            const_int 0
  
!      'Cj'
            Range of signed numbers that don't fit in 16 bits
  
!      'Cmvq'
            Integers valid for mvq
  
!      'Capsw'
            Integers valid for a moveq followed by a swap
  
!      'Cmvz'
            Integers valid for mvz
  
!      'Cmvs'
            Integers valid for mvs
  
!      'Ap'
            push_operand
  
!      'Ac'
            Non-register operands allowed in clr
  
! _Moxie--'config/moxie/constraints.md'_
!      'A'
            An absolute address
  
!      'B'
            An offset address
  
!      'W'
            A register indirect memory operand
  
!      'I'
            A constant in the range of 0 to 255.
  
!      'N'
!           A constant in the range of 0 to -255.
  
! _MSP430-'config/msp430/constraints.md'_
  
!      'R12'
            Register R12.
  
!      'R13'
            Register R13.
  
!      'K'
            Integer constant 1.
  
!      'L'
            Integer constant -1^20..1^19.
  
!      'M'
            Integer constant 1-4.
  
!      'Ya'
            Memory references which do not require an extended MOVX
            instruction.
  
!      'Yl'
            Memory reference, labels only.
  
!      'Ys'
            Memory reference, stack only.
  
! _NDS32--'config/nds32/constraints.md'_
!      'w'
            LOW register class $r0 to $r7 constraint for V3/V3M ISA.
!      'l'
            LOW register class $r0 to $r7.
!      'd'
            MIDDLE register class $r0 to $r11, $r16 to $r19.
!      'h'
            HIGH register class $r12 to $r14, $r20 to $r31.
!      't'
            Temporary assist register $ta (i.e. $r15).
!      'k'
            Stack register $sp.
!      'Iu03'
            Unsigned immediate 3-bit value.
!      'In03'
!           Negative immediate 3-bit value in the range of -7-0.
!      'Iu04'
            Unsigned immediate 4-bit value.
!      'Is05'
            Signed immediate 5-bit value.
!      'Iu05'
            Unsigned immediate 5-bit value.
!      'In05'
!           Negative immediate 5-bit value in the range of -31-0.
!      'Ip05'
            Unsigned immediate 5-bit value for movpi45 instruction with
            range 16-47.
!      'Iu06'
            Unsigned immediate 6-bit value constraint for addri36.sp
            instruction.
!      'Iu08'
            Unsigned immediate 8-bit value.
!      'Iu09'
            Unsigned immediate 9-bit value.
!      'Is10'
            Signed immediate 10-bit value.
!      'Is11'
            Signed immediate 11-bit value.
!      'Is15'
            Signed immediate 15-bit value.
!      'Iu15'
            Unsigned immediate 15-bit value.
!      'Ic15'
            A constant which is not in the range of imm15u but ok for bclr
            instruction.
!      'Ie15'
            A constant which is not in the range of imm15u but ok for bset
            instruction.
!      'It15'
            A constant which is not in the range of imm15u but ok for btgl
            instruction.
!      'Ii15'
            A constant whose compliment value is in the range of imm15u
            and ok for bitci instruction.
!      'Is16'
            Signed immediate 16-bit value.
!      'Is17'
            Signed immediate 17-bit value.
!      'Is19'
            Signed immediate 19-bit value.
!      'Is20'
            Signed immediate 20-bit value.
!      'Ihig'
            The immediate value that can be simply set high 20-bit.
!      'Izeb'
            The immediate value 0xff.
!      'Izeh'
            The immediate value 0xffff.
!      'Ixls'
            The immediate value 0x01.
!      'Ix11'
            The immediate value 0x7ff.
!      'Ibms'
            The immediate value with power of 2.
!      'Ifex'
            The immediate value with power of 2 minus 1.
!      'U33'
            Memory constraint for 333 format.
!      'U45'
            Memory constraint for 45 format.
!      'U37'
            Memory constraint for 37 format.
  
! _Nios II family--'config/nios2/constraints.md'_
  
!      'I'
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range -32768 to
            32767.
  
!      'J'
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      'K'
            Integer that is valid as an immediate operand in an
            instruction taking only the upper 16-bits of a 32-bit number.
            Range 32-bit numbers with the lower 16-bits being 0.
  
!      'L'
            Integer that is valid as an immediate operand for a shift
            instruction.  Range 0 to 31.
  
!      'M'
            Integer that is valid as an immediate operand for only the
            value 0.  Can be used in conjunction with the format modifier
!           'z' to use 'r0' instead of '0' in the assembly output.
  
!      'N'
            Integer that is valid as an immediate operand for a custom
            instruction opcode.  Range 0 to 255.
  
!      'P'
            An immediate operand for R2 andchi/andci instructions.
  
!      'S'
            Matches immediates which are addresses in the small data
!           section and therefore can be added to 'gp' as a 16-bit
            immediate to re-create their 32-bit value.
  
!      'U'
            Matches constants suitable as an operand for the rdprs and
            cache instructions.
  
!      'v'
            A memory operand suitable for Nios II R2 load/store exclusive
            instructions.
  
!      'w'
            A memory operand suitable for load/store IO and cache
            instructions.
  
!      'T'
!           A 'const' wrapped 'UNSPEC' expression, representing a
            supported PIC or TLS relocation.
  
! _OpenRISC--'config/or1k/constraints.md'_
!      'I'
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range -32768 to
            32767.
  
!      'K'
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      'M'
            Signed 16-bit constant shifted left 16 bits.  (Used with
!           'l.movhi')
  
!      'O'
            Zero
  
!      'c'
            Register usable for sibcalls.
  
! _PDP-11--'config/pdp11/constraints.md'_
!      'a'
            Floating point registers AC0 through AC3.  These can be loaded
            from/to memory with a single instruction.
  
!      'd'
            Odd numbered general registers (R1, R3, R5).  These are used
            for 16-bit multiply operations.
  
!      'D'
            A memory reference that is encoded within the opcode, but not
            auto-increment or auto-decrement.
  
!      'f'
            Any of the floating point registers (AC0 through AC5).
  
!      'G'
            Floating point constant 0.
  
!      'h'
            Floating point registers AC4 and AC5.  These cannot be loaded
            from/to memory with a single instruction.
  
!      'I'
            An integer constant that fits in 16 bits.
  
!      'J'
            An integer constant whose low order 16 bits are zero.
  
!      'K'
            An integer constant that does not meet the constraints for
!           codes 'I' or 'J'.
  
!      'L'
            The integer constant 1.
  
!      'M'
!           The integer constant -1.
  
!      'N'
            The integer constant 0.
  
!      'O'
            Integer constants 0 through 3; shifts by these amounts are
            handled as multiple single-bit shifts rather than a single
            variable-length shift.
  
!      'Q'
            A memory reference which requires an additional word (address
            or offset) after the opcode.
  
!      'R'
            A memory reference that is encoded within the opcode.
  
! _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
!      'r'
!           A general purpose register (GPR), 'r0'...'r31'.
  
!      'b'
!           A base register.  Like 'r', but 'r0' is not allowed, so
!           'r1'...'r31'.
  
!      'f'
!           A floating point register (FPR), 'f0'...'f31'.
  
!      'd'
!           A floating point register.  This is the same as 'f' nowadays;
!           historically 'f' was for single-precision and 'd' was for
            double-precision floating point.
  
!      'v'
!           An Altivec vector register (VR), 'v0'...'v31'.
  
!      'wa'
!           A VSX register (VSR), 'vs0'...'vs63'.  This is either an FPR
!           ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are
!           'v0'...'v31').
  
!           When using 'wa', you should use the '%x' output modifier, so
            that the correct register number is printed.  For example:
  
                 asm ("xvadddp %x0,%x1,%x2"
                      : "=wa" (v1)
                      : "wa" (v2), "wa" (v3));
  
!           You should not use '%x' for 'v' operands:
  
                 asm ("xsaddqp %0,%1,%2"
                      : "=v" (v1)
                      : "v" (v2), "v" (v3));
  
!      'h'
!           A special register ('vrsave', 'ctr', or 'lr').
  
!      'c'
!           The count register, 'ctr'.
  
!      'l'
!           The link register, 'lr'.
  
!      'x'
!           Condition register field 0, 'cr0'.
  
!      'y'
!           Any condition register field, 'cr0'...'cr7'.
  
!      'z'
!           The carry bit, 'XER[CA]'.
  
!      'we'
!           Like 'wa', if this is a POWER9 or later and '-mvsx' and '-m64'
!           are used; otherwise, 'NO_REGS'.
  
!      'wn'
!           No register ('NO_REGS').
  
!      'wr'
!           Like 'r', if '-mpowerpc64' is used; otherwise, 'NO_REGS'.
  
!      'wx'
!           Like 'd', if '-mpowerpc-gfxopt' is used; otherwise, 'NO_REGS'.
  
!      'wA'
!           Like 'b', if '-mpowerpc64' is used; otherwise, 'NO_REGS'.
  
!      'wB'
            Signed 5-bit constant integer that can be loaded into an
            Altivec register.
  
!      'wE'
            Vector constant that can be loaded with the XXSPLTIB
            instruction.
  
!      'wF'
            Memory operand suitable for power8 GPR load fusion.
  
!      'wL'
            Int constant that is the element number mfvsrld accesses in a
            vector.
  
!      'wM'
            Match vector constant with all 1's if the XXLORC instruction
            is available.
  
!      'wO'
            Memory operand suitable for the ISA 3.0 vector d-form
            instructions.
  
!      'wQ'
            Memory operand suitable for the load/store quad instructions.
  
!      'wS'
            Vector constant that can be loaded with XXSPLTIB & sign
            extension.
  
!      'wY'
            A memory operand for a DS-form instruction.
  
!      'wZ'
            An indexed or indirect memory operand, ignoring the bottom 4
            bits.
  
!      'I'
            A signed 16-bit constant.
  
!      'J'
!           An unsigned 16-bit constant shifted left 16 bits (use 'L'
!           instead for 'SImode' constants).
  
!      'K'
            An unsigned 16-bit constant.
  
!      'L'
            A signed 16-bit constant shifted left 16 bits.
  
!      'M'
            An integer constant greater than 31.
  
!      'N'
            An exact power of 2.
  
!      'O'
            The integer constant zero.
  
!      'P'
            A constant whose negation is a signed 16-bit constant.
  
!      'eI'
            A signed 34-bit integer constant if prefixed instructions are
            supported.
  
!      'eP'
            A scalar floating point constant or a vector constant that can
            be loaded to a VSX register with one prefixed instruction.
  
!      'eQ'
            An IEEE 128-bit constant that can be loaded into a VSX
!           register with the 'lxvkq' instruction.
  
!      'G'
            A floating point constant that can be loaded into a register
            with one instruction per word.
  
!      'H'
            A floating point constant that can be loaded into a register
            using three instructions.
  
!      'm'
!           A memory operand.  Normally, 'm' does not allow addresses that
!           update the base register.  If the '<' or '>' constraint is
            also used, they are allowed and therefore on PowerPC targets
!           in that case it is only safe to use 'm<>' in an 'asm'
!           statement if that 'asm' statement accesses the operand exactly
!           once.  The 'asm' statement must also use '%U<OPNO>' as a
            placeholder for the "update" flag in the corresponding load or
            store instruction.  For example:
  
--- 24590,25676 ----
       ranges accepted by particular instruction encodings.  Refer to the
       source code for details.
  
! _Epiphany--‘config/epiphany/constraints.md’_
!      ‘U16’
            An unsigned 16-bit constant.
  
!      ‘K’
            An unsigned 5-bit constant.
  
!      ‘L’
            A signed 11-bit constant.
  
!      ‘Cm1’
!           A signed 11-bit constant added to −1.  Can only match when the
!           ‘-m1reg-REG’ option is active.
  
!      ‘Cl1’
!           Left-shift of −1, i.e., a bit mask with a block of leading
            ones, the rest being a block of trailing zeroes.  Can only
!           match when the ‘-m1reg-REG’ option is active.
  
!      ‘Cr1’
!           Right-shift of −1, i.e., a bit mask with a trailing block of
            ones, the rest being zeroes.  Or to put it another way, one
            less than a power of two.  Can only match when the
!           ‘-m1reg-REG’ option is active.
  
!      ‘Cal’
!           Constant for arithmetic/logical operations.  This is like ‘i’,
            except that for position independent code, no symbols /
            expressions needing relocations are allowed.
  
!      ‘Csy’
            Symbolic constant for call/jump instruction.
  
!      ‘Rcs’
            The register class usable in short insns.  This is a register
            class constraint, and can thus drive register allocation.
!           This constraint won't match unless ‘-mprefer-short-insn-regs’
            is in effect.
  
!      ‘Rsc’
            The register class of registers that can be used to hold a
            sibcall call address.  I.e., a caller-saved register.
  
!      ‘Rct’
            Core control register class.
  
!      ‘Rgs’
            The register group usable in short insns.  This constraint
            does not use a register class, so that it only passively
            matches suitable registers, and doesn't drive register
            allocation.
  
!      ‘Car’
            Constant suitable for the addsi3_r pattern.  This is a valid
            offset For byte, halfword, or word addressing.
  
!      ‘Rra’
            Matches the return address if it can be replaced with the link
            register.
  
!      ‘Rcc’
            Matches the integer condition code register.
  
!      ‘Sra’
            Matches the return address if it is in a stack slot.
  
!      ‘Cfm’
            Matches control register values to switch fp mode, which are
!           encapsulated in ‘UNSPEC_FP_MODE’.
  
! _FRV--‘config/frv/frv.h’_
!      ‘a’
!           Register in the class ‘ACC_REGS’ (‘acc0’ to ‘acc7’).
  
!      ‘b’
!           Register in the class ‘EVEN_ACC_REGS’ (‘acc0’ to ‘acc7’).
  
!      ‘c’
!           Register in the class ‘CC_REGS’ (‘fcc0’ to ‘fcc3’ and ‘icc0’
!           to ‘icc3’).
  
!      ‘d’
!           Register in the class ‘GPR_REGS’ (‘gr0’ to ‘gr63’).
  
!      ‘e’
!           Register in the class ‘EVEN_REGS’ (‘gr0’ to ‘gr63’).  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      ‘f’
!           Register in the class ‘FPR_REGS’ (‘fr0’ to ‘fr63’).
  
!      ‘h’
!           Register in the class ‘FEVEN_REGS’ (‘fr0’ to ‘fr63’).  Odd
            registers are excluded not in the class but through the use of
            a machine mode larger than 4 bytes.
  
!      ‘l’
!           Register in the class ‘LR_REG’ (the ‘lr’ register).
  
!      ‘q’
!           Register in the class ‘QUAD_REGS’ (‘gr2’ to ‘gr63’).  Register
            numbers not divisible by 4 are excluded not in the class but
            through the use of a machine mode larger than 8 bytes.
  
!      ‘t’
!           Register in the class ‘ICC_REGS’ (‘icc0’ to ‘icc3’).
  
!      ‘u’
!           Register in the class ‘FCC_REGS’ (‘fcc0’ to ‘fcc3’).
  
!      ‘v’
!           Register in the class ‘ICR_REGS’ (‘cc4’ to ‘cc7’).
  
!      ‘w’
!           Register in the class ‘FCR_REGS’ (‘cc0’ to ‘cc3’).
  
!      ‘x’
!           Register in the class ‘QUAD_FPR_REGS’ (‘fr0’ to ‘fr63’).
            Register numbers not divisible by 4 are excluded not in the
            class but through the use of a machine mode larger than 8
            bytes.
  
!      ‘z’
!           Register in the class ‘SPR_REGS’ (‘lcr’ and ‘lr’).
  
!      ‘A’
!           Register in the class ‘QUAD_ACC_REGS’ (‘acc0’ to ‘acc7’).
  
!      ‘B’
!           Register in the class ‘ACCG_REGS’ (‘accg0’ to ‘accg7’).
  
!      ‘C’
!           Register in the class ‘CR_REGS’ (‘cc0’ to ‘cc7’).
  
!      ‘G’
            Floating point constant zero
  
!      ‘I’
            6-bit signed integer constant
  
!      ‘J’
            10-bit signed integer constant
  
!      ‘L’
            16-bit signed integer constant
  
!      ‘M’
            16-bit unsigned integer constant
  
!      ‘N’
            12-bit signed integer constant that is negative--i.e. in the
!           range of −2048 to −1
  
!      ‘O’
            Constant zero
  
!      ‘P’
            12-bit signed integer constant that is greater than zero--i.e.
            in the range of 1 to 2047.
  
! _FT32--‘config/ft32/constraints.md’_
!      ‘A’
            An absolute address
  
!      ‘B’
            An offset address
  
!      ‘W’
            A register indirect memory operand
  
!      ‘e’
            An offset address.
  
!      ‘f’
            An offset address.
  
!      ‘O’
            The constant zero or one
  
!      ‘I’
!           A 16-bit signed constant (−32768 ... 32767)
  
!      ‘w’
            A bitfield mask suitable for bext or bins
  
!      ‘x’
            An inverted bitfield mask suitable for bext or bins
  
!      ‘L’
            A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
  
!      ‘S’
!           A 20-bit signed constant (−524288 ... 524287)
  
!      ‘b’
            A constant for a bitfield width (1 ... 16)
  
!      ‘KA’
!           A 10-bit signed constant (−512 ... 511)
  
! _Hewlett-Packard PA-RISC--‘config/pa/pa.h’_
!      ‘a’
            General register 1
  
!      ‘f’
            Floating point register
  
!      ‘q’
            Shift amount register
  
!      ‘x’
            Floating point register (deprecated)
  
!      ‘y’
            Upper floating point register (32-bit), floating point
            register (64-bit)
  
!      ‘Z’
            Any register
  
!      ‘I’
            Signed 11-bit integer constant
  
!      ‘J’
            Signed 14-bit integer constant
  
!      ‘K’
!           Integer constant that can be deposited with a ‘zdepi’
            instruction
  
!      ‘L’
            Signed 5-bit integer constant
  
!      ‘M’
            Integer constant 0
  
!      ‘N’
!           Integer constant that can be loaded with a ‘ldil’ instruction
  
!      ‘O’
            Integer constant whose value plus one is a power of 2
  
!      ‘P’
!           Integer constant that can be used for ‘and’ operations in
!           ‘depi’ and ‘extru’ instructions
  
!      ‘S’
            Integer constant 31
  
!      ‘U’
            Integer constant 63
  
!      ‘G’
            Floating-point constant 0.0
  
!      ‘A’
!           A ‘lo_sum’ data-linkage-table memory operand
  
!      ‘Q’
            A memory operand that can be used as the destination operand
            of an integer store instruction
  
!      ‘R’
            A scaled or unscaled indexed memory operand
  
!      ‘T’
            A memory operand for floating-point loads and stores
  
!      ‘W’
            A register indirect memory operand
  
! _Intel IA-64--‘config/ia64/ia64.h’_
!      ‘a’
!           General register ‘r0’ to ‘r3’ for ‘addl’ instruction
  
!      ‘b’
            Branch register
  
!      ‘c’
!           Predicate register (‘c’ as in "conditional")
  
!      ‘d’
            Application register residing in M-unit
  
!      ‘e’
            Application register residing in I-unit
  
!      ‘f’
            Floating-point register
  
!      ‘m’
!           Memory operand.  If used together with ‘<’ or ‘>’, the operand
            can have postincrement and postdecrement which require
!           printing with ‘%Pn’ on IA-64.
  
!      ‘G’
            Floating-point constant 0.0 or 1.0
  
!      ‘I’
            14-bit signed integer constant
  
!      ‘J’
            22-bit signed integer constant
  
!      ‘K’
            8-bit signed integer constant for logical instructions
  
!      ‘L’
            8-bit adjusted signed integer constant for compare pseudo-ops
  
!      ‘M’
            6-bit unsigned integer constant for shift counts
  
!      ‘N’
            9-bit signed integer constant for load and store
            postincrements
  
!      ‘O’
            The constant zero
  
!      ‘P’
!           0 or −1 for ‘dep’ instruction
  
!      ‘Q’
            Non-volatile memory for floating-point loads and stores
  
!      ‘R’
!           Integer constant in the range 1 to 4 for ‘shladd’ instruction
  
!      ‘S’
            Memory operand except postincrement and postdecrement.  This
!           is now roughly the same as ‘m’ when not used together with ‘<’
!           or ‘>’.
  
! _M32C--‘config/m32c/m32c.cc’_
!      ‘Rsp’
!      ‘Rfb’
!      ‘Rsb’
!           ‘$sp’, ‘$fb’, ‘$sb’.
  
!      ‘Rcr’
            Any control register, when they're 16 bits wide (nothing if
            control registers are 24 bits wide)
  
!      ‘Rcl’
            Any control register, when they're 24 bits wide.
  
!      ‘R0w’
!      ‘R1w’
!      ‘R2w’
!      ‘R3w’
            $r0, $r1, $r2, $r3.
  
!      ‘R02’
            $r0 or $r2, or $r2r0 for 32 bit values.
  
!      ‘R13’
            $r1 or $r3, or $r3r1 for 32 bit values.
  
!      ‘Rdi’
            A register that can hold a 64 bit value.
  
!      ‘Rhl’
            $r0 or $r1 (registers with addressable high/low bytes)
  
!      ‘R23’
            $r2 or $r3
  
!      ‘Raa’
            Address registers
  
!      ‘Raw’
            Address registers when they're 16 bits wide.
  
!      ‘Ral’
            Address registers when they're 24 bits wide.
  
!      ‘Rqi’
            Registers that can hold QI values.
  
!      ‘Rad’
            Registers that can be used with displacements ($a0, $a1, $sb).
  
!      ‘Rsi’
            Registers that can hold 32 bit values.
  
!      ‘Rhi’
            Registers that can hold 16 bit values.
  
!      ‘Rhc’
            Registers chat can hold 16 bit values, including all control
            registers.
  
!      ‘Rra’
            $r0 through R1, plus $a0 and $a1.
  
!      ‘Rfl’
            The flags register.
  
!      ‘Rmm’
            The memory-based pseudo-registers $mem0 through $mem15.
  
!      ‘Rpi’
            Registers that can hold pointers (16 bit registers for r8c,
            m16c; 24 bit registers for m32cm, m32c).
  
!      ‘Rpa’
            Matches multiple registers in a PARALLEL to form a larger
            register.  Used to match function return values.
  
!      ‘Is3’
!           −8 ... 7
  
!      ‘IS1’
!           −128 ... 127
  
!      ‘IS2’
!           −32768 ... 32767
  
!      ‘IU2’
            0 ... 65535
  
!      ‘In4’
!           −8 ... −1 or 1 ... 8
  
!      ‘In5’
!           −16 ... −1 or 1 ... 16
  
!      ‘In6’
!           −32 ... −1 or 1 ... 32
  
!      ‘IM2’
!           −65536 ... −1
  
!      ‘Ilb’
            An 8 bit value with exactly one bit set.
  
!      ‘Ilw’
            A 16 bit value with exactly one bit set.
  
!      ‘Sd’
            The common src/dest memory addressing modes.
  
!      ‘Sa’
            Memory addressed using $a0 or $a1.
  
!      ‘Si’
            Memory addressed with immediate addresses.
  
!      ‘Ss’
            Memory addressed using the stack pointer ($sp).
  
!      ‘Sf’
            Memory addressed using the frame base register ($fb).
  
!      ‘Ss’
            Memory addressed using the small base register ($sb).
  
!      ‘S1’
            $r1h
  
! _LoongArch--‘config/loongarch/constraints.md’_
!      ‘f’
            A floating-point or vector register (if available).
!      ‘k’
            A memory operand whose address is formed by a base register
            and (optionally scaled) index register.
!      ‘l’
            A signed 16-bit constant.
!      ‘m’
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as ‘st.w’ and ‘ld.w’.
!      ‘I’
            A signed 12-bit constant (for arithmetic instructions).
!      ‘K’
            An unsigned 12-bit constant (for logic instructions).
!      ‘M’
!           A constant that cannot be loaded using ‘lui’, ‘addiu’ or
!           ‘ori’.
!      ‘N’
            A constant in the range -65535 to -1 (inclusive).
!      ‘O’
            A signed 15-bit constant.
!      ‘P’
            A constant in the range 1 to 65535 (inclusive).
!      ‘R’
            An address that can be used in a non-macro load or store.
!      ‘ZB’
            An address that is held in a general-purpose register.  The
            offset is zero.
!      ‘ZC’
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as ‘ll.w’ and ‘sc.w’.
  
! _MicroBlaze--‘config/microblaze/constraints.md’_
!      ‘d’
!           A general register (‘r0’ to ‘r31’).
  
!      ‘z’
!           A status register (‘rmsr’, ‘$fcc1’ to ‘$fcc7’).
  
! _MIPS--‘config/mips/constraints.md’_
!      ‘d’
!           A general-purpose register.  This is equivalent to ‘r’ unless
            generating MIPS16 code, in which case the MIPS16 register set
            is used.
  
!      ‘f’
            A floating-point register (if available).
  
!      ‘h’
!           Formerly the ‘hi’ register.  This constraint is no longer
            supported.
  
!      ‘l’
!           The ‘lo’ register.  Use this register to store values that are
            no bigger than a word.
  
!      ‘x’
!           The concatenated ‘hi’ and ‘lo’ registers.  Use this register
            to store doubleword values.
  
!      ‘c’
            A register suitable for use in an indirect jump.  This will
!           always be ‘$25’ for ‘-mabicalls’.
  
!      ‘v’
!           Register ‘$3’.  Do not use this constraint in new code; it is
            retained only for compatibility with glibc.
  
!      ‘y’
!           Equivalent to ‘r’; retained for backwards compatibility.
  
!      ‘z’
            A floating-point condition code register.
  
!      ‘I’
            A signed 16-bit constant (for arithmetic instructions).
  
!      ‘J’
            Integer zero.
  
!      ‘K’
            An unsigned 16-bit constant (for logic instructions).
  
!      ‘L’
            A signed 32-bit constant in which the lower 16 bits are zero.
!           Such constants can be loaded using ‘lui’.
  
!      ‘M’
!           A constant that cannot be loaded using ‘lui’, ‘addiu’ or
!           ‘ori’.
  
!      ‘N’
!           A constant in the range −65535 to −1 (inclusive).
  
!      ‘O’
            A signed 15-bit constant.
  
!      ‘P’
            A constant in the range 1 to 65535 (inclusive).
  
!      ‘G’
            Floating-point zero.
  
!      ‘R’
            An address that can be used in a non-macro load or store.
  
!      ‘ZC’
            A memory operand whose address is formed by a base register
            and offset that is suitable for use in instructions with the
!           same addressing mode as ‘ll’ and ‘sc’.
  
!      ‘ZD’
!           An address suitable for a ‘prefetch’ instruction, or for any
!           other instruction with the same addressing mode as ‘prefetch’.
  
! _Motorola 680x0--‘config/m68k/constraints.md’_
!      ‘a’
            Address register
  
!      ‘d’
            Data register
  
!      ‘f’
            68881 floating-point register, if available
  
!      ‘I’
            Integer in the range 1 to 8
  
!      ‘J’
            16-bit signed number
  
!      ‘K’
            Signed number whose magnitude is greater than 0x80
  
!      ‘L’
!           Integer in the range −8 to −1
  
!      ‘M’
            Signed number whose magnitude is greater than 0x100
  
!      ‘N’
            Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
  
!      ‘O’
            16 (for rotate using swap)
  
!      ‘P’
            Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
  
!      ‘R’
            Numbers that mov3q can handle
  
!      ‘G’
            Floating point constant that is not a 68881 constant
  
!      ‘S’
            Operands that satisfy 'm' when -mpcrel is in effect
  
!      ‘T’
            Operands that satisfy 's' when -mpcrel is not in effect
  
!      ‘Q’
            Address register indirect addressing mode
  
!      ‘U’
            Register offset addressing
  
!      ‘W’
            const_call_operand
  
!      ‘Cs’
            symbol_ref or const
  
!      ‘Ci’
            const_int
  
!      ‘C0’
            const_int 0
  
!      ‘Cj’
            Range of signed numbers that don't fit in 16 bits
  
!      ‘Cmvq’
            Integers valid for mvq
  
!      ‘Capsw’
            Integers valid for a moveq followed by a swap
  
!      ‘Cmvz’
            Integers valid for mvz
  
!      ‘Cmvs’
            Integers valid for mvs
  
!      ‘Ap’
            push_operand
  
!      ‘Ac’
            Non-register operands allowed in clr
  
! _Moxie--‘config/moxie/constraints.md’_
!      ‘A’
            An absolute address
  
!      ‘B’
            An offset address
  
!      ‘W’
            A register indirect memory operand
  
!      ‘I’
            A constant in the range of 0 to 255.
  
!      ‘N’
!           A constant in the range of 0 to −255.
  
! _MSP430-‘config/msp430/constraints.md’_
  
!      ‘R12’
            Register R12.
  
!      ‘R13’
            Register R13.
  
!      ‘K’
            Integer constant 1.
  
!      ‘L’
            Integer constant -1^20..1^19.
  
!      ‘M’
            Integer constant 1-4.
  
!      ‘Ya’
            Memory references which do not require an extended MOVX
            instruction.
  
!      ‘Yl’
            Memory reference, labels only.
  
!      ‘Ys’
            Memory reference, stack only.
  
! _NDS32--‘config/nds32/constraints.md’_
!      ‘w’
            LOW register class $r0 to $r7 constraint for V3/V3M ISA.
!      ‘l’
            LOW register class $r0 to $r7.
!      ‘d’
            MIDDLE register class $r0 to $r11, $r16 to $r19.
!      ‘h’
            HIGH register class $r12 to $r14, $r20 to $r31.
!      ‘t’
            Temporary assist register $ta (i.e. $r15).
!      ‘k’
            Stack register $sp.
!      ‘Iu03’
            Unsigned immediate 3-bit value.
!      ‘In03’
!           Negative immediate 3-bit value in the range of −7-0.
!      ‘Iu04’
            Unsigned immediate 4-bit value.
!      ‘Is05’
            Signed immediate 5-bit value.
!      ‘Iu05’
            Unsigned immediate 5-bit value.
!      ‘In05’
!           Negative immediate 5-bit value in the range of −31-0.
!      ‘Ip05’
            Unsigned immediate 5-bit value for movpi45 instruction with
            range 16-47.
!      ‘Iu06’
            Unsigned immediate 6-bit value constraint for addri36.sp
            instruction.
!      ‘Iu08’
            Unsigned immediate 8-bit value.
!      ‘Iu09’
            Unsigned immediate 9-bit value.
!      ‘Is10’
            Signed immediate 10-bit value.
!      ‘Is11’
            Signed immediate 11-bit value.
!      ‘Is15’
            Signed immediate 15-bit value.
!      ‘Iu15’
            Unsigned immediate 15-bit value.
!      ‘Ic15’
            A constant which is not in the range of imm15u but ok for bclr
            instruction.
!      ‘Ie15’
            A constant which is not in the range of imm15u but ok for bset
            instruction.
!      ‘It15’
            A constant which is not in the range of imm15u but ok for btgl
            instruction.
!      ‘Ii15’
            A constant whose compliment value is in the range of imm15u
            and ok for bitci instruction.
!      ‘Is16’
            Signed immediate 16-bit value.
!      ‘Is17’
            Signed immediate 17-bit value.
!      ‘Is19’
            Signed immediate 19-bit value.
!      ‘Is20’
            Signed immediate 20-bit value.
!      ‘Ihig’
            The immediate value that can be simply set high 20-bit.
!      ‘Izeb’
            The immediate value 0xff.
!      ‘Izeh’
            The immediate value 0xffff.
!      ‘Ixls’
            The immediate value 0x01.
!      ‘Ix11’
            The immediate value 0x7ff.
!      ‘Ibms’
            The immediate value with power of 2.
!      ‘Ifex’
            The immediate value with power of 2 minus 1.
!      ‘U33’
            Memory constraint for 333 format.
!      ‘U45’
            Memory constraint for 45 format.
!      ‘U37’
            Memory constraint for 37 format.
  
! _Nios II family--‘config/nios2/constraints.md’_
  
!      ‘I’
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range −32768 to
            32767.
  
!      ‘J’
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      ‘K’
            Integer that is valid as an immediate operand in an
            instruction taking only the upper 16-bits of a 32-bit number.
            Range 32-bit numbers with the lower 16-bits being 0.
  
!      ‘L’
            Integer that is valid as an immediate operand for a shift
            instruction.  Range 0 to 31.
  
!      ‘M’
            Integer that is valid as an immediate operand for only the
            value 0.  Can be used in conjunction with the format modifier
!           ‘z’ to use ‘r0’ instead of ‘0’ in the assembly output.
  
!      ‘N’
            Integer that is valid as an immediate operand for a custom
            instruction opcode.  Range 0 to 255.
  
!      ‘P’
            An immediate operand for R2 andchi/andci instructions.
  
!      ‘S’
            Matches immediates which are addresses in the small data
!           section and therefore can be added to ‘gp’ as a 16-bit
            immediate to re-create their 32-bit value.
  
!      ‘U’
            Matches constants suitable as an operand for the rdprs and
            cache instructions.
  
!      ‘v’
            A memory operand suitable for Nios II R2 load/store exclusive
            instructions.
  
!      ‘w’
            A memory operand suitable for load/store IO and cache
            instructions.
  
!      ‘T’
!           A ‘const’ wrapped ‘UNSPEC’ expression, representing a
            supported PIC or TLS relocation.
  
! _OpenRISC--‘config/or1k/constraints.md’_
!      ‘I’
            Integer that is valid as an immediate operand in an
!           instruction taking a signed 16-bit number.  Range −32768 to
            32767.
  
!      ‘K’
            Integer that is valid as an immediate operand in an
            instruction taking an unsigned 16-bit number.  Range 0 to
            65535.
  
!      ‘M’
            Signed 16-bit constant shifted left 16 bits.  (Used with
!           ‘l.movhi’)
  
!      ‘O’
            Zero
  
!      ‘c’
            Register usable for sibcalls.
  
! _PDP-11--‘config/pdp11/constraints.md’_
!      ‘a’
            Floating point registers AC0 through AC3.  These can be loaded
            from/to memory with a single instruction.
  
!      ‘d’
            Odd numbered general registers (R1, R3, R5).  These are used
            for 16-bit multiply operations.
  
!      ‘D’
            A memory reference that is encoded within the opcode, but not
            auto-increment or auto-decrement.
  
!      ‘f’
            Any of the floating point registers (AC0 through AC5).
  
!      ‘G’
            Floating point constant 0.
  
!      ‘h’
            Floating point registers AC4 and AC5.  These cannot be loaded
            from/to memory with a single instruction.
  
!      ‘I’
            An integer constant that fits in 16 bits.
  
!      ‘J’
            An integer constant whose low order 16 bits are zero.
  
!      ‘K’
            An integer constant that does not meet the constraints for
!           codes ‘I’ or ‘J’.
  
!      ‘L’
            The integer constant 1.
  
!      ‘M’
!           The integer constant −1.
  
!      ‘N’
            The integer constant 0.
  
!      ‘O’
            Integer constants 0 through 3; shifts by these amounts are
            handled as multiple single-bit shifts rather than a single
            variable-length shift.
  
!      ‘Q’
            A memory reference which requires an additional word (address
            or offset) after the opcode.
  
!      ‘R’
            A memory reference that is encoded within the opcode.
  
! _PowerPC and IBM RS6000--‘config/rs6000/constraints.md’_
!      ‘r’
!           A general purpose register (GPR), ‘r0’...‘r31’.
  
!      ‘b’
!           A base register.  Like ‘r’, but ‘r0’ is not allowed, so
!           ‘r1’...‘r31’.
  
!      ‘f’
!           A floating point register (FPR), ‘f0’...‘f31’.
  
!      ‘d’
!           A floating point register.  This is the same as ‘f’ nowadays;
!           historically ‘f’ was for single-precision and ‘d’ was for
            double-precision floating point.
  
!      ‘v’
!           An Altivec vector register (VR), ‘v0’...‘v31’.
  
!      ‘wa’
!           A VSX register (VSR), ‘vs0’...‘vs63’.  This is either an FPR
!           (‘vs0’...‘vs31’ are ‘f0’...‘f31’) or a VR (‘vs32’...‘vs63’ are
!           ‘v0’...‘v31’).
  
!           When using ‘wa’, you should use the ‘%x’ output modifier, so
            that the correct register number is printed.  For example:
  
                 asm ("xvadddp %x0,%x1,%x2"
                      : "=wa" (v1)
                      : "wa" (v2), "wa" (v3));
  
!           You should not use ‘%x’ for ‘v’ operands:
  
                 asm ("xsaddqp %0,%1,%2"
                      : "=v" (v1)
                      : "v" (v2), "v" (v3));
  
!      ‘h’
!           A special register (‘vrsave’, ‘ctr’, or ‘lr’).
  
!      ‘c’
!           The count register, ‘ctr’.
  
!      ‘l’
!           The link register, ‘lr’.
  
!      ‘x’
!           Condition register field 0, ‘cr0’.
  
!      ‘y’
!           Any condition register field, ‘cr0’...‘cr7’.
  
!      ‘z’
!           The carry bit, ‘XER[CA]’.
  
!      ‘we’
!           Like ‘wa’, if this is a POWER9 or later and ‘-mvsx’ and ‘-m64’
!           are used; otherwise, ‘NO_REGS’.
  
!      ‘wn’
!           No register (‘NO_REGS’).
  
!      ‘wr’
!           Like ‘r’, if ‘-mpowerpc64’ is used; otherwise, ‘NO_REGS’.
  
!      ‘wx’
!           Like ‘d’, if ‘-mpowerpc-gfxopt’ is used; otherwise, ‘NO_REGS’.
  
!      ‘wA’
!           Like ‘b’, if ‘-mpowerpc64’ is used; otherwise, ‘NO_REGS’.
  
!      ‘wB’
            Signed 5-bit constant integer that can be loaded into an
            Altivec register.
  
!      ‘wE’
            Vector constant that can be loaded with the XXSPLTIB
            instruction.
  
!      ‘wF’
            Memory operand suitable for power8 GPR load fusion.
  
!      ‘wL’
            Int constant that is the element number mfvsrld accesses in a
            vector.
  
!      ‘wM’
            Match vector constant with all 1's if the XXLORC instruction
            is available.
  
!      ‘wO’
            Memory operand suitable for the ISA 3.0 vector d-form
            instructions.
  
!      ‘wQ’
            Memory operand suitable for the load/store quad instructions.
  
!      ‘wS’
            Vector constant that can be loaded with XXSPLTIB & sign
            extension.
  
!      ‘wY’
            A memory operand for a DS-form instruction.
  
!      ‘wZ’
            An indexed or indirect memory operand, ignoring the bottom 4
            bits.
  
!      ‘I’
            A signed 16-bit constant.
  
!      ‘J’
!           An unsigned 16-bit constant shifted left 16 bits (use ‘L’
!           instead for ‘SImode’ constants).
  
!      ‘K’
            An unsigned 16-bit constant.
  
!      ‘L’
            A signed 16-bit constant shifted left 16 bits.
  
!      ‘M’
            An integer constant greater than 31.
  
!      ‘N’
            An exact power of 2.
  
!      ‘O’
            The integer constant zero.
  
!      ‘P’
            A constant whose negation is a signed 16-bit constant.
  
!      ‘eI’
            A signed 34-bit integer constant if prefixed instructions are
            supported.
  
!      ‘eP’
            A scalar floating point constant or a vector constant that can
            be loaded to a VSX register with one prefixed instruction.
  
!      ‘eQ’
            An IEEE 128-bit constant that can be loaded into a VSX
!           register with the ‘lxvkq’ instruction.
  
!      ‘G’
            A floating point constant that can be loaded into a register
            with one instruction per word.
  
!      ‘H’
            A floating point constant that can be loaded into a register
            using three instructions.
  
!      ‘m’
!           A memory operand.  Normally, ‘m’ does not allow addresses that
!           update the base register.  If the ‘<’ or ‘>’ constraint is
            also used, they are allowed and therefore on PowerPC targets
!           in that case it is only safe to use ‘m<>’ in an ‘asm’
!           statement if that ‘asm’ statement accesses the operand exactly
!           once.  The ‘asm’ statement must also use ‘%U<OPNO>’ as a
            placeholder for the "update" flag in the corresponding load or
            store instruction.  For example:
  
*************** _PowerPC and IBM RS6000--'config/rs6000/
*** 25681,26218 ****
  
            is not.
  
!      'es'
            A "stable" memory operand; that is, one which does not include
            any automodification of the base register.  This used to be
!           useful when 'm' allowed automodification of the base register,
!           but as those are now only allowed when '<' or '>' is used,
!           'es' is basically the same as 'm' without '<' and '>'.
  
!      'Q'
            A memory operand addressed by just a base register.
  
!      'Y'
            A memory operand for a DQ-form instruction.
  
!      'Z'
            A memory operand accessed with indexed or indirect addressing.
  
!      'R'
            An AIX TOC entry.
  
!      'a'
            An indexed or indirect address.
  
!      'U'
            A V.4 small data reference.
  
!      'W'
            A vector constant that does not require memory.
  
!      'j'
            The zero vector constant.
  
! _PRU--'config/pru/constraints.md'_
!      'I'
            An unsigned 8-bit integer constant.
  
!      'J'
            An unsigned 16-bit integer constant.
  
!      'L'
            An unsigned 5-bit integer constant (for shift counts).
  
!      'T'
            A text segment (program memory) constant label.
  
!      'Z'
            Integer constant zero.
  
! _RL78--'config/rl78/constraints.md'_
  
!      'Int3'
            An integer constant in the range 1 ... 7.
!      'Int8'
            An integer constant in the range 0 ... 255.
!      'J'
!           An integer constant in the range -255 ... 0
!      'K'
            The integer constant 1.
!      'L'
            The integer constant -1.
!      'M'
            The integer constant 0.
!      'N'
            The integer constant 2.
!      'O'
            The integer constant -2.
!      'P'
            An integer constant in the range 1 ... 15.
!      'Qbi'
            The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
!      'Qsc'
            The synthetic compare types-gt, lt, ge, and le.
!      'Wab'
            A memory reference with an absolute address.
!      'Wbc'
!           A memory reference using 'BC' as a base register, with an
            optional offset.
!      'Wca'
!           A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
            address, for calls.
!      'Wcv'
            A memory reference using any 16-bit register pair for the
            address, for calls.
!      'Wd2'
!           A memory reference using 'DE' as a base register, with an
            optional offset.
!      'Wde'
!           A memory reference using 'DE' as a base register, without any
            offset.
!      'Wfr'
            Any memory reference to an address in the far address space.
!      'Wh1'
!           A memory reference using 'HL' as a base register, with an
            optional one-byte offset.
!      'Whb'
!           A memory reference using 'HL' as a base register, with 'B' or
!           'C' as the index register.
!      'Whl'
!           A memory reference using 'HL' as a base register, without any
            offset.
!      'Ws1'
!           A memory reference using 'SP' as a base register, with an
            optional one-byte offset.
!      'Y'
            Any memory reference to an address in the near address space.
!      'A'
!           The 'AX' register.
!      'B'
!           The 'BC' register.
!      'D'
!           The 'DE' register.
!      'R'
!           'A' through 'L' registers.
!      'S'
!           The 'SP' register.
!      'T'
!           The 'HL' register.
!      'Z08W'
!           The 16-bit 'R8' register.
!      'Z10W'
!           The 16-bit 'R10' register.
!      'Zint'
!           The registers reserved for interrupts ('R24' to 'R31').
!      'a'
!           The 'A' register.
!      'b'
!           The 'B' register.
!      'c'
!           The 'C' register.
!      'd'
!           The 'D' register.
!      'e'
!           The 'E' register.
!      'h'
!           The 'H' register.
!      'l'
!           The 'L' register.
!      'v'
            The virtual registers.
!      'w'
!           The 'PSW' register.
!      'x'
!           The 'X' register.
  
! _RISC-V--'config/riscv/constraints.md'_
  
!      'f'
            A floating-point register (if available).
  
!      'I'
            An I-type 12-bit signed immediate.
  
!      'J'
            Integer zero.
  
!      'K'
            A 5-bit unsigned immediate for CSR access instructions.
  
!      'A'
            An address that is held in a general-purpose register.
  
!      'S'
            A constraint that matches an absolute symbolic address.
  
!      'vr'
            A vector register (if available)..
  
!      'vd'
            A vector register, excluding v0 (if available).
  
!      'vm'
            A vector register, only v0 (if available).
  
! _RX--'config/rx/constraints.md'_
!      'Q'
            An address which does not involve register indirect addressing
            or pre/post increment/decrement addressing.
  
!      'Symbol'
            A symbol reference.
  
!      'Int08'
!           A constant in the range -256 to 255, inclusive.
  
!      'Sint08'
!           A constant in the range -128 to 127, inclusive.
  
!      'Sint16'
!           A constant in the range -32768 to 32767, inclusive.
  
!      'Sint24'
!           A constant in the range -8388608 to 8388607, inclusive.
  
!      'Uint04'
            A constant in the range 0 to 15, inclusive.
  
! _S/390 and zSeries--'config/s390/s390.h'_
!      'a'
            Address register (general purpose register except r0)
  
!      'c'
            Condition code register
  
!      'd'
            Data register (arbitrary general purpose register)
  
!      'f'
            Floating-point register
  
!      'I'
            Unsigned 8-bit constant (0-255)
  
!      'J'
            Unsigned 12-bit constant (0-4095)
  
!      'K'
!           Signed 16-bit constant (-32768-32767)
  
!      'L'
            Value appropriate as displacement.
!           '(0..4095)'
                 for short displacement
!           '(-524288..524287)'
                 for long displacement
  
!      'M'
            Constant integer with a value of 0x7fffffff.
  
!      'N'
            Multiple letter constraint followed by 4 parameter letters.
!           '0..9:'
                 number of the part counting from most to least
                 significant
!           'H,Q:'
                 mode of the part
!           'D,S,H:'
                 mode of the containing operand
!           '0,F:'
                 value of the other parts (F--all bits set)
            The constraint matches if the specified part of a constant has
            a value different from its other parts.
  
!      'Q'
            Memory reference without index register and with short
            displacement.
  
!      'R'
            Memory reference with index register and short displacement.
  
!      'S'
            Memory reference without index register but with long
            displacement.
  
!      'T'
            Memory reference with index register and long displacement.
  
!      'U'
            Pointer with short displacement.
  
!      'W'
            Pointer with long displacement.
  
!      'Y'
            Shift count operand.
  
! _SPARC--'config/sparc/sparc.h'_
!      'f'
            Floating-point register on the SPARC-V8 architecture and lower
            floating-point register on the SPARC-V9 architecture.
  
!      'e'
!           Floating-point register.  It is equivalent to 'f' on the
            SPARC-V8 architecture and contains both lower and upper
            floating-point registers on the SPARC-V9 architecture.
  
!      'c'
            Floating-point condition code register.
  
!      'd'
            Lower floating-point register.  It is only valid on the
            SPARC-V9 architecture when the Visual Instruction Set is
            available.
  
!      'b'
            Floating-point register.  It is only valid on the SPARC-V9
            architecture when the Visual Instruction Set is available.
  
!      'h'
            64-bit global or out register for the SPARC-V8+ architecture.
  
!      'C'
            The constant all-ones, for floating-point.
  
!      'A'
            Signed 5-bit constant
  
!      'D'
            A vector constant
  
!      'I'
            Signed 13-bit constant
  
!      'J'
            Zero
  
!      'K'
            32-bit constant with the low 12 bits clear (a constant that
!           can be loaded with the 'sethi' instruction)
  
!      'L'
!           A constant in the range supported by 'movcc' instructions
            (11-bit signed immediate)
  
!      'M'
!           A constant in the range supported by 'movrcc' instructions
            (10-bit signed immediate)
  
!      'N'
!           Same as 'K', except that it verifies that bits that are not in
            the lower 32-bit range are all zero.  Must be used instead of
!           'K' for modes wider than 'SImode'
  
!      'O'
            The constant 4096
  
!      'G'
            Floating-point zero
  
!      'H'
            Signed 13-bit constant, sign-extended to 32 or 64 bits
  
!      'P'
            The constant -1
  
!      'Q'
            Floating-point constant whose integral representation can be
            moved into an integer register using a single sethi
            instruction
  
!      'R'
            Floating-point constant whose integral representation can be
            moved into an integer register using a single mov instruction
  
!      'S'
            Floating-point constant whose integral representation can be
            moved into an integer register using a high/lo_sum instruction
            sequence
  
!      'T'
            Memory address aligned to an 8-byte boundary
  
!      'U'
            Even register
  
!      'W'
!           Memory address for 'e' constraint registers
  
!      'w'
            Memory address with only a base register
  
!      'Y'
            Vector zero
  
! _TI C6X family--'config/c6x/constraints.md'_
!      'a'
            Register file A (A0-A31).
  
!      'b'
            Register file B (B0-B31).
  
!      'A'
            Predicate registers in register file A (A0-A2 on C64X and
            higher, A1 and A2 otherwise).
  
!      'B'
            Predicate registers in register file B (B0-B2).
  
!      'C'
            A call-used register in register file B (B0-B9, B16-B31).
  
!      'Da'
            Register file A, excluding predicate registers (A3-A31, plus
            A0 if not C64X or higher).
  
!      'Db'
            Register file B, excluding predicate registers (B3-B31).
  
!      'Iu4'
            Integer constant in the range 0 ... 15.
  
!      'Iu5'
            Integer constant in the range 0 ... 31.
  
!      'In5'
!           Integer constant in the range -31 ... 0.
  
!      'Is5'
!           Integer constant in the range -16 ... 15.
  
!      'I5x'
            Integer constant that can be the operand of an ADDA or a SUBA
            insn.
  
!      'IuB'
            Integer constant in the range 0 ... 65535.
  
!      'IsB'
!           Integer constant in the range -32768 ... 32767.
  
!      'IsC'
            Integer constant in the range -2^{20} ... 2^{20} - 1.
  
!      'Jc'
            Integer constant that is a valid mask for the clr instruction.
  
!      'Js'
            Integer constant that is a valid mask for the set instruction.
  
!      'Q'
            Memory location with A base register.
  
!      'R'
            Memory location with B base register.
  
!      'S0'
            On C64x+ targets, a GP-relative small data reference.
  
!      'S1'
!           Any kind of 'SYMBOL_REF', for use in a call address.
  
!      'Si'
            Any kind of immediate operand, unless it matches the S0
            constraint.
  
!      'T'
            Memory location with B base register, but not using a long
            offset.
  
!      'W'
            A memory operand with an address that cannot be used in an
            unaligned access.
  
!      'Z'
            Register B14 (aka DP).
  
! _Visium--'config/visium/constraints.md'_
!      'b'
!           EAM register 'mdb'
  
!      'c'
!           EAM register 'mdc'
  
!      'f'
            Floating point register
  
!      'k'
            Register for sibcall optimization
  
!      'l'
!           General register, but not 'r29', 'r30' and 'r31'
  
!      't'
!           Register 'r1'
  
!      'u'
!           Register 'r2'
  
!      'v'
!           Register 'r3'
  
!      'G'
            Floating-point constant 0.0
  
!      'J'
            Integer constant in the range 0 ..  65535 (16-bit immediate)
  
!      'K'
            Integer constant in the range 1 ..  31 (5-bit immediate)
  
!      'L'
!           Integer constant in the range -65535 ..  -1 (16-bit negative
            immediate)
  
!      'M'
!           Integer constant -1
  
!      'O'
            Integer constant 0
  
!      'P'
            Integer constant 32
  
! _x86 family--'config/i386/constraints.md'_
!      'R'
            Legacy register--the eight integer registers available on all
!           i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
  
!      'q'
!           Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
!           'c', and 'd'; in 64-bit mode, any integer register.
  
!      'Q'
!           Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
  
!      'l'
            Any register that can be used as the index in a base+index
            memory access: that is, any general register except the stack
            pointer.
  
!      'a'
!           The 'a' register.
  
!      'b'
!           The 'b' register.
  
!      'c'
!           The 'c' register.
  
!      'd'
!           The 'd' register.
  
!      'S'
!           The 'si' register.
  
!      'D'
!           The 'di' register.
  
!      'A'
!           The 'a' and 'd' registers.  This class is used for
!           instructions that return double word results in the 'ax:dx'
            register pair.  Single word values will be allocated either in
!           'ax' or 'dx'.  For example on i386 the following implements
!           'rdtsc':
  
                 unsigned long long rdtsc (void)
                 {
--- 25682,26219 ----
  
            is not.
  
!      ‘es’
            A "stable" memory operand; that is, one which does not include
            any automodification of the base register.  This used to be
!           useful when ‘m’ allowed automodification of the base register,
!           but as those are now only allowed when ‘<’ or ‘>’ is used,
!           ‘es’ is basically the same as ‘m’ without ‘<’ and ‘>’.
  
!      ‘Q’
            A memory operand addressed by just a base register.
  
!      ‘Y’
            A memory operand for a DQ-form instruction.
  
!      ‘Z’
            A memory operand accessed with indexed or indirect addressing.
  
!      ‘R’
            An AIX TOC entry.
  
!      ‘a’
            An indexed or indirect address.
  
!      ‘U’
            A V.4 small data reference.
  
!      ‘W’
            A vector constant that does not require memory.
  
!      ‘j’
            The zero vector constant.
  
! _PRU--‘config/pru/constraints.md’_
!      ‘I’
            An unsigned 8-bit integer constant.
  
!      ‘J’
            An unsigned 16-bit integer constant.
  
!      ‘L’
            An unsigned 5-bit integer constant (for shift counts).
  
!      ‘T’
            A text segment (program memory) constant label.
  
!      ‘Z’
            Integer constant zero.
  
! _RL78--‘config/rl78/constraints.md’_
  
!      ‘Int3’
            An integer constant in the range 1 ... 7.
!      ‘Int8’
            An integer constant in the range 0 ... 255.
!      ‘J’
!           An integer constant in the range −255 ... 0
!      ‘K’
            The integer constant 1.
!      ‘L’
            The integer constant -1.
!      ‘M’
            The integer constant 0.
!      ‘N’
            The integer constant 2.
!      ‘O’
            The integer constant -2.
!      ‘P’
            An integer constant in the range 1 ... 15.
!      ‘Qbi’
            The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
!      ‘Qsc’
            The synthetic compare types-gt, lt, ge, and le.
!      ‘Wab’
            A memory reference with an absolute address.
!      ‘Wbc’
!           A memory reference using ‘BC’ as a base register, with an
            optional offset.
!      ‘Wca’
!           A memory reference using ‘AX’, ‘BC’, ‘DE’, or ‘HL’ for the
            address, for calls.
!      ‘Wcv’
            A memory reference using any 16-bit register pair for the
            address, for calls.
!      ‘Wd2’
!           A memory reference using ‘DE’ as a base register, with an
            optional offset.
!      ‘Wde’
!           A memory reference using ‘DE’ as a base register, without any
            offset.
!      ‘Wfr’
            Any memory reference to an address in the far address space.
!      ‘Wh1’
!           A memory reference using ‘HL’ as a base register, with an
            optional one-byte offset.
!      ‘Whb’
!           A memory reference using ‘HL’ as a base register, with ‘B’ or
!           ‘C’ as the index register.
!      ‘Whl’
!           A memory reference using ‘HL’ as a base register, without any
            offset.
!      ‘Ws1’
!           A memory reference using ‘SP’ as a base register, with an
            optional one-byte offset.
!      ‘Y’
            Any memory reference to an address in the near address space.
!      ‘A’
!           The ‘AX’ register.
!      ‘B’
!           The ‘BC’ register.
!      ‘D’
!           The ‘DE’ register.
!      ‘R’
!           ‘A’ through ‘L’ registers.
!      ‘S’
!           The ‘SP’ register.
!      ‘T’
!           The ‘HL’ register.
!      ‘Z08W’
!           The 16-bit ‘R8’ register.
!      ‘Z10W’
!           The 16-bit ‘R10’ register.
!      ‘Zint’
!           The registers reserved for interrupts (‘R24’ to ‘R31’).
!      ‘a’
!           The ‘A’ register.
!      ‘b’
!           The ‘B’ register.
!      ‘c’
!           The ‘C’ register.
!      ‘d’
!           The ‘D’ register.
!      ‘e’
!           The ‘E’ register.
!      ‘h’
!           The ‘H’ register.
!      ‘l’
!           The ‘L’ register.
!      ‘v’
            The virtual registers.
!      ‘w’
!           The ‘PSW’ register.
!      ‘x’
!           The ‘X’ register.
  
! _RISC-V--‘config/riscv/constraints.md’_
  
!      ‘f’
            A floating-point register (if available).
  
!      ‘I’
            An I-type 12-bit signed immediate.
  
!      ‘J’
            Integer zero.
  
!      ‘K’
            A 5-bit unsigned immediate for CSR access instructions.
  
!      ‘A’
            An address that is held in a general-purpose register.
  
!      ‘S’
            A constraint that matches an absolute symbolic address.
  
!      ‘vr’
            A vector register (if available)..
  
!      ‘vd’
            A vector register, excluding v0 (if available).
  
!      ‘vm’
            A vector register, only v0 (if available).
  
! _RX--‘config/rx/constraints.md’_
!      ‘Q’
            An address which does not involve register indirect addressing
            or pre/post increment/decrement addressing.
  
!      ‘Symbol’
            A symbol reference.
  
!      ‘Int08’
!           A constant in the range −256 to 255, inclusive.
  
!      ‘Sint08’
!           A constant in the range −128 to 127, inclusive.
  
!      ‘Sint16’
!           A constant in the range −32768 to 32767, inclusive.
  
!      ‘Sint24’
!           A constant in the range −8388608 to 8388607, inclusive.
  
!      ‘Uint04’
            A constant in the range 0 to 15, inclusive.
  
! _S/390 and zSeries--‘config/s390/s390.h’_
!      ‘a’
            Address register (general purpose register except r0)
  
!      ‘c’
            Condition code register
  
!      ‘d’
            Data register (arbitrary general purpose register)
  
!      ‘f’
            Floating-point register
  
!      ‘I’
            Unsigned 8-bit constant (0-255)
  
!      ‘J’
            Unsigned 12-bit constant (0-4095)
  
!      ‘K’
!           Signed 16-bit constant (−32768-32767)
  
!      ‘L’
            Value appropriate as displacement.
!           ‘(0..4095)’
                 for short displacement
!           ‘(−524288..524287)’
                 for long displacement
  
!      ‘M’
            Constant integer with a value of 0x7fffffff.
  
!      ‘N’
            Multiple letter constraint followed by 4 parameter letters.
!           ‘0..9:’
                 number of the part counting from most to least
                 significant
!           ‘H,Q:’
                 mode of the part
!           ‘D,S,H:’
                 mode of the containing operand
!           ‘0,F:’
                 value of the other parts (F--all bits set)
            The constraint matches if the specified part of a constant has
            a value different from its other parts.
  
!      ‘Q’
            Memory reference without index register and with short
            displacement.
  
!      ‘R’
            Memory reference with index register and short displacement.
  
!      ‘S’
            Memory reference without index register but with long
            displacement.
  
!      ‘T’
            Memory reference with index register and long displacement.
  
!      ‘U’
            Pointer with short displacement.
  
!      ‘W’
            Pointer with long displacement.
  
!      ‘Y’
            Shift count operand.
  
! _SPARC--‘config/sparc/sparc.h’_
!      ‘f’
            Floating-point register on the SPARC-V8 architecture and lower
            floating-point register on the SPARC-V9 architecture.
  
!      ‘e’
!           Floating-point register.  It is equivalent to ‘f’ on the
            SPARC-V8 architecture and contains both lower and upper
            floating-point registers on the SPARC-V9 architecture.
  
!      ‘c’
            Floating-point condition code register.
  
!      ‘d’
            Lower floating-point register.  It is only valid on the
            SPARC-V9 architecture when the Visual Instruction Set is
            available.
  
!      ‘b’
            Floating-point register.  It is only valid on the SPARC-V9
            architecture when the Visual Instruction Set is available.
  
!      ‘h’
            64-bit global or out register for the SPARC-V8+ architecture.
  
!      ‘C’
            The constant all-ones, for floating-point.
  
!      ‘A’
            Signed 5-bit constant
  
!      ‘D’
            A vector constant
  
!      ‘I’
            Signed 13-bit constant
  
!      ‘J’
            Zero
  
!      ‘K’
            32-bit constant with the low 12 bits clear (a constant that
!           can be loaded with the ‘sethi’ instruction)
  
!      ‘L’
!           A constant in the range supported by ‘movcc’ instructions
            (11-bit signed immediate)
  
!      ‘M’
!           A constant in the range supported by ‘movrcc’ instructions
            (10-bit signed immediate)
  
!      ‘N’
!           Same as ‘K’, except that it verifies that bits that are not in
            the lower 32-bit range are all zero.  Must be used instead of
!           ‘K’ for modes wider than ‘SImode’
  
!      ‘O’
            The constant 4096
  
!      ‘G’
            Floating-point zero
  
!      ‘H’
            Signed 13-bit constant, sign-extended to 32 or 64 bits
  
!      ‘P’
            The constant -1
  
!      ‘Q’
            Floating-point constant whose integral representation can be
            moved into an integer register using a single sethi
            instruction
  
!      ‘R’
            Floating-point constant whose integral representation can be
            moved into an integer register using a single mov instruction
  
!      ‘S’
            Floating-point constant whose integral representation can be
            moved into an integer register using a high/lo_sum instruction
            sequence
  
!      ‘T’
            Memory address aligned to an 8-byte boundary
  
!      ‘U’
            Even register
  
!      ‘W’
!           Memory address for ‘e’ constraint registers
  
!      ‘w’
            Memory address with only a base register
  
!      ‘Y’
            Vector zero
  
! _TI C6X family--‘config/c6x/constraints.md’_
!      ‘a’
            Register file A (A0-A31).
  
!      ‘b’
            Register file B (B0-B31).
  
!      ‘A’
            Predicate registers in register file A (A0-A2 on C64X and
            higher, A1 and A2 otherwise).
  
!      ‘B’
            Predicate registers in register file B (B0-B2).
  
!      ‘C’
            A call-used register in register file B (B0-B9, B16-B31).
  
!      ‘Da’
            Register file A, excluding predicate registers (A3-A31, plus
            A0 if not C64X or higher).
  
!      ‘Db’
            Register file B, excluding predicate registers (B3-B31).
  
!      ‘Iu4’
            Integer constant in the range 0 ... 15.
  
!      ‘Iu5’
            Integer constant in the range 0 ... 31.
  
!      ‘In5’
!           Integer constant in the range −31 ... 0.
  
!      ‘Is5’
!           Integer constant in the range −16 ... 15.
  
!      ‘I5x’
            Integer constant that can be the operand of an ADDA or a SUBA
            insn.
  
!      ‘IuB’
            Integer constant in the range 0 ... 65535.
  
!      ‘IsB’
!           Integer constant in the range −32768 ... 32767.
  
!      ‘IsC’
            Integer constant in the range -2^{20} ... 2^{20} - 1.
  
!      ‘Jc’
            Integer constant that is a valid mask for the clr instruction.
  
!      ‘Js’
            Integer constant that is a valid mask for the set instruction.
  
!      ‘Q’
            Memory location with A base register.
  
!      ‘R’
            Memory location with B base register.
  
!      ‘S0’
            On C64x+ targets, a GP-relative small data reference.
  
!      ‘S1’
!           Any kind of ‘SYMBOL_REF’, for use in a call address.
  
!      ‘Si’
            Any kind of immediate operand, unless it matches the S0
            constraint.
  
!      ‘T’
            Memory location with B base register, but not using a long
            offset.
  
!      ‘W’
            A memory operand with an address that cannot be used in an
            unaligned access.
  
!      ‘Z’
            Register B14 (aka DP).
  
! _Visium--‘config/visium/constraints.md’_
!      ‘b’
!           EAM register ‘mdb’
  
!      ‘c’
!           EAM register ‘mdc’
  
!      ‘f’
            Floating point register
  
!      ‘k’
            Register for sibcall optimization
  
!      ‘l’
!           General register, but not ‘r29’, ‘r30’ and ‘r31’
  
!      ‘t’
!           Register ‘r1’
  
!      ‘u’
!           Register ‘r2’
  
!      ‘v’
!           Register ‘r3’
  
!      ‘G’
            Floating-point constant 0.0
  
!      ‘J’
            Integer constant in the range 0 ..  65535 (16-bit immediate)
  
!      ‘K’
            Integer constant in the range 1 ..  31 (5-bit immediate)
  
!      ‘L’
!           Integer constant in the range −65535 ..  −1 (16-bit negative
            immediate)
  
!      ‘M’
!           Integer constant −1
  
!      ‘O’
            Integer constant 0
  
!      ‘P’
            Integer constant 32
  
! _x86 family--‘config/i386/constraints.md’_
!      ‘R’
            Legacy register--the eight integer registers available on all
!           i386 processors (‘a’, ‘b’, ‘c’, ‘d’, ‘si’, ‘di’, ‘bp’, ‘sp’).
  
!      ‘q’
!           Any register accessible as ‘Rl’.  In 32-bit mode, ‘a’, ‘b’,
!           ‘c’, and ‘d’; in 64-bit mode, any integer register.
  
!      ‘Q’
!           Any register accessible as ‘Rh’: ‘a’, ‘b’, ‘c’, and ‘d’.
  
!      ‘l’
            Any register that can be used as the index in a base+index
            memory access: that is, any general register except the stack
            pointer.
  
!      ‘a’
!           The ‘a’ register.
  
!      ‘b’
!           The ‘b’ register.
  
!      ‘c’
!           The ‘c’ register.
  
!      ‘d’
!           The ‘d’ register.
  
!      ‘S’
!           The ‘si’ register.
  
!      ‘D’
!           The ‘di’ register.
  
!      ‘A’
!           The ‘a’ and ‘d’ registers.  This class is used for
!           instructions that return double word results in the ‘ax:dx’
            register pair.  Single word values will be allocated either in
!           ‘ax’ or ‘dx’.  For example on i386 the following implements
!           ‘rdtsc’:
  
                 unsigned long long rdtsc (void)
                 {
*************** _x86 family--'config/i386/constraints.md
*** 26222,26228 ****
                 }
  
            This is not correct on x86-64 as it would allocate tick in
!           either 'ax' or 'dx'.  You have to use the following variant
            instead:
  
                 unsigned long long rdtsc (void)
--- 26223,26229 ----
                 }
  
            This is not correct on x86-64 as it would allocate tick in
!           either ‘ax’ or ‘dx’.  You have to use the following variant
            instead:
  
                 unsigned long long rdtsc (void)
*************** _x86 family--'config/i386/constraints.md
*** 26232,26545 ****
                   return ((unsigned long long)tickh << 32)|tickl;
                 }
  
!      'U'
            The call-clobbered integer registers.
  
!      'f'
            Any 80387 floating-point (stack) register.
  
!      't'
!           Top of 80387 floating-point stack ('%st(0)').
  
!      'u'
!           Second from top of 80387 floating-point stack ('%st(1)').
  
!      'Yk'
            Any mask register that can be used as a predicate, i.e.
!           'k1-k7'.
  
!      'k'
            Any mask register.
  
!      'y'
            Any MMX register.
  
!      'x'
            Any SSE register.
  
!      'v'
!           Any EVEX encodable SSE register ('%xmm0-%xmm31').
  
!      'w'
            Any bound register.
  
!      'Yz'
!           First SSE register ('%xmm0').
  
!      'Yi'
            Any SSE register, when SSE2 and inter-unit moves are enabled.
  
!      'Yj'
            Any SSE register, when SSE2 and inter-unit moves from vector
            registers are enabled.
  
!      'Ym'
            Any MMX register, when inter-unit moves are enabled.
  
!      'Yn'
            Any MMX register, when inter-unit moves from vector registers
            are enabled.
  
!      'Yp'
!           Any integer register when 'TARGET_PARTIAL_REG_STALL' is
            disabled.
  
!      'Ya'
!           Any integer register when zero extensions with 'AND' are
            disabled.
  
!      'Yb'
            Any register that can be used as the GOT base when calling
!           '___tls_get_addr': that is, any general register except 'a'
!           and 'sp' registers, for '-fno-plt' if linker supports it.
!           Otherwise, 'b' register.
  
!      'Yf'
            Any x87 register when 80387 floating-point arithmetic is
            enabled.
  
!      'Yr'
            Lower SSE register when avoiding REX prefix and all SSE
            registers otherwise.
  
!      'Yv'
            For AVX512VL, any EVEX-encodable SSE register
!           ('%xmm0-%xmm31'), otherwise any SSE register.
  
!      'Yh'
            Any EVEX-encodable SSE register, that has number factor of
            four.
  
!      'Bf'
            Flags register operand.
  
!      'Bg'
            GOT memory operand.
  
!      'Bm'
            Vector memory operand.
  
!      'Bc'
            Constant memory operand.
  
!      'Bn'
            Memory operand without REX prefix.
  
!      'Bs'
            Sibcall memory operand.
  
!      'Bw'
            Call memory operand.
  
!      'Bz'
            Constant call address operand.
  
!      'BC'
            SSE constant -1 operand.
  
!      'I'
            Integer constant in the range 0 ... 31, for 32-bit shifts.
  
!      'J'
            Integer constant in the range 0 ... 63, for 64-bit shifts.
  
!      'K'
            Signed 8-bit integer constant.
  
!      'L'
!           '0xFF' or '0xFFFF', for andsi as a zero-extending move.
  
!      'M'
!           0, 1, 2, or 3 (shifts for the 'lea' instruction).
  
!      'N'
!           Unsigned 8-bit integer constant (for 'in' and 'out'
            instructions).
  
!      'O'
            Integer constant in the range 0 ... 127, for 128-bit shifts.
  
!      'G'
            Standard 80387 floating point constant.
  
!      'C'
            SSE constant zero operand.
  
!      'e'
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for immediate operands in sign-extending
            x86-64 instructions).
  
!      'We'
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for sign-extending conversion operations
!           that require non-'VOIDmode' immediate operands).
  
!      'Wz'
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for zero-extending conversion
!           operations that require non-'VOIDmode' immediate operands).
  
!      'Wd'
            128-bit integer constant where both the high and low 64-bit
!           word satisfy the 'e' constraint.
  
!      'Ws'
!           A symbolic reference or label reference.  You can use the '%p'
            modifier to print the raw symbol.
  
!      'Z'
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for immediate operands in
            zero-extending x86-64 instructions).
  
!      'Tv'
            VSIB address operand.
  
!      'Ts'
            Address operand without segment register.
  
! _Xstormy16--'config/stormy16/stormy16.h'_
!      'a'
            Register r0.
  
!      'b'
            Register r1.
  
!      'c'
            Register r2.
  
!      'd'
            Register r8.
  
!      'e'
            Registers r0 through r7.
  
!      't'
            Registers r0 and r1.
  
!      'y'
            The carry register.
  
!      'z'
            Registers r8 and r9.
  
!      'I'
            A constant between 0 and 3 inclusive.
  
!      'J'
            A constant that has exactly one bit set.
  
!      'K'
            A constant that has exactly one bit clear.
  
!      'L'
            A constant between 0 and 255 inclusive.
  
!      'M'
!           A constant between -255 and 0 inclusive.
  
!      'N'
!           A constant between -3 and 0 inclusive.
  
!      'O'
            A constant between 1 and 4 inclusive.
  
!      'P'
!           A constant between -4 and -1 inclusive.
  
!      'Q'
            A memory reference that is a stack push.
  
!      'R'
            A memory reference that is a stack pop.
  
!      'S'
            A memory reference that refers to a constant address of known
            value.
  
!      'T'
            The register indicated by Rx (not implemented yet).
  
!      'U'
            A constant that is not between 2 and 15 inclusive.
  
!      'Z'
            The constant 0.
  
! _Xtensa--'config/xtensa/constraints.md'_
!      'a'
            General-purpose 32-bit register
  
!      'b'
            One-bit boolean register
  
!      'A'
            MAC16 40-bit accumulator register
  
!      'I'
            Signed 12-bit integer constant, for use in MOVI instructions
  
!      'J'
            Signed 8-bit integer constant, for use in ADDI instructions
  
!      'K'
            Integer constant valid for BccI instructions
  
!      'L'
            Unsigned constant valid for BccUI instructions
  
  
  File: gccint.info,  Node: Disable Insn Alternatives,  Next: Define Constraints,  Prev: Machine Constraints,  Up: Constraints
  
! 17.9.6 Disable insn alternatives using the 'enabled' attribute
  --------------------------------------------------------------
  
  There are three insn attributes that may be used to selectively disable
  instruction alternatives:
  
! 'enabled'
       Says whether an alternative is available on the current subtarget.
  
! 'preferred_for_size'
       Says whether an enabled alternative should be used in code that is
       optimized for size.
  
! 'preferred_for_speed'
       Says whether an enabled alternative should be used in code that is
       optimized for speed.
  
!  All these attributes should use '(const_int 1)' to allow an alternative
! or '(const_int 0)' to disallow it.  The attributes must be a static
  property of the subtarget; they cannot for example depend on the current
  operands, on the current optimization level, on the location of the insn
  within the body of a loop, on whether register allocation has finished,
  or on the current compiler pass.
  
!  The 'enabled' attribute is a correctness property.  It tells GCC to act
  as though the disabled alternatives were never defined in the first
  place.  This is useful when adding new instructions to an existing
  pattern in cases where the new instructions are only available for
! certain cpu architecture levels (typically mapped to the '-march='
  command-line option).
  
!  In contrast, the 'preferred_for_size' and 'preferred_for_speed'
  attributes are strong optimization hints rather than correctness
! properties.  'preferred_for_size' tells GCC which alternatives to
  consider when adding or modifying an instruction that GCC wants to
! optimize for size.  'preferred_for_speed' does the same thing for speed.
  Note that things like code motion can lead to cases where code optimized
  for size uses alternatives that are not preferred for size, and
  similarly for speed.
  
!  Although 'define_insn's can in principle specify the 'enabled'
  attribute directly, it is often clearer to have subsiduary attributes
! for each architectural feature of interest.  The 'define_insn's can then
  use these subsiduary attributes to say which alternatives require which
! features.  The example below does this for 'cpu_facility'.
  
   E.g.  the following two patterns could easily be merged using the
! 'enabled' attribute:
  
  
       (define_insn "*movdi_old"
--- 26233,26546 ----
                   return ((unsigned long long)tickh << 32)|tickl;
                 }
  
!      ‘U’
            The call-clobbered integer registers.
  
!      ‘f’
            Any 80387 floating-point (stack) register.
  
!      ‘t’
!           Top of 80387 floating-point stack (‘%st(0)’).
  
!      ‘u’
!           Second from top of 80387 floating-point stack (‘%st(1)’).
  
!      ‘Yk’
            Any mask register that can be used as a predicate, i.e.
!           ‘k1-k7’.
  
!      ‘k’
            Any mask register.
  
!      ‘y’
            Any MMX register.
  
!      ‘x’
            Any SSE register.
  
!      ‘v’
!           Any EVEX encodable SSE register (‘%xmm0-%xmm31’).
  
!      ‘w’
            Any bound register.
  
!      ‘Yz’
!           First SSE register (‘%xmm0’).
  
!      ‘Yi’
            Any SSE register, when SSE2 and inter-unit moves are enabled.
  
!      ‘Yj’
            Any SSE register, when SSE2 and inter-unit moves from vector
            registers are enabled.
  
!      ‘Ym’
            Any MMX register, when inter-unit moves are enabled.
  
!      ‘Yn’
            Any MMX register, when inter-unit moves from vector registers
            are enabled.
  
!      ‘Yp’
!           Any integer register when ‘TARGET_PARTIAL_REG_STALL’ is
            disabled.
  
!      ‘Ya’
!           Any integer register when zero extensions with ‘AND’ are
            disabled.
  
!      ‘Yb’
            Any register that can be used as the GOT base when calling
!           ‘___tls_get_addr’: that is, any general register except ‘a’
!           and ‘sp’ registers, for ‘-fno-plt’ if linker supports it.
!           Otherwise, ‘b’ register.
  
!      ‘Yf’
            Any x87 register when 80387 floating-point arithmetic is
            enabled.
  
!      ‘Yr’
            Lower SSE register when avoiding REX prefix and all SSE
            registers otherwise.
  
!      ‘Yv’
            For AVX512VL, any EVEX-encodable SSE register
!           (‘%xmm0-%xmm31’), otherwise any SSE register.
  
!      ‘Yh’
            Any EVEX-encodable SSE register, that has number factor of
            four.
  
!      ‘Bf’
            Flags register operand.
  
!      ‘Bg’
            GOT memory operand.
  
!      ‘Bm’
            Vector memory operand.
  
!      ‘Bc’
            Constant memory operand.
  
!      ‘Bn’
            Memory operand without REX prefix.
  
!      ‘Bs’
            Sibcall memory operand.
  
!      ‘Bw’
            Call memory operand.
  
!      ‘Bz’
            Constant call address operand.
  
!      ‘BC’
            SSE constant -1 operand.
  
!      ‘I’
            Integer constant in the range 0 ... 31, for 32-bit shifts.
  
!      ‘J’
            Integer constant in the range 0 ... 63, for 64-bit shifts.
  
!      ‘K’
            Signed 8-bit integer constant.
  
!      ‘L’
!           ‘0xFF’ or ‘0xFFFF’, for andsi as a zero-extending move.
  
!      ‘M’
!           0, 1, 2, or 3 (shifts for the ‘lea’ instruction).
  
!      ‘N’
!           Unsigned 8-bit integer constant (for ‘in’ and ‘out’
            instructions).
  
!      ‘O’
            Integer constant in the range 0 ... 127, for 128-bit shifts.
  
!      ‘G’
            Standard 80387 floating point constant.
  
!      ‘C’
            SSE constant zero operand.
  
!      ‘e’
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for immediate operands in sign-extending
            x86-64 instructions).
  
!      ‘We’
            32-bit signed integer constant, or a symbolic reference known
            to fit that range (for sign-extending conversion operations
!           that require non-‘VOIDmode’ immediate operands).
  
!      ‘Wz’
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for zero-extending conversion
!           operations that require non-‘VOIDmode’ immediate operands).
  
!      ‘Wd’
            128-bit integer constant where both the high and low 64-bit
!           word satisfy the ‘e’ constraint.
  
!      ‘Ws’
!           A symbolic reference or label reference.  You can use the ‘%p’
            modifier to print the raw symbol.
  
!      ‘Z’
            32-bit unsigned integer constant, or a symbolic reference
            known to fit that range (for immediate operands in
            zero-extending x86-64 instructions).
  
!      ‘Tv’
            VSIB address operand.
  
!      ‘Ts’
            Address operand without segment register.
  
! _Xstormy16--‘config/stormy16/stormy16.h’_
!      ‘a’
            Register r0.
  
!      ‘b’
            Register r1.
  
!      ‘c’
            Register r2.
  
!      ‘d’
            Register r8.
  
!      ‘e’
            Registers r0 through r7.
  
!      ‘t’
            Registers r0 and r1.
  
!      ‘y’
            The carry register.
  
!      ‘z’
            Registers r8 and r9.
  
!      ‘I’
            A constant between 0 and 3 inclusive.
  
!      ‘J’
            A constant that has exactly one bit set.
  
!      ‘K’
            A constant that has exactly one bit clear.
  
!      ‘L’
            A constant between 0 and 255 inclusive.
  
!      ‘M’
!           A constant between −255 and 0 inclusive.
  
!      ‘N’
!           A constant between −3 and 0 inclusive.
  
!      ‘O’
            A constant between 1 and 4 inclusive.
  
!      ‘P’
!           A constant between −4 and −1 inclusive.
  
!      ‘Q’
            A memory reference that is a stack push.
  
!      ‘R’
            A memory reference that is a stack pop.
  
!      ‘S’
            A memory reference that refers to a constant address of known
            value.
  
!      ‘T’
            The register indicated by Rx (not implemented yet).
  
!      ‘U’
            A constant that is not between 2 and 15 inclusive.
  
!      ‘Z’
            The constant 0.
  
! _Xtensa--‘config/xtensa/constraints.md’_
!      ‘a’
            General-purpose 32-bit register
  
!      ‘b’
            One-bit boolean register
  
!      ‘A’
            MAC16 40-bit accumulator register
  
!      ‘I’
            Signed 12-bit integer constant, for use in MOVI instructions
  
!      ‘J’
            Signed 8-bit integer constant, for use in ADDI instructions
  
!      ‘K’
            Integer constant valid for BccI instructions
  
!      ‘L’
            Unsigned constant valid for BccUI instructions
  
  
  File: gccint.info,  Node: Disable Insn Alternatives,  Next: Define Constraints,  Prev: Machine Constraints,  Up: Constraints
  
! 17.9.6 Disable insn alternatives using the ‘enabled’ attribute
  --------------------------------------------------------------
  
  There are three insn attributes that may be used to selectively disable
  instruction alternatives:
  
! ‘enabled’
       Says whether an alternative is available on the current subtarget.
  
! ‘preferred_for_size’
       Says whether an enabled alternative should be used in code that is
       optimized for size.
  
! ‘preferred_for_speed’
       Says whether an enabled alternative should be used in code that is
       optimized for speed.
  
!  All these attributes should use ‘(const_int 1)’ to allow an alternative
! or ‘(const_int 0)’ to disallow it.  The attributes must be a static
  property of the subtarget; they cannot for example depend on the current
  operands, on the current optimization level, on the location of the insn
  within the body of a loop, on whether register allocation has finished,
  or on the current compiler pass.
  
!  The ‘enabled’ attribute is a correctness property.  It tells GCC to act
  as though the disabled alternatives were never defined in the first
  place.  This is useful when adding new instructions to an existing
  pattern in cases where the new instructions are only available for
! certain cpu architecture levels (typically mapped to the ‘-march=’
  command-line option).
  
!  In contrast, the ‘preferred_for_size’ and ‘preferred_for_speed’
  attributes are strong optimization hints rather than correctness
! properties.  ‘preferred_for_size’ tells GCC which alternatives to
  consider when adding or modifying an instruction that GCC wants to
! optimize for size.  ‘preferred_for_speed’ does the same thing for speed.
  Note that things like code motion can lead to cases where code optimized
  for size uses alternatives that are not preferred for size, and
  similarly for speed.
  
!  Although ‘define_insn’s can in principle specify the ‘enabled’
  attribute directly, it is often clearer to have subsiduary attributes
! for each architectural feature of interest.  The ‘define_insn’s can then
  use these subsiduary attributes to say which alternatives require which
! features.  The example below does this for ‘cpu_facility’.
  
   E.g.  the following two patterns could easily be merged using the
! ‘enabled’ attribute:
  
  
       (define_insn "*movdi_old"
*************** features.  The example below does this f
*** 26572,26578 ****
         [(set_attr "cpu_facility" "*,new,new")])
  
  
!  with the 'enabled' attribute defined like this:
  
  
       (define_attr "cpu_facility" "standard,new" (const_string "standard"))
--- 26573,26579 ----
         [(set_attr "cpu_facility" "*,new,new")])
  
  
!  with the ‘enabled’ attribute defined like this:
  
  
       (define_attr "cpu_facility" "standard,new" (const_string "standard"))
*************** File: gccint.info,  Node: Define Constra
*** 26594,26611 ****
  Machine-specific constraints fall into two categories: register and
  non-register constraints.  Within the latter category, constraints which
  allow subsets of all possible memory or address operands should be
! specially marked, to give 'reload' more information.
  
   Machine-specific constraints can be given names of arbitrary length,
  but they must be entirely composed of letters, digits, underscores
! ('_'), and angle brackets ('< >').  Like C identifiers, they must begin
  with a letter or underscore.
  
   In order to avoid ambiguity in operand constraint strings, no
  constraint can have a name that begins with any other constraint's name.
! For example, if 'x' is defined as a constraint name, 'xy' may not be,
  and vice versa.  As a consequence of this rule, no constraint may begin
! with one of the generic constraint letters: 'E F V X g i m n o p r s'.
  
   Register constraints correspond directly to register classes.  *Note
  Register Classes::.  There is thus not much flexibility in their
--- 26595,26612 ----
  Machine-specific constraints fall into two categories: register and
  non-register constraints.  Within the latter category, constraints which
  allow subsets of all possible memory or address operands should be
! specially marked, to give ‘reload’ more information.
  
   Machine-specific constraints can be given names of arbitrary length,
  but they must be entirely composed of letters, digits, underscores
! (‘_’), and angle brackets (‘< >’).  Like C identifiers, they must begin
  with a letter or underscore.
  
   In order to avoid ambiguity in operand constraint strings, no
  constraint can have a name that begins with any other constraint's name.
! For example, if ‘x’ is defined as a constraint name, ‘xy’ may not be,
  and vice versa.  As a consequence of this rule, no constraint may begin
! with one of the generic constraint letters: ‘E F V X g i m n o p r s’.
  
   Register constraints correspond directly to register classes.  *Note
  Register Classes::.  There is thus not much flexibility in their
*************** definitions.
*** 26614,26647 ****
   -- MD Expression: define_register_constraint name regclass docstring
            [filter]
       All arguments are string constants.  NAME is the name of the
!      constraint, as it will appear in 'match_operand' expressions.  If
       NAME is a multi-letter constraint its length shall be the same for
       all constraints starting with the same letter.  REGCLASS can be
       either the name of the corresponding register class (*note Register
       Classes::), or a C expression which evaluates to the appropriate
       register class.  If it is an expression, it must have no side
       effects, and it cannot look at the operand.  The usual use of
!      expressions is to map some register constraints to 'NO_REGS' when
       the register class is not available on a given subarchitecture.
  
       If an operand occupies multiple hard registers, the constraint
       requires all of those registers to belong to REGCLASS.  For
!      example, if REGCLASS is 'GENERAL_REGS' and 'GENERAL_REGS' contains
!      registers 'r0' to 'r15', the constraint does not allow R15 to be
       used for modes that occupy more than one register.
  
       The choice of register is also constrained by
!      'TARGET_HARD_REGNO_MODE_OK'.  For example, if
!      'TARGET_HARD_REGNO_MODE_OK' disallows '(reg:DI r1)', that
!      requirement applies to all constraints whose classes include 'r1'.
  
       However, it is sometimes useful to impose extra operand-specific
       requirements on the register number.  For example, a target might
!      not want to prevent _all_ odd-even pairs from holding 'DImode'
       values, but it might still need to prevent specific operands from
       having an odd-numbered register.  The optional FILTER argument
       exists for such cases.  When given, FILTER is a C++ expression that
!      evaluates to true if 'regno' is a valid register for the operand.
       If an operand occupies multiple registers, the condition applies
       only to the first register.
  
--- 26615,26648 ----
   -- MD Expression: define_register_constraint name regclass docstring
            [filter]
       All arguments are string constants.  NAME is the name of the
!      constraint, as it will appear in ‘match_operand’ expressions.  If
       NAME is a multi-letter constraint its length shall be the same for
       all constraints starting with the same letter.  REGCLASS can be
       either the name of the corresponding register class (*note Register
       Classes::), or a C expression which evaluates to the appropriate
       register class.  If it is an expression, it must have no side
       effects, and it cannot look at the operand.  The usual use of
!      expressions is to map some register constraints to ‘NO_REGS’ when
       the register class is not available on a given subarchitecture.
  
       If an operand occupies multiple hard registers, the constraint
       requires all of those registers to belong to REGCLASS.  For
!      example, if REGCLASS is ‘GENERAL_REGS’ and ‘GENERAL_REGS’ contains
!      registers ‘r0’ to ‘r15’, the constraint does not allow R15 to be
       used for modes that occupy more than one register.
  
       The choice of register is also constrained by
!      ‘TARGET_HARD_REGNO_MODE_OK’.  For example, if
!      ‘TARGET_HARD_REGNO_MODE_OK’ disallows ‘(reg:DI r1)’, that
!      requirement applies to all constraints whose classes include ‘r1’.
  
       However, it is sometimes useful to impose extra operand-specific
       requirements on the register number.  For example, a target might
!      not want to prevent _all_ odd-even pairs from holding ‘DImode’
       values, but it might still need to prevent specific operands from
       having an odd-numbered register.  The optional FILTER argument
       exists for such cases.  When given, FILTER is a C++ expression that
!      evaluates to true if ‘regno’ is a valid register for the operand.
       If an operand occupies multiple registers, the condition applies
       only to the first register.
  
*************** definitions.
*** 26653,26659 ****
       register.
  
       Filter conditions that impose an alignment are encouraged to test
!      the alignment of 'regno' itself, as in the example, rather than
       calculate an offset relative to the start of the class.  If it is
       sometimes necessary for a register of class C to be aligned to N,
       the first register in C should itself by divisible by N.
--- 26654,26660 ----
       register.
  
       Filter conditions that impose an alignment are encouraged to test
!      the alignment of ‘regno’ itself, as in the example, rather than
       calculate an offset relative to the start of the class.  If it is
       sometimes necessary for a register of class C to be aligned to N,
       the first register in C should itself by divisible by N.
*************** constraint matches.
*** 26667,26673 ****
  
   -- MD Expression: define_constraint name docstring exp
       The NAME and DOCSTRING arguments are the same as for
!      'define_register_constraint', but note that the docstring comes
       immediately after the name for these expressions.  EXP is an RTL
       expression, obeying the same rules as the RTL expressions in
       predicate definitions.  *Note Defining Predicates::, for details.
--- 26668,26674 ----
  
   -- MD Expression: define_constraint name docstring exp
       The NAME and DOCSTRING arguments are the same as for
!      ‘define_register_constraint’, but note that the docstring comes
       immediately after the name for these expressions.  EXP is an RTL
       expression, obeying the same rules as the RTL expressions in
       predicate definitions.  *Note Defining Predicates::, for details.
*************** constraint matches.
*** 26675,26804 ****
       false, it doesn't.  Constraint expressions should indicate which
       RTL codes they might match, just like predicate expressions.
  
!      'match_test' C expressions have access to the following variables:
  
       OP
            The RTL object defining the operand.
       MODE
            The machine mode of OP.
       IVAL
!           'INTVAL (OP)', if OP is a 'const_int'.
       HVAL
!           'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'.
       LVAL
!           'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'.
       RVAL
!           'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
!           'const_double'.
  
       The *VAL variables should only be used once another piece of the
       expression has verified that OP is the appropriate kind of RTL
       object.
  
   Most non-register constraints should be defined with
! 'define_constraint'.  The remaining two definition expressions are only
! appropriate for constraints that should be handled specially by 'reload'
  if they fail to match.
  
   -- MD Expression: define_memory_constraint name docstring exp
       Use this expression for constraints that match a subset of all
!      memory operands: that is, 'reload' can make them match by
!      converting the operand to the form '(mem (reg X))', where X is a
       base register (from the register class specified by
!      'BASE_REG_CLASS', *note Register Classes::).
  
       For example, on the S/390, some instructions do not accept
       arbitrary memory references, but only those that do not make use of
!      an index register.  The constraint letter 'Q' is defined to
!      represent a memory address of this type.  If 'Q' is defined with
!      'define_memory_constraint', a 'Q' constraint can handle any memory
!      operand, because 'reload' knows it can simply copy the memory
       address into a base register if required.  This is analogous to the
!      way an 'o' constraint can handle any memory operand.
  
       The syntax and semantics are otherwise identical to
!      'define_constraint'.
  
   -- MD Expression: define_special_memory_constraint name docstring exp
       Use this expression for constraints that match a subset of all
!      memory operands: that is, 'reload' cannot make them match by
       reloading the address as it is described for
!      'define_memory_constraint' or such address reload is undesirable
       with the performance point of view.
  
!      For example, 'define_special_memory_constraint' can be useful if
       specifically aligned memory is necessary or desirable for some insn
       operand.
  
       The syntax and semantics are otherwise identical to
!      'define_memory_constraint'.
  
   -- MD Expression: define_relaxed_memory_constraint name docstring exp
!      The test expression in a 'define_memory_constraint' can assume that
!      'TARGET_LEGITIMATE_ADDRESS_P' holds for the address inside a 'mem'
       rtx and so it does not need to test this condition itself.  In
!      other words, a 'define_memory_constraint' test of the form:
  
            (match_test "mem")
  
!      is enough to test whether an rtx is a 'mem' _and_ whether its
!      address satisfies 'TARGET_MEM_CONSTRAINT' (which is usually ''m'').
!      Thus the conditions imposed by a 'define_memory_constraint' always
!      apply on top of the conditions imposed by 'TARGET_MEM_CONSTRAINT'.
  
       However, it is sometimes useful to define memory constraints that
       allow addresses beyond those accepted by
!      'TARGET_LEGITIMATE_ADDRESS_P'.  'define_relaxed_memory_constraint'
       exists for this case.  The test expression in a
!      'define_relaxed_memory_constraint' is applied with no
       preconditions, so that the expression can determine "from scratch"
       exactly which addresses are valid and which are not.
  
       The syntax and semantics are otherwise identical to
!      'define_memory_constraint'.
  
   -- MD Expression: define_address_constraint name docstring exp
       Use this expression for constraints that match a subset of all
!      address operands: that is, 'reload' can make the constraint match
!      by converting the operand to the form '(reg X)', again with X a
       base register.
  
!      Constraints defined with 'define_address_constraint' can only be
!      used with the 'address_operand' predicate, or machine-specific
       predicates that work the same way.  They are treated analogously to
!      the generic 'p' constraint.
  
       The syntax and semantics are otherwise identical to
!      'define_constraint'.
  
!  For historical reasons, names beginning with the letters 'G H' are
! reserved for constraints that match only 'const_double's, and names
! beginning with the letters 'I J K L M N O P' are reserved for
! constraints that match only 'const_int's.  This may change in the
  future.  For the time being, constraints with these names must be
! written in a stylized form, so that 'genpreds' can tell you did it
  correctly:
  
       (define_constraint "[GHIJKLMNOP]..."
         "DOC..."
!        (and (match_code "const_int")  ; 'const_double' for G/H
!             CONDITION...))            ; usually a 'match_test'
  
   It is fine to use names beginning with other letters for constraints
! that match 'const_double's or 'const_int's.
  
   Each docstring in a constraint definition should be one or more
  complete sentences, marked up in Texinfo format.  _They are currently
  unused._  In the future they will be copied into the GCC manual, in
  *note Machine Constraints::, replacing the hand-maintained tables
  currently found in that section.  Also, in the future the compiler may
! use this to give more helpful diagnostics when poor choice of 'asm'
  constraints causes a reload failure.
  
!  If you put the pseudo-Texinfo directive '@internal' at the beginning of
  a docstring, then (in the future) it will appear only in the internals
  manual's version of the machine-specific constraint tables.  Use this
! for constraints that should not appear in 'asm' statements.
  
  
  File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
--- 26676,26805 ----
       false, it doesn't.  Constraint expressions should indicate which
       RTL codes they might match, just like predicate expressions.
  
!      ‘match_test’ C expressions have access to the following variables:
  
       OP
            The RTL object defining the operand.
       MODE
            The machine mode of OP.
       IVAL
!           ‘INTVAL (OP)’, if OP is a ‘const_int’.
       HVAL
!           ‘CONST_DOUBLE_HIGH (OP)’, if OP is an integer ‘const_double’.
       LVAL
!           ‘CONST_DOUBLE_LOW (OP)’, if OP is an integer ‘const_double’.
       RVAL
!           ‘CONST_DOUBLE_REAL_VALUE (OP)’, if OP is a floating-point
!           ‘const_double’.
  
       The *VAL variables should only be used once another piece of the
       expression has verified that OP is the appropriate kind of RTL
       object.
  
   Most non-register constraints should be defined with
! ‘define_constraint’.  The remaining two definition expressions are only
! appropriate for constraints that should be handled specially by ‘reload’
  if they fail to match.
  
   -- MD Expression: define_memory_constraint name docstring exp
       Use this expression for constraints that match a subset of all
!      memory operands: that is, ‘reload’ can make them match by
!      converting the operand to the form ‘(mem (reg X))’, where X is a
       base register (from the register class specified by
!      ‘BASE_REG_CLASS’, *note Register Classes::).
  
       For example, on the S/390, some instructions do not accept
       arbitrary memory references, but only those that do not make use of
!      an index register.  The constraint letter ‘Q’ is defined to
!      represent a memory address of this type.  If ‘Q’ is defined with
!      ‘define_memory_constraint’, a ‘Q’ constraint can handle any memory
!      operand, because ‘reload’ knows it can simply copy the memory
       address into a base register if required.  This is analogous to the
!      way an ‘o’ constraint can handle any memory operand.
  
       The syntax and semantics are otherwise identical to
!      ‘define_constraint’.
  
   -- MD Expression: define_special_memory_constraint name docstring exp
       Use this expression for constraints that match a subset of all
!      memory operands: that is, ‘reload’ cannot make them match by
       reloading the address as it is described for
!      ‘define_memory_constraint’ or such address reload is undesirable
       with the performance point of view.
  
!      For example, ‘define_special_memory_constraint’ can be useful if
       specifically aligned memory is necessary or desirable for some insn
       operand.
  
       The syntax and semantics are otherwise identical to
!      ‘define_memory_constraint’.
  
   -- MD Expression: define_relaxed_memory_constraint name docstring exp
!      The test expression in a ‘define_memory_constraint’ can assume that
!      ‘TARGET_LEGITIMATE_ADDRESS_P’ holds for the address inside a ‘mem’
       rtx and so it does not need to test this condition itself.  In
!      other words, a ‘define_memory_constraint’ test of the form:
  
            (match_test "mem")
  
!      is enough to test whether an rtx is a ‘mem’ _and_ whether its
!      address satisfies ‘TARGET_MEM_CONSTRAINT’ (which is usually ‘'m'’).
!      Thus the conditions imposed by a ‘define_memory_constraint’ always
!      apply on top of the conditions imposed by ‘TARGET_MEM_CONSTRAINT’.
  
       However, it is sometimes useful to define memory constraints that
       allow addresses beyond those accepted by
!      ‘TARGET_LEGITIMATE_ADDRESS_P’.  ‘define_relaxed_memory_constraint’
       exists for this case.  The test expression in a
!      ‘define_relaxed_memory_constraint’ is applied with no
       preconditions, so that the expression can determine "from scratch"
       exactly which addresses are valid and which are not.
  
       The syntax and semantics are otherwise identical to
!      ‘define_memory_constraint’.
  
   -- MD Expression: define_address_constraint name docstring exp
       Use this expression for constraints that match a subset of all
!      address operands: that is, ‘reload’ can make the constraint match
!      by converting the operand to the form ‘(reg X)’, again with X a
       base register.
  
!      Constraints defined with ‘define_address_constraint’ can only be
!      used with the ‘address_operand’ predicate, or machine-specific
       predicates that work the same way.  They are treated analogously to
!      the generic ‘p’ constraint.
  
       The syntax and semantics are otherwise identical to
!      ‘define_constraint’.
  
!  For historical reasons, names beginning with the letters ‘G H’ are
! reserved for constraints that match only ‘const_double’s, and names
! beginning with the letters ‘I J K L M N O P’ are reserved for
! constraints that match only ‘const_int’s.  This may change in the
  future.  For the time being, constraints with these names must be
! written in a stylized form, so that ‘genpreds’ can tell you did it
  correctly:
  
       (define_constraint "[GHIJKLMNOP]..."
         "DOC..."
!        (and (match_code "const_int")  ; ‘const_double’ for G/H
!             CONDITION...))            ; usually a ‘match_test’
  
   It is fine to use names beginning with other letters for constraints
! that match ‘const_double’s or ‘const_int’s.
  
   Each docstring in a constraint definition should be one or more
  complete sentences, marked up in Texinfo format.  _They are currently
  unused._  In the future they will be copied into the GCC manual, in
  *note Machine Constraints::, replacing the hand-maintained tables
  currently found in that section.  Also, in the future the compiler may
! use this to give more helpful diagnostics when poor choice of ‘asm’
  constraints causes a reload failure.
  
!  If you put the pseudo-Texinfo directive ‘@internal’ at the beginning of
  a docstring, then (in the future) it will appear only in the internals
  manual's version of the machine-specific constraint tables.  Use this
! for constraints that should not appear in ‘asm’ statements.
  
  
  File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
*************** File: gccint.info,  Node: C Constraint I
*** 26807,26822 ****
  ---------------------------------
  
  It is occasionally useful to test a constraint from C code rather than
! implicitly via the constraint string in a 'match_operand'.  The
! generated file 'tm_p.h' declares a few interfaces for working with
  constraints.  At present these are defined for all constraints except
! 'g' (which is equivalent to 'general_operand').
  
   Some valid constraint names are not valid C identifiers, so there is a
  mangling scheme for referring to them from C.  Constraint names that do
  not contain angle brackets or underscores are left unchanged.
! Underscores are doubled, each '<' is replaced with '_l', and each '>'
! with '_g'.  Here are some examples:
  
       *Original* *Mangled*
       x          x
--- 26808,26823 ----
  ---------------------------------
  
  It is occasionally useful to test a constraint from C code rather than
! implicitly via the constraint string in a ‘match_operand’.  The
! generated file ‘tm_p.h’ declares a few interfaces for working with
  constraints.  At present these are defined for all constraints except
! ‘g’ (which is equivalent to ‘general_operand’).
  
   Some valid constraint names are not valid C identifiers, so there is a
  mangling scheme for referring to them from C.  Constraint names that do
  not contain angle brackets or underscores are left unchanged.
! Underscores are doubled, each ‘<’ is replaced with ‘_l’, and each ‘>’
! with ‘_g’.  Here are some examples:
  
       *Original* *Mangled*
       x          x
*************** with '_g'.  Here are some examples:
*** 26827,26864 ****
       P4_g>      P4__g_g
  
   Throughout this section, the variable C is either a constraint in the
! abstract sense, or a constant from 'enum constraint_num'; the variable M
  is a mangled constraint name (usually as part of a larger identifier).
  
   -- Enum: constraint_num
!      For each constraint except 'g', there is a corresponding
!      enumeration constant: 'CONSTRAINT_' plus the mangled name of the
!      constraint.  Functions that take an 'enum constraint_num' as an
       argument expect one of these constants.
  
   -- Function: inline bool satisfies_constraint_M (rtx EXP)
!      For each non-register constraint M except 'g', there is one of
!      these functions; it returns 'true' if EXP satisfies the constraint.
!      These functions are only visible if 'rtl.h' was included before
!      'tm_p.h'.
  
   -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
            C)
!      Like the 'satisfies_constraint_M' functions, but the constraint to
       test is given as an argument, C.  If C specifies a register
!      constraint, this function will always return 'false'.
  
   -- Function: enum reg_class reg_class_for_constraint (enum
            constraint_num C)
       Returns the register class associated with C.  If C is not a
       register constraint, or those registers are not available for the
!      currently selected subtarget, returns 'NO_REGS'.
  
!  Here is an example use of 'satisfies_constraint_M'.  In peephole
  optimizations (*note Peephole Definitions::), operand constraint strings
  are ignored, so if there are relevant constraints, they must be tested
  in the C condition.  In the example, the optimization is applied if
! operand 2 does _not_ satisfy the 'K' constraint.  (This is a simplified
  version of a peephole definition from the i386 machine description.)
  
       (define_peephole2
--- 26828,26865 ----
       P4_g>      P4__g_g
  
   Throughout this section, the variable C is either a constraint in the
! abstract sense, or a constant from ‘enum constraint_num’; the variable M
  is a mangled constraint name (usually as part of a larger identifier).
  
   -- Enum: constraint_num
!      For each constraint except ‘g’, there is a corresponding
!      enumeration constant: ‘CONSTRAINT_’ plus the mangled name of the
!      constraint.  Functions that take an ‘enum constraint_num’ as an
       argument expect one of these constants.
  
   -- Function: inline bool satisfies_constraint_M (rtx EXP)
!      For each non-register constraint M except ‘g’, there is one of
!      these functions; it returns ‘true’ if EXP satisfies the constraint.
!      These functions are only visible if ‘rtl.h’ was included before
!      ‘tm_p.h’.
  
   -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
            C)
!      Like the ‘satisfies_constraint_M’ functions, but the constraint to
       test is given as an argument, C.  If C specifies a register
!      constraint, this function will always return ‘false’.
  
   -- Function: enum reg_class reg_class_for_constraint (enum
            constraint_num C)
       Returns the register class associated with C.  If C is not a
       register constraint, or those registers are not available for the
!      currently selected subtarget, returns ‘NO_REGS’.
  
!  Here is an example use of ‘satisfies_constraint_M’.  In peephole
  optimizations (*note Peephole Definitions::), operand constraint strings
  are ignored, so if there are relevant constraints, they must be tested
  in the C condition.  In the example, the optimization is applied if
! operand 2 does _not_ satisfy the ‘K’ constraint.  (This is a simplified
  version of a peephole definition from the i386 machine description.)
  
       (define_peephole2
*************** generation pass of the compiler.  Giving
*** 26885,26907 ****
  instruction pattern tells the RTL generation pass that it can use the
  pattern to accomplish a certain task.
  
! 'movM'
       Here M stands for a two-letter machine mode name, in lowercase.
       This instruction pattern moves data with that machine mode from
!      operand 1 to operand 0.  For example, 'movsi' moves full-word data.
  
!      If operand 0 is a 'subreg' with mode M of a register whose own mode
       is wider than M, the effect of this instruction is to store the
       specified value in the part of the register that corresponds to
       mode M.  Bits outside of M, but which are within the same target
!      word as the 'subreg' are undefined.  Bits which are outside the
       target word are left unchanged.
  
       This class of patterns is special in several ways.  First of all,
       each of these names up to and including full word size _must_ be
       defined, because there is no other way to copy a datum from one
       place to another.  If there are patterns accepting operands in
!      larger modes, 'movM' must be defined for integer modes of those
       sizes.
  
       Second, these patterns are not used solely in the RTL generation
--- 26886,26908 ----
  instruction pattern tells the RTL generation pass that it can use the
  pattern to accomplish a certain task.
  
! ‘movM’
       Here M stands for a two-letter machine mode name, in lowercase.
       This instruction pattern moves data with that machine mode from
!      operand 1 to operand 0.  For example, ‘movsi’ moves full-word data.
  
!      If operand 0 is a ‘subreg’ with mode M of a register whose own mode
       is wider than M, the effect of this instruction is to store the
       specified value in the part of the register that corresponds to
       mode M.  Bits outside of M, but which are within the same target
!      word as the ‘subreg’ are undefined.  Bits which are outside the
       target word are left unchanged.
  
       This class of patterns is special in several ways.  First of all,
       each of these names up to and including full word size _must_ be
       defined, because there is no other way to copy a datum from one
       place to another.  If there are patterns accepting operands in
!      larger modes, ‘movM’ must be defined for integer modes of those
       sizes.
  
       Second, these patterns are not used solely in the RTL generation
*************** pattern to accomplish a certain task.
*** 26913,26920 ****
       Therefore, when given such a pair of operands, the pattern must
       generate RTL which needs no reloading and needs no temporary
       registers--no registers other than the operands.  For example, if
!      you support the pattern with a 'define_expand', then in such a case
!      the 'define_expand' mustn't call 'force_reg' or any other such
       function which might generate new pseudo registers.
  
       This requirement exists even for subword modes on a RISC machine
--- 26914,26921 ----
       Therefore, when given such a pair of operands, the pattern must
       generate RTL which needs no reloading and needs no temporary
       registers--no registers other than the operands.  For example, if
!      you support the pattern with a ‘define_expand’, then in such a case
!      the ‘define_expand’ mustn't call ‘force_reg’ or any other such
       function which might generate new pseudo registers.
  
       This requirement exists even for subword modes on a RISC machine
*************** pattern to accomplish a certain task.
*** 26927,26937 ****
       be done with the address except to use it as it stands.  If it is
       copied, it will not be replaced with a valid address.  No attempt
       should be made to make such an address into a valid address and no
!      routine (such as 'change_address') that will do so may be called.
!      Note that 'general_operand' will fail when applied to such an
       address.
  
!      The global variable 'reload_in_progress' (which must be explicitly
       declared if required) can be used to determine whether such special
       handling is required.
  
--- 26928,26938 ----
       be done with the address except to use it as it stands.  If it is
       copied, it will not be replaced with a valid address.  No attempt
       should be made to make such an address into a valid address and no
!      routine (such as ‘change_address’) that will do so may be called.
!      Note that ‘general_operand’ will fail when applied to such an
       address.
  
!      The global variable ‘reload_in_progress’ (which must be explicitly
       declared if required) can be used to determine whether such special
       handling is required.
  
*************** pattern to accomplish a certain task.
*** 26942,27005 ****
       reloads.
  
       If a scratch register is required to move an object to or from
!      memory, it can be allocated using 'gen_reg_rtx' prior to life
       analysis.
  
       If there are cases which need scratch registers during or after
       reload, you must provide an appropriate secondary_reload target
       hook.
  
!      The macro 'can_create_pseudo_p' can be used to determine if it is
       unsafe to create new pseudo registers.  If this variable is
!      nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new
       pseudo.
  
!      The constraints on a 'movM' must permit moving any hard register to
!      any other hard register provided that 'TARGET_HARD_REGNO_MODE_OK'
!      permits mode M in both registers and 'TARGET_REGISTER_MOVE_COST'
       applied to their classes returns a value of 2.
  
!      It is obligatory to support floating point 'movM' instructions into
       and out of any registers that can hold fixed point values, because
!      unions and structures (which have modes 'SImode' or 'DImode') can
       be in those registers and they may have floating point members.
  
!      There may also be a need to support fixed point 'movM' instructions
       in and out of floating point registers.  Unfortunately, I have
       forgotten why this was so, and I don't know whether it is still
!      true.  If 'TARGET_HARD_REGNO_MODE_OK' rejects fixed point values in
       floating point registers, then the constraints of the fixed point
!      'movM' instructions must be designed to avoid ever trying to reload
       into a floating point register.
  
! 'reload_inM'
! 'reload_outM'
       These named patterns have been obsoleted by the target hook
!      'secondary_reload'.
  
!      Like 'movM', but used when a scratch register is required to move
       between operand 0 and operand 1.  Operand 2 describes the scratch
!      register.  See the discussion of the 'SECONDARY_RELOAD_CLASS' macro
       in *note Register Classes::.
  
!      There are special restrictions on the form of the 'match_operand's
       used in these patterns.  First, only the predicate for the reload
!      operand is examined, i.e., 'reload_in' examines operand 1, but not
       the predicates for operand 0 or 2.  Second, there may be only one
       alternative in the constraints.  Third, only a single register
       class letter may be used for the constraint; subsequent constraint
       letters are ignored.  As a special exception, an empty constraint
!      string matches the 'ALL_REGS' register class.  This may relieve
!      ports of the burden of defining an 'ALL_REGS' constraint letter
       just for these patterns.
  
! 'movstrictM'
!      Like 'movM' except that if operand 0 is a 'subreg' with mode M of a
!      register whose natural mode is wider, the 'movstrictM' instruction
       is guaranteed not to alter any of the register except the part
       which belongs to mode M.
  
! 'movmisalignM'
       This variant of a move pattern is designed to load or store a value
       from a memory address that is not naturally aligned for its mode.
       For a store, the memory will be in operand 0; for a load, the
--- 26943,27006 ----
       reloads.
  
       If a scratch register is required to move an object to or from
!      memory, it can be allocated using ‘gen_reg_rtx’ prior to life
       analysis.
  
       If there are cases which need scratch registers during or after
       reload, you must provide an appropriate secondary_reload target
       hook.
  
!      The macro ‘can_create_pseudo_p’ can be used to determine if it is
       unsafe to create new pseudo registers.  If this variable is
!      nonzero, then it is unsafe to call ‘gen_reg_rtx’ to allocate a new
       pseudo.
  
!      The constraints on a ‘movM’ must permit moving any hard register to
!      any other hard register provided that ‘TARGET_HARD_REGNO_MODE_OK’
!      permits mode M in both registers and ‘TARGET_REGISTER_MOVE_COST’
       applied to their classes returns a value of 2.
  
!      It is obligatory to support floating point ‘movM’ instructions into
       and out of any registers that can hold fixed point values, because
!      unions and structures (which have modes ‘SImode’ or ‘DImode’) can
       be in those registers and they may have floating point members.
  
!      There may also be a need to support fixed point ‘movM’ instructions
       in and out of floating point registers.  Unfortunately, I have
       forgotten why this was so, and I don't know whether it is still
!      true.  If ‘TARGET_HARD_REGNO_MODE_OK’ rejects fixed point values in
       floating point registers, then the constraints of the fixed point
!      ‘movM’ instructions must be designed to avoid ever trying to reload
       into a floating point register.
  
! ‘reload_inM’
! ‘reload_outM’
       These named patterns have been obsoleted by the target hook
!      ‘secondary_reload’.
  
!      Like ‘movM’, but used when a scratch register is required to move
       between operand 0 and operand 1.  Operand 2 describes the scratch
!      register.  See the discussion of the ‘SECONDARY_RELOAD_CLASS’ macro
       in *note Register Classes::.
  
!      There are special restrictions on the form of the ‘match_operand’s
       used in these patterns.  First, only the predicate for the reload
!      operand is examined, i.e., ‘reload_in’ examines operand 1, but not
       the predicates for operand 0 or 2.  Second, there may be only one
       alternative in the constraints.  Third, only a single register
       class letter may be used for the constraint; subsequent constraint
       letters are ignored.  As a special exception, an empty constraint
!      string matches the ‘ALL_REGS’ register class.  This may relieve
!      ports of the burden of defining an ‘ALL_REGS’ constraint letter
       just for these patterns.
  
! ‘movstrictM’
!      Like ‘movM’ except that if operand 0 is a ‘subreg’ with mode M of a
!      register whose natural mode is wider, the ‘movstrictM’ instruction
       is guaranteed not to alter any of the register except the part
       which belongs to mode M.
  
! ‘movmisalignM’
       This variant of a move pattern is designed to load or store a value
       from a memory address that is not naturally aligned for its mode.
       For a store, the memory will be in operand 0; for a load, the
*************** pattern to accomplish a certain task.
*** 27008,27016 ****
       store.
  
       This pattern is used by the autovectorizer, and when expanding a
!      'MISALIGNED_INDIRECT_REF' expression.
  
! 'load_multiple'
       Load several consecutive memory locations into consecutive
       registers.  Operand 0 is the first of the consecutive registers,
       operand 1 is the first memory location, and operand 2 is a
--- 27009,27017 ----
       store.
  
       This pattern is used by the autovectorizer, and when expanding a
!      ‘MISALIGNED_INDIRECT_REF’ expression.
  
! ‘load_multiple’
       Load several consecutive memory locations into consecutive
       registers.  Operand 0 is the first of the consecutive registers,
       operand 1 is the first memory location, and operand 2 is a
*************** pattern to accomplish a certain task.
*** 27024,27045 ****
       On some machines, there are restrictions as to which consecutive
       registers can be stored into memory, such as particular starting or
       ending register numbers or only a range of valid counts.  For those
!      machines, use a 'define_expand' (*note Expander Definitions::) and
       make the pattern fail if the restrictions are not met.
  
!      Write the generated insn as a 'parallel' with elements being a
!      'set' of one register from the appropriate memory location (you may
!      also need 'use' or 'clobber' elements).  Use a 'match_parallel'
!      (*note RTL Template::) to recognize the insn.  See 'rs6000.md' for
       examples of the use of this insn pattern.
  
! 'store_multiple'
!      Similar to 'load_multiple', but store several consecutive registers
       into consecutive memory locations.  Operand 0 is the first of the
       consecutive memory locations, operand 1 is the first register, and
       operand 2 is a constant: the number of consecutive registers.
  
! 'vec_load_lanesMN'
       Perform an interleaved load of several vectors from memory operand
       1 into register operand 0.  Both operands have mode M.  The
       register operand is viewed as holding consecutive vectors of mode
--- 27025,27046 ----
       On some machines, there are restrictions as to which consecutive
       registers can be stored into memory, such as particular starting or
       ending register numbers or only a range of valid counts.  For those
!      machines, use a ‘define_expand’ (*note Expander Definitions::) and
       make the pattern fail if the restrictions are not met.
  
!      Write the generated insn as a ‘parallel’ with elements being a
!      ‘set’ of one register from the appropriate memory location (you may
!      also need ‘use’ or ‘clobber’ elements).  Use a ‘match_parallel’
!      (*note RTL Template::) to recognize the insn.  See ‘rs6000.md’ for
       examples of the use of this insn pattern.
  
! ‘store_multiple’
!      Similar to ‘load_multiple’, but store several consecutive registers
       into consecutive memory locations.  Operand 0 is the first of the
       consecutive memory locations, operand 1 is the first register, and
       operand 2 is a constant: the number of consecutive registers.
  
! ‘vec_load_lanesMN’
       Perform an interleaved load of several vectors from memory operand
       1 into register operand 0.  Both operands have mode M.  The
       register operand is viewed as holding consecutive vectors of mode
*************** pattern to accomplish a certain task.
*** 27051,27059 ****
              for (i = 0; i < c; i++)
                operand0[i][j] = operand1[j * c + i];
  
!      For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from
!      memory into a register of mode 'TI'.  The register contains two
!      consecutive vectors of mode 'V4HI'.
  
       This pattern can only be used if:
            TARGET_ARRAY_MODE_SUPPORTED_P (N, C)
--- 27052,27060 ----
              for (i = 0; i < c; i++)
                operand0[i][j] = operand1[j * c + i];
  
!      For example, ‘vec_load_lanestiv4hi’ loads 8 16-bit values from
!      memory into a register of mode ‘TI’.  The register contains two
!      consecutive vectors of mode ‘V4HI’.
  
       This pattern can only be used if:
            TARGET_ARRAY_MODE_SUPPORTED_P (N, C)
*************** pattern to accomplish a certain task.
*** 27061,27070 ****
       instruction for some mode N, it also supports unaligned loads for
       vectors of mode N.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_mask_load_lanesMN'
!      Like 'vec_load_lanesMN', but takes an additional mask operand
       (operand 2) that specifies which elements of the destination
       vectors should be loaded.  Other elements of the destination
       vectors are set to zero.  The operation is equivalent to:
--- 27062,27071 ----
       instruction for some mode N, it also supports unaligned loads for
       vectors of mode N.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_mask_load_lanesMN’
!      Like ‘vec_load_lanesMN’, but takes an additional mask operand
       (operand 2) that specifies which elements of the destination
       vectors should be loaded.  Other elements of the destination
       vectors are set to zero.  The operation is equivalent to:
*************** pattern to accomplish a certain task.
*** 27078,27087 ****
                for (i = 0; i < c; i++)
                  operand0[i][j] = 0;
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_mask_len_load_lanesMN'
!      Like 'vec_load_lanesMN', but takes an additional mask operand
       (operand 2), length operand (operand 3) as well as bias operand
       (operand 4) that specifies which elements of the destination
       vectors should be loaded.  Other elements of the destination
--- 27079,27088 ----
                for (i = 0; i < c; i++)
                  operand0[i][j] = 0;
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_mask_len_load_lanesMN’
!      Like ‘vec_load_lanesMN’, but takes an additional mask operand
       (operand 2), length operand (operand 3) as well as bias operand
       (operand 4) that specifies which elements of the destination
       vectors should be loaded.  Other elements of the destination
*************** pattern to accomplish a certain task.
*** 27093,27102 ****
                for (i = 0; i < c; i++)
                  operand0[i][j] = operand1[j * c + i];
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_store_lanesMN'
!      Equivalent to 'vec_load_lanesMN', with the memory and register
       operands reversed.  That is, the instruction is equivalent to:
  
            int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
--- 27094,27103 ----
                for (i = 0; i < c; i++)
                  operand0[i][j] = operand1[j * c + i];
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_store_lanesMN’
!      Equivalent to ‘vec_load_lanesMN’, with the memory and register
       operands reversed.  That is, the instruction is equivalent to:
  
            int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
*************** pattern to accomplish a certain task.
*** 27106,27115 ****
  
       for a memory operand 0 and register operand 1.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_mask_store_lanesMN'
!      Like 'vec_store_lanesMN', but takes an additional mask operand
       (operand 2) that specifies which elements of the source vectors
       should be stored.  The operation is equivalent to:
  
--- 27107,27116 ----
  
       for a memory operand 0 and register operand 1.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_mask_store_lanesMN’
!      Like ‘vec_store_lanesMN’, but takes an additional mask operand
       (operand 2) that specifies which elements of the source vectors
       should be stored.  The operation is equivalent to:
  
*************** pattern to accomplish a certain task.
*** 27119,27128 ****
                for (i = 0; i < c; i++)
                  operand0[j * c + i] = operand1[i][j];
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_mask_len_store_lanesMN'
!      Like 'vec_store_lanesMN', but takes an additional mask operand
       (operand 2), length operand (operand 3) as well as bias operand
       (operand 4) that specifies which elements of the source vectors
       should be stored.  The operation is equivalent to:
--- 27120,27129 ----
                for (i = 0; i < c; i++)
                  operand0[j * c + i] = operand1[i][j];
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_mask_len_store_lanesMN’
!      Like ‘vec_store_lanesMN’, but takes an additional mask operand
       (operand 2), length operand (operand 3) as well as bias operand
       (operand 4) that specifies which elements of the source vectors
       should be stored.  The operation is equivalent to:
*************** pattern to accomplish a certain task.
*** 27133,27165 ****
                for (i = 0; i < c; i++)
                  operand0[j * c + i] = operand1[i][j];
  
!      This pattern is not allowed to 'FAIL'.
  
! 'gather_loadMN'
       Load several separate memory locations into a vector of mode M.
       Operand 1 is a scalar base address and operand 2 is a vector of
       mode N containing offsets from that base.  Operand 0 is a
       destination vector with the same number of elements as N.  For each
       element index I:
  
!         * extend the offset element I to address width, using zero
            extension if operand 3 is 1 and sign extension if operand 3 is
            zero;
!         * multiply the extended offset by operand 4;
!         * add the result to the base; and
!         * load the value at that address into element I of operand 0.
  
       The value of operand 3 does not matter if the offsets are already
       address width.
  
! 'mask_gather_loadMN'
!      Like 'gather_loadMN', but takes an extra mask operand as operand 5.
       Bit I of the mask is set if element I of the result should be
       loaded from memory and clear if element I of the result should be
       set to zero.
  
! 'mask_len_gather_loadMN'
!      Like 'gather_loadMN', but takes an extra mask operand (operand 5),
       a len operand (operand 6) as well as a bias operand (operand 7).
       Similar to mask_len_load, the instruction loads at most (operand 6
       + operand 7) elements from memory.  Bit I of the mask is set if
--- 27134,27166 ----
                for (i = 0; i < c; i++)
                  operand0[j * c + i] = operand1[i][j];
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘gather_loadMN’
       Load several separate memory locations into a vector of mode M.
       Operand 1 is a scalar base address and operand 2 is a vector of
       mode N containing offsets from that base.  Operand 0 is a
       destination vector with the same number of elements as N.  For each
       element index I:
  
!         • extend the offset element I to address width, using zero
            extension if operand 3 is 1 and sign extension if operand 3 is
            zero;
!         • multiply the extended offset by operand 4;
!         • add the result to the base; and
!         • load the value at that address into element I of operand 0.
  
       The value of operand 3 does not matter if the offsets are already
       address width.
  
! ‘mask_gather_loadMN’
!      Like ‘gather_loadMN’, but takes an extra mask operand as operand 5.
       Bit I of the mask is set if element I of the result should be
       loaded from memory and clear if element I of the result should be
       set to zero.
  
! ‘mask_len_gather_loadMN’
!      Like ‘gather_loadMN’, but takes an extra mask operand (operand 5),
       a len operand (operand 6) as well as a bias operand (operand 7).
       Similar to mask_len_load, the instruction loads at most (operand 6
       + operand 7) elements from memory.  Bit I of the mask is set if
*************** pattern to accomplish a certain task.
*** 27167,27210 ****
       element I of the result should be undefined.  Mask elements I with
       I > (operand 6 + operand 7) are ignored.
  
! 'scatter_storeMN'
       Store a vector of mode M into several distinct memory locations.
       Operand 0 is a scalar base address and operand 1 is a vector of
       mode N containing offsets from that base.  Operand 4 is the vector
       of values that should be stored, which has the same number of
       elements as N.  For each element index I:
  
!         * extend the offset element I to address width, using zero
            extension if operand 2 is 1 and sign extension if operand 2 is
            zero;
!         * multiply the extended offset by operand 3;
!         * add the result to the base; and
!         * store element I of operand 4 to that address.
  
       The value of operand 2 does not matter if the offsets are already
       address width.
  
! 'mask_scatter_storeMN'
!      Like 'scatter_storeMN', but takes an extra mask operand as operand
       5.  Bit I of the mask is set if element I of the result should be
       stored to memory.
  
! 'mask_len_scatter_storeMN'
!      Like 'scatter_storeMN', but takes an extra mask operand (operand
       5), a len operand (operand 6) as well as a bias operand (operand
       7).  The instruction stores at most (operand 6 + operand 7)
       elements of (operand 4) to memory.  Bit I of the mask is set if
       element I of (operand 4) should be stored.  Mask elements I with I
       > (operand 6 + operand 7) are ignored.
  
! 'vec_setM'
       Set given field in the vector value.  Operand 0 is the vector to
       modify, operand 1 is new value of field and operand 2 specify the
       field index.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_extractMN'
       Extract given field from the vector value.  Operand 1 is the
       vector, operand 2 specify field index and operand 0 place to store
       value into.  The N mode is the mode of the field or vector of
--- 27168,27211 ----
       element I of the result should be undefined.  Mask elements I with
       I > (operand 6 + operand 7) are ignored.
  
! ‘scatter_storeMN’
       Store a vector of mode M into several distinct memory locations.
       Operand 0 is a scalar base address and operand 1 is a vector of
       mode N containing offsets from that base.  Operand 4 is the vector
       of values that should be stored, which has the same number of
       elements as N.  For each element index I:
  
!         • extend the offset element I to address width, using zero
            extension if operand 2 is 1 and sign extension if operand 2 is
            zero;
!         • multiply the extended offset by operand 3;
!         • add the result to the base; and
!         • store element I of operand 4 to that address.
  
       The value of operand 2 does not matter if the offsets are already
       address width.
  
! ‘mask_scatter_storeMN’
!      Like ‘scatter_storeMN’, but takes an extra mask operand as operand
       5.  Bit I of the mask is set if element I of the result should be
       stored to memory.
  
! ‘mask_len_scatter_storeMN’
!      Like ‘scatter_storeMN’, but takes an extra mask operand (operand
       5), a len operand (operand 6) as well as a bias operand (operand
       7).  The instruction stores at most (operand 6 + operand 7)
       elements of (operand 4) to memory.  Bit I of the mask is set if
       element I of (operand 4) should be stored.  Mask elements I with I
       > (operand 6 + operand 7) are ignored.
  
! ‘vec_setM’
       Set given field in the vector value.  Operand 0 is the vector to
       modify, operand 1 is new value of field and operand 2 specify the
       field index.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_extractMN’
       Extract given field from the vector value.  Operand 1 is the
       vector, operand 2 specify field index and operand 0 place to store
       value into.  The N mode is the mode of the field or vector of
*************** pattern to accomplish a certain task.
*** 27213,27238 ****
       smaller number of elements.  If N is a vector mode the index is
       counted in multiples of mode N.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_initMN'
       Initialize the vector to given values.  Operand 0 is the vector to
       initialize and operand 1 is parallel containing values for
       individual fields.  The N mode is the mode of the elements, should
       be either element mode of the vector mode M, or a vector mode with
       the same element mode and smaller number of elements.
  
! 'vec_duplicateM'
       Initialize vector output operand 0 so that each element has the
       value given by scalar input operand 1.  The vector has mode M and
       the scalar has the mode appropriate for one element of M.
  
       This pattern only handles duplicates of non-constant inputs.
!      Constant vectors go through the 'movM' pattern instead.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_seriesM'
       Initialize vector output operand 0 so that element I is equal to
       operand 1 plus I times operand 2.  In other words, create a linear
       series whose base value is operand 1 and whose step is operand 2.
--- 27214,27239 ----
       smaller number of elements.  If N is a vector mode the index is
       counted in multiples of mode N.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_initMN’
       Initialize the vector to given values.  Operand 0 is the vector to
       initialize and operand 1 is parallel containing values for
       individual fields.  The N mode is the mode of the elements, should
       be either element mode of the vector mode M, or a vector mode with
       the same element mode and smaller number of elements.
  
! ‘vec_duplicateM’
       Initialize vector output operand 0 so that each element has the
       value given by scalar input operand 1.  The vector has mode M and
       the scalar has the mode appropriate for one element of M.
  
       This pattern only handles duplicates of non-constant inputs.
!      Constant vectors go through the ‘movM’ pattern instead.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_seriesM’
       Initialize vector output operand 0 so that element I is equal to
       operand 1 plus I times operand 2.  In other words, create a linear
       series whose base value is operand 1 and whose step is operand 2.
*************** pattern to accomplish a certain task.
*** 27242,27255 ****
       floating-point vectors, in order to avoid having to specify the
       rounding behavior for I > 1.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'while_ultMN'
       Set operand 0 to a mask that is true while incrementing operand 1
       gives a value that is less than operand 2, for a vector length up
       to operand 3.  Operand 0 has mode N and operands 1 and 2 are scalar
       integers of mode M.  Operand 3 should be omitted when N is a vector
!      mode, and a 'CONST_INT' otherwise.  The operation for vector modes
       is equivalent to:
  
            operand0[0] = operand1 < operand2;
--- 27243,27256 ----
       floating-point vectors, in order to avoid having to specify the
       rounding behavior for I > 1.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘while_ultMN’
       Set operand 0 to a mask that is true while incrementing operand 1
       gives a value that is less than operand 2, for a vector length up
       to operand 3.  Operand 0 has mode N and operands 1 and 2 are scalar
       integers of mode M.  Operand 3 should be omitted when N is a vector
!      mode, and a ‘CONST_INT’ otherwise.  The operation for vector modes
       is equivalent to:
  
            operand0[0] = operand1 < operand2;
*************** pattern to accomplish a certain task.
*** 27262,27268 ****
            for (i = 1; i < operand3; i++)
              operand0[i] = operand0[i - 1] && (operand1 + i < operand2);
  
! 'select_vlM'
       Set operand 0 to the number of scalar iterations that should be
       handled by one iteration of a vector loop.  Operand 1 is the total
       number of scalar iterations that the loop needs to process and
--- 27263,27269 ----
            for (i = 1; i < operand3; i++)
              operand0[i] = operand0[i - 1] && (operand1 + i < operand2);
  
! ‘select_vlM’
       Set operand 0 to the number of scalar iterations that should be
       handled by one iteration of a vector loop.  Operand 1 is the total
       number of scalar iterations that the loop needs to process and
*************** pattern to accomplish a certain task.
*** 27278,27290 ****
       Because of this, it is generally not useful to define this
       instruction if it will always calculate the maximum value.
  
!      This optab is only useful on targets that implement 'len_load_M'
!      and/or 'len_store_M'.
  
! 'check_raw_ptrsM'
       Check whether, given two pointers A and B and a length LEN, a write
       of LEN bytes at A followed by a read of LEN bytes at B can be split
!      into interleaved byte accesses 'A[0], B[0], A[1], B[1], ...'
       without affecting the dependencies between the bytes.  Set operand
       0 to true if the split is possible and false otherwise.
  
--- 27279,27291 ----
       Because of this, it is generally not useful to define this
       instruction if it will always calculate the maximum value.
  
!      This optab is only useful on targets that implement ‘len_load_M’
!      and/or ‘len_store_M’.
  
! ‘check_raw_ptrsM’
       Check whether, given two pointers A and B and a length LEN, a write
       of LEN bytes at A followed by a read of LEN bytes at B can be split
!      into interleaved byte accesses ‘A[0], B[0], A[1], B[1], ...’
       without affecting the dependencies between the bytes.  Set operand
       0 to true if the split is possible and false otherwise.
  
*************** pattern to accomplish a certain task.
*** 27300,27329 ****
       accelerating the test without having to do the individual
       comparisons.
  
! 'check_war_ptrsM'
!      Like 'check_raw_ptrsM', but with the read and write swapped round.
       The split is possible in this case if:
  
            B <= A || A + LEN <= B
  
! 'vec_cmpMN'
       Output a vector comparison.  Operand 0 of mode N is the destination
       for predicate in operand 1 which is a signed vector comparison with
       operands of mode M in operands 2 and 3.  Predicate is computed by
       element-wise evaluation of the vector comparison with a truth value
       of all-ones and a false value of all-zeros.
  
! 'vec_cmpuMN'
!      Similar to 'vec_cmpMN' but perform unsigned vector comparison.
  
! 'vec_cmpeqMN'
!      Similar to 'vec_cmpMN' but perform equality or non-equality vector
!      comparison only.  If 'vec_cmpMN' or 'vec_cmpuMN' instruction
!      pattern is supported, it will be preferred over 'vec_cmpeqMN', so
       there is no need to define this instruction pattern if the others
       are supported.
  
! 'vcondMN'
       Output a conditional vector move.  Operand 0 is the destination to
       receive a combination of operand 1 and operand 2, which are of mode
       M, dependent on the outcome of the predicate in operand 3 which is
--- 27301,27330 ----
       accelerating the test without having to do the individual
       comparisons.
  
! ‘check_war_ptrsM’
!      Like ‘check_raw_ptrsM’, but with the read and write swapped round.
       The split is possible in this case if:
  
            B <= A || A + LEN <= B
  
! ‘vec_cmpMN’
       Output a vector comparison.  Operand 0 of mode N is the destination
       for predicate in operand 1 which is a signed vector comparison with
       operands of mode M in operands 2 and 3.  Predicate is computed by
       element-wise evaluation of the vector comparison with a truth value
       of all-ones and a false value of all-zeros.
  
! ‘vec_cmpuMN’
!      Similar to ‘vec_cmpMN’ but perform unsigned vector comparison.
  
! ‘vec_cmpeqMN’
!      Similar to ‘vec_cmpMN’ but perform equality or non-equality vector
!      comparison only.  If ‘vec_cmpMN’ or ‘vec_cmpuMN’ instruction
!      pattern is supported, it will be preferred over ‘vec_cmpeqMN’, so
       there is no need to define this instruction pattern if the others
       are supported.
  
! ‘vcondMN’
       Output a conditional vector move.  Operand 0 is the destination to
       receive a combination of operand 1 and operand 2, which are of mode
       M, dependent on the outcome of the predicate in operand 3 which is
*************** pattern to accomplish a certain task.
*** 27333,27353 ****
       computed by element-wise evaluation of the vector comparison with a
       truth value of all-ones and a false value of all-zeros.
  
! 'vconduMN'
!      Similar to 'vcondMN' but performs unsigned vector comparison.
  
! 'vcondeqMN'
!      Similar to 'vcondMN' but performs equality or non-equality vector
!      comparison only.  If 'vcondMN' or 'vconduMN' instruction pattern is
!      supported, it will be preferred over 'vcondeqMN', so there is no
       need to define this instruction pattern if the others are
       supported.
  
! 'vcond_mask_MN'
!      Similar to 'vcondMN' but operand 3 holds a pre-computed result of
       vector comparison.
  
! 'vcond_mask_MN'
       Set each element of operand 0 to the corresponding element of
       operand 2 or operand 3.  Choose operand 2 if both the element index
       is less than operand 4 plus operand 5 and the corresponding element
--- 27334,27354 ----
       computed by element-wise evaluation of the vector comparison with a
       truth value of all-ones and a false value of all-zeros.
  
! ‘vconduMN’
!      Similar to ‘vcondMN’ but performs unsigned vector comparison.
  
! ‘vcondeqMN’
!      Similar to ‘vcondMN’ but performs equality or non-equality vector
!      comparison only.  If ‘vcondMN’ or ‘vconduMN’ instruction pattern is
!      supported, it will be preferred over ‘vcondeqMN’, so there is no
       need to define this instruction pattern if the others are
       supported.
  
! ‘vcond_mask_MN’
!      Similar to ‘vcondMN’ but operand 3 holds a pre-computed result of
       vector comparison.
  
! ‘vcond_mask_MN’
       Set each element of operand 0 to the corresponding element of
       operand 2 or operand 3.  Choose operand 2 if both the element index
       is less than operand 4 plus operand 5 and the corresponding element
*************** pattern to accomplish a certain task.
*** 27359,27384 ****
       Operands 0, 2 and 3 have mode M.  Operand 1 has mode N.  Operands 4
       and 5 have a target-dependent scalar integer mode.
  
! 'maskloadMN'
       Perform a masked load of vector from memory operand 1 of mode M
       into register operand 0.  Mask is provided in register operand 2 of
       mode N.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'maskstoreMN'
       Perform a masked store of vector from register operand 1 of mode M
       into memory operand 0.  Mask is provided in register operand 2 of
       mode N.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'len_load_M'
       Load (operand 2 + operand 3) elements from memory operand 1 into
       vector register operand 0, setting the other elements of operand 0
       to undefined values.  Operands 0 and 1 have mode M, which must be a
       vector mode.  Operand 2 has whichever integer mode the target
!      prefers.  Operand 3 conceptually has mode 'QI'.
  
       Operand 2 can be a variable or a constant amount.  Operand 3
       specifies a constant bias: it is either a constant 0 or a constant
--- 27360,27385 ----
       Operands 0, 2 and 3 have mode M.  Operand 1 has mode N.  Operands 4
       and 5 have a target-dependent scalar integer mode.
  
! ‘maskloadMN’
       Perform a masked load of vector from memory operand 1 of mode M
       into register operand 0.  Mask is provided in register operand 2 of
       mode N.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘maskstoreMN’
       Perform a masked store of vector from register operand 1 of mode M
       into memory operand 0.  Mask is provided in register operand 2 of
       mode N.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘len_load_M’
       Load (operand 2 + operand 3) elements from memory operand 1 into
       vector register operand 0, setting the other elements of operand 0
       to undefined values.  Operands 0 and 1 have mode M, which must be a
       vector mode.  Operand 2 has whichever integer mode the target
!      prefers.  Operand 3 conceptually has mode ‘QI’.
  
       Operand 2 can be a variable or a constant amount.  Operand 3
       specifies a constant bias: it is either a constant 0 or a constant
*************** pattern to accomplish a certain task.
*** 27391,27406 ****
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      'QI' elements.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'len_store_M'
       Store (operand 2 + operand 3) vector elements from vector register
       operand 1 into memory operand 0, leaving the other elements of
       operand 0 unchanged.  Operands 0 and 1 have mode M, which must be a
       vector mode.  Operand 2 has whichever integer mode the target
!      prefers.  Operand 3 conceptually has mode 'QI'.
  
       Operand 2 can be a variable or a constant amount.  Operand 3
       specifies a constant bias: it is either a constant 0 or a constant
--- 27392,27407 ----
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      ‘QI’ elements.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘len_store_M’
       Store (operand 2 + operand 3) vector elements from vector register
       operand 1 into memory operand 0, leaving the other elements of
       operand 0 unchanged.  Operands 0 and 1 have mode M, which must be a
       vector mode.  Operand 2 has whichever integer mode the target
!      prefers.  Operand 3 conceptually has mode ‘QI’.
  
       Operand 2 can be a variable or a constant amount.  Operand 3
       specifies a constant bias: it is either a constant 0 or a constant
*************** pattern to accomplish a certain task.
*** 27413,27423 ****
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      'QI' elements.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'mask_len_loadMN'
       Perform a masked load from the memory location pointed to by
       operand 1 into register operand 0.  (operand 3 + operand 4)
       elements are loaded from memory and other elements in operand 0 are
--- 27414,27424 ----
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      ‘QI’ elements.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘mask_len_loadMN’
       Perform a masked load from the memory location pointed to by
       operand 1 into register operand 0.  (operand 3 + operand 4)
       elements are loaded from memory and other elements in operand 0 are
*************** pattern to accomplish a certain task.
*** 27427,27433 ****
       mask is specified in operand 2 which must be of type N.  The mask
       has lower precedence than the length and is itself subject to
       length masking, i.e.  only mask indices < (operand 3 + operand 4)
!      are used.  Operand 4 conceptually has mode 'QI'.
  
       Operand 2 can be a variable or a constant amount.  Operand 4
       specifies a constant bias: it is either a constant 0 or a constant
--- 27428,27434 ----
       mask is specified in operand 2 which must be of type N.  The mask
       has lower precedence than the length and is itself subject to
       length masking, i.e.  only mask indices < (operand 3 + operand 4)
!      are used.  Operand 4 conceptually has mode ‘QI’.
  
       Operand 2 can be a variable or a constant amount.  Operand 4
       specifies a constant bias: it is either a constant 0 or a constant
*************** pattern to accomplish a certain task.
*** 27440,27450 ****
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      'QI' elements.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'mask_len_storeMN'
       Perform a masked store from vector register operand 1 into memory
       operand 0.  (operand 3 + operand 4) elements are stored to memory
       and leave the other elements of operand 0 unchanged.  This is a
--- 27441,27451 ----
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      ‘QI’ elements.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘mask_len_storeMN’
       Perform a masked store from vector register operand 1 into memory
       operand 0.  (operand 3 + operand 4) elements are stored to memory
       and leave the other elements of operand 0 unchanged.  This is a
*************** pattern to accomplish a certain task.
*** 27454,27460 ****
       must be of type N.  The mask has lower precedence than the length
       and is itself subject to length masking, i.e.  only mask indices <
       (operand 3 + operand 4) are used.  Operand 4 conceptually has mode
!      'QI'.
  
       Operand 2 can be a variable or a constant amount.  Operand 3
       specifies a constant bias: it is either a constant 0 or a constant
--- 27455,27461 ----
       must be of type N.  The mask has lower precedence than the length
       and is itself subject to length masking, i.e.  only mask indices <
       (operand 3 + operand 4) are used.  Operand 4 conceptually has mode
!      ‘QI’.
  
       Operand 2 can be a variable or a constant amount.  Operand 3
       specifies a constant bias: it is either a constant 0 or a constant
*************** pattern to accomplish a certain task.
*** 27467,27536 ****
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      'QI' elements.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'vec_permM'
       Output a (variable) vector permutation.  Operand 0 is the
       destination to receive elements from operand 1 and operand 2, which
!      are of mode M.  Operand 3 is the "selector".  It is an integral
       mode vector of the same width and number of elements as mode M.
  
       The input elements are numbered from 0 in operand 1 through 2*N-1
       in operand 2.  The elements of the selector must be computed modulo
!      2*N.  Note that if 'rtx_equal_p(operand1, operand2)', this can be
       implemented with just operand 1 and selector elements modulo N.
  
       In order to make things easy for a number of targets, if there is
!      no 'vec_perm' pattern for mode M, but there is for mode Q where Q
!      is a vector of 'QImode' of the same width as M, the middle-end will
!      lower the mode M 'VEC_PERM_EXPR' to mode Q.
  
!      See also 'TARGET_VECTORIZER_VEC_PERM_CONST', which performs the
       analogous operation for constant selectors.
  
! 'pushM1'
       Output a push instruction.  Operand 0 is value to push.  Used only
!      when 'PUSH_ROUNDING' is defined.  For historical reason, this
!      pattern may be missing and in such case an 'mov' expander is used
!      instead, with a 'MEM' expression forming the push operation.  The
!      'mov' expander method is deprecated.
  
! 'addM3'
       Add operand 2 and operand 1, storing the result in operand 0.  All
       operands must have mode M.  This can be used even on two-address
       machines, by means of constraints requiring operands 1 and 0 to be
       the same location.
  
! 'ssaddM3', 'usaddM3'
! 'subM3', 'sssubM3', 'ussubM3'
! 'mulM3', 'ssmulM3', 'usmulM3'
! 'divM3', 'ssdivM3'
! 'udivM3', 'usdivM3'
! 'modM3', 'umodM3'
! 'uminM3', 'umaxM3'
! 'andM3', 'iorM3', 'xorM3'
       Similar, for other arithmetic operations.
  
! 'addvM4'
!      Like 'addM3' but takes a 'code_label' as operand 3 and emits code
       to jump to it if signed overflow occurs during the addition.  This
       pattern is used to implement the built-in functions performing
       signed integer addition with overflow checking.
  
! 'subvM4', 'mulvM4'
       Similar, for other signed arithmetic operations.
  
! 'uaddvM4'
!      Like 'addvM4' but for unsigned addition.  That is to say, the
       operation is the same as signed addition but the jump is taken only
       on unsigned overflow.
  
! 'usubvM4', 'umulvM4'
       Similar, for other unsigned arithmetic operations.
  
! 'uaddcM5'
       Adds unsigned operands 2, 3 and 4 (where the last operand is
       guaranteed to have only values 0 or 1) together, sets operand 0 to
       the result of the addition of the 3 operands and sets operand 1 to
--- 27468,27537 ----
  
       If the target prefers the length to be measured in bytes rather
       than elements, it should only implement this pattern for vectors of
!      ‘QI’ elements.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘vec_permM’
       Output a (variable) vector permutation.  Operand 0 is the
       destination to receive elements from operand 1 and operand 2, which
!      are of mode M.  Operand 3 is the “selector”.  It is an integral
       mode vector of the same width and number of elements as mode M.
  
       The input elements are numbered from 0 in operand 1 through 2*N-1
       in operand 2.  The elements of the selector must be computed modulo
!      2*N.  Note that if ‘rtx_equal_p(operand1, operand2)’, this can be
       implemented with just operand 1 and selector elements modulo N.
  
       In order to make things easy for a number of targets, if there is
!      no ‘vec_perm’ pattern for mode M, but there is for mode Q where Q
!      is a vector of ‘QImode’ of the same width as M, the middle-end will
!      lower the mode M ‘VEC_PERM_EXPR’ to mode Q.
  
!      See also ‘TARGET_VECTORIZER_VEC_PERM_CONST’, which performs the
       analogous operation for constant selectors.
  
! ‘pushM1’
       Output a push instruction.  Operand 0 is value to push.  Used only
!      when ‘PUSH_ROUNDING’ is defined.  For historical reason, this
!      pattern may be missing and in such case an ‘mov’ expander is used
!      instead, with a ‘MEM’ expression forming the push operation.  The
!      ‘mov’ expander method is deprecated.
  
! ‘addM3’
       Add operand 2 and operand 1, storing the result in operand 0.  All
       operands must have mode M.  This can be used even on two-address
       machines, by means of constraints requiring operands 1 and 0 to be
       the same location.
  
! ‘ssaddM3’, ‘usaddM3’
! ‘subM3’, ‘sssubM3’, ‘ussubM3’
! ‘mulM3’, ‘ssmulM3’, ‘usmulM3’
! ‘divM3’, ‘ssdivM3’
! ‘udivM3’, ‘usdivM3’
! ‘modM3’, ‘umodM3’
! ‘uminM3’, ‘umaxM3’
! ‘andM3’, ‘iorM3’, ‘xorM3’
       Similar, for other arithmetic operations.
  
! ‘addvM4’
!      Like ‘addM3’ but takes a ‘code_label’ as operand 3 and emits code
       to jump to it if signed overflow occurs during the addition.  This
       pattern is used to implement the built-in functions performing
       signed integer addition with overflow checking.
  
! ‘subvM4’, ‘mulvM4’
       Similar, for other signed arithmetic operations.
  
! ‘uaddvM4’
!      Like ‘addvM4’ but for unsigned addition.  That is to say, the
       operation is the same as signed addition but the jump is taken only
       on unsigned overflow.
  
! ‘usubvM4’, ‘umulvM4’
       Similar, for other unsigned arithmetic operations.
  
! ‘uaddcM5’
       Adds unsigned operands 2, 3 and 4 (where the last operand is
       guaranteed to have only values 0 or 1) together, sets operand 0 to
       the result of the addition of the 3 operands and sets operand 1 to
*************** pattern to accomplish a certain task.
*** 27538,27663 ****
       otherwise.  So, it is an addition with carry in (operand 4) and
       carry out (operand 1).  All operands have the same mode.
  
! 'usubcM5'
!      Similarly to 'uaddcM5', except subtracts unsigned operands 3 and 4
       from operand 2 instead of adding them.  So, it is a subtraction
       with carry/borrow in (operand 4) and carry/borrow out (operand 1).
       All operands have the same mode.
  
! 'addptrM3'
!      Like 'addM3' but is guaranteed to only be used for address
       calculations.  The expanded code is not allowed to clobber the
!      condition code.  It only needs to be defined if 'addM3' sets the
       condition code.  If adds used for address calculations and normal
       adds are not compatible it is required to expand a distinct pattern
       (e.g. using an unspec).  The pattern is used by LRA to emit address
!      calculations.  'addM3' is used if 'addptrM3' is not defined.
  
! 'fmaM4'
       Multiply operand 2 and operand 1, then add operand 3, storing the
       result in operand 0 without doing an intermediate rounding step.
       All operands must have mode M.  This pattern is used to implement
!      the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99
       standard.
  
! 'fmsM4'
!      Like 'fmaM4', except operand 3 subtracted from the product instead
       of added to the product.  This is represented in the rtl as
  
            (fma:M OP1 OP2 (neg:M OP3))
  
! 'fnmaM4'
!      Like 'fmaM4' except that the intermediate product is negated before
       being added to operand 3.  This is represented in the rtl as
  
            (fma:M (neg:M OP1) OP2 OP3)
  
! 'fnmsM4'
!      Like 'fmsM4' except that the intermediate product is negated before
       subtracting operand 3.  This is represented in the rtl as
  
            (fma:M (neg:M OP1) OP2 (neg:M OP3))
  
! 'sminM3', 'smaxM3'
       Signed minimum and maximum operations.  When used with floating
!      point, if both operands are zeros, or if either operand is 'NaN',
       then it is unspecified which of the two operands is returned as the
       result.
  
! 'fminM3', 'fmaxM3'
       IEEE-conformant minimum and maximum operations.  If one operand is
!      a quiet 'NaN', then the other operand is returned.  If both
!      operands are quiet 'NaN', then a quiet 'NaN' is returned.  In the
!      case when gcc supports signaling 'NaN' (-fsignaling-nans) an
!      invalid floating point exception is raised and a quiet 'NaN' is
       returned.
  
       All operands have mode M, which is a scalar or vector
!      floating-point mode.  These patterns are not allowed to 'FAIL'.
  
! 'reduc_smin_scal_M', 'reduc_smax_scal_M'
       Find the signed minimum/maximum of the elements of a vector.  The
       vector is operand 1, and operand 0 is the scalar result, with mode
       equal to the mode of the elements of the input vector.
  
! 'reduc_umin_scal_M', 'reduc_umax_scal_M'
       Find the unsigned minimum/maximum of the elements of a vector.  The
       vector is operand 1, and operand 0 is the scalar result, with mode
       equal to the mode of the elements of the input vector.
  
! 'reduc_fmin_scal_M', 'reduc_fmax_scal_M'
       Find the floating-point minimum/maximum of the elements of a
!      vector, using the same rules as 'fminM3' and 'fmaxM3'.  Operand 1
       is a vector of mode M and operand 0 is the scalar result, which has
!      mode 'GET_MODE_INNER (M)'.
  
! 'reduc_plus_scal_M'
       Compute the sum of the elements of a vector.  The vector is operand
       1, and operand 0 is the scalar result, with mode equal to the mode
       of the elements of the input vector.
  
! 'reduc_and_scal_M'
! 'reduc_ior_scal_M'
! 'reduc_xor_scal_M'
!      Compute the bitwise 'AND'/'IOR'/'XOR' reduction of the elements of
       a vector of mode M.  Operand 1 is the vector input and operand 0 is
       the scalar result.  The mode of the scalar result is the same as
       one element of M.
  
! 'extract_last_M'
       Find the last set bit in mask operand 1 and extract the associated
       element of vector operand 2.  Store the result in scalar operand 0.
       Operand 2 has vector mode M while operand 0 has the mode
       appropriate for one element of M.  Operand 1 has the usual mask
!      mode for vectors of mode M; see 'TARGET_VECTORIZE_GET_MASK_MODE'.
  
! 'fold_extract_last_M'
       If any bits of mask operand 2 are set, find the last set bit,
       extract the associated element from vector operand 3, and store the
       result in operand 0.  Store operand 1 in operand 0 otherwise.
       Operand 3 has mode M and operands 0 and 1 have the mode appropriate
       for one element of M.  Operand 2 has the usual mask mode for
!      vectors of mode M; see 'TARGET_VECTORIZE_GET_MASK_MODE'.
  
! 'len_fold_extract_last_M'
!      Like 'fold_extract_last_M', but takes an extra length operand as
       operand 4 and an extra bias operand as operand 5.  The last
       associated element is extracted should have the index i < len
       (operand 4) + bias (operand 5).
  
! 'fold_left_plus_M'
       Take scalar operand 1 and successively add each element from vector
       operand 2.  Store the result in scalar operand 0.  The vector has
       mode M and the scalars have the mode appropriate for one element of
       M.  The operation is strictly in-order: there is no reassociation.
  
! 'mask_fold_left_plus_M'
!      Like 'fold_left_plus_M', but takes an additional mask operand
       (operand 3) that specifies which elements of the source vector
       should be added.
  
! 'mask_len_fold_left_plus_M'
!      Like 'fold_left_plus_M', but takes an additional mask operand
       (operand 3), len operand (operand 4) and bias operand (operand 5)
       that performs following operations strictly in-order (no
       reassociation):
--- 27539,27664 ----
       otherwise.  So, it is an addition with carry in (operand 4) and
       carry out (operand 1).  All operands have the same mode.
  
! ‘usubcM5’
!      Similarly to ‘uaddcM5’, except subtracts unsigned operands 3 and 4
       from operand 2 instead of adding them.  So, it is a subtraction
       with carry/borrow in (operand 4) and carry/borrow out (operand 1).
       All operands have the same mode.
  
! ‘addptrM3’
!      Like ‘addM3’ but is guaranteed to only be used for address
       calculations.  The expanded code is not allowed to clobber the
!      condition code.  It only needs to be defined if ‘addM3’ sets the
       condition code.  If adds used for address calculations and normal
       adds are not compatible it is required to expand a distinct pattern
       (e.g. using an unspec).  The pattern is used by LRA to emit address
!      calculations.  ‘addM3’ is used if ‘addptrM3’ is not defined.
  
! ‘fmaM4’
       Multiply operand 2 and operand 1, then add operand 3, storing the
       result in operand 0 without doing an intermediate rounding step.
       All operands must have mode M.  This pattern is used to implement
!      the ‘fma’, ‘fmaf’, and ‘fmal’ builtin functions from the ISO C99
       standard.
  
! ‘fmsM4’
!      Like ‘fmaM4’, except operand 3 subtracted from the product instead
       of added to the product.  This is represented in the rtl as
  
            (fma:M OP1 OP2 (neg:M OP3))
  
! ‘fnmaM4’
!      Like ‘fmaM4’ except that the intermediate product is negated before
       being added to operand 3.  This is represented in the rtl as
  
            (fma:M (neg:M OP1) OP2 OP3)
  
! ‘fnmsM4’
!      Like ‘fmsM4’ except that the intermediate product is negated before
       subtracting operand 3.  This is represented in the rtl as
  
            (fma:M (neg:M OP1) OP2 (neg:M OP3))
  
! ‘sminM3’, ‘smaxM3’
       Signed minimum and maximum operations.  When used with floating
!      point, if both operands are zeros, or if either operand is ‘NaN’,
       then it is unspecified which of the two operands is returned as the
       result.
  
! ‘fminM3’, ‘fmaxM3’
       IEEE-conformant minimum and maximum operations.  If one operand is
!      a quiet ‘NaN’, then the other operand is returned.  If both
!      operands are quiet ‘NaN’, then a quiet ‘NaN’ is returned.  In the
!      case when gcc supports signaling ‘NaN’ (-fsignaling-nans) an
!      invalid floating point exception is raised and a quiet ‘NaN’ is
       returned.
  
       All operands have mode M, which is a scalar or vector
!      floating-point mode.  These patterns are not allowed to ‘FAIL’.
  
! ‘reduc_smin_scal_M’, ‘reduc_smax_scal_M’
       Find the signed minimum/maximum of the elements of a vector.  The
       vector is operand 1, and operand 0 is the scalar result, with mode
       equal to the mode of the elements of the input vector.
  
! ‘reduc_umin_scal_M’, ‘reduc_umax_scal_M’
       Find the unsigned minimum/maximum of the elements of a vector.  The
       vector is operand 1, and operand 0 is the scalar result, with mode
       equal to the mode of the elements of the input vector.
  
! ‘reduc_fmin_scal_M’, ‘reduc_fmax_scal_M’
       Find the floating-point minimum/maximum of the elements of a
!      vector, using the same rules as ‘fminM3’ and ‘fmaxM3’.  Operand 1
       is a vector of mode M and operand 0 is the scalar result, which has
!      mode ‘GET_MODE_INNER (M)’.
  
! ‘reduc_plus_scal_M’
       Compute the sum of the elements of a vector.  The vector is operand
       1, and operand 0 is the scalar result, with mode equal to the mode
       of the elements of the input vector.
  
! ‘reduc_and_scal_M’
! ‘reduc_ior_scal_M’
! ‘reduc_xor_scal_M’
!      Compute the bitwise ‘AND’/‘IOR’/‘XOR’ reduction of the elements of
       a vector of mode M.  Operand 1 is the vector input and operand 0 is
       the scalar result.  The mode of the scalar result is the same as
       one element of M.
  
! ‘extract_last_M’
       Find the last set bit in mask operand 1 and extract the associated
       element of vector operand 2.  Store the result in scalar operand 0.
       Operand 2 has vector mode M while operand 0 has the mode
       appropriate for one element of M.  Operand 1 has the usual mask
!      mode for vectors of mode M; see ‘TARGET_VECTORIZE_GET_MASK_MODE’.
  
! ‘fold_extract_last_M’
       If any bits of mask operand 2 are set, find the last set bit,
       extract the associated element from vector operand 3, and store the
       result in operand 0.  Store operand 1 in operand 0 otherwise.
       Operand 3 has mode M and operands 0 and 1 have the mode appropriate
       for one element of M.  Operand 2 has the usual mask mode for
!      vectors of mode M; see ‘TARGET_VECTORIZE_GET_MASK_MODE’.
  
! ‘len_fold_extract_last_M’
!      Like ‘fold_extract_last_M’, but takes an extra length operand as
       operand 4 and an extra bias operand as operand 5.  The last
       associated element is extracted should have the index i < len
       (operand 4) + bias (operand 5).
  
! ‘fold_left_plus_M’
       Take scalar operand 1 and successively add each element from vector
       operand 2.  Store the result in scalar operand 0.  The vector has
       mode M and the scalars have the mode appropriate for one element of
       M.  The operation is strictly in-order: there is no reassociation.
  
! ‘mask_fold_left_plus_M’
!      Like ‘fold_left_plus_M’, but takes an additional mask operand
       (operand 3) that specifies which elements of the source vector
       should be added.
  
! ‘mask_len_fold_left_plus_M’
!      Like ‘fold_left_plus_M’, but takes an additional mask operand
       (operand 3), len operand (operand 4) and bias operand (operand 5)
       that performs following operations strictly in-order (no
       reassociation):
*************** pattern to accomplish a certain task.
*** 27667,27673 ****
              if (operand3[i])
                operand0 += operand2[i];
  
! 'sdot_prodM'
  
       Compute the sum of the products of two signed elements.  Operand 1
       and operand 2 are of the same mode.  Their product, which is of a
--- 27668,27674 ----
              if (operand3[i])
                operand0 += operand2[i];
  
! ‘sdot_prodM’
  
       Compute the sum of the products of two signed elements.  Operand 1
       and operand 2 are of the same mode.  Their product, which is of a
*************** pattern to accomplish a certain task.
*** 27683,27689 ****
               op0 = sign-ext (op1) * sign-ext (op2) + op3
            ...
  
! 'udot_prodM'
  
       Compute the sum of the products of two unsigned elements.  Operand
       1 and operand 2 are of the same mode.  Their product, which is of a
--- 27684,27690 ----
               op0 = sign-ext (op1) * sign-ext (op2) + op3
            ...
  
! ‘udot_prodM’
  
       Compute the sum of the products of two unsigned elements.  Operand
       1 and operand 2 are of the same mode.  Their product, which is of a
*************** pattern to accomplish a certain task.
*** 27699,27705 ****
               op0 = zero-ext (op1) * zero-ext (op2) + op3
            ...
  
! 'usdot_prodM'
       Compute the sum of the products of elements of different signs.
       Operand 1 must be unsigned and operand 2 signed.  Their product,
       which is of a wider mode, is computed and added to operand 3.
--- 27700,27706 ----
               op0 = zero-ext (op1) * zero-ext (op2) + op3
            ...
  
! ‘usdot_prodM’
       Compute the sum of the products of elements of different signs.
       Operand 1 must be unsigned and operand 2 signed.  Their product,
       which is of a wider mode, is computed and added to operand 3.
*************** pattern to accomplish a certain task.
*** 27714,27721 ****
               op0 = ((signed-conv) zero-ext (op1)) * sign-ext (op2) + op3
            ...
  
! 'ssadM'
! 'usadM'
       Compute the sum of absolute differences of two signed/unsigned
       elements.  Operand 1 and operand 2 are of the same mode.  Their
       absolute difference, which is of a wider mode, is computed and
--- 27715,27722 ----
               op0 = ((signed-conv) zero-ext (op1)) * sign-ext (op2) + op3
            ...
  
! ‘ssadM’
! ‘usadM’
       Compute the sum of absolute differences of two signed/unsigned
       elements.  Operand 1 and operand 2 are of the same mode.  Their
       absolute difference, which is of a wider mode, is computed and
*************** pattern to accomplish a certain task.
*** 27724,27849 ****
       0, which is of the same mode as operand 3.  M is the mode of
       operand 1 and operand 2.
  
! 'widen_ssumM3'
! 'widen_usumM3'
       Operands 0 and 2 are of the same mode, which is wider than the mode
       of operand 1.  Add operand 1 to operand 2 and place the widened
       result in operand 0.  (This is used express accumulation of
       elements into an accumulator of a wider mode.)  M is the mode of
       operand 1.
  
! 'smulhsM3'
! 'umulhsM3'
       Signed/unsigned multiply high with scale.  This is equivalent to
       the C code:
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((wide) op1 * (wide) op2) >> (N / 2 - 1));
!      where the sign of 'narrow' determines whether this is a signed or
!      unsigned operation, and N is the size of 'wide' in bits.  M is the
       mode for all 3 operands (narrow).  The wide mode is not specified
       and is defined to fit the whole multiply.
  
! 'smulhrsM3'
! 'umulhrsM3'
       Signed/unsigned multiply high with round and scale.  This is
       equivalent to the C code:
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((((wide) op1 * (wide) op2) >> (N / 2 - 2)) + 1) >> 1);
!      where the sign of 'narrow' determines whether this is a signed or
!      unsigned operation, and N is the size of 'wide' in bits.  M is the
       mode for all 3 operands (narrow).  The wide mode is not specified
       and is defined to fit the whole multiply.
  
! 'sdiv_pow2M3'
! 'sdiv_pow2M3'
       Signed division by power-of-2 immediate.  Equivalent to:
            signed op0, op1;
            ...
            op0 = op1 / (1 << imm);
  
! 'vec_shl_insert_M'
       Shift the elements in vector input operand 1 left one element (i.e.
       away from element 0) and fill the vacated element 0 with the scalar
       in operand 2.  Store the result in vector output operand 0.
       Operands 0 and 1 have mode M and operand 2 has the mode appropriate
       for one element of M.
  
! 'vec_shl_M'
       Whole vector left shift in bits, i.e. away from element 0.  Operand
       1 is a vector to be shifted.  Operand 2 is an integer shift amount
       in bits.  Operand 0 is where the resulting shifted vector is
       stored.  The output and input vectors should have the same modes.
  
! 'vec_shr_M'
       Whole vector right shift in bits, i.e. towards element 0.  Operand
       1 is a vector to be shifted.  Operand 2 is an integer shift amount
       in bits.  Operand 0 is where the resulting shifted vector is
       stored.  The output and input vectors should have the same modes.
  
! 'vec_pack_trunc_M'
       Narrow (demote) and merge the elements of two vectors.  Operands 1
       and 2 are vectors of the same mode having N integral or floating
       point elements of size S.  Operand 0 is the resulting vector in
       which 2*N elements of size S/2 are concatenated after narrowing
       them down using truncation.
  
! 'vec_pack_sbool_trunc_M'
       Narrow and merge the elements of two vectors.  Operands 1 and 2 are
       vectors of the same type having N boolean elements.  Operand 0 is
       the resulting vector in which 2*N elements are concatenated.  The
       last operand (operand 3) is the number of elements in the output
!      vector 2*N as a 'CONST_INT'.  This instruction pattern is used when
       all the vector input and output operands have the same scalar mode
!      M and thus using 'vec_pack_trunc_M' would be ambiguous.
  
! 'vec_pack_ssat_M', 'vec_pack_usat_M'
       Narrow (demote) and merge the elements of two vectors.  Operands 1
       and 2 are vectors of the same mode having N integral elements of
       size S. Operand 0 is the resulting vector in which the elements of
       the two input vectors are concatenated after narrowing them down
       using signed/unsigned saturating arithmetic.
  
! 'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M'
       Narrow, convert to signed/unsigned integral type and merge the
       elements of two vectors.  Operands 1 and 2 are vectors of the same
       mode having N floating point elements of size S.  Operand 0 is the
       resulting vector in which 2*N elements of size S/2 are
       concatenated.
  
! 'vec_packs_float_M', 'vec_packu_float_M'
       Narrow, convert to floating point type and merge the elements of
       two vectors.  Operands 1 and 2 are vectors of the same mode having
       N signed/unsigned integral elements of size S.  Operand 0 is the
       resulting vector in which 2*N elements of size S/2 are
       concatenated.
  
! 'vec_unpacks_hi_M', 'vec_unpacks_lo_M'
       Extract and widen (promote) the high/low part of a vector of signed
       integral or floating point elements.  The input vector (operand 1)
       has N elements of size S.  Widen (promote) the high/low elements of
       the vector using signed or floating point extension and place the
       resulting N/2 values of size 2*S in the output vector (operand 0).
  
! 'vec_unpacku_hi_M', 'vec_unpacku_lo_M'
       Extract and widen (promote) the high/low part of a vector of
       unsigned integral elements.  The input vector (operand 1) has N
       elements of size S. Widen (promote) the high/low elements of the
       vector using zero extension and place the resulting N/2 values of
       size 2*S in the output vector (operand 0).
  
! 'vec_unpacks_sbool_hi_M', 'vec_unpacks_sbool_lo_M'
       Extract the high/low part of a vector of boolean elements that have
       scalar mode M.  The input vector (operand 1) has N elements, the
       output vector (operand 0) has N/2 elements.  The last operand
       (operand 2) is the number of elements of the input vector N as a
!      'CONST_INT'.  These patterns are used if both the input and output
       vectors have the same scalar mode M and thus using
!      'vec_unpacks_hi_M' or 'vec_unpacks_lo_M' would be ambiguous.
  
! 'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M'
! 'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M'
       Extract, convert to floating point type and widen the high/low part
       of a vector of signed/unsigned integral elements.  The input vector
       (operand 1) has N elements of size S.  Convert the high/low
--- 27725,27850 ----
       0, which is of the same mode as operand 3.  M is the mode of
       operand 1 and operand 2.
  
! ‘widen_ssumM3’
! ‘widen_usumM3’
       Operands 0 and 2 are of the same mode, which is wider than the mode
       of operand 1.  Add operand 1 to operand 2 and place the widened
       result in operand 0.  (This is used express accumulation of
       elements into an accumulator of a wider mode.)  M is the mode of
       operand 1.
  
! ‘smulhsM3’
! ‘umulhsM3’
       Signed/unsigned multiply high with scale.  This is equivalent to
       the C code:
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((wide) op1 * (wide) op2) >> (N / 2 - 1));
!      where the sign of ‘narrow’ determines whether this is a signed or
!      unsigned operation, and N is the size of ‘wide’ in bits.  M is the
       mode for all 3 operands (narrow).  The wide mode is not specified
       and is defined to fit the whole multiply.
  
! ‘smulhrsM3’
! ‘umulhrsM3’
       Signed/unsigned multiply high with round and scale.  This is
       equivalent to the C code:
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((((wide) op1 * (wide) op2) >> (N / 2 - 2)) + 1) >> 1);
!      where the sign of ‘narrow’ determines whether this is a signed or
!      unsigned operation, and N is the size of ‘wide’ in bits.  M is the
       mode for all 3 operands (narrow).  The wide mode is not specified
       and is defined to fit the whole multiply.
  
! ‘sdiv_pow2M3’
! ‘sdiv_pow2M3’
       Signed division by power-of-2 immediate.  Equivalent to:
            signed op0, op1;
            ...
            op0 = op1 / (1 << imm);
  
! ‘vec_shl_insert_M’
       Shift the elements in vector input operand 1 left one element (i.e.
       away from element 0) and fill the vacated element 0 with the scalar
       in operand 2.  Store the result in vector output operand 0.
       Operands 0 and 1 have mode M and operand 2 has the mode appropriate
       for one element of M.
  
! ‘vec_shl_M’
       Whole vector left shift in bits, i.e. away from element 0.  Operand
       1 is a vector to be shifted.  Operand 2 is an integer shift amount
       in bits.  Operand 0 is where the resulting shifted vector is
       stored.  The output and input vectors should have the same modes.
  
! ‘vec_shr_M’
       Whole vector right shift in bits, i.e. towards element 0.  Operand
       1 is a vector to be shifted.  Operand 2 is an integer shift amount
       in bits.  Operand 0 is where the resulting shifted vector is
       stored.  The output and input vectors should have the same modes.
  
! ‘vec_pack_trunc_M’
       Narrow (demote) and merge the elements of two vectors.  Operands 1
       and 2 are vectors of the same mode having N integral or floating
       point elements of size S.  Operand 0 is the resulting vector in
       which 2*N elements of size S/2 are concatenated after narrowing
       them down using truncation.
  
! ‘vec_pack_sbool_trunc_M’
       Narrow and merge the elements of two vectors.  Operands 1 and 2 are
       vectors of the same type having N boolean elements.  Operand 0 is
       the resulting vector in which 2*N elements are concatenated.  The
       last operand (operand 3) is the number of elements in the output
!      vector 2*N as a ‘CONST_INT’.  This instruction pattern is used when
       all the vector input and output operands have the same scalar mode
!      M and thus using ‘vec_pack_trunc_M’ would be ambiguous.
  
! ‘vec_pack_ssat_M’, ‘vec_pack_usat_M’
       Narrow (demote) and merge the elements of two vectors.  Operands 1
       and 2 are vectors of the same mode having N integral elements of
       size S. Operand 0 is the resulting vector in which the elements of
       the two input vectors are concatenated after narrowing them down
       using signed/unsigned saturating arithmetic.
  
! ‘vec_pack_sfix_trunc_M’, ‘vec_pack_ufix_trunc_M’
       Narrow, convert to signed/unsigned integral type and merge the
       elements of two vectors.  Operands 1 and 2 are vectors of the same
       mode having N floating point elements of size S.  Operand 0 is the
       resulting vector in which 2*N elements of size S/2 are
       concatenated.
  
! ‘vec_packs_float_M’, ‘vec_packu_float_M’
       Narrow, convert to floating point type and merge the elements of
       two vectors.  Operands 1 and 2 are vectors of the same mode having
       N signed/unsigned integral elements of size S.  Operand 0 is the
       resulting vector in which 2*N elements of size S/2 are
       concatenated.
  
! ‘vec_unpacks_hi_M’, ‘vec_unpacks_lo_M’
       Extract and widen (promote) the high/low part of a vector of signed
       integral or floating point elements.  The input vector (operand 1)
       has N elements of size S.  Widen (promote) the high/low elements of
       the vector using signed or floating point extension and place the
       resulting N/2 values of size 2*S in the output vector (operand 0).
  
! ‘vec_unpacku_hi_M’, ‘vec_unpacku_lo_M’
       Extract and widen (promote) the high/low part of a vector of
       unsigned integral elements.  The input vector (operand 1) has N
       elements of size S. Widen (promote) the high/low elements of the
       vector using zero extension and place the resulting N/2 values of
       size 2*S in the output vector (operand 0).
  
! ‘vec_unpacks_sbool_hi_M’, ‘vec_unpacks_sbool_lo_M’
       Extract the high/low part of a vector of boolean elements that have
       scalar mode M.  The input vector (operand 1) has N elements, the
       output vector (operand 0) has N/2 elements.  The last operand
       (operand 2) is the number of elements of the input vector N as a
!      ‘CONST_INT’.  These patterns are used if both the input and output
       vectors have the same scalar mode M and thus using
!      ‘vec_unpacks_hi_M’ or ‘vec_unpacks_lo_M’ would be ambiguous.
  
! ‘vec_unpacks_float_hi_M’, ‘vec_unpacks_float_lo_M’
! ‘vec_unpacku_float_hi_M’, ‘vec_unpacku_float_lo_M’
       Extract, convert to floating point type and widen the high/low part
       of a vector of signed/unsigned integral elements.  The input vector
       (operand 1) has N elements of size S.  Convert the high/low
*************** pattern to accomplish a certain task.
*** 27851,27870 ****
       the resulting N/2 values of size 2*S in the output vector (operand
       0).
  
! 'vec_unpack_sfix_trunc_hi_M',
! 'vec_unpack_sfix_trunc_lo_M'
! 'vec_unpack_ufix_trunc_hi_M'
! 'vec_unpack_ufix_trunc_lo_M'
       Extract, convert to signed/unsigned integer type and widen the
       high/low part of a vector of floating point elements.  The input
       vector (operand 1) has N elements of size S.  Convert the high/low
       elements of the vector to integers and place the resulting N/2
       values of size 2*S in the output vector (operand 0).
  
! 'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M'
! 'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M'
! 'vec_widen_umult_even_M', 'vec_widen_umult_odd_M'
! 'vec_widen_smult_even_M', 'vec_widen_smult_odd_M'
       Signed/Unsigned widening multiplication.  The two inputs (operands
       1 and 2) are vectors with N signed/unsigned elements of size S.
       Multiply the high/low or even/odd elements of the two vectors, and
--- 27852,27871 ----
       the resulting N/2 values of size 2*S in the output vector (operand
       0).
  
! ‘vec_unpack_sfix_trunc_hi_M’,
! ‘vec_unpack_sfix_trunc_lo_M’
! ‘vec_unpack_ufix_trunc_hi_M’
! ‘vec_unpack_ufix_trunc_lo_M’
       Extract, convert to signed/unsigned integer type and widen the
       high/low part of a vector of floating point elements.  The input
       vector (operand 1) has N elements of size S.  Convert the high/low
       elements of the vector to integers and place the resulting N/2
       values of size 2*S in the output vector (operand 0).
  
! ‘vec_widen_umult_hi_M’, ‘vec_widen_umult_lo_M’
! ‘vec_widen_smult_hi_M’, ‘vec_widen_smult_lo_M’
! ‘vec_widen_umult_even_M’, ‘vec_widen_umult_odd_M’
! ‘vec_widen_smult_even_M’, ‘vec_widen_smult_odd_M’
       Signed/Unsigned widening multiplication.  The two inputs (operands
       1 and 2) are vectors with N signed/unsigned elements of size S.
       Multiply the high/low or even/odd elements of the two vectors, and
*************** pattern to accomplish a certain task.
*** 27872,28049 ****
       A target shouldn't implement even/odd pattern pair if it is less
       efficient than lo/hi one.
  
! 'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M'
! 'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M'
       Signed/Unsigned widening shift left.  The first input (operand 1)
       is a vector with N signed/unsigned elements of size S.  Operand 2
       is a constant.  Shift the high/low elements of operand 1, and put
       the N/2 results of size 2*S in the output vector (operand 0).
  
! 'vec_widen_uaddl_hi_M', 'vec_widen_uaddl_lo_M'
! 'vec_widen_saddl_hi_M', 'vec_widen_saddl_lo_M'
       Signed/Unsigned widening add long.  Operands 1 and 2 are vectors
       with N signed/unsigned elements of size S.  Add the high/low
       elements of 1 and 2 together, widen the resulting elements and put
       the N/2 results of size 2*S in the output vector (operand 0).
  
! 'vec_widen_usubl_hi_M', 'vec_widen_usubl_lo_M'
! 'vec_widen_ssubl_hi_M', 'vec_widen_ssubl_lo_M'
       Signed/Unsigned widening subtract long.  Operands 1 and 2 are
       vectors with N signed/unsigned elements of size S.  Subtract the
       high/low elements of 2 from 1 and widen the resulting elements.
       Put the N/2 results of size 2*S in the output vector (operand 0).
  
! 'vec_widen_uabd_hi_M', 'vec_widen_uabd_lo_M'
! 'vec_widen_uabd_odd_M', 'vec_widen_uabd_even_M'
! 'vec_widen_sabd_hi_M', 'vec_widen_sabd_lo_M'
! 'vec_widen_sabd_odd_M', 'vec_widen_sabd_even_M'
       Signed/Unsigned widening absolute difference.  Operands 1 and 2 are
       vectors with N signed/unsigned elements of size S.  Find the
       absolute difference between operands 1 and 2 and widen the
       resulting elements.  Put the N/2 results of size 2*S in the output
       vector (operand 0).
  
! 'vec_addsubM3'
       Alternating subtract, add with even lanes doing subtract and odd
       lanes doing addition.  Operands 1 and 2 and the outout operand are
       vectors with mode M.
  
! 'vec_fmaddsubM4'
       Alternating multiply subtract, add with even lanes doing subtract
       and odd lanes doing addition of the third operand to the
       multiplication result of the first two operands.  Operands 1, 2 and
       3 and the outout operand are vectors with mode M.
  
! 'vec_fmsubaddM4'
       Alternating multiply add, subtract with even lanes doing addition
       and odd lanes doing subtraction of the third operand to the
       multiplication result of the first two operands.  Operands 1, 2 and
       3 and the outout operand are vectors with mode M.
  
!      These instructions are not allowed to 'FAIL'.
  
! 'mulhisi3'
!      Multiply operands 1 and 2, which have mode 'HImode', and store a
!      'SImode' product in operand 0.
  
! 'mulqihi3', 'mulsidi3'
       Similar widening-multiplication instructions of other widths.
  
! 'umulqihi3', 'umulhisi3', 'umulsidi3'
       Similar widening-multiplication instructions that do unsigned
       multiplication.
  
! 'usmulqihi3', 'usmulhisi3', 'usmulsidi3'
       Similar widening-multiplication instructions that interpret the
       first operand as unsigned and the second operand as signed, then do
       a signed multiplication.
  
! 'smulM3_highpart'
       Perform a signed multiplication of operands 1 and 2, which have
       mode M, and store the most significant half of the product in
       operand 0.  The least significant half of the product is discarded.
!      This may be represented in RTL using a 'smul_highpart' RTX
       expression.
  
! 'umulM3_highpart'
       Similar, but the multiplication is unsigned.  This may be
!      represented in RTL using an 'umul_highpart' RTX expression.
  
! 'maddMN4'
       Multiply operands 1 and 2, sign-extend them to mode N, add operand
       3, and store the result in operand 0.  Operands 1 and 2 have mode M
       and operands 0 and 3 have mode N.  Both modes must be integer or
       fixed-point modes and N must be twice the size of M.
  
!      In other words, 'maddMN4' is like 'mulMN3' except that it also adds
       operand 3.
  
!      These instructions are not allowed to 'FAIL'.
  
! 'umaddMN4'
!      Like 'maddMN4', but zero-extend the multiplication operands instead
       of sign-extending them.
  
! 'ssmaddMN4'
!      Like 'maddMN4', but all involved operations must be
       signed-saturating.
  
! 'usmaddMN4'
!      Like 'umaddMN4', but all involved operations must be
       unsigned-saturating.
  
! 'msubMN4'
       Multiply operands 1 and 2, sign-extend them to mode N, subtract the
       result from operand 3, and store the result in operand 0.  Operands
       1 and 2 have mode M and operands 0 and 3 have mode N.  Both modes
       must be integer or fixed-point modes and N must be twice the size
       of M.
  
!      In other words, 'msubMN4' is like 'mulMN3' except that it also
       subtracts the result from operand 3.
  
!      These instructions are not allowed to 'FAIL'.
  
! 'umsubMN4'
!      Like 'msubMN4', but zero-extend the multiplication operands instead
       of sign-extending them.
  
! 'ssmsubMN4'
!      Like 'msubMN4', but all involved operations must be
       signed-saturating.
  
! 'usmsubMN4'
!      Like 'umsubMN4', but all involved operations must be
       unsigned-saturating.
  
! 'divmodM4'
       Signed division that produces both a quotient and a remainder.
       Operand 1 is divided by operand 2 to produce a quotient stored in
       operand 0 and a remainder stored in operand 3.
  
       For machines with an instruction that produces both a quotient and
!      a remainder, provide a pattern for 'divmodM4' but do not provide
!      patterns for 'divM3' and 'modM3'.  This allows optimization in the
       relatively common case when both the quotient and remainder are
       computed.
  
       If an instruction that just produces a quotient or just a remainder
       exists and is more efficient than the instruction that produces
!      both, write the output routine of 'divmodM4' to call
!      'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or
       remainder and generate the appropriate instruction.
  
! 'udivmodM4'
       Similar, but does unsigned division.
  
! 'ashlM3', 'ssashlM3', 'usashlM3'
       Arithmetic-shift operand 1 left by a number of bits specified by
       operand 2, and store the result in operand 0.  Here M is the mode
       of operand 0 and operand 1; operand 2's mode is specified by the
       instruction pattern, and the compiler will convert the operand to
       that mode before generating the instruction.  The shift or rotate
       expander or instruction pattern should explicitly specify the mode
!      of the operand 2, it should never be 'VOIDmode'.  The meaning of
       out-of-range shift counts can optionally be specified by
!      'TARGET_SHIFT_TRUNCATION_MASK'.  *Note
       TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
  
! 'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3'
!      Other shift and rotate instructions, analogous to the 'ashlM3'
       instructions.  Operand 2 is always a scalar type.
  
! 'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3'
       Vector shift and rotate instructions that take vectors as operand 2
       instead of a scalar type.
  
! 'uabdM', 'sabdM'
       Signed and unsigned absolute difference instructions.  These
       instructions find the difference between operands 1 and 2 then
       return the absolute value.  A C code equivalent would be:
            op0 = op1 > op2 ? op1 - op2 : op2 - op1;
  
! 'avgM3_floor'
! 'uavgM3_floor'
       Signed and unsigned average instructions.  These instructions add
       operands 1 and 2 without truncation, divide the result by 2, round
       towards -Inf, and store the result in operand 0.  This is
--- 27873,28050 ----
       A target shouldn't implement even/odd pattern pair if it is less
       efficient than lo/hi one.
  
! ‘vec_widen_ushiftl_hi_M’, ‘vec_widen_ushiftl_lo_M’
! ‘vec_widen_sshiftl_hi_M’, ‘vec_widen_sshiftl_lo_M’
       Signed/Unsigned widening shift left.  The first input (operand 1)
       is a vector with N signed/unsigned elements of size S.  Operand 2
       is a constant.  Shift the high/low elements of operand 1, and put
       the N/2 results of size 2*S in the output vector (operand 0).
  
! ‘vec_widen_uaddl_hi_M’, ‘vec_widen_uaddl_lo_M’
! ‘vec_widen_saddl_hi_M’, ‘vec_widen_saddl_lo_M’
       Signed/Unsigned widening add long.  Operands 1 and 2 are vectors
       with N signed/unsigned elements of size S.  Add the high/low
       elements of 1 and 2 together, widen the resulting elements and put
       the N/2 results of size 2*S in the output vector (operand 0).
  
! ‘vec_widen_usubl_hi_M’, ‘vec_widen_usubl_lo_M’
! ‘vec_widen_ssubl_hi_M’, ‘vec_widen_ssubl_lo_M’
       Signed/Unsigned widening subtract long.  Operands 1 and 2 are
       vectors with N signed/unsigned elements of size S.  Subtract the
       high/low elements of 2 from 1 and widen the resulting elements.
       Put the N/2 results of size 2*S in the output vector (operand 0).
  
! ‘vec_widen_uabd_hi_M’, ‘vec_widen_uabd_lo_M’
! ‘vec_widen_uabd_odd_M’, ‘vec_widen_uabd_even_M’
! ‘vec_widen_sabd_hi_M’, ‘vec_widen_sabd_lo_M’
! ‘vec_widen_sabd_odd_M’, ‘vec_widen_sabd_even_M’
       Signed/Unsigned widening absolute difference.  Operands 1 and 2 are
       vectors with N signed/unsigned elements of size S.  Find the
       absolute difference between operands 1 and 2 and widen the
       resulting elements.  Put the N/2 results of size 2*S in the output
       vector (operand 0).
  
! ‘vec_addsubM3’
       Alternating subtract, add with even lanes doing subtract and odd
       lanes doing addition.  Operands 1 and 2 and the outout operand are
       vectors with mode M.
  
! ‘vec_fmaddsubM4’
       Alternating multiply subtract, add with even lanes doing subtract
       and odd lanes doing addition of the third operand to the
       multiplication result of the first two operands.  Operands 1, 2 and
       3 and the outout operand are vectors with mode M.
  
! ‘vec_fmsubaddM4’
       Alternating multiply add, subtract with even lanes doing addition
       and odd lanes doing subtraction of the third operand to the
       multiplication result of the first two operands.  Operands 1, 2 and
       3 and the outout operand are vectors with mode M.
  
!      These instructions are not allowed to ‘FAIL’.
  
! ‘mulhisi3’
!      Multiply operands 1 and 2, which have mode ‘HImode’, and store a
!      ‘SImode’ product in operand 0.
  
! ‘mulqihi3’, ‘mulsidi3’
       Similar widening-multiplication instructions of other widths.
  
! ‘umulqihi3’, ‘umulhisi3’, ‘umulsidi3’
       Similar widening-multiplication instructions that do unsigned
       multiplication.
  
! ‘usmulqihi3’, ‘usmulhisi3’, ‘usmulsidi3’
       Similar widening-multiplication instructions that interpret the
       first operand as unsigned and the second operand as signed, then do
       a signed multiplication.
  
! ‘smulM3_highpart’
       Perform a signed multiplication of operands 1 and 2, which have
       mode M, and store the most significant half of the product in
       operand 0.  The least significant half of the product is discarded.
!      This may be represented in RTL using a ‘smul_highpart’ RTX
       expression.
  
! ‘umulM3_highpart’
       Similar, but the multiplication is unsigned.  This may be
!      represented in RTL using an ‘umul_highpart’ RTX expression.
  
! ‘maddMN4’
       Multiply operands 1 and 2, sign-extend them to mode N, add operand
       3, and store the result in operand 0.  Operands 1 and 2 have mode M
       and operands 0 and 3 have mode N.  Both modes must be integer or
       fixed-point modes and N must be twice the size of M.
  
!      In other words, ‘maddMN4’ is like ‘mulMN3’ except that it also adds
       operand 3.
  
!      These instructions are not allowed to ‘FAIL’.
  
! ‘umaddMN4’
!      Like ‘maddMN4’, but zero-extend the multiplication operands instead
       of sign-extending them.
  
! ‘ssmaddMN4’
!      Like ‘maddMN4’, but all involved operations must be
       signed-saturating.
  
! ‘usmaddMN4’
!      Like ‘umaddMN4’, but all involved operations must be
       unsigned-saturating.
  
! ‘msubMN4’
       Multiply operands 1 and 2, sign-extend them to mode N, subtract the
       result from operand 3, and store the result in operand 0.  Operands
       1 and 2 have mode M and operands 0 and 3 have mode N.  Both modes
       must be integer or fixed-point modes and N must be twice the size
       of M.
  
!      In other words, ‘msubMN4’ is like ‘mulMN3’ except that it also
       subtracts the result from operand 3.
  
!      These instructions are not allowed to ‘FAIL’.
  
! ‘umsubMN4’
!      Like ‘msubMN4’, but zero-extend the multiplication operands instead
       of sign-extending them.
  
! ‘ssmsubMN4’
!      Like ‘msubMN4’, but all involved operations must be
       signed-saturating.
  
! ‘usmsubMN4’
!      Like ‘umsubMN4’, but all involved operations must be
       unsigned-saturating.
  
! ‘divmodM4’
       Signed division that produces both a quotient and a remainder.
       Operand 1 is divided by operand 2 to produce a quotient stored in
       operand 0 and a remainder stored in operand 3.
  
       For machines with an instruction that produces both a quotient and
!      a remainder, provide a pattern for ‘divmodM4’ but do not provide
!      patterns for ‘divM3’ and ‘modM3’.  This allows optimization in the
       relatively common case when both the quotient and remainder are
       computed.
  
       If an instruction that just produces a quotient or just a remainder
       exists and is more efficient than the instruction that produces
!      both, write the output routine of ‘divmodM4’ to call
!      ‘find_reg_note’ and look for a ‘REG_UNUSED’ note on the quotient or
       remainder and generate the appropriate instruction.
  
! ‘udivmodM4’
       Similar, but does unsigned division.
  
! ‘ashlM3’, ‘ssashlM3’, ‘usashlM3’
       Arithmetic-shift operand 1 left by a number of bits specified by
       operand 2, and store the result in operand 0.  Here M is the mode
       of operand 0 and operand 1; operand 2's mode is specified by the
       instruction pattern, and the compiler will convert the operand to
       that mode before generating the instruction.  The shift or rotate
       expander or instruction pattern should explicitly specify the mode
!      of the operand 2, it should never be ‘VOIDmode’.  The meaning of
       out-of-range shift counts can optionally be specified by
!      ‘TARGET_SHIFT_TRUNCATION_MASK’.  *Note
       TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
  
! ‘ashrM3’, ‘lshrM3’, ‘rotlM3’, ‘rotrM3’
!      Other shift and rotate instructions, analogous to the ‘ashlM3’
       instructions.  Operand 2 is always a scalar type.
  
! ‘vashlM3’, ‘vashrM3’, ‘vlshrM3’, ‘vrotlM3’, ‘vrotrM3’
       Vector shift and rotate instructions that take vectors as operand 2
       instead of a scalar type.
  
! ‘uabdM’, ‘sabdM’
       Signed and unsigned absolute difference instructions.  These
       instructions find the difference between operands 1 and 2 then
       return the absolute value.  A C code equivalent would be:
            op0 = op1 > op2 ? op1 - op2 : op2 - op1;
  
! ‘avgM3_floor’
! ‘uavgM3_floor’
       Signed and unsigned average instructions.  These instructions add
       operands 1 and 2 without truncation, divide the result by 2, round
       towards -Inf, and store the result in operand 0.  This is
*************** pattern to accomplish a certain task.
*** 28051,28384 ****
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((wide) op1 + (wide) op2) >> 1);
!      where the sign of 'narrow' determines whether this is a signed or
       unsigned operation.
  
! 'avgM3_ceil'
! 'uavgM3_ceil'
!      Like 'avgM3_floor' and 'uavgM3_floor', but round towards +Inf.
       This is equivalent to the C code:
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((wide) op1 + (wide) op2 + 1) >> 1);
  
! 'bswapM2'
       Reverse the order of bytes of operand 1 and store the result in
       operand 0.
  
! 'negM2', 'ssnegM2', 'usnegM2'
       Negate operand 1 and store the result in operand 0.
  
! 'negvM3'
!      Like 'negM2' but takes a 'code_label' as operand 2 and emits code
       to jump to it if signed overflow occurs during the negation.
  
! 'absM2'
       Store the absolute value of operand 1 into operand 0.
  
! 'sqrtM2'
       Store the square root of operand 1 into operand 0.  Both operands
       have mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'rsqrtM2'
       Store the reciprocal of the square root of operand 1 into operand
       0.  Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
       On most architectures this pattern is only approximate, so either
!      its C condition or the 'TARGET_OPTAB_SUPPORTED_P' hook should check
       for the appropriate math flags.  (Using the C condition is more
!      direct, but using 'TARGET_OPTAB_SUPPORTED_P' can be useful if a
!      target-specific built-in also uses the 'rsqrtM2' pattern.)
  
!      This pattern is not allowed to 'FAIL'.
  
! 'fmodM3'
       Store the remainder of dividing operand 1 by operand 2 into operand
       0, rounded towards zero to an integer.  All operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'remainderM3'
       Store the remainder of dividing operand 1 by operand 2 into operand
       0, rounded to the nearest integer.  All operands have mode M, which
       is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'scalbM3'
!      Raise 'FLT_RADIX' to the power of operand 2, multiply it by operand
       1, and store the result in operand 0.  All operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'ldexpM3'
       Raise 2 to the power of operand 2, multiply it by operand 1, and
       store the result in operand 0.  Operands 0 and 1 have mode M, which
       is a scalar or vector floating-point mode.  Operand 2's mode has
       the same number of elements as M and each element is wide enough to
!      store an 'int'.  The integers are signed.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cosM2'
       Store the cosine of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'sinM2'
       Store the sine of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'sincosM3'
       Store the cosine of operand 2 into operand 0 and the sine of
       operand 2 into operand 1.  All operands have mode M, which is a
       scalar or vector floating-point mode.
  
       Targets that can calculate the sine and cosine simultaneously can
       implement this pattern as opposed to implementing individual
!      'sinM2' and 'cosM2' patterns.  The 'sin' and 'cos' built-in
!      functions will then be expanded to the 'sincosM3' pattern, with one
       of the output values left unused.
  
! 'tanM2'
       Store the tangent of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'asinM2'
       Store the arc sine of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'acosM2'
       Store the arc cosine of operand 1 into operand 0.  Both operands
       have mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'atanM2'
       Store the arc tangent of operand 1 into operand 0.  Both operands
       have mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'fegetroundM'
       Store the current machine floating-point rounding mode into operand
       0.  Operand 0 has mode M, which is scalar.  This pattern is used to
!      implement the 'fegetround' function from the ISO C99 standard.
  
! 'feclearexceptM'
! 'feraiseexceptM'
       Clears or raises the supported machine floating-point exceptions
       represented by the bits in operand 1.  Error status is stored as
       nonzero value in operand 0.  Both operands have mode M, which is a
!      scalar.  These patterns are used to implement the 'feclearexcept'
!      and 'feraiseexcept' functions from the ISO C99 standard.
  
! 'expM2'
       Raise e (the base of natural logarithms) to the power of operand 1
       and store the result in operand 0.  Both operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'expm1M2'
       Raise e (the base of natural logarithms) to the power of operand 1,
       subtract 1, and store the result in operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
       For inputs close to zero, the pattern is expected to be more
!      accurate than a separate 'expM2' and 'subM3' would be.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'exp10M2'
       Raise 10 to the power of operand 1 and store the result in operand
       0.  Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'exp2M2'
       Raise 2 to the power of operand 1 and store the result in operand
       0.  Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'logM2'
       Store the natural logarithm of operand 1 into operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
       mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'log1pM2'
       Add 1 to operand 1, compute the natural logarithm, and store the
       result in operand 0.  Both operands have mode M, which is a scalar
       or vector floating-point mode.
  
       For inputs close to zero, the pattern is expected to be more
!      accurate than a separate 'addM3' and 'logM2' would be.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'log10M2'
       Store the base-10 logarithm of operand 1 into operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
       mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'log2M2'
       Store the base-2 logarithm of operand 1 into operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
       mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'logbM2'
!      Store the base-'FLT_RADIX' logarithm of operand 1 into operand 0.
       Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'signbitM2'
       Store the sign bit of floating-point operand 1 in operand 0.  M is
       either a scalar or vector mode.  When it is a scalar, operand 1 has
!      mode M but operand 0 must have mode 'SImode'.  When M is a vector,
       operand 1 has the mode M.  operand 0's mode should be an vector
       integer mode which has the same number of elements and the same
       size as mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'significandM2'
       Store the significand of floating-point operand 1 in operand 0.
       Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'powM3'
       Store the value of operand 1 raised to the exponent operand 2 into
       operand 0.  All operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'atan2M3'
       Store the arc tangent (inverse tangent) of operand 1 divided by
       operand 2 into operand 0, using the signs of both arguments to
       determine the quadrant of the result.  All operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'floorM2'
       Store the largest integral value not greater than operand 1 in
       operand 0.  Both operands have mode M, which is a scalar or vector
!      floating-point mode.  If '-ffp-int-builtin-inexact' is in effect,
       the "inexact" exception may be raised for noninteger operands;
       otherwise, it may not.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'btruncM2'
       Round operand 1 to an integer, towards zero, and store the result
       in operand 0.  Both operands have mode M, which is a scalar or
!      vector floating-point mode.  If '-ffp-int-builtin-inexact' is in
       effect, the "inexact" exception may be raised for noninteger
       operands; otherwise, it may not.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'roundM2'
       Round operand 1 to the nearest integer, rounding away from zero in
       the event of a tie, and store the result in operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
!      mode.  If '-ffp-int-builtin-inexact' is in effect, the "inexact"
       exception may be raised for noninteger operands; otherwise, it may
       not.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'ceilM2'
       Store the smallest integral value not less than operand 1 in
       operand 0.  Both operands have mode M, which is a scalar or vector
!      floating-point mode.  If '-ffp-int-builtin-inexact' is in effect,
       the "inexact" exception may be raised for noninteger operands;
       otherwise, it may not.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'nearbyintM2'
       Round operand 1 to an integer, using the current rounding mode, and
       store the result in operand 0.  Do not raise an inexact condition
       when the result is different from the argument.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'rintM2'
       Round operand 1 to an integer, using the current rounding mode, and
       store the result in operand 0.  Raise an inexact condition when the
       result is different from the argument.  Both operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'lrintMN2'
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number according to the current rounding mode
       and store in operand 0 (which has mode N).
  
! 'lroundMN2'
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number rounding to nearest and away from zero
       and store in operand 0 (which has mode N).
  
! 'lfloorMN2'
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number rounding down and store in operand 0
       (which has mode N).
  
! 'lceilMN2'
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number rounding up and store in operand 0 (which
       has mode N).
  
! 'copysignM3'
       Store a value with the magnitude of operand 1 and the sign of
       operand 2 into operand 0.  All operands have mode M, which is a
       scalar or vector floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'xorsignM3'
!      Equivalent to 'op0 = op1 * copysign (1.0, op2)': store a value with
       the magnitude of operand 1 and the sign of operand 2 into operand
       0.  All operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'issignalingM2'
       Set operand 0 to 1 if operand 1 is a signaling NaN and to 0
       otherwise.
  
! 'cadd90M3'
       Perform vector add and subtract on even/odd number pairs.  The
       operation being matched is semantically described as
  
--- 28052,28385 ----
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((wide) op1 + (wide) op2) >> 1);
!      where the sign of ‘narrow’ determines whether this is a signed or
       unsigned operation.
  
! ‘avgM3_ceil’
! ‘uavgM3_ceil’
!      Like ‘avgM3_floor’ and ‘uavgM3_floor’, but round towards +Inf.
       This is equivalent to the C code:
            narrow op0, op1, op2;
            ...
            op0 = (narrow) (((wide) op1 + (wide) op2 + 1) >> 1);
  
! ‘bswapM2’
       Reverse the order of bytes of operand 1 and store the result in
       operand 0.
  
! ‘negM2’, ‘ssnegM2’, ‘usnegM2’
       Negate operand 1 and store the result in operand 0.
  
! ‘negvM3’
!      Like ‘negM2’ but takes a ‘code_label’ as operand 2 and emits code
       to jump to it if signed overflow occurs during the negation.
  
! ‘absM2’
       Store the absolute value of operand 1 into operand 0.
  
! ‘sqrtM2’
       Store the square root of operand 1 into operand 0.  Both operands
       have mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘rsqrtM2’
       Store the reciprocal of the square root of operand 1 into operand
       0.  Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
       On most architectures this pattern is only approximate, so either
!      its C condition or the ‘TARGET_OPTAB_SUPPORTED_P’ hook should check
       for the appropriate math flags.  (Using the C condition is more
!      direct, but using ‘TARGET_OPTAB_SUPPORTED_P’ can be useful if a
!      target-specific built-in also uses the ‘rsqrtM2’ pattern.)
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘fmodM3’
       Store the remainder of dividing operand 1 by operand 2 into operand
       0, rounded towards zero to an integer.  All operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘remainderM3’
       Store the remainder of dividing operand 1 by operand 2 into operand
       0, rounded to the nearest integer.  All operands have mode M, which
       is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘scalbM3’
!      Raise ‘FLT_RADIX’ to the power of operand 2, multiply it by operand
       1, and store the result in operand 0.  All operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘ldexpM3’
       Raise 2 to the power of operand 2, multiply it by operand 1, and
       store the result in operand 0.  Operands 0 and 1 have mode M, which
       is a scalar or vector floating-point mode.  Operand 2's mode has
       the same number of elements as M and each element is wide enough to
!      store an ‘int’.  The integers are signed.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cosM2’
       Store the cosine of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘sinM2’
       Store the sine of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘sincosM3’
       Store the cosine of operand 2 into operand 0 and the sine of
       operand 2 into operand 1.  All operands have mode M, which is a
       scalar or vector floating-point mode.
  
       Targets that can calculate the sine and cosine simultaneously can
       implement this pattern as opposed to implementing individual
!      ‘sinM2’ and ‘cosM2’ patterns.  The ‘sin’ and ‘cos’ built-in
!      functions will then be expanded to the ‘sincosM3’ pattern, with one
       of the output values left unused.
  
! ‘tanM2’
       Store the tangent of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘asinM2’
       Store the arc sine of operand 1 into operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘acosM2’
       Store the arc cosine of operand 1 into operand 0.  Both operands
       have mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘atanM2’
       Store the arc tangent of operand 1 into operand 0.  Both operands
       have mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘fegetroundM’
       Store the current machine floating-point rounding mode into operand
       0.  Operand 0 has mode M, which is scalar.  This pattern is used to
!      implement the ‘fegetround’ function from the ISO C99 standard.
  
! ‘feclearexceptM’
! ‘feraiseexceptM’
       Clears or raises the supported machine floating-point exceptions
       represented by the bits in operand 1.  Error status is stored as
       nonzero value in operand 0.  Both operands have mode M, which is a
!      scalar.  These patterns are used to implement the ‘feclearexcept’
!      and ‘feraiseexcept’ functions from the ISO C99 standard.
  
! ‘expM2’
       Raise e (the base of natural logarithms) to the power of operand 1
       and store the result in operand 0.  Both operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘expm1M2’
       Raise e (the base of natural logarithms) to the power of operand 1,
       subtract 1, and store the result in operand 0.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
       For inputs close to zero, the pattern is expected to be more
!      accurate than a separate ‘expM2’ and ‘subM3’ would be.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘exp10M2’
       Raise 10 to the power of operand 1 and store the result in operand
       0.  Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘exp2M2’
       Raise 2 to the power of operand 1 and store the result in operand
       0.  Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘logM2’
       Store the natural logarithm of operand 1 into operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
       mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘log1pM2’
       Add 1 to operand 1, compute the natural logarithm, and store the
       result in operand 0.  Both operands have mode M, which is a scalar
       or vector floating-point mode.
  
       For inputs close to zero, the pattern is expected to be more
!      accurate than a separate ‘addM3’ and ‘logM2’ would be.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘log10M2’
       Store the base-10 logarithm of operand 1 into operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
       mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘log2M2’
       Store the base-2 logarithm of operand 1 into operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
       mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘logbM2’
!      Store the base-‘FLT_RADIX’ logarithm of operand 1 into operand 0.
       Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘signbitM2’
       Store the sign bit of floating-point operand 1 in operand 0.  M is
       either a scalar or vector mode.  When it is a scalar, operand 1 has
!      mode M but operand 0 must have mode ‘SImode’.  When M is a vector,
       operand 1 has the mode M.  operand 0's mode should be an vector
       integer mode which has the same number of elements and the same
       size as mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘significandM2’
       Store the significand of floating-point operand 1 in operand 0.
       Both operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘powM3’
       Store the value of operand 1 raised to the exponent operand 2 into
       operand 0.  All operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘atan2M3’
       Store the arc tangent (inverse tangent) of operand 1 divided by
       operand 2 into operand 0, using the signs of both arguments to
       determine the quadrant of the result.  All operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘floorM2’
       Store the largest integral value not greater than operand 1 in
       operand 0.  Both operands have mode M, which is a scalar or vector
!      floating-point mode.  If ‘-ffp-int-builtin-inexact’ is in effect,
       the "inexact" exception may be raised for noninteger operands;
       otherwise, it may not.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘btruncM2’
       Round operand 1 to an integer, towards zero, and store the result
       in operand 0.  Both operands have mode M, which is a scalar or
!      vector floating-point mode.  If ‘-ffp-int-builtin-inexact’ is in
       effect, the "inexact" exception may be raised for noninteger
       operands; otherwise, it may not.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘roundM2’
       Round operand 1 to the nearest integer, rounding away from zero in
       the event of a tie, and store the result in operand 0.  Both
       operands have mode M, which is a scalar or vector floating-point
!      mode.  If ‘-ffp-int-builtin-inexact’ is in effect, the "inexact"
       exception may be raised for noninteger operands; otherwise, it may
       not.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘ceilM2’
       Store the smallest integral value not less than operand 1 in
       operand 0.  Both operands have mode M, which is a scalar or vector
!      floating-point mode.  If ‘-ffp-int-builtin-inexact’ is in effect,
       the "inexact" exception may be raised for noninteger operands;
       otherwise, it may not.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘nearbyintM2’
       Round operand 1 to an integer, using the current rounding mode, and
       store the result in operand 0.  Do not raise an inexact condition
       when the result is different from the argument.  Both operands have
       mode M, which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘rintM2’
       Round operand 1 to an integer, using the current rounding mode, and
       store the result in operand 0.  Raise an inexact condition when the
       result is different from the argument.  Both operands have mode M,
       which is a scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘lrintMN2’
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number according to the current rounding mode
       and store in operand 0 (which has mode N).
  
! ‘lroundMN2’
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number rounding to nearest and away from zero
       and store in operand 0 (which has mode N).
  
! ‘lfloorMN2’
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number rounding down and store in operand 0
       (which has mode N).
  
! ‘lceilMN2’
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number rounding up and store in operand 0 (which
       has mode N).
  
! ‘copysignM3’
       Store a value with the magnitude of operand 1 and the sign of
       operand 2 into operand 0.  All operands have mode M, which is a
       scalar or vector floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘xorsignM3’
!      Equivalent to ‘op0 = op1 * copysign (1.0, op2)’: store a value with
       the magnitude of operand 1 and the sign of operand 2 into operand
       0.  All operands have mode M, which is a scalar or vector
       floating-point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘issignalingM2’
       Set operand 0 to 1 if operand 1 is a signaling NaN and to 0
       otherwise.
  
! ‘cadd90M3’
       Perform vector add and subtract on even/odd number pairs.  The
       operation being matched is semantically described as
  
*************** pattern to accomplish a certain task.
*** 28398,28406 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cadd270M3'
       Perform vector add and subtract on even/odd number pairs.  The
       operation being matched is semantically described as
  
--- 28399,28407 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cadd270M3’
       Perform vector add and subtract on even/odd number pairs.  The
       operation being matched is semantically described as
  
*************** pattern to accomplish a certain task.
*** 28420,28428 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cmlaM4'
       Perform a vector multiply and accumulate that is semantically the
       same as a multiply and accumulate of complex numbers.
  
--- 28421,28429 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cmlaM4’
       Perform a vector multiply and accumulate that is semantically the
       same as a multiply and accumulate of complex numbers.
  
*************** pattern to accomplish a certain task.
*** 28440,28448 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cmla_conjM4'
       Perform a vector multiply by conjugate and accumulate that is
       semantically the same as a multiply and accumulate of complex
       numbers where the second multiply arguments is conjugated.
--- 28441,28449 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cmla_conjM4’
       Perform a vector multiply by conjugate and accumulate that is
       semantically the same as a multiply and accumulate of complex
       numbers where the second multiply arguments is conjugated.
*************** pattern to accomplish a certain task.
*** 28461,28469 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cmlsM4'
       Perform a vector multiply and subtract that is semantically the
       same as a multiply and subtract of complex numbers.
  
--- 28462,28470 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cmlsM4’
       Perform a vector multiply and subtract that is semantically the
       same as a multiply and subtract of complex numbers.
  
*************** pattern to accomplish a certain task.
*** 28481,28489 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cmls_conjM4'
       Perform a vector multiply by conjugate and subtract that is
       semantically the same as a multiply and subtract of complex numbers
       where the second multiply arguments is conjugated.
--- 28482,28490 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cmls_conjM4’
       Perform a vector multiply by conjugate and subtract that is
       semantically the same as a multiply and subtract of complex numbers
       where the second multiply arguments is conjugated.
*************** pattern to accomplish a certain task.
*** 28502,28510 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cmulM4'
       Perform a vector multiply that is semantically the same as multiply
       of complex numbers.
  
--- 28503,28511 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cmulM4’
       Perform a vector multiply that is semantically the same as multiply
       of complex numbers.
  
*************** pattern to accomplish a certain task.
*** 28521,28529 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'cmul_conjM4'
       Perform a vector multiply by conjugate that is semantically the
       same as a multiply of complex numbers where the second multiply
       arguments is conjugated.
--- 28522,28530 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘cmul_conjM4’
       Perform a vector multiply by conjugate that is semantically the
       same as a multiply of complex numbers where the second multiply
       arguments is conjugated.
*************** pattern to accomplish a certain task.
*** 28541,28549 ****
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'ffsM2'
       Store into operand 0 one plus the index of the least significant
       1-bit of operand 1.  If operand 1 is zero, store zero.
  
--- 28542,28550 ----
  
       The operation is only supported for vector modes M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘ffsM2’
       Store into operand 0 one plus the index of the least significant
       1-bit of operand 1.  If operand 1 is zero, store zero.
  
*************** pattern to accomplish a certain task.
*** 28551,28562 ****
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as 'int').  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'clrsbM2'
       Count leading redundant sign bits.  Store into operand 0 the number
       of redundant sign bits in operand 1, starting at the most
       significant bit position.  A redundant sign bit is defined as any
--- 28552,28563 ----
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as ‘int’).  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘clrsbM2’
       Count leading redundant sign bits.  Store into operand 0 the number
       of redundant sign bits in operand 1, starting at the most
       significant bit position.  A redundant sign bit is defined as any
*************** pattern to accomplish a certain task.
*** 28567,28620 ****
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as 'int').  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'clzM2'
       Store into operand 0 the number of leading 0-bits in operand 1,
       starting at the most significant bit position.  If operand 1 is 0,
!      the 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
       result is undefined or has a useful value.
  
       M is either a scalar or vector integer mode.  When it is a scalar,
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as 'int').  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'ctzM2'
       Store into operand 0 the number of trailing 0-bits in operand 1,
       starting at the least significant bit position.  If operand 1 is 0,
!      the 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
       result is undefined or has a useful value.
  
       M is either a scalar or vector integer mode.  When it is a scalar,
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as 'int').  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'popcountM2'
       Store into operand 0 the number of 1-bits in operand 1.
  
       M is either a scalar or vector integer mode.  When it is a scalar,
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as 'int').  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'parityM2'
       Store into operand 0 the parity of operand 1, i.e. the number of
       1-bits in operand 1 modulo 2.
  
--- 28568,28621 ----
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as ‘int’).  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘clzM2’
       Store into operand 0 the number of leading 0-bits in operand 1,
       starting at the most significant bit position.  If operand 1 is 0,
!      the ‘CLZ_DEFINED_VALUE_AT_ZERO’ (*note Misc::) macro defines if the
       result is undefined or has a useful value.
  
       M is either a scalar or vector integer mode.  When it is a scalar,
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as ‘int’).  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘ctzM2’
       Store into operand 0 the number of trailing 0-bits in operand 1,
       starting at the least significant bit position.  If operand 1 is 0,
!      the ‘CTZ_DEFINED_VALUE_AT_ZERO’ (*note Misc::) macro defines if the
       result is undefined or has a useful value.
  
       M is either a scalar or vector integer mode.  When it is a scalar,
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as ‘int’).  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘popcountM2’
       Store into operand 0 the number of 1-bits in operand 1.
  
       M is either a scalar or vector integer mode.  When it is a scalar,
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as ‘int’).  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘parityM2’
       Store into operand 0 the parity of operand 1, i.e. the number of
       1-bits in operand 1 modulo 2.
  
*************** pattern to accomplish a certain task.
*** 28622,28651 ****
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as 'int').  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to 'FAIL'.
  
! 'one_cmplM2'
       Store the bitwise-complement of operand 1 into operand 0.
  
! 'cpymemM'
       Block copy instruction.  The destination and source blocks of
!      memory are the first two operands, and both are 'mem:BLK's with an
!      address in mode 'Pmode'.
  
       The number of bytes to copy is the third operand, in mode M.
!      Usually, you specify 'Pmode' for M.  However, if you can generate
       better code knowing the range of valid lengths is smaller than
       those representable in a full Pmode pointer, you should provide a
       pattern with a mode corresponding to the range of values you can
!      handle efficiently (e.g., 'QImode' for values in the range 0-127;
       note we avoid numbers that appear negative) and also a pattern with
!      'Pmode'.
  
       The fourth operand is the known shared alignment of the source and
!      destination, in the form of a 'const_int' rtx.  Thus, if the
       compiler knows that both source and destination are word-aligned,
       it may provide the value 4 for this operand.
  
--- 28623,28652 ----
       operand 1 has mode M but operand 0 can have whatever scalar integer
       mode is suitable for the target.  The compiler will insert
       conversion instructions as necessary (typically to convert the
!      result to the same width as ‘int’).  When M is a vector, both
       operands must have mode M.
  
!      This pattern is not allowed to ‘FAIL’.
  
! ‘one_cmplM2’
       Store the bitwise-complement of operand 1 into operand 0.
  
! ‘cpymemM’
       Block copy instruction.  The destination and source blocks of
!      memory are the first two operands, and both are ‘mem:BLK’s with an
!      address in mode ‘Pmode’.
  
       The number of bytes to copy is the third operand, in mode M.
!      Usually, you specify ‘Pmode’ for M.  However, if you can generate
       better code knowing the range of valid lengths is smaller than
       those representable in a full Pmode pointer, you should provide a
       pattern with a mode corresponding to the range of values you can
!      handle efficiently (e.g., ‘QImode’ for values in the range 0-127;
       note we avoid numbers that appear negative) and also a pattern with
!      ‘Pmode’.
  
       The fourth operand is the known shared alignment of the source and
!      destination, in the form of a ‘const_int’ rtx.  Thus, if the
       compiler knows that both source and destination are word-aligned,
       it may provide the value 4 for this operand.
  
*************** pattern to accomplish a certain task.
*** 28654,28689 ****
       in operand 4 in a way that the blocks are not required to be
       aligned according to it in all cases.  This expected alignment is
       also in bytes, just like operand 4.  Expected size, when unknown,
!      is set to '(const_int -1)'.
  
!      Descriptions of multiple 'cpymemM' patterns can only be beneficial
       if the patterns for smaller modes have fewer restrictions on their
       first, second and fourth operands.  Note that the mode M in
!      'cpymemM' does not impose any restriction on the mode of
       individually copied data units in the block.
  
!      The 'cpymemM' patterns need not give special consideration to the
       possibility that the source and destination strings might overlap.
       An exception is the case where source and destination are equal,
       this case needs to be handled correctly.  These patterns are used
!      to do inline expansion of '__builtin_memcpy'.
  
! 'movmemM'
       Block move instruction.  The destination and source blocks of
!      memory are the first two operands, and both are 'mem:BLK's with an
!      address in mode 'Pmode'.
  
       The number of bytes to copy is the third operand, in mode M.
!      Usually, you specify 'Pmode' for M.  However, if you can generate
       better code knowing the range of valid lengths is smaller than
       those representable in a full Pmode pointer, you should provide a
       pattern with a mode corresponding to the range of values you can
!      handle efficiently (e.g., 'QImode' for values in the range 0-127;
       note we avoid numbers that appear negative) and also a pattern with
!      'Pmode'.
  
       The fourth operand is the known shared alignment of the source and
!      destination, in the form of a 'const_int' rtx.  Thus, if the
       compiler knows that both source and destination are word-aligned,
       it may provide the value 4 for this operand.
  
--- 28655,28690 ----
       in operand 4 in a way that the blocks are not required to be
       aligned according to it in all cases.  This expected alignment is
       also in bytes, just like operand 4.  Expected size, when unknown,
!      is set to ‘(const_int -1)’.
  
!      Descriptions of multiple ‘cpymemM’ patterns can only be beneficial
       if the patterns for smaller modes have fewer restrictions on their
       first, second and fourth operands.  Note that the mode M in
!      ‘cpymemM’ does not impose any restriction on the mode of
       individually copied data units in the block.
  
!      The ‘cpymemM’ patterns need not give special consideration to the
       possibility that the source and destination strings might overlap.
       An exception is the case where source and destination are equal,
       this case needs to be handled correctly.  These patterns are used
!      to do inline expansion of ‘__builtin_memcpy’.
  
! ‘movmemM’
       Block move instruction.  The destination and source blocks of
!      memory are the first two operands, and both are ‘mem:BLK’s with an
!      address in mode ‘Pmode’.
  
       The number of bytes to copy is the third operand, in mode M.
!      Usually, you specify ‘Pmode’ for M.  However, if you can generate
       better code knowing the range of valid lengths is smaller than
       those representable in a full Pmode pointer, you should provide a
       pattern with a mode corresponding to the range of values you can
!      handle efficiently (e.g., ‘QImode’ for values in the range 0-127;
       note we avoid numbers that appear negative) and also a pattern with
!      ‘Pmode’.
  
       The fourth operand is the known shared alignment of the source and
!      destination, in the form of a ‘const_int’ rtx.  Thus, if the
       compiler knows that both source and destination are word-aligned,
       it may provide the value 4 for this operand.
  
*************** pattern to accomplish a certain task.
*** 28692,28731 ****
       in operand 4 in a way that the blocks are not required to be
       aligned according to it in all cases.  This expected alignment is
       also in bytes, just like operand 4.  Expected size, when unknown,
!      is set to '(const_int -1)'.
  
!      Descriptions of multiple 'movmemM' patterns can only be beneficial
       if the patterns for smaller modes have fewer restrictions on their
       first, second and fourth operands.  Note that the mode M in
!      'movmemM' does not impose any restriction on the mode of
       individually copied data units in the block.
  
!      The 'movmemM' patterns must correctly handle the case where the
       source and destination strings overlap.  These patterns are used to
!      do inline expansion of '__builtin_memmove'.
  
! 'movstr'
!      String copy instruction, with 'stpcpy' semantics.  Operand 0 is an
!      output operand in mode 'Pmode'.  The addresses of the destination
!      and source strings are operands 1 and 2, and both are 'mem:BLK's
!      with addresses in mode 'Pmode'.  The execution of the expansion of
       this pattern should store in operand 0 the address in which the
!      'NUL' terminator was stored in the destination string.
  
       This pattern has also several optional operands that are same as in
!      'setmem'.
  
! 'setmemM'
       Block set instruction.  The destination string is the first
!      operand, given as a 'mem:BLK' whose address is in mode 'Pmode'.
       The number of bytes to set is the second operand, in mode M.  The
       value to initialize the memory with is the third operand.  Targets
       that only support the clearing of memory should reject any value
!      that is not the constant 0.  See 'cpymemM' for a discussion of the
       choice of mode.
  
       The fourth operand is the known alignment of the destination, in
!      the form of a 'const_int' rtx.  Thus, if the compiler knows that
       the destination is word-aligned, it may provide the value 4 for
       this operand.
  
--- 28693,28732 ----
       in operand 4 in a way that the blocks are not required to be
       aligned according to it in all cases.  This expected alignment is
       also in bytes, just like operand 4.  Expected size, when unknown,
!      is set to ‘(const_int -1)’.
  
!      Descriptions of multiple ‘movmemM’ patterns can only be beneficial
       if the patterns for smaller modes have fewer restrictions on their
       first, second and fourth operands.  Note that the mode M in
!      ‘movmemM’ does not impose any restriction on the mode of
       individually copied data units in the block.
  
!      The ‘movmemM’ patterns must correctly handle the case where the
       source and destination strings overlap.  These patterns are used to
!      do inline expansion of ‘__builtin_memmove’.
  
! ‘movstr’
!      String copy instruction, with ‘stpcpy’ semantics.  Operand 0 is an
!      output operand in mode ‘Pmode’.  The addresses of the destination
!      and source strings are operands 1 and 2, and both are ‘mem:BLK’s
!      with addresses in mode ‘Pmode’.  The execution of the expansion of
       this pattern should store in operand 0 the address in which the
!      ‘NUL’ terminator was stored in the destination string.
  
       This pattern has also several optional operands that are same as in
!      ‘setmem’.
  
! ‘setmemM’
       Block set instruction.  The destination string is the first
!      operand, given as a ‘mem:BLK’ whose address is in mode ‘Pmode’.
       The number of bytes to set is the second operand, in mode M.  The
       value to initialize the memory with is the third operand.  Targets
       that only support the clearing of memory should reject any value
!      that is not the constant 0.  See ‘cpymemM’ for a discussion of the
       choice of mode.
  
       The fourth operand is the known alignment of the destination, in
!      the form of a ‘const_int’ rtx.  Thus, if the compiler knows that
       the destination is word-aligned, it may provide the value 4 for
       this operand.
  
*************** pattern to accomplish a certain task.
*** 28734,28751 ****
       in operand 4 in a way that the blocks are not required to be
       aligned according to it in all cases.  This expected alignment is
       also in bytes, just like operand 4.  Expected size, when unknown,
!      is set to '(const_int -1)'.  Operand 7 is the minimal size of the
       block and operand 8 is the maximal size of the block (NULL if it
       cannot be represented as CONST_INT). Operand 9 is the probable
       maximal size (i.e. we cannot rely on it for correctness, but it can
       be used for choosing proper code sequence for a given size).
  
!      The use for multiple 'setmemM' is as for 'cpymemM'.
  
! 'cmpstrnM'
       String compare instruction, with five operands.  Operand 0 is the
       output; it has mode M.  The remaining four operands are like the
!      operands of 'cpymemM'.  The two memory blocks specified are
       compared byte by byte in lexicographic order starting at the
       beginning of each string.  The instruction is not allowed to
       prefetch more than one byte at a time since either string may end
--- 28735,28752 ----
       in operand 4 in a way that the blocks are not required to be
       aligned according to it in all cases.  This expected alignment is
       also in bytes, just like operand 4.  Expected size, when unknown,
!      is set to ‘(const_int -1)’.  Operand 7 is the minimal size of the
       block and operand 8 is the maximal size of the block (NULL if it
       cannot be represented as CONST_INT). Operand 9 is the probable
       maximal size (i.e. we cannot rely on it for correctness, but it can
       be used for choosing proper code sequence for a given size).
  
!      The use for multiple ‘setmemM’ is as for ‘cpymemM’.
  
! ‘cmpstrnM’
       String compare instruction, with five operands.  Operand 0 is the
       output; it has mode M.  The remaining four operands are like the
!      operands of ‘cpymemM’.  The two memory blocks specified are
       compared byte by byte in lexicographic order starting at the
       beginning of each string.  The instruction is not allowed to
       prefetch more than one byte at a time since either string may end
*************** pattern to accomplish a certain task.
*** 28755,28768 ****
       effect of the instruction is to store a value in operand 0 whose
       sign indicates the result of the comparison.
  
! 'cmpstrM'
       String compare instruction, without known maximum length.  Operand
       0 is the output; it has mode M.  The second and third operand are
!      the blocks of memory to be compared; both are 'mem:BLK' with an
!      address in mode 'Pmode'.
  
       The fourth operand is the known shared alignment of the source and
!      destination, in the form of a 'const_int' rtx.  Thus, if the
       compiler knows that both source and destination are word-aligned,
       it may provide the value 4 for this operand.
  
--- 28756,28769 ----
       effect of the instruction is to store a value in operand 0 whose
       sign indicates the result of the comparison.
  
! ‘cmpstrM’
       String compare instruction, without known maximum length.  Operand
       0 is the output; it has mode M.  The second and third operand are
!      the blocks of memory to be compared; both are ‘mem:BLK’ with an
!      address in mode ‘Pmode’.
  
       The fourth operand is the known shared alignment of the source and
!      destination, in the form of a ‘const_int’ rtx.  Thus, if the
       compiler knows that both source and destination are word-aligned,
       it may provide the value 4 for this operand.
  
*************** pattern to accomplish a certain task.
*** 28776,28855 ****
       store a value in operand 0 whose sign indicates the result of the
       comparison.
  
! 'cmpmemM'
       Block compare instruction, with five operands like the operands of
!      'cmpstrM'.  The two memory blocks specified are compared byte by
       byte in lexicographic order starting at the beginning of each
!      block.  Unlike 'cmpstrM' the instruction can prefetch any bytes in
!      the two memory blocks.  Also unlike 'cmpstrM' the comparison will
       not stop if both bytes are zero.  The effect of the instruction is
       to store a value in operand 0 whose sign indicates the result of
       the comparison.
  
! 'strlenM'
       Compute the length of a string, with three operands.  Operand 0 is
!      the result (of mode M), operand 1 is a 'mem' referring to the first
       character of the string, operand 2 is the character to search for
       (normally zero), and operand 3 is a constant describing the known
       alignment of the beginning of the string.
  
! 'rawmemchrM'
       Scan memory referred to by operand 1 for the first occurrence of
!      operand 2.  Operand 1 is a 'mem' and operand 2 a 'const_int' of
       mode M.  Operand 0 is the result, i.e., a pointer to the first
       occurrence of operand 2 in the memory block given by operand 1.
  
! 'floatMN2'
       Convert signed integer operand 1 (valid for fixed point mode M) to
       floating point mode N and store in operand 0 (which has mode N).
  
! 'floatunsMN2'
       Convert unsigned integer operand 1 (valid for fixed point mode M)
       to floating point mode N and store in operand 0 (which has mode N).
  
! 'fixMN2'
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number and store in operand 0 (which has mode
       N).  This instruction's result is defined only when the value of
       operand 1 is an integer.
  
       If the machine description defines this pattern, it also needs to
!      define the 'ftrunc' pattern.
  
! 'fixunsMN2'
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as an unsigned number and store in operand 0 (which has mode
       N).  This instruction's result is defined only when the value of
       operand 1 is an integer.
  
! 'ftruncM2'
       Convert operand 1 (valid for floating point mode M) to an integer
       value, still represented in floating point mode M, and store it in
       operand 0 (valid for floating point mode M).
  
! 'fix_truncMN2'
!      Like 'fixMN2' but works for any floating point value of mode M by
       converting the value to an integer.
  
! 'fixuns_truncMN2'
!      Like 'fixunsMN2' but works for any floating point value of mode M
       by converting the value to an integer.
  
! 'truncMN2'
       Truncate operand 1 (valid for mode M) to mode N and store in
       operand 0 (which has mode N).  Both modes must be fixed point or
       both floating point.
  
! 'extendMN2'
       Sign-extend operand 1 (valid for mode M) to mode N and store in
       operand 0 (which has mode N).  Both modes must be fixed point or
       both floating point.
  
! 'zero_extendMN2'
       Zero-extend operand 1 (valid for mode M) to mode N and store in
       operand 0 (which has mode N).  Both modes must be fixed point.
  
! 'fractMN2'
       Convert operand 1 of mode M to mode N and store in operand 0 (which
       has mode N).  Mode M and mode N could be fixed-point to
       fixed-point, signed integer to fixed-point, fixed-point to signed
--- 28777,28856 ----
       store a value in operand 0 whose sign indicates the result of the
       comparison.
  
! ‘cmpmemM’
       Block compare instruction, with five operands like the operands of
!      ‘cmpstrM’.  The two memory blocks specified are compared byte by
       byte in lexicographic order starting at the beginning of each
!      block.  Unlike ‘cmpstrM’ the instruction can prefetch any bytes in
!      the two memory blocks.  Also unlike ‘cmpstrM’ the comparison will
       not stop if both bytes are zero.  The effect of the instruction is
       to store a value in operand 0 whose sign indicates the result of
       the comparison.
  
! ‘strlenM’
       Compute the length of a string, with three operands.  Operand 0 is
!      the result (of mode M), operand 1 is a ‘mem’ referring to the first
       character of the string, operand 2 is the character to search for
       (normally zero), and operand 3 is a constant describing the known
       alignment of the beginning of the string.
  
! ‘rawmemchrM’
       Scan memory referred to by operand 1 for the first occurrence of
!      operand 2.  Operand 1 is a ‘mem’ and operand 2 a ‘const_int’ of
       mode M.  Operand 0 is the result, i.e., a pointer to the first
       occurrence of operand 2 in the memory block given by operand 1.
  
! ‘floatMN2’
       Convert signed integer operand 1 (valid for fixed point mode M) to
       floating point mode N and store in operand 0 (which has mode N).
  
! ‘floatunsMN2’
       Convert unsigned integer operand 1 (valid for fixed point mode M)
       to floating point mode N and store in operand 0 (which has mode N).
  
! ‘fixMN2’
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as a signed number and store in operand 0 (which has mode
       N).  This instruction's result is defined only when the value of
       operand 1 is an integer.
  
       If the machine description defines this pattern, it also needs to
!      define the ‘ftrunc’ pattern.
  
! ‘fixunsMN2’
       Convert operand 1 (valid for floating point mode M) to fixed point
       mode N as an unsigned number and store in operand 0 (which has mode
       N).  This instruction's result is defined only when the value of
       operand 1 is an integer.
  
! ‘ftruncM2’
       Convert operand 1 (valid for floating point mode M) to an integer
       value, still represented in floating point mode M, and store it in
       operand 0 (valid for floating point mode M).
  
! ‘fix_truncMN2’
!      Like ‘fixMN2’ but works for any floating point value of mode M by
       converting the value to an integer.
  
! ‘fixuns_truncMN2’
!      Like ‘fixunsMN2’ but works for any floating point value of mode M
       by converting the value to an integer.
  
! ‘truncMN2’
       Truncate operand 1 (valid for mode M) to mode N and store in
       operand 0 (which has mode N).  Both modes must be fixed point or
       both floating point.
  
! ‘extendMN2’
       Sign-extend operand 1 (valid for mode M) to mode N and store in
       operand 0 (which has mode N).  Both modes must be fixed point or
       both floating point.
  
! ‘zero_extendMN2’
       Zero-extend operand 1 (valid for mode M) to mode N and store in
       operand 0 (which has mode N).  Both modes must be fixed point.
  
! ‘fractMN2’
       Convert operand 1 of mode M to mode N and store in operand 0 (which
       has mode N).  Mode M and mode N could be fixed-point to
       fixed-point, signed integer to fixed-point, fixed-point to signed
*************** pattern to accomplish a certain task.
*** 28857,28943 ****
       floating-point.  When overflows or underflows happen, the results
       are undefined.
  
! 'satfractMN2'
       Convert operand 1 of mode M to mode N and store in operand 0 (which
       has mode N).  Mode M and mode N could be fixed-point to
       fixed-point, signed integer to fixed-point, or floating-point to
       fixed-point.  When overflows or underflows happen, the instruction
       saturates the results to the maximum or the minimum.
  
! 'fractunsMN2'
       Convert operand 1 of mode M to mode N and store in operand 0 (which
       has mode N).  Mode M and mode N could be unsigned integer to
       fixed-point, or fixed-point to unsigned integer.  When overflows or
       underflows happen, the results are undefined.
  
! 'satfractunsMN2'
       Convert unsigned integer operand 1 of mode M to fixed-point mode N
       and store in operand 0 (which has mode N).  When overflows or
       underflows happen, the instruction saturates the results to the
       maximum or the minimum.
  
! 'extvM'
       Extract a bit-field from register operand 1, sign-extend it, and
       store it in operand 0.  Operand 2 specifies the width of the field
       in bits and operand 3 the starting bit, which counts from the most
!      significant bit if 'BITS_BIG_ENDIAN' is true and from the least
       significant bit otherwise.
  
       Operands 0 and 1 both have mode M.  Operands 2 and 3 have a
       target-specific mode.
  
! 'extvmisalignM'
       Extract a bit-field from memory operand 1, sign extend it, and
       store it in operand 0.  Operand 2 specifies the width in bits and
       operand 3 the starting bit.  The starting bit is always somewhere
       in the first byte of operand 1; it counts from the most significant
!      bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit
       otherwise.
  
!      Operand 0 has mode M while operand 1 has 'BLK' mode.  Operands 2
       and 3 have a target-specific mode.
  
       The instruction must not read beyond the last byte of the
       bit-field.
  
! 'extzvM'
!      Like 'extvM' except that the bit-field value is zero-extended.
  
! 'extzvmisalignM'
!      Like 'extvmisalignM' except that the bit-field value is
       zero-extended.
  
! 'insvM'
       Insert operand 3 into a bit-field of register operand 0.  Operand 1
       specifies the width of the field in bits and operand 2 the starting
       bit, which counts from the most significant bit if
!      'BITS_BIG_ENDIAN' is true and from the least significant bit
       otherwise.
  
       Operands 0 and 3 both have mode M.  Operands 1 and 2 have a
       target-specific mode.
  
! 'insvmisalignM'
       Insert operand 3 into a bit-field of memory operand 0.  Operand 1
       specifies the width of the field in bits and operand 2 the starting
       bit.  The starting bit is always somewhere in the first byte of
       operand 0; it counts from the most significant bit if
!      'BITS_BIG_ENDIAN' is true and from the least significant bit
       otherwise.
  
!      Operand 3 has mode M while operand 0 has 'BLK' mode.  Operands 1
       and 2 have a target-specific mode.
  
       The instruction must not read or write beyond the last byte of the
       bit-field.
  
! 'extv'
       Extract a bit-field from operand 1 (a register or memory operand),
       where operand 2 specifies the width in bits and operand 3 the
       starting bit, and store it in operand 0.  Operand 0 must have mode
!      'word_mode'.  Operand 1 may have mode 'byte_mode' or 'word_mode';
!      often 'word_mode' is allowed only for registers.  Operands 2 and 3
!      must be valid for 'word_mode'.
  
       The RTL generation pass generates this instruction only with
       constants for operands 2 and 3 and the constant is never zero for
--- 28858,28944 ----
       floating-point.  When overflows or underflows happen, the results
       are undefined.
  
! ‘satfractMN2’
       Convert operand 1 of mode M to mode N and store in operand 0 (which
       has mode N).  Mode M and mode N could be fixed-point to
       fixed-point, signed integer to fixed-point, or floating-point to
       fixed-point.  When overflows or underflows happen, the instruction
       saturates the results to the maximum or the minimum.
  
! ‘fractunsMN2’
       Convert operand 1 of mode M to mode N and store in operand 0 (which
       has mode N).  Mode M and mode N could be unsigned integer to
       fixed-point, or fixed-point to unsigned integer.  When overflows or
       underflows happen, the results are undefined.
  
! ‘satfractunsMN2’
       Convert unsigned integer operand 1 of mode M to fixed-point mode N
       and store in operand 0 (which has mode N).  When overflows or
       underflows happen, the instruction saturates the results to the
       maximum or the minimum.
  
! ‘extvM’
       Extract a bit-field from register operand 1, sign-extend it, and
       store it in operand 0.  Operand 2 specifies the width of the field
       in bits and operand 3 the starting bit, which counts from the most
!      significant bit if ‘BITS_BIG_ENDIAN’ is true and from the least
       significant bit otherwise.
  
       Operands 0 and 1 both have mode M.  Operands 2 and 3 have a
       target-specific mode.
  
! ‘extvmisalignM’
       Extract a bit-field from memory operand 1, sign extend it, and
       store it in operand 0.  Operand 2 specifies the width in bits and
       operand 3 the starting bit.  The starting bit is always somewhere
       in the first byte of operand 1; it counts from the most significant
!      bit if ‘BITS_BIG_ENDIAN’ is true and from the least significant bit
       otherwise.
  
!      Operand 0 has mode M while operand 1 has ‘BLK’ mode.  Operands 2
       and 3 have a target-specific mode.
  
       The instruction must not read beyond the last byte of the
       bit-field.
  
! ‘extzvM’
!      Like ‘extvM’ except that the bit-field value is zero-extended.
  
! ‘extzvmisalignM’
!      Like ‘extvmisalignM’ except that the bit-field value is
       zero-extended.
  
! ‘insvM’
       Insert operand 3 into a bit-field of register operand 0.  Operand 1
       specifies the width of the field in bits and operand 2 the starting
       bit, which counts from the most significant bit if
!      ‘BITS_BIG_ENDIAN’ is true and from the least significant bit
       otherwise.
  
       Operands 0 and 3 both have mode M.  Operands 1 and 2 have a
       target-specific mode.
  
! ‘insvmisalignM’
       Insert operand 3 into a bit-field of memory operand 0.  Operand 1
       specifies the width of the field in bits and operand 2 the starting
       bit.  The starting bit is always somewhere in the first byte of
       operand 0; it counts from the most significant bit if
!      ‘BITS_BIG_ENDIAN’ is true and from the least significant bit
       otherwise.
  
!      Operand 3 has mode M while operand 0 has ‘BLK’ mode.  Operands 1
       and 2 have a target-specific mode.
  
       The instruction must not read or write beyond the last byte of the
       bit-field.
  
! ‘extv’
       Extract a bit-field from operand 1 (a register or memory operand),
       where operand 2 specifies the width in bits and operand 3 the
       starting bit, and store it in operand 0.  Operand 0 must have mode
!      ‘word_mode’.  Operand 1 may have mode ‘byte_mode’ or ‘word_mode’;
!      often ‘word_mode’ is allowed only for registers.  Operands 2 and 3
!      must be valid for ‘word_mode’.
  
       The RTL generation pass generates this instruction only with
       constants for operands 2 and 3 and the constant is never zero for
*************** pattern to accomplish a certain task.
*** 28946,28975 ****
       The bit-field value is sign-extended to a full word integer before
       it is stored in operand 0.
  
!      This pattern is deprecated; please use 'extvM' and 'extvmisalignM'
       instead.
  
! 'extzv'
!      Like 'extv' except that the bit-field value is zero-extended.
  
!      This pattern is deprecated; please use 'extzvM' and
!      'extzvmisalignM' instead.
  
! 'insv'
!      Store operand 3 (which must be valid for 'word_mode') into a
       bit-field in operand 0, where operand 1 specifies the width in bits
       and operand 2 the starting bit.  Operand 0 may have mode
!      'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for
!      registers.  Operands 1 and 2 must be valid for 'word_mode'.
  
       The RTL generation pass generates this instruction only with
       constants for operands 1 and 2 and the constant is never zero for
       operand 1.
  
!      This pattern is deprecated; please use 'insvM' and 'insvmisalignM'
       instead.
  
! 'movMODEcc'
       Conditionally move operand 2 or operand 3 into operand 0 according
       to the comparison in operand 1.  If the comparison is true, operand
       2 is moved into operand 0, otherwise operand 3 is moved.
--- 28947,28976 ----
       The bit-field value is sign-extended to a full word integer before
       it is stored in operand 0.
  
!      This pattern is deprecated; please use ‘extvM’ and ‘extvmisalignM’
       instead.
  
! ‘extzv’
!      Like ‘extv’ except that the bit-field value is zero-extended.
  
!      This pattern is deprecated; please use ‘extzvM’ and
!      ‘extzvmisalignM’ instead.
  
! ‘insv’
!      Store operand 3 (which must be valid for ‘word_mode’) into a
       bit-field in operand 0, where operand 1 specifies the width in bits
       and operand 2 the starting bit.  Operand 0 may have mode
!      ‘byte_mode’ or ‘word_mode’; often ‘word_mode’ is allowed only for
!      registers.  Operands 1 and 2 must be valid for ‘word_mode’.
  
       The RTL generation pass generates this instruction only with
       constants for operands 1 and 2 and the constant is never zero for
       operand 1.
  
!      This pattern is deprecated; please use ‘insvM’ and ‘insvmisalignM’
       instead.
  
! ‘movMODEcc’
       Conditionally move operand 2 or operand 3 into operand 0 according
       to the comparison in operand 1.  If the comparison is true, operand
       2 is moved into operand 0, otherwise operand 3 is moved.
*************** pattern to accomplish a certain task.
*** 28982,28996 ****
       If the machine does not have conditional move instructions, do not
       define these patterns.
  
! 'addMODEcc'
!      Similar to 'movMODEcc' but for conditional addition.  Conditionally
       move operand 2 or (operands 2 + operand 3) into operand 0 according
       to the comparison in operand 1.  If the comparison is false,
       operand 2 is moved into operand 0, otherwise (operand 2 + operand
       3) is moved.
  
! 'cond_negMODE'
! 'cond_one_cmplMODE'
       When operand 1 is true, perform an operation on operands 2 and
       store the result in operand 0, otherwise store operand 3 in operand
       0.  The operation works elementwise if the operands are vectors.
--- 28983,28997 ----
       If the machine does not have conditional move instructions, do not
       define these patterns.
  
! ‘addMODEcc’
!      Similar to ‘movMODEcc’ but for conditional addition.  Conditionally
       move operand 2 or (operands 2 + operand 3) into operand 0 according
       to the comparison in operand 1.  If the comparison is false,
       operand 2 is moved into operand 0, otherwise (operand 2 + operand
       3) is moved.
  
! ‘cond_negMODE’
! ‘cond_one_cmplMODE’
       When operand 1 is true, perform an operation on operands 2 and
       store the result in operand 0, otherwise store operand 3 in operand
       0.  The operation works elementwise if the operands are vectors.
*************** pattern to accomplish a certain task.
*** 29004,29042 ****
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = op1[i] ? OP op2[i] : op3[i];
  
!      where, for example, OP is '~' for 'cond_one_cmplMODE'.
  
!      When defined for floating-point modes, the contents of 'op2[i]' are
!      not interpreted if 'op1[i]' is false, just like they would not be
!      in a normal C '?:' condition.
  
       Operands 0, 2, and 3 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      'TARGET_VECTORIZE_GET_MASK_MODE'.
  
!      'cond_OPMODE' generally corresponds to a conditional form of
!      'OPMODE2'.
  
! 'cond_addMODE'
! 'cond_subMODE'
! 'cond_mulMODE'
! 'cond_divMODE'
! 'cond_udivMODE'
! 'cond_modMODE'
! 'cond_umodMODE'
! 'cond_andMODE'
! 'cond_iorMODE'
! 'cond_xorMODE'
! 'cond_sminMODE'
! 'cond_smaxMODE'
! 'cond_uminMODE'
! 'cond_umaxMODE'
! 'cond_copysignMODE'
! 'cond_fminMODE'
! 'cond_fmaxMODE'
! 'cond_ashlMODE'
! 'cond_ashrMODE'
! 'cond_lshrMODE'
       When operand 1 is true, perform an operation on operands 2 and 3
       and store the result in operand 0, otherwise store operand 4 in
       operand 0.  The operation works elementwise if the operands are
--- 29005,29043 ----
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = op1[i] ? OP op2[i] : op3[i];
  
!      where, for example, OP is ‘~’ for ‘cond_one_cmplMODE’.
  
!      When defined for floating-point modes, the contents of ‘op2[i]’ are
!      not interpreted if ‘op1[i]’ is false, just like they would not be
!      in a normal C ‘?:’ condition.
  
       Operands 0, 2, and 3 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      ‘TARGET_VECTORIZE_GET_MASK_MODE’.
  
!      ‘cond_OPMODE’ generally corresponds to a conditional form of
!      ‘OPMODE2’.
  
! ‘cond_addMODE’
! ‘cond_subMODE’
! ‘cond_mulMODE’
! ‘cond_divMODE’
! ‘cond_udivMODE’
! ‘cond_modMODE’
! ‘cond_umodMODE’
! ‘cond_andMODE’
! ‘cond_iorMODE’
! ‘cond_xorMODE’
! ‘cond_sminMODE’
! ‘cond_smaxMODE’
! ‘cond_uminMODE’
! ‘cond_umaxMODE’
! ‘cond_copysignMODE’
! ‘cond_fminMODE’
! ‘cond_fmaxMODE’
! ‘cond_ashlMODE’
! ‘cond_ashrMODE’
! ‘cond_lshrMODE’
       When operand 1 is true, perform an operation on operands 2 and 3
       and store the result in operand 0, otherwise store operand 4 in
       operand 0.  The operation works elementwise if the operands are
*************** pattern to accomplish a certain task.
*** 29051,29086 ****
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = op1[i] ? op2[i] OP op3[i] : op4[i];
  
!      where, for example, OP is '+' for 'cond_addMODE'.
  
!      When defined for floating-point modes, the contents of 'op3[i]' are
!      not interpreted if 'op1[i]' is false, just like they would not be
!      in a normal C '?:' condition.
  
       Operands 0, 2, 3 and 4 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      'TARGET_VECTORIZE_GET_MASK_MODE'.
  
!      'cond_OPMODE' generally corresponds to a conditional form of
!      'OPMODE3'.  As an exception, the vector forms of shifts correspond
!      to patterns like 'vashlMODE3' rather than patterns like
!      'ashlMODE3'.
  
!      'cond_copysignMODE' is only defined for floating point modes.
  
! 'cond_fmaMODE'
! 'cond_fmsMODE'
! 'cond_fnmaMODE'
! 'cond_fnmsMODE'
!      Like 'cond_addM', except that the conditional operation takes 3
       operands rather than two.  For example, the vector form of
!      'cond_fmaMODE' is equivalent to:
  
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = op1[i] ? fma (op2[i], op3[i], op4[i]) : op5[i];
  
! 'cond_len_negMODE'
! 'cond_len_one_cmplMODE'
       When operand 1 is true and element index < operand 4 + operand 5,
       perform an operation on operands 1 and store the result in operand
       0, otherwise store operand 2 in operand 0.  The operation only
--- 29052,29087 ----
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = op1[i] ? op2[i] OP op3[i] : op4[i];
  
!      where, for example, OP is ‘+’ for ‘cond_addMODE’.
  
!      When defined for floating-point modes, the contents of ‘op3[i]’ are
!      not interpreted if ‘op1[i]’ is false, just like they would not be
!      in a normal C ‘?:’ condition.
  
       Operands 0, 2, 3 and 4 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      ‘TARGET_VECTORIZE_GET_MASK_MODE’.
  
!      ‘cond_OPMODE’ generally corresponds to a conditional form of
!      ‘OPMODE3’.  As an exception, the vector forms of shifts correspond
!      to patterns like ‘vashlMODE3’ rather than patterns like
!      ‘ashlMODE3’.
  
!      ‘cond_copysignMODE’ is only defined for floating point modes.
  
! ‘cond_fmaMODE’
! ‘cond_fmsMODE’
! ‘cond_fnmaMODE’
! ‘cond_fnmsMODE’
!      Like ‘cond_addM’, except that the conditional operation takes 3
       operands rather than two.  For example, the vector form of
!      ‘cond_fmaMODE’ is equivalent to:
  
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = op1[i] ? fma (op2[i], op3[i], op4[i]) : op5[i];
  
! ‘cond_len_negMODE’
! ‘cond_len_one_cmplMODE’
       When operand 1 is true and element index < operand 4 + operand 5,
       perform an operation on operands 1 and store the result in operand
       0, otherwise store operand 2 in operand 0.  The operation only
*************** pattern to accomplish a certain task.
*** 29091,29130 ****
                        ? OP op2[i]
                        : op3[i]);
  
!      where, for example, OP is '~' for 'cond_len_one_cmplMODE'.
  
!      When defined for floating-point modes, the contents of 'op2[i]' are
!      not interpreted if 'op1[i]' is false, just like they would not be
!      in a normal C '?:' condition.
  
       Operands 0, 2, and 3 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      'TARGET_VECTORIZE_GET_MASK_MODE'.  Operand 4 has whichever integer
       mode the target prefers.
  
!      'cond_len_OPMODE' generally corresponds to a conditional form of
!      'OPMODE2'.
  
! 'cond_len_addMODE'
! 'cond_len_subMODE'
! 'cond_len_mulMODE'
! 'cond_len_divMODE'
! 'cond_len_udivMODE'
! 'cond_len_modMODE'
! 'cond_len_umodMODE'
! 'cond_len_andMODE'
! 'cond_len_iorMODE'
! 'cond_len_xorMODE'
! 'cond_len_sminMODE'
! 'cond_len_smaxMODE'
! 'cond_len_uminMODE'
! 'cond_len_umaxMODE'
! 'cond_len_copysignMODE'
! 'cond_len_fminMODE'
! 'cond_len_fmaxMODE'
! 'cond_len_ashlMODE'
! 'cond_len_ashrMODE'
! 'cond_len_lshrMODE'
       When operand 1 is true and element index < operand 5 + operand 6,
       perform an operation on operands 2 and 3 and store the result in
       operand 0, otherwise store operand 4 in operand 0.  The operation
--- 29092,29131 ----
                        ? OP op2[i]
                        : op3[i]);
  
!      where, for example, OP is ‘~’ for ‘cond_len_one_cmplMODE’.
  
!      When defined for floating-point modes, the contents of ‘op2[i]’ are
!      not interpreted if ‘op1[i]’ is false, just like they would not be
!      in a normal C ‘?:’ condition.
  
       Operands 0, 2, and 3 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      ‘TARGET_VECTORIZE_GET_MASK_MODE’.  Operand 4 has whichever integer
       mode the target prefers.
  
!      ‘cond_len_OPMODE’ generally corresponds to a conditional form of
!      ‘OPMODE2’.
  
! ‘cond_len_addMODE’
! ‘cond_len_subMODE’
! ‘cond_len_mulMODE’
! ‘cond_len_divMODE’
! ‘cond_len_udivMODE’
! ‘cond_len_modMODE’
! ‘cond_len_umodMODE’
! ‘cond_len_andMODE’
! ‘cond_len_iorMODE’
! ‘cond_len_xorMODE’
! ‘cond_len_sminMODE’
! ‘cond_len_smaxMODE’
! ‘cond_len_uminMODE’
! ‘cond_len_umaxMODE’
! ‘cond_len_copysignMODE’
! ‘cond_len_fminMODE’
! ‘cond_len_fmaxMODE’
! ‘cond_len_ashlMODE’
! ‘cond_len_ashrMODE’
! ‘cond_len_lshrMODE’
       When operand 1 is true and element index < operand 5 + operand 6,
       perform an operation on operands 2 and 3 and store the result in
       operand 0, otherwise store operand 4 in operand 0.  The operation
*************** pattern to accomplish a certain task.
*** 29135,29191 ****
                        ? op2[i] OP op3[i]
                        : op4[i]);
  
!      where, for example, OP is '+' for 'cond_len_addMODE'.
  
!      When defined for floating-point modes, the contents of 'op3[i]' are
!      not interpreted if 'op1[i]' is false, just like they would not be
!      in a normal C '?:' condition.
  
       Operands 0, 2, 3 and 4 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      'TARGET_VECTORIZE_GET_MASK_MODE'.  Operand 5 has whichever integer
       mode the target prefers.
  
!      'cond_len_OPMODE' generally corresponds to a conditional form of
!      'OPMODE3'.  As an exception, the vector forms of shifts correspond
!      to patterns like 'vashlMODE3' rather than patterns like
!      'ashlMODE3'.
  
!      'cond_len_copysignMODE' is only defined for floating point modes.
  
! 'cond_len_fmaMODE'
! 'cond_len_fmsMODE'
! 'cond_len_fnmaMODE'
! 'cond_len_fnmsMODE'
!      Like 'cond_len_addM', except that the conditional operation takes 3
       operands rather than two.  For example, the vector form of
!      'cond_len_fmaMODE' is equivalent to:
  
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = (i < ops[6] + ops[7] && op1[i]
                        ? fma (op2[i], op3[i], op4[i])
                        : op5[i]);
  
! 'negMODEcc'
!      Similar to 'movMODEcc' but for conditional negation.  Conditionally
       move the negation of operand 2 or the unchanged operand 3 into
       operand 0 according to the comparison in operand 1.  If the
       comparison is true, the negation of operand 2 is moved into operand
       0, otherwise operand 3 is moved.
  
! 'notMODEcc'
!      Similar to 'negMODEcc' but for conditional complement.
       Conditionally move the bitwise complement of operand 2 or the
       unchanged operand 3 into operand 0 according to the comparison in
       operand 1.  If the comparison is true, the complement of operand 2
       is moved into operand 0, otherwise operand 3 is moved.
  
! 'cstoreMODE4'
       Store zero or nonzero in operand 0 according to whether a
       comparison is true.  Operand 1 is a comparison operator.  Operand 2
       and operand 3 are the first and second operand of the comparison,
       respectively.  You specify the mode that operand 0 must have when
!      you write the 'match_operand' expression.  The compiler
       automatically sees which mode you have used and supplies an operand
       of that mode.
  
--- 29136,29192 ----
                        ? op2[i] OP op3[i]
                        : op4[i]);
  
!      where, for example, OP is ‘+’ for ‘cond_len_addMODE’.
  
!      When defined for floating-point modes, the contents of ‘op3[i]’ are
!      not interpreted if ‘op1[i]’ is false, just like they would not be
!      in a normal C ‘?:’ condition.
  
       Operands 0, 2, 3 and 4 all have mode M.  Operand 1 is a scalar
       integer if M is scalar, otherwise it has the mode returned by
!      ‘TARGET_VECTORIZE_GET_MASK_MODE’.  Operand 5 has whichever integer
       mode the target prefers.
  
!      ‘cond_len_OPMODE’ generally corresponds to a conditional form of
!      ‘OPMODE3’.  As an exception, the vector forms of shifts correspond
!      to patterns like ‘vashlMODE3’ rather than patterns like
!      ‘ashlMODE3’.
  
!      ‘cond_len_copysignMODE’ is only defined for floating point modes.
  
! ‘cond_len_fmaMODE’
! ‘cond_len_fmsMODE’
! ‘cond_len_fnmaMODE’
! ‘cond_len_fnmsMODE’
!      Like ‘cond_len_addM’, except that the conditional operation takes 3
       operands rather than two.  For example, the vector form of
!      ‘cond_len_fmaMODE’ is equivalent to:
  
            for (i = 0; i < GET_MODE_NUNITS (M); i++)
              op0[i] = (i < ops[6] + ops[7] && op1[i]
                        ? fma (op2[i], op3[i], op4[i])
                        : op5[i]);
  
! ‘negMODEcc’
!      Similar to ‘movMODEcc’ but for conditional negation.  Conditionally
       move the negation of operand 2 or the unchanged operand 3 into
       operand 0 according to the comparison in operand 1.  If the
       comparison is true, the negation of operand 2 is moved into operand
       0, otherwise operand 3 is moved.
  
! ‘notMODEcc’
!      Similar to ‘negMODEcc’ but for conditional complement.
       Conditionally move the bitwise complement of operand 2 or the
       unchanged operand 3 into operand 0 according to the comparison in
       operand 1.  If the comparison is true, the complement of operand 2
       is moved into operand 0, otherwise operand 3 is moved.
  
! ‘cstoreMODE4’
       Store zero or nonzero in operand 0 according to whether a
       comparison is true.  Operand 1 is a comparison operator.  Operand 2
       and operand 3 are the first and second operand of the comparison,
       respectively.  You specify the mode that operand 0 must have when
!      you write the ‘match_operand’ expression.  The compiler
       automatically sees which mode you have used and supplies an operand
       of that mode.
  
*************** pattern to accomplish a certain task.
*** 29193,29209 ****
       or else must be negative.  Otherwise the instruction is not
       suitable and you should omit it from the machine description.  You
       describe to the compiler exactly which value is stored by defining
!      the macro 'STORE_FLAG_VALUE' (*note Misc::).  If a description
       cannot be found that can be used for all the possible comparison
!      operators, you should pick one and use a 'define_expand' to map all
       results onto the one you chose.
  
!      These operations may 'FAIL', but should do so only in relatively
!      uncommon cases; if they would 'FAIL' for common cases involving
       integer comparisons, it is best to restrict the predicates to not
       allow these operands.  Likewise if a given comparison operator will
       always fail, independent of the operands (for floating-point modes,
!      the 'ordered_comparison_operator' predicate is often useful in this
       case).
  
       If this pattern is omitted, the compiler will generate a
--- 29194,29210 ----
       or else must be negative.  Otherwise the instruction is not
       suitable and you should omit it from the machine description.  You
       describe to the compiler exactly which value is stored by defining
!      the macro ‘STORE_FLAG_VALUE’ (*note Misc::).  If a description
       cannot be found that can be used for all the possible comparison
!      operators, you should pick one and use a ‘define_expand’ to map all
       results onto the one you chose.
  
!      These operations may ‘FAIL’, but should do so only in relatively
!      uncommon cases; if they would ‘FAIL’ for common cases involving
       integer comparisons, it is best to restrict the predicates to not
       allow these operands.  Likewise if a given comparison operator will
       always fail, independent of the operands (for floating-point modes,
!      the ‘ordered_comparison_operator’ predicate is often useful in this
       case).
  
       If this pattern is omitted, the compiler will generate a
*************** pattern to accomplish a certain task.
*** 29213,29304 ****
       operators, it will also try reordering the operands and/or
       inverting the result value (e.g. by an exclusive OR). These
       possibilities could be cheaper or equivalent to the instructions
!      used for the 'cstoreMODE4' pattern followed by those required to
!      convert a positive result from 'STORE_FLAG_VALUE' to 1; in this
       case, you can and should make operand 1's predicate reject some
!      operators in the 'cstoreMODE4' pattern, or remove the pattern
       altogether from the machine description.
  
! 'tbranch_OPMODE3'
       Conditional branch instruction combined with a bit test-and-compare
       instruction.  Operand 0 is the operand of the comparison.  Operand
       1 is the bit position of Operand 1 to test.  Operand 3 is the
!      'code_label' to jump to.  OP is one of EQ or NE.
  
! 'cbranchMODE4'
       Conditional branch instruction combined with a compare instruction.
       Operand 0 is a comparison operator.  Operand 1 and operand 2 are
       the first and second operands of the comparison, respectively.
!      Operand 3 is the 'code_label' to jump to.
  
! 'jump'
       A jump inside a function; an unconditional branch.  Operand 0 is
!      the 'code_label' to jump to.  This pattern name is mandatory on all
       machines.
  
! 'call'
       Subroutine call instruction returning no value.  Operand 0 is the
       function to call; operand 1 is the number of bytes of arguments
!      pushed as a 'const_int'.  Operand 2 is the result of calling the
!      target hook 'TARGET_FUNCTION_ARG' with the second argument 'arg'
!      yielding true for 'arg.end_marker_p ()', in a call after all
       parameters have been passed to that hook.  By default this is the
       first register beyond those used for arguments in the call, or
!      'NULL' if all the argument-registers are used in the call.
  
       On most machines, operand 2 is not actually stored into the RTL
       pattern.  It is supplied for the sake of some RISC machines which
       need to put this information into the assembler code; they can put
       it in the RTL instead of operand 1.
  
!      Operand 0 should be a 'mem' RTX whose address is the address of the
!      function.  Note, however, that this address can be a 'symbol_ref'
       expression even if it would not be a legitimate memory address on
       the target machine.  If it is also not a valid argument for a call
       instruction, the pattern for this operation should be a
!      'define_expand' (*note Expander Definitions::) that places the
       address into a register and uses that register in the call
       instruction.
  
! 'call_value'
       Subroutine call instruction returning a value.  Operand 0 is the
       hard register in which the value is returned.  There are three more
!      operands, the same as the three operands of the 'call' instruction
       (but with numbers increased by one).
  
!      Subroutines that return 'BLKmode' objects use the 'call' insn.
  
! 'call_pop', 'call_value_pop'
!      Similar to 'call' and 'call_value', except used if defined and if
!      'RETURN_POPS_ARGS' is nonzero.  They should emit a 'parallel' that
!      contains both the function call and a 'set' to indicate the
       adjustment made to the frame pointer.
  
!      For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of
       these patterns increases the number of functions for which the
       frame pointer can be eliminated, if desired.
  
! 'untyped_call'
       Subroutine call instruction returning a value of any type.  Operand
       0 is the function to call; operand 1 is a memory location where the
       result of calling the function is to be stored; operand 2 is a
!      'parallel' expression where each element is a 'set' expression that
       indicates the saving of a function return value into the result
       block.
  
       This instruction pattern should be defined to support
!      '__builtin_apply' on machines where special instructions are needed
       to call a subroutine with arbitrary arguments or to save the value
       returned.  This instruction pattern is required on machines that
       have multiple registers that can hold a return value (i.e.
!      'FUNCTION_VALUE_REGNO_P' is true for more than one register).
  
! 'return'
       Subroutine return instruction.  This instruction pattern name
       should be defined only if a single instruction can do all the work
       of returning from a function.
  
!      Like the 'movM' patterns, this pattern is also used after the RTL
       generation phase.  In this case it is to support machines where
       multiple instructions are usually needed to return from a function,
       but some class of functions only requires one instruction to
--- 29214,29305 ----
       operators, it will also try reordering the operands and/or
       inverting the result value (e.g. by an exclusive OR). These
       possibilities could be cheaper or equivalent to the instructions
!      used for the ‘cstoreMODE4’ pattern followed by those required to
!      convert a positive result from ‘STORE_FLAG_VALUE’ to 1; in this
       case, you can and should make operand 1's predicate reject some
!      operators in the ‘cstoreMODE4’ pattern, or remove the pattern
       altogether from the machine description.
  
! ‘tbranch_OPMODE3’
       Conditional branch instruction combined with a bit test-and-compare
       instruction.  Operand 0 is the operand of the comparison.  Operand
       1 is the bit position of Operand 1 to test.  Operand 3 is the
!      ‘code_label’ to jump to.  OP is one of EQ or NE.
  
! ‘cbranchMODE4’
       Conditional branch instruction combined with a compare instruction.
       Operand 0 is a comparison operator.  Operand 1 and operand 2 are
       the first and second operands of the comparison, respectively.
!      Operand 3 is the ‘code_label’ to jump to.
  
! ‘jump’
       A jump inside a function; an unconditional branch.  Operand 0 is
!      the ‘code_label’ to jump to.  This pattern name is mandatory on all
       machines.
  
! ‘call’
       Subroutine call instruction returning no value.  Operand 0 is the
       function to call; operand 1 is the number of bytes of arguments
!      pushed as a ‘const_int’.  Operand 2 is the result of calling the
!      target hook ‘TARGET_FUNCTION_ARG’ with the second argument ‘arg’
!      yielding true for ‘arg.end_marker_p ()’, in a call after all
       parameters have been passed to that hook.  By default this is the
       first register beyond those used for arguments in the call, or
!      ‘NULL’ if all the argument-registers are used in the call.
  
       On most machines, operand 2 is not actually stored into the RTL
       pattern.  It is supplied for the sake of some RISC machines which
       need to put this information into the assembler code; they can put
       it in the RTL instead of operand 1.
  
!      Operand 0 should be a ‘mem’ RTX whose address is the address of the
!      function.  Note, however, that this address can be a ‘symbol_ref’
       expression even if it would not be a legitimate memory address on
       the target machine.  If it is also not a valid argument for a call
       instruction, the pattern for this operation should be a
!      ‘define_expand’ (*note Expander Definitions::) that places the
       address into a register and uses that register in the call
       instruction.
  
! ‘call_value’
       Subroutine call instruction returning a value.  Operand 0 is the
       hard register in which the value is returned.  There are three more
!      operands, the same as the three operands of the ‘call’ instruction
       (but with numbers increased by one).
  
!      Subroutines that return ‘BLKmode’ objects use the ‘call’ insn.
  
! ‘call_pop’, ‘call_value_pop’
!      Similar to ‘call’ and ‘call_value’, except used if defined and if
!      ‘RETURN_POPS_ARGS’ is nonzero.  They should emit a ‘parallel’ that
!      contains both the function call and a ‘set’ to indicate the
       adjustment made to the frame pointer.
  
!      For machines where ‘RETURN_POPS_ARGS’ can be nonzero, the use of
       these patterns increases the number of functions for which the
       frame pointer can be eliminated, if desired.
  
! ‘untyped_call’
       Subroutine call instruction returning a value of any type.  Operand
       0 is the function to call; operand 1 is a memory location where the
       result of calling the function is to be stored; operand 2 is a
!      ‘parallel’ expression where each element is a ‘set’ expression that
       indicates the saving of a function return value into the result
       block.
  
       This instruction pattern should be defined to support
!      ‘__builtin_apply’ on machines where special instructions are needed
       to call a subroutine with arbitrary arguments or to save the value
       returned.  This instruction pattern is required on machines that
       have multiple registers that can hold a return value (i.e.
!      ‘FUNCTION_VALUE_REGNO_P’ is true for more than one register).
  
! ‘return’
       Subroutine return instruction.  This instruction pattern name
       should be defined only if a single instruction can do all the work
       of returning from a function.
  
!      Like the ‘movM’ patterns, this pattern is also used after the RTL
       generation phase.  In this case it is to support machines where
       multiple instructions are usually needed to return from a function,
       but some class of functions only requires one instruction to
*************** pattern to accomplish a certain task.
*** 29306,29318 ****
       which do not need to save any registers or allocate stack space.
  
       It is valid for this pattern to expand to an instruction using
!      'simple_return' if no epilogue is required.
  
! 'simple_return'
       Subroutine return instruction.  This instruction pattern name
       should be defined only if a single instruction can do all the work
       of returning from a function on a path where no epilogue is
!      required.  This pattern is very similar to the 'return' instruction
       pattern, but it is emitted only by the shrink-wrapping optimization
       on paths where the function prologue has not been executed, and a
       function return should occur without any of the effects of the
--- 29307,29319 ----
       which do not need to save any registers or allocate stack space.
  
       It is valid for this pattern to expand to an instruction using
!      ‘simple_return’ if no epilogue is required.
  
! ‘simple_return’
       Subroutine return instruction.  This instruction pattern name
       should be defined only if a single instruction can do all the work
       of returning from a function on a path where no epilogue is
!      required.  This pattern is very similar to the ‘return’ instruction
       pattern, but it is emitted only by the shrink-wrapping optimization
       on paths where the function prologue has not been executed, and a
       function return should occur without any of the effects of the
*************** pattern to accomplish a certain task.
*** 29320,29328 ****
       the prologue and the epilogue have executed.
  
       For such machines, the condition specified in this pattern should
!      only be true when 'reload_completed' is nonzero and the function's
       epilogue would only be a single instruction.  For machines with
!      register windows, the routine 'leaf_function_p' may be used to
       determine if a register window push is required.
  
       Machines that have conditional return instructions should define
--- 29321,29329 ----
       the prologue and the epilogue have executed.
  
       For such machines, the condition specified in this pattern should
!      only be true when ‘reload_completed’ is nonzero and the function's
       epilogue would only be a single instruction.  For machines with
!      register windows, the routine ‘leaf_function_p’ may be used to
       determine if a register window push is required.
  
       Machines that have conditional return instructions should define
*************** pattern to accomplish a certain task.
*** 29339,29371 ****
              "...")
  
       where CONDITION would normally be the same condition specified on
!      the named 'return' pattern.
  
! 'untyped_return'
       Untyped subroutine return instruction.  This instruction pattern
!      should be defined to support '__builtin_return' on machines where
       special instructions are needed to return a value of any type.
  
       Operand 0 is a memory location where the result of calling a
!      function with '__builtin_apply' is stored; operand 1 is a
!      'parallel' expression where each element is a 'set' expression that
       indicates the restoring of a function return value from the result
       block.
  
! 'nop'
       No-op instruction.  This instruction pattern name should always be
!      defined to output a no-op in assembler code.  '(const_int 0)' will
       do as an RTL pattern.
  
! 'indirect_jump'
       An instruction to jump to an address which is operand zero.  This
       pattern name is mandatory on all machines.
  
! 'casesi'
       Instruction to jump through a dispatch table, including bounds
       checking.  This instruction takes five operands:
  
!        1. The index to dispatch on, which has mode 'SImode'.
  
         2. The lower bound for indices in the table, an integer constant.
  
--- 29340,29372 ----
              "...")
  
       where CONDITION would normally be the same condition specified on
!      the named ‘return’ pattern.
  
! ‘untyped_return’
       Untyped subroutine return instruction.  This instruction pattern
!      should be defined to support ‘__builtin_return’ on machines where
       special instructions are needed to return a value of any type.
  
       Operand 0 is a memory location where the result of calling a
!      function with ‘__builtin_apply’ is stored; operand 1 is a
!      ‘parallel’ expression where each element is a ‘set’ expression that
       indicates the restoring of a function return value from the result
       block.
  
! ‘nop’
       No-op instruction.  This instruction pattern name should always be
!      defined to output a no-op in assembler code.  ‘(const_int 0)’ will
       do as an RTL pattern.
  
! ‘indirect_jump’
       An instruction to jump to an address which is operand zero.  This
       pattern name is mandatory on all machines.
  
! ‘casesi’
       Instruction to jump through a dispatch table, including bounds
       checking.  This instruction takes five operands:
  
!        1. The index to dispatch on, which has mode ‘SImode’.
  
         2. The lower bound for indices in the table, an integer constant.
  
*************** pattern to accomplish a certain task.
*** 29377,29404 ****
         5. A label to jump to if the index has a value outside the
            bounds.
  
!      The table is an 'addr_vec' or 'addr_diff_vec' inside of a
!      'jump_table_data'.  The number of elements in the table is one plus
       the difference between the upper bound and the lower bound.
  
! 'tablejump'
       Instruction to jump to a variable address.  This is a low-level
       capability which can be used to implement a dispatch table when
!      there is no 'casesi' pattern.
  
       This pattern requires two operands: the address or offset, and a
       label which should immediately precede the jump table.  If the
!      macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
       the first operand is an offset which counts from the address of the
       table; otherwise, it is an absolute address to jump to.  In either
!      case, the first operand has mode 'Pmode'.
  
!      The 'tablejump' insn is always the last insn before the jump table
       it uses.  Its assembler code normally has no need to use the second
       operand, but you should incorporate it in the RTL pattern so that
       the jump optimizer will not delete the table as unreachable code.
  
! 'doloop_end'
       Conditional branch instruction that decrements a register and jumps
       if the register is nonzero.  Operand 0 is the register to decrement
       and test; operand 1 is the label to jump to if the register is
--- 29378,29405 ----
         5. A label to jump to if the index has a value outside the
            bounds.
  
!      The table is an ‘addr_vec’ or ‘addr_diff_vec’ inside of a
!      ‘jump_table_data’.  The number of elements in the table is one plus
       the difference between the upper bound and the lower bound.
  
! ‘tablejump’
       Instruction to jump to a variable address.  This is a low-level
       capability which can be used to implement a dispatch table when
!      there is no ‘casesi’ pattern.
  
       This pattern requires two operands: the address or offset, and a
       label which should immediately precede the jump table.  If the
!      macro ‘CASE_VECTOR_PC_RELATIVE’ evaluates to a nonzero value then
       the first operand is an offset which counts from the address of the
       table; otherwise, it is an absolute address to jump to.  In either
!      case, the first operand has mode ‘Pmode’.
  
!      The ‘tablejump’ insn is always the last insn before the jump table
       it uses.  Its assembler code normally has no need to use the second
       operand, but you should incorporate it in the RTL pattern so that
       the jump optimizer will not delete the table as unreachable code.
  
! ‘doloop_end’
       Conditional branch instruction that decrements a register and jumps
       if the register is nonzero.  Operand 0 is the register to decrement
       and test; operand 1 is the label to jump to if the register is
*************** pattern to accomplish a certain task.
*** 29407,29431 ****
       This optional instruction pattern should be defined for machines
       with low-overhead looping instructions as the loop optimizer will
       try to modify suitable loops to utilize it.  The target hook
!      'TARGET_CAN_USE_DOLOOP_P' controls the conditions under which
       low-overhead loops can be used.
  
! 'doloop_begin'
!      Companion instruction to 'doloop_end' required for machines that
       need to perform some initialization, such as loading a special
!      counter register.  Operand 1 is the associated 'doloop_end' pattern
       and operand 0 is the register that it decrements.
  
       If initialization insns do not always need to be emitted, use a
!      'define_expand' (*note Expander Definitions::) and make it fail.
  
! 'canonicalize_funcptr_for_compare'
       Canonicalize the function pointer in operand 1 and store the result
       into operand 0.
  
!      Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be
!      a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode
!      'Pmode'.
  
       Canonicalization of a function pointer usually involves computing
       the address of the function which would be called if the function
--- 29408,29432 ----
       This optional instruction pattern should be defined for machines
       with low-overhead looping instructions as the loop optimizer will
       try to modify suitable loops to utilize it.  The target hook
!      ‘TARGET_CAN_USE_DOLOOP_P’ controls the conditions under which
       low-overhead loops can be used.
  
! ‘doloop_begin’
!      Companion instruction to ‘doloop_end’ required for machines that
       need to perform some initialization, such as loading a special
!      counter register.  Operand 1 is the associated ‘doloop_end’ pattern
       and operand 0 is the register that it decrements.
  
       If initialization insns do not always need to be emitted, use a
!      ‘define_expand’ (*note Expander Definitions::) and make it fail.
  
! ‘canonicalize_funcptr_for_compare’
       Canonicalize the function pointer in operand 1 and store the result
       into operand 0.
  
!      Operand 0 is always a ‘reg’ and has mode ‘Pmode’; operand 1 may be
!      a ‘reg’, ‘mem’, ‘symbol_ref’, ‘const_int’, etc and also has mode
!      ‘Pmode’.
  
       Canonicalization of a function pointer usually involves computing
       the address of the function which would be called if the function
*************** pattern to accomplish a certain task.
*** 29435,29471 ****
       can have different values but still call the same function when
       used in an indirect call.
  
! 'save_stack_block'
! 'save_stack_function'
! 'save_stack_nonlocal'
! 'restore_stack_block'
! 'restore_stack_function'
! 'restore_stack_nonlocal'
       Most machines save and restore the stack pointer by copying it to
!      or from an object of mode 'Pmode'.  Do not define these patterns on
       such machines.
  
       Some machines require special handling for stack pointer saves and
       restores.  On those machines, define the patterns corresponding to
!      the non-standard cases by using a 'define_expand' (*note Expander
       Definitions::) that produces the required insns.  The three types
       of saves and restores are:
  
!        1. 'save_stack_block' saves the stack pointer at the start of a
            block that allocates a variable-sized object, and
!           'restore_stack_block' restores the stack pointer when the
            block is exited.
  
!        2. 'save_stack_function' and 'restore_stack_function' do a
            similar job for the outermost block of a function and are used
            when the function allocates variable-sized objects or calls
!           'alloca'.  Only the epilogue uses the restored stack pointer,
            allowing a simpler save or restore sequence on some machines.
  
!        3. 'save_stack_nonlocal' is used in functions that contain labels
            branched to by nested functions.  It saves the stack pointer
            in such a way that the inner function can use
!           'restore_stack_nonlocal' to restore the stack pointer.  The
            compiler generates code to restore the frame and argument
            pointer registers, but some machines require saving and
            restoring additional data such as register window information
--- 29436,29472 ----
       can have different values but still call the same function when
       used in an indirect call.
  
! ‘save_stack_block’
! ‘save_stack_function’
! ‘save_stack_nonlocal’
! ‘restore_stack_block’
! ‘restore_stack_function’
! ‘restore_stack_nonlocal’
       Most machines save and restore the stack pointer by copying it to
!      or from an object of mode ‘Pmode’.  Do not define these patterns on
       such machines.
  
       Some machines require special handling for stack pointer saves and
       restores.  On those machines, define the patterns corresponding to
!      the non-standard cases by using a ‘define_expand’ (*note Expander
       Definitions::) that produces the required insns.  The three types
       of saves and restores are:
  
!        1. ‘save_stack_block’ saves the stack pointer at the start of a
            block that allocates a variable-sized object, and
!           ‘restore_stack_block’ restores the stack pointer when the
            block is exited.
  
!        2. ‘save_stack_function’ and ‘restore_stack_function’ do a
            similar job for the outermost block of a function and are used
            when the function allocates variable-sized objects or calls
!           ‘alloca’.  Only the epilogue uses the restored stack pointer,
            allowing a simpler save or restore sequence on some machines.
  
!        3. ‘save_stack_nonlocal’ is used in functions that contain labels
            branched to by nested functions.  It saves the stack pointer
            in such a way that the inner function can use
!           ‘restore_stack_nonlocal’ to restore the stack pointer.  The
            compiler generates code to restore the frame and argument
            pointer registers, but some machines require saving and
            restoring additional data such as register window information
*************** pattern to accomplish a certain task.
*** 29474,29500 ****
  
       When saving the stack pointer, operand 0 is the save area and
       operand 1 is the stack pointer.  The mode used to allocate the save
!      area defaults to 'Pmode' but you can override that choice by
!      defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
!      You must specify an integral mode, or 'VOIDmode' if no save area is
       needed for a particular type of save (either because no save is
       needed or because a machine-specific save area can be used).
       Operand 0 is the stack pointer and operand 1 is the save area for
!      restore operations.  If 'save_stack_block' is defined, operand 0
!      must not be 'VOIDmode' since these saves can be arbitrarily nested.
  
!      A save area is a 'mem' that is at a constant offset from
!      'virtual_stack_vars_rtx' when the stack pointer is saved for use by
!      nonlocal gotos and a 'reg' in the other two cases.
  
! 'allocate_stack'
!      Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1
       from the stack pointer to create space for dynamically allocated
       data.
  
       Store the resultant pointer to this space into operand 0.  If you
       are allocating space from the main stack, do this by emitting a
!      move insn to copy 'virtual_stack_dynamic_rtx' to operand 0.  If you
       are allocating the space elsewhere, generate code to copy the
       location of the space to operand 0.  In the latter case, you must
       ensure this space gets freed when the corresponding space on the
--- 29475,29501 ----
  
       When saving the stack pointer, operand 0 is the save area and
       operand 1 is the stack pointer.  The mode used to allocate the save
!      area defaults to ‘Pmode’ but you can override that choice by
!      defining the ‘STACK_SAVEAREA_MODE’ macro (*note Storage Layout::).
!      You must specify an integral mode, or ‘VOIDmode’ if no save area is
       needed for a particular type of save (either because no save is
       needed or because a machine-specific save area can be used).
       Operand 0 is the stack pointer and operand 1 is the save area for
!      restore operations.  If ‘save_stack_block’ is defined, operand 0
!      must not be ‘VOIDmode’ since these saves can be arbitrarily nested.
  
!      A save area is a ‘mem’ that is at a constant offset from
!      ‘virtual_stack_vars_rtx’ when the stack pointer is saved for use by
!      nonlocal gotos and a ‘reg’ in the other two cases.
  
! ‘allocate_stack’
!      Subtract (or add if ‘STACK_GROWS_DOWNWARD’ is undefined) operand 1
       from the stack pointer to create space for dynamically allocated
       data.
  
       Store the resultant pointer to this space into operand 0.  If you
       are allocating space from the main stack, do this by emitting a
!      move insn to copy ‘virtual_stack_dynamic_rtx’ to operand 0.  If you
       are allocating the space elsewhere, generate code to copy the
       location of the space to operand 0.  In the latter case, you must
       ensure this space gets freed when the corresponding space on the
*************** pattern to accomplish a certain task.
*** 29505,29511 ****
       probes or maintaining the back chain.  Define this pattern to emit
       those operations in addition to updating the stack pointer.
  
! 'check_stack'
       If stack checking (*note Stack Checking::) cannot be done on your
       system by probing the stack, define this pattern to perform the
       needed check and signal an error if the stack has overflowed.  The
--- 29506,29512 ----
       probes or maintaining the back chain.  Define this pattern to emit
       those operations in addition to updating the stack pointer.
  
! ‘check_stack’
       If stack checking (*note Stack Checking::) cannot be done on your
       system by probing the stack, define this pattern to perform the
       needed check and signal an error if the stack has overflowed.  The
*************** pattern to accomplish a certain task.
*** 29514,29527 ****
       platforms where this pattern is needed, you would obtain the stack
       limit from a global or thread-specific variable or register.
  
! 'probe_stack_address'
       If stack checking (*note Stack Checking::) can be done on your
       system by probing the stack but without the need to actually access
       it, define this pattern and signal an error if the stack has
       overflowed.  The single operand is the memory address in the stack
       that needs to be probed.
  
! 'probe_stack'
       If stack checking (*note Stack Checking::) can be done on your
       system by probing the stack but doing it with a "store zero"
       instruction is not valid or optimal, define this pattern to do the
--- 29515,29528 ----
       platforms where this pattern is needed, you would obtain the stack
       limit from a global or thread-specific variable or register.
  
! ‘probe_stack_address’
       If stack checking (*note Stack Checking::) can be done on your
       system by probing the stack but without the need to actually access
       it, define this pattern and signal an error if the stack has
       overflowed.  The single operand is the memory address in the stack
       that needs to be probed.
  
! ‘probe_stack’
       If stack checking (*note Stack Checking::) can be done on your
       system by probing the stack but doing it with a "store zero"
       instruction is not valid or optimal, define this pattern to do the
*************** pattern to accomplish a certain task.
*** 29529,29535 ****
       overflowed.  The single operand is the memory reference in the
       stack that needs to be probed.
  
! 'nonlocal_goto'
       Emit code to generate a non-local goto, e.g., a jump from one
       function to a label in an outer function.  This pattern has four
       arguments, each representing a value to be used in the jump.  The
--- 29530,29536 ----
       overflowed.  The single operand is the memory reference in the
       stack that needs to be probed.
  
! ‘nonlocal_goto’
       Emit code to generate a non-local goto, e.g., a jump from one
       function to a label in an outer function.  This pattern has four
       arguments, each representing a value to be used in the jump.  The
*************** pattern to accomplish a certain task.
*** 29542,29552 ****
       On most machines you need not define this pattern, since GCC will
       already generate the correct code, which is to load the frame
       pointer and static chain, restore the stack (using the
!      'restore_stack_nonlocal' pattern, if defined), and jump indirectly
       to the dispatcher.  You need only define this pattern if this code
       will not work on your machine.
  
! 'nonlocal_goto_receiver'
       This pattern, if defined, contains code needed at the target of a
       nonlocal goto after the code already generated by GCC.  You will
       not normally need to define this pattern.  A typical reason why you
--- 29543,29553 ----
       On most machines you need not define this pattern, since GCC will
       already generate the correct code, which is to load the frame
       pointer and static chain, restore the stack (using the
!      ‘restore_stack_nonlocal’ pattern, if defined), and jump indirectly
       to the dispatcher.  You need only define this pattern if this code
       will not work on your machine.
  
! ‘nonlocal_goto_receiver’
       This pattern, if defined, contains code needed at the target of a
       nonlocal goto after the code already generated by GCC.  You will
       not normally need to define this pattern.  A typical reason why you
*************** pattern to accomplish a certain task.
*** 29556,29562 ****
       so a global table pointer that is shared by all functions of a
       given module need not be restored.  There are no arguments.
  
! 'exception_receiver'
       This pattern, if defined, contains code needed at the site of an
       exception handler that isn't needed at the site of a nonlocal goto.
       You will not normally need to define this pattern.  A typical
--- 29557,29563 ----
       so a global table pointer that is shared by all functions of a
       given module need not be restored.  There are no arguments.
  
! ‘exception_receiver’
       This pattern, if defined, contains code needed at the site of an
       exception handler that isn't needed at the site of a nonlocal goto.
       You will not normally need to define this pattern.  A typical
*************** pattern to accomplish a certain task.
*** 29564,29581 ****
       pointer to a global table, must be restored after control flow is
       branched to the handler of an exception.  There are no arguments.
  
! 'builtin_setjmp_setup'
       This pattern, if defined, contains additional code needed to
!      initialize the 'jmp_buf'.  You will not normally need to define
       this pattern.  A typical reason why you might need this pattern is
       if some value, such as a pointer to a global table, must be
       restored.  Though it is preferred that the pointer value be
       recalculated if possible (given the address of a label for
!      instance).  The single argument is a pointer to the 'jmp_buf'.
       Note that the buffer is five words long and that the first three
       are normally used by the generic mechanism.
  
! 'builtin_setjmp_receiver'
       This pattern, if defined, contains code needed at the site of a
       built-in setjmp that isn't needed at the site of a nonlocal goto.
       You will not normally need to define this pattern.  A typical
--- 29565,29582 ----
       pointer to a global table, must be restored after control flow is
       branched to the handler of an exception.  There are no arguments.
  
! ‘builtin_setjmp_setup’
       This pattern, if defined, contains additional code needed to
!      initialize the ‘jmp_buf’.  You will not normally need to define
       this pattern.  A typical reason why you might need this pattern is
       if some value, such as a pointer to a global table, must be
       restored.  Though it is preferred that the pointer value be
       recalculated if possible (given the address of a label for
!      instance).  The single argument is a pointer to the ‘jmp_buf’.
       Note that the buffer is five words long and that the first three
       are normally used by the generic mechanism.
  
! ‘builtin_setjmp_receiver’
       This pattern, if defined, contains code needed at the site of a
       built-in setjmp that isn't needed at the site of a nonlocal goto.
       You will not normally need to define this pattern.  A typical
*************** pattern to accomplish a certain task.
*** 29585,29598 ****
       control; this pattern may be emitted at a small offset from that
       label.
  
! 'builtin_longjmp'
       This pattern, if defined, performs the entire action of the
       longjmp.  You will not normally need to define this pattern unless
!      you also define 'builtin_setjmp_setup'.  The single argument is a
!      pointer to the 'jmp_buf'.
  
! 'eh_return'
!      This pattern, if defined, affects the way '__builtin_eh_return',
       and thence the call frame exception handling library routines, are
       built.  It is intended to handle non-trivial actions needed along
       the abnormal return path.
--- 29586,29599 ----
       control; this pattern may be emitted at a small offset from that
       label.
  
! ‘builtin_longjmp’
       This pattern, if defined, performs the entire action of the
       longjmp.  You will not normally need to define this pattern unless
!      you also define ‘builtin_setjmp_setup’.  The single argument is a
!      pointer to the ‘jmp_buf’.
  
! ‘eh_return’
!      This pattern, if defined, affects the way ‘__builtin_eh_return’,
       and thence the call frame exception handling library routines, are
       built.  It is intended to handle non-trivial actions needed along
       the abnormal return path.
*************** pattern to accomplish a certain task.
*** 29602,29667 ****
       to copied by the pattern to some special register or memory
       location.  If the pattern needs to determine the location of the
       target call frame in order to do so, it may use
!      'EH_RETURN_STACKADJ_RTX', if defined; it will have already been
       assigned.
  
       If this pattern is not defined, the default action will be to
!      simply copy the return address to 'EH_RETURN_HANDLER_RTX'.  Either
       that macro or this pattern needs to be defined if call frame
       exception handling is to be used.
  
! 'prologue'
       This pattern, if defined, emits RTL for entry to a function.  The
       function entry is responsible for setting up the stack frame,
       initializing the frame pointer register, saving callee saved
       registers, etc.
  
       Using a prologue pattern is generally preferred over defining
!      'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
       prologue.
  
!      The 'prologue' pattern is particularly useful for targets which
       perform instruction scheduling.
  
! 'window_save'
       This pattern, if defined, emits RTL for a register window save.  It
       should be defined if the target machine has register windows but
       the window events are decoupled from calls to subroutines.  The
       canonical example is the SPARC architecture.
  
! 'epilogue'
       This pattern emits RTL for exit from a function.  The function exit
       is responsible for deallocating the stack frame, restoring callee
       saved registers and emitting the return instruction.
  
       Using an epilogue pattern is generally preferred over defining
!      'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
       epilogue.
  
!      The 'epilogue' pattern is particularly useful for targets which
       perform instruction scheduling or which have delay slots for their
       return instruction.
  
! 'sibcall_epilogue'
       This pattern, if defined, emits RTL for exit from a function
       without the final branch back to the calling function.  This
       pattern will be emitted before any sibling call (aka tail call)
       sites.
  
!      The 'sibcall_epilogue' pattern must not clobber any arguments used
       for parameter passing or any stack slots for arguments passed to
       the current function.
  
! 'trap'
       This pattern, if defined, signals an error, typically by causing
       some kind of signal to be raised.
  
! 'ctrapMM4'
       Conditional trap instruction.  Operand 0 is a piece of RTL which
       performs a comparison, and operands 1 and 2 are the arms of the
       comparison.  Operand 3 is the trap code, an integer.
  
!      A typical 'ctrap' pattern looks like
  
            (define_insn "ctrapsi4"
              [(trap_if (match_operator 0 "trap_operator"
--- 29603,29668 ----
       to copied by the pattern to some special register or memory
       location.  If the pattern needs to determine the location of the
       target call frame in order to do so, it may use
!      ‘EH_RETURN_STACKADJ_RTX’, if defined; it will have already been
       assigned.
  
       If this pattern is not defined, the default action will be to
!      simply copy the return address to ‘EH_RETURN_HANDLER_RTX’.  Either
       that macro or this pattern needs to be defined if call frame
       exception handling is to be used.
  
! ‘prologue’
       This pattern, if defined, emits RTL for entry to a function.  The
       function entry is responsible for setting up the stack frame,
       initializing the frame pointer register, saving callee saved
       registers, etc.
  
       Using a prologue pattern is generally preferred over defining
!      ‘TARGET_ASM_FUNCTION_PROLOGUE’ to emit assembly code for the
       prologue.
  
!      The ‘prologue’ pattern is particularly useful for targets which
       perform instruction scheduling.
  
! ‘window_save’
       This pattern, if defined, emits RTL for a register window save.  It
       should be defined if the target machine has register windows but
       the window events are decoupled from calls to subroutines.  The
       canonical example is the SPARC architecture.
  
! ‘epilogue’
       This pattern emits RTL for exit from a function.  The function exit
       is responsible for deallocating the stack frame, restoring callee
       saved registers and emitting the return instruction.
  
       Using an epilogue pattern is generally preferred over defining
!      ‘TARGET_ASM_FUNCTION_EPILOGUE’ to emit assembly code for the
       epilogue.
  
!      The ‘epilogue’ pattern is particularly useful for targets which
       perform instruction scheduling or which have delay slots for their
       return instruction.
  
! ‘sibcall_epilogue’
       This pattern, if defined, emits RTL for exit from a function
       without the final branch back to the calling function.  This
       pattern will be emitted before any sibling call (aka tail call)
       sites.
  
!      The ‘sibcall_epilogue’ pattern must not clobber any arguments used
       for parameter passing or any stack slots for arguments passed to
       the current function.
  
! ‘trap’
       This pattern, if defined, signals an error, typically by causing
       some kind of signal to be raised.
  
! ‘ctrapMM4’
       Conditional trap instruction.  Operand 0 is a piece of RTL which
       performs a comparison, and operands 1 and 2 are the arms of the
       comparison.  Operand 3 is the trap code, an integer.
  
!      A typical ‘ctrap’ pattern looks like
  
            (define_insn "ctrapsi4"
              [(trap_if (match_operator 0 "trap_operator"
*************** pattern to accomplish a certain task.
*** 29671,29677 ****
              ""
              "...")
  
! 'prefetch'
       This pattern, if defined, emits code for a non-faulting data
       prefetch instruction.  Operand 0 is the address of the memory to
       prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
--- 29672,29678 ----
              ""
              "...")
  
! ‘prefetch’
       This pattern, if defined, emits code for a non-faulting data
       prefetch instruction.  Operand 0 is the address of the memory to
       prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
*************** pattern to accomplish a certain task.
*** 29687,29715 ****
       Targets that do not support write prefetches or locality hints can
       ignore the values of operands 1 and 2.
  
! 'blockage'
       This pattern defines a pseudo insn that prevents the instruction
       scheduler and other passes from moving instructions and using
       register equivalences across the boundary defined by the blockage
       insn.  This needs to be an UNSPEC_VOLATILE pattern or a volatile
       ASM.
  
! 'memory_blockage'
       This pattern, if defined, represents a compiler memory barrier, and
       will be placed at points across which RTL passes may not propagate
       memory accesses.  This instruction needs to read and write volatile
       BLKmode memory.  It does not need to generate any machine
       instruction.  If this pattern is not defined, the compiler falls
!      back to emitting an instruction corresponding to 'asm volatile (""
!      ::: "memory")'.
  
! 'memory_barrier'
       If the target memory model is not fully synchronous, then this
       pattern should be defined to an instruction that orders both loads
       and stores before the instruction with respect to loads and stores
       after the instruction.  This pattern has no operands.
  
! 'speculation_barrier'
       If the target can support speculative execution, then this pattern
       should be defined to an instruction that will block subsequent
       execution until any prior speculation conditions has been resolved.
--- 29688,29716 ----
       Targets that do not support write prefetches or locality hints can
       ignore the values of operands 1 and 2.
  
! ‘blockage’
       This pattern defines a pseudo insn that prevents the instruction
       scheduler and other passes from moving instructions and using
       register equivalences across the boundary defined by the blockage
       insn.  This needs to be an UNSPEC_VOLATILE pattern or a volatile
       ASM.
  
! ‘memory_blockage’
       This pattern, if defined, represents a compiler memory barrier, and
       will be placed at points across which RTL passes may not propagate
       memory accesses.  This instruction needs to read and write volatile
       BLKmode memory.  It does not need to generate any machine
       instruction.  If this pattern is not defined, the compiler falls
!      back to emitting an instruction corresponding to ‘asm volatile (""
!      ::: "memory")’.
  
! ‘memory_barrier’
       If the target memory model is not fully synchronous, then this
       pattern should be defined to an instruction that orders both loads
       and stores before the instruction with respect to loads and stores
       after the instruction.  This pattern has no operands.
  
! ‘speculation_barrier’
       If the target can support speculative execution, then this pattern
       should be defined to an instruction that will block subsequent
       execution until any prior speculation conditions has been resolved.
*************** pattern to accomplish a certain task.
*** 29718,29729 ****
       pattern.  The pattern has no operands.
  
       If this pattern is not defined then the default expansion of
!      '__builtin_speculation_safe_value' will emit a warning.  You can
       suppress this warning by defining this pattern with a final
!      condition of '0' (zero), which tells the compiler that a
       speculation barrier is not needed for this target.
  
! 'sync_compare_and_swapMODE'
       This pattern, if defined, emits code for an atomic compare-and-swap
       operation.  Operand 1 is the memory on which the atomic operation
       is performed.  Operand 2 is the "old" value to be compared against
--- 29719,29730 ----
       pattern.  The pattern has no operands.
  
       If this pattern is not defined then the default expansion of
!      ‘__builtin_speculation_safe_value’ will emit a warning.  You can
       suppress this warning by defining this pattern with a final
!      condition of ‘0’ (zero), which tells the compiler that a
       speculation barrier is not needed for this target.
  
! ‘sync_compare_and_swapMODE’
       This pattern, if defined, emits code for an atomic compare-and-swap
       operation.  Operand 1 is the memory on which the atomic operation
       is performed.  Operand 2 is the "old" value to be compared against
*************** pattern to accomplish a certain task.
*** 29745,29771 ****
       operation is available via the status flags, it is possible to
       avoid a separate compare operation and issue the subsequent branch
       or store-flag operation immediately after the compare-and-swap.  To
!      this end, GCC will look for a 'MODE_CC' set in the output of
!      'sync_compare_and_swapMODE'; if the machine description includes
!      such a set, the target should also define special 'cbranchcc4'
!      and/or 'cstorecc4' instructions.  GCC will then be able to take the
!      destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or
!      'cstorecc4' pattern as the first operand of the comparison (the
!      second will be '(const_int 0)').
  
       For targets where the operating system may provide support for this
!      operation via library calls, the 'sync_compare_and_swap_optab' may
       be initialized to a function with the same interface as the
!      '__sync_val_compare_and_swap_N' built-in.  If the entire set of
       __SYNC builtins are supported via library calls, the target can
!      initialize all of the optabs at once with 'init_sync_libfuncs'.
!      For the purposes of C++11 'std::atomic::is_lock_free', it is
       assumed that these library calls do _not_ use any kind of
       interruptable locking.
  
! 'sync_addMODE', 'sync_subMODE'
! 'sync_iorMODE', 'sync_andMODE'
! 'sync_xorMODE', 'sync_nandMODE'
       These patterns emit code for an atomic operation on memory.
       Operand 0 is the memory on which the atomic operation is performed.
       Operand 1 is the second operand to the binary operator.
--- 29746,29772 ----
       operation is available via the status flags, it is possible to
       avoid a separate compare operation and issue the subsequent branch
       or store-flag operation immediately after the compare-and-swap.  To
!      this end, GCC will look for a ‘MODE_CC’ set in the output of
!      ‘sync_compare_and_swapMODE’; if the machine description includes
!      such a set, the target should also define special ‘cbranchcc4’
!      and/or ‘cstorecc4’ instructions.  GCC will then be able to take the
!      destination of the ‘MODE_CC’ set and pass it to the ‘cbranchcc4’ or
!      ‘cstorecc4’ pattern as the first operand of the comparison (the
!      second will be ‘(const_int 0)’).
  
       For targets where the operating system may provide support for this
!      operation via library calls, the ‘sync_compare_and_swap_optab’ may
       be initialized to a function with the same interface as the
!      ‘__sync_val_compare_and_swap_N’ built-in.  If the entire set of
       __SYNC builtins are supported via library calls, the target can
!      initialize all of the optabs at once with ‘init_sync_libfuncs’.
!      For the purposes of C++11 ‘std::atomic::is_lock_free’, it is
       assumed that these library calls do _not_ use any kind of
       interruptable locking.
  
! ‘sync_addMODE’, ‘sync_subMODE’
! ‘sync_iorMODE’, ‘sync_andMODE’
! ‘sync_xorMODE’, ‘sync_nandMODE’
       These patterns emit code for an atomic operation on memory.
       Operand 0 is the memory on which the atomic operation is performed.
       Operand 1 is the second operand to the binary operator.
*************** pattern to accomplish a certain task.
*** 29778,29786 ****
       If these patterns are not defined, the operation will be
       constructed from a compare-and-swap operation, if defined.
  
! 'sync_old_addMODE', 'sync_old_subMODE'
! 'sync_old_iorMODE', 'sync_old_andMODE'
! 'sync_old_xorMODE', 'sync_old_nandMODE'
       These patterns emit code for an atomic operation on memory, and
       return the value that the memory contained before the operation.
       Operand 0 is the result value, operand 1 is the memory on which the
--- 29779,29787 ----
       If these patterns are not defined, the operation will be
       constructed from a compare-and-swap operation, if defined.
  
! ‘sync_old_addMODE’, ‘sync_old_subMODE’
! ‘sync_old_iorMODE’, ‘sync_old_andMODE’
! ‘sync_old_xorMODE’, ‘sync_old_nandMODE’
       These patterns emit code for an atomic operation on memory, and
       return the value that the memory contained before the operation.
       Operand 0 is the result value, operand 1 is the memory on which the
*************** pattern to accomplish a certain task.
*** 29795,29808 ****
       If these patterns are not defined, the operation will be
       constructed from a compare-and-swap operation, if defined.
  
! 'sync_new_addMODE', 'sync_new_subMODE'
! 'sync_new_iorMODE', 'sync_new_andMODE'
! 'sync_new_xorMODE', 'sync_new_nandMODE'
!      These patterns are like their 'sync_old_OP' counterparts, except
       that they return the value that exists in the memory location after
       the operation, rather than before the operation.
  
! 'sync_lock_test_and_setMODE'
       This pattern takes two forms, based on the capabilities of the
       target.  In either case, operand 0 is the result of the operand,
       operand 1 is the memory on which the atomic operation is performed,
--- 29796,29809 ----
       If these patterns are not defined, the operation will be
       constructed from a compare-and-swap operation, if defined.
  
! ‘sync_new_addMODE’, ‘sync_new_subMODE’
! ‘sync_new_iorMODE’, ‘sync_new_andMODE’
! ‘sync_new_xorMODE’, ‘sync_new_nandMODE’
!      These patterns are like their ‘sync_old_OP’ counterparts, except
       that they return the value that exists in the memory location after
       the operation, rather than before the operation.
  
! ‘sync_lock_test_and_setMODE’
       This pattern takes two forms, based on the capabilities of the
       target.  In either case, operand 0 is the result of the operand,
       operand 1 is the memory on which the atomic operation is performed,
*************** pattern to accomplish a certain task.
*** 29814,29820 ****
       operand.
  
       For less capable targets, any value operand that is not the
!      constant 1 should be rejected with 'FAIL'.  In this case the target
       may use an atomic test-and-set bit operation.  The result operand
       should contain 1 if the bit was previously set and 0 if the bit was
       previously clear.  The true contents of the memory operand are
--- 29815,29821 ----
       operand.
  
       For less capable targets, any value operand that is not the
!      constant 1 should be rejected with ‘FAIL’.  In this case the target
       may use an atomic test-and-set bit operation.  The result operand
       should contain 1 if the bit was previously set and 0 if the bit was
       previously clear.  The true contents of the memory operand are
*************** pattern to accomplish a certain task.
*** 29828,29841 ****
       If this pattern is not defined, the operation will be constructed
       from a compare-and-swap operation, if defined.
  
! 'sync_lock_releaseMODE'
       This pattern, if defined, releases a lock set by
!      'sync_lock_test_and_setMODE'.  Operand 0 is the memory that
       contains the lock; operand 1 is the value to store in the lock.
  
       If the target doesn't implement full semantics for
!      'sync_lock_test_and_setMODE', any value operand which is not the
!      constant 0 should be rejected with 'FAIL', and the true contents of
       the memory operand are implementation defined.
  
       This pattern must issue any memory barrier instructions such that
--- 29829,29842 ----
       If this pattern is not defined, the operation will be constructed
       from a compare-and-swap operation, if defined.
  
! ‘sync_lock_releaseMODE’
       This pattern, if defined, releases a lock set by
!      ‘sync_lock_test_and_setMODE’.  Operand 0 is the memory that
       contains the lock; operand 1 is the value to store in the lock.
  
       If the target doesn't implement full semantics for
!      ‘sync_lock_test_and_setMODE’, any value operand which is not the
!      constant 0 should be rejected with ‘FAIL’, and the true contents of
       the memory operand are implementation defined.
  
       This pattern must issue any memory barrier instructions such that
*************** pattern to accomplish a certain task.
*** 29843,29853 ****
       is released only after all previous memory operations have
       completed.
  
!      If this pattern is not defined, then a 'memory_barrier' pattern
       will be emitted, followed by a store of the value to the memory
       operand.
  
! 'atomic_compare_and_swapMODE'
       This pattern, if defined, emits code for an atomic compare-and-swap
       operation with memory model semantics.  Operand 2 is the memory on
       which the atomic operation is performed.  Operand 0 is an output
--- 29844,29854 ----
       is released only after all previous memory operations have
       completed.
  
!      If this pattern is not defined, then a ‘memory_barrier’ pattern
       will be emitted, followed by a store of the value to the memory
       operand.
  
! ‘atomic_compare_and_swapMODE’
       This pattern, if defined, emits code for an atomic compare-and-swap
       operation with memory model semantics.  Operand 2 is the memory on
       which the atomic operation is performed.  Operand 0 is an output
*************** pattern to accomplish a certain task.
*** 29874,29905 ****
       operand 5 can be ignored.  Note a strong implementation must be
       provided.
  
!      If this pattern is not provided, the '__atomic_compare_exchange'
!      built-in functions will utilize the legacy 'sync_compare_and_swap'
!      pattern with an '__ATOMIC_SEQ_CST' memory model.
  
! 'atomic_loadMODE'
       This pattern implements an atomic load operation with memory model
       semantics.  Operand 1 is the memory address being loaded from.
       Operand 0 is the result of the load.  Operand 2 is the memory model
       to be used for the load operation.
  
!      If not present, the '__atomic_load' built-in function will either
       resort to a normal load with memory barriers, or a compare-and-swap
       operation if a normal load would not be atomic.
  
! 'atomic_storeMODE'
       This pattern implements an atomic store operation with memory model
       semantics.  Operand 0 is the memory address being stored to.
       Operand 1 is the value to be written.  Operand 2 is the memory
       model to be used for the operation.
  
!      If not present, the '__atomic_store' built-in function will attempt
       to perform a normal store and surround it with any required memory
       fences.  If the store would not be atomic, then an
!      '__atomic_exchange' is attempted with the result being ignored.
  
! 'atomic_exchangeMODE'
       This pattern implements an atomic exchange operation with memory
       model semantics.  Operand 1 is the memory location the operation is
       performed on.  Operand 0 is an output operand which is set to the
--- 29875,29906 ----
       operand 5 can be ignored.  Note a strong implementation must be
       provided.
  
!      If this pattern is not provided, the ‘__atomic_compare_exchange’
!      built-in functions will utilize the legacy ‘sync_compare_and_swap’
!      pattern with an ‘__ATOMIC_SEQ_CST’ memory model.
  
! ‘atomic_loadMODE’
       This pattern implements an atomic load operation with memory model
       semantics.  Operand 1 is the memory address being loaded from.
       Operand 0 is the result of the load.  Operand 2 is the memory model
       to be used for the load operation.
  
!      If not present, the ‘__atomic_load’ built-in function will either
       resort to a normal load with memory barriers, or a compare-and-swap
       operation if a normal load would not be atomic.
  
! ‘atomic_storeMODE’
       This pattern implements an atomic store operation with memory model
       semantics.  Operand 0 is the memory address being stored to.
       Operand 1 is the value to be written.  Operand 2 is the memory
       model to be used for the operation.
  
!      If not present, the ‘__atomic_store’ built-in function will attempt
       to perform a normal store and surround it with any required memory
       fences.  If the store would not be atomic, then an
!      ‘__atomic_exchange’ is attempted with the result being ignored.
  
! ‘atomic_exchangeMODE’
       This pattern implements an atomic exchange operation with memory
       model semantics.  Operand 1 is the memory location the operation is
       performed on.  Operand 0 is an output operand which is set to the
*************** pattern to accomplish a certain task.
*** 29908,29919 ****
       to be used.
  
       If this pattern is not present, the built-in function
!      '__atomic_exchange' will attempt to preform the operation with a
       compare and swap loop.
  
! 'atomic_addMODE', 'atomic_subMODE'
! 'atomic_orMODE', 'atomic_andMODE'
! 'atomic_xorMODE', 'atomic_nandMODE'
       These patterns emit code for an atomic operation on memory with
       memory model semantics.  Operand 0 is the memory on which the
       atomic operation is performed.  Operand 1 is the second operand to
--- 29909,29920 ----
       to be used.
  
       If this pattern is not present, the built-in function
!      ‘__atomic_exchange’ will attempt to preform the operation with a
       compare and swap loop.
  
! ‘atomic_addMODE’, ‘atomic_subMODE’
! ‘atomic_orMODE’, ‘atomic_andMODE’
! ‘atomic_xorMODE’, ‘atomic_nandMODE’
       These patterns emit code for an atomic operation on memory with
       memory model semantics.  Operand 0 is the memory on which the
       atomic operation is performed.  Operand 1 is the second operand to
*************** pattern to accomplish a certain task.
*** 29921,29933 ****
       the operation.
  
       If these patterns are not defined, attempts will be made to use
!      legacy 'sync' patterns, or equivalent patterns which return a
       result.  If none of these are available a compare-and-swap loop
       will be used.
  
! 'atomic_fetch_addMODE', 'atomic_fetch_subMODE'
! 'atomic_fetch_orMODE', 'atomic_fetch_andMODE'
! 'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE'
       These patterns emit code for an atomic operation on memory with
       memory model semantics, and return the original value.  Operand 0
       is an output operand which contains the value of the memory
--- 29922,29934 ----
       the operation.
  
       If these patterns are not defined, attempts will be made to use
!      legacy ‘sync’ patterns, or equivalent patterns which return a
       result.  If none of these are available a compare-and-swap loop
       will be used.
  
! ‘atomic_fetch_addMODE’, ‘atomic_fetch_subMODE’
! ‘atomic_fetch_orMODE’, ‘atomic_fetch_andMODE’
! ‘atomic_fetch_xorMODE’, ‘atomic_fetch_nandMODE’
       These patterns emit code for an atomic operation on memory with
       memory model semantics, and return the original value.  Operand 0
       is an output operand which contains the value of the memory
*************** pattern to accomplish a certain task.
*** 29937,29948 ****
       model to be used by the operation.
  
       If these patterns are not defined, attempts will be made to use
!      legacy 'sync' patterns.  If none of these are available a
       compare-and-swap loop will be used.
  
! 'atomic_add_fetchMODE', 'atomic_sub_fetchMODE'
! 'atomic_or_fetchMODE', 'atomic_and_fetchMODE'
! 'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE'
       These patterns emit code for an atomic operation on memory with
       memory model semantics and return the result after the operation is
       performed.  Operand 0 is an output operand which contains the value
--- 29938,29949 ----
       model to be used by the operation.
  
       If these patterns are not defined, attempts will be made to use
!      legacy ‘sync’ patterns.  If none of these are available a
       compare-and-swap loop will be used.
  
! ‘atomic_add_fetchMODE’, ‘atomic_sub_fetchMODE’
! ‘atomic_or_fetchMODE’, ‘atomic_and_fetchMODE’
! ‘atomic_xor_fetchMODE’, ‘atomic_nand_fetchMODE’
       These patterns emit code for an atomic operation on memory with
       memory model semantics and return the result after the operation is
       performed.  Operand 0 is an output operand which contains the value
*************** pattern to accomplish a certain task.
*** 29952,29976 ****
       operation.
  
       If these patterns are not defined, attempts will be made to use
!      legacy 'sync' patterns, or equivalent patterns which return the
       result before the operation followed by the arithmetic operation
       required to produce the result.  If none of these are available a
       compare-and-swap loop will be used.
  
! 'atomic_test_and_set'
!      This pattern emits code for '__builtin_atomic_test_and_set'.
       Operand 0 is an output operand which is set to true if the previous
       previous contents of the byte was "set", and false otherwise.
!      Operand 1 is the 'QImode' memory to be modified.  Operand 2 is the
       memory model to be used.
  
       The specific value that defines "set" is implementation defined,
       and is normally based on what is performed by the native atomic
       test and set instruction.
  
! 'atomic_bit_test_and_setMODE'
! 'atomic_bit_test_and_complementMODE'
! 'atomic_bit_test_and_resetMODE'
       These patterns emit code for an atomic bitwise operation on memory
       with memory model semantics, and return the original value of the
       specified bit.  Operand 0 is an output operand which contains the
--- 29953,29977 ----
       operation.
  
       If these patterns are not defined, attempts will be made to use
!      legacy ‘sync’ patterns, or equivalent patterns which return the
       result before the operation followed by the arithmetic operation
       required to produce the result.  If none of these are available a
       compare-and-swap loop will be used.
  
! ‘atomic_test_and_set’
!      This pattern emits code for ‘__builtin_atomic_test_and_set’.
       Operand 0 is an output operand which is set to true if the previous
       previous contents of the byte was "set", and false otherwise.
!      Operand 1 is the ‘QImode’ memory to be modified.  Operand 2 is the
       memory model to be used.
  
       The specific value that defines "set" is implementation defined,
       and is normally based on what is performed by the native atomic
       test and set instruction.
  
! ‘atomic_bit_test_and_setMODE’
! ‘atomic_bit_test_and_complementMODE’
! ‘atomic_bit_test_and_resetMODE’
       These patterns emit code for an atomic bitwise operation on memory
       with memory model semantics, and return the original value of the
       specified bit.  Operand 0 is an output operand which contains the
*************** pattern to accomplish a certain task.
*** 29979,30003 ****
       atomic operation is performed.  Operand 2 is the bit within the
       operand, starting with least significant bit.  Operand 3 is the
       memory model to be used by the operation.  Operand 4 is a flag - it
!      is 'const1_rtx' if operand 0 should contain the original value of
       the specified bit in the least significant bit of the operand, and
!      'const0_rtx' if the bit should be in its original position in the
!      operand.  'atomic_bit_test_and_setMODE' atomically sets the
       specified bit after remembering its original value,
!      'atomic_bit_test_and_complementMODE' inverts the specified bit and
!      'atomic_bit_test_and_resetMODE' clears the specified bit.
  
       If these patterns are not defined, attempts will be made to use
!      'atomic_fetch_orMODE', 'atomic_fetch_xorMODE' or
!      'atomic_fetch_andMODE' instruction patterns, or their 'sync'
       counterparts.  If none of these are available a compare-and-swap
       loop will be used.
  
! 'atomic_add_fetch_cmp_0MODE'
! 'atomic_sub_fetch_cmp_0MODE'
! 'atomic_and_fetch_cmp_0MODE'
! 'atomic_or_fetch_cmp_0MODE'
! 'atomic_xor_fetch_cmp_0MODE'
       These patterns emit code for an atomic operation on memory with
       memory model semantics if the fetch result is used only in a
       comparison against zero.  Operand 0 is an output operand which
--- 29980,30004 ----
       atomic operation is performed.  Operand 2 is the bit within the
       operand, starting with least significant bit.  Operand 3 is the
       memory model to be used by the operation.  Operand 4 is a flag - it
!      is ‘const1_rtx’ if operand 0 should contain the original value of
       the specified bit in the least significant bit of the operand, and
!      ‘const0_rtx’ if the bit should be in its original position in the
!      operand.  ‘atomic_bit_test_and_setMODE’ atomically sets the
       specified bit after remembering its original value,
!      ‘atomic_bit_test_and_complementMODE’ inverts the specified bit and
!      ‘atomic_bit_test_and_resetMODE’ clears the specified bit.
  
       If these patterns are not defined, attempts will be made to use
!      ‘atomic_fetch_orMODE’, ‘atomic_fetch_xorMODE’ or
!      ‘atomic_fetch_andMODE’ instruction patterns, or their ‘sync’
       counterparts.  If none of these are available a compare-and-swap
       loop will be used.
  
! ‘atomic_add_fetch_cmp_0MODE’
! ‘atomic_sub_fetch_cmp_0MODE’
! ‘atomic_and_fetch_cmp_0MODE’
! ‘atomic_or_fetch_cmp_0MODE’
! ‘atomic_xor_fetch_cmp_0MODE’
       These patterns emit code for an atomic operation on memory with
       memory model semantics if the fetch result is used only in a
       comparison against zero.  Operand 0 is an output operand which
*************** pattern to accomplish a certain task.
*** 30006,30060 ****
       atomic operation is performed.  Operand 2 is the second operand to
       the binary operator.  Operand 3 is the memory model to be used by
       the operation.  Operand 4 is an integer holding the comparison
!      code, one of 'EQ', 'NE', 'LT', 'GT', 'LE' or 'GE'.
  
       If these patterns are not defined, attempts will be made to use
       separate atomic operation and fetch pattern followed by comparison
       of the result against zero.
  
! 'mem_thread_fence'
       This pattern emits code required to implement a thread fence with
       memory model semantics.  Operand 0 is the memory model to be used.
  
!      For the '__ATOMIC_RELAXED' model no instructions need to be issued
       and this expansion is not invoked.
  
       The compiler always emits a compiler memory barrier regardless of
       what expanding this pattern produced.
  
       If this pattern is not defined, the compiler falls back to
!      expanding the 'memory_barrier' pattern, then to emitting
!      '__sync_synchronize' library call, and finally to just placing a
       compiler memory barrier.
  
! 'get_thread_pointerMODE'
! 'set_thread_pointerMODE'
       These patterns emit code that reads/sets the TLS thread pointer.
       Currently, these are only needed if the target needs to support the
!      '__builtin_thread_pointer' and '__builtin_set_thread_pointer'
       builtins.
  
       The get/set patterns have a single output/input operand
!      respectively, with MODE intended to be 'Pmode'.
  
! 'stack_protect_combined_set'
!      This pattern, if defined, moves a 'ptr_mode' value from an address
       whose declaration RTX is given in operand 1 to the memory in
       operand 0 without leaving the value in a register afterward.  If
       several instructions are needed by the target to perform the
       operation (eg.  to load the address from a GOT entry then load the
!      'ptr_mode' value and finally store it), it is the backend's
       responsibility to ensure no intermediate result gets spilled.  This
       is to avoid leaking the value some place that an attacker might use
       to rewrite the stack guard slot after having clobbered it.
  
       If this pattern is not defined, then the address declaration is
!      expanded first in the standard way and a 'stack_protect_set'
       pattern is then generated to move the value from that address to
       the address in operand 0.
  
! 'stack_protect_set'
!      This pattern, if defined, moves a 'ptr_mode' value from the valid
       memory location in operand 1 to the memory in operand 0 without
       leaving the value in a register afterward.  This is to avoid
       leaking the value some place that an attacker might use to rewrite
--- 30007,30061 ----
       atomic operation is performed.  Operand 2 is the second operand to
       the binary operator.  Operand 3 is the memory model to be used by
       the operation.  Operand 4 is an integer holding the comparison
!      code, one of ‘EQ’, ‘NE’, ‘LT’, ‘GT’, ‘LE’ or ‘GE’.
  
       If these patterns are not defined, attempts will be made to use
       separate atomic operation and fetch pattern followed by comparison
       of the result against zero.
  
! ‘mem_thread_fence’
       This pattern emits code required to implement a thread fence with
       memory model semantics.  Operand 0 is the memory model to be used.
  
!      For the ‘__ATOMIC_RELAXED’ model no instructions need to be issued
       and this expansion is not invoked.
  
       The compiler always emits a compiler memory barrier regardless of
       what expanding this pattern produced.
  
       If this pattern is not defined, the compiler falls back to
!      expanding the ‘memory_barrier’ pattern, then to emitting
!      ‘__sync_synchronize’ library call, and finally to just placing a
       compiler memory barrier.
  
! ‘get_thread_pointerMODE’
! ‘set_thread_pointerMODE’
       These patterns emit code that reads/sets the TLS thread pointer.
       Currently, these are only needed if the target needs to support the
!      ‘__builtin_thread_pointer’ and ‘__builtin_set_thread_pointer’
       builtins.
  
       The get/set patterns have a single output/input operand
!      respectively, with MODE intended to be ‘Pmode’.
  
! ‘stack_protect_combined_set’
!      This pattern, if defined, moves a ‘ptr_mode’ value from an address
       whose declaration RTX is given in operand 1 to the memory in
       operand 0 without leaving the value in a register afterward.  If
       several instructions are needed by the target to perform the
       operation (eg.  to load the address from a GOT entry then load the
!      ‘ptr_mode’ value and finally store it), it is the backend's
       responsibility to ensure no intermediate result gets spilled.  This
       is to avoid leaking the value some place that an attacker might use
       to rewrite the stack guard slot after having clobbered it.
  
       If this pattern is not defined, then the address declaration is
!      expanded first in the standard way and a ‘stack_protect_set’
       pattern is then generated to move the value from that address to
       the address in operand 0.
  
! ‘stack_protect_set’
!      This pattern, if defined, moves a ‘ptr_mode’ value from the valid
       memory location in operand 1 to the memory in operand 0 without
       leaving the value in a register afterward.  This is to avoid
       leaking the value some place that an attacker might use to rewrite
*************** pattern to accomplish a certain task.
*** 30067,30091 ****
       If this pattern is not defined, then a plain move pattern is
       generated.
  
! 'stack_protect_combined_test'
!      This pattern, if defined, compares a 'ptr_mode' value from an
       address whose declaration RTX is given in operand 1 with the memory
       in operand 0 without leaving the value in a register afterward and
       branches to operand 2 if the values were equal.  If several
       instructions are needed by the target to perform the operation (eg.
!      to load the address from a GOT entry then load the 'ptr_mode' value
       and finally store it), it is the backend's responsibility to ensure
       no intermediate result gets spilled.  This is to avoid leaking the
       value some place that an attacker might use to rewrite the stack
       guard slot after having clobbered it.
  
       If this pattern is not defined, then the address declaration is
!      expanded first in the standard way and a 'stack_protect_test'
       pattern is then generated to compare the value from that address to
       the value at the memory in operand 0.
  
! 'stack_protect_test'
!      This pattern, if defined, compares a 'ptr_mode' value from the
       valid memory location in operand 1 with the memory in operand 0
       without leaving the value in a register afterward and branches to
       operand 2 if the values were equal.
--- 30068,30092 ----
       If this pattern is not defined, then a plain move pattern is
       generated.
  
! ‘stack_protect_combined_test’
!      This pattern, if defined, compares a ‘ptr_mode’ value from an
       address whose declaration RTX is given in operand 1 with the memory
       in operand 0 without leaving the value in a register afterward and
       branches to operand 2 if the values were equal.  If several
       instructions are needed by the target to perform the operation (eg.
!      to load the address from a GOT entry then load the ‘ptr_mode’ value
       and finally store it), it is the backend's responsibility to ensure
       no intermediate result gets spilled.  This is to avoid leaking the
       value some place that an attacker might use to rewrite the stack
       guard slot after having clobbered it.
  
       If this pattern is not defined, then the address declaration is
!      expanded first in the standard way and a ‘stack_protect_test’
       pattern is then generated to compare the value from that address to
       the value at the memory in operand 0.
  
! ‘stack_protect_test’
!      This pattern, if defined, compares a ‘ptr_mode’ value from the
       valid memory location in operand 1 with the memory in operand 0
       without leaving the value in a register afterward and branches to
       operand 2 if the values were equal.
*************** pattern to accomplish a certain task.
*** 30093,30113 ****
       If this pattern is not defined, then a plain compare pattern and
       conditional branch pattern is used.
  
! 'clear_cache'
       This pattern, if defined, flushes the instruction cache for a
       region of memory.  The region is bounded to by the Pmode pointers
       in operand 0 inclusive and operand 1 exclusive.
  
       If this pattern is not defined, a call to the library function
!      '__clear_cache' is used.
  
! 'spaceshipM3'
       Initialize output operand 0 with mode of integer type to -1, 0, 1
       or 2 if operand 1 with mode M compares less than operand 2, equal
       to operand 2, greater than operand 2 or is unordered with operand
       2.  M should be a scalar floating point mode.
  
!      This pattern is not allowed to 'FAIL'.
  
  
  File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
--- 30094,30114 ----
       If this pattern is not defined, then a plain compare pattern and
       conditional branch pattern is used.
  
! ‘clear_cache’
       This pattern, if defined, flushes the instruction cache for a
       region of memory.  The region is bounded to by the Pmode pointers
       in operand 0 inclusive and operand 1 exclusive.
  
       If this pattern is not defined, a call to the library function
!      ‘__clear_cache’ is used.
  
! ‘spaceshipM3’
       Initialize output operand 0 with mode of integer type to -1, 0, 1
       or 2 if operand 1 with mode M compares less than operand 2, equal
       to operand 2, greater than operand 2 or is unordered with operand
       2.  M should be a scalar floating point mode.
  
!      This pattern is not allowed to ‘FAIL’.
  
  
  File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
*************** Constant integers do not specify a machi
*** 30153,30159 ****
  extend a constant value could match either pattern.  The pattern it
  actually will match is the one that appears first in the file.  For
  correct results, this must be the one for the widest possible mode
! ('HImode', here).  If the pattern matches the 'QImode' instruction, the
  results will be incorrect if the constant value does not actually fit
  that mode.
  
--- 30154,30160 ----
  extend a constant value could match either pattern.  The pattern it
  actually will match is the one that appears first in the file.  For
  correct results, this must be the one for the widest possible mode
! (‘HImode’, here).  If the pattern matches the ‘QImode’ instruction, the
  results will be incorrect if the constant value does not actually fit
  that mode.
  
*************** File: gccint.info,  Node: Jump Patterns,
*** 30177,30189 ****
  
  GCC does not assume anything about how the machine realizes jumps.  The
  machine description should define a single pattern, usually a
! 'define_expand', which expands to all the required insns.
  
   Usually, this would be a comparison insn to set the condition code and
  a separate branch insn testing the condition code and branching or not
  according to its value.  For many machines, however, separating compares
  and branches is limiting, which is why the more flexible approach with
! one 'define_expand' is used in GCC. The machine description becomes
  clearer for architectures that have compare-and-branch instructions but
  no condition code.  It also works better when different sets of
  comparison operators are supported by different kinds of conditional
--- 30178,30190 ----
  
  GCC does not assume anything about how the machine realizes jumps.  The
  machine description should define a single pattern, usually a
! ‘define_expand’, which expands to all the required insns.
  
   Usually, this would be a comparison insn to set the condition code and
  a separate branch insn testing the condition code and branching or not
  according to its value.  For many machines, however, separating compares
  and branches is limiting, which is why the more flexible approach with
! one ‘define_expand’ is used in GCC. The machine description becomes
  clearer for architectures that have compare-and-branch instructions but
  no condition code.  It also works better when different sets of
  comparison operators are supported by different kinds of conditional
*************** File: gccint.info,  Node: Looping Patter
*** 30208,30214 ****
  ===========================================
  
  Some machines have special jump instructions that can be utilized to
! make loops more efficient.  A common example is the 68000 'dbra'
  instruction which performs a decrement of a register and a branch if the
  result was greater than zero.  Other machines, in particular digital
  signal processors (DSPs), have special block repeat instructions to
--- 30209,30215 ----
  ===========================================
  
  Some machines have special jump instructions that can be utilized to
! make loops more efficient.  A common example is the 68000 ‘dbra’
  instruction which performs a decrement of a register and a branch if the
  result was greater than zero.  Other machines, in particular digital
  signal processors (DSPs), have special block repeat instructions to
*************** provide low-overhead loop support.  For
*** 30216,30240 ****
  DSPs have a block repeat instruction that loads special registers to
  mark the top and end of a loop and to count the number of loop
  iterations.  This avoids the need for fetching and executing a
! 'dbra'-like instruction and avoids pipeline stalls associated with the
  jump.
  
   GCC has two special named patterns to support low overhead looping.
! They are 'doloop_begin' and 'doloop_end'.  These are emitted by the loop
  optimizer for certain well-behaved loops with a finite number of loop
  iterations using information collected during strength reduction.
  
!  The 'doloop_end' pattern describes the actual looping instruction (or
! the implicit looping operation) and the 'doloop_begin' pattern is an
  optional companion pattern that can be used for initialization needed
  for some low-overhead looping instructions.
  
   Note that some machines require the actual looping instruction to be
  emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
  the true RTL for a looping instruction at the top of the loop can cause
! problems with flow analysis.  So instead, a dummy 'doloop' insn is
  emitted at the end of the loop.  The machine dependent reorg pass checks
! for the presence of this 'doloop' insn and then searches back to the top
  of the loop, where it inserts the true looping insn (provided there are
  no instructions in the loop which would cause problems).  Any additional
  labels can be emitted at this point.  In addition, if the desired
--- 30217,30241 ----
  DSPs have a block repeat instruction that loads special registers to
  mark the top and end of a loop and to count the number of loop
  iterations.  This avoids the need for fetching and executing a
! ‘dbra’-like instruction and avoids pipeline stalls associated with the
  jump.
  
   GCC has two special named patterns to support low overhead looping.
! They are ‘doloop_begin’ and ‘doloop_end’.  These are emitted by the loop
  optimizer for certain well-behaved loops with a finite number of loop
  iterations using information collected during strength reduction.
  
!  The ‘doloop_end’ pattern describes the actual looping instruction (or
! the implicit looping operation) and the ‘doloop_begin’ pattern is an
  optional companion pattern that can be used for initialization needed
  for some low-overhead looping instructions.
  
   Note that some machines require the actual looping instruction to be
  emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
  the true RTL for a looping instruction at the top of the loop can cause
! problems with flow analysis.  So instead, a dummy ‘doloop’ insn is
  emitted at the end of the loop.  The machine dependent reorg pass checks
! for the presence of this ‘doloop’ insn and then searches back to the top
  of the loop, where it inserts the true looping insn (provided there are
  no instructions in the loop which would cause problems).  Any additional
  labels can be emitted at this point.  In addition, if the desired
*************** special iteration counter register was n
*** 30242,30254 ****
  dependent reorg pass could emit a traditional compare and jump
  instruction pair.
  
!  For the 'doloop_end' pattern, the loop optimizer allocates an
  additional pseudo register as an iteration counter.  This pseudo
  register cannot be used within the loop (i.e., general induction
  variables cannot be derived from it), however, in many cases the loop
  induction variable may become redundant and removed by the flow pass.
  
!  The 'doloop_end' pattern must have a specific structure to be handled
  correctly by GCC. The example below is taken (slightly simplified) from
  the PDP-11 target:
  
--- 30243,30255 ----
  dependent reorg pass could emit a traditional compare and jump
  instruction pair.
  
!  For the ‘doloop_end’ pattern, the loop optimizer allocates an
  additional pseudo register as an iteration counter.  This pseudo
  register cannot be used within the loop (i.e., general induction
  variables cannot be derived from it), however, in many cases the loop
  induction variable may become redundant and removed by the flow pass.
  
!  The ‘doloop_end’ pattern must have a specific structure to be handled
  correctly by GCC. The example below is taken (slightly simplified) from
  the PDP-11 target:
  
*************** the PDP-11 target:
*** 30292,30325 ****
   The first part of the pattern describes the branch condition.  GCC
  supports three cases for the way the target machine handles the loop
  counter:
!    * Loop terminates when the loop register decrements to zero.  This is
!      represented by a 'ne' comparison of the register (its old value)
       with constant 1 (as in the example above).
!    * Loop terminates when the loop register decrements to -1.  This is
!      represented by a 'ne' comparison of the register with constant
       zero.
!    * Loop terminates when the loop register decrements to a negative
!      value.  This is represented by a 'ge' comparison of the register
!      with constant zero.  For this case, GCC will attach a 'REG_NONNEG'
!      note to the 'doloop_end' insn if it can determine that the register
       will be non-negative.
  
!  Since the 'doloop_end' insn is a jump insn that also has an output, the
  reload pass does not handle the output operand.  Therefore, the
  constraint must allow for that operand to be in memory rather than a
  register.  In the example shown above, that is handled (in the
! 'doloop_end_insn' pattern) by using a loop instruction sequence that can
  handle memory operands when the memory alternative appears.
  
   GCC does not check the mode of the loop register operand when
! generating the 'doloop_end' pattern.  If the pattern is only valid for
! some modes but not others, the pattern should be a 'define_expand'
  pattern that checks the operand mode in the preparation code, and issues
! 'FAIL' if an unsupported mode is found.  The example above does this,
! since the machine instruction to be used only exists for 'HImode'.
  
!  If the 'doloop_end' pattern is a 'define_expand', there must also be a
! 'define_insn' or 'define_insn_and_split' matching the generated pattern.
  Otherwise, the compiler will fail during loop optimization.
  
  
--- 30293,30326 ----
   The first part of the pattern describes the branch condition.  GCC
  supports three cases for the way the target machine handles the loop
  counter:
!    • Loop terminates when the loop register decrements to zero.  This is
!      represented by a ‘ne’ comparison of the register (its old value)
       with constant 1 (as in the example above).
!    • Loop terminates when the loop register decrements to −1.  This is
!      represented by a ‘ne’ comparison of the register with constant
       zero.
!    • Loop terminates when the loop register decrements to a negative
!      value.  This is represented by a ‘ge’ comparison of the register
!      with constant zero.  For this case, GCC will attach a ‘REG_NONNEG’
!      note to the ‘doloop_end’ insn if it can determine that the register
       will be non-negative.
  
!  Since the ‘doloop_end’ insn is a jump insn that also has an output, the
  reload pass does not handle the output operand.  Therefore, the
  constraint must allow for that operand to be in memory rather than a
  register.  In the example shown above, that is handled (in the
! ‘doloop_end_insn’ pattern) by using a loop instruction sequence that can
  handle memory operands when the memory alternative appears.
  
   GCC does not check the mode of the loop register operand when
! generating the ‘doloop_end’ pattern.  If the pattern is only valid for
! some modes but not others, the pattern should be a ‘define_expand’
  pattern that checks the operand mode in the preparation code, and issues
! ‘FAIL’ if an unsupported mode is found.  The example above does this,
! since the machine instruction to be used only exists for ‘HImode’.
  
!  If the ‘doloop_end’ pattern is a ‘define_expand’, there must also be a
! ‘define_insn’ or ‘define_insn_and_split’ matching the generated pattern.
  Otherwise, the compiler will fail during loop optimization.
  
  
*************** number of insn patterns required.
*** 30338,30375 ****
   In addition to algebraic simplifications, following canonicalizations
  are performed:
  
!    * For commutative and comparison operators, a constant is always made
       the second operand.  If a machine only supports a constant as the
       second operand, only patterns that match a constant in the second
       operand need be supplied.
  
!    * For the 'vec_merge' with constant mask(the third operand), the
       first and the second operand can be exchanged by inverting the
       mask.  In such cases, a constant is always made the second operand,
       otherwise the least significant bit of the mask is always
       set(select the first operand first).
  
!    * For associative operators, a sequence of operators will always
       chain to the left; for instance, only the left operand of an
!      integer 'plus' can itself be a 'plus'.  'and', 'ior', 'xor',
!      'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative
       when applied to integers, and sometimes to floating-point.
  
!    * For these operators, if only one operand is a 'neg', 'not', 'mult',
!      'plus', or 'minus' expression, it will be the first operand.
  
!    * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg'
       operations (if any) will be moved inside the operations as far as
!      possible.  For instance, '(neg (mult A B))' is canonicalized as
!      '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is
!      canonicalized as '(minus A (mult B C))'.
  
!    * For the 'compare' operator, a constant is always the second operand
       if the first argument is a condition code register.
  
!    * For instructions that inherently set a condition code register, the
!      'compare' operator is always written as the first RTL expression of
!      the 'parallel' instruction pattern.  For example,
  
            (define_insn ""
              [(set (reg:CCZ FLAGS_REG)
--- 30339,30376 ----
   In addition to algebraic simplifications, following canonicalizations
  are performed:
  
!    • For commutative and comparison operators, a constant is always made
       the second operand.  If a machine only supports a constant as the
       second operand, only patterns that match a constant in the second
       operand need be supplied.
  
!    • For the ‘vec_merge’ with constant mask(the third operand), the
       first and the second operand can be exchanged by inverting the
       mask.  In such cases, a constant is always made the second operand,
       otherwise the least significant bit of the mask is always
       set(select the first operand first).
  
!    • For associative operators, a sequence of operators will always
       chain to the left; for instance, only the left operand of an
!      integer ‘plus’ can itself be a ‘plus’.  ‘and’, ‘ior’, ‘xor’,
!      ‘plus’, ‘mult’, ‘smin’, ‘smax’, ‘umin’, and ‘umax’ are associative
       when applied to integers, and sometimes to floating-point.
  
!    • For these operators, if only one operand is a ‘neg’, ‘not’, ‘mult’,
!      ‘plus’, or ‘minus’ expression, it will be the first operand.
  
!    • In combinations of ‘neg’, ‘mult’, ‘plus’, and ‘minus’, the ‘neg’
       operations (if any) will be moved inside the operations as far as
!      possible.  For instance, ‘(neg (mult A B))’ is canonicalized as
!      ‘(mult (neg A) B)’, but ‘(plus (mult (neg B) C) A)’ is
!      canonicalized as ‘(minus A (mult B C))’.
  
!    • For the ‘compare’ operator, a constant is always the second operand
       if the first argument is a condition code register.
  
!    • For instructions that inherently set a condition code register, the
!      ‘compare’ operator is always written as the first RTL expression of
!      the ‘parallel’ instruction pattern.  For example,
  
            (define_insn ""
              [(set (reg:CCZ FLAGS_REG)
*************** are performed:
*** 30383,30403 ****
              ""
              "addl %0, %1, %2")
  
!    * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the
       first operand under the same conditions as above.
  
!    * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'.
!      Likewise with 'geu' instead of 'ltu'.
  
!    * '(minus X (const_int N))' is converted to '(plus X (const_int
!      -N))'.
  
!    * Within address computations (i.e., inside 'mem'), a left shift is
       converted into the appropriate multiplication by a power of two.
  
!    * De Morgan's Law is used to move bitwise negation inside a bitwise
       logical-and or logical-or operation.  If this results in only one
!      operand being a 'not' expression, it will be the first one.
  
       A machine that has an instruction that performs a bitwise
       logical-and of one operand with the bitwise negation of the other
--- 30384,30404 ----
              ""
              "addl %0, %1, %2")
  
!    • An operand of ‘neg’, ‘not’, ‘mult’, ‘plus’, or ‘minus’ is made the
       first operand under the same conditions as above.
  
!    • ‘(ltu (plus A B) B)’ is converted to ‘(ltu (plus A B) A)’.
!      Likewise with ‘geu’ instead of ‘ltu’.
  
!    • ‘(minus X (const_int N))’ is converted to ‘(plus X (const_int
!      -N))’.
  
!    • Within address computations (i.e., inside ‘mem’), a left shift is
       converted into the appropriate multiplication by a power of two.
  
!    • De Morgan's Law is used to move bitwise negation inside a bitwise
       logical-and or logical-or operation.  If this results in only one
!      operand being a ‘not’ expression, it will be the first one.
  
       A machine that has an instruction that performs a bitwise
       logical-and of one operand with the bitwise negation of the other
*************** are performed:
*** 30422,30454 ****
       In both cases, it is not necessary to include patterns for the many
       logically equivalent RTL expressions.
  
!    * The only possible RTL expressions involving both bitwise
!      exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M
!      (xor:M X Y))'.
  
!    * The sum of three items, one of which is a constant, will only
       appear in the form
  
            (plus:M (plus:M X Y) CONSTANT)
  
!    * Equality comparisons of a group of bits (usually a single bit) with
!      zero will be written using 'zero_extract' rather than the
!      equivalent 'and' or 'sign_extract' operations.
  
!    * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))'
!      is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))',
!      and likewise for 'zero_extend'.
  
!    * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))'
!      is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S))
!      (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend'
!      and 'lshiftrt'.  If the second operand of 'mult' is also a shift,
       then that is extended also.  This transformation is only applied
       when it can be proven that the original operation had sufficient
       precision to prevent overflow.
  
   Further canonicalization rules are defined in the function
! 'commutative_operand_precedence' in 'gcc/rtlanal.cc'.
  
  
  File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
--- 30423,30455 ----
       In both cases, it is not necessary to include patterns for the many
       logically equivalent RTL expressions.
  
!    • The only possible RTL expressions involving both bitwise
!      exclusive-or and bitwise negation are ‘(xor:M X Y)’ and ‘(not:M
!      (xor:M X Y))’.
  
!    • The sum of three items, one of which is a constant, will only
       appear in the form
  
            (plus:M (plus:M X Y) CONSTANT)
  
!    • Equality comparisons of a group of bits (usually a single bit) with
!      zero will be written using ‘zero_extract’ rather than the
!      equivalent ‘and’ or ‘sign_extract’ operations.
  
!    • ‘(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))’
!      is converted to ‘(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))’,
!      and likewise for ‘zero_extend’.
  
!    • ‘(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))’
!      is converted to ‘(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S))
!      (sign_extend:M1 Y))’, and likewise for patterns using ‘zero_extend’
!      and ‘lshiftrt’.  If the second operand of ‘mult’ is also a shift,
       then that is extended also.  This transformation is only applied
       when it can be proven that the original operation had sufficient
       precision to prevent overflow.
  
   Further canonicalization rules are defined in the function
! ‘commutative_operand_precedence’ in ‘gcc/rtlanal.cc’.
  
  
  File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
*************** File: gccint.info,  Node: Expander Defin
*** 30459,30503 ****
  On some target machines, some standard pattern names for RTL generation
  cannot be handled with single insn, but a sequence of RTL insns can
  represent them.  For these target machines, you can write a
! 'define_expand' to specify how to generate the sequence of RTL.
  
!  A 'define_expand' is an RTL expression that looks almost like a
! 'define_insn'; but, unlike the latter, a 'define_expand' is used only
  for RTL generation and it can produce more than one RTL insn.
  
!  A 'define_expand' RTX has four operands:
  
!    * The name.  Each 'define_expand' must have a name, since the only
       use for it is to refer to it by name.
  
!    * The RTL template.  This is a vector of RTL expressions representing
!      a sequence of separate instructions.  Unlike 'define_insn', there
!      is no implicit surrounding 'PARALLEL'.
  
!    * The condition, a string containing a C expression.  This expression
       is used to express how the availability of this pattern depends on
       subclasses of target machine, selected by command-line options when
!      GCC is run.  This is just like the condition of a 'define_insn'
       that has a standard name.  Therefore, the condition (if present)
       may not depend on the data in the insn being matched, but only the
       target-machine-type flags.  The compiler needs to test these
       conditions during initialization in order to learn exactly which
       named instructions are available in a particular run.
  
!    * The preparation statements, a string containing zero or more C
       statements which are to be executed before RTL code is generated
       from the RTL template.
  
       Usually these statements prepare temporary registers for use as
       internal operands in the RTL template, but they can also generate
!      RTL insns directly by calling routines such as 'emit_insn', etc.
       Any such insns precede the ones that come from the RTL template.
  
!    * Optionally, a vector containing the values of attributes.  *Note
       Insn Attributes::.
  
!  Every RTL insn emitted by a 'define_expand' must match some
! 'define_insn' in the machine description.  Otherwise, the compiler will
  crash when trying to generate code for the insn or trying to optimize
  it.
  
--- 30460,30504 ----
  On some target machines, some standard pattern names for RTL generation
  cannot be handled with single insn, but a sequence of RTL insns can
  represent them.  For these target machines, you can write a
! ‘define_expand’ to specify how to generate the sequence of RTL.
  
!  A ‘define_expand’ is an RTL expression that looks almost like a
! ‘define_insn’; but, unlike the latter, a ‘define_expand’ is used only
  for RTL generation and it can produce more than one RTL insn.
  
!  A ‘define_expand’ RTX has four operands:
  
!    • The name.  Each ‘define_expand’ must have a name, since the only
       use for it is to refer to it by name.
  
!    • The RTL template.  This is a vector of RTL expressions representing
!      a sequence of separate instructions.  Unlike ‘define_insn’, there
!      is no implicit surrounding ‘PARALLEL’.
  
!    • The condition, a string containing a C expression.  This expression
       is used to express how the availability of this pattern depends on
       subclasses of target machine, selected by command-line options when
!      GCC is run.  This is just like the condition of a ‘define_insn’
       that has a standard name.  Therefore, the condition (if present)
       may not depend on the data in the insn being matched, but only the
       target-machine-type flags.  The compiler needs to test these
       conditions during initialization in order to learn exactly which
       named instructions are available in a particular run.
  
!    • The preparation statements, a string containing zero or more C
       statements which are to be executed before RTL code is generated
       from the RTL template.
  
       Usually these statements prepare temporary registers for use as
       internal operands in the RTL template, but they can also generate
!      RTL insns directly by calling routines such as ‘emit_insn’, etc.
       Any such insns precede the ones that come from the RTL template.
  
!    • Optionally, a vector containing the values of attributes.  *Note
       Insn Attributes::.
  
!  Every RTL insn emitted by a ‘define_expand’ must match some
! ‘define_insn’ in the machine description.  Otherwise, the compiler will
  crash when trying to generate code for the insn or trying to optimize
  it.
  
*************** also describes the operands that need to
*** 30506,30555 ****
  is used.  In particular, it gives a predicate for each operand.
  
   A true operand, which needs to be specified in order to generate RTL
! from the pattern, should be described with a 'match_operand' in its
  first occurrence in the RTL template.  This enters information on the
  operand's predicate into the tables that record such things.  GCC uses
  the information to preload the operand into a register if that is
  required for valid RTL code.  If the operand is referred to more than
! once, subsequent references should use 'match_dup'.
  
   The RTL template may also refer to internal "operands" which are
  temporary registers or labels used only within the sequence made by the
! 'define_expand'.  Internal operands are substituted into the RTL
! template with 'match_dup', never with 'match_operand'.  The values of
  the internal operands are not passed in as arguments by the compiler
  when it requests use of this pattern.  Instead, they are computed within
  the pattern, in the preparation statements.  These statements compute
! the values and store them into the appropriate elements of 'operands' so
! that 'match_dup' can find them.
  
   There are two special macros defined for use in the preparation
! statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
  a statement.
  
! 'DONE'
!      Use the 'DONE' macro to end RTL generation for the pattern.  The
       only RTL insns resulting from the pattern on this occasion will be
!      those already emitted by explicit calls to 'emit_insn' within the
       preparation statements; the RTL template will not be generated.
  
! 'FAIL'
       Make the pattern fail on this occasion.  When a pattern fails, it
       means that the pattern was not truly available.  The calling
       routines in the compiler will try other strategies for code
       generation using other patterns.
  
       Failure is currently supported only for binary (addition,
!      multiplication, shifting, etc.)  and bit-field ('extv', 'extzv',
!      and 'insv') operations.
  
!  If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
! then the 'define_expand' acts like a 'define_insn' in that the RTL
  template is used to generate the insn.
  
   The RTL template is not used for matching, only for generating the
! initial insn list.  If the preparation statement always invokes 'DONE'
! or 'FAIL', the RTL template may be reduced to a simple list of operands,
  such as this example:
  
       (define_expand "addsi3"
--- 30507,30556 ----
  is used.  In particular, it gives a predicate for each operand.
  
   A true operand, which needs to be specified in order to generate RTL
! from the pattern, should be described with a ‘match_operand’ in its
  first occurrence in the RTL template.  This enters information on the
  operand's predicate into the tables that record such things.  GCC uses
  the information to preload the operand into a register if that is
  required for valid RTL code.  If the operand is referred to more than
! once, subsequent references should use ‘match_dup’.
  
   The RTL template may also refer to internal "operands" which are
  temporary registers or labels used only within the sequence made by the
! ‘define_expand’.  Internal operands are substituted into the RTL
! template with ‘match_dup’, never with ‘match_operand’.  The values of
  the internal operands are not passed in as arguments by the compiler
  when it requests use of this pattern.  Instead, they are computed within
  the pattern, in the preparation statements.  These statements compute
! the values and store them into the appropriate elements of ‘operands’ so
! that ‘match_dup’ can find them.
  
   There are two special macros defined for use in the preparation
! statements: ‘DONE’ and ‘FAIL’.  Use them with a following semicolon, as
  a statement.
  
! ‘DONE’
!      Use the ‘DONE’ macro to end RTL generation for the pattern.  The
       only RTL insns resulting from the pattern on this occasion will be
!      those already emitted by explicit calls to ‘emit_insn’ within the
       preparation statements; the RTL template will not be generated.
  
! ‘FAIL’
       Make the pattern fail on this occasion.  When a pattern fails, it
       means that the pattern was not truly available.  The calling
       routines in the compiler will try other strategies for code
       generation using other patterns.
  
       Failure is currently supported only for binary (addition,
!      multiplication, shifting, etc.)  and bit-field (‘extv’, ‘extzv’,
!      and ‘insv’) operations.
  
!  If the preparation falls through (invokes neither ‘DONE’ nor ‘FAIL’),
! then the ‘define_expand’ acts like a ‘define_insn’ in that the RTL
  template is used to generate the insn.
  
   The RTL template is not used for matching, only for generating the
! initial insn list.  If the preparation statement always invokes ‘DONE’
! or ‘FAIL’, the RTL template may be reduced to a simple list of operands,
  such as this example:
  
       (define_expand "addsi3"
*************** such as this example:
*** 30578,30593 ****
           FAIL;
       }")
  
! This example uses 'define_expand' so that it can generate an RTL insn
  for shifting when the shift-count is in the supported range of 0 to 3
  but fail in other cases where machine insns aren't available.  When it
  fails, the compiler tries another strategy using different patterns
  (such as, a library call).
  
   If the compiler were able to handle nontrivial condition-strings in
! patterns with names, then it would be possible to use a 'define_insn' in
  that case.  Here is another case (zero-extension on the 68000) which
! makes more use of the power of 'define_expand':
  
       (define_expand "zero_extendhisi2"
         [(set (match_operand:SI 0 "general_operand" "")
--- 30579,30594 ----
           FAIL;
       }")
  
! This example uses ‘define_expand’ so that it can generate an RTL insn
  for shifting when the shift-count is in the supported range of 0 to 3
  but fail in other cases where machine insns aren't available.  When it
  fails, the compiler tries another strategy using different patterns
  (such as, a library call).
  
   If the compiler were able to handle nontrivial condition-strings in
! patterns with names, then it would be possible to use a ‘define_insn’ in
  that case.  Here is another case (zero-extension on the 68000) which
! makes more use of the power of ‘define_expand’:
  
       (define_expand "zero_extendhisi2"
         [(set (match_operand:SI 0 "general_operand" "")
*************** Here two RTL insns are generated, one to
*** 30604,30619 ****
  and the other to copy the input operand into its low half.  This
  sequence is incorrect if the input operand refers to [the old value of]
  the output operand, so the preparation statement makes sure this isn't
! so.  The function 'make_safe_from' copies the 'operands[1]' into a
! temporary register if it refers to 'operands[0]'.  It does this by
  emitting another RTL insn.
  
   Finally, a third example shows the use of an internal operand.
! Zero-extension on the SPUR chip is done by 'and'-ing the result against
! a halfword mask.  But this mask cannot be represented by a 'const_int'
  because the constant value is too large to be legitimate on this
! machine.  So it must be copied into a register with 'force_reg' and then
! the register used in the 'and'.
  
       (define_expand "zero_extendhisi2"
         [(set (match_operand:SI 0 "register_operand" "")
--- 30605,30620 ----
  and the other to copy the input operand into its low half.  This
  sequence is incorrect if the input operand refers to [the old value of]
  the output operand, so the preparation statement makes sure this isn't
! so.  The function ‘make_safe_from’ copies the ‘operands[1]’ into a
! temporary register if it refers to ‘operands[0]’.  It does this by
  emitting another RTL insn.
  
   Finally, a third example shows the use of an internal operand.
! Zero-extension on the SPUR chip is done by ‘and’-ing the result against
! a halfword mask.  But this mask cannot be represented by a ‘const_int’
  because the constant value is too large to be legitimate on this
! machine.  So it must be copied into a register with ‘force_reg’ and then
! the register used in the ‘and’.
  
       (define_expand "zero_extendhisi2"
         [(set (match_operand:SI 0 "register_operand" "")
*************** the register used in the 'and'.
*** 30625,30634 ****
         "operands[2]
            = force_reg (SImode, GEN_INT (65535)); ")
  
!  _Note:_ If the 'define_expand' is used to serve a standard binary or
  unary arithmetic operation or a bit-field operation, then the last insn
! it generates must not be a 'code_label', 'barrier' or 'note'.  It must
! be an 'insn', 'jump_insn' or 'call_insn'.  If you don't need a real insn
  at the end, emit an insn to copy the result of the operation into
  itself.  Such an insn will generate no code, but it can avoid problems
  in the compiler.
--- 30626,30635 ----
         "operands[2]
            = force_reg (SImode, GEN_INT (65535)); ")
  
!  _Note:_ If the ‘define_expand’ is used to serve a standard binary or
  unary arithmetic operation or a bit-field operation, then the last insn
! it generates must not be a ‘code_label’, ‘barrier’ or ‘note’.  It must
! be an ‘insn’, ‘jump_insn’ or ‘call_insn’.  If you don't need a real insn
  at the end, emit an insn to copy the result of the operation into
  itself.  Such an insn will generate no code, but it can avoid problems
  in the compiler.
*************** scheduling.
*** 30658,30671 ****
  
   The insn combiner phase also splits putative insns.  If three insns are
  merged into one insn with a complex expression that cannot be matched by
! some 'define_insn' pattern, the combiner phase attempts to split the
  complex pattern into two insns that are recognized.  Usually it can
  break the complex pattern into two patterns by splitting out some
  subexpression.  However, in some other cases, such as performing an
  addition of a large constant in two insns on a RISC machine, the way to
  split the addition into two insns is machine-dependent.
  
!  The 'define_split' definition tells the compiler how to split a complex
  insn into several simpler insns.  It looks like this:
  
       (define_split
--- 30659,30672 ----
  
   The insn combiner phase also splits putative insns.  If three insns are
  merged into one insn with a complex expression that cannot be matched by
! some ‘define_insn’ pattern, the combiner phase attempts to split the
  complex pattern into two insns that are recognized.  Usually it can
  break the complex pattern into two patterns by splitting out some
  subexpression.  However, in some other cases, such as performing an
  addition of a large constant in two insns on a RISC machine, the way to
  split the addition into two insns is machine-dependent.
  
!  The ‘define_split’ definition tells the compiler how to split a complex
  insn into several simpler insns.  It looks like this:
  
       (define_split
*************** insn into several simpler insns.  It loo
*** 30677,30727 ****
         "PREPARATION-STATEMENTS")
  
   INSN-PATTERN is a pattern that needs to be split and CONDITION is the
! final condition to be tested, as in a 'define_insn'.  When an insn
  matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
  in the insn list with the insns given by NEW-INSN-PATTERN-1,
  NEW-INSN-PATTERN-2, etc.
  
   The PREPARATION-STATEMENTS are similar to those statements that are
! specified for 'define_expand' (*note Expander Definitions::) and are
  executed before the new RTL is generated to prepare for the generated
  code or emit some insns whose pattern is not fixed.  Unlike those in
! 'define_expand', however, these statements must not generate any new
  pseudo-registers.  Once reload has completed, they also must not
  allocate any space in the stack frame.
  
   There are two special macros defined for use in the preparation
! statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
  a statement.
  
! 'DONE'
!      Use the 'DONE' macro to end RTL generation for the splitter.  The
       only RTL insns generated as replacement for the matched input insn
!      will be those already emitted by explicit calls to 'emit_insn'
       within the preparation statements; the replacement pattern is not
       used.
  
! 'FAIL'
!      Make the 'define_split' fail on this occasion.  When a
!      'define_split' fails, it means that the splitter was not truly
       available for the inputs it was given, and the input insn will not
       be split.
  
!  If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
! then the 'define_split' uses the replacement template.
  
   Patterns are matched against INSN-PATTERN in two different
  circumstances.  If an insn needs to be split for delay slot scheduling
  or insn scheduling, the insn is already known to be valid, which means
! that it must have been matched by some 'define_insn' and, if
! 'reload_completed' is nonzero, is known to satisfy the constraints of
! that 'define_insn'.  In that case, the new insn patterns must also be
! insns that are matched by some 'define_insn' and, if 'reload_completed'
  is nonzero, must also satisfy the constraints of those definitions.
  
!  As an example of this usage of 'define_split', consider the following
! example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to
! 'SImode' into a pair of shift insns:
  
       (define_split
         [(set (match_operand:SI 0 "gen_reg_operand" "")
--- 30678,30728 ----
         "PREPARATION-STATEMENTS")
  
   INSN-PATTERN is a pattern that needs to be split and CONDITION is the
! final condition to be tested, as in a ‘define_insn’.  When an insn
  matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
  in the insn list with the insns given by NEW-INSN-PATTERN-1,
  NEW-INSN-PATTERN-2, etc.
  
   The PREPARATION-STATEMENTS are similar to those statements that are
! specified for ‘define_expand’ (*note Expander Definitions::) and are
  executed before the new RTL is generated to prepare for the generated
  code or emit some insns whose pattern is not fixed.  Unlike those in
! ‘define_expand’, however, these statements must not generate any new
  pseudo-registers.  Once reload has completed, they also must not
  allocate any space in the stack frame.
  
   There are two special macros defined for use in the preparation
! statements: ‘DONE’ and ‘FAIL’.  Use them with a following semicolon, as
  a statement.
  
! ‘DONE’
!      Use the ‘DONE’ macro to end RTL generation for the splitter.  The
       only RTL insns generated as replacement for the matched input insn
!      will be those already emitted by explicit calls to ‘emit_insn’
       within the preparation statements; the replacement pattern is not
       used.
  
! ‘FAIL’
!      Make the ‘define_split’ fail on this occasion.  When a
!      ‘define_split’ fails, it means that the splitter was not truly
       available for the inputs it was given, and the input insn will not
       be split.
  
!  If the preparation falls through (invokes neither ‘DONE’ nor ‘FAIL’),
! then the ‘define_split’ uses the replacement template.
  
   Patterns are matched against INSN-PATTERN in two different
  circumstances.  If an insn needs to be split for delay slot scheduling
  or insn scheduling, the insn is already known to be valid, which means
! that it must have been matched by some ‘define_insn’ and, if
! ‘reload_completed’ is nonzero, is known to satisfy the constraints of
! that ‘define_insn’.  In that case, the new insn patterns must also be
! insns that are matched by some ‘define_insn’ and, if ‘reload_completed’
  is nonzero, must also satisfy the constraints of those definitions.
  
!  As an example of this usage of ‘define_split’, consider the following
! example from ‘a29k.md’, which splits a ‘sign_extend’ from ‘HImode’ to
! ‘SImode’ into a pair of shift insns:
  
       (define_split
         [(set (match_operand:SI 0 "gen_reg_operand" "")
*************** example from 'a29k.md', which splits a '
*** 30737,30754 ****
       { operands[1] = gen_lowpart (SImode, operands[1]); }")
  
   When the combiner phase tries to split an insn pattern, it is always
! the case that the pattern is _not_ matched by any 'define_insn'.  The
! combiner pass first tries to split a single 'set' expression and then
! the same 'set' expression inside a 'parallel', but followed by a
! 'clobber' of a pseudo-reg to use as a scratch register.  In these cases,
  the combiner expects exactly one or two new insn patterns to be
! generated.  It will verify that these patterns match some 'define_insn'
! definitions, so you need not do this test in the 'define_split' (of
! course, there is no point in writing a 'define_split' that will never
  produce insns that match).
  
!  Here is an example of this use of 'define_split', taken from
! 'rs6000.md':
  
       (define_split
         [(set (match_operand:SI 0 "gen_reg_operand" "")
--- 30738,30755 ----
       { operands[1] = gen_lowpart (SImode, operands[1]); }")
  
   When the combiner phase tries to split an insn pattern, it is always
! the case that the pattern is _not_ matched by any ‘define_insn’.  The
! combiner pass first tries to split a single ‘set’ expression and then
! the same ‘set’ expression inside a ‘parallel’, but followed by a
! ‘clobber’ of a pseudo-reg to use as a scratch register.  In these cases,
  the combiner expects exactly one or two new insn patterns to be
! generated.  It will verify that these patterns match some ‘define_insn’
! definitions, so you need not do this test in the ‘define_split’ (of
! course, there is no point in writing a ‘define_split’ that will never
  produce insns that match).
  
!  Here is an example of this use of ‘define_split’, taken from
! ‘rs6000.md’:
  
       (define_split
         [(set (match_operand:SI 0 "gen_reg_operand" "")
*************** produce insns that match).
*** 30769,30775 ****
         operands[4] = GEN_INT (low);
       }")
  
!  Here the predicate 'non_add_cint_operand' matches any 'const_int' that
  is _not_ a valid operand of a single add insn.  The add with the smaller
  displacement is written so that it can be substituted into the address
  of a subsequent operation.
--- 30770,30776 ----
         operands[4] = GEN_INT (low);
       }")
  
!  Here the predicate ‘non_add_cint_operand’ matches any ‘const_int’ that
  is _not_ a valid operand of a single add insn.  The add with the smaller
  displacement is written so that it can be substituted into the address
  of a subsequent operation.
*************** an equality comparison of a register and
*** 30801,30809 ****
         operands[5] = GEN_INT (sextc);
       }")
  
!  To avoid confusion, don't write a single 'define_split' that accepts
! some insns that match some 'define_insn' as well as some insns that
! don't.  Instead, write two separate 'define_split' definitions, one for
  the insns that are valid and one for the insns that are not valid.
  
   The splitter is allowed to split jump instructions into a sequence of
--- 30802,30810 ----
         operands[5] = GEN_INT (sextc);
       }")
  
!  To avoid confusion, don't write a single ‘define_split’ that accepts
! some insns that match some ‘define_insn’ as well as some insns that
! don't.  Instead, write two separate ‘define_split’ definitions, one for
  the insns that are valid and one for the insns that are not valid.
  
   The splitter is allowed to split jump instructions into a sequence of
*************** identical behavior of the new jump.  Whe
*** 30817,30830 ****
  multiple jump instructions or new labels, more assistance is needed.
  The splitter is permitted to create only unconditional jumps, or simple
  conditional jump instructions.  Additionally it must attach a
! 'REG_BR_PROB' note to each conditional jump.  A global variable
! 'split_branch_probability' holds the probability of the original branch
! in case it was a simple conditional jump, -1 otherwise.  To simplify
  recomputing of edge frequencies, the new sequence is permitted to have
  only forward jumps to the newly-created labels.
  
   For the common case where the pattern of a define_split exactly matches
! the pattern of a define_insn, use 'define_insn_and_split'.  It looks
  like this:
  
       (define_insn_and_split
--- 30818,30831 ----
  multiple jump instructions or new labels, more assistance is needed.
  The splitter is permitted to create only unconditional jumps, or simple
  conditional jump instructions.  Additionally it must attach a
! ‘REG_BR_PROB’ note to each conditional jump.  A global variable
! ‘split_branch_probability’ holds the probability of the original branch
! in case it was a simple conditional jump, −1 otherwise.  To simplify
  recomputing of edge frequencies, the new sequence is permitted to have
  only forward jumps to the newly-created labels.
  
   For the common case where the pattern of a define_split exactly matches
! the pattern of a define_insn, use ‘define_insn_and_split’.  It looks
  like this:
  
       (define_insn_and_split
*************** like this:
*** 30840,30849 ****
  
  
   INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
! as in 'define_insn'.  The NEW-INSN-PATTERN vector and the
! PREPARATION-STATEMENTS are used as in a 'define_split'.  The
! SPLIT-CONDITION is also used as in 'define_split', with the additional
! behavior that if the condition starts with '&&', the condition used for
  the split will be the constructed as a logical "and" of the split
  condition with the insn condition.  For example, from i386.md:
  
--- 30841,30850 ----
  
  
   INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
! as in ‘define_insn’.  The NEW-INSN-PATTERN vector and the
! PREPARATION-STATEMENTS are used as in a ‘define_split’.  The
! SPLIT-CONDITION is also used as in ‘define_split’, with the additional
! behavior that if the condition starts with ‘&&’, the condition used for
  the split will be the constructed as a logical "and" of the split
  condition with the insn condition.  For example, from i386.md:
  
*************** condition with the insn condition.  For
*** 30862,30887 ****
  
  
   In this case, the actual split condition will be
! 'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
  
!  The 'define_insn_and_split' construction provides exactly the same
! functionality as two separate 'define_insn' and 'define_split' patterns.
  It exists for compactness, and as a maintenance tool to prevent having
  to ensure the two patterns' templates match.
  
!  It is sometimes useful to have a 'define_insn_and_split' that replaces
  specific operands of an instruction but leaves the rest of the
  instruction pattern unchanged.  You can do this directly with a
! 'define_insn_and_split', but it requires a NEW-INSN-PATTERN-1 that
  repeats most of the original INSN-PATTERN.  There is also the
! complication that an implicit 'parallel' in INSN-PATTERN must become an
! explicit 'parallel' in NEW-INSN-PATTERN-1, which is easy to overlook.  A
! simpler alternative is to use 'define_insn_and_rewrite', which is a form
! of 'define_insn_and_split' that automatically generates
! NEW-INSN-PATTERN-1 by replacing each 'match_operand' in INSN-PATTERN
! with a corresponding 'match_dup', and each 'match_operator' in the
! pattern with a corresponding 'match_op_dup'.  The arguments are
! otherwise identical to 'define_insn_and_split':
  
       (define_insn_and_rewrite
         [INSN-PATTERN]
--- 30863,30888 ----
  
  
   In this case, the actual split condition will be
! ‘TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed’.
  
!  The ‘define_insn_and_split’ construction provides exactly the same
! functionality as two separate ‘define_insn’ and ‘define_split’ patterns.
  It exists for compactness, and as a maintenance tool to prevent having
  to ensure the two patterns' templates match.
  
!  It is sometimes useful to have a ‘define_insn_and_split’ that replaces
  specific operands of an instruction but leaves the rest of the
  instruction pattern unchanged.  You can do this directly with a
! ‘define_insn_and_split’, but it requires a NEW-INSN-PATTERN-1 that
  repeats most of the original INSN-PATTERN.  There is also the
! complication that an implicit ‘parallel’ in INSN-PATTERN must become an
! explicit ‘parallel’ in NEW-INSN-PATTERN-1, which is easy to overlook.  A
! simpler alternative is to use ‘define_insn_and_rewrite’, which is a form
! of ‘define_insn_and_split’ that automatically generates
! NEW-INSN-PATTERN-1 by replacing each ‘match_operand’ in INSN-PATTERN
! with a corresponding ‘match_dup’, and each ‘match_operator’ in the
! pattern with a corresponding ‘match_op_dup’.  The arguments are
! otherwise identical to ‘define_insn_and_split’:
  
       (define_insn_and_rewrite
         [INSN-PATTERN]
*************** otherwise identical to 'define_insn_and_
*** 30891,30907 ****
         "PREPARATION-STATEMENTS"
         [INSN-ATTRIBUTES])
  
!  The 'match_dup's and 'match_op_dup's in the new instruction pattern use
  any new operand values that the PREPARATION-STATEMENTS store in the
! 'operands' array, as for a normal 'define_insn_and_split'.
  PREPARATION-STATEMENTS can also emit additional instructions before the
  new instruction.  They can even emit an entirely different sequence of
! instructions and use 'DONE' to avoid emitting a new form of the original
  instruction.
  
!  The split in a 'define_insn_and_rewrite' is only intended to apply to
  existing instructions that match INSN-PATTERN.  SPLIT-CONDITION must
! therefore start with '&&', so that the split condition applies on top of
  CONDITION.
  
   Here is an example from the AArch64 SVE port, in which operand 1 is
--- 30892,30908 ----
         "PREPARATION-STATEMENTS"
         [INSN-ATTRIBUTES])
  
!  The ‘match_dup’s and ‘match_op_dup’s in the new instruction pattern use
  any new operand values that the PREPARATION-STATEMENTS store in the
! ‘operands’ array, as for a normal ‘define_insn_and_split’.
  PREPARATION-STATEMENTS can also emit additional instructions before the
  new instruction.  They can even emit an entirely different sequence of
! instructions and use ‘DONE’ to avoid emitting a new form of the original
  instruction.
  
!  The split in a ‘define_insn_and_rewrite’ is only intended to apply to
  existing instructions that match INSN-PATTERN.  SPLIT-CONDITION must
! therefore start with ‘&&’, so that the split condition applies on top of
  CONDITION.
  
   Here is an example from the AArch64 SVE port, in which operand 1 is
*************** output template:
*** 30933,30939 ****
       )
  
   The splitter in this case simply replaces operand 1 with the constant
! value that it is known to have.  The equivalent 'define_insn_and_split'
  would be:
  
       (define_insn_and_split "*while_ult<GPI:mode><PRED_ALL:mode>_cc"
--- 30934,30940 ----
       )
  
   The splitter in this case simply replaces operand 1 with the constant
! value that it is known to have.  The equivalent ‘define_insn_and_split’
  would be:
  
       (define_insn_and_split "*while_ult<GPI:mode><PRED_ALL:mode>_cc"
*************** File: gccint.info,  Node: Including Patt
*** 30979,30986 ****
  17.18 Including Patterns in Machine Descriptions.
  =================================================
  
! The 'include' pattern tells the compiler tools where to look for
! patterns that are in files other than in the file '.md'.  This is used
  only at build time and there is no preprocessing allowed.
  
   It looks like:
--- 30980,30987 ----
  17.18 Including Patterns in Machine Descriptions.
  =================================================
  
! The ‘include’ pattern tells the compiler tools where to look for
! patterns that are in files other than in the file ‘.md’.  This is used
  only at build time and there is no preprocessing allowed.
  
   It looks like:
*************** only at build time and there is no prepr
*** 30995,31002 ****
  
  
   Where PATHNAME is a string that specifies the location of the file,
! specifies the include file to be in 'gcc/config/target/filestuff'.  The
! directory 'gcc/config/target' is regarded as the default directory.
  
   Machine descriptions may be split up into smaller more manageable
  subsections and placed into subdirectories.
--- 30996,31003 ----
  
  
   Where PATHNAME is a string that specifies the location of the file,
! specifies the include file to be in ‘gcc/config/target/filestuff’.  The
! directory ‘gcc/config/target’ is regarded as the default directory.
  
   Machine descriptions may be split up into smaller more manageable
  subsections and placed into subdirectories.
*************** subsections and placed into subdirectori
*** 31008,31014 ****
  
  
   the include file is specified to be in
! 'gcc/config/TARGET/BOGUS/filestuff'.
  
   Specifying an absolute path for the include file such as;
  
--- 31009,31015 ----
  
  
   the include file is specified to be in
! ‘gcc/config/TARGET/BOGUS/filestuff’.
  
   Specifying an absolute path for the include file such as;
  
*************** subsections and placed into subdirectori
*** 31019,31025 ****
  17.18.1 RTL Generation Tool Options for Directory Search
  --------------------------------------------------------
  
! The '-IDIR' option specifies directories to search for machine
  descriptions.  For example:
  
  
--- 31020,31026 ----
  17.18.1 RTL Generation Tool Options for Directory Search
  --------------------------------------------------------
  
! The ‘-IDIR’ option specifies directories to search for machine
  descriptions.  For example:
  
  
*************** descriptions.  For example:
*** 31030,31036 ****
  searched for header files.  This can be used to override a system
  machine definition file, substituting your own version, since these
  directories are searched before the default machine description file
! directories.  If you use more than one '-I' option, the directories are
  scanned in left-to-right order; the standard default directory come
  after.
  
--- 31031,31037 ----
  searched for header files.  This can be used to override a system
  machine definition file, substituting your own version, since these
  directories are searched before the default machine description file
! directories.  If you use more than one ‘-I’ option, the directories are
  scanned in left-to-right order; the standard default directory come
  after.
  
*************** File: gccint.info,  Node: Peephole Defin
*** 31040,31046 ****
  17.19 Machine-Specific Peephole Optimizers
  ==========================================
  
! In addition to instruction patterns the 'md' file may contain
  definitions of machine-specific peephole optimizations.
  
   The combiner does not notice certain peephole optimizations when the
--- 31041,31047 ----
  17.19 Machine-Specific Peephole Optimizers
  ==========================================
  
! In addition to instruction patterns the ‘md’ file may contain
  definitions of machine-specific peephole optimizations.
  
   The combiner does not notice certain peephole optimizations when the
*************** computed in the first one.  A machine-sp
*** 31051,31061 ****
  detect such opportunities.
  
   There are two forms of peephole definitions that may be used.  The
! original 'define_peephole' is run at assembly output time to match insns
! and substitute assembly text.  Use of 'define_peephole' is deprecated.
  
!  A newer 'define_peephole2' matches insns and substitutes new insns.
! The 'peephole2' pass is run after register allocation but before
  scheduling, which may result in much better code for targets that do
  scheduling.
  
--- 31052,31062 ----
  detect such opportunities.
  
   There are two forms of peephole definitions that may be used.  The
! original ‘define_peephole’ is run at assembly output time to match insns
! and substitute assembly text.  Use of ‘define_peephole’ is deprecated.
  
!  A newer ‘define_peephole2’ matches insns and substitutes new insns.
! The ‘peephole2’ pass is run after register allocation but before
  scheduling, which may result in much better code for targets that do
  scheduling.
  
*************** A definition looks like this:
*** 31082,31088 ****
  
  The last string operand may be omitted if you are not using any
  machine-specific information in this machine description.  If present,
! it must obey the same rules as in a 'define_insn'.
  
   In this skeleton, INSN-PATTERN-1 and so on are patterns to match
  consecutive insns.  The optimization applies to a sequence of insns when
--- 31083,31089 ----
  
  The last string operand may be omitted if you are not using any
  machine-specific information in this machine description.  If present,
! it must obey the same rules as in a ‘define_insn’.
  
   In this skeleton, INSN-PATTERN-1 and so on are patterns to match
  consecutive insns.  The optimization applies to a sequence of insns when
*************** INSN-PATTERN-1 matches the first one, IN
*** 31090,31108 ****
  and so on.
  
   Each of the insns matched by a peephole must also match a
! 'define_insn'.  Peepholes are checked only at the last stage just before
  code generation, and only optionally.  Therefore, any insn which would
! match a peephole but no 'define_insn' will cause a crash in code
  generation in an unoptimized compilation, or at various optimization
  stages.
  
!  The operands of the insns are matched with 'match_operands',
! 'match_operator', and 'match_dup', as usual.  What is not usual is that
  the operand numbers apply to all the insn patterns in the definition.
  So, you can check for identical operands in two insns by using
! 'match_operand' in one insn and 'match_dup' in the other.
  
!  The operand constraints used in 'match_operand' patterns do not have
  any direct effect on the applicability of the peephole, but they will be
  validated afterward, so make sure your constraints are general enough to
  apply whenever the peephole matches.  If the peephole matches but the
--- 31091,31109 ----
  and so on.
  
   Each of the insns matched by a peephole must also match a
! ‘define_insn’.  Peepholes are checked only at the last stage just before
  code generation, and only optionally.  Therefore, any insn which would
! match a peephole but no ‘define_insn’ will cause a crash in code
  generation in an unoptimized compilation, or at various optimization
  stages.
  
!  The operands of the insns are matched with ‘match_operands’,
! ‘match_operator’, and ‘match_dup’, as usual.  What is not usual is that
  the operand numbers apply to all the insn patterns in the definition.
  So, you can check for identical operands in two insns by using
! ‘match_operand’ in one insn and ‘match_dup’ in the other.
  
!  The operand constraints used in ‘match_operand’ patterns do not have
  any direct effect on the applicability of the peephole, but they will be
  validated afterward, so make sure your constraints are general enough to
  apply whenever the peephole matches.  If the peephole matches but the
*************** allocation is complete.  Therefore, the
*** 31124,31145 ****
  which operands have ended up in which kinds of registers, just by
  looking at the operands.
  
!  The way to refer to the operands in CONDITION is to write 'operands[I]'
! for operand number I (as matched by '(match_operand I ...)').  Use the
! variable 'insn' to refer to the last of the insns being matched; use
! 'prev_active_insn' to find the preceding insns.
  
   When optimizing computations with intermediate results, you can use
  CONDITION to match only when the intermediate results are not used
! elsewhere.  Use the C expression 'dead_or_set_p (INSN, OP)', where INSN
  is the insn in which you expect the value to be used for the last time
! (from the value of 'insn', together with use of 'prev_nonnote_insn'),
! and OP is the intermediate value (from 'operands[I]').
  
   Applying the optimization means replacing the sequence of insns with
  one new insn.  The TEMPLATE controls ultimate output of assembler code
  for this combined insn.  It works exactly like the template of a
! 'define_insn'.  Operand numbers in this template are the same ones used
  in matching the original sequence of insns.
  
   The result of a defined peephole optimizer does not need to match any
--- 31125,31146 ----
  which operands have ended up in which kinds of registers, just by
  looking at the operands.
  
!  The way to refer to the operands in CONDITION is to write ‘operands[I]’
! for operand number I (as matched by ‘(match_operand I ...)’).  Use the
! variable ‘insn’ to refer to the last of the insns being matched; use
! ‘prev_active_insn’ to find the preceding insns.
  
   When optimizing computations with intermediate results, you can use
  CONDITION to match only when the intermediate results are not used
! elsewhere.  Use the C expression ‘dead_or_set_p (INSN, OP)’, where INSN
  is the insn in which you expect the value to be used for the last time
! (from the value of ‘insn’, together with use of ‘prev_nonnote_insn’),
! and OP is the intermediate value (from ‘operands[I]’).
  
   Applying the optimization means replacing the sequence of insns with
  one new insn.  The TEMPLATE controls ultimate output of assembler code
  for this combined insn.  It works exactly like the template of a
! ‘define_insn’.  Operand numbers in this template are the same ones used
  in matching the original sequence of insns.
  
   The result of a defined peephole optimizer does not need to match any
*************** into
*** 31187,31199 ****
       fmoved sp@+,fp0
  
   INSN-PATTERN-1 and so on look _almost_ like the second operand of
! 'define_insn'.  There is one important difference: the second operand of
! 'define_insn' consists of one or more RTX's enclosed in square brackets.
  Usually, there is only one: then the same action can be written as an
! element of a 'define_peephole'.  But when there are multiple actions in
! a 'define_insn', they are implicitly enclosed in a 'parallel'.  Then you
! must explicitly write the 'parallel', and the square brackets within it,
! in the 'define_peephole'.  Thus, if an insn pattern looks like this,
  
       (define_insn "divmodsi4"
         [(set (match_operand:SI 0 "general_operand" "=d")
--- 31188,31200 ----
       fmoved sp@+,fp0
  
   INSN-PATTERN-1 and so on look _almost_ like the second operand of
! ‘define_insn’.  There is one important difference: the second operand of
! ‘define_insn’ consists of one or more RTX's enclosed in square brackets.
  Usually, there is only one: then the same action can be written as an
! element of a ‘define_peephole’.  But when there are multiple actions in
! a ‘define_insn’, they are implicitly enclosed in a ‘parallel’.  Then you
! must explicitly write the ‘parallel’, and the square brackets within it,
! in the ‘define_peephole’.  Thus, if an insn pattern looks like this,
  
       (define_insn "divmodsi4"
         [(set (match_operand:SI 0 "general_operand" "=d")
*************** File: gccint.info,  Node: define_peephol
*** 31223,31229 ****
  17.19.2 RTL to RTL Peephole Optimizers
  --------------------------------------
  
! The 'define_peephole2' definition tells the compiler how to substitute
  one sequence of instructions for another sequence, what additional
  scratch registers may be needed and what their lifetimes must be.
  
--- 31224,31230 ----
  17.19.2 RTL to RTL Peephole Optimizers
  --------------------------------------
  
! The ‘define_peephole2’ definition tells the compiler how to substitute
  one sequence of instructions for another sequence, what additional
  scratch registers may be needed and what their lifetimes must be.
  
*************** scratch registers may be needed and what
*** 31237,31243 ****
          ...]
         "PREPARATION-STATEMENTS")
  
!  The definition is almost identical to 'define_split' (*note Insn
  Splitting::) except that the pattern to match is not a single
  instruction, but a sequence of instructions.
  
--- 31238,31244 ----
          ...]
         "PREPARATION-STATEMENTS")
  
!  The definition is almost identical to ‘define_split’ (*note Insn
  Splitting::) except that the pattern to match is not a single
  instruction, but a sequence of instructions.
  
*************** instruction, but a sequence of instructi
*** 31245,31254 ****
  output template.  If appropriate registers are not free, the pattern
  will simply not match.
  
!  Scratch registers are requested with a 'match_scratch' pattern at the
  top level of the input pattern.  The allocated register (initially) will
  be dead at the point requested within the original sequence.  If the
! scratch is used at more than a single point, a 'match_dup' pattern at
  the top level of the input pattern marks the last position in the input
  sequence at which the register must be available.
  
--- 31246,31255 ----
  output template.  If appropriate registers are not free, the pattern
  will simply not match.
  
!  Scratch registers are requested with a ‘match_scratch’ pattern at the
  top level of the input pattern.  The allocated register (initially) will
  be dead at the point requested within the original sequence.  If the
! scratch is used at more than a single point, a ‘match_dup’ pattern at
  the top level of the input pattern marks the last position in the input
  sequence at which the register must be available.
  
*************** sequence at which the register must be a
*** 31270,31276 ****
  
  This pattern tries to split a load from its use in the hopes that we'll
  be able to schedule around the memory load latency.  It allocates a
! single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to
  be live only at the point just before the arithmetic.
  
   A real example requiring extended scratch lifetimes is harder to come
--- 31271,31277 ----
  
  This pattern tries to split a load from its use in the hopes that we'll
  be able to schedule around the memory load latency.  It allocates a
! single ‘SImode’ register of class ‘GENERAL_REGS’ (‘"r"’) that needs to
  be live only at the point just before the arithmetic.
  
   A real example requiring extended scratch lifetimes is harder to come
*************** by, so here's a silly made-up example:
*** 31289,31329 ****
          (set (match_dup 3) (match_dup 4))]
         "")
  
! If we had not added the '(match_dup 4)' in the middle of the input
  sequence, it might have been the case that the register we chose at the
! beginning of the sequence is killed by the first or second 'set'.
  
   There are two special macros defined for use in the preparation
! statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
  a statement.
  
! 'DONE'
!      Use the 'DONE' macro to end RTL generation for the peephole.  The
       only RTL insns generated as replacement for the matched input insn
!      will be those already emitted by explicit calls to 'emit_insn'
       within the preparation statements; the replacement pattern is not
       used.
  
! 'FAIL'
!      Make the 'define_peephole2' fail on this occasion.  When a
!      'define_peephole2' fails, it means that the replacement was not
       truly available for the particular inputs it was given.  In that
!      case, GCC may still apply a later 'define_peephole2' that also
       matches the given insn pattern.  (Note that this is different from
!      'define_split', where 'FAIL' prevents the input insn from being
       split at all.)
  
!  If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
! then the 'define_peephole2' uses the replacement template.
  
   Insns are scanned in forward order from beginning to end for each basic
! block.  Matches are attempted in order of 'define_peephole2' appearance
! in the 'md' file.  After a successful replacement, scanning for further
! opportunities for 'define_peephole2', resumes with the first generated
  replacement insn as the first insn to be matched against all
! 'define_peephole2'.  For the example above, after its successful
! replacement, the first insn that can be matched by a 'define_peephole2'
! is '(set (match_dup 4) (match_dup 1))'.
  
  
  File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
--- 31290,31330 ----
          (set (match_dup 3) (match_dup 4))]
         "")
  
! If we had not added the ‘(match_dup 4)’ in the middle of the input
  sequence, it might have been the case that the register we chose at the
! beginning of the sequence is killed by the first or second ‘set’.
  
   There are two special macros defined for use in the preparation
! statements: ‘DONE’ and ‘FAIL’.  Use them with a following semicolon, as
  a statement.
  
! ‘DONE’
!      Use the ‘DONE’ macro to end RTL generation for the peephole.  The
       only RTL insns generated as replacement for the matched input insn
!      will be those already emitted by explicit calls to ‘emit_insn’
       within the preparation statements; the replacement pattern is not
       used.
  
! ‘FAIL’
!      Make the ‘define_peephole2’ fail on this occasion.  When a
!      ‘define_peephole2’ fails, it means that the replacement was not
       truly available for the particular inputs it was given.  In that
!      case, GCC may still apply a later ‘define_peephole2’ that also
       matches the given insn pattern.  (Note that this is different from
!      ‘define_split’, where ‘FAIL’ prevents the input insn from being
       split at all.)
  
!  If the preparation falls through (invokes neither ‘DONE’ nor ‘FAIL’),
! then the ‘define_peephole2’ uses the replacement template.
  
   Insns are scanned in forward order from beginning to end for each basic
! block.  Matches are attempted in order of ‘define_peephole2’ appearance
! in the ‘md’ file.  After a successful replacement, scanning for further
! opportunities for ‘define_peephole2’, resumes with the first generated
  replacement insn as the first insn to be matched against all
! ‘define_peephole2’.  For the example above, after its successful
! replacement, the first insn that can be matched by a ‘define_peephole2’
! is ‘(set (match_dup 4) (match_dup 1))’.
  
  
  File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
*************** File: gccint.info,  Node: Insn Attribute
*** 31332,31338 ****
  ============================
  
  In addition to describing the instruction supported by the target
! machine, the 'md' file also defines a group of "attributes" and a set of
  values for each.  Every generated insn is assigned a value for each
  attribute.  One possible attribute would be the effect that the insn has
  on the machine's condition code.
--- 31333,31339 ----
  ============================
  
  In addition to describing the instruction supported by the target
! machine, the ‘md’ file also defines a group of “attributes” and a set of
  values for each.  Every generated insn is assigned a value for each
  attribute.  One possible attribute would be the effect that the insn has
  on the machine's condition code.
*************** File: gccint.info,  Node: Defining Attri
*** 31355,31375 ****
  17.20.1 Defining Attributes and their Values
  --------------------------------------------
  
! The 'define_attr' expression is used to define each attribute required
  by the target machine.  It looks like:
  
       (define_attr NAME LIST-OF-VALUES DEFAULT)
  
   NAME is a string specifying the name of the attribute being defined.
  Some attributes are used in a special way by the rest of the compiler.
! The 'enabled' attribute can be used to conditionally enable or disable
! insn alternatives (*note Disable Insn Alternatives::).  The 'predicable'
! attribute, together with a suitable 'define_cond_exec' (*note
  Conditional Execution::), can be used to automatically generate
! conditional variants of instruction patterns.  The 'mnemonic' attribute
  can be used to check for the instruction mnemonic (*note Mnemonic
! Attribute::).  The compiler internally uses the names 'ce_enabled' and
! 'nonce_enabled', so they should not be used elsewhere as alternative
  names.
  
   LIST-OF-VALUES is either a string that specifies a comma-separated list
--- 31356,31376 ----
  17.20.1 Defining Attributes and their Values
  --------------------------------------------
  
! The ‘define_attr’ expression is used to define each attribute required
  by the target machine.  It looks like:
  
       (define_attr NAME LIST-OF-VALUES DEFAULT)
  
   NAME is a string specifying the name of the attribute being defined.
  Some attributes are used in a special way by the rest of the compiler.
! The ‘enabled’ attribute can be used to conditionally enable or disable
! insn alternatives (*note Disable Insn Alternatives::).  The ‘predicable’
! attribute, together with a suitable ‘define_cond_exec’ (*note
  Conditional Execution::), can be used to automatically generate
! conditional variants of instruction patterns.  The ‘mnemonic’ attribute
  can be used to check for the instruction mnemonic (*note Mnemonic
! Attribute::).  The compiler internally uses the names ‘ce_enabled’ and
! ‘nonce_enabled’, so they should not be used elsewhere as alternative
  names.
  
   LIST-OF-VALUES is either a string that specifies a comma-separated list
*************** Attributes::, for information on attribu
*** 31384,31442 ****
  particular insn.
  
   For each defined attribute, a number of definitions are written to the
! 'insn-attr.h' file.  For cases where an explicit set of values is
  specified for an attribute, the following are defined:
  
!    * A '#define' is written for the symbol 'HAVE_ATTR_NAME'.
  
!    * An enumerated class is defined for 'attr_NAME' with elements of the
!      form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value
       are first converted to uppercase.
  
!    * A function 'get_attr_NAME' is defined that is passed an insn and
       returns the attribute value for that insn.
  
!  For example, if the following is present in the 'md' file:
  
       (define_attr "type" "branch,fp,load,store,arith" ...)
  
! the following lines will be written to the file 'insn-attr.h'.
  
       #define HAVE_ATTR_type 1
       enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
                        TYPE_STORE, TYPE_ARITH};
       extern enum attr_type get_attr_type ();
  
!  If the attribute takes numeric values, no 'enum' type will be defined
! and the function to obtain the attribute's value will return 'int'.
  
   There are attributes which are tied to a specific meaning.  These
  attributes are not free to use for other purposes:
  
! 'length'
!      The 'length' attribute is used to calculate the length of emitted
       code chunks.  This is especially important when verifying branch
       distances.  *Note Insn Lengths::.
  
! 'enabled'
!      The 'enabled' attribute can be defined to prevent certain
       alternatives of an insn definition from being used during code
       generation.  *Note Disable Insn Alternatives::.
  
! 'mnemonic'
!      The 'mnemonic' attribute can be defined to implement instruction
       specific checks in e.g. the pipeline description.  *Note Mnemonic
       Attribute::.
  
   For each of these special attributes, the corresponding
! 'HAVE_ATTR_NAME' '#define' is also written when the attribute is not
! defined; in that case, it is defined as '0'.
  
   Another way of defining an attribute is to use:
  
       (define_enum_attr "ATTR" "ENUM" DEFAULT)
  
!  This works in just the same way as 'define_attr', except that the list
  of values is taken from a separate enumeration called ENUM (*note
  define_enum::).  This form allows you to use the same list of values for
  several attributes without having to repeat the list each time.  For
--- 31385,31443 ----
  particular insn.
  
   For each defined attribute, a number of definitions are written to the
! ‘insn-attr.h’ file.  For cases where an explicit set of values is
  specified for an attribute, the following are defined:
  
!    • A ‘#define’ is written for the symbol ‘HAVE_ATTR_NAME’.
  
!    • An enumerated class is defined for ‘attr_NAME’ with elements of the
!      form ‘UPPER-NAME_UPPER-VALUE’ where the attribute name and value
       are first converted to uppercase.
  
!    • A function ‘get_attr_NAME’ is defined that is passed an insn and
       returns the attribute value for that insn.
  
!  For example, if the following is present in the ‘md’ file:
  
       (define_attr "type" "branch,fp,load,store,arith" ...)
  
! the following lines will be written to the file ‘insn-attr.h’.
  
       #define HAVE_ATTR_type 1
       enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
                        TYPE_STORE, TYPE_ARITH};
       extern enum attr_type get_attr_type ();
  
!  If the attribute takes numeric values, no ‘enum’ type will be defined
! and the function to obtain the attribute's value will return ‘int’.
  
   There are attributes which are tied to a specific meaning.  These
  attributes are not free to use for other purposes:
  
! ‘length’
!      The ‘length’ attribute is used to calculate the length of emitted
       code chunks.  This is especially important when verifying branch
       distances.  *Note Insn Lengths::.
  
! ‘enabled’
!      The ‘enabled’ attribute can be defined to prevent certain
       alternatives of an insn definition from being used during code
       generation.  *Note Disable Insn Alternatives::.
  
! ‘mnemonic’
!      The ‘mnemonic’ attribute can be defined to implement instruction
       specific checks in e.g. the pipeline description.  *Note Mnemonic
       Attribute::.
  
   For each of these special attributes, the corresponding
! ‘HAVE_ATTR_NAME’ ‘#define’ is also written when the attribute is not
! defined; in that case, it is defined as ‘0’.
  
   Another way of defining an attribute is to use:
  
       (define_enum_attr "ATTR" "ENUM" DEFAULT)
  
!  This works in just the same way as ‘define_attr’, except that the list
  of values is taken from a separate enumeration called ENUM (*note
  define_enum::).  This form allows you to use the same list of values for
  several attributes without having to repeat the list each time.  For
*************** example:
*** 31460,31467 ****
         (const (symbol_ref "target_tune")))
  
   but without duplicating the processor list.  The second example defines
! two separate C enums ('attr_arch' and 'attr_tune') whereas the first
! defines a single C enum ('processor').
  
  
  File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
--- 31461,31468 ----
         (const (symbol_ref "target_tune")))
  
   but without duplicating the processor list.  The second example defines
! two separate C enums (‘attr_arch’ and ‘attr_tune’) whereas the first
! defines a single C enum (‘processor’).
  
  
  File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
*************** RTL expressions used to define attribute
*** 31473,31580 ****
  plus a few specific to attribute definitions, to be discussed below.
  Attribute value expressions must have one of the following forms:
  
! '(const_int I)'
       The integer I specifies the value of a numeric attribute.  I must
       be non-negative.
  
       The value of a numeric attribute can be specified either with a
!      'const_int', or as an integer represented as a string in
!      'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple
!      arithmetic expressions, and 'set_attr' overrides on specific
       instructions (*note Tagging Insns::).
  
! '(const_string VALUE)'
       The string VALUE specifies a constant attribute value.  If VALUE is
!      specified as '"*"', it means that the default value of the
       attribute is to be used for the insn containing this expression.
!      '"*"' obviously cannot be used in the DEFAULT expression of a
!      'define_attr'.
  
       If the attribute whose value is being specified is numeric, VALUE
       must be a string containing a non-negative integer (normally
!      'const_int' would be used in this case).  Otherwise, it must
       contain one of the valid values for the attribute.
  
! '(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
       TEST specifies an attribute test, whose format is defined below.
       The value of this expression is TRUE-VALUE if TEST is true,
       otherwise it is FALSE-VALUE.
  
! '(cond [TEST1 VALUE1 ...] DEFAULT)'
       The first operand of this expression is a vector containing an even
       number of expressions and consisting of pairs of TEST and VALUE
!      expressions.  The value of the 'cond' expression is that of the
       VALUE corresponding to the first true TEST expression.  If none of
!      the TEST expressions are true, the value of the 'cond' expression
       is that of the DEFAULT expression.
  
   TEST expressions can have one of the following forms:
  
! '(const_int I)'
       This test is true if I is nonzero and false otherwise.
  
! '(not TEST)'
! '(ior TEST1 TEST2)'
! '(and TEST1 TEST2)'
       These tests are true if the indicated logical function is true.
  
! '(match_operand:M N PRED CONSTRAINTS)'
       This test is true if operand N of the insn whose attribute value is
       being determined has mode M (this part of the test is ignored if M
!      is 'VOIDmode') and the function specified by the string PRED
       returns a nonzero value when passed operand N and mode M (this part
       of the test is ignored if PRED is the null string).
  
       The CONSTRAINTS operand is ignored and should be the null string.
  
! '(match_test C-EXPR)'
       The test is true if C expression C-EXPR is true.  In non-constant
       attributes, C-EXPR has access to the following variables:
  
       INSN
            The rtl instruction under test.
       WHICH_ALTERNATIVE
!           The 'define_insn' alternative that INSN matches.  *Note Output
            Statement::.
       OPERANDS
            An array of INSN's rtl operands.
  
!      C-EXPR behaves like the condition in a C 'if' statement, so there
       is no need to explicitly convert the expression into a boolean 0 or
       1 value.  For example, the following two tests are equivalent:
  
            (match_test "x & 2")
            (match_test "(x & 2) != 0")
  
! '(le ARITH1 ARITH2)'
! '(leu ARITH1 ARITH2)'
! '(lt ARITH1 ARITH2)'
! '(ltu ARITH1 ARITH2)'
! '(gt ARITH1 ARITH2)'
! '(gtu ARITH1 ARITH2)'
! '(ge ARITH1 ARITH2)'
! '(geu ARITH1 ARITH2)'
! '(ne ARITH1 ARITH2)'
! '(eq ARITH1 ARITH2)'
       These tests are true if the indicated comparison of the two
       arithmetic expressions is true.  Arithmetic expressions are formed
!      with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and',
!      'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt'
       expressions.
  
!      'const_int' and 'symbol_ref' are always valid terms (*note Insn
!      Lengths::,for additional forms).  'symbol_ref' is a string denoting
!      a C expression that yields an 'int' when evaluated by the
!      'get_attr_...' routine.  It should normally be a global variable.
  
! '(eq_attr NAME VALUE)'
       NAME is a string specifying the name of an attribute.
  
       VALUE is a string that is either a valid value for attribute NAME,
!      a comma-separated list of values, or '!' followed by a value or
!      list.  If VALUE does not begin with a '!', this test is true if the
       value of the NAME attribute of the current insn is in the list
!      specified by VALUE.  If VALUE begins with a '!', this test is true
       if the attribute's value is _not_ in the specified list.
  
       For example,
--- 31474,31581 ----
  plus a few specific to attribute definitions, to be discussed below.
  Attribute value expressions must have one of the following forms:
  
! ‘(const_int I)’
       The integer I specifies the value of a numeric attribute.  I must
       be non-negative.
  
       The value of a numeric attribute can be specified either with a
!      ‘const_int’, or as an integer represented as a string in
!      ‘const_string’, ‘eq_attr’ (see below), ‘attr’, ‘symbol_ref’, simple
!      arithmetic expressions, and ‘set_attr’ overrides on specific
       instructions (*note Tagging Insns::).
  
! ‘(const_string VALUE)’
       The string VALUE specifies a constant attribute value.  If VALUE is
!      specified as ‘"*"’, it means that the default value of the
       attribute is to be used for the insn containing this expression.
!      ‘"*"’ obviously cannot be used in the DEFAULT expression of a
!      ‘define_attr’.
  
       If the attribute whose value is being specified is numeric, VALUE
       must be a string containing a non-negative integer (normally
!      ‘const_int’ would be used in this case).  Otherwise, it must
       contain one of the valid values for the attribute.
  
! ‘(if_then_else TEST TRUE-VALUE FALSE-VALUE)’
       TEST specifies an attribute test, whose format is defined below.
       The value of this expression is TRUE-VALUE if TEST is true,
       otherwise it is FALSE-VALUE.
  
! ‘(cond [TEST1 VALUE1 ...] DEFAULT)’
       The first operand of this expression is a vector containing an even
       number of expressions and consisting of pairs of TEST and VALUE
!      expressions.  The value of the ‘cond’ expression is that of the
       VALUE corresponding to the first true TEST expression.  If none of
!      the TEST expressions are true, the value of the ‘cond’ expression
       is that of the DEFAULT expression.
  
   TEST expressions can have one of the following forms:
  
! ‘(const_int I)’
       This test is true if I is nonzero and false otherwise.
  
! ‘(not TEST)’
! ‘(ior TEST1 TEST2)’
! ‘(and TEST1 TEST2)’
       These tests are true if the indicated logical function is true.
  
! ‘(match_operand:M N PRED CONSTRAINTS)’
       This test is true if operand N of the insn whose attribute value is
       being determined has mode M (this part of the test is ignored if M
!      is ‘VOIDmode’) and the function specified by the string PRED
       returns a nonzero value when passed operand N and mode M (this part
       of the test is ignored if PRED is the null string).
  
       The CONSTRAINTS operand is ignored and should be the null string.
  
! ‘(match_test C-EXPR)’
       The test is true if C expression C-EXPR is true.  In non-constant
       attributes, C-EXPR has access to the following variables:
  
       INSN
            The rtl instruction under test.
       WHICH_ALTERNATIVE
!           The ‘define_insn’ alternative that INSN matches.  *Note Output
            Statement::.
       OPERANDS
            An array of INSN's rtl operands.
  
!      C-EXPR behaves like the condition in a C ‘if’ statement, so there
       is no need to explicitly convert the expression into a boolean 0 or
       1 value.  For example, the following two tests are equivalent:
  
            (match_test "x & 2")
            (match_test "(x & 2) != 0")
  
! ‘(le ARITH1 ARITH2)’
! ‘(leu ARITH1 ARITH2)’
! ‘(lt ARITH1 ARITH2)’
! ‘(ltu ARITH1 ARITH2)’
! ‘(gt ARITH1 ARITH2)’
! ‘(gtu ARITH1 ARITH2)’
! ‘(ge ARITH1 ARITH2)’
! ‘(geu ARITH1 ARITH2)’
! ‘(ne ARITH1 ARITH2)’
! ‘(eq ARITH1 ARITH2)’
       These tests are true if the indicated comparison of the two
       arithmetic expressions is true.  Arithmetic expressions are formed
!      with ‘plus’, ‘minus’, ‘mult’, ‘div’, ‘mod’, ‘abs’, ‘neg’, ‘and’,
!      ‘ior’, ‘xor’, ‘not’, ‘ashift’, ‘lshiftrt’, and ‘ashiftrt’
       expressions.
  
!      ‘const_int’ and ‘symbol_ref’ are always valid terms (*note Insn
!      Lengths::,for additional forms).  ‘symbol_ref’ is a string denoting
!      a C expression that yields an ‘int’ when evaluated by the
!      ‘get_attr_...’ routine.  It should normally be a global variable.
  
! ‘(eq_attr NAME VALUE)’
       NAME is a string specifying the name of an attribute.
  
       VALUE is a string that is either a valid value for attribute NAME,
!      a comma-separated list of values, or ‘!’ followed by a value or
!      list.  If VALUE does not begin with a ‘!’, this test is true if the
       value of the NAME attribute of the current insn is in the list
!      specified by VALUE.  If VALUE begins with a ‘!’, this test is true
       if the attribute's value is _not_ in the specified list.
  
       For example,
*************** Attribute value expressions must have on
*** 31585,31592 ****
  
            (ior (eq_attr "type" "load") (eq_attr "type" "store"))
  
!      If NAME specifies an attribute of 'alternative', it refers to the
!      value of the compiler variable 'which_alternative' (*note Output
       Statement::) and the values must be small integers.  For example,
  
            (eq_attr "alternative" "2,3")
--- 31586,31593 ----
  
            (ior (eq_attr "type" "load") (eq_attr "type" "store"))
  
!      If NAME specifies an attribute of ‘alternative’, it refers to the
!      value of the compiler variable ‘which_alternative’ (*note Output
       Statement::) and the values must be small integers.  For example,
  
            (eq_attr "alternative" "2,3")
*************** Attribute value expressions must have on
*** 31596,31612 ****
            (ior (eq (symbol_ref "which_alternative") (const_int 2))
                 (eq (symbol_ref "which_alternative") (const_int 3)))
  
!      Note that, for most attributes, an 'eq_attr' test is simplified in
       cases where the value of the attribute being tested is known for
       all insns matching a particular pattern.  This is by far the most
       common case.
  
! '(attr_flag NAME)'
!      The value of an 'attr_flag' expression is true if the flag
!      specified by NAME is true for the 'insn' currently being scheduled.
  
       NAME is a string specifying one of a fixed set of flags to test.
!      Test the flags 'forward' and 'backward' to determine the direction
       of a conditional branch.
  
       This example describes a conditional branch delay slot which can be
--- 31597,31613 ----
            (ior (eq (symbol_ref "which_alternative") (const_int 2))
                 (eq (symbol_ref "which_alternative") (const_int 3)))
  
!      Note that, for most attributes, an ‘eq_attr’ test is simplified in
       cases where the value of the attribute being tested is known for
       all insns matching a particular pattern.  This is by far the most
       common case.
  
! ‘(attr_flag NAME)’
!      The value of an ‘attr_flag’ expression is true if the flag
!      specified by NAME is true for the ‘insn’ currently being scheduled.
  
       NAME is a string specifying one of a fixed set of flags to test.
!      Test the flags ‘forward’ and ‘backward’ to determine the direction
       of a conditional branch.
  
       This example describes a conditional branch delay slot which can be
*************** Attribute value expressions must have on
*** 31620,31634 ****
               (and (eq_attr "in_branch_delay" "true")
                    (attr_flag "backward"))])
  
!      The 'forward' and 'backward' flags are false if the current 'insn'
       being scheduled is not a conditional branch.
  
!      'attr_flag' is only used during delay slot scheduling and has no
       meaning to other passes of the compiler.
  
! '(attr NAME)'
       The value of another attribute is returned.  This is most useful
!      for numeric attributes, as 'eq_attr' and 'attr_flag' produce more
       efficient code for non-numeric attributes.
  
  
--- 31621,31635 ----
               (and (eq_attr "in_branch_delay" "true")
                    (attr_flag "backward"))])
  
!      The ‘forward’ and ‘backward’ flags are false if the current ‘insn’
       being scheduled is not a conditional branch.
  
!      ‘attr_flag’ is only used during delay slot scheduling and has no
       meaning to other passes of the compiler.
  
! ‘(attr NAME)’
       The value of another attribute is returned.  This is most useful
!      for numeric attributes, as ‘eq_attr’ and ‘attr_flag’ produce more
       efficient code for non-numeric attributes.
  
  
*************** File: gccint.info,  Node: Tagging Insns,
*** 31638,31693 ****
  -------------------------------------------
  
  The value assigned to an attribute of an insn is primarily determined by
! which pattern is matched by that insn (or which 'define_peephole'
! generated it).  Every 'define_insn' and 'define_peephole' can have an
  optional last argument to specify the values of attributes for matching
  insns.  The value of any attribute not specified in a particular insn is
  set to the default value for that attribute, as specified in its
! 'define_attr'.  Extensive use of default values for attributes permits
  the specification of the values for only one or two attributes in the
  definition of most insn patterns, as seen in the example in the next
  section.
  
!  The optional last argument of 'define_insn' and 'define_peephole' is a
  vector of expressions, each of which defines the value for a single
  attribute.  The most general way of assigning an attribute's value is to
! use a 'set' expression whose first operand is an 'attr' expression
  giving the name of the attribute being set.  The second operand of the
! 'set' is an attribute expression (*note Expressions::) giving the value
  of the attribute.
  
!  When the attribute value depends on the 'alternative' attribute (i.e.,
  which is the applicable alternative in the constraint of the insn), the
! 'set_attr_alternative' expression can be used.  It allows the
  specification of a vector of attribute expressions, one for each
  alternative.
  
   When the generality of arbitrary attribute expressions is not required,
! the simpler 'set_attr' expression can be used, which allows specifying a
  string giving either a single attribute value or a list of attribute
  values, one for each alternative.
  
   The form of each of the above specifications is shown below.  In each
  case, NAME is a string specifying the attribute to be set.
  
! '(set_attr NAME VALUE-STRING)'
       VALUE-STRING is either a string giving the desired attribute value,
       or a string containing a comma-separated list giving the values for
       succeeding alternatives.  The number of elements must match the
       number of alternatives in the constraint of the insn pattern.
  
!      Note that it may be useful to specify '*' for some alternative, in
       which case the attribute will assume its default value for insns
       matching that alternative.
  
! '(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
       Depending on the alternative of the insn, the value will be one of
!      the specified values.  This is a shorthand for using a 'cond' with
!      tests on the 'alternative' attribute.
  
! '(set (attr NAME) VALUE)'
!      The first operand of this 'set' must be the special RTL expression
!      'attr', whose sole operand is a string giving the name of the
       attribute being set.  VALUE is the value of the attribute.
  
   The following shows three different ways of representing the same
--- 31639,31694 ----
  -------------------------------------------
  
  The value assigned to an attribute of an insn is primarily determined by
! which pattern is matched by that insn (or which ‘define_peephole’
! generated it).  Every ‘define_insn’ and ‘define_peephole’ can have an
  optional last argument to specify the values of attributes for matching
  insns.  The value of any attribute not specified in a particular insn is
  set to the default value for that attribute, as specified in its
! ‘define_attr’.  Extensive use of default values for attributes permits
  the specification of the values for only one or two attributes in the
  definition of most insn patterns, as seen in the example in the next
  section.
  
!  The optional last argument of ‘define_insn’ and ‘define_peephole’ is a
  vector of expressions, each of which defines the value for a single
  attribute.  The most general way of assigning an attribute's value is to
! use a ‘set’ expression whose first operand is an ‘attr’ expression
  giving the name of the attribute being set.  The second operand of the
! ‘set’ is an attribute expression (*note Expressions::) giving the value
  of the attribute.
  
!  When the attribute value depends on the ‘alternative’ attribute (i.e.,
  which is the applicable alternative in the constraint of the insn), the
! ‘set_attr_alternative’ expression can be used.  It allows the
  specification of a vector of attribute expressions, one for each
  alternative.
  
   When the generality of arbitrary attribute expressions is not required,
! the simpler ‘set_attr’ expression can be used, which allows specifying a
  string giving either a single attribute value or a list of attribute
  values, one for each alternative.
  
   The form of each of the above specifications is shown below.  In each
  case, NAME is a string specifying the attribute to be set.
  
! ‘(set_attr NAME VALUE-STRING)’
       VALUE-STRING is either a string giving the desired attribute value,
       or a string containing a comma-separated list giving the values for
       succeeding alternatives.  The number of elements must match the
       number of alternatives in the constraint of the insn pattern.
  
!      Note that it may be useful to specify ‘*’ for some alternative, in
       which case the attribute will assume its default value for insns
       matching that alternative.
  
! ‘(set_attr_alternative NAME [VALUE1 VALUE2 ...])’
       Depending on the alternative of the insn, the value will be one of
!      the specified values.  This is a shorthand for using a ‘cond’ with
!      tests on the ‘alternative’ attribute.
  
! ‘(set (attr NAME) VALUE)’
!      The first operand of this ‘set’ must be the special RTL expression
!      ‘attr’, whose sole operand is a string giving the name of the
       attribute being set.  VALUE is the value of the attribute.
  
   The following shows three different ways of representing the same
*************** attribute value specification:
*** 31704,31728 ****
                   (eq_attr "alternative" "2") (const_string "store")]
                  (const_string "arith")))
  
!  The 'define_asm_attributes' expression provides a mechanism to specify
! the attributes assigned to insns produced from an 'asm' statement.  It
  has the form:
  
       (define_asm_attributes [ATTR-SETS])
  
! where ATTR-SETS is specified the same as for both the 'define_insn' and
! the 'define_peephole' expressions.
  
   These values will typically be the "worst case" attribute values.  For
  example, they might indicate that the condition code will be clobbered.
  
!  A specification for a 'length' attribute is handled specially.  The way
! to compute the length of an 'asm' insn is to multiply the length
! specified in the expression 'define_asm_attributes' by the number of
! machine instructions specified in the 'asm' statement, determined by
  counting the number of semicolons and newlines in the string.
! Therefore, the value of the 'length' attribute specified in a
! 'define_asm_attributes' should be the maximum possible length of a
  single machine instruction.
  
  
--- 31705,31729 ----
                   (eq_attr "alternative" "2") (const_string "store")]
                  (const_string "arith")))
  
!  The ‘define_asm_attributes’ expression provides a mechanism to specify
! the attributes assigned to insns produced from an ‘asm’ statement.  It
  has the form:
  
       (define_asm_attributes [ATTR-SETS])
  
! where ATTR-SETS is specified the same as for both the ‘define_insn’ and
! the ‘define_peephole’ expressions.
  
   These values will typically be the "worst case" attribute values.  For
  example, they might indicate that the condition code will be clobbered.
  
!  A specification for a ‘length’ attribute is handled specially.  The way
! to compute the length of an ‘asm’ insn is to multiply the length
! specified in the expression ‘define_asm_attributes’ by the number of
! machine instructions specified in the ‘asm’ statement, determined by
  counting the number of semicolons and newlines in the string.
! Therefore, the value of the ‘length’ attribute specified in a
! ‘define_asm_attributes’ should be the maximum possible length of a
  single machine instruction.
  
  
*************** File: gccint.info,  Node: Attr Example,
*** 31732,31739 ****
  -------------------------------------------
  
  The judicious use of defaulting is important in the efficient use of
! insn attributes.  Typically, insns are divided into "types" and an
! attribute, customarily called 'type', is used to represent this value.
  This attribute is normally used only to define the default value for
  other attributes.  An example will clarify this usage.
  
--- 31733,31740 ----
  -------------------------------------------
  
  The judicious use of defaulting is important in the efficient use of
! insn attributes.  Typically, insns are divided into “types” and an
! attribute, customarily called ‘type’, is used to represent this value.
  This attribute is normally used only to define the default value for
  other attributes.  An example will clarify this usage.
  
*************** changed, be set to agree with the result
*** 31749,31755 ****
  changed if the item previously set into the condition code has been
  modified.
  
!  Here is part of a sample 'md' file for such a machine:
  
       (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
  
--- 31750,31756 ----
  changed if the item previously set into the condition code has been
  modified.
  
!  Here is part of a sample ‘md’ file for such a machine:
  
       (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
  
*************** File: gccint.info,  Node: Insn Lengths,
*** 31788,31837 ****
  For many machines, multiple types of branch instructions are provided,
  each for different length branch displacements.  In most cases, the
  assembler will choose the correct instruction to use.  However, when the
! assembler cannot do so, GCC can when a special attribute, the 'length'
  attribute, is defined.  This attribute must be defined to have numeric
! values by specifying a null string in its 'define_attr'.
  
!  In the case of the 'length' attribute, two additional forms of
  arithmetic terms are allowed in test expressions:
  
! '(match_dup N)'
       This refers to the address of operand N of the current insn, which
!      must be a 'label_ref'.
  
! '(pc)'
       For non-branch instructions and backward branch instructions, this
       refers to the address of the current insn.  But for forward branch
       instructions, this refers to the address of the next insn, because
       the length of the current insn is to be computed.
  
   For normal insns, the length will be determined by value of the
! 'length' attribute.  In the case of 'addr_vec' and 'addr_diff_vec' insn
  patterns, the length is computed as the number of vectors multiplied by
  the size of each vector.
  
   Lengths are measured in addressable storage units (bytes).
  
!  Note that it is possible to call functions via the 'symbol_ref'
  mechanism to compute the length of an insn.  However, if you use this
  mechanism you must provide dummy clauses to express the maximum length
  without using the function call.  You can see an example of this in the
! 'pa' machine description for the 'call_symref' pattern.
  
   The following macros can be used to refine the length computation:
  
! 'ADJUST_INSN_LENGTH (INSN, LENGTH)'
       If defined, modifies the length assigned to instruction INSN as a
       function of the context in which it is used.  LENGTH is an lvalue
       that contains the initially computed length of the insn and should
       be updated with the correct length of the insn.
  
       This macro will normally not be required.  A case in which it is
!      required is the ROMP.  On this machine, the size of an 'addr_vec'
       insn must be increased by two to compensate for the fact that
       alignment may be required.
  
!  The routine that returns 'get_attr_length' (the value of the 'length'
  attribute) can be used by the output routine to determine the form of
  the branch instruction to be written, as the example below illustrates.
  
--- 31789,31838 ----
  For many machines, multiple types of branch instructions are provided,
  each for different length branch displacements.  In most cases, the
  assembler will choose the correct instruction to use.  However, when the
! assembler cannot do so, GCC can when a special attribute, the ‘length’
  attribute, is defined.  This attribute must be defined to have numeric
! values by specifying a null string in its ‘define_attr’.
  
!  In the case of the ‘length’ attribute, two additional forms of
  arithmetic terms are allowed in test expressions:
  
! ‘(match_dup N)’
       This refers to the address of operand N of the current insn, which
!      must be a ‘label_ref’.
  
! ‘(pc)’
       For non-branch instructions and backward branch instructions, this
       refers to the address of the current insn.  But for forward branch
       instructions, this refers to the address of the next insn, because
       the length of the current insn is to be computed.
  
   For normal insns, the length will be determined by value of the
! ‘length’ attribute.  In the case of ‘addr_vec’ and ‘addr_diff_vec’ insn
  patterns, the length is computed as the number of vectors multiplied by
  the size of each vector.
  
   Lengths are measured in addressable storage units (bytes).
  
!  Note that it is possible to call functions via the ‘symbol_ref’
  mechanism to compute the length of an insn.  However, if you use this
  mechanism you must provide dummy clauses to express the maximum length
  without using the function call.  You can see an example of this in the
! ‘pa’ machine description for the ‘call_symref’ pattern.
  
   The following macros can be used to refine the length computation:
  
! ‘ADJUST_INSN_LENGTH (INSN, LENGTH)’
       If defined, modifies the length assigned to instruction INSN as a
       function of the context in which it is used.  LENGTH is an lvalue
       that contains the initially computed length of the insn and should
       be updated with the correct length of the insn.
  
       This macro will normally not be required.  A case in which it is
!      required is the ROMP.  On this machine, the size of an ‘addr_vec’
       insn must be increased by two to compensate for the fact that
       alignment may be required.
  
!  The routine that returns ‘get_attr_length’ (the value of the ‘length’
  attribute) can be used by the output routine to determine the form of
  the branch instruction to be written, as the example below illustrates.
  
*************** File: gccint.info,  Node: Constant Attri
*** 31864,31871 ****
  17.20.6 Constant Attributes
  ---------------------------
  
! A special form of 'define_attr', where the expression for the default
! value is a 'const' expression, indicates an attribute that is constant
  for a given run of the compiler.  Constant attributes may be used to
  specify which variety of processor is used.  For example,
  
--- 31865,31872 ----
  17.20.6 Constant Attributes
  ---------------------------
  
! A special form of ‘define_attr’, where the expression for the default
! value is a ‘const’ expression, indicates an attribute that is constant
  for a given run of the compiler.  Constant attributes may be used to
  specify which variety of processor is used.  For example,
  
*************** specify which variety of processor is us
*** 31883,31890 ****
  
   The routine generated for constant attributes has no parameters as it
  does not depend on any particular insn.  RTL expressions used to define
! the value of a constant attribute may use the 'symbol_ref' form, but may
! not use either the 'match_operand' form or 'eq_attr' forms involving
  insn attributes.
  
  
--- 31884,31891 ----
  
   The routine generated for constant attributes has no parameters as it
  does not depend on any particular insn.  RTL expressions used to define
! the value of a constant attribute may use the ‘symbol_ref’ form, but may
! not use either the ‘match_operand’ form or ‘eq_attr’ forms involving
  insn attributes.
  
  
*************** File: gccint.info,  Node: Mnemonic Attri
*** 31893,31899 ****
  17.20.7 Mnemonic Attribute
  --------------------------
  
! The 'mnemonic' attribute is a string type attribute holding the
  instruction mnemonic for an insn alternative.  The attribute values will
  automatically be generated by the machine description parser if there is
  an attribute definition in the md file:
--- 31894,31900 ----
  17.20.7 Mnemonic Attribute
  --------------------------
  
! The ‘mnemonic’ attribute is a string type attribute holding the
  instruction mnemonic for an insn alternative.  The attribute values will
  automatically be generated by the machine description parser if there is
  an attribute definition in the md file:
*************** an attribute definition in the md file:
*** 31904,31920 ****
  with any of the instruction mnemonics.  This value will be used whenever
  the machine description parser is not able to determine the mnemonic
  string.  This might be the case for output templates containing more
! than a single instruction as in '"mvcle\t%0,%1,0\;jo\t.-4"'.
  
!  The 'mnemonic' attribute set is not generated automatically if the
  instruction string is generated via C code.
  
!  An existing 'mnemonic' attribute set in an insn definition will not be
  overriden by the md file parser.  That way it is possible to manually
  set the instruction mnemonics for the cases where the md file parser
  fails to determine it automatically.
  
!  The 'mnemonic' attribute is useful for dealing with instruction
  specific properties in the pipeline description without defining
  additional insn attributes.
  
--- 31905,31921 ----
  with any of the instruction mnemonics.  This value will be used whenever
  the machine description parser is not able to determine the mnemonic
  string.  This might be the case for output templates containing more
! than a single instruction as in ‘"mvcle\t%0,%1,0\;jo\t.-4"’.
  
!  The ‘mnemonic’ attribute set is not generated automatically if the
  instruction string is generated via C code.
  
!  An existing ‘mnemonic’ attribute set in an insn definition will not be
  overriden by the md file parser.  That way it is possible to manually
  set the instruction mnemonics for the cases where the md file parser
  fails to determine it automatically.
  
!  The ‘mnemonic’ attribute is useful for dealing with instruction
  specific properties in the pipeline description without defining
  additional insn attributes.
  
*************** File: gccint.info,  Node: Delay Slots,
*** 31931,31943 ****
  
  The insn attribute mechanism can be used to specify the requirements for
  delay slots, if any, on a target machine.  An instruction is said to
! require a "delay slot" if some instructions that are physically after
  the instruction are executed as if they were located before it.  Classic
  examples are branch and call instructions, which often execute the
  following instruction before the branch or call is performed.
  
   On some machines, conditional branch instructions can optionally
! "annul" instructions in the delay slot.  This means that the instruction
  will not be executed for certain branch outcomes.  Both instructions
  that annul if the branch is true and instructions that annul if the
  branch is false are supported.
--- 31932,31944 ----
  
  The insn attribute mechanism can be used to specify the requirements for
  delay slots, if any, on a target machine.  An instruction is said to
! require a “delay slot” if some instructions that are physically after
  the instruction are executed as if they were located before it.  Classic
  examples are branch and call instructions, which often execute the
  following instruction before the branch or call is performed.
  
   On some machines, conditional branch instructions can optionally
! “annul” instructions in the delay slot.  This means that the instruction
  will not be executed for certain branch outcomes.  Both instructions
  that annul if the branch is true and instructions that annul if the
  branch is false are supported.
*************** instructions.  See the next section for
*** 31949,31981 ****
  instruction scheduling.
  
   The requirement of an insn needing one or more delay slots is indicated
! via the 'define_delay' expression.  It has the following form:
  
       (define_delay TEST
                     [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
                      DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
                      ...])
  
!  TEST is an attribute test that indicates whether this 'define_delay'
  applies to a particular insn.  If so, the number of required delay slots
  is determined by the length of the vector specified as the second
  argument.  An insn placed in delay slot N must satisfy attribute test
  DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
  may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
  specifies which insns in the delay slot may be annulled if the branch is
! false.  If annulling is not supported for that delay slot, '(nil)'
  should be coded.
  
   For example, in the common case where branch and call insns require a
  single delay slot, which may contain any insn other than a branch or
! call, the following would be placed in the 'md' file:
  
       (define_delay (eq_attr "type" "branch,call")
                     [(eq_attr "type" "!branch,call") (nil) (nil)])
  
!  Multiple 'define_delay' expressions may be specified.  In this case,
  each such expression specifies different delay slot requirements and
! there must be no insn for which tests in two 'define_delay' expressions
  are both true.
  
   For example, if we have a machine that requires one delay slot for
--- 31950,31982 ----
  instruction scheduling.
  
   The requirement of an insn needing one or more delay slots is indicated
! via the ‘define_delay’ expression.  It has the following form:
  
       (define_delay TEST
                     [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
                      DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
                      ...])
  
!  TEST is an attribute test that indicates whether this ‘define_delay’
  applies to a particular insn.  If so, the number of required delay slots
  is determined by the length of the vector specified as the second
  argument.  An insn placed in delay slot N must satisfy attribute test
  DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
  may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
  specifies which insns in the delay slot may be annulled if the branch is
! false.  If annulling is not supported for that delay slot, ‘(nil)’
  should be coded.
  
   For example, in the common case where branch and call insns require a
  single delay slot, which may contain any insn other than a branch or
! call, the following would be placed in the ‘md’ file:
  
       (define_delay (eq_attr "type" "branch,call")
                     [(eq_attr "type" "!branch,call") (nil) (nil)])
  
!  Multiple ‘define_delay’ expressions may be specified.  In this case,
  each such expression specifies different delay slot requirements and
! there must be no insn for which tests in two ‘define_delay’ expressions
  are both true.
  
   For example, if we have a machine that requires one delay slot for
*************** File: gccint.info,  Node: Processor pipe
*** 31999,32015 ****
  -------------------------------------------------
  
  To achieve better performance, most modern processors (super-pipelined,
! superscalar RISC, and VLIW processors) have many "functional units" on
  which several instructions can be executed simultaneously.  An
  instruction starts execution if its issue conditions are satisfied.  If
  not, the instruction is stalled until its conditions are satisfied.
! Such "interlock (pipeline) delay" causes interruption of the fetching of
  successor instructions (or demands nop instructions, e.g. for some MIPS
  processors).
  
   There are two major kinds of interlock delays in modern processors.
! The first one is a data dependence delay determining "instruction
! latency time".  The instruction execution is not started until all
  source data have been evaluated by prior instructions (there are more
  complex cases when the instruction execution starts even when the data
  are not available but will be ready in given time after the instruction
--- 32000,32016 ----
  -------------------------------------------------
  
  To achieve better performance, most modern processors (super-pipelined,
! superscalar RISC, and VLIW processors) have many “functional units” on
  which several instructions can be executed simultaneously.  An
  instruction starts execution if its issue conditions are satisfied.  If
  not, the instruction is stalled until its conditions are satisfied.
! Such “interlock (pipeline) delay” causes interruption of the fetching of
  successor instructions (or demands nop instructions, e.g. for some MIPS
  processors).
  
   There are two major kinds of interlock delays in modern processors.
! The first one is a data dependence delay determining “instruction
! latency time”.  The instruction execution is not started until all
  source data have been evaluated by prior instructions (there are more
  complex cases when the instruction execution starts even when the data
  are not available but will be ready in given time after the instruction
*************** especially for modern RISC processors.
*** 32026,32037 ****
   The task of exploiting more processor parallelism is solved by an
  instruction scheduler.  For a better solution to this problem, the
  instruction scheduler has to have an adequate description of the
! processor parallelism (or "pipeline description").  GCC machine
  descriptions describe processor parallelism and functional unit
! reservations for groups of instructions with the aid of "regular
! expressions".
  
!  The GCC instruction scheduler uses a "pipeline hazard recognizer" to
  figure out the possibility of the instruction issue by the processor on
  a given simulated processor cycle.  The pipeline hazard recognizer is
  automatically generated from the processor pipeline description.  The
--- 32027,32038 ----
   The task of exploiting more processor parallelism is solved by an
  instruction scheduler.  For a better solution to this problem, the
  instruction scheduler has to have an adequate description of the
! processor parallelism (or “pipeline description”).  GCC machine
  descriptions describe processor parallelism and functional unit
! reservations for groups of instructions with the aid of “regular
! expressions”.
  
!  The GCC instruction scheduler uses a “pipeline hazard recognizer” to
  figure out the possibility of the instruction issue by the processor on
  a given simulated processor cycle.  The pipeline hazard recognizer is
  automatically generated from the processor pipeline description.  The
*************** only one finite state automaton is gener
*** 32057,32064 ****
  
   AUTOMATA-NAMES is a string giving names of the automata.  The names are
  separated by commas.  All the automata should have unique names.  The
! automaton name is used in the constructions 'define_cpu_unit' and
! 'define_query_cpu_unit'.
  
   Each processor functional unit used in the description of instruction
  reservations should be described by the following construction.
--- 32058,32065 ----
  
   AUTOMATA-NAMES is a string giving names of the automata.  The names are
  separated by commas.  All the automata should have unique names.  The
! automaton name is used in the constructions ‘define_cpu_unit’ and
! ‘define_query_cpu_unit’.
  
   Each processor functional unit used in the description of instruction
  reservations should be described by the following construction.
*************** reservations should be described by the
*** 32066,32077 ****
       (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
  
   UNIT-NAMES is a string giving the names of the functional units
! separated by commas.  Don't use name 'nothing', it is reserved for other
  goals.
  
   AUTOMATON-NAME is a string giving the name of the automaton with which
  the unit is bound.  The automaton should be described in construction
! 'define_automaton'.  You should give "automaton-name", if there is a
  defined automaton.
  
   The assignment of units to automata are constrained by the uses of the
--- 32067,32078 ----
       (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
  
   UNIT-NAMES is a string giving the names of the functional units
! separated by commas.  Don't use name ‘nothing’, it is reserved for other
  goals.
  
   AUTOMATON-NAME is a string giving the name of the automaton with which
  the unit is bound.  The automaton should be described in construction
! ‘define_automaton’.  You should give “automaton-name”, if there is a
  defined automaton.
  
   The assignment of units to automata are constrained by the uses of the
*************** The rest of the constraints are mentione
*** 32083,32089 ****
  subsequent constructions.
  
   The following construction describes CPU functional units analogously
! to 'define_cpu_unit'.  The reservation of such units can be queried for
  an automaton state.  The instruction scheduler never queries reservation
  of functional units for given automaton state.  So as a rule, you don't
  need this construction.  This construction could be used for future code
--- 32084,32090 ----
  subsequent constructions.
  
   The following construction describes CPU functional units analogously
! to ‘define_cpu_unit’.  The reservation of such units can be queried for
  an automaton state.  The instruction scheduler never queries reservation
  of functional units for given automaton state.  So as a rule, you don't
  need this construction.  This construction could be used for future code
*************** dependencies.  The cost of anti-dependen
*** 32112,32134 ****
  of output dependencies is the difference between latency times of the
  producing and consuming insns (if the difference is negative, the cost
  is considered to be zero).  You can always change the default costs for
! any description by using the target hook 'TARGET_SCHED_ADJUST_COST'
  (*note Scheduling::).
  
   INSN-NAME is a string giving the internal name of the insn.  The
! internal names are used in constructions 'define_bypass' and in the
  automaton description file generated for debugging.  The internal name
! has nothing in common with the names in 'define_insn'.  It is a good
  practice to use insn classes described in the processor manual.
  
   CONDITION defines what RTL insns are described by this construction.
  You should remember that you will be in trouble if CONDITION for two or
! more different 'define_insn_reservation' constructions is TRUE for an
  insn.  In this case what reservation will be used for the insn is not
  defined.  Such cases are not checked during generation of the pipeline
  hazards recognizer because in general recognizing that two conditions
  may have the same value is quite difficult (especially if the conditions
! contain 'symbol_ref').  It is also not checked during the pipeline
  hazard recognizer work because it would slow down the recognizer
  considerably.
  
--- 32113,32135 ----
  of output dependencies is the difference between latency times of the
  producing and consuming insns (if the difference is negative, the cost
  is considered to be zero).  You can always change the default costs for
! any description by using the target hook ‘TARGET_SCHED_ADJUST_COST’
  (*note Scheduling::).
  
   INSN-NAME is a string giving the internal name of the insn.  The
! internal names are used in constructions ‘define_bypass’ and in the
  automaton description file generated for debugging.  The internal name
! has nothing in common with the names in ‘define_insn’.  It is a good
  practice to use insn classes described in the processor manual.
  
   CONDITION defines what RTL insns are described by this construction.
  You should remember that you will be in trouble if CONDITION for two or
! more different ‘define_insn_reservation’ constructions is TRUE for an
  insn.  In this case what reservation will be used for the insn is not
  defined.  Such cases are not checked during generation of the pipeline
  hazards recognizer because in general recognizing that two conditions
  may have the same value is quite difficult (especially if the conditions
! contain ‘symbol_ref’).  It is also not checked during the pipeline
  hazard recognizer work because it would slow down the recognizer
  considerably.
  
*************** expression according to the following sy
*** 32154,32181 ****
                      | "nothing"
                      | "(" regexp ")"
  
!    * ',' is used for describing the start of the next cycle in the
       reservation.
  
!    * '|' is used for describing a reservation described by the first
       regular expression *or* a reservation described by the second
       regular expression *or* etc.
  
!    * '+' is used for describing a reservation described by the first
       regular expression *and* a reservation described by the second
       regular expression *and* etc.
  
!    * '*' is used for convenience and simply means a sequence in which
       the regular expression are repeated NUMBER times with cycle
!      advancing (see ',').
  
!    * 'cpu_function_unit_name' denotes reservation of the named
       functional unit.
  
!    * 'reservation_name' -- see description of construction
!      'define_reservation'.
  
!    * 'nothing' denotes no unit reservations.
  
   Sometimes unit reservations for different insns contain common parts.
  In such case, you can simplify the pipeline description by describing
--- 32155,32182 ----
                      | "nothing"
                      | "(" regexp ")"
  
!    • ‘,’ is used for describing the start of the next cycle in the
       reservation.
  
!    • ‘|’ is used for describing a reservation described by the first
       regular expression *or* a reservation described by the second
       regular expression *or* etc.
  
!    • ‘+’ is used for describing a reservation described by the first
       regular expression *and* a reservation described by the second
       regular expression *and* etc.
  
!    • ‘*’ is used for convenience and simply means a sequence in which
       the regular expression are repeated NUMBER times with cycle
!      advancing (see ‘,’).
  
!    • ‘cpu_function_unit_name’ denotes reservation of the named
       functional unit.
  
!    • ‘reservation_name’ -- see description of construction
!      ‘define_reservation’.
  
!    • ‘nothing’ denotes no unit reservations.
  
   Sometimes unit reservations for different insns contain common parts.
  In such case, you can simplify the pipeline description by describing
*************** the common part by the following constru
*** 32186,32192 ****
   RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
  names and reservation names are in the same name space.  So the
  reservation names should be different from the functional unit names and
! cannot be the reserved name 'nothing'.
  
   The following construction is used to describe exceptions in the
  latency time for given instruction pair.  This is so called bypasses.
--- 32187,32193 ----
   RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
  names and reservation names are in the same name space.  So the
  reservation names should be different from the functional unit names and
! cannot be the reserved name ‘nothing’.
  
   The following construction is used to describe exceptions in the
  latency time for given instruction pair.  This is so called bypasses.
*************** latency time for given instruction pair.
*** 32198,32214 ****
  string OUT_INSN_NAMES will be ready for the instructions given in string
  IN_INSN_NAMES.  Each of these strings is a comma-separated list of
  filename-style globs and they refer to the names of
! 'define_insn_reservation's.  For example:
       (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
!  defines a bypass between instructions that start with 'cpu1_load_' or
! 'cpu1_store_' and those that start with 'cpu1_load_'.
  
   GUARD is an optional string giving the name of a C function which
  defines an additional guard for the bypass.  The function will get the
  two insns as parameters.  If the function returns zero the bypass will
  be ignored for this case.  The additional guard is necessary to
  recognize complicated bypasses, e.g. when the consumer is only an
! address of insn 'store' (not a stored value).
  
   If there are more one bypass with the same output and input insns, the
  chosen bypass is the first bypass with a guard in description whose
--- 32199,32215 ----
  string OUT_INSN_NAMES will be ready for the instructions given in string
  IN_INSN_NAMES.  Each of these strings is a comma-separated list of
  filename-style globs and they refer to the names of
! ‘define_insn_reservation’s.  For example:
       (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
!  defines a bypass between instructions that start with ‘cpu1_load_’ or
! ‘cpu1_store_’ and those that start with ‘cpu1_load_’.
  
   GUARD is an optional string giving the name of a C function which
  defines an additional guard for the bypass.  The function will get the
  two insns as parameters.  If the function returns zero the bypass will
  be ignored for this case.  The additional guard is necessary to
  recognize complicated bypasses, e.g. when the consumer is only an
! address of insn ‘store’ (not a stored value).
  
   If there are more one bypass with the same output and input insns, the
  chosen bypass is the first bypass with a guard in description whose
*************** commas.
*** 32233,32239 ****
  comma.  Currently pattern is one unit or units separated by
  white-spaces.
  
!  The first construction ('exclusion_set') means that each functional
  unit in the first string cannot be reserved simultaneously with a unit
  whose name is in the second string and vice versa.  For example, the
  construction is useful for describing processors (e.g. some SPARC
--- 32234,32240 ----
  comma.  Currently pattern is one unit or units separated by
  white-spaces.
  
!  The first construction (‘exclusion_set’) means that each functional
  unit in the first string cannot be reserved simultaneously with a unit
  whose name is in the second string and vice versa.  For example, the
  construction is useful for describing processors (e.g. some SPARC
*************** processors) with a fully pipelined float
*** 32241,32300 ****
  can execute simultaneously only single floating point insns or only
  double floating point insns.
  
!  The second construction ('presence_set') means that each functional
  unit in the first string cannot be reserved unless at least one of
  pattern of units whose names are in the second string is reserved.  This
  is an asymmetric relation.  For example, it is useful for description
! that VLIW 'slot1' is reserved after 'slot0' reservation.  We could
  describe it by the following construction
  
       (presence_set "slot1" "slot0")
  
!  Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation.
  In this case we could write
  
       (presence_set "slot1" "slot0 b0")
  
!  The third construction ('final_presence_set') is analogous to
! 'presence_set'.  The difference between them is when checking is done.
  When an instruction is issued in given automaton state reflecting all
  current and planned unit reservations, the automaton state is changed.
  The first state is a source state, the second one is a result state.
! Checking for 'presence_set' is done on the source state reservation,
! checking for 'final_presence_set' is done on the result reservation.
  This construction is useful to describe a reservation which is actually
  two subsequent reservations.  For example, if we use
  
       (presence_set "slot1" "slot0")
  
!  the following insn will be never issued (because 'slot1' requires
! 'slot0' which is absent in the source state).
  
       (define_reservation "insn_and_nop" "slot0 + slot1")
  
!  but it can be issued if we use analogous 'final_presence_set'.
  
!  The forth construction ('absence_set') means that each functional unit
  in the first string can be reserved only if each pattern of units whose
  names are in the second string is not reserved.  This is an asymmetric
! relation (actually 'exclusion_set' is analogous to this one but it is
  symmetric).  For example it might be useful in a VLIW description to say
! that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have
  been reserved.  This can be described as:
  
       (absence_set "slot0" "slot1, slot2")
  
!  Or 'slot2' cannot be reserved if 'slot0' and unit 'b0' are reserved or
! 'slot1' and unit 'b1' are reserved.  In this case we could write
  
       (absence_set "slot2" "slot0 b0, slot1 b1")
  
   All functional units mentioned in a set should belong to the same
  automaton.
  
!  The last construction ('final_absence_set') is analogous to
! 'absence_set' but checking is done on the result (state) reservation.
! See comments for 'final_presence_set'.
  
   You can control the generator of the pipeline hazard recognizer with
  the following construction.
--- 32242,32301 ----
  can execute simultaneously only single floating point insns or only
  double floating point insns.
  
!  The second construction (‘presence_set’) means that each functional
  unit in the first string cannot be reserved unless at least one of
  pattern of units whose names are in the second string is reserved.  This
  is an asymmetric relation.  For example, it is useful for description
! that VLIW ‘slot1’ is reserved after ‘slot0’ reservation.  We could
  describe it by the following construction
  
       (presence_set "slot1" "slot0")
  
!  Or ‘slot1’ is reserved only after ‘slot0’ and unit ‘b0’ reservation.
  In this case we could write
  
       (presence_set "slot1" "slot0 b0")
  
!  The third construction (‘final_presence_set’) is analogous to
! ‘presence_set’.  The difference between them is when checking is done.
  When an instruction is issued in given automaton state reflecting all
  current and planned unit reservations, the automaton state is changed.
  The first state is a source state, the second one is a result state.
! Checking for ‘presence_set’ is done on the source state reservation,
! checking for ‘final_presence_set’ is done on the result reservation.
  This construction is useful to describe a reservation which is actually
  two subsequent reservations.  For example, if we use
  
       (presence_set "slot1" "slot0")
  
!  the following insn will be never issued (because ‘slot1’ requires
! ‘slot0’ which is absent in the source state).
  
       (define_reservation "insn_and_nop" "slot0 + slot1")
  
!  but it can be issued if we use analogous ‘final_presence_set’.
  
!  The forth construction (‘absence_set’) means that each functional unit
  in the first string can be reserved only if each pattern of units whose
  names are in the second string is not reserved.  This is an asymmetric
! relation (actually ‘exclusion_set’ is analogous to this one but it is
  symmetric).  For example it might be useful in a VLIW description to say
! that ‘slot0’ cannot be reserved after either ‘slot1’ or ‘slot2’ have
  been reserved.  This can be described as:
  
       (absence_set "slot0" "slot1, slot2")
  
!  Or ‘slot2’ cannot be reserved if ‘slot0’ and unit ‘b0’ are reserved or
! ‘slot1’ and unit ‘b1’ are reserved.  In this case we could write
  
       (absence_set "slot2" "slot0 b0, slot1 b1")
  
   All functional units mentioned in a set should belong to the same
  automaton.
  
!  The last construction (‘final_absence_set’) is analogous to
! ‘absence_set’ but checking is done on the result (state) reservation.
! See comments for ‘final_presence_set’.
  
   You can control the generator of the pipeline hazard recognizer with
  the following construction.
*************** the following construction.
*** 32304,32350 ****
   OPTIONS is a string giving options which affect the generated code.
  Currently there are the following options:
  
!    * "no-minimization" makes no minimization of the automaton.  This is
       only worth to do when we are debugging the description and need to
       look more accurately at reservations of states.
  
!    * "time" means printing time statistics about the generation of
       automata.
  
!    * "stats" means printing statistics about the generated automata such
       as the number of DFA states, NDFA states and arcs.
  
!    * "v" means a generation of the file describing the result automata.
!      The file has suffix '.dfa' and can be used for the description
       verification and debugging.
  
!    * "w" means a generation of warning instead of error for non-critical
       errors.
  
!    * "no-comb-vect" prevents the automaton generator from generating two
       data structures and comparing them for space efficiency.  Using a
       comb vector to represent transitions may be better, but it can be
       very expensive to construct.  This option is useful if the build
       process spends an unacceptably long time in genautomata.
  
!    * "ndfa" makes nondeterministic finite state automata.  This affects
!      the treatment of operator '|' in the regular expressions.  The
       usual treatment of the operator is to try the first alternative
       and, if the reservation is not possible, the second alternative.
       The nondeterministic treatment means trying all alternatives, some
       of them may be rejected by reservations in the subsequent insns.
  
!    * "collapse-ndfa" modifies the behavior of the generator when
       producing an automaton.  An additional state transition to collapse
       a nondeterministic NDFA state to a deterministic DFA state is
!      generated.  It can be triggered by passing 'const0_rtx' to
       state_transition.  In such an automaton, cycle advance transitions
       are available only for these collapsed states.  This option is
!      useful for ports that want to use the 'ndfa' option, but also want
!      to use 'define_query_cpu_unit' to assign units to insns issued in a
       cycle.
  
!    * "progress" means output of a progress bar showing how many states
       were generated so far for automaton being processed.  This is
       useful during debugging a DFA description.  If you see too many
       generated states, you could interrupt the generator of the pipeline
--- 32305,32351 ----
   OPTIONS is a string giving options which affect the generated code.
  Currently there are the following options:
  
!    • “no-minimization” makes no minimization of the automaton.  This is
       only worth to do when we are debugging the description and need to
       look more accurately at reservations of states.
  
!    • “time” means printing time statistics about the generation of
       automata.
  
!    • “stats” means printing statistics about the generated automata such
       as the number of DFA states, NDFA states and arcs.
  
!    • “v” means a generation of the file describing the result automata.
!      The file has suffix ‘.dfa’ and can be used for the description
       verification and debugging.
  
!    • “w” means a generation of warning instead of error for non-critical
       errors.
  
!    • “no-comb-vect” prevents the automaton generator from generating two
       data structures and comparing them for space efficiency.  Using a
       comb vector to represent transitions may be better, but it can be
       very expensive to construct.  This option is useful if the build
       process spends an unacceptably long time in genautomata.
  
!    • “ndfa” makes nondeterministic finite state automata.  This affects
!      the treatment of operator ‘|’ in the regular expressions.  The
       usual treatment of the operator is to try the first alternative
       and, if the reservation is not possible, the second alternative.
       The nondeterministic treatment means trying all alternatives, some
       of them may be rejected by reservations in the subsequent insns.
  
!    • “collapse-ndfa” modifies the behavior of the generator when
       producing an automaton.  An additional state transition to collapse
       a nondeterministic NDFA state to a deterministic DFA state is
!      generated.  It can be triggered by passing ‘const0_rtx’ to
       state_transition.  In such an automaton, cycle advance transitions
       are available only for these collapsed states.  This option is
!      useful for ports that want to use the ‘ndfa’ option, but also want
!      to use ‘define_query_cpu_unit’ to assign units to insns issued in a
       cycle.
  
!    • “progress” means output of a progress bar showing how many states
       were generated so far for automaton being processed.  This is
       useful during debugging a DFA description.  If you see too many
       generated states, you could interrupt the generator of the pipeline
*************** could specify
*** 32392,32398 ****
  
       (define_reservation "finish" "port0|port1")
  
!  and use it in all 'define_insn_reservation' as in the following
  construction
  
       (define_insn_reservation "simple" 2 (eq_attr "type" "int")
--- 32393,32399 ----
  
       (define_reservation "finish" "port0|port1")
  
!  and use it in all ‘define_insn_reservation’ as in the following
  construction
  
       (define_insn_reservation "simple" 2 (eq_attr "type" "int")
*************** A number of architectures provide for so
*** 32416,32423 ****
  execution, or predication.  The hallmark of this feature is the ability
  to nullify most of the instructions in the instruction set.  When the
  instruction set is large and not entirely symmetric, it can be quite
! tedious to describe these forms directly in the '.md' file.  An
! alternative is the 'define_cond_exec' template.
  
       (define_cond_exec
         [PREDICATE-PATTERN]
--- 32417,32424 ----
  execution, or predication.  The hallmark of this feature is the ability
  to nullify most of the instructions in the instruction set.  When the
  instruction set is large and not entirely symmetric, it can be quite
! tedious to describe these forms directly in the ‘.md’ file.  An
! alternative is the ‘define_cond_exec’ template.
  
       (define_cond_exec
         [PREDICATE-PATTERN]
*************** alternative is the 'define_cond_exec' te
*** 32427,32445 ****
  
   PREDICATE-PATTERN is the condition that must be true for the insn to be
  executed at runtime and should match a relational operator.  One can use
! 'match_operator' to match several relational operators at once.  Any
! 'match_operand' operands must have no more than one alternative.
  
   CONDITION is a C expression that must be true for the generated pattern
  to match.
  
!  OUTPUT-TEMPLATE is a string similar to the 'define_insn' output
! template (*note Output Template::), except that the '*' and '@' special
  cases do not apply.  This is only useful if the assembly text for the
  predicate is a simple prefix to the main insn.  In order to handle the
! general case, there is a global variable 'current_insn_predicate' that
  will contain the entire predicate if the current insn is predicated, and
! will otherwise be 'NULL'.
  
   OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets
  appended to the insn attributes of the produced cond_exec rtx.  It can
--- 32428,32446 ----
  
   PREDICATE-PATTERN is the condition that must be true for the insn to be
  executed at runtime and should match a relational operator.  One can use
! ‘match_operator’ to match several relational operators at once.  Any
! ‘match_operand’ operands must have no more than one alternative.
  
   CONDITION is a C expression that must be true for the generated pattern
  to match.
  
!  OUTPUT-TEMPLATE is a string similar to the ‘define_insn’ output
! template (*note Output Template::), except that the ‘*’ and ‘@’ special
  cases do not apply.  This is only useful if the assembly text for the
  predicate is a simple prefix to the main insn.  In order to handle the
! general case, there is a global variable ‘current_insn_predicate’ that
  will contain the entire predicate if the current insn is predicated, and
! will otherwise be ‘NULL’.
  
   OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets
  appended to the insn attributes of the produced cond_exec rtx.  It can
*************** that way.  An example usage would be to
*** 32448,32466 ****
  conjunction with attributes on the main pattern to disable particular
  alternatives under certain conditions.
  
!  When 'define_cond_exec' is used, an implicit reference to the
! 'predicable' instruction attribute is made.  *Note Insn Attributes::.
  This attribute must be a boolean (i.e. have exactly two elements in its
! LIST-OF-VALUES), with the possible values being 'no' and 'yes'.  The
  default and all uses in the insns must be a simple constant, not a
  complex expressions.  It may, however, depend on the alternative, by
  using a comma-separated list of values.  If that is the case, the port
! should also define an 'enabled' attribute (*note Disable Insn
! Alternatives::), which should also allow only 'no' and 'yes' as its
  values.
  
!  For each 'define_insn' for which the 'predicable' attribute is true, a
! new 'define_insn' pattern will be generated that matches a predicated
  version of the instruction.  For example,
  
       (define_insn "addsi"
--- 32449,32467 ----
  conjunction with attributes on the main pattern to disable particular
  alternatives under certain conditions.
  
!  When ‘define_cond_exec’ is used, an implicit reference to the
! ‘predicable’ instruction attribute is made.  *Note Insn Attributes::.
  This attribute must be a boolean (i.e. have exactly two elements in its
! LIST-OF-VALUES), with the possible values being ‘no’ and ‘yes’.  The
  default and all uses in the insns must be a simple constant, not a
  complex expressions.  It may, however, depend on the alternative, by
  using a comma-separated list of values.  If that is the case, the port
! should also define an ‘enabled’ attribute (*note Disable Insn
! Alternatives::), which should also allow only ‘no’ and ‘yes’ as its
  values.
  
!  For each ‘define_insn’ for which the ‘predicable’ attribute is true, a
! new ‘define_insn’ pattern will be generated that matches a predicated
  version of the instruction.  For example,
  
       (define_insn "addsi"
*************** File: gccint.info,  Node: Define Subst,
*** 32495,32503 ****
  
  For some hardware architectures there are common cases when the RTL
  templates for the instructions can be derived from the other RTL
! templates using simple transformations.  E.g., 'i386.md' contains an RTL
! template for the ordinary 'sub' instruction-- '*subsi_1', and for the
! 'sub' instruction with subsequent zero-extension--'*subsi_1_zext'.  Such
  cases can be easily implemented by a single meta-template capable of
  generating a modified case based on the initial one:
  
--- 32496,32504 ----
  
  For some hardware architectures there are common cases when the RTL
  templates for the instructions can be derived from the other RTL
! templates using simple transformations.  E.g., ‘i386.md’ contains an RTL
! template for the ordinary ‘sub’ instruction-- ‘*subsi_1’, and for the
! ‘sub’ instruction with subsequent zero-extension--‘*subsi_1_zext’.  Such
  cases can be easily implemented by a single meta-template capable of
  generating a modified case based on the initial one:
  
*************** output-template.
*** 32515,32552 ****
   OUTPUT-TEMPLATE is a pattern that will be used in the resulting
  template.
  
!  'define_subst' mechanism is tightly coupled with the notion of the
! subst attribute (*note Subst Iterators::).  The use of 'define_subst' is
  triggered by a reference to a subst attribute in the transforming RTL
  template.  This reference initiates duplication of the source RTL
  template and substitution of the attributes with their values.  The
  source RTL template is left unchanged, while the copy is transformed by
! 'define_subst'.  This transformation can fail in the case when the
  source RTL template is not matched against the input-template of the
! 'define_subst'.  In such case the copy is deleted.
  
!  'define_subst' can be used only in 'define_insn' and 'define_expand',
  it cannot be used in other expressions (e.g. in
! 'define_insn_and_split').
  
  * Menu:
  
! * Define Subst Example::	    Example of 'define_subst' work.
  * Define Subst Pattern Matching::   Process of template comparison.
  * Define Subst Output Template::    Generation of output template.
  
  
  File: gccint.info,  Node: Define Subst Example,  Next: Define Subst Pattern Matching,  Up: Define Subst
  
! 17.22.1 'define_subst' Example
  ------------------------------
  
! To illustrate how 'define_subst' works, let us examine a simple template
  transformation.
  
   Suppose there are two kinds of instructions: one that touches flags and
  the other that does not.  The instructions of the second type could be
! generated with the following 'define_subst':
  
       (define_subst "add_clobber_subst"
         [(set (match_operand:SI 0 "" "")
--- 32516,32553 ----
   OUTPUT-TEMPLATE is a pattern that will be used in the resulting
  template.
  
!  ‘define_subst’ mechanism is tightly coupled with the notion of the
! subst attribute (*note Subst Iterators::).  The use of ‘define_subst’ is
  triggered by a reference to a subst attribute in the transforming RTL
  template.  This reference initiates duplication of the source RTL
  template and substitution of the attributes with their values.  The
  source RTL template is left unchanged, while the copy is transformed by
! ‘define_subst’.  This transformation can fail in the case when the
  source RTL template is not matched against the input-template of the
! ‘define_subst’.  In such case the copy is deleted.
  
!  ‘define_subst’ can be used only in ‘define_insn’ and ‘define_expand’,
  it cannot be used in other expressions (e.g. in
! ‘define_insn_and_split’).
  
  * Menu:
  
! * Define Subst Example::	    Example of ‘define_subst’ work.
  * Define Subst Pattern Matching::   Process of template comparison.
  * Define Subst Output Template::    Generation of output template.
  
  
  File: gccint.info,  Node: Define Subst Example,  Next: Define Subst Pattern Matching,  Up: Define Subst
  
! 17.22.1 ‘define_subst’ Example
  ------------------------------
  
! To illustrate how ‘define_subst’ works, let us examine a simple template
  transformation.
  
   Suppose there are two kinds of instructions: one that touches flags and
  the other that does not.  The instructions of the second type could be
! generated with the following ‘define_subst’:
  
       (define_subst "add_clobber_subst"
         [(set (match_operand:SI 0 "" "")
*************** generated with the following 'define_sub
*** 32556,32566 ****
               (match_dup 1))
          (clobber (reg:CC FLAGS_REG))])
  
!  This 'define_subst' can be applied to any RTL pattern containing 'set'
  of mode SI and generates a copy with clobber when it is applied.
  
!  Assume there is an RTL template for a 'max' instruction to be used in
! 'define_subst' mentioned above:
  
       (define_insn "maxsi"
         [(set (match_operand:SI 0 "register_operand" "=r")
--- 32557,32567 ----
               (match_dup 1))
          (clobber (reg:CC FLAGS_REG))])
  
!  This ‘define_subst’ can be applied to any RTL pattern containing ‘set’
  of mode SI and generates a copy with clobber when it is applied.
  
!  Assume there is an RTL template for a ‘max’ instruction to be used in
! ‘define_subst’ mentioned above:
  
       (define_insn "maxsi"
         [(set (match_operand:SI 0 "register_operand" "=r")
*************** of mode SI and generates a copy with clo
*** 32571,32590 ****
         "max\t{%2, %1, %0|%0, %1, %2}"
        [...])
  
!  To mark the RTL template for 'define_subst' application,
  subst-attributes are used.  They should be declared in advance:
  
       (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
  
!  Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is
! the name of the corresponding 'define_subst', the third argument
! ('_noclobber') is the attribute value that would be substituted into the
  unchanged version of the source RTL template, and the last argument
! ('_clobber') is the value that would be substituted into the second,
  transformed, version of the RTL template.
  
   Once the subst-attribute has been defined, it should be used in RTL
! templates which need to be processed by the 'define_subst'.  So, the
  original RTL template should be changed:
  
       (define_insn "maxsi<add_clobber_name>"
--- 32572,32591 ----
         "max\t{%2, %1, %0|%0, %1, %2}"
        [...])
  
!  To mark the RTL template for ‘define_subst’ application,
  subst-attributes are used.  They should be declared in advance:
  
       (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
  
!  Here ‘add_clobber_name’ is the attribute name, ‘add_clobber_subst’ is
! the name of the corresponding ‘define_subst’, the third argument
! (‘_noclobber’) is the attribute value that would be substituted into the
  unchanged version of the source RTL template, and the last argument
! (‘_clobber’) is the value that would be substituted into the second,
  transformed, version of the RTL template.
  
   Once the subst-attribute has been defined, it should be used in RTL
! templates which need to be processed by the ‘define_subst’.  So, the
  original RTL template should be changed:
  
       (define_insn "maxsi<add_clobber_name>"
*************** original RTL template should be changed:
*** 32596,32602 ****
         "max\t{%2, %1, %0|%0, %1, %2}"
        [...])
  
!  The result of the 'define_subst' usage would look like the following:
  
       (define_insn "maxsi_noclobber"
         [(set (match_operand:SI 0 "register_operand" "=r")
--- 32597,32603 ----
         "max\t{%2, %1, %0|%0, %1, %2}"
        [...])
  
!  The result of the ‘define_subst’ usage would look like the following:
  
       (define_insn "maxsi_noclobber"
         [(set (match_operand:SI 0 "register_operand" "=r")
*************** original RTL template should be changed:
*** 32619,32688 ****
  
  File: gccint.info,  Node: Define Subst Pattern Matching,  Next: Define Subst Output Template,  Prev: Define Subst Example,  Up: Define Subst
  
! 17.22.2 Pattern Matching in 'define_subst'
  ------------------------------------------
  
! All expressions, allowed in 'define_insn' or 'define_expand', are
! allowed in the input-template of 'define_subst', except 'match_par_dup',
! 'match_scratch', 'match_parallel'.  The meanings of expressions in the
  input-template were changed:
  
!  'match_operand' matches any expression (possibly, a subtree in
! RTL-template), if modes of the 'match_operand' and this expression are
! the same, or mode of the 'match_operand' is 'VOIDmode', or this
! expression is 'match_dup', 'match_op_dup'.  If the expression is
! 'match_operand' too, and predicate of 'match_operand' from the input
  pattern is not empty, then the predicates are compared.  That can be
  used for more accurate filtering of accepted RTL-templates.
  
!  'match_operator' matches common operators (like 'plus', 'minus'),
! 'unspec', 'unspec_volatile' operators and 'match_operator's from the
! original pattern if the modes match and 'match_operator' from the input
  pattern has the same number of operands as the operator from the
  original pattern.
  
  
  File: gccint.info,  Node: Define Subst Output Template,  Prev: Define Subst Pattern Matching,  Up: Define Subst
  
! 17.22.3 Generation of output template in 'define_subst'
  -------------------------------------------------------
  
! If all necessary checks for 'define_subst' application pass, a new
  RTL-pattern, based on the output-template, is created to replace the old
  template.  Like in input-patterns, meanings of some RTL expressions are
! changed when they are used in output-patterns of a 'define_subst'.
! Thus, 'match_dup' is used for copying the whole expression from the
! original pattern, which matched corresponding 'match_operand' from the
  input pattern.
  
!  'match_dup N' is used in the output template to be replaced with the
! expression from the original pattern, which matched 'match_operand N'
! from the input pattern.  As a consequence, 'match_dup' cannot be used to
! point to 'match_operand's from the output pattern, it should always
! refer to a 'match_operand' from the input pattern.  If a 'match_dup N'
  occurs more than once in the output template, its first occurrence is
  replaced with the expression from the original pattern, and the
! subsequent expressions are replaced with 'match_dup N', i.e., a
  reference to the first expression.
  
   In the output template one can refer to the expressions from the
  original pattern and create new ones.  For instance, some operands could
! be added by means of standard 'match_operand'.
  
!  After replacing 'match_dup' with some RTL-subtree from the original
! pattern, it could happen that several 'match_operand's in the output
  pattern have the same indexes.  It is unknown, how many and what indexes
! would be used in the expression which would replace 'match_dup', so such
  conflicts in indexes are inevitable.  To overcome this issue,
! 'match_operands' and 'match_operators', which were introduced into the
! output pattern, are renumerated when all 'match_dup's are replaced.
  
!  Number of alternatives in 'match_operand's introduced into the output
! template 'M' could differ from the number of alternatives in the
! original pattern 'N', so in the resultant pattern there would be 'N*M'
  alternatives.  Thus, constraints from the original pattern would be
! duplicated 'N' times, constraints from the output pattern would be
! duplicated 'M' times, producing all possible combinations.
  
  
  File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Define Subst,  Up: Machine Desc
--- 32620,32689 ----
  
  File: gccint.info,  Node: Define Subst Pattern Matching,  Next: Define Subst Output Template,  Prev: Define Subst Example,  Up: Define Subst
  
! 17.22.2 Pattern Matching in ‘define_subst’
  ------------------------------------------
  
! All expressions, allowed in ‘define_insn’ or ‘define_expand’, are
! allowed in the input-template of ‘define_subst’, except ‘match_par_dup’,
! ‘match_scratch’, ‘match_parallel’.  The meanings of expressions in the
  input-template were changed:
  
!  ‘match_operand’ matches any expression (possibly, a subtree in
! RTL-template), if modes of the ‘match_operand’ and this expression are
! the same, or mode of the ‘match_operand’ is ‘VOIDmode’, or this
! expression is ‘match_dup’, ‘match_op_dup’.  If the expression is
! ‘match_operand’ too, and predicate of ‘match_operand’ from the input
  pattern is not empty, then the predicates are compared.  That can be
  used for more accurate filtering of accepted RTL-templates.
  
!  ‘match_operator’ matches common operators (like ‘plus’, ‘minus’),
! ‘unspec’, ‘unspec_volatile’ operators and ‘match_operator’s from the
! original pattern if the modes match and ‘match_operator’ from the input
  pattern has the same number of operands as the operator from the
  original pattern.
  
  
  File: gccint.info,  Node: Define Subst Output Template,  Prev: Define Subst Pattern Matching,  Up: Define Subst
  
! 17.22.3 Generation of output template in ‘define_subst’
  -------------------------------------------------------
  
! If all necessary checks for ‘define_subst’ application pass, a new
  RTL-pattern, based on the output-template, is created to replace the old
  template.  Like in input-patterns, meanings of some RTL expressions are
! changed when they are used in output-patterns of a ‘define_subst’.
! Thus, ‘match_dup’ is used for copying the whole expression from the
! original pattern, which matched corresponding ‘match_operand’ from the
  input pattern.
  
!  ‘match_dup N’ is used in the output template to be replaced with the
! expression from the original pattern, which matched ‘match_operand N’
! from the input pattern.  As a consequence, ‘match_dup’ cannot be used to
! point to ‘match_operand’s from the output pattern, it should always
! refer to a ‘match_operand’ from the input pattern.  If a ‘match_dup N’
  occurs more than once in the output template, its first occurrence is
  replaced with the expression from the original pattern, and the
! subsequent expressions are replaced with ‘match_dup N’, i.e., a
  reference to the first expression.
  
   In the output template one can refer to the expressions from the
  original pattern and create new ones.  For instance, some operands could
! be added by means of standard ‘match_operand’.
  
!  After replacing ‘match_dup’ with some RTL-subtree from the original
! pattern, it could happen that several ‘match_operand’s in the output
  pattern have the same indexes.  It is unknown, how many and what indexes
! would be used in the expression which would replace ‘match_dup’, so such
  conflicts in indexes are inevitable.  To overcome this issue,
! ‘match_operands’ and ‘match_operators’, which were introduced into the
! output pattern, are renumerated when all ‘match_dup’s are replaced.
  
!  Number of alternatives in ‘match_operand’s introduced into the output
! template ‘M’ could differ from the number of alternatives in the
! original pattern ‘N’, so in the resultant pattern there would be ‘N*M’
  alternatives.  Thus, constraints from the original pattern would be
! duplicated ‘N’ times, constraints from the output pattern would be
! duplicated ‘M’ times, producing all possible combinations.
  
  
  File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Define Subst,  Up: Machine Desc
*************** File: gccint.info,  Node: Constant Defin
*** 32693,32703 ****
  Using literal constants inside instruction patterns reduces legibility
  and can be a maintenance problem.
  
!  To overcome this problem, you may use the 'define_constants'
  expression.  It contains a vector of name-value pairs.  From that point
  on, wherever any of the names appears in the MD file, it is as if the
  corresponding value had been written instead.  You may use
! 'define_constants' multiple times; each appearance adds more constants
  to the table.  It is an error to redefine a constant with a different
  value.
  
--- 32694,32704 ----
  Using literal constants inside instruction patterns reduces legibility
  and can be a maintenance problem.
  
!  To overcome this problem, you may use the ‘define_constants’
  expression.  It contains a vector of name-value pairs.  From that point
  on, wherever any of the names appears in the MD file, it is as if the
  corresponding value had been written instead.  You may use
! ‘define_constants’ multiple times; each appearance adds more constants
  to the table.  It is an error to redefine a constant with a different
  value.
  
*************** value.
*** 32734,32740 ****
  in the insn-codes.h header file as #defines.
  
   You can also use the machine description file to define enumerations.
! Like the constants defined by 'define_constant', these enumerations are
  visible to both the machine description file and the main C code.
  
   The syntax is as follows:
--- 32735,32741 ----
  in the insn-codes.h header file as #defines.
  
   You can also use the machine description file to define enumerations.
! Like the constants defined by ‘define_constant’, these enumerations are
  visible to both the machine description file and the main C code.
  
   The syntax is as follows:
*************** visible to both the machine description
*** 32749,32755 ****
       ])
  
   This definition causes the equivalent of the following C code to appear
! in 'insn-constants.h':
  
       enum NAME {
         VALUE0 = 0,
--- 32750,32756 ----
       ])
  
   This definition causes the equivalent of the following C code to appear
! in ‘insn-constants.h’:
  
       enum NAME {
         VALUE0 = 0,
*************** like.  The above example is directly equ
*** 32779,32812 ****
       (define_c_enum "NAME" [VALUEN])
  
   Splitting the enumeration helps to improve the modularity of each
! individual '.md' file.  For example, if a port defines its
! synchronization instructions in a separate 'sync.md' file, it is
  convenient to define all synchronization-specific enumeration values in
! 'sync.md' rather than in the main '.md' file.
  
   Some enumeration names have special significance to GCC:
  
! 'unspecv'
!      If an enumeration called 'unspecv' is defined, GCC will use it when
!      printing out 'unspec_volatile' expressions.  For example:
  
            (define_c_enum "unspecv" [
              UNSPECV_BLOCKAGE
            ])
  
!      causes GCC to print '(unspec_volatile ... 0)' as:
  
            (unspec_volatile ... UNSPECV_BLOCKAGE)
  
! 'unspec'
!      If an enumeration called 'unspec' is defined, GCC will use it when
!      printing out 'unspec' expressions.  GCC will also use it when
!      printing out 'unspec_volatile' expressions unless an 'unspecv'
       enumeration is also defined.  You can therefore decide whether to
       keep separate enumerations for volatile and non-volatile
       expressions or whether to use the same enumeration for both.
  
!  Another way of defining an enumeration is to use 'define_enum':
  
       (define_enum "NAME" [
         VALUE0
--- 32780,32813 ----
       (define_c_enum "NAME" [VALUEN])
  
   Splitting the enumeration helps to improve the modularity of each
! individual ‘.md’ file.  For example, if a port defines its
! synchronization instructions in a separate ‘sync.md’ file, it is
  convenient to define all synchronization-specific enumeration values in
! ‘sync.md’ rather than in the main ‘.md’ file.
  
   Some enumeration names have special significance to GCC:
  
! ‘unspecv’
!      If an enumeration called ‘unspecv’ is defined, GCC will use it when
!      printing out ‘unspec_volatile’ expressions.  For example:
  
            (define_c_enum "unspecv" [
              UNSPECV_BLOCKAGE
            ])
  
!      causes GCC to print ‘(unspec_volatile ... 0)’ as:
  
            (unspec_volatile ... UNSPECV_BLOCKAGE)
  
! ‘unspec’
!      If an enumeration called ‘unspec’ is defined, GCC will use it when
!      printing out ‘unspec’ expressions.  GCC will also use it when
!      printing out ‘unspec_volatile’ expressions unless an ‘unspecv’
       enumeration is also defined.  You can therefore decide whether to
       keep separate enumerations for volatile and non-volatile
       expressions or whether to use the same enumeration for both.
  
!  Another way of defining an enumeration is to use ‘define_enum’:
  
       (define_enum "NAME" [
         VALUE0
*************** convenient to define all synchronization
*** 32825,32831 ****
       ])
  
   where CVALUEI is the capitalized form of VALUEI.  However, unlike
! 'define_c_enum', the enumerations defined by 'define_enum' can be used
  in attribute specifications (*note define_enum_attr::).
  
  
--- 32826,32832 ----
       ])
  
   where CVALUEI is the capitalized form of VALUEI.  However, unlike
! ‘define_c_enum’, the enumerations defined by ‘define_enum’ can be used
  in attribute specifications (*note define_enum_attr::).
  
  
*************** File: gccint.info,  Node: Mode Iterators
*** 32855,32871 ****
  Ports often need to define similar patterns for two or more different
  modes.  For example:
  
!    * If a processor has hardware support for both single and double
!      floating-point arithmetic, the 'SFmode' patterns tend to be very
!      similar to the 'DFmode' ones.
  
!    * If a port uses 'SImode' pointers in one configuration and 'DImode'
!      pointers in another, it will usually have very similar 'SImode' and
!      'DImode' patterns for manipulating pointers.
  
!  Mode iterators allow several patterns to be instantiated from one '.md'
  file template.  They can be used with any type of rtx-based construct,
! such as a 'define_insn', 'define_split', or 'define_peephole2'.
  
  * Menu:
  
--- 32856,32872 ----
  Ports often need to define similar patterns for two or more different
  modes.  For example:
  
!    • If a processor has hardware support for both single and double
!      floating-point arithmetic, the ‘SFmode’ patterns tend to be very
!      similar to the ‘DFmode’ ones.
  
!    • If a port uses ‘SImode’ pointers in one configuration and ‘DImode’
!      pointers in another, it will usually have very similar ‘SImode’ and
!      ‘DImode’ patterns for manipulating pointers.
  
!  Mode iterators allow several patterns to be instantiated from one ‘.md’
  file template.  They can be used with any type of rtx-based construct,
! such as a ‘define_insn’, ‘define_split’, or ‘define_peephole2’.
  
  * Menu:
  
*************** The syntax for defining a mode iterator
*** 32883,32911 ****
  
       (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
  
!  This allows subsequent '.md' file constructs to use the mode suffix
! ':NAME'.  Every construct that does so will be expanded N times, once
! with every use of ':NAME' replaced by ':MODE1', once with every use
! replaced by ':MODE2', and so on.  In the expansion for a particular
  MODEI, every C condition will also require that CONDI be true.
  
   For example:
  
       (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
  
!  defines a new mode suffix ':P'.  Every construct that uses ':P' will be
! expanded twice, once with every ':P' replaced by ':SI' and once with
! every ':P' replaced by ':DI'.  The ':SI' version will only apply if
! 'Pmode == SImode' and the ':DI' version will only apply if 'Pmode ==
! DImode'.
  
!  As with other '.md' conditions, an empty string is treated as "always
! true".  '(MODE "")' can also be abbreviated to 'MODE'.  For example:
  
       (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
  
!  means that the ':DI' expansion only applies if 'TARGET_64BIT' but that
! the ':SI' expansion has no such constraint.
  
   It is also possible to include iterators in other iterators.  For
  example:
--- 32884,32912 ----
  
       (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
  
!  This allows subsequent ‘.md’ file constructs to use the mode suffix
! ‘:NAME’.  Every construct that does so will be expanded N times, once
! with every use of ‘:NAME’ replaced by ‘:MODE1’, once with every use
! replaced by ‘:MODE2’, and so on.  In the expansion for a particular
  MODEI, every C condition will also require that CONDI be true.
  
   For example:
  
       (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
  
!  defines a new mode suffix ‘:P’.  Every construct that uses ‘:P’ will be
! expanded twice, once with every ‘:P’ replaced by ‘:SI’ and once with
! every ‘:P’ replaced by ‘:DI’.  The ‘:SI’ version will only apply if
! ‘Pmode == SImode’ and the ‘:DI’ version will only apply if ‘Pmode ==
! DImode’.
  
!  As with other ‘.md’ conditions, an empty string is treated as "always
! true".  ‘(MODE "")’ can also be abbreviated to ‘MODE’.  For example:
  
       (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
  
!  means that the ‘:DI’ expansion only applies if ‘TARGET_64BIT’ but that
! the ‘:SI’ expansion has no such constraint.
  
   It is also possible to include iterators in other iterators.  For
  example:
*************** example:
*** 32914,32923 ****
       (define_mode_iterator VF [V8HF V4SF (V2DF "TARGET_DOUBLE")])
       (define_mode_iterator V [VI (VF "TARGET_FLOAT")])
  
!  makes ':V' iterate over the modes in 'VI' and the modes in 'VF'.  When
! a construct uses ':V', the 'V8HF' and 'V4SF' expansions require
! 'TARGET_FLOAT' while the 'V2DF' expansion requires 'TARGET_DOUBLE &&
! TARGET_FLOAT'.
  
   Iterators are applied in the order they are defined.  This can be
  significant if two iterators are used in a construct that requires
--- 32915,32924 ----
       (define_mode_iterator VF [V8HF V4SF (V2DF "TARGET_DOUBLE")])
       (define_mode_iterator V [VI (VF "TARGET_FLOAT")])
  
!  makes ‘:V’ iterate over the modes in ‘VI’ and the modes in ‘VF’.  When
! a construct uses ‘:V’, the ‘V8HF’ and ‘V4SF’ expansions require
! ‘TARGET_FLOAT’ while the ‘V2DF’ expansion requires ‘TARGET_DOUBLE &&
! TARGET_FLOAT’.
  
   Iterators are applied in the order they are defined.  This can be
  significant if two iterators are used in a construct that requires
*************** File: gccint.info,  Node: Substitutions,
*** 32929,32952 ****
  17.24.1.2 Substitution in Mode Iterators
  ........................................
  
! If an '.md' file construct uses mode iterators, each version of the
  construct will often need slightly different strings or modes.  For
  example:
  
!    * When a 'define_expand' defines several 'addM3' patterns (*note
       Standard Names::), each expander will need to use the appropriate
       mode name for M.
  
!    * When a 'define_insn' defines several instruction patterns, each
       instruction will often use a different assembler mnemonic.
  
!    * When a 'define_insn' requires operands with different modes, using
       an iterator for one of the operand modes usually requires a
       specific mode for the other operand(s).
  
   GCC supports such variations through a system of "mode attributes".
! There are two standard attributes: 'mode', which is the name of the mode
! in lower case, and 'MODE', which is the same thing in upper case.  You
  can define other attributes using:
  
       (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
--- 32930,32953 ----
  17.24.1.2 Substitution in Mode Iterators
  ........................................
  
! If an ‘.md’ file construct uses mode iterators, each version of the
  construct will often need slightly different strings or modes.  For
  example:
  
!    • When a ‘define_expand’ defines several ‘addM3’ patterns (*note
       Standard Names::), each expander will need to use the appropriate
       mode name for M.
  
!    • When a ‘define_insn’ defines several instruction patterns, each
       instruction will often use a different assembler mnemonic.
  
!    • When a ‘define_insn’ requires operands with different modes, using
       an iterator for one of the operand modes usually requires a
       specific mode for the other operand(s).
  
   GCC supports such variations through a system of "mode attributes".
! There are two standard attributes: ‘mode’, which is the name of the mode
! in lower case, and ‘MODE’, which is the same thing in upper case.  You
  can define other attributes using:
  
       (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
*************** can define other attributes using:
*** 32955,32973 ****
  associated with MODEI.
  
   When GCC replaces some :ITERATOR with :MODE, it will scan each string
! and mode in the pattern for sequences of the form '<ITERATOR:ATTR>',
  where ATTR is the name of a mode attribute.  If the attribute is defined
! for MODE, the whole '<...>' sequence will be replaced by the appropriate
  attribute value.
  
!  For example, suppose an '.md' file has:
  
       (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
       (define_mode_attr load [(SI "lw") (DI "ld")])
  
!  If one of the patterns that uses ':P' contains the string
! '"<P:load>\t%0,%1"', the 'SI' version of that pattern will use
! '"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'.
  
   Here is an example of using an attribute for a mode:
  
--- 32956,32974 ----
  associated with MODEI.
  
   When GCC replaces some :ITERATOR with :MODE, it will scan each string
! and mode in the pattern for sequences of the form ‘<ITERATOR:ATTR>’,
  where ATTR is the name of a mode attribute.  If the attribute is defined
! for MODE, the whole ‘<...>’ sequence will be replaced by the appropriate
  attribute value.
  
!  For example, suppose an ‘.md’ file has:
  
       (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
       (define_mode_attr load [(SI "lw") (DI "ld")])
  
!  If one of the patterns that uses ‘:P’ contains the string
! ‘"<P:load>\t%0,%1"’, the ‘SI’ version of that pattern will use
! ‘"lw\t%0,%1"’ and the ‘DI’ version will use ‘"ld\t%0,%1"’.
  
   Here is an example of using an attribute for a mode:
  
*************** attribute value.
*** 32976,32982 ****
       (define_insn ...
         (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
  
!  The 'ITERATOR:' prefix may be omitted, in which case the substitution
  will be attempted for every iterator expansion.
  
  
--- 32977,32983 ----
       (define_insn ...
         (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
  
!  The ‘ITERATOR:’ prefix may be omitted, in which case the substitution
  will be attempted for every iterator expansion.
  
  
*************** and attributes (among others):
*** 32991,32997 ****
       (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
       (define_mode_attr d [(SI "") (DI "d")])
  
!  and uses the following template to define both 'subsi3' and 'subdi3':
  
       (define_insn "sub<mode>3"
         [(set (match_operand:GPR 0 "register_operand" "=d")
--- 32992,32998 ----
       (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
       (define_mode_attr d [(SI "") (DI "d")])
  
!  and uses the following template to define both ‘subsi3’ and ‘subdi3’:
  
       (define_insn "sub<mode>3"
         [(set (match_operand:GPR 0 "register_operand" "=d")
*************** times, once with all uses of NAME replac
*** 33044,33058 ****
  replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
  
   It is possible to define attributes for codes as well as for modes.
! There are two standard code attributes: 'code', the name of the code in
! lower case, and 'CODE', the name of the code in upper case.  Other
  attributes are defined using:
  
       (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
  
   Instruction patterns can use code attributes as rtx codes, which can be
  useful if two sets of codes act in tandem.  For example, the following
! 'define_insn' defines two patterns, one calculating a signed absolute
  difference and another calculating an unsigned absolute difference:
  
       (define_code_iterator any_max [smax umax])
--- 33045,33059 ----
  replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
  
   It is possible to define attributes for codes as well as for modes.
! There are two standard code attributes: ‘code’, the name of the code in
! lower case, and ‘CODE’, the name of the code in upper case.  Other
  attributes are defined using:
  
       (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
  
   Instruction patterns can use code attributes as rtx codes, which can be
  useful if two sets of codes act in tandem.  For example, the following
! ‘define_insn’ defines two patterns, one calculating a signed absolute
  difference and another calculating an unsigned absolute difference:
  
       (define_code_iterator any_max [smax umax])
*************** difference and another calculating an un
*** 33064,33072 ****
                         (<paired_min>:SI (match_dup 1) (match_dup 2))))]
         ...)
  
!  The signed version of the instruction uses 'smax' and 'smin' while the
! unsigned version uses 'umax' and 'umin'.  There are no versions that
! pair 'smax' with 'umin' or 'umax' with 'smin'.
  
   Here's an example of code iterators in action, taken from the MIPS
  port:
--- 33065,33073 ----
                         (<paired_min>:SI (match_dup 1) (match_dup 2))))]
         ...)
  
!  The signed version of the instruction uses ‘smax’ and ‘smin’ while the
! unsigned version uses ‘umax’ and ‘umin’.  There are no versions that
! pair ‘smax’ with ‘umin’ or ‘umax’ with ‘smin’.
  
   Here's an example of code iterators in action, taken from the MIPS
  port:
*************** Iterators::.
*** 33130,33137 ****
   defines a pseudo integer constant NAME that can be instantiated as INTI
  if condition CONDI is true.  Int iterators can appear in only those rtx
  fields that have 'i', 'n', 'w', or 'p' as the specifier.  This means
! that each INT has to be a constant defined using 'define_constant' or
! 'define_c_enum'.
  
   As with mode and code iterators, each pattern that uses NAME will be
  expanded N times, once with all uses of NAME replaced by INT1, once with
--- 33131,33138 ----
   defines a pseudo integer constant NAME that can be instantiated as INTI
  if condition CONDI is true.  Int iterators can appear in only those rtx
  fields that have 'i', 'n', 'w', or 'p' as the specifier.  This means
! that each INT has to be a constant defined using ‘define_constant’ or
! ‘define_c_enum’.
  
   As with mode and code iterators, each pattern that uses NAME will be
  expanded N times, once with all uses of NAME replaced by INT1, once with
*************** modes.  Attributes are defined using:
*** 33143,33149 ****
       (define_int_attr ATTR_NAME [(INT1 "VALUE1") ... (INTN "VALUEN")])
  
   In additon to these user-defined attributes, it is possible to use
! '<NAME>' to refer to the current expansion of iterator NAME (such as
  INT1, INT2, and so on).
  
   Here's an example of int iterators in action, taken from the ARM port:
--- 33144,33150 ----
       (define_int_attr ATTR_NAME [(INT1 "VALUE1") ... (INTN "VALUEN")])
  
   In additon to these user-defined attributes, it is possible to use
! ‘<NAME>’ to refer to the current expansion of iterator NAME (such as
  INT1, INT2, and so on).
  
   Here's an example of int iterators in action, taken from the ARM port:
*************** used in RTL-pattern.
*** 33201,33214 ****
   Subst iterators transform templates in the following way: the templates
  are duplicated, the subst-attributes in these templates are replaced
  with the corresponding values, and a new attribute is implicitly added
! to the given 'define_insn'/'define_expand'.  The name of the added
! attribute matches the name of 'define_subst'.  Such attributes are
! declared implicitly, and it is not allowed to have a 'define_attr' named
! as a 'define_subst'.
  
!  Each subst iterator is linked to a 'define_subst'.  It is declared
  implicitly by the first appearance of the corresponding
! 'define_subst_attr', and it is not allowed to define it explicitly.
  
   Declarations of subst-attributes have the following syntax:
  
--- 33202,33215 ----
   Subst iterators transform templates in the following way: the templates
  are duplicated, the subst-attributes in these templates are replaced
  with the corresponding values, and a new attribute is implicitly added
! to the given ‘define_insn’/‘define_expand’.  The name of the added
! attribute matches the name of ‘define_subst’.  Such attributes are
! declared implicitly, and it is not allowed to have a ‘define_attr’ named
! as a ‘define_subst’.
  
!  Each subst iterator is linked to a ‘define_subst’.  It is declared
  implicitly by the first appearance of the corresponding
! ‘define_subst_attr’, and it is not allowed to define it explicitly.
  
   Declarations of subst-attributes have the following syntax:
  
*************** implicitly by the first appearance of th
*** 33220,33226 ****
   NAME is a string with which the given subst-attribute could be referred
  to.
  
!  SUBST-NAME shows which 'define_subst' should be applied to an
  RTL-template if the given subst-attribute is present in the
  RTL-template.
  
--- 33221,33227 ----
   NAME is a string with which the given subst-attribute could be referred
  to.
  
!  SUBST-NAME shows which ‘define_subst’ should be applied to an
  RTL-template if the given subst-attribute is present in the
  RTL-template.
  
*************** File: gccint.info,  Node: Parameterized
*** 33238,33244 ****
  
  Ports sometimes need to apply iterators using C++ code, in order to get
  the code or RTL pattern for a specific instruction.  For example,
! suppose we have the 'neon_vq<absneg><mode>' pattern given above:
  
       (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
  
--- 33239,33245 ----
  
  Ports sometimes need to apply iterators using C++ code, in order to get
  the code or RTL pattern for a specific instruction.  For example,
! suppose we have the ‘neon_vq<absneg><mode>’ pattern given above:
  
       (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
  
*************** suppose we have the 'neon_vq<absneg><mod
*** 33252,33287 ****
         ...
       )
  
!  A port might need to generate this pattern for a variable 'QABSNEG'
! value and a variable 'VDQIW' mode.  There are two ways of doing this.
  The first is to build the rtx for the pattern directly from C++ code;
  this is a valid technique and avoids any risk of combinatorial
  explosion.  The second is to prefix the instruction name with the
! special character '@', which tells GCC to generate the four additional
  functions below.  In each case, NAME is the name of the instruction
! without the leading '@' character, without the '<...>' placeholders, and
! with any underscore before a '<...>' placeholder removed if keeping it
  would lead to a double or trailing underscore.
  
! 'insn_code maybe_code_for_NAME (I1, I2, ...)'
!      See whether replacing the first '<...>' placeholder with iterator
       value I1, the second with iterator value I2, and so on, gives a
       valid instruction.  Return its code if so, otherwise return
!      'CODE_FOR_nothing'.
  
! 'insn_code code_for_NAME (I1, I2, ...)'
       Same, but abort the compiler if the requested instruction does not
       exist.
  
! 'rtx maybe_gen_NAME (I1, I2, ..., OP0, OP1, ...)'
       Check for a valid instruction in the same way as
!      'maybe_code_for_NAME'.  If the instruction exists, generate an
       instance of it using the operand values given by OP0, OP1, and so
       on, otherwise return null.
  
! 'rtx gen_NAME (I1, I2, ..., OP0, OP1, ...)'
       Same, but abort the compiler if the requested instruction does not
!      exist, or if the instruction generator invoked the 'FAIL' macro.
  
   For example, changing the pattern above to:
  
--- 33253,33288 ----
         ...
       )
  
!  A port might need to generate this pattern for a variable ‘QABSNEG’
! value and a variable ‘VDQIW’ mode.  There are two ways of doing this.
  The first is to build the rtx for the pattern directly from C++ code;
  this is a valid technique and avoids any risk of combinatorial
  explosion.  The second is to prefix the instruction name with the
! special character ‘@’, which tells GCC to generate the four additional
  functions below.  In each case, NAME is the name of the instruction
! without the leading ‘@’ character, without the ‘<...>’ placeholders, and
! with any underscore before a ‘<...>’ placeholder removed if keeping it
  would lead to a double or trailing underscore.
  
! ‘insn_code maybe_code_for_NAME (I1, I2, ...)’
!      See whether replacing the first ‘<...>’ placeholder with iterator
       value I1, the second with iterator value I2, and so on, gives a
       valid instruction.  Return its code if so, otherwise return
!      ‘CODE_FOR_nothing’.
  
! ‘insn_code code_for_NAME (I1, I2, ...)’
       Same, but abort the compiler if the requested instruction does not
       exist.
  
! ‘rtx maybe_gen_NAME (I1, I2, ..., OP0, OP1, ...)’
       Check for a valid instruction in the same way as
!      ‘maybe_code_for_NAME’.  If the instruction exists, generate an
       instance of it using the operand values given by OP0, OP1, and so
       on, otherwise return null.
  
! ‘rtx gen_NAME (I1, I2, ..., OP0, OP1, ...)’
       Same, but abort the compiler if the requested instruction does not
!      exist, or if the instruction generator invoked the ‘FAIL’ macro.
  
   For example, changing the pattern above to:
  
*************** generate the four functions below:
*** 33301,33310 ****
       rtx maybe_gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
       rtx gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
  
!  Calling 'code_for_neon_vq (UNSPEC_VQABS, V8QImode)' would then give
! 'CODE_FOR_neon_vqabsv8qi'.
  
!  It is possible to have multiple '@' patterns with the same name and
  same types of iterator.  For example:
  
       (define_insn "@some_arithmetic_op<mode>"
--- 33302,33311 ----
       rtx maybe_gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
       rtx gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
  
!  Calling ‘code_for_neon_vq (UNSPEC_VQABS, V8QImode)’ would then give
! ‘CODE_FOR_neon_vqabsv8qi’.
  
!  It is possible to have multiple ‘@’ patterns with the same name and
  same types of iterator.  For example:
  
       (define_insn "@some_arithmetic_op<mode>"
*************** same types of iterator.  For example:
*** 33318,33332 ****
       )
  
   would produce a single set of functions that handles both
! 'INTEGER_MODES' and 'FLOAT_MODES'.
  
!  It is also possible for these '@' patterns to have different numbers of
  operands from each other.  For example, patterns with a binary rtl code
  might take three operands (one output and two inputs) while patterns
  with a ternary rtl code might take four operands (one output and three
! inputs).  This combination would produce separate 'maybe_gen_NAME' and
! 'gen_NAME' functions for each operand count, but it would still produce
! a single 'maybe_code_for_NAME' and a single 'code_for_NAME'.
  
  
  File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
--- 33319,33333 ----
       )
  
   would produce a single set of functions that handles both
! ‘INTEGER_MODES’ and ‘FLOAT_MODES’.
  
!  It is also possible for these ‘@’ patterns to have different numbers of
  operands from each other.  For example, patterns with a binary rtl code
  might take three operands (one output and two inputs) while patterns
  with a ternary rtl code might take four operands (one output and three
! inputs).  This combination would produce separate ‘maybe_gen_NAME’ and
! ‘gen_NAME’ functions for each operand count, but it would still produce
! a single ‘maybe_code_for_NAME’ and a single ‘code_for_NAME’.
  
  
  File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
*************** File: gccint.info,  Node: Target Macros,
*** 33334,33357 ****
  18 Target Description Macros and Functions
  ******************************************
  
! In addition to the file 'MACHINE.md', a machine description includes a C
! header file conventionally given the name 'MACHINE.h' and a C source
! file named 'MACHINE.c'.  The header file defines numerous macros that
  convey the information about the target machine that does not fit into
! the scheme of the '.md' file.  The file 'tm.h' should be a link to
! 'MACHINE.h'.  The header file 'config.h' includes 'tm.h' and most
! compiler source files include 'config.h'.  The source file defines a
! variable 'targetm', which is a structure containing pointers to
! functions and data relating to the target machine.  'MACHINE.c' should
  also contain their definitions, if they are not defined elsewhere in
! GCC, and other functions called through the macros defined in the '.h'
  file.
  
  * Menu:
  
! * Target Structure::    The 'targetm' variable.
  * Driver::              Controlling how the driver runs the compilation passes.
! * Run-time Target::     Defining '-m' options like '-m68000' and '-m68020'.
  * Per-Function Data::   Defining data structures for per-function information.
  * Storage Layout::      Defining sizes and alignments of data.
  * Type Layout::         Defining sizes and properties of basic user data types.
--- 33335,33358 ----
  18 Target Description Macros and Functions
  ******************************************
  
! In addition to the file ‘MACHINE.md’, a machine description includes a C
! header file conventionally given the name ‘MACHINE.h’ and a C source
! file named ‘MACHINE.c’.  The header file defines numerous macros that
  convey the information about the target machine that does not fit into
! the scheme of the ‘.md’ file.  The file ‘tm.h’ should be a link to
! ‘MACHINE.h’.  The header file ‘config.h’ includes ‘tm.h’ and most
! compiler source files include ‘config.h’.  The source file defines a
! variable ‘targetm’, which is a structure containing pointers to
! functions and data relating to the target machine.  ‘MACHINE.c’ should
  also contain their definitions, if they are not defined elsewhere in
! GCC, and other functions called through the macros defined in the ‘.h’
  file.
  
  * Menu:
  
! * Target Structure::    The ‘targetm’ variable.
  * Driver::              Controlling how the driver runs the compilation passes.
! * Run-time Target::     Defining ‘-m’ options like ‘-m68000’ and ‘-m68020’.
  * Per-Function Data::   Defining data structures for per-function information.
  * Storage Layout::      Defining sizes and alignments of data.
  * Type Layout::         Defining sizes and properties of basic user data types.
*************** file.
*** 33362,33368 ****
  * Trampolines::         Code set up at run time to enter a nested function.
  * Library Calls::       Controlling how library routines are implicitly called.
  * Addressing Modes::    Defining addressing modes valid for memory operands.
! * Anchored Addresses::  Defining how '-fsection-anchors' should work.
  * Condition Code::      Defining how insns update the condition code.
  * Costs::               Defining relative costs of different operations.
  * Scheduling::          Adjusting the behavior of the instruction scheduler.
--- 33363,33369 ----
  * Trampolines::         Code set up at run time to enter a nested function.
  * Library Calls::       Controlling how library routines are implicitly called.
  * Addressing Modes::    Defining addressing modes valid for memory operands.
! * Anchored Addresses::  Defining how ‘-fsection-anchors’ should work.
  * Condition Code::      Defining how insns update the condition code.
  * Costs::               Defining relative costs of different operations.
  * Scheduling::          Adjusting the behavior of the instruction scheduler.
*************** file.
*** 33372,33378 ****
  * Debugging Info::      Defining the format of debugging output.
  * Floating Point::      Handling floating point for cross-compilers.
  * Mode Switching::      Insertion of mode-switching instructions.
! * Target Attributes::   Defining target-specific uses of '__attribute__'.
  * Emulated TLS::        Emulated TLS support.
  * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
  * PCH Target::          Validity checking for precompiled headers.
--- 33373,33379 ----
  * Debugging Info::      Defining the format of debugging output.
  * Floating Point::      Handling floating point for cross-compilers.
  * Mode Switching::      Insertion of mode-switching instructions.
! * Target Attributes::   Defining target-specific uses of ‘__attribute__’.
  * Emulated TLS::        Emulated TLS support.
  * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
  * PCH Target::          Validity checking for precompiled headers.
*************** file.
*** 33385,33400 ****
  
  File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
  
! 18.1 The Global 'targetm' Variable
  ==================================
  
   -- Variable: struct gcc_target targetm
!      The target '.c' file must define the global 'targetm' variable
       which contains pointers to functions and data relating to the
!      target machine.  The variable is declared in 'target.h';
!      'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used
       to initialize the variable, and macros for the default initializers
!      for elements of the structure.  The '.c' file should override those
       macros for which the default definition is inappropriate.  For
       example:
            #include "target.h"
--- 33386,33401 ----
  
  File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
  
! 18.1 The Global ‘targetm’ Variable
  ==================================
  
   -- Variable: struct gcc_target targetm
!      The target ‘.c’ file must define the global ‘targetm’ variable
       which contains pointers to functions and data relating to the
!      target machine.  The variable is declared in ‘target.h’;
!      ‘target-def.h’ defines the macro ‘TARGET_INITIALIZER’ which is used
       to initialize the variable, and macros for the default initializers
!      for elements of the structure.  The ‘.c’ file should override those
       macros for which the default definition is inappropriate.  For
       example:
            #include "target.h"
*************** File: gccint.info,  Node: Target Structu
*** 33407,33452 ****
  
            struct gcc_target targetm = TARGET_INITIALIZER;
  
!  Where a macro should be defined in the '.c' file in this manner to form
! part of the 'targetm' structure, it is documented below as a "Target
  Hook" with a prototype.  Many macros will change in future from being
! defined in the '.h' file to being part of the 'targetm' structure.
  
!  Similarly, there is a 'targetcm' variable for hooks that are specific
  to front ends for C-family languages, documented as "C Target Hook".
! This is declared in 'c-family/c-target.h', the initializer
! 'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'.  If targets
! initialize 'targetcm' themselves, they should set
! 'target_has_targetcm=yes' in 'config.gcc'; otherwise a default
  definition is used.
  
!  Similarly, there is a 'targetm_common' variable for hooks that are
  shared between the compiler driver and the compilers proper, documented
! as "Common Target Hook".  This is declared in 'common/common-target.h',
! the initializer 'TARGETM_COMMON_INITIALIZER' in
! 'common/common-target-def.h'.  If targets initialize 'targetm_common'
! themselves, they should set 'target_has_targetm_common=yes' in
! 'config.gcc'; otherwise a default definition is used.
  
!  Similarly, there is a 'targetdm' variable for hooks that are specific
  to the D language front end, documented as "D Target Hook".  This is
! declared in 'd/d-target.h', the initializer 'TARGETDM_INITIALIZER' in
! 'd/d-target-def.h'.  If targets initialize 'targetdm' themselves, they
! should set 'target_has_targetdm=yes' in 'config.gcc'; otherwise a
  default definition is used.
  
!  Similarly, there is a 'targetrustm' variable for hooks that are
  specific to the Rust language front end, documented as "Rust Target
! Hook".  This is declared in 'rust/rust-target.h', the initializer
! 'TARGETRUSTM_INITIALIZER' in 'rust/rust-target-def.h'.  If targets
! initialize 'targetrustm' themselves, they should set
! 'target_has_targetrustm=yes' in 'config.gcc'; otherwise a default
  definition is used.
  
  
  File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
  
! 18.2 Controlling the Compilation Driver, 'gcc'
  ==============================================
  
  You can control the compilation driver.
--- 33408,33453 ----
  
            struct gcc_target targetm = TARGET_INITIALIZER;
  
!  Where a macro should be defined in the ‘.c’ file in this manner to form
! part of the ‘targetm’ structure, it is documented below as a "Target
  Hook" with a prototype.  Many macros will change in future from being
! defined in the ‘.h’ file to being part of the ‘targetm’ structure.
  
!  Similarly, there is a ‘targetcm’ variable for hooks that are specific
  to front ends for C-family languages, documented as "C Target Hook".
! This is declared in ‘c-family/c-target.h’, the initializer
! ‘TARGETCM_INITIALIZER’ in ‘c-family/c-target-def.h’.  If targets
! initialize ‘targetcm’ themselves, they should set
! ‘target_has_targetcm=yes’ in ‘config.gcc’; otherwise a default
  definition is used.
  
!  Similarly, there is a ‘targetm_common’ variable for hooks that are
  shared between the compiler driver and the compilers proper, documented
! as "Common Target Hook".  This is declared in ‘common/common-target.h’,
! the initializer ‘TARGETM_COMMON_INITIALIZER’ in
! ‘common/common-target-def.h’.  If targets initialize ‘targetm_common’
! themselves, they should set ‘target_has_targetm_common=yes’ in
! ‘config.gcc’; otherwise a default definition is used.
  
!  Similarly, there is a ‘targetdm’ variable for hooks that are specific
  to the D language front end, documented as "D Target Hook".  This is
! declared in ‘d/d-target.h’, the initializer ‘TARGETDM_INITIALIZER’ in
! ‘d/d-target-def.h’.  If targets initialize ‘targetdm’ themselves, they
! should set ‘target_has_targetdm=yes’ in ‘config.gcc’; otherwise a
  default definition is used.
  
!  Similarly, there is a ‘targetrustm’ variable for hooks that are
  specific to the Rust language front end, documented as "Rust Target
! Hook".  This is declared in ‘rust/rust-target.h’, the initializer
! ‘TARGETRUSTM_INITIALIZER’ in ‘rust/rust-target-def.h’.  If targets
! initialize ‘targetrustm’ themselves, they should set
! ‘target_has_targetrustm=yes’ in ‘config.gcc’; otherwise a default
  definition is used.
  
  
  File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
  
! 18.2 Controlling the Compilation Driver, ‘gcc’
  ==============================================
  
  You can control the compilation driver.
*************** You can control the compilation driver.
*** 33456,33466 ****
       initializer for an array of strings, with no surrounding braces.
  
       The driver applies these specs to its own command line between
!      loading default 'specs' files (but not command-line specified ones)
       and choosing the multilib directory or running any subcommands.  It
       applies them in the order given, so each spec can depend on the
       options added by earlier ones.  It is also possible to remove
!      options using '%<OPTION' in the usual way.
  
       This macro can be useful when a port has several interdependent
       target options.  It provides a way of standardizing the command
--- 33457,33467 ----
       initializer for an array of strings, with no surrounding braces.
  
       The driver applies these specs to its own command line between
!      loading default ‘specs’ files (but not command-line specified ones)
       and choosing the multilib directory or running any subcommands.  It
       applies them in the order given, so each spec can depend on the
       options added by earlier ones.  It is also possible to remove
!      options using ‘%<OPTION’ in the usual way.
  
       This macro can be useful when a port has several interdependent
       target options.  It provides a way of standardizing the command
*************** You can control the compilation driver.
*** 33470,33488 ****
  
   -- Macro: OPTION_DEFAULT_SPECS
       A list of specs used to support configure-time default options
!      (i.e. '--with' options) in the driver.  It should be a suitable
       initializer for an array of structures, each containing two
       strings, without the outermost pair of surrounding braces.
  
       The first item in the pair is the name of the default.  This must
!      match the code in 'config.gcc' for the target.  The second item is
       a spec to apply if a default with this name was specified.  The
!      string '%(VALUE)' in the spec will be replaced by the value of the
       default everywhere it occurs.
  
       The driver will apply these specs to its own command line between
!      loading default 'specs' files and processing 'DRIVER_SELF_SPECS',
!      using the same mechanism as 'DRIVER_SELF_SPECS'.
  
       Do not define this macro if it does not need to do anything.
  
--- 33471,33489 ----
  
   -- Macro: OPTION_DEFAULT_SPECS
       A list of specs used to support configure-time default options
!      (i.e. ‘--with’ options) in the driver.  It should be a suitable
       initializer for an array of structures, each containing two
       strings, without the outermost pair of surrounding braces.
  
       The first item in the pair is the name of the default.  This must
!      match the code in ‘config.gcc’ for the target.  The second item is
       a spec to apply if a default with this name was specified.  The
!      string ‘%(VALUE)’ in the spec will be replaced by the value of the
       default everywhere it occurs.
  
       The driver will apply these specs to its own command line between
!      loading default ‘specs’ files and processing ‘DRIVER_SELF_SPECS’,
!      using the same mechanism as ‘DRIVER_SELF_SPECS’.
  
       Do not define this macro if it does not need to do anything.
  
*************** You can control the compilation driver.
*** 33494,33506 ****
       Do not define this macro if it does not need to do anything.
  
   -- Macro: CPLUSPLUS_CPP_SPEC
!      This macro is just like 'CPP_SPEC', but is used for C++, rather
       than C.  If you do not define this macro, then the value of
!      'CPP_SPEC' (if any) will be used instead.
  
   -- Macro: CC1_SPEC
       A C string constant that tells the GCC driver program options to
!      pass to 'cc1', 'cc1plus', 'f771', and the other language front
       ends.  It can also specify how to translate options you give to GCC
       into options for GCC to pass to front ends.
  
--- 33495,33507 ----
       Do not define this macro if it does not need to do anything.
  
   -- Macro: CPLUSPLUS_CPP_SPEC
!      This macro is just like ‘CPP_SPEC’, but is used for C++, rather
       than C.  If you do not define this macro, then the value of
!      ‘CPP_SPEC’ (if any) will be used instead.
  
   -- Macro: CC1_SPEC
       A C string constant that tells the GCC driver program options to
!      pass to ‘cc1’, ‘cc1plus’, ‘f771’, and the other language front
       ends.  It can also specify how to translate options you give to GCC
       into options for GCC to pass to front ends.
  
*************** You can control the compilation driver.
*** 33508,33518 ****
  
   -- Macro: CC1PLUS_SPEC
       A C string constant that tells the GCC driver program options to
!      pass to 'cc1plus'.  It can also specify how to translate options
!      you give to GCC into options for GCC to pass to the 'cc1plus'.
  
       Do not define this macro if it does not need to do anything.  Note
!      that everything defined in CC1_SPEC is already passed to 'cc1plus'
       so there is no need to duplicate the contents of CC1_SPEC in
       CC1PLUS_SPEC.
  
--- 33509,33519 ----
  
   -- Macro: CC1PLUS_SPEC
       A C string constant that tells the GCC driver program options to
!      pass to ‘cc1plus’.  It can also specify how to translate options
!      you give to GCC into options for GCC to pass to the ‘cc1plus’.
  
       Do not define this macro if it does not need to do anything.  Note
!      that everything defined in CC1_SPEC is already passed to ‘cc1plus’
       so there is no need to duplicate the contents of CC1_SPEC in
       CC1PLUS_SPEC.
  
*************** You can control the compilation driver.
*** 33520,33547 ****
       A C string constant that tells the GCC driver program options to
       pass to the assembler.  It can also specify how to translate
       options you give to GCC into options for GCC to pass to the
!      assembler.  See the file 'sun3.h' for an example of this.
  
       Do not define this macro if it does not need to do anything.
  
   -- Macro: ASM_FINAL_SPEC
       A C string constant that tells the GCC driver program how to run
       any programs which cleanup after the normal assembler.  Normally,
!      this is not needed.  See the file 'mips.h' for an example of this.
  
       Do not define this macro if it does not need to do anything.
  
   -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
       Define this macro, with no value, if the driver should give the
!      assembler an argument consisting of a single dash, '-', to instruct
       it to read from its standard input (which will be a pipe connected
       to the output of the compiler proper).  This argument is given
!      after any '-o' option specifying the name of the output file.
  
       If you do not define this macro, the assembler is assumed to read
       its standard input if given no non-option arguments.  If your
!      assembler cannot read standard input at all, use a '%{pipe:%e}'
!      construct; see 'mips.h' for instance.
  
   -- Macro: LINK_SPEC
       A C string constant that tells the GCC driver program options to
--- 33521,33548 ----
       A C string constant that tells the GCC driver program options to
       pass to the assembler.  It can also specify how to translate
       options you give to GCC into options for GCC to pass to the
!      assembler.  See the file ‘sun3.h’ for an example of this.
  
       Do not define this macro if it does not need to do anything.
  
   -- Macro: ASM_FINAL_SPEC
       A C string constant that tells the GCC driver program how to run
       any programs which cleanup after the normal assembler.  Normally,
!      this is not needed.  See the file ‘mips.h’ for an example of this.
  
       Do not define this macro if it does not need to do anything.
  
   -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
       Define this macro, with no value, if the driver should give the
!      assembler an argument consisting of a single dash, ‘-’, to instruct
       it to read from its standard input (which will be a pipe connected
       to the output of the compiler proper).  This argument is given
!      after any ‘-o’ option specifying the name of the output file.
  
       If you do not define this macro, the assembler is assumed to read
       its standard input if given no non-option arguments.  If your
!      assembler cannot read standard input at all, use a ‘%{pipe:%e}’
!      construct; see ‘mips.h’ for instance.
  
   -- Macro: LINK_SPEC
       A C string constant that tells the GCC driver program options to
*************** You can control the compilation driver.
*** 33551,33618 ****
       Do not define this macro if it does not need to do anything.
  
   -- Macro: LIB_SPEC
!      Another C string constant used much like 'LINK_SPEC'.  The
!      difference between the two is that 'LIB_SPEC' is used at the end of
       the command given to the linker.
  
       If this macro is not defined, a default is provided that loads the
!      standard C library from the usual place.  See 'gcc.cc'.
  
   -- Macro: LIBGCC_SPEC
       Another C string constant that tells the GCC driver program how and
!      when to place a reference to 'libgcc.a' into the linker command
       line.  This constant is placed both before and after the value of
!      'LIB_SPEC'.
  
       If this macro is not defined, the GCC driver provides a default
!      that passes the string '-lgcc' to the linker.
  
   -- Macro: REAL_LIBGCC_SPEC
!      By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC'
       is not directly used by the driver program but is instead modified
!      to refer to different versions of 'libgcc.a' depending on the
!      values of the command line flags '-static', '-shared',
!      '-static-libgcc', and '-shared-libgcc'.  On targets where these
!      modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead.
!      'REAL_LIBGCC_SPEC' tells the driver how to place a reference to
!      'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is
       used unmodified.
  
   -- Macro: USE_LD_AS_NEEDED
!      A macro that controls the modifications to 'LIBGCC_SPEC' mentioned
!      in 'REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
!      uses '--as-needed' or equivalent options and the shared 'libgcc' in
       place of the static exception handler library, when linking without
!      any of '-static', '-static-libgcc', or '-shared-libgcc'.
  
   -- Macro: LINK_EH_SPEC
!      If defined, this C string constant is added to 'LINK_SPEC'.  When
!      'USE_LD_AS_NEEDED' is zero or undefined, it also affects the
!      modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'.
  
   -- Macro: STARTFILE_SPEC
!      Another C string constant used much like 'LINK_SPEC'.  The
!      difference between the two is that 'STARTFILE_SPEC' is used at the
       very beginning of the command given to the linker.
  
       If this macro is not defined, a default is provided that loads the
!      standard C startup file from the usual place.  See 'gcc.cc'.
  
   -- Macro: ENDFILE_SPEC
!      Another C string constant used much like 'LINK_SPEC'.  The
!      difference between the two is that 'ENDFILE_SPEC' is used at the
       very end of the command given to the linker.
  
       Do not define this macro if it does not need to do anything.
  
   -- Macro: THREAD_MODEL_SPEC
!      GCC '-v' will print the thread model GCC was configured to use.
       However, this doesn't work on platforms that are multilibbed on
       thread models, such as AIX 4.3.  On such platforms, define
!      'THREAD_MODEL_SPEC' such that it evaluates to a string without
!      blanks that names one of the recognized thread models.  '%*', the
       default value of this macro, will expand to the value of
!      'thread_file' set in 'config.gcc'.
  
   -- Macro: SYSROOT_SUFFIX_SPEC
       Define this macro to add a suffix to the target sysroot when GCC is
--- 33552,33619 ----
       Do not define this macro if it does not need to do anything.
  
   -- Macro: LIB_SPEC
!      Another C string constant used much like ‘LINK_SPEC’.  The
!      difference between the two is that ‘LIB_SPEC’ is used at the end of
       the command given to the linker.
  
       If this macro is not defined, a default is provided that loads the
!      standard C library from the usual place.  See ‘gcc.cc’.
  
   -- Macro: LIBGCC_SPEC
       Another C string constant that tells the GCC driver program how and
!      when to place a reference to ‘libgcc.a’ into the linker command
       line.  This constant is placed both before and after the value of
!      ‘LIB_SPEC’.
  
       If this macro is not defined, the GCC driver provides a default
!      that passes the string ‘-lgcc’ to the linker.
  
   -- Macro: REAL_LIBGCC_SPEC
!      By default, if ‘ENABLE_SHARED_LIBGCC’ is defined, the ‘LIBGCC_SPEC’
       is not directly used by the driver program but is instead modified
!      to refer to different versions of ‘libgcc.a’ depending on the
!      values of the command line flags ‘-static’, ‘-shared’,
!      ‘-static-libgcc’, and ‘-shared-libgcc’.  On targets where these
!      modifications are inappropriate, define ‘REAL_LIBGCC_SPEC’ instead.
!      ‘REAL_LIBGCC_SPEC’ tells the driver how to place a reference to
!      ‘libgcc’ on the link command line, but, unlike ‘LIBGCC_SPEC’, it is
       used unmodified.
  
   -- Macro: USE_LD_AS_NEEDED
!      A macro that controls the modifications to ‘LIBGCC_SPEC’ mentioned
!      in ‘REAL_LIBGCC_SPEC’.  If nonzero, a spec will be generated that
!      uses ‘--as-needed’ or equivalent options and the shared ‘libgcc’ in
       place of the static exception handler library, when linking without
!      any of ‘-static’, ‘-static-libgcc’, or ‘-shared-libgcc’.
  
   -- Macro: LINK_EH_SPEC
!      If defined, this C string constant is added to ‘LINK_SPEC’.  When
!      ‘USE_LD_AS_NEEDED’ is zero or undefined, it also affects the
!      modifications to ‘LIBGCC_SPEC’ mentioned in ‘REAL_LIBGCC_SPEC’.
  
   -- Macro: STARTFILE_SPEC
!      Another C string constant used much like ‘LINK_SPEC’.  The
!      difference between the two is that ‘STARTFILE_SPEC’ is used at the
       very beginning of the command given to the linker.
  
       If this macro is not defined, a default is provided that loads the
!      standard C startup file from the usual place.  See ‘gcc.cc’.
  
   -- Macro: ENDFILE_SPEC
!      Another C string constant used much like ‘LINK_SPEC’.  The
!      difference between the two is that ‘ENDFILE_SPEC’ is used at the
       very end of the command given to the linker.
  
       Do not define this macro if it does not need to do anything.
  
   -- Macro: THREAD_MODEL_SPEC
!      GCC ‘-v’ will print the thread model GCC was configured to use.
       However, this doesn't work on platforms that are multilibbed on
       thread models, such as AIX 4.3.  On such platforms, define
!      ‘THREAD_MODEL_SPEC’ such that it evaluates to a string without
!      blanks that names one of the recognized thread models.  ‘%*’, the
       default value of this macro, will expand to the value of
!      ‘thread_file’ set in ‘config.gcc’.
  
   -- Macro: SYSROOT_SUFFIX_SPEC
       Define this macro to add a suffix to the target sysroot when GCC is
*************** You can control the compilation driver.
*** 33627,33634 ****
  
   -- Macro: EXTRA_SPECS
       Define this macro to provide additional specifications to put in
!      the 'specs' file that can be used in various specifications like
!      'CC1_SPEC'.
  
       The definition should be an initializer for an array of structures,
       containing a string constant, that defines the specification name,
--- 33628,33635 ----
  
   -- Macro: EXTRA_SPECS
       Define this macro to provide additional specifications to put in
!      the ‘specs’ file that can be used in various specifications like
!      ‘CC1_SPEC’.
  
       The definition should be an initializer for an array of structures,
       containing a string constant, that defines the specification name,
*************** You can control the compilation driver.
*** 33636,33659 ****
  
       Do not define this macro if it does not need to do anything.
  
!      'EXTRA_SPECS' is useful when an architecture contains several
!      related targets, which have various '..._SPECS' which are similar
       to each other, and the maintainer would like one central place to
       keep these definitions.
  
!      For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to
!      define either '_CALL_SYSV' when the System V calling sequence is
!      used or '_CALL_AIX' when the older AIX-based calling sequence is
       used.
  
!      The 'config/rs6000/rs6000.h' target file defines:
  
            #define EXTRA_SPECS \
              { "cpp_sysv_default", CPP_SYSV_DEFAULT },
  
            #define CPP_SYS_DEFAULT ""
  
!      The 'config/rs6000/sysv.h' target file defines:
            #undef CPP_SPEC
            #define CPP_SPEC \
            "%{posix: -D_POSIX_SOURCE } \
--- 33637,33660 ----
  
       Do not define this macro if it does not need to do anything.
  
!      ‘EXTRA_SPECS’ is useful when an architecture contains several
!      related targets, which have various ‘..._SPECS’ which are similar
       to each other, and the maintainer would like one central place to
       keep these definitions.
  
!      For example, the PowerPC System V.4 targets use ‘EXTRA_SPECS’ to
!      define either ‘_CALL_SYSV’ when the System V calling sequence is
!      used or ‘_CALL_AIX’ when the older AIX-based calling sequence is
       used.
  
!      The ‘config/rs6000/rs6000.h’ target file defines:
  
            #define EXTRA_SPECS \
              { "cpp_sysv_default", CPP_SYSV_DEFAULT },
  
            #define CPP_SYS_DEFAULT ""
  
!      The ‘config/rs6000/sysv.h’ target file defines:
            #undef CPP_SPEC
            #define CPP_SPEC \
            "%{posix: -D_POSIX_SOURCE } \
*************** You can control the compilation driver.
*** 33664,33683 ****
            #undef CPP_SYSV_DEFAULT
            #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
  
!      while the 'config/rs6000/eabiaix.h' target file defines
!      'CPP_SYSV_DEFAULT' as:
  
            #undef CPP_SYSV_DEFAULT
            #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
  
   -- Macro: LINK_LIBGCC_SPECIAL_1
       Define this macro if the driver program should find the library
!      'libgcc.a'.  If you do not define this macro, the driver program
!      will pass the argument '-lgcc' to tell the linker to do the search.
  
   -- Macro: LINK_GCC_C_SEQUENCE_SPEC
       The sequence in which libgcc and libc are specified to the linker.
!      By default this is '%G %L %G'.
  
   -- Macro: POST_LINK_SPEC
       Define this macro to add additional steps to be executed after
--- 33665,33684 ----
            #undef CPP_SYSV_DEFAULT
            #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
  
!      while the ‘config/rs6000/eabiaix.h’ target file defines
!      ‘CPP_SYSV_DEFAULT’ as:
  
            #undef CPP_SYSV_DEFAULT
            #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
  
   -- Macro: LINK_LIBGCC_SPECIAL_1
       Define this macro if the driver program should find the library
!      ‘libgcc.a’.  If you do not define this macro, the driver program
!      will pass the argument ‘-lgcc’ to tell the linker to do the search.
  
   -- Macro: LINK_GCC_C_SEQUENCE_SPEC
       The sequence in which libgcc and libc are specified to the linker.
!      By default this is ‘%G %L %G’.
  
   -- Macro: POST_LINK_SPEC
       Define this macro to add additional steps to be executed after
*************** You can control the compilation driver.
*** 33687,33700 ****
       A C string constant giving the complete command line need to
       execute the linker.  When you do this, you will need to update your
       port each time a change is made to the link command line within
!      'gcc.cc'.  Therefore, define this macro only if you need to
       completely redefine the command line for invoking the linker and
       there is no other way to accomplish the effect you need.
       Overriding this macro may be avoidable by overriding
!      'LINK_GCC_C_SEQUENCE_SPEC' instead.
  
   -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT
!      True if '..' 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.
--- 33688,33701 ----
       A C string constant giving the complete command line need to
       execute the linker.  When you do this, you will need to update your
       port each time a change is made to the link command line within
!      ‘gcc.cc’.  Therefore, define this macro only if you need to
       completely redefine the command line for invoking the linker and
       there is no other way to accomplish the effect you need.
       Overriding this macro may be avoidable by overriding
!      ‘LINK_GCC_C_SEQUENCE_SPEC’ instead.
  
   -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT
!      True if ‘..’ 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.
*************** You can control the compilation driver.
*** 33703,33750 ****
       Define this macro as a C expression for the initializer of an array
       of string to tell the driver program which options are defaults for
       this target and thus do not need to be handled specially when using
!      'MULTILIB_OPTIONS'.
  
!      Do not define this macro if 'MULTILIB_OPTIONS' is not defined in
       the target makefile fragment or if none of the options listed in
!      'MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
  
   -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
!      Define this macro to tell 'gcc' that it should only translate a
!      '-B' prefix into a '-L' linker option if the prefix indicates an
       absolute file name.
  
   -- Macro: MD_EXEC_PREFIX
       If defined, this macro is an additional prefix to try after
!      'STANDARD_EXEC_PREFIX'.  'MD_EXEC_PREFIX' is not searched when the
       compiler is built as a cross compiler.  If you define
!      'MD_EXEC_PREFIX', then be sure to add it to the list of directories
!      used to find the assembler in 'configure.ac'.
  
   -- Macro: STANDARD_STARTFILE_PREFIX
       Define this macro as a C string constant if you wish to override
!      the standard choice of 'libdir' as the default prefix to try when
!      searching for startup files such as 'crt0.o'.
!      'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
       built as a cross compiler.
  
   -- Macro: STANDARD_STARTFILE_PREFIX_1
       Define this macro as a C string constant if you wish to override
!      the standard choice of '/lib' as a prefix to try after the default
!      prefix when searching for startup files such as 'crt0.o'.
!      'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
       built as a cross compiler.
  
   -- Macro: STANDARD_STARTFILE_PREFIX_2
       Define this macro as a C string constant if you wish to override
!      the standard choice of '/lib' as yet another prefix to try after
       the default prefix when searching for startup files such as
!      'crt0.o'.  'STANDARD_STARTFILE_PREFIX_2' is not searched when the
       compiler is built as a cross compiler.
  
   -- Macro: MD_STARTFILE_PREFIX
       If defined, this macro supplies an additional prefix to try after
!      the standard prefixes.  'MD_EXEC_PREFIX' is not searched when the
       compiler is built as a cross compiler.
  
   -- Macro: MD_STARTFILE_PREFIX_1
--- 33704,33751 ----
       Define this macro as a C expression for the initializer of an array
       of string to tell the driver program which options are defaults for
       this target and thus do not need to be handled specially when using
!      ‘MULTILIB_OPTIONS’.
  
!      Do not define this macro if ‘MULTILIB_OPTIONS’ is not defined in
       the target makefile fragment or if none of the options listed in
!      ‘MULTILIB_OPTIONS’ are set by default.  *Note Target Fragment::.
  
   -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
!      Define this macro to tell ‘gcc’ that it should only translate a
!      ‘-B’ prefix into a ‘-L’ linker option if the prefix indicates an
       absolute file name.
  
   -- Macro: MD_EXEC_PREFIX
       If defined, this macro is an additional prefix to try after
!      ‘STANDARD_EXEC_PREFIX’.  ‘MD_EXEC_PREFIX’ is not searched when the
       compiler is built as a cross compiler.  If you define
!      ‘MD_EXEC_PREFIX’, then be sure to add it to the list of directories
!      used to find the assembler in ‘configure.ac’.
  
   -- Macro: STANDARD_STARTFILE_PREFIX
       Define this macro as a C string constant if you wish to override
!      the standard choice of ‘libdir’ as the default prefix to try when
!      searching for startup files such as ‘crt0.o’.
!      ‘STANDARD_STARTFILE_PREFIX’ is not searched when the compiler is
       built as a cross compiler.
  
   -- Macro: STANDARD_STARTFILE_PREFIX_1
       Define this macro as a C string constant if you wish to override
!      the standard choice of ‘/lib’ as a prefix to try after the default
!      prefix when searching for startup files such as ‘crt0.o’.
!      ‘STANDARD_STARTFILE_PREFIX_1’ is not searched when the compiler is
       built as a cross compiler.
  
   -- Macro: STANDARD_STARTFILE_PREFIX_2
       Define this macro as a C string constant if you wish to override
!      the standard choice of ‘/lib’ as yet another prefix to try after
       the default prefix when searching for startup files such as
!      ‘crt0.o’.  ‘STANDARD_STARTFILE_PREFIX_2’ is not searched when the
       compiler is built as a cross compiler.
  
   -- Macro: MD_STARTFILE_PREFIX
       If defined, this macro supplies an additional prefix to try after
!      the standard prefixes.  ‘MD_EXEC_PREFIX’ is not searched when the
       compiler is built as a cross compiler.
  
   -- Macro: MD_STARTFILE_PREFIX_1
*************** You can control the compilation driver.
*** 33756,33800 ****
       Define this macro as a C string constant if you wish to set
       environment variables for programs called by the driver, such as
       the assembler and loader.  The driver passes the value of this
!      macro to 'putenv' to initialize the necessary environment
       variables.
  
   -- Macro: LOCAL_INCLUDE_DIR
       Define this macro as a C string constant if you wish to override
!      the standard choice of '/usr/local/include' as the default prefix
!      to try when searching for local header files.  'LOCAL_INCLUDE_DIR'
!      comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc',
!      normally '/usr/include') in the search order.
  
!      Cross compilers do not search either '/usr/local/include' or its
       replacement.
  
   -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT
!      The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'.  See
!      'INCLUDE_DEFAULTS', below, for the description of components.  If
       you do not define this macro, no component is used.
  
   -- Macro: INCLUDE_DEFAULTS
       Define this macro if you wish to override the entire default search
       path for include files.  For a native compiler, the default search
!      path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR',
!      'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'.  In
!      addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined
!      automatically by 'Makefile', and specify private search areas for
!      GCC.  The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++
       programs.
  
       The definition should be an initializer for an array of structures.
       Each array element should have four elements: the directory name (a
       string constant), the component name (also a string constant), a
       flag for C++-only directories, and a flag showing that the includes
!      in the directory don't need to be wrapped in 'extern 'C'' when
       compiling C++.  Mark the end of the array with a null element.
  
       The component name denotes what GNU package the include file is
       part of, if any, in all uppercase letters.  For example, it might
!      be 'GCC' or 'BINUTILS'.  If the package is part of a
!      vendor-supplied operating system, code the component name as '0'.
  
       For example, here is the definition used for VAX/VMS:
  
--- 33757,33801 ----
       Define this macro as a C string constant if you wish to set
       environment variables for programs called by the driver, such as
       the assembler and loader.  The driver passes the value of this
!      macro to ‘putenv’ to initialize the necessary environment
       variables.
  
   -- Macro: LOCAL_INCLUDE_DIR
       Define this macro as a C string constant if you wish to override
!      the standard choice of ‘/usr/local/include’ as the default prefix
!      to try when searching for local header files.  ‘LOCAL_INCLUDE_DIR’
!      comes before ‘NATIVE_SYSTEM_HEADER_DIR’ (set in ‘config.gcc’,
!      normally ‘/usr/include’) in the search order.
  
!      Cross compilers do not search either ‘/usr/local/include’ or its
       replacement.
  
   -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT
!      The "component" corresponding to ‘NATIVE_SYSTEM_HEADER_DIR’.  See
!      ‘INCLUDE_DEFAULTS’, below, for the description of components.  If
       you do not define this macro, no component is used.
  
   -- Macro: INCLUDE_DEFAULTS
       Define this macro if you wish to override the entire default search
       path for include files.  For a native compiler, the default search
!      path usually consists of ‘GCC_INCLUDE_DIR’, ‘LOCAL_INCLUDE_DIR’,
!      ‘GPLUSPLUS_INCLUDE_DIR’, and ‘NATIVE_SYSTEM_HEADER_DIR’.  In
!      addition, ‘GPLUSPLUS_INCLUDE_DIR’ and ‘GCC_INCLUDE_DIR’ are defined
!      automatically by ‘Makefile’, and specify private search areas for
!      GCC.  The directory ‘GPLUSPLUS_INCLUDE_DIR’ is used only for C++
       programs.
  
       The definition should be an initializer for an array of structures.
       Each array element should have four elements: the directory name (a
       string constant), the component name (also a string constant), a
       flag for C++-only directories, and a flag showing that the includes
!      in the directory don't need to be wrapped in ‘extern ‘C’’ when
       compiling C++.  Mark the end of the array with a null element.
  
       The component name denotes what GNU package the include file is
       part of, if any, in all uppercase letters.  For example, it might
!      be ‘GCC’ or ‘BINUTILS’.  If the package is part of a
!      vendor-supplied operating system, code the component name as ‘0’.
  
       For example, here is the definition used for VAX/VMS:
  
*************** You can control the compilation driver.
*** 33809,33874 ****
  
   Here is the order of prefixes tried for exec files:
  
!   1. Any prefixes specified by the user with '-B'.
  
!   2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX'
       is not set and the compiler has not been installed in the
       configure-time PREFIX, the location in which the compiler has
       actually been installed.
  
    3. The directories specified by the environment variable
!      'COMPILER_PATH'.
  
!   4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been
       installed in the configured-time PREFIX.
  
!   5. The location '/usr/libexec/gcc/', but only if this is a native
       compiler.
  
!   6. The location '/usr/lib/gcc/', but only if this is a native
       compiler.
  
!   7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
       native compiler.
  
   Here is the order of prefixes tried for startfiles:
  
!   1. Any prefixes specified by the user with '-B'.
  
!   2. The environment variable 'GCC_EXEC_PREFIX' or its automatically
       determined value based on the installed toolchain location.
  
    3. The directories specified by the environment variable
!      'LIBRARY_PATH' (or port-specific name; native only, cross compilers
       do not use this).
  
!   4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is
       installed in the configured PREFIX or this is a native compiler.
  
!   5. The location '/usr/lib/gcc/', but only if this is a native
       compiler.
  
!   6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
       native compiler.
  
!   7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a
       native compiler, or we have a target system root.
  
!   8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is
       a native compiler, or we have a target system root.
  
!   9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot
       modifications.  If this path is relative it will be prefixed by
!      'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX'
       and the machine suffix.
  
!   10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a
       native compiler, or we have a target system root.  The default for
!      this macro is '/lib/'.
  
!   11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a
       native compiler, or we have a target system root.  The default for
!      this macro is '/usr/lib/'.
  
  
  File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
--- 33810,33875 ----
  
   Here is the order of prefixes tried for exec files:
  
!   1. Any prefixes specified by the user with ‘-B’.
  
!   2. The environment variable ‘GCC_EXEC_PREFIX’ or, if ‘GCC_EXEC_PREFIX’
       is not set and the compiler has not been installed in the
       configure-time PREFIX, the location in which the compiler has
       actually been installed.
  
    3. The directories specified by the environment variable
!      ‘COMPILER_PATH’.
  
!   4. The macro ‘STANDARD_EXEC_PREFIX’, if the compiler has been
       installed in the configured-time PREFIX.
  
!   5. The location ‘/usr/libexec/gcc/’, but only if this is a native
       compiler.
  
!   6. The location ‘/usr/lib/gcc/’, but only if this is a native
       compiler.
  
!   7. The macro ‘MD_EXEC_PREFIX’, if defined, but only if this is a
       native compiler.
  
   Here is the order of prefixes tried for startfiles:
  
!   1. Any prefixes specified by the user with ‘-B’.
  
!   2. The environment variable ‘GCC_EXEC_PREFIX’ or its automatically
       determined value based on the installed toolchain location.
  
    3. The directories specified by the environment variable
!      ‘LIBRARY_PATH’ (or port-specific name; native only, cross compilers
       do not use this).
  
!   4. The macro ‘STANDARD_EXEC_PREFIX’, but only if the toolchain is
       installed in the configured PREFIX or this is a native compiler.
  
!   5. The location ‘/usr/lib/gcc/’, but only if this is a native
       compiler.
  
!   6. The macro ‘MD_EXEC_PREFIX’, if defined, but only if this is a
       native compiler.
  
!   7. The macro ‘MD_STARTFILE_PREFIX’, if defined, but only if this is a
       native compiler, or we have a target system root.
  
!   8. The macro ‘MD_STARTFILE_PREFIX_1’, if defined, but only if this is
       a native compiler, or we have a target system root.
  
!   9. The macro ‘STANDARD_STARTFILE_PREFIX’, with any sysroot
       modifications.  If this path is relative it will be prefixed by
!      ‘GCC_EXEC_PREFIX’ and the machine suffix or ‘STANDARD_EXEC_PREFIX’
       and the machine suffix.
  
!   10. The macro ‘STANDARD_STARTFILE_PREFIX_1’, but only if this is a
       native compiler, or we have a target system root.  The default for
!      this macro is ‘/lib/’.
  
!   11. The macro ‘STANDARD_STARTFILE_PREFIX_2’, but only if this is a
       native compiler, or we have a target system root.  The default for
!      this macro is ‘/usr/lib/’.
  
  
  File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
*************** Here are run-time target specifications.
*** 33881,33962 ****
   -- Macro: TARGET_CPU_CPP_BUILTINS ()
       This function-like macro expands to a block of code that defines
       built-in preprocessor macros and assertions for the target CPU,
!      using the functions 'builtin_define', 'builtin_define_std' and
!      'builtin_assert'.  When the front end calls this macro it provides
       a trailing semicolon, and since it has finished command line option
       processing your code can use those results freely.
  
!      'builtin_assert' takes a string in the form you pass to the
!      command-line option '-A', such as 'cpu=mips', and creates the
!      assertion.  'builtin_define' takes a string in the form accepted by
!      option '-D' and unconditionally defines the macro.
  
!      'builtin_define_std' takes a string representing the name of an
       object-like macro.  If it doesn't lie in the user's namespace,
!      'builtin_define_std' defines it unconditionally.  Otherwise, it
       defines a version with two leading underscores, and another version
       with two leading and trailing underscores, and defines the original
       only if an ISO standard was not requested on the command line.  For
!      example, passing 'unix' defines '__unix', '__unix__' and possibly
!      'unix'; passing '_mips' defines '__mips', '__mips__' and possibly
!      '_mips', and passing '_ABI64' defines only '_ABI64'.
  
       You can also test for the C dialect being compiled.  The variable
!      'c_language' is set to one of 'clk_c', 'clk_cplusplus' or
!      'clk_objective_c'.  Note that if we are preprocessing assembler,
!      this variable will be 'clk_c' but the function-like macro
!      'preprocessing_asm_p()' will return true, so you might want to
       check for that first.  If you need to check for strict ANSI, the
!      variable 'flag_iso' can be used.  The function-like macro
!      'preprocessing_trad_p()' can be used to check for traditional
       preprocessing.
  
   -- Macro: TARGET_OS_CPP_BUILTINS ()
!      Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
       and is used for the target operating system instead.
  
   -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
!      Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
!      and is used for the target object format.  'elfos.h' uses this
!      macro to define '__ELF__', so you probably do not need to define it
       yourself.
  
   -- Variable: extern int target_flags
!      This variable is declared in 'options.h', which is included before
       any target-specific headers.
  
   -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
!      This variable specifies the initial value of 'target_flags'.  Its
       default setting is 0.
  
   -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options
            *OPTS, struct gcc_options *OPTS_SET, const struct
            cl_decoded_option *DECODED, location_t LOC)
       This hook is called whenever the user specifies one of the
!      target-specific options described by the '.opt' definition files
       (*note Options::).  It has the opportunity to do some
       option-specific processing and should return true if the option is
       valid.  The default definition does nothing but return true.
  
       DECODED specifies the option and its arguments.  OPTS and OPTS_SET
!      are the 'gcc_options' structures to be used for storing option
       state, and LOC is the location at which the option was passed
!      ('UNKNOWN_LOCATION' except for options passed via attributes).
  
   -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
            *ARG, int VALUE)
       This target hook is called whenever the user specifies one of the
!      target-specific C language family options described by the '.opt'
       definition files(*note Options::).  It has the opportunity to do
       some option-specific processing and should return true if the
       option is valid.  The arguments are like for
!      'TARGET_HANDLE_OPTION'.  The default definition does nothing but
       return false.
  
!      In general, you should use 'TARGET_HANDLE_OPTION' to handle
       options.  However, if processing an option requires routines that
       are only available in the C (and related language) front ends, then
!      you should use 'TARGET_HANDLE_C_OPTION' instead.
  
   -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
            STRING)
--- 33882,33963 ----
   -- Macro: TARGET_CPU_CPP_BUILTINS ()
       This function-like macro expands to a block of code that defines
       built-in preprocessor macros and assertions for the target CPU,
!      using the functions ‘builtin_define’, ‘builtin_define_std’ and
!      ‘builtin_assert’.  When the front end calls this macro it provides
       a trailing semicolon, and since it has finished command line option
       processing your code can use those results freely.
  
!      ‘builtin_assert’ takes a string in the form you pass to the
!      command-line option ‘-A’, such as ‘cpu=mips’, and creates the
!      assertion.  ‘builtin_define’ takes a string in the form accepted by
!      option ‘-D’ and unconditionally defines the macro.
  
!      ‘builtin_define_std’ takes a string representing the name of an
       object-like macro.  If it doesn't lie in the user's namespace,
!      ‘builtin_define_std’ defines it unconditionally.  Otherwise, it
       defines a version with two leading underscores, and another version
       with two leading and trailing underscores, and defines the original
       only if an ISO standard was not requested on the command line.  For
!      example, passing ‘unix’ defines ‘__unix’, ‘__unix__’ and possibly
!      ‘unix’; passing ‘_mips’ defines ‘__mips’, ‘__mips__’ and possibly
!      ‘_mips’, and passing ‘_ABI64’ defines only ‘_ABI64’.
  
       You can also test for the C dialect being compiled.  The variable
!      ‘c_language’ is set to one of ‘clk_c’, ‘clk_cplusplus’ or
!      ‘clk_objective_c’.  Note that if we are preprocessing assembler,
!      this variable will be ‘clk_c’ but the function-like macro
!      ‘preprocessing_asm_p()’ will return true, so you might want to
       check for that first.  If you need to check for strict ANSI, the
!      variable ‘flag_iso’ can be used.  The function-like macro
!      ‘preprocessing_trad_p()’ can be used to check for traditional
       preprocessing.
  
   -- Macro: TARGET_OS_CPP_BUILTINS ()
!      Similarly to ‘TARGET_CPU_CPP_BUILTINS’ but this macro is optional
       and is used for the target operating system instead.
  
   -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
!      Similarly to ‘TARGET_CPU_CPP_BUILTINS’ but this macro is optional
!      and is used for the target object format.  ‘elfos.h’ uses this
!      macro to define ‘__ELF__’, so you probably do not need to define it
       yourself.
  
   -- Variable: extern int target_flags
!      This variable is declared in ‘options.h’, which is included before
       any target-specific headers.
  
   -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
!      This variable specifies the initial value of ‘target_flags’.  Its
       default setting is 0.
  
   -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options
            *OPTS, struct gcc_options *OPTS_SET, const struct
            cl_decoded_option *DECODED, location_t LOC)
       This hook is called whenever the user specifies one of the
!      target-specific options described by the ‘.opt’ definition files
       (*note Options::).  It has the opportunity to do some
       option-specific processing and should return true if the option is
       valid.  The default definition does nothing but return true.
  
       DECODED specifies the option and its arguments.  OPTS and OPTS_SET
!      are the ‘gcc_options’ structures to be used for storing option
       state, and LOC is the location at which the option was passed
!      (‘UNKNOWN_LOCATION’ except for options passed via attributes).
  
   -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
            *ARG, int VALUE)
       This target hook is called whenever the user specifies one of the
!      target-specific C language family options described by the ‘.opt’
       definition files(*note Options::).  It has the opportunity to do
       some option-specific processing and should return true if the
       option is valid.  The arguments are like for
!      ‘TARGET_HANDLE_OPTION’.  The default definition does nothing but
       return false.
  
!      In general, you should use ‘TARGET_HANDLE_OPTION’ to handle
       options.  However, if processing an option requires routines that
       are only available in the C (and related language) front ends, then
!      you should use ‘TARGET_HANDLE_C_OPTION’ instead.
  
   -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
            STRING)
*************** Here are run-time target specifications.
*** 33966,33972 ****
       information.  These objects are considered opaque to the compiler
       and handled as references.  An ideal implementation makes the
       composition of the string object match that of the Objective-C
!      'NSString' ('NXString' for GNUStep), allowing efficient
       interworking between C-only and Objective-C code.  If a target
       implements string objects then this hook should return a reference
       to such an object constructed from the normal 'C' string
--- 33967,33973 ----
       information.  These objects are considered opaque to the compiler
       and handled as references.  An ideal implementation makes the
       composition of the string object match that of the Objective-C
!      ‘NSString’ (‘NXString’ for GNUStep), allowing efficient
       interworking between C-only and Objective-C code.  If a target
       implements string objects then this hook should return a reference
       to such an object constructed from the normal 'C' string
*************** Here are run-time target specifications.
*** 33987,33993 ****
   -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
            STRINGREF)
       If a target implements string objects then this hook should return
!      'true' if STRINGREF is a valid reference to such an object.
  
   -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
            FORMAT_ARG, tree ARGS_LIST)
--- 33988,33994 ----
   -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
            STRINGREF)
       If a target implements string objects then this hook should return
!      ‘true’ if STRINGREF is a valid reference to such an object.
  
   -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
            FORMAT_ARG, tree ARGS_LIST)
*************** Here are run-time target specifications.
*** 33998,34013 ****
  
   -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
       This target function is similar to the hook
!      '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 attribute or pragma.  It is not called
!      at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is
       called so if you want to perform these actions then, you should
!      have 'TARGET_OPTION_OVERRIDE' call
!      'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
  
   -- Macro: C_COMMON_OVERRIDE_OPTIONS
!      This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only
       used in the C language frontends (C, Objective-C, C++,
       Objective-C++) and so can be used to alter option flag variables
       which only exist in those frontends.
--- 33999,34014 ----
  
   -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
       This target function is similar to the hook
!      ‘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 attribute or pragma.  It is not called
!      at the beginning of compilation when ‘TARGET_OPTION_OVERRIDE’ is
       called so if you want to perform these actions then, you should
!      have ‘TARGET_OPTION_OVERRIDE’ call
!      ‘TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE’.
  
   -- Macro: C_COMMON_OVERRIDE_OPTIONS
!      This is similar to the ‘TARGET_OPTION_OVERRIDE’ hook but is only
       used in the C language frontends (C, Objective-C, C++,
       Objective-C++) and so can be used to alter option flag variables
       which only exist in those frontends.
*************** Here are run-time target specifications.
*** 34023,34030 ****
       options passed explicitly.
  
       This processing is run once at program startup and when the
!      optimization options are changed via '#pragma GCC optimize' or by
!      using the 'optimize' attribute.
  
   -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct
            gcc_options *OPTS)
--- 34024,34031 ----
       options passed explicitly.
  
       This processing is run once at program startup and when the
!      optimization options are changed via ‘#pragma GCC optimize’ or by
!      using the ‘optimize’ attribute.
  
   -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct
            gcc_options *OPTS)
*************** Here are run-time target specifications.
*** 34053,34059 ****
       subtargets during compilation.  For example, the MIPS target has
       one subtarget for the traditional MIPS architecture and another for
       MIPS16.  Source code can switch between these two subarchitectures
!      using the 'mips16' and 'nomips16' attributes.
  
       Such subtargets can differ in things like the set of available
       registers, the set of available instructions, the costs of various
--- 34054,34060 ----
       subtargets during compilation.  For example, the MIPS target has
       one subtarget for the traditional MIPS architecture and another for
       MIPS16.  Source code can switch between these two subarchitectures
!      using the ‘mips16’ and ‘nomips16’ attributes.
  
       Such subtargets can differ in things like the set of available
       registers, the set of available instructions, the costs of various
*************** Here are run-time target specifications.
*** 34062,34068 ****
       subtarget takes a significant amount of time.  The compiler
       therefore provides a facility for maintaining several versions of
       the global variables and quickly switching between them; see
!      'target-globals.h' for details.
  
       Define this macro to 1 if your target needs this facility.  The
       default is 0.
--- 34063,34069 ----
       subtarget takes a significant amount of time.  The compiler
       therefore provides a facility for maintaining several versions of
       the global variables and quickly switching between them; see
!      ‘target-globals.h’ for details.
  
       Define this macro to 1 if your target needs this facility.  The
       default is 0.
*************** Here are run-time target specifications.
*** 34071,34078 ****
            (void)
       Returns true if the target supports IEEE 754 floating-point
       exceptions and rounding modes, false otherwise.  This is intended
!      to relate to the 'float' and 'double' types, but not necessarily
!      'long double'.  By default, returns true if the 'adddf3'
       instruction pattern is available and false otherwise, on the
       assumption that hardware floating point supports exceptions and
       rounding modes but software floating point does not.
--- 34072,34079 ----
            (void)
       Returns true if the target supports IEEE 754 floating-point
       exceptions and rounding modes, false otherwise.  This is intended
!      to relate to the ‘float’ and ‘double’ types, but not necessarily
!      ‘long double’.  By default, returns true if the ‘adddf3’
       instruction pattern is available and false otherwise, on the
       assumption that hardware floating point supports exceptions and
       rounding modes but software floating point does not.
*************** using statics to store the information i
*** 34089,34115 ****
  nested functions, so you can be halfway through encoding one function
  when another one comes along.
  
!  GCC defines a data structure called 'struct function' which contains
  all of the data specific to an individual function.  This structure
! contains a field called 'machine' whose type is 'struct machine_function
! *', which can be used by targets to point to their own specific data.
  
   If a target needs per-function specific data it should define the type
! 'struct machine_function' and also the macro 'INIT_EXPANDERS'.  This
  macro should be used to initialize the function pointer
! 'init_machine_status'.  This pointer is explained below.
  
   One typical use of per-function, target specific data is to create an
  RTX to hold the register containing the function's return address.  This
! RTX can then be used to implement the '__builtin_return_address'
  function, for level 0.
  
   Note--earlier implementations of GCC used a single data area to hold
  all of the per-function information.  Thus when processing of a nested
  function began the old per-function data had to be pushed onto a stack,
  and when the processing was finished, it had to be popped off the stack.
! GCC used to provide function pointers called 'save_machine_status' and
! 'restore_machine_status' to handle the saving and restoring of the
  target specific information.  Since the single data area approach is no
  longer used, these pointers are no longer supported.
  
--- 34090,34116 ----
  nested functions, so you can be halfway through encoding one function
  when another one comes along.
  
!  GCC defines a data structure called ‘struct function’ which contains
  all of the data specific to an individual function.  This structure
! contains a field called ‘machine’ whose type is ‘struct machine_function
! *’, which can be used by targets to point to their own specific data.
  
   If a target needs per-function specific data it should define the type
! ‘struct machine_function’ and also the macro ‘INIT_EXPANDERS’.  This
  macro should be used to initialize the function pointer
! ‘init_machine_status’.  This pointer is explained below.
  
   One typical use of per-function, target specific data is to create an
  RTX to hold the register containing the function's return address.  This
! RTX can then be used to implement the ‘__builtin_return_address’
  function, for level 0.
  
   Note--earlier implementations of GCC used a single data area to hold
  all of the per-function information.  Thus when processing of a nested
  function began the old per-function data had to be pushed onto a stack,
  and when the processing was finished, it had to be popped off the stack.
! GCC used to provide function pointers called ‘save_machine_status’ and
! ‘restore_machine_status’ to handle the saving and restoring of the
  target specific information.  Since the single data area approach is no
  longer used, these pointers are no longer supported.
  
*************** longer used, these pointers are no longe
*** 34117,34132 ****
       Macro called to initialize any target specific information.  This
       macro is called once per function, before generation of any RTL has
       begun.  The intention of this macro is to allow the initialization
!      of the function pointer 'init_machine_status'.
  
   -- Variable: void (*)(struct function *) init_machine_status
!      If this function pointer is non-'NULL' it will be called once per
       function, before function compilation starts, in order to allow the
!      target to perform any target specific initialization of the 'struct
!      function' structure.  It is intended that this would be used to
!      initialize the 'machine' of that structure.
  
!      'struct machine_function' structures are expected to be freed by
       GC.  Generally, any memory that they reference must be allocated by
       using GC allocation, including the structure itself.
  
--- 34118,34133 ----
       Macro called to initialize any target specific information.  This
       macro is called once per function, before generation of any RTL has
       begun.  The intention of this macro is to allow the initialization
!      of the function pointer ‘init_machine_status’.
  
   -- Variable: void (*)(struct function *) init_machine_status
!      If this function pointer is non-‘NULL’ it will be called once per
       function, before function compilation starts, in order to allow the
!      target to perform any target specific initialization of the ‘struct
!      function’ structure.  It is intended that this would be used to
!      initialize the ‘machine’ of that structure.
  
!      ‘struct machine_function’ structures are expected to be freed by
       GC.  Generally, any memory that they reference must be allocated by
       using GC allocation, including the structure itself.
  
*************** File: gccint.info,  Node: Storage Layout
*** 34138,34144 ****
  
  Note that the definitions of the macros in this table which are sizes or
  alignments measured in bits do not need to be constant.  They can be C
! expressions that refer to static variables, such as the 'target_flags'.
  *Note Run-time Target::.
  
   -- Macro: BITS_BIG_ENDIAN
--- 34139,34145 ----
  
  Note that the definitions of the macros in this table which are sizes or
  alignments measured in bits do not need to be constant.  They can be C
! expressions that refer to static variables, such as the ‘target_flags’.
  *Note Run-time Target::.
  
   -- Macro: BITS_BIG_ENDIAN
*************** expressions that refer to static variabl
*** 34151,34157 ****
       constant.
  
       This macro does not affect the way structure fields are packed into
!      bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'.
  
   -- Macro: BYTES_BIG_ENDIAN
       Define this macro to have the value 1 if the most significant byte
--- 34152,34158 ----
       constant.
  
       This macro does not affect the way structure fields are packed into
!      bytes or words; that is controlled by ‘BYTES_BIG_ENDIAN’.
  
   -- Macro: BYTES_BIG_ENDIAN
       Define this macro to have the value 1 if the most significant byte
*************** expressions that refer to static variabl
*** 34161,34167 ****
   -- Macro: WORDS_BIG_ENDIAN
       Define this macro to have the value 1 if, in a multiword object,
       the most significant word has the lowest number.  This applies to
!      both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if
       the order of words in memory is not the same as the order in
       registers.  This macro need not be a constant.
  
--- 34162,34168 ----
   -- Macro: WORDS_BIG_ENDIAN
       Define this macro to have the value 1 if, in a multiword object,
       the most significant word has the lowest number.  This applies to
!      both memory locations and registers; see ‘REG_WORDS_BIG_ENDIAN’ if
       the order of words in memory is not the same as the order in
       registers.  This macro need not be a constant.
  
*************** expressions that refer to static variabl
*** 34169,34179 ****
       On some machines, the order of words in a multiword object differs
       between registers in memory.  In such a situation, define this
       macro to describe the order of words in a register.  The macro
!      'WORDS_BIG_ENDIAN' controls the order of words in memory.
  
   -- Macro: FLOAT_WORDS_BIG_ENDIAN
!      Define this macro to have the value 1 if 'DFmode', 'XFmode' or
!      'TFmode' floating point numbers are stored in memory with the word
       containing the sign bit at the lowest address; otherwise define it
       to have the value 0.  This macro need not be a constant.
  
--- 34170,34180 ----
       On some machines, the order of words in a multiword object differs
       between registers in memory.  In such a situation, define this
       macro to describe the order of words in a register.  The macro
!      ‘WORDS_BIG_ENDIAN’ controls the order of words in memory.
  
   -- Macro: FLOAT_WORDS_BIG_ENDIAN
!      Define this macro to have the value 1 if ‘DFmode’, ‘XFmode’ or
!      ‘TFmode’ floating point numbers are stored in memory with the word
       containing the sign bit at the lowest address; otherwise define it
       to have the value 0.  This macro need not be a constant.
  
*************** expressions that refer to static variabl
*** 34182,34193 ****
  
   -- Macro: BITS_PER_WORD
       Number of bits in a word.  If you do not define this macro, the
!      default is 'BITS_PER_UNIT * UNITS_PER_WORD'.
  
   -- Macro: MAX_BITS_PER_WORD
       Maximum number of bits in a word.  If this is undefined, the
!      default is 'BITS_PER_WORD'.  Otherwise, it is the constant value
!      that is the largest value that 'BITS_PER_WORD' can have at
       run-time.
  
   -- Macro: UNITS_PER_WORD
--- 34183,34194 ----
  
   -- Macro: BITS_PER_WORD
       Number of bits in a word.  If you do not define this macro, the
!      default is ‘BITS_PER_UNIT * UNITS_PER_WORD’.
  
   -- Macro: MAX_BITS_PER_WORD
       Maximum number of bits in a word.  If this is undefined, the
!      default is ‘BITS_PER_WORD’.  Otherwise, it is the constant value
!      that is the largest value that ‘BITS_PER_WORD’ can have at
       run-time.
  
   -- Macro: UNITS_PER_WORD
*************** expressions that refer to static variabl
*** 34196,34221 ****
  
   -- Macro: MIN_UNITS_PER_WORD
       Minimum number of units in a word.  If this is undefined, the
!      default is 'UNITS_PER_WORD'.  Otherwise, it is the constant value
!      that is the smallest value that 'UNITS_PER_WORD' can have at
       run-time.
  
   -- Macro: POINTER_SIZE
       Width of a pointer, in bits.  You must specify a value no wider
!      than the width of 'Pmode'.  If it is not equal to the width of
!      'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'.  If you do not
!      specify a value the default is 'BITS_PER_WORD'.
  
   -- Macro: POINTERS_EXTEND_UNSIGNED
       A C expression that determines how pointers should be extended from
!      'ptr_mode' to either 'Pmode' or 'word_mode'.  It is greater than
       zero if pointers should be zero-extended, zero if they should be
       sign-extended, and negative if some other sort of conversion is
       needed.  In the last case, the extension is done by the target's
!      'ptr_extend' instruction.
  
!      You need not define this macro if the 'ptr_mode', 'Pmode' and
!      'word_mode' are all the same width.
  
   -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
       A macro to update M and UNSIGNEDP when an object whose type is TYPE
--- 34197,34222 ----
  
   -- Macro: MIN_UNITS_PER_WORD
       Minimum number of units in a word.  If this is undefined, the
!      default is ‘UNITS_PER_WORD’.  Otherwise, it is the constant value
!      that is the smallest value that ‘UNITS_PER_WORD’ can have at
       run-time.
  
   -- Macro: POINTER_SIZE
       Width of a pointer, in bits.  You must specify a value no wider
!      than the width of ‘Pmode’.  If it is not equal to the width of
!      ‘Pmode’, you must define ‘POINTERS_EXTEND_UNSIGNED’.  If you do not
!      specify a value the default is ‘BITS_PER_WORD’.
  
   -- Macro: POINTERS_EXTEND_UNSIGNED
       A C expression that determines how pointers should be extended from
!      ‘ptr_mode’ to either ‘Pmode’ or ‘word_mode’.  It is greater than
       zero if pointers should be zero-extended, zero if they should be
       sign-extended, and negative if some other sort of conversion is
       needed.  In the last case, the extension is done by the target's
!      ‘ptr_extend’ instruction.
  
!      You need not define this macro if the ‘ptr_mode’, ‘Pmode’ and
!      ‘word_mode’ are all the same width.
  
   -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
       A macro to update M and UNSIGNEDP when an object whose type is TYPE
*************** expressions that refer to static variabl
*** 34223,34230 ****
       a register.  This macro is only called when TYPE is a scalar type.
  
       On most RISC machines, which only have operations that operate on a
!      full register, define this macro to set M to 'word_mode' if M is an
!      integer mode narrower than 'BITS_PER_WORD'.  In most cases, only
       integer modes should be widened because wider-precision
       floating-point operations are usually more expensive than their
       narrower counterparts.
--- 34224,34231 ----
       a register.  This macro is only called when TYPE is a scalar type.
  
       On most RISC machines, which only have operations that operate on a
!      full register, define this macro to set M to ‘word_mode’ if M is an
!      integer mode narrower than ‘BITS_PER_WORD’.  In most cases, only
       integer modes should be widened because wider-precision
       floating-point operations are usually more expensive than their
       narrower counterparts.
*************** expressions that refer to static variabl
*** 34242,34303 ****
   -- Target Hook: enum flt_eval_method TARGET_C_EXCESS_PRECISION (enum
            excess_precision_type TYPE)
       Return a value, with the same meaning as the C99 macro
!      'FLT_EVAL_METHOD' that describes which excess precision should be
!      applied.  TYPE is either 'EXCESS_PRECISION_TYPE_IMPLICIT',
!      'EXCESS_PRECISION_TYPE_FAST', 'EXCESS_PRECISION_TYPE_STANDARD', or
!      'EXCESS_PRECISION_TYPE_FLOAT16'.  For
!      'EXCESS_PRECISION_TYPE_IMPLICIT', the target should return which
       precision and range operations will be implictly evaluated in
       regardless of the excess precision explicitly added.  For
!      'EXCESS_PRECISION_TYPE_STANDARD', 'EXCESS_PRECISION_TYPE_FLOAT16',
!      and 'EXCESS_PRECISION_TYPE_FAST', the target should return the
       explicit excess precision that should be added depending on the
!      value set for '-fexcess-precision=[standard|fast|16]'.  Note that
       unpredictable explicit excess precision does not make sense, so a
!      target should never return 'FLT_EVAL_METHOD_UNPREDICTABLE' when
!      TYPE is 'EXCESS_PRECISION_TYPE_STANDARD',
!      'EXCESS_PRECISION_TYPE_FLOAT16' or 'EXCESS_PRECISION_TYPE_FAST'.
   Return a value, with the same meaning as the C99 macro
! 'FLT_EVAL_METHOD' that describes which excess precision should be
  applied.
  
   -- Target Hook: bool TARGET_C_BITINT_TYPE_INFO (int N, struct
            bitint_info *INFO)
!      This target hook returns true if '_BitInt(N)' is supported and
!      provides details on it.  '_BitInt(N)' is to be represented as
!      series of 'info->abi_limb_mode' 'CEIL (N, GET_MODE_PRECISION
!      (info->abi_limb_mode))' limbs, ordered from least significant to
!      most significant if '!info->big_endian', otherwise from most
!      significant to least significant.  If 'info->extended' is false,
       the bits above or equal to N are undefined when stored in a
       register or memory, otherwise they are zero or sign extended
!      depending on if it is 'unsigned _BitInt(N)' or one of '_BitInt(N)'
!      or 'signed _BitInt(N)'.  Alignment of the type is
!      'GET_MODE_ALIGNMENT (info->limb_mode)'.
  
   -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree
            TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE,
            int FOR_RETURN)
!      Like '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 '*PUNSIGNEDP' if the promotion
       should change signedness.  This function is called only for scalar
       _or pointer_ types.
  
       FOR_RETURN allows to distinguish the promotion of arguments and
!      return values.  If it is '1', a return value is being promoted and
!      'TARGET_FUNCTION_VALUE' must perform the same promotions done here.
!      If it is '2', the returned mode should be that of the register in
       which an incoming parameter is copied, or the outgoing result is
       computed; then the hook should return the same mode as
!      'promote_mode', though the signedness may be different.
  
       TYPE can be NULL when promoting function arguments of libcalls.
  
       The default is to not promote arguments and return values.  You can
       also define the hook to
!      'default_promote_function_mode_always_promote' if you would like to
!      apply the same rules given by 'PROMOTE_MODE'.
  
   -- Macro: PARM_BOUNDARY
       Normal alignment required for function parameters on the stack, in
--- 34243,34304 ----
   -- Target Hook: enum flt_eval_method TARGET_C_EXCESS_PRECISION (enum
            excess_precision_type TYPE)
       Return a value, with the same meaning as the C99 macro
!      ‘FLT_EVAL_METHOD’ that describes which excess precision should be
!      applied.  TYPE is either ‘EXCESS_PRECISION_TYPE_IMPLICIT’,
!      ‘EXCESS_PRECISION_TYPE_FAST’, ‘EXCESS_PRECISION_TYPE_STANDARD’, or
!      ‘EXCESS_PRECISION_TYPE_FLOAT16’.  For
!      ‘EXCESS_PRECISION_TYPE_IMPLICIT’, the target should return which
       precision and range operations will be implictly evaluated in
       regardless of the excess precision explicitly added.  For
!      ‘EXCESS_PRECISION_TYPE_STANDARD’, ‘EXCESS_PRECISION_TYPE_FLOAT16’,
!      and ‘EXCESS_PRECISION_TYPE_FAST’, the target should return the
       explicit excess precision that should be added depending on the
!      value set for ‘-fexcess-precision=[standard|fast|16]’.  Note that
       unpredictable explicit excess precision does not make sense, so a
!      target should never return ‘FLT_EVAL_METHOD_UNPREDICTABLE’ when
!      TYPE is ‘EXCESS_PRECISION_TYPE_STANDARD’,
!      ‘EXCESS_PRECISION_TYPE_FLOAT16’ or ‘EXCESS_PRECISION_TYPE_FAST’.
   Return a value, with the same meaning as the C99 macro
! ‘FLT_EVAL_METHOD’ that describes which excess precision should be
  applied.
  
   -- Target Hook: bool TARGET_C_BITINT_TYPE_INFO (int N, struct
            bitint_info *INFO)
!      This target hook returns true if ‘_BitInt(N)’ is supported and
!      provides details on it.  ‘_BitInt(N)’ is to be represented as
!      series of ‘info->abi_limb_mode’ ‘CEIL (N, GET_MODE_PRECISION
!      (info->abi_limb_mode))’ limbs, ordered from least significant to
!      most significant if ‘!info->big_endian’, otherwise from most
!      significant to least significant.  If ‘info->extended’ is false,
       the bits above or equal to N are undefined when stored in a
       register or memory, otherwise they are zero or sign extended
!      depending on if it is ‘unsigned _BitInt(N)’ or one of ‘_BitInt(N)’
!      or ‘signed _BitInt(N)’.  Alignment of the type is
!      ‘GET_MODE_ALIGNMENT (info->limb_mode)’.
  
   -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree
            TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE,
            int FOR_RETURN)
!      Like ‘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 ‘*PUNSIGNEDP’ if the promotion
       should change signedness.  This function is called only for scalar
       _or pointer_ types.
  
       FOR_RETURN allows to distinguish the promotion of arguments and
!      return values.  If it is ‘1’, a return value is being promoted and
!      ‘TARGET_FUNCTION_VALUE’ must perform the same promotions done here.
!      If it is ‘2’, the returned mode should be that of the register in
       which an incoming parameter is copied, or the outgoing result is
       computed; then the hook should return the same mode as
!      ‘promote_mode’, though the signedness may be different.
  
       TYPE can be NULL when promoting function arguments of libcalls.
  
       The default is to not promote arguments and return values.  You can
       also define the hook to
!      ‘default_promote_function_mode_always_promote’ if you would like to
!      apply the same rules given by ‘PROMOTE_MODE’.
  
   -- Macro: PARM_BOUNDARY
       Normal alignment required for function parameters on the stack, in
*************** applied.
*** 34309,34329 ****
       Define this macro to the minimum alignment enforced by hardware for
       the stack pointer on this machine.  The definition is a C
       expression for the desired alignment (measured in bits).  This
!      value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not
       defined.  On most machines, this should be the same as
!      'PARM_BOUNDARY'.
  
   -- Macro: PREFERRED_STACK_BOUNDARY
       Define this macro if you wish to preserve a certain alignment for
       the stack pointer, greater than what the hardware enforces.  The
       definition is a C expression for the desired alignment (measured in
       bits).  This macro must evaluate to a value equal to or larger than
!      'STACK_BOUNDARY'.
  
   -- Macro: INCOMING_STACK_BOUNDARY
       Define this macro if the incoming stack boundary may be different
!      from 'PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
!      value equal to or larger than 'STACK_BOUNDARY'.
  
   -- Macro: FUNCTION_BOUNDARY
       Alignment required for a function entry point, in bits.
--- 34310,34330 ----
       Define this macro to the minimum alignment enforced by hardware for
       the stack pointer on this machine.  The definition is a C
       expression for the desired alignment (measured in bits).  This
!      value is used as a default if ‘PREFERRED_STACK_BOUNDARY’ is not
       defined.  On most machines, this should be the same as
!      ‘PARM_BOUNDARY’.
  
   -- Macro: PREFERRED_STACK_BOUNDARY
       Define this macro if you wish to preserve a certain alignment for
       the stack pointer, greater than what the hardware enforces.  The
       definition is a C expression for the desired alignment (measured in
       bits).  This macro must evaluate to a value equal to or larger than
!      ‘STACK_BOUNDARY’.
  
   -- Macro: INCOMING_STACK_BOUNDARY
       Define this macro if the incoming stack boundary may be different
!      from ‘PREFERRED_STACK_BOUNDARY’.  This macro must evaluate to a
!      value equal to or larger than ‘STACK_BOUNDARY’.
  
   -- Macro: FUNCTION_BOUNDARY
       Alignment required for a function entry point, in bits.
*************** applied.
*** 34337,34373 ****
   -- Target Hook: HOST_WIDE_INT 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, 'BIGGEST_ALIGNMENT' is used.
  
   -- Macro: MALLOC_ABI_ALIGNMENT
       Alignment, in bits, a C conformant malloc implementation has to
!      provide.  If not defined, the default value is 'BITS_PER_WORD'.
  
   -- Macro: ATTRIBUTE_ALIGNED_VALUE
!      Alignment used by the '__attribute__ ((aligned))' construct.  If
!      not defined, the default value is 'BIGGEST_ALIGNMENT'.
  
   -- Macro: MINIMUM_ATOMIC_ALIGNMENT
       If defined, the smallest alignment, in bits, that can be given to
       an object that can be referenced in one operation, without
!      disturbing any nearby object.  Normally, this is 'BITS_PER_UNIT',
       but may be larger on machines that don't have byte or half-word
       store operations.
  
   -- Macro: BIGGEST_FIELD_ALIGNMENT
       Biggest alignment that any structure or union field can require on
       this machine, in bits.  If defined, this overrides
!      'BIGGEST_ALIGNMENT' for structure and union fields only, unless the
!      field alignment has been set by the '__attribute__ ((aligned (N)))'
       construct.
  
   -- Macro: ADJUST_FIELD_ALIGN (FIELD, TYPE, COMPUTED)
       An expression for the alignment of a structure field FIELD of type
       TYPE if the alignment computed in the usual way (including applying
!      of 'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the
       alignment) is COMPUTED.  It overrides alignment only if the field
!      alignment has not been set by the '__attribute__ ((aligned (N)))'
!      construct.  Note that FIELD may be 'NULL_TREE' in case we just
       query for the minimum alignment of a field of type TYPE in
       structure context.
  
--- 34338,34374 ----
   -- Target Hook: HOST_WIDE_INT 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, ‘BIGGEST_ALIGNMENT’ is used.
  
   -- Macro: MALLOC_ABI_ALIGNMENT
       Alignment, in bits, a C conformant malloc implementation has to
!      provide.  If not defined, the default value is ‘BITS_PER_WORD’.
  
   -- Macro: ATTRIBUTE_ALIGNED_VALUE
!      Alignment used by the ‘__attribute__ ((aligned))’ construct.  If
!      not defined, the default value is ‘BIGGEST_ALIGNMENT’.
  
   -- Macro: MINIMUM_ATOMIC_ALIGNMENT
       If defined, the smallest alignment, in bits, that can be given to
       an object that can be referenced in one operation, without
!      disturbing any nearby object.  Normally, this is ‘BITS_PER_UNIT’,
       but may be larger on machines that don't have byte or half-word
       store operations.
  
   -- Macro: BIGGEST_FIELD_ALIGNMENT
       Biggest alignment that any structure or union field can require on
       this machine, in bits.  If defined, this overrides
!      ‘BIGGEST_ALIGNMENT’ for structure and union fields only, unless the
!      field alignment has been set by the ‘__attribute__ ((aligned (N)))’
       construct.
  
   -- Macro: ADJUST_FIELD_ALIGN (FIELD, TYPE, COMPUTED)
       An expression for the alignment of a structure field FIELD of type
       TYPE if the alignment computed in the usual way (including applying
!      of ‘BIGGEST_ALIGNMENT’ and ‘BIGGEST_FIELD_ALIGNMENT’ to the
       alignment) is COMPUTED.  It overrides alignment only if the field
!      alignment has not been set by the ‘__attribute__ ((aligned (N)))’
!      construct.  Note that FIELD may be ‘NULL_TREE’ in case we just
       query for the minimum alignment of a field of type TYPE in
       structure context.
  
*************** applied.
*** 34375,34407 ****
       Biggest stack alignment guaranteed by the backend.  Use this macro
       to specify the maximum alignment of a variable on stack.
  
!      If not defined, the default value is 'STACK_BOUNDARY'.
  
   -- Macro: MAX_OFILE_ALIGNMENT
       Biggest alignment supported by the object file format of this
       machine.  Use this macro to limit the alignment which can be
!      specified using the '__attribute__ ((aligned (N)))' construct for
       functions and objects with static storage duration.  The alignment
       of automatic objects may exceed the object file format maximum up
       to the maximum supported by GCC. If not defined, the default value
!      is 'BIGGEST_ALIGNMENT'.
  
!      On systems that use ELF, the default (in 'config/elfos.h') is the
       largest supported 32-bit ELF section alignment representable on a
!      32-bit host e.g. '(((uint64_t) 1 << 28) * 8)'.  On 32-bit ELF the
!      largest supported section alignment in bits is '(0x80000000 * 8)',
       but this is not representable on 32-bit hosts.
  
   -- Target Hook: void TARGET_LOWER_LOCAL_DECL_ALIGNMENT (tree DECL)
       Define this hook to lower alignment of local, parm or result decl
!      '(DECL)'.
  
   -- Target Hook: HOST_WIDE_INT TARGET_STATIC_RTX_ALIGNMENT (machine_mode
            MODE)
       This hook returns the preferred alignment in bits for a
       statically-allocated rtx, such as a constant pool entry.  MODE is
       the mode of the rtx.  The default implementation returns
!      'GET_MODE_ALIGNMENT (MODE)'.
  
   -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
       If defined, a C expression to compute the alignment for a variable
--- 34376,34408 ----
       Biggest stack alignment guaranteed by the backend.  Use this macro
       to specify the maximum alignment of a variable on stack.
  
!      If not defined, the default value is ‘STACK_BOUNDARY’.
  
   -- Macro: MAX_OFILE_ALIGNMENT
       Biggest alignment supported by the object file format of this
       machine.  Use this macro to limit the alignment which can be
!      specified using the ‘__attribute__ ((aligned (N)))’ construct for
       functions and objects with static storage duration.  The alignment
       of automatic objects may exceed the object file format maximum up
       to the maximum supported by GCC. If not defined, the default value
!      is ‘BIGGEST_ALIGNMENT’.
  
!      On systems that use ELF, the default (in ‘config/elfos.h’) is the
       largest supported 32-bit ELF section alignment representable on a
!      32-bit host e.g. ‘(((uint64_t) 1 << 28) * 8)’.  On 32-bit ELF the
!      largest supported section alignment in bits is ‘(0x80000000 * 8)’,
       but this is not representable on 32-bit hosts.
  
   -- Target Hook: void TARGET_LOWER_LOCAL_DECL_ALIGNMENT (tree DECL)
       Define this hook to lower alignment of local, parm or result decl
!      ‘(DECL)’.
  
   -- Target Hook: HOST_WIDE_INT TARGET_STATIC_RTX_ALIGNMENT (machine_mode
            MODE)
       This hook returns the preferred alignment in bits for a
       statically-allocated rtx, such as a constant pool entry.  MODE is
       the mode of the rtx.  The default implementation returns
!      ‘GET_MODE_ALIGNMENT (MODE)’.
  
   -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
       If defined, a C expression to compute the alignment for a variable
*************** applied.
*** 34413,34423 ****
  
       One use of this macro is to increase alignment of medium-size data
       to make it all fit in fewer cache lines.  Another is to cause
!      character arrays to be word-aligned so that 'strcpy' calls that
       copy constants to character arrays can be done inline.
  
   -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN)
!      Similar to 'DATA_ALIGNMENT', but for the cases where the ABI
       mandates some alignment increase, instead of optimization only
       purposes.  E.g. AMD x86-64 psABI says that variables with array
       type larger than 15 bytes must be aligned to 16 byte boundaries.
--- 34414,34424 ----
  
       One use of this macro is to increase alignment of medium-size data
       to make it all fit in fewer cache lines.  Another is to cause
!      character arrays to be word-aligned so that ‘strcpy’ calls that
       copy constants to character arrays can be done inline.
  
   -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN)
!      Similar to ‘DATA_ALIGNMENT’, but for the cases where the ABI
       mandates some alignment increase, instead of optimization only
       purposes.  E.g. AMD x86-64 psABI says that variables with array
       type larger than 15 bytes must be aligned to 16 byte boundaries.
*************** applied.
*** 34433,34441 ****
       The default definition just returns BASIC_ALIGN.
  
       The typical use of this hook is to increase alignment for string
!      constants to be word aligned so that 'strcpy' calls that copy
       constants can be done inline.  The function
!      'constant_alignment_word_strings' provides such a definition.
  
   -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
       If defined, a C expression to compute the alignment for a variable
--- 34434,34442 ----
       The default definition just returns BASIC_ALIGN.
  
       The typical use of this hook is to increase alignment for string
!      constants to be word aligned so that ‘strcpy’ calls that copy
       constants can be done inline.  The function
!      ‘constant_alignment_word_strings’ provides such a definition.
  
   -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
       If defined, a C expression to compute the alignment for a variable
*************** applied.
*** 34466,34472 ****
       the slot.
  
       If this macro is not defined, then BASIC-ALIGN is used when TYPE is
!      'NULL'.  Otherwise, 'LOCAL_ALIGNMENT' will be used.
  
       This macro is to set alignment of stack slot to the maximum
       alignment of all possible modes which the slot may have.
--- 34467,34473 ----
       the slot.
  
       If this macro is not defined, then BASIC-ALIGN is used when TYPE is
!      ‘NULL’.  Otherwise, ‘LOCAL_ALIGNMENT’ will be used.
  
       This macro is to set alignment of stack slot to the maximum
       alignment of all possible modes which the slot may have.
*************** applied.
*** 34478,34485 ****
       If defined, a C expression to compute the alignment for a local
       variable DECL.
  
!      If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE
!      (DECL), DECL_ALIGN (DECL))' is used.
  
       One use of this macro is to increase alignment of medium-size data
       to make it all fit in fewer cache lines.
--- 34479,34486 ----
       If defined, a C expression to compute the alignment for a local
       variable DECL.
  
!      If this macro is not defined, then ‘LOCAL_ALIGNMENT (TREE_TYPE
!      (DECL), DECL_ALIGN (DECL))’ is used.
  
       One use of this macro is to increase alignment of medium-size data
       to make it all fit in fewer cache lines.
*************** applied.
*** 34496,34504 ****
  
   -- Macro: EMPTY_FIELD_BOUNDARY
       Alignment in bits to be given to a structure bit-field that follows
!      an empty field such as 'int : 0;'.
  
!      If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
  
   -- Macro: STRUCTURE_SIZE_BOUNDARY
       Number of bits which any structure or union's size must be a
--- 34497,34505 ----
  
   -- Macro: EMPTY_FIELD_BOUNDARY
       Alignment in bits to be given to a structure bit-field that follows
!      an empty field such as ‘int : 0;’.
  
!      If ‘PCC_BITFIELD_TYPE_MATTERS’ is true, it overrides this macro.
  
   -- Macro: STRUCTURE_SIZE_BOUNDARY
       Number of bits which any structure or union's size must be a
*************** applied.
*** 34506,34512 ****
       multiple of this.
  
       If you do not define this macro, the default is the same as
!      'BITS_PER_UNIT'.
  
   -- Macro: STRICT_ALIGNMENT
       Define this macro to be the value 1 if instructions will fail to
--- 34507,34513 ----
       multiple of this.
  
       If you do not define this macro, the default is the same as
!      ‘BITS_PER_UNIT’.
  
   -- Macro: STRICT_ALIGNMENT
       Define this macro to be the value 1 if instructions will fail to
*************** applied.
*** 34518,34532 ****
       handle alignment of bit-fields and the structures that contain
       them.
  
!      The behavior is that the type written for a named bit-field ('int',
!      'short', or other integer type) imposes an alignment for the entire
       structure, as if the structure really did contain an ordinary field
       of that type.  In addition, the bit-field is placed within the
       structure so that it would fit within such a field, not crossing a
       boundary for it.
  
       Thus, on most machines, a named bit-field whose type is written as
!      'int' would not cross a four-byte boundary, and would force
       four-byte alignment for the whole structure.  (The alignment used
       may not be four bytes; it is controlled by the other alignment
       parameters.)
--- 34519,34533 ----
       handle alignment of bit-fields and the structures that contain
       them.
  
!      The behavior is that the type written for a named bit-field (‘int’,
!      ‘short’, or other integer type) imposes an alignment for the entire
       structure, as if the structure really did contain an ordinary field
       of that type.  In addition, the bit-field is placed within the
       structure so that it would fit within such a field, not crossing a
       boundary for it.
  
       Thus, on most machines, a named bit-field whose type is written as
!      ‘int’ would not cross a four-byte boundary, and would force
       four-byte alignment for the whole structure.  (The alignment used
       may not be four bytes; it is controlled by the other alignment
       parameters.)
*************** applied.
*** 34539,34554 ****
  
       Note that if this macro is not defined, or its value is zero, some
       bit-fields may cross more than one alignment boundary.  The
!      compiler can support such references if there are 'insv', 'extv',
!      and 'extzv' insns that can directly reference memory.
  
       The other known way of making bit-fields work is to define
!      'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'.  Then
       every structure can be accessed with fullwords.
  
       Unless the machine has bit-field instructions or you define
!      'STRUCTURE_SIZE_BOUNDARY' that way, you must define
!      'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
  
       If your aim is to make GCC use the same conventions for laying out
       bit-fields as are used by another compiler, here is how to
--- 34540,34555 ----
  
       Note that if this macro is not defined, or its value is zero, some
       bit-fields may cross more than one alignment boundary.  The
!      compiler can support such references if there are ‘insv’, ‘extv’,
!      and ‘extzv’ insns that can directly reference memory.
  
       The other known way of making bit-fields work is to define
!      ‘STRUCTURE_SIZE_BOUNDARY’ as large as ‘BIGGEST_ALIGNMENT’.  Then
       every structure can be accessed with fullwords.
  
       Unless the machine has bit-field instructions or you define
!      ‘STRUCTURE_SIZE_BOUNDARY’ that way, you must define
!      ‘PCC_BITFIELD_TYPE_MATTERS’ to have a nonzero value.
  
       If your aim is to make GCC use the same conventions for laying out
       bit-fields as are used by another compiler, here is how to
*************** applied.
*** 34579,34607 ****
            }
  
       If this prints 2 and 5, then the compiler's behavior is what you
!      would get from 'PCC_BITFIELD_TYPE_MATTERS'.
  
   -- Macro: BITFIELD_NBYTES_LIMITED
!      Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
       to aligning a bit-field within the structure.
  
   -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
!      When '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.
  
   -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
!      This target hook should return 'true' if accesses to volatile
       bitfields should use the narrowest mode possible.  It should return
!      'false' if these accesses should use the bitfield container type.
  
!      The default is 'false'.
  
   -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
            machine_mode MODE)
       Return true if a structure, union or array containing FIELD should
!      be accessed using 'BLKMODE'.
  
       If FIELD is the only field in the structure, MODE is its mode,
       otherwise MODE is VOIDmode.  MODE is provided in the case where
--- 34580,34608 ----
            }
  
       If this prints 2 and 5, then the compiler's behavior is what you
!      would get from ‘PCC_BITFIELD_TYPE_MATTERS’.
  
   -- Macro: BITFIELD_NBYTES_LIMITED
!      Like ‘PCC_BITFIELD_TYPE_MATTERS’ except that its effect is limited
       to aligning a bit-field within the structure.
  
   -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
!      When ‘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.
  
   -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
!      This target hook should return ‘true’ if accesses to volatile
       bitfields should use the narrowest mode possible.  It should return
!      ‘false’ if these accesses should use the bitfield container type.
  
!      The default is ‘false’.
  
   -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
            machine_mode MODE)
       Return true if a structure, union or array containing FIELD should
!      be accessed using ‘BLKMODE’.
  
       If FIELD is the only field in the structure, MODE is its mode,
       otherwise MODE is VOIDmode.  MODE is provided in the case where
*************** applied.
*** 34617,34670 ****
       SPECIFIED.
  
       The default is to use SPECIFIED if it is larger; otherwise, use the
!      smaller of COMPUTED and 'BIGGEST_ALIGNMENT'
  
   -- Macro: MAX_FIXED_MODE_SIZE
       An integer expression for the size in bits of the largest integer
       machine mode that should actually be used.  All integer machine
       modes of this size or smaller can be used for structures and unions
       with the appropriate sizes.  If this macro is undefined,
!      'GET_MODE_BITSIZE (DImode)' is assumed.
  
   -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
!      If defined, an expression of type 'machine_mode' that specifies the
!      mode of the save area operand of a 'save_stack_LEVEL' named pattern
!      (*note Standard Names::).  SAVE_LEVEL is one of 'SAVE_BLOCK',
!      'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which of the three
       named patterns is having its mode specified.
  
!      You need not define this macro if it always returns 'Pmode'.  You
!      would most commonly define this macro if the 'save_stack_LEVEL'
       patterns need to support both a 32- and a 64-bit mode.
  
   -- Macro: STACK_SIZE_MODE
!      If defined, an expression of type 'machine_mode' that specifies the
!      mode of the size increment operand of an 'allocate_stack' named
       pattern (*note Standard Names::).
  
!      You need not define this macro if it always returns 'word_mode'.
!      You would most commonly define this macro if the 'allocate_stack'
       pattern needs to support both a 32- and a 64-bit mode.
  
   -- Target Hook: scalar_int_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
       This target hook should return the mode to be used for the return
       value of compare instructions expanded to libgcc calls.  If not
!      defined 'word_mode' is returned which is the right choice for a
       majority of targets.
  
   -- Target Hook: scalar_int_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
       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 'word_mode' is returned which is the right choice for a
       majority of targets.
  
   -- Target Hook: scalar_int_mode TARGET_UNWIND_WORD_MODE (void)
!      Return machine mode to be used for '_Unwind_Word' type.  The
!      default is to use 'word_mode'.
  
   -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
            RECORD_TYPE)
!      This target hook returns 'true' if bit-fields in the given
       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
       unit with the previous bit-field if their underlying types have
--- 34618,34671 ----
       SPECIFIED.
  
       The default is to use SPECIFIED if it is larger; otherwise, use the
!      smaller of COMPUTED and ‘BIGGEST_ALIGNMENT’
  
   -- Macro: MAX_FIXED_MODE_SIZE
       An integer expression for the size in bits of the largest integer
       machine mode that should actually be used.  All integer machine
       modes of this size or smaller can be used for structures and unions
       with the appropriate sizes.  If this macro is undefined,
!      ‘GET_MODE_BITSIZE (DImode)’ is assumed.
  
   -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
!      If defined, an expression of type ‘machine_mode’ that specifies the
!      mode of the save area operand of a ‘save_stack_LEVEL’ named pattern
!      (*note Standard Names::).  SAVE_LEVEL is one of ‘SAVE_BLOCK’,
!      ‘SAVE_FUNCTION’, or ‘SAVE_NONLOCAL’ and selects which of the three
       named patterns is having its mode specified.
  
!      You need not define this macro if it always returns ‘Pmode’.  You
!      would most commonly define this macro if the ‘save_stack_LEVEL’
       patterns need to support both a 32- and a 64-bit mode.
  
   -- Macro: STACK_SIZE_MODE
!      If defined, an expression of type ‘machine_mode’ that specifies the
!      mode of the size increment operand of an ‘allocate_stack’ named
       pattern (*note Standard Names::).
  
!      You need not define this macro if it always returns ‘word_mode’.
!      You would most commonly define this macro if the ‘allocate_stack’
       pattern needs to support both a 32- and a 64-bit mode.
  
   -- Target Hook: scalar_int_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
       This target hook should return the mode to be used for the return
       value of compare instructions expanded to libgcc calls.  If not
!      defined ‘word_mode’ is returned which is the right choice for a
       majority of targets.
  
   -- Target Hook: scalar_int_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
       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 ‘word_mode’ is returned which is the right choice for a
       majority of targets.
  
   -- Target Hook: scalar_int_mode TARGET_UNWIND_WORD_MODE (void)
!      Return machine mode to be used for ‘_Unwind_Word’ type.  The
!      default is to use ‘word_mode’.
  
   -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
            RECORD_TYPE)
!      This target hook returns ‘true’ if bit-fields in the given
       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
       unit with the previous bit-field if their underlying types have
*************** applied.
*** 34673,34679 ****
       bit-field; (ii) a zero-sized bit-field will affect the alignment of
       the whole enclosing structure, even if it is unnamed; except that
       (iii) a zero-sized bit-field will be disregarded unless it follows
!      another bit-field of nonzero size.  If this hook returns 'true',
       other macros that control bit-field layout are ignored.
  
       When a bit-field is inserted into a packed record, the whole size
--- 34674,34680 ----
       bit-field; (ii) a zero-sized bit-field will affect the alignment of
       the whole enclosing structure, even if it is unnamed; except that
       (iii) a zero-sized bit-field will be disregarded unless it follows
!      another bit-field of nonzero size.  If this hook returns ‘true’,
       other macros that control bit-field layout are ignored.
  
       When a bit-field is inserted into a packed record, the whole size
*************** applied.
*** 34684,34691 ****
       of that size is allocated).  In an unpacked record, this is the
       same as using alignment, but not equivalent when packing.
  
!      If both MS bit-fields and '__attribute__((packed))' are used, the
!      latter will take precedence.  If '__attribute__((packed))' is 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.
--- 34685,34692 ----
       of that size is allocated).  In an unpacked record, this is the
       same as using alignment, but not equivalent when packing.
  
!      If both MS bit-fields and ‘__attribute__((packed))’ are used, the
!      latter will take precedence.  If ‘__attribute__((packed))’ is 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.
*************** applied.
*** 34715,34742 ****
       part of a C++ mangled name.  The TYPE argument is the tree
       structure representing the type to be mangled.  The hook may be
       applied to trees which are not target-specific fundamental types;
!      it should return 'NULL' for all such types, as well as arguments it
!      does not recognize.  If the return value is not 'NULL', it must
       point to a statically-allocated string constant.
  
       Target-specific fundamental types might be new fundamental types or
       qualified versions of ordinary fundamental types.  Encode new
!      fundamental types as 'u N NAME', where NAME is the name used for
       the type in source code, and N is the length of NAME in decimal.
!      Encode qualified versions of ordinary types as 'U N NAME CODE',
       where NAME is the name used for the type qualifier in source code,
       N is the length of NAME as above, and CODE is the code used to
       represent the unqualified version of this type.  (See
!      'write_builtin_type' in 'cp/mangle.cc' for the list of codes.)  In
       both cases the spaces are for clarity; do not include any spaces in
       your string.
  
       This hook is applied to types prior to typedef resolution.  If the
       mangled name for a particular type depends only on that type's main
       variant, you can perform typedef resolution yourself using
!      'TYPE_MAIN_VARIANT' before mangling.
  
!      The default version of this hook always returns 'NULL', which is
       appropriate for a target that does not define any new fundamental
       types.
  
--- 34716,34743 ----
       part of a C++ mangled name.  The TYPE argument is the tree
       structure representing the type to be mangled.  The hook may be
       applied to trees which are not target-specific fundamental types;
!      it should return ‘NULL’ for all such types, as well as arguments it
!      does not recognize.  If the return value is not ‘NULL’, it must
       point to a statically-allocated string constant.
  
       Target-specific fundamental types might be new fundamental types or
       qualified versions of ordinary fundamental types.  Encode new
!      fundamental types as ‘u N NAME’, where NAME is the name used for
       the type in source code, and N is the length of NAME in decimal.
!      Encode qualified versions of ordinary types as ‘U N NAME CODE’,
       where NAME is the name used for the type qualifier in source code,
       N is the length of NAME as above, and CODE is the code used to
       represent the unqualified version of this type.  (See
!      ‘write_builtin_type’ in ‘cp/mangle.cc’ for the list of codes.)  In
       both cases the spaces are for clarity; do not include any spaces in
       your string.
  
       This hook is applied to types prior to typedef resolution.  If the
       mangled name for a particular type depends only on that type's main
       variant, you can perform typedef resolution yourself using
!      ‘TYPE_MAIN_VARIANT’ before mangling.
  
!      The default version of this hook always returns ‘NULL’, which is
       appropriate for a target that does not define any new fundamental
       types.
  
*************** applied.
*** 34747,34753 ****
       regardless of ISA flags the library is compiled with.  This hook
       allows creating tinfo symbols even for those cases, by temporarily
       creating each corresponding fundamental type trees, calling the
!      CALLBACK function on it and setting the type back to 'nullptr'.
  
  
  File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
--- 34748,34754 ----
       regardless of ISA flags the library is compiled with.  This hook
       allows creating tinfo symbols even for those cases, by temporarily
       creating each corresponding fundamental type trees, calling the
!      CALLBACK function on it and setting the type back to ‘nullptr’.
  
  
  File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
*************** the previous section, these apply to spe
*** 34761,34961 ****
  languages, rather than to fundamental aspects of storage layout.
  
   -- Macro: INT_TYPE_SIZE
!      A C expression for the size in bits of the type 'int' on the target
       machine.  If you don't define this, the default is one word.
  
   -- Macro: SHORT_TYPE_SIZE
!      A C expression for the size in bits of the type 'short' on the
       target machine.  If you don't define this, the default is half a
       word.  (If this would be less than one storage unit, it is rounded
       up to one unit.)
  
   -- Macro: LONG_TYPE_SIZE
!      A C expression for the size in bits of the type 'long' on the
       target machine.  If you don't define this, the default is one word.
  
   -- Macro: ADA_LONG_TYPE_SIZE
       On some machines, the size used for the Ada equivalent of the type
!      'long' by a native Ada compiler differs from that used by C.  In
       that situation, define this macro to be a C expression to be used
       for the size of that type.  If you don't define this, the default
!      is the value of 'LONG_TYPE_SIZE'.
  
   -- Macro: LONG_LONG_TYPE_SIZE
!      A C expression for the size in bits of the type 'long long' on the
       target machine.  If you don't define this, the default is two
       words.  If you want to support GNU Ada on your machine, the value
       of this macro must be at least 64.
  
   -- Macro: CHAR_TYPE_SIZE
!      A C expression for the size in bits of the type 'char' on the
       target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT'.
  
   -- Macro: BOOL_TYPE_SIZE
!      A C expression for the size in bits of the C++ type 'bool' and C99
!      type '_Bool' on the target machine.  If you don't define this, and
!      you probably shouldn't, the default is 'CHAR_TYPE_SIZE'.
  
   -- Macro: FLOAT_TYPE_SIZE
!      A C expression for the size in bits of the type 'float' on the
       target machine.  If you don't define this, the default is one word.
  
   -- Macro: DOUBLE_TYPE_SIZE
!      A C expression for the size in bits of the type 'double' on the
       target machine.  If you don't define this, the default is two
       words.
  
   -- Macro: LONG_DOUBLE_TYPE_SIZE
!      A C expression for the size in bits of the type 'long double' on
       the target machine.  If you don't define this, the default is two
       words.
  
   -- Macro: SHORT_FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type 'short _Fract' on
       the target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT'.
  
   -- Macro: FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type '_Fract' on the
       target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 2'.
  
   -- Macro: LONG_FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type 'long _Fract' on
       the target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 4'.
  
   -- Macro: LONG_LONG_FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type 'long long _Fract'
       on the target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 8'.
  
   -- Macro: SHORT_ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type 'short _Accum' on
       the target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 2'.
  
   -- Macro: ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type '_Accum' on the
       target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 4'.
  
   -- Macro: LONG_ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type 'long _Accum' on
       the target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 8'.
  
   -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type 'long long _Accum'
       on the target machine.  If you don't define this, the default is
!      'BITS_PER_UNIT * 16'.
  
   -- Macro: LIBGCC2_GNU_PREFIX
!      This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target
       hook and should be defined if that hook is overriden to be true.
!      It causes function names in libgcc to be changed to use a '__gnu_'
!      prefix for their name rather than the default '__'.  A port which
!      uses this macro should also arrange to use 't-gnu-prefix' in the
!      libgcc 'config.host'.
  
   -- Macro: WIDEST_HARDWARE_FP_SIZE
       A C expression for the size in bits of the widest floating-point
       format supported by the hardware.  If you define this macro, you
       must specify a value less than or equal to the value of
!      'LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
!      value of 'LONG_DOUBLE_TYPE_SIZE' is the default.
  
   -- Macro: DEFAULT_SIGNED_CHAR
       An expression whose value is 1 or 0, according to whether the type
!      'char' should be signed or unsigned by default.  The user can
!      always override this default with the options '-fsigned-char' and
!      '-funsigned-char'.
  
   -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
       This target hook should return true if the compiler should give an
!      '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
!      'enum' types should be allocated like 'int'.
  
       The default is to return false.
  
   -- Macro: SIZE_TYPE
       A C expression for a string describing the name of the data type to
!      use for size values.  The typedef name 'size_t' is defined using
       the contents of the string.
  
       The string can contain more than one keyword.  If so, separate them
!      with spaces, and write first any length keyword, then 'unsigned' if
!      appropriate, and finally 'int'.  The string must exactly match one
       of the data type names defined in the function
!      'c_common_nodes_and_builtins' in the file 'c-family/c-common.cc'.
!      You may not omit 'int' or change the order--that would cause the
       compiler to crash on startup.
  
!      If you don't define this macro, the default is '"long unsigned
!      int"'.
  
   -- Macro: SIZETYPE
!      GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype'
!      and 'sbitsizetype') for expressions dealing with size.  This macro
       is a C expression for a string describing the name of the data type
!      from which the precision of 'sizetype' is extracted.
  
!      The string has the same restrictions as 'SIZE_TYPE' string.
  
!      If you don't define this macro, the default is 'SIZE_TYPE'.
  
   -- Macro: PTRDIFF_TYPE
       A C expression for a string describing the name of the data type to
       use for the result of subtracting two pointers.  The typedef name
!      'ptrdiff_t' is defined using the contents of the string.  See
!      'SIZE_TYPE' above for more information.
  
!      If you don't define this macro, the default is '"long int"'.
  
   -- Macro: WCHAR_TYPE
       A C expression for a string describing the name of the data type to
!      use for wide characters.  The typedef name 'wchar_t' is defined
!      using the contents of the string.  See 'SIZE_TYPE' above for more
       information.
  
!      If you don't define this macro, the default is '"int"'.
  
   -- Macro: WCHAR_TYPE_SIZE
       A C expression for the size in bits of the data type for wide
!      characters.  This is used in 'cpp', which cannot make use of
!      'WCHAR_TYPE'.
  
   -- Macro: WINT_TYPE
       A C expression for a string describing the name of the data type to
!      use for wide characters passed to 'printf' and returned from
!      'getwc'.  The typedef name 'wint_t' is defined using the contents
!      of the string.  See 'SIZE_TYPE' above for more information.
  
!      If you don't define this macro, the default is '"unsigned int"'.
  
   -- Macro: INTMAX_TYPE
       A C expression for a string describing the name of the data type
       that can represent any value of any standard or extended signed
!      integer type.  The typedef name 'intmax_t' is defined using the
!      contents of the string.  See 'SIZE_TYPE' above for more
       information.
  
       If you don't define this macro, the default is the first of
!      '"int"', '"long int"', or '"long long int"' that has as much
!      precision as 'long long int'.
  
   -- Macro: UINTMAX_TYPE
       A C expression for a string describing the name of the data type
       that can represent any value of any standard or extended unsigned
!      integer type.  The typedef name 'uintmax_t' is defined using the
!      contents of the string.  See 'SIZE_TYPE' above for more
       information.
  
       If you don't define this macro, the default is the first of
!      '"unsigned int"', '"long unsigned int"', or '"long long unsigned
!      int"' that has as much precision as 'long long unsigned int'.
  
   -- Macro: SIG_ATOMIC_TYPE
   -- Macro: INT8_TYPE
--- 34762,34962 ----
  languages, rather than to fundamental aspects of storage layout.
  
   -- Macro: INT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘int’ on the target
       machine.  If you don't define this, the default is one word.
  
   -- Macro: SHORT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘short’ on the
       target machine.  If you don't define this, the default is half a
       word.  (If this would be less than one storage unit, it is rounded
       up to one unit.)
  
   -- Macro: LONG_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long’ on the
       target machine.  If you don't define this, the default is one word.
  
   -- Macro: ADA_LONG_TYPE_SIZE
       On some machines, the size used for the Ada equivalent of the type
!      ‘long’ by a native Ada compiler differs from that used by C.  In
       that situation, define this macro to be a C expression to be used
       for the size of that type.  If you don't define this, the default
!      is the value of ‘LONG_TYPE_SIZE’.
  
   -- Macro: LONG_LONG_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long long’ on the
       target machine.  If you don't define this, the default is two
       words.  If you want to support GNU Ada on your machine, the value
       of this macro must be at least 64.
  
   -- Macro: CHAR_TYPE_SIZE
!      A C expression for the size in bits of the type ‘char’ on the
       target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT’.
  
   -- Macro: BOOL_TYPE_SIZE
!      A C expression for the size in bits of the C++ type ‘bool’ and C99
!      type ‘_Bool’ on the target machine.  If you don't define this, and
!      you probably shouldn't, the default is ‘CHAR_TYPE_SIZE’.
  
   -- Macro: FLOAT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘float’ on the
       target machine.  If you don't define this, the default is one word.
  
   -- Macro: DOUBLE_TYPE_SIZE
!      A C expression for the size in bits of the type ‘double’ on the
       target machine.  If you don't define this, the default is two
       words.
  
   -- Macro: LONG_DOUBLE_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long double’ on
       the target machine.  If you don't define this, the default is two
       words.
  
   -- Macro: SHORT_FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘short _Fract’ on
       the target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT’.
  
   -- Macro: FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘_Fract’ on the
       target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 2’.
  
   -- Macro: LONG_FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long _Fract’ on
       the target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 4’.
  
   -- Macro: LONG_LONG_FRACT_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long long _Fract’
       on the target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 8’.
  
   -- Macro: SHORT_ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type ‘short _Accum’ on
       the target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 2’.
  
   -- Macro: ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type ‘_Accum’ on the
       target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 4’.
  
   -- Macro: LONG_ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long _Accum’ on
       the target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 8’.
  
   -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
!      A C expression for the size in bits of the type ‘long long _Accum’
       on the target machine.  If you don't define this, the default is
!      ‘BITS_PER_UNIT * 16’.
  
   -- Macro: LIBGCC2_GNU_PREFIX
!      This macro corresponds to the ‘TARGET_LIBFUNC_GNU_PREFIX’ target
       hook and should be defined if that hook is overriden to be true.
!      It causes function names in libgcc to be changed to use a ‘__gnu_’
!      prefix for their name rather than the default ‘__’.  A port which
!      uses this macro should also arrange to use ‘t-gnu-prefix’ in the
!      libgcc ‘config.host’.
  
   -- Macro: WIDEST_HARDWARE_FP_SIZE
       A C expression for the size in bits of the widest floating-point
       format supported by the hardware.  If you define this macro, you
       must specify a value less than or equal to the value of
!      ‘LONG_DOUBLE_TYPE_SIZE’.  If you do not define this macro, the
!      value of ‘LONG_DOUBLE_TYPE_SIZE’ is the default.
  
   -- Macro: DEFAULT_SIGNED_CHAR
       An expression whose value is 1 or 0, according to whether the type
!      ‘char’ should be signed or unsigned by default.  The user can
!      always override this default with the options ‘-fsigned-char’ and
!      ‘-funsigned-char’.
  
   -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
       This target hook should return true if the compiler should give an
!      ‘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
!      ‘enum’ types should be allocated like ‘int’.
  
       The default is to return false.
  
   -- Macro: SIZE_TYPE
       A C expression for a string describing the name of the data type to
!      use for size values.  The typedef name ‘size_t’ is defined using
       the contents of the string.
  
       The string can contain more than one keyword.  If so, separate them
!      with spaces, and write first any length keyword, then ‘unsigned’ if
!      appropriate, and finally ‘int’.  The string must exactly match one
       of the data type names defined in the function
!      ‘c_common_nodes_and_builtins’ in the file ‘c-family/c-common.cc’.
!      You may not omit ‘int’ or change the order--that would cause the
       compiler to crash on startup.
  
!      If you don't define this macro, the default is ‘"long unsigned
!      int"’.
  
   -- Macro: SIZETYPE
!      GCC defines internal types (‘sizetype’, ‘ssizetype’, ‘bitsizetype’
!      and ‘sbitsizetype’) for expressions dealing with size.  This macro
       is a C expression for a string describing the name of the data type
!      from which the precision of ‘sizetype’ is extracted.
  
!      The string has the same restrictions as ‘SIZE_TYPE’ string.
  
!      If you don't define this macro, the default is ‘SIZE_TYPE’.
  
   -- Macro: PTRDIFF_TYPE
       A C expression for a string describing the name of the data type to
       use for the result of subtracting two pointers.  The typedef name
!      ‘ptrdiff_t’ is defined using the contents of the string.  See
!      ‘SIZE_TYPE’ above for more information.
  
!      If you don't define this macro, the default is ‘"long int"’.
  
   -- Macro: WCHAR_TYPE
       A C expression for a string describing the name of the data type to
!      use for wide characters.  The typedef name ‘wchar_t’ is defined
!      using the contents of the string.  See ‘SIZE_TYPE’ above for more
       information.
  
!      If you don't define this macro, the default is ‘"int"’.
  
   -- Macro: WCHAR_TYPE_SIZE
       A C expression for the size in bits of the data type for wide
!      characters.  This is used in ‘cpp’, which cannot make use of
!      ‘WCHAR_TYPE’.
  
   -- Macro: WINT_TYPE
       A C expression for a string describing the name of the data type to
!      use for wide characters passed to ‘printf’ and returned from
!      ‘getwc’.  The typedef name ‘wint_t’ is defined using the contents
!      of the string.  See ‘SIZE_TYPE’ above for more information.
  
!      If you don't define this macro, the default is ‘"unsigned int"’.
  
   -- Macro: INTMAX_TYPE
       A C expression for a string describing the name of the data type
       that can represent any value of any standard or extended signed
!      integer type.  The typedef name ‘intmax_t’ is defined using the
!      contents of the string.  See ‘SIZE_TYPE’ above for more
       information.
  
       If you don't define this macro, the default is the first of
!      ‘"int"’, ‘"long int"’, or ‘"long long int"’ that has as much
!      precision as ‘long long int’.
  
   -- Macro: UINTMAX_TYPE
       A C expression for a string describing the name of the data type
       that can represent any value of any standard or extended unsigned
!      integer type.  The typedef name ‘uintmax_t’ is defined using the
!      contents of the string.  See ‘SIZE_TYPE’ above for more
       information.
  
       If you don't define this macro, the default is the first of
!      ‘"unsigned int"’, ‘"long unsigned int"’, or ‘"long long unsigned
!      int"’ that has as much precision as ‘long long unsigned int’.
  
   -- Macro: SIG_ATOMIC_TYPE
   -- Macro: INT8_TYPE
*************** languages, rather than to fundamental as
*** 34984,35001 ****
   -- Macro: UINT_FAST64_TYPE
   -- Macro: INTPTR_TYPE
   -- Macro: UINTPTR_TYPE
!      C expressions for the standard types 'sig_atomic_t', 'int8_t',
!      'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t',
!      'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t',
!      'int_least64_t', 'uint_least8_t', 'uint_least16_t',
!      'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t',
!      'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t',
!      'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'.  See
!      'SIZE_TYPE' above for more information.
  
       If any of these macros evaluates to a null pointer, the
       corresponding type is not supported; if GCC is configured to
!      provide '<stdint.h>' in such a case, the header provided may not
       conform to C99, depending on the type in question.  The defaults
       for all of these macros are null pointers.
  
--- 34985,35002 ----
   -- Macro: UINT_FAST64_TYPE
   -- Macro: INTPTR_TYPE
   -- Macro: UINTPTR_TYPE
!      C expressions for the standard types ‘sig_atomic_t’, ‘int8_t’,
!      ‘int16_t’, ‘int32_t’, ‘int64_t’, ‘uint8_t’, ‘uint16_t’, ‘uint32_t’,
!      ‘uint64_t’, ‘int_least8_t’, ‘int_least16_t’, ‘int_least32_t’,
!      ‘int_least64_t’, ‘uint_least8_t’, ‘uint_least16_t’,
!      ‘uint_least32_t’, ‘uint_least64_t’, ‘int_fast8_t’, ‘int_fast16_t’,
!      ‘int_fast32_t’, ‘int_fast64_t’, ‘uint_fast8_t’, ‘uint_fast16_t’,
!      ‘uint_fast32_t’, ‘uint_fast64_t’, ‘intptr_t’, and ‘uintptr_t’.  See
!      ‘SIZE_TYPE’ above for more information.
  
       If any of these macros evaluates to a null pointer, the
       corresponding type is not supported; if GCC is configured to
!      provide ‘<stdint.h>’ in such a case, the header provided may not
       conform to C99, depending on the type in question.  The defaults
       for all of these macros are null pointers.
  
*************** languages, rather than to fundamental as
*** 35018,35039 ****
       vtable_index is odd, we can distinguish which variant of the union
       is in use.  But, on some platforms function pointers can be odd,
       and so this doesn't work.  In that case, we use the low-order bit
!      of the 'delta' field, and shift the remainder of the 'delta' field
       to the left.
  
       GCC will automatically make the right selection about where to
!      store this bit using the 'FUNCTION_BOUNDARY' setting for your
       platform.  However, some platforms such as ARM/Thumb have
!      'FUNCTION_BOUNDARY' set such that functions always start at even
       addresses, but the lowest bit of pointers to functions indicate
       whether the function at that address is in ARM or Thumb mode.  If
       this is the case of your architecture, you should define this macro
!      to 'ptrmemfunc_vbit_in_delta'.
  
       In general, you should not have to define this macro.  On
       architectures in which function addresses are always even,
!      according to 'FUNCTION_BOUNDARY', GCC will automatically define
!      this macro to 'ptrmemfunc_vbit_in_pfn'.
  
   -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
       Normally, the C++ compiler uses function pointers in vtables.  This
--- 35019,35040 ----
       vtable_index is odd, we can distinguish which variant of the union
       is in use.  But, on some platforms function pointers can be odd,
       and so this doesn't work.  In that case, we use the low-order bit
!      of the ‘delta’ field, and shift the remainder of the ‘delta’ field
       to the left.
  
       GCC will automatically make the right selection about where to
!      store this bit using the ‘FUNCTION_BOUNDARY’ setting for your
       platform.  However, some platforms such as ARM/Thumb have
!      ‘FUNCTION_BOUNDARY’ set such that functions always start at even
       addresses, but the lowest bit of pointers to functions indicate
       whether the function at that address is in ARM or Thumb mode.  If
       this is the case of your architecture, you should define this macro
!      to ‘ptrmemfunc_vbit_in_delta’.
  
       In general, you should not have to define this macro.  On
       architectures in which function addresses are always even,
!      according to ‘FUNCTION_BOUNDARY’, GCC will automatically define
!      this macro to ‘ptrmemfunc_vbit_in_pfn’.
  
   -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
       Normally, the C++ compiler uses function pointers in vtables.  This
*************** languages, rather than to fundamental as
*** 35055,35061 ****
   -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
       There are a few non-descriptor entries in the vtable at offsets
       below zero.  If these entries must be padded (say, to preserve the
!      alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to
       the number of words in each data entry.
  
  
--- 35056,35062 ----
   -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
       There are a few non-descriptor entries in the vtable at offsets
       below zero.  If these entries must be padded (say, to preserve the
!      alignment specified by ‘TARGET_VTABLE_ENTRY_ALIGN’), set this to
       the number of words in each data entry.
  
  
*************** Registers have various characteristics.
*** 35092,35100 ****
  
   -- Macro: FIRST_PSEUDO_REGISTER
       Number of hardware registers known to the compiler.  They receive
!      numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo
       register's number really is assigned the number
!      'FIRST_PSEUDO_REGISTER'.
  
   -- Macro: FIXED_REGISTERS
       An initializer that says which registers are used for fixed
--- 35093,35101 ----
  
   -- Macro: FIRST_PSEUDO_REGISTER
       Number of hardware registers known to the compiler.  They receive
!      numbers 0 through ‘FIRST_PSEUDO_REGISTER-1’; thus, the first pseudo
       register's number really is assigned the number
!      ‘FIRST_PSEUDO_REGISTER’.
  
   -- Macro: FIXED_REGISTERS
       An initializer that says which registers are used for fixed
*************** Registers have various characteristics.
*** 35113,35149 ****
       The table initialized from this macro, and the table initialized by
       the following one, may be overridden at run time either
       automatically, by the actions of the macro
!      'CONDITIONAL_REGISTER_USAGE', or by the user with the command
!      options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'.
  
   -- Macro: CALL_USED_REGISTERS
!      Like 'FIXED_REGISTERS' but has 1 for each register that is
       clobbered (in general) by function calls as well as for fixed
       registers.  This macro therefore identifies the registers that are
       not available for general allocation of values that must live
       across function calls.
  
!      If a register has 0 in 'CALL_USED_REGISTERS', the compiler
       automatically saves it on function entry and restores it on
       function exit, if the register is used within the function.
  
!      Exactly one of 'CALL_USED_REGISTERS' and
!      'CALL_REALLY_USED_REGISTERS' must be defined.  Modern ports should
!      define 'CALL_REALLY_USED_REGISTERS'.
  
   -- Macro: CALL_REALLY_USED_REGISTERS
!      Like 'CALL_USED_REGISTERS' except this macro doesn't require that
!      the entire set of 'FIXED_REGISTERS' be included.
!      ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS').
  
!      Exactly one of 'CALL_USED_REGISTERS' and
!      'CALL_REALLY_USED_REGISTERS' must be defined.  Modern ports should
!      define 'CALL_REALLY_USED_REGISTERS'.
  
   -- Target Hook: const predefined_function_abi & TARGET_FNTYPE_ABI
            (const_tree TYPE)
       Return the ABI used by a function with type TYPE; see the
!      definition of '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.
  
--- 35114,35150 ----
       The table initialized from this macro, and the table initialized by
       the following one, may be overridden at run time either
       automatically, by the actions of the macro
!      ‘CONDITIONAL_REGISTER_USAGE’, or by the user with the command
!      options ‘-ffixed-REG’, ‘-fcall-used-REG’ and ‘-fcall-saved-REG’.
  
   -- Macro: CALL_USED_REGISTERS
!      Like ‘FIXED_REGISTERS’ but has 1 for each register that is
       clobbered (in general) by function calls as well as for fixed
       registers.  This macro therefore identifies the registers that are
       not available for general allocation of values that must live
       across function calls.
  
!      If a register has 0 in ‘CALL_USED_REGISTERS’, the compiler
       automatically saves it on function entry and restores it on
       function exit, if the register is used within the function.
  
!      Exactly one of ‘CALL_USED_REGISTERS’ and
!      ‘CALL_REALLY_USED_REGISTERS’ must be defined.  Modern ports should
!      define ‘CALL_REALLY_USED_REGISTERS’.
  
   -- Macro: CALL_REALLY_USED_REGISTERS
!      Like ‘CALL_USED_REGISTERS’ except this macro doesn't require that
!      the entire set of ‘FIXED_REGISTERS’ be included.
!      (‘CALL_USED_REGISTERS’ must be a superset of ‘FIXED_REGISTERS’).
  
!      Exactly one of ‘CALL_USED_REGISTERS’ and
!      ‘CALL_REALLY_USED_REGISTERS’ must be defined.  Modern ports should
!      define ‘CALL_REALLY_USED_REGISTERS’.
  
   -- Target Hook: const predefined_function_abi & TARGET_FNTYPE_ABI
            (const_tree TYPE)
       Return the ABI used by a function with type TYPE; see the
!      definition of ‘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.
  
*************** Registers have various characteristics.
*** 35151,35158 ****
            (const rtx_insn *INSN)
       This hook returns a description of the ABI used by the target of
       call instruction INSN; see the definition of
!      'predefined_function_abi' for details of the ABI descriptor.  Only
!      the global function 'insn_callee_abi' should call this hook
       directly.
  
       Targets only need to define this hook if they support
--- 35152,35159 ----
            (const rtx_insn *INSN)
       This hook returns a description of the ABI used by the target of
       call instruction INSN; see the definition of
!      ‘predefined_function_abi’ for details of the ABI descriptor.  Only
!      the global function ‘insn_callee_abi’ should call this hook
       directly.
  
       Targets only need to define this hook if they support
*************** Registers have various characteristics.
*** 35163,35178 ****
       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 'CALL_REALLY_USED_REGISTERS'.  However, some ABIs specify
       that calls must preserve certain bits of a particular register but
       can alter others.  This hook should return true if this applies to
!      at least one of the registers in '(reg:MODE REGNO)', and if as a
       result the call would alter part of the MODE value.  For example,
       if a call preserves the low 32 bits of a 64-bit hard register REGNO
       but can clobber the upper 32 bits, this hook should return true for
       a 64-bit mode but false for a 32-bit mode.
  
!      The value of ABI_ID comes from the 'predefined_function_abi'
       structure that describes the ABI of the call; see the definition of
       the structure for more details.  If (as is usual) the target uses
       the same ABI for all functions in a translation unit, ABI_ID is
--- 35164,35179 ----
       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 ‘CALL_REALLY_USED_REGISTERS’.  However, some ABIs specify
       that calls must preserve certain bits of a particular register but
       can alter others.  This hook should return true if this applies to
!      at least one of the registers in ‘(reg:MODE REGNO)’, and if as a
       result the call would alter part of the MODE value.  For example,
       if a call preserves the low 32 bits of a 64-bit hard register REGNO
       but can clobber the upper 32 bits, this hook should return true for
       a 64-bit mode but false for a 32-bit mode.
  
!      The value of ABI_ID comes from the ‘predefined_function_abi’
       structure that describes the ABI of the call; see the definition of
       the structure for more details.  If (as is usual) the target uses
       the same ABI for all functions in a translation unit, ABI_ID is
*************** Registers have various characteristics.
*** 35185,35211 ****
       This hook returns name of multilib ABI name.
  
   -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
!      This hook may conditionally modify five variables 'fixed_regs',
!      'call_used_regs', 'global_regs', 'reg_names', and
!      'reg_class_contents', to take into account any dependence of these
       register sets on target flags.  The first three of these are of
!      type 'char []' (interpreted as boolean vectors).  'global_regs' is
!      a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'.
!      Before the macro is called, 'fixed_regs', 'call_used_regs',
!      'reg_class_contents', and 'reg_names' have been initialized from
!      'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and
!      'REGISTER_NAMES', respectively.  'global_regs' has been cleared,
!      and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'
       command options have been applied.
  
       If the usage of an entire class of registers depends on the target
       flags, you may indicate this to GCC by using this macro to modify
!      'fixed_regs' and 'call_used_regs' to 1 for each of the registers in
       the classes which should not be used by GCC.  Also make
!      'define_register_constraint's return 'NO_REGS' for constraints that
       shouldn't be used.
  
!      (However, if this class is not included in 'GENERAL_REGS' and all
       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
--- 35186,35212 ----
       This hook returns name of multilib ABI name.
  
   -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
!      This hook may conditionally modify five variables ‘fixed_regs’,
!      ‘call_used_regs’, ‘global_regs’, ‘reg_names’, and
!      ‘reg_class_contents’, to take into account any dependence of these
       register sets on target flags.  The first three of these are of
!      type ‘char []’ (interpreted as boolean vectors).  ‘global_regs’ is
!      a ‘const char *[]’, and ‘reg_class_contents’ is a ‘HARD_REG_SET’.
!      Before the macro is called, ‘fixed_regs’, ‘call_used_regs’,
!      ‘reg_class_contents’, and ‘reg_names’ have been initialized from
!      ‘FIXED_REGISTERS’, ‘CALL_USED_REGISTERS’, ‘REG_CLASS_CONTENTS’, and
!      ‘REGISTER_NAMES’, respectively.  ‘global_regs’ has been cleared,
!      and any ‘-ffixed-REG’, ‘-fcall-used-REG’ and ‘-fcall-saved-REG’
       command options have been applied.
  
       If the usage of an entire class of registers depends on the target
       flags, you may indicate this to GCC by using this macro to modify
!      ‘fixed_regs’ and ‘call_used_regs’ to 1 for each of the registers in
       the classes which should not be used by GCC.  Also make
!      ‘define_register_constraint’s return ‘NO_REGS’ for constraints that
       shouldn't be used.
  
!      (However, if this class is not included in ‘GENERAL_REGS’ and all
       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
*************** Registers are allocated in order.
*** 35255,35261 ****
       One use of this macro is on machines where the highest numbered
       registers must always be saved and the save-multiple-registers
       instruction supports only sequences of consecutive registers.  On
!      such machines, define 'REG_ALLOC_ORDER' to be an initializer that
       lists the highest numbered allocable register first.
  
   -- Macro: ADJUST_REG_ALLOC_ORDER
--- 35256,35262 ----
       One use of this macro is on machines where the highest numbered
       registers must always be saved and the save-multiple-registers
       instruction supports only sequences of consecutive registers.  On
!      such machines, define ‘REG_ALLOC_ORDER’ to be an initializer that
       lists the highest numbered allocable register first.
  
   -- Macro: ADJUST_REG_ALLOC_ORDER
*************** Registers are allocated in order.
*** 35263,35274 ****
       allocate hard registers for pseudo-registers local to a basic
       block.
  
!      Store the desired register order in the array 'reg_alloc_order'.
       Element 0 should be the register to allocate first; element 1, the
       next register; and so on.
  
       The macro body should not assume anything about the contents of
!      'reg_alloc_order' before execution of the macro.
  
       On most machines, it is not necessary to define this macro.
  
--- 35264,35275 ----
       allocate hard registers for pseudo-registers local to a basic
       block.
  
!      Store the desired register order in the array ‘reg_alloc_order’.
       Element 0 should be the register to allocate first; element 1, the
       next register; and so on.
  
       The macro body should not assume anything about the contents of
!      ‘reg_alloc_order’ before execution of the macro.
  
       On most machines, it is not necessary to define this macro.
  
*************** Registers are allocated in order.
*** 35287,35293 ****
       based on REGNO.  The cost of using REGNO for a pseudo will be
       increased by approximately the pseudo's usage frequency times the
       value returned by this macro.  Not defining this macro is
!      equivalent to having it always return '0.0'.
  
       On most machines, it is not necessary to define this macro.
  
--- 35288,35294 ----
       based on REGNO.  The cost of using REGNO for a pseudo will be
       increased by approximately the pseudo's usage frequency times the
       value returned by this macro.  Not defining this macro is
!      equivalent to having it always return ‘0.0’.
  
       On most machines, it is not necessary to define this macro.
  
*************** consecutive registers are needed for a g
*** 35307,35313 ****
       starting at register number REGNO, required to hold a value of mode
       MODE.  This hook must never return zero, even if a register cannot
       hold the requested mode - indicate that with
!      'TARGET_HARD_REGNO_MODE_OK' and/or 'TARGET_CAN_CHANGE_MODE_CLASS'
       instead.
  
       The default definition returns the number of words in MODE.
--- 35308,35314 ----
       starting at register number REGNO, required to hold a value of mode
       MODE.  This hook must never return zero, even if a register cannot
       hold the requested mode - indicate that with
!      ‘TARGET_HARD_REGNO_MODE_OK’ and/or ‘TARGET_CAN_CHANGE_MODE_CLASS’
       instead.
  
       The default definition returns the number of words in MODE.
*************** consecutive registers are needed for a g
*** 35318,35338 ****
       in registers starting at register number REGNO (as determined by
       multiplying GCC's notion of the size of the register when
       containing this mode by the number of registers returned by
!      'TARGET_HARD_REGNO_NREGS').  By default this is zero.
  
       For example, if a floating-point value is stored in three 32-bit
       registers but takes up 128 bits in memory, then this would be
       nonzero.
  
       This macros only needs to be defined if there are cases where
!      'subreg_get_info' would otherwise wrongly determine that a 'subreg'
       can be represented by an offset to the register number, when in
!      fact such a 'subreg' would contain some of the padding not stored
       in registers and so not be representable.
  
   -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
       For values of REGNO and MODE for which
!      'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
       returning the greater number of registers required to hold the
       value including any padding.  In the example above, the value would
       be four.
--- 35319,35339 ----
       in registers starting at register number REGNO (as determined by
       multiplying GCC's notion of the size of the register when
       containing this mode by the number of registers returned by
!      ‘TARGET_HARD_REGNO_NREGS’).  By default this is zero.
  
       For example, if a floating-point value is stored in three 32-bit
       registers but takes up 128 bits in memory, then this would be
       nonzero.
  
       This macros only needs to be defined if there are cases where
!      ‘subreg_get_info’ would otherwise wrongly determine that a ‘subreg’
       can be represented by an offset to the register number, when in
!      fact such a ‘subreg’ would contain some of the padding not stored
       in registers and so not be representable.
  
   -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
       For values of REGNO and MODE for which
!      ‘HARD_REGNO_NREGS_HAS_PADDING’ returns nonzero, a C expression
       returning the greater number of registers required to hold the
       value including any padding.  In the example above, the value would
       be four.
*************** consecutive registers are needed for a g
*** 35361,35376 ****
       reject odd register numbers for such modes.
  
       The minimum requirement for a mode to be OK in a register is that
!      the 'movMODE' instruction pattern support moves between the
       register and other hard register in the same class and that moving
       a value into the register and back out not alter it.
  
!      Since the same instruction used to move 'word_mode' will work for
       all narrower integer modes, it is not necessary on any machine for
       this hook to distinguish between these modes, provided you define
!      patterns 'movhi', etc., to take advantage of this.  This is useful
!      because of the interaction between 'TARGET_HARD_REGNO_MODE_OK' and
!      'TARGET_MODES_TIEABLE_P'; it is very desirable for all integer
       modes to be tieable.
  
       Many machines have special registers for floating point arithmetic.
--- 35362,35377 ----
       reject odd register numbers for such modes.
  
       The minimum requirement for a mode to be OK in a register is that
!      the ‘movMODE’ instruction pattern support moves between the
       register and other hard register in the same class and that moving
       a value into the register and back out not alter it.
  
!      Since the same instruction used to move ‘word_mode’ will work for
       all narrower integer modes, it is not necessary on any machine for
       this hook to distinguish between these modes, provided you define
!      patterns ‘movhi’, etc., to take advantage of this.  This is useful
!      because of the interaction between ‘TARGET_HARD_REGNO_MODE_OK’ and
!      ‘TARGET_MODES_TIEABLE_P’; it is very desirable for all integer
       modes to be tieable.
  
       Many machines have special registers for floating point arithmetic.
*************** consecutive registers are needed for a g
*** 35385,35391 ****
       modes may not go in floating registers.  This is true if the
       floating registers normalize any value stored in them, because
       storing a non-floating value there would garble it.  In this case,
!      'TARGET_HARD_REGNO_MODE_OK' should reject fixed-point machine modes
       in floating registers.  But if the floating registers do not
       automatically normalize, if you can store any bit pattern in one
       and retrieve it unchanged without a trap, then any machine mode may
--- 35386,35392 ----
       modes may not go in floating registers.  This is true if the
       floating registers normalize any value stored in them, because
       storing a non-floating value there would garble it.  In this case,
!      ‘TARGET_HARD_REGNO_MODE_OK’ should reject fixed-point machine modes
       in floating registers.  But if the floating registers do not
       automatically normalize, if you can store any bit pattern in one
       and retrieve it unchanged without a trap, then any machine mode may
*************** consecutive registers are needed for a g
*** 35394,35406 ****
       The primary significance of special floating registers is rather
       that they are the registers acceptable in floating point arithmetic
       instructions.  However, this is of no concern to
!      'TARGET_HARD_REGNO_MODE_OK'.  You handle it by writing the proper
       constraints for those instructions.
  
       On some machines, the floating registers are especially slow to
       access, so that it is better to store a value in a stack frame than
       in such a register if floating point arithmetic is not being done.
!      As long as the floating registers are not in class 'GENERAL_REGS',
       they will not be used unless some pattern's constraint asks for
       one.
  
--- 35395,35407 ----
       The primary significance of special floating registers is rather
       that they are the registers acceptable in floating point arithmetic
       instructions.  However, this is of no concern to
!      ‘TARGET_HARD_REGNO_MODE_OK’.  You handle it by writing the proper
       constraints for those instructions.
  
       On some machines, the floating registers are especially slow to
       access, so that it is better to store a value in a stack frame than
       in such a register if floating point arithmetic is not being done.
!      As long as the floating registers are not in class ‘GENERAL_REGS’,
       they will not be used unless some pattern's constraint asks for
       one.
  
*************** consecutive registers are needed for a g
*** 35419,35427 ****
       This hook returns true if a value of mode MODE1 is accessible in
       mode MODE2 without copying.
  
!      If 'TARGET_HARD_REGNO_MODE_OK (R, MODE1)' and
!      'TARGET_HARD_REGNO_MODE_OK (R, MODE2)' are always the same for any
!      R, then 'TARGET_MODES_TIEABLE_P (MODE1, MODE2)' should be true.  If
       they differ for any R, you should define this hook to return false
       unless some other mechanism ensures the accessibility of the value
       in a narrower mode.
--- 35420,35428 ----
       This hook returns true if a value of mode MODE1 is accessible in
       mode MODE2 without copying.
  
!      If ‘TARGET_HARD_REGNO_MODE_OK (R, MODE1)’ and
!      ‘TARGET_HARD_REGNO_MODE_OK (R, MODE2)’ are always the same for any
!      R, then ‘TARGET_MODES_TIEABLE_P (MODE1, MODE2)’ should be true.  If
       they differ for any R, you should define this hook to return false
       unless some other mechanism ensures the accessibility of the value
       in a narrower mode.
*************** consecutive registers are needed for a g
*** 35431,35448 ****
       allocation.  The default definition returns true unconditionally.
  
   -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
!      This target hook should return 'true' if it is OK to use a hard
       register REGNO as scratch reg in peephole2.
  
       One common use of this macro is to prevent using of a register that
       is not saved by a prologue in an interrupt handler.
  
!      The default version of this hook always returns 'true'.
  
   -- Macro: AVOID_CCMODE_COPIES
       Define this macro if the compiler should avoid copies to/from
!      'CCmode' registers.  You should only define this macro if support
!      for copying to/from 'CCmode' is incomplete.
  
  
  File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
--- 35432,35449 ----
       allocation.  The default definition returns true unconditionally.
  
   -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
!      This target hook should return ‘true’ if it is OK to use a hard
       register REGNO as scratch reg in peephole2.
  
       One common use of this macro is to prevent using of a register that
       is not saved by a prologue in an interrupt handler.
  
!      The default version of this hook always returns ‘true’.
  
   -- Macro: AVOID_CCMODE_COPIES
       Define this macro if the compiler should avoid copies to/from
!      ‘CCmode’ registers.  You should only define this macro if support
!      for copying to/from ‘CCmode’ is incomplete.
  
  
  File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
*************** accomplish this.
*** 35487,35509 ****
       function.
  
       If REGNO is a register number which should not appear in a leaf
!      function before renumbering, then the expression should yield -1,
       which will cause the compiler to abort.
  
       Define this macro only if the target machine offers a way to
       optimize the treatment of leaf functions, and registers need to be
       renumbered to do this.
  
!  'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must
  usually treat leaf functions specially.  They can test the C variable
! 'current_function_is_leaf' which is nonzero for leaf functions.
! 'current_function_is_leaf' is set prior to local register allocation and
  is valid for the remaining compiler passes.  They can also test the C
! variable 'current_function_uses_only_leaf_regs' which is nonzero for
  leaf functions which only use leaf registers.
! 'current_function_uses_only_leaf_regs' is valid after all passes that
  modify the instructions have been run and is only useful if
! 'LEAF_REGISTERS' is defined.
  
  
  File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
--- 35488,35510 ----
       function.
  
       If REGNO is a register number which should not appear in a leaf
!      function before renumbering, then the expression should yield −1,
       which will cause the compiler to abort.
  
       Define this macro only if the target machine offers a way to
       optimize the treatment of leaf functions, and registers need to be
       renumbered to do this.
  
!  ‘TARGET_ASM_FUNCTION_PROLOGUE’ and ‘TARGET_ASM_FUNCTION_EPILOGUE’ must
  usually treat leaf functions specially.  They can test the C variable
! ‘current_function_is_leaf’ which is nonzero for leaf functions.
! ‘current_function_is_leaf’ is set prior to local register allocation and
  is valid for the remaining compiler passes.  They can also test the C
! variable ‘current_function_uses_only_leaf_regs’ which is nonzero for
  leaf functions which only use leaf registers.
! ‘current_function_uses_only_leaf_regs’ is valid after all passes that
  modify the instructions have been run and is only useful if
! ‘LEAF_REGISTERS’ is defined.
  
  
  File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
*************** stack.
*** 35520,35526 ****
  they must be consecutively numbered.  Furthermore, the existing support
  for stack-like registers is specific to the 80387 floating point
  coprocessor.  If you have a new architecture that uses stack-like
! registers, you will need to do substantial work on 'reg-stack.cc' and
  write your machine description to cooperate with it, as well as defining
  these macros.
  
--- 35521,35527 ----
  they must be consecutively numbered.  Furthermore, the existing support
  for stack-like registers is specific to the 80387 floating point
  coprocessor.  If you have a new architecture that uses stack-like
! registers, you will need to do substantial work on ‘reg-stack.cc’ and
  write your machine description to cooperate with it, as well as defining
  these macros.
  
*************** File: gccint.info,  Node: Register Class
*** 35548,35555 ****
  On many machines, the numbered registers are not all equivalent.  For
  example, certain registers may not be allowed for indexed addressing;
  certain registers may not be allowed in some instructions.  These
! machine restrictions are described to the compiler using "register
! classes".
  
   You define a number of register classes, giving each one a name and
  saying which of the registers belong to it.  Then you can specify
--- 35549,35556 ----
  On many machines, the numbered registers are not all equivalent.  For
  example, certain registers may not be allowed for indexed addressing;
  certain registers may not be allowed in some instructions.  These
! machine restrictions are described to the compiler using “register
! classes”.
  
   You define a number of register classes, giving each one a name and
  saying which of the registers belong to it.  Then you can specify
*************** register classes that are allowed as ope
*** 35557,35575 ****
  patterns.
  
   In general, each register will belong to several classes.  In fact, one
! class must be named 'ALL_REGS' and contain all the registers.  Another
! class must be named 'NO_REGS' and contain no registers.  Often the union
  of two classes will be another class; however, this is not required.
  
!  One of the classes must be named 'GENERAL_REGS'.  There is nothing
! terribly special about the name, but the operand constraint letters 'r'
! and 'g' specify this class.  If 'GENERAL_REGS' is the same as
! 'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'.
  
   Order the classes so that if class X is contained in class Y then X has
  a lower class number than Y.
  
!  The way classes other than 'GENERAL_REGS' are specified in operand
  constraints is through machine-dependent operand constraint letters.
  You can define such letters to correspond to various classes, then use
  them in operand constraints.
--- 35558,35576 ----
  patterns.
  
   In general, each register will belong to several classes.  In fact, one
! class must be named ‘ALL_REGS’ and contain all the registers.  Another
! class must be named ‘NO_REGS’ and contain no registers.  Often the union
  of two classes will be another class; however, this is not required.
  
!  One of the classes must be named ‘GENERAL_REGS’.  There is nothing
! terribly special about the name, but the operand constraint letters ‘r’
! and ‘g’ specify this class.  If ‘GENERAL_REGS’ is the same as
! ‘ALL_REGS’, just define it as a macro which expands to ‘ALL_REGS’.
  
   Order the classes so that if class X is contained in class Y then X has
  a lower class number than Y.
  
!  The way classes other than ‘GENERAL_REGS’ are specified in operand
  constraints is through machine-dependent operand constraint letters.
  You can define such letters to correspond to various classes, then use
  them in operand constraints.
*************** moving a register in the class to or fro
*** 35582,35591 ****
   You should define a class for the union of two classes whenever some
  instruction allows both classes.  For example, if an instruction allows
  either a floating point (coprocessor) register or a general register for
! a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS'
  which includes both of them.  Otherwise you will get suboptimal code, or
  even internal compiler errors when reload cannot find a register in the
! class computed via 'reg_class_subunion'.
  
   You must also specify certain redundant information about the register
  classes: for each class, which classes contain it and which ones are
--- 35583,35592 ----
   You should define a class for the union of two classes whenever some
  instruction allows both classes.  For example, if an instruction allows
  either a floating point (coprocessor) register or a general register for
! a certain operand, you should define a class ‘FLOAT_OR_GENERAL_REGS’
  which includes both of them.  Otherwise you will get suboptimal code, or
  even internal compiler errors when reload cannot find a register in the
! class computed via ‘reg_class_subunion’.
  
   You must also specify certain redundant information about the register
  classes: for each class, which classes contain it and which ones are
*************** in their union.
*** 35596,35624 ****
  certain class, all the registers used must belong to that class.
  Therefore, register classes cannot be used to enforce a requirement for
  a register pair to start with an even-numbered register.  The way to
! specify this requirement is with 'TARGET_HARD_REGNO_MODE_OK', or with a
! filter expression in a 'define_register_constraint'.
  
   Register classes used for input-operands of bitwise-and or shift
  instructions have a special requirement: each such class must have, for
  each fixed-point machine mode, a subclass whose registers can transfer
  that mode to or from memory.  For example, on some machines, the
! operations for single-byte values ('QImode') are limited to certain
  registers.  When this is so, each register class that is used in a
  bitwise-and or shift instruction must have a subclass consisting of
  registers from which single-byte values can be loaded or stored.  This
! is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to
  return.
  
   -- Data type: enum reg_class
       An enumerated type that must be defined with all the register class
!      names as enumerated values.  'NO_REGS' must be first.  'ALL_REGS'
       must be the last register class, followed by one more enumerated
!      value, 'LIM_REG_CLASSES', which is not a register class but rather
       tells how many classes there are.
  
       Each register class has a number, which is the value of casting the
!      class name to type 'int'.  The number serves as an index in many of
       the tables described below.
  
   -- Macro: N_REG_CLASSES
--- 35597,35625 ----
  certain class, all the registers used must belong to that class.
  Therefore, register classes cannot be used to enforce a requirement for
  a register pair to start with an even-numbered register.  The way to
! specify this requirement is with ‘TARGET_HARD_REGNO_MODE_OK’, or with a
! filter expression in a ‘define_register_constraint’.
  
   Register classes used for input-operands of bitwise-and or shift
  instructions have a special requirement: each such class must have, for
  each fixed-point machine mode, a subclass whose registers can transfer
  that mode to or from memory.  For example, on some machines, the
! operations for single-byte values (‘QImode’) are limited to certain
  registers.  When this is so, each register class that is used in a
  bitwise-and or shift instruction must have a subclass consisting of
  registers from which single-byte values can be loaded or stored.  This
! is so that ‘PREFERRED_RELOAD_CLASS’ can always have a possible value to
  return.
  
   -- Data type: enum reg_class
       An enumerated type that must be defined with all the register class
!      names as enumerated values.  ‘NO_REGS’ must be first.  ‘ALL_REGS’
       must be the last register class, followed by one more enumerated
!      value, ‘LIM_REG_CLASSES’, which is not a register class but rather
       tells how many classes there are.
  
       Each register class has a number, which is the value of casting the
!      class name to type ‘int’.  The number serves as an index in many of
       the tables described below.
  
   -- Macro: N_REG_CLASSES
*************** return.
*** 35635,35654 ****
       An initializer containing the contents of the register classes, as
       integers which are bit masks.  The Nth integer specifies the
       contents of class N.  The way the integer MASK is interpreted is
!      that register R is in the class if 'MASK & (1 << R)' is 1.
  
       When the machine has more than 32 registers, an integer does not
       suffice.  Then the integers are replaced by sub-initializers,
       braced groupings containing several integers.  Each sub-initializer
!      must be suitable as an initializer for the type 'HARD_REG_SET'
!      which is defined in 'hard-reg-set.h'.  In this situation, the first
       integer in each sub-initializer corresponds to registers 0 through
       31, the second integer to registers 32 through 63, and so on.
  
   -- Macro: REGNO_REG_CLASS (REGNO)
       A C expression whose value is a register class containing hard
       register REGNO.  In general there is more than one such class;
!      choose a class which is "minimal", meaning that no smaller class
       also contains the register.
  
   -- Macro: BASE_REG_CLASS
--- 35636,35655 ----
       An initializer containing the contents of the register classes, as
       integers which are bit masks.  The Nth integer specifies the
       contents of class N.  The way the integer MASK is interpreted is
!      that register R is in the class if ‘MASK & (1 << R)’ is 1.
  
       When the machine has more than 32 registers, an integer does not
       suffice.  Then the integers are replaced by sub-initializers,
       braced groupings containing several integers.  Each sub-initializer
!      must be suitable as an initializer for the type ‘HARD_REG_SET’
!      which is defined in ‘hard-reg-set.h’.  In this situation, the first
       integer in each sub-initializer corresponds to registers 0 through
       31, the second integer to registers 32 through 63, and so on.
  
   -- Macro: REGNO_REG_CLASS (REGNO)
       A C expression whose value is a register class containing hard
       register REGNO.  In general there is more than one such class;
!      choose a class which is “minimal”, meaning that no smaller class
       also contains the register.
  
   -- Macro: BASE_REG_CLASS
*************** return.
*** 35657,35666 ****
       address which is the register value plus a displacement.
  
   -- Macro: MODE_BASE_REG_CLASS (MODE)
!      This is a variation of the 'BASE_REG_CLASS' macro which allows the
       selection of a base register in a mode dependent manner.  If MODE
       is VOIDmode then it should return the same value as
!      'BASE_REG_CLASS'.
  
   -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
       A C expression whose value is the register class to which a valid
--- 35658,35667 ----
       address which is the register value plus a displacement.
  
   -- Macro: MODE_BASE_REG_CLASS (MODE)
!      This is a variation of the ‘BASE_REG_CLASS’ macro which allows the
       selection of a base register in a mode dependent manner.  If MODE
       is VOIDmode then it should return the same value as
!      ‘BASE_REG_CLASS’.
  
   -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
       A C expression whose value is the register class to which a valid
*************** return.
*** 35675,35684 ****
       base register for a memory reference in mode MODE to address space
       ADDRESS_SPACE must belong.  OUTER_CODE and INDEX_CODE define the
       context in which the base register occurs.  OUTER_CODE is the code
!      of the immediately enclosing expression ('MEM' for the top level of
!      an address, 'ADDRESS' for something that occurs in an
!      'address_operand').  INDEX_CODE is the code of the corresponding
!      index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise.
  
   -- Macro: INSN_BASE_REG_CLASS (INSN)
       A C expression whose value is the register class to which a valid
--- 35676,35685 ----
       base register for a memory reference in mode MODE to address space
       ADDRESS_SPACE must belong.  OUTER_CODE and INDEX_CODE define the
       context in which the base register occurs.  OUTER_CODE is the code
!      of the immediately enclosing expression (‘MEM’ for the top level of
!      an address, ‘ADDRESS’ for something that occurs in an
!      ‘address_operand’).  INDEX_CODE is the code of the corresponding
!      index expression if OUTER_CODE is ‘PLUS’; ‘SCRATCH’ otherwise.
  
   -- Macro: INSN_BASE_REG_CLASS (INSN)
       A C expression whose value is the register class to which a valid
*************** return.
*** 35699,35719 ****
       index register for a specified INSN must belong.  This macro is
       used when some backend insns may have limited usage of index
       register compared with other insns.  If you defined this macro, the
!      compiler will use it instead of 'INDEX_REG_CLASS'.
  
   -- Macro: REGNO_OK_FOR_BASE_P (NUM)
       A C expression which is nonzero if register number NUM is suitable
       for use as a base register in operand addresses.
  
   -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
!      A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that
       that expression may examine the mode of the memory reference in
       MODE.  You should define this macro if the mode of the memory
       reference affects whether a register may be used as a base
       register.  If you define this macro, the compiler will use it
!      instead of 'REGNO_OK_FOR_BASE_P'.  The mode may be 'VOIDmode' for
!      addresses that appear outside a 'MEM', i.e., as an
!      'address_operand'.
  
   -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
       A C expression which is nonzero if register number NUM is suitable
--- 35700,35720 ----
       index register for a specified INSN must belong.  This macro is
       used when some backend insns may have limited usage of index
       register compared with other insns.  If you defined this macro, the
!      compiler will use it instead of ‘INDEX_REG_CLASS’.
  
   -- Macro: REGNO_OK_FOR_BASE_P (NUM)
       A C expression which is nonzero if register number NUM is suitable
       for use as a base register in operand addresses.
  
   -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
!      A C expression that is just like ‘REGNO_OK_FOR_BASE_P’, except that
       that expression may examine the mode of the memory reference in
       MODE.  You should define this macro if the mode of the memory
       reference affects whether a register may be used as a base
       register.  If you define this macro, the compiler will use it
!      instead of ‘REGNO_OK_FOR_BASE_P’.  The mode may be ‘VOIDmode’ for
!      addresses that appear outside a ‘MEM’, i.e., as an
!      ‘address_operand’.
  
   -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
       A C expression which is nonzero if register number NUM is suitable
*************** return.
*** 35725,35745 ****
       uses.
  
       Use of this macro is deprecated; please use the more general
!      'REGNO_MODE_CODE_OK_FOR_BASE_P'.
  
   -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE,
            OUTER_CODE, INDEX_CODE)
       A C expression which is nonzero if register number NUM is suitable
       for use as a base register in operand addresses, accessing memory
       in mode MODE in address space ADDRESS_SPACE.  This is similar to
!      'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine
       the context in which the register appears in the memory reference.
       OUTER_CODE is the code of the immediately enclosing expression
!      ('MEM' if at the top level of the address, 'ADDRESS' for something
!      that occurs in an 'address_operand').  INDEX_CODE is the code of
!      the corresponding index expression if OUTER_CODE is 'PLUS';
!      'SCRATCH' otherwise.  The mode may be 'VOIDmode' for addresses that
!      appear outside a 'MEM', i.e., as an 'address_operand'.
  
   -- Macro: REGNO_OK_FOR_INSN_BASE_P (NUM, INSN)
       A C expression which is nonzero if register number NUM is suitable
--- 35726,35746 ----
       uses.
  
       Use of this macro is deprecated; please use the more general
!      ‘REGNO_MODE_CODE_OK_FOR_BASE_P’.
  
   -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE,
            OUTER_CODE, INDEX_CODE)
       A C expression which is nonzero if register number NUM is suitable
       for use as a base register in operand addresses, accessing memory
       in mode MODE in address space ADDRESS_SPACE.  This is similar to
!      ‘REGNO_MODE_OK_FOR_BASE_P’, except that that expression may examine
       the context in which the register appears in the memory reference.
       OUTER_CODE is the code of the immediately enclosing expression
!      (‘MEM’ if at the top level of the address, ‘ADDRESS’ for something
!      that occurs in an ‘address_operand’).  INDEX_CODE is the code of
!      the corresponding index expression if OUTER_CODE is ‘PLUS’;
!      ‘SCRATCH’ otherwise.  The mode may be ‘VOIDmode’ for addresses that
!      appear outside a ‘MEM’, i.e., as an ‘address_operand’.
  
   -- Macro: REGNO_OK_FOR_INSN_BASE_P (NUM, INSN)
       A C expression which is nonzero if register number NUM is suitable
*************** return.
*** 35769,35779 ****
       A target hook that places additional preference on the register
       class to use when it is necessary to rename a register in class
       RCLASS to another class, or perhaps NO_REGS, if no preferred
!      register class is found or hook 'preferred_rename_class' is not
       implemented.  Sometimes returning a more restrictive class makes
       better code.  For example, on ARM, thumb-2 instructions using
!      'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'.
!      By returning 'LO_REGS' from 'preferred_rename_class', code size can
       be reduced.
  
   -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
--- 35770,35780 ----
       A target hook that places additional preference on the register
       class to use when it is necessary to rename a register in class
       RCLASS to another class, or perhaps NO_REGS, if no preferred
!      register class is found or hook ‘preferred_rename_class’ is not
       implemented.  Sometimes returning a more restrictive class makes
       better code.  For example, on ARM, thumb-2 instructions using
!      ‘LO_REGS’ may be smaller than instructions using ‘GENERIC_REGS’.
!      By returning ‘LO_REGS’ from ‘preferred_rename_class’, code size can
       be reduced.
  
   -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
*************** return.
*** 35783,35813 ****
       in class RCLASS.  The value is a register class; perhaps RCLASS, or
       perhaps another, smaller class.
  
!      The default version of this hook always returns value of 'rclass'
       argument.
  
       Sometimes returning a more restrictive class makes better code.
       For example, on the 68000, when X is an integer constant that is in
!      range for a 'moveq' instruction, the value of this macro is always
!      'DATA_REGS' as long as RCLASS includes the data registers.
!      Requiring a data register guarantees that a 'moveq' will be used.
  
!      One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return
       RCLASS is if X is a legitimate constant which cannot be loaded into
!      some register class.  By returning 'NO_REGS' you can force X into a
       memory location.  For example, rs6000 can load immediate values
       into general-purpose registers, but does not have an instruction
       for loading an immediate value into a floating-point register, so
!      'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
       floating-point constant.  If the constant can't be loaded into any
       kind of register, code generation will be better if
!      'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
!      instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.
  
       If an insn has pseudos in it after register allocation, reload will
       go through the alternatives and call repeatedly
!      'TARGET_PREFERRED_RELOAD_CLASS' to find the best one.  Returning
!      'NO_REGS', in this case, makes reload add a '!' 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).
--- 35784,35814 ----
       in class RCLASS.  The value is a register class; perhaps RCLASS, or
       perhaps another, smaller class.
  
!      The default version of this hook always returns value of ‘rclass’
       argument.
  
       Sometimes returning a more restrictive class makes better code.
       For example, on the 68000, when X is an integer constant that is in
!      range for a ‘moveq’ instruction, the value of this macro is always
!      ‘DATA_REGS’ as long as RCLASS includes the data registers.
!      Requiring a data register guarantees that a ‘moveq’ will be used.
  
!      One case where ‘TARGET_PREFERRED_RELOAD_CLASS’ must not return
       RCLASS is if X is a legitimate constant which cannot be loaded into
!      some register class.  By returning ‘NO_REGS’ you can force X into a
       memory location.  For example, rs6000 can load immediate values
       into general-purpose registers, but does not have an instruction
       for loading an immediate value into a floating-point register, so
!      ‘TARGET_PREFERRED_RELOAD_CLASS’ returns ‘NO_REGS’ when X is a
       floating-point constant.  If the constant can't be loaded into any
       kind of register, code generation will be better if
!      ‘TARGET_LEGITIMATE_CONSTANT_P’ makes the constant illegitimate
!      instead of using ‘TARGET_PREFERRED_RELOAD_CLASS’.
  
       If an insn has pseudos in it after register allocation, reload will
       go through the alternatives and call repeatedly
!      ‘TARGET_PREFERRED_RELOAD_CLASS’ to find the best one.  Returning
!      ‘NO_REGS’, in this case, makes reload add a ‘!’ 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).
*************** return.
*** 35823,35863 ****
  
       Sometimes returning a more restrictive class makes better code.
       For example, on the 68000, when X is an integer constant that is in
!      range for a 'moveq' instruction, the value of this macro is always
!      'DATA_REGS' as long as CLASS includes the data registers.
!      Requiring a data register guarantees that a 'moveq' will be used.
  
!      One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if
       X is a legitimate constant which cannot be loaded into some
!      register class.  By returning 'NO_REGS' you can force X into a
       memory location.  For example, rs6000 can load immediate values
       into general-purpose registers, but does not have an instruction
       for loading an immediate value into a floating-point register, so
!      'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
       floating-point constant.  If the constant cannot be loaded into any
       kind of register, code generation will be better if
!      'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
!      instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.
  
       If an insn has pseudos in it after register allocation, reload will
       go through the alternatives and call repeatedly
!      'PREFERRED_RELOAD_CLASS' to find the best one.  Returning
!      'NO_REGS', in this case, makes reload add a '!' 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).
  
   -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
            X, reg_class_t RCLASS)
!      Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads
       instead of input reloads.
  
!      The default version of this hook always returns value of 'rclass'
       argument.
  
!      You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to
       discourage reload from using some alternatives, like
!      'TARGET_PREFERRED_RELOAD_CLASS'.
  
   -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
       A C expression that places additional restrictions on the register
--- 35824,35864 ----
  
       Sometimes returning a more restrictive class makes better code.
       For example, on the 68000, when X is an integer constant that is in
!      range for a ‘moveq’ instruction, the value of this macro is always
!      ‘DATA_REGS’ as long as CLASS includes the data registers.
!      Requiring a data register guarantees that a ‘moveq’ will be used.
  
!      One case where ‘PREFERRED_RELOAD_CLASS’ must not return CLASS is if
       X is a legitimate constant which cannot be loaded into some
!      register class.  By returning ‘NO_REGS’ you can force X into a
       memory location.  For example, rs6000 can load immediate values
       into general-purpose registers, but does not have an instruction
       for loading an immediate value into a floating-point register, so
!      ‘PREFERRED_RELOAD_CLASS’ returns ‘NO_REGS’ when X is a
       floating-point constant.  If the constant cannot be loaded into any
       kind of register, code generation will be better if
!      ‘TARGET_LEGITIMATE_CONSTANT_P’ makes the constant illegitimate
!      instead of using ‘TARGET_PREFERRED_RELOAD_CLASS’.
  
       If an insn has pseudos in it after register allocation, reload will
       go through the alternatives and call repeatedly
!      ‘PREFERRED_RELOAD_CLASS’ to find the best one.  Returning
!      ‘NO_REGS’, in this case, makes reload add a ‘!’ 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).
  
   -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
            X, reg_class_t RCLASS)
!      Like ‘TARGET_PREFERRED_RELOAD_CLASS’, but for output reloads
       instead of input reloads.
  
!      The default version of this hook always returns value of ‘rclass’
       argument.
  
!      You can also use ‘TARGET_PREFERRED_OUTPUT_RELOAD_CLASS’ to
       discourage reload from using some alternatives, like
!      ‘TARGET_PREFERRED_RELOAD_CLASS’.
  
   -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
       A C expression that places additional restrictions on the register
*************** return.
*** 35865,35871 ****
       mode MODE in a reload register for which class CLASS would
       ordinarily be used.
  
!      Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when
       there are certain modes that simply cannot go in certain reload
       classes.
  
--- 35866,35872 ----
       mode MODE in a reload register for which class CLASS would
       ordinarily be used.
  
!      Unlike ‘PREFERRED_RELOAD_CLASS’, this macro should be used when
       there are certain modes that simply cannot go in certain reload
       classes.
  
*************** return.
*** 35880,35886 ****
            secondary_reload_info *SRI)
       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 'MQ' register, which on most machines, can only be copied to
       or from general registers, but not memory.  Below, we shall be
       using the term 'intermediate register' when a move operation cannot
       be performed directly, but has to be done by copying the source
--- 35881,35887 ----
            secondary_reload_info *SRI)
       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 ‘MQ’ register, which on most machines, can only be copied to
       or from general registers, but not memory.  Below, we shall be
       using the term 'intermediate register' when a move operation cannot
       be performed directly, but has to be done by copying the source
*************** return.
*** 35913,35919 ****
       needs to be copied to rtx X in RELOAD_MODE.
  
       If copying a register of RELOAD_CLASS from/to X requires an
!      intermediate register, the hook 'secondary_reload' should return
       the register class required for this intermediate register.  If no
       intermediate register is required, it should return NO_REGS. If
       more than one intermediate register is required, describe the one
--- 35914,35920 ----
       needs to be copied to rtx X in RELOAD_MODE.
  
       If copying a register of RELOAD_CLASS from/to X requires an
!      intermediate register, the hook ‘secondary_reload’ should return
       the register class required for this intermediate register.  If no
       intermediate register is required, it should return NO_REGS. If
       more than one intermediate register is required, describe the one
*************** return.
*** 35925,35992 ****
       but still a scratch register is needed, describe the copy from/to
       the reload register to/from the reload operand X.
  
!      You do this by setting 'sri->icode' to the instruction code of a
       pattern in the md file which performs the move.  Operands 0 and 1
       are the output and input of this copy, respectively.  Operands from
       operand 2 onward are for scratch operands.  These scratch operands
       must have a mode, and a single-register-class output constraint.
  
!      When an intermediate register is used, the 'secondary_reload' hook
       will be called again to determine how to copy the intermediate
       register to/from the reload operand X, so your hook must also have
       code to handle the register class of the intermediate operand.
  
!      X might be a pseudo-register or a 'subreg' of a pseudo-register,
       which could either be in a hard register or in memory.  Use
!      'true_regnum' to find out; it will return -1 if the pseudo is in
       memory and the hard register number if it is in a register.
  
!      Scratch operands in memory (constraint '"=m"' / '"=&m"') are
       currently not supported.  For the time being, you will have to
!      continue to use 'TARGET_SECONDARY_MEMORY_NEEDED' for that purpose.
  
!      'copy_cost' also uses this target hook to find out how values are
       copied.  If you want it to include some extra cost for the need to
!      allocate (a) scratch register(s), set 'sri->extra_cost' to the
       additional cost.  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
!      'sri->extra_cost' to a negative amount.
  
   -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
   -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
   -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
       These macros are obsolete, new ports should use the target hook
!      'TARGET_SECONDARY_RELOAD' instead.
  
       These are obsolete macros, replaced by the
!      'TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
       these macros to indicate to the reload phase that it may need to
       allocate at least one register for a reload in addition to the
       register to contain the data.  Specifically, if copying X to a
       register CLASS in MODE requires an intermediate register, you were
!      supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the
       largest register class all of whose registers can be used as
       intermediate registers or scratch registers.
  
       If copying a register CLASS in MODE to X requires an intermediate
!      or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
       to be defined to return the largest register class required.  If
       the requirements for input and output reloads were the same, the
!      macro 'SECONDARY_RELOAD_CLASS' should have been used instead of
       defining both macros identically.
  
!      The values returned by these macros are often 'GENERAL_REGS'.
!      Return 'NO_REGS' if no spare register is needed; i.e., if X can be
       directly copied to or from a register of CLASS in MODE without
       requiring a scratch register.  Do not define this macro if it would
!      always return 'NO_REGS'.
  
       If a scratch register is required (either with or without an
       intermediate register), you were supposed to define patterns for
!      'reload_inM' or 'reload_outM', as required (*note Standard Names::.
       These patterns, which were normally implemented with a
!      'define_expand', should be similar to the 'movM' patterns, except
       that operand 2 is the scratch register.
  
       These patterns need constraints for the reload register and scratch
--- 35926,35993 ----
       but still a scratch register is needed, describe the copy from/to
       the reload register to/from the reload operand X.
  
!      You do this by setting ‘sri->icode’ to the instruction code of a
       pattern in the md file which performs the move.  Operands 0 and 1
       are the output and input of this copy, respectively.  Operands from
       operand 2 onward are for scratch operands.  These scratch operands
       must have a mode, and a single-register-class output constraint.
  
!      When an intermediate register is used, the ‘secondary_reload’ hook
       will be called again to determine how to copy the intermediate
       register to/from the reload operand X, so your hook must also have
       code to handle the register class of the intermediate operand.
  
!      X might be a pseudo-register or a ‘subreg’ of a pseudo-register,
       which could either be in a hard register or in memory.  Use
!      ‘true_regnum’ to find out; it will return −1 if the pseudo is in
       memory and the hard register number if it is in a register.
  
!      Scratch operands in memory (constraint ‘"=m"’ / ‘"=&m"’) are
       currently not supported.  For the time being, you will have to
!      continue to use ‘TARGET_SECONDARY_MEMORY_NEEDED’ for that purpose.
  
!      ‘copy_cost’ also uses this target hook to find out how values are
       copied.  If you want it to include some extra cost for the need to
!      allocate (a) scratch register(s), set ‘sri->extra_cost’ to the
       additional cost.  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
!      ‘sri->extra_cost’ to a negative amount.
  
   -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
   -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
   -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
       These macros are obsolete, new ports should use the target hook
!      ‘TARGET_SECONDARY_RELOAD’ instead.
  
       These are obsolete macros, replaced by the
!      ‘TARGET_SECONDARY_RELOAD’ target hook.  Older ports still define
       these macros to indicate to the reload phase that it may need to
       allocate at least one register for a reload in addition to the
       register to contain the data.  Specifically, if copying X to a
       register CLASS in MODE requires an intermediate register, you were
!      supposed to define ‘SECONDARY_INPUT_RELOAD_CLASS’ to return the
       largest register class all of whose registers can be used as
       intermediate registers or scratch registers.
  
       If copying a register CLASS in MODE to X requires an intermediate
!      or scratch register, ‘SECONDARY_OUTPUT_RELOAD_CLASS’ was supposed
       to be defined to return the largest register class required.  If
       the requirements for input and output reloads were the same, the
!      macro ‘SECONDARY_RELOAD_CLASS’ should have been used instead of
       defining both macros identically.
  
!      The values returned by these macros are often ‘GENERAL_REGS’.
!      Return ‘NO_REGS’ if no spare register is needed; i.e., if X can be
       directly copied to or from a register of CLASS in MODE without
       requiring a scratch register.  Do not define this macro if it would
!      always return ‘NO_REGS’.
  
       If a scratch register is required (either with or without an
       intermediate register), you were supposed to define patterns for
!      ‘reload_inM’ or ‘reload_outM’, as required (*note Standard Names::.
       These patterns, which were normally implemented with a
!      ‘define_expand’, should be similar to the ‘movM’ patterns, except
       that operand 2 is the scratch register.
  
       These patterns need constraints for the reload register and scratch
*************** return.
*** 35997,36012 ****
       reload registers are required.  Their classes are obtained from the
       constraints in the insn pattern.
  
!      X might be a pseudo-register or a 'subreg' of a pseudo-register,
       which could either be in a hard register or in memory.  Use
!      'true_regnum' to find out; it will return -1 if the pseudo is in
       memory and the hard register number if it is in a register.
  
       These macros should not be used in the case where a particular
       class of registers can only be copied to memory and not to another
       class of registers.  In that case, secondary reload registers are
       not needed and would not be helpful.  Instead, a stack location
!      must be used to perform the copy and the 'movM' pattern should use
       memory as an intermediate storage.  This case often occurs between
       floating-point and general registers.
  
--- 35998,36013 ----
       reload registers are required.  Their classes are obtained from the
       constraints in the insn pattern.
  
!      X might be a pseudo-register or a ‘subreg’ of a pseudo-register,
       which could either be in a hard register or in memory.  Use
!      ‘true_regnum’ to find out; it will return −1 if the pseudo is in
       memory and the hard register number if it is in a register.
  
       These macros should not be used in the case where a particular
       class of registers can only be copied to memory and not to another
       class of registers.  In that case, secondary reload registers are
       not needed and would not be helpful.  Instead, a stack location
!      must be used to perform the copy and the ‘movM’ pattern should use
       memory as an intermediate storage.  This case often occurs between
       floating-point and general registers.
  
*************** return.
*** 36021,36041 ****
       false for all inputs.
  
   -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
!      Normally when 'TARGET_SECONDARY_MEMORY_NEEDED' is defined, the
       compiler allocates a stack slot for a memory location needed for
       register copies.  If this macro is defined, the compiler instead
       uses the memory location defined by this macro.
  
       Do not define this macro if you do not define
!      'TARGET_SECONDARY_MEMORY_NEEDED'.
  
   -- Target Hook: machine_mode TARGET_SECONDARY_MEMORY_NEEDED_MODE
            (machine_mode MODE)
!      If 'TARGET_SECONDARY_MEMORY_NEEDED' tells the compiler to use
       memory when moving between two particular registers of mode MODE,
       this hook specifies the mode that the memory should have.
  
!      The default depends on 'TARGET_LRA_P'.  Without LRA, the default is
       to use a word-sized mode for integral modes that are smaller than a
       a word.  This is right thing to do on most machines because it
       ensures that all bits of the register are copied and prevents
--- 36022,36042 ----
       false for all inputs.
  
   -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
!      Normally when ‘TARGET_SECONDARY_MEMORY_NEEDED’ is defined, the
       compiler allocates a stack slot for a memory location needed for
       register copies.  If this macro is defined, the compiler instead
       uses the memory location defined by this macro.
  
       Do not define this macro if you do not define
!      ‘TARGET_SECONDARY_MEMORY_NEEDED’.
  
   -- Target Hook: machine_mode TARGET_SECONDARY_MEMORY_NEEDED_MODE
            (machine_mode MODE)
!      If ‘TARGET_SECONDARY_MEMORY_NEEDED’ tells the compiler to use
       memory when moving between two particular registers of mode MODE,
       this hook specifies the mode that the memory should have.
  
!      The default depends on ‘TARGET_LRA_P’.  Without LRA, the default is
       to use a word-sized mode for integral modes that are smaller than a
       a word.  This is right thing to do on most machines because it
       ensures that all bits of the register are copied and prevents
*************** return.
*** 36047,36053 ****
       registers differently than in integer registers.  On those
       machines, the default widening will not work correctly and you must
       define this hook to suppress that widening in some cases.  See the
!      file 'alpha.cc' for details.
  
       With LRA, the default is to use MODE unmodified.
  
--- 36048,36054 ----
       registers differently than in integer registers.  On those
       machines, the default widening will not work correctly and you must
       define this hook to suppress that widening in some cases.  See the
!      file ‘alpha.cc’ for details.
  
       With LRA, the default is to use MODE unmodified.
  
*************** return.
*** 36063,36074 ****
       has the effect of disabling the early rematerialization pass.
  
   -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
!      A target hook which returns 'true' if pseudos that have been
       assigned to registers of class RCLASS would likely be spilled
       because registers of RCLASS are needed for spill registers.
  
!      The default version of this target hook returns 'true' if RCLASS
!      has exactly one register and 'false' otherwise.  On most machines,
       this default should be used.  For generally register-starved
       machines, such as i386, or machines with right register
       constraints, such as SH, this hook can be used to avoid excessive
--- 36064,36075 ----
       has the effect of disabling the early rematerialization pass.
  
   -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
!      A target hook which returns ‘true’ if pseudos that have been
       assigned to registers of class RCLASS would likely be spilled
       because registers of RCLASS are needed for spill registers.
  
!      The default version of this target hook returns ‘true’ if RCLASS
!      has exactly one register and ‘false’ otherwise.  On most machines,
       this default should be used.  For generally register-starved
       machines, such as i386, or machines with right register
       constraints, such as SH, this hook can be used to avoid excessive
*************** return.
*** 36083,36092 ****
       A target hook returns the maximum number of consecutive registers
       of class RCLASS needed to hold a value of mode MODE.
  
!      This is closely related to the macro 'TARGET_HARD_REGNO_NREGS'.  In
!      fact, the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)'
!      target hook should be the maximum value of 'TARGET_HARD_REGNO_NREGS
!      (REGNO, MODE)' for all REGNO values in the class RCLASS.
  
       This target hook helps control the handling of multiple-word values
       in the reload pass.
--- 36084,36093 ----
       A target hook returns the maximum number of consecutive registers
       of class RCLASS needed to hold a value of mode MODE.
  
!      This is closely related to the macro ‘TARGET_HARD_REGNO_NREGS’.  In
!      fact, the value returned by ‘TARGET_CLASS_MAX_NREGS (RCLASS, MODE)’
!      target hook should be the maximum value of ‘TARGET_HARD_REGNO_NREGS
!      (REGNO, MODE)’ for all REGNO values in the class RCLASS.
  
       This target hook helps control the handling of multiple-word values
       in the reload pass.
*************** return.
*** 36098,36106 ****
       A C expression for the maximum number of consecutive registers of
       class CLASS needed to hold a value of mode MODE.
  
!      This is closely related to the macro 'TARGET_HARD_REGNO_NREGS'.  In
!      fact, the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should
!      be the maximum value of 'TARGET_HARD_REGNO_NREGS (REGNO, MODE)' for
       all REGNO values in the class CLASS.
  
       This macro helps control the handling of multiple-word values in
--- 36099,36107 ----
       A C expression for the maximum number of consecutive registers of
       class CLASS needed to hold a value of mode MODE.
  
!      This is closely related to the macro ‘TARGET_HARD_REGNO_NREGS’.  In
!      fact, the value of the macro ‘CLASS_MAX_NREGS (CLASS, MODE)’ should
!      be the maximum value of ‘TARGET_HARD_REGNO_NREGS (REGNO, MODE)’ for
       all REGNO values in the class CLASS.
  
       This macro helps control the handling of multiple-word values in
*************** return.
*** 36112,36136 ****
       registers of class RCLASS from mode FROM to mode TO and if doing so
       preserves the low-order bits that are common to both modes.  The
       result is only meaningful if RCLASS has registers that can hold
!      both 'from' and 'to'.  The default implementation returns true.
  
       As an example of when such bitcasting is invalid, loading 32-bit
       integer or floating-point objects into floating-point registers on
       Alpha extends them to 64 bits.  Therefore loading a 64-bit object
       and then storing it as a 32-bit object does not store the low-order
       32 bits, as would be the case for a normal register.  Therefore,
!      'alpha.h' defines 'TARGET_CAN_CHANGE_MODE_CLASS' to return:
  
            (GET_MODE_SIZE (from) == GET_MODE_SIZE (to)
             || !reg_classes_intersect_p (FLOAT_REGS, rclass))
  
       Even if storing from a register in mode TO would be valid, if both
!      FROM and 'raw_reg_mode' for RCLASS are wider than 'word_mode', then
       we must prevent TO narrowing the mode.  This happens when the
       middle-end assumes that it can load or store pieces of an N-word
       pseudo, and that the pseudo will eventually be allocated to N
!      'word_mode' hard registers.  Failure to prevent this kind of mode
!      change will result in the entire 'raw_reg_mode' being modified
       instead of the partial value that the middle-end intended.
  
   -- Target Hook: reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS
--- 36113,36137 ----
       registers of class RCLASS from mode FROM to mode TO and if doing so
       preserves the low-order bits that are common to both modes.  The
       result is only meaningful if RCLASS has registers that can hold
!      both ‘from’ and ‘to’.  The default implementation returns true.
  
       As an example of when such bitcasting is invalid, loading 32-bit
       integer or floating-point objects into floating-point registers on
       Alpha extends them to 64 bits.  Therefore loading a 64-bit object
       and then storing it as a 32-bit object does not store the low-order
       32 bits, as would be the case for a normal register.  Therefore,
!      ‘alpha.h’ defines ‘TARGET_CAN_CHANGE_MODE_CLASS’ to return:
  
            (GET_MODE_SIZE (from) == GET_MODE_SIZE (to)
             || !reg_classes_intersect_p (FLOAT_REGS, rclass))
  
       Even if storing from a register in mode TO would be valid, if both
!      FROM and ‘raw_reg_mode’ for RCLASS are wider than ‘word_mode’, then
       we must prevent TO narrowing the mode.  This happens when the
       middle-end assumes that it can load or store pieces of an N-word
       pseudo, and that the pseudo will eventually be allocated to N
!      ‘word_mode’ hard registers.  Failure to prevent this kind of mode
!      change will result in the entire ‘raw_reg_mode’ being modified
       instead of the partial value that the middle-end intended.
  
   -- Target Hook: reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS
*************** return.
*** 36179,36187 ****
       The default version of this target hook returns always false.
  
   -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST)
!      A target hook which returns 'true' if SUBST can't substitute safely
       pseudos with equivalent memory values during register allocation.
!      The default version of this target hook returns 'false'.  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.
--- 36180,36188 ----
       The default version of this target hook returns always false.
  
   -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST)
!      A target hook which returns ‘true’ if SUBST can't substitute safely
       pseudos with equivalent memory values during register allocation.
!      The default version of this target hook returns ‘false’.  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.
*************** return.
*** 36203,36219 ****
   -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t,
            MACHINE_MODE)
       This hook defines a class of registers which could be used for
!      spilling pseudos of the given mode and class, or 'NO_REGS' if only
       memory should be used.  Not defining this hook is equivalent to
!      returning 'NO_REGS' for all inputs.
  
   -- Target Hook: bool TARGET_ADDITIONAL_ALLOCNO_CLASS_P (reg_class_t)
!      This hook should return '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
       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 'false' for all inputs.
  
   -- Target Hook: scalar_int_mode TARGET_CSTORE_MODE (enum insn_code
            ICODE)
--- 36204,36220 ----
   -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t,
            MACHINE_MODE)
       This hook defines a class of registers which could be used for
!      spilling pseudos of the given mode and class, or ‘NO_REGS’ if only
       memory should be used.  Not defining this hook is equivalent to
!      returning ‘NO_REGS’ for all inputs.
  
   -- Target Hook: bool TARGET_ADDITIONAL_ALLOCNO_CLASS_P (reg_class_t)
!      This hook should return ‘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
       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 ‘false’ for all inputs.
  
   -- Target Hook: scalar_int_mode TARGET_CSTORE_MODE (enum insn_code
            ICODE)
*************** Here is the basic stack layout.
*** 36272,36287 ****
  
   -- Macro: STACK_PUSH_CODE
       This macro defines the operation used when something is pushed on
!      the stack.  In RTL, a push operation will be '(set (mem
!      (STACK_PUSH_CODE (reg sp))) ...)'
  
!      The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'.
       Which of these is correct depends on the stack direction and on
       whether the stack pointer points to the last item on the stack or
       whether it points to the space for the next item on the stack.
  
!      The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is true, which
!      is almost always right, and 'PRE_INC' otherwise, which is often
       wrong.
  
   -- Macro: FRAME_GROWS_DOWNWARD
--- 36273,36288 ----
  
   -- Macro: STACK_PUSH_CODE
       This macro defines the operation used when something is pushed on
!      the stack.  In RTL, a push operation will be ‘(set (mem
!      (STACK_PUSH_CODE (reg sp))) ...)’
  
!      The choices are ‘PRE_DEC’, ‘POST_DEC’, ‘PRE_INC’, and ‘POST_INC’.
       Which of these is correct depends on the stack direction and on
       whether the stack pointer points to the last item on the stack or
       whether it points to the space for the next item on the stack.
  
!      The default is ‘PRE_DEC’ when ‘STACK_GROWS_DOWNWARD’ is true, which
!      is almost always right, and ‘PRE_INC’ otherwise, which is often
       wrong.
  
   -- Macro: FRAME_GROWS_DOWNWARD
*************** Here is the basic stack layout.
*** 36294,36300 ****
  
   -- Target Hook: HOST_WIDE_INT TARGET_STARTING_FRAME_OFFSET (void)
       This hook returns the offset from the frame pointer to the first
!      local variable slot to be allocated.  If 'FRAME_GROWS_DOWNWARD', it
       is the offset to _end_ of the first slot allocated, otherwise it is
       the offset to _beginning_ of the first slot allocated.  The default
       implementation returns 0.
--- 36295,36301 ----
  
   -- Target Hook: HOST_WIDE_INT TARGET_STARTING_FRAME_OFFSET (void)
       This hook returns the offset from the frame pointer to the first
!      local variable slot to be allocated.  If ‘FRAME_GROWS_DOWNWARD’, it
       is the offset to _end_ of the first slot allocated, otherwise it is
       the offset to _beginning_ of the first slot allocated.  The default
       implementation returns 0.
*************** Here is the basic stack layout.
*** 36304,36312 ****
       reload.  The nonzero default for this macro is suitable for most
       ports.
  
!      On ports where 'TARGET_STARTING_FRAME_OFFSET' is nonzero or where
       there is a register save block following the local block that
!      doesn't require alignment to 'STACK_BOUNDARY', it may be beneficial
       to disable stack alignment and do it in the backend.
  
   -- Macro: STACK_POINTER_OFFSET
--- 36305,36313 ----
       reload.  The nonzero default for this macro is suitable for most
       ports.
  
!      On ports where ‘TARGET_STARTING_FRAME_OFFSET’ is nonzero or where
       there is a register save block following the local block that
!      doesn't require alignment to ‘STACK_BOUNDARY’, it may be beneficial
       to disable stack alignment and do it in the backend.
  
   -- Macro: STACK_POINTER_OFFSET
*************** Here is the basic stack layout.
*** 36314,36320 ****
       which outgoing arguments are placed.  If not specified, the default
       value of zero is used.  This is the proper value for most machines.
  
!      If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
       the first location at which outgoing arguments are placed.
  
   -- Macro: FIRST_PARM_OFFSET (FUNDECL)
--- 36315,36321 ----
       which outgoing arguments are placed.  If not specified, the default
       value of zero is used.  This is the proper value for most machines.
  
!      If ‘ARGS_GROW_DOWNWARD’, this is the offset to the location above
       the first location at which outgoing arguments are placed.
  
   -- Macro: FIRST_PARM_OFFSET (FUNDECL)
*************** Here is the basic stack layout.
*** 36322,36346 ****
       address.  On some machines it may depend on the data type of the
       function.
  
!      If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
       the first argument's address.
  
   -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
       Offset from the stack pointer register to an item dynamically
!      allocated on the stack, e.g., by 'alloca'.
  
!      The default value for this macro is 'STACK_POINTER_OFFSET' plus the
       length of the outgoing arguments.  The default is correct for most
!      machines.  See 'function.cc' for details.
  
   -- Macro: INITIAL_FRAME_ADDRESS_RTX
       A C expression whose value is RTL representing the address of the
!      initial stack frame.  This address is passed to 'RETURN_ADDR_RTX'
!      and 'DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
       reasonable default value will be used.  Define this macro in order
       to make frame pointer elimination work in the presence of
!      '__builtin_frame_address (count)' and '__builtin_return_address
!      (count)' for 'count' not equal to zero.
  
   -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
       A C expression whose value is RTL representing the address in a
--- 36323,36347 ----
       address.  On some machines it may depend on the data type of the
       function.
  
!      If ‘ARGS_GROW_DOWNWARD’, this is the offset to the location above
       the first argument's address.
  
   -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
       Offset from the stack pointer register to an item dynamically
!      allocated on the stack, e.g., by ‘alloca’.
  
!      The default value for this macro is ‘STACK_POINTER_OFFSET’ plus the
       length of the outgoing arguments.  The default is correct for most
!      machines.  See ‘function.cc’ for details.
  
   -- Macro: INITIAL_FRAME_ADDRESS_RTX
       A C expression whose value is RTL representing the address of the
!      initial stack frame.  This address is passed to ‘RETURN_ADDR_RTX’
!      and ‘DYNAMIC_CHAIN_ADDRESS’.  If you don't define this macro, a
       reasonable default value will be used.  Define this macro in order
       to make frame pointer elimination work in the presence of
!      ‘__builtin_frame_address (count)’ and ‘__builtin_return_address
!      (count)’ for ‘count’ not equal to zero.
  
   -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
       A C expression whose value is RTL representing the address in a
*************** Here is the basic stack layout.
*** 36361,36370 ****
  
   -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
       This target hook should return an rtx that is used to store the
!      address of the current frame into the built in 'setjmp' buffer.
!      The default value, 'virtual_stack_vars_rtx', is correct for most
       machines.  One reason you may need to define this target hook is if
!      'hard_frame_pointer_rtx' is the appropriate value on your machine.
  
   -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
       A C expression whose value is RTL representing the value of the
--- 36362,36371 ----
  
   -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
       This target hook should return an rtx that is used to store the
!      address of the current frame into the built in ‘setjmp’ buffer.
!      The default value, ‘virtual_stack_vars_rtx’, is correct for most
       machines.  One reason you may need to define this target hook is if
!      ‘hard_frame_pointer_rtx’ is the appropriate value on your machine.
  
   -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
       A C expression whose value is RTL representing the value of the
*************** Here is the basic stack layout.
*** 36378,36388 ****
       A C expression whose value is RTL representing the value of the
       return address for the frame COUNT steps up from the current frame,
       after the prologue.  FRAMEADDR is the frame pointer of the COUNT
!      frame, or the frame pointer of the COUNT - 1 frame if
!      'RETURN_ADDR_IN_PREVIOUS_FRAME' is nonzero.
  
       The value of the expression must always be the correct address when
!      COUNT is zero, but may be 'NULL_RTX' if there is no way to
       determine the return address of other frames.
  
   -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
--- 36379,36389 ----
       A C expression whose value is RTL representing the value of the
       return address for the frame COUNT steps up from the current frame,
       after the prologue.  FRAMEADDR is the frame pointer of the COUNT
!      frame, or the frame pointer of the COUNT − 1 frame if
!      ‘RETURN_ADDR_IN_PREVIOUS_FRAME’ is nonzero.
  
       The value of the expression must always be the correct address when
!      COUNT is zero, but may be ‘NULL_RTX’ if there is no way to
       determine the return address of other frames.
  
   -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
*************** Here is the basic stack layout.
*** 36394,36416 ****
   -- Macro: INCOMING_RETURN_ADDR_RTX
       A C expression whose value is RTL representing the location of the
       incoming return address at the beginning of any function, before
!      the prologue.  This RTL is either a 'REG', indicating that the
!      return value is saved in 'REG', or a 'MEM' representing a location
       in the stack.
  
       You only need to define this macro if you want to support call
       frame debugging information like that provided by DWARF 2.
  
!      If this RTL is a 'REG', you should also define
!      'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'.
  
   -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
       A C expression whose value is an integer giving a DWARF 2 column
       number that may be used as an alternative return column.  The
       column must not correspond to any gcc hard register (that is, it
!      must not be in the range of 'DWARF_FRAME_REGNUM').
  
!      This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a
       general register, but an alternative column needs to be used for
       signal frames.  Some targets have also used different frame return
       columns over time.
--- 36395,36417 ----
   -- Macro: INCOMING_RETURN_ADDR_RTX
       A C expression whose value is RTL representing the location of the
       incoming return address at the beginning of any function, before
!      the prologue.  This RTL is either a ‘REG’, indicating that the
!      return value is saved in ‘REG’, or a ‘MEM’ representing a location
       in the stack.
  
       You only need to define this macro if you want to support call
       frame debugging information like that provided by DWARF 2.
  
!      If this RTL is a ‘REG’, you should also define
!      ‘DWARF_FRAME_RETURN_COLUMN’ to ‘DWARF_FRAME_REGNUM (REGNO)’.
  
   -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
       A C expression whose value is an integer giving a DWARF 2 column
       number that may be used as an alternative return column.  The
       column must not correspond to any gcc hard register (that is, it
!      must not be in the range of ‘DWARF_FRAME_REGNUM’).
  
!      This macro can be useful if ‘DWARF_FRAME_RETURN_COLUMN’ is set to a
       general register, but an alternative column needs to be used for
       signal frames.  Some targets have also used different frame return
       columns over time.
*************** Here is the basic stack layout.
*** 36426,36432 ****
   -- Macro: DWARF_VERSION_DEFAULT
       A C expression whose value is the default dwarf standard version
       we'll honor and advertise when generating dwarf debug information,
!      in absence of an explicit '-gdwarf-VERSION' option on the command
       line.
  
   -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
--- 36427,36433 ----
   -- Macro: DWARF_VERSION_DEFAULT
       A C expression whose value is the default dwarf standard version
       we'll honor and advertise when generating dwarf debug information,
!      in absence of an explicit ‘-gdwarf-VERSION’ option on the command
       line.
  
   -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
*************** Here is the basic stack layout.
*** 36439,36456 ****
            (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
       to let the backend emit the call frame instructions.  LABEL is the
       CFI label attached to the insn, PATTERN is the pattern of the insn
!      and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'.
  
   -- Target Hook: unsigned int TARGET_DWARF_POLY_INDETERMINATE_VALUE
            (unsigned int I, unsigned int *FACTOR, int *OFFSET)
!      Express the value of 'poly_int' indeterminate I as a DWARF
       expression, with I counting from 1.  Return the number of a DWARF
!      register R and set '*FACTOR' and '*OFFSET' such that the value of
       the indeterminate is:
            value_of(R) / FACTOR - OFFSET
  
       A target only needs to define this hook if it sets
!      'NUM_POLY_INT_COEFFS' to a value greater than 1.
  
   -- Macro: INCOMING_FRAME_SP_OFFSET
       A C expression whose value is an integer giving the offset, in
--- 36440,36457 ----
            (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
       to let the backend emit the call frame instructions.  LABEL is the
       CFI label attached to the insn, PATTERN is the pattern of the insn
!      and INDEX is ‘UNSPEC_INDEX’ or ‘UNSPECV_INDEX’.
  
   -- Target Hook: unsigned int TARGET_DWARF_POLY_INDETERMINATE_VALUE
            (unsigned int I, unsigned int *FACTOR, int *OFFSET)
!      Express the value of ‘poly_int’ indeterminate I as a DWARF
       expression, with I counting from 1.  Return the number of a DWARF
!      register R and set ‘*FACTOR’ and ‘*OFFSET’ such that the value of
       the indeterminate is:
            value_of(R) / FACTOR - OFFSET
  
       A target only needs to define this hook if it sets
!      ‘NUM_POLY_INT_COEFFS’ to a value greater than 1.
  
   -- Macro: INCOMING_FRAME_SP_OFFSET
       A C expression whose value is an integer giving the offset, in
*************** Here is the basic stack layout.
*** 36464,36485 ****
       frame debugging information like that provided by DWARF 2.
  
   -- Macro: DEFAULT_INCOMING_FRAME_SP_OFFSET
!      Like 'INCOMING_FRAME_SP_OFFSET', but must be the same for all
!      functions of the same ABI, and when using GAS '.cfi_*' directives
       must also agree with the default CFI GAS emits.  Define this macro
!      only if 'INCOMING_FRAME_SP_OFFSET' can have different values
       between different functions of the same ABI or when
!      'INCOMING_FRAME_SP_OFFSET' does not agree with GAS default CFI.
  
   -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
       A C expression whose value is an integer giving the offset, in
       bytes, from the argument pointer to the canonical frame address
       (cfa).  The final value should coincide with that calculated by
!      'INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
       during virtual register instantiation.
  
!      The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) +
!      crtl->args.pretend_args_size', which is correct for most machines;
       in general, the arguments are found immediately before the stack
       frame.  Note that this is not the case on some targets that save
       registers into the caller's frame, such as SPARC and rs6000, and so
--- 36465,36486 ----
       frame debugging information like that provided by DWARF 2.
  
   -- Macro: DEFAULT_INCOMING_FRAME_SP_OFFSET
!      Like ‘INCOMING_FRAME_SP_OFFSET’, but must be the same for all
!      functions of the same ABI, and when using GAS ‘.cfi_*’ directives
       must also agree with the default CFI GAS emits.  Define this macro
!      only if ‘INCOMING_FRAME_SP_OFFSET’ can have different values
       between different functions of the same ABI or when
!      ‘INCOMING_FRAME_SP_OFFSET’ does not agree with GAS default CFI.
  
   -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
       A C expression whose value is an integer giving the offset, in
       bytes, from the argument pointer to the canonical frame address
       (cfa).  The final value should coincide with that calculated by
!      ‘INCOMING_FRAME_SP_OFFSET’.  Which is unfortunately not usable
       during virtual register instantiation.
  
!      The default value for this macro is ‘FIRST_PARM_OFFSET (fundecl) +
!      crtl->args.pretend_args_size’, which is correct for most machines;
       in general, the arguments are found immediately before the stack
       frame.  Note that this is not the case on some targets that save
       registers into the caller's frame, such as SPARC and rs6000, and so
*************** Here is the basic stack layout.
*** 36493,36507 ****
       If defined, a C expression whose value is an integer giving the
       offset in bytes from the frame pointer to the canonical frame
       address (cfa).  The final value should coincide with that
!      calculated by 'INCOMING_FRAME_SP_OFFSET'.
  
       Normally the CFA is calculated as an offset from the argument
!      pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer
       is variable due to the ABI, this may not be possible.  If this
       macro is defined, it implies that the virtual register
       instantiation should be based on the frame pointer instead of the
!      argument pointer.  Only one of 'FRAME_POINTER_CFA_OFFSET' and
!      'ARG_POINTER_CFA_OFFSET' should be defined.
  
   -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
       If defined, a C expression whose value is an integer giving the
--- 36494,36508 ----
       If defined, a C expression whose value is an integer giving the
       offset in bytes from the frame pointer to the canonical frame
       address (cfa).  The final value should coincide with that
!      calculated by ‘INCOMING_FRAME_SP_OFFSET’.
  
       Normally the CFA is calculated as an offset from the argument
!      pointer, via ‘ARG_POINTER_CFA_OFFSET’, but if the argument pointer
       is variable due to the ABI, this may not be possible.  If this
       macro is defined, it implies that the virtual register
       instantiation should be based on the frame pointer instead of the
!      argument pointer.  Only one of ‘FRAME_POINTER_CFA_OFFSET’ and
!      ‘ARG_POINTER_CFA_OFFSET’ should be defined.
  
   -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
       If defined, a C expression whose value is an integer giving the
*************** Here is the basic stack layout.
*** 36523,36541 ****
       functions.
  
       This value is added to the stack pointer register to compute the
!      address returned by '__builtin_stack_address', and this is its only
       use.  If this macro is not defined, no offset is added.  Defining
!      it like 'STACK_POINTER_OFFSET' may be appropriate for many
       machines, but not all.
  
       On SPARC, for example, the register save area is *not* considered
       active or used by the active function, but rather as akin to the
       area in which call-preserved registers are saved by callees, so the
       stack address is above that area, even though the (unbiased) stack
!      pointer points below it.  This enables '__strub_leave' to clear
       what would otherwise overlap with its own register save area.
  
!      On PowerPC, 'STACK_POINTER_OFFSET' also reserves space for a save
       area, but that area is used by the caller rather than the callee,
       so the boundary address is below it.
  
--- 36524,36542 ----
       functions.
  
       This value is added to the stack pointer register to compute the
!      address returned by ‘__builtin_stack_address’, and this is its only
       use.  If this macro is not defined, no offset is added.  Defining
!      it like ‘STACK_POINTER_OFFSET’ may be appropriate for many
       machines, but not all.
  
       On SPARC, for example, the register save area is *not* considered
       active or used by the active function, but rather as akin to the
       area in which call-preserved registers are saved by callees, so the
       stack address is above that area, even though the (unbiased) stack
!      pointer points below it.  This enables ‘__strub_leave’ to clear
       what would otherwise overlap with its own register save area.
  
!      On PowerPC, ‘STACK_POINTER_OFFSET’ also reserves space for a save
       area, but that area is used by the caller rather than the callee,
       so the boundary address is below it.
  
*************** Here is the basic stack layout.
*** 36545,36563 ****
       doubly-scrubbed by caller and callee.
  
   -- Macro: TARGET_STRUB_USE_DYNAMIC_ARRAY
!      If defined to nonzero, '__strub_leave' will allocate a dynamic
       array covering the stack range that needs scrubbing before clearing
       it.  Allocating the array tends to make scrubbing slower, but it
!      enables the scrubbing to be safely implemented with a 'memset'
       call, which could make up for the difference.
  
   -- Macro: TARGET_STRUB_MAY_USE_MEMSET
!      If defined to nonzero, enable '__strub_leave' to be optimized so as
!      to call 'memset' for stack scrubbing.  This is only enabled by
!      default if 'TARGET_STRUB_USE_DYNAMIC_ARRAY' is enabled; it's not
!      advisable to enable it otherwise, since 'memset' would then likely
       overwrite its own stack frame, but it might work if the target ABI
!      enables 'memset' to not use the stack at all, not even for
       arguments or its return address, and its implementation is trivial
       enough that it doesn't use a stack frame.
  
--- 36546,36564 ----
       doubly-scrubbed by caller and callee.
  
   -- Macro: TARGET_STRUB_USE_DYNAMIC_ARRAY
!      If defined to nonzero, ‘__strub_leave’ will allocate a dynamic
       array covering the stack range that needs scrubbing before clearing
       it.  Allocating the array tends to make scrubbing slower, but it
!      enables the scrubbing to be safely implemented with a ‘memset’
       call, which could make up for the difference.
  
   -- Macro: TARGET_STRUB_MAY_USE_MEMSET
!      If defined to nonzero, enable ‘__strub_leave’ to be optimized so as
!      to call ‘memset’ for stack scrubbing.  This is only enabled by
!      default if ‘TARGET_STRUB_USE_DYNAMIC_ARRAY’ is enabled; it's not
!      advisable to enable it otherwise, since ‘memset’ would then likely
       overwrite its own stack frame, but it might work if the target ABI
!      enables ‘memset’ to not use the stack at all, not even for
       arguments or its return address, and its implementation is trivial
       enough that it doesn't use a stack frame.
  
*************** File: gccint.info,  Node: Exception Hand
*** 36569,36575 ****
  
   -- Macro: EH_RETURN_DATA_REGNO (N)
       A C expression whose value is the Nth register number used for data
!      by exception handlers, or 'INVALID_REGNUM' if fewer than N
       registers are usable.
  
       The exception handling library routines communicate with the
--- 36570,36576 ----
  
   -- Macro: EH_RETURN_DATA_REGNO (N)
       A C expression whose value is the Nth register number used for data
!      by exception handlers, or ‘INVALID_REGNUM’ if fewer than N
       registers are usable.
  
       The exception handling library routines communicate with the
*************** File: gccint.info,  Node: Exception Hand
*** 36609,36624 ****
       normal return address is stored.  For targets that return by
       popping an address off the stack, this might be a memory address
       just below the _target_ call frame rather than inside the current
!      call frame.  If defined, 'EH_RETURN_STACKADJ_RTX' will have already
       been assigned, so it may be used to calculate the location of the
       target call frame.
  
       Some targets have more complex requirements than storing to an
       address calculable during initial code generation.  In that case
!      the 'eh_return' instruction pattern should be used instead.
  
       If you want to support call frame exception handling, you must
!      define either this macro or the 'eh_return' instruction pattern.
  
   -- Macro: EH_RETURN_TAKEN_RTX
       A C expression whose value is RTL representing a location in which
--- 36610,36625 ----
       normal return address is stored.  For targets that return by
       popping an address off the stack, this might be a memory address
       just below the _target_ call frame rather than inside the current
!      call frame.  If defined, ‘EH_RETURN_STACKADJ_RTX’ will have already
       been assigned, so it may be used to calculate the location of the
       target call frame.
  
       Some targets have more complex requirements than storing to an
       address calculable during initial code generation.  In that case
!      the ‘eh_return’ instruction pattern should be used instead.
  
       If you want to support call frame exception handling, you must
!      define either this macro or the ‘eh_return’ instruction pattern.
  
   -- Macro: EH_RETURN_TAKEN_RTX
       A C expression whose value is RTL representing a location in which
*************** File: gccint.info,  Node: Exception Hand
*** 36626,36633 ****
       return.  This macro allows conditionally executing different code
       in the epilogue for the EH and normal return cases.
  
!      When this macro is defined, the macros 'EH_RETURN_STACKADJ_RTX' and
!      'EH_RETURN_HANDLER_RTX' are only meaningful in the epilogue when 1
       is stored to the specified location.  The value 0 means normal
       return.
  
--- 36627,36634 ----
       return.  This macro allows conditionally executing different code
       in the epilogue for the EH and normal return cases.
  
!      When this macro is defined, the macros ‘EH_RETURN_STACKADJ_RTX’ and
!      ‘EH_RETURN_HANDLER_RTX’ are only meaningful in the epilogue when 1
       is stored to the specified location.  The value 0 means normal
       return.
  
*************** File: gccint.info,  Node: Exception Hand
*** 36647,36653 ****
       CODE is 0 for data, 1 for code labels, 2 for function pointers.
       GLOBAL is true if the symbol may be affected by dynamic
       relocations.  The macro should return a combination of the
!      'DW_EH_PE_*' defines as found in 'dwarf2.h'.
  
       If this macro is not defined, pointers will not be encoded but
       represented directly.
--- 36648,36654 ----
       CODE is 0 for data, 1 for code labels, 2 for function pointers.
       GLOBAL is true if the symbol may be affected by dynamic
       relocations.  The macro should return a combination of the
!      ‘DW_EH_PE_*’ defines as found in ‘dwarf2.h’.
  
       If this macro is not defined, pointers will not be encoded but
       represented directly.
*************** File: gccint.info,  Node: Exception Hand
*** 36656,36668 ****
            ADDR, DONE)
       This macro allows the target to emit whatever special magic is
       required to represent the encoding chosen by
!      'ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
       pc-relative and indirect encodings; this must be defined if the
       target uses text-relative or data-relative encodings.
  
       This is a C statement that branches to DONE if the format was
       handled.  ENCODING is the format chosen, SIZE is the number of
!      bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be
       emitted.
  
   -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
--- 36657,36669 ----
            ADDR, DONE)
       This macro allows the target to emit whatever special magic is
       required to represent the encoding chosen by
!      ‘ASM_PREFERRED_EH_DATA_FORMAT’.  Generic code takes care of
       pc-relative and indirect encodings; this must be defined if the
       target uses text-relative or data-relative encodings.
  
       This is a C statement that branches to DONE if the format was
       handled.  ENCODING is the format chosen, SIZE is the number of
!      bytes that the format occupies, ADDR is the ‘SYMBOL_REF’ to be
       emitted.
  
   -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
*************** File: gccint.info,  Node: Exception Hand
*** 36671,36704 ****
       unwind data available.  The most common reason to implement this
       macro is to unwind through signal frames.
  
!      This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c',
!      'unwind-dw2-xtensa.c' and 'unwind-ia64.c'.  CONTEXT is an
!      '_Unwind_Context'; FS is an '_Unwind_FrameState'.  Examine
!      'context->ra' for the address of the code being executed and
!      'context->cfa' for the stack pointer value.  If the frame can be
       decoded, the register save addresses should be updated in FS and
!      the macro should evaluate to '_URC_NO_REASON'.  If the frame cannot
!      be decoded, the macro should evaluate to '_URC_END_OF_STACK'.
  
       For proper signal handling in Java this macro is accompanied by
!      'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h'
       headers.
  
   -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
       This macro allows the target to add operating system specific code
!      to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding
       directive, usually used for signal or interrupt frames.
  
!      This macro is called from 'uw_update_context' in libgcc's
!      'unwind-ia64.c'.  CONTEXT is an '_Unwind_Context'; FS is an
!      '_Unwind_FrameState'.  Examine 'fs->unwabi' for the abi and context
!      in the '.unwabi' directive.  If the '.unwabi' directive can be
       handled, the register save addresses should be updated in FS.
  
   -- Macro: TARGET_USES_WEAK_UNWIND_INFO
       A C expression that evaluates to true if the target requires unwind
!      info to be given comdat linkage.  Define it to be '1' if comdat
!      linkage is necessary.  The default is '0'.
  
  
  File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
--- 36672,36705 ----
       unwind data available.  The most common reason to implement this
       macro is to unwind through signal frames.
  
!      This macro is called from ‘uw_frame_state_for’ in ‘unwind-dw2.c’,
!      ‘unwind-dw2-xtensa.c’ and ‘unwind-ia64.c’.  CONTEXT is an
!      ‘_Unwind_Context’; FS is an ‘_Unwind_FrameState’.  Examine
!      ‘context->ra’ for the address of the code being executed and
!      ‘context->cfa’ for the stack pointer value.  If the frame can be
       decoded, the register save addresses should be updated in FS and
!      the macro should evaluate to ‘_URC_NO_REASON’.  If the frame cannot
!      be decoded, the macro should evaluate to ‘_URC_END_OF_STACK’.
  
       For proper signal handling in Java this macro is accompanied by
!      ‘MAKE_THROW_FRAME’, defined in ‘libjava/include/*-signal.h’
       headers.
  
   -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
       This macro allows the target to add operating system specific code
!      to the call-frame unwinder to handle the IA-64 ‘.unwabi’ unwinding
       directive, usually used for signal or interrupt frames.
  
!      This macro is called from ‘uw_update_context’ in libgcc's
!      ‘unwind-ia64.c’.  CONTEXT is an ‘_Unwind_Context’; FS is an
!      ‘_Unwind_FrameState’.  Examine ‘fs->unwabi’ for the abi and context
!      in the ‘.unwabi’ directive.  If the ‘.unwabi’ directive can be
       handled, the register save addresses should be updated in FS.
  
   -- Macro: TARGET_USES_WEAK_UNWIND_INFO
       A C expression that evaluates to true if the target requires unwind
!      info to be given comdat linkage.  Define it to be ‘1’ if comdat
!      linkage is necessary.  The default is ‘0’.
  
  
  File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
*************** File: gccint.info,  Node: Stack Checking
*** 36707,36721 ****
  --------------------------------------------
  
  GCC will check that stack references are within the boundaries of the
! stack, if the option '-fstack-check' is specified, in one of three ways:
  
!   1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC
       will assume that you have arranged for full stack checking to be
       done at appropriate places in the configuration files.  GCC will
       not do other special processing.
  
!   2. If 'STACK_CHECK_BUILTIN' is zero and the value of the
!      'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that
       you have arranged for static stack checking (checking of the static
       stack frame of functions) to be done at appropriate places in the
       configuration files.  GCC will only emit code to do dynamic stack
--- 36708,36722 ----
  --------------------------------------------
  
  GCC will check that stack references are within the boundaries of the
! stack, if the option ‘-fstack-check’ is specified, in one of three ways:
  
!   1. If the value of the ‘STACK_CHECK_BUILTIN’ macro is nonzero, GCC
       will assume that you have arranged for full stack checking to be
       done at appropriate places in the configuration files.  GCC will
       not do other special processing.
  
!   2. If ‘STACK_CHECK_BUILTIN’ is zero and the value of the
!      ‘STACK_CHECK_STATIC_BUILTIN’ macro is nonzero, GCC will assume that
       you have arranged for static stack checking (checking of the static
       stack frame of functions) to be done at appropriate places in the
       configuration files.  GCC will only emit code to do dynamic stack
*************** stack, if the option '-fstack-check' is
*** 36728,36735 ****
  
   If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
  defined, GCC will change its allocation strategy for large objects if
! the option '-fstack-check' is specified: they will always be allocated
! dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes.
  
   -- Macro: STACK_CHECK_BUILTIN
       A nonzero value if stack checking is done by the configuration
--- 36729,36736 ----
  
   If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
  defined, GCC will change its allocation strategy for large objects if
! the option ‘-fstack-check’ is specified: they will always be allocated
! dynamically if their size exceeds ‘STACK_CHECK_MAX_VAR_SIZE’ bytes.
  
   -- Macro: STACK_CHECK_BUILTIN
       A nonzero value if stack checking is done by the configuration
*************** dynamically if their size exceeds 'STACK
*** 36765,36771 ****
   -- Macro: STACK_CHECK_PROTECT
       The number of bytes of stack needed to recover from a stack
       overflow, for languages where such a recovery is supported.  The
!      default value of 4KB/8KB with the 'setjmp'/'longjmp'-based
       exception handling mechanism and 8KB/12KB with other exception
       handling mechanisms should be adequate for most architectures and
       operating systems.
--- 36766,36772 ----
   -- Macro: STACK_CHECK_PROTECT
       The number of bytes of stack needed to recover from a stack
       overflow, for languages where such a recovery is supported.  The
!      default value of 4KB/8KB with the ‘setjmp’/‘longjmp’-based
       exception handling mechanism and 8KB/12KB with other exception
       handling mechanisms should be adequate for most architectures and
       operating systems.
*************** in the opposite case.
*** 36793,36799 ****
   -- Macro: STACK_CHECK_MAX_VAR_SIZE
       The maximum size, in bytes, of an object that GCC will place in the
       fixed area of the stack frame when the user specifies
!      '-fstack-check'.  GCC computed the default from the values of the
       above macros and you will normally not need to override that
       default.
  
--- 36794,36800 ----
   -- Macro: STACK_CHECK_MAX_VAR_SIZE
       The maximum size, in bytes, of an object that GCC will place in the
       fixed area of the stack frame when the user specifies
!      ‘-fstack-check’.  GCC computed the default from the values of the
       above macros and you will normally not need to override that
       default.
  
*************** This discusses registers that address th
*** 36820,36826 ****
  
   -- Macro: STACK_POINTER_REGNUM
       The register number of the stack pointer register, which must also
!      be a fixed register according to 'FIXED_REGISTERS'.  On most
       machines, the hardware determines which register this is.
  
   -- Macro: FRAME_POINTER_REGNUM
--- 36821,36827 ----
  
   -- Macro: STACK_POINTER_REGNUM
       The register number of the stack pointer register, which must also
!      be a fixed register according to ‘FIXED_REGISTERS’.  On most
       machines, the hardware determines which register this is.
  
   -- Macro: FRAME_POINTER_REGNUM
*************** This discusses registers that address th
*** 36834,36854 ****
       offset of the automatic variables is not known until after register
       allocation has been done (for example, because the saved registers
       are between these two locations).  On those machines, define
!      'FRAME_POINTER_REGNUM' the number of a special, fixed register to
       be used internally until the offset is known, and define
!      'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
       used for the frame pointer.
  
       You should define this macro only in the very rare circumstances
       when it is not possible to calculate the offset between the frame
       pointer and the automatic variables until after register allocation
       has been completed.  When this macro is defined, you must also
!      indicate in your definition of 'ELIMINABLE_REGS' how to eliminate
!      'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or
!      'STACK_POINTER_REGNUM'.
  
       Do not define this macro if it would be the same as
!      'FRAME_POINTER_REGNUM'.
  
   -- Macro: ARG_POINTER_REGNUM
       The register number of the arg pointer register, which is used to
--- 36835,36855 ----
       offset of the automatic variables is not known until after register
       allocation has been done (for example, because the saved registers
       are between these two locations).  On those machines, define
!      ‘FRAME_POINTER_REGNUM’ the number of a special, fixed register to
       be used internally until the offset is known, and define
!      ‘HARD_FRAME_POINTER_REGNUM’ to be the actual hard register number
       used for the frame pointer.
  
       You should define this macro only in the very rare circumstances
       when it is not possible to calculate the offset between the frame
       pointer and the automatic variables until after register allocation
       has been completed.  When this macro is defined, you must also
!      indicate in your definition of ‘ELIMINABLE_REGS’ how to eliminate
!      ‘FRAME_POINTER_REGNUM’ into either ‘HARD_FRAME_POINTER_REGNUM’ or
!      ‘STACK_POINTER_REGNUM’.
  
       Do not define this macro if it would be the same as
!      ‘FRAME_POINTER_REGNUM’.
  
   -- Macro: ARG_POINTER_REGNUM
       The register number of the arg pointer register, which is used to
*************** This discusses registers that address th
*** 36857,36877 ****
       determines which register this is.  On other machines, you can
       choose any register you wish for this purpose.  If this is not the
       same register as the frame pointer register, then you must mark it
!      as a fixed register according to 'FIXED_REGISTERS', or arrange to
       be able to eliminate it (*note Elimination::).
  
   -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
       Define this to a preprocessor constant that is nonzero if
!      'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the
!      same.  The default definition is '(HARD_FRAME_POINTER_REGNUM ==
!      FRAME_POINTER_REGNUM)'; you only need to define this macro if that
       definition is not suitable for use in preprocessor conditionals.
  
   -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
       Define this to a preprocessor constant that is nonzero if
!      'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same.
!      The default definition is '(HARD_FRAME_POINTER_REGNUM ==
!      ARG_POINTER_REGNUM)'; you only need to define this macro if that
       definition is not suitable for use in preprocessor conditionals.
  
   -- Macro: RETURN_ADDRESS_POINTER_REGNUM
--- 36858,36878 ----
       determines which register this is.  On other machines, you can
       choose any register you wish for this purpose.  If this is not the
       same register as the frame pointer register, then you must mark it
!      as a fixed register according to ‘FIXED_REGISTERS’, or arrange to
       be able to eliminate it (*note Elimination::).
  
   -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
       Define this to a preprocessor constant that is nonzero if
!      ‘hard_frame_pointer_rtx’ and ‘frame_pointer_rtx’ should be the
!      same.  The default definition is ‘(HARD_FRAME_POINTER_REGNUM ==
!      FRAME_POINTER_REGNUM)’; you only need to define this macro if that
       definition is not suitable for use in preprocessor conditionals.
  
   -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
       Define this to a preprocessor constant that is nonzero if
!      ‘hard_frame_pointer_rtx’ and ‘arg_pointer_rtx’ should be the same.
!      The default definition is ‘(HARD_FRAME_POINTER_REGNUM ==
!      ARG_POINTER_REGNUM)’; you only need to define this macro if that
       definition is not suitable for use in preprocessor conditionals.
  
   -- Macro: RETURN_ADDRESS_POINTER_REGNUM
*************** This discusses registers that address th
*** 36880,36886 ****
       stack.  On some machines, the return address is not at a fixed
       offset from the frame pointer or stack pointer or argument pointer.
       This register can be defined to point to the return address on the
!      stack, and then be converted by 'ELIMINABLE_REGS' into either the
       frame pointer or stack pointer.
  
       Do not define this macro unless there is no other way to get the
--- 36881,36887 ----
       stack.  On some machines, the return address is not at a fixed
       offset from the frame pointer or stack pointer or argument pointer.
       This register can be defined to point to the return address on the
!      stack, and then be converted by ‘ELIMINABLE_REGS’ into either the
       frame pointer or stack pointer.
  
       Do not define this macro unless there is no other way to get the
*************** This discusses registers that address th
*** 36890,36922 ****
   -- Macro: STATIC_CHAIN_INCOMING_REGNUM
       Register numbers used for passing a function's static chain
       pointer.  If register windows are used, the register number as seen
!      by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the
       register number as seen by the calling function is
!      'STATIC_CHAIN_REGNUM'.  If these registers are the same,
!      'STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
  
       The static chain register need not be a fixed register.
  
       If the static chain is passed in memory, these macros should not be
!      defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used.
  
   -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE,
            bool INCOMING_P)
!      This hook replaces the use of '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
       attributes that affect the calling conventions of the function and
       those calling conventions use different static chain locations.
  
!      The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al.
  
       If the static chain is passed in memory, this hook should be used
!      to provide rtx giving 'mem' expressions that denote where they are
!      stored.  Often the 'mem' expression as seen by the caller will be
!      at an offset from the stack pointer and the 'mem' expression as
       seen by the callee will be at an offset from the frame pointer.
!      The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and
!      'arg_pointer_rtx' will have been initialized and should be used to
       refer to those items.
  
   -- Macro: DWARF_FRAME_REGISTERS
--- 36891,36923 ----
   -- Macro: STATIC_CHAIN_INCOMING_REGNUM
       Register numbers used for passing a function's static chain
       pointer.  If register windows are used, the register number as seen
!      by the called function is ‘STATIC_CHAIN_INCOMING_REGNUM’, while the
       register number as seen by the calling function is
!      ‘STATIC_CHAIN_REGNUM’.  If these registers are the same,
!      ‘STATIC_CHAIN_INCOMING_REGNUM’ need not be defined.
  
       The static chain register need not be a fixed register.
  
       If the static chain is passed in memory, these macros should not be
!      defined; instead, the ‘TARGET_STATIC_CHAIN’ hook should be used.
  
   -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE,
            bool INCOMING_P)
!      This hook replaces the use of ‘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
       attributes that affect the calling conventions of the function and
       those calling conventions use different static chain locations.
  
!      The default version of this hook uses ‘STATIC_CHAIN_REGNUM’ et al.
  
       If the static chain is passed in memory, this hook should be used
!      to provide rtx giving ‘mem’ expressions that denote where they are
!      stored.  Often the ‘mem’ expression as seen by the caller will be
!      at an offset from the stack pointer and the ‘mem’ expression as
       seen by the callee will be at an offset from the frame pointer.
!      The variables ‘stack_pointer_rtx’, ‘frame_pointer_rtx’, and
!      ‘arg_pointer_rtx’ will have been initialized and should be used to
       refer to those items.
  
   -- Macro: DWARF_FRAME_REGISTERS
*************** This discusses registers that address th
*** 36934,36948 ****
       call-saved.
  
       If this macro is not defined, it defaults to
!      'FIRST_PSEUDO_REGISTER'.
  
   -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
  
!      This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided
       for backward compatibility in pre GCC 3.0 compiled code.
  
       If this macro is not defined, it defaults to
!      'DWARF_FRAME_REGISTERS'.
  
   -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
  
--- 36935,36949 ----
       call-saved.
  
       If this macro is not defined, it defaults to
!      ‘FIRST_PSEUDO_REGISTER’.
  
   -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
  
!      This macro is similar to ‘DWARF_FRAME_REGISTERS’, but is provided
       for backward compatibility in pre GCC 3.0 compiled code.
  
       If this macro is not defined, it defaults to
!      ‘DWARF_FRAME_REGISTERS’.
  
   -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
  
*************** This discusses registers that address th
*** 36957,36990 ****
       registers used in .eh_frame or .debug_frame is different from that
       used in other debug info sections.  Given a GCC hard register
       number, this macro should return the .eh_frame register number.
!      The default is 'DEBUGGER_REGNO (REGNO)'.
  
   -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
  
       Define this macro to map register numbers held in the call frame
!      info that GCC has collected using 'DWARF_FRAME_REGNUM' to those
!      that should be output in .debug_frame ('FOR_EH' is zero) and
!      .eh_frame ('FOR_EH' is nonzero).  The default is to return 'REGNO'.
  
   -- Macro: REG_VALUE_IN_UNWIND_CONTEXT
  
       Define this macro if the target stores register values as
!      '_Unwind_Word' type in unwind context.  It should be defined if
!      target register size is larger than the size of 'void *'.  The
!      default is to store register values as 'void *' type.
  
   -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT
  
       Define this macro to be 1 if the target always uses extended unwind
       context with version, args_size and by_value fields.  If it is
       undefined, it will be defined to 1 when
!      'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise.
  
   -- Macro: DWARF_LAZY_REGISTER_VALUE (REGNO, VALUE)
       Define this macro if the target has pseudo DWARF registers whose
       values need to be computed lazily on demand by the unwinder (such
       as when referenced in a CFA expression).  The macro returns true if
!      REGNO is such a register and stores its value in '*VALUE' if so.
  
  
  File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
--- 36958,36991 ----
       registers used in .eh_frame or .debug_frame is different from that
       used in other debug info sections.  Given a GCC hard register
       number, this macro should return the .eh_frame register number.
!      The default is ‘DEBUGGER_REGNO (REGNO)’.
  
   -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
  
       Define this macro to map register numbers held in the call frame
!      info that GCC has collected using ‘DWARF_FRAME_REGNUM’ to those
!      that should be output in .debug_frame (‘FOR_EH’ is zero) and
!      .eh_frame (‘FOR_EH’ is nonzero).  The default is to return ‘REGNO’.
  
   -- Macro: REG_VALUE_IN_UNWIND_CONTEXT
  
       Define this macro if the target stores register values as
!      ‘_Unwind_Word’ type in unwind context.  It should be defined if
!      target register size is larger than the size of ‘void *’.  The
!      default is to store register values as ‘void *’ type.
  
   -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT
  
       Define this macro to be 1 if the target always uses extended unwind
       context with version, args_size and by_value fields.  If it is
       undefined, it will be defined to 1 when
!      ‘REG_VALUE_IN_UNWIND_CONTEXT’ is defined and 0 otherwise.
  
   -- Macro: DWARF_LAZY_REGISTER_VALUE (REGNO, VALUE)
       Define this macro if the target has pseudo DWARF registers whose
       values need to be computed lazily on demand by the unwinder (such
       as when referenced in a CFA expression).  The macro returns true if
!      REGNO is such a register and stores its value in ‘*VALUE’ if so.
  
  
  File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
*************** File: gccint.info,  Node: Elimination,
*** 36995,37024 ****
  This is about eliminating the frame pointer and arg pointer.
  
   -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
!      This target hook should return '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 'true' the function will have a frame
       pointer.
  
       This target hook can in principle examine the current function and
       decide according to the facts, but on most machines the constant
!      'false' or the constant 'true' suffices.  Use 'false' when the
       machine allows code to be generated with no frame pointer, and
!      doing so saves some time or space.  Use 'true' when there is no
       possible advantage to avoiding a frame pointer.
  
       In certain cases, the compiler does not know how to produce valid
       code without a frame pointer.  The compiler recognizes those cases
       and automatically gives the function a frame pointer regardless of
!      what 'targetm.frame_pointer_required' returns.  You don't need to
       worry about them.
  
       In a function that does not require a frame pointer, the frame
       pointer register can be allocated for ordinary usage, unless you
!      mark it as a fixed register.  See 'FIXED_REGISTERS' for more
       information.
  
!      Default return value is 'false'.
  
   -- Macro: ELIMINABLE_REGS
       This macro specifies a table of register pairs used to eliminate
--- 36996,37025 ----
  This is about eliminating the frame pointer and arg pointer.
  
   -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
!      This target hook should return ‘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 ‘true’ the function will have a frame
       pointer.
  
       This target hook can in principle examine the current function and
       decide according to the facts, but on most machines the constant
!      ‘false’ or the constant ‘true’ suffices.  Use ‘false’ when the
       machine allows code to be generated with no frame pointer, and
!      doing so saves some time or space.  Use ‘true’ when there is no
       possible advantage to avoiding a frame pointer.
  
       In certain cases, the compiler does not know how to produce valid
       code without a frame pointer.  The compiler recognizes those cases
       and automatically gives the function a frame pointer regardless of
!      what ‘targetm.frame_pointer_required’ returns.  You don't need to
       worry about them.
  
       In a function that does not require a frame pointer, the frame
       pointer register can be allocated for ordinary usage, unless you
!      mark it as a fixed register.  See ‘FIXED_REGISTERS’ for more
       information.
  
!      Default return value is ‘false’.
  
   -- Macro: ELIMINABLE_REGS
       This macro specifies a table of register pairs used to eliminate
*************** This is about eliminating the frame poin
*** 37046,37069 ****
  
   -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
            int TO_REG)
!      This target hook should return 'true' if the compiler is allowed to
       try to replace register number FROM_REG with register number
!      TO_REG.  This target hook will usually be 'true', since most of the
       cases preventing register elimination are things that the compiler
       already knows about.
  
!      Default return value is 'true'.
  
   -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
       This macro returns the initial difference between the specified
       pair of registers.  The value would be computed from information
!      such as the result of 'get_frame_size ()' and the tables of
!      registers 'df_regs_ever_live_p' and 'call_used_regs'.
  
   -- Target Hook: void TARGET_COMPUTE_FRAME_LAYOUT (void)
       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 'INITIAL_ELIMINATION_OFFSET' instead of
       re-computing the 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.
--- 37047,37070 ----
  
   -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
            int TO_REG)
!      This target hook should return ‘true’ if the compiler is allowed to
       try to replace register number FROM_REG with register number
!      TO_REG.  This target hook will usually be ‘true’, since most of the
       cases preventing register elimination are things that the compiler
       already knows about.
  
!      Default return value is ‘true’.
  
   -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
       This macro returns the initial difference between the specified
       pair of registers.  The value would be computed from information
!      such as the result of ‘get_frame_size ()’ and the tables of
!      registers ‘df_regs_ever_live_p’ and ‘call_used_regs’.
  
   -- Target Hook: void TARGET_COMPUTE_FRAME_LAYOUT (void)
       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 ‘INITIAL_ELIMINATION_OFFSET’ instead of
       re-computing the 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.
*************** stack.  See the following section for ot
*** 37079,37105 ****
  certain arguments in registers.
  
   -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
!      This target hook returns 'true' if an argument declared in a
!      prototype as an integral type smaller than 'int' should actually be
!      passed as an '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.
  
   -- Target Hook: bool TARGET_PUSH_ARGUMENT (unsigned int NPUSH)
!      This target hook returns 'true' if push instructions will be used
       to pass outgoing arguments.  When the push instruction usage is
       optional, NPUSH is nonzero to indicate the number of bytes to push.
       Otherwise, NPUSH is zero.  If the target machine does not have a
!      push instruction or push instruction should be avoided, 'false'
       should be returned.  That directs GCC to use an alternate strategy:
       to allocate the entire argument block and then store the arguments
!      into it.  If this target hook may return 'true', 'PUSH_ROUNDING'
       must be defined.
  
   -- Macro: PUSH_ARGS_REVERSED
       A C expression.  If nonzero, function arguments will be evaluated
       from last to first, rather than from first to last.  If this macro
!      is not defined, it defaults to 'PUSH_ARGS' on targets where the
       stack and args grow in opposite directions, and 0 otherwise.
  
   -- Macro: PUSH_ROUNDING (NPUSHED)
--- 37080,37106 ----
  certain arguments in registers.
  
   -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
!      This target hook returns ‘true’ if an argument declared in a
!      prototype as an integral type smaller than ‘int’ should actually be
!      passed as an ‘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.
  
   -- Target Hook: bool TARGET_PUSH_ARGUMENT (unsigned int NPUSH)
!      This target hook returns ‘true’ if push instructions will be used
       to pass outgoing arguments.  When the push instruction usage is
       optional, NPUSH is nonzero to indicate the number of bytes to push.
       Otherwise, NPUSH is zero.  If the target machine does not have a
!      push instruction or push instruction should be avoided, ‘false’
       should be returned.  That directs GCC to use an alternate strategy:
       to allocate the entire argument block and then store the arguments
!      into it.  If this target hook may return ‘true’, ‘PUSH_ROUNDING’
       must be defined.
  
   -- Macro: PUSH_ARGS_REVERSED
       A C expression.  If nonzero, function arguments will be evaluated
       from last to first, rather than from first to last.  If this macro
!      is not defined, it defaults to ‘PUSH_ARGS’ on targets where the
       stack and args grow in opposite directions, and 0 otherwise.
  
   -- Macro: PUSH_ROUNDING (NPUSHED)
*************** certain arguments in registers.
*** 37122,37132 ****
   -- Macro: ACCUMULATE_OUTGOING_ARGS
       A C expression.  If nonzero, the maximum amount of space required
       for outgoing arguments will be computed and placed into
!      'crtl->outgoing_args_size'.  No space will be pushed onto the stack
       for each call; instead, the function prologue should increase the
       stack frame size by this amount.
  
!      Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not
       proper.
  
   -- Macro: REG_PARM_STACK_SPACE (FNDECL)
--- 37123,37133 ----
   -- Macro: ACCUMULATE_OUTGOING_ARGS
       A C expression.  If nonzero, the maximum amount of space required
       for outgoing arguments will be computed and placed into
!      ‘crtl->outgoing_args_size’.  No space will be pushed onto the stack
       for each call; instead, the function prologue should increase the
       stack frame size by this amount.
  
!      Setting both ‘PUSH_ARGS’ and ‘ACCUMULATE_OUTGOING_ARGS’ is not
       proper.
  
   -- Macro: REG_PARM_STACK_SPACE (FNDECL)
*************** certain arguments in registers.
*** 37141,37151 ****
       the function.
  
       This space can be allocated by the caller, or be a part of the
!      machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says
       which.
  
   -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL)
!      Like 'REG_PARM_STACK_SPACE', but for incoming register arguments.
       Define this macro if space guaranteed when compiling a function
       body is different to space required when making a call, a situation
       that can arise with K&R style function definitions.
--- 37142,37152 ----
       the function.
  
       This space can be allocated by the caller, or be a part of the
!      machine-dependent stack frame: ‘OUTGOING_REG_PARM_STACK_SPACE’ says
       which.
  
   -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL)
!      Like ‘REG_PARM_STACK_SPACE’, but for incoming register arguments.
       Define this macro if space guaranteed when compiling a function
       body is different to space required when making a call, a situation
       that can arise with K&R style function definitions.
*************** certain arguments in registers.
*** 37156,37171 ****
       registers when calling a function of FNTYPE.  FNTYPE may be NULL if
       the function called is a library function.
  
!      If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
       whether the space for these arguments counts in the value of
!      'crtl->outgoing_args_size'.
  
   -- Macro: STACK_PARMS_IN_REG_PARM_AREA
!      Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the
       stack parameters don't skip the area specified by it.
  
       Normally, when a parameter is not passed in registers, it is placed
!      on the stack beyond the 'REG_PARM_STACK_SPACE' area.  Defining this
       macro suppresses this behavior and causes the parameter to be
       passed on the stack in its natural location.
  
--- 37157,37172 ----
       registers when calling a function of FNTYPE.  FNTYPE may be NULL if
       the function called is a library function.
  
!      If ‘ACCUMULATE_OUTGOING_ARGS’ is defined, this macro controls
       whether the space for these arguments counts in the value of
!      ‘crtl->outgoing_args_size’.
  
   -- Macro: STACK_PARMS_IN_REG_PARM_AREA
!      Define this macro if ‘REG_PARM_STACK_SPACE’ is defined, but the
       stack parameters don't skip the area specified by it.
  
       Normally, when a parameter is not passed in registers, it is placed
!      on the stack beyond the ‘REG_PARM_STACK_SPACE’ area.  Defining this
       macro suppresses this behavior and causes the parameter to be
       passed on the stack in its natural location.
  
*************** certain arguments in registers.
*** 37178,37189 ****
  
       FUNDECL is a C variable whose value is a tree node that describes
       the function in question.  Normally it is a node of type
!      'FUNCTION_DECL' that describes the declaration of the function.
!      From this you can obtain the 'DECL_ATTRIBUTES' of the function.
  
       FUNTYPE is a C variable whose value is a tree node that describes
       the function in question.  Normally it is a node of type
!      'FUNCTION_TYPE' that describes the data type of the function.  From
       this it is possible to obtain the data types of the value and
       arguments (if known).
  
--- 37179,37190 ----
  
       FUNDECL is a C variable whose value is a tree node that describes
       the function in question.  Normally it is a node of type
!      ‘FUNCTION_DECL’ that describes the declaration of the function.
!      From this you can obtain the ‘DECL_ATTRIBUTES’ of the function.
  
       FUNTYPE is a C variable whose value is a tree node that describes
       the function in question.  Normally it is a node of type
!      ‘FUNCTION_TYPE’ that describes the data type of the function.  From
       this it is possible to obtain the data types of the value and
       arguments (if known).
  
*************** certain arguments in registers.
*** 37204,37210 ****
       calling convention, no functions pop their arguments, so the value
       of the macro is always 0 in this case.  But an alternative calling
       convention is available in which functions that take a fixed number
!      of arguments pop them but other functions (such as 'printf') pop
       nothing (the caller pops all).  When this convention is in use,
       FUNTYPE is examined to determine whether a function takes a fixed
       number of arguments.
--- 37205,37211 ----
       calling convention, no functions pop their arguments, so the value
       of the macro is always 0 in this case.  But an alternative calling
       convention is available in which functions that take a fixed number
!      of arguments pop them but other functions (such as ‘printf’) pop
       nothing (the caller pops all).  When this convention is in use,
       FUNTYPE is examined to determine whether a function takes a fixed
       number of arguments.
*************** certain arguments in registers.
*** 37212,37218 ****
   -- Macro: CALL_POPS_ARGS (CUM)
       A C expression that should indicate the number of bytes a call
       sequence pops off the stack.  It is added to the value of
!      'RETURN_POPS_ARGS' when compiling a function call.
  
       CUM is the variable in which all arguments to the called function
       have been accumulated.
--- 37213,37219 ----
   -- Macro: CALL_POPS_ARGS (CUM)
       A C expression that should indicate the number of bytes a call
       sequence pops off the stack.  It is added to the value of
!      ‘RETURN_POPS_ARGS’ when compiling a function call.
  
       CUM is the variable in which all arguments to the called function
       have been accumulated.
*************** certain arguments in registers.
*** 37221,37227 ****
       used that pops certain registers off the stack, depending on the
       arguments that have been passed to the function.  Since this is a
       property of the call site, not of the called function,
!      'RETURN_POPS_ARGS' is not appropriate.
  
  
  File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
--- 37222,37228 ----
       used that pops certain registers off the stack, depending on the
       arguments that have been passed to the function.  Since this is a
       property of the call site, not of the called function,
!      ‘RETURN_POPS_ARGS’ is not appropriate.
  
  
  File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
*************** the stack.
*** 37239,37284 ****
       a register and if so, which register.  Argument CA summarizes all
       the previous arguments.
  
!      The return value is usually either a 'reg' RTX for the hard
       register in which to pass the argument, or zero to pass the
       argument on the stack.
  
!      The value of the expression can also be a 'parallel' RTX.  This is
       used when an argument is passed in multiple locations.  The mode of
!      the 'parallel' should be the mode of the entire argument.  The
!      'parallel' holds any number of 'expr_list' pairs; each one
       describes where part of the argument is passed.  In each
!      'expr_list' the first operand must be a 'reg' RTX for the hard
       register in which to pass this part of the argument, and the mode
       of the register RTX indicates how large this part of the argument
!      is.  The second operand of the 'expr_list' is a 'const_int' which
       gives the offset in bytes into the entire argument of where this
!      part starts.  As a special exception the first 'expr_list' in the
!      'parallel' RTX may have a first operand of zero.  This indicates
       that the entire argument is also stored on the stack.
  
!      The last time this hook is called, it is called with 'MODE ==
!      VOIDmode', and its result is passed to the 'call' or 'call_value'
       pattern as operands 2 and 3 respectively.
  
!      The usual way to make the ISO library 'stdarg.h' work on a machine
       where some arguments are usually passed in registers, is to cause
       nameless arguments to be passed on the stack instead.  This is done
!      by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'.
  
!      You may use the hook 'targetm.calls.must_pass_in_stack' in the
       definition of this macro to determine if this argument is of a type
!      that must be passed in the stack.  If 'REG_PARM_STACK_SPACE' is not
!      defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an
!      argument, the compiler will abort.  If 'REG_PARM_STACK_SPACE' is
       defined, the argument will be computed in the stack and then loaded
       into a register.
  
   -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (const function_arg_info
            &ARG)
!      This target hook should return 'true' if we should not pass ARG
!      solely in registers.  The file 'expr.h' defines a definition that
!      is usually appropriate, refer to 'expr.h' for additional
       documentation.
  
   -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA,
--- 37240,37285 ----
       a register and if so, which register.  Argument CA summarizes all
       the previous arguments.
  
!      The return value is usually either a ‘reg’ RTX for the hard
       register in which to pass the argument, or zero to pass the
       argument on the stack.
  
!      The value of the expression can also be a ‘parallel’ RTX.  This is
       used when an argument is passed in multiple locations.  The mode of
!      the ‘parallel’ should be the mode of the entire argument.  The
!      ‘parallel’ holds any number of ‘expr_list’ pairs; each one
       describes where part of the argument is passed.  In each
!      ‘expr_list’ the first operand must be a ‘reg’ RTX for the hard
       register in which to pass this part of the argument, and the mode
       of the register RTX indicates how large this part of the argument
!      is.  The second operand of the ‘expr_list’ is a ‘const_int’ which
       gives the offset in bytes into the entire argument of where this
!      part starts.  As a special exception the first ‘expr_list’ in the
!      ‘parallel’ RTX may have a first operand of zero.  This indicates
       that the entire argument is also stored on the stack.
  
!      The last time this hook is called, it is called with ‘MODE ==
!      VOIDmode’, and its result is passed to the ‘call’ or ‘call_value’
       pattern as operands 2 and 3 respectively.
  
!      The usual way to make the ISO library ‘stdarg.h’ work on a machine
       where some arguments are usually passed in registers, is to cause
       nameless arguments to be passed on the stack instead.  This is done
!      by making ‘TARGET_FUNCTION_ARG’ return 0 whenever NAMED is ‘false’.
  
!      You may use the hook ‘targetm.calls.must_pass_in_stack’ in the
       definition of this macro to determine if this argument is of a type
!      that must be passed in the stack.  If ‘REG_PARM_STACK_SPACE’ is not
!      defined and ‘TARGET_FUNCTION_ARG’ returns nonzero for such an
!      argument, the compiler will abort.  If ‘REG_PARM_STACK_SPACE’ is
       defined, the argument will be computed in the stack and then loaded
       into a register.
  
   -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (const function_arg_info
            &ARG)
!      This target hook should return ‘true’ if we should not pass ARG
!      solely in registers.  The file ‘expr.h’ defines a definition that
!      is usually appropriate, refer to ‘expr.h’ for additional
       documentation.
  
   -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA,
*************** the stack.
*** 37289,37305 ****
       invoked by the hardware and which have nonstandard calling
       conventions.
  
!      In this case 'TARGET_FUNCTION_ARG' computes the register in which
!      the caller passes the value, and 'TARGET_FUNCTION_INCOMING_ARG'
       should be defined in a similar fashion to tell the function being
       called where the arguments will arrive.
  
!      'TARGET_FUNCTION_INCOMING_ARG' can also return arbitrary address
       computation using hard register, which can be forced into a
       register, so that it can be used to pass special arguments.
  
!      If 'TARGET_FUNCTION_INCOMING_ARG' is not defined,
!      'TARGET_FUNCTION_ARG' serves both purposes.
  
   -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void)
       This hook should return 1 in case pseudo register should be created
--- 37290,37306 ----
       invoked by the hardware and which have nonstandard calling
       conventions.
  
!      In this case ‘TARGET_FUNCTION_ARG’ computes the register in which
!      the caller passes the value, and ‘TARGET_FUNCTION_INCOMING_ARG’
       should be defined in a similar fashion to tell the function being
       called where the arguments will arrive.
  
!      ‘TARGET_FUNCTION_INCOMING_ARG’ can also return arbitrary address
       computation using hard register, which can be forced into a
       register, so that it can be used to pass special arguments.
  
!      If ‘TARGET_FUNCTION_INCOMING_ARG’ is not defined,
!      ‘TARGET_FUNCTION_ARG’ serves both purposes.
  
   -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void)
       This hook should return 1 in case pseudo register should be created
*************** the stack.
*** 37319,37340 ****
       On some machines, certain arguments must be passed partially in
       registers and partially in memory.  On these machines, typically
       the first few words of arguments are passed in registers, and the
!      rest on the stack.  If a multi-word argument (a 'double' or a
       structure) crosses that boundary, its first few words must be
       passed in registers and the rest must be pushed.  This macro tells
       the compiler when this occurs, and how many bytes should go in
       registers.
  
!      'TARGET_FUNCTION_ARG' for these arguments should return the first
       register to be used by the caller for this argument; likewise
!      'TARGET_FUNCTION_INCOMING_ARG', for the called function.
  
   -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM,
            const function_arg_info &ARG)
!      This target hook should return 'true' if argument ARG at the
       position indicated by CUM should be passed by reference.  This
       predicate is queried after target independent reasons for being
!      passed by reference, such as 'TREE_ADDRESSABLE (ARG.type)'.
  
       If the hook returns true, a copy of that argument is made in memory
       and a pointer to the argument is passed instead of the argument
--- 37320,37341 ----
       On some machines, certain arguments must be passed partially in
       registers and partially in memory.  On these machines, typically
       the first few words of arguments are passed in registers, and the
!      rest on the stack.  If a multi-word argument (a ‘double’ or a
       structure) crosses that boundary, its first few words must be
       passed in registers and the rest must be pushed.  This macro tells
       the compiler when this occurs, and how many bytes should go in
       registers.
  
!      ‘TARGET_FUNCTION_ARG’ for these arguments should return the first
       register to be used by the caller for this argument; likewise
!      ‘TARGET_FUNCTION_INCOMING_ARG’, for the called function.
  
   -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM,
            const function_arg_info &ARG)
!      This target hook should return ‘true’ if argument ARG at the
       position indicated by CUM should be passed by reference.  This
       predicate is queried after target independent reasons for being
!      passed by reference, such as ‘TREE_ADDRESSABLE (ARG.type)’.
  
       If the hook returns true, a copy of that argument is made in memory
       and a pointer to the argument is passed instead of the argument
*************** the stack.
*** 37356,37371 ****
  
   -- Macro: CUMULATIVE_ARGS
       A C type for declaring a variable that is used as the first
!      argument of 'TARGET_FUNCTION_ARG' and other related values.  For
!      some target machines, the type 'int' suffices and can hold the
       number of bytes of argument so far.
  
!      There is no need to record in 'CUMULATIVE_ARGS' anything about the
       arguments that have been passed on the stack.  The compiler has
       other variables to keep track of that.  For target machines on
       which all arguments are passed on the stack, there is no need to
!      store anything in 'CUMULATIVE_ARGS'; however, the data structure
!      must exist and should not be empty, so use 'int'.
  
   -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
       If defined, this macro is called before generating any code for a
--- 37357,37372 ----
  
   -- Macro: CUMULATIVE_ARGS
       A C type for declaring a variable that is used as the first
!      argument of ‘TARGET_FUNCTION_ARG’ and other related values.  For
!      some target machines, the type ‘int’ suffices and can hold the
       number of bytes of argument so far.
  
!      There is no need to record in ‘CUMULATIVE_ARGS’ anything about the
       arguments that have been passed on the stack.  The compiler has
       other variables to keep track of that.  For target machines on
       which all arguments are passed on the stack, there is no need to
!      store anything in ‘CUMULATIVE_ARGS’; however, the data structure
!      must exist and should not be empty, so use ‘int’.
  
   -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
       If defined, this macro is called before generating any code for a
*************** the stack.
*** 37373,37423 ****
       created.  The back end may use this macro to update CFUN to reflect
       an ABI other than that which would normally be used by default.  If
       the compiler is generating code for a compiler-generated function,
!      FNDECL may be 'NULL'.
  
   -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
            N_NAMED_ARGS)
       A C statement (sans semicolon) for initializing the variable CUM
       for the state at the beginning of the argument list.  The variable
!      has type 'CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
       for the data type of the function which will receive the args, or 0
       if the args are to a compiler support library function.  For direct
       calls that are not libcalls, FNDECL contain the declaration node of
!      the function.  FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is
       used to find arguments for the function being compiled.
       N_NAMED_ARGS is set to the number of named arguments, including a
       structure return address if it is passed as a parameter, when
       making a call.  When processing incoming arguments, N_NAMED_ARGS is
!      set to -1.
  
       When processing a call to a compiler support library function,
!      LIBNAME identifies which one.  It is a 'symbol_ref' rtx which
       contains the name of the function, as a string.  LIBNAME is 0 when
       an ordinary C function call is being processed.  Thus, each time
       this macro is called, either LIBNAME or FNTYPE is nonzero, but
       never both of them at once.
  
   -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
!      Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it
!      gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'.
       INDIRECT would always be zero, too.  If this macro is not defined,
!      'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead.
  
   -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
!      Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
       finding the arguments for the function being compiled.  If this
!      macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead.
  
       The value passed for LIBNAME is always 0, since library routines
       with special calling conventions are never compiled with GCC.  The
!      argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'.
  
   -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA,
            const function_arg_info &ARG)
       This hook updates the summarizer variable pointed to by CA to
       advance past argument ARG in the argument list.  Once this is done,
       the variable CUM is suitable for analyzing the _following_ argument
!      with 'TARGET_FUNCTION_ARG', etc.
  
       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
--- 37374,37424 ----
       created.  The back end may use this macro to update CFUN to reflect
       an ABI other than that which would normally be used by default.  If
       the compiler is generating code for a compiler-generated function,
!      FNDECL may be ‘NULL’.
  
   -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
            N_NAMED_ARGS)
       A C statement (sans semicolon) for initializing the variable CUM
       for the state at the beginning of the argument list.  The variable
!      has type ‘CUMULATIVE_ARGS’.  The value of FNTYPE is the tree node
       for the data type of the function which will receive the args, or 0
       if the args are to a compiler support library function.  For direct
       calls that are not libcalls, FNDECL contain the declaration node of
!      the function.  FNDECL is also set when ‘INIT_CUMULATIVE_ARGS’ is
       used to find arguments for the function being compiled.
       N_NAMED_ARGS is set to the number of named arguments, including a
       structure return address if it is passed as a parameter, when
       making a call.  When processing incoming arguments, N_NAMED_ARGS is
!      set to −1.
  
       When processing a call to a compiler support library function,
!      LIBNAME identifies which one.  It is a ‘symbol_ref’ rtx which
       contains the name of the function, as a string.  LIBNAME is 0 when
       an ordinary C function call is being processed.  Thus, each time
       this macro is called, either LIBNAME or FNTYPE is nonzero, but
       never both of them at once.
  
   -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
!      Like ‘INIT_CUMULATIVE_ARGS’ but only used for outgoing libcalls, it
!      gets a ‘MODE’ argument instead of FNTYPE, that would be ‘NULL’.
       INDIRECT would always be zero, too.  If this macro is not defined,
!      ‘INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)’ is used instead.
  
   -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
!      Like ‘INIT_CUMULATIVE_ARGS’ but overrides it for the purposes of
       finding the arguments for the function being compiled.  If this
!      macro is undefined, ‘INIT_CUMULATIVE_ARGS’ is used instead.
  
       The value passed for LIBNAME is always 0, since library routines
       with special calling conventions are never compiled with GCC.  The
!      argument LIBNAME exists for symmetry with ‘INIT_CUMULATIVE_ARGS’.
  
   -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA,
            const function_arg_info &ARG)
       This hook updates the summarizer variable pointed to by CA to
       advance past argument ARG in the argument list.  Once this is done,
       the variable CUM is suitable for analyzing the _following_ argument
!      with ‘TARGET_FUNCTION_ARG’, etc.
  
       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
*************** the stack.
*** 37427,37458 ****
            MODE, const_tree TYPE)
       This hook returns the number of bytes to add to the offset of an
       argument of type TYPE and mode MODE when passed in memory.  This is
!      needed for the SPU, which passes 'char' and '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.
  
   -- Target Hook: pad_direction TARGET_FUNCTION_ARG_PADDING (machine_mode
            MODE, const_tree TYPE)
       This hook determines whether, and in which direction, to pad out an
!      argument of mode MODE and type TYPE.  It returns 'PAD_UPWARD' to
!      insert padding above the argument, 'PAD_DOWNWARD' to insert padding
!      below the argument, or 'PAD_NONE' to inhibit padding.
  
       The _amount_ of padding is not controlled by this hook, but by
!      'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'.  It is always just enough to
       reach the next multiple of that boundary.
  
       This hook has a default definition that is right for most systems.
       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 'int', and upward otherwise.
  
   -- Macro: PAD_VARARGS_DOWN
       If defined, a C expression which determines whether the default
       implementation of va_arg will attempt to pad down before reading
       the next argument, if that argument is smaller than its aligned
!      space as controlled by 'PARM_BOUNDARY'.  If this macro is not
!      defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN'
       is true.
  
   -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
--- 37428,37459 ----
            MODE, const_tree TYPE)
       This hook returns the number of bytes to add to the offset of an
       argument of type TYPE and mode MODE when passed in memory.  This is
!      needed for the SPU, which passes ‘char’ and ‘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.
  
   -- Target Hook: pad_direction TARGET_FUNCTION_ARG_PADDING (machine_mode
            MODE, const_tree TYPE)
       This hook determines whether, and in which direction, to pad out an
!      argument of mode MODE and type TYPE.  It returns ‘PAD_UPWARD’ to
!      insert padding above the argument, ‘PAD_DOWNWARD’ to insert padding
!      below the argument, or ‘PAD_NONE’ to inhibit padding.
  
       The _amount_ of padding is not controlled by this hook, but by
!      ‘TARGET_FUNCTION_ARG_ROUND_BOUNDARY’.  It is always just enough to
       reach the next multiple of that boundary.
  
       This hook has a default definition that is right for most systems.
       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 ‘int’, and upward otherwise.
  
   -- Macro: PAD_VARARGS_DOWN
       If defined, a C expression which determines whether the default
       implementation of va_arg will attempt to pad down before reading
       the next argument, if that argument is smaller than its aligned
!      space as controlled by ‘PARM_BOUNDARY’.  If this macro is not
!      defined, all such arguments are padded down if ‘BYTES_BIG_ENDIAN’
       is true.
  
   -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
*************** the stack.
*** 37460,37466 ****
       registers and memory.  FIRST is nonzero if this is the only
       element.  Defining this macro allows better control of register
       function parameters on big-endian machines, without using
!      'PARALLEL' rtl.  In particular, 'MUST_PASS_IN_STACK' need not test
       padding and mode of types in registers, as there is no longer a
       "wrong" part of a register; For example, a three byte aggregate may
       be passed in the high part of a register if so required.
--- 37461,37467 ----
       registers and memory.  FIRST is nonzero if this is the only
       element.  Defining this macro allows better control of register
       function parameters on big-endian machines, without using
!      ‘PARALLEL’ rtl.  In particular, ‘MUST_PASS_IN_STACK’ need not test
       padding and mode of types in registers, as there is no longer a
       "wrong" part of a register; For example, a three byte aggregate may
       be passed in the high part of a register if so required.
*************** the stack.
*** 37469,37479 ****
            MODE, const_tree TYPE)
       This hook returns the alignment boundary, in bits, of an argument
       with the specified mode and type.  The default hook returns
!      'PARM_BOUNDARY' for all arguments.
  
   -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY
            (machine_mode MODE, const_tree TYPE)
!      Normally, the size of an argument is rounded up to '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.
--- 37470,37480 ----
            MODE, const_tree TYPE)
       This hook returns the alignment boundary, in bits, of an argument
       with the specified mode and type.  The default hook returns
!      ‘PARM_BOUNDARY’ for all arguments.
  
   -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY
            (machine_mode MODE, const_tree TYPE)
!      Normally, the size of an argument is rounded up to ‘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.
*************** the stack.
*** 37495,37513 ****
       in a pair of floating point registers, even though a complex float
       would fit in one 64-bit floating point register.
  
!      The default value of this hook is 'NULL', which is treated as
       always false.
  
   -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
!      This hook returns a type node for 'va_list' for the target.  The
!      default version of the hook returns 'void*'.
  
   -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME,
            tree *PTREE)
!      This target hook is used in function 'c_common_nodes_and_builtins'
       to iterate through the target specific builtin types for va_list.
       The variable IDX is used as iterator.  PNAME has to be a pointer to
!      a 'const char *' and PTREE a pointer to a 'tree' typed variable.
       The arguments PNAME and PTREE are used to store the result of this
       macro and are set to the name of the va_list builtin type and its
       internal type.  If the return value of this macro is zero, then
--- 37496,37514 ----
       in a pair of floating point registers, even though a complex float
       would fit in one 64-bit floating point register.
  
!      The default value of this hook is ‘NULL’, which is treated as
       always false.
  
   -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
!      This hook returns a type node for ‘va_list’ for the target.  The
!      default version of the hook returns ‘void*’.
  
   -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME,
            tree *PTREE)
!      This target hook is used in function ‘c_common_nodes_and_builtins’
       to iterate through the target specific builtin types for va_list.
       The variable IDX is used as iterator.  PNAME has to be a pointer to
!      a ‘const char *’ and PTREE a pointer to a ‘tree’ typed variable.
       The arguments PNAME and PTREE are used to store the result of this
       macro and are set to the name of the va_list builtin type and its
       internal type.  If the return value of this macro is zero, then
*************** the stack.
*** 37517,37539 ****
   -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
       This hook returns the va_list type of the calling convention
       specified by FNDECL.  The default version of this hook returns
!      'va_list_type_node'.
  
   -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
       This hook returns the va_list type of the calling convention
       specified by the type of TYPE.  If TYPE is not a valid va_list
!      type, it returns 'NULL_TREE'.
  
   -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
            TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
!      This hook performs target-specific gimplification of 'VA_ARG_EXPR'.
!      The first two parameters correspond to the arguments to 'va_arg';
!      the latter two are as in 'gimplify.cc:gimplify_expr'.
  
   -- Target Hook: bool TARGET_VALID_POINTER_MODE (scalar_int_mode MODE)
       Define this to return nonzero if the port can handle pointers with
       machine mode MODE.  The default version of this hook returns true
!      for both 'ptr_mode' and 'Pmode'.
  
   -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (ao_ref *REF)
       Define this to return nonzero if the memory reference REF may alias
--- 37518,37540 ----
   -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
       This hook returns the va_list type of the calling convention
       specified by FNDECL.  The default version of this hook returns
!      ‘va_list_type_node’.
  
   -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
       This hook returns the va_list type of the calling convention
       specified by the type of TYPE.  If TYPE is not a valid va_list
!      type, it returns ‘NULL_TREE’.
  
   -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
            TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
!      This hook performs target-specific gimplification of ‘VA_ARG_EXPR’.
!      The first two parameters correspond to the arguments to ‘va_arg’;
!      the latter two are as in ‘gimplify.cc:gimplify_expr’.
  
   -- Target Hook: bool TARGET_VALID_POINTER_MODE (scalar_int_mode MODE)
       Define this to return nonzero if the port can handle pointers with
       machine mode MODE.  The default version of this hook returns true
!      for both ‘ptr_mode’ and ‘Pmode’.
  
   -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (ao_ref *REF)
       Define this to return nonzero if the memory reference REF may alias
*************** the stack.
*** 37546,37552 ****
            (machine_mode MODE)
       Define this hook if during mode attribute processing, the port
       should translate machine_mode MODE to another mode.  For example,
!      rs6000's 'KFmode', when it is the same as 'TFmode'.
  
       The default version of the hook returns that mode that was passed
       in.
--- 37547,37553 ----
            (machine_mode MODE)
       Define this hook if during mode attribute processing, the port
       should translate machine_mode MODE to another mode.  For example,
!      rs6000's ‘KFmode’, when it is the same as ‘TFmode’.
  
       The default version of the hook returns that mode that was passed
       in.
*************** the stack.
*** 37560,37566 ****
       The default version of this hook returns true for any mode required
       to handle the basic C types (as defined by the port).  Included
       here are the double-word arithmetic supported by the code in
!      'optabs.cc'.
  
   -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE)
       Define this to return nonzero if the current target is prepared to
--- 37561,37567 ----
       The default version of this hook returns true for any mode required
       to handle the basic C types (as defined by the port).  Included
       here are the double-word arithmetic supported by the code in
!      ‘optabs.cc’.
  
   -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE)
       Define this to return nonzero if the current target is prepared to
*************** the stack.
*** 37571,37582 ****
            (machine_mode MODE)
       Define this to return nonzero if the port is prepared to handle
       insns involving vector mode MODE in any target configuration.
!      Returning TRUE means that the mode can be used as the 'TYPE_MODE'
       for vector types.
  
       The default version of this hook returns true.  The final mode
!      assigned to 'TYPE_MODE' will also be checked against
!      'TARGET_VECTOR_MODE_SUPPORTED_P' to take target configuration into
       account.
  
   -- Target Hook: bool TARGET_COMPATIBLE_VECTOR_TYPES_P (const_tree
--- 37572,37583 ----
            (machine_mode MODE)
       Define this to return nonzero if the port is prepared to handle
       insns involving vector mode MODE in any target configuration.
!      Returning TRUE means that the mode can be used as the ‘TYPE_MODE’
       for vector types.
  
       The default version of this hook returns true.  The final mode
!      assigned to ‘TYPE_MODE’ will also be checked against
!      ‘TARGET_VECTOR_MODE_SUPPORTED_P’ to take target configuration into
       account.
  
   -- Target Hook: bool TARGET_COMPATIBLE_VECTOR_TYPES_P (const_tree
*************** the stack.
*** 37591,37602 ****
       The main reason for defining this hook is to reject pairs of types
       that are handled differently by the target's calling convention.
       For example, when a new N-bit vector architecture is added to a
!      target, the target may want to handle normal N-bit 'VECTOR_TYPE'
       arguments and return values in the same way as before, to maintain
       backwards compatibility.  However, it may also provide new,
!      architecture-specific 'VECTOR_TYPE's that are passed and returned
       in a more efficient way.  It is then important to maintain a
!      distinction between the "normal" 'VECTOR_TYPE's and the new
       architecture-specific ones.
  
       The default implementation returns true, which is correct for most
--- 37592,37603 ----
       The main reason for defining this hook is to reject pairs of types
       that are handled differently by the target's calling convention.
       For example, when a new N-bit vector architecture is added to a
!      target, the target may want to handle normal N-bit ‘VECTOR_TYPE’
       arguments and return values in the same way as before, to maintain
       backwards compatibility.  However, it may also provide new,
!      architecture-specific ‘VECTOR_TYPE’s that are passed and returned
       in a more efficient way.  It is then important to maintain a
!      distinction between the "normal" ‘VECTOR_TYPE’s and the new
       architecture-specific ones.
  
       The default implementation returns true, which is correct for most
*************** the stack.
*** 37609,37616 ****
       the target has no special requirements.  In the latter case, GCC
       looks for an integer mode of the appropriate size if available and
       uses BLKmode otherwise.  Usually the search for the integer mode is
!      limited to 'MAX_FIXED_MODE_SIZE', but the
!      'TARGET_ARRAY_MODE_SUPPORTED_P' hook allows a larger mode to be
       used in specific cases.
  
       The main use of this hook is to specify that an array of vectors
--- 37610,37617 ----
       the target has no special requirements.  In the latter case, GCC
       looks for an integer mode of the appropriate size if available and
       uses BLKmode otherwise.  Usually the search for the integer mode is
!      limited to ‘MAX_FIXED_MODE_SIZE’, but the
!      ‘TARGET_ARRAY_MODE_SUPPORTED_P’ hook allows a larger mode to be
       used in specific cases.
  
       The main use of this hook is to specify that an array of vectors
*************** the stack.
*** 37621,37627 ****
            unsigned HOST_WIDE_INT NELEMS)
       Return true if GCC should try to use a scalar mode to store an
       array of NELEMS elements, given that each element has mode MODE.
!      Returning true here overrides the usual 'MAX_FIXED_MODE' limit and
       allows GCC to use any defined integer mode.
  
       One use of this hook is to support vector load and store operations
--- 37622,37628 ----
            unsigned HOST_WIDE_INT NELEMS)
       Return true if GCC should try to use a scalar mode to store an
       array of NELEMS elements, given that each element has mode MODE.
!      Returning true here overrides the usual ‘MAX_FIXED_MODE’ limit and
       allows GCC to use any defined integer mode.
  
       One use of this hook is to support vector load and store operations
*************** the stack.
*** 37637,37688 ****
              int8x8_t val[3];
            } int8x8x3_t;
  
!      If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t'
!      can have the same mode.  GCC can then store 'int8x8x3_t's in
       registers rather than forcing them onto the stack.
  
   -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
            (scalar_float_mode MODE)
       Define this to return nonzero if libgcc provides support for the
       floating-point mode MODE, which is known to pass
!      'TARGET_SCALAR_MODE_SUPPORTED_P'.  The default version of this hook
!      returns true for all of 'SFmode', 'DFmode', 'XFmode' and 'TFmode',
       if such modes exist.
  
   -- Target Hook: opt_scalar_float_mode TARGET_FLOATN_MODE (int N, bool
            EXTENDED)
       Define this to return the machine mode to use for the type
!      '_FloatN', if EXTENDED is false, or the type '_FloatNx', if
       EXTENDED is true.  If such a type is not supported, return
!      'opt_scalar_float_mode ()'.  The default version of this hook
!      returns 'SFmode' for '_Float32', 'DFmode' for '_Float64' and
!      '_Float32x' and 'TFmode' for '_Float128', if those modes exist and
       satisfy the requirements for those types and pass
!      'TARGET_SCALAR_MODE_SUPPORTED_P' and
!      'TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P'; for '_Float64x', it
!      returns the first of 'XFmode' and 'TFmode' that exists and
       satisfies the same requirements; for other types, it returns
!      'opt_scalar_float_mode ()'.  The hook is only called for values of
       N and EXTENDED that are valid according to ISO/IEC TS 18661-3:2015;
       that is, N is one of 32, 64, 128, or, if EXTENDED is false, 16 or
       greater than 128 and a multiple of 32.
  
   -- Target Hook: bool TARGET_FLOATN_BUILTIN_P (int FUNC)
!      Define this to return true if the '_FloatN' and '_FloatNx' built-in
       functions should implicitly enable the built-in function without
!      the '__builtin_' prefix in addition to the normal built-in function
!      with the '__builtin_' prefix.  The default is to only enable
!      built-in functions without the '__builtin_' prefix for the GNU C
       langauge.  In strict ANSI/ISO mode, the built-in function without
!      the '__builtin_' prefix is not enabled.  The argument 'FUNC' is the
!      'enum built_in_function' id of the function to be enabled.
  
   -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
            (machine_mode MODE)
       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 MODE, the compiler will try to minimize the lifetime of
!      registers in MODE.  The hook may be called with 'VOIDmode' as
       argument.  In this case, the hook is expected to return nonzero if
       it returns nonzero for any mode.
  
--- 37638,37689 ----
              int8x8_t val[3];
            } int8x8x3_t;
  
!      If this hook allows ‘val’ to have a scalar mode, then ‘int8x8x3_t’
!      can have the same mode.  GCC can then store ‘int8x8x3_t’s in
       registers rather than forcing them onto the stack.
  
   -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
            (scalar_float_mode MODE)
       Define this to return nonzero if libgcc provides support for the
       floating-point mode MODE, which is known to pass
!      ‘TARGET_SCALAR_MODE_SUPPORTED_P’.  The default version of this hook
!      returns true for all of ‘SFmode’, ‘DFmode’, ‘XFmode’ and ‘TFmode’,
       if such modes exist.
  
   -- Target Hook: opt_scalar_float_mode TARGET_FLOATN_MODE (int N, bool
            EXTENDED)
       Define this to return the machine mode to use for the type
!      ‘_FloatN’, if EXTENDED is false, or the type ‘_FloatNx’, if
       EXTENDED is true.  If such a type is not supported, return
!      ‘opt_scalar_float_mode ()’.  The default version of this hook
!      returns ‘SFmode’ for ‘_Float32’, ‘DFmode’ for ‘_Float64’ and
!      ‘_Float32x’ and ‘TFmode’ for ‘_Float128’, if those modes exist and
       satisfy the requirements for those types and pass
!      ‘TARGET_SCALAR_MODE_SUPPORTED_P’ and
!      ‘TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P’; for ‘_Float64x’, it
!      returns the first of ‘XFmode’ and ‘TFmode’ that exists and
       satisfies the same requirements; for other types, it returns
!      ‘opt_scalar_float_mode ()’.  The hook is only called for values of
       N and EXTENDED that are valid according to ISO/IEC TS 18661-3:2015;
       that is, N is one of 32, 64, 128, or, if EXTENDED is false, 16 or
       greater than 128 and a multiple of 32.
  
   -- Target Hook: bool TARGET_FLOATN_BUILTIN_P (int FUNC)
!      Define this to return true if the ‘_FloatN’ and ‘_FloatNx’ built-in
       functions should implicitly enable the built-in function without
!      the ‘__builtin_’ prefix in addition to the normal built-in function
!      with the ‘__builtin_’ prefix.  The default is to only enable
!      built-in functions without the ‘__builtin_’ prefix for the GNU C
       langauge.  In strict ANSI/ISO mode, the built-in function without
!      the ‘__builtin_’ prefix is not enabled.  The argument ‘FUNC’ is the
!      ‘enum built_in_function’ id of the function to be enabled.
  
   -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
            (machine_mode MODE)
       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 MODE, the compiler will try to minimize the lifetime of
!      registers in MODE.  The hook may be called with ‘VOIDmode’ as
       argument.  In this case, the hook is expected to return nonzero if
       it returns nonzero for any mode.
  
*************** the stack.
*** 37700,37706 ****
       requires specific registers for the legacy x86 integer
       instructions, but there are many SSE registers for floating point
       operations.  On such targets, a good strategy may be to return
!      nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero
       for the SSE register classes.
  
       The default version of this hook returns false for any mode.  It is
--- 37701,37707 ----
       requires specific registers for the legacy x86 integer
       instructions, but there are many SSE registers for floating point
       operations.  On such targets, a good strategy may be to return
!      nonzero from this hook for ‘INTEGRAL_MODE_P’ machine modes but zero
       for the SSE register classes.
  
       The default version of this hook returns false for any mode.  It is
*************** values--values that can fit in registers
*** 37726,37756 ****
       Define this to return an RTX representing the place where a
       function returns or receives a value of data type RET_TYPE, a tree
       node representing a data type.  FN_DECL_OR_TYPE is a tree node
!      representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being
       called.  If OUTGOING is false, the hook should compute the register
       in which the caller will see the return value.  Otherwise, the hook
       should return an RTX representing the place where a function
       returns a value.
  
!      On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant.
       (Actually, on most machines, scalar values are returned in the same
       place regardless of mode.)  The value of the expression is usually
!      a 'reg' RTX for the hard register where the return value is stored.
!      The value can also be a 'parallel' RTX, if the return value is in
!      multiple places.  See 'TARGET_FUNCTION_ARG' for an explanation of
!      the 'parallel' form.  Note that the callee will populate every
!      location specified in the 'parallel', but if the first element of
!      the 'parallel' contains the whole return value, callers will use
       that element as the canonical location and ignore the others.  The
!      m68k port uses this type of 'parallel' to return pointers in both
!      '%a0' (the canonical location) and '%d0'.
  
!      If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
!      the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is
       a scalar type.
  
       If the precise function being called is known, FUNC is a tree node
!      ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
       makes it possible to use a different value-returning convention for
       specific functions when all their calls are known.
  
--- 37727,37757 ----
       Define this to return an RTX representing the place where a
       function returns or receives a value of data type RET_TYPE, a tree
       node representing a data type.  FN_DECL_OR_TYPE is a tree node
!      representing ‘FUNCTION_DECL’ or ‘FUNCTION_TYPE’ of a function being
       called.  If OUTGOING is false, the hook should compute the register
       in which the caller will see the return value.  Otherwise, the hook
       should return an RTX representing the place where a function
       returns a value.
  
!      On many machines, only ‘TYPE_MODE (RET_TYPE)’ is relevant.
       (Actually, on most machines, scalar values are returned in the same
       place regardless of mode.)  The value of the expression is usually
!      a ‘reg’ RTX for the hard register where the return value is stored.
!      The value can also be a ‘parallel’ RTX, if the return value is in
!      multiple places.  See ‘TARGET_FUNCTION_ARG’ for an explanation of
!      the ‘parallel’ form.  Note that the callee will populate every
!      location specified in the ‘parallel’, but if the first element of
!      the ‘parallel’ contains the whole return value, callers will use
       that element as the canonical location and ignore the others.  The
!      m68k port uses this type of ‘parallel’ to return pointers in both
!      ‘%a0’ (the canonical location) and ‘%d0’.
  
!      If ‘TARGET_PROMOTE_FUNCTION_RETURN’ returns true, you must apply
!      the same promotion rules specified in ‘PROMOTE_MODE’ if VALTYPE is
       a scalar type.
  
       If the precise function being called is known, FUNC is a tree node
!      (‘FUNCTION_DECL’) for it; otherwise, FUNC is a null pointer.  This
       makes it possible to use a different value-returning convention for
       specific functions when all their calls are known.
  
*************** values--values that can fit in registers
*** 37759,37770 ****
       which the caller sees the value.  For such machines, you should
       return different RTX depending on OUTGOING.
  
!      'TARGET_FUNCTION_VALUE' is not used for return values with
       aggregate data types, because these are returned in another way.
!      See 'TARGET_STRUCT_VALUE_RTX' and related macros, below.
  
   -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
!      This macro has been deprecated.  Use 'TARGET_FUNCTION_VALUE' for a
       new target instead.
  
   -- Macro: LIBCALL_VALUE (MODE)
--- 37760,37771 ----
       which the caller sees the value.  For such machines, you should
       return different RTX depending on OUTGOING.
  
!      ‘TARGET_FUNCTION_VALUE’ is not used for return values with
       aggregate data types, because these are returned in another way.
!      See ‘TARGET_STRUCT_VALUE_RTX’ and related macros, below.
  
   -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
!      This macro has been deprecated.  Use ‘TARGET_FUNCTION_VALUE’ for a
       new target instead.
  
   -- Macro: LIBCALL_VALUE (MODE)
*************** values--values that can fit in registers
*** 37794,37800 ****
       register in which the values of called function may come back.
  
       A register whose use for returning values is limited to serving as
!      the second of a pair (for a value of type 'double', say) need not
       be recognized by this macro.  So for most machines, this definition
       suffices:
  
--- 37795,37801 ----
       register in which the values of called function may come back.
  
       A register whose use for returning values is limited to serving as
!      the second of a pair (for a value of type ‘double’, say) need not
       be recognized by this macro.  So for most machines, this definition
       suffices:
  
*************** values--values that can fit in registers
*** 37805,37819 ****
       macro should recognize only the caller's register numbers.
  
       This macro has been deprecated.  Use
!      'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead.
  
   -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
            REGNO)
!      A target hook that return 'true' if REGNO is the number of a hard
       register in which the values of called function may come back.
  
       A register whose use for returning values is limited to serving as
!      the second of a pair (for a value of type 'double', say) need not
       be recognized by this target hook.
  
       If the machine has register windows, so that the caller and the
--- 37806,37820 ----
       macro should recognize only the caller's register numbers.
  
       This macro has been deprecated.  Use
!      ‘TARGET_FUNCTION_VALUE_REGNO_P’ for a new target instead.
  
   -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
            REGNO)
!      A target hook that return ‘true’ if REGNO is the number of a hard
       register in which the values of called function may come back.
  
       A register whose use for returning values is limited to serving as
!      the second of a pair (for a value of type ‘double’, say) need not
       be recognized by this target hook.
  
       If the machine has register windows, so that the caller and the
*************** values--values that can fit in registers
*** 37824,37831 ****
       used.
  
   -- Macro: APPLY_RESULT_SIZE
!      Define this macro if 'untyped_call' and 'untyped_return' need more
!      space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and
       restoring an arbitrary return value.
  
   -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG
--- 37825,37832 ----
       used.
  
   -- Macro: APPLY_RESULT_SIZE
!      Define this macro if ‘untyped_call’ and ‘untyped_return’ need more
!      space than is implied by ‘FUNCTION_VALUE_REGNO_P’ for saving and
       restoring an arbitrary return value.
  
   -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG
*************** values--values that can fit in registers
*** 37841,37850 ****
       padded at the least significant end).  You can assume that TYPE is
       returned in a register; the caller is required to check this.
  
!      Note that the register provided by 'TARGET_FUNCTION_VALUE' must be
       able to hold the complete return value.  For example, if a 1-, 2-
       or 3-byte structure is returned at the most significant end of a
!      4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode'
       rtx.
  
  
--- 37842,37851 ----
       padded at the least significant end).  You can assume that TYPE is
       returned in a register; the caller is required to check this.
  
!      Note that the register provided by ‘TARGET_FUNCTION_VALUE’ must be
       able to hold the complete return value.  For example, if a 1-, 2-
       or 3-byte structure is returned at the most significant end of a
!      4-byte register, ‘TARGET_FUNCTION_VALUE’ should provide an ‘SImode’
       rtx.
  
  
*************** File: gccint.info,  Node: Aggregate Retu
*** 37853,37863 ****
  18.9.9 How Large Values Are Returned
  ------------------------------------
  
! When a function value's mode is 'BLKmode' (and in some other cases), the
! value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar
  Return::).  Instead, the caller passes the address of a block of memory
  in which the value should be stored.  This address is called the
! "structure value address".
  
   This section describes how to control returning structure values in
  memory.
--- 37854,37864 ----
  18.9.9 How Large Values Are Returned
  ------------------------------------
  
! When a function value's mode is ‘BLKmode’ (and in some other cases), the
! value is not returned according to ‘TARGET_FUNCTION_VALUE’ (*note Scalar
  Return::).  Instead, the caller passes the address of a block of memory
  in which the value should be stored.  This address is called the
! “structure value address”.
  
   This section describes how to control returning structure values in
  memory.
*************** memory.
*** 37867,37885 ****
       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 TYPE will be the data type of the value, and FNTYPE
!      will be the type of the function doing the returning, or 'NULL' for
       libcalls.
  
!      Note that values of mode 'BLKmode' must be explicitly handled by
!      this function.  Also, the option '-fpcc-struct-return' takes effect
       regardless of this macro.  On most systems, it is possible to leave
       the hook undefined; this causes a default definition to be used,
!      whose value is the constant 1 for 'BLKmode' values, and 0
       otherwise.
  
       Do not use this hook to indicate that structures and unions should
       always be returned in memory.  You should instead use
!      'DEFAULT_PCC_STRUCT_RETURN' to indicate this.
  
   -- Macro: DEFAULT_PCC_STRUCT_RETURN
       Define this macro to be 1 if all structure and union return values
--- 37868,37886 ----
       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 TYPE will be the data type of the value, and FNTYPE
!      will be the type of the function doing the returning, or ‘NULL’ for
       libcalls.
  
!      Note that values of mode ‘BLKmode’ must be explicitly handled by
!      this function.  Also, the option ‘-fpcc-struct-return’ takes effect
       regardless of this macro.  On most systems, it is possible to leave
       the hook undefined; this causes a default definition to be used,
!      whose value is the constant 1 for ‘BLKmode’ values, and 0
       otherwise.
  
       Do not use this hook to indicate that structures and unions should
       always be returned in memory.  You should instead use
!      ‘DEFAULT_PCC_STRUCT_RETURN’ to indicate this.
  
   -- Macro: DEFAULT_PCC_STRUCT_RETURN
       Define this macro to be 1 if all structure and union return values
*************** memory.
*** 37887,37900 ****
       be defined only if needed for compatibility with other compilers or
       with an ABI.  If you define this macro to be 0, then the
       conventions used for structure and union return values are decided
!      by the 'TARGET_RETURN_IN_MEMORY' target hook.
  
       If not defined, this defaults to the value 1.
  
   -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
       This target hook should return the location of the structure value
!      address (normally a 'mem' or 'reg'), or 0 if the address is passed
!      as an "invisible" first argument.  Note that FNDECL may be 'NULL',
       for libcalls.  You do not need to define this target hook if the
       address is always passed as an "invisible" first argument.
  
--- 37888,37901 ----
       be defined only if needed for compatibility with other compilers or
       with an ABI.  If you define this macro to be 0, then the
       conventions used for structure and union return values are decided
!      by the ‘TARGET_RETURN_IN_MEMORY’ target hook.
  
       If not defined, this defaults to the value 1.
  
   -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
       This target hook should return the location of the structure value
!      address (normally a ‘mem’ or ‘reg’), or 0 if the address is passed
!      as an "invisible" first argument.  Note that FNDECL may be ‘NULL’,
       for libcalls.  You do not need to define this target hook if the
       address is always passed as an "invisible" first argument.
  
*************** memory.
*** 37902,37913 ****
       is found by the called function is not the same place that the
       caller put it.  This can be due to register windows, or it could be
       because the function prologue moves it to a different place.
!      INCOMING is '1' or '2' when the location is needed in the context
!      of the called function, and '0' in the context of the caller.
  
       If INCOMING is nonzero and the address is to be found on the stack,
!      return a 'mem' which refers to the frame pointer.  If INCOMING is
!      '2', the result is being used to fetch the structure value address
       at the beginning of a function.  If you need to emit adjusting
       code, you should do it at this point.
  
--- 37903,37914 ----
       is found by the called function is not the same place that the
       caller put it.  This can be due to register windows, or it could be
       because the function prologue moves it to a different place.
!      INCOMING is ‘1’ or ‘2’ when the location is needed in the context
!      of the called function, and ‘0’ in the context of the caller.
  
       If INCOMING is nonzero and the address is to be found on the stack,
!      return a ‘mem’ which refers to the frame pointer.  If INCOMING is
!      ‘2’, the result is being used to fetch the structure value address
       at the beginning of a function.  If you need to emit adjusting
       code, you should do it at this point.
  
*************** memory.
*** 37920,37943 ****
       Do not define this if the usual system convention is for the caller
       to pass an address to the subroutine.
  
!      This macro has effect in '-fpcc-struct-return' mode, but it does
!      nothing when you use '-freg-struct-return' mode.
  
   -- Target Hook: fixed_size_mode TARGET_GET_RAW_RESULT_MODE (int REGNO)
       This target hook returns the mode to be used when accessing raw
!      return registers in '__builtin_return'.  Define this macro if the
!      value in REG_RAW_MODE is not correct.  Use 'VOIDmode' if a register
!      should be ignored for '__builtin_return' purposes.
  
   -- Target Hook: fixed_size_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
       This target hook returns the mode to be used when accessing raw
!      argument registers in '__builtin_apply_args'.  Define this macro if
!      the value in REG_RAW_MODE is not correct.  Use 'VOIDmode' if a
!      register should be ignored for '__builtin_apply_args' purposes.
  
   -- Target Hook: bool TARGET_EMPTY_RECORD_P (const_tree TYPE)
       This target hook returns true if the type is an empty record.  The
!      default is to return 'false'.
  
   -- Target Hook: void TARGET_WARN_PARAMETER_PASSING_ABI
            (cumulative_args_t CA, tree TYPE)
--- 37921,37944 ----
       Do not define this if the usual system convention is for the caller
       to pass an address to the subroutine.
  
!      This macro has effect in ‘-fpcc-struct-return’ mode, but it does
!      nothing when you use ‘-freg-struct-return’ mode.
  
   -- Target Hook: fixed_size_mode TARGET_GET_RAW_RESULT_MODE (int REGNO)
       This target hook returns the mode to be used when accessing raw
!      return registers in ‘__builtin_return’.  Define this macro if the
!      value in REG_RAW_MODE is not correct.  Use ‘VOIDmode’ if a register
!      should be ignored for ‘__builtin_return’ purposes.
  
   -- Target Hook: fixed_size_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
       This target hook returns the mode to be used when accessing raw
!      argument registers in ‘__builtin_apply_args’.  Define this macro if
!      the value in REG_RAW_MODE is not correct.  Use ‘VOIDmode’ if a
!      register should be ignored for ‘__builtin_apply_args’ purposes.
  
   -- Target Hook: bool TARGET_EMPTY_RECORD_P (const_tree TYPE)
       This target hook returns true if the type is an empty record.  The
!      default is to return ‘false’.
  
   -- Target Hook: void TARGET_WARN_PARAMETER_PASSING_ABI
            (cumulative_args_t CA, tree TYPE)
*************** must live across calls.
*** 37957,37963 ****
   -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
       A C expression specifying which mode is required for saving NREGS
       of a pseudo-register in call-clobbered hard register REGNO.  If
!      REGNO is unsuitable for caller save, 'VOIDmode' should be returned.
       For most machines this macro need not be defined since GCC will
       select the smallest suitable mode.
  
--- 37958,37964 ----
   -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
       A C expression specifying which mode is required for saving NREGS
       of a pseudo-register in call-clobbered hard register REGNO.  If
!      REGNO is unsuitable for caller save, ‘VOIDmode’ should be returned.
       For most machines this macro need not be defined since GCC will
       select the smallest suitable mode.
  
*************** File: gccint.info,  Node: Function Entry
*** 37968,37974 ****
  -------------------------------
  
  This section describes the macros that output function entry
! ("prologue") and exit ("epilogue") code.
  
   -- Target Hook: void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE
            *FILE, unsigned HOST_WIDE_INT PATCH_AREA_SIZE, bool RECORD_P)
--- 37969,37975 ----
  -------------------------------
  
  This section describes the macros that output function entry
! (“prologue”) and exit (“epilogue”) code.
  
   -- Target Hook: void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE
            *FILE, unsigned HOST_WIDE_INT PATCH_AREA_SIZE, bool RECORD_P)
*************** This section describes the macros that o
*** 37977,37983 ****
       sections and if RECORD_P is true, insert a pointer to the current
       location in the table of patchable functions.  The default
       implementation of the hook places the table of pointers in the
!      special section named '__patchable_function_entries'.
  
   -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE)
       If defined, a function that outputs the assembler code for entry to
--- 37978,37984 ----
       sections and if RECORD_P is true, insert a pointer to the current
       location in the table of patchable functions.  The default
       implementation of the hook places the table of pointers in the
!      special section named ‘__patchable_function_entries’.
  
   -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE)
       If defined, a function that outputs the assembler code for entry to
*************** This section describes the macros that o
*** 37991,38001 ****
       this macro.  That has already been done when the macro is run.
  
       To determine which registers to save, the macro can refer to the
!      array 'regs_ever_live': element R is nonzero if hard register R is
       used anywhere within the function.  This implies the function
       prologue should save register R, provided it is not one of the
!      call-used registers.  ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise
!      use 'regs_ever_live'.)
  
       On machines that have "register windows", the function entry code
       does not save on the stack the registers that are in the windows,
--- 37992,38002 ----
       this macro.  That has already been done when the macro is run.
  
       To determine which registers to save, the macro can refer to the
!      array ‘regs_ever_live’: element R is nonzero if hard register R is
       used anywhere within the function.  This implies the function
       prologue should save register R, provided it is not one of the
!      call-used registers.  (‘TARGET_ASM_FUNCTION_EPILOGUE’ must likewise
!      use ‘regs_ever_live’.)
  
       On machines that have "register windows", the function entry code
       does not save on the stack the registers that are in the windows,
*************** This section describes the macros that o
*** 38007,38020 ****
       function entry code must vary accordingly; it must set up the frame
       pointer if one is wanted, and not otherwise.  To determine whether
       a frame pointer is in wanted, the macro can refer to the variable
!      'frame_pointer_needed'.  The variable's value will be 1 at run time
       in a function that needs a frame pointer.  *Note Elimination::.
  
       The function entry code is responsible for allocating any stack
       space required for the function.  This stack space consists of the
       regions listed below.  In most cases, these regions are allocated
       in the order listed, with the last listed region closest to the top
!      of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is
       defined, and the highest address if it is not defined).  You can
       use a different order for a machine if doing so is more convenient
       or required for compatibility reasons.  Except in cases where
--- 38008,38021 ----
       function entry code must vary accordingly; it must set up the frame
       pointer if one is wanted, and not otherwise.  To determine whether
       a frame pointer is in wanted, the macro can refer to the variable
!      ‘frame_pointer_needed’.  The variable's value will be 1 at run time
       in a function that needs a frame pointer.  *Note Elimination::.
  
       The function entry code is responsible for allocating any stack
       space required for the function.  This stack space consists of the
       regions listed below.  In most cases, these regions are allocated
       in the order listed, with the last listed region closest to the top
!      of the stack (the lowest address if ‘STACK_GROWS_DOWNWARD’ is
       defined, and the highest address if it is not defined).  You can
       use a different order for a machine if doing so is more convenient
       or required for compatibility reasons.  Except in cases where
*************** This section describes the macros that o
*** 38039,38084 ****
       from a function.  The epilogue is responsible for restoring the
       saved registers and stack pointer to their values when the function
       was called, and returning control to the caller.  This macro takes
!      the same argument as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and
!      the registers to restore are determined from 'regs_ever_live' and
!      'CALL_USED_REGISTERS' in the same way.
  
       On some machines, there is a single instruction that does all the
       work of returning from the function.  On these machines, give that
!      instruction the name 'return' and do not define the macro
!      'TARGET_ASM_FUNCTION_EPILOGUE' at all.
  
!      Do not define a pattern named 'return' if you want the
!      'TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
       switches to control whether return instructions or epilogues are
!      used, define a 'return' pattern with a validity condition that
!      tests the target switches appropriately.  If the 'return' pattern's
       validity condition is false, epilogues will be used.
  
       On machines where functions may or may not have frame-pointers, the
       function exit code must vary accordingly.  Sometimes the code for
       these two cases is completely different.  To determine whether a
       frame pointer is wanted, the macro can refer to the variable
!      'frame_pointer_needed'.  The variable's value will be 1 when
       compiling a function that needs a frame pointer.
  
!      Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and
!      'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
!      The C variable 'current_function_is_leaf' is nonzero for such a
       function.  *Note Leaf Functions::.
  
       On some machines, some functions pop their arguments on exit while
       others leave that for the caller to do.  For example, the 68020
!      when given '-mrtd' pops arguments in functions that take a fixed
       number of arguments.
  
!      Your definition of the macro 'RETURN_POPS_ARGS' decides which
!      functions pop their own arguments.  'TARGET_ASM_FUNCTION_EPILOGUE'
       needs to know what was decided.  The number of bytes of the current
       function's arguments that this function should pop is available in
!      'crtl->args.pops_args'.  *Note Scalar Return::.
  
!    * A region of 'crtl->args.pretend_args_size' bytes of uninitialized
       space just underneath the first argument arriving on the stack.
       (This may not be at the very start of the allocated stack region if
       the calling sequence has pushed anything else since pushing the
--- 38040,38085 ----
       from a function.  The epilogue is responsible for restoring the
       saved registers and stack pointer to their values when the function
       was called, and returning control to the caller.  This macro takes
!      the same argument as the macro ‘TARGET_ASM_FUNCTION_PROLOGUE’, and
!      the registers to restore are determined from ‘regs_ever_live’ and
!      ‘CALL_USED_REGISTERS’ in the same way.
  
       On some machines, there is a single instruction that does all the
       work of returning from the function.  On these machines, give that
!      instruction the name ‘return’ and do not define the macro
!      ‘TARGET_ASM_FUNCTION_EPILOGUE’ at all.
  
!      Do not define a pattern named ‘return’ if you want the
!      ‘TARGET_ASM_FUNCTION_EPILOGUE’ to be used.  If you want the target
       switches to control whether return instructions or epilogues are
!      used, define a ‘return’ pattern with a validity condition that
!      tests the target switches appropriately.  If the ‘return’ pattern's
       validity condition is false, epilogues will be used.
  
       On machines where functions may or may not have frame-pointers, the
       function exit code must vary accordingly.  Sometimes the code for
       these two cases is completely different.  To determine whether a
       frame pointer is wanted, the macro can refer to the variable
!      ‘frame_pointer_needed’.  The variable's value will be 1 when
       compiling a function that needs a frame pointer.
  
!      Normally, ‘TARGET_ASM_FUNCTION_PROLOGUE’ and
!      ‘TARGET_ASM_FUNCTION_EPILOGUE’ must treat leaf functions specially.
!      The C variable ‘current_function_is_leaf’ is nonzero for such a
       function.  *Note Leaf Functions::.
  
       On some machines, some functions pop their arguments on exit while
       others leave that for the caller to do.  For example, the 68020
!      when given ‘-mrtd’ pops arguments in functions that take a fixed
       number of arguments.
  
!      Your definition of the macro ‘RETURN_POPS_ARGS’ decides which
!      functions pop their own arguments.  ‘TARGET_ASM_FUNCTION_EPILOGUE’
       needs to know what was decided.  The number of bytes of the current
       function's arguments that this function should pop is available in
!      ‘crtl->args.pops_args’.  *Note Scalar Return::.
  
!    • A region of ‘crtl->args.pretend_args_size’ bytes of uninitialized
       space just underneath the first argument arriving on the stack.
       (This may not be at the very start of the allocated stack region if
       the calling sequence has pushed anything else since pushing the
*************** This section describes the macros that o
*** 38086,38108 ****
       been pushed yet, because the function prologue itself does all the
       pushing.)  This region is used on machines where an argument may be
       passed partly in registers and partly in memory, and, in some cases
!      to support the features in '<stdarg.h>'.
  
!    * An area of memory used to save certain registers used by the
       function.  The size of this area, which may also include space for
       such things as the return address and pointers to previous stack
       frames, is machine-specific and usually depends on which registers
       have been used in the function.  Machines with register windows
       often do not require a save area.
  
!    * A region of at least SIZE bytes, possibly rounded up to an
       allocation boundary, to contain the local variables of the
       function.  On some machines, this region and the save area may
       occur in the opposite order, with the save area closer to the top
       of the stack.
  
!    * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of
!      'crtl->outgoing_args_size' bytes to be used for outgoing argument
       lists of the function.  *Note Stack Arguments::.
  
   -- Macro: EXIT_IGNORE_STACK
--- 38087,38109 ----
       been pushed yet, because the function prologue itself does all the
       pushing.)  This region is used on machines where an argument may be
       passed partly in registers and partly in memory, and, in some cases
!      to support the features in ‘<stdarg.h>’.
  
!    • An area of memory used to save certain registers used by the
       function.  The size of this area, which may also include space for
       such things as the return address and pointers to previous stack
       frames, is machine-specific and usually depends on which registers
       have been used in the function.  Machines with register windows
       often do not require a save area.
  
!    • A region of at least SIZE bytes, possibly rounded up to an
       allocation boundary, to contain the local variables of the
       function.  On some machines, this region and the save area may
       occur in the opposite order, with the save area closer to the top
       of the stack.
  
!    • Optionally, when ‘ACCUMULATE_OUTGOING_ARGS’ is defined, a region of
!      ‘crtl->outgoing_args_size’ bytes to be used for outgoing argument
       lists of the function.  *Note Stack Arguments::.
  
   -- Macro: EXIT_IGNORE_STACK
*************** This section describes the macros that o
*** 38115,38125 ****
       Note that this macro's value is relevant only for functions for
       which frame pointers are maintained.  It is never safe to delete a
       final stack adjustment in a function that has no frame pointer, and
!      the compiler knows this regardless of 'EXIT_IGNORE_STACK'.
  
   -- Macro: EPILOGUE_USES (REGNO)
       Define this macro as a C expression that is nonzero for registers
!      that are used by the epilogue or the 'return' pattern.  The stack
       and frame pointer registers are already assumed to be used as
       needed.
  
--- 38116,38126 ----
       Note that this macro's value is relevant only for functions for
       which frame pointers are maintained.  It is never safe to delete a
       final stack adjustment in a function that has no frame pointer, and
!      the compiler knows this regardless of ‘EXIT_IGNORE_STACK’.
  
   -- Macro: EPILOGUE_USES (REGNO)
       Define this macro as a C expression that is nonzero for registers
!      that are used by the epilogue or the ‘return’ pattern.  The stack
       and frame pointer registers are already assumed to be used as
       needed.
  
*************** This section describes the macros that o
*** 38139,38164 ****
  
       First, emit code to add the integer DELTA to the location that
       contains the incoming first argument.  Assume that this argument
!      contains a pointer, and is the one used to pass the 'this' pointer
       in C++.  This is the incoming argument _before_ the function
!      prologue, e.g. '%o0' on a sparc.  The addition must preserve the
       values of all other incoming arguments.
  
       Then, if VCALL_OFFSET is nonzero, an additional adjustment should
!      be made after adding 'delta'.  In particular, if P is the adjusted
       pointer, the following adjustment should be made:
  
            p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
  
       After the additions, emit code to jump to FUNCTION, which is a
!      'FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
       not touch the return address.  Hence returning from FUNCTION will
!      return to whoever called the current 'thunk'.
  
       The effect must be as if FUNCTION had been called directly with the
       adjusted first argument.  This macro is responsible for emitting
       all of the code for a thunk function;
!      'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE'
       are not invoked.
  
       The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
--- 38140,38165 ----
  
       First, emit code to add the integer DELTA to the location that
       contains the incoming first argument.  Assume that this argument
!      contains a pointer, and is the one used to pass the ‘this’ pointer
       in C++.  This is the incoming argument _before_ the function
!      prologue, e.g. ‘%o0’ on a sparc.  The addition must preserve the
       values of all other incoming arguments.
  
       Then, if VCALL_OFFSET is nonzero, an additional adjustment should
!      be made after adding ‘delta’.  In particular, if P is the adjusted
       pointer, the following adjustment should be made:
  
            p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
  
       After the additions, emit code to jump to FUNCTION, which is a
!      ‘FUNCTION_DECL’.  This is a direct pure jump, not a call, and does
       not touch the return address.  Hence returning from FUNCTION will
!      return to whoever called the current ‘thunk’.
  
       The effect must be as if FUNCTION had been called directly with the
       adjusted first argument.  This macro is responsible for emitting
       all of the code for a thunk function;
!      ‘TARGET_ASM_FUNCTION_PROLOGUE’ and ‘TARGET_ASM_FUNCTION_EPILOGUE’
       are not invoked.
  
       The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
*************** These macros will help you generate code
*** 38189,38217 ****
  
   -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
       A C statement or compound statement to output to FILE some
!      assembler code to call the profiling subroutine 'mcount'.
  
!      The details of how 'mcount' expects to be called are determined by
       your operating system environment, not by GCC.  To figure them out,
       compile a small program for profiling using the system's installed
       C compiler and look at the assembler code that results.
  
!      Older implementations of 'mcount' expect the address of a counter
       variable to be loaded into some register.  The name of this
!      variable is 'LP' followed by the number LABELNO, so you would
!      generate the name using 'LP%d' in a 'fprintf'.
  
   -- Macro: PROFILE_HOOK
       A C statement or compound statement to output to FILE some assembly
!      code to call the profiling subroutine 'mcount' even the target does
       not support profiling.
  
   -- Macro: NO_PROFILE_COUNTERS
       Define this macro to be an expression with a nonzero value if the
!      'mcount' subroutine on your system does not need a counter variable
       allocated for each function.  This is true for almost all modern
       implementations.  If you define this macro, you must not use the
!      LABELNO argument to 'FUNCTION_PROFILER'.
  
   -- Macro: PROFILE_BEFORE_PROLOGUE
       Define this macro if the code for function profiling should come
--- 38190,38218 ----
  
   -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
       A C statement or compound statement to output to FILE some
!      assembler code to call the profiling subroutine ‘mcount’.
  
!      The details of how ‘mcount’ expects to be called are determined by
       your operating system environment, not by GCC.  To figure them out,
       compile a small program for profiling using the system's installed
       C compiler and look at the assembler code that results.
  
!      Older implementations of ‘mcount’ expect the address of a counter
       variable to be loaded into some register.  The name of this
!      variable is ‘LP’ followed by the number LABELNO, so you would
!      generate the name using ‘LP%d’ in a ‘fprintf’.
  
   -- Macro: PROFILE_HOOK
       A C statement or compound statement to output to FILE some assembly
!      code to call the profiling subroutine ‘mcount’ even the target does
       not support profiling.
  
   -- Macro: NO_PROFILE_COUNTERS
       Define this macro to be an expression with a nonzero value if the
!      ‘mcount’ subroutine on your system does not need a counter variable
       allocated for each function.  This is true for almost all modern
       implementations.  If you define this macro, you must not use the
!      LABELNO argument to ‘FUNCTION_PROFILER’.
  
   -- Macro: PROFILE_BEFORE_PROLOGUE
       Define this macro if the code for function profiling should come
*************** File: gccint.info,  Node: Tail Calls,  N
*** 38234,38246 ****
   -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
            EXP)
       True if it is OK to do sibling call optimization for the specified
!      call expression EXP.  DECL will be the called function, or 'NULL'
       if this is an indirect call.
  
       It is not uncommon for limitations of calling conventions to
       prevent tail calls to functions outside the current unit of
       translation, or during PIC compilation.  The hook is used to
!      enforce these restrictions, as the '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.
--- 38235,38247 ----
   -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
            EXP)
       True if it is OK to do sibling call optimization for the specified
!      call expression EXP.  DECL will be the called function, or ‘NULL’
       if this is an indirect call.
  
       It is not uncommon for limitations of calling conventions to
       prevent tail calls to functions outside the current unit of
       translation, or during PIC compilation.  The hook is used to
!      enforce these restrictions, as the ‘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.
*************** teardown) those components do is not don
*** 38288,38312 ****
  paths where this would unnecessary.
  
   What exactly those components are is up to the target code; the generic
! code treats them abstractly, as a bit in an 'sbitmap'.  These 'sbitmap's
! are allocated by the 'shrink_wrap.get_separate_components' and
! 'shrink_wrap.components_for_bb' hooks, and deallocated by the generic
  code.
  
   -- Target Hook: sbitmap TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
            (void)
!      This hook should return an 'sbitmap' with the bits set for those
       components that can be separately shrink-wrapped in the current
!      function.  Return 'NULL' if the current function should not get any
       separate shrink-wrapping.  Don't define this hook if it would
!      always return 'NULL'.  If it is defined, the other hooks in this
       group have to be defined as well.
  
   -- Target Hook: sbitmap TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
            (basic_block)
!      This hook should return an 'sbitmap' with the bits set for those
       components where either the prologue component has to be executed
!      before the 'basic_block', or the epilogue component after it, or
       both.
  
   -- Target Hook: void TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS (sbitmap
--- 38289,38313 ----
  paths where this would unnecessary.
  
   What exactly those components are is up to the target code; the generic
! code treats them abstractly, as a bit in an ‘sbitmap’.  These ‘sbitmap’s
! are allocated by the ‘shrink_wrap.get_separate_components’ and
! ‘shrink_wrap.components_for_bb’ hooks, and deallocated by the generic
  code.
  
   -- Target Hook: sbitmap TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
            (void)
!      This hook should return an ‘sbitmap’ with the bits set for those
       components that can be separately shrink-wrapped in the current
!      function.  Return ‘NULL’ if the current function should not get any
       separate shrink-wrapping.  Don't define this hook if it would
!      always return ‘NULL’.  If it is defined, the other hooks in this
       group have to be defined as well.
  
   -- Target Hook: sbitmap TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
            (basic_block)
!      This hook should return an ‘sbitmap’ with the bits set for those
       components where either the prologue component has to be executed
!      before the ‘basic_block’, or the epilogue component after it, or
       both.
  
   -- Target Hook: void TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS (sbitmap
*************** code.
*** 38327,38334 ****
   -- Target Hook: void TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
            (sbitmap)
       Mark the components in the parameter as handled, so that the
!      'prologue' and 'epilogue' named patterns know to ignore those
!      components.  The target code should not hang on to the 'sbitmap',
       it will be deleted after this call.
  
  
--- 38328,38335 ----
   -- Target Hook: void TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
            (sbitmap)
       Mark the components in the parameter as handled, so that the
!      ‘prologue’ and ‘epilogue’ named patterns know to ignore those
!      components.  The target code should not hang on to the ‘sbitmap’,
       it will be deleted after this call.
  
  
*************** File: gccint.info,  Node: Stack Smashing
*** 38338,38360 ****
  ---------------------------------
  
   -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
!      This hook returns a '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 that is placed at the top of the local stack frame.
!      The type of this variable must be 'ptr_type_node'.
  
       The default version of this hook creates a variable called
!      '__stack_chk_guard', which is normally defined in 'libgcc2.c'.
  
   -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
!      This hook returns a 'CALL_EXPR' that alerts the runtime that the
       stack protect guard variable has been modified.  This expression
!      should involve a call to a 'noreturn' function.
  
       The default version of this hook invokes a function called
!      '__stack_chk_fail', taking no arguments.  This function is normally
!      defined in 'libgcc2.c'.
  
   -- Target Hook: bool TARGET_STACK_PROTECT_RUNTIME_ENABLED_P (void)
       Returns true if the target wants GCC's default stack protect
--- 38339,38361 ----
  ---------------------------------
  
   -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
!      This hook returns a ‘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 that is placed at the top of the local stack frame.
!      The type of this variable must be ‘ptr_type_node’.
  
       The default version of this hook creates a variable called
!      ‘__stack_chk_guard’, which is normally defined in ‘libgcc2.c’.
  
   -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
!      This hook returns a ‘CALL_EXPR’ that alerts the runtime that the
       stack protect guard variable has been modified.  This expression
!      should involve a call to a ‘noreturn’ function.
  
       The default version of this hook invokes a function called
!      ‘__stack_chk_fail’, taking no arguments.  This function is normally
!      defined in ‘libgcc2.c’.
  
   -- Target Hook: bool TARGET_STACK_PROTECT_RUNTIME_ENABLED_P (void)
       Returns true if the target wants GCC's default stack protect
*************** File: gccint.info,  Node: Varargs,  Next
*** 38403,38502 ****
  18.10 Implementing the Varargs Macros
  =====================================
  
! GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that
  work without change on machines that pass arguments on the stack.  Other
  machines require their own implementations of varargs, and the two
  machine independent header files must have conditionals to include it.
  
!  ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the
! calling convention for 'va_start'.  The traditional implementation takes
  just one argument, which is the variable in which to store the argument
! pointer.  The ISO implementation of 'va_start' takes an additional
  second argument.  The user is supposed to write the last named argument
  of the function here.
  
!  However, 'va_start' should not use this argument.  The way to find the
  end of the named arguments is with the built-in functions described
  below.
  
   -- Macro: __builtin_saveregs ()
       Use this built-in function to save the argument registers in memory
       so that the varargs mechanism can access them.  Both ISO and
!      traditional versions of 'va_start' must use '__builtin_saveregs',
!      unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
  
!      On some machines, '__builtin_saveregs' is open-coded under the
!      control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
       other machines, it calls a routine written in assembler language,
!      found in 'libgcc2.c'.
  
!      Code generated for the call to '__builtin_saveregs' appears at the
       beginning of the function, as opposed to where the call to
!      '__builtin_saveregs' is written, regardless of what the code is.
       This is because the registers must be saved before the function
       starts to use them for its own purposes.
  
   -- Macro: __builtin_next_arg (LASTARG)
       This builtin returns the address of the first anonymous stack
!      argument, as type 'void *'.  If 'ARGS_GROW_DOWNWARD', it returns
       the address of the location above the first anonymous stack
!      argument.  Use it in 'va_start' to initialize the pointer for
!      fetching arguments from the stack.  Also use it in 'va_start' to
       verify that the second parameter LASTARG is the last named argument
       of the current function.
  
   -- Macro: __builtin_classify_type (OBJECT)
       Since each machine has its own conventions for which data types are
!      passed in which kind of register, your implementation of 'va_arg'
       has to embody these conventions.  The easiest way to categorize the
!      specified data type is to use '__builtin_classify_type' together
!      with 'sizeof' and '__alignof__'.
  
!      '__builtin_classify_type' ignores the value of OBJECT, considering
       only its data type.  It returns an integer describing what kind of
       type that is--integer, floating, pointer, structure, and so on.
  
!      The file 'typeclass.h' defines an enumeration that you can use to
!      interpret the values of '__builtin_classify_type'.
  
   These machine description macros help implement varargs:
  
   -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
       If defined, this hook produces the machine-specific code for a call
!      to '__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 '__builtin_saveregs'.
  
   -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t
            ARGS_SO_FAR, const function_arg_info &ARG, int
            *PRETEND_ARGS_SIZE, int SECOND_TIME)
       This target hook offers an alternative to using
!      '__builtin_saveregs' and defining the hook
!      'TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
       register arguments into the stack so that all the arguments appear
       to have been passed consecutively on the stack.  Once this is done,
       you can use the standard implementation of varargs that works for
       machines that pass all their arguments on the stack.
  
!      The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data
       structure, containing the values that are obtained after processing
       the named arguments.  The argument ARG describes the last of these
       named arguments.  The argument ARG should not be used if the
!      function type satisfies 'TYPE_NO_NAMED_ARGS_STDARG_P', since in
       that case there are no named arguments and all arguments are
!      accessed with 'va_arg'.
  
       The target hook should do two things: first, push onto the stack
       all the argument registers _not_ used for the named arguments, and
       second, store the size of the data thus pushed into the
!      'int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
       that you store here will serve as additional offset for setting up
       the stack frame.
  
       Because you must generate code to push the anonymous arguments at
       compile time without knowing their data types,
!      'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
       have just a single category of argument register and use it
       uniformly for all data types.
  
--- 38404,38503 ----
  18.10 Implementing the Varargs Macros
  =====================================
  
! GCC comes with an implementation of ‘<varargs.h>’ and ‘<stdarg.h>’ that
  work without change on machines that pass arguments on the stack.  Other
  machines require their own implementations of varargs, and the two
  machine independent header files must have conditionals to include it.
  
!  ISO ‘<stdarg.h>’ differs from traditional ‘<varargs.h>’ mainly in the
! calling convention for ‘va_start’.  The traditional implementation takes
  just one argument, which is the variable in which to store the argument
! pointer.  The ISO implementation of ‘va_start’ takes an additional
  second argument.  The user is supposed to write the last named argument
  of the function here.
  
!  However, ‘va_start’ should not use this argument.  The way to find the
  end of the named arguments is with the built-in functions described
  below.
  
   -- Macro: __builtin_saveregs ()
       Use this built-in function to save the argument registers in memory
       so that the varargs mechanism can access them.  Both ISO and
!      traditional versions of ‘va_start’ must use ‘__builtin_saveregs’,
!      unless you use ‘TARGET_SETUP_INCOMING_VARARGS’ (see below) instead.
  
!      On some machines, ‘__builtin_saveregs’ is open-coded under the
!      control of the target hook ‘TARGET_EXPAND_BUILTIN_SAVEREGS’.  On
       other machines, it calls a routine written in assembler language,
!      found in ‘libgcc2.c’.
  
!      Code generated for the call to ‘__builtin_saveregs’ appears at the
       beginning of the function, as opposed to where the call to
!      ‘__builtin_saveregs’ is written, regardless of what the code is.
       This is because the registers must be saved before the function
       starts to use them for its own purposes.
  
   -- Macro: __builtin_next_arg (LASTARG)
       This builtin returns the address of the first anonymous stack
!      argument, as type ‘void *’.  If ‘ARGS_GROW_DOWNWARD’, it returns
       the address of the location above the first anonymous stack
!      argument.  Use it in ‘va_start’ to initialize the pointer for
!      fetching arguments from the stack.  Also use it in ‘va_start’ to
       verify that the second parameter LASTARG is the last named argument
       of the current function.
  
   -- Macro: __builtin_classify_type (OBJECT)
       Since each machine has its own conventions for which data types are
!      passed in which kind of register, your implementation of ‘va_arg’
       has to embody these conventions.  The easiest way to categorize the
!      specified data type is to use ‘__builtin_classify_type’ together
!      with ‘sizeof’ and ‘__alignof__’.
  
!      ‘__builtin_classify_type’ ignores the value of OBJECT, considering
       only its data type.  It returns an integer describing what kind of
       type that is--integer, floating, pointer, structure, and so on.
  
!      The file ‘typeclass.h’ defines an enumeration that you can use to
!      interpret the values of ‘__builtin_classify_type’.
  
   These machine description macros help implement varargs:
  
   -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
       If defined, this hook produces the machine-specific code for a call
!      to ‘__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 ‘__builtin_saveregs’.
  
   -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t
            ARGS_SO_FAR, const function_arg_info &ARG, int
            *PRETEND_ARGS_SIZE, int SECOND_TIME)
       This target hook offers an alternative to using
!      ‘__builtin_saveregs’ and defining the hook
!      ‘TARGET_EXPAND_BUILTIN_SAVEREGS’.  Use it to store the anonymous
       register arguments into the stack so that all the arguments appear
       to have been passed consecutively on the stack.  Once this is done,
       you can use the standard implementation of varargs that works for
       machines that pass all their arguments on the stack.
  
!      The argument ARGS_SO_FAR points to the ‘CUMULATIVE_ARGS’ data
       structure, containing the values that are obtained after processing
       the named arguments.  The argument ARG describes the last of these
       named arguments.  The argument ARG should not be used if the
!      function type satisfies ‘TYPE_NO_NAMED_ARGS_STDARG_P’, since in
       that case there are no named arguments and all arguments are
!      accessed with ‘va_arg’.
  
       The target hook should do two things: first, push onto the stack
       all the argument registers _not_ used for the named arguments, and
       second, store the size of the data thus pushed into the
!      ‘int’-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
       that you store here will serve as additional offset for setting up
       the stack frame.
  
       Because you must generate code to push the anonymous arguments at
       compile time without knowing their data types,
!      ‘TARGET_SETUP_INCOMING_VARARGS’ is only useful on machines that
       have just a single category of argument register and use it
       uniformly for all data types.
  
*************** below.
*** 38504,38527 ****
       of the function are being analyzed for the second time.  This
       happens for an inline function, which is not actually compiled
       until the end of the source file.  The hook
!      'TARGET_SETUP_INCOMING_VARARGS' should not generate any
       instructions in this case.
  
   -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t
            CA)
!      Define this hook to return 'true' if the location where a function
       argument is passed depends on whether or not it is a named
       argument.
  
!      This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG'
       is set for varargs and stdarg functions.  If this hook returns
!      'true', the NAMED argument is always true for named arguments, and
!      false for unnamed arguments.  If it returns 'false', but
!      'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all
       arguments are treated as named.  Otherwise, all named arguments
       except the last are treated as named.
  
!      You need not define this hook if it always returns 'false'.
  
   -- Target Hook: void TARGET_START_CALL_ARGS (cumulative_args_t
            COMPLETE_ARGS)
--- 38505,38528 ----
       of the function are being analyzed for the second time.  This
       happens for an inline function, which is not actually compiled
       until the end of the source file.  The hook
!      ‘TARGET_SETUP_INCOMING_VARARGS’ should not generate any
       instructions in this case.
  
   -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t
            CA)
!      Define this hook to return ‘true’ if the location where a function
       argument is passed depends on whether or not it is a named
       argument.
  
!      This hook controls how the NAMED argument to ‘TARGET_FUNCTION_ARG’
       is set for varargs and stdarg functions.  If this hook returns
!      ‘true’, the NAMED argument is always true for named arguments, and
!      false for unnamed arguments.  If it returns ‘false’, but
!      ‘TARGET_PRETEND_OUTGOING_VARARGS_NAMED’ returns ‘true’, then all
       arguments are treated as named.  Otherwise, all named arguments
       except the last are treated as named.
  
!      You need not define this hook if it always returns ‘false’.
  
   -- Target Hook: void TARGET_START_CALL_ARGS (cumulative_args_t
            COMPLETE_ARGS)
*************** below.
*** 38529,38547 ****
       call, after the argument values have been computed, and after stack
       arguments have been initialized, but before register arguments have
       been moved into their ABI-defined hard register locations.  It
!      precedes calls to the related hooks 'TARGET_CALL_ARGS' and
!      'TARGET_END_CALL_ARGS'.  The significance of this position in the
       call expansion is that:
  
!         * No argument registers are live.
!         * Although a call sequence can in general involve subcalls (such
!           as using 'memcpy' to copy large arguments), no such subcall
            will occur between the call to this hook and the generation of
            the main call instruction.
  
       The single argument COMPLETE_ARGS is the state of the target
       function's cumulative argument information after the final call to
!      'TARGET_FUNCTION_ARG'.
  
       The hook can be used for things like switching processor mode, in
       cases where different calls need different processor modes.  Most
--- 38530,38548 ----
       call, after the argument values have been computed, and after stack
       arguments have been initialized, but before register arguments have
       been moved into their ABI-defined hard register locations.  It
!      precedes calls to the related hooks ‘TARGET_CALL_ARGS’ and
!      ‘TARGET_END_CALL_ARGS’.  The significance of this position in the
       call expansion is that:
  
!         • No argument registers are live.
!         • Although a call sequence can in general involve subcalls (such
!           as using ‘memcpy’ to copy large arguments), no such subcall
            will occur between the call to this hook and the generation of
            the main call instruction.
  
       The single argument COMPLETE_ARGS is the state of the target
       function's cumulative argument information after the final call to
!      ‘TARGET_FUNCTION_ARG’.
  
       The hook can be used for things like switching processor mode, in
       cases where different calls need different processor modes.  Most
*************** below.
*** 38551,38567 ****
            rtx LOC, tree TYPE)
       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 'TARGET_FUNCTION_ARG' or a memory location.
       It is called just before the point where argument registers are
       stored.
  
       COMPLETE_ARGS is the state of the target function's cumulative
!      argument information after the final call to 'TARGET_FUNCTION_ARG'.
       LOC is the location of the argument.  TYPE is the type of the
!      function being called, or 'NULL_TREE' for libcalls.
  
       For functions without arguments, the hook is called once with
!      'pc_rtx' passed instead of an argument register.
  
       This functionality can be used to perform special setup of call
       argument registers, if a target needs it.  Most ports do not need
--- 38552,38568 ----
            rtx LOC, tree TYPE)
       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 ‘TARGET_FUNCTION_ARG’ or a memory location.
       It is called just before the point where argument registers are
       stored.
  
       COMPLETE_ARGS is the state of the target function's cumulative
!      argument information after the final call to ‘TARGET_FUNCTION_ARG’.
       LOC is the location of the argument.  TYPE is the type of the
!      function being called, or ‘NULL_TREE’ for libcalls.
  
       For functions without arguments, the hook is called once with
!      ‘pc_rtx’ passed instead of an argument register.
  
       This functionality can be used to perform special setup of call
       argument registers, if a target needs it.  Most ports do not need
*************** below.
*** 38574,38590 ****
       pseudo.  It signals that all the call argument and return registers
       for the just emitted call are now no longer in use.  COMPLETE_ARGS
       is the state of the target function's cumulative argument
!      information after the final call to 'TARGET_FUNCTION_ARG'.
  
       Most ports do not need to implement anything for this hook.
  
   -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
            (cumulative_args_t CA)
       If you need to conditionally change ABIs so that one works with
!      'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
!      'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING'
!      was defined, then define this hook to return 'true' if
!      'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise.
       Otherwise, you should not define this hook.
  
  
--- 38575,38591 ----
       pseudo.  It signals that all the call argument and return registers
       for the just emitted call are now no longer in use.  COMPLETE_ARGS
       is the state of the target function's cumulative argument
!      information after the final call to ‘TARGET_FUNCTION_ARG’.
  
       Most ports do not need to implement anything for this hook.
  
   -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
            (cumulative_args_t CA)
       If you need to conditionally change ABIs so that one works with
!      ‘TARGET_SETUP_INCOMING_VARARGS’, but the other works like neither
!      ‘TARGET_SETUP_INCOMING_VARARGS’ nor ‘TARGET_STRICT_ARGUMENT_NAMING’
!      was defined, then define this hook to return ‘true’ if
!      ‘TARGET_SETUP_INCOMING_VARARGS’ is used, ‘false’ otherwise.
       Otherwise, you should not define this hook.
  
  
*************** handling to ensure that the static chain
*** 38598,38604 ****
  function is invoked via an indirect call.
  
   GCC has traditionally supported nested functions by creating an
! executable "trampoline" at run time when the address of a nested
  function is taken.  This is a small piece of code which normally resides
  on the stack, in the stack frame of the containing function.  The
  trampoline loads the static chain register and then jumps to the real
--- 38599,38605 ----
  function is invoked via an indirect call.
  
   GCC has traditionally supported nested functions by creating an
! executable “trampoline” at run time when the address of a nested
  function is taken.  This is a small piece of code which normally resides
  on the stack, in the stack frame of the containing function.  The
  trampoline loads the static chain register and then jumps to the real
*************** chain from the descriptor is handled at
*** 38615,38629 ****
  mandated by the ABI or be otherwise handled in a target-specific way by
  the back end in its code generation strategy for indirect calls.  GCC
  also provides its own generic descriptor implementation to support the
! '-fno-trampolines' option.  In this case runtime detection of function
  descriptors at indirect call sites relies on descriptor pointers being
  tagged with a bit that is never set in bare function addresses.  Since
  GCC's generic function descriptors are not ABI-compliant, this option is
  typically used only on a per-language basis (notably by Ada) or when it
  can otherwise be applied to the whole program.
  
!  For languages other than Ada, the '-ftrampolines' and
! '-fno-trampolines' options currently have no effect, and trampolines are
  always generated on platforms that need them for nested functions.
  
   Define the following hook if your backend either implements
--- 38616,38630 ----
  mandated by the ABI or be otherwise handled in a target-specific way by
  the back end in its code generation strategy for indirect calls.  GCC
  also provides its own generic descriptor implementation to support the
! ‘-fno-trampolines’ option.  In this case runtime detection of function
  descriptors at indirect call sites relies on descriptor pointers being
  tagged with a bit that is never set in bare function addresses.  Since
  GCC's generic function descriptors are not ABI-compliant, this option is
  typically used only on a per-language basis (notably by Ada) or when it
  can otherwise be applied to the whole program.
  
!  For languages other than Ada, the ‘-ftrampolines’ and
! ‘-fno-trampolines’ options currently have no effect, and trampolines are
  always generated on platforms that need them for nested functions.
  
   Define the following hook if your backend either implements
*************** may be necessary to take out pieces of t
*** 38673,38679 ****
  separately.
  
   -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
!      This hook is called by 'assemble_trampoline_template' to output, on
       the stream F, assembler code for a block of data that contains the
       constant parts of a trampoline.  This code should not include a
       label--the label is taken care of automatically.
--- 38674,38680 ----
  separately.
  
   -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
!      This hook is called by ‘assemble_trampoline_template’ to output, on
       the stream F, assembler code for a block of data that contains the
       constant parts of a trampoline.  This code should not include a
       label--the label is taken care of automatically.
*************** separately.
*** 38686,38692 ****
   -- Macro: TRAMPOLINE_SECTION
       Return the section into which the trampoline template is to be
       placed (*note Sections::).  The default value is
!      'readonly_data_section'.
  
   -- Macro: TRAMPOLINE_SIZE
       A C expression for the size in bytes of the trampoline, as an
--- 38687,38693 ----
   -- Macro: TRAMPOLINE_SECTION
       Return the section into which the trampoline template is to be
       placed (*note Sections::).  The default value is
!      ‘readonly_data_section’.
  
   -- Macro: TRAMPOLINE_SIZE
       A C expression for the size in bytes of the trampoline, as an
*************** separately.
*** 38695,38717 ****
   -- Macro: TRAMPOLINE_ALIGNMENT
       Alignment required for trampolines, in bits.
  
!      If you don't define this macro, the value of 'FUNCTION_ALIGNMENT'
       is used for aligning trampolines.
  
   -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
            rtx STATIC_CHAIN)
       This hook is called to initialize a trampoline.  M_TRAMP is an RTX
       for the memory block for the trampoline; FNDECL is the
!      'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for
       the static chain value that should be passed to the function when
       it is called.
  
!      If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
       first thing this hook should do is emit a block move into M_TRAMP
!      from the memory block returned by 'assemble_trampoline_template'.
       Note that the block move need only cover the constant parts of the
       trampoline.  If the target isolates the variable parts of the
!      trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be
       copied.
  
       If the target requires any other actions, such as flushing caches
--- 38696,38718 ----
   -- Macro: TRAMPOLINE_ALIGNMENT
       Alignment required for trampolines, in bits.
  
!      If you don't define this macro, the value of ‘FUNCTION_ALIGNMENT’
       is used for aligning trampolines.
  
   -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
            rtx STATIC_CHAIN)
       This hook is called to initialize a trampoline.  M_TRAMP is an RTX
       for the memory block for the trampoline; FNDECL is the
!      ‘FUNCTION_DECL’ for the nested function; STATIC_CHAIN is an RTX for
       the static chain value that should be passed to the function when
       it is called.
  
!      If the target defines ‘TARGET_ASM_TRAMPOLINE_TEMPLATE’, then the
       first thing this hook should do is emit a block move into M_TRAMP
!      from the memory block returned by ‘assemble_trampoline_template’.
       Note that the block move need only cover the constant parts of the
       trampoline.  If the target isolates the variable parts of the
!      trampoline to the end, not all ‘TRAMPOLINE_SIZE’ bytes need be
       copied.
  
       If the target requires any other actions, such as flushing caches
*************** separately.
*** 38721,38732 ****
  
   -- Target Hook: void TARGET_EMIT_CALL_BUILTIN___CLEAR_CACHE (rtx BEGIN,
            rtx END)
!      On targets that do not define a 'clear_cache' insn expander, but
!      that define the 'CLEAR_CACHE_INSN' macro,
       maybe_emit_call_builtin___clear_cache relies on this target hook to
       clear an address range in the instruction cache.
  
!      The default implementation calls the '__clear_cache' builtin,
       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.
--- 38722,38733 ----
  
   -- Target Hook: void TARGET_EMIT_CALL_BUILTIN___CLEAR_CACHE (rtx BEGIN,
            rtx END)
!      On targets that do not define a ‘clear_cache’ insn expander, but
!      that define the ‘CLEAR_CACHE_INSN’ macro,
       maybe_emit_call_builtin___clear_cache relies on this target hook to
       clear an address range in the instruction cache.
  
!      The default implementation calls the ‘__clear_cache’ builtin,
       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.
*************** separately.
*** 38734,38740 ****
   -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
       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 'TARGET_TRAMPOLINE_INIT'.  In
       case the address to be used for a function call should be different
       from the address at which the template was stored, the different
       address should be returned; otherwise ADDR should be returned
--- 38735,38741 ----
   -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
       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 ‘TARGET_TRAMPOLINE_INIT’.  In
       case the address to be used for a function call should be different
       from the address at which the template was stored, the different
       address should be returned; otherwise ADDR should be returned
*************** the following macro.
*** 38758,38782 ****
   -- Macro: CLEAR_INSN_CACHE (BEG, END)
       If defined, expands to a C expression clearing the _instruction
       cache_ in the specified interval.  The definition of this macro
!      would typically be a series of 'asm' statements.  Both BEG and END
       are pointer expressions.
  
   To use a standard subroutine, define the following macro.  In addition,
  you must make sure that the instructions in a trampoline fill an entire
  cache line with identical instructions, or else ensure that the
  beginning of the trampoline code is always aligned at the same point in
! its cache line.  Look in 'm68k.h' as a guide.
  
   -- Macro: TRANSFER_FROM_TRAMPOLINE
       Define this macro if trampolines need a special subroutine to do
!      their work.  The macro should expand to a series of 'asm'
       statements which will be compiled with GCC.  They go in a library
!      function named '__transfer_from_trampoline'.
  
       If you need to avoid executing the ordinary prologue code of a
       compiled C function when you jump to the subroutine, you can do so
       by placing a special label of your own in the assembler code.  Use
!      one 'asm' statement to generate an assembler label, and another to
       make the label global.  Then trampolines can use that label to jump
       directly to your special assembler code.
  
--- 38759,38783 ----
   -- Macro: CLEAR_INSN_CACHE (BEG, END)
       If defined, expands to a C expression clearing the _instruction
       cache_ in the specified interval.  The definition of this macro
!      would typically be a series of ‘asm’ statements.  Both BEG and END
       are pointer expressions.
  
   To use a standard subroutine, define the following macro.  In addition,
  you must make sure that the instructions in a trampoline fill an entire
  cache line with identical instructions, or else ensure that the
  beginning of the trampoline code is always aligned at the same point in
! its cache line.  Look in ‘m68k.h’ as a guide.
  
   -- Macro: TRANSFER_FROM_TRAMPOLINE
       Define this macro if trampolines need a special subroutine to do
!      their work.  The macro should expand to a series of ‘asm’
       statements which will be compiled with GCC.  They go in a library
!      function named ‘__transfer_from_trampoline’.
  
       If you need to avoid executing the ordinary prologue code of a
       compiled C function when you jump to the subroutine, you can do so
       by placing a special label of your own in the assembler code.  Use
!      one ‘asm’ statement to generate an assembler label, and another to
       make the label global.  Then trampolines can use that label to jump
       directly to your special assembler code.
  
*************** Here is an explanation of implicit calls
*** 38797,38804 ****
  
   -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
       This hook should declare additional library routines or rename
!      existing ones, using the functions 'set_optab_libfunc' and
!      'init_one_libfunc' defined in 'optabs.cc'.  'init_optabs' calls
       this macro after initializing all the normal library routines.
  
       The default is to do nothing.  Most ports don't need to define this
--- 38798,38805 ----
  
   -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
       This hook should declare additional library routines or rename
!      existing ones, using the functions ‘set_optab_libfunc’ and
!      ‘init_one_libfunc’ defined in ‘optabs.cc’.  ‘init_optabs’ calls
       this macro after initializing all the normal library routines.
  
       The default is to do nothing.  Most ports don't need to define this
*************** Here is an explanation of implicit calls
*** 38806,38819 ****
  
   -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX
       If false (the default), internal library routines start with two
!      underscores.  If set to true, these routines start with '__gnu_'
!      instead.  E.g., '__muldi3' changes to '__gnu_muldi3'.  This
!      currently only affects functions defined in 'libgcc2.c'.  If this
!      is set to true, the 'tm.h' file must also '#define
!      LIBGCC2_GNU_PREFIX'.
  
   -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
!      This macro should return 'true' if the library routine that
       implements the floating point comparison operator COMPARISON in
       mode MODE will return a boolean, and FALSE if it will return a
       tristate.
--- 38807,38820 ----
  
   -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX
       If false (the default), internal library routines start with two
!      underscores.  If set to true, these routines start with ‘__gnu_’
!      instead.  E.g., ‘__muldi3’ changes to ‘__gnu_muldi3’.  This
!      currently only affects functions defined in ‘libgcc2.c’.  If this
!      is set to true, the ‘tm.h’ file must also ‘#define
!      LIBGCC2_GNU_PREFIX’.
  
   -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
!      This macro should return ‘true’ if the library routine that
       implements the floating point comparison operator COMPARISON in
       mode MODE will return a boolean, and FALSE if it will return a
       tristate.
*************** Here is an explanation of implicit calls
*** 38823,38835 ****
       ports don't need to define this macro.
  
   -- Macro: TARGET_LIB_INT_CMP_BIASED
!      This macro should evaluate to 'true' if the integer comparison
!      functions (like '__cmpdi2') return 0 to indicate that the first
       operand is smaller than the second, 1 to indicate that they are
       equal, and 2 to indicate that the first operand is greater than the
!      second.  If this macro evaluates to 'false' the comparison
!      functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
!      target uses the routines in 'libgcc.a', you do not need to define
       this macro.
  
   -- Macro: TARGET_HAS_NO_HW_DIVIDE
--- 38824,38836 ----
       ports don't need to define this macro.
  
   -- Macro: TARGET_LIB_INT_CMP_BIASED
!      This macro should evaluate to ‘true’ if the integer comparison
!      functions (like ‘__cmpdi2’) return 0 to indicate that the first
       operand is smaller than the second, 1 to indicate that they are
       equal, and 2 to indicate that the first operand is greater than the
!      second.  If this macro evaluates to ‘false’ the comparison
!      functions return −1, 0, and 1 instead of 0, 1, and 2.  If the
!      target uses the routines in ‘libgcc.a’, you do not need to define
       this macro.
  
   -- Macro: TARGET_HAS_NO_HW_DIVIDE
*************** Here is an explanation of implicit calls
*** 38840,38860 ****
       algorithm which make use of a 64-bit by 32-bit divide primitive.
  
   -- Macro: TARGET_EDOM
!      The value of 'EDOM' on the target machine, as a C integer constant
       expression.  If you don't define this macro, GCC does not attempt
!      to deposit the value of 'EDOM' into 'errno' directly.  Look in
!      '/usr/include/errno.h' to find the value of 'EDOM' on your system.
  
!      If you do not define 'TARGET_EDOM', then compiled code reports
       domain errors by calling the library function and letting it report
!      the error.  If mathematical functions on your system use 'matherr'
!      when there is an error, then you should leave 'TARGET_EDOM'
!      undefined so that 'matherr' is used normally.
  
   -- Macro: GEN_ERRNO_RTX
       Define this macro as a C expression to create an rtl expression
!      that refers to the global "variable" 'errno'.  (On certain systems,
!      'errno' may not actually be a variable.)  If you don't define this
       macro, a reasonable default is used.
  
   -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class
--- 38841,38861 ----
       algorithm which make use of a 64-bit by 32-bit divide primitive.
  
   -- Macro: TARGET_EDOM
!      The value of ‘EDOM’ on the target machine, as a C integer constant
       expression.  If you don't define this macro, GCC does not attempt
!      to deposit the value of ‘EDOM’ into ‘errno’ directly.  Look in
!      ‘/usr/include/errno.h’ to find the value of ‘EDOM’ on your system.
  
!      If you do not define ‘TARGET_EDOM’, then compiled code reports
       domain errors by calling the library function and letting it report
!      the error.  If mathematical functions on your system use ‘matherr’
!      when there is an error, then you should leave ‘TARGET_EDOM’
!      undefined so that ‘matherr’ is used normally.
  
   -- Macro: GEN_ERRNO_RTX
       Define this macro as a C expression to create an rtl expression
!      that refers to the global "variable" ‘errno’.  (On certain systems,
!      ‘errno’ may not actually be a variable.)  If you don't define this
       macro, a reasonable default is used.
  
   -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class
*************** Here is an explanation of implicit calls
*** 38867,38873 ****
  
   -- Target Hook: bool TARGET_LIBC_HAS_FAST_FUNCTION (int FCODE)
       This hook determines whether a function from a class of functions
!      '(enum function_class)'FCODE has a fast implementation.
  
   -- Target Hook: unsigned TARGET_FORTIFY_SOURCE_DEFAULT_LEVEL (void)
       This hook determines what value _FORTIFY_SOURCE will be set to when
--- 38868,38874 ----
  
   -- Target Hook: bool TARGET_LIBC_HAS_FAST_FUNCTION (int FCODE)
       This hook determines whether a function from a class of functions
!      ‘(enum function_class)’FCODE has a fast implementation.
  
   -- Target Hook: unsigned TARGET_FORTIFY_SOURCE_DEFAULT_LEVEL (void)
       This hook determines what value _FORTIFY_SOURCE will be set to when
*************** Here is an explanation of implicit calls
*** 38878,38889 ****
       This hook determines expected maximum errors for math functions
       measured in ulps (units of the last place).  0 means 0.5ulps
       precision (correctly rounded).  ~0U means unknown errors.  The
!      'combined_fn' CFN argument should identify just which math built-in
       function it is rather than its variant, MODE the variant in terms
       of floating-point machine mode.  The hook should also take into
!      account 'flag_rounding_math' whether it is maximum error just in
       default rounding mode, or in all possible rounding modes.
!      BOUNDARY_P is 'true' for maximum errors on intrinsic math
       boundaries of functions rather than errors inside of the usual
       result ranges of the functions.  E.g. the sin/cos function finite
       result is in between -1.0 and 1.0 inclusive, with BOUNDARY_P true
--- 38879,38890 ----
       This hook determines expected maximum errors for math functions
       measured in ulps (units of the last place).  0 means 0.5ulps
       precision (correctly rounded).  ~0U means unknown errors.  The
!      ‘combined_fn’ CFN argument should identify just which math built-in
       function it is rather than its variant, MODE the variant in terms
       of floating-point machine mode.  The hook should also take into
!      account ‘flag_rounding_math’ whether it is maximum error just in
       default rounding mode, or in all possible rounding modes.
!      BOUNDARY_P is ‘true’ for maximum errors on intrinsic math
       boundaries of functions rather than errors inside of the usual
       result ranges of the functions.  E.g. the sin/cos function finite
       result is in between -1.0 and 1.0 inclusive, with BOUNDARY_P true
*************** This is about addressing modes.
*** 38937,38964 ****
   -- Macro: CONSTANT_ADDRESS_P (X)
       A C expression that is 1 if the RTX X is a constant which is a
       valid address.  On most machines the default definition of
!      '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
       but a few machines are more restrictive as to which constant
       addresses are supported.
  
   -- Macro: CONSTANT_P (X)
!      'CONSTANT_P', which is defined by target-independent code, accepts
       integer-values expressions whose values are not explicitly known,
!      such as 'symbol_ref', 'label_ref', and 'high' expressions and
!      'const' arithmetic expressions, in addition to 'const_int' and
!      'const_double' expressions.
  
   -- Macro: MAX_REGS_PER_ADDRESS
       A number, the maximum number of registers that can appear in a
       valid memory address.  Note that it is up to you to specify a value
!      equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P'
       would ever accept.
  
   -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE,
            rtx X, bool STRICT, code_helper CH)
       A function that returns whether X (an RTX) is a legitimate memory
       address on the target machine for a memory operand of mode MODE.
!      If CH is not 'ERROR_MARK', it can be called from middle-end to
       determine if it is valid to use X as a memory operand for RTX insn
       which is generated for the given code_helper CH.  For example,
       assuming the given CH is IFN_LEN_LOAD, on some target its
--- 38938,38965 ----
   -- Macro: CONSTANT_ADDRESS_P (X)
       A C expression that is 1 if the RTX X is a constant which is a
       valid address.  On most machines the default definition of
!      ‘(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)’ is acceptable,
       but a few machines are more restrictive as to which constant
       addresses are supported.
  
   -- Macro: CONSTANT_P (X)
!      ‘CONSTANT_P’, which is defined by target-independent code, accepts
       integer-values expressions whose values are not explicitly known,
!      such as ‘symbol_ref’, ‘label_ref’, and ‘high’ expressions and
!      ‘const’ arithmetic expressions, in addition to ‘const_int’ and
!      ‘const_double’ expressions.
  
   -- Macro: MAX_REGS_PER_ADDRESS
       A number, the maximum number of registers that can appear in a
       valid memory address.  Note that it is up to you to specify a value
!      equal to the maximum number that ‘TARGET_LEGITIMATE_ADDRESS_P’
       would ever accept.
  
   -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE,
            rtx X, bool STRICT, code_helper CH)
       A function that returns whether X (an RTX) is a legitimate memory
       address on the target machine for a memory operand of mode MODE.
!      If CH is not ‘ERROR_MARK’, it can be called from middle-end to
       determine if it is valid to use X as a memory operand for RTX insn
       which is generated for the given code_helper CH.  For example,
       assuming the given CH is IFN_LEN_LOAD, on some target its
*************** This is about addressing modes.
*** 38976,39041 ****
       register is considered a memory reference.  This is because in
       contexts where some kind of register is required, a pseudo-register
       with no hard register must be rejected.  For non-hard registers,
!      the strict variant should look up the 'reg_renumber' array; it
       should then proceed using the hard register number in the array, or
!      treat the pseudo as a memory reference if the array holds '-1'.
  
       The non-strict variant is used in other passes.  It must be defined
       to accept all pseudo-registers in every context where some kind of
       register is required.
  
!      Normally, constant addresses which are the sum of a 'symbol_ref'
!      and an integer are stored inside a 'const' RTX to mark them as
       constant.  Therefore, there is no need to recognize such sums
       specifically as legitimate addresses.  Normally you would simply
!      recognize any 'const' as legitimate.
  
!      Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant
!      sums that are not marked with 'const'.  It assumes that a naked
!      'plus' indicates indexing.  If so, then you _must_ reject such
       naked constant sums as illegitimate addresses, so that none of them
!      will be given to 'PRINT_OPERAND_ADDRESS'.
  
       On some machines, whether a symbolic address is legitimate depends
       on the section that the address refers to.  On these machines,
!      define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the
!      information into the 'symbol_ref', and then check for it here.
!      When you see a 'const', you will have to look inside it to find the
!      'symbol_ref' in order to determine the section.  *Note Assembler
       Format::.
  
       Some ports are still using a deprecated legacy substitute for this
!      hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
       syntax:
  
            #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
  
!      and should 'goto LABEL' if the address X is a valid address on the
       target machine for a memory operand of mode MODE.
  
       Compiler source files that want to use the strict variant of this
!      macro define the macro 'REG_OK_STRICT'.  You should use an '#ifdef
!      REG_OK_STRICT' conditional to define the strict variant in 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.
  
   -- Macro: TARGET_MEM_CONSTRAINT
!      A single character to be used instead of the default ''m''
       character for general memory addresses.  This defines the
       constraint letter which matches the memory addresses accepted by
!      'TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
       support new address formats in your back end without changing the
!      semantics of the ''m'' constraint.  This is necessary in order to
       preserve functionality of inline assembly constructs using the
!      ''m'' constraint.
  
   -- Macro: FIND_BASE_TERM (X)
       A C expression to determine the base term of address X, or to
!      provide a simplified version of X from which 'alias.cc' can easily
       find the base term.  This macro is used in only two places:
!      'find_base_value' and 'find_base_term' in 'alias.cc'.
  
       It is always safe for this macro to not be defined.  It exists so
       that alias analysis can understand machine-dependent addresses.
--- 38977,39042 ----
       register is considered a memory reference.  This is because in
       contexts where some kind of register is required, a pseudo-register
       with no hard register must be rejected.  For non-hard registers,
!      the strict variant should look up the ‘reg_renumber’ array; it
       should then proceed using the hard register number in the array, or
!      treat the pseudo as a memory reference if the array holds ‘-1’.
  
       The non-strict variant is used in other passes.  It must be defined
       to accept all pseudo-registers in every context where some kind of
       register is required.
  
!      Normally, constant addresses which are the sum of a ‘symbol_ref’
!      and an integer are stored inside a ‘const’ RTX to mark them as
       constant.  Therefore, there is no need to recognize such sums
       specifically as legitimate addresses.  Normally you would simply
!      recognize any ‘const’ as legitimate.
  
!      Usually ‘PRINT_OPERAND_ADDRESS’ is not prepared to handle constant
!      sums that are not marked with ‘const’.  It assumes that a naked
!      ‘plus’ indicates indexing.  If so, then you _must_ reject such
       naked constant sums as illegitimate addresses, so that none of them
!      will be given to ‘PRINT_OPERAND_ADDRESS’.
  
       On some machines, whether a symbolic address is legitimate depends
       on the section that the address refers to.  On these machines,
!      define the target hook ‘TARGET_ENCODE_SECTION_INFO’ to store the
!      information into the ‘symbol_ref’, and then check for it here.
!      When you see a ‘const’, you will have to look inside it to find the
!      ‘symbol_ref’ in order to determine the section.  *Note Assembler
       Format::.
  
       Some ports are still using a deprecated legacy substitute for this
!      hook, the ‘GO_IF_LEGITIMATE_ADDRESS’ macro.  This macro has this
       syntax:
  
            #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
  
!      and should ‘goto LABEL’ if the address X is a valid address on the
       target machine for a memory operand of mode MODE.
  
       Compiler source files that want to use the strict variant of this
!      macro define the macro ‘REG_OK_STRICT’.  You should use an ‘#ifdef
!      REG_OK_STRICT’ conditional to define the strict variant in 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.
  
   -- Macro: TARGET_MEM_CONSTRAINT
!      A single character to be used instead of the default ‘'m'’
       character for general memory addresses.  This defines the
       constraint letter which matches the memory addresses accepted by
!      ‘TARGET_LEGITIMATE_ADDRESS_P’.  Define this macro if you want to
       support new address formats in your back end without changing the
!      semantics of the ‘'m'’ constraint.  This is necessary in order to
       preserve functionality of inline assembly constructs using the
!      ‘'m'’ constraint.
  
   -- Macro: FIND_BASE_TERM (X)
       A C expression to determine the base term of address X, or to
!      provide a simplified version of X from which ‘alias.cc’ can easily
       find the base term.  This macro is used in only two places:
!      ‘find_base_value’ and ‘find_base_term’ in ‘alias.cc’.
  
       It is always safe for this macro to not be defined.  It exists so
       that alias analysis can understand machine-dependent addresses.
*************** This is about addressing modes.
*** 39048,39054 ****
       This hook is given an invalid memory address X for an operand of
       mode MODE and should try to return a valid memory address.
  
!      X will always be the result of a call to 'break_out_memory_refs',
       and OLDX will be the operand that was given to that function to
       produce X.
  
--- 39049,39055 ----
       This hook is given an invalid memory address X for an operand of
       mode MODE and should try to return a valid memory address.
  
!      X will always be the result of a call to ‘break_out_memory_refs’,
       and OLDX will be the operand that was given to that function to
       produce X.
  
*************** This is about addressing modes.
*** 39077,39083 ****
       registers into a register.  On the other hand, for number of RISC
       processors offsets are limited so that often an intermediate
       address needs to be generated in order to address a stack slot.  By
!      defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
       intermediate addresses generated for adjacent some stack slots can
       be made identical, and thus be shared.
  
--- 39078,39084 ----
       registers into a register.  On the other hand, for number of RISC
       processors offsets are limited so that often an intermediate
       address needs to be generated in order to address a stack slot.  By
!      defining ‘LEGITIMIZE_RELOAD_ADDRESS’ appropriately, the
       intermediate addresses generated for adjacent some stack slots can
       be made identical, and thus be shared.
  
*************** This is about addressing modes.
*** 39090,39110 ****
       previous invocation of this macro.  If it fails to handle such
       addresses then the compiler may generate incorrect code or abort.
  
!      The macro definition should use 'push_reload' to indicate parts
       that need reloading; OPNUM, TYPE and IND_LEVELS are usually
!      suitable to be passed unaltered to 'push_reload'.
  
       The code generated by this macro must not alter the substructure of
       X.  If it transforms X into a more legitimate form, it should
       assign X (which will always be a C variable) a new value.  This
       also applies to parts that you change indirectly by calling
!      'push_reload'.
  
!      The macro definition may use 'strict_memory_address_p' to test if
       the address has become legitimate.
  
       If you want to change only a part of X, one standard way of doing
!      this is to use 'copy_rtx'.  Note, however, that it unshares only a
       single level of rtl.  Thus, if the part to be changed is not at the
       top level, you'll need to replace first the top level.  It is not
       necessary for this macro to come up with a legitimate address; but
--- 39091,39111 ----
       previous invocation of this macro.  If it fails to handle such
       addresses then the compiler may generate incorrect code or abort.
  
!      The macro definition should use ‘push_reload’ to indicate parts
       that need reloading; OPNUM, TYPE and IND_LEVELS are usually
!      suitable to be passed unaltered to ‘push_reload’.
  
       The code generated by this macro must not alter the substructure of
       X.  If it transforms X into a more legitimate form, it should
       assign X (which will always be a C variable) a new value.  This
       also applies to parts that you change indirectly by calling
!      ‘push_reload’.
  
!      The macro definition may use ‘strict_memory_address_p’ to test if
       the address has become legitimate.
  
       If you want to change only a part of X, one standard way of doing
!      this is to use ‘copy_rtx’.  Note, however, that it unshares only a
       single level of rtl.  Thus, if the part to be changed is not at the
       top level, you'll need to replace first the top level.  It is not
       necessary for this macro to come up with a legitimate address; but
*************** This is about addressing modes.
*** 39112,39118 ****
  
   -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR,
            addr_space_t ADDRSPACE)
!      This hook returns 'true' if memory address ADDR in address space
       ADDRSPACE can have different meanings depending on the machine mode
       of the memory reference it is used for or if the address is valid
       for some modes but not others.
--- 39113,39119 ----
  
   -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR,
            addr_space_t ADDRSPACE)
!      This hook returns ‘true’ if memory address ADDR in address space
       ADDRSPACE can have different meanings depending on the machine mode
       of the memory reference it is used for or if the address is valid
       for some modes but not others.
*************** This is about addressing modes.
*** 39125,39155 ****
  
       You may assume that ADDR is a valid address for the machine.
  
!      The default version of this hook returns 'false'.
  
   -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE,
            rtx X)
       This hook returns true if X is a legitimate constant for a
       MODE-mode immediate operand on the target machine.  You can assume
!      that X satisfies 'CONSTANT_P', so you need not check this.
  
       The default definition returns true.
  
   -- Target Hook: bool TARGET_PRECOMPUTE_TLS_P (machine_mode MODE, rtx X)
       This hook returns true if 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 X satisfies 'CONSTANT_P', so you need not check
       this.
  
       The default definition returns false.
  
   -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
       This hook is used to undo the possibly obfuscating effects of the
!      'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros.
       Some backend implementations of these macros wrap symbol references
!      inside an 'UNSPEC' rtx to represent PIC or similar addressing
       modes.  This target hook allows GCC's optimizers to understand the
!      semantics of these opaque 'UNSPEC's by converting them back into
       their original form.
  
   -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X)
--- 39126,39156 ----
  
       You may assume that ADDR is a valid address for the machine.
  
!      The default version of this hook returns ‘false’.
  
   -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE,
            rtx X)
       This hook returns true if X is a legitimate constant for a
       MODE-mode immediate operand on the target machine.  You can assume
!      that X satisfies ‘CONSTANT_P’, so you need not check this.
  
       The default definition returns true.
  
   -- Target Hook: bool TARGET_PRECOMPUTE_TLS_P (machine_mode MODE, rtx X)
       This hook returns true if 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 X satisfies ‘CONSTANT_P’, so you need not check
       this.
  
       The default definition returns false.
  
   -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
       This hook is used to undo the possibly obfuscating effects of the
!      ‘LEGITIMIZE_ADDRESS’ and ‘LEGITIMIZE_RELOAD_ADDRESS’ target macros.
       Some backend implementations of these macros wrap symbol references
!      inside an ‘UNSPEC’ rtx to represent PIC or similar addressing
       modes.  This target hook allows GCC's optimizers to understand the
!      semantics of these opaque ‘UNSPEC’s by converting them back into
       their original form.
  
   -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X)
*************** This is about addressing modes.
*** 39173,39192 ****
   -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode
            MODE, const_rtx X)
       This hook should return true if pool entries for constant X can be
!      placed in an 'object_block' structure.  MODE is the mode of X.
  
       The default version returns false for all constants.
  
   -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL)
       This hook should return true if pool entries for DECL should be
!      placed in an 'object_block' structure.
  
       The default version returns true for all decls.
  
   -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (tree FNDECL)
       This hook should return the DECL of a function that implements the
       reciprocal of the machine-specific builtin function FNDECL, or
!      'NULL_TREE' if such a function is not available.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
       This hook should return the DECL of a function F that given an
--- 39174,39193 ----
   -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode
            MODE, const_rtx X)
       This hook should return true if pool entries for constant X can be
!      placed in an ‘object_block’ structure.  MODE is the mode of X.
  
       The default version returns false for all constants.
  
   -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL)
       This hook should return true if pool entries for DECL should be
!      placed in an ‘object_block’ structure.
  
       The default version returns true for all decls.
  
   -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (tree FNDECL)
       This hook should return the DECL of a function that implements the
       reciprocal of the machine-specific builtin function FNDECL, or
!      ‘NULL_TREE’ if such a function is not available.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
       This hook should return the DECL of a function F that given an
*************** This is about addressing modes.
*** 39197,39204 ****
       The autovectorizer, when vectorizing a load operation from an
       address ADDR that may be unaligned, will generate two vector loads
       from the two aligned addresses around ADDR.  It then generates a
!      'REALIGN_LOAD' operation to extract the relevant data from the two
!      loaded vectors.  The first two arguments to 'REALIGN_LOAD', V1 and
       V2, are the two vectors, each of size VS, and the third argument,
       OFF, defines how the data will be extracted from these two vectors:
       if OFF is 0, then the returned vector is V2; otherwise, the
--- 39198,39205 ----
       The autovectorizer, when vectorizing a load operation from an
       address ADDR that may be unaligned, will generate two vector loads
       from the two aligned addresses around ADDR.  It then generates a
!      ‘REALIGN_LOAD’ operation to extract the relevant data from the two
!      loaded vectors.  The first two arguments to ‘REALIGN_LOAD’, V1 and
       V2, are the two vectors, each of size VS, and the third argument,
       OFF, defines how the data will be extracted from these two vectors:
       if OFF is 0, then the returned vector is V2; otherwise, the
*************** This is about addressing modes.
*** 39207,39217 ****
  
       If this hook is defined, the autovectorizer will generate a call to
       F (using the DECL tree that this hook returns) and will use the
!      return value of F as the argument OFF to 'REALIGN_LOAD'.
       Therefore, the mask M returned by F should comply with the
!      semantics expected by 'REALIGN_LOAD' described above.  If this hook
       is not defined, then ADDR will be used as the argument OFF to
!      'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
       will be considered.
  
   -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
--- 39208,39218 ----
  
       If this hook is defined, the autovectorizer will generate a call to
       F (using the DECL tree that this hook returns) and will use the
!      return value of F as the argument OFF to ‘REALIGN_LOAD’.
       Therefore, the mask M returned by F should comply with the
!      semantics expected by ‘REALIGN_LOAD’ described above.  If this hook
       is not defined, then ADDR will be used as the argument OFF to
!      ‘REALIGN_LOAD’, in which case the low log2(VS) − 1 bits of ADDR
       will be considered.
  
   -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
*************** This is about addressing modes.
*** 39225,39235 ****
       This hook returns the preferred alignment in bits for accesses to
       vectors of type TYPE in vectorized code.  This might be less than
       or greater than the ABI-defined value returned by
!      'TARGET_VECTOR_ALIGNMENT'.  It can be equal to the alignment of a
       single element, in which case the vectorizer will not try to
       optimize for alignment.
  
!      The default hook returns 'TYPE_ALIGN (TYPE)', which is correct for
       most targets.
  
   -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
--- 39226,39236 ----
       This hook returns the preferred alignment in bits for accesses to
       vectors of type TYPE in vectorized code.  This might be less than
       or greater than the ABI-defined value returned by
!      ‘TARGET_VECTOR_ALIGNMENT’.  It can be equal to the alignment of a
       single element, in which case the vectorizer will not try to
       optimize for alignment.
  
!      The default hook returns ‘TYPE_ALIGN (TYPE)’, which is correct for
       most targets.
  
   -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
*************** This is about addressing modes.
*** 39242,39248 ****
            MODE, machine_mode OP_MODE, rtx OUTPUT, rtx IN0, rtx IN1,
            const vec_perm_indices &SEL)
       This hook is used to test whether the target can permute up to two
!      vectors of mode OP_MODE using the permutation vector 'sel',
       producing a vector of mode MODE.  The hook is also used to emit
       such a permutation.
  
--- 39243,39249 ----
            MODE, machine_mode OP_MODE, rtx OUTPUT, rtx IN0, rtx IN1,
            const vec_perm_indices &SEL)
       This hook is used to test whether the target can permute up to two
!      vectors of mode OP_MODE using the permutation vector ‘sel’,
       producing a vector of mode MODE.  The hook is also used to emit
       such a permutation.
  
*************** This is about addressing modes.
*** 39268,39288 ****
       sequence of two addition-shift pairs, giving four instructions in
       total.  Return true if taking this approach for VECTYPE is likely
       to be better than using a sequence involving highpart
!      multiplication.  Default is false if 'can_mult_highpart_p',
       otherwise true.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
            (unsigned CODE, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
       This hook should return the decl of a function that implements the
!      vectorized variant of the function with the 'combined_fn' code CODE
!      or 'NULL_TREE' if such a function is not available.  The return
       type of the vectorized function shall be of vector type
       VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION
            (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
       This hook should return the decl of a function that implements the
!      vectorized variant of target built-in function 'fndecl'.  The
       return type of the vectorized function shall be of vector type
       VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
  
--- 39269,39289 ----
       sequence of two addition-shift pairs, giving four instructions in
       total.  Return true if taking this approach for VECTYPE is likely
       to be better than using a sequence involving highpart
!      multiplication.  Default is false if ‘can_mult_highpart_p’,
       otherwise true.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
            (unsigned CODE, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
       This hook should return the decl of a function that implements the
!      vectorized variant of the function with the ‘combined_fn’ code CODE
!      or ‘NULL_TREE’ if such a function is not available.  The return
       type of the vectorized function shall be of vector type
       VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION
            (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
       This hook should return the decl of a function that implements the
!      vectorized variant of target built-in function ‘fndecl’.  The
       return type of the vectorized function shall be of vector type
       VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
  
*************** This is about addressing modes.
*** 39299,39305 ****
   -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
            (scalar_mode MODE)
       This hook should return the preferred mode for vectorizing scalar
!      mode MODE.  The default is equal to 'word_mode', because the
       vectorizer can do some transformations even in absence of
       specialized SIMD hardware.
  
--- 39300,39306 ----
   -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
            (scalar_mode MODE)
       This hook should return the preferred mode for vectorizing scalar
!      mode MODE.  The default is equal to ‘word_mode’, because the
       vectorizer can do some transformations even in absence of
       specialized SIMD hardware.
  
*************** This is about addressing modes.
*** 39315,39344 ****
            TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES (vector_modes
            *MODES, bool ALL)
       If using the mode returned by
!      'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' is not the only approach
       worth considering, this hook should add one mode to MODES for each
       useful alternative approach.  These modes are then passed to
!      'TARGET_VECTORIZE_RELATED_MODE' to obtain the vector mode for a
       given element mode.
  
       The modes returned in MODES should use the smallest element mode
       possible for the vectorization approach that they represent,
       preferring integer modes over floating-poing modes in the event of
       a tie.  The first mode should be the
!      'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' for its element mode.
  
       If ALL is true, add suitable vector modes even when they are
       generally not expected to be worthwhile.
  
       The hook returns a bitmask of flags that control how the modes in
       MODES are used.  The flags are:
!      'VECT_COMPARE_COSTS'
            Tells the loop vectorizer to try all the provided modes and
            pick the one with the lowest cost.  By default the vectorizer
            will choose the first mode that works.
  
       The hook does not need to do anything if the vector returned by
!      'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' is the only one relevant for
       autovectorization.  The default implementation adds no modes and
       returns 0.
  
--- 39316,39345 ----
            TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES (vector_modes
            *MODES, bool ALL)
       If using the mode returned by
!      ‘TARGET_VECTORIZE_PREFERRED_SIMD_MODE’ is not the only approach
       worth considering, this hook should add one mode to MODES for each
       useful alternative approach.  These modes are then passed to
!      ‘TARGET_VECTORIZE_RELATED_MODE’ to obtain the vector mode for a
       given element mode.
  
       The modes returned in MODES should use the smallest element mode
       possible for the vectorization approach that they represent,
       preferring integer modes over floating-poing modes in the event of
       a tie.  The first mode should be the
!      ‘TARGET_VECTORIZE_PREFERRED_SIMD_MODE’ for its element mode.
  
       If ALL is true, add suitable vector modes even when they are
       generally not expected to be worthwhile.
  
       The hook returns a bitmask of flags that control how the modes in
       MODES are used.  The flags are:
!      ‘VECT_COMPARE_COSTS’
            Tells the loop vectorizer to try all the provided modes and
            pick the one with the lowest cost.  By default the vectorizer
            will choose the first mode that works.
  
       The hook does not need to do anything if the vector returned by
!      ‘TARGET_VECTORIZE_PREFERRED_SIMD_MODE’ is the only one relevant for
       autovectorization.  The default implementation adds no modes and
       returns 0.
  
*************** This is about addressing modes.
*** 39350,39356 ****
       it should use for those elements.  If NUNITS is nonzero, ensure
       that the mode has exactly NUNITS elements, otherwise pick whichever
       vector size pairs the most naturally with VECTOR_MODE.  Return an
!      empty 'opt_machine_mode' if there is no supported vector mode with
       the required properties.
  
       There is no prescribed way of handling the case in which NUNITS is
--- 39351,39357 ----
       it should use for those elements.  If NUNITS is nonzero, ensure
       that the mode has exactly NUNITS elements, otherwise pick whichever
       vector size pairs the most naturally with VECTOR_MODE.  Return an
!      empty ‘opt_machine_mode’ if there is no supported vector mode with
       the required properties.
  
       There is no prescribed way of handling the case in which NUNITS is
*************** This is about addressing modes.
*** 39363,39369 ****
       trying to keep the number of elements as similar as possible while
       applying maximum and minimum vector sizes.
  
!      The default implementation uses 'mode_for_vector' to find the
       requested mode, returning a mode with the same size as VECTOR_MODE
       when NUNITS is zero.  This is the correct behavior for most
       targets.
--- 39364,39370 ----
       trying to keep the number of elements as similar as possible while
       applying maximum and minimum vector sizes.
  
!      The default implementation uses ‘mode_for_vector’ to find the
       requested mode, returning a mode with the same size as VECTOR_MODE
       when NUNITS is zero.  This is the correct behavior for most
       targets.
*************** This is about addressing modes.
*** 39372,39389 ****
            (machine_mode MODE)
       Return the mode to use for a vector mask that holds one boolean
       result for each element of vector mode MODE.  The returned mask
!      mode can be a vector of integers (class 'MODE_VECTOR_INT'), a
!      vector of booleans (class 'MODE_VECTOR_BOOL') or a scalar integer
!      (class 'MODE_INT').  Return an empty 'opt_machine_mode' if no such
       mask mode exists.
  
!      The default implementation returns a 'MODE_VECTOR_INT' with the
       same size and number of elements as MODE, if such a mode exists.
  
   -- Target Hook: bool TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE (unsigned
            IFN)
       This hook returns true if masked internal function IFN (really of
!      type 'internal_fn') should be considered expensive when the mask is
       all zeros.  GCC can then try to branch around the instruction
       instead.
  
--- 39373,39390 ----
            (machine_mode MODE)
       Return the mode to use for a vector mask that holds one boolean
       result for each element of vector mode MODE.  The returned mask
!      mode can be a vector of integers (class ‘MODE_VECTOR_INT’), a
!      vector of booleans (class ‘MODE_VECTOR_BOOL’) or a scalar integer
!      (class ‘MODE_INT’).  Return an empty ‘opt_machine_mode’ if no such
       mask mode exists.
  
!      The default implementation returns a ‘MODE_VECTOR_INT’ with the
       same size and number of elements as MODE, if such a mode exists.
  
   -- Target Hook: bool TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE (unsigned
            IFN)
       This hook returns true if masked internal function IFN (really of
!      type ‘internal_fn’) should be considered expensive when the mask is
       all zeros.  GCC can then try to branch around the instruction
       instead.
  
*************** This is about addressing modes.
*** 39403,39416 ****
            MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE)
       Target builtin that implements vector gather operation.
       MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar
!      type of the index, scaled by SCALE.  The default is 'NULL_TREE'
       which means to not vectorize gather loads.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree
            VECTYPE, const_tree INDEX_TYPE, int SCALE)
       Target builtin that implements vector scatter operation.  VECTYPE
       is the vector type of the store and INDEX_TYPE is scalar type of
!      the index, scaled by SCALE.  The default is 'NULL_TREE' which means
       to not vectorize scatter stores.
  
   -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN
--- 39404,39417 ----
            MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE)
       Target builtin that implements vector gather operation.
       MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar
!      type of the index, scaled by SCALE.  The default is ‘NULL_TREE’
       which means to not vectorize gather loads.
  
   -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree
            VECTYPE, const_tree INDEX_TYPE, int SCALE)
       Target builtin that implements vector scatter operation.  VECTYPE
       is the vector type of the store and INDEX_TYPE is scalar type of
!      the index, scaled by SCALE.  The default is ‘NULL_TREE’ which means
       to not vectorize scatter stores.
  
   -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN
*************** This is about addressing modes.
*** 39426,39432 ****
       VECSIZE_MANGLE variants that should be emitted.
  
   -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *)
!      This hook should add implicit 'attribute(target("..."))' attribute
       to SIMD clone NODE if needed.
  
   -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *)
--- 39427,39433 ----
       VECSIZE_MANGLE variants that should be emitted.
  
   -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *)
!      This hook should add implicit ‘attribute(target("..."))’ attribute
       to SIMD clone NODE if needed.
  
   -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *)
*************** This is about addressing modes.
*** 39486,39529 ****
            TYPE, unsigned NOPS, tree *OPS)
       This hook returns the target's preferred final argument for a call
       to conditional internal function IFN (really of type
!      'internal_fn').  TYPE specifies the return type of the function and
       OPS are the operands to the conditional operation, of which there
       are NOPS.
  
!      For example, if IFN is 'IFN_COND_ADD', the hook returns a value of
!      type TYPE that should be used when 'OPS[0]' and 'OPS[1]' are
       conditionally added together.
  
       This hook is only relevant if the target supports conditional
!      patterns like 'cond_addM'.  The default implementation returns a
       zero constant of type TYPE.
  
   -- Target Hook: tree TARGET_GOACC_ADJUST_PRIVATE_DECL (location_t LOC,
            tree VAR, int LEVEL)
       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.  'GOMP_DIM_GANG',
!      'GOMP_DIM_WORKER' or 'GOMP_DIM_VECTOR').  A typical use for this
!      hook is to force variable declarations at the 'gang' level to
       reside in GPU shared memory.  LOC may be used for diagnostic
       purposes.
  
!      You may also use the 'TARGET_GOACC_EXPAND_VAR_DECL' hook if the
       adjusted variable declaration needs to be expanded to RTL in a
       non-standard way.
  
   -- Target Hook: rtx TARGET_GOACC_EXPAND_VAR_DECL (tree VAR)
       This hook, if defined, is used by accelerator target back-ends to
!      expand specially handled kinds of 'VAR_DECL' expressions.  A
       particular use is to place variables with specific attributes
!      inside special accelarator memories.  A return value of 'NULL'
!      indicates that the target does not handle this 'VAR_DECL', and
       normal RTL expanding is resumed.
  
       Only define this hook if your accelerator target needs to expand
!      certain 'VAR_DECL' nodes in a way that differs from the default.
       You can also adjust private variables at OpenACC device-lowering
!      time using the 'TARGET_GOACC_ADJUST_PRIVATE_DECL' target hook.
  
   -- Target Hook: tree TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD (tree
            REC, bool SENDER, const char *NAME, unsigned HOST_WIDE_INT
--- 39487,39530 ----
            TYPE, unsigned NOPS, tree *OPS)
       This hook returns the target's preferred final argument for a call
       to conditional internal function IFN (really of type
!      ‘internal_fn’).  TYPE specifies the return type of the function and
       OPS are the operands to the conditional operation, of which there
       are NOPS.
  
!      For example, if IFN is ‘IFN_COND_ADD’, the hook returns a value of
!      type TYPE that should be used when ‘OPS[0]’ and ‘OPS[1]’ are
       conditionally added together.
  
       This hook is only relevant if the target supports conditional
!      patterns like ‘cond_addM’.  The default implementation returns a
       zero constant of type TYPE.
  
   -- Target Hook: tree TARGET_GOACC_ADJUST_PRIVATE_DECL (location_t LOC,
            tree VAR, int LEVEL)
       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.  ‘GOMP_DIM_GANG’,
!      ‘GOMP_DIM_WORKER’ or ‘GOMP_DIM_VECTOR’).  A typical use for this
!      hook is to force variable declarations at the ‘gang’ level to
       reside in GPU shared memory.  LOC may be used for diagnostic
       purposes.
  
!      You may also use the ‘TARGET_GOACC_EXPAND_VAR_DECL’ hook if the
       adjusted variable declaration needs to be expanded to RTL in a
       non-standard way.
  
   -- Target Hook: rtx TARGET_GOACC_EXPAND_VAR_DECL (tree VAR)
       This hook, if defined, is used by accelerator target back-ends to
!      expand specially handled kinds of ‘VAR_DECL’ expressions.  A
       particular use is to place variables with specific attributes
!      inside special accelarator memories.  A return value of ‘NULL’
!      indicates that the target does not handle this ‘VAR_DECL’, and
       normal RTL expanding is resumed.
  
       Only define this hook if your accelerator target needs to expand
!      certain ‘VAR_DECL’ nodes in a way that differs from the default.
       You can also adjust private variables at OpenACC device-lowering
!      time using the ‘TARGET_GOACC_ADJUST_PRIVATE_DECL’ target hook.
  
   -- Target Hook: tree TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD (tree
            REC, bool SENDER, const char *NAME, unsigned HOST_WIDE_INT
*************** example, if we have:
*** 39556,39563 ****
       static int a, b, c;
       int foo (void) { return a + b + c; }
  
!  the code for 'foo' will usually calculate three separate symbolic
! addresses: those of 'a', 'b' and 'c'.  On some targets, it would be
  better to calculate just one symbolic address and access the three
  variables relative to it.  The equivalent pseudocode would be something
  like:
--- 39557,39564 ----
       static int a, b, c;
       int foo (void) { return a + b + c; }
  
!  the code for ‘foo’ will usually calculate three separate symbolic
! addresses: those of ‘a’, ‘b’ and ‘c’.  On some targets, it would be
  better to calculate just one symbolic address and access the three
  variables relative to it.  The equivalent pseudocode would be something
  like:
*************** like:
*** 39568,39580 ****
         return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
       }
  
!  (which isn't valid C). We refer to shared addresses like 'x' as
! "section anchors".  Their use is controlled by '-fsection-anchors'.
  
   The hooks below describe the target properties that GCC needs to know
  in order to make effective use of section anchors.  It won't use section
! anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or
! 'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
  
   -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
       The minimum offset that should be applied to a section anchor.  On
--- 39569,39581 ----
         return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
       }
  
!  (which isn't valid C). We refer to shared addresses like ‘x’ as
! "section anchors".  Their use is controlled by ‘-fsection-anchors’.
  
   The hooks below describe the target properties that GCC needs to know
  in order to make effective use of section anchors.  It won't use section
! anchors at all unless either ‘TARGET_MIN_ANCHOR_OFFSET’ or
! ‘TARGET_MAX_ANCHOR_OFFSET’ is set to a nonzero value.
  
   -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
       The minimum offset that should be applied to a section anchor.  On
*************** anchors at all unless either 'TARGET_MIN
*** 39583,39606 ****
       every mode.  The default value is 0.
  
   -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
!      Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset
       that should be applied to section anchors.  The default value is 0.
  
   -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
       Write the assembly code to define section anchor X, which is a
!      'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true.  The hook
       is called with the assembly output position set to the beginning of
!      'SYMBOL_REF_BLOCK (X)'.
  
!      If 'ASM_OUTPUT_DEF' is available, the hook's default definition
!      uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'.
!      If 'ASM_OUTPUT_DEF' is not available, the hook's default definition
!      is 'NULL', which disables the use of section anchors altogether.
  
   -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
       Return true if GCC should attempt to use anchors to access
!      'SYMBOL_REF' X.  You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
!      and '!SYMBOL_REF_ANCHOR_P (X)'.
  
       The default version is correct for most targets, but you might need
       to intercept this hook to handle things like target-specific
--- 39584,39607 ----
       every mode.  The default value is 0.
  
   -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
!      Like ‘TARGET_MIN_ANCHOR_OFFSET’, but the maximum (inclusive) offset
       that should be applied to section anchors.  The default value is 0.
  
   -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
       Write the assembly code to define section anchor X, which is a
!      ‘SYMBOL_REF’ for which ‘SYMBOL_REF_ANCHOR_P (X)’ is true.  The hook
       is called with the assembly output position set to the beginning of
!      ‘SYMBOL_REF_BLOCK (X)’.
  
!      If ‘ASM_OUTPUT_DEF’ is available, the hook's default definition
!      uses it to define the symbol as ‘. + SYMBOL_REF_BLOCK_OFFSET (X)’.
!      If ‘ASM_OUTPUT_DEF’ is not available, the hook's default definition
!      is ‘NULL’, which disables the use of section anchors altogether.
  
   -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
       Return true if GCC should attempt to use anchors to access
!      ‘SYMBOL_REF’ X.  You can assume ‘SYMBOL_REF_HAS_BLOCK_INFO_P (X)’
!      and ‘!SYMBOL_REF_ANCHOR_P (X)’.
  
       The default version is correct for most targets, but you might need
       to intercept this hook to handle things like target-specific
*************** category includes most RISC machines.
*** 39621,39627 ****
  the definition and use of the condition code.  In the past the
  definition and use were always adjacent.  However, recent changes to
  support trapping arithmetic may result in the definition and user being
! in different blocks.  Thus, there may be a 'NOTE_INSN_BASIC_BLOCK'
  between them.  Additionally, the definition may be the source of
  exception handling edges.
  
--- 39622,39628 ----
  the definition and use of the condition code.  In the past the
  definition and use were always adjacent.  However, recent changes to
  support trapping arithmetic may result in the definition and user being
! in different blocks.  Thus, there may be a ‘NOTE_INSN_BASIC_BLOCK’
  between them.  Additionally, the definition may be the source of
  exception handling edges.
  
*************** definition and use of the condition code
*** 39636,39644 ****
  hard register.  If the condition code or comparison result can be placed
  in any general register, or if there are multiple condition registers,
  use a pseudo register.  Registers used to store the condition code value
! will usually have a mode that is in class 'MODE_CC'.
  
!  Alternatively, you can use 'BImode' if the comparison operator is
  specified already in the compare instruction.  In this case, you are not
  interested in most macros in this section.
  
--- 39637,39645 ----
  hard register.  If the condition code or comparison result can be placed
  in any general register, or if there are multiple condition registers,
  use a pseudo register.  Registers used to store the condition code value
! will usually have a mode that is in class ‘MODE_CC’.
  
!  Alternatively, you can use ‘BImode’ if the comparison operator is
  specified already in the compare instruction.  In this case, you are not
  interested in most macros in this section.
  
*************** File: gccint.info,  Node: MODE_CC Condit
*** 39665,39676 ****
       which compare instruction (e.g. a signed or an unsigned comparison)
       produced the condition codes.
  
!      If other modes than 'CCmode' are required, add them to
!      'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode
       given an operand of a compare.  This is needed because the modes
       have to be chosen not only during RTL generation but also, for
       example, by instruction combination.  The result of
!      'SELECT_CC_MODE' should be consistent with the mode used in the
       patterns; for example to support the case of the add on the SPARC
       discussed above, we have the pattern
  
--- 39666,39677 ----
       which compare instruction (e.g. a signed or an unsigned comparison)
       produced the condition codes.
  
!      If other modes than ‘CCmode’ are required, add them to
!      ‘MACHINE-modes.def’ and define ‘SELECT_CC_MODE’ to choose a mode
       given an operand of a compare.  This is needed because the modes
       have to be chosen not only during RTL generation but also, for
       example, by instruction combination.  The result of
!      ‘SELECT_CC_MODE’ should be consistent with the mode used in the
       patterns; for example to support the case of the add on the SPARC
       discussed above, we have the pattern
  
*************** File: gccint.info,  Node: MODE_CC Condit
*** 39683,39690 ****
              ""
              "...")
  
!      together with a 'SELECT_CC_MODE' that returns 'CCNZmode' for
!      comparisons whose argument is a 'plus':
  
            #define SELECT_CC_MODE(OP,X,Y) \
              (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
--- 39684,39691 ----
              ""
              "...")
  
!      together with a ‘SELECT_CC_MODE’ that returns ‘CCNZmode’ for
!      comparisons whose argument is a ‘plus’:
  
            #define SELECT_CC_MODE(OP,X,Y) \
              (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
*************** File: gccint.info,  Node: MODE_CC Condit
*** 39695,39739 ****
                  ? CCNZmode : CCmode))
  
       Another reason to use modes is to retain information on which
!      operands were used by the comparison; see 'REVERSIBLE_CC_MODE'
       later in this section.
  
       You should define this macro if and only if you define extra CC
!      modes in 'MACHINE-modes.def'.
  
   -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx
            *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE)
       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 'GT' comparison, but you can use an 'LT'
       comparison instead and swap the order of the operands.
  
       On such machines, implement this hook to do any required
       conversions.  CODE is the initial comparison code and OP0 and OP1
       are the left and right operands of the comparison, respectively.
!      If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed
       to change the value of OP0 since the value might be used in RTXs
       which aren't comparisons.  E.g.  the implementation is not allowed
       to swap operands in that case.
  
       GCC will not assume that the comparison resulting from this macro
       is valid but will see if the resulting insn matches a pattern in
!      the 'md' file.
  
       You need not to implement this hook if it would never change the
       comparison code or operands.
  
   -- Macro: REVERSIBLE_CC_MODE (MODE)
       A C expression whose value is one if it is always safe to reverse a
!      comparison whose mode is MODE.  If 'SELECT_CC_MODE' can ever return
       MODE for a floating-point inequality comparison, then
!      'REVERSIBLE_CC_MODE (MODE)' must be zero.
  
       You need not define this macro if it would always returns zero or
       if the floating-point format is anything other than
!      'IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
       the SPARC, where floating-point inequality comparisons are given
!      either 'CCFPEmode' or 'CCFPmode':
  
            #define REVERSIBLE_CC_MODE(MODE) \
               ((MODE) != CCFPEmode && (MODE) != CCFPmode)
--- 39696,39740 ----
                  ? CCNZmode : CCmode))
  
       Another reason to use modes is to retain information on which
!      operands were used by the comparison; see ‘REVERSIBLE_CC_MODE’
       later in this section.
  
       You should define this macro if and only if you define extra CC
!      modes in ‘MACHINE-modes.def’.
  
   -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx
            *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE)
       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 ‘GT’ comparison, but you can use an ‘LT’
       comparison instead and swap the order of the operands.
  
       On such machines, implement this hook to do any required
       conversions.  CODE is the initial comparison code and OP0 and OP1
       are the left and right operands of the comparison, respectively.
!      If OP0_PRESERVE_VALUE is ‘true’ the implementation is not allowed
       to change the value of OP0 since the value might be used in RTXs
       which aren't comparisons.  E.g.  the implementation is not allowed
       to swap operands in that case.
  
       GCC will not assume that the comparison resulting from this macro
       is valid but will see if the resulting insn matches a pattern in
!      the ‘md’ file.
  
       You need not to implement this hook if it would never change the
       comparison code or operands.
  
   -- Macro: REVERSIBLE_CC_MODE (MODE)
       A C expression whose value is one if it is always safe to reverse a
!      comparison whose mode is MODE.  If ‘SELECT_CC_MODE’ can ever return
       MODE for a floating-point inequality comparison, then
!      ‘REVERSIBLE_CC_MODE (MODE)’ must be zero.
  
       You need not define this macro if it would always returns zero or
       if the floating-point format is anything other than
!      ‘IEEE_FLOAT_FORMAT’.  For example, here is the definition used on
       the SPARC, where floating-point inequality comparisons are given
!      either ‘CCFPEmode’ or ‘CCFPmode’:
  
            #define REVERSIBLE_CC_MODE(MODE) \
               ((MODE) != CCFPEmode && (MODE) != CCFPmode)
*************** File: gccint.info,  Node: MODE_CC Condit
*** 39741,39747 ****
   -- Macro: REVERSE_CONDITION (CODE, MODE)
       A C expression whose value is reversed condition code of the CODE
       for comparison done in CC_MODE MODE.  The macro is used only in
!      case 'REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
       case machine has some non-standard way how to reverse certain
       conditionals.  For instance in case all floating point conditions
       are non-trapping, compiler may freely convert unordered compares to
--- 39742,39748 ----
   -- Macro: REVERSE_CONDITION (CODE, MODE)
       A C expression whose value is reversed condition code of the CODE
       for comparison done in CC_MODE MODE.  The macro is used only in
!      case ‘REVERSIBLE_CC_MODE (MODE)’ is nonzero.  Define this macro in
       case machine has some non-standard way how to reverse certain
       conditionals.  For instance in case all floating point conditions
       are non-trapping, compiler may freely convert unordered compares to
*************** File: gccint.info,  Node: MODE_CC Condit
*** 39761,39782 ****
       should set the integers to which its arguments point to the hard
       register numbers used for condition codes.  When there is only one
       such register, as is true on most systems, the integer pointed to
!      by P2 should be set to 'INVALID_REGNUM'.
  
       The default version of this hook returns false.
  
   -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode
            M1, machine_mode M2)
       On targets which use multiple condition code modes in class
!      '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
       target hook to take two mode arguments and to return a mode in
       which both comparisons may be validly done.  If there is no such
!      mode, return 'VOIDmode'.
  
       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 'VOIDmode'.
  
   -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
       If the target has a dedicated flags register, and it needs to use
--- 39762,39783 ----
       should set the integers to which its arguments point to the hard
       register numbers used for condition codes.  When there is only one
       such register, as is true on most systems, the integer pointed to
!      by P2 should be set to ‘INVALID_REGNUM’.
  
       The default version of this hook returns false.
  
   -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode
            M1, machine_mode M2)
       On targets which use multiple condition code modes in class
!      ‘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
       target hook to take two mode arguments and to return a mode in
       which both comparisons may be validly done.  If there is no such
!      mode, return ‘VOIDmode’.
  
       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 ‘VOIDmode’.
  
   -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
       If the target has a dedicated flags register, and it needs to use
*************** on the target machine.
*** 39795,39801 ****
   -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
       A C expression for the cost of moving data of mode MODE from a
       register in class FROM to one in class TO.  The classes are
!      expressed using the enumeration values such as 'GENERAL_REGS'.  A
       value of 2 is the default; other values are interpreted relative to
       that.
  
--- 39796,39802 ----
   -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
       A C expression for the cost of moving data of mode MODE from a
       register in class FROM to one in class TO.  The classes are
!      expressed using the enumeration values such as ‘GENERAL_REGS’.  A
       value of 2 is the default; other values are interpreted relative to
       that.
  
*************** on the target machine.
*** 39803,39824 ****
       same as TO; on some machines it is expensive to move between
       registers if they are not general registers.
  
!      If reload sees an insn consisting of a single 'set' between two
!      hard registers, and if 'REGISTER_MOVE_COST' applied to their
       classes returns a value of 2, reload does not check to ensure that
       the constraints of the insn are met.  Setting a cost of other than
       2 will allow reload to verify that the constraints are met.  You
!      should do this if the 'movM' pattern's constraints do not allow
       such copying.
  
       These macros are obsolete, new ports should use the target hook
!      'TARGET_REGISTER_MOVE_COST' instead.
  
   -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE,
            reg_class_t FROM, reg_class_t TO)
       This target hook should return the cost of moving data of mode MODE
       from a register in class FROM to one in class TO.  The classes are
!      expressed using the enumeration values such as 'GENERAL_REGS'.  A
       value of 2 is the default; other values are interpreted relative to
       that.
  
--- 39804,39825 ----
       same as TO; on some machines it is expensive to move between
       registers if they are not general registers.
  
!      If reload sees an insn consisting of a single ‘set’ between two
!      hard registers, and if ‘REGISTER_MOVE_COST’ applied to their
       classes returns a value of 2, reload does not check to ensure that
       the constraints of the insn are met.  Setting a cost of other than
       2 will allow reload to verify that the constraints are met.  You
!      should do this if the ‘movM’ pattern's constraints do not allow
       such copying.
  
       These macros are obsolete, new ports should use the target hook
!      ‘TARGET_REGISTER_MOVE_COST’ instead.
  
   -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE,
            reg_class_t FROM, reg_class_t TO)
       This target hook should return the cost of moving data of mode MODE
       from a register in class FROM to one in class TO.  The classes are
!      expressed using the enumeration values such as ‘GENERAL_REGS’.  A
       value of 2 is the default; other values are interpreted relative to
       that.
  
*************** on the target machine.
*** 39826,39837 ****
       same as TO; on some machines it is expensive to move between
       registers if they are not general registers.
  
!      If reload sees an insn consisting of a single 'set' between two
!      hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their
       classes returns a value of 2, reload does not check to ensure that
       the constraints of the insn are met.  Setting a cost of other than
       2 will allow reload to verify that the constraints are met.  You
!      should do this if the 'movM' pattern's constraints do not allow
       such copying.
  
       The default version of this function returns 2.
--- 39827,39838 ----
       same as TO; on some machines it is expensive to move between
       registers if they are not general registers.
  
!      If reload sees an insn consisting of a single ‘set’ between two
!      hard registers, and if ‘TARGET_REGISTER_MOVE_COST’ applied to their
       classes returns a value of 2, reload does not check to ensure that
       the constraints of the insn are met.  Setting a cost of other than
       2 will allow reload to verify that the constraints are met.  You
!      should do this if the ‘movM’ pattern's constraints do not allow
       such copying.
  
       The default version of this function returns 2.
*************** on the target machine.
*** 39840,39846 ****
       A C expression for the cost of moving data of mode MODE between a
       register of class CLASS and memory; IN is zero if the value is to
       be written to memory, nonzero if it is to be read in.  This cost is
!      relative to those in 'REGISTER_MOVE_COST'.  If moving between
       registers and memory is more expensive than between two registers,
       you should define this macro to express the relative cost.
  
--- 39841,39847 ----
       A C expression for the cost of moving data of mode MODE between a
       register of class CLASS and memory; IN is zero if the value is to
       be written to memory, nonzero if it is to be read in.  This cost is
!      relative to those in ‘REGISTER_MOVE_COST’.  If moving between
       registers and memory is more expensive than between two registers,
       you should define this macro to express the relative cost.
  
*************** on the target machine.
*** 39851,39857 ****
       mechanism is more complex than copying via an intermediate, define
       this macro to reflect the actual cost of the move.
  
!      GCC defines the function 'memory_move_secondary_cost' if secondary
       reloads are needed.  It computes the costs due to copying via a
       secondary register.  If your machine copies from memory using a
       secondary register in the conventional way but the default base
--- 39852,39858 ----
       mechanism is more complex than copying via an intermediate, define
       this macro to reflect the actual cost of the move.
  
!      GCC defines the function ‘memory_move_secondary_cost’ if secondary
       reloads are needed.  It computes the costs due to copying via a
       secondary register.  If your machine copies from memory using a
       secondary register in the conventional way but the default base
*************** on the target machine.
*** 39860,39873 ****
       to that function are the same as to this macro.
  
       These macros are obsolete, new ports should use the target hook
!      'TARGET_MEMORY_MOVE_COST' instead.
  
   -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE,
            reg_class_t RCLASS, bool IN)
       This target hook should return the cost of moving data of mode MODE
!      between a register of class RCLASS and memory; IN is 'false' if the
!      value is to be written to memory, 'true' if it is to be read in.
!      This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'.  If
       moving between registers and memory is more expensive than between
       two registers, you should add this target hook to express the
       relative cost.
--- 39861,39874 ----
       to that function are the same as to this macro.
  
       These macros are obsolete, new ports should use the target hook
!      ‘TARGET_MEMORY_MOVE_COST’ instead.
  
   -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE,
            reg_class_t RCLASS, bool IN)
       This target hook should return the cost of moving data of mode MODE
!      between a register of class RCLASS and memory; IN is ‘false’ if the
!      value is to be written to memory, ‘true’ if it is to be read in.
!      This cost is relative to those in ‘TARGET_REGISTER_MOVE_COST’.  If
       moving between registers and memory is more expensive than between
       two registers, you should add this target hook to express the
       relative cost.
*************** on the target machine.
*** 39879,39885 ****
       mechanism is more complex than copying via an intermediate, use
       this target hook to reflect the actual cost of the move.
  
!      GCC defines the function 'memory_move_secondary_cost' if secondary
       reloads are needed.  It computes the costs due to copying via a
       secondary register.  If your machine copies from memory using a
       secondary register in the conventional way but the default base
--- 39880,39886 ----
       mechanism is more complex than copying via an intermediate, use
       this target hook to reflect the actual cost of the move.
  
!      GCC defines the function ‘memory_move_secondary_cost’ if secondary
       reloads are needed.  It computes the costs due to copying via a
       secondary register.  If your machine copies from memory using a
       secondary register in the conventional way but the default base
*************** on the target machine.
*** 39891,39900 ****
       A C expression for the cost of a branch instruction.  A value of 1
       is the default; other values are interpreted relative to that.
       Parameter SPEED_P is true when the branch in question should be
!      optimized for speed.  When it is false, 'BRANCH_COST' should return
       a value optimal for code size rather than performance.
       PREDICTABLE_P is true for well-predicted branches.  On many
!      architectures the 'BRANCH_COST' can be reduced then.
  
   Here are additional macros which do not specify precise relative costs,
  but only that certain actions are more expensive than GCC would
--- 39892,39901 ----
       A C expression for the cost of a branch instruction.  A value of 1
       is the default; other values are interpreted relative to that.
       Parameter SPEED_P is true when the branch in question should be
!      optimized for speed.  When it is false, ‘BRANCH_COST’ should return
       a value optimal for code size rather than performance.
       PREDICTABLE_P is true for well-predicted branches.  On many
!      architectures the ‘BRANCH_COST’ can be reduced then.
  
   Here are additional macros which do not specify precise relative costs,
  but only that certain actions are more expensive than GCC would
*************** ordinarily expect.
*** 39902,39908 ****
  
   -- Macro: SLOW_BYTE_ACCESS
       Define this macro as a C expression which is nonzero if accessing
!      less than a word of memory (i.e. a 'char' or a 'short') is no
       faster than accessing a word of memory, i.e., if such access
       require more than one instruction or if there is no difference in
       cost between byte and (aligned) word loads.
--- 39903,39909 ----
  
   -- Macro: SLOW_BYTE_ACCESS
       Define this macro as a C expression which is nonzero if accessing
!      less than a word of memory (i.e. a ‘char’ or a ‘short’) is no
       faster than accessing a word of memory, i.e., if such access
       require more than one instruction or if there is no difference in
       cost between byte and (aligned) word loads.
*************** ordinarily expect.
*** 39920,39936 ****
       This hook returns true if memory accesses described by the MODE and
       ALIGNMENT parameters have a cost many times greater than aligned
       accesses, for example if they are emulated in a trap handler.  This
!      hook is invoked only for unaligned accesses, i.e. when 'ALIGNMENT <
!      GET_MODE_ALIGNMENT (MODE)'.
  
       When this hook returns true, the compiler will act as if
!      'STRICT_ALIGNMENT' were true when generating code for block moves.
       This can cause significantly more instructions to be produced.
       Therefore, do not make this hook return true if unaligned accesses
       only add a cycle or two to the time for a memory access.
  
!      The hook must return true whenever 'STRICT_ALIGNMENT' is true.  The
!      default implementation returns 'STRICT_ALIGNMENT'.
  
   -- Macro: MOVE_RATIO (SPEED)
       The threshold of number of scalar memory-to-memory move insns,
--- 39921,39937 ----
       This hook returns true if memory accesses described by the MODE and
       ALIGNMENT parameters have a cost many times greater than aligned
       accesses, for example if they are emulated in a trap handler.  This
!      hook is invoked only for unaligned accesses, i.e. when ‘ALIGNMENT <
!      GET_MODE_ALIGNMENT (MODE)’.
  
       When this hook returns true, the compiler will act as if
!      ‘STRICT_ALIGNMENT’ were true when generating code for block moves.
       This can cause significantly more instructions to be produced.
       Therefore, do not make this hook return true if unaligned accesses
       only add a cycle or two to the time for a memory access.
  
!      The hook must return true whenever ‘STRICT_ALIGNMENT’ is true.  The
!      default implementation returns ‘STRICT_ALIGNMENT’.
  
   -- Macro: MOVE_RATIO (SPEED)
       The threshold of number of scalar memory-to-memory move insns,
*************** ordinarily expect.
*** 39940,39946 ****
       increased code size.
  
       Note that on machines where the corresponding move insn is a
!      'define_expand' that emits a sequence of insns, this macro counts
       the number of such sequences.
  
       The parameter SPEED is true if the code is currently being
--- 39941,39947 ----
       increased code size.
  
       Note that on machines where the corresponding move insn is a
!      ‘define_expand’ that emits a sequence of insns, this macro counts
       the number of such sequences.
  
       The parameter SPEED is true if the code is currently being
*************** ordinarily expect.
*** 39953,39971 ****
            by_pieces_operation OP, bool SPEED_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 'struct'.  The 'by_pieces' infrastructure implements
       such memory operations as a sequence of load, store or move insns.
!      Alternate strategies are to expand the 'cpymem' or 'setmem' optabs,
       to emit a library call, or to emit unit-by-unit, loop-based
       operations.
  
       This target hook should return true if, for a memory operation with
!      a given SIZE and ALIGNMENT, using the 'by_pieces' infrastructure is
       expected to result in better code generation.  Both SIZE and
       ALIGNMENT are measured in terms of storage units.
  
!      The parameter OP is one of: 'CLEAR_BY_PIECES', 'MOVE_BY_PIECES',
!      'SET_BY_PIECES', 'STORE_BY_PIECES' or 'COMPARE_BY_PIECES'.  These
       describe the type of memory operation under consideration.
  
       The parameter SPEED_P is true if the code is currently being
--- 39954,39972 ----
            by_pieces_operation OP, bool SPEED_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 ‘struct’.  The ‘by_pieces’ infrastructure implements
       such memory operations as a sequence of load, store or move insns.
!      Alternate strategies are to expand the ‘cpymem’ or ‘setmem’ optabs,
       to emit a library call, or to emit unit-by-unit, loop-based
       operations.
  
       This target hook should return true if, for a memory operation with
!      a given SIZE and ALIGNMENT, using the ‘by_pieces’ infrastructure is
       expected to result in better code generation.  Both SIZE and
       ALIGNMENT are measured in terms of storage units.
  
!      The parameter OP is one of: ‘CLEAR_BY_PIECES’, ‘MOVE_BY_PIECES’,
!      ‘SET_BY_PIECES’, ‘STORE_BY_PIECES’ or ‘COMPARE_BY_PIECES’.  These
       describe the type of memory operation under consideration.
  
       The parameter SPEED_P is true if the code is currently being
*************** ordinarily expect.
*** 39973,39990 ****
  
       Returning true for higher values of SIZE can improve code
       generation for speed if the target does not provide an
!      implementation of the 'cpymem' or 'setmem' standard names, if the
!      'cpymem' or 'setmem' implementation would be more expensive than a
       sequence of insns, or if the overhead of a library call would
       dominate that of the body of the memory operation.
  
!      Returning true for higher values of '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.
  
   -- Target Hook: bool TARGET_OVERLAP_OP_BY_PIECES_P (void)
!      This target hook should return true if when the '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
--- 39974,39991 ----
  
       Returning true for higher values of SIZE can improve code
       generation for speed if the target does not provide an
!      implementation of the ‘cpymem’ or ‘setmem’ standard names, if the
!      ‘cpymem’ or ‘setmem’ implementation would be more expensive than a
       sequence of insns, or if the overhead of a library call would
       dominate that of the body of the memory operation.
  
!      Returning true for higher values of ‘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.
  
   -- Target Hook: bool TARGET_OVERLAP_OP_BY_PIECES_P (void)
!      This target hook should return true if when the ‘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
*************** ordinarily expect.
*** 40001,40019 ****
       comparisons by returning a negative number from this hook.
  
   -- Macro: MOVE_MAX_PIECES
!      A C expression used by 'move_by_pieces' to determine the largest
       unit a load or store used to copy memory is.  Defaults to
!      'MOVE_MAX'.
  
   -- Macro: STORE_MAX_PIECES
!      A C expression used by 'store_by_pieces' to determine the largest
!      unit a store used to memory is.  Defaults to 'MOVE_MAX_PIECES', or
!      two times the size of 'HOST_WIDE_INT', whichever is smaller.
  
   -- Macro: COMPARE_MAX_PIECES
!      A C expression used by 'compare_by_pieces' to determine the largest
       unit a load or store used to compare memory is.  Defaults to
!      'MOVE_MAX_PIECES'.
  
   -- Macro: CLEAR_RATIO (SPEED)
       The threshold of number of scalar move insns, _below_ which a
--- 40002,40020 ----
       comparisons by returning a negative number from this hook.
  
   -- Macro: MOVE_MAX_PIECES
!      A C expression used by ‘move_by_pieces’ to determine the largest
       unit a load or store used to copy memory is.  Defaults to
!      ‘MOVE_MAX’.
  
   -- Macro: STORE_MAX_PIECES
!      A C expression used by ‘store_by_pieces’ to determine the largest
!      unit a store used to memory is.  Defaults to ‘MOVE_MAX_PIECES’, or
!      two times the size of ‘HOST_WIDE_INT’, whichever is smaller.
  
   -- Macro: COMPARE_MAX_PIECES
!      A C expression used by ‘compare_by_pieces’ to determine the largest
       unit a load or store used to compare memory is.  Defaults to
!      ‘MOVE_MAX_PIECES’.
  
   -- Macro: CLEAR_RATIO (SPEED)
       The threshold of number of scalar move insns, _below_ which a
*************** ordinarily expect.
*** 40037,40083 ****
       The parameter SPEED is true if the code is currently being
       optimized for speed rather than size.
  
!      If you don't define this, it defaults to the value of 'MOVE_RATIO'.
  
   -- Macro: USE_LOAD_POST_INCREMENT (MODE)
       A C expression used to determine whether a load postincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_POST_INCREMENT'.
  
   -- Macro: USE_LOAD_POST_DECREMENT (MODE)
       A C expression used to determine whether a load postdecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_POST_DECREMENT'.
  
   -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
       A C expression used to determine whether a load preincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_PRE_INCREMENT'.
  
   -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
       A C expression used to determine whether a load predecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_PRE_DECREMENT'.
  
   -- Macro: USE_STORE_POST_INCREMENT (MODE)
       A C expression used to determine whether a store postincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_POST_INCREMENT'.
  
   -- Macro: USE_STORE_POST_DECREMENT (MODE)
       A C expression used to determine whether a store postdecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_POST_DECREMENT'.
  
   -- Macro: USE_STORE_PRE_INCREMENT (MODE)
       This macro is used to determine whether a store preincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_PRE_INCREMENT'.
  
   -- Macro: USE_STORE_PRE_DECREMENT (MODE)
       This macro is used to determine whether a store predecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      'HAVE_PRE_DECREMENT'.
  
   -- Macro: NO_FUNCTION_CSE
       Define this macro to be true if it is as good or better to call a
--- 40038,40084 ----
       The parameter SPEED is true if the code is currently being
       optimized for speed rather than size.
  
!      If you don't define this, it defaults to the value of ‘MOVE_RATIO’.
  
   -- Macro: USE_LOAD_POST_INCREMENT (MODE)
       A C expression used to determine whether a load postincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_POST_INCREMENT’.
  
   -- Macro: USE_LOAD_POST_DECREMENT (MODE)
       A C expression used to determine whether a load postdecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_POST_DECREMENT’.
  
   -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
       A C expression used to determine whether a load preincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_PRE_INCREMENT’.
  
   -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
       A C expression used to determine whether a load predecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_PRE_DECREMENT’.
  
   -- Macro: USE_STORE_POST_INCREMENT (MODE)
       A C expression used to determine whether a store postincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_POST_INCREMENT’.
  
   -- Macro: USE_STORE_POST_DECREMENT (MODE)
       A C expression used to determine whether a store postdecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_POST_DECREMENT’.
  
   -- Macro: USE_STORE_PRE_INCREMENT (MODE)
       This macro is used to determine whether a store preincrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_PRE_INCREMENT’.
  
   -- Macro: USE_STORE_PRE_DECREMENT (MODE)
       This macro is used to determine whether a store predecrement is a
       good thing to use for a given mode.  Defaults to the value of
!      ‘HAVE_PRE_DECREMENT’.
  
   -- Macro: NO_FUNCTION_CSE
       Define this macro to be true if it is as good or better to call a
*************** ordinarily expect.
*** 40086,40105 ****
  
   -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT
       Define this macro if a non-short-circuit operation produced by
!      'fold_range_test ()' is optimal.  This macro defaults to true if
!      'BRANCH_COST' is greater than or equal to the value 2.
  
   -- Target Hook: bool TARGET_OPTAB_SUPPORTED_P (int OP, machine_mode
            MODE1, machine_mode MODE2, optimization_type OPT_TYPE)
       Return true if the optimizers should use optab OP with modes MODE1
       and MODE2 for optimization type OPT_TYPE.  The optab is known to
!      have an associated '.md' instruction whose C condition is true.
       MODE2 is only meaningful for conversion optabs; for direct optabs
       it is a copy of MODE1.
  
!      For example, when called with OP equal to 'rint_optab' and MODE1
!      equal to 'DFmode', the hook should say whether the optimizers
!      should use optab 'rintdf2'.
  
       The default hook returns true for all inputs.
  
--- 40087,40106 ----
  
   -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT
       Define this macro if a non-short-circuit operation produced by
!      ‘fold_range_test ()’ is optimal.  This macro defaults to true if
!      ‘BRANCH_COST’ is greater than or equal to the value 2.
  
   -- Target Hook: bool TARGET_OPTAB_SUPPORTED_P (int OP, machine_mode
            MODE1, machine_mode MODE2, optimization_type OPT_TYPE)
       Return true if the optimizers should use optab OP with modes MODE1
       and MODE2 for optimization type OPT_TYPE.  The optab is known to
!      have an associated ‘.md’ instruction whose C condition is true.
       MODE2 is only meaningful for conversion optabs; for direct optabs
       it is a copy of MODE1.
  
!      For example, when called with OP equal to ‘rint_optab’ and MODE1
!      equal to ‘DFmode’, the hook should say whether the optimizers
!      should use optab ‘rintdf2’.
  
       The default hook returns true for all inputs.
  
*************** ordinarily expect.
*** 40110,40144 ****
       The cost may depend on the precise form of the expression, which is
       available for examination in X, and the fact that X appears as
       operand OPNO of an expression with rtx code OUTER_CODE.  That is,
!      the hook can assume that there is some rtx Y such that 'GET_CODE
!      (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X'
!      or (b) 'XVEC (Y, OPNO)' contains X.
  
!      MODE is X's machine mode, or for cases like 'const_int' that do not
       have a mode, the mode in which X is used.
  
!      In implementing this hook, you can use the construct 'COSTS_N_INSNS
!      (N)' to specify a cost equal to N fast instructions.
  
!      On entry to the hook, '*TOTAL' contains a default estimate for the
       cost of the expression.  The hook should modify this value as
!      necessary.  Traditionally, the default costs are 'COSTS_N_INSNS
!      (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and
!      modulus operations, and 'COSTS_N_INSNS (1)' for all other
       operations.
  
!      When optimizing for code size, i.e. when 'speed' is false, this
       target hook should be used to estimate the relative size cost of an
!      expression, again relative to 'COSTS_N_INSNS'.
  
       The hook returns true when all subexpressions of X have been
!      processed, and false when 'rtx_cost' should recurse.
  
   -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode
            MODE, addr_space_t AS, bool SPEED)
       This hook computes the cost of an addressing mode that contains
       ADDRESS.  If not defined, the cost is computed from the ADDRESS
!      expression and the 'TARGET_RTX_COST' hook.
  
       For most CISC machines, the default cost is a good approximation of
       the true cost of the addressing mode.  However, on RISC machines,
--- 40111,40145 ----
       The cost may depend on the precise form of the expression, which is
       available for examination in X, and the fact that X appears as
       operand OPNO of an expression with rtx code OUTER_CODE.  That is,
!      the hook can assume that there is some rtx Y such that ‘GET_CODE
!      (Y) == OUTER_CODE’ and such that either (a) ‘XEXP (Y, OPNO) == X’
!      or (b) ‘XVEC (Y, OPNO)’ contains X.
  
!      MODE is X's machine mode, or for cases like ‘const_int’ that do not
       have a mode, the mode in which X is used.
  
!      In implementing this hook, you can use the construct ‘COSTS_N_INSNS
!      (N)’ to specify a cost equal to N fast instructions.
  
!      On entry to the hook, ‘*TOTAL’ contains a default estimate for the
       cost of the expression.  The hook should modify this value as
!      necessary.  Traditionally, the default costs are ‘COSTS_N_INSNS
!      (5)’ for multiplications, ‘COSTS_N_INSNS (7)’ for division and
!      modulus operations, and ‘COSTS_N_INSNS (1)’ for all other
       operations.
  
!      When optimizing for code size, i.e. when ‘speed’ is false, this
       target hook should be used to estimate the relative size cost of an
!      expression, again relative to ‘COSTS_N_INSNS’.
  
       The hook returns true when all subexpressions of X have been
!      processed, and false when ‘rtx_cost’ should recurse.
  
   -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode
            MODE, addr_space_t AS, bool SPEED)
       This hook computes the cost of an addressing mode that contains
       ADDRESS.  If not defined, the cost is computed from the ADDRESS
!      expression and the ‘TARGET_RTX_COST’ hook.
  
       For most CISC machines, the default cost is a good approximation of
       the true cost of the addressing mode.  However, on RISC machines,
*************** ordinarily expect.
*** 40163,40171 ****
  
       On machines where an address involving more than one register is as
       cheap as an address computation involving only one register,
!      defining 'TARGET_ADDRESS_COST' to reflect this can cause two
       registers to be live over a region of code where only one would
!      have been if 'TARGET_ADDRESS_COST' were not defined in that manner.
       This effect 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.
--- 40164,40172 ----
  
       On machines where an address involving more than one register is as
       cheap as an address computation involving only one register,
!      defining ‘TARGET_ADDRESS_COST’ to reflect this can cause two
       registers to be live over a region of code where only one would
!      have been if ‘TARGET_ADDRESS_COST’ were not defined in that manner.
       This effect 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.
*************** ordinarily expect.
*** 40173,40216 ****
   -- Target Hook: int TARGET_INSN_COST (rtx_insn *INSN, bool SPEED)
       This target hook describes the relative costs of RTL instructions.
  
!      In implementing this hook, you can use the construct 'COSTS_N_INSNS
!      (N)' to specify a cost equal to N fast instructions.
  
!      When optimizing for code size, i.e. when 'speed' is false, this
       target hook should be used to estimate the relative size cost of an
!      expression, again relative to 'COSTS_N_INSNS'.
  
   -- Target Hook: unsigned int TARGET_MAX_NOCE_IFCVT_SEQ_COST (edge E)
!      This hook returns a value in the same units as 'TARGET_RTX_COSTS',
       giving the maximum acceptable cost for a sequence generated by the
       RTL if-conversion pass when conditional execution is not available.
       The RTL if-conversion pass attempts to convert conditional
       operations that would require a branch to a series of unconditional
!      operations and 'movMODEcc' insns.  This hook returns the maximum
!      cost of the unconditional instructions and the 'movMODEcc' insns.
       RTL if-conversion is cancelled if the cost of the converted
       sequence is greater than the value returned by this hook.
  
!      'e' is the edge between the basic block containing the conditional
       branch to the basic block which would be executed if the condition
       were true.
  
       The default implementation of this hook uses the
!      'max-rtl-if-conversion-[un]predictable' parameters if they are set,
!      and uses a multiple of 'BRANCH_COST' otherwise.
  
   -- Target Hook: bool TARGET_NOCE_CONVERSION_PROFITABLE_P (rtx_insn
            *SEQ, struct noce_if_info *IF_INFO)
!      This hook returns true if the instruction sequence 'seq' is a good
       candidate as a replacement for the if-convertible sequence
!      described in 'if_info'.
  
   -- Target Hook: bool TARGET_NEW_ADDRESS_PROFITABLE_P (rtx MEMREF,
            rtx_insn * INSN, rtx NEW_ADDR)
!      Return 'true' if it is profitable to replace the address in MEMREF
       with NEW_ADDR.  This allows targets to prevent the scheduler from
       undoing address optimizations.  The instruction containing the
!      memref is INSN.  The default implementation returns 'true'.
  
   -- Target Hook: bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void)
       This predicate controls the use of the eager delay slot filler to
--- 40174,40217 ----
   -- Target Hook: int TARGET_INSN_COST (rtx_insn *INSN, bool SPEED)
       This target hook describes the relative costs of RTL instructions.
  
!      In implementing this hook, you can use the construct ‘COSTS_N_INSNS
!      (N)’ to specify a cost equal to N fast instructions.
  
!      When optimizing for code size, i.e. when ‘speed’ is false, this
       target hook should be used to estimate the relative size cost of an
!      expression, again relative to ‘COSTS_N_INSNS’.
  
   -- Target Hook: unsigned int TARGET_MAX_NOCE_IFCVT_SEQ_COST (edge E)
!      This hook returns a value in the same units as ‘TARGET_RTX_COSTS’,
       giving the maximum acceptable cost for a sequence generated by the
       RTL if-conversion pass when conditional execution is not available.
       The RTL if-conversion pass attempts to convert conditional
       operations that would require a branch to a series of unconditional
!      operations and ‘movMODEcc’ insns.  This hook returns the maximum
!      cost of the unconditional instructions and the ‘movMODEcc’ insns.
       RTL if-conversion is cancelled if the cost of the converted
       sequence is greater than the value returned by this hook.
  
!      ‘e’ is the edge between the basic block containing the conditional
       branch to the basic block which would be executed if the condition
       were true.
  
       The default implementation of this hook uses the
!      ‘max-rtl-if-conversion-[un]predictable’ parameters if they are set,
!      and uses a multiple of ‘BRANCH_COST’ otherwise.
  
   -- Target Hook: bool TARGET_NOCE_CONVERSION_PROFITABLE_P (rtx_insn
            *SEQ, struct noce_if_info *IF_INFO)
!      This hook returns true if the instruction sequence ‘seq’ is a good
       candidate as a replacement for the if-convertible sequence
!      described in ‘if_info’.
  
   -- Target Hook: bool TARGET_NEW_ADDRESS_PROFITABLE_P (rtx MEMREF,
            rtx_insn * INSN, rtx NEW_ADDR)
!      Return ‘true’ if it is profitable to replace the address in MEMREF
       with NEW_ADDR.  This allows targets to prevent the scheduler from
       undoing address optimizations.  The instruction containing the
!      memref is INSN.  The default implementation returns ‘true’.
  
   -- Target Hook: bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void)
       This predicate controls the use of the eager delay slot filler to
*************** ordinarily expect.
*** 40227,40234 ****
       Return an estimate of the runtime value of VAL, for use in things
       like cost calculations or profiling frequencies.  KIND is used to
       ask for the minimum, maximum, and likely estimates of the value
!      through the 'POLY_VALUE_MIN', 'POLY_VALUE_MAX' and
!      'POLY_VALUE_LIKELY' values.  The default implementation returns the
       lowest possible value of VAL.
  
  
--- 40228,40235 ----
       Return an estimate of the runtime value of VAL, for use in things
       like cost calculations or profiling frequencies.  KIND is used to
       ask for the minimum, maximum, and likely estimates of the value
!      through the ‘POLY_VALUE_MIN’, ‘POLY_VALUE_MAX’ and
!      ‘POLY_VALUE_LIKELY’ values.  The default implementation returns the
       lowest possible value of VAL.
  
  
*************** them: try the first ones in this list fi
*** 40248,40269 ****
       Although the insn scheduler can define itself the possibility of
       issue an insn on the same cycle, the value can serve as an
       additional constraint to issue insns on the same simulated
!      processor cycle (see hooks 'TARGET_SCHED_REORDER' and
!      'TARGET_SCHED_REORDER2').  This value must be constant over the
       entire compilation.  If you need it to vary depending on what the
!      instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'.
  
   -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
            VERBOSE, rtx_insn *INSN, int MORE)
       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
!      'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally
       are not counted against the issue rate.  You should define this
       hook if some insns take more machine resources than others, so that
       fewer insns can follow them in the same cycle.  FILE is either a
       null pointer, or a stdio stream to write any debug output to.
!      VERBOSE is the verbose level provided by '-fsched-verbose-N'.  INSN
       is the instruction that was scheduled.
  
   -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, int
--- 40249,40270 ----
       Although the insn scheduler can define itself the possibility of
       issue an insn on the same cycle, the value can serve as an
       additional constraint to issue insns on the same simulated
!      processor cycle (see hooks ‘TARGET_SCHED_REORDER’ and
!      ‘TARGET_SCHED_REORDER2’).  This value must be constant over the
       entire compilation.  If you need it to vary depending on what the
!      instructions are, you must use ‘TARGET_SCHED_VARIABLE_ISSUE’.
  
   -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
            VERBOSE, rtx_insn *INSN, int MORE)
       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
!      ‘MORE - 1’ for insns other than ‘CLOBBER’ and ‘USE’, which normally
       are not counted against the issue rate.  You should define this
       hook if some insns take more machine resources than others, so that
       fewer insns can follow them in the same cycle.  FILE is either a
       null pointer, or a stdio stream to write any debug output to.
!      VERBOSE is the verbose level provided by ‘-fsched-verbose-N’.  INSN
       is the instruction that was scheduled.
  
   -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, int
*************** them: try the first ones in this list fi
*** 40293,40317 ****
            rtx_insn **READY, int *N_READYP, int CLOCK)
       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 'VLIW'
       machines).  FILE is either a null pointer, or a stdio stream to
       write any debug output to.  VERBOSE is the verbose level provided
!      by '-fsched-verbose-N'.  READY is a pointer to the ready list of
       instructions that are ready to be scheduled.  N_READYP is a pointer
       to the number of elements in the ready list.  The scheduler reads
!      the ready list in reverse order, starting with READY[*N_READYP - 1]
       and going to READY[0].  CLOCK is the timer tick of the scheduler.
       You may modify the ready list and the number of ready insns.  The
       return value is the number of insns that can issue this cycle;
!      normally this is just 'issue_rate'.  See also
!      'TARGET_SCHED_REORDER2'.
  
   -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
            rtx_insn **READY, int *N_READYP, int CLOCK)
!      Like '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
!      'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and
       return the number of insns to be scheduled in the same cycle.
       Defining this hook can be useful if there are frequent situations
       where scheduling one insn causes other insns to become ready in the
--- 40294,40318 ----
            rtx_insn **READY, int *N_READYP, int CLOCK)
       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 ‘VLIW’
       machines).  FILE is either a null pointer, or a stdio stream to
       write any debug output to.  VERBOSE is the verbose level provided
!      by ‘-fsched-verbose-N’.  READY is a pointer to the ready list of
       instructions that are ready to be scheduled.  N_READYP is a pointer
       to the number of elements in the ready list.  The scheduler reads
!      the ready list in reverse order, starting with READY[*N_READYP − 1]
       and going to READY[0].  CLOCK is the timer tick of the scheduler.
       You may modify the ready list and the number of ready insns.  The
       return value is the number of insns that can issue this cycle;
!      normally this is just ‘issue_rate’.  See also
!      ‘TARGET_SCHED_REORDER2’.
  
   -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
            rtx_insn **READY, int *N_READYP, int CLOCK)
!      Like ‘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
!      ‘TARGET_SCHED_VARIABLE_ISSUE’; it can reorder the ready list and
       return the number of insns to be scheduled in the same cycle.
       Defining this hook can be useful if there are frequent situations
       where scheduling one insn causes other insns to become ready in the
*************** them: try the first ones in this list fi
*** 40347,40379 ****
       This hook is executed by the scheduler at the beginning of each
       block of instructions that are to be scheduled.  FILE is either a
       null pointer, or a stdio stream to write any debug output to.
!      VERBOSE is the verbose level provided by '-fsched-verbose-N'.
       MAX_READY is the maximum number of insns in the current scheduling
       region that can be live at the same time.  This can be used to
       allocate scratch space if it is needed, e.g. by
!      'TARGET_SCHED_REORDER'.
  
   -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
       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.  FILE is
       either a null pointer, or a stdio stream to write any debug output
!      to.  VERBOSE is the verbose level provided by '-fsched-verbose-N'.
  
   -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE,
            int OLD_MAX_UID)
       This hook is executed by the scheduler after function level
       initializations.  FILE is either a null pointer, or a stdio stream
       to write any debug output to.  VERBOSE is the verbose level
!      provided by '-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
       uid when scheduling begins.
  
   -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
            VERBOSE)
       This is the cleanup hook corresponding to
!      'TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
       stdio stream to write any debug output to.  VERBOSE is the verbose
!      level provided by '-fsched-verbose-N'.
  
   -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
       The hook returns an RTL insn.  The automaton state used in the
--- 40348,40380 ----
       This hook is executed by the scheduler at the beginning of each
       block of instructions that are to be scheduled.  FILE is either a
       null pointer, or a stdio stream to write any debug output to.
!      VERBOSE is the verbose level provided by ‘-fsched-verbose-N’.
       MAX_READY is the maximum number of insns in the current scheduling
       region that can be live at the same time.  This can be used to
       allocate scratch space if it is needed, e.g. by
!      ‘TARGET_SCHED_REORDER’.
  
   -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
       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.  FILE is
       either a null pointer, or a stdio stream to write any debug output
!      to.  VERBOSE is the verbose level provided by ‘-fsched-verbose-N’.
  
   -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE,
            int OLD_MAX_UID)
       This hook is executed by the scheduler after function level
       initializations.  FILE is either a null pointer, or a stdio stream
       to write any debug output to.  VERBOSE is the verbose level
!      provided by ‘-fsched-verbose-N’.  OLD_MAX_UID is the maximum insn
       uid when scheduling begins.
  
   -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
            VERBOSE)
       This is the cleanup hook corresponding to
!      ‘TARGET_SCHED_INIT_GLOBAL’.  FILE is either a null pointer, or a
       stdio stream to write any debug output to.  VERBOSE is the verbose
!      level provided by ‘-fsched-verbose-N’.
  
   -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
       The hook returns an RTL insn.  The automaton state used in the
*************** them: try the first ones in this list fi
*** 40388,40412 ****
       The hook can be used to initialize data used by the previous hook.
  
   -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
!      The hook is analogous to '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.
  
   -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
!      The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
       used to initialize data used by the previous hook.
  
   -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
       The hook to notify target that the current simulated cycle is about
       to finish.  The hook is analogous to
!      '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.
  
   -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
       The hook to notify target that new simulated cycle has just
       started.  The hook is analogous to
!      '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.
  
--- 40389,40413 ----
       The hook can be used to initialize data used by the previous hook.
  
   -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
!      The hook is analogous to ‘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.
  
   -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
!      The hook is analogous to ‘TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN’ but
       used to initialize data used by the previous hook.
  
   -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
       The hook to notify target that the current simulated cycle is about
       to finish.  The hook is analogous to
!      ‘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.
  
   -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
       The hook to notify target that new simulated cycle has just
       started.  The hook is analogous to
!      ‘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.
  
*************** them: try the first ones in this list fi
*** 40416,40422 ****
       queue for the DFA-based insn scheduler.  Usually the scheduler
       chooses the first insn from the queue.  If the hook returns a
       positive value, an additional scheduler code tries all permutations
!      of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent
       ready insns to choose an insn whose issue will result in maximal
       number of issued insns on the same cycle.  For the VLIW processor,
       the code could actually solve the problem of packing simple insns
--- 40417,40423 ----
       queue for the DFA-based insn scheduler.  Usually the scheduler
       chooses the first insn from the queue.  If the hook returns a
       positive value, an additional scheduler code tries all permutations
!      of ‘TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()’ subsequent
       ready insns to choose an insn whose issue will result in maximal
       number of issued insns on the same cycle.  For the VLIW processor,
       the code could actually solve the problem of packing simple insns
*************** them: try the first ones in this list fi
*** 40507,40515 ****
       _DEP is the dependence being evaluated.  The second parameter COST
       is the cost of the dependence as estimated by the scheduler, and
       the third parameter DISTANCE is the distance in cycles between the
!      two insns.  The hook returns 'true' if considering the distance
       between the two insns the dependence between them is considered
!      costly by the target, and 'false' otherwise.
  
       Defining this hook can be useful in multiple-issue out-of-order
       machines, where (a) it's practically hopeless to predict the actual
--- 40508,40516 ----
       _DEP is the dependence being evaluated.  The second parameter COST
       is the cost of the dependence as estimated by the scheduler, and
       the third parameter DISTANCE is the distance in cycles between the
!      two insns.  The hook returns ‘true’ if considering the distance
       between the two insns the dependence between them is considered
!      costly by the target, and ‘false’ otherwise.
  
       Defining this hook can be useful in multiple-issue out-of-order
       machines, where (a) it's practically hopeless to predict the actual
*************** them: try the first ones in this list fi
*** 40554,40560 ****
       speculatively.  The hook is used to check if the pattern of INSN
       has a speculative version and, in case of successful check, to
       generate that speculative pattern.  The hook should return 1, if
!      the instruction has a speculative form, or -1, if it doesn't.
       REQUEST describes the type of requested speculation.  If the return
       value equals 1 then NEW_PAT is assigned the generated speculative
       pattern.
--- 40555,40561 ----
       speculatively.  The hook is used to check if the pattern of INSN
       has a speculative version and, in case of successful check, to
       generate that speculative pattern.  The hook should return 1, if
!      the instruction has a speculative form, or −1, if it doesn't.
       REQUEST describes the type of requested speculation.  If the return
       value equals 1 then NEW_PAT is assigned the generated speculative
       pattern.
*************** them: try the first ones in this list fi
*** 40562,40570 ****
   -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int
            DEP_STATUS)
       This hook is called by the insn scheduler during generation of
!      recovery code for INSN.  It should return 'true', if the
       corresponding check instruction should branch to recovery code, or
!      'false' otherwise.
  
   -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN,
            rtx_insn *LABEL, unsigned int DS)
--- 40563,40571 ----
   -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int
            DEP_STATUS)
       This hook is called by the insn scheduler during generation of
!      recovery code for INSN.  It should return ‘true’, if the
       corresponding check instruction should branch to recovery code, or
!      ‘false’ otherwise.
  
   -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN,
            rtx_insn *LABEL, unsigned int DS)
*************** them: try the first ones in this list fi
*** 40590,40596 ****
       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 'false' if INSN should not be speculated.
  
   -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
       This hook is called by the swing modulo scheduler to calculate a
--- 40591,40597 ----
       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 ‘false’ if INSN should not be speculated.
  
   -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
       This hook is called by the swing modulo scheduler to calculate a
*************** File: gccint.info,  Node: Sections,  Nex
*** 40705,40744 ****
  ==========================================================
  
  An object file is divided into sections containing different types of
! data.  In the most common case, there are three sections: the "text
! section", which holds instructions and read-only data; the "data
! section", which holds initialized writable data; and the "bss section",
  which holds uninitialized data.  Some systems have other kinds of
  sections.
  
!  'varasm.cc' provides several well-known sections, such as
! 'text_section', 'data_section' and 'bss_section'.  The normal way of
! controlling a 'FOO_section' variable is to define the associated
! 'FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
! read once, when 'varasm.cc' initializes itself, so their values must be
  run-time constants.  They may however depend on command-line flags.
  
!  _Note:_ Some run-time files, such 'crtstuff.c', also make use of the
! 'FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
  
   Some assemblers require a different string to be written every time a
  section is selected.  If your assembler falls into this category, you
! should define the 'TARGET_ASM_INIT_SECTIONS' hook and use
! 'get_unnamed_section' to set up the sections.
  
!  You must always create a 'text_section', either by defining
! 'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in
! 'TARGET_ASM_INIT_SECTIONS'.  The same is true of 'data_section' and
! 'DATA_SECTION_ASM_OP'.  If you do not create a distinct
! 'readonly_data_section', the default is to reuse 'text_section'.
  
!  All the other 'varasm.cc' sections are optional, and are null if the
  target does not provide them.
  
   -- Macro: TEXT_SECTION_ASM_OP
       A C expression whose value is a string, including spacing,
       containing the assembler operation that should precede instructions
!      and read-only data.  Normally '"\t.text"' is right.
  
   -- Macro: HOT_TEXT_SECTION_NAME
       If defined, a C string constant for the name of the section
--- 40706,40745 ----
  ==========================================================
  
  An object file is divided into sections containing different types of
! data.  In the most common case, there are three sections: the “text
! section”, which holds instructions and read-only data; the “data
! section”, which holds initialized writable data; and the “bss section”,
  which holds uninitialized data.  Some systems have other kinds of
  sections.
  
!  ‘varasm.cc’ provides several well-known sections, such as
! ‘text_section’, ‘data_section’ and ‘bss_section’.  The normal way of
! controlling a ‘FOO_section’ variable is to define the associated
! ‘FOO_SECTION_ASM_OP’ macro, as described below.  The macros are only
! read once, when ‘varasm.cc’ initializes itself, so their values must be
  run-time constants.  They may however depend on command-line flags.
  
!  _Note:_ Some run-time files, such ‘crtstuff.c’, also make use of the
! ‘FOO_SECTION_ASM_OP’ macros, and expect them to be string literals.
  
   Some assemblers require a different string to be written every time a
  section is selected.  If your assembler falls into this category, you
! should define the ‘TARGET_ASM_INIT_SECTIONS’ hook and use
! ‘get_unnamed_section’ to set up the sections.
  
!  You must always create a ‘text_section’, either by defining
! ‘TEXT_SECTION_ASM_OP’ or by initializing ‘text_section’ in
! ‘TARGET_ASM_INIT_SECTIONS’.  The same is true of ‘data_section’ and
! ‘DATA_SECTION_ASM_OP’.  If you do not create a distinct
! ‘readonly_data_section’, the default is to reuse ‘text_section’.
  
!  All the other ‘varasm.cc’ sections are optional, and are null if the
  target does not provide them.
  
   -- Macro: TEXT_SECTION_ASM_OP
       A C expression whose value is a string, including spacing,
       containing the assembler operation that should precede instructions
!      and read-only data.  Normally ‘"\t.text"’ is right.
  
   -- Macro: HOT_TEXT_SECTION_NAME
       If defined, a C string constant for the name of the section
*************** target does not provide them.
*** 40753,40759 ****
   -- Macro: DATA_SECTION_ASM_OP
       A C expression whose value is a string, including spacing,
       containing the assembler operation to identify the following data
!      as writable initialized data.  Normally '"\t.data"' is right.
  
   -- Macro: SDATA_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
--- 40754,40760 ----
   -- Macro: DATA_SECTION_ASM_OP
       A C expression whose value is a string, including spacing,
       containing the assembler operation to identify the following data
!      as writable initialized data.  Normally ‘"\t.data"’ is right.
  
   -- Macro: SDATA_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
*************** target does not provide them.
*** 40769,40777 ****
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
       following data as uninitialized global data.  If not defined, and
!      'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data
!      will be output in the data section if '-fno-common' is passed,
!      otherwise 'ASM_OUTPUT_COMMON' will be used.
  
   -- Macro: SBSS_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
--- 40770,40778 ----
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
       following data as uninitialized global data.  If not defined, and
!      ‘ASM_OUTPUT_ALIGNED_BSS’ not defined, uninitialized global data
!      will be output in the data section if ‘-fno-common’ is passed,
!      otherwise ‘ASM_OUTPUT_COMMON’ will be used.
  
   -- Macro: SBSS_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
*************** target does not provide them.
*** 40781,40799 ****
   -- Macro: TLS_COMMON_ASM_OP
       If defined, a C expression whose value is a string containing the
       assembler operation to identify the following data as thread-local
!      common data.  The default is '".tls_common"'.
  
   -- Macro: TLS_SECTION_ASM_FLAG
       If defined, a C expression whose value is a character constant
       containing the flag used to mark a section as a TLS section.  The
!      default is ''T''.
  
   -- Macro: INIT_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
       following data as initialization code.  If not defined, GCC will
       assume such a section does not exist.  This section has no
!      corresponding 'init_section' variable; it is used entirely in
       runtime code.
  
   -- Macro: FINI_SECTION_ASM_OP
--- 40782,40800 ----
   -- Macro: TLS_COMMON_ASM_OP
       If defined, a C expression whose value is a string containing the
       assembler operation to identify the following data as thread-local
!      common data.  The default is ‘".tls_common"’.
  
   -- Macro: TLS_SECTION_ASM_FLAG
       If defined, a C expression whose value is a character constant
       containing the flag used to mark a section as a TLS section.  The
!      default is ‘'T'’.
  
   -- Macro: INIT_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
       following data as initialization code.  If not defined, GCC will
       assume such a section does not exist.  This section has no
!      corresponding ‘init_section’ variable; it is used entirely in
       runtime code.
  
   -- Macro: FINI_SECTION_ASM_OP
*************** target does not provide them.
*** 40801,40833 ****
       spacing, containing the assembler operation to identify the
       following data as finalization code.  If not defined, GCC will
       assume such a section does not exist.  This section has no
!      corresponding 'fini_section' variable; it is used entirely in
       runtime code.
  
   -- Macro: INIT_ARRAY_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
!      following data as part of the '.init_array' (or equivalent)
       section.  If not defined, GCC will assume such a section does not
!      exist.  Do not define both this macro and 'INIT_SECTION_ASM_OP'.
  
   -- Macro: FINI_ARRAY_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
!      following data as part of the '.fini_array' (or equivalent)
       section.  If not defined, GCC will assume such a section does not
!      exist.  Do not define both this macro and 'FINI_SECTION_ASM_OP'.
  
   -- Macro: MACH_DEP_SECTION_ASM_FLAG
       If defined, a C expression whose value is a character constant
       containing the flag used to mark a machine-dependent section.  This
!      corresponds to the 'SECTION_MACH_DEP' section flag.
  
   -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
       If defined, an ASM statement that switches to a different section
       via SECTION_OP, calls FUNCTION, and switches back to the text
!      section.  This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or
!      'FINI_SECTION_ASM_OP' to calls to initialization and finalization
       functions from the init and fini sections.  By default, this macro
       uses a simple function call.  Some ports need hand-crafted assembly
       code to avoid dependencies on registers initialized in the function
--- 40802,40834 ----
       spacing, containing the assembler operation to identify the
       following data as finalization code.  If not defined, GCC will
       assume such a section does not exist.  This section has no
!      corresponding ‘fini_section’ variable; it is used entirely in
       runtime code.
  
   -- Macro: INIT_ARRAY_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
!      following data as part of the ‘.init_array’ (or equivalent)
       section.  If not defined, GCC will assume such a section does not
!      exist.  Do not define both this macro and ‘INIT_SECTION_ASM_OP’.
  
   -- Macro: FINI_ARRAY_SECTION_ASM_OP
       If defined, a C expression whose value is a string, including
       spacing, containing the assembler operation to identify the
!      following data as part of the ‘.fini_array’ (or equivalent)
       section.  If not defined, GCC will assume such a section does not
!      exist.  Do not define both this macro and ‘FINI_SECTION_ASM_OP’.
  
   -- Macro: MACH_DEP_SECTION_ASM_FLAG
       If defined, a C expression whose value is a character constant
       containing the flag used to mark a machine-dependent section.  This
!      corresponds to the ‘SECTION_MACH_DEP’ section flag.
  
   -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
       If defined, an ASM statement that switches to a different section
       via SECTION_OP, calls FUNCTION, and switches back to the text
!      section.  This is used in ‘crtstuff.c’ if ‘INIT_SECTION_ASM_OP’ or
!      ‘FINI_SECTION_ASM_OP’ to calls to initialization and finalization
       functions from the init and fini sections.  By default, this macro
       uses a simple function call.  Some ports need hand-crafted assembly
       code to avoid dependencies on registers initialized in the function
*************** target does not provide them.
*** 40840,40861 ****
       when the target has options for optimizing access to small data,
       and you want the crtstuff and libgcc routines to be conservative in
       what they expect of your application yet liberal in what your
!      application expects.  For example, for targets with a '.sdata'
!      section (like MIPS), you could compile crtstuff with '-G 0' so that
       it doesn't require small data support from your application, but
!      use this macro to put small data into '.sdata' so that your
       application can access these variables whether it uses small data
       or not.
  
   -- Macro: FORCE_CODE_SECTION_ALIGN
       If defined, an ASM statement that aligns a code section to some
       arbitrary boundary.  This is used to force all fragments of the
!      '.init' and '.fini' sections to have to same alignment and thus
       prevent the linker from having to add any padding.
  
   -- Macro: JUMP_TABLES_IN_TEXT_SECTION
       Define this macro to be an expression with a nonzero value if jump
!      tables (for 'tablejump' insns) should be output in the text
       section, along with the assembler instructions.  Otherwise, the
       readonly data section is used.
  
--- 40841,40862 ----
       when the target has options for optimizing access to small data,
       and you want the crtstuff and libgcc routines to be conservative in
       what they expect of your application yet liberal in what your
!      application expects.  For example, for targets with a ‘.sdata’
!      section (like MIPS), you could compile crtstuff with ‘-G 0’ so that
       it doesn't require small data support from your application, but
!      use this macro to put small data into ‘.sdata’ so that your
       application can access these variables whether it uses small data
       or not.
  
   -- Macro: FORCE_CODE_SECTION_ALIGN
       If defined, an ASM statement that aligns a code section to some
       arbitrary boundary.  This is used to force all fragments of the
!      ‘.init’ and ‘.fini’ sections to have to same alignment and thus
       prevent the linker from having to add any padding.
  
   -- Macro: JUMP_TABLES_IN_TEXT_SECTION
       Define this macro to be an expression with a nonzero value if jump
!      tables (for ‘tablejump’ insns) should be output in the text
       section, along with the assembler instructions.  Otherwise, the
       readonly data section is used.
  
*************** target does not provide them.
*** 40864,40870 ****
  
   -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
       Define this hook if you need to do something special to set up the
!      'varasm.cc' sections, or if your target has some special sections
       of its own that you need to create.
  
       GCC calls this hook after processing the command line, but before
--- 40865,40871 ----
  
   -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
       Define this hook if you need to do something special to set up the
!      ‘varasm.cc’ sections, or if your target has some special sections
       of its own that you need to create.
  
       GCC calls this hook after processing the command line, but before
*************** target does not provide them.
*** 40877,40883 ****
       should be placed in a read-write section; bit 0 should be set if
       local relocations should be placed in a read-write section.
  
!      The default version of this function returns 3 when '-fpic' 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.
--- 40878,40884 ----
       should be placed in a read-write section; bit 0 should be set if
       local relocations should be placed in a read-write section.
  
!      The default version of this function returns 3 when ‘-fpic’ 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.
*************** target does not provide them.
*** 40892,40940 ****
   -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
            RELOC, unsigned HOST_WIDE_INT ALIGN)
       Return the section into which EXP should be placed.  You can assume
!      that EXP is either a 'VAR_DECL' node or a constant of some sort.
       RELOC indicates whether the initial value of EXP requires link-time
       relocations.  Bit 0 is set when variable contains local relocations
       only, while bit 1 is set for global relocations.  ALIGN is the
       constant alignment in bits.
  
       The default version of this function takes care of putting
!      read-only variables in 'readonly_data_section'.
  
       See also USE_SELECT_SECTION_FOR_FUNCTIONS.
  
   -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
       Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
!      called for 'FUNCTION_DECL's as well as for variables and constants.
  
!      In the case of a 'FUNCTION_DECL', RELOC will be zero if the
       function has been determined to be likely to be called, and nonzero
       if it is unlikely to be called.
  
   -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
!      Build up a unique section name, expressed as a 'STRING_CST' node,
!      and assign it to 'DECL_SECTION_NAME (DECL)'.  As with
!      'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
       value of EXP requires link-time relocations.
  
       The default version of this function appends the symbol name to the
       ELF section name that would normally be used for the symbol.  For
!      example, the function 'foo' would be placed in '.text.foo'.
       Whatever the actual target object format, this is often good
       enough.
  
   -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
            DECL, bool RELOCATABLE)
       Return the readonly data or reloc readonly data section associated
!      with 'DECL_SECTION_NAME (DECL)'.  RELOCATABLE selects the latter
       over the former.  The default version of this function selects
!      '.gnu.linkonce.r.name' if the function's section is
!      '.gnu.linkonce.t.name', '.rodata.name' or '.data.rel.ro.name' if
!      function is in '.text.name', and the normal readonly-data or reloc
       readonly data section otherwise.
  
   -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX
!      Usually, the compiler uses the prefix '".rodata"' to construct
       section names for mergeable constant data.  Define this macro to
       override the string if a different section name should be used.
  
--- 40893,40941 ----
   -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
            RELOC, unsigned HOST_WIDE_INT ALIGN)
       Return the section into which EXP should be placed.  You can assume
!      that EXP is either a ‘VAR_DECL’ node or a constant of some sort.
       RELOC indicates whether the initial value of EXP requires link-time
       relocations.  Bit 0 is set when variable contains local relocations
       only, while bit 1 is set for global relocations.  ALIGN is the
       constant alignment in bits.
  
       The default version of this function takes care of putting
!      read-only variables in ‘readonly_data_section’.
  
       See also USE_SELECT_SECTION_FOR_FUNCTIONS.
  
   -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
       Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
!      called for ‘FUNCTION_DECL’s as well as for variables and constants.
  
!      In the case of a ‘FUNCTION_DECL’, RELOC will be zero if the
       function has been determined to be likely to be called, and nonzero
       if it is unlikely to be called.
  
   -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
!      Build up a unique section name, expressed as a ‘STRING_CST’ node,
!      and assign it to ‘DECL_SECTION_NAME (DECL)’.  As with
!      ‘TARGET_ASM_SELECT_SECTION’, RELOC indicates whether the initial
       value of EXP requires link-time relocations.
  
       The default version of this function appends the symbol name to the
       ELF section name that would normally be used for the symbol.  For
!      example, the function ‘foo’ would be placed in ‘.text.foo’.
       Whatever the actual target object format, this is often good
       enough.
  
   -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
            DECL, bool RELOCATABLE)
       Return the readonly data or reloc readonly data section associated
!      with ‘DECL_SECTION_NAME (DECL)’.  RELOCATABLE selects the latter
       over the former.  The default version of this function selects
!      ‘.gnu.linkonce.r.name’ if the function's section is
!      ‘.gnu.linkonce.t.name’, ‘.rodata.name’ or ‘.data.rel.ro.name’ if
!      function is in ‘.text.name’, and the normal readonly-data or reloc
       readonly data section otherwise.
  
   -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX
!      Usually, the compiler uses the prefix ‘".rodata"’ to construct
       section names for mergeable constant data.  Define this macro to
       override the string if a different section name should be used.
  
*************** target does not provide them.
*** 40946,40965 ****
            MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
       Return the section into which a constant X, of mode MODE, should be
       placed.  You can assume that X is some kind of constant in RTL.
!      The argument MODE is redundant except in the case of a 'const_int'
       rtx.  ALIGN is the constant alignment in bits.
  
       The default version of this function takes care of putting symbolic
!      constants in 'flag_pic' mode in 'data_section' and everything else
!      in 'readonly_data_section'.
  
   -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree
            ID)
       Define this hook if you need to postprocess the assembler name
       generated by target-independent code.  The ID provided to this hook
!      will be the computed name (e.g., the macro 'DECL_NAME' of the DECL
       in C, or the mangled name of the DECL in C++).  The return value of
!      the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name
       on your target system.  The default implementation of this hook
       just returns the ID provided.
  
--- 40947,40966 ----
            MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
       Return the section into which a constant X, of mode MODE, should be
       placed.  You can assume that X is some kind of constant in RTL.
!      The argument MODE is redundant except in the case of a ‘const_int’
       rtx.  ALIGN is the constant alignment in bits.
  
       The default version of this function takes care of putting symbolic
!      constants in ‘flag_pic’ mode in ‘data_section’ and everything else
!      in ‘readonly_data_section’.
  
   -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree
            ID)
       Define this hook if you need to postprocess the assembler name
       generated by target-independent code.  The ID provided to this hook
!      will be the computed name (e.g., the macro ‘DECL_NAME’ of the DECL
       in C, or the mangled name of the DECL in C++).  The return value of
!      the hook is an ‘IDENTIFIER_NODE’ for the appropriate mangled name
       on your target system.  The default implementation of this hook
       just returns the ID provided.
  
*************** target does not provide them.
*** 40972,41009 ****
       The hook is executed immediately after rtl has been created for
       DECL, which may be a variable or function declaration or an entry
       in the constant pool.  In either case, RTL is the rtl in question.
!      Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not
       have been initialized yet.
  
       In the case of a constant, it is safe to assume that the rtl is a
!      'mem' whose address is a 'symbol_ref'.  Most decls will also have
       this form, but that is not guaranteed.  Global register variables,
!      for instance, will have a 'reg' for their rtl.  (Normally the right
       thing to do with such unusual rtl is leave it alone.)
  
       The NEW_DECL_P argument will be true if this is the first time that
!      'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.  It
       will be false for subsequent invocations, which will happen for
       duplicate declarations.  Whether or not anything must be done for
       the duplicate declaration depends on whether the hook examines
!      'DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
       called for a constant.
  
       The usual thing for this hook to do is to record flags in the
!      'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'.
       Historically, the name string was modified if it was necessary to
       encode more than one bit of information, but this practice is now
!      discouraged; use 'SYMBOL_REF_FLAGS'.
  
!      The default definition of this hook, 'default_encode_section_info'
!      in 'varasm.cc', sets a number of commonly-useful bits in
!      'SYMBOL_REF_FLAGS'.  Check whether the default does what you need
       before overriding it.
  
   -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
            *NAME)
       Decode NAME and return the real name part, sans the characters that
!      'TARGET_ENCODE_SECTION_INFO' may have added.
  
   -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
       Returns true if EXP should be placed into a "small data" section.
--- 40973,41010 ----
       The hook is executed immediately after rtl has been created for
       DECL, which may be a variable or function declaration or an entry
       in the constant pool.  In either case, RTL is the rtl in question.
!      Do _not_ use ‘DECL_RTL (DECL)’ in this hook; that field may not
       have been initialized yet.
  
       In the case of a constant, it is safe to assume that the rtl is a
!      ‘mem’ whose address is a ‘symbol_ref’.  Most decls will also have
       this form, but that is not guaranteed.  Global register variables,
!      for instance, will have a ‘reg’ for their rtl.  (Normally the right
       thing to do with such unusual rtl is leave it alone.)
  
       The NEW_DECL_P argument will be true if this is the first time that
!      ‘TARGET_ENCODE_SECTION_INFO’ has been invoked on this decl.  It
       will be false for subsequent invocations, which will happen for
       duplicate declarations.  Whether or not anything must be done for
       the duplicate declaration depends on whether the hook examines
!      ‘DECL_ATTRIBUTES’.  NEW_DECL_P is always true when the hook is
       called for a constant.
  
       The usual thing for this hook to do is to record flags in the
!      ‘symbol_ref’, using ‘SYMBOL_REF_FLAG’ or ‘SYMBOL_REF_FLAGS’.
       Historically, the name string was modified if it was necessary to
       encode more than one bit of information, but this practice is now
!      discouraged; use ‘SYMBOL_REF_FLAGS’.
  
!      The default definition of this hook, ‘default_encode_section_info’
!      in ‘varasm.cc’, sets a number of commonly-useful bits in
!      ‘SYMBOL_REF_FLAGS’.  Check whether the default does what you need
       before overriding it.
  
   -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
            *NAME)
       Decode NAME and return the real name part, sans the characters that
!      ‘TARGET_ENCODE_SECTION_INFO’ may have added.
  
   -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
       Returns true if EXP should be placed into a "small data" section.
*************** target does not provide them.
*** 41018,41024 ****
       prologue.
  
       The default version of this hook use the target macro
!      'PROFILE_BEFORE_PROLOGUE'.
  
   -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
       Returns true if EXP names an object for which name resolution rules
--- 41019,41025 ----
       prologue.
  
       The default version of this hook use the target macro
!      ‘PROFILE_BEFORE_PROLOGUE’.
  
   -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
       Returns true if EXP names an object for which name resolution rules
*************** File: gccint.info,  Node: PIC,  Next: As
*** 41042,41050 ****
  This section describes macros that help implement generation of position
  independent code.  Simply defining these macros is not enough to
  generate valid PIC; you must also add support to the hook
! 'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS',
! as well as 'LEGITIMIZE_ADDRESS'.  You must modify the definition of
! 'movsi' to do something appropriate when the source operand contains a
  symbolic address.  You may also need to alter the handling of switch
  statements so that they use relative addresses.
  
--- 41043,41051 ----
  This section describes macros that help implement generation of position
  independent code.  Simply defining these macros is not enough to
  generate valid PIC; you must also add support to the hook
! ‘TARGET_LEGITIMATE_ADDRESS_P’ and to the macro ‘PRINT_OPERAND_ADDRESS’,
! as well as ‘LEGITIMIZE_ADDRESS’.  You must modify the definition of
! ‘movsi’ to do something appropriate when the source operand contains a
  symbolic address.  You may also need to alter the handling of switch
  statements so that they use relative addresses.
  
*************** statements so that they use relative add
*** 41056,41076 ****
       once, as with the stack pointer and frame pointer registers.  If
       this macro is not defined, it is up to the machine-dependent files
       to allocate such a register (if necessary).  Note that this
!      register must be fixed when in use (e.g. when 'flag_pic' is true).
  
   -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
       A C expression that is nonzero if the register defined by
!      'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  If not defined,
       the default is zero.  Do not define this macro if
!      'PIC_OFFSET_TABLE_REGNUM' is not defined.
  
   -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
       A C expression that is nonzero if X is a legitimate immediate
       operand on the target machine when generating position independent
!      code.  You can assume that X satisfies 'CONSTANT_P', so you need
       not check this.  You can also assume FLAG_PIC is true, so you need
       not check it either.  You need not define this macro if all
!      constants (including 'SYMBOL_REF') can be immediate operands when
       generating position independent code.
  
  
--- 41057,41077 ----
       once, as with the stack pointer and frame pointer registers.  If
       this macro is not defined, it is up to the machine-dependent files
       to allocate such a register (if necessary).  Note that this
!      register must be fixed when in use (e.g. when ‘flag_pic’ is true).
  
   -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
       A C expression that is nonzero if the register defined by
!      ‘PIC_OFFSET_TABLE_REGNUM’ is clobbered by calls.  If not defined,
       the default is zero.  Do not define this macro if
!      ‘PIC_OFFSET_TABLE_REGNUM’ is not defined.
  
   -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
       A C expression that is nonzero if X is a legitimate immediate
       operand on the target machine when generating position independent
!      code.  You can assume that X satisfies ‘CONSTANT_P’, so you need
       not check this.  You can also assume FLAG_PIC is true, so you need
       not check it either.  You need not define this macro if all
!      constants (including ‘SYMBOL_REF’) can be immediate operands when
       generating position independent code.
  
  
*************** File: gccint.info,  Node: File Framework
*** 41108,41126 ****
  This describes the overall framework of an assembly file.
  
   -- Target Hook: void TARGET_ASM_FILE_START (void)
!      Output to '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 quite unusual, if you override the default, you should
!      call 'default_file_start' at some point in your target hook.  This
       lets other target files rely on these variables.
  
   -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
!      If this flag is true, the text of the macro 'ASM_APP_OFF' will be
       printed as the very first line in the assembly file, unless
!      '-fverbose-asm' is in effect.  (If that macro has been defined to
       the empty string, this variable has no effect.)  With the normal
!      definition of 'ASM_APP_OFF', the effect is to notify the GNU
       assembler that it need not bother stripping comments or extra
       whitespace from its input.  This allows it to work a bit faster.
  
--- 41109,41127 ----
  This describes the overall framework of an assembly file.
  
   -- Target Hook: void TARGET_ASM_FILE_START (void)
!      Output to ‘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 quite unusual, if you override the default, you should
!      call ‘default_file_start’ at some point in your target hook.  This
       lets other target files rely on these variables.
  
   -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
!      If this flag is true, the text of the macro ‘ASM_APP_OFF’ will be
       printed as the very first line in the assembly file, unless
!      ‘-fverbose-asm’ is in effect.  (If that macro has been defined to
       the empty string, this variable has no effect.)  With the normal
!      definition of ‘ASM_APP_OFF’, the effect is to notify the GNU
       assembler that it need not bother stripping comments or extra
       whitespace from its input.  This allows it to work a bit faster.
  
*************** This describes the overall framework of
*** 41129,41163 ****
       or comments that will cause GAS to issue errors in NO_APP mode.
  
   -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
!      If this flag is true, 'output_file_directive' will be called for
!      the primary source file, immediately after printing 'ASM_APP_OFF'
       (if that is enabled).  Most ELF assemblers expect this to be done.
       The default is false.
  
   -- Target Hook: void TARGET_ASM_FILE_END (void)
!      Output to 'asm_out_file' any text which the assembler expects to
       find at the end of a file.  The default is to output nothing.
  
   -- Function: void file_end_indicate_exec_stack ()
!      Some systems use a common convention, the '.note.GNU-stack' special
       section, to indicate whether or not an object file relies on the
       stack being executable.  If your system uses this convention, you
!      should define 'TARGET_ASM_FILE_END' to this function.  If you need
       to do other things in that hook, have your hook function call this
       function.
  
   -- Target Hook: void TARGET_ASM_LTO_START (void)
!      Output to 'asm_out_file' any text which the assembler expects to
       find at the start of an LTO section.  The default is to output
       nothing.
  
   -- Target Hook: void TARGET_ASM_LTO_END (void)
!      Output to 'asm_out_file' any text which the assembler expects to
       find at the end of an LTO section.  The default is to output
       nothing.
  
   -- Target Hook: void TARGET_ASM_CODE_END (void)
!      Output to '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
--- 41130,41164 ----
       or comments that will cause GAS to issue errors in NO_APP mode.
  
   -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
!      If this flag is true, ‘output_file_directive’ will be called for
!      the primary source file, immediately after printing ‘ASM_APP_OFF’
       (if that is enabled).  Most ELF assemblers expect this to be done.
       The default is false.
  
   -- Target Hook: void TARGET_ASM_FILE_END (void)
!      Output to ‘asm_out_file’ any text which the assembler expects to
       find at the end of a file.  The default is to output nothing.
  
   -- Function: void file_end_indicate_exec_stack ()
!      Some systems use a common convention, the ‘.note.GNU-stack’ special
       section, to indicate whether or not an object file relies on the
       stack being executable.  If your system uses this convention, you
!      should define ‘TARGET_ASM_FILE_END’ to this function.  If you need
       to do other things in that hook, have your hook function call this
       function.
  
   -- Target Hook: void TARGET_ASM_LTO_START (void)
!      Output to ‘asm_out_file’ any text which the assembler expects to
       find at the start of an LTO section.  The default is to output
       nothing.
  
   -- Target Hook: void TARGET_ASM_LTO_END (void)
!      Output to ‘asm_out_file’ any text which the assembler expects to
       find at the end of an LTO section.  The default is to output
       nothing.
  
   -- Target Hook: void TARGET_ASM_CODE_END (void)
!      Output to ‘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
*************** This describes the overall framework of
*** 41169,41184 ****
       at the end of the line.
  
   -- Macro: ASM_APP_ON
!      A C string constant for text to be output before each 'asm'
!      statement or group of consecutive ones.  Normally this is '"#APP"',
       which is a comment that has no effect on most assemblers but tells
       the GNU assembler that it must check the lines that follow for all
       valid assembler constructs.
  
   -- Macro: ASM_APP_OFF
!      A C string constant for text to be output after each 'asm'
       statement or group of consecutive ones.  Normally this is
!      '"#NO_APP"', which tells the GNU assembler to resume making the
       time-saving assumptions that are valid for ordinary compiler
       output.
  
--- 41170,41185 ----
       at the end of the line.
  
   -- Macro: ASM_APP_ON
!      A C string constant for text to be output before each ‘asm’
!      statement or group of consecutive ones.  Normally this is ‘"#APP"’,
       which is a comment that has no effect on most assemblers but tells
       the GNU assembler that it must check the lines that follow for all
       valid assembler constructs.
  
   -- Macro: ASM_APP_OFF
!      A C string constant for text to be output after each ‘asm’
       statement or group of consecutive ones.  Normally this is
!      ‘"#NO_APP"’, which tells the GNU assembler to resume making the
       time-saving assumptions that are valid for ordinary compiler
       output.
  
*************** This describes the overall framework of
*** 41199,41212 ****
       for the file format in use is appropriate.
  
   -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME)
!      Output a string based on NAME, suitable for the '#ident' directive,
       or the equivalent directive or pragma in non-C-family languages.
!      If this hook is not defined, nothing is output for the '#ident'
       directive.
  
   -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
       A C statement to output the string STRING to the stdio stream
!      STREAM.  If you do not call the function 'output_quoted_string' in
       your config files, GCC will only call it to output filenames to the
       assembler source.  So you can use it to canonicalize the format of
       the filename using this macro.
--- 41200,41213 ----
       for the file format in use is appropriate.
  
   -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME)
!      Output a string based on NAME, suitable for the ‘#ident’ directive,
       or the equivalent directive or pragma in non-C-family languages.
!      If this hook is not defined, nothing is output for the ‘#ident’
       directive.
  
   -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
       A C statement to output the string STRING to the stdio stream
!      STREAM.  If you do not call the function ‘output_quoted_string’ in
       your config files, GCC will only call it to output filenames to the
       assembler source.  So you can use it to canonicalize the format of
       the filename using this macro.
*************** This describes the overall framework of
*** 41215,41229 ****
            unsigned int FLAGS, tree DECL)
       Output assembly directives to switch to section NAME.  The section
       should have attributes as specified by FLAGS, which is a bit mask
!      of the 'SECTION_*' flags defined in 'output.h'.  If DECL is
!      non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this
       section is associated.
  
   -- Target Hook: bool TARGET_ASM_ELF_FLAGS_NUMERIC (unsigned int FLAGS,
            unsigned int *NUM)
       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
!      'default_asm_named_section' whenever the section flags need to be
       emitted in the assembler output.  If the hook returns true, then
       the numerical value for ELF section flags should be calculated from
       FLAGS and saved in *NUM; the value is printed out instead of the
--- 41216,41230 ----
            unsigned int FLAGS, tree DECL)
       Output assembly directives to switch to section NAME.  The section
       should have attributes as specified by FLAGS, which is a bit mask
!      of the ‘SECTION_*’ flags defined in ‘output.h’.  If DECL is
!      non-NULL, it is the ‘VAR_DECL’ or ‘FUNCTION_DECL’ with which this
       section is associated.
  
   -- Target Hook: bool TARGET_ASM_ELF_FLAGS_NUMERIC (unsigned int FLAGS,
            unsigned int *NUM)
       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
!      ‘default_asm_named_section’ whenever the section flags need to be
       emitted in the assembler output.  If the hook returns true, then
       the numerical value for ELF section flags should be calculated from
       FLAGS and saved in *NUM; the value is printed out instead of the
*************** This describes the overall framework of
*** 41236,41242 ****
       Return preferred text (sub)section for function DECL.  Main purpose
       of this function is to separate cold, normal and hot functions.
       STARTUP is true when function is known to be used only at startup
!      (from static constructors or it is 'main()').  EXIT is true when
       function is known to be used only at exit (from static
       destructors).  Return NULL if function should go to default text
       section.
--- 41237,41243 ----
       Return preferred text (sub)section for function DECL.  Main purpose
       of this function is to separate cold, normal and hot functions.
       STARTUP is true when function is known to be used only at startup
!      (from static constructors or it is ‘main()’).  EXIT is true when
       function is known to be used only at exit (from static
       destructors).  Return NULL if function should go to default text
       section.
*************** This describes the overall framework of
*** 41247,41276 ****
       labels needed when a function is partitioned between different
       sections.  Output should be written to FILE.  The function decl is
       available as DECL and the new section is 'cold' if NEW_IS_COLD is
!      'true'.
  
   -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
       This flag is true if the target supports
!      'TARGET_ASM_NAMED_SECTION'.  It must not be modified by
       command-line option processing.
  
   -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
       This flag is true if we can create zeroed data by switching to a
!      BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space.
       This is true on most ELF targets.
  
   -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
            const char *NAME, int RELOC)
       Choose a set of section attributes for use by
!      '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.  DECL may be null, in which case
       read-write data should be assumed.
  
       The default version of this function handles choosing code vs data,
!      read-only vs read-write data, and 'flag_pic'.  You should only need
       to override this if your target has special flags that might be set
!      via '__attribute__'.
  
   -- Target Hook: void TARGET_ASM_RECORD_GCC_SWITCHES (const char *)
       Provides the target with the ability to record the gcc command line
--- 41248,41277 ----
       labels needed when a function is partitioned between different
       sections.  Output should be written to FILE.  The function decl is
       available as DECL and the new section is 'cold' if NEW_IS_COLD is
!      ‘true’.
  
   -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
       This flag is true if the target supports
!      ‘TARGET_ASM_NAMED_SECTION’.  It must not be modified by
       command-line option processing.
  
   -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
       This flag is true if we can create zeroed data by switching to a
!      BSS section and then using ‘ASM_OUTPUT_SKIP’ to allocate the space.
       This is true on most ELF targets.
  
   -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
            const char *NAME, int RELOC)
       Choose a set of section attributes for use by
!      ‘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.  DECL may be null, in which case
       read-write data should be assumed.
  
       The default version of this function handles choosing code vs data,
!      read-only vs read-write data, and ‘flag_pic’.  You should only need
       to override this if your target has special flags that might be set
!      via ‘__attribute__’.
  
   -- Target Hook: void TARGET_ASM_RECORD_GCC_SWITCHES (const char *)
       Provides the target with the ability to record the gcc command line
*************** This describes the overall framework of
*** 41281,41291 ****
       it records the switches as ASCII text inside a new, string
       mergeable section in the assembler output file.  The name of the
       new section is provided by the
!      'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
  
   -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
       This is the name of the section that will be created by the example
!      ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target
       hook.
  
  
--- 41282,41292 ----
       it records the switches as ASCII text inside a new, string
       mergeable section in the assembler output file.  The name of the
       new section is provided by the
!      ‘TARGET_ASM_RECORD_GCC_SWITCHES_SECTION’ target hook.
  
   -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
       This is the name of the section that will be created by the example
!      ELF implementation of the ‘TARGET_ASM_RECORD_GCC_SWITCHES’ target
       hook.
  
  
*************** File: gccint.info,  Node: Data Output,
*** 41310,41319 ****
   -- Target Hook: const char * TARGET_ASM_UNALIGNED_PTI_OP
   -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
       These hooks specify assembly directives for creating certain kinds
!      of integer object.  The 'TARGET_ASM_BYTE_OP' directive creates a
!      byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an
       aligned two-byte object, and so on.  Any of the hooks may be
!      'NULL', indicating that no suitable directive is available.
  
       The compiler will print these strings at the start of a new line,
       followed immediately by the object's initial value.  In most cases,
--- 41311,41320 ----
   -- Target Hook: const char * TARGET_ASM_UNALIGNED_PTI_OP
   -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
       These hooks specify assembly directives for creating certain kinds
!      of integer object.  The ‘TARGET_ASM_BYTE_OP’ directive creates a
!      byte-sized object, the ‘TARGET_ASM_ALIGNED_HI_OP’ one creates an
       aligned two-byte object, and so on.  Any of the hooks may be
!      ‘NULL’, indicating that no suitable directive is available.
  
       The compiler will print these strings at the start of a new line,
       followed immediately by the object's initial value.  In most cases,
*************** File: gccint.info,  Node: Data Output,
*** 41321,41336 ****
  
   -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
            ALIGNED_P)
!      The 'assemble_integer' function uses this hook to output an integer
       object.  X is the object's value, SIZE is its size in bytes and
       ALIGNED_P indicates whether it is aligned.  The function should
!      return 'true' if it was able to output the object.  If it returns
!      false, 'assemble_integer' will try to split the object into smaller
       parts.
  
       The default implementation of this hook will use the
!      'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the
!      relevant string is 'NULL'.
  
   -- Target Hook: void TARGET_ASM_DECL_END (void)
       Define this hook if the target assembler requires a special marker
--- 41322,41337 ----
  
   -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
            ALIGNED_P)
!      The ‘assemble_integer’ function uses this hook to output an integer
       object.  X is the object's value, SIZE is its size in bytes and
       ALIGNED_P indicates whether it is aligned.  The function should
!      return ‘true’ if it was able to output the object.  If it returns
!      false, ‘assemble_integer’ will try to split the object into smaller
       parts.
  
       The default implementation of this hook will use the
!      ‘TARGET_ASM_BYTE_OP’ family of strings, returning ‘false’ when the
!      relevant string is ‘NULL’.
  
   -- Target Hook: void TARGET_ASM_DECL_END (void)
       Define this hook if the target assembler requires a special marker
*************** File: gccint.info,  Node: Data Output,
*** 41338,41365 ****
  
   -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
            rtx X)
!      A target hook to recognize RTX patterns that 'output_addr_const'
       can't deal with, and output assembly code to FILE corresponding to
       the pattern X.  This may be used to allow machine-dependent
!      'UNSPEC's to appear within constants.
  
       If target hook fails to recognize a pattern, it must return
!      'false', so that a standard error message is printed.  If it prints
       an error message itself, by calling, for example,
!      'output_operand_lossage', it may just return 'true'.
  
   -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
       A C statement to output to the stdio stream STREAM an assembler
       instruction to assemble a string constant containing the LEN bytes
!      at PTR.  PTR will be a C expression of type 'char *' and LEN a C
!      expression of type 'int'.
  
!      If the assembler has a '.ascii' pseudo-op as found in the Berkeley
!      Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'.
  
   -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
       A C statement to output word N of a function descriptor for DECL.
!      This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is
       defined, and is otherwise unused.
  
   -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
--- 41339,41366 ----
  
   -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
            rtx X)
!      A target hook to recognize RTX patterns that ‘output_addr_const’
       can't deal with, and output assembly code to FILE corresponding to
       the pattern X.  This may be used to allow machine-dependent
!      ‘UNSPEC’s to appear within constants.
  
       If target hook fails to recognize a pattern, it must return
!      ‘false’, so that a standard error message is printed.  If it prints
       an error message itself, by calling, for example,
!      ‘output_operand_lossage’, it may just return ‘true’.
  
   -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
       A C statement to output to the stdio stream STREAM an assembler
       instruction to assemble a string constant containing the LEN bytes
!      at PTR.  PTR will be a C expression of type ‘char *’ and LEN a C
!      expression of type ‘int’.
  
!      If the assembler has a ‘.ascii’ pseudo-op as found in the Berkeley
!      Unix assembler, do not define the macro ‘ASM_OUTPUT_ASCII’.
  
   -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
       A C statement to output word N of a function descriptor for DECL.
!      This must be defined if ‘TARGET_VTABLE_USES_DESCRIPTORS’ is
       defined, and is otherwise unused.
  
   -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
*************** File: gccint.info,  Node: Data Output,
*** 41389,41395 ****
  
       The argument FILE is the standard I/O stream to output the
       assembler code on.  X is the RTL expression for the constant to
!      output, and MODE is the machine mode (in case X is a 'const_int').
       ALIGN is the required alignment for the value X; you should output
       an assembler directive to force this much alignment.
  
--- 41390,41396 ----
  
       The argument FILE is the standard I/O stream to output the
       assembler code on.  X is the RTL expression for the constant to
!      output, and MODE is the machine mode (in case X is a ‘const_int’).
       ALIGN is the required alignment for the value X; you should output
       an assembler directive to force this much alignment.
  
*************** File: gccint.info,  Node: Data Output,
*** 41401,41407 ****
            (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO);
  
       When you output a pool entry specially, you should end with a
!      'goto' to the label JUMPTO.  This will prevent the same pool entry
       from being output a second time in the usual manner.
  
       You need not define this macro if it would do nothing.
--- 41402,41408 ----
            (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO);
  
       When you output a pool entry specially, you should end with a
!      ‘goto’ to the label JUMPTO.  This will prevent the same pool entry
       from being output a second time in the usual manner.
  
       You need not define this macro if it would do nothing.
*************** File: gccint.info,  Node: Data Output,
*** 41424,41430 ****
       line separator uses multiple characters.
  
       If you do not define this macro, the default is that only the
!      character ';' is treated as a logical line separator.
  
   -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
   -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
--- 41425,41431 ----
       line separator uses multiple characters.
  
       If you do not define this macro, the default is that only the
!      character ‘;’ is treated as a logical line separator.
  
   -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
   -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
*************** File: gccint.info,  Node: Data Output,
*** 41433,41440 ****
       overridden, they default to normal parentheses, which is correct
       for most assemblers.
  
!  These macros are provided by 'real.h' for writing the definitions of
! 'ASM_OUTPUT_DOUBLE' and the like:
  
   -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
   -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
--- 41434,41441 ----
       overridden, they default to normal parentheses, which is correct
       for most assemblers.
  
!  These macros are provided by ‘real.h’ for writing the definitions of
! ‘ASM_OUTPUT_DOUBLE’ and the like:
  
   -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
   -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
*************** File: gccint.info,  Node: Data Output,
*** 41442,41460 ****
   -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
   -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
   -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
!      These translate X, of type 'REAL_VALUE_TYPE', to the target's
       floating point representation, and store its bit pattern in the
!      variable L.  For 'REAL_VALUE_TO_TARGET_SINGLE' and
!      'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
!      'long int'.  For the others, it should be an array of 'long int'.
       The number of elements in this array is determined by the size of
       the desired target floating point data type: 32 bits of it go in
!      each 'long int' array element.  Each array element holds 32 bits of
!      the result, even if 'long int' is wider than 32 bits on the host
       machine.
  
       The array element values are designed so that you can print them
!      out using 'fprintf' in the order they should appear in the target
       machine's memory.
  
  
--- 41443,41461 ----
   -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
   -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
   -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
!      These translate X, of type ‘REAL_VALUE_TYPE’, to the target's
       floating point representation, and store its bit pattern in the
!      variable L.  For ‘REAL_VALUE_TO_TARGET_SINGLE’ and
!      ‘REAL_VALUE_TO_TARGET_DECIMAL32’, this variable should be a simple
!      ‘long int’.  For the others, it should be an array of ‘long int’.
       The number of elements in this array is determined by the size of
       the desired target floating point data type: 32 bits of it go in
!      each ‘long int’ array element.  Each array element holds 32 bits of
!      the result, even if ‘long int’ is wider than 32 bits on the host
       machine.
  
       The array element values are designed so that you can print them
!      out using ‘fprintf’ in the order they should appear in the target
       machine's memory.
  
  
*************** outputting a single uninitialized variab
*** 41479,41485 ****
       the concept of a zero-sized common symbol, as that is how they
       represent an ordinary undefined external.
  
!      Use the expression 'assemble_name (STREAM, NAME)' to output the
       name itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.
  
--- 41480,41486 ----
       the concept of a zero-sized common symbol, as that is how they
       represent an ordinary undefined external.
  
!      Use the expression ‘assemble_name (STREAM, NAME)’ to output the
       name itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.
  
*************** outputting a single uninitialized variab
*** 41487,41505 ****
       common global variables are output.
  
   -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
!      Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a
       separate, explicit argument.  If you define this macro, it is used
!      in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in
       handling the required alignment of the variable.  The alignment is
       specified as the number of bits.
  
   -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
            ALIGNMENT)
!      Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
!      to be output, if there is one, or 'NULL_TREE' if there is no
       corresponding variable.  If you define this macro, GCC will use it
!      in place of both 'ASM_OUTPUT_COMMON' and
!      'ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
       see the variable's decl in order to chose what to output.
  
   -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
--- 41488,41506 ----
       common global variables are output.
  
   -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
!      Like ‘ASM_OUTPUT_COMMON’ except takes the required alignment as a
       separate, explicit argument.  If you define this macro, it is used
!      in place of ‘ASM_OUTPUT_COMMON’, and gives you more flexibility in
       handling the required alignment of the variable.  The alignment is
       specified as the number of bits.
  
   -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
            ALIGNMENT)
!      Like ‘ASM_OUTPUT_ALIGNED_COMMON’ except that DECL of the variable
!      to be output, if there is one, or ‘NULL_TREE’ if there is no
       corresponding variable.  If you define this macro, GCC will use it
!      in place of both ‘ASM_OUTPUT_COMMON’ and
!      ‘ASM_OUTPUT_ALIGNED_COMMON’.  Define this macro when you need to
       see the variable's decl in order to chose what to output.
  
   -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
*************** outputting a single uninitialized variab
*** 41508,41526 ****
       whose size is SIZE bytes.  The variable ALIGNMENT is the alignment
       specified as the number of bits.
  
!      Try to use function 'asm_output_aligned_bss' defined in file
!      'varasm.cc' when defining this macro.  If unable, use the
!      expression 'assemble_name (STREAM, NAME)' to output the name
       itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.
  
       There are two ways of handling global BSS.  One is to define this
!      macro.  The other is to have 'TARGET_ASM_SELECT_SECTION' return a
       switchable BSS section (*note
       TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
       both.
  
!      Some languages do not have 'common' data, and require a non-common
       form of global BSS in order to handle uninitialized globals
       efficiently.  C++ is one example of this.  However, if the target
       does not support global BSS, the front end may choose to make
--- 41509,41527 ----
       whose size is SIZE bytes.  The variable ALIGNMENT is the alignment
       specified as the number of bits.
  
!      Try to use function ‘asm_output_aligned_bss’ defined in file
!      ‘varasm.cc’ when defining this macro.  If unable, use the
!      expression ‘assemble_name (STREAM, NAME)’ to output the name
       itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.
  
       There are two ways of handling global BSS.  One is to define this
!      macro.  The other is to have ‘TARGET_ASM_SELECT_SECTION’ return a
       switchable BSS section (*note
       TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
       both.
  
!      Some languages do not have ‘common’ data, and require a non-common
       form of global BSS in order to handle uninitialized globals
       efficiently.  C++ is one example of this.  However, if the target
       does not support global BSS, the front end may choose to make
*************** outputting a single uninitialized variab
*** 41532,41538 ****
       size is SIZE bytes.  The variable ROUNDED is the size rounded up to
       whatever alignment the caller wants.
  
!      Use the expression 'assemble_name (STREAM, NAME)' to output the
       name itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.
  
--- 41533,41539 ----
       size is SIZE bytes.  The variable ROUNDED is the size rounded up to
       whatever alignment the caller wants.
  
!      Use the expression ‘assemble_name (STREAM, NAME)’ to output the
       name itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.
  
*************** outputting a single uninitialized variab
*** 41540,41557 ****
       static variables are output.
  
   -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
!      Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a
       separate, explicit argument.  If you define this macro, it is used
!      in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in
       handling the required alignment of the variable.  The alignment is
       specified as the number of bits.
  
   -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
            ALIGNMENT)
!      Like 'ASM_OUTPUT_ALIGNED_LOCAL' except that DECL of the variable to
!      be output, if there is one, or 'NULL_TREE' if there is no
       corresponding variable.  If you define this macro, GCC will use it
!      in place of both 'ASM_OUTPUT_LOCAL' and 'ASM_OUTPUT_ALIGNED_LOCAL'.
       Define this macro when you need to see the variable's decl in order
       to chose what to output.
  
--- 41541,41558 ----
       static variables are output.
  
   -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
!      Like ‘ASM_OUTPUT_LOCAL’ except takes the required alignment as a
       separate, explicit argument.  If you define this macro, it is used
!      in place of ‘ASM_OUTPUT_LOCAL’, and gives you more flexibility in
       handling the required alignment of the variable.  The alignment is
       specified as the number of bits.
  
   -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
            ALIGNMENT)
!      Like ‘ASM_OUTPUT_ALIGNED_LOCAL’ except that DECL of the variable to
!      be output, if there is one, or ‘NULL_TREE’ if there is no
       corresponding variable.  If you define this macro, GCC will use it
!      in place of both ‘ASM_OUTPUT_LOCAL’ and ‘ASM_OUTPUT_ALIGNED_LOCAL’.
       Define this macro when you need to see the variable's decl in order
       to chose what to output.
  
*************** This is about outputting labels.
*** 41566,41572 ****
   -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       the assembler definition of a label named NAME.  Use the expression
!      'assemble_name (STREAM, NAME)' to output the name itself; before
       and after that, output the additional assembler syntax for defining
       the name, and a newline.  A default definition of this macro is
       provided which is correct for most systems.
--- 41567,41573 ----
   -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       the assembler definition of a label named NAME.  Use the expression
!      ‘assemble_name (STREAM, NAME)’ to output the name itself; before
       and after that, output the additional assembler syntax for defining
       the name, and a newline.  A default definition of this macro is
       provided which is correct for most systems.
*************** This is about outputting labels.
*** 41574,41609 ****
   -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       the assembler definition of a label named NAME of a function.  Use
!      the expression 'assemble_name (STREAM, NAME)' to output the name
       itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.  A default definition
       of this macro is provided which is correct for most systems.
  
       If this macro is not defined, then the function name is defined in
!      the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').
  
   -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
!      Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer
       to a compiler-generated label.  The default definition uses
!      'assemble_name_raw', which is like 'assemble_name' except that it
       is more efficient.
  
   -- Macro: SIZE_ASM_OP
       A C string containing the appropriate assembler directive to
       specify the size of a symbol, without any arguments.  On systems
!      that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"';
       on other systems, the default is not to define this macro.
  
       Define this macro only if it is correct to use the default
!      definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and
!      'ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
       custom definitions of those macros, or if you do not need explicit
       symbol sizes at all, do not define this macro.
  
   -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       a directive telling the assembler that the size of the symbol NAME
!      is SIZE.  SIZE is a 'HOST_WIDE_INT'.  If you define 'SIZE_ASM_OP',
       a default definition of this macro is provided.
  
   -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
--- 41575,41610 ----
   -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       the assembler definition of a label named NAME of a function.  Use
!      the expression ‘assemble_name (STREAM, NAME)’ to output the name
       itself; before and after that, output the additional assembler
       syntax for defining the name, and a newline.  A default definition
       of this macro is provided which is correct for most systems.
  
       If this macro is not defined, then the function name is defined in
!      the usual manner as a label (by means of ‘ASM_OUTPUT_LABEL’).
  
   -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
!      Identical to ‘ASM_OUTPUT_LABEL’, except that NAME is known to refer
       to a compiler-generated label.  The default definition uses
!      ‘assemble_name_raw’, which is like ‘assemble_name’ except that it
       is more efficient.
  
   -- Macro: SIZE_ASM_OP
       A C string containing the appropriate assembler directive to
       specify the size of a symbol, without any arguments.  On systems
!      that use ELF, the default (in ‘config/elfos.h’) is ‘"\t.size\t"’;
       on other systems, the default is not to define this macro.
  
       Define this macro only if it is correct to use the default
!      definitions of ‘ASM_OUTPUT_SIZE_DIRECTIVE’ and
!      ‘ASM_OUTPUT_MEASURED_SIZE’ for your system.  If you need your own
       custom definitions of those macros, or if you do not need explicit
       symbol sizes at all, do not define this macro.
  
   -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       a directive telling the assembler that the size of the symbol NAME
!      is SIZE.  SIZE is a ‘HOST_WIDE_INT’.  If you define ‘SIZE_ASM_OP’,
       a default definition of this macro is provided.
  
   -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
*************** This is about outputting labels.
*** 41611,41655 ****
       a directive telling the assembler to calculate the size of the
       symbol NAME by subtracting its address from the current address.
  
!      If you define 'SIZE_ASM_OP', a default definition of this macro is
       provided.  The default assumes that the assembler recognizes a
!      special '.' symbol as referring to the current address, and can
       calculate the difference between this and another symbol.  If your
!      assembler does not recognize '.' or cannot do calculations with it,
!      you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some
       other technique.
  
   -- Macro: NO_DOLLAR_IN_LABEL
       Define this macro if the assembler does not accept the character
!      '$' in label names.  By default constructors and destructors in G++
!      have '$' in the identifiers.  If this macro is defined, '.' is used
       instead.
  
   -- Macro: NO_DOT_IN_LABEL
       Define this macro if the assembler does not accept the character
!      '.' in label names.  By default constructors and destructors in G++
!      have names that use '.'.  If this macro is defined, these names are
!      rewritten to avoid '.'.
  
   -- Macro: TYPE_ASM_OP
       A C string containing the appropriate assembler directive to
       specify the type of a symbol, without any arguments.  On systems
!      that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"';
       on other systems, the default is not to define this macro.
  
       Define this macro only if it is correct to use the default
!      definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
       need your own custom definition of this macro, or if you do not
       need explicit symbol types at all, do not define this macro.
  
   -- Macro: TYPE_OPERAND_FMT
!      A C string which specifies (using 'printf' syntax) the format of
!      the second operand to 'TYPE_ASM_OP'.  On systems that use ELF, the
!      default (in 'config/elfos.h') is '"@%s"'; on other systems, the
       default is not to define this macro.
  
       Define this macro only if it is correct to use the default
!      definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
       need your own custom definition of this macro, or if you do not
       need explicit symbol types at all, do not define this macro.
  
--- 41612,41656 ----
       a directive telling the assembler to calculate the size of the
       symbol NAME by subtracting its address from the current address.
  
!      If you define ‘SIZE_ASM_OP’, a default definition of this macro is
       provided.  The default assumes that the assembler recognizes a
!      special ‘.’ symbol as referring to the current address, and can
       calculate the difference between this and another symbol.  If your
!      assembler does not recognize ‘.’ or cannot do calculations with it,
!      you will need to redefine ‘ASM_OUTPUT_MEASURED_SIZE’ to use some
       other technique.
  
   -- Macro: NO_DOLLAR_IN_LABEL
       Define this macro if the assembler does not accept the character
!      ‘$’ in label names.  By default constructors and destructors in G++
!      have ‘$’ in the identifiers.  If this macro is defined, ‘.’ is used
       instead.
  
   -- Macro: NO_DOT_IN_LABEL
       Define this macro if the assembler does not accept the character
!      ‘.’ in label names.  By default constructors and destructors in G++
!      have names that use ‘.’.  If this macro is defined, these names are
!      rewritten to avoid ‘.’.
  
   -- Macro: TYPE_ASM_OP
       A C string containing the appropriate assembler directive to
       specify the type of a symbol, without any arguments.  On systems
!      that use ELF, the default (in ‘config/elfos.h’) is ‘"\t.type\t"’;
       on other systems, the default is not to define this macro.
  
       Define this macro only if it is correct to use the default
!      definition of ‘ASM_OUTPUT_TYPE_DIRECTIVE’ for your system.  If you
       need your own custom definition of this macro, or if you do not
       need explicit symbol types at all, do not define this macro.
  
   -- Macro: TYPE_OPERAND_FMT
!      A C string which specifies (using ‘printf’ syntax) the format of
!      the second operand to ‘TYPE_ASM_OP’.  On systems that use ELF, the
!      default (in ‘config/elfos.h’) is ‘"@%s"’; on other systems, the
       default is not to define this macro.
  
       Define this macro only if it is correct to use the default
!      definition of ‘ASM_OUTPUT_TYPE_DIRECTIVE’ for your system.  If you
       need your own custom definition of this macro, or if you do not
       need explicit symbol types at all, do not define this macro.
  
*************** This is about outputting labels.
*** 41657,41694 ****
       A C statement (sans semicolon) to output to the stdio stream STREAM
       a directive telling the assembler that the type of the symbol NAME
       is TYPE.  TYPE is a C string; currently, that string is always
!      either '"function"' or '"object"', but you should not count on
       this.
  
!      If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default
       definition of this macro is provided.
  
   -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       any text necessary for declaring the name NAME of a function which
       is being defined.  This macro is responsible for outputting the
!      label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL').  The
!      argument DECL is the 'FUNCTION_DECL' tree node representing the
       function.
  
       If this macro is not defined, then the function name is defined in
       the usual manner as a label (by means of
!      'ASM_OUTPUT_FUNCTION_LABEL').
  
!      You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
       of this macro.
  
   -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       any text necessary for declaring the size of a function which is
       being defined.  The argument NAME is the name of the function.  The
!      argument DECL is the 'FUNCTION_DECL' tree node representing the
       function.
  
       If this macro is not defined, then the function size is not
       defined.
  
!      You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
       this macro.
  
   -- Macro: ASM_DECLARE_COLD_FUNCTION_NAME (STREAM, NAME, DECL)
--- 41658,41695 ----
       A C statement (sans semicolon) to output to the stdio stream STREAM
       a directive telling the assembler that the type of the symbol NAME
       is TYPE.  TYPE is a C string; currently, that string is always
!      either ‘"function"’ or ‘"object"’, but you should not count on
       this.
  
!      If you define ‘TYPE_ASM_OP’ and ‘TYPE_OPERAND_FMT’, a default
       definition of this macro is provided.
  
   -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       any text necessary for declaring the name NAME of a function which
       is being defined.  This macro is responsible for outputting the
!      label definition (perhaps using ‘ASM_OUTPUT_FUNCTION_LABEL’).  The
!      argument DECL is the ‘FUNCTION_DECL’ tree node representing the
       function.
  
       If this macro is not defined, then the function name is defined in
       the usual manner as a label (by means of
!      ‘ASM_OUTPUT_FUNCTION_LABEL’).
  
!      You may wish to use ‘ASM_OUTPUT_TYPE_DIRECTIVE’ in the definition
       of this macro.
  
   -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       any text necessary for declaring the size of a function which is
       being defined.  The argument NAME is the name of the function.  The
!      argument DECL is the ‘FUNCTION_DECL’ tree node representing the
       function.
  
       If this macro is not defined, then the function size is not
       defined.
  
!      You may wish to use ‘ASM_OUTPUT_MEASURED_SIZE’ in the definition of
       this macro.
  
   -- Macro: ASM_DECLARE_COLD_FUNCTION_NAME (STREAM, NAME, DECL)
*************** This is about outputting labels.
*** 41696,41709 ****
       any text necessary for declaring the name NAME of a cold function
       partition which is being defined.  This macro is responsible for
       outputting the label definition (perhaps using
!      'ASM_OUTPUT_FUNCTION_LABEL').  The argument DECL is the
!      'FUNCTION_DECL' tree node representing the function.
  
       If this macro is not defined, then the cold partition name is
       defined in the usual manner as a label (by means of
!      'ASM_OUTPUT_LABEL').
  
!      You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
       of this macro.
  
   -- Macro: ASM_DECLARE_COLD_FUNCTION_SIZE (STREAM, NAME, DECL)
--- 41697,41710 ----
       any text necessary for declaring the name NAME of a cold function
       partition which is being defined.  This macro is responsible for
       outputting the label definition (perhaps using
!      ‘ASM_OUTPUT_FUNCTION_LABEL’).  The argument DECL is the
!      ‘FUNCTION_DECL’ tree node representing the function.
  
       If this macro is not defined, then the cold partition name is
       defined in the usual manner as a label (by means of
!      ‘ASM_OUTPUT_LABEL’).
  
!      You may wish to use ‘ASM_OUTPUT_TYPE_DIRECTIVE’ in the definition
       of this macro.
  
   -- Macro: ASM_DECLARE_COLD_FUNCTION_SIZE (STREAM, NAME, DECL)
*************** This is about outputting labels.
*** 41711,41750 ****
       any text necessary for declaring the size of a cold function
       partition which is being defined.  The argument NAME is the name of
       the cold partition of the function.  The argument DECL is the
!      'FUNCTION_DECL' tree node representing the function.
  
       If this macro is not defined, then the partition size is not
       defined.
  
!      You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
       this macro.
  
   -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       any text necessary for declaring the name NAME of an initialized
       variable which is being defined.  This macro must output the label
!      definition (perhaps using 'ASM_OUTPUT_LABEL').  The argument DECL
!      is the 'VAR_DECL' tree node representing the variable.
  
       If this macro is not defined, then the variable name is defined in
!      the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').
  
!      You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or
!      'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
  
   -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
            const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
       A target hook to output to the stdio stream FILE any text necessary
       for declaring the name NAME of a constant which is being defined.
       This target hook is responsible for outputting the label definition
!      (perhaps using 'assemble_label').  The argument EXP is the value of
       the constant, and SIZE is the size of the constant in bytes.  The
       NAME will be an internal label.
  
       The default version of this target hook, define the NAME in the
!      usual manner as a label (by means of 'assemble_label').
  
!      You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target
       hook.
  
   -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
--- 41712,41751 ----
       any text necessary for declaring the size of a cold function
       partition which is being defined.  The argument NAME is the name of
       the cold partition of the function.  The argument DECL is the
!      ‘FUNCTION_DECL’ tree node representing the function.
  
       If this macro is not defined, then the partition size is not
       defined.
  
!      You may wish to use ‘ASM_OUTPUT_MEASURED_SIZE’ in the definition of
       this macro.
  
   -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       any text necessary for declaring the name NAME of an initialized
       variable which is being defined.  This macro must output the label
!      definition (perhaps using ‘ASM_OUTPUT_LABEL’).  The argument DECL
!      is the ‘VAR_DECL’ tree node representing the variable.
  
       If this macro is not defined, then the variable name is defined in
!      the usual manner as a label (by means of ‘ASM_OUTPUT_LABEL’).
  
!      You may wish to use ‘ASM_OUTPUT_TYPE_DIRECTIVE’ and/or
!      ‘ASM_OUTPUT_SIZE_DIRECTIVE’ in the definition of this macro.
  
   -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
            const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
       A target hook to output to the stdio stream FILE any text necessary
       for declaring the name NAME of a constant which is being defined.
       This target hook is responsible for outputting the label definition
!      (perhaps using ‘assemble_label’).  The argument EXP is the value of
       the constant, and SIZE is the size of the constant in bytes.  The
       NAME will be an internal label.
  
       The default version of this target hook, define the NAME in the
!      usual manner as a label (by means of ‘assemble_label’).
  
!      You may wish to use ‘ASM_OUTPUT_TYPE_DIRECTIVE’ in this target
       hook.
  
   -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
*************** This is about outputting labels.
*** 41765,41772 ****
       If you don't define this macro, that is equivalent to defining it
       to do nothing.
  
!      You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or
!      'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
  
   -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
            char *NAME)
--- 41766,41773 ----
       If you don't define this macro, that is equivalent to defining it
       to do nothing.
  
!      You may wish to use ‘ASM_OUTPUT_SIZE_DIRECTIVE’ and/or
!      ‘ASM_OUTPUT_MEASURED_SIZE’ in the definition of this macro.
  
   -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
            char *NAME)
*************** This is about outputting labels.
*** 41775,41781 ****
       available for reference from other files.
  
       The default implementation relies on a proper definition of
!      'GLOBAL_ASM_OP'.
  
   -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree
            DECL)
--- 41776,41782 ----
       available for reference from other files.
  
       The default implementation relies on a proper definition of
!      ‘GLOBAL_ASM_OP’.
  
   -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree
            DECL)
*************** This is about outputting labels.
*** 41797,41846 ****
       A C statement (sans semicolon) to output to the stdio stream STREAM
       some commands that will make the label NAME weak; that is,
       available for reference from other files but only used if no other
!      definition is available.  Use the expression 'assemble_name
!      (STREAM, NAME)' to output the name itself; before and after that,
       output the additional assembler syntax for making that name weak,
       and a newline.
  
!      If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not
!      support weak symbols and you should not define the 'SUPPORTS_WEAK'
       macro.
  
   -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
!      Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and
!      'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
!      or variable decl.  If VALUE is not 'NULL', this C statement should
       output to the stdio stream STREAM assembler code which defines
       (equates) the weak symbol NAME to have the value VALUE.  If VALUE
!      is 'NULL', it should output commands to make NAME weak.
  
   -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
       Outputs a directive that enables NAME to be used to refer to symbol
!      VALUE with weak-symbol semantics.  'decl' is the declaration of
!      'name'.
  
   -- Macro: SUPPORTS_WEAK
       A preprocessor constant expression which evaluates to true if the
       target supports weak symbols.
  
!      If you don't define this macro, 'defaults.h' provides a default
!      definition.  If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is
!      defined, the default definition is '1'; otherwise, it is '0'.
  
   -- Macro: TARGET_SUPPORTS_WEAK
       A C expression which evaluates to true if the target supports weak
       symbols.
  
!      If you don't define this macro, 'defaults.h' provides a default
!      definition.  The default definition is '(SUPPORTS_WEAK)'.  Define
       this macro if you want to control weak symbol support with a
!      compiler flag such as '-melf'.
  
   -- Macro: MAKE_DECL_ONE_ONLY (DECL)
       A C statement (sans semicolon) to mark DECL to be emitted as a
       public symbol such that extra copies in multiple translation units
       will be discarded by the linker.  Define this macro if your object
!      file format provides support for this concept, such as the 'COMDAT'
       section flags in the Microsoft Windows PE/COFF format, and this
       support requires changes to DECL, such as putting it in a separate
       section.
--- 41798,41847 ----
       A C statement (sans semicolon) to output to the stdio stream STREAM
       some commands that will make the label NAME weak; that is,
       available for reference from other files but only used if no other
!      definition is available.  Use the expression ‘assemble_name
!      (STREAM, NAME)’ to output the name itself; before and after that,
       output the additional assembler syntax for making that name weak,
       and a newline.
  
!      If you don't define this macro or ‘ASM_WEAKEN_DECL’, GCC will not
!      support weak symbols and you should not define the ‘SUPPORTS_WEAK’
       macro.
  
   -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
!      Combines (and replaces) the function of ‘ASM_WEAKEN_LABEL’ and
!      ‘ASM_OUTPUT_WEAK_ALIAS’, allowing access to the associated function
!      or variable decl.  If VALUE is not ‘NULL’, this C statement should
       output to the stdio stream STREAM assembler code which defines
       (equates) the weak symbol NAME to have the value VALUE.  If VALUE
!      is ‘NULL’, it should output commands to make NAME weak.
  
   -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
       Outputs a directive that enables NAME to be used to refer to symbol
!      VALUE with weak-symbol semantics.  ‘decl’ is the declaration of
!      ‘name’.
  
   -- Macro: SUPPORTS_WEAK
       A preprocessor constant expression which evaluates to true if the
       target supports weak symbols.
  
!      If you don't define this macro, ‘defaults.h’ provides a default
!      definition.  If either ‘ASM_WEAKEN_LABEL’ or ‘ASM_WEAKEN_DECL’ is
!      defined, the default definition is ‘1’; otherwise, it is ‘0’.
  
   -- Macro: TARGET_SUPPORTS_WEAK
       A C expression which evaluates to true if the target supports weak
       symbols.
  
!      If you don't define this macro, ‘defaults.h’ provides a default
!      definition.  The default definition is ‘(SUPPORTS_WEAK)’.  Define
       this macro if you want to control weak symbol support with a
!      compiler flag such as ‘-melf’.
  
   -- Macro: MAKE_DECL_ONE_ONLY (DECL)
       A C statement (sans semicolon) to mark DECL to be emitted as a
       public symbol such that extra copies in multiple translation units
       will be discarded by the linker.  Define this macro if your object
!      file format provides support for this concept, such as the ‘COMDAT’
       section flags in the Microsoft Windows PE/COFF format, and this
       support requires changes to DECL, such as putting it in a separate
       section.
*************** This is about outputting labels.
*** 41849,41859 ****
       A C expression which evaluates to true if the target supports
       one-only semantics.
  
!      If you don't define this macro, 'varasm.cc' provides a default
!      definition.  If 'MAKE_DECL_ONE_ONLY' is defined, the default
!      definition is '1'; otherwise, it is '0'.  Define this macro if you
       want to control one-only symbol support with a compiler flag, or if
!      setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to
       be emitted as one-only.
  
   -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
--- 41850,41860 ----
       A C expression which evaluates to true if the target supports
       one-only semantics.
  
!      If you don't define this macro, ‘varasm.cc’ provides a default
!      definition.  If ‘MAKE_DECL_ONE_ONLY’ is defined, the default
!      definition is ‘1’; otherwise, it is ‘0’.  Define this macro if you
       want to control one-only symbol support with a compiler flag, or if
!      setting the ‘DECL_ONE_ONLY’ flag is enough to mark a declaration to
       be emitted as one-only.
  
   -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
*************** This is about outputting labels.
*** 41866,41872 ****
   -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
       A C expression that evaluates to true if the target's linker
       expects that weak symbols do not appear in a static archive's table
!      of contents.  The default is '0'.
  
       Leaving weak symbols out of an archive's table of contents means
       that, if a symbol will only have a definition in one translation
--- 41867,41873 ----
   -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
       A C expression that evaluates to true if the target's linker
       expects that weak symbols do not appear in a static archive's table
!      of contents.  The default is ‘0’.
  
       Leaving weak symbols out of an archive's table of contents means
       that, if a symbol will only have a definition in one translation
*************** This is about outputting labels.
*** 41896,41902 ****
       This target hook is a function to output to ASM_OUT_FILE an
       assembler pseudo-op to declare a library function name external.
       The name of the library function is given by SYMREF, which is a
!      'symbol_ref'.
  
   -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
            *SYMBOL)
--- 41897,41903 ----
       This target hook is a function to output to ASM_OUT_FILE an
       assembler pseudo-op to declare a library function name external.
       The name of the library function is given by SYMREF, which is a
!      ‘symbol_ref’.
  
   -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
            *SYMBOL)
*************** This is about outputting labels.
*** 41907,41936 ****
   -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       a reference in assembler syntax to a label named NAME.  This should
!      add '_' to the front of the name, if that is customary on your
       operating system, as it is in most Berkeley Unix systems.  This
!      macro is used in 'assemble_name'.
  
   -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
!      Given a symbol NAME, perform same mangling as 'varasm.cc''s
!      'assemble_name', but in memory rather than to a file stream,
!      returning result as an 'IDENTIFIER_NODE'.  Required for correct LTO
       symtabs.  The default implementation calls the
!      'TARGET_STRIP_NAME_ENCODING' hook and then prepends the
!      'USER_LABEL_PREFIX', if any.
  
   -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
       A C statement (sans semicolon) to output a reference to
!      'SYMBOL_REF' SYM.  If not defined, 'assemble_name' will be used to
       output the name of the symbol.  This macro may be used to modify
       the way a symbol is referenced depending on information encoded by
!      'TARGET_ENCODE_SECTION_INFO'.
  
   -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
       A C statement (sans semicolon) to output a reference to BUF, the
!      result of 'ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
!      'assemble_name' will be used to output the name of the symbol.
!      This macro is not used by 'output_asm_label', or the '%l' specifier
       that calls it; the intention is that this macro should be set when
       it is necessary to output a label differently when its address is
       being taken.
--- 41908,41937 ----
   -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
       A C statement (sans semicolon) to output to the stdio stream STREAM
       a reference in assembler syntax to a label named NAME.  This should
!      add ‘_’ to the front of the name, if that is customary on your
       operating system, as it is in most Berkeley Unix systems.  This
!      macro is used in ‘assemble_name’.
  
   -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
!      Given a symbol NAME, perform same mangling as ‘varasm.cc’'s
!      ‘assemble_name’, but in memory rather than to a file stream,
!      returning result as an ‘IDENTIFIER_NODE’.  Required for correct LTO
       symtabs.  The default implementation calls the
!      ‘TARGET_STRIP_NAME_ENCODING’ hook and then prepends the
!      ‘USER_LABEL_PREFIX’, if any.
  
   -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
       A C statement (sans semicolon) to output a reference to
!      ‘SYMBOL_REF’ SYM.  If not defined, ‘assemble_name’ will be used to
       output the name of the symbol.  This macro may be used to modify
       the way a symbol is referenced depending on information encoded by
!      ‘TARGET_ENCODE_SECTION_INFO’.
  
   -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
       A C statement (sans semicolon) to output a reference to BUF, the
!      result of ‘ASM_GENERATE_INTERNAL_LABEL’.  If not defined,
!      ‘assemble_name’ will be used to output the name of the symbol.
!      This macro is not used by ‘output_asm_label’, or the ‘%l’ specifier
       that calls it; the intention is that this macro should be set when
       it is necessary to output a label differently when its address is
       being taken.
*************** This is about outputting labels.
*** 41946,41957 ****
  
       It is desirable to exclude internal labels from the symbol table of
       the object file.  Most assemblers have a naming convention for
!      labels that should be excluded; on many systems, the letter 'L' at
       the beginning of a label has this effect.  You should find out what
       convention your system uses, and follow it.
  
       The default version of this function utilizes
!      'ASM_GENERATE_INTERNAL_LABEL'.
  
   -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
       A C statement to output to the stdio stream STREAM a debug info
--- 41947,41958 ----
  
       It is desirable to exclude internal labels from the symbol table of
       the object file.  Most assemblers have a naming convention for
!      labels that should be excluded; on many systems, the letter ‘L’ at
       the beginning of a label has this effect.  You should find out what
       convention your system uses, and follow it.
  
       The default version of this function utilizes
!      ‘ASM_GENERATE_INTERNAL_LABEL’.
  
   -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
       A C statement to output to the stdio stream STREAM a debug info
*************** This is about outputting labels.
*** 41963,41993 ****
       of instruction bundles.
  
       If this macro is not defined, then
!      '(*targetm.asm_out.internal_label)' will be used.
  
   -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
       A C statement to store into the string STRING a label whose name is
       made from the string PREFIX and the number NUM.
  
!      This string, when output subsequently by 'assemble_name', should
!      produce the output that '(*targetm.asm_out.internal_label)' would
       produce with the same PREFIX and NUM.
  
!      If the string begins with '*', then 'assemble_name' will output the
       rest of the string unchanged.  It is often convenient for
!      'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way.  If the
!      string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to
       output the string, and may change it.  (Of course,
!      'ASM_OUTPUT_LABELREF' is also part of your machine description, so
       you should know what it does on your machine.)
  
   -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
       A C expression to assign to OUTVAR (which is a variable of type
!      'char *') a newly allocated string made from the string NAME and
       the number NUMBER, with some suitable punctuation added.  Use
!      'alloca' to get space for the string.
  
!      The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to
       produce an assembler label for an internal static variable whose
       name is NAME.  Therefore, the string must be such as to result in
       valid assembler code.  The argument NUMBER is different each time
--- 41964,41994 ----
       of instruction bundles.
  
       If this macro is not defined, then
!      ‘(*targetm.asm_out.internal_label)’ will be used.
  
   -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
       A C statement to store into the string STRING a label whose name is
       made from the string PREFIX and the number NUM.
  
!      This string, when output subsequently by ‘assemble_name’, should
!      produce the output that ‘(*targetm.asm_out.internal_label)’ would
       produce with the same PREFIX and NUM.
  
!      If the string begins with ‘*’, then ‘assemble_name’ will output the
       rest of the string unchanged.  It is often convenient for
!      ‘ASM_GENERATE_INTERNAL_LABEL’ to use ‘*’ in this way.  If the
!      string doesn't start with ‘*’, then ‘ASM_OUTPUT_LABELREF’ gets to
       output the string, and may change it.  (Of course,
!      ‘ASM_OUTPUT_LABELREF’ is also part of your machine description, so
       you should know what it does on your machine.)
  
   -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
       A C expression to assign to OUTVAR (which is a variable of type
!      ‘char *’) a newly allocated string made from the string NAME and
       the number NUMBER, with some suitable punctuation added.  Use
!      ‘alloca’ to get space for the string.
  
!      The string will be used as an argument to ‘ASM_OUTPUT_LABELREF’ to
       produce an assembler label for an internal static variable whose
       name is NAME.  Therefore, the string must be such as to result in
       valid assembler code.  The argument NUMBER is different each time
*************** This is about outputting labels.
*** 42006,42012 ****
       A C statement to output to the stdio stream STREAM assembler code
       which defines (equates) the symbol NAME to have the value VALUE.
  
!      If 'SET_ASM_OP' is defined, a default definition is provided which
       is correct for most systems.
  
   -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
--- 42007,42013 ----
       A C statement to output to the stdio stream STREAM assembler code
       which defines (equates) the symbol NAME to have the value VALUE.
  
!      If ‘SET_ASM_OP’ is defined, a default definition is provided which
       is correct for most systems.
  
   -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
*************** This is about outputting labels.
*** 42014,42023 ****
       A C statement to output to the stdio stream STREAM assembler code
       which defines (equates) the symbol whose tree node is DECL_OF_NAME
       to have the value of the tree node DECL_OF_VALUE.  This macro will
!      be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if
       the tree nodes are available.
  
!      If 'SET_ASM_OP' is defined, a default definition is provided which
       is correct for most systems.
  
   -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
--- 42015,42024 ----
       A C statement to output to the stdio stream STREAM assembler code
       which defines (equates) the symbol whose tree node is DECL_OF_NAME
       to have the value of the tree node DECL_OF_VALUE.  This macro will
!      be used in preference to ‘ASM_OUTPUT_DEF’ if it is defined and if
       the tree nodes are available.
  
!      If ‘SET_ASM_OP’ is defined, a default definition is provided which
       is correct for most systems.
  
   -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
*************** This is about outputting labels.
*** 42026,42041 ****
       have the value of the tree node DECL_OF_VALUE should be emitted
       near the end of the current compilation unit.  The default is to
       not defer output of defines.  This macro affects defines output by
!      'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'.
  
   -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
       A C statement to output to the stdio stream STREAM assembler code
       which defines (equates) the weak symbol NAME to have the value
!      VALUE.  If VALUE is 'NULL', it defines NAME as an undefined weak
       symbol.
  
       Define this macro if the target only supports weak aliases; define
!      'ASM_OUTPUT_DEF' instead if possible.
  
   -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
            SEL_NAME)
--- 42027,42042 ----
       have the value of the tree node DECL_OF_VALUE should be emitted
       near the end of the current compilation unit.  The default is to
       not defer output of defines.  This macro affects defines output by
!      ‘ASM_OUTPUT_DEF’ and ‘ASM_OUTPUT_DEF_FROM_DECLS’.
  
   -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
       A C statement to output to the stdio stream STREAM assembler code
       which defines (equates) the weak symbol NAME to have the value
!      VALUE.  If VALUE is ‘NULL’, it defines NAME as an undefined weak
       symbol.
  
       Define this macro if the target only supports weak aliases; define
!      ‘ASM_OUTPUT_DEF’ instead if possible.
  
   -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
            SEL_NAME)
*************** This is about outputting labels.
*** 42043,42063 ****
       Objective-C methods.
  
       The default name is a unique method number followed by the name of
!      the class (e.g. '_1_Foo').  For methods in categories, the name of
       the category is also included in the assembler name (e.g.
!      '_1_Foo_Bar').
  
       These names are safe on most systems, but make debugging difficult
       since the method's selector is not present in the name.  Therefore,
       particular systems define other ways of computing names.
  
!      BUF is an expression of type 'char *' which gives you a buffer in
       which to store the name; its length is as long as CLASS_NAME,
       CAT_NAME and SEL_NAME put together, plus 50 characters extra.
  
       The argument IS_INST specifies whether the method is an instance
       method or a class method; CLASS_NAME is the name of the class;
!      CAT_NAME is the name of the category (or 'NULL' if the method is
       not in a category); and SEL_NAME is the name of the selector.
  
       On systems where the assembler can handle quoted names, you can use
--- 42044,42064 ----
       Objective-C methods.
  
       The default name is a unique method number followed by the name of
!      the class (e.g. ‘_1_Foo’).  For methods in categories, the name of
       the category is also included in the assembler name (e.g.
!      ‘_1_Foo_Bar’).
  
       These names are safe on most systems, but make debugging difficult
       since the method's selector is not present in the name.  Therefore,
       particular systems define other ways of computing names.
  
!      BUF is an expression of type ‘char *’ which gives you a buffer in
       which to store the name; its length is as long as CLASS_NAME,
       CAT_NAME and SEL_NAME put together, plus 50 characters extra.
  
       The argument IS_INST specifies whether the method is an instance
       method or a class method; CLASS_NAME is the name of the class;
!      CAT_NAME is the name of the category (or ‘NULL’ if the method is
       not in a category); and SEL_NAME is the name of the selector.
  
       On systems where the assembler can handle quoted names, you can use
*************** File: gccint.info,  Node: Initialization
*** 42069,42082 ****
  18.20.5 How Initialization Functions Are Handled
  ------------------------------------------------
  
! The compiled code for certain languages includes "constructors" (also
! called "initialization routines")--functions to initialize data in the
  program when the program is started.  These functions need to be called
! before the program is "started"--that is to say, before 'main' is
  called.
  
!  Compiling some languages generates "destructors" (also called
! "termination routines") that should be called when the program
  terminates.
  
   To make the initialization and termination functions work, the compiler
--- 42070,42083 ----
  18.20.5 How Initialization Functions Are Handled
  ------------------------------------------------
  
! The compiled code for certain languages includes “constructors” (also
! called “initialization routines”)--functions to initialize data in the
  program when the program is started.  These functions need to be called
! before the program is "started"--that is to say, before ‘main’ is
  called.
  
!  Compiling some languages generates “destructors” (also called
! “termination routines”) that should be called when the program
  terminates.
  
   To make the initialization and termination functions work, the compiler
*************** initialization and termination functions
*** 42089,42179 ****
  Much of the structure is common to all four variations.
  
   The linker must build two lists of these functions--a list of
! initialization functions, called '__CTOR_LIST__', and a list of
! termination functions, called '__DTOR_LIST__'.
  
   Each list always begins with an ignored function pointer (which may
! hold 0, -1, or a count of the function pointers after it, depending on
  the environment).  This is followed by a series of zero or more function
  pointers to constructors (or destructors), followed by a function
  pointer containing zero.
  
   Depending on the operating system and its executable file format,
! either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time
  and exit time.  Constructors are called in reverse order of the list;
  destructors in forward order.
  
   The best way to handle static constructors works only for object file
  formats which provide arbitrarily-named sections.  A section is set
  aside for a list of constructors, and another for a list of destructors.
! Traditionally these are called '.ctors' and '.dtors'.  Each object file
  that defines an initialization function also puts a word in the
  constructor section to point to that function.  The linker accumulates
! all these words into one contiguous '.ctors' section.  Termination
  functions are handled similarly.
  
!  This method will be chosen as the default by 'target-def.h' if
! 'TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
  arbitrary sections, but does support special designated constructor and
! destructor sections may define 'CTORS_SECTION_ASM_OP' and
! 'DTORS_SECTION_ASM_OP' to achieve the same effect.
  
   When arbitrary sections are available, there are two variants,
! depending upon how the code in 'crtstuff.c' is called.  On systems that
! support a ".init" section which is executed at program startup, parts of
! 'crtstuff.c' are compiled into that section.  The program is linked by
! the 'gcc' driver like this:
  
       ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
  
!  The prologue of a function ('__init') appears in the '.init' section of
! 'crti.o'; the epilogue appears in 'crtn.o'.  Likewise for the function
! '__fini' in the ".fini" section.  Normally these files are provided by
  the operating system or by the GNU C library, but are provided by GCC
  for a few targets.
  
!  The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled
! from 'crtstuff.c'.  They contain, among other things, code fragments
! within the '.init' and '.fini' sections that branch to routines in the
! '.text' section.  The linker will pull all parts of a section together,
! which results in a complete '__init' function that invokes the routines
  we need at startup.
  
!  To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro
  properly.
  
   If no init section is available, when GCC compiles any function called
! 'main' (or more accurately, any function designated as a program entry
! point by the language front end calling 'expand_main_function'), it
! inserts a procedure call to '__main' as the first executable code after
! the function prologue.  The '__main' function is defined in 'libgcc2.c'
  and runs the global constructors.
  
   In file formats that don't support arbitrary sections, there are again
! two variants.  In the simplest variant, the GNU linker (GNU 'ld') and an
! 'a.out' format must be used.  In this case, 'TARGET_ASM_CONSTRUCTOR' is
! defined to produce a '.stabs' entry of type 'N_SETT', referencing the
! name '__CTOR_LIST__', and with the address of the void function
  containing the initialization code as its value.  The GNU linker
! recognizes this as a request to add the value to a "set"; the values are
  accumulated, and are eventually placed in the executable as a vector in
  the format described above, with a leading (ignored) count and a
! trailing zero element.  'TARGET_ASM_DESTRUCTOR' is handled similarly.
! Since no init section is available, the absence of 'INIT_SECTION_ASM_OP'
! causes the compilation of 'main' to call '__main' as above, starting the
  initialization process.
  
   The last variant uses neither arbitrary sections nor the GNU linker.
  This is preferable when you want to do dynamic linking and when using
  file formats which the GNU linker does not support, such as 'ECOFF'.  In
! this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and
  termination functions are recognized simply by their names.  This
! requires an extra program in the linkage step, called 'collect2'.  This
  program pretends to be the linker, for use with GCC; it does its job by
  running the ordinary linker, but also arranges to include the vectors of
  initialization and termination functions.  These functions are called
! via '__main' as described above.  In order to use this method,
! 'use_collect2' must be defined in the target in 'config.gcc'.
  
   The following section describes the specific macros that control and
  customize the handling of initialization and termination functions.
--- 42090,42180 ----
  Much of the structure is common to all four variations.
  
   The linker must build two lists of these functions--a list of
! initialization functions, called ‘__CTOR_LIST__’, and a list of
! termination functions, called ‘__DTOR_LIST__’.
  
   Each list always begins with an ignored function pointer (which may
! hold 0, −1, or a count of the function pointers after it, depending on
  the environment).  This is followed by a series of zero or more function
  pointers to constructors (or destructors), followed by a function
  pointer containing zero.
  
   Depending on the operating system and its executable file format,
! either ‘crtstuff.c’ or ‘libgcc2.c’ traverses these lists at startup time
  and exit time.  Constructors are called in reverse order of the list;
  destructors in forward order.
  
   The best way to handle static constructors works only for object file
  formats which provide arbitrarily-named sections.  A section is set
  aside for a list of constructors, and another for a list of destructors.
! Traditionally these are called ‘.ctors’ and ‘.dtors’.  Each object file
  that defines an initialization function also puts a word in the
  constructor section to point to that function.  The linker accumulates
! all these words into one contiguous ‘.ctors’ section.  Termination
  functions are handled similarly.
  
!  This method will be chosen as the default by ‘target-def.h’ if
! ‘TARGET_ASM_NAMED_SECTION’ is defined.  A target that does not support
  arbitrary sections, but does support special designated constructor and
! destructor sections may define ‘CTORS_SECTION_ASM_OP’ and
! ‘DTORS_SECTION_ASM_OP’ to achieve the same effect.
  
   When arbitrary sections are available, there are two variants,
! depending upon how the code in ‘crtstuff.c’ is called.  On systems that
! support a “.init” section which is executed at program startup, parts of
! ‘crtstuff.c’ are compiled into that section.  The program is linked by
! the ‘gcc’ driver like this:
  
       ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
  
!  The prologue of a function (‘__init’) appears in the ‘.init’ section of
! ‘crti.o’; the epilogue appears in ‘crtn.o’.  Likewise for the function
! ‘__fini’ in the “.fini” section.  Normally these files are provided by
  the operating system or by the GNU C library, but are provided by GCC
  for a few targets.
  
!  The objects ‘crtbegin.o’ and ‘crtend.o’ are (for most targets) compiled
! from ‘crtstuff.c’.  They contain, among other things, code fragments
! within the ‘.init’ and ‘.fini’ sections that branch to routines in the
! ‘.text’ section.  The linker will pull all parts of a section together,
! which results in a complete ‘__init’ function that invokes the routines
  we need at startup.
  
!  To use this variant, you must define the ‘INIT_SECTION_ASM_OP’ macro
  properly.
  
   If no init section is available, when GCC compiles any function called
! ‘main’ (or more accurately, any function designated as a program entry
! point by the language front end calling ‘expand_main_function’), it
! inserts a procedure call to ‘__main’ as the first executable code after
! the function prologue.  The ‘__main’ function is defined in ‘libgcc2.c’
  and runs the global constructors.
  
   In file formats that don't support arbitrary sections, there are again
! two variants.  In the simplest variant, the GNU linker (GNU ‘ld’) and an
! 'a.out' format must be used.  In this case, ‘TARGET_ASM_CONSTRUCTOR’ is
! defined to produce a ‘.stabs’ entry of type ‘N_SETT’, referencing the
! name ‘__CTOR_LIST__’, and with the address of the void function
  containing the initialization code as its value.  The GNU linker
! recognizes this as a request to add the value to a “set”; the values are
  accumulated, and are eventually placed in the executable as a vector in
  the format described above, with a leading (ignored) count and a
! trailing zero element.  ‘TARGET_ASM_DESTRUCTOR’ is handled similarly.
! Since no init section is available, the absence of ‘INIT_SECTION_ASM_OP’
! causes the compilation of ‘main’ to call ‘__main’ as above, starting the
  initialization process.
  
   The last variant uses neither arbitrary sections nor the GNU linker.
  This is preferable when you want to do dynamic linking and when using
  file formats which the GNU linker does not support, such as 'ECOFF'.  In
! this case, ‘TARGET_HAVE_CTORS_DTORS’ is false, initialization and
  termination functions are recognized simply by their names.  This
! requires an extra program in the linkage step, called ‘collect2’.  This
  program pretends to be the linker, for use with GCC; it does its job by
  running the ordinary linker, but also arranges to include the vectors of
  initialization and termination functions.  These functions are called
! via ‘__main’ as described above.  In order to use this method,
! ‘use_collect2’ must be defined in the target in ‘config.gcc’.
  
   The following section describes the specific macros that control and
  customize the handling of initialization and termination functions.
*************** and termination functions:
*** 42193,42206 ****
       initialization code.  If not defined, GCC will assume such a
       section does not exist.  When you are using special sections for
       initialization and termination functions, this macro also controls
!      how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization
       functions.
  
   -- Macro: HAS_INIT_SECTION
!      If defined, 'main' will not call '__main' as described above.  This
       macro should be defined for systems that control start-up code on a
       symbol-by-symbol basis, such as OSF/1, and should not be defined
!      explicitly for systems that support 'INIT_SECTION_ASM_OP'.
  
   -- Macro: LD_INIT_SWITCH
       If defined, a C string constant for a switch that tells the linker
--- 42194,42207 ----
       initialization code.  If not defined, GCC will assume such a
       section does not exist.  When you are using special sections for
       initialization and termination functions, this macro also controls
!      how ‘crtstuff.c’ and ‘libgcc2.c’ arrange to run the initialization
       functions.
  
   -- Macro: HAS_INIT_SECTION
!      If defined, ‘main’ will not call ‘__main’ as described above.  This
       macro should be defined for systems that control start-up code on a
       symbol-by-symbol basis, such as OSF/1, and should not be defined
!      explicitly for systems that support ‘INIT_SECTION_ASM_OP’.
  
   -- Macro: LD_INIT_SWITCH
       If defined, a C string constant for a switch that tells the linker
*************** and termination functions:
*** 42215,42221 ****
       automatically called when a shared library is loaded.  The function
       should call FUNC, which takes no arguments.  If not defined, and
       the object format requires an explicit initialization function,
!      then a function called '_GLOBAL__DI' will be generated.
  
       This function and the following one are used by collect2 when
       linking a shared library that needs constructors or destructors, or
--- 42216,42222 ----
       automatically called when a shared library is loaded.  The function
       should call FUNC, which takes no arguments.  If not defined, and
       the object format requires an explicit initialization function,
!      then a function called ‘_GLOBAL__DI’ will be generated.
  
       This function and the following one are used by collect2 when
       linking a shared library that needs constructors or destructors, or
*************** and termination functions:
*** 42226,42250 ****
       automatically called when a shared library is unloaded.  The
       function should call FUNC, which takes no arguments.  If not
       defined, and the object format requires an explicit finalization
!      function, then a function called '_GLOBAL__DD' will be generated.
  
   -- Macro: INVOKE__main
!      If defined, 'main' will call '__main' despite the presence of
!      'INIT_SECTION_ASM_OP'.  This macro should be defined for systems
       where the init section is not actually run automatically, but is
       still useful for collecting the lists of constructors and
       destructors.
  
   -- Macro: SUPPORTS_INIT_PRIORITY
!      If nonzero, the C++ 'init_priority' attribute is supported and the
       compiler should emit instructions to control the order of
       initialization of objects.  If zero, the compiler will issue an
!      error message upon encountering an 'init_priority' attribute.
  
   -- Target Hook: bool 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 'collect2'.
  
   -- Target Hook: bool TARGET_DTORS_FROM_CXA_ATEXIT
       This value is true if the target wants destructors to be queued to
--- 42227,42251 ----
       automatically called when a shared library is unloaded.  The
       function should call FUNC, which takes no arguments.  If not
       defined, and the object format requires an explicit finalization
!      function, then a function called ‘_GLOBAL__DD’ will be generated.
  
   -- Macro: INVOKE__main
!      If defined, ‘main’ will call ‘__main’ despite the presence of
!      ‘INIT_SECTION_ASM_OP’.  This macro should be defined for systems
       where the init section is not actually run automatically, but is
       still useful for collecting the lists of constructors and
       destructors.
  
   -- Macro: SUPPORTS_INIT_PRIORITY
!      If nonzero, the C++ ‘init_priority’ attribute is supported and the
       compiler should emit instructions to control the order of
       initialization of objects.  If zero, the compiler will issue an
!      error message upon encountering an ‘init_priority’ attribute.
  
   -- Target Hook: bool 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 ‘collect2’.
  
   -- Target Hook: bool TARGET_DTORS_FROM_CXA_ATEXIT
       This value is true if the target wants destructors to be queued to
*************** and termination functions:
*** 42252,42306 ****
       priority level, a new constructor will be entered that registers
       the destructors for that level with __cxa_atexit (and there will be
       no destructors emitted).  It is false the method implied by
!      'have_ctors_dtors' is used.
  
   -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
       If defined, a function that outputs assembler code to arrange to
       call the function referenced by SYMBOL at initialization time.
  
!      Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no
       arguments and with no return value.  If the target supports
       initialization priorities, PRIORITY is a value between 0 and
!      'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'.
  
       If this macro is not defined by the target, a suitable default will
       be chosen if (1) the target supports arbitrary section names, (2)
!      the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is
       not defined.
  
   -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
!      This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination
       functions rather than initialization functions.
  
!  If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
  generated for the generated object file will have static linkage.
  
!  If your system uses 'collect2' as the means of processing constructors,
! then that program normally uses 'nm' to scan an object file for
  constructor functions to be called.
  
   On certain kinds of systems, you can define this macro to make
! 'collect2' work faster (and, in some cases, make it work at all):
  
   -- Macro: OBJECT_FORMAT_COFF
       Define this macro if the system uses COFF (Common Object File
!      Format) object files, so that 'collect2' can assume this format and
       scan object files directly for dynamic constructor/destructor
       functions.
  
!      This macro is effective only in a native compiler; 'collect2' as
!      part of a cross compiler always uses 'nm' for the target machine.
  
   -- Macro: REAL_NM_FILE_NAME
       Define this macro as a C string constant containing the file name
!      to use to execute 'nm'.  The default is to search the path normally
!      for 'nm'.
  
   -- Macro: NM_FLAGS
!      'collect2' calls 'nm' to scan object files for static constructors
!      and destructors and LTO info.  By default, '-n' is passed.  Define
!      'NM_FLAGS' to a C string constant if other options are needed to
!      get the same output format as GNU 'nm -n' produces.
  
   If your system supports shared libraries and has a program to list the
  dynamic dependencies of a given library or executable, you can define
--- 42253,42307 ----
       priority level, a new constructor will be entered that registers
       the destructors for that level with __cxa_atexit (and there will be
       no destructors emitted).  It is false the method implied by
!      ‘have_ctors_dtors’ is used.
  
   -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
       If defined, a function that outputs assembler code to arrange to
       call the function referenced by SYMBOL at initialization time.
  
!      Assume that SYMBOL is a ‘SYMBOL_REF’ for a function taking no
       arguments and with no return value.  If the target supports
       initialization priorities, PRIORITY is a value between 0 and
!      ‘MAX_INIT_PRIORITY’; otherwise it must be ‘DEFAULT_INIT_PRIORITY’.
  
       If this macro is not defined by the target, a suitable default will
       be chosen if (1) the target supports arbitrary section names, (2)
!      the target defines ‘CTORS_SECTION_ASM_OP’, or (3) ‘USE_COLLECT2’ is
       not defined.
  
   -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
!      This is like ‘TARGET_ASM_CONSTRUCTOR’ but used for termination
       functions rather than initialization functions.
  
!  If ‘TARGET_HAVE_CTORS_DTORS’ is true, the initialization routine
  generated for the generated object file will have static linkage.
  
!  If your system uses ‘collect2’ as the means of processing constructors,
! then that program normally uses ‘nm’ to scan an object file for
  constructor functions to be called.
  
   On certain kinds of systems, you can define this macro to make
! ‘collect2’ work faster (and, in some cases, make it work at all):
  
   -- Macro: OBJECT_FORMAT_COFF
       Define this macro if the system uses COFF (Common Object File
!      Format) object files, so that ‘collect2’ can assume this format and
       scan object files directly for dynamic constructor/destructor
       functions.
  
!      This macro is effective only in a native compiler; ‘collect2’ as
!      part of a cross compiler always uses ‘nm’ for the target machine.
  
   -- Macro: REAL_NM_FILE_NAME
       Define this macro as a C string constant containing the file name
!      to use to execute ‘nm’.  The default is to search the path normally
!      for ‘nm’.
  
   -- Macro: NM_FLAGS
!      ‘collect2’ calls ‘nm’ to scan object files for static constructors
!      and destructors and LTO info.  By default, ‘-n’ is passed.  Define
!      ‘NM_FLAGS’ to a C string constant if other options are needed to
!      get the same output format as GNU ‘nm -n’ produces.
  
   If your system supports shared libraries and has a program to list the
  dynamic dependencies of a given library or executable, you can define
*************** termination functions in shared librarie
*** 42309,42330 ****
  
   -- Macro: LDD_SUFFIX
       Define this macro to a C string constant containing the name of the
!      program which lists dynamic dependencies, like 'ldd' under SunOS 4.
  
   -- Macro: PARSE_LDD_OUTPUT (PTR)
       Define this macro to be C code that extracts filenames from the
!      output of the program denoted by 'LDD_SUFFIX'.  PTR is a variable
!      of type 'char *' that points to the beginning of a line of output
!      from 'LDD_SUFFIX'.  If the line lists a dynamic dependency, the
       code must advance PTR to the beginning of the filename on that
!      line.  Otherwise, it must set PTR to 'NULL'.
  
   -- Macro: SHLIB_SUFFIX
       Define this macro to a C string constant containing the default
!      shared library extension of the target (e.g., '".so"').  'collect2'
       strips version information after this suffix when generating global
       constructor and destructor names.  This define is only needed on
!      targets that use 'collect2' to process constructors and
       destructors.
  
  
--- 42310,42331 ----
  
   -- Macro: LDD_SUFFIX
       Define this macro to a C string constant containing the name of the
!      program which lists dynamic dependencies, like ‘ldd’ under SunOS 4.
  
   -- Macro: PARSE_LDD_OUTPUT (PTR)
       Define this macro to be C code that extracts filenames from the
!      output of the program denoted by ‘LDD_SUFFIX’.  PTR is a variable
!      of type ‘char *’ that points to the beginning of a line of output
!      from ‘LDD_SUFFIX’.  If the line lists a dynamic dependency, the
       code must advance PTR to the beginning of the filename on that
!      line.  Otherwise, it must set PTR to ‘NULL’.
  
   -- Macro: SHLIB_SUFFIX
       Define this macro to a C string constant containing the default
!      shared library extension of the target (e.g., ‘".so"’).  ‘collect2’
       strips version information after this suffix when generating global
       constructor and destructor names.  This define is only needed on
!      targets that use ‘collect2’ to process constructors and
       destructors.
  
  
*************** This describes assembler instruction out
*** 42344,42363 ****
   -- Macro: ADDITIONAL_REGISTER_NAMES
       If defined, a C initializer for an array of structures containing a
       name and a register number.  This macro defines additional names
!      for hard registers, thus allowing the 'asm' option in declarations
       to refer to registers using alternate names.
  
   -- Macro: OVERLAPPING_REGISTER_NAMES
       If defined, a C initializer for an array of structures containing a
       name, a register number and a count of the number of consecutive
       machine registers the name overlaps.  This macro defines additional
!      names for hard registers, thus allowing the 'asm' option in
       declarations to refer to registers using alternate names.  Unlike
!      'ADDITIONAL_REGISTER_NAMES', this macro should be used when the
       register name implies multiple underlying registers.
  
       This macro should be used when it is important that a clobber in an
!      'asm' statement clobbers all the underlying values implied by the
       register name.  For example, on ARM, clobbering the
       double-precision VFP register "d0" implies clobbering both
       single-precision registers "s0" and "s1".
--- 42345,42364 ----
   -- Macro: ADDITIONAL_REGISTER_NAMES
       If defined, a C initializer for an array of structures containing a
       name and a register number.  This macro defines additional names
!      for hard registers, thus allowing the ‘asm’ option in declarations
       to refer to registers using alternate names.
  
   -- Macro: OVERLAPPING_REGISTER_NAMES
       If defined, a C initializer for an array of structures containing a
       name, a register number and a count of the number of consecutive
       machine registers the name overlaps.  This macro defines additional
!      names for hard registers, thus allowing the ‘asm’ option in
       declarations to refer to registers using alternate names.  Unlike
!      ‘ADDITIONAL_REGISTER_NAMES’, this macro should be used when the
       register name implies multiple underlying registers.
  
       This macro should be used when it is important that a clobber in an
!      ‘asm’ statement clobbers all the underlying values implied by the
       register name.  For example, on ARM, clobbering the
       double-precision VFP register "d0" implies clobbering both
       single-precision registers "s0" and "s1".
*************** This describes assembler instruction out
*** 42368,42374 ****
  
       The definition is a C statement or statements which output an
       assembler instruction opcode to the stdio stream STREAM.  The
!      macro-operand PTR is a variable of type 'char *' which points to
       the opcode name in its "internal" form--the form that is written in
       the machine description.  The definition should output the opcode
       name to STREAM, performing any translation you desire, and
--- 42369,42375 ----
  
       The definition is a C statement or statements which output an
       assembler instruction opcode to the stdio stream STREAM.  The
!      macro-operand PTR is a variable of type ‘char *’ which points to
       the opcode name in its "internal" form--the form that is written in
       the machine description.  The definition should output the opcode
       name to STREAM, performing any translation you desire, and
*************** This describes assembler instruction out
*** 42377,42388 ****
  
       In fact, your macro definition may process less than the entire
       opcode name, or more than the opcode name; but if you want to
!      process text that includes '%'-sequences to substitute operands,
       you must take care of the substitution yourself.  Just be sure to
       increment PTR over whatever text should not be output normally.
  
       If you need to look at the operand values, they can be found as the
!      elements of 'recog_data.operand'.
  
       If the macro definition does nothing, the instruction is output in
       the usual way.
--- 42378,42389 ----
  
       In fact, your macro definition may process less than the entire
       opcode name, or more than the opcode name; but if you want to
!      process text that includes ‘%’-sequences to substitute operands,
       you must take care of the substitution yourself.  Just be sure to
       increment PTR over whatever text should not be output normally.
  
       If you need to look at the operand values, they can be found as the
!      elements of ‘recog_data.operand’.
  
       If the macro definition does nothing, the instruction is output in
       the usual way.
*************** This describes assembler instruction out
*** 42430,42452 ****
       CODE is a value that can be used to specify one of several ways of
       printing the operand.  It is used when identical operands must be
       printed differently depending on the context.  CODE comes from the
!      '%' specification that was used to request printing of the operand.
!      If the specification was just '%DIGIT' then CODE is 0; if the
!      specification was '%LTR DIGIT' then CODE is the ASCII code for LTR.
  
       If X is a register, this macro should print the register's name.
!      The names can be found in an array 'reg_names' whose type is 'char
!      *[]'.  'reg_names' is initialized from 'REGISTER_NAMES'.
  
!      When the machine description has a specification '%PUNCT' (a '%'
       followed by a punctuation character), this macro is called with a
       null pointer for X and the punctuation character for CODE.
  
   -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
       A C expression which evaluates to true if CODE is a valid
!      punctuation character for use in the 'PRINT_OPERAND' macro.  If
!      'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
!      punctuation characters (except for the standard one, '%') are used
       in this way.
  
   -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
--- 42431,42453 ----
       CODE is a value that can be used to specify one of several ways of
       printing the operand.  It is used when identical operands must be
       printed differently depending on the context.  CODE comes from the
!      ‘%’ specification that was used to request printing of the operand.
!      If the specification was just ‘%DIGIT’ then CODE is 0; if the
!      specification was ‘%LTR DIGIT’ then CODE is the ASCII code for LTR.
  
       If X is a register, this macro should print the register's name.
!      The names can be found in an array ‘reg_names’ whose type is ‘char
!      *[]’.  ‘reg_names’ is initialized from ‘REGISTER_NAMES’.
  
!      When the machine description has a specification ‘%PUNCT’ (a ‘%’
       followed by a punctuation character), this macro is called with a
       null pointer for X and the punctuation character for CODE.
  
   -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
       A C expression which evaluates to true if CODE is a valid
!      punctuation character for use in the ‘PRINT_OPERAND’ macro.  If
!      ‘PRINT_OPERAND_PUNCT_VALID_P’ is not defined, it means that no
!      punctuation characters (except for the standard one, ‘%’) are used
       in this way.
  
   -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
*************** This describes assembler instruction out
*** 42456,42468 ****
  
       On some machines, the syntax for a symbolic address depends on the
       section that the address refers to.  On these machines, define the
!      hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the
!      'symbol_ref', and then check for it here.  *Note Assembler
       Format::.
  
   -- Macro: DBR_OUTPUT_SEQEND (FILE)
       A C statement, to be executed after all slot-filler instructions
!      have been output.  If necessary, call 'dbr_sequence_length' to
       determine the number of slots filled in a sequence (zero if not
       currently outputting a sequence), to decide how many no-ops to
       output, or whatever.
--- 42457,42469 ----
  
       On some machines, the syntax for a symbolic address depends on the
       section that the address refers to.  On these machines, define the
!      hook ‘TARGET_ENCODE_SECTION_INFO’ to store the information into the
!      ‘symbol_ref’, and then check for it here.  *Note Assembler
       Format::.
  
   -- Macro: DBR_OUTPUT_SEQEND (FILE)
       A C statement, to be executed after all slot-filler instructions
!      have been output.  If necessary, call ‘dbr_sequence_length’ to
       determine the number of slots filled in a sequence (zero if not
       currently outputting a sequence), to decide how many no-ops to
       output, or whatever.
*************** This describes assembler instruction out
*** 42474,42496 ****
   Note that output routines for instructions with delay slots must be
  prepared to deal with not being output as part of a sequence (i.e. when
  the scheduling pass is not run, or when no slot fillers could be found.)
! The variable 'final_sequence' is null when not processing a sequence,
! otherwise it contains the 'sequence' rtx being output.
  
   -- Macro: REGISTER_PREFIX
   -- Macro: LOCAL_LABEL_PREFIX
   -- Macro: USER_LABEL_PREFIX
   -- Macro: IMMEDIATE_PREFIX
!      If defined, C string expressions to be used for the '%R', '%L',
!      '%U', and '%I' options of 'asm_fprintf' (see 'final.cc').  These
!      are useful when a single 'md' file must support multiple assembler
!      formats.  In that case, the various 'tm.h' files can define these
       macros differently.
  
   -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
!      If defined this macro should expand to a series of 'case'
!      statements which will be parsed inside the 'switch' statement of
!      the 'asm_fprintf' function.  This allows targets to define extra
       printf formats which may useful when generating their assembler
       statements.  Note that uppercase letters are reserved for future
       generic extensions to asm_fprintf, and so are not available to
--- 42475,42497 ----
   Note that output routines for instructions with delay slots must be
  prepared to deal with not being output as part of a sequence (i.e. when
  the scheduling pass is not run, or when no slot fillers could be found.)
! The variable ‘final_sequence’ is null when not processing a sequence,
! otherwise it contains the ‘sequence’ rtx being output.
  
   -- Macro: REGISTER_PREFIX
   -- Macro: LOCAL_LABEL_PREFIX
   -- Macro: USER_LABEL_PREFIX
   -- Macro: IMMEDIATE_PREFIX
!      If defined, C string expressions to be used for the ‘%R’, ‘%L’,
!      ‘%U’, and ‘%I’ options of ‘asm_fprintf’ (see ‘final.cc’).  These
!      are useful when a single ‘md’ file must support multiple assembler
!      formats.  In that case, the various ‘tm.h’ files can define these
       macros differently.
  
   -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
!      If defined this macro should expand to a series of ‘case’
!      statements which will be parsed inside the ‘switch’ statement of
!      the ‘asm_fprintf’ function.  This allows targets to define extra
       printf formats which may useful when generating their assembler
       statements.  Note that uppercase letters are reserved for future
       generic extensions to asm_fprintf, and so are not available to
*************** otherwise it contains the 'sequence' rtx
*** 42506,42530 ****
       use, with zero as the first variant.
  
       If this macro is defined, you may use constructs of the form
!           '{option0|option1|option2...}'
       in the output templates of patterns (*note Output Template::) or in
!      the first argument of 'asm_fprintf'.  This construct outputs
!      'option0', 'option1', 'option2', etc., if the value of
!      'ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
       within these strings retain their usual meaning.  If there are
       fewer alternatives within the braces than the value of
!      'ASSEMBLER_DIALECT', the construct outputs nothing.  If it's needed
!      to print curly braces or '|' character in assembler output
!      directly, '%{', '%}' and '%|' can be used.
  
!      If you do not define this macro, the characters '{', '|' and '}' do
       not have any special meaning when used in templates or operands to
!      'asm_fprintf'.
  
!      Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX',
!      'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the
       variations in assembler language syntax with that mechanism.
!      Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax
       if the syntax variant are larger and involve such things as
       different opcodes or operand order.
  
--- 42507,42531 ----
       use, with zero as the first variant.
  
       If this macro is defined, you may use constructs of the form
!           ‘{option0|option1|option2...}’
       in the output templates of patterns (*note Output Template::) or in
!      the first argument of ‘asm_fprintf’.  This construct outputs
!      ‘option0’, ‘option1’, ‘option2’, etc., if the value of
!      ‘ASSEMBLER_DIALECT’ is zero, one, two, etc.  Any special characters
       within these strings retain their usual meaning.  If there are
       fewer alternatives within the braces than the value of
!      ‘ASSEMBLER_DIALECT’, the construct outputs nothing.  If it's needed
!      to print curly braces or ‘|’ character in assembler output
!      directly, ‘%{’, ‘%}’ and ‘%|’ can be used.
  
!      If you do not define this macro, the characters ‘{’, ‘|’ and ‘}’ do
       not have any special meaning when used in templates or operands to
!      ‘asm_fprintf’.
  
!      Define the macros ‘REGISTER_PREFIX’, ‘LOCAL_LABEL_PREFIX’,
!      ‘USER_LABEL_PREFIX’ and ‘IMMEDIATE_PREFIX’ if you can express the
       variations in assembler language syntax with that mechanism.
!      Define ‘ASSEMBLER_DIALECT’ and use the ‘{option0|option1}’ syntax
       if the syntax variant are larger and involve such things as
       different opcodes or operand order.
  
*************** This concerns dispatch tables.
*** 42551,42557 ****
       pseudo-instruction to generate a difference between two labels.
       VALUE and REL are the numbers of two internal labels.  The
       definitions of these labels are output using
!      '(*targetm.asm_out.internal_label)', and they must be printed in
       the same way here.  For example,
  
            fprintf (STREAM, "\t.word L%d-L%d\n",
--- 42552,42558 ----
       pseudo-instruction to generate a difference between two labels.
       VALUE and REL are the numbers of two internal labels.  The
       definitions of these labels are output using
!      ‘(*targetm.asm_out.internal_label)’, and they must be printed in
       the same way here.  For example,
  
            fprintf (STREAM, "\t.word L%d-L%d\n",
*************** This concerns dispatch tables.
*** 42560,42566 ****
       You must provide this macro on machines where the addresses in a
       dispatch table are relative to the table's own address.  If
       defined, GCC will also use this macro on all machines when
!      producing PIC.  BODY is the body of the 'ADDR_DIFF_VEC'; it is
       provided so that the mode and flags can be read.
  
   -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
--- 42561,42567 ----
       You must provide this macro on machines where the addresses in a
       dispatch table are relative to the table's own address.  If
       defined, GCC will also use this macro on all machines when
!      producing PIC.  BODY is the body of the ‘ADDR_DIFF_VEC’; it is
       provided so that the mode and flags can be read.
  
   -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
*************** This concerns dispatch tables.
*** 42571,42592 ****
       stream STREAM an assembler pseudo-instruction to generate a
       reference to a label.  VALUE is the number of an internal label
       whose definition is output using
!      '(*targetm.asm_out.internal_label)'.  For example,
  
            fprintf (STREAM, "\t.word L%d\n", VALUE)
  
   -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
       Define this if the label before a jump-table needs to be output
       specially.  The first three arguments are the same as for
!      '(*targetm.asm_out.internal_label)'; the fourth argument is the
!      jump-table which follows (a 'jump_table_data' containing an
!      'addr_vec' or 'addr_diff_vec').
  
!      This feature is used on system V to output a 'swbeg' statement for
       the table.
  
       If this macro is not defined, these labels are output with
!      '(*targetm.asm_out.internal_label)'.
  
   -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
       Define this if something special must be output at the end of a
--- 42572,42593 ----
       stream STREAM an assembler pseudo-instruction to generate a
       reference to a label.  VALUE is the number of an internal label
       whose definition is output using
!      ‘(*targetm.asm_out.internal_label)’.  For example,
  
            fprintf (STREAM, "\t.word L%d\n", VALUE)
  
   -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
       Define this if the label before a jump-table needs to be output
       specially.  The first three arguments are the same as for
!      ‘(*targetm.asm_out.internal_label)’; the fourth argument is the
!      jump-table which follows (a ‘jump_table_data’ containing an
!      ‘addr_vec’ or ‘addr_diff_vec’).
  
!      This feature is used on system V to output a ‘swbeg’ statement for
       the table.
  
       If this macro is not defined, these labels are output with
!      ‘(*targetm.asm_out.internal_label)’.
  
   -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
       Define this if something special must be output at the end of a
*************** This concerns dispatch tables.
*** 42629,42635 ****
  
   -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
            PERSONALITY)
!      If the target implements '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.
--- 42630,42636 ----
  
   -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
            PERSONALITY)
!      If the target implements ‘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.
*************** This concerns dispatch tables.
*** 42638,42653 ****
            *INSN)
       This target hook emits assembly directives required to unwind the
       given instruction.  This is only used when
!      'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'.
  
   -- Target Hook: rtx TARGET_ASM_MAKE_EH_SYMBOL_INDIRECT (rtx ORIGSYMBOL,
            bool PUBVIS)
       If necessary, modify personality and LSDA references to handle
!      indirection.  The original symbol is in 'origsymbol' and if
!      'pubvis' is true the symbol is visible outside the TU.
  
   -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
!      True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before
       the assembly for INSN has been emitted, false if the hook should be
       called afterward.
  
--- 42639,42654 ----
            *INSN)
       This target hook emits assembly directives required to unwind the
       given instruction.  This is only used when
!      ‘TARGET_EXCEPT_UNWIND_INFO’ returns ‘UI_TARGET’.
  
   -- Target Hook: rtx TARGET_ASM_MAKE_EH_SYMBOL_INDIRECT (rtx ORIGSYMBOL,
            bool PUBVIS)
       If necessary, modify personality and LSDA references to handle
!      indirection.  The original symbol is in ‘origsymbol’ and if
!      ‘pubvis’ is true the symbol is visible outside the TU.
  
   -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
!      True if the ‘TARGET_ASM_UNWIND_EMIT’ hook should be called before
       the assembly for INSN has been emitted, false if the hook should be
       called afterward.
  
*************** region.
*** 42675,42681 ****
       If defined, a C string constant for the name of the section
       containing exception handling frame unwind information.  If not
       defined, GCC will provide a default definition if the target
!      supports named sections.  'crtstuff.c' uses this macro to switch to
       the appropriate section.
  
       You should define this symbol if your target supports DWARF 2 frame
--- 42676,42682 ----
       If defined, a C string constant for the name of the section
       containing exception handling frame unwind information.  If not
       defined, GCC will provide a default definition if the target
!      supports named sections.  ‘crtstuff.c’ uses this macro to switch to
       the appropriate section.
  
       You should define this symbol if your target supports DWARF 2 frame
*************** region.
*** 42687,42693 ****
       labels and generate code to register the frames.
  
       This might be necessary, for instance, if the system linker will
!      not place the eh_frames in-between the sentinals from 'crtstuff.c',
       or if the system linker does garbage collection and sections cannot
       be marked as not to be collected.
  
--- 42688,42694 ----
       labels and generate code to register the frames.
  
       This might be necessary, for instance, if the system linker will
!      not place the eh_frames in-between the sentinals from ‘crtstuff.c’,
       or if the system linker does garbage collection and sections cannot
       be marked as not to be collected.
  
*************** region.
*** 42698,42769 ****
       read-only and read-write sections into a single read-write section.
  
   -- Macro: MASK_RETURN_ADDR
!      An rtx used to mask the return address found via 'RETURN_ADDR_RTX',
       so that it does not contain any extraneous set bits in it.
  
   -- Macro: DWARF2_UNWIND_INFO
       Define this macro to 0 if your target supports DWARF 2 frame unwind
       information, but it does not yet work with exception handling.
       Otherwise, if your target supports this information (if it defines
!      'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will
       provide a default definition of 1.
  
   -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
            (struct gcc_options *OPTS)
       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 'UI_TARGET'.  If the target is to
!      use the 'setjmp'/'longjmp'-based exception handling scheme, the
!      hook should return 'UI_SJLJ'.  If the target supports DWARF 2 frame
!      unwind information, the hook should return 'UI_DWARF2'.
  
       A target may, if exceptions are disabled, choose to return
!      'UI_NONE'.  This may end up simplifying other parts of
       target-specific code.  The default implementation of this hook
!      never returns 'UI_NONE'.
  
       Note that the value returned by this hook should be constant.  It
       should not depend on anything except the command-line switches
!      described by OPTS.  In particular, the setting 'UI_SJLJ' must be
       fixed at compiler start-up as C pre-processor macros and builtin
       functions related to exception handling are set up depending on
       this setting.
  
       The default implementation of the hook first honors the
!      '--enable-sjlj-exceptions' configure option, then
!      'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'.  If
!      'DWARF2_UNWIND_INFO' depends on command-line options, the target
       must define this hook so that OPTS is used correctly.
  
   -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
!      This variable should be set to 'true' if the target ABI requires
       unwinding tables even when exceptions are not used.  It must not be
       modified by command-line option processing.
  
   -- Macro: DONT_USE_BUILTIN_SETJMP
!      Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme
!      should use the 'setjmp'/'longjmp' functions from the C library
!      instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery.
  
   -- Macro: JMP_BUF_SIZE
!      This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also
!      defined.  Define this macro if the default size of 'jmp_buf' buffer
!      for the 'setjmp'/'longjmp'-based exception handling mechanism is
       not large enough, or if it is much too large.  The default size is
!      'FIRST_PSEUDO_REGISTER * sizeof(void *)'.
  
   -- Macro: DWARF_CIE_DATA_ALIGNMENT
       This macro need only be defined if the target might save registers
       in the function prologue at an offset to the stack pointer that is
!      not aligned to 'UNITS_PER_WORD'.  The definition should be the
!      negative minimum alignment if 'STACK_GROWS_DOWNWARD' is true, and
       the positive minimum alignment otherwise.  *Note DWARF::.  Only
       applicable if the target supports DWARF 2 frame unwind information.
  
   -- Target Hook: bool 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 'EH_FRAME_SECTION_NAME' is
       defined, and true otherwise.
  
   -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
--- 42699,42770 ----
       read-only and read-write sections into a single read-write section.
  
   -- Macro: MASK_RETURN_ADDR
!      An rtx used to mask the return address found via ‘RETURN_ADDR_RTX’,
       so that it does not contain any extraneous set bits in it.
  
   -- Macro: DWARF2_UNWIND_INFO
       Define this macro to 0 if your target supports DWARF 2 frame unwind
       information, but it does not yet work with exception handling.
       Otherwise, if your target supports this information (if it defines
!      ‘INCOMING_RETURN_ADDR_RTX’ and ‘OBJECT_FORMAT_ELF’), GCC will
       provide a default definition of 1.
  
   -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
            (struct gcc_options *OPTS)
       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 ‘UI_TARGET’.  If the target is to
!      use the ‘setjmp’/‘longjmp’-based exception handling scheme, the
!      hook should return ‘UI_SJLJ’.  If the target supports DWARF 2 frame
!      unwind information, the hook should return ‘UI_DWARF2’.
  
       A target may, if exceptions are disabled, choose to return
!      ‘UI_NONE’.  This may end up simplifying other parts of
       target-specific code.  The default implementation of this hook
!      never returns ‘UI_NONE’.
  
       Note that the value returned by this hook should be constant.  It
       should not depend on anything except the command-line switches
!      described by OPTS.  In particular, the setting ‘UI_SJLJ’ must be
       fixed at compiler start-up as C pre-processor macros and builtin
       functions related to exception handling are set up depending on
       this setting.
  
       The default implementation of the hook first honors the
!      ‘--enable-sjlj-exceptions’ configure option, then
!      ‘DWARF2_UNWIND_INFO’, and finally defaults to ‘UI_SJLJ’.  If
!      ‘DWARF2_UNWIND_INFO’ depends on command-line options, the target
       must define this hook so that OPTS is used correctly.
  
   -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
!      This variable should be set to ‘true’ if the target ABI requires
       unwinding tables even when exceptions are not used.  It must not be
       modified by command-line option processing.
  
   -- Macro: DONT_USE_BUILTIN_SETJMP
!      Define this macro to 1 if the ‘setjmp’/‘longjmp’-based scheme
!      should use the ‘setjmp’/‘longjmp’ functions from the C library
!      instead of the ‘__builtin_setjmp’/‘__builtin_longjmp’ machinery.
  
   -- Macro: JMP_BUF_SIZE
!      This macro has no effect unless ‘DONT_USE_BUILTIN_SETJMP’ is also
!      defined.  Define this macro if the default size of ‘jmp_buf’ buffer
!      for the ‘setjmp’/‘longjmp’-based exception handling mechanism is
       not large enough, or if it is much too large.  The default size is
!      ‘FIRST_PSEUDO_REGISTER * sizeof(void *)’.
  
   -- Macro: DWARF_CIE_DATA_ALIGNMENT
       This macro need only be defined if the target might save registers
       in the function prologue at an offset to the stack pointer that is
!      not aligned to ‘UNITS_PER_WORD’.  The definition should be the
!      negative minimum alignment if ‘STACK_GROWS_DOWNWARD’ is true, and
       the positive minimum alignment otherwise.  *Note DWARF::.  Only
       applicable if the target supports DWARF 2 frame unwind information.
  
   -- Target Hook: bool 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 ‘EH_FRAME_SECTION_NAME’ is
       defined, and true otherwise.
  
   -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
*************** region.
*** 42772,42779 ****
       if the register and its mode are represented in Dwarf in
       non-contiguous locations, or if the register should be represented
       in more than one register in Dwarf.  Otherwise, this hook should
!      return 'NULL_RTX'.  If not defined, the default is to return
!      'NULL_RTX'.
  
   -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO)
       Given a register, this hook should return the mode which the
--- 42773,42780 ----
       if the register and its mode are represented in Dwarf in
       non-contiguous locations, or if the register should be represented
       in more than one register in Dwarf.  Otherwise, this hook should
!      return ‘NULL_RTX’.  If not defined, the default is to return
!      ‘NULL_RTX’.
  
   -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO)
       Given a register, this hook should return the mode which the
*************** region.
*** 42785,42805 ****
       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.
!      It will be called by 'expand_builtin_init_dwarf_reg_sizes' after
       filling in a single size corresponding to each hard register;
       ADDRESS is the address of the table.
  
   -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
       This hook is used to output a reference from a frame unwinding
       table to the type_info object identified by SYM.  It should return
!      'true' if the reference was output.  Returning 'false' will cause
       the reference to be output using the normal Dwarf2 routines.
  
   -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
!      This flag should be set to 'true' on targets that use an ARM EABI
!      based unwinding library, and 'false' on other targets.  This
       effects the format of unwinding tables, and how the unwinder in
!      entered after running a cleanup.  The default is 'false'.
  
  
  File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
--- 42786,42806 ----
       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.
!      It will be called by ‘expand_builtin_init_dwarf_reg_sizes’ after
       filling in a single size corresponding to each hard register;
       ADDRESS is the address of the table.
  
   -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
       This hook is used to output a reference from a frame unwinding
       table to the type_info object identified by SYM.  It should return
!      ‘true’ if the reference was output.  Returning ‘false’ will cause
       the reference to be output using the normal Dwarf2 routines.
  
   -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
!      This flag should be set to ‘true’ on targets that use an ARM EABI
!      based unwinding library, and ‘false’ on other targets.  This
       effects the format of unwinding tables, and how the unwinder in
!      entered after running a cleanup.  The default is ‘false’.
  
  
  File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
*************** This describes commands for alignment.
*** 42819,42830 ****
  
       Unless it's necessary to inspect the LABEL parameter, it is better
       to set the variable ALIGN_JUMPS in the target's
!      'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
!      user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation.
  
   -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
       The alignment (log base 2) to put in front of LABEL, which follows
!      a 'BARRIER'.
  
       This macro need not be defined if you don't want any special
       alignment to be done at such a time.  Most machine descriptions do
--- 42820,42831 ----
  
       Unless it's necessary to inspect the LABEL parameter, it is better
       to set the variable ALIGN_JUMPS in the target's
!      ‘TARGET_OPTION_OVERRIDE’.  Otherwise, you should try to honor the
!      user's selection in ALIGN_JUMPS in a ‘JUMP_ALIGN’ implementation.
  
   -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
       The alignment (log base 2) to put in front of LABEL, which follows
!      a ‘BARRIER’.
  
       This macro need not be defined if you don't want any special
       alignment to be done at such a time.  Most machine descriptions do
*************** This describes commands for alignment.
*** 42839,42867 ****
       not currently define the macro.
  
       Unless it's necessary to inspect the LABEL parameter, it is better
!      to set the variable 'align_loops' in the target's
!      'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
!      user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation.
  
   -- Macro: LABEL_ALIGN (LABEL)
       The alignment (log base 2) to put in front of LABEL.  If
!      'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different
       alignment, the maximum of the specified values is used.
  
       Unless it's necessary to inspect the LABEL parameter, it is better
!      to set the variable 'align_labels' in the target's
!      'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
!      user's selection in 'align_labels' in a 'LABEL_ALIGN'
       implementation.
  
   -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
       A C statement to output to the stdio stream STREAM an assembler
       instruction to advance the location counter by NBYTES bytes.  Those
       bytes should be zero when loaded.  NBYTES will be a C expression of
!      type 'unsigned HOST_WIDE_INT'.
  
   -- Macro: ASM_NO_SKIP_IN_TEXT
!      Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the
       text section because it fails to put zeros in the bytes that are
       skipped.  This is true on many Unix systems, where the pseudo-op to
       skip bytes produces no-op instructions rather than zeros when used
--- 42840,42868 ----
       not currently define the macro.
  
       Unless it's necessary to inspect the LABEL parameter, it is better
!      to set the variable ‘align_loops’ in the target's
!      ‘TARGET_OPTION_OVERRIDE’.  Otherwise, you should try to honor the
!      user's selection in ‘align_loops’ in a ‘LOOP_ALIGN’ implementation.
  
   -- Macro: LABEL_ALIGN (LABEL)
       The alignment (log base 2) to put in front of LABEL.  If
!      ‘LABEL_ALIGN_AFTER_BARRIER’ / ‘LOOP_ALIGN’ specify a different
       alignment, the maximum of the specified values is used.
  
       Unless it's necessary to inspect the LABEL parameter, it is better
!      to set the variable ‘align_labels’ in the target's
!      ‘TARGET_OPTION_OVERRIDE’.  Otherwise, you should try to honor the
!      user's selection in ‘align_labels’ in a ‘LABEL_ALIGN’
       implementation.
  
   -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
       A C statement to output to the stdio stream STREAM an assembler
       instruction to advance the location counter by NBYTES bytes.  Those
       bytes should be zero when loaded.  NBYTES will be a C expression of
!      type ‘unsigned HOST_WIDE_INT’.
  
   -- Macro: ASM_NO_SKIP_IN_TEXT
!      Define this macro if ‘ASM_OUTPUT_SKIP’ should not be used in the
       text section because it fails to put zeros in the bytes that are
       skipped.  This is true on many Unix systems, where the pseudo-op to
       skip bytes produces no-op instructions rather than zeros when used
*************** This describes commands for alignment.
*** 42870,42879 ****
   -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
       A C statement to output to the stdio stream STREAM an assembler
       command to advance the location counter to a multiple of 2 to the
!      POWER bytes.  POWER will be a C expression of type 'int'.
  
   -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
!      Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
       for padding, if necessary.
  
   -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
--- 42871,42880 ----
   -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
       A C statement to output to the stdio stream STREAM an assembler
       command to advance the location counter to a multiple of 2 to the
!      POWER bytes.  POWER will be a C expression of type ‘int’.
  
   -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
!      Like ‘ASM_OUTPUT_ALIGN’, except that the "nop" instruction is used
       for padding, if necessary.
  
   -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
*************** This describes commands for alignment.
*** 42881,42887 ****
       command to advance the location counter to a multiple of 2 to the
       POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
       satisfy the alignment request.  POWER and MAX_SKIP will be a C
!      expression of type 'int'.
  
  
  File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
--- 42882,42888 ----
       command to advance the location counter to a multiple of 2 to the
       POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
       satisfy the alignment request.  POWER and MAX_SKIP will be a C
!      expression of type ‘int’.
  
  
  File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
*************** These macros affect all debugging format
*** 42917,42928 ****
  
       If two registers have consecutive numbers inside GCC, and they can
       be used as a pair to hold a multiword value, then they _must_ have
!      consecutive numbers after renumbering with 'DEBUGGER_REGNO'.
       Otherwise, debuggers will be unable to access such a pair, because
       they expect register pairs to be consecutive in their own numbering
       scheme.
  
!      If you find yourself defining 'DEBUGGER_REGNO' in way that does not
       preserve register pairs, then what you must do instead is redefine
       the actual register numbering scheme.
  
--- 42918,42929 ----
  
       If two registers have consecutive numbers inside GCC, and they can
       be used as a pair to hold a multiword value, then they _must_ have
!      consecutive numbers after renumbering with ‘DEBUGGER_REGNO’.
       Otherwise, debuggers will be unable to access such a pair, because
       they expect register pairs to be consecutive in their own numbering
       scheme.
  
!      If you find yourself defining ‘DEBUGGER_REGNO’ in way that does not
       preserve register pairs, then what you must do instead is redefine
       the actual register numbering scheme.
  
*************** These macros affect all debugging format
*** 42932,42938 ****
       default computation assumes that X is based on the frame-pointer
       and gives the offset from the frame-pointer.  This is required for
       targets that produce debugging output for debugger and allow the
!      frame-pointer to be eliminated when the '-g' option is used.
  
   -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
       A C expression that returns the integer offset value for an
--- 42933,42939 ----
       default computation assumes that X is based on the frame-pointer
       and gives the offset from the frame-pointer.  This is required for
       targets that produce debugging output for debugger and allow the
!      frame-pointer to be eliminated when the ‘-g’ option is used.
  
   -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
       A C expression that returns the integer offset value for an
*************** These macros affect all debugging format
*** 42941,42959 ****
  
   -- Macro: PREFERRED_DEBUGGING_TYPE
       A C expression that returns the type of debugging output GCC should
!      produce when the user specifies just '-g'.  Define this if you have
       arranged for GCC to support more than one format of debugging
!      output.  Currently, the allowable values are 'DWARF2_DEBUG',
!      'VMS_DEBUG', and 'VMS_AND_DWARF2_DEBUG'.
  
!      When the user specifies '-ggdb', GCC normally also uses the value
       of this macro to select the debugging output format, but with two
!      exceptions.  If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the
!      value 'DWARF2_DEBUG'.
  
       The value of this macro only affects the default debugging output;
       the user can always get a specific type of output by using
!      '-gdwarf-2', or '-gvms'.
  
   -- Macro: DEFAULT_GDB_EXTENSIONS
       Define this macro to control whether GCC should by default generate
--- 42942,42960 ----
  
   -- Macro: PREFERRED_DEBUGGING_TYPE
       A C expression that returns the type of debugging output GCC should
!      produce when the user specifies just ‘-g’.  Define this if you have
       arranged for GCC to support more than one format of debugging
!      output.  Currently, the allowable values are ‘DWARF2_DEBUG’,
!      ‘VMS_DEBUG’, and ‘VMS_AND_DWARF2_DEBUG’.
  
!      When the user specifies ‘-ggdb’, GCC normally also uses the value
       of this macro to select the debugging output format, but with two
!      exceptions.  If ‘DWARF2_DEBUGGING_INFO’ is defined, GCC uses the
!      value ‘DWARF2_DEBUG’.
  
       The value of this macro only affects the default debugging output;
       the user can always get a specific type of output by using
!      ‘-gdwarf-2’, or ‘-gvms’.
  
   -- Macro: DEFAULT_GDB_EXTENSIONS
       Define this macro to control whether GCC should by default generate
*************** Here are macros for DWARF output.
*** 42971,43007 ****
  
   -- Macro: DWARF2_DEBUGGING_INFO
       Define this macro if GCC should produce dwarf version 2 format
!      debugging output in response to the '-g' option.
  
       To support optional call frame debugging information, you must also
!      define 'INCOMING_RETURN_ADDR_RTX' and either set
!      'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
!      prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as
!      appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
  
   -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
            FUNCTION)
       Define this to enable the dwarf attribute
!      'DW_AT_calling_convention' to be emitted for each function.
!      Instead of an integer return the enum value for the 'DW_CC_' tag.
  
   -- Macro: DWARF2_FRAME_INFO
       Define this macro to a nonzero value if GCC should always output
!      Dwarf 2 frame information.  If 'TARGET_EXCEPT_UNWIND_INFO' (*note
!      Exception Region Output::) returns 'UI_DWARF2', and exceptions are
       enabled, GCC will output this information not matter how you define
!      'DWARF2_FRAME_INFO'.
  
   -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
       This hook defines the mechanism that will be used for describing
       frame unwind information to the debugger.  Normally the hook will
!      return 'UI_DWARF2' if DWARF 2 debug information is enabled, and
!      return 'UI_NONE' otherwise.
  
!      A target may return 'UI_DWARF2' even when DWARF 2 debug information
       is disabled in order to always output DWARF 2 frame information.
  
!      A target may return 'UI_TARGET' if it has ABI specified unwind
       tables.  This will suppress generation of the normal debug frame
       unwind information.
  
--- 42972,43008 ----
  
   -- Macro: DWARF2_DEBUGGING_INFO
       Define this macro if GCC should produce dwarf version 2 format
!      debugging output in response to the ‘-g’ option.
  
       To support optional call frame debugging information, you must also
!      define ‘INCOMING_RETURN_ADDR_RTX’ and either set
!      ‘RTX_FRAME_RELATED_P’ on the prologue insns if you use RTL for the
!      prologue, or call ‘dwarf2out_def_cfa’ and ‘dwarf2out_reg_save’ as
!      appropriate from ‘TARGET_ASM_FUNCTION_PROLOGUE’ if you don't.
  
   -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
            FUNCTION)
       Define this to enable the dwarf attribute
!      ‘DW_AT_calling_convention’ to be emitted for each function.
!      Instead of an integer return the enum value for the ‘DW_CC_’ tag.
  
   -- Macro: DWARF2_FRAME_INFO
       Define this macro to a nonzero value if GCC should always output
!      Dwarf 2 frame information.  If ‘TARGET_EXCEPT_UNWIND_INFO’ (*note
!      Exception Region Output::) returns ‘UI_DWARF2’, and exceptions are
       enabled, GCC will output this information not matter how you define
!      ‘DWARF2_FRAME_INFO’.
  
   -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
       This hook defines the mechanism that will be used for describing
       frame unwind information to the debugger.  Normally the hook will
!      return ‘UI_DWARF2’ if DWARF 2 debug information is enabled, and
!      return ‘UI_NONE’ otherwise.
  
!      A target may return ‘UI_DWARF2’ even when DWARF 2 debug information
       is disabled in order to always output DWARF 2 frame information.
  
!      A target may return ‘UI_TARGET’ if it has ABI specified unwind
       tables.  This will suppress generation of the normal debug frame
       unwind information.
  
*************** Here are macros for DWARF output.
*** 43013,43019 ****
  
   -- Macro: DWARF2_ASM_VIEW_DEBUG_INFO
       Define this macro to be a nonzero value if the assembler supports
!      view assignment and verification in '.loc'.  If it does not, but
       the user enables location views, the compiler may have to fallback
       to internal line number tables.
  
--- 43014,43020 ----
  
   -- Macro: DWARF2_ASM_VIEW_DEBUG_INFO
       Define this macro to be a nonzero value if the assembler supports
!      view assignment and verification in ‘.loc’.  If it does not, but
       the user enables location views, the compiler may have to fallback
       to internal line number tables.
  
*************** Here are macros for DWARF output.
*** 43030,43039 ****
       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
!      'hook_int_rtx_insn_0'.
  
   -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
!      True if the '.debug_pubtypes' and '.debug_pubnames' sections should
       be emitted.  These sections are not used on most platforms, and in
       particular GDB does not use them.
  
--- 43031,43040 ----
       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
!      ‘hook_int_rtx_insn_0’.
  
   -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
!      True if the ‘.debug_pubtypes’ and ‘.debug_pubnames’ sections should
       be emitted.  These sections are not used on most platforms, and in
       particular GDB does not use them.
  
*************** Here are macros for VMS debug format.
*** 43097,43107 ****
  
   -- Macro: VMS_DEBUGGING_INFO
       Define this macro if GCC should produce debugging output for VMS in
!      response to the '-g' option.  The default behavior for VMS is to
!      generate minimal debug info for a traceback in the absence of '-g'
!      unless explicitly overridden with '-g0'.  This behavior is
!      controlled by 'TARGET_OPTION_OPTIMIZATION' and
!      'TARGET_OPTION_OVERRIDE'.
  
  
  File: gccint.info,  Node: CTF Debug,  Next: BTF Debug,  Prev: VMS Debug,  Up: Debugging Info
--- 43098,43108 ----
  
   -- Macro: VMS_DEBUGGING_INFO
       Define this macro if GCC should produce debugging output for VMS in
!      response to the ‘-g’ option.  The default behavior for VMS is to
!      generate minimal debug info for a traceback in the absence of ‘-g’
!      unless explicitly overridden with ‘-g0’.  This behavior is
!      controlled by ‘TARGET_OPTION_OPTIMIZATION’ and
!      ‘TARGET_OPTION_OVERRIDE’.
  
  
  File: gccint.info,  Node: CTF Debug,  Next: BTF Debug,  Prev: VMS Debug,  Up: Debugging Info
*************** Here are macros for CTF debug format.
*** 43113,43119 ****
  
   -- Macro: CTF_DEBUGGING_INFO
       Define this macro if GCC should produce debugging output in CTF
!      debug format in response to the '-gctf' option.
  
  
  File: gccint.info,  Node: BTF Debug,  Prev: CTF Debug,  Up: Debugging Info
--- 43114,43120 ----
  
   -- Macro: CTF_DEBUGGING_INFO
       Define this macro if GCC should produce debugging output in CTF
!      debug format in response to the ‘-gctf’ option.
  
  
  File: gccint.info,  Node: BTF Debug,  Prev: CTF Debug,  Up: Debugging Info
*************** Here are macros for BTF debug format.
*** 43125,43131 ****
  
   -- Macro: BTF_DEBUGGING_INFO
       Define this macro if GCC should produce debugging output in BTF
!      debug format in response to the '-gbtf' option.
  
  
  File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
--- 43126,43132 ----
  
   -- Macro: BTF_DEBUGGING_INFO
       Define this macro if GCC should produce debugging output in BTF
!      debug format in response to the ‘-gbtf’ option.
  
  
  File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
*************** the target's arithmetic.  To ensure cons
*** 43147,43161 ****
  emulation to work with floating point values, even when the host and
  target floating point formats are identical.
  
!  The following macros are provided by 'real.h' for the compiler to use.
  All parts of the compiler which generate or optimize floating-point
  calculations must use these macros.  They may evaluate their operands
  more than once, so operands must not have side effects.
  
   -- Macro: REAL_VALUE_TYPE
       The C data type to be used to hold a floating point value in the
!      target machine's format.  Typically this is a 'struct' containing
!      an array of 'HOST_WIDE_INT', but all code should treat it as an
       opaque quantity.
  
   -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
--- 43148,43162 ----
  emulation to work with floating point values, even when the host and
  target floating point formats are identical.
  
!  The following macros are provided by ‘real.h’ for the compiler to use.
  All parts of the compiler which generate or optimize floating-point
  calculations must use these macros.  They may evaluate their operands
  more than once, so operands must not have side effects.
  
   -- Macro: REAL_VALUE_TYPE
       The C data type to be used to hold a floating point value in the
!      target machine's format.  Typically this is a ‘struct’ containing
!      an array of ‘HOST_WIDE_INT’, but all code should treat it as an
       opaque quantity.
  
   -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
*************** The following macros control mode switch
*** 43207,43237 ****
       PR bit requires a general purpose register as a scratch register,
       hence these FPSCR sets have to be inserted before reload, i.e. you
       cannot put this into instruction emitting or
!      'TARGET_MACHINE_DEPENDENT_REORG'.
  
       You can have multiple entities that are mode-switched, some of
       which might only be needed conditionally.  The entities are
!      identified by their index into the 'NUM_MODES_FOR_MODE_SWITCHING'
       initializer, with the length of the initializer determining the
       number of entities.
  
!      'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that
       needs mode-switching.
  
       If you define this macro, you also have to define
!      'NUM_MODES_FOR_MODE_SWITCHING', 'TARGET_MODE_NEEDED',
!      'TARGET_MODE_PRIORITY' and 'TARGET_MODE_EMIT'.  The other macros in
       this section are optional.
  
   -- Macro: NUM_MODES_FOR_MODE_SWITCHING
!      If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as
       initializer for an array of integers.  Each initializer element N
       refers to an entity that needs mode switching, and specifies the
       number of different modes that are defined for that entity.  The
       position of the element in the initializer--starting counting at
       zero--determines the integer that is used to refer to the
       mode-switched entity in question.  Modes are represented as numbers
!      0 ... N - 1.  In mode arguments and return values, N either
       represents an unknown mode or "no mode", depending on context.
  
   -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int
--- 43208,43238 ----
       PR bit requires a general purpose register as a scratch register,
       hence these FPSCR sets have to be inserted before reload, i.e. you
       cannot put this into instruction emitting or
!      ‘TARGET_MACHINE_DEPENDENT_REORG’.
  
       You can have multiple entities that are mode-switched, some of
       which might only be needed conditionally.  The entities are
!      identified by their index into the ‘NUM_MODES_FOR_MODE_SWITCHING’
       initializer, with the length of the initializer determining the
       number of entities.
  
!      ‘OPTIMIZE_MODE_SWITCHING’ should return nonzero for any ENTITY that
       needs mode-switching.
  
       If you define this macro, you also have to define
!      ‘NUM_MODES_FOR_MODE_SWITCHING’, ‘TARGET_MODE_NEEDED’,
!      ‘TARGET_MODE_PRIORITY’ and ‘TARGET_MODE_EMIT’.  The other macros in
       this section are optional.
  
   -- Macro: NUM_MODES_FOR_MODE_SWITCHING
!      If you define ‘OPTIMIZE_MODE_SWITCHING’, you have to define this as
       initializer for an array of integers.  Each initializer element N
       refers to an entity that needs mode switching, and specifies the
       number of different modes that are defined for that entity.  The
       position of the element in the initializer--starting counting at
       zero--determines the integer that is used to refer to the
       mode-switched entity in question.  Modes are represented as numbers
!      0 ... N − 1.  In mode arguments and return values, N either
       represents an unknown mode or "no mode", depending on context.
  
   -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int
*************** The following macros control mode switch
*** 43246,43252 ****
   -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN,
            HARD_REG_SET REGS_LIVE)
       ENTITY is an integer specifying a mode-switched entity.  If
!      'OPTIMIZE_MODE_SWITCHING' is defined, you must define this hook to
       return the mode that ENTITY must be switched into prior to the
       execution of INSN, or the number of modes if INSN has no such
       requirement.  REGS_LIVE contains the set of hard registers that are
--- 43247,43253 ----
   -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN,
            HARD_REG_SET REGS_LIVE)
       ENTITY is an integer specifying a mode-switched entity.  If
!      ‘OPTIMIZE_MODE_SWITCHING’ is defined, you must define this hook to
       return the mode that ENTITY must be switched into prior to the
       execution of INSN, or the number of modes if INSN has no such
       requirement.  REGS_LIVE contains the set of hard registers that are
*************** The following macros control mode switch
*** 43271,43277 ****
            MODE2)
       By default, the mode-switching pass assumes that a given entity's
       modes are mutually exclusive.  This means that the pass can only
!      tell 'TARGET_MODE_EMIT' about an entity's previous mode if all
       incoming paths of execution leave the entity in the same state.
  
       However, some entities might have overlapping, non-exclusive modes,
--- 43272,43278 ----
            MODE2)
       By default, the mode-switching pass assumes that a given entity's
       modes are mutually exclusive.  This means that the pass can only
!      tell ‘TARGET_MODE_EMIT’ about an entity's previous mode if all
       incoming paths of execution leave the entity in the same state.
  
       However, some entities might have overlapping, non-exclusive modes,
*************** The following macros control mode switch
*** 43296,43302 ****
       to have in B1, or the number of modes if there is no such
       requirement.  If the hook returns a required mode for more than one
       of B1's outgoing edges, those modes are combined as for
!      'TARGET_MODE_CONFLUENCE'.
  
       For example, suppose there is a "one-shot" entity that, for a given
       execution of a function, either stays off or makes exactly one
--- 43297,43303 ----
       to have in B1, or the number of modes if there is no such
       requirement.  If the hook returns a required mode for more than one
       of B1's outgoing edges, those modes are combined as for
!      ‘TARGET_MODE_CONFLUENCE’.
  
       For example, suppose there is a "one-shot" entity that, for a given
       execution of a function, either stays off or makes exactly one
*************** The following macros control mode switch
*** 43317,43331 ****
       If this hook is defined, it is evaluated for every ENTITY that
       needs mode switching.  It should return the mode that ENTITY is
       guaranteed to be in on entry to the function, or the number of
!      modes if there is no such guarantee.  If 'TARGET_MODE_ENTRY' is
!      defined then 'TARGET_MODE_EXIT' must be defined.
  
   -- Target Hook: int TARGET_MODE_EXIT (int ENTITY)
       If this hook is defined, it is evaluated for every ENTITY that
       needs mode switching.  It should return the mode that ENTITY must
       be in on return from the function, or the number of modes if there
!      is no such requirement.  If 'TARGET_MODE_EXIT' is defined then
!      'TARGET_MODE_ENTRY' must be defined.
  
   -- Target Hook: int TARGET_MODE_EH_HANDLER (int ENTITY)
       If this hook is defined, it should return the mode that ENTITY is
--- 43318,43332 ----
       If this hook is defined, it is evaluated for every ENTITY that
       needs mode switching.  It should return the mode that ENTITY is
       guaranteed to be in on entry to the function, or the number of
!      modes if there is no such guarantee.  If ‘TARGET_MODE_ENTRY’ is
!      defined then ‘TARGET_MODE_EXIT’ must be defined.
  
   -- Target Hook: int TARGET_MODE_EXIT (int ENTITY)
       If this hook is defined, it is evaluated for every ENTITY that
       needs mode switching.  It should return the mode that ENTITY must
       be in on return from the function, or the number of modes if there
!      is no such requirement.  If ‘TARGET_MODE_EXIT’ is defined then
!      ‘TARGET_MODE_ENTRY’ must be defined.
  
   -- Target Hook: int TARGET_MODE_EH_HANDLER (int ENTITY)
       If this hook is defined, it should return the mode that ENTITY is
*************** The following macros control mode switch
*** 43335,43374 ****
   -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N)
       This hook specifies the order in which modes for ENTITY are
       processed.  0 is the highest priority,
!      'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The hook
       returns an integer designating a mode for ENTITY.  For any fixed
!      ENTITY, 'mode_priority' (ENTITY, N) shall be a bijection in 0 ...
!      'num_modes_for_mode_switching[ENTITY] - 1'.
  
  
  File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
  
! 18.24 Defining target-specific uses of '__attribute__'
  ======================================================
  
  Target-specific attributes may be defined for functions, data and types.
  These are described using the following target hooks; they also need to
! be documented in 'extend.texi'.
  
   -- Target Hook: array_slice<const struct scoped_attribute_specs *const>
            TARGET_ATTRIBUTE_TABLE
       If defined, this target hook provides an array of
!      'scoped_attribute_spec's (defined in 'attribs.h') that specify the
       machine-specific attributes for this target.  The information
       includes some of the restrictions on the entities to which these
       attributes are applied and the arguments that the attributes take.
  
       In C and C++, these attributes are associated with two syntaxes:
!      the traditional GNU '__attribute__' syntax and the standard '[[]]'
       syntax.  Attributes that support the GNU syntax must be placed in
!      the 'gnu' namespace.  Such attributes can then also be written
!      '[[gnu::...]]'.  Attributes that use only the standard syntax
       should be placed in whichever namespace the attribute specification
       requires.  For example, a target might choose to support
!      vendor-specific '[[]]' attributes that the vendor places in their
       own namespace.
  
!      Targets that only define attributes in the 'gnu' namespace can uase
       the following shorthand to define the table:
  
            TARGET_GNU_ATTRIBUTES (CPU_ATTRIBUTE_TABLE, {
--- 43336,43375 ----
   -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N)
       This hook specifies the order in which modes for ENTITY are
       processed.  0 is the highest priority,
!      ‘NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1’ the lowest.  The hook
       returns an integer designating a mode for ENTITY.  For any fixed
!      ENTITY, ‘mode_priority’ (ENTITY, N) shall be a bijection in 0 ...
!      ‘num_modes_for_mode_switching[ENTITY] - 1’.
  
  
  File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
  
! 18.24 Defining target-specific uses of ‘__attribute__’
  ======================================================
  
  Target-specific attributes may be defined for functions, data and types.
  These are described using the following target hooks; they also need to
! be documented in ‘extend.texi’.
  
   -- Target Hook: array_slice<const struct scoped_attribute_specs *const>
            TARGET_ATTRIBUTE_TABLE
       If defined, this target hook provides an array of
!      ‘scoped_attribute_spec’s (defined in ‘attribs.h’) that specify the
       machine-specific attributes for this target.  The information
       includes some of the restrictions on the entities to which these
       attributes are applied and the arguments that the attributes take.
  
       In C and C++, these attributes are associated with two syntaxes:
!      the traditional GNU ‘__attribute__’ syntax and the standard ‘[[]]’
       syntax.  Attributes that support the GNU syntax must be placed in
!      the ‘gnu’ namespace.  Such attributes can then also be written
!      ‘[[gnu::...]]’.  Attributes that use only the standard syntax
       should be placed in whichever namespace the attribute specification
       requires.  For example, a target might choose to support
!      vendor-specific ‘[[]]’ attributes that the vendor places in their
       own namespace.
  
!      Targets that only define attributes in the ‘gnu’ namespace can uase
       the following shorthand to define the table:
  
            TARGET_GNU_ATTRIBUTES (CPU_ATTRIBUTE_TABLE, {
*************** be documented in 'extend.texi'.
*** 43402,43444 ****
            TYPE2)
       Define this target hook if the merging of type attributes needs
       special handling.  If defined, the result is a list of the combined
!      'TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
!      'comptypes' has already been called and returned 1.  This function
!      may call 'merge_attributes' to handle machine-independent merging.
  
   -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
            NEWDECL)
       Define this target hook if the merging of decl attributes needs
       special handling.  If defined, the result is a list of the combined
!      'DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
       declaration of OLDDECL.  Examples of when this is needed are when
       one attribute overrides another, or when an attribute is nullified
       by a subsequent definition.  This function may call
!      'merge_attributes' to handle machine-independent merging.
  
!      If the only target-specific handling you require is 'dllimport' for
       Microsoft Windows targets, you should define the macro
!      'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'.  The compiler will then
!      define a function called 'merge_dllimport_decl_attributes' which
       can then be defined as the expansion of
!      'TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
!      'handle_dll_attribute' in the attribute table for your port to
!      perform initial processing of the 'dllimport' and 'dllexport'
!      attributes.  This is done in 'i386/cygwin.h' and 'i386/i386.cc',
       for example.
  
   -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
            DECL)
!      DECL is a variable or function with '__attribute__((dllimport))'
       specified.  Use this hook if the target needs to add extra
!      validation checks to 'handle_dll_attribute'.
  
   -- Macro: TARGET_DECLSPEC
       Define this macro to a nonzero value if you want to treat
!      '__declspec(X)' as equivalent to '__attribute((X))'.  By default,
       this behavior is enabled only for targets that define
!      'TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
!      '__declspec' is via a built-in macro, but you should not rely on
       this implementation detail.
  
   -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
--- 43403,43445 ----
            TYPE2)
       Define this target hook if the merging of type attributes needs
       special handling.  If defined, the result is a list of the combined
!      ‘TYPE_ATTRIBUTES’ of TYPE1 and TYPE2.  It is assumed that
!      ‘comptypes’ has already been called and returned 1.  This function
!      may call ‘merge_attributes’ to handle machine-independent merging.
  
   -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
            NEWDECL)
       Define this target hook if the merging of decl attributes needs
       special handling.  If defined, the result is a list of the combined
!      ‘DECL_ATTRIBUTES’ of OLDDECL and NEWDECL.  NEWDECL is a duplicate
       declaration of OLDDECL.  Examples of when this is needed are when
       one attribute overrides another, or when an attribute is nullified
       by a subsequent definition.  This function may call
!      ‘merge_attributes’ to handle machine-independent merging.
  
!      If the only target-specific handling you require is ‘dllimport’ for
       Microsoft Windows targets, you should define the macro
!      ‘TARGET_DLLIMPORT_DECL_ATTRIBUTES’ to ‘1’.  The compiler will then
!      define a function called ‘merge_dllimport_decl_attributes’ which
       can then be defined as the expansion of
!      ‘TARGET_MERGE_DECL_ATTRIBUTES’.  You can also add
!      ‘handle_dll_attribute’ in the attribute table for your port to
!      perform initial processing of the ‘dllimport’ and ‘dllexport’
!      attributes.  This is done in ‘i386/cygwin.h’ and ‘i386/i386.cc’,
       for example.
  
   -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
            DECL)
!      DECL is a variable or function with ‘__attribute__((dllimport))’
       specified.  Use this hook if the target needs to add extra
!      validation checks to ‘handle_dll_attribute’.
  
   -- Macro: TARGET_DECLSPEC
       Define this macro to a nonzero value if you want to treat
!      ‘__declspec(X)’ as equivalent to ‘__attribute((X))’.  By default,
       this behavior is enabled only for targets that define
!      ‘TARGET_DLLIMPORT_DECL_ATTRIBUTES’.  The current implementation of
!      ‘__declspec’ is via a built-in macro, but you should not rely on
       this implementation detail.
  
   -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
*************** be documented in 'extend.texi'.
*** 43450,43456 ****
       which is being created.  The ATTR_PTR argument is a pointer to the
       attribute list for this decl.  The list itself should not be
       modified, since it may be shared with other decls, but attributes
!      may be chained on the head of the list and '*ATTR_PTR' modified to
       point to the new attributes, or a copy of the list may be made if
       further changes are needed.
  
--- 43451,43457 ----
       which is being created.  The ATTR_PTR argument is a pointer to the
       attribute list for this decl.  The list itself should not be
       modified, since it may be shared with other decls, but attributes
!      may be chained on the head of the list and ‘*ATTR_PTR’ modified to
       point to the new attributes, or a copy of the list may be made if
       further changes are needed.
  
*************** be documented in 'extend.texi'.
*** 43464,43553 ****
  
   -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
            FNDECL)
!      This target hook returns 'true' if it is OK to inline FNDECL into
       the current function, despite its having target-specific
!      attributes, 'false' otherwise.  By default, if a function has a
       target specific attribute attached to it, it will not be inlined.
  
   -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree
            NAME, tree ARGS, int FLAGS)
!      This hook is called to parse 'attribute(target("..."))', which
       allows setting target-specific options on individual functions.
       These function-specific options may differ from the options
!      specified on the command line.  The hook should return 'true' if
       the options are valid.
  
!      The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in
       the function declaration to hold a pointer to a target-specific
!      'struct cl_target_option' structure.
  
   -- Target Hook: bool TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P (tree
            FNDECL, tree NAME, tree ARGS, int FLAGS)
!      This hook is called to parse 'attribute(target_version("..."))',
       which allows setting target-specific options on individual function
       versions.  These function-specific options may differ from the
       options specified on the command line.  The hook should return
!      'true' if the options are valid.
  
!      The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in
       the function declaration to hold a pointer to a target-specific
!      'struct cl_target_option' structure.
  
   -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR,
            struct gcc_options *OPTS, struct gcc_options *OPTS_SET)
       This hook is called to save any additional target-specific
!      information in the 'struct cl_target_option' structure for
!      function-specific options from the 'struct gcc_options' structure.
       *Note Option file format::.
  
   -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS,
            struct gcc_options *OPTS_SET, struct cl_target_option *PTR)
       This hook is called to restore any additional target-specific
!      information in the 'struct cl_target_option' structure for
!      function-specific options to the 'struct gcc_options' structure.
  
   -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct
            cl_target_option *PTR)
       This hook is called to update target-specific information in the
!      'struct cl_target_option' structure after it is streamed in from
       LTO bytecode.
  
   -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
            struct cl_target_option *PTR)
       This hook is called to print any additional target-specific
!      information in the 'struct cl_target_option' structure for
       function-specific options.
  
   -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
            POP_TARGET)
!      This target hook parses the options for '#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 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook.
  
   -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
       Sometimes certain combinations of command options do not make sense
       on a particular target machine.  You can override the hook
!      'TARGET_OPTION_OVERRIDE' to take account of this.  This hooks is
       called once just after all the command options have been parsed.
  
       Don't use this hook to turn on various extra optimizations for
!      '-O'.  That is what 'TARGET_OPTION_OPTIMIZATION' is for.
  
       If you need to do something whenever the optimization level is
       changed via the optimize attribute or pragma, see
!      'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
  
   -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree
            DECL2)
!      This target hook returns 'true' if DECL1 and DECL2 are versions of
       the same function.  DECL1 and 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.
  
   -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
!      This target hook returns 'false' if the CALLER function cannot
       inline 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
--- 43465,43554 ----
  
   -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
            FNDECL)
!      This target hook returns ‘true’ if it is OK to inline FNDECL into
       the current function, despite its having target-specific
!      attributes, ‘false’ otherwise.  By default, if a function has a
       target specific attribute attached to it, it will not be inlined.
  
   -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree
            NAME, tree ARGS, int FLAGS)
!      This hook is called to parse ‘attribute(target("..."))’, which
       allows setting target-specific options on individual functions.
       These function-specific options may differ from the options
!      specified on the command line.  The hook should return ‘true’ if
       the options are valid.
  
!      The hook should set the ‘DECL_FUNCTION_SPECIFIC_TARGET’ field in
       the function declaration to hold a pointer to a target-specific
!      ‘struct cl_target_option’ structure.
  
   -- Target Hook: bool TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P (tree
            FNDECL, tree NAME, tree ARGS, int FLAGS)
!      This hook is called to parse ‘attribute(target_version("..."))’,
       which allows setting target-specific options on individual function
       versions.  These function-specific options may differ from the
       options specified on the command line.  The hook should return
!      ‘true’ if the options are valid.
  
!      The hook should set the ‘DECL_FUNCTION_SPECIFIC_TARGET’ field in
       the function declaration to hold a pointer to a target-specific
!      ‘struct cl_target_option’ structure.
  
   -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR,
            struct gcc_options *OPTS, struct gcc_options *OPTS_SET)
       This hook is called to save any additional target-specific
!      information in the ‘struct cl_target_option’ structure for
!      function-specific options from the ‘struct gcc_options’ structure.
       *Note Option file format::.
  
   -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS,
            struct gcc_options *OPTS_SET, struct cl_target_option *PTR)
       This hook is called to restore any additional target-specific
!      information in the ‘struct cl_target_option’ structure for
!      function-specific options to the ‘struct gcc_options’ structure.
  
   -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct
            cl_target_option *PTR)
       This hook is called to update target-specific information in the
!      ‘struct cl_target_option’ structure after it is streamed in from
       LTO bytecode.
  
   -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
            struct cl_target_option *PTR)
       This hook is called to print any additional target-specific
!      information in the ‘struct cl_target_option’ structure for
       function-specific options.
  
   -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
            POP_TARGET)
!      This target hook parses the options for ‘#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 ‘TARGET_OPTION_VALID_ATTRIBUTE_P’ hook.
  
   -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
       Sometimes certain combinations of command options do not make sense
       on a particular target machine.  You can override the hook
!      ‘TARGET_OPTION_OVERRIDE’ to take account of this.  This hooks is
       called once just after all the command options have been parsed.
  
       Don't use this hook to turn on various extra optimizations for
!      ‘-O’.  That is what ‘TARGET_OPTION_OPTIMIZATION’ is for.
  
       If you need to do something whenever the optimization level is
       changed via the optimize attribute or pragma, see
!      ‘TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE’
  
   -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree
            DECL2)
!      This target hook returns ‘true’ if DECL1 and DECL2 are versions of
       the same function.  DECL1 and 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.
  
   -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
!      This target hook returns ‘false’ if the CALLER function cannot
       inline 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
*************** be documented in 'extend.texi'.
*** 43563,43569 ****
       with the conservative analysis on all statements of the callee if
       we are able to guarantee the callee does not exploit any
       instructions from the mismatch isa feature, it would be safe to
!      allow the caller to inline the callee.  INFO is one 'unsigned int'
       value to record information in which one set bit indicates one
       corresponding feature is detected in the analysis, STMT is the
       statement being analyzed.  Return true if target still need to
--- 43564,43570 ----
       with the conservative analysis on all statements of the callee if
       we are able to guarantee the callee does not exploit any
       instructions from the mismatch isa feature, it would be safe to
!      allow the caller to inline the callee.  INFO is one ‘unsigned int’
       value to record information in which one set bit indicates one
       corresponding feature is detected in the analysis, STMT is the
       statement being analyzed.  Return true if target still need to
*************** be documented in 'extend.texi'.
*** 43575,43585 ****
            unsigned int& INFO)
       Allow target to check early whether it is necessary to analyze all
       gimple statements in the given function to update target specific
!      information for inlining.  See hook 'update_ipa_fn_target_info' for
       usage example of target specific information.  This hook is
       expected to be invoked ahead of the iterating with hook
!      'update_ipa_fn_target_info'.  DECL is the function being analyzed,
!      INFO is the same as what in hook 'update_ipa_fn_target_info',
       target can do one time update into INFO without iterating for some
       case.  Return true if target decides to analyze all gimple
       statements to collect information, otherwise return false.  The
--- 43576,43586 ----
            unsigned int& INFO)
       Allow target to check early whether it is necessary to analyze all
       gimple statements in the given function to update target specific
!      information for inlining.  See hook ‘update_ipa_fn_target_info’ for
       usage example of target specific information.  This hook is
       expected to be invoked ahead of the iterating with hook
!      ‘update_ipa_fn_target_info’.  DECL is the function being analyzed,
!      INFO is the same as what in hook ‘update_ipa_fn_target_info’,
       target can do one time update into INFO without iterating for some
       case.  Return true if target decides to analyze all gimple
       statements to collect information, otherwise return false.  The
*************** the current thread's instance of the TLS
*** 43616,43648 ****
   -- Target Hook: const char * 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 'NULL', all TLS objects will have
       explicit initializers.  The default causes libgcc's emulated TLS
       registration function to be used.
  
   -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
       Contains the name of the section in which TLS control variables
!      should be placed.  The default of 'NULL' allows these to be placed
       in any section.
  
   -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
       Contains the name of the section in which TLS initializers should
!      be placed.  The default of 'NULL' allows these to be placed in any
       section.
  
   -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
       Contains the prefix to be prepended to TLS control variable names.
!      The default of 'NULL' uses a target-specific prefix.
  
   -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
       Contains the prefix to be prepended to TLS initializer objects.
!      The default of 'NULL' uses a target-specific prefix.
  
   -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
       Specifies a function that generates the FIELD_DECLs for a TLS
       control object type.  TYPE is the RECORD_TYPE the fields are for
       and NAME should be filled with the structure tag, if the default of
!      '__emutls_object' is unsuitable.  The default creates a type
       suitable for libgcc's emulated TLS function.
  
   -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
--- 43617,43649 ----
   -- Target Hook: const char * 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 ‘NULL’, all TLS objects will have
       explicit initializers.  The default causes libgcc's emulated TLS
       registration function to be used.
  
   -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
       Contains the name of the section in which TLS control variables
!      should be placed.  The default of ‘NULL’ allows these to be placed
       in any section.
  
   -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
       Contains the name of the section in which TLS initializers should
!      be placed.  The default of ‘NULL’ allows these to be placed in any
       section.
  
   -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
       Contains the prefix to be prepended to TLS control variable names.
!      The default of ‘NULL’ uses a target-specific prefix.
  
   -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
       Contains the prefix to be prepended to TLS initializer objects.
!      The default of ‘NULL’ uses a target-specific prefix.
  
   -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
       Specifies a function that generates the FIELD_DECLs for a TLS
       control object type.  TYPE is the RECORD_TYPE the fields are for
       and NAME should be filled with the structure tag, if the default of
!      ‘__emutls_object’ is unsuitable.  The default creates a type
       suitable for libgcc's emulated TLS function.
  
   -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
*************** the current thread's instance of the TLS
*** 43658,43664 ****
       optimize single objects.  The default is false.
  
   -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
!      Specifies whether a DWARF 'DW_OP_form_tls_address' location
       descriptor may be used to describe emulated TLS control objects.
  
  
--- 43659,43665 ----
       optimize single objects.  The default is false.
  
   -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
!      Specifies whether a DWARF ‘DW_OP_form_tls_address’ location
       descriptor may be used to describe emulated TLS control objects.
  
  
*************** and memory using asm-ized variables.  Fo
*** 43679,43685 ****
  
   ("c0r1" is the default name of register 1 in coprocessor 0; alternate
  names may be added as described below, or the default names may be
! overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
  
   Coprocessor registers are assumed to be epilogue-used; sets to them
  will be preserved even if it does not appear that the register is used
--- 43680,43686 ----
  
   ("c0r1" is the default name of register 1 in coprocessor 0; alternate
  names may be added as described below, or the default names may be
! overridden entirely in ‘SUBTARGET_CONDITIONAL_REGISTER_USAGE’.)
  
   Coprocessor registers are assumed to be epilogue-used; sets to them
  will be preserved even if it does not appear that the register is used
*************** File: gccint.info,  Node: PCH Target,  N
*** 43697,43727 ****
  
   -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
       This hook returns a pointer to the data needed by
!      'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in
       bytes.
  
   -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
            size_t SZ)
       This hook checks whether the options used to create a PCH file are
!      compatible with the current settings.  It returns 'NULL' if so and
       a suitable error message if not.  Error messages will be presented
!      to the user and must be localized using '_(MSG)'.
  
!      DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY'
       when the PCH file was created and SZ is the size of that data in
       bytes.  It's safe to assume that the data was created by the same
       version of the compiler, so no format checking is needed.
  
!      The default definition of 'default_pch_valid_p' should be suitable
       for most targets.
  
   -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
            PCH_FLAGS)
       If this hook is nonnull, the default implementation of
!      'TARGET_PCH_VALID_P' will use it to check for compatible values of
!      'target_flags'.  PCH_FLAGS specifies the value that 'target_flags'
       had when the PCH file was created.  The return value is the same as
!      for 'TARGET_PCH_VALID_P'.
  
   -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void)
       Called before writing out a PCH file.  If the target has some
--- 43698,43728 ----
  
   -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
       This hook returns a pointer to the data needed by
!      ‘TARGET_PCH_VALID_P’ and sets ‘*SZ’ to the size of the data in
       bytes.
  
   -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
            size_t SZ)
       This hook checks whether the options used to create a PCH file are
!      compatible with the current settings.  It returns ‘NULL’ if so and
       a suitable error message if not.  Error messages will be presented
!      to the user and must be localized using ‘_(MSG)’.
  
!      DATA is the data that was returned by ‘TARGET_GET_PCH_VALIDITY’
       when the PCH file was created and SZ is the size of that data in
       bytes.  It's safe to assume that the data was created by the same
       version of the compiler, so no format checking is needed.
  
!      The default definition of ‘default_pch_valid_p’ should be suitable
       for most targets.
  
   -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
            PCH_FLAGS)
       If this hook is nonnull, the default implementation of
!      ‘TARGET_PCH_VALID_P’ will use it to check for compatible values of
!      ‘target_flags’.  PCH_FLAGS specifies the value that ‘target_flags’
       had when the PCH file was created.  The return value is the same as
!      for ‘TARGET_PCH_VALID_P’.
  
   -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void)
       Called before writing out a PCH file.  If the target has some
*************** File: gccint.info,  Node: C++ ABI,  Next
*** 43742,43775 ****
  
   -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
       This hook determines how guard variables are used.  It should
!      return 'false' (the default) if the first byte should be used.  A
!      return value of 'true' indicates that only the least significant
       bit should be used.
  
   -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
       This hook returns the size of the cookie to use when allocating an
       array whose elements have the indicated TYPE.  Assumes that it is
!      already known that a cookie is needed.  The default is 'max(sizeof
!      (size_t), alignof(type))', as defined in section 2.7 of the
       IA64/Generic C++ ABI.
  
   -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
!      This hook should return 'true' if the element size should be stored
!      in array cookies.  The default is to return 'false'.
  
   -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
            IMPORT_EXPORT)
       If defined by a backend this hook allows the decision made to
       export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
!      contain 1 if the class is going to be exported, -1 if it is going
       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.
  
   -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
!      This hook should return 'true' if constructors and destructors
       return the address of the object created/destroyed.  The default is
!      to return 'false'.
  
   -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
       This hook returns true if the key method for a class (i.e., the
--- 43743,43776 ----
  
   -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
       This hook determines how guard variables are used.  It should
!      return ‘false’ (the default) if the first byte should be used.  A
!      return value of ‘true’ indicates that only the least significant
       bit should be used.
  
   -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
       This hook returns the size of the cookie to use when allocating an
       array whose elements have the indicated TYPE.  Assumes that it is
!      already known that a cookie is needed.  The default is ‘max(sizeof
!      (size_t), alignof(type))’, as defined in section 2.7 of the
       IA64/Generic C++ ABI.
  
   -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
!      This hook should return ‘true’ if the element size should be stored
!      in array cookies.  The default is to return ‘false’.
  
   -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
            IMPORT_EXPORT)
       If defined by a backend this hook allows the decision made to
       export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
!      contain 1 if the class is going to be exported, −1 if it is going
       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.
  
   -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
!      This hook should return ‘true’ if constructors and destructors
       return the address of the object created/destroyed.  The default is
!      to return ‘false’.
  
   -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
       This hook returns true if the key method for a class (i.e., the
*************** File: gccint.info,  Node: C++ ABI,  Next
*** 43779,43785 ****
       function so long as 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
!      'true'.
  
   -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
            DECL)
--- 43780,43786 ----
       function so long as 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
!      ‘true’.
  
   -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
            DECL)
*************** File: gccint.info,  Node: C++ ABI,  Next
*** 43788,43794 ****
       external linkage in this translation unit.  No ELF visibility has
       been explicitly specified.  If the target needs to specify a
       visibility other than that of the containing class, use this hook
!      to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'.
  
   -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
       This hook returns true (the default) if virtual tables and other
--- 43789,43795 ----
       external linkage in this translation unit.  No ELF visibility has
       been explicitly specified.  If the target needs to specify a
       visibility other than that of the containing class, use this hook
!      to set ‘DECL_VISIBILITY’ and ‘DECL_VISIBILITY_SPECIFIED’.
  
   -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
       This hook returns true (the default) if virtual tables and other
*************** File: gccint.info,  Node: C++ ABI,  Next
*** 43803,43824 ****
       be COMDAT, false if it should not be COMDAT.
  
   -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
!      This hook returns true if '__aeabi_atexit' (as defined by the ARM
       EABI) should be used to register static destructors when
!      '-fuse-cxa-atexit' is in effect.  The default is to return false to
!      use '__cxa_atexit'.
  
   -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
!      This hook returns true if the target 'atexit' function can be used
!      in the same manner as '__cxa_atexit' to register C++ static
!      destructors.  This requires that 'atexit'-registered functions in
       shared libraries are run in the correct order when the libraries
       are unloaded.  The default is to return false.
  
   -- Target Hook: tree TARGET_CXX_ADJUST_CDTOR_CALLABI_FNTYPE (tree
            FNTYPE)
!      This hook returns a possibly modified 'FUNCTION_TYPE' for arguments
!      to '__cxa_atexit', '__cxa_thread_atexit' or '__cxa_throw' function
       pointers.  ABIs like mingw32 require special attributes to be added
       to function types pointed to by arguments of these functions.  The
       default is to return the passed argument unmodified.
--- 43804,43825 ----
       be COMDAT, false if it should not be COMDAT.
  
   -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
!      This hook returns true if ‘__aeabi_atexit’ (as defined by the ARM
       EABI) should be used to register static destructors when
!      ‘-fuse-cxa-atexit’ is in effect.  The default is to return false to
!      use ‘__cxa_atexit’.
  
   -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
!      This hook returns true if the target ‘atexit’ function can be used
!      in the same manner as ‘__cxa_atexit’ to register C++ static
!      destructors.  This requires that ‘atexit’-registered functions in
       shared libraries are run in the correct order when the libraries
       are unloaded.  The default is to return false.
  
   -- Target Hook: tree TARGET_CXX_ADJUST_CDTOR_CALLABI_FNTYPE (tree
            FNTYPE)
!      This hook returns a possibly modified ‘FUNCTION_TYPE’ for arguments
!      to ‘__cxa_atexit’, ‘__cxa_thread_atexit’ or ‘__cxa_throw’ function
       pointers.  ABIs like mingw32 require special attributes to be added
       to function types pointed to by arguments of these functions.  The
       default is to return the passed argument unmodified.
*************** File: gccint.info,  Node: C++ ABI,  Next
*** 43830,43836 ****
       modifications).
  
   -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL)
!      Return target-specific mangling context of DECL or 'NULL_TREE'.
  
  
  File: gccint.info,  Node: D Language and ABI,  Next: Rust Language and ABI,  Prev: C++ ABI,  Up: Target Macros
--- 43831,43837 ----
       modifications).
  
   -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL)
!      Return target-specific mangling context of DECL or ‘NULL_TREE’.
  
  
  File: gccint.info,  Node: D Language and ABI,  Next: Rust Language and ABI,  Prev: C++ ABI,  Up: Target Macros
*************** File: gccint.info,  Node: D Language and
*** 43840,43901 ****
  
   -- D Target Hook: void TARGET_D_CPU_VERSIONS (void)
       Declare all environmental version identifiers relating to the
!      target CPU using the function '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.
  
   -- D Target Hook: void TARGET_D_OS_VERSIONS (void)
!      Similarly to 'TARGET_D_CPU_VERSIONS', but is used for versions
       relating to the target operating system.
  
   -- D Target Hook: void TARGET_D_REGISTER_CPU_TARGET_INFO (void)
       Register all target information keys relating to the target CPU
!      using the function 'd_add_target_info_handlers', which takes a
!      'struct d_target_info_spec' (defined in 'd/d-target.h').  The keys
       added by this hook are made available at compile time by the
!      '__traits(getTargetInfo)' extension, the result is an expression
       describing the requested target information.
  
   -- D Target Hook: void TARGET_D_REGISTER_OS_TARGET_INFO (void)
!      Same as 'TARGET_D_CPU_TARGET_INFO', but is used for keys relating
       to the target operating system.
  
   -- D Target Hook: const char * 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 '"minfo"' section.  Define this macro to override
       the string if a different section name should be used.  This
       section is expected to be bracketed by two symbols
!      'TARGET_D_MINFO_SECTION_START' and 'TARGET_D_MINFO_SECTION_END' to
       indicate the start and end address of the section, so that the
       runtime library can collect all modules for each loaded shared
!      library and executable.  Setting the value to 'NULL' disables the
       use of sections for storing module info altogether.
  
   -- D Target Hook: const char * TARGET_D_MINFO_SECTION_START
!      If '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
  
   -- D Target Hook: const char * TARGET_D_MINFO_SECTION_END
!      If '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
  
   -- D Target Hook: bool TARGET_D_HAS_STDCALL_CONVENTION (unsigned int
            *LINK_SYSTEM, unsigned int *LINK_WINDOWS)
!      Returns 'true' if the target supports the stdcall calling
!      convention.  The hook should also set LINK_SYSTEM to '1' if the
!      'stdcall' attribute should be applied to functions with
!      'extern(System)' linkage, and LINK_WINDOWS to '1' to apply
!      'stdcall' to functions with 'extern(Windows)' linkage.
  
   -- D Target Hook: bool 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 'false'.
  
  
  File: gccint.info,  Node: Rust Language and ABI,  Next: Named Address Spaces,  Prev: D Language and ABI,  Up: Target Macros
--- 43841,43902 ----
  
   -- D Target Hook: void TARGET_D_CPU_VERSIONS (void)
       Declare all environmental version identifiers relating to the
!      target CPU using the function ‘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.
  
   -- D Target Hook: void TARGET_D_OS_VERSIONS (void)
!      Similarly to ‘TARGET_D_CPU_VERSIONS’, but is used for versions
       relating to the target operating system.
  
   -- D Target Hook: void TARGET_D_REGISTER_CPU_TARGET_INFO (void)
       Register all target information keys relating to the target CPU
!      using the function ‘d_add_target_info_handlers’, which takes a
!      ‘struct d_target_info_spec’ (defined in ‘d/d-target.h’).  The keys
       added by this hook are made available at compile time by the
!      ‘__traits(getTargetInfo)’ extension, the result is an expression
       describing the requested target information.
  
   -- D Target Hook: void TARGET_D_REGISTER_OS_TARGET_INFO (void)
!      Same as ‘TARGET_D_CPU_TARGET_INFO’, but is used for keys relating
       to the target operating system.
  
   -- D Target Hook: const char * 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 ‘"minfo"’ section.  Define this macro to override
       the string if a different section name should be used.  This
       section is expected to be bracketed by two symbols
!      ‘TARGET_D_MINFO_SECTION_START’ and ‘TARGET_D_MINFO_SECTION_END’ to
       indicate the start and end address of the section, so that the
       runtime library can collect all modules for each loaded shared
!      library and executable.  Setting the value to ‘NULL’ disables the
       use of sections for storing module info altogether.
  
   -- D Target Hook: const char * TARGET_D_MINFO_SECTION_START
!      If ‘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
  
   -- D Target Hook: const char * TARGET_D_MINFO_SECTION_END
!      If ‘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
  
   -- D Target Hook: bool TARGET_D_HAS_STDCALL_CONVENTION (unsigned int
            *LINK_SYSTEM, unsigned int *LINK_WINDOWS)
!      Returns ‘true’ if the target supports the stdcall calling
!      convention.  The hook should also set LINK_SYSTEM to ‘1’ if the
!      ‘stdcall’ attribute should be applied to functions with
!      ‘extern(System)’ linkage, and LINK_WINDOWS to ‘1’ to apply
!      ‘stdcall’ to functions with ‘extern(Windows)’ linkage.
  
   -- D Target Hook: bool 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 ‘false’.
  
  
  File: gccint.info,  Node: Rust Language and ABI,  Next: Named Address Spaces,  Prev: D Language and ABI,  Up: Target Macros
*************** File: gccint.info,  Node: Rust Language
*** 43905,43917 ****
  
   -- Rust Target Hook: void TARGET_RUST_CPU_INFO (void)
       Declare all environmental CPU info and features relating to the
!      target CPU using the function 'rust_add_target_info', which takes a
       string representing the feature key and a string representing the
       feature value.  Configuration pairs predefined by this hook apply
       to all files that are being compiled.
  
   -- Rust Target Hook: void TARGET_RUST_OS_INFO (void)
!      Similar to 'TARGET_RUST_CPU_INFO', but is used for configuration
       info relating to the target operating system.
  
  
--- 43906,43918 ----
  
   -- Rust Target Hook: void TARGET_RUST_CPU_INFO (void)
       Declare all environmental CPU info and features relating to the
!      target CPU using the function ‘rust_add_target_info’, which takes a
       string representing the feature key and a string representing the
       feature value.  Configuration pairs predefined by this hook apply
       to all files that are being compiled.
  
   -- Rust Target Hook: void TARGET_RUST_OS_INFO (void)
!      Similar to ‘TARGET_RUST_CPU_INFO’, but is used for configuration
       info relating to the target operating system.
  
  
*************** File: gccint.info,  Node: Named Address
*** 43921,43942 ****
  =============================================
  
  The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
! committee, 'Programming Languages - C - Extensions to support embedded
! processors', specifies a syntax for embedded processors to specify
  alternate address spaces.  You can configure a GCC port to support
  section 5.1 of the draft report to add support for address spaces other
  than the default address space.  These address spaces are new keywords
! that are similar to the 'volatile' and 'const' type attributes.
  
   Pointers to named address spaces can have a different size than
  pointers to the generic address space.
  
!  For example, the SPU port uses the '__ea' address space to refer to
  memory in the host processor, rather than memory local to the SPU
! processor.  Access to memory in the '__ea' address space involves
  issuing DMA operations to move data between the host processor and the
! local processor memory address space.  Pointers in the '__ea' address
! space are either 32 bits or 64 bits based on the '-mea32' or '-mea64'
  switches (native SPU pointers are always 32 bits).
  
   Internally, address spaces are represented as a small integer in the
--- 43922,43943 ----
  =============================================
  
  The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
! committee, ‘Programming Languages - C - Extensions to support embedded
! processors’, specifies a syntax for embedded processors to specify
  alternate address spaces.  You can configure a GCC port to support
  section 5.1 of the draft report to add support for address spaces other
  than the default address space.  These address spaces are new keywords
! that are similar to the ‘volatile’ and ‘const’ type attributes.
  
   Pointers to named address spaces can have a different size than
  pointers to the generic address space.
  
!  For example, the SPU port uses the ‘__ea’ address space to refer to
  memory in the host processor, rather than memory local to the SPU
! processor.  Access to memory in the ‘__ea’ address space involves
  issuing DMA operations to move data between the host processor and the
! local processor memory address space.  Pointers in the ‘__ea’ address
! space are either 32 bits or 64 bits based on the ‘-mea32’ or ‘-mea64’
  switches (native SPU pointers are always 32 bits).
  
   Internally, address spaces are represented as a small integer in the
*************** range 0 to 15 with address space 0 being
*** 43944,43951 ****
  address space.
  
   To register a named address space qualifier keyword with the C front
! end, the target may call the 'c_register_addr_space' routine.  For
! example, the SPU port uses the following to declare '__ea' as the
  keyword for named address space #1:
       #define ADDR_SPACE_EA 1
       c_register_addr_space ("__ea", ADDR_SPACE_EA);
--- 43945,43952 ----
  address space.
  
   To register a named address space qualifier keyword with the C front
! end, the target may call the ‘c_register_addr_space’ routine.  For
! example, the SPU port uses the following to declare ‘__ea’ as the
  keyword for named address space #1:
       #define ADDR_SPACE_EA 1
       c_register_addr_space ("__ea", ADDR_SPACE_EA);
*************** keyword for named address space #1:
*** 43954,43976 ****
            (addr_space_t ADDRESS_SPACE)
       Define this to return the machine mode to use for pointers to
       ADDRESS_SPACE if the target supports named address spaces.  The
!      default version of this hook returns 'ptr_mode'.
  
   -- Target Hook: scalar_int_mode TARGET_ADDR_SPACE_ADDRESS_MODE
            (addr_space_t ADDRESS_SPACE)
       Define this to return the machine mode to use for addresses in
       ADDRESS_SPACE if the target supports named address spaces.  The
!      default version of this hook returns 'Pmode'.
  
   -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE
            (scalar_int_mode MODE, addr_space_t AS)
       Define this to return nonzero if the port can handle pointers with
       machine mode MODE to address space AS.  This target hook is the
!      same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it
       includes explicit named address space support.  The default version
       of this hook returns true for the modes returned by either the
!      'TARGET_ADDR_SPACE_POINTER_MODE' or
!      'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address
       space.
  
   -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
--- 43955,43977 ----
            (addr_space_t ADDRESS_SPACE)
       Define this to return the machine mode to use for pointers to
       ADDRESS_SPACE if the target supports named address spaces.  The
!      default version of this hook returns ‘ptr_mode’.
  
   -- Target Hook: scalar_int_mode TARGET_ADDR_SPACE_ADDRESS_MODE
            (addr_space_t ADDRESS_SPACE)
       Define this to return the machine mode to use for addresses in
       ADDRESS_SPACE if the target supports named address spaces.  The
!      default version of this hook returns ‘Pmode’.
  
   -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE
            (scalar_int_mode MODE, addr_space_t AS)
       Define this to return nonzero if the port can handle pointers with
       machine mode MODE to address space AS.  This target hook is the
!      same as the ‘TARGET_VALID_POINTER_MODE’ target hook, except that it
       includes explicit named address space support.  The default version
       of this hook returns true for the modes returned by either the
!      ‘TARGET_ADDR_SPACE_POINTER_MODE’ or
!      ‘TARGET_ADDR_SPACE_ADDRESS_MODE’ target hooks for the given address
       space.
  
   -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
*************** keyword for named address space #1:
*** 43980,43986 ****
       in the named address space AS with the use context CH.  The STRICT
       parameter says whether strict addressing is in effect after reload
       has finished.  The CH indicates what context EXP will be used for.
!      This target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P'
       target hook, except that it includes explicit named address space
       support.
  
--- 43981,43987 ----
       in the named address space AS with the use context CH.  The STRICT
       parameter says whether strict addressing is in effect after reload
       has finished.  The CH indicates what context EXP will be used for.
!      This target hook is the same as the ‘TARGET_LEGITIMATE_ADDRESS_P’
       target hook, except that it includes explicit named address space
       support.
  
*************** keyword for named address space #1:
*** 43988,43994 ****
            OLDX, machine_mode MODE, addr_space_t AS)
       Define this to modify an invalid address X to be a valid address
       with mode MODE in the named address space AS.  This target hook is
!      the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except
       that it includes explicit named address space support.
  
   -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET,
--- 43989,43995 ----
            OLDX, machine_mode MODE, addr_space_t AS)
       Define this to modify an invalid address X to be a valid address
       with mode MODE in the named address space AS.  This target hook is
!      the same as the ‘TARGET_LEGITIMIZE_ADDRESS’ target hook, except
       that it includes explicit named address space support.
  
   -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET,
*************** keyword for named address space #1:
*** 44013,44024 ****
       a new pointer expression with type TO_TYPE that points 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 'TARGET_ADDR_SPACE_SUBSET_P' target
       hook.
  
   -- Target Hook: int TARGET_ADDR_SPACE_DEBUG (addr_space_t AS)
       Define this to define how the address space is encoded in dwarf.
!      The result is the value to be used with 'DW_AT_address_class'.
  
   -- Target Hook: void TARGET_ADDR_SPACE_DIAGNOSE_USAGE (addr_space_t AS,
            location_t LOC)
--- 44014,44025 ----
       a new pointer expression with type TO_TYPE that points 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 ‘TARGET_ADDR_SPACE_SUBSET_P’ target
       hook.
  
   -- Target Hook: int TARGET_ADDR_SPACE_DEBUG (addr_space_t AS)
       Define this to define how the address space is encoded in dwarf.
!      The result is the value to be used with ‘DW_AT_address_class’.
  
   -- Target Hook: void TARGET_ADDR_SPACE_DIAGNOSE_USAGE (addr_space_t AS,
            location_t LOC)
*************** keyword for named address space #1:
*** 44026,44033 ****
       command line options and some diagnostics should be printed when
       the address space is used.  This hook is called during parsing and
       allows to emit a better diagnostic compared to the case where the
!      address space was not registered with 'c_register_addr_space'.  AS
!      is the address space as registered with 'c_register_addr_space'.
       LOC is the location of the address space qualifier token.  The
       default implementation does nothing.
  
--- 44027,44034 ----
       command line options and some diagnostics should be printed when
       the address space is used.  This hook is called during parsing and
       allows to emit a better diagnostic compared to the case where the
!      address space was not registered with ‘c_register_addr_space’.  AS
!      is the address space as registered with ‘c_register_addr_space’.
       LOC is the location of the address space qualifier token.  The
       default implementation does nothing.
  
*************** Here are several miscellaneous parameter
*** 44062,44072 ****
       elements of a jump-table should have.
  
   -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
!      Optional: return the preferred mode for an 'addr_diff_vec' when the
       minimum and maximum offset are known.  If you define this, it
       enables extra code in branch shortening to deal with
!      'addr_diff_vec'.  To make this work, you also have to define
!      'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit.
       The BODY argument is provided so that the offset_unsigned and scale
       flags can be updated.
  
--- 44063,44073 ----
       elements of a jump-table should have.
  
   -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
!      Optional: return the preferred mode for an ‘addr_diff_vec’ when the
       minimum and maximum offset are known.  If you define this, it
       enables extra code in branch shortening to deal with
!      ‘addr_diff_vec’.  To make this work, you also have to define
!      ‘INSN_ALIGN’ and make the alignment for ‘addr_diff_vec’ explicit.
       The BODY argument is provided so that the offset_unsigned and scale
       flags can be updated.
  
*************** Here are several miscellaneous parameter
*** 44074,44097 ****
       Define this macro to be a C expression to indicate when jump-tables
       should contain relative addresses.  You need not define this macro
       if jump-tables never contain relative addresses, or jump-tables
!      should contain relative addresses only when '-fPIC' or '-fPIC' is
       in effect.
  
   -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
       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
!      'casesi' instruction and five otherwise.  This is best for most
       machines.
  
   -- Macro: WORD_REGISTER_OPERATIONS
       Define this macro to 1 if operations between registers with
       integral mode smaller than a word are always performed on the
       entire register.  To be more explicit, if you start with a pair of
!      'word_mode' registers with known values and you do a subword, for
!      example 'QImode', addition on the low part of the registers, then
       the compiler may consider that the result has a known value in
!      'word_mode' too if the macro is defined to 1.  Most RISC machines
       have this property and most CISC machines do not.
  
   -- Target Hook: unsigned int TARGET_MIN_ARITHMETIC_PRECISION (void)
--- 44075,44098 ----
       Define this macro to be a C expression to indicate when jump-tables
       should contain relative addresses.  You need not define this macro
       if jump-tables never contain relative addresses, or jump-tables
!      should contain relative addresses only when ‘-fPIC’ or ‘-fPIC’ is
       in effect.
  
   -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
       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
!      ‘casesi’ instruction and five otherwise.  This is best for most
       machines.
  
   -- Macro: WORD_REGISTER_OPERATIONS
       Define this macro to 1 if operations between registers with
       integral mode smaller than a word are always performed on the
       entire register.  To be more explicit, if you start with a pair of
!      ‘word_mode’ registers with known values and you do a subword, for
!      example ‘QImode’, addition on the low part of the registers, then
       the compiler may consider that the result has a known value in
!      ‘word_mode’ too if the macro is defined to 1.  Most RISC machines
       have this property and most CISC machines do not.
  
   -- Target Hook: unsigned int TARGET_MIN_ARITHMETIC_PRECISION (void)
*************** Here are several miscellaneous parameter
*** 44108,44143 ****
       the compiler to try using arithmetical operations setting the
       condition codes with a precision lower than the word precision.
  
!      You need not define this hook if 'WORD_REGISTER_OPERATIONS' is not
       defined to 1.
  
   -- Macro: LOAD_EXTEND_OP (MEM_MODE)
       Define this macro to be a C expression indicating when insns that
       read memory in MEM_MODE, an integral mode narrower than a word, set
       the bits outside of MEM_MODE to be either the sign-extension or the
!      zero-extension of the data read.  Return 'SIGN_EXTEND' for values
!      of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for
!      which it zero-extends, and 'UNKNOWN' for other modes.
  
       This macro is not called with MEM_MODE non-integral or with a width
!      greater than or equal to 'BITS_PER_WORD', so you may return any
       value in this case.  Do not define this macro if it would always
!      return 'UNKNOWN'.  On machines where this macro is defined, you
!      will normally define it as the constant 'SIGN_EXTEND' or
!      'ZERO_EXTEND'.
  
!      You may return a non-'UNKNOWN' value even if for some hard
       registers the sign extension is not performed, if for the
!      'REGNO_REG_CLASS' of these hard registers
!      'TARGET_CAN_CHANGE_MODE_CLASS' returns false when the FROM mode is
       MEM_MODE and the TO mode is any integral mode larger than this but
!      not larger than 'word_mode'.
  
!      You must return 'UNKNOWN' if for some hard registers that allow
!      this mode, 'TARGET_CAN_CHANGE_MODE_CLASS' says that they cannot
!      change to 'word_mode', but that they can change to another integral
       mode that is larger then MEM_MODE but still smaller than
!      'word_mode'.
  
   -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
       Define this macro to 1 if loading short immediate values into
--- 44109,44144 ----
       the compiler to try using arithmetical operations setting the
       condition codes with a precision lower than the word precision.
  
!      You need not define this hook if ‘WORD_REGISTER_OPERATIONS’ is not
       defined to 1.
  
   -- Macro: LOAD_EXTEND_OP (MEM_MODE)
       Define this macro to be a C expression indicating when insns that
       read memory in MEM_MODE, an integral mode narrower than a word, set
       the bits outside of MEM_MODE to be either the sign-extension or the
!      zero-extension of the data read.  Return ‘SIGN_EXTEND’ for values
!      of MEM_MODE for which the insn sign-extends, ‘ZERO_EXTEND’ for
!      which it zero-extends, and ‘UNKNOWN’ for other modes.
  
       This macro is not called with MEM_MODE non-integral or with a width
!      greater than or equal to ‘BITS_PER_WORD’, so you may return any
       value in this case.  Do not define this macro if it would always
!      return ‘UNKNOWN’.  On machines where this macro is defined, you
!      will normally define it as the constant ‘SIGN_EXTEND’ or
!      ‘ZERO_EXTEND’.
  
!      You may return a non-‘UNKNOWN’ value even if for some hard
       registers the sign extension is not performed, if for the
!      ‘REGNO_REG_CLASS’ of these hard registers
!      ‘TARGET_CAN_CHANGE_MODE_CLASS’ returns false when the FROM mode is
       MEM_MODE and the TO mode is any integral mode larger than this but
!      not larger than ‘word_mode’.
  
!      You must return ‘UNKNOWN’ if for some hard registers that allow
!      this mode, ‘TARGET_CAN_CHANGE_MODE_CLASS’ says that they cannot
!      change to ‘word_mode’, but that they can change to another integral
       mode that is larger then MEM_MODE but still smaller than
!      ‘word_mode’.
  
   -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
       Define this macro to 1 if loading short immediate values into
*************** Here are several miscellaneous parameter
*** 44145,44151 ****
  
   -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL
            (machine_mode MODE)
!      When '-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 that should be there for GCC to perform the optimization
--- 44146,44152 ----
  
   -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL
            (machine_mode MODE)
!      When ‘-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 that should be there for GCC to perform the optimization
*************** Here are several miscellaneous parameter
*** 44161,44169 ****
   -- Macro: MAX_MOVE_MAX
       The maximum number of bytes that a single instruction can move
       quickly between memory and registers or between two memory
!      locations.  If this is undefined, the default is 'MOVE_MAX'.
       Otherwise, it is the constant value that is the largest value that
!      'MOVE_MAX' can have at run-time.
  
   -- Macro: SHIFT_COUNT_TRUNCATED
       A C expression that is nonzero if on this machine the number of
--- 44162,44170 ----
   -- Macro: MAX_MOVE_MAX
       The maximum number of bytes that a single instruction can move
       quickly between memory and registers or between two memory
!      locations.  If this is undefined, the default is ‘MOVE_MAX’.
       Otherwise, it is the constant value that is the largest value that
!      ‘MOVE_MAX’ can have at run-time.
  
   -- Macro: SHIFT_COUNT_TRUNCATED
       A C expression that is nonzero if on this machine the number of
*************** Here are several miscellaneous parameter
*** 44174,44180 ****
       'and' instructions that truncates the count of a shift operation.
       On machines that have instructions that act on bit-fields at
       variable positions, which may include 'bit test' instructions, a
!      nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of
       truncations of the values that serve as arguments to bit-field
       instructions.
  
--- 44175,44181 ----
       'and' instructions that truncates the count of a shift operation.
       On machines that have instructions that act on bit-fields at
       variable positions, which may include 'bit test' instructions, a
!      nonzero ‘SHIFT_COUNT_TRUNCATED’ also enables deletion of
       truncations of the values that serve as arguments to bit-field
       instructions.
  
*************** Here are several miscellaneous parameter
*** 44184,44191 ****
  
       However, on some machines, such as the 80386 and the 680x0,
       truncation only applies to shift operations and not the (real or
!      pretended) bit-field operations.  Define 'SHIFT_COUNT_TRUNCATED' to
!      be zero on such machines.  Instead, add patterns to the 'md' file
       that include the implied truncation of the shift instructions.
  
       You need not define this macro if it would always have the value of
--- 44185,44192 ----
  
       However, on some machines, such as the 80386 and the 680x0,
       truncation only applies to shift operations and not the (real or
!      pretended) bit-field operations.  Define ‘SHIFT_COUNT_TRUNCATED’ to
!      be zero on such machines.  Instead, add patterns to the ‘md’ file
       that include the implied truncation of the shift instructions.
  
       You need not define this macro if it would always have the value of
*************** Here are several miscellaneous parameter
*** 44204,44217 ****
       should return 0.  A return value of 0 indicates that no particular
       behavior is guaranteed.
  
!      Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_
       apply to general shift rtxes; it applies only to instructions that
       are generated by the named shift patterns.
  
       The default implementation of this function returns
!      'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0
       otherwise.  This definition is always safe, but if
!      'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
       nevertheless truncate the shift count, you may get better code by
       overriding it.
  
--- 44205,44218 ----
       should return 0.  A return value of 0 indicates that no particular
       behavior is guaranteed.
  
!      Note that, unlike ‘SHIFT_COUNT_TRUNCATED’, this function does _not_
       apply to general shift rtxes; it applies only to instructions that
       are generated by the named shift patterns.
  
       The default implementation of this function returns
!      ‘GET_MODE_BITSIZE (MODE) - 1’ if ‘SHIFT_COUNT_TRUNCATED’ and 0
       otherwise.  This definition is always safe, but if
!      ‘SHIFT_COUNT_TRUNCATED’ is false, and some shift patterns
       nevertheless truncate the shift count, you may get better code by
       overriding it.
  
*************** Here are several miscellaneous parameter
*** 44221,44231 ****
       bits to one of OUTPREC bits (where OUTPREC is smaller than INPREC)
       by merely operating on it as if it had only OUTPREC bits.  The
       default returns true unconditionally, which is correct for most
!      machines.  When 'TARGET_TRULY_NOOP_TRUNCATION' returns false, the
!      machine description should provide a 'trunc' optab to specify the
       RTL that performs the required truncation.
  
!      If '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.
--- 44222,44232 ----
       bits to one of OUTPREC bits (where OUTPREC is smaller than INPREC)
       by merely operating on it as if it had only OUTPREC bits.  The
       default returns true unconditionally, which is correct for most
!      machines.  When ‘TARGET_TRULY_NOOP_TRUNCATION’ returns false, the
!      machine description should provide a ‘trunc’ optab to specify the
       RTL that performs the required truncation.
  
!      If ‘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.
*************** Here are several miscellaneous parameter
*** 44233,44297 ****
   -- Target Hook: int TARGET_MODE_REP_EXTENDED (scalar_int_mode MODE,
            scalar_int_mode REP_MODE)
       The representation of an integral mode can be such that the values
!      are always extended to a wider integral mode.  Return 'SIGN_EXTEND'
       if values of MODE are represented in sign-extended form to
!      REP_MODE.  Return 'UNKNOWN' otherwise.  (Currently, none of the
       targets use zero-extended representation this way so unlike
!      'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return
!      either 'SIGN_EXTEND' or 'UNKNOWN'.  Also no target extends MODE to
       REP_MODE so that REP_MODE is not the next widest integral mode and
       currently we take advantage of this fact.)
  
!      Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value
       even if the extension is not performed on certain hard registers as
!      long as for the 'REGNO_REG_CLASS' of these hard registers
!      'TARGET_CAN_CHANGE_MODE_CLASS' returns false.
  
!      Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe
!      two related properties.  If you define 'TARGET_MODE_REP_EXTENDED
!      (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP
!      (mode)' to return the same type of extension.
  
!      In order to enforce the representation of 'mode',
!      'TARGET_TRULY_NOOP_TRUNCATION' should return false when truncating
!      to 'mode'.
  
   -- Target Hook: bool TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P (void)
       On some targets, it is assumed that the compiler will spill all
!      pseudos that are live across a call to 'setjmp', while other
!      targets treat 'setjmp' calls as normal function calls.
  
!      This hook returns false if 'setjmp' calls do not preserve all
       non-volatile registers so that gcc that must spill all pseudos that
!      are live across 'setjmp' calls.  Define this to return true if the
!      target does not need to spill all pseudos live across 'setjmp'
       calls.  The default implementation conservatively assumes all
!      pseudos must be spilled across 'setjmp' calls.
  
   -- Macro: STORE_FLAG_VALUE
       A C expression describing the value returned by a comparison
       operator with an integral mode and stored by a store-flag
!      instruction ('cstoreMODE4') when the condition is true.  This
!      description must apply to _all_ the 'cstoreMODE4' patterns and all
!      the comparison operators whose results have a 'MODE_INT' mode.
  
!      A value of 1 or -1 means that the instruction implementing the
!      comparison operator returns exactly 1 or -1 when the comparison is
       true and 0 when the comparison is false.  Otherwise, the value
       indicates which bits of the result are guaranteed to be 1 when the
       comparison is true.  This value is interpreted in the mode of the
       comparison operation, which is given by the mode of the first
!      operand in the 'cstoreMODE4' pattern.  Either the low bit or the
!      sign bit of 'STORE_FLAG_VALUE' be on.  Presently, only those bits
       are used by the compiler.
  
!      If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
       generate code that depends only on the specified bits.  It can also
       replace comparison operators with equivalent operations if they
       cause the required bits to be set, even if the remaining bits are
       undefined.  For example, on a machine whose comparison operators
!      return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as
!      '0x80000000', saying that just the sign bit is relevant, the
       expression
  
            (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
--- 44234,44298 ----
   -- Target Hook: int TARGET_MODE_REP_EXTENDED (scalar_int_mode MODE,
            scalar_int_mode REP_MODE)
       The representation of an integral mode can be such that the values
!      are always extended to a wider integral mode.  Return ‘SIGN_EXTEND’
       if values of MODE are represented in sign-extended form to
!      REP_MODE.  Return ‘UNKNOWN’ otherwise.  (Currently, none of the
       targets use zero-extended representation this way so unlike
!      ‘LOAD_EXTEND_OP’, ‘TARGET_MODE_REP_EXTENDED’ is expected to return
!      either ‘SIGN_EXTEND’ or ‘UNKNOWN’.  Also no target extends MODE to
       REP_MODE so that REP_MODE is not the next widest integral mode and
       currently we take advantage of this fact.)
  
!      Similarly to ‘LOAD_EXTEND_OP’ you may return a non-‘UNKNOWN’ value
       even if the extension is not performed on certain hard registers as
!      long as for the ‘REGNO_REG_CLASS’ of these hard registers
!      ‘TARGET_CAN_CHANGE_MODE_CLASS’ returns false.
  
!      Note that ‘TARGET_MODE_REP_EXTENDED’ and ‘LOAD_EXTEND_OP’ describe
!      two related properties.  If you define ‘TARGET_MODE_REP_EXTENDED
!      (mode, word_mode)’ you probably also want to define ‘LOAD_EXTEND_OP
!      (mode)’ to return the same type of extension.
  
!      In order to enforce the representation of ‘mode’,
!      ‘TARGET_TRULY_NOOP_TRUNCATION’ should return false when truncating
!      to ‘mode’.
  
   -- Target Hook: bool TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P (void)
       On some targets, it is assumed that the compiler will spill all
!      pseudos that are live across a call to ‘setjmp’, while other
!      targets treat ‘setjmp’ calls as normal function calls.
  
!      This hook returns false if ‘setjmp’ calls do not preserve all
       non-volatile registers so that gcc that must spill all pseudos that
!      are live across ‘setjmp’ calls.  Define this to return true if the
!      target does not need to spill all pseudos live across ‘setjmp’
       calls.  The default implementation conservatively assumes all
!      pseudos must be spilled across ‘setjmp’ calls.
  
   -- Macro: STORE_FLAG_VALUE
       A C expression describing the value returned by a comparison
       operator with an integral mode and stored by a store-flag
!      instruction (‘cstoreMODE4’) when the condition is true.  This
!      description must apply to _all_ the ‘cstoreMODE4’ patterns and all
!      the comparison operators whose results have a ‘MODE_INT’ mode.
  
!      A value of 1 or −1 means that the instruction implementing the
!      comparison operator returns exactly 1 or −1 when the comparison is
       true and 0 when the comparison is false.  Otherwise, the value
       indicates which bits of the result are guaranteed to be 1 when the
       comparison is true.  This value is interpreted in the mode of the
       comparison operation, which is given by the mode of the first
!      operand in the ‘cstoreMODE4’ pattern.  Either the low bit or the
!      sign bit of ‘STORE_FLAG_VALUE’ be on.  Presently, only those bits
       are used by the compiler.
  
!      If ‘STORE_FLAG_VALUE’ is neither 1 or −1, the compiler will
       generate code that depends only on the specified bits.  It can also
       replace comparison operators with equivalent operations if they
       cause the required bits to be set, even if the remaining bits are
       undefined.  For example, on a machine whose comparison operators
!      return an ‘SImode’ value and where ‘STORE_FLAG_VALUE’ is defined as
!      ‘0x80000000’, saying that just the sign bit is relevant, the
       expression
  
            (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
*************** Here are several miscellaneous parameter
*** 44313,44360 ****
  
       Often, a machine will have multiple instructions that obtain a
       value from a comparison (or the condition codes).  Here are rules
!      to guide the choice of value for 'STORE_FLAG_VALUE', and hence the
       instructions to be used:
  
!         * Use the shortest sequence that yields a valid definition for
!           'STORE_FLAG_VALUE'.  It is more efficient for the compiler to
            "normalize" the value (convert it to, e.g., 1 or 0) than for
            the comparison operators to do so because there may be
            opportunities to combine the normalization with other
            operations.
  
!         * For equal-length sequences, use a value of 1 or -1, with -1
            being slightly preferred on machines with expensive jumps and
            1 preferred on other machines.
  
!         * As a second choice, choose a value of '0x80000001' if
            instructions exist that set both the sign and low-order bits
            but do not define the others.
  
!         * Otherwise, use a value of '0x80000000'.
  
       Many machines can produce both the value chosen for
!      'STORE_FLAG_VALUE' and its negation in the same number of
       instructions.  On those machines, you should also define a pattern
       for those cases, e.g., one matching
  
            (set A (neg:M (ne:M B C)))
  
!      Some machines can also perform 'and' or 'plus' operations on
       condition code values with less instructions than the corresponding
!      'cstoreMODE4' insn followed by 'and' or 'plus'.  On those machines,
!      define the appropriate patterns.  Use the names 'incscc' and
!      'decscc', respectively, for the patterns which perform 'plus' or
!      'minus' operations on condition code values.  See 'rs6000.md' for
       some examples.  The GNU Superoptimizer can be used to find such
       instruction sequences on other machines.
  
       If this macro is not defined, the default value, 1, is used.  You
!      need not define 'STORE_FLAG_VALUE' if the machine has no store-flag
       instructions, or if the value generated by these instructions is 1.
  
   -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
!      A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is
       returned when comparison operators with floating-point results are
       true.  Define this macro on machines that have comparison
       operations that return floating-point values.  If there are no such
--- 44314,44361 ----
  
       Often, a machine will have multiple instructions that obtain a
       value from a comparison (or the condition codes).  Here are rules
!      to guide the choice of value for ‘STORE_FLAG_VALUE’, and hence the
       instructions to be used:
  
!         • Use the shortest sequence that yields a valid definition for
!           ‘STORE_FLAG_VALUE’.  It is more efficient for the compiler to
            "normalize" the value (convert it to, e.g., 1 or 0) than for
            the comparison operators to do so because there may be
            opportunities to combine the normalization with other
            operations.
  
!         • For equal-length sequences, use a value of 1 or −1, with −1
            being slightly preferred on machines with expensive jumps and
            1 preferred on other machines.
  
!         • As a second choice, choose a value of ‘0x80000001’ if
            instructions exist that set both the sign and low-order bits
            but do not define the others.
  
!         • Otherwise, use a value of ‘0x80000000’.
  
       Many machines can produce both the value chosen for
!      ‘STORE_FLAG_VALUE’ and its negation in the same number of
       instructions.  On those machines, you should also define a pattern
       for those cases, e.g., one matching
  
            (set A (neg:M (ne:M B C)))
  
!      Some machines can also perform ‘and’ or ‘plus’ operations on
       condition code values with less instructions than the corresponding
!      ‘cstoreMODE4’ insn followed by ‘and’ or ‘plus’.  On those machines,
!      define the appropriate patterns.  Use the names ‘incscc’ and
!      ‘decscc’, respectively, for the patterns which perform ‘plus’ or
!      ‘minus’ operations on condition code values.  See ‘rs6000.md’ for
       some examples.  The GNU Superoptimizer can be used to find such
       instruction sequences on other machines.
  
       If this macro is not defined, the default value, 1, is used.  You
!      need not define ‘STORE_FLAG_VALUE’ if the machine has no store-flag
       instructions, or if the value generated by these instructions is 1.
  
   -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
!      A C expression that gives a nonzero ‘REAL_VALUE_TYPE’ value that is
       returned when comparison operators with floating-point results are
       true.  Define this macro on machines that have comparison
       operations that return floating-point values.  If there are no such
*************** Here are several miscellaneous parameter
*** 44367,44397 ****
       Define this macro on machines that have vector comparison
       operations that return a vector result.  If there are no such
       operations, do not define this macro.  Typically, this macro is
!      defined as 'const1_rtx' or 'constm1_rtx'.  This macro may return
!      'NULL_RTX' to prevent the compiler optimizing such vector
       comparison operations for the given mode.
  
   -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
   -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
       A C expression that indicates whether the architecture defines a
!      value for 'clz' or 'ctz' with a zero operand.  A result of '0'
       indicates the value is undefined.  If the value is defined for only
!      the RTL expression, the macro should evaluate to '1'; if the value
       applies also to the corresponding optab entry (which is normally
       the case if it expands directly into the corresponding RTL), then
!      the macro should evaluate to '2'.  In the cases where the value is
       defined, VALUE should be set to this value.
  
!      If this macro is not defined, the value of 'clz' or 'ctz' at zero
       is assumed to be undefined.
  
!      This macro must be defined if the target's expansion for 'ffs'
       relies on a particular value to get correct results.  Otherwise it
       is not necessary, though it may be used to optimize some corner
!      cases, and to provide a default expansion for the 'ffs' optab.
  
!      Note that regardless of this macro the "definedness" of 'clz' and
!      'ctz' at zero do _not_ extend to the builtin functions visible to
       the user.  Thus one may be free to adjust the value at will to
       match the target expansion of these operations without fear of
       breaking the API.
--- 44368,44398 ----
       Define this macro on machines that have vector comparison
       operations that return a vector result.  If there are no such
       operations, do not define this macro.  Typically, this macro is
!      defined as ‘const1_rtx’ or ‘constm1_rtx’.  This macro may return
!      ‘NULL_RTX’ to prevent the compiler optimizing such vector
       comparison operations for the given mode.
  
   -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
   -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
       A C expression that indicates whether the architecture defines a
!      value for ‘clz’ or ‘ctz’ with a zero operand.  A result of ‘0’
       indicates the value is undefined.  If the value is defined for only
!      the RTL expression, the macro should evaluate to ‘1’; if the value
       applies also to the corresponding optab entry (which is normally
       the case if it expands directly into the corresponding RTL), then
!      the macro should evaluate to ‘2’.  In the cases where the value is
       defined, VALUE should be set to this value.
  
!      If this macro is not defined, the value of ‘clz’ or ‘ctz’ at zero
       is assumed to be undefined.
  
!      This macro must be defined if the target's expansion for ‘ffs’
       relies on a particular value to get correct results.  Otherwise it
       is not necessary, though it may be used to optimize some corner
!      cases, and to provide a default expansion for the ‘ffs’ optab.
  
!      Note that regardless of this macro the "definedness" of ‘clz’ and
!      ‘ctz’ at zero do _not_ extend to the builtin functions visible to
       the user.  Thus one may be free to adjust the value at will to
       match the target expansion of these operations without fear of
       breaking the API.
*************** Here are several miscellaneous parameter
*** 44399,44439 ****
   -- Macro: Pmode
       An alias for the machine mode for pointers.  On most machines,
       define this to be the integer mode corresponding to the width of a
!      hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit
       machines.  On some machines you must define this to be one of the
!      partial integer modes, such as 'PSImode'.
  
!      The width of 'Pmode' must be at least as large as the value of
!      'POINTER_SIZE'.  If it is not equal, you must define the macro
!      'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
!      'Pmode'.
  
   -- Macro: FUNCTION_MODE
       An alias for the machine mode used for memory references to
!      functions being called, in 'call' RTL expressions.  On most CISC
       machines, where an instruction can begin at any byte address, this
!      should be 'QImode'.  On most RISC machines, where all instructions
       have fixed size and alignment, this should be a mode with the same
       size and alignment as the machine instruction words - typically
!      'SImode' or 'HImode'.
  
   -- Macro: STDC_0_IN_SYSTEM_HEADERS
!      In normal operation, the preprocessor expands '__STDC__' to the
       constant 1, to signify that GCC conforms to ISO Standard C.  On
       some hosts, like Solaris, the system compiler uses a different
!      convention, where '__STDC__' is normally 0, but is 1 if the user
       specifies strict conformance to the C Standard.
  
!      Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
       convention when processing system header files, but when processing
!      user files '__STDC__' will always expand to 1.
  
   -- C Target Hook: const char * TARGET_C_PREINCLUDE (void)
       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
!      '#include <FILE>'.  If this hook returns 'NULL', or is not defined,
       or the header is not found, or if the user specifies
!      '-ffreestanding' or '-nostdinc', no header is included.
  
       This hook can be used together with a header provided by the system
       C library to implement ISO C requirements for certain macros to be
--- 44400,44440 ----
   -- Macro: Pmode
       An alias for the machine mode for pointers.  On most machines,
       define this to be the integer mode corresponding to the width of a
!      hardware pointer; ‘SImode’ on 32-bit machine or ‘DImode’ on 64-bit
       machines.  On some machines you must define this to be one of the
!      partial integer modes, such as ‘PSImode’.
  
!      The width of ‘Pmode’ must be at least as large as the value of
!      ‘POINTER_SIZE’.  If it is not equal, you must define the macro
!      ‘POINTERS_EXTEND_UNSIGNED’ to specify how pointers are extended to
!      ‘Pmode’.
  
   -- Macro: FUNCTION_MODE
       An alias for the machine mode used for memory references to
!      functions being called, in ‘call’ RTL expressions.  On most CISC
       machines, where an instruction can begin at any byte address, this
!      should be ‘QImode’.  On most RISC machines, where all instructions
       have fixed size and alignment, this should be a mode with the same
       size and alignment as the machine instruction words - typically
!      ‘SImode’ or ‘HImode’.
  
   -- Macro: STDC_0_IN_SYSTEM_HEADERS
!      In normal operation, the preprocessor expands ‘__STDC__’ to the
       constant 1, to signify that GCC conforms to ISO Standard C.  On
       some hosts, like Solaris, the system compiler uses a different
!      convention, where ‘__STDC__’ is normally 0, but is 1 if the user
       specifies strict conformance to the C Standard.
  
!      Defining ‘STDC_0_IN_SYSTEM_HEADERS’ makes GNU CPP follows the host
       convention when processing system header files, but when processing
!      user files ‘__STDC__’ will always expand to 1.
  
   -- C Target Hook: const char * TARGET_C_PREINCLUDE (void)
       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
!      ‘#include <FILE>’.  If this hook returns ‘NULL’, or is not defined,
       or the header is not found, or if the user specifies
!      ‘-ffreestanding’ or ‘-nostdinc’, no header is included.
  
       This hook can be used together with a header provided by the system
       C library to implement ISO C requirements for certain macros to be
*************** Here are several miscellaneous parameter
*** 44451,44462 ****
   -- Macro: SYSTEM_IMPLICIT_EXTERN_C
       Define this macro if the system header files do not support C++.
       This macro handles system header files by pretending that system
!      header files are enclosed in 'extern "C" {...}'.
  
   -- Macro: REGISTER_TARGET_PRAGMAS ()
       Define this macro if you want to implement any target-specific
       pragmas.  If defined, it is a C expression which makes a series of
!      calls to 'c_register_pragma' or 'c_register_pragma_with_expansion'
       for each pragma.  The macro may also do any setup required for the
       pragmas.
  
--- 44452,44463 ----
   -- Macro: SYSTEM_IMPLICIT_EXTERN_C
       Define this macro if the system header files do not support C++.
       This macro handles system header files by pretending that system
!      header files are enclosed in ‘extern "C" {...}’.
  
   -- Macro: REGISTER_TARGET_PRAGMAS ()
       Define this macro if you want to implement any target-specific
       pragmas.  If defined, it is a C expression which makes a series of
!      calls to ‘c_register_pragma’ or ‘c_register_pragma_with_expansion’
       for each pragma.  The macro may also do any setup required for the
       pragmas.
  
*************** Here are several miscellaneous parameter
*** 44465,44526 ****
       discourage definition of target-specific pragmas for GCC.
  
       If the pragma can be implemented by attributes then you should
!      consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as
       well.
  
       Preprocessor macros that appear on pragma lines are not expanded.
!      All '#pragma' directives that do not match any registered pragma
       are silently ignored, unless the user specifies
!      '-Wunknown-pragmas'.
  
   -- Function: void c_register_pragma (const char *SPACE, const char
            *NAME, void (*CALLBACK) (struct cpp_reader *))
   -- Function: void c_register_pragma_with_expansion (const char *SPACE,
            const char *NAME, void (*CALLBACK) (struct cpp_reader *))
  
!      Each call to 'c_register_pragma' or
!      'c_register_pragma_with_expansion' establishes one pragma.  The
       CALLBACK routine will be called when the preprocessor encounters a
       pragma of the form
  
            #pragma [SPACE] NAME ...
  
!      SPACE is the case-sensitive namespace of the pragma, or 'NULL' to
       put the pragma in the global namespace.  The callback routine
       receives PFILE as its first argument, which can be passed on to
       cpplib's functions if necessary.  You can lex tokens after the NAME
!      by calling 'pragma_lex'.  Tokens that are not read by the callback
       will be silently ignored.  The end of the line is indicated by a
!      token of type 'CPP_EOF'.  Macro expansion occurs on the arguments
!      of pragmas registered with 'c_register_pragma_with_expansion' but
       not on the arguments of pragmas registered with
!      'c_register_pragma'.
  
!      Note that the use of 'pragma_lex' is specific to the C and C++
       compilers.  It will not work in the Java or Fortran compilers, or
!      any other language compilers for that matter.  Thus if 'pragma_lex'
       is going to be called from target-specific code, it must only be
       done so when building the C and C++ compilers.  This can be done by
!      defining the variables 'c_target_objs' and 'cxx_target_objs' in the
!      target entry in the 'config.gcc' file.  These variables should name
       the target-specific, language-specific object file which contains
!      the code that uses 'pragma_lex'.  Note it will also be necessary to
!      add a rule to the makefile fragment pointed to by 'tmake_file' that
       shows how to build this object file.
  
   -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
       Define this macro if macros should be expanded in the arguments of
!      '#pragma pack'.
  
   -- Macro: TARGET_DEFAULT_PACK_STRUCT
       If your target requires a structure packing default other than 0
       (meaning the machine default), define this macro to the necessary
       value (in bytes).  This must be a value that would also be valid to
!      use with '#pragma pack()' (that is, a small power of two).
  
   -- Macro: DOLLARS_IN_IDENTIFIERS
!      Define this macro to control use of the character '$' in identifier
!      names for the C family of languages.  0 means '$' is not allowed by
       default; 1 means it is allowed.  1 is the default; there is no need
       to define this macro in that case.
  
--- 44466,44527 ----
       discourage definition of target-specific pragmas for GCC.
  
       If the pragma can be implemented by attributes then you should
!      consider defining the target hook ‘TARGET_INSERT_ATTRIBUTES’ as
       well.
  
       Preprocessor macros that appear on pragma lines are not expanded.
!      All ‘#pragma’ directives that do not match any registered pragma
       are silently ignored, unless the user specifies
!      ‘-Wunknown-pragmas’.
  
   -- Function: void c_register_pragma (const char *SPACE, const char
            *NAME, void (*CALLBACK) (struct cpp_reader *))
   -- Function: void c_register_pragma_with_expansion (const char *SPACE,
            const char *NAME, void (*CALLBACK) (struct cpp_reader *))
  
!      Each call to ‘c_register_pragma’ or
!      ‘c_register_pragma_with_expansion’ establishes one pragma.  The
       CALLBACK routine will be called when the preprocessor encounters a
       pragma of the form
  
            #pragma [SPACE] NAME ...
  
!      SPACE is the case-sensitive namespace of the pragma, or ‘NULL’ to
       put the pragma in the global namespace.  The callback routine
       receives PFILE as its first argument, which can be passed on to
       cpplib's functions if necessary.  You can lex tokens after the NAME
!      by calling ‘pragma_lex’.  Tokens that are not read by the callback
       will be silently ignored.  The end of the line is indicated by a
!      token of type ‘CPP_EOF’.  Macro expansion occurs on the arguments
!      of pragmas registered with ‘c_register_pragma_with_expansion’ but
       not on the arguments of pragmas registered with
!      ‘c_register_pragma’.
  
!      Note that the use of ‘pragma_lex’ is specific to the C and C++
       compilers.  It will not work in the Java or Fortran compilers, or
!      any other language compilers for that matter.  Thus if ‘pragma_lex’
       is going to be called from target-specific code, it must only be
       done so when building the C and C++ compilers.  This can be done by
!      defining the variables ‘c_target_objs’ and ‘cxx_target_objs’ in the
!      target entry in the ‘config.gcc’ file.  These variables should name
       the target-specific, language-specific object file which contains
!      the code that uses ‘pragma_lex’.  Note it will also be necessary to
!      add a rule to the makefile fragment pointed to by ‘tmake_file’ that
       shows how to build this object file.
  
   -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
       Define this macro if macros should be expanded in the arguments of
!      ‘#pragma pack’.
  
   -- Macro: TARGET_DEFAULT_PACK_STRUCT
       If your target requires a structure packing default other than 0
       (meaning the machine default), define this macro to the necessary
       value (in bytes).  This must be a value that would also be valid to
!      use with ‘#pragma pack()’ (that is, a small power of two).
  
   -- Macro: DOLLARS_IN_IDENTIFIERS
!      Define this macro to control use of the character ‘$’ in identifier
!      names for the C family of languages.  0 means ‘$’ is not allowed by
       default; 1 means it is allowed.  1 is the default; there is no need
       to define this macro in that case.
  
*************** Here are several miscellaneous parameter
*** 44528,44536 ****
       Define this macro as a C expression that is nonzero if it is safe
       for the delay slot scheduler to place instructions in the delay
       slot of INSN, even if they appear to use a resource set or
!      clobbered in INSN.  INSN is always a 'jump_insn' or an 'insn'; GCC
!      knows that every 'call_insn' has this behavior.  On machines where
!      some 'insn' or 'jump_insn' is really a function call and hence has
       this behavior, you should define this macro.
  
       You need not define this macro if it would always return zero.
--- 44529,44537 ----
       Define this macro as a C expression that is nonzero if it is safe
       for the delay slot scheduler to place instructions in the delay
       slot of INSN, even if they appear to use a resource set or
!      clobbered in INSN.  INSN is always a ‘jump_insn’ or an ‘insn’; GCC
!      knows that every ‘call_insn’ has this behavior.  On machines where
!      some ‘insn’ or ‘jump_insn’ is really a function call and hence has
       this behavior, you should define this macro.
  
       You need not define this macro if it would always return zero.
*************** Here are several miscellaneous parameter
*** 44539,44546 ****
       Define this macro as a C expression that is nonzero if it is safe
       for the delay slot scheduler to place instructions in the delay
       slot of INSN, even if they appear to set or clobber a resource
!      referenced in INSN.  INSN is always a 'jump_insn' or an 'insn'.  On
!      machines where some 'insn' or 'jump_insn' is really a function call
       and its operands are registers whose use is actually in the
       subroutine it calls, you should define this macro.  Doing so allows
       the delay slot scheduler to move instructions which copy arguments
--- 44540,44547 ----
       Define this macro as a C expression that is nonzero if it is safe
       for the delay slot scheduler to place instructions in the delay
       slot of INSN, even if they appear to set or clobber a resource
!      referenced in INSN.  INSN is always a ‘jump_insn’ or an ‘insn’.  On
!      machines where some ‘insn’ or ‘jump_insn’ is really a function call
       and its operands are registers whose use is actually in the
       subroutine it calls, you should define this macro.  Doing so allows
       the delay slot scheduler to move instructions which copy arguments
*************** Here are several miscellaneous parameter
*** 44561,44567 ****
            vec<rtx>& INPUTS, vec<machine_mode>& INPUT_MODES, vec<const
            char *>& CONSTRAINTS, vec<rtx>& USESS, vec<rtx>& CLOBBERS,
            HARD_REG_SET& CLOBBERED_REGS, location_t LOC)
!      This target hook may add "clobbers" to CLOBBERS and CLOBBERED_REGS
       for any hard regs the port wishes to automatically clobber for an
       asm.  It can also add hard registers that are used by the asm to
       USES.  The OUTPUTS and INPUTS may be inspected to avoid clobbering
--- 44562,44568 ----
            vec<rtx>& INPUTS, vec<machine_mode>& INPUT_MODES, vec<const
            char *>& CONSTRAINTS, vec<rtx>& USESS, vec<rtx>& CLOBBERS,
            HARD_REG_SET& CLOBBERED_REGS, location_t LOC)
!      This target hook may add “clobbers” to CLOBBERS and CLOBBERED_REGS
       for any hard regs the port wishes to automatically clobber for an
       asm.  It can also add hard registers that are used by the asm to
       USES.  The OUTPUTS and INPUTS may be inspected to avoid clobbering
*************** Here are several miscellaneous parameter
*** 44576,44597 ****
  
   -- Macro: MATH_LIBRARY
       Define this macro as a C string constant for the linker argument to
!      link in the system math library, minus the initial '"-l"', or '""'
       if the target does not have a separate math library.
  
!      You need only define this macro if the default of '"m"' is wrong.
  
   -- Macro: LIBRARY_PATH_ENV
       Define this macro as a C string constant for the environment
       variable that specifies where the linker should look for libraries.
  
!      You need only define this macro if the default of '"LIBRARY_PATH"'
       is wrong.
  
   -- Macro: TARGET_POSIX_IO
       Define this macro if the target supports the following POSIX file
       functions, access, mkdir and file locking with fcntl / F_SETLKW.
!      Defining 'TARGET_POSIX_IO' will enable the test coverage code to
       use file locking when exiting a program, which avoids race
       conditions if the program has forked.  It will also create
       directories at run-time for cross-profiling.
--- 44577,44598 ----
  
   -- Macro: MATH_LIBRARY
       Define this macro as a C string constant for the linker argument to
!      link in the system math library, minus the initial ‘"-l"’, or ‘""’
       if the target does not have a separate math library.
  
!      You need only define this macro if the default of ‘"m"’ is wrong.
  
   -- Macro: LIBRARY_PATH_ENV
       Define this macro as a C string constant for the environment
       variable that specifies where the linker should look for libraries.
  
!      You need only define this macro if the default of ‘"LIBRARY_PATH"’
       is wrong.
  
   -- Macro: TARGET_POSIX_IO
       Define this macro if the target supports the following POSIX file
       functions, access, mkdir and file locking with fcntl / F_SETLKW.
!      Defining ‘TARGET_POSIX_IO’ will enable the test coverage code to
       use file locking when exiting a program, which avoids race
       conditions if the program has forked.  It will also create
       directories at run-time for cross-profiling.
*************** Here are several miscellaneous parameter
*** 44600,44612 ****
  
       A C expression for the maximum number of instructions to execute
       via conditional execution instructions instead of a branch.  A
!      value of 'BRANCH_COST'+1 is the default.
  
   -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
       Used if the target needs to perform machine-dependent modifications
       on the conditionals used for turning basic blocks into
       conditionally executed code.  CE_INFO points to a data structure,
!      'struct ce_if_block', which contains information about the
       currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the tests
       that are used for converting the then-block and the else-block,
       respectively.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer
--- 44601,44613 ----
  
       A C expression for the maximum number of instructions to execute
       via conditional execution instructions instead of a branch.  A
!      value of ‘BRANCH_COST’+1 is the default.
  
   -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
       Used if the target needs to perform machine-dependent modifications
       on the conditionals used for turning basic blocks into
       conditionally executed code.  CE_INFO points to a data structure,
!      ‘struct ce_if_block’, which contains information about the
       currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the tests
       that are used for converting the then-block and the else-block,
       respectively.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer
*************** Here are several miscellaneous parameter
*** 44614,44646 ****
  
   -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
            FALSE_EXPR)
!      Like 'IFCVT_MODIFY_TESTS', but used when converting more
!      complicated if-statements into conditions combined by 'and' and
!      'or' operations.  BB contains the basic block that contains the
       test that is currently being processed and about to be turned into
       a condition.
  
   -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
       A C expression to modify the PATTERN of an INSN that is to be
       converted to conditional execution format.  CE_INFO points to a
!      data structure, 'struct ce_if_block', which contains information
       about the currently processed blocks.
  
   -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
       A C expression to perform any final machine dependent modifications
       in converting code to conditional execution.  The involved basic
!      blocks can be found in the 'struct ce_if_block' structure that is
       pointed to by CE_INFO.
  
   -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
       A C expression to cancel any machine dependent modifications in
       converting code to conditional execution.  The involved basic
!      blocks can be found in the 'struct ce_if_block' structure that is
       pointed to by CE_INFO.
  
   -- Macro: IFCVT_MACHDEP_INIT (CE_INFO)
       A C expression to initialize any machine specific data for
!      if-conversion of the if-block in the 'struct ce_if_block' structure
       that is pointed to by CE_INFO.
  
   -- Target Hook: bool TARGET_USE_LATE_PROLOGUE_EPILOGUE ()
--- 44615,44647 ----
  
   -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
            FALSE_EXPR)
!      Like ‘IFCVT_MODIFY_TESTS’, but used when converting more
!      complicated if-statements into conditions combined by ‘and’ and
!      ‘or’ operations.  BB contains the basic block that contains the
       test that is currently being processed and about to be turned into
       a condition.
  
   -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
       A C expression to modify the PATTERN of an INSN that is to be
       converted to conditional execution format.  CE_INFO points to a
!      data structure, ‘struct ce_if_block’, which contains information
       about the currently processed blocks.
  
   -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
       A C expression to perform any final machine dependent modifications
       in converting code to conditional execution.  The involved basic
!      blocks can be found in the ‘struct ce_if_block’ structure that is
       pointed to by CE_INFO.
  
   -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
       A C expression to cancel any machine dependent modifications in
       converting code to conditional execution.  The involved basic
!      blocks can be found in the ‘struct ce_if_block’ structure that is
       pointed to by CE_INFO.
  
   -- Macro: IFCVT_MACHDEP_INIT (CE_INFO)
       A C expression to initialize any machine specific data for
!      if-conversion of the if-block in the ‘struct ce_if_block’ structure
       that is pointed to by CE_INFO.
  
   -- Target Hook: bool TARGET_USE_LATE_PROLOGUE_EPILOGUE ()
*************** Here are several miscellaneous parameter
*** 44666,44672 ****
            *CALL)
       If defined, this hook emits an epilogue sequence for sibling (tail)
       call instruction CALL.  Another way of providing epilogues for
!      sibling calls is to define the 'sibcall_epilogue' instruction
       pattern; the main advantage of this hook over the pattern is that
       it has access to the call instruction.
  
--- 44667,44673 ----
            *CALL)
       If defined, this hook emits an epilogue sequence for sibling (tail)
       call instruction CALL.  Another way of providing epilogues for
!      sibling calls is to define the ‘sibcall_epilogue’ instruction
       pattern; the main advantage of this hook over the pattern is that
       it has access to the call instruction.
  
*************** Here are several miscellaneous parameter
*** 44696,44705 ****
       example, SIMD vector instructions or prefetch instructions).
  
       To create a built-in function, call the function
!      'lang_hooks.builtin_function' which is defined by the language
       front end.  You can use any type nodes set up by
!      'build_common_tree_nodes'; only language front ends that use those
!      two functions will call 'TARGET_INIT_BUILTINS'.
  
   -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
            INITIALIZE_P)
--- 44697,44706 ----
       example, SIMD vector instructions or prefetch instructions).
  
       To create a built-in function, call the function
!      ‘lang_hooks.builtin_function’ which is defined by the language
       front end.  You can use any type nodes set up by
!      ‘build_common_tree_nodes’; only language front ends that use those
!      two functions will call ‘TARGET_INIT_BUILTINS’.
  
   -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
            INITIALIZE_P)
*************** Here are several miscellaneous parameter
*** 44708,44721 ****
       returns the builtin function declaration for the builtin function
       code CODE.  If there is no such builtin and it cannot be
       initialized at this time if INITIALIZE_P is true the function
!      should return 'NULL_TREE'.  If CODE is out of range the function
!      should return 'error_mark_node'.
  
   -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
            SUBTARGET, machine_mode MODE, int IGNORE)
  
       Expand a call to a machine specific built-in function that was set
!      up by 'TARGET_INIT_BUILTINS'.  EXP is the expression for the
       function call; the result should go to TARGET if that is
       convenient, and have mode MODE if that is convenient.  SUBTARGET
       may be used as the target for computing one of EXP's operands.
--- 44709,44722 ----
       returns the builtin function declaration for the builtin function
       code CODE.  If there is no such builtin and it cannot be
       initialized at this time if INITIALIZE_P is true the function
!      should return ‘NULL_TREE’.  If CODE is out of range the function
!      should return ‘error_mark_node’.
  
   -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
            SUBTARGET, machine_mode MODE, int IGNORE)
  
       Expand a call to a machine specific built-in function that was set
!      up by ‘TARGET_INIT_BUILTINS’.  EXP is the expression for the
       function call; the result should go to TARGET if that is
       convenient, and have mode MODE if that is convenient.  SUBTARGET
       may be used as the target for computing one of EXP's operands.
*************** Here are several miscellaneous parameter
*** 44725,44737 ****
   -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
            LOC, tree FNDECL, void *ARGLIST)
       Select a replacement for a machine specific built-in function that
!      was set up by 'TARGET_INIT_BUILTINS'.  This is done _before_
       regular type checking, and so allows the target to implement a
       crude form of function overloading.  FNDECL is the declaration of
       the built-in function.  ARGLIST is the list of arguments passed to
       the built-in function.  The result is a complete expression that
!      implements the operation, usually another 'CALL_EXPR'.  ARGLIST
!      really has type 'VEC(tree,gc)*'
  
   -- Target Hook: bool TARGET_CHECK_BUILTIN_CALL (location_t LOC,
            vec<location_t> ARG_LOC, tree FNDECL, tree ORIG_FNDECL,
--- 44726,44738 ----
   -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
            LOC, tree FNDECL, void *ARGLIST)
       Select a replacement for a machine specific built-in function that
!      was set up by ‘TARGET_INIT_BUILTINS’.  This is done _before_
       regular type checking, and so allows the target to implement a
       crude form of function overloading.  FNDECL is the declaration of
       the built-in function.  ARGLIST is the list of arguments passed to
       the built-in function.  The result is a complete expression that
!      implements the operation, usually another ‘CALL_EXPR’.  ARGLIST
!      really has type ‘VEC(tree,gc)*’
  
   -- Target Hook: bool TARGET_CHECK_BUILTIN_CALL (location_t LOC,
            vec<location_t> ARG_LOC, tree FNDECL, tree ORIG_FNDECL,
*************** Here are several miscellaneous parameter
*** 44741,44749 ****
       signature.  Return true if the call is valid, otherwise report an
       error and return false.
  
!      This hook is called after 'TARGET_RESOLVE_OVERLOADED_BUILTIN'.  The
       call was originally to built-in function ORIG_FNDECL, but after the
!      optional 'TARGET_RESOLVE_OVERLOADED_BUILTIN' step is now to
       built-in function FNDECL.  LOC is the location of the call and ARGS
       is an array of function arguments, of which there are NARGS.
       ARG_LOC specifies the location of each argument.
--- 44742,44750 ----
       signature.  Return true if the call is valid, otherwise report an
       error and return false.
  
!      This hook is called after ‘TARGET_RESOLVE_OVERLOADED_BUILTIN’.  The
       call was originally to built-in function ORIG_FNDECL, but after the
!      optional ‘TARGET_RESOLVE_OVERLOADED_BUILTIN’ step is now to
       built-in function FNDECL.  LOC is the location of the call and ARGS
       is an array of function arguments, of which there are NARGS.
       ARG_LOC specifies the location of each argument.
*************** Here are several miscellaneous parameter
*** 44751,44757 ****
   -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree
            *ARGP, bool IGNORE)
       Fold a call to a machine specific built-in function that was set up
!      by 'TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
       built-in function.  N_ARGS is the number of arguments passed to the
       function; the arguments themselves are pointed to by ARGP.  The
       result is another tree, valid for both GIMPLE and GENERIC,
--- 44752,44758 ----
   -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree
            *ARGP, bool IGNORE)
       Fold a call to a machine specific built-in function that was set up
!      by ‘TARGET_INIT_BUILTINS’.  FNDECL is the declaration of the
       built-in function.  N_ARGS is the number of arguments passed to the
       function; the arguments themselves are pointed to by ARGP.  The
       result is another tree, valid for both GIMPLE and GENERIC,
*************** Here are several miscellaneous parameter
*** 44761,44767 ****
   -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator
            *GSI)
       Fold a call to a machine specific built-in function that was set up
!      by 'TARGET_INIT_BUILTINS'.  GSI points to the gimple statement
       holding the function call.  Returns true if any change was made to
       the GIMPLE stream.
  
--- 44762,44768 ----
   -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator
            *GSI)
       Fold a call to a machine specific built-in function that was set up
!      by ‘TARGET_INIT_BUILTINS’.  GSI points to the gimple statement
       holding the function call.  Returns true if any change was made to
       the GIMPLE stream.
  
*************** Here are several miscellaneous parameter
*** 44825,44831 ****
            &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int
            LOOP_DEPTH, bool ENTERED_AT_TOP)
       Return true if it is possible to use low-overhead loops
!      ('doloop_end' and 'doloop_begin') for a particular loop.
       ITERATIONS gives the exact number of iterations, or 0 if not known.
       ITERATIONS_MAX gives the maximum number of iterations, or 0 if not
       known.  LOOP_DEPTH is the nesting depth of the loop, with 1 for
--- 44826,44832 ----
            &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int
            LOOP_DEPTH, bool ENTERED_AT_TOP)
       Return true if it is possible to use low-overhead loops
!      (‘doloop_end’ and ‘doloop_begin’) for a particular loop.
       ITERATIONS gives the exact number of iterations, or 0 if not known.
       ITERATIONS_MAX gives the maximum number of iterations, or 0 if not
       known.  LOOP_DEPTH is the nesting depth of the loop, with 1 for
*************** Here are several miscellaneous parameter
*** 44833,44841 ****
       on.  ENTERED_AT_TOP is true if the loop is only entered from the
       top.
  
!      This hook is only used if 'doloop_end' is available.  The default
       implementation returns true.  You can use
!      'can_use_doloop_if_innermost' if the loop must be the innermost,
       and if there are no other restrictions.
  
   -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const
--- 44834,44842 ----
       on.  ENTERED_AT_TOP is true if the loop is only entered from the
       top.
  
!      This hook is only used if ‘doloop_end’ is available.  The default
       implementation returns true.  You can use
!      ‘can_use_doloop_if_innermost’ if the loop must be the innermost,
       and if there are no other restrictions.
  
   -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const
*************** Here are several miscellaneous parameter
*** 44854,44869 ****
  
   -- Target Hook: machine_mode TARGET_PREFERRED_DOLOOP_MODE (machine_mode
            MODE)
!      This hook takes a MODE for a doloop IV, where 'mode' is the
       original mode for the operation.  If the target prefers an
!      alternate 'mode' for the operation, then this hook should return
!      that mode; otherwise the original 'mode' should be returned.  For
!      example, on a 64-bit target, 'DImode' might be preferred over
!      'SImode'.  Both the original and the returned modes should be
!      'MODE_INT'.
  
   -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN)
!      Take an instruction in INSN and return 'false' if the instruction
       is not appropriate as a combination of two or more instructions.
       The default is to accept all instructions.
  
--- 44855,44870 ----
  
   -- Target Hook: machine_mode TARGET_PREFERRED_DOLOOP_MODE (machine_mode
            MODE)
!      This hook takes a MODE for a doloop IV, where ‘mode’ is the
       original mode for the operation.  If the target prefers an
!      alternate ‘mode’ for the operation, then this hook should return
!      that mode; otherwise the original ‘mode’ should be returned.  For
!      example, on a 64-bit target, ‘DImode’ might be preferred over
!      ‘SImode’.  Both the original and the returned modes should be
!      ‘MODE_INT’.
  
   -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN)
!      Take an instruction in INSN and return ‘false’ if the instruction
       is not appropriate as a combination of two or more instructions.
       The default is to accept all instructions.
  
*************** Here are several miscellaneous parameter
*** 44875,44881 ****
       made to follow through a hot/cold partitioning.
  
   -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
!      This target hook returns 'true' if X is considered to be
       commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
       PA doesn't consider PLUS to be commutative inside a MEM.
       OUTER_CODE is the rtx code of the enclosing rtl, if known,
--- 44876,44882 ----
       made to follow through a hot/cold partitioning.
  
   -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
!      This target hook returns ‘true’ if X is considered to be
       commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
       PA doesn't consider PLUS to be commutative inside a MEM.
       OUTER_CODE is the rtx code of the enclosing rtl, if known,
*************** Here are several miscellaneous parameter
*** 44887,44917 ****
       pseudo register, it is often not necessary to actually allocate
       another register to this pseudo register, because the original hard
       register or a stack slot it has been saved into can be used.
!      'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
       allocation once for each hard register that had its initial value
!      copied by using 'get_func_hard_reg_initial_val' or
!      'get_hard_reg_initial_val'.  Possible values are 'NULL_RTX', if you
!      don't want to do any special allocation, a 'REG' rtx--that would
       typically be the hard register itself, if it is known not to be
!      clobbered--or a 'MEM'.  If you are returning a 'MEM', this is only
       a hint for the allocator; it might decide to use another register
!      anyways.  You may use 'current_function_is_leaf' or 'REG_N_SETS' in
       the hook to determine if the hard register in question will not be
!      clobbered.  The default value of this hook is 'NULL', which
       disables any special allocation.
  
   -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
            FLAGS)
!      This target hook returns nonzero if X, an 'unspec' or
!      'unspec_volatile' operation, might cause a trap.  Targets can use
!      this hook to enhance precision of analysis for 'unspec' and
!      'unspec_volatile' operations.  You may call 'may_trap_p_1' to
       analyze inner elements of X in which case FLAGS should be passed
       along.
  
   -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
       The compiler invokes this hook whenever it changes its current
!      function context ('cfun').  You can define this function if the
       back end needs to perform any initialization or reset actions on a
       per-function basis.  For example, it may be used to implement
       function attributes that affect register usage or code generation
--- 44888,44918 ----
       pseudo register, it is often not necessary to actually allocate
       another register to this pseudo register, because the original hard
       register or a stack slot it has been saved into can be used.
!      ‘TARGET_ALLOCATE_INITIAL_VALUE’ is called at the start of register
       allocation once for each hard register that had its initial value
!      copied by using ‘get_func_hard_reg_initial_val’ or
!      ‘get_hard_reg_initial_val’.  Possible values are ‘NULL_RTX’, if you
!      don't want to do any special allocation, a ‘REG’ rtx--that would
       typically be the hard register itself, if it is known not to be
!      clobbered--or a ‘MEM’.  If you are returning a ‘MEM’, this is only
       a hint for the allocator; it might decide to use another register
!      anyways.  You may use ‘current_function_is_leaf’ or ‘REG_N_SETS’ in
       the hook to determine if the hard register in question will not be
!      clobbered.  The default value of this hook is ‘NULL’, which
       disables any special allocation.
  
   -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
            FLAGS)
!      This target hook returns nonzero if X, an ‘unspec’ or
!      ‘unspec_volatile’ operation, might cause a trap.  Targets can use
!      this hook to enhance precision of analysis for ‘unspec’ and
!      ‘unspec_volatile’ operations.  You may call ‘may_trap_p_1’ to
       analyze inner elements of X in which case FLAGS should be passed
       along.
  
   -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
       The compiler invokes this hook whenever it changes its current
!      function context (‘cfun’).  You can define this function if the
       back end needs to perform any initialization or reset actions on a
       per-function basis.  For example, it may be used to implement
       function attributes that affect register usage or code generation
*************** Here are several miscellaneous parameter
*** 44920,44936 ****
       left a function context and is returning to processing at the top
       level.  The default hook function does nothing.
  
!      GCC sets 'cfun' to a dummy function context during initialization
       of some parts of the back end.  The hook function is not invoked in
       this situation; you need not worry about the hook being invoked
       recursively, or when the back end is in a partially-initialized
!      state.  'cfun' might be 'NULL' to indicate processing at top level,
       outside of any function scope.
  
   -- Macro: TARGET_OBJECT_SUFFIX
       Define this macro to be a C string representing the suffix for
       object files on your target machine.  If you do not define this
!      macro, GCC will use '.o' as the suffix for object files.
  
   -- Macro: TARGET_EXECUTABLE_SUFFIX
       Define this macro to be a C string representing the suffix to be
--- 44921,44937 ----
       left a function context and is returning to processing at the top
       level.  The default hook function does nothing.
  
!      GCC sets ‘cfun’ to a dummy function context during initialization
       of some parts of the back end.  The hook function is not invoked in
       this situation; you need not worry about the hook being invoked
       recursively, or when the back end is in a partially-initialized
!      state.  ‘cfun’ might be ‘NULL’ to indicate processing at top level,
       outside of any function scope.
  
   -- Macro: TARGET_OBJECT_SUFFIX
       Define this macro to be a C string representing the suffix for
       object files on your target machine.  If you do not define this
!      macro, GCC will use ‘.o’ as the suffix for object files.
  
   -- Macro: TARGET_EXECUTABLE_SUFFIX
       Define this macro to be a C string representing the suffix to be
*************** Here are several miscellaneous parameter
*** 44939,44952 ****
       suffix for executable files.
  
   -- Macro: COLLECT_EXPORT_LIST
!      If defined, 'collect2' will scan the individual object files
       specified on its command line and create an export list for the
       linker.  Define this macro for systems like AIX, where the linker
!      discards object files that are not referenced from 'main' and uses
       export lists.
  
   -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
!      This target hook returns '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 reload, so this target hook should be defined to a
--- 44940,44953 ----
       suffix for executable files.
  
   -- Macro: COLLECT_EXPORT_LIST
!      If defined, ‘collect2’ will scan the individual object files
       specified on its command line and create an export list for the
       linker.  Define this macro for systems like AIX, where the linker
!      discards object files that are not referenced from ‘main’ and uses
       export lists.
  
   -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
!      This target hook returns ‘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 reload, so this target hook should be defined to a
*************** Here are several miscellaneous parameter
*** 44968,44978 ****
            rtx_insn **GEN_SEQ, rtx_code CODE, tree OP0, tree OP1)
       This function prepares to emit a comparison insn for the first
       compare in a sequence of conditional comparisions.  It returns an
!      appropriate comparison with 'CC' for passing to 'gen_ccmp_next' or
!      'cbranch_optab'.  The insns to prepare the compare are saved in
       PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
       emitted when all the compares in the conditional comparision are
!      generated without error.  CODE is the 'rtx_code' of the compare for
       OP0 and OP1.
  
   -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx_insn **PREP_SEQ, rtx_insn
--- 44969,44979 ----
            rtx_insn **GEN_SEQ, rtx_code CODE, tree OP0, tree OP1)
       This function prepares to emit a comparison insn for the first
       compare in a sequence of conditional comparisions.  It returns an
!      appropriate comparison with ‘CC’ for passing to ‘gen_ccmp_next’ or
!      ‘cbranch_optab’.  The insns to prepare the compare are saved in
       PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
       emitted when all the compares in the conditional comparision are
!      generated without error.  CODE is the ‘rtx_code’ of the compare for
       OP0 and OP1.
  
   -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx_insn **PREP_SEQ, rtx_insn
*************** Here are several miscellaneous parameter
*** 44980,44995 ****
            rtx_code BIT_CODE)
       This function prepares to emit a conditional comparison within a
       sequence of conditional comparisons.  It returns an appropriate
!      comparison with 'CC' for passing to 'gen_ccmp_next' or
!      'cbranch_optab'.  The insns to prepare the compare are saved in
       PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
       emitted when all the compares in the conditional comparision are
       generated without error.  The PREV expression is the result of a
!      prior call to 'gen_ccmp_first' or 'gen_ccmp_next'.  It may return
!      'NULL' if the combination of PREV and this comparison is not
       supported, otherwise the result must be appropriate for passing to
!      'gen_ccmp_next' or 'cbranch_optab'.  CODE is the 'rtx_code' of the
!      compare for OP0 and OP1.  BIT_CODE is 'AND' or 'IOR', which is the
       op on the compares.
  
   -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
--- 44981,44996 ----
            rtx_code BIT_CODE)
       This function prepares to emit a conditional comparison within a
       sequence of conditional comparisons.  It returns an appropriate
!      comparison with ‘CC’ for passing to ‘gen_ccmp_next’ or
!      ‘cbranch_optab’.  The insns to prepare the compare are saved in
       PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
       emitted when all the compares in the conditional comparision are
       generated without error.  The PREV expression is the result of a
!      prior call to ‘gen_ccmp_first’ or ‘gen_ccmp_next’.  It may return
!      ‘NULL’ if the combination of PREV and this comparison is not
       supported, otherwise the result must be appropriate for passing to
!      ‘gen_ccmp_next’ or ‘cbranch_optab’.  CODE is the ‘rtx_code’ of the
!      compare for OP0 and OP1.  BIT_CODE is ‘AND’ or ‘IOR’, which is the
       op on the compares.
  
   -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
*************** Here are several miscellaneous parameter
*** 45008,45014 ****
       exponentiation by an integer constant inline.  When this value is
       defined, exponentiation requiring more than this number of
       multiplications is implemented by calling the system library's
!      'pow', 'powf' or 'powl' routines.  The default value places no
       upper bound on the multiplication count.
  
   -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
--- 45009,45015 ----
       exponentiation by an integer constant inline.  When this value is
       defined, exponentiation requiring more than this number of
       multiplications is implemented by calling the system library's
!      ‘pow’, ‘powf’ or ‘powl’ routines.  The default value places no
       upper bound on the multiplication count.
  
   -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
*************** Here are several miscellaneous parameter
*** 45030,45063 ****
       This target hook should register special include paths for the
       target.  The parameter PATH is the include to register.  On Darwin
       systems, this is used for Framework includes, which have semantics
!      that are different from '-I'.
  
   -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
!      This target macro returns 'true' if it is safe to use a local alias
!      for a virtual function FNDECL when constructing thunks, 'false'
!      otherwise.  By default, the macro returns 'true' for all functions,
!      if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'),
!      'false' otherwise,
  
   -- Macro: TARGET_FORMAT_TYPES
       If defined, this macro is the name of a global variable containing
!      target-specific format checking information for the '-Wformat'
       option.  The default is to have no target-specific format checks.
  
   -- Macro: TARGET_N_FORMAT_TYPES
       If defined, this macro is the number of entries in
!      'TARGET_FORMAT_TYPES'.
  
   -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
       If defined, this macro is the name of a global variable containing
!      target-specific format overrides for the '-Wformat' option.  The
       default is to have no target-specific format overrides.  If
!      defined, 'TARGET_FORMAT_TYPES' and
!      'TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT' must be defined, too.
  
   -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
       If defined, this macro specifies the number of entries in
!      'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
  
   -- Macro: TARGET_OVERRIDES_FORMAT_INIT
       If defined, this macro specifies the optional initialization
--- 45031,45064 ----
       This target hook should register special include paths for the
       target.  The parameter PATH is the include to register.  On Darwin
       systems, this is used for Framework includes, which have semantics
!      that are different from ‘-I’.
  
   -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
!      This target macro returns ‘true’ if it is safe to use a local alias
!      for a virtual function FNDECL when constructing thunks, ‘false’
!      otherwise.  By default, the macro returns ‘true’ for all functions,
!      if a target supports aliases (i.e. defines ‘ASM_OUTPUT_DEF’),
!      ‘false’ otherwise,
  
   -- Macro: TARGET_FORMAT_TYPES
       If defined, this macro is the name of a global variable containing
!      target-specific format checking information for the ‘-Wformat’
       option.  The default is to have no target-specific format checks.
  
   -- Macro: TARGET_N_FORMAT_TYPES
       If defined, this macro is the number of entries in
!      ‘TARGET_FORMAT_TYPES’.
  
   -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
       If defined, this macro is the name of a global variable containing
!      target-specific format overrides for the ‘-Wformat’ option.  The
       default is to have no target-specific format overrides.  If
!      defined, ‘TARGET_FORMAT_TYPES’ and
!      ‘TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT’ must be defined, too.
  
   -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
       If defined, this macro specifies the number of entries in
!      ‘TARGET_OVERRIDES_FORMAT_ATTRIBUTES’.
  
   -- Macro: TARGET_OVERRIDES_FORMAT_INIT
       If defined, this macro specifies the optional initialization
*************** Here are several miscellaneous parameter
*** 45073,45105 ****
   -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
            FROMTYPE, const_tree TOTYPE)
       If defined, this macro returns the diagnostic message when it is
!      invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity
       should be determined by the front end.
  
   -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
            const_tree TYPE)
       If defined, this macro returns the diagnostic message when it is
       invalid to apply operation OP (where unary plus is denoted by
!      'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity
       should be determined by the front end.
  
   -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
            const_tree TYPE1, const_tree TYPE2)
       If defined, this macro returns the diagnostic message when it is
       invalid to apply operation OP to operands of types TYPE1 and TYPE2,
!      or 'NULL' if validity should be determined by the front end.
  
   -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
       If defined, this target hook returns the type to which values of
       TYPE should be promoted when they appear in expressions, analogous
!      to the integer promotions, or 'NULL_TREE' to use the 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.
  
   -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
       If defined, this hook returns the result of converting EXPR to
!      TYPE.  It should return the converted expression, or 'NULL_TREE' to
       apply the front end's normal conversion rules.  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.
--- 45074,45106 ----
   -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
            FROMTYPE, const_tree TOTYPE)
       If defined, this macro returns the diagnostic message when it is
!      invalid to convert from FROMTYPE to TOTYPE, or ‘NULL’ if validity
       should be determined by the front end.
  
   -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
            const_tree TYPE)
       If defined, this macro returns the diagnostic message when it is
       invalid to apply operation OP (where unary plus is denoted by
!      ‘CONVERT_EXPR’) to an operand of type TYPE, or ‘NULL’ if validity
       should be determined by the front end.
  
   -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
            const_tree TYPE1, const_tree TYPE2)
       If defined, this macro returns the diagnostic message when it is
       invalid to apply operation OP to operands of types TYPE1 and TYPE2,
!      or ‘NULL’ if validity should be determined by the front end.
  
   -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
       If defined, this target hook returns the type to which values of
       TYPE should be promoted when they appear in expressions, analogous
!      to the integer promotions, or ‘NULL_TREE’ to use the 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.
  
   -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
       If defined, this hook returns the result of converting EXPR to
!      TYPE.  It should return the converted expression, or ‘NULL_TREE’ to
       apply the front end's normal conversion rules.  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.
*************** Here are several miscellaneous parameter
*** 45112,45119 ****
       reports an error against LOC for invalid uses of TYPE.
  
       Calls to this hook should be made through the global function
!      'verify_type_context', which makes the SILENT_P parameter default
!      to false and also handles 'error_mark_node'.
  
       The default implementation always returns true.
  
--- 45113,45120 ----
       reports an error against LOC for invalid uses of TYPE.
  
       Calls to this hook should be made through the global function
!      ‘verify_type_context’, which makes the SILENT_P parameter default
!      to false and also handles ‘error_mark_node’.
  
       The default implementation always returns true.
  
*************** Here are several miscellaneous parameter
*** 45124,45132 ****
  
   -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
       Define this macro if any target-specific attributes need to be
!      attached to the functions in 'libgcc' that provide low-level
       support for call stack unwinding.  It is used in declarations in
!      'unwind-generic.h' and the associated definitions of those
       functions.
  
   -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
--- 45125,45133 ----
  
   -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
       Define this macro if any target-specific attributes need to be
!      attached to the functions in ‘libgcc’ that provide low-level
       support for call stack unwinding.  It is used in declarations in
!      ‘unwind-generic.h’ and the associated definitions of those
       functions.
  
   -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
*************** Here are several miscellaneous parameter
*** 45137,45143 ****
       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
!      'NULL' if no DRAP is needed.
  
   -- Target Hook: HARD_REG_SET TARGET_ZERO_CALL_USED_REGS (HARD_REG_SET
            SELECTED_REGS)
--- 45138,45144 ----
       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
!      ‘NULL’ if no DRAP is needed.
  
   -- Target Hook: HARD_REG_SET TARGET_ZERO_CALL_USED_REGS (HARD_REG_SET
            SELECTED_REGS)
*************** Here are several miscellaneous parameter
*** 45164,45170 ****
       arguments should be allocated to stack slots.  Normally, GCC
       allocates stacks slots for arguments when not optimizing in order
       to make debugging easier.  However, when a function is declared
!      with '__attribute__((naked))', there is no stack frame, and the
       compiler 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
--- 45165,45171 ----
       arguments should be allocated to stack slots.  Normally, GCC
       allocates stacks slots for arguments when not optimizing in order
       to make debugging easier.  However, when a function is declared
!      with ‘__attribute__((naked))’, there is no stack frame, and the
       compiler 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
*************** Here are several miscellaneous parameter
*** 45180,45190 ****
       anchor to the available expressions.  These are then queried when
       encountering new constants.  The anchors are computed by rounding
       the constant up and down to a multiple of the value of
!      'TARGET_CONST_ANCHOR'.  'TARGET_CONST_ANCHOR' should be the maximum
       positive value accepted by immediate-add plus one.  We currently
!      assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2.
       For example, on MIPS, where add-immediate takes a 16-bit signed
!      value, 'TARGET_CONST_ANCHOR' is set to '0x8000'.  The default value
       is zero, which disables this optimization.
  
   -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void)
--- 45181,45191 ----
       anchor to the available expressions.  These are then queried when
       encountering new constants.  The anchors are computed by rounding
       the constant up and down to a multiple of the value of
!      ‘TARGET_CONST_ANCHOR’.  ‘TARGET_CONST_ANCHOR’ should be the maximum
       positive value accepted by immediate-add plus one.  We currently
!      assume that the value of ‘TARGET_CONST_ANCHOR’ is a power of 2.
       For example, on MIPS, where add-immediate takes a 16-bit signed
!      value, ‘TARGET_CONST_ANCHOR’ is set to ‘0x8000’.  The default value
       is zero, which disables this optimization.
  
   -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void)
*************** Here are several miscellaneous parameter
*** 45200,45206 ****
  
   -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
       This value should be set if the result written by
!      'atomic_test_and_set' is not exactly 1, i.e. the 'bool' 'true'.
  
   -- Target Hook: bool TARGET_HAS_IFUNC_P (void)
       It returns true if the target supports GNU indirect functions.  The
--- 45201,45207 ----
  
   -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
       This value should be set if the result written by
!      ‘atomic_test_and_set’ is not exactly 1, i.e. the ‘bool’ ‘true’.
  
   -- Target Hook: bool TARGET_HAS_IFUNC_P (void)
       It returns true if the target supports GNU indirect functions.  The
*************** Here are several miscellaneous parameter
*** 45223,45239 ****
       floating-point exceptions to raise exceptions corresponding to the
       arithmetic operation whose result was successfully stored in a
       compare-and-exchange sequence.  This requires code equivalent to
!      calls to 'feholdexcept', 'feclearexcept' and 'feupdateenv' to be
       generated at appropriate points in the compare-and-exchange
!      sequence.  This hook should set '*HOLD' to an expression equivalent
!      to the call to 'feholdexcept', '*CLEAR' to an expression equivalent
!      to the call to 'feclearexcept' and '*UPDATE' to an expression
!      equivalent to the call to 'feupdateenv'.  The three expressions are
!      'NULL_TREE' on entry to the hook and may be left as 'NULL_TREE' if
       no code is required in a particular place.  The default
!      implementation leaves all three expressions as 'NULL_TREE'.  The
!      '__atomic_feraiseexcept' function from 'libatomic' may be of use as
!      part of the code generated in '*UPDATE'.
  
   -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree)
       Used when offloaded functions are seen in the compilation unit and
--- 45224,45240 ----
       floating-point exceptions to raise exceptions corresponding to the
       arithmetic operation whose result was successfully stored in a
       compare-and-exchange sequence.  This requires code equivalent to
!      calls to ‘feholdexcept’, ‘feclearexcept’ and ‘feupdateenv’ to be
       generated at appropriate points in the compare-and-exchange
!      sequence.  This hook should set ‘*HOLD’ to an expression equivalent
!      to the call to ‘feholdexcept’, ‘*CLEAR’ to an expression equivalent
!      to the call to ‘feclearexcept’ and ‘*UPDATE’ to an expression
!      equivalent to the call to ‘feupdateenv’.  The three expressions are
!      ‘NULL_TREE’ on entry to the hook and may be left as ‘NULL_TREE’ if
       no code is required in a particular place.  The default
!      implementation leaves all three expressions as ‘NULL_TREE’.  The
!      ‘__atomic_feraiseexcept’ function from ‘libatomic’ may be of use as
!      part of the code generated in ‘*UPDATE’.
  
   -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree)
       Used when offloaded functions are seen in the compilation unit and
*************** Here are several miscellaneous parameter
*** 45243,45317 ****
   -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void)
       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 '-foffload' options that exist as a
       common interface to express such options.  It should return a
       string containing these options, separated by spaces, which the
       caller will free.
  
   -- Macro: TARGET_SUPPORTS_WIDE_INT
  
!      On older ports, large integers are stored in 'CONST_DOUBLE' rtl
!      objects.  Newer ports define 'TARGET_SUPPORTS_WIDE_INT' to be
       nonzero to indicate that large integers are stored in
!      'CONST_WIDE_INT' rtl objects.  The 'CONST_WIDE_INT' allows very
!      large integer constants to be represented.  'CONST_DOUBLE' is
!      limited to twice the size of the host's 'HOST_WIDE_INT'
       representation.
  
       Converting a port mostly requires looking for the places where
!      'CONST_DOUBLE's are used with 'VOIDmode' and replacing that code
!      with code that accesses 'CONST_WIDE_INT's.  '"grep -i
!      const_double"' at the port level gets you to 95% of the changes
       that need to be made.  There are a few places that require a deeper
       look.
  
!         * There is no equivalent to 'hval' and 'lval' for
!           'CONST_WIDE_INT's.  This would be difficult to express in the
            md language since there are a variable number of elements.
  
!           Most ports only check that 'hval' is either 0 or -1 to see if
            the value is small.  As mentioned above, this will no longer
!           be necessary since small constants are always 'CONST_INT'.  Of
            course there are still a few exceptions, the alpha's
            constraint used by the zap instruction certainly requires
            careful examination by C code.  However, all the current code
            does is pass the hval and lval to C code, so evolving the c
!           code to look at the 'CONST_WIDE_INT' is not really a large
            change.
  
!         * Because there is no standard template that ports use to
            materialize constants, there is likely to be some futzing that
            is unique to each port in this code.
  
!         * The rtx costs may have to be adjusted to properly account for
!           larger constants that are represented as 'CONST_WIDE_INT'.
  
       All and all it does not take long to convert ports that the
       maintainer is familiar with.
  
   -- Target Hook: bool TARGET_HAVE_SPECULATION_SAFE_VALUE (bool ACTIVE)
       This hook is used to determine the level of target support for
!      '__builtin_speculation_safe_value'.  If called with an argument of
       false, it returns true if the target has been modified to support
       this builtin.  If called with an argument of true, it returns true
       if the target requires active mitigation execution might be
       speculative.
  
       The default implementation returns false if the target does not
!      define a pattern named 'speculation_barrier'.  Else it returns true
       for the first case and whether the pattern is enabled for the
       current compilation for the second case.
  
       For targets that have no processors that can execute instructions
       speculatively an alternative implemenation of this hook is
       available: simply redefine this hook to
!      'speculation_safe_value_not_needed' along with your other target
       hooks.
  
   -- Target Hook: rtx TARGET_SPECULATION_SAFE_VALUE (machine_mode MODE,
            rtx RESULT, rtx VAL, rtx FAILVAL)
       This target hook can be used to generate a target-specific code
!      sequence that implements the '__builtin_speculation_safe_value'
       built-in function.  The function must always return VAL in RESULT
       in mode MODE when the cpu is not executing speculatively, but must
       never return that when speculating until it is known that the
--- 45244,45318 ----
   -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void)
       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 ‘-foffload’ options that exist as a
       common interface to express such options.  It should return a
       string containing these options, separated by spaces, which the
       caller will free.
  
   -- Macro: TARGET_SUPPORTS_WIDE_INT
  
!      On older ports, large integers are stored in ‘CONST_DOUBLE’ rtl
!      objects.  Newer ports define ‘TARGET_SUPPORTS_WIDE_INT’ to be
       nonzero to indicate that large integers are stored in
!      ‘CONST_WIDE_INT’ rtl objects.  The ‘CONST_WIDE_INT’ allows very
!      large integer constants to be represented.  ‘CONST_DOUBLE’ is
!      limited to twice the size of the host's ‘HOST_WIDE_INT’
       representation.
  
       Converting a port mostly requires looking for the places where
!      ‘CONST_DOUBLE’s are used with ‘VOIDmode’ and replacing that code
!      with code that accesses ‘CONST_WIDE_INT’s.  ‘"grep -i
!      const_double"’ at the port level gets you to 95% of the changes
       that need to be made.  There are a few places that require a deeper
       look.
  
!         • There is no equivalent to ‘hval’ and ‘lval’ for
!           ‘CONST_WIDE_INT’s.  This would be difficult to express in the
            md language since there are a variable number of elements.
  
!           Most ports only check that ‘hval’ is either 0 or -1 to see if
            the value is small.  As mentioned above, this will no longer
!           be necessary since small constants are always ‘CONST_INT’.  Of
            course there are still a few exceptions, the alpha's
            constraint used by the zap instruction certainly requires
            careful examination by C code.  However, all the current code
            does is pass the hval and lval to C code, so evolving the c
!           code to look at the ‘CONST_WIDE_INT’ is not really a large
            change.
  
!         • Because there is no standard template that ports use to
            materialize constants, there is likely to be some futzing that
            is unique to each port in this code.
  
!         • The rtx costs may have to be adjusted to properly account for
!           larger constants that are represented as ‘CONST_WIDE_INT’.
  
       All and all it does not take long to convert ports that the
       maintainer is familiar with.
  
   -- Target Hook: bool TARGET_HAVE_SPECULATION_SAFE_VALUE (bool ACTIVE)
       This hook is used to determine the level of target support for
!      ‘__builtin_speculation_safe_value’.  If called with an argument of
       false, it returns true if the target has been modified to support
       this builtin.  If called with an argument of true, it returns true
       if the target requires active mitigation execution might be
       speculative.
  
       The default implementation returns false if the target does not
!      define a pattern named ‘speculation_barrier’.  Else it returns true
       for the first case and whether the pattern is enabled for the
       current compilation for the second case.
  
       For targets that have no processors that can execute instructions
       speculatively an alternative implemenation of this hook is
       available: simply redefine this hook to
!      ‘speculation_safe_value_not_needed’ along with your other target
       hooks.
  
   -- Target Hook: rtx TARGET_SPECULATION_SAFE_VALUE (machine_mode MODE,
            rtx RESULT, rtx VAL, rtx FAILVAL)
       This target hook can be used to generate a target-specific code
!      sequence that implements the ‘__builtin_speculation_safe_value’
       built-in function.  The function must always return VAL in RESULT
       in mode MODE when the cpu is not executing speculatively, but must
       never return that when speculating until it is known that the
*************** Here are several miscellaneous parameter
*** 45324,45341 ****
       must be unwound at a later time.
  
       The default implementation simply copies VAL to RESULT and emits a
!      'speculation_barrier' instruction if that is defined.
  
   -- Target Hook: void TARGET_RUN_TARGET_SELFTESTS (void)
       If selftests are enabled, run any selftests for this target.
  
   -- Target Hook: bool TARGET_MEMTAG_CAN_TAG_ADDRESSES ()
       True if the backend architecture naturally supports ignoring some
!      region of pointers.  This feature means that '-fsanitize=hwaddress'
       can work.
  
       At preset, this feature does not support address spaces.  It also
!      requires 'Pmode' to be the same as 'ptr_mode'.
  
   -- Target Hook: uint8_t TARGET_MEMTAG_TAG_SIZE ()
       Return the size of a tag (in bits) for this platform.
--- 45325,45342 ----
       must be unwound at a later time.
  
       The default implementation simply copies VAL to RESULT and emits a
!      ‘speculation_barrier’ instruction if that is defined.
  
   -- Target Hook: void TARGET_RUN_TARGET_SELFTESTS (void)
       If selftests are enabled, run any selftests for this target.
  
   -- Target Hook: bool TARGET_MEMTAG_CAN_TAG_ADDRESSES ()
       True if the backend architecture naturally supports ignoring some
!      region of pointers.  This feature means that ‘-fsanitize=hwaddress’
       can work.
  
       At preset, this feature does not support address spaces.  It also
!      requires ‘Pmode’ to be the same as ‘ptr_mode’.
  
   -- Target Hook: uint8_t TARGET_MEMTAG_TAG_SIZE ()
       Return the size of a tag (in bits) for this platform.
*************** Here are several miscellaneous parameter
*** 45366,45372 ****
       Return an RTX that represents the result of adding ADDR_OFFSET to
       the address in pointer BASE and TAG_OFFSET to the tag in pointer
       BASE.  The resulting RTX must either be a valid memory address or
!      be able to get put into an operand with 'force_operand'.
  
       Unlike other memtag hooks, this must return an expression and not
       emit any RTL.
--- 45367,45373 ----
       Return an RTX that represents the result of adding ADDR_OFFSET to
       the address in pointer BASE and TAG_OFFSET to the tag in pointer
       BASE.  The resulting RTX must either be a valid memory address or
!      be able to get put into an operand with ‘force_operand’.
  
       Unlike other memtag hooks, this must return an expression and not
       emit any RTL.
*************** Here are several miscellaneous parameter
*** 45392,45398 ****
  
   -- Target Hook: bool TARGET_HAVE_SHADOW_CALL_STACK
       This value is true if the target platform supports
!      '-fsanitize=shadow-call-stack'.  The default value is false.
  
   -- Target Hook: bool TARGET_HAVE_LIBATOMIC
       This value is true if the target platform supports libatomic.  The
--- 45393,45399 ----
  
   -- Target Hook: bool TARGET_HAVE_SHADOW_CALL_STACK
       This value is true if the target platform supports
!      ‘-fsanitize=shadow-call-stack’.  The default value is false.
  
   -- Target Hook: bool TARGET_HAVE_LIBATOMIC
       This value is true if the target platform supports libatomic.  The
*************** File: gccint.info,  Node: Host Config,
*** 45405,45421 ****
  *********************
  
  Most details about the machine and system on which the compiler is
! actually running are detected by the 'configure' script.  Some things
! are impossible for 'configure' to detect; these are described in two
! ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook
  functions in the file specified by the OUT_HOST_HOOK_OBJ variable in
! 'config.gcc'.  (The intention is that very few hosts will need a header
  file but nearly every fully supported host will need to override some
  hooks.)
  
   If you need to define only a few macros, and they have simple
! definitions, consider using the 'xm_defines' variable in your
! 'config.gcc' entry instead of creating a host configuration header.
  *Note System Config::.
  
  * Menu:
--- 45406,45422 ----
  *********************
  
  Most details about the machine and system on which the compiler is
! actually running are detected by the ‘configure’ script.  Some things
! are impossible for ‘configure’ to detect; these are described in two
! ways, either by macros defined in a file named ‘xm-MACHINE.h’ or by hook
  functions in the file specified by the OUT_HOST_HOOK_OBJ variable in
! ‘config.gcc’.  (The intention is that very few hosts will need a header
  file but nearly every fully supported host will need to override some
  hooks.)
  
   If you need to define only a few macros, and they have simple
! definitions, consider using the ‘xm_defines’ variable in your
! ‘config.gcc’ entry instead of creating a host configuration header.
  *Note System Config::.
  
  * Menu:
*************** File: gccint.info,  Node: Host Common,
*** 45433,45439 ****
  Some things are just not portable, even between similar operating
  systems, and are too difficult for autoconf to detect.  They get
  implemented using hook functions in the file specified by the
! HOST_HOOK_OBJ variable in 'config.gcc'.
  
   -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
       This host hook is used to set up handling for extra signals.  The
--- 45434,45440 ----
  Some things are just not portable, even between similar operating
  systems, and are too difficult for autoconf to detect.  They get
  implemented using hook functions in the file specified by the
! HOST_HOOK_OBJ variable in ‘config.gcc’.
  
   -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
       This host hook is used to set up handling for extra signals.  The
*************** HOST_HOOK_OBJ variable in 'config.gcc'.
*** 45445,45451 ****
       be free in some subsequent invocation of the compiler.  We intend
       to load the PCH data at this address such that the data need not be
       relocated.  The area should be able to hold SIZE bytes.  If the
!      host uses 'mmap', FD is an open file descriptor that can be used
       for probing.
  
   -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t
--- 45446,45452 ----
       be free in some subsequent invocation of the compiler.  We intend
       to load the PCH data at this address such that the data need not be
       relocated.  The area should be able to hold SIZE bytes.  If the
!      host uses ‘mmap’, FD is an open file descriptor that can be used
       for probing.
  
   -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t
*************** HOST_HOOK_OBJ variable in 'config.gcc'.
*** 45453,45459 ****
       This host hook is called when a PCH file is about to be loaded.  We
       want to load SIZE bytes from FD at OFFSET into memory at ADDRESS.
       The given address will be the result of a previous invocation of
!      'HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we couldn't allocate
       SIZE bytes at ADDRESS.  Return 0 if the memory is allocated but the
       data is not loaded.  Return 1 if the hook has performed everything.
  
--- 45454,45460 ----
       This host hook is called when a PCH file is about to be loaded.  We
       want to load SIZE bytes from FD at OFFSET into memory at ADDRESS.
       The given address will be the result of a previous invocation of
!      ‘HOST_HOOKS_GT_PCH_GET_ADDRESS’.  Return −1 if we couldn't allocate
       SIZE bytes at ADDRESS.  Return 0 if the memory is allocated but the
       data is not loaded.  Return 1 if the hook has performed everything.
  
*************** HOST_HOOK_OBJ variable in 'config.gcc'.
*** 45463,45469 ****
       which case all reserved address space should be freed.
  
       Do not try to handle values of ADDRESS that could not have been
!      returned by this executable; just return -1.  Such values usually
       indicate an out-of-date PCH file (built by some other GCC
       executable), and such a PCH file won't work.
  
--- 45464,45470 ----
       which case all reserved address space should be freed.
  
       Do not try to handle values of ADDRESS that could not have been
!      returned by this executable; just return −1.  Such values usually
       indicate an out-of-date PCH file (built by some other GCC
       executable), and such a PCH file won't work.
  
*************** File: gccint.info,  Node: Filesystem,  N
*** 45482,45538 ****
  GCC needs to know a number of things about the semantics of the host
  machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
  automatically detected.  For other systems, you can define the following
! macros in 'xm-MACHINE.h'.
  
! 'HAVE_DOS_BASED_FILE_SYSTEM'
!      This macro is automatically defined by 'system.h' if the host file
       system obeys the semantics defined by MS-DOS instead of Unix.  DOS
       file systems are case insensitive, file specifications may begin
!      with a drive letter, and both forward slash and backslash ('/' and
!      '\') are directory separators.
  
! 'DIR_SEPARATOR'
! 'DIR_SEPARATOR_2'
       If defined, these macros expand to character constants specifying
       separators for directory names within a file specification.
!      'system.h' will automatically give them appropriate values on Unix
       and MS-DOS file systems.  If your file system is neither of these,
!      define one or both appropriately in 'xm-MACHINE.h'.
  
       However, operating systems like VMS, where constructing a pathname
       is more complicated than just stringing together directory names
       separated by a special character, should not define either of these
       macros.
  
! 'PATH_SEPARATOR'
       If defined, this macro should expand to a character constant
       specifying the separator for elements of search paths.  The default
!      value is a colon (':').  DOS-based systems usually, but not always,
!      use semicolon (';').
  
! 'VMS'
       Define this macro if the host system is VMS.
  
! 'HOST_OBJECT_SUFFIX'
       Define this macro to be a C string representing the suffix for
       object files on your host machine.  If you do not define this
!      macro, GCC will use '.o' as the suffix for object files.
  
! 'HOST_EXECUTABLE_SUFFIX'
       Define this macro to be a C string representing the suffix for
       executable files on your host machine.  If you do not define this
       macro, GCC will use the null string as the suffix for executable
       files.
  
! 'HOST_BIT_BUCKET'
       A pathname defined by the host operating system, which can be
       opened as a file and written to, but all the information written is
!      discarded.  This is commonly known as a "bit bucket" or "null
!      device".  If you do not define this macro, GCC will use '/dev/null'
       as the bit bucket.  If the host does not support a bit bucket,
       define this macro to an invalid filename.
  
! 'UPDATE_PATH_HOST_CANONICALIZE (PATH)'
       If defined, a C statement (sans semicolon) that performs
       host-dependent canonicalization when a path used in a compilation
       driver or preprocessor is canonicalized.  PATH is a malloc-ed path
--- 45483,45539 ----
  GCC needs to know a number of things about the semantics of the host
  machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
  automatically detected.  For other systems, you can define the following
! macros in ‘xm-MACHINE.h’.
  
! ‘HAVE_DOS_BASED_FILE_SYSTEM’
!      This macro is automatically defined by ‘system.h’ if the host file
       system obeys the semantics defined by MS-DOS instead of Unix.  DOS
       file systems are case insensitive, file specifications may begin
!      with a drive letter, and both forward slash and backslash (‘/’ and
!      ‘\’) are directory separators.
  
! ‘DIR_SEPARATOR’
! ‘DIR_SEPARATOR_2’
       If defined, these macros expand to character constants specifying
       separators for directory names within a file specification.
!      ‘system.h’ will automatically give them appropriate values on Unix
       and MS-DOS file systems.  If your file system is neither of these,
!      define one or both appropriately in ‘xm-MACHINE.h’.
  
       However, operating systems like VMS, where constructing a pathname
       is more complicated than just stringing together directory names
       separated by a special character, should not define either of these
       macros.
  
! ‘PATH_SEPARATOR’
       If defined, this macro should expand to a character constant
       specifying the separator for elements of search paths.  The default
!      value is a colon (‘:’).  DOS-based systems usually, but not always,
!      use semicolon (‘;’).
  
! ‘VMS’
       Define this macro if the host system is VMS.
  
! ‘HOST_OBJECT_SUFFIX’
       Define this macro to be a C string representing the suffix for
       object files on your host machine.  If you do not define this
!      macro, GCC will use ‘.o’ as the suffix for object files.
  
! ‘HOST_EXECUTABLE_SUFFIX’
       Define this macro to be a C string representing the suffix for
       executable files on your host machine.  If you do not define this
       macro, GCC will use the null string as the suffix for executable
       files.
  
! ‘HOST_BIT_BUCKET’
       A pathname defined by the host operating system, which can be
       opened as a file and written to, but all the information written is
!      discarded.  This is commonly known as a “bit bucket” or “null
!      device”.  If you do not define this macro, GCC will use ‘/dev/null’
       as the bit bucket.  If the host does not support a bit bucket,
       define this macro to an invalid filename.
  
! ‘UPDATE_PATH_HOST_CANONICALIZE (PATH)’
       If defined, a C statement (sans semicolon) that performs
       host-dependent canonicalization when a path used in a compilation
       driver or preprocessor is canonicalized.  PATH is a malloc-ed path
*************** macros in 'xm-MACHINE.h'.
*** 45540,45558 ****
       into a different buffer, the old path should be freed and the new
       buffer should have been allocated with malloc.
  
! 'DUMPFILE_FORMAT'
       Define this macro to be a C string representing the format to use
       for constructing the index part of debugging dump file names.  The
       resultant string must fit in fifteen bytes.  The full filename will
       be the concatenation of: the prefix of the assembler file name, the
       string resulting from applying this format to an index number, and
!      a string unique to each dump file kind, e.g. 'rtl'.
  
!      If you do not define this macro, GCC will use '.%02d.'.  You should
       define this macro if using the default will create an invalid file
       name.
  
! 'DELETE_IF_ORDINARY'
       Define this macro to be a C statement (sans semicolon) that
       performs host-dependent removal of ordinary temp files in the
       compilation driver.
--- 45541,45559 ----
       into a different buffer, the old path should be freed and the new
       buffer should have been allocated with malloc.
  
! ‘DUMPFILE_FORMAT’
       Define this macro to be a C string representing the format to use
       for constructing the index part of debugging dump file names.  The
       resultant string must fit in fifteen bytes.  The full filename will
       be the concatenation of: the prefix of the assembler file name, the
       string resulting from applying this format to an index number, and
!      a string unique to each dump file kind, e.g. ‘rtl’.
  
!      If you do not define this macro, GCC will use ‘.%02d.’.  You should
       define this macro if using the default will create an invalid file
       name.
  
! ‘DELETE_IF_ORDINARY’
       Define this macro to be a C statement (sans semicolon) that
       performs host-dependent removal of ordinary temp files in the
       compilation driver.
*************** macros in 'xm-MACHINE.h'.
*** 45562,45568 ****
       reliably remove the temp file as, for example, on VMS which allows
       multiple versions of a file.
  
! 'HOST_LACKS_INODE_NUMBERS'
       Define this macro if the host filesystem does not report meaningful
       inode numbers in struct stat.
  
--- 45563,45569 ----
       reliably remove the temp file as, for example, on VMS which allows
       multiple versions of a file.
  
! ‘HOST_LACKS_INODE_NUMBERS’
       Define this macro if the host filesystem does not report meaningful
       inode numbers in struct stat.
  
*************** File: gccint.info,  Node: Host Misc,  Pr
*** 45572,45628 ****
  19.3 Host Misc
  ==============
  
! 'FATAL_EXIT_CODE'
       A C expression for the status code to be returned when the compiler
       exits after serious errors.  The default is the system-provided
!      macro 'EXIT_FAILURE', or '1' if the system doesn't define that
       macro.  Define this macro only if these defaults are incorrect.
  
! 'SUCCESS_EXIT_CODE'
       A C expression for the status code to be returned when the compiler
       exits without serious errors.  (Warnings are not serious errors.)
!      The default is the system-provided macro 'EXIT_SUCCESS', or '0' if
       the system doesn't define that macro.  Define this macro only if
       these defaults are incorrect.
  
! 'USE_C_ALLOCA'
       Define this macro if GCC should use the C implementation of
!      'alloca' provided by 'libiberty.a'.  This only affects how some
       parts of the compiler itself allocate memory.  It does not change
       code generation.
  
!      When GCC is built with a compiler other than itself, the C 'alloca'
       is always used.  This is because most other implementations have
       serious bugs.  You should define this macro only on a system where
!      no stack-based 'alloca' can possibly work.  For instance, if a
       system has a small limit on the size of the stack, GCC's builtin
!      'alloca' will not work reliably.
  
! 'COLLECT2_HOST_INITIALIZATION'
       If defined, a C statement (sans semicolon) that performs
!      host-dependent initialization when 'collect2' is being initialized.
  
! 'GCC_DRIVER_HOST_INITIALIZATION'
       If defined, a C statement (sans semicolon) that performs
       host-dependent initialization when a compilation driver is being
       initialized.
  
! 'HOST_LONG_LONG_FORMAT'
!      If defined, the string used to indicate an argument of type 'long
!      long' to functions like 'printf'.  The default value is '"ll"'.
  
! 'HOST_LONG_FORMAT'
!      If defined, the string used to indicate an argument of type 'long'
!      to functions like 'printf'.  The default value is '"l"'.
  
! 'HOST_PTR_PRINTF'
!      If defined, the string used to indicate an argument of type 'void
!      *' to functions like 'printf'.  The default value is '"%p"'.
  
!  In addition, if 'configure' generates an incorrect definition of any of
! the macros in 'auto-host.h', you can override that definition in a host
  configuration header.  If you need to do this, first see if it is
! possible to fix 'configure'.
  
  
  File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
--- 45573,45629 ----
  19.3 Host Misc
  ==============
  
! ‘FATAL_EXIT_CODE’
       A C expression for the status code to be returned when the compiler
       exits after serious errors.  The default is the system-provided
!      macro ‘EXIT_FAILURE’, or ‘1’ if the system doesn't define that
       macro.  Define this macro only if these defaults are incorrect.
  
! ‘SUCCESS_EXIT_CODE’
       A C expression for the status code to be returned when the compiler
       exits without serious errors.  (Warnings are not serious errors.)
!      The default is the system-provided macro ‘EXIT_SUCCESS’, or ‘0’ if
       the system doesn't define that macro.  Define this macro only if
       these defaults are incorrect.
  
! ‘USE_C_ALLOCA’
       Define this macro if GCC should use the C implementation of
!      ‘alloca’ provided by ‘libiberty.a’.  This only affects how some
       parts of the compiler itself allocate memory.  It does not change
       code generation.
  
!      When GCC is built with a compiler other than itself, the C ‘alloca’
       is always used.  This is because most other implementations have
       serious bugs.  You should define this macro only on a system where
!      no stack-based ‘alloca’ can possibly work.  For instance, if a
       system has a small limit on the size of the stack, GCC's builtin
!      ‘alloca’ will not work reliably.
  
! ‘COLLECT2_HOST_INITIALIZATION’
       If defined, a C statement (sans semicolon) that performs
!      host-dependent initialization when ‘collect2’ is being initialized.
  
! ‘GCC_DRIVER_HOST_INITIALIZATION’
       If defined, a C statement (sans semicolon) that performs
       host-dependent initialization when a compilation driver is being
       initialized.
  
! ‘HOST_LONG_LONG_FORMAT’
!      If defined, the string used to indicate an argument of type ‘long
!      long’ to functions like ‘printf’.  The default value is ‘"ll"’.
  
! ‘HOST_LONG_FORMAT’
!      If defined, the string used to indicate an argument of type ‘long’
!      to functions like ‘printf’.  The default value is ‘"l"’.
  
! ‘HOST_PTR_PRINTF’
!      If defined, the string used to indicate an argument of type ‘void
!      *’ to functions like ‘printf’.  The default value is ‘"%p"’.
  
!  In addition, if ‘configure’ generates an incorrect definition of any of
! the macros in ‘auto-host.h’, you can override that definition in a host
  configuration header.  If you need to do this, first see if it is
! possible to fix ‘configure’.
  
  
  File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
*************** File: gccint.info,  Node: Fragments,  Ne
*** 45630,45657 ****
  20 Makefile Fragments
  *********************
  
! When you configure GCC using the 'configure' script, it will construct
! the file 'Makefile' from the template file 'Makefile.in'.  When it does
! this, it can incorporate makefile fragments from the 'config' directory.
  These are used to set Makefile parameters that are not amenable to being
  calculated by autoconf.  The list of fragments to incorporate is set by
! 'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note
  System Config::.
  
!  Fragments are named either 't-TARGET' or 'x-HOST', depending on whether
  they are relevant to configuring GCC to produce code for a particular
  target, or to configuring GCC to run on a particular host.  Here TARGET
  and HOST are mnemonics which usually have some relationship to the
  canonical system name, but no formal connection.
  
   If these files do not exist, it means nothing needs to be added for a
! given target or host.  Most targets need a few 't-TARGET' fragments, but
! needing 'x-HOST' fragments is rare.
  
  * Menu:
  
! * Target Fragment:: Writing 't-TARGET' files.
! * Host Fragment::   Writing 'x-HOST' files.
  
  
  File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
--- 45631,45658 ----
  20 Makefile Fragments
  *********************
  
! When you configure GCC using the ‘configure’ script, it will construct
! the file ‘Makefile’ from the template file ‘Makefile.in’.  When it does
! this, it can incorporate makefile fragments from the ‘config’ directory.
  These are used to set Makefile parameters that are not amenable to being
  calculated by autoconf.  The list of fragments to incorporate is set by
! ‘config.gcc’ (and occasionally ‘config.build’ and ‘config.host’); *Note
  System Config::.
  
!  Fragments are named either ‘t-TARGET’ or ‘x-HOST’, depending on whether
  they are relevant to configuring GCC to produce code for a particular
  target, or to configuring GCC to run on a particular host.  Here TARGET
  and HOST are mnemonics which usually have some relationship to the
  canonical system name, but no formal connection.
  
   If these files do not exist, it means nothing needs to be added for a
! given target or host.  Most targets need a few ‘t-TARGET’ fragments, but
! needing ‘x-HOST’ fragments is rare.
  
  * Menu:
  
! * Target Fragment:: Writing ‘t-TARGET’ files.
! * Host Fragment::   Writing ‘x-HOST’ files.
  
  
  File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
*************** File: gccint.info,  Node: Target Fragmen
*** 45661,45832 ****
  
  Target makefile fragments can set these Makefile variables.
  
! 'LIBGCC2_CFLAGS'
!      Compiler flags to use when compiling 'libgcc2.c'.
  
! 'LIB2FUNCS_EXTRA'
       A list of source file names to be compiled or assembled and
!      inserted into 'libgcc.a'.
  
! 'CRTSTUFF_T_CFLAGS'
!      Special flags used when compiling 'crtstuff.c'.  *Note
       Initialization::.
  
! 'CRTSTUFF_T_CFLAGS_S'
!      Special flags used when compiling 'crtstuff.c' for shared linking.
!      Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'.
       *Note Initialization::.
  
! 'MULTILIB_OPTIONS'
       For some targets, invoking GCC in different ways produces objects
       that cannot be linked together.  For example, for some targets GCC
       produces both big and little endian code.  For these targets, you
!      must arrange for multiple versions of 'libgcc.a' to be compiled,
       one for each set of incompatible options.  When GCC invokes the
!      linker, it arranges to link in the right version of 'libgcc.a',
       based on the command line options used.
  
!      The 'MULTILIB_OPTIONS' macro lists the set of options for which
!      special versions of 'libgcc.a' must be built.  Write options that
       are mutually incompatible side by side, separated by a slash.
       Write options that may be used together separated by a space.  The
       build procedure will build all combinations of compatible options.
  
!      For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020
!      msoft-float', 'Makefile' will build special versions of 'libgcc.a'
!      using the following sets of options: '-m68000', '-m68020',
!      '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'.
  
! 'MULTILIB_DIRNAMES'
!      If 'MULTILIB_OPTIONS' is used, this variable specifies the
       directory names that should be used to hold the various libraries.
!      Write one element in 'MULTILIB_DIRNAMES' for each element in
!      'MULTILIB_OPTIONS'.  If 'MULTILIB_DIRNAMES' is not used, the
!      default value will be 'MULTILIB_OPTIONS', with all slashes treated
       as spaces.
  
!      'MULTILIB_DIRNAMES' describes the multilib directories using GCC
       conventions and is applied to directories that are part of the GCC
       installation.  When multilib-enabled, the compiler will add a
       subdirectory of the form PREFIX/MULTILIB before each directory in
       the search path for libraries and crt files.
  
!      For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020
!      msoft-float', then the default value of 'MULTILIB_DIRNAMES' is
!      'm68000 m68020 msoft-float'.  You may specify a different value if
       you desire a different set of directory names.
  
! 'MULTILIB_MATCHES'
       Sometimes the same option may be written in two different ways.  If
!      an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about
!      any synonyms.  In that case, set 'MULTILIB_MATCHES' to a list of
!      items of the form 'option=option' to describe all relevant
!      synonyms.  For example, 'm68000=mc68000 m68020=mc68020'.
  
! 'MULTILIB_EXCEPTIONS'
!      Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being
       specified, there are combinations that should not be built.  In
!      that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch
       exceptions in shell case syntax that should not be built.
  
       For example the ARM processor cannot execute both hardware floating
       point instructions and the reduced size THUMB instructions at the
       same time, so there is no need to build libraries with both of
!      these options enabled.  Therefore 'MULTILIB_EXCEPTIONS' is set to:
            *mthumb/*mhard-float*
  
! 'MULTILIB_REQUIRED'
       Sometimes when there are only a few combinations are required, it
!      would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list
       to cover all undesired ones.  In such a case, just listing all the
!      required combinations in 'MULTILIB_REQUIRED' would be more
       straightforward.
  
!      The way to specify the entries in 'MULTILIB_REQUIRED' is same with
!      the way used for 'MULTILIB_EXCEPTIONS', only this time what are
       required will be specified.  Suppose there are multiple sets of
!      'MULTILIB_OPTIONS' and only two combinations are required, one for
       ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU,
!      the 'MULTILIB_REQUIRED' can be set to:
            MULTILIB_REQUIRED =  mthumb/march=armv7-m
            MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16
  
!      The 'MULTILIB_REQUIRED' can be used together with
!      'MULTILIB_EXCEPTIONS'.  The option combinations generated from
!      'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and
!      then by 'MULTILIB_REQUIRED'.
  
! 'MULTILIB_REUSE'
       Sometimes it is desirable to reuse one existing multilib for
       different sets of options.  Such kind of reuse can minimize the
       number of multilib variants.  And for some targets it is better to
       reuse an existing multilib than to fall back to default multilib
       when there is no corresponding multilib.  This can be done by
!      adding reuse rules to 'MULTILIB_REUSE'.
  
       A reuse rule is comprised of two parts connected by equality sign.
       The left part is the option set used to build multilib and the
       right part is the option set that will reuse this multilib.  Both
!      parts should only use options specified in 'MULTILIB_OPTIONS' and
       the equality signs found in options name should be replaced with
       periods.  An explicit period in the rule can be escaped by
       preceding it with a backslash.  The order of options in the left
       part matters and should be same with those specified in
!      'MULTILIB_REQUIRED' or aligned with the order in
!      'MULTILIB_OPTIONS'.  There is no such limitation for options in the
       right part as we don't build multilib from them.
  
!      'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that it
       sets up relations between two option sets rather than two options.
       Here is an example to demo how we reuse libraries built in Thumb
       mode for applications built in ARM mode:
            MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r
  
!      Before the advent of 'MULTILIB_REUSE', GCC select multilib by
       comparing command line options with options used to build multilib.
!      The 'MULTILIB_REUSE' is complementary to that way.  Only when the
       original comparison matches nothing it will work to see if it is OK
       to reuse some existing multilib.
  
! 'MULTILIB_EXTRA_OPTS'
       Sometimes it is desirable that when building multiple versions of
!      'libgcc.a' certain options should always be passed on to the
!      compiler.  In that case, set 'MULTILIB_EXTRA_OPTS' to be the list
       of options to be used for all builds.  If you set this, you should
!      probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it.
  
! 'MULTILIB_OSDIRNAMES'
!      If 'MULTILIB_OPTIONS' is used, this variable specifies a list of
       subdirectory names, that are used to modify the search path
!      depending on the chosen multilib.  Unlike 'MULTILIB_DIRNAMES',
!      'MULTILIB_OSDIRNAMES' describes the multilib directories using
       operating systems conventions, and is applied to the directories
!      such as 'lib' or those in the 'LIBRARY_PATH' environment variable.
!      The format is either the same as of 'MULTILIB_DIRNAMES', or a set
!      of mappings.  When it is the same as 'MULTILIB_DIRNAMES', it
       describes the multilib directories using operating system
       conventions, rather than GCC conventions.  When it is a set of
       mappings of the form GCCDIR=OSDIR, the left side gives the GCC
       convention and the right gives the equivalent OS defined location.
!      If the OSDIR part begins with a '!', GCC will not search in the
       non-multilib directory and use exclusively the multilib directory.
       Otherwise, the compiler will examine the search path for libraries
       and crt files twice; the first time it will add MULTILIB to each
       directory in the search path, the second it will not.
  
       For configurations that support both multilib and multiarch,
!      'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus
!      subsuming 'MULTIARCH_DIRNAME'.  The multiarch name is appended to
       each directory name, separated by a colon (e.g.
!      '../lib32:i386-linux-gnu').
  
       Each multiarch subdirectory will be searched before the
       corresponding OS multilib directory, for example
!      '/lib/i386-linux-gnu' before '/lib/../lib32'.  The multiarch name
       will also be used to modify the system header search path, as
!      explained for 'MULTIARCH_DIRNAME'.
  
! 'MULTIARCH_DIRNAME'
       This variable specifies the multiarch name for configurations that
       are multiarch-enabled but not multilibbed configurations.
  
--- 45662,45833 ----
  
  Target makefile fragments can set these Makefile variables.
  
! ‘LIBGCC2_CFLAGS’
!      Compiler flags to use when compiling ‘libgcc2.c’.
  
! ‘LIB2FUNCS_EXTRA’
       A list of source file names to be compiled or assembled and
!      inserted into ‘libgcc.a’.
  
! ‘CRTSTUFF_T_CFLAGS’
!      Special flags used when compiling ‘crtstuff.c’.  *Note
       Initialization::.
  
! ‘CRTSTUFF_T_CFLAGS_S’
!      Special flags used when compiling ‘crtstuff.c’ for shared linking.
!      Used if you use ‘crtbeginS.o’ and ‘crtendS.o’ in ‘EXTRA-PARTS’.
       *Note Initialization::.
  
! ‘MULTILIB_OPTIONS’
       For some targets, invoking GCC in different ways produces objects
       that cannot be linked together.  For example, for some targets GCC
       produces both big and little endian code.  For these targets, you
!      must arrange for multiple versions of ‘libgcc.a’ to be compiled,
       one for each set of incompatible options.  When GCC invokes the
!      linker, it arranges to link in the right version of ‘libgcc.a’,
       based on the command line options used.
  
!      The ‘MULTILIB_OPTIONS’ macro lists the set of options for which
!      special versions of ‘libgcc.a’ must be built.  Write options that
       are mutually incompatible side by side, separated by a slash.
       Write options that may be used together separated by a space.  The
       build procedure will build all combinations of compatible options.
  
!      For example, if you set ‘MULTILIB_OPTIONS’ to ‘m68000/m68020
!      msoft-float’, ‘Makefile’ will build special versions of ‘libgcc.a’
!      using the following sets of options: ‘-m68000’, ‘-m68020’,
!      ‘-msoft-float’, ‘-m68000 -msoft-float’, and ‘-m68020 -msoft-float’.
  
! ‘MULTILIB_DIRNAMES’
!      If ‘MULTILIB_OPTIONS’ is used, this variable specifies the
       directory names that should be used to hold the various libraries.
!      Write one element in ‘MULTILIB_DIRNAMES’ for each element in
!      ‘MULTILIB_OPTIONS’.  If ‘MULTILIB_DIRNAMES’ is not used, the
!      default value will be ‘MULTILIB_OPTIONS’, with all slashes treated
       as spaces.
  
!      ‘MULTILIB_DIRNAMES’ describes the multilib directories using GCC
       conventions and is applied to directories that are part of the GCC
       installation.  When multilib-enabled, the compiler will add a
       subdirectory of the form PREFIX/MULTILIB before each directory in
       the search path for libraries and crt files.
  
!      For example, if ‘MULTILIB_OPTIONS’ is set to ‘m68000/m68020
!      msoft-float’, then the default value of ‘MULTILIB_DIRNAMES’ is
!      ‘m68000 m68020 msoft-float’.  You may specify a different value if
       you desire a different set of directory names.
  
! ‘MULTILIB_MATCHES’
       Sometimes the same option may be written in two different ways.  If
!      an option is listed in ‘MULTILIB_OPTIONS’, GCC needs to know about
!      any synonyms.  In that case, set ‘MULTILIB_MATCHES’ to a list of
!      items of the form ‘option=option’ to describe all relevant
!      synonyms.  For example, ‘m68000=mc68000 m68020=mc68020’.
  
! ‘MULTILIB_EXCEPTIONS’
!      Sometimes when there are multiple sets of ‘MULTILIB_OPTIONS’ being
       specified, there are combinations that should not be built.  In
!      that case, set ‘MULTILIB_EXCEPTIONS’ to be all of the switch
       exceptions in shell case syntax that should not be built.
  
       For example the ARM processor cannot execute both hardware floating
       point instructions and the reduced size THUMB instructions at the
       same time, so there is no need to build libraries with both of
!      these options enabled.  Therefore ‘MULTILIB_EXCEPTIONS’ is set to:
            *mthumb/*mhard-float*
  
! ‘MULTILIB_REQUIRED’
       Sometimes when there are only a few combinations are required, it
!      would be a big effort to come up with a ‘MULTILIB_EXCEPTIONS’ list
       to cover all undesired ones.  In such a case, just listing all the
!      required combinations in ‘MULTILIB_REQUIRED’ would be more
       straightforward.
  
!      The way to specify the entries in ‘MULTILIB_REQUIRED’ is same with
!      the way used for ‘MULTILIB_EXCEPTIONS’, only this time what are
       required will be specified.  Suppose there are multiple sets of
!      ‘MULTILIB_OPTIONS’ and only two combinations are required, one for
       ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU,
!      the ‘MULTILIB_REQUIRED’ can be set to:
            MULTILIB_REQUIRED =  mthumb/march=armv7-m
            MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16
  
!      The ‘MULTILIB_REQUIRED’ can be used together with
!      ‘MULTILIB_EXCEPTIONS’.  The option combinations generated from
!      ‘MULTILIB_OPTIONS’ will be filtered by ‘MULTILIB_EXCEPTIONS’ and
!      then by ‘MULTILIB_REQUIRED’.
  
! ‘MULTILIB_REUSE’
       Sometimes it is desirable to reuse one existing multilib for
       different sets of options.  Such kind of reuse can minimize the
       number of multilib variants.  And for some targets it is better to
       reuse an existing multilib than to fall back to default multilib
       when there is no corresponding multilib.  This can be done by
!      adding reuse rules to ‘MULTILIB_REUSE’.
  
       A reuse rule is comprised of two parts connected by equality sign.
       The left part is the option set used to build multilib and the
       right part is the option set that will reuse this multilib.  Both
!      parts should only use options specified in ‘MULTILIB_OPTIONS’ and
       the equality signs found in options name should be replaced with
       periods.  An explicit period in the rule can be escaped by
       preceding it with a backslash.  The order of options in the left
       part matters and should be same with those specified in
!      ‘MULTILIB_REQUIRED’ or aligned with the order in
!      ‘MULTILIB_OPTIONS’.  There is no such limitation for options in the
       right part as we don't build multilib from them.
  
!      ‘MULTILIB_REUSE’ is different from ‘MULTILIB_MATCHES’ in that it
       sets up relations between two option sets rather than two options.
       Here is an example to demo how we reuse libraries built in Thumb
       mode for applications built in ARM mode:
            MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r
  
!      Before the advent of ‘MULTILIB_REUSE’, GCC select multilib by
       comparing command line options with options used to build multilib.
!      The ‘MULTILIB_REUSE’ is complementary to that way.  Only when the
       original comparison matches nothing it will work to see if it is OK
       to reuse some existing multilib.
  
! ‘MULTILIB_EXTRA_OPTS’
       Sometimes it is desirable that when building multiple versions of
!      ‘libgcc.a’ certain options should always be passed on to the
!      compiler.  In that case, set ‘MULTILIB_EXTRA_OPTS’ to be the list
       of options to be used for all builds.  If you set this, you should
!      probably set ‘CRTSTUFF_T_CFLAGS’ to a dash followed by it.
  
! ‘MULTILIB_OSDIRNAMES’
!      If ‘MULTILIB_OPTIONS’ is used, this variable specifies a list of
       subdirectory names, that are used to modify the search path
!      depending on the chosen multilib.  Unlike ‘MULTILIB_DIRNAMES’,
!      ‘MULTILIB_OSDIRNAMES’ describes the multilib directories using
       operating systems conventions, and is applied to the directories
!      such as ‘lib’ or those in the ‘LIBRARY_PATH’ environment variable.
!      The format is either the same as of ‘MULTILIB_DIRNAMES’, or a set
!      of mappings.  When it is the same as ‘MULTILIB_DIRNAMES’, it
       describes the multilib directories using operating system
       conventions, rather than GCC conventions.  When it is a set of
       mappings of the form GCCDIR=OSDIR, the left side gives the GCC
       convention and the right gives the equivalent OS defined location.
!      If the OSDIR part begins with a ‘!’, GCC will not search in the
       non-multilib directory and use exclusively the multilib directory.
       Otherwise, the compiler will examine the search path for libraries
       and crt files twice; the first time it will add MULTILIB to each
       directory in the search path, the second it will not.
  
       For configurations that support both multilib and multiarch,
!      ‘MULTILIB_OSDIRNAMES’ also encodes the multiarch name, thus
!      subsuming ‘MULTIARCH_DIRNAME’.  The multiarch name is appended to
       each directory name, separated by a colon (e.g.
!      ‘../lib32:i386-linux-gnu’).
  
       Each multiarch subdirectory will be searched before the
       corresponding OS multilib directory, for example
!      ‘/lib/i386-linux-gnu’ before ‘/lib/../lib32’.  The multiarch name
       will also be used to modify the system header search path, as
!      explained for ‘MULTIARCH_DIRNAME’.
  
! ‘MULTIARCH_DIRNAME’
       This variable specifies the multiarch name for configurations that
       are multiarch-enabled but not multilibbed configurations.
  
*************** Target makefile fragments can set these
*** 45835,45868 ****
       locations.  The compiler will add a multiarch subdirectory of the
       form PREFIX/MULTIARCH before each directory in the library and crt
       search path.  It will also add two directories
!      'LOCAL_INCLUDE_DIR'/MULTIARCH and
!      'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search
!      path, respectively before 'LOCAL_INCLUDE_DIR' and
!      'NATIVE_SYSTEM_HEADER_DIR'.
  
!      'MULTIARCH_DIRNAME' is not used for configurations that support
       both multilib and multiarch.  In that case, multiarch names are
!      encoded in 'MULTILIB_OSDIRNAMES' instead.
  
       More documentation about multiarch can be found at
       <https://wiki.debian.org/Multiarch>.
  
! 'SPECS'
!      Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since
       it does not affect the build of target libraries, at least not the
       build of the default multilib.  One possible work-around is to use
!      'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if
       they had been passed in the compiler driver command line.  However,
       you don't want to be adding these options after the toolchain is
!      installed, so you can instead tweak the 'specs' file that will be
       used during the toolchain build, while you still install the
!      original, built-in 'specs'.  The trick is to set 'SPECS' to some
!      other filename (say 'specs.install'), that will then be created out
!      of the built-in specs, and introduce a 'Makefile' rule to generate
!      the 'specs' file that's going to be used at build time out of your
!      'specs.install'.
  
! 'T_CFLAGS'
       These are extra flags to pass to the C compiler.  They are used
       both when building GCC, and when compiling things with the
       just-built GCC.  This variable is deprecated and should not be
--- 45836,45869 ----
       locations.  The compiler will add a multiarch subdirectory of the
       form PREFIX/MULTIARCH before each directory in the library and crt
       search path.  It will also add two directories
!      ‘LOCAL_INCLUDE_DIR’/MULTIARCH and
!      ‘NATIVE_SYSTEM_HEADER_DIR’/MULTIARCH) to the system header search
!      path, respectively before ‘LOCAL_INCLUDE_DIR’ and
!      ‘NATIVE_SYSTEM_HEADER_DIR’.
  
!      ‘MULTIARCH_DIRNAME’ is not used for configurations that support
       both multilib and multiarch.  In that case, multiarch names are
!      encoded in ‘MULTILIB_OSDIRNAMES’ instead.
  
       More documentation about multiarch can be found at
       <https://wiki.debian.org/Multiarch>.
  
! ‘SPECS’
!      Unfortunately, setting ‘MULTILIB_EXTRA_OPTS’ is not enough, since
       it does not affect the build of target libraries, at least not the
       build of the default multilib.  One possible work-around is to use
!      ‘DRIVER_SELF_SPECS’ to bring options from the ‘specs’ file as if
       they had been passed in the compiler driver command line.  However,
       you don't want to be adding these options after the toolchain is
!      installed, so you can instead tweak the ‘specs’ file that will be
       used during the toolchain build, while you still install the
!      original, built-in ‘specs’.  The trick is to set ‘SPECS’ to some
!      other filename (say ‘specs.install’), that will then be created out
!      of the built-in specs, and introduce a ‘Makefile’ rule to generate
!      the ‘specs’ file that's going to be used at build time out of your
!      ‘specs.install’.
  
! ‘T_CFLAGS’
       These are extra flags to pass to the C compiler.  They are used
       both when building GCC, and when compiling things with the
       just-built GCC.  This variable is deprecated and should not be
*************** File: gccint.info,  Node: Host Fragment,
*** 45874,45952 ****
  20.2 Host Makefile Fragments
  ============================
  
! The use of 'x-HOST' fragments is discouraged.  You should only use it
  for makefile dependencies.
  
  
  File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
  
! 21 'collect2'
  *************
  
! GCC uses a utility called 'collect2' on nearly all systems to arrange to
  call various initialization functions at start time.
  
!  The program 'collect2' works by linking the program once and looking
  through the linker output file for symbols with particular names
  indicating they are constructor functions.  If it finds any, it creates
! a new temporary '.c' file containing a table of them, compiles it, and
  links the program a second time including that file.
  
   The actual calls to the constructors are carried out by a subroutine
! called '__main', which is called (automatically) at the beginning of the
! body of 'main' (provided 'main' was compiled with GNU CC).  Calling
! '__main' is necessary, even when compiling C code, to allow linking C
! and C++ object code together.  (If you use '-nostdlib', you get an
! unresolved reference to '__main', since it's defined in the standard GCC
! library.  Include '-lgcc' at the end of your compiler command line to
  resolve this reference.)
  
!  The program 'collect2' is installed as 'ld' in the directory where the
! passes of the compiler are installed.  When 'collect2' needs to find the
! _real_ 'ld', it tries the following file names:
  
!    * a hard coded linker file name, if GCC was configured with the
!      '--with-ld' option.
  
!    * 'real-ld' in the directories listed in the compiler's search
       directories.
  
!    * 'real-ld' in the directories listed in the environment variable
!      'PATH'.
  
!    * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
       if specified.
  
!    * 'ld' in the compiler's search directories, except that 'collect2'
       will not execute itself recursively.
  
!    * 'ld' in 'PATH'.
  
   "The compiler's search directories" means all the directories where
! 'gcc' searches for passes of the compiler.  This includes directories
! that you specify with '-B'.
  
   Cross-compilers search a little differently:
  
!    * 'real-ld' in the compiler's search directories.
  
!    * 'TARGET-real-ld' in 'PATH'.
  
!    * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
       if specified.
  
!    * 'ld' in the compiler's search directories.
  
!    * 'TARGET-ld' in 'PATH'.
  
!  'collect2' explicitly avoids running 'ld' using the file name under
! which 'collect2' itself was invoked.  In fact, it remembers up a list of
! such names--in case one copy of 'collect2' finds another copy (or
! version) of 'collect2' installed as 'ld' in a second place in the search
  path.
  
!  'collect2' searches for the utilities 'nm' and 'strip' using the same
! algorithm as above for 'ld'.
  
  
  File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
--- 45875,45953 ----
  20.2 Host Makefile Fragments
  ============================
  
! The use of ‘x-HOST’ fragments is discouraged.  You should only use it
  for makefile dependencies.
  
  
  File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
  
! 21 ‘collect2’
  *************
  
! GCC uses a utility called ‘collect2’ on nearly all systems to arrange to
  call various initialization functions at start time.
  
!  The program ‘collect2’ works by linking the program once and looking
  through the linker output file for symbols with particular names
  indicating they are constructor functions.  If it finds any, it creates
! a new temporary ‘.c’ file containing a table of them, compiles it, and
  links the program a second time including that file.
  
   The actual calls to the constructors are carried out by a subroutine
! called ‘__main’, which is called (automatically) at the beginning of the
! body of ‘main’ (provided ‘main’ was compiled with GNU CC).  Calling
! ‘__main’ is necessary, even when compiling C code, to allow linking C
! and C++ object code together.  (If you use ‘-nostdlib’, you get an
! unresolved reference to ‘__main’, since it's defined in the standard GCC
! library.  Include ‘-lgcc’ at the end of your compiler command line to
  resolve this reference.)
  
!  The program ‘collect2’ is installed as ‘ld’ in the directory where the
! passes of the compiler are installed.  When ‘collect2’ needs to find the
! _real_ ‘ld’, it tries the following file names:
  
!    • a hard coded linker file name, if GCC was configured with the
!      ‘--with-ld’ option.
  
!    • ‘real-ld’ in the directories listed in the compiler's search
       directories.
  
!    • ‘real-ld’ in the directories listed in the environment variable
!      ‘PATH’.
  
!    • The file specified in the ‘REAL_LD_FILE_NAME’ configuration macro,
       if specified.
  
!    • ‘ld’ in the compiler's search directories, except that ‘collect2’
       will not execute itself recursively.
  
!    • ‘ld’ in ‘PATH’.
  
   "The compiler's search directories" means all the directories where
! ‘gcc’ searches for passes of the compiler.  This includes directories
! that you specify with ‘-B’.
  
   Cross-compilers search a little differently:
  
!    • ‘real-ld’ in the compiler's search directories.
  
!    • ‘TARGET-real-ld’ in ‘PATH’.
  
!    • The file specified in the ‘REAL_LD_FILE_NAME’ configuration macro,
       if specified.
  
!    • ‘ld’ in the compiler's search directories.
  
!    • ‘TARGET-ld’ in ‘PATH’.
  
!  ‘collect2’ explicitly avoids running ‘ld’ using the file name under
! which ‘collect2’ itself was invoked.  In fact, it remembers up a list of
! such names--in case one copy of ‘collect2’ finds another copy (or
! version) of ‘collect2’ installed as ‘ld’ in a second place in the search
  path.
  
!  ‘collect2’ searches for the utilities ‘nm’ and ‘strip’ using the same
! algorithm as above for ‘ld’.
  
  
  File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
*************** File: gccint.info,  Node: Header Dirs,
*** 45954,45982 ****
  22 Standard Header File Directories
  ***********************************
  
! 'GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
  where GCC stores its private include files, and also where GCC stores
! the fixed include files.  A cross compiled GCC runs 'fixincludes' on the
! header files in '$(tooldir)/include'.  (If the cross compilation header
  files need to be fixed, they must be installed before GCC is built.  If
  the cross compilation header files are already suitable for GCC, nothing
  special need be done).
  
!  'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
! is where 'g++' looks first for header files.  The C++ library installs
  only target independent header files in that directory.
  
!  'LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
! install anything there.  It is normally '/usr/local/include'.  This is
  where local additions to a packaged system should place header files.
  
!  'CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
  install anything there.
  
!  'TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
  the place for other packages to install header files that GCC will use.
! For a cross-compiler, this is the equivalent of '/usr/include'.  When
! you build a cross-compiler, 'fixincludes' processes any header files in
  this directory.
  
  
--- 45955,45983 ----
  22 Standard Header File Directories
  ***********************************
  
! ‘GCC_INCLUDE_DIR’ means the same thing for native and cross.  It is
  where GCC stores its private include files, and also where GCC stores
! the fixed include files.  A cross compiled GCC runs ‘fixincludes’ on the
! header files in ‘$(tooldir)/include’.  (If the cross compilation header
  files need to be fixed, they must be installed before GCC is built.  If
  the cross compilation header files are already suitable for GCC, nothing
  special need be done).
  
!  ‘GPLUSPLUS_INCLUDE_DIR’ means the same thing for native and cross.  It
! is where ‘g++’ looks first for header files.  The C++ library installs
  only target independent header files in that directory.
  
!  ‘LOCAL_INCLUDE_DIR’ is used only by native compilers.  GCC doesn't
! install anything there.  It is normally ‘/usr/local/include’.  This is
  where local additions to a packaged system should place header files.
  
!  ‘CROSS_INCLUDE_DIR’ is used only by cross compilers.  GCC doesn't
  install anything there.
  
!  ‘TOOL_INCLUDE_DIR’ is used for both native and cross compilers.  It is
  the place for other packages to install header files that GCC will use.
! For a cross-compiler, this is the equivalent of ‘/usr/include’.  When
! you build a cross-compiler, ‘fixincludes’ processes any header files in
  this directory.
  
  
*************** implement precompiled headers.
*** 45992,45999 ****
  
   A full C++ parser would be too complicated for this task, so a limited
  subset of C++ is interpreted and special markers are used to determine
! what parts of the source to look at.  All 'struct', 'union' and
! 'template' structure declarations that define data structures that are
  allocated under control of the garbage collector must be marked.  All
  global variables that hold pointers to garbage-collected memory must
  also be marked.  Finally, all global variables that need to be saved and
--- 45993,46000 ----
  
   A full C++ parser would be too complicated for this task, so a limited
  subset of C++ is interpreted and special markers are used to determine
! what parts of the source to look at.  All ‘struct’, ‘union’ and
! ‘template’ structure declarations that define data structures that are
  allocated under control of the garbage collector must be marked.  All
  global variables that hold pointers to garbage-collected memory must
  also be marked.  Finally, all global variables that need to be saved and
*************** be saved in a precompiled header.)
*** 46005,46016 ****
   The full format of a marker is
       GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
  but in most cases no options are needed.  The outer double parentheses
! are still necessary, though: 'GTY(())'.  Markers can appear:
  
!    * In a structure definition, before the open brace;
!    * In a global variable declaration, after the keyword 'static' or
!      'extern'; and
!    * In a structure field definition, before the name of the field.
  
   Here are some examples of marking simple data structures and globals.
  
--- 46006,46017 ----
   The full format of a marker is
       GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
  but in most cases no options are needed.  The outer double parentheses
! are still necessary, though: ‘GTY(())’.  Markers can appear:
  
!    • In a structure definition, before the open brace;
!    • In a global variable declaration, after the keyword ‘static’ or
!      ‘extern’; and
!    • In a structure field definition, before the name of the field.
  
   Here are some examples of marking simple data structures and globals.
  
*************** are still necessary, though: 'GTY(())'.
*** 46027,46060 ****
       static GTY(()) struct TAG *LIST;   /* points to GC memory */
       static GTY(()) int COUNTER;        /* save counter in a PCH */
  
!  The parser understands simple typedefs such as 'typedef struct TAG
! *NAME;' and 'typedef int NAME;'.  These don't need to be marked.
  
!  However, in combination with GTY, avoid using typedefs such as 'typedef
! int_hash<...> NAME;' for these generate infinite-recursion code.  See
! PR103157 (https://gcc.gnu.org/PR103157).  Instead, you may use 'struct
! NAME : int_hash<...> {};', for example.
  
!  Since 'gengtype''s understanding of C++ is limited, there are several
  constructs and declarations that are not supported inside
  classes/structures marked for automatic GC code generation.  The
! following C++ constructs produce a 'gengtype' error on
  structures/classes marked for automatic GC code generation:
  
!    * Type definitions inside classes/structures are not supported.
!    * Enumerations inside classes/structures are not supported.
  
   If you have a class or structure using any of the above constructs, you
! need to mark that class as 'GTY ((user))' and provide your own marking
  routines (see section *note User GC:: for details).
  
   It is always valid to include function definitions inside classes.
! Those are always ignored by 'gengtype', as it only cares about data
  members.
  
  * Menu:
  
! * GTY Options::         What goes inside a 'GTY(())'.
  * Inheritance and GTY:: Adding GTY to a class hierarchy.
  * User GC::		Adding user-provided GC marking routines.
  * GGC Roots::           Making global variables GGC roots.
--- 46028,46061 ----
       static GTY(()) struct TAG *LIST;   /* points to GC memory */
       static GTY(()) int COUNTER;        /* save counter in a PCH */
  
!  The parser understands simple typedefs such as ‘typedef struct TAG
! *NAME;’ and ‘typedef int NAME;’.  These don't need to be marked.
  
!  However, in combination with GTY, avoid using typedefs such as ‘typedef
! int_hash<...> NAME;’ for these generate infinite-recursion code.  See
! PR103157 (https://gcc.gnu.org/PR103157).  Instead, you may use ‘struct
! NAME : int_hash<...> {};’, for example.
  
!  Since ‘gengtype’'s understanding of C++ is limited, there are several
  constructs and declarations that are not supported inside
  classes/structures marked for automatic GC code generation.  The
! following C++ constructs produce a ‘gengtype’ error on
  structures/classes marked for automatic GC code generation:
  
!    • Type definitions inside classes/structures are not supported.
!    • Enumerations inside classes/structures are not supported.
  
   If you have a class or structure using any of the above constructs, you
! need to mark that class as ‘GTY ((user))’ and provide your own marking
  routines (see section *note User GC:: for details).
  
   It is always valid to include function definitions inside classes.
! Those are always ignored by ‘gengtype’, as it only cares about data
  members.
  
  * Menu:
  
! * GTY Options::         What goes inside a ‘GTY(())’.
  * Inheritance and GTY:: Adding GTY to a class hierarchy.
  * User GC::		Adding user-provided GC marking routines.
  * GGC Roots::           Making global variables GGC roots.
*************** members.
*** 46065,46093 ****
  
  File: gccint.info,  Node: GTY Options,  Next: Inheritance and GTY,  Up: Type Information
  
! 23.1 The Inside of a 'GTY(())'
  ==============================
  
  Sometimes the C code is not enough to fully describe the type structure.
! Extra information can be provided with 'GTY' options and additional
  markers.  Some options take a parameter, which may be either a string or
  a type name, depending on the parameter.  If an option takes no
  parameter, it is acceptable either to omit the parameter entirely, or to
! provide an empty string as a parameter.  For example, 'GTY ((skip))' and
! 'GTY ((skip ("")))' are equivalent.
  
   When the parameter is a string, often it is a fragment of C code.  Four
  special escapes may be used in these strings, to refer to pieces of the
  data structure being marked:
  
! '%h'
       The current structure.
! '%1'
       The structure that immediately contains the current structure.
! '%0'
       The outermost structure that contains the current structure.
! '%a'
!      A partial expression of the form '[i1][i2]...' that indexes the
       array item currently being marked.
  
   For instance, suppose that you have a structure of the form
--- 46066,46094 ----
  
  File: gccint.info,  Node: GTY Options,  Next: Inheritance and GTY,  Up: Type Information
  
! 23.1 The Inside of a ‘GTY(())’
  ==============================
  
  Sometimes the C code is not enough to fully describe the type structure.
! Extra information can be provided with ‘GTY’ options and additional
  markers.  Some options take a parameter, which may be either a string or
  a type name, depending on the parameter.  If an option takes no
  parameter, it is acceptable either to omit the parameter entirely, or to
! provide an empty string as a parameter.  For example, ‘GTY ((skip))’ and
! ‘GTY ((skip ("")))’ are equivalent.
  
   When the parameter is a string, often it is a fragment of C code.  Four
  special escapes may be used in these strings, to refer to pieces of the
  data structure being marked:
  
! ‘%h’
       The current structure.
! ‘%1’
       The structure that immediately contains the current structure.
! ‘%0’
       The outermost structure that contains the current structure.
! ‘%a’
!      A partial expression of the form ‘[i1][i2]...’ that indexes the
       array item currently being marked.
  
   For instance, suppose that you have a structure of the form
*************** data structure being marked:
*** 46097,46105 ****
       struct B {
         struct A foo[12];
       };
! and 'b' is a variable of type 'struct B'.  When marking 'b.foo[11]',
! '%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to
! 'b', and '%a' would expand to '[11]'.
  
   As in ordinary C, adjacent strings will be concatenated; this is
  helpful when you have a complicated expression.
--- 46098,46106 ----
       struct B {
         struct A foo[12];
       };
! and ‘b’ is a variable of type ‘struct B’.  When marking ‘b.foo[11]’,
! ‘%h’ would expand to ‘b.foo[11]’, ‘%0’ and ‘%1’ would both expand to
! ‘b’, and ‘%a’ would expand to ‘[11]’.
  
   As in ordinary C, adjacent strings will be concatenated; this is
  helpful when you have a complicated expression.
*************** helpful when you have a complicated expr
*** 46109,46115 ****
  
   The available options are:
  
! 'length ("EXPRESSION")'
  
       There are two places the type machinery will need to be explicitly
       told the length of an array of non-atomic objects.  The first case
--- 46110,46116 ----
  
   The available options are:
  
! ‘length ("EXPRESSION")’
  
       There are two places the type machinery will need to be explicitly
       told the length of an array of non-atomic objects.  The first case
*************** helpful when you have a complicated expr
*** 46119,46153 ****
              rtx GTY ((length ("%h.num_elem"))) elem[1];
            };
  
!      In this case, the 'length' option is used to override the specified
!      array length (which should usually be '1').  The parameter of the
       option is a fragment of C code that calculates the length.
  
       The second case is when a structure or a global variable contains a
       pointer to an array, like this:
            struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
!      In this case, 'iter' has been allocated by writing something like
              x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
!      and the 'collapse' provides the length of the field.
  
!      This second use of 'length' also works on global variables, like:
       static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
  
!      Note that the 'length' option is only meant for use with arrays of
       non-atomic objects, that is, objects that contain pointers pointing
       to other GTY-managed objects.  For other GC-allocated arrays and
!      strings you should use 'atomic' or 'string_length'.
  
! 'string_length ("EXPRESSION")'
  
       In order to simplify production of PCH, a structure member that is
!      a plain array of bytes (an optionally 'const' and/or 'unsigned'
!      'char *') is treated specially by the infrastructure.  Even if such
       an array has not been allocated in GC-controlled memory, it will
       still be written properly into a PCH. The machinery responsible for
       this needs to know the length of the data; by default, the length
!      is determined by calling 'strlen' on the pointer.  The
!      'string_length' option specifies an alternate way to determine the
       length, such as by inspecting another struct member:
  
            struct GTY(()) non_terminated_string {
--- 46120,46154 ----
              rtx GTY ((length ("%h.num_elem"))) elem[1];
            };
  
!      In this case, the ‘length’ option is used to override the specified
!      array length (which should usually be ‘1’).  The parameter of the
       option is a fragment of C code that calculates the length.
  
       The second case is when a structure or a global variable contains a
       pointer to an array, like this:
            struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
!      In this case, ‘iter’ has been allocated by writing something like
              x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
!      and the ‘collapse’ provides the length of the field.
  
!      This second use of ‘length’ also works on global variables, like:
       static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
  
!      Note that the ‘length’ option is only meant for use with arrays of
       non-atomic objects, that is, objects that contain pointers pointing
       to other GTY-managed objects.  For other GC-allocated arrays and
!      strings you should use ‘atomic’ or ‘string_length’.
  
! ‘string_length ("EXPRESSION")’
  
       In order to simplify production of PCH, a structure member that is
!      a plain array of bytes (an optionally ‘const’ and/or ‘unsigned’
!      ‘char *’) is treated specially by the infrastructure.  Even if such
       an array has not been allocated in GC-controlled memory, it will
       still be written properly into a PCH. The machinery responsible for
       this needs to know the length of the data; by default, the length
!      is determined by calling ‘strlen’ on the pointer.  The
!      ‘string_length’ option specifies an alternate way to determine the
       length, such as by inspecting another struct member:
  
            struct GTY(()) non_terminated_string {
*************** helpful when you have a complicated expr
*** 46156,46162 ****
            };
  
       Similarly, this is useful for (regular NUL-terminated) strings with
!      NUL characters embedded (that the default 'strlen' use would run
       afoul of):
  
            struct GTY(()) multi_string {
--- 46157,46163 ----
            };
  
       Similarly, this is useful for (regular NUL-terminated) strings with
!      NUL characters embedded (that the default ‘strlen’ use would run
       afoul of):
  
            struct GTY(()) multi_string {
*************** helpful when you have a complicated expr
*** 46164,46187 ****
              size_t len;
            };
  
!      The 'string_length' option currently is not supported for (fields
       in) global variables.
  
! 'skip'
  
!      If 'skip' is applied to a field, the type machinery will ignore it.
       This is somewhat dangerous; the only safe use is in a union when
       one field really isn't ever used.
  
! 'callback'
  
!      'callback' should be applied to fields with pointer to function
!      type and causes the field to be ignored similarly to 'skip', except
       when writing PCH and the field is non-NULL it will remember the
       field's address for relocation purposes if the process writing PCH
       has different load base from a process reading PCH.
  
! 'for_user'
  
       Use this to mark types that need to be marked by user gc routines,
       but are not refered to in a template argument.  So if you have some
--- 46165,46188 ----
              size_t len;
            };
  
!      The ‘string_length’ option currently is not supported for (fields
       in) global variables.
  
! ‘skip’
  
!      If ‘skip’ is applied to a field, the type machinery will ignore it.
       This is somewhat dangerous; the only safe use is in a union when
       one field really isn't ever used.
  
! ‘callback’
  
!      ‘callback’ should be applied to fields with pointer to function
!      type and causes the field to be ignored similarly to ‘skip’, except
       when writing PCH and the field is non-NULL it will remember the
       field's address for relocation purposes if the process writing PCH
       has different load base from a process reading PCH.
  
! ‘for_user’
  
       Use this to mark types that need to be marked by user gc routines,
       but are not refered to in a template argument.  So if you have some
*************** helpful when you have a complicated expr
*** 46189,46209 ****
       for_user option so that the marking functions for T1 can call non
       mangled functions to mark T2.
  
! 'desc ("EXPRESSION")'
! 'tag ("CONSTANT")'
! 'default'
  
!      The type machinery needs to be told which field of a 'union' is
       currently active.  This is done by giving each field a constant
!      'tag' value, and then specifying a discriminator using 'desc'.  The
!      value of the expression given by 'desc' is compared against each
!      'tag' value, each of which should be different.  If no 'tag' is
!      matched, the field marked with 'default' is used if there is one,
       otherwise no field in the union will be marked.
  
!      In the 'desc' option, the "current structure" is the union that it
!      discriminates.  Use '%1' to mean the structure containing it.
!      There are no escapes available to the 'tag' option, since it is a
       constant.
  
       For example,
--- 46190,46210 ----
       for_user option so that the marking functions for T1 can call non
       mangled functions to mark T2.
  
! ‘desc ("EXPRESSION")’
! ‘tag ("CONSTANT")’
! ‘default’
  
!      The type machinery needs to be told which field of a ‘union’ is
       currently active.  This is done by giving each field a constant
!      ‘tag’ value, and then specifying a discriminator using ‘desc’.  The
!      value of the expression given by ‘desc’ is compared against each
!      ‘tag’ value, each of which should be different.  If no ‘tag’ is
!      matched, the field marked with ‘default’ is used if there is one,
       otherwise no field in the union will be marked.
  
!      In the ‘desc’ option, the "current structure" is the union that it
!      discriminates.  Use ‘%1’ to mean the structure containing it.
!      There are no escapes available to the ‘tag’ option, since it is a
       constant.
  
       For example,
*************** helpful when you have a complicated expr
*** 46218,46261 ****
            };
  
       In this example, the value of BINDING_HAS_LEVEL_P when applied to a
!      'struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
!      mechanism will treat the field 'level' as being present and if 0,
!      will treat the field 'scope' as being present.
  
!      The 'desc' and 'tag' options can also be used for inheritance to
       denote which subclass an instance is.  See *note Inheritance and
       GTY:: for more information.
  
! 'cache'
  
!      When the 'cache' option is applied to a global variable
       gt_cleare_cache is called on that variable between the mark and
       sweep phases of garbage collection.  The gt_clear_cache function is
       free to mark blocks as used, or to clear pointers in the variable.
  
!      In a hash table, the 'gt_cleare_cache' function discards entries if
       the key is not marked, or marks the value if the key is marked.
  
!      Note that caches should generally use 'deletable' instead; 'cache'
       is only preferable if the value is impractical to recompute from
       the key when needed.
  
! 'deletable'
  
!      'deletable', when applied to a global variable, indicates that when
       garbage collection runs, there's no need to mark anything pointed
!      to by this variable, it can just be set to 'NULL' instead.  This is
       used to keep a list of free structures around for re-use.
  
! 'maybe_undef'
  
!      When applied to a field, 'maybe_undef' indicates that it's OK if
       the structure that this fields points to is never defined, so long
!      as this field is always 'NULL'.  This is used to avoid requiring
       backends to define certain optional structures.  It doesn't work
       with language frontends.
  
! 'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
  
       The type machinery expects all pointers to point to the start of an
       object.  Sometimes for abstraction purposes it's convenient to have
--- 46219,46262 ----
            };
  
       In this example, the value of BINDING_HAS_LEVEL_P when applied to a
!      ‘struct tree_binding *’ is presumed to be 0 or 1.  If 1, the type
!      mechanism will treat the field ‘level’ as being present and if 0,
!      will treat the field ‘scope’ as being present.
  
!      The ‘desc’ and ‘tag’ options can also be used for inheritance to
       denote which subclass an instance is.  See *note Inheritance and
       GTY:: for more information.
  
! ‘cache’
  
!      When the ‘cache’ option is applied to a global variable
       gt_cleare_cache is called on that variable between the mark and
       sweep phases of garbage collection.  The gt_clear_cache function is
       free to mark blocks as used, or to clear pointers in the variable.
  
!      In a hash table, the ‘gt_cleare_cache’ function discards entries if
       the key is not marked, or marks the value if the key is marked.
  
!      Note that caches should generally use ‘deletable’ instead; ‘cache’
       is only preferable if the value is impractical to recompute from
       the key when needed.
  
! ‘deletable’
  
!      ‘deletable’, when applied to a global variable, indicates that when
       garbage collection runs, there's no need to mark anything pointed
!      to by this variable, it can just be set to ‘NULL’ instead.  This is
       used to keep a list of free structures around for re-use.
  
! ‘maybe_undef’
  
!      When applied to a field, ‘maybe_undef’ indicates that it's OK if
       the structure that this fields points to is never defined, so long
!      as this field is always ‘NULL’.  This is used to avoid requiring
       backends to define certain optional structures.  It doesn't work
       with language frontends.
  
! ‘nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")’
  
       The type machinery expects all pointers to point to the start of an
       object.  Sometimes for abstraction purposes it's convenient to have
*************** helpful when you have a complicated expr
*** 46264,46295 ****
       pointers can still be used.  TYPE is the type of the original
       object, the TO EXPRESSION returns the pointer given the original
       object, and the FROM EXPRESSION returns the original object given
!      the pointer.  The pointer will be available using the '%h' escape.
  
! 'chain_next ("EXPRESSION")'
! 'chain_prev ("EXPRESSION")'
! 'chain_circular ("EXPRESSION")'
  
       It's helpful for the type machinery to know if objects are often
       chained together in long lists; this lets it generate code that
       uses less stack space by iterating along the list instead of
!      recursing down it.  'chain_next' is an expression for the next item
!      in the list, 'chain_prev' is an expression for the previous item.
!      For singly linked lists, use only 'chain_next'; for doubly linked
       lists, use both.  The machinery requires that taking the next item
!      of the previous item gives the original item.  'chain_circular' is
!      similar to 'chain_next', but can be used for circular single linked
       lists.
  
! 'reorder ("FUNCTION NAME")'
  
       Some data structures depend on the relative ordering of pointers.
       If the precompiled header machinery needs to change that ordering,
!      it will call the function referenced by the 'reorder' option,
       before changing the pointers in the object that's pointed to by the
       field the option applies to.  The function must take four
       arguments, with the signature
!      'void *, void *, gt_pointer_operator, void *'.  The first parameter
       is a pointer to the structure that contains the object being
       updated, or the object itself if there is no containing structure.
       The second parameter is a cookie that should be ignored.  The third
--- 46265,46296 ----
       pointers can still be used.  TYPE is the type of the original
       object, the TO EXPRESSION returns the pointer given the original
       object, and the FROM EXPRESSION returns the original object given
!      the pointer.  The pointer will be available using the ‘%h’ escape.
  
! ‘chain_next ("EXPRESSION")’
! ‘chain_prev ("EXPRESSION")’
! ‘chain_circular ("EXPRESSION")’
  
       It's helpful for the type machinery to know if objects are often
       chained together in long lists; this lets it generate code that
       uses less stack space by iterating along the list instead of
!      recursing down it.  ‘chain_next’ is an expression for the next item
!      in the list, ‘chain_prev’ is an expression for the previous item.
!      For singly linked lists, use only ‘chain_next’; for doubly linked
       lists, use both.  The machinery requires that taking the next item
!      of the previous item gives the original item.  ‘chain_circular’ is
!      similar to ‘chain_next’, but can be used for circular single linked
       lists.
  
! ‘reorder ("FUNCTION NAME")’
  
       Some data structures depend on the relative ordering of pointers.
       If the precompiled header machinery needs to change that ordering,
!      it will call the function referenced by the ‘reorder’ option,
       before changing the pointers in the object that's pointed to by the
       field the option applies to.  The function must take four
       arguments, with the signature
!      ‘void *, void *, gt_pointer_operator, void *’.  The first parameter
       is a pointer to the structure that contains the object being
       updated, or the object itself if there is no containing structure.
       The second parameter is a cookie that should be ignored.  The third
*************** helpful when you have a complicated expr
*** 46298,46310 ****
       passed to the second parameter.
  
       PCH cannot handle data structures that depend on the absolute
!      values of pointers.  'reorder' functions can be expensive.  When
       possible, it is better to depend on properties of the data, like an
       ID number or the hash of a string instead.
  
! 'atomic'
  
!      The 'atomic' option can only be used with pointers.  It informs the
       GC machinery that the memory that the pointer points to does not
       contain any pointers, and hence it should be treated by the GC and
       PCH machinery as an "atomic" block of memory that does not need to
--- 46299,46311 ----
       passed to the second parameter.
  
       PCH cannot handle data structures that depend on the absolute
!      values of pointers.  ‘reorder’ functions can be expensive.  When
       possible, it is better to depend on properties of the data, like an
       ID number or the hash of a string instead.
  
! ‘atomic’
  
!      The ‘atomic’ option can only be used with pointers.  It informs the
       GC machinery that the memory that the pointer points to does not
       contain any pointers, and hence it should be treated by the GC and
       PCH machinery as an "atomic" block of memory that does not need to
*************** helpful when you have a complicated expr
*** 46313,46326 ****
       reachable (when marking pointers for GC) or to relocate them (when
       writing a PCH file).
  
!      The 'atomic' option differs from the 'skip' option.  'atomic' keeps
       the memory under Garbage Collection, but makes the GC ignore the
!      contents of the memory.  'skip' is more drastic in that it causes
       the pointer and the memory to be completely ignored by the Garbage
!      Collector.  So, memory marked as 'atomic' is automatically freed
!      when no longer reachable, while memory marked as 'skip' is not.
  
!      The 'atomic' option must be used with great care, because all sorts
       of problem can occur if used incorrectly, that is, if the memory
       the pointer points to does actually contain a pointer.
  
--- 46314,46327 ----
       reachable (when marking pointers for GC) or to relocate them (when
       writing a PCH file).
  
!      The ‘atomic’ option differs from the ‘skip’ option.  ‘atomic’ keeps
       the memory under Garbage Collection, but makes the GC ignore the
!      contents of the memory.  ‘skip’ is more drastic in that it causes
       the pointer and the memory to be completely ignored by the Garbage
!      Collector.  So, memory marked as ‘atomic’ is automatically freed
!      when no longer reachable, while memory marked as ‘skip’ is not.
  
!      The ‘atomic’ option must be used with great care, because all sorts
       of problem can occur if used incorrectly, that is, if the memory
       the pointer points to does actually contain a pointer.
  
*************** helpful when you have a complicated expr
*** 46329,46358 ****
              int number_of_elements;
              unsigned int * GTY ((atomic)) elements;
            };
!      In this case, 'elements' is a pointer under GC, and the memory it
       points to needs to be allocated using the Garbage Collector, and
       will be freed automatically by the Garbage Collector when it is no
       longer referenced.  But the memory that the pointer points to is an
!      array of 'unsigned int' elements, and the GC must not try to scan
       it to find pointers to mark or relocate, which is why it is marked
!      with the 'atomic' option.
  
       Note that, currently, global variables cannot be marked with
!      'atomic'; only fields of a struct can.  This is a known limitation.
!      It would be useful to be able to mark global pointers with 'atomic'
       to make the PCH machinery aware of them so that they are saved and
       restored correctly to PCH files.
  
! 'special ("NAME")'
  
!      The 'special' option is used to mark types that have to be dealt
       with by special case machinery.  The parameter is the name of the
!      special case.  See 'gengtype.cc' for further details.  Avoid adding
       new special cases unless there is no other alternative.
  
! 'user'
  
!      The 'user' option indicates that the code to mark structure fields
       is completely handled by user-provided routines.  See section *note
       User GC:: for details on what functions need to be provided.
  
--- 46330,46359 ----
              int number_of_elements;
              unsigned int * GTY ((atomic)) elements;
            };
!      In this case, ‘elements’ is a pointer under GC, and the memory it
       points to needs to be allocated using the Garbage Collector, and
       will be freed automatically by the Garbage Collector when it is no
       longer referenced.  But the memory that the pointer points to is an
!      array of ‘unsigned int’ elements, and the GC must not try to scan
       it to find pointers to mark or relocate, which is why it is marked
!      with the ‘atomic’ option.
  
       Note that, currently, global variables cannot be marked with
!      ‘atomic’; only fields of a struct can.  This is a known limitation.
!      It would be useful to be able to mark global pointers with ‘atomic’
       to make the PCH machinery aware of them so that they are saved and
       restored correctly to PCH files.
  
! ‘special ("NAME")’
  
!      The ‘special’ option is used to mark types that have to be dealt
       with by special case machinery.  The parameter is the name of the
!      special case.  See ‘gengtype.cc’ for further details.  Avoid adding
       new special cases unless there is no other alternative.
  
! ‘user’
  
!      The ‘user’ option indicates that the code to mark structure fields
       is completely handled by user-provided routines.  See section *note
       User GC:: for details on what functions need to be provided.
  
*************** File: gccint.info,  Node: Inheritance an
*** 46365,46375 ****
  gengtype has some support for simple class hierarchies.  You can use
  this to have gengtype autogenerate marking routines, provided:
  
!    * There must be a concrete base class, with a discriminator
       expression that can be used to identify which subclass an instance
       is.
!    * Only single inheritance is used.
!    * None of the classes within the hierarchy are templates.
  
   If your class hierarchy does not fit in this pattern, you must use
  *note User GC:: instead.
--- 46366,46376 ----
  gengtype has some support for simple class hierarchies.  You can use
  this to have gengtype autogenerate marking routines, provided:
  
!    • There must be a concrete base class, with a discriminator
       expression that can be used to identify which subclass an instance
       is.
!    • Only single inheritance is used.
!    • None of the classes within the hierarchy are templates.
  
   If your class hierarchy does not fit in this pattern, you must use
  *note User GC:: instead.
*************** this to have gengtype autogenerate marki
*** 46378,46384 ****
  "desc" option.  Each concrete subclass must use the "tag" option to
  identify which value of the discriminator it corresponds to.
  
!  Every class in the hierarchy must have a 'GTY(())' marker, as gengtype
  will only attempt to parse classes that have such a marker (1).
  
       class GTY((desc("%h.kind"), tag("0"))) example_base
--- 46379,46385 ----
  "desc" option.  Each concrete subclass must use the "tag" option to
  identify which value of the discriminator it corresponds to.
  
!  Every class in the hierarchy must have a ‘GTY(())’ marker, as gengtype
  will only attempt to parse classes that have such a marker (1).
  
       class GTY((desc("%h.kind"), tag("0"))) example_base
*************** is generated.  For these types, the user
*** 46422,46429 ****
  functions: one to act as a marker for garbage collection, and two
  functions to act as marker and pointer walker for pre-compiled headers.
  
!  Given a structure 'struct GTY((user)) my_struct', the following
! functions should be defined to mark 'my_struct':
  
       void gt_ggc_mx (my_struct *p)
       {
--- 46423,46430 ----
  functions: one to act as a marker for garbage collection, and two
  functions to act as marker and pointer walker for pre-compiled headers.
  
!  Given a structure ‘struct GTY((user)) my_struct’, the following
! functions should be defined to mark ‘my_struct’:
  
       void gt_ggc_mx (my_struct *p)
       {
*************** functions should be defined to mark 'my_
*** 46443,46470 ****
         op (&(tp->fld), NULL, cookie);
       }
  
!  In general, each marker 'M' should call 'M' for every pointer field in
  the structure.  Fields that are not allocated in GC or are not pointers
  must be ignored.
  
!  For embedded lists (e.g., structures with a 'next' or 'prev' pointer),
  the marker must follow the chain and mark every element in it.
  
!  Note that the rules for the pointer walker 'gt_pch_nx (my_struct *,
! gt_pointer_operator, void *)' are slightly different.  In this case, the
! operation 'op' must be applied to the _address_ of every pointer field.
  
  23.3.1 User-provided marking routines for template types
  --------------------------------------------------------
  
! When a template type 'TP' is marked with 'GTY', all instances of that
  type are considered user-provided types.  This means that the individual
! instances of 'TP' do not need to be marked with 'GTY'.  The user needs
  to provide template functions to mark all the fields of the type.
  
   The following code snippets represent all the functions that need to be
! provided.  Note that type 'TP' may reference to more than one type.  In
! these snippets, there is only one type 'T', but there could be more.
  
       template<typename T>
       void gt_ggc_mx (TP<T> *tp)
--- 46444,46471 ----
         op (&(tp->fld), NULL, cookie);
       }
  
!  In general, each marker ‘M’ should call ‘M’ for every pointer field in
  the structure.  Fields that are not allocated in GC or are not pointers
  must be ignored.
  
!  For embedded lists (e.g., structures with a ‘next’ or ‘prev’ pointer),
  the marker must follow the chain and mark every element in it.
  
!  Note that the rules for the pointer walker ‘gt_pch_nx (my_struct *,
! gt_pointer_operator, void *)’ are slightly different.  In this case, the
! operation ‘op’ must be applied to the _address_ of every pointer field.
  
  23.3.1 User-provided marking routines for template types
  --------------------------------------------------------
  
! When a template type ‘TP’ is marked with ‘GTY’, all instances of that
  type are considered user-provided types.  This means that the individual
! instances of ‘TP’ do not need to be marked with ‘GTY’.  The user needs
  to provide template functions to mark all the fields of the type.
  
   The following code snippets represent all the functions that need to be
! provided.  Note that type ‘TP’ may reference to more than one type.  In
! these snippets, there is only one type ‘T’, but there could be more.
  
       template<typename T>
       void gt_ggc_mx (TP<T> *tp)
*************** these snippets, there is only one type '
*** 46505,46519 ****
   Support for user-defined types is currently limited.  The following
  restrictions apply:
  
!   1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'.
  
!   2. Type 'TP' can only have type names in its argument list.
  
!   3. The pointer walker functions are different for 'TP<T>' and 'TP<T
!      *>'.  In the case of 'TP<T>', references to 'T' must be handled by
!      calling 'gt_pch_nx' (which will, in turn, walk all the pointers
!      inside fields of 'T').  In the case of 'TP<T *>', references to 'T
!      *' must be handled by calling the 'op' function on the address of
       the pointer (see the code snippets above).
  
  
--- 46506,46520 ----
   Support for user-defined types is currently limited.  The following
  restrictions apply:
  
!   1. Type ‘TP’ and all the argument types ‘T’ must be marked with ‘GTY’.
  
!   2. Type ‘TP’ can only have type names in its argument list.
  
!   3. The pointer walker functions are different for ‘TP<T>’ and ‘TP<T
!      *>’.  In the case of ‘TP<T>’, references to ‘T’ must be handled by
!      calling ‘gt_pch_nx’ (which will, in turn, walk all the pointers
!      inside fields of ‘T’).  In the case of ‘TP<T *>’, references to ‘T
!      *’ must be handled by calling the ‘op’ function on the address of
       the pointer (see the code snippets above).
  
  
*************** File: gccint.info,  Node: GGC Roots,  Ne
*** 46523,46538 ****
  ============================================
  
  In addition to keeping track of types, the type machinery also locates
! the global variables ("roots") that the garbage collector starts at.
  Roots must be declared using one of the following syntaxes:
  
!    * 'extern GTY(([OPTIONS])) TYPE NAME;'
!    * 'static GTY(([OPTIONS])) TYPE NAME;'
  The syntax
!    * 'GTY(([OPTIONS])) TYPE NAME;'
! is _not_ accepted.  There should be an 'extern' declaration of such a
  variable in a header somewhere--mark that, not the definition.  Or, if
! the variable is only used in one file, make it 'static'.
  
  
  File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
--- 46524,46539 ----
  ============================================
  
  In addition to keeping track of types, the type machinery also locates
! the global variables (“roots”) that the garbage collector starts at.
  Roots must be declared using one of the following syntaxes:
  
!    • ‘extern GTY(([OPTIONS])) TYPE NAME;’
!    • ‘static GTY(([OPTIONS])) TYPE NAME;’
  The syntax
!    • ‘GTY(([OPTIONS])) TYPE NAME;’
! is _not_ accepted.  There should be an ‘extern’ declaration of such a
  variable in a header somewhere--mark that, not the definition.  Or, if
! the variable is only used in one file, make it ‘static’.
  
  
  File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
*************** File: gccint.info,  Node: Files,  Next:
*** 46540,46591 ****
  23.5 Source Files Containing Type Information
  =============================================
  
! Whenever you add 'GTY' markers to a source file that previously had
! none, or create a new source file containing 'GTY' markers, there are
  three things you need to do:
  
    1. You need to add the file to the list of source files the type
       machinery scans.  There are four cases:
  
         a. For a back-end file, this is usually done automatically; if
!           not, you should add it to 'target_gtfiles' in the appropriate
!           port's entries in 'config.gcc'.
  
         b. For files shared by all front ends, add the filename to the
!           'GTFILES' variable in 'Makefile.in'.
  
         c. For files that are part of one front end, add the filename to
!           the 'gtfiles' variable defined in the appropriate
!           'config-lang.in'.  Headers should appear before non-headers in
            this list.
  
         d. For files that are part of some but not all front ends, add
!           the filename to the 'gtfiles' variable of _all_ the front ends
            that use it.
  
    2. If the file was a header file, you'll need to check that it's
       included in the right place to be visible to the generated files.
       For a back-end header file, this should be done automatically.  For
       a front-end header file, it needs to be included by the same file
!      that includes 'gtype-LANG.h'.  For other header files, it needs to
!      be included in 'gtype-desc.cc', which is a generated file, so add
!      it to 'ifiles' in 'open_base_file' in 'gengtype.cc'.
  
       For source files that aren't header files, the machinery will
       generate a header file that should be included in the source file
!      you just changed.  The file will be called 'gt-PATH.h' where PATH
!      is the pathname relative to the 'gcc' directory with slashes
       replaced by -, so for example the header file to be included in
!      'cp/parser.cc' is called 'gt-cp-parser.h'.  The generated header
       file should be included after everything else in the source file.
  
   For language frontends, there is another file that needs to be included
! somewhere.  It will be called 'gtype-LANG.h', where LANG is the name of
  the subdirectory the language is contained in.
  
!  Plugins can add additional root tables.  Run the 'gengtype' utility in
! plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
! with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H
  file.  The GCC build tree is needed to be present in that mode.
  
  
--- 46541,46592 ----
  23.5 Source Files Containing Type Information
  =============================================
  
! Whenever you add ‘GTY’ markers to a source file that previously had
! none, or create a new source file containing ‘GTY’ markers, there are
  three things you need to do:
  
    1. You need to add the file to the list of source files the type
       machinery scans.  There are four cases:
  
         a. For a back-end file, this is usually done automatically; if
!           not, you should add it to ‘target_gtfiles’ in the appropriate
!           port's entries in ‘config.gcc’.
  
         b. For files shared by all front ends, add the filename to the
!           ‘GTFILES’ variable in ‘Makefile.in’.
  
         c. For files that are part of one front end, add the filename to
!           the ‘gtfiles’ variable defined in the appropriate
!           ‘config-lang.in’.  Headers should appear before non-headers in
            this list.
  
         d. For files that are part of some but not all front ends, add
!           the filename to the ‘gtfiles’ variable of _all_ the front ends
            that use it.
  
    2. If the file was a header file, you'll need to check that it's
       included in the right place to be visible to the generated files.
       For a back-end header file, this should be done automatically.  For
       a front-end header file, it needs to be included by the same file
!      that includes ‘gtype-LANG.h’.  For other header files, it needs to
!      be included in ‘gtype-desc.cc’, which is a generated file, so add
!      it to ‘ifiles’ in ‘open_base_file’ in ‘gengtype.cc’.
  
       For source files that aren't header files, the machinery will
       generate a header file that should be included in the source file
!      you just changed.  The file will be called ‘gt-PATH.h’ where PATH
!      is the pathname relative to the ‘gcc’ directory with slashes
       replaced by -, so for example the header file to be included in
!      ‘cp/parser.cc’ is called ‘gt-cp-parser.h’.  The generated header
       file should be included after everything else in the source file.
  
   For language frontends, there is another file that needs to be included
! somewhere.  It will be called ‘gtype-LANG.h’, where LANG is the name of
  the subdirectory the language is contained in.
  
!  Plugins can add additional root tables.  Run the ‘gengtype’ utility in
! plugin mode as ‘gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C’
! with your plugin files PLUGIN*.C using ‘GTY’ to generate the PLUGINOUT.H
  file.  The GCC build tree is needed to be present in that mode.
  
  
*************** File: gccint.info,  Node: Invoking the g
*** 46597,46617 ****
  The GCC garbage collector GGC is only invoked explicitly.  In contrast
  with many other garbage collectors, it is not implicitly invoked by
  allocation routines when a lot of memory has been consumed.  So the only
! way to have GGC reclaim storage is to call the 'ggc_collect' function
! explicitly.  With MODE 'GGC_COLLECT_FORCE' or otherwise (default
! 'GGC_COLLECT_HEURISTIC') when the internal heuristic decides to collect,
  this call is potentially an expensive operation, as it may have to scan
  the entire heap.  Beware that local variables (on the GCC call stack)
  are not followed by such an invocation (as many other garbage collectors
! do): you should reference all your data from static or external 'GTY'-ed
! variables, and it is advised to call 'ggc_collect' with a shallow call
  stack.  The GGC is an exact mark and sweep garbage collector (so it does
  not scan the call stack for pointers).  In practice GCC passes don't
! often call 'ggc_collect' themselves, because it is called by the pass
  manager between passes.
  
!  At the time of the 'ggc_collect' call all pointers in the GC-marked
! structures must be valid or 'NULL'.  In practice this means that there
  should not be uninitialized pointer fields in the structures even if
  your code never reads or writes those fields at a particular instance.
  One way to ensure this is to use cleared versions of allocators unless
--- 46598,46618 ----
  The GCC garbage collector GGC is only invoked explicitly.  In contrast
  with many other garbage collectors, it is not implicitly invoked by
  allocation routines when a lot of memory has been consumed.  So the only
! way to have GGC reclaim storage is to call the ‘ggc_collect’ function
! explicitly.  With MODE ‘GGC_COLLECT_FORCE’ or otherwise (default
! ‘GGC_COLLECT_HEURISTIC’) when the internal heuristic decides to collect,
  this call is potentially an expensive operation, as it may have to scan
  the entire heap.  Beware that local variables (on the GCC call stack)
  are not followed by such an invocation (as many other garbage collectors
! do): you should reference all your data from static or external ‘GTY’-ed
! variables, and it is advised to call ‘ggc_collect’ with a shallow call
  stack.  The GGC is an exact mark and sweep garbage collector (so it does
  not scan the call stack for pointers).  In practice GCC passes don't
! often call ‘ggc_collect’ themselves, because it is called by the pass
  manager between passes.
  
!  At the time of the ‘ggc_collect’ call all pointers in the GC-marked
! structures must be valid or ‘NULL’.  In practice this means that there
  should not be uninitialized pointer fields in the structures even if
  your code never reads or writes those fields at a particular instance.
  One way to ensure this is to use cleared versions of allocators unless
*************** With the current garbage collector imple
*** 46627,46644 ****
  show up as GCC compilation errors.  Some of the most commonly
  encountered issues are described below.
  
!    * Gengtype does not produce allocators for a 'GTY'-marked type.
       Gengtype checks if there is at least one possible path from GC
       roots to at least one instance of each type before outputting
!      allocators.  If there is no such path, the 'GTY' markers will be
       ignored and no allocators will be output.  Solve this by making
       sure that there exists at least one such path.  If creating it is
       unfeasible or raises a "code smell", consider if you really must
       use GC for allocating such type.
  
!    * Link-time errors about undefined 'gt_ggc_r_foo_bar' and
!      similarly-named symbols.  Check if your 'foo_bar' source file has
!      '#include "gt-foo_bar.h"' as its very last line.
  
  
  File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top
--- 46628,46645 ----
  show up as GCC compilation errors.  Some of the most commonly
  encountered issues are described below.
  
!    • Gengtype does not produce allocators for a ‘GTY’-marked type.
       Gengtype checks if there is at least one possible path from GC
       roots to at least one instance of each type before outputting
!      allocators.  If there is no such path, the ‘GTY’ markers will be
       ignored and no allocators will be output.  Solve this by making
       sure that there exists at least one such path.  If creating it is
       unfeasible or raises a "code smell", consider if you really must
       use GC for allocating such type.
  
!    • Link-time errors about undefined ‘gt_ggc_r_foo_bar’ and
!      similarly-named symbols.  Check if your ‘foo_bar’ source file has
!      ‘#include "gt-foo_bar.h"’ as its very last line.
  
  
  File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top
*************** File: gccint.info,  Node: Plugins loadin
*** 46674,46700 ****
  24.1 Loading Plugins
  ====================
  
! Plugins are supported on platforms that support '-ldl -rdynamic' as well
! as Windows/MinGW. They are loaded by the compiler using 'dlopen' or
  equivalent and invoked at pre-determined locations in the compilation
  process.
  
   Plugins are loaded with
  
!  '-fplugin=/path/to/NAME.EXT' '-fplugin-arg-NAME-KEY1[=VALUE1]'
  
   Where NAME is the plugin name and EXT is the platform-specific dynamic
! library extension.  It should be 'dll' on Windows/MinGW, 'dylib' on
! Darwin/macOS, and 'so' on all other platforms.  The plugin arguments are
  parsed by GCC and passed to respective plugins as key-value pairs.
! Multiple plugins can be invoked by specifying multiple '-fplugin'
  arguments.
  
   A plugin can be simply given by its short name (no dots or slashes).
! When simply passing '-fplugin=NAME', the plugin is loaded from the
! 'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc
! -print-file-name=plugin`/NAME.EXT', using backquote shell syntax to
! query the 'plugin' directory.
  
  
  File: gccint.info,  Node: Plugin API,  Next: Plugins pass,  Prev: Plugins loading,  Up: Plugins
--- 46675,46701 ----
  24.1 Loading Plugins
  ====================
  
! Plugins are supported on platforms that support ‘-ldl -rdynamic’ as well
! as Windows/MinGW. They are loaded by the compiler using ‘dlopen’ or
  equivalent and invoked at pre-determined locations in the compilation
  process.
  
   Plugins are loaded with
  
!  ‘-fplugin=/path/to/NAME.EXT’ ‘-fplugin-arg-NAME-KEY1[=VALUE1]’
  
   Where NAME is the plugin name and EXT is the platform-specific dynamic
! library extension.  It should be ‘dll’ on Windows/MinGW, ‘dylib’ on
! Darwin/macOS, and ‘so’ on all other platforms.  The plugin arguments are
  parsed by GCC and passed to respective plugins as key-value pairs.
! Multiple plugins can be invoked by specifying multiple ‘-fplugin’
  arguments.
  
   A plugin can be simply given by its short name (no dots or slashes).
! When simply passing ‘-fplugin=NAME’, the plugin is loaded from the
! ‘plugin’ directory, so ‘-fplugin=NAME’ is the same as ‘-fplugin=`gcc
! -print-file-name=plugin`/NAME.EXT’, using backquote shell syntax to
! query the ‘plugin’ directory.
  
  
  File: gccint.info,  Node: Plugin API,  Next: Plugins pass,  Prev: Plugins loading,  Up: Plugins
*************** File: gccint.info,  Node: Plugin API,  N
*** 46703,46718 ****
  ===============
  
  Plugins are activated by the compiler at specific events as defined in
! 'gcc-plugin.h'.  For each event of interest, the plugin should call
! 'register_callback' specifying the name of the event and address of the
  callback function that will handle that event.
  
!  The header 'gcc-plugin.h' must be the first gcc header to be included.
  
  24.2.1 Plugin license check
  ---------------------------
  
! Every plugin should define the global symbol 'plugin_is_GPL_compatible'
  to assert that it has been licensed under a GPL-compatible license.  If
  this symbol does not exist, the compiler will emit a fatal error and
  exit with the error message:
--- 46704,46719 ----
  ===============
  
  Plugins are activated by the compiler at specific events as defined in
! ‘gcc-plugin.h’.  For each event of interest, the plugin should call
! ‘register_callback’ specifying the name of the event and address of the
  callback function that will handle that event.
  
!  The header ‘gcc-plugin.h’ must be the first gcc header to be included.
  
  24.2.1 Plugin license check
  ---------------------------
  
! Every plugin should define the global symbol ‘plugin_is_GPL_compatible’
  to assert that it has been licensed under a GPL-compatible license.  If
  this symbol does not exist, the compiler will emit a fatal error and
  exit with the error message:
*************** exit with the error message:
*** 46722,46728 ****
       compilation terminated
  
   The declared type of the symbol should be int, to match a forward
! declaration in 'gcc-plugin.h' that suppresses C++ mangling.  It does not
  need to be in any allocated section, though.  The compiler merely
  asserts that the symbol exists in the global scope.  Something like this
  is enough:
--- 46723,46729 ----
       compilation terminated
  
   The declared type of the symbol should be int, to match a forward
! declaration in ‘gcc-plugin.h’ that suppresses C++ mangling.  It does not
  need to be in any allocated section, though.  The compiler merely
  asserts that the symbol exists in the global scope.  Something like this
  is enough:
*************** is enough:
*** 46732,46749 ****
  24.2.2 Plugin initialization
  ----------------------------
  
! Every plugin should export a function called 'plugin_init' that is
  called right after the plugin is loaded.  This function is responsible
  for registering all the callbacks required by the plugin and do any
  other required initialization.
  
!  This function is called from 'compile_file' right before invoking the
! parser.  The arguments to 'plugin_init' are:
  
!    * 'plugin_info': Plugin invocation information.
!    * 'version': GCC version.
  
!  The 'plugin_info' struct is defined as follows:
  
       struct plugin_name_args
       {
--- 46733,46750 ----
  24.2.2 Plugin initialization
  ----------------------------
  
! Every plugin should export a function called ‘plugin_init’ that is
  called right after the plugin is loaded.  This function is responsible
  for registering all the callbacks required by the plugin and do any
  other required initialization.
  
!  This function is called from ‘compile_file’ right before invoking the
! parser.  The arguments to ‘plugin_init’ are:
  
!    • ‘plugin_info’: Plugin invocation information.
!    • ‘version’: GCC version.
  
!  The ‘plugin_info’ struct is defined as follows:
  
       struct plugin_name_args
       {
*************** parser.  The arguments to 'plugin_init'
*** 46758,46764 ****
         const char *help;             /* Help string provided by plugin. */
       }
  
!  If initialization fails, 'plugin_init' must return a non-zero value.
  Otherwise, it should return 0.
  
   The version of the GCC compiler loading the plugin is described by the
--- 46759,46765 ----
         const char *help;             /* Help string provided by plugin. */
       }
  
!  If initialization fails, ‘plugin_init’ must return a non-zero value.
  Otherwise, it should return 0.
  
   The version of the GCC compiler loading the plugin is described by the
*************** following structure:
*** 46773,46784 ****
         const char *configuration_arguments;
       };
  
!  The function 'plugin_default_version_check' takes two pointers to such
  structure and compare them field by field.  It can be used by the
! plugin's 'plugin_init' function.
  
   The version of GCC used to compile the plugin can be found in the
! symbol 'gcc_version' defined in the header 'plugin-version.h'.  The
  recommended version check to perform looks like
  
       #include "plugin-version.h"
--- 46774,46785 ----
         const char *configuration_arguments;
       };
  
!  The function ‘plugin_default_version_check’ takes two pointers to such
  structure and compare them field by field.  It can be used by the
! plugin's ‘plugin_init’ function.
  
   The version of GCC used to compile the plugin can be found in the
! symbol ‘gcc_version’ defined in the header ‘plugin-version.h’.  The
  recommended version check to perform looks like
  
       #include "plugin-version.h"
*************** Callback functions have the following pr
*** 46861,46891 ****
  
   In addition, plugins can also look up the enumerator of a named event,
  and / or generate new events dynamically, by calling the function
! 'get_named_event_id'.
  
!  To register a callback, the plugin calls 'register_callback' with the
  arguments:
  
!    * 'char *name': Plugin name.
!    * 'int event': The event code.
!    * 'plugin_callback_func callback': The function that handles 'event'.
!    * 'void *user_data': Pointer to plugin-specific data.
  
   For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and
! PLUGIN_REGISTER_GGC_ROOTS pseudo-events the 'callback' should be null,
! and the 'user_data' is specific.
  
   When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data
  from GCC), plugins may register their own pragmas.  Notice that pragmas
! are not available from 'lto1', so plugins used with '-flto' option to
  GCC during link-time optimization cannot use pragmas and do not even see
! functions like 'c_register_pragma' or 'pragma_lex'.
  
!  The PLUGIN_INCLUDE_FILE event, with a 'const char*' file path as GCC
! data, is triggered for processing of '#include' or '#line' directives.
  
   The PLUGIN_FINISH event is the last time that plugins can call GCC
! functions, notably emit diagnostics with 'warning', 'error' etc.
  
  
  File: gccint.info,  Node: Plugins pass,  Next: Plugins GC,  Prev: Plugin API,  Up: Plugins
--- 46862,46892 ----
  
   In addition, plugins can also look up the enumerator of a named event,
  and / or generate new events dynamically, by calling the function
! ‘get_named_event_id’.
  
!  To register a callback, the plugin calls ‘register_callback’ with the
  arguments:
  
!    • ‘char *name’: Plugin name.
!    • ‘int event’: The event code.
!    • ‘plugin_callback_func callback’: The function that handles ‘event’.
!    • ‘void *user_data’: Pointer to plugin-specific data.
  
   For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and
! PLUGIN_REGISTER_GGC_ROOTS pseudo-events the ‘callback’ should be null,
! and the ‘user_data’ is specific.
  
   When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data
  from GCC), plugins may register their own pragmas.  Notice that pragmas
! are not available from ‘lto1’, so plugins used with ‘-flto’ option to
  GCC during link-time optimization cannot use pragmas and do not even see
! functions like ‘c_register_pragma’ or ‘pragma_lex’.
  
!  The PLUGIN_INCLUDE_FILE event, with a ‘const char*’ file path as GCC
! data, is triggered for processing of ‘#include’ or ‘#line’ directives.
  
   The PLUGIN_FINISH event is the last time that plugins can call GCC
! functions, notably emit diagnostics with ‘warning’, ‘error’ etc.
  
  
  File: gccint.info,  Node: Plugins pass,  Next: Plugins GC,  Prev: Plugin API,  Up: Plugins
*************** such as CFG or an IPA pass) and optimiza
*** 46899,46906 ****
  
   Basic support for inserting new passes or replacing existing passes is
  provided.  A plugin registers a new pass with GCC by calling
! 'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a
! pointer to a 'struct register_pass_info' object defined as follows
  
       enum pass_positioning_ops
       {
--- 46900,46907 ----
  
   Basic support for inserting new passes or replacing existing passes is
  provided.  A plugin registers a new pass with GCC by calling
! ‘register_callback’ with the ‘PLUGIN_PASS_MANAGER_SETUP’ event and a
! pointer to a ‘struct register_pass_info’ object defined as follows
  
       enum pass_positioning_ops
       {
*************** File: gccint.info,  Node: Plugins GC,  N
*** 46948,46978 ****
  
  Some plugins may want to be informed when GGC (the GCC Garbage
  Collector) is running.  They can register callbacks for the
! 'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback
! is called with a null 'gcc_data') to be notified of the start or end of
  the GCC garbage collection.
  
   Some plugins may need to have GGC mark additional data.  This can be
! done by registering a callback (called with a null 'gcc_data') for the
! 'PLUGIN_GGC_MARKING' event.  Such callbacks can call the 'ggc_set_mark'
! routine, preferably through the 'ggc_mark' macro (and conversely, these
  routines should usually not be used in plugins outside of the
! 'PLUGIN_GGC_MARKING' event).  Plugins that wish to hold weak references
  to gc data may also use this event to drop weak references when the
! object is about to be collected.  The 'ggc_marked_p' function can be
  used to tell if an object is marked, or is about to be collected.  The
! 'gt_clear_cache' overloads which some types define may also be of use in
  managing weak references.
  
   Some plugins may need to add extra GGC root tables, e.g. to handle
! their own 'GTY'-ed data.  This can be done with the
! 'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
! extra root table (of type 'struct ggc_root_tab*') as 'user_data'.
! Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
  generates these extra root tables.
  
   You should understand the details of memory management inside GCC
! before using 'PLUGIN_GGC_MARKING' or 'PLUGIN_REGISTER_GGC_ROOTS'.
  
  
  File: gccint.info,  Node: Plugins description,  Next: Plugins attr,  Prev: Plugins GC,  Up: Plugins
--- 46949,46979 ----
  
  Some plugins may want to be informed when GGC (the GCC Garbage
  Collector) is running.  They can register callbacks for the
! ‘PLUGIN_GGC_START’ and ‘PLUGIN_GGC_END’ events (for which the callback
! is called with a null ‘gcc_data’) to be notified of the start or end of
  the GCC garbage collection.
  
   Some plugins may need to have GGC mark additional data.  This can be
! done by registering a callback (called with a null ‘gcc_data’) for the
! ‘PLUGIN_GGC_MARKING’ event.  Such callbacks can call the ‘ggc_set_mark’
! routine, preferably through the ‘ggc_mark’ macro (and conversely, these
  routines should usually not be used in plugins outside of the
! ‘PLUGIN_GGC_MARKING’ event).  Plugins that wish to hold weak references
  to gc data may also use this event to drop weak references when the
! object is about to be collected.  The ‘ggc_marked_p’ function can be
  used to tell if an object is marked, or is about to be collected.  The
! ‘gt_clear_cache’ overloads which some types define may also be of use in
  managing weak references.
  
   Some plugins may need to add extra GGC root tables, e.g. to handle
! their own ‘GTY’-ed data.  This can be done with the
! ‘PLUGIN_REGISTER_GGC_ROOTS’ pseudo-event with a null callback and the
! extra root table (of type ‘struct ggc_root_tab*’) as ‘user_data’.
! Running the ‘gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...’ utility
  generates these extra root tables.
  
   You should understand the details of memory management inside GCC
! before using ‘PLUGIN_GGC_MARKING’ or ‘PLUGIN_REGISTER_GGC_ROOTS’.
  
  
  File: gccint.info,  Node: Plugins description,  Next: Plugins attr,  Prev: Plugins GC,  Up: Plugins
*************** uses the following structure:
*** 46989,46996 ****
         const char *help;
       };
  
!  Such a structure is passed as the 'user_data' by the plugin's init
! routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event
  and a null callback.
  
  
--- 46990,46997 ----
         const char *help;
       };
  
!  Such a structure is passed as the ‘user_data’ by the plugin's init
! routine using ‘register_callback’ with the ‘PLUGIN_INFO’ pseudo-event
  and a null callback.
  
  
*************** File: gccint.info,  Node: Plugins attr,
*** 47002,47009 ****
  For analysis (or other) purposes it is useful to be able to add custom
  attributes or pragmas.
  
!  The 'PLUGIN_ATTRIBUTES' callback is called during attribute
! registration.  Use the 'register_attribute' function to register custom
  attributes.
  
       /* Attribute handler callback */
--- 47003,47010 ----
  For analysis (or other) purposes it is useful to be able to add custom
  attributes or pragmas.
  
!  The ‘PLUGIN_ATTRIBUTES’ callback is called during attribute
! registration.  Use the ‘register_attribute’ function to register custom
  attributes.
  
       /* Attribute handler callback */
*************** attributes.
*** 47030,47040 ****
  
  
   The PLUGIN_PRAGMAS callback is called once during pragmas registration.
! Use the 'c_register_pragma', 'c_register_pragma_with_data',
! 'c_register_pragma_with_expansion',
! 'c_register_pragma_with_expansion_and_data' functions to register custom
! pragmas and their handlers (which often want to call 'pragma_lex') from
! 'c-family/c-pragma.h'.
  
       /* Plugin callback called during pragmas registration. Registered with
            register_callback (plugin_name, PLUGIN_PRAGMAS,
--- 47031,47041 ----
  
  
   The PLUGIN_PRAGMAS callback is called once during pragmas registration.
! Use the ‘c_register_pragma’, ‘c_register_pragma_with_data’,
! ‘c_register_pragma_with_expansion’,
! ‘c_register_pragma_with_expansion_and_data’ functions to register custom
! pragmas and their handlers (which often want to call ‘pragma_lex’) from
! ‘c-family/c-pragma.h’.
  
       /* Plugin callback called during pragmas registration. Registered with
            register_callback (plugin_name, PLUGIN_PRAGMAS,
*************** pragmas and their handlers (which often
*** 47047,47057 ****
         c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
       }
  
!  It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your
  plugin) as the "space" argument of your pragma.
  
!  Pragmas registered with 'c_register_pragma_with_expansion' or
! 'c_register_pragma_with_expansion_and_data' support preprocessor
  expansions.  For example:
  
       #define NUMBER 10
--- 47048,47058 ----
         c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
       }
  
!  It is suggested to pass ‘"GCCPLUGIN"’ (or a short name identifying your
  plugin) as the "space" argument of your pragma.
  
!  Pragmas registered with ‘c_register_pragma_with_expansion’ or
! ‘c_register_pragma_with_expansion_and_data’ support preprocessor
  expansions.  For example:
  
       #define NUMBER 10
*************** File: gccint.info,  Node: Plugins record
*** 47064,47077 ****
  ===============================================
  
  The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
! (the same as current_pass) as 'gcc_data' to the callback.  You can also
  inspect cfun to find out about which function this pass is executed for.
  Note that this event will only be invoked if the gate check (if
  applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
! other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END',
! 'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END',
! 'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
! 'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
  plugin(s) in order to get context for the pass execution.
  
  
--- 47065,47078 ----
  ===============================================
  
  The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
! (the same as current_pass) as ‘gcc_data’ to the callback.  You can also
  inspect cfun to find out about which function this pass is executed for.
  Note that this event will only be invoked if the gate check (if
  applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
! other hooks, like ‘PLUGIN_ALL_PASSES_START’, ‘PLUGIN_ALL_PASSES_END’,
! ‘PLUGIN_ALL_IPA_PASSES_START’, ‘PLUGIN_ALL_IPA_PASSES_END’,
! ‘PLUGIN_EARLY_GIMPLE_PASSES_START’, and/or
! ‘PLUGIN_EARLY_GIMPLE_PASSES_END’ to manipulate global state in your
  plugin(s) in order to get context for the pass execution.
  
  
*************** File: gccint.info,  Node: Plugins gate,
*** 47082,47089 ****
  
  After the original gate function for a pass is called, its result - the
  gate status - is stored as an integer.  Then the event
! 'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
! the 'gcc_data' parameter to the callback function.  A nonzero value of
  the gate status means that the pass is to be executed.  You can both
  read and write the gate status via the passed pointer.
  
--- 47083,47090 ----
  
  After the original gate function for a pass is called, its result - the
  gate status - is stored as an integer.  Then the event
! ‘PLUGIN_OVERRIDE_GATE’ is invoked, with a pointer to the gate status in
! the ‘gcc_data’ parameter to the callback function.  A nonzero value of
  the gate status means that the pass is to be executed.  You can both
  read and write the gate status via the passed pointer.
  
*************** When your plugin is loaded, you can insp
*** 47097,47104 ****
  determine what passes are available.  However, other plugins might add
  new passes.  Also, future changes to GCC might cause generic passes to
  be added after plugin loading.  When a pass is first added to one of the
! pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback
! parameter 'gcc_data' pointing to the new pass.
  
  
  File: gccint.info,  Node: Plugins building,  Prev: Plugins tracking,  Up: Plugins
--- 47098,47105 ----
  determine what passes are available.  However, other plugins might add
  new passes.  Also, future changes to GCC might cause generic passes to
  be added after plugin loading.  When a pass is first added to one of the
! pass lists, the event ‘PLUGIN_NEW_PASS’ is invoked, with the callback
! parameter ‘gcc_data’ pointing to the new pass.
  
  
  File: gccint.info,  Node: Plugins building,  Prev: Plugins tracking,  Up: Plugins
*************** File: gccint.info,  Node: Plugins buildi
*** 47107,47127 ****
  ==========================
  
  If plugins are enabled, GCC installs the headers needed to build a
! plugin (somewhere in the installation tree, e.g. under '/usr/local').
! In particular a 'plugin/include' directory is installed, containing all
  the header files needed to build plugins.
  
!  On most systems, you can query this 'plugin' directory by invoking 'gcc
! -print-file-name=plugin' (replace if needed 'gcc' with the appropriate
  program path).
  
!  Inside plugins, this 'plugin' directory name can be queried by calling
! 'default_plugin_dir_name ()'.
  
   Plugins may know, when they are compiled, the GCC version for which
! 'plugin-version.h' is provided.  The constant macros
! 'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR',
! 'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers,
  so a plugin could ensure it is built for GCC 4.7 with
       #if GCCPLUGIN_VERSION != 4007
       #error this GCC plugin is for GCC 4.7
--- 47108,47128 ----
  ==========================
  
  If plugins are enabled, GCC installs the headers needed to build a
! plugin (somewhere in the installation tree, e.g. under ‘/usr/local’).
! In particular a ‘plugin/include’ directory is installed, containing all
  the header files needed to build plugins.
  
!  On most systems, you can query this ‘plugin’ directory by invoking ‘gcc
! -print-file-name=plugin’ (replace if needed ‘gcc’ with the appropriate
  program path).
  
!  Inside plugins, this ‘plugin’ directory name can be queried by calling
! ‘default_plugin_dir_name ()’.
  
   Plugins may know, when they are compiled, the GCC version for which
! ‘plugin-version.h’ is provided.  The constant macros
! ‘GCCPLUGIN_VERSION_MAJOR’, ‘GCCPLUGIN_VERSION_MINOR’,
! ‘GCCPLUGIN_VERSION_PATCHLEVEL’, ‘GCCPLUGIN_VERSION’ are integer numbers,
  so a plugin could ensure it is built for GCC 4.7 with
       #if GCCPLUGIN_VERSION != 4007
       #error this GCC plugin is for GCC 4.7
*************** so a plugin could ensure it is built for
*** 47138,47152 ****
       plugin.so: $(PLUGIN_SOURCE_FILES)
          $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@
  
!  A single source file plugin may be built with 'g++ -I`gcc
  -print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.cc
! -o plugin.so', using backquote shell syntax to query the 'plugin'
  directory.
  
   Plugin support on Windows/MinGW has a number of limitations and
  additional requirements.  When building a plugin on Windows we have to
  link an import library for the corresponding backend executable, for
! example, 'cc1.exe', 'cc1plus.exe', etc., in order to gain access to the
  symbols provided by GCC. This means that on Windows a plugin is
  language-specific, for example, for C, C++, etc.  If you wish to use
  your plugin with multiple languages, then you will need to build
--- 47139,47153 ----
       plugin.so: $(PLUGIN_SOURCE_FILES)
          $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@
  
!  A single source file plugin may be built with ‘g++ -I`gcc
  -print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.cc
! -o plugin.so’, using backquote shell syntax to query the ‘plugin’
  directory.
  
   Plugin support on Windows/MinGW has a number of limitations and
  additional requirements.  When building a plugin on Windows we have to
  link an import library for the corresponding backend executable, for
! example, ‘cc1.exe’, ‘cc1plus.exe’, etc., in order to gain access to the
  symbols provided by GCC. This means that on Windows a plugin is
  language-specific, for example, for C, C++, etc.  If you wish to use
  your plugin with multiple languages, then you will need to build
*************** the correct version or provide a compile
*** 47155,47165 ****
  automatically.
  
   Additionally, on Windows the plugin library has to export the
! 'plugin_is_GPL_compatible' and 'plugin_init' symbols.  If you do not
  wish to modify the source code of your plugin, then you can use the
! '-Wl,--export-all-symbols' option or provide a suitable DEF file.
  Alternatively, you can export just these two symbols by decorating them
! with '__declspec(dllexport)', for example:
  
       #ifdef _WIN32
       __declspec(dllexport)
--- 47156,47166 ----
  automatically.
  
   Additionally, on Windows the plugin library has to export the
! ‘plugin_is_GPL_compatible’ and ‘plugin_init’ symbols.  If you do not
  wish to modify the source code of your plugin, then you can use the
! ‘-Wl,--export-all-symbols’ option or provide a suitable DEF file.
  Alternatively, you can export just these two symbols by decorating them
! with ‘__declspec(dllexport)’, for example:
  
       #ifdef _WIN32
       __declspec(dllexport)
*************** with '__declspec(dllexport)', for exampl
*** 47171,47187 ****
       #endif
       int plugin_init (plugin_name_args *, plugin_gcc_version *)
  
!  The import libraries are installed into the 'plugin' directory and
! their names are derived by appending the '.a' extension to the backend
! executable names, for example, 'cc1.exe.a', 'cc1plus.exe.a', etc.  The
  following command line shows how to build the single source file plugin
  on Windows to be used with the C++ compiler:
  
       g++ -I`gcc -print-file-name=plugin`/include -shared -Wl,--export-all-symbols \
       -o plugin.dll plugin.cc `gcc -print-file-name=plugin`/cc1plus.exe.a
  
!  When a plugin needs to use 'gengtype', be sure that both 'gengtype' and
! 'gtype.state' have the same version as the GCC for which the plugin is
  built.
  
  
--- 47172,47188 ----
       #endif
       int plugin_init (plugin_name_args *, plugin_gcc_version *)
  
!  The import libraries are installed into the ‘plugin’ directory and
! their names are derived by appending the ‘.a’ extension to the backend
! executable names, for example, ‘cc1.exe.a’, ‘cc1plus.exe.a’, etc.  The
  following command line shows how to build the single source file plugin
  on Windows to be used with the C++ compiler:
  
       g++ -I`gcc -print-file-name=plugin`/include -shared -Wl,--export-all-symbols \
       -o plugin.dll plugin.cc `gcc -print-file-name=plugin`/cc1plus.exe.a
  
!  When a plugin needs to use ‘gengtype’, be sure that both ‘gengtype’ and
! ‘gtype.state’ have the same version as the GCC for which the plugin is
  built.
  
  
*************** at link time).
*** 47204,47210 ****
  * IPA::                     Using summary information in IPA passes.
  * WHOPR::                   Whole program assumptions,
                              linker plugin and symbol visibilities.
! * Internal flags::          Internal flags controlling 'lto1'.
  
  
  File: gccint.info,  Node: LTO Overview,  Next: LTO object file layout,  Up: LTO
--- 47205,47211 ----
  * IPA::                     Using summary information in IPA passes.
  * WHOPR::                   Whole program assumptions,
                              linker plugin and symbol visibilities.
! * Internal flags::          Internal flags controlling ‘lto1’.
  
  
  File: gccint.info,  Node: LTO Overview,  Next: LTO object file layout,  Up: LTO
*************** File: gccint.info,  Node: LTO Overview,
*** 47213,47238 ****
  ====================
  
  Link time optimization is implemented as a GCC front end for a bytecode
! representation of GIMPLE that is emitted in special sections of '.o'
  files.  Currently, LTO support is enabled in most ELF-based systems, as
  well as darwin, cygwin and mingw systems.
  
   By default, object files generated with LTO support contain only GIMPLE
  bytecode.  Such objects are called "slim", and they require that tools
! like 'ar' and 'nm' understand symbol tables of LTO sections.  For most
  targets these tools have been extended to use the plugin infrastructure,
  so GCC can support "slim" objects consisting of the intermediate code
  alone.
  
   GIMPLE bytecode could also be saved alongside final object code if the
! '-ffat-lto-objects' option is passed, or if no plugin support is
! detected for 'ar' and 'nm' when GCC is configured.  It makes the object
  files generated with LTO support larger than regular object files.  This
  "fat" object format allows to ship one set of fat objects which could be
  used both for development and the production of optimized builds.  A,
  perhaps surprising, side effect of this feature is that any mistake in
  the toolchain leads to LTO information not being used (e.g. an older
! 'libtool' calling 'ld' directly).  This is both an advantage, as the
  system is more robust, and a disadvantage, as the user is not informed
  that the optimization has been disabled.
  
--- 47214,47239 ----
  ====================
  
  Link time optimization is implemented as a GCC front end for a bytecode
! representation of GIMPLE that is emitted in special sections of ‘.o’
  files.  Currently, LTO support is enabled in most ELF-based systems, as
  well as darwin, cygwin and mingw systems.
  
   By default, object files generated with LTO support contain only GIMPLE
  bytecode.  Such objects are called "slim", and they require that tools
! like ‘ar’ and ‘nm’ understand symbol tables of LTO sections.  For most
  targets these tools have been extended to use the plugin infrastructure,
  so GCC can support "slim" objects consisting of the intermediate code
  alone.
  
   GIMPLE bytecode could also be saved alongside final object code if the
! ‘-ffat-lto-objects’ option is passed, or if no plugin support is
! detected for ‘ar’ and ‘nm’ when GCC is configured.  It makes the object
  files generated with LTO support larger than regular object files.  This
  "fat" object format allows to ship one set of fat objects which could be
  used both for development and the production of optimized builds.  A,
  perhaps surprising, side effect of this feature is that any mistake in
  the toolchain leads to LTO information not being used (e.g. an older
! ‘libtool’ calling ‘ld’ directly).  This is both an advantage, as the
  system is more robust, and a disadvantage, as the user is not informed
  that the optimization has been disabled.
  
*************** data structures needed to optimize and g
*** 47242,47268 ****
  declarations, types, the callgraph and the GIMPLE representation of
  function bodies.
  
!  When '-flto' is given during compilation of a source file, the pass
! manager executes all the passes in 'all_lto_gen_passes'.  Currently,
  this phase is composed of two IPA passes:
  
!    * 'pass_ipa_lto_gimple_out' This pass executes the function
!      'lto_output' in 'lto-streamer-out.cc', which traverses the call
       graph encoding every reachable declaration, type and function.
       This generates a memory representation of all the file sections
       described below.
  
!    * 'pass_ipa_lto_finish_out' This pass executes the function
!      'produce_asm_for_decls' in 'lto-streamer-out.cc', which takes the
       memory image built in the previous pass and encodes it in the
       corresponding ELF file sections.
  
   The second half of LTO support is the "reader".  This is implemented as
! the GCC front end 'lto1' in 'lto/lto.cc'.  When 'collect2' detects a
! link set of '.o'/'.a' files with LTO information and the '-flto' is
! enabled, it invokes 'lto1' which reads the set of files and aggregates
  them into a single translation unit for optimization.  The main entry
! point for the reader is 'lto/lto.cc':'lto_main'.
  
  25.1.1 LTO modes of operation
  -----------------------------
--- 47243,47269 ----
  declarations, types, the callgraph and the GIMPLE representation of
  function bodies.
  
!  When ‘-flto’ is given during compilation of a source file, the pass
! manager executes all the passes in ‘all_lto_gen_passes’.  Currently,
  this phase is composed of two IPA passes:
  
!    • ‘pass_ipa_lto_gimple_out’ This pass executes the function
!      ‘lto_output’ in ‘lto-streamer-out.cc’, which traverses the call
       graph encoding every reachable declaration, type and function.
       This generates a memory representation of all the file sections
       described below.
  
!    • ‘pass_ipa_lto_finish_out’ This pass executes the function
!      ‘produce_asm_for_decls’ in ‘lto-streamer-out.cc’, which takes the
       memory image built in the previous pass and encodes it in the
       corresponding ELF file sections.
  
   The second half of LTO support is the "reader".  This is implemented as
! the GCC front end ‘lto1’ in ‘lto/lto.cc’.  When ‘collect2’ detects a
! link set of ‘.o’/‘.a’ files with LTO information and the ‘-flto’ is
! enabled, it invokes ‘lto1’ which reads the set of files and aggregates
  them into a single translation unit for optimization.  The main entry
! point for the reader is ‘lto/lto.cc’:‘lto_main’.
  
  25.1.1 LTO modes of operation
  -----------------------------
*************** two link-time compilation modes.
*** 47278,47289 ****
    2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
       and/or a distributed compilation environment to quickly link large
       applications.  WHOPR stands for WHOle Program optimizeR (not to be
!      confused with the semantics of '-fwhole-program').  It partitions
!      the aggregated callgraph from many different '.o' files and
       distributes the compilation of the sub-graphs to different CPUs.
  
       Note that distributed compilation is not implemented yet, but since
!      the parallelism is facilitated via generating a 'Makefile', it
       would be easy to implement.
  
   WHOPR splits LTO into three main stages:
--- 47279,47290 ----
    2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
       and/or a distributed compilation environment to quickly link large
       applications.  WHOPR stands for WHOle Program optimizeR (not to be
!      confused with the semantics of ‘-fwhole-program’).  It partitions
!      the aggregated callgraph from many different ‘.o’ files and
       distributes the compilation of the sub-graphs to different CPUs.
  
       Note that distributed compilation is not implemented yet, but since
!      the parallelism is facilitated via generating a ‘Makefile’, it
       would be easy to implement.
  
   WHOPR splits LTO into three main stages:
*************** File: gccint.info,  Node: LTO object fil
*** 47328,47340 ****
  
  LTO information is stored in several ELF sections inside object files.
  Data structures and enum codes for sections are defined in
! 'lto-streamer.h'.
  
!  These sections are emitted from 'lto-streamer-out.cc' and mapped in all
! at once from 'lto/lto.cc':'lto_file_read'.  The individual functions
  dealing with the reading/writing of each section are described below.
  
!    * Command line options ('.gnu.lto_.opts')
  
       This section contains the command line options used to generate the
       object files.  This is used at link time to determine the
--- 47329,47341 ----
  
  LTO information is stored in several ELF sections inside object files.
  Data structures and enum codes for sections are defined in
! ‘lto-streamer.h’.
  
!  These sections are emitted from ‘lto-streamer-out.cc’ and mapped in all
! at once from ‘lto/lto.cc’:‘lto_file_read’.  The individual functions
  dealing with the reading/writing of each section are described below.
  
!    • Command line options (‘.gnu.lto_.opts’)
  
       This section contains the command line options used to generate the
       object files.  This is used at link time to determine the
*************** dealing with the reading/writing of each
*** 47345,47353 ****
       restored when processing the functions at link time.  Global
       options are composed from options specified at compile time and
       link time.  How exactly they are combined or mismatches diagnosed
!      is implemented in 'lto-wrapper.cc':'find_and_merge_options'.
  
!    * Symbol table ('.gnu.lto_.symtab')
  
       This table replaces the ELF symbol table for functions and
       variables represented in the LTO IL. Symbols used and exported by
--- 47346,47354 ----
       restored when processing the functions at link time.  Global
       options are composed from options specified at compile time and
       link time.  How exactly they are combined or mismatches diagnosed
!      is implemented in ‘lto-wrapper.cc’:‘find_and_merge_options’.
  
!    • Symbol table (‘.gnu.lto_.symtab’)
  
       This table replaces the ELF symbol table for functions and
       variables represented in the LTO IL. Symbols used and exported by
*************** dealing with the reading/writing of each
*** 47364,47419 ****
       symbol table was used.
  
       The symbol table is emitted in
!      'lto-streamer-out.cc':'produce_symtab'.
  
!    * Global declarations and types ('.gnu.lto_.decls')
  
       This section contains an intermediate language dump of all
       declarations and types required to represent the callgraph, static
       variables and top-level debug info.
  
       The contents of this section are emitted in
!      'lto-streamer-out.cc':'produce_asm_for_decls'.  Types and symbols
       are emitted in a topological order that preserves the sharing of
       pointers when the file is read back in
!      ('lto.cc':'read_cgraph_and_symbols').
  
!    * The callgraph ('.gnu.lto_.cgraph')
  
       This section contains the basic data structure used by the GCC
       inter-procedural optimization infrastructure.  This section stores
       an annotated multi-graph which represents the functions and call
!      sites as well as the variables, aliases and top-level 'asm'
       statements.
  
!      This section is emitted in 'lto-streamer-out.cc':'output_cgraph'
!      and read in 'lto-cgraph.cc':'input_cgraph'.
  
!    * IPA references ('.gnu.lto_.refs')
  
       This section contains references between function and static
!      variables.  It is emitted by 'lto-cgraph.cc':'output_refs' and read
!      by 'lto-cgraph.cc':'input_refs'.
  
!    * Function bodies ('.gnu.lto_.function_body.<name>')
  
       This section contains function bodies in the intermediate language
       representation.  Every function body is in a separate section to
       allow copying of the section independently to different object
       files or reading the function on demand.
  
!      Functions are emitted in 'lto-streamer-out.cc':'output_function'
!      and read in 'lto-streamer-in.cc':'input_function'.
  
!    * Static variable initializers ('.gnu.lto_.vars')
  
       This section contains all the symbols in the global variable pool.
!      It is emitted by 'lto-cgraph.cc':'output_varpool' and read in
!      'lto-cgraph.cc':'input_cgraph'.
  
!    * Summaries and optimization summaries used by IPA passes
!      ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst'
!      or 'reference')
  
       These sections are used by IPA passes that need to emit summary
       information during LTO generation to be read and aggregated at link
--- 47365,47420 ----
       symbol table was used.
  
       The symbol table is emitted in
!      ‘lto-streamer-out.cc’:‘produce_symtab’.
  
!    • Global declarations and types (‘.gnu.lto_.decls’)
  
       This section contains an intermediate language dump of all
       declarations and types required to represent the callgraph, static
       variables and top-level debug info.
  
       The contents of this section are emitted in
!      ‘lto-streamer-out.cc’:‘produce_asm_for_decls’.  Types and symbols
       are emitted in a topological order that preserves the sharing of
       pointers when the file is read back in
!      (‘lto.cc’:‘read_cgraph_and_symbols’).
  
!    • The callgraph (‘.gnu.lto_.cgraph’)
  
       This section contains the basic data structure used by the GCC
       inter-procedural optimization infrastructure.  This section stores
       an annotated multi-graph which represents the functions and call
!      sites as well as the variables, aliases and top-level ‘asm’
       statements.
  
!      This section is emitted in ‘lto-streamer-out.cc’:‘output_cgraph’
!      and read in ‘lto-cgraph.cc’:‘input_cgraph’.
  
!    • IPA references (‘.gnu.lto_.refs’)
  
       This section contains references between function and static
!      variables.  It is emitted by ‘lto-cgraph.cc’:‘output_refs’ and read
!      by ‘lto-cgraph.cc’:‘input_refs’.
  
!    • Function bodies (‘.gnu.lto_.function_body.<name>’)
  
       This section contains function bodies in the intermediate language
       representation.  Every function body is in a separate section to
       allow copying of the section independently to different object
       files or reading the function on demand.
  
!      Functions are emitted in ‘lto-streamer-out.cc’:‘output_function’
!      and read in ‘lto-streamer-in.cc’:‘input_function’.
  
!    • Static variable initializers (‘.gnu.lto_.vars’)
  
       This section contains all the symbols in the global variable pool.
!      It is emitted by ‘lto-cgraph.cc’:‘output_varpool’ and read in
!      ‘lto-cgraph.cc’:‘input_cgraph’.
  
!    • Summaries and optimization summaries used by IPA passes
!      (‘.gnu.lto_.<xxx>’, where ‘<xxx>’ is one of ‘jmpfuncs’, ‘pureconst’
!      or ‘reference’)
  
       These sections are used by IPA passes that need to emit summary
       information during LTO generation to be read and aggregated at link
*************** make the implementation of WHOPR possibl
*** 47439,47507 ****
  optimization pass is split into several stages that are executed at
  different times during WHOPR compilation:
  
!    * LGEN time
!        1. _Generate summary_ ('generate_summary' in 'struct
!           ipa_opt_pass_d').  This stage analyzes every function body and
            variable initializer is examined and stores relevant
            information into a pass-specific data structure.
  
!        2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d').
            This stage writes all the pass-specific information generated
!           by 'generate_summary'.  Summaries go into their own
!           'LTO_section_*' sections that have to be declared in
!           'lto-streamer.h':'enum lto_section_type'.  A new section is
!           created by calling 'create_output_block' and data can be
!           written using the 'lto_output_*' routines.
  
!    * WPA time
!        1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d').
            This stage reads all the pass-specific information in exactly
!           the same order that it was written by 'write_summary'.
  
!        2. _Execute_ ('execute' in 'struct opt_pass').  This performs
            inter-procedural propagation.  This must be done without
            actual access to the individual function bodies or variable
            initializers.  Typically, this results in a transitive closure
            operation over the summary information of all the nodes in the
            callgraph.
  
!        3. _Write optimization summary_ ('write_optimization_summary' in
!           'struct ipa_opt_pass_d').  This writes the result of the
            inter-procedural propagation into the object file.  This can
            use the same data structures and helper routines used in
!           'write_summary'.
  
!    * LTRANS time
!        1. _Read optimization summary_ ('read_optimization_summary' in
!           'struct ipa_opt_pass_d').  The counterpart to
!           'write_optimization_summary'.  This reads the interprocedural
            optimization decisions in exactly the same format emitted by
!           'write_optimization_summary'.
  
!        2. _Transform_ ('function_transform' and 'variable_transform' in
!           'struct ipa_opt_pass_d').  The actual function bodies and
            variable initializers are updated based on the information
            passed down from the _Execute_ stage.
  
   The implementation of the inter-procedural passes are shared between
  LTO, WHOPR and classic non-LTO compilation.
  
!    * During the traditional file-by-file mode every pass executes its
       own _Generate summary_, _Execute_, and _Transform_ stages within
       the single execution context of the compiler.
  
!    * In LTO compilation mode, every pass uses _Generate summary_ and
       _Write summary_ stages at compilation time, while the _Read
       summary_, _Execute_, and _Transform_ stages are executed at link
       time.
  
!    * In WHOPR mode all stages are used.
  
   To simplify development, the GCC pass manager differentiates between
  normal inter-procedural passes (*note Regular IPA passes::), small
  inter-procedural passes (*note Small IPA passes::) and late
  inter-procedural passes (*note Late IPA passes::).  A small or late IPA
! pass ('SIMPLE_IPA_PASS') does everything at once and thus cannot be
  executed during WPA in WHOPR mode.  It defines only the _Execute_ stage
  and during this stage it accesses and modifies the function bodies.
  Such passes are useful for optimization at LGEN or LTRANS time and are
--- 47440,47508 ----
  optimization pass is split into several stages that are executed at
  different times during WHOPR compilation:
  
!    • LGEN time
!        1. _Generate summary_ (‘generate_summary’ in ‘struct
!           ipa_opt_pass_d’).  This stage analyzes every function body and
            variable initializer is examined and stores relevant
            information into a pass-specific data structure.
  
!        2. _Write summary_ (‘write_summary’ in ‘struct ipa_opt_pass_d’).
            This stage writes all the pass-specific information generated
!           by ‘generate_summary’.  Summaries go into their own
!           ‘LTO_section_*’ sections that have to be declared in
!           ‘lto-streamer.h’:‘enum lto_section_type’.  A new section is
!           created by calling ‘create_output_block’ and data can be
!           written using the ‘lto_output_*’ routines.
  
!    • WPA time
!        1. _Read summary_ (‘read_summary’ in ‘struct ipa_opt_pass_d’).
            This stage reads all the pass-specific information in exactly
!           the same order that it was written by ‘write_summary’.
  
!        2. _Execute_ (‘execute’ in ‘struct opt_pass’).  This performs
            inter-procedural propagation.  This must be done without
            actual access to the individual function bodies or variable
            initializers.  Typically, this results in a transitive closure
            operation over the summary information of all the nodes in the
            callgraph.
  
!        3. _Write optimization summary_ (‘write_optimization_summary’ in
!           ‘struct ipa_opt_pass_d’).  This writes the result of the
            inter-procedural propagation into the object file.  This can
            use the same data structures and helper routines used in
!           ‘write_summary’.
  
!    • LTRANS time
!        1. _Read optimization summary_ (‘read_optimization_summary’ in
!           ‘struct ipa_opt_pass_d’).  The counterpart to
!           ‘write_optimization_summary’.  This reads the interprocedural
            optimization decisions in exactly the same format emitted by
!           ‘write_optimization_summary’.
  
!        2. _Transform_ (‘function_transform’ and ‘variable_transform’ in
!           ‘struct ipa_opt_pass_d’).  The actual function bodies and
            variable initializers are updated based on the information
            passed down from the _Execute_ stage.
  
   The implementation of the inter-procedural passes are shared between
  LTO, WHOPR and classic non-LTO compilation.
  
!    • During the traditional file-by-file mode every pass executes its
       own _Generate summary_, _Execute_, and _Transform_ stages within
       the single execution context of the compiler.
  
!    • In LTO compilation mode, every pass uses _Generate summary_ and
       _Write summary_ stages at compilation time, while the _Read
       summary_, _Execute_, and _Transform_ stages are executed at link
       time.
  
!    • In WHOPR mode all stages are used.
  
   To simplify development, the GCC pass manager differentiates between
  normal inter-procedural passes (*note Regular IPA passes::), small
  inter-procedural passes (*note Small IPA passes::) and late
  inter-procedural passes (*note Late IPA passes::).  A small or late IPA
! pass (‘SIMPLE_IPA_PASS’) does everything at once and thus cannot be
  executed during WPA in WHOPR mode.  It defines only the _Execute_ stage
  and during this stage it accesses and modifies the function bodies.
  Such passes are useful for optimization at LGEN or LTRANS time and are
*************** summaries updated for the _Transform_ st
*** 47586,47605 ****
  ---------------------
  
  GCC represents IPA references in the callgraph.  For a function or
! variable 'A', the _IPA reference_ is a list of all locations where the
! address of 'A' is taken and, when 'A' is a variable, a list of all
! direct stores and reads to/from 'A'.  References represent an oriented
  multi-graph on the union of nodes of the callgraph and the varpool.  See
! 'ipa-reference.cc':'ipa_reference_write_optimization_summary' and
! 'ipa-reference.cc':'ipa_reference_read_optimization_summary' for
  details.
  
  25.3.3 Jump functions
  ---------------------
  
! Suppose that an optimization pass sees a function 'A' and it knows the
  values of (some of) its arguments.  The _jump function_ describes the
! value of a parameter of a given function call in function 'A' based on
  this knowledge.
  
   Jump functions are used by several optimizations, such as the
--- 47587,47606 ----
  ---------------------
  
  GCC represents IPA references in the callgraph.  For a function or
! variable ‘A’, the _IPA reference_ is a list of all locations where the
! address of ‘A’ is taken and, when ‘A’ is a variable, a list of all
! direct stores and reads to/from ‘A’.  References represent an oriented
  multi-graph on the union of nodes of the callgraph and the varpool.  See
! ‘ipa-reference.cc’:‘ipa_reference_write_optimization_summary’ and
! ‘ipa-reference.cc’:‘ipa_reference_read_optimization_summary’ for
  details.
  
  25.3.3 Jump functions
  ---------------------
  
! Suppose that an optimization pass sees a function ‘A’ and it knows the
  values of (some of) its arguments.  The _jump function_ describes the
! value of a parameter of a given function call in function ‘A’ based on
  this knowledge.
  
   Jump functions are used by several optimizations, such as the
*************** rules allow one to overwrite any externa
*** 47625,47645 ****
  different symbol at runtime.  This basically disables any optimizations
  across such functions and variables, because the compiler cannot be sure
  that the function body it is seeing is the same function body that will
! be used at runtime.  Any function or variable not declared 'static' in
  the sources degrades the quality of inter-procedural optimization.
  
   To avoid this problem the compiler must assume that it sees the whole
  program when doing link-time optimization.  Strictly speaking, the whole
  program is rarely visible even at link-time.  Standard system libraries
  are usually linked dynamically or not provided with the link-time
! information.  In GCC, the whole program option ('-fwhole-program')
  asserts that every function and variable defined in the current
! compilation unit is static, except for function 'main' (note: at link
  time, the current unit is the union of all objects compiled with LTO).
  Since some functions and variables need to be referenced externally, for
  example by another DSO or from an assembler file, GCC also provides the
! function and variable attribute 'externally_visible' which can be used
! to disable the effect of '-fwhole-program' on a specific symbol.
  
   The whole program mode assumptions are slightly more complex in C++,
  where inline functions in headers are put into _COMDAT_ sections.
--- 47626,47646 ----
  different symbol at runtime.  This basically disables any optimizations
  across such functions and variables, because the compiler cannot be sure
  that the function body it is seeing is the same function body that will
! be used at runtime.  Any function or variable not declared ‘static’ in
  the sources degrades the quality of inter-procedural optimization.
  
   To avoid this problem the compiler must assume that it sees the whole
  program when doing link-time optimization.  Strictly speaking, the whole
  program is rarely visible even at link-time.  Standard system libraries
  are usually linked dynamically or not provided with the link-time
! information.  In GCC, the whole program option (‘-fwhole-program’)
  asserts that every function and variable defined in the current
! compilation unit is static, except for function ‘main’ (note: at link
  time, the current unit is the union of all objects compiled with LTO).
  Since some functions and variables need to be referenced externally, for
  example by another DSO or from an assembler file, GCC also provides the
! function and variable attribute ‘externally_visible’ which can be used
! to disable the effect of ‘-fwhole-program’ on a specific symbol.
  
   The whole program mode assumptions are slightly more complex in C++,
  where inline functions in headers are put into _COMDAT_ sections.
*************** always remain externally visible, howeve
*** 47651,47663 ****
  assumed that their initializers cannot be overwritten by a different
  value.
  
!  GCC provides the function and variable attribute 'visibility' that can
  be used to specify the visibility of externally visible symbols (or
! alternatively an '-fdefault-visibility' command line option).  ELF
! defines the 'default', 'protected', 'hidden' and 'internal'
  visibilities.
  
!  The most commonly used is visibility is 'hidden'.  It specifies that
  the symbol cannot be referenced from outside of the current shared
  library.  Unfortunately, this information cannot be used directly by the
  link-time optimization in the compiler since the whole shared library
--- 47652,47664 ----
  assumed that their initializers cannot be overwritten by a different
  value.
  
!  GCC provides the function and variable attribute ‘visibility’ that can
  be used to specify the visibility of externally visible symbols (or
! alternatively an ‘-fdefault-visibility’ command line option).  ELF
! defines the ‘default’, ‘protected’, ‘hidden’ and ‘internal’
  visibilities.
  
!  The most commonly used is visibility is ‘hidden’.  It specifies that
  the symbol cannot be referenced from outside of the current shared
  library.  Unfortunately, this information cannot be used directly by the
  link-time optimization in the compiler since the whole shared library
*************** the rest of a binary being linked.
*** 47677,47702 ****
   GCC is designed to be independent of the rest of the toolchain and aims
  to support linkers without plugin support.  For this reason it does not
  use the linker plugin by default.  Instead, the object files are
! examined by 'collect2' before being passed to the linker and objects
! found to have LTO sections are passed to 'lto1' first.  This mode does
  not work for library archives.  The decision on what object files from
  the archive are needed depends on the actual linking and thus GCC would
  have to implement the linker itself.  The resolution information is
  missing too and thus GCC needs to make an educated guess based on
! '-fwhole-program'.  Without the linker plugin GCC also assumes that
! symbols are declared 'hidden' and not referred by non-LTO code by
  default.
  
  
  File: gccint.info,  Node: Internal flags,  Prev: WHOPR,  Up: LTO
  
! 25.5 Internal flags controlling 'lto1'
  ======================================
  
! The following flags are passed into 'lto1' and are not meant to be used
  directly from the command line.
  
!    * -fwpa This option runs the serial part of the link-time optimizer
       performing the inter-procedural propagation (WPA mode).  The
       compiler reads in summary information from all inputs and performs
       an analysis based on summary information only.  It generates object
--- 47678,47703 ----
   GCC is designed to be independent of the rest of the toolchain and aims
  to support linkers without plugin support.  For this reason it does not
  use the linker plugin by default.  Instead, the object files are
! examined by ‘collect2’ before being passed to the linker and objects
! found to have LTO sections are passed to ‘lto1’ first.  This mode does
  not work for library archives.  The decision on what object files from
  the archive are needed depends on the actual linking and thus GCC would
  have to implement the linker itself.  The resolution information is
  missing too and thus GCC needs to make an educated guess based on
! ‘-fwhole-program’.  Without the linker plugin GCC also assumes that
! symbols are declared ‘hidden’ and not referred by non-LTO code by
  default.
  
  
  File: gccint.info,  Node: Internal flags,  Prev: WHOPR,  Up: LTO
  
! 25.5 Internal flags controlling ‘lto1’
  ======================================
  
! The following flags are passed into ‘lto1’ and are not meant to be used
  directly from the command line.
  
!    • -fwpa This option runs the serial part of the link-time optimizer
       performing the inter-procedural propagation (WPA mode).  The
       compiler reads in summary information from all inputs and performs
       an analysis based on summary information only.  It generates object
*************** directly from the command line.
*** 47705,47721 ****
       information from the WPA mode and the actual function bodies.  It
       then drives the LTRANS phase.
  
!    * -fltrans This option runs the link-time optimizer in the
       local-transformation (LTRANS) mode, which reads in output from a
       previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
       optimizes an object and produces the final assembly.
  
!    * -fltrans-output-list=FILE This option specifies a file to which the
       names of LTRANS output files are written.  This option is only
!      meaningful in conjunction with '-fwpa'.
  
!    * -fresolution=FILE This option specifies the linker resolution file.
!      This option is only meaningful in conjunction with '-fwpa' and as
       option to pass through to the LTO linker plugin.
  
  
--- 47706,47722 ----
       information from the WPA mode and the actual function bodies.  It
       then drives the LTRANS phase.
  
!    • -fltrans This option runs the link-time optimizer in the
       local-transformation (LTRANS) mode, which reads in output from a
       previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
       optimizes an object and produces the final assembly.
  
!    • -fltrans-output-list=FILE This option specifies a file to which the
       names of LTRANS output files are written.  This option is only
!      meaningful in conjunction with ‘-fwpa’.
  
!    • -fresolution=FILE This option specifies the linker resolution file.
!      This option is only meaningful in conjunction with ‘-fwpa’ and as
       option to pass through to the LTO linker plugin.
  
  
*************** File: gccint.info,  Node: GIMPLE API,  N
*** 47770,47785 ****
  
   thus providing n-ary overloads for operation or function.  The
  additional arguments are a gimple_seq where built statements are
! inserted on (if 'NULL' then simplifications requiring new statements are
  not performed) and a valueization hook that can be used to tie
  simplifications to a SSA lattice.
  
!  In addition to those APIs 'fold_stmt' is overloaded with a valueization
  hook:
  
   -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree));
  
!  On top of these a 'fold_buildN'-like API for GIMPLE is introduced:
  
   -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
            tree_code, tree, tree, tree (*valueize) (tree) = NULL);
--- 47771,47786 ----
  
   thus providing n-ary overloads for operation or function.  The
  additional arguments are a gimple_seq where built statements are
! inserted on (if ‘NULL’ then simplifications requiring new statements are
  not performed) and a valueization hook that can be used to tie
  simplifications to a SSA lattice.
  
!  In addition to those APIs ‘fold_stmt’ is overloaded with a valueization
  hook:
  
   -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree));
  
!  On top of these a ‘fold_buildN’-like API for GIMPLE is introduced:
  
   -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
            tree_code, tree, tree, tree (*valueize) (tree) = NULL);
*************** hook:
*** 47800,47807 ****
   -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t,
            tree, tree);
  
!  which is supposed to replace 'force_gimple_operand (fold_buildN (...),
! ...)' and calls to 'fold_convert'.  Overloads without the 'location_t'
  argument exist.  Built statements are inserted on the provided sequence
  and simplification is performed using the optional valueization hook.
  
--- 47801,47808 ----
   -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t,
            tree, tree);
  
!  which is supposed to replace ‘force_gimple_operand (fold_buildN (...),
! ...)’ and calls to ‘fold_convert’.  Overloads without the ‘location_t’
  argument exist.  Built statements are inserted on the provided sequence
  and simplification is performed using the optional valueization hook.
  
*************** start with an example from the match.pd
*** 47820,47847 ****
         @0)
  
   This example contains all required parts of an expression
! simplification.  A simplification is wrapped inside a '(simplify ...)'
  expression.  That contains at least two operands - an expression that is
  matched with the GIMPLE or GENERIC IL and a replacement expression that
  is returned if the match was successful.
  
!  Expressions have an operator ID, 'bit_and' in this case.  Expressions
! can be lower-case tree codes with '_expr' stripped off or builtin
! function code names in all-caps, like 'BUILT_IN_SQRT'.
  
!  '@n' denotes a so-called capture.  It captures the operand and lets you
  refer to it in other places of the match-and-simplify.  In the above
  example it is referred to in the replacement expression.  Captures are
! '@' followed by a number or an identifier.
  
       (simplify
         (bit_xor @0 @0)
         { build_zero_cst (type); })
  
!  In this example '@0' is mentioned twice which constrains the matched
  expression to have two equal operands.  Usually matches are constrained
  to equal types.  If operands may be constants and conversions are
! involved, matching by value might be preferred in which case use '@@0'
  to denote a by-value match and the specific operand you want to refer to
  in the result part.  This example also introduces operands written in C
  code.  These can be used in the expression replacements and are supposed
--- 47821,47848 ----
         @0)
  
   This example contains all required parts of an expression
! simplification.  A simplification is wrapped inside a ‘(simplify ...)’
  expression.  That contains at least two operands - an expression that is
  matched with the GIMPLE or GENERIC IL and a replacement expression that
  is returned if the match was successful.
  
!  Expressions have an operator ID, ‘bit_and’ in this case.  Expressions
! can be lower-case tree codes with ‘_expr’ stripped off or builtin
! function code names in all-caps, like ‘BUILT_IN_SQRT’.
  
!  ‘@n’ denotes a so-called capture.  It captures the operand and lets you
  refer to it in other places of the match-and-simplify.  In the above
  example it is referred to in the replacement expression.  Captures are
! ‘@’ followed by a number or an identifier.
  
       (simplify
         (bit_xor @0 @0)
         { build_zero_cst (type); })
  
!  In this example ‘@0’ is mentioned twice which constrains the matched
  expression to have two equal operands.  Usually matches are constrained
  to equal types.  If operands may be constants and conversions are
! involved, matching by value might be preferred in which case use ‘@@0’
  to denote a by-value match and the specific operand you want to refer to
  in the result part.  This example also introduces operands written in C
  code.  These can be used in the expression replacements and are supposed
*************** you cannot generate expressions in C cod
*** 47853,47860 ****
         (if (!integer_zerop (@1))
          @0))
  
!  Here '@0' captures the first operand of the trunc_mod expression which
! is also predicated with 'integer_zerop'.  Expression operands may be
  either expressions, predicates or captures.  Captures can be
  unconstrained or capture expressions or predicates.
  
--- 47854,47861 ----
         (if (!integer_zerop (@1))
          @0))
  
!  Here ‘@0’ captures the first operand of the trunc_mod expression which
! is also predicated with ‘integer_zerop’.  Expression operands may be
  either expressions, predicates or captures.  Captures can be
  unconstrained or capture expressions or predicates.
  
*************** unconstrained or capture expressions or
*** 47862,47873 ****
  if-expression.  This condition is evaluated after the expression matched
  in the IL and is required to evaluate to true to enable the replacement
  expression in the second operand position.  The expression operand of
! the 'if' is a standard C expression which may contain references to
! captures.  The 'if' has an optional third operand which may contain the
  replacement expression that is enabled when the condition evaluates to
  false.
  
!  A 'if' expression can be used to specify a common condition for
  multiple simplify patterns, avoiding the need to repeat that multiple
  times:
  
--- 47863,47874 ----
  if-expression.  This condition is evaluated after the expression matched
  in the IL and is required to evaluate to true to enable the replacement
  expression in the second operand position.  The expression operand of
! the ‘if’ is a standard C expression which may contain references to
! captures.  The ‘if’ has an optional third operand which may contain the
  replacement expression that is enabled when the condition evaluates to
  false.
  
!  A ‘if’ expression can be used to specify a common condition for
  multiple simplify patterns, avoiding the need to repeat that multiple
  times:
  
*************** times:
*** 47880,47892 ****
           (minus (minus @0 @1) @0)
           (negate @1)))
  
!  Note that 'if's in outer position do not have the optional else clause
  but instead have multiple then clauses.
  
   Ifs can be nested.
  
!  There exists a 'switch' expression which can be used to chain
! conditions avoiding nesting 'if's too much:
  
       (simplify
        (simple_comparison @0 REAL_CST@1)
--- 47881,47893 ----
           (minus (minus @0 @1) @0)
           (negate @1)))
  
!  Note that ‘if’s in outer position do not have the optional else clause
  but instead have multiple then clauses.
  
   Ifs can be nested.
  
!  There exists a ‘switch’ expression which can be used to chain
! conditions avoiding nesting ‘if’s too much:
  
       (simplify
        (simple_comparison @0 REAL_CST@1)
*************** conditions avoiding nesting 'if's too mu
*** 47912,47919 ****
               && ! HONOR_SNANS (@1))
           { constant_boolean_node (cmp == NE_EXPR, type); }))))
  
!  which has the second 'if' in the else operand of the first.  The
! 'switch' expression takes 'if' expressions as operands (which may not
  have else clauses) and as a last operand a replacement expression which
  should be enabled by default if no other condition evaluated to true.
  
--- 47913,47920 ----
               && ! HONOR_SNANS (@1))
           { constant_boolean_node (cmp == NE_EXPR, type); }))))
  
!  which has the second ‘if’ in the else operand of the first.  The
! ‘switch’ expression takes ‘if’ expressions as operands (which may not
  have else clauses) and as a last operand a replacement expression which
  should be enabled by default if no other condition evaluated to true.
  
*************** should be enabled by default if no other
*** 47936,47954 ****
         })
       #endif
  
!  In the above example, '@2' captures the result of the expression '(addr
! @0)'.  For the outermost expression only its type can be captured, and
! the keyword 'type' is reserved for this purpose.  The above example also
! gives a way to conditionalize patterns to only apply to 'GIMPLE' or
! 'GENERIC' by means of using the pre-defined preprocessor macros 'GIMPLE'
! and 'GENERIC' and using preprocessor directives.
  
       (simplify
         (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1))
         (bit_and @1 @0))
  
   Here we introduce flags on match expressions.  The flag used above,
! 'c', denotes that the expression should be also matched commutated.
  Thus the above match expression is really the following four match
  expressions:
  
--- 47937,47955 ----
         })
       #endif
  
!  In the above example, ‘@2’ captures the result of the expression ‘(addr
! @0)’.  For the outermost expression only its type can be captured, and
! the keyword ‘type’ is reserved for this purpose.  The above example also
! gives a way to conditionalize patterns to only apply to ‘GIMPLE’ or
! ‘GENERIC’ by means of using the pre-defined preprocessor macros ‘GIMPLE’
! and ‘GENERIC’ and using preprocessor directives.
  
       (simplify
         (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1))
         (bit_and @1 @0))
  
   Here we introduce flags on match expressions.  The flag used above,
! ‘c’, denotes that the expression should be also matched commutated.
  Thus the above match expression is really the following four match
  expressions:
  
*************** expressions:
*** 47961,47968 ****
  before matching, so for example constant operands always come second in
  commutative expressions.
  
!  The second supported flag is 's' which tells the code generator to fail
! the pattern if the expression marked with 's' does have more than one
  use and the simplification results in an expression with more than one
  operator.  For example in
  
--- 47962,47969 ----
  before matching, so for example constant operands always come second in
  commutative expressions.
  
!  The second supported flag is ‘s’ which tells the code generator to fail
! the pattern if the expression marked with ‘s’ does have more than one
  use and the simplification results in an expression with more than one
  operator.  For example in
  
*************** operator.  For example in
*** 47970,47983 ****
         (pointer_plus (pointer_plus:s @0 @1) @3)
         (pointer_plus @0 (plus @1 @3)))
  
!  this avoids the association if '(pointer_plus @0 @1)' is used outside
  of the matched expression and thus it would stay live and not trivially
! removed by dead code elimination.  Now consider '((x + 3) + -3)' with
! the temporary holding '(x + 3)' used elsewhere.  This simplifies down to
! 'x' which is desirable and thus flagging with 's' does not prevent the
! transform.  Now consider '((x + 3) + 1)' which simplifies to '(x + 4)'.
! Despite being flagged with 's' the simplification will be performed.
! The simplification of '((x + a) + 1)' to '(x + (a + 1))' will not
  performed in this case though.
  
   More features exist to avoid too much repetition.
--- 47971,47984 ----
         (pointer_plus (pointer_plus:s @0 @1) @3)
         (pointer_plus @0 (plus @1 @3)))
  
!  this avoids the association if ‘(pointer_plus @0 @1)’ is used outside
  of the matched expression and thus it would stay live and not trivially
! removed by dead code elimination.  Now consider ‘((x + 3) + -3)’ with
! the temporary holding ‘(x + 3)’ used elsewhere.  This simplifies down to
! ‘x’ which is desirable and thus flagging with ‘s’ does not prevent the
! transform.  Now consider ‘((x + 3) + 1)’ which simplifies to ‘(x + 4)’.
! Despite being flagged with ‘s’ the simplification will be performed.
! The simplification of ‘((x + a) + 1)’ to ‘(x + (a + 1))’ will not
  performed in this case though.
  
   More features exist to avoid too much repetition.
*************** performed in this case though.
*** 47987,47994 ****
           (op @0 integer_zerop)
           @0))
  
!  A 'for' expression can be used to repeat a pattern for each operator
! specified, substituting 'op'.  'for' can be nested and a 'for' can have
  multiple operators to iterate.
  
       (for opa (plus minus)
--- 47988,47995 ----
           (op @0 integer_zerop)
           @0))
  
!  A ‘for’ expression can be used to repeat a pattern for each operator
! specified, substituting ‘op’.  ‘for’ can be nested and a ‘for’ can have
  multiple operators to iterate.
  
       (for opa (plus minus)
*************** multiple operators to iterate.
*** 47996,48019 ****
         (for opc (plus minus)
           (simplify...
  
!  In this example the pattern will be repeated four times with 'opa, opb,
! opc' being 'plus, minus, plus'; 'plus, minus, minus'; 'minus, plus,
! plus'; 'minus, plus, minus'.
  
!  To avoid repeating operator lists in 'for' you can name them via
  
       (define_operator_list pmm plus minus mult)
  
!  and use them in 'for' operator lists where they get expanded.
  
       (for opa (pmm trunc_div)
        (simplify...
  
!  So this example iterates over 'plus', 'minus', 'mult' and 'trunc_div'.
  
   Using operator lists can also remove the need to explicitly write a
! 'for'.  All operator list uses that appear in a 'simplify' or 'match'
! pattern in operator positions will implicitly be added to a new 'for'.
  For example
  
       (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL)
--- 47997,48020 ----
         (for opc (plus minus)
           (simplify...
  
!  In this example the pattern will be repeated four times with ‘opa, opb,
! opc’ being ‘plus, minus, plus’; ‘plus, minus, minus’; ‘minus, plus,
! plus’; ‘minus, plus, minus’.
  
!  To avoid repeating operator lists in ‘for’ you can name them via
  
       (define_operator_list pmm plus minus mult)
  
!  and use them in ‘for’ operator lists where they get expanded.
  
       (for opa (pmm trunc_div)
        (simplify...
  
!  So this example iterates over ‘plus’, ‘minus’, ‘mult’ and ‘trunc_div’.
  
   Using operator lists can also remove the need to explicitly write a
! ‘for’.  All operator list uses that appear in a ‘simplify’ or ‘match’
! pattern in operator positions will implicitly be added to a new ‘for’.
  For example
  
       (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL)
*************** For example
*** 48030,48041 ****
         (SQRT (POW @0 @1))
         (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))))
  
!  'for's and operator lists can include the special identifier 'null'
  that matches nothing and can never be generated.  This can be used to
  pad an operator list so that it has a standard form, even if there isn't
  a suitable operator for every form.
  
!  Another building block are 'with' expressions in the result expression
  which nest the generated code in a new C block followed by its argument:
  
       (simplify
--- 48031,48042 ----
         (SQRT (POW @0 @1))
         (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))))
  
!  ‘for’s and operator lists can include the special identifier ‘null’
  that matches nothing and can never be generated.  This can be used to
  pad an operator list so that it has a standard form, even if there isn't
  a suitable operator for every form.
  
!  Another building block are ‘with’ expressions in the result expression
  which nest the generated code in a new C block followed by its argument:
  
       (simplify
*************** which nest the generated code in a new C
*** 48043,48057 ****
        (with { tree utype = unsigned_type_for (type); }
         (convert (mult (convert:utype @0) (convert:utype @1)))))
  
!  This allows code nested in the 'with' to refer to the declared
  variables.  In the above case we use the feature to specify the type of
! a generated expression with the ':type' syntax where 'type' needs to be
  an identifier that refers to the desired type.  Usually the types of the
  generated result expressions are determined from the context, but
  sometimes like in the above case it is required that you specify them
  explicitly.
  
!  Another modifier for generated expressions is '!' which tells the
  machinery to only consider the simplification in case the marked
  expression simplified to a simple operand.  Consider for example
  
--- 48044,48058 ----
        (with { tree utype = unsigned_type_for (type); }
         (convert (mult (convert:utype @0) (convert:utype @1)))))
  
!  This allows code nested in the ‘with’ to refer to the declared
  variables.  In the above case we use the feature to specify the type of
! a generated expression with the ‘:type’ syntax where ‘type’ needs to be
  an identifier that refers to the desired type.  Usually the types of the
  generated result expressions are determined from the context, but
  sometimes like in the above case it is required that you specify them
  explicitly.
  
!  Another modifier for generated expressions is ‘!’ which tells the
  machinery to only consider the simplification in case the marked
  expression simplified to a simple operand.  Consider for example
  
*************** expression simplified to a simple operan
*** 48059,48096 ****
         (plus (vec_cond:s @0 @1 @2) @3)
         (vec_cond @0 (plus! @1 @3) (plus! @2 @3)))
  
!  which moves the outer 'plus' operation to the inner arms of the
! 'vec_cond' expression but only if the actual plus operations both
! simplify.  Note that on 'GENERIC' a simple operand means that the result
! satisfies '!EXPR_P' which can be limiting if the operation itself
  simplifies but the remaining operand is an (unrelated) expression.
  
   As intermediate conversions are often optional there is a way to avoid
  the need to repeat patterns both with and without such conversions.
! Namely you can mark a conversion as being optional with a '?':
  
       (simplify
        (eq (convert@0 @1) (convert? @2))
        (eq @1 (convert @2)))
  
!  which will match both '(eq (convert @1) (convert @2))' and '(eq
! (convert @1) @2)'.  The optional converts are supposed to be all either
! present or not, thus '(eq (convert? @1) (convert? @2))' will result in
  two patterns only.  If you want to match all four combinations you have
! access to two additional conditional converts as in '(eq (convert1? @1)
! (convert2? @2))'.
  
!  The support for '?' marking extends to all unary operations including
! predicates you declare yourself with 'match'.
  
   Predicates available from the GCC middle-end need to be made available
! explicitly via 'define_predicates':
  
       (define_predicates
        integer_onep integer_zerop integer_all_onesp)
  
   You can also define predicates using the pattern matching language and
! the 'match' form:
  
       (match negate_expr_p
        INTEGER_CST
--- 48060,48097 ----
         (plus (vec_cond:s @0 @1 @2) @3)
         (vec_cond @0 (plus! @1 @3) (plus! @2 @3)))
  
!  which moves the outer ‘plus’ operation to the inner arms of the
! ‘vec_cond’ expression but only if the actual plus operations both
! simplify.  Note that on ‘GENERIC’ a simple operand means that the result
! satisfies ‘!EXPR_P’ which can be limiting if the operation itself
  simplifies but the remaining operand is an (unrelated) expression.
  
   As intermediate conversions are often optional there is a way to avoid
  the need to repeat patterns both with and without such conversions.
! Namely you can mark a conversion as being optional with a ‘?’:
  
       (simplify
        (eq (convert@0 @1) (convert? @2))
        (eq @1 (convert @2)))
  
!  which will match both ‘(eq (convert @1) (convert @2))’ and ‘(eq
! (convert @1) @2)’.  The optional converts are supposed to be all either
! present or not, thus ‘(eq (convert? @1) (convert? @2))’ will result in
  two patterns only.  If you want to match all four combinations you have
! access to two additional conditional converts as in ‘(eq (convert1? @1)
! (convert2? @2))’.
  
!  The support for ‘?’ marking extends to all unary operations including
! predicates you declare yourself with ‘match’.
  
   Predicates available from the GCC middle-end need to be made available
! explicitly via ‘define_predicates’:
  
       (define_predicates
        integer_onep integer_zerop integer_all_onesp)
  
   You can also define predicates using the pattern matching language and
! the ‘match’ form:
  
       (match negate_expr_p
        INTEGER_CST
*************** the 'match' form:
*** 48099,48109 ****
       (match negate_expr_p
        (negate @0))
  
!  This shows that for 'match' expressions there is 't' available which
  captures the outermost expression (something not possible in the
! 'simplify' context).  As you can see 'match' has an identifier as first
  operand which is how you refer to the predicate in patterns.  Multiple
! 'match' for the same identifier add additional cases where the predicate
  matches.
  
   Predicates can also match an expression in which case you need to
--- 48100,48110 ----
       (match negate_expr_p
        (negate @0))
  
!  This shows that for ‘match’ expressions there is ‘t’ available which
  captures the outermost expression (something not possible in the
! ‘simplify’ context).  As you can see ‘match’ has an identifier as first
  operand which is how you refer to the predicate in patterns.  Multiple
! ‘match’ for the same identifier add additional cases where the predicate
  matches.
  
   Predicates can also match an expression in which case you need to
*************** whole-program analysis).
*** 48154,48178 ****
   The implementation is read-only: it doesn't attempt to change anything,
  just emit warnings.
  
!  The gimple representation can be seen using '-fdump-ipa-analyzer'.
       Tip: If the analyzer ICEs before this is written out, one
!      workaround is to use '--param=analyzer-bb-explosion-factor=0' to
       force the analyzer to bail out after analyzing the first basic
       block.
  
!  First, we build a 'supergraph' which combines the callgraph and all of
  the CFGs into a single directed graph, with both interprocedural and
  intraprocedural edges.  The nodes and edges in the supergraph are called
! "supernodes" and "superedges", and often referred to in code as 'snodes'
! and 'sedges'.  Basic blocks in the CFGs are split at interprocedural
  calls, so there can be more than one supernode per basic block.  Most
  statements will be in just one supernode, but a call statement can
  appear in two supernodes: at the end of one for the call, and again at
  the start of another for the return.
  
!  The supergraph can be seen using '-fdump-analyzer-supergraph'.
  
!  We then build an 'analysis_plan' which walks the callgraph to determine
  which calls might be suitable for being summarized (rather than fully
  explored) and thus in what order to explore the functions.
  
--- 48155,48179 ----
   The implementation is read-only: it doesn't attempt to change anything,
  just emit warnings.
  
!  The gimple representation can be seen using ‘-fdump-ipa-analyzer’.
       Tip: If the analyzer ICEs before this is written out, one
!      workaround is to use ‘--param=analyzer-bb-explosion-factor=0’ to
       force the analyzer to bail out after analyzing the first basic
       block.
  
!  First, we build a ‘supergraph’ which combines the callgraph and all of
  the CFGs into a single directed graph, with both interprocedural and
  intraprocedural edges.  The nodes and edges in the supergraph are called
! "supernodes" and "superedges", and often referred to in code as ‘snodes’
! and ‘sedges’.  Basic blocks in the CFGs are split at interprocedural
  calls, so there can be more than one supernode per basic block.  Most
  statements will be in just one supernode, but a call statement can
  appear in two supernodes: at the end of one for the call, and again at
  the start of another for the return.
  
!  The supergraph can be seen using ‘-fdump-analyzer-supergraph’.
  
!  We then build an ‘analysis_plan’ which walks the callgraph to determine
  which calls might be suitable for being summarized (rather than fully
  explored) and thus in what order to explore the functions.
  
*************** CFG and supergraph, with points (and thu
*** 48207,48213 ****
  for various events, including before individual statements.  By default
  the exploded graph merges multiple consecutive statements in a supernode
  into one exploded edge to minimize the size of the exploded graph.  This
! can be suppressed via '-fanalyzer-fine-grained'.  The fine-grained
  approach seems to make things simpler and more debuggable that other
  approaches I tried, in that each point is responsible for one thing.
  
--- 48208,48214 ----
  for various events, including before individual statements.  By default
  the exploded graph merges multiple consecutive statements in a supernode
  into one exploded edge to minimize the size of the exploded graph.  This
! can be suppressed via ‘-fanalyzer-fine-grained’.  The fine-grained
  approach seems to make things simpler and more debuggable that other
  approaches I tried, in that each point is responsible for one thing.
  
*************** the stack of callsites below them, so th
*** 48216,48238 ****
  correspond to interprocedurally valid paths: we always return to the
  correct call site, propagating state information accordingly.  We avoid
  infinite recursion by stopping the analysis if a callsite appears more
! than 'analyzer-max-recursion-depth' in a callstring (defaulting to 2).
  
  27.1.2 Graphs
  -------------
  
  Nodes and edges in the exploded graph are called "exploded nodes" and
! "exploded edges" and often referred to in the code as 'enodes' and
! 'eedges' (especially when distinguishing them from the 'snodes' and
! 'sedges' in the supergraph).
  
   Each graph numbers its nodes, giving unique identifiers - supernodes
! are referred to throughout dumps in the form 'SN': INDEX' and exploded
! nodes in the form 'EN: INDEX' (e.g.  'SN: 2' and 'EN:29').
  
!  The supergraph can be seen using '-fdump-analyzer-supergraph-graph'.
  
!  The exploded graph can be seen using '-fdump-analyzer-exploded-graph'
  and other dump options.  Exploded nodes are color-coded in the .dot
  output based on state-machine states to make it easier to see state
  changes at a glance.
--- 48217,48239 ----
  correspond to interprocedurally valid paths: we always return to the
  correct call site, propagating state information accordingly.  We avoid
  infinite recursion by stopping the analysis if a callsite appears more
! than ‘analyzer-max-recursion-depth’ in a callstring (defaulting to 2).
  
  27.1.2 Graphs
  -------------
  
  Nodes and edges in the exploded graph are called "exploded nodes" and
! "exploded edges" and often referred to in the code as ‘enodes’ and
! ‘eedges’ (especially when distinguishing them from the ‘snodes’ and
! ‘sedges’ in the supergraph).
  
   Each graph numbers its nodes, giving unique identifiers - supernodes
! are referred to throughout dumps in the form ‘SN': INDEX’ and exploded
! nodes in the form ‘EN: INDEX’ (e.g.  ‘SN: 2’ and ‘EN:29’).
  
!  The supergraph can be seen using ‘-fdump-analyzer-supergraph-graph’.
  
!  The exploded graph can be seen using ‘-fdump-analyzer-exploded-graph’
  and other dump options.  Exploded nodes are color-coded in the .dot
  output based on state-machine states to make it easier to see state
  changes at a glance.
*************** changes at a glance.
*** 48241,48248 ****
  ---------------------
  
  There's a tension between:
!    * precision of analysis in the straight-line case, vs
!    * exponential blow-up in the face of control flow.
  
   For example, in general, given this CFG:
  
--- 48242,48249 ----
  ---------------------
  
  There's a tension between:
!    • precision of analysis in the straight-line case, vs
!    • exponential blow-up in the face of control flow.
  
   For example, in general, given this CFG:
  
*************** exponential growth of the exploded graph
*** 48280,48286 ****
  
    a. state pruning: which tries to discard state that won't be relevant
       later on withing the function.  This can be disabled via
!      '-fno-analyzer-state-purge'.
  
    b. state merging.  We can try to find the commonality between two
       program_state instances to make a third, simpler program_state.  We
--- 48281,48287 ----
  
    a. state pruning: which tries to discard state that won't be relevant
       later on withing the function.  This can be disabled via
!      ‘-fno-analyzer-state-purge’.
  
    b. state merging.  We can try to find the commonality between two
       program_state instances to make a third, simpler program_state.  We
*************** exponential growth of the exploded graph
*** 48344,48374 ****
       where some duplication has occurred, but only for the places where
       the the different paths are worth exploringly separately.
  
!      Merging can be disabled via '-fno-analyzer-state-merge'.
  
  27.1.4 Region Model
  -------------------
  
! Part of the state stored at a 'exploded_node' is a 'region_model'.  This
  is an implementation of the region-based ternary model described in "A
  Memory Model for Static Analysis of C Programs"
  (https://www.researchgate.net/publication/221430855_A_Memory_Model_for_Static_Analysis_of_C_Programs)
  (Zhongxing Xu, Ted Kremenek, and Jian Zhang).
  
!  A 'region_model' encapsulates a representation of the state of memory,
! with a 'store' recording a binding between 'region' instances, to
! 'svalue' instances.  The bindings are organized into clusters, where
  regions accessible via well-defined pointer arithmetic are in the same
  cluster.  The representation is graph-like because values can be
  pointers to regions.  It also stores a constraint_manager, capturing
  relationships between the values.
  
!  Because each node in the 'exploded_graph' has a 'region_model', and
! each of the latter is graph-like, the 'exploded_graph' is in some ways a
  graph of graphs.
  
!  Here's an example of printing a 'program_state', showing the
! 'region_model' within it, along with state for the 'malloc' state
  machine.
  
       (gdb) call debug (*this)
--- 48345,48375 ----
       where some duplication has occurred, but only for the places where
       the the different paths are worth exploringly separately.
  
!      Merging can be disabled via ‘-fno-analyzer-state-merge’.
  
  27.1.4 Region Model
  -------------------
  
! Part of the state stored at a ‘exploded_node’ is a ‘region_model’.  This
  is an implementation of the region-based ternary model described in "A
  Memory Model for Static Analysis of C Programs"
  (https://www.researchgate.net/publication/221430855_A_Memory_Model_for_Static_Analysis_of_C_Programs)
  (Zhongxing Xu, Ted Kremenek, and Jian Zhang).
  
!  A ‘region_model’ encapsulates a representation of the state of memory,
! with a ‘store’ recording a binding between ‘region’ instances, to
! ‘svalue’ instances.  The bindings are organized into clusters, where
  regions accessible via well-defined pointer arithmetic are in the same
  cluster.  The representation is graph-like because values can be
  pointers to regions.  It also stores a constraint_manager, capturing
  relationships between the values.
  
!  Because each node in the ‘exploded_graph’ has a ‘region_model’, and
! each of the latter is graph-like, the ‘exploded_graph’ is in some ways a
  graph of graphs.
  
!  Here's an example of printing a ‘program_state’, showing the
! ‘region_model’ within it, along with state for the ‘malloc’ state
  machine.
  
       (gdb) call debug (*this)
*************** machine.
*** 48384,48391 ****
       malloc:
         0x2e89590: &HEAP_ALLOCATED_REGION(12): unchecked ('ptr_3')
  
!  This is the state at the point of returning from 'calls_malloc' back to
! 'test' in the following:
  
       void *
       calls_malloc (void)
--- 48385,48392 ----
       malloc:
         0x2e89590: &HEAP_ALLOCATED_REGION(12): unchecked ('ptr_3')
  
!  This is the state at the point of returning from ‘calls_malloc’ back to
! ‘test’ in the following:
  
       void *
       calls_malloc (void)
*************** machine.
*** 48400,48421 ****
         /* etc.  */
       }
  
!  Within the store, there is the cluster for 'ptr_3' within the frame for
! 'test', where the whole cluster is bound to a pointer value, pointing at
! 'HEAP_ALLOCATED_REGION(12)'.  Additionally, this pointer has the
! 'unchecked' state for the 'malloc' state machine indicating it hasn't
  yet been checked against NULL since the allocation call.
  
  27.1.5 Analyzer Paths
  ---------------------
  
  We need to explain to the user what the problem is, and to persuade them
! that there really is a problem.  Hence having a 'diagnostic_path' isn't
  just an incidental detail of the analyzer; it's required.
  
   Paths ought to be:
!    * interprocedurally-valid
!    * feasible
  
   Without state-merging, all paths in the exploded graph are feasible (in
  terms of constraints being satisfied).  With state-merging, paths in the
--- 48401,48422 ----
         /* etc.  */
       }
  
!  Within the store, there is the cluster for ‘ptr_3’ within the frame for
! ‘test’, where the whole cluster is bound to a pointer value, pointing at
! ‘HEAP_ALLOCATED_REGION(12)’.  Additionally, this pointer has the
! ‘unchecked’ state for the ‘malloc’ state machine indicating it hasn't
  yet been checked against NULL since the allocation call.
  
  27.1.5 Analyzer Paths
  ---------------------
  
  We need to explain to the user what the problem is, and to persuade them
! that there really is a problem.  Hence having a ‘diagnostic_path’ isn't
  just an incidental detail of the analyzer; it's required.
  
   Paths ought to be:
!    • interprocedurally-valid
!    • feasible
  
   Without state-merging, all paths in the exploded graph are feasible (in
  terms of constraints being satisfied).  With state-merging, paths in the
*************** target node is the shortest possible pat
*** 48450,48456 ****
  shortest possible path, but if that fails, we explore progressively
  longer paths, eventually trying iterations through loops.  The
  exploration is captured in the feasible_graph, which can be dumped as a
! .dot file via '-fdump-analyzer-feasibility' to visualize the
  exploration.  The indices of the feasible nodes show the order in which
  they were created.  We effectively explore the tree of feasible paths in
  order of shortest path until we either find a feasible path to the
--- 48451,48457 ----
  shortest possible path, but if that fails, we explore progressively
  longer paths, eventually trying iterations through loops.  The
  exploration is captured in the feasible_graph, which can be dumped as a
! .dot file via ‘-fdump-analyzer-feasibility’ to visualize the
  exploration.  The indices of the feasible nodes show the order in which
  they were created.  We effectively explore the tree of feasible paths in
  order of shortest path until we either find a feasible path to the
*************** target node, or hit a limit and give up.
*** 48460,48487 ****
  hopefully keeps the complexity manageable.
  
   This algorithm can be disabled (for debugging purposes) via
! '-fno-analyzer-feasibility', which simply uses the shortest path, and
  notes if it is infeasible.
  
!  The above gives us a shortest feasible 'exploded_path' through the
! 'exploded_graph' (a list of 'exploded_edge *').  We use this
! 'exploded_path' to build a 'diagnostic_path' (a list of *events* for the
! diagnostic subsystem) - specifically a 'checker_path'.
  
!  Having built the 'checker_path', we prune it to try to eliminate events
  that aren't relevant, to minimize how much the user has to read.
  
   After pruning, we notify each event in the path of its ID and record
  the IDs of interesting events, allowing for events to refer to other
! events in their descriptions.  The 'pending_diagnostic' class has
  various vfuncs to support emitting more precise descriptions, so that
  e.g.
  
!    * a deref-of-unchecked-malloc diagnostic might use:
              returning possibly-NULL pointer to 'make_obj' from 'allocator'
!      for a 'return_event' to make it clearer how the unchecked value
       moves from callee back to caller
!    * a double-free diagnostic might use:
              second 'free' here; first 'free' was at (3)
       and a use-after-free might use
              use after 'free' here; memory was freed at (2)
--- 48461,48488 ----
  hopefully keeps the complexity manageable.
  
   This algorithm can be disabled (for debugging purposes) via
! ‘-fno-analyzer-feasibility’, which simply uses the shortest path, and
  notes if it is infeasible.
  
!  The above gives us a shortest feasible ‘exploded_path’ through the
! ‘exploded_graph’ (a list of ‘exploded_edge *’).  We use this
! ‘exploded_path’ to build a ‘diagnostic_path’ (a list of *events* for the
! diagnostic subsystem) - specifically a ‘checker_path’.
  
!  Having built the ‘checker_path’, we prune it to try to eliminate events
  that aren't relevant, to minimize how much the user has to read.
  
   After pruning, we notify each event in the path of its ID and record
  the IDs of interesting events, allowing for events to refer to other
! events in their descriptions.  The ‘pending_diagnostic’ class has
  various vfuncs to support emitting more precise descriptions, so that
  e.g.
  
!    • a deref-of-unchecked-malloc diagnostic might use:
              returning possibly-NULL pointer to 'make_obj' from 'allocator'
!      for a ‘return_event’ to make it clearer how the unchecked value
       moves from callee back to caller
!    • a double-free diagnostic might use:
              second 'free' here; first 'free' was at (3)
       and a use-after-free might use
              use after 'free' here; memory was freed at (2)
*************** e.g.
*** 48491,48511 ****
  27.1.6 Limitations
  ------------------
  
!    * Only for C so far
!    * The implementation of call summaries is currently very simplistic.
!    * Lack of function pointer analysis
!    * The constraint-handling code assumes reflexivity in some places
       (that values are equal to themselves), which is not the case for
       NaN. As a simple workaround, constraints on floating-point values
       are currently ignored.
!    * There are various other limitations in the region model (grep for
       TODO/xfail in the testsuite).
!    * The constraint_manager's implementation of transitivity is
       currently too expensive to enable by default and so must be
!      manually enabled via '-fanalyzer-transitivity').
!    * The checkers are currently hardcoded and don't allow for user
       extensibility (e.g.  adding allocate/release pairs).
!    * Although the analyzer's test suite has a proof-of-concept test case
       for LTO, LTO support hasn't had extensive testing.  There are
       various lang-specific things in the analyzer that assume C rather
       than LTO. For example, SSA names are printed to the user in "raw"
--- 48492,48512 ----
  27.1.6 Limitations
  ------------------
  
!    • Only for C so far
!    • The implementation of call summaries is currently very simplistic.
!    • Lack of function pointer analysis
!    • The constraint-handling code assumes reflexivity in some places
       (that values are equal to themselves), which is not the case for
       NaN. As a simple workaround, constraints on floating-point values
       are currently ignored.
!    • There are various other limitations in the region model (grep for
       TODO/xfail in the testsuite).
!    • The constraint_manager's implementation of transitivity is
       currently too expensive to enable by default and so must be
!      manually enabled via ‘-fanalyzer-transitivity’).
!    • The checkers are currently hardcoded and don't allow for user
       extensibility (e.g.  adding allocate/release pairs).
!    • Although the analyzer's test suite has a proof-of-concept test case
       for LTO, LTO support hasn't had extensive testing.  There are
       various lang-specific things in the analyzer that assume C rather
       than LTO. For example, SSA names are printed to the user in "raw"
*************** together:
*** 48531,48568 ****
  
   where:
  
!    * './xgcc -B.' is the usual way to invoke a self-built GCC from
!      within the 'BUILDDIR/gcc' subdirectory.
  
!    * '-S' so that the driver ('./xgcc') invokes 'cc1', but doesn't
       bother running the assembler or linker (since the analyzer runs
!      inside 'cc1').
  
!    * '-fanalyzer' enables the analyzer, obviously.
  
!    * '-wrapper gdb,--args' invokes 'cc1' under the debugger so that I
!      can debug 'cc1' and set breakpoints and step through things.
  
!    * '-fdump-analyzer-stderr' so that the logging interface is enabled
       and goes to stderr, which often gives valuable context into what's
       happening when stepping through the analyzer
  
!    * '-fanalyzer-fine-grained' which splits the effect of every
       statement into its own exploded_node, rather than the default
       (which tries to combine successive stmts to reduce the size of the
       exploded_graph).  This makes it easier to see exactly where a
       particular change happens.
  
!    * '-fdump-ipa-analyzer=stderr' which dumps the GIMPLE IR seen by the
       analyzer pass to stderr
  
   Other useful options:
  
!    * '-fdump-analyzer-exploded-graph' which dumps a 'SRC.eg.dot'
       GraphViz file that I can look at (with python-xdot)
  
!    * '-fdump-analyzer-exploded-nodes-2' which dumps a 'SRC.eg.txt' file
!      containing the full 'exploded_graph'.
  
   Assuming that you have the python support scripts for gdb installed
  (which you should do, it makes debugging GCC much easier), you can use:
--- 48532,48569 ----
  
   where:
  
!    • ‘./xgcc -B.’ is the usual way to invoke a self-built GCC from
!      within the ‘BUILDDIR/gcc’ subdirectory.
  
!    • ‘-S’ so that the driver (‘./xgcc’) invokes ‘cc1’, but doesn't
       bother running the assembler or linker (since the analyzer runs
!      inside ‘cc1’).
  
!    • ‘-fanalyzer’ enables the analyzer, obviously.
  
!    • ‘-wrapper gdb,--args’ invokes ‘cc1’ under the debugger so that I
!      can debug ‘cc1’ and set breakpoints and step through things.
  
!    • ‘-fdump-analyzer-stderr’ so that the logging interface is enabled
       and goes to stderr, which often gives valuable context into what's
       happening when stepping through the analyzer
  
!    • ‘-fanalyzer-fine-grained’ which splits the effect of every
       statement into its own exploded_node, rather than the default
       (which tries to combine successive stmts to reduce the size of the
       exploded_graph).  This makes it easier to see exactly where a
       particular change happens.
  
!    • ‘-fdump-ipa-analyzer=stderr’ which dumps the GIMPLE IR seen by the
       analyzer pass to stderr
  
   Other useful options:
  
!    • ‘-fdump-analyzer-exploded-graph’ which dumps a ‘SRC.eg.dot’
       GraphViz file that I can look at (with python-xdot)
  
!    • ‘-fdump-analyzer-exploded-nodes-2’ which dumps a ‘SRC.eg.txt’ file
!      containing the full ‘exploded_graph’.
  
   Assuming that you have the python support scripts for gdb installed
  (which you should do, it makes debugging GCC much easier), you can use:
*************** together:
*** 48570,48576 ****
       (gdb) break-on-saved-diagnostic
  
   to put a breakpoint at the place where a diagnostic is saved during
! 'exploded_graph' exploration, to see where a particular diagnostic is
  being saved, and:
  
       (gdb) break-on-diagnostic
--- 48571,48577 ----
       (gdb) break-on-saved-diagnostic
  
   to put a breakpoint at the place where a diagnostic is saved during
! ‘exploded_graph’ exploration, to see where a particular diagnostic is
  being saved, and:
  
       (gdb) break-on-diagnostic
*************** The analyzer recognizes various special
*** 48585,48595 ****
  debugging the analyzer, and for use in DejaGnu tests.
  
   The declarations of these functions can be seen in the testsuite in
! 'analyzer-decls.h'.  None of these functions are actually implemented in
! terms of code, merely as 'known_function' subclasses (in
! 'gcc/analyzer/kf-analyzer.cc').
  
! '__analyzer_break'
       Add:
              __analyzer_break ();
       to the source being analyzed to trigger a breakpoint in the
--- 48586,48596 ----
  debugging the analyzer, and for use in DejaGnu tests.
  
   The declarations of these functions can be seen in the testsuite in
! ‘analyzer-decls.h’.  None of these functions are actually implemented in
! terms of code, merely as ‘known_function’ subclasses (in
! ‘gcc/analyzer/kf-analyzer.cc’).
  
! ‘__analyzer_break’
       Add:
              __analyzer_break ();
       to the source being analyzed to trigger a breakpoint in the
*************** terms of code, merely as 'known_function
*** 48597,48603 ****
       in the source, it's much easier to effectively step through the
       program state as it's analyzed.
  
! '__analyzer_describe'
       The analyzer handles:
  
            __analyzer_describe (0, expr);
--- 48598,48604 ----
       in the source, it's much easier to effectively step through the
       program state as it's analyzed.
  
! ‘__analyzer_describe’
       The analyzer handles:
  
            __analyzer_describe (0, expr);
*************** terms of code, merely as 'known_function
*** 48606,48631 ****
       any type), at a verbosity level given by the 1st argument.  This is
       for use when debugging, and may be of use in DejaGnu tests.
  
! '__analyzer_dump'
            __analyzer_dump ();
  
       will dump the copious information about the analyzer's state each
       time it reaches the call in its traversal of the source.
  
! '__analyzer_dump_capacity'
            extern void __analyzer_dump_capacity (const void *ptr);
  
       will emit a warning describing the capacity of the base region of
       the region pointed to by the 1st argument.
  
! '__analyzer_dump_escaped'
            extern void __analyzer_dump_escaped (void);
  
       will emit a warning giving the number of decls that have escaped on
       this analysis path, followed by a comma-separated list of their
       names, in alphabetical order.
  
! '__analyzer_dump_path'
            __analyzer_dump_path ();
  
       will emit a placeholder "note" diagnostic with a path to that call
--- 48607,48632 ----
       any type), at a verbosity level given by the 1st argument.  This is
       for use when debugging, and may be of use in DejaGnu tests.
  
! ‘__analyzer_dump’
            __analyzer_dump ();
  
       will dump the copious information about the analyzer's state each
       time it reaches the call in its traversal of the source.
  
! ‘__analyzer_dump_capacity’
            extern void __analyzer_dump_capacity (const void *ptr);
  
       will emit a warning describing the capacity of the base region of
       the region pointed to by the 1st argument.
  
! ‘__analyzer_dump_escaped’
            extern void __analyzer_dump_escaped (void);
  
       will emit a warning giving the number of decls that have escaped on
       this analysis path, followed by a comma-separated list of their
       names, in alphabetical order.
  
! ‘__analyzer_dump_path’
            __analyzer_dump_path ();
  
       will emit a placeholder "note" diagnostic with a path to that call
*************** terms of code, merely as 'known_function
*** 48633,48640 ****
       useful for writing DejaGnu tests for constraint-tracking and
       feasibility checking.
  
! '__analyzer_dump_exploded_nodes'
!      For every callsite to '__analyzer_dump_exploded_nodes' the analyzer
       will emit a warning after it finished the analysis containing
       information on all of the exploded nodes at that program point.
  
--- 48634,48641 ----
       useful for writing DejaGnu tests for constraint-tracking and
       feasibility checking.
  
! ‘__analyzer_dump_exploded_nodes’
!      For every callsite to ‘__analyzer_dump_exploded_nodes’ the analyzer
       will emit a warning after it finished the analysis containing
       information on all of the exploded nodes at that program point.
  
*************** terms of code, merely as 'known_function
*** 48651,48658 ****
  
       it will also dump all of the states within the "processed" nodes.
  
! '__analyzer_dump_named_constant'
!      When the analyzer sees a call to '__analyzer_dump_named_constant'
       it will emit a warning describing what is known about the value of
       a given named constant, for parts of the analyzer that interact
       with target headers.
--- 48652,48659 ----
  
       it will also dump all of the states within the "processed" nodes.
  
! ‘__analyzer_dump_named_constant’
!      When the analyzer sees a call to ‘__analyzer_dump_named_constant’
       it will emit a warning describing what is known about the value of
       a given named constant, for parts of the analyzer that interact
       with target headers.
*************** terms of code, merely as 'known_function
*** 48665,48675 ****
  
            warning: named constant 'O_RDONLY' has value '1'
  
! '__analyzer_dump_region_model'
               __analyzer_dump_region_model ();
       will dump the region_model's state to stderr.
  
! '__analyzer_dump_state'
            __analyzer_dump_state ("malloc", ptr);
  
       will emit a warning describing the state of the 2nd argument (which
--- 48666,48676 ----
  
            warning: named constant 'O_RDONLY' has value '1'
  
! ‘__analyzer_dump_region_model’
               __analyzer_dump_region_model ();
       will dump the region_model's state to stderr.
  
! ‘__analyzer_dump_state’
            __analyzer_dump_state ("malloc", ptr);
  
       will emit a warning describing the state of the 2nd argument (which
*************** terms of code, merely as 'known_function
*** 48677,48693 ****
       matching the 1st argument (which must be a string literal).  This
       is for use when debugging, and may be of use in DejaGnu tests.
  
! '__analyzer_eval'
            __analyzer_eval (expr);
       will emit a warning with text "TRUE", FALSE" or "UNKNOWN" based on
       the truthfulness of the argument.  This is useful for writing
       DejaGnu tests.
  
! '__analyzer_get_unknown_ptr'
            __analyzer_get_unknown_ptr ();
!      will obtain an unknown 'void *'.
  
! '__analyzer_get_strlen'
            __analyzer_get_strlen (buf);
       will emit a warning if PTR doesn't point to a null-terminated
       string.  TODO: eventually get the strlen of the buffer (without the
--- 48678,48694 ----
       matching the 1st argument (which must be a string literal).  This
       is for use when debugging, and may be of use in DejaGnu tests.
  
! ‘__analyzer_eval’
            __analyzer_eval (expr);
       will emit a warning with text "TRUE", FALSE" or "UNKNOWN" based on
       the truthfulness of the argument.  This is useful for writing
       DejaGnu tests.
  
! ‘__analyzer_get_unknown_ptr’
            __analyzer_get_unknown_ptr ();
!      will obtain an unknown ‘void *’.
  
! ‘__analyzer_get_strlen’
            __analyzer_get_strlen (buf);
       will emit a warning if PTR doesn't point to a null-terminated
       string.  TODO: eventually get the strlen of the buffer (without the
*************** terms of code, merely as 'known_function
*** 48697,48724 ****
  ---------------------------------
  
  To compare two different exploded graphs, try
! '-fdump-analyzer-exploded-nodes-2 -fdump-noaddr
! -fanalyzer-fine-grained'.  This will dump a 'SRC.eg.txt' file containing
! the full 'exploded_graph'.  I use 'diff -u50 -p' to compare two
  different such files (e.g.  before and after a patch) to find the first
! place where the two graphs diverge.  The option '-fdump-noaddr' will
  suppress printing pointers withihn the dumps (which would otherwise hide
  the real differences with irrelevent churn).
  
!  The option '-fdump-analyzer-json' will dump both the supergraph and the
  exploded graph in compressed JSON form.
  
   One approach when tracking down where a particular bogus state is
! introduced into the 'exploded_graph' is to add custom code to
! 'program_state::validate'.
  
!  The debug function 'region::is_named_decl_p' can be used when
  debugging, such as for assertions and conditional breakpoints.  For
  example, when tracking down a bug in handling a decl called
! 'yy_buffer_stack', I temporarily added a:
         gcc_assert (!m_base_region->is_named_decl_p ("yy_buffer_stack"));
!  to 'binding_cluster::mark_as_escaped' to trap a point where
! 'yy_buffer_stack' was mistakenly being treated as having escaped.
  
  
  File: gccint.info,  Node: User Experience Guidelines,  Next: Funding,  Prev: Static Analyzer,  Up: Top
--- 48698,48725 ----
  ---------------------------------
  
  To compare two different exploded graphs, try
! ‘-fdump-analyzer-exploded-nodes-2 -fdump-noaddr
! -fanalyzer-fine-grained’.  This will dump a ‘SRC.eg.txt’ file containing
! the full ‘exploded_graph’.  I use ‘diff -u50 -p’ to compare two
  different such files (e.g.  before and after a patch) to find the first
! place where the two graphs diverge.  The option ‘-fdump-noaddr’ will
  suppress printing pointers withihn the dumps (which would otherwise hide
  the real differences with irrelevent churn).
  
!  The option ‘-fdump-analyzer-json’ will dump both the supergraph and the
  exploded graph in compressed JSON form.
  
   One approach when tracking down where a particular bogus state is
! introduced into the ‘exploded_graph’ is to add custom code to
! ‘program_state::validate’.
  
!  The debug function ‘region::is_named_decl_p’ can be used when
  debugging, such as for assertions and conditional breakpoints.  For
  example, when tracking down a bug in handling a decl called
! ‘yy_buffer_stack’, I temporarily added a:
         gcc_assert (!m_base_region->is_named_decl_p ("yy_buffer_stack"));
!  to ‘binding_cluster::mark_as_escaped’ to trap a point where
! ‘yy_buffer_stack’ was mistakenly being treated as having escaped.
  
  
  File: gccint.info,  Node: User Experience Guidelines,  Next: Funding,  Prev: Static Analyzer,  Up: Top
*************** source language, rather than GCC's own i
*** 48759,48765 ****
  28.1.2 Diagnostics are actionable
  ---------------------------------
  
! A good diagnostic is "actionable": it should assist the user in taking
  action.
  
   Consider what an end user will want to do when encountering a
--- 48760,48766 ----
  28.1.2 Diagnostics are actionable
  ---------------------------------
  
! A good diagnostic is “actionable”: it should assist the user in taking
  action.
  
   Consider what an end user will want to do when encountering a
*************** diagnostic.
*** 48769,48777 ****
  
   Given a warning, an end user will think:
  
!    * "Is this a real problem?"
!    * "Do I care?"
!    * if they decide it's genuine: "How do I fix this?"
  
   A good diagnostic provides pertinent information to allow the user to
  easily answer the above questions.
--- 48770,48778 ----
  
   Given a warning, an end user will think:
  
!    • "Is this a real problem?"
!    • "Do I care?"
!    • if they decide it's genuine: "How do I fix this?"
  
   A good diagnostic provides pertinent information to allow the user to
  easily answer the above questions.
*************** A perfect compiler would issue a warning
*** 48783,48791 ****
  source code that ought to be fixed, and issue no other warnings.
  Naturally, this ideal is impossible to achieve.
  
!  Warnings should have a good "signal-to-noise ratio": we should have few
! "false positives" (falsely issuing a warning when no warning is
! warranted) and few "false negatives" (failing to issue a warning when
  one _is_ justified).
  
   Note that a false positive can mean, in practice, a warning that the
--- 48784,48792 ----
  source code that ought to be fixed, and issue no other warnings.
  Naturally, this ideal is impossible to achieve.
  
!  Warnings should have a good “signal-to-noise ratio”: we should have few
! “false positives” (falsely issuing a warning when no warning is
! warranted) and few “false negatives” (failing to issue a warning when
  one _is_ justified).
  
   Note that a false positive can mean, in practice, a warning that the
*************** against overloading the user with irrele
*** 48799,48812 ****
  
  GCC is typically used in two different ways:
  
!    * Semi-interactive usage: GCC is used as a development tool when the
       user is writing code, as the "compile" part of the
       "edit-compile-debug" cycle.  The user is actively hacking on the
       code themself (perhaps a project they wrote, or someone else's),
       where they just made a change to the code and want to see what
       happens, and to be warned about mistakes.
  
!    * Batch rebuilds: where the user is recompiling one or more existing
       packages, and GCC is a detail that's being invoked by various build
       scripts.  Examples include a user trying to bring up an operating
       system consisting of hundreds of packages on a new CPU
--- 48800,48813 ----
  
  GCC is typically used in two different ways:
  
!    • Semi-interactive usage: GCC is used as a development tool when the
       user is writing code, as the "compile" part of the
       "edit-compile-debug" cycle.  The user is actively hacking on the
       code themself (perhaps a project they wrote, or someone else's),
       where they just made a change to the code and want to see what
       happens, and to be warned about mistakes.
  
!    • Batch rebuilds: where the user is recompiling one or more existing
       packages, and GCC is a detail that's being invoked by various build
       scripts.  Examples include a user trying to bring up an operating
       system consisting of hundreds of packages on a new CPU
*************** problem is.  For example, the vaguely-wo
*** 48831,48837 ****
  doesn't tell the user why the attribute was ignored, or what kind of
  entity the compiler thought the attribute was being applied to (the
  source location for the diagnostic is also poor; *note discussion of
! 'input_location': input_location_example.).  A better message would be:
  
       demo.c:1:24: warning: attribute 'noinline' on variable 'foo' was
          ignored [-Wattributes]
--- 48832,48838 ----
  doesn't tell the user why the attribute was ignored, or what kind of
  entity the compiler thought the attribute was being applied to (the
  source location for the diagnostic is also poor; *note discussion of
! ‘input_location’: input_location_example.).  A better message would be:
  
       demo.c:1:24: warning: attribute 'noinline' on variable 'foo' was
          ignored [-Wattributes]
*************** what it doesn't complain about.
*** 48861,48883 ****
  
  Many diagnostics relate to a mismatch between two different places in
  the user's source code.  Examples include:
!    * a type mismatch, where the type at a usage site does not match the
       type at a declaration
  
!    * the argument count at a call site does not match the parameter
       count at the declaration
  
!    * something is erroneously duplicated (e.g. an error, due to breaking
       a uniqueness requirement, or a warning, if it's suggestive of a
       bug)
  
!    * an "opened" syntactic construct (such as an open-parenthesis) is
       not closed
  
   In each case, the diagnostic should indicate *both* pertinent locations
  (so that the user can easily see the problem and how to fix it).
  
!  The standard way to do this is with a note (via 'inform').  For
  example:
  
         auto_diagnostic_group d;
--- 48862,48884 ----
  
  Many diagnostics relate to a mismatch between two different places in
  the user's source code.  Examples include:
!    • a type mismatch, where the type at a usage site does not match the
       type at a declaration
  
!    • the argument count at a call site does not match the parameter
       count at the declaration
  
!    • something is erroneously duplicated (e.g. an error, due to breaking
       a uniqueness requirement, or a warning, if it's suggestive of a
       bug)
  
!    • an "opened" syntactic construct (such as an open-parenthesis) is
       not closed
  
   In each case, the diagnostic should indicate *both* pertinent locations
  (so that the user can easily see the problem and how to fix it).
  
!  The standard way to do this is with a note (via ‘inform’).  For
  example:
  
         auto_diagnostic_group d;
*************** which leads to:
*** 48895,48907 ****
           3 |   if (flag > 3)
             |       ~~~~~^~~
  
! The 'inform' call should be guarded by the return value from the
! 'warning_at' call so that the note isn't emitted when the warning is
  suppressed.
  
   For cases involving punctuation where the locations might be near each
  other, they can be conditionally consolidated via
! 'gcc_rich_location::add_location_if_nearby':
  
           auto_diagnostic_group d;
           gcc_rich_location richloc (primary_loc);
--- 48896,48908 ----
           3 |   if (flag > 3)
             |       ~~~~~^~~
  
! The ‘inform’ call should be guarded by the return value from the
! ‘warning_at’ call so that the note isn't emitted when the warning is
  suppressed.
  
   For cases involving punctuation where the locations might be near each
  other, they can be conditionally consolidated via
! ‘gcc_rich_location::add_location_if_nearby’:
  
           auto_diagnostic_group d;
           gcc_rich_location richloc (primary_loc);
*************** or two diagnostics:
*** 48927,48937 ****
  28.1.8 Location Information
  ---------------------------
  
! GCC's 'location_t' type can support both ordinary locations, and
  locations relating to a macro expansion.
  
   As of GCC 6, ordinary locations changed from supporting just a point in
! the user's source code to supporting three points: the "caret" location,
  plus a start and a finish:
  
             a = foo && bar;
--- 48928,48938 ----
  28.1.8 Location Information
  ---------------------------
  
! GCC's ‘location_t’ type can support both ordinary locations, and
  locations relating to a macro expansion.
  
   As of GCC 6, ordinary locations changed from supporting just a point in
! the user's source code to supporting three points: the “caret” location,
  plus a start and a finish:
  
             a = foo && bar;
*************** plus a start and a finish:
*** 48941,48948 ****
                 |   caret
                 start
  
!  Tokens coming out of libcpp have locations of the form 'caret ==
! start', such as for 'foo' here:
  
             a = foo && bar;
                 ^~~
--- 48942,48949 ----
                 |   caret
                 start
  
!  Tokens coming out of libcpp have locations of the form ‘caret ==
! start’, such as for ‘foo’ here:
  
             a = foo && bar;
                 ^~~
*************** start', such as for 'foo' here:
*** 48953,48959 ****
   Compound expressions should be reported using the location of the
  expression as a whole, rather than just of one token within it.
  
!  For example, in '-Wformat', rather than underlining just the first
  token of a bad argument:
  
          printf("hello %i %s", (long)0, "world");
--- 48954,48960 ----
   Compound expressions should be reported using the location of the
  expression as a whole, rather than just of one token within it.
  
!  For example, in ‘-Wformat’, rather than underlining just the first
  token of a bad argument:
  
          printf("hello %i %s", (long)0, "world");
*************** easily identify what is being referred t
*** 48967,48980 ****
                        ~^      ~~~~~~~
                        %li
  
!  Avoid using the 'input_location' global, and the diagnostic functions
! that implicitly use it--use 'error_at' and 'warning_at' rather than
! 'error' and 'warning', and provide the most appropriate 'location_t'
  value available at that phase of the compilation.  It's possible to
! supply secondary 'location_t' values via 'rich_location'.
  
  For example, in the example of imprecise wording above, generating the
! diagnostic using 'warning':
  
         // BAD: implicitly uses input_location
         warning (OPT_Wattributes, "%qE attribute ignored", name);
--- 48968,48981 ----
                        ~^      ~~~~~~~
                        %li
  
!  Avoid using the ‘input_location’ global, and the diagnostic functions
! that implicitly use it--use ‘error_at’ and ‘warning_at’ rather than
! ‘error’ and ‘warning’, and provide the most appropriate ‘location_t’
  value available at that phase of the compilation.  It's possible to
! supply secondary ‘location_t’ values via ‘rich_location’.
  
  For example, in the example of imprecise wording above, generating the
! diagnostic using ‘warning’:
  
         // BAD: implicitly uses input_location
         warning (OPT_Wattributes, "%qE attribute ignored", name);
*************** leads to:
*** 48986,48993 ****
           1 | int foo __attribute__((noinline));
             | ^~~
  
! which thus happened to use the location of the 'int' token, rather than
! that of the attribute.  Using 'warning_at' with the location of the
  attribute, providing the location of the declaration in question as a
  secondary location, and adding a note:
  
--- 48987,48994 ----
           1 | int foo __attribute__((noinline));
             | ^~~
  
! which thus happened to use the location of the ‘int’ token, rather than
! that of the attribute.  Using ‘warning_at’ with the location of the
  attribute, providing the location of the declaration in question as a
  secondary location, and adding a note:
  
*************** See the diagnostics section
*** 49014,49023 ****
  (https://gcc.gnu.org/codingconventions.html#Diagnostics) of the GCC
  coding conventions.
  
!  In the C++ front end, when comparing two types in a message, use '%H'
! and '%I' rather than '%T', as this allows the diagnostics subsystem to
  highlight differences between template-based types.  For example, rather
! than using '%qT':
  
         // BAD: a pair of %qT used in C++ front end for type comparison
         error_at (loc, "could not convert %qE from %qT to %qT", expr,
--- 49015,49024 ----
  (https://gcc.gnu.org/codingconventions.html#Diagnostics) of the GCC
  coding conventions.
  
!  In the C++ front end, when comparing two types in a message, use ‘%H’
! and ‘%I’ rather than ‘%T’, as this allows the diagnostics subsystem to
  highlight differences between template-based types.  For example, rather
! than using ‘%qT’:
  
         // BAD: a pair of %qT used in C++ front end for type comparison
         error_at (loc, "could not convert %qE from %qT to %qT", expr,
*************** which could lead to:
*** 49028,49034 ****
       error: could not convert 'map<int, double>()' from 'map<int,double>'
          to 'map<int,int>'
  
! using '%H' and '%I' (via '%qH' and '%qI'):
  
         // OK: compare types in C++ front end via %qH and %qI
         error_at (loc, "could not convert %qE from %qH to %qI", expr,
--- 49029,49035 ----
       error: could not convert 'map<int, double>()' from 'map<int,double>'
          to 'map<int,int>'
  
! using ‘%H’ and ‘%I’ (via ‘%qH’ and ‘%qI’):
  
         // OK: compare types in C++ front end via %qH and %qI
         error_at (loc, "could not convert %qE from %qH to %qI", expr,
*************** allows the above output to be simplified
*** 49039,49073 ****
       error: could not convert 'map<int, double>()' from 'map<[...],double>'
          to 'map<[...],int>'
  
! where the 'double' and 'int' are colorized to highlight them.
  
  28.1.10 Group logically-related diagnostics
  -------------------------------------------
  
! Use 'auto_diagnostic_group' when issuing multiple related diagnostics
  (seen in various examples on this page).  This informs the diagnostic
  subsystem that all diagnostics issued within the lifetime of the
! 'auto_diagnostic_group' are related.  For example,
! '-fdiagnostics-format=json' will treat the first diagnostic emitted
  within the group as a top-level diagnostic, and all subsequent
  diagnostics within the group as its children.
  
  28.1.11 Quoting
  ---------------
  
! Text should be quoted by either using the 'q' modifier in a directive
! such as '%qE', or by enclosing the quoted text in a pair of '%<' and
! '%>' directives, and never by using explicit quote characters.  The
  directives handle the appropriate quote characters for each language and
  apply the correct color or highlighting.
  
   The following elements should be quoted in GCC diagnostics:
  
!    * Language keywords.
!    * Tokens.
!    * Boolean, numerical, character, and string constants that appear in
       the source code.
!    * Identifiers, including function, macro, type, and variable names.
  
   Other elements such as numbers that do not refer to numeric constants
  that appear in the source code should not be quoted.  For example, in
--- 49040,49074 ----
       error: could not convert 'map<int, double>()' from 'map<[...],double>'
          to 'map<[...],int>'
  
! where the ‘double’ and ‘int’ are colorized to highlight them.
  
  28.1.10 Group logically-related diagnostics
  -------------------------------------------
  
! Use ‘auto_diagnostic_group’ when issuing multiple related diagnostics
  (seen in various examples on this page).  This informs the diagnostic
  subsystem that all diagnostics issued within the lifetime of the
! ‘auto_diagnostic_group’ are related.  For example,
! ‘-fdiagnostics-format=json’ will treat the first diagnostic emitted
  within the group as a top-level diagnostic, and all subsequent
  diagnostics within the group as its children.
  
  28.1.11 Quoting
  ---------------
  
! Text should be quoted by either using the ‘q’ modifier in a directive
! such as ‘%qE’, or by enclosing the quoted text in a pair of ‘%<’ and
! ‘%>’ directives, and never by using explicit quote characters.  The
  directives handle the appropriate quote characters for each language and
  apply the correct color or highlighting.
  
   The following elements should be quoted in GCC diagnostics:
  
!    • Language keywords.
!    • Tokens.
!    • Boolean, numerical, character, and string constants that appear in
       the source code.
!    • Identifiers, including function, macro, type, and variable names.
  
   Other elements such as numbers that do not refer to numeric constants
  that appear in the source code should not be quoted.  For example, in
*************** of the GCC coding conventions.
*** 49088,49111 ****
  28.1.13 Fix-it hints
  --------------------
  
! GCC's diagnostic subsystem can emit "fix-it hints": small suggested
  edits to the user's source code.
  
   They are printed by default underneath the code in question.  They can
! also be viewed via '-fdiagnostics-generate-patch' and
! '-fdiagnostics-parseable-fixits'.  With the latter, an IDE ought to be
  able to offer to automatically apply the suggested fix.
  
   Fix-it hints contain code fragments, and thus they should not be marked
  for translation.
  
!  Fix-it hints can be added to a diagnostic by using a 'rich_location'
! rather than a 'location_t' - the fix-it hints are added to the
! 'rich_location' using one of the various 'add_fixit' member functions of
! 'rich_location'.  They are documented with 'rich_location' in
! 'libcpp/line-map.h'.  It's easiest to use the 'gcc_rich_location'
! subclass of 'rich_location' found in 'gcc-rich-location.h', as this
! implicitly supplies the 'line_table' variable.
  
   For example:
  
--- 49089,49112 ----
  28.1.13 Fix-it hints
  --------------------
  
! GCC's diagnostic subsystem can emit “fix-it hints”: small suggested
  edits to the user's source code.
  
   They are printed by default underneath the code in question.  They can
! also be viewed via ‘-fdiagnostics-generate-patch’ and
! ‘-fdiagnostics-parseable-fixits’.  With the latter, an IDE ought to be
  able to offer to automatically apply the suggested fix.
  
   Fix-it hints contain code fragments, and thus they should not be marked
  for translation.
  
!  Fix-it hints can be added to a diagnostic by using a ‘rich_location’
! rather than a ‘location_t’ - the fix-it hints are added to the
! ‘rich_location’ using one of the various ‘add_fixit’ member functions of
! ‘rich_location’.  They are documented with ‘rich_location’ in
! ‘libcpp/line-map.h’.  It's easiest to use the ‘gcc_rich_location’
! subclass of ‘rich_location’ found in ‘gcc-rich-location.h’, as this
! implicitly supplies the ‘line_table’ variable.
  
   For example:
  
*************** which can lead to:
*** 49127,49148 ****
             | signed
  
   Non-trivial edits can be built up by adding multiple fix-it hints to
! one 'rich_location'.  It's best to express the edits in terms of the
  locations of individual tokens.  Various handy functions for adding
  fix-it hints for idiomatic C and C++ can be seen in
! 'gcc-rich-location.h'.
  
  28.1.13.1 Fix-it hints should work
  ..................................
  
  When implementing a fix-it hint, please verify that the suggested edit
  leads to fixed, compilable code.  (Unfortunately, this currently must be
! done by hand using '-fdiagnostics-generate-patch'.  It would be good to
  have an automated way of verifying that fix-it hints actually fix the
  code).
  
   For example, a "gotcha" here is to forget to add a space when adding a
! missing reserved word.  Consider a C++ fix-it hint that adds 'typename'
  in front of a template declaration.  A naive way to implement this might
  be:
  
--- 49128,49149 ----
             | signed
  
   Non-trivial edits can be built up by adding multiple fix-it hints to
! one ‘rich_location’.  It's best to express the edits in terms of the
  locations of individual tokens.  Various handy functions for adding
  fix-it hints for idiomatic C and C++ can be seen in
! ‘gcc-rich-location.h’.
  
  28.1.13.1 Fix-it hints should work
  ..................................
  
  When implementing a fix-it hint, please verify that the suggested edit
  leads to fixed, compilable code.  (Unfortunately, this currently must be
! done by hand using ‘-fdiagnostics-generate-patch’.  It would be good to
  have an automated way of verifying that fix-it hints actually fix the
  code).
  
   For example, a "gotcha" here is to forget to add a space when adding a
! missing reserved word.  Consider a C++ fix-it hint that adds ‘typename’
  in front of a template declaration.  A naive way to implement this might
  be:
  
*************** being "corrected" to:
*** 49162,49168 ****
       typenameT::type x;
  
  In this case, the correct thing to do is to add a trailing space after
! 'typename':
  
       gcc_rich_location richloc (loc);
       // OK: note that here we have a trailing space
--- 49163,49169 ----
       typenameT::type x;
  
  In this case, the correct thing to do is to add a trailing space after
! ‘typename’:
  
       gcc_rich_location richloc (loc);
       // OK: note that here we have a trailing space
*************** this:
*** 49189,49195 ****
           warning_at (&richloc, OPT_Wredundant_move,
                       "redundant move in return statement");
  
! which is intended to e.g. replace a 'std::move' with the underlying
  value:
  
          return std::move (retval);
--- 49190,49196 ----
           warning_at (&richloc, OPT_Wredundant_move,
                       "redundant move in return statement");
  
! which is intended to e.g. replace a ‘std::move’ with the underlying
  value:
  
          return std::move (retval);
*************** and thus this resulting code:
*** 49223,49229 ****
          return global_a;
  
  It's better to do deletions in terms of deletions; deleting the
! 'std::move (' and the trailing close-paren, leading to this:
  
          return std::move (CONFIGURY_GLOBAL /* some comment */);
                 ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- 49224,49230 ----
          return global_a;
  
  It's better to do deletions in terms of deletions; deleting the
! ‘std::move (’ and the trailing close-paren, leading to this:
  
          return std::move (CONFIGURY_GLOBAL /* some comment */);
                 ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*************** and thus this result:
*** 49233,49239 ****
  
          return CONFIGURY_GLOBAL /* some comment */;
  
! Unfortunately, the pertinent 'location_t' values are not always
  available.
  
  28.1.13.3 Multiple suggestions
--- 49234,49240 ----
  
          return CONFIGURY_GLOBAL /* some comment */;
  
! Unfortunately, the pertinent ‘location_t’ values are not always
  available.
  
  28.1.13.3 Multiple suggestions
*************** available.
*** 49241,49249 ****
  
  In the rare cases where you need to suggest more than one mutually
  exclusive solution to a problem, this can be done by emitting multiple
! notes and calling 'rich_location::fixits_cannot_be_auto_applied' on each
! note's 'rich_location'.  If this is called, then the fix-it hints in the
! 'rich_location' will be printed, but will not be added to generated
  patches.
  
  
--- 49242,49250 ----
  
  In the rare cases where you need to suggest more than one mutually
  exclusive solution to a problem, this can be done by emitting multiple
! notes and calling ‘rich_location::fixits_cannot_be_auto_applied’ on each
! note's ‘rich_location’.  If this is called, then the fix-it hints in the
! ‘rich_location’ will be printed, but will not be added to generated
  patches.
  
  
*************** more; major new features or packages con
*** 49298,49304 ****
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright (C) 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
--- 49299,49305 ----
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright © 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
*************** GNU General Public License
*** 49327,49333 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 49328,49334 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 50014,50024 ****
  like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!  The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 50015,50025 ----
  like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!  The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** GNU Free Documentation License
*** 50043,50049 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 50044,50050 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 50052,50058 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 50053,50059 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** Any omissions in this list are accidenta
*** 50530,50914 ****
  out or some of your contributions are not listed.  Please keep this list
  in alphabetical order.
  
!    * Analog Devices helped implement the support for complex data types
       and iterators.
  
!    * John David Anglin for threading-related fixes and improvements to
       libstdc++-v3, and the HP-UX port.
  
!    * James van Artsdalen wrote the code that makes efficient use of the
       Intel 80387 register stack.
  
!    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
       Series port.
  
!    * Alasdair Baird for various bug fixes.
  
!    * Giovanni Bajo for analyzing lots of complicated C++ problem
       reports.
  
!    * Peter Barada for his work to improve code generation for new
       ColdFire cores.
  
!    * Gerald Baumgartner added the signature extension to the C++ front
       end.
  
!    * Godmar Back for his Java improvements and encouragement.
  
!    * Scott Bambrough for help porting the Java compiler.
  
!    * Wolfgang Bangerth for processing tons of bug reports.
  
!    * Jon Beniston for his Microsoft Windows port of Java and port to
       Lattice Mico32.
  
!    * Daniel Berlin for better DWARF 2 support, faster/better
       optimizations, improved alias analysis, plus migrating GCC to
       Bugzilla.
  
!    * Geoff Berry for his Java object serialization work and various
       patches.
  
!    * David Binderman tests weekly snapshots of GCC trunk against Fedora
       Rawhide for several architectures.
  
!    * Laurynas Biveinis for memory management work and DJGPP port fixes.
  
!    * Uros Bizjak for the implementation of x87 math built-in functions
       and for various middle end and i386 back end improvements and bug
       fixes.
  
!    * Eric Blake for helping to make GCJ and libgcj conform to the
       specifications.
  
!    * Janne Blomqvist for contributions to GNU Fortran.
  
!    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
       other Java work.
  
!    * Segher Boessenkool for helping maintain the PowerPC port and the
       instruction combiner plus various contributions to the middle end.
  
!    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
       miscellaneous clean-ups.
  
!    * Steven Bosscher for integrating the GNU Fortran front end into GCC
       and for contributing to the tree-ssa branch.
  
!    * Eric Botcazou for fixing middle- and backend bugs left and right.
  
!    * Per Bothner for his direction via the steering committee and
       various improvements to the infrastructure for supporting new
       languages.  Chill front end implementation.  Initial
       implementations of cpplib, fix-header, config.guess, libio, and
       past C++ library (libg++) maintainer.  Dreaming up, designing and
       implementing much of GCJ.
  
!    * Devon Bowen helped port GCC to the Tahoe.
  
!    * Don Bowman for mips-vxworks contributions.
  
!    * James Bowman for the FT32 port.
  
!    * Dave Brolley for work on cpplib and Chill.
  
!    * Paul Brook for work on the ARM architecture and maintaining GNU
       Fortran.
  
!    * Robert Brown implemented the support for Encore 32000 systems.
  
!    * Christian Bruel for improvements to local store elimination.
  
!    * Herman A.J. ten Brugge for various fixes.
  
!    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
       FAQ.
  
!    * Joe Buck for his direction via the steering committee from its
       creation to 2013.
  
!    * Iain Buclaw for the D frontend.
  
!    * Craig Burley for leadership of the G77 Fortran effort.
  
!    * Tobias Burnus for contributions to GNU Fortran.
  
!    * Stephan Buys for contributing Doxygen notes for libstdc++.
  
!    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
       to the C++ strings, streambufs and formatted I/O, hard detective
       work on the frustrating localization issues, and keeping up with
       the problem reports.
  
!    * John Carr for his alias work, SPARC hacking, infrastructure
       improvements, previous contributions to the steering committee,
       loop optimizations, etc.
  
!    * Stephane Carrez for 68HC11 and 68HC12 ports.
  
!    * Steve Chamberlain for support for the Renesas SH and H8 processors
       and the PicoJava processor, and for GCJ config fixes.
  
!    * Glenn Chambers for help with the GCJ FAQ.
  
!    * John-Marc Chandonia for various libgcj patches.
  
!    * Denis Chertykov for contributing and maintaining the AVR port, the
       first GCC port for an 8-bit architecture.
  
!    * Kito Cheng for his work on the RISC-V port, including bringing up
       the test suite and maintenance.
  
!    * Scott Christley for his Objective-C contributions.
  
!    * Eric Christopher for his Java porting help and clean-ups.
  
!    * Branko Cibej for more warning contributions.
  
!    * The GNU Classpath project for all of their merged runtime code.
  
!    * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
!      '--help', and other random hacking.
  
!    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
  
!    * R. Kelley Cook for making GCC buildable from a read-only directory
       as well as other miscellaneous build process and documentation
       clean-ups.
  
!    * Ralf Corsepius for SH testing and minor bug fixing.
  
!    * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
  
!    * Stan Cox for care and feeding of the x86 port and lots of behind
       the scenes hacking.
  
!    * Alex Crain provided changes for the 3b1.
  
!    * Ian Dall for major improvements to the NS32k port.
  
!    * Paul Dale for his work to add uClinux platform support to the m68k
       backend.
  
!    * Palmer Dabbelt for his work maintaining the RISC-V port.
  
!    * Dario Dariol contributed the four varieties of sample programs that
       print a copy of their source.
  
!    * Russell Davidson for fstream and stringstream fixes in libstdc++.
  
!    * Bud Davis for work on the G77 and GNU Fortran compilers.
  
!    * Mo DeJong for GCJ and libgcj bug fixes.
  
!    * Jerry DeLisle for contributions to GNU Fortran.
  
!    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
       various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
  
!    * Arnaud Desitter for helping to debug GNU Fortran.
  
!    * Gabriel Dos Reis for contributions to G++, contributions and
       maintenance of GCC diagnostics infrastructure, libstdc++-v3,
!      including 'valarray<>', 'complex<>', maintaining the numerics
!      library (including that pesky '<limits>' :-) and keeping up-to-date
       anything to do with numbers.
  
!    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
       ISO C99 support, CFG dumping support, etc., plus support of the C++
       runtime libraries including for all kinds of C interface issues,
!      contributing and maintaining 'complex<>', sanity checking and
       disbursement, configuration architecture, libio maintenance, and
       early math work.
  
!    * Franc,ois Dumont for his work on libstdc++-v3, especially
!      maintaining and improving 'debug-mode' and associative and
       unordered containers.
  
!    * Zdenek Dvorak for a new loop unroller and various fixes.
  
!    * Michael Eager for his work on the Xilinx MicroBlaze port.
  
!    * Richard Earnshaw for his ongoing work with the ARM.
  
!    * David Edelsohn for his direction via the steering committee,
       ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
       loop changes, doing the entire AIX port of libstdc++ with his bare
       hands, and for ensuring GCC properly keeps working on AIX.
  
!    * Kevin Ediger for the floating point formatting of num_put::do_put
       in libstdc++.
  
!    * Phil Edwards for libstdc++ work including configuration hackery,
       documentation maintainer, chief breaker of the web pages, the
       occasional iostream bug fix, and work on shared library symbol
       versioning.
  
!    * Paul Eggert for random hacking all over GCC.
  
!    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
       configuration support for locales and fstream-related fixes.
  
!    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
       iostreams.
  
!    * Christian Ehrhardt for dealing with bug reports.
  
!    * Ben Elliston for his work to move the Objective-C runtime into its
       own subdirectory and for his work on autoconf.
  
!    * Revital Eres for work on the PowerPC 750CL port.
  
!    * Marc Espie for OpenBSD support.
  
!    * Doug Evans for much of the global optimization framework, arc,
       m32r, and SPARC work.
  
!    * Christopher Faylor for his work on the Cygwin port and for caring
       and feeding the gcc.gnu.org box and saving its users tons of spam.
  
!    * Fred Fish for BeOS support and Ada fixes.
  
!    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
  
!    * Peter Gerwinski for various bug fixes and the Pascal front end.
  
!    * Kaveh R. Ghazi for his direction via the steering committee,
!      amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
       on a plethora of platforms.  Kaveh extends his gratitude to the
       CAIP Center at Rutgers University for providing him with computing
       resources to work on Free Software from the late 1980s to 2010.
  
!    * John Gilmore for a donation to the FSF earmarked improving GNU
       Java.
  
!    * Judy Goldberg for c++ contributions.
  
!    * Torbjorn Granlund for various fixes and the c-torture testsuite,
       multiply- and divide-by-constant optimization, improved long long
       support, improved leaf function register allocation, and his
       direction via the steering committee.
  
!    * Jonny Grant for improvements to 'collect2's' '--help'
       documentation.
  
!    * Anthony Green for his '-Os' contributions, the moxie port, and Java
       front end work.
  
!    * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
       code.
  
!    * Michael K. Gschwind contributed the port to the PDP-11.
  
!    * Richard Biener for his ongoing middle-end contributions and bug
       fixes and for release management.
  
!    * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
       the support for DWARF 1 symbolic debugging information, and much of
       the support for System V Release 4.  He has also worked heavily on
       the Intel 386 and 860 support.
  
!    * Sumanth Gundapaneni for contributing the CR16 port.
  
!    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
       GCSE.
  
!    * Bruno Haible for improvements in the runtime overhead for EH, new
       warnings and assorted bug fixes.
  
!    * Andrew Haley for his amazing Java compiler and library efforts.
  
!    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
       series 300.
  
!    * Michael Hayes for various thankless work he's done trying to get
       the c30/c40 ports functional.  Lots of loop and unroll improvements
       and fixes.
  
!    * Dara Hazeghi for wading through myriads of target-specific bug
       reports.
  
!    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
  
!    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
       work, loop opts, and generally fixing lots of old problems we've
       ignored for years, flow rewrite and lots of further stuff,
       including reviewing tons of patches.
  
!    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
       various fixes.
  
!    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
       contributed the support for the Sony NEWS machine.
  
!    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
       various fixes.
  
!    * Katherine Holcomb for work on GNU Fortran.
  
!    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
       of testing and bug fixing, particularly of GCC configury code.
  
!    * Steve Holmgren for MachTen patches.
  
!    * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
  
!    * Jan Hubicka for his x86 port improvements.
  
!    * Falk Hueffner for working on C and optimization bug reports.
  
!    * Bernardo Innocenti for his m68k work, including merging of ColdFire
       improvements and uClinux support.
  
!    * Christian Iseli for various bug fixes.
  
!    * Kamil Iskra for general m68k hacking.
  
!    * Lee Iverson for random fixes and MIPS testing.
  
!    * Balaji V. Iyer for Cilk+ development and merging.
  
!    * Andreas Jaeger for testing and benchmarking of GCC and various bug
       fixes.
  
!    * Martin Jambor for his work on inter-procedural optimizations, the
       switch conversion pass, and scalar replacement of aggregates.
  
!    * Jakub Jelinek for his SPARC work and sibling call optimizations as
       well as lots of bug fixes and test cases, and for improving the
       Java build system.
  
!    * Janis Johnson for ia64 testing and fixes, her quality improvement
       sidetracks, and web page maintenance.
  
!    * Kean Johnston for SCO OpenServer support and various fixes.
  
!    * Tim Josling for the sample language treelang based originally on
       Richard Kenner's "toy" language.
  
!    * Nicolai Josuttis for additional libstdc++ documentation.
  
!    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
       target.
  
!    * Steven G. Kargl for work on GNU Fortran.
  
!    * David Kashtan of SRI adapted GCC to VMS.
  
!    * Ryszard Kabatek for many, many libstdc++ bug fixes and
       optimizations of strings, especially member functions, and for
       auto_ptr fixes.
  
!    * Geoffrey Keating for his ongoing work to make the PPC work for
       GNU/Linux and his automatic regression tester.
  
!    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
       work in just about every part of libstdc++.
  
!    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
       MIL-STD-1750A.
  
!    * Richard Kenner of the New York University Ultracomputer Research
       Laboratory wrote the machine descriptions for the AMD 29000, the
       DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
       support for instruction attributes.  He also made changes to better
--- 50531,50915 ----
  out or some of your contributions are not listed.  Please keep this list
  in alphabetical order.
  
!    • Analog Devices helped implement the support for complex data types
       and iterators.
  
!    • John David Anglin for threading-related fixes and improvements to
       libstdc++-v3, and the HP-UX port.
  
!    • James van Artsdalen wrote the code that makes efficient use of the
       Intel 80387 register stack.
  
!    • Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
       Series port.
  
!    • Alasdair Baird for various bug fixes.
  
!    • Giovanni Bajo for analyzing lots of complicated C++ problem
       reports.
  
!    • Peter Barada for his work to improve code generation for new
       ColdFire cores.
  
!    • Gerald Baumgartner added the signature extension to the C++ front
       end.
  
!    • Godmar Back for his Java improvements and encouragement.
  
!    • Scott Bambrough for help porting the Java compiler.
  
!    • Wolfgang Bangerth for processing tons of bug reports.
  
!    • Jon Beniston for his Microsoft Windows port of Java and port to
       Lattice Mico32.
  
!    • Daniel Berlin for better DWARF 2 support, faster/better
       optimizations, improved alias analysis, plus migrating GCC to
       Bugzilla.
  
!    • Geoff Berry for his Java object serialization work and various
       patches.
  
!    • David Binderman tests weekly snapshots of GCC trunk against Fedora
       Rawhide for several architectures.
  
!    • Laurynas Biveinis for memory management work and DJGPP port fixes.
  
!    • Uros Bizjak for the implementation of x87 math built-in functions
       and for various middle end and i386 back end improvements and bug
       fixes.
  
!    • Eric Blake for helping to make GCJ and libgcj conform to the
       specifications.
  
!    • Janne Blomqvist for contributions to GNU Fortran.
  
!    • Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
       other Java work.
  
!    • Segher Boessenkool for helping maintain the PowerPC port and the
       instruction combiner plus various contributions to the middle end.
  
!    • Neil Booth for work on cpplib, lang hooks, debug hooks and other
       miscellaneous clean-ups.
  
!    • Steven Bosscher for integrating the GNU Fortran front end into GCC
       and for contributing to the tree-ssa branch.
  
!    • Eric Botcazou for fixing middle- and backend bugs left and right.
  
!    • Per Bothner for his direction via the steering committee and
       various improvements to the infrastructure for supporting new
       languages.  Chill front end implementation.  Initial
       implementations of cpplib, fix-header, config.guess, libio, and
       past C++ library (libg++) maintainer.  Dreaming up, designing and
       implementing much of GCJ.
  
!    • Devon Bowen helped port GCC to the Tahoe.
  
!    • Don Bowman for mips-vxworks contributions.
  
!    • James Bowman for the FT32 port.
  
!    • Dave Brolley for work on cpplib and Chill.
  
!    • Paul Brook for work on the ARM architecture and maintaining GNU
       Fortran.
  
!    • Robert Brown implemented the support for Encore 32000 systems.
  
!    • Christian Bruel for improvements to local store elimination.
  
!    • Herman A.J. ten Brugge for various fixes.
  
!    • Joerg Brunsmann for Java compiler hacking and help with the GCJ
       FAQ.
  
!    • Joe Buck for his direction via the steering committee from its
       creation to 2013.
  
!    • Iain Buclaw for the D frontend.
  
!    • Craig Burley for leadership of the G77 Fortran effort.
  
!    • Tobias Burnus for contributions to GNU Fortran.
  
!    • Stephan Buys for contributing Doxygen notes for libstdc++.
  
!    • Paolo Carlini for libstdc++ work: lots of efficiency improvements
       to the C++ strings, streambufs and formatted I/O, hard detective
       work on the frustrating localization issues, and keeping up with
       the problem reports.
  
!    • John Carr for his alias work, SPARC hacking, infrastructure
       improvements, previous contributions to the steering committee,
       loop optimizations, etc.
  
!    • Stephane Carrez for 68HC11 and 68HC12 ports.
  
!    • Steve Chamberlain for support for the Renesas SH and H8 processors
       and the PicoJava processor, and for GCJ config fixes.
  
!    • Glenn Chambers for help with the GCJ FAQ.
  
!    • John-Marc Chandonia for various libgcj patches.
  
!    • Denis Chertykov for contributing and maintaining the AVR port, the
       first GCC port for an 8-bit architecture.
  
!    • Kito Cheng for his work on the RISC-V port, including bringing up
       the test suite and maintenance.
  
!    • Scott Christley for his Objective-C contributions.
  
!    • Eric Christopher for his Java porting help and clean-ups.
  
!    • Branko Cibej for more warning contributions.
  
!    • The GNU Classpath project for all of their merged runtime code.
  
!    • Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
!      ‘--help’, and other random hacking.
  
!    • Michael Cook for libstdc++ cleanup patches to reduce warnings.
  
!    • R. Kelley Cook for making GCC buildable from a read-only directory
       as well as other miscellaneous build process and documentation
       clean-ups.
  
!    • Ralf Corsepius for SH testing and minor bug fixing.
  
!    • François-Xavier Coudert for contributions to GNU Fortran.
  
!    • Stan Cox for care and feeding of the x86 port and lots of behind
       the scenes hacking.
  
!    • Alex Crain provided changes for the 3b1.
  
!    • Ian Dall for major improvements to the NS32k port.
  
!    • Paul Dale for his work to add uClinux platform support to the m68k
       backend.
  
!    • Palmer Dabbelt for his work maintaining the RISC-V port.
  
!    • Dario Dariol contributed the four varieties of sample programs that
       print a copy of their source.
  
!    • Russell Davidson for fstream and stringstream fixes in libstdc++.
  
!    • Bud Davis for work on the G77 and GNU Fortran compilers.
  
!    • Mo DeJong for GCJ and libgcj bug fixes.
  
!    • Jerry DeLisle for contributions to GNU Fortran.
  
!    • DJ Delorie for the DJGPP port, build and libiberty maintenance,
       various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
  
!    • Arnaud Desitter for helping to debug GNU Fortran.
  
!    • Gabriel Dos Reis for contributions to G++, contributions and
       maintenance of GCC diagnostics infrastructure, libstdc++-v3,
!      including ‘valarray<>’, ‘complex<>’, maintaining the numerics
!      library (including that pesky ‘<limits>’ :-) and keeping up-to-date
       anything to do with numbers.
  
!    • Ulrich Drepper for his work on glibc, testing of GCC using glibc,
       ISO C99 support, CFG dumping support, etc., plus support of the C++
       runtime libraries including for all kinds of C interface issues,
!      contributing and maintaining ‘complex<>’, sanity checking and
       disbursement, configuration architecture, libio maintenance, and
       early math work.
  
!    • François Dumont for his work on libstdc++-v3, especially
!      maintaining and improving ‘debug-mode’ and associative and
       unordered containers.
  
!    • Zdenek Dvorak for a new loop unroller and various fixes.
  
!    • Michael Eager for his work on the Xilinx MicroBlaze port.
  
!    • Richard Earnshaw for his ongoing work with the ARM.
  
!    • David Edelsohn for his direction via the steering committee,
       ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
       loop changes, doing the entire AIX port of libstdc++ with his bare
       hands, and for ensuring GCC properly keeps working on AIX.
  
!    • Kevin Ediger for the floating point formatting of num_put::do_put
       in libstdc++.
  
!    • Phil Edwards for libstdc++ work including configuration hackery,
       documentation maintainer, chief breaker of the web pages, the
       occasional iostream bug fix, and work on shared library symbol
       versioning.
  
!    • Paul Eggert for random hacking all over GCC.
  
!    • Mark Elbrecht for various DJGPP improvements, and for libstdc++
       configuration support for locales and fstream-related fixes.
  
!    • Vadim Egorov for libstdc++ fixes in strings, streambufs, and
       iostreams.
  
!    • Christian Ehrhardt for dealing with bug reports.
  
!    • Ben Elliston for his work to move the Objective-C runtime into its
       own subdirectory and for his work on autoconf.
  
!    • Revital Eres for work on the PowerPC 750CL port.
  
!    • Marc Espie for OpenBSD support.
  
!    • Doug Evans for much of the global optimization framework, arc,
       m32r, and SPARC work.
  
!    • Christopher Faylor for his work on the Cygwin port and for caring
       and feeding the gcc.gnu.org box and saving its users tons of spam.
  
!    • Fred Fish for BeOS support and Ada fixes.
  
!    • Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
  
!    • Peter Gerwinski for various bug fixes and the Pascal front end.
  
!    • Kaveh R. Ghazi for his direction via the steering committee,
!      amazing work to make ‘-W -Wall -W* -Werror’ useful, and testing GCC
       on a plethora of platforms.  Kaveh extends his gratitude to the
       CAIP Center at Rutgers University for providing him with computing
       resources to work on Free Software from the late 1980s to 2010.
  
!    • John Gilmore for a donation to the FSF earmarked improving GNU
       Java.
  
!    • Judy Goldberg for c++ contributions.
  
!    • Torbjorn Granlund for various fixes and the c-torture testsuite,
       multiply- and divide-by-constant optimization, improved long long
       support, improved leaf function register allocation, and his
       direction via the steering committee.
  
!    • Jonny Grant for improvements to ‘collect2's’ ‘--help’
       documentation.
  
!    • Anthony Green for his ‘-Os’ contributions, the moxie port, and Java
       front end work.
  
!    • Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
       code.
  
!    • Michael K. Gschwind contributed the port to the PDP-11.
  
!    • Richard Biener for his ongoing middle-end contributions and bug
       fixes and for release management.
  
!    • Ron Guilmette implemented the ‘protoize’ and ‘unprotoize’ tools,
       the support for DWARF 1 symbolic debugging information, and much of
       the support for System V Release 4.  He has also worked heavily on
       the Intel 386 and 860 support.
  
!    • Sumanth Gundapaneni for contributing the CR16 port.
  
!    • Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
       GCSE.
  
!    • Bruno Haible for improvements in the runtime overhead for EH, new
       warnings and assorted bug fixes.
  
!    • Andrew Haley for his amazing Java compiler and library efforts.
  
!    • Chris Hanson assisted in making GCC work on HP-UX for the 9000
       series 300.
  
!    • Michael Hayes for various thankless work he's done trying to get
       the c30/c40 ports functional.  Lots of loop and unroll improvements
       and fixes.
  
!    • Dara Hazeghi for wading through myriads of target-specific bug
       reports.
  
!    • Kate Hedstrom for staking the G77 folks with an initial testsuite.
  
!    • Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
       work, loop opts, and generally fixing lots of old problems we've
       ignored for years, flow rewrite and lots of further stuff,
       including reviewing tons of patches.
  
!    • Aldy Hernandez for working on the PowerPC port, SIMD support, and
       various fixes.
  
!    • Nobuyuki Hikichi of Software Research Associates, Tokyo,
       contributed the support for the Sony NEWS machine.
  
!    • Kazu Hirata for caring and feeding the Renesas H8/300 port and
       various fixes.
  
!    • Katherine Holcomb for work on GNU Fortran.
  
!    • Manfred Hollstein for his ongoing work to keep the m88k alive, lots
       of testing and bug fixing, particularly of GCC configury code.
  
!    • Steve Holmgren for MachTen patches.
  
!    • Mat Hostetter for work on the TILE-Gx and TILEPro ports.
  
!    • Jan Hubicka for his x86 port improvements.
  
!    • Falk Hueffner for working on C and optimization bug reports.
  
!    • Bernardo Innocenti for his m68k work, including merging of ColdFire
       improvements and uClinux support.
  
!    • Christian Iseli for various bug fixes.
  
!    • Kamil Iskra for general m68k hacking.
  
!    • Lee Iverson for random fixes and MIPS testing.
  
!    • Balaji V. Iyer for Cilk+ development and merging.
  
!    • Andreas Jaeger for testing and benchmarking of GCC and various bug
       fixes.
  
!    • Martin Jambor for his work on inter-procedural optimizations, the
       switch conversion pass, and scalar replacement of aggregates.
  
!    • Jakub Jelinek for his SPARC work and sibling call optimizations as
       well as lots of bug fixes and test cases, and for improving the
       Java build system.
  
!    • Janis Johnson for ia64 testing and fixes, her quality improvement
       sidetracks, and web page maintenance.
  
!    • Kean Johnston for SCO OpenServer support and various fixes.
  
!    • Tim Josling for the sample language treelang based originally on
       Richard Kenner's "toy" language.
  
!    • Nicolai Josuttis for additional libstdc++ documentation.
  
!    • Klaus Kaempf for his ongoing work to make alpha-vms a viable
       target.
  
!    • Steven G. Kargl for work on GNU Fortran.
  
!    • David Kashtan of SRI adapted GCC to VMS.
  
!    • Ryszard Kabatek for many, many libstdc++ bug fixes and
       optimizations of strings, especially member functions, and for
       auto_ptr fixes.
  
!    • Geoffrey Keating for his ongoing work to make the PPC work for
       GNU/Linux and his automatic regression tester.
  
!    • Brendan Kehoe for his ongoing work with G++ and for a lot of early
       work in just about every part of libstdc++.
  
!    • Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
       MIL-STD-1750A.
  
!    • Richard Kenner of the New York University Ultracomputer Research
       Laboratory wrote the machine descriptions for the AMD 29000, the
       DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
       support for instruction attributes.  He also made changes to better
*************** in alphabetical order.
*** 50919,51834 ****
       Richard Kenner was also the head maintainer of GCC for several
       years.
  
!    * Mumit Khan for various contributions to the Cygwin and Mingw32
       ports and maintaining binary releases for Microsoft Windows hosts,
       and for massive libstdc++ porting work to Cygwin/Mingw32.
  
!    * Robin Kirkham for cpu32 support.
  
!    * Mark Klein for PA improvements.
  
!    * Thomas Koenig for various bug fixes.
  
!    * Bruce Korb for the new and improved fixincludes code.
  
!    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
       effort.
  
!    * Maxim Kuvyrkov for contributions to the instruction scheduler, the
       Android and m68k/Coldfire ports, and optimizations.
  
!    * Charles LaBrec contributed the support for the Integrated Solutions
       68020 system.
  
!    * Asher Langton and Mike Kumbera for contributing Cray pointer
       support to GNU Fortran, and for other GNU Fortran improvements.
  
!    * Jeff Law for his direction via the steering committee, coordinating
       the entire egcs project and GCC 2.95, rolling out snapshots and
       releases, handling merges from GCC2, reviewing tons of patches that
       might have fallen through the cracks else, and random but extensive
       hacking.
  
!    * Walter Lee for work on the TILE-Gx and TILEPro ports.
  
!    * Marc Lehmann for his direction via the steering committee and
       helping with analysis and improvements of x86 performance.
  
!    * Victor Leikehman for work on GNU Fortran.
  
!    * Ted Lemon wrote parts of the RTL reader and printer.
  
!    * Kriang Lerdsuwanakij for C++ improvements including template as
       template parameter support, and many C++ fixes.
  
!    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
       and random work on the Java front end.
  
!    * Alain Lichnewsky ported GCC to the MIPS CPU.
  
!    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
       and patches.
  
!    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
  
!    * Chen Liqin for various S+core related fixes/improvement, and for
       maintaining the S+core port.
  
!    * Martin Liska for his work on identical code folding, the
       sanitizers, HSA, general bug fixing and for running automated
       regression testing of GCC and reporting numerous bugs.
  
!    * Weiwen Liu for testing and various bug fixes.
  
!    * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
       diagnostics fixes and improvements.
  
!    * Dave Love for his ongoing work with the Fortran front end and
       runtime libraries.
  
!    * Martin von Lo"wis for internal consistency checking infrastructure,
       various C++ improvements including namespace support, and tons of
       assistance with libstdc++/compiler merges.
  
!    * H.J. Lu for his previous contributions to the steering committee,
       many x86 bug reports, prototype patches, and keeping the GNU/Linux
       ports working.
  
!    * Greg McGary for random fixes and (someday) bounded pointers.
  
!    * Andrew MacLeod for his ongoing work in building a real EH system,
       various code generation improvements, work on the global optimizer,
       etc.
  
!    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
       hacking improvements to compile-time performance, overall knowledge
       and direction in the area of instruction scheduling, design and
       implementation of the automaton based instruction scheduler and
       design and implementation of the integrated and local register
       allocators.
  
!    * David Malcolm for his work on improving GCC diagnostics, JIT,
       self-tests and unit testing.
  
!    * Bob Manson for his behind the scenes work on dejagnu.
  
!    * Jose E. Marchesi for contributing the eBPF backend and his ongoing
       work maintaining it.
  
!    * John Marino for contributing the DragonFly BSD port.
  
!    * Philip Martin for lots of libstdc++ string and vector iterator
       fixes and improvements, and string clean up and testsuites.
  
!    * Michael Matz for his work on dominance tree discovery, the x86-64
       port, link-time optimization framework and general optimization
       improvements.
  
!    * All of the Mauve project contributors for Java test code.
  
!    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
  
!    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
  
!    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
       powerpc, haifa, ECOFF debug support, and other assorted hacking.
  
!    * Jason Merrill for his direction via the steering committee and
       leading the G++ effort.
  
!    * Martin Michlmayr for testing GCC on several architectures using the
       entire Debian archive.
  
!    * David Miller for his direction via the steering committee, lots of
       SPARC work, improvements in jump.cc and interfacing with the Linux
       kernel developers.
  
!    * Gary Miller ported GCC to Charles River Data Systems machines.
  
!    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
       the entire libstdc++ testsuite namespace-compatible.
  
!    * Mark Mitchell for his direction via the steering committee,
       mountains of C++ work, load/store hoisting out of loops, alias
!      analysis improvements, ISO C 'restrict' support, and serving as
       release manager from 2000 to 2011.
  
!    * Alan Modra for various GNU/Linux bits and testing.
  
!    * Toon Moene for his direction via the steering committee, Fortran
       maintenance, and his ongoing work to make us make Fortran run fast.
  
!    * Jason Molenda for major help in the care and feeding of all the
       services on the gcc.gnu.org (formerly egcs.cygnus.com)
       machine--mail, web services, ftp services, etc etc.  Doing all this
       work on scrap paper and the backs of envelopes would have been...
       difficult.
  
!    * Catherine Moore for fixing various ugly problems we have sent her
       way, including the haifa bug which was killing the Alpha & PowerPC
       Linux kernels.
  
!    * Mike Moreton for his various Java patches.
  
!    * David Mosberger-Tang for various Alpha improvements, and for the
       initial IA-64 port.
  
!    * Stephen Moshier contributed the floating point emulator that
       assists in cross-compilation and permits support for floating point
       numbers wider than 64 bits and for ISO C99 support.
  
!    * Bill Moyer for his behind the scenes work on various issues.
  
!    * Philippe De Muyter for his work on the m68k port.
  
!    * Joseph S. Myers for his work on the PDP-11 port, format checking
       and ISO C99 support, and continuous emphasis on (and contributions
       to) documentation.
  
!    * Nathan Myers for his work on libstdc++-v3: architecture and
       authorship through the first three snapshots, including
       implementation of locale infrastructure, string, shadow C headers,
       and the initial project documentation (DESIGN, CHECKLIST, and so
       forth).  Later, more work on MT-safe string and shadow headers.
  
!    * Felix Natter for documentation on porting libstdc++.
  
!    * Nathanael Nerode for cleaning up the configuration/build process.
  
!    * NeXT, Inc. donated the front end that supports the Objective-C
       language.
  
!    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
       search engine setup, various documentation fixes and other small
       fixes.
  
!    * Geoff Noer for his work on getting cygwin native builds working.
  
!    * Vegard Nossum for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
       tracking web pages, GIMPLE tuples, and assorted fixes.
  
!    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
       FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
       infrastructure improvements.
  
!    * Alexandre Oliva for various build infrastructure improvements,
       scripts and amazing testing work, including keeping libtool issues
       sane and happy.
  
!    * Stefan Olsson for work on mt_alloc.
  
!    * Melissa O'Neill for various NeXT fixes.
  
!    * Rainer Orth for random MIPS work, including improvements to GCC's
       o32 ABI support, improvements to dejagnu's MIPS support, Java
       configuration clean-ups and porting work, and maintaining the IRIX,
       Solaris 2, and Tru64 UNIX ports.
  
!    * Patrick Palka for contributions to the C++ library and front end.
  
!    * Steven Pemberton for his contribution of 'enquire' which allowed
       GCC to determine various properties of the floating point unit and
!      generate 'float.h' in older versions of GCC.
  
!    * Hartmut Penner for work on the s390 port.
  
!    * Paul Petersen wrote the machine description for the Alliant FX/8.
  
!    * Alexandre Petit-Bianco for implementing much of the Java compiler
       and continued Java maintainership.
  
!    * Matthias Pfaller for major improvements to the NS32k port.
  
!    * Gerald Pfeifer for his direction via the steering committee,
       pointing out lots of problems we need to solve, maintenance of the
       web pages, and taking care of documentation maintenance in general.
  
!    * Marek Polacek for his work on the C front end, the sanitizers and
       general bug fixing.
  
!    * Andrew Pinski for processing bug reports by the dozen, maintenance
       of the Objective-C runtime libraries, and many scalar
       optimizations.
  
!    * Ovidiu Predescu for his work on the Objective-C front end and
       runtime libraries.
  
!    * Jerry Quinn for major performance improvements in C++ formatted
       I/O.
  
!    * Ken Raeburn for various improvements to checker, MIPS ports and
       various cleanups in the compiler.
  
!    * Rolf W. Rasmussen for hacking on AWT.
  
!    * David Reese of Sun Microsystems contributed to the Solaris on
       PowerPC port.
  
!    * John Regehr for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Volker Reichelt for running automated regression testing of GCC and
       reporting numerous bugs and for keeping up with the problem
       reports.
  
!    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
       hacking and developing and maintaining the Epiphany port.
  
!    * Loren J. Rittle for improvements to libstdc++-v3 including the
       FreeBSD port, threading fixes, thread-related configury changes,
       critical threading documentation, and solutions to really tricky
       I/O problems, as well as keeping GCC properly working on FreeBSD
       and continuous testing.
  
!    * Craig Rodrigues for processing tons of bug reports.
  
!    * Ola Ro"nnerup for work on mt_alloc.
  
!    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
  
!    * David Ronis inspired and encouraged Craig to rewrite the G77
       documentation in texinfo format by contributing a first pass at a
!      translation of the old 'g77-0.5.16/f/DOC' file.
  
!    * Ken Rose for fixes to GCC's delay slot filling code.
  
!    * Ira Rosen for her contributions to the auto-vectorizer.
  
!    * Paul Rubin wrote most of the preprocessor.
  
!    * Pe'tur Runo'lfsson for major performance improvements in C++
       formatted I/O and large file support in C++ filebuf.
  
!    * Chip Salzenberg for libstdc++ patches and improvements to locales,
       traits, Makefiles, libio, libtool hackery, and "long long" support.
  
!    * Juha Sarlin for improvements to the H8 code generator.
  
!    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
       300.
  
!    * Roger Sayle for improvements to constant folding and GCC's RTL
       optimizers as well as for fixing numerous bugs.
  
!    * Bradley Schatz for his work on the GCJ FAQ.
  
!    * Peter Schauer wrote the code to allow debugging to work on the
       Alpha.
  
!    * William Schelter did most of the work on the Intel 80386 support.
  
!    * Tobias Schlu"ter for work on GNU Fortran.
  
!    * Bernd Schmidt for various code generation improvements and major
       work in the reload pass, serving as release manager for GCC 2.95.3,
       and work on the Blackfin and C6X ports.
  
!    * Peter Schmid for constant testing of libstdc++--especially
       application testing, going above and beyond what was requested for
       the release criteria--and libstdc++ header file tweaks.
  
!    * Jason Schroeder for jcf-dump patches.
  
!    * Andreas Schwab for his work on the m68k port.
  
!    * Lars Segerlund for work on GNU Fortran.
  
!    * Dodji Seketeli for numerous C++ bug fixes and debug info
       improvements.
  
!    * Tim Shen for major work on '<regex>'.
  
!    * Joel Sherrill for his direction via the steering committee, RTEMS
       contributions and RTEMS testing.
  
!    * Nathan Sidwell for many C++ fixes/improvements.
  
!    * Jeffrey Siegal for helping RMS with the original design of GCC,
       some code which handles the parse tree and RTL data structures,
       constant folding and help with the original VAX & m68k ports.
  
!    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
       from the LWG (thereby keeping GCC in line with updates from the
       ISO).
  
!    * Franz Sirl for his ongoing work with making the PPC port stable for
       GNU/Linux.
  
!    * Andrey Slepuhin for assorted AIX hacking.
  
!    * Trevor Smigiel for contributing the SPU port.
  
!    * Christopher Smith did the port for Convex machines.
  
!    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
       Retired from GCC maintainership August 2010, having mentored two
       new maintainers into the role.
  
!    * Randy Smith finished the Sun FPA support.
  
!    * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
!      functions, '<random>', and various improvements to C++11 features.
  
!    * Scott Snyder for queue, iterator, istream, and string fixes and
       libstdc++ testsuite entries.  Also for providing the patch to G77
!      to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
!      'LOGICAL*1'.
  
!    * Zdenek Sojka for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Arseny Solokha for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Jayant Sonar for contributing the CR16 port.
  
!    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
  
!    * Richard Stallman, for writing the original GCC and launching the
       GNU project.
  
!    * Jan Stein of the Chalmers Computer Society provided support for
       Genix, as well as part of the 32000 machine description.
  
!    * Gerhard Steinmetz for running automated regression testing of GCC
       and reporting numerous bugs.
  
!    * Nigel Stephens for various mips16 related fixes/improvements.
  
!    * Jonathan Stone wrote the machine description for the Pyramid
       computer.
  
!    * Graham Stott for various infrastructure improvements.
  
!    * John Stracke for his Java HTTP protocol fixes.
  
!    * Mike Stump for his Elxsi port, G++ contributions over the years and
       more recently his vxworks contributions
  
!    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
  
!    * Zhendong Su for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Chengnian Sun for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Shigeya Suzuki for this fixes for the bsdi platforms.
  
!    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
       support, general configury hacking, fixincludes, etc.
  
!    * Holger Teutsch provided the support for the Clipper CPU.
  
!    * Gary Thomas for his ongoing work to make the PPC work for
       GNU/Linux.
  
!    * Paul Thomas for contributions to GNU Fortran.
  
!    * Philipp Thomas for random bug fixes throughout the compiler
  
!    * Jason Thorpe for thread support in libstdc++ on NetBSD.
  
!    * Kresten Krab Thorup wrote the run time support for the Objective-C
       language and the fantastic Java bytecode interpreter.
  
!    * Michael Tiemann for random bug fixes, the first instruction
       scheduler, initial C++ support, function integration, NS32k, SPARC
       and M88k machine description work, delay slot scheduling.
  
!    * Andreas Tobler for his work porting libgcj to Darwin.
  
!    * Teemu Torma for thread safe exception handling support.
  
!    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
       definitions, and of the VAX machine description.
  
!    * Daniel Towner and Hariharan Sandanagobalane contributed and
       maintain the picoChip port.
  
!    * Tom Tromey for internationalization support and for his many Java
       contributions and libgcj maintainership.
  
!    * Lassi Tuura for improvements to config.guess to determine HP
       processor types.
  
!    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
  
!    * Andy Vaught for the design and initial implementation of the GNU
       Fortran front end.
  
!    * Brent Verner for work with the libstdc++ cshadow files and their
       associated configure steps.
  
!    * Todd Vierling for contributions for NetBSD ports.
  
!    * Andrew Waterman for contributing the RISC-V port, as well as
       maintaining it.
  
!    * Jonathan Wakely for contributing to and maintaining libstdc++.
  
!    * Dean Wakerley for converting the install documentation from HTML to
       texinfo in time for GCC 3.0.
  
!    * Krister Walfridsson for random bug fixes.
  
!    * Feng Wang for contributions to GNU Fortran.
  
!    * Stephen M. Webb for time and effort on making libstdc++ shadow
       files work with the tricky Solaris 8+ headers, and for pushing the
       build-time header tree.  Also, for starting and driving the
!      '<regex>' effort.
  
!    * John Wehle for various improvements for the x86 code generator,
       related infrastructure improvements to help x86 code generation,
       value range propagation and other work, WE32k port.
  
!    * Ulrich Weigand for work on the s390 port.
  
!    * Janus Weil for contributions to GNU Fortran.
  
!    * Zack Weinberg for major work on cpplib and various other bug fixes.
  
!    * Matt Welsh for help with Linux Threads support in GCJ.
  
!    * Urban Widmark for help fixing java.io.
  
!    * Mark Wielaard for new Java library code and his work integrating
       with Classpath.
  
!    * Dale Wiles helped port GCC to the Tahoe.
  
!    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
  
!    * Jim Wilson for his direction via the steering committee, tackling
       hard problems in various places that nobody else wanted to work on,
       strength reduction and other loop optimizations.
  
!    * Paul Woegerer and Tal Agmon for the CRX port.
  
!    * Carlo Wood for various fixes.
  
!    * Tom Wood for work on the m88k port.
  
!    * Chung-Ju Wu for his work on the Andes NDS32 port.
  
!    * Canqun Yang for work on GNU Fortran.
  
!    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
       description for the Tron architecture (specifically, the Gmicro).
  
!    * Kevin Zachmann helped port GCC to the Tahoe.
  
!    * Ayal Zaks for Swing Modulo Scheduling (SMS).
  
!    * Qirun Zhang for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    * Xiaoqiang Zhang for work on GNU Fortran.
  
!    * Gilles Zunino for help porting Java to Irix.
  
   The following people are recognized for their contributions to GNAT,
  the Ada front end of GCC:
!    * Bernard Banner
  
!    * Romain Berrendonner
  
!    * Geert Bosch
  
!    * Emmanuel Briot
  
!    * Joel Brobecker
  
!    * Ben Brosgol
  
!    * Vincent Celier
  
!    * Arnaud Charlet
  
!    * Chien Chieng
  
!    * Cyrille Comar
  
!    * Cyrille Crozes
  
!    * Robert Dewar
  
!    * Gary Dismukes
  
!    * Robert Duff
  
!    * Ed Falis
  
!    * Ramon Fernandez
  
!    * Sam Figueroa
  
!    * Vasiliy Fofanov
  
!    * Michael Friess
  
!    * Franco Gasperoni
  
!    * Ted Giering
  
!    * Matthew Gingell
  
!    * Laurent Guerby
  
!    * Jerome Guitton
  
!    * Olivier Hainque
  
!    * Jerome Hugues
  
!    * Hristian Kirtchev
  
!    * Jerome Lambourg
  
!    * Bruno Leclerc
  
!    * Albert Lee
  
!    * Sean McNeil
  
!    * Javier Miranda
  
!    * Laurent Nana
  
!    * Pascal Obry
  
!    * Dong-Ik Oh
  
!    * Laurent Pautet
  
!    * Brett Porter
  
!    * Thomas Quinot
  
!    * Nicolas Roche
  
!    * Pat Rogers
  
!    * Jose Ruiz
  
!    * Douglas Rupp
  
!    * Sergey Rybin
  
!    * Gail Schenker
  
!    * Ed Schonberg
  
!    * Nicolas Setton
  
!    * Samuel Tardieu
  
   The following people are recognized for their contributions of new
  features, bug reports, testing and integration of classpath/libgcj for
  GCC version 4.1:
!    * Lillian Angel for 'JTree' implementation and lots Free Swing
       additions and bug fixes.
  
!    * Wolfgang Baer for 'GapContent' bug fixes.
  
!    * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
!      event fixes, lots of Free Swing work including 'JTable' editing.
  
!    * Stuart Ballard for RMI constant fixes.
  
!    * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
  
!    * Gary Benson for 'MessageFormat' fixes.
  
!    * Daniel Bonniot for 'Serialization' fixes.
  
!    * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
!      and 'DOM xml:id' support.
  
!    * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
  
!    * Archie Cobbs for build fixes, VM interface updates,
!      'URLClassLoader' updates.
  
!    * Kelley Cook for build fixes.
  
!    * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
  
!    * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
       improvements.
  
!    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
       2D support.  Lots of imageio framework additions, lots of AWT and
       Free Swing bug fixes.
  
!    * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
!      fixes, better 'Proxy' support, bug fixes and IKVM integration.
  
!    * Santiago Gala for 'AccessControlContext' fixes.
  
!    * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
       improvements.
  
!    * David Gilbert for 'basic' and 'metal' icon and plaf support and
       lots of documenting, Lots of Free Swing and metal theme additions.
!      'MetalIconFactory' implementation.
  
!    * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
  
!    * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
       build speedups.
  
!    * Kim Ho for 'JFileChooser' implementation.
  
!    * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
!      'Serialization' fixes, 'Properties' XML support and generic branch
       work, VMIntegration guide update.
  
!    * Bastiaan Huisman for 'TimeZone' bug fixing.
  
!    * Andreas Jaeger for mprec updates.
  
!    * Paul Jenner for better '-Werror' support.
  
!    * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
  
!    * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
       bug fixes all over.  Lots of Free Swing work including styled text.
  
!    * Simon Kitching for 'String' cleanups and optimization suggestions.
  
!    * Michael Koch for configuration fixes, 'Locale' updates, bug and
       build fixes.
  
!    * Guilhem Lavaux for configuration, thread and channel fixes and
!      Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
       fixes.
  
!    * David Lichteblau for JCL support library global/local reference
       cleanups.
  
!    * Aaron Luchko for JDWP updates and documentation fixes.
  
!    * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
       features.
  
!    * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
!      fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
       and implementing the Qt4 peers.
  
!    * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
!      'SystemLogger' and 'FileHandler' rotate implementations, NIO
!      'FileChannel.map' support, security and policy updates.
  
!    * Bryce McKinlay for RMI work.
  
!    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
       testing and documenting.
  
!    * Kalle Olavi Niemitalo for build fixes.
  
!    * Rainer Orth for build fixes.
  
!    * Andrew Overholt for 'File' locking fixes.
  
!    * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
  
!    * Olga Rodimina for 'MenuSelectionManager' implementation.
  
!    * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
  
!    * Julian Scheid for documentation updates and gjdoc support.
  
!    * Christian Schlichtherle for zip fixes and cleanups.
  
!    * Robert Schuster for documentation updates and beans fixes,
!      'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
       and URL, AWT and Free Swing bug fixes.
  
!    * Keith Seitz for lots of JDWP work.
  
!    * Christian Thalinger for 64-bit cleanups, Configuration and VM
!      interface fixes and 'CACAO' integration, 'fdlibm' updates.
  
!    * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
  
!    * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
!      support for Darwin / macOS, 'Graphics2D' support, 'gtk+' updates.
  
!    * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
!      integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
!      'GdkPixbugDecoder' updates.
  
!    * Tom Tromey for Eclipse integration, generics work, lots of bug
       fixes and gcj integration including coordinating The Big Merge.
  
!    * Mark Wielaard for bug fixes, packaging and release management,
!      'Clipboard' implementation, system call interrupts and network
!      timeouts and 'GdkPixpufDecoder' fixes.
  
   In addition to the above, all of which also contributed time and energy
  in testing GCC, we would like to thank the following for their
  contributions to testing:
  
!    * Michael Abd-El-Malek
  
!    * Thomas Arend
  
!    * Bonzo Armstrong
  
!    * Steven Ashe
  
!    * Chris Baldwin
  
!    * David Billinghurst
  
!    * Jim Blandy
  
!    * Stephane Bortzmeyer
  
!    * Horst von Brand
  
!    * Frank Braun
  
!    * Rodney Brown
  
!    * Sidney Cadot
  
!    * Bradford Castalia
  
!    * Robert Clark
  
!    * Jonathan Corbet
  
!    * Ralph Doncaster
  
!    * Richard Emberson
  
!    * Levente Farkas
  
!    * Graham Fawcett
  
!    * Mark Fernyhough
  
!    * Robert A. French
  
!    * Jo"rgen Freyh
  
!    * Mark K. Gardner
  
!    * Charles-Antoine Gauthier
  
!    * Yung Shing Gene
  
!    * David Gilbert
  
!    * Simon Gornall
  
!    * Fred Gray
  
!    * John Griffin
  
!    * Patrik Hagglund
  
!    * Phil Hargett
  
!    * Amancio Hasty
  
!    * Takafumi Hayashi
  
!    * Bryan W. Headley
  
!    * Kevin B. Hendricks
  
!    * Joep Jansen
  
!    * Christian Joensson
  
!    * Michel Kern
  
!    * David Kidd
  
!    * Tobias Kuipers
  
!    * Anand Krishnaswamy
  
!    * A. O. V. Le Blanc
  
!    * llewelly
  
!    * Damon Love
  
!    * Brad Lucier
  
!    * Matthias Klose
  
!    * Martin Knoblauch
  
!    * Rick Lutowski
  
!    * Jesse Macnish
  
!    * Stefan Morrell
  
!    * Anon A. Mous
  
!    * Matthias Mueller
  
!    * Pekka Nikander
  
!    * Rick Niles
  
!    * Jon Olson
  
!    * Magnus Persson
  
!    * Chris Pollard
  
!    * Richard Polton
  
!    * Derk Reefman
  
!    * David Rees
  
!    * Paul Reilly
  
!    * Tom Reilly
  
!    * Torsten Rueger
  
!    * Danny Sadinoff
  
!    * Marc Schifer
  
!    * Erik Schnetter
  
!    * Wayne K. Schroll
  
!    * David Schuler
  
!    * Vin Shelton
  
!    * Tim Souder
  
!    * Adam Sulmicki
  
!    * Bill Thorson
  
!    * George Talbot
  
!    * Pedro A. M. Vazquez
  
!    * Gregory Warnes
  
!    * Ian Watson
  
!    * David E. Young
  
!    * And many others
  
   And finally we'd like to thank everyone who uses the compiler, provides
  feedback and generally reminds us why we're doing this work in the first
--- 50920,51835 ----
       Richard Kenner was also the head maintainer of GCC for several
       years.
  
!    • Mumit Khan for various contributions to the Cygwin and Mingw32
       ports and maintaining binary releases for Microsoft Windows hosts,
       and for massive libstdc++ porting work to Cygwin/Mingw32.
  
!    • Robin Kirkham for cpu32 support.
  
!    • Mark Klein for PA improvements.
  
!    • Thomas Koenig for various bug fixes.
  
!    • Bruce Korb for the new and improved fixincludes code.
  
!    • Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
       effort.
  
!    • Maxim Kuvyrkov for contributions to the instruction scheduler, the
       Android and m68k/Coldfire ports, and optimizations.
  
!    • Charles LaBrec contributed the support for the Integrated Solutions
       68020 system.
  
!    • Asher Langton and Mike Kumbera for contributing Cray pointer
       support to GNU Fortran, and for other GNU Fortran improvements.
  
!    • Jeff Law for his direction via the steering committee, coordinating
       the entire egcs project and GCC 2.95, rolling out snapshots and
       releases, handling merges from GCC2, reviewing tons of patches that
       might have fallen through the cracks else, and random but extensive
       hacking.
  
!    • Walter Lee for work on the TILE-Gx and TILEPro ports.
  
!    • Marc Lehmann for his direction via the steering committee and
       helping with analysis and improvements of x86 performance.
  
!    • Victor Leikehman for work on GNU Fortran.
  
!    • Ted Lemon wrote parts of the RTL reader and printer.
  
!    • Kriang Lerdsuwanakij for C++ improvements including template as
       template parameter support, and many C++ fixes.
  
!    • Warren Levy for tremendous work on libgcj (Java Runtime Library)
       and random work on the Java front end.
  
!    • Alain Lichnewsky ported GCC to the MIPS CPU.
  
!    • Oskar Liljeblad for hacking on AWT and his many Java bug reports
       and patches.
  
!    • Robert Lipe for OpenServer support, new testsuites, testing, etc.
  
!    • Chen Liqin for various S+core related fixes/improvement, and for
       maintaining the S+core port.
  
!    • Martin Liska for his work on identical code folding, the
       sanitizers, HSA, general bug fixing and for running automated
       regression testing of GCC and reporting numerous bugs.
  
!    • Weiwen Liu for testing and various bug fixes.
  
!    • Manuel López-Ibáñez for improving ‘-Wconversion’ and many other
       diagnostics fixes and improvements.
  
!    • Dave Love for his ongoing work with the Fortran front end and
       runtime libraries.
  
!    • Martin von Löwis for internal consistency checking infrastructure,
       various C++ improvements including namespace support, and tons of
       assistance with libstdc++/compiler merges.
  
!    • H.J. Lu for his previous contributions to the steering committee,
       many x86 bug reports, prototype patches, and keeping the GNU/Linux
       ports working.
  
!    • Greg McGary for random fixes and (someday) bounded pointers.
  
!    • Andrew MacLeod for his ongoing work in building a real EH system,
       various code generation improvements, work on the global optimizer,
       etc.
  
!    • Vladimir Makarov for hacking some ugly i960 problems, PowerPC
       hacking improvements to compile-time performance, overall knowledge
       and direction in the area of instruction scheduling, design and
       implementation of the automaton based instruction scheduler and
       design and implementation of the integrated and local register
       allocators.
  
!    • David Malcolm for his work on improving GCC diagnostics, JIT,
       self-tests and unit testing.
  
!    • Bob Manson for his behind the scenes work on dejagnu.
  
!    • Jose E. Marchesi for contributing the eBPF backend and his ongoing
       work maintaining it.
  
!    • John Marino for contributing the DragonFly BSD port.
  
!    • Philip Martin for lots of libstdc++ string and vector iterator
       fixes and improvements, and string clean up and testsuites.
  
!    • Michael Matz for his work on dominance tree discovery, the x86-64
       port, link-time optimization framework and general optimization
       improvements.
  
!    • All of the Mauve project contributors for Java test code.
  
!    • Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
  
!    • Adam Megacz for his work on the Microsoft Windows port of GCJ.
  
!    • Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
       powerpc, haifa, ECOFF debug support, and other assorted hacking.
  
!    • Jason Merrill for his direction via the steering committee and
       leading the G++ effort.
  
!    • Martin Michlmayr for testing GCC on several architectures using the
       entire Debian archive.
  
!    • David Miller for his direction via the steering committee, lots of
       SPARC work, improvements in jump.cc and interfacing with the Linux
       kernel developers.
  
!    • Gary Miller ported GCC to Charles River Data Systems machines.
  
!    • Alfred Minarik for libstdc++ string and ios bug fixes, and turning
       the entire libstdc++ testsuite namespace-compatible.
  
!    • Mark Mitchell for his direction via the steering committee,
       mountains of C++ work, load/store hoisting out of loops, alias
!      analysis improvements, ISO C ‘restrict’ support, and serving as
       release manager from 2000 to 2011.
  
!    • Alan Modra for various GNU/Linux bits and testing.
  
!    • Toon Moene for his direction via the steering committee, Fortran
       maintenance, and his ongoing work to make us make Fortran run fast.
  
!    • Jason Molenda for major help in the care and feeding of all the
       services on the gcc.gnu.org (formerly egcs.cygnus.com)
       machine--mail, web services, ftp services, etc etc.  Doing all this
       work on scrap paper and the backs of envelopes would have been...
       difficult.
  
!    • Catherine Moore for fixing various ugly problems we have sent her
       way, including the haifa bug which was killing the Alpha & PowerPC
       Linux kernels.
  
!    • Mike Moreton for his various Java patches.
  
!    • David Mosberger-Tang for various Alpha improvements, and for the
       initial IA-64 port.
  
!    • Stephen Moshier contributed the floating point emulator that
       assists in cross-compilation and permits support for floating point
       numbers wider than 64 bits and for ISO C99 support.
  
!    • Bill Moyer for his behind the scenes work on various issues.
  
!    • Philippe De Muyter for his work on the m68k port.
  
!    • Joseph S. Myers for his work on the PDP-11 port, format checking
       and ISO C99 support, and continuous emphasis on (and contributions
       to) documentation.
  
!    • Nathan Myers for his work on libstdc++-v3: architecture and
       authorship through the first three snapshots, including
       implementation of locale infrastructure, string, shadow C headers,
       and the initial project documentation (DESIGN, CHECKLIST, and so
       forth).  Later, more work on MT-safe string and shadow headers.
  
!    • Felix Natter for documentation on porting libstdc++.
  
!    • Nathanael Nerode for cleaning up the configuration/build process.
  
!    • NeXT, Inc. donated the front end that supports the Objective-C
       language.
  
!    • Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
       search engine setup, various documentation fixes and other small
       fixes.
  
!    • Geoff Noer for his work on getting cygwin native builds working.
  
!    • Vegard Nossum for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
       tracking web pages, GIMPLE tuples, and assorted fixes.
  
!    • David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
       FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
       infrastructure improvements.
  
!    • Alexandre Oliva for various build infrastructure improvements,
       scripts and amazing testing work, including keeping libtool issues
       sane and happy.
  
!    • Stefan Olsson for work on mt_alloc.
  
!    • Melissa O'Neill for various NeXT fixes.
  
!    • Rainer Orth for random MIPS work, including improvements to GCC's
       o32 ABI support, improvements to dejagnu's MIPS support, Java
       configuration clean-ups and porting work, and maintaining the IRIX,
       Solaris 2, and Tru64 UNIX ports.
  
!    • Patrick Palka for contributions to the C++ library and front end.
  
!    • Steven Pemberton for his contribution of ‘enquire’ which allowed
       GCC to determine various properties of the floating point unit and
!      generate ‘float.h’ in older versions of GCC.
  
!    • Hartmut Penner for work on the s390 port.
  
!    • Paul Petersen wrote the machine description for the Alliant FX/8.
  
!    • Alexandre Petit-Bianco for implementing much of the Java compiler
       and continued Java maintainership.
  
!    • Matthias Pfaller for major improvements to the NS32k port.
  
!    • Gerald Pfeifer for his direction via the steering committee,
       pointing out lots of problems we need to solve, maintenance of the
       web pages, and taking care of documentation maintenance in general.
  
!    • Marek Polacek for his work on the C front end, the sanitizers and
       general bug fixing.
  
!    • Andrew Pinski for processing bug reports by the dozen, maintenance
       of the Objective-C runtime libraries, and many scalar
       optimizations.
  
!    • Ovidiu Predescu for his work on the Objective-C front end and
       runtime libraries.
  
!    • Jerry Quinn for major performance improvements in C++ formatted
       I/O.
  
!    • Ken Raeburn for various improvements to checker, MIPS ports and
       various cleanups in the compiler.
  
!    • Rolf W. Rasmussen for hacking on AWT.
  
!    • David Reese of Sun Microsystems contributed to the Solaris on
       PowerPC port.
  
!    • John Regehr for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Volker Reichelt for running automated regression testing of GCC and
       reporting numerous bugs and for keeping up with the problem
       reports.
  
!    • Joern Rennecke for maintaining the sh port, loop, regmove & reload
       hacking and developing and maintaining the Epiphany port.
  
!    • Loren J. Rittle for improvements to libstdc++-v3 including the
       FreeBSD port, threading fixes, thread-related configury changes,
       critical threading documentation, and solutions to really tricky
       I/O problems, as well as keeping GCC properly working on FreeBSD
       and continuous testing.
  
!    • Craig Rodrigues for processing tons of bug reports.
  
!    • Ola Rönnerup for work on mt_alloc.
  
!    • Gavin Romig-Koch for lots of behind the scenes MIPS work.
  
!    • David Ronis inspired and encouraged Craig to rewrite the G77
       documentation in texinfo format by contributing a first pass at a
!      translation of the old ‘g77-0.5.16/f/DOC’ file.
  
!    • Ken Rose for fixes to GCC's delay slot filling code.
  
!    • Ira Rosen for her contributions to the auto-vectorizer.
  
!    • Paul Rubin wrote most of the preprocessor.
  
!    • Pétur Runólfsson for major performance improvements in C++
       formatted I/O and large file support in C++ filebuf.
  
!    • Chip Salzenberg for libstdc++ patches and improvements to locales,
       traits, Makefiles, libio, libtool hackery, and "long long" support.
  
!    • Juha Sarlin for improvements to the H8 code generator.
  
!    • Greg Satz assisted in making GCC work on HP-UX for the 9000 series
       300.
  
!    • Roger Sayle for improvements to constant folding and GCC's RTL
       optimizers as well as for fixing numerous bugs.
  
!    • Bradley Schatz for his work on the GCJ FAQ.
  
!    • Peter Schauer wrote the code to allow debugging to work on the
       Alpha.
  
!    • William Schelter did most of the work on the Intel 80386 support.
  
!    • Tobias Schlüter for work on GNU Fortran.
  
!    • Bernd Schmidt for various code generation improvements and major
       work in the reload pass, serving as release manager for GCC 2.95.3,
       and work on the Blackfin and C6X ports.
  
!    • Peter Schmid for constant testing of libstdc++--especially
       application testing, going above and beyond what was requested for
       the release criteria--and libstdc++ header file tweaks.
  
!    • Jason Schroeder for jcf-dump patches.
  
!    • Andreas Schwab for his work on the m68k port.
  
!    • Lars Segerlund for work on GNU Fortran.
  
!    • Dodji Seketeli for numerous C++ bug fixes and debug info
       improvements.
  
!    • Tim Shen for major work on ‘<regex>’.
  
!    • Joel Sherrill for his direction via the steering committee, RTEMS
       contributions and RTEMS testing.
  
!    • Nathan Sidwell for many C++ fixes/improvements.
  
!    • Jeffrey Siegal for helping RMS with the original design of GCC,
       some code which handles the parse tree and RTL data structures,
       constant folding and help with the original VAX & m68k ports.
  
!    • Kenny Simpson for prompting libstdc++ fixes due to defect reports
       from the LWG (thereby keeping GCC in line with updates from the
       ISO).
  
!    • Franz Sirl for his ongoing work with making the PPC port stable for
       GNU/Linux.
  
!    • Andrey Slepuhin for assorted AIX hacking.
  
!    • Trevor Smigiel for contributing the SPU port.
  
!    • Christopher Smith did the port for Convex machines.
  
!    • Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
       Retired from GCC maintainership August 2010, having mentored two
       new maintainers into the role.
  
!    • Randy Smith finished the Sun FPA support.
  
!    • Ed Smith-Rowland for his continuous work on libstdc++-v3, special
!      functions, ‘<random>’, and various improvements to C++11 features.
  
!    • Scott Snyder for queue, iterator, istream, and string fixes and
       libstdc++ testsuite entries.  Also for providing the patch to G77
!      to add rudimentary support for ‘INTEGER*1’, ‘INTEGER*2’, and
!      ‘LOGICAL*1’.
  
!    • Zdenek Sojka for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Arseny Solokha for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Jayant Sonar for contributing the CR16 port.
  
!    • Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
  
!    • Richard Stallman, for writing the original GCC and launching the
       GNU project.
  
!    • Jan Stein of the Chalmers Computer Society provided support for
       Genix, as well as part of the 32000 machine description.
  
!    • Gerhard Steinmetz for running automated regression testing of GCC
       and reporting numerous bugs.
  
!    • Nigel Stephens for various mips16 related fixes/improvements.
  
!    • Jonathan Stone wrote the machine description for the Pyramid
       computer.
  
!    • Graham Stott for various infrastructure improvements.
  
!    • John Stracke for his Java HTTP protocol fixes.
  
!    • Mike Stump for his Elxsi port, G++ contributions over the years and
       more recently his vxworks contributions
  
!    • Jeff Sturm for Java porting help, bug fixes, and encouragement.
  
!    • Zhendong Su for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Chengnian Sun for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Shigeya Suzuki for this fixes for the bsdi platforms.
  
!    • Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
       support, general configury hacking, fixincludes, etc.
  
!    • Holger Teutsch provided the support for the Clipper CPU.
  
!    • Gary Thomas for his ongoing work to make the PPC work for
       GNU/Linux.
  
!    • Paul Thomas for contributions to GNU Fortran.
  
!    • Philipp Thomas for random bug fixes throughout the compiler
  
!    • Jason Thorpe for thread support in libstdc++ on NetBSD.
  
!    • Kresten Krab Thorup wrote the run time support for the Objective-C
       language and the fantastic Java bytecode interpreter.
  
!    • Michael Tiemann for random bug fixes, the first instruction
       scheduler, initial C++ support, function integration, NS32k, SPARC
       and M88k machine description work, delay slot scheduling.
  
!    • Andreas Tobler for his work porting libgcj to Darwin.
  
!    • Teemu Torma for thread safe exception handling support.
  
!    • Leonard Tower wrote parts of the parser, RTL generator, and RTL
       definitions, and of the VAX machine description.
  
!    • Daniel Towner and Hariharan Sandanagobalane contributed and
       maintain the picoChip port.
  
!    • Tom Tromey for internationalization support and for his many Java
       contributions and libgcj maintainership.
  
!    • Lassi Tuura for improvements to config.guess to determine HP
       processor types.
  
!    • Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
  
!    • Andy Vaught for the design and initial implementation of the GNU
       Fortran front end.
  
!    • Brent Verner for work with the libstdc++ cshadow files and their
       associated configure steps.
  
!    • Todd Vierling for contributions for NetBSD ports.
  
!    • Andrew Waterman for contributing the RISC-V port, as well as
       maintaining it.
  
!    • Jonathan Wakely for contributing to and maintaining libstdc++.
  
!    • Dean Wakerley for converting the install documentation from HTML to
       texinfo in time for GCC 3.0.
  
!    • Krister Walfridsson for random bug fixes.
  
!    • Feng Wang for contributions to GNU Fortran.
  
!    • Stephen M. Webb for time and effort on making libstdc++ shadow
       files work with the tricky Solaris 8+ headers, and for pushing the
       build-time header tree.  Also, for starting and driving the
!      ‘<regex>’ effort.
  
!    • John Wehle for various improvements for the x86 code generator,
       related infrastructure improvements to help x86 code generation,
       value range propagation and other work, WE32k port.
  
!    • Ulrich Weigand for work on the s390 port.
  
!    • Janus Weil for contributions to GNU Fortran.
  
!    • Zack Weinberg for major work on cpplib and various other bug fixes.
  
!    • Matt Welsh for help with Linux Threads support in GCJ.
  
!    • Urban Widmark for help fixing java.io.
  
!    • Mark Wielaard for new Java library code and his work integrating
       with Classpath.
  
!    • Dale Wiles helped port GCC to the Tahoe.
  
!    • Bob Wilson from Tensilica, Inc. for the Xtensa port.
  
!    • Jim Wilson for his direction via the steering committee, tackling
       hard problems in various places that nobody else wanted to work on,
       strength reduction and other loop optimizations.
  
!    • Paul Woegerer and Tal Agmon for the CRX port.
  
!    • Carlo Wood for various fixes.
  
!    • Tom Wood for work on the m88k port.
  
!    • Chung-Ju Wu for his work on the Andes NDS32 port.
  
!    • Canqun Yang for work on GNU Fortran.
  
!    • Masanobu Yuhara of Fujitsu Laboratories implemented the machine
       description for the Tron architecture (specifically, the Gmicro).
  
!    • Kevin Zachmann helped port GCC to the Tahoe.
  
!    • Ayal Zaks for Swing Modulo Scheduling (SMS).
  
!    • Qirun Zhang for running automated regression testing of GCC and
       reporting numerous bugs.
  
!    • Xiaoqiang Zhang for work on GNU Fortran.
  
!    • Gilles Zunino for help porting Java to Irix.
  
   The following people are recognized for their contributions to GNAT,
  the Ada front end of GCC:
!    • Bernard Banner
  
!    • Romain Berrendonner
  
!    • Geert Bosch
  
!    • Emmanuel Briot
  
!    • Joel Brobecker
  
!    • Ben Brosgol
  
!    • Vincent Celier
  
!    • Arnaud Charlet
  
!    • Chien Chieng
  
!    • Cyrille Comar
  
!    • Cyrille Crozes
  
!    • Robert Dewar
  
!    • Gary Dismukes
  
!    • Robert Duff
  
!    • Ed Falis
  
!    • Ramon Fernandez
  
!    • Sam Figueroa
  
!    • Vasiliy Fofanov
  
!    • Michael Friess
  
!    • Franco Gasperoni
  
!    • Ted Giering
  
!    • Matthew Gingell
  
!    • Laurent Guerby
  
!    • Jerome Guitton
  
!    • Olivier Hainque
  
!    • Jerome Hugues
  
!    • Hristian Kirtchev
  
!    • Jerome Lambourg
  
!    • Bruno Leclerc
  
!    • Albert Lee
  
!    • Sean McNeil
  
!    • Javier Miranda
  
!    • Laurent Nana
  
!    • Pascal Obry
  
!    • Dong-Ik Oh
  
!    • Laurent Pautet
  
!    • Brett Porter
  
!    • Thomas Quinot
  
!    • Nicolas Roche
  
!    • Pat Rogers
  
!    • Jose Ruiz
  
!    • Douglas Rupp
  
!    • Sergey Rybin
  
!    • Gail Schenker
  
!    • Ed Schonberg
  
!    • Nicolas Setton
  
!    • Samuel Tardieu
  
   The following people are recognized for their contributions of new
  features, bug reports, testing and integration of classpath/libgcj for
  GCC version 4.1:
!    • Lillian Angel for ‘JTree’ implementation and lots Free Swing
       additions and bug fixes.
  
!    • Wolfgang Baer for ‘GapContent’ bug fixes.
  
!    • Anthony Balkissoon for ‘JList’, Free Swing 1.5 updates and mouse
!      event fixes, lots of Free Swing work including ‘JTable’ editing.
  
!    • Stuart Ballard for RMI constant fixes.
  
!    • Goffredo Baroncelli for ‘HTTPURLConnection’ fixes.
  
!    • Gary Benson for ‘MessageFormat’ fixes.
  
!    • Daniel Bonniot for ‘Serialization’ fixes.
  
!    • Chris Burdess for lots of gnu.xml and http protocol fixes, ‘StAX’
!      and ‘DOM xml:id’ support.
  
!    • Ka-Hing Cheung for ‘TreePath’ and ‘TreeSelection’ fixes.
  
!    • Archie Cobbs for build fixes, VM interface updates,
!      ‘URLClassLoader’ updates.
  
!    • Kelley Cook for build fixes.
  
!    • Martin Cordova for Suggestions for better ‘SocketTimeoutException’.
  
!    • David Daney for ‘BitSet’ bug fixes, ‘HttpURLConnection’ rewrite and
       improvements.
  
!    • Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
       2D support.  Lots of imageio framework additions, lots of AWT and
       Free Swing bug fixes.
  
!    • Jeroen Frijters for ‘ClassLoader’ and nio cleanups, serialization
!      fixes, better ‘Proxy’ support, bug fixes and IKVM integration.
  
!    • Santiago Gala for ‘AccessControlContext’ fixes.
  
!    • Nicolas Geoffray for ‘VMClassLoader’ and ‘AccessController’
       improvements.
  
!    • David Gilbert for ‘basic’ and ‘metal’ icon and plaf support and
       lots of documenting, Lots of Free Swing and metal theme additions.
!      ‘MetalIconFactory’ implementation.
  
!    • Anthony Green for ‘MIDI’ framework, ‘ALSA’ and ‘DSSI’ providers.
  
!    • Andrew Haley for ‘Serialization’ and ‘URLClassLoader’ fixes, gcj
       build speedups.
  
!    • Kim Ho for ‘JFileChooser’ implementation.
  
!    • Andrew John Hughes for ‘Locale’ and net fixes, URI RFC2986 updates,
!      ‘Serialization’ fixes, ‘Properties’ XML support and generic branch
       work, VMIntegration guide update.
  
!    • Bastiaan Huisman for ‘TimeZone’ bug fixing.
  
!    • Andreas Jaeger for mprec updates.
  
!    • Paul Jenner for better ‘-Werror’ support.
  
!    • Ito Kazumitsu for ‘NetworkInterface’ implementation and updates.
  
!    • Roman Kennke for ‘BoxLayout’, ‘GrayFilter’ and ‘SplitPane’, plus
       bug fixes all over.  Lots of Free Swing work including styled text.
  
!    • Simon Kitching for ‘String’ cleanups and optimization suggestions.
  
!    • Michael Koch for configuration fixes, ‘Locale’ updates, bug and
       build fixes.
  
!    • Guilhem Lavaux for configuration, thread and channel fixes and
!      Kaffe integration.  JCL native ‘Pointer’ updates.  Logger bug
       fixes.
  
!    • David Lichteblau for JCL support library global/local reference
       cleanups.
  
!    • Aaron Luchko for JDWP updates and documentation fixes.
  
!    • Ziga Mahkovec for ‘Graphics2D’ upgraded to Cairo 0.5 and new regex
       features.
  
!    • Sven de Marothy for BMP imageio support, CSS and ‘TextLayout’
!      fixes.  ‘GtkImage’ rewrite, 2D, awt, free swing and date/time fixes
       and implementing the Qt4 peers.
  
!    • Casey Marshall for crypto algorithm fixes, ‘FileChannel’ lock,
!      ‘SystemLogger’ and ‘FileHandler’ rotate implementations, NIO
!      ‘FileChannel.map’ support, security and policy updates.
  
!    • Bryce McKinlay for RMI work.
  
!    • Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
       testing and documenting.
  
!    • Kalle Olavi Niemitalo for build fixes.
  
!    • Rainer Orth for build fixes.
  
!    • Andrew Overholt for ‘File’ locking fixes.
  
!    • Ingo Proetel for ‘Image’, ‘Logger’ and ‘URLClassLoader’ updates.
  
!    • Olga Rodimina for ‘MenuSelectionManager’ implementation.
  
!    • Jan Roehrich for ‘BasicTreeUI’ and ‘JTree’ fixes.
  
!    • Julian Scheid for documentation updates and gjdoc support.
  
!    • Christian Schlichtherle for zip fixes and cleanups.
  
!    • Robert Schuster for documentation updates and beans fixes,
!      ‘TreeNode’ enumerations and ‘ActionCommand’ and various fixes, XML
       and URL, AWT and Free Swing bug fixes.
  
!    • Keith Seitz for lots of JDWP work.
  
!    • Christian Thalinger for 64-bit cleanups, Configuration and VM
!      interface fixes and ‘CACAO’ integration, ‘fdlibm’ updates.
  
!    • Gael Thomas for ‘VMClassLoader’ boot packages support suggestions.
  
!    • Andreas Tobler for Darwin and Solaris testing and fixing, ‘Qt4’
!      support for Darwin / macOS, ‘Graphics2D’ support, ‘gtk+’ updates.
  
!    • Dalibor Topic for better ‘DEBUG’ support, build cleanups and Kaffe
!      integration.  ‘Qt4’ build infrastructure, ‘SHA1PRNG’ and
!      ‘GdkPixbugDecoder’ updates.
  
!    • Tom Tromey for Eclipse integration, generics work, lots of bug
       fixes and gcj integration including coordinating The Big Merge.
  
!    • Mark Wielaard for bug fixes, packaging and release management,
!      ‘Clipboard’ implementation, system call interrupts and network
!      timeouts and ‘GdkPixpufDecoder’ fixes.
  
   In addition to the above, all of which also contributed time and energy
  in testing GCC, we would like to thank the following for their
  contributions to testing:
  
!    • Michael Abd-El-Malek
  
!    • Thomas Arend
  
!    • Bonzo Armstrong
  
!    • Steven Ashe
  
!    • Chris Baldwin
  
!    • David Billinghurst
  
!    • Jim Blandy
  
!    • Stephane Bortzmeyer
  
!    • Horst von Brand
  
!    • Frank Braun
  
!    • Rodney Brown
  
!    • Sidney Cadot
  
!    • Bradford Castalia
  
!    • Robert Clark
  
!    • Jonathan Corbet
  
!    • Ralph Doncaster
  
!    • Richard Emberson
  
!    • Levente Farkas
  
!    • Graham Fawcett
  
!    • Mark Fernyhough
  
!    • Robert A. French
  
!    • Jörgen Freyh
  
!    • Mark K. Gardner
  
!    • Charles-Antoine Gauthier
  
!    • Yung Shing Gene
  
!    • David Gilbert
  
!    • Simon Gornall
  
!    • Fred Gray
  
!    • John Griffin
  
!    • Patrik Hagglund
  
!    • Phil Hargett
  
!    • Amancio Hasty
  
!    • Takafumi Hayashi
  
!    • Bryan W. Headley
  
!    • Kevin B. Hendricks
  
!    • Joep Jansen
  
!    • Christian Joensson
  
!    • Michel Kern
  
!    • David Kidd
  
!    • Tobias Kuipers
  
!    • Anand Krishnaswamy
  
!    • A. O. V. Le Blanc
  
!    • llewelly
  
!    • Damon Love
  
!    • Brad Lucier
  
!    • Matthias Klose
  
!    • Martin Knoblauch
  
!    • Rick Lutowski
  
!    • Jesse Macnish
  
!    • Stefan Morrell
  
!    • Anon A. Mous
  
!    • Matthias Mueller
  
!    • Pekka Nikander
  
!    • Rick Niles
  
!    • Jon Olson
  
!    • Magnus Persson
  
!    • Chris Pollard
  
!    • Richard Polton
  
!    • Derk Reefman
  
!    • David Rees
  
!    • Paul Reilly
  
!    • Tom Reilly
  
!    • Torsten Rueger
  
!    • Danny Sadinoff
  
!    • Marc Schifer
  
!    • Erik Schnetter
  
!    • Wayne K. Schroll
  
!    • David Schuler
  
!    • Vin Shelton
  
!    • Tim Souder
  
!    • Adam Sulmicki
  
!    • Bill Thorson
  
!    • George Talbot
  
!    • Pedro A. M. Vazquez
  
!    • Gregory Warnes
  
!    • Ian Watson
  
!    • David E. Young
  
!    • And many others
  
   And finally we'd like to thank everyone who uses the compiler, provides
  feedback and generally reminds us why we're doing this work in the first
*************** File: gccint.info,  Node: Option Index,
*** 51840,51848 ****
  Option Index
  ************
  
! GCC's command line options are indexed here without any initial '-' or
! '--'.  Where an option has both positive and negative forms (such as
! '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
  indexed under the most appropriate form; it may sometimes be useful to
  look up both forms.
  
--- 51841,51849 ----
  Option Index
  ************
  
! GCC's command line options are indexed here without any initial ‘-’ or
! ‘--’.  Where an option has both positive and negative forms (such as
! ‘-fOPTION’ and ‘-fno-OPTION’), relevant entries in the manual are
  indexed under the most appropriate form; it may sometimes be useful to
  look up both forms.
  
*************** Concept Index
*** 51865,51980 ****
  [index]
  * Menu:
  
- * ! in constraint:                       Multi-Alternative.  (line   48)
- * "real" instructions, RTL SSA:          RTL SSA Basic Blocks.
-                                                              (line   11)
- * # in constraint:                       Modifiers.          (line   78)
- * # in template:                         Output Template.    (line   66)
- * #pragma:                               Misc.               (line  422)
- * $ in constraint:                       Multi-Alternative.  (line   57)
- * % in constraint:                       Modifiers.          (line   52)
- * % in GTY option:                       GTY Options.        (line   18)
- * % in template:                         Output Template.    (line    6)
- * & in constraint:                       Modifiers.          (line   25)
- * (gimple_stmt_iterator:                 GIMPLE API.         (line   31)
- * (nil):                                 RTL Objects.        (line   73)
- * * in constraint:                       Modifiers.          (line   83)
- * * in template:                         Output Statement.   (line   29)
- * *gimple_build_asm_vec:                 GIMPLE_ASM.         (line    6)
- * *gimple_build_assign:                  GIMPLE_ASSIGN.      (line    6)
- * *gimple_build_assign <1>:              GIMPLE_ASSIGN.      (line   18)
- * *gimple_build_assign <2>:              GIMPLE_ASSIGN.      (line   29)
- * *gimple_build_assign <3>:              GIMPLE_ASSIGN.      (line   35)
- * *gimple_build_bind:                    GIMPLE_BIND.        (line    6)
- * *gimple_build_call:                    GIMPLE_CALL.        (line    6)
- * *gimple_build_call_from_tree:          GIMPLE_CALL.        (line   15)
- * *gimple_build_call_vec:                GIMPLE_CALL.        (line   25)
- * *gimple_build_catch:                   GIMPLE_CATCH.       (line    6)
- * *gimple_build_cond:                    GIMPLE_COND.        (line    6)
- * *gimple_build_cond_from_tree:          GIMPLE_COND.        (line   14)
- * *gimple_build_debug_bind:              GIMPLE_DEBUG.       (line    6)
- * *gimple_build_eh_filter:               GIMPLE_EH_FILTER.   (line    6)
- * *gimple_build_goto:                    GIMPLE_GOTO.        (line    6)
- * *gimple_build_label:                   GIMPLE_LABEL.       (line    6)
- * *gimple_build_omp_atomic_load:         GIMPLE_OMP_ATOMIC_LOAD.
-                                                              (line    6)
- * *gimple_build_omp_atomic_store:        GIMPLE_OMP_ATOMIC_STORE.
-                                                              (line    6)
- * *gimple_build_omp_continue:            GIMPLE_OMP_CONTINUE.
-                                                              (line    6)
- * *gimple_build_omp_critical:            GIMPLE_OMP_CRITICAL.
-                                                              (line    6)
- * *gimple_build_omp_for:                 GIMPLE_OMP_FOR.     (line    6)
- * *gimple_build_omp_parallel:            GIMPLE_OMP_PARALLEL.
-                                                              (line    6)
- * *gimple_build_omp_sections:            GIMPLE_OMP_SECTIONS.
-                                                              (line    6)
- * *gimple_build_omp_single:              GIMPLE_OMP_SINGLE.  (line    6)
- * *gimple_build_resx:                    GIMPLE_RESX.        (line    6)
- * *gimple_build_return:                  GIMPLE_RETURN.      (line    6)
- * *gimple_build_switch:                  GIMPLE_SWITCH.      (line    6)
- * *gimple_build_try:                     GIMPLE_TRY.         (line    6)
- * + in constraint:                       Modifiers.          (line   12)
- * -fsection-anchors:                     Special Accessors.  (line  117)
- * -fsection-anchors <1>:                 Anchored Addresses. (line    6)
- * /c in RTL dump:                        Flags.              (line  230)
- * /f in RTL dump:                        Flags.              (line  238)
- * /i in RTL dump:                        Flags.              (line  283)
- * /j in RTL dump:                        Flags.              (line  295)
- * /s in RTL dump:                        Flags.              (line  254)
- * /u in RTL dump:                        Flags.              (line  307)
- * /v in RTL dump:                        Flags.              (line  339)
- * 0 in constraint:                       Simple Constraints. (line  128)
- * < in constraint:                       Simple Constraints. (line   47)
- * = in constraint:                       Modifiers.          (line    8)
- * > in constraint:                       Simple Constraints. (line   59)
- * ? in constraint:                       Multi-Alternative.  (line   42)
- * @ in instruction pattern names:        Parameterized Names.
-                                                              (line    6)
- * \:                                     Output Template.    (line   46)
- * ^ in constraint:                       Multi-Alternative.  (line   53)
  * __absvdi2:                             Integer library routines.
                                                               (line  106)
  * __absvsi2:                             Integer library routines.
                                                               (line  105)
  * __addda3:                              Fixed-point fractional library routines.
!                                                              (line   52)
  * __adddf3:                              Soft float library routines.
                                                               (line   22)
  * __adddq3:                              Fixed-point fractional library routines.
!                                                              (line   39)
  * __addha3:                              Fixed-point fractional library routines.
!                                                              (line   49)
  * __addhq3:                              Fixed-point fractional library routines.
!                                                              (line   37)
  * __addqq3:                              Fixed-point fractional library routines.
!                                                              (line   35)
  * __addsa3:                              Fixed-point fractional library routines.
!                                                              (line   51)
  * __addsf3:                              Soft float library routines.
                                                               (line   21)
  * __addsq3:                              Fixed-point fractional library routines.
!                                                              (line   38)
  * __addta3:                              Fixed-point fractional library routines.
!                                                              (line   53)
  * __addtf3:                              Soft float library routines.
                                                               (line   23)
  * __adduda3:                             Fixed-point fractional library routines.
!                                                              (line   59)
  * __addudq3:                             Fixed-point fractional library routines.
!                                                              (line   47)
  * __adduha3:                             Fixed-point fractional library routines.
!                                                              (line   55)
  * __adduhq3:                             Fixed-point fractional library routines.
!                                                              (line   43)
  * __adduqq3:                             Fixed-point fractional library routines.
!                                                              (line   41)
  * __addusa3:                             Fixed-point fractional library routines.
!                                                              (line   57)
  * __addusq3:                             Fixed-point fractional library routines.
!                                                              (line   45)
  * __adduta3:                             Fixed-point fractional library routines.
!                                                              (line   61)
  * __addvdi3:                             Integer library routines.
                                                               (line  110)
  * __addvsi3:                             Integer library routines.
--- 51866,51913 ----
  [index]
  * Menu:
  
  * __absvdi2:                             Integer library routines.
                                                               (line  106)
  * __absvsi2:                             Integer library routines.
                                                               (line  105)
  * __addda3:                              Fixed-point fractional library routines.
!                                                              (line   44)
  * __adddf3:                              Soft float library routines.
                                                               (line   22)
  * __adddq3:                              Fixed-point fractional library routines.
!                                                              (line   31)
  * __addha3:                              Fixed-point fractional library routines.
!                                                              (line   41)
  * __addhq3:                              Fixed-point fractional library routines.
!                                                              (line   29)
  * __addqq3:                              Fixed-point fractional library routines.
!                                                              (line   27)
  * __addsa3:                              Fixed-point fractional library routines.
!                                                              (line   43)
  * __addsf3:                              Soft float library routines.
                                                               (line   21)
  * __addsq3:                              Fixed-point fractional library routines.
!                                                              (line   30)
  * __addta3:                              Fixed-point fractional library routines.
!                                                              (line   45)
  * __addtf3:                              Soft float library routines.
                                                               (line   23)
  * __adduda3:                             Fixed-point fractional library routines.
!                                                              (line   51)
  * __addudq3:                             Fixed-point fractional library routines.
!                                                              (line   39)
  * __adduha3:                             Fixed-point fractional library routines.
!                                                              (line   47)
  * __adduhq3:                             Fixed-point fractional library routines.
!                                                              (line   35)
  * __adduqq3:                             Fixed-point fractional library routines.
!                                                              (line   33)
  * __addusa3:                             Fixed-point fractional library routines.
!                                                              (line   49)
  * __addusq3:                             Fixed-point fractional library routines.
!                                                              (line   37)
  * __adduta3:                             Fixed-point fractional library routines.
!                                                              (line   53)
  * __addvdi3:                             Integer library routines.
                                                               (line  110)
  * __addvsi3:                             Integer library routines.
*************** Concept Index
*** 51982,52044 ****
  * __addxf3:                              Soft float library routines.
                                                               (line   25)
  * __ashlda3:                             Fixed-point fractional library routines.
!                                                              (line  358)
  * __ashldi3:                             Integer library routines.
                                                               (line   13)
  * __ashldq3:                             Fixed-point fractional library routines.
!                                                              (line  346)
  * __ashlha3:                             Fixed-point fractional library routines.
!                                                              (line  356)
  * __ashlhq3:                             Fixed-point fractional library routines.
!                                                              (line  344)
  * __ashlqq3:                             Fixed-point fractional library routines.
!                                                              (line  343)
  * __ashlsa3:                             Fixed-point fractional library routines.
!                                                              (line  357)
  * __ashlsi3:                             Integer library routines.
                                                               (line   12)
  * __ashlsq3:                             Fixed-point fractional library routines.
!                                                              (line  345)
  * __ashlta3:                             Fixed-point fractional library routines.
!                                                              (line  359)
  * __ashlti3:                             Integer library routines.
                                                               (line   14)
  * __ashluda3:                            Fixed-point fractional library routines.
!                                                              (line  365)
  * __ashludq3:                            Fixed-point fractional library routines.
!                                                              (line  354)
  * __ashluha3:                            Fixed-point fractional library routines.
!                                                              (line  361)
  * __ashluhq3:                            Fixed-point fractional library routines.
!                                                              (line  350)
  * __ashluqq3:                            Fixed-point fractional library routines.
!                                                              (line  348)
  * __ashlusa3:                            Fixed-point fractional library routines.
!                                                              (line  363)
  * __ashlusq3:                            Fixed-point fractional library routines.
!                                                              (line  352)
  * __ashluta3:                            Fixed-point fractional library routines.
!                                                              (line  367)
  * __ashrda3:                             Fixed-point fractional library routines.
!                                                              (line  378)
  * __ashrdi3:                             Integer library routines.
                                                               (line   18)
  * __ashrdq3:                             Fixed-point fractional library routines.
!                                                              (line  374)
  * __ashrha3:                             Fixed-point fractional library routines.
!                                                              (line  376)
  * __ashrhq3:                             Fixed-point fractional library routines.
!                                                              (line  372)
  * __ashrqq3:                             Fixed-point fractional library routines.
!                                                              (line  371)
  * __ashrsa3:                             Fixed-point fractional library routines.
!                                                              (line  377)
  * __ashrsi3:                             Integer library routines.
                                                               (line   17)
  * __ashrsq3:                             Fixed-point fractional library routines.
!                                                              (line  373)
  * __ashrta3:                             Fixed-point fractional library routines.
!                                                              (line  379)
  * __ashrti3:                             Integer library routines.
                                                               (line   19)
  * __bid_adddd3:                          Decimal float library routines.
--- 51915,51977 ----
  * __addxf3:                              Soft float library routines.
                                                               (line   25)
  * __ashlda3:                             Fixed-point fractional library routines.
!                                                              (line  350)
  * __ashldi3:                             Integer library routines.
                                                               (line   13)
  * __ashldq3:                             Fixed-point fractional library routines.
!                                                              (line  338)
  * __ashlha3:                             Fixed-point fractional library routines.
!                                                              (line  348)
  * __ashlhq3:                             Fixed-point fractional library routines.
!                                                              (line  336)
  * __ashlqq3:                             Fixed-point fractional library routines.
!                                                              (line  335)
  * __ashlsa3:                             Fixed-point fractional library routines.
!                                                              (line  349)
  * __ashlsi3:                             Integer library routines.
                                                               (line   12)
  * __ashlsq3:                             Fixed-point fractional library routines.
!                                                              (line  337)
  * __ashlta3:                             Fixed-point fractional library routines.
!                                                              (line  351)
  * __ashlti3:                             Integer library routines.
                                                               (line   14)
  * __ashluda3:                            Fixed-point fractional library routines.
!                                                              (line  357)
  * __ashludq3:                            Fixed-point fractional library routines.
!                                                              (line  346)
  * __ashluha3:                            Fixed-point fractional library routines.
!                                                              (line  353)
  * __ashluhq3:                            Fixed-point fractional library routines.
!                                                              (line  342)
  * __ashluqq3:                            Fixed-point fractional library routines.
!                                                              (line  340)
  * __ashlusa3:                            Fixed-point fractional library routines.
!                                                              (line  355)
  * __ashlusq3:                            Fixed-point fractional library routines.
!                                                              (line  344)
  * __ashluta3:                            Fixed-point fractional library routines.
!                                                              (line  359)
  * __ashrda3:                             Fixed-point fractional library routines.
!                                                              (line  370)
  * __ashrdi3:                             Integer library routines.
                                                               (line   18)
  * __ashrdq3:                             Fixed-point fractional library routines.
!                                                              (line  366)
  * __ashrha3:                             Fixed-point fractional library routines.
!                                                              (line  368)
  * __ashrhq3:                             Fixed-point fractional library routines.
!                                                              (line  364)
  * __ashrqq3:                             Fixed-point fractional library routines.
!                                                              (line  363)
  * __ashrsa3:                             Fixed-point fractional library routines.
!                                                              (line  369)
  * __ashrsi3:                             Integer library routines.
                                                               (line   17)
  * __ashrsq3:                             Fixed-point fractional library routines.
!                                                              (line  365)
  * __ashrta3:                             Fixed-point fractional library routines.
!                                                              (line  371)
  * __ashrti3:                             Integer library routines.
                                                               (line   19)
  * __bid_adddd3:                          Decimal float library routines.
*************** Concept Index
*** 52249,52295 ****
  * __clzti2:                              Integer library routines.
                                                               (line  131)
  * __cmpda2:                              Fixed-point fractional library routines.
!                                                              (line  458)
  * __cmpdf2:                              Soft float library routines.
!                                                              (line  192)
  * __cmpdi2:                              Integer library routines.
                                                               (line   86)
  * __cmpdq2:                              Fixed-point fractional library routines.
!                                                              (line  447)
  * __cmpha2:                              Fixed-point fractional library routines.
!                                                              (line  456)
  * __cmphq2:                              Fixed-point fractional library routines.
!                                                              (line  445)
  * __cmpqq2:                              Fixed-point fractional library routines.
!                                                              (line  444)
  * __cmpsa2:                              Fixed-point fractional library routines.
!                                                              (line  457)
  * __cmpsf2:                              Soft float library routines.
!                                                              (line  191)
  * __cmpsq2:                              Fixed-point fractional library routines.
!                                                              (line  446)
  * __cmpta2:                              Fixed-point fractional library routines.
!                                                              (line  459)
  * __cmptf2:                              Soft float library routines.
!                                                              (line  193)
  * __cmpti2:                              Integer library routines.
                                                               (line   87)
  * __cmpuda2:                             Fixed-point fractional library routines.
!                                                              (line  464)
  * __cmpudq2:                             Fixed-point fractional library routines.
!                                                              (line  454)
  * __cmpuha2:                             Fixed-point fractional library routines.
!                                                              (line  461)
  * __cmpuhq2:                             Fixed-point fractional library routines.
!                                                              (line  451)
  * __cmpuqq2:                             Fixed-point fractional library routines.
!                                                              (line  449)
  * __cmpusa2:                             Fixed-point fractional library routines.
!                                                              (line  463)
  * __cmpusq2:                             Fixed-point fractional library routines.
!                                                              (line  452)
  * __cmputa2:                             Fixed-point fractional library routines.
!                                                              (line  466)
  * __CTOR_LIST__:                         Initialization.     (line   25)
  * __ctzdi2:                              Integer library routines.
                                                               (line  137)
--- 52182,52228 ----
  * __clzti2:                              Integer library routines.
                                                               (line  131)
  * __cmpda2:                              Fixed-point fractional library routines.
!                                                              (line  450)
  * __cmpdf2:                              Soft float library routines.
!                                                              (line  191)
  * __cmpdi2:                              Integer library routines.
                                                               (line   86)
  * __cmpdq2:                              Fixed-point fractional library routines.
!                                                              (line  439)
  * __cmpha2:                              Fixed-point fractional library routines.
!                                                              (line  448)
  * __cmphq2:                              Fixed-point fractional library routines.
!                                                              (line  437)
  * __cmpqq2:                              Fixed-point fractional library routines.
!                                                              (line  436)
  * __cmpsa2:                              Fixed-point fractional library routines.
!                                                              (line  449)
  * __cmpsf2:                              Soft float library routines.
!                                                              (line  190)
  * __cmpsq2:                              Fixed-point fractional library routines.
!                                                              (line  438)
  * __cmpta2:                              Fixed-point fractional library routines.
!                                                              (line  451)
  * __cmptf2:                              Soft float library routines.
!                                                              (line  192)
  * __cmpti2:                              Integer library routines.
                                                               (line   87)
  * __cmpuda2:                             Fixed-point fractional library routines.
!                                                              (line  456)
  * __cmpudq2:                             Fixed-point fractional library routines.
!                                                              (line  446)
  * __cmpuha2:                             Fixed-point fractional library routines.
!                                                              (line  453)
  * __cmpuhq2:                             Fixed-point fractional library routines.
!                                                              (line  443)
  * __cmpuqq2:                             Fixed-point fractional library routines.
!                                                              (line  441)
  * __cmpusa2:                             Fixed-point fractional library routines.
!                                                              (line  455)
  * __cmpusq2:                             Fixed-point fractional library routines.
!                                                              (line  444)
  * __cmputa2:                             Fixed-point fractional library routines.
!                                                              (line  458)
  * __CTOR_LIST__:                         Initialization.     (line   25)
  * __ctzdi2:                              Integer library routines.
                                                               (line  137)
*************** Concept Index
*** 52298,52340 ****
  * __ctzti2:                              Integer library routines.
                                                               (line  138)
  * __divda3:                              Fixed-point fractional library routines.
!                                                              (line  234)
  * __divdc3:                              Soft float library routines.
!                                                              (line  279)
  * __divdf3:                              Soft float library routines.
                                                               (line   47)
  * __divdi3:                              Integer library routines.
                                                               (line   24)
  * __divdq3:                              Fixed-point fractional library routines.
!                                                              (line  229)
  * __divha3:                              Fixed-point fractional library routines.
!                                                              (line  231)
  * __divhq3:                              Fixed-point fractional library routines.
!                                                              (line  227)
  * __divmodbitint4:                       Integer library routines.
                                                               (line  202)
  * __divqq3:                              Fixed-point fractional library routines.
!                                                              (line  225)
  * __divsa3:                              Fixed-point fractional library routines.
!                                                              (line  233)
  * __divsc3:                              Soft float library routines.
!                                                              (line  277)
  * __divsf3:                              Soft float library routines.
                                                               (line   46)
  * __divsi3:                              Integer library routines.
                                                               (line   23)
  * __divsq3:                              Fixed-point fractional library routines.
!                                                              (line  228)
  * __divta3:                              Fixed-point fractional library routines.
!                                                              (line  235)
  * __divtc3:                              Soft float library routines.
!                                                              (line  281)
  * __divtf3:                              Soft float library routines.
                                                               (line   48)
  * __divti3:                              Integer library routines.
                                                               (line   25)
  * __divxc3:                              Soft float library routines.
!                                                              (line  283)
  * __divxf3:                              Soft float library routines.
                                                               (line   50)
  * __dpd_adddd3:                          Decimal float library routines.
--- 52231,52273 ----
  * __ctzti2:                              Integer library routines.
                                                               (line  138)
  * __divda3:                              Fixed-point fractional library routines.
!                                                              (line  226)
  * __divdc3:                              Soft float library routines.
!                                                              (line  278)
  * __divdf3:                              Soft float library routines.
                                                               (line   47)
  * __divdi3:                              Integer library routines.
                                                               (line   24)
  * __divdq3:                              Fixed-point fractional library routines.
!                                                              (line  221)
  * __divha3:                              Fixed-point fractional library routines.
!                                                              (line  223)
  * __divhq3:                              Fixed-point fractional library routines.
!                                                              (line  219)
  * __divmodbitint4:                       Integer library routines.
                                                               (line  202)
  * __divqq3:                              Fixed-point fractional library routines.
!                                                              (line  217)
  * __divsa3:                              Fixed-point fractional library routines.
!                                                              (line  225)
  * __divsc3:                              Soft float library routines.
!                                                              (line  276)
  * __divsf3:                              Soft float library routines.
                                                               (line   46)
  * __divsi3:                              Integer library routines.
                                                               (line   23)
  * __divsq3:                              Fixed-point fractional library routines.
!                                                              (line  220)
  * __divta3:                              Fixed-point fractional library routines.
!                                                              (line  227)
  * __divtc3:                              Soft float library routines.
!                                                              (line  280)
  * __divtf3:                              Soft float library routines.
                                                               (line   48)
  * __divti3:                              Integer library routines.
                                                               (line   25)
  * __divxc3:                              Soft float library routines.
!                                                              (line  282)
  * __divxf3:                              Soft float library routines.
                                                               (line   50)
  * __dpd_adddd3:                          Decimal float library routines.
*************** Concept Index
*** 52519,52529 ****
                                                               (line  258)
  * __DTOR_LIST__:                         Initialization.     (line   25)
  * __eqdf2:                               Soft float library routines.
-                                                              (line  222)
- * __eqsf2:                               Soft float library routines.
                                                               (line  221)
  * __eqtf2:                               Soft float library routines.
!                                                              (line  223)
  * __extenddftf2:                         Soft float library routines.
                                                               (line   67)
  * __extenddfxf2:                         Soft float library routines.
--- 52452,52462 ----
                                                               (line  258)
  * __DTOR_LIST__:                         Initialization.     (line   25)
  * __eqdf2:                               Soft float library routines.
                                                               (line  221)
+ * __eqsf2:                               Soft float library routines.
+                                                              (line  220)
  * __eqtf2:                               Soft float library routines.
!                                                              (line  222)
  * __extenddftf2:                         Soft float library routines.
                                                               (line   67)
  * __extenddfxf2:                         Soft float library routines.
*************** Concept Index
*** 52595,52611 ****
  * __fixxfti:                             Soft float library routines.
                                                               (line   95)
  * __floatbitintbf:                       Soft float library routines.
!                                                              (line  180)
  * __floatbitintdf:                       Soft float library routines.
!                                                              (line  172)
  * __floatbitinthf:                       Soft float library routines.
!                                                              (line  178)
  * __floatbitintsf:                       Soft float library routines.
                                                               (line  170)
  * __floatbitinttf:                       Soft float library routines.
!                                                              (line  176)
  * __floatbitintxf:                       Soft float library routines.
!                                                              (line  174)
  * __floatdidf:                           Soft float library routines.
                                                               (line  127)
  * __floatdisf:                           Soft float library routines.
--- 52528,52544 ----
  * __fixxfti:                             Soft float library routines.
                                                               (line   95)
  * __floatbitintbf:                       Soft float library routines.
!                                                              (line  179)
  * __floatbitintdf:                       Soft float library routines.
!                                                              (line  171)
  * __floatbitinthf:                       Soft float library routines.
!                                                              (line  177)
  * __floatbitintsf:                       Soft float library routines.
                                                               (line  170)
  * __floatbitinttf:                       Soft float library routines.
!                                                              (line  175)
  * __floatbitintxf:                       Soft float library routines.
!                                                              (line  173)
  * __floatdidf:                           Soft float library routines.
                                                               (line  127)
  * __floatdisf:                           Soft float library routines.
*************** Concept Index
*** 52655,53925 ****
  * __floatuntixf:                         Soft float library routines.
                                                               (line  153)
  * __fractdadf:                           Fixed-point fractional library routines.
!                                                              (line  643)
  * __fractdadi:                           Fixed-point fractional library routines.
!                                                              (line  640)
  * __fractdadq:                           Fixed-point fractional library routines.
!                                                              (line  623)
  * __fractdaha2:                          Fixed-point fractional library routines.
!                                                              (line  624)
  * __fractdahi:                           Fixed-point fractional library routines.
!                                                              (line  638)
  * __fractdahq:                           Fixed-point fractional library routines.
!                                                              (line  621)
  * __fractdaqi:                           Fixed-point fractional library routines.
!                                                              (line  637)
  * __fractdaqq:                           Fixed-point fractional library routines.
!                                                              (line  620)
  * __fractdasa2:                          Fixed-point fractional library routines.
!                                                              (line  625)
  * __fractdasf:                           Fixed-point fractional library routines.
!                                                              (line  642)
  * __fractdasi:                           Fixed-point fractional library routines.
!                                                              (line  639)
  * __fractdasq:                           Fixed-point fractional library routines.
!                                                              (line  622)
  * __fractdata2:                          Fixed-point fractional library routines.
!                                                              (line  626)
  * __fractdati:                           Fixed-point fractional library routines.
!                                                              (line  641)
  * __fractdauda:                          Fixed-point fractional library routines.
!                                                              (line  634)
  * __fractdaudq:                          Fixed-point fractional library routines.
!                                                              (line  630)
  * __fractdauha:                          Fixed-point fractional library routines.
!                                                              (line  632)
  * __fractdauhq:                          Fixed-point fractional library routines.
!                                                              (line  628)
  * __fractdauqq:                          Fixed-point fractional library routines.
!                                                              (line  627)
  * __fractdausa:                          Fixed-point fractional library routines.
!                                                              (line  633)
  * __fractdausq:                          Fixed-point fractional library routines.
!                                                              (line  629)
  * __fractdauta:                          Fixed-point fractional library routines.
!                                                              (line  635)
  * __fractdfda:                           Fixed-point fractional library routines.
!                                                              (line 1032)
  * __fractdfdq:                           Fixed-point fractional library routines.
!                                                              (line 1029)
  * __fractdfha:                           Fixed-point fractional library routines.
!                                                              (line 1030)
  * __fractdfhq:                           Fixed-point fractional library routines.
!                                                              (line 1027)
  * __fractdfqq:                           Fixed-point fractional library routines.
!                                                              (line 1026)
  * __fractdfsa:                           Fixed-point fractional library routines.
!                                                              (line 1031)
  * __fractdfsq:                           Fixed-point fractional library routines.
!                                                              (line 1028)
  * __fractdfta:                           Fixed-point fractional library routines.
!                                                              (line 1033)
  * __fractdfuda:                          Fixed-point fractional library routines.
!                                                              (line 1040)
  * __fractdfudq:                          Fixed-point fractional library routines.
!                                                              (line 1037)
  * __fractdfuha:                          Fixed-point fractional library routines.
!                                                              (line 1038)
  * __fractdfuhq:                          Fixed-point fractional library routines.
!                                                              (line 1035)
  * __fractdfuqq:                          Fixed-point fractional library routines.
!                                                              (line 1034)
  * __fractdfusa:                          Fixed-point fractional library routines.
!                                                              (line 1039)
  * __fractdfusq:                          Fixed-point fractional library routines.
!                                                              (line 1036)
  * __fractdfuta:                          Fixed-point fractional library routines.
!                                                              (line 1041)
  * __fractdida:                           Fixed-point fractional library routines.
!                                                              (line  982)
  * __fractdidq:                           Fixed-point fractional library routines.
!                                                              (line  979)
  * __fractdiha:                           Fixed-point fractional library routines.
!                                                              (line  980)
  * __fractdihq:                           Fixed-point fractional library routines.
!                                                              (line  977)
  * __fractdiqq:                           Fixed-point fractional library routines.
!                                                              (line  976)
  * __fractdisa:                           Fixed-point fractional library routines.
!                                                              (line  981)
  * __fractdisq:                           Fixed-point fractional library routines.
!                                                              (line  978)
  * __fractdita:                           Fixed-point fractional library routines.
!                                                              (line  983)
  * __fractdiuda:                          Fixed-point fractional library routines.
!                                                              (line  990)
  * __fractdiudq:                          Fixed-point fractional library routines.
!                                                              (line  987)
  * __fractdiuha:                          Fixed-point fractional library routines.
!                                                              (line  988)
  * __fractdiuhq:                          Fixed-point fractional library routines.
!                                                              (line  985)
  * __fractdiuqq:                          Fixed-point fractional library routines.
!                                                              (line  984)
  * __fractdiusa:                          Fixed-point fractional library routines.
!                                                              (line  989)
  * __fractdiusq:                          Fixed-point fractional library routines.
!                                                              (line  986)
  * __fractdiuta:                          Fixed-point fractional library routines.
!                                                              (line  991)
  * __fractdqda:                           Fixed-point fractional library routines.
!                                                              (line  551)
  * __fractdqdf:                           Fixed-point fractional library routines.
!                                                              (line  573)
  * __fractdqdi:                           Fixed-point fractional library routines.
!                                                              (line  570)
  * __fractdqha:                           Fixed-point fractional library routines.
!                                                              (line  549)
  * __fractdqhi:                           Fixed-point fractional library routines.
!                                                              (line  568)
  * __fractdqhq2:                          Fixed-point fractional library routines.
!                                                              (line  547)
  * __fractdqqi:                           Fixed-point fractional library routines.
!                                                              (line  567)
  * __fractdqqq2:                          Fixed-point fractional library routines.
!                                                              (line  546)
  * __fractdqsa:                           Fixed-point fractional library routines.
!                                                              (line  550)
  * __fractdqsf:                           Fixed-point fractional library routines.
!                                                              (line  572)
  * __fractdqsi:                           Fixed-point fractional library routines.
!                                                              (line  569)
  * __fractdqsq2:                          Fixed-point fractional library routines.
!                                                              (line  548)
  * __fractdqta:                           Fixed-point fractional library routines.
!                                                              (line  552)
  * __fractdqti:                           Fixed-point fractional library routines.
-                                                              (line  571)
- * __fractdquda:                          Fixed-point fractional library routines.
                                                               (line  563)
  * __fractdqudq:                          Fixed-point fractional library routines.
!                                                              (line  558)
  * __fractdquha:                          Fixed-point fractional library routines.
!                                                              (line  560)
  * __fractdquhq:                          Fixed-point fractional library routines.
!                                                              (line  555)
  * __fractdquqq:                          Fixed-point fractional library routines.
!                                                              (line  553)
  * __fractdqusa:                          Fixed-point fractional library routines.
!                                                              (line  562)
  * __fractdqusq:                          Fixed-point fractional library routines.
!                                                              (line  556)
  * __fractdquta:                          Fixed-point fractional library routines.
!                                                              (line  565)
  * __fracthada2:                          Fixed-point fractional library routines.
!                                                              (line  579)
  * __fracthadf:                           Fixed-point fractional library routines.
!                                                              (line  597)
  * __fracthadi:                           Fixed-point fractional library routines.
!                                                              (line  594)
  * __fracthadq:                           Fixed-point fractional library routines.
!                                                              (line  577)
  * __fracthahi:                           Fixed-point fractional library routines.
!                                                              (line  592)
  * __fracthahq:                           Fixed-point fractional library routines.
!                                                              (line  575)
  * __fracthaqi:                           Fixed-point fractional library routines.
!                                                              (line  591)
  * __fracthaqq:                           Fixed-point fractional library routines.
!                                                              (line  574)
  * __fracthasa2:                          Fixed-point fractional library routines.
!                                                              (line  578)
  * __fracthasf:                           Fixed-point fractional library routines.
!                                                              (line  596)
  * __fracthasi:                           Fixed-point fractional library routines.
!                                                              (line  593)
  * __fracthasq:                           Fixed-point fractional library routines.
!                                                              (line  576)
  * __fracthata2:                          Fixed-point fractional library routines.
!                                                              (line  580)
  * __fracthati:                           Fixed-point fractional library routines.
!                                                              (line  595)
  * __fracthauda:                          Fixed-point fractional library routines.
!                                                              (line  588)
  * __fracthaudq:                          Fixed-point fractional library routines.
!                                                              (line  584)
  * __fracthauha:                          Fixed-point fractional library routines.
!                                                              (line  586)
  * __fracthauhq:                          Fixed-point fractional library routines.
!                                                              (line  582)
  * __fracthauqq:                          Fixed-point fractional library routines.
!                                                              (line  581)
  * __fracthausa:                          Fixed-point fractional library routines.
!                                                              (line  587)
  * __fracthausq:                          Fixed-point fractional library routines.
!                                                              (line  583)
  * __fracthauta:                          Fixed-point fractional library routines.
!                                                              (line  589)
  * __fracthida:                           Fixed-point fractional library routines.
!                                                              (line  950)
  * __fracthidq:                           Fixed-point fractional library routines.
!                                                              (line  947)
  * __fracthiha:                           Fixed-point fractional library routines.
!                                                              (line  948)
  * __fracthihq:                           Fixed-point fractional library routines.
!                                                              (line  945)
  * __fracthiqq:                           Fixed-point fractional library routines.
!                                                              (line  944)
  * __fracthisa:                           Fixed-point fractional library routines.
!                                                              (line  949)
  * __fracthisq:                           Fixed-point fractional library routines.
!                                                              (line  946)
  * __fracthita:                           Fixed-point fractional library routines.
!                                                              (line  951)
  * __fracthiuda:                          Fixed-point fractional library routines.
!                                                              (line  958)
  * __fracthiudq:                          Fixed-point fractional library routines.
!                                                              (line  955)
  * __fracthiuha:                          Fixed-point fractional library routines.
!                                                              (line  956)
  * __fracthiuhq:                          Fixed-point fractional library routines.
!                                                              (line  953)
  * __fracthiuqq:                          Fixed-point fractional library routines.
!                                                              (line  952)
  * __fracthiusa:                          Fixed-point fractional library routines.
!                                                              (line  957)
  * __fracthiusq:                          Fixed-point fractional library routines.
!                                                              (line  954)
  * __fracthiuta:                          Fixed-point fractional library routines.
!                                                              (line  959)
  * __fracthqda:                           Fixed-point fractional library routines.
!                                                              (line  505)
  * __fracthqdf:                           Fixed-point fractional library routines.
!                                                              (line  521)
  * __fracthqdi:                           Fixed-point fractional library routines.
!                                                              (line  518)
  * __fracthqdq2:                          Fixed-point fractional library routines.
!                                                              (line  502)
  * __fracthqha:                           Fixed-point fractional library routines.
!                                                              (line  503)
  * __fracthqhi:                           Fixed-point fractional library routines.
!                                                              (line  516)
  * __fracthqqi:                           Fixed-point fractional library routines.
!                                                              (line  515)
  * __fracthqqq2:                          Fixed-point fractional library routines.
!                                                              (line  500)
  * __fracthqsa:                           Fixed-point fractional library routines.
!                                                              (line  504)
  * __fracthqsf:                           Fixed-point fractional library routines.
!                                                              (line  520)
  * __fracthqsi:                           Fixed-point fractional library routines.
!                                                              (line  517)
  * __fracthqsq2:                          Fixed-point fractional library routines.
!                                                              (line  501)
  * __fracthqta:                           Fixed-point fractional library routines.
!                                                              (line  506)
  * __fracthqti:                           Fixed-point fractional library routines.
!                                                              (line  519)
  * __fracthquda:                          Fixed-point fractional library routines.
!                                                              (line  513)
  * __fracthqudq:                          Fixed-point fractional library routines.
!                                                              (line  510)
  * __fracthquha:                          Fixed-point fractional library routines.
!                                                              (line  511)
  * __fracthquhq:                          Fixed-point fractional library routines.
!                                                              (line  508)
  * __fracthquqq:                          Fixed-point fractional library routines.
!                                                              (line  507)
  * __fracthqusa:                          Fixed-point fractional library routines.
!                                                              (line  512)
  * __fracthqusq:                          Fixed-point fractional library routines.
!                                                              (line  509)
  * __fracthquta:                          Fixed-point fractional library routines.
!                                                              (line  514)
  * __fractqida:                           Fixed-point fractional library routines.
!                                                              (line  932)
  * __fractqidq:                           Fixed-point fractional library routines.
!                                                              (line  929)
  * __fractqiha:                           Fixed-point fractional library routines.
!                                                              (line  930)
  * __fractqihq:                           Fixed-point fractional library routines.
!                                                              (line  927)
  * __fractqiqq:                           Fixed-point fractional library routines.
!                                                              (line  926)
  * __fractqisa:                           Fixed-point fractional library routines.
!                                                              (line  931)
  * __fractqisq:                           Fixed-point fractional library routines.
!                                                              (line  928)
  * __fractqita:                           Fixed-point fractional library routines.
!                                                              (line  933)
  * __fractqiuda:                          Fixed-point fractional library routines.
!                                                              (line  941)
  * __fractqiudq:                          Fixed-point fractional library routines.
!                                                              (line  937)
  * __fractqiuha:                          Fixed-point fractional library routines.
!                                                              (line  939)
  * __fractqiuhq:                          Fixed-point fractional library routines.
!                                                              (line  935)
  * __fractqiuqq:                          Fixed-point fractional library routines.
!                                                              (line  934)
  * __fractqiusa:                          Fixed-point fractional library routines.
!                                                              (line  940)
  * __fractqiusq:                          Fixed-point fractional library routines.
!                                                              (line  936)
  * __fractqiuta:                          Fixed-point fractional library routines.
!                                                              (line  942)
  * __fractqqda:                           Fixed-point fractional library routines.
!                                                              (line  481)
  * __fractqqdf:                           Fixed-point fractional library routines.
!                                                              (line  499)
  * __fractqqdi:                           Fixed-point fractional library routines.
!                                                              (line  496)
  * __fractqqdq2:                          Fixed-point fractional library routines.
!                                                              (line  478)
  * __fractqqha:                           Fixed-point fractional library routines.
!                                                              (line  479)
  * __fractqqhi:                           Fixed-point fractional library routines.
!                                                              (line  494)
  * __fractqqhq2:                          Fixed-point fractional library routines.
!                                                              (line  476)
  * __fractqqqi:                           Fixed-point fractional library routines.
!                                                              (line  493)
  * __fractqqsa:                           Fixed-point fractional library routines.
!                                                              (line  480)
  * __fractqqsf:                           Fixed-point fractional library routines.
!                                                              (line  498)
  * __fractqqsi:                           Fixed-point fractional library routines.
!                                                              (line  495)
  * __fractqqsq2:                          Fixed-point fractional library routines.
!                                                              (line  477)
  * __fractqqta:                           Fixed-point fractional library routines.
!                                                              (line  482)
  * __fractqqti:                           Fixed-point fractional library routines.
!                                                              (line  497)
  * __fractqquda:                          Fixed-point fractional library routines.
!                                                              (line  490)
  * __fractqqudq:                          Fixed-point fractional library routines.
!                                                              (line  486)
  * __fractqquha:                          Fixed-point fractional library routines.
!                                                              (line  488)
  * __fractqquhq:                          Fixed-point fractional library routines.
!                                                              (line  484)
  * __fractqquqq:                          Fixed-point fractional library routines.
!                                                              (line  483)
  * __fractqqusa:                          Fixed-point fractional library routines.
!                                                              (line  489)
  * __fractqqusq:                          Fixed-point fractional library routines.
!                                                              (line  485)
  * __fractqquta:                          Fixed-point fractional library routines.
!                                                              (line  491)
  * __fractsada2:                          Fixed-point fractional library routines.
!                                                              (line  603)
  * __fractsadf:                           Fixed-point fractional library routines.
!                                                              (line  619)
  * __fractsadi:                           Fixed-point fractional library routines.
!                                                              (line  616)
  * __fractsadq:                           Fixed-point fractional library routines.
!                                                              (line  601)
  * __fractsaha2:                          Fixed-point fractional library routines.
!                                                              (line  602)
  * __fractsahi:                           Fixed-point fractional library routines.
!                                                              (line  614)
  * __fractsahq:                           Fixed-point fractional library routines.
!                                                              (line  599)
  * __fractsaqi:                           Fixed-point fractional library routines.
!                                                              (line  613)
  * __fractsaqq:                           Fixed-point fractional library routines.
!                                                              (line  598)
  * __fractsasf:                           Fixed-point fractional library routines.
!                                                              (line  618)
  * __fractsasi:                           Fixed-point fractional library routines.
!                                                              (line  615)
  * __fractsasq:                           Fixed-point fractional library routines.
!                                                              (line  600)
  * __fractsata2:                          Fixed-point fractional library routines.
!                                                              (line  604)
  * __fractsati:                           Fixed-point fractional library routines.
!                                                              (line  617)
  * __fractsauda:                          Fixed-point fractional library routines.
!                                                              (line  611)
  * __fractsaudq:                          Fixed-point fractional library routines.
!                                                              (line  608)
  * __fractsauha:                          Fixed-point fractional library routines.
!                                                              (line  609)
  * __fractsauhq:                          Fixed-point fractional library routines.
!                                                              (line  606)
  * __fractsauqq:                          Fixed-point fractional library routines.
!                                                              (line  605)
  * __fractsausa:                          Fixed-point fractional library routines.
!                                                              (line  610)
  * __fractsausq:                          Fixed-point fractional library routines.
!                                                              (line  607)
  * __fractsauta:                          Fixed-point fractional library routines.
!                                                              (line  612)
  * __fractsfda:                           Fixed-point fractional library routines.
!                                                              (line 1016)
  * __fractsfdq:                           Fixed-point fractional library routines.
!                                                              (line 1013)
  * __fractsfha:                           Fixed-point fractional library routines.
!                                                              (line 1014)
  * __fractsfhq:                           Fixed-point fractional library routines.
!                                                              (line 1011)
  * __fractsfqq:                           Fixed-point fractional library routines.
!                                                              (line 1010)
  * __fractsfsa:                           Fixed-point fractional library routines.
!                                                              (line 1015)
  * __fractsfsq:                           Fixed-point fractional library routines.
!                                                              (line 1012)
  * __fractsfta:                           Fixed-point fractional library routines.
!                                                              (line 1017)
  * __fractsfuda:                          Fixed-point fractional library routines.
!                                                              (line 1024)
  * __fractsfudq:                          Fixed-point fractional library routines.
!                                                              (line 1021)
  * __fractsfuha:                          Fixed-point fractional library routines.
!                                                              (line 1022)
  * __fractsfuhq:                          Fixed-point fractional library routines.
!                                                              (line 1019)
  * __fractsfuqq:                          Fixed-point fractional library routines.
!                                                              (line 1018)
  * __fractsfusa:                          Fixed-point fractional library routines.
!                                                              (line 1023)
  * __fractsfusq:                          Fixed-point fractional library routines.
!                                                              (line 1020)
  * __fractsfuta:                          Fixed-point fractional library routines.
!                                                              (line 1025)
  * __fractsida:                           Fixed-point fractional library routines.
!                                                              (line  966)
  * __fractsidq:                           Fixed-point fractional library routines.
!                                                              (line  963)
  * __fractsiha:                           Fixed-point fractional library routines.
!                                                              (line  964)
  * __fractsihq:                           Fixed-point fractional library routines.
!                                                              (line  961)
  * __fractsiqq:                           Fixed-point fractional library routines.
!                                                              (line  960)
  * __fractsisa:                           Fixed-point fractional library routines.
!                                                              (line  965)
  * __fractsisq:                           Fixed-point fractional library routines.
!                                                              (line  962)
  * __fractsita:                           Fixed-point fractional library routines.
!                                                              (line  967)
  * __fractsiuda:                          Fixed-point fractional library routines.
!                                                              (line  974)
  * __fractsiudq:                          Fixed-point fractional library routines.
!                                                              (line  971)
  * __fractsiuha:                          Fixed-point fractional library routines.
!                                                              (line  972)
  * __fractsiuhq:                          Fixed-point fractional library routines.
!                                                              (line  969)
  * __fractsiuqq:                          Fixed-point fractional library routines.
!                                                              (line  968)
  * __fractsiusa:                          Fixed-point fractional library routines.
!                                                              (line  973)
  * __fractsiusq:                          Fixed-point fractional library routines.
!                                                              (line  970)
  * __fractsiuta:                          Fixed-point fractional library routines.
!                                                              (line  975)
  * __fractsqda:                           Fixed-point fractional library routines.
!                                                              (line  527)
  * __fractsqdf:                           Fixed-point fractional library routines.
!                                                              (line  545)
  * __fractsqdi:                           Fixed-point fractional library routines.
!                                                              (line  542)
  * __fractsqdq2:                          Fixed-point fractional library routines.
!                                                              (line  524)
  * __fractsqha:                           Fixed-point fractional library routines.
!                                                              (line  525)
  * __fractsqhi:                           Fixed-point fractional library routines.
!                                                              (line  540)
  * __fractsqhq2:                          Fixed-point fractional library routines.
!                                                              (line  523)
  * __fractsqqi:                           Fixed-point fractional library routines.
!                                                              (line  539)
  * __fractsqqq2:                          Fixed-point fractional library routines.
!                                                              (line  522)
  * __fractsqsa:                           Fixed-point fractional library routines.
!                                                              (line  526)
  * __fractsqsf:                           Fixed-point fractional library routines.
!                                                              (line  544)
  * __fractsqsi:                           Fixed-point fractional library routines.
!                                                              (line  541)
  * __fractsqta:                           Fixed-point fractional library routines.
!                                                              (line  528)
  * __fractsqti:                           Fixed-point fractional library routines.
!                                                              (line  543)
  * __fractsquda:                          Fixed-point fractional library routines.
!                                                              (line  536)
  * __fractsqudq:                          Fixed-point fractional library routines.
!                                                              (line  532)
  * __fractsquha:                          Fixed-point fractional library routines.
!                                                              (line  534)
  * __fractsquhq:                          Fixed-point fractional library routines.
!                                                              (line  530)
  * __fractsquqq:                          Fixed-point fractional library routines.
!                                                              (line  529)
  * __fractsqusa:                          Fixed-point fractional library routines.
!                                                              (line  535)
  * __fractsqusq:                          Fixed-point fractional library routines.
!                                                              (line  531)
  * __fractsquta:                          Fixed-point fractional library routines.
!                                                              (line  537)
  * __fracttada2:                          Fixed-point fractional library routines.
!                                                              (line  650)
  * __fracttadf:                           Fixed-point fractional library routines.
!                                                              (line  671)
  * __fracttadi:                           Fixed-point fractional library routines.
!                                                              (line  668)
  * __fracttadq:                           Fixed-point fractional library routines.
!                                                              (line  647)
  * __fracttaha2:                          Fixed-point fractional library routines.
!                                                              (line  648)
  * __fracttahi:                           Fixed-point fractional library routines.
!                                                              (line  666)
  * __fracttahq:                           Fixed-point fractional library routines.
!                                                              (line  645)
  * __fracttaqi:                           Fixed-point fractional library routines.
!                                                              (line  665)
  * __fracttaqq:                           Fixed-point fractional library routines.
!                                                              (line  644)
  * __fracttasa2:                          Fixed-point fractional library routines.
!                                                              (line  649)
  * __fracttasf:                           Fixed-point fractional library routines.
!                                                              (line  670)
  * __fracttasi:                           Fixed-point fractional library routines.
!                                                              (line  667)
  * __fracttasq:                           Fixed-point fractional library routines.
!                                                              (line  646)
  * __fracttati:                           Fixed-point fractional library routines.
-                                                              (line  669)
- * __fracttauda:                          Fixed-point fractional library routines.
                                                               (line  661)
  * __fracttaudq:                          Fixed-point fractional library routines.
!                                                              (line  656)
  * __fracttauha:                          Fixed-point fractional library routines.
!                                                              (line  658)
  * __fracttauhq:                          Fixed-point fractional library routines.
!                                                              (line  653)
  * __fracttauqq:                          Fixed-point fractional library routines.
!                                                              (line  651)
  * __fracttausa:                          Fixed-point fractional library routines.
!                                                              (line  660)
  * __fracttausq:                          Fixed-point fractional library routines.
!                                                              (line  654)
  * __fracttauta:                          Fixed-point fractional library routines.
!                                                              (line  663)
  * __fracttida:                           Fixed-point fractional library routines.
!                                                              (line  998)
  * __fracttidq:                           Fixed-point fractional library routines.
!                                                              (line  995)
  * __fracttiha:                           Fixed-point fractional library routines.
!                                                              (line  996)
  * __fracttihq:                           Fixed-point fractional library routines.
!                                                              (line  993)
  * __fracttiqq:                           Fixed-point fractional library routines.
!                                                              (line  992)
  * __fracttisa:                           Fixed-point fractional library routines.
!                                                              (line  997)
  * __fracttisq:                           Fixed-point fractional library routines.
!                                                              (line  994)
  * __fracttita:                           Fixed-point fractional library routines.
!                                                              (line  999)
  * __fracttiuda:                          Fixed-point fractional library routines.
!                                                              (line 1007)
  * __fracttiudq:                          Fixed-point fractional library routines.
!                                                              (line 1003)
  * __fracttiuha:                          Fixed-point fractional library routines.
!                                                              (line 1005)
  * __fracttiuhq:                          Fixed-point fractional library routines.
!                                                              (line 1001)
  * __fracttiuqq:                          Fixed-point fractional library routines.
!                                                              (line 1000)
  * __fracttiusa:                          Fixed-point fractional library routines.
!                                                              (line 1006)
  * __fracttiusq:                          Fixed-point fractional library routines.
!                                                              (line 1002)
  * __fracttiuta:                          Fixed-point fractional library routines.
!                                                              (line 1008)
  * __fractudada:                          Fixed-point fractional library routines.
!                                                              (line  865)
  * __fractudadf:                          Fixed-point fractional library routines.
!                                                              (line  888)
  * __fractudadi:                          Fixed-point fractional library routines.
!                                                              (line  885)
  * __fractudadq:                          Fixed-point fractional library routines.
!                                                              (line  861)
  * __fractudaha:                          Fixed-point fractional library routines.
!                                                              (line  863)
  * __fractudahi:                          Fixed-point fractional library routines.
!                                                              (line  883)
  * __fractudahq:                          Fixed-point fractional library routines.
!                                                              (line  859)
  * __fractudaqi:                          Fixed-point fractional library routines.
!                                                              (line  882)
  * __fractudaqq:                          Fixed-point fractional library routines.
!                                                              (line  858)
  * __fractudasa:                          Fixed-point fractional library routines.
!                                                              (line  864)
  * __fractudasf:                          Fixed-point fractional library routines.
!                                                              (line  887)
  * __fractudasi:                          Fixed-point fractional library routines.
!                                                              (line  884)
  * __fractudasq:                          Fixed-point fractional library routines.
!                                                              (line  860)
  * __fractudata:                          Fixed-point fractional library routines.
!                                                              (line  866)
  * __fractudati:                          Fixed-point fractional library routines.
!                                                              (line  886)
  * __fractudaudq:                         Fixed-point fractional library routines.
!                                                              (line  874)
  * __fractudauha2:                        Fixed-point fractional library routines.
!                                                              (line  876)
  * __fractudauhq:                         Fixed-point fractional library routines.
!                                                              (line  870)
  * __fractudauqq:                         Fixed-point fractional library routines.
!                                                              (line  868)
  * __fractudausa2:                        Fixed-point fractional library routines.
!                                                              (line  878)
  * __fractudausq:                         Fixed-point fractional library routines.
!                                                              (line  872)
  * __fractudauta2:                        Fixed-point fractional library routines.
!                                                              (line  880)
  * __fractudqda:                          Fixed-point fractional library routines.
!                                                              (line  772)
  * __fractudqdf:                          Fixed-point fractional library routines.
!                                                              (line  798)
  * __fractudqdi:                          Fixed-point fractional library routines.
!                                                              (line  794)
  * __fractudqdq:                          Fixed-point fractional library routines.
!                                                              (line  767)
  * __fractudqha:                          Fixed-point fractional library routines.
!                                                              (line  769)
  * __fractudqhi:                          Fixed-point fractional library routines.
!                                                              (line  792)
  * __fractudqhq:                          Fixed-point fractional library routines.
!                                                              (line  764)
  * __fractudqqi:                          Fixed-point fractional library routines.
!                                                              (line  790)
  * __fractudqqq:                          Fixed-point fractional library routines.
!                                                              (line  762)
  * __fractudqsa:                          Fixed-point fractional library routines.
!                                                              (line  771)
  * __fractudqsf:                          Fixed-point fractional library routines.
!                                                              (line  797)
  * __fractudqsi:                          Fixed-point fractional library routines.
!                                                              (line  793)
  * __fractudqsq:                          Fixed-point fractional library routines.
!                                                              (line  765)
  * __fractudqta:                          Fixed-point fractional library routines.
!                                                              (line  774)
  * __fractudqti:                          Fixed-point fractional library routines.
!                                                              (line  795)
  * __fractudquda:                         Fixed-point fractional library routines.
!                                                              (line  786)
  * __fractudquha:                         Fixed-point fractional library routines.
!                                                              (line  782)
  * __fractudquhq2:                        Fixed-point fractional library routines.
!                                                              (line  778)
  * __fractudquqq2:                        Fixed-point fractional library routines.
!                                                              (line  776)
  * __fractudqusa:                         Fixed-point fractional library routines.
!                                                              (line  784)
  * __fractudqusq2:                        Fixed-point fractional library routines.
!                                                              (line  780)
  * __fractudquta:                         Fixed-point fractional library routines.
!                                                              (line  788)
  * __fractuhada:                          Fixed-point fractional library routines.
!                                                              (line  806)
  * __fractuhadf:                          Fixed-point fractional library routines.
!                                                              (line  829)
  * __fractuhadi:                          Fixed-point fractional library routines.
!                                                              (line  826)
  * __fractuhadq:                          Fixed-point fractional library routines.
!                                                              (line  802)
  * __fractuhaha:                          Fixed-point fractional library routines.
!                                                              (line  804)
  * __fractuhahi:                          Fixed-point fractional library routines.
!                                                              (line  824)
  * __fractuhahq:                          Fixed-point fractional library routines.
!                                                              (line  800)
  * __fractuhaqi:                          Fixed-point fractional library routines.
!                                                              (line  823)
  * __fractuhaqq:                          Fixed-point fractional library routines.
!                                                              (line  799)
  * __fractuhasa:                          Fixed-point fractional library routines.
!                                                              (line  805)
  * __fractuhasf:                          Fixed-point fractional library routines.
!                                                              (line  828)
  * __fractuhasi:                          Fixed-point fractional library routines.
!                                                              (line  825)
  * __fractuhasq:                          Fixed-point fractional library routines.
!                                                              (line  801)
  * __fractuhata:                          Fixed-point fractional library routines.
!                                                              (line  807)
  * __fractuhati:                          Fixed-point fractional library routines.
-                                                              (line  827)
- * __fractuhauda2:                        Fixed-point fractional library routines.
                                                               (line  819)
  * __fractuhaudq:                         Fixed-point fractional library routines.
!                                                              (line  815)
  * __fractuhauhq:                         Fixed-point fractional library routines.
!                                                              (line  811)
  * __fractuhauqq:                         Fixed-point fractional library routines.
!                                                              (line  809)
  * __fractuhausa2:                        Fixed-point fractional library routines.
!                                                              (line  817)
  * __fractuhausq:                         Fixed-point fractional library routines.
!                                                              (line  813)
  * __fractuhauta2:                        Fixed-point fractional library routines.
!                                                              (line  821)
  * __fractuhqda:                          Fixed-point fractional library routines.
!                                                              (line  709)
  * __fractuhqdf:                          Fixed-point fractional library routines.
!                                                              (line  730)
  * __fractuhqdi:                          Fixed-point fractional library routines.
!                                                              (line  727)
  * __fractuhqdq:                          Fixed-point fractional library routines.
!                                                              (line  706)
  * __fractuhqha:                          Fixed-point fractional library routines.
!                                                              (line  707)
  * __fractuhqhi:                          Fixed-point fractional library routines.
!                                                              (line  725)
  * __fractuhqhq:                          Fixed-point fractional library routines.
!                                                              (line  704)
  * __fractuhqqi:                          Fixed-point fractional library routines.
!                                                              (line  724)
  * __fractuhqqq:                          Fixed-point fractional library routines.
!                                                              (line  703)
  * __fractuhqsa:                          Fixed-point fractional library routines.
!                                                              (line  708)
  * __fractuhqsf:                          Fixed-point fractional library routines.
!                                                              (line  729)
  * __fractuhqsi:                          Fixed-point fractional library routines.
!                                                              (line  726)
  * __fractuhqsq:                          Fixed-point fractional library routines.
!                                                              (line  705)
  * __fractuhqta:                          Fixed-point fractional library routines.
!                                                              (line  710)
  * __fractuhqti:                          Fixed-point fractional library routines.
-                                                              (line  728)
- * __fractuhquda:                         Fixed-point fractional library routines.
                                                               (line  720)
  * __fractuhqudq2:                        Fixed-point fractional library routines.
!                                                              (line  715)
  * __fractuhquha:                         Fixed-point fractional library routines.
!                                                              (line  717)
  * __fractuhquqq2:                        Fixed-point fractional library routines.
!                                                              (line  711)
  * __fractuhqusa:                         Fixed-point fractional library routines.
!                                                              (line  719)
  * __fractuhqusq2:                        Fixed-point fractional library routines.
!                                                              (line  713)
  * __fractuhquta:                         Fixed-point fractional library routines.
!                                                              (line  722)
  * __fractunsdadi:                        Fixed-point fractional library routines.
!                                                              (line 1562)
  * __fractunsdahi:                        Fixed-point fractional library routines.
!                                                              (line 1560)
  * __fractunsdaqi:                        Fixed-point fractional library routines.
!                                                              (line 1559)
  * __fractunsdasi:                        Fixed-point fractional library routines.
!                                                              (line 1561)
  * __fractunsdati:                        Fixed-point fractional library routines.
!                                                              (line 1563)
  * __fractunsdida:                        Fixed-point fractional library routines.
!                                                              (line 1714)
  * __fractunsdidq:                        Fixed-point fractional library routines.
!                                                              (line 1711)
  * __fractunsdiha:                        Fixed-point fractional library routines.
!                                                              (line 1712)
  * __fractunsdihq:                        Fixed-point fractional library routines.
!                                                              (line 1709)
  * __fractunsdiqq:                        Fixed-point fractional library routines.
!                                                              (line 1708)
  * __fractunsdisa:                        Fixed-point fractional library routines.
!                                                              (line 1713)
  * __fractunsdisq:                        Fixed-point fractional library routines.
!                                                              (line 1710)
  * __fractunsdita:                        Fixed-point fractional library routines.
!                                                              (line 1715)
  * __fractunsdiuda:                       Fixed-point fractional library routines.
!                                                              (line 1726)
  * __fractunsdiudq:                       Fixed-point fractional library routines.
!                                                              (line 1721)
  * __fractunsdiuha:                       Fixed-point fractional library routines.
!                                                              (line 1723)
  * __fractunsdiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1718)
  * __fractunsdiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1716)
  * __fractunsdiusa:                       Fixed-point fractional library routines.
!                                                              (line 1725)
  * __fractunsdiusq:                       Fixed-point fractional library routines.
!                                                              (line 1719)
  * __fractunsdiuta:                       Fixed-point fractional library routines.
!                                                              (line 1728)
  * __fractunsdqdi:                        Fixed-point fractional library routines.
!                                                              (line 1546)
  * __fractunsdqhi:                        Fixed-point fractional library routines.
!                                                              (line 1544)
  * __fractunsdqqi:                        Fixed-point fractional library routines.
!                                                              (line 1543)
  * __fractunsdqsi:                        Fixed-point fractional library routines.
!                                                              (line 1545)
  * __fractunsdqti:                        Fixed-point fractional library routines.
!                                                              (line 1547)
  * __fractunshadi:                        Fixed-point fractional library routines.
!                                                              (line 1552)
  * __fractunshahi:                        Fixed-point fractional library routines.
!                                                              (line 1550)
  * __fractunshaqi:                        Fixed-point fractional library routines.
!                                                              (line 1549)
  * __fractunshasi:                        Fixed-point fractional library routines.
!                                                              (line 1551)
  * __fractunshati:                        Fixed-point fractional library routines.
!                                                              (line 1553)
  * __fractunshida:                        Fixed-point fractional library routines.
!                                                              (line 1670)
  * __fractunshidq:                        Fixed-point fractional library routines.
!                                                              (line 1667)
  * __fractunshiha:                        Fixed-point fractional library routines.
!                                                              (line 1668)
  * __fractunshihq:                        Fixed-point fractional library routines.
!                                                              (line 1665)
  * __fractunshiqq:                        Fixed-point fractional library routines.
!                                                              (line 1664)
  * __fractunshisa:                        Fixed-point fractional library routines.
!                                                              (line 1669)
  * __fractunshisq:                        Fixed-point fractional library routines.
!                                                              (line 1666)
  * __fractunshita:                        Fixed-point fractional library routines.
!                                                              (line 1671)
  * __fractunshiuda:                       Fixed-point fractional library routines.
!                                                              (line 1682)
  * __fractunshiudq:                       Fixed-point fractional library routines.
!                                                              (line 1677)
  * __fractunshiuha:                       Fixed-point fractional library routines.
!                                                              (line 1679)
  * __fractunshiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1674)
  * __fractunshiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1672)
  * __fractunshiusa:                       Fixed-point fractional library routines.
!                                                              (line 1681)
  * __fractunshiusq:                       Fixed-point fractional library routines.
!                                                              (line 1675)
  * __fractunshiuta:                       Fixed-point fractional library routines.
!                                                              (line 1684)
  * __fractunshqdi:                        Fixed-point fractional library routines.
!                                                              (line 1536)
  * __fractunshqhi:                        Fixed-point fractional library routines.
!                                                              (line 1534)
  * __fractunshqqi:                        Fixed-point fractional library routines.
!                                                              (line 1533)
  * __fractunshqsi:                        Fixed-point fractional library routines.
!                                                              (line 1535)
  * __fractunshqti:                        Fixed-point fractional library routines.
!                                                              (line 1537)
  * __fractunsqida:                        Fixed-point fractional library routines.
!                                                              (line 1648)
  * __fractunsqidq:                        Fixed-point fractional library routines.
!                                                              (line 1645)
  * __fractunsqiha:                        Fixed-point fractional library routines.
!                                                              (line 1646)
  * __fractunsqihq:                        Fixed-point fractional library routines.
!                                                              (line 1643)
  * __fractunsqiqq:                        Fixed-point fractional library routines.
!                                                              (line 1642)
  * __fractunsqisa:                        Fixed-point fractional library routines.
!                                                              (line 1647)
  * __fractunsqisq:                        Fixed-point fractional library routines.
!                                                              (line 1644)
  * __fractunsqita:                        Fixed-point fractional library routines.
!                                                              (line 1649)
  * __fractunsqiuda:                       Fixed-point fractional library routines.
!                                                              (line 1660)
  * __fractunsqiudq:                       Fixed-point fractional library routines.
!                                                              (line 1655)
  * __fractunsqiuha:                       Fixed-point fractional library routines.
!                                                              (line 1657)
  * __fractunsqiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1652)
  * __fractunsqiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1650)
  * __fractunsqiusa:                       Fixed-point fractional library routines.
!                                                              (line 1659)
  * __fractunsqiusq:                       Fixed-point fractional library routines.
!                                                              (line 1653)
  * __fractunsqiuta:                       Fixed-point fractional library routines.
!                                                              (line 1662)
  * __fractunsqqdi:                        Fixed-point fractional library routines.
!                                                              (line 1531)
  * __fractunsqqhi:                        Fixed-point fractional library routines.
!                                                              (line 1529)
  * __fractunsqqqi:                        Fixed-point fractional library routines.
!                                                              (line 1528)
  * __fractunsqqsi:                        Fixed-point fractional library routines.
!                                                              (line 1530)
  * __fractunsqqti:                        Fixed-point fractional library routines.
!                                                              (line 1532)
  * __fractunssadi:                        Fixed-point fractional library routines.
!                                                              (line 1557)
  * __fractunssahi:                        Fixed-point fractional library routines.
!                                                              (line 1555)
  * __fractunssaqi:                        Fixed-point fractional library routines.
!                                                              (line 1554)
  * __fractunssasi:                        Fixed-point fractional library routines.
!                                                              (line 1556)
  * __fractunssati:                        Fixed-point fractional library routines.
!                                                              (line 1558)
  * __fractunssida:                        Fixed-point fractional library routines.
!                                                              (line 1692)
  * __fractunssidq:                        Fixed-point fractional library routines.
!                                                              (line 1689)
  * __fractunssiha:                        Fixed-point fractional library routines.
!                                                              (line 1690)
  * __fractunssihq:                        Fixed-point fractional library routines.
!                                                              (line 1687)
  * __fractunssiqq:                        Fixed-point fractional library routines.
!                                                              (line 1686)
  * __fractunssisa:                        Fixed-point fractional library routines.
!                                                              (line 1691)
  * __fractunssisq:                        Fixed-point fractional library routines.
!                                                              (line 1688)
  * __fractunssita:                        Fixed-point fractional library routines.
!                                                              (line 1693)
  * __fractunssiuda:                       Fixed-point fractional library routines.
!                                                              (line 1704)
  * __fractunssiudq:                       Fixed-point fractional library routines.
!                                                              (line 1699)
  * __fractunssiuha:                       Fixed-point fractional library routines.
!                                                              (line 1701)
  * __fractunssiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1696)
  * __fractunssiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1694)
  * __fractunssiusa:                       Fixed-point fractional library routines.
!                                                              (line 1703)
  * __fractunssiusq:                       Fixed-point fractional library routines.
!                                                              (line 1697)
  * __fractunssiuta:                       Fixed-point fractional library routines.
!                                                              (line 1706)
  * __fractunssqdi:                        Fixed-point fractional library routines.
!                                                              (line 1541)
  * __fractunssqhi:                        Fixed-point fractional library routines.
!                                                              (line 1539)
  * __fractunssqqi:                        Fixed-point fractional library routines.
!                                                              (line 1538)
  * __fractunssqsi:                        Fixed-point fractional library routines.
!                                                              (line 1540)
  * __fractunssqti:                        Fixed-point fractional library routines.
!                                                              (line 1542)
  * __fractunstadi:                        Fixed-point fractional library routines.
!                                                              (line 1567)
  * __fractunstahi:                        Fixed-point fractional library routines.
!                                                              (line 1565)
  * __fractunstaqi:                        Fixed-point fractional library routines.
!                                                              (line 1564)
  * __fractunstasi:                        Fixed-point fractional library routines.
!                                                              (line 1566)
  * __fractunstati:                        Fixed-point fractional library routines.
!                                                              (line 1568)
  * __fractunstida:                        Fixed-point fractional library routines.
!                                                              (line 1737)
  * __fractunstidq:                        Fixed-point fractional library routines.
!                                                              (line 1733)
  * __fractunstiha:                        Fixed-point fractional library routines.
!                                                              (line 1735)
  * __fractunstihq:                        Fixed-point fractional library routines.
!                                                              (line 1731)
  * __fractunstiqq:                        Fixed-point fractional library routines.
!                                                              (line 1730)
  * __fractunstisa:                        Fixed-point fractional library routines.
!                                                              (line 1736)
  * __fractunstisq:                        Fixed-point fractional library routines.
!                                                              (line 1732)
  * __fractunstita:                        Fixed-point fractional library routines.
!                                                              (line 1738)
  * __fractunstiuda:                       Fixed-point fractional library routines.
!                                                              (line 1752)
  * __fractunstiudq:                       Fixed-point fractional library routines.
!                                                              (line 1746)
  * __fractunstiuha:                       Fixed-point fractional library routines.
!                                                              (line 1748)
  * __fractunstiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1742)
  * __fractunstiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1740)
  * __fractunstiusa:                       Fixed-point fractional library routines.
!                                                              (line 1750)
  * __fractunstiusq:                       Fixed-point fractional library routines.
!                                                              (line 1744)
  * __fractunstiuta:                       Fixed-point fractional library routines.
!                                                              (line 1754)
  * __fractunsudadi:                       Fixed-point fractional library routines.
!                                                              (line 1628)
  * __fractunsudahi:                       Fixed-point fractional library routines.
!                                                              (line 1624)
  * __fractunsudaqi:                       Fixed-point fractional library routines.
!                                                              (line 1622)
  * __fractunsudasi:                       Fixed-point fractional library routines.
!                                                              (line 1626)
  * __fractunsudati:                       Fixed-point fractional library routines.
!                                                              (line 1630)
  * __fractunsudqdi:                       Fixed-point fractional library routines.
!                                                              (line 1602)
  * __fractunsudqhi:                       Fixed-point fractional library routines.
!                                                              (line 1598)
  * __fractunsudqqi:                       Fixed-point fractional library routines.
!                                                              (line 1596)
  * __fractunsudqsi:                       Fixed-point fractional library routines.
!                                                              (line 1600)
  * __fractunsudqti:                       Fixed-point fractional library routines.
!                                                              (line 1604)
  * __fractunsuhadi:                       Fixed-point fractional library routines.
!                                                              (line 1612)
  * __fractunsuhahi:                       Fixed-point fractional library routines.
!                                                              (line 1608)
  * __fractunsuhaqi:                       Fixed-point fractional library routines.
!                                                              (line 1606)
  * __fractunsuhasi:                       Fixed-point fractional library routines.
!                                                              (line 1610)
  * __fractunsuhati:                       Fixed-point fractional library routines.
!                                                              (line 1614)
  * __fractunsuhqdi:                       Fixed-point fractional library routines.
!                                                              (line 1583)
  * __fractunsuhqhi:                       Fixed-point fractional library routines.
!                                                              (line 1581)
  * __fractunsuhqqi:                       Fixed-point fractional library routines.
!                                                              (line 1580)
  * __fractunsuhqsi:                       Fixed-point fractional library routines.
!                                                              (line 1582)
  * __fractunsuhqti:                       Fixed-point fractional library routines.
-                                                              (line 1584)
- * __fractunsuqqdi:                       Fixed-point fractional library routines.
                                                               (line 1576)
  * __fractunsuqqhi:                       Fixed-point fractional library routines.
!                                                              (line 1572)
  * __fractunsuqqqi:                       Fixed-point fractional library routines.
!                                                              (line 1570)
  * __fractunsuqqsi:                       Fixed-point fractional library routines.
!                                                              (line 1574)
  * __fractunsuqqti:                       Fixed-point fractional library routines.
!                                                              (line 1578)
  * __fractunsusadi:                       Fixed-point fractional library routines.
!                                                              (line 1619)
  * __fractunsusahi:                       Fixed-point fractional library routines.
!                                                              (line 1617)
  * __fractunsusaqi:                       Fixed-point fractional library routines.
!                                                              (line 1616)
  * __fractunsusasi:                       Fixed-point fractional library routines.
!                                                              (line 1618)
  * __fractunsusati:                       Fixed-point fractional library routines.
!                                                              (line 1620)
  * __fractunsusqdi:                       Fixed-point fractional library routines.
!                                                              (line 1592)
  * __fractunsusqhi:                       Fixed-point fractional library routines.
!                                                              (line 1588)
  * __fractunsusqqi:                       Fixed-point fractional library routines.
!                                                              (line 1586)
  * __fractunsusqsi:                       Fixed-point fractional library routines.
!                                                              (line 1590)
  * __fractunsusqti:                       Fixed-point fractional library routines.
!                                                              (line 1594)
  * __fractunsutadi:                       Fixed-point fractional library routines.
!                                                              (line 1638)
  * __fractunsutahi:                       Fixed-point fractional library routines.
!                                                              (line 1634)
  * __fractunsutaqi:                       Fixed-point fractional library routines.
!                                                              (line 1632)
  * __fractunsutasi:                       Fixed-point fractional library routines.
!                                                              (line 1636)
  * __fractunsutati:                       Fixed-point fractional library routines.
!                                                              (line 1640)
  * __fractuqqda:                          Fixed-point fractional library routines.
!                                                              (line  679)
  * __fractuqqdf:                          Fixed-point fractional library routines.
!                                                              (line  702)
  * __fractuqqdi:                          Fixed-point fractional library routines.
!                                                              (line  699)
  * __fractuqqdq:                          Fixed-point fractional library routines.
!                                                              (line  675)
  * __fractuqqha:                          Fixed-point fractional library routines.
!                                                              (line  677)
  * __fractuqqhi:                          Fixed-point fractional library routines.
!                                                              (line  697)
  * __fractuqqhq:                          Fixed-point fractional library routines.
!                                                              (line  673)
  * __fractuqqqi:                          Fixed-point fractional library routines.
!                                                              (line  696)
  * __fractuqqqq:                          Fixed-point fractional library routines.
!                                                              (line  672)
  * __fractuqqsa:                          Fixed-point fractional library routines.
!                                                              (line  678)
  * __fractuqqsf:                          Fixed-point fractional library routines.
!                                                              (line  701)
  * __fractuqqsi:                          Fixed-point fractional library routines.
!                                                              (line  698)
  * __fractuqqsq:                          Fixed-point fractional library routines.
!                                                              (line  674)
  * __fractuqqta:                          Fixed-point fractional library routines.
!                                                              (line  680)
  * __fractuqqti:                          Fixed-point fractional library routines.
-                                                              (line  700)
- * __fractuqquda:                         Fixed-point fractional library routines.
                                                               (line  692)
  * __fractuqqudq2:                        Fixed-point fractional library routines.
!                                                              (line  686)
  * __fractuqquha:                         Fixed-point fractional library routines.
!                                                              (line  688)
  * __fractuqquhq2:                        Fixed-point fractional library routines.
!                                                              (line  682)
  * __fractuqqusa:                         Fixed-point fractional library routines.
!                                                              (line  690)
  * __fractuqqusq2:                        Fixed-point fractional library routines.
!                                                              (line  684)
  * __fractuqquta:                         Fixed-point fractional library routines.
!                                                              (line  694)
  * __fractusada:                          Fixed-point fractional library routines.
!                                                              (line  836)
  * __fractusadf:                          Fixed-point fractional library routines.
!                                                              (line  857)
  * __fractusadi:                          Fixed-point fractional library routines.
!                                                              (line  854)
  * __fractusadq:                          Fixed-point fractional library routines.
!                                                              (line  833)
  * __fractusaha:                          Fixed-point fractional library routines.
!                                                              (line  834)
  * __fractusahi:                          Fixed-point fractional library routines.
!                                                              (line  852)
  * __fractusahq:                          Fixed-point fractional library routines.
!                                                              (line  831)
  * __fractusaqi:                          Fixed-point fractional library routines.
!                                                              (line  851)
  * __fractusaqq:                          Fixed-point fractional library routines.
!                                                              (line  830)
  * __fractusasa:                          Fixed-point fractional library routines.
!                                                              (line  835)
  * __fractusasf:                          Fixed-point fractional library routines.
!                                                              (line  856)
  * __fractusasi:                          Fixed-point fractional library routines.
!                                                              (line  853)
  * __fractusasq:                          Fixed-point fractional library routines.
!                                                              (line  832)
  * __fractusata:                          Fixed-point fractional library routines.
!                                                              (line  837)
  * __fractusati:                          Fixed-point fractional library routines.
-                                                              (line  855)
- * __fractusauda2:                        Fixed-point fractional library routines.
                                                               (line  847)
  * __fractusaudq:                         Fixed-point fractional library routines.
!                                                              (line  843)
  * __fractusauha2:                        Fixed-point fractional library routines.
!                                                              (line  845)
  * __fractusauhq:                         Fixed-point fractional library routines.
!                                                              (line  840)
  * __fractusauqq:                         Fixed-point fractional library routines.
!                                                              (line  838)
  * __fractusausq:                         Fixed-point fractional library routines.
!                                                              (line  841)
  * __fractusauta2:                        Fixed-point fractional library routines.
!                                                              (line  849)
  * __fractusqda:                          Fixed-point fractional library routines.
!                                                              (line  738)
  * __fractusqdf:                          Fixed-point fractional library routines.
!                                                              (line  761)
  * __fractusqdi:                          Fixed-point fractional library routines.
!                                                              (line  758)
  * __fractusqdq:                          Fixed-point fractional library routines.
!                                                              (line  734)
  * __fractusqha:                          Fixed-point fractional library routines.
!                                                              (line  736)
  * __fractusqhi:                          Fixed-point fractional library routines.
!                                                              (line  756)
  * __fractusqhq:                          Fixed-point fractional library routines.
!                                                              (line  732)
  * __fractusqqi:                          Fixed-point fractional library routines.
!                                                              (line  755)
  * __fractusqqq:                          Fixed-point fractional library routines.
!                                                              (line  731)
  * __fractusqsa:                          Fixed-point fractional library routines.
!                                                              (line  737)
  * __fractusqsf:                          Fixed-point fractional library routines.
!                                                              (line  760)
  * __fractusqsi:                          Fixed-point fractional library routines.
!                                                              (line  757)
  * __fractusqsq:                          Fixed-point fractional library routines.
!                                                              (line  733)
  * __fractusqta:                          Fixed-point fractional library routines.
!                                                              (line  739)
  * __fractusqti:                          Fixed-point fractional library routines.
-                                                              (line  759)
- * __fractusquda:                         Fixed-point fractional library routines.
                                                               (line  751)
  * __fractusqudq2:                        Fixed-point fractional library routines.
!                                                              (line  745)
  * __fractusquha:                         Fixed-point fractional library routines.
!                                                              (line  747)
  * __fractusquhq2:                        Fixed-point fractional library routines.
!                                                              (line  743)
  * __fractusquqq2:                        Fixed-point fractional library routines.
!                                                              (line  741)
  * __fractusqusa:                         Fixed-point fractional library routines.
!                                                              (line  749)
  * __fractusquta:                         Fixed-point fractional library routines.
!                                                              (line  753)
  * __fractutada:                          Fixed-point fractional library routines.
!                                                              (line  899)
  * __fractutadf:                          Fixed-point fractional library routines.
!                                                              (line  925)
  * __fractutadi:                          Fixed-point fractional library routines.
!                                                              (line  921)
  * __fractutadq:                          Fixed-point fractional library routines.
!                                                              (line  894)
  * __fractutaha:                          Fixed-point fractional library routines.
!                                                              (line  896)
  * __fractutahi:                          Fixed-point fractional library routines.
!                                                              (line  919)
  * __fractutahq:                          Fixed-point fractional library routines.
!                                                              (line  891)
  * __fractutaqi:                          Fixed-point fractional library routines.
!                                                              (line  917)
  * __fractutaqq:                          Fixed-point fractional library routines.
!                                                              (line  889)
  * __fractutasa:                          Fixed-point fractional library routines.
!                                                              (line  898)
  * __fractutasf:                          Fixed-point fractional library routines.
!                                                              (line  924)
  * __fractutasi:                          Fixed-point fractional library routines.
!                                                              (line  920)
  * __fractutasq:                          Fixed-point fractional library routines.
!                                                              (line  892)
  * __fractutata:                          Fixed-point fractional library routines.
!                                                              (line  901)
  * __fractutati:                          Fixed-point fractional library routines.
!                                                              (line  922)
  * __fractutauda2:                        Fixed-point fractional library routines.
!                                                              (line  915)
  * __fractutaudq:                         Fixed-point fractional library routines.
!                                                              (line  909)
  * __fractutauha2:                        Fixed-point fractional library routines.
!                                                              (line  911)
  * __fractutauhq:                         Fixed-point fractional library routines.
!                                                              (line  905)
  * __fractutauqq:                         Fixed-point fractional library routines.
!                                                              (line  903)
  * __fractutausa2:                        Fixed-point fractional library routines.
!                                                              (line  913)
  * __fractutausq:                         Fixed-point fractional library routines.
!                                                              (line  907)
  * __gedf2:                               Soft float library routines.
-                                                              (line  234)
- * __gesf2:                               Soft float library routines.
                                                               (line  233)
  * __getf2:                               Soft float library routines.
!                                                              (line  235)
  * __gtdf2:                               Soft float library routines.
-                                                              (line  252)
- * __gtsf2:                               Soft float library routines.
                                                               (line  251)
  * __gttf2:                               Soft float library routines.
!                                                              (line  253)
  * __ledf2:                               Soft float library routines.
-                                                              (line  246)
- * __lesf2:                               Soft float library routines.
                                                               (line  245)
  * __letf2:                               Soft float library routines.
!                                                              (line  247)
  * __lshrdi3:                             Integer library routines.
                                                               (line   30)
  * __lshrsi3:                             Integer library routines.
--- 52588,53858 ----
  * __floatuntixf:                         Soft float library routines.
                                                               (line  153)
  * __fractdadf:                           Fixed-point fractional library routines.
!                                                              (line  635)
  * __fractdadi:                           Fixed-point fractional library routines.
!                                                              (line  632)
  * __fractdadq:                           Fixed-point fractional library routines.
!                                                              (line  615)
  * __fractdaha2:                          Fixed-point fractional library routines.
!                                                              (line  616)
  * __fractdahi:                           Fixed-point fractional library routines.
!                                                              (line  630)
  * __fractdahq:                           Fixed-point fractional library routines.
!                                                              (line  613)
  * __fractdaqi:                           Fixed-point fractional library routines.
!                                                              (line  629)
  * __fractdaqq:                           Fixed-point fractional library routines.
!                                                              (line  612)
  * __fractdasa2:                          Fixed-point fractional library routines.
!                                                              (line  617)
  * __fractdasf:                           Fixed-point fractional library routines.
!                                                              (line  634)
  * __fractdasi:                           Fixed-point fractional library routines.
!                                                              (line  631)
  * __fractdasq:                           Fixed-point fractional library routines.
!                                                              (line  614)
  * __fractdata2:                          Fixed-point fractional library routines.
!                                                              (line  618)
  * __fractdati:                           Fixed-point fractional library routines.
!                                                              (line  633)
  * __fractdauda:                          Fixed-point fractional library routines.
!                                                              (line  626)
  * __fractdaudq:                          Fixed-point fractional library routines.
!                                                              (line  622)
  * __fractdauha:                          Fixed-point fractional library routines.
!                                                              (line  624)
  * __fractdauhq:                          Fixed-point fractional library routines.
!                                                              (line  620)
  * __fractdauqq:                          Fixed-point fractional library routines.
!                                                              (line  619)
  * __fractdausa:                          Fixed-point fractional library routines.
!                                                              (line  625)
  * __fractdausq:                          Fixed-point fractional library routines.
!                                                              (line  621)
  * __fractdauta:                          Fixed-point fractional library routines.
!                                                              (line  627)
  * __fractdfda:                           Fixed-point fractional library routines.
!                                                              (line 1024)
  * __fractdfdq:                           Fixed-point fractional library routines.
!                                                              (line 1021)
  * __fractdfha:                           Fixed-point fractional library routines.
!                                                              (line 1022)
  * __fractdfhq:                           Fixed-point fractional library routines.
!                                                              (line 1019)
  * __fractdfqq:                           Fixed-point fractional library routines.
!                                                              (line 1018)
  * __fractdfsa:                           Fixed-point fractional library routines.
!                                                              (line 1023)
  * __fractdfsq:                           Fixed-point fractional library routines.
!                                                              (line 1020)
  * __fractdfta:                           Fixed-point fractional library routines.
!                                                              (line 1025)
  * __fractdfuda:                          Fixed-point fractional library routines.
!                                                              (line 1032)
  * __fractdfudq:                          Fixed-point fractional library routines.
!                                                              (line 1029)
  * __fractdfuha:                          Fixed-point fractional library routines.
!                                                              (line 1030)
  * __fractdfuhq:                          Fixed-point fractional library routines.
!                                                              (line 1027)
  * __fractdfuqq:                          Fixed-point fractional library routines.
!                                                              (line 1026)
  * __fractdfusa:                          Fixed-point fractional library routines.
!                                                              (line 1031)
  * __fractdfusq:                          Fixed-point fractional library routines.
!                                                              (line 1028)
  * __fractdfuta:                          Fixed-point fractional library routines.
!                                                              (line 1033)
  * __fractdida:                           Fixed-point fractional library routines.
!                                                              (line  974)
  * __fractdidq:                           Fixed-point fractional library routines.
!                                                              (line  971)
  * __fractdiha:                           Fixed-point fractional library routines.
!                                                              (line  972)
  * __fractdihq:                           Fixed-point fractional library routines.
!                                                              (line  969)
  * __fractdiqq:                           Fixed-point fractional library routines.
!                                                              (line  968)
  * __fractdisa:                           Fixed-point fractional library routines.
!                                                              (line  973)
  * __fractdisq:                           Fixed-point fractional library routines.
!                                                              (line  970)
  * __fractdita:                           Fixed-point fractional library routines.
!                                                              (line  975)
  * __fractdiuda:                          Fixed-point fractional library routines.
!                                                              (line  982)
  * __fractdiudq:                          Fixed-point fractional library routines.
!                                                              (line  979)
  * __fractdiuha:                          Fixed-point fractional library routines.
!                                                              (line  980)
  * __fractdiuhq:                          Fixed-point fractional library routines.
!                                                              (line  977)
  * __fractdiuqq:                          Fixed-point fractional library routines.
!                                                              (line  976)
  * __fractdiusa:                          Fixed-point fractional library routines.
!                                                              (line  981)
  * __fractdiusq:                          Fixed-point fractional library routines.
!                                                              (line  978)
  * __fractdiuta:                          Fixed-point fractional library routines.
!                                                              (line  983)
  * __fractdqda:                           Fixed-point fractional library routines.
!                                                              (line  543)
  * __fractdqdf:                           Fixed-point fractional library routines.
!                                                              (line  565)
  * __fractdqdi:                           Fixed-point fractional library routines.
!                                                              (line  562)
  * __fractdqha:                           Fixed-point fractional library routines.
!                                                              (line  541)
  * __fractdqhi:                           Fixed-point fractional library routines.
!                                                              (line  560)
  * __fractdqhq2:                          Fixed-point fractional library routines.
!                                                              (line  539)
  * __fractdqqi:                           Fixed-point fractional library routines.
!                                                              (line  559)
  * __fractdqqq2:                          Fixed-point fractional library routines.
!                                                              (line  538)
  * __fractdqsa:                           Fixed-point fractional library routines.
!                                                              (line  542)
  * __fractdqsf:                           Fixed-point fractional library routines.
!                                                              (line  564)
  * __fractdqsi:                           Fixed-point fractional library routines.
!                                                              (line  561)
  * __fractdqsq2:                          Fixed-point fractional library routines.
!                                                              (line  540)
  * __fractdqta:                           Fixed-point fractional library routines.
!                                                              (line  544)
  * __fractdqti:                           Fixed-point fractional library routines.
                                                               (line  563)
+ * __fractdquda:                          Fixed-point fractional library routines.
+                                                              (line  555)
  * __fractdqudq:                          Fixed-point fractional library routines.
!                                                              (line  550)
  * __fractdquha:                          Fixed-point fractional library routines.
!                                                              (line  552)
  * __fractdquhq:                          Fixed-point fractional library routines.
!                                                              (line  547)
  * __fractdquqq:                          Fixed-point fractional library routines.
!                                                              (line  545)
  * __fractdqusa:                          Fixed-point fractional library routines.
!                                                              (line  554)
  * __fractdqusq:                          Fixed-point fractional library routines.
!                                                              (line  548)
  * __fractdquta:                          Fixed-point fractional library routines.
!                                                              (line  557)
  * __fracthada2:                          Fixed-point fractional library routines.
!                                                              (line  571)
  * __fracthadf:                           Fixed-point fractional library routines.
!                                                              (line  589)
  * __fracthadi:                           Fixed-point fractional library routines.
!                                                              (line  586)
  * __fracthadq:                           Fixed-point fractional library routines.
!                                                              (line  569)
  * __fracthahi:                           Fixed-point fractional library routines.
!                                                              (line  584)
  * __fracthahq:                           Fixed-point fractional library routines.
!                                                              (line  567)
  * __fracthaqi:                           Fixed-point fractional library routines.
!                                                              (line  583)
  * __fracthaqq:                           Fixed-point fractional library routines.
!                                                              (line  566)
  * __fracthasa2:                          Fixed-point fractional library routines.
!                                                              (line  570)
  * __fracthasf:                           Fixed-point fractional library routines.
!                                                              (line  588)
  * __fracthasi:                           Fixed-point fractional library routines.
!                                                              (line  585)
  * __fracthasq:                           Fixed-point fractional library routines.
!                                                              (line  568)
  * __fracthata2:                          Fixed-point fractional library routines.
!                                                              (line  572)
  * __fracthati:                           Fixed-point fractional library routines.
!                                                              (line  587)
  * __fracthauda:                          Fixed-point fractional library routines.
!                                                              (line  580)
  * __fracthaudq:                          Fixed-point fractional library routines.
!                                                              (line  576)
  * __fracthauha:                          Fixed-point fractional library routines.
!                                                              (line  578)
  * __fracthauhq:                          Fixed-point fractional library routines.
!                                                              (line  574)
  * __fracthauqq:                          Fixed-point fractional library routines.
!                                                              (line  573)
  * __fracthausa:                          Fixed-point fractional library routines.
!                                                              (line  579)
  * __fracthausq:                          Fixed-point fractional library routines.
!                                                              (line  575)
  * __fracthauta:                          Fixed-point fractional library routines.
!                                                              (line  581)
  * __fracthida:                           Fixed-point fractional library routines.
!                                                              (line  942)
  * __fracthidq:                           Fixed-point fractional library routines.
!                                                              (line  939)
  * __fracthiha:                           Fixed-point fractional library routines.
!                                                              (line  940)
  * __fracthihq:                           Fixed-point fractional library routines.
!                                                              (line  937)
  * __fracthiqq:                           Fixed-point fractional library routines.
!                                                              (line  936)
  * __fracthisa:                           Fixed-point fractional library routines.
!                                                              (line  941)
  * __fracthisq:                           Fixed-point fractional library routines.
!                                                              (line  938)
  * __fracthita:                           Fixed-point fractional library routines.
!                                                              (line  943)
  * __fracthiuda:                          Fixed-point fractional library routines.
!                                                              (line  950)
  * __fracthiudq:                          Fixed-point fractional library routines.
!                                                              (line  947)
  * __fracthiuha:                          Fixed-point fractional library routines.
!                                                              (line  948)
  * __fracthiuhq:                          Fixed-point fractional library routines.
!                                                              (line  945)
  * __fracthiuqq:                          Fixed-point fractional library routines.
!                                                              (line  944)
  * __fracthiusa:                          Fixed-point fractional library routines.
!                                                              (line  949)
  * __fracthiusq:                          Fixed-point fractional library routines.
!                                                              (line  946)
  * __fracthiuta:                          Fixed-point fractional library routines.
!                                                              (line  951)
  * __fracthqda:                           Fixed-point fractional library routines.
!                                                              (line  497)
  * __fracthqdf:                           Fixed-point fractional library routines.
!                                                              (line  513)
  * __fracthqdi:                           Fixed-point fractional library routines.
!                                                              (line  510)
  * __fracthqdq2:                          Fixed-point fractional library routines.
!                                                              (line  494)
  * __fracthqha:                           Fixed-point fractional library routines.
!                                                              (line  495)
  * __fracthqhi:                           Fixed-point fractional library routines.
!                                                              (line  508)
  * __fracthqqi:                           Fixed-point fractional library routines.
!                                                              (line  507)
  * __fracthqqq2:                          Fixed-point fractional library routines.
!                                                              (line  492)
  * __fracthqsa:                           Fixed-point fractional library routines.
!                                                              (line  496)
  * __fracthqsf:                           Fixed-point fractional library routines.
!                                                              (line  512)
  * __fracthqsi:                           Fixed-point fractional library routines.
!                                                              (line  509)
  * __fracthqsq2:                          Fixed-point fractional library routines.
!                                                              (line  493)
  * __fracthqta:                           Fixed-point fractional library routines.
!                                                              (line  498)
  * __fracthqti:                           Fixed-point fractional library routines.
!                                                              (line  511)
  * __fracthquda:                          Fixed-point fractional library routines.
!                                                              (line  505)
  * __fracthqudq:                          Fixed-point fractional library routines.
!                                                              (line  502)
  * __fracthquha:                          Fixed-point fractional library routines.
!                                                              (line  503)
  * __fracthquhq:                          Fixed-point fractional library routines.
!                                                              (line  500)
  * __fracthquqq:                          Fixed-point fractional library routines.
!                                                              (line  499)
  * __fracthqusa:                          Fixed-point fractional library routines.
!                                                              (line  504)
  * __fracthqusq:                          Fixed-point fractional library routines.
!                                                              (line  501)
  * __fracthquta:                          Fixed-point fractional library routines.
!                                                              (line  506)
  * __fractqida:                           Fixed-point fractional library routines.
!                                                              (line  924)
  * __fractqidq:                           Fixed-point fractional library routines.
!                                                              (line  921)
  * __fractqiha:                           Fixed-point fractional library routines.
!                                                              (line  922)
  * __fractqihq:                           Fixed-point fractional library routines.
!                                                              (line  919)
  * __fractqiqq:                           Fixed-point fractional library routines.
!                                                              (line  918)
  * __fractqisa:                           Fixed-point fractional library routines.
!                                                              (line  923)
  * __fractqisq:                           Fixed-point fractional library routines.
!                                                              (line  920)
  * __fractqita:                           Fixed-point fractional library routines.
!                                                              (line  925)
  * __fractqiuda:                          Fixed-point fractional library routines.
!                                                              (line  933)
  * __fractqiudq:                          Fixed-point fractional library routines.
!                                                              (line  929)
  * __fractqiuha:                          Fixed-point fractional library routines.
!                                                              (line  931)
  * __fractqiuhq:                          Fixed-point fractional library routines.
!                                                              (line  927)
  * __fractqiuqq:                          Fixed-point fractional library routines.
!                                                              (line  926)
  * __fractqiusa:                          Fixed-point fractional library routines.
!                                                              (line  932)
  * __fractqiusq:                          Fixed-point fractional library routines.
!                                                              (line  928)
  * __fractqiuta:                          Fixed-point fractional library routines.
!                                                              (line  934)
  * __fractqqda:                           Fixed-point fractional library routines.
!                                                              (line  473)
  * __fractqqdf:                           Fixed-point fractional library routines.
!                                                              (line  491)
  * __fractqqdi:                           Fixed-point fractional library routines.
!                                                              (line  488)
  * __fractqqdq2:                          Fixed-point fractional library routines.
!                                                              (line  470)
  * __fractqqha:                           Fixed-point fractional library routines.
!                                                              (line  471)
  * __fractqqhi:                           Fixed-point fractional library routines.
!                                                              (line  486)
  * __fractqqhq2:                          Fixed-point fractional library routines.
!                                                              (line  468)
  * __fractqqqi:                           Fixed-point fractional library routines.
!                                                              (line  485)
  * __fractqqsa:                           Fixed-point fractional library routines.
!                                                              (line  472)
  * __fractqqsf:                           Fixed-point fractional library routines.
!                                                              (line  490)
  * __fractqqsi:                           Fixed-point fractional library routines.
!                                                              (line  487)
  * __fractqqsq2:                          Fixed-point fractional library routines.
!                                                              (line  469)
  * __fractqqta:                           Fixed-point fractional library routines.
!                                                              (line  474)
  * __fractqqti:                           Fixed-point fractional library routines.
!                                                              (line  489)
  * __fractqquda:                          Fixed-point fractional library routines.
!                                                              (line  482)
  * __fractqqudq:                          Fixed-point fractional library routines.
!                                                              (line  478)
  * __fractqquha:                          Fixed-point fractional library routines.
!                                                              (line  480)
  * __fractqquhq:                          Fixed-point fractional library routines.
!                                                              (line  476)
  * __fractqquqq:                          Fixed-point fractional library routines.
!                                                              (line  475)
  * __fractqqusa:                          Fixed-point fractional library routines.
!                                                              (line  481)
  * __fractqqusq:                          Fixed-point fractional library routines.
!                                                              (line  477)
  * __fractqquta:                          Fixed-point fractional library routines.
!                                                              (line  483)
  * __fractsada2:                          Fixed-point fractional library routines.
!                                                              (line  595)
  * __fractsadf:                           Fixed-point fractional library routines.
!                                                              (line  611)
  * __fractsadi:                           Fixed-point fractional library routines.
!                                                              (line  608)
  * __fractsadq:                           Fixed-point fractional library routines.
!                                                              (line  593)
  * __fractsaha2:                          Fixed-point fractional library routines.
!                                                              (line  594)
  * __fractsahi:                           Fixed-point fractional library routines.
!                                                              (line  606)
  * __fractsahq:                           Fixed-point fractional library routines.
!                                                              (line  591)
  * __fractsaqi:                           Fixed-point fractional library routines.
!                                                              (line  605)
  * __fractsaqq:                           Fixed-point fractional library routines.
!                                                              (line  590)
  * __fractsasf:                           Fixed-point fractional library routines.
!                                                              (line  610)
  * __fractsasi:                           Fixed-point fractional library routines.
!                                                              (line  607)
  * __fractsasq:                           Fixed-point fractional library routines.
!                                                              (line  592)
  * __fractsata2:                          Fixed-point fractional library routines.
!                                                              (line  596)
  * __fractsati:                           Fixed-point fractional library routines.
!                                                              (line  609)
  * __fractsauda:                          Fixed-point fractional library routines.
!                                                              (line  603)
  * __fractsaudq:                          Fixed-point fractional library routines.
!                                                              (line  600)
  * __fractsauha:                          Fixed-point fractional library routines.
!                                                              (line  601)
  * __fractsauhq:                          Fixed-point fractional library routines.
!                                                              (line  598)
  * __fractsauqq:                          Fixed-point fractional library routines.
!                                                              (line  597)
  * __fractsausa:                          Fixed-point fractional library routines.
!                                                              (line  602)
  * __fractsausq:                          Fixed-point fractional library routines.
!                                                              (line  599)
  * __fractsauta:                          Fixed-point fractional library routines.
!                                                              (line  604)
  * __fractsfda:                           Fixed-point fractional library routines.
!                                                              (line 1008)
  * __fractsfdq:                           Fixed-point fractional library routines.
!                                                              (line 1005)
  * __fractsfha:                           Fixed-point fractional library routines.
!                                                              (line 1006)
  * __fractsfhq:                           Fixed-point fractional library routines.
!                                                              (line 1003)
  * __fractsfqq:                           Fixed-point fractional library routines.
!                                                              (line 1002)
  * __fractsfsa:                           Fixed-point fractional library routines.
!                                                              (line 1007)
  * __fractsfsq:                           Fixed-point fractional library routines.
!                                                              (line 1004)
  * __fractsfta:                           Fixed-point fractional library routines.
!                                                              (line 1009)
  * __fractsfuda:                          Fixed-point fractional library routines.
!                                                              (line 1016)
  * __fractsfudq:                          Fixed-point fractional library routines.
!                                                              (line 1013)
  * __fractsfuha:                          Fixed-point fractional library routines.
!                                                              (line 1014)
  * __fractsfuhq:                          Fixed-point fractional library routines.
!                                                              (line 1011)
  * __fractsfuqq:                          Fixed-point fractional library routines.
!                                                              (line 1010)
  * __fractsfusa:                          Fixed-point fractional library routines.
!                                                              (line 1015)
  * __fractsfusq:                          Fixed-point fractional library routines.
!                                                              (line 1012)
  * __fractsfuta:                          Fixed-point fractional library routines.
!                                                              (line 1017)
  * __fractsida:                           Fixed-point fractional library routines.
!                                                              (line  958)
  * __fractsidq:                           Fixed-point fractional library routines.
!                                                              (line  955)
  * __fractsiha:                           Fixed-point fractional library routines.
!                                                              (line  956)
  * __fractsihq:                           Fixed-point fractional library routines.
!                                                              (line  953)
  * __fractsiqq:                           Fixed-point fractional library routines.
!                                                              (line  952)
  * __fractsisa:                           Fixed-point fractional library routines.
!                                                              (line  957)
  * __fractsisq:                           Fixed-point fractional library routines.
!                                                              (line  954)
  * __fractsita:                           Fixed-point fractional library routines.
!                                                              (line  959)
  * __fractsiuda:                          Fixed-point fractional library routines.
!                                                              (line  966)
  * __fractsiudq:                          Fixed-point fractional library routines.
!                                                              (line  963)
  * __fractsiuha:                          Fixed-point fractional library routines.
!                                                              (line  964)
  * __fractsiuhq:                          Fixed-point fractional library routines.
!                                                              (line  961)
  * __fractsiuqq:                          Fixed-point fractional library routines.
!                                                              (line  960)
  * __fractsiusa:                          Fixed-point fractional library routines.
!                                                              (line  965)
  * __fractsiusq:                          Fixed-point fractional library routines.
!                                                              (line  962)
  * __fractsiuta:                          Fixed-point fractional library routines.
!                                                              (line  967)
  * __fractsqda:                           Fixed-point fractional library routines.
!                                                              (line  519)
  * __fractsqdf:                           Fixed-point fractional library routines.
!                                                              (line  537)
  * __fractsqdi:                           Fixed-point fractional library routines.
!                                                              (line  534)
  * __fractsqdq2:                          Fixed-point fractional library routines.
!                                                              (line  516)
  * __fractsqha:                           Fixed-point fractional library routines.
!                                                              (line  517)
  * __fractsqhi:                           Fixed-point fractional library routines.
!                                                              (line  532)
  * __fractsqhq2:                          Fixed-point fractional library routines.
!                                                              (line  515)
  * __fractsqqi:                           Fixed-point fractional library routines.
!                                                              (line  531)
  * __fractsqqq2:                          Fixed-point fractional library routines.
!                                                              (line  514)
  * __fractsqsa:                           Fixed-point fractional library routines.
!                                                              (line  518)
  * __fractsqsf:                           Fixed-point fractional library routines.
!                                                              (line  536)
  * __fractsqsi:                           Fixed-point fractional library routines.
!                                                              (line  533)
  * __fractsqta:                           Fixed-point fractional library routines.
!                                                              (line  520)
  * __fractsqti:                           Fixed-point fractional library routines.
!                                                              (line  535)
  * __fractsquda:                          Fixed-point fractional library routines.
!                                                              (line  528)
  * __fractsqudq:                          Fixed-point fractional library routines.
!                                                              (line  524)
  * __fractsquha:                          Fixed-point fractional library routines.
!                                                              (line  526)
  * __fractsquhq:                          Fixed-point fractional library routines.
!                                                              (line  522)
  * __fractsquqq:                          Fixed-point fractional library routines.
!                                                              (line  521)
  * __fractsqusa:                          Fixed-point fractional library routines.
!                                                              (line  527)
  * __fractsqusq:                          Fixed-point fractional library routines.
!                                                              (line  523)
  * __fractsquta:                          Fixed-point fractional library routines.
!                                                              (line  529)
  * __fracttada2:                          Fixed-point fractional library routines.
!                                                              (line  642)
  * __fracttadf:                           Fixed-point fractional library routines.
!                                                              (line  663)
  * __fracttadi:                           Fixed-point fractional library routines.
!                                                              (line  660)
  * __fracttadq:                           Fixed-point fractional library routines.
!                                                              (line  639)
  * __fracttaha2:                          Fixed-point fractional library routines.
!                                                              (line  640)
  * __fracttahi:                           Fixed-point fractional library routines.
!                                                              (line  658)
  * __fracttahq:                           Fixed-point fractional library routines.
!                                                              (line  637)
  * __fracttaqi:                           Fixed-point fractional library routines.
!                                                              (line  657)
  * __fracttaqq:                           Fixed-point fractional library routines.
!                                                              (line  636)
  * __fracttasa2:                          Fixed-point fractional library routines.
!                                                              (line  641)
  * __fracttasf:                           Fixed-point fractional library routines.
!                                                              (line  662)
  * __fracttasi:                           Fixed-point fractional library routines.
!                                                              (line  659)
  * __fracttasq:                           Fixed-point fractional library routines.
!                                                              (line  638)
  * __fracttati:                           Fixed-point fractional library routines.
                                                               (line  661)
+ * __fracttauda:                          Fixed-point fractional library routines.
+                                                              (line  653)
  * __fracttaudq:                          Fixed-point fractional library routines.
!                                                              (line  648)
  * __fracttauha:                          Fixed-point fractional library routines.
!                                                              (line  650)
  * __fracttauhq:                          Fixed-point fractional library routines.
!                                                              (line  645)
  * __fracttauqq:                          Fixed-point fractional library routines.
!                                                              (line  643)
  * __fracttausa:                          Fixed-point fractional library routines.
!                                                              (line  652)
  * __fracttausq:                          Fixed-point fractional library routines.
!                                                              (line  646)
  * __fracttauta:                          Fixed-point fractional library routines.
!                                                              (line  655)
  * __fracttida:                           Fixed-point fractional library routines.
!                                                              (line  990)
  * __fracttidq:                           Fixed-point fractional library routines.
!                                                              (line  987)
  * __fracttiha:                           Fixed-point fractional library routines.
!                                                              (line  988)
  * __fracttihq:                           Fixed-point fractional library routines.
!                                                              (line  985)
  * __fracttiqq:                           Fixed-point fractional library routines.
!                                                              (line  984)
  * __fracttisa:                           Fixed-point fractional library routines.
!                                                              (line  989)
  * __fracttisq:                           Fixed-point fractional library routines.
!                                                              (line  986)
  * __fracttita:                           Fixed-point fractional library routines.
!                                                              (line  991)
  * __fracttiuda:                          Fixed-point fractional library routines.
!                                                              (line  999)
  * __fracttiudq:                          Fixed-point fractional library routines.
!                                                              (line  995)
  * __fracttiuha:                          Fixed-point fractional library routines.
!                                                              (line  997)
  * __fracttiuhq:                          Fixed-point fractional library routines.
!                                                              (line  993)
  * __fracttiuqq:                          Fixed-point fractional library routines.
!                                                              (line  992)
  * __fracttiusa:                          Fixed-point fractional library routines.
!                                                              (line  998)
  * __fracttiusq:                          Fixed-point fractional library routines.
!                                                              (line  994)
  * __fracttiuta:                          Fixed-point fractional library routines.
!                                                              (line 1000)
  * __fractudada:                          Fixed-point fractional library routines.
!                                                              (line  857)
  * __fractudadf:                          Fixed-point fractional library routines.
!                                                              (line  880)
  * __fractudadi:                          Fixed-point fractional library routines.
!                                                              (line  877)
  * __fractudadq:                          Fixed-point fractional library routines.
!                                                              (line  853)
  * __fractudaha:                          Fixed-point fractional library routines.
!                                                              (line  855)
  * __fractudahi:                          Fixed-point fractional library routines.
!                                                              (line  875)
  * __fractudahq:                          Fixed-point fractional library routines.
!                                                              (line  851)
  * __fractudaqi:                          Fixed-point fractional library routines.
!                                                              (line  874)
  * __fractudaqq:                          Fixed-point fractional library routines.
!                                                              (line  850)
  * __fractudasa:                          Fixed-point fractional library routines.
!                                                              (line  856)
  * __fractudasf:                          Fixed-point fractional library routines.
!                                                              (line  879)
  * __fractudasi:                          Fixed-point fractional library routines.
!                                                              (line  876)
  * __fractudasq:                          Fixed-point fractional library routines.
!                                                              (line  852)
  * __fractudata:                          Fixed-point fractional library routines.
!                                                              (line  858)
  * __fractudati:                          Fixed-point fractional library routines.
!                                                              (line  878)
  * __fractudaudq:                         Fixed-point fractional library routines.
!                                                              (line  866)
  * __fractudauha2:                        Fixed-point fractional library routines.
!                                                              (line  868)
  * __fractudauhq:                         Fixed-point fractional library routines.
!                                                              (line  862)
  * __fractudauqq:                         Fixed-point fractional library routines.
!                                                              (line  860)
  * __fractudausa2:                        Fixed-point fractional library routines.
!                                                              (line  870)
  * __fractudausq:                         Fixed-point fractional library routines.
!                                                              (line  864)
  * __fractudauta2:                        Fixed-point fractional library routines.
!                                                              (line  872)
  * __fractudqda:                          Fixed-point fractional library routines.
!                                                              (line  764)
  * __fractudqdf:                          Fixed-point fractional library routines.
!                                                              (line  790)
  * __fractudqdi:                          Fixed-point fractional library routines.
!                                                              (line  786)
  * __fractudqdq:                          Fixed-point fractional library routines.
!                                                              (line  759)
  * __fractudqha:                          Fixed-point fractional library routines.
!                                                              (line  761)
  * __fractudqhi:                          Fixed-point fractional library routines.
!                                                              (line  784)
  * __fractudqhq:                          Fixed-point fractional library routines.
!                                                              (line  756)
  * __fractudqqi:                          Fixed-point fractional library routines.
!                                                              (line  782)
  * __fractudqqq:                          Fixed-point fractional library routines.
!                                                              (line  754)
  * __fractudqsa:                          Fixed-point fractional library routines.
!                                                              (line  763)
  * __fractudqsf:                          Fixed-point fractional library routines.
!                                                              (line  789)
  * __fractudqsi:                          Fixed-point fractional library routines.
!                                                              (line  785)
  * __fractudqsq:                          Fixed-point fractional library routines.
!                                                              (line  757)
  * __fractudqta:                          Fixed-point fractional library routines.
!                                                              (line  766)
  * __fractudqti:                          Fixed-point fractional library routines.
!                                                              (line  787)
  * __fractudquda:                         Fixed-point fractional library routines.
!                                                              (line  778)
  * __fractudquha:                         Fixed-point fractional library routines.
!                                                              (line  774)
  * __fractudquhq2:                        Fixed-point fractional library routines.
!                                                              (line  770)
  * __fractudquqq2:                        Fixed-point fractional library routines.
!                                                              (line  768)
  * __fractudqusa:                         Fixed-point fractional library routines.
!                                                              (line  776)
  * __fractudqusq2:                        Fixed-point fractional library routines.
!                                                              (line  772)
  * __fractudquta:                         Fixed-point fractional library routines.
!                                                              (line  780)
  * __fractuhada:                          Fixed-point fractional library routines.
!                                                              (line  798)
  * __fractuhadf:                          Fixed-point fractional library routines.
!                                                              (line  821)
  * __fractuhadi:                          Fixed-point fractional library routines.
!                                                              (line  818)
  * __fractuhadq:                          Fixed-point fractional library routines.
!                                                              (line  794)
  * __fractuhaha:                          Fixed-point fractional library routines.
!                                                              (line  796)
  * __fractuhahi:                          Fixed-point fractional library routines.
!                                                              (line  816)
  * __fractuhahq:                          Fixed-point fractional library routines.
!                                                              (line  792)
  * __fractuhaqi:                          Fixed-point fractional library routines.
!                                                              (line  815)
  * __fractuhaqq:                          Fixed-point fractional library routines.
!                                                              (line  791)
  * __fractuhasa:                          Fixed-point fractional library routines.
!                                                              (line  797)
  * __fractuhasf:                          Fixed-point fractional library routines.
!                                                              (line  820)
  * __fractuhasi:                          Fixed-point fractional library routines.
!                                                              (line  817)
  * __fractuhasq:                          Fixed-point fractional library routines.
!                                                              (line  793)
  * __fractuhata:                          Fixed-point fractional library routines.
!                                                              (line  799)
  * __fractuhati:                          Fixed-point fractional library routines.
                                                               (line  819)
+ * __fractuhauda2:                        Fixed-point fractional library routines.
+                                                              (line  811)
  * __fractuhaudq:                         Fixed-point fractional library routines.
!                                                              (line  807)
  * __fractuhauhq:                         Fixed-point fractional library routines.
!                                                              (line  803)
  * __fractuhauqq:                         Fixed-point fractional library routines.
!                                                              (line  801)
  * __fractuhausa2:                        Fixed-point fractional library routines.
!                                                              (line  809)
  * __fractuhausq:                         Fixed-point fractional library routines.
!                                                              (line  805)
  * __fractuhauta2:                        Fixed-point fractional library routines.
!                                                              (line  813)
  * __fractuhqda:                          Fixed-point fractional library routines.
!                                                              (line  701)
  * __fractuhqdf:                          Fixed-point fractional library routines.
!                                                              (line  722)
  * __fractuhqdi:                          Fixed-point fractional library routines.
!                                                              (line  719)
  * __fractuhqdq:                          Fixed-point fractional library routines.
!                                                              (line  698)
  * __fractuhqha:                          Fixed-point fractional library routines.
!                                                              (line  699)
  * __fractuhqhi:                          Fixed-point fractional library routines.
!                                                              (line  717)
  * __fractuhqhq:                          Fixed-point fractional library routines.
!                                                              (line  696)
  * __fractuhqqi:                          Fixed-point fractional library routines.
!                                                              (line  716)
  * __fractuhqqq:                          Fixed-point fractional library routines.
!                                                              (line  695)
  * __fractuhqsa:                          Fixed-point fractional library routines.
!                                                              (line  700)
  * __fractuhqsf:                          Fixed-point fractional library routines.
!                                                              (line  721)
  * __fractuhqsi:                          Fixed-point fractional library routines.
!                                                              (line  718)
  * __fractuhqsq:                          Fixed-point fractional library routines.
!                                                              (line  697)
  * __fractuhqta:                          Fixed-point fractional library routines.
!                                                              (line  702)
  * __fractuhqti:                          Fixed-point fractional library routines.
                                                               (line  720)
+ * __fractuhquda:                         Fixed-point fractional library routines.
+                                                              (line  712)
  * __fractuhqudq2:                        Fixed-point fractional library routines.
!                                                              (line  707)
  * __fractuhquha:                         Fixed-point fractional library routines.
!                                                              (line  709)
  * __fractuhquqq2:                        Fixed-point fractional library routines.
!                                                              (line  703)
  * __fractuhqusa:                         Fixed-point fractional library routines.
!                                                              (line  711)
  * __fractuhqusq2:                        Fixed-point fractional library routines.
!                                                              (line  705)
  * __fractuhquta:                         Fixed-point fractional library routines.
!                                                              (line  714)
  * __fractunsdadi:                        Fixed-point fractional library routines.
!                                                              (line 1554)
  * __fractunsdahi:                        Fixed-point fractional library routines.
!                                                              (line 1552)
  * __fractunsdaqi:                        Fixed-point fractional library routines.
!                                                              (line 1551)
  * __fractunsdasi:                        Fixed-point fractional library routines.
!                                                              (line 1553)
  * __fractunsdati:                        Fixed-point fractional library routines.
!                                                              (line 1555)
  * __fractunsdida:                        Fixed-point fractional library routines.
!                                                              (line 1706)
  * __fractunsdidq:                        Fixed-point fractional library routines.
!                                                              (line 1703)
  * __fractunsdiha:                        Fixed-point fractional library routines.
!                                                              (line 1704)
  * __fractunsdihq:                        Fixed-point fractional library routines.
!                                                              (line 1701)
  * __fractunsdiqq:                        Fixed-point fractional library routines.
!                                                              (line 1700)
  * __fractunsdisa:                        Fixed-point fractional library routines.
!                                                              (line 1705)
  * __fractunsdisq:                        Fixed-point fractional library routines.
!                                                              (line 1702)
  * __fractunsdita:                        Fixed-point fractional library routines.
!                                                              (line 1707)
  * __fractunsdiuda:                       Fixed-point fractional library routines.
!                                                              (line 1718)
  * __fractunsdiudq:                       Fixed-point fractional library routines.
!                                                              (line 1713)
  * __fractunsdiuha:                       Fixed-point fractional library routines.
!                                                              (line 1715)
  * __fractunsdiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1710)
  * __fractunsdiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1708)
  * __fractunsdiusa:                       Fixed-point fractional library routines.
!                                                              (line 1717)
  * __fractunsdiusq:                       Fixed-point fractional library routines.
!                                                              (line 1711)
  * __fractunsdiuta:                       Fixed-point fractional library routines.
!                                                              (line 1720)
  * __fractunsdqdi:                        Fixed-point fractional library routines.
!                                                              (line 1538)
  * __fractunsdqhi:                        Fixed-point fractional library routines.
!                                                              (line 1536)
  * __fractunsdqqi:                        Fixed-point fractional library routines.
!                                                              (line 1535)
  * __fractunsdqsi:                        Fixed-point fractional library routines.
!                                                              (line 1537)
  * __fractunsdqti:                        Fixed-point fractional library routines.
!                                                              (line 1539)
  * __fractunshadi:                        Fixed-point fractional library routines.
!                                                              (line 1544)
  * __fractunshahi:                        Fixed-point fractional library routines.
!                                                              (line 1542)
  * __fractunshaqi:                        Fixed-point fractional library routines.
!                                                              (line 1541)
  * __fractunshasi:                        Fixed-point fractional library routines.
!                                                              (line 1543)
  * __fractunshati:                        Fixed-point fractional library routines.
!                                                              (line 1545)
  * __fractunshida:                        Fixed-point fractional library routines.
!                                                              (line 1662)
  * __fractunshidq:                        Fixed-point fractional library routines.
!                                                              (line 1659)
  * __fractunshiha:                        Fixed-point fractional library routines.
!                                                              (line 1660)
  * __fractunshihq:                        Fixed-point fractional library routines.
!                                                              (line 1657)
  * __fractunshiqq:                        Fixed-point fractional library routines.
!                                                              (line 1656)
  * __fractunshisa:                        Fixed-point fractional library routines.
!                                                              (line 1661)
  * __fractunshisq:                        Fixed-point fractional library routines.
!                                                              (line 1658)
  * __fractunshita:                        Fixed-point fractional library routines.
!                                                              (line 1663)
  * __fractunshiuda:                       Fixed-point fractional library routines.
!                                                              (line 1674)
  * __fractunshiudq:                       Fixed-point fractional library routines.
!                                                              (line 1669)
  * __fractunshiuha:                       Fixed-point fractional library routines.
!                                                              (line 1671)
  * __fractunshiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1666)
  * __fractunshiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1664)
  * __fractunshiusa:                       Fixed-point fractional library routines.
!                                                              (line 1673)
  * __fractunshiusq:                       Fixed-point fractional library routines.
!                                                              (line 1667)
  * __fractunshiuta:                       Fixed-point fractional library routines.
!                                                              (line 1676)
  * __fractunshqdi:                        Fixed-point fractional library routines.
!                                                              (line 1528)
  * __fractunshqhi:                        Fixed-point fractional library routines.
!                                                              (line 1526)
  * __fractunshqqi:                        Fixed-point fractional library routines.
!                                                              (line 1525)
  * __fractunshqsi:                        Fixed-point fractional library routines.
!                                                              (line 1527)
  * __fractunshqti:                        Fixed-point fractional library routines.
!                                                              (line 1529)
  * __fractunsqida:                        Fixed-point fractional library routines.
!                                                              (line 1640)
  * __fractunsqidq:                        Fixed-point fractional library routines.
!                                                              (line 1637)
  * __fractunsqiha:                        Fixed-point fractional library routines.
!                                                              (line 1638)
  * __fractunsqihq:                        Fixed-point fractional library routines.
!                                                              (line 1635)
  * __fractunsqiqq:                        Fixed-point fractional library routines.
!                                                              (line 1634)
  * __fractunsqisa:                        Fixed-point fractional library routines.
!                                                              (line 1639)
  * __fractunsqisq:                        Fixed-point fractional library routines.
!                                                              (line 1636)
  * __fractunsqita:                        Fixed-point fractional library routines.
!                                                              (line 1641)
  * __fractunsqiuda:                       Fixed-point fractional library routines.
!                                                              (line 1652)
  * __fractunsqiudq:                       Fixed-point fractional library routines.
!                                                              (line 1647)
  * __fractunsqiuha:                       Fixed-point fractional library routines.
!                                                              (line 1649)
  * __fractunsqiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1644)
  * __fractunsqiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1642)
  * __fractunsqiusa:                       Fixed-point fractional library routines.
!                                                              (line 1651)
  * __fractunsqiusq:                       Fixed-point fractional library routines.
!                                                              (line 1645)
  * __fractunsqiuta:                       Fixed-point fractional library routines.
!                                                              (line 1654)
  * __fractunsqqdi:                        Fixed-point fractional library routines.
!                                                              (line 1523)
  * __fractunsqqhi:                        Fixed-point fractional library routines.
!                                                              (line 1521)
  * __fractunsqqqi:                        Fixed-point fractional library routines.
!                                                              (line 1520)
  * __fractunsqqsi:                        Fixed-point fractional library routines.
!                                                              (line 1522)
  * __fractunsqqti:                        Fixed-point fractional library routines.
!                                                              (line 1524)
  * __fractunssadi:                        Fixed-point fractional library routines.
!                                                              (line 1549)
  * __fractunssahi:                        Fixed-point fractional library routines.
!                                                              (line 1547)
  * __fractunssaqi:                        Fixed-point fractional library routines.
!                                                              (line 1546)
  * __fractunssasi:                        Fixed-point fractional library routines.
!                                                              (line 1548)
  * __fractunssati:                        Fixed-point fractional library routines.
!                                                              (line 1550)
  * __fractunssida:                        Fixed-point fractional library routines.
!                                                              (line 1684)
  * __fractunssidq:                        Fixed-point fractional library routines.
!                                                              (line 1681)
  * __fractunssiha:                        Fixed-point fractional library routines.
!                                                              (line 1682)
  * __fractunssihq:                        Fixed-point fractional library routines.
!                                                              (line 1679)
  * __fractunssiqq:                        Fixed-point fractional library routines.
!                                                              (line 1678)
  * __fractunssisa:                        Fixed-point fractional library routines.
!                                                              (line 1683)
  * __fractunssisq:                        Fixed-point fractional library routines.
!                                                              (line 1680)
  * __fractunssita:                        Fixed-point fractional library routines.
!                                                              (line 1685)
  * __fractunssiuda:                       Fixed-point fractional library routines.
!                                                              (line 1696)
  * __fractunssiudq:                       Fixed-point fractional library routines.
!                                                              (line 1691)
  * __fractunssiuha:                       Fixed-point fractional library routines.
!                                                              (line 1693)
  * __fractunssiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1688)
  * __fractunssiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1686)
  * __fractunssiusa:                       Fixed-point fractional library routines.
!                                                              (line 1695)
  * __fractunssiusq:                       Fixed-point fractional library routines.
!                                                              (line 1689)
  * __fractunssiuta:                       Fixed-point fractional library routines.
!                                                              (line 1698)
  * __fractunssqdi:                        Fixed-point fractional library routines.
!                                                              (line 1533)
  * __fractunssqhi:                        Fixed-point fractional library routines.
!                                                              (line 1531)
  * __fractunssqqi:                        Fixed-point fractional library routines.
!                                                              (line 1530)
  * __fractunssqsi:                        Fixed-point fractional library routines.
!                                                              (line 1532)
  * __fractunssqti:                        Fixed-point fractional library routines.
!                                                              (line 1534)
  * __fractunstadi:                        Fixed-point fractional library routines.
!                                                              (line 1559)
  * __fractunstahi:                        Fixed-point fractional library routines.
!                                                              (line 1557)
  * __fractunstaqi:                        Fixed-point fractional library routines.
!                                                              (line 1556)
  * __fractunstasi:                        Fixed-point fractional library routines.
!                                                              (line 1558)
  * __fractunstati:                        Fixed-point fractional library routines.
!                                                              (line 1560)
  * __fractunstida:                        Fixed-point fractional library routines.
!                                                              (line 1729)
  * __fractunstidq:                        Fixed-point fractional library routines.
!                                                              (line 1725)
  * __fractunstiha:                        Fixed-point fractional library routines.
!                                                              (line 1727)
  * __fractunstihq:                        Fixed-point fractional library routines.
!                                                              (line 1723)
  * __fractunstiqq:                        Fixed-point fractional library routines.
!                                                              (line 1722)
  * __fractunstisa:                        Fixed-point fractional library routines.
!                                                              (line 1728)
  * __fractunstisq:                        Fixed-point fractional library routines.
!                                                              (line 1724)
  * __fractunstita:                        Fixed-point fractional library routines.
!                                                              (line 1730)
  * __fractunstiuda:                       Fixed-point fractional library routines.
!                                                              (line 1744)
  * __fractunstiudq:                       Fixed-point fractional library routines.
!                                                              (line 1738)
  * __fractunstiuha:                       Fixed-point fractional library routines.
!                                                              (line 1740)
  * __fractunstiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1734)
  * __fractunstiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1732)
  * __fractunstiusa:                       Fixed-point fractional library routines.
!                                                              (line 1742)
  * __fractunstiusq:                       Fixed-point fractional library routines.
!                                                              (line 1736)
  * __fractunstiuta:                       Fixed-point fractional library routines.
!                                                              (line 1746)
  * __fractunsudadi:                       Fixed-point fractional library routines.
!                                                              (line 1620)
  * __fractunsudahi:                       Fixed-point fractional library routines.
!                                                              (line 1616)
  * __fractunsudaqi:                       Fixed-point fractional library routines.
!                                                              (line 1614)
  * __fractunsudasi:                       Fixed-point fractional library routines.
!                                                              (line 1618)
  * __fractunsudati:                       Fixed-point fractional library routines.
!                                                              (line 1622)
  * __fractunsudqdi:                       Fixed-point fractional library routines.
!                                                              (line 1594)
  * __fractunsudqhi:                       Fixed-point fractional library routines.
!                                                              (line 1590)
  * __fractunsudqqi:                       Fixed-point fractional library routines.
!                                                              (line 1588)
  * __fractunsudqsi:                       Fixed-point fractional library routines.
!                                                              (line 1592)
  * __fractunsudqti:                       Fixed-point fractional library routines.
!                                                              (line 1596)
  * __fractunsuhadi:                       Fixed-point fractional library routines.
!                                                              (line 1604)
  * __fractunsuhahi:                       Fixed-point fractional library routines.
!                                                              (line 1600)
  * __fractunsuhaqi:                       Fixed-point fractional library routines.
!                                                              (line 1598)
  * __fractunsuhasi:                       Fixed-point fractional library routines.
!                                                              (line 1602)
  * __fractunsuhati:                       Fixed-point fractional library routines.
!                                                              (line 1606)
  * __fractunsuhqdi:                       Fixed-point fractional library routines.
!                                                              (line 1575)
  * __fractunsuhqhi:                       Fixed-point fractional library routines.
!                                                              (line 1573)
  * __fractunsuhqqi:                       Fixed-point fractional library routines.
!                                                              (line 1572)
  * __fractunsuhqsi:                       Fixed-point fractional library routines.
!                                                              (line 1574)
  * __fractunsuhqti:                       Fixed-point fractional library routines.
                                                               (line 1576)
+ * __fractunsuqqdi:                       Fixed-point fractional library routines.
+                                                              (line 1568)
  * __fractunsuqqhi:                       Fixed-point fractional library routines.
!                                                              (line 1564)
  * __fractunsuqqqi:                       Fixed-point fractional library routines.
!                                                              (line 1562)
  * __fractunsuqqsi:                       Fixed-point fractional library routines.
!                                                              (line 1566)
  * __fractunsuqqti:                       Fixed-point fractional library routines.
!                                                              (line 1570)
  * __fractunsusadi:                       Fixed-point fractional library routines.
!                                                              (line 1611)
  * __fractunsusahi:                       Fixed-point fractional library routines.
!                                                              (line 1609)
  * __fractunsusaqi:                       Fixed-point fractional library routines.
!                                                              (line 1608)
  * __fractunsusasi:                       Fixed-point fractional library routines.
!                                                              (line 1610)
  * __fractunsusati:                       Fixed-point fractional library routines.
!                                                              (line 1612)
  * __fractunsusqdi:                       Fixed-point fractional library routines.
!                                                              (line 1584)
  * __fractunsusqhi:                       Fixed-point fractional library routines.
!                                                              (line 1580)
  * __fractunsusqqi:                       Fixed-point fractional library routines.
!                                                              (line 1578)
  * __fractunsusqsi:                       Fixed-point fractional library routines.
!                                                              (line 1582)
  * __fractunsusqti:                       Fixed-point fractional library routines.
!                                                              (line 1586)
  * __fractunsutadi:                       Fixed-point fractional library routines.
!                                                              (line 1630)
  * __fractunsutahi:                       Fixed-point fractional library routines.
!                                                              (line 1626)
  * __fractunsutaqi:                       Fixed-point fractional library routines.
!                                                              (line 1624)
  * __fractunsutasi:                       Fixed-point fractional library routines.
!                                                              (line 1628)
  * __fractunsutati:                       Fixed-point fractional library routines.
!                                                              (line 1632)
  * __fractuqqda:                          Fixed-point fractional library routines.
!                                                              (line  671)
  * __fractuqqdf:                          Fixed-point fractional library routines.
!                                                              (line  694)
  * __fractuqqdi:                          Fixed-point fractional library routines.
!                                                              (line  691)
  * __fractuqqdq:                          Fixed-point fractional library routines.
!                                                              (line  667)
  * __fractuqqha:                          Fixed-point fractional library routines.
!                                                              (line  669)
  * __fractuqqhi:                          Fixed-point fractional library routines.
!                                                              (line  689)
  * __fractuqqhq:                          Fixed-point fractional library routines.
!                                                              (line  665)
  * __fractuqqqi:                          Fixed-point fractional library routines.
!                                                              (line  688)
  * __fractuqqqq:                          Fixed-point fractional library routines.
!                                                              (line  664)
  * __fractuqqsa:                          Fixed-point fractional library routines.
!                                                              (line  670)
  * __fractuqqsf:                          Fixed-point fractional library routines.
!                                                              (line  693)
  * __fractuqqsi:                          Fixed-point fractional library routines.
!                                                              (line  690)
  * __fractuqqsq:                          Fixed-point fractional library routines.
!                                                              (line  666)
  * __fractuqqta:                          Fixed-point fractional library routines.
!                                                              (line  672)
  * __fractuqqti:                          Fixed-point fractional library routines.
                                                               (line  692)
+ * __fractuqquda:                         Fixed-point fractional library routines.
+                                                              (line  684)
  * __fractuqqudq2:                        Fixed-point fractional library routines.
!                                                              (line  678)
  * __fractuqquha:                         Fixed-point fractional library routines.
!                                                              (line  680)
  * __fractuqquhq2:                        Fixed-point fractional library routines.
!                                                              (line  674)
  * __fractuqqusa:                         Fixed-point fractional library routines.
!                                                              (line  682)
  * __fractuqqusq2:                        Fixed-point fractional library routines.
!                                                              (line  676)
  * __fractuqquta:                         Fixed-point fractional library routines.
!                                                              (line  686)
  * __fractusada:                          Fixed-point fractional library routines.
!                                                              (line  828)
  * __fractusadf:                          Fixed-point fractional library routines.
!                                                              (line  849)
  * __fractusadi:                          Fixed-point fractional library routines.
!                                                              (line  846)
  * __fractusadq:                          Fixed-point fractional library routines.
!                                                              (line  825)
  * __fractusaha:                          Fixed-point fractional library routines.
!                                                              (line  826)
  * __fractusahi:                          Fixed-point fractional library routines.
!                                                              (line  844)
  * __fractusahq:                          Fixed-point fractional library routines.
!                                                              (line  823)
  * __fractusaqi:                          Fixed-point fractional library routines.
!                                                              (line  843)
  * __fractusaqq:                          Fixed-point fractional library routines.
!                                                              (line  822)
  * __fractusasa:                          Fixed-point fractional library routines.
!                                                              (line  827)
  * __fractusasf:                          Fixed-point fractional library routines.
!                                                              (line  848)
  * __fractusasi:                          Fixed-point fractional library routines.
!                                                              (line  845)
  * __fractusasq:                          Fixed-point fractional library routines.
!                                                              (line  824)
  * __fractusata:                          Fixed-point fractional library routines.
!                                                              (line  829)
  * __fractusati:                          Fixed-point fractional library routines.
                                                               (line  847)
+ * __fractusauda2:                        Fixed-point fractional library routines.
+                                                              (line  839)
  * __fractusaudq:                         Fixed-point fractional library routines.
!                                                              (line  835)
  * __fractusauha2:                        Fixed-point fractional library routines.
!                                                              (line  837)
  * __fractusauhq:                         Fixed-point fractional library routines.
!                                                              (line  832)
  * __fractusauqq:                         Fixed-point fractional library routines.
!                                                              (line  830)
  * __fractusausq:                         Fixed-point fractional library routines.
!                                                              (line  833)
  * __fractusauta2:                        Fixed-point fractional library routines.
!                                                              (line  841)
  * __fractusqda:                          Fixed-point fractional library routines.
!                                                              (line  730)
  * __fractusqdf:                          Fixed-point fractional library routines.
!                                                              (line  753)
  * __fractusqdi:                          Fixed-point fractional library routines.
!                                                              (line  750)
  * __fractusqdq:                          Fixed-point fractional library routines.
!                                                              (line  726)
  * __fractusqha:                          Fixed-point fractional library routines.
!                                                              (line  728)
  * __fractusqhi:                          Fixed-point fractional library routines.
!                                                              (line  748)
  * __fractusqhq:                          Fixed-point fractional library routines.
!                                                              (line  724)
  * __fractusqqi:                          Fixed-point fractional library routines.
!                                                              (line  747)
  * __fractusqqq:                          Fixed-point fractional library routines.
!                                                              (line  723)
  * __fractusqsa:                          Fixed-point fractional library routines.
!                                                              (line  729)
  * __fractusqsf:                          Fixed-point fractional library routines.
!                                                              (line  752)
  * __fractusqsi:                          Fixed-point fractional library routines.
!                                                              (line  749)
  * __fractusqsq:                          Fixed-point fractional library routines.
!                                                              (line  725)
  * __fractusqta:                          Fixed-point fractional library routines.
!                                                              (line  731)
  * __fractusqti:                          Fixed-point fractional library routines.
                                                               (line  751)
+ * __fractusquda:                         Fixed-point fractional library routines.
+                                                              (line  743)
  * __fractusqudq2:                        Fixed-point fractional library routines.
!                                                              (line  737)
  * __fractusquha:                         Fixed-point fractional library routines.
!                                                              (line  739)
  * __fractusquhq2:                        Fixed-point fractional library routines.
!                                                              (line  735)
  * __fractusquqq2:                        Fixed-point fractional library routines.
!                                                              (line  733)
  * __fractusqusa:                         Fixed-point fractional library routines.
!                                                              (line  741)
  * __fractusquta:                         Fixed-point fractional library routines.
!                                                              (line  745)
  * __fractutada:                          Fixed-point fractional library routines.
!                                                              (line  891)
  * __fractutadf:                          Fixed-point fractional library routines.
!                                                              (line  917)
  * __fractutadi:                          Fixed-point fractional library routines.
!                                                              (line  913)
  * __fractutadq:                          Fixed-point fractional library routines.
!                                                              (line  886)
  * __fractutaha:                          Fixed-point fractional library routines.
!                                                              (line  888)
  * __fractutahi:                          Fixed-point fractional library routines.
!                                                              (line  911)
  * __fractutahq:                          Fixed-point fractional library routines.
!                                                              (line  883)
  * __fractutaqi:                          Fixed-point fractional library routines.
!                                                              (line  909)
  * __fractutaqq:                          Fixed-point fractional library routines.
!                                                              (line  881)
  * __fractutasa:                          Fixed-point fractional library routines.
!                                                              (line  890)
  * __fractutasf:                          Fixed-point fractional library routines.
!                                                              (line  916)
  * __fractutasi:                          Fixed-point fractional library routines.
!                                                              (line  912)
  * __fractutasq:                          Fixed-point fractional library routines.
!                                                              (line  884)
  * __fractutata:                          Fixed-point fractional library routines.
!                                                              (line  893)
  * __fractutati:                          Fixed-point fractional library routines.
!                                                              (line  914)
  * __fractutauda2:                        Fixed-point fractional library routines.
!                                                              (line  907)
  * __fractutaudq:                         Fixed-point fractional library routines.
!                                                              (line  901)
  * __fractutauha2:                        Fixed-point fractional library routines.
!                                                              (line  903)
  * __fractutauhq:                         Fixed-point fractional library routines.
!                                                              (line  897)
  * __fractutauqq:                         Fixed-point fractional library routines.
!                                                              (line  895)
  * __fractutausa2:                        Fixed-point fractional library routines.
!                                                              (line  905)
  * __fractutausq:                         Fixed-point fractional library routines.
!                                                              (line  899)
  * __gedf2:                               Soft float library routines.
                                                               (line  233)
+ * __gesf2:                               Soft float library routines.
+                                                              (line  232)
  * __getf2:                               Soft float library routines.
!                                                              (line  234)
  * __gtdf2:                               Soft float library routines.
                                                               (line  251)
+ * __gtsf2:                               Soft float library routines.
+                                                              (line  250)
  * __gttf2:                               Soft float library routines.
!                                                              (line  252)
  * __ledf2:                               Soft float library routines.
                                                               (line  245)
+ * __lesf2:                               Soft float library routines.
+                                                              (line  244)
  * __letf2:                               Soft float library routines.
!                                                              (line  246)
  * __lshrdi3:                             Integer library routines.
                                                               (line   30)
  * __lshrsi3:                             Integer library routines.
*************** Concept Index
*** 53927,53953 ****
  * __lshrti3:                             Integer library routines.
                                                               (line   31)
  * __lshruda3:                            Fixed-point fractional library routines.
!                                                              (line  396)
  * __lshrudq3:                            Fixed-point fractional library routines.
!                                                              (line  390)
  * __lshruha3:                            Fixed-point fractional library routines.
!                                                              (line  392)
  * __lshruhq3:                            Fixed-point fractional library routines.
!                                                              (line  386)
  * __lshruqq3:                            Fixed-point fractional library routines.
!                                                              (line  384)
  * __lshrusa3:                            Fixed-point fractional library routines.
!                                                              (line  394)
  * __lshrusq3:                            Fixed-point fractional library routines.
!                                                              (line  388)
  * __lshruta3:                            Fixed-point fractional library routines.
!                                                              (line  398)
  * __ltdf2:                               Soft float library routines.
-                                                              (line  240)
- * __ltsf2:                               Soft float library routines.
                                                               (line  239)
  * __lttf2:                               Soft float library routines.
!                                                              (line  241)
  * __main:                                Collect2.           (line   15)
  * __moddi3:                              Integer library routines.
                                                               (line   36)
--- 53860,53886 ----
  * __lshrti3:                             Integer library routines.
                                                               (line   31)
  * __lshruda3:                            Fixed-point fractional library routines.
!                                                              (line  388)
  * __lshrudq3:                            Fixed-point fractional library routines.
!                                                              (line  382)
  * __lshruha3:                            Fixed-point fractional library routines.
!                                                              (line  384)
  * __lshruhq3:                            Fixed-point fractional library routines.
!                                                              (line  378)
  * __lshruqq3:                            Fixed-point fractional library routines.
!                                                              (line  376)
  * __lshrusa3:                            Fixed-point fractional library routines.
!                                                              (line  386)
  * __lshrusq3:                            Fixed-point fractional library routines.
!                                                              (line  380)
  * __lshruta3:                            Fixed-point fractional library routines.
!                                                              (line  390)
  * __ltdf2:                               Soft float library routines.
                                                               (line  239)
+ * __ltsf2:                               Soft float library routines.
+                                                              (line  238)
  * __lttf2:                               Soft float library routines.
!                                                              (line  240)
  * __main:                                Collect2.           (line   15)
  * __moddi3:                              Integer library routines.
                                                               (line   36)
*************** Concept Index
*** 53964,54070 ****
  * __mulbitint3:                          Integer library routines.
                                                               (line  195)
  * __mulda3:                              Fixed-point fractional library routines.
!                                                              (line  178)
  * __muldc3:                              Soft float library routines.
!                                                              (line  268)
  * __muldf3:                              Soft float library routines.
                                                               (line   39)
  * __muldi3:                              Integer library routines.
                                                               (line   42)
  * __muldq3:                              Fixed-point fractional library routines.
!                                                              (line  165)
  * __mulha3:                              Fixed-point fractional library routines.
!                                                              (line  175)
  * __mulhq3:                              Fixed-point fractional library routines.
!                                                              (line  163)
  * __mulqq3:                              Fixed-point fractional library routines.
!                                                              (line  161)
  * __mulsa3:                              Fixed-point fractional library routines.
!                                                              (line  177)
  * __mulsc3:                              Soft float library routines.
!                                                              (line  266)
  * __mulsf3:                              Soft float library routines.
                                                               (line   38)
  * __mulsi3:                              Integer library routines.
                                                               (line   41)
  * __mulsq3:                              Fixed-point fractional library routines.
!                                                              (line  164)
  * __multa3:                              Fixed-point fractional library routines.
!                                                              (line  179)
  * __multc3:                              Soft float library routines.
!                                                              (line  270)
  * __multf3:                              Soft float library routines.
                                                               (line   40)
  * __multi3:                              Integer library routines.
                                                               (line   43)
  * __muluda3:                             Fixed-point fractional library routines.
!                                                              (line  185)
  * __muludq3:                             Fixed-point fractional library routines.
!                                                              (line  173)
  * __muluha3:                             Fixed-point fractional library routines.
!                                                              (line  181)
  * __muluhq3:                             Fixed-point fractional library routines.
!                                                              (line  169)
  * __muluqq3:                             Fixed-point fractional library routines.
!                                                              (line  167)
  * __mulusa3:                             Fixed-point fractional library routines.
!                                                              (line  183)
  * __mulusq3:                             Fixed-point fractional library routines.
!                                                              (line  171)
  * __muluta3:                             Fixed-point fractional library routines.
!                                                              (line  187)
  * __mulvdi3:                             Integer library routines.
                                                               (line  114)
  * __mulvsi3:                             Integer library routines.
                                                               (line  113)
  * __mulxc3:                              Soft float library routines.
!                                                              (line  272)
  * __mulxf3:                              Soft float library routines.
                                                               (line   42)
  * __nedf2:                               Soft float library routines.
!                                                              (line  228)
  * __negda2:                              Fixed-point fractional library routines.
!                                                              (line  306)
  * __negdf2:                              Soft float library routines.
                                                               (line   55)
  * __negdi2:                              Integer library routines.
                                                               (line   46)
  * __negdq2:                              Fixed-point fractional library routines.
!                                                              (line  296)
  * __negha2:                              Fixed-point fractional library routines.
!                                                              (line  304)
  * __neghq2:                              Fixed-point fractional library routines.
!                                                              (line  294)
  * __negqq2:                              Fixed-point fractional library routines.
!                                                              (line  293)
  * __negsa2:                              Fixed-point fractional library routines.
!                                                              (line  305)
  * __negsf2:                              Soft float library routines.
                                                               (line   54)
  * __negsq2:                              Fixed-point fractional library routines.
!                                                              (line  295)
  * __negta2:                              Fixed-point fractional library routines.
!                                                              (line  307)
  * __negtf2:                              Soft float library routines.
                                                               (line   56)
  * __negti2:                              Integer library routines.
                                                               (line   47)
  * __neguda2:                             Fixed-point fractional library routines.
!                                                              (line  311)
  * __negudq2:                             Fixed-point fractional library routines.
!                                                              (line  302)
  * __neguha2:                             Fixed-point fractional library routines.
!                                                              (line  308)
  * __neguhq2:                             Fixed-point fractional library routines.
!                                                              (line  299)
  * __neguqq2:                             Fixed-point fractional library routines.
!                                                              (line  297)
  * __negusa2:                             Fixed-point fractional library routines.
!                                                              (line  310)
  * __negusq2:                             Fixed-point fractional library routines.
!                                                              (line  300)
  * __neguta2:                             Fixed-point fractional library routines.
!                                                              (line  313)
  * __negvdi2:                             Integer library routines.
                                                               (line  118)
  * __negvsi2:                             Integer library routines.
--- 53897,54003 ----
  * __mulbitint3:                          Integer library routines.
                                                               (line  195)
  * __mulda3:                              Fixed-point fractional library routines.
!                                                              (line  170)
  * __muldc3:                              Soft float library routines.
!                                                              (line  267)
  * __muldf3:                              Soft float library routines.
                                                               (line   39)
  * __muldi3:                              Integer library routines.
                                                               (line   42)
  * __muldq3:                              Fixed-point fractional library routines.
!                                                              (line  157)
  * __mulha3:                              Fixed-point fractional library routines.
!                                                              (line  167)
  * __mulhq3:                              Fixed-point fractional library routines.
!                                                              (line  155)
  * __mulqq3:                              Fixed-point fractional library routines.
!                                                              (line  153)
  * __mulsa3:                              Fixed-point fractional library routines.
!                                                              (line  169)
  * __mulsc3:                              Soft float library routines.
!                                                              (line  265)
  * __mulsf3:                              Soft float library routines.
                                                               (line   38)
  * __mulsi3:                              Integer library routines.
                                                               (line   41)
  * __mulsq3:                              Fixed-point fractional library routines.
!                                                              (line  156)
  * __multa3:                              Fixed-point fractional library routines.
!                                                              (line  171)
  * __multc3:                              Soft float library routines.
!                                                              (line  269)
  * __multf3:                              Soft float library routines.
                                                               (line   40)
  * __multi3:                              Integer library routines.
                                                               (line   43)
  * __muluda3:                             Fixed-point fractional library routines.
!                                                              (line  177)
  * __muludq3:                             Fixed-point fractional library routines.
!                                                              (line  165)
  * __muluha3:                             Fixed-point fractional library routines.
!                                                              (line  173)
  * __muluhq3:                             Fixed-point fractional library routines.
!                                                              (line  161)
  * __muluqq3:                             Fixed-point fractional library routines.
!                                                              (line  159)
  * __mulusa3:                             Fixed-point fractional library routines.
!                                                              (line  175)
  * __mulusq3:                             Fixed-point fractional library routines.
!                                                              (line  163)
  * __muluta3:                             Fixed-point fractional library routines.
!                                                              (line  179)
  * __mulvdi3:                             Integer library routines.
                                                               (line  114)
  * __mulvsi3:                             Integer library routines.
                                                               (line  113)
  * __mulxc3:                              Soft float library routines.
!                                                              (line  271)
  * __mulxf3:                              Soft float library routines.
                                                               (line   42)
  * __nedf2:                               Soft float library routines.
!                                                              (line  227)
  * __negda2:                              Fixed-point fractional library routines.
!                                                              (line  298)
  * __negdf2:                              Soft float library routines.
                                                               (line   55)
  * __negdi2:                              Integer library routines.
                                                               (line   46)
  * __negdq2:                              Fixed-point fractional library routines.
!                                                              (line  288)
  * __negha2:                              Fixed-point fractional library routines.
!                                                              (line  296)
  * __neghq2:                              Fixed-point fractional library routines.
!                                                              (line  286)
  * __negqq2:                              Fixed-point fractional library routines.
!                                                              (line  285)
  * __negsa2:                              Fixed-point fractional library routines.
!                                                              (line  297)
  * __negsf2:                              Soft float library routines.
                                                               (line   54)
  * __negsq2:                              Fixed-point fractional library routines.
!                                                              (line  287)
  * __negta2:                              Fixed-point fractional library routines.
!                                                              (line  299)
  * __negtf2:                              Soft float library routines.
                                                               (line   56)
  * __negti2:                              Integer library routines.
                                                               (line   47)
  * __neguda2:                             Fixed-point fractional library routines.
!                                                              (line  303)
  * __negudq2:                             Fixed-point fractional library routines.
!                                                              (line  294)
  * __neguha2:                             Fixed-point fractional library routines.
!                                                              (line  300)
  * __neguhq2:                             Fixed-point fractional library routines.
!                                                              (line  291)
  * __neguqq2:                             Fixed-point fractional library routines.
!                                                              (line  289)
  * __negusa2:                             Fixed-point fractional library routines.
!                                                              (line  302)
  * __negusq2:                             Fixed-point fractional library routines.
!                                                              (line  292)
  * __neguta2:                             Fixed-point fractional library routines.
!                                                              (line  305)
  * __negvdi2:                             Integer library routines.
                                                               (line  118)
  * __negvsi2:                             Integer library routines.
*************** Concept Index
*** 54072,54080 ****
  * __negxf2:                              Soft float library routines.
                                                               (line   57)
  * __nesf2:                               Soft float library routines.
!                                                              (line  227)
  * __netf2:                               Soft float library routines.
!                                                              (line  229)
  * __paritydi2:                           Integer library routines.
                                                               (line  150)
  * __paritysi2:                           Integer library routines.
--- 54005,54013 ----
  * __negxf2:                              Soft float library routines.
                                                               (line   57)
  * __nesf2:                               Soft float library routines.
!                                                              (line  226)
  * __netf2:                               Soft float library routines.
!                                                              (line  228)
  * __paritydi2:                           Integer library routines.
                                                               (line  150)
  * __paritysi2:                           Integer library routines.
*************** Concept Index
*** 54088,55098 ****
  * __popcountti2:                         Integer library routines.
                                                               (line  157)
  * __powidf2:                             Soft float library routines.
-                                                              (line  261)
- * __powisf2:                             Soft float library routines.
                                                               (line  260)
  * __powitf2:                             Soft float library routines.
!                                                              (line  262)
  * __powixf2:                             Soft float library routines.
!                                                              (line  263)
  * __satfractdadq:                        Fixed-point fractional library routines.
!                                                              (line 1160)
  * __satfractdaha2:                       Fixed-point fractional library routines.
!                                                              (line 1161)
  * __satfractdahq:                        Fixed-point fractional library routines.
!                                                              (line 1158)
  * __satfractdaqq:                        Fixed-point fractional library routines.
!                                                              (line 1157)
  * __satfractdasa2:                       Fixed-point fractional library routines.
!                                                              (line 1162)
  * __satfractdasq:                        Fixed-point fractional library routines.
!                                                              (line 1159)
  * __satfractdata2:                       Fixed-point fractional library routines.
!                                                              (line 1163)
  * __satfractdauda:                       Fixed-point fractional library routines.
!                                                              (line 1173)
  * __satfractdaudq:                       Fixed-point fractional library routines.
!                                                              (line 1168)
  * __satfractdauha:                       Fixed-point fractional library routines.
!                                                              (line 1170)
  * __satfractdauhq:                       Fixed-point fractional library routines.
!                                                              (line 1166)
  * __satfractdauqq:                       Fixed-point fractional library routines.
!                                                              (line 1164)
  * __satfractdausa:                       Fixed-point fractional library routines.
!                                                              (line 1172)
  * __satfractdausq:                       Fixed-point fractional library routines.
!                                                              (line 1167)
  * __satfractdauta:                       Fixed-point fractional library routines.
!                                                              (line 1174)
  * __satfractdfda:                        Fixed-point fractional library routines.
!                                                              (line 1513)
  * __satfractdfdq:                        Fixed-point fractional library routines.
!                                                              (line 1510)
  * __satfractdfha:                        Fixed-point fractional library routines.
!                                                              (line 1511)
  * __satfractdfhq:                        Fixed-point fractional library routines.
!                                                              (line 1508)
  * __satfractdfqq:                        Fixed-point fractional library routines.
!                                                              (line 1507)
  * __satfractdfsa:                        Fixed-point fractional library routines.
!                                                              (line 1512)
  * __satfractdfsq:                        Fixed-point fractional library routines.
!                                                              (line 1509)
  * __satfractdfta:                        Fixed-point fractional library routines.
!                                                              (line 1514)
  * __satfractdfuda:                       Fixed-point fractional library routines.
!                                                              (line 1522)
  * __satfractdfudq:                       Fixed-point fractional library routines.
!                                                              (line 1518)
  * __satfractdfuha:                       Fixed-point fractional library routines.
!                                                              (line 1520)
  * __satfractdfuhq:                       Fixed-point fractional library routines.
!                                                              (line 1516)
  * __satfractdfuqq:                       Fixed-point fractional library routines.
!                                                              (line 1515)
  * __satfractdfusa:                       Fixed-point fractional library routines.
!                                                              (line 1521)
  * __satfractdfusq:                       Fixed-point fractional library routines.
!                                                              (line 1517)
  * __satfractdfuta:                       Fixed-point fractional library routines.
!                                                              (line 1523)
  * __satfractdida:                        Fixed-point fractional library routines.
!                                                              (line 1463)
  * __satfractdidq:                        Fixed-point fractional library routines.
!                                                              (line 1460)
  * __satfractdiha:                        Fixed-point fractional library routines.
!                                                              (line 1461)
  * __satfractdihq:                        Fixed-point fractional library routines.
!                                                              (line 1458)
  * __satfractdiqq:                        Fixed-point fractional library routines.
!                                                              (line 1457)
  * __satfractdisa:                        Fixed-point fractional library routines.
!                                                              (line 1462)
  * __satfractdisq:                        Fixed-point fractional library routines.
!                                                              (line 1459)
  * __satfractdita:                        Fixed-point fractional library routines.
!                                                              (line 1464)
  * __satfractdiuda:                       Fixed-point fractional library routines.
!                                                              (line 1471)
  * __satfractdiudq:                       Fixed-point fractional library routines.
!                                                              (line 1468)
  * __satfractdiuha:                       Fixed-point fractional library routines.
!                                                              (line 1469)
  * __satfractdiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1466)
  * __satfractdiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1465)
  * __satfractdiusa:                       Fixed-point fractional library routines.
!                                                              (line 1470)
  * __satfractdiusq:                       Fixed-point fractional library routines.
!                                                              (line 1467)
  * __satfractdiuta:                       Fixed-point fractional library routines.
!                                                              (line 1472)
  * __satfractdqda:                        Fixed-point fractional library routines.
!                                                              (line 1105)
  * __satfractdqha:                        Fixed-point fractional library routines.
!                                                              (line 1103)
  * __satfractdqhq2:                       Fixed-point fractional library routines.
!                                                              (line 1101)
  * __satfractdqqq2:                       Fixed-point fractional library routines.
!                                                              (line 1100)
  * __satfractdqsa:                        Fixed-point fractional library routines.
!                                                              (line 1104)
  * __satfractdqsq2:                       Fixed-point fractional library routines.
!                                                              (line 1102)
  * __satfractdqta:                        Fixed-point fractional library routines.
!                                                              (line 1106)
  * __satfractdquda:                       Fixed-point fractional library routines.
!                                                              (line 1117)
  * __satfractdqudq:                       Fixed-point fractional library routines.
!                                                              (line 1112)
  * __satfractdquha:                       Fixed-point fractional library routines.
!                                                              (line 1114)
  * __satfractdquhq:                       Fixed-point fractional library routines.
!                                                              (line 1109)
  * __satfractdquqq:                       Fixed-point fractional library routines.
!                                                              (line 1107)
  * __satfractdqusa:                       Fixed-point fractional library routines.
!                                                              (line 1116)
  * __satfractdqusq:                       Fixed-point fractional library routines.
!                                                              (line 1110)
  * __satfractdquta:                       Fixed-point fractional library routines.
!                                                              (line 1119)
  * __satfracthada2:                       Fixed-point fractional library routines.
!                                                              (line 1126)
  * __satfracthadq:                        Fixed-point fractional library routines.
!                                                              (line 1124)
  * __satfracthahq:                        Fixed-point fractional library routines.
!                                                              (line 1122)
  * __satfracthaqq:                        Fixed-point fractional library routines.
!                                                              (line 1121)
  * __satfracthasa2:                       Fixed-point fractional library routines.
!                                                              (line 1125)
  * __satfracthasq:                        Fixed-point fractional library routines.
!                                                              (line 1123)
  * __satfracthata2:                       Fixed-point fractional library routines.
!                                                              (line 1127)
  * __satfracthauda:                       Fixed-point fractional library routines.
!                                                              (line 1138)
  * __satfracthaudq:                       Fixed-point fractional library routines.
!                                                              (line 1133)
  * __satfracthauha:                       Fixed-point fractional library routines.
!                                                              (line 1135)
  * __satfracthauhq:                       Fixed-point fractional library routines.
!                                                              (line 1130)
  * __satfracthauqq:                       Fixed-point fractional library routines.
!                                                              (line 1128)
  * __satfracthausa:                       Fixed-point fractional library routines.
!                                                              (line 1137)
  * __satfracthausq:                       Fixed-point fractional library routines.
!                                                              (line 1131)
  * __satfracthauta:                       Fixed-point fractional library routines.
!                                                              (line 1140)
  * __satfracthida:                        Fixed-point fractional library routines.
!                                                              (line 1431)
  * __satfracthidq:                        Fixed-point fractional library routines.
!                                                              (line 1428)
  * __satfracthiha:                        Fixed-point fractional library routines.
!                                                              (line 1429)
  * __satfracthihq:                        Fixed-point fractional library routines.
!                                                              (line 1426)
  * __satfracthiqq:                        Fixed-point fractional library routines.
!                                                              (line 1425)
  * __satfracthisa:                        Fixed-point fractional library routines.
!                                                              (line 1430)
  * __satfracthisq:                        Fixed-point fractional library routines.
!                                                              (line 1427)
  * __satfracthita:                        Fixed-point fractional library routines.
!                                                              (line 1432)
  * __satfracthiuda:                       Fixed-point fractional library routines.
!                                                              (line 1439)
  * __satfracthiudq:                       Fixed-point fractional library routines.
!                                                              (line 1436)
  * __satfracthiuha:                       Fixed-point fractional library routines.
!                                                              (line 1437)
  * __satfracthiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1434)
  * __satfracthiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1433)
  * __satfracthiusa:                       Fixed-point fractional library routines.
!                                                              (line 1438)
  * __satfracthiusq:                       Fixed-point fractional library routines.
!                                                              (line 1435)
  * __satfracthiuta:                       Fixed-point fractional library routines.
!                                                              (line 1440)
  * __satfracthqda:                        Fixed-point fractional library routines.
!                                                              (line 1071)
  * __satfracthqdq2:                       Fixed-point fractional library routines.
!                                                              (line 1068)
  * __satfracthqha:                        Fixed-point fractional library routines.
!                                                              (line 1069)
  * __satfracthqqq2:                       Fixed-point fractional library routines.
!                                                              (line 1066)
  * __satfracthqsa:                        Fixed-point fractional library routines.
!                                                              (line 1070)
  * __satfracthqsq2:                       Fixed-point fractional library routines.
!                                                              (line 1067)
  * __satfracthqta:                        Fixed-point fractional library routines.
!                                                              (line 1072)
  * __satfracthquda:                       Fixed-point fractional library routines.
!                                                              (line 1079)
  * __satfracthqudq:                       Fixed-point fractional library routines.
!                                                              (line 1076)
  * __satfracthquha:                       Fixed-point fractional library routines.
!                                                              (line 1077)
  * __satfracthquhq:                       Fixed-point fractional library routines.
!                                                              (line 1074)
  * __satfracthquqq:                       Fixed-point fractional library routines.
!                                                              (line 1073)
  * __satfracthqusa:                       Fixed-point fractional library routines.
!                                                              (line 1078)
  * __satfracthqusq:                       Fixed-point fractional library routines.
!                                                              (line 1075)
  * __satfracthquta:                       Fixed-point fractional library routines.
!                                                              (line 1080)
  * __satfractqida:                        Fixed-point fractional library routines.
!                                                              (line 1409)
  * __satfractqidq:                        Fixed-point fractional library routines.
!                                                              (line 1406)
  * __satfractqiha:                        Fixed-point fractional library routines.
!                                                              (line 1407)
  * __satfractqihq:                        Fixed-point fractional library routines.
!                                                              (line 1404)
  * __satfractqiqq:                        Fixed-point fractional library routines.
!                                                              (line 1403)
  * __satfractqisa:                        Fixed-point fractional library routines.
!                                                              (line 1408)
  * __satfractqisq:                        Fixed-point fractional library routines.
!                                                              (line 1405)
  * __satfractqita:                        Fixed-point fractional library routines.
!                                                              (line 1410)
  * __satfractqiuda:                       Fixed-point fractional library routines.
!                                                              (line 1421)
  * __satfractqiudq:                       Fixed-point fractional library routines.
!                                                              (line 1416)
  * __satfractqiuha:                       Fixed-point fractional library routines.
!                                                              (line 1418)
  * __satfractqiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1413)
  * __satfractqiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1411)
  * __satfractqiusa:                       Fixed-point fractional library routines.
!                                                              (line 1420)
  * __satfractqiusq:                       Fixed-point fractional library routines.
!                                                              (line 1414)
  * __satfractqiuta:                       Fixed-point fractional library routines.
!                                                              (line 1423)
  * __satfractqqda:                        Fixed-point fractional library routines.
!                                                              (line 1050)
  * __satfractqqdq2:                       Fixed-point fractional library routines.
!                                                              (line 1047)
  * __satfractqqha:                        Fixed-point fractional library routines.
!                                                              (line 1048)
  * __satfractqqhq2:                       Fixed-point fractional library routines.
!                                                              (line 1045)
  * __satfractqqsa:                        Fixed-point fractional library routines.
!                                                              (line 1049)
  * __satfractqqsq2:                       Fixed-point fractional library routines.
!                                                              (line 1046)
  * __satfractqqta:                        Fixed-point fractional library routines.
!                                                              (line 1051)
  * __satfractqquda:                       Fixed-point fractional library routines.
!                                                              (line 1062)
  * __satfractqqudq:                       Fixed-point fractional library routines.
!                                                              (line 1057)
  * __satfractqquha:                       Fixed-point fractional library routines.
!                                                              (line 1059)
  * __satfractqquhq:                       Fixed-point fractional library routines.
!                                                              (line 1054)
  * __satfractqquqq:                       Fixed-point fractional library routines.
!                                                              (line 1052)
  * __satfractqqusa:                       Fixed-point fractional library routines.
!                                                              (line 1061)
  * __satfractqqusq:                       Fixed-point fractional library routines.
!                                                              (line 1055)
  * __satfractqquta:                       Fixed-point fractional library routines.
!                                                              (line 1064)
  * __satfractsada2:                       Fixed-point fractional library routines.
!                                                              (line 1147)
  * __satfractsadq:                        Fixed-point fractional library routines.
!                                                              (line 1145)
  * __satfractsaha2:                       Fixed-point fractional library routines.
!                                                              (line 1146)
  * __satfractsahq:                        Fixed-point fractional library routines.
!                                                              (line 1143)
  * __satfractsaqq:                        Fixed-point fractional library routines.
!                                                              (line 1142)
  * __satfractsasq:                        Fixed-point fractional library routines.
!                                                              (line 1144)
  * __satfractsata2:                       Fixed-point fractional library routines.
!                                                              (line 1148)
  * __satfractsauda:                       Fixed-point fractional library routines.
!                                                              (line 1155)
  * __satfractsaudq:                       Fixed-point fractional library routines.
!                                                              (line 1152)
  * __satfractsauha:                       Fixed-point fractional library routines.
!                                                              (line 1153)
  * __satfractsauhq:                       Fixed-point fractional library routines.
!                                                              (line 1150)
  * __satfractsauqq:                       Fixed-point fractional library routines.
!                                                              (line 1149)
  * __satfractsausa:                       Fixed-point fractional library routines.
!                                                              (line 1154)
  * __satfractsausq:                       Fixed-point fractional library routines.
!                                                              (line 1151)
  * __satfractsauta:                       Fixed-point fractional library routines.
!                                                              (line 1156)
  * __satfractsfda:                        Fixed-point fractional library routines.
!                                                              (line 1497)
  * __satfractsfdq:                        Fixed-point fractional library routines.
!                                                              (line 1494)
  * __satfractsfha:                        Fixed-point fractional library routines.
!                                                              (line 1495)
  * __satfractsfhq:                        Fixed-point fractional library routines.
!                                                              (line 1492)
  * __satfractsfqq:                        Fixed-point fractional library routines.
!                                                              (line 1491)
  * __satfractsfsa:                        Fixed-point fractional library routines.
!                                                              (line 1496)
  * __satfractsfsq:                        Fixed-point fractional library routines.
!                                                              (line 1493)
  * __satfractsfta:                        Fixed-point fractional library routines.
!                                                              (line 1498)
  * __satfractsfuda:                       Fixed-point fractional library routines.
!                                                              (line 1505)
  * __satfractsfudq:                       Fixed-point fractional library routines.
!                                                              (line 1502)
  * __satfractsfuha:                       Fixed-point fractional library routines.
!                                                              (line 1503)
  * __satfractsfuhq:                       Fixed-point fractional library routines.
!                                                              (line 1500)
  * __satfractsfuqq:                       Fixed-point fractional library routines.
!                                                              (line 1499)
  * __satfractsfusa:                       Fixed-point fractional library routines.
!                                                              (line 1504)
  * __satfractsfusq:                       Fixed-point fractional library routines.
!                                                              (line 1501)
  * __satfractsfuta:                       Fixed-point fractional library routines.
!                                                              (line 1506)
  * __satfractsida:                        Fixed-point fractional library routines.
!                                                              (line 1447)
  * __satfractsidq:                        Fixed-point fractional library routines.
!                                                              (line 1444)
  * __satfractsiha:                        Fixed-point fractional library routines.
!                                                              (line 1445)
  * __satfractsihq:                        Fixed-point fractional library routines.
!                                                              (line 1442)
  * __satfractsiqq:                        Fixed-point fractional library routines.
!                                                              (line 1441)
  * __satfractsisa:                        Fixed-point fractional library routines.
!                                                              (line 1446)
  * __satfractsisq:                        Fixed-point fractional library routines.
!                                                              (line 1443)
  * __satfractsita:                        Fixed-point fractional library routines.
!                                                              (line 1448)
  * __satfractsiuda:                       Fixed-point fractional library routines.
!                                                              (line 1455)
  * __satfractsiudq:                       Fixed-point fractional library routines.
!                                                              (line 1452)
  * __satfractsiuha:                       Fixed-point fractional library routines.
!                                                              (line 1453)
  * __satfractsiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1450)
  * __satfractsiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1449)
  * __satfractsiusa:                       Fixed-point fractional library routines.
!                                                              (line 1454)
  * __satfractsiusq:                       Fixed-point fractional library routines.
!                                                              (line 1451)
  * __satfractsiuta:                       Fixed-point fractional library routines.
!                                                              (line 1456)
  * __satfractsqda:                        Fixed-point fractional library routines.
!                                                              (line 1086)
  * __satfractsqdq2:                       Fixed-point fractional library routines.
!                                                              (line 1083)
  * __satfractsqha:                        Fixed-point fractional library routines.
!                                                              (line 1084)
  * __satfractsqhq2:                       Fixed-point fractional library routines.
!                                                              (line 1082)
  * __satfractsqqq2:                       Fixed-point fractional library routines.
!                                                              (line 1081)
  * __satfractsqsa:                        Fixed-point fractional library routines.
!                                                              (line 1085)
  * __satfractsqta:                        Fixed-point fractional library routines.
!                                                              (line 1087)
  * __satfractsquda:                       Fixed-point fractional library routines.
!                                                              (line 1097)
  * __satfractsqudq:                       Fixed-point fractional library routines.
!                                                              (line 1092)
  * __satfractsquha:                       Fixed-point fractional library routines.
!                                                              (line 1094)
  * __satfractsquhq:                       Fixed-point fractional library routines.
!                                                              (line 1090)
  * __satfractsquqq:                       Fixed-point fractional library routines.
!                                                              (line 1088)
  * __satfractsqusa:                       Fixed-point fractional library routines.
!                                                              (line 1096)
  * __satfractsqusq:                       Fixed-point fractional library routines.
!                                                              (line 1091)
  * __satfractsquta:                       Fixed-point fractional library routines.
!                                                              (line 1098)
  * __satfracttada2:                       Fixed-point fractional library routines.
!                                                              (line 1182)
  * __satfracttadq:                        Fixed-point fractional library routines.
!                                                              (line 1179)
  * __satfracttaha2:                       Fixed-point fractional library routines.
!                                                              (line 1180)
  * __satfracttahq:                        Fixed-point fractional library routines.
!                                                              (line 1177)
  * __satfracttaqq:                        Fixed-point fractional library routines.
!                                                              (line 1176)
  * __satfracttasa2:                       Fixed-point fractional library routines.
!                                                              (line 1181)
  * __satfracttasq:                        Fixed-point fractional library routines.
!                                                              (line 1178)
  * __satfracttauda:                       Fixed-point fractional library routines.
!                                                              (line 1193)
  * __satfracttaudq:                       Fixed-point fractional library routines.
!                                                              (line 1188)
  * __satfracttauha:                       Fixed-point fractional library routines.
!                                                              (line 1190)
  * __satfracttauhq:                       Fixed-point fractional library routines.
!                                                              (line 1185)
  * __satfracttauqq:                       Fixed-point fractional library routines.
!                                                              (line 1183)
  * __satfracttausa:                       Fixed-point fractional library routines.
!                                                              (line 1192)
  * __satfracttausq:                       Fixed-point fractional library routines.
!                                                              (line 1186)
  * __satfracttauta:                       Fixed-point fractional library routines.
!                                                              (line 1195)
  * __satfracttida:                        Fixed-point fractional library routines.
!                                                              (line 1479)
  * __satfracttidq:                        Fixed-point fractional library routines.
!                                                              (line 1476)
  * __satfracttiha:                        Fixed-point fractional library routines.
!                                                              (line 1477)
  * __satfracttihq:                        Fixed-point fractional library routines.
!                                                              (line 1474)
  * __satfracttiqq:                        Fixed-point fractional library routines.
!                                                              (line 1473)
  * __satfracttisa:                        Fixed-point fractional library routines.
!                                                              (line 1478)
  * __satfracttisq:                        Fixed-point fractional library routines.
!                                                              (line 1475)
  * __satfracttita:                        Fixed-point fractional library routines.
!                                                              (line 1480)
  * __satfracttiuda:                       Fixed-point fractional library routines.
!                                                              (line 1488)
  * __satfracttiudq:                       Fixed-point fractional library routines.
!                                                              (line 1484)
  * __satfracttiuha:                       Fixed-point fractional library routines.
!                                                              (line 1486)
  * __satfracttiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1482)
  * __satfracttiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1481)
  * __satfracttiusa:                       Fixed-point fractional library routines.
!                                                              (line 1487)
  * __satfracttiusq:                       Fixed-point fractional library routines.
!                                                              (line 1483)
  * __satfracttiuta:                       Fixed-point fractional library routines.
!                                                              (line 1489)
  * __satfractudada:                       Fixed-point fractional library routines.
!                                                              (line 1358)
  * __satfractudadq:                       Fixed-point fractional library routines.
!                                                              (line 1353)
  * __satfractudaha:                       Fixed-point fractional library routines.
!                                                              (line 1355)
  * __satfractudahq:                       Fixed-point fractional library routines.
!                                                              (line 1351)
  * __satfractudaqq:                       Fixed-point fractional library routines.
!                                                              (line 1349)
  * __satfractudasa:                       Fixed-point fractional library routines.
!                                                              (line 1357)
  * __satfractudasq:                       Fixed-point fractional library routines.
!                                                              (line 1352)
  * __satfractudata:                       Fixed-point fractional library routines.
!                                                              (line 1359)
  * __satfractudaudq:                      Fixed-point fractional library routines.
!                                                              (line 1367)
  * __satfractudauha2:                     Fixed-point fractional library routines.
!                                                              (line 1369)
  * __satfractudauhq:                      Fixed-point fractional library routines.
!                                                              (line 1363)
  * __satfractudauqq:                      Fixed-point fractional library routines.
!                                                              (line 1361)
  * __satfractudausa2:                     Fixed-point fractional library routines.
!                                                              (line 1371)
  * __satfractudausq:                      Fixed-point fractional library routines.
!                                                              (line 1365)
  * __satfractudauta2:                     Fixed-point fractional library routines.
!                                                              (line 1373)
  * __satfractudqda:                       Fixed-point fractional library routines.
!                                                              (line 1282)
  * __satfractudqdq:                       Fixed-point fractional library routines.
!                                                              (line 1277)
  * __satfractudqha:                       Fixed-point fractional library routines.
!                                                              (line 1279)
  * __satfractudqhq:                       Fixed-point fractional library routines.
!                                                              (line 1274)
  * __satfractudqqq:                       Fixed-point fractional library routines.
!                                                              (line 1272)
  * __satfractudqsa:                       Fixed-point fractional library routines.
!                                                              (line 1281)
  * __satfractudqsq:                       Fixed-point fractional library routines.
!                                                              (line 1275)
  * __satfractudqta:                       Fixed-point fractional library routines.
!                                                              (line 1284)
  * __satfractudquda:                      Fixed-point fractional library routines.
!                                                              (line 1296)
  * __satfractudquha:                      Fixed-point fractional library routines.
!                                                              (line 1292)
  * __satfractudquhq2:                     Fixed-point fractional library routines.
!                                                              (line 1288)
  * __satfractudquqq2:                     Fixed-point fractional library routines.
!                                                              (line 1286)
  * __satfractudqusa:                      Fixed-point fractional library routines.
!                                                              (line 1294)
  * __satfractudqusq2:                     Fixed-point fractional library routines.
!                                                              (line 1290)
  * __satfractudquta:                      Fixed-point fractional library routines.
!                                                              (line 1298)
  * __satfractuhada:                       Fixed-point fractional library routines.
!                                                              (line 1310)
  * __satfractuhadq:                       Fixed-point fractional library routines.
!                                                              (line 1305)
  * __satfractuhaha:                       Fixed-point fractional library routines.
!                                                              (line 1307)
  * __satfractuhahq:                       Fixed-point fractional library routines.
!                                                              (line 1302)
  * __satfractuhaqq:                       Fixed-point fractional library routines.
!                                                              (line 1300)
  * __satfractuhasa:                       Fixed-point fractional library routines.
!                                                              (line 1309)
  * __satfractuhasq:                       Fixed-point fractional library routines.
!                                                              (line 1303)
  * __satfractuhata:                       Fixed-point fractional library routines.
!                                                              (line 1312)
  * __satfractuhauda2:                     Fixed-point fractional library routines.
!                                                              (line 1324)
  * __satfractuhaudq:                      Fixed-point fractional library routines.
!                                                              (line 1320)
  * __satfractuhauhq:                      Fixed-point fractional library routines.
!                                                              (line 1316)
  * __satfractuhauqq:                      Fixed-point fractional library routines.
!                                                              (line 1314)
  * __satfractuhausa2:                     Fixed-point fractional library routines.
!                                                              (line 1322)
  * __satfractuhausq:                      Fixed-point fractional library routines.
!                                                              (line 1318)
  * __satfractuhauta2:                     Fixed-point fractional library routines.
!                                                              (line 1326)
  * __satfractuhqda:                       Fixed-point fractional library routines.
!                                                              (line 1231)
  * __satfractuhqdq:                       Fixed-point fractional library routines.
!                                                              (line 1228)
  * __satfractuhqha:                       Fixed-point fractional library routines.
!                                                              (line 1229)
  * __satfractuhqhq:                       Fixed-point fractional library routines.
!                                                              (line 1226)
  * __satfractuhqqq:                       Fixed-point fractional library routines.
!                                                              (line 1225)
  * __satfractuhqsa:                       Fixed-point fractional library routines.
!                                                              (line 1230)
  * __satfractuhqsq:                       Fixed-point fractional library routines.
!                                                              (line 1227)
  * __satfractuhqta:                       Fixed-point fractional library routines.
!                                                              (line 1232)
  * __satfractuhquda:                      Fixed-point fractional library routines.
!                                                              (line 1242)
  * __satfractuhqudq2:                     Fixed-point fractional library routines.
!                                                              (line 1237)
  * __satfractuhquha:                      Fixed-point fractional library routines.
!                                                              (line 1239)
  * __satfractuhquqq2:                     Fixed-point fractional library routines.
!                                                              (line 1233)
  * __satfractuhqusa:                      Fixed-point fractional library routines.
!                                                              (line 1241)
  * __satfractuhqusq2:                     Fixed-point fractional library routines.
!                                                              (line 1235)
  * __satfractuhquta:                      Fixed-point fractional library routines.
!                                                              (line 1244)
  * __satfractunsdida:                     Fixed-point fractional library routines.
!                                                              (line 1841)
  * __satfractunsdidq:                     Fixed-point fractional library routines.
!                                                              (line 1837)
  * __satfractunsdiha:                     Fixed-point fractional library routines.
!                                                              (line 1839)
  * __satfractunsdihq:                     Fixed-point fractional library routines.
!                                                              (line 1835)
  * __satfractunsdiqq:                     Fixed-point fractional library routines.
!                                                              (line 1834)
  * __satfractunsdisa:                     Fixed-point fractional library routines.
!                                                              (line 1840)
  * __satfractunsdisq:                     Fixed-point fractional library routines.
!                                                              (line 1836)
  * __satfractunsdita:                     Fixed-point fractional library routines.
!                                                              (line 1842)
  * __satfractunsdiuda:                    Fixed-point fractional library routines.
!                                                              (line 1856)
  * __satfractunsdiudq:                    Fixed-point fractional library routines.
!                                                              (line 1850)
  * __satfractunsdiuha:                    Fixed-point fractional library routines.
!                                                              (line 1852)
  * __satfractunsdiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1846)
  * __satfractunsdiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1844)
  * __satfractunsdiusa:                    Fixed-point fractional library routines.
!                                                              (line 1854)
  * __satfractunsdiusq:                    Fixed-point fractional library routines.
!                                                              (line 1848)
  * __satfractunsdiuta:                    Fixed-point fractional library routines.
!                                                              (line 1858)
  * __satfractunshida:                     Fixed-point fractional library routines.
!                                                              (line 1793)
  * __satfractunshidq:                     Fixed-point fractional library routines.
!                                                              (line 1789)
  * __satfractunshiha:                     Fixed-point fractional library routines.
!                                                              (line 1791)
  * __satfractunshihq:                     Fixed-point fractional library routines.
!                                                              (line 1787)
  * __satfractunshiqq:                     Fixed-point fractional library routines.
!                                                              (line 1786)
  * __satfractunshisa:                     Fixed-point fractional library routines.
!                                                              (line 1792)
  * __satfractunshisq:                     Fixed-point fractional library routines.
!                                                              (line 1788)
  * __satfractunshita:                     Fixed-point fractional library routines.
!                                                              (line 1794)
  * __satfractunshiuda:                    Fixed-point fractional library routines.
!                                                              (line 1808)
  * __satfractunshiudq:                    Fixed-point fractional library routines.
!                                                              (line 1802)
  * __satfractunshiuha:                    Fixed-point fractional library routines.
!                                                              (line 1804)
  * __satfractunshiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1798)
  * __satfractunshiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1796)
  * __satfractunshiusa:                    Fixed-point fractional library routines.
!                                                              (line 1806)
  * __satfractunshiusq:                    Fixed-point fractional library routines.
!                                                              (line 1800)
  * __satfractunshiuta:                    Fixed-point fractional library routines.
!                                                              (line 1810)
  * __satfractunsqida:                     Fixed-point fractional library routines.
!                                                              (line 1767)
  * __satfractunsqidq:                     Fixed-point fractional library routines.
!                                                              (line 1763)
  * __satfractunsqiha:                     Fixed-point fractional library routines.
!                                                              (line 1765)
  * __satfractunsqihq:                     Fixed-point fractional library routines.
!                                                              (line 1761)
  * __satfractunsqiqq:                     Fixed-point fractional library routines.
!                                                              (line 1760)
  * __satfractunsqisa:                     Fixed-point fractional library routines.
!                                                              (line 1766)
  * __satfractunsqisq:                     Fixed-point fractional library routines.
!                                                              (line 1762)
  * __satfractunsqita:                     Fixed-point fractional library routines.
!                                                              (line 1768)
  * __satfractunsqiuda:                    Fixed-point fractional library routines.
!                                                              (line 1782)
  * __satfractunsqiudq:                    Fixed-point fractional library routines.
!                                                              (line 1776)
  * __satfractunsqiuha:                    Fixed-point fractional library routines.
!                                                              (line 1778)
  * __satfractunsqiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1772)
  * __satfractunsqiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1770)
  * __satfractunsqiusa:                    Fixed-point fractional library routines.
!                                                              (line 1780)
  * __satfractunsqiusq:                    Fixed-point fractional library routines.
!                                                              (line 1774)
  * __satfractunsqiuta:                    Fixed-point fractional library routines.
!                                                              (line 1784)
  * __satfractunssida:                     Fixed-point fractional library routines.
!                                                              (line 1818)
  * __satfractunssidq:                     Fixed-point fractional library routines.
!                                                              (line 1815)
  * __satfractunssiha:                     Fixed-point fractional library routines.
!                                                              (line 1816)
  * __satfractunssihq:                     Fixed-point fractional library routines.
!                                                              (line 1813)
  * __satfractunssiqq:                     Fixed-point fractional library routines.
!                                                              (line 1812)
  * __satfractunssisa:                     Fixed-point fractional library routines.
!                                                              (line 1817)
  * __satfractunssisq:                     Fixed-point fractional library routines.
!                                                              (line 1814)
  * __satfractunssita:                     Fixed-point fractional library routines.
!                                                              (line 1819)
  * __satfractunssiuda:                    Fixed-point fractional library routines.
!                                                              (line 1830)
  * __satfractunssiudq:                    Fixed-point fractional library routines.
!                                                              (line 1825)
  * __satfractunssiuha:                    Fixed-point fractional library routines.
!                                                              (line 1827)
  * __satfractunssiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1822)
  * __satfractunssiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1820)
  * __satfractunssiusa:                    Fixed-point fractional library routines.
!                                                              (line 1829)
  * __satfractunssiusq:                    Fixed-point fractional library routines.
!                                                              (line 1823)
  * __satfractunssiuta:                    Fixed-point fractional library routines.
!                                                              (line 1832)
  * __satfractunstida:                     Fixed-point fractional library routines.
!                                                              (line 1870)
  * __satfractunstidq:                     Fixed-point fractional library routines.
!                                                              (line 1865)
  * __satfractunstiha:                     Fixed-point fractional library routines.
!                                                              (line 1867)
  * __satfractunstihq:                     Fixed-point fractional library routines.
!                                                              (line 1862)
  * __satfractunstiqq:                     Fixed-point fractional library routines.
!                                                              (line 1860)
  * __satfractunstisa:                     Fixed-point fractional library routines.
!                                                              (line 1869)
  * __satfractunstisq:                     Fixed-point fractional library routines.
!                                                              (line 1863)
  * __satfractunstita:                     Fixed-point fractional library routines.
!                                                              (line 1872)
  * __satfractunstiuda:                    Fixed-point fractional library routines.
!                                                              (line 1886)
  * __satfractunstiudq:                    Fixed-point fractional library routines.
!                                                              (line 1880)
  * __satfractunstiuha:                    Fixed-point fractional library routines.
!                                                              (line 1882)
  * __satfractunstiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1876)
  * __satfractunstiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1874)
  * __satfractunstiusa:                    Fixed-point fractional library routines.
!                                                              (line 1884)
  * __satfractunstiusq:                    Fixed-point fractional library routines.
!                                                              (line 1878)
  * __satfractunstiuta:                    Fixed-point fractional library routines.
!                                                              (line 1888)
  * __satfractuqqda:                       Fixed-point fractional library routines.
!                                                              (line 1207)
  * __satfractuqqdq:                       Fixed-point fractional library routines.
!                                                              (line 1202)
  * __satfractuqqha:                       Fixed-point fractional library routines.
!                                                              (line 1204)
  * __satfractuqqhq:                       Fixed-point fractional library routines.
!                                                              (line 1199)
  * __satfractuqqqq:                       Fixed-point fractional library routines.
!                                                              (line 1197)
  * __satfractuqqsa:                       Fixed-point fractional library routines.
!                                                              (line 1206)
  * __satfractuqqsq:                       Fixed-point fractional library routines.
!                                                              (line 1200)
  * __satfractuqqta:                       Fixed-point fractional library routines.
!                                                              (line 1209)
  * __satfractuqquda:                      Fixed-point fractional library routines.
!                                                              (line 1221)
  * __satfractuqqudq2:                     Fixed-point fractional library routines.
!                                                              (line 1215)
  * __satfractuqquha:                      Fixed-point fractional library routines.
!                                                              (line 1217)
  * __satfractuqquhq2:                     Fixed-point fractional library routines.
!                                                              (line 1211)
  * __satfractuqqusa:                      Fixed-point fractional library routines.
!                                                              (line 1219)
  * __satfractuqqusq2:                     Fixed-point fractional library routines.
!                                                              (line 1213)
  * __satfractuqquta:                      Fixed-point fractional library routines.
!                                                              (line 1223)
  * __satfractusada:                       Fixed-point fractional library routines.
!                                                              (line 1334)
  * __satfractusadq:                       Fixed-point fractional library routines.
!                                                              (line 1331)
  * __satfractusaha:                       Fixed-point fractional library routines.
!                                                              (line 1332)
  * __satfractusahq:                       Fixed-point fractional library routines.
!                                                              (line 1329)
  * __satfractusaqq:                       Fixed-point fractional library routines.
!                                                              (line 1328)
  * __satfractusasa:                       Fixed-point fractional library routines.
!                                                              (line 1333)
  * __satfractusasq:                       Fixed-point fractional library routines.
!                                                              (line 1330)
  * __satfractusata:                       Fixed-point fractional library routines.
!                                                              (line 1335)
  * __satfractusauda2:                     Fixed-point fractional library routines.
!                                                              (line 1345)
  * __satfractusaudq:                      Fixed-point fractional library routines.
!                                                              (line 1341)
  * __satfractusauha2:                     Fixed-point fractional library routines.
!                                                              (line 1343)
  * __satfractusauhq:                      Fixed-point fractional library routines.
!                                                              (line 1338)
  * __satfractusauqq:                      Fixed-point fractional library routines.
!                                                              (line 1336)
  * __satfractusausq:                      Fixed-point fractional library routines.
!                                                              (line 1339)
  * __satfractusauta2:                     Fixed-point fractional library routines.
!                                                              (line 1347)
  * __satfractusqda:                       Fixed-point fractional library routines.
!                                                              (line 1255)
  * __satfractusqdq:                       Fixed-point fractional library routines.
!                                                              (line 1250)
  * __satfractusqha:                       Fixed-point fractional library routines.
!                                                              (line 1252)
  * __satfractusqhq:                       Fixed-point fractional library routines.
!                                                              (line 1248)
  * __satfractusqqq:                       Fixed-point fractional library routines.
!                                                              (line 1246)
  * __satfractusqsa:                       Fixed-point fractional library routines.
!                                                              (line 1254)
  * __satfractusqsq:                       Fixed-point fractional library routines.
!                                                              (line 1249)
  * __satfractusqta:                       Fixed-point fractional library routines.
!                                                              (line 1256)
  * __satfractusquda:                      Fixed-point fractional library routines.
!                                                              (line 1268)
  * __satfractusqudq2:                     Fixed-point fractional library routines.
!                                                              (line 1262)
  * __satfractusquha:                      Fixed-point fractional library routines.
!                                                              (line 1264)
  * __satfractusquhq2:                     Fixed-point fractional library routines.
!                                                              (line 1260)
  * __satfractusquqq2:                     Fixed-point fractional library routines.
!                                                              (line 1258)
  * __satfractusqusa:                      Fixed-point fractional library routines.
!                                                              (line 1266)
  * __satfractusquta:                      Fixed-point fractional library routines.
!                                                              (line 1270)
  * __satfractutada:                       Fixed-point fractional library routines.
!                                                              (line 1385)
  * __satfractutadq:                       Fixed-point fractional library routines.
!                                                              (line 1380)
  * __satfractutaha:                       Fixed-point fractional library routines.
!                                                              (line 1382)
  * __satfractutahq:                       Fixed-point fractional library routines.
!                                                              (line 1377)
  * __satfractutaqq:                       Fixed-point fractional library routines.
!                                                              (line 1375)
  * __satfractutasa:                       Fixed-point fractional library routines.
!                                                              (line 1384)
  * __satfractutasq:                       Fixed-point fractional library routines.
!                                                              (line 1378)
  * __satfractutata:                       Fixed-point fractional library routines.
!                                                              (line 1387)
  * __satfractutauda2:                     Fixed-point fractional library routines.
!                                                              (line 1401)
  * __satfractutaudq:                      Fixed-point fractional library routines.
!                                                              (line 1395)
  * __satfractutauha2:                     Fixed-point fractional library routines.
!                                                              (line 1397)
  * __satfractutauhq:                      Fixed-point fractional library routines.
!                                                              (line 1391)
  * __satfractutauqq:                      Fixed-point fractional library routines.
!                                                              (line 1389)
  * __satfractutausa2:                     Fixed-point fractional library routines.
!                                                              (line 1399)
  * __satfractutausq:                      Fixed-point fractional library routines.
!                                                              (line 1393)
  * __splitstack_find:                     Miscellaneous routines.
                                                               (line   15)
  * __ssaddda3:                            Fixed-point fractional library routines.
!                                                              (line   74)
  * __ssadddq3:                            Fixed-point fractional library routines.
!                                                              (line   69)
  * __ssaddha3:                            Fixed-point fractional library routines.
!                                                              (line   71)
  * __ssaddhq3:                            Fixed-point fractional library routines.
!                                                              (line   67)
  * __ssaddqq3:                            Fixed-point fractional library routines.
!                                                              (line   65)
  * __ssaddsa3:                            Fixed-point fractional library routines.
!                                                              (line   73)
  * __ssaddsq3:                            Fixed-point fractional library routines.
!                                                              (line   68)
  * __ssaddta3:                            Fixed-point fractional library routines.
!                                                              (line   75)
  * __ssashlda3:                           Fixed-point fractional library routines.
!                                                              (line  409)
  * __ssashldq3:                           Fixed-point fractional library routines.
!                                                              (line  405)
  * __ssashlha3:                           Fixed-point fractional library routines.
!                                                              (line  407)
  * __ssashlhq3:                           Fixed-point fractional library routines.
!                                                              (line  403)
  * __ssashlsa3:                           Fixed-point fractional library routines.
!                                                              (line  408)
  * __ssashlsq3:                           Fixed-point fractional library routines.
!                                                              (line  404)
  * __ssashlta3:                           Fixed-point fractional library routines.
!                                                              (line  410)
  * __ssdivda3:                            Fixed-point fractional library routines.
!                                                              (line  268)
  * __ssdivdq3:                            Fixed-point fractional library routines.
!                                                              (line  263)
  * __ssdivha3:                            Fixed-point fractional library routines.
!                                                              (line  265)
  * __ssdivhq3:                            Fixed-point fractional library routines.
!                                                              (line  261)
  * __ssdivqq3:                            Fixed-point fractional library routines.
!                                                              (line  259)
  * __ssdivsa3:                            Fixed-point fractional library routines.
!                                                              (line  267)
  * __ssdivsq3:                            Fixed-point fractional library routines.
!                                                              (line  262)
  * __ssdivta3:                            Fixed-point fractional library routines.
!                                                              (line  269)
  * __ssmulda3:                            Fixed-point fractional library routines.
!                                                              (line  200)
  * __ssmuldq3:                            Fixed-point fractional library routines.
!                                                              (line  195)
  * __ssmulha3:                            Fixed-point fractional library routines.
!                                                              (line  197)
  * __ssmulhq3:                            Fixed-point fractional library routines.
!                                                              (line  193)
  * __ssmulqq3:                            Fixed-point fractional library routines.
!                                                              (line  191)
  * __ssmulsa3:                            Fixed-point fractional library routines.
!                                                              (line  199)
  * __ssmulsq3:                            Fixed-point fractional library routines.
!                                                              (line  194)
  * __ssmulta3:                            Fixed-point fractional library routines.
!                                                              (line  201)
  * __ssnegda2:                            Fixed-point fractional library routines.
!                                                              (line  323)
  * __ssnegdq2:                            Fixed-point fractional library routines.
!                                                              (line  320)
  * __ssnegha2:                            Fixed-point fractional library routines.
!                                                              (line  321)
  * __ssneghq2:                            Fixed-point fractional library routines.
!                                                              (line  318)
  * __ssnegqq2:                            Fixed-point fractional library routines.
!                                                              (line  317)
  * __ssnegsa2:                            Fixed-point fractional library routines.
!                                                              (line  322)
  * __ssnegsq2:                            Fixed-point fractional library routines.
!                                                              (line  319)
  * __ssnegta2:                            Fixed-point fractional library routines.
!                                                              (line  324)
  * __sssubda3:                            Fixed-point fractional library routines.
!                                                              (line  136)
  * __sssubdq3:                            Fixed-point fractional library routines.
!                                                              (line  131)
  * __sssubha3:                            Fixed-point fractional library routines.
!                                                              (line  133)
  * __sssubhq3:                            Fixed-point fractional library routines.
!                                                              (line  129)
  * __sssubqq3:                            Fixed-point fractional library routines.
!                                                              (line  127)
  * __sssubsa3:                            Fixed-point fractional library routines.
!                                                              (line  135)
  * __sssubsq3:                            Fixed-point fractional library routines.
!                                                              (line  130)
  * __sssubta3:                            Fixed-point fractional library routines.
!                                                              (line  137)
  * __subda3:                              Fixed-point fractional library routines.
!                                                              (line  114)
  * __subdf3:                              Soft float library routines.
                                                               (line   30)
  * __subdq3:                              Fixed-point fractional library routines.
!                                                              (line  101)
  * __subha3:                              Fixed-point fractional library routines.
!                                                              (line  111)
  * __subhq3:                              Fixed-point fractional library routines.
!                                                              (line   99)
  * __subqq3:                              Fixed-point fractional library routines.
!                                                              (line   97)
  * __subsa3:                              Fixed-point fractional library routines.
!                                                              (line  113)
  * __subsf3:                              Soft float library routines.
                                                               (line   29)
  * __subsq3:                              Fixed-point fractional library routines.
!                                                              (line  100)
  * __subta3:                              Fixed-point fractional library routines.
!                                                              (line  115)
  * __subtf3:                              Soft float library routines.
                                                               (line   31)
  * __subuda3:                             Fixed-point fractional library routines.
!                                                              (line  121)
  * __subudq3:                             Fixed-point fractional library routines.
!                                                              (line  109)
  * __subuha3:                             Fixed-point fractional library routines.
!                                                              (line  117)
  * __subuhq3:                             Fixed-point fractional library routines.
!                                                              (line  105)
  * __subuqq3:                             Fixed-point fractional library routines.
!                                                              (line  103)
  * __subusa3:                             Fixed-point fractional library routines.
!                                                              (line  119)
  * __subusq3:                             Fixed-point fractional library routines.
!                                                              (line  107)
  * __subuta3:                             Fixed-point fractional library routines.
!                                                              (line  123)
  * __subvdi3:                             Integer library routines.
                                                               (line  122)
  * __subvsi3:                             Integer library routines.
--- 54021,55031 ----
  * __popcountti2:                         Integer library routines.
                                                               (line  157)
  * __powidf2:                             Soft float library routines.
                                                               (line  260)
+ * __powisf2:                             Soft float library routines.
+                                                              (line  259)
  * __powitf2:                             Soft float library routines.
!                                                              (line  261)
  * __powixf2:                             Soft float library routines.
!                                                              (line  262)
  * __satfractdadq:                        Fixed-point fractional library routines.
!                                                              (line 1152)
  * __satfractdaha2:                       Fixed-point fractional library routines.
!                                                              (line 1153)
  * __satfractdahq:                        Fixed-point fractional library routines.
!                                                              (line 1150)
  * __satfractdaqq:                        Fixed-point fractional library routines.
!                                                              (line 1149)
  * __satfractdasa2:                       Fixed-point fractional library routines.
!                                                              (line 1154)
  * __satfractdasq:                        Fixed-point fractional library routines.
!                                                              (line 1151)
  * __satfractdata2:                       Fixed-point fractional library routines.
!                                                              (line 1155)
  * __satfractdauda:                       Fixed-point fractional library routines.
!                                                              (line 1165)
  * __satfractdaudq:                       Fixed-point fractional library routines.
!                                                              (line 1160)
  * __satfractdauha:                       Fixed-point fractional library routines.
!                                                              (line 1162)
  * __satfractdauhq:                       Fixed-point fractional library routines.
!                                                              (line 1158)
  * __satfractdauqq:                       Fixed-point fractional library routines.
!                                                              (line 1156)
  * __satfractdausa:                       Fixed-point fractional library routines.
!                                                              (line 1164)
  * __satfractdausq:                       Fixed-point fractional library routines.
!                                                              (line 1159)
  * __satfractdauta:                       Fixed-point fractional library routines.
!                                                              (line 1166)
  * __satfractdfda:                        Fixed-point fractional library routines.
!                                                              (line 1505)
  * __satfractdfdq:                        Fixed-point fractional library routines.
!                                                              (line 1502)
  * __satfractdfha:                        Fixed-point fractional library routines.
!                                                              (line 1503)
  * __satfractdfhq:                        Fixed-point fractional library routines.
!                                                              (line 1500)
  * __satfractdfqq:                        Fixed-point fractional library routines.
!                                                              (line 1499)
  * __satfractdfsa:                        Fixed-point fractional library routines.
!                                                              (line 1504)
  * __satfractdfsq:                        Fixed-point fractional library routines.
!                                                              (line 1501)
  * __satfractdfta:                        Fixed-point fractional library routines.
!                                                              (line 1506)
  * __satfractdfuda:                       Fixed-point fractional library routines.
!                                                              (line 1514)
  * __satfractdfudq:                       Fixed-point fractional library routines.
!                                                              (line 1510)
  * __satfractdfuha:                       Fixed-point fractional library routines.
!                                                              (line 1512)
  * __satfractdfuhq:                       Fixed-point fractional library routines.
!                                                              (line 1508)
  * __satfractdfuqq:                       Fixed-point fractional library routines.
!                                                              (line 1507)
  * __satfractdfusa:                       Fixed-point fractional library routines.
!                                                              (line 1513)
  * __satfractdfusq:                       Fixed-point fractional library routines.
!                                                              (line 1509)
  * __satfractdfuta:                       Fixed-point fractional library routines.
!                                                              (line 1515)
  * __satfractdida:                        Fixed-point fractional library routines.
!                                                              (line 1455)
  * __satfractdidq:                        Fixed-point fractional library routines.
!                                                              (line 1452)
  * __satfractdiha:                        Fixed-point fractional library routines.
!                                                              (line 1453)
  * __satfractdihq:                        Fixed-point fractional library routines.
!                                                              (line 1450)
  * __satfractdiqq:                        Fixed-point fractional library routines.
!                                                              (line 1449)
  * __satfractdisa:                        Fixed-point fractional library routines.
!                                                              (line 1454)
  * __satfractdisq:                        Fixed-point fractional library routines.
!                                                              (line 1451)
  * __satfractdita:                        Fixed-point fractional library routines.
!                                                              (line 1456)
  * __satfractdiuda:                       Fixed-point fractional library routines.
!                                                              (line 1463)
  * __satfractdiudq:                       Fixed-point fractional library routines.
!                                                              (line 1460)
  * __satfractdiuha:                       Fixed-point fractional library routines.
!                                                              (line 1461)
  * __satfractdiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1458)
  * __satfractdiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1457)
  * __satfractdiusa:                       Fixed-point fractional library routines.
!                                                              (line 1462)
  * __satfractdiusq:                       Fixed-point fractional library routines.
!                                                              (line 1459)
  * __satfractdiuta:                       Fixed-point fractional library routines.
!                                                              (line 1464)
  * __satfractdqda:                        Fixed-point fractional library routines.
!                                                              (line 1097)
  * __satfractdqha:                        Fixed-point fractional library routines.
!                                                              (line 1095)
  * __satfractdqhq2:                       Fixed-point fractional library routines.
!                                                              (line 1093)
  * __satfractdqqq2:                       Fixed-point fractional library routines.
!                                                              (line 1092)
  * __satfractdqsa:                        Fixed-point fractional library routines.
!                                                              (line 1096)
  * __satfractdqsq2:                       Fixed-point fractional library routines.
!                                                              (line 1094)
  * __satfractdqta:                        Fixed-point fractional library routines.
!                                                              (line 1098)
  * __satfractdquda:                       Fixed-point fractional library routines.
!                                                              (line 1109)
  * __satfractdqudq:                       Fixed-point fractional library routines.
!                                                              (line 1104)
  * __satfractdquha:                       Fixed-point fractional library routines.
!                                                              (line 1106)
  * __satfractdquhq:                       Fixed-point fractional library routines.
!                                                              (line 1101)
  * __satfractdquqq:                       Fixed-point fractional library routines.
!                                                              (line 1099)
  * __satfractdqusa:                       Fixed-point fractional library routines.
!                                                              (line 1108)
  * __satfractdqusq:                       Fixed-point fractional library routines.
!                                                              (line 1102)
  * __satfractdquta:                       Fixed-point fractional library routines.
!                                                              (line 1111)
  * __satfracthada2:                       Fixed-point fractional library routines.
!                                                              (line 1118)
  * __satfracthadq:                        Fixed-point fractional library routines.
!                                                              (line 1116)
  * __satfracthahq:                        Fixed-point fractional library routines.
!                                                              (line 1114)
  * __satfracthaqq:                        Fixed-point fractional library routines.
!                                                              (line 1113)
  * __satfracthasa2:                       Fixed-point fractional library routines.
!                                                              (line 1117)
  * __satfracthasq:                        Fixed-point fractional library routines.
!                                                              (line 1115)
  * __satfracthata2:                       Fixed-point fractional library routines.
!                                                              (line 1119)
  * __satfracthauda:                       Fixed-point fractional library routines.
!                                                              (line 1130)
  * __satfracthaudq:                       Fixed-point fractional library routines.
!                                                              (line 1125)
  * __satfracthauha:                       Fixed-point fractional library routines.
!                                                              (line 1127)
  * __satfracthauhq:                       Fixed-point fractional library routines.
!                                                              (line 1122)
  * __satfracthauqq:                       Fixed-point fractional library routines.
!                                                              (line 1120)
  * __satfracthausa:                       Fixed-point fractional library routines.
!                                                              (line 1129)
  * __satfracthausq:                       Fixed-point fractional library routines.
!                                                              (line 1123)
  * __satfracthauta:                       Fixed-point fractional library routines.
!                                                              (line 1132)
  * __satfracthida:                        Fixed-point fractional library routines.
!                                                              (line 1423)
  * __satfracthidq:                        Fixed-point fractional library routines.
!                                                              (line 1420)
  * __satfracthiha:                        Fixed-point fractional library routines.
!                                                              (line 1421)
  * __satfracthihq:                        Fixed-point fractional library routines.
!                                                              (line 1418)
  * __satfracthiqq:                        Fixed-point fractional library routines.
!                                                              (line 1417)
  * __satfracthisa:                        Fixed-point fractional library routines.
!                                                              (line 1422)
  * __satfracthisq:                        Fixed-point fractional library routines.
!                                                              (line 1419)
  * __satfracthita:                        Fixed-point fractional library routines.
!                                                              (line 1424)
  * __satfracthiuda:                       Fixed-point fractional library routines.
!                                                              (line 1431)
  * __satfracthiudq:                       Fixed-point fractional library routines.
!                                                              (line 1428)
  * __satfracthiuha:                       Fixed-point fractional library routines.
!                                                              (line 1429)
  * __satfracthiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1426)
  * __satfracthiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1425)
  * __satfracthiusa:                       Fixed-point fractional library routines.
!                                                              (line 1430)
  * __satfracthiusq:                       Fixed-point fractional library routines.
!                                                              (line 1427)
  * __satfracthiuta:                       Fixed-point fractional library routines.
!                                                              (line 1432)
  * __satfracthqda:                        Fixed-point fractional library routines.
!                                                              (line 1063)
  * __satfracthqdq2:                       Fixed-point fractional library routines.
!                                                              (line 1060)
  * __satfracthqha:                        Fixed-point fractional library routines.
!                                                              (line 1061)
  * __satfracthqqq2:                       Fixed-point fractional library routines.
!                                                              (line 1058)
  * __satfracthqsa:                        Fixed-point fractional library routines.
!                                                              (line 1062)
  * __satfracthqsq2:                       Fixed-point fractional library routines.
!                                                              (line 1059)
  * __satfracthqta:                        Fixed-point fractional library routines.
!                                                              (line 1064)
  * __satfracthquda:                       Fixed-point fractional library routines.
!                                                              (line 1071)
  * __satfracthqudq:                       Fixed-point fractional library routines.
!                                                              (line 1068)
  * __satfracthquha:                       Fixed-point fractional library routines.
!                                                              (line 1069)
  * __satfracthquhq:                       Fixed-point fractional library routines.
!                                                              (line 1066)
  * __satfracthquqq:                       Fixed-point fractional library routines.
!                                                              (line 1065)
  * __satfracthqusa:                       Fixed-point fractional library routines.
!                                                              (line 1070)
  * __satfracthqusq:                       Fixed-point fractional library routines.
!                                                              (line 1067)
  * __satfracthquta:                       Fixed-point fractional library routines.
!                                                              (line 1072)
  * __satfractqida:                        Fixed-point fractional library routines.
!                                                              (line 1401)
  * __satfractqidq:                        Fixed-point fractional library routines.
!                                                              (line 1398)
  * __satfractqiha:                        Fixed-point fractional library routines.
!                                                              (line 1399)
  * __satfractqihq:                        Fixed-point fractional library routines.
!                                                              (line 1396)
  * __satfractqiqq:                        Fixed-point fractional library routines.
!                                                              (line 1395)
  * __satfractqisa:                        Fixed-point fractional library routines.
!                                                              (line 1400)
  * __satfractqisq:                        Fixed-point fractional library routines.
!                                                              (line 1397)
  * __satfractqita:                        Fixed-point fractional library routines.
!                                                              (line 1402)
  * __satfractqiuda:                       Fixed-point fractional library routines.
!                                                              (line 1413)
  * __satfractqiudq:                       Fixed-point fractional library routines.
!                                                              (line 1408)
  * __satfractqiuha:                       Fixed-point fractional library routines.
!                                                              (line 1410)
  * __satfractqiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1405)
  * __satfractqiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1403)
  * __satfractqiusa:                       Fixed-point fractional library routines.
!                                                              (line 1412)
  * __satfractqiusq:                       Fixed-point fractional library routines.
!                                                              (line 1406)
  * __satfractqiuta:                       Fixed-point fractional library routines.
!                                                              (line 1415)
  * __satfractqqda:                        Fixed-point fractional library routines.
!                                                              (line 1042)
  * __satfractqqdq2:                       Fixed-point fractional library routines.
!                                                              (line 1039)
  * __satfractqqha:                        Fixed-point fractional library routines.
!                                                              (line 1040)
  * __satfractqqhq2:                       Fixed-point fractional library routines.
!                                                              (line 1037)
  * __satfractqqsa:                        Fixed-point fractional library routines.
!                                                              (line 1041)
  * __satfractqqsq2:                       Fixed-point fractional library routines.
!                                                              (line 1038)
  * __satfractqqta:                        Fixed-point fractional library routines.
!                                                              (line 1043)
  * __satfractqquda:                       Fixed-point fractional library routines.
!                                                              (line 1054)
  * __satfractqqudq:                       Fixed-point fractional library routines.
!                                                              (line 1049)
  * __satfractqquha:                       Fixed-point fractional library routines.
!                                                              (line 1051)
  * __satfractqquhq:                       Fixed-point fractional library routines.
!                                                              (line 1046)
  * __satfractqquqq:                       Fixed-point fractional library routines.
!                                                              (line 1044)
  * __satfractqqusa:                       Fixed-point fractional library routines.
!                                                              (line 1053)
  * __satfractqqusq:                       Fixed-point fractional library routines.
!                                                              (line 1047)
  * __satfractqquta:                       Fixed-point fractional library routines.
!                                                              (line 1056)
  * __satfractsada2:                       Fixed-point fractional library routines.
!                                                              (line 1139)
  * __satfractsadq:                        Fixed-point fractional library routines.
!                                                              (line 1137)
  * __satfractsaha2:                       Fixed-point fractional library routines.
!                                                              (line 1138)
  * __satfractsahq:                        Fixed-point fractional library routines.
!                                                              (line 1135)
  * __satfractsaqq:                        Fixed-point fractional library routines.
!                                                              (line 1134)
  * __satfractsasq:                        Fixed-point fractional library routines.
!                                                              (line 1136)
  * __satfractsata2:                       Fixed-point fractional library routines.
!                                                              (line 1140)
  * __satfractsauda:                       Fixed-point fractional library routines.
!                                                              (line 1147)
  * __satfractsaudq:                       Fixed-point fractional library routines.
!                                                              (line 1144)
  * __satfractsauha:                       Fixed-point fractional library routines.
!                                                              (line 1145)
  * __satfractsauhq:                       Fixed-point fractional library routines.
!                                                              (line 1142)
  * __satfractsauqq:                       Fixed-point fractional library routines.
!                                                              (line 1141)
  * __satfractsausa:                       Fixed-point fractional library routines.
!                                                              (line 1146)
  * __satfractsausq:                       Fixed-point fractional library routines.
!                                                              (line 1143)
  * __satfractsauta:                       Fixed-point fractional library routines.
!                                                              (line 1148)
  * __satfractsfda:                        Fixed-point fractional library routines.
!                                                              (line 1489)
  * __satfractsfdq:                        Fixed-point fractional library routines.
!                                                              (line 1486)
  * __satfractsfha:                        Fixed-point fractional library routines.
!                                                              (line 1487)
  * __satfractsfhq:                        Fixed-point fractional library routines.
!                                                              (line 1484)
  * __satfractsfqq:                        Fixed-point fractional library routines.
!                                                              (line 1483)
  * __satfractsfsa:                        Fixed-point fractional library routines.
!                                                              (line 1488)
  * __satfractsfsq:                        Fixed-point fractional library routines.
!                                                              (line 1485)
  * __satfractsfta:                        Fixed-point fractional library routines.
!                                                              (line 1490)
  * __satfractsfuda:                       Fixed-point fractional library routines.
!                                                              (line 1497)
  * __satfractsfudq:                       Fixed-point fractional library routines.
!                                                              (line 1494)
  * __satfractsfuha:                       Fixed-point fractional library routines.
!                                                              (line 1495)
  * __satfractsfuhq:                       Fixed-point fractional library routines.
!                                                              (line 1492)
  * __satfractsfuqq:                       Fixed-point fractional library routines.
!                                                              (line 1491)
  * __satfractsfusa:                       Fixed-point fractional library routines.
!                                                              (line 1496)
  * __satfractsfusq:                       Fixed-point fractional library routines.
!                                                              (line 1493)
  * __satfractsfuta:                       Fixed-point fractional library routines.
!                                                              (line 1498)
  * __satfractsida:                        Fixed-point fractional library routines.
!                                                              (line 1439)
  * __satfractsidq:                        Fixed-point fractional library routines.
!                                                              (line 1436)
  * __satfractsiha:                        Fixed-point fractional library routines.
!                                                              (line 1437)
  * __satfractsihq:                        Fixed-point fractional library routines.
!                                                              (line 1434)
  * __satfractsiqq:                        Fixed-point fractional library routines.
!                                                              (line 1433)
  * __satfractsisa:                        Fixed-point fractional library routines.
!                                                              (line 1438)
  * __satfractsisq:                        Fixed-point fractional library routines.
!                                                              (line 1435)
  * __satfractsita:                        Fixed-point fractional library routines.
!                                                              (line 1440)
  * __satfractsiuda:                       Fixed-point fractional library routines.
!                                                              (line 1447)
  * __satfractsiudq:                       Fixed-point fractional library routines.
!                                                              (line 1444)
  * __satfractsiuha:                       Fixed-point fractional library routines.
!                                                              (line 1445)
  * __satfractsiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1442)
  * __satfractsiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1441)
  * __satfractsiusa:                       Fixed-point fractional library routines.
!                                                              (line 1446)
  * __satfractsiusq:                       Fixed-point fractional library routines.
!                                                              (line 1443)
  * __satfractsiuta:                       Fixed-point fractional library routines.
!                                                              (line 1448)
  * __satfractsqda:                        Fixed-point fractional library routines.
!                                                              (line 1078)
  * __satfractsqdq2:                       Fixed-point fractional library routines.
!                                                              (line 1075)
  * __satfractsqha:                        Fixed-point fractional library routines.
!                                                              (line 1076)
  * __satfractsqhq2:                       Fixed-point fractional library routines.
!                                                              (line 1074)
  * __satfractsqqq2:                       Fixed-point fractional library routines.
!                                                              (line 1073)
  * __satfractsqsa:                        Fixed-point fractional library routines.
!                                                              (line 1077)
  * __satfractsqta:                        Fixed-point fractional library routines.
!                                                              (line 1079)
  * __satfractsquda:                       Fixed-point fractional library routines.
!                                                              (line 1089)
  * __satfractsqudq:                       Fixed-point fractional library routines.
!                                                              (line 1084)
  * __satfractsquha:                       Fixed-point fractional library routines.
!                                                              (line 1086)
  * __satfractsquhq:                       Fixed-point fractional library routines.
!                                                              (line 1082)
  * __satfractsquqq:                       Fixed-point fractional library routines.
!                                                              (line 1080)
  * __satfractsqusa:                       Fixed-point fractional library routines.
!                                                              (line 1088)
  * __satfractsqusq:                       Fixed-point fractional library routines.
!                                                              (line 1083)
  * __satfractsquta:                       Fixed-point fractional library routines.
!                                                              (line 1090)
  * __satfracttada2:                       Fixed-point fractional library routines.
!                                                              (line 1174)
  * __satfracttadq:                        Fixed-point fractional library routines.
!                                                              (line 1171)
  * __satfracttaha2:                       Fixed-point fractional library routines.
!                                                              (line 1172)
  * __satfracttahq:                        Fixed-point fractional library routines.
!                                                              (line 1169)
  * __satfracttaqq:                        Fixed-point fractional library routines.
!                                                              (line 1168)
  * __satfracttasa2:                       Fixed-point fractional library routines.
!                                                              (line 1173)
  * __satfracttasq:                        Fixed-point fractional library routines.
!                                                              (line 1170)
  * __satfracttauda:                       Fixed-point fractional library routines.
!                                                              (line 1185)
  * __satfracttaudq:                       Fixed-point fractional library routines.
!                                                              (line 1180)
  * __satfracttauha:                       Fixed-point fractional library routines.
!                                                              (line 1182)
  * __satfracttauhq:                       Fixed-point fractional library routines.
!                                                              (line 1177)
  * __satfracttauqq:                       Fixed-point fractional library routines.
!                                                              (line 1175)
  * __satfracttausa:                       Fixed-point fractional library routines.
!                                                              (line 1184)
  * __satfracttausq:                       Fixed-point fractional library routines.
!                                                              (line 1178)
  * __satfracttauta:                       Fixed-point fractional library routines.
!                                                              (line 1187)
  * __satfracttida:                        Fixed-point fractional library routines.
!                                                              (line 1471)
  * __satfracttidq:                        Fixed-point fractional library routines.
!                                                              (line 1468)
  * __satfracttiha:                        Fixed-point fractional library routines.
!                                                              (line 1469)
  * __satfracttihq:                        Fixed-point fractional library routines.
!                                                              (line 1466)
  * __satfracttiqq:                        Fixed-point fractional library routines.
!                                                              (line 1465)
  * __satfracttisa:                        Fixed-point fractional library routines.
!                                                              (line 1470)
  * __satfracttisq:                        Fixed-point fractional library routines.
!                                                              (line 1467)
  * __satfracttita:                        Fixed-point fractional library routines.
!                                                              (line 1472)
  * __satfracttiuda:                       Fixed-point fractional library routines.
!                                                              (line 1480)
  * __satfracttiudq:                       Fixed-point fractional library routines.
!                                                              (line 1476)
  * __satfracttiuha:                       Fixed-point fractional library routines.
!                                                              (line 1478)
  * __satfracttiuhq:                       Fixed-point fractional library routines.
!                                                              (line 1474)
  * __satfracttiuqq:                       Fixed-point fractional library routines.
!                                                              (line 1473)
  * __satfracttiusa:                       Fixed-point fractional library routines.
!                                                              (line 1479)
  * __satfracttiusq:                       Fixed-point fractional library routines.
!                                                              (line 1475)
  * __satfracttiuta:                       Fixed-point fractional library routines.
!                                                              (line 1481)
  * __satfractudada:                       Fixed-point fractional library routines.
!                                                              (line 1350)
  * __satfractudadq:                       Fixed-point fractional library routines.
!                                                              (line 1345)
  * __satfractudaha:                       Fixed-point fractional library routines.
!                                                              (line 1347)
  * __satfractudahq:                       Fixed-point fractional library routines.
!                                                              (line 1343)
  * __satfractudaqq:                       Fixed-point fractional library routines.
!                                                              (line 1341)
  * __satfractudasa:                       Fixed-point fractional library routines.
!                                                              (line 1349)
  * __satfractudasq:                       Fixed-point fractional library routines.
!                                                              (line 1344)
  * __satfractudata:                       Fixed-point fractional library routines.
!                                                              (line 1351)
  * __satfractudaudq:                      Fixed-point fractional library routines.
!                                                              (line 1359)
  * __satfractudauha2:                     Fixed-point fractional library routines.
!                                                              (line 1361)
  * __satfractudauhq:                      Fixed-point fractional library routines.
!                                                              (line 1355)
  * __satfractudauqq:                      Fixed-point fractional library routines.
!                                                              (line 1353)
  * __satfractudausa2:                     Fixed-point fractional library routines.
!                                                              (line 1363)
  * __satfractudausq:                      Fixed-point fractional library routines.
!                                                              (line 1357)
  * __satfractudauta2:                     Fixed-point fractional library routines.
!                                                              (line 1365)
  * __satfractudqda:                       Fixed-point fractional library routines.
!                                                              (line 1274)
  * __satfractudqdq:                       Fixed-point fractional library routines.
!                                                              (line 1269)
  * __satfractudqha:                       Fixed-point fractional library routines.
!                                                              (line 1271)
  * __satfractudqhq:                       Fixed-point fractional library routines.
!                                                              (line 1266)
  * __satfractudqqq:                       Fixed-point fractional library routines.
!                                                              (line 1264)
  * __satfractudqsa:                       Fixed-point fractional library routines.
!                                                              (line 1273)
  * __satfractudqsq:                       Fixed-point fractional library routines.
!                                                              (line 1267)
  * __satfractudqta:                       Fixed-point fractional library routines.
!                                                              (line 1276)
  * __satfractudquda:                      Fixed-point fractional library routines.
!                                                              (line 1288)
  * __satfractudquha:                      Fixed-point fractional library routines.
!                                                              (line 1284)
  * __satfractudquhq2:                     Fixed-point fractional library routines.
!                                                              (line 1280)
  * __satfractudquqq2:                     Fixed-point fractional library routines.
!                                                              (line 1278)
  * __satfractudqusa:                      Fixed-point fractional library routines.
!                                                              (line 1286)
  * __satfractudqusq2:                     Fixed-point fractional library routines.
!                                                              (line 1282)
  * __satfractudquta:                      Fixed-point fractional library routines.
!                                                              (line 1290)
  * __satfractuhada:                       Fixed-point fractional library routines.
!                                                              (line 1302)
  * __satfractuhadq:                       Fixed-point fractional library routines.
!                                                              (line 1297)
  * __satfractuhaha:                       Fixed-point fractional library routines.
!                                                              (line 1299)
  * __satfractuhahq:                       Fixed-point fractional library routines.
!                                                              (line 1294)
  * __satfractuhaqq:                       Fixed-point fractional library routines.
!                                                              (line 1292)
  * __satfractuhasa:                       Fixed-point fractional library routines.
!                                                              (line 1301)
  * __satfractuhasq:                       Fixed-point fractional library routines.
!                                                              (line 1295)
  * __satfractuhata:                       Fixed-point fractional library routines.
!                                                              (line 1304)
  * __satfractuhauda2:                     Fixed-point fractional library routines.
!                                                              (line 1316)
  * __satfractuhaudq:                      Fixed-point fractional library routines.
!                                                              (line 1312)
  * __satfractuhauhq:                      Fixed-point fractional library routines.
!                                                              (line 1308)
  * __satfractuhauqq:                      Fixed-point fractional library routines.
!                                                              (line 1306)
  * __satfractuhausa2:                     Fixed-point fractional library routines.
!                                                              (line 1314)
  * __satfractuhausq:                      Fixed-point fractional library routines.
!                                                              (line 1310)
  * __satfractuhauta2:                     Fixed-point fractional library routines.
!                                                              (line 1318)
  * __satfractuhqda:                       Fixed-point fractional library routines.
!                                                              (line 1223)
  * __satfractuhqdq:                       Fixed-point fractional library routines.
!                                                              (line 1220)
  * __satfractuhqha:                       Fixed-point fractional library routines.
!                                                              (line 1221)
  * __satfractuhqhq:                       Fixed-point fractional library routines.
!                                                              (line 1218)
  * __satfractuhqqq:                       Fixed-point fractional library routines.
!                                                              (line 1217)
  * __satfractuhqsa:                       Fixed-point fractional library routines.
!                                                              (line 1222)
  * __satfractuhqsq:                       Fixed-point fractional library routines.
!                                                              (line 1219)
  * __satfractuhqta:                       Fixed-point fractional library routines.
!                                                              (line 1224)
  * __satfractuhquda:                      Fixed-point fractional library routines.
!                                                              (line 1234)
  * __satfractuhqudq2:                     Fixed-point fractional library routines.
!                                                              (line 1229)
  * __satfractuhquha:                      Fixed-point fractional library routines.
!                                                              (line 1231)
  * __satfractuhquqq2:                     Fixed-point fractional library routines.
!                                                              (line 1225)
  * __satfractuhqusa:                      Fixed-point fractional library routines.
!                                                              (line 1233)
  * __satfractuhqusq2:                     Fixed-point fractional library routines.
!                                                              (line 1227)
  * __satfractuhquta:                      Fixed-point fractional library routines.
!                                                              (line 1236)
  * __satfractunsdida:                     Fixed-point fractional library routines.
!                                                              (line 1833)
  * __satfractunsdidq:                     Fixed-point fractional library routines.
!                                                              (line 1829)
  * __satfractunsdiha:                     Fixed-point fractional library routines.
!                                                              (line 1831)
  * __satfractunsdihq:                     Fixed-point fractional library routines.
!                                                              (line 1827)
  * __satfractunsdiqq:                     Fixed-point fractional library routines.
!                                                              (line 1826)
  * __satfractunsdisa:                     Fixed-point fractional library routines.
!                                                              (line 1832)
  * __satfractunsdisq:                     Fixed-point fractional library routines.
!                                                              (line 1828)
  * __satfractunsdita:                     Fixed-point fractional library routines.
!                                                              (line 1834)
  * __satfractunsdiuda:                    Fixed-point fractional library routines.
!                                                              (line 1848)
  * __satfractunsdiudq:                    Fixed-point fractional library routines.
!                                                              (line 1842)
  * __satfractunsdiuha:                    Fixed-point fractional library routines.
!                                                              (line 1844)
  * __satfractunsdiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1838)
  * __satfractunsdiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1836)
  * __satfractunsdiusa:                    Fixed-point fractional library routines.
!                                                              (line 1846)
  * __satfractunsdiusq:                    Fixed-point fractional library routines.
!                                                              (line 1840)
  * __satfractunsdiuta:                    Fixed-point fractional library routines.
!                                                              (line 1850)
  * __satfractunshida:                     Fixed-point fractional library routines.
!                                                              (line 1785)
  * __satfractunshidq:                     Fixed-point fractional library routines.
!                                                              (line 1781)
  * __satfractunshiha:                     Fixed-point fractional library routines.
!                                                              (line 1783)
  * __satfractunshihq:                     Fixed-point fractional library routines.
!                                                              (line 1779)
  * __satfractunshiqq:                     Fixed-point fractional library routines.
!                                                              (line 1778)
  * __satfractunshisa:                     Fixed-point fractional library routines.
!                                                              (line 1784)
  * __satfractunshisq:                     Fixed-point fractional library routines.
!                                                              (line 1780)
  * __satfractunshita:                     Fixed-point fractional library routines.
!                                                              (line 1786)
  * __satfractunshiuda:                    Fixed-point fractional library routines.
!                                                              (line 1800)
  * __satfractunshiudq:                    Fixed-point fractional library routines.
!                                                              (line 1794)
  * __satfractunshiuha:                    Fixed-point fractional library routines.
!                                                              (line 1796)
  * __satfractunshiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1790)
  * __satfractunshiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1788)
  * __satfractunshiusa:                    Fixed-point fractional library routines.
!                                                              (line 1798)
  * __satfractunshiusq:                    Fixed-point fractional library routines.
!                                                              (line 1792)
  * __satfractunshiuta:                    Fixed-point fractional library routines.
!                                                              (line 1802)
  * __satfractunsqida:                     Fixed-point fractional library routines.
!                                                              (line 1759)
  * __satfractunsqidq:                     Fixed-point fractional library routines.
!                                                              (line 1755)
  * __satfractunsqiha:                     Fixed-point fractional library routines.
!                                                              (line 1757)
  * __satfractunsqihq:                     Fixed-point fractional library routines.
!                                                              (line 1753)
  * __satfractunsqiqq:                     Fixed-point fractional library routines.
!                                                              (line 1752)
  * __satfractunsqisa:                     Fixed-point fractional library routines.
!                                                              (line 1758)
  * __satfractunsqisq:                     Fixed-point fractional library routines.
!                                                              (line 1754)
  * __satfractunsqita:                     Fixed-point fractional library routines.
!                                                              (line 1760)
  * __satfractunsqiuda:                    Fixed-point fractional library routines.
!                                                              (line 1774)
  * __satfractunsqiudq:                    Fixed-point fractional library routines.
!                                                              (line 1768)
  * __satfractunsqiuha:                    Fixed-point fractional library routines.
!                                                              (line 1770)
  * __satfractunsqiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1764)
  * __satfractunsqiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1762)
  * __satfractunsqiusa:                    Fixed-point fractional library routines.
!                                                              (line 1772)
  * __satfractunsqiusq:                    Fixed-point fractional library routines.
!                                                              (line 1766)
  * __satfractunsqiuta:                    Fixed-point fractional library routines.
!                                                              (line 1776)
  * __satfractunssida:                     Fixed-point fractional library routines.
!                                                              (line 1810)
  * __satfractunssidq:                     Fixed-point fractional library routines.
!                                                              (line 1807)
  * __satfractunssiha:                     Fixed-point fractional library routines.
!                                                              (line 1808)
  * __satfractunssihq:                     Fixed-point fractional library routines.
!                                                              (line 1805)
  * __satfractunssiqq:                     Fixed-point fractional library routines.
!                                                              (line 1804)
  * __satfractunssisa:                     Fixed-point fractional library routines.
!                                                              (line 1809)
  * __satfractunssisq:                     Fixed-point fractional library routines.
!                                                              (line 1806)
  * __satfractunssita:                     Fixed-point fractional library routines.
!                                                              (line 1811)
  * __satfractunssiuda:                    Fixed-point fractional library routines.
!                                                              (line 1822)
  * __satfractunssiudq:                    Fixed-point fractional library routines.
!                                                              (line 1817)
  * __satfractunssiuha:                    Fixed-point fractional library routines.
!                                                              (line 1819)
  * __satfractunssiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1814)
  * __satfractunssiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1812)
  * __satfractunssiusa:                    Fixed-point fractional library routines.
!                                                              (line 1821)
  * __satfractunssiusq:                    Fixed-point fractional library routines.
!                                                              (line 1815)
  * __satfractunssiuta:                    Fixed-point fractional library routines.
!                                                              (line 1824)
  * __satfractunstida:                     Fixed-point fractional library routines.
!                                                              (line 1862)
  * __satfractunstidq:                     Fixed-point fractional library routines.
!                                                              (line 1857)
  * __satfractunstiha:                     Fixed-point fractional library routines.
!                                                              (line 1859)
  * __satfractunstihq:                     Fixed-point fractional library routines.
!                                                              (line 1854)
  * __satfractunstiqq:                     Fixed-point fractional library routines.
!                                                              (line 1852)
  * __satfractunstisa:                     Fixed-point fractional library routines.
!                                                              (line 1861)
  * __satfractunstisq:                     Fixed-point fractional library routines.
!                                                              (line 1855)
  * __satfractunstita:                     Fixed-point fractional library routines.
!                                                              (line 1864)
  * __satfractunstiuda:                    Fixed-point fractional library routines.
!                                                              (line 1878)
  * __satfractunstiudq:                    Fixed-point fractional library routines.
!                                                              (line 1872)
  * __satfractunstiuha:                    Fixed-point fractional library routines.
!                                                              (line 1874)
  * __satfractunstiuhq:                    Fixed-point fractional library routines.
!                                                              (line 1868)
  * __satfractunstiuqq:                    Fixed-point fractional library routines.
!                                                              (line 1866)
  * __satfractunstiusa:                    Fixed-point fractional library routines.
!                                                              (line 1876)
  * __satfractunstiusq:                    Fixed-point fractional library routines.
!                                                              (line 1870)
  * __satfractunstiuta:                    Fixed-point fractional library routines.
!                                                              (line 1880)
  * __satfractuqqda:                       Fixed-point fractional library routines.
!                                                              (line 1199)
  * __satfractuqqdq:                       Fixed-point fractional library routines.
!                                                              (line 1194)
  * __satfractuqqha:                       Fixed-point fractional library routines.
!                                                              (line 1196)
  * __satfractuqqhq:                       Fixed-point fractional library routines.
!                                                              (line 1191)
  * __satfractuqqqq:                       Fixed-point fractional library routines.
!                                                              (line 1189)
  * __satfractuqqsa:                       Fixed-point fractional library routines.
!                                                              (line 1198)
  * __satfractuqqsq:                       Fixed-point fractional library routines.
!                                                              (line 1192)
  * __satfractuqqta:                       Fixed-point fractional library routines.
!                                                              (line 1201)
  * __satfractuqquda:                      Fixed-point fractional library routines.
!                                                              (line 1213)
  * __satfractuqqudq2:                     Fixed-point fractional library routines.
!                                                              (line 1207)
  * __satfractuqquha:                      Fixed-point fractional library routines.
!                                                              (line 1209)
  * __satfractuqquhq2:                     Fixed-point fractional library routines.
!                                                              (line 1203)
  * __satfractuqqusa:                      Fixed-point fractional library routines.
!                                                              (line 1211)
  * __satfractuqqusq2:                     Fixed-point fractional library routines.
!                                                              (line 1205)
  * __satfractuqquta:                      Fixed-point fractional library routines.
!                                                              (line 1215)
  * __satfractusada:                       Fixed-point fractional library routines.
!                                                              (line 1326)
  * __satfractusadq:                       Fixed-point fractional library routines.
!                                                              (line 1323)
  * __satfractusaha:                       Fixed-point fractional library routines.
!                                                              (line 1324)
  * __satfractusahq:                       Fixed-point fractional library routines.
!                                                              (line 1321)
  * __satfractusaqq:                       Fixed-point fractional library routines.
!                                                              (line 1320)
  * __satfractusasa:                       Fixed-point fractional library routines.
!                                                              (line 1325)
  * __satfractusasq:                       Fixed-point fractional library routines.
!                                                              (line 1322)
  * __satfractusata:                       Fixed-point fractional library routines.
!                                                              (line 1327)
  * __satfractusauda2:                     Fixed-point fractional library routines.
!                                                              (line 1337)
  * __satfractusaudq:                      Fixed-point fractional library routines.
!                                                              (line 1333)
  * __satfractusauha2:                     Fixed-point fractional library routines.
!                                                              (line 1335)
  * __satfractusauhq:                      Fixed-point fractional library routines.
!                                                              (line 1330)
  * __satfractusauqq:                      Fixed-point fractional library routines.
!                                                              (line 1328)
  * __satfractusausq:                      Fixed-point fractional library routines.
!                                                              (line 1331)
  * __satfractusauta2:                     Fixed-point fractional library routines.
!                                                              (line 1339)
  * __satfractusqda:                       Fixed-point fractional library routines.
!                                                              (line 1247)
  * __satfractusqdq:                       Fixed-point fractional library routines.
!                                                              (line 1242)
  * __satfractusqha:                       Fixed-point fractional library routines.
!                                                              (line 1244)
  * __satfractusqhq:                       Fixed-point fractional library routines.
!                                                              (line 1240)
  * __satfractusqqq:                       Fixed-point fractional library routines.
!                                                              (line 1238)
  * __satfractusqsa:                       Fixed-point fractional library routines.
!                                                              (line 1246)
  * __satfractusqsq:                       Fixed-point fractional library routines.
!                                                              (line 1241)
  * __satfractusqta:                       Fixed-point fractional library routines.
!                                                              (line 1248)
  * __satfractusquda:                      Fixed-point fractional library routines.
!                                                              (line 1260)
  * __satfractusqudq2:                     Fixed-point fractional library routines.
!                                                              (line 1254)
  * __satfractusquha:                      Fixed-point fractional library routines.
!                                                              (line 1256)
  * __satfractusquhq2:                     Fixed-point fractional library routines.
!                                                              (line 1252)
  * __satfractusquqq2:                     Fixed-point fractional library routines.
!                                                              (line 1250)
  * __satfractusqusa:                      Fixed-point fractional library routines.
!                                                              (line 1258)
  * __satfractusquta:                      Fixed-point fractional library routines.
!                                                              (line 1262)
  * __satfractutada:                       Fixed-point fractional library routines.
!                                                              (line 1377)
  * __satfractutadq:                       Fixed-point fractional library routines.
!                                                              (line 1372)
  * __satfractutaha:                       Fixed-point fractional library routines.
!                                                              (line 1374)
  * __satfractutahq:                       Fixed-point fractional library routines.
!                                                              (line 1369)
  * __satfractutaqq:                       Fixed-point fractional library routines.
!                                                              (line 1367)
  * __satfractutasa:                       Fixed-point fractional library routines.
!                                                              (line 1376)
  * __satfractutasq:                       Fixed-point fractional library routines.
!                                                              (line 1370)
  * __satfractutata:                       Fixed-point fractional library routines.
!                                                              (line 1379)
  * __satfractutauda2:                     Fixed-point fractional library routines.
!                                                              (line 1393)
  * __satfractutaudq:                      Fixed-point fractional library routines.
!                                                              (line 1387)
  * __satfractutauha2:                     Fixed-point fractional library routines.
!                                                              (line 1389)
  * __satfractutauhq:                      Fixed-point fractional library routines.
!                                                              (line 1383)
  * __satfractutauqq:                      Fixed-point fractional library routines.
!                                                              (line 1381)
  * __satfractutausa2:                     Fixed-point fractional library routines.
!                                                              (line 1391)
  * __satfractutausq:                      Fixed-point fractional library routines.
!                                                              (line 1385)
  * __splitstack_find:                     Miscellaneous routines.
                                                               (line   15)
  * __ssaddda3:                            Fixed-point fractional library routines.
!                                                              (line   66)
  * __ssadddq3:                            Fixed-point fractional library routines.
!                                                              (line   61)
  * __ssaddha3:                            Fixed-point fractional library routines.
!                                                              (line   63)
  * __ssaddhq3:                            Fixed-point fractional library routines.
!                                                              (line   59)
  * __ssaddqq3:                            Fixed-point fractional library routines.
!                                                              (line   57)
  * __ssaddsa3:                            Fixed-point fractional library routines.
!                                                              (line   65)
  * __ssaddsq3:                            Fixed-point fractional library routines.
!                                                              (line   60)
  * __ssaddta3:                            Fixed-point fractional library routines.
!                                                              (line   67)
  * __ssashlda3:                           Fixed-point fractional library routines.
!                                                              (line  401)
  * __ssashldq3:                           Fixed-point fractional library routines.
!                                                              (line  397)
  * __ssashlha3:                           Fixed-point fractional library routines.
!                                                              (line  399)
  * __ssashlhq3:                           Fixed-point fractional library routines.
!                                                              (line  395)
  * __ssashlsa3:                           Fixed-point fractional library routines.
!                                                              (line  400)
  * __ssashlsq3:                           Fixed-point fractional library routines.
!                                                              (line  396)
  * __ssashlta3:                           Fixed-point fractional library routines.
!                                                              (line  402)
  * __ssdivda3:                            Fixed-point fractional library routines.
!                                                              (line  260)
  * __ssdivdq3:                            Fixed-point fractional library routines.
!                                                              (line  255)
  * __ssdivha3:                            Fixed-point fractional library routines.
!                                                              (line  257)
  * __ssdivhq3:                            Fixed-point fractional library routines.
!                                                              (line  253)
  * __ssdivqq3:                            Fixed-point fractional library routines.
!                                                              (line  251)
  * __ssdivsa3:                            Fixed-point fractional library routines.
!                                                              (line  259)
  * __ssdivsq3:                            Fixed-point fractional library routines.
!                                                              (line  254)
  * __ssdivta3:                            Fixed-point fractional library routines.
!                                                              (line  261)
  * __ssmulda3:                            Fixed-point fractional library routines.
!                                                              (line  192)
  * __ssmuldq3:                            Fixed-point fractional library routines.
!                                                              (line  187)
  * __ssmulha3:                            Fixed-point fractional library routines.
!                                                              (line  189)
  * __ssmulhq3:                            Fixed-point fractional library routines.
!                                                              (line  185)
  * __ssmulqq3:                            Fixed-point fractional library routines.
!                                                              (line  183)
  * __ssmulsa3:                            Fixed-point fractional library routines.
!                                                              (line  191)
  * __ssmulsq3:                            Fixed-point fractional library routines.
!                                                              (line  186)
  * __ssmulta3:                            Fixed-point fractional library routines.
!                                                              (line  193)
  * __ssnegda2:                            Fixed-point fractional library routines.
!                                                              (line  315)
  * __ssnegdq2:                            Fixed-point fractional library routines.
!                                                              (line  312)
  * __ssnegha2:                            Fixed-point fractional library routines.
!                                                              (line  313)
  * __ssneghq2:                            Fixed-point fractional library routines.
!                                                              (line  310)
  * __ssnegqq2:                            Fixed-point fractional library routines.
!                                                              (line  309)
  * __ssnegsa2:                            Fixed-point fractional library routines.
!                                                              (line  314)
  * __ssnegsq2:                            Fixed-point fractional library routines.
!                                                              (line  311)
  * __ssnegta2:                            Fixed-point fractional library routines.
!                                                              (line  316)
  * __sssubda3:                            Fixed-point fractional library routines.
!                                                              (line  128)
  * __sssubdq3:                            Fixed-point fractional library routines.
!                                                              (line  123)
  * __sssubha3:                            Fixed-point fractional library routines.
!                                                              (line  125)
  * __sssubhq3:                            Fixed-point fractional library routines.
!                                                              (line  121)
  * __sssubqq3:                            Fixed-point fractional library routines.
!                                                              (line  119)
  * __sssubsa3:                            Fixed-point fractional library routines.
!                                                              (line  127)
  * __sssubsq3:                            Fixed-point fractional library routines.
!                                                              (line  122)
  * __sssubta3:                            Fixed-point fractional library routines.
!                                                              (line  129)
  * __subda3:                              Fixed-point fractional library routines.
!                                                              (line  106)
  * __subdf3:                              Soft float library routines.
                                                               (line   30)
  * __subdq3:                              Fixed-point fractional library routines.
!                                                              (line   93)
  * __subha3:                              Fixed-point fractional library routines.
!                                                              (line  103)
  * __subhq3:                              Fixed-point fractional library routines.
!                                                              (line   91)
  * __subqq3:                              Fixed-point fractional library routines.
!                                                              (line   89)
  * __subsa3:                              Fixed-point fractional library routines.
!                                                              (line  105)
  * __subsf3:                              Soft float library routines.
                                                               (line   29)
  * __subsq3:                              Fixed-point fractional library routines.
!                                                              (line   92)
  * __subta3:                              Fixed-point fractional library routines.
!                                                              (line  107)
  * __subtf3:                              Soft float library routines.
                                                               (line   31)
  * __subuda3:                             Fixed-point fractional library routines.
!                                                              (line  113)
  * __subudq3:                             Fixed-point fractional library routines.
!                                                              (line  101)
  * __subuha3:                             Fixed-point fractional library routines.
!                                                              (line  109)
  * __subuhq3:                             Fixed-point fractional library routines.
!                                                              (line   97)
  * __subuqq3:                             Fixed-point fractional library routines.
!                                                              (line   95)
  * __subusa3:                             Fixed-point fractional library routines.
!                                                              (line  111)
  * __subusq3:                             Fixed-point fractional library routines.
!                                                              (line   99)
  * __subuta3:                             Fixed-point fractional library routines.
!                                                              (line  115)
  * __subvdi3:                             Integer library routines.
                                                               (line  122)
  * __subvsi3:                             Integer library routines.
*************** Concept Index
*** 55124,55144 ****
  * __udivti3:                             Integer library routines.
                                                               (line   54)
  * __udivuda3:                            Fixed-point fractional library routines.
!                                                              (line  252)
  * __udivudq3:                            Fixed-point fractional library routines.
!                                                              (line  246)
  * __udivuha3:                            Fixed-point fractional library routines.
!                                                              (line  248)
  * __udivuhq3:                            Fixed-point fractional library routines.
!                                                              (line  242)
  * __udivuqq3:                            Fixed-point fractional library routines.
!                                                              (line  240)
  * __udivusa3:                            Fixed-point fractional library routines.
!                                                              (line  250)
  * __udivusq3:                            Fixed-point fractional library routines.
!                                                              (line  244)
  * __udivuta3:                            Fixed-point fractional library routines.
!                                                              (line  254)
  * __umoddi3:                             Integer library routines.
                                                               (line   69)
  * __umodsi3:                             Integer library routines.
--- 55057,55077 ----
  * __udivti3:                             Integer library routines.
                                                               (line   54)
  * __udivuda3:                            Fixed-point fractional library routines.
!                                                              (line  244)
  * __udivudq3:                            Fixed-point fractional library routines.
!                                                              (line  238)
  * __udivuha3:                            Fixed-point fractional library routines.
!                                                              (line  240)
  * __udivuhq3:                            Fixed-point fractional library routines.
!                                                              (line  234)
  * __udivuqq3:                            Fixed-point fractional library routines.
!                                                              (line  232)
  * __udivusa3:                            Fixed-point fractional library routines.
!                                                              (line  242)
  * __udivusq3:                            Fixed-point fractional library routines.
!                                                              (line  236)
  * __udivuta3:                            Fixed-point fractional library routines.
!                                                              (line  246)
  * __umoddi3:                             Integer library routines.
                                                               (line   69)
  * __umodsi3:                             Integer library routines.
*************** Concept Index
*** 55146,55269 ****
  * __umodti3:                             Integer library routines.
                                                               (line   71)
  * __unorddf2:                            Soft float library routines.
-                                                              (line  201)
- * __unordsf2:                            Soft float library routines.
                                                               (line  200)
  * __unordtf2:                            Soft float library routines.
!                                                              (line  202)
  * __usadduda3:                           Fixed-point fractional library routines.
!                                                              (line   91)
  * __usaddudq3:                           Fixed-point fractional library routines.
!                                                              (line   85)
  * __usadduha3:                           Fixed-point fractional library routines.
!                                                              (line   87)
  * __usadduhq3:                           Fixed-point fractional library routines.
!                                                              (line   81)
  * __usadduqq3:                           Fixed-point fractional library routines.
!                                                              (line   79)
  * __usaddusa3:                           Fixed-point fractional library routines.
!                                                              (line   89)
  * __usaddusq3:                           Fixed-point fractional library routines.
!                                                              (line   83)
  * __usadduta3:                           Fixed-point fractional library routines.
!                                                              (line   93)
  * __usashluda3:                          Fixed-point fractional library routines.
!                                                              (line  427)
  * __usashludq3:                          Fixed-point fractional library routines.
!                                                              (line  421)
  * __usashluha3:                          Fixed-point fractional library routines.
!                                                              (line  423)
  * __usashluhq3:                          Fixed-point fractional library routines.
!                                                              (line  417)
  * __usashluqq3:                          Fixed-point fractional library routines.
!                                                              (line  415)
  * __usashlusa3:                          Fixed-point fractional library routines.
!                                                              (line  425)
  * __usashlusq3:                          Fixed-point fractional library routines.
!                                                              (line  419)
  * __usashluta3:                          Fixed-point fractional library routines.
!                                                              (line  429)
  * __usdivuda3:                           Fixed-point fractional library routines.
!                                                              (line  286)
  * __usdivudq3:                           Fixed-point fractional library routines.
!                                                              (line  280)
  * __usdivuha3:                           Fixed-point fractional library routines.
!                                                              (line  282)
  * __usdivuhq3:                           Fixed-point fractional library routines.
!                                                              (line  276)
  * __usdivuqq3:                           Fixed-point fractional library routines.
!                                                              (line  274)
  * __usdivusa3:                           Fixed-point fractional library routines.
!                                                              (line  284)
  * __usdivusq3:                           Fixed-point fractional library routines.
!                                                              (line  278)
  * __usdivuta3:                           Fixed-point fractional library routines.
!                                                              (line  288)
  * __usmuluda3:                           Fixed-point fractional library routines.
!                                                              (line  218)
  * __usmuludq3:                           Fixed-point fractional library routines.
!                                                              (line  212)
  * __usmuluha3:                           Fixed-point fractional library routines.
!                                                              (line  214)
  * __usmuluhq3:                           Fixed-point fractional library routines.
!                                                              (line  208)
  * __usmuluqq3:                           Fixed-point fractional library routines.
!                                                              (line  206)
  * __usmulusa3:                           Fixed-point fractional library routines.
!                                                              (line  216)
  * __usmulusq3:                           Fixed-point fractional library routines.
!                                                              (line  210)
  * __usmuluta3:                           Fixed-point fractional library routines.
!                                                              (line  220)
  * __usneguda2:                           Fixed-point fractional library routines.
!                                                              (line  337)
  * __usnegudq2:                           Fixed-point fractional library routines.
!                                                              (line  332)
  * __usneguha2:                           Fixed-point fractional library routines.
!                                                              (line  334)
  * __usneguhq2:                           Fixed-point fractional library routines.
!                                                              (line  329)
  * __usneguqq2:                           Fixed-point fractional library routines.
!                                                              (line  327)
  * __usnegusa2:                           Fixed-point fractional library routines.
!                                                              (line  336)
  * __usnegusq2:                           Fixed-point fractional library routines.
!                                                              (line  330)
  * __usneguta2:                           Fixed-point fractional library routines.
!                                                              (line  339)
  * __ussubuda3:                           Fixed-point fractional library routines.
!                                                              (line  154)
  * __ussubudq3:                           Fixed-point fractional library routines.
!                                                              (line  148)
  * __ussubuha3:                           Fixed-point fractional library routines.
!                                                              (line  150)
  * __ussubuhq3:                           Fixed-point fractional library routines.
!                                                              (line  144)
  * __ussubuqq3:                           Fixed-point fractional library routines.
!                                                              (line  142)
  * __ussubusa3:                           Fixed-point fractional library routines.
!                                                              (line  152)
  * __ussubusq3:                           Fixed-point fractional library routines.
!                                                              (line  146)
  * __ussubuta3:                           Fixed-point fractional library routines.
!                                                              (line  156)
  * abort:                                 Portability.        (line   20)
  * abs:                                   Arithmetic.         (line  206)
  * abs and attributes:                    Expressions.        (line   83)
  * absence_set:                           Processor pipeline description.
                                                               (line  223)
  * absM2 instruction pattern:             Standard Names.     (line 1199)
  * absolute value:                        Arithmetic.         (line  206)
  * ABSU_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
- * ABS_EXPR:                              Unary and Binary Expressions.
-                                                              (line    6)
  * access to operands:                    Accessors.          (line    6)
  * access to special operands:            Special Accessors.  (line    6)
  * accessors:                             Accessors.          (line    6)
  * ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   51)
  * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  140)
- * ACCUM_TYPE_SIZE:                       Type Layout.        (line   87)
  * acosM2 instruction pattern:            Standard Names.     (line 1286)
  * ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   25)
  * Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
--- 55079,55270 ----
  * __umodti3:                             Integer library routines.
                                                               (line   71)
  * __unorddf2:                            Soft float library routines.
                                                               (line  200)
+ * __unordsf2:                            Soft float library routines.
+                                                              (line  199)
  * __unordtf2:                            Soft float library routines.
!                                                              (line  201)
  * __usadduda3:                           Fixed-point fractional library routines.
!                                                              (line   83)
  * __usaddudq3:                           Fixed-point fractional library routines.
!                                                              (line   77)
  * __usadduha3:                           Fixed-point fractional library routines.
!                                                              (line   79)
  * __usadduhq3:                           Fixed-point fractional library routines.
!                                                              (line   73)
  * __usadduqq3:                           Fixed-point fractional library routines.
!                                                              (line   71)
  * __usaddusa3:                           Fixed-point fractional library routines.
!                                                              (line   81)
  * __usaddusq3:                           Fixed-point fractional library routines.
!                                                              (line   75)
  * __usadduta3:                           Fixed-point fractional library routines.
!                                                              (line   85)
  * __usashluda3:                          Fixed-point fractional library routines.
!                                                              (line  419)
  * __usashludq3:                          Fixed-point fractional library routines.
!                                                              (line  413)
  * __usashluha3:                          Fixed-point fractional library routines.
!                                                              (line  415)
  * __usashluhq3:                          Fixed-point fractional library routines.
!                                                              (line  409)
  * __usashluqq3:                          Fixed-point fractional library routines.
!                                                              (line  407)
  * __usashlusa3:                          Fixed-point fractional library routines.
!                                                              (line  417)
  * __usashlusq3:                          Fixed-point fractional library routines.
!                                                              (line  411)
  * __usashluta3:                          Fixed-point fractional library routines.
!                                                              (line  421)
  * __usdivuda3:                           Fixed-point fractional library routines.
!                                                              (line  278)
  * __usdivudq3:                           Fixed-point fractional library routines.
!                                                              (line  272)
  * __usdivuha3:                           Fixed-point fractional library routines.
!                                                              (line  274)
  * __usdivuhq3:                           Fixed-point fractional library routines.
!                                                              (line  268)
  * __usdivuqq3:                           Fixed-point fractional library routines.
!                                                              (line  266)
  * __usdivusa3:                           Fixed-point fractional library routines.
!                                                              (line  276)
  * __usdivusq3:                           Fixed-point fractional library routines.
!                                                              (line  270)
  * __usdivuta3:                           Fixed-point fractional library routines.
!                                                              (line  280)
  * __usmuluda3:                           Fixed-point fractional library routines.
!                                                              (line  210)
  * __usmuludq3:                           Fixed-point fractional library routines.
!                                                              (line  204)
  * __usmuluha3:                           Fixed-point fractional library routines.
!                                                              (line  206)
  * __usmuluhq3:                           Fixed-point fractional library routines.
!                                                              (line  200)
  * __usmuluqq3:                           Fixed-point fractional library routines.
!                                                              (line  198)
  * __usmulusa3:                           Fixed-point fractional library routines.
!                                                              (line  208)
  * __usmulusq3:                           Fixed-point fractional library routines.
!                                                              (line  202)
  * __usmuluta3:                           Fixed-point fractional library routines.
!                                                              (line  212)
  * __usneguda2:                           Fixed-point fractional library routines.
!                                                              (line  329)
  * __usnegudq2:                           Fixed-point fractional library routines.
!                                                              (line  324)
  * __usneguha2:                           Fixed-point fractional library routines.
!                                                              (line  326)
  * __usneguhq2:                           Fixed-point fractional library routines.
!                                                              (line  321)
  * __usneguqq2:                           Fixed-point fractional library routines.
!                                                              (line  319)
  * __usnegusa2:                           Fixed-point fractional library routines.
!                                                              (line  328)
  * __usnegusq2:                           Fixed-point fractional library routines.
!                                                              (line  322)
  * __usneguta2:                           Fixed-point fractional library routines.
!                                                              (line  331)
  * __ussubuda3:                           Fixed-point fractional library routines.
!                                                              (line  146)
  * __ussubudq3:                           Fixed-point fractional library routines.
!                                                              (line  140)
  * __ussubuha3:                           Fixed-point fractional library routines.
!                                                              (line  142)
  * __ussubuhq3:                           Fixed-point fractional library routines.
!                                                              (line  136)
  * __ussubuqq3:                           Fixed-point fractional library routines.
!                                                              (line  134)
  * __ussubusa3:                           Fixed-point fractional library routines.
!                                                              (line  144)
  * __ussubusq3:                           Fixed-point fractional library routines.
!                                                              (line  138)
  * __ussubuta3:                           Fixed-point fractional library routines.
!                                                              (line  148)
! * -fsection-anchors:                     Special Accessors.  (line  117)
! * -fsection-anchors <1>:                 Anchored Addresses. (line    6)
! * ! in constraint:                       Multi-Alternative.  (line   48)
! * ? in constraint:                       Multi-Alternative.  (line   42)
! * "real" instructions, RTL SSA:          RTL SSA Basic Blocks.
!                                                              (line   11)
! * (gimple_stmt_iterator:                 GIMPLE API.         (line   31)
! * (nil):                                 RTL Objects.        (line   73)
! * @ in instruction pattern names:        Parameterized Names.
!                                                              (line    6)
! * * in constraint:                       Modifiers.          (line   83)
! * * in template:                         Output Statement.   (line   29)
! * *gimple_build_asm_vec:                 GIMPLE_ASM.         (line    6)
! * *gimple_build_assign:                  GIMPLE_ASSIGN.      (line    6)
! * *gimple_build_assign <1>:              GIMPLE_ASSIGN.      (line   18)
! * *gimple_build_assign <2>:              GIMPLE_ASSIGN.      (line   29)
! * *gimple_build_assign <3>:              GIMPLE_ASSIGN.      (line   35)
! * *gimple_build_bind:                    GIMPLE_BIND.        (line    6)
! * *gimple_build_call:                    GIMPLE_CALL.        (line    6)
! * *gimple_build_call_from_tree:          GIMPLE_CALL.        (line   15)
! * *gimple_build_call_vec:                GIMPLE_CALL.        (line   25)
! * *gimple_build_catch:                   GIMPLE_CATCH.       (line    6)
! * *gimple_build_cond:                    GIMPLE_COND.        (line    6)
! * *gimple_build_cond_from_tree:          GIMPLE_COND.        (line   14)
! * *gimple_build_debug_bind:              GIMPLE_DEBUG.       (line    6)
! * *gimple_build_eh_filter:               GIMPLE_EH_FILTER.   (line    6)
! * *gimple_build_goto:                    GIMPLE_GOTO.        (line    6)
! * *gimple_build_label:                   GIMPLE_LABEL.       (line    6)
! * *gimple_build_omp_atomic_load:         GIMPLE_OMP_ATOMIC_LOAD.
!                                                              (line    6)
! * *gimple_build_omp_atomic_store:        GIMPLE_OMP_ATOMIC_STORE.
!                                                              (line    6)
! * *gimple_build_omp_continue:            GIMPLE_OMP_CONTINUE.
!                                                              (line    6)
! * *gimple_build_omp_critical:            GIMPLE_OMP_CRITICAL.
!                                                              (line    6)
! * *gimple_build_omp_for:                 GIMPLE_OMP_FOR.     (line    6)
! * *gimple_build_omp_parallel:            GIMPLE_OMP_PARALLEL.
!                                                              (line    6)
! * *gimple_build_omp_sections:            GIMPLE_OMP_SECTIONS.
!                                                              (line    6)
! * *gimple_build_omp_single:              GIMPLE_OMP_SINGLE.  (line    6)
! * *gimple_build_resx:                    GIMPLE_RESX.        (line    6)
! * *gimple_build_return:                  GIMPLE_RETURN.      (line    6)
! * *gimple_build_switch:                  GIMPLE_SWITCH.      (line    6)
! * *gimple_build_try:                     GIMPLE_TRY.         (line    6)
! * /c in RTL dump:                        Flags.              (line  230)
! * /f in RTL dump:                        Flags.              (line  238)
! * /i in RTL dump:                        Flags.              (line  283)
! * /j in RTL dump:                        Flags.              (line  295)
! * /s in RTL dump:                        Flags.              (line  254)
! * /u in RTL dump:                        Flags.              (line  307)
! * /v in RTL dump:                        Flags.              (line  339)
! * \:                                     Output Template.    (line   46)
! * & in constraint:                       Modifiers.          (line   25)
! * # in constraint:                       Modifiers.          (line   78)
! * # in template:                         Output Template.    (line   66)
! * #pragma:                               Misc.               (line  422)
! * % in constraint:                       Modifiers.          (line   52)
! * % in GTY option:                       GTY Options.        (line   18)
! * % in template:                         Output Template.    (line    6)
! * ^ in constraint:                       Multi-Alternative.  (line   53)
! * + in constraint:                       Modifiers.          (line   12)
! * < in constraint:                       Simple Constraints. (line   47)
! * = in constraint:                       Modifiers.          (line    8)
! * > in constraint:                       Simple Constraints. (line   59)
! * $ in constraint:                       Multi-Alternative.  (line   57)
! * 0 in constraint:                       Simple Constraints. (line  128)
  * abort:                                 Portability.        (line   20)
  * abs:                                   Arithmetic.         (line  206)
  * abs and attributes:                    Expressions.        (line   83)
+ * ABS_EXPR:                              Unary and Binary Expressions.
+                                                              (line    6)
  * absence_set:                           Processor pipeline description.
                                                               (line  223)
  * absM2 instruction pattern:             Standard Names.     (line 1199)
  * absolute value:                        Arithmetic.         (line  206)
  * ABSU_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * access to operands:                    Accessors.          (line    6)
  * access to special operands:            Special Accessors.  (line    6)
  * accessors:                             Accessors.          (line    6)
+ * ACCUM_TYPE_SIZE:                       Type Layout.        (line   87)
  * ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   51)
  * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  140)
  * acosM2 instruction pattern:            Standard Names.     (line 1286)
  * ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   25)
  * Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
*************** Concept Index
*** 55272,55295 ****
  * addM3 instruction pattern:             Standard Names.     (line  623)
  * addMODEcc instruction pattern:         Standard Names.     (line 2108)
  * addptrM3 instruction pattern:          Standard Names.     (line  670)
  * address constraints:                   Simple Constraints. (line  162)
- * addressing modes:                      Addressing Modes.   (line    6)
  * address_operand:                       Machine-Independent Predicates.
                                                               (line   62)
  * address_operand <1>:                   Simple Constraints. (line  166)
! * addr_diff_vec:                         Side Effects.       (line  305)
! * addr_diff_vec, length of:              Insn Lengths.       (line   26)
! * ADDR_EXPR:                             Storage References. (line    6)
! * addr_vec:                              Side Effects.       (line  300)
! * addr_vec, length of:                   Insn Lengths.       (line   26)
  * addvM4 instruction pattern:            Standard Names.     (line  639)
  * ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  231)
  * ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   41)
  * ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   22)
  * aggregates as return values:           Aggregate Return.   (line    6)
  * alias:                                 Alias analysis.     (line    6)
- * allocate_stack instruction pattern:    Standard Names.     (line 2613)
  * ALL_REGS:                              Register Classes.   (line   17)
  * alternate entry points:                Insns.              (line  146)
  * analyzer:                              Static Analyzer.    (line    6)
  * analyzer, debugging:                   Debugging the Analyzer.
--- 55273,55296 ----
  * addM3 instruction pattern:             Standard Names.     (line  623)
  * addMODEcc instruction pattern:         Standard Names.     (line 2108)
  * addptrM3 instruction pattern:          Standard Names.     (line  670)
+ * addr_diff_vec:                         Side Effects.       (line  304)
+ * addr_diff_vec, length of:              Insn Lengths.       (line   26)
+ * ADDR_EXPR:                             Storage References. (line    6)
+ * addr_vec:                              Side Effects.       (line  299)
+ * addr_vec, length of:                   Insn Lengths.       (line   26)
  * address constraints:                   Simple Constraints. (line  162)
  * address_operand:                       Machine-Independent Predicates.
                                                               (line   62)
  * address_operand <1>:                   Simple Constraints. (line  166)
! * addressing modes:                      Addressing Modes.   (line    6)
  * addvM4 instruction pattern:            Standard Names.     (line  639)
  * ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  231)
  * ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   41)
  * ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   22)
  * aggregates as return values:           Aggregate Return.   (line    6)
  * alias:                                 Alias analysis.     (line    6)
  * ALL_REGS:                              Register Classes.   (line   17)
+ * allocate_stack instruction pattern:    Standard Names.     (line 2613)
  * alternate entry points:                Insns.              (line  146)
  * analyzer:                              Static Analyzer.    (line    6)
  * analyzer, debugging:                   Debugging the Analyzer.
*************** Concept Index
*** 55305,55329 ****
                                                               (line    6)
  * annotations:                           Annotations.        (line    6)
  * APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
- * ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   30)
- * argument passing:                      Interface.          (line   36)
- * arguments in registers:                Register Arguments. (line    6)
- * arguments on stack:                    Stack Arguments.    (line    6)
  * ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  213)
  * ARG_POINTER_REGNUM:                    Frame Registers.    (line   40)
  * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
  * arg_pointer_rtx:                       Frame Registers.    (line  104)
  * arithmetic library:                    Soft float library routines.
                                                               (line    6)
  * arithmetic shift:                      Arithmetic.         (line  179)
  * arithmetic shift with signed saturation: Arithmetic.       (line  179)
  * arithmetic shift with unsigned saturation: Arithmetic.     (line  179)
- * arithmetic, in RTL:                    Arithmetic.         (line    6)
  * ARITHMETIC_TYPE_P:                     Types for C++.      (line   59)
  * array:                                 Types.              (line    6)
  * ARRAY_RANGE_REF:                       Storage References. (line    6)
  * ARRAY_REF:                             Storage References. (line    6)
  * ARRAY_TYPE:                            Types.              (line    6)
  * ashift:                                Arithmetic.         (line  179)
  * ashift and attributes:                 Expressions.        (line   83)
  * ashiftrt:                              Arithmetic.         (line  196)
--- 55306,55331 ----
                                                               (line    6)
  * annotations:                           Annotations.        (line    6)
  * APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
  * ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  213)
  * ARG_POINTER_REGNUM:                    Frame Registers.    (line   40)
  * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
  * arg_pointer_rtx:                       Frame Registers.    (line  104)
+ * ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   30)
+ * argument passing:                      Interface.          (line   36)
+ * arguments in registers:                Register Arguments. (line    6)
+ * arguments on stack:                    Stack Arguments.    (line    6)
  * arithmetic library:                    Soft float library routines.
                                                               (line    6)
  * arithmetic shift:                      Arithmetic.         (line  179)
  * arithmetic shift with signed saturation: Arithmetic.       (line  179)
  * arithmetic shift with unsigned saturation: Arithmetic.     (line  179)
  * ARITHMETIC_TYPE_P:                     Types for C++.      (line   59)
+ * arithmetic, in RTL:                    Arithmetic.         (line    6)
  * array:                                 Types.              (line    6)
  * ARRAY_RANGE_REF:                       Storage References. (line    6)
  * ARRAY_REF:                             Storage References. (line    6)
  * ARRAY_TYPE:                            Types.              (line    6)
+ * AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   88)
  * ashift:                                Arithmetic.         (line  179)
  * ashift and attributes:                 Expressions.        (line   83)
  * ashiftrt:                              Arithmetic.         (line  196)
*************** Concept Index
*** 55346,55368 ****
  * asm_fprintf:                           Instruction Output. (line  150)
  * ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  160)
  * ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  410)
! * asm_input:                             Side Effects.       (line  287)
  * asm_input and /v:                      Flags.              (line   65)
  * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   91)
- * asm_noperands:                         Insns.              (line  327)
  * ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   59)
  * asm_operands and /v:                   Flags.              (line   65)
  * asm_operands, RTL sharing:             Sharing.            (line   46)
  * asm_operands, usage:                   Assembler.          (line    6)
  * ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    8)
  * ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   25)
  * ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   66)
  * ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   45)
  * ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   29)
  * ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   36)
  * ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   89)
  * ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   82)
- * ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   71)
  * ASM_OUTPUT_ASCII:                      Data Output.        (line   60)
  * ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   50)
  * ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   37)
--- 55348,55370 ----
  * asm_fprintf:                           Instruction Output. (line  150)
  * ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  160)
  * ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  410)
! * asm_input:                             Side Effects.       (line  286)
  * asm_input and /v:                      Flags.              (line   65)
  * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   91)
  * ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   59)
+ * asm_noperands:                         Insns.              (line  327)
  * asm_operands and /v:                   Flags.              (line   65)
  * asm_operands, RTL sharing:             Sharing.            (line   46)
  * asm_operands, usage:                   Assembler.          (line    6)
  * ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    8)
  * ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   25)
  * ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   66)
+ * ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   71)
  * ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   45)
  * ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   29)
  * ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   36)
  * ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   89)
  * ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   82)
  * ASM_OUTPUT_ASCII:                      Data Output.        (line   60)
  * ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   50)
  * ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   37)
*************** Concept Index
*** 55381,55388 ****
  * ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   16)
  * ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   27)
  * ASM_OUTPUT_LABEL:                      Label Output.       (line    8)
- * ASM_OUTPUT_LABELREF:                   Label Output.       (line  349)
  * ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  371)
  * ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   69)
  * ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   75)
  * ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   51)
--- 55383,55390 ----
  * ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   16)
  * ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   27)
  * ASM_OUTPUT_LABEL:                      Label Output.       (line    8)
  * ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  371)
+ * ASM_OUTPUT_LABELREF:                   Label Output.       (line  349)
  * ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   69)
  * ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   75)
  * ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   51)
*************** Concept Index
*** 55397,55428 ****
  * ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   93)
  * ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  364)
  * ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   98)
- * ASM_OUTPUT_WEAKREF:                    Label Output.       (line  259)
  * ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  473)
  * ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   77)
  * ASM_SPEC:                              Driver.             (line   73)
  * ASM_WEAKEN_DECL:                       Label Output.       (line  251)
  * ASM_WEAKEN_LABEL:                      Label Output.       (line  238)
  * assembler format:                      File Framework.     (line    6)
  * assembler instructions in RTL:         Assembler.          (line    6)
  * ASSEMBLER_DIALECT:                     Instruction Output. (line  172)
- * assemble_name:                         Label Output.       (line    8)
- * assemble_name_raw:                     Label Output.       (line   27)
  * assigning attribute values to insns:   Tagging Insns.      (line    6)
  * ASSUME_EXTENDED_UNWIND_CONTEXT:        Frame Registers.    (line  163)
  * asterisk in template:                  Output Statement.   (line   29)
- * AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   88)
  * atan2M3 instruction pattern:           Standard Names.     (line 1404)
  * atanM2 instruction pattern:            Standard Names.     (line 1292)
! * atomic:                                GTY Options.        (line  241)
! * atomic_addMODE instruction pattern:    Standard Names.     (line 3037)
! * atomic_add_fetchMODE instruction pattern: Standard Names.  (line 3066)
  * atomic_add_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
! * atomic_andMODE instruction pattern:    Standard Names.     (line 3037)
! * atomic_and_fetchMODE instruction pattern: Standard Names.  (line 3066)
  * atomic_and_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
  * atomic_bit_test_and_complementMODE instruction pattern: Standard Names.
                                                               (line 3094)
  * atomic_bit_test_and_resetMODE instruction pattern: Standard Names.
--- 55399,55429 ----
  * ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   93)
  * ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  364)
  * ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   98)
  * ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  473)
+ * ASM_OUTPUT_WEAKREF:                    Label Output.       (line  259)
  * ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   77)
  * ASM_SPEC:                              Driver.             (line   73)
  * ASM_WEAKEN_DECL:                       Label Output.       (line  251)
  * ASM_WEAKEN_LABEL:                      Label Output.       (line  238)
+ * assemble_name:                         Label Output.       (line    8)
+ * assemble_name_raw:                     Label Output.       (line   27)
  * assembler format:                      File Framework.     (line    6)
  * assembler instructions in RTL:         Assembler.          (line    6)
  * ASSEMBLER_DIALECT:                     Instruction Output. (line  172)
  * assigning attribute values to insns:   Tagging Insns.      (line    6)
  * ASSUME_EXTENDED_UNWIND_CONTEXT:        Frame Registers.    (line  163)
  * asterisk in template:                  Output Statement.   (line   29)
  * atan2M3 instruction pattern:           Standard Names.     (line 1404)
  * atanM2 instruction pattern:            Standard Names.     (line 1292)
! * atomic:                                GTY Options.        (line  240)
  * atomic_add_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
! * atomic_add_fetchMODE instruction pattern: Standard Names.  (line 3066)
! * atomic_addMODE instruction pattern:    Standard Names.     (line 3037)
  * atomic_and_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
+ * atomic_and_fetchMODE instruction pattern: Standard Names.  (line 3066)
+ * atomic_andMODE instruction pattern:    Standard Names.     (line 3037)
  * atomic_bit_test_and_complementMODE instruction pattern: Standard Names.
                                                               (line 3094)
  * atomic_bit_test_and_resetMODE instruction pattern: Standard Names.
*************** Concept Index
*** 55439,55471 ****
  * atomic_fetch_subMODE instruction pattern: Standard Names.  (line 3051)
  * atomic_fetch_xorMODE instruction pattern: Standard Names.  (line 3051)
  * atomic_loadMODE instruction pattern:   Standard Names.     (line 3004)
- * atomic_nandMODE instruction pattern:   Standard Names.     (line 3037)
  * atomic_nand_fetchMODE instruction pattern: Standard Names. (line 3066)
! * atomic_orMODE instruction pattern:     Standard Names.     (line 3037)
! * atomic_or_fetchMODE instruction pattern: Standard Names.   (line 3066)
  * atomic_or_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
  * atomic_storeMODE instruction pattern:  Standard Names.     (line 3014)
- * atomic_subMODE instruction pattern:    Standard Names.     (line 3037)
- * atomic_sub_fetchMODE instruction pattern: Standard Names.  (line 3066)
  * atomic_sub_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
  * atomic_test_and_set instruction pattern: Standard Names.   (line 3083)
- * atomic_xorMODE instruction pattern:    Standard Names.     (line 3037)
- * atomic_xor_fetchMODE instruction pattern: Standard Names.  (line 3066)
  * atomic_xor_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
  * attr:                                  Expressions.        (line  163)
  * attr <1>:                              Tagging Insns.      (line   54)
  * attribute expressions:                 Expressions.        (line    6)
  * attribute specifications:              Attr Example.       (line    6)
  * attribute specifications example:      Attr Example.       (line    6)
  * attributes:                            Attributes.         (line    6)
  * attributes, defining:                  Defining Attributes.
                                                               (line    6)
  * attributes, target-specific:           Target Attributes.  (line    6)
- * ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  213)
- * attr_flag:                             Expressions.        (line  138)
  * autoincrement addressing, availability: Portability.       (line   20)
  * autoincrement/decrement addressing:    Simple Constraints. (line   30)
  * automata_option:                       Processor pipeline description.
--- 55440,55472 ----
  * atomic_fetch_subMODE instruction pattern: Standard Names.  (line 3051)
  * atomic_fetch_xorMODE instruction pattern: Standard Names.  (line 3051)
  * atomic_loadMODE instruction pattern:   Standard Names.     (line 3004)
  * atomic_nand_fetchMODE instruction pattern: Standard Names. (line 3066)
! * atomic_nandMODE instruction pattern:   Standard Names.     (line 3037)
  * atomic_or_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
+ * atomic_or_fetchMODE instruction pattern: Standard Names.   (line 3066)
+ * atomic_orMODE instruction pattern:     Standard Names.     (line 3037)
  * atomic_storeMODE instruction pattern:  Standard Names.     (line 3014)
  * atomic_sub_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
+ * atomic_sub_fetchMODE instruction pattern: Standard Names.  (line 3066)
+ * atomic_subMODE instruction pattern:    Standard Names.     (line 3037)
  * atomic_test_and_set instruction pattern: Standard Names.   (line 3083)
  * atomic_xor_fetch_cmp_0MODE instruction pattern: Standard Names.
                                                               (line 3119)
+ * atomic_xor_fetchMODE instruction pattern: Standard Names.  (line 3066)
+ * atomic_xorMODE instruction pattern:    Standard Names.     (line 3037)
  * attr:                                  Expressions.        (line  163)
  * attr <1>:                              Tagging Insns.      (line   54)
+ * attr_flag:                             Expressions.        (line  138)
  * attribute expressions:                 Expressions.        (line    6)
  * attribute specifications:              Attr Example.       (line    6)
  * attribute specifications example:      Attr Example.       (line    6)
+ * ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  213)
  * attributes:                            Attributes.         (line    6)
  * attributes, defining:                  Defining Attributes.
                                                               (line    6)
  * attributes, target-specific:           Target Attributes.  (line    6)
  * autoincrement addressing, availability: Portability.       (line   20)
  * autoincrement/decrement addressing:    Simple Constraints. (line   30)
  * automata_option:                       Processor pipeline description.
*************** Concept Index
*** 55489,55499 ****
  * basic blocks, RTL SSA:                 RTL SSA Basic Blocks.
                                                               (line    6)
  * Basic Statements:                      Basic Statements.   (line    6)
- * basic-block.h:                         Control Flow.       (line    6)
  * basic_block:                           RTL SSA Basic Blocks.
                                                               (line    6)
  * basic_block <1>:                       Basic Blocks.       (line    6)
  * BASIC_BLOCK:                           Basic Blocks.       (line   14)
  * BB_HEAD, BB_END:                       Maintaining the CFG.
                                                               (line   76)
  * bb_seq:                                GIMPLE sequences.   (line   72)
--- 55490,55500 ----
  * basic blocks, RTL SSA:                 RTL SSA Basic Blocks.
                                                               (line    6)
  * Basic Statements:                      Basic Statements.   (line    6)
  * basic_block:                           RTL SSA Basic Blocks.
                                                               (line    6)
  * basic_block <1>:                       Basic Blocks.       (line    6)
  * BASIC_BLOCK:                           Basic Blocks.       (line   14)
+ * basic-block.h:                         Control Flow.       (line    6)
  * BB_HEAD, BB_END:                       Maintaining the CFG.
                                                               (line   76)
  * bb_seq:                                GIMPLE sequences.   (line   72)
*************** Concept Index
*** 55503,55508 ****
--- 55504,55517 ----
  * BIND_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * BINFO_TYPE:                            Classes.            (line    6)
+ * BIT_AND_EXPR:                          Unary and Binary Expressions.
+                                                              (line    6)
+ * BIT_IOR_EXPR:                          Unary and Binary Expressions.
+                                                              (line    6)
+ * BIT_NOT_EXPR:                          Unary and Binary Expressions.
+                                                              (line    6)
+ * BIT_XOR_EXPR:                          Unary and Binary Expressions.
+                                                              (line    6)
  * bit-fields:                            Bit-Fields.         (line    6)
  * BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  451)
  * BITINT_TYPE:                           Types.              (line    6)
*************** Concept Index
*** 55515,55540 ****
  * bitwise exclusive-or:                  Arithmetic.         (line  174)
  * bitwise inclusive-or:                  Arithmetic.         (line  169)
  * bitwise logical-and:                   Arithmetic.         (line  164)
- * BIT_AND_EXPR:                          Unary and Binary Expressions.
-                                                              (line    6)
- * BIT_IOR_EXPR:                          Unary and Binary Expressions.
-                                                              (line    6)
- * BIT_NOT_EXPR:                          Unary and Binary Expressions.
-                                                              (line    6)
- * BIT_XOR_EXPR:                          Unary and Binary Expressions.
-                                                              (line    6)
  * BLKmode:                               Machine Modes.      (line  184)
  * BLKmode, and function return values:   Calls.              (line   23)
- * blockage instruction pattern:          Standard Names.     (line 2813)
- * Blocks:                                Blocks.             (line    6)
  * BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
                                                               (line   28)
  * BLOCK_REG_PADDING:                     Register Arguments. (line  232)
  * BND32mode:                             Machine Modes.      (line  209)
  * BND64mode:                             Machine Modes.      (line  209)
  * bool:                                  Misc.               (line 1001)
- * BOOLEAN_TYPE:                          Types.              (line    6)
  * BOOL_TYPE_SIZE:                        Type Layout.        (line   43)
  * branch prediction:                     Profile information.
                                                               (line   24)
  * BRANCH_COST:                           Costs.              (line  104)
--- 55524,55541 ----
  * bitwise exclusive-or:                  Arithmetic.         (line  174)
  * bitwise inclusive-or:                  Arithmetic.         (line  169)
  * bitwise logical-and:                   Arithmetic.         (line  164)
  * BLKmode:                               Machine Modes.      (line  184)
  * BLKmode, and function return values:   Calls.              (line   23)
  * BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
                                                               (line   28)
  * BLOCK_REG_PADDING:                     Register Arguments. (line  232)
+ * blockage instruction pattern:          Standard Names.     (line 2813)
+ * Blocks:                                Blocks.             (line    6)
  * BND32mode:                             Machine Modes.      (line  209)
  * BND64mode:                             Machine Modes.      (line  209)
  * bool:                                  Misc.               (line 1001)
  * BOOL_TYPE_SIZE:                        Type Layout.        (line   43)
+ * BOOLEAN_TYPE:                          Types.              (line    6)
  * branch prediction:                     Profile information.
                                                               (line   24)
  * BRANCH_COST:                           Costs.              (line  104)
*************** Concept Index
*** 55564,55573 ****
  * builtin_setjmp_receiver instruction pattern: Standard Names.
                                                               (line 2701)
  * builtin_setjmp_setup instruction pattern: Standard Names.  (line 2690)
  * BYTES_BIG_ENDIAN:                      Storage Layout.     (line   23)
  * BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  229)
- * byte_mode:                             Machine Modes.      (line  462)
  * C statements for assembler output:     Output Statement.   (line    6)
  * cache:                                 GTY Options.        (line  164)
  * cadd270M3 instruction pattern:         Standard Names.     (line 1526)
  * cadd90M3 instruction pattern:          Standard Names.     (line 1504)
--- 55565,55577 ----
  * builtin_setjmp_receiver instruction pattern: Standard Names.
                                                               (line 2701)
  * builtin_setjmp_setup instruction pattern: Standard Names.  (line 2690)
+ * byte_mode:                             Machine Modes.      (line  462)
  * BYTES_BIG_ENDIAN:                      Storage Layout.     (line   23)
  * BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  229)
  * C statements for assembler output:     Output Statement.   (line    6)
+ * C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  136)
+ * c_register_pragma:                     Misc.               (line  442)
+ * c_register_pragma_with_expansion:      Misc.               (line  444)
  * cache:                                 GTY Options.        (line  164)
  * cadd270M3 instruction pattern:         Standard Names.     (line 1526)
  * cadd90M3 instruction pattern:          Standard Names.     (line 1504)
*************** Concept Index
*** 55575,55597 ****
  * call <1>:                              Side Effects.       (line   85)
  * call instruction pattern:              Standard Names.     (line 2362)
  * call usage:                            Calls.              (line   10)
- * call, in call_insn:                    Flags.              (line  129)
- * call, in mem:                          Flags.              (line   70)
- * call-clobbered register:               Register Basics.    (line   35)
- * call-clobbered register <1>:           Register Basics.    (line   50)
- * call-clobbered register <2>:           Register Basics.    (line   58)
- * call-clobbered register <3>:           Register Basics.    (line   76)
- * call-saved register:                   Register Basics.    (line   35)
- * call-saved register <1>:               Register Basics.    (line   50)
- * call-saved register <2>:               Register Basics.    (line   58)
- * call-saved register <3>:               Register Basics.    (line   76)
- * call-used register:                    Register Basics.    (line   35)
- * call-used register <1>:                Register Basics.    (line   50)
- * call-used register <2>:                Register Basics.    (line   58)
- * call-used register <3>:                Register Basics.    (line   76)
- * callback:                              GTY Options.        (line  111)
- * calling conventions:                   Stack and Calling.  (line    6)
- * calling functions in RTL:              Calls.              (line    6)
  * CALL_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * call_insn:                             Insns.              (line   95)
--- 55579,55584 ----
*************** Concept Index
*** 55613,55644 ****
  * call_used_regs:                        Register Basics.    (line  102)
  * call_value instruction pattern:        Standard Names.     (line 2386)
  * call_value_pop instruction pattern:    Standard Names.     (line 2394)
  * canadian:                              Configure Terms.    (line    6)
  * canonicalization of instructions:      Insn Canonicalizations.
                                                               (line    6)
  * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
                                                               (line 2545)
- * can_create_pseudo_p:                   Standard Names.     (line   75)
- * can_fallthru:                          Basic Blocks.       (line   67)
  * caret:                                 Multi-Alternative.  (line   53)
  * caret <1>:                             Guidelines for Diagnostics.
                                                               (line  183)
- * casesi instruction pattern:            Standard Names.     (line 2487)
  * CASE_VECTOR_MODE:                      Misc.               (line   26)
  * CASE_VECTOR_PC_RELATIVE:               Misc.               (line   39)
  * CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   30)
  * cbranchMODE4 instruction pattern:      Standard Names.     (line 2351)
- * CC1PLUS_SPEC:                          Driver.             (line   63)
  * CC1_SPEC:                              Driver.             (line   55)
  * CCmode:                                Machine Modes.      (line  178)
  * CCmode <1>:                            MODE_CC Condition Codes.
                                                               (line    6)
  * CDImode:                               Machine Modes.      (line  203)
- * ceilM2 instruction pattern:            Standard Names.     (line 1440)
  * CEIL_DIV_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
  * CEIL_MOD_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
  * CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  245)
  * CFG verification:                      Maintaining the CFG.
                                                               (line  116)
--- 55600,55648 ----
  * call_used_regs:                        Register Basics.    (line  102)
  * call_value instruction pattern:        Standard Names.     (line 2386)
  * call_value_pop instruction pattern:    Standard Names.     (line 2394)
+ * call-clobbered register:               Register Basics.    (line   35)
+ * call-clobbered register <1>:           Register Basics.    (line   50)
+ * call-clobbered register <2>:           Register Basics.    (line   58)
+ * call-clobbered register <3>:           Register Basics.    (line   76)
+ * call-saved register:                   Register Basics.    (line   35)
+ * call-saved register <1>:               Register Basics.    (line   50)
+ * call-saved register <2>:               Register Basics.    (line   58)
+ * call-saved register <3>:               Register Basics.    (line   76)
+ * call-used register:                    Register Basics.    (line   35)
+ * call-used register <1>:                Register Basics.    (line   50)
+ * call-used register <2>:                Register Basics.    (line   58)
+ * call-used register <3>:                Register Basics.    (line   76)
+ * call, in call_insn:                    Flags.              (line  129)
+ * call, in mem:                          Flags.              (line   70)
+ * callback:                              GTY Options.        (line  111)
+ * calling conventions:                   Stack and Calling.  (line    6)
+ * calling functions in RTL:              Calls.              (line    6)
+ * can_create_pseudo_p:                   Standard Names.     (line   75)
+ * can_fallthru:                          Basic Blocks.       (line   67)
  * canadian:                              Configure Terms.    (line    6)
  * canonicalization of instructions:      Insn Canonicalizations.
                                                               (line    6)
  * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
                                                               (line 2545)
  * caret:                                 Multi-Alternative.  (line   53)
  * caret <1>:                             Guidelines for Diagnostics.
                                                               (line  183)
  * CASE_VECTOR_MODE:                      Misc.               (line   26)
  * CASE_VECTOR_PC_RELATIVE:               Misc.               (line   39)
  * CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   30)
+ * casesi instruction pattern:            Standard Names.     (line 2487)
  * cbranchMODE4 instruction pattern:      Standard Names.     (line 2351)
  * CC1_SPEC:                              Driver.             (line   55)
+ * CC1PLUS_SPEC:                          Driver.             (line   63)
  * CCmode:                                Machine Modes.      (line  178)
  * CCmode <1>:                            MODE_CC Condition Codes.
                                                               (line    6)
  * CDImode:                               Machine Modes.      (line  203)
  * CEIL_DIV_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
  * CEIL_MOD_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
+ * ceilM2 instruction pattern:            Standard Names.     (line 1440)
  * CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  245)
  * CFG verification:                      Maintaining the CFG.
                                                               (line  116)
*************** Concept Index
*** 55657,55670 ****
  * CHImode:                               Machine Modes.      (line  203)
  * class definitions, register:           Register Classes.   (line    6)
  * class preference constraints:          Class Preferences.  (line    6)
  * class, scope:                          Classes.            (line    6)
  * classes of RTX codes:                  RTL Classes.        (line    6)
  * CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
  * CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   82)
  * CLASSTYPE_NON_POD_P:                   Classes.            (line   87)
- * CLASS_MAX_NREGS:                       Register Classes.   (line  555)
- * CLASS_TYPE_P:                          Types for C++.      (line   63)
- * Cleanups:                              Cleanups.           (line    6)
  * CLEANUP_DECL:                          Statements for C and C++.
                                                               (line    6)
  * CLEANUP_EXPR:                          Statements for C and C++.
--- 55661,55673 ----
  * CHImode:                               Machine Modes.      (line  203)
  * class definitions, register:           Register Classes.   (line    6)
  * class preference constraints:          Class Preferences.  (line    6)
+ * CLASS_MAX_NREGS:                       Register Classes.   (line  555)
+ * CLASS_TYPE_P:                          Types for C++.      (line   63)
  * class, scope:                          Classes.            (line    6)
  * classes of RTX codes:                  RTL Classes.        (line    6)
  * CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
  * CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   82)
  * CLASSTYPE_NON_POD_P:                   Classes.            (line   87)
  * CLEANUP_DECL:                          Statements for C and C++.
                                                               (line    6)
  * CLEANUP_EXPR:                          Statements for C and C++.
*************** Concept Index
*** 55673,55678 ****
--- 55676,55682 ----
                                                               (line    6)
  * CLEANUP_STMT:                          Statements for C and C++.
                                                               (line    6)
+ * Cleanups:                              Cleanups.           (line    6)
  * clear_cache instruction pattern:       Standard Names.     (line 3219)
  * CLEAR_INSN_CACHE:                      Trampolines.        (line  168)
  * CLEAR_RATIO:                           Costs.              (line  232)
*************** Concept Index
*** 55680,55721 ****
  * clrsb:                                 Arithmetic.         (line  221)
  * clrsbM2 instruction pattern:           Standard Names.     (line 1682)
  * clz:                                   Arithmetic.         (line  228)
- * clzM2 instruction pattern:             Standard Names.     (line 1698)
  * CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  340)
! * cmlaM4 instruction pattern:            Standard Names.     (line 1548)
  * cmla_conjM4 instruction pattern:       Standard Names.     (line 1568)
! * cmlsM4 instruction pattern:            Standard Names.     (line 1589)
  * cmls_conjM4 instruction pattern:       Standard Names.     (line 1609)
  * cmpmemM instruction pattern:           Standard Names.     (line 1902)
  * cmpstrM instruction pattern:           Standard Names.     (line 1881)
  * cmpstrnM instruction pattern:          Standard Names.     (line 1868)
- * cmulM4 instruction pattern:            Standard Names.     (line 1630)
  * cmul_conjM4 instruction pattern:       Standard Names.     (line 1649)
  * code generation RTL sequences:         Expander Definitions.
                                                               (line    6)
  * code iterators in .md files:           Code Iterators.     (line    6)
- * codes, RTL expression:                 RTL Objects.        (line   47)
  * code_label:                            Insns.              (line  125)
  * CODE_LABEL:                            Basic Blocks.       (line   50)
  * code_label and /i:                     Flags.              (line   48)
  * code_label and /v:                     Flags.              (line   33)
  * CODE_LABEL_NUMBER:                     Insns.              (line  125)
  * COImode:                               Machine Modes.      (line  203)
- * COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
  * COLLECT_EXPORT_LIST:                   Misc.               (line  907)
  * COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
                                                               (line   43)
  * COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
                                                               (line   32)
  * command-line options, guidelines for:  Guidelines for Options.
                                                               (line    6)
  * commit_edge_insertions:                Maintaining the CFG.
                                                               (line  104)
  * compact syntax:                        Compact Syntax.     (line    6)
  * compare:                               Arithmetic.         (line   46)
  * compare, canonicalization of:          Insn Canonicalizations.
                                                               (line   42)
- * COMPARE_MAX_PIECES:                    Costs.              (line  227)
  * comparison_operator:                   Machine-Independent Predicates.
                                                               (line  110)
  * compiler passes and files:             Passes.             (line    6)
--- 55684,55725 ----
  * clrsb:                                 Arithmetic.         (line  221)
  * clrsbM2 instruction pattern:           Standard Names.     (line 1682)
  * clz:                                   Arithmetic.         (line  228)
  * CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  340)
! * clzM2 instruction pattern:             Standard Names.     (line 1698)
  * cmla_conjM4 instruction pattern:       Standard Names.     (line 1568)
! * cmlaM4 instruction pattern:            Standard Names.     (line 1548)
  * cmls_conjM4 instruction pattern:       Standard Names.     (line 1609)
+ * cmlsM4 instruction pattern:            Standard Names.     (line 1589)
  * cmpmemM instruction pattern:           Standard Names.     (line 1902)
  * cmpstrM instruction pattern:           Standard Names.     (line 1881)
  * cmpstrnM instruction pattern:          Standard Names.     (line 1868)
  * cmul_conjM4 instruction pattern:       Standard Names.     (line 1649)
+ * cmulM4 instruction pattern:            Standard Names.     (line 1630)
  * code generation RTL sequences:         Expander Definitions.
                                                               (line    6)
  * code iterators in .md files:           Code Iterators.     (line    6)
  * code_label:                            Insns.              (line  125)
  * CODE_LABEL:                            Basic Blocks.       (line   50)
  * code_label and /i:                     Flags.              (line   48)
  * code_label and /v:                     Flags.              (line   33)
  * CODE_LABEL_NUMBER:                     Insns.              (line  125)
+ * codes, RTL expression:                 RTL Objects.        (line   47)
  * COImode:                               Machine Modes.      (line  203)
  * COLLECT_EXPORT_LIST:                   Misc.               (line  907)
  * COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
                                                               (line   43)
  * COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
                                                               (line   32)
+ * COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
  * command-line options, guidelines for:  Guidelines for Options.
                                                               (line    6)
  * commit_edge_insertions:                Maintaining the CFG.
                                                               (line  104)
  * compact syntax:                        Compact Syntax.     (line    6)
  * compare:                               Arithmetic.         (line   46)
+ * COMPARE_MAX_PIECES:                    Costs.              (line  227)
  * compare, canonicalization of:          Insn Canonicalizations.
                                                               (line   42)
  * comparison_operator:                   Machine-Independent Predicates.
                                                               (line  110)
  * compiler passes and files:             Passes.             (line    6)
*************** Concept Index
*** 55744,55763 ****
  * concatn:                               Regs and Memory.    (line  377)
  * cond:                                  Comparisons.        (line   80)
  * cond and attributes:                   Expressions.        (line   37)
- * condition code status:                 Condition Code.     (line    6)
- * condition codes:                       Comparisons.        (line   20)
- * conditional execution:                 Conditional Execution.
-                                                              (line    6)
- * Conditional Expressions:               Conditional Expressions.
-                                                              (line    6)
- * conditions, in patterns:               Patterns.           (line   55)
  * cond_addMODE instruction pattern:      Standard Names.     (line 2143)
  * cond_andMODE instruction pattern:      Standard Names.     (line 2143)
  * cond_ashlMODE instruction pattern:     Standard Names.     (line 2143)
  * cond_ashrMODE instruction pattern:     Standard Names.     (line 2143)
  * cond_copysignMODE instruction pattern: Standard Names.     (line 2143)
  * cond_divMODE instruction pattern:      Standard Names.     (line 2143)
! * cond_exec:                             Side Effects.       (line  245)
  * COND_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * cond_fmaMODE instruction pattern:      Standard Names.     (line 2194)
--- 55748,55760 ----
  * concatn:                               Regs and Memory.    (line  377)
  * cond:                                  Comparisons.        (line   80)
  * cond and attributes:                   Expressions.        (line   37)
  * cond_addMODE instruction pattern:      Standard Names.     (line 2143)
  * cond_andMODE instruction pattern:      Standard Names.     (line 2143)
  * cond_ashlMODE instruction pattern:     Standard Names.     (line 2143)
  * cond_ashrMODE instruction pattern:     Standard Names.     (line 2143)
  * cond_copysignMODE instruction pattern: Standard Names.     (line 2143)
  * cond_divMODE instruction pattern:      Standard Names.     (line 2143)
! * cond_exec:                             Side Effects.       (line  244)
  * COND_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * cond_fmaMODE instruction pattern:      Standard Names.     (line 2194)
*************** Concept Index
*** 55806,55817 ****
--- 55803,55846 ----
  * cond_uminMODE instruction pattern:     Standard Names.     (line 2143)
  * cond_umodMODE instruction pattern:     Standard Names.     (line 2143)
  * cond_xorMODE instruction pattern:      Standard Names.     (line 2143)
+ * condition code status:                 Condition Code.     (line    6)
+ * condition codes:                       Comparisons.        (line   20)
+ * conditional execution:                 Conditional Execution.
+                                                              (line    6)
+ * Conditional Expressions:               Conditional Expressions.
+                                                              (line    6)
+ * conditions, in patterns:               Patterns.           (line   55)
  * configuration file:                    Filesystem.         (line    6)
  * configuration file <1>:                Host Misc.          (line    6)
  * configure terms:                       Configure Terms.    (line    6)
  * CONJ_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * const:                                 Constants.          (line  226)
+ * CONST_DECL:                            Declarations.       (line    6)
+ * const_double:                          Constants.          (line   37)
+ * CONST_DOUBLE_LOW:                      Constants.          (line   54)
+ * const_double_operand:                  Machine-Independent Predicates.
+                                                              (line   20)
+ * const_double_zero:                     Constants.          (line   67)
+ * const_double, RTL sharing:             Sharing.            (line   30)
+ * const_fixed:                           Constants.          (line  107)
+ * const_int:                             Constants.          (line    8)
+ * const_int and attribute tests:         Expressions.        (line   47)
+ * const_int and attributes:              Expressions.        (line   10)
+ * const_int_operand:                     Machine-Independent Predicates.
+                                                              (line   15)
+ * const_int, RTL sharing:                Sharing.            (line   23)
+ * const_poly_int:                        Constants.          (line  114)
+ * const_poly_int, RTL sharing:           Sharing.            (line   25)
+ * const_string:                          Constants.          (line  198)
+ * const_string and attributes:           Expressions.        (line   20)
+ * const_true_rtx:                        Constants.          (line   31)
+ * const_vector:                          Constants.          (line  121)
+ * const_vector, RTL sharing:             Sharing.            (line   33)
+ * CONST_WIDE_INT:                        Constants.          (line   81)
+ * CONST_WIDE_INT_ELT:                    Constants.          (line  103)
+ * CONST_WIDE_INT_NUNITS:                 Constants.          (line   98)
+ * CONST_WIDE_INT_VEC:                    Constants.          (line   94)
  * const0_rtx:                            Constants.          (line   21)
  * CONST0_RTX:                            Constants.          (line  244)
  * const1_rtx:                            Constants.          (line   21)
*************** Concept Index
*** 55822,55834 ****
                                                               (line    6)
  * constant definitions:                  Constant Definitions.
                                                               (line    6)
- * constants in constraints:              Simple Constraints. (line   68)
  * CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   28)
  * CONSTANT_P:                            Addressing Modes.   (line   35)
  * CONSTANT_POOL_ADDRESS_P:               Flags.              (line   19)
  * CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   74)
  * constm1_rtx:                           Constants.          (line   21)
  * constraint modifier characters:        Modifiers.          (line    6)
  * constraint, matching:                  Simple Constraints. (line  140)
  * constraints:                           Constraints.        (line    6)
  * constraints, defining:                 Define Constraints. (line    6)
--- 55851,55867 ----
                                                               (line    6)
  * constant definitions:                  Constant Definitions.
                                                               (line    6)
  * CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   28)
  * CONSTANT_P:                            Addressing Modes.   (line   35)
  * CONSTANT_POOL_ADDRESS_P:               Flags.              (line   19)
  * CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   74)
+ * constants in constraints:              Simple Constraints. (line   68)
  * constm1_rtx:                           Constants.          (line   21)
  * constraint modifier characters:        Modifiers.          (line    6)
+ * constraint_num:                        C Constraint Interface.
+                                                              (line   30)
+ * constraint_satisfied_p:                C Constraint Interface.
+                                                              (line   42)
  * constraint, matching:                  Simple Constraints. (line  140)
  * constraints:                           Constraints.        (line    6)
  * constraints, defining:                 Define Constraints. (line    6)
*************** Concept Index
*** 55836,55874 ****
                                                               (line    6)
  * constraints, testing:                  C Constraint Interface.
                                                               (line    6)
- * constraint_num:                        C Constraint Interface.
-                                                              (line   30)
- * constraint_satisfied_p:                C Constraint Interface.
-                                                              (line   42)
  * CONSTRUCTOR:                           Unary and Binary Expressions.
                                                               (line    6)
  * constructors, automatic calls:         Collect2.           (line   15)
  * constructors, output of:               Initialization.     (line    6)
- * CONST_DECL:                            Declarations.       (line    6)
- * const_double:                          Constants.          (line   37)
- * const_double, RTL sharing:             Sharing.            (line   30)
- * CONST_DOUBLE_LOW:                      Constants.          (line   54)
- * const_double_operand:                  Machine-Independent Predicates.
-                                                              (line   20)
- * const_double_zero:                     Constants.          (line   67)
- * const_fixed:                           Constants.          (line  107)
- * const_int:                             Constants.          (line    8)
- * const_int and attribute tests:         Expressions.        (line   47)
- * const_int and attributes:              Expressions.        (line   10)
- * const_int, RTL sharing:                Sharing.            (line   23)
- * const_int_operand:                     Machine-Independent Predicates.
-                                                              (line   15)
- * const_poly_int:                        Constants.          (line  114)
- * const_poly_int, RTL sharing:           Sharing.            (line   25)
- * const_string:                          Constants.          (line  198)
- * const_string and attributes:           Expressions.        (line   20)
- * const_true_rtx:                        Constants.          (line   31)
- * const_vector:                          Constants.          (line  121)
- * const_vector, RTL sharing:             Sharing.            (line   33)
- * CONST_WIDE_INT:                        Constants.          (line   81)
- * CONST_WIDE_INT_ELT:                    Constants.          (line  103)
- * CONST_WIDE_INT_NUNITS:                 Constants.          (line   98)
- * CONST_WIDE_INT_VEC:                    Constants.          (line   94)
  * container:                             Containers.         (line    6)
  * CONTINUE_STMT:                         Statements for C and C++.
                                                               (line    6)
--- 55869,55878 ----
*************** Concept Index
*** 55879,55894 ****
  * conversions:                           Conversions.        (line    6)
  * CONVERT_EXPR:                          Unary and Binary Expressions.
                                                               (line    6)
- * copysign:                              Arithmetic.         (line  262)
- * copysignM3 instruction pattern:        Standard Names.     (line 1485)
  * copy_rtx:                              Addressing Modes.   (line  197)
  * copy_rtx_if_shared:                    Sharing.            (line   65)
  * cosM2 instruction pattern:             Standard Names.     (line 1251)
  * costs of instructions:                 Costs.              (line    6)
- * CPLUSPLUS_CPP_SPEC:                    Driver.             (line   50)
- * CPP_SPEC:                              Driver.             (line   43)
- * CPSImode:                              Machine Modes.      (line  203)
- * cpymemM instruction pattern:           Standard Names.     (line 1756)
  * CP_INTEGRAL_TYPE:                      Types for C++.      (line   55)
  * cp_namespace_decls:                    Namespaces.         (line   49)
  * CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
--- 55883,55894 ----
  * conversions:                           Conversions.        (line    6)
  * CONVERT_EXPR:                          Unary and Binary Expressions.
                                                               (line    6)
  * copy_rtx:                              Addressing Modes.   (line  197)
  * copy_rtx_if_shared:                    Sharing.            (line   65)
+ * copysign:                              Arithmetic.         (line  262)
+ * copysignM3 instruction pattern:        Standard Names.     (line 1485)
  * cosM2 instruction pattern:             Standard Names.     (line 1251)
  * costs of instructions:                 Costs.              (line    6)
  * CP_INTEGRAL_TYPE:                      Types for C++.      (line   55)
  * cp_namespace_decls:                    Namespaces.         (line   49)
  * CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
*************** Concept Index
*** 55897,55927 ****
  * cp_type_quals <1>:                     Types for C++.      (line   16)
  * CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
  * CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
  * CQImode:                               Machine Modes.      (line  203)
  * cross compilation and floating point:  Floating Point.     (line    6)
  * CROSSING_JUMP_P:                       Flags.              (line   10)
  * crtl->args.pops_args:                  Function Entry.     (line  111)
  * crtl->args.pretend_args_size:          Function Entry.     (line  117)
  * crtl->outgoing_args_size:              Stack Arguments.    (line   51)
  * CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   15)
  * CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   19)
- * CRT_CALL_STATIC_FUNCTION:              Sections.           (line  125)
  * CSImode:                               Machine Modes.      (line  203)
  * cstoreMODE4 instruction pattern:       Standard Names.     (line 2306)
  * CTF_DEBUGGING_INFO:                    CTF Debug.          (line    8)
  * CTImode:                               Machine Modes.      (line  203)
  * ctrapMM4 instruction pattern:          Standard Names.     (line 2782)
  * ctz:                                   Arithmetic.         (line  236)
- * ctzM2 instruction pattern:             Standard Names.     (line 1713)
  * CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  341)
  * CUMULATIVE_ARGS:                       Register Arguments. (line  131)
  * current_function_is_leaf:              Leaf Functions.     (line   50)
  * current_function_uses_only_leaf_regs:  Leaf Functions.     (line   50)
  * current_insn_predicate:                Conditional Execution.
                                                               (line   27)
- * C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  136)
- * c_register_pragma:                     Misc.               (line  442)
- * c_register_pragma_with_expansion:      Misc.               (line  444)
  * DAmode:                                Machine Modes.      (line  154)
  * data bypass:                           Processor pipeline description.
                                                               (line  105)
--- 55897,55928 ----
  * cp_type_quals <1>:                     Types for C++.      (line   16)
  * CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
  * CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
+ * CPLUSPLUS_CPP_SPEC:                    Driver.             (line   50)
+ * CPP_SPEC:                              Driver.             (line   43)
+ * CPSImode:                              Machine Modes.      (line  203)
+ * cpymemM instruction pattern:           Standard Names.     (line 1756)
  * CQImode:                               Machine Modes.      (line  203)
  * cross compilation and floating point:  Floating Point.     (line    6)
  * CROSSING_JUMP_P:                       Flags.              (line   10)
+ * CRT_CALL_STATIC_FUNCTION:              Sections.           (line  125)
  * crtl->args.pops_args:                  Function Entry.     (line  111)
  * crtl->args.pretend_args_size:          Function Entry.     (line  117)
  * crtl->outgoing_args_size:              Stack Arguments.    (line   51)
  * CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   15)
  * CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   19)
  * CSImode:                               Machine Modes.      (line  203)
  * cstoreMODE4 instruction pattern:       Standard Names.     (line 2306)
  * CTF_DEBUGGING_INFO:                    CTF Debug.          (line    8)
  * CTImode:                               Machine Modes.      (line  203)
  * ctrapMM4 instruction pattern:          Standard Names.     (line 2782)
  * ctz:                                   Arithmetic.         (line  236)
  * CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  341)
+ * ctzM2 instruction pattern:             Standard Names.     (line 1713)
  * CUMULATIVE_ARGS:                       Register Arguments. (line  131)
  * current_function_is_leaf:              Leaf Functions.     (line   50)
  * current_function_uses_only_leaf_regs:  Leaf Functions.     (line   50)
  * current_insn_predicate:                Conditional Execution.
                                                               (line   27)
  * DAmode:                                Machine Modes.      (line  154)
  * data bypass:                           Processor pipeline description.
                                                               (line  105)
*************** Concept Index
*** 55942,55961 ****
  * De Morgan's law:                       Insn Canonicalizations.
                                                               (line   73)
  * dead_or_set_p:                         define_peephole.    (line   65)
- * DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   35)
- * DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   27)
- * DEBUGGER_REGNO:                        All Debuggers.      (line    8)
  * debug_expr:                            Debug Information.  (line   22)
  * DEBUG_EXPR_DECL:                       Declarations.       (line    6)
  * debug_implicit_ptr:                    Debug Information.  (line   27)
  * debug_insn:                            Insns.              (line  247)
  * debug_marker:                          Debug Information.  (line   37)
  * debug_parameter_ref:                   Debug Information.  (line   34)
  * decimal float library:                 Decimal float library routines.
                                                               (line    6)
- * declaration:                           Declarations.       (line    6)
- * declarations, RTL:                     RTL Declarations.   (line    6)
- * DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    8)
  * DECL_ALIGN:                            Declarations.       (line    6)
  * DECL_ANTICIPATED:                      Functions for C++.  (line   42)
  * DECL_ARGUMENTS:                        Function Basics.    (line   36)
--- 55943,55959 ----
  * De Morgan's law:                       Insn Canonicalizations.
                                                               (line   73)
  * dead_or_set_p:                         define_peephole.    (line   65)
  * debug_expr:                            Debug Information.  (line   22)
  * DEBUG_EXPR_DECL:                       Declarations.       (line    6)
  * debug_implicit_ptr:                    Debug Information.  (line   27)
  * debug_insn:                            Insns.              (line  247)
  * debug_marker:                          Debug Information.  (line   37)
  * debug_parameter_ref:                   Debug Information.  (line   34)
+ * DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   35)
+ * DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   27)
+ * DEBUGGER_REGNO:                        All Debuggers.      (line    8)
  * decimal float library:                 Decimal float library routines.
                                                               (line    6)
  * DECL_ALIGN:                            Declarations.       (line    6)
  * DECL_ANTICIPATED:                      Functions for C++.  (line   42)
  * DECL_ARGUMENTS:                        Function Basics.    (line   36)
*************** Concept Index
*** 55971,55986 ****
  * DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
  * DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
  * DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
- * DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
  * DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
  * DECL_CONTEXT:                          Namespaces.         (line   31)
  * DECL_CONV_FN_P:                        Functions for C++.  (line  105)
  * DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
  * DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
  * DECL_EXTERNAL:                         Declarations.       (line    6)
  * DECL_EXTERNAL <1>:                     Function Properties.
                                                               (line   25)
- * DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
  * DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
  * DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
  * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
--- 55969,55984 ----
  * DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
  * DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
  * DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
  * DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
+ * DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
  * DECL_CONTEXT:                          Namespaces.         (line   31)
  * DECL_CONV_FN_P:                        Functions for C++.  (line  105)
  * DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
  * DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
+ * DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
  * DECL_EXTERNAL:                         Declarations.       (line    6)
  * DECL_EXTERNAL <1>:                     Function Properties.
                                                               (line   25)
  * DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
  * DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
  * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
*************** Concept Index
*** 56002,56010 ****
  * DECL_NAME <3>:                         Namespaces.         (line   20)
  * DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
  * DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
  * DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
  * DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
- * DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
  * DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
  * DECL_PURE_P:                           Function Properties.
                                                               (line   40)
--- 56000,56008 ----
  * DECL_NAME <3>:                         Namespaces.         (line   20)
  * DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
  * DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
+ * DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
  * DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
  * DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
  * DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
  * DECL_PURE_P:                           Function Properties.
                                                               (line   40)
*************** Concept Index
*** 56020,56025 ****
--- 56018,56026 ----
  * DECL_VIRTUAL_P:                        Function Properties.
                                                               (line   44)
  * DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
+ * declaration:                           Declarations.       (line    6)
+ * declarations, RTL:                     RTL Declarations.   (line    6)
+ * DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    8)
  * default:                               GTY Options.        (line  127)
  * default_file_start:                    File Framework.     (line    8)
  * DEFAULT_GDB_EXTENSIONS:                All Debuggers.      (line   56)
*************** Concept Index
*** 56034,56039 ****
--- 56035,56042 ----
                                                               (line   53)
  * define_bypass:                         Processor pipeline description.
                                                               (line  196)
+ * define_c_enum:                         Constant Definitions.
+                                                              (line   49)
  * define_code_attr:                      Code Iterators.     (line    6)
  * define_code_iterator:                  Code Iterators.     (line    6)
  * define_cond_exec:                      Conditional Execution.
*************** Concept Index
*** 56043,56050 ****
  * define_constraint:                     Define Constraints. (line   80)
  * define_cpu_unit:                       Processor pipeline description.
                                                               (line   68)
- * define_c_enum:                         Constant Definitions.
-                                                              (line   49)
  * define_delay:                          Delay Slots.        (line   25)
  * define_enum:                           Constant Definitions.
                                                               (line  122)
--- 56046,56051 ----
*************** Concept Index
*** 56130,56138 ****
                                                               (line   39)
  * digits in constraint:                  Simple Constraints. (line  128)
  * DImode:                                Machine Modes.      (line   45)
- * directory options .md:                 Including Patterns. (line   46)
  * DIR_SEPARATOR:                         Filesystem.         (line   18)
  * DIR_SEPARATOR_2:                       Filesystem.         (line   19)
  * disabling certain registers:           Register Basics.    (line  116)
  * dispatch table:                        Dispatch Tables.    (line    8)
  * div:                                   Arithmetic.         (line  122)
--- 56131,56139 ----
                                                               (line   39)
  * digits in constraint:                  Simple Constraints. (line  128)
  * DImode:                                Machine Modes.      (line   45)
  * DIR_SEPARATOR:                         Filesystem.         (line   18)
  * DIR_SEPARATOR_2:                       Filesystem.         (line   19)
+ * directory options .md:                 Including Patterns. (line   46)
  * disabling certain registers:           Register Basics.    (line  116)
  * dispatch table:                        Dispatch Tables.    (line    8)
  * div:                                   Arithmetic.         (line  122)
*************** Concept Index
*** 56142,56147 ****
--- 56143,56154 ----
  * division <2>:                          Arithmetic.         (line  142)
  * divM3 instruction pattern:             Standard Names.     (line  629)
  * divmodM4 instruction pattern:          Standard Names.     (line 1122)
+ * DO_BODY:                               Statements for C and C++.
+                                                              (line    6)
+ * DO_COND:                               Statements for C and C++.
+                                                              (line    6)
+ * DO_STMT:                               Statements for C and C++.
+                                                              (line    6)
  * dollar sign:                           Multi-Alternative.  (line   57)
  * DOLLARS_IN_IDENTIFIERS:                Misc.               (line  487)
  * doloop_begin instruction pattern:      Standard Names.     (line 2536)
*************** Concept Index
*** 56153,56164 ****
  * DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
                                                               (line   78)
  * DOUBLE_TYPE_SIZE:                      Type Layout.        (line   52)
- * DO_BODY:                               Statements for C and C++.
-                                                              (line    6)
- * DO_COND:                               Statements for C and C++.
-                                                              (line    6)
- * DO_STMT:                               Statements for C and C++.
-                                                              (line    6)
  * DQmode:                                Machine Modes.      (line  118)
  * driver:                                Driver.             (line    6)
  * DRIVER_SELF_SPECS:                     Driver.             (line    8)
--- 56160,56165 ----
*************** Concept Index
*** 56167,56184 ****
  * dump types:                            Dump types.         (line    6)
  * dump verbosity:                        Dump output verbosity.
                                                               (line    6)
- * DUMPFILE_FORMAT:                       Filesystem.         (line   67)
  * dump_basic_block:                      Dump types.         (line   29)
  * dump_generic_expr:                     Dump types.         (line   31)
  * dump_gimple_stmt:                      Dump types.         (line   33)
  * dump_printf:                           Dump types.         (line    6)
! * DWARF2_ASM_LINE_DEBUG_INFO:            DWARF.              (line   44)
! * DWARF2_ASM_VIEW_DEBUG_INFO:            DWARF.              (line   50)
! * DWARF2_DEBUGGING_INFO:                 DWARF.              (line    8)
! * DWARF2_FRAME_INFO:                     DWARF.              (line   24)
! * DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  149)
! * DWARF2_UNWIND_INFO:                    Exception Region Output.
!                                                              (line   39)
  * DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  146)
  * DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
                                                               (line   90)
--- 56168,56178 ----
  * dump types:                            Dump types.         (line    6)
  * dump verbosity:                        Dump output verbosity.
                                                               (line    6)
  * dump_basic_block:                      Dump types.         (line   29)
  * dump_generic_expr:                     Dump types.         (line   31)
  * dump_gimple_stmt:                      Dump types.         (line   33)
  * dump_printf:                           Dump types.         (line    6)
! * DUMPFILE_FORMAT:                       Filesystem.         (line   67)
  * DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  146)
  * DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
                                                               (line   90)
*************** Concept Index
*** 56188,56193 ****
--- 56182,56194 ----
  * DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  134)
  * DWARF_VERSION_DEFAULT:                 Frame Layout.       (line  165)
  * DWARF_ZERO_REG:                        Frame Layout.       (line  157)
+ * DWARF2_ASM_LINE_DEBUG_INFO:            DWARF.              (line   44)
+ * DWARF2_ASM_VIEW_DEBUG_INFO:            DWARF.              (line   50)
+ * DWARF2_DEBUGGING_INFO:                 DWARF.              (line    8)
+ * DWARF2_FRAME_INFO:                     DWARF.              (line   24)
+ * DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  149)
+ * DWARF2_UNWIND_INFO:                    Exception Region Output.
+                                                              (line   39)
  * DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   84)
  * E in constraint:                       Simple Constraints. (line   87)
  * earlyclobber operand:                  Modifiers.          (line   25)
*************** Concept Index
*** 56247,56256 ****
  * EPILOGUE_USES:                         Function Entry.     (line  156)
  * eq:                                    Comparisons.        (line   42)
  * eq and attributes:                     Expressions.        (line   83)
- * equal:                                 Comparisons.        (line   42)
  * eq_attr:                               Expressions.        (line  104)
  * EQ_EXPR:                               Unary and Binary Expressions.
                                                               (line    6)
  * errno, implicit usage:                 Library Calls.      (line   71)
  * EXACT_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
--- 56248,56257 ----
  * EPILOGUE_USES:                         Function Entry.     (line  156)
  * eq:                                    Comparisons.        (line   42)
  * eq and attributes:                     Expressions.        (line   83)
  * eq_attr:                               Expressions.        (line  104)
  * EQ_EXPR:                               Unary and Binary Expressions.
                                                               (line    6)
+ * equal:                                 Comparisons.        (line   42)
  * errno, implicit usage:                 Library Calls.      (line   71)
  * EXACT_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
*************** Concept Index
*** 56271,56278 ****
                                                               (line    6)
  * expm1M2 instruction pattern:           Standard Names.     (line 1318)
  * expM2 instruction pattern:             Standard Names.     (line 1311)
- * expression:                            Expression trees.   (line    6)
- * expression codes:                      RTL Objects.        (line   47)
  * EXPR_FILENAME:                         Working with declarations.
                                                               (line   14)
  * EXPR_LINENO:                           Working with declarations.
--- 56272,56277 ----
*************** Concept Index
*** 56282,56293 ****
                                                               (line    6)
  * EXPR_STMT_EXPR:                        Statements for C and C++.
                                                               (line    6)
  * extended basic blocks, RTL SSA:        RTL SSA Basic Blocks.
                                                               (line   29)
  * extendMN2 instruction pattern:         Standard Names.     (line 1966)
  * extensible constraints:                Simple Constraints. (line  171)
- * extract_last_M instruction pattern:    Standard Names.     (line  750)
  * EXTRA_SPECS:                           Driver.             (line  182)
  * extv instruction pattern:              Standard Names.     (line 2057)
  * extvM instruction pattern:             Standard Names.     (line 2002)
  * extvmisalignM instruction pattern:     Standard Names.     (line 2012)
--- 56281,56294 ----
                                                               (line    6)
  * EXPR_STMT_EXPR:                        Statements for C and C++.
                                                               (line    6)
+ * expression:                            Expression trees.   (line    6)
+ * expression codes:                      RTL Objects.        (line   47)
  * extended basic blocks, RTL SSA:        RTL SSA Basic Blocks.
                                                               (line   29)
  * extendMN2 instruction pattern:         Standard Names.     (line 1966)
  * extensible constraints:                Simple Constraints. (line  171)
  * EXTRA_SPECS:                           Driver.             (line  182)
+ * extract_last_M instruction pattern:    Standard Names.     (line  750)
  * extv instruction pattern:              Standard Names.     (line 2057)
  * extvM instruction pattern:             Standard Names.     (line 2002)
  * extvmisalignM instruction pattern:     Standard Names.     (line 2012)
*************** Concept Index
*** 56313,56321 ****
  * ffs:                                   Arithmetic.         (line  216)
  * ffsM2 instruction pattern:             Standard Names.     (line 1669)
  * FIELD_DECL:                            Declarations.       (line    6)
  * files and passes of the compiler:      Passes.             (line    6)
  * files, generated:                      Files.              (line    6)
- * file_end_indicate_exec_stack:          File Framework.     (line   39)
  * final_absence_set:                     Processor pipeline description.
                                                               (line  223)
  * FINAL_PRESCAN_INSN:                    Instruction Output. (line   60)
--- 56314,56322 ----
  * ffs:                                   Arithmetic.         (line  216)
  * ffsM2 instruction pattern:             Standard Names.     (line 1669)
  * FIELD_DECL:                            Declarations.       (line    6)
+ * file_end_indicate_exec_stack:          File Framework.     (line   39)
  * files and passes of the compiler:      Passes.             (line    6)
  * files, generated:                      Files.              (line    6)
  * final_absence_set:                     Processor pipeline description.
                                                               (line  223)
  * FINAL_PRESCAN_INSN:                    Instruction Output. (line   60)
*************** Concept Index
*** 56323,56343 ****
                                                               (line  223)
  * final_sequence:                        Instruction Output. (line  144)
  * FIND_BASE_TERM:                        Addressing Modes.   (line  125)
- * finite state automaton minimization:   Processor pipeline description.
-                                                              (line  304)
  * FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  113)
  * FINI_SECTION_ASM_OP:                   Sections.           (line   98)
  * FIRST_PARM_OFFSET:                     Frame Layout.       (line   59)
  * FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
  * FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    8)
  * FIRST_STACK_REG:                       Stack Registers.    (line   26)
  * FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
  * fix:                                   Conversions.        (line   66)
  * fix-it hints:                          Guidelines for Diagnostics.
                                                               (line  344)
  * fixed register:                        Register Basics.    (line   15)
- * fixed-point fractional library:        Fixed-point fractional library routines.
-                                                              (line    6)
  * FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
                                                               (line    6)
  * FIXED_CST:                             Constant expressions.
--- 56324,56345 ----
                                                               (line  223)
  * final_sequence:                        Instruction Output. (line  144)
  * FIND_BASE_TERM:                        Addressing Modes.   (line  125)
  * FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  113)
  * FINI_SECTION_ASM_OP:                   Sections.           (line   98)
+ * finite state automaton minimization:   Processor pipeline description.
+                                                              (line  304)
  * FIRST_PARM_OFFSET:                     Frame Layout.       (line   59)
  * FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
  * FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    8)
  * FIRST_STACK_REG:                       Stack Registers.    (line   26)
  * FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
  * fix:                                   Conversions.        (line   66)
+ * FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
+                                                              (line    6)
+ * fix_truncMN2 instruction pattern:      Standard Names.     (line 1953)
  * fix-it hints:                          Guidelines for Diagnostics.
                                                               (line  344)
  * fixed register:                        Register Basics.    (line   15)
  * FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
                                                               (line    6)
  * FIXED_CST:                             Constant expressions.
*************** Concept Index
*** 56346,56362 ****
  * FIXED_REGISTERS:                       Register Basics.    (line   14)
  * fixed_regs:                            Register Basics.    (line  102)
  * fixed_size_mode:                       Machine Modes.      (line  309)
  * fixMN2 instruction pattern:            Standard Names.     (line 1933)
- * fixunsMN2 instruction pattern:         Standard Names.     (line 1942)
  * fixuns_truncMN2 instruction pattern:   Standard Names.     (line 1957)
! * fix_truncMN2 instruction pattern:      Standard Names.     (line 1953)
! * FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
!                                                              (line    6)
  * flags in RTL expression:               Flags.              (line    6)
  * float:                                 Conversions.        (line   58)
- * floating point and cross compilation:  Floating Point.     (line    6)
- * floatMN2 instruction pattern:          Standard Names.     (line 1925)
- * floatunsMN2 instruction pattern:       Standard Names.     (line 1929)
  * FLOAT_EXPR:                            Unary and Binary Expressions.
                                                               (line    6)
  * float_extend:                          Conversions.        (line   33)
--- 56348,56360 ----
  * FIXED_REGISTERS:                       Register Basics.    (line   14)
  * fixed_regs:                            Register Basics.    (line  102)
  * fixed_size_mode:                       Machine Modes.      (line  309)
+ * fixed-point fractional library:        Fixed-point fractional library routines.
+                                                              (line    6)
  * fixMN2 instruction pattern:            Standard Names.     (line 1933)
  * fixuns_truncMN2 instruction pattern:   Standard Names.     (line 1957)
! * fixunsMN2 instruction pattern:         Standard Names.     (line 1942)
  * flags in RTL expression:               Flags.              (line    6)
  * float:                                 Conversions.        (line   58)
  * FLOAT_EXPR:                            Unary and Binary Expressions.
                                                               (line    6)
  * float_extend:                          Conversions.        (line   33)
*************** Concept Index
*** 56367,56377 ****
  * FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   41)
  * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
                                                               (line  234)
! * floorM2 instruction pattern:           Standard Names.     (line 1412)
  * FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * flow-insensitive alias analysis:       Alias analysis.     (line    6)
  * flow-sensitive alias analysis:         Alias analysis.     (line    6)
  * fma:                                   Arithmetic.         (line  118)
--- 56365,56378 ----
  * FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   41)
  * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
                                                               (line  234)
! * floating point and cross compilation:  Floating Point.     (line    6)
! * floatMN2 instruction pattern:          Standard Names.     (line 1925)
! * floatunsMN2 instruction pattern:       Standard Names.     (line 1929)
  * FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
+ * floorM2 instruction pattern:           Standard Names.     (line 1412)
  * flow-insensitive alias analysis:       Alias analysis.     (line    6)
  * flow-sensitive alias analysis:         Alias analysis.     (line    6)
  * fma:                                   Arithmetic.         (line  118)
*************** Concept Index
*** 56384,56391 ****
  * fnmsM4 instruction pattern:            Standard Names.     (line  698)
  * fold_extract_last_M instruction pattern: Standard Names.   (line  757)
  * fold_left_plus_M instruction pattern:  Standard Names.     (line  771)
- * FORCE_CODE_SECTION_ALIGN:              Sections.           (line  149)
- * force_reg:                             Standard Names.     (line   36)
  * FOR_BODY:                              Statements for C and C++.
                                                               (line    6)
  * FOR_COND:                              Statements for C and C++.
--- 56385,56390 ----
*************** Concept Index
*** 56397,56408 ****
  * FOR_STMT:                              Statements for C and C++.
                                                               (line    6)
  * for_user:                              GTY Options.        (line  119)
  * fractional types:                      Fixed-point fractional library routines.
                                                               (line    6)
  * fractMN2 instruction pattern:          Standard Names.     (line 1975)
  * fractunsMN2 instruction pattern:       Standard Names.     (line 1990)
- * fract_convert:                         Conversions.        (line   82)
- * FRACT_TYPE_SIZE:                       Type Layout.        (line   67)
  * frame layout:                          Frame Layout.       (line    6)
  * FRAME_ADDR_RTX:                        Frame Layout.       (line  108)
  * FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   26)
--- 56396,56409 ----
  * FOR_STMT:                              Statements for C and C++.
                                                               (line    6)
  * for_user:                              GTY Options.        (line  119)
+ * FORCE_CODE_SECTION_ALIGN:              Sections.           (line  149)
+ * force_reg:                             Standard Names.     (line   36)
+ * fract_convert:                         Conversions.        (line   82)
+ * FRACT_TYPE_SIZE:                       Type Layout.        (line   67)
  * fractional types:                      Fixed-point fractional library routines.
                                                               (line    6)
  * fractMN2 instruction pattern:          Standard Names.     (line 1975)
  * fractunsMN2 instruction pattern:       Standard Names.     (line 1990)
  * frame layout:                          Frame Layout.       (line    6)
  * FRAME_ADDR_RTX:                        Frame Layout.       (line  108)
  * FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   26)
*************** Concept Index
*** 56431,56438 ****
                                                               (line  179)
  * function properties:                   Function Properties.
                                                               (line    6)
- * function-call insns:                   Calls.              (line    6)
- * functions, leaf:                       Leaf Functions.     (line    6)
  * FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  255)
  * FUNCTION_BOUNDARY:                     Storage Layout.     (line  195)
  * FUNCTION_DECL:                         Functions.          (line    6)
--- 56432,56437 ----
*************** Concept Index
*** 56442,56447 ****
--- 56441,56448 ----
  * FUNCTION_TYPE:                         Types.              (line    6)
  * FUNCTION_VALUE:                        Scalar Return.      (line   52)
  * FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   78)
+ * function-call insns:                   Calls.              (line    6)
+ * functions, leaf:                       Leaf Functions.     (line    6)
  * fundamental type:                      Types.              (line    6)
  * fused multiply-add:                    Arithmetic.         (line  118)
  * G in constraint:                       Simple Constraints. (line   96)
*************** Concept Index
*** 56456,56461 ****
--- 56457,56465 ----
                                                               (line   41)
  * ge:                                    Comparisons.        (line   62)
  * ge and attributes:                     Expressions.        (line   83)
+ * GE_EXPR:                               Unary and Binary Expressions.
+                                                              (line    6)
+ * GEN_ERRNO_RTX:                         Library Calls.      (line   71)
  * gencodes:                              RTL passes.         (line   18)
  * general_operand:                       Machine-Independent Predicates.
                                                               (line  104)
*************** Concept Index
*** 56468,56474 ****
  * generic predicates:                    Machine-Independent Predicates.
                                                               (line    6)
  * genflags:                              RTL passes.         (line   18)
- * GEN_ERRNO_RTX:                         Library Calls.      (line   71)
  * get_attr:                              Expressions.        (line   99)
  * get_attr_length:                       Insn Lengths.       (line   52)
  * GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  434)
--- 56472,56477 ----
*************** Concept Index
*** 56494,56501 ****
                                                               (line 3153)
  * geu:                                   Comparisons.        (line   62)
  * geu and attributes:                    Expressions.        (line   83)
- * GE_EXPR:                               Unary and Binary Expressions.
-                                                              (line    6)
  * GGC:                                   Type Information.   (line    6)
  * ggc_collect:                           Invoking the garbage collector.
                                                               (line    6)
--- 56497,56502 ----
*************** Concept Index
*** 56536,56549 ****
  * gimple_assign_cast_p <1>:              GIMPLE_ASSIGN.      (line  104)
  * gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   62)
  * gimple_assign_lhs_ptr:                 GIMPLE_ASSIGN.      (line   65)
  * gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   68)
  * gimple_assign_rhs1_ptr:                GIMPLE_ASSIGN.      (line   71)
  * gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   75)
  * gimple_assign_rhs2_ptr:                GIMPLE_ASSIGN.      (line   78)
  * gimple_assign_rhs3:                    GIMPLE_ASSIGN.      (line   82)
  * gimple_assign_rhs3_ptr:                GIMPLE_ASSIGN.      (line   85)
- * gimple_assign_rhs_class:               GIMPLE_ASSIGN.      (line   56)
- * gimple_assign_rhs_code:                GIMPLE_ASSIGN.      (line   52)
  * gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   89)
  * gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   92)
  * gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   96)
--- 56537,56550 ----
  * gimple_assign_cast_p <1>:              GIMPLE_ASSIGN.      (line  104)
  * gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   62)
  * gimple_assign_lhs_ptr:                 GIMPLE_ASSIGN.      (line   65)
+ * gimple_assign_rhs_class:               GIMPLE_ASSIGN.      (line   56)
+ * gimple_assign_rhs_code:                GIMPLE_ASSIGN.      (line   52)
  * gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   68)
  * gimple_assign_rhs1_ptr:                GIMPLE_ASSIGN.      (line   71)
  * gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   75)
  * gimple_assign_rhs2_ptr:                GIMPLE_ASSIGN.      (line   78)
  * gimple_assign_rhs3:                    GIMPLE_ASSIGN.      (line   82)
  * gimple_assign_rhs3_ptr:                GIMPLE_ASSIGN.      (line   85)
  * gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   89)
  * gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   92)
  * gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   96)
*************** Concept Index
*** 56671,56680 ****
                                                               (line   40)
  * gimple_modified_p:                     Manipulating GIMPLE statements.
                                                               (line  122)
- * GIMPLE_NOP:                            GIMPLE_NOP.         (line    6)
- * gimple_nop_p:                          GIMPLE_NOP.         (line    9)
  * gimple_no_warning_p:                   Manipulating GIMPLE statements.
                                                               (line   43)
  * gimple_num_ops:                        Logical Operators.  (line   75)
  * gimple_num_ops <1>:                    Manipulating GIMPLE statements.
                                                               (line   67)
--- 56672,56681 ----
                                                               (line   40)
  * gimple_modified_p:                     Manipulating GIMPLE statements.
                                                               (line  122)
  * gimple_no_warning_p:                   Manipulating GIMPLE statements.
                                                               (line   43)
+ * GIMPLE_NOP:                            GIMPLE_NOP.         (line    6)
+ * gimple_nop_p:                          GIMPLE_NOP.         (line    9)
  * gimple_num_ops:                        Logical Operators.  (line   75)
  * gimple_num_ops <1>:                    Manipulating GIMPLE statements.
                                                               (line   67)
*************** Concept Index
*** 56768,56773 ****
--- 56769,56776 ----
  * gimple_omp_return_nowait_p:            GIMPLE_OMP_RETURN.  (line   13)
  * gimple_omp_return_set_nowait:          GIMPLE_OMP_RETURN.  (line   10)
  * GIMPLE_OMP_SECTION:                    GIMPLE_OMP_SECTION. (line    6)
+ * gimple_omp_section_last_p:             GIMPLE_OMP_SECTION. (line   11)
+ * gimple_omp_section_set_last:           GIMPLE_OMP_SECTION. (line   15)
  * GIMPLE_OMP_SECTIONS:                   GIMPLE_OMP_SECTIONS.
                                                               (line    6)
  * gimple_omp_sections_clauses:           GIMPLE_OMP_SECTIONS.
*************** Concept Index
*** 56782,56789 ****
                                                               (line   35)
  * gimple_omp_sections_set_control:       GIMPLE_OMP_SECTIONS.
                                                               (line   24)
- * gimple_omp_section_last_p:             GIMPLE_OMP_SECTION. (line   11)
- * gimple_omp_section_set_last:           GIMPLE_OMP_SECTION. (line   15)
  * gimple_omp_set_body:                   GIMPLE_OMP_PARALLEL.
                                                               (line   26)
  * GIMPLE_OMP_SINGLE:                     GIMPLE_OMP_SINGLE.  (line    6)
--- 56785,56790 ----
*************** Concept Index
*** 56795,56805 ****
  * gimple_op:                             Logical Operators.  (line   78)
  * gimple_op <1>:                         Manipulating GIMPLE statements.
                                                               (line   73)
  * gimple_ops:                            Logical Operators.  (line   81)
  * gimple_ops <1>:                        Manipulating GIMPLE statements.
                                                               (line   70)
- * gimple_op_ptr:                         Manipulating GIMPLE statements.
-                                                              (line   76)
  * GIMPLE_PHI:                            GIMPLE_PHI.         (line    6)
  * gimple_phi_arg:                        GIMPLE_PHI.         (line   24)
  * gimple_phi_arg <1>:                    SSA.                (line   62)
--- 56796,56806 ----
  * gimple_op:                             Logical Operators.  (line   78)
  * gimple_op <1>:                         Manipulating GIMPLE statements.
                                                               (line   73)
+ * gimple_op_ptr:                         Manipulating GIMPLE statements.
+                                                              (line   76)
  * gimple_ops:                            Logical Operators.  (line   81)
  * gimple_ops <1>:                        Manipulating GIMPLE statements.
                                                               (line   70)
  * GIMPLE_PHI:                            GIMPLE_PHI.         (line    6)
  * gimple_phi_arg:                        GIMPLE_PHI.         (line   24)
  * gimple_phi_arg <1>:                    SSA.                (line   62)
*************** Concept Index
*** 56970,56980 ****
  * gsi_stmt_ptr:                          Sequence iterators. (line   79)
  * gt:                                    Comparisons.        (line   50)
  * gt and attributes:                     Expressions.        (line   83)
  * gtu:                                   Comparisons.        (line   54)
  * gtu and attributes:                    Expressions.        (line   83)
  * GTY:                                   Type Information.   (line    6)
- * GT_EXPR:                               Unary and Binary Expressions.
-                                                              (line    6)
  * guidelines for diagnostics:            Guidelines for Diagnostics.
                                                               (line    6)
  * guidelines for options:                Guidelines for Options.
--- 56971,56981 ----
  * gsi_stmt_ptr:                          Sequence iterators. (line   79)
  * gt:                                    Comparisons.        (line   50)
  * gt and attributes:                     Expressions.        (line   83)
+ * GT_EXPR:                               Unary and Binary Expressions.
+                                                              (line    6)
  * gtu:                                   Comparisons.        (line   54)
  * gtu and attributes:                    Expressions.        (line   83)
  * GTY:                                   Type Information.   (line    6)
  * guidelines for diagnostics:            Guidelines for Diagnostics.
                                                               (line    6)
  * guidelines for options:                Guidelines for Options.
*************** Concept Index
*** 56983,56995 ****
                                                               (line    6)
  * H in constraint:                       Simple Constraints. (line   96)
  * HAmode:                                Machine Modes.      (line  146)
  * HANDLER:                               Statements for C and C++.
                                                               (line    6)
  * HANDLER_BODY:                          Statements for C and C++.
                                                               (line    6)
  * HANDLER_PARMS:                         Statements for C and C++.
                                                               (line    6)
- * HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  477)
  * hard registers:                        Regs and Memory.    (line    9)
  * HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   57)
  * HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   50)
--- 56984,56996 ----
                                                               (line    6)
  * H in constraint:                       Simple Constraints. (line   96)
  * HAmode:                                Machine Modes.      (line  146)
+ * HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  477)
  * HANDLER:                               Statements for C and C++.
                                                               (line    6)
  * HANDLER_BODY:                          Statements for C and C++.
                                                               (line    6)
  * HANDLER_PARMS:                         Statements for C and C++.
                                                               (line    6)
  * hard registers:                        Regs and Memory.    (line    9)
  * HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   57)
  * HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   50)
*************** Concept Index
*** 57048,57053 ****
--- 57049,57061 ----
  * IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
  * IEEE 754-2008:                         Decimal float library routines.
                                                               (line    6)
+ * IF_COND:                               Statements for C and C++.
+                                                              (line    6)
+ * IF_STMT:                               Statements for C and C++.
+                                                              (line    6)
+ * if_then_else:                          Comparisons.        (line   70)
+ * if_then_else and attributes:           Expressions.        (line   32)
+ * if_then_else usage:                    Side Effects.       (line   49)
  * IFCVT_MACHDEP_INIT:                    Misc.               (line  607)
  * IFCVT_MODIFY_CANCEL:                   Misc.               (line  601)
  * IFCVT_MODIFY_FINAL:                    Misc.               (line  595)
*************** Concept Index
*** 57064,57088 ****
  * IFN_VEC_WIDEN_PLUS_HI:                 Vectors.            (line    6)
  * IFN_VEC_WIDEN_PLUS_LO:                 Vectors.            (line    6)
  * IFN_VEC_WIDEN_PLUS_ODD:                Vectors.            (line    6)
- * IF_COND:                               Statements for C and C++.
-                                                              (line    6)
- * IF_STMT:                               Statements for C and C++.
-                                                              (line    6)
- * if_then_else:                          Comparisons.        (line   70)
- * if_then_else and attributes:           Expressions.        (line   32)
- * if_then_else usage:                    Side Effects.       (line   49)
  * IMAGPART_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
  * Immediate Uses:                        SSA Operands.       (line  258)
  * immediate_operand:                     Machine-Independent Predicates.
                                                               (line   10)
  * IMMEDIATE_PREFIX:                      Instruction Output. (line  153)
  * include:                               Including Patterns. (line    6)
  * INCLUDE_DEFAULTS:                      Driver.             (line  331)
  * inclusive-or, bitwise:                 Arithmetic.         (line  169)
  * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  194)
- * INCOMING_REGNO:                        Register Basics.    (line  129)
  * INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   76)
  * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  133)
  * INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  190)
  * INDEX_REG_CLASS:                       Register Classes.   (line  149)
--- 57072,57095 ----
  * IFN_VEC_WIDEN_PLUS_HI:                 Vectors.            (line    6)
  * IFN_VEC_WIDEN_PLUS_LO:                 Vectors.            (line    6)
  * IFN_VEC_WIDEN_PLUS_ODD:                Vectors.            (line    6)
  * IMAGPART_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
  * Immediate Uses:                        SSA Operands.       (line  258)
  * immediate_operand:                     Machine-Independent Predicates.
                                                               (line   10)
  * IMMEDIATE_PREFIX:                      Instruction Output. (line  153)
+ * in_struct:                             Flags.              (line  254)
+ * in_struct, in code_label and note:     Flags.              (line   48)
+ * in_struct, in insn and jump_insn and call_insn: Flags.     (line   38)
+ * in_struct, in insn, call_insn, jump_insn and jump_table_data: Flags.
+                                                              (line  162)
+ * in_struct, in subreg:                  Flags.              (line  201)
  * include:                               Including Patterns. (line    6)
  * INCLUDE_DEFAULTS:                      Driver.             (line  331)
  * inclusive-or, bitwise:                 Arithmetic.         (line  169)
  * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  194)
  * INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   76)
+ * INCOMING_REGNO:                        Register Basics.    (line  129)
  * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  133)
  * INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  190)
  * INDEX_REG_CLASS:                       Register Classes.   (line  149)
*************** Concept Index
*** 57090,57098 ****
  * indirect_operand:                      Machine-Independent Predicates.
                                                               (line   70)
  * INDIRECT_REF:                          Storage References. (line    6)
- * initialization routines:               Initialization.     (line    6)
- * INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   68)
- * INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   75)
  * INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  106)
  * INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  152)
  * INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  180)
--- 57097,57102 ----
*************** Concept Index
*** 57106,57111 ****
--- 57110,57118 ----
  * INIT_SECTION_ASM_OP:                   Sections.           (line   90)
  * INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
                                                               (line    9)
+ * INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   68)
+ * INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   75)
+ * initialization routines:               Initialization.     (line    6)
  * inlining:                              Target Attributes.  (line  124)
  * insert_insn_on_edge:                   Maintaining the CFG.
                                                               (line  104)
*************** Concept Index
*** 57123,57133 ****
  * insn lengths, computing:               Insn Lengths.       (line    6)
  * insn notes, notes:                     Basic Blocks.       (line   52)
  * insn splitting:                        Insn Splitting.     (line    6)
- * insn-attr.h:                           Defining Attributes.
-                                                              (line   34)
- * insns:                                 Insns.              (line    6)
- * insns, generating:                     RTL Template.       (line    6)
- * insns, recognizing:                    RTL Template.       (line    6)
  * INSN_ANNULLED_BRANCH_P:                Flags.              (line   28)
  * INSN_BASE_REG_CLASS:                   Register Classes.   (line  141)
  * INSN_CODE:                             Insns.              (line  318)
--- 57130,57135 ----
*************** Concept Index
*** 57139,57144 ****
--- 57141,57151 ----
  * INSN_SETS_ARE_DELAYED:                 Misc.               (line  493)
  * INSN_UID:                              Insns.              (line   23)
  * INSN_VAR_LOCATION:                     Insns.              (line  247)
+ * insn-attr.h:                           Defining Attributes.
+                                                              (line   34)
+ * insns:                                 Insns.              (line    6)
+ * insns, generating:                     RTL Template.       (line    6)
+ * insns, recognizing:                    RTL Template.       (line    6)
  * instruction attributes:                Insn Attributes.    (line    6)
  * instruction latency time:              Processor pipeline description.
                                                               (line    6)
*************** Concept Index
*** 57154,57159 ****
--- 57161,57175 ----
  * insvM instruction pattern:             Standard Names.     (line 2033)
  * insvmisalignM instruction pattern:     Standard Names.     (line 2043)
  * int iterators in .md files:            Int Iterators.      (line    6)
+ * INT_FAST16_TYPE:                       Type Layout.        (line  226)
+ * INT_FAST32_TYPE:                       Type Layout.        (line  227)
+ * INT_FAST64_TYPE:                       Type Layout.        (line  228)
+ * INT_FAST8_TYPE:                        Type Layout.        (line  225)
+ * INT_LEAST16_TYPE:                      Type Layout.        (line  218)
+ * INT_LEAST32_TYPE:                      Type Layout.        (line  219)
+ * INT_LEAST64_TYPE:                      Type Layout.        (line  220)
+ * INT_LEAST8_TYPE:                       Type Layout.        (line  217)
+ * INT_TYPE_SIZE:                         Type Layout.        (line   11)
  * INT16_TYPE:                            Type Layout.        (line  210)
  * INT32_TYPE:                            Type Layout.        (line  211)
  * INT64_TYPE:                            Type Layout.        (line  212)
*************** Concept Index
*** 57170,57192 ****
  * INTMAX_TYPE:                           Type Layout.        (line  186)
  * INTPTR_TYPE:                           Type Layout.        (line  233)
  * introduction:                          Top.                (line    6)
- * INT_FAST16_TYPE:                       Type Layout.        (line  226)
- * INT_FAST32_TYPE:                       Type Layout.        (line  227)
- * INT_FAST64_TYPE:                       Type Layout.        (line  228)
- * INT_FAST8_TYPE:                        Type Layout.        (line  225)
- * INT_LEAST16_TYPE:                      Type Layout.        (line  218)
- * INT_LEAST32_TYPE:                      Type Layout.        (line  219)
- * INT_LEAST64_TYPE:                      Type Layout.        (line  220)
- * INT_LEAST8_TYPE:                       Type Layout.        (line  217)
- * INT_TYPE_SIZE:                         Type Layout.        (line   11)
  * INVOKE__main:                          Macros for Initialization.
                                                               (line   50)
- * in_struct:                             Flags.              (line  254)
- * in_struct, in code_label and note:     Flags.              (line   48)
- * in_struct, in insn and jump_insn and call_insn: Flags.     (line   38)
- * in_struct, in insn, call_insn, jump_insn and jump_table_data: Flags.
-                                                              (line  162)
- * in_struct, in subreg:                  Flags.              (line  201)
  * ior:                                   Arithmetic.         (line  169)
  * ior and attributes:                    Expressions.        (line   50)
  * ior, canonicalization of:              Insn Canonicalizations.
--- 57186,57193 ----
*************** Concept Index
*** 57194,57200 ****
  * iorM3 instruction pattern:             Standard Names.     (line  629)
  * IPA passes:                            IPA passes.         (line    6)
  * IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   44)
- * issignalingM2 instruction pattern:     Standard Names.     (line 1500)
  * is_a:                                  Machine Modes.      (line  351)
  * IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  129)
  * is_gimple_addressable:                 Logical Operators.  (line  112)
--- 57195,57200 ----
*************** Concept Index
*** 57210,57215 ****
--- 57210,57216 ----
  * is_gimple_min_invariant:               Logical Operators.  (line  130)
  * is_gimple_omp:                         Logical Operators.  (line  165)
  * is_gimple_val:                         Logical Operators.  (line  106)
+ * issignalingM2 instruction pattern:     Standard Names.     (line 1500)
  * iterators in .md files:                Iterators.          (line    6)
  * IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
  * IV analysis on RTL:                    loop-iv.            (line    6)
*************** Concept Index
*** 57219,57228 ****
  * jump instruction pattern:              Standard Names.     (line 2357)
  * jump instruction patterns:             Jump Patterns.      (line    6)
  * jump instructions and set:             Side Effects.       (line   49)
- * jump, in call_insn:                    Flags.              (line  175)
- * jump, in insn:                         Flags.              (line  171)
- * jump, in mem:                          Flags.              (line   59)
- * Jumps:                                 Jumps.              (line    6)
  * JUMP_ALIGN:                            Alignment Output.   (line    8)
  * jump_insn:                             Insns.              (line   73)
  * jump_insn and /f:                      Flags.              (line  135)
--- 57220,57225 ----
*************** Concept Index
*** 57232,57305 ****
  * jump_insn and /u:                      Flags.              (line   28)
  * jump_insn and /v:                      Flags.              (line   33)
  * JUMP_LABEL:                            Insns.              (line   80)
- * JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  155)
  * jump_table_data:                       Insns.              (line  166)
  * jump_table_data and /s:                Flags.              (line  162)
  * jump_table_data and /v:                Flags.              (line   33)
  * LABEL_ALIGN:                           Alignment Output.   (line   42)
  * LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   21)
- * LABEL_ALTERNATE_NAME:                  Edges.              (line  179)
  * LABEL_ALT_ENTRY_P:                     Insns.              (line  146)
  * LABEL_DECL:                            Declarations.       (line    6)
  * LABEL_KIND:                            Insns.              (line  146)
  * LABEL_NUSES:                           Insns.              (line  142)
  * LABEL_PRESERVE_P:                      Flags.              (line   48)
  * label_ref:                             Constants.          (line  213)
  * label_ref and /v:                      Flags.              (line   54)
- * label_ref, RTL sharing:                Sharing.            (line   36)
  * LABEL_REF_NONLOCAL_P:                  Flags.              (line   54)
  * language-dependent trees:              Language-dependent trees.
                                                               (line    6)
  * language-independent intermediate representation: Parsing pass.
                                                               (line   13)
- * lang_hooks.gimplify_expr:              Gimplification pass.
-                                                              (line   18)
- * lang_hooks.parse_file:                 Parsing pass.       (line    6)
  * large return values:                   Aggregate Return.   (line    6)
  * LAST_STACK_REG:                        Stack Registers.    (line   30)
  * LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
  * late IPA passes:                       Late IPA passes.    (line    6)
  * lceilMN2:                              Standard Names.     (line 1480)
  * LCSSA:                                 LCSSA.              (line    6)
- * LDD_SUFFIX:                            Macros for Initialization.
-                                                              (line  129)
- * ldexpM3 instruction pattern:           Standard Names.     (line 1242)
  * LD_FINI_SWITCH:                        Macros for Initialization.
                                                               (line   28)
  * LD_INIT_SWITCH:                        Macros for Initialization.
                                                               (line   24)
  * le:                                    Comparisons.        (line   66)
  * le and attributes:                     Expressions.        (line   83)
  * leaf functions:                        Leaf Functions.     (line    6)
  * leaf_function_p:                       Standard Names.     (line 2445)
- * LEAF_REGISTERS:                        Leaf Functions.     (line   23)
  * LEAF_REG_REMAP:                        Leaf Functions.     (line   37)
  * left rotate:                           Arithmetic.         (line  201)
  * left shift:                            Arithmetic.         (line  179)
  * LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
  * LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  158)
- * length:                                GTY Options.        (line   47)
  * len_fold_extract_last_M instruction pattern: Standard Names.
                                                               (line  765)
  * len_load_M instruction pattern:        Standard Names.     (line  499)
  * len_store_M instruction pattern:       Standard Names.     (line  521)
  * less than:                             Comparisons.        (line   58)
  * less than or equal:                    Comparisons.        (line   66)
  * leu:                                   Comparisons.        (line   66)
  * leu and attributes:                    Expressions.        (line   83)
- * LE_EXPR:                               Unary and Binary Expressions.
-                                                              (line    6)
  * lfloorMN2:                             Standard Names.     (line 1475)
  * LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
  * LIBCALL_VALUE:                         Scalar Return.      (line   56)
  * libgcc.a:                              Library Calls.      (line    6)
  * LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
  * LIBGCC2_GNU_PREFIX:                    Type Layout.        (line  102)
  * LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line 1091)
- * LIBGCC_SPEC:                           Driver.             (line  115)
  * library subroutine names:              Library Calls.      (line    6)
  * LIBRARY_PATH_ENV:                      Misc.               (line  550)
- * LIB_SPEC:                              Driver.             (line  107)
  * LIMIT_RELOAD_CLASS:                    Register Classes.   (line  320)
  * LINK_COMMAND_SPEC:                     Driver.             (line  240)
  * LINK_EH_SPEC:                          Driver.             (line  142)
--- 57229,57306 ----
  * jump_insn and /u:                      Flags.              (line   28)
  * jump_insn and /v:                      Flags.              (line   33)
  * JUMP_LABEL:                            Insns.              (line   80)
  * jump_table_data:                       Insns.              (line  166)
  * jump_table_data and /s:                Flags.              (line  162)
  * jump_table_data and /v:                Flags.              (line   33)
+ * JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  155)
+ * jump, in call_insn:                    Flags.              (line  175)
+ * jump, in insn:                         Flags.              (line  171)
+ * jump, in mem:                          Flags.              (line   59)
+ * Jumps:                                 Jumps.              (line    6)
  * LABEL_ALIGN:                           Alignment Output.   (line   42)
  * LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   21)
  * LABEL_ALT_ENTRY_P:                     Insns.              (line  146)
+ * LABEL_ALTERNATE_NAME:                  Edges.              (line  179)
  * LABEL_DECL:                            Declarations.       (line    6)
  * LABEL_KIND:                            Insns.              (line  146)
  * LABEL_NUSES:                           Insns.              (line  142)
  * LABEL_PRESERVE_P:                      Flags.              (line   48)
  * label_ref:                             Constants.          (line  213)
  * label_ref and /v:                      Flags.              (line   54)
  * LABEL_REF_NONLOCAL_P:                  Flags.              (line   54)
+ * label_ref, RTL sharing:                Sharing.            (line   36)
+ * lang_hooks.gimplify_expr:              Gimplification pass.
+                                                              (line   18)
+ * lang_hooks.parse_file:                 Parsing pass.       (line    6)
  * language-dependent trees:              Language-dependent trees.
                                                               (line    6)
  * language-independent intermediate representation: Parsing pass.
                                                               (line   13)
  * large return values:                   Aggregate Return.   (line    6)
  * LAST_STACK_REG:                        Stack Registers.    (line   30)
  * LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
  * late IPA passes:                       Late IPA passes.    (line    6)
  * lceilMN2:                              Standard Names.     (line 1480)
  * LCSSA:                                 LCSSA.              (line    6)
  * LD_FINI_SWITCH:                        Macros for Initialization.
                                                               (line   28)
  * LD_INIT_SWITCH:                        Macros for Initialization.
                                                               (line   24)
+ * LDD_SUFFIX:                            Macros for Initialization.
+                                                              (line  129)
+ * ldexpM3 instruction pattern:           Standard Names.     (line 1242)
  * le:                                    Comparisons.        (line   66)
  * le and attributes:                     Expressions.        (line   83)
+ * LE_EXPR:                               Unary and Binary Expressions.
+                                                              (line    6)
  * leaf functions:                        Leaf Functions.     (line    6)
  * leaf_function_p:                       Standard Names.     (line 2445)
  * LEAF_REG_REMAP:                        Leaf Functions.     (line   37)
+ * LEAF_REGISTERS:                        Leaf Functions.     (line   23)
  * left rotate:                           Arithmetic.         (line  201)
  * left shift:                            Arithmetic.         (line  179)
  * LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
  * LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  158)
  * len_fold_extract_last_M instruction pattern: Standard Names.
                                                               (line  765)
  * len_load_M instruction pattern:        Standard Names.     (line  499)
  * len_store_M instruction pattern:       Standard Names.     (line  521)
+ * length:                                GTY Options.        (line   47)
  * less than:                             Comparisons.        (line   58)
  * less than or equal:                    Comparisons.        (line   66)
  * leu:                                   Comparisons.        (line   66)
  * leu and attributes:                    Expressions.        (line   83)
  * lfloorMN2:                             Standard Names.     (line 1475)
+ * LIB_SPEC:                              Driver.             (line  107)
  * LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
  * LIBCALL_VALUE:                         Scalar Return.      (line   56)
+ * LIBGCC_SPEC:                           Driver.             (line  115)
  * libgcc.a:                              Library Calls.      (line    6)
  * LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
  * LIBGCC2_GNU_PREFIX:                    Type Layout.        (line  102)
  * LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line 1091)
  * library subroutine names:              Library Calls.      (line    6)
  * LIBRARY_PATH_ENV:                      Misc.               (line  550)
  * LIMIT_RELOAD_CLASS:                    Register Classes.   (line  320)
  * LINK_COMMAND_SPEC:                     Driver.             (line  240)
  * LINK_EH_SPEC:                          Driver.             (line  142)
*************** Concept Index
*** 57309,57314 ****
--- 57310,57316 ----
  * list:                                  Containers.         (line    6)
  * Liveness representation:               Liveness information.
                                                               (line    6)
+ * lo_sum:                                Arithmetic.         (line   25)
  * load address instruction:              Simple Constraints. (line  162)
  * LOAD_EXTEND_OP:                        Misc.               (line   80)
  * load_multiple instruction pattern:     Standard Names.     (line  136)
*************** Concept Index
*** 57326,57335 ****
  * log2M2 instruction pattern:            Standard Names.     (line 1366)
  * logbM2 instruction pattern:            Standard Names.     (line 1373)
  * Logical Operators:                     Logical Operators.  (line    6)
- * logical-and, bitwise:                  Arithmetic.         (line  164)
  * LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  301)
  * logM2 instruction pattern:             Standard Names.     (line 1342)
- * longjmp and automatic variables:       Interface.          (line   52)
  * LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   92)
  * LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   57)
  * LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   72)
--- 57328,57336 ----
  * log2M2 instruction pattern:            Standard Names.     (line 1366)
  * logbM2 instruction pattern:            Standard Names.     (line 1373)
  * Logical Operators:                     Logical Operators.  (line    6)
  * LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  301)
+ * logical-and, bitwise:                  Arithmetic.         (line  164)
  * logM2 instruction pattern:             Standard Names.     (line 1342)
  * LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   92)
  * LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   57)
  * LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   72)
*************** Concept Index
*** 57337,57375 ****
  * LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   77)
  * LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   32)
  * LONG_TYPE_SIZE:                        Type Layout.        (line   21)
  * Loop analysis:                         Loop representation.
                                                               (line    6)
  * Loop manipulation:                     Loop manipulation.  (line    6)
  * Loop querying:                         Loop querying.      (line    6)
  * Loop representation:                   Loop representation.
                                                               (line    6)
- * Loop-closed SSA form:                  LCSSA.              (line    6)
- * looping instruction patterns:          Looping Patterns.   (line    6)
  * LOOP_ALIGN:                            Alignment Output.   (line   29)
  * LOOP_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * lowering, language-dependent intermediate representation: Parsing pass.
                                                               (line   13)
- * lo_sum:                                Arithmetic.         (line   25)
  * lrintMN2:                              Standard Names.     (line 1465)
  * LROTATE_EXPR:                          Unary and Binary Expressions.
                                                               (line    6)
  * lroundMN2:                             Standard Names.     (line 1470)
- * lshiftrt:                              Arithmetic.         (line  196)
- * lshiftrt and attributes:               Expressions.        (line   83)
  * LSHIFT_EXPR:                           Unary and Binary Expressions.
                                                               (line    6)
  * lshrM3 instruction pattern:            Standard Names.     (line 1154)
  * lt:                                    Comparisons.        (line   58)
  * lt and attributes:                     Expressions.        (line   83)
  * LTGT_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * lto:                                   LTO.                (line    6)
  * ltrans:                                LTO.                (line    6)
  * ltu:                                   Comparisons.        (line   58)
- * LT_EXPR:                               Unary and Binary Expressions.
-                                                              (line    6)
  * m in constraint:                       Simple Constraints. (line   17)
  * machine attributes:                    Target Attributes.  (line    6)
  * machine description macros:            Target Macros.      (line    6)
  * machine descriptions:                  Machine Desc.       (line    6)
--- 57338,57377 ----
  * LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   77)
  * LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   32)
  * LONG_TYPE_SIZE:                        Type Layout.        (line   21)
+ * longjmp and automatic variables:       Interface.          (line   52)
  * Loop analysis:                         Loop representation.
                                                               (line    6)
  * Loop manipulation:                     Loop manipulation.  (line    6)
  * Loop querying:                         Loop querying.      (line    6)
  * Loop representation:                   Loop representation.
                                                               (line    6)
  * LOOP_ALIGN:                            Alignment Output.   (line   29)
  * LOOP_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
+ * Loop-closed SSA form:                  LCSSA.              (line    6)
+ * looping instruction patterns:          Looping Patterns.   (line    6)
  * lowering, language-dependent intermediate representation: Parsing pass.
                                                               (line   13)
  * lrintMN2:                              Standard Names.     (line 1465)
  * LROTATE_EXPR:                          Unary and Binary Expressions.
                                                               (line    6)
  * lroundMN2:                             Standard Names.     (line 1470)
  * LSHIFT_EXPR:                           Unary and Binary Expressions.
                                                               (line    6)
+ * lshiftrt:                              Arithmetic.         (line  196)
+ * lshiftrt and attributes:               Expressions.        (line   83)
  * lshrM3 instruction pattern:            Standard Names.     (line 1154)
  * lt:                                    Comparisons.        (line   58)
  * lt and attributes:                     Expressions.        (line   83)
+ * LT_EXPR:                               Unary and Binary Expressions.
+                                                              (line    6)
  * LTGT_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * lto:                                   LTO.                (line    6)
  * ltrans:                                LTO.                (line    6)
  * ltu:                                   Comparisons.        (line   58)
  * m in constraint:                       Simple Constraints. (line   17)
+ * MACH_DEP_SECTION_ASM_FLAG:             Sections.           (line  120)
  * machine attributes:                    Target Attributes.  (line    6)
  * machine description macros:            Target Macros.      (line    6)
  * machine descriptions:                  Machine Desc.       (line    6)
*************** Concept Index
*** 57378,57400 ****
  * machine modes:                         Machine Modes.      (line    6)
  * machine specific constraints:          Machine Constraints.
                                                               (line    6)
  * machine-independent predicates:        Machine-Independent Predicates.
                                                               (line    6)
- * machine_mode:                          Machine Modes.      (line    6)
- * MACH_DEP_SECTION_ASM_FLAG:             Sections.           (line  120)
  * macros, target description:            Target Macros.      (line    6)
  * maddMN4 instruction pattern:           Standard Names.     (line 1075)
- * makefile fragment:                     Fragments.          (line    6)
- * makefile targets:                      Makefile.           (line    6)
  * MAKE_DECL_ONE_ONLY:                    Label Output.       (line  281)
  * make_safe_from:                        Expander Definitions.
                                                               (line  150)
  * MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  209)
  * Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
                                                               (line    6)
  * marking roots:                         GGC Roots.          (line    6)
- * maskloadMN instruction pattern:        Standard Names.     (line  485)
- * maskstoreMN instruction pattern:       Standard Names.     (line  492)
  * mask_fold_left_plus_M instruction pattern: Standard Names. (line  777)
  * mask_gather_loadMN instruction pattern: Standard Names.    (line  278)
  * mask_len_fold_left_plus_M instruction pattern: Standard Names.
--- 57380,57399 ----
  * machine modes:                         Machine Modes.      (line    6)
  * machine specific constraints:          Machine Constraints.
                                                               (line    6)
+ * machine_mode:                          Machine Modes.      (line    6)
  * machine-independent predicates:        Machine-Independent Predicates.
                                                               (line    6)
  * macros, target description:            Target Macros.      (line    6)
  * maddMN4 instruction pattern:           Standard Names.     (line 1075)
  * MAKE_DECL_ONE_ONLY:                    Label Output.       (line  281)
  * make_safe_from:                        Expander Definitions.
                                                               (line  150)
+ * makefile fragment:                     Fragments.          (line    6)
+ * makefile targets:                      Makefile.           (line    6)
  * MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  209)
  * Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
                                                               (line    6)
  * marking roots:                         GGC Roots.          (line    6)
  * mask_fold_left_plus_M instruction pattern: Standard Names. (line  777)
  * mask_gather_loadMN instruction pattern: Standard Names.    (line  278)
  * mask_len_fold_left_plus_M instruction pattern: Standard Names.
*************** Concept Index
*** 57408,57445 ****
  * MASK_RETURN_ADDR:                      Exception Region Output.
                                                               (line   35)
  * mask_scatter_storeMN instruction pattern: Standard Names.  (line  310)
  * Match and Simplify:                    Match and Simplify. (line    6)
- * matching constraint:                   Simple Constraints. (line  140)
- * matching operands:                     Output Template.    (line   49)
  * match_dup:                             RTL Template.       (line   73)
  * match_dup <1>:                         define_peephole2.   (line   28)
  * match_dup and attributes:              Insn Lengths.       (line   16)
  * match_operand:                         RTL Template.       (line   16)
  * match_operand and attributes:          Expressions.        (line   55)
  * match_operator:                        RTL Template.       (line   95)
- * match_op_dup:                          RTL Template.       (line  163)
- * match_parallel:                        RTL Template.       (line  172)
  * match_par_dup:                         RTL Template.       (line  219)
  * match_scratch:                         RTL Template.       (line   58)
  * match_scratch <1>:                     define_peephole2.   (line   28)
  * match_test and attributes:             Expressions.        (line   64)
  * math library:                          Soft float library routines.
                                                               (line    6)
  * math, in RTL:                          Arithmetic.         (line    6)
  * matherr:                               Library Calls.      (line   59)
! * MATH_LIBRARY:                          Misc.               (line  543)
! * maxM3 instruction pattern:             Standard Names.     (line  704)
  * MAX_BITSIZE_MODE_ANY_INT:              Machine Modes.      (line  448)
  * MAX_BITSIZE_MODE_ANY_MODE:             Machine Modes.      (line  454)
- * MAX_BITS_PER_WORD:                     Storage Layout.     (line   54)
  * MAX_CONDITIONAL_EXECUTE:               Misc.               (line  565)
  * MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  489)
  * MAX_MOVE_MAX:                          Misc.               (line  127)
  * MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  247)
  * MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
  * MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  241)
! * maybe_undef:                           GTY Options.        (line  185)
  * may_trap_p, tree_could_trap_p:         Edges.              (line  114)
  * mcount:                                Profiling.          (line   12)
  * MD_EXEC_PREFIX:                        Driver.             (line  271)
  * MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line  104)
--- 57407,57446 ----
  * MASK_RETURN_ADDR:                      Exception Region Output.
                                                               (line   35)
  * mask_scatter_storeMN instruction pattern: Standard Names.  (line  310)
+ * maskloadMN instruction pattern:        Standard Names.     (line  485)
+ * maskstoreMN instruction pattern:       Standard Names.     (line  492)
  * Match and Simplify:                    Match and Simplify. (line    6)
  * match_dup:                             RTL Template.       (line   73)
  * match_dup <1>:                         define_peephole2.   (line   28)
  * match_dup and attributes:              Insn Lengths.       (line   16)
+ * match_op_dup:                          RTL Template.       (line  163)
  * match_operand:                         RTL Template.       (line   16)
  * match_operand and attributes:          Expressions.        (line   55)
  * match_operator:                        RTL Template.       (line   95)
  * match_par_dup:                         RTL Template.       (line  219)
+ * match_parallel:                        RTL Template.       (line  172)
  * match_scratch:                         RTL Template.       (line   58)
  * match_scratch <1>:                     define_peephole2.   (line   28)
  * match_test and attributes:             Expressions.        (line   64)
+ * matching constraint:                   Simple Constraints. (line  140)
+ * matching operands:                     Output Template.    (line   49)
  * math library:                          Soft float library routines.
                                                               (line    6)
+ * MATH_LIBRARY:                          Misc.               (line  543)
  * math, in RTL:                          Arithmetic.         (line    6)
  * matherr:                               Library Calls.      (line   59)
! * MAX_BITS_PER_WORD:                     Storage Layout.     (line   54)
  * MAX_BITSIZE_MODE_ANY_INT:              Machine Modes.      (line  448)
  * MAX_BITSIZE_MODE_ANY_MODE:             Machine Modes.      (line  454)
  * MAX_CONDITIONAL_EXECUTE:               Misc.               (line  565)
  * MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  489)
  * MAX_MOVE_MAX:                          Misc.               (line  127)
  * MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  247)
  * MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
  * MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  241)
! * maxM3 instruction pattern:             Standard Names.     (line  704)
  * may_trap_p, tree_could_trap_p:         Edges.              (line  114)
+ * maybe_undef:                           GTY Options.        (line  185)
  * mcount:                                Profiling.          (line   12)
  * MD_EXEC_PREFIX:                        Driver.             (line  271)
  * MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line  104)
*************** Concept Index
*** 57452,57466 ****
  * mem and /j:                            Flags.              (line   59)
  * mem and /u:                            Flags.              (line   78)
  * mem and /v:                            Flags.              (line   65)
- * mem, RTL sharing:                      Sharing.            (line   41)
- * memory model:                          Memory model.       (line    6)
- * memory reference, nonoffsettable:      Simple Constraints. (line  254)
- * memory references in constraints:      Simple Constraints. (line   17)
- * memory_barrier instruction pattern:    Standard Names.     (line 2829)
- * memory_blockage instruction pattern:   Standard Names.     (line 2820)
- * MEMORY_MOVE_COST:                      Costs.              (line   53)
- * memory_operand:                        Machine-Independent Predicates.
-                                                              (line   57)
  * MEM_ADDR_SPACE:                        Special Accessors.  (line   48)
  * MEM_ALIAS_SET:                         Special Accessors.  (line    9)
  * MEM_ALIGN:                             Special Accessors.  (line   45)
--- 57453,57458 ----
*************** Concept Index
*** 57476,57492 ****
  * MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   35)
  * mem_thread_fence instruction pattern:  Standard Names.     (line 3138)
  * MEM_VOLATILE_P:                        Flags.              (line   65)
  * METHOD_TYPE:                           Types.              (line    6)
  * MINIMUM_ALIGNMENT:                     Storage Layout.     (line  357)
  * MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  217)
  * minM3 instruction pattern:             Standard Names.     (line  704)
  * minus:                                 Arithmetic.         (line   38)
  * minus and attributes:                  Expressions.        (line   83)
- * minus, canonicalization of:            Insn Canonicalizations.
-                                                              (line   33)
  * MINUS_EXPR:                            Unary and Binary Expressions.
                                                               (line    6)
! * MIN_UNITS_PER_WORD:                    Storage Layout.     (line   64)
  * MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
  * miscellaneous register hooks:          Miscellaneous Register Hooks.
                                                               (line    6)
--- 57468,57493 ----
  * MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   35)
  * mem_thread_fence instruction pattern:  Standard Names.     (line 3138)
  * MEM_VOLATILE_P:                        Flags.              (line   65)
+ * mem, RTL sharing:                      Sharing.            (line   41)
+ * memory model:                          Memory model.       (line    6)
+ * memory reference, nonoffsettable:      Simple Constraints. (line  254)
+ * memory references in constraints:      Simple Constraints. (line   17)
+ * memory_barrier instruction pattern:    Standard Names.     (line 2829)
+ * memory_blockage instruction pattern:   Standard Names.     (line 2820)
+ * MEMORY_MOVE_COST:                      Costs.              (line   53)
+ * memory_operand:                        Machine-Independent Predicates.
+                                                              (line   57)
  * METHOD_TYPE:                           Types.              (line    6)
+ * MIN_UNITS_PER_WORD:                    Storage Layout.     (line   64)
  * MINIMUM_ALIGNMENT:                     Storage Layout.     (line  357)
  * MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  217)
  * minM3 instruction pattern:             Standard Names.     (line  704)
  * minus:                                 Arithmetic.         (line   38)
  * minus and attributes:                  Expressions.        (line   83)
  * MINUS_EXPR:                            Unary and Binary Expressions.
                                                               (line    6)
! * minus, canonicalization of:            Insn Canonicalizations.
!                                                              (line   33)
  * MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
  * miscellaneous register hooks:          Miscellaneous Register Hooks.
                                                               (line    6)
*************** Concept Index
*** 57536,57541 ****
--- 57537,57546 ----
  * mulsidi3 instruction pattern:          Standard Names.     (line 1052)
  * mult:                                  Arithmetic.         (line   92)
  * mult and attributes:                   Expressions.        (line   83)
+ * MULT_EXPR:                             Unary and Binary Expressions.
+                                                              (line    6)
+ * MULT_HIGHPART_EXPR:                    Unary and Binary Expressions.
+                                                              (line    6)
  * mult, canonicalization of:             Insn Canonicalizations.
                                                               (line   33)
  * mult, canonicalization of <1>:         Insn Canonicalizations.
*************** Concept Index
*** 57556,57578 ****
  * multiplication high part:              Arithmetic.         (line  111)
  * multiplication with signed saturation: Arithmetic.         (line   92)
  * multiplication with unsigned saturation: Arithmetic.       (line   92)
- * MULT_EXPR:                             Unary and Binary Expressions.
-                                                              (line    6)
- * MULT_HIGHPART_EXPR:                    Unary and Binary Expressions.
-                                                              (line    6)
  * mulvM4 instruction pattern:            Standard Names.     (line  645)
  * n in constraint:                       Simple Constraints. (line   73)
  * name:                                  Identifiers.        (line    6)
  * named address spaces:                  Named Address Spaces.
                                                               (line    6)
  * named patterns and conditions:         Patterns.           (line   61)
  * names, pattern:                        Standard Names.     (line    6)
- * namespace, scope:                      Namespaces.         (line    6)
  * NAMESPACE_DECL:                        Declarations.       (line    6)
  * NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
  * NATIVE_SYSTEM_HEADER_COMPONENT:        Driver.             (line  326)
  * ne:                                    Comparisons.        (line   46)
  * ne and attributes:                     Expressions.        (line   83)
  * nearbyintM2 instruction pattern:       Standard Names.     (line 1449)
  * neg:                                   Arithmetic.         (line   81)
  * neg and attributes:                    Expressions.        (line   83)
--- 57561,57582 ----
  * multiplication high part:              Arithmetic.         (line  111)
  * multiplication with signed saturation: Arithmetic.         (line   92)
  * multiplication with unsigned saturation: Arithmetic.       (line   92)
  * mulvM4 instruction pattern:            Standard Names.     (line  645)
  * n in constraint:                       Simple Constraints. (line   73)
+ * N_REG_CLASSES:                         Register Classes.   (line   82)
  * name:                                  Identifiers.        (line    6)
  * named address spaces:                  Named Address Spaces.
                                                               (line    6)
  * named patterns and conditions:         Patterns.           (line   61)
  * names, pattern:                        Standard Names.     (line    6)
  * NAMESPACE_DECL:                        Declarations.       (line    6)
  * NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
+ * namespace, scope:                      Namespaces.         (line    6)
  * NATIVE_SYSTEM_HEADER_COMPONENT:        Driver.             (line  326)
  * ne:                                    Comparisons.        (line   46)
  * ne and attributes:                     Expressions.        (line   83)
+ * NE_EXPR:                               Unary and Binary Expressions.
+                                                              (line    6)
  * nearbyintM2 instruction pattern:       Standard Names.     (line 1449)
  * neg:                                   Arithmetic.         (line   81)
  * neg and attributes:                    Expressions.        (line   83)
*************** Concept Index
*** 57591,57601 ****
  * next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks.   (line   25)
  * NEXT_INSN:                             Insns.              (line   30)
  * NEXT_OBJC_RUNTIME:                     Library Calls.      (line  110)
- * NE_EXPR:                               Unary and Binary Expressions.
-                                                              (line    6)
  * nil:                                   RTL Objects.        (line   73)
  * NM_FLAGS:                              Macros for Initialization.
                                                               (line  118)
  * nondeterministic finite state automaton: Processor pipeline description.
                                                               (line  304)
  * nonimmediate_operand:                  Machine-Independent Predicates.
--- 57595,57610 ----
  * next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks.   (line   25)
  * NEXT_INSN:                             Insns.              (line   30)
  * NEXT_OBJC_RUNTIME:                     Library Calls.      (line  110)
  * nil:                                   RTL Objects.        (line   73)
  * NM_FLAGS:                              Macros for Initialization.
                                                               (line  118)
+ * NO_DOLLAR_IN_LABEL:                    Label Output.       (line   64)
+ * NO_DOT_IN_LABEL:                       Label Output.       (line   70)
+ * NO_FUNCTION_CSE:                       Costs.              (line  296)
+ * NO_PROFILE_COUNTERS:                   Profiling.          (line   27)
+ * NO_REGS:                               Register Classes.   (line   17)
+ * NON_LVALUE_EXPR:                       Unary and Binary Expressions.
+                                                              (line    6)
  * nondeterministic finite state automaton: Processor pipeline description.
                                                               (line  304)
  * nonimmediate_operand:                  Machine-Independent Predicates.
*************** Concept Index
*** 57607,57614 ****
  * nonmemory_operand:                     Machine-Independent Predicates.
                                                               (line   96)
  * nonoffsettable memory reference:       Simple Constraints. (line  254)
- * NON_LVALUE_EXPR:                       Unary and Binary Expressions.
-                                                              (line    6)
  * nop instruction pattern:               Standard Names.     (line 2478)
  * NOP_EXPR:                              Unary and Binary Expressions.
                                                               (line    6)
--- 57616,57621 ----
*************** Concept Index
*** 57637,57654 ****
  * NOTE_SOURCE_FILE:                      Insns.              (line  183)
  * NOTE_VAR_LOCATION:                     Insns.              (line  225)
  * notMODEcc instruction pattern:         Standard Names.     (line 2299)
- * NO_DOLLAR_IN_LABEL:                    Label Output.       (line   64)
- * NO_DOT_IN_LABEL:                       Label Output.       (line   70)
- * NO_FUNCTION_CSE:                       Costs.              (line  296)
- * NO_PROFILE_COUNTERS:                   Profiling.          (line   27)
- * NO_REGS:                               Register Classes.   (line   17)
- * Number of iterations analysis:         Number of iterations.
-                                                              (line    6)
  * NUM_MACHINE_MODES:                     Machine Modes.      (line  387)
  * NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   35)
  * NUM_POLY_INT_COEFFS:                   Overview of poly_int.
                                                               (line   24)
! * N_REG_CLASSES:                         Register Classes.   (line   82)
  * o in constraint:                       Simple Constraints. (line   23)
  * OACC_CACHE:                            OpenACC.            (line    6)
  * OACC_DATA:                             OpenACC.            (line    6)
--- 57644,57655 ----
  * NOTE_SOURCE_FILE:                      Insns.              (line  183)
  * NOTE_VAR_LOCATION:                     Insns.              (line  225)
  * notMODEcc instruction pattern:         Standard Names.     (line 2299)
  * NUM_MACHINE_MODES:                     Machine Modes.      (line  387)
  * NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   35)
  * NUM_POLY_INT_COEFFS:                   Overview of poly_int.
                                                               (line   24)
! * Number of iterations analysis:         Number of iterations.
!                                                              (line    6)
  * o in constraint:                       Simple Constraints. (line   23)
  * OACC_CACHE:                            OpenACC.            (line    6)
  * OACC_DATA:                             OpenACC.            (line    6)
*************** Concept Index
*** 57665,57672 ****
  * OBJC_JBLEN:                            Misc.               (line 1086)
  * OBJECT_FORMAT_COFF:                    Macros for Initialization.
                                                               (line  104)
- * offsettable address:                   Simple Constraints. (line   23)
  * OFFSET_TYPE:                           Types.              (line    6)
  * OImode:                                Machine Modes.      (line   51)
  * OMP_ATOMIC:                            OpenMP.             (line    6)
  * OMP_CLAUSE:                            OpenMP.             (line    6)
--- 57666,57673 ----
  * OBJC_JBLEN:                            Misc.               (line 1086)
  * OBJECT_FORMAT_COFF:                    Macros for Initialization.
                                                               (line  104)
  * OFFSET_TYPE:                           Types.              (line    6)
+ * offsettable address:                   Simple Constraints. (line   23)
  * OImode:                                Machine Modes.      (line   51)
  * OMP_ATOMIC:                            OpenMP.             (line    6)
  * OMP_CLAUSE:                            OpenMP.             (line    6)
*************** Concept Index
*** 57696,57701 ****
--- 57697,57703 ----
  * operands:                              SSA Operands.       (line    6)
  * operands <1>:                          Patterns.           (line   67)
  * operator predicates:                   Predicates.         (line    6)
+ * opt_mode:                              Machine Modes.      (line  326)
  * optc-gen.awk:                          Options.            (line    6)
  * OPTGROUP_ALL:                          Optimization groups.
                                                               (line   28)
*************** Concept Index
*** 57719,57730 ****
  * Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
  * OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    8)
  * option specification files:            Options.            (line    6)
  * optional hardware or system features:  Run-time Target.    (line   59)
  * options, directory search:             Including Patterns. (line   46)
  * options, guidelines for:               Guidelines for Options.
                                                               (line    6)
- * OPTION_DEFAULT_SPECS:                  Driver.             (line   25)
- * opt_mode:                              Machine Modes.      (line  326)
  * order of register allocation:          Allocation Order.   (line    6)
  * ordered_comparison_operator:           Machine-Independent Predicates.
                                                               (line  115)
--- 57721,57731 ----
  * Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
  * OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    8)
  * option specification files:            Options.            (line    6)
+ * OPTION_DEFAULT_SPECS:                  Driver.             (line   25)
  * optional hardware or system features:  Run-time Target.    (line   59)
  * options, directory search:             Including Patterns. (line   46)
  * options, guidelines for:               Guidelines for Options.
                                                               (line    6)
  * order of register allocation:          Allocation Order.   (line    6)
  * ordered_comparison_operator:           Machine-Independent Predicates.
                                                               (line  115)
*************** Concept Index
*** 57734,57741 ****
  * ORIGINAL_REGNO:                        Special Accessors.  (line   53)
  * other register constraints:            Simple Constraints. (line  171)
  * outgoing_args_size:                    Stack Arguments.    (line   51)
- * OUTGOING_REGNO:                        Register Basics.    (line  136)
  * OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   82)
  * output of assembler code:              File Framework.     (line    6)
  * output statements:                     Output Statement.   (line    6)
  * output templates:                      Output Template.    (line    6)
--- 57735,57742 ----
  * ORIGINAL_REGNO:                        Special Accessors.  (line   53)
  * other register constraints:            Simple Constraints. (line  171)
  * outgoing_args_size:                    Stack Arguments.    (line   51)
  * OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   82)
+ * OUTGOING_REGNO:                        Register Basics.    (line  136)
  * output of assembler code:              File Framework.     (line    6)
  * output statements:                     Output Statement.   (line    6)
  * output templates:                      Output Template.    (line    6)
*************** Concept Index
*** 57748,57754 ****
  * OVL_NEXT:                              Functions for C++.  (line    6)
  * p in constraint:                       Simple Constraints. (line  162)
  * PAD_VARARGS_DOWN:                      Register Arguments. (line  224)
! * parallel:                              Side Effects.       (line  203)
  * parameters, c++ abi:                   C++ ABI.            (line    6)
  * parameters, d abi:                     D Language and ABI. (line    6)
  * parameters, miscellaneous:             Misc.               (line    6)
--- 57749,57755 ----
  * OVL_NEXT:                              Functions for C++.  (line    6)
  * p in constraint:                       Simple Constraints. (line  162)
  * PAD_VARARGS_DOWN:                      Register Arguments. (line  224)
! * parallel:                              Side Effects.       (line  202)
  * parameters, c++ abi:                   C++ ABI.            (line    6)
  * parameters, d abi:                     D Language and ABI. (line    6)
  * parameters, miscellaneous:             Misc.               (line    6)
*************** Concept Index
*** 57762,57770 ****
  * PARSE_LDD_OUTPUT:                      Macros for Initialization.
                                                               (line  133)
  * pass dumps:                            Passes.             (line    6)
  * passes and files of the compiler:      Passes.             (line    6)
  * passing arguments:                     Interface.          (line   36)
- * pass_duplicate_computed_gotos:         Edges.              (line  161)
  * PATH_SEPARATOR:                        Filesystem.         (line   31)
  * PATTERN:                               Insns.              (line  307)
  * pattern conditions:                    Patterns.           (line   55)
--- 57763,57771 ----
  * PARSE_LDD_OUTPUT:                      Macros for Initialization.
                                                               (line  133)
  * pass dumps:                            Passes.             (line    6)
+ * pass_duplicate_computed_gotos:         Edges.              (line  161)
  * passes and files of the compiler:      Passes.             (line    6)
  * passing arguments:                     Interface.          (line   36)
  * PATH_SEPARATOR:                        Filesystem.         (line   31)
  * PATTERN:                               Insns.              (line  307)
  * pattern conditions:                    Patterns.           (line   55)
*************** Concept Index
*** 57773,57785 ****
  * patterns:                              Patterns.           (line    6)
  * pc:                                    Regs and Memory.    (line  347)
  * pc and attributes:                     Insn Lengths.       (line   20)
  * pc, RTL sharing:                       Sharing.            (line   28)
  * PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  383)
  * PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
- * PC_REGNUM:                             Register Basics.    (line  150)
- * pc_rtx:                                Regs and Memory.    (line  352)
  * PDImode:                               Machine Modes.      (line   40)
! * peephole optimization, RTL representation: Side Effects.   (line  237)
  * peephole optimizer definitions:        Peephole Definitions.
                                                               (line    6)
  * per-function data:                     Per-Function Data.  (line    6)
--- 57774,57786 ----
  * patterns:                              Patterns.           (line    6)
  * pc:                                    Regs and Memory.    (line  347)
  * pc and attributes:                     Insn Lengths.       (line   20)
+ * PC_REGNUM:                             Register Basics.    (line  150)
+ * pc_rtx:                                Regs and Memory.    (line  352)
  * pc, RTL sharing:                       Sharing.            (line   28)
  * PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  383)
  * PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
  * PDImode:                               Machine Modes.      (line   40)
! * peephole optimization, RTL representation: Side Effects.   (line  236)
  * peephole optimizer definitions:        Peephole Definitions.
                                                               (line    6)
  * per-function data:                     Per-Function Data.  (line    6)
*************** Concept Index
*** 57787,57794 ****
  * PHI nodes:                             SSA.                (line   31)
  * phi nodes, RTL SSA:                    RTL SSA Phi Nodes.  (line    6)
  * PIC:                                   PIC.                (line    6)
- * PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   15)
  * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   25)
  * pipeline hazard recognizer:            Processor pipeline description.
                                                               (line    6)
  * pipeline hazard recognizer <1>:        Processor pipeline description.
--- 57788,57795 ----
  * PHI nodes:                             SSA.                (line   31)
  * phi nodes, RTL SSA:                    RTL SSA Phi Nodes.  (line    6)
  * PIC:                                   PIC.                (line    6)
  * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   25)
+ * PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   15)
  * pipeline hazard recognizer:            Processor pipeline description.
                                                               (line    6)
  * pipeline hazard recognizer <1>:        Processor pipeline description.
*************** Concept Index
*** 57796,57818 ****
  * Plugins:                               Plugins.            (line    6)
  * plus:                                  Arithmetic.         (line   14)
  * plus and attributes:                   Expressions.        (line   83)
- * plus, canonicalization of:             Insn Canonicalizations.
-                                                              (line   33)
  * PLUS_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * Pmode:                                 Misc.               (line  365)
  * pmode_register_operand:                Machine-Independent Predicates.
                                                               (line   34)
  * pointer:                               Types.              (line    6)
- * POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   76)
  * POINTER_DIFF_EXPR:                     Unary and Binary Expressions.
                                                               (line    6)
  * POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
                                                               (line    6)
  * POINTER_SIZE:                          Storage Layout.     (line   70)
  * POINTER_TYPE:                          Types.              (line    6)
! * polynomial integers:                   poly_int.           (line    6)
  * poly_int:                              poly_int.           (line    6)
  * poly_int, invariant range:             Overview of poly_int.
                                                               (line   31)
  * poly_int, main typedefs:               Overview of poly_int.
--- 57797,57820 ----
  * Plugins:                               Plugins.            (line    6)
  * plus:                                  Arithmetic.         (line   14)
  * plus and attributes:                   Expressions.        (line   83)
  * PLUS_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
+ * plus, canonicalization of:             Insn Canonicalizations.
+                                                              (line   33)
  * Pmode:                                 Misc.               (line  365)
  * pmode_register_operand:                Machine-Independent Predicates.
                                                               (line   34)
  * pointer:                               Types.              (line    6)
  * POINTER_DIFF_EXPR:                     Unary and Binary Expressions.
                                                               (line    6)
  * POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
                                                               (line    6)
  * POINTER_SIZE:                          Storage Layout.     (line   70)
  * POINTER_TYPE:                          Types.              (line    6)
! * POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   76)
  * poly_int:                              poly_int.           (line    6)
+ * POLY_INT_CST:                          Constant expressions.
+                                                              (line    6)
  * poly_int, invariant range:             Overview of poly_int.
                                                               (line   31)
  * poly_int, main typedefs:               Overview of poly_int.
*************** Concept Index
*** 57825,57852 ****
                                                               (line   32)
  * poly_int, use in target-specific code: Consequences of using poly_int.
                                                               (line   40)
! * POLY_INT_CST:                          Constant expressions.
!                                                              (line    6)
  * popcount:                              Arithmetic.         (line  244)
  * popcountM2 instruction pattern:        Standard Names.     (line 1728)
  * pops_args:                             Function Entry.     (line  111)
- * pop_operand:                           Machine-Independent Predicates.
-                                                              (line   87)
  * portability:                           Portability.        (line    6)
  * position independent code:             PIC.                (line    6)
- * POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
-                                                              (line    6)
- * POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
-                                                              (line    6)
  * post_dec:                              Incdec.             (line   25)
  * post_inc:                              Incdec.             (line   30)
  * POST_LINK_SPEC:                        Driver.             (line  236)
  * post_modify:                           Incdec.             (line   33)
  * post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
                                                               (line   34)
  * POWI_MAX_MULTS:                        Misc.               (line  970)
  * powM3 instruction pattern:             Standard Names.     (line 1397)
  * pragma:                                Misc.               (line  422)
  * PREDECREMENT_EXPR:                     Unary and Binary Expressions.
                                                               (line    6)
  * predefined macros:                     Run-time Target.    (line    6)
--- 57827,57857 ----
                                                               (line   32)
  * poly_int, use in target-specific code: Consequences of using poly_int.
                                                               (line   40)
! * polynomial integers:                   poly_int.           (line    6)
! * pop_operand:                           Machine-Independent Predicates.
!                                                              (line   87)
  * popcount:                              Arithmetic.         (line  244)
  * popcountM2 instruction pattern:        Standard Names.     (line 1728)
  * pops_args:                             Function Entry.     (line  111)
  * portability:                           Portability.        (line    6)
  * position independent code:             PIC.                (line    6)
  * post_dec:                              Incdec.             (line   25)
  * post_inc:                              Incdec.             (line   30)
  * POST_LINK_SPEC:                        Driver.             (line  236)
  * post_modify:                           Incdec.             (line   33)
  * post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
                                                               (line   34)
+ * POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
+                                                              (line    6)
+ * POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
+                                                              (line    6)
  * POWI_MAX_MULTS:                        Misc.               (line  970)
  * powM3 instruction pattern:             Standard Names.     (line 1397)
  * pragma:                                Misc.               (line  422)
+ * pre_dec:                               Incdec.             (line    8)
+ * PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  126)
+ * pre_inc:                               Incdec.             (line   22)
+ * pre_modify:                            Incdec.             (line   52)
  * PREDECREMENT_EXPR:                     Unary and Binary Expressions.
                                                               (line    6)
  * predefined macros:                     Run-time Target.    (line    6)
*************** Concept Index
*** 57859,57865 ****
  * PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   40)
  * PREFERRED_RELOAD_CLASS:                Register Classes.   (line  273)
  * PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  183)
! * prefetch:                              Side Effects.       (line  315)
  * prefetch and /v:                       Flags.              (line   92)
  * prefetch instruction pattern:          Standard Names.     (line 2797)
  * PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line   92)
--- 57864,57870 ----
  * PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   40)
  * PREFERRED_RELOAD_CLASS:                Register Classes.   (line  273)
  * PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  183)
! * prefetch:                              Side Effects.       (line  314)
  * prefetch and /v:                       Flags.              (line   92)
  * prefetch instruction pattern:          Standard Names.     (line 2797)
  * PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line   92)
*************** Concept Index
*** 57871,57880 ****
  * pretend_args_size:                     Function Entry.     (line  117)
  * prev_active_insn:                      define_peephole.    (line   60)
  * PREV_INSN:                             Insns.              (line   26)
- * pre_dec:                               Incdec.             (line    8)
- * PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  126)
- * pre_inc:                               Incdec.             (line   22)
- * pre_modify:                            Incdec.             (line   52)
  * PRINT_OPERAND:                         Instruction Output. (line   95)
  * PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  122)
  * PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  115)
--- 57876,57881 ----
*************** Concept Index
*** 57905,57916 ****
  * purge_dead_edges <1>:                  Maintaining the CFG.
                                                               (line   81)
  * push address instruction:              Simple Constraints. (line  162)
- * pushM1 instruction pattern:            Standard Names.     (line  616)
  * PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   28)
  * push_operand:                          Machine-Independent Predicates.
                                                               (line   80)
  * push_reload:                           Addressing Modes.   (line  184)
  * PUSH_ROUNDING:                         Stack Arguments.    (line   34)
  * PUT_CODE:                              RTL Objects.        (line   47)
  * PUT_MODE:                              Machine Modes.      (line  384)
  * PUT_REG_NOTE_KIND:                     Insns.              (line  349)
--- 57906,57917 ----
  * purge_dead_edges <1>:                  Maintaining the CFG.
                                                               (line   81)
  * push address instruction:              Simple Constraints. (line  162)
  * PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   28)
  * push_operand:                          Machine-Independent Predicates.
                                                               (line   80)
  * push_reload:                           Addressing Modes.   (line  184)
  * PUSH_ROUNDING:                         Stack Arguments.    (line   34)
+ * pushM1 instruction pattern:            Standard Names.     (line  616)
  * PUT_CODE:                              RTL Objects.        (line   47)
  * PUT_MODE:                              Machine Modes.      (line  384)
  * PUT_REG_NOTE_KIND:                     Insns.              (line  349)
*************** Concept Index
*** 57931,57938 ****
                                                               (line    6)
  * READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   62)
  * real operands:                         SSA Operands.       (line    6)
- * REALPART_EXPR:                         Unary and Binary Expressions.
-                                                              (line    6)
  * REAL_CST:                              Constant expressions.
                                                               (line    6)
  * REAL_LIBGCC_SPEC:                      Driver.             (line  124)
--- 57932,57937 ----
*************** Concept Index
*** 57954,57961 ****
  * REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  148)
  * REAL_VALUE_TYPE:                       Floating Point.     (line   25)
  * REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   34)
! * recognizing insns:                     RTL Template.       (line    6)
  * recog_data.operand:                    Instruction Output. (line   54)
  * RECORD_TYPE:                           Types.              (line    6)
  * RECORD_TYPE <1>:                       Classes.            (line    6)
  * redirect_edge_and_branch:              Profile information.
--- 57953,57962 ----
  * REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  148)
  * REAL_VALUE_TYPE:                       Floating Point.     (line   25)
  * REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   34)
! * REALPART_EXPR:                         Unary and Binary Expressions.
!                                                              (line    6)
  * recog_data.operand:                    Instruction Output. (line   54)
+ * recognizing insns:                     RTL Template.       (line    6)
  * RECORD_TYPE:                           Types.              (line    6)
  * RECORD_TYPE <1>:                       Classes.            (line    6)
  * redirect_edge_and_branch:              Profile information.
*************** Concept Index
*** 57978,58016 ****
  * reg and /f:                            Flags.              (line  102)
  * reg and /i:                            Flags.              (line   97)
  * reg and /v:                            Flags.              (line  106)
- * reg, RTL sharing:                      Sharing.            (line   17)
- * register allocation order:             Allocation Order.   (line    6)
- * register class definitions:            Register Classes.   (line    6)
- * register class preference constraints: Class Preferences.  (line    6)
- * register pairs:                        Values in Registers.
-                                                              (line   65)
- * Register Transfer Language (RTL):      RTL.                (line    6)
- * register usage:                        Registers.          (line    6)
- * registers arguments:                   Register Arguments. (line    6)
- * registers in constraints:              Simple Constraints. (line   64)
- * REGISTER_MOVE_COST:                    Costs.              (line    9)
- * REGISTER_NAMES:                        Instruction Output. (line    8)
- * register_operand:                      Machine-Independent Predicates.
-                                                              (line   29)
- * REGISTER_PREFIX:                       Instruction Output. (line  150)
- * REGISTER_TARGET_PRAGMAS:               Misc.               (line  422)
- * REGMODE_NATURAL_SIZE:                  Regs and Memory.    (line  191)
- * REGMODE_NATURAL_SIZE <1>:              Regs and Memory.    (line  273)
- * REGMODE_NATURAL_SIZE <2>:              Values in Registers.
-                                                              (line   46)
- * REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  188)
- * REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  166)
- * REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  176)
- * REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  162)
- * REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  210)
- * REGNO_OK_FOR_INSN_BASE_P:              Register Classes.   (line  202)
- * REGNO_REG_CLASS:                       Register Classes.   (line  106)
- * regs_ever_live:                        Function Entry.     (line   29)
- * regular expressions:                   Processor pipeline description.
-                                                              (line    6)
- * regular expressions <1>:               Processor pipeline description.
-                                                              (line  105)
- * regular IPA passes:                    Regular IPA passes. (line    6)
  * REG_ALLOC_ORDER:                       Allocation Order.   (line    8)
  * REG_BR_PRED:                           Insns.              (line  505)
  * REG_BR_PROB:                           Insns.              (line  497)
--- 57979,57984 ----
*************** Concept Index
*** 58043,58050 ****
  * reg_names:                             Register Basics.    (line  102)
  * reg_names <1>:                         Instruction Output. (line  107)
  * REG_NONNEG:                            Insns.              (line  381)
- * REG_NOTES:                             Insns.              (line  337)
  * REG_NOTE_KIND:                         Insns.              (line  349)
  * REG_OFFSET:                            Special Accessors.  (line   62)
  * REG_OK_STRICT:                         Addressing Modes.   (line  107)
  * REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   61)
--- 58011,58018 ----
  * reg_names:                             Register Basics.    (line  102)
  * reg_names <1>:                         Instruction Output. (line  107)
  * REG_NONNEG:                            Insns.              (line  381)
  * REG_NOTE_KIND:                         Insns.              (line  349)
+ * REG_NOTES:                             Insns.              (line  337)
  * REG_OFFSET:                            Special Accessors.  (line   62)
  * REG_OK_STRICT:                         Addressing Modes.   (line  107)
  * REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   61)
*************** Concept Index
*** 58056,58091 ****
  * REG_USERVAR_P:                         Flags.              (line  106)
  * REG_VALUE_IN_UNWIND_CONTEXT:           Frame Registers.    (line  156)
  * REG_WORDS_BIG_ENDIAN:                  Storage Layout.     (line   35)
  * relative costs:                        Costs.              (line    6)
  * RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  266)
- * reloading:                             RTL passes.         (line  171)
  * reload_completed:                      Standard Names.     (line 2445)
  * reload_in instruction pattern:         Standard Names.     (line   98)
  * reload_in_progress:                    Standard Names.     (line   57)
  * reload_out instruction pattern:        Standard Names.     (line   98)
  * remainder:                             Arithmetic.         (line  142)
  * remainderM3 instruction pattern:       Standard Names.     (line 1228)
  * reorder:                               GTY Options.        (line  219)
  * representation of RTL:                 RTL.                (line    6)
  * reservation delays:                    Processor pipeline description.
                                                               (line    6)
  * restore_stack_block instruction pattern: Standard Names.   (line 2561)
  * restore_stack_function instruction pattern: Standard Names.
                                                               (line 2561)
  * restore_stack_nonlocal instruction pattern: Standard Names.
                                                               (line 2561)
- * rest_of_decl_compilation:              Parsing pass.       (line   51)
- * rest_of_type_compilation:              Parsing pass.       (line   51)
  * RESULT_DECL:                           Declarations.       (line    6)
  * return:                                Side Effects.       (line   65)
  * return instruction pattern:            Standard Names.     (line 2419)
  * return values in registers:            Scalar Return.      (line    6)
- * returning aggregate values:            Aggregate Return.   (line    6)
- * returning structures and unions:       Interface.          (line   10)
- * RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   64)
  * RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  127)
  * RETURN_ADDR_OFFSET:                    Exception Handling. (line   70)
  * RETURN_ADDR_RTX:                       Frame Layout.       (line  116)
  * RETURN_EXPR:                           Statements for C and C++.
                                                               (line    6)
  * RETURN_STMT:                           Statements for C and C++.
--- 58024,58090 ----
  * REG_USERVAR_P:                         Flags.              (line  106)
  * REG_VALUE_IN_UNWIND_CONTEXT:           Frame Registers.    (line  156)
  * REG_WORDS_BIG_ENDIAN:                  Storage Layout.     (line   35)
+ * reg, RTL sharing:                      Sharing.            (line   17)
+ * register allocation order:             Allocation Order.   (line    6)
+ * register class definitions:            Register Classes.   (line    6)
+ * register class preference constraints: Class Preferences.  (line    6)
+ * register pairs:                        Values in Registers.
+                                                              (line   65)
+ * Register Transfer Language (RTL):      RTL.                (line    6)
+ * register usage:                        Registers.          (line    6)
+ * REGISTER_MOVE_COST:                    Costs.              (line    9)
+ * REGISTER_NAMES:                        Instruction Output. (line    8)
+ * register_operand:                      Machine-Independent Predicates.
+                                                              (line   29)
+ * REGISTER_PREFIX:                       Instruction Output. (line  150)
+ * REGISTER_TARGET_PRAGMAS:               Misc.               (line  422)
+ * registers arguments:                   Register Arguments. (line    6)
+ * registers in constraints:              Simple Constraints. (line   64)
+ * REGMODE_NATURAL_SIZE:                  Regs and Memory.    (line  191)
+ * REGMODE_NATURAL_SIZE <1>:              Regs and Memory.    (line  273)
+ * REGMODE_NATURAL_SIZE <2>:              Values in Registers.
+                                                              (line   46)
+ * REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  188)
+ * REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  166)
+ * REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  176)
+ * REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  162)
+ * REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  210)
+ * REGNO_OK_FOR_INSN_BASE_P:              Register Classes.   (line  202)
+ * REGNO_REG_CLASS:                       Register Classes.   (line  106)
+ * regs_ever_live:                        Function Entry.     (line   29)
+ * regular expressions:                   Processor pipeline description.
+                                                              (line    6)
+ * regular expressions <1>:               Processor pipeline description.
+                                                              (line  105)
+ * regular IPA passes:                    Regular IPA passes. (line    6)
  * relative costs:                        Costs.              (line    6)
  * RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  266)
  * reload_completed:                      Standard Names.     (line 2445)
  * reload_in instruction pattern:         Standard Names.     (line   98)
  * reload_in_progress:                    Standard Names.     (line   57)
  * reload_out instruction pattern:        Standard Names.     (line   98)
+ * reloading:                             RTL passes.         (line  171)
  * remainder:                             Arithmetic.         (line  142)
  * remainderM3 instruction pattern:       Standard Names.     (line 1228)
  * reorder:                               GTY Options.        (line  219)
  * representation of RTL:                 RTL.                (line    6)
  * reservation delays:                    Processor pipeline description.
                                                               (line    6)
+ * rest_of_decl_compilation:              Parsing pass.       (line   51)
+ * rest_of_type_compilation:              Parsing pass.       (line   51)
  * restore_stack_block instruction pattern: Standard Names.   (line 2561)
  * restore_stack_function instruction pattern: Standard Names.
                                                               (line 2561)
  * restore_stack_nonlocal instruction pattern: Standard Names.
                                                               (line 2561)
  * RESULT_DECL:                           Declarations.       (line    6)
  * return:                                Side Effects.       (line   65)
  * return instruction pattern:            Standard Names.     (line 2419)
  * return values in registers:            Scalar Return.      (line    6)
  * RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  127)
  * RETURN_ADDR_OFFSET:                    Exception Handling. (line   70)
  * RETURN_ADDR_RTX:                       Frame Layout.       (line  116)
+ * RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   64)
  * RETURN_EXPR:                           Statements for C and C++.
                                                               (line    6)
  * RETURN_STMT:                           Statements for C and C++.
*************** Concept Index
*** 58094,58099 ****
--- 58093,58100 ----
  * return_val, in call_insn:              Flags.              (line  120)
  * return_val, in reg:                    Flags.              (line   97)
  * return_val, in symbol_ref:             Flags.              (line  216)
+ * returning aggregate values:            Aggregate Return.   (line    6)
+ * returning structures and unions:       Interface.          (line   10)
  * reverse postorder:                     RTL SSA Instructions.
                                                               (line    6)
  * reverse probability:                   Profile information.
*************** Concept Index
*** 58115,58126 ****
  * rotatert:                              Arithmetic.         (line  201)
  * rotlM3 instruction pattern:            Standard Names.     (line 1154)
  * rotrM3 instruction pattern:            Standard Names.     (line 1154)
- * roundM2 instruction pattern:           Standard Names.     (line 1430)
  * ROUND_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * ROUND_MOD_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * ROUND_TYPE_ALIGN:                      Storage Layout.     (line  480)
  * RPO:                                   RTL SSA Instructions.
                                                               (line    6)
  * RROTATE_EXPR:                          Unary and Binary Expressions.
--- 58116,58127 ----
  * rotatert:                              Arithmetic.         (line  201)
  * rotlM3 instruction pattern:            Standard Names.     (line 1154)
  * rotrM3 instruction pattern:            Standard Names.     (line 1154)
  * ROUND_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * ROUND_MOD_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * ROUND_TYPE_ALIGN:                      Storage Layout.     (line  480)
+ * roundM2 instruction pattern:           Standard Names.     (line 1430)
  * RPO:                                   RTL SSA Instructions.
                                                               (line    6)
  * RROTATE_EXPR:                          Unary and Binary Expressions.
*************** Concept Index
*** 58191,58201 ****
  * SAD_EXPR:                              Vectors.            (line    6)
  * same_type_p:                           Types.              (line   86)
  * SAmode:                                Machine Modes.      (line  150)
  * satfractMN2 instruction pattern:       Standard Names.     (line 1983)
  * satfractunsMN2 instruction pattern:    Standard Names.     (line 1996)
  * satisfies_constraint_M:                C Constraint Interface.
                                                               (line   36)
- * sat_fract:                             Conversions.        (line   90)
  * SAVE_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * save_stack_block instruction pattern:  Standard Names.     (line 2561)
--- 58192,58202 ----
  * SAD_EXPR:                              Vectors.            (line    6)
  * same_type_p:                           Types.              (line   86)
  * SAmode:                                Machine Modes.      (line  150)
+ * sat_fract:                             Conversions.        (line   90)
  * satfractMN2 instruction pattern:       Standard Names.     (line 1983)
  * satfractunsMN2 instruction pattern:    Standard Names.     (line 1996)
  * satisfies_constraint_M:                C Constraint Interface.
                                                               (line   36)
  * SAVE_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * save_stack_block instruction pattern:  Standard Names.     (line 2561)
*************** Concept Index
*** 58203,58221 ****
  * save_stack_nonlocal instruction pattern: Standard Names.   (line 2561)
  * SBSS_SECTION_ASM_OP:                   Sections.           (line   75)
  * Scalar evolutions:                     Scalar evolutions.  (line    6)
- * scalars, returned as values:           Scalar Return.      (line    6)
  * scalar_float_mode:                     Machine Modes.      (line  297)
  * scalar_int_mode:                       Machine Modes.      (line  294)
  * scalar_mode:                           Machine Modes.      (line  300)
  * scalbM3 instruction pattern:           Standard Names.     (line 1235)
  * scatter_storeMN instruction pattern:   Standard Names.     (line  293)
  * SCHED_GROUP_P:                         Flags.              (line  162)
  * SCmode:                                Machine Modes.      (line  198)
  * scratch:                               Regs and Memory.    (line  325)
  * scratch operands:                      Regs and Memory.    (line  325)
- * scratch, RTL sharing:                  Sharing.            (line   36)
  * scratch_operand:                       Machine-Independent Predicates.
                                                               (line   49)
  * SDATA_SECTION_ASM_OP:                  Sections.           (line   57)
  * sdiv_pow2M3 instruction pattern:       Standard Names.     (line  882)
  * sdiv_pow2M3 instruction pattern <1>:   Standard Names.     (line  882)
--- 58204,58222 ----
  * save_stack_nonlocal instruction pattern: Standard Names.   (line 2561)
  * SBSS_SECTION_ASM_OP:                   Sections.           (line   75)
  * Scalar evolutions:                     Scalar evolutions.  (line    6)
  * scalar_float_mode:                     Machine Modes.      (line  297)
  * scalar_int_mode:                       Machine Modes.      (line  294)
  * scalar_mode:                           Machine Modes.      (line  300)
+ * scalars, returned as values:           Scalar Return.      (line    6)
  * scalbM3 instruction pattern:           Standard Names.     (line 1235)
  * scatter_storeMN instruction pattern:   Standard Names.     (line  293)
  * SCHED_GROUP_P:                         Flags.              (line  162)
  * SCmode:                                Machine Modes.      (line  198)
  * scratch:                               Regs and Memory.    (line  325)
  * scratch operands:                      Regs and Memory.    (line  325)
  * scratch_operand:                       Machine-Independent Predicates.
                                                               (line   49)
+ * scratch, RTL sharing:                  Sharing.            (line   36)
  * SDATA_SECTION_ASM_OP:                  Sections.           (line   57)
  * sdiv_pow2M3 instruction pattern:       Standard Names.     (line  882)
  * sdiv_pow2M3 instruction pattern <1>:   Standard Names.     (line  882)
*************** Concept Index
*** 58229,58240 ****
  * SELECT_CC_MODE:                        MODE_CC Condition Codes.
                                                               (line    6)
  * select_vlM instruction pattern:        Standard Names.     (line  388)
! * sequence:                              Side Effects.       (line  250)
  * Sequence iterators:                    Sequence iterators. (line    6)
  * set:                                   Side Effects.       (line   15)
  * set and /f:                            Flags.              (line  135)
- * setmemM instruction pattern:           Standard Names.     (line 1841)
- * SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line   94)
  * SET_ASM_OP:                            Label Output.       (line  451)
  * SET_ASM_OP <1>:                        Label Output.       (line  462)
  * set_attr:                              Tagging Insns.      (line   31)
--- 58230,58239 ----
  * SELECT_CC_MODE:                        MODE_CC Condition Codes.
                                                               (line    6)
  * select_vlM instruction pattern:        Standard Names.     (line  388)
! * sequence:                              Side Effects.       (line  249)
  * Sequence iterators:                    Sequence iterators. (line    6)
  * set:                                   Side Effects.       (line   15)
  * set and /f:                            Flags.              (line  135)
  * SET_ASM_OP:                            Label Output.       (line  451)
  * SET_ASM_OP <1>:                        Label Output.       (line  462)
  * set_attr:                              Tagging Insns.      (line   31)
*************** Concept Index
*** 58250,58255 ****
--- 58249,58256 ----
                                                               (line 3153)
  * SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
  * SET_TYPE_STRUCTURAL_EQUALITY <1>:      Types.              (line   81)
+ * setmemM instruction pattern:           Standard Names.     (line 1841)
+ * SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line   94)
  * SFmode:                                Machine Modes.      (line   69)
  * sharing of RTL components:             Sharing.            (line    6)
  * shift:                                 Arithmetic.         (line  179)
*************** Concept Index
*** 58265,58270 ****
--- 58266,58276 ----
  * sibcall_epilogue instruction pattern:  Standard Names.     (line 2768)
  * sibling call:                          Edges.              (line  120)
  * SIBLING_CALL_P:                        Flags.              (line  175)
+ * SIG_ATOMIC_TYPE:                       Type Layout.        (line  208)
+ * sign_extend:                           Conversions.        (line   23)
+ * sign_extract:                          Bit-Fields.         (line    8)
+ * sign_extract, canonicalization of:     Insn Canonicalizations.
+                                                              (line  109)
  * signal-to-noise ratio (metaphorical usage for diagnostics): Guidelines for Diagnostics.
                                                               (line   39)
  * signbitM2 instruction pattern:         Standard Names.     (line 1380)
*************** Concept Index
*** 58273,58340 ****
  * signed maximum:                        Arithmetic.         (line  147)
  * signed minimum:                        Arithmetic.         (line  147)
  * significandM2 instruction pattern:     Standard Names.     (line 1390)
- * sign_extend:                           Conversions.        (line   23)
- * sign_extract:                          Bit-Fields.         (line    8)
- * sign_extract, canonicalization of:     Insn Canonicalizations.
-                                                              (line  109)
- * SIG_ATOMIC_TYPE:                       Type Layout.        (line  208)
  * SImode:                                Machine Modes.      (line   37)
  * simple constraints:                    Simple Constraints. (line    6)
  * simple_return:                         Side Effects.       (line   79)
  * simple_return instruction pattern:     Standard Names.     (line 2434)
  * sincosM3 instruction pattern:          Standard Names.     (line 1263)
  * sinM2 instruction pattern:             Standard Names.     (line 1257)
- * SIZETYPE:                              Type Layout.        (line  147)
  * SIZE_ASM_OP:                           Label Output.       (line   33)
  * SIZE_TYPE:                             Type Layout.        (line  131)
  * skip:                                  GTY Options.        (line  105)
  * SLOW_BYTE_ACCESS:                      Costs.              (line  117)
  * small IPA passes:                      Small IPA passes.   (line    6)
  * smax:                                  Arithmetic.         (line  147)
  * smin:                                  Arithmetic.         (line  147)
  * sms, swing, software pipelining:       RTL passes.         (line  124)
  * smulhrsM3 instruction pattern:         Standard Names.     (line  870)
  * smulhsM3 instruction pattern:          Standard Names.     (line  858)
  * smulM3_highpart instruction pattern:   Standard Names.     (line 1064)
- * smul_highpart:                         Arithmetic.         (line  111)
  * soft float library:                    Soft float library routines.
                                                               (line    6)
  * source code, location information:     Guidelines for Diagnostics.
                                                               (line  183)
  * spaceshipM3 instruction pattern:       Standard Names.     (line 3227)
! * special:                               GTY Options.        (line  282)
  * special predicates:                    Predicates.         (line   31)
  * SPECS:                                 Target Fragment.    (line  194)
  * speculation_barrier instruction pattern: Standard Names.   (line 2835)
  * speed of instructions:                 Costs.              (line    6)
- * splitting instructions:                Insn Splitting.     (line    6)
  * split_block:                           Maintaining the CFG.
                                                               (line   96)
  * SQmode:                                Machine Modes.      (line  114)
  * sqrt:                                  Arithmetic.         (line  212)
  * sqrtM2 instruction pattern:            Standard Names.     (line 1202)
  * square root:                           Arithmetic.         (line  212)
  * SSA:                                   SSA.                (line    6)
  * SSA, RTL form:                         RTL SSA.            (line    6)
  * ssaddM3 instruction pattern:           Standard Names.     (line  629)
  * ssadM instruction pattern:             Standard Names.     (line  840)
  * ssashlM3 instruction pattern:          Standard Names.     (line 1142)
- * SSA_NAME_DEF_STMT:                     SSA.                (line  184)
- * SSA_NAME_VERSION:                      SSA.                (line  189)
  * ssdivM3 instruction pattern:           Standard Names.     (line  629)
  * ssmaddMN4 instruction pattern:         Standard Names.     (line 1090)
  * ssmsubMN4 instruction pattern:         Standard Names.     (line 1114)
  * ssmulM3 instruction pattern:           Standard Names.     (line  629)
  * ssnegM2 instruction pattern:           Standard Names.     (line 1192)
  * sssubM3 instruction pattern:           Standard Names.     (line  629)
- * ss_abs:                                Arithmetic.         (line  206)
- * ss_ashift:                             Arithmetic.         (line  179)
- * ss_div:                                Arithmetic.         (line  122)
- * ss_minus:                              Arithmetic.         (line   38)
- * ss_mult:                               Arithmetic.         (line   92)
- * ss_neg:                                Arithmetic.         (line   81)
- * ss_plus:                               Arithmetic.         (line   14)
- * ss_truncate:                           Conversions.        (line   43)
  * stack arguments:                       Stack Arguments.    (line    6)
  * stack frame layout:                    Frame Layout.       (line    6)
  * stack smashing protection:             Stack Smashing Protection.
--- 58279,58341 ----
  * signed maximum:                        Arithmetic.         (line  147)
  * signed minimum:                        Arithmetic.         (line  147)
  * significandM2 instruction pattern:     Standard Names.     (line 1390)
  * SImode:                                Machine Modes.      (line   37)
  * simple constraints:                    Simple Constraints. (line    6)
  * simple_return:                         Side Effects.       (line   79)
  * simple_return instruction pattern:     Standard Names.     (line 2434)
  * sincosM3 instruction pattern:          Standard Names.     (line 1263)
  * sinM2 instruction pattern:             Standard Names.     (line 1257)
  * SIZE_ASM_OP:                           Label Output.       (line   33)
  * SIZE_TYPE:                             Type Layout.        (line  131)
+ * SIZETYPE:                              Type Layout.        (line  147)
  * skip:                                  GTY Options.        (line  105)
  * SLOW_BYTE_ACCESS:                      Costs.              (line  117)
  * small IPA passes:                      Small IPA passes.   (line    6)
  * smax:                                  Arithmetic.         (line  147)
  * smin:                                  Arithmetic.         (line  147)
  * sms, swing, software pipelining:       RTL passes.         (line  124)
+ * smul_highpart:                         Arithmetic.         (line  111)
  * smulhrsM3 instruction pattern:         Standard Names.     (line  870)
  * smulhsM3 instruction pattern:          Standard Names.     (line  858)
  * smulM3_highpart instruction pattern:   Standard Names.     (line 1064)
  * soft float library:                    Soft float library routines.
                                                               (line    6)
  * source code, location information:     Guidelines for Diagnostics.
                                                               (line  183)
  * spaceshipM3 instruction pattern:       Standard Names.     (line 3227)
! * special:                               GTY Options.        (line  281)
  * special predicates:                    Predicates.         (line   31)
  * SPECS:                                 Target Fragment.    (line  194)
  * speculation_barrier instruction pattern: Standard Names.   (line 2835)
  * speed of instructions:                 Costs.              (line    6)
  * split_block:                           Maintaining the CFG.
                                                               (line   96)
+ * splitting instructions:                Insn Splitting.     (line    6)
  * SQmode:                                Machine Modes.      (line  114)
  * sqrt:                                  Arithmetic.         (line  212)
  * sqrtM2 instruction pattern:            Standard Names.     (line 1202)
  * square root:                           Arithmetic.         (line  212)
+ * ss_abs:                                Arithmetic.         (line  206)
+ * ss_ashift:                             Arithmetic.         (line  179)
+ * ss_div:                                Arithmetic.         (line  122)
+ * ss_minus:                              Arithmetic.         (line   38)
+ * ss_mult:                               Arithmetic.         (line   92)
+ * ss_neg:                                Arithmetic.         (line   81)
+ * ss_plus:                               Arithmetic.         (line   14)
+ * ss_truncate:                           Conversions.        (line   43)
  * SSA:                                   SSA.                (line    6)
+ * SSA_NAME_DEF_STMT:                     SSA.                (line  184)
+ * SSA_NAME_VERSION:                      SSA.                (line  189)
  * SSA, RTL form:                         RTL SSA.            (line    6)
  * ssaddM3 instruction pattern:           Standard Names.     (line  629)
  * ssadM instruction pattern:             Standard Names.     (line  840)
  * ssashlM3 instruction pattern:          Standard Names.     (line 1142)
  * ssdivM3 instruction pattern:           Standard Names.     (line  629)
  * ssmaddMN4 instruction pattern:         Standard Names.     (line 1090)
  * ssmsubMN4 instruction pattern:         Standard Names.     (line 1114)
  * ssmulM3 instruction pattern:           Standard Names.     (line  629)
  * ssnegM2 instruction pattern:           Standard Names.     (line 1192)
  * sssubM3 instruction pattern:           Standard Names.     (line  629)
  * stack arguments:                       Stack Arguments.    (line    6)
  * stack frame layout:                    Frame Layout.       (line    6)
  * stack smashing protection:             Stack Smashing Protection.
*************** Concept Index
*** 58369,58376 ****
  * stack_protect_set instruction pattern: Standard Names.     (line 3179)
  * stack_protect_test instruction pattern: Standard Names.    (line 3210)
  * STACK_PUSH_CODE:                       Frame Layout.       (line   12)
- * STACK_REGS:                            Stack Registers.    (line   19)
  * STACK_REG_COVER_CLASS:                 Stack Registers.    (line   22)
  * STACK_SAVEAREA_MODE:                   Storage Layout.     (line  496)
  * STACK_SIZE_MODE:                       Storage Layout.     (line  507)
  * STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  328)
--- 58370,58377 ----
  * stack_protect_set instruction pattern: Standard Names.     (line 3179)
  * stack_protect_test instruction pattern: Standard Names.    (line 3210)
  * STACK_PUSH_CODE:                       Frame Layout.       (line   12)
  * STACK_REG_COVER_CLASS:                 Stack Registers.    (line   22)
+ * STACK_REGS:                            Stack Registers.    (line   19)
  * STACK_SAVEAREA_MODE:                   Storage Layout.     (line  496)
  * STACK_SIZE_MODE:                       Storage Layout.     (line  507)
  * STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  328)
*************** Concept Index
*** 58418,58425 ****
  * STRING_POOL_ADDRESS_P:                 Flags.              (line  179)
  * strlenM instruction pattern:           Standard Names.     (line 1912)
  * structure value address:               Aggregate Return.   (line    6)
- * structures, returning:                 Interface.          (line   10)
  * STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  370)
  * subM3 instruction pattern:             Standard Names.     (line  629)
  * SUBOBJECT:                             Statements for C and C++.
                                                               (line    6)
--- 58419,58426 ----
  * STRING_POOL_ADDRESS_P:                 Flags.              (line  179)
  * strlenM instruction pattern:           Standard Names.     (line 1912)
  * structure value address:               Aggregate Return.   (line    6)
  * STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  370)
+ * structures, returning:                 Interface.          (line   10)
  * subM3 instruction pattern:             Standard Names.     (line  629)
  * SUBOBJECT:                             Statements for C and C++.
                                                               (line    6)
*************** Concept Index
*** 58429,58440 ****
  * subreg and /s:                         Flags.              (line  201)
  * subreg and /u:                         Flags.              (line  194)
  * subreg and /u and /v:                  Flags.              (line  184)
- * subreg, in strict_low_part:            RTL Declarations.   (line    9)
  * SUBREG_BYTE:                           Regs and Memory.    (line  316)
  * SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  184)
  * SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  194)
  * SUBREG_PROMOTED_VAR_P:                 Flags.              (line  201)
  * SUBREG_REG:                            Regs and Memory.    (line  316)
  * subst iterators in .md files:          Subst Iterators.    (line    6)
  * subvM4 instruction pattern:            Standard Names.     (line  645)
  * SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
--- 58430,58441 ----
  * subreg and /s:                         Flags.              (line  201)
  * subreg and /u:                         Flags.              (line  194)
  * subreg and /u and /v:                  Flags.              (line  184)
  * SUBREG_BYTE:                           Regs and Memory.    (line  316)
  * SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  184)
  * SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  194)
  * SUBREG_PROMOTED_VAR_P:                 Flags.              (line  201)
  * SUBREG_REG:                            Regs and Memory.    (line  316)
+ * subreg, in strict_low_part:            RTL Declarations.   (line    9)
  * subst iterators in .md files:          Subst Iterators.    (line    6)
  * subvM4 instruction pattern:            Standard Names.     (line  645)
  * SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
*************** Concept Index
*** 58443,58456 ****
                                                               (line   57)
  * SUPPORTS_ONE_ONLY:                     Label Output.       (line  290)
  * SUPPORTS_WEAK:                         Label Output.       (line  264)
- * SWITCHABLE_TARGET:                     Run-time Target.    (line  178)
  * SWITCH_BODY:                           Statements for C and C++.
                                                               (line    6)
  * SWITCH_COND:                           Statements for C and C++.
                                                               (line    6)
  * SWITCH_STMT:                           Statements for C and C++.
                                                               (line    6)
! * symbolic label:                        Sharing.            (line   20)
  * SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  117)
  * SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   99)
  * SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   92)
--- 58444,58456 ----
                                                               (line   57)
  * SUPPORTS_ONE_ONLY:                     Label Output.       (line  290)
  * SUPPORTS_WEAK:                         Label Output.       (line  264)
  * SWITCH_BODY:                           Statements for C and C++.
                                                               (line    6)
  * SWITCH_COND:                           Statements for C and C++.
                                                               (line    6)
  * SWITCH_STMT:                           Statements for C and C++.
                                                               (line    6)
! * SWITCHABLE_TARGET:                     Run-time Target.    (line  178)
  * SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  117)
  * SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   99)
  * SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   92)
*************** Concept Index
*** 58463,58469 ****
  * symbol_ref and /i:                     Flags.              (line  216)
  * symbol_ref and /u:                     Flags.              (line   19)
  * symbol_ref and /v:                     Flags.              (line  220)
- * symbol_ref, RTL sharing:               Sharing.            (line   20)
  * SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  117)
  * SYMBOL_REF_BLOCK:                      Special Accessors.  (line  130)
  * SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  135)
--- 58463,58468 ----
*************** Concept Index
*** 58481,58486 ****
--- 58480,58487 ----
  * SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  108)
  * SYMBOL_REF_USED:                       Flags.              (line  211)
  * SYMBOL_REF_WEAK:                       Flags.              (line  216)
+ * symbol_ref, RTL sharing:               Sharing.            (line   20)
+ * symbolic label:                        Sharing.            (line   20)
  * sync_addMODE instruction pattern:      Standard Names.     (line 2889)
  * sync_andMODE instruction pattern:      Standard Names.     (line 2889)
  * sync_compare_and_swapMODE instruction pattern: Standard Names.
*************** Concept Index
*** 58521,58531 ****
  * target hooks:                          Target Structure.   (line    6)
  * target makefile fragment:              Target Fragment.    (line    6)
  * target specifications:                 Run-time Target.    (line    6)
- * targetm:                               Target Structure.   (line    6)
- * targets, makefile:                     Makefile.           (line    6)
  * TARGET_ABSOLUTE_BIGGEST_ALIGNMENT:     Storage Layout.     (line  204)
  * TARGET_ADDITIONAL_ALLOCNO_CLASS_P:     Register Classes.   (line  668)
- * TARGET_ADDRESS_COST:                   Costs.              (line  351)
  * TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
                                                               (line   42)
  * TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
--- 58522,58529 ----
*************** Concept Index
*** 58546,58551 ****
--- 58544,58550 ----
                                                               (line   48)
  * TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID:  Named Address Spaces.
                                                               (line   86)
+ * TARGET_ADDRESS_COST:                   Costs.              (line  351)
  * TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  455)
  * TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  850)
  * TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line 1128)
*************** Concept Index
*** 58571,58578 ****
  * TARGET_ASM_CODE_END:                   File Framework.     (line   57)
  * TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
                                                               (line   76)
- * TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  177)
  * TARGET_ASM_DECL_END:                   Data Output.        (line   44)
  * TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
                                                               (line   90)
  * TARGET_ASM_ELF_FLAGS_NUMERIC:          File Framework.     (line  120)
--- 58570,58577 ----
  * TARGET_ASM_CODE_END:                   File Framework.     (line   57)
  * TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
                                                               (line   76)
  * TARGET_ASM_DECL_END:                   Data Output.        (line   44)
+ * TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  177)
  * TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
                                                               (line   90)
  * TARGET_ASM_ELF_FLAGS_NUMERIC:          File Framework.     (line  120)
*************** Concept Index
*** 58644,58659 ****
  * TARGET_BUILTIN_DECL:                   Misc.               (line  670)
  * TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  277)
  * TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  101)
! * TARGET_CALLEE_COPIES:                  Register Arguments. (line  118)
  * TARGET_CALL_ARGS:                      Varargs.            (line  150)
  * TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks.
                                                               (line    6)
! * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  250)
! * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  914)
! * TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P:  Register Classes.   (line  639)
! * TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
!                                                              (line   55)
! * TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  296)
  * TARGET_CAN_CHANGE_MODE_CLASS:          Register Classes.   (line  567)
  * TARGET_CAN_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
                                                               (line  299)
--- 58643,58655 ----
  * TARGET_BUILTIN_DECL:                   Misc.               (line  670)
  * TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  277)
  * TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  101)
! * TARGET_C_BITINT_TYPE_INFO:             Storage Layout.     (line  131)
! * TARGET_C_EXCESS_PRECISION:             Storage Layout.     (line  109)
! * TARGET_C_PREINCLUDE:                   Misc.               (line  397)
  * TARGET_CALL_ARGS:                      Varargs.            (line  150)
  * TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks.
                                                               (line    6)
! * TARGET_CALLEE_COPIES:                  Register Arguments. (line  118)
  * TARGET_CAN_CHANGE_MODE_CLASS:          Register Classes.   (line  567)
  * TARGET_CAN_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
                                                               (line  299)
*************** Concept Index
*** 58661,58666 ****
--- 58657,58668 ----
  * TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  836)
  * TARGET_CAN_INLINE_P:                   Target Attributes.  (line  206)
  * TARGET_CAN_USE_DOLOOP_P:               Misc.               (line  790)
+ * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  250)
+ * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  914)
+ * TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P:  Register Classes.   (line  639)
+ * TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  296)
+ * TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
+                                                              (line   55)
  * TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   46)
  * TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
                                                               (line  119)
*************** Concept Index
*** 58670,58686 ****
  * TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  523)
  * TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  539)
  * TARGET_COMMUTATIVE_P:                  Misc.               (line  843)
  * TARGET_COMPARE_BY_PIECES_BRANCH_RATIO: Costs.              (line  207)
  * TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  734)
  * TARGET_COMPATIBLE_VECTOR_TYPES_P:      Register Arguments. (line  356)
  * TARGET_COMPUTE_FRAME_LAYOUT:           Elimination.        (line   74)
  * TARGET_COMPUTE_MULTILIB:               Run-time Target.    (line  160)
  * TARGET_COMPUTE_PRESSURE_CLASSES:       Register Classes.   (line  684)
- * TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   46)
  * TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line  102)
- * TARGET_CONSTANT_ALIGNMENT:             Storage Layout.     (line  294)
  * TARGET_CONST_ANCHOR:                   Misc.               (line 1139)
  * TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  246)
  * TARGET_CONVERT_TO_TYPE:                Misc.               (line 1066)
  * TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    8)
  * TARGET_CSTORE_MODE:                    Register Classes.   (line  676)
--- 58672,58688 ----
  * TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  523)
  * TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  539)
  * TARGET_COMMUTATIVE_P:                  Misc.               (line  843)
+ * TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   46)
  * TARGET_COMPARE_BY_PIECES_BRANCH_RATIO: Costs.              (line  207)
  * TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  734)
  * TARGET_COMPATIBLE_VECTOR_TYPES_P:      Register Arguments. (line  356)
  * TARGET_COMPUTE_FRAME_LAYOUT:           Elimination.        (line   74)
  * TARGET_COMPUTE_MULTILIB:               Run-time Target.    (line  160)
  * TARGET_COMPUTE_PRESSURE_CLASSES:       Register Classes.   (line  684)
  * TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line  102)
  * TARGET_CONST_ANCHOR:                   Misc.               (line 1139)
  * TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  246)
+ * TARGET_CONSTANT_ALIGNMENT:             Storage Layout.     (line  294)
  * TARGET_CONVERT_TO_TYPE:                Misc.               (line 1066)
  * TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    8)
  * TARGET_CSTORE_MODE:                    Register Classes.   (line  676)
*************** Concept Index
*** 58701,58709 ****
  * TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   68)
  * TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   73)
  * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   79)
! * TARGET_C_BITINT_TYPE_INFO:             Storage Layout.     (line  131)
! * TARGET_C_EXCESS_PRECISION:             Storage Layout.     (line  109)
! * TARGET_C_PREINCLUDE:                   Misc.               (line  397)
  * TARGET_DEBUG_UNWIND_INFO:              DWARF.              (line   31)
  * TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  560)
  * TARGET_DECLSPEC:                       Target Attributes.  (line   93)
--- 58703,58717 ----
  * TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   68)
  * TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   73)
  * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   79)
! * TARGET_D_CPU_VERSIONS:                 D Language and ABI. (line    6)
! * TARGET_D_HAS_STDCALL_CONVENTION:       D Language and ABI. (line   51)
! * TARGET_D_MINFO_SECTION:                D Language and ABI. (line   29)
! * TARGET_D_MINFO_SECTION_END:            D Language and ABI. (line   46)
! * TARGET_D_MINFO_SECTION_START:          D Language and ABI. (line   41)
! * TARGET_D_OS_VERSIONS:                  D Language and ABI. (line   13)
! * TARGET_D_REGISTER_CPU_TARGET_INFO:     D Language and ABI. (line   17)
! * TARGET_D_REGISTER_OS_TARGET_INFO:      D Language and ABI. (line   25)
! * TARGET_D_TEMPLATES_ALWAYS_COMDAT:      D Language and ABI. (line   59)
  * TARGET_DEBUG_UNWIND_INFO:              DWARF.              (line   31)
  * TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  560)
  * TARGET_DECLSPEC:                       Target Attributes.  (line   93)
*************** Concept Index
*** 58727,58741 ****
  * TARGET_DWARF_POLY_INDETERMINATE_VALUE: Frame Layout.       (line  183)
  * TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
                                                               (line  104)
- * TARGET_D_CPU_VERSIONS:                 D Language and ABI. (line    6)
- * TARGET_D_HAS_STDCALL_CONVENTION:       D Language and ABI. (line   51)
- * TARGET_D_MINFO_SECTION:                D Language and ABI. (line   29)
- * TARGET_D_MINFO_SECTION_END:            D Language and ABI. (line   46)
- * TARGET_D_MINFO_SECTION_START:          D Language and ABI. (line   41)
- * TARGET_D_OS_VERSIONS:                  D Language and ABI. (line   13)
- * TARGET_D_REGISTER_CPU_TARGET_INFO:     D Language and ABI. (line   17)
- * TARGET_D_REGISTER_OS_TARGET_INFO:      D Language and ABI. (line   25)
- * TARGET_D_TEMPLATES_ALWAYS_COMDAT:      D Language and ABI. (line   59)
  * TARGET_EDOM:                           Library Calls.      (line   59)
  * TARGET_EMIT_CALL_BUILTIN___CLEAR_CACHE: Trampolines.       (line  132)
  * TARGET_EMIT_EPILOGUE_FOR_SIBCALL:      Misc.               (line  631)
--- 58735,58740 ----
*************** Concept Index
*** 58776,58787 ****
  * target_flags:                          Run-time Target.    (line   51)
  * TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
                                                               (line  132)
- * TARGET_FLOATN_BUILTIN_P:               Register Arguments. (line  444)
- * TARGET_FLOATN_MODE:                    Register Arguments. (line  426)
  * TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target.
                                                               (line  197)
! * TARGET_FNTYPE_ABI:                     Register Basics.    (line   58)
  * TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  291)
  * TARGET_FOLD_BUILTIN:                   Misc.               (line  717)
  * TARGET_FORMAT_TYPES:                   Misc.               (line 1008)
  * TARGET_FORTIFY_SOURCE_DEFAULT_LEVEL:   Library Calls.      (line   89)
--- 58775,58786 ----
  * target_flags:                          Run-time Target.    (line   51)
  * TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
                                                               (line  132)
  * TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target.
                                                               (line  197)
! * TARGET_FLOATN_BUILTIN_P:               Register Arguments. (line  444)
! * TARGET_FLOATN_MODE:                    Register Arguments. (line  426)
  * TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  291)
+ * TARGET_FNTYPE_ABI:                     Register Basics.    (line   58)
  * TARGET_FOLD_BUILTIN:                   Misc.               (line  717)
  * TARGET_FORMAT_TYPES:                   Misc.               (line 1008)
  * TARGET_FORTIFY_SOURCE_DEFAULT_LEVEL:   Library Calls.      (line   89)
*************** Concept Index
*** 58797,58805 ****
  * TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    6)
  * TARGET_FUNCTION_VALUE:                 Scalar Return.      (line    9)
  * TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   96)
- * TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc.             (line  750)
  * TARGET_GEN_CCMP_FIRST:                 Misc.               (line  933)
  * TARGET_GEN_CCMP_NEXT:                  Misc.               (line  944)
  * TARGET_GET_DRAP_RTX:                   Misc.               (line 1102)
  * TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  743)
  * TARGET_GET_MULTILIB_ABI_NAME:          Register Basics.    (line   99)
--- 58796,58804 ----
  * TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    6)
  * TARGET_FUNCTION_VALUE:                 Scalar Return.      (line    9)
  * TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   96)
  * TARGET_GEN_CCMP_FIRST:                 Misc.               (line  933)
  * TARGET_GEN_CCMP_NEXT:                  Misc.               (line  944)
+ * TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc.             (line  750)
  * TARGET_GET_DRAP_RTX:                   Misc.               (line 1102)
  * TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  743)
  * TARGET_GET_MULTILIB_ABI_NAME:          Register Basics.    (line   99)
*************** Concept Index
*** 58846,58851 ****
--- 58845,58851 ----
  * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  155)
  * TARGET_HAVE_TLS:                       Sections.           (line  331)
  * TARGET_IFUNC_REF_LOCAL_OK:             Misc.               (line 1176)
+ * TARGET_IN_SMALL_DATA_P:                Sections.           (line  307)
  * TARGET_INIT_BUILTINS:                  Misc.               (line  654)
  * TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
                                                               (line  119)
*************** Concept Index
*** 58860,58866 ****
  * TARGET_INVALID_CONVERSION:             Misc.               (line 1039)
  * TARGET_INVALID_UNARY_OP:               Misc.               (line 1045)
  * TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  807)
- * TARGET_IN_SMALL_DATA_P:                Sections.           (line  307)
  * TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS: Register Classes.  (line  594)
  * TARGET_KEEP_LEAF_WHEN_PROFILED:        Profiling.          (line   39)
  * TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   48)
--- 58860,58865 ----
*************** Concept Index
*** 58868,58876 ****
  * TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  221)
  * TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  137)
  * TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes.  (line  647)
! * TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   65)
  * TARGET_LIBC_HAS_FAST_FUNCTION:         Library Calls.      (line   85)
  * TARGET_LIBC_HAS_FUNCTION:              Library Calls.      (line   77)
  * TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   24)
  * TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  516)
  * TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments.
--- 58867,58876 ----
  * TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  221)
  * TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  137)
  * TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes.  (line  647)
! * TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   42)
  * TARGET_LIBC_HAS_FAST_FUNCTION:         Library Calls.      (line   85)
  * TARGET_LIBC_HAS_FUNCTION:              Library Calls.      (line   77)
+ * TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   65)
  * TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   24)
  * TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  516)
  * TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments.
*************** Concept Index
*** 58878,58884 ****
  * TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  136)
  * TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  522)
  * TARGET_LIBM_FUNCTION_MAX_ERROR:        Library Calls.      (line   93)
- * TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   42)
  * TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  961)
  * TARGET_LOWER_LOCAL_DECL_ALIGNMENT:     Storage Layout.     (line  262)
  * TARGET_LRA_P:                          Register Classes.   (line  601)
--- 58878,58883 ----
*************** Concept Index
*** 58889,58894 ****
--- 58888,58895 ----
  * TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   38)
  * TARGET_MAX_NOCE_IFCVT_SEQ_COST:        Costs.              (line  397)
  * TARGET_MD_ASM_ADJUST:                  Misc.               (line  526)
+ * TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  115)
+ * TARGET_MEM_REF:                        Storage References. (line    6)
  * TARGET_MEMBER_TYPE_FORCES_BLK:         Storage Layout.     (line  468)
  * TARGET_MEMMODEL_CHECK:                 Misc.               (line 1162)
  * TARGET_MEMORY_MOVE_COST:               Costs.              (line   79)
*************** Concept Index
*** 58900,58914 ****
  * TARGET_MEMTAG_SET_TAG:                 Misc.               (line 1340)
  * TARGET_MEMTAG_TAG_SIZE:                Misc.               (line 1306)
  * TARGET_MEMTAG_UNTAGGED_POINTER:        Misc.               (line 1353)
- * TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  115)
- * TARGET_MEM_REF:                        Storage References. (line    6)
  * TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   66)
  * TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   58)
  * TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   32)
  * TARGET_MIN_ARITHMETIC_PRECISION:       Misc.               (line   63)
  * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line  112)
- * TARGET_MODES_TIEABLE_P:                Values in Registers.
-                                                              (line  123)
  * TARGET_MODE_AFTER:                     Mode Switching.     (line   64)
  * TARGET_MODE_BACKPROP:                  Mode Switching.     (line   95)
  * TARGET_MODE_CONFLUENCE:                Mode Switching.     (line   79)
--- 58901,58911 ----
*************** Concept Index
*** 58920,58936 ****
  * TARGET_MODE_NEEDED:                    Mode Switching.     (line   55)
  * TARGET_MODE_PRIORITY:                  Mode Switching.     (line  144)
  * TARGET_MODE_REP_EXTENDED:              Misc.               (line  199)
  * TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  532)
  * TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   51)
  * TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments.
                                                               (line   43)
  * TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  461)
  * TARGET_NEED_IPA_FN_TARGET_INFO:        Target Attributes.  (line  231)
  * TARGET_NEW_ADDRESS_PROFITABLE_P:       Costs.              (line  422)
- * TARGET_NOCE_CONVERSION_PROFITABLE_P:   Costs.              (line  416)
  * TARGET_NO_REGISTER_ALLOCATION:         DWARF.              (line   84)
  * TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P: Costs.             (line  429)
! * TARGET_N_FORMAT_TYPES:                 Misc.               (line 1013)
  * TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   88)
  * TARGET_OBJC_DECLARE_CLASS_DEFINITION:  Run-time Target.    (line  109)
  * TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target.
--- 58917,58935 ----
  * TARGET_MODE_NEEDED:                    Mode Switching.     (line   55)
  * TARGET_MODE_PRIORITY:                  Mode Switching.     (line  144)
  * TARGET_MODE_REP_EXTENDED:              Misc.               (line  199)
+ * TARGET_MODES_TIEABLE_P:                Values in Registers.
+                                                              (line  123)
  * TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  532)
  * TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   51)
  * TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments.
                                                               (line   43)
+ * TARGET_N_FORMAT_TYPES:                 Misc.               (line 1013)
  * TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  461)
  * TARGET_NEED_IPA_FN_TARGET_INFO:        Target Attributes.  (line  231)
  * TARGET_NEW_ADDRESS_PROFITABLE_P:       Costs.              (line  422)
  * TARGET_NO_REGISTER_ALLOCATION:         DWARF.              (line   84)
  * TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P: Costs.             (line  429)
! * TARGET_NOCE_CONVERSION_PROFITABLE_P:   Costs.              (line  416)
  * TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   88)
  * TARGET_OBJC_DECLARE_CLASS_DEFINITION:  Run-time Target.    (line  109)
  * TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target.
*************** Concept Index
*** 58956,58965 ****
                                                               (line  141)
  * TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   41)
  * TARGET_OVERLAP_OP_BY_PIECES_P:         Costs.              (line  200)
  * TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line 1017)
  * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line 1024)
  * TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line 1028)
- * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  126)
  * TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  106)
  * TARGET_PCH_VALID_P:                    PCH Target.         (line   11)
  * TARGET_POSIX_IO:                       Misc.               (line  557)
--- 58955,58964 ----
                                                               (line  141)
  * TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   41)
  * TARGET_OVERLAP_OP_BY_PIECES_P:         Costs.              (line  200)
+ * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  126)
  * TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line 1017)
  * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line 1024)
  * TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line 1028)
  * TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  106)
  * TARGET_PCH_VALID_P:                    PCH Target.         (line   11)
  * TARGET_POSIX_IO:                       Misc.               (line  557)
*************** Concept Index
*** 58973,58981 ****
  * TARGET_PREPARE_PCH_SAVE:               PCH Target.         (line   34)
  * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  181)
  * TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  315)
- * TARGET_PROMOTED_TYPE:                  Misc.               (line 1058)
  * TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  145)
  * TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   10)
  * TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  250)
  * TARGET_PUSH_ARGUMENT:                  Stack Arguments.    (line   17)
  * TARGET_RECORD_OFFLOAD_SYMBOL:          Misc.               (line 1204)
--- 58972,58980 ----
  * TARGET_PREPARE_PCH_SAVE:               PCH Target.         (line   34)
  * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  181)
  * TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  315)
  * TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  145)
  * TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   10)
+ * TARGET_PROMOTED_TYPE:                  Misc.               (line 1058)
  * TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  250)
  * TARGET_PUSH_ARGUMENT:                  Stack Arguments.    (line   17)
  * TARGET_RECORD_OFFLOAD_SYMBOL:          Misc.               (line 1204)
*************** Concept Index
*** 59031,59038 ****
  * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  153)
  * TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  129)
  * TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  298)
- * TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   11)
  * TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  267)
  * TARGET_SCHED_MACRO_FUSION_P:           Scheduling.         (line   87)
  * TARGET_SCHED_MACRO_FUSION_PAIR_P:      Scheduling.         (line   91)
  * TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  328)
--- 59030,59037 ----
  * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  153)
  * TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  129)
  * TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  298)
  * TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  267)
+ * TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   11)
  * TARGET_SCHED_MACRO_FUSION_P:           Scheduling.         (line   87)
  * TARGET_SCHED_MACRO_FUSION_PAIR_P:      Scheduling.         (line   91)
  * TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  328)
*************** Concept Index
*** 59049,59059 ****
  * TARGET_SECONDARY_RELOAD:               Register Classes.   (line  336)
  * TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  160)
  * TARGET_SELECT_EARLY_REMAT_MODES:       Register Classes.   (line  512)
- * TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P: Misc.          (line  225)
- * TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   71)
  * TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  878)
  * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   54)
  * TARGET_SET_UP_BY_PROLOGUE:             Tail Calls.         (line   29)
  * TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  160)
  * TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB:  Shrink-wrapping separate components.
                                                               (line   36)
--- 59048,59058 ----
  * TARGET_SECONDARY_RELOAD:               Register Classes.   (line  336)
  * TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  160)
  * TARGET_SELECT_EARLY_REMAT_MODES:       Register Classes.   (line  512)
  * TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  878)
  * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   54)
  * TARGET_SET_UP_BY_PROLOGUE:             Tail Calls.         (line   29)
+ * TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P: Misc.          (line  225)
+ * TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   71)
  * TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  160)
  * TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB:  Shrink-wrapping separate components.
                                                               (line   36)
*************** Concept Index
*** 59086,59095 ****
                                                               (line    6)
  * TARGET_STACK_PROTECT_RUNTIME_ENABLED_P: Stack Smashing Protection.
                                                               (line   25)
  * TARGET_STARTING_FRAME_OFFSET:          Frame Layout.       (line   34)
  * TARGET_STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
                                                               (line   74)
- * TARGET_START_CALL_ARGS:                Varargs.            (line  126)
  * TARGET_STATIC_CHAIN:                   Frame Registers.    (line   90)
  * TARGET_STATIC_RTX_ALIGNMENT:           Storage Layout.     (line  266)
  * TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  110)
--- 59085,59094 ----
                                                               (line    6)
  * TARGET_STACK_PROTECT_RUNTIME_ENABLED_P: Stack Smashing Protection.
                                                               (line   25)
+ * TARGET_START_CALL_ARGS:                Varargs.            (line  126)
  * TARGET_STARTING_FRAME_OFFSET:          Frame Layout.       (line   34)
  * TARGET_STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
                                                               (line   74)
  * TARGET_STATIC_CHAIN:                   Frame Registers.    (line   90)
  * TARGET_STATIC_RTX_ALIGNMENT:           Storage Layout.     (line  266)
  * TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  110)
*************** Concept Index
*** 59114,59128 ****
  * TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  528)
  * TARGET_UPDATE_IPA_FN_TARGET_INFO:      Target Attributes.  (line  213)
  * TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line 1098)
- * TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  134)
  * TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   53)
  * TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  264)
  * TARGET_USE_BLOCKS_FOR_DECL_P:          Addressing Modes.   (line  271)
  * TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs.              (line  165)
  * TARGET_USE_LATE_PROLOGUE_EPILOGUE:     Misc.               (line  612)
  * TARGET_USE_PSEUDO_PIC_REG:             Register Arguments. (line   78)
  * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   87)
  * TARGET_VALID_POINTER_MODE:             Register Arguments. (line  307)
  * TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES: Addressing Modes.
                                                               (line  405)
  * TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  493)
--- 59113,59131 ----
  * TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  528)
  * TARGET_UPDATE_IPA_FN_TARGET_INFO:      Target Attributes.  (line  213)
  * TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line 1098)
  * TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   53)
  * TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  264)
  * TARGET_USE_BLOCKS_FOR_DECL_P:          Addressing Modes.   (line  271)
  * TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs.              (line  165)
  * TARGET_USE_LATE_PROLOGUE_EPILOGUE:     Misc.               (line  612)
  * TARGET_USE_PSEUDO_PIC_REG:             Register Arguments. (line   78)
+ * TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  134)
  * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   87)
  * TARGET_VALID_POINTER_MODE:             Register Arguments. (line  307)
+ * TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  321)
+ * TARGET_VECTOR_MODE_SUPPORTED_ANY_TARGET_P: Register Arguments.
+                                                              (line  344)
+ * TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  339)
  * TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES: Addressing Modes.
                                                               (line  405)
  * TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  493)
*************** Concept Index
*** 59147,59159 ****
  * TARGET_VECTORIZE_SPLIT_REDUCTION:      Addressing Modes.   (line  397)
  * TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
                                                               (line  380)
  * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
                                                               (line  326)
- * TARGET_VECTORIZE_VEC_PERM_CONST:       Addressing Modes.   (line  332)
- * TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  321)
- * TARGET_VECTOR_MODE_SUPPORTED_ANY_TARGET_P: Register Arguments.
-                                                              (line  344)
- * TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  339)
  * TARGET_VERIFY_TYPE_CONTEXT:            Misc.               (line 1073)
  * TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  303)
  * TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  297)
--- 59150,59158 ----
  * TARGET_VECTORIZE_SPLIT_REDUCTION:      Addressing Modes.   (line  397)
  * TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
                                                               (line  380)
+ * TARGET_VECTORIZE_VEC_PERM_CONST:       Addressing Modes.   (line  332)
  * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
                                                               (line  326)
  * TARGET_VERIFY_TYPE_CONTEXT:            Misc.               (line 1073)
  * TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  303)
  * TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  297)
*************** Concept Index
*** 59163,59168 ****
--- 59162,59169 ----
  * TARGET_WARN_PARAMETER_PASSING_ABI:     Aggregate Return.   (line   92)
  * TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  308)
  * TARGET_ZERO_CALL_USED_REGS:            Misc.               (line 1108)
+ * targetm:                               Target Structure.   (line    6)
+ * targets, makefile:                     Makefile.           (line    6)
  * tbranch_OPMODE3 instruction pattern:   Standard Names.     (line 2345)
  * TCmode:                                Machine Modes.      (line  198)
  * TDmode:                                Machine Modes.      (line   97)
*************** Concept Index
*** 59188,59197 ****
  * tm.h macros:                           Target Macros.      (line    6)
  * TQFmode:                               Machine Modes.      (line   65)
  * TQmode:                                Machine Modes.      (line  122)
- * trampolines for nested functions:      Trampolines.        (line    6)
  * TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line  105)
  * TRAMPOLINE_SECTION:                    Trampolines.        (line   96)
  * TRAMPOLINE_SIZE:                       Trampolines.        (line  101)
  * TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  180)
  * trap instruction pattern:              Standard Names.     (line 2778)
  * tree:                                  Tree overview.      (line    6)
--- 59189,59198 ----
  * tm.h macros:                           Target Macros.      (line    6)
  * TQFmode:                               Machine Modes.      (line   65)
  * TQmode:                                Machine Modes.      (line  122)
  * TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line  105)
  * TRAMPOLINE_SECTION:                    Trampolines.        (line   96)
  * TRAMPOLINE_SIZE:                       Trampolines.        (line  101)
+ * trampolines for nested functions:      Trampolines.        (line    6)
  * TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  180)
  * trap instruction pattern:              Standard Names.     (line 2778)
  * tree:                                  Tree overview.      (line    6)
*************** Concept Index
*** 59252,59273 ****
  * TREE_VEC_LENGTH:                       Containers.         (line    6)
  * true positive:                         Guidelines for Diagnostics.
                                                               (line   39)
- * truncate:                              Conversions.        (line   38)
- * truncMN2 instruction pattern:          Standard Names.     (line 1961)
  * TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
! * TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
!                                                              (line    6)
  * TRUTH_AND_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
! * TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
! * TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
                                                               (line    6)
  * TRUTH_OR_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
  * TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * TRY_BLOCK:                             Statements for C and C++.
--- 59253,59274 ----
  * TREE_VEC_LENGTH:                       Containers.         (line    6)
  * true positive:                         Guidelines for Diagnostics.
                                                               (line   39)
  * TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
! * truncate:                              Conversions.        (line   38)
! * truncMN2 instruction pattern:          Standard Names.     (line 1961)
  * TRUTH_AND_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
! * TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
                                                               (line    6)
! * TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * TRUTH_OR_EXPR:                         Unary and Binary Expressions.
                                                               (line    6)
+ * TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
+                                                              (line    6)
  * TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
                                                               (line    6)
  * TRY_BLOCK:                             Statements for C and C++.
*************** Concept Index
*** 59282,59291 ****
                                                               (line    6)
  * type:                                  Types.              (line    6)
  * type declaration:                      Declarations.       (line    6)
- * TYPENAME_TYPE:                         Types for C++.      (line    6)
- * TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
- * TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
- * TYPEOF_TYPE:                           Types for C++.      (line    6)
  * TYPE_ALIGN:                            Types.              (line    6)
  * TYPE_ALIGN <1>:                        Types.              (line   30)
  * TYPE_ALIGN <2>:                        Types for C++.      (line    6)
--- 59283,59288 ----
*************** Concept Index
*** 59329,59340 ****
  * TYPE_POLYMORPHIC_P:                    Classes.            (line   74)
  * TYPE_PRECISION:                        Types.              (line    6)
  * TYPE_PRECISION <1>:                    Types for C++.      (line    6)
  * TYPE_PTRDATAMEM_P:                     Types for C++.      (line    6)
  * TYPE_PTRDATAMEM_P <1>:                 Types for C++.      (line   69)
  * TYPE_PTRFN_P:                          Types for C++.      (line   76)
- * TYPE_PTROBV_P:                         Types for C++.      (line    6)
  * TYPE_PTROB_P:                          Types for C++.      (line   79)
! * TYPE_PTR_P:                            Types for C++.      (line   72)
  * TYPE_QUAL_CONST:                       Types.              (line    6)
  * TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
  * TYPE_QUAL_RESTRICT:                    Types.              (line    6)
--- 59326,59337 ----
  * TYPE_POLYMORPHIC_P:                    Classes.            (line   74)
  * TYPE_PRECISION:                        Types.              (line    6)
  * TYPE_PRECISION <1>:                    Types for C++.      (line    6)
+ * TYPE_PTR_P:                            Types for C++.      (line   72)
  * TYPE_PTRDATAMEM_P:                     Types for C++.      (line    6)
  * TYPE_PTRDATAMEM_P <1>:                 Types for C++.      (line   69)
  * TYPE_PTRFN_P:                          Types for C++.      (line   76)
  * TYPE_PTROB_P:                          Types for C++.      (line   79)
! * TYPE_PTROBV_P:                         Types for C++.      (line    6)
  * TYPE_QUAL_CONST:                       Types.              (line    6)
  * TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
  * TYPE_QUAL_RESTRICT:                    Types.              (line    6)
*************** Concept Index
*** 59351,59356 ****
--- 59348,59357 ----
  * TYPE_UNQUALIFIED:                      Types.              (line    6)
  * TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
  * TYPE_VFIELD:                           Classes.            (line    6)
+ * TYPENAME_TYPE:                         Types for C++.      (line    6)
+ * TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
+ * TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
+ * TYPEOF_TYPE:                           Types for C++.      (line    6)
  * uabdM instruction pattern:             Standard Names.     (line 1162)
  * uaddcM5 instruction pattern:           Standard Names.     (line  656)
  * uaddvM4 instruction pattern:           Standard Names.     (line  648)
*************** Concept Index
*** 59364,59375 ****
  * UDQmode:                               Machine Modes.      (line  138)
  * UHAmode:                               Machine Modes.      (line  162)
  * UHQmode:                               Machine Modes.      (line  130)
- * UINT16_TYPE:                           Type Layout.        (line  214)
- * UINT32_TYPE:                           Type Layout.        (line  215)
- * UINT64_TYPE:                           Type Layout.        (line  216)
- * UINT8_TYPE:                            Type Layout.        (line  213)
- * UINTMAX_TYPE:                          Type Layout.        (line  197)
- * UINTPTR_TYPE:                          Type Layout.        (line  234)
  * UINT_FAST16_TYPE:                      Type Layout.        (line  230)
  * UINT_FAST32_TYPE:                      Type Layout.        (line  231)
  * UINT_FAST64_TYPE:                      Type Layout.        (line  232)
--- 59365,59370 ----
*************** Concept Index
*** 59378,59383 ****
--- 59373,59384 ----
  * UINT_LEAST32_TYPE:                     Type Layout.        (line  223)
  * UINT_LEAST64_TYPE:                     Type Layout.        (line  224)
  * UINT_LEAST8_TYPE:                      Type Layout.        (line  221)
+ * UINT16_TYPE:                           Type Layout.        (line  214)
+ * UINT32_TYPE:                           Type Layout.        (line  215)
+ * UINT64_TYPE:                           Type Layout.        (line  216)
+ * UINT8_TYPE:                            Type Layout.        (line  213)
+ * UINTMAX_TYPE:                          Type Layout.        (line  197)
+ * UINTPTR_TYPE:                          Type Layout.        (line  234)
  * umaddMN4 instruction pattern:          Standard Names.     (line 1086)
  * umax:                                  Arithmetic.         (line  155)
  * umaxM3 instruction pattern:            Standard Names.     (line  629)
*************** Concept Index
*** 59386,59391 ****
--- 59387,59393 ----
  * umod:                                  Arithmetic.         (line  142)
  * umodM3 instruction pattern:            Standard Names.     (line  629)
  * umsubMN4 instruction pattern:          Standard Names.     (line 1110)
+ * umul_highpart:                         Arithmetic.         (line  111)
  * umulhisi3 instruction pattern:         Standard Names.     (line 1055)
  * umulhrsM3 instruction pattern:         Standard Names.     (line  870)
  * umulhsM3 instruction pattern:          Standard Names.     (line  858)
*************** Concept Index
*** 59393,59399 ****
  * umulqihi3 instruction pattern:         Standard Names.     (line 1055)
  * umulsidi3 instruction pattern:         Standard Names.     (line 1055)
  * umulvM4 instruction pattern:           Standard Names.     (line  653)
- * umul_highpart:                         Arithmetic.         (line  111)
  * unchanging:                            Flags.              (line  307)
  * unchanging, in call_insn:              Flags.              (line  115)
  * unchanging, in jump_insn, call_insn and insn: Flags.       (line   28)
--- 59395,59400 ----
*************** Concept Index
*** 59407,59415 ****
                                                               (line    6)
  * UNGT_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
- * unions, returning:                     Interface.          (line   10)
  * UNION_TYPE:                            Types.              (line    6)
  * UNION_TYPE <1>:                        Classes.            (line    6)
  * UNITS_PER_WORD:                        Storage Layout.     (line   60)
  * UNKNOWN_TYPE:                          Types.              (line    6)
  * UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
--- 59408,59416 ----
                                                               (line    6)
  * UNGT_EXPR:                             Unary and Binary Expressions.
                                                               (line    6)
  * UNION_TYPE:                            Types.              (line    6)
  * UNION_TYPE <1>:                        Classes.            (line    6)
+ * unions, returning:                     Interface.          (line   10)
  * UNITS_PER_WORD:                        Storage Layout.     (line   60)
  * UNKNOWN_TYPE:                          Types.              (line    6)
  * UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
*************** Concept Index
*** 59432,59441 ****
  * unsigned_float:                        Conversions.        (line   62)
  * unsigned_fract_convert:                Conversions.        (line   97)
  * unsigned_sat_fract:                    Conversions.        (line  103)
! * unspec:                                Side Effects.       (line  290)
  * unspec <1>:                            Constant Definitions.
                                                               (line  114)
! * unspec_volatile:                       Side Effects.       (line  290)
  * unspec_volatile <1>:                   Constant Definitions.
                                                               (line  102)
  * untyped_call instruction pattern:      Standard Names.     (line 2404)
--- 59433,59442 ----
  * unsigned_float:                        Conversions.        (line   62)
  * unsigned_fract_convert:                Conversions.        (line   97)
  * unsigned_sat_fract:                    Conversions.        (line  103)
! * unspec:                                Side Effects.       (line  289)
  * unspec <1>:                            Constant Definitions.
                                                               (line  114)
! * unspec_volatile:                       Side Effects.       (line  289)
  * unspec_volatile <1>:                   Constant Definitions.
                                                               (line  102)
  * untyped_call instruction pattern:      Standard Names.     (line 2404)
*************** Concept Index
*** 59448,59453 ****
--- 59449,59460 ----
  * update_stmt_if_modified:               Manipulating GIMPLE statements.
                                                               (line  136)
  * UQQmode:                               Machine Modes.      (line  126)
+ * us_ashift:                             Arithmetic.         (line  179)
+ * us_minus:                              Arithmetic.         (line   38)
+ * us_mult:                               Arithmetic.         (line   92)
+ * us_neg:                                Arithmetic.         (line   81)
+ * us_plus:                               Arithmetic.         (line   14)
+ * us_truncate:                           Conversions.        (line   48)
  * usaddM3 instruction pattern:           Standard Names.     (line  629)
  * usadM instruction pattern:             Standard Names.     (line  840)
  * USAmode:                               Machine Modes.      (line  166)
*************** Concept Index
*** 59455,59467 ****
  * usdivM3 instruction pattern:           Standard Names.     (line  629)
  * usdot_prodM instruction pattern:       Standard Names.     (line  825)
  * use:                                   Side Effects.       (line  161)
- * used:                                  Flags.              (line  325)
- * used, in symbol_ref:                   Flags.              (line  211)
- * user:                                  GTY Options.        (line  289)
- * user experience guidelines:            User Experience Guidelines.
-                                                              (line    6)
- * user gc:                               User GC.            (line    6)
- * USER_LABEL_PREFIX:                     Instruction Output. (line  152)
  * USE_C_ALLOCA:                          Host Misc.          (line   19)
  * USE_LD_AS_NEEDED:                      Driver.             (line  135)
  * USE_LOAD_POST_DECREMENT:               Costs.              (line  261)
--- 59462,59467 ----
*************** Concept Index
*** 59473,59478 ****
--- 59473,59485 ----
  * USE_STORE_POST_INCREMENT:              Costs.              (line  276)
  * USE_STORE_PRE_DECREMENT:               Costs.              (line  291)
  * USE_STORE_PRE_INCREMENT:               Costs.              (line  286)
+ * used:                                  Flags.              (line  325)
+ * used, in symbol_ref:                   Flags.              (line  211)
+ * user:                                  GTY Options.        (line  288)
+ * user experience guidelines:            User Experience Guidelines.
+                                                              (line    6)
+ * user gc:                               User GC.            (line    6)
+ * USER_LABEL_PREFIX:                     Instruction Output. (line  152)
  * USING_STMT:                            Statements for C and C++.
                                                               (line    6)
  * usmaddMN4 instruction pattern:         Standard Names.     (line 1094)
*************** Concept Index
*** 59486,59521 ****
  * ussubM3 instruction pattern:           Standard Names.     (line  629)
  * usubcM5 instruction pattern:           Standard Names.     (line  664)
  * usubvM4 instruction pattern:           Standard Names.     (line  653)
- * us_ashift:                             Arithmetic.         (line  179)
- * us_minus:                              Arithmetic.         (line   38)
- * us_mult:                               Arithmetic.         (line   92)
- * us_neg:                                Arithmetic.         (line   81)
- * us_plus:                               Arithmetic.         (line   14)
- * us_truncate:                           Conversions.        (line   48)
  * UTAmode:                               Machine Modes.      (line  174)
  * UTQmode:                               Machine Modes.      (line  142)
  * V in constraint:                       Simple Constraints. (line   43)
  * values, returned by functions:         Scalar Return.      (line    6)
  * varargs implementation:                Varargs.            (line    6)
  * variable:                              Declarations.       (line    6)
  * Variable Location Debug Information in RTL: Debug Information.
                                                               (line    6)
- * VAR_DECL:                              Declarations.       (line    6)
- * var_location:                          Debug Information.  (line   14)
  * vashlM3 instruction pattern:           Standard Names.     (line 1158)
  * vashrM3 instruction pattern:           Standard Names.     (line 1158)
! * VA_ARG_EXPR:                           Unary and Binary Expressions.
!                                                              (line    6)
  * vcondeqMN instruction pattern:         Standard Names.     (line  462)
  * vcondMN instruction pattern:           Standard Names.     (line  449)
  * vconduMN instruction pattern:          Standard Names.     (line  459)
- * vcond_mask_len_MN instruction pattern: Standard Names.     (line  473)
- * vcond_mask_MN instruction pattern:     Standard Names.     (line  469)
- * vector:                                Containers.         (line    6)
- * vector operations:                     Vector Operations.  (line    6)
- * VECTOR_CST:                            Constant expressions.
-                                                              (line    6)
- * VECTOR_STORE_FLAG_VALUE:               Misc.               (line  329)
  * vec_addsubM3 instruction pattern:      Standard Names.     (line 1029)
  * vec_cmpeqMN instruction pattern:       Standard Names.     (line  442)
  * vec_cmpMN instruction pattern:         Standard Names.     (line  432)
--- 59493,59517 ----
  * ussubM3 instruction pattern:           Standard Names.     (line  629)
  * usubcM5 instruction pattern:           Standard Names.     (line  664)
  * usubvM4 instruction pattern:           Standard Names.     (line  653)
  * UTAmode:                               Machine Modes.      (line  174)
  * UTQmode:                               Machine Modes.      (line  142)
  * V in constraint:                       Simple Constraints. (line   43)
+ * VA_ARG_EXPR:                           Unary and Binary Expressions.
+                                                              (line    6)
  * values, returned by functions:         Scalar Return.      (line    6)
+ * VAR_DECL:                              Declarations.       (line    6)
+ * var_location:                          Debug Information.  (line   14)
  * varargs implementation:                Varargs.            (line    6)
  * variable:                              Declarations.       (line    6)
  * Variable Location Debug Information in RTL: Debug Information.
                                                               (line    6)
  * vashlM3 instruction pattern:           Standard Names.     (line 1158)
  * vashrM3 instruction pattern:           Standard Names.     (line 1158)
! * vcond_mask_len_MN instruction pattern: Standard Names.     (line  473)
! * vcond_mask_MN instruction pattern:     Standard Names.     (line  469)
  * vcondeqMN instruction pattern:         Standard Names.     (line  462)
  * vcondMN instruction pattern:           Standard Names.     (line  449)
  * vconduMN instruction pattern:          Standard Names.     (line  459)
  * vec_addsubM3 instruction pattern:      Standard Names.     (line 1029)
  * vec_cmpeqMN instruction pattern:       Standard Names.     (line  442)
  * vec_cmpMN instruction pattern:         Standard Names.     (line  432)
*************** Concept Index
*** 59523,59530 ****
  * vec_concat:                            Vector Operations.  (line   29)
  * VEC_COND_EXPR:                         Vectors.            (line    6)
  * vec_duplicate:                         Vector Operations.  (line   34)
- * vec_duplicateM instruction pattern:    Standard Names.     (line  348)
  * VEC_DUPLICATE_EXPR:                    Vectors.            (line    6)
  * vec_extractMN instruction pattern:     Standard Names.     (line  330)
  * vec_fmaddsubM4 instruction pattern:    Standard Names.     (line 1034)
  * vec_fmsubaddM4 instruction pattern:    Standard Names.     (line 1040)
--- 59519,59526 ----
  * vec_concat:                            Vector Operations.  (line   29)
  * VEC_COND_EXPR:                         Vectors.            (line    6)
  * vec_duplicate:                         Vector Operations.  (line   34)
  * VEC_DUPLICATE_EXPR:                    Vectors.            (line    6)
+ * vec_duplicateM instruction pattern:    Standard Names.     (line  348)
  * vec_extractMN instruction pattern:     Standard Names.     (line  330)
  * vec_fmaddsubM4 instruction pattern:    Standard Names.     (line 1034)
  * vec_fmsubaddM4 instruction pattern:    Standard Names.     (line 1040)
*************** Concept Index
*** 59541,59548 ****
  * vec_merge:                             Vector Operations.  (line   11)
  * vec_merge, canonicalization of:        Insn Canonicalizations.
                                                               (line   21)
- * vec_packs_float_M instruction pattern: Standard Names.     (line  938)
- * vec_packu_float_M instruction pattern: Standard Names.     (line  938)
  * VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
  * VEC_PACK_FLOAT_EXPR:                   Vectors.            (line    6)
  * VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
--- 59537,59542 ----
*************** Concept Index
*** 59554,59571 ****
  * vec_pack_trunc_M instruction pattern:  Standard Names.     (line  908)
  * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  931)
  * vec_pack_usat_M instruction pattern:   Standard Names.     (line  924)
  * vec_permM instruction pattern:         Standard Names.     (line  597)
  * vec_permM instruction pattern <1>:     Addressing Modes.   (line  350)
  * VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
  * vec_select:                            Vector Operations.  (line   19)
  * vec_series:                            Vector Operations.  (line   41)
- * vec_seriesM instruction pattern:       Standard Names.     (line  358)
  * VEC_SERIES_EXPR:                       Vectors.            (line    6)
  * vec_setM instruction pattern:          Standard Names.     (line  323)
  * vec_shl_insert_M instruction pattern:  Standard Names.     (line  889)
  * vec_shl_M instruction pattern:         Standard Names.     (line  896)
  * vec_shr_M instruction pattern:         Standard Names.     (line  902)
  * vec_store_lanesMN instruction pattern: Standard Names.     (line  221)
  * vec_unpacks_float_hi_M instruction pattern: Standard Names.
                                                               (line  968)
  * vec_unpacks_float_lo_M instruction pattern: Standard Names.
--- 59548,59581 ----
  * vec_pack_trunc_M instruction pattern:  Standard Names.     (line  908)
  * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  931)
  * vec_pack_usat_M instruction pattern:   Standard Names.     (line  924)
+ * vec_packs_float_M instruction pattern: Standard Names.     (line  938)
+ * vec_packu_float_M instruction pattern: Standard Names.     (line  938)
  * vec_permM instruction pattern:         Standard Names.     (line  597)
  * vec_permM instruction pattern <1>:     Addressing Modes.   (line  350)
  * VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
  * vec_select:                            Vector Operations.  (line   19)
  * vec_series:                            Vector Operations.  (line   41)
  * VEC_SERIES_EXPR:                       Vectors.            (line    6)
+ * vec_seriesM instruction pattern:       Standard Names.     (line  358)
  * vec_setM instruction pattern:          Standard Names.     (line  323)
  * vec_shl_insert_M instruction pattern:  Standard Names.     (line  889)
  * vec_shl_M instruction pattern:         Standard Names.     (line  896)
  * vec_shr_M instruction pattern:         Standard Names.     (line  902)
  * vec_store_lanesMN instruction pattern: Standard Names.     (line  221)
+ * VEC_UNPACK_FIX_TRUNC_HI_EXPR:          Vectors.            (line    6)
+ * VEC_UNPACK_FIX_TRUNC_LO_EXPR:          Vectors.            (line    6)
+ * VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
+ * VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
+ * VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
+ * VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
+ * vec_unpack_sfix_trunc_hi_M instruction pattern: Standard Names.
+                                                              (line  977)
+ * vec_unpack_sfix_trunc_lo_M instruction pattern: Standard Names.
+                                                              (line  977)
+ * vec_unpack_ufix_trunc_hi_M instruction pattern: Standard Names.
+                                                              (line  977)
+ * vec_unpack_ufix_trunc_lo_M instruction pattern: Standard Names.
+                                                              (line  977)
  * vec_unpacks_float_hi_M instruction pattern: Standard Names.
                                                               (line  968)
  * vec_unpacks_float_lo_M instruction pattern: Standard Names.
*************** Concept Index
*** 59582,59601 ****
                                                               (line  968)
  * vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  952)
  * vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  952)
- * VEC_UNPACK_FIX_TRUNC_HI_EXPR:          Vectors.            (line    6)
- * VEC_UNPACK_FIX_TRUNC_LO_EXPR:          Vectors.            (line    6)
- * VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
- * VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
- * VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
- * VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
- * vec_unpack_sfix_trunc_hi_M instruction pattern: Standard Names.
-                                                              (line  977)
- * vec_unpack_sfix_trunc_lo_M instruction pattern: Standard Names.
-                                                              (line  977)
- * vec_unpack_ufix_trunc_hi_M instruction pattern: Standard Names.
-                                                              (line  977)
- * vec_unpack_ufix_trunc_lo_M instruction pattern: Standard Names.
-                                                              (line  977)
  * VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
  * VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
  * vec_widen_sabd_even_M instruction pattern: Standard Names. (line 1019)
--- 59592,59597 ----
*************** Concept Index
*** 59632,59637 ****
--- 59628,59638 ----
                                                               (line  998)
  * vec_widen_usubl_hi_M instruction pattern: Standard Names.  (line 1012)
  * vec_widen_usubl_lo_M instruction pattern: Standard Names.  (line 1012)
+ * vector:                                Containers.         (line    6)
+ * vector operations:                     Vector Operations.  (line    6)
+ * VECTOR_CST:                            Constant expressions.
+                                                              (line    6)
+ * VECTOR_STORE_FLAG_VALUE:               Misc.               (line  329)
  * verify_flow_info:                      Maintaining the CFG.
                                                               (line  116)
  * virtual operands:                      SSA Operands.       (line    6)
*************** Concept Index
*** 59646,59653 ****
  * vlshrM3 instruction pattern:           Standard Names.     (line 1158)
  * VMS:                                   Filesystem.         (line   37)
  * VMS_DEBUGGING_INFO:                    VMS Debug.          (line    8)
- * VOIDmode:                              Machine Modes.      (line  191)
  * VOID_TYPE:                             Types.              (line    6)
  * volatil:                               Flags.              (line  339)
  * volatil, in insn, call_insn, jump_insn, code_label, jump_table_data, barrier, and note: Flags.
                                                               (line   33)
--- 59647,59654 ----
  * vlshrM3 instruction pattern:           Standard Names.     (line 1158)
  * VMS:                                   Filesystem.         (line   37)
  * VMS_DEBUGGING_INFO:                    VMS Debug.          (line    8)
  * VOID_TYPE:                             Types.              (line    6)
+ * VOIDmode:                              Machine Modes.      (line  191)
  * volatil:                               Flags.              (line  339)
  * volatil, in insn, call_insn, jump_insn, code_label, jump_table_data, barrier, and note: Flags.
                                                               (line   33)
*************** Concept Index
*** 59687,59696 ****
  * WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  110)
  * window_save instruction pattern:       Standard Names.     (line 2749)
  * WINT_TYPE:                             Type Layout.        (line  178)
- * WORDS_BIG_ENDIAN:                      Storage Layout.     (line   28)
- * WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  225)
  * word_mode:                             Machine Modes.      (line  462)
  * WORD_REGISTER_OPERATIONS:              Misc.               (line   53)
  * wpa:                                   LTO.                (line    6)
  * X in constraint:                       Simple Constraints. (line  122)
  * x-HOST:                                Host Fragment.      (line    6)
--- 59688,59697 ----
  * WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  110)
  * window_save instruction pattern:       Standard Names.     (line 2749)
  * WINT_TYPE:                             Type Layout.        (line  178)
  * word_mode:                             Machine Modes.      (line  462)
  * WORD_REGISTER_OPERATIONS:              Misc.               (line   53)
+ * WORDS_BIG_ENDIAN:                      Storage Layout.     (line   28)
+ * WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  225)
  * wpa:                                   LTO.                (line    6)
  * X in constraint:                       Simple Constraints. (line  122)
  * x-HOST:                                Host Fragment.      (line    6)
*************** Concept Index
*** 59720,60181 ****
  
  
  Tag Table:
! Node: Top1789
! Node: Contributing5164
! Node: Portability5899
! Node: Interface7687
! Node: Libgcc10728
! Node: Integer library routines12555
! Node: Soft float library routines22352
! Node: Decimal float library routines35648
! Node: Fixed-point fractional library routines52553
! Node: Exception handling routines152949
! Node: Miscellaneous routines154056
! Node: Languages156176
! Node: Source Tree157723
! Node: Configure Terms158306
! Node: Top Level161262
! Node: gcc Directory165332
! Node: Subdirectories166284
! Node: Configuration168472
! Node: Config Fragments169192
! Node: System Config170417
! Node: Configuration Files171353
! Node: Build173969
! Node: Makefile174381
! Ref: Makefile-Footnote-1181575
! Ref: Makefile-Footnote-2181722
! Node: Library Files181796
! Node: Headers182358
! Node: Documentation184441
! Node: Texinfo Manuals185300
! Node: Man Page Generation187629
! Node: Miscellaneous Docs189341
! Node: Front End190728
! Node: Front End Directory194660
! Node: Front End Config195977
! Node: Front End Makefile198814
! Node: Back End202582
! Node: Testsuites207654
! Node: Test Idioms208643
! Node: Test Directives212041
! Node: Directives212568
! Node: Selectors225170
! Node: Effective-Target Keywords228498
! Ref: arm_fp_ok244113
! Ref: arm_fp_dp_ok244280
! Ref: arm_neon_ok245313
! Ref: arm_neon_ok_no_float_abi245482
! Ref: arm_neonv2_ok245649
! Ref: arm_fp16_ok245816
! Ref: arm_neon_fp16_ok246158
! Ref: arm_vfp3_ok247090
! Ref: arm_arch_v8a_hard_ok247233
! Ref: arm_v8_1a_neon_ok247983
! Ref: arm_v8_2a_fp16_scalar_ok248411
! Ref: arm_v8_2a_fp16_neon_ok248862
! Ref: arm_v8_2a_dotprod_neon_ok249337
! Ref: arm_fp16fml_neon_ok249982
! Ref: arm_coproc1_ok252960
! Ref: arm_coproc2_ok253086
! Ref: arm_coproc3_ok253314
! Ref: arm_simd32_ok253681
! Ref: arm_sat_ok253858
! Ref: arm_dsp_ok254039
! Ref: arm_softfp_ok254216
! Ref: arm_hard_ok254289
! Ref: arm_mve254356
! Ref: arm_v8_1_lob_ok254429
! Ref: default_packed269869
! Ref: stack_size_et273583
! Node: Add Options276517
! Ref: arm_fp16_ieee277755
! Ref: arm_fp16_alternative278010
! Ref: stack_size_ao280574
! Node: Require Support281232
! Node: Final Actions284306
! Node: Ada Tests296942
! Node: C Tests298105
! Node: LTO Testing302477
! Node: gcov Testing304120
! Node: profopt Testing307090
! Node: compat Testing308805
! Node: Torture Tests313045
! Node: GIMPLE Tests314679
! Node: RTL Tests315921
! Node: Options317227
! Node: Option file format317668
! Node: Option properties326156
! Node: Passes344629
! Node: Parsing pass345502
! Node: Gimplification pass349030
! Node: Pass manager350864
! Node: IPA passes352706
! Node: Small IPA passes353599
! Node: Regular IPA passes357049
! Node: Late IPA passes361851
! Node: Tree SSA passes362812
! Node: RTL passes384744
! Node: Optimization info397027
! Node: Dump setup397846
! Node: Optimization groups398976
! Node: Dump files and streams399955
! Node: Dump output verbosity401154
! Node: Dump types402210
! Node: Dump examples404553
! Node: poly_int406034
! Node: Overview of poly_int407514
! Node: Consequences of using poly_int410118
! Node: Comparisons involving poly_int411753
! Node: Comparison functions for poly_int413391
! Node: Properties of the poly_int comparisons414598
! Node: Comparing potentially-unordered poly_ints417040
! Node: Comparing ordered poly_ints417951
! Node: Checking for a poly_int marker value419975
! Node: Range checks on poly_ints420824
! Node: Sorting poly_ints423478
! Node: Arithmetic on poly_ints424251
! Node: Using poly_int with C++ arithmetic operators425052
! Node: wi arithmetic on poly_ints426583
! Node: Division of poly_ints427435
! Node: Other poly_int arithmetic428942
! Node: Alignment of poly_ints430348
! Node: Computing bounds on poly_ints433625
! Node: Converting poly_ints435014
! Node: Miscellaneous poly_int routines438561
! Node: Guidelines for using poly_int439201
! Node: GENERIC444133
! Node: Deficiencies445955
! Node: Tree overview446196
! Node: Macros and Functions450320
! Node: Identifiers451145
! Node: Containers452754
! Node: Types453911
! Node: Declarations466732
! Node: Working with declarations467227
! Node: Internal structure472831
! Node: Current structure hierarchy473215
! Node: Adding new DECL node types475308
! Node: Attributes479594
! Node: Expression trees480838
! Node: Constant expressions482592
! Node: Storage References488684
! Node: Unary and Binary Expressions492525
! Node: Vectors514000
! Node: Statements525526
! Node: Basic Statements526058
! Node: Blocks530833
! Node: Statement Sequences532534
! Node: Empty Statements532867
! Node: Jumps533441
! Node: Cleanups534094
! Node: OpenMP536135
! Node: OpenACC544614
! Node: Functions545731
! Node: Function Basics546202
! Node: Function Properties549886
! Node: Language-dependent trees552667
! Node: C and C++ Trees553554
! Node: Types for C++556439
! Node: Namespaces561409
! Node: Classes564515
! Node: Functions for C++569423
! Node: Statements for C and C++575680
! Node: C++ Expressions584187
! Node: GIMPLE585698
! Node: Tuple representation589363
! Node: Class hierarchy of GIMPLE statements596323
! Node: GIMPLE instruction set601311
! Node: GIMPLE Exception Handling602976
! Node: Temporaries604888
! Ref: Temporaries-Footnote-1606206
! Node: Operands606271
! Node: Compound Expressions607032
! Node: Compound Lvalues607266
! Node: Conditional Expressions608028
! Node: Logical Operators608687
! Node: Manipulating GIMPLE statements615998
! Node: Tuple specific accessors621580
! Node: GIMPLE_ASM622391
! Node: GIMPLE_ASSIGN624774
! Node: GIMPLE_BIND629478
! Node: GIMPLE_CALL631292
! Node: GIMPLE_CATCH635435
! Node: GIMPLE_COND636585
! Node: GIMPLE_DEBUG639380
! Node: GIMPLE_EH_FILTER643978
! Node: GIMPLE_LABEL645541
! Node: GIMPLE_GOTO646154
! Node: GIMPLE_NOP646677
! Node: GIMPLE_OMP_ATOMIC_LOAD647039
! Node: GIMPLE_OMP_ATOMIC_STORE648035
! Node: GIMPLE_OMP_CONTINUE648734
! Node: GIMPLE_OMP_CRITICAL650213
! Node: GIMPLE_OMP_FOR651207
! Node: GIMPLE_OMP_MASTER654623
! Node: GIMPLE_OMP_ORDERED655001
! Node: GIMPLE_OMP_PARALLEL655404
! Node: GIMPLE_OMP_RETURN658191
! Node: GIMPLE_OMP_SECTION658836
! Node: GIMPLE_OMP_SECTIONS659500
! Node: GIMPLE_OMP_SINGLE661110
! Node: GIMPLE_OMP_STRUCTURED_BLOCK662073
! Node: GIMPLE_PHI662865
! Node: GIMPLE_RESX664154
! Node: GIMPLE_RETURN664873
! Node: GIMPLE_SWITCH665447
! Node: GIMPLE_TRY667322
! Node: GIMPLE_WITH_CLEANUP_EXPR669094
! Node: GIMPLE sequences669973
! Node: Sequence iterators673179
! Node: Adding a new GIMPLE statement code681636
! Node: Statement and operand traversals682985
! Node: Tree SSA685577
! Node: Annotations687365
! Node: SSA Operands687770
! Node: SSA701574
! Node: Alias analysis711281
! Node: Memory model715056
! Node: RTL716415
! Node: RTL Objects718657
! Node: RTL Classes722541
! Node: Accessors727839
! Node: Special Accessors730012
! Node: Flags735799
! Node: Machine Modes751062
! Node: Constants768629
! Node: Regs and Memory780428
! Node: Arithmetic797699
! Node: Comparisons808402
! Node: Bit-Fields812104
! Node: Vector Operations813655
! Node: Conversions815759
! Node: RTL Declarations820257
! Node: Side Effects821101
! Node: Incdec837589
! Node: Assembler840925
! Node: Debug Information842470
! Node: Insns844397
! Node: Calls870286
! Node: RTL SSA872879
! Node: Using RTL SSA874270
! Node: RTL SSA Instructions876187
! Ref: RTL SSA Instructions-Footnote-1877573
! Node: RTL SSA Basic Blocks877707
! Ref: real RTL SSA insns878175
! Ref: RTL SSA Basic Blocks-Footnote-1880397
! Node: RTL SSA Resources880531
! Node: RTL SSA Accesses881648
! Ref: RTL SSA Accesses-Footnote-1883349
! Node: RTL SSA Phi Nodes883492
! Node: RTL SSA Access Lists885496
! Node: Changing RTL Instructions889777
! Node: Changing One RTL SSA Instruction890386
! Node: Changing Multiple RTL SSA Instructions895340
! Node: Sharing899668
! Node: Reading RTL902824
! Node: Control Flow903816
! Node: Basic Blocks905584
! Node: Edges911038
! Node: Profile information919657
! Node: Maintaining the CFG924341
! Node: Liveness information930109
! Node: Loop Analysis and Representation932236
! Node: Loop representation933272
! Node: Loop querying940716
! Node: Loop manipulation943525
! Node: LCSSA945871
! Node: Scalar evolutions947940
! Node: loop-iv951184
! Node: Number of iterations953106
! Node: Dependency analysis957187
! Node: Machine Desc963539
! Node: Overview966174
! Node: Patterns968214
! Node: Example973181
! Node: RTL Template974642
! Node: Output Template985290
! Node: Output Statement989471
! Node: Compact Syntax993814
! Node: Predicates998655
! Node: Machine-Independent Predicates1001571
! Node: Defining Predicates1006516
! Node: Constraints1012479
! Node: Simple Constraints1013948
! Node: Multi-Alternative1026788
! Node: Class Preferences1029988
! Node: Modifiers1030880
! Node: Machine Constraints1035614
! Node: Disable Insn Alternatives1095760
! Node: Define Constraints1099252
! Node: C Constraint Interface1109547
! Node: Standard Names1112674
! Ref: shift patterns1163237
! Ref: prologue instruction pattern1230251
! Ref: window_save instruction pattern1230744
! Ref: epilogue instruction pattern1231021
! Node: Pattern Ordering1254246
! Node: Dependent Patterns1255482
! Node: Jump Patterns1257102
! Node: Looping Patterns1258779
! Node: Insn Canonicalizations1264418
! Node: Expander Definitions1269930
! Node: Insn Splitting1278143
! Node: Including Patterns1293234
! Node: Peephole Definitions1295011
! Node: define_peephole1296264
! Node: define_peephole21302594
! Node: Insn Attributes1307210
! Node: Defining Attributes1308307
! Ref: define_enum_attr1311799
! Node: Expressions1312835
! Node: Tagging Insns1319585
! Node: Attr Example1323938
! Node: Insn Lengths1326311
! Node: Constant Attributes1329723
! Node: Mnemonic Attribute1330899
! Node: Delay Slots1332418
! Node: Processor pipeline description1335641
! Ref: Processor pipeline description-Footnote-11354453
! Node: Conditional Execution1354777
! Node: Define Subst1358260
! Node: Define Subst Example1360295
! Node: Define Subst Pattern Matching1363290
! Node: Define Subst Output Template1364516
! Node: Constant Definitions1366839
! Ref: define_enum1370698
! Node: Iterators1371186
! Node: Mode Iterators1371831
! Node: Defining Mode Iterators1372809
! Node: Substitutions1374777
! Node: Examples1377019
! Node: Code Iterators1378479
! Node: Int Iterators1381609
! Node: Subst Iterators1384182
! Node: Parameterized Names1385902
! Node: Target Macros1389920
! Node: Target Structure1393039
! Node: Driver1395937
! Node: Run-time Target1414910
! Node: Per-Function Data1425567
! Node: Storage Layout1428331
! Node: Type Layout1457553
! Node: Registers1470895
! Node: Register Basics1471869
! Node: Allocation Order1479431
! Node: Values in Registers1481915
! Node: Leaf Functions1489391
! Node: Stack Registers1492250
! Node: Register Classes1493523
! Node: Stack and Calling1529601
! Node: Frame Layout1530207
! Node: Exception Handling1544984
! Node: Stack Checking1551719
! Node: Frame Registers1557345
! Node: Elimination1565891
! Node: Stack Arguments1569747
! Node: Register Arguments1577200
! Node: Scalar Return1602308
! Node: Aggregate Return1608764
! Node: Caller Saves1613494
! Node: Function Entry1614236
! Node: Profiling1625788
! Node: Tail Calls1627898
! Node: Shrink-wrapping separate components1629808
! Node: Stack Smashing Protection1632849
! Node: Miscellaneous Register Hooks1635338
! Node: Varargs1636203
! Node: Trampolines1645773
! Node: Library Calls1655466
! Node: Addressing Modes1661777
! Node: Anchored Addresses1693778
! Node: Condition Code1696421
! Node: MODE_CC Condition Codes1698266
! Node: Costs1705029
! Node: Scheduling1727349
! Node: Sections1751271
! Node: PIC1767641
! Node: Assembler Format1769700
! Node: File Framework1770838
! Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1778437
! Node: Data Output1780112
! Node: Uninitialized Data1788400
! Node: Label Output1793415
! Node: Initialization1818028
! Node: Macros for Initialization1823989
! Node: Instruction Output1831140
! Node: Dispatch Tables1841770
! Node: Exception Region Output1847521
! Node: Alignment Output1854603
! Node: Debugging Info1858290
! Node: All Debuggers1858840
! Node: DWARF1861773
! Node: VMS Debug1867548
! Node: CTF Debug1868145
! Node: BTF Debug1868506
! Node: Floating Point1868849
! Node: Mode Switching1871604
! Node: Target Attributes1879620
! Node: Emulated TLS1892608
! Node: MIPS Coprocessors1895998
! Node: PCH Target1897157
! Node: C++ ABI1898999
! Node: D Language and ABI1904225
! Node: Rust Language and ABI1907450
! Node: Named Address Spaces1908189
! Node: Misc1914231
! Ref: TARGET_SHIFT_TRUNCATION_MASK1922102
! Node: Host Config1984165
! Node: Host Common1985234
! Node: Filesystem1987608
! Node: Host Misc1991723
! Node: Fragments1994172
! Node: Target Fragment1995367
! Node: Host Fragment2006179
! Node: Collect22006419
! Node: Header Dirs2009055
! Node: Type Information2010478
! Node: GTY Options2014009
! Node: Inheritance and GTY2027155
! Ref: Inheritance and GTY-Footnote-12028720
! Node: User GC2028990
! Node: GGC Roots2032741
! Node: Files2033454
! Node: Invoking the garbage collector2036085
! Node: Troubleshooting2037727
! Node: Plugins2038802
! Node: Plugins loading2039931
! Node: Plugin API2041027
! Node: Plugins pass2048894
! Node: Plugins GC2050865
! Node: Plugins description2052582
! Node: Plugins attr2053118
! Node: Plugins recording2055398
! Node: Plugins gate2056248
! Node: Plugins tracking2056839
! Node: Plugins building2057427
! Node: LTO2060930
! Node: LTO Overview2061802
! Node: LTO object file layout2067558
! Node: IPA2072057
! Node: WHOPR2081109
! Node: Internal flags2085669
! Node: Match and Simplify2087080
! Node: GIMPLE API2088050
! Node: The Language2090852
! Node: Static Analyzer2103479
! Node: Analyzer Internals2103744
! Node: Debugging the Analyzer2119709
! Node: User Experience Guidelines2127367
! Node: Guidelines for Diagnostics2128303
! Ref: input_location_example2136478
! Node: Guidelines for Options2146163
! Node: Funding2146340
! Node: GNU Project2148847
! Node: Copying2149498
! Node: GNU Free Documentation License2187015
! Node: Contributors2212141
! Node: Option Index2253345
! Node: Concept Index2254222
  
  End Tag Table
--- 59721,60187 ----
  
  
  Tag Table:
! Node: Top1787
! Node: Contributing5194
! Node: Portability5929
! Node: Interface7733
! Node: Libgcc10798
! Node: Integer library routines12713
! Node: Soft float library routines22556
! Node: Decimal float library routines35840
! Node: Fixed-point fractional library routines52733
! Node: Exception handling routines153293
! Node: Miscellaneous routines154400
! Node: Languages156536
! Node: Source Tree158093
! Node: Configure Terms158680
! Node: Top Level161720
! Node: gcc Directory165994
! Node: Subdirectories166970
! Node: Configuration169262
! Node: Config Fragments170042
! Node: System Config171331
! Node: Configuration Files172291
! Node: Build175099
! Node: Makefile175515
! Ref: Makefile-Footnote-1182949
! Ref: Makefile-Footnote-2183100
! Node: Library Files183178
! Node: Headers183760
! Node: Documentation185955
! Node: Texinfo Manuals186830
! Node: Man Page Generation189283
! Node: Miscellaneous Docs191063
! Node: Front End192518
! Node: Front End Directory196646
! Node: Front End Config198015
! Node: Front End Makefile200968
! Node: Back End204936
! Node: Testsuites210258
! Node: Test Idioms211247
! Node: Test Directives214709
! Node: Directives215248
! Node: Selectors228268
! Node: Effective-Target Keywords231726
! Ref: arm_fp_ok248473
! Ref: arm_fp_dp_ok248652
! Ref: arm_neon_ok249741
! Ref: arm_neon_ok_no_float_abi249918
! Ref: arm_neonv2_ok250093
! Ref: arm_fp16_ok250268
! Ref: arm_neon_fp16_ok250618
! Ref: arm_vfp3_ok251606
! Ref: arm_arch_v8a_hard_ok251757
! Ref: arm_v8_1a_neon_ok252547
! Ref: arm_v8_2a_fp16_scalar_ok252987
! Ref: arm_v8_2a_fp16_neon_ok253446
! Ref: arm_v8_2a_dotprod_neon_ok253929
! Ref: arm_fp16fml_neon_ok254586
! Ref: arm_coproc1_ok257684
! Ref: arm_coproc2_ok257834
! Ref: arm_coproc3_ok258094
! Ref: arm_simd32_ok258485
! Ref: arm_sat_ok258670
! Ref: arm_dsp_ok258859
! Ref: arm_softfp_ok259044
! Ref: arm_hard_ok259125
! Ref: arm_mve259200
! Ref: arm_v8_1_lob_ok259277
! Ref: default_packed275988
! Ref: stack_size_et280002
! Node: Add Options283168
! Ref: arm_fp16_ieee284442
! Ref: arm_fp16_alternative284701
! Ref: stack_size_ao287345
! Node: Require Support288027
! Node: Final Actions291269
! Node: Ada Tests304217
! Node: C Tests305416
! Node: LTO Testing309928
! Node: gcov Testing311643
! Node: profopt Testing314681
! Node: compat Testing316444
! Node: Torture Tests320800
! Node: GIMPLE Tests322508
! Node: RTL Tests323778
! Node: Options325100
! Node: Option file format325545
! Node: Option properties334289
! Node: Passes353766
! Node: Parsing pass354639
! Node: Gimplification pass358187
! Node: Pass manager360057
! Node: IPA passes361919
! Node: Small IPA passes362812
! Node: Regular IPA passes366416
! Node: Late IPA passes371382
! Node: Tree SSA passes372365
! Node: RTL passes395087
! Node: Optimization info407728
! Node: Dump setup408547
! Node: Optimization groups409709
! Node: Dump files and streams410744
! Node: Dump output verbosity411987
! Node: Dump types413059
! Node: Dump examples415492
! Node: poly_int417021
! Node: Overview of poly_int418533
! Node: Consequences of using poly_int421257
! Node: Comparisons involving poly_int422924
! Node: Comparison functions for poly_int424582
! Node: Properties of the poly_int comparisons425825
! Node: Comparing potentially-unordered poly_ints428389
! Node: Comparing ordered poly_ints429312
! Node: Checking for a poly_int marker value431402
! Node: Range checks on poly_ints432271
! Node: Sorting poly_ints434977
! Node: Arithmetic on poly_ints435774
! Node: Using poly_int with C++ arithmetic operators436587
! Node: wi arithmetic on poly_ints438162
! Node: Division of poly_ints439030
! Node: Other poly_int arithmetic440605
! Node: Alignment of poly_ints442051
! Node: Computing bounds on poly_ints445412
! Node: Converting poly_ints446837
! Node: Miscellaneous poly_int routines450588
! Node: Guidelines for using poly_int451252
! Node: GENERIC456310
! Node: Deficiencies458152
! Node: Tree overview458393
! Node: Macros and Functions462593
! Node: Identifiers463478
! Node: Containers465179
! Node: Types466404
! Node: Declarations479969
! Node: Working with declarations480468
! Node: Internal structure486384
! Node: Current structure hierarchy486772
! Node: Adding new DECL node types489001
! Node: Attributes493459
! Node: Expression trees494743
! Node: Constant expressions496513
! Node: Storage References502865
! Node: Unary and Binary Expressions506806
! Node: Vectors529101
! Node: Statements541015
! Node: Basic Statements541555
! Node: Blocks546606
! Node: Statement Sequences548351
! Node: Empty Statements548692
! Node: Jumps549274
! Node: Cleanups549967
! Node: OpenMP552044
! Node: OpenACC560971
! Node: Functions562184
! Node: Function Basics562659
! Node: Function Properties566451
! Node: Language-dependent trees569324
! Node: C and C++ Trees570219
! Node: Types for C++573112
! Node: Namespaces578394
! Node: Classes581640
! Node: Functions for C++586848
! Node: Statements for C and C++593429
! Node: C++ Expressions602356
! Node: GIMPLE603971
! Node: Tuple representation607684
! Node: Class hierarchy of GIMPLE statements615004
! Node: GIMPLE instruction set620000
! Node: GIMPLE Exception Handling621785
! Node: Temporaries623733
! Ref: Temporaries-Footnote-1625071
! Node: Operands625136
! Node: Compound Expressions625909
! Node: Compound Lvalues626143
! Node: Conditional Expressions626925
! Node: Logical Operators627604
! Node: Manipulating GIMPLE statements635117
! Node: Tuple specific accessors640975
! Node: GIMPLE_ASM641786
! Node: GIMPLE_ASSIGN644325
! Node: GIMPLE_BIND649245
! Node: GIMPLE_CALL651167
! Node: GIMPLE_CATCH655516
! Node: GIMPLE_COND656730
! Node: GIMPLE_DEBUG659685
! Node: GIMPLE_EH_FILTER664463
! Node: GIMPLE_LABEL666086
! Node: GIMPLE_GOTO666739
! Node: GIMPLE_NOP667286
! Node: GIMPLE_OMP_ATOMIC_LOAD667668
! Node: GIMPLE_OMP_ATOMIC_STORE668696
! Node: GIMPLE_OMP_CONTINUE669407
! Node: GIMPLE_OMP_CRITICAL670934
! Node: GIMPLE_OMP_FOR671972
! Node: GIMPLE_OMP_MASTER675620
! Node: GIMPLE_OMP_ORDERED676010
! Node: GIMPLE_OMP_PARALLEL676425
! Node: GIMPLE_OMP_RETURN679368
! Node: GIMPLE_OMP_SECTION680045
! Node: GIMPLE_OMP_SECTIONS680741
! Node: GIMPLE_OMP_SINGLE682431
! Node: GIMPLE_OMP_STRUCTURED_BLOCK683442
! Node: GIMPLE_PHI684262
! Node: GIMPLE_RESX685647
! Node: GIMPLE_RETURN686398
! Node: GIMPLE_SWITCH687000
! Node: GIMPLE_TRY688937
! Node: GIMPLE_WITH_CLEANUP_EXPR690801
! Node: GIMPLE sequences691720
! Node: Sequence iterators695066
! Node: Adding a new GIMPLE statement code703861
! Node: Statement and operand traversals705270
! Node: Tree SSA708022
! Node: Annotations709810
! Node: SSA Operands710223
! Node: SSA724395
! Node: Alias analysis734354
! Node: Memory model738223
! Node: RTL739582
! Node: RTL Objects741828
! Node: RTL Classes745776
! Node: Accessors751526
! Node: Special Accessors753775
! Node: Flags759818
! Node: Machine Modes776009
! Node: Constants794556
! Node: Regs and Memory806853
! Node: Arithmetic824718
! Node: Comparisons835897
! Node: Bit-Fields839735
! Node: Vector Operations841326
! Node: Conversions843466
! Node: RTL Declarations848036
! Node: Side Effects848900
! Node: Incdec865899
! Node: Assembler869323
! Node: Debug Information870920
! Node: Insns872911
! Node: Calls899956
! Node: RTL SSA902629
! Node: Using RTL SSA904024
! Node: RTL SSA Instructions905965
! Ref: RTL SSA Instructions-Footnote-1907363
! Node: RTL SSA Basic Blocks907497
! Ref: real RTL SSA insns907977
! Ref: RTL SSA Basic Blocks-Footnote-1910251
! Node: RTL SSA Resources910393
! Node: RTL SSA Accesses911522
! Ref: RTL SSA Accesses-Footnote-1913267
! Node: RTL SSA Phi Nodes913414
! Node: RTL SSA Access Lists915426
! Node: Changing RTL Instructions919773
! Node: Changing One RTL SSA Instruction920382
! Node: Changing Multiple RTL SSA Instructions925426
! Node: Sharing929794
! Node: Reading RTL933052
! Node: Control Flow934060
! Node: Basic Blocks935856
! Node: Edges941530
! Node: Profile information950377
! Node: Maintaining the CFG955145
! Node: Liveness information961089
! Node: Loop Analysis and Representation963288
! Node: Loop representation964324
! Node: Loop querying971934
! Node: Loop manipulation974901
! Node: LCSSA977323
! Node: Scalar evolutions979406
! Node: loop-iv982710
! Node: Number of iterations984718
! Node: Dependency analysis988915
! Node: Machine Desc995479
! Node: Overview998138
! Node: Patterns1000238
! Node: Example1005301
! Node: RTL Template1006778
! Node: Output Template1017662
! Node: Output Statement1021967
! Node: Compact Syntax1026394
! Node: Predicates1031389
! Node: Machine-Independent Predicates1034385
! Node: Defining Predicates1039486
! Node: Constraints1045667
! Node: Simple Constraints1047152
! Node: Multi-Alternative1060314
! Node: Class Preferences1063602
! Node: Modifiers1064510
! Node: Machine Constraints1069364
! Node: Disable Insn Alternatives1134096
! Node: Define Constraints1137660
! Node: C Constraint Interface1148259
! Node: Standard Names1151470
! Ref: shift patterns1203469
! Ref: prologue instruction pattern1272483
! Ref: window_save instruction pattern1272988
! Ref: epilogue instruction pattern1273269
! Node: Pattern Ordering1297046
! Node: Dependent Patterns1298282
! Node: Jump Patterns1299910
! Node: Looping Patterns1301595
! Node: Insn Canonicalizations1307342
! Node: Expander Definitions1313116
! Node: Insn Splitting1321543
! Node: Including Patterns1336920
! Node: Peephole Definitions1338725
! Node: define_peephole1339998
! Node: define_peephole21346428
! Node: Insn Attributes1351160
! Node: Defining Attributes1352265
! Ref: define_enum_attr1355867
! Node: Expressions1356919
! Node: Tagging Insns1363961
! Node: Attr Example1368434
! Node: Insn Lengths1370819
! Node: Constant Attributes1374295
! Node: Mnemonic Attribute1375491
! Node: Delay Slots1377030
! Node: Processor pipeline description1380285
! Ref: Processor pipeline description-Footnote-11399425
! Node: Conditional Execution1399749
! Node: Define Subst1403308
! Node: Define Subst Example1405399
! Node: Define Subst Pattern Matching1408454
! Node: Define Subst Output Template1409768
! Node: Constant Definitions1412191
! Ref: define_enum1416118
! Node: Iterators1416618
! Node: Mode Iterators1417263
! Node: Defining Mode Iterators1418285
! Node: Substitutions1420373
! Node: Examples1422689
! Node: Code Iterators1424157
! Node: Int Iterators1427331
! Node: Subst Iterators1429916
! Node: Parameterized Names1431668
! Node: Target Macros1435786
! Node: Target Structure1438977
! Node: Driver1442031
! Node: Run-time Target1461576
! Node: Per-Function Data1472465
! Node: Storage Layout1475285
! Node: Type Layout1505063
! Node: Registers1518881
! Node: Register Basics1519855
! Node: Allocation Order1527621
! Node: Values in Registers1530121
! Node: Leaf Functions1537685
! Node: Stack Registers1540574
! Node: Register Classes1541851
! Node: Stack and Calling1578481
! Node: Frame Layout1579087
! Node: Exception Handling1594114
! Node: Stack Checking1600977
! Node: Frame Registers1606639
! Node: Elimination1615349
! Node: Stack Arguments1619269
! Node: Register Arguments1626814
! Node: Scalar Return1652416
! Node: Aggregate Return1658984
! Node: Caller Saves1663818
! Node: Function Entry1664564
! Node: Profiling1676276
! Node: Tail Calls1678422
! Node: Shrink-wrapping separate components1680340
! Node: Stack Smashing Protection1683429
! Node: Miscellaneous Register Hooks1685950
! Node: Varargs1686815
! Node: Trampolines1696621
! Node: Library Calls1706394
! Node: Addressing Modes1712827
! Node: Anchored Addresses1745218
! Node: Condition Code1747937
! Node: MODE_CC Condition Codes1749794
! Node: Costs1756649
! Node: Scheduling1779345
! Node: Sections1803387
! Node: PIC1820097
! Node: Assembler Format1822192
! Node: File Framework1823330
! Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1831041
! Node: Data Output1832740
! Node: Uninitialized Data1841156
! Node: Label Output1846247
! Node: Initialization1871348
! Node: Macros for Initialization1877527
! Node: Instruction Output1884846
! Node: Dispatch Tables1895700
! Node: Exception Region Output1901511
! Node: Alignment Output1908753
! Node: Debugging Info1912512
! Node: All Debuggers1913062
! Node: DWARF1916043
! Node: VMS Debug1921894
! Node: CTF Debug1922511
! Node: BTF Debug1922876
! Node: Floating Point1923223
! Node: Mode Switching1925990
! Node: Target Attributes1934080
! Node: Emulated TLS1947308
! Node: MIPS Coprocessors1950726
! Node: PCH Target1951889
! Node: C++ ABI1953771
! Node: D Language and ABI1959083
! Node: Rust Language and ABI1962392
! Node: Named Address Spaces1963139
! Node: Misc1969265
! Ref: TARGET_SHIFT_TRUNCATION_MASK1977264
! Node: Host Config2040467
! Node: Host Common2041560
! Node: Filesystem2043950
! Node: Host Misc2048169
! Node: Fragments2050738
! Node: Target Fragment2051985
! Node: Host Fragment2063213
! Node: Collect22063457
! Node: Header Dirs2066287
! Node: Type Information2067754
! Node: GTY Options2071355
! Node: Inheritance and GTY2084917
! Ref: Inheritance and GTY-Footnote-12086492
! Node: User GC2086762
! Node: GGC Roots2090621
! Node: Files2091364
! Node: Invoking the garbage collector2094083
! Node: Troubleshooting2095757
! Node: Plugins2096856
! Node: Plugins loading2097985
! Node: Plugin API2099133
! Node: Plugins pass2107148
! Node: Plugins GC2109131
! Node: Plugins description2110916
! Node: Plugins attr2111464
! Node: Plugins recording2113788
! Node: Plugins gate2114666
! Node: Plugins tracking2115265
! Node: Plugins building2115861
! Node: LTO2119472
! Node: LTO Overview2120348
! Node: LTO object file layout2126220
! Node: IPA2130899
! Node: WHOPR2140107
! Node: Internal flags2144731
! Node: Match and Simplify2146166
! Node: GIMPLE API2147136
! Node: The Language2149962
! Node: Static Analyzer2162921
! Node: Analyzer Internals2163186
! Node: Debugging the Analyzer2179391
! Node: User Experience Guidelines2187267
! Node: Guidelines for Diagnostics2188203
! Ref: input_location_example2196484
! Node: Guidelines for Options2206357
! Node: Funding2206534
! Node: GNU Project2209040
! Node: Copying2209691
! Node: GNU Free Documentation License2247223
! Node: Contributors2272352
! Node: Option Index2314918
! Node: Concept Index2315811
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/gcov-dump.1 gcc-14.3.0-RC-20260619/gcc/doc/gcov-dump.1
*** gcc-14.3.0/gcc/doc/gcov-dump.1	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gcov-dump.1	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,219 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GCOV-DUMP 1"
! .TH GCOV-DUMP 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gcov\-dump \- offline gcda and gcno profile dump tool
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
! gcov-dump [\fB\-v\fR|\fB\-\-version\fR]
       [\fB\-h\fR|\fB\-\-help\fR]
       [\fB\-l\fR|\fB\-\-long\fR]
       [\fB\-p\fR|\fB\-\-positions\fR]
       [\fB\-r\fR|\fB\-\-raw\fR]
       [\fB\-s\fR|\fB\-\-stable\fR]
       \fIgcovfiles\fR
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! \&\fBgcov-dump\fR is a tool you can use in conjunction with \s-1GCC\s0 to
  dump content of gcda and gcno profile files offline.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
! .IP "\fB\-h\fR" 4
  .IX Item "-h"
  .PD 0
! .IP "\fB\-\-help\fR" 4
  .IX Item "--help"
  .PD
! Display help about using \fBgcov-dump\fR (on the standard output), and
  exit without doing any further processing.
! .IP "\fB\-l\fR" 4
  .IX Item "-l"
  .PD 0
! .IP "\fB\-\-long\fR" 4
  .IX Item "--long"
  .PD
  Dump content of records.
! .IP "\fB\-p\fR" 4
  .IX Item "-p"
  .PD 0
! .IP "\fB\-\-positions\fR" 4
  .IX Item "--positions"
  .PD
  Dump positions of records.
! .IP "\fB\-r\fR" 4
  .IX Item "-r"
  .PD 0
! .IP "\fB\-\-raw\fR" 4
  .IX Item "--raw"
  .PD
  Print content records in raw format.
! .IP "\fB\-s\fR" 4
  .IX Item "-s"
  .PD 0
! .IP "\fB\-\-stable\fR" 4
  .IX Item "--stable"
  .PD
  Print content in stable format usable for comparison.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-version\fR" 4
  .IX Item "--version"
  .PD
! Display the \fBgcov-dump\fR version number (on the standard output),
  and exit without doing any further processing.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2017\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
! Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 38,148 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GCOV-DUMP 1"
! .TH GCOV-DUMP 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gcov\-dump \- offline gcda and gcno profile dump tool
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
! gcov\-dump [\fB\-v\fR|\fB\-\-version\fR]
       [\fB\-h\fR|\fB\-\-help\fR]
       [\fB\-l\fR|\fB\-\-long\fR]
       [\fB\-p\fR|\fB\-\-positions\fR]
       [\fB\-r\fR|\fB\-\-raw\fR]
       [\fB\-s\fR|\fB\-\-stable\fR]
       \fIgcovfiles\fR
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! \&\fBgcov\-dump\fR is a tool you can use in conjunction with GCC to
  dump content of gcda and gcno profile files offline.
! .SH OPTIONS
  .IX Header "OPTIONS"
! .IP \fB\-h\fR 4
  .IX Item "-h"
  .PD 0
! .IP \fB\-\-help\fR 4
  .IX Item "--help"
  .PD
! Display help about using \fBgcov\-dump\fR (on the standard output), and
  exit without doing any further processing.
! .IP \fB\-l\fR 4
  .IX Item "-l"
  .PD 0
! .IP \fB\-\-long\fR 4
  .IX Item "--long"
  .PD
  Dump content of records.
! .IP \fB\-p\fR 4
  .IX Item "-p"
  .PD 0
! .IP \fB\-\-positions\fR 4
  .IX Item "--positions"
  .PD
  Dump positions of records.
! .IP \fB\-r\fR 4
  .IX Item "-r"
  .PD 0
! .IP \fB\-\-raw\fR 4
  .IX Item "--raw"
  .PD
  Print content records in raw format.
! .IP \fB\-s\fR 4
  .IX Item "-s"
  .PD 0
! .IP \fB\-\-stable\fR 4
  .IX Item "--stable"
  .PD
  Print content in stable format usable for comparison.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-version\fR 4
  .IX Item "--version"
  .PD
! Display the \fBgcov\-dump\fR version number (on the standard output),
  and exit without doing any further processing.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2017\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gcov-tool.1 gcc-14.3.0-RC-20260619/gcc/doc/gcov-tool.1
*** gcc-14.3.0/gcc/doc/gcov-tool.1	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gcov-tool.1	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,235 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GCOV-TOOL 1"
! .TH GCOV-TOOL 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gcov\-tool \- offline gcda profile processing tool
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
! gcov-tool [\fB\-v\fR|\fB\-\-version\fR] [\fB\-h\fR|\fB\-\-help\fR]
  .PP
! gcov-tool merge [merge\-options] \fIdirectory1\fR \fIdirectory2\fR
       [\fB\-o\fR|\fB\-\-output\fR \fIdirectory\fR]
       [\fB\-v\fR|\fB\-\-verbose\fR]
       [\fB\-w\fR|\fB\-\-weight\fR \fIw1,w2\fR]
  .PP
! gcov-tool merge-stream [merge\-stream\-options] [\fIfile\fR]
       [\fB\-v\fR|\fB\-\-verbose\fR]
       [\fB\-w\fR|\fB\-\-weight\fR \fIw1,w2\fR]
  .PP
! gcov-tool rewrite [rewrite\-options] \fIdirectory\fR
       [\fB\-n\fR|\fB\-\-normalize\fR \fIlong_long_value\fR]
       [\fB\-o\fR|\fB\-\-output\fR \fIdirectory\fR]
       [\fB\-s\fR|\fB\-\-scale\fR \fIfloat_or_simple\-frac_value\fR]
       [\fB\-v\fR|\fB\-\-verbose\fR]
  .PP
! gcov-tool overlap [overlap\-options] \fIdirectory1\fR \fIdirectory2\fR
       [\fB\-f\fR|\fB\-\-function\fR]
       [\fB\-F\fR|\fB\-\-fullname\fR]
       [\fB\-h\fR|\fB\-\-hotonly\fR]
       [\fB\-o\fR|\fB\-\-object\fR]
       [\fB\-t\fR|\fB\-\-hot_threshold\fR] \fIfloat\fR
       [\fB\-v\fR|\fB\-\-verbose\fR]
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! \&\fBgcov-tool\fR is an offline tool to process gcc's gcda profile files.
  .PP
! Current gcov-tool supports the following functionalities:
! .IP "*" 4
  merge two sets of profiles with weights.
! .IP "*" 4
  read a stream of profiles with associated filenames and merge it with a set of
  profiles with weights.
! .IP "*" 4
  read one set of profile and rewrite profile contents. One can scale or
  normalize the count values.
  .PP
  Examples of the use cases for this tool are:
! .IP "*" 4
  Collect the profiles for different set of inputs, and use this tool to merge
  them. One can specify the weight to factor in the relative importance of
  each input.
! .IP "*" 4
  Collect profiles from target systems without a filesystem (freestanding
  environments).  Merge the collected profiles with associated profiles
  present on the host system.  One can specify the weight to factor in the
  relative importance of each input.
! .IP "*" 4
  Rewrite the profile after removing a subset of the gcda files, while maintaining
  the consistency of the summary and the histogram.
! .IP "*" 4
  It can also be used to debug or libgcov code as the tools shares the majority
  code as the runtime library.
  .PP
  Note that for the merging operation, this profile generated offline may
  contain slight different values from the online merged profile. Here are
  a list of typical differences:
! .IP "*" 4
  histogram difference: This offline tool recomputes the histogram after merging
  the counters. The resulting histogram, therefore, is precise. The online
! merging does not have this capability \*(-- the histogram is merged from two
  histograms and the result is an approximation.
! .IP "*" 4
! summary checksum difference: Summary checksum uses a \s-1CRC32\s0 operation. The value
! depends on the link list order of gcov-info objects. This order is different in
! gcov-tool from that in the online merge. It's expected to have different
  summary checksums. It does not really matter as the compiler does not use this
  checksum anywhere.
! .IP "*" 4
  value profile counter values difference: Some counter values for value profile
! are runtime dependent, like heap addresses. It's normal to see some difference
  in these kind of counters.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
! .IP "\fB\-h\fR" 4
  .IX Item "-h"
  .PD 0
! .IP "\fB\-\-help\fR" 4
  .IX Item "--help"
  .PD
! Display help about using \fBgcov-tool\fR (on the standard output), and
  exit without doing any further processing.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-version\fR" 4
  .IX Item "--version"
  .PD
! Display the \fBgcov-tool\fR version number (on the standard output),
  and exit without doing any further processing.
! .IP "\fBmerge\fR" 4
  .IX Item "merge"
  Merge two profile directories.
  .RS 4
--- 38,164 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GCOV-TOOL 1"
! .TH GCOV-TOOL 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gcov\-tool \- offline gcda profile processing tool
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
! gcov\-tool [\fB\-v\fR|\fB\-\-version\fR] [\fB\-h\fR|\fB\-\-help\fR]
  .PP
! gcov\-tool merge [merge\-options] \fIdirectory1\fR \fIdirectory2\fR
       [\fB\-o\fR|\fB\-\-output\fR \fIdirectory\fR]
       [\fB\-v\fR|\fB\-\-verbose\fR]
       [\fB\-w\fR|\fB\-\-weight\fR \fIw1,w2\fR]
  .PP
! gcov\-tool merge\-stream [merge\-stream\-options] [\fIfile\fR]
       [\fB\-v\fR|\fB\-\-verbose\fR]
       [\fB\-w\fR|\fB\-\-weight\fR \fIw1,w2\fR]
  .PP
! gcov\-tool rewrite [rewrite\-options] \fIdirectory\fR
       [\fB\-n\fR|\fB\-\-normalize\fR \fIlong_long_value\fR]
       [\fB\-o\fR|\fB\-\-output\fR \fIdirectory\fR]
       [\fB\-s\fR|\fB\-\-scale\fR \fIfloat_or_simple\-frac_value\fR]
       [\fB\-v\fR|\fB\-\-verbose\fR]
  .PP
! gcov\-tool overlap [overlap\-options] \fIdirectory1\fR \fIdirectory2\fR
       [\fB\-f\fR|\fB\-\-function\fR]
       [\fB\-F\fR|\fB\-\-fullname\fR]
       [\fB\-h\fR|\fB\-\-hotonly\fR]
       [\fB\-o\fR|\fB\-\-object\fR]
       [\fB\-t\fR|\fB\-\-hot_threshold\fR] \fIfloat\fR
       [\fB\-v\fR|\fB\-\-verbose\fR]
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! \&\fBgcov\-tool\fR is an offline tool to process gcc\*(Aqs gcda profile files.
  .PP
! Current gcov\-tool supports the following functionalities:
! .IP * 4
  merge two sets of profiles with weights.
! .IP * 4
  read a stream of profiles with associated filenames and merge it with a set of
  profiles with weights.
! .IP * 4
  read one set of profile and rewrite profile contents. One can scale or
  normalize the count values.
  .PP
  Examples of the use cases for this tool are:
! .IP * 4
  Collect the profiles for different set of inputs, and use this tool to merge
  them. One can specify the weight to factor in the relative importance of
  each input.
! .IP * 4
  Collect profiles from target systems without a filesystem (freestanding
  environments).  Merge the collected profiles with associated profiles
  present on the host system.  One can specify the weight to factor in the
  relative importance of each input.
! .IP * 4
  Rewrite the profile after removing a subset of the gcda files, while maintaining
  the consistency of the summary and the histogram.
! .IP * 4
  It can also be used to debug or libgcov code as the tools shares the majority
  code as the runtime library.
  .PP
  Note that for the merging operation, this profile generated offline may
  contain slight different values from the online merged profile. Here are
  a list of typical differences:
! .IP * 4
  histogram difference: This offline tool recomputes the histogram after merging
  the counters. The resulting histogram, therefore, is precise. The online
! merging does not have this capability \-\- the histogram is merged from two
  histograms and the result is an approximation.
! .IP * 4
! summary checksum difference: Summary checksum uses a CRC32 operation. The value
! depends on the link list order of gcov\-info objects. This order is different in
! gcov\-tool from that in the online merge. It\*(Aqs expected to have different
  summary checksums. It does not really matter as the compiler does not use this
  checksum anywhere.
! .IP * 4
  value profile counter values difference: Some counter values for value profile
! are runtime dependent, like heap addresses. It\*(Aqs normal to see some difference
  in these kind of counters.
! .SH OPTIONS
  .IX Header "OPTIONS"
! .IP \fB\-h\fR 4
  .IX Item "-h"
  .PD 0
! .IP \fB\-\-help\fR 4
  .IX Item "--help"
  .PD
! Display help about using \fBgcov\-tool\fR (on the standard output), and
  exit without doing any further processing.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-version\fR 4
  .IX Item "--version"
  .PD
! Display the \fBgcov\-tool\fR version number (on the standard output),
  and exit without doing any further processing.
! .IP \fBmerge\fR 4
  .IX Item "merge"
  Merge two profile directories.
  .RS 4
*************** Merge two profile directories.
*** 241,250 ****
  .PD
  Set the output profile directory. Default output directory name is
  \&\fImerged_profile\fR.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-verbose\fR" 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
--- 170,179 ----
  .PD
  Set the output profile directory. Default output directory name is
  \&\fImerged_profile\fR.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-verbose\fR 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
*************** respectively. The default weights are 1
*** 259,265 ****
  .RE
  .RS 4
  .RE
! .IP "\fBmerge-stream\fR" 4
  .IX Item "merge-stream"
  Collect profiles with associated filenames from a \fIgcfn\fR and \fIgcda\fR
  data stream.  Read the stream from the file specified by \fIfile\fR or from
--- 188,194 ----
  .RE
  .RS 4
  .RE
! .IP \fBmerge\-stream\fR 4
  .IX Item "merge-stream"
  Collect profiles with associated filenames from a \fIgcfn\fR and \fIgcda\fR
  data stream.  Read the stream from the file specified by \fIfile\fR or from
*************** For the generation of a \fIgcfn\fR and \
*** 270,279 ****
  system, please have a look at the \f(CW\*(C`_\|_gcov_filename_to_gcfn()\*(C'\fR and
  \&\f(CW\*(C`_\|_gcov_info_to_gcda()\*(C'\fR functions declared in \f(CW\*(C`#include <gcov.h>\*(C'\fR.
  .RS 4
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-verbose\fR" 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
--- 199,208 ----
  system, please have a look at the \f(CW\*(C`_\|_gcov_filename_to_gcfn()\*(C'\fR and
  \&\f(CW\*(C`_\|_gcov_info_to_gcda()\*(C'\fR functions declared in \f(CW\*(C`#include <gcov.h>\*(C'\fR.
  .RS 4
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-verbose\fR 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
*************** default weights are 1 for both.
*** 289,295 ****
  .RE
  .RS 4
  .RE
! .IP "\fBrewrite\fR" 4
  .IX Item "rewrite"
  Read the specified profile directory and rewrite to a new directory.
  .RS 4
--- 218,224 ----
  .RE
  .RS 4
  .RE
! .IP \fBrewrite\fR 4
  .IX Item "rewrite"
  Read the specified profile directory and rewrite to a new directory.
  .RS 4
*************** Set the output profile directory. Defaul
*** 316,332 ****
  .PD
  Scale the profile counters. The specified value can be in floating point value,
  or simple fraction value form, such 1, 2, 2/3, and 5/3.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-verbose\fR" 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
  .RE
  .RS 4
  .RE
! .IP "\fBoverlap\fR" 4
  .IX Item "overlap"
  Compute the overlap score between the two specified profile directories.
  The overlap score is computed based on the arc profiles. It is defined as
--- 245,261 ----
  .PD
  Scale the profile counters. The specified value can be in floating point value,
  or simple fraction value form, such 1, 2, 2/3, and 5/3.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-verbose\fR 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
  .RE
  .RS 4
  .RE
! .IP \fBoverlap\fR 4
  .IX Item "overlap"
  Compute the overlap score between the two specified profile directories.
  The overlap score is computed based on the arc profiles. It is defined as
*************** for all arc counter i, where p1_counter[
*** 335,365 ****
  matched counters and p1_sum_all and p2_sum_all are the sum of counter
  values in profile 1 and profile 2, respectively.
  .RS 4
! .IP "\fB\-f\fR" 4
  .IX Item "-f"
  .PD 0
! .IP "\fB\-\-function\fR" 4
  .IX Item "--function"
  .PD
  Print function level overlap score.
! .IP "\fB\-F\fR" 4
  .IX Item "-F"
  .PD 0
! .IP "\fB\-\-fullname\fR" 4
  .IX Item "--fullname"
  .PD
  Print full gcda filename.
! .IP "\fB\-h\fR" 4
  .IX Item "-h"
  .PD 0
! .IP "\fB\-\-hotonly\fR" 4
  .IX Item "--hotonly"
  .PD
  Only print info for hot objects/functions.
! .IP "\fB\-o\fR" 4
  .IX Item "-o"
  .PD 0
! .IP "\fB\-\-object\fR" 4
  .IX Item "--object"
  .PD
  Print object level overlap score.
--- 264,294 ----
  matched counters and p1_sum_all and p2_sum_all are the sum of counter
  values in profile 1 and profile 2, respectively.
  .RS 4
! .IP \fB\-f\fR 4
  .IX Item "-f"
  .PD 0
! .IP \fB\-\-function\fR 4
  .IX Item "--function"
  .PD
  Print function level overlap score.
! .IP \fB\-F\fR 4
  .IX Item "-F"
  .PD 0
! .IP \fB\-\-fullname\fR 4
  .IX Item "--fullname"
  .PD
  Print full gcda filename.
! .IP \fB\-h\fR 4
  .IX Item "-h"
  .PD 0
! .IP \fB\-\-hotonly\fR 4
  .IX Item "--hotonly"
  .PD
  Only print info for hot objects/functions.
! .IP \fB\-o\fR 4
  .IX Item "-o"
  .PD 0
! .IP \fB\-\-object\fR 4
  .IX Item "--object"
  .PD
  Print object level overlap score.
*************** Print object level overlap score.
*** 370,379 ****
  .IX Item "--hot_threshold <float>"
  .PD
  Set the threshold for hot counter value.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-verbose\fR" 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
--- 299,308 ----
  .IX Item "--hot_threshold <float>"
  .PD
  Set the threshold for hot counter value.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-verbose\fR 4
  .IX Item "--verbose"
  .PD
  Set the verbose mode.
*************** Set the verbose mode.
*** 382,408 ****
  .RE
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1), \fIgcov\fR\|(1) and the Info entry for
  \&\fIgcc\fR.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2014\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
! Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 311,337 ----
  .RE
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1), \fBgcov\fR\|(1) and the Info entry for
  \&\fIgcc\fR.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2014\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gcov.1 gcc-14.3.0-RC-20260619/gcc/doc/gcov.1
*** gcc-14.3.0/gcc/doc/gcov.1	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gcov.1	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,142 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GCOV 1"
! .TH GCOV 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gcov \- coverage testing tool
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  gcov [\fB\-v\fR|\fB\-\-version\fR] [\fB\-h\fR|\fB\-\-help\fR]
       [\fB\-a\fR|\fB\-\-all\-blocks\fR]
--- 38,71 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GCOV 1"
! .TH GCOV 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gcov \- coverage testing tool
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  gcov [\fB\-v\fR|\fB\-\-version\fR] [\fB\-h\fR|\fB\-\-help\fR]
       [\fB\-a\fR|\fB\-\-all\-blocks\fR]
*************** gcov [\fB\-v\fR|\fB\-\-version\fR] [\fB\
*** 160,168 ****
       [\fB\-u\fR|\fB\-\-unconditional\-branches\fR]
       [\fB\-x\fR|\fB\-\-hash\-filenames\fR]
       \fIfiles\fR
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! \&\fBgcov\fR is a test coverage program.  Use it in concert with \s-1GCC\s0
  to analyze your programs to help create more efficient, faster running
  code and to discover untested parts of your program.  You can use
  \&\fBgcov\fR as a profiling tool to help discover where your
--- 89,97 ----
       [\fB\-u\fR|\fB\-\-unconditional\-branches\fR]
       [\fB\-x\fR|\fB\-\-hash\-filenames\fR]
       \fIfiles\fR
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! \&\fBgcov\fR is a test coverage program.  Use it in concert with GCC
  to analyze your programs to help create more efficient, faster running
  code and to discover untested parts of your program.  You can use
  \&\fBgcov\fR as a profiling tool to help discover where your
*************** optimization efforts will best affect yo
*** 171,184 ****
  assess which parts of your code use the greatest amount of computing
  time.
  .PP
! Profiling tools help you analyze your code's performance.  Using a
  profiler such as \fBgcov\fR or \fBgprof\fR, you can find out some
  basic performance statistics, such as:
! .IP "*" 4
  how often each line of code executes
! .IP "*" 4
  what lines of code are actually executed
! .IP "*" 4
  how much computing time each section of code uses
  .PP
  Once you know these things about how your code works when compiled, you
--- 100,113 ----
  assess which parts of your code use the greatest amount of computing
  time.
  .PP
! Profiling tools help you analyze your code\*(Aqs performance.  Using a
  profiler such as \fBgcov\fR or \fBgprof\fR, you can find out some
  basic performance statistics, such as:
! .IP * 4
  how often each line of code executes
! .IP * 4
  what lines of code are actually executed
! .IP * 4
  how much computing time each section of code uses
  .PP
  Once you know these things about how your code works when compiled, you
*************** final product.
*** 196,202 ****
  You should compile your code without optimization if you plan to use
  \&\fBgcov\fR because the optimization, by combining some lines of code
  into one function, may not give you as much information as you need to
! look for `hot spots' where the code is using a great deal of computer
  time.  Likewise, because \fBgcov\fR accumulates statistics by line (at
  the lowest resolution), it works best with a programming style that
  places only one statement on each line.  If you use complicated macros
--- 125,131 ----
  You should compile your code without optimization if you plan to use
  \&\fBgcov\fR because the optimization, by combining some lines of code
  into one function, may not give you as much information as you need to
! look for \`hot spots\*(Aq where the code is using a great deal of computer
  time.  Likewise, because \fBgcov\fR accumulates statistics by line (at
  the lowest resolution), it works best with a programming style that
  places only one statement on each line.  If you use complicated macros
*************** less helpful\-\-\-they only report on th
*** 205,253 ****
  appears.  If your complex macros behave like functions, you can replace
  them with inline functions to solve this problem.
  .PP
! \&\fBgcov\fR creates a logfile called \fI\fIsourcefile\fI.gcov\fR which
! indicates how many times each line of a source file \fI\fIsourcefile\fI.c\fR
  has executed.  You can use these logfiles along with \fBgprof\fR to aid
! in fine-tuning the performance of your programs.  \fBgprof\fR gives
  timing information you can use along with the information you get from
  \&\fBgcov\fR.
  .PP
! \&\fBgcov\fR works only on code compiled with \s-1GCC.\s0  It is not
  compatible with any other profiling or test coverage mechanism.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
! .IP "\fB\-a\fR" 4
  .IX Item "-a"
  .PD 0
! .IP "\fB\-\-all\-blocks\fR" 4
  .IX Item "--all-blocks"
  .PD
  Write individual execution counts for every basic block.  Normally gcov
  outputs execution counts only for the main blocks of a line.  With this
  option you can determine if blocks within a single line are not being
  executed.
! .IP "\fB\-b\fR" 4
  .IX Item "-b"
  .PD 0
! .IP "\fB\-\-branch\-probabilities\fR" 4
  .IX Item "--branch-probabilities"
  .PD
  Write branch frequencies to the output file, and write branch summary
  info to the standard output.  This option allows you to see how often
  each branch in your program was taken.  Unconditional branches will not
  be shown, unless the \fB\-u\fR option is given.
! .IP "\fB\-c\fR" 4
  .IX Item "-c"
  .PD 0
! .IP "\fB\-\-branch\-counts\fR" 4
  .IX Item "--branch-counts"
  .PD
  Write branch frequencies as the number of branches taken, rather than
  the percentage of branches taken.
! .IP "\fB\-g\fR" 4
  .IX Item "-g"
  .PD 0
! .IP "\fB\-\-conditions\fR" 4
  .IX Item "--conditions"
  .PD
  Write condition coverage to the output file, and write condition summary info
--- 134,182 ----
  appears.  If your complex macros behave like functions, you can replace
  them with inline functions to solve this problem.
  .PP
! \&\fBgcov\fR creates a logfile called \fIsourcefile.gcov\fR which
! indicates how many times each line of a source file \fIsourcefile.c\fR
  has executed.  You can use these logfiles along with \fBgprof\fR to aid
! in fine\-tuning the performance of your programs.  \fBgprof\fR gives
  timing information you can use along with the information you get from
  \&\fBgcov\fR.
  .PP
! \&\fBgcov\fR works only on code compiled with GCC.  It is not
  compatible with any other profiling or test coverage mechanism.
! .SH OPTIONS
  .IX Header "OPTIONS"
! .IP \fB\-a\fR 4
  .IX Item "-a"
  .PD 0
! .IP \fB\-\-all\-blocks\fR 4
  .IX Item "--all-blocks"
  .PD
  Write individual execution counts for every basic block.  Normally gcov
  outputs execution counts only for the main blocks of a line.  With this
  option you can determine if blocks within a single line are not being
  executed.
! .IP \fB\-b\fR 4
  .IX Item "-b"
  .PD 0
! .IP \fB\-\-branch\-probabilities\fR 4
  .IX Item "--branch-probabilities"
  .PD
  Write branch frequencies to the output file, and write branch summary
  info to the standard output.  This option allows you to see how often
  each branch in your program was taken.  Unconditional branches will not
  be shown, unless the \fB\-u\fR option is given.
! .IP \fB\-c\fR 4
  .IX Item "-c"
  .PD 0
! .IP \fB\-\-branch\-counts\fR 4
  .IX Item "--branch-counts"
  .PD
  Write branch frequencies as the number of branches taken, rather than
  the percentage of branches taken.
! .IP \fB\-g\fR 4
  .IX Item "-g"
  .PD 0
! .IP \fB\-\-conditions\fR 4
  .IX Item "--conditions"
  .PD
  Write condition coverage to the output file, and write condition summary info
*************** to the standard output.  This option all
*** 255,294 ****
  your program at least once had an independent effect on the outcome of the
  boolean expression (modified condition/decision coverage).  This requires you
  to compile the source with \fB\-fcondition\-coverage\fR.
! .IP "\fB\-d\fR" 4
  .IX Item "-d"
  .PD 0
! .IP "\fB\-\-display\-progress\fR" 4
  .IX Item "--display-progress"
  .PD
  Display the progress on the standard output.
! .IP "\fB\-f\fR" 4
  .IX Item "-f"
  .PD 0
! .IP "\fB\-\-function\-summaries\fR" 4
  .IX Item "--function-summaries"
  .PD
  Output summaries for each function in addition to the file level summary.
! .IP "\fB\-h\fR" 4
  .IX Item "-h"
  .PD 0
! .IP "\fB\-\-help\fR" 4
  .IX Item "--help"
  .PD
  Display help about using \fBgcov\fR (on the standard output), and
  exit without doing any further processing.
! .IP "\fB\-j\fR" 4
  .IX Item "-j"
  .PD 0
! .IP "\fB\-\-json\-format\fR" 4
  .IX Item "--json-format"
  .PD
! Output gcov file in an easy-to-parse \s-1JSON\s0 intermediate format
! which does not require source code for generation.  The \s-1JSON\s0
  file is compressed with gzip compression algorithm
  and the files have \fI.gcov.json.gz\fR extension.
  .Sp
! Structure of the \s-1JSON\s0 is following:
  .Sp
  .Vb 7
  \&        {
--- 184,223 ----
  your program at least once had an independent effect on the outcome of the
  boolean expression (modified condition/decision coverage).  This requires you
  to compile the source with \fB\-fcondition\-coverage\fR.
! .IP \fB\-d\fR 4
  .IX Item "-d"
  .PD 0
! .IP \fB\-\-display\-progress\fR 4
  .IX Item "--display-progress"
  .PD
  Display the progress on the standard output.
! .IP \fB\-f\fR 4
  .IX Item "-f"
  .PD 0
! .IP \fB\-\-function\-summaries\fR 4
  .IX Item "--function-summaries"
  .PD
  Output summaries for each function in addition to the file level summary.
! .IP \fB\-h\fR 4
  .IX Item "-h"
  .PD 0
! .IP \fB\-\-help\fR 4
  .IX Item "--help"
  .PD
  Display help about using \fBgcov\fR (on the standard output), and
  exit without doing any further processing.
! .IP \fB\-j\fR 4
  .IX Item "-j"
  .PD 0
! .IP \fB\-\-json\-format\fR 4
  .IX Item "--json-format"
  .PD
! Output gcov file in an easy\-to\-parse JSON intermediate format
! which does not require source code for generation.  The JSON
  file is compressed with gzip compression algorithm
  and the files have \fI.gcov.json.gz\fR extension.
  .Sp
! Structure of the JSON is following:
  .Sp
  .Vb 7
  \&        {
*************** Structure of the \s-1JSON\s0 is followin
*** 302,324 ****
  .Sp
  Fields of the root element have following semantics:
  .RS 4
! .IP "*" 4
  \&\fIcurrent_working_directory\fR: working directory where
  a compilation unit was compiled
! .IP "*" 4
! \&\fIdata_file\fR: name of the data file (\s-1GCDA\s0)
! .IP "*" 4
  \&\fIformat_version\fR: semantic version of the format
  .Sp
  Changes in version \fI2\fR:
  .RS 4
! .IP "*" 4
  \&\fIcalls\fR: information about function calls is added
  .RE
  .RS 4
  .RE
! .IP "*" 4
! \&\fIgcc_version\fR: version of the \s-1GCC\s0 compiler
  .RE
  .RS 4
  .Sp
--- 231,253 ----
  .Sp
  Fields of the root element have following semantics:
  .RS 4
! .IP * 4
  \&\fIcurrent_working_directory\fR: working directory where
  a compilation unit was compiled
! .IP * 4
! \&\fIdata_file\fR: name of the data file (GCDA)
! .IP * 4
  \&\fIformat_version\fR: semantic version of the format
  .Sp
  Changes in version \fI2\fR:
  .RS 4
! .IP * 4
  \&\fIcalls\fR: information about function calls is added
  .RE
  .RS 4
  .RE
! .IP * 4
! \&\fIgcc_version\fR: version of the GCC compiler
  .RE
  .RS 4
  .Sp
*************** Each \fIfile\fR has the following form:
*** 333,339 ****
  .Ve
  .Sp
  Fields of the \fIfile\fR element have following semantics:
! .IP "*" 4
  \&\fIfile_name\fR: name of the source file
  .RE
  .RS 4
--- 262,268 ----
  .Ve
  .Sp
  Fields of the \fIfile\fR element have following semantics:
! .IP * 4
  \&\fIfile_name\fR: name of the source file
  .RE
  .RS 4
*************** Each \fIfunction\fR has the following fo
*** 355,377 ****
  .Ve
  .Sp
  Fields of the \fIfunction\fR element have following semantics:
! .IP "*" 4
  \&\fIblocks\fR: number of blocks that are in the function
! .IP "*" 4
  \&\fIblocks_executed\fR: number of executed blocks of the function
! .IP "*" 4
  \&\fIdemangled_name\fR: demangled name of the function
! .IP "*" 4
  \&\fIend_column\fR: column in the source file where the function ends
! .IP "*" 4
  \&\fIend_line\fR: line in the source file where the function ends
! .IP "*" 4
  \&\fIexecution_count\fR: number of executions of the function
! .IP "*" 4
  \&\fIname\fR: name of the function
! .IP "*" 4
  \&\fIstart_column\fR: column in the source file where the function begins
! .IP "*" 4
  \&\fIstart_line\fR: line in the source file where the function begins
  .RE
  .RS 4
--- 284,306 ----
  .Ve
  .Sp
  Fields of the \fIfunction\fR element have following semantics:
! .IP * 4
  \&\fIblocks\fR: number of blocks that are in the function
! .IP * 4
  \&\fIblocks_executed\fR: number of executed blocks of the function
! .IP * 4
  \&\fIdemangled_name\fR: demangled name of the function
! .IP * 4
  \&\fIend_column\fR: column in the source file where the function ends
! .IP * 4
  \&\fIend_line\fR: line in the source file where the function ends
! .IP * 4
  \&\fIexecution_count\fR: number of executions of the function
! .IP * 4
  \&\fIname\fR: name of the function
! .IP * 4
  \&\fIstart_column\fR: column in the source file where the function begins
! .IP * 4
  \&\fIstart_line\fR: line in the source file where the function begins
  .RE
  .RS 4
*************** Each \fIline\fR has the following form:
*** 398,413 ****
  .Sp
  Branches and calls are present only with \fI\-b\fR option.
  Fields of the \fIline\fR element have following semantics:
! .IP "*" 4
  \&\fIblock_ids\fR: IDs of basic blocks that belong to the line
! .IP "*" 4
  \&\fIcount\fR: number of executions of the line
! .IP "*" 4
  \&\fIline_number\fR: line number
! .IP "*" 4
  \&\fIunexecuted_block\fR: flag whether the line contains an unexecuted block
  (not all statements on the line are executed)
! .IP "*" 4
  \&\fIfunction_name\fR: a name of a function this \fIline\fR belongs to
  (for a line with an inlined statements can be not set)
  .RE
--- 327,342 ----
  .Sp
  Branches and calls are present only with \fI\-b\fR option.
  Fields of the \fIline\fR element have following semantics:
! .IP * 4
  \&\fIblock_ids\fR: IDs of basic blocks that belong to the line
! .IP * 4
  \&\fIcount\fR: number of executions of the line
! .IP * 4
  \&\fIline_number\fR: line number
! .IP * 4
  \&\fIunexecuted_block\fR: flag whether the line contains an unexecuted block
  (not all statements on the line are executed)
! .IP * 4
  \&\fIfunction_name\fR: a name of a function this \fIline\fR belongs to
  (for a line with an inlined statements can be not set)
  .RE
*************** Each \fIbranch\fR has the following form
*** 426,441 ****
  .Ve
  .Sp
  Fields of the \fIbranch\fR element have following semantics:
! .IP "*" 4
  \&\fIcount\fR: number of executions of the branch
! .IP "*" 4
  \&\fIfallthrough\fR: true when the branch is a fall through branch
! .IP "*" 4
  \&\fIthrow\fR: true when the branch is an exceptional branch
! .IP "*" 4
! \&\fIisource_block_id\fR: \s-1ID\s0 of the basic block where this branch happens
! .IP "*" 4
! \&\fIdestination_block_id\fR: \s-1ID\s0 of the basic block this branch jumps to
  .RE
  .RS 4
  .Sp
--- 355,370 ----
  .Ve
  .Sp
  Fields of the \fIbranch\fR element have following semantics:
! .IP * 4
  \&\fIcount\fR: number of executions of the branch
! .IP * 4
  \&\fIfallthrough\fR: true when the branch is a fall through branch
! .IP * 4
  \&\fIthrow\fR: true when the branch is an exceptional branch
! .IP * 4
! \&\fIisource_block_id\fR: ID of the basic block where this branch happens
! .IP * 4
! \&\fIdestination_block_id\fR: ID of the basic block this branch jumps to
  .RE
  .RS 4
  .Sp
*************** Each \fIcall\fR has the following form:
*** 450,462 ****
  .Ve
  .Sp
  Fields of the \fIcall\fR element have following semantics:
! .IP "*" 4
  \&\fIreturned\fR: number of times a function call returned (call count is equal
  to \fIline::count\fR)
! .IP "*" 4
! \&\fIisource_block_id\fR: \s-1ID\s0 of the basic block where this call happens
! .IP "*" 4
! \&\fIdestination_block_id\fR: \s-1ID\s0 of the basic block this calls continues after return
  .RE
  .RS 4
  .Sp
--- 379,391 ----
  .Ve
  .Sp
  Fields of the \fIcall\fR element have following semantics:
! .IP * 4
  \&\fIreturned\fR: number of times a function call returned (call count is equal
  to \fIline::count\fR)
! .IP * 4
! \&\fIisource_block_id\fR: ID of the basic block where this call happens
! .IP * 4
! \&\fIdestination_block_id\fR: ID of the basic block this calls continues after return
  .RE
  .RS 4
  .Sp
*************** Each \fIcondition\fR has the following f
*** 472,508 ****
  .Ve
  .Sp
  Fields of the \fIcondition\fR element have following semantics:
! .IP "*" 4
  \&\fIcount\fR: number of condition outcomes in this expression
! .IP "*" 4
  \&\fIcovered\fR: number of covered condition outcomes in this expression
! .IP "*" 4
  \&\fInot_covered_true\fR: terms, by index, not seen as true in this expression
! .IP "*" 4
  \&\fInot_covered_false\fR: terms, by index, not seen as false in this expression
  .RE
  .RS 4
  .RE
! .IP "\fB\-H\fR" 4
  .IX Item "-H"
  .PD 0
! .IP "\fB\-\-human\-readable\fR" 4
  .IX Item "--human-readable"
  .PD
  Write counts in human readable format (like 24.6k).
! .IP "\fB\-k\fR" 4
  .IX Item "-k"
  .PD 0
! .IP "\fB\-\-use\-colors\fR" 4
  .IX Item "--use-colors"
  .PD
  Use colors for lines of code that have zero coverage.  We use red color for
! non-exceptional lines and cyan for exceptional.  Same colors are used for
  basic blocks with \fB\-a\fR option.
! .IP "\fB\-l\fR" 4
  .IX Item "-l"
  .PD 0
! .IP "\fB\-\-long\-file\-names\fR" 4
  .IX Item "--long-file-names"
  .PD
  Create long file names for included source files.  For example, if the
--- 401,437 ----
  .Ve
  .Sp
  Fields of the \fIcondition\fR element have following semantics:
! .IP * 4
  \&\fIcount\fR: number of condition outcomes in this expression
! .IP * 4
  \&\fIcovered\fR: number of covered condition outcomes in this expression
! .IP * 4
  \&\fInot_covered_true\fR: terms, by index, not seen as true in this expression
! .IP * 4
  \&\fInot_covered_false\fR: terms, by index, not seen as false in this expression
  .RE
  .RS 4
  .RE
! .IP \fB\-H\fR 4
  .IX Item "-H"
  .PD 0
! .IP \fB\-\-human\-readable\fR 4
  .IX Item "--human-readable"
  .PD
  Write counts in human readable format (like 24.6k).
! .IP \fB\-k\fR 4
  .IX Item "-k"
  .PD 0
! .IP \fB\-\-use\-colors\fR 4
  .IX Item "--use-colors"
  .PD
  Use colors for lines of code that have zero coverage.  We use red color for
! non\-exceptional lines and cyan for exceptional.  Same colors are used for
  basic blocks with \fB\-a\fR option.
! .IP \fB\-l\fR 4
  .IX Item "-l"
  .PD 0
! .IP \fB\-\-long\-file\-names\fR 4
  .IX Item "--long-file-names"
  .PD
  Create long file names for included source files.  For example, if the
*************** produce an output file called \fIa.c##x.
*** 513,530 ****
  multiple source files and you want to see the individual
  contributions.  If you use the \fB\-p\fR option, both the including
  and included file names will be complete path names.
! .IP "\fB\-m\fR" 4
  .IX Item "-m"
  .PD 0
! .IP "\fB\-\-demangled\-names\fR" 4
  .IX Item "--demangled-names"
  .PD
  Display demangled function names in output. The default is to show
  mangled function names.
! .IP "\fB\-n\fR" 4
  .IX Item "-n"
  .PD 0
! .IP "\fB\-\-no\-output\fR" 4
  .IX Item "--no-output"
  .PD
  Do not create the \fBgcov\fR output file.
--- 442,459 ----
  multiple source files and you want to see the individual
  contributions.  If you use the \fB\-p\fR option, both the including
  and included file names will be complete path names.
! .IP \fB\-m\fR 4
  .IX Item "-m"
  .PD 0
! .IP \fB\-\-demangled\-names\fR 4
  .IX Item "--demangled-names"
  .PD
  Display demangled function names in output. The default is to show
  mangled function names.
! .IP \fB\-n\fR 4
  .IX Item "-n"
  .PD 0
! .IP \fB\-\-no\-output\fR 4
  .IX Item "--no-output"
  .PD
  Do not create the \fBgcov\fR output file.
*************** object path name.  The \fI.gcno\fR, and
*** 542,551 ****
  is specified, the data files are in that directory and named after the
  input file name, without its extension.  If a file is specified here,
  the data files are named after that file, without its extension.
! .IP "\fB\-p\fR" 4
  .IX Item "-p"
  .PD 0
! .IP "\fB\-\-preserve\-paths\fR" 4
  .IX Item "--preserve-paths"
  .PD
  Preserve complete path information in the names of generated
--- 471,480 ----
  is specified, the data files are in that directory and named after the
  input file name, without its extension.  If a file is specified here,
  the data files are named after that file, without its extension.
! .IP \fB\-p\fR 4
  .IX Item "-p"
  .PD 0
! .IP \fB\-\-preserve\-paths\fR 4
  .IX Item "--preserve-paths"
  .PD
  Preserve complete path information in the names of generated
*************** translated to \fB#\fR characters, \fI.\f
*** 555,572 ****
  removed and unremoveable \fI..\fR
  components renamed to \fB^\fR.  This is useful if sourcefiles are in several
  different directories.
! .IP "\fB\-q\fR" 4
  .IX Item "-q"
  .PD 0
! .IP "\fB\-\-use\-hotness\-colors\fR" 4
  .IX Item "--use-hotness-colors"
  .PD
! Emit perf-like colored output for hot lines.  Legend of the color scale
  is printed at the very beginning of the output file.
! .IP "\fB\-r\fR" 4
  .IX Item "-r"
  .PD 0
! .IP "\fB\-\-relative\-only\fR" 4
  .IX Item "--relative-only"
  .PD
  Only output information about source files with a relative pathname
--- 484,501 ----
  removed and unremoveable \fI..\fR
  components renamed to \fB^\fR.  This is useful if sourcefiles are in several
  different directories.
! .IP \fB\-q\fR 4
  .IX Item "-q"
  .PD 0
! .IP \fB\-\-use\-hotness\-colors\fR 4
  .IX Item "--use-hotness-colors"
  .PD
! Emit perf\-like colored output for hot lines.  Legend of the color scale
  is printed at the very beginning of the output file.
! .IP \fB\-r\fR 4
  .IX Item "-r"
  .PD 0
! .IP \fB\-\-relative\-only\fR 4
  .IX Item "--relative-only"
  .PD
  Only output information about source files with a relative pathname
*************** coverage files.  This option is useful w
*** 584,631 ****
  directory, and the pathname to the source directory is not wanted when
  determining the output file names.  Note that this prefix detection is
  applied before determining whether the source file is absolute.
! .IP "\fB\-t\fR" 4
  .IX Item "-t"
  .PD 0
! .IP "\fB\-\-stdout\fR" 4
  .IX Item "--stdout"
  .PD
  Output to standard output instead of output files.
! .IP "\fB\-u\fR" 4
  .IX Item "-u"
  .PD 0
! .IP "\fB\-\-unconditional\-branches\fR" 4
  .IX Item "--unconditional-branches"
  .PD
  When branch probabilities are given, include those of unconditional branches.
  Unconditional branches are normally not interesting.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  .PD 0
! .IP "\fB\-\-version\fR" 4
  .IX Item "--version"
  .PD
  Display the \fBgcov\fR version number (on the standard output),
  and exit without doing any further processing.
! .IP "\fB\-w\fR" 4
  .IX Item "-w"
  .PD 0
! .IP "\fB\-\-verbose\fR" 4
  .IX Item "--verbose"
  .PD
  Print verbose informations related to basic blocks and arcs.
! .IP "\fB\-x\fR" 4
  .IX Item "-x"
  .PD 0
! .IP "\fB\-\-hash\-filenames\fR" 4
  .IX Item "--hash-filenames"
  .PD
  When using \fI\-\-preserve\-paths\fR,
  gcov uses the full pathname of the source files to create
  an output filename.  This can lead to long filenames that can overflow
  filesystem limits.  This option creates names of the form
! \&\fI\fIsource-file\fI##\fImd5\fI.gcov\fR,
! where the \fIsource-file\fR component is the final filename part and
  the \fImd5\fR component is calculated from the full mangled name that
  would have been used otherwise.  The option is an alternative
  to the \fI\-\-preserve\-paths\fR on systems which have a filesystem limit.
--- 513,560 ----
  directory, and the pathname to the source directory is not wanted when
  determining the output file names.  Note that this prefix detection is
  applied before determining whether the source file is absolute.
! .IP \fB\-t\fR 4
  .IX Item "-t"
  .PD 0
! .IP \fB\-\-stdout\fR 4
  .IX Item "--stdout"
  .PD
  Output to standard output instead of output files.
! .IP \fB\-u\fR 4
  .IX Item "-u"
  .PD 0
! .IP \fB\-\-unconditional\-branches\fR 4
  .IX Item "--unconditional-branches"
  .PD
  When branch probabilities are given, include those of unconditional branches.
  Unconditional branches are normally not interesting.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  .PD 0
! .IP \fB\-\-version\fR 4
  .IX Item "--version"
  .PD
  Display the \fBgcov\fR version number (on the standard output),
  and exit without doing any further processing.
! .IP \fB\-w\fR 4
  .IX Item "-w"
  .PD 0
! .IP \fB\-\-verbose\fR 4
  .IX Item "--verbose"
  .PD
  Print verbose informations related to basic blocks and arcs.
! .IP \fB\-x\fR 4
  .IX Item "-x"
  .PD 0
! .IP \fB\-\-hash\-filenames\fR 4
  .IX Item "--hash-filenames"
  .PD
  When using \fI\-\-preserve\-paths\fR,
  gcov uses the full pathname of the source files to create
  an output filename.  This can lead to long filenames that can overflow
  filesystem limits.  This option creates names of the form
! \&\fIsource\-file##md5.gcov\fR,
! where the \fIsource\-file\fR component is the final filename part and
  the \fImd5\fR component is calculated from the full mangled name that
  would have been used otherwise.  The option is an alternative
  to the \fI\-\-preserve\-paths\fR on systems which have a filesystem limit.
*************** to the \fI\-\-preserve\-paths\fR on syst
*** 633,639 ****
  \&\fBgcov\fR should be run with the current directory the same as that
  when you invoked the compiler.  Otherwise it will not be able to locate
  the source files.  \fBgcov\fR produces files called
! \&\fI\fImangledname\fI.gcov\fR in the current directory.  These contain
  the coverage information of the source file they correspond to.
  One \fI.gcov\fR file is produced for each source (or header) file
  containing code,
--- 562,568 ----
  \&\fBgcov\fR should be run with the current directory the same as that
  when you invoked the compiler.  Otherwise it will not be able to locate
  the source files.  \fBgcov\fR produces files called
! \&\fImangledname.gcov\fR in the current directory.  These contain
  the coverage information of the source file they correspond to.
  One \fI.gcov\fR file is produced for each source (or header) file
  containing code,
*************** Additional block information may succeed
*** 657,672 ****
  command line option.  The \fIexecution_count\fR is \fB\-\fR for lines
  containing no code.  Unexecuted lines are marked \fB#####\fR or
  \&\fB=====\fR, depending on whether they are reachable by
! non-exceptional paths or only exceptional paths such as \*(C+ exception
  handlers, respectively. Given the \fB\-a\fR option, unexecuted blocks are
  marked \fB$$$$$\fR or \fB%%%%%\fR, depending on whether a basic block
! is reachable via non-exceptional or exceptional paths.
  Executed basic blocks having a statement with zero \fIexecution_count\fR
  end with \fB*\fR character and are colored with magenta color with
  the \fB\-k\fR option.  This functionality is not supported in Ada.
  .PP
! Note that \s-1GCC\s0 can completely remove the bodies of functions that are
! not needed \*(-- for instance if they are inlined everywhere.  Such functions
  are marked with \fB\-\fR, which can be confusing.
  Use the \fB\-fkeep\-inline\-functions\fR and \fB\-fkeep\-static\-functions\fR
  options to retain these functions and
--- 586,601 ----
  command line option.  The \fIexecution_count\fR is \fB\-\fR for lines
  containing no code.  Unexecuted lines are marked \fB#####\fR or
  \&\fB=====\fR, depending on whether they are reachable by
! non\-exceptional paths or only exceptional paths such as C++ exception
  handlers, respectively. Given the \fB\-a\fR option, unexecuted blocks are
  marked \fB$$$$$\fR or \fB%%%%%\fR, depending on whether a basic block
! is reachable via non\-exceptional or exceptional paths.
  Executed basic blocks having a statement with zero \fIexecution_count\fR
  end with \fB*\fR character and are colored with magenta color with
  the \fB\-k\fR option.  This functionality is not supported in Ada.
  .PP
! Note that GCC can completely remove the bodies of functions that are
! not needed \-\- for instance if they are inlined everywhere.  Such functions
  are marked with \fB\-\fR, which can be confusing.
  Use the \fB\-fkeep\-inline\-functions\fR and \fB\-fkeep\-static\-functions\fR
  options to retain these functions and
*************** enough for machine parsing too.
*** 695,704 ****
  When printing percentages, 0% and 100% are only printed when the values
  are \fIexactly\fR 0% and 100% respectively.  Other values which would
  conventionally be rounded to 0% or 100% are instead printed as the
! nearest non-boundary value.
  .PP
  When using \fBgcov\fR, you must first compile your program
! with a special \s-1GCC\s0 option \fB\-\-coverage\fR.
  This tells the compiler to generate additional information needed by
  gcov (basically a flow graph of the program) and also includes
  additional code in the object files for generating the extra profiling
--- 624,633 ----
  When printing percentages, 0% and 100% are only printed when the values
  are \fIexactly\fR 0% and 100% respectively.  Other values which would
  conventionally be rounded to 0% or 100% are instead printed as the
! nearest non\-boundary value.
  .PP
  When using \fBgcov\fR, you must first compile your program
! with a special GCC option \fB\-\-coverage\fR.
  This tells the compiler to generate additional information needed by
  gcov (basically a flow graph of the program) and also includes
  additional code in the object files for generating the extra profiling
*************** Running the program will cause profile o
*** 709,715 ****
  source file compiled with \fB\-fprofile\-arcs\fR, an accompanying
  \&\fI.gcda\fR file will be placed in the object file directory.
  .PP
! Running \fBgcov\fR with your program's source file names as arguments
  will now produce a listing of the code along with frequency of execution
  for each line.  For example, if your program is called \fItmp.cpp\fR, this
  is what you see when you use the basic \fBgcov\fR facility:
--- 638,644 ----
  source file compiled with \fB\-fprofile\-arcs\fR, an accompanying
  \&\fI.gcda\fR file will be placed in the object file directory.
  .PP
! Running \fBgcov\fR with your program\*(Aqs source file names as arguments
  will now produce a listing of the code along with frequency of execution
  for each line.  For example, if your program is called \fItmp.cpp\fR, this
  is what you see when you use the basic \fBgcov\fR facility:
*************** counts, and the output looks like this:
*** 868,875 ****
  \&                \-:   37:}
  .Ve
  .PP
! In this mode, each basic block is only shown on one line \*(-- the last
! line of the block.  A multi-line block will only contribute to the
  execution count of that last line, and other lines will not be shown
  to contain code, unless previous blocks end on those lines.
  The total execution count of a line is shown and subsequent lines show
--- 797,804 ----
  \&                \-:   37:}
  .Ve
  .PP
! In this mode, each basic block is only shown on one line \-\- the last
! line of the block.  A multi\-line block will only contribute to the
  execution count of that last line, and other lines will not be shown
  to contain code, unless previous blocks end on those lines.
  The total execution count of a line is shown and subsequent lines show
*************** the execution counts for individual bloc
*** 877,883 ****
  block, the branch and call counts of the block will be shown, if the
  \&\fB\-b\fR option is given.
  .PP
! Because of the way \s-1GCC\s0 instruments calls, a call count can be shown
  after a line with no individual blocks.
  As you can see, line 33 contains a basic block that was not executed.
  .PP
--- 806,812 ----
  block, the branch and call counts of the block will be shown, if the
  \&\fB\-b\fR option is given.
  .PP
! Because of the way GCC instruments calls, a call count can be shown
  after a line with no individual blocks.
  As you can see, line 33 contains a basic block that was not executed.
  .PP
*************** When you use the \fB\-b\fR option, your
*** 971,977 ****
  .PP
  For each function, a line is printed showing how many times the function
  is called, how many times it returns and what percentage of the
! function's blocks were executed.
  .PP
  For each basic block, a line is printed after the last line of the basic
  block describing the branch or call that ends the basic block.  There can
--- 900,906 ----
  .PP
  For each function, a line is printed showing how many times the function
  is called, how many times it returns and what percentage of the
! function\*(Aqs blocks were executed.
  .PP
  For each basic block, a line is printed after the last line of the basic
  block describing the branch or call that ends the basic block.  There can
*************** on the source line.
*** 985,991 ****
  For a branch, if it was executed at least once, then a percentage
  indicating the number of times the branch was taken divided by the
  number of times the branch was executed will be printed.  Otherwise, the
! message \*(L"never executed\*(R" is printed.
  .PP
  For a call, if it was executed at least once, then a percentage
  indicating the number of times the call returned divided by the number
--- 914,920 ----
  For a branch, if it was executed at least once, then a percentage
  indicating the number of times the branch was taken divided by the
  number of times the branch was executed will be printed.  Otherwise, the
! message "never executed" is printed.
  .PP
  For a call, if it was executed at least once, then a percentage
  indicating the number of times the call returned divided by the number
*************** number of times each line in the source
*** 999,1019 ****
  the results of the previous run(s).  This is potentially useful in
  several ways.  For example, it could be used to accumulate data over a
  number of program runs as part of a test verification suite, or to
! provide more accurate long-term information over a large number of
  program runs.
  .PP
  The data in the \fI.gcda\fR files is saved immediately before the program
  exits.  For each source file compiled with \fB\-fprofile\-arcs\fR, the
  profiling code first attempts to read in an existing \fI.gcda\fR file; if
! the file doesn't match the executable (differing number of basic block
  counts) it will ignore the contents of the file.  It then adds in the
  new execution counts and finally writes the data to the file.
! .SS "Using \fBgcov\fP with \s-1GCC\s0 Optimization"
  .IX Subsection "Using gcov with GCC Optimization"
  If you plan to use \fBgcov\fR to help optimize your code, you must
! first compile your program with a special \s-1GCC\s0 option
  \&\fB\-\-coverage\fR.  Aside from that, you can use any
! other \s-1GCC\s0 options; but if you want to prove that every single line
  in your program was executed, you should not compile with optimization
  at the same time.  On some machines the optimizer can eliminate some
  simple code lines by combining them with other lines.  For example, code
--- 928,948 ----
  the results of the previous run(s).  This is potentially useful in
  several ways.  For example, it could be used to accumulate data over a
  number of program runs as part of a test verification suite, or to
! provide more accurate long\-term information over a large number of
  program runs.
  .PP
  The data in the \fI.gcda\fR files is saved immediately before the program
  exits.  For each source file compiled with \fB\-fprofile\-arcs\fR, the
  profiling code first attempts to read in an existing \fI.gcda\fR file; if
! the file doesn\*(Aqt match the executable (differing number of basic block
  counts) it will ignore the contents of the file.  It then adds in the
  new execution counts and finally writes the data to the file.
! .SS "Using \fBgcov\fP with GCC Optimization"
  .IX Subsection "Using gcov with GCC Optimization"
  If you plan to use \fBgcov\fR to help optimize your code, you must
! first compile your program with a special GCC option
  \&\fB\-\-coverage\fR.  Aside from that, you can use any
! other GCC options; but if you want to prove that every single line
  in your program was executed, you should not compile with optimization
  at the same time.  On some machines the optimizer can eliminate some
  simple code lines by combining them with other lines.  For example, code
*************** like this:
*** 1028,1034 ****
  .PP
  can be compiled into one instruction on some machines.  In this case,
  there is no way for \fBgcov\fR to calculate separate execution counts
! for each line because there isn't separate code for each line.  Hence
  the \fBgcov\fR output looks like this if you compiled the program with
  optimization:
  .PP
--- 957,963 ----
  .PP
  can be compiled into one instruction on some machines.  In this case,
  there is no way for \fBgcov\fR to calculate separate execution counts
! for each line because there isn\*(Aqt separate code for each line.  Hence
  the \fBgcov\fR output looks like this if you compiled the program with
  optimization:
  .PP
*************** now be calculable at compile time in som
*** 1066,1074 ****
  coverage of all the uses of the inline function will be shown for the
  same source lines, the line counts themselves might seem inconsistent.
  .PP
! Long-running applications can use the \f(CW\*(C`_\|_gcov_reset\*(C'\fR and \f(CW\*(C`_\|_gcov_dump\*(C'\fR
  facilities to restrict profile collection to the program region of
! interest. Calling \f(CW\*(C`_\|_gcov_reset(void)\*(C'\fR will clear all run-time profile
  counters to zero, and calling \f(CW\*(C`_\|_gcov_dump(void)\*(C'\fR will cause the profile
  information collected at that point to be dumped to \fI.gcda\fR output files.
  Instrumented applications use a static destructor with priority 99
--- 995,1003 ----
  coverage of all the uses of the inline function will be shown for the
  same source lines, the line counts themselves might seem inconsistent.
  .PP
! Long\-running applications can use the \f(CW\*(C`_\|_gcov_reset\*(C'\fR and \f(CW\*(C`_\|_gcov_dump\*(C'\fR
  facilities to restrict profile collection to the program region of
! interest. Calling \f(CW\*(C`_\|_gcov_reset(void)\*(C'\fR will clear all run\-time profile
  counters to zero, and calling \f(CW\*(C`_\|_gcov_dump(void)\*(C'\fR will cause the profile
  information collected at that point to be dumped to \fI.gcda\fR output files.
  Instrumented applications use a static destructor with priority 99
*************** as well as handlers registered with \f(C
*** 1079,1113 ****
  If an executable loads a dynamic shared object via dlopen functionality,
  \&\fB\-Wl,\-\-dynamic\-list\-data\fR is needed to dump all profile data.
  .PP
! Profiling run-time library reports various errors related to profile
  manipulation and profile saving.  Errors are printed into standard error output
! or \fB\s-1GCOV_ERROR_FILE\s0\fR file, if environment variable is used.
  In order to terminate immediately after an errors occurs
! set \fB\s-1GCOV_EXIT_AT_ERROR\s0\fR environment variable.
  That can help users to find profile clashing which leads
  to a misleading profile.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1) and the Info entry for \fIgcc\fR.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 1996\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
! Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 1008,1042 ----
  If an executable loads a dynamic shared object via dlopen functionality,
  \&\fB\-Wl,\-\-dynamic\-list\-data\fR is needed to dump all profile data.
  .PP
! Profiling run\-time library reports various errors related to profile
  manipulation and profile saving.  Errors are printed into standard error output
! or \fBGCOV_ERROR_FILE\fR file, if environment variable is used.
  In order to terminate immediately after an errors occurs
! set \fBGCOV_EXIT_AT_ERROR\fR environment variable.
  That can help users to find profile clashing which leads
  to a misleading profile.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1) and the Info entry for \fIgcc\fR.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 1996\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gdc.1 gcc-14.3.0-RC-20260619/gcc/doc/gdc.1
*** gcc-14.3.0/gcc/doc/gdc.1	Fri May 23 11:28:10 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gdc.1	Fri Jun 19 07:14:56 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,175 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GDC 1"
! .TH GDC 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gdc \- A GCC\-based compiler for the D language
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  gdc [\fB\-c\fR|\fB\-S\fR] [\fB\-g\fR] [\fB\-pg\fR]
      [\fB\-O\fR\fIlevel\fR] [\fB\-W\fR\fIwarn\fR...]
      [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
!     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
      [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! The \fBgdc\fR command is the \s-1GNU\s0 compiler for the D language and
  supports many of the same options as \fBgcc\fR.  
  This manual only documents the options specific to \fBgdc\fR.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
  .SS "Input and Output files"
  .IX Subsection "Input and Output files"
  For any given input file, the file name suffix determines what kind of
  compilation is done.  The following kinds of input file names are supported:
! .IP "\fIfile\fR\fB.d\fR" 4
  .IX Item "file.d"
  D source files.
! .IP "\fIfile\fR\fB.dd\fR" 4
  .IX Item "file.dd"
  Ddoc source files.
! .IP "\fIfile\fR\fB.di\fR" 4
  .IX Item "file.di"
  D interface files.
  .PP
  You can specify more than one input file on the \fBgdc\fR command line,
  each being compiled separately in the compilation process.  If you specify a
! \&\f(CW\*(C`\-o \f(CIfile\f(CW\*(C'\fR option, all the input files are compiled together,
  producing a single output file, named \fIfile\fR.  This is allowed even
  when using \f(CW\*(C`\-S\*(C'\fR or \f(CW\*(C`\-c\*(C'\fR.
  .PP
--- 38,104 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GDC 1"
! .TH GDC 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gdc \- A GCC\-based compiler for the D language
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  gdc [\fB\-c\fR|\fB\-S\fR] [\fB\-g\fR] [\fB\-pg\fR]
      [\fB\-O\fR\fIlevel\fR] [\fB\-W\fR\fIwarn\fR...]
      [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
!     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine\-option\fR...]
      [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! The \fBgdc\fR command is the GNU compiler for the D language and
  supports many of the same options as \fBgcc\fR.  
  This manual only documents the options specific to \fBgdc\fR.
! .SH OPTIONS
  .IX Header "OPTIONS"
  .SS "Input and Output files"
  .IX Subsection "Input and Output files"
  For any given input file, the file name suffix determines what kind of
  compilation is done.  The following kinds of input file names are supported:
! .IP \fIfile\fR\fB.d\fR 4
  .IX Item "file.d"
  D source files.
! .IP \fIfile\fR\fB.dd\fR 4
  .IX Item "file.dd"
  Ddoc source files.
! .IP \fIfile\fR\fB.di\fR 4
  .IX Item "file.di"
  D interface files.
  .PP
  You can specify more than one input file on the \fBgdc\fR command line,
  each being compiled separately in the compilation process.  If you specify a
! \&\f(CW\*(C`\-o \fR\f(CIfile\fR\f(CW\*(C'\fR option, all the input files are compiled together,
  producing a single output file, named \fIfile\fR.  This is allowed even
  when using \f(CW\*(C`\-S\*(C'\fR or \f(CW\*(C`\-c\*(C'\fR.
  .PP
*************** When the compiler resolves an import dec
*** 181,253 ****
  .PP
  A Ddoc source file contains code in the D macro processor language.  It is
  primarily designed for use in producing user documentation from embedded
! comments, with a slight affinity towards \s-1HTML\s0 generation.  If a \fI.d\fR
  source file starts with the string \f(CW\*(C`Ddoc\*(C'\fR then it is treated as general
  purpose documentation, not as a D source file.
  .SS "Runtime Options"
  .IX Subsection "Runtime Options"
  These options affect the runtime behavior of programs compiled with
  \&\fBgdc\fR.
! .IP "\fB\-fall\-instantiations\fR" 4
  .IX Item "-fall-instantiations"
  Generate code for all template instantiations.  The default template emission
  strategy is to not generate code for declarations that were either
  instantiated speculatively, such as from \f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR, or
  that come from an imported module not being compiled.
! .IP "\fB\-fno\-assert\fR" 4
  .IX Item "-fno-assert"
  Turn off code generation for \f(CW\*(C`assert\*(C'\fR contracts.
! .IP "\fB\-fno\-bounds\-check\fR" 4
  .IX Item "-fno-bounds-check"
  Turns off array bounds checking for all functions, which can improve
  performance for code that uses arrays extensively.  Note that this
  can result in unpredictable behavior if the code in question actually
  does violate array bounds constraints.  It is safe to use this option
  if you are sure that your code never throws a \f(CW\*(C`RangeError\*(C'\fR.
! .IP "\fB\-fbounds\-check=\fR\fIvalue\fR" 4
  .IX Item "-fbounds-check=value"
  An alternative to \fB\-fbounds\-check\fR that allows more control
  as to where bounds checking is turned on or off.  The following values
  are supported:
  .RS 4
! .IP "\fBon\fR" 4
  .IX Item "on"
  Turns on array bounds checking for all functions.
! .IP "\fBsafeonly\fR" 4
  .IX Item "safeonly"
  Turns on array bounds checking only for \f(CW@safe\fR functions.
! .IP "\fBoff\fR" 4
  .IX Item "off"
  Turns off array bounds checking completely.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fno\-builtin\fR" 4
  .IX Item "-fno-builtin"
! Don't recognize built-in functions unless they begin with the prefix
  \&\fB_\|_builtin_\fR.  By default, the compiler will recognize when a
! function in the \f(CW\*(C`core.stdc\*(C'\fR package is a built-in function.
! .IP "\fB\-fcheckaction=\fR\fIvalue\fR" 4
  .IX Item "-fcheckaction=value"
  This option controls what code is generated on an assertion, bounds check, or
  final switch failure.  The following values are supported:
  .RS 4
! .IP "\fBcontext\fR" 4
  .IX Item "context"
  Throw an \f(CW\*(C`AssertError\*(C'\fR with extra context information.
! .IP "\fBhalt\fR" 4
  .IX Item "halt"
  Halt the program execution.
! .IP "\fBthrow\fR" 4
  .IX Item "throw"
  Throw an \f(CW\*(C`AssertError\*(C'\fR (the default).
  .RE
  .RS 4
  .RE
! .IP "\fB\-fdebug\fR" 4
  .IX Item "-fdebug"
  .PD 0
! .IP "\fB\-fdebug=\fR\fIvalue\fR" 4
  .IX Item "-fdebug=value"
  .PD
  Turn on compilation of conditional \f(CW\*(C`debug\*(C'\fR code into the program.
--- 110,182 ----
  .PP
  A Ddoc source file contains code in the D macro processor language.  It is
  primarily designed for use in producing user documentation from embedded
! comments, with a slight affinity towards HTML generation.  If a \fI.d\fR
  source file starts with the string \f(CW\*(C`Ddoc\*(C'\fR then it is treated as general
  purpose documentation, not as a D source file.
  .SS "Runtime Options"
  .IX Subsection "Runtime Options"
  These options affect the runtime behavior of programs compiled with
  \&\fBgdc\fR.
! .IP \fB\-fall\-instantiations\fR 4
  .IX Item "-fall-instantiations"
  Generate code for all template instantiations.  The default template emission
  strategy is to not generate code for declarations that were either
  instantiated speculatively, such as from \f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR, or
  that come from an imported module not being compiled.
! .IP \fB\-fno\-assert\fR 4
  .IX Item "-fno-assert"
  Turn off code generation for \f(CW\*(C`assert\*(C'\fR contracts.
! .IP \fB\-fno\-bounds\-check\fR 4
  .IX Item "-fno-bounds-check"
  Turns off array bounds checking for all functions, which can improve
  performance for code that uses arrays extensively.  Note that this
  can result in unpredictable behavior if the code in question actually
  does violate array bounds constraints.  It is safe to use this option
  if you are sure that your code never throws a \f(CW\*(C`RangeError\*(C'\fR.
! .IP \fB\-fbounds\-check=\fR\fIvalue\fR 4
  .IX Item "-fbounds-check=value"
  An alternative to \fB\-fbounds\-check\fR that allows more control
  as to where bounds checking is turned on or off.  The following values
  are supported:
  .RS 4
! .IP \fBon\fR 4
  .IX Item "on"
  Turns on array bounds checking for all functions.
! .IP \fBsafeonly\fR 4
  .IX Item "safeonly"
  Turns on array bounds checking only for \f(CW@safe\fR functions.
! .IP \fBoff\fR 4
  .IX Item "off"
  Turns off array bounds checking completely.
  .RE
  .RS 4
  .RE
! .IP \fB\-fno\-builtin\fR 4
  .IX Item "-fno-builtin"
! Don\*(Aqt recognize built\-in functions unless they begin with the prefix
  \&\fB_\|_builtin_\fR.  By default, the compiler will recognize when a
! function in the \f(CW\*(C`core.stdc\*(C'\fR package is a built\-in function.
! .IP \fB\-fcheckaction=\fR\fIvalue\fR 4
  .IX Item "-fcheckaction=value"
  This option controls what code is generated on an assertion, bounds check, or
  final switch failure.  The following values are supported:
  .RS 4
! .IP \fBcontext\fR 4
  .IX Item "context"
  Throw an \f(CW\*(C`AssertError\*(C'\fR with extra context information.
! .IP \fBhalt\fR 4
  .IX Item "halt"
  Halt the program execution.
! .IP \fBthrow\fR 4
  .IX Item "throw"
  Throw an \f(CW\*(C`AssertError\*(C'\fR (the default).
  .RE
  .RS 4
  .RE
! .IP \fB\-fdebug\fR 4
  .IX Item "-fdebug"
  .PD 0
! .IP \fB\-fdebug=\fR\fIvalue\fR 4
  .IX Item "-fdebug=value"
  .PD
  Turn on compilation of conditional \f(CW\*(C`debug\*(C'\fR code into the program.
*************** The \fB\-fdebug\fR option itself sets th
*** 255,267 ****
  while \fB\-fdebug=\fR enables \f(CW\*(C`debug\*(C'\fR code that are identified
  by any of the following values:
  .RS 4
! .IP "\fBident\fR" 4
  .IX Item "ident"
  Turns on compilation of any \f(CW\*(C`debug\*(C'\fR code identified by \fIident\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fno\-druntime\fR" 4
  .IX Item "-fno-druntime"
  Implements <\fBhttps://dlang.org/spec/betterc.html\fR>.  Assumes that
  compilation targets an environment without a D runtime library.
--- 184,196 ----
  while \fB\-fdebug=\fR enables \f(CW\*(C`debug\*(C'\fR code that are identified
  by any of the following values:
  .RS 4
! .IP \fBident\fR 4
  .IX Item "ident"
  Turns on compilation of any \f(CW\*(C`debug\*(C'\fR code identified by \fIident\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-fno\-druntime\fR 4
  .IX Item "-fno-druntime"
  Implements <\fBhttps://dlang.org/spec/betterc.html\fR>.  Assumes that
  compilation targets an environment without a D runtime library.
*************** This is equivalent to compiling with the
*** 271,314 ****
  .Vb 1
  \&        gdc \-nophoboslib \-fno\-exceptions \-fno\-moduleinfo \-fno\-rtti
  .Ve
! .IP "\fB\-fextern\-std=\fR\fIstandard\fR" 4
  .IX Item "-fextern-std=standard"
! Sets the \*(C+ name mangling compatibility to the version identified by
  \&\fIstandard\fR.  The following values are supported:
  .RS 4
! .IP "\fBc++98\fR" 4
  .IX Item "c++98"
  .PD 0
! .IP "\fBc++03\fR" 4
  .IX Item "c++03"
  .PD
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW199711\fR.
! .IP "\fBc++11\fR" 4
  .IX Item "c++11"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201103\fR.
! .IP "\fBc++14\fR" 4
  .IX Item "c++14"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201402\fR.
! .IP "\fBc++17\fR" 4
  .IX Item "c++17"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201703\fR.
  This is the default.
! .IP "\fBc++20\fR" 4
  .IX Item "c++20"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW202002\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fno\-invariants\fR" 4
  .IX Item "-fno-invariants"
  Turns off code generation for class \f(CW\*(C`invariant\*(C'\fR contracts.
! .IP "\fB\-fmain\fR" 4
  .IX Item "-fmain"
! Generates a default \f(CW\*(C`main()\*(C'\fR function when compiling.  This is useful when
  unittesting a library, as it enables running the unittests in a library without
! having to manually define an entry-point function.  This option does nothing
  when \f(CW\*(C`main\*(C'\fR is already defined in user code.
! .IP "\fB\-fno\-moduleinfo\fR" 4
  .IX Item "-fno-moduleinfo"
  Turns off generation of the \f(CW\*(C`ModuleInfo\*(C'\fR and related functions
  that would become unreferenced without it, which may allow linking
--- 200,243 ----
  .Vb 1
  \&        gdc \-nophoboslib \-fno\-exceptions \-fno\-moduleinfo \-fno\-rtti
  .Ve
! .IP \fB\-fextern\-std=\fR\fIstandard\fR 4
  .IX Item "-fextern-std=standard"
! Sets the C++ name mangling compatibility to the version identified by
  \&\fIstandard\fR.  The following values are supported:
  .RS 4
! .IP \fBc++98\fR 4
  .IX Item "c++98"
  .PD 0
! .IP \fBc++03\fR 4
  .IX Item "c++03"
  .PD
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW199711\fR.
! .IP \fBc++11\fR 4
  .IX Item "c++11"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201103\fR.
! .IP \fBc++14\fR 4
  .IX Item "c++14"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201402\fR.
! .IP \fBc++17\fR 4
  .IX Item "c++17"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201703\fR.
  This is the default.
! .IP \fBc++20\fR 4
  .IX Item "c++20"
  Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW202002\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-fno\-invariants\fR 4
  .IX Item "-fno-invariants"
  Turns off code generation for class \f(CW\*(C`invariant\*(C'\fR contracts.
! .IP \fB\-fmain\fR 4
  .IX Item "-fmain"
! Generates a default \f(CWmain()\fR function when compiling.  This is useful when
  unittesting a library, as it enables running the unittests in a library without
! having to manually define an entry\-point function.  This option does nothing
  when \f(CW\*(C`main\*(C'\fR is already defined in user code.
! .IP \fB\-fno\-moduleinfo\fR 4
  .IX Item "-fno-moduleinfo"
  Turns off generation of the \f(CW\*(C`ModuleInfo\*(C'\fR and related functions
  that would become unreferenced without it, which may allow linking
*************** to programs not written in D.  Functions
*** 316,394 ****
  include module constructors and destructors (\f(CW\*(C`static this\*(C'\fR and
  \&\f(CW\*(C`static ~this\*(C'\fR), \f(CW\*(C`unittest\*(C'\fR code, and \f(CW\*(C`DSO\*(C'\fR registry
  functions for dynamically linked code.
! .IP "\fB\-fonly=\fR\fIfilename\fR" 4
  .IX Item "-fonly=filename"
  Tells the compiler to parse and run semantic analysis on all modules
  on the command line, but only generate code for the module specified
  by \fIfilename\fR.
! .IP "\fB\-fno\-postconditions\fR" 4
  .IX Item "-fno-postconditions"
  Turns off code generation for postcondition \f(CW\*(C`out\*(C'\fR contracts.
! .IP "\fB\-fno\-preconditions\fR" 4
  .IX Item "-fno-preconditions"
  Turns off code generation for precondition \f(CW\*(C`in\*(C'\fR contracts.
! .IP "\fB\-fpreview=\fR\fIid\fR" 4
  .IX Item "-fpreview=id"
  Turns on an upcoming D language change identified by \fIid\fR.  The following
  values are supported:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Turns on all upcoming D language features.
! .IP "\fBbitfields\fR" 4
  .IX Item "bitfields"
! Implements bit-fields in D.
! .IP "\fBdip1000\fR" 4
  .IX Item "dip1000"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR>
  (Scoped pointers).
! .IP "\fBdip1008\fR" 4
  .IX Item "dip1008"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md\fR>
  (Allow exceptions in \f(CW@nogc\fR code).
! .IP "\fBdip1021\fR" 4
  .IX Item "dip1021"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md\fR>
  (Mutable function arguments).
! .IP "\fBdip25\fR" 4
  .IX Item "dip25"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR>
  (Sealed references).
! .IP "\fBdtorfields\fR" 4
  .IX Item "dtorfields"
  Turns on generation for destructing fields of partially constructed objects.
! .IP "\fBfieldwise\fR" 4
  .IX Item "fieldwise"
! Turns on generation of struct equality to use field-wise comparisons.
! .IP "\fBfixaliasthis\fR" 4
  .IX Item "fixaliasthis"
  Implements new lookup rules that check the current scope for \f(CW\*(C`alias this\*(C'\fR
  before searching in upper scopes.
! .IP "\fBfiximmutableconv\fR" 4
  .IX Item "fiximmutableconv"
  Disallows unsound immutable conversions that were formerly incorrectly
  permitted.
! .IP "\fBin\fR" 4
  .IX Item "in"
  Implements \f(CW\*(C`in\*(C'\fR parameters to mean \f(CW\*(C`scope const [ref]\*(C'\fR and accepts
  rvalues.
! .IP "\fBinclusiveincontracts\fR" 4
  .IX Item "inclusiveincontracts"
  Implements \f(CW\*(C`in\*(C'\fR contracts of overridden methods to be a superset of parent
  contract.
! .IP "\fBnosharedaccess\fR" 4
  .IX Item "nosharedaccess"
  Turns off and disallows all access to shared memory objects.
! .IP "\fBrvaluerefparam\fR" 4
  .IX Item "rvaluerefparam"
  Implements rvalue arguments to \f(CW\*(C`ref\*(C'\fR parameters.
! .IP "\fBsystemvariables\fR" 4
  .IX Item "systemvariables"
  Disables access to variables marked \f(CW@system\fR from \f(CW@safe\fR code.
  .RE
  .RS 4
  .RE
! .IP "\fB\-frelease\fR" 4
  .IX Item "-frelease"
  Turns on compiling in release mode, which means not emitting runtime
  checks for contracts and asserts.  Array bounds checking is not done
--- 245,323 ----
  include module constructors and destructors (\f(CW\*(C`static this\*(C'\fR and
  \&\f(CW\*(C`static ~this\*(C'\fR), \f(CW\*(C`unittest\*(C'\fR code, and \f(CW\*(C`DSO\*(C'\fR registry
  functions for dynamically linked code.
! .IP \fB\-fonly=\fR\fIfilename\fR 4
  .IX Item "-fonly=filename"
  Tells the compiler to parse and run semantic analysis on all modules
  on the command line, but only generate code for the module specified
  by \fIfilename\fR.
! .IP \fB\-fno\-postconditions\fR 4
  .IX Item "-fno-postconditions"
  Turns off code generation for postcondition \f(CW\*(C`out\*(C'\fR contracts.
! .IP \fB\-fno\-preconditions\fR 4
  .IX Item "-fno-preconditions"
  Turns off code generation for precondition \f(CW\*(C`in\*(C'\fR contracts.
! .IP \fB\-fpreview=\fR\fIid\fR 4
  .IX Item "-fpreview=id"
  Turns on an upcoming D language change identified by \fIid\fR.  The following
  values are supported:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Turns on all upcoming D language features.
! .IP \fBbitfields\fR 4
  .IX Item "bitfields"
! Implements bit\-fields in D.
! .IP \fBdip1000\fR 4
  .IX Item "dip1000"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR>
  (Scoped pointers).
! .IP \fBdip1008\fR 4
  .IX Item "dip1008"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md\fR>
  (Allow exceptions in \f(CW@nogc\fR code).
! .IP \fBdip1021\fR 4
  .IX Item "dip1021"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md\fR>
  (Mutable function arguments).
! .IP \fBdip25\fR 4
  .IX Item "dip25"
  Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR>
  (Sealed references).
! .IP \fBdtorfields\fR 4
  .IX Item "dtorfields"
  Turns on generation for destructing fields of partially constructed objects.
! .IP \fBfieldwise\fR 4
  .IX Item "fieldwise"
! Turns on generation of struct equality to use field\-wise comparisons.
! .IP \fBfixaliasthis\fR 4
  .IX Item "fixaliasthis"
  Implements new lookup rules that check the current scope for \f(CW\*(C`alias this\*(C'\fR
  before searching in upper scopes.
! .IP \fBfiximmutableconv\fR 4
  .IX Item "fiximmutableconv"
  Disallows unsound immutable conversions that were formerly incorrectly
  permitted.
! .IP \fBin\fR 4
  .IX Item "in"
  Implements \f(CW\*(C`in\*(C'\fR parameters to mean \f(CW\*(C`scope const [ref]\*(C'\fR and accepts
  rvalues.
! .IP \fBinclusiveincontracts\fR 4
  .IX Item "inclusiveincontracts"
  Implements \f(CW\*(C`in\*(C'\fR contracts of overridden methods to be a superset of parent
  contract.
! .IP \fBnosharedaccess\fR 4
  .IX Item "nosharedaccess"
  Turns off and disallows all access to shared memory objects.
! .IP \fBrvaluerefparam\fR 4
  .IX Item "rvaluerefparam"
  Implements rvalue arguments to \f(CW\*(C`ref\*(C'\fR parameters.
! .IP \fBsystemvariables\fR 4
  .IX Item "systemvariables"
  Disables access to variables marked \f(CW@system\fR from \f(CW@safe\fR code.
  .RE
  .RS 4
  .RE
! .IP \fB\-frelease\fR 4
  .IX Item "-frelease"
  Turns on compiling in release mode, which means not emitting runtime
  checks for contracts and asserts.  Array bounds checking is not done
*************** This is equivalent to compiling with the
*** 401,487 ****
  \&        gdc \-fno\-assert \-fbounds\-check=safe \-fno\-invariants \e
  \&            \-fno\-postconditions \-fno\-preconditions \-fno\-switch\-errors
  .Ve
! .IP "\fB\-frevert=\fR" 4
  .IX Item "-frevert="
  Turns off a D language feature identified by \fIid\fR.  The following values
  are supported:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  Turns off all revertable D language features.
! .IP "\fBdip1000\fR" 4
  .IX Item "dip1000"
  Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR>
  (Scoped pointers).
! .IP "\fBdip25\fR" 4
  .IX Item "dip25"
  Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR>
  (Sealed references).
! .IP "\fBdtorfields\fR" 4
  .IX Item "dtorfields"
  Turns off generation for destructing fields of partially constructed objects.
! .IP "\fBintpromote\fR" 4
  .IX Item "intpromote"
  Turns off C\-style integral promotion for unary \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`~\*(C'\fR
  expressions.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fno\-rtti\fR" 4
  .IX Item "-fno-rtti"
! Turns off generation of run-time type information for all user defined types.
  Any code that uses features of the language that require access to this
  information will result in an error.
! .IP "\fB\-fno\-switch\-errors\fR" 4
  .IX Item "-fno-switch-errors"
  This option controls what code is generated when no case is matched
  in a \f(CW\*(C`final switch\*(C'\fR statement.  The default run time behavior
  is to throw a \f(CW\*(C`SwitchError\*(C'\fR.  Turning off \fB\-fswitch\-errors\fR
  means that instead the execution of the program is immediately halted.
! .IP "\fB\-funittest\fR" 4
  .IX Item "-funittest"
  Turns on compilation of \f(CW\*(C`unittest\*(C'\fR code, and turns on the
! \&\f(CW\*(C`version(unittest)\*(C'\fR identifier.  This implies \fB\-fassert\fR.
! .IP "\fB\-fversion=\fR\fIvalue\fR" 4
  .IX Item "-fversion=value"
  Turns on compilation of conditional \f(CW\*(C`version\*(C'\fR code into the program
  identified by any of the following values:
  .RS 4
! .IP "\fBident\fR" 4
  .IX Item "ident"
  Turns on compilation of \f(CW\*(C`version\*(C'\fR code identified by \fIident\fR.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fno\-weak\-templates\fR" 4
  .IX Item "-fno-weak-templates"
  Turns off emission of declarations that can be defined in multiple objects as
  weak symbols.  The default is to emit all public symbols as weak, unless the
  target lacks support for weak symbols.  Disabling this option means that common
! symbols are instead put in \s-1COMDAT\s0 or become private.
  .SS "Options for Directory Search"
  .IX Subsection "Options for Directory Search"
  These options specify directories to search for files, libraries, and
  other parts of the compiler:
! .IP "\fB\-I\fR\fIdir\fR" 4
  .IX Item "-Idir"
  Specify a directory to use when searching for imported modules at
  compile time.  Multiple \fB\-I\fR options can be used, and the
  paths are searched in the same order.
! .IP "\fB\-J\fR\fIdir\fR" 4
  .IX Item "-Jdir"
  Specify a directory to use when searching for files in string imports
  at compile time.  This switch is required in order to use
! \&\f(CW\*(C`import(file)\*(C'\fR expressions.  Multiple \fB\-J\fR options can be
  used, and the paths are searched in the same order.
! .IP "\fB\-L\fR\fIdir\fR" 4
  .IX Item "-Ldir"
  When linking, specify a library search directory, as with \fBgcc\fR.
! .IP "\fB\-B\fR\fIdir\fR" 4
  .IX Item "-Bdir"
  This option specifies where to find the executables, libraries,
  source files, and data files of the compiler itself, as with \fBgcc\fR.
! .IP "\fB\-fmodule\-file=\fR\fImodule\fR\fB=\fR\fIspec\fR" 4
  .IX Item "-fmodule-file=module=spec"
  This option manipulates file paths of imported modules, such that if an
  imported module matches all or the leftmost part of \fImodule\fR, the file
--- 330,416 ----
  \&        gdc \-fno\-assert \-fbounds\-check=safe \-fno\-invariants \e
  \&            \-fno\-postconditions \-fno\-preconditions \-fno\-switch\-errors
  .Ve
! .IP \fB\-frevert=\fR 4
  .IX Item "-frevert="
  Turns off a D language feature identified by \fIid\fR.  The following values
  are supported:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  Turns off all revertable D language features.
! .IP \fBdip1000\fR 4
  .IX Item "dip1000"
  Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR>
  (Scoped pointers).
! .IP \fBdip25\fR 4
  .IX Item "dip25"
  Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR>
  (Sealed references).
! .IP \fBdtorfields\fR 4
  .IX Item "dtorfields"
  Turns off generation for destructing fields of partially constructed objects.
! .IP \fBintpromote\fR 4
  .IX Item "intpromote"
  Turns off C\-style integral promotion for unary \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`~\*(C'\fR
  expressions.
  .RE
  .RS 4
  .RE
! .IP \fB\-fno\-rtti\fR 4
  .IX Item "-fno-rtti"
! Turns off generation of run\-time type information for all user defined types.
  Any code that uses features of the language that require access to this
  information will result in an error.
! .IP \fB\-fno\-switch\-errors\fR 4
  .IX Item "-fno-switch-errors"
  This option controls what code is generated when no case is matched
  in a \f(CW\*(C`final switch\*(C'\fR statement.  The default run time behavior
  is to throw a \f(CW\*(C`SwitchError\*(C'\fR.  Turning off \fB\-fswitch\-errors\fR
  means that instead the execution of the program is immediately halted.
! .IP \fB\-funittest\fR 4
  .IX Item "-funittest"
  Turns on compilation of \f(CW\*(C`unittest\*(C'\fR code, and turns on the
! \&\f(CWversion(unittest)\fR identifier.  This implies \fB\-fassert\fR.
! .IP \fB\-fversion=\fR\fIvalue\fR 4
  .IX Item "-fversion=value"
  Turns on compilation of conditional \f(CW\*(C`version\*(C'\fR code into the program
  identified by any of the following values:
  .RS 4
! .IP \fBident\fR 4
  .IX Item "ident"
  Turns on compilation of \f(CW\*(C`version\*(C'\fR code identified by \fIident\fR.
  .RE
  .RS 4
  .RE
! .IP \fB\-fno\-weak\-templates\fR 4
  .IX Item "-fno-weak-templates"
  Turns off emission of declarations that can be defined in multiple objects as
  weak symbols.  The default is to emit all public symbols as weak, unless the
  target lacks support for weak symbols.  Disabling this option means that common
! symbols are instead put in COMDAT or become private.
  .SS "Options for Directory Search"
  .IX Subsection "Options for Directory Search"
  These options specify directories to search for files, libraries, and
  other parts of the compiler:
! .IP \fB\-I\fR\fIdir\fR 4
  .IX Item "-Idir"
  Specify a directory to use when searching for imported modules at
  compile time.  Multiple \fB\-I\fR options can be used, and the
  paths are searched in the same order.
! .IP \fB\-J\fR\fIdir\fR 4
  .IX Item "-Jdir"
  Specify a directory to use when searching for files in string imports
  at compile time.  This switch is required in order to use
! \&\f(CWimport(file)\fR expressions.  Multiple \fB\-J\fR options can be
  used, and the paths are searched in the same order.
! .IP \fB\-L\fR\fIdir\fR 4
  .IX Item "-Ldir"
  When linking, specify a library search directory, as with \fBgcc\fR.
! .IP \fB\-B\fR\fIdir\fR 4
  .IX Item "-Bdir"
  This option specifies where to find the executables, libraries,
  source files, and data files of the compiler itself, as with \fBgcc\fR.
! .IP \fB\-fmodule\-file=\fR\fImodule\fR\fB=\fR\fIspec\fR 4
  .IX Item "-fmodule-file=module=spec"
  This option manipulates file paths of imported modules, such that if an
  imported module matches all or the leftmost part of \fImodule\fR, the file
*************** when importing \fIC\fR, as annotated in
*** 506,518 ****
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the gcc directory containing
! target-specific D sources and interfaces.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for the gcc directory containing
! target-specific D sources and interfaces.  If the \fIprefix\fR represents
  a directory, you should include the final \f(CW\*(Aq/\*(Aq\fR.
! .IP "\fB\-nostdinc\fR" 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for D source and interface
  files.  Only the directories that have been specified with \fB\-I\fR options
--- 435,447 ----
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
  Use \fIdir\fR as a subdirectory of the gcc directory containing
! target\-specific D sources and interfaces.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for the gcc directory containing
! target\-specific D sources and interfaces.  If the \fIprefix\fR represents
  a directory, you should include the final \f(CW\*(Aq/\*(Aq\fR.
! .IP \fB\-nostdinc\fR 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for D source and interface
  files.  Only the directories that have been specified with \fB\-I\fR options
*************** files.  Only the directories that have b
*** 521,527 ****
  .IX Subsection "Code Generation"
  In addition to the many \fBgcc\fR options controlling code generation,
  \&\fBgdc\fR has several options specific to itself.
! .IP "\fB\-H\fR" 4
  .IX Item "-H"
  Generates D interface files for all modules being compiled.  The compiler
  determines the output file based on the name of the input file, removes
--- 450,456 ----
  .IX Subsection "Code Generation"
  In addition to the many \fBgcc\fR options controlling code generation,
  \&\fBgdc\fR has several options specific to itself.
! .IP \fB\-H\fR 4
  .IX Item "-H"
  Generates D interface files for all modules being compiled.  The compiler
  determines the output file based on the name of the input file, removes
*************** output file and directory path.
*** 536,548 ****
  Same as \fB\-H\fR but writes interface files to \fIfile\fR.  This option can
  be used with \fB\-Hd\fR \fIdir\fR to independently set the output file and
  directory path.
! .IP "\fB\-M\fR" 4
  .IX Item "-M"
  Output the module dependencies of all source files being compiled in a
  format suitable for \fBmake\fR.  The compiler outputs one
  \&\fBmake\fR rule containing the object file name for that source file,
  a colon, and the names of all imported files.
! .IP "\fB\-MM\fR" 4
  .IX Item "-MM"
  Like \fB\-M\fR but does not mention imported modules from the D standard
  library package directories.
--- 465,477 ----
  Same as \fB\-H\fR but writes interface files to \fIfile\fR.  This option can
  be used with \fB\-Hd\fR \fIdir\fR to independently set the output file and
  directory path.
! .IP \fB\-M\fR 4
  .IX Item "-M"
  Output the module dependencies of all source files being compiled in a
  format suitable for \fBmake\fR.  The compiler outputs one
  \&\fBmake\fR rule containing the object file name for that source file,
  a colon, and the names of all imported files.
! .IP \fB\-MM\fR 4
  .IX Item "-MM"
  Like \fB\-M\fR but does not mention imported modules from the D standard
  library package directories.
*************** library package directories.
*** 551,561 ****
  When used with \fB\-M\fR or \fB\-MM\fR, specifies a \fIfile\fR to write
  the dependencies to.  When used with the driver options \fB\-MD\fR or
  \&\fB\-MMD\fR, \fB\-MF\fR overrides the default dependency output file.
! .IP "\fB\-MG\fR" 4
  .IX Item "-MG"
  This option is for compatibility with \fBgcc\fR, and is ignored by the
  compiler.
! .IP "\fB\-MP\fR" 4
  .IX Item "-MP"
  Outputs a phony target for each dependency other than the modules being
  compiled, causing each to depend on nothing.
--- 480,490 ----
  When used with \fB\-M\fR or \fB\-MM\fR, specifies a \fIfile\fR to write
  the dependencies to.  When used with the driver options \fB\-MD\fR or
  \&\fB\-MMD\fR, \fB\-MF\fR overrides the default dependency output file.
! .IP \fB\-MG\fR 4
  .IX Item "-MG"
  This option is for compatibility with \fBgcc\fR, and is ignored by the
  compiler.
! .IP \fB\-MP\fR 4
  .IX Item "-MP"
  Outputs a phony target for each dependency other than the modules being
  compiled, causing each to depend on nothing.
*************** multiple \fB\-MT\fR options.
*** 569,662 ****
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
  \&\fBmake\fR.
! .IP "\fB\-MD\fR" 4
  .IX Item "-MD"
  This option is equivalent to \fB\-M \-MF\fR \fIfile\fR.  The driver
  determines \fIfile\fR by removing any directory components and suffix
  from the input file, and then adding a \fI.deps\fR suffix.
! .IP "\fB\-MMD\fR" 4
  .IX Item "-MMD"
  Like \fB\-MD\fR but does not mention imported modules from the D standard
  library package directories.
! .IP "\fB\-X\fR" 4
  .IX Item "-X"
  Output information describing the contents of all source files being
! compiled in \s-1JSON\s0 format to a file.  The driver determines \fIfile\fR by
  removing any directory components and suffix from the input file, and then
  adding a \fI.json\fR suffix.
  .IP "\fB\-Xf\fR \fIfile\fR" 4
  .IX Item "-Xf file"
! Same as \fB\-X\fR, but writes all \s-1JSON\s0 contents to the specified
  \&\fIfile\fR.
! .IP "\fB\-fdoc\fR" 4
  .IX Item "-fdoc"
  Generates \f(CW\*(C`Ddoc\*(C'\fR documentation and writes it to a file.  The compiler
  determines \fIfile\fR by removing any directory components and suffix
  from the input file, and then adding a \fI.html\fR suffix.
! .IP "\fB\-fdoc\-dir=\fR\fIdir\fR" 4
  .IX Item "-fdoc-dir=dir"
  Same as \fB\-fdoc\fR, but writes documentation to directory \fIdir\fR.
  This option can be used with \fB\-fdoc\-file=\fR\fIfile\fR to
  independently set the output file and directory path.
! .IP "\fB\-fdoc\-file=\fR\fIfile\fR" 4
  .IX Item "-fdoc-file=file"
  Same as \fB\-fdoc\fR, but writes documentation to \fIfile\fR.  This
  option can be used with \fB\-fdoc\-dir=\fR\fIdir\fR to independently
  set the output file and directory path.
! .IP "\fB\-fdoc\-inc=\fR\fIfile\fR" 4
  .IX Item "-fdoc-inc=file"
  Specify \fIfile\fR as a \fIDdoc\fR macro file to be read.  Multiple
  \&\fB\-fdoc\-inc\fR options can be used, and files are read and processed
  in the same order.
! .IP "\fB\-fdump\-c++\-spec=\fR\fIfile\fR" 4
  .IX Item "-fdump-c++-spec=file"
! For D source files, generate corresponding \*(C+ declarations in \fIfile\fR.
! .IP "\fB\-fdump\-c++\-spec\-verbose\fR" 4
  .IX Item "-fdump-c++-spec-verbose"
  In conjunction with \fB\-fdump\-c++\-spec=\fR above, add comments for ignored
! declarations in the generated \*(C+ header.
! .IP "\fB\-fsave\-mixins=\fR\fIfile\fR" 4
  .IX Item "-fsave-mixins=file"
  Generates code expanded from D \f(CW\*(C`mixin\*(C'\fR statements and writes the
  processed sources to \fIfile\fR.  This is useful to debug errors in compilation
  and provides source for debuggers to show when requested.
! .SS "Warnings"
  .IX Subsection "Warnings"
  Warnings are diagnostic messages that report constructions that
  are not inherently erroneous but that are risky or suggest there
  is likely to be a bug in the program.  Unless \fB\-Werror\fR is
  specified, they do not prevent compilation of the program.
! .IP "\fB\-Wall\fR" 4
  .IX Item "-Wall"
  Turns on all warnings messages.  Warnings are not a defined part of
  the D language, and all constructs for which this may generate a
  warning message are valid code.
! .IP "\fB\-Walloca\fR" 4
  .IX Item "-Walloca"
! This option warns on all uses of \*(L"alloca\*(R" in the source.
! .IP "\fB\-Walloca\-larger\-than=\fR\fIn\fR" 4
  .IX Item "-Walloca-larger-than=n"
  Warn on unbounded uses of alloca, and on bounded uses of alloca
  whose bound can be larger than \fIn\fR bytes.
  \&\fB\-Wno\-alloca\-larger\-than\fR disables
  \&\fB\-Walloca\-larger\-than\fR warning and is equivalent to
! \&\fB\-Walloca\-larger\-than=\fR\fI\s-1SIZE_MAX\s0\fR or larger.
! .IP "\fB\-Wno\-builtin\-declaration\-mismatch\fR" 4
  .IX Item "-Wno-builtin-declaration-mismatch"
! Warn if a built-in function is declared with an incompatible signature.
! .IP "\fB\-Wcast\-result\fR" 4
  .IX Item "-Wcast-result"
  Warn about casts that will produce a null or zero result.  Currently
! this is only done for casting between an imaginary and non-imaginary
! data type, or casting between a D and \*(C+ class.
! .IP "\fB\-Wno\-deprecated\fR" 4
  .IX Item "-Wno-deprecated"
  Do not warn about usage of deprecated features and symbols with
  \&\f(CW\*(C`deprecated\*(C'\fR attributes.
! .IP "\fB\-Werror\fR" 4
  .IX Item "-Werror"
  Turns all warnings into errors.
! .IP "\fB\-Wextra\fR" 4
  .IX Item "-Wextra"
  This enables some extra warning flags that are not enabled by
  \&\fB\-Wall\fR.
--- 498,591 ----
  .IX Item "-MQ target"
  Same as \fB\-MT\fR, but it quotes any characters which are special to
  \&\fBmake\fR.
! .IP \fB\-MD\fR 4
  .IX Item "-MD"
  This option is equivalent to \fB\-M \-MF\fR \fIfile\fR.  The driver
  determines \fIfile\fR by removing any directory components and suffix
  from the input file, and then adding a \fI.deps\fR suffix.
! .IP \fB\-MMD\fR 4
  .IX Item "-MMD"
  Like \fB\-MD\fR but does not mention imported modules from the D standard
  library package directories.
! .IP \fB\-X\fR 4
  .IX Item "-X"
  Output information describing the contents of all source files being
! compiled in JSON format to a file.  The driver determines \fIfile\fR by
  removing any directory components and suffix from the input file, and then
  adding a \fI.json\fR suffix.
  .IP "\fB\-Xf\fR \fIfile\fR" 4
  .IX Item "-Xf file"
! Same as \fB\-X\fR, but writes all JSON contents to the specified
  \&\fIfile\fR.
! .IP \fB\-fdoc\fR 4
  .IX Item "-fdoc"
  Generates \f(CW\*(C`Ddoc\*(C'\fR documentation and writes it to a file.  The compiler
  determines \fIfile\fR by removing any directory components and suffix
  from the input file, and then adding a \fI.html\fR suffix.
! .IP \fB\-fdoc\-dir=\fR\fIdir\fR 4
  .IX Item "-fdoc-dir=dir"
  Same as \fB\-fdoc\fR, but writes documentation to directory \fIdir\fR.
  This option can be used with \fB\-fdoc\-file=\fR\fIfile\fR to
  independently set the output file and directory path.
! .IP \fB\-fdoc\-file=\fR\fIfile\fR 4
  .IX Item "-fdoc-file=file"
  Same as \fB\-fdoc\fR, but writes documentation to \fIfile\fR.  This
  option can be used with \fB\-fdoc\-dir=\fR\fIdir\fR to independently
  set the output file and directory path.
! .IP \fB\-fdoc\-inc=\fR\fIfile\fR 4
  .IX Item "-fdoc-inc=file"
  Specify \fIfile\fR as a \fIDdoc\fR macro file to be read.  Multiple
  \&\fB\-fdoc\-inc\fR options can be used, and files are read and processed
  in the same order.
! .IP \fB\-fdump\-c++\-spec=\fR\fIfile\fR 4
  .IX Item "-fdump-c++-spec=file"
! For D source files, generate corresponding C++ declarations in \fIfile\fR.
! .IP \fB\-fdump\-c++\-spec\-verbose\fR 4
  .IX Item "-fdump-c++-spec-verbose"
  In conjunction with \fB\-fdump\-c++\-spec=\fR above, add comments for ignored
! declarations in the generated C++ header.
! .IP \fB\-fsave\-mixins=\fR\fIfile\fR 4
  .IX Item "-fsave-mixins=file"
  Generates code expanded from D \f(CW\*(C`mixin\*(C'\fR statements and writes the
  processed sources to \fIfile\fR.  This is useful to debug errors in compilation
  and provides source for debuggers to show when requested.
! .SS Warnings
  .IX Subsection "Warnings"
  Warnings are diagnostic messages that report constructions that
  are not inherently erroneous but that are risky or suggest there
  is likely to be a bug in the program.  Unless \fB\-Werror\fR is
  specified, they do not prevent compilation of the program.
! .IP \fB\-Wall\fR 4
  .IX Item "-Wall"
  Turns on all warnings messages.  Warnings are not a defined part of
  the D language, and all constructs for which this may generate a
  warning message are valid code.
! .IP \fB\-Walloca\fR 4
  .IX Item "-Walloca"
! This option warns on all uses of "alloca" in the source.
! .IP \fB\-Walloca\-larger\-than=\fR\fIn\fR 4
  .IX Item "-Walloca-larger-than=n"
  Warn on unbounded uses of alloca, and on bounded uses of alloca
  whose bound can be larger than \fIn\fR bytes.
  \&\fB\-Wno\-alloca\-larger\-than\fR disables
  \&\fB\-Walloca\-larger\-than\fR warning and is equivalent to
! \&\fB\-Walloca\-larger\-than=\fR\fISIZE_MAX\fR or larger.
! .IP \fB\-Wno\-builtin\-declaration\-mismatch\fR 4
  .IX Item "-Wno-builtin-declaration-mismatch"
! Warn if a built\-in function is declared with an incompatible signature.
! .IP \fB\-Wcast\-result\fR 4
  .IX Item "-Wcast-result"
  Warn about casts that will produce a null or zero result.  Currently
! this is only done for casting between an imaginary and non\-imaginary
! data type, or casting between a D and C++ class.
! .IP \fB\-Wno\-deprecated\fR 4
  .IX Item "-Wno-deprecated"
  Do not warn about usage of deprecated features and symbols with
  \&\f(CW\*(C`deprecated\*(C'\fR attributes.
! .IP \fB\-Werror\fR 4
  .IX Item "-Werror"
  Turns all warnings into errors.
! .IP \fB\-Wextra\fR 4
  .IX Item "-Wextra"
  This enables some extra warning flags that are not enabled by
  \&\fB\-Wall\fR.
*************** This enables some extra warning flags th
*** 665,731 ****
  \&\-Wcast\-result
  \&\-Wmismatched\-special\-enum
  \&\-Wunknown\-pragmas\fR
! .IP "\fB\-Wmismatched\-special\-enum\fR" 4
  .IX Item "-Wmismatched-special-enum"
  Warn when an enum the compiler recognizes as special is declared with a
! different size to the built-in type it is representing.
! .IP "\fB\-Wspeculative\fR" 4
  .IX Item "-Wspeculative"
  List all error messages from speculative compiles, such as
  \&\f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR.  This option does not report
  messages as warnings, and these messages therefore never become
  errors when the \fB\-Werror\fR option is also used.
! .IP "\fB\-Wunknown\-pragmas\fR" 4
  .IX Item "-Wunknown-pragmas"
! Warn when a \f(CW\*(C`pragma()\*(C'\fR is encountered that is not understood by
  \&\fBgdc\fR.  This differs from \fB\-fignore\-unknown\-pragmas\fR
  where a pragma that is part of the D language, but not implemented by
! the compiler, won't get reported.
! .IP "\fB\-Wno\-varargs\fR" 4
  .IX Item "-Wno-varargs"
  Do not warn upon questionable usage of the macros used to handle variable
  arguments like \f(CW\*(C`va_start\*(C'\fR.
! .IP "\fB\-fno\-ignore\-unknown\-pragmas\fR" 4
  .IX Item "-fno-ignore-unknown-pragmas"
! Do not recognize unsupported pragmas.  Any \f(CW\*(C`pragma()\*(C'\fR encountered that is
  not part of the D language will result in an error.  This option is now
  deprecated and will be removed in a future release.
! .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
  \&\fBgdc\fR bails out rather than attempting to continue processing the
  source code.  If \fIn\fR is 0 (the default), there is no limit on the
  number of error messages produced.
! .IP "\fB\-fsyntax\-only\fR" 4
  .IX Item "-fsyntax-only"
  Check the code for syntax errors, but do not actually compile it.  This
  can be used in conjunction with \fB\-fdoc\fR or \fB\-H\fR to generate
! files for each module present on the command-line, but no other output
  file.
! .IP "\fB\-ftransition=\fR\fIid\fR" 4
  .IX Item "-ftransition=id"
  Report additional information about D language changes identified by
  \&\fIid\fR.  The following values are supported:
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
  List information on all D language transitions.
! .IP "\fBcomplex\fR" 4
  .IX Item "complex"
  List all usages of complex or imaginary types.
! .IP "\fBfield\fR" 4
  .IX Item "field"
! List all non-mutable fields which occupy an object instance.
! .IP "\fBin\fR" 4
  .IX Item "in"
  List all usages of \f(CW\*(C`in\*(C'\fR on parameter.
! .IP "\fBnogc\fR" 4
  .IX Item "nogc"
! List all hidden \s-1GC\s0 allocations.
! .IP "\fBtemplates\fR" 4
  .IX Item "templates"
  List statistics on template instantiations.
! .IP "\fBtls\fR" 4
  .IX Item "tls"
  List all variables going into thread local storage.
  .RE
--- 594,660 ----
  \&\-Wcast\-result
  \&\-Wmismatched\-special\-enum
  \&\-Wunknown\-pragmas\fR
! .IP \fB\-Wmismatched\-special\-enum\fR 4
  .IX Item "-Wmismatched-special-enum"
  Warn when an enum the compiler recognizes as special is declared with a
! different size to the built\-in type it is representing.
! .IP \fB\-Wspeculative\fR 4
  .IX Item "-Wspeculative"
  List all error messages from speculative compiles, such as
  \&\f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR.  This option does not report
  messages as warnings, and these messages therefore never become
  errors when the \fB\-Werror\fR option is also used.
! .IP \fB\-Wunknown\-pragmas\fR 4
  .IX Item "-Wunknown-pragmas"
! Warn when a \f(CWpragma()\fR is encountered that is not understood by
  \&\fBgdc\fR.  This differs from \fB\-fignore\-unknown\-pragmas\fR
  where a pragma that is part of the D language, but not implemented by
! the compiler, won\*(Aqt get reported.
! .IP \fB\-Wno\-varargs\fR 4
  .IX Item "-Wno-varargs"
  Do not warn upon questionable usage of the macros used to handle variable
  arguments like \f(CW\*(C`va_start\*(C'\fR.
! .IP \fB\-fno\-ignore\-unknown\-pragmas\fR 4
  .IX Item "-fno-ignore-unknown-pragmas"
! Do not recognize unsupported pragmas.  Any \f(CWpragma()\fR encountered that is
  not part of the D language will result in an error.  This option is now
  deprecated and will be removed in a future release.
! .IP \fB\-fmax\-errors=\fR\fIn\fR 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
  \&\fBgdc\fR bails out rather than attempting to continue processing the
  source code.  If \fIn\fR is 0 (the default), there is no limit on the
  number of error messages produced.
! .IP \fB\-fsyntax\-only\fR 4
  .IX Item "-fsyntax-only"
  Check the code for syntax errors, but do not actually compile it.  This
  can be used in conjunction with \fB\-fdoc\fR or \fB\-H\fR to generate
! files for each module present on the command\-line, but no other output
  file.
! .IP \fB\-ftransition=\fR\fIid\fR 4
  .IX Item "-ftransition=id"
  Report additional information about D language changes identified by
  \&\fIid\fR.  The following values are supported:
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
  List information on all D language transitions.
! .IP \fBcomplex\fR 4
  .IX Item "complex"
  List all usages of complex or imaginary types.
! .IP \fBfield\fR 4
  .IX Item "field"
! List all non\-mutable fields which occupy an object instance.
! .IP \fBin\fR 4
  .IX Item "in"
  List all usages of \f(CW\*(C`in\*(C'\fR on parameter.
! .IP \fBnogc\fR 4
  .IX Item "nogc"
! List all hidden GC allocations.
! .IP \fBtemplates\fR 4
  .IX Item "templates"
  List statistics on template instantiations.
! .IP \fBtls\fR 4
  .IX Item "tls"
  List all variables going into thread local storage.
  .RE
*************** List all variables going into thread loc
*** 736,765 ****
  These options come into play when the compiler links object files into an
  executable output file.  They are meaningless if the compiler is not doing
  a link step.
! .IP "\fB\-defaultlib=\fR\fIlibname\fR" 4
  .IX Item "-defaultlib=libname"
  Specify the library to use instead of libphobos when linking.  Options
  specifying the linkage of libphobos, such as \fB\-static\-libphobos\fR
  or \fB\-shared\-libphobos\fR, are ignored.
! .IP "\fB\-debuglib=\fR\fIlibname\fR" 4
  .IX Item "-debuglib=libname"
  Specify the debug library to use instead of libphobos when linking.
  This option has no effect unless the \fB\-g\fR option was also given
  on the command line.  Options specifying the linkage of libphobos, such
  as \fB\-static\-libphobos\fR or \fB\-shared\-libphobos\fR, are ignored.
! .IP "\fB\-nophoboslib\fR" 4
  .IX Item "-nophoboslib"
  Do not use the Phobos or D runtime library when linking.  Options specifying
  the linkage of libphobos, such as \fB\-static\-libphobos\fR or
  \&\fB\-shared\-libphobos\fR, are ignored.  The standard system libraries are
  used normally, unless \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR is used.
! .IP "\fB\-shared\-libphobos\fR" 4
  .IX Item "-shared-libphobos"
  On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a
  shared and a static library, this option forces the use of the shared
  version.  If no shared version was built when the compiler was configured,
  this option has no effect.
! .IP "\fB\-static\-libphobos\fR" 4
  .IX Item "-static-libphobos"
  On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a
  shared and a static library, this option forces the use of the static
--- 665,694 ----
  These options come into play when the compiler links object files into an
  executable output file.  They are meaningless if the compiler is not doing
  a link step.
! .IP \fB\-defaultlib=\fR\fIlibname\fR 4
  .IX Item "-defaultlib=libname"
  Specify the library to use instead of libphobos when linking.  Options
  specifying the linkage of libphobos, such as \fB\-static\-libphobos\fR
  or \fB\-shared\-libphobos\fR, are ignored.
! .IP \fB\-debuglib=\fR\fIlibname\fR 4
  .IX Item "-debuglib=libname"
  Specify the debug library to use instead of libphobos when linking.
  This option has no effect unless the \fB\-g\fR option was also given
  on the command line.  Options specifying the linkage of libphobos, such
  as \fB\-static\-libphobos\fR or \fB\-shared\-libphobos\fR, are ignored.
! .IP \fB\-nophoboslib\fR 4
  .IX Item "-nophoboslib"
  Do not use the Phobos or D runtime library when linking.  Options specifying
  the linkage of libphobos, such as \fB\-static\-libphobos\fR or
  \&\fB\-shared\-libphobos\fR, are ignored.  The standard system libraries are
  used normally, unless \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR is used.
! .IP \fB\-shared\-libphobos\fR 4
  .IX Item "-shared-libphobos"
  On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a
  shared and a static library, this option forces the use of the shared
  version.  If no shared version was built when the compiler was configured,
  this option has no effect.
! .IP \fB\-static\-libphobos\fR 4
  .IX Item "-static-libphobos"
  On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a
  shared and a static library, this option forces the use of the static
*************** version.  If no static version was built
*** 767,779 ****
  this option has no effect.
  .SS "Developer Options"
  .IX Subsection "Developer Options"
! This section describes command-line options that are primarily of
  interest to developers or language tooling.
! .IP "\fB\-fdump\-d\-original\fR" 4
  .IX Item "-fdump-d-original"
! Output the internal front-end \s-1AST\s0 after the \f(CW\*(C`semantic3\*(C'\fR stage.
! This option is only useful for debugging the \s-1GNU D\s0 compiler itself.
! .IP "\fB\-v\fR" 4
  .IX Item "-v"
  Dump information about the compiler language processing stages as the source
  program is being compiled.  This includes listing all modules that are
--- 696,708 ----
  this option has no effect.
  .SS "Developer Options"
  .IX Subsection "Developer Options"
! This section describes command\-line options that are primarily of
  interest to developers or language tooling.
! .IP \fB\-fdump\-d\-original\fR 4
  .IX Item "-fdump-d-original"
! Output the internal front\-end AST after the \f(CW\*(C`semantic3\*(C'\fR stage.
! This option is only useful for debugging the GNU D compiler itself.
! .IP \fB\-v\fR 4
  .IX Item "-v"
  Dump information about the compiler language processing stages as the source
  program is being compiled.  This includes listing all modules that are
*************** processed through the \f(CW\*(C`parse\*(
*** 782,796 ****
  and all \f(CW\*(C`function\*(C'\fR bodies that are being compiled.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1)
  and the Info entries for \fIgdc\fR and \fIgcc\fR.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2006\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 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
! man page \fIgfdl\fR\|(7).
--- 711,725 ----
  and all \f(CW\*(C`function\*(C'\fR bodies that are being compiled.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1)
  and the Info entries for \fIgdc\fR and \fIgcc\fR.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2006\-2024 Free Software Foundation, Inc.
  .PP
  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
! man page \fBgfdl\fR\|(7).
diff -Nrcpad gcc-14.3.0/gcc/doc/gdc.info gcc-14.3.0-RC-20260619/gcc/doc/gdc.info
*** gcc-14.3.0/gcc/doc/gdc.info	Fri May 23 11:28:10 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gdc.info	Fri Jun 19 07:14:56 2026
***************
*** 1,6 ****
! This is gdc.info, produced by makeinfo version 6.5 from gdc.texi.
  
! Copyright (C) 2006-2024 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
--- 1,6 ----
! This is gdc.info, produced by makeinfo version 7.1 from gdc.texi.
  
! Copyright © 2006-2024 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
*************** START-INFO-DIR-ENTRY
*** 14,20 ****
  END-INFO-DIR-ENTRY
  
  
!    Copyright (C) 2006-2024 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
--- 14,20 ----
  END-INFO-DIR-ENTRY
  
  
!    Copyright © 2006-2024 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
*************** File: gdc.info,  Node: Top,  Next: Invok
*** 29,37 ****
  Introduction
  ************
  
! This manual describes how to use 'gdc', the GNU compiler for the D
  programming language.  This manual is specifically about how to invoke
! 'gdc', as well as its features and incompatibilities.  For more
  information about the D programming language in general, including
  language specifications and standard package documentation, see
  <https://dlang.org/>.
--- 29,37 ----
  Introduction
  ************
  
! This manual describes how to use ‘gdc’, the GNU compiler for the D
  programming language.  This manual is specifically about how to invoke
! ‘gdc’, as well as its features and incompatibilities.  For more
  information about the D programming language in general, including
  language specifications and standard package documentation, see
  <https://dlang.org/>.
*************** File: gdc.info,  Node: Invoking gdc,  Ne
*** 52,60 ****
  1 Invoking gdc
  **************
  
! The 'gdc' command is the GNU compiler for the D language and supports
! many of the same options as 'gcc'.  *Note Option Summary: (gcc)Option
! Summary.  This manual only documents the options specific to 'gdc'.
  
  * Menu:
  
--- 52,60 ----
  1 Invoking gdc
  **************
  
! The ‘gdc’ command is the GNU compiler for the D language and supports
! many of the same options as ‘gcc’.  *Note Option Summary: (gcc)Option
! Summary.  This manual only documents the options specific to ‘gdc’.
  
  * Menu:
  
*************** For any given input file, the file name
*** 77,105 ****
  compilation is done.  The following kinds of input file names are
  supported:
  
! 'FILE.d'
       D source files.
! 'FILE.dd'
       Ddoc source files.
! 'FILE.di'
       D interface files.
  
!    You can specify more than one input file on the 'gdc' command line,
  each being compiled separately in the compilation process.  If you
! specify a '-o FILE' option, all the input files are compiled together,
  producing a single output file, named FILE.  This is allowed even when
! using '-S' or '-c'.
  
     A D interface file contains only what an import of the module needs,
  rather than the whole implementation of that module.  They can be
! created by 'gdc' from a D source file by using the '-H' option.  When
  the compiler resolves an import declaration, it searches for matching
! '.di' files first, then for '.d'.
  
     A Ddoc source file contains code in the D macro processor language.
  It is primarily designed for use in producing user documentation from
  embedded comments, with a slight affinity towards HTML generation.  If a
! '.d' source file starts with the string 'Ddoc' then it is treated as
  general purpose documentation, not as a D source file.
  
  
--- 77,105 ----
  compilation is done.  The following kinds of input file names are
  supported:
  
! ‘FILE.d’
       D source files.
! ‘FILE.dd’
       Ddoc source files.
! ‘FILE.di’
       D interface files.
  
!    You can specify more than one input file on the ‘gdc’ command line,
  each being compiled separately in the compilation process.  If you
! specify a ‘-o FILE’ option, all the input files are compiled together,
  producing a single output file, named FILE.  This is allowed even when
! using ‘-S’ or ‘-c’.
  
     A D interface file contains only what an import of the module needs,
  rather than the whole implementation of that module.  They can be
! created by ‘gdc’ from a D source file by using the ‘-H’ option.  When
  the compiler resolves an import declaration, it searches for matching
! ‘.di’ files first, then for ‘.d’.
  
     A Ddoc source file contains code in the D macro processor language.
  It is primarily designed for use in producing user documentation from
  embedded comments, with a slight affinity towards HTML generation.  If a
! ‘.d’ source file starts with the string ‘Ddoc’ then it is treated as
  general purpose documentation, not as a D source file.
  
  
*************** File: gdc.info,  Node: Runtime Options,
*** 109,174 ****
  ===================
  
  These options affect the runtime behavior of programs compiled with
! 'gdc'.
  
! '-fall-instantiations'
       Generate code for all template instantiations.  The default
       template emission strategy is to not generate code for declarations
       that were either instantiated speculatively, such as from
!      '__traits(compiles, ...)', or that come from an imported module not
       being compiled.
  
! '-fno-assert'
!      Turn off code generation for 'assert' contracts.
  
! '-fno-bounds-check'
       Turns off array bounds checking for all functions, which can
       improve performance for code that uses arrays extensively.  Note
       that this can result in unpredictable behavior if the code in
       question actually does violate array bounds constraints.  It is
       safe to use this option if you are sure that your code never throws
!      a 'RangeError'.
  
! '-fbounds-check=VALUE'
!      An alternative to '-fbounds-check' that allows more control as to
       where bounds checking is turned on or off.  The following values
       are supported:
  
!      'on'
            Turns on array bounds checking for all functions.
!      'safeonly'
!           Turns on array bounds checking only for '@safe' functions.
!      'off'
            Turns off array bounds checking completely.
  
! '-fno-builtin'
       Don't recognize built-in functions unless they begin with the
!      prefix '__builtin_'.  By default, the compiler will recognize when
!      a function in the 'core.stdc' package is a built-in function.
  
! '-fcheckaction=VALUE'
       This option controls what code is generated on an assertion, bounds
       check, or final switch failure.  The following values are
       supported:
  
!      'context'
!           Throw an 'AssertError' with extra context information.
!      'halt'
            Halt the program execution.
!      'throw'
!           Throw an 'AssertError' (the default).
  
! '-fdebug'
! '-fdebug=VALUE'
!      Turn on compilation of conditional 'debug' code into the program.
!      The '-fdebug' option itself sets the debug level to '1', while
!      '-fdebug=' enables 'debug' code that are identified by any of the
       following values:
  
!      'ident'
!           Turns on compilation of any 'debug' code identified by IDENT.
  
! '-fno-druntime'
       Implements <https://dlang.org/spec/betterc.html>.  Assumes that
       compilation targets an environment without a D runtime library.
  
--- 109,174 ----
  ===================
  
  These options affect the runtime behavior of programs compiled with
! ‘gdc’.
  
! ‘-fall-instantiations’
       Generate code for all template instantiations.  The default
       template emission strategy is to not generate code for declarations
       that were either instantiated speculatively, such as from
!      ‘__traits(compiles, ...)’, or that come from an imported module not
       being compiled.
  
! ‘-fno-assert’
!      Turn off code generation for ‘assert’ contracts.
  
! ‘-fno-bounds-check’
       Turns off array bounds checking for all functions, which can
       improve performance for code that uses arrays extensively.  Note
       that this can result in unpredictable behavior if the code in
       question actually does violate array bounds constraints.  It is
       safe to use this option if you are sure that your code never throws
!      a ‘RangeError’.
  
! ‘-fbounds-check=VALUE’
!      An alternative to ‘-fbounds-check’ that allows more control as to
       where bounds checking is turned on or off.  The following values
       are supported:
  
!      ‘on’
            Turns on array bounds checking for all functions.
!      ‘safeonly’
!           Turns on array bounds checking only for ‘@safe’ functions.
!      ‘off’
            Turns off array bounds checking completely.
  
! ‘-fno-builtin’
       Don't recognize built-in functions unless they begin with the
!      prefix ‘__builtin_’.  By default, the compiler will recognize when
!      a function in the ‘core.stdc’ package is a built-in function.
  
! ‘-fcheckaction=VALUE’
       This option controls what code is generated on an assertion, bounds
       check, or final switch failure.  The following values are
       supported:
  
!      ‘context’
!           Throw an ‘AssertError’ with extra context information.
!      ‘halt’
            Halt the program execution.
!      ‘throw’
!           Throw an ‘AssertError’ (the default).
  
! ‘-fdebug’
! ‘-fdebug=VALUE’
!      Turn on compilation of conditional ‘debug’ code into the program.
!      The ‘-fdebug’ option itself sets the debug level to ‘1’, while
!      ‘-fdebug=’ enables ‘debug’ code that are identified by any of the
       following values:
  
!      ‘ident’
!           Turns on compilation of any ‘debug’ code identified by IDENT.
  
! ‘-fno-druntime’
       Implements <https://dlang.org/spec/betterc.html>.  Assumes that
       compilation targets an environment without a D runtime library.
  
*************** These options affect the runtime behavio
*** 176,281 ****
  
            gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti
  
! '-fextern-std=STANDARD'
       Sets the C++ name mangling compatibility to the version identified
       by STANDARD.  The following values are supported:
  
!      'c++98'
!      'c++03'
!           Sets '__traits(getTargetInfo, "cppStd")' to '199711'.
!      'c++11'
!           Sets '__traits(getTargetInfo, "cppStd")' to '201103'.
!      'c++14'
!           Sets '__traits(getTargetInfo, "cppStd")' to '201402'.
!      'c++17'
!           Sets '__traits(getTargetInfo, "cppStd")' to '201703'.  This is
            the default.
!      'c++20'
!           Sets '__traits(getTargetInfo, "cppStd")' to '202002'.
  
! '-fno-invariants'
!      Turns off code generation for class 'invariant' contracts.
  
! '-fmain'
!      Generates a default 'main()' function when compiling.  This is
       useful when unittesting a library, as it enables running the
       unittests in a library without having to manually define an
!      entry-point function.  This option does nothing when 'main' is
       already defined in user code.
  
! '-fno-moduleinfo'
!      Turns off generation of the 'ModuleInfo' and related functions that
       would become unreferenced without it, which may allow linking to
       programs not written in D. Functions that are not be generated
!      include module constructors and destructors ('static this' and
!      'static ~this'), 'unittest' code, and 'DSO' registry functions for
       dynamically linked code.
  
! '-fonly=FILENAME'
       Tells the compiler to parse and run semantic analysis on all
       modules on the command line, but only generate code for the module
       specified by FILENAME.
  
! '-fno-postconditions'
!      Turns off code generation for postcondition 'out' contracts.
  
! '-fno-preconditions'
!      Turns off code generation for precondition 'in' contracts.
  
! '-fpreview=ID'
       Turns on an upcoming D language change identified by ID.  The
       following values are supported:
  
!      'all'
            Turns on all upcoming D language features.
!      'bitfields'
            Implements bit-fields in D.
!      'dip1000'
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md>
            (Scoped pointers).
!      'dip1008'
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md>
!           (Allow exceptions in '@nogc' code).
!      'dip1021'
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md>
            (Mutable function arguments).
!      'dip25'
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md>
            (Sealed references).
!      'dtorfields'
            Turns on generation for destructing fields of partially
            constructed objects.
!      'fieldwise'
            Turns on generation of struct equality to use field-wise
            comparisons.
!      'fixaliasthis'
            Implements new lookup rules that check the current scope for
!           'alias this' before searching in upper scopes.
!      'fiximmutableconv'
            Disallows unsound immutable conversions that were formerly
            incorrectly permitted.
!      'in'
!           Implements 'in' parameters to mean 'scope const [ref]' and
            accepts rvalues.
!      'inclusiveincontracts'
!           Implements 'in' contracts of overridden methods to be a
            superset of parent contract.
!      'nosharedaccess'
            Turns off and disallows all access to shared memory objects.
!      'rvaluerefparam'
!           Implements rvalue arguments to 'ref' parameters.
!      'systemvariables'
!           Disables access to variables marked '@system' from '@safe'
            code.
  
! '-frelease'
       Turns on compiling in release mode, which means not emitting
       runtime checks for contracts and asserts.  Array bounds checking is
!      not done for '@system' and '@trusted' functions, and assertion
       failures are undefined behavior.
  
       This is equivalent to compiling with the following options:
--- 176,281 ----
  
            gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti
  
! ‘-fextern-std=STANDARD’
       Sets the C++ name mangling compatibility to the version identified
       by STANDARD.  The following values are supported:
  
!      ‘c++98’
!      ‘c++03’
!           Sets ‘__traits(getTargetInfo, "cppStd")’ to ‘199711’.
!      ‘c++11’
!           Sets ‘__traits(getTargetInfo, "cppStd")’ to ‘201103’.
!      ‘c++14’
!           Sets ‘__traits(getTargetInfo, "cppStd")’ to ‘201402’.
!      ‘c++17’
!           Sets ‘__traits(getTargetInfo, "cppStd")’ to ‘201703’.  This is
            the default.
!      ‘c++20’
!           Sets ‘__traits(getTargetInfo, "cppStd")’ to ‘202002’.
  
! ‘-fno-invariants’
!      Turns off code generation for class ‘invariant’ contracts.
  
! ‘-fmain’
!      Generates a default ‘main()’ function when compiling.  This is
       useful when unittesting a library, as it enables running the
       unittests in a library without having to manually define an
!      entry-point function.  This option does nothing when ‘main’ is
       already defined in user code.
  
! ‘-fno-moduleinfo’
!      Turns off generation of the ‘ModuleInfo’ and related functions that
       would become unreferenced without it, which may allow linking to
       programs not written in D. Functions that are not be generated
!      include module constructors and destructors (‘static this’ and
!      ‘static ~this’), ‘unittest’ code, and ‘DSO’ registry functions for
       dynamically linked code.
  
! ‘-fonly=FILENAME’
       Tells the compiler to parse and run semantic analysis on all
       modules on the command line, but only generate code for the module
       specified by FILENAME.
  
! ‘-fno-postconditions’
!      Turns off code generation for postcondition ‘out’ contracts.
  
! ‘-fno-preconditions’
!      Turns off code generation for precondition ‘in’ contracts.
  
! ‘-fpreview=ID’
       Turns on an upcoming D language change identified by ID.  The
       following values are supported:
  
!      ‘all’
            Turns on all upcoming D language features.
!      ‘bitfields’
            Implements bit-fields in D.
!      ‘dip1000’
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md>
            (Scoped pointers).
!      ‘dip1008’
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md>
!           (Allow exceptions in ‘@nogc’ code).
!      ‘dip1021’
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md>
            (Mutable function arguments).
!      ‘dip25’
            Implements
            <https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md>
            (Sealed references).
!      ‘dtorfields’
            Turns on generation for destructing fields of partially
            constructed objects.
!      ‘fieldwise’
            Turns on generation of struct equality to use field-wise
            comparisons.
!      ‘fixaliasthis’
            Implements new lookup rules that check the current scope for
!           ‘alias this’ before searching in upper scopes.
!      ‘fiximmutableconv’
            Disallows unsound immutable conversions that were formerly
            incorrectly permitted.
!      ‘in’
!           Implements ‘in’ parameters to mean ‘scope const [ref]’ and
            accepts rvalues.
!      ‘inclusiveincontracts’
!           Implements ‘in’ contracts of overridden methods to be a
            superset of parent contract.
!      ‘nosharedaccess’
            Turns off and disallows all access to shared memory objects.
!      ‘rvaluerefparam’
!           Implements rvalue arguments to ‘ref’ parameters.
!      ‘systemvariables’
!           Disables access to variables marked ‘@system’ from ‘@safe’
            code.
  
! ‘-frelease’
       Turns on compiling in release mode, which means not emitting
       runtime checks for contracts and asserts.  Array bounds checking is
!      not done for ‘@system’ and ‘@trusted’ functions, and assertion
       failures are undefined behavior.
  
       This is equivalent to compiling with the following options:
*************** These options affect the runtime behavio
*** 283,332 ****
            gdc -fno-assert -fbounds-check=safe -fno-invariants \
                -fno-postconditions -fno-preconditions -fno-switch-errors
  
! '-frevert='
       Turns off a D language feature identified by ID.  The following
       values are supported:
  
!      'all'
            Turns off all revertable D language features.
!      'dip1000'
            Reverts
            <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md>
            (Scoped pointers).
!      'dip25'
            Reverts
            <https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md>
            (Sealed references).
!      'dtorfields'
            Turns off generation for destructing fields of partially
            constructed objects.
!      'intpromote'
!           Turns off C-style integral promotion for unary '+', '-' and
!           '~' expressions.
  
! '-fno-rtti'
       Turns off generation of run-time type information for all user
       defined types.  Any code that uses features of the language that
       require access to this information will result in an error.
  
! '-fno-switch-errors'
       This option controls what code is generated when no case is matched
!      in a 'final switch' statement.  The default run time behavior is to
!      throw a 'SwitchError'.  Turning off '-fswitch-errors' means that
       instead the execution of the program is immediately halted.
  
! '-funittest'
!      Turns on compilation of 'unittest' code, and turns on the
!      'version(unittest)' identifier.  This implies '-fassert'.
  
! '-fversion=VALUE'
!      Turns on compilation of conditional 'version' code into the program
       identified by any of the following values:
  
!      'ident'
!           Turns on compilation of 'version' code identified by IDENT.
  
! '-fno-weak-templates'
       Turns off emission of declarations that can be defined in multiple
       objects as weak symbols.  The default is to emit all public symbols
       as weak, unless the target lacks support for weak symbols.
--- 283,332 ----
            gdc -fno-assert -fbounds-check=safe -fno-invariants \
                -fno-postconditions -fno-preconditions -fno-switch-errors
  
! ‘-frevert=’
       Turns off a D language feature identified by ID.  The following
       values are supported:
  
!      ‘all’
            Turns off all revertable D language features.
!      ‘dip1000’
            Reverts
            <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md>
            (Scoped pointers).
!      ‘dip25’
            Reverts
            <https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md>
            (Sealed references).
!      ‘dtorfields’
            Turns off generation for destructing fields of partially
            constructed objects.
!      ‘intpromote’
!           Turns off C-style integral promotion for unary ‘+’, ‘-’ and
!           ‘~’ expressions.
  
! ‘-fno-rtti’
       Turns off generation of run-time type information for all user
       defined types.  Any code that uses features of the language that
       require access to this information will result in an error.
  
! ‘-fno-switch-errors’
       This option controls what code is generated when no case is matched
!      in a ‘final switch’ statement.  The default run time behavior is to
!      throw a ‘SwitchError’.  Turning off ‘-fswitch-errors’ means that
       instead the execution of the program is immediately halted.
  
! ‘-funittest’
!      Turns on compilation of ‘unittest’ code, and turns on the
!      ‘version(unittest)’ identifier.  This implies ‘-fassert’.
  
! ‘-fversion=VALUE’
!      Turns on compilation of conditional ‘version’ code into the program
       identified by any of the following values:
  
!      ‘ident’
!           Turns on compilation of ‘version’ code identified by IDENT.
  
! ‘-fno-weak-templates’
       Turns off emission of declarations that can be defined in multiple
       objects as weak symbols.  The default is to emit all public symbols
       as weak, unless the target lacks support for weak symbols.
*************** File: gdc.info,  Node: Directory Options
*** 342,366 ****
  These options specify directories to search for files, libraries, and
  other parts of the compiler:
  
! '-IDIR'
       Specify a directory to use when searching for imported modules at
!      compile time.  Multiple '-I' options can be used, and the paths are
       searched in the same order.
  
! '-JDIR'
       Specify a directory to use when searching for files in string
       imports at compile time.  This switch is required in order to use
!      'import(file)' expressions.  Multiple '-J' options can be used, and
       the paths are searched in the same order.
  
! '-LDIR'
!      When linking, specify a library search directory, as with 'gcc'.
  
! '-BDIR'
       This option specifies where to find the executables, libraries,
!      source files, and data files of the compiler itself, as with 'gcc'.
  
! '-fmodule-file=MODULE=SPEC'
       This option manipulates file paths of imported modules, such that
       if an imported module matches all or the leftmost part of MODULE,
       the file path in SPEC is used as the location to search for D
--- 342,366 ----
  These options specify directories to search for files, libraries, and
  other parts of the compiler:
  
! ‘-IDIR’
       Specify a directory to use when searching for imported modules at
!      compile time.  Multiple ‘-I’ options can be used, and the paths are
       searched in the same order.
  
! ‘-JDIR’
       Specify a directory to use when searching for files in string
       imports at compile time.  This switch is required in order to use
!      ‘import(file)’ expressions.  Multiple ‘-J’ options can be used, and
       the paths are searched in the same order.
  
! ‘-LDIR’
!      When linking, specify a library search directory, as with ‘gcc’.
  
! ‘-BDIR’
       This option specifies where to find the executables, libraries,
!      source files, and data files of the compiler itself, as with ‘gcc’.
  
! ‘-fmodule-file=MODULE=SPEC’
       This option manipulates file paths of imported modules, such that
       if an imported module matches all or the leftmost part of MODULE,
       the file path in SPEC is used as the location to search for D
*************** other parts of the compiler:
*** 379,397 ****
            import C.D.E;   // Matches C, searches for bar/D/E.d
            import A.B.C;   // No match, searches for A/B/C.d
  
! '-imultilib DIR'
       Use DIR as a subdirectory of the gcc directory containing
       target-specific D sources and interfaces.
  
! '-iprefix PREFIX'
       Specify PREFIX as the prefix for the gcc directory containing
       target-specific D sources and interfaces.  If the PREFIX represents
!      a directory, you should include the final ''/''.
  
! '-nostdinc'
       Do not search the standard system directories for D source and
       interface files.  Only the directories that have been specified
!      with '-I' options (and the directory of the current file, if
       appropriate) are searched.
  
  
--- 379,397 ----
            import C.D.E;   // Matches C, searches for bar/D/E.d
            import A.B.C;   // No match, searches for A/B/C.d
  
! ‘-imultilib DIR’
       Use DIR as a subdirectory of the gcc directory containing
       target-specific D sources and interfaces.
  
! ‘-iprefix PREFIX’
       Specify PREFIX as the prefix for the gcc directory containing
       target-specific D sources and interfaces.  If the PREFIX represents
!      a directory, you should include the final ‘'/'’.
  
! ‘-nostdinc’
       Do not search the standard system directories for D source and
       interface files.  Only the directories that have been specified
!      with ‘-I’ options (and the directory of the current file, if
       appropriate) are searched.
  
  
*************** File: gdc.info,  Node: Code Generation,
*** 400,505 ****
  1.4 Code Generation
  ===================
  
! In addition to the many 'gcc' options controlling code generation, 'gdc'
  has several options specific to itself.
  
! '-H'
       Generates D interface files for all modules being compiled.  The
       compiler determines the output file based on the name of the input
       file, removes any directory components and suffix, and applies the
!      '.di' suffix.
  
! '-Hd DIR'
!      Same as '-H', but writes interface files to directory DIR.  This
!      option can be used with '-Hf FILE' to independently set the output
       file and directory path.
  
! '-Hf FILE'
!      Same as '-H' but writes interface files to FILE.  This option can
!      be used with '-Hd DIR' to independently set the output file and
       directory path.
  
! '-M'
       Output the module dependencies of all source files being compiled
!      in a format suitable for 'make'.  The compiler outputs one 'make'
       rule containing the object file name for that source file, a colon,
       and the names of all imported files.
  
! '-MM'
!      Like '-M' but does not mention imported modules from the D standard
       library package directories.
  
! '-MF FILE'
!      When used with '-M' or '-MM', specifies a FILE to write the
!      dependencies to.  When used with the driver options '-MD' or
!      '-MMD', '-MF' overrides the default dependency output file.
  
! '-MG'
!      This option is for compatibility with 'gcc', and is ignored by the
       compiler.
  
! '-MP'
       Outputs a phony target for each dependency other than the modules
       being compiled, causing each to depend on nothing.
  
! '-MT TARGET'
       Change the TARGET of the rule emitted by dependency generation to
       be exactly the string you specify.  If you want multiple targets,
!      you can specify them as a single argument to '-MT', or use multiple
!      '-MT' options.
  
! '-MQ TARGET'
!      Same as '-MT', but it quotes any characters which are special to
!      'make'.
  
! '-MD'
!      This option is equivalent to '-M -MF FILE'.  The driver determines
       FILE by removing any directory components and suffix from the input
!      file, and then adding a '.deps' suffix.
  
! '-MMD'
!      Like '-MD' but does not mention imported modules from the D
       standard library package directories.
  
! '-X'
       Output information describing the contents of all source files
       being compiled in JSON format to a file.  The driver determines
       FILE by removing any directory components and suffix from the input
!      file, and then adding a '.json' suffix.
  
! '-Xf FILE'
!      Same as '-X', but writes all JSON contents to the specified FILE.
  
! '-fdoc'
!      Generates 'Ddoc' documentation and writes it to a file.  The
       compiler determines FILE by removing any directory components and
!      suffix from the input file, and then adding a '.html' suffix.
  
! '-fdoc-dir=DIR'
!      Same as '-fdoc', but writes documentation to directory DIR.  This
!      option can be used with '-fdoc-file=FILE' to independently set the
       output file and directory path.
  
! '-fdoc-file=FILE'
!      Same as '-fdoc', but writes documentation to FILE.  This option can
!      be used with '-fdoc-dir=DIR' to independently set the output file
       and directory path.
  
! '-fdoc-inc=FILE'
!      Specify FILE as a DDOC macro file to be read.  Multiple '-fdoc-inc'
       options can be used, and files are read and processed in the same
       order.
  
! '-fdump-c++-spec=FILE'
       For D source files, generate corresponding C++ declarations in
       FILE.
  
! '-fdump-c++-spec-verbose'
!      In conjunction with '-fdump-c++-spec=' above, add comments for
       ignored declarations in the generated C++ header.
  
! '-fsave-mixins=FILE'
!      Generates code expanded from D 'mixin' statements and writes the
       processed sources to FILE.  This is useful to debug errors in
       compilation and provides source for debuggers to show when
       requested.
--- 400,505 ----
  1.4 Code Generation
  ===================
  
! In addition to the many ‘gcc’ options controlling code generation, ‘gdc’
  has several options specific to itself.
  
! ‘-H’
       Generates D interface files for all modules being compiled.  The
       compiler determines the output file based on the name of the input
       file, removes any directory components and suffix, and applies the
!      ‘.di’ suffix.
  
! ‘-Hd DIR’
!      Same as ‘-H’, but writes interface files to directory DIR.  This
!      option can be used with ‘-Hf FILE’ to independently set the output
       file and directory path.
  
! ‘-Hf FILE’
!      Same as ‘-H’ but writes interface files to FILE.  This option can
!      be used with ‘-Hd DIR’ to independently set the output file and
       directory path.
  
! ‘-M’
       Output the module dependencies of all source files being compiled
!      in a format suitable for ‘make’.  The compiler outputs one ‘make’
       rule containing the object file name for that source file, a colon,
       and the names of all imported files.
  
! ‘-MM’
!      Like ‘-M’ but does not mention imported modules from the D standard
       library package directories.
  
! ‘-MF FILE’
!      When used with ‘-M’ or ‘-MM’, specifies a FILE to write the
!      dependencies to.  When used with the driver options ‘-MD’ or
!      ‘-MMD’, ‘-MF’ overrides the default dependency output file.
  
! ‘-MG’
!      This option is for compatibility with ‘gcc’, and is ignored by the
       compiler.
  
! ‘-MP’
       Outputs a phony target for each dependency other than the modules
       being compiled, causing each to depend on nothing.
  
! ‘-MT TARGET’
       Change the TARGET of the rule emitted by dependency generation to
       be exactly the string you specify.  If you want multiple targets,
!      you can specify them as a single argument to ‘-MT’, or use multiple
!      ‘-MT’ options.
  
! ‘-MQ TARGET’
!      Same as ‘-MT’, but it quotes any characters which are special to
!      ‘make’.
  
! ‘-MD’
!      This option is equivalent to ‘-M -MF FILE’.  The driver determines
       FILE by removing any directory components and suffix from the input
!      file, and then adding a ‘.deps’ suffix.
  
! ‘-MMD’
!      Like ‘-MD’ but does not mention imported modules from the D
       standard library package directories.
  
! ‘-X’
       Output information describing the contents of all source files
       being compiled in JSON format to a file.  The driver determines
       FILE by removing any directory components and suffix from the input
!      file, and then adding a ‘.json’ suffix.
  
! ‘-Xf FILE’
!      Same as ‘-X’, but writes all JSON contents to the specified FILE.
  
! ‘-fdoc’
!      Generates ‘Ddoc’ documentation and writes it to a file.  The
       compiler determines FILE by removing any directory components and
!      suffix from the input file, and then adding a ‘.html’ suffix.
  
! ‘-fdoc-dir=DIR’
!      Same as ‘-fdoc’, but writes documentation to directory DIR.  This
!      option can be used with ‘-fdoc-file=FILE’ to independently set the
       output file and directory path.
  
! ‘-fdoc-file=FILE’
!      Same as ‘-fdoc’, but writes documentation to FILE.  This option can
!      be used with ‘-fdoc-dir=DIR’ to independently set the output file
       and directory path.
  
! ‘-fdoc-inc=FILE’
!      Specify FILE as a DDOC macro file to be read.  Multiple ‘-fdoc-inc’
       options can be used, and files are read and processed in the same
       order.
  
! ‘-fdump-c++-spec=FILE’
       For D source files, generate corresponding C++ declarations in
       FILE.
  
! ‘-fdump-c++-spec-verbose’
!      In conjunction with ‘-fdump-c++-spec=’ above, add comments for
       ignored declarations in the generated C++ header.
  
! ‘-fsave-mixins=FILE’
!      Generates code expanded from D ‘mixin’ statements and writes the
       processed sources to FILE.  This is useful to debug errors in
       compilation and provides source for debuggers to show when
       requested.
*************** File: gdc.info,  Node: Warnings,  Next:
*** 512,613 ****
  
  Warnings are diagnostic messages that report constructions that are not
  inherently erroneous but that are risky or suggest there is likely to be
! a bug in the program.  Unless '-Werror' is specified, they do not
  prevent compilation of the program.
  
! '-Wall'
       Turns on all warnings messages.  Warnings are not a defined part of
       the D language, and all constructs for which this may generate a
       warning message are valid code.
  
! '-Walloca'
       This option warns on all uses of "alloca" in the source.
  
! '-Walloca-larger-than=N'
       Warn on unbounded uses of alloca, and on bounded uses of alloca
!      whose bound can be larger than N bytes.  '-Wno-alloca-larger-than'
!      disables '-Walloca-larger-than' warning and is equivalent to
!      '-Walloca-larger-than=SIZE_MAX' or larger.
  
! '-Wno-builtin-declaration-mismatch'
       Warn if a built-in function is declared with an incompatible
       signature.
  
! '-Wcast-result'
       Warn about casts that will produce a null or zero result.
       Currently this is only done for casting between an imaginary and
       non-imaginary data type, or casting between a D and C++ class.
  
! '-Wno-deprecated'
       Do not warn about usage of deprecated features and symbols with
!      'deprecated' attributes.
  
! '-Werror'
       Turns all warnings into errors.
  
! '-Wextra'
       This enables some extra warning flags that are not enabled by
!      '-Wall'.
  
            -Waddress
            -Wcast-result
            -Wmismatched-special-enum
            -Wunknown-pragmas
  
! '-Wmismatched-special-enum'
       Warn when an enum the compiler recognizes as special is declared
       with a different size to the built-in type it is representing.
  
! '-Wspeculative'
       List all error messages from speculative compiles, such as
!      '__traits(compiles, ...)'.  This option does not report messages as
       warnings, and these messages therefore never become errors when the
!      '-Werror' option is also used.
  
! '-Wunknown-pragmas'
!      Warn when a 'pragma()' is encountered that is not understood by
!      'gdc'.  This differs from '-fignore-unknown-pragmas' where a pragma
       that is part of the D language, but not implemented by the
       compiler, won't get reported.
  
! '-Wno-varargs'
       Do not warn upon questionable usage of the macros used to handle
!      variable arguments like 'va_start'.
  
! '-fno-ignore-unknown-pragmas'
!      Do not recognize unsupported pragmas.  Any 'pragma()' encountered
       that is not part of the D language will result in an error.  This
       option is now deprecated and will be removed in a future release.
  
! '-fmax-errors=N'
       Limits the maximum number of error messages to N, at which point
!      'gdc' bails out rather than attempting to continue processing the
       source code.  If N is 0 (the default), there is no limit on the
       number of error messages produced.
  
! '-fsyntax-only'
       Check the code for syntax errors, but do not actually compile it.
!      This can be used in conjunction with '-fdoc' or '-H' to generate
       files for each module present on the command-line, but no other
       output file.
  
! '-ftransition=ID'
       Report additional information about D language changes identified
       by ID.  The following values are supported:
  
!      'all'
            List information on all D language transitions.
!      'complex'
            List all usages of complex or imaginary types.
!      'field'
            List all non-mutable fields which occupy an object instance.
!      'in'
!           List all usages of 'in' on parameter.
!      'nogc'
            List all hidden GC allocations.
!      'templates'
            List statistics on template instantiations.
!      'tls'
            List all variables going into thread local storage.
  
  
--- 512,613 ----
  
  Warnings are diagnostic messages that report constructions that are not
  inherently erroneous but that are risky or suggest there is likely to be
! a bug in the program.  Unless ‘-Werror’ is specified, they do not
  prevent compilation of the program.
  
! ‘-Wall’
       Turns on all warnings messages.  Warnings are not a defined part of
       the D language, and all constructs for which this may generate a
       warning message are valid code.
  
! ‘-Walloca’
       This option warns on all uses of "alloca" in the source.
  
! ‘-Walloca-larger-than=N’
       Warn on unbounded uses of alloca, and on bounded uses of alloca
!      whose bound can be larger than N bytes.  ‘-Wno-alloca-larger-than’
!      disables ‘-Walloca-larger-than’ warning and is equivalent to
!      ‘-Walloca-larger-than=SIZE_MAX’ or larger.
  
! ‘-Wno-builtin-declaration-mismatch’
       Warn if a built-in function is declared with an incompatible
       signature.
  
! ‘-Wcast-result’
       Warn about casts that will produce a null or zero result.
       Currently this is only done for casting between an imaginary and
       non-imaginary data type, or casting between a D and C++ class.
  
! ‘-Wno-deprecated’
       Do not warn about usage of deprecated features and symbols with
!      ‘deprecated’ attributes.
  
! ‘-Werror’
       Turns all warnings into errors.
  
! ‘-Wextra’
       This enables some extra warning flags that are not enabled by
!      ‘-Wall’.
  
            -Waddress
            -Wcast-result
            -Wmismatched-special-enum
            -Wunknown-pragmas
  
! ‘-Wmismatched-special-enum’
       Warn when an enum the compiler recognizes as special is declared
       with a different size to the built-in type it is representing.
  
! ‘-Wspeculative’
       List all error messages from speculative compiles, such as
!      ‘__traits(compiles, ...)’.  This option does not report messages as
       warnings, and these messages therefore never become errors when the
!      ‘-Werror’ option is also used.
  
! ‘-Wunknown-pragmas’
!      Warn when a ‘pragma()’ is encountered that is not understood by
!      ‘gdc’.  This differs from ‘-fignore-unknown-pragmas’ where a pragma
       that is part of the D language, but not implemented by the
       compiler, won't get reported.
  
! ‘-Wno-varargs’
       Do not warn upon questionable usage of the macros used to handle
!      variable arguments like ‘va_start’.
  
! ‘-fno-ignore-unknown-pragmas’
!      Do not recognize unsupported pragmas.  Any ‘pragma()’ encountered
       that is not part of the D language will result in an error.  This
       option is now deprecated and will be removed in a future release.
  
! ‘-fmax-errors=N’
       Limits the maximum number of error messages to N, at which point
!      ‘gdc’ bails out rather than attempting to continue processing the
       source code.  If N is 0 (the default), there is no limit on the
       number of error messages produced.
  
! ‘-fsyntax-only’
       Check the code for syntax errors, but do not actually compile it.
!      This can be used in conjunction with ‘-fdoc’ or ‘-H’ to generate
       files for each module present on the command-line, but no other
       output file.
  
! ‘-ftransition=ID’
       Report additional information about D language changes identified
       by ID.  The following values are supported:
  
!      ‘all’
            List information on all D language transitions.
!      ‘complex’
            List all usages of complex or imaginary types.
!      ‘field’
            List all non-mutable fields which occupy an object instance.
!      ‘in’
!           List all usages of ‘in’ on parameter.
!      ‘nogc’
            List all hidden GC allocations.
!      ‘templates’
            List statistics on template instantiations.
!      ‘tls’
            List all variables going into thread local storage.
  
  
*************** These options come into play when the co
*** 620,650 ****
  an executable output file.  They are meaningless if the compiler is not
  doing a link step.
  
! '-defaultlib=LIBNAME'
       Specify the library to use instead of libphobos when linking.
       Options specifying the linkage of libphobos, such as
!      '-static-libphobos' or '-shared-libphobos', are ignored.
  
! '-debuglib=LIBNAME'
       Specify the debug library to use instead of libphobos when linking.
!      This option has no effect unless the '-g' option was also given on
       the command line.  Options specifying the linkage of libphobos,
!      such as '-static-libphobos' or '-shared-libphobos', are ignored.
  
! '-nophoboslib'
       Do not use the Phobos or D runtime library when linking.  Options
!      specifying the linkage of libphobos, such as '-static-libphobos' or
!      '-shared-libphobos', are ignored.  The standard system libraries
!      are used normally, unless '-nostdlib' or '-nodefaultlibs' is used.
  
! '-shared-libphobos'
!      On systems that provide 'libgphobos' and 'libgdruntime' as a shared
       and a static library, this option forces the use of the shared
       version.  If no shared version was built when the compiler was
       configured, this option has no effect.
  
! '-static-libphobos'
!      On systems that provide 'libgphobos' and 'libgdruntime' as a shared
       and a static library, this option forces the use of the static
       version.  If no static version was built when the compiler was
       configured, this option has no effect.
--- 620,650 ----
  an executable output file.  They are meaningless if the compiler is not
  doing a link step.
  
! ‘-defaultlib=LIBNAME’
       Specify the library to use instead of libphobos when linking.
       Options specifying the linkage of libphobos, such as
!      ‘-static-libphobos’ or ‘-shared-libphobos’, are ignored.
  
! ‘-debuglib=LIBNAME’
       Specify the debug library to use instead of libphobos when linking.
!      This option has no effect unless the ‘-g’ option was also given on
       the command line.  Options specifying the linkage of libphobos,
!      such as ‘-static-libphobos’ or ‘-shared-libphobos’, are ignored.
  
! ‘-nophoboslib’
       Do not use the Phobos or D runtime library when linking.  Options
!      specifying the linkage of libphobos, such as ‘-static-libphobos’ or
!      ‘-shared-libphobos’, are ignored.  The standard system libraries
!      are used normally, unless ‘-nostdlib’ or ‘-nodefaultlibs’ is used.
  
! ‘-shared-libphobos’
!      On systems that provide ‘libgphobos’ and ‘libgdruntime’ as a shared
       and a static library, this option forces the use of the shared
       version.  If no shared version was built when the compiler was
       configured, this option has no effect.
  
! ‘-static-libphobos’
!      On systems that provide ‘libgphobos’ and ‘libgdruntime’ as a shared
       and a static library, this option forces the use of the static
       version.  If no static version was built when the compiler was
       configured, this option has no effect.
*************** File: gdc.info,  Node: Developer Options
*** 658,673 ****
  This section describes command-line options that are primarily of
  interest to developers or language tooling.
  
! '-fdump-d-original'
!      Output the internal front-end AST after the 'semantic3' stage.
       This option is only useful for debugging the GNU D compiler itself.
  
! '-v'
       Dump information about the compiler language processing stages as
       the source program is being compiled.  This includes listing all
!      modules that are processed through the 'parse', 'semantic',
!      'semantic2', and 'semantic3' stages; all 'import' modules and their
!      file paths; and all 'function' bodies that are being compiled.
  
  
  File: gdc.info,  Node: D Implementation,  Next: Copying,  Prev: Invoking gdc,  Up: Top
--- 658,673 ----
  This section describes command-line options that are primarily of
  interest to developers or language tooling.
  
! ‘-fdump-d-original’
!      Output the internal front-end AST after the ‘semantic3’ stage.
       This option is only useful for debugging the GNU D compiler itself.
  
! ‘-v’
       Dump information about the compiler language processing stages as
       the source program is being compiled.  This includes listing all
!      modules that are processed through the ‘parse’, ‘semantic’,
!      ‘semantic2’, and ‘semantic3’ stages; all ‘import’ modules and their
!      file paths; and all ‘function’ bodies that are being compiled.
  
  
  File: gdc.info,  Node: D Implementation,  Next: Copying,  Prev: Invoking gdc,  Up: Top
*************** D programming language defined in the do
*** 684,691 ****
     The implementation details described in this manual are GNU D
  extensions to the D programming language.  If you want to write code
  that checks whether these features are available, you can test for the
! predefined version 'GNU', or you can check whether a specific feature is
! compilable using '__traits(compiles)'.
  
       version (GNU)
       {
--- 684,691 ----
     The implementation details described in this manual are GNU D
  extensions to the D programming language.  If you want to write code
  that checks whether these features are available, you can test for the
! predefined version ‘GNU’, or you can check whether a specific feature is
! compilable using ‘__traits(compiles)’.
  
       version (GNU)
       {
*************** File: gdc.info,  Node: Attributes,  Next
*** 720,737 ****
  ==============
  
  User-Defined Attributes (UDA) are compile-time expressions introduced by
! the '@' token that can be attached to a declaration.  These attributes
  can then be queried, extracted, and manipulated at compile time.
  
     GNU D provides a number of extra special attributes to control
  specific compiler behavior that may help the compiler optimize or check
  code more carefully for correctness.  The attributes are defined in the
! 'gcc.attributes' module.
  
     There is some overlap between the purposes of attributes and pragmas.
! It has been found more convenient to use '@attribute' to achieve a
  natural attachment of attributes to their corresponding declarations,
! whereas 'pragma' is of use for compatibility with other compilers or
  constructs that do not naturally form part of the grammar.
  
  * Menu:
--- 720,737 ----
  ==============
  
  User-Defined Attributes (UDA) are compile-time expressions introduced by
! the ‘@’ token that can be attached to a declaration.  These attributes
  can then be queried, extracted, and manipulated at compile time.
  
     GNU D provides a number of extra special attributes to control
  specific compiler behavior that may help the compiler optimize or check
  code more carefully for correctness.  The attributes are defined in the
! ‘gcc.attributes’ module.
  
     There is some overlap between the purposes of attributes and pragmas.
! It has been found more convenient to use ‘@attribute’ to achieve a
  natural attachment of attributes to their corresponding declarations,
! whereas ‘pragma’ is of use for compatibility with other compilers or
  constructs that do not naturally form part of the grammar.
  
  * Menu:
*************** File: gdc.info,  Node: Attribute Syntax,
*** 747,760 ****
  2.1.1 Attribute Syntax
  ----------------------
  
! '@(gcc.attributes.attribute)' is the generic entrypoint for applying GCC
  attributes to a function, variable, or type.  There is no type checking
  done, as well as no deprecation path for attributes removed from the
  compiler.  So the recommendation is to use any of the other UDAs
  available as described in *note Common Attributes:: unless it is a
  target-specific attribute (*Note Target Attributes::).
  
!    Function attributes introduced by the '@attribute' UDA are used in
  the declaration of a function, followed by an attribute name string and
  any arguments separated by commas enclosed in parentheses.
  
--- 747,760 ----
  2.1.1 Attribute Syntax
  ----------------------
  
! ‘@(gcc.attributes.attribute)’ is the generic entrypoint for applying GCC
  attributes to a function, variable, or type.  There is no type checking
  done, as well as no deprecation path for attributes removed from the
  compiler.  So the recommendation is to use any of the other UDAs
  available as described in *note Common Attributes:: unless it is a
  target-specific attribute (*Note Target Attributes::).
  
!    Function attributes introduced by the ‘@attribute’ UDA are used in
  the declaration of a function, followed by an attribute name string and
  any arguments separated by commas enclosed in parentheses.
  
*************** any arguments separated by commas enclos
*** 762,768 ****
       @attribute("regparm", 1) int func(int size);
  
  Multiple attributes can be applied to a single declaration either with
! multiple '@attribute' attributes, or passing all attributes as a
  comma-separated list enclosed by parentheses.
  
       // Both func1 and func2 have the same attributes applied.
--- 762,768 ----
       @attribute("regparm", 1) int func(int size);
  
  Multiple attributes can be applied to a single declaration either with
! multiple ‘@attribute’ attributes, or passing all attributes as a
  comma-separated list enclosed by parentheses.
  
       // Both func1 and func2 have the same attributes applied.
*************** comma-separated list enclosed by parenth
*** 772,778 ****
  There are some problems with the semantics of such attributes in D. For
  example, there are no manglings for attributes, although they may affect
  code generation, so problems may arise when attributed types are used in
! conjunction with templates or overloading.  Similarly, 'typeid' does not
  distinguish between types with different attributes.  Support for
  attributes in D are restricted to declarations only.
  
--- 772,778 ----
  There are some problems with the semantics of such attributes in D. For
  example, there are no manglings for attributes, although they may affect
  code generation, so problems may arise when attributed types are used in
! conjunction with templates or overloading.  Similarly, ‘typeid’ does not
  distinguish between types with different attributes.  Support for
  attributes in D are restricted to declarations only.
  
*************** File: gdc.info,  Node: Common Attributes
*** 784,804 ****
  
  The following attributes are supported on most targets.
  
! '@(gcc.attributes.alloc_size (SIZEARGIDX))'
! '@(gcc.attributes.alloc_size (SIZEARGIDX, NUMARGIDX))'
! '@(gcc.attributes.alloc_size (SIZEARGIDX, NUMARGIDX, ZEROBASEDNUMBERING))'
  
!      The '@alloc_size' attribute may be applied to a function - or a
       function pointer variable - that returns a pointer and takes at
       least one argument of an integer or enumerated type.  It indicates
       that the returned pointer points to memory whose size is given by
!      the function argument at 'sizeArgIdx', or by the product of the
!      arguments at 'sizeArgIdx' and 'numArgIdx'.  Meaningful sizes are
!      positive values less than 'ptrdiff_t.max'.  Unless
!      'zeroBasedNumbering' is true, argument numbering starts at one for
       ordinary functions, and at two for non-static member functions.
  
!      If 'numArgIdx' is less than '0', it is taken to mean there is no
       argument specifying the element count.
  
            @alloc_size(1) void* malloc(size_t);
--- 784,804 ----
  
  The following attributes are supported on most targets.
  
! ‘@(gcc.attributes.alloc_size (SIZEARGIDX))’
! ‘@(gcc.attributes.alloc_size (SIZEARGIDX, NUMARGIDX))’
! ‘@(gcc.attributes.alloc_size (SIZEARGIDX, NUMARGIDX, ZEROBASEDNUMBERING))’
  
!      The ‘@alloc_size’ attribute may be applied to a function - or a
       function pointer variable - that returns a pointer and takes at
       least one argument of an integer or enumerated type.  It indicates
       that the returned pointer points to memory whose size is given by
!      the function argument at ‘sizeArgIdx’, or by the product of the
!      arguments at ‘sizeArgIdx’ and ‘numArgIdx’.  Meaningful sizes are
!      positive values less than ‘ptrdiff_t.max’.  Unless
!      ‘zeroBasedNumbering’ is true, argument numbering starts at one for
       ordinary functions, and at two for non-static member functions.
  
!      If ‘numArgIdx’ is less than ‘0’, it is taken to mean there is no
       argument specifying the element count.
  
            @alloc_size(1) void* malloc(size_t);
*************** The following attributes are supported o
*** 806,822 ****
            @alloc_size(1,2) void* my_calloc(size_t, size_t, bool);
            void malloc_cb(@alloc_size(1) void* function(size_t) ptr) { }
  
! '@(gcc.attributes.always_inline)'
  
!      The '@always_inline' attribute inlines the function independent of
       any restrictions that otherwise apply to inlining.  Failure to
       inline such a function is diagnosed as an error.
  
            @always_inline int func();
  
! '@(gcc.attributes.cold)'
  
!      The '@cold' attribute on functions is used to inform the compiler
       that the function is unlikely to be executed.  The function is
       optimized for size rather than speed and on many targets it is
       placed into a special subsection of the text section so all cold
--- 806,822 ----
            @alloc_size(1,2) void* my_calloc(size_t, size_t, bool);
            void malloc_cb(@alloc_size(1) void* function(size_t) ptr) { }
  
! ‘@(gcc.attributes.always_inline)’
  
!      The ‘@always_inline’ attribute inlines the function independent of
       any restrictions that otherwise apply to inlining.  Failure to
       inline such a function is diagnosed as an error.
  
            @always_inline int func();
  
! ‘@(gcc.attributes.cold)’
  
!      The ‘@cold’ attribute on functions is used to inform the compiler
       that the function is unlikely to be executed.  The function is
       optimized for size rather than speed and on many targets it is
       placed into a special subsection of the text section so all cold
*************** The following attributes are supported o
*** 826,884 ****
  
            @cold int func();
  
! '@(gcc.attributes.flatten)'
  
!      The '@flatten' attribute is used to inform the compiler that every
       call inside this function should be inlined, if possible.
!      Functions declared with attribute '@noinline' and similar are not
       inlined.
  
            @flatten int func();
  
! '@(gcc.attributes.no_icf)'
  
!      The '@no_icf' attribute prevents a function from being merged with
       another semantically equivalent function.
  
            @no_icf int func();
  
! '@(gcc.attributes.no_sanitize ("SANITIZE_OPTION"))'
  
!      The '@no_sanitize' attribute on functions is used to inform the
       compiler that it should not do sanitization of any option mentioned
       in SANITIZE_OPTION.  A list of values acceptable by the
!      '-fsanitize' option can be provided.
  
            @no_sanitize("alignment", "object-size") void func1() { }
            @no_sanitize("alignment,object-size") void func2() { }
  
! '@(gcc.attributes.noclone)'
  
!      The '@noclone' attribute prevents a function from being considered
       for cloning - a mechanism that produces specialized copies of
       functions and which is (currently) performed by interprocedural
       constant propagation.
  
            @noclone int func();
  
! '@(gcc.attributes.noinline)'
  
!      The '@noinline' attribute prevents a function from being considered
       for inlining.  If the function does not have side effects, there
       are optimizations other than inlining that cause function calls to
       be optimized away, although the function call is live.  To keep
!      such calls from being optimized away, put 'asm { ""; }' in the
       called function, to serve as a special side effect.
  
            @noinline int func();
  
! '@(gcc.attributes.noipa)'
  
!      The '@noipa' attribute disables interprocedural optimizations
       between the function with this attribute and its callers, as if the
       body of the function is not available when optimizing callers and
       the callers are unavailable when optimizing the body.  This
!      attribute implies '@noinline', '@noclone', and '@no_icf'
       attributes.  However, this attribute is not equivalent to a
       combination of other attributes, because its purpose is to suppress
       existing and future optimizations employing interprocedural
--- 826,884 ----
  
            @cold int func();
  
! ‘@(gcc.attributes.flatten)’
  
!      The ‘@flatten’ attribute is used to inform the compiler that every
       call inside this function should be inlined, if possible.
!      Functions declared with attribute ‘@noinline’ and similar are not
       inlined.
  
            @flatten int func();
  
! ‘@(gcc.attributes.no_icf)’
  
!      The ‘@no_icf’ attribute prevents a function from being merged with
       another semantically equivalent function.
  
            @no_icf int func();
  
! ‘@(gcc.attributes.no_sanitize ("SANITIZE_OPTION"))’
  
!      The ‘@no_sanitize’ attribute on functions is used to inform the
       compiler that it should not do sanitization of any option mentioned
       in SANITIZE_OPTION.  A list of values acceptable by the
!      ‘-fsanitize’ option can be provided.
  
            @no_sanitize("alignment", "object-size") void func1() { }
            @no_sanitize("alignment,object-size") void func2() { }
  
! ‘@(gcc.attributes.noclone)’
  
!      The ‘@noclone’ attribute prevents a function from being considered
       for cloning - a mechanism that produces specialized copies of
       functions and which is (currently) performed by interprocedural
       constant propagation.
  
            @noclone int func();
  
! ‘@(gcc.attributes.noinline)’
  
!      The ‘@noinline’ attribute prevents a function from being considered
       for inlining.  If the function does not have side effects, there
       are optimizations other than inlining that cause function calls to
       be optimized away, although the function call is live.  To keep
!      such calls from being optimized away, put ‘asm { ""; }’ in the
       called function, to serve as a special side effect.
  
            @noinline int func();
  
! ‘@(gcc.attributes.noipa)’
  
!      The ‘@noipa’ attribute disables interprocedural optimizations
       between the function with this attribute and its callers, as if the
       body of the function is not available when optimizing callers and
       the callers are unavailable when optimizing the body.  This
!      attribute implies ‘@noinline’, ‘@noclone’, and ‘@no_icf’
       attributes.  However, this attribute is not equivalent to a
       combination of other attributes, because its purpose is to suppress
       existing and future optimizations employing interprocedural
*************** The following attributes are supported o
*** 890,898 ****
  
            @noipa int func();
  
! '@(gcc.attributes.noplt)'
  
!      The '@noplt' attribute is the counterpart to option '-fno-plt'.
       Calls to functions marked with this attribute in
       position-independent code do not use the PLT in
       position-independent code.
--- 890,898 ----
  
            @noipa int func();
  
! ‘@(gcc.attributes.noplt)’
  
!      The ‘@noplt’ attribute is the counterpart to option ‘-fno-plt’.
       Calls to functions marked with this attribute in
       position-independent code do not use the PLT in
       position-independent code.
*************** The following attributes are supported o
*** 903,923 ****
  
            @noplt int func();
  
! '@(gcc.attributes.optimize (ARGUMENTS))'
  
!      The '@optimize' attribute is used to specify that a function is to
       be compiled with different optimization options than specified on
       the command line.  Valid ARGUMENTS are constant non-negative
       integers and strings.  Multiple arguments can be provided,
       separated by commas to specify multiple options.  Each numeric
       argument specifies an optimization level.  Each string argument
!      that begins with the letter 'O' refers to an optimization option
!      such as '-O0' or '-Os'.  Other options are taken as suffixes to the
!      '-f' prefix jointly forming the name of an optimization option.
  
!      Not every optimization option that starts with the '-f' prefix
       specified by the attribute necessarily has an effect on the
!      function.  The '@optimize' attribute should be used for debugging
       purposes only.  It is not suitable in production code.
  
            @optimize(2) double fn0(double x);
--- 903,923 ----
  
            @noplt int func();
  
! ‘@(gcc.attributes.optimize (ARGUMENTS))’
  
!      The ‘@optimize’ attribute is used to specify that a function is to
       be compiled with different optimization options than specified on
       the command line.  Valid ARGUMENTS are constant non-negative
       integers and strings.  Multiple arguments can be provided,
       separated by commas to specify multiple options.  Each numeric
       argument specifies an optimization level.  Each string argument
!      that begins with the letter ‘O’ refers to an optimization option
!      such as ‘-O0’ or ‘-Os’.  Other options are taken as suffixes to the
!      ‘-f’ prefix jointly forming the name of an optimization option.
  
!      Not every optimization option that starts with the ‘-f’ prefix
       specified by the attribute necessarily has an effect on the
!      function.  The ‘@optimize’ attribute should be used for debugging
       purposes only.  It is not suitable in production code.
  
            @optimize(2) double fn0(double x);
*************** The following attributes are supported o
*** 929,960 ****
            @optimize("-ftree-vectorize") double fn6(double x);
            @optimize("no-finite-math-only", 3) double fn7(double x);
  
! '@(gcc.attributes.register ("REGISTERNAME"))'
  
!      The '@register' attribute specifies that a local or '__gshared'
       variable is to be given a register storage-class in the C99 sense
       of the term, and will be placed into a register named REGISTERNAME.
  
       The variable needs to boiled down to a data type that fits the
       target register.  It also cannot have either thread-local or
!      'extern' storage.  It is an error to take the address of a register
       variable.
  
            @register("ebx") __gshared int ebx = void;
            void func() { @register("r10") long r10 = 0x2a; }
  
! '@(gcc.attributes.restrict)'
  
!      The '@restrict' attribute specifies that a function parameter is to
       be restrict-qualified in the C99 sense of the term.  The parameter
       needs to boil down to either a pointer or reference type, such as a
!      D pointer, class reference, or a 'ref' parameter.
  
            void func(@restrict ref const float[16] array);
  
! '@(gcc.attributes.section ("SECTIONNAME"))'
  
!      The '@section' attribute specifies that a function or variable
       lives in a particular section.  For when you need certain
       particular functions to appear in special sections.
  
--- 929,960 ----
            @optimize("-ftree-vectorize") double fn6(double x);
            @optimize("no-finite-math-only", 3) double fn7(double x);
  
! ‘@(gcc.attributes.register ("REGISTERNAME"))’
  
!      The ‘@register’ attribute specifies that a local or ‘__gshared’
       variable is to be given a register storage-class in the C99 sense
       of the term, and will be placed into a register named REGISTERNAME.
  
       The variable needs to boiled down to a data type that fits the
       target register.  It also cannot have either thread-local or
!      ‘extern’ storage.  It is an error to take the address of a register
       variable.
  
            @register("ebx") __gshared int ebx = void;
            void func() { @register("r10") long r10 = 0x2a; }
  
! ‘@(gcc.attributes.restrict)’
  
!      The ‘@restrict’ attribute specifies that a function parameter is to
       be restrict-qualified in the C99 sense of the term.  The parameter
       needs to boil down to either a pointer or reference type, such as a
!      D pointer, class reference, or a ‘ref’ parameter.
  
            void func(@restrict ref const float[16] array);
  
! ‘@(gcc.attributes.section ("SECTIONNAME"))’
  
!      The ‘@section’ attribute specifies that a function or variable
       lives in a particular section.  For when you need certain
       particular functions to appear in special sections.
  
*************** The following attributes are supported o
*** 966,974 ****
            @section("bar") extern void func();
            @section("stack") ubyte[10000] stack;
  
! '@(gcc.attributes.simd)'
  
!      The '@simd' attribute enables creation of one or more function
       versions that can process multiple arguments using SIMD
       instructions from a single invocation.  Specifying this attribute
       allows compiler to assume that such versions are available at link
--- 966,974 ----
            @section("bar") extern void func();
            @section("stack") ubyte[10000] stack;
  
! ‘@(gcc.attributes.simd)’
  
!      The ‘@simd’ attribute enables creation of one or more function
       versions that can process multiple arguments using SIMD
       instructions from a single invocation.  Specifying this attribute
       allows compiler to assume that such versions are available at link
*************** The following attributes are supported o
*** 978,1015 ****
  
            @simd double sqrt(double x);
  
! '@(gcc.attributes.simd_clones ("MASK"))'
  
!      The '@simd_clones' attribute is the same as '@simd', but also
!      includes a MASK argument.  Valid masks values are 'notinbranch' or
!      'inbranch', and instructs the compiler to generate non-masked or
       masked clones correspondingly.
  
            @simd_clones("notinbranch") double atan2(double y, double x);
  
! '@(gcc.attributes.symver ("ARGUMENTS"))'
  
!      The '@symver' attribute creates a symbol version on ELF targets.
!      The syntax of the string parameter is '"NAME@NODENAME"'.  The NAME
       part of the parameter is the actual name of the symbol by which it
       will be externally referenced.  The NODENAME portion should be the
       name of a node specified in the version script supplied to the
       linker when building a shared library.  Versioned symbol must be
       defined and must be exported with default visibility.
  
!      Finally if the parameter is '"NAME@@NODENAME"' then in addition to
!      creating a symbol version (as if '"NAME@NODENAME"' was used) the
       version will be also used to resolve NAME by the linker.
  
            @symver("foo@VERS_1") int foo_v1();
  
! '@(gcc.attributes.target ("OPTIONS"))'
  
!      The '@target' attribute is used to specify that a function is to be
       compiled with different target options than specified on the
       command line.  One or more strings can be provided as arguments,
       separated by commas to specify multiple options.  Each string
!      consists of one or more comma-separated suffixes to the '-m' prefix
       jointly forming the name of a machine-dependent option.
  
       The target attribute can be used for instance to have a function
--- 978,1015 ----
  
            @simd double sqrt(double x);
  
! ‘@(gcc.attributes.simd_clones ("MASK"))’
  
!      The ‘@simd_clones’ attribute is the same as ‘@simd’, but also
!      includes a MASK argument.  Valid masks values are ‘notinbranch’ or
!      ‘inbranch’, and instructs the compiler to generate non-masked or
       masked clones correspondingly.
  
            @simd_clones("notinbranch") double atan2(double y, double x);
  
! ‘@(gcc.attributes.symver ("ARGUMENTS"))’
  
!      The ‘@symver’ attribute creates a symbol version on ELF targets.
!      The syntax of the string parameter is ‘"NAME@NODENAME"’.  The NAME
       part of the parameter is the actual name of the symbol by which it
       will be externally referenced.  The NODENAME portion should be the
       name of a node specified in the version script supplied to the
       linker when building a shared library.  Versioned symbol must be
       defined and must be exported with default visibility.
  
!      Finally if the parameter is ‘"NAME@@NODENAME"’ then in addition to
!      creating a symbol version (as if ‘"NAME@NODENAME"’ was used) the
       version will be also used to resolve NAME by the linker.
  
            @symver("foo@VERS_1") int foo_v1();
  
! ‘@(gcc.attributes.target ("OPTIONS"))’
  
!      The ‘@target’ attribute is used to specify that a function is to be
       compiled with different target options than specified on the
       command line.  One or more strings can be provided as arguments,
       separated by commas to specify multiple options.  Each string
!      consists of one or more comma-separated suffixes to the ‘-m’ prefix
       jointly forming the name of a machine-dependent option.
  
       The target attribute can be used for instance to have a function
*************** The following attributes are supported o
*** 1021,1063 ****
            @target("arch=core2") void core2_func();
            @target("sse3") void sse3_func();
  
! '@(gcc.attributes.target_clones ("OPTIONS"))'
  
!      The '@target_clones' attribute is used to specify that a function
       be cloned into multiple versions compiled with different target
       OPTIONS than specified on the command line.  The supported options
!      and restrictions are the same as for '@target' attribute.
  
       It also creates a resolver function that dynamically selects a
       clone suitable for current architecture.  The resolver is created
!      only if there is a usage of a function with '@target_clones'
       attribute.
  
            @target_clones("sse4.1,avx,default") double func(double x);
  
! '@(gcc.attributes.used)'
  
!      The '@used' attribute, annotated to a function or variable, means
       that code must be emitted for the function even if it appears that
       the function is not referenced.  This is useful, for example, when
       the function is referenced only in inline assembly.
  
            @used __gshared int var = 0x1000;
  
! '@(gcc.attributes.visibility ("VISIBILITYNAME"))'
  
!      The '@visibility' attribute affects the linkage of the declaration
       to which it is attached.  It can be applied to variables, types,
       and functions.
  
!      There are four supported visibility_type values: 'default',
!      'hidden', 'protected', or 'internal' visibility.
  
            @visibility("protected") void func() {  }
  
! '@(gcc.attributes.weak)'
  
!      The '@weak' attribute causes a declaration of an external symbol to
       be emitted as a weak symbol rather than a global.  This is
       primarily useful in defining library functions that can be
       overridden in user code, though it can also be used with
--- 1021,1063 ----
            @target("arch=core2") void core2_func();
            @target("sse3") void sse3_func();
  
! ‘@(gcc.attributes.target_clones ("OPTIONS"))’
  
!      The ‘@target_clones’ attribute is used to specify that a function
       be cloned into multiple versions compiled with different target
       OPTIONS than specified on the command line.  The supported options
!      and restrictions are the same as for ‘@target’ attribute.
  
       It also creates a resolver function that dynamically selects a
       clone suitable for current architecture.  The resolver is created
!      only if there is a usage of a function with ‘@target_clones’
       attribute.
  
            @target_clones("sse4.1,avx,default") double func(double x);
  
! ‘@(gcc.attributes.used)’
  
!      The ‘@used’ attribute, annotated to a function or variable, means
       that code must be emitted for the function even if it appears that
       the function is not referenced.  This is useful, for example, when
       the function is referenced only in inline assembly.
  
            @used __gshared int var = 0x1000;
  
! ‘@(gcc.attributes.visibility ("VISIBILITYNAME"))’
  
!      The ‘@visibility’ attribute affects the linkage of the declaration
       to which it is attached.  It can be applied to variables, types,
       and functions.
  
!      There are four supported visibility_type values: ‘default’,
!      ‘hidden’, ‘protected’, or ‘internal’ visibility.
  
            @visibility("protected") void func() {  }
  
! ‘@(gcc.attributes.weak)’
  
!      The ‘@weak’ attribute causes a declaration of an external symbol to
       be emitted as a weak symbol rather than a global.  This is
       primarily useful in defining library functions that can be
       overridden in user code, though it can also be used with
*************** File: gdc.info,  Node: Other Attributes,
*** 1080,1138 ****
  The following attributes are defined for compatibility with other
  compilers.
  
! '@(gcc.attributes.allocSize (SIZEARGIDX))'
! '@(gcc.attributes.allocSize (SIZEARGIDX, NUMARGIDX))'
! '@(gcc.attributes.allocSize (SIZEARGIDX))'
  
!      These attributes are a synonym for '@alloc_size(SIZEARGIDX,
!      NUMARGIDX, true)'.  Unlike '@alloc_size', it uses 0-based index of
       the function arguments.
  
! '@(gcc.attributes.assumeUsed)'
  
!      This attribute is a synonym for '@used'.
  
! '@(gcc.attributes.dynamicCompile)'
! '@(gcc.attributes.dynamicCompileConst)'
! '@(gcc.attributes.dynamicCompileEmit)'
  
       These attributes are accepted, but have no effect.
  
! '@(gcc.attributes.fastmath)'
  
!      This attribute is a synonym for '@optimize("Ofast")'.  Explicitly
       sets "fast-math" for a function, enabling aggressive math
       optimizations.
  
! '@(gcc.attributes.hidden)'
  
!      This attribute is a synonym for '@visibility("hidden")'.  Sets the
       visibility of a function or global variable to "hidden".
  
! '@(gcc.attributes.naked)'
  
!      This attribute is a synonym for '@attribute("naked")'.  Adds GCC's
       "naked" attribute to a function, disabling function prologue /
       epilogue emission.  Intended to be used in combination with basic
!      'asm' statements.  While using extended 'asm' or a mixture of basic
!      'asm' and D code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! '@(gcc.attributes.noSanitize ("SANITIZE_OPTION"))'
  
!      This attribute is a synonym for '@no_sanitize("sanitize_option")'.
  
! '@(gcc.attributes.optStrategy ("STRATEGY"))'
  
!      This attribute is a synonym for '@optimize("O0")' and
!      '@optimize("Os")'.  Sets the optimization strategy for a function.
       Valid strategies are "none", "optsize", "minsize".  The strategies
       are mutually exclusive.
  
! '@(gcc.attributes.polly)'
  
!      This attribute is a synonym for '@optimize("loop-parallelize-all",
!      "loop-nest-optimize")'.  Only effective when GDC was built with ISL
       included.
  
  
--- 1080,1138 ----
  The following attributes are defined for compatibility with other
  compilers.
  
! ‘@(gcc.attributes.allocSize (SIZEARGIDX))’
! ‘@(gcc.attributes.allocSize (SIZEARGIDX, NUMARGIDX))’
! ‘@(gcc.attributes.allocSize (SIZEARGIDX))’
  
!      These attributes are a synonym for ‘@alloc_size(SIZEARGIDX,
!      NUMARGIDX, true)’.  Unlike ‘@alloc_size’, it uses 0-based index of
       the function arguments.
  
! ‘@(gcc.attributes.assumeUsed)’
  
!      This attribute is a synonym for ‘@used’.
  
! ‘@(gcc.attributes.dynamicCompile)’
! ‘@(gcc.attributes.dynamicCompileConst)’
! ‘@(gcc.attributes.dynamicCompileEmit)’
  
       These attributes are accepted, but have no effect.
  
! ‘@(gcc.attributes.fastmath)’
  
!      This attribute is a synonym for ‘@optimize("Ofast")’.  Explicitly
       sets "fast-math" for a function, enabling aggressive math
       optimizations.
  
! ‘@(gcc.attributes.hidden)’
  
!      This attribute is a synonym for ‘@visibility("hidden")’.  Sets the
       visibility of a function or global variable to "hidden".
  
! ‘@(gcc.attributes.naked)’
  
!      This attribute is a synonym for ‘@attribute("naked")’.  Adds GCC's
       "naked" attribute to a function, disabling function prologue /
       epilogue emission.  Intended to be used in combination with basic
!      ‘asm’ statements.  While using extended ‘asm’ or a mixture of basic
!      ‘asm’ and D code may appear to work, they cannot be depended upon
       to work reliably and are not supported.
  
! ‘@(gcc.attributes.noSanitize ("SANITIZE_OPTION"))’
  
!      This attribute is a synonym for ‘@no_sanitize("sanitize_option")’.
  
! ‘@(gcc.attributes.optStrategy ("STRATEGY"))’
  
!      This attribute is a synonym for ‘@optimize("O0")’ and
!      ‘@optimize("Os")’.  Sets the optimization strategy for a function.
       Valid strategies are "none", "optsize", "minsize".  The strategies
       are mutually exclusive.
  
! ‘@(gcc.attributes.polly)’
  
!      This attribute is a synonym for ‘@optimize("loop-parallelize-all",
!      "loop-nest-optimize")’.  Only effective when GDC was built with ISL
       included.
  
  
*************** File: gdc.info,  Node: Target Attributes
*** 1142,1149 ****
  --------------------------------
  
  Many targets have their own target-specific attributes.  These are also
! exposed via the 'gcc.attributes' module with use of the generic
! '@(gcc.attributes.attribute)' UDA function.
  
     *Note Attribute Syntax::, for details of the exact syntax for using
  attributes.
--- 1142,1149 ----
  --------------------------------
  
  Many targets have their own target-specific attributes.  These are also
! exposed via the ‘gcc.attributes’ module with use of the generic
! ‘@(gcc.attributes.attribute)’ UDA function.
  
     *Note Attribute Syntax::, for details of the exact syntax for using
  attributes.
*************** File: gdc.info,  Node: Builtin Functions
*** 1187,1195 ****
  ======================
  
  GCC provides a large number of built-in functions that are made
! available in GNU D by importing the 'gcc.builtins' module.  Declarations
  in this module are automatically created by the compiler.  All
! declarations start with '__builtin_'.  Refer to the built-in function
  documentation in the GCC manual for a full list of functions that are
  available.
  
--- 1187,1195 ----
  ======================
  
  GCC provides a large number of built-in functions that are made
! available in GNU D by importing the ‘gcc.builtins’ module.  Declarations
  in this module are automatically created by the compiler.  All
! declarations start with ‘__builtin_’.  Refer to the built-in function
  documentation in the GCC manual for a full list of functions that are
  available.
  
*************** File: gdc.info,  Node: Builtin Types,  N
*** 1206,1251 ****
  --------------------
  
  In addition to built-in functions, the following types are defined in
! the 'gcc.builtins' module.
  
! '___builtin_clong'
!      The D equivalent of the target's C 'long' type.
  
! '___builtin_clonglong'
!      The D equivalent of the target's C 'long long' type.
  
! '___builtin_culong'
!      The D equivalent of the target's C 'unsigned long' type.
  
! '___builtin_culonglong'
!      The D equivalent of the target's C 'unsigned long long' type.
  
! '___builtin_machine_byte'
       Signed unit-sized integer type.
  
! '___builtin_machine_int'
       Signed word-sized integer type.
  
! '___builtin_machine_ubyte'
       Unsigned unit-sized integer type.
  
! '___builtin_machine_uint'
       Unsigned word-sized integer type.
  
! '___builtin_pointer_int'
       Signed pointer-sized integer type.
  
! '___builtin_pointer_uint'
       Unsigned pointer-sized integer type.
  
! '___builtin_unwind_int'
!      The D equivalent of the target's C '_Unwind_Sword' type.
  
! '___builtin_unwind_uint'
!      The D equivalent of the target's C '_Unwind_Word' type.
  
! '___builtin_va_list'
!      The target's 'va_list' type.
  
  
  File: gdc.info,  Node: Query Builtins,  Next: Other Builtins,  Prev: Builtin Types,  Up: Builtin Functions
--- 1206,1251 ----
  --------------------
  
  In addition to built-in functions, the following types are defined in
! the ‘gcc.builtins’ module.
  
! ‘___builtin_clong’
!      The D equivalent of the target's C ‘long’ type.
  
! ‘___builtin_clonglong’
!      The D equivalent of the target's C ‘long long’ type.
  
! ‘___builtin_culong’
!      The D equivalent of the target's C ‘unsigned long’ type.
  
! ‘___builtin_culonglong’
!      The D equivalent of the target's C ‘unsigned long long’ type.
  
! ‘___builtin_machine_byte’
       Signed unit-sized integer type.
  
! ‘___builtin_machine_int’
       Signed word-sized integer type.
  
! ‘___builtin_machine_ubyte’
       Unsigned unit-sized integer type.
  
! ‘___builtin_machine_uint’
       Unsigned word-sized integer type.
  
! ‘___builtin_pointer_int’
       Signed pointer-sized integer type.
  
! ‘___builtin_pointer_uint’
       Unsigned pointer-sized integer type.
  
! ‘___builtin_unwind_int’
!      The D equivalent of the target's C ‘_Unwind_Sword’ type.
  
! ‘___builtin_unwind_uint’
!      The D equivalent of the target's C ‘_Unwind_Word’ type.
  
! ‘___builtin_va_list’
!      The target's ‘va_list’ type.
  
  
  File: gdc.info,  Node: Query Builtins,  Next: Other Builtins,  Prev: Builtin Types,  Up: Builtin Functions
*************** File: gdc.info,  Node: Query Builtins,
*** 1256,1265 ****
  Not all of the functions are supported, and some target-specific
  functions may only be available when compiling for a particular ISA. One
  way of finding out what is exposed by the built-ins module is by
! generating a D interface file.  Assuming you have no file 'builtins.d',
  the command
         echo "module gcc.builtins;" > builtins.d; gdc -H -fsyntax-only builtins.d
! will save all built-in declarations to the file 'builtins.di'.
  
     Another way to determine whether a specific built-in is available is
  by using compile-time reflection.
--- 1256,1265 ----
  Not all of the functions are supported, and some target-specific
  functions may only be available when compiling for a particular ISA. One
  way of finding out what is exposed by the built-ins module is by
! generating a D interface file.  Assuming you have no file ‘builtins.d’,
  the command
         echo "module gcc.builtins;" > builtins.d; gdc -H -fsyntax-only builtins.d
! will save all built-in declarations to the file ‘builtins.di’.
  
     Another way to determine whether a specific built-in is available is
  by using compile-time reflection.
*************** File: gdc.info,  Node: Other Builtins,
*** 1277,1382 ****
  2.2.3 Other Built-in Functions
  ------------------------------
  
! As well as built-ins being available from the 'gcc.builtins' module, GNU
! D will also recognize when an 'extern(C)' library function is a GCC
  built-in.  Many of these functions are only optimized in certain cases;
  if they are not optimized in a particular case, a call to the library
  function is emitted.  This optimization can be disabled with the
! '-fno-builtin' option (*note Runtime Options::).
  
!    In the 'core.stdc.complex' module, the functions 'cabs', 'cabsf',
! 'cabsl', 'cacos', 'cacosf', 'cacosh', 'cacoshf', 'cacoshl', 'cacosl',
! 'carg', 'cargf', 'cargl', 'casin', 'casinf', 'casinh', 'casinhf',
! 'casinhl', 'casinl', 'catan', 'catanf', 'catanh', 'catanhf', 'catanhl',
! 'catanl', 'ccos', 'ccosf', 'ccosh', 'ccoshf', 'ccoshl', 'ccosl', 'cexp',
! 'cexpf', 'cexpl', 'clog', 'clogf', 'clogl', 'conj', 'conjf', 'conjl',
! 'cpow', 'cpowf', 'cpowl', 'cproj', 'cprojf', 'cprojl', 'csin', 'csinf',
! 'csinh', 'csinhf', 'csinhl', 'csinl', 'csqrt', 'csqrtf', 'csqrtl',
! 'ctan', 'ctanf', 'ctanh', 'ctanhf', 'ctanhl', 'ctanl' may be handled as
  built-in functions.  All these functions have corresponding versions
! prefixed with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.ctype' module, the functions 'isalnum', 'isalpha',
! 'isblank', 'iscntrl', 'isdigit', 'isgraph', 'islower', 'isprint',
! 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper' may be
  handled as built-in functions.  All these functions have corresponding
! versions prefixed with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.fenv' module, the functions 'feclearexcept',
! 'fegetenv', 'fegetexceptflag', 'fegetround', 'feholdexcept',
! 'feraiseexcept', 'fesetenv', 'fesetexceptflag', 'fesetround',
! 'fetestexcept', 'feupdateenv' may be handled as built-in functions.  All
! these functions have corresponding versions prefixed with '__builtin_'
! in the 'gcc.builtins' module.
  
!    In the 'core.stdc.inttypes' module, the function 'imaxabs' may be
  handled as a built-in function.  All these functions have corresponding
! versions prefixed with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.math' module, the functions 'acos', 'acosf',
! 'acosh', 'acoshf', 'acoshl', 'acosl', 'asin', 'asinf', 'asinh',
! 'asinhf', 'asinhl', 'asinl', 'atan', 'atan2', 'atan2f', 'atan2l',
! 'atanf', 'atanh', 'atanhf', 'atanhl', 'atanl', 'cbrt', 'cbrtf', 'cbrtl',
! 'ceil', 'ceilf', 'ceill', 'copysign', 'copysignf', 'copysignl', 'cos',
! 'cosf', 'cosh', 'coshf', 'coshl', 'cosl', 'erf', 'erfc', 'erfcf',
! 'erfcl', 'erff', 'erfl', 'exp', 'exp2', 'exp2f', 'exp2l', 'expf',
! 'expl', 'expm1', 'expm1f', 'expm1l', 'fabs', 'fabsf', 'fabsl', 'fdim',
! 'fdimf', 'fdiml', 'floor', 'floorf', 'floorl', 'fma', 'fmaf', 'fmal',
! 'fmax', 'fmaxf', 'fmaxl', 'fmin', 'fminf', 'fminl', 'fmod', 'fmodf',
! 'fmodl', 'frexp', 'frexpf', 'frexpl', 'hypot', 'hypotf', 'hypotl',
! 'ilogb', 'ilogbf', 'ilogbl', 'isinf', 'isnan', 'ldexp', 'ldexpf',
! 'ldexpl', 'lgamma', 'lgammaf', 'lgammal', 'llrint', 'llrintf',
! 'llrintl', 'llround', 'llroundf', 'llroundl', 'log', 'log10', 'log10f',
! 'log10l', 'log1p', 'log1pf', 'log1pl', 'log2', 'log2f', 'log2l', 'logb',
! 'logbf', 'logbl', 'logf', 'logl', 'lrint', 'lrintf', 'lrintl', 'lround',
! 'lroundf', 'lroundl', 'modf', 'modff', 'modfl', 'nan', 'nanf', 'nanl',
! 'nearbyint', 'nearbyintf', 'nearbyintl', 'nextafter', 'nextafterf',
! 'nextafterl', 'nexttoward', 'nexttowardf', 'nexttowardl', 'pow', 'powf',
! 'powl', 'remainder', 'remainderf', 'remainderl', 'remquo', 'remquof',
! 'remquol', 'rint', 'rintf', 'rintl', 'round', 'roundf', 'roundl',
! 'scalbln', 'scalblnf', 'scalblnl', 'scalbn', 'scalbnf', 'scalbnl',
! 'signbit', 'sin', 'sinf', 'sinh', 'sinhf', 'sinhl', 'sinl', 'sqrt',
! 'sqrtf', 'sqrtl', 'tan', 'tanf', 'tanh', 'tanhf', 'tanhl', 'tanl',
! 'tgamma', 'tgammaf', 'tgammal', 'trunc', 'truncf', 'truncl' may be
  handled as built-in functions.  All these functions have corresponding
! versions prefixed with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.stdio' module, the functions 'fprintf', 'fputc',
! 'fputc_unlocked', 'fputs', 'fwrite', 'printf', 'puts', 'snprintf',
! 'sprintf', 'vfprintf', 'vprintf', 'vsnprintf', 'vsprintf' may be handled
  as built-in functions.  All these functions have corresponding versions
! prefixed with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.stdlib' module, the functions 'abort', 'abs',
! 'aligned_alloc', 'alloca', 'calloc', 'exit', '_Exit', 'free', 'labs',
! 'llabs', 'malloc', 'realloc' may be handled as built-in functions.  All
! these functions have corresponding versions prefixed with '__builtin_'
! in the 'gcc.builtins' module.
  
!    In the 'core.stdc.string' module, the functions 'memchr', 'memcmp',
! 'memcpy', 'memmove', 'memset', 'strcat', 'strchr', 'strcmp', 'strcpy',
! 'strcspn', 'strdup', 'strlen', 'strncat', 'strncmp', 'strncpy',
! 'strpbrk', 'strrchr', 'strspn', 'strstr' may be handled as built-in
  functions.  All these functions have corresponding versions prefixed
! with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.time' module, the function 'strftime' may be
  handled as a built-in function.  All these functions have corresponding
! versions prefixed with '__builtin_' in the 'gcc.builtins' module.
  
!    In the 'core.stdc.wctype' module, the functions 'iswalnum',
! 'iswalpha', 'iswblank', 'iswcntrl', 'iswdigit', 'iswgraph', 'iswlower',
! 'iswprint', 'iswpunct', 'iswspace', 'iswupper', 'iswxdigit', 'towlower',
! 'towupper' may be handled as built-in functions.  All these functions
! have corresponding versions prefixed with '__builtin_' in the
! 'gcc.builtins' module.
  
!    Within the 'core.sys' package for POSIX and platform definitions, the
! functions 'putchar_unlocked', 'putc_unlocked', 'posix_memalign', 'ffs',
! 'strcasecmp', 'strncasecmp', 'stpcpy', 'stpncpy', 'strndup', 'strnlen',
! 'execl', 'execle', 'execlp', 'execv', 'execve', 'execvp', '_exit',
! 'fork' may be handled as built-in functions.  All these functions have
! corresponding versions prefixed with '__builtin_' in the 'gcc.builtins'
  module.
  
  
--- 1277,1382 ----
  2.2.3 Other Built-in Functions
  ------------------------------
  
! As well as built-ins being available from the ‘gcc.builtins’ module, GNU
! D will also recognize when an ‘extern(C)’ library function is a GCC
  built-in.  Many of these functions are only optimized in certain cases;
  if they are not optimized in a particular case, a call to the library
  function is emitted.  This optimization can be disabled with the
! ‘-fno-builtin’ option (*note Runtime Options::).
  
!    In the ‘core.stdc.complex’ module, the functions ‘cabs’, ‘cabsf’,
! ‘cabsl’, ‘cacos’, ‘cacosf’, ‘cacosh’, ‘cacoshf’, ‘cacoshl’, ‘cacosl’,
! ‘carg’, ‘cargf’, ‘cargl’, ‘casin’, ‘casinf’, ‘casinh’, ‘casinhf’,
! ‘casinhl’, ‘casinl’, ‘catan’, ‘catanf’, ‘catanh’, ‘catanhf’, ‘catanhl’,
! ‘catanl’, ‘ccos’, ‘ccosf’, ‘ccosh’, ‘ccoshf’, ‘ccoshl’, ‘ccosl’, ‘cexp’,
! ‘cexpf’, ‘cexpl’, ‘clog’, ‘clogf’, ‘clogl’, ‘conj’, ‘conjf’, ‘conjl’,
! ‘cpow’, ‘cpowf’, ‘cpowl’, ‘cproj’, ‘cprojf’, ‘cprojl’, ‘csin’, ‘csinf’,
! ‘csinh’, ‘csinhf’, ‘csinhl’, ‘csinl’, ‘csqrt’, ‘csqrtf’, ‘csqrtl’,
! ‘ctan’, ‘ctanf’, ‘ctanh’, ‘ctanhf’, ‘ctanhl’, ‘ctanl’ may be handled as
  built-in functions.  All these functions have corresponding versions
! prefixed with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.ctype’ module, the functions ‘isalnum’, ‘isalpha’,
! ‘isblank’, ‘iscntrl’, ‘isdigit’, ‘isgraph’, ‘islower’, ‘isprint’,
! ‘ispunct’, ‘isspace’, ‘isupper’, ‘isxdigit’, ‘tolower’, ‘toupper’ may be
  handled as built-in functions.  All these functions have corresponding
! versions prefixed with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.fenv’ module, the functions ‘feclearexcept’,
! ‘fegetenv’, ‘fegetexceptflag’, ‘fegetround’, ‘feholdexcept’,
! ‘feraiseexcept’, ‘fesetenv’, ‘fesetexceptflag’, ‘fesetround’,
! ‘fetestexcept’, ‘feupdateenv’ may be handled as built-in functions.  All
! these functions have corresponding versions prefixed with ‘__builtin_’
! in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.inttypes’ module, the function ‘imaxabs’ may be
  handled as a built-in function.  All these functions have corresponding
! versions prefixed with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.math’ module, the functions ‘acos’, ‘acosf’,
! ‘acosh’, ‘acoshf’, ‘acoshl’, ‘acosl’, ‘asin’, ‘asinf’, ‘asinh’,
! ‘asinhf’, ‘asinhl’, ‘asinl’, ‘atan’, ‘atan2’, ‘atan2f’, ‘atan2l’,
! ‘atanf’, ‘atanh’, ‘atanhf’, ‘atanhl’, ‘atanl’, ‘cbrt’, ‘cbrtf’, ‘cbrtl’,
! ‘ceil’, ‘ceilf’, ‘ceill’, ‘copysign’, ‘copysignf’, ‘copysignl’, ‘cos’,
! ‘cosf’, ‘cosh’, ‘coshf’, ‘coshl’, ‘cosl’, ‘erf’, ‘erfc’, ‘erfcf’,
! ‘erfcl’, ‘erff’, ‘erfl’, ‘exp’, ‘exp2’, ‘exp2f’, ‘exp2l’, ‘expf’,
! ‘expl’, ‘expm1’, ‘expm1f’, ‘expm1l’, ‘fabs’, ‘fabsf’, ‘fabsl’, ‘fdim’,
! ‘fdimf’, ‘fdiml’, ‘floor’, ‘floorf’, ‘floorl’, ‘fma’, ‘fmaf’, ‘fmal’,
! ‘fmax’, ‘fmaxf’, ‘fmaxl’, ‘fmin’, ‘fminf’, ‘fminl’, ‘fmod’, ‘fmodf’,
! ‘fmodl’, ‘frexp’, ‘frexpf’, ‘frexpl’, ‘hypot’, ‘hypotf’, ‘hypotl’,
! ‘ilogb’, ‘ilogbf’, ‘ilogbl’, ‘isinf’, ‘isnan’, ‘ldexp’, ‘ldexpf’,
! ‘ldexpl’, ‘lgamma’, ‘lgammaf’, ‘lgammal’, ‘llrint’, ‘llrintf’,
! ‘llrintl’, ‘llround’, ‘llroundf’, ‘llroundl’, ‘log’, ‘log10’, ‘log10f’,
! ‘log10l’, ‘log1p’, ‘log1pf’, ‘log1pl’, ‘log2’, ‘log2f’, ‘log2l’, ‘logb’,
! ‘logbf’, ‘logbl’, ‘logf’, ‘logl’, ‘lrint’, ‘lrintf’, ‘lrintl’, ‘lround’,
! ‘lroundf’, ‘lroundl’, ‘modf’, ‘modff’, ‘modfl’, ‘nan’, ‘nanf’, ‘nanl’,
! ‘nearbyint’, ‘nearbyintf’, ‘nearbyintl’, ‘nextafter’, ‘nextafterf’,
! ‘nextafterl’, ‘nexttoward’, ‘nexttowardf’, ‘nexttowardl’, ‘pow’, ‘powf’,
! ‘powl’, ‘remainder’, ‘remainderf’, ‘remainderl’, ‘remquo’, ‘remquof’,
! ‘remquol’, ‘rint’, ‘rintf’, ‘rintl’, ‘round’, ‘roundf’, ‘roundl’,
! ‘scalbln’, ‘scalblnf’, ‘scalblnl’, ‘scalbn’, ‘scalbnf’, ‘scalbnl’,
! ‘signbit’, ‘sin’, ‘sinf’, ‘sinh’, ‘sinhf’, ‘sinhl’, ‘sinl’, ‘sqrt’,
! ‘sqrtf’, ‘sqrtl’, ‘tan’, ‘tanf’, ‘tanh’, ‘tanhf’, ‘tanhl’, ‘tanl’,
! ‘tgamma’, ‘tgammaf’, ‘tgammal’, ‘trunc’, ‘truncf’, ‘truncl’ may be
  handled as built-in functions.  All these functions have corresponding
! versions prefixed with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.stdio’ module, the functions ‘fprintf’, ‘fputc’,
! ‘fputc_unlocked’, ‘fputs’, ‘fwrite’, ‘printf’, ‘puts’, ‘snprintf’,
! ‘sprintf’, ‘vfprintf’, ‘vprintf’, ‘vsnprintf’, ‘vsprintf’ may be handled
  as built-in functions.  All these functions have corresponding versions
! prefixed with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.stdlib’ module, the functions ‘abort’, ‘abs’,
! ‘aligned_alloc’, ‘alloca’, ‘calloc’, ‘exit’, ‘_Exit’, ‘free’, ‘labs’,
! ‘llabs’, ‘malloc’, ‘realloc’ may be handled as built-in functions.  All
! these functions have corresponding versions prefixed with ‘__builtin_’
! in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.string’ module, the functions ‘memchr’, ‘memcmp’,
! ‘memcpy’, ‘memmove’, ‘memset’, ‘strcat’, ‘strchr’, ‘strcmp’, ‘strcpy’,
! ‘strcspn’, ‘strdup’, ‘strlen’, ‘strncat’, ‘strncmp’, ‘strncpy’,
! ‘strpbrk’, ‘strrchr’, ‘strspn’, ‘strstr’ may be handled as built-in
  functions.  All these functions have corresponding versions prefixed
! with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.time’ module, the function ‘strftime’ may be
  handled as a built-in function.  All these functions have corresponding
! versions prefixed with ‘__builtin_’ in the ‘gcc.builtins’ module.
  
!    In the ‘core.stdc.wctype’ module, the functions ‘iswalnum’,
! ‘iswalpha’, ‘iswblank’, ‘iswcntrl’, ‘iswdigit’, ‘iswgraph’, ‘iswlower’,
! ‘iswprint’, ‘iswpunct’, ‘iswspace’, ‘iswupper’, ‘iswxdigit’, ‘towlower’,
! ‘towupper’ may be handled as built-in functions.  All these functions
! have corresponding versions prefixed with ‘__builtin_’ in the
! ‘gcc.builtins’ module.
  
!    Within the ‘core.sys’ package for POSIX and platform definitions, the
! functions ‘putchar_unlocked’, ‘putc_unlocked’, ‘posix_memalign’, ‘ffs’,
! ‘strcasecmp’, ‘strncasecmp’, ‘stpcpy’, ‘stpncpy’, ‘strndup’, ‘strnlen’,
! ‘execl’, ‘execle’, ‘execlp’, ‘execv’, ‘execve’, ‘execvp’, ‘_exit’,
! ‘fork’ may be handled as built-in functions.  All these functions have
! corresponding versions prefixed with ‘__builtin_’ in the ‘gcc.builtins’
  module.
  
  
*************** in the C file.
*** 1394,1400 ****
  referred to as C11.  Prior versions, such as C99, C89, and K+R C, are
  not supported.
  
!    Assuming you have no file 'cstdio.c' or 'main.d', the commands
         cat > cstdio.c << @EOC
         int printf(const char*, ...);
         @EOC
--- 1394,1400 ----
  referred to as C11.  Prior versions, such as C99, C89, and K+R C, are
  not supported.
  
!    Assuming you have no file ‘cstdio.c’ or ‘main.d’, the commands
         cat > cstdio.c << @EOC
         int printf(const char*, ...);
         @EOC
*************** not supported.
*** 1403,1417 ****
         void main() { printf("Hello ImportC\n"); }
         @EOD
         gdc main.d -o main; ./main
!    will generate a program which will print 'Hello ImportC'.
  
     ImportC does not have a preprocessor.  It is designed to compile C
  files after they have been first run through the C preprocessor.  If the
! C file has a '.i' extension, the file is presumed to be already
  preprocessed.  Preprocessing can be run manually:
         gcc -E file.c > file.i
  
! ImportC collects all the '#define' macros from the preprocessor run when
  it is run automatically.  The macros that look like manifest constants,
  such as:
       #define COLOR 0x123456
--- 1403,1417 ----
         void main() { printf("Hello ImportC\n"); }
         @EOD
         gdc main.d -o main; ./main
!    will generate a program which will print ‘Hello ImportC’.
  
     ImportC does not have a preprocessor.  It is designed to compile C
  files after they have been first run through the C preprocessor.  If the
! C file has a ‘.i’ extension, the file is presumed to be already
  preprocessed.  Preprocessing can be run manually:
         gcc -E file.c > file.i
  
! ImportC collects all the ‘#define’ macros from the preprocessor run when
  it is run automatically.  The macros that look like manifest constants,
  such as:
       #define COLOR 0x123456
*************** macros.
*** 1424,1431 ****
  
     GNU D does not directly compile C files into modules that can be
  linked in with D code to form an executable.  When given a source file
! with the suffix '.c', the compiler driver program 'gdc' instead runs the
! subprogram 'cc1'.
  
       gdc file1.d file2.c // d21 file1.d -o file1.s
                           // cc1 file2.c -o file2.s
--- 1424,1431 ----
  
     GNU D does not directly compile C files into modules that can be
  linked in with D code to form an executable.  When given a source file
! with the suffix ‘.c’, the compiler driver program ‘gdc’ instead runs the
! subprogram ‘cc1’.
  
       gdc file1.d file2.c // d21 file1.d -o file1.s
                           // cc1 file2.c -o file2.s
*************** File: gdc.info,  Node: Inline Assembly,
*** 1439,1447 ****
  2.4 Inline Assembly
  ===================
  
! The 'asm' keyword allows you to embed assembler instructions within D
! code.  GNU D provides two forms of inline 'asm' statements.  A "basic
! 'asm'" statement is one with no operands, while an "extended 'asm'"
  statement includes one or more operands.
  
       asm FUNCTIONATTRIBUTES {
--- 1439,1447 ----
  2.4 Inline Assembly
  ===================
  
! The ‘asm’ keyword allows you to embed assembler instructions within D
! code.  GNU D provides two forms of inline ‘asm’ statements.  A “basic
! ‘asm’” statement is one with no operands, while an “extended ‘asm’”
  statement includes one or more operands.
  
       asm FUNCTIONATTRIBUTES {
*************** statement includes one or more operands.
*** 1458,1464 ****
  
  The extended form is preferred for mixing D and assembly language within
  a function, but to include assembly language in a function declared with
! the 'naked' attribute you must use basic 'asm'.
  
       uint incr (uint value)
       {
--- 1458,1464 ----
  
  The extended form is preferred for mixing D and assembly language within
  a function, but to include assembly language in a function declared with
! the ‘naked’ attribute you must use basic ‘asm’.
  
       uint incr (uint value)
       {
*************** the 'naked' attribute you must use basic
*** 1470,1476 ****
           return result;
       }
  
! Multiple assembler instructions can appear within an 'asm' block, or the
  instruction template can be a multi-line or concatenated string.  In
  both cases, GCC's optimizers won't discard or move any instruction
  within the statement block.
--- 1470,1476 ----
           return result;
       }
  
! Multiple assembler instructions can appear within an ‘asm’ block, or the
  instruction template can be a multi-line or concatenated string.  In
  both cases, GCC's optimizers won't discard or move any instruction
  within the statement block.
*************** within the statement block.
*** 1490,1496 ****
           return (flags & 0x0020_0000) != 0;
       }
  
! The instruction templates for both basic and extended 'asm' can be any
  expression that can be evaluated at compile-time to a string, not just
  string literals.
  
--- 1490,1496 ----
           return (flags & 0x0020_0000) != 0;
       }
  
! The instruction templates for both basic and extended ‘asm’ can be any
  expression that can be evaluated at compile-time to a string, not just
  string literals.
  
*************** File: gdc.info,  Node: Bit Operation Int
*** 1540,1546 ****
  ------------------------------
  
  The following functions are a collection of intrinsics that do bit-level
! operations, available by importing the 'core.bitop' module.
  
     Although most are named after x86 hardware instructions, it is not
  guaranteed that they will result in generating equivalent assembly on
--- 1540,1546 ----
  ------------------------------
  
  The following functions are a collection of intrinsics that do bit-level
! operations, available by importing the ‘core.bitop’ module.
  
     Although most are named after x86 hardware instructions, it is not
  guaranteed that they will result in generating equivalent assembly on
*************** result in hardware, then that will be us
*** 1550,1561 ****
   -- Function: int core.bitop.bsf (uint V)
   -- Function: int core.bitop.bsf (ulong V)
  
!      Scans the bits in V starting with bit '0', looking for the first
       set bit.  Returns the bit number of the first bit set.  The return
       value is undefined if V is zero.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_ctz'.
  
   -- Function: int core.bitop.bsr (uint V)
   -- Function: int core.bitop.bsr (ulong V)
--- 1550,1561 ----
   -- Function: int core.bitop.bsf (uint V)
   -- Function: int core.bitop.bsf (ulong V)
  
!      Scans the bits in V starting with bit ‘0’, looking for the first
       set bit.  Returns the bit number of the first bit set.  The return
       value is undefined if V is zero.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_ctz’.
  
   -- Function: int core.bitop.bsr (uint V)
   -- Function: int core.bitop.bsr (ulong V)
*************** result in hardware, then that will be us
*** 1628,1638 ****
   -- Function: uint core.bitop.bswap (uint X)
   -- Function: ulong core.bitop.bswap (ulong X)
  
!      Swaps the bytes in X end-to-end; for example, in a 4-byte 'uint',
!      byte '0' becomes byte '3', byte '1' becomes byte '2', etc.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_bswap'.
  
   -- Function: int core.bitop.popcnt (uint X)
   -- Function: int core.bitop.popcnt (ulong X)
--- 1628,1638 ----
   -- Function: uint core.bitop.bswap (uint X)
   -- Function: ulong core.bitop.bswap (ulong X)
  
!      Swaps the bytes in X end-to-end; for example, in a 4-byte ‘uint’,
!      byte ‘0’ becomes byte ‘3’, byte ‘1’ becomes byte ‘2’, etc.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_bswap’.
  
   -- Function: int core.bitop.popcnt (uint X)
   -- Function: int core.bitop.popcnt (ulong X)
*************** result in hardware, then that will be us
*** 1640,1646 ****
       Calculates the number of set bits in X.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_popcount'.
  
   -- Template: T core.bitop.rol (T)(const T VALUE, const uint COUNT)
   -- Template: T core.bitop.rol (uint COUNT, T)(const T VALUE)
--- 1640,1646 ----
       Calculates the number of set bits in X.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_popcount’.
  
   -- Template: T core.bitop.rol (T)(const T VALUE, const uint COUNT)
   -- Template: T core.bitop.rol (uint COUNT, T)(const T VALUE)
*************** File: gdc.info,  Node: Integer Overflow
*** 1666,1672 ****
  
  The following functions are a collection of intrinsics that implement
  integral arithmetic primitives that check for out-of-range results,
! available by importing the 'core.checkedint' module.
  
     In all intrinsics, the overflow is sticky, meaning a sequence of
  operations can be done and overflow need only be checked at the end.
--- 1666,1672 ----
  
  The following functions are a collection of intrinsics that implement
  integral arithmetic primitives that check for out-of-range results,
! available by importing the ‘core.checkedint’ module.
  
     In all intrinsics, the overflow is sticky, meaning a sequence of
  operations can be done and overflow need only be checked at the end.
*************** operations can be done and overflow need
*** 1678,1684 ****
       Add two signed integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_sadd_overflow'.
  
   -- Function: int core.checkedint.addu (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.addu (long X, long Y, ref bool
--- 1678,1684 ----
       Add two signed integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_sadd_overflow’.
  
   -- Function: int core.checkedint.addu (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.addu (long X, long Y, ref bool
*************** operations can be done and overflow need
*** 1687,1693 ****
       Add two unsigned integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_uadd_overflow'.
  
   -- Function: int core.checkedint.muls (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.muls (long X, long Y, ref bool
--- 1687,1693 ----
       Add two unsigned integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_uadd_overflow’.
  
   -- Function: int core.checkedint.muls (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.muls (long X, long Y, ref bool
*************** operations can be done and overflow need
*** 1696,1702 ****
       Multiply two signed integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_smul_overflow'.
  
   -- Function: int core.checkedint.mulu (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.mulu (long X, long Y, ref bool
--- 1696,1702 ----
       Multiply two signed integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_smul_overflow’.
  
   -- Function: int core.checkedint.mulu (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.mulu (long X, long Y, ref bool
*************** operations can be done and overflow need
*** 1705,1711 ****
       Multiply two unsigned integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_umul_overflow'.
  
   -- Function: int core.checkedint.negs (int X, ref bool OVERFLOW)
   -- Function: long core.checkedint.negs (long X, ref bool OVERFLOW)
--- 1705,1711 ----
       Multiply two unsigned integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_umul_overflow’.
  
   -- Function: int core.checkedint.negs (int X, ref bool OVERFLOW)
   -- Function: long core.checkedint.negs (long X, ref bool OVERFLOW)
*************** operations can be done and overflow need
*** 1722,1728 ****
       Substract two signed integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_ssub_overflow'.
  
   -- Function: int core.checkedint.subu (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.subu (long X, long Y, ref bool
--- 1722,1728 ----
       Substract two signed integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_ssub_overflow’.
  
   -- Function: int core.checkedint.subu (int X, int Y, ref bool OVERFLOW)
   -- Function: long core.checkedint.subu (long X, long Y, ref bool
*************** operations can be done and overflow need
*** 1731,1737 ****
       Substract two unsigned integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_usub_overflow'.
  
  
  File: gdc.info,  Node: Math Intrinsics,  Next: Variadic Intrinsics,  Prev: Integer Overflow Intrinsics,  Up: Intrinsics
--- 1731,1737 ----
       Substract two unsigned integers, checking for overflow.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_usub_overflow’.
  
  
  File: gdc.info,  Node: Math Intrinsics,  Next: Variadic Intrinsics,  Prev: Integer Overflow Intrinsics,  Up: Intrinsics
*************** File: gdc.info,  Node: Math Intrinsics,
*** 1740,1746 ****
  ---------------------
  
  The following functions are a collection of mathematical intrinsics,
! available by importing the 'core.math' module.
  
   -- Function: float core.math.cos (float x)
   -- Function: double core.math.cos (double x)
--- 1740,1746 ----
  ---------------------
  
  The following functions are a collection of mathematical intrinsics,
! available by importing the ‘core.math’ module.
  
   -- Function: float core.math.cos (float x)
   -- Function: double core.math.cos (double x)
*************** available by importing the 'core.math' m
*** 1750,1756 ****
       undefined if X is greater than 2^{64}.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_cos'.
  
   -- Function: float core.math.fabs (float x)
   -- Function: double core.math.fabs (double x)
--- 1750,1756 ----
       undefined if X is greater than 2^{64}.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_cos’.
  
   -- Function: float core.math.fabs (float x)
   -- Function: double core.math.fabs (double x)
*************** available by importing the 'core.math' m
*** 1759,1765 ****
       Compute the absolute value of X.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_fabs'.
  
   -- Function: float core.math.ldexp (float n, int exp)
   -- Function: double core.math.ldexp (double n, int exp)
--- 1759,1765 ----
       Compute the absolute value of X.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_fabs’.
  
   -- Function: float core.math.ldexp (float n, int exp)
   -- Function: double core.math.ldexp (double n, int exp)
*************** available by importing the 'core.math' m
*** 1768,1797 ****
       Compute n * 2^{exp}.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_ldexp'.
  
   -- Function: float core.math.rint (float x)
   -- Function: double core.math.rint (double x)
   -- Function: real core.math.rint (real x)
  
       Rounds X to the nearest integer value, using the current rounding
!      mode.  If the return value is not equal to X, the 'FE_INEXACT'
!      exception is raised.  'nearbyint' performs the same operation, but
!      does not set the 'FE_INEXACT' exception.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_rint'.
  
   -- Function: float core.math.rndtol (float x)
   -- Function: double core.math.rndtol (double x)
   -- Function: real core.math.rndtol (real x)
  
       Returns X rounded to a long value using the current rounding mode.
!      If the integer value of X is greater than 'long.max', the result is
       indeterminate.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_llround'.
  
   -- Function: float core.math.sin (float x)
   -- Function: double core.math.sin (double x)
--- 1768,1797 ----
       Compute n * 2^{exp}.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_ldexp’.
  
   -- Function: float core.math.rint (float x)
   -- Function: double core.math.rint (double x)
   -- Function: real core.math.rint (real x)
  
       Rounds X to the nearest integer value, using the current rounding
!      mode.  If the return value is not equal to X, the ‘FE_INEXACT’
!      exception is raised.  ‘nearbyint’ performs the same operation, but
!      does not set the ‘FE_INEXACT’ exception.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_rint’.
  
   -- Function: float core.math.rndtol (float x)
   -- Function: double core.math.rndtol (double x)
   -- Function: real core.math.rndtol (real x)
  
       Returns X rounded to a long value using the current rounding mode.
!      If the integer value of X is greater than ‘long.max’, the result is
       indeterminate.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_llround’.
  
   -- Function: float core.math.sin (float x)
   -- Function: double core.math.sin (double x)
*************** available by importing the 'core.math' m
*** 1801,1807 ****
       undefined if X is greater than 2^{64}.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_sin'.
  
   -- Function: float core.math.sqrt (float x)
   -- Function: double core.math.sqrt (double x)
--- 1801,1807 ----
       undefined if X is greater than 2^{64}.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_sin’.
  
   -- Function: float core.math.sqrt (float x)
   -- Function: double core.math.sqrt (double x)
*************** available by importing the 'core.math' m
*** 1810,1816 ****
       Compute the sqrt of X.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_sqrt'.
  
   -- Template: T core.math.toPrec (T)(float f)
   -- Template: T core.math.toPrec (T)(double f)
--- 1810,1816 ----
       Compute the sqrt of X.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_sqrt’.
  
   -- Template: T core.math.toPrec (T)(float f)
   -- Template: T core.math.toPrec (T)(double f)
*************** available by importing the 'core.math' m
*** 1819,1827 ****
       Round F to a specific precision.
  
       In floating-point operations, D language types specify only a
!      minimum precision, not a maximum.  The 'toPrec' function forces
       rounding of the argument F to the precision of the specified
!      floating point type 'T'.  The rounding mode used is inevitably
       target-dependent, but will be done in a way to maximize accuracy.
       In most cases, the default is round-to-nearest.
  
--- 1819,1827 ----
       Round F to a specific precision.
  
       In floating-point operations, D language types specify only a
!      minimum precision, not a maximum.  The ‘toPrec’ function forces
       rounding of the argument F to the precision of the specified
!      floating point type ‘T’.  The rounding mode used is inevitably
       target-dependent, but will be done in a way to maximize accuracy.
       In most cases, the default is round-to-nearest.
  
*************** File: gdc.info,  Node: Variadic Intrinsi
*** 1832,1852 ****
  -------------------------
  
  The following functions are a collection of variadic intrinsics,
! available by importing the 'core.stdc.stdarg' module.
  
   -- Template: void core.stdc.stdarg.va_arg (T)(ref va_list ap, ref T
            parmn)
  
!      Retrieve and store in PARMN the next value from the 'va_list' AP
!      that is of type 'T'.
  
       This intrinsic is equivalent to writing the following:
            parmn = __builtin_va_arg (ap, T);
  
   -- Template: T core.stdc.stdarg.va_arg (T)(ref va_list ap)
  
!      Retrieve and return the next value from the 'va_list' AP that is of
!      type 'T'.
  
       This intrinsic is equivalent to writing the following:
            result = __builtin_va_arg (ap, T);
--- 1832,1852 ----
  -------------------------
  
  The following functions are a collection of variadic intrinsics,
! available by importing the ‘core.stdc.stdarg’ module.
  
   -- Template: void core.stdc.stdarg.va_arg (T)(ref va_list ap, ref T
            parmn)
  
!      Retrieve and store in PARMN the next value from the ‘va_list’ AP
!      that is of type ‘T’.
  
       This intrinsic is equivalent to writing the following:
            parmn = __builtin_va_arg (ap, T);
  
   -- Template: T core.stdc.stdarg.va_arg (T)(ref va_list ap)
  
!      Retrieve and return the next value from the ‘va_list’ AP that is of
!      type ‘T’.
  
       This intrinsic is equivalent to writing the following:
            result = __builtin_va_arg (ap, T);
*************** available by importing the 'core.stdc.st
*** 1857,1870 ****
       Make a copy of SRC in its current state and store to DEST.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_va_copy'.
  
   -- Function: void core.stdc.stdarg.va_end (va_list ap)
  
       Destroy AP so that it is no longer useable.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_va_end'.
  
   -- Template: void core.stdc.stdarg.va_start (T)(out va_list ap, ref T
            parmn)
--- 1857,1870 ----
       Make a copy of SRC in its current state and store to DEST.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_va_copy’.
  
   -- Function: void core.stdc.stdarg.va_end (va_list ap)
  
       Destroy AP so that it is no longer useable.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_va_end’.
  
   -- Template: void core.stdc.stdarg.va_start (T)(out va_list ap, ref T
            parmn)
*************** available by importing the 'core.stdc.st
*** 1873,1879 ****
       arguments that follow the named argument PARMN.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_va_start'.
  
  
  File: gdc.info,  Node: Volatile Intrinsics,  Next: CTFE Intrinsics,  Prev: Variadic Intrinsics,  Up: Intrinsics
--- 1873,1879 ----
       arguments that follow the named argument PARMN.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_va_start’.
  
  
  File: gdc.info,  Node: Volatile Intrinsics,  Next: CTFE Intrinsics,  Prev: Variadic Intrinsics,  Up: Intrinsics
*************** File: gdc.info,  Node: Volatile Intrinsi
*** 1882,1888 ****
  -------------------------
  
  The following functions are a collection of intrinsics for volatile
! operations, available by importing the 'core.volatile' module.
  
     Calls to them are guaranteed to not be removed (as dead assignment
  elimination or presumed to have no effect) or reordered in the same
--- 1882,1888 ----
  -------------------------
  
  The following functions are a collection of intrinsics for volatile
! operations, available by importing the ‘core.volatile’ module.
  
     Calls to them are guaranteed to not be removed (as dead assignment
  elimination or presumed to have no effect) or reordered in the same
*************** values from the same location due to ext
*** 1900,1906 ****
  
     These functions will, when possible, do the load/store as a single
  operation.  In general, this is possible when the size of the operation
! is less than or equal to '(void*).sizeof', although some targets may
  support larger operations.  If the load/store cannot be done as a single
  operation, multiple smaller operations will be used.
  
--- 1900,1906 ----
  
     These functions will, when possible, do the load/store as a single
  operation.  In general, this is possible when the size of the operation
! is less than or equal to ‘(void*).sizeof’, although some targets may
  support larger operations.  If the load/store cannot be done as a single
  operation, multiple smaller operations will be used.
  
*************** suppport.
*** 1952,1958 ****
       Calculates e^x.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_exp'.
  
   -- Function: float std.math.exponential.expm1 (float x)
   -- Function: double std.math.exponential.expm1 (double x)
--- 1952,1958 ----
       Calculates e^x.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_exp’.
  
   -- Function: float std.math.exponential.expm1 (float x)
   -- Function: double std.math.exponential.expm1 (double x)
*************** suppport.
*** 1961,1967 ****
       Calculates e^x-1.0.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_expm1'.
  
   -- Function: float std.math.exponential.exp2 (float x)
   -- Function: double std.math.exponential.exp2 (double x)
--- 1961,1967 ----
       Calculates e^x-1.0.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_expm1’.
  
   -- Function: float std.math.exponential.exp2 (float x)
   -- Function: double std.math.exponential.exp2 (double x)
*************** suppport.
*** 1970,1976 ****
       Calculates 2^x.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_exp2'.
  
   -- Function: float std.math.exponential.log (float x)
   -- Function: double std.math.exponential.log (double x)
--- 1970,1976 ----
       Calculates 2^x.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_exp2’.
  
   -- Function: float std.math.exponential.log (float x)
   -- Function: double std.math.exponential.log (double x)
*************** suppport.
*** 1979,1985 ****
       Calculate the natural logarithm of X.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_log'.
  
   -- Function: float std.math.exponential.log10 (float x)
   -- Function: double std.math.exponential.log10 (double x)
--- 1979,1985 ----
       Calculate the natural logarithm of X.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_log’.
  
   -- Function: float std.math.exponential.log10 (float x)
   -- Function: double std.math.exponential.log10 (double x)
*************** suppport.
*** 1988,1994 ****
       Calculates the base-10 logarithm of X.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_log10'.
  
   -- Function: float std.math.exponential.log2 (float x)
   -- Function: double std.math.exponential.log2 (double x)
--- 1988,1994 ----
       Calculates the base-10 logarithm of X.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_log10’.
  
   -- Function: float std.math.exponential.log2 (float x)
   -- Function: double std.math.exponential.log2 (double x)
*************** suppport.
*** 1997,2003 ****
       Calculates the base-2 logarithm of X.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_log2'.
  
   -- Template: Largest!(F, G) std.math.exponential.pow (F, G) (F x, G y)
   -- Template: real std.math.exponential.pow (I, F)(I x, F y)
--- 1997,2003 ----
       Calculates the base-2 logarithm of X.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_log2’.
  
   -- Template: Largest!(F, G) std.math.exponential.pow (F, G) (F x, G y)
   -- Template: real std.math.exponential.pow (I, F)(I x, F y)
*************** suppport.
*** 2005,2040 ****
       Calculates x^y, where Y is a float.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_pow'.
  
   -- Template: F std.math.exponential.pow (F, G) (F x, G n)
  
       Calculates x^n, where N is an integer.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_powi'.
  
   -- Function: real std.math.operations.fma (real x, real y, real z)
  
!      Returns '(x * y) + z', rounding only once according to the current
       rounding mode.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_fma'.
  
   -- Template: F std.math.operations.fmax (F)(const F x, const F y)
  
       Returns the larger of X and Y.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_fmax'.
  
   -- Template: F std.math.operations.fmin (F)(const F x, const F y)
  
       Returns the smaller of X and Y.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_fmin'.
  
   -- Function: float std.math.rounding.ceil (float x)
   -- Function: double std.math.rounding.ceil (double x)
--- 2005,2040 ----
       Calculates x^y, where Y is a float.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_pow’.
  
   -- Template: F std.math.exponential.pow (F, G) (F x, G n)
  
       Calculates x^n, where N is an integer.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_powi’.
  
   -- Function: real std.math.operations.fma (real x, real y, real z)
  
!      Returns ‘(x * y) + z’, rounding only once according to the current
       rounding mode.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_fma’.
  
   -- Template: F std.math.operations.fmax (F)(const F x, const F y)
  
       Returns the larger of X and Y.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_fmax’.
  
   -- Template: F std.math.operations.fmin (F)(const F x, const F y)
  
       Returns the smaller of X and Y.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_fmin’.
  
   -- Function: float std.math.rounding.ceil (float x)
   -- Function: double std.math.rounding.ceil (double x)
*************** suppport.
*** 2044,2050 ****
       positive infinity).
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_ceil'.
  
   -- Function: float std.math.rounding.floor (float x)
   -- Function: double std.math.rounding.floor (double x)
--- 2044,2050 ----
       positive infinity).
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_ceil’.
  
   -- Function: float std.math.rounding.floor (float x)
   -- Function: double std.math.rounding.floor (double x)
*************** suppport.
*** 2054,2060 ****
       negative infinity).
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_floor'.
  
   -- Function: real std.math.rounding.round (real x)
  
--- 2054,2060 ----
       negative infinity).
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_floor’.
  
   -- Function: real std.math.rounding.round (real x)
  
*************** suppport.
*** 2063,2104 ****
       away from zero.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_round'.
  
   -- Function: real std.math.rounding.trunc (real x)
  
       Returns the integer portion of X, dropping the fractional portion.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_trunc'.
  
   -- Template: R std.math.traits.copysign (R, X)(R to, X from)
  
       Returns a value composed of TO with FROM's sign bit.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_copysign'.
  
   -- Template: bool std.math.traits.isFinite (X)(X x)
  
       Returns true if X is finite.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_isfinite'.
  
   -- Template: bool std.math.traits.isInfinity (X)(X x)
  
       Returns true if X is infinite.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_isinf'.
  
   -- Template: bool std.math.traits.isNaN (X)(X x)
  
       Returns true if X is NaN.
  
       This function is evaluated during CTFE as the GCC built-in function
!      '__builtin_isnan'.
  
   -- Function: float std.math.trigoometry.tan (float x)
   -- Function: double std.math.trigoometry.tan (double x)
--- 2063,2104 ----
       away from zero.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_round’.
  
   -- Function: real std.math.rounding.trunc (real x)
  
       Returns the integer portion of X, dropping the fractional portion.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_trunc’.
  
   -- Template: R std.math.traits.copysign (R, X)(R to, X from)
  
       Returns a value composed of TO with FROM's sign bit.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_copysign’.
  
   -- Template: bool std.math.traits.isFinite (X)(X x)
  
       Returns true if X is finite.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_isfinite’.
  
   -- Template: bool std.math.traits.isInfinity (X)(X x)
  
       Returns true if X is infinite.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_isinf’.
  
   -- Template: bool std.math.traits.isNaN (X)(X x)
  
       Returns true if X is NaN.
  
       This function is evaluated during CTFE as the GCC built-in function
!      ‘__builtin_isnan’.
  
   -- Function: float std.math.trigoometry.tan (float x)
   -- Function: double std.math.trigoometry.tan (double x)
*************** suppport.
*** 2107,2113 ****
       Returns tangent of X, where X is in radians.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_tan'.
  
  
  File: gdc.info,  Node: Predefined Pragmas,  Next: Predefined Versions,  Prev: Intrinsics,  Up: D Implementation
--- 2107,2113 ----
       Returns tangent of X, where X is in radians.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_tan’.
  
  
  File: gdc.info,  Node: Predefined Pragmas,  Next: Predefined Versions,  Prev: Intrinsics,  Up: D Implementation
*************** File: gdc.info,  Node: Predefined Pragma
*** 2115,2121 ****
  2.6 Predefined Pragmas
  ======================
  
! The 'pragma' operator is used as a way to pass special information to
  the implementation and allow the addition of vendor specific extensions.
  The standard predefined pragmas are documented by the D language
  specification hosted at
--- 2115,2121 ----
  2.6 Predefined Pragmas
  ======================
  
! The ‘pragma’ operator is used as a way to pass special information to
  the implementation and allow the addition of vendor specific extensions.
  The standard predefined pragmas are documented by the D language
  specification hosted at
*************** specification hosted at
*** 2123,2175 ****
  must recognize, but is free to ignore any pragma in this list.
  
     Where a pragma is ignored, the GNU D compiler will emit a warning
! when the '-Wunknown-pragmas' option is seen on the command-line.
  
! 'pragma(crt_constructor)'
!      'pragma(crt_constructor)' annotates a function so it is run after
       the C runtime library is initialized and before the D runtime
       library is initialized.  Functions with this pragma must return
!      'void'.
            pragma(crt_constructor) void init() { }
  
! 'pragma(crt_destructor)'
!      'pragma(crt_destructor)' annotates a function so it is run after
       the D runtime library is terminated and before the C runtime
!      library is terminated.  Calling 'exit' function also causes the
       annotated functions to run.  Functions with this pragma must return
!      'void'.
            pragma(crt_destructor) void init() { }
  
! 'pragma(inline)'
! 'pragma(inline, false)'
! 'pragma(inline, true)'
!      'pragma(inline)' affects whether functions are declared inlined or
       not.  The pragma takes two forms.  In the first form, inlining is
       controlled by the command-line options for inlining.
  
!      Functions annotated with 'pragma(inline, false)' are marked
!      uninlinable.  Functions annotated with 'pragma(inline, true)' are
       always inlined.
  
! 'pragma(lib)'
       This pragma is accepted, but has no effect.
            pragma(lib, "advapi32");
  
! 'pragma(linkerDirective)'
       This pragma is accepted, but has no effect.
            pragma(linkerDirective, "/FAILIFMISMATCH:_ITERATOR_DEBUG_LEVEL=2");
  
! 'pragma(mangle)'
!      'pragma(mangle, "symbol_name")' overrides the default mangling for
       a function or variable symbol.  The symbol name can be any
       expression that must evaluate at compile time to a string literal.
       This enables linking to a symbol which is a D keyword, since an
       identifier cannot be a keyword.
  
       Targets are free to apply a prefix to the user label of the symbol
!      name in assembly.  For example, on 'x86_64-apple-darwin',
!      'symbol_name' would produce '_symbol_name'.  If the mangle string
!      begins with '*', then 'pragma(mangle)' will output the rest of the
       string unchanged.
  
            pragma(mangle, "body")
--- 2123,2175 ----
  must recognize, but is free to ignore any pragma in this list.
  
     Where a pragma is ignored, the GNU D compiler will emit a warning
! when the ‘-Wunknown-pragmas’ option is seen on the command-line.
  
! ‘pragma(crt_constructor)’
!      ‘pragma(crt_constructor)’ annotates a function so it is run after
       the C runtime library is initialized and before the D runtime
       library is initialized.  Functions with this pragma must return
!      ‘void’.
            pragma(crt_constructor) void init() { }
  
! ‘pragma(crt_destructor)’
!      ‘pragma(crt_destructor)’ annotates a function so it is run after
       the D runtime library is terminated and before the C runtime
!      library is terminated.  Calling ‘exit’ function also causes the
       annotated functions to run.  Functions with this pragma must return
!      ‘void’.
            pragma(crt_destructor) void init() { }
  
! ‘pragma(inline)’
! ‘pragma(inline, false)’
! ‘pragma(inline, true)’
!      ‘pragma(inline)’ affects whether functions are declared inlined or
       not.  The pragma takes two forms.  In the first form, inlining is
       controlled by the command-line options for inlining.
  
!      Functions annotated with ‘pragma(inline, false)’ are marked
!      uninlinable.  Functions annotated with ‘pragma(inline, true)’ are
       always inlined.
  
! ‘pragma(lib)’
       This pragma is accepted, but has no effect.
            pragma(lib, "advapi32");
  
! ‘pragma(linkerDirective)’
       This pragma is accepted, but has no effect.
            pragma(linkerDirective, "/FAILIFMISMATCH:_ITERATOR_DEBUG_LEVEL=2");
  
! ‘pragma(mangle)’
!      ‘pragma(mangle, "symbol_name")’ overrides the default mangling for
       a function or variable symbol.  The symbol name can be any
       expression that must evaluate at compile time to a string literal.
       This enables linking to a symbol which is a D keyword, since an
       identifier cannot be a keyword.
  
       Targets are free to apply a prefix to the user label of the symbol
!      name in assembly.  For example, on ‘x86_64-apple-darwin’,
!      ‘symbol_name’ would produce ‘_symbol_name’.  If the mangle string
!      begins with ‘*’, then ‘pragma(mangle)’ will output the rest of the
       string unchanged.
  
            pragma(mangle, "body")
*************** when the '-Wunknown-pragmas' option is s
*** 2178,2202 ****
            pragma(mangle, "function")
            extern(C++) struct _function {}
  
! 'pragma(msg)'
!      'pragma(msg, "message")' causes the compiler to print an
!      informational message with the text 'message'.  The pragma accepts
       multiple arguments, each to which is evaluated at compile time and
       then all are combined into one concatenated message.
            pragma(msg, "compiling...", 6, 1.0); // prints "compiling...61.0"
  
! 'pragma(printf)'
! 'pragma(scanf)'
  
!      'pragma(printf)' and 'pragma(scanf)' specifies that a function
!      declaration with 'printf' or 'scanf' style arguments that should be
       type-checked against a format string.
  
!      A printf-like or scanf-like function can either be an 'extern(C)'
!      or 'extern(C++)' function with a FORMAT parameter accepting a
!      pointer to a 0-terminated 'char' string, immediately followed by
!      either a '...' variadic argument list or a parameter of type
!      'va_list' as the last parameter.
  
            extern(C):
            pragma(printf)
--- 2178,2202 ----
            pragma(mangle, "function")
            extern(C++) struct _function {}
  
! ‘pragma(msg)’
!      ‘pragma(msg, "message")’ causes the compiler to print an
!      informational message with the text ‘message’.  The pragma accepts
       multiple arguments, each to which is evaluated at compile time and
       then all are combined into one concatenated message.
            pragma(msg, "compiling...", 6, 1.0); // prints "compiling...61.0"
  
! ‘pragma(printf)’
! ‘pragma(scanf)’
  
!      ‘pragma(printf)’ and ‘pragma(scanf)’ specifies that a function
!      declaration with ‘printf’ or ‘scanf’ style arguments that should be
       type-checked against a format string.
  
!      A printf-like or scanf-like function can either be an ‘extern(C)’
!      or ‘extern(C++)’ function with a FORMAT parameter accepting a
!      pointer to a 0-terminated ‘char’ string, immediately followed by
!      either a ‘...’ variadic argument list or a parameter of type
!      ‘va_list’ as the last parameter.
  
            extern(C):
            pragma(printf)
*************** when the '-Wunknown-pragmas' option is s
*** 2205,2211 ****
            pragma(scanf)
            int vscanf(scope const char* format, va_list arg);
  
! 'pragma(startaddress)'
       This pragma is accepted, but has no effect.
            void foo() { }
            pragma(startaddress, foo);
--- 2205,2211 ----
            pragma(scanf)
            int vscanf(scope const char* format, va_list arg);
  
! ‘pragma(startaddress)’
       This pragma is accepted, but has no effect.
            void foo() { }
            pragma(startaddress, foo);
*************** standard, common, and target-specific.
*** 2222,2228 ****
  
     Predefined version identifiers from this list cannot be set from the
  command line or from version statements.  This prevents things like both
! 'Windows' and 'linux' being simultaneously set.
  
  * Menu:
  
--- 2222,2228 ----
  
     Predefined version identifiers from this list cannot be set from the
  command line or from version statements.  This prevents things like both
! ‘Windows’ and ‘linux’ being simultaneously set.
  
  * Menu:
  
*************** The standard predefined versions are doc
*** 2240,2348 ****
  specification hosted at
  <https://dlang.org/spec/version.html#predefined-versions>.
  
! 'all'
! 'none'
!      Version 'none' is never defined; used to just disable a section of
!      code.  Version 'all' is always defined; used as the opposite of
!      'none'.
  
! 'BigEndian'
! 'LittleEndian'
       These versions reflect the byte order of multi-byte data in memory.
!      'LittleEndian' is set when the least significant byte is first.
!      'BigEndian' is set when the most significant byte is first.
  
! 'CRuntime_Bionic'
! 'CRuntime_Glibc'
! 'CRuntime_Microsoft'
! 'CRuntime_Musl'
! 'CRuntime_Newlib'
! 'CRuntime_UClibc'
  
       These versions reflect which standard C library is being linked in.
!      'CRuntime_Bionic' is set when Bionic is the default C library.
!      'CRuntime_Glibc' is set when GLIBC is the default C library.
!      'CRuntime_Microsoft' is set when MSVCRT is the default C library.
!      'CRuntime_Musl' is set when musl is the default C library.
!      'CRuntime_Newlib' is set when Newlib is the default C library.
!      'CRuntime_UClibc' is set when uClibc is the default C library.
  
! 'CppRuntime_Gcc'
       This version is defined when the standard C++ library being linked
!      in is 'libstdc++'.
  
! 'D_BetterC'
       This version is defined when the standard D libraries are not being
       implicitly linked in.  This also implies that features of the D
       language that rely on exceptions, module information, or run-time
!      type information are disabled as well.  Enabled by '-fno-druntime'.
  
! 'D_Coverage'
       This version is defined when code coverage analysis instrumentation
!      is being generated.  Enabled by '-ftest-coverage'.
  
! 'D_Ddoc'
       This version is defined when Ddoc documentation is being generated.
!      Enabled by '-fdoc'.
  
! 'D_Exceptions'
       This version is defined when exception handling is supported.
!      Disabled by '-fno-exceptions'.
  
! 'D_HardFloat'
! 'D_SoftFloat'
       These versions reflect the floating-point ABI in use by the target.
!      'D_HardFloat' is set when the target hardware has a floating-point
!      unit.  'D_SoftFloat' is set when the target hardware does not have
       a floating-point unit.
  
! 'D_Invariants'
       This version is defined when checks are being emitted for class
!      invariants and struct invariants.  Enabled by '-finvariants'.
  
! 'D_LP64'
       This version is defined when pointers are 64-bits.  Not to be
!      confused with with C's '__LP64__' model.
  
! 'D_ModuleInfo'
       This version is defined when run-time module information (also
!      known as 'ModuleInfo') is supported.  Disabled by
!      '-fno-moduleinfo'.
  
! 'D_NoBoundsChecks'
       This version is defined when array bounds checks are disabled.
!      Enabled by '-fno-bounds-checks'.
  
! 'D_Optimized'
       This version is defined in all optimizing compilations.
  
! 'D_PIC'
       This version is defined when position-independent code is being
!      generated.  Enabled by '-fPIC'.
  
! 'D_PIE'
       This version is defined when position-independent code that can be
       only linked into executables is being generated.  Enabled by
!      '-fPIE'.
  
! 'D_PreConditions'
!      This version is defined when checks are being emitted for 'in'
!      contracts.  Disabled by '-fno-preconditions'.
  
! 'D_PostConditions'
!      This version is defined when checks are being emitted for 'out'
!      contracts.  Disabled by '-fno-postconditions'.
  
! 'D_TypeInfo'
       This version is defined when run-time type information (also known
!      as 'TypeInfo') is supported.  Disabled by '-fno-rtti'.
  
! 'D_Version2'
       This version defined when this is a D version 2 compiler.
  
! 'unittest'
!      This version is defined when the 'unittest' code is being compiled
!      in.  Enabled by '-funittest'.
  
  
  File: gdc.info,  Node: Common Predefined Versions,  Next: Target Predefined Versions,  Prev: Standard Predefined Versions,  Up: Predefined Versions
--- 2240,2348 ----
  specification hosted at
  <https://dlang.org/spec/version.html#predefined-versions>.
  
! ‘all’
! ‘none’
!      Version ‘none’ is never defined; used to just disable a section of
!      code.  Version ‘all’ is always defined; used as the opposite of
!      ‘none’.
  
! ‘BigEndian’
! ‘LittleEndian’
       These versions reflect the byte order of multi-byte data in memory.
!      ‘LittleEndian’ is set when the least significant byte is first.
!      ‘BigEndian’ is set when the most significant byte is first.
  
! ‘CRuntime_Bionic’
! ‘CRuntime_Glibc’
! ‘CRuntime_Microsoft’
! ‘CRuntime_Musl’
! ‘CRuntime_Newlib’
! ‘CRuntime_UClibc’
  
       These versions reflect which standard C library is being linked in.
!      ‘CRuntime_Bionic’ is set when Bionic is the default C library.
!      ‘CRuntime_Glibc’ is set when GLIBC is the default C library.
!      ‘CRuntime_Microsoft’ is set when MSVCRT is the default C library.
!      ‘CRuntime_Musl’ is set when musl is the default C library.
!      ‘CRuntime_Newlib’ is set when Newlib is the default C library.
!      ‘CRuntime_UClibc’ is set when uClibc is the default C library.
  
! ‘CppRuntime_Gcc’
       This version is defined when the standard C++ library being linked
!      in is ‘libstdc++’.
  
! ‘D_BetterC’
       This version is defined when the standard D libraries are not being
       implicitly linked in.  This also implies that features of the D
       language that rely on exceptions, module information, or run-time
!      type information are disabled as well.  Enabled by ‘-fno-druntime’.
  
! ‘D_Coverage’
       This version is defined when code coverage analysis instrumentation
!      is being generated.  Enabled by ‘-ftest-coverage’.
  
! ‘D_Ddoc’
       This version is defined when Ddoc documentation is being generated.
!      Enabled by ‘-fdoc’.
  
! ‘D_Exceptions’
       This version is defined when exception handling is supported.
!      Disabled by ‘-fno-exceptions’.
  
! ‘D_HardFloat’
! ‘D_SoftFloat’
       These versions reflect the floating-point ABI in use by the target.
!      ‘D_HardFloat’ is set when the target hardware has a floating-point
!      unit.  ‘D_SoftFloat’ is set when the target hardware does not have
       a floating-point unit.
  
! ‘D_Invariants’
       This version is defined when checks are being emitted for class
!      invariants and struct invariants.  Enabled by ‘-finvariants’.
  
! ‘D_LP64’
       This version is defined when pointers are 64-bits.  Not to be
!      confused with with C's ‘__LP64__’ model.
  
! ‘D_ModuleInfo’
       This version is defined when run-time module information (also
!      known as ‘ModuleInfo’) is supported.  Disabled by
!      ‘-fno-moduleinfo’.
  
! ‘D_NoBoundsChecks’
       This version is defined when array bounds checks are disabled.
!      Enabled by ‘-fno-bounds-checks’.
  
! ‘D_Optimized’
       This version is defined in all optimizing compilations.
  
! ‘D_PIC’
       This version is defined when position-independent code is being
!      generated.  Enabled by ‘-fPIC’.
  
! ‘D_PIE’
       This version is defined when position-independent code that can be
       only linked into executables is being generated.  Enabled by
!      ‘-fPIE’.
  
! ‘D_PreConditions’
!      This version is defined when checks are being emitted for ‘in’
!      contracts.  Disabled by ‘-fno-preconditions’.
  
! ‘D_PostConditions’
!      This version is defined when checks are being emitted for ‘out’
!      contracts.  Disabled by ‘-fno-postconditions’.
  
! ‘D_TypeInfo’
       This version is defined when run-time type information (also known
!      as ‘TypeInfo’) is supported.  Disabled by ‘-fno-rtti’.
  
! ‘D_Version2’
       This version defined when this is a D version 2 compiler.
  
! ‘unittest’
!      This version is defined when the ‘unittest’ code is being compiled
!      in.  Enabled by ‘-funittest’.
  
  
  File: gdc.info,  Node: Common Predefined Versions,  Next: Target Predefined Versions,  Prev: Standard Predefined Versions,  Up: Predefined Versions
*************** File: gdc.info,  Node: Common Predefined
*** 2352,2383 ****
  
  The common predefined macros are GNU D extensions.  They are available
  with the same meanings regardless of the machine or operating system on
! which you are using GNU D. Their names all start with 'GNU'.
  
! 'GNU'
       This version is defined by the GNU D compiler.  If all you need to
       know is whether or not your D program is being compiled by GDC, or
!      a non-GDC compiler, you can simply test 'version(GNU)'.
  
! 'GNU_DWARF2_Exceptions'
! 'GNU_SEH_Exceptions'
! 'GNU_SjLj_Exceptions'
       These versions reflect the mechanism that will be used for
!      exception handling by the target.  'GNU_DWARF2_Exceptions' is
       defined when the target uses DWARF 2 exceptions.
!      'GNU_SEH_Exceptions' is defined when the target uses SEH
!      exceptions.  'GNU_SjLj_Exceptions' is defined when the target uses
!      the 'setjmp'/'longjmp'-based exception handling scheme.
  
! 'GNU_EMUTLS'
       This version is defined if the target does not support thread-local
       storage, and an emulation layer is used instead.
  
! 'GNU_InlineAsm'
!      This version is defined when 'asm' statements use GNU D style
       syntax.  (*note Inline Assembly::)
  
! 'GNU_StackGrowsDown'
       This version is defined if pushing a word onto the stack moves the
       stack pointer to a smaller address, and is undefined otherwise.
  
--- 2352,2383 ----
  
  The common predefined macros are GNU D extensions.  They are available
  with the same meanings regardless of the machine or operating system on
! which you are using GNU D. Their names all start with ‘GNU’.
  
! ‘GNU’
       This version is defined by the GNU D compiler.  If all you need to
       know is whether or not your D program is being compiled by GDC, or
!      a non-GDC compiler, you can simply test ‘version(GNU)’.
  
! ‘GNU_DWARF2_Exceptions’
! ‘GNU_SEH_Exceptions’
! ‘GNU_SjLj_Exceptions’
       These versions reflect the mechanism that will be used for
!      exception handling by the target.  ‘GNU_DWARF2_Exceptions’ is
       defined when the target uses DWARF 2 exceptions.
!      ‘GNU_SEH_Exceptions’ is defined when the target uses SEH
!      exceptions.  ‘GNU_SjLj_Exceptions’ is defined when the target uses
!      the ‘setjmp’/‘longjmp’-based exception handling scheme.
  
! ‘GNU_EMUTLS’
       This version is defined if the target does not support thread-local
       storage, and an emulation layer is used instead.
  
! ‘GNU_InlineAsm’
!      This version is defined when ‘asm’ statements use GNU D style
       syntax.  (*note Inline Assembly::)
  
! ‘GNU_StackGrowsDown’
       This version is defined if pushing a word onto the stack moves the
       stack pointer to a smaller address, and is undefined otherwise.
  
*************** The D compiler normally predefines sever
*** 2391,2501 ****
  type of system and machine is in use.  They are obviously different on
  each target supported by GCC.
  
! 'AArch64'
       Version relating to the AArch64 family of processors.
  
! 'Android'
       Version relating to the Android platform.
  
! 'ARM'
! 'ARM_HardFloat'
! 'ARM_SoftFloat'
! 'ARM_SoftFP'
! 'ARM_Thumb'
       Versions relating to the ARM family of processors.
  
! 'Cygwin'
       Version relating to the Cygwin environment.
  
! 'darwin'
!      Deprecated; use 'OSX' instead.
  
! 'DragonFlyBSD'
       Versions relating to DragonFlyBSD systems.
  
! 'FreeBSD'
! 'FreeBSD_9'
! 'FreeBSD_10'
! 'FreeBSD_11'
! 'FreeBSD_...'
       Versions relating to FreeBSD systems.  The FreeBSD major version
       number is inferred from the target triplet.
  
! 'HPPA'
! 'HPPA64'
       Versions relating to the HPPA family of processors.
  
! 'Hurd'
       Version relating to GNU Hurd systems.
  
! 'linux'
       Version relating to Linux systems.
  
! 'MinGW'
       Version relating to the MinGW environment.
  
! 'MIPS32'
! 'MIPS64'
! 'MIPS_EABI'
! 'MIPS_HardFloat'
! 'MIPS_N32'
! 'MIPS_N64'
! 'MIPS_O32'
! 'MIPS_O64'
! 'MIPS_SoftFloat'
       Versions relating to the MIPS family of processors.
  
! 'NetBSD'
       Version relating to NetBSD systems.
  
! 'OpenBSD'
       Version relating to OpenBSD systems.
  
! 'OSX'
       Version relating to OSX systems.
  
! 'Posix'
       Version relating to POSIX systems (includes Linux, FreeBSD, OSX,
       Solaris, etc).
  
! 'PPC'
! 'PPC64'
! 'PPC_HardFloat'
! 'PPC_SoftFloat'
       Versions relating to the PowerPC family of processors.
  
! 'RISCV32'
! 'RISCV64'
       Versions relating to the RISC-V family of processors.
  
! 'S390'
! 'SystemZ'
       Versions relating to the S/390 and System Z family of processors.
  
! 'S390X'
!      Deprecated; use 'SystemZ' instead.
  
! 'Solaris'
       Versions relating to Solaris systems.
  
! 'SPARC'
! 'SPARC64'
! 'SPARC_HardFloat'
! 'SPARC_SoftFloat'
! 'SPARC_V8Plus'
       Versions relating to the SPARC family of processors.
  
! 'Thumb'
!      Deprecated; use 'ARM_Thumb' instead.
  
! 'D_X32'
! 'X86'
! 'X86_64'
       Versions relating to the x86-32 and x86-64 family of processors.
  
! 'Windows'
! 'Win32'
! 'Win64'
       Versions relating to Microsoft Windows systems.
  
  
--- 2391,2501 ----
  type of system and machine is in use.  They are obviously different on
  each target supported by GCC.
  
! ‘AArch64’
       Version relating to the AArch64 family of processors.
  
! ‘Android’
       Version relating to the Android platform.
  
! ‘ARM’
! ‘ARM_HardFloat’
! ‘ARM_SoftFloat’
! ‘ARM_SoftFP’
! ‘ARM_Thumb’
       Versions relating to the ARM family of processors.
  
! ‘Cygwin’
       Version relating to the Cygwin environment.
  
! ‘darwin’
!      Deprecated; use ‘OSX’ instead.
  
! ‘DragonFlyBSD’
       Versions relating to DragonFlyBSD systems.
  
! ‘FreeBSD’
! ‘FreeBSD_9’
! ‘FreeBSD_10’
! ‘FreeBSD_11’
! ‘FreeBSD_...’
       Versions relating to FreeBSD systems.  The FreeBSD major version
       number is inferred from the target triplet.
  
! ‘HPPA’
! ‘HPPA64’
       Versions relating to the HPPA family of processors.
  
! ‘Hurd’
       Version relating to GNU Hurd systems.
  
! ‘linux’
       Version relating to Linux systems.
  
! ‘MinGW’
       Version relating to the MinGW environment.
  
! ‘MIPS32’
! ‘MIPS64’
! ‘MIPS_EABI’
! ‘MIPS_HardFloat’
! ‘MIPS_N32’
! ‘MIPS_N64’
! ‘MIPS_O32’
! ‘MIPS_O64’
! ‘MIPS_SoftFloat’
       Versions relating to the MIPS family of processors.
  
! ‘NetBSD’
       Version relating to NetBSD systems.
  
! ‘OpenBSD’
       Version relating to OpenBSD systems.
  
! ‘OSX’
       Version relating to OSX systems.
  
! ‘Posix’
       Version relating to POSIX systems (includes Linux, FreeBSD, OSX,
       Solaris, etc).
  
! ‘PPC’
! ‘PPC64’
! ‘PPC_HardFloat’
! ‘PPC_SoftFloat’
       Versions relating to the PowerPC family of processors.
  
! ‘RISCV32’
! ‘RISCV64’
       Versions relating to the RISC-V family of processors.
  
! ‘S390’
! ‘SystemZ’
       Versions relating to the S/390 and System Z family of processors.
  
! ‘S390X’
!      Deprecated; use ‘SystemZ’ instead.
  
! ‘Solaris’
       Versions relating to Solaris systems.
  
! ‘SPARC’
! ‘SPARC64’
! ‘SPARC_HardFloat’
! ‘SPARC_SoftFloat’
! ‘SPARC_V8Plus’
       Versions relating to the SPARC family of processors.
  
! ‘Thumb’
!      Deprecated; use ‘ARM_Thumb’ instead.
  
! ‘D_X32’
! ‘X86’
! ‘X86_64’
       Versions relating to the x86-32 and x86-64 family of processors.
  
! ‘Windows’
! ‘Win32’
! ‘Win64’
       Versions relating to Microsoft Windows systems.
  
  
*************** File: gdc.info,  Node: Special Enums,  N
*** 2504,2517 ****
  2.8 Special Enums
  =================
  
! Special 'enum' names are used to represent types that do not have an
  equivalent basic D type.  For example, C++ types used by the C++ name
  mangler.
  
     Special enums are declared opaque, with a base type explicitly set.
  Unlike regular opaque enums, special enums can be used as any other
! value type.  They have a default '.init' value, as well as other enum
! properties available ('.min', '.max').  Special enums can be declared in
  any module, and will be recognized by the compiler.
  
       import gcc.builtins;
--- 2504,2517 ----
  2.8 Special Enums
  =================
  
! Special ‘enum’ names are used to represent types that do not have an
  equivalent basic D type.  For example, C++ types used by the C++ name
  mangler.
  
     Special enums are declared opaque, with a base type explicitly set.
  Unlike regular opaque enums, special enums can be used as any other
! value type.  They have a default ‘.init’ value, as well as other enum
! properties available (‘.min’, ‘.max’).  Special enums can be declared in
  any module, and will be recognized by the compiler.
  
       import gcc.builtins;
*************** any module, and will be recognized by th
*** 2520,2553 ****
  
  The following identifiers are recognized by GNU D.
  
! '__c_complex_double'
!      C '_Complex double' type.
! '__c_complex_float'
!      C '_Complex float' type.
! '__c_complex_real'
!      C '_Complex long double' type.
! '__c_long'
!      C++ 'long' type.
! '__c_longlong'
!      C++ 'long long' type.
! '__c_long_double'
!      C 'long double' type.
! '__c_ulong'
!      C++ 'unsigned long' type.
! '__c_ulonglong'
!      C++ 'unsigned long long' type.
! '__c_wchar_t'
!      C++ 'wchar_t' type.
  
!    The 'core.stdc.config' module declares the following shorthand alias
! types for convenience: 'c_complex_double', 'c_complex_float',
! 'c_complex_real', 'cpp_long', 'cpp_longlong', 'c_long_double',
! 'cpp_ulong', 'cpp_ulonglong'.
  
     It may cause undefined behavior at runtime if a special enum is
  declared with a base type that has a different size to the target C/C++
  type it is representing.  The GNU D compiler will catch such
! declarations and emit a warning when the '-Wmismatched-special-enum'
  option is seen on the command-line.
  
  
--- 2520,2553 ----
  
  The following identifiers are recognized by GNU D.
  
! ‘__c_complex_double’
!      C ‘_Complex double’ type.
! ‘__c_complex_float’
!      C ‘_Complex float’ type.
! ‘__c_complex_real’
!      C ‘_Complex long double’ type.
! ‘__c_long’
!      C++ ‘long’ type.
! ‘__c_longlong’
!      C++ ‘long long’ type.
! ‘__c_long_double’
!      C ‘long double’ type.
! ‘__c_ulong’
!      C++ ‘unsigned long’ type.
! ‘__c_ulonglong’
!      C++ ‘unsigned long long’ type.
! ‘__c_wchar_t’
!      C++ ‘wchar_t’ type.
  
!    The ‘core.stdc.config’ module declares the following shorthand alias
! types for convenience: ‘c_complex_double’, ‘c_complex_float’,
! ‘c_complex_real’, ‘cpp_long’, ‘cpp_longlong’, ‘c_long_double’,
! ‘cpp_ulong’, ‘cpp_ulonglong’.
  
     It may cause undefined behavior at runtime if a special enum is
  declared with a base type that has a different size to the target C/C++
  type it is representing.  The GNU D compiler will catch such
! declarations and emit a warning when the ‘-Wmismatched-special-enum’
  option is seen on the command-line.
  
  
*************** Traits are extensions to the D programmi
*** 2560,2566 ****
  at compile time, to get at information internal to the compiler.  This
  is also known as compile time reflection.
  
!    GNU D implements a '__traits(getTargetInfo)' trait that receives a
  string key as its argument.  The result is an expression describing the
  requested target information.
  
--- 2560,2566 ----
  at compile time, to get at information internal to the compiler.  This
  is also known as compile time reflection.
  
!    GNU D implements a ‘__traits(getTargetInfo)’ trait that receives a
  string key as its argument.  The result is an expression describing the
  requested target information.
  
*************** hosted at <https://dlang.org/spec/traits
*** 2576,2592 ****
  
     The following keys are recognized by GNU D.
  
! 'cppRuntimeLibrary'
       The C++ runtime library affinity for this toolchain.
  
! 'cppStd'
!      The version of the C++ standard supported by 'extern(C++)' code,
!      equivalent to the '__cplusplus' macro in a C++ compiler.
  
! 'floatAbi'
!      Floating point ABI; may be 'hard', 'soft', or 'softfp'.
  
! 'objectFormat'
       Target object format.
  
  
--- 2576,2592 ----
  
     The following keys are recognized by GNU D.
  
! ‘cppRuntimeLibrary’
       The C++ runtime library affinity for this toolchain.
  
! ‘cppStd’
!      The version of the C++ standard supported by ‘extern(C++)’ code,
!      equivalent to the ‘__cplusplus’ macro in a C++ compiler.
  
! ‘floatAbi’
!      Floating point ABI; may be ‘hard’, ‘soft’, or ‘softfp’.
  
! ‘objectFormat’
       Target object format.
  
  
*************** integer types, and vector operations ope
*** 2602,2621 ****
       alias int4 = __vector(int[4]);
  
  All the basic integer types can be used as base types, both as signed
! and as unsigned: 'byte', 'short', 'int', 'long'.  In addition, 'float'
! and 'double' can be used to build floating-point vector types, and
! 'void' to build vectors of untyped data.  Only sizes that are positive
  power-of-two multiples of the base type size are currently allowed.
  
! The 'core.simd' module has the following shorthand aliases for commonly
! supported vector types: 'byte8', 'byte16', 'byte32', 'byte64',
! 'double1', 'double2', 'double4', 'double8', 'float2', 'float4',
! 'float8', 'float16', 'int2', 'int4', 'int8', 'int16', 'long1', 'long2',
! 'long4', 'long8', 'short4', 'short8', 'short16', 'short32', 'ubyte8',
! 'ubyte16', 'ubyte32', 'ubyte64', 'uint2', 'uint4', 'uint8', 'uint16',
! 'ulong1', 'ulong2', 'ulong4', 'ulong8', 'ushort4', 'ushort8',
! 'ushort16', 'ushort32', 'void8', 'void16', 'void32', 'void64'.  All
! these aliases correspond to '__vector(type[N])'.
  
     Which vector types are supported depends on the target.  Only vector
  types that are implemented for the current architecture are supported at
--- 2602,2621 ----
       alias int4 = __vector(int[4]);
  
  All the basic integer types can be used as base types, both as signed
! and as unsigned: ‘byte’, ‘short’, ‘int’, ‘long’.  In addition, ‘float’
! and ‘double’ can be used to build floating-point vector types, and
! ‘void’ to build vectors of untyped data.  Only sizes that are positive
  power-of-two multiples of the base type size are currently allowed.
  
! The ‘core.simd’ module has the following shorthand aliases for commonly
! supported vector types: ‘byte8’, ‘byte16’, ‘byte32’, ‘byte64’,
! ‘double1’, ‘double2’, ‘double4’, ‘double8’, ‘float2’, ‘float4’,
! ‘float8’, ‘float16’, ‘int2’, ‘int4’, ‘int8’, ‘int16’, ‘long1’, ‘long2’,
! ‘long4’, ‘long8’, ‘short4’, ‘short8’, ‘short16’, ‘short32’, ‘ubyte8’,
! ‘ubyte16’, ‘ubyte32’, ‘ubyte64’, ‘uint2’, ‘uint4’, ‘uint8’, ‘uint16’,
! ‘ulong1’, ‘ulong2’, ‘ulong4’, ‘ulong8’, ‘ushort4’, ‘ushort8’,
! ‘ushort16’, ‘ushort32’, ‘void8’, ‘void16’, ‘void32’, ‘void64’.  All
! these aliases correspond to ‘__vector(type[N])’.
  
     Which vector types are supported depends on the target.  Only vector
  types that are implemented for the current architecture are supported at
*************** cause GNU D to synthesize the instructio
*** 2632,2638 ****
  
  Vector types can be used with a subset of normal D operations.
  Currently, GNU D allows using the following operators on these types:
! '+, -, *, /, unary+, unary-'.
  
       alias int4 = __vector(int[4]);
  
--- 2632,2638 ----
  
  Vector types can be used with a subset of normal D operations.
  Currently, GNU D allows using the following operators on these types:
! ‘+, -, *, /, unary+, unary-’.
  
       alias int4 = __vector(int[4]);
  
*************** Currently, GNU D allows using the follow
*** 2640,2648 ****
  
       c = a + b;
  
! It is also possible to use shifting operators '<<', '>>', the modulus
! operator '%', logical operations '&, |, ^', and the complement operator
! 'unary~' on integer-type vectors.
  
     For convenience, it is allowed to use a binary vector operation where
  one operand is a scalar.  In that case the compiler transforms the
--- 2640,2648 ----
  
       c = a + b;
  
! It is also possible to use shifting operators ‘<<’, ‘>>’, the modulus
! operator ‘%’, logical operations ‘&, |, ^’, and the complement operator
! ‘unary~’ on integer-type vectors.
  
     For convenience, it is allowed to use a binary vector operation where
  one operand is a scalar.  In that case the compiler transforms the
*************** code.
*** 2661,2668 ****
  
       a = l + a;    // Error, incompatible types.
  
! Vector comparison is supported with standard comparison operators: '==,
! !=, <, <=, >, >='.  Comparison operands can be vector expressions of
  integer-type or real-type.  Comparison between integer-type vectors and
  real-type vectors are not supported.  The result of the comparison is a
  vector of the same width and number of elements as the comparison
--- 2661,2668 ----
  
       a = l + a;    // Error, incompatible types.
  
! Vector comparison is supported with standard comparison operators: ‘==,
! !=, <, <=, >, >=’.  Comparison operands can be vector expressions of
  integer-type or real-type.  Comparison between integer-type vectors and
  real-type vectors are not supported.  The result of the comparison is a
  vector of the same width and number of elements as the comparison
*************** File: gdc.info,  Node: Vector Intrinsics
*** 2688,2694 ****
  ======================
  
  The following functions are a collection of vector operation intrinsics,
! available by importing the 'gcc.simd' module.
  
   -- Template: void gcc.simd.prefetch (bool RW, ubyte LOCALITY)
            (const(void)* ADDR)
--- 2688,2694 ----
  ======================
  
  The following functions are a collection of vector operation intrinsics,
! available by importing the ‘gcc.simd’ module.
  
   -- Template: void gcc.simd.prefetch (bool RW, ubyte LOCALITY)
            (const(void)* ADDR)
*************** available by importing the 'gcc.simd' mo
*** 2701,2707 ****
       compile-time constant integer between zero and three.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_prefetch'.
  
            for (i = 0; i < n; i++)
            {
--- 2701,2707 ----
       compile-time constant integer between zero and three.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_prefetch’.
  
            for (i = 0; i < n; i++)
            {
*************** available by importing the 'gcc.simd' mo
*** 2739,2745 ****
       the output vector.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_shuffle'.
  
            int4 a = [1, 2, 3, 4];
            int4 b = [5, 6, 7, 8];
--- 2739,2745 ----
       the output vector.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_shuffle’.
  
            int4 a = [1, 2, 3, 4];
            int4 b = [5, 6, 7, 8];
*************** available by importing the 'gcc.simd' mo
*** 2759,2765 ****
       length as the MASK.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_shufflevector'.
  
            int8 a = [1, -2, 3, -4, 5, -6, 7, -8];
            int4 b = shufflevector(a, a, 0, 2, 4, 6);   // b is [1,3,5,7]
--- 2759,2765 ----
       length as the MASK.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_shufflevector’.
  
            int8 a = [1, -2, 3, -4, 5, -6, 7, -8];
            int4 b = shufflevector(a, a, 0, 2, 4, 6);   // b is [1,3,5,7]
*************** available by importing the 'gcc.simd' mo
*** 2786,2792 ****
       every element cast to the element type of the return type.
  
       This intrinsic is the same as the GCC built-in function
!      '__builtin_convertvector'.
  
            int4 a = [1, -2, 3, -4];
            float4 b = [1.5, -2.5, 3, 7];
--- 2786,2792 ----
       every element cast to the element type of the return type.
  
       This intrinsic is the same as the GCC built-in function
!      ‘__builtin_convertvector’.
  
            int4 a = [1, -2, 3, -4];
            float4 b = [1.5, -2.5, 3, 7];
*************** Some parts of the D specification are ha
*** 2818,2831 ****
  with GCC, they should be listed here.
  
  Bit Operation Intrinsics
!      The Digital Mars D compiler implements the 'core.bitop' intrinsics
!      'inp', 'inpw', 'inpl', 'outp', 'outpw', and 'outpl'.  These are not
       recognized by GNU D. On most targets, equivalent intrinsics that
!      have the same effect would be 'core.volatile.loadVolatile' and
!      'core.volatile.storeVolatile' respectively (*note Volatile
       Intrinsics::).
  
!      On x86 targets, if an 'in' or 'out' instruction is specifically
       required, that can be achieved using assembler statements instead.
            ubyte inp(uint port)
            {
--- 2818,2831 ----
  with GCC, they should be listed here.
  
  Bit Operation Intrinsics
!      The Digital Mars D compiler implements the ‘core.bitop’ intrinsics
!      ‘inp’, ‘inpw’, ‘inpl’, ‘outp’, ‘outpw’, and ‘outpl’.  These are not
       recognized by GNU D. On most targets, equivalent intrinsics that
!      have the same effect would be ‘core.volatile.loadVolatile’ and
!      ‘core.volatile.storeVolatile’ respectively (*note Volatile
       Intrinsics::).
  
!      On x86 targets, if an ‘in’ or ‘out’ instruction is specifically
       required, that can be achieved using assembler statements instead.
            ubyte inp(uint port)
            {
*************** Bit Operation Intrinsics
*** 2842,2868 ****
  Floating-Point Intermediate Values
  
       GNU D uses a software compile-time floating-point type that assists
!      in cross-compilation and support for arbitrary target 'real'
       precisions wider than 80 bits.  Because of this, the result of
       floating-point CTFE operations may have different results in GNU D
       compared with other D compilers that use the host's native
       floating-point type for storage and CTFE. In particular, GNU D
       won't overflow or underflow when a target real features a higher
!      precision than the host.  Differences also extend to '.stringof'
       representations of intermediate values due to formatting
!      differences with 'sprintf("%Lg")'.
            version(GNU)
                assert((25.5).stringof ~ (3.01).stringof == "2.55e+13.01e+0");
            else
                assert((25.5).stringof ~ (3.01).stringof == "25.53.01");
  
  Function Calling Conventions
!      GNU D does not implement the 'extern(D)' calling convention for x86
       as described in the D specification hosted at
       <https://dlang.org/spec/abi.html#function_calling_conventions>.
  
!      Instead, there is no distinction between 'extern(C)' and
!      'extern(D)' other than name mangling.
  
  ImportC Limitations
       GNU D does not run the preprocessor automatically for any ImportC
--- 2842,2868 ----
  Floating-Point Intermediate Values
  
       GNU D uses a software compile-time floating-point type that assists
!      in cross-compilation and support for arbitrary target ‘real’
       precisions wider than 80 bits.  Because of this, the result of
       floating-point CTFE operations may have different results in GNU D
       compared with other D compilers that use the host's native
       floating-point type for storage and CTFE. In particular, GNU D
       won't overflow or underflow when a target real features a higher
!      precision than the host.  Differences also extend to ‘.stringof’
       representations of intermediate values due to formatting
!      differences with ‘sprintf("%Lg")’.
            version(GNU)
                assert((25.5).stringof ~ (3.01).stringof == "2.55e+13.01e+0");
            else
                assert((25.5).stringof ~ (3.01).stringof == "25.53.01");
  
  Function Calling Conventions
!      GNU D does not implement the ‘extern(D)’ calling convention for x86
       as described in the D specification hosted at
       <https://dlang.org/spec/abi.html#function_calling_conventions>.
  
!      Instead, there is no distinction between ‘extern(C)’ and
!      ‘extern(D)’ other than name mangling.
  
  ImportC Limitations
       GNU D does not run the preprocessor automatically for any ImportC
*************** Inline Assembler
*** 2873,2879 ****
       GNU D does not implement the D inline assembler for x86 and x86_64
       as described in the D specification hosted at
       <https://dlang.org/spec/iasm.html>.  Nor does GNU D predefine the
!      'D_InlineAsm_X86' and 'D_InlineAsm_X86_64' version identifiers to
       indicate support.
  
       The GNU D compiler uses an alternative, GCC-based syntax for inline
--- 2873,2879 ----
       GNU D does not implement the D inline assembler for x86 and x86_64
       as described in the D specification hosted at
       <https://dlang.org/spec/iasm.html>.  Nor does GNU D predefine the
!      ‘D_InlineAsm_X86’ and ‘D_InlineAsm_X86_64’ version identifiers to
       indicate support.
  
       The GNU D compiler uses an alternative, GCC-based syntax for inline
*************** Inline Assembler
*** 2882,2906 ****
  Interfacing to Objective-C
       GNU D does not support interfacing with Objective-C, nor its
       protocols, classes, subclasses, instance variables, instance
!      methods and class methods.  The 'extern(Objective-C)' linkage is
!      ignored, as are the '@optional' and '@selector' attributes.  The
!      'D_ObjectiveC' version identifier is not predefined for
       compilations.
  
  Pragma Directives
       Pragmas that are designed to embed information into object files or
       otherwise pass options to the linker are not supported by GNU D.
!      These include 'pragma(lib)', 'pragma(linkerDirective)', and
!      'pragma(startaddress)'.
  
  SIMD Intrinsics
!      The Digital Mars D compiler implements the 'core.simd' intrinsics
!      '__simd', '__simd_ib', '__simd_sto'.  These are not recognized by
!      GNU D, nor does GNU D predefine the 'D_SIMD' version identifier to
       indicate support.
  
       On x86 targets, all intrinsics are available as functions in the
!      'gcc.builtins' module, and have predictable equivalents.
            version (DigitalMars)
            {
                __simd(XMM.PSLLW, op1, op2);
--- 2882,2906 ----
  Interfacing to Objective-C
       GNU D does not support interfacing with Objective-C, nor its
       protocols, classes, subclasses, instance variables, instance
!      methods and class methods.  The ‘extern(Objective-C)’ linkage is
!      ignored, as are the ‘@optional’ and ‘@selector’ attributes.  The
!      ‘D_ObjectiveC’ version identifier is not predefined for
       compilations.
  
  Pragma Directives
       Pragmas that are designed to embed information into object files or
       otherwise pass options to the linker are not supported by GNU D.
!      These include ‘pragma(lib)’, ‘pragma(linkerDirective)’, and
!      ‘pragma(startaddress)’.
  
  SIMD Intrinsics
!      The Digital Mars D compiler implements the ‘core.simd’ intrinsics
!      ‘__simd’, ‘__simd_ib’, ‘__simd_sto’.  These are not recognized by
!      GNU D, nor does GNU D predefine the ‘D_SIMD’ version identifier to
       indicate support.
  
       On x86 targets, all intrinsics are available as functions in the
!      ‘gcc.builtins’ module, and have predictable equivalents.
            version (DigitalMars)
            {
                __simd(XMM.PSLLW, op1, op2);
*************** SIMD Intrinsics
*** 2914,2920 ****
  
  TypeInfo-based va_arg
       The Digital Mars D compiler implements a version of
!      'core.vararg.va_arg' that accepts a run-time 'TypeInfo' argument
       for use when the static type is not known.  This function is not
       implemented by GNU D. It is more portable to use variadic template
       functions instead.
--- 2914,2920 ----
  
  TypeInfo-based va_arg
       The Digital Mars D compiler implements a version of
!      ‘core.vararg.va_arg’ that accepts a run-time ‘TypeInfo’ argument
       for use when the static type is not known.  This function is not
       implemented by GNU D. It is more portable to use variadic template
       functions instead.
*************** GNU General Public License
*** 2927,2933 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 2927,2933 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 3614,3624 ****
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!    The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 3614,3624 ----
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!    The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** GNU Free Documentation License
*** 3643,3649 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 3643,3649 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 3652,3658 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 3652,3658 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** File: gdc.info,  Node: Option Index,  Ne
*** 4123,4131 ****
  Option Index
  ************
  
! 'gdc''s command line options are indexed here without any initial '-' or
! '--'.  Where an option has both positive and negative forms (such as
! '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
  indexed under the most appropriate form; it may sometimes be useful to
  look up both forms.
  
--- 4123,4131 ----
  Option Index
  ************
  
! ‘gdc’'s command line options are indexed here without any initial ‘-’ or
! ‘--’.  Where an option has both positive and negative forms (such as
! ‘-fOPTION’ and ‘-fno-OPTION’), relevant entries in the manual are
  indexed under the most appropriate form; it may sometimes be useful to
  look up both forms.
  
*************** Keyword Index
*** 4244,4252 ****
  [index]
  * Menu:
  
- * allocSize function attribute:          Other Attributes.    (line   9)
  * alloc_size function attribute:         Common Attributes.   (line   8)
  * alloc_size variable attribute:         Common Attributes.   (line   8)
  * always_inline function attribute:      Common Attributes.   (line  30)
  * assembly language in D:                Inline Assembly.     (line   6)
  * assumeUsed function attribute:         Other Attributes.    (line  17)
--- 4244,4252 ----
  [index]
  * Menu:
  
  * alloc_size function attribute:         Common Attributes.   (line   8)
  * alloc_size variable attribute:         Common Attributes.   (line   8)
+ * allocSize function attribute:          Other Attributes.    (line   9)
  * always_inline function attribute:      Common Attributes.   (line  30)
  * assembly language in D:                Inline Assembly.     (line   6)
  * assumeUsed function attribute:         Other Attributes.    (line  17)
*************** Keyword Index
*** 4412,4424 ****
  * messages, warning:                     Warnings.            (line   6)
  * missing features:                      Missing Features.    (line   6)
  * naked function attribute:              Other Attributes.    (line  38)
  * noclone function attribute:            Common Attributes.   (line  76)
  * noinline function attribute:           Common Attributes.   (line  85)
  * noipa function attribute:              Common Attributes.   (line  96)
  * noplt function attribute:              Common Attributes.   (line 114)
  * noSanitize function attribute:         Other Attributes.    (line  47)
- * no_icf function attribute:             Common Attributes.   (line  59)
- * no_sanitize function attribute:        Common Attributes.   (line  66)
  * optimize function attribute:           Common Attributes.   (line 127)
  * options, code generation:              Code Generation.     (line   6)
  * options, directory search:             Directory Options.   (line   6)
--- 4412,4424 ----
  * messages, warning:                     Warnings.            (line   6)
  * missing features:                      Missing Features.    (line   6)
  * naked function attribute:              Other Attributes.    (line  38)
+ * no_icf function attribute:             Common Attributes.   (line  59)
+ * no_sanitize function attribute:        Common Attributes.   (line  66)
  * noclone function attribute:            Common Attributes.   (line  76)
  * noinline function attribute:           Common Attributes.   (line  85)
  * noipa function attribute:              Common Attributes.   (line  96)
  * noplt function attribute:              Common Attributes.   (line 114)
  * noSanitize function attribute:         Other Attributes.    (line  47)
  * optimize function attribute:           Common Attributes.   (line 127)
  * options, code generation:              Code Generation.     (line   6)
  * options, directory search:             Directory Options.   (line   6)
*************** Keyword Index
*** 4485,4493 ****
  * suppressing warnings:                  Warnings.            (line   6)
  * symver function attribute:             Common Attributes.   (line 211)
  * target function attribute:             Common Attributes.   (line 227)
  * target-specific predefined versions:   Target Predefined Versions.
                                                                (line   6)
- * target_clones function attribute:      Common Attributes.   (line 245)
  * traits:                                Traits.              (line   6)
  * used function attribute:               Common Attributes.   (line 259)
  * used variable attribute:               Common Attributes.   (line 259)
--- 4485,4493 ----
  * suppressing warnings:                  Warnings.            (line   6)
  * symver function attribute:             Common Attributes.   (line 211)
  * target function attribute:             Common Attributes.   (line 227)
+ * target_clones function attribute:      Common Attributes.   (line 245)
  * target-specific predefined versions:   Target Predefined Versions.
                                                                (line   6)
  * traits:                                Traits.              (line   6)
  * used function attribute:               Common Attributes.   (line 259)
  * used variable attribute:               Common Attributes.   (line 259)
*************** Keyword Index
*** 4502,4548 ****
  
  
  Tag Table:
! Node: Top1075
! Node: Invoking gdc1933
! Node: Input and Output files2792
! Node: Runtime Options4140
! Node: Directory Options12735
! Node: Code Generation15158
! Node: Warnings19092
! Node: Linking22906
! Node: Developer Options24579
! Node: D Implementation25329
! Node: Attributes27073
! Node: Attribute Syntax28071
! Node: Common Attributes29675
! Node: Other Attributes42059
! Node: Target Attributes44223
! Node: Builtin Functions45628
! Node: Builtin Types46195
! Node: Query Builtins47378
! Node: Other Builtins48608
! Node: ImportC54735
! Node: Inline Assembly56826
! Node: Intrinsics58974
! Node: Bit Operation Intrinsics59787
! Node: Integer Overflow Intrinsics64601
! Node: Math Intrinsics67278
! Node: Variadic Intrinsics70462
! Node: Volatile Intrinsics72026
! Node: CTFE Intrinsics74437
! Node: Predefined Pragmas80293
! Node: Predefined Versions84303
! Node: Standard Predefined Versions84946
! Node: Common Predefined Versions88868
! Node: Target Predefined Versions90379
! Node: Special Enums92727
! Node: Traits94445
! Node: Vector Extensions95701
! Node: Vector Intrinsics99329
! Node: Missing Features103968
! Node: Copying108568
! Node: GNU Free Documentation License146118
! Node: Option Index171247
! Node: Keyword Index179152
  
  End Tag Table
--- 4502,4553 ----
  
  
  Tag Table:
! Node: Top1073
! Node: Invoking gdc1939
! Node: Input and Output files2810
! Node: Runtime Options4210
! Node: Directory Options13265
! Node: Code Generation15748
! Node: Warnings19902
! Node: Linking23876
! Node: Developer Options25621
! Node: D Implementation26407
! Node: Attributes28159
! Node: Attribute Syntax29173
! Node: Common Attributes30793
! Node: Other Attributes43505
! Node: Target Attributes45773
! Node: Builtin Functions47186
! Node: Builtin Types47761
! Node: Query Builtins49028
! Node: Other Builtins50266
! Node: ImportC57885
! Node: Inline Assembly60008
! Node: Intrinsics62196
! Node: Bit Operation Intrinsics63009
! Node: Integer Overflow Intrinsics67863
! Node: Math Intrinsics70568
! Node: Variadic Intrinsics73808
! Node: Volatile Intrinsics75404
! Node: CTFE Intrinsics77823
! Node: Predefined Pragmas83763
! Node: Predefined Versions87929
! Node: Standard Predefined Versions88580
! Node: Common Predefined Versions92750
! Node: Target Predefined Versions94321
! Node: Special Enums96901
! Node: Traits98747
! Node: Vector Extensions100043
! Node: Vector Intrinsics103911
! Node: Missing Features108570
! Node: Copying113306
! Node: GNU Free Documentation License150871
! Node: Option Index176003
! Node: Keyword Index183928
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/gfdl.7 gcc-14.3.0-RC-20260619/gcc/doc/gfdl.7
*** gcc-14.3.0/gcc/doc/gfdl.7	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gfdl.7	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,149 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GFDL 7"
! .TH GFDL 7 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gfdl \- GNU Free Documentation License
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
  \&\f(CW@comment\fR For some cases, this default \f(CW@node\fR/@unnumbered is not applicable and
  \&\f(CW@comment\fR causes warnings.  In those cases, the including file can set
! \&\f(CW@comment\fR nodefaultgnufreedocumentationlicensenode and provide it's own version.
  \&\f(CW@comment\fR F.i., when this file is included in an \f(CW@raisesections\fR context, the
  \&\f(CW@comment\fR including file can use an \f(CW@unnumberedsec\fR.
! .SS "\s-1GNU\s0 Free Documentation License"
  .IX Subsection "GNU Free Documentation License"
  .SS "Version 1.3, 3 November 2008"
  .IX Subsection "Version 1.3, 3 November 2008"
--- 38,78 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GFDL 7"
! .TH GFDL 7 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gfdl \- GNU Free Documentation License
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
  \&\f(CW@comment\fR For some cases, this default \f(CW@node\fR/@unnumbered is not applicable and
  \&\f(CW@comment\fR causes warnings.  In those cases, the including file can set
! \&\f(CW@comment\fR nodefaultgnufreedocumentationlicensenode and provide it\*(Aqs own version.
  \&\f(CW@comment\fR F.i., when this file is included in an \f(CW@raisesections\fR context, the
  \&\f(CW@comment\fR including file can use an \f(CW@unnumberedsec\fR.
! .SS "GNU Free Documentation License"
  .IX Subsection "GNU Free Documentation License"
  .SS "Version 1.3, 3 November 2008"
  .IX Subsection "Version 1.3, 3 November 2008"
*************** gfdl \- GNU Free Documentation License
*** 154,162 ****
  \&        Everyone is permitted to copy and distribute verbatim copies
  \&        of this license document, but changing it is not allowed.
  .Ve
! .IP "0." 4
  .IX Item "0."
! \&\s-1PREAMBLE\s0
  .Sp
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document \fIfree\fR in the sense of freedom: to
--- 83,91 ----
  \&        Everyone is permitted to copy and distribute verbatim copies
  \&        of this license document, but changing it is not allowed.
  .Ve
! .IP 0. 4
  .IX Item "0."
! PREAMBLE
  .Sp
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document \fIfree\fR in the sense of freedom: to
*************** Secondarily, this License preserves for
*** 166,174 ****
  to get credit for their work, while not being considered responsible
  for modifications made by others.
  .Sp
! This License is a kind of \*(L"copyleft\*(R", which means that derivative
  works of the document must themselves be free in the same sense.  It
! complements the \s-1GNU\s0 General Public License, which is a copyleft
  license designed for free software.
  .Sp
  We have designed this License in order to use it for manuals for free
--- 95,103 ----
  to get credit for their work, while not being considered responsible
  for modifications made by others.
  .Sp
! This License is a kind of "copyleft", which means that derivative
  works of the document must themselves be free in the same sense.  It
! complements the GNU General Public License, which is a copyleft
  license designed for free software.
  .Sp
  We have designed this License in order to use it for manuals for free
*************** software does.  But this License is not
*** 178,204 ****
  it can be used for any textual work, regardless of subject matter or
  whether it is published as a printed book.  We recommend this License
  principally for works whose purpose is instruction or reference.
! .IP "1." 4
  .IX Item "1."
! \&\s-1APPLICABILITY AND DEFINITIONS\s0
  .Sp
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
! world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The \*(L"Document\*(R", below,
  refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as \*(L"you\*(R".  You accept the license if you
  copy, modify or distribute the work in a way requiring permission
  under copyright law.
  .Sp
! A \*(L"Modified Version\*(R" of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  .Sp
! A \*(L"Secondary Section\*(R" is a named appendix or a front-matter section
  of the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document's overall
  subject (or to related matters) and contains nothing that could fall
  directly within that overall subject.  (Thus, if the Document is in
  part a textbook of mathematics, a Secondary Section may not explain
--- 107,133 ----
  it can be used for any textual work, regardless of subject matter or
  whether it is published as a printed book.  We recommend this License
  principally for works whose purpose is instruction or reference.
! .IP 1. 4
  .IX Item "1."
! APPLICABILITY AND DEFINITIONS
  .Sp
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
! world\-wide, royalty\-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The "Document", below,
  refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as "you".  You accept the license if you
  copy, modify or distribute the work in a way requiring permission
  under copyright law.
  .Sp
! A "Modified Version" of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  .Sp
! A "Secondary Section" is a named appendix or a front\-matter section
  of the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document\*(Aqs overall
  subject (or to related matters) and contains nothing that could fall
  directly within that overall subject.  (Thus, if the Document is in
  part a textbook of mathematics, a Secondary Section may not explain
*************** connection with the subject or with rela
*** 207,213 ****
  commercial, philosophical, ethical or political position regarding
  them.
  .Sp
! The \*(L"Invariant Sections\*(R" are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice
  that says that the Document is released under this License.  If a
  section does not fit the above definition of Secondary then it is not
--- 136,142 ----
  commercial, philosophical, ethical or political position regarding
  them.
  .Sp
! The "Invariant Sections" are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice
  that says that the Document is released under this License.  If a
  section does not fit the above definition of Secondary then it is not
*************** allowed to be designated as Invariant.
*** 215,226 ****
  Invariant Sections.  If the Document does not identify any Invariant
  Sections then there are none.
  .Sp
! The \*(L"Cover Texts\*(R" are certain short passages of text that are listed,
! as Front-Cover Texts or Back-Cover Texts, in the notice that says that
! the Document is released under this License.  A Front-Cover Text may
! be at most 5 words, and a Back-Cover Text may be at most 25 words.
  .Sp
! A \*(L"Transparent\*(R" copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the
  general public, that is suitable for revising the document
  straightforwardly with generic text editors or (for images composed of
--- 144,155 ----
  Invariant Sections.  If the Document does not identify any Invariant
  Sections then there are none.
  .Sp
! The "Cover Texts" are certain short passages of text that are listed,
! as Front\-Cover Texts or Back\-Cover Texts, in the notice that says that
! the Document is released under this License.  A Front\-Cover Text may
! be at most 5 words, and a Back\-Cover Text may be at most 25 words.
  .Sp
! A "Transparent" copy of the Document means a machine\-readable copy,
  represented in a format whose specification is available to the
  general public, that is suitable for revising the document
  straightforwardly with generic text editors or (for images composed of
*************** to text formatters.  A copy made in an o
*** 231,268 ****
  format whose markup, or absence of markup, has been arranged to thwart
  or discourage subsequent modification by readers is not Transparent.
  An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not \*(L"Transparent\*(R" is called \*(L"Opaque\*(R".
  .Sp
  Examples of suitable formats for Transparent copies include plain
! \&\s-1ASCII\s0 without markup, Texinfo input format, LaTeX input
! format, \s-1SGML\s0 or \s-1XML\s0 using a publicly available
! \&\s-1DTD,\s0 and standard-conforming simple \s-1HTML,\s0
! PostScript or \s-1PDF\s0 designed for human modification.  Examples
! of transparent image formats include \s-1PNG, XCF\s0 and
! \&\s-1JPG.\s0  Opaque formats include proprietary formats that can be
! read and edited only by proprietary word processors, \s-1SGML\s0 or
! \&\s-1XML\s0 for which the \s-1DTD\s0 and/or processing tools are
! not generally available, and the machine-generated \s-1HTML,\s0
! PostScript or \s-1PDF\s0 produced by some word processors for
  output purposes only.
  .Sp
! The \*(L"Title Page\*(R" means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, \*(L"Title Page\*(R" means
! the text near the most prominent appearance of the work's title,
  preceding the beginning of the body of the text.
  .Sp
! The \*(L"publisher\*(R" means any person or entity that distributes copies
  of the Document to the public.
  .Sp
! A section \*(L"Entitled \s-1XYZ\*(R"\s0 means a named subunit of the Document whose
! title either is precisely \s-1XYZ\s0 or contains \s-1XYZ\s0 in parentheses following
! text that translates \s-1XYZ\s0 in another language.  (Here \s-1XYZ\s0 stands for a
! specific section name mentioned below, such as \*(L"Acknowledgements\*(R",
! \&\*(L"Dedications\*(R", \*(L"Endorsements\*(R", or \*(L"History\*(R".)  To \*(L"Preserve the Title\*(R"
  of such a section when you modify the Document means that it remains a
! section \*(L"Entitled \s-1XYZ\*(R"\s0 according to this definition.
  .Sp
  The Document may include Warranty Disclaimers next to the notice which
  states that this License applies to the Document.  These Warranty
--- 160,197 ----
  format whose markup, or absence of markup, has been arranged to thwart
  or discourage subsequent modification by readers is not Transparent.
  An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not "Transparent" is called "Opaque".
  .Sp
  Examples of suitable formats for Transparent copies include plain
! ASCII without markup, Texinfo input format, LaTeX input
! format, SGML or XML using a publicly available
! DTD, and standard\-conforming simple HTML,
! PostScript or PDF designed for human modification.  Examples
! of transparent image formats include PNG, XCF and
! JPG.  Opaque formats include proprietary formats that can be
! read and edited only by proprietary word processors, SGML or
! XML for which the DTD and/or processing tools are
! not generally available, and the machine\-generated HTML,
! PostScript or PDF produced by some word processors for
  output purposes only.
  .Sp
! The "Title Page" means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, "Title Page" means
! the text near the most prominent appearance of the work\*(Aqs title,
  preceding the beginning of the body of the text.
  .Sp
! The "publisher" means any person or entity that distributes copies
  of the Document to the public.
  .Sp
! A section "Entitled XYZ" means a named subunit of the Document whose
! title either is precisely XYZ or contains XYZ in parentheses following
! text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as "Acknowledgements",
! "Dedications", "Endorsements", or "History".)  To "Preserve the Title"
  of such a section when you modify the Document means that it remains a
! section "Entitled XYZ" according to this definition.
  .Sp
  The Document may include Warranty Disclaimers next to the notice which
  states that this License applies to the Document.  These Warranty
*************** Disclaimers are considered to be include
*** 270,278 ****
  License, but only as regards disclaiming warranties: any other
  implication that these Warranty Disclaimers may have is void and has
  no effect on the meaning of this License.
! .IP "2." 4
  .IX Item "2."
! \&\s-1VERBATIM COPYING\s0
  .Sp
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
--- 199,207 ----
  License, but only as regards disclaiming warranties: any other
  implication that these Warranty Disclaimers may have is void and has
  no effect on the meaning of this License.
! .IP 2. 4
  .IX Item "2."
! VERBATIM COPYING
  .Sp
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
*************** number of copies you must also follow th
*** 286,300 ****
  .Sp
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
! .IP "3." 4
  .IX Item "3."
! \&\s-1COPYING IN QUANTITY\s0
  .Sp
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
! Document's license notice requires Cover Texts, you must enclose the
  copies in covers that carry, clearly and legibly, all these Cover
! Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
  the back cover.  Both covers must also clearly and legibly identify
  you as the publisher of these copies.  The front cover must present
  the full title with all words of the title equally prominent and
--- 215,229 ----
  .Sp
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
! .IP 3. 4
  .IX Item "3."
! COPYING IN QUANTITY
  .Sp
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
! Document\*(Aqs license notice requires Cover Texts, you must enclose the
  copies in covers that carry, clearly and legibly, all these Cover
! Texts: Front\-Cover Texts on the front cover, and Back\-Cover Texts on
  the back cover.  Both covers must also clearly and legibly identify
  you as the publisher of these copies.  The front cover must present
  the full title with all words of the title equally prominent and
*************** reasonably) on the actual cover, and con
*** 309,318 ****
  pages.
  .Sp
  If you publish or distribute Opaque copies of the Document numbering
! more than 100, you must either include a machine-readable Transparent
  copy along with each Opaque copy, or state in or with each Opaque copy
! a computer-network location from which the general network-using
! public has access to download using public-standard network protocols
  a complete Transparent copy of the Document, free of added material.
  If you use the latter option, you must take reasonably prudent steps,
  when you begin distribution of Opaque copies in quantity, to ensure
--- 238,247 ----
  pages.
  .Sp
  If you publish or distribute Opaque copies of the Document numbering
! more than 100, you must either include a machine\-readable Transparent
  copy along with each Opaque copy, or state in or with each Opaque copy
! a computer\-network location from which the general network\-using
! public has access to download using public\-standard network protocols
  a complete Transparent copy of the Document, free of added material.
  If you use the latter option, you must take reasonably prudent steps,
  when you begin distribution of Opaque copies in quantity, to ensure
*************** edition to the public.
*** 324,332 ****
  It is requested, but not required, that you contact the authors of the
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
! .IP "4." 4
  .IX Item "4."
! \&\s-1MODIFICATIONS\s0
  .Sp
  You may copy and distribute a Modified Version of the Document under
  the conditions of sections 2 and 3 above, provided that you release
--- 253,261 ----
  It is requested, but not required, that you contact the authors of the
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
! .IP 4. 4
  .IX Item "4."
! MODIFICATIONS
  .Sp
  You may copy and distribute a Modified Version of the Document under
  the conditions of sections 2 and 3 above, provided that you release
*************** Version filling the role of the Document
*** 335,437 ****
  and modification of the Modified Version to whoever possesses a copy
  of it.  In addition, you must do these things in the Modified Version:
  .RS 4
! .IP "A." 4
  .IX Item "A."
  Use in the Title Page (and on the covers, if any) a title distinct
  from that of the Document, and from those of previous versions
  (which should, if there were any, be listed in the History section
  of the Document).  You may use the same title as a previous version
  if the original publisher of that version gives permission.
! .IP "B." 4
  .IX Item "B."
  List on the Title Page, as authors, one or more persons or entities
  responsible for authorship of the modifications in the Modified
  Version, together with at least five of the principal authors of the
  Document (all of its principal authors, if it has fewer than five),
  unless they release you from this requirement.
! .IP "C." 4
  .IX Item "C."
  State on the Title page the name of the publisher of the
  Modified Version, as the publisher.
! .IP "D." 4
  .IX Item "D."
  Preserve all the copyright notices of the Document.
! .IP "E." 4
  .IX Item "E."
  Add an appropriate copyright notice for your modifications
  adjacent to the other copyright notices.
! .IP "F." 4
  .IX Item "F."
  Include, immediately after the copyright notices, a license notice
  giving the public permission to use the Modified Version under the
  terms of this License, in the form shown in the Addendum below.
! .IP "G." 4
  .IX Item "G."
  Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document's license notice.
! .IP "H." 4
  .IX Item "H."
  Include an unaltered copy of this License.
! .IP "I." 4
  .IX Item "I."
! Preserve the section Entitled \*(L"History\*(R", Preserve its Title, and add
  to it an item stating at least the title, year, new authors, and
  publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled \*(L"History\*(R" in the Document, create one
  stating the title, year, authors, and publisher of the Document as
  given on its Title Page, then add an item describing the Modified
  Version as stated in the previous sentence.
! .IP "J." 4
  .IX Item "J."
  Preserve the network location, if any, given in the Document for
  public access to a Transparent copy of the Document, and likewise
  the network locations given in the Document for previous versions
! it was based on.  These may be placed in the \*(L"History\*(R" section.
  You may omit a network location for a work that was published at
  least four years before the Document itself, or if the original
  publisher of the version it refers to gives permission.
! .IP "K." 4
  .IX Item "K."
! For any section Entitled \*(L"Acknowledgements\*(R" or \*(L"Dedications\*(R", Preserve
  the Title of the section, and preserve in the section all the
  substance and tone of each of the contributor acknowledgements and/or
  dedications given therein.
! .IP "L." 4
  .IX Item "L."
  Preserve all the Invariant Sections of the Document,
  unaltered in their text and in their titles.  Section numbers
  or the equivalent are not considered part of the section titles.
! .IP "M." 4
  .IX Item "M."
! Delete any section Entitled \*(L"Endorsements\*(R".  Such a section
  may not be included in the Modified Version.
! .IP "N." 4
  .IX Item "N."
! Do not retitle any existing section to be Entitled \*(L"Endorsements\*(R" or
  to conflict in title with any Invariant Section.
! .IP "O." 4
  .IX Item "O."
  Preserve any Warranty Disclaimers.
  .RE
  .RS 4
  .Sp
! If the Modified Version includes new front-matter sections or
  appendices that qualify as Secondary Sections and contain no material
  copied from the Document, you may at your option designate some or all
  of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version's license notice.
  These titles must be distinct from any other section titles.
  .Sp
! You may add a section Entitled \*(L"Endorsements\*(R", provided it contains
  nothing but endorsements of your Modified Version by various
  parties\-\-\-for example, statements of peer review or that the text has
  been approved by an organization as the authoritative definition of a
  standard.
  .Sp
! You may add a passage of up to five words as a Front-Cover Text, and a
! passage of up to 25 words as a Back-Cover Text, to the end of the list
  of Cover Texts in the Modified Version.  Only one passage of
! Front-Cover Text and one of Back-Cover Text may be added by (or
  through arrangements made by) any one entity.  If the Document already
  includes a cover text for the same cover, previously added by you or
  by arrangement made by the same entity you are acting on behalf of,
--- 264,366 ----
  and modification of the Modified Version to whoever possesses a copy
  of it.  In addition, you must do these things in the Modified Version:
  .RS 4
! .IP A. 4
  .IX Item "A."
  Use in the Title Page (and on the covers, if any) a title distinct
  from that of the Document, and from those of previous versions
  (which should, if there were any, be listed in the History section
  of the Document).  You may use the same title as a previous version
  if the original publisher of that version gives permission.
! .IP B. 4
  .IX Item "B."
  List on the Title Page, as authors, one or more persons or entities
  responsible for authorship of the modifications in the Modified
  Version, together with at least five of the principal authors of the
  Document (all of its principal authors, if it has fewer than five),
  unless they release you from this requirement.
! .IP C. 4
  .IX Item "C."
  State on the Title page the name of the publisher of the
  Modified Version, as the publisher.
! .IP D. 4
  .IX Item "D."
  Preserve all the copyright notices of the Document.
! .IP E. 4
  .IX Item "E."
  Add an appropriate copyright notice for your modifications
  adjacent to the other copyright notices.
! .IP F. 4
  .IX Item "F."
  Include, immediately after the copyright notices, a license notice
  giving the public permission to use the Modified Version under the
  terms of this License, in the form shown in the Addendum below.
! .IP G. 4
  .IX Item "G."
  Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document\*(Aqs license notice.
! .IP H. 4
  .IX Item "H."
  Include an unaltered copy of this License.
! .IP I. 4
  .IX Item "I."
! Preserve the section Entitled "History", Preserve its Title, and add
  to it an item stating at least the title, year, new authors, and
  publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled "History" in the Document, create one
  stating the title, year, authors, and publisher of the Document as
  given on its Title Page, then add an item describing the Modified
  Version as stated in the previous sentence.
! .IP J. 4
  .IX Item "J."
  Preserve the network location, if any, given in the Document for
  public access to a Transparent copy of the Document, and likewise
  the network locations given in the Document for previous versions
! it was based on.  These may be placed in the "History" section.
  You may omit a network location for a work that was published at
  least four years before the Document itself, or if the original
  publisher of the version it refers to gives permission.
! .IP K. 4
  .IX Item "K."
! For any section Entitled "Acknowledgements" or "Dedications", Preserve
  the Title of the section, and preserve in the section all the
  substance and tone of each of the contributor acknowledgements and/or
  dedications given therein.
! .IP L. 4
  .IX Item "L."
  Preserve all the Invariant Sections of the Document,
  unaltered in their text and in their titles.  Section numbers
  or the equivalent are not considered part of the section titles.
! .IP M. 4
  .IX Item "M."
! Delete any section Entitled "Endorsements".  Such a section
  may not be included in the Modified Version.
! .IP N. 4
  .IX Item "N."
! Do not retitle any existing section to be Entitled "Endorsements" or
  to conflict in title with any Invariant Section.
! .IP O. 4
  .IX Item "O."
  Preserve any Warranty Disclaimers.
  .RE
  .RS 4
  .Sp
! If the Modified Version includes new front\-matter sections or
  appendices that qualify as Secondary Sections and contain no material
  copied from the Document, you may at your option designate some or all
  of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version\*(Aqs license notice.
  These titles must be distinct from any other section titles.
  .Sp
! You may add a section Entitled "Endorsements", provided it contains
  nothing but endorsements of your Modified Version by various
  parties\-\-\-for example, statements of peer review or that the text has
  been approved by an organization as the authoritative definition of a
  standard.
  .Sp
! You may add a passage of up to five words as a Front\-Cover Text, and a
! passage of up to 25 words as a Back\-Cover Text, to the end of the list
  of Cover Texts in the Modified Version.  Only one passage of
! Front\-Cover Text and one of Back\-Cover Text may be added by (or
  through arrangements made by) any one entity.  If the Document already
  includes a cover text for the same cover, previously added by you or
  by arrangement made by the same entity you are acting on behalf of,
*************** The author(s) and publisher(s) of the Do
*** 442,450 ****
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  .RE
! .IP "5." 4
  .IX Item "5."
! \&\s-1COMBINING DOCUMENTS\s0
  .Sp
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
--- 371,379 ----
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  .RE
! .IP 5. 4
  .IX Item "5."
! COMBINING DOCUMENTS
  .Sp
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
*************** author or publisher of that section if k
*** 462,475 ****
  Make the same adjustment to the section titles in the list of
  Invariant Sections in the license notice of the combined work.
  .Sp
! In the combination, you must combine any sections Entitled \*(L"History\*(R"
  in the various original documents, forming one section Entitled
! \&\*(L"History\*(R"; likewise combine any sections Entitled \*(L"Acknowledgements\*(R",
! and any sections Entitled \*(L"Dedications\*(R".  You must delete all
! sections Entitled \*(L"Endorsements.\*(R"
! .IP "6." 4
  .IX Item "6."
! \&\s-1COLLECTIONS OF DOCUMENTS\s0
  .Sp
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
--- 391,404 ----
  Make the same adjustment to the section titles in the list of
  Invariant Sections in the license notice of the combined work.
  .Sp
! In the combination, you must combine any sections Entitled "History"
  in the various original documents, forming one section Entitled
! "History"; likewise combine any sections Entitled "Acknowledgements",
! and any sections Entitled "Dedications".  You must delete all
! sections Entitled "Endorsements."
! .IP 6. 4
  .IX Item "6."
! COLLECTIONS OF DOCUMENTS
  .Sp
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
*************** You may extract a single document from s
*** 481,509 ****
  it individually under this License, provided you insert a copy of this
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
! .IP "7." 4
  .IX Item "7."
! \&\s-1AGGREGATION WITH INDEPENDENT WORKS\s0
  .Sp
  A compilation of the Document or its derivatives with other separate
  and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an \*(L"aggregate\*(R" if the copyright
  resulting from the compilation is not used to limit the legal rights
! of the compilation's users beyond what the individual works permit.
  When the Document is included in an aggregate, this License does not
  apply to the other works in the aggregate which are not themselves
  derivative works of the Document.
  .Sp
  If the Cover Text requirement of section 3 is applicable to these
  copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document's Cover Texts may be placed on
  covers that bracket the Document within the aggregate, or the
  electronic equivalent of covers if the Document is in electronic form.
  Otherwise they must appear on printed covers that bracket the whole
  aggregate.
! .IP "8." 4
  .IX Item "8."
! \&\s-1TRANSLATION\s0
  .Sp
  Translation is considered a kind of modification, so you may
  distribute translations of the Document under the terms of section 4.
--- 410,438 ----
  it individually under this License, provided you insert a copy of this
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
! .IP 7. 4
  .IX Item "7."
! AGGREGATION WITH INDEPENDENT WORKS
  .Sp
  A compilation of the Document or its derivatives with other separate
  and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an "aggregate" if the copyright
  resulting from the compilation is not used to limit the legal rights
! of the compilation\*(Aqs users beyond what the individual works permit.
  When the Document is included in an aggregate, this License does not
  apply to the other works in the aggregate which are not themselves
  derivative works of the Document.
  .Sp
  If the Cover Text requirement of section 3 is applicable to these
  copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document\*(Aqs Cover Texts may be placed on
  covers that bracket the Document within the aggregate, or the
  electronic equivalent of covers if the Document is in electronic form.
  Otherwise they must appear on printed covers that bracket the whole
  aggregate.
! .IP 8. 4
  .IX Item "8."
! TRANSLATION
  .Sp
  Translation is considered a kind of modification, so you may
  distribute translations of the Document under the terms of section 4.
*************** of those notices and disclaimers.  In ca
*** 518,530 ****
  the translation and the original version of this License or a notice
  or disclaimer, the original version will prevail.
  .Sp
! If a section in the Document is Entitled \*(L"Acknowledgements\*(R",
! \&\*(L"Dedications\*(R", or \*(L"History\*(R", the requirement (section 4) to Preserve
  its Title (section 1) will typically require changing the actual
  title.
! .IP "9." 4
  .IX Item "9."
! \&\s-1TERMINATION\s0
  .Sp
  You may not copy, modify, sublicense, or distribute the Document
  except as expressly provided under this License.  Any attempt
--- 447,459 ----
  the translation and the original version of this License or a notice
  or disclaimer, the original version will prevail.
  .Sp
! If a section in the Document is Entitled "Acknowledgements",
! "Dedications", or "History", the requirement (section 4) to Preserve
  its Title (section 1) will typically require changing the actual
  title.
! .IP 9. 4
  .IX Item "9."
! TERMINATION
  .Sp
  You may not copy, modify, sublicense, or distribute the Document
  except as expressly provided under this License.  Any attempt
*************** licenses of parties who have received co
*** 550,608 ****
  this License.  If your rights have been terminated and not permanently
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
! .IP "10." 4
  .IX Item "10."
! \&\s-1FUTURE REVISIONS OF THIS LICENSE\s0
  .Sp
  The Free Software Foundation may publish new, revised versions
! of the \s-1GNU\s0 Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
  <\fBhttps://www.gnu.org/copyleft/\fR>.
  .Sp
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
! License \*(L"or any later version\*(R" applies to it, you have the option of
  following the terms and conditions either of that specified version or
  of any later version that has been published (not as a draft) by the
  Free Software Foundation.  If the Document does not specify a version
  number of this License, you may choose any version ever published (not
  as a draft) by the Free Software Foundation.  If the Document
  specifies that a proxy can decide which future versions of this
! License can be used, that proxy's public statement of acceptance of a
  version permanently authorizes you to choose that version for the
  Document.
! .IP "11." 4
  .IX Item "11."
! \&\s-1RELICENSING\s0
  .Sp
! \&\*(L"Massive Multiauthor Collaboration Site\*(R" (or \*(L"\s-1MMC\s0 Site\*(R") means any
  World Wide Web server that publishes copyrightable works and also
  provides prominent facilities for anybody to edit those works.  A
  public wiki that anybody can edit is an example of such a server.  A
! \&\*(L"Massive Multiauthor Collaboration\*(R" (or \*(L"\s-1MMC\*(R"\s0) contained in the
! site means any set of copyrightable works thus published on the \s-1MMC\s0
  site.
  .Sp
! \&\*(L"CC-BY-SA\*(R" means the Creative Commons Attribution-Share Alike 3.0
! license published by Creative Commons Corporation, a not-for-profit
  corporation with a principal place of business in San Francisco,
  California, as well as future copyleft versions of that license
  published by that same organization.
  .Sp
! \&\*(L"Incorporate\*(R" means to publish or republish a Document, in whole or
  in part, as part of another Document.
  .Sp
! An \s-1MMC\s0 is \*(L"eligible for relicensing\*(R" if it is licensed under this
  License, and if all works that were first published under this License
! somewhere other than this \s-1MMC,\s0 and subsequently incorporated in whole
! or in part into the \s-1MMC,\s0 (1) had no cover texts or invariant sections,
  and (2) were thus incorporated prior to November 1, 2008.
  .Sp
! The operator of an \s-1MMC\s0 Site may republish an \s-1MMC\s0 contained in the site
! under CC-BY-SA on the same site at any time before August 1, 2009,
! provided the \s-1MMC\s0 is eligible for relicensing.
! .SS "\s-1ADDENDUM:\s0 How to use this License for your documents"
  .IX Subsection "ADDENDUM: How to use this License for your documents"
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and
--- 479,537 ----
  this License.  If your rights have been terminated and not permanently
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
! .IP 10. 4
  .IX Item "10."
! FUTURE REVISIONS OF THIS LICENSE
  .Sp
  The Free Software Foundation may publish new, revised versions
! of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
  <\fBhttps://www.gnu.org/copyleft/\fR>.
  .Sp
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
! License "or any later version" applies to it, you have the option of
  following the terms and conditions either of that specified version or
  of any later version that has been published (not as a draft) by the
  Free Software Foundation.  If the Document does not specify a version
  number of this License, you may choose any version ever published (not
  as a draft) by the Free Software Foundation.  If the Document
  specifies that a proxy can decide which future versions of this
! License can be used, that proxy\*(Aqs public statement of acceptance of a
  version permanently authorizes you to choose that version for the
  Document.
! .IP 11. 4
  .IX Item "11."
! RELICENSING
  .Sp
! "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
  World Wide Web server that publishes copyrightable works and also
  provides prominent facilities for anybody to edit those works.  A
  public wiki that anybody can edit is an example of such a server.  A
! "Massive Multiauthor Collaboration" (or "MMC") contained in the
! site means any set of copyrightable works thus published on the MMC
  site.
  .Sp
! "CC\-BY\-SA" means the Creative Commons Attribution\-Share Alike 3.0
! license published by Creative Commons Corporation, a not\-for\-profit
  corporation with a principal place of business in San Francisco,
  California, as well as future copyleft versions of that license
  published by that same organization.
  .Sp
! "Incorporate" means to publish or republish a Document, in whole or
  in part, as part of another Document.
  .Sp
! An MMC is "eligible for relicensing" if it is licensed under this
  License, and if all works that were first published under this License
! somewhere other than this MMC, and subsequently incorporated in whole
! or in part into the MMC, (1) had no cover texts or invariant sections,
  and (2) were thus incorporated prior to November 1, 2008.
  .Sp
! The operator of an MMC Site may republish an MMC contained in the site
! under CC\-BY\-SA on the same site at any time before August 1, 2009,
! provided the MMC is eligible for relicensing.
! .SS "ADDENDUM: How to use this License for your documents"
  .IX Subsection "ADDENDUM: How to use this License for your documents"
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and
*************** license notices just after the title pag
*** 618,625 ****
  \&          Free Documentation License".
  .Ve
  .PP
! If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
! replace the \*(L"with...Texts.\*(R" line with this:
  .PP
  .Vb 3
  \&            with the Invariant Sections being <list their titles>, with
--- 547,554 ----
  \&          Free Documentation License".
  .Ve
  .PP
! If you have Invariant Sections, Front\-Cover Texts and Back\-Cover Texts,
! replace the "with...Texts." line with this:
  .PP
  .Vb 3
  \&            with the Invariant Sections being <list their titles>, with
*************** situation.
*** 633,644 ****
  .PP
  If your document contains nontrivial examples of program code, we
  recommend releasing these examples in parallel under your choice of
! free software license, such as the \s-1GNU\s0 General Public License,
  to permit their use in free software.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIfsf\-funding\fR\|(7).
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
  <\fBhttps://www.fsf.org\fR>
--- 562,573 ----
  .PP
  If your document contains nontrivial examples of program code, we
  recommend releasing these examples in parallel under your choice of
! free software license, such as the GNU General Public License,
  to permit their use in free software.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBfsf\-funding\fR\|(7).
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
  <\fBhttps://www.fsf.org\fR>
diff -Nrcpad gcc-14.3.0/gcc/doc/gfortran.1 gcc-14.3.0-RC-20260619/gcc/doc/gfortran.1
*** gcc-14.3.0/gcc/doc/gfortran.1	Fri May 23 11:28:13 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gfortran.1	Fri Jun 19 07:14:57 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,142 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GFORTRAN 1"
! .TH GFORTRAN 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gfortran \- GNU Fortran compiler
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
  gfortran [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR]
           [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
--- 38,71 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GFORTRAN 1"
! .TH GFORTRAN 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gfortran \- GNU Fortran compiler
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
  gfortran [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR]
           [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
*************** gfortran [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR]
*** 144,175 ****
           [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
           [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
           [\fB\-f\fR\fIoption\fR...]
!          [\fB\-m\fR\fImachine-option\fR...]
           [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
  The \fBgfortran\fR command supports all the options supported by the
! \&\fBgcc\fR command.  Only options specific to \s-1GNU\s0 Fortran are documented
  here.
  .PP
! All \s-1GCC\s0 and \s-1GNU\s0 Fortran options
  are accepted both by \fBgfortran\fR and by \fBgcc\fR
  (as well as any other drivers built at the same time,
  such as \fBg++\fR),
! since adding \s-1GNU\s0 Fortran to the \s-1GCC\s0 distribution
! enables acceptance of \s-1GNU\s0 Fortran options
  by all of the relevant drivers.
  .PP
  In some cases, options have positive and negative forms;
  the negative form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.
  This manual documents only one of these two forms, whichever
  one is not the default.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
! Here is a summary of all the options specific to \s-1GNU\s0 Fortran, grouped
  by type.  Explanations are in the following sections.
  .IP "\fIFortran Language Options\fR" 4
  .IX Item "Fortran Language Options"
--- 73,104 ----
           [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
           [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
           [\fB\-f\fR\fIoption\fR...]
!          [\fB\-m\fR\fImachine\-option\fR...]
           [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR...
  .PP
  Only the most useful options are listed here; see below for the
  remainder.
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
  The \fBgfortran\fR command supports all the options supported by the
! \&\fBgcc\fR command.  Only options specific to GNU Fortran are documented
  here.
  .PP
! All GCC and GNU Fortran options
  are accepted both by \fBgfortran\fR and by \fBgcc\fR
  (as well as any other drivers built at the same time,
  such as \fBg++\fR),
! since adding GNU Fortran to the GCC distribution
! enables acceptance of GNU Fortran options
  by all of the relevant drivers.
  .PP
  In some cases, options have positive and negative forms;
  the negative form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.
  This manual documents only one of these two forms, whichever
  one is not the default.
! .SH OPTIONS
  .IX Header "OPTIONS"
! Here is a summary of all the options specific to GNU Fortran, grouped
  by type.  Explanations are in the following sections.
  .IP "\fIFortran Language Options\fR" 4
  .IX Item "Fortran Language Options"
*************** by type.  Explanations are in the follow
*** 250,278 ****
  .IX Subsection "Options controlling Fortran dialect"
  The following options control the details of the Fortran dialect
  accepted by the compiler:
! .IP "\fB\-ffree\-form\fR" 4
  .IX Item "-ffree-form"
  .PD 0
! .IP "\fB\-ffixed\-form\fR" 4
  .IX Item "-ffixed-form"
  .PD
  Specify the layout used by the source file.  The free form layout
  was introduced in Fortran 90.  Fixed form was traditionally used in
  older Fortran programs.  When neither option is specified, the source
  form is determined by the file extension.
! .IP "\fB\-fall\-intrinsics\fR" 4
  .IX Item "-fall-intrinsics"
! This option causes all intrinsic procedures (including the GNU-specific
  extensions) to be accepted.  This can be useful with \fB\-std=\fR to
! force standard-compliance but get access to the full range of intrinsics
  available with \fBgfortran\fR.  As a consequence, \fB\-Wintrinsics\-std\fR
! will be ignored and no user-defined procedure with the same name as any
  intrinsic will be called except when it is explicitly declared \f(CW\*(C`EXTERNAL\*(C'\fR.
! .IP "\fB\-fallow\-argument\-mismatch\fR" 4
  .IX Item "-fallow-argument-mismatch"
  Some code contains calls to external procedures with mismatches
  between the calls and the procedure definition, or with mismatches
! between different calls. Such code is non-conforming, and will usually
  be flagged with an error.  This options degrades the error to a
  warning, which can only be disabled by disabling all warnings via
  \&\fB\-w\fR.  Only a single occurrence per argument is flagged by this
--- 179,207 ----
  .IX Subsection "Options controlling Fortran dialect"
  The following options control the details of the Fortran dialect
  accepted by the compiler:
! .IP \fB\-ffree\-form\fR 4
  .IX Item "-ffree-form"
  .PD 0
! .IP \fB\-ffixed\-form\fR 4
  .IX Item "-ffixed-form"
  .PD
  Specify the layout used by the source file.  The free form layout
  was introduced in Fortran 90.  Fixed form was traditionally used in
  older Fortran programs.  When neither option is specified, the source
  form is determined by the file extension.
! .IP \fB\-fall\-intrinsics\fR 4
  .IX Item "-fall-intrinsics"
! This option causes all intrinsic procedures (including the GNU\-specific
  extensions) to be accepted.  This can be useful with \fB\-std=\fR to
! force standard\-compliance but get access to the full range of intrinsics
  available with \fBgfortran\fR.  As a consequence, \fB\-Wintrinsics\-std\fR
! will be ignored and no user\-defined procedure with the same name as any
  intrinsic will be called except when it is explicitly declared \f(CW\*(C`EXTERNAL\*(C'\fR.
! .IP \fB\-fallow\-argument\-mismatch\fR 4
  .IX Item "-fallow-argument-mismatch"
  Some code contains calls to external procedures with mismatches
  between the calls and the procedure definition, or with mismatches
! between different calls. Such code is non\-conforming, and will usually
  be flagged with an error.  This options degrades the error to a
  warning, which can only be disabled by disabling all warnings via
  \&\fB\-w\fR.  Only a single occurrence per argument is flagged by this
*************** warning.  \fB\-fallow\-argument\-mismatc
*** 280,297 ****
  \&\fB\-std=legacy\fR.
  .Sp
  Using this option is \fIstrongly\fR discouraged.  It is possible to
! provide standard-conforming code which allows different types of
  arguments by using an explicit interface and \f(CWTYPE(*)\fR.
! .IP "\fB\-fallow\-invalid\-boz\fR" 4
  .IX Item "-fallow-invalid-boz"
! A \s-1BOZ\s0 literal constant can occur in a limited number of contexts in
  standard conforming Fortran.  This option degrades an error condition
! to a warning, and allows a \s-1BOZ\s0 literal constant to appear where the
  Fortran standard would otherwise prohibit its use.
! .IP "\fB\-fd\-lines\-as\-code\fR" 4
  .IX Item "-fd-lines-as-code"
  .PD 0
! .IP "\fB\-fd\-lines\-as\-comments\fR" 4
  .IX Item "-fd-lines-as-comments"
  .PD
  Enable special treatment for lines beginning with \f(CW\*(C`d\*(C'\fR or \f(CW\*(C`D\*(C'\fR
--- 209,226 ----
  \&\fB\-std=legacy\fR.
  .Sp
  Using this option is \fIstrongly\fR discouraged.  It is possible to
! provide standard\-conforming code which allows different types of
  arguments by using an explicit interface and \f(CWTYPE(*)\fR.
! .IP \fB\-fallow\-invalid\-boz\fR 4
  .IX Item "-fallow-invalid-boz"
! A BOZ literal constant can occur in a limited number of contexts in
  standard conforming Fortran.  This option degrades an error condition
! to a warning, and allows a BOZ literal constant to appear where the
  Fortran standard would otherwise prohibit its use.
! .IP \fB\-fd\-lines\-as\-code\fR 4
  .IX Item "-fd-lines-as-code"
  .PD 0
! .IP \fB\-fd\-lines\-as\-comments\fR 4
  .IX Item "-fd-lines-as-comments"
  .PD
  Enable special treatment for lines beginning with \f(CW\*(C`d\*(C'\fR or \f(CW\*(C`D\*(C'\fR
*************** in fixed form sources.  If the \fB\-fd\-
*** 299,310 ****
  given they are treated as if the first column contained a blank.  If the
  \&\fB\-fd\-lines\-as\-comments\fR option is given, they are treated as
  comment lines.
! .IP "\fB\-fdec\fR" 4
  .IX Item "-fdec"
! \&\s-1DEC\s0 compatibility mode. Enables extensions and other features that mimic
! the default behavior of older compilers (such as \s-1DEC\s0).
! These features are non-standard and should be avoided at all costs.
! For details on \s-1GNU\s0 Fortran's implementation of these extensions see the
  full documentation.
  .Sp
  Other flags enabled by this switch are:
--- 228,239 ----
  given they are treated as if the first column contained a blank.  If the
  \&\fB\-fd\-lines\-as\-comments\fR option is given, they are treated as
  comment lines.
! .IP \fB\-fdec\fR 4
  .IX Item "-fdec"
! DEC compatibility mode. Enables extensions and other features that mimic
! the default behavior of older compilers (such as DEC).
! These features are non\-standard and should be avoided at all costs.
! For details on GNU Fortran\*(Aqs implementation of these extensions see the
  full documentation.
  .Sp
  Other flags enabled by this switch are:
*************** Other flags enabled by this switch are:
*** 315,435 ****
  .Sp
  If \fB\-fd\-lines\-as\-code\fR/\fB\-fd\-lines\-as\-comments\fR are unset, then
  \&\fB\-fdec\fR also sets \fB\-fd\-lines\-as\-comments\fR.
! .IP "\fB\-fdec\-char\-conversions\fR" 4
  .IX Item "-fdec-char-conversions"
  Enable the use of character literals in assignments and \f(CW\*(C`DATA\*(C'\fR statements
! for non-character variables.
! .IP "\fB\-fdec\-structure\fR" 4
  .IX Item "-fdec-structure"
! Enable \s-1DEC\s0 \f(CW\*(C`STRUCTURE\*(C'\fR and \f(CW\*(C`RECORD\*(C'\fR as well as \f(CW\*(C`UNION\*(C'\fR,
! \&\f(CW\*(C`MAP\*(C'\fR, and dot ('.') as a member separator (in addition to '%'). This is
  provided for compatibility only; Fortran 90 derived types should be used
  instead where possible.
! .IP "\fB\-fdec\-intrinsic\-ints\fR" 4
  .IX Item "-fdec-intrinsic-ints"
! Enable B/I/J/K kind variants of existing integer functions (e.g. \s-1BIAND, IIAND,
! JIAND,\s0 etc...). For a complete list of intrinsics see the full documentation.
! .IP "\fB\-fdec\-math\fR" 4
  .IX Item "-fdec-math"
  Obsolete flag.  The purpose of this option was to
! enable legacy math intrinsics such as \s-1COTAN\s0 and degree-valued trigonometric
! functions (e.g. \s-1TAND, ATAND,\s0 etc...) for compatability with older code. This
  option is no longer operable. The trigonometric functions are now either 
! part of Fortran 2023 or \s-1GNU\s0 extensions.
! .IP "\fB\-fdec\-static\fR" 4
  .IX Item "-fdec-static"
! Enable DEC-style \s-1STATIC\s0 and \s-1AUTOMATIC\s0 attributes to explicitly specify
  the storage of variables and other objects.
! .IP "\fB\-fdec\-include\fR" 4
  .IX Item "-fdec-include"
! Enable parsing of \s-1INCLUDE\s0 as a statement in addition to parsing it as
! \&\s-1INCLUDE\s0 line.  When parsed as \s-1INCLUDE\s0 statement, \s-1INCLUDE\s0 does not have to
  be on a single line and can use line continuations.
! .IP "\fB\-fdec\-format\-defaults\fR" 4
  .IX Item "-fdec-format-defaults"
  Enable format specifiers F, G and I to be used without width specifiers,
  default widths will be used instead.
! .IP "\fB\-fdec\-blank\-format\-item\fR" 4
  .IX Item "-fdec-blank-format-item"
  Enable a blank format item at the end of a format specification i.e. nothing
  following the final comma.
! .IP "\fB\-fdollar\-ok\fR" 4
  .IX Item "-fdollar-ok"
! Allow \fB$\fR as a valid non-first character in a symbol name. Symbols 
  that start with \fB$\fR are rejected since it is unclear which rules to
  apply to implicit typing as different vendors implement different rules.
  Using \fB$\fR in \f(CW\*(C`IMPLICIT\*(C'\fR statements is also rejected.
! .IP "\fB\-fbackslash\fR" 4
  .IX Item "-fbackslash"
  Change the interpretation of backslashes in string literals from a single
! backslash character to \*(L"C\-style\*(R" escape characters. The following
  combinations are expanded \f(CW\*(C`\ea\*(C'\fR, \f(CW\*(C`\eb\*(C'\fR, \f(CW\*(C`\ef\*(C'\fR, \f(CW\*(C`\en\*(C'\fR,
! \&\f(CW\*(C`\er\*(C'\fR, \f(CW\*(C`\et\*(C'\fR, \f(CW\*(C`\ev\*(C'\fR, \f(CW\*(C`\e\e\*(C'\fR, and \f(CW\*(C`\e0\*(C'\fR to the \s-1ASCII\s0
  characters alert, backspace, form feed, newline, carriage return,
! horizontal tab, vertical tab, backslash, and \s-1NUL,\s0 respectively.
  Additionally, \f(CW\*(C`\ex\*(C'\fR\fInn\fR, \f(CW\*(C`\eu\*(C'\fR\fInnnn\fR and
  \&\f(CW\*(C`\eU\*(C'\fR\fInnnnnnnn\fR (where each \fIn\fR is a hexadecimal digit) are
  translated into the Unicode characters corresponding to the specified code
  points. All other combinations of a character preceded by \e are
  unexpanded.
! .IP "\fB\-fmodule\-private\fR" 4
  .IX Item "-fmodule-private"
  Set the default accessibility of module entities to \f(CW\*(C`PRIVATE\*(C'\fR.
! Use-associated entities will not be accessible unless they are explicitly
  declared as \f(CW\*(C`PUBLIC\*(C'\fR.
! .IP "\fB\-ffixed\-line\-length\-\fR\fIn\fR" 4
  .IX Item "-ffixed-line-length-n"
! Set column after which characters are ignored in typical fixed-form
  lines in the source file, and, unless \f(CW\*(C`\-fno\-pad\-source\*(C'\fR, through which
  spaces are assumed (as if padded to that length) after the ends of short
! fixed-form lines.
  .Sp
  Popular values for \fIn\fR include 72 (the
  standard and the default), 80 (card image), and 132 (corresponding
! to \*(L"extended-source\*(R" options in some popular compilers).
  \&\fIn\fR may also be \fBnone\fR, meaning that the entire line is meaningful
  and that continued character constants never have implicit spaces appended
  to them to fill out the line.
  \&\fB\-ffixed\-line\-length\-0\fR means the same thing as
  \&\fB\-ffixed\-line\-length\-none\fR.
! .IP "\fB\-fno\-pad\-source\fR" 4
  .IX Item "-fno-pad-source"
! By default fixed-form lines have spaces assumed (as if padded to that length)
! after the ends of short fixed-form lines.  This is not done either if
  \&\fB\-ffixed\-line\-length\-0\fR, \fB\-ffixed\-line\-length\-none\fR or
  if \fB\-fno\-pad\-source\fR option is used.  With any of those options
  continued character constants never have implicit spaces appended
  to them to fill out the line.
! .IP "\fB\-ffree\-line\-length\-\fR\fIn\fR" 4
  .IX Item "-ffree-line-length-n"
! Set column after which characters are ignored in typical free-form
  lines in the source file. The default value is 132.
  \&\fIn\fR may be \fBnone\fR, meaning that the entire line is meaningful.
  \&\fB\-ffree\-line\-length\-0\fR means the same thing as
  \&\fB\-ffree\-line\-length\-none\fR.
! .IP "\fB\-fmax\-identifier\-length=\fR\fIn\fR" 4
  .IX Item "-fmax-identifier-length=n"
  Specify the maximum allowed identifier length. Typical values are
  31 (Fortran 95) and 63 (Fortran 2003 and later).
! .IP "\fB\-fimplicit\-none\fR" 4
  .IX Item "-fimplicit-none"
  Specify that no implicit typing is allowed, unless overridden by explicit
  \&\f(CW\*(C`IMPLICIT\*(C'\fR statements.  This is the equivalent of adding
  \&\f(CW\*(C`implicit none\*(C'\fR to the start of every procedure.
! .IP "\fB\-fcray\-pointer\fR" 4
  .IX Item "-fcray-pointer"
  Enable the Cray pointer extension, which provides C\-like pointer
  functionality.
! .IP "\fB\-fopenacc\fR" 4
  .IX Item "-fopenacc"
! Enable handling of OpenACC directives \fB!$acc\fR in free-form Fortran and
! \&\fB!$acc\fR, \fBc$acc\fR and \fB*$acc\fR in fixed-form Fortran.  When
  \&\fB\-fopenacc\fR is specified, the compiler generates accelerated code
  according to the OpenACC Application Programming Interface v2.6
  <\fBhttps://www.openacc.org\fR>.  This option implies \fB\-pthread\fR,
  and thus is only supported on targets that have support for \fB\-pthread\fR.
  The option \fB\-fopenacc\fR implies \fB\-frecursive\fR.
! .IP "\fB\-fopenmp\fR" 4
  .IX Item "-fopenmp"
  Enable handling of OpenMP directives \fB!$omp\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
--- 244,364 ----
  .Sp
  If \fB\-fd\-lines\-as\-code\fR/\fB\-fd\-lines\-as\-comments\fR are unset, then
  \&\fB\-fdec\fR also sets \fB\-fd\-lines\-as\-comments\fR.
! .IP \fB\-fdec\-char\-conversions\fR 4
  .IX Item "-fdec-char-conversions"
  Enable the use of character literals in assignments and \f(CW\*(C`DATA\*(C'\fR statements
! for non\-character variables.
! .IP \fB\-fdec\-structure\fR 4
  .IX Item "-fdec-structure"
! Enable DEC \f(CW\*(C`STRUCTURE\*(C'\fR and \f(CW\*(C`RECORD\*(C'\fR as well as \f(CW\*(C`UNION\*(C'\fR,
! \&\f(CW\*(C`MAP\*(C'\fR, and dot (\*(Aq.\*(Aq) as a member separator (in addition to \*(Aq%\*(Aq). This is
  provided for compatibility only; Fortran 90 derived types should be used
  instead where possible.
! .IP \fB\-fdec\-intrinsic\-ints\fR 4
  .IX Item "-fdec-intrinsic-ints"
! Enable B/I/J/K kind variants of existing integer functions (e.g. BIAND, IIAND,
! JIAND, etc...). For a complete list of intrinsics see the full documentation.
! .IP \fB\-fdec\-math\fR 4
  .IX Item "-fdec-math"
  Obsolete flag.  The purpose of this option was to
! enable legacy math intrinsics such as COTAN and degree\-valued trigonometric
! functions (e.g. TAND, ATAND, etc...) for compatability with older code. This
  option is no longer operable. The trigonometric functions are now either 
! part of Fortran 2023 or GNU extensions.
! .IP \fB\-fdec\-static\fR 4
  .IX Item "-fdec-static"
! Enable DEC\-style STATIC and AUTOMATIC attributes to explicitly specify
  the storage of variables and other objects.
! .IP \fB\-fdec\-include\fR 4
  .IX Item "-fdec-include"
! Enable parsing of INCLUDE as a statement in addition to parsing it as
! INCLUDE line.  When parsed as INCLUDE statement, INCLUDE does not have to
  be on a single line and can use line continuations.
! .IP \fB\-fdec\-format\-defaults\fR 4
  .IX Item "-fdec-format-defaults"
  Enable format specifiers F, G and I to be used without width specifiers,
  default widths will be used instead.
! .IP \fB\-fdec\-blank\-format\-item\fR 4
  .IX Item "-fdec-blank-format-item"
  Enable a blank format item at the end of a format specification i.e. nothing
  following the final comma.
! .IP \fB\-fdollar\-ok\fR 4
  .IX Item "-fdollar-ok"
! Allow \fB$\fR as a valid non\-first character in a symbol name. Symbols 
  that start with \fB$\fR are rejected since it is unclear which rules to
  apply to implicit typing as different vendors implement different rules.
  Using \fB$\fR in \f(CW\*(C`IMPLICIT\*(C'\fR statements is also rejected.
! .IP \fB\-fbackslash\fR 4
  .IX Item "-fbackslash"
  Change the interpretation of backslashes in string literals from a single
! backslash character to "C\-style" escape characters. The following
  combinations are expanded \f(CW\*(C`\ea\*(C'\fR, \f(CW\*(C`\eb\*(C'\fR, \f(CW\*(C`\ef\*(C'\fR, \f(CW\*(C`\en\*(C'\fR,
! \&\f(CW\*(C`\er\*(C'\fR, \f(CW\*(C`\et\*(C'\fR, \f(CW\*(C`\ev\*(C'\fR, \f(CW\*(C`\e\e\*(C'\fR, and \f(CW\*(C`\e0\*(C'\fR to the ASCII
  characters alert, backspace, form feed, newline, carriage return,
! horizontal tab, vertical tab, backslash, and NUL, respectively.
  Additionally, \f(CW\*(C`\ex\*(C'\fR\fInn\fR, \f(CW\*(C`\eu\*(C'\fR\fInnnn\fR and
  \&\f(CW\*(C`\eU\*(C'\fR\fInnnnnnnn\fR (where each \fIn\fR is a hexadecimal digit) are
  translated into the Unicode characters corresponding to the specified code
  points. All other combinations of a character preceded by \e are
  unexpanded.
! .IP \fB\-fmodule\-private\fR 4
  .IX Item "-fmodule-private"
  Set the default accessibility of module entities to \f(CW\*(C`PRIVATE\*(C'\fR.
! Use\-associated entities will not be accessible unless they are explicitly
  declared as \f(CW\*(C`PUBLIC\*(C'\fR.
! .IP \fB\-ffixed\-line\-length\-\fR\fIn\fR 4
  .IX Item "-ffixed-line-length-n"
! Set column after which characters are ignored in typical fixed\-form
  lines in the source file, and, unless \f(CW\*(C`\-fno\-pad\-source\*(C'\fR, through which
  spaces are assumed (as if padded to that length) after the ends of short
! fixed\-form lines.
  .Sp
  Popular values for \fIn\fR include 72 (the
  standard and the default), 80 (card image), and 132 (corresponding
! to "extended\-source" options in some popular compilers).
  \&\fIn\fR may also be \fBnone\fR, meaning that the entire line is meaningful
  and that continued character constants never have implicit spaces appended
  to them to fill out the line.
  \&\fB\-ffixed\-line\-length\-0\fR means the same thing as
  \&\fB\-ffixed\-line\-length\-none\fR.
! .IP \fB\-fno\-pad\-source\fR 4
  .IX Item "-fno-pad-source"
! By default fixed\-form lines have spaces assumed (as if padded to that length)
! after the ends of short fixed\-form lines.  This is not done either if
  \&\fB\-ffixed\-line\-length\-0\fR, \fB\-ffixed\-line\-length\-none\fR or
  if \fB\-fno\-pad\-source\fR option is used.  With any of those options
  continued character constants never have implicit spaces appended
  to them to fill out the line.
! .IP \fB\-ffree\-line\-length\-\fR\fIn\fR 4
  .IX Item "-ffree-line-length-n"
! Set column after which characters are ignored in typical free\-form
  lines in the source file. The default value is 132.
  \&\fIn\fR may be \fBnone\fR, meaning that the entire line is meaningful.
  \&\fB\-ffree\-line\-length\-0\fR means the same thing as
  \&\fB\-ffree\-line\-length\-none\fR.
! .IP \fB\-fmax\-identifier\-length=\fR\fIn\fR 4
  .IX Item "-fmax-identifier-length=n"
  Specify the maximum allowed identifier length. Typical values are
  31 (Fortran 95) and 63 (Fortran 2003 and later).
! .IP \fB\-fimplicit\-none\fR 4
  .IX Item "-fimplicit-none"
  Specify that no implicit typing is allowed, unless overridden by explicit
  \&\f(CW\*(C`IMPLICIT\*(C'\fR statements.  This is the equivalent of adding
  \&\f(CW\*(C`implicit none\*(C'\fR to the start of every procedure.
! .IP \fB\-fcray\-pointer\fR 4
  .IX Item "-fcray-pointer"
  Enable the Cray pointer extension, which provides C\-like pointer
  functionality.
! .IP \fB\-fopenacc\fR 4
  .IX Item "-fopenacc"
! Enable handling of OpenACC directives \fB!$acc\fR in free\-form Fortran and
! \&\fB!$acc\fR, \fBc$acc\fR and \fB*$acc\fR in fixed\-form Fortran.  When
  \&\fB\-fopenacc\fR is specified, the compiler generates accelerated code
  according to the OpenACC Application Programming Interface v2.6
  <\fBhttps://www.openacc.org\fR>.  This option implies \fB\-pthread\fR,
  and thus is only supported on targets that have support for \fB\-pthread\fR.
  The option \fB\-fopenacc\fR implies \fB\-frecursive\fR.
! .IP \fB\-fopenmp\fR 4
  .IX Item "-fopenmp"
  Enable handling of OpenMP directives \fB!$omp\fR in Fortran.  It
  additionally enables the conditional compilation sentinel \fB!$\fR in
*************** Program Interface v4.5 <\fBhttps://www.o
*** 440,446 ****
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
  \&\fB\-fopenmp\-simd\fR and \fB\-frecursive\fR.
! .IP "\fB\-fopenmp\-allocators\fR" 4
  .IX Item "-fopenmp-allocators"
  Enables handling of allocation, reallocation and deallocation of Fortran
  allocatable and pointer variables that are allocated using the
--- 369,375 ----
  implies \fB\-pthread\fR, and thus is only supported on targets that
  have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
  \&\fB\-fopenmp\-simd\fR and \fB\-frecursive\fR.
! .IP \fB\-fopenmp\-allocators\fR 4
  .IX Item "-fopenmp-allocators"
  Enables handling of allocation, reallocation and deallocation of Fortran
  allocatable and pointer variables that are allocated using the
*************** a derived type that have not been alloca
*** 457,465 ****
  do not need to be compiled with this option.  Nor do files that handle
  such variables after they have been deallocated or allocated by the
  normal Fortran allocator.
! .IP "\fB\-fopenmp\-simd\fR" 4
  .IX Item "-fopenmp-simd"
! Enable handling of OpenMP's \f(CW\*(C`simd\*(C'\fR, \f(CW\*(C`declare simd\*(C'\fR,
  \&\f(CW\*(C`declare reduction\*(C'\fR, \f(CW\*(C`assume\*(C'\fR, \f(CW\*(C`ordered\*(C'\fR, \f(CW\*(C`scan\*(C'\fR
  and \f(CW\*(C`loop\*(C'\fR directive, and of combined or composite directives with
  \&\f(CW\*(C`simd\*(C'\fR as constituent with  \f(CW\*(C`!$omp\*(C'\fR in Fortran.  It additionally
--- 386,394 ----
  do not need to be compiled with this option.  Nor do files that handle
  such variables after they have been deallocated or allocated by the
  normal Fortran allocator.
! .IP \fB\-fopenmp\-simd\fR 4
  .IX Item "-fopenmp-simd"
! Enable handling of OpenMP\*(Aqs \f(CW\*(C`simd\*(C'\fR, \f(CW\*(C`declare simd\*(C'\fR,
  \&\f(CW\*(C`declare reduction\*(C'\fR, \f(CW\*(C`assume\*(C'\fR, \f(CW\*(C`ordered\*(C'\fR, \f(CW\*(C`scan\*(C'\fR
  and \f(CW\*(C`loop\*(C'\fR directive, and of combined or composite directives with
  \&\f(CW\*(C`simd\*(C'\fR as constituent with  \f(CW\*(C`!$omp\*(C'\fR in Fortran.  It additionally
*************** fixed source form Fortran, the sentinels
*** 468,523 ****
  \&\fB*\fR.  Other OpenMP directives are ignored.  Unless \fB\-fopenmp\fR
  is additionally specified, the \f(CW\*(C`loop\*(C'\fR region binds to the current task
  region, independent of the specified \f(CW\*(C`bind\*(C'\fR clause.
! .IP "\fB\-fno\-range\-check\fR" 4
  .IX Item "-fno-range-check"
  Disable range checking on results of simplification of constant
! expressions during compilation.  For example, \s-1GNU\s0 Fortran will give
  an error at compile time when simplifying \f(CW\*(C`a = 1. / 0\*(C'\fR.
  With this option, no error will be given and \f(CW\*(C`a\*(C'\fR will be assigned
  the value \f(CW\*(C`+Infinity\*(C'\fR.  If an expression evaluates to a value
! outside of the relevant range of [\f(CW\*(C`\-HUGE()\*(C'\fR:\f(CW\*(C`HUGE()\*(C'\fR],
  then the expression will be replaced by \f(CW\*(C`\-Inf\*(C'\fR or \f(CW\*(C`+Inf\*(C'\fR
  as appropriate.
  Similarly, \f(CW\*(C`DATA i/Z\*(AqFFFFFFFF\*(Aq/\*(C'\fR will result in an integer overflow
  on most systems, but with \fB\-fno\-range\-check\fR the value will
! \&\*(L"wrap around\*(R" and \f(CW\*(C`i\*(C'\fR will be initialized to \-1 instead.
! .IP "\fB\-fdefault\-integer\-8\fR" 4
  .IX Item "-fdefault-integer-8"
  Set the default integer and logical types to an 8 byte wide type.  This option
  also affects the kind of integer constants like \f(CW42\fR. Unlike
  \&\fB\-finteger\-4\-integer\-8\fR, it does not promote variables with explicit
  kind declaration.
! .IP "\fB\-fdefault\-real\-8\fR" 4
  .IX Item "-fdefault-real-8"
  Set the default real type to an 8 byte wide type.  This option also affects
! the kind of non-double real constants like \f(CW1.0\fR.  This option promotes
  the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to 16 bytes if possible.  If \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR
  is given along with \f(CW\*(C`fdefault\-real\-8\*(C'\fR, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR
  and double real constants are not promoted.  Unlike \fB\-freal\-4\-real\-8\fR,
  \&\f(CW\*(C`fdefault\-real\-8\*(C'\fR does not promote variables with explicit kind
  declarations.
! .IP "\fB\-fdefault\-real\-10\fR" 4
  .IX Item "-fdefault-real-10"
  Set the default real type to an 10 byte wide type.  This option also affects
! the kind of non-double real constants like \f(CW1.0\fR.  This option promotes
  the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to 16 bytes if possible.  If \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR
  is given along with \f(CW\*(C`fdefault\-real\-10\*(C'\fR, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR
  and double real constants are not promoted.  Unlike \fB\-freal\-4\-real\-10\fR,
  \&\f(CW\*(C`fdefault\-real\-10\*(C'\fR does not promote variables with explicit kind
  declarations.
! .IP "\fB\-fdefault\-real\-16\fR" 4
  .IX Item "-fdefault-real-16"
  Set the default real type to an 16 byte wide type.  This option also affects
! the kind of non-double real constants like \f(CW1.0\fR.  This option promotes
  the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to 16 bytes if possible.  If \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR
  is given along with \f(CW\*(C`fdefault\-real\-16\*(C'\fR, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR
  and double real constants are not promoted.  Unlike \fB\-freal\-4\-real\-16\fR,
  \&\f(CW\*(C`fdefault\-real\-16\*(C'\fR does not promote variables with explicit kind
  declarations.
! .IP "\fB\-fdefault\-double\-8\fR" 4
  .IX Item "-fdefault-double-8"
  Set the \f(CW\*(C`DOUBLE PRECISION\*(C'\fR type and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to an 8 byte wide type.  Do nothing if this
--- 397,452 ----
  \&\fB*\fR.  Other OpenMP directives are ignored.  Unless \fB\-fopenmp\fR
  is additionally specified, the \f(CW\*(C`loop\*(C'\fR region binds to the current task
  region, independent of the specified \f(CW\*(C`bind\*(C'\fR clause.
! .IP \fB\-fno\-range\-check\fR 4
  .IX Item "-fno-range-check"
  Disable range checking on results of simplification of constant
! expressions during compilation.  For example, GNU Fortran will give
  an error at compile time when simplifying \f(CW\*(C`a = 1. / 0\*(C'\fR.
  With this option, no error will be given and \f(CW\*(C`a\*(C'\fR will be assigned
  the value \f(CW\*(C`+Infinity\*(C'\fR.  If an expression evaluates to a value
! outside of the relevant range of [\f(CW\*(C`\-HUGE()\*(C'\fR:\f(CWHUGE()\fR],
  then the expression will be replaced by \f(CW\*(C`\-Inf\*(C'\fR or \f(CW\*(C`+Inf\*(C'\fR
  as appropriate.
  Similarly, \f(CW\*(C`DATA i/Z\*(AqFFFFFFFF\*(Aq/\*(C'\fR will result in an integer overflow
  on most systems, but with \fB\-fno\-range\-check\fR the value will
! "wrap around" and \f(CW\*(C`i\*(C'\fR will be initialized to \-1 instead.
! .IP \fB\-fdefault\-integer\-8\fR 4
  .IX Item "-fdefault-integer-8"
  Set the default integer and logical types to an 8 byte wide type.  This option
  also affects the kind of integer constants like \f(CW42\fR. Unlike
  \&\fB\-finteger\-4\-integer\-8\fR, it does not promote variables with explicit
  kind declaration.
! .IP \fB\-fdefault\-real\-8\fR 4
  .IX Item "-fdefault-real-8"
  Set the default real type to an 8 byte wide type.  This option also affects
! the kind of non\-double real constants like \f(CW1.0\fR.  This option promotes
  the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to 16 bytes if possible.  If \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR
  is given along with \f(CW\*(C`fdefault\-real\-8\*(C'\fR, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR
  and double real constants are not promoted.  Unlike \fB\-freal\-4\-real\-8\fR,
  \&\f(CW\*(C`fdefault\-real\-8\*(C'\fR does not promote variables with explicit kind
  declarations.
! .IP \fB\-fdefault\-real\-10\fR 4
  .IX Item "-fdefault-real-10"
  Set the default real type to an 10 byte wide type.  This option also affects
! the kind of non\-double real constants like \f(CW1.0\fR.  This option promotes
  the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to 16 bytes if possible.  If \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR
  is given along with \f(CW\*(C`fdefault\-real\-10\*(C'\fR, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR
  and double real constants are not promoted.  Unlike \fB\-freal\-4\-real\-10\fR,
  \&\f(CW\*(C`fdefault\-real\-10\*(C'\fR does not promote variables with explicit kind
  declarations.
! .IP \fB\-fdefault\-real\-16\fR 4
  .IX Item "-fdefault-real-16"
  Set the default real type to an 16 byte wide type.  This option also affects
! the kind of non\-double real constants like \f(CW1.0\fR.  This option promotes
  the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to 16 bytes if possible.  If \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR
  is given along with \f(CW\*(C`fdefault\-real\-16\*(C'\fR, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR
  and double real constants are not promoted.  Unlike \fB\-freal\-4\-real\-16\fR,
  \&\f(CW\*(C`fdefault\-real\-16\*(C'\fR does not promote variables with explicit kind
  declarations.
! .IP \fB\-fdefault\-double\-8\fR 4
  .IX Item "-fdefault-double-8"
  Set the \f(CW\*(C`DOUBLE PRECISION\*(C'\fR type and double real constants
  like \f(CW\*(C`1.d0\*(C'\fR to an 8 byte wide type.  Do nothing if this
*************** is already the default.  This option pre
*** 525,585 ****
  \&\fB\-fdefault\-real\-10\fR, and \fB\-fdefault\-real\-16\fR,
  from promoting \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants like
  \&\f(CW\*(C`1.d0\*(C'\fR to 16 bytes.
! .IP "\fB\-finteger\-4\-integer\-8\fR" 4
  .IX Item "-finteger-4-integer-8"
! Promote all \f(CW\*(C`INTEGER(KIND=4)\*(C'\fR entities to an \f(CW\*(C`INTEGER(KIND=8)\*(C'\fR
  entities.  If \f(CW\*(C`KIND=8\*(C'\fR is unavailable, then an error will be issued.
  This option should be used with care and may not be suitable for your codes.
  Areas of possible concern include calls to external procedures,
  alignment in \f(CW\*(C`EQUIVALENCE\*(C'\fR and/or \f(CW\*(C`COMMON\*(C'\fR, generic interfaces,
! \&\s-1BOZ\s0 literal constant conversion, and I/O.  Inspection of the intermediate
  representation of the translated Fortran code, produced by
  \&\fB\-fdump\-tree\-original\fR, is suggested.
! .IP "\fB\-freal\-4\-real\-8\fR" 4
  .IX Item "-freal-4-real-8"
  .PD 0
! .IP "\fB\-freal\-4\-real\-10\fR" 4
  .IX Item "-freal-4-real-10"
! .IP "\fB\-freal\-4\-real\-16\fR" 4
  .IX Item "-freal-4-real-16"
! .IP "\fB\-freal\-8\-real\-4\fR" 4
  .IX Item "-freal-8-real-4"
! .IP "\fB\-freal\-8\-real\-10\fR" 4
  .IX Item "-freal-8-real-10"
! .IP "\fB\-freal\-8\-real\-16\fR" 4
  .IX Item "-freal-8-real-16"
  .PD
! Promote all \f(CW\*(C`REAL(KIND=M)\*(C'\fR entities to \f(CW\*(C`REAL(KIND=N)\*(C'\fR entities.
! If \f(CW\*(C`REAL(KIND=N)\*(C'\fR is unavailable, then an error will be issued.
  The \f(CW\*(C`\-freal\-4\-\*(C'\fR flags also affect the default real kind and the
! \&\f(CW\*(C`\-freal\-8\-\*(C'\fR flags also the double-precision real kind.  All other
! real-kind types are unaffected by this option.  The promotion is also
! applied to real literal constants of default and double-precision kind
  and a specified kind number of 4 or 8, respectively.
  However, \f(CW\*(C`\-fdefault\-real\-8\*(C'\fR, \f(CW\*(C`\-fdefault\-real\-10\*(C'\fR,
  \&\f(CW\*(C`\-fdefault\-real\-10\*(C'\fR, and \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR take precedence
! for the default and double-precision real kinds, both for real literal
  constants and for declarations without a kind number.
  Note that for \f(CW\*(C`REAL(KIND=KIND(1.0))\*(C'\fR the literal may get promoted and
  then the result may get promoted again.
  These options should be used with care and may not be suitable for your
  codes.  Areas of possible concern include calls to external procedures,
  alignment in \f(CW\*(C`EQUIVALENCE\*(C'\fR and/or \f(CW\*(C`COMMON\*(C'\fR, generic interfaces,
! \&\s-1BOZ\s0 literal constant conversion, and I/O and calls to intrinsic procedures
  when passing a value to the \f(CW\*(C`kind=\*(C'\fR dummy argument.  Inspection of the
  intermediate representation of the translated Fortran code, produced by
  \&\fB\-fdump\-fortran\-original\fR or \fB\-fdump\-tree\-original\fR, is suggested.
! .IP "\fB\-std=\fR\fIstd\fR" 4
  .IX Item "-std=std"
  Specify the standard to which the program is expected to conform,
  which may be one of \fBf95\fR, \fBf2003\fR, \fBf2008\fR, \fBf2018\fR,
  \&\fBf2023\fR, \fBgnu\fR, or \fBlegacy\fR.  The default value for
  \&\fIstd\fR is \fBgnu\fR, which specifies a superset of the latest
! Fortran standard that includes all of the extensions supported by \s-1GNU\s0
  Fortran, although warnings will be given for obsolete extensions not
  recommended for use in new code.  The \fBlegacy\fR value is
  equivalent but without the warnings for obsolete extensions, and may
! be useful for old non-standard programs.  The \fBf95\fR, \fBf2003\fR,
  \&\fBf2008\fR, \fBf2018\fR, and \fBf2023\fR values specify strict
  conformance to the Fortran 95, Fortran 2003, Fortran 2008, Fortran 2018
  and Fortran 2023 standards, respectively; errors are given for all extensions
--- 454,514 ----
  \&\fB\-fdefault\-real\-10\fR, and \fB\-fdefault\-real\-16\fR,
  from promoting \f(CW\*(C`DOUBLE PRECISION\*(C'\fR and double real constants like
  \&\f(CW\*(C`1.d0\*(C'\fR to 16 bytes.
! .IP \fB\-finteger\-4\-integer\-8\fR 4
  .IX Item "-finteger-4-integer-8"
! Promote all \f(CWINTEGER(KIND=4)\fR entities to an \f(CWINTEGER(KIND=8)\fR
  entities.  If \f(CW\*(C`KIND=8\*(C'\fR is unavailable, then an error will be issued.
  This option should be used with care and may not be suitable for your codes.
  Areas of possible concern include calls to external procedures,
  alignment in \f(CW\*(C`EQUIVALENCE\*(C'\fR and/or \f(CW\*(C`COMMON\*(C'\fR, generic interfaces,
! BOZ literal constant conversion, and I/O.  Inspection of the intermediate
  representation of the translated Fortran code, produced by
  \&\fB\-fdump\-tree\-original\fR, is suggested.
! .IP \fB\-freal\-4\-real\-8\fR 4
  .IX Item "-freal-4-real-8"
  .PD 0
! .IP \fB\-freal\-4\-real\-10\fR 4
  .IX Item "-freal-4-real-10"
! .IP \fB\-freal\-4\-real\-16\fR 4
  .IX Item "-freal-4-real-16"
! .IP \fB\-freal\-8\-real\-4\fR 4
  .IX Item "-freal-8-real-4"
! .IP \fB\-freal\-8\-real\-10\fR 4
  .IX Item "-freal-8-real-10"
! .IP \fB\-freal\-8\-real\-16\fR 4
  .IX Item "-freal-8-real-16"
  .PD
! Promote all \f(CWREAL(KIND=M)\fR entities to \f(CWREAL(KIND=N)\fR entities.
! If \f(CWREAL(KIND=N)\fR is unavailable, then an error will be issued.
  The \f(CW\*(C`\-freal\-4\-\*(C'\fR flags also affect the default real kind and the
! \&\f(CW\*(C`\-freal\-8\-\*(C'\fR flags also the double\-precision real kind.  All other
! real\-kind types are unaffected by this option.  The promotion is also
! applied to real literal constants of default and double\-precision kind
  and a specified kind number of 4 or 8, respectively.
  However, \f(CW\*(C`\-fdefault\-real\-8\*(C'\fR, \f(CW\*(C`\-fdefault\-real\-10\*(C'\fR,
  \&\f(CW\*(C`\-fdefault\-real\-10\*(C'\fR, and \f(CW\*(C`\-fdefault\-double\-8\*(C'\fR take precedence
! for the default and double\-precision real kinds, both for real literal
  constants and for declarations without a kind number.
  Note that for \f(CW\*(C`REAL(KIND=KIND(1.0))\*(C'\fR the literal may get promoted and
  then the result may get promoted again.
  These options should be used with care and may not be suitable for your
  codes.  Areas of possible concern include calls to external procedures,
  alignment in \f(CW\*(C`EQUIVALENCE\*(C'\fR and/or \f(CW\*(C`COMMON\*(C'\fR, generic interfaces,
! BOZ literal constant conversion, and I/O and calls to intrinsic procedures
  when passing a value to the \f(CW\*(C`kind=\*(C'\fR dummy argument.  Inspection of the
  intermediate representation of the translated Fortran code, produced by
  \&\fB\-fdump\-fortran\-original\fR or \fB\-fdump\-tree\-original\fR, is suggested.
! .IP \fB\-std=\fR\fIstd\fR 4
  .IX Item "-std=std"
  Specify the standard to which the program is expected to conform,
  which may be one of \fBf95\fR, \fBf2003\fR, \fBf2008\fR, \fBf2018\fR,
  \&\fBf2023\fR, \fBgnu\fR, or \fBlegacy\fR.  The default value for
  \&\fIstd\fR is \fBgnu\fR, which specifies a superset of the latest
! Fortran standard that includes all of the extensions supported by GNU
  Fortran, although warnings will be given for obsolete extensions not
  recommended for use in new code.  The \fBlegacy\fR value is
  equivalent but without the warnings for obsolete extensions, and may
! be useful for old non\-standard programs.  The \fBf95\fR, \fBf2003\fR,
  \&\fBf2008\fR, \fBf2018\fR, and \fBf2023\fR values specify strict
  conformance to the Fortran 95, Fortran 2003, Fortran 2008, Fortran 2018
  and Fortran 2023 standards, respectively; errors are given for all extensions
*************** Fortran 77 features that are permitted b
*** 588,603 ****
  standards. The deprecated option \fB\-std=f2008ts\fR acts as an alias for
  \&\fB\-std=f2018\fR. It is only present for backwards compatibility with
  earlier gfortran versions and should not be used any more.
! .IP "\fB\-ftest\-forall\-temp\fR" 4
  .IX Item "-ftest-forall-temp"
  Enhance test coverage by forcing most forall assignments to use temporary.
  .SS "Enable and customize preprocessing"
  .IX Subsection "Enable and customize preprocessing"
! Many Fortran compilers including \s-1GNU\s0 Fortran allow passing the source code
! through a C preprocessor (\s-1CPP\s0; sometimes also called the Fortran preprocessor,
! \&\s-1FPP\s0) to allow for conditional compilation.  In the case of \s-1GNU\s0 Fortran,
! this is the \s-1GNU C\s0 Preprocessor in the traditional mode.  On systems with
! case-preserving file names, the preprocessor is automatically invoked if the
  filename extension is \fI.F\fR, \fI.FOR\fR, \fI.FTN\fR, \fI.fpp\fR,
  \&\fI.FPP\fR, \fI.F90\fR, \fI.F95\fR, \fI.F03\fR or \fI.F08\fR.  To manually
  invoke the preprocessor on any file, use \fB\-cpp\fR, to disable
--- 517,532 ----
  standards. The deprecated option \fB\-std=f2008ts\fR acts as an alias for
  \&\fB\-std=f2018\fR. It is only present for backwards compatibility with
  earlier gfortran versions and should not be used any more.
! .IP \fB\-ftest\-forall\-temp\fR 4
  .IX Item "-ftest-forall-temp"
  Enhance test coverage by forcing most forall assignments to use temporary.
  .SS "Enable and customize preprocessing"
  .IX Subsection "Enable and customize preprocessing"
! Many Fortran compilers including GNU Fortran allow passing the source code
! through a C preprocessor (CPP; sometimes also called the Fortran preprocessor,
! FPP) to allow for conditional compilation.  In the case of GNU Fortran,
! this is the GNU C Preprocessor in the traditional mode.  On systems with
! case\-preserving file names, the preprocessor is automatically invoked if the
  filename extension is \fI.F\fR, \fI.FOR\fR, \fI.FTN\fR, \fI.fpp\fR,
  \&\fI.FPP\fR, \fI.F90\fR, \fI.F95\fR, \fI.F03\fR or \fI.F08\fR.  To manually
  invoke the preprocessor on any file, use \fB\-cpp\fR, to disable
*************** If a preprocessed file includes another
*** 608,637 ****
  statement, the included file is not preprocessed.  To preprocess included
  files, use the equivalent preprocessor statement \f(CW\*(C`#include\*(C'\fR.
  .PP
! If \s-1GNU\s0 Fortran invokes the preprocessor, \f(CW\*(C`_\|_GFORTRAN_\|_\*(C'\fR
  is defined.  The macros \f(CW\*(C`_\|_GNUC_\|_\*(C'\fR, \f(CW\*(C`_\|_GNUC_MINOR_\|_\*(C'\fR and
  \&\f(CW\*(C`_\|_GNUC_PATCHLEVEL_\|_\*(C'\fR can be used to determine the version of the
  compiler.  See \fBTop,,Overview,cpp,The C Preprocessor\fR for details.
  .PP
! \&\s-1GNU\s0 Fortran supports a number of \f(CW\*(C`INTEGER\*(C'\fR and \f(CW\*(C`REAL\*(C'\fR kind types
  in additional to the kind types required by the Fortran standard.
  The availability of any given kind type is architecture dependent.  The
! following pre-defined preprocessor macros can be used to conditionally
  include code for these additional kind types: \f(CW\*(C`_\|_GFC_INT_1_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_GFC_INT_2_\|_\*(C'\fR, \f(CW\*(C`_\|_GFC_INT_8_\|_\*(C'\fR, \f(CW\*(C`_\|_GFC_INT_16_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_GFC_REAL_10_\|_\*(C'\fR, and \f(CW\*(C`_\|_GFC_REAL_16_\|_\*(C'\fR.
  .PP
! While \s-1CPP\s0 is the de-facto standard for preprocessing Fortran code,
! Part 3 of the Fortran 95 standard (\s-1ISO/IEC 1539\-3:1998\s0) defines
  Conditional Compilation, which is not widely used and not directly
! supported by the \s-1GNU\s0 Fortran compiler.  You can use the program coco
  to preprocess such files (<\fBhttp://www.daniellnagle.com/coco.html\fR>).
  .PP
  The following options control preprocessing of Fortran code:
! .IP "\fB\-cpp\fR" 4
  .IX Item "-cpp"
  .PD 0
! .IP "\fB\-nocpp\fR" 4
  .IX Item "-nocpp"
  .PD
  Enable preprocessing. The preprocessor is automatically invoked if
--- 537,566 ----
  statement, the included file is not preprocessed.  To preprocess included
  files, use the equivalent preprocessor statement \f(CW\*(C`#include\*(C'\fR.
  .PP
! If GNU Fortran invokes the preprocessor, \f(CW\*(C`_\|_GFORTRAN_\|_\*(C'\fR
  is defined.  The macros \f(CW\*(C`_\|_GNUC_\|_\*(C'\fR, \f(CW\*(C`_\|_GNUC_MINOR_\|_\*(C'\fR and
  \&\f(CW\*(C`_\|_GNUC_PATCHLEVEL_\|_\*(C'\fR can be used to determine the version of the
  compiler.  See \fBTop,,Overview,cpp,The C Preprocessor\fR for details.
  .PP
! GNU Fortran supports a number of \f(CW\*(C`INTEGER\*(C'\fR and \f(CW\*(C`REAL\*(C'\fR kind types
  in additional to the kind types required by the Fortran standard.
  The availability of any given kind type is architecture dependent.  The
! following pre\-defined preprocessor macros can be used to conditionally
  include code for these additional kind types: \f(CW\*(C`_\|_GFC_INT_1_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_GFC_INT_2_\|_\*(C'\fR, \f(CW\*(C`_\|_GFC_INT_8_\|_\*(C'\fR, \f(CW\*(C`_\|_GFC_INT_16_\|_\*(C'\fR,
  \&\f(CW\*(C`_\|_GFC_REAL_10_\|_\*(C'\fR, and \f(CW\*(C`_\|_GFC_REAL_16_\|_\*(C'\fR.
  .PP
! While CPP is the de\-facto standard for preprocessing Fortran code,
! Part 3 of the Fortran 95 standard (ISO/IEC 1539\-3:1998) defines
  Conditional Compilation, which is not widely used and not directly
! supported by the GNU Fortran compiler.  You can use the program coco
  to preprocess such files (<\fBhttp://www.daniellnagle.com/coco.html\fR>).
  .PP
  The following options control preprocessing of Fortran code:
! .IP \fB\-cpp\fR 4
  .IX Item "-cpp"
  .PD 0
! .IP \fB\-nocpp\fR 4
  .IX Item "-nocpp"
  .PD
  Enable preprocessing. The preprocessor is automatically invoked if
*************** To disable preprocessing of files with a
*** 643,653 ****
  use the negative form: \fB\-nocpp\fR.
  .Sp
  The preprocessor is run in traditional mode. Any restrictions of the
! file-format, especially the limits on line length, apply for
  preprocessed output as well, so it might be advisable to use the
  \&\fB\-ffree\-line\-length\-none\fR or \fB\-ffixed\-line\-length\-none\fR
  options.
! .IP "\fB\-dM\fR" 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \f(CW\*(Aq#define\*(Aq\fR
  directives for all the macros defined during the execution of the
--- 572,582 ----
  use the negative form: \fB\-nocpp\fR.
  .Sp
  The preprocessor is run in traditional mode. Any restrictions of the
! file\-format, especially the limits on line length, apply for
  preprocessed output as well, so it might be advisable to use the
  \&\fB\-ffree\-line\-length\-none\fR or \fB\-ffixed\-line\-length\-none\fR
  options.
! .IP \fB\-dM\fR 4
  .IX Item "-dM"
  Instead of the normal output, generate a list of \f(CW\*(Aq#define\*(Aq\fR
  directives for all the macros defined during the execution of the
*************** Assuming you have no file \fIfoo.f90\fR,
*** 660,691 ****
  .Ve
  .Sp
  will show all the predefined macros.
! .IP "\fB\-dD\fR" 4
  .IX Item "-dD"
  Like \fB\-dM\fR except in two respects: it does not include the
  predefined macros, and it outputs both the \f(CW\*(C`#define\*(C'\fR directives
  and the result of preprocessing. Both kinds of output go to the
  standard output file.
! .IP "\fB\-dN\fR" 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP "\fB\-dU\fR" 4
  .IX Item "-dU"
  Like \fBdD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the 
  output is delayed until the use or test of the macro; and \f(CW\*(Aq#undef\*(Aq\fR
  directives are also output for macros tested but undefined at the time.
! .IP "\fB\-dI\fR" 4
  .IX Item "-dI"
  Output \f(CW\*(Aq#include\*(Aq\fR directives in addition to the result
  of preprocessing.
! .IP "\fB\-fworking\-directory\fR" 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that will
  let the compiler know the current working directory at the time of
  preprocessing. When this option is enabled, the preprocessor will emit,
  after the initial linemarker, a second linemarker with the current
! working directory followed by two slashes. \s-1GCC\s0 will use this directory,
  when it is present in the preprocessed input, as the directory emitted
  as the current working directory in some debugging information formats.
  This option is implicitly enabled if debugging information is enabled,
--- 589,620 ----
  .Ve
  .Sp
  will show all the predefined macros.
! .IP \fB\-dD\fR 4
  .IX Item "-dD"
  Like \fB\-dM\fR except in two respects: it does not include the
  predefined macros, and it outputs both the \f(CW\*(C`#define\*(C'\fR directives
  and the result of preprocessing. Both kinds of output go to the
  standard output file.
! .IP \fB\-dN\fR 4
  .IX Item "-dN"
  Like \fB\-dD\fR, but emit only the macro names, not their expansions.
! .IP \fB\-dU\fR 4
  .IX Item "-dU"
  Like \fBdD\fR except that only macros that are expanded, or whose
  definedness is tested in preprocessor directives, are output; the 
  output is delayed until the use or test of the macro; and \f(CW\*(Aq#undef\*(Aq\fR
  directives are also output for macros tested but undefined at the time.
! .IP \fB\-dI\fR 4
  .IX Item "-dI"
  Output \f(CW\*(Aq#include\*(Aq\fR directives in addition to the result
  of preprocessing.
! .IP \fB\-fworking\-directory\fR 4
  .IX Item "-fworking-directory"
  Enable generation of linemarkers in the preprocessor output that will
  let the compiler know the current working directory at the time of
  preprocessing. When this option is enabled, the preprocessor will emit,
  after the initial linemarker, a second linemarker with the current
! working directory followed by two slashes. GCC will use this directory,
  when it is present in the preprocessed input, as the directory emitted
  as the current working directory in some debugging information formats.
  This option is implicitly enabled if debugging information is enabled,
*************** If dir begins with \f(CW\*(C`=\*(C'\fR,
*** 702,709 ****
  the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
! Use \fIdir\fR as a subdirectory of the directory containing target-specific
! \&\*(C+ headers.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
--- 631,638 ----
  the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
  .IP "\fB\-imultilib\fR \fIdir\fR" 4
  .IX Item "-imultilib dir"
! Use \fIdir\fR as a subdirectory of the directory containing target\-specific
! C++ headers.
  .IP "\fB\-iprefix\fR \fIprefix\fR" 4
  .IX Item "-iprefix prefix"
  Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
*************** system directory, so that it gets the sa
*** 728,751 ****
  applied to the standard system directories. If \fIdir\fR begins with
  \&\f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced by the sysroot prefix;
  see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
! .IP "\fB\-nostdinc\fR" 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files. Only
  the directories you have specified with \fB\-I\fR options (and the
  directory of the current file, if appropriate) are searched.
! .IP "\fB\-undef\fR" 4
  .IX Item "-undef"
! Do not predefine any system-specific or GCC-specific macros.
  The standard predefined macros remain defined.
! .IP "\fB\-A\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
  .IX Item "-Apredicate=answer"
  Make an assertion with the predicate \fIpredicate\fR and answer \fIanswer\fR.
  This form is preferred to the older form \-A predicate(answer), which is still
  supported, because it does not use shell special characters.
! .IP "\fB\-A\-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
  .IX Item "-A-predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer \fIanswer\fR.
! .IP "\fB\-C\fR" 4
  .IX Item "-C"
  Do not discard comments. All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
--- 657,680 ----
  applied to the standard system directories. If \fIdir\fR begins with
  \&\f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced by the sysroot prefix;
  see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
! .IP \fB\-nostdinc\fR 4
  .IX Item "-nostdinc"
  Do not search the standard system directories for header files. Only
  the directories you have specified with \fB\-I\fR options (and the
  directory of the current file, if appropriate) are searched.
! .IP \fB\-undef\fR 4
  .IX Item "-undef"
! Do not predefine any system\-specific or GCC\-specific macros.
  The standard predefined macros remain defined.
! .IP \fB\-A\fR\fIpredicate\fR\fB=\fR\fIanswer\fR 4
  .IX Item "-Apredicate=answer"
  Make an assertion with the predicate \fIpredicate\fR and answer \fIanswer\fR.
  This form is preferred to the older form \-A predicate(answer), which is still
  supported, because it does not use shell special characters.
! .IP \fB\-A\-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR 4
  .IX Item "-A-predicate=answer"
  Cancel an assertion with the predicate \fIpredicate\fR and answer \fIanswer\fR.
! .IP \fB\-C\fR 4
  .IX Item "-C"
  Do not discard comments. All comments are passed through to the output
  file, except for comments in processed directives, which are deleted
*************** effect of turning that line into an ordi
*** 758,793 ****
  token on the line is no longer a \f(CW\*(Aq#\*(Aq\fR.
  .Sp
  Warning: this currently handles C\-Style comments only. The preprocessor
! does not yet recognize Fortran-style comments.
! .IP "\fB\-CC\fR" 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion. This is like
  \&\fB\-C\fR, except that comments contained within macros are also passed
  through to the output file where the macro is expanded.
  .Sp
! In addition to the side-effects of the \fB\-C\fR option, the \fB\-CC\fR
! option causes all \*(C+\-style comments inside a macro to be converted to C\-style
  comments. This is to prevent later use of that macro from inadvertently
  commenting out the remainder of the source line. The \fB\-CC\fR option
  is generally used to support lint comments.
  .Sp
! Warning: this currently handles C\- and \*(C+\-Style comments only. The
! preprocessor does not yet recognize Fortran-style comments.
! .IP "\fB\-D\fR\fIname\fR" 4
  .IX Item "-Dname"
  Predefine name as a macro, with definition \f(CW1\fR.
! .IP "\fB\-D\fR\fIname\fR\fB=\fR\fIdefinition\fR" 4
  .IX Item "-Dname=definition"
  The contents of \fIdefinition\fR are tokenized and processed as if they
  appeared during translation phase three in a \f(CW\*(Aq#define\*(Aq\fR directive.
  In particular, the definition will be truncated by embedded newline
  characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell-like program
! you may need to use the shell's quoting syntax to protect characters such
  as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any). Parentheses are meaningful to most shells, so you will need
  to quote the option. With sh and csh, \f(CW\*(C`\-D\*(Aqname(args...)=definition\*(Aq\*(C'\fR
--- 687,722 ----
  token on the line is no longer a \f(CW\*(Aq#\*(Aq\fR.
  .Sp
  Warning: this currently handles C\-Style comments only. The preprocessor
! does not yet recognize Fortran\-style comments.
! .IP \fB\-CC\fR 4
  .IX Item "-CC"
  Do not discard comments, including during macro expansion. This is like
  \&\fB\-C\fR, except that comments contained within macros are also passed
  through to the output file where the macro is expanded.
  .Sp
! In addition to the side\-effects of the \fB\-C\fR option, the \fB\-CC\fR
! option causes all C++\-style comments inside a macro to be converted to C\-style
  comments. This is to prevent later use of that macro from inadvertently
  commenting out the remainder of the source line. The \fB\-CC\fR option
  is generally used to support lint comments.
  .Sp
! Warning: this currently handles C\- and C++\-Style comments only. The
! preprocessor does not yet recognize Fortran\-style comments.
! .IP \fB\-D\fR\fIname\fR 4
  .IX Item "-Dname"
  Predefine name as a macro, with definition \f(CW1\fR.
! .IP \fB\-D\fR\fIname\fR\fB=\fR\fIdefinition\fR 4
  .IX Item "-Dname=definition"
  The contents of \fIdefinition\fR are tokenized and processed as if they
  appeared during translation phase three in a \f(CW\*(Aq#define\*(Aq\fR directive.
  In particular, the definition will be truncated by embedded newline
  characters.
  .Sp
! If you are invoking the preprocessor from a shell or shell\-like program
! you may need to use the shell\*(Aqs quoting syntax to protect characters such
  as spaces that have a meaning in the shell syntax.
  .Sp
! If you wish to define a function\-like macro on the command line, write
  its argument list with surrounding parentheses before the equals sign
  (if any). Parentheses are meaningful to most shells, so you will need
  to quote the option. With sh and csh, \f(CW\*(C`\-D\*(Aqname(args...)=definition\*(Aq\*(C'\fR
*************** works.
*** 796,819 ****
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they are
  given on the command line. All \-imacros file and \-include file options
  are processed after all \-D and \-U options.
! .IP "\fB\-H\fR" 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities. Each name is indented to show how deep in the \f(CW\*(Aq#include\*(Aq\fR
  stack it is.
! .IP "\fB\-P\fR" 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that
  is not C code, and will be sent to a program which might be confused
  by the linemarkers.
! .IP "\fB\-U\fR\fIname\fR" 4
  .IX Item "-Uname"
  Cancel any previous definition of \fIname\fR, either built in or provided
  with a \fB\-D\fR option.
  .SS "Options to request or suppress errors and warnings"
  .IX Subsection "Options to request or suppress errors and warnings"
! Errors are diagnostic messages that report that the \s-1GNU\s0 Fortran compiler
  cannot compile the relevant piece of source code.  The compiler will
  continue to process the program in an attempt to report further errors
  to aid in debugging, but will not produce any compiled output.
--- 725,748 ----
  \&\fB\-D\fR and \fB\-U\fR options are processed in the order they are
  given on the command line. All \-imacros file and \-include file options
  are processed after all \-D and \-U options.
! .IP \fB\-H\fR 4
  .IX Item "-H"
  Print the name of each header file used, in addition to other normal
  activities. Each name is indented to show how deep in the \f(CW\*(Aq#include\*(Aq\fR
  stack it is.
! .IP \fB\-P\fR 4
  .IX Item "-P"
  Inhibit generation of linemarkers in the output from the preprocessor.
  This might be useful when running the preprocessor on something that
  is not C code, and will be sent to a program which might be confused
  by the linemarkers.
! .IP \fB\-U\fR\fIname\fR 4
  .IX Item "-Uname"
  Cancel any previous definition of \fIname\fR, either built in or provided
  with a \fB\-D\fR option.
  .SS "Options to request or suppress errors and warnings"
  .IX Subsection "Options to request or suppress errors and warnings"
! Errors are diagnostic messages that report that the GNU Fortran compiler
  cannot compile the relevant piece of source code.  The compiler will
  continue to process the program in an attempt to report further errors
  to aid in debugging, but will not produce any compiled output.
*************** for example, \fB\-Wno\-implicit\fR.  Thi
*** 831,878 ****
  two forms, whichever is not the default.
  .PP
  These options control the amount and kinds of errors and warnings produced
! by \s-1GNU\s0 Fortran:
! .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
! \&\s-1GNU\s0 Fortran bails out rather than attempting to continue processing the
  source code.  If \fIn\fR is 0, there is no limit on the number of error
  messages produced.
! .IP "\fB\-fsyntax\-only\fR" 4
  .IX Item "-fsyntax-only"
  Check the code for syntax errors, but do not actually compile it.  This
  will generate module files for each module present in the code, but no
  other output file.
! .IP "\fB\-Wpedantic\fR" 4
  .IX Item "-Wpedantic"
  .PD 0
! .IP "\fB\-pedantic\fR" 4
  .IX Item "-pedantic"
  .PD
  Issue warnings for uses of extensions to Fortran.
  \&\fB\-pedantic\fR also applies to C\-language constructs where they
! occur in \s-1GNU\s0 Fortran source files, such as use of \fB\ee\fR in a
  character constant within a directive like \f(CW\*(C`#include\*(C'\fR.
  .Sp
  Valid Fortran programs should compile properly with or without
  this option.
! However, without this option, certain \s-1GNU\s0 extensions and traditional
  Fortran features are supported as well.
  With this option, many of them are rejected.
  .Sp
  Some users try to use \fB\-pedantic\fR to check programs for conformance.
  They soon find that it does not do quite what they want\-\-\-it finds some
  nonstandard practices, but not all.
! However, improvements to \s-1GNU\s0 Fortran in this area are welcome.
  .Sp
  This should be used in conjunction with \fB\-std=f95\fR,
  \&\fB\-std=f2003\fR, \fB\-std=f2008\fR, \fB\-std=f2018\fR
  or \fB\-std=f2023\fR.
! .IP "\fB\-pedantic\-errors\fR" 4
  .IX Item "-pedantic-errors"
  Like \fB\-pedantic\fR, except that errors are produced rather than
  warnings.
! .IP "\fB\-Wall\fR" 4
  .IX Item "-Wall"
  Enables commonly used warning options pertaining to usage that
  we recommend avoiding and that we believe are easy to avoid.
--- 760,807 ----
  two forms, whichever is not the default.
  .PP
  These options control the amount and kinds of errors and warnings produced
! by GNU Fortran:
! .IP \fB\-fmax\-errors=\fR\fIn\fR 4
  .IX Item "-fmax-errors=n"
  Limits the maximum number of error messages to \fIn\fR, at which point
! GNU Fortran bails out rather than attempting to continue processing the
  source code.  If \fIn\fR is 0, there is no limit on the number of error
  messages produced.
! .IP \fB\-fsyntax\-only\fR 4
  .IX Item "-fsyntax-only"
  Check the code for syntax errors, but do not actually compile it.  This
  will generate module files for each module present in the code, but no
  other output file.
! .IP \fB\-Wpedantic\fR 4
  .IX Item "-Wpedantic"
  .PD 0
! .IP \fB\-pedantic\fR 4
  .IX Item "-pedantic"
  .PD
  Issue warnings for uses of extensions to Fortran.
  \&\fB\-pedantic\fR also applies to C\-language constructs where they
! occur in GNU Fortran source files, such as use of \fB\ee\fR in a
  character constant within a directive like \f(CW\*(C`#include\*(C'\fR.
  .Sp
  Valid Fortran programs should compile properly with or without
  this option.
! However, without this option, certain GNU extensions and traditional
  Fortran features are supported as well.
  With this option, many of them are rejected.
  .Sp
  Some users try to use \fB\-pedantic\fR to check programs for conformance.
  They soon find that it does not do quite what they want\-\-\-it finds some
  nonstandard practices, but not all.
! However, improvements to GNU Fortran in this area are welcome.
  .Sp
  This should be used in conjunction with \fB\-std=f95\fR,
  \&\fB\-std=f2003\fR, \fB\-std=f2008\fR, \fB\-std=f2018\fR
  or \fB\-std=f2023\fR.
! .IP \fB\-pedantic\-errors\fR 4
  .IX Item "-pedantic-errors"
  Like \fB\-pedantic\fR, except that errors are produced rather than
  warnings.
! .IP \fB\-Wall\fR 4
  .IX Item "-Wall"
  Enables commonly used warning options pertaining to usage that
  we recommend avoiding and that we believe are easy to avoid.
*************** This currently includes \fB\-Waliasing\f
*** 882,892 ****
  \&\fB\-Wline\-truncation\fR, \fB\-Wtarget\-lifetime\fR,
  \&\fB\-Winteger\-division\fR, \fB\-Wreal\-q\-constant\fR, \fB\-Wunused\fR
  and \fB\-Wundefined\-do\-loop\fR.
! .IP "\fB\-Waliasing\fR" 4
  .IX Item "-Waliasing"
  Warn about possible aliasing of dummy arguments. Specifically, it warns
  if the same actual argument is associated with a dummy argument with
! \&\f(CW\*(C`INTENT(IN)\*(C'\fR and a dummy argument with \f(CW\*(C`INTENT(OUT)\*(C'\fR in a call
  with an explicit interface.
  .Sp
  The following example will trigger the warning.
--- 811,821 ----
  \&\fB\-Wline\-truncation\fR, \fB\-Wtarget\-lifetime\fR,
  \&\fB\-Winteger\-division\fR, \fB\-Wreal\-q\-constant\fR, \fB\-Wunused\fR
  and \fB\-Wundefined\-do\-loop\fR.
! .IP \fB\-Waliasing\fR 4
  .IX Item "-Waliasing"
  Warn about possible aliasing of dummy arguments. Specifically, it warns
  if the same actual argument is associated with a dummy argument with
! \&\f(CWINTENT(IN)\fR and a dummy argument with \f(CWINTENT(OUT)\fR in a call
  with an explicit interface.
  .Sp
  The following example will trigger the warning.
*************** The following example will trigger the w
*** 902,1012 ****
  \&        
  \&          call bar(a,a)
  .Ve
! .IP "\fB\-Wampersand\fR" 4
  .IX Item "-Wampersand"
  Warn about missing ampersand in continued character constants. The
  warning is given with \fB\-Wampersand\fR, \fB\-pedantic\fR,
  \&\fB\-std=f95\fR, \fB\-std=f2003\fR, \fB\-std=f2008\fR, \fB\-std=f2018\fR
  and \fB\-std=f2023\fR. Note: With no ampersand given in a continued
! character constant, \s-1GNU\s0 Fortran assumes continuation at the first
! non-comment, non-whitespace character after the ampersand that
  initiated the continuation.
! .IP "\fB\-Warray\-temporaries\fR" 4
  .IX Item "-Warray-temporaries"
  Warn about array temporaries generated by the compiler.  The information
  generated by this warning is sometimes useful in optimization, in order to
  avoid such temporaries.
! .IP "\fB\-Wc\-binding\-type\fR" 4
  .IX Item "-Wc-binding-type"
  Warn if the a variable might not be C interoperable.  In particular, warn if 
  the variable has been declared using an intrinsic type with default kind
  instead of using a kind parameter defined for C interoperability in the
  intrinsic \f(CW\*(C`ISO_C_Binding\*(C'\fR module.  This option is implied by
  \&\fB\-Wall\fR.
! .IP "\fB\-Wcharacter\-truncation\fR" 4
  .IX Item "-Wcharacter-truncation"
  Warn when a character assignment will truncate the assigned string.
! .IP "\fB\-Wline\-truncation\fR" 4
  .IX Item "-Wline-truncation"
  Warn when a source code line will be truncated.  This option is
! implied by \fB\-Wall\fR.  For free-form source code, the default is
  \&\fB\-Werror=line\-truncation\fR such that truncations are reported as
  error.
! .IP "\fB\-Wconversion\fR" 4
  .IX Item "-Wconversion"
  Warn about implicit conversions that are likely to change the value of 
  the expression after conversion. Implied by \fB\-Wall\fR.
! .IP "\fB\-Wconversion\-extra\fR" 4
  .IX Item "-Wconversion-extra"
  Warn about implicit conversions between different types and kinds. This
  option does \fInot\fR imply \fB\-Wconversion\fR.
! .IP "\fB\-Wextra\fR" 4
  .IX Item "-Wextra"
  Enables some warning options for usages of language features which
  may be problematic. This currently includes \fB\-Wcompare\-reals\fR,
  \&\fB\-Wunused\-parameter\fR and \fB\-Wdo\-subscript\fR.
! .IP "\fB\-Wfrontend\-loop\-interchange\fR" 4
  .IX Item "-Wfrontend-loop-interchange"
  Warn when using \fB\-ffrontend\-loop\-interchange\fR for performing loop
  interchanges.
! .IP "\fB\-Wimplicit\-interface\fR" 4
  .IX Item "-Wimplicit-interface"
  Warn if a procedure is called without an explicit interface.
  Note this only checks that an explicit interface is present.  It does not
  check that the declared interfaces are consistent across program units.
! .IP "\fB\-Wimplicit\-procedure\fR" 4
  .IX Item "-Wimplicit-procedure"
  Warn if a procedure is called that has neither an explicit interface
  nor has been declared as \f(CW\*(C`EXTERNAL\*(C'\fR.
! .IP "\fB\-Winteger\-division\fR" 4
  .IX Item "-Winteger-division"
  Warn if a constant integer division truncates its result.
  As an example, 3/5 evaluates to 0.
! .IP "\fB\-Wintrinsics\-std\fR" 4
  .IX Item "-Wintrinsics-std"
  Warn if \fBgfortran\fR finds a procedure named like an intrinsic not
  available in the currently selected standard (with \fB\-std\fR) and treats
  it as \f(CW\*(C`EXTERNAL\*(C'\fR procedure because of this.  \fB\-fall\-intrinsics\fR can
  be used to never trigger this behavior and always link to the intrinsic
  regardless of the selected standard.
! .IP "\fB\-Wno\-overwrite\-recursive\fR" 4
  .IX Item "-Wno-overwrite-recursive"
  Do not warn when \fB\-fno\-automatic\fR is used with \fB\-frecursive\fR. Recursion
  will be broken if the relevant local variables do not have the attribute
  \&\f(CW\*(C`AUTOMATIC\*(C'\fR explicitly declared. This option can be used to suppress the warning
  when it is known that recursion is not broken. Useful for build environments that use
  \&\fB\-Werror\fR.
! .IP "\fB\-Wreal\-q\-constant\fR" 4
  .IX Item "-Wreal-q-constant"
! Produce a warning if a real-literal-constant contains a \f(CW\*(C`q\*(C'\fR
! exponent-letter.
! .IP "\fB\-Wsurprising\fR" 4
  .IX Item "-Wsurprising"
! Produce a warning when \*(L"suspicious\*(R" code constructs are encountered.
  While technically legal these usually indicate that an error has been made.
  .Sp
  This currently produces a warning under the following circumstances:
  .RS 4
! .IP "*" 4
! An \s-1INTEGER SELECT\s0 construct has a \s-1CASE\s0 that can never be matched as its
  lower value is greater than its upper value.
! .IP "*" 4
! A \s-1LOGICAL SELECT\s0 construct has three \s-1CASE\s0 statements.
! .IP "*" 4
! A \s-1TRANSFER\s0 specifies a source that is shorter than the destination.
! .IP "*" 4
  The type of a function result is declared more than once with the same type.  If
! \&\fB\-pedantic\fR or standard-conforming mode is enabled, this is an error.
! .IP "*" 4
  A \f(CW\*(C`CHARACTER\*(C'\fR variable is declared with negative length.
! .IP "*" 4
! With \fB\-fopenmp\fR, for fixed-form source code, when an \f(CW\*(C`omx\*(C'\fR
! vendor-extension sentinel is encountered. (The equivalent \f(CW\*(C`ompx\*(C'\fR,
! used in free-form source code, is diagnosed by default.)
  .RE
  .RS 4
  .RE
! .IP "\fB\-Wtabs\fR" 4
  .IX Item "-Wtabs"
  By default, tabs are accepted as whitespace, but tabs are not members
  of the Fortran Character Set.  For continuation lines, a tab followed
--- 831,941 ----
  \&        
  \&          call bar(a,a)
  .Ve
! .IP \fB\-Wampersand\fR 4
  .IX Item "-Wampersand"
  Warn about missing ampersand in continued character constants. The
  warning is given with \fB\-Wampersand\fR, \fB\-pedantic\fR,
  \&\fB\-std=f95\fR, \fB\-std=f2003\fR, \fB\-std=f2008\fR, \fB\-std=f2018\fR
  and \fB\-std=f2023\fR. Note: With no ampersand given in a continued
! character constant, GNU Fortran assumes continuation at the first
! non\-comment, non\-whitespace character after the ampersand that
  initiated the continuation.
! .IP \fB\-Warray\-temporaries\fR 4
  .IX Item "-Warray-temporaries"
  Warn about array temporaries generated by the compiler.  The information
  generated by this warning is sometimes useful in optimization, in order to
  avoid such temporaries.
! .IP \fB\-Wc\-binding\-type\fR 4
  .IX Item "-Wc-binding-type"
  Warn if the a variable might not be C interoperable.  In particular, warn if 
  the variable has been declared using an intrinsic type with default kind
  instead of using a kind parameter defined for C interoperability in the
  intrinsic \f(CW\*(C`ISO_C_Binding\*(C'\fR module.  This option is implied by
  \&\fB\-Wall\fR.
! .IP \fB\-Wcharacter\-truncation\fR 4
  .IX Item "-Wcharacter-truncation"
  Warn when a character assignment will truncate the assigned string.
! .IP \fB\-Wline\-truncation\fR 4
  .IX Item "-Wline-truncation"
  Warn when a source code line will be truncated.  This option is
! implied by \fB\-Wall\fR.  For free\-form source code, the default is
  \&\fB\-Werror=line\-truncation\fR such that truncations are reported as
  error.
! .IP \fB\-Wconversion\fR 4
  .IX Item "-Wconversion"
  Warn about implicit conversions that are likely to change the value of 
  the expression after conversion. Implied by \fB\-Wall\fR.
! .IP \fB\-Wconversion\-extra\fR 4
  .IX Item "-Wconversion-extra"
  Warn about implicit conversions between different types and kinds. This
  option does \fInot\fR imply \fB\-Wconversion\fR.
! .IP \fB\-Wextra\fR 4
  .IX Item "-Wextra"
  Enables some warning options for usages of language features which
  may be problematic. This currently includes \fB\-Wcompare\-reals\fR,
  \&\fB\-Wunused\-parameter\fR and \fB\-Wdo\-subscript\fR.
! .IP \fB\-Wfrontend\-loop\-interchange\fR 4
  .IX Item "-Wfrontend-loop-interchange"
  Warn when using \fB\-ffrontend\-loop\-interchange\fR for performing loop
  interchanges.
! .IP \fB\-Wimplicit\-interface\fR 4
  .IX Item "-Wimplicit-interface"
  Warn if a procedure is called without an explicit interface.
  Note this only checks that an explicit interface is present.  It does not
  check that the declared interfaces are consistent across program units.
! .IP \fB\-Wimplicit\-procedure\fR 4
  .IX Item "-Wimplicit-procedure"
  Warn if a procedure is called that has neither an explicit interface
  nor has been declared as \f(CW\*(C`EXTERNAL\*(C'\fR.
! .IP \fB\-Winteger\-division\fR 4
  .IX Item "-Winteger-division"
  Warn if a constant integer division truncates its result.
  As an example, 3/5 evaluates to 0.
! .IP \fB\-Wintrinsics\-std\fR 4
  .IX Item "-Wintrinsics-std"
  Warn if \fBgfortran\fR finds a procedure named like an intrinsic not
  available in the currently selected standard (with \fB\-std\fR) and treats
  it as \f(CW\*(C`EXTERNAL\*(C'\fR procedure because of this.  \fB\-fall\-intrinsics\fR can
  be used to never trigger this behavior and always link to the intrinsic
  regardless of the selected standard.
! .IP \fB\-Wno\-overwrite\-recursive\fR 4
  .IX Item "-Wno-overwrite-recursive"
  Do not warn when \fB\-fno\-automatic\fR is used with \fB\-frecursive\fR. Recursion
  will be broken if the relevant local variables do not have the attribute
  \&\f(CW\*(C`AUTOMATIC\*(C'\fR explicitly declared. This option can be used to suppress the warning
  when it is known that recursion is not broken. Useful for build environments that use
  \&\fB\-Werror\fR.
! .IP \fB\-Wreal\-q\-constant\fR 4
  .IX Item "-Wreal-q-constant"
! Produce a warning if a real\-literal\-constant contains a \f(CW\*(C`q\*(C'\fR
! exponent\-letter.
! .IP \fB\-Wsurprising\fR 4
  .IX Item "-Wsurprising"
! Produce a warning when "suspicious" code constructs are encountered.
  While technically legal these usually indicate that an error has been made.
  .Sp
  This currently produces a warning under the following circumstances:
  .RS 4
! .IP * 4
! An INTEGER SELECT construct has a CASE that can never be matched as its
  lower value is greater than its upper value.
! .IP * 4
! A LOGICAL SELECT construct has three CASE statements.
! .IP * 4
! A TRANSFER specifies a source that is shorter than the destination.
! .IP * 4
  The type of a function result is declared more than once with the same type.  If
! \&\fB\-pedantic\fR or standard\-conforming mode is enabled, this is an error.
! .IP * 4
  A \f(CW\*(C`CHARACTER\*(C'\fR variable is declared with negative length.
! .IP * 4
! With \fB\-fopenmp\fR, for fixed\-form source code, when an \f(CW\*(C`omx\*(C'\fR
! vendor\-extension sentinel is encountered. (The equivalent \f(CW\*(C`ompx\*(C'\fR,
! used in free\-form source code, is diagnosed by default.)
  .RE
  .RS 4
  .RE
! .IP \fB\-Wtabs\fR 4
  .IX Item "-Wtabs"
  By default, tabs are accepted as whitespace, but tabs are not members
  of the Fortran Character Set.  For continuation lines, a tab followed
*************** warning to be issued if a tab is encount
*** 1015,1091 ****
  active for \fB\-pedantic\fR, \fB\-std=f95\fR, \fB\-std=f2003\fR,
  \&\fB\-std=f2008\fR, \fB\-std=f2018\fR, \fB\-std=f2023\fR and
  \&\fB\-Wall\fR.
! .IP "\fB\-Wundefined\-do\-loop\fR" 4
  .IX Item "-Wundefined-do-loop"
! Warn if a \s-1DO\s0 loop with step either 1 or \-1 yields an underflow or an overflow
  during iteration of an induction variable of the loop.
  This option is implied by \fB\-Wall\fR.
! .IP "\fB\-Wunderflow\fR" 4
  .IX Item "-Wunderflow"
  Produce a warning when numerical constant expressions are
! encountered, which yield an \s-1UNDERFLOW\s0 during compilation. Enabled by default.
! .IP "\fB\-Wintrinsic\-shadow\fR" 4
  .IX Item "-Wintrinsic-shadow"
! Warn if a user-defined procedure or module procedure has the same name as an
  intrinsic; in this case, an explicit interface or \f(CW\*(C`EXTERNAL\*(C'\fR or
  \&\f(CW\*(C`INTRINSIC\*(C'\fR declaration might be needed to get calls later resolved to
  the desired intrinsic/procedure.  This option is implied by \fB\-Wall\fR.
! .IP "\fB\-Wuse\-without\-only\fR" 4
  .IX Item "-Wuse-without-only"
  Warn if a \f(CW\*(C`USE\*(C'\fR statement has no \f(CW\*(C`ONLY\*(C'\fR qualifier and 
  thus implicitly imports all public entities of the used module.
! .IP "\fB\-Wunused\-dummy\-argument\fR" 4
  .IX Item "-Wunused-dummy-argument"
  Warn about unused dummy arguments. This option is implied by \fB\-Wall\fR.
! .IP "\fB\-Wunused\-parameter\fR" 4
  .IX Item "-Wunused-parameter"
! Contrary to \fBgcc\fR's meaning of \fB\-Wunused\-parameter\fR,
! \&\fBgfortran\fR's implementation of this option does not warn
  about unused dummy arguments (see \fB\-Wunused\-dummy\-argument\fR),
  but about unused \f(CW\*(C`PARAMETER\*(C'\fR values. \fB\-Wunused\-parameter\fR
  is implied by \fB\-Wextra\fR if also \fB\-Wunused\fR or
  \&\fB\-Wall\fR is used.
! .IP "\fB\-Walign\-commons\fR" 4
  .IX Item "-Walign-commons"
  By default, \fBgfortran\fR warns about any occasion of variables being
  padded for proper alignment inside a \f(CW\*(C`COMMON\*(C'\fR block. This warning can be turned
  off via \fB\-Wno\-align\-commons\fR. See also \fB\-falign\-commons\fR.
! .IP "\fB\-Wfunction\-elimination\fR" 4
  .IX Item "-Wfunction-elimination"
  Warn if any calls to impure functions are eliminated by the optimizations
  enabled by the \fB\-ffrontend\-optimize\fR option.
  This option is implied by \fB\-Wextra\fR.
! .IP "\fB\-Wrealloc\-lhs\fR" 4
  .IX Item "-Wrealloc-lhs"
  Warn when the compiler might insert code to for allocation or reallocation of
  an allocatable array variable of intrinsic type in intrinsic assignments.  In
  hot loops, the Fortran 2003 reallocation feature may reduce the performance.
  If the array is already allocated with the correct shape, consider using a
! whole-array array-spec (e.g. \f(CW\*(C`(:,:,:)\*(C'\fR) for the variable on the left-hand
  side to prevent the reallocation check. Note that in some cases the warning
  is shown, even if the compiler will optimize reallocation checks away.  For
! instance, when the right-hand side contains the same variable multiplied by
  a scalar.  See also \fB\-frealloc\-lhs\fR.
! .IP "\fB\-Wrealloc\-lhs\-all\fR" 4
  .IX Item "-Wrealloc-lhs-all"
  Warn when the compiler inserts code to for allocation or reallocation of an
  allocatable variable; this includes scalars and derived types.
! .IP "\fB\-Wcompare\-reals\fR" 4
  .IX Item "-Wcompare-reals"
  Warn when comparing real or complex types for equality or inequality.
  This option is implied by \fB\-Wextra\fR.
! .IP "\fB\-Wtarget\-lifetime\fR" 4
  .IX Item "-Wtarget-lifetime"
  Warn if the pointer in a pointer assignment might be longer than the its
  target. This option is implied by \fB\-Wall\fR.
! .IP "\fB\-Wzerotrip\fR" 4
  .IX Item "-Wzerotrip"
  Warn if a \f(CW\*(C`DO\*(C'\fR loop is known to execute zero times at compile
  time.  This option is implied by \fB\-Wall\fR.
! .IP "\fB\-Wdo\-subscript\fR" 4
  .IX Item "-Wdo-subscript"
! Warn if an array subscript inside a \s-1DO\s0 loop could lead to an
! out-of-bounds access even if the compiler cannot prove that the
  statement is actually executed, in cases like
  .Sp
  .Vb 6
--- 944,1020 ----
  active for \fB\-pedantic\fR, \fB\-std=f95\fR, \fB\-std=f2003\fR,
  \&\fB\-std=f2008\fR, \fB\-std=f2018\fR, \fB\-std=f2023\fR and
  \&\fB\-Wall\fR.
! .IP \fB\-Wundefined\-do\-loop\fR 4
  .IX Item "-Wundefined-do-loop"
! Warn if a DO loop with step either 1 or \-1 yields an underflow or an overflow
  during iteration of an induction variable of the loop.
  This option is implied by \fB\-Wall\fR.
! .IP \fB\-Wunderflow\fR 4
  .IX Item "-Wunderflow"
  Produce a warning when numerical constant expressions are
! encountered, which yield an UNDERFLOW during compilation. Enabled by default.
! .IP \fB\-Wintrinsic\-shadow\fR 4
  .IX Item "-Wintrinsic-shadow"
! Warn if a user\-defined procedure or module procedure has the same name as an
  intrinsic; in this case, an explicit interface or \f(CW\*(C`EXTERNAL\*(C'\fR or
  \&\f(CW\*(C`INTRINSIC\*(C'\fR declaration might be needed to get calls later resolved to
  the desired intrinsic/procedure.  This option is implied by \fB\-Wall\fR.
! .IP \fB\-Wuse\-without\-only\fR 4
  .IX Item "-Wuse-without-only"
  Warn if a \f(CW\*(C`USE\*(C'\fR statement has no \f(CW\*(C`ONLY\*(C'\fR qualifier and 
  thus implicitly imports all public entities of the used module.
! .IP \fB\-Wunused\-dummy\-argument\fR 4
  .IX Item "-Wunused-dummy-argument"
  Warn about unused dummy arguments. This option is implied by \fB\-Wall\fR.
! .IP \fB\-Wunused\-parameter\fR 4
  .IX Item "-Wunused-parameter"
! Contrary to \fBgcc\fR\*(Aqs meaning of \fB\-Wunused\-parameter\fR,
! \&\fBgfortran\fR\*(Aqs implementation of this option does not warn
  about unused dummy arguments (see \fB\-Wunused\-dummy\-argument\fR),
  but about unused \f(CW\*(C`PARAMETER\*(C'\fR values. \fB\-Wunused\-parameter\fR
  is implied by \fB\-Wextra\fR if also \fB\-Wunused\fR or
  \&\fB\-Wall\fR is used.
! .IP \fB\-Walign\-commons\fR 4
  .IX Item "-Walign-commons"
  By default, \fBgfortran\fR warns about any occasion of variables being
  padded for proper alignment inside a \f(CW\*(C`COMMON\*(C'\fR block. This warning can be turned
  off via \fB\-Wno\-align\-commons\fR. See also \fB\-falign\-commons\fR.
! .IP \fB\-Wfunction\-elimination\fR 4
  .IX Item "-Wfunction-elimination"
  Warn if any calls to impure functions are eliminated by the optimizations
  enabled by the \fB\-ffrontend\-optimize\fR option.
  This option is implied by \fB\-Wextra\fR.
! .IP \fB\-Wrealloc\-lhs\fR 4
  .IX Item "-Wrealloc-lhs"
  Warn when the compiler might insert code to for allocation or reallocation of
  an allocatable array variable of intrinsic type in intrinsic assignments.  In
  hot loops, the Fortran 2003 reallocation feature may reduce the performance.
  If the array is already allocated with the correct shape, consider using a
! whole\-array array\-spec (e.g. \f(CW\*(C`(:,:,:)\*(C'\fR) for the variable on the left\-hand
  side to prevent the reallocation check. Note that in some cases the warning
  is shown, even if the compiler will optimize reallocation checks away.  For
! instance, when the right\-hand side contains the same variable multiplied by
  a scalar.  See also \fB\-frealloc\-lhs\fR.
! .IP \fB\-Wrealloc\-lhs\-all\fR 4
  .IX Item "-Wrealloc-lhs-all"
  Warn when the compiler inserts code to for allocation or reallocation of an
  allocatable variable; this includes scalars and derived types.
! .IP \fB\-Wcompare\-reals\fR 4
  .IX Item "-Wcompare-reals"
  Warn when comparing real or complex types for equality or inequality.
  This option is implied by \fB\-Wextra\fR.
! .IP \fB\-Wtarget\-lifetime\fR 4
  .IX Item "-Wtarget-lifetime"
  Warn if the pointer in a pointer assignment might be longer than the its
  target. This option is implied by \fB\-Wall\fR.
! .IP \fB\-Wzerotrip\fR 4
  .IX Item "-Wzerotrip"
  Warn if a \f(CW\*(C`DO\*(C'\fR loop is known to execute zero times at compile
  time.  This option is implied by \fB\-Wall\fR.
! .IP \fB\-Wdo\-subscript\fR 4
  .IX Item "-Wdo-subscript"
! Warn if an array subscript inside a DO loop could lead to an
! out\-of\-bounds access even if the compiler cannot prove that the
  statement is actually executed, in cases like
  .Sp
  .Vb 6
*************** statement is actually executed, in cases
*** 1098,1136 ****
  .Ve
  .Sp
  This option is implied by \fB\-Wextra\fR.
! .IP "\fB\-Werror\fR" 4
  .IX Item "-Werror"
  Turns all warnings into errors.
  .PP
  Some of these have no effect when compiling programs written in Fortran.
  .SS "Options for debugging your program"
  .IX Subsection "Options for debugging your program"
! \&\s-1GNU\s0 Fortran has various special options that are used for debugging
  your program.
! .IP "\fB\-fdebug\-aux\-vars\fR" 4
  .IX Item "-fdebug-aux-vars"
  Renames internal variables created by the gfortran front end and makes
  them accessible to a debugger.  The name of the internal variables then
! start with upper-case letters followed by an underscore.  This option is
! useful for debugging the compiler's code generation together with
  \&\f(CW\*(C`\-fdump\-tree\-original\*(C'\fR and enabling debugging of the executable
  program by using \f(CW\*(C`\-g\*(C'\fR or \f(CW\*(C`\-ggdb3\*(C'\fR.
! .IP "\fB\-ffpe\-trap=\fR\fIlist\fR" 4
  .IX Item "-ffpe-trap=list"
  Specify a list of floating point exception traps to enable.  On most
  systems, if a floating point exception occurs and the trap for that
! exception is enabled, a \s-1SIGFPE\s0 signal will be sent and the program
  being aborted, producing a core file useful for debugging.  \fIlist\fR
! is a (possibly empty) comma-separated list of either \fBnone\fR (to
  clear the set of exceptions to be trapped), or of the following
  exceptions: \fBinvalid\fR (invalid floating point operation, such as
! \&\f(CW\*(C`SQRT(\-1.0)\*(C'\fR), \fBzero\fR (division by zero), \fBoverflow\fR
  (overflow in a floating point operation), \fBunderflow\fR (underflow
  in a floating point operation), \fBinexact\fR (loss of precision
  during operation), and \fBdenormal\fR (operation performed on a
  denormal value).  The first five exceptions correspond to the five
! \&\s-1IEEE 754\s0 exceptions, whereas the last one (\fBdenormal\fR) is not
! part of the \s-1IEEE 754\s0 standard but is available on some common
  architectures such as x86.
  .Sp
  The first three exceptions (\fBinvalid\fR, \fBzero\fR, and
--- 1027,1065 ----
  .Ve
  .Sp
  This option is implied by \fB\-Wextra\fR.
! .IP \fB\-Werror\fR 4
  .IX Item "-Werror"
  Turns all warnings into errors.
  .PP
  Some of these have no effect when compiling programs written in Fortran.
  .SS "Options for debugging your program"
  .IX Subsection "Options for debugging your program"
! GNU Fortran has various special options that are used for debugging
  your program.
! .IP \fB\-fdebug\-aux\-vars\fR 4
  .IX Item "-fdebug-aux-vars"
  Renames internal variables created by the gfortran front end and makes
  them accessible to a debugger.  The name of the internal variables then
! start with upper\-case letters followed by an underscore.  This option is
! useful for debugging the compiler\*(Aqs code generation together with
  \&\f(CW\*(C`\-fdump\-tree\-original\*(C'\fR and enabling debugging of the executable
  program by using \f(CW\*(C`\-g\*(C'\fR or \f(CW\*(C`\-ggdb3\*(C'\fR.
! .IP \fB\-ffpe\-trap=\fR\fIlist\fR 4
  .IX Item "-ffpe-trap=list"
  Specify a list of floating point exception traps to enable.  On most
  systems, if a floating point exception occurs and the trap for that
! exception is enabled, a SIGFPE signal will be sent and the program
  being aborted, producing a core file useful for debugging.  \fIlist\fR
! is a (possibly empty) comma\-separated list of either \fBnone\fR (to
  clear the set of exceptions to be trapped), or of the following
  exceptions: \fBinvalid\fR (invalid floating point operation, such as
! \&\f(CWSQRT(\-1.0)\fR), \fBzero\fR (division by zero), \fBoverflow\fR
  (overflow in a floating point operation), \fBunderflow\fR (underflow
  in a floating point operation), \fBinexact\fR (loss of precision
  during operation), and \fBdenormal\fR (operation performed on a
  denormal value).  The first five exceptions correspond to the five
! IEEE 754 exceptions, whereas the last one (\fBdenormal\fR) is not
! part of the IEEE 754 standard but is available on some common
  architectures such as x86.
  .Sp
  The first three exceptions (\fBinvalid\fR, \fBzero\fR, and
*************** has provisions for dealing with these ex
*** 1139,1145 ****
  these three exceptions is probably a good idea.
  .Sp
  If the option is used more than once in the command line, the lists will
! be joined: '\f(CW\*(C`ffpe\-trap=\*(C'\fR\fIlist1\fR \f(CW\*(C`ffpe\-trap=\*(C'\fR\fIlist2\fR'
  is equivalent to \f(CW\*(C`ffpe\-trap=\*(C'\fR\fIlist1\fR,\fIlist2\fR.
  .Sp
  Note that once enabled an exception cannot be disabled (no negative form),
--- 1068,1074 ----
  these three exceptions is probably a good idea.
  .Sp
  If the option is used more than once in the command line, the lists will
! be joined: \*(Aq\f(CW\*(C`ffpe\-trap=\*(C'\fR\fIlist1\fR \f(CW\*(C`ffpe\-trap=\*(C'\fR\fIlist2\fR\*(Aq
  is equivalent to \f(CW\*(C`ffpe\-trap=\*(C'\fR\fIlist1\fR,\fIlist2\fR.
  .Sp
  Note that once enabled an exception cannot be disabled (no negative form),
*************** due to rounding, and hence the \f(CW\*(C
*** 1150,1160 ****
  be uninteresting in practice.
  .Sp
  By default no exception traps are enabled.
! .IP "\fB\-ffpe\-summary=\fR\fIlist\fR" 4
  .IX Item "-ffpe-summary=list"
! Specify a list of floating-point exceptions, whose flag status is printed
  to \f(CW\*(C`ERROR_UNIT\*(C'\fR when invoking \f(CW\*(C`STOP\*(C'\fR and \f(CW\*(C`ERROR STOP\*(C'\fR.
! \&\fIlist\fR can be either \fBnone\fR, \fBall\fR or a comma-separated list
  of the following exceptions: \fBinvalid\fR, \fBzero\fR, \fBoverflow\fR,
  \&\fBunderflow\fR, \fBinexact\fR and \fBdenormal\fR. (See
  \&\fB\-ffpe\-trap\fR for a description of the exceptions.)
--- 1079,1089 ----
  be uninteresting in practice.
  .Sp
  By default no exception traps are enabled.
! .IP \fB\-ffpe\-summary=\fR\fIlist\fR 4
  .IX Item "-ffpe-summary=list"
! Specify a list of floating\-point exceptions, whose flag status is printed
  to \f(CW\*(C`ERROR_UNIT\*(C'\fR when invoking \f(CW\*(C`STOP\*(C'\fR and \f(CW\*(C`ERROR STOP\*(C'\fR.
! \&\fIlist\fR can be either \fBnone\fR, \fBall\fR or a comma\-separated list
  of the following exceptions: \fBinvalid\fR, \fBzero\fR, \fBoverflow\fR,
  \&\fBunderflow\fR, \fBinexact\fR and \fBdenormal\fR. (See
  \&\fB\-ffpe\-trap\fR for a description of the exceptions.)
*************** If the option is used more than once in
*** 1163,1186 ****
  last one will be used.
  .Sp
  By default, a summary for all exceptions but \fBinexact\fR is shown.
! .IP "\fB\-fno\-backtrace\fR" 4
  .IX Item "-fno-backtrace"
  When a serious runtime error is encountered or a deadly signal is
  emitted (segmentation fault, illegal instruction, bus error,
! floating-point exception, and the other \s-1POSIX\s0 signals that have the
  action \fBcore\fR), the Fortran runtime library tries to output a
  backtrace of the error. \f(CW\*(C`\-fno\-backtrace\*(C'\fR disables the backtrace
  generation. This option only has influence for compilation of the
  Fortran main program.
  .SS "Options for directory search"
  .IX Subsection "Options for directory search"
! These options affect how \s-1GNU\s0 Fortran searches
  for files specified by the \f(CW\*(C`INCLUDE\*(C'\fR directive and where it searches
  for previously compiled modules.
  .PP
  It also affects the search paths used by \fBcpp\fR when used to preprocess
  Fortran source.
! .IP "\fB\-I\fR\fIdir\fR" 4
  .IX Item "-Idir"
  These affect interpretation of the \f(CW\*(C`INCLUDE\*(C'\fR directive
  (as well as of the \f(CW\*(C`#include\*(C'\fR directive of the \fBcpp\fR
--- 1092,1115 ----
  last one will be used.
  .Sp
  By default, a summary for all exceptions but \fBinexact\fR is shown.
! .IP \fB\-fno\-backtrace\fR 4
  .IX Item "-fno-backtrace"
  When a serious runtime error is encountered or a deadly signal is
  emitted (segmentation fault, illegal instruction, bus error,
! floating\-point exception, and the other POSIX signals that have the
  action \fBcore\fR), the Fortran runtime library tries to output a
  backtrace of the error. \f(CW\*(C`\-fno\-backtrace\*(C'\fR disables the backtrace
  generation. This option only has influence for compilation of the
  Fortran main program.
  .SS "Options for directory search"
  .IX Subsection "Options for directory search"
! These options affect how GNU Fortran searches
  for files specified by the \f(CW\*(C`INCLUDE\*(C'\fR directive and where it searches
  for previously compiled modules.
  .PP
  It also affects the search paths used by \fBcpp\fR when used to preprocess
  Fortran source.
! .IP \fB\-I\fR\fIdir\fR 4
  .IX Item "-Idir"
  These affect interpretation of the \f(CW\*(C`INCLUDE\*(C'\fR directive
  (as well as of the \f(CW\*(C`#include\*(C'\fR directive of the \fBcpp\fR
*************** looking for \fIheader.gcc\fR files and o
*** 1193,1199 ****
  .Sp
  This path is also used to search for \fI.mod\fR files when previously
  compiled modules are required by a \f(CW\*(C`USE\*(C'\fR statement.
! .IP "\fB\-J\fR\fIdir\fR" 4
  .IX Item "-Jdir"
  This option specifies where to put \fI.mod\fR files for compiled modules.
  It is also added to the list of directories to searched by an \f(CW\*(C`USE\*(C'\fR
--- 1122,1128 ----
  .Sp
  This path is also used to search for \fI.mod\fR files when previously
  compiled modules are required by a \f(CW\*(C`USE\*(C'\fR statement.
! .IP \fB\-J\fR\fIdir\fR 4
  .IX Item "-Jdir"
  This option specifies where to put \fI.mod\fR files for compiled modules.
  It is also added to the list of directories to searched by an \f(CW\*(C`USE\*(C'\fR
*************** statement.
*** 1202,1221 ****
  The default is the current directory.
  .IP "\fB\-fintrinsic\-modules\-path\fR \fIdir\fR" 4
  .IX Item "-fintrinsic-modules-path dir"
! This option specifies the location of pre-compiled intrinsic modules, if
  they are not in the default location expected by the compiler.
  .SS "Influencing the linking step"
  .IX Subsection "Influencing the linking step"
  These options come into play when the compiler links object files into an 
  executable output file. They are meaningless if the compiler is not doing 
  a link step.
! .IP "\fB\-static\-libgfortran\fR" 4
  .IX Item "-static-libgfortran"
  On systems that provide \fIlibgfortran\fR as a shared and a static
  library, this option forces the use of the static version. If no
  shared version of \fIlibgfortran\fR was built when the compiler was
  configured, this option has no effect.
! .IP "\fB\-static\-libquadmath\fR" 4
  .IX Item "-static-libquadmath"
  On systems that provide \fIlibquadmath\fR as a shared and a static
  library, this option forces the use of the static version. If no
--- 1131,1150 ----
  The default is the current directory.
  .IP "\fB\-fintrinsic\-modules\-path\fR \fIdir\fR" 4
  .IX Item "-fintrinsic-modules-path dir"
! This option specifies the location of pre\-compiled intrinsic modules, if
  they are not in the default location expected by the compiler.
  .SS "Influencing the linking step"
  .IX Subsection "Influencing the linking step"
  These options come into play when the compiler links object files into an 
  executable output file. They are meaningless if the compiler is not doing 
  a link step.
! .IP \fB\-static\-libgfortran\fR 4
  .IX Item "-static-libgfortran"
  On systems that provide \fIlibgfortran\fR as a shared and a static
  library, this option forces the use of the static version. If no
  shared version of \fIlibgfortran\fR was built when the compiler was
  configured, this option has no effect.
! .IP \fB\-static\-libquadmath\fR 4
  .IX Item "-static-libquadmath"
  On systems that provide \fIlibquadmath\fR as a shared and a static
  library, this option forces the use of the static version. If no
*************** shared version of \fIlibquadmath\fR was
*** 1223,1261 ****
  configured, this option has no effect.
  .Sp
  Please note that the \fIlibquadmath\fR runtime library is licensed under the
! \&\s-1GNU\s0 Lesser General Public License (\s-1LGPL\s0), and linking it statically introduces
  requirements when redistributing the resulting binaries.
  .SS "Influencing runtime behavior"
  .IX Subsection "Influencing runtime behavior"
! These options affect the runtime behavior of programs compiled with \s-1GNU\s0 Fortran.
! .IP "\fB\-fconvert=\fR\fIconversion\fR" 4
  .IX Item "-fconvert=conversion"
  Specify the representation of data for unformatted files.  Valid
  values for conversion on most systems are: \fBnative\fR, the default;
! \&\fBswap\fR, swap between big\- and little-endian; \fBbig-endian\fR, use
! big-endian representation for unformatted files; \fBlittle-endian\fR, use
! little-endian representation for unformatted files.
  .Sp
! On \s-1POWER\s0 systems which suppport \fB\-mabi=ieeelongdouble\fR,
  there are additional options, which can be combined with others with
  commas.  Those are
  .RS 4
! .ie n .IP "@w<\fB\-fconvert=r16_ieee\fR Use \s-1IEEE\s0 128\-bit format for>" 4
! .el .IP "\f(CW@w\fR<\fB\-fconvert=r16_ieee\fR Use \s-1IEEE\s0 128\-bit format for>" 4
  .IX Item "@w<-fconvert=r16_ieee Use IEEE 128-bit format for>"
! \&\f(CW\*(C`REAL(KIND=16)\*(C'\fR.
! .ie n .IP "@w<\fB\-fconvert=r16_ibm\fR Use \s-1IBM\s0 long double format for>" 4
! .el .IP "\f(CW@w\fR<\fB\-fconvert=r16_ibm\fR Use \s-1IBM\s0 long double format for>" 4
  .IX Item "@w<-fconvert=r16_ibm Use IBM long double format for>"
! \&\f(CW\*(C`REAL(KIND=16)\*(C'\fR.
  .RE
  .RS 4
  .Sp
  \&\fIThis option has an effect only when used in the main program.
! The \f(CI\*(C`CONVERT\*(C'\fI specifier and the \s-1GFORTRAN_CONVERT_UNIT\s0 environment
! variable override the default specified by \f(BI\-fconvert\fI.\fR
  .RE
! .IP "\fB\-frecord\-marker=\fR\fIlength\fR" 4
  .IX Item "-frecord-marker=length"
  Specify the length of record markers for unformatted files.
  Valid values for \fIlength\fR are 4 and 8.  Default is 4.
--- 1152,1190 ----
  configured, this option has no effect.
  .Sp
  Please note that the \fIlibquadmath\fR runtime library is licensed under the
! GNU Lesser General Public License (LGPL), and linking it statically introduces
  requirements when redistributing the resulting binaries.
  .SS "Influencing runtime behavior"
  .IX Subsection "Influencing runtime behavior"
! These options affect the runtime behavior of programs compiled with GNU Fortran.
! .IP \fB\-fconvert=\fR\fIconversion\fR 4
  .IX Item "-fconvert=conversion"
  Specify the representation of data for unformatted files.  Valid
  values for conversion on most systems are: \fBnative\fR, the default;
! \&\fBswap\fR, swap between big\- and little\-endian; \fBbig\-endian\fR, use
! big\-endian representation for unformatted files; \fBlittle\-endian\fR, use
! little\-endian representation for unformatted files.
  .Sp
! On POWER systems which suppport \fB\-mabi=ieeelongdouble\fR,
  there are additional options, which can be combined with others with
  commas.  Those are
  .RS 4
! .ie n .IP "@w<\fB\-fconvert=r16_ieee\fR Use IEEE 128\-bit format for>" 4
! .el .IP "\f(CW@w\fR<\fB\-fconvert=r16_ieee\fR Use IEEE 128\-bit format for>" 4
  .IX Item "@w<-fconvert=r16_ieee Use IEEE 128-bit format for>"
! \&\f(CWREAL(KIND=16)\fR.
! .ie n .IP "@w<\fB\-fconvert=r16_ibm\fR Use IBM long double format for>" 4
! .el .IP "\f(CW@w\fR<\fB\-fconvert=r16_ibm\fR Use IBM long double format for>" 4
  .IX Item "@w<-fconvert=r16_ibm Use IBM long double format for>"
! \&\f(CWREAL(KIND=16)\fR.
  .RE
  .RS 4
  .Sp
  \&\fIThis option has an effect only when used in the main program.
! The \fR\f(CI\*(C`CONVERT\*(C'\fR\fI specifier and the GFORTRAN_CONVERT_UNIT environment
! variable override the default specified by \fR\f(BI\-fconvert\fR\fI.\fR
  .RE
! .IP \fB\-frecord\-marker=\fR\fIlength\fR 4
  .IX Item "-frecord-marker=length"
  Specify the length of record markers for unformatted files.
  Valid values for \fIlength\fR are 4 and 8.  Default is 4.
*************** Valid values for \fIlength\fR are 4 and
*** 1263,1274 ****
  which specified a default record marker length of 8 on most
  systems.  If you want to read or write files compatible
  with earlier versions of \fBgfortran\fR, use \fB\-frecord\-marker=8\fR.
! .IP "\fB\-fmax\-subrecord\-length=\fR\fIlength\fR" 4
  .IX Item "-fmax-subrecord-length=length"
  Specify the maximum length for a subrecord.  The maximum permitted
  value for length is 2147483639, which is also the default.  Only
  really useful for use by the gfortran testsuite.
! .IP "\fB\-fsign\-zero\fR" 4
  .IX Item "-fsign-zero"
  When enabled, floating point numbers of value zero with the sign bit set
  are written as negative number in formatted output and treated as
--- 1192,1203 ----
  which specified a default record marker length of 8 on most
  systems.  If you want to read or write files compatible
  with earlier versions of \fBgfortran\fR, use \fB\-frecord\-marker=8\fR.
! .IP \fB\-fmax\-subrecord\-length=\fR\fIlength\fR 4
  .IX Item "-fmax-subrecord-length=length"
  Specify the maximum length for a subrecord.  The maximum permitted
  value for length is 2147483639, which is also the default.  Only
  really useful for use by the gfortran testsuite.
! .IP \fB\-fsign\-zero\fR 4
  .IX Item "-fsign-zero"
  When enabled, floating point numbers of value zero with the sign bit set
  are written as negative number in formatted output and treated as
*************** negative in the \f(CW\*(C`SIGN\*(C'\fR i
*** 1276,1319 ****
  print the negative sign of zero values (or values rounded to zero for I/O)
  and regards zero as positive number in the \f(CW\*(C`SIGN\*(C'\fR intrinsic for
  compatibility with Fortran 77. The default is \fB\-fsign\-zero\fR.
! .SS "\s-1GNU\s0 Fortran Developer Options"
  .IX Subsection "GNU Fortran Developer Options"
! \&\s-1GNU\s0 Fortran has various special options that are used for debugging
! the \s-1GNU\s0 Fortran compiler.
! .IP "\fB\-fdump\-fortran\-global\fR" 4
  .IX Item "-fdump-fortran-global"
  Output a list of the global identifiers after translating into
! middle-end representation. Mostly useful for debugging the \s-1GNU\s0 Fortran
  compiler itself. The output generated by this option might change
  between releases.  This option may also generate internal compiler
  errors for features which have only recently been added.
! .IP "\fB\-fdump\-fortran\-optimized\fR" 4
  .IX Item "-fdump-fortran-optimized"
! Output the parse tree after front-end optimization.  Mostly useful for
! debugging the \s-1GNU\s0 Fortran compiler itself. The output generated by
  this option might change between releases.  This option may also
  generate internal compiler errors for features which have only
  recently been added.
! .IP "\fB\-fdump\-fortran\-original\fR" 4
  .IX Item "-fdump-fortran-original"
  Output the internal parse tree after translating the source program
  into internal representation.  This option is mostly useful for
! debugging the \s-1GNU\s0 Fortran compiler itself. The output generated by
  this option might change between releases. This option may also
  generate internal compiler errors for features which have only
  recently been added.
! .IP "\fB\-fdump\-parse\-tree\fR" 4
  .IX Item "-fdump-parse-tree"
  Output the internal parse tree after translating the source program
! into internal representation.  Mostly useful for debugging the \s-1GNU\s0
  Fortran compiler itself. The output generated by this option might
  change between releases. This option may also generate internal
  compiler errors for features which have only recently been added. This
  option is deprecated; use \f(CW\*(C`\-fdump\-fortran\-original\*(C'\fR instead.
! .IP "\fB\-save\-temps\fR" 4
  .IX Item "-save-temps"
! Store the usual \*(L"temporary\*(R" intermediate files permanently; name them
! as auxiliary output files, as specified described under \s-1GCC\s0
  \&\fB\-dumpbase\fR and \fB\-dumpdir\fR.
  .Sp
  .Vb 1
--- 1205,1248 ----
  print the negative sign of zero values (or values rounded to zero for I/O)
  and regards zero as positive number in the \f(CW\*(C`SIGN\*(C'\fR intrinsic for
  compatibility with Fortran 77. The default is \fB\-fsign\-zero\fR.
! .SS "GNU Fortran Developer Options"
  .IX Subsection "GNU Fortran Developer Options"
! GNU Fortran has various special options that are used for debugging
! the GNU Fortran compiler.
! .IP \fB\-fdump\-fortran\-global\fR 4
  .IX Item "-fdump-fortran-global"
  Output a list of the global identifiers after translating into
! middle\-end representation. Mostly useful for debugging the GNU Fortran
  compiler itself. The output generated by this option might change
  between releases.  This option may also generate internal compiler
  errors for features which have only recently been added.
! .IP \fB\-fdump\-fortran\-optimized\fR 4
  .IX Item "-fdump-fortran-optimized"
! Output the parse tree after front\-end optimization.  Mostly useful for
! debugging the GNU Fortran compiler itself. The output generated by
  this option might change between releases.  This option may also
  generate internal compiler errors for features which have only
  recently been added.
! .IP \fB\-fdump\-fortran\-original\fR 4
  .IX Item "-fdump-fortran-original"
  Output the internal parse tree after translating the source program
  into internal representation.  This option is mostly useful for
! debugging the GNU Fortran compiler itself. The output generated by
  this option might change between releases. This option may also
  generate internal compiler errors for features which have only
  recently been added.
! .IP \fB\-fdump\-parse\-tree\fR 4
  .IX Item "-fdump-parse-tree"
  Output the internal parse tree after translating the source program
! into internal representation.  Mostly useful for debugging the GNU
  Fortran compiler itself. The output generated by this option might
  change between releases. This option may also generate internal
  compiler errors for features which have only recently been added. This
  option is deprecated; use \f(CW\*(C`\-fdump\-fortran\-original\*(C'\fR instead.
! .IP \fB\-save\-temps\fR 4
  .IX Item "-save-temps"
! Store the usual "temporary" intermediate files permanently; name them
! as auxiliary output files, as specified described under GCC
  \&\fB\-dumpbase\fR and \fB\-dumpdir\fR.
  .Sp
  .Vb 1
*************** saves the preprocessor output in \fIfoo.
*** 1332,1338 ****
  the (implied) output file \fIfoo.s\fR.
  .SS "Options for code generation conventions"
  .IX Subsection "Options for code generation conventions"
! These machine-independent options control the interface conventions
  used in code generation.
  .PP
  Most of them have both positive and negative forms; the negative form
--- 1261,1267 ----
  the (implied) output file \fIfoo.s\fR.
  .SS "Options for code generation conventions"
  .IX Subsection "Options for code generation conventions"
! These machine\-independent options control the interface conventions
  used in code generation.
  .PP
  Most of them have both positive and negative forms; the negative form
*************** of \fB\-ffoo\fR would be \fB\-fno\-foo\f
*** 1340,1348 ****
  one of the forms is listed\-\-\-the one which is not the default.  You
  can figure out the other form by either removing \fBno\-\fR or adding
  it.
! .IP "\fB\-fno\-automatic\fR" 4
  .IX Item "-fno-automatic"
! Treat each program unit (except those marked as \s-1RECURSIVE\s0) as if the
  \&\f(CW\*(C`SAVE\*(C'\fR statement were specified for every local variable and array
  referenced in it. Does not affect common blocks. (Some Fortran compilers
  provide this option under the name \fB\-static\fR or \fB\-save\fR.)
--- 1269,1277 ----
  one of the forms is listed\-\-\-the one which is not the default.  You
  can figure out the other form by either removing \fBno\-\fR or adding
  it.
! .IP \fB\-fno\-automatic\fR 4
  .IX Item "-fno-automatic"
! Treat each program unit (except those marked as RECURSIVE) as if the
  \&\f(CW\*(C`SAVE\*(C'\fR statement were specified for every local variable and array
  referenced in it. Does not affect common blocks. (Some Fortran compilers
  provide this option under the name \fB\-static\fR or \fB\-save\fR.)
*************** Use the option \fB\-frecursive\fR to use
*** 1352,1358 ****
  .Sp
  Local variables or arrays having an explicit \f(CW\*(C`SAVE\*(C'\fR attribute are
  silently ignored unless the \fB\-pedantic\fR option is added.
! .IP "\fB\-ff2c\fR" 4
  .IX Item "-ff2c"
  Generate code designed to be compatible with code generated
  by \fBg77\fR and \fBf2c\fR.
--- 1281,1287 ----
  .Sp
  Local variables or arrays having an explicit \f(CW\*(C`SAVE\*(C'\fR attribute are
  silently ignored unless the \fB\-pedantic\fR option is added.
! .IP \fB\-ff2c\fR 4
  .IX Item "-ff2c"
  Generate code designed to be compatible with code generated
  by \fBg77\fR and \fBf2c\fR.
*************** in \fBf2c\fR) require functions that ret
*** 1362,1371 ****
  default \f(CW\*(C`REAL\*(C'\fR to actually return the C type \f(CW\*(C`double\*(C'\fR, and
  functions that return type \f(CW\*(C`COMPLEX\*(C'\fR to return the values via an
  extra argument in the calling sequence that points to where to
! store the return value.  Under the default \s-1GNU\s0 calling conventions, such
! functions simply return their results as they would in \s-1GNU\s0
  C\-\-\-default \f(CW\*(C`REAL\*(C'\fR functions return the C type \f(CW\*(C`float\*(C'\fR, and
! \&\f(CW\*(C`COMPLEX\*(C'\fR functions return the \s-1GNU C\s0 type \f(CW\*(C`complex\*(C'\fR.
  Additionally, this option implies the \fB\-fsecond\-underscore\fR
  option, unless \fB\-fno\-second\-underscore\fR is explicitly requested.
  .Sp
--- 1291,1300 ----
  default \f(CW\*(C`REAL\*(C'\fR to actually return the C type \f(CW\*(C`double\*(C'\fR, and
  functions that return type \f(CW\*(C`COMPLEX\*(C'\fR to return the values via an
  extra argument in the calling sequence that points to where to
! store the return value.  Under the default GNU calling conventions, such
! functions simply return their results as they would in GNU
  C\-\-\-default \f(CW\*(C`REAL\*(C'\fR functions return the C type \f(CW\*(C`float\*(C'\fR, and
! \&\f(CW\*(C`COMPLEX\*(C'\fR functions return the GNU C type \f(CW\*(C`complex\*(C'\fR.
  Additionally, this option implies the \fB\-fsecond\-underscore\fR
  option, unless \fB\-fno\-second\-underscore\fR is explicitly requested.
  .Sp
*************** calling conventions will break at execut
*** 1381,1408 ****
  \&\fICaution:\fR This will break code which passes intrinsic functions
  of type default \f(CW\*(C`REAL\*(C'\fR or \f(CW\*(C`COMPLEX\*(C'\fR as actual arguments, as
  the library implementations use the \fB\-fno\-f2c\fR calling conventions.
! .IP "\fB\-fno\-underscoring\fR" 4
  .IX Item "-fno-underscoring"
  Do not transform names of entities specified in the Fortran
  source file by appending underscores to them.
  .Sp
! With \fB\-funderscoring\fR in effect, \s-1GNU\s0 Fortran appends one
  underscore to external names.  This is done to ensure
! compatibility with code produced by many \s-1UNIX\s0 Fortran compilers.
  .Sp
! \&\fICaution\fR: The default behavior of \s-1GNU\s0 Fortran is
  incompatible with \fBf2c\fR and \fBg77\fR, please use the
  \&\fB\-ff2c\fR option if you want object files compiled with
! \&\s-1GNU\s0 Fortran to be compatible with object code created with these
  tools.
  .Sp
  Use of \fB\-fno\-underscoring\fR is not recommended unless you are
! experimenting with issues such as integration of \s-1GNU\s0 Fortran into
! existing system environments (vis\-a\*`\-vis existing libraries, tools,
  and so on).
  .Sp
! For example, with \fB\-funderscoring\fR, and assuming that \f(CW\*(C`j()\*(C'\fR and
! \&\f(CW\*(C`max_count()\*(C'\fR are external functions while \f(CW\*(C`my_var\*(C'\fR and
  \&\f(CW\*(C`lvar\*(C'\fR are local variables, a statement like
  .Sp
  .Vb 1
--- 1310,1337 ----
  \&\fICaution:\fR This will break code which passes intrinsic functions
  of type default \f(CW\*(C`REAL\*(C'\fR or \f(CW\*(C`COMPLEX\*(C'\fR as actual arguments, as
  the library implementations use the \fB\-fno\-f2c\fR calling conventions.
! .IP \fB\-fno\-underscoring\fR 4
  .IX Item "-fno-underscoring"
  Do not transform names of entities specified in the Fortran
  source file by appending underscores to them.
  .Sp
! With \fB\-funderscoring\fR in effect, GNU Fortran appends one
  underscore to external names.  This is done to ensure
! compatibility with code produced by many UNIX Fortran compilers.
  .Sp
! \&\fICaution\fR: The default behavior of GNU Fortran is
  incompatible with \fBf2c\fR and \fBg77\fR, please use the
  \&\fB\-ff2c\fR option if you want object files compiled with
! GNU Fortran to be compatible with object code created with these
  tools.
  .Sp
  Use of \fB\-fno\-underscoring\fR is not recommended unless you are
! experimenting with issues such as integration of GNU Fortran into
! existing system environments (vis\-à\-vis existing libraries, tools,
  and so on).
  .Sp
! For example, with \fB\-funderscoring\fR, and assuming that \f(CWj()\fR and
! \&\f(CWmax_count()\fR are external functions while \f(CW\*(C`my_var\*(C'\fR and
  \&\f(CW\*(C`lvar\*(C'\fR are local variables, a statement like
  .Sp
  .Vb 1
*************** With \fB\-fno\-underscoring\fR, the same
*** 1422,1434 ****
  .Ve
  .Sp
  Use of \fB\-fno\-underscoring\fR allows direct specification of
! user-defined names while debugging and when interfacing \s-1GNU\s0 Fortran
  code with other languages.
  .Sp
  Note that just because the names match does \fInot\fR mean that the
! interface implemented by \s-1GNU\s0 Fortran for an external name matches the
  interface implemented by some other language for that same name.
! That is, getting code produced by \s-1GNU\s0 Fortran to link to code produced
  by some other compiler using this or any other method can be only a
  small part of the overall solution\-\-\-getting the code generated by
  both compilers to agree on issues other than naming can require
--- 1351,1363 ----
  .Ve
  .Sp
  Use of \fB\-fno\-underscoring\fR allows direct specification of
! user\-defined names while debugging and when interfacing GNU Fortran
  code with other languages.
  .Sp
  Note that just because the names match does \fInot\fR mean that the
! interface implemented by GNU Fortran for an external name matches the
  interface implemented by some other language for that same name.
! That is, getting code produced by GNU Fortran to link to code produced
  by some other compiler using this or any other method can be only a
  small part of the overall solution\-\-\-getting the code generated by
  both compilers to agree on issues other than naming can require
*************** significant effort, and, unlike naming d
*** 1436,1458 ****
  cannot detect disagreements in these other areas.
  .Sp
  Also, note that with \fB\-fno\-underscoring\fR, the lack of appended
! underscores introduces the very real possibility that a user-defined
  external name will conflict with a name in a system library, which
! could make finding unresolved-reference bugs quite difficult in some
  cases\-\-\-they might occur at program run time, and show up only as
  buggy behavior at run time.
  .Sp
! In future versions of \s-1GNU\s0 Fortran we hope to improve naming and linking
  issues so that debugging always involves using the names as they appear
  in the source, even if the names as seen by the linker are mangled to
  prevent accidental linking between procedures with incompatible
  interfaces.
! .IP "\fB\-fsecond\-underscore\fR" 4
  .IX Item "-fsecond-underscore"
! By default, \s-1GNU\s0 Fortran appends an underscore to external
! names.  If this option is used \s-1GNU\s0 Fortran appends two
  underscores to names with underscores and one underscore to external names
! with no underscores.  \s-1GNU\s0 Fortran also appends two underscores to
  internal names with underscores to avoid naming collisions with external
  names.
  .Sp
--- 1365,1387 ----
  cannot detect disagreements in these other areas.
  .Sp
  Also, note that with \fB\-fno\-underscoring\fR, the lack of appended
! underscores introduces the very real possibility that a user\-defined
  external name will conflict with a name in a system library, which
! could make finding unresolved\-reference bugs quite difficult in some
  cases\-\-\-they might occur at program run time, and show up only as
  buggy behavior at run time.
  .Sp
! In future versions of GNU Fortran we hope to improve naming and linking
  issues so that debugging always involves using the names as they appear
  in the source, even if the names as seen by the linker are mangled to
  prevent accidental linking between procedures with incompatible
  interfaces.
! .IP \fB\-fsecond\-underscore\fR 4
  .IX Item "-fsecond-underscore"
! By default, GNU Fortran appends an underscore to external
! names.  If this option is used GNU Fortran appends two
  underscores to names with underscores and one underscore to external names
! with no underscores.  GNU Fortran also appends two underscores to
  internal names with underscores to avoid naming collisions with external
  names.
  .Sp
*************** This option has no effect if \fB\-fno\-u
*** 1460,1511 ****
  in effect.  It is implied by the \fB\-ff2c\fR option.
  .Sp
  Otherwise, with this option, an external name such as \f(CW\*(C`MAX_COUNT\*(C'\fR
! is implemented as a reference to the link-time external symbol
  \&\f(CW\*(C`max_count_\|_\*(C'\fR, instead of \f(CW\*(C`max_count_\*(C'\fR.  This is required
  for compatibility with \fBg77\fR and \fBf2c\fR, and is implied
  by use of the \fB\-ff2c\fR option.
! .IP "\fB\-fcoarray=\fR\fI<keyword>\fR" 4
  .IX Item "-fcoarray=<keyword>"
  .RS 4
  .PD 0
! .IP "\fBnone\fR" 4
  .IX Item "none"
  .PD
! Disable coarray support; using coarray declarations and image-control
! statements will produce a compile-time error. (Default)
! .IP "\fBsingle\fR" 4
  .IX Item "single"
! Single-image mode, i.e. \f(CW\*(C`num_images()\*(C'\fR is always one.
! .IP "\fBlib\fR" 4
  .IX Item "lib"
! Library-based coarray parallelization; a suitable \s-1GNU\s0 Fortran coarray
  library needs to be linked.
  .RE
  .RS 4
  .RE
! .IP "\fB\-fcheck=\fR\fI<keyword>\fR" 4
  .IX Item "-fcheck=<keyword>"
! Enable the generation of run-time checks; the argument shall be
! a comma-delimited list of the following keywords.  Prefixing a check with
  \&\fBno\-\fR disables it if it was activated by a previous specification.
  .RS 4
! .IP "\fBall\fR" 4
  .IX Item "all"
! Enable all run-time test of \fB\-fcheck\fR.
! .IP "\fBarray-temps\fR" 4
  .IX Item "array-temps"
  Warns at run time when for passing an actual argument a temporary array
  had to be generated. The information generated by this warning is
  sometimes useful in optimization, in order to avoid such temporaries.
  .Sp
  Note: The warning is only printed once per location.
! .IP "\fBbits\fR" 4
  .IX Item "bits"
! Enable generation of run-time checks for invalid arguments to the bit
  manipulation intrinsics.
! .IP "\fBbounds\fR" 4
  .IX Item "bounds"
! Enable generation of run-time checks for array subscripts
  and against the declared minimum and maximum values.  It also
  checks array indices for assumed and deferred
  shape arrays against the actual allocated bounds and ensures that all string
--- 1389,1440 ----
  in effect.  It is implied by the \fB\-ff2c\fR option.
  .Sp
  Otherwise, with this option, an external name such as \f(CW\*(C`MAX_COUNT\*(C'\fR
! is implemented as a reference to the link\-time external symbol
  \&\f(CW\*(C`max_count_\|_\*(C'\fR, instead of \f(CW\*(C`max_count_\*(C'\fR.  This is required
  for compatibility with \fBg77\fR and \fBf2c\fR, and is implied
  by use of the \fB\-ff2c\fR option.
! .IP \fB\-fcoarray=\fR\fI<keyword>\fR 4
  .IX Item "-fcoarray=<keyword>"
  .RS 4
  .PD 0
! .IP \fBnone\fR 4
  .IX Item "none"
  .PD
! Disable coarray support; using coarray declarations and image\-control
! statements will produce a compile\-time error. (Default)
! .IP \fBsingle\fR 4
  .IX Item "single"
! Single\-image mode, i.e. \f(CWnum_images()\fR is always one.
! .IP \fBlib\fR 4
  .IX Item "lib"
! Library\-based coarray parallelization; a suitable GNU Fortran coarray
  library needs to be linked.
  .RE
  .RS 4
  .RE
! .IP \fB\-fcheck=\fR\fI<keyword>\fR 4
  .IX Item "-fcheck=<keyword>"
! Enable the generation of run\-time checks; the argument shall be
! a comma\-delimited list of the following keywords.  Prefixing a check with
  \&\fBno\-\fR disables it if it was activated by a previous specification.
  .RS 4
! .IP \fBall\fR 4
  .IX Item "all"
! Enable all run\-time test of \fB\-fcheck\fR.
! .IP \fBarray\-temps\fR 4
  .IX Item "array-temps"
  Warns at run time when for passing an actual argument a temporary array
  had to be generated. The information generated by this warning is
  sometimes useful in optimization, in order to avoid such temporaries.
  .Sp
  Note: The warning is only printed once per location.
! .IP \fBbits\fR 4
  .IX Item "bits"
! Enable generation of run\-time checks for invalid arguments to the bit
  manipulation intrinsics.
! .IP \fBbounds\fR 4
  .IX Item "bounds"
! Enable generation of run\-time checks for array subscripts
  and against the declared minimum and maximum values.  It also
  checks array indices for assumed and deferred
  shape arrays against the actual allocated bounds and ensures that all string
*************** the compilation of the main program.
*** 1517,1537 ****
  .Sp
  Note: In the future this may also include other forms of checking, e.g.,
  checking substring references.
! .IP "\fBdo\fR" 4
  .IX Item "do"
! Enable generation of run-time checks for invalid modification of loop
  iteration variables.
! .IP "\fBmem\fR" 4
  .IX Item "mem"
! Enable generation of run-time checks for memory allocation.
  Note: This option does not affect explicit allocations using the
  \&\f(CW\*(C`ALLOCATE\*(C'\fR statement, which will be always checked.
! .IP "\fBpointer\fR" 4
  .IX Item "pointer"
! Enable generation of run-time checks for pointers and allocatables.
! .IP "\fBrecursion\fR" 4
  .IX Item "recursion"
! Enable generation of run-time checks for recursively called subroutines and
  functions which are not marked as recursive. See also \fB\-frecursive\fR.
  Note: This check does not work for OpenMP programs and is disabled if used
  together with \fB\-frecursive\fR and \fB\-fopenmp\fR.
--- 1446,1466 ----
  .Sp
  Note: In the future this may also include other forms of checking, e.g.,
  checking substring references.
! .IP \fBdo\fR 4
  .IX Item "do"
! Enable generation of run\-time checks for invalid modification of loop
  iteration variables.
! .IP \fBmem\fR 4
  .IX Item "mem"
! Enable generation of run\-time checks for memory allocation.
  Note: This option does not affect explicit allocations using the
  \&\f(CW\*(C`ALLOCATE\*(C'\fR statement, which will be always checked.
! .IP \fBpointer\fR 4
  .IX Item "pointer"
! Enable generation of run\-time checks for pointers and allocatables.
! .IP \fBrecursion\fR 4
  .IX Item "recursion"
! Enable generation of run\-time checks for recursively called subroutines and
  functions which are not marked as recursive. See also \fB\-frecursive\fR.
  Note: This check does not work for OpenMP programs and is disabled if used
  together with \fB\-frecursive\fR and \fB\-fopenmp\fR.
*************** Example: Assuming you have a file \fIfoo
*** 1547,1562 ****
  will compile the file with all checks enabled as specified above except
  warnings for generated array temporaries.
  .RE
! .IP "\fB\-fbounds\-check\fR" 4
  .IX Item "-fbounds-check"
  Deprecated alias for \fB\-fcheck=bounds\fR.
! .IP "\fB\-ftail\-call\-workaround\fR" 4
  .IX Item "-ftail-call-workaround"
  .PD 0
! .IP "\fB\-ftail\-call\-workaround=\fR\fIn\fR" 4
  .IX Item "-ftail-call-workaround=n"
  .PD
! Some C interfaces to Fortran codes violate the gfortran \s-1ABI\s0 by
  omitting the hidden character length arguments as described in
    This can lead to crashes
  because pushing arguments for tail calls can overflow the stack.
--- 1476,1491 ----
  will compile the file with all checks enabled as specified above except
  warnings for generated array temporaries.
  .RE
! .IP \fB\-fbounds\-check\fR 4
  .IX Item "-fbounds-check"
  Deprecated alias for \fB\-fcheck=bounds\fR.
! .IP \fB\-ftail\-call\-workaround\fR 4
  .IX Item "-ftail-call-workaround"
  .PD 0
! .IP \fB\-ftail\-call\-workaround=\fR\fIn\fR 4
  .IX Item "-ftail-call-workaround=n"
  .PD
! Some C interfaces to Fortran codes violate the gfortran ABI by
  omitting the hidden character length arguments as described in
    This can lead to crashes
  because pushing arguments for tail calls can overflow the stack.
*************** insufficient stack space.
*** 1574,1580 ****
  .Sp
  It is \fIvery strongly\fR recommended to fix the code in question.
  The \fB\-fc\-prototypes\-external\fR option can be used to generate
! prototypes which conform to gfortran's \s-1ABI,\s0 for inclusion in the
  source code.
  .Sp
  Support for this option will likely be withdrawn in a future release
--- 1503,1509 ----
  .Sp
  It is \fIvery strongly\fR recommended to fix the code in question.
  The \fB\-fc\-prototypes\-external\fR option can be used to generate
! prototypes which conform to gfortran\*(Aqs ABI, for inclusion in the
  source code.
  .Sp
  Support for this option will likely be withdrawn in a future release
*************** The negative form, \fB\-fno\-tail\-call\
*** 1585,1594 ****
  .Sp
  Default is currently \fB\-ftail\-call\-workaround\fR, this will change
  in future releases.
! .IP "\fB\-fcheck\-array\-temporaries\fR" 4
  .IX Item "-fcheck-array-temporaries"
  Deprecated alias for \fB\-fcheck=array\-temps\fR.
! .IP "\fB\-fmax\-array\-constructor=\fR\fIn\fR" 4
  .IX Item "-fmax-array-constructor=n"
  This option can be used to increase the upper limit permitted in 
  array constructors.  The code below requires this option to expand
--- 1514,1523 ----
  .Sp
  Default is currently \fB\-ftail\-call\-workaround\fR, this will change
  in future releases.
! .IP \fB\-fcheck\-array\-temporaries\fR 4
  .IX Item "-fcheck-array-temporaries"
  Deprecated alias for \fB\-fcheck=array\-temps\fR.
! .IP \fB\-fmax\-array\-constructor=\fR\fIn\fR 4
  .IX Item "-fmax-array-constructor=n"
  This option can be used to increase the upper limit permitted in 
  array constructors.  The code below requires this option to expand
*************** the array at compile time.
*** 1608,1627 ****
  large object files.\fR
  .Sp
  The default value for \fIn\fR is 65535.
! .IP "\fB\-fmax\-stack\-var\-size=\fR\fIn\fR" 4
  .IX Item "-fmax-stack-var-size=n"
  This option specifies the size in bytes of the largest array that will be put
  on the stack; if the size is exceeded static memory is used (except in
! procedures marked as \s-1RECURSIVE\s0). Use the option \fB\-frecursive\fR to
! allow for recursive procedures which do not have a \s-1RECURSIVE\s0 attribute or
  for parallel programs. Use \fB\-fno\-automatic\fR to never use the stack.
  .Sp
  This option currently only affects local arrays declared with constant
  bounds, and may not apply to all character variables.
! Future versions of \s-1GNU\s0 Fortran may improve this behavior.
  .Sp
  The default value for \fIn\fR is 65536.
! .IP "\fB\-fstack\-arrays\fR" 4
  .IX Item "-fstack-arrays"
  Adding this option will make the Fortran compiler put all arrays of
  unknown size and array temporaries onto stack memory.  If your program uses very
--- 1537,1556 ----
  large object files.\fR
  .Sp
  The default value for \fIn\fR is 65535.
! .IP \fB\-fmax\-stack\-var\-size=\fR\fIn\fR 4
  .IX Item "-fmax-stack-var-size=n"
  This option specifies the size in bytes of the largest array that will be put
  on the stack; if the size is exceeded static memory is used (except in
! procedures marked as RECURSIVE). Use the option \fB\-frecursive\fR to
! allow for recursive procedures which do not have a RECURSIVE attribute or
  for parallel programs. Use \fB\-fno\-automatic\fR to never use the stack.
  .Sp
  This option currently only affects local arrays declared with constant
  bounds, and may not apply to all character variables.
! Future versions of GNU Fortran may improve this behavior.
  .Sp
  The default value for \fIn\fR is 65536.
! .IP \fB\-fstack\-arrays\fR 4
  .IX Item "-fstack-arrays"
  Adding this option will make the Fortran compiler put all arrays of
  unknown size and array temporaries onto stack memory.  If your program uses very
*************** large local arrays it is possible that y
*** 1629,1642 ****
  limits for stack memory on some operating systems. This flag is enabled
  by default at optimization level \fB\-Ofast\fR unless
  \&\fB\-fmax\-stack\-var\-size\fR is specified.
! .IP "\fB\-fpack\-derived\fR" 4
  .IX Item "-fpack-derived"
! This option tells \s-1GNU\s0 Fortran to pack derived type members as closely as
  possible.  Code compiled with this option is likely to be incompatible
  with code compiled without this option, and may execute slower.
! .IP "\fB\-frepack\-arrays\fR" 4
  .IX Item "-frepack-arrays"
! In some circumstances \s-1GNU\s0 Fortran may pass assumed shape array
  sections via a descriptor describing a noncontiguous area of memory.
  This option adds code to the function prologue to repack the data into
  a contiguous block at runtime.
--- 1558,1571 ----
  limits for stack memory on some operating systems. This flag is enabled
  by default at optimization level \fB\-Ofast\fR unless
  \&\fB\-fmax\-stack\-var\-size\fR is specified.
! .IP \fB\-fpack\-derived\fR 4
  .IX Item "-fpack-derived"
! This option tells GNU Fortran to pack derived type members as closely as
  possible.  Code compiled with this option is likely to be incompatible
  with code compiled without this option, and may execute slower.
! .IP \fB\-frepack\-arrays\fR 4
  .IX Item "-frepack-arrays"
! In some circumstances GNU Fortran may pass assumed shape array
  sections via a descriptor describing a noncontiguous area of memory.
  This option adds code to the function prologue to repack the data into
  a contiguous block at runtime.
*************** a contiguous block at runtime.
*** 1644,1659 ****
  This should result in faster accesses to the array.  However it can introduce
  significant overhead to the function call, especially  when the passed data
  is noncontiguous.
! .IP "\fB\-fshort\-enums\fR" 4
  .IX Item "-fshort-enums"
  This option is provided for interoperability with C code that was
  compiled with the \fB\-fshort\-enums\fR option.  It will make
! \&\s-1GNU\s0 Fortran choose the smallest \f(CW\*(C`INTEGER\*(C'\fR kind a given
  enumerator set will fit in, and give all its enumerators this kind.
! .IP "\fB\-finline\-arg\-packing\fR" 4
  .IX Item "-finline-arg-packing"
! When passing an assumed-shape argument of a procedure as actual
! argument to an assumed-size or explicit size or as argument to a
  procedure that does not have an explicit interface, the argument may
  have to be packed, that is put into contiguous memory. An example is
  the call to \f(CW\*(C`foo\*(C'\fR in
--- 1573,1588 ----
  This should result in faster accesses to the array.  However it can introduce
  significant overhead to the function call, especially  when the passed data
  is noncontiguous.
! .IP \fB\-fshort\-enums\fR 4
  .IX Item "-fshort-enums"
  This option is provided for interoperability with C code that was
  compiled with the \fB\-fshort\-enums\fR option.  It will make
! GNU Fortran choose the smallest \f(CW\*(C`INTEGER\*(C'\fR kind a given
  enumerator set will fit in, and give all its enumerators this kind.
! .IP \fB\-finline\-arg\-packing\fR 4
  .IX Item "-finline-arg-packing"
! When passing an assumed\-shape argument of a procedure as actual
! argument to an assumed\-size or explicit size or as argument to a
  procedure that does not have an explicit interface, the argument may
  have to be packed, that is put into contiguous memory. An example is
  the call to \f(CW\*(C`foo\*(C'\fR in
*************** contains a very large number of argument
*** 1678,1704 ****
  size and also compilation time may become excessive.  If that is the
  case, it may be better to disable this option.  Instances of packing
  can be found by using \fB\-Warray\-temporaries\fR.
! .IP "\fB\-fexternal\-blas\fR" 4
  .IX Item "-fexternal-blas"
! This option will make \fBgfortran\fR generate calls to \s-1BLAS\s0 functions
  for some matrix operations like \f(CW\*(C`MATMUL\*(C'\fR, instead of using our own
  algorithms, if the size of the matrices involved is larger than a given
  limit (see \fB\-fblas\-matmul\-limit\fR).  This may be profitable if an
! optimized vendor \s-1BLAS\s0 library is available.  The \s-1BLAS\s0 library will have
  to be specified at link time.
! .IP "\fB\-fblas\-matmul\-limit=\fR\fIn\fR" 4
  .IX Item "-fblas-matmul-limit=n"
  Only significant when \fB\-fexternal\-blas\fR is in effect.
  Matrix multiplication of matrices with size larger than (or equal to) \fIn\fR
! will be performed by calls to \s-1BLAS\s0 functions, while others will be
  handled by \fBgfortran\fR internal algorithms. If the matrices
  involved are not square, the size comparison is performed using the
  geometric mean of the dimensions of the argument and result matrices.
  .Sp
  The default value for \fIn\fR is 30.
! .IP "\fB\-finline\-matmul\-limit=\fR\fIn\fR" 4
  .IX Item "-finline-matmul-limit=n"
! When front-end optimization is active, some calls to the \f(CW\*(C`MATMUL\*(C'\fR
  intrinsic function will be inlined.  This may result in code size
  increase if the size of the matrix cannot be determined at compile
  time, as code for both cases is generated.  Setting
--- 1607,1633 ----
  size and also compilation time may become excessive.  If that is the
  case, it may be better to disable this option.  Instances of packing
  can be found by using \fB\-Warray\-temporaries\fR.
! .IP \fB\-fexternal\-blas\fR 4
  .IX Item "-fexternal-blas"
! This option will make \fBgfortran\fR generate calls to BLAS functions
  for some matrix operations like \f(CW\*(C`MATMUL\*(C'\fR, instead of using our own
  algorithms, if the size of the matrices involved is larger than a given
  limit (see \fB\-fblas\-matmul\-limit\fR).  This may be profitable if an
! optimized vendor BLAS library is available.  The BLAS library will have
  to be specified at link time.
! .IP \fB\-fblas\-matmul\-limit=\fR\fIn\fR 4
  .IX Item "-fblas-matmul-limit=n"
  Only significant when \fB\-fexternal\-blas\fR is in effect.
  Matrix multiplication of matrices with size larger than (or equal to) \fIn\fR
! will be performed by calls to BLAS functions, while others will be
  handled by \fBgfortran\fR internal algorithms. If the matrices
  involved are not square, the size comparison is performed using the
  geometric mean of the dimensions of the argument and result matrices.
  .Sp
  The default value for \fIn\fR is 30.
! .IP \fB\-finline\-matmul\-limit=\fR\fIn\fR 4
  .IX Item "-finline-matmul-limit=n"
! When front\-end optimization is active, some calls to the \f(CW\*(C`MATMUL\*(C'\fR
  intrinsic function will be inlined.  This may result in code size
  increase if the size of the matrix cannot be determined at compile
  time, as code for both cases is generated.  Setting
*************** the dimensions of the argument and resul
*** 1710,1744 ****
  .Sp
  The default value for \fIn\fR is 30.  The \f(CW\*(C`\-fblas\-matmul\-limit\*(C'\fR
  can be used to change this value.
! .IP "\fB\-frecursive\fR" 4
  .IX Item "-frecursive"
  Allow indirect recursion by forcing all local arrays to be allocated
  on the stack. This flag cannot be used together with
  \&\fB\-fmax\-stack\-var\-size=\fR or \fB\-fno\-automatic\fR.
! .IP "\fB\-finit\-local\-zero\fR" 4
  .IX Item "-finit-local-zero"
  .PD 0
! .IP "\fB\-finit\-derived\fR" 4
  .IX Item "-finit-derived"
! .IP "\fB\-finit\-integer=\fR\fIn\fR" 4
  .IX Item "-finit-integer=n"
! .IP "\fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR" 4
  .IX Item "-finit-real=<zero|inf|-inf|nan|snan>"
! .IP "\fB\-finit\-logical=\fR\fI<true|false>\fR" 4
  .IX Item "-finit-logical=<true|false>"
! .IP "\fB\-finit\-character=\fR\fIn\fR" 4
  .IX Item "-finit-character=n"
  .PD
  The \fB\-finit\-local\-zero\fR option instructs the compiler to
  initialize local \f(CW\*(C`INTEGER\*(C'\fR, \f(CW\*(C`REAL\*(C'\fR, and \f(CW\*(C`COMPLEX\*(C'\fR
  variables to zero, \f(CW\*(C`LOGICAL\*(C'\fR variables to false, and
! \&\f(CW\*(C`CHARACTER\*(C'\fR variables to a string of null bytes.  Finer-grained
  initialization options are provided by the
  \&\fB\-finit\-integer=\fR\fIn\fR,
  \&\fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR (which also initializes
  the real and imaginary parts of local \f(CW\*(C`COMPLEX\*(C'\fR variables),
  \&\fB\-finit\-logical=\fR\fI<true|false>\fR, and
! \&\fB\-finit\-character=\fR\fIn\fR (where \fIn\fR is an \s-1ASCII\s0 character
  value) options.
  .Sp
  With \fB\-finit\-derived\fR, components of derived type variables will be
--- 1639,1673 ----
  .Sp
  The default value for \fIn\fR is 30.  The \f(CW\*(C`\-fblas\-matmul\-limit\*(C'\fR
  can be used to change this value.
! .IP \fB\-frecursive\fR 4
  .IX Item "-frecursive"
  Allow indirect recursion by forcing all local arrays to be allocated
  on the stack. This flag cannot be used together with
  \&\fB\-fmax\-stack\-var\-size=\fR or \fB\-fno\-automatic\fR.
! .IP \fB\-finit\-local\-zero\fR 4
  .IX Item "-finit-local-zero"
  .PD 0
! .IP \fB\-finit\-derived\fR 4
  .IX Item "-finit-derived"
! .IP \fB\-finit\-integer=\fR\fIn\fR 4
  .IX Item "-finit-integer=n"
! .IP \fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR 4
  .IX Item "-finit-real=<zero|inf|-inf|nan|snan>"
! .IP \fB\-finit\-logical=\fR\fI<true|false>\fR 4
  .IX Item "-finit-logical=<true|false>"
! .IP \fB\-finit\-character=\fR\fIn\fR 4
  .IX Item "-finit-character=n"
  .PD
  The \fB\-finit\-local\-zero\fR option instructs the compiler to
  initialize local \f(CW\*(C`INTEGER\*(C'\fR, \f(CW\*(C`REAL\*(C'\fR, and \f(CW\*(C`COMPLEX\*(C'\fR
  variables to zero, \f(CW\*(C`LOGICAL\*(C'\fR variables to false, and
! \&\f(CW\*(C`CHARACTER\*(C'\fR variables to a string of null bytes.  Finer\-grained
  initialization options are provided by the
  \&\fB\-finit\-integer=\fR\fIn\fR,
  \&\fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR (which also initializes
  the real and imaginary parts of local \f(CW\*(C`COMPLEX\*(C'\fR variables),
  \&\fB\-finit\-logical=\fR\fI<true|false>\fR, and
! \&\fB\-finit\-character=\fR\fIn\fR (where \fIn\fR is an ASCII character
  value) options.
  .Sp
  With \fB\-finit\-derived\fR, components of derived type variables will be
*************** an explicit \fB\-finit\-*\fR flag will b
*** 1748,1758 ****
  .Sp
  These options do not initialize
  .RS 4
! .IP "*" 4
! objects with the \s-1POINTER\s0 attribute
! .IP "*" 4
  allocatable arrays
! .IP "*" 4
  variables that appear in an \f(CW\*(C`EQUIVALENCE\*(C'\fR statement.
  .RE
  .RS 4
--- 1677,1687 ----
  .Sp
  These options do not initialize
  .RS 4
! .IP * 4
! objects with the POINTER attribute
! .IP * 4
  allocatable arrays
! .IP * 4
  variables that appear in an \f(CW\*(C`EQUIVALENCE\*(C'\fR statement.
  .RE
  .RS 4
*************** variables that appear in an \f(CW\*(C`EQ
*** 1761,1772 ****
  .Sp
  Note that the \fB\-finit\-real=nan\fR option initializes \f(CW\*(C`REAL\*(C'\fR
  and \f(CW\*(C`COMPLEX\*(C'\fR variables with a quiet NaN. For a signalling NaN
! use \fB\-finit\-real=snan\fR; note, however, that compile-time
  optimizations may convert them into quiet NaN and that trapping
  needs to be enabled (e.g. via \fB\-ffpe\-trap\fR).
  .Sp
  The \fB\-finit\-integer\fR option will parse the value into an
! integer of type \f(CW\*(C`INTEGER(kind=C_LONG)\*(C'\fR on the host.  Said value
  is then assigned to the integer variables in the Fortran code, which
  might result in wraparound if the value is too large for the kind.
  .Sp
--- 1690,1701 ----
  .Sp
  Note that the \fB\-finit\-real=nan\fR option initializes \f(CW\*(C`REAL\*(C'\fR
  and \f(CW\*(C`COMPLEX\*(C'\fR variables with a quiet NaN. For a signalling NaN
! use \fB\-finit\-real=snan\fR; note, however, that compile\-time
  optimizations may convert them into quiet NaN and that trapping
  needs to be enabled (e.g. via \fB\-ffpe\-trap\fR).
  .Sp
  The \fB\-finit\-integer\fR option will parse the value into an
! integer of type \f(CWINTEGER(kind=C_LONG)\fR on the host.  Said value
  is then assigned to the integer variables in the Fortran code, which
  might result in wraparound if the value is too large for the kind.
  .Sp
*************** Finally, note that enabling any of the \
*** 1774,1780 ****
  silence warnings that would have been emitted by \fB\-Wuninitialized\fR
  for the affected local variables.
  .RE
! .IP "\fB\-falign\-commons\fR" 4
  .IX Item "-falign-commons"
  By default, \fBgfortran\fR enforces proper alignment of all variables in a
  \&\f(CW\*(C`COMMON\*(C'\fR block by padding them as needed. On certain platforms this is mandatory,
--- 1703,1709 ----
  silence warnings that would have been emitted by \fB\-Wuninitialized\fR
  for the affected local variables.
  .RE
! .IP \fB\-falign\-commons\fR 4
  .IX Item "-falign-commons"
  By default, \fBgfortran\fR enforces proper alignment of all variables in a
  \&\f(CW\*(C`COMMON\*(C'\fR block by padding them as needed. On certain platforms this is mandatory,
*************** consistent data types everywhere, this p
*** 1784,1805 ****
  same form of this option should be used for all files that share a \f(CW\*(C`COMMON\*(C'\fR block.
  To avoid potential alignment issues in \f(CW\*(C`COMMON\*(C'\fR blocks, it is recommended to order
  objects from largest to smallest.
! .IP "\fB\-fno\-protect\-parens\fR" 4
  .IX Item "-fno-protect-parens"
  By default the parentheses in expression are honored for all optimization
! levels such that the compiler does not do any re-association. Using
  \&\fB\-fno\-protect\-parens\fR allows the compiler to reorder \f(CW\*(C`REAL\*(C'\fR and
! \&\f(CW\*(C`COMPLEX\*(C'\fR expressions to produce faster code. Note that for the re-association
  optimization \fB\-fno\-signed\-zeros\fR and \fB\-fno\-trapping\-math\fR
  need to be in effect. The parentheses protection is enabled by default, unless
  \&\fB\-Ofast\fR is given.
! .IP "\fB\-frealloc\-lhs\fR" 4
  .IX Item "-frealloc-lhs"
! An allocatable left-hand side of an intrinsic assignment is automatically
  (re)allocated if it is either unallocated or has a different shape. The
  option is enabled by default except when \fB\-std=f95\fR is given. See
  also \fB\-Wrealloc\-lhs\fR.
! .IP "\fB\-faggressive\-function\-elimination\fR" 4
  .IX Item "-faggressive-function-elimination"
  Functions with identical argument lists are eliminated within
  statements, regardless of whether these functions are marked
--- 1713,1734 ----
  same form of this option should be used for all files that share a \f(CW\*(C`COMMON\*(C'\fR block.
  To avoid potential alignment issues in \f(CW\*(C`COMMON\*(C'\fR blocks, it is recommended to order
  objects from largest to smallest.
! .IP \fB\-fno\-protect\-parens\fR 4
  .IX Item "-fno-protect-parens"
  By default the parentheses in expression are honored for all optimization
! levels such that the compiler does not do any re\-association. Using
  \&\fB\-fno\-protect\-parens\fR allows the compiler to reorder \f(CW\*(C`REAL\*(C'\fR and
! \&\f(CW\*(C`COMPLEX\*(C'\fR expressions to produce faster code. Note that for the re\-association
  optimization \fB\-fno\-signed\-zeros\fR and \fB\-fno\-trapping\-math\fR
  need to be in effect. The parentheses protection is enabled by default, unless
  \&\fB\-Ofast\fR is given.
! .IP \fB\-frealloc\-lhs\fR 4
  .IX Item "-frealloc-lhs"
! An allocatable left\-hand side of an intrinsic assignment is automatically
  (re)allocated if it is either unallocated or has a different shape. The
  option is enabled by default except when \fB\-std=f95\fR is given. See
  also \fB\-Wrealloc\-lhs\fR.
! .IP \fB\-faggressive\-function\-elimination\fR 4
  .IX Item "-faggressive-function-elimination"
  Functions with identical argument lists are eliminated within
  statements, regardless of whether these functions are marked
*************** statements, regardless of whether these
*** 1811,1819 ****
  .Sp
  there will only be a single call to \f(CW\*(C`f\*(C'\fR.  This option only works
  if \fB\-ffrontend\-optimize\fR is in effect.
! .IP "\fB\-ffrontend\-optimize\fR" 4
  .IX Item "-ffrontend-optimize"
! This option performs front-end optimization, based on manipulating
  parts the Fortran parse tree.  Enabled by default by any \fB\-O\fR option
  except \fB\-O0\fR and \fB\-Og\fR.  Optimizations enabled by this option
  include:
--- 1740,1748 ----
  .Sp
  there will only be a single call to \f(CW\*(C`f\*(C'\fR.  This option only works
  if \fB\-ffrontend\-optimize\fR is in effect.
! .IP \fB\-ffrontend\-optimize\fR 4
  .IX Item "-ffrontend-optimize"
! This option performs front\-end optimization, based on manipulating
  parts the Fortran parse tree.  Enabled by default by any \fB\-O\fR option
  except \fB\-O0\fR and \fB\-Og\fR.  Optimizations enabled by this option
  include:
*************** include:
*** 1833,1887 ****
  .ie n .IP "*<short\-circuiting of logical operators ("".AND."" and "".OR."").>" 4
  .el .IP "*<short\-circuiting of logical operators (\f(CW.AND.\fR and \f(CW.OR.\fR).>" 4
  .IX Item "*<short-circuiting of logical operators (.AND. and .OR.).>"
  .RE
  .RS 4
- .PD
  .Sp
  It can be deselected by specifying \fB\-fno\-frontend\-optimize\fR.
  .RE
! .IP "\fB\-ffrontend\-loop\-interchange\fR" 4
  .IX Item "-ffrontend-loop-interchange"
  Attempt to interchange loops in the Fortran front end where
  profitable.  Enabled by default by any \fB\-O\fR option.
  At the moment, this option only affects \f(CW\*(C`FORALL\*(C'\fR and
  \&\f(CW\*(C`DO CONCURRENT\*(C'\fR statements with several forall triplets.
! .SH "ENVIRONMENT"
  .IX Header "ENVIRONMENT"
  The \fBgfortran\fR compiler currently does not make use of any environment
  variables to control its operation above and beyond those
  that affect the operation of \fBgcc\fR.
! .SH "BUGS"
  .IX Header "BUGS"
  For instructions on reporting bugs, see
  <\fBhttps://gcc.gnu.org/bugs/\fR>.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIdbx\fR\|(1)
  and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIgfortran\fR, \fIas\fR,
  \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
! .SH "AUTHOR"
  .IX Header "AUTHOR"
! See the Info entry for \fBgfortran\fR for contributors to \s-1GCC\s0 and
! \&\s-1GNU\s0 Fortran.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2004\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"Funding Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 1762,1816 ----
  .ie n .IP "*<short\-circuiting of logical operators ("".AND."" and "".OR."").>" 4
  .el .IP "*<short\-circuiting of logical operators (\f(CW.AND.\fR and \f(CW.OR.\fR).>" 4
  .IX Item "*<short-circuiting of logical operators (.AND. and .OR.).>"
+ .PD
  .RE
  .RS 4
  .Sp
  It can be deselected by specifying \fB\-fno\-frontend\-optimize\fR.
  .RE
! .IP \fB\-ffrontend\-loop\-interchange\fR 4
  .IX Item "-ffrontend-loop-interchange"
  Attempt to interchange loops in the Fortran front end where
  profitable.  Enabled by default by any \fB\-O\fR option.
  At the moment, this option only affects \f(CW\*(C`FORALL\*(C'\fR and
  \&\f(CW\*(C`DO CONCURRENT\*(C'\fR statements with several forall triplets.
! .SH ENVIRONMENT
  .IX Header "ENVIRONMENT"
  The \fBgfortran\fR compiler currently does not make use of any environment
  variables to control its operation above and beyond those
  that affect the operation of \fBgcc\fR.
! .SH BUGS
  .IX Header "BUGS"
  For instructions on reporting bugs, see
  <\fBhttps://gcc.gnu.org/bugs/\fR>.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7),
! \&\fBcpp\fR\|(1), \fBgcov\fR\|(1), \fBgcc\fR\|(1), \fBas\fR\|(1), \fBld\fR\|(1), \fBgdb\fR\|(1), \fBdbx\fR\|(1)
  and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIgfortran\fR, \fIas\fR,
  \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
! .SH AUTHOR
  .IX Header "AUTHOR"
! See the Info entry for \fBgfortran\fR for contributors to GCC and
! GNU Fortran.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2004\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/gm2.1 gcc-14.3.0-RC-20260619/gcc/doc/gm2.1
*** gcc-14.3.0/gcc/doc/gm2.1	Fri May 23 11:10:07 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gm2.1	Fri Jun 19 06:58:11 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,170 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GM2 1"
! .TH GM2 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gm2 \- The GNU Modula\-2 Compiler
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! .SH "OPTIONS"
  .IX Header "OPTIONS"
  For any given input file, the file name suffix determines what kind of
  compilation is done.  The following kinds of input file names are supported:
! .IP "\fIfile\fR\fB.mod\fR" 4
  .IX Item "file.mod"
  Modula\-2 implementation or program source files.  See the
  \&\fB\-fmod=\fR option if you wish to compile a project which uses a
  different source file extension.
! .IP "\fIfile\fR\fB.def\fR" 4
  .IX Item "file.def"
  Modula\-2 definition module source files.  Definition modules are not
! compiled separately, in \s-1GNU\s0 Modula\-2 definition modules are parsed as
  required when program or implementation modules are compiled.  See the
  \&\fB\-fdef=\fR option if you wish to compile a project which uses a
  different source file extension.
  .PP
  You can specify more than one input file on the \fBgm2\fR command line,
  .ie n .IP """\-g""" 4
! .el .IP "\f(CW\-g\fR" 4
  .IX Item "-g"
  create debugging information so that debuggers such as \fIgdb\fR
  can inspect and control executable.
  .ie n .IP """\-I""" 4
! .el .IP "\f(CW\-I\fR" 4
  .IX Item "-I"
  used to specify the search path for definition and implementation
  modules.  An example is:  \f(CW\*(C`gm2 \-g \-c \-I.:../../libs foo.mod\*(C'\fR.
--- 38,99 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GM2 1"
! .TH GM2 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gm2 \- The GNU Modula\-2 Compiler
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! .SH OPTIONS
  .IX Header "OPTIONS"
  For any given input file, the file name suffix determines what kind of
  compilation is done.  The following kinds of input file names are supported:
! .IP \fIfile\fR\fB.mod\fR 4
  .IX Item "file.mod"
  Modula\-2 implementation or program source files.  See the
  \&\fB\-fmod=\fR option if you wish to compile a project which uses a
  different source file extension.
! .IP \fIfile\fR\fB.def\fR 4
  .IX Item "file.def"
  Modula\-2 definition module source files.  Definition modules are not
! compiled separately, in GNU Modula\-2 definition modules are parsed as
  required when program or implementation modules are compiled.  See the
  \&\fB\-fdef=\fR option if you wish to compile a project which uses a
  different source file extension.
  .PP
  You can specify more than one input file on the \fBgm2\fR command line,
  .ie n .IP """\-g""" 4
! .el .IP \f(CW\-g\fR 4
  .IX Item "-g"
  create debugging information so that debuggers such as \fIgdb\fR
  can inspect and control executable.
  .ie n .IP """\-I""" 4
! .el .IP \f(CW\-I\fR 4
  .IX Item "-I"
  used to specify the search path for definition and implementation
  modules.  An example is:  \f(CW\*(C`gm2 \-g \-c \-I.:../../libs foo.mod\*(C'\fR.
*************** If this option is not specified then the
*** 172,194 ****
  which consists of the current directory followed by the appropriate
  language dialect library directories.
  .ie n .IP """\-fauto\-init""" 4
! .el .IP "\f(CW\-fauto\-init\fR" 4
  .IX Item "-fauto-init"
! turns on auto initialization of pointers to \s-1NIL.\s0  Whenever a block is
  created all pointers declared within this scope will have their
! addresses assigned to \s-1NIL.\s0
  .ie n .IP """\-fbounds""" 4
! .el .IP "\f(CW\-fbounds\fR" 4
  .IX Item "-fbounds"
  turns on run time subrange, array index and indirection via \f(CW\*(C`NIL\*(C'\fR
  pointer checking.
  .ie n .IP """\-fcase""" 4
! .el .IP "\f(CW\-fcase\fR" 4
  .IX Item "-fcase"
  turns on compile time checking to check whether a \f(CW\*(C`CASE\*(C'\fR
  statement requires an \f(CW\*(C`ELSE\*(C'\fR clause when on was not specified.
  .ie n .IP """\-fcpp""" 4
! .el .IP "\f(CW\-fcpp\fR" 4
  .IX Item "-fcpp"
  preprocess the source with \fBcpp \-lang\-asm \-traditional\-cpp\fR
  For further details about these options 
--- 101,123 ----
  which consists of the current directory followed by the appropriate
  language dialect library directories.
  .ie n .IP """\-fauto\-init""" 4
! .el .IP \f(CW\-fauto\-init\fR 4
  .IX Item "-fauto-init"
! turns on auto initialization of pointers to NIL.  Whenever a block is
  created all pointers declared within this scope will have their
! addresses assigned to NIL.
  .ie n .IP """\-fbounds""" 4
! .el .IP \f(CW\-fbounds\fR 4
  .IX Item "-fbounds"
  turns on run time subrange, array index and indirection via \f(CW\*(C`NIL\*(C'\fR
  pointer checking.
  .ie n .IP """\-fcase""" 4
! .el .IP \f(CW\-fcase\fR 4
  .IX Item "-fcase"
  turns on compile time checking to check whether a \f(CW\*(C`CASE\*(C'\fR
  statement requires an \f(CW\*(C`ELSE\*(C'\fR clause when on was not specified.
  .ie n .IP """\-fcpp""" 4
! .el .IP \f(CW\-fcpp\fR 4
  .IX Item "-fcpp"
  preprocess the source with \fBcpp \-lang\-asm \-traditional\-cpp\fR
  For further details about these options 
*************** If \fB\-fcpp\fR is supplied then all def
*** 196,261 ****
  implementation modules which are parsed will be prepossessed by
  \&\fBcpp\fR.
  .ie n .IP """\-fdebug\-builtins""" 4
! .el .IP "\f(CW\-fdebug\-builtins\fR" 4
  .IX Item "-fdebug-builtins"
  call a real function, rather than the builtin equivalent.  This can
  be useful for debugging parameter values to a builtin function as
  it allows users to single step code into an intrinsic function.
  .ie n .IP """\-fdef=""" 4
! .el .IP "\f(CW\-fdef=\fR" 4
  .IX Item "-fdef="
  recognize the specified suffix as a definition module filename.
  The default implementation and module filename suffix is \fI.def\fR.
! If this option is used \s-1GNU\s0 Modula\-2 will still fall back to this
  default if a requested definition module is not found.
  .ie n .IP """\-fdump\-system\-exports""" 4
! .el .IP "\f(CW\-fdump\-system\-exports\fR" 4
  .IX Item "-fdump-system-exports"
  display all inbuilt system items.
  This is an internal command line option.
  .ie n .IP """\-fexceptions""" 4
! .el .IP "\f(CW\-fexceptions\fR" 4
  .IX Item "-fexceptions"
  turn on exception handling code.  By default this option is on.
  Exception handling can be disabled by \fB\-fno\-exceptions\fR
  and no references are made to the run time exception libraries.
  .ie n .IP """\-fextended\-opaque""" 4
! .el .IP "\f(CW\-fextended\-opaque\fR" 4
  .IX Item "-fextended-opaque"
! allows opaque types to be implemented as any type.  This is a \s-1GNU\s0
  Modula\-2 extension and it requires that the implementation module
  defining the opaque type is available so that it can be resolved when
  compiling the module which imports the opaque type.
  .ie n .IP """\-ffloatvalue""" 4
! .el .IP "\f(CW\-ffloatvalue\fR" 4
  .IX Item "-ffloatvalue"
  turns on run time checking to check whether a floating point number is
  about to exceed range.
! .ie n .IP """\-fgen\-module\-list=\fIfilename\fP""" 4
! .el .IP "\f(CW\-fgen\-module\-list=\f(CIfilename\f(CW\fR" 4
  .IX Item "-fgen-module-list=filename"
  attempt to find all modules when linking and generate a module list.
  If the \fIfilename\fR is \fB\-\fR then the contents are not written
  and only used to force the linking of all module ctors.
  This option cannot be used if \fB\-fuse\-list=\fR is enabled.
  .ie n .IP """\-findex""" 4
! .el .IP "\f(CW\-findex\fR" 4
  .IX Item "-findex"
  generate code to check whether array index values are out of bounds.
  Array index checking can be disabled via \fB\-fno\-index\fR.
  .ie n .IP """\-fiso""" 4
! .el .IP "\f(CW\-fiso\fR" 4
  .IX Item "-fiso"
! turn on \s-1ISO\s0 standard features.  Currently this enables the \s-1ISO\s0
  \&\f(CW\*(C`SYSTEM\*(C'\fR module and alters the default library search path so
! that the \s-1ISO\s0 libraries are searched before the \s-1PIM\s0 libraries.  It also
  effects the behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-flibs=""" 4
! .el .IP "\f(CW\-flibs=\fR" 4
  .IX Item "-flibs="
  modifies the default library search path.  The libraries supplied are:
  m2pim, m2iso, m2min, m2log and m2cor.  These map onto the
! Programming in Modula\-2 base libraries, \s-1ISO\s0 standard libraries, minimal
  library support, Logitech compatible library and Programming in
  Modula\-2 with coroutines.
  Multiple libraries can be specified and are comma separated with precedence
--- 125,190 ----
  implementation modules which are parsed will be prepossessed by
  \&\fBcpp\fR.
  .ie n .IP """\-fdebug\-builtins""" 4
! .el .IP \f(CW\-fdebug\-builtins\fR 4
  .IX Item "-fdebug-builtins"
  call a real function, rather than the builtin equivalent.  This can
  be useful for debugging parameter values to a builtin function as
  it allows users to single step code into an intrinsic function.
  .ie n .IP """\-fdef=""" 4
! .el .IP \f(CW\-fdef=\fR 4
  .IX Item "-fdef="
  recognize the specified suffix as a definition module filename.
  The default implementation and module filename suffix is \fI.def\fR.
! If this option is used GNU Modula\-2 will still fall back to this
  default if a requested definition module is not found.
  .ie n .IP """\-fdump\-system\-exports""" 4
! .el .IP \f(CW\-fdump\-system\-exports\fR 4
  .IX Item "-fdump-system-exports"
  display all inbuilt system items.
  This is an internal command line option.
  .ie n .IP """\-fexceptions""" 4
! .el .IP \f(CW\-fexceptions\fR 4
  .IX Item "-fexceptions"
  turn on exception handling code.  By default this option is on.
  Exception handling can be disabled by \fB\-fno\-exceptions\fR
  and no references are made to the run time exception libraries.
  .ie n .IP """\-fextended\-opaque""" 4
! .el .IP \f(CW\-fextended\-opaque\fR 4
  .IX Item "-fextended-opaque"
! allows opaque types to be implemented as any type.  This is a GNU
  Modula\-2 extension and it requires that the implementation module
  defining the opaque type is available so that it can be resolved when
  compiling the module which imports the opaque type.
  .ie n .IP """\-ffloatvalue""" 4
! .el .IP \f(CW\-ffloatvalue\fR 4
  .IX Item "-ffloatvalue"
  turns on run time checking to check whether a floating point number is
  about to exceed range.
! .ie n .IP """\-fgen\-module\-list=\fIfilename\fR""" 4
! .el .IP \f(CW\-fgen\-module\-list=\fR\f(CIfilename\fR\f(CW\fR 4
  .IX Item "-fgen-module-list=filename"
  attempt to find all modules when linking and generate a module list.
  If the \fIfilename\fR is \fB\-\fR then the contents are not written
  and only used to force the linking of all module ctors.
  This option cannot be used if \fB\-fuse\-list=\fR is enabled.
  .ie n .IP """\-findex""" 4
! .el .IP \f(CW\-findex\fR 4
  .IX Item "-findex"
  generate code to check whether array index values are out of bounds.
  Array index checking can be disabled via \fB\-fno\-index\fR.
  .ie n .IP """\-fiso""" 4
! .el .IP \f(CW\-fiso\fR 4
  .IX Item "-fiso"
! turn on ISO standard features.  Currently this enables the ISO
  \&\f(CW\*(C`SYSTEM\*(C'\fR module and alters the default library search path so
! that the ISO libraries are searched before the PIM libraries.  It also
  effects the behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-flibs=""" 4
! .el .IP \f(CW\-flibs=\fR 4
  .IX Item "-flibs="
  modifies the default library search path.  The libraries supplied are:
  m2pim, m2iso, m2min, m2log and m2cor.  These map onto the
! Programming in Modula\-2 base libraries, ISO standard libraries, minimal
  library support, Logitech compatible library and Programming in
  Modula\-2 with coroutines.
  Multiple libraries can be specified and are comma separated with precedence
*************** the they provide the base modules which
*** 266,277 ****
  The option \fB\-fno\-libs=\-\fR disables the \fBgm2\fR driver from
  modifying the search and library paths.
  .ie n .IP """\-static\-libgm2""" 4
! .el .IP "\f(CW\-static\-libgm2\fR" 4
  .IX Item "-static-libgm2"
  On systems that provide the m2 runtimes as both shared and static libraries,
  this option forces the use of the static version.
  .ie n .IP """\-fm2\-g""" 4
! .el .IP "\f(CW\-fm2\-g\fR" 4
  .IX Item "-fm2-g"
  improve the debugging experience for new programmers at the expense
  of generating \f(CW\*(C`nop\*(C'\fR instructions if necessary to ensure single
--- 195,206 ----
  The option \fB\-fno\-libs=\-\fR disables the \fBgm2\fR driver from
  modifying the search and library paths.
  .ie n .IP """\-static\-libgm2""" 4
! .el .IP \f(CW\-static\-libgm2\fR 4
  .IX Item "-static-libgm2"
  On systems that provide the m2 runtimes as both shared and static libraries,
  this option forces the use of the static version.
  .ie n .IP """\-fm2\-g""" 4
! .el .IP \f(CW\-fm2\-g\fR 4
  .IX Item "-fm2-g"
  improve the debugging experience for new programmers at the expense
  of generating \f(CW\*(C`nop\*(C'\fR instructions if necessary to ensure single
*************** of this is in termination of a list of n
*** 280,319 ****
  where multiple \f(CW\*(C`END\*(C'\fR keywords are mapped onto a sequence of
  \&\f(CW\*(C`nop\*(C'\fR instructions.
  .ie n .IP """\-fm2\-lower\-case""" 4
! .el .IP "\f(CW\-fm2\-lower\-case\fR" 4
  .IX Item "-fm2-lower-case"
  render keywords in error messages using lower case.
  .ie n .IP """\-fm2\-pathname=""" 4
! .el .IP "\f(CW\-fm2\-pathname=\fR" 4
  .IX Item "-fm2-pathname="
  specify the module mangled prefix name for all modules in the
  following include paths.
  .ie n .IP """\-fm2\-pathnameI""" 4
! .el .IP "\f(CW\-fm2\-pathnameI\fR" 4
  .IX Item "-fm2-pathnameI"
  for internal use only: used by the driver to copy the user facing \-I
  option.
  .ie n .IP """\-fm2\-plugin""" 4
! .el .IP "\f(CW\-fm2\-plugin\fR" 4
  .IX Item "-fm2-plugin"
  insert plugin to identify run time errors at compile time (default on).
  .ie n .IP """\-fm2\-prefix=""" 4
! .el .IP "\f(CW\-fm2\-prefix=\fR" 4
  .IX Item "-fm2-prefix="
  specify the module mangled prefix name.  All exported symbols from a
  definition module will have the prefix name.
  .ie n .IP """\-fm2\-statistics""" 4
! .el .IP "\f(CW\-fm2\-statistics\fR" 4
  .IX Item "-fm2-statistics"
  generates quadruple information: number of quadruples generated,
  number of quadruples remaining after optimization and number of source
  lines compiled.
  .ie n .IP """\-fm2\-strict\-type""" 4
! .el .IP "\f(CW\-fm2\-strict\-type\fR" 4
  .IX Item "-fm2-strict-type"
  experimental flag to turn on the new strict type checker.
  .ie n .IP """\-fm2\-whole\-program""" 4
! .el .IP "\f(CW\-fm2\-whole\-program\fR" 4
  .IX Item "-fm2-whole-program"
  compile all implementation modules and program module at once.  Notice
  that you need to take care if you are compiling different dialect
--- 209,248 ----
  where multiple \f(CW\*(C`END\*(C'\fR keywords are mapped onto a sequence of
  \&\f(CW\*(C`nop\*(C'\fR instructions.
  .ie n .IP """\-fm2\-lower\-case""" 4
! .el .IP \f(CW\-fm2\-lower\-case\fR 4
  .IX Item "-fm2-lower-case"
  render keywords in error messages using lower case.
  .ie n .IP """\-fm2\-pathname=""" 4
! .el .IP \f(CW\-fm2\-pathname=\fR 4
  .IX Item "-fm2-pathname="
  specify the module mangled prefix name for all modules in the
  following include paths.
  .ie n .IP """\-fm2\-pathnameI""" 4
! .el .IP \f(CW\-fm2\-pathnameI\fR 4
  .IX Item "-fm2-pathnameI"
  for internal use only: used by the driver to copy the user facing \-I
  option.
  .ie n .IP """\-fm2\-plugin""" 4
! .el .IP \f(CW\-fm2\-plugin\fR 4
  .IX Item "-fm2-plugin"
  insert plugin to identify run time errors at compile time (default on).
  .ie n .IP """\-fm2\-prefix=""" 4
! .el .IP \f(CW\-fm2\-prefix=\fR 4
  .IX Item "-fm2-prefix="
  specify the module mangled prefix name.  All exported symbols from a
  definition module will have the prefix name.
  .ie n .IP """\-fm2\-statistics""" 4
! .el .IP \f(CW\-fm2\-statistics\fR 4
  .IX Item "-fm2-statistics"
  generates quadruple information: number of quadruples generated,
  number of quadruples remaining after optimization and number of source
  lines compiled.
  .ie n .IP """\-fm2\-strict\-type""" 4
! .el .IP \f(CW\-fm2\-strict\-type\fR 4
  .IX Item "-fm2-strict-type"
  experimental flag to turn on the new strict type checker.
  .ie n .IP """\-fm2\-whole\-program""" 4
! .el .IP \f(CW\-fm2\-whole\-program\fR 4
  .IX Item "-fm2-whole-program"
  compile all implementation modules and program module at once.  Notice
  that you need to take care if you are compiling different dialect
*************** modules (particularly with the negative
*** 321,390 ****
  this option, when coupled together with \f(CW\*(C`\-O3\*(C'\fR, can deliver huge
  performance improvements.
  .ie n .IP """\-fmod=""" 4
! .el .IP "\f(CW\-fmod=\fR" 4
  .IX Item "-fmod="
  recognize the specified suffix as implementation and module filenames.
  The default implementation and module filename suffix is \fI.mod\fR.
! If this option is used \s-1GNU\s0 Modula\-2 will still fall back to this
  default if it needs to read an implementation module and the specified
  suffixed filename does not exist.
  .ie n .IP """\-fnil""" 4
! .el .IP "\f(CW\-fnil\fR" 4
  .IX Item "-fnil"
  generate code to detect accessing data through a \f(CW\*(C`NIL\*(C'\fR value
  pointer.  Dereferencing checking through a \f(CW\*(C`NIL\*(C'\fR pointer can be
  disabled by \fB\-fno\-nil\fR.
  .ie n .IP """\-fpim""" 4
! .el .IP "\f(CW\-fpim\fR" 4
  .IX Item "-fpim"
! turn on \s-1PIM\s0 standard features.  Currently this enables the \s-1PIM\s0
  \&\f(CW\*(C`SYSTEM\*(C'\fR module and determines which identifiers are pervasive
  (declared in the base module).  If no other \fB\-fpim[234]\fR switch is
! used then division and modulus operators behave as defined in \s-1PIM4.\s0
  .ie n .IP """\-fpim2""" 4
! .el .IP "\f(CW\-fpim2\fR" 4
  .IX Item "-fpim2"
! turn on \s-1PIM\-2\s0 standard features.  Currently this removes \f(CW\*(C`SIZE\*(C'\fR
  from being a pervasive identifier (declared in the base module).  It
  places \f(CW\*(C`SIZE\*(C'\fR in the \f(CW\*(C`SYSTEM\*(C'\fR module.  It also effects the
  behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-fpim3""" 4
! .el .IP "\f(CW\-fpim3\fR" 4
  .IX Item "-fpim3"
! turn on \s-1PIM\-3\s0 standard features.  Currently this only effects the
  behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-fpim4""" 4
! .el .IP "\f(CW\-fpim4\fR" 4
  .IX Item "-fpim4"
! turn on \s-1PIM\-4\s0 standard features.  Currently this only effects the
  behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-fpositive\-mod\-floor\-div""" 4
! .el .IP "\f(CW\-fpositive\-mod\-floor\-div\fR" 4
  .IX Item "-fpositive-mod-floor-div"
! forces the \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators to behave as defined by \s-1PIM4.\s0
  All modulus results are positive and the results from the division are
  rounded to the floor.
  .ie n .IP """\-fpthread""" 4
! .el .IP "\f(CW\-fpthread\fR" 4
  .IX Item "-fpthread"
  link against the pthread library.  By default this option is on.  It
! can be disabled by \fB\-fno\-pthread\fR.  \s-1GNU\s0 Modula\-2 uses the \s-1GCC\s0
! pthread libraries to implement coroutines (see the \s-1SYSTEM\s0
  implementation module).
  .ie n .IP """\-frange""" 4
! .el .IP "\f(CW\-frange\fR" 4
  .IX Item "-frange"
  generate code to check the assignment range, return value range
  set range and constructor range.  Range checking can be disabled
  via \fB\-fno\-range\fR.
  .ie n .IP """\-freturn""" 4
! .el .IP "\f(CW\-freturn\fR" 4
  .IX Item "-freturn"
  generate code to check that functions always exit with a \f(CW\*(C`RETURN\*(C'\fR
  and do not fall out at the end.  Return checking can be disabled
  via \fB\-fno\-return\fR.
  .ie n .IP """\-fruntime\-modules=""" 4
! .el .IP "\f(CW\-fruntime\-modules=\fR" 4
  .IX Item "-fruntime-modules="
  specify, using a comma separated list, the run time modules and their
  order.  These modules will initialized first before any other modules
--- 250,319 ----
  this option, when coupled together with \f(CW\*(C`\-O3\*(C'\fR, can deliver huge
  performance improvements.
  .ie n .IP """\-fmod=""" 4
! .el .IP \f(CW\-fmod=\fR 4
  .IX Item "-fmod="
  recognize the specified suffix as implementation and module filenames.
  The default implementation and module filename suffix is \fI.mod\fR.
! If this option is used GNU Modula\-2 will still fall back to this
  default if it needs to read an implementation module and the specified
  suffixed filename does not exist.
  .ie n .IP """\-fnil""" 4
! .el .IP \f(CW\-fnil\fR 4
  .IX Item "-fnil"
  generate code to detect accessing data through a \f(CW\*(C`NIL\*(C'\fR value
  pointer.  Dereferencing checking through a \f(CW\*(C`NIL\*(C'\fR pointer can be
  disabled by \fB\-fno\-nil\fR.
  .ie n .IP """\-fpim""" 4
! .el .IP \f(CW\-fpim\fR 4
  .IX Item "-fpim"
! turn on PIM standard features.  Currently this enables the PIM
  \&\f(CW\*(C`SYSTEM\*(C'\fR module and determines which identifiers are pervasive
  (declared in the base module).  If no other \fB\-fpim[234]\fR switch is
! used then division and modulus operators behave as defined in PIM4.
  .ie n .IP """\-fpim2""" 4
! .el .IP \f(CW\-fpim2\fR 4
  .IX Item "-fpim2"
! turn on PIM\-2 standard features.  Currently this removes \f(CW\*(C`SIZE\*(C'\fR
  from being a pervasive identifier (declared in the base module).  It
  places \f(CW\*(C`SIZE\*(C'\fR in the \f(CW\*(C`SYSTEM\*(C'\fR module.  It also effects the
  behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-fpim3""" 4
! .el .IP \f(CW\-fpim3\fR 4
  .IX Item "-fpim3"
! turn on PIM\-3 standard features.  Currently this only effects the
  behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-fpim4""" 4
! .el .IP \f(CW\-fpim4\fR 4
  .IX Item "-fpim4"
! turn on PIM\-4 standard features.  Currently this only effects the
  behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
  .ie n .IP """\-fpositive\-mod\-floor\-div""" 4
! .el .IP \f(CW\-fpositive\-mod\-floor\-div\fR 4
  .IX Item "-fpositive-mod-floor-div"
! forces the \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators to behave as defined by PIM4.
  All modulus results are positive and the results from the division are
  rounded to the floor.
  .ie n .IP """\-fpthread""" 4
! .el .IP \f(CW\-fpthread\fR 4
  .IX Item "-fpthread"
  link against the pthread library.  By default this option is on.  It
! can be disabled by \fB\-fno\-pthread\fR.  GNU Modula\-2 uses the GCC
! pthread libraries to implement coroutines (see the SYSTEM
  implementation module).
  .ie n .IP """\-frange""" 4
! .el .IP \f(CW\-frange\fR 4
  .IX Item "-frange"
  generate code to check the assignment range, return value range
  set range and constructor range.  Range checking can be disabled
  via \fB\-fno\-range\fR.
  .ie n .IP """\-freturn""" 4
! .el .IP \f(CW\-freturn\fR 4
  .IX Item "-freturn"
  generate code to check that functions always exit with a \f(CW\*(C`RETURN\*(C'\fR
  and do not fall out at the end.  Return checking can be disabled
  via \fB\-fno\-return\fR.
  .ie n .IP """\-fruntime\-modules=""" 4
! .el .IP \f(CW\-fruntime\-modules=\fR 4
  .IX Item "-fruntime-modules="
  specify, using a comma separated list, the run time modules and their
  order.  These modules will initialized first before any other modules
*************** Adding a long list of dependent modules
*** 396,422 ****
  the executable it merely states the initialization order should they
  be required.
  .ie n .IP """\-fscaffold\-dynamic""" 4
! .el .IP "\f(CW\-fscaffold\-dynamic\fR" 4
  .IX Item "-fscaffold-dynamic"
  the option ensures that \fBgm2\fR will generate a dynamic scaffold
  infrastructure when compiling implementation and program modules.
  By default this option is on.  Use \fB\-fno\-scaffold\-dynamic\fR
  to turn it off or select \fB\-fno\-scaffold\-static\fR.
  .ie n .IP """\-fscaffold\-c""" 4
! .el .IP "\f(CW\-fscaffold\-c\fR" 4
  .IX Item "-fscaffold-c"
  generate a C source scaffold for the current module being compiled.
  .ie n .IP """\-fscaffold\-c++""" 4
! .el .IP "\f(CW\-fscaffold\-c++\fR" 4
  .IX Item "-fscaffold-c++"
! generate a \*(C+ source scaffold for the current module being compiled.
  .ie n .IP """\-fscaffold\-main""" 4
! .el .IP "\f(CW\-fscaffold\-main\fR" 4
  .IX Item "-fscaffold-main"
  force the generation of the \fBmain\fR function.  This is not
  necessary if the \fB\-c\fR is omitted.
  .ie n .IP """\-fscaffold\-static""" 4
! .el .IP "\f(CW\-fscaffold\-static\fR" 4
  .IX Item "-fscaffold-static"
  the option ensures that \fBgm2\fR will generate a static scaffold
  within the program module.  The static scaffold consists of sequences
--- 325,351 ----
  the executable it merely states the initialization order should they
  be required.
  .ie n .IP """\-fscaffold\-dynamic""" 4
! .el .IP \f(CW\-fscaffold\-dynamic\fR 4
  .IX Item "-fscaffold-dynamic"
  the option ensures that \fBgm2\fR will generate a dynamic scaffold
  infrastructure when compiling implementation and program modules.
  By default this option is on.  Use \fB\-fno\-scaffold\-dynamic\fR
  to turn it off or select \fB\-fno\-scaffold\-static\fR.
  .ie n .IP """\-fscaffold\-c""" 4
! .el .IP \f(CW\-fscaffold\-c\fR 4
  .IX Item "-fscaffold-c"
  generate a C source scaffold for the current module being compiled.
  .ie n .IP """\-fscaffold\-c++""" 4
! .el .IP \f(CW\-fscaffold\-c++\fR 4
  .IX Item "-fscaffold-c++"
! generate a C++ source scaffold for the current module being compiled.
  .ie n .IP """\-fscaffold\-main""" 4
! .el .IP \f(CW\-fscaffold\-main\fR 4
  .IX Item "-fscaffold-main"
  force the generation of the \fBmain\fR function.  This is not
  necessary if the \fB\-c\fR is omitted.
  .ie n .IP """\-fscaffold\-static""" 4
! .el .IP \f(CW\-fscaffold\-static\fR 4
  .IX Item "-fscaffold-static"
  the option ensures that \fBgm2\fR will generate a static scaffold
  within the program module.  The static scaffold consists of sequences
*************** of calls to all dependent module initial
*** 424,456 ****
  procedures.  The static scaffold is useful for debugging and single
  stepping the initialization blocks of implementation modules.
  .ie n .IP """\-fshared""" 4
! .el .IP "\f(CW\-fshared\fR" 4
  .IX Item "-fshared"
  generate a shared library from the module.
  .ie n .IP """\-fsoft\-check\-all""" 4
! .el .IP "\f(CW\-fsoft\-check\-all\fR" 4
  .IX Item "-fsoft-check-all"
  turns on all run time checks.  This is the same as invoking
! \&\s-1GNU\s0 Modula\-2 using the command options
  \&\f(CW\*(C`\-fnil\*(C'\fR \f(CW\*(C`\-frange\*(C'\fR \f(CW\*(C`\-findex\*(C'\fR
  \&\f(CW\*(C`\-fwholevalue\*(C'\fR
  \&\f(CW\*(C`\-fwholediv\*(C'\fR \f(CW\*(C`\-fcase\*(C'\fR \f(CW\*(C`\-freturn\*(C'\fR.
  .ie n .IP """\-fsources""" 4
! .el .IP "\f(CW\-fsources\fR" 4
  .IX Item "-fsources"
  displays the path to the source of each module.  This option
  can be used at compile time to check the correct definition module
  is being used.
  .ie n .IP """\-fswig""" 4
! .el .IP "\f(CW\-fswig\fR" 4
  .IX Item "-fswig"
  generate a swig interface file.
  .ie n .IP """\-funbounded\-by\-reference""" 4
! .el .IP "\f(CW\-funbounded\-by\-reference\fR" 4
  .IX Item "-funbounded-by-reference"
  enable optimization of unbounded parameters by attempting to pass non
  \&\f(CW\*(C`VAR\*(C'\fR unbounded parameters by reference.  This optimization
! avoids the implicit copy inside the callee procedure.  \s-1GNU\s0 Modula\-2
  will only allow unbounded parameters to be passed by reference if,
  inside the callee procedure, they are not written to, no address is
  calculated on the array and it is not passed as a \f(CW\*(C`VAR\*(C'\fR
--- 353,385 ----
  procedures.  The static scaffold is useful for debugging and single
  stepping the initialization blocks of implementation modules.
  .ie n .IP """\-fshared""" 4
! .el .IP \f(CW\-fshared\fR 4
  .IX Item "-fshared"
  generate a shared library from the module.
  .ie n .IP """\-fsoft\-check\-all""" 4
! .el .IP \f(CW\-fsoft\-check\-all\fR 4
  .IX Item "-fsoft-check-all"
  turns on all run time checks.  This is the same as invoking
! GNU Modula\-2 using the command options
  \&\f(CW\*(C`\-fnil\*(C'\fR \f(CW\*(C`\-frange\*(C'\fR \f(CW\*(C`\-findex\*(C'\fR
  \&\f(CW\*(C`\-fwholevalue\*(C'\fR
  \&\f(CW\*(C`\-fwholediv\*(C'\fR \f(CW\*(C`\-fcase\*(C'\fR \f(CW\*(C`\-freturn\*(C'\fR.
  .ie n .IP """\-fsources""" 4
! .el .IP \f(CW\-fsources\fR 4
  .IX Item "-fsources"
  displays the path to the source of each module.  This option
  can be used at compile time to check the correct definition module
  is being used.
  .ie n .IP """\-fswig""" 4
! .el .IP \f(CW\-fswig\fR 4
  .IX Item "-fswig"
  generate a swig interface file.
  .ie n .IP """\-funbounded\-by\-reference""" 4
! .el .IP \f(CW\-funbounded\-by\-reference\fR 4
  .IX Item "-funbounded-by-reference"
  enable optimization of unbounded parameters by attempting to pass non
  \&\f(CW\*(C`VAR\*(C'\fR unbounded parameters by reference.  This optimization
! avoids the implicit copy inside the callee procedure.  GNU Modula\-2
  will only allow unbounded parameters to be passed by reference if,
  inside the callee procedure, they are not written to, no address is
  calculated on the array and it is not passed as a \f(CW\*(C`VAR\*(C'\fR
*************** the procedure and write to the location
*** 462,469 ****
  .Sp
  Due to the dangerous nature of this option it is not enabled
  when the \fB\-O\fR option is specified.
! .ie n .IP """\-fuse\-list=\fIfilename\fP""" 4
! .el .IP "\f(CW\-fuse\-list=\f(CIfilename\f(CW\fR" 4
  .IX Item "-fuse-list=filename"
  if \fB\-fscaffold\-static\fR is enabled then use the file
  \&\fIfilename\fR for the initialization order of modules.  Whereas if
--- 391,398 ----
  .Sp
  Due to the dangerous nature of this option it is not enabled
  when the \fB\-O\fR option is specified.
! .ie n .IP """\-fuse\-list=\fIfilename\fR""" 4
! .el .IP \f(CW\-fuse\-list=\fR\f(CIfilename\fR\f(CW\fR 4
  .IX Item "-fuse-list=filename"
  if \fB\-fscaffold\-static\fR is enabled then use the file
  \&\fIfilename\fR for the initialization order of modules.  Whereas if
*************** if \fB\-fscaffold\-static\fR is enabled
*** 471,486 ****
  linking of all module ctors.
  This option cannot be used if \fB\-fgen\-module\-list=\fR is enabled.
  .ie n .IP """\-fwholediv""" 4
! .el .IP "\f(CW\-fwholediv\fR" 4
  .IX Item "-fwholediv"
  generate code to detect whole number division by zero or modulus by
  zero.
  .ie n .IP """\-fwholevalue""" 4
! .el .IP "\f(CW\-fwholevalue\fR" 4
  .IX Item "-fwholevalue"
  generate code to detect whole number overflow and underflow.
  .ie n .IP """\-Wcase\-enum""" 4
! .el .IP "\f(CW\-Wcase\-enum\fR" 4
  .IX Item "-Wcase-enum"
  generate a warning if a \f(CW\*(C`CASE\*(C'\fR statement selects on an enumerated
  type expression and the statement is missing one or more \f(CW\*(C`CASE\*(C'\fR
--- 400,415 ----
  linking of all module ctors.
  This option cannot be used if \fB\-fgen\-module\-list=\fR is enabled.
  .ie n .IP """\-fwholediv""" 4
! .el .IP \f(CW\-fwholediv\fR 4
  .IX Item "-fwholediv"
  generate code to detect whole number division by zero or modulus by
  zero.
  .ie n .IP """\-fwholevalue""" 4
! .el .IP \f(CW\-fwholevalue\fR 4
  .IX Item "-fwholevalue"
  generate code to detect whole number overflow and underflow.
  .ie n .IP """\-Wcase\-enum""" 4
! .el .IP \f(CW\-Wcase\-enum\fR 4
  .IX Item "-Wcase-enum"
  generate a warning if a \f(CW\*(C`CASE\*(C'\fR statement selects on an enumerated
  type expression and the statement is missing one or more \f(CW\*(C`CASE\*(C'\fR
*************** labels.  No warning is issued if the \f(
*** 488,500 ****
  \&\f(CW\*(C`ELSE\*(C'\fR clause.
  The option \fB\-Wall\fR will turn on this flag.
  .ie n .IP """\-Wuninit\-variable\-checking""" 4
! .el .IP "\f(CW\-Wuninit\-variable\-checking\fR" 4
  .IX Item "-Wuninit-variable-checking"
  issue a warning if a variable is used before it is initialized.
  The checking only occurs in the first basic block in each procedure.
  It does not check parameters, array types or set types.
  .ie n .IP """\-Wuninit\-variable\-checking=all,known,cond""" 4
! .el .IP "\f(CW\-Wuninit\-variable\-checking=all,known,cond\fR" 4
  .IX Item "-Wuninit-variable-checking=all,known,cond"
  issue a warning if a variable is used before it is initialized.
  The checking will only occur in the first basic block in each
--- 417,429 ----
  \&\f(CW\*(C`ELSE\*(C'\fR clause.
  The option \fB\-Wall\fR will turn on this flag.
  .ie n .IP """\-Wuninit\-variable\-checking""" 4
! .el .IP \f(CW\-Wuninit\-variable\-checking\fR 4
  .IX Item "-Wuninit-variable-checking"
  issue a warning if a variable is used before it is initialized.
  The checking only occurs in the first basic block in each procedure.
  It does not check parameters, array types or set types.
  .ie n .IP """\-Wuninit\-variable\-checking=all,known,cond""" 4
! .el .IP \f(CW\-Wuninit\-variable\-checking=all,known,cond\fR 4
  .IX Item "-Wuninit-variable-checking=all,known,cond"
  issue a warning if a variable is used before it is initialized.
  The checking will only occur in the first basic block in each
*************** The option \fB\-Wall\fR will turn on thi
*** 507,521 ****
  The \fB\-Wuninit\-variable\-checking=all\fR will increase compile time.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1)
  and the Info entries for \fIgm2\fR and \fIgcc\fR.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 1999\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 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
! man page \fIgfdl\fR\|(7).
--- 436,450 ----
  The \fB\-Wuninit\-variable\-checking=all\fR will increase compile time.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1)
  and the Info entries for \fIgm2\fR and \fIgcc\fR.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 1999\-2024 Free Software Foundation, Inc.
  .PP
  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
! man page \fBgfdl\fR\|(7).
diff -Nrcpad gcc-14.3.0/gcc/doc/gnat-style.info gcc-14.3.0-RC-20260619/gcc/doc/gnat-style.info
*** gcc-14.3.0/gcc/doc/gnat-style.info	Fri May 23 11:28:08 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gnat-style.info	Fri Jun 19 07:14:54 2026
***************
*** 1,4 ****
! This is gnat-style.info, produced by makeinfo version 6.5 from
  gnat-style.texi.
  
       GNAT Coding Style: A Guide for GNAT Developers , Dec 21, 2023
--- 1,4 ----
! This is gnat-style.info, produced by makeinfo version 7.1 from
  gnat-style.texi.
  
       GNAT Coding Style: A Guide for GNAT Developers , Dec 21, 2023
*************** File: gnat-style.info,  Node: Comments,
*** 170,176 ****
       comments after the declaration, there is no blank line before the
       comment, and if it is absolutely necessary to have blank lines
       within the comments, e.g.  to make paragraph separations within a
!      single comment, these blank lines ‘do’ have a ‘--’ (unlike the
       normal rule, which is to use entirely blank lines for separating
       comment paragraphs).  The comment starts at same level of
       indentation as code it is commenting.
--- 170,176 ----
       comments after the declaration, there is no blank line before the
       comment, and if it is absolutely necessary to have blank lines
       within the comments, e.g.  to make paragraph separations within a
!      single comment, these blank lines 'do' have a ‘--’ (unlike the
       normal rule, which is to use entirely blank lines for separating
       comment paragraphs).  The comment starts at same level of
       indentation as code it is commenting.
*************** File: gnat-style.info,  Node: Comments,
*** 204,214 ****
            My_Identifier := 5;      --  First comment
            Other_Id := 6;           --  Second comment
  
!    * Short comments that fit on a single line are ‘not’ ended with a
       period.  Comments taking more than a line are punctuated in the
       normal manner.
  
!    * Comments should focus on ‘why’ instead of ‘what’.  Descriptions of
       what subprograms do go with the specification.
  
     * Comments describing a subprogram spec should specifically mention
--- 204,214 ----
            My_Identifier := 5;      --  First comment
            Other_Id := 6;           --  Second comment
  
!    * Short comments that fit on a single line are 'not' ended with a
       period.  Comments taking more than a line are punctuated in the
       normal manner.
  
!    * Comments should focus on 'why' instead of 'what'.  Descriptions of
       what subprograms do go with the specification.
  
     * Comments describing a subprogram spec should specifically mention
*************** File: gnat-style.info,  Node: Comments,
*** 216,222 ****
       not depend on the names of things.  The names are supplementary,
       not sufficient, as comments.
  
!    * ‘Do not’ put two spaces after periods in comments.
  
  
  File: gnat-style.info,  Node: Declarations and Types,  Next: Expressions and Names,  Prev: Lexical Elements,  Up: Top
--- 216,222 ----
       not depend on the names of things.  The names are supplementary,
       not sufficient, as comments.
  
!    * 'Do not' put two spaces after periods in comments.
  
  
  File: gnat-style.info,  Node: Declarations and Types,  Next: Expressions and Names,  Prev: Lexical Elements,  Up: Top
*************** Copyright 2000, 2001, 2002, 2007, 2008 F
*** 704,710 ****
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
  
! ‘Preamble’
  
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document “free” in the sense of freedom: to assure
--- 704,710 ----
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
  
! 'Preamble'
  
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document “free” in the sense of freedom: to assure
*************** used for any textual work, regardless of
*** 727,748 ****
  published as a printed book.  We recommend this License principally for
  works whose purpose is instruction or reference.
  
! ‘1.  APPLICABILITY AND DEFINITIONS’
  
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
  world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The ‘Document’, below, refers
  to any such manual or work.  Any member of the public is a licensee, and
! is addressed as “‘you’”.  You accept the license if you copy, modify or
  distribute the work in a way requiring permission under copyright law.
  
! A “‘Modified Version’” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “‘Secondary Section’” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
  publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
--- 727,748 ----
  published as a printed book.  We recommend this License principally for
  works whose purpose is instruction or reference.
  
! '1.  APPLICABILITY AND DEFINITIONS'
  
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
  world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The 'Document', below, refers
  to any such manual or work.  Any member of the public is a licensee, and
! is addressed as “'you'”.  You accept the license if you copy, modify or
  distribute the work in a way requiring permission under copyright law.
  
! A “'Modified Version'” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “'Secondary Section'” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
  publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
*************** mathematics.)  The relationship could be
*** 752,758 ****
  connection with the subject or with related matters, or of legal,
  commercial, philosophical, ethical or political position regarding them.
  
! The “‘Invariant Sections’” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice that
  says that the Document is released under this License.  If a section
  does not fit the above definition of Secondary then it is not allowed to
--- 752,758 ----
  connection with the subject or with related matters, or of legal,
  commercial, philosophical, ethical or political position regarding them.
  
! The “'Invariant Sections'” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice that
  says that the Document is released under this License.  If a section
  does not fit the above definition of Secondary then it is not allowed to
*************** be designated as Invariant.  The Documen
*** 760,771 ****
  Sections.  If the Document does not identify any Invariant Sections then
  there are none.
  
! The “‘Cover Texts’” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may be
  at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “‘Transparent’” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the general
  public, that is suitable for revising the document straightforwardly
  with generic text editors or (for images composed of pixels) generic
--- 760,771 ----
  Sections.  If the Document does not identify any Invariant Sections then
  there are none.
  
! The “'Cover Texts'” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may be
  at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “'Transparent'” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the general
  public, that is suitable for revising the document straightforwardly
  with generic text editors or (for images composed of pixels) generic
*************** formatters.  A copy made in an otherwise
*** 776,782 ****
  markup, or absence of markup, has been arranged to thwart or discourage
  subsequent modification by readers is not Transparent.  An image format
  is not Transparent if used for any substantial amount of text.  A copy
! that is not “Transparent” is called ‘Opaque’.
  
  Examples of suitable formats for Transparent copies include plain ASCII
  without markup, Texinfo input format, LaTeX input format, SGML or XML
--- 776,782 ----
  markup, or absence of markup, has been arranged to thwart or discourage
  subsequent modification by readers is not Transparent.  An image format
  is not Transparent if used for any substantial amount of text.  A copy
! that is not “Transparent” is called 'Opaque'.
  
  Examples of suitable formats for Transparent copies include plain ASCII
  without markup, Texinfo input format, LaTeX input format, SGML or XML
*************** processing tools are not generally avail
*** 789,810 ****
  HTML, PostScript or PDF produced by some word processors for output
  purposes only.
  
! The “‘Title Page’” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in formats
  which do not have any title page as such, “Title Page” means the text
  near the most prominent appearance of the work’s title, preceding the
  beginning of the body of the text.
  
! The “‘publisher’” means any person or entity that distributes copies of
  the Document to the public.
  
! A section “‘Entitled XYZ’” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “‘Acknowledgements’”,
! “‘Dedications’”, “‘Endorsements’”, or “‘History’”.)  To “‘Preserve the
! Title’” of such a section when you modify the Document means that it
  remains a section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
--- 789,810 ----
  HTML, PostScript or PDF produced by some word processors for output
  purposes only.
  
! The “'Title Page'” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in formats
  which do not have any title page as such, “Title Page” means the text
  near the most prominent appearance of the work’s title, preceding the
  beginning of the body of the text.
  
! The “'publisher'” means any person or entity that distributes copies of
  the Document to the public.
  
! A section “'Entitled XYZ'” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “'Acknowledgements'”,
! “'Dedications'”, “'Endorsements'”, or “'History'”.)  To “'Preserve the
! Title'” of such a section when you modify the Document means that it
  remains a section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
*************** but only as regards disclaiming warranti
*** 814,820 ****
  these Warranty Disclaimers may have is void and has no effect on the
  meaning of this License.
  
! ‘2.  VERBATIM COPYING’
  
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
--- 814,820 ----
  these Warranty Disclaimers may have is void and has no effect on the
  meaning of this License.
  
! '2.  VERBATIM COPYING'
  
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
*************** number of copies you must also follow th
*** 829,835 ****
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
  
! ‘3.  COPYING IN QUANTITY’
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
--- 829,835 ----
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
  
! '3.  COPYING IN QUANTITY'
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
*************** It is requested, but not required, that
*** 866,872 ****
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
  
! ‘4.  MODIFICATIONS’
  
  You may copy and distribute a Modified Version of the Document under the
  conditions of sections 2 and 3 above, provided that you release the
--- 866,872 ----
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
  
! '4.  MODIFICATIONS'
  
  You may copy and distribute a Modified Version of the Document under the
  conditions of sections 2 and 3 above, provided that you release the
*************** The author(s) and publisher(s) of the Do
*** 964,970 ****
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  
! ‘5.  COMBINING DOCUMENTS’
  
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
--- 964,970 ----
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  
! '5.  COMBINING DOCUMENTS'
  
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
*************** likewise combine any sections Entitled �
*** 988,994 ****
  sections Entitled “Dedications”.  You must delete all sections Entitled
  “Endorsements”.
  
! ‘6.  COLLECTIONS OF DOCUMENTS’
  
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
--- 988,994 ----
  sections Entitled “Dedications”.  You must delete all sections Entitled
  “Endorsements”.
  
! '6.  COLLECTIONS OF DOCUMENTS'
  
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
*************** it individually under this License, prov
*** 1001,1007 ****
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
  
! ‘7.  AGGREGATION WITH INDEPENDENT WORKS’
  
  A compilation of the Document or its derivatives with other separate and
  independent documents or works, in or on a volume of a storage or
--- 1001,1007 ----
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
  
! '7.  AGGREGATION WITH INDEPENDENT WORKS'
  
  A compilation of the Document or its derivatives with other separate and
  independent documents or works, in or on a volume of a storage or
*************** that bracket the Document within the agg
*** 1019,1025 ****
  equivalent of covers if the Document is in electronic form.  Otherwise
  they must appear on printed covers that bracket the whole aggregate.
  
! ‘8.  TRANSLATION’
  
  Translation is considered a kind of modification, so you may distribute
  translations of the Document under the terms of section 4.  Replacing
--- 1019,1025 ----
  equivalent of covers if the Document is in electronic form.  Otherwise
  they must appear on printed covers that bracket the whole aggregate.
  
! '8.  TRANSLATION'
  
  Translation is considered a kind of modification, so you may distribute
  translations of the Document under the terms of section 4.  Replacing
*************** If a section in the Document is Entitled
*** 1038,1044 ****
  “Dedications”, or “History”, the requirement (section 4) to Preserve its
  Title (section 1) will typically require changing the actual title.
  
! ‘9.  TERMINATION’
  
  You may not copy, modify, sublicense, or distribute the Document except
  as expressly provided under this License.  Any attempt otherwise to
--- 1038,1044 ----
  “Dedications”, or “History”, the requirement (section 4) to Preserve its
  Title (section 1) will typically require changing the actual title.
  
! '9.  TERMINATION'
  
  You may not copy, modify, sublicense, or distribute the Document except
  as expressly provided under this License.  Any attempt otherwise to
*************** this License.  If your rights have been
*** 1065,1071 ****
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
  
! ‘10.  FUTURE REVISIONS OF THIS LICENSE’
  
  The Free Software Foundation may publish new, revised versions of the
  GNU Free Documentation License from time to time.  Such new versions
--- 1065,1071 ----
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
  
! '10.  FUTURE REVISIONS OF THIS LICENSE'
  
  The Free Software Foundation may publish new, revised versions of the
  GNU Free Documentation License from time to time.  Such new versions
*************** that a proxy can decide which future ver
*** 1085,1091 ****
  used, that proxy’s public statement of acceptance of a version
  permanently authorizes you to choose that version for the Document.
  
! ‘11.  RELICENSING’
  
  “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
  Wide Web server that publishes copyrightable works and also provides
--- 1085,1091 ----
  used, that proxy’s public statement of acceptance of a version
  permanently authorizes you to choose that version for the Document.
  
! '11.  RELICENSING'
  
  “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
  Wide Web server that publishes copyrightable works and also provides
*************** The operator of an MMC Site may republis
*** 1113,1119 ****
  under CC-BY-SA on the same site at any time before August 1, 2009,
  provided the MMC is eligible for relicensing.
  
! ‘ADDENDUM: How to use this License for your documents’
  
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and license
--- 1113,1119 ----
  under CC-BY-SA on the same site at any time before August 1, 2009,
  provided the MMC is eligible for relicensing.
  
! 'ADDENDUM: How to use this License for your documents'
  
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and license
*************** Ref: 74480
*** 1231,1283 ****
  Node: Comments4698
  Ref: gnat-style comments4786
  Ref: 84786
! Node: Declarations and Types7318
! Ref: gnat-style declarations-and-types7439
! Ref: 97439
! Node: Expressions and Names8918
! Ref: gnat-style expressions-and-names9033
! Ref: a9033
! Node: Statements9561
! Ref: gnat-style statements9665
! Ref: b9665
! Node: Simple and Compound Statements9816
! Ref: gnat-style simple-and-compound-statements9919
! Ref: c9919
! Node: If Statements10169
! Ref: gnat-style if-statements10296
! Ref: d10296
! Node: Case Statements12771
! Ref: gnat-style case-statements12883
! Ref: e12883
! Node: Loop Statements13244
! Ref: gnat-style loop-statements13359
! Ref: f13359
! Node: Block Statements14056
! Ref: gnat-style block-statements14147
! Ref: 1014147
! Node: Subprograms14487
! Ref: gnat-style subprograms14599
! Ref: 1114599
! Node: Subprogram Declarations14688
! Ref: gnat-style subprogram-declarations14789
! Ref: 1214789
! Node: Subprogram Bodies16449
! Ref: gnat-style subprogram-bodies16550
! Ref: 1316550
! Node: Packages and Visibility Rules20286
! Ref: gnat-style packages-and-visibility-rules20428
! Ref: 1420428
! Node: Program Structure and Compilation Issues21451
! Ref: gnat-style program-structure-and-compilation-issues21587
! Ref: 1521587
! Node: GNU Free Documentation License22300
! Ref: share/gnu_free_documentation_license doc22411
! Ref: 1622411
! Ref: share/gnu_free_documentation_license gnu-fdl22411
! Ref: 1722411
! Ref: share/gnu_free_documentation_license gnu-free-documentation-license22411
! Ref: 1822411
! Node: Index45871
  
  End Tag Table
  
--- 1231,1283 ----
  Node: Comments4698
  Ref: gnat-style comments4786
  Ref: 84786
! Node: Declarations and Types7298
! Ref: gnat-style declarations-and-types7419
! Ref: 97419
! Node: Expressions and Names8898
! Ref: gnat-style expressions-and-names9013
! Ref: a9013
! Node: Statements9541
! Ref: gnat-style statements9645
! Ref: b9645
! Node: Simple and Compound Statements9796
! Ref: gnat-style simple-and-compound-statements9899
! Ref: c9899
! Node: If Statements10149
! Ref: gnat-style if-statements10276
! Ref: d10276
! Node: Case Statements12751
! Ref: gnat-style case-statements12863
! Ref: e12863
! Node: Loop Statements13224
! Ref: gnat-style loop-statements13339
! Ref: f13339
! Node: Block Statements14036
! Ref: gnat-style block-statements14127
! Ref: 1014127
! Node: Subprograms14467
! Ref: gnat-style subprograms14579
! Ref: 1114579
! Node: Subprogram Declarations14668
! Ref: gnat-style subprogram-declarations14769
! Ref: 1214769
! Node: Subprogram Bodies16429
! Ref: gnat-style subprogram-bodies16530
! Ref: 1316530
! Node: Packages and Visibility Rules20266
! Ref: gnat-style packages-and-visibility-rules20408
! Ref: 1420408
! Node: Program Structure and Compilation Issues21431
! Ref: gnat-style program-structure-and-compilation-issues21567
! Ref: 1521567
! Node: GNU Free Documentation License22280
! Ref: share/gnu_free_documentation_license doc22391
! Ref: 1622391
! Ref: share/gnu_free_documentation_license gnu-fdl22391
! Ref: 1722391
! Ref: share/gnu_free_documentation_license gnu-free-documentation-license22391
! Ref: 1822391
! Node: Index45735
  
  End Tag Table
  
diff -Nrcpad gcc-14.3.0/gcc/doc/gnat_rm.info gcc-14.3.0-RC-20260619/gcc/doc/gnat_rm.info
*** gcc-14.3.0/gcc/doc/gnat_rm.info	Fri May 23 11:28:08 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gnat_rm.info	Fri Jun 19 07:14:54 2026
***************
*** 1,4 ****
! This is gnat_rm.info, produced by makeinfo version 6.5 from
  gnat_rm.texi.
  
       GNAT Reference Manual , Apr 15, 2024
--- 1,4 ----
! This is gnat_rm.info, produced by makeinfo version 7.1 from
  gnat_rm.texi.
  
       GNAT Reference Manual , Apr 15, 2024
*************** GNAT Reference Manual
*** 27,35 ****
  
       Copyright © 2008-2024, Free Software Foundation
  
! ‘GNAT, The GNU Ada Development Environment’
  
! GCC version 14.3.0
  AdaCore
  
  Permission is granted to copy, distribute and/or modify this document
--- 27,35 ----
  
       Copyright © 2008-2024, Free Software Foundation
  
! 'GNAT, The GNU Ada Development Environment'
  
! GCC version 14.3.1
  AdaCore
  
  Permission is granted to copy, distribute and/or modify this document
*************** included in the section entitled *note G
*** 65,71 ****
  * GNU Free Documentation License::
  * Index::
  
!  — The Detailed Node Listing —
  
  About This Guide
  
--- 65,71 ----
  * GNU Free Documentation License::
  * Index::
  
!  -- The Detailed Node Listing --
  
  About This Guide
  
*************** M of the Ada language standard.
*** 941,947 ****
  GNAT implements Ada 95, Ada 2005 and Ada 2012, and it may also be
  invoked in Ada 83 compatibility mode.  By default, GNAT assumes Ada
  2012, but you can override with a compiler switch to explicitly specify
! the language version.  (Please refer to the ‘GNAT User’s Guide’ for
  details on these switches.)  Throughout this manual, references to ‘Ada’
  without a year suffix apply to all the Ada versions of the language.
  
--- 941,947 ----
  GNAT implements Ada 95, Ada 2005 and Ada 2012, and it may also be
  invoked in Ada 83 compatibility mode.  By default, GNAT assumes Ada
  2012, but you can override with a compiler switch to explicitly specify
! the language version.  (Please refer to the 'GNAT User’s Guide' for
  details on these switches.)  Throughout this manual, references to ‘Ada’
  without a year suffix apply to all the Ada versions of the language.
  
*************** in this guide:
*** 1065,1071 ****
  
     * ‘Variables’
  
!    * ‘Emphasis’
  
     * [optional information or parameters]
  
--- 1065,1071 ----
  
     * ‘Variables’
  
!    * 'Emphasis'
  
     * [optional information or parameters]
  
*************** from this standard type.
*** 1716,1722 ****
  
  Assert checks can be either checked or ignored.  By default they are
  ignored.  They will be checked if either the command line switch
! ‘-gnata’ is used, or if an ‘Assertion_Policy’ or ‘Check_Policy’ pragma
  is used to enable ‘Assert_Checks’.
  
  If assertions are ignored, then there is no run-time effect (and in
--- 1716,1722 ----
  
  Assert checks can be either checked or ignored.  By default they are
  ignored.  They will be checked if either the command line switch
! '-gnata' is used, or if an ‘Assertion_Policy’ or ‘Check_Policy’ pragma
  is used to enable ‘Assert_Checks’.
  
  If assertions are ignored, then there is no run-time effect (and in
*************** intended to be identical to the correspo
*** 1830,1838 ****
  If the policy is ‘CHECK’, then assertions are enabled, i.e.  the
  corresponding pragma or aspect is activated.  If the policy is ‘IGNORE’,
  then assertions are ignored, i.e.  the corresponding pragma or aspect is
! deactivated.  This pragma overrides the effect of the ‘-gnata’ switch on
  the command line.  If the policy is ‘SUPPRESSIBLE’, then assertions are
! enabled by default, however, if the ‘-gnatp’ switch is specified all
  assertions are ignored.
  
  The implementation defined policy ‘DISABLE’ is like ‘IGNORE’ except that
--- 1830,1838 ----
  If the policy is ‘CHECK’, then assertions are enabled, i.e.  the
  corresponding pragma or aspect is activated.  If the policy is ‘IGNORE’,
  then assertions are ignored, i.e.  the corresponding pragma or aspect is
! deactivated.  This pragma overrides the effect of the '-gnata' switch on
  the command line.  If the policy is ‘SUPPRESSIBLE’, then assertions are
! enabled by default, however, if the '-gnatp' switch is specified all
  assertions are ignored.
  
  The implementation defined policy ‘DISABLE’ is like ‘IGNORE’ except that
*************** be independently controlled.  The identi
*** 2034,2040 ****
  refers to the normal set of pragma ‘Assert’ statements.
  
  Checks introduced by this pragma are normally deactivated by default.
! They can be activated either by the command line option ‘-gnata’, which
  turns on all checks, or individually controlled using pragma
  ‘Check_Policy’.
  
--- 2034,2040 ----
  refers to the normal set of pragma ‘Assert’ statements.
  
  Checks introduced by this pragma are normally deactivated by default.
! They can be activated either by the command line option '-gnata', which
  turns on all checks, or individually controlled using pragma
  ‘Check_Policy’.
  
*************** Syntax:
*** 2054,2060 ****
       pragma Check_Float_Overflow;
  
  In Ada, the predefined floating-point types (‘Short_Float’, ‘Float’,
! ‘Long_Float’, ‘Long_Long_Float’) are defined to be ‘unconstrained’.
  This means that even though each has a well-defined base range, an
  operation that delivers a result outside this base range is not required
  to raise an exception.  This implementation permission accommodates the
--- 2054,2060 ----
       pragma Check_Float_Overflow;
  
  In Ada, the predefined floating-point types (‘Short_Float’, ‘Float’,
! ‘Long_Float’, ‘Long_Long_Float’) are defined to be 'unconstrained'.
  This means that even though each has a well-defined base range, an
  operation that delivers a result outside this base range is not required
  to raise an exception.  This implementation permission accommodates the
*************** base types of these floating-point types
*** 2086,2092 ****
  types were constrained, and overflow checks will be generated.  The
  ‘Constraint_Error’ exception is raised if the result is out of range.
  
! This mode can also be set by use of the compiler switch ‘-gnateF’.
  
  
  File: gnat_rm.info,  Node: Pragma Check_Name,  Next: Pragma Check_Policy,  Prev: Pragma Check_Float_Overflow,  Up: Implementation Defined Pragmas
--- 2086,2092 ----
  types were constrained, and overflow checks will be generated.  The
  ‘Constraint_Error’ exception is raised if the result is out of range.
  
! This mode can also be set by use of the compiler switch '-gnateF'.
  
  
  File: gnat_rm.info,  Node: Pragma Check_Name,  Next: Pragma Check_Policy,  Prev: Pragma Check_Float_Overflow,  Up: Implementation Defined Pragmas
*************** is given, then subsequent ‘Check’ pr
*** 2176,2182 ****
  
  The check policy is ‘OFF’ to turn off corresponding checks, and ‘ON’ to
  turn on corresponding checks.  The default for a set of checks for which
! no ‘Check_Policy’ is given is ‘OFF’ unless the compiler switch ‘-gnata’
  is given, which turns on all checks by default.
  
  The check policy settings ‘CHECK’ and ‘IGNORE’ are recognized as
--- 2176,2182 ----
  
  The check policy is ‘OFF’ to turn off corresponding checks, and ‘ON’ to
  turn on corresponding checks.  The default for a set of checks for which
! no ‘Check_Policy’ is given is ‘OFF’ unless the compiler switch '-gnata'
  is given, which turns on all checks by default.
  
  The check policy settings ‘CHECK’ and ‘IGNORE’ are recognized as
*************** Syntax:
*** 2268,2274 ****
                (boolean_EXPRESSION, static_string_EXPRESSION);
  
  Same as pragma Compile_Time_Error, except a warning is issued instead of
! an error message.  If switch ‘-gnatw_C’ is used, a warning is only
  issued if the value of the expression is known to be True at compile
  time, not when the value of the expression is not known at compile time.
  Note that if this pragma is used in a package that is with’ed by a
--- 2268,2274 ----
                (boolean_EXPRESSION, static_string_EXPRESSION);
  
  Same as pragma Compile_Time_Error, except a warning is issued instead of
! an error message.  If switch '-gnatw_C' is used, a warning is only
  issued if the value of the expression is known to be True at compile
  time, not when the value of the expression is not known at compile time.
  Note that if this pragma is used in a package that is with’ed by a
*************** appropriately.  Another use with a first
*** 2282,2288 ****
  client about use of a package, for example that it is not fully
  implemented.
  
! In previous versions of the compiler, combining ‘-gnatwe’ with
  Compile_Time_Warning resulted in a fatal error.  Now the compiler always
  emits a warning.  You can use *note Pragma Compile_Time_Error: 3d. to
  force the generation of an error.
--- 2282,2288 ----
  client about use of a package, for example that it is not fully
  implemented.
  
! In previous versions of the compiler, combining '-gnatwe' with
  Compile_Time_Warning resulted in a fatal error.  Now the compiler always
  emits a warning.  You can use *note Pragma Compile_Time_Error: 3d. to
  force the generation of an error.
*************** Syntax:
*** 2346,2352 ****
  Specifies the alignment of components in array or record types.  The
  meaning of the ‘Form’ argument is as follows:
  
! ‘Component_Size’
  
       Aligns scalar components and subcomponents of the array or record
       type on boundaries appropriate to their inherent size (naturally
--- 2346,2352 ----
  Specifies the alignment of components in array or record types.  The
  meaning of the ‘Form’ argument is as follows:
  
! 'Component_Size'
  
       Aligns scalar components and subcomponents of the array or record
       type on boundaries appropriate to their inherent size (naturally
*************** meaning of the ‘Form’ argument is as
*** 2356,2374 ****
       boundaries and so on.  These alignment rules correspond to the
       normal rules for C compilers on all machines except the VAX.
  
! ‘Component_Size_4’
  
       Naturally aligns components with a size of four or fewer bytes.
       Components that are larger than 4 bytes are placed on the next
       4-byte boundary.
  
! ‘Storage_Unit’
  
       Specifies that array or record components are byte aligned, i.e.,
       aligned on boundaries determined by the value of the constant
       ‘System.Storage_Unit’.
  
! ‘Default’
  
       Specifies that array or record components are aligned on default
       boundaries, appropriate to the underlying hardware or operating
--- 2356,2374 ----
       boundaries and so on.  These alignment rules correspond to the
       normal rules for C compilers on all machines except the VAX.
  
! 'Component_Size_4'
  
       Naturally aligns components with a size of four or fewer bytes.
       Components that are larger than 4 bytes are placed on the next
       4-byte boundary.
  
! 'Storage_Unit'
  
       Specifies that array or record components are byte aligned, i.e.,
       aligned on boundaries determined by the value of the constant
       ‘System.Storage_Unit’.
  
! 'Default'
  
       Specifies that array or record components are aligned on default
       boundaries, appropriate to the underlying hardware or operating
*************** argument is a name that must have been p
*** 2560,2572 ****
  ‘Import’ with ‘Convention’ = ‘CPP’.  Such name must be of one of the
  following forms:
  
!    * ‘function’ ‘Fname’ ‘return’ T‘
  
!    * ‘function’ ‘Fname’ ‘return’ T’Class
  
!    * ‘function’ ‘Fname’ (…) ‘return’ T‘
  
!    * ‘function’ ‘Fname’ (…) ‘return’ T’Class
  
  where ‘T’ is a limited record type imported from C++ with pragma
  ‘Import’ and ‘Convention’ = ‘CPP’.
--- 2560,2572 ----
  ‘Import’ with ‘Convention’ = ‘CPP’.  Such name must be of one of the
  following forms:
  
!    * 'function' ‘Fname’ 'return' T'
  
!    * 'function' ‘Fname’ 'return' T’Class
  
!    * 'function' ‘Fname’ (…) 'return' T'
  
!    * 'function' ‘Fname’ (…) 'return' T’Class
  
  where ‘T’ is a limited record type imported from C++ with pragma
  ‘Import’ and ‘Convention’ = ‘CPP’.
*************** procedure call statement corresponding t
*** 2672,2678 ****
  terminating semicolon.  Pragmas are permitted in sequences of
  declarations, so you can use pragma ‘Debug’ to intersperse calls to
  debug procedures in the middle of declarations.  Debug pragmas can be
! enabled either by use of the command line switch ‘-gnata’ or by use of
  the pragma ‘Check_Policy’ with a first argument of ‘Debug’.
  
  
--- 2672,2678 ----
  terminating semicolon.  Pragmas are permitted in sequences of
  declarations, so you can use pragma ‘Debug’ to intersperse calls to
  debug procedures in the middle of declarations.  Debug pragmas can be
! enabled either by use of the command line switch '-gnata' or by use of
  the pragma ‘Check_Policy’ with a first argument of ‘Debug’.
  
  
*************** The following example shows the use of t
*** 2756,2764 ****
          end record;
       end DSSO1;
  
! In this example record types with names starting with ‘L’ have
  ‘Low_Order_First’ scalar storage order, and record types with names
! starting with ‘H’ have ‘High_Order_First’.  Note that in the case of
  ‘H4a’, the order is not inherited from the parent type.  Only an
  explicitly set ‘Scalar_Storage_Order’ gets inherited on type derivation.
  
--- 2756,2764 ----
          end record;
       end DSSO1;
  
! In this example record types with names starting with 'L' have
  ‘Low_Order_First’ scalar storage order, and record types with names
! starting with 'H' have ‘High_Order_First’.  Note that in the case of
  ‘H4a’, the order is not inherited from the parent type.  Only an
  explicitly set ‘Scalar_Storage_Order’ gets inherited on type derivation.
  
*************** Syntax:
*** 2910,2916 ****
  This is a configuration pragma which specifies the elaboration model to
  be used during compilation.  For more information on the elaboration
  models of GNAT, consult the chapter on elaboration order handling in the
! ‘GNAT User’s Guide’.
  
  The pragma may appear in the following contexts:
  
--- 2910,2916 ----
  This is a configuration pragma which specifies the elaboration model to
  be used during compilation.  For more information on the elaboration
  models of GNAT, consult the chapter on elaboration order handling in the
! 'GNAT User’s Guide'.
  
  The pragma may appear in the following contexts:
  
*************** entities either by selection or using a
*** 3319,3325 ****
  special processing is required.
  
  However, if existing code contains references such as ‘System.XXX’ where
! ‘xxx’ is an entity in the extended definitions provided in package
  ‘System’, you may use this pragma to extend visibility in ‘System’ in a
  non-standard way that provides greater compatibility with the existing
  code.  Pragma ‘Extend_System’ is a configuration pragma whose single
--- 3319,3325 ----
  special processing is required.
  
  However, if existing code contains references such as ‘System.XXX’ where
! 'xxx' is an entity in the extended definitions provided in package
  ‘System’, you may use this pragma to extend visibility in ‘System’ in a
  non-standard way that provides greater compatibility with the existing
  code.  Pragma ‘Extend_System’ is a configuration pragma whose single
*************** You can use this pragma either to access
*** 3334,3340 ****
  supplied with the compiler, for example ‘Aux_DEC’ or you can construct
  your own extension unit following the above definition.  Note that such
  a package is a child of ‘System’ and thus is considered part of the
! implementation.  To compile it you will have to use the ‘-gnatg’ switch
  for compiling System units, as explained in the GNAT User’s Guide.
  
  
--- 3334,3340 ----
  supplied with the compiler, for example ‘Aux_DEC’ or you can construct
  your own extension unit following the above definition.  Note that such
  a package is a child of ‘System’ and thus is considered part of the
! implementation.  To compile it you will have to use the '-gnatg' switch
  for compiling System units, as explained in the GNAT User’s Guide.
  
  
*************** considered more important for floating-p
*** 3480,3486 ****
  accurate adherence to the requirements of the standard.  Currently the
  following operations are affected:
  
! ‘Complex Multiplication’
  
       The normal simple formula for complex multiplication can result in
       intermediate overflows for numbers near the end of the range.  The
--- 3480,3486 ----
  accurate adherence to the requirements of the standard.  Currently the
  following operations are affected:
  
! 'Complex Multiplication'
  
       The normal simple formula for complex multiplication can result in
       intermediate overflows for numbers near the end of the range.  The
*************** in several different ways:
*** 4061,4067 ****
  Note that pragma ‘Initialize_Scalars’ is particularly useful in
  conjunction with the enhanced validity checking that is now provided in
  GNAT, which checks for invalid values under more conditions.  Using this
! feature (see description of the ‘-gnatV’ flag in the GNAT User’s Guide)
  in conjunction with pragma ‘Initialize_Scalars’ provides a powerful new
  tool to assist in the detection of problems caused by uninitialized
  variables.
--- 4061,4067 ----
  Note that pragma ‘Initialize_Scalars’ is particularly useful in
  conjunction with the enhanced validity checking that is now provided in
  GNAT, which checks for invalid values under more conditions.  Using this
! feature (see description of the '-gnatV' flag in the GNAT User’s Guide)
  in conjunction with pragma ‘Initialize_Scalars’ provides a powerful new
  tool to assist in the detection of problems caused by uninitialized
  variables.
*************** Syntax:
*** 4111,4117 ****
  Similar to pragma ‘Inline’ except that inlining is unconditional.
  Inline_Always instructs the compiler to inline every direct call to the
  subprogram or else to emit a compilation error, independently of any
! option, in particular ‘-gnatn’ or ‘-gnatN’ or the optimization level.
  It is an error to take the address or access of ‘NAME’.  It is also an
  error to apply this pragma to a primitive operation of a tagged type.
  Thanks to such restrictions, the compiler is allowed to remove the
--- 4111,4117 ----
  Similar to pragma ‘Inline’ except that inlining is unconditional.
  Inline_Always instructs the compiler to inline every direct call to the
  subprogram or else to emit a compilation error, independently of any
! option, in particular '-gnatn' or '-gnatN' or the optimization level.
  It is an error to take the address or access of ‘NAME’.  It is also an
  error to apply this pragma to a primitive operation of a tagged type.
  Thanks to such restrictions, the compiler is allowed to remove the
*************** There are five supported optimization hi
*** 4710,4716 ****
  
  These hints do not remove the need to pass the appropriate switches to
  the compiler in order to enable the relevant optimizations, that is to
! say ‘-funroll-loops’ for unrolling and ‘-ftree-vectorize’ for
  vectorization.
  
  
--- 4710,4716 ----
  
  These hints do not remove the need to pass the appropriate switches to
  the compiler in order to enable the relevant optimizations, that is to
! say '-funroll-loops' for unrolling and '-ftree-vectorize' for
  vectorization.
  
  
*************** declarations.  This pragma is semantical
*** 4774,4780 ****
  ‘__attribute__((ATTRIBUTE_NAME))’ (if ‘info’ is not specified) or
  ‘__attribute__((ATTRIBUTE_NAME(INFO)))’ or
  ‘__attribute__((ATTRIBUTE_NAME(INFO,...)))’ in GNU C, where
! ‘attribute_name’ is recognized by the compiler middle-end or the
  ‘TARGET_ATTRIBUTE_TABLE’ machine specific macro.  Note that a string
  literal for the optional parameter ‘info’ or the following ones is
  transformed by default into an identifier, which may make this pragma
--- 4774,4780 ----
  ‘__attribute__((ATTRIBUTE_NAME))’ (if ‘info’ is not specified) or
  ‘__attribute__((ATTRIBUTE_NAME(INFO)))’ or
  ‘__attribute__((ATTRIBUTE_NAME(INFO,...)))’ in GNU C, where
! 'attribute_name' is recognized by the compiler middle-end or the
  ‘TARGET_ATTRIBUTE_TABLE’ machine specific macro.  Note that a string
  literal for the optional parameter ‘info’ or the following ones is
  transformed by default into an identifier, which may make this pragma
*************** Syntax:
*** 4954,4961 ****
  This pragma suppresses inlining for the callable entity or the instances
  of the generic subprogram designated by ‘NAME’, including inlining that
  results from the use of pragma ‘Inline’.  This pragma is always active,
! in particular it is not subject to the use of option ‘-gnatn’ or
! ‘-gnatN’.  It is illegal to specify both pragma ‘No_Inline’ and pragma
  ‘Inline_Always’ for the same ‘NAME’.
  
  
--- 4954,4961 ----
  This pragma suppresses inlining for the callable entity or the instances
  of the generic subprogram designated by ‘NAME’, including inlining that
  results from the use of pragma ‘Inline’.  This pragma is always active,
! in particular it is not subject to the use of option '-gnatn' or
! '-gnatN'.  It is illegal to specify both pragma ‘No_Inline’ and pragma
  ‘Inline_Always’ for the same ‘NAME’.
  
  
*************** The effect is to cause all scalar object
*** 5063,5090 ****
  initialized to be initialized.  The initial values are implementation
  dependent and are as follows:
  
! ‘Standard.Character’
  
       Objects whose root type is Standard.Character are initialized to
       Character’Last unless the subtype range excludes NUL (in which case
       NUL is used).  This choice will always generate an invalid value if
       one exists.
  
! ‘Standard.Wide_Character’
  
       Objects whose root type is Standard.Wide_Character are initialized
       to Wide_Character’Last unless the subtype range excludes NUL (in
       which case NUL is used).  This choice will always generate an
       invalid value if one exists.
  
! ‘Standard.Wide_Wide_Character’
  
       Objects whose root type is Standard.Wide_Wide_Character are
       initialized to the invalid value 16#FFFF_FFFF# unless the subtype
       range excludes NUL (in which case NUL is used).  This choice will
       always generate an invalid value if one exists.
  
! ‘Integer types’
  
       Objects of an integer type are treated differently depending on
       whether negative values are present in the subtype.  If no negative
--- 5063,5090 ----
  initialized to be initialized.  The initial values are implementation
  dependent and are as follows:
  
! 'Standard.Character'
  
       Objects whose root type is Standard.Character are initialized to
       Character’Last unless the subtype range excludes NUL (in which case
       NUL is used).  This choice will always generate an invalid value if
       one exists.
  
! 'Standard.Wide_Character'
  
       Objects whose root type is Standard.Wide_Character are initialized
       to Wide_Character’Last unless the subtype range excludes NUL (in
       which case NUL is used).  This choice will always generate an
       invalid value if one exists.
  
! 'Standard.Wide_Wide_Character'
  
       Objects whose root type is Standard.Wide_Wide_Character are
       initialized to the invalid value 16#FFFF_FFFF# unless the subtype
       range excludes NUL (in which case NUL is used).  This choice will
       always generate an invalid value if one exists.
  
! 'Integer types'
  
       Objects of an integer type are treated differently depending on
       whether negative values are present in the subtype.  If no negative
*************** dependent and are as follows:
*** 5099,5124 ****
       is not, in which case the largest positive value is used.  This
       choice will always generate an invalid value if one exists.
  
! ‘Floating-Point Types’
  
       Objects of all floating-point types are initialized to all 1-bits.
       For standard IEEE format, this corresponds to a NaN (not a number)
       which is indeed an invalid value.
  
! ‘Fixed-Point Types’
  
       Objects of all fixed-point types are treated as described above for
       integers, with the rules applying to the underlying integer value
       used to represent the fixed-point value.
  
! ‘Modular types’
  
       Objects of a modular type are initialized to all one bits, except
       in the special case where zero is excluded from the subtype, in
       which case all zero bits are used.  This choice will always
       generate an invalid value if one exists.
  
! ‘Enumeration types’
  
       Objects of an enumeration type are initialized to all one-bits,
       i.e., to the value ‘2 ** typ'Size - 1’ unless the subtype excludes
--- 5099,5124 ----
       is not, in which case the largest positive value is used.  This
       choice will always generate an invalid value if one exists.
  
! 'Floating-Point Types'
  
       Objects of all floating-point types are initialized to all 1-bits.
       For standard IEEE format, this corresponds to a NaN (not a number)
       which is indeed an invalid value.
  
! 'Fixed-Point Types'
  
       Objects of all fixed-point types are treated as described above for
       integers, with the rules applying to the underlying integer value
       used to represent the fixed-point value.
  
! 'Modular types'
  
       Objects of a modular type are initialized to all one bits, except
       in the special case where zero is excluded from the subtype, in
       which case all zero bits are used.  This choice will always
       generate an invalid value if one exists.
  
! 'Enumeration types'
  
       Objects of an enumeration type are initialized to all one-bits,
       i.e., to the value ‘2 ** typ'Size - 1’ unless the subtype excludes
*************** possible colors, and the order is unimpo
*** 5325,5331 ****
  
  For unordered enumeration types, it is generally a good idea if clients
  avoid comparisons (other than equality or inequality) and explicit
! ranges.  (A ‘client’ is a unit where the type is referenced, other than
  the unit where the type is declared, its body, and its subunits.)  For
  example, if code buried in some client says:
  
--- 5325,5331 ----
  
  For unordered enumeration types, it is generally a good idea if clients
  avoid comparisons (other than equality or inequality) and explicit
! ranges.  (A 'client' is a unit where the type is referenced, other than
  the unit where the type is declared, its body, and its subunits.)  For
  example, if code buried in some client says:
  
*************** depend on it, writing for example:
*** 5358,5364 ****
       if D in Mon .. Fri then ...
       if D < Wed then ...
  
! The pragma ‘Ordered’ is provided to mark enumeration types that are
  conceptually ordered, alerting the reader that clients may depend on the
  ordering.  GNAT provides a pragma to mark enumerations as ordered rather
  than one to mark them as unordered, since in our experience, the great
--- 5358,5364 ----
       if D in Mon .. Fri then ...
       if D < Wed then ...
  
! The pragma 'Ordered' is provided to mark enumeration types that are
  conceptually ordered, alerting the reader that clients may depend on the
  ordering.  GNAT provides a pragma to mark enumerations as ordered rather
  than one to mark them as unordered, since in our experience, the great
*************** The types ‘Boolean’, ‘Character’
*** 5369,5375 ****
  declared with a pragma ‘Ordered’ in package ‘Standard’.
  
  Normally pragma ‘Ordered’ serves only as documentation and a guide for
! coding standards, but GNAT provides a warning switch ‘-gnatw.u’ that
  requests warnings for inappropriate uses (comparisons and explicit
  subranges) for unordered types.  If this switch is used, then any
  enumeration type not marked with pragma ‘Ordered’ will be considered as
--- 5369,5375 ----
  declared with a pragma ‘Ordered’ in package ‘Standard’.
  
  Normally pragma ‘Ordered’ serves only as documentation and a guide for
! coding standards, but GNAT provides a warning switch '-gnatw.u' that
  requests warnings for inappropriate uses (comparisons and explicit
  subranges) for unordered types.  If this switch is used, then any
  enumeration type not marked with pragma ‘Ordered’ will be considered as
*************** the template can be instantiated for bot
*** 5380,5386 ****
  warnings for the case of generic enumerated types.
  
  For additional information please refer to the description of the
! ‘-gnatw.u’ switch in the GNAT User’s Guide.
  
  
  File: gnat_rm.info,  Node: Pragma Overflow_Mode,  Next: Pragma Overriding_Renamings,  Prev: Pragma Ordered,  Up: Implementation Defined Pragmas
--- 5380,5386 ----
  warnings for the case of generic enumerated types.
  
  For additional information please refer to the description of the
! '-gnatw.u' switch in the GNAT User’s Guide.
  
  
  File: gnat_rm.info,  Node: Pragma Overflow_Mode,  Next: Pragma Overriding_Renamings,  Prev: Pragma Ordered,  Up: Implementation Defined Pragmas
*************** expressions.
*** 5584,5590 ****
  The postconditions are collected and automatically tested just before
  any return (implicit or explicit) in the subprogram body.  A
  postcondition is only recognized if postconditions are active at the
! time the pragma is encountered.  The compiler switch ‘gnata’ turns on
  all postconditions by default, and pragma ‘Check_Policy’ with an
  identifier of ‘Postcondition’ can also be used to control whether
  postconditions are active.
--- 5584,5590 ----
  The postconditions are collected and automatically tested just before
  any return (implicit or explicit) in the subprogram body.  A
  postcondition is only recognized if postconditions are active at the
! time the pragma is encountered.  The compiler switch 'gnata' turns on
  all postconditions by default, and pragma ‘Check_Policy’ with an
  identifier of ‘Postcondition’ can also be used to control whether
  postconditions are active.
*************** program being compiled, or on the code g
*** 6533,6552 ****
  To obtain the required output specified in RM H.3.1, the compiler must
  be run with various special switches as follows:
  
!    * ‘Where compiler-generated run-time checks remain’
  
!      The switch ‘-gnatGL’ may be used to list the expanded code in
       pseudo-Ada form.  Runtime checks show up in the listing either as
       explicit checks or operators marked with {} to indicate a check is
       present.
  
!    * ‘An identification of known exceptions at compile time’
  
!      If the program is compiled with ‘-gnatwa’, the compiler warning
       messages will indicate all cases where the compiler detects that an
       exception is certain to occur at run time.
  
!    * ‘Possible reads of uninitialized variables’
  
       The compiler warns of many such cases, but its output is
       incomplete.
--- 6533,6552 ----
  To obtain the required output specified in RM H.3.1, the compiler must
  be run with various special switches as follows:
  
!    * 'Where compiler-generated run-time checks remain'
  
!      The switch '-gnatGL' may be used to list the expanded code in
       pseudo-Ada form.  Runtime checks show up in the listing either as
       explicit checks or operators marked with {} to indicate a check is
       present.
  
!    * 'An identification of known exceptions at compile time'
  
!      If the program is compiled with '-gnatwa', the compiler warning
       messages will indicate all cases where the compiler detects that an
       exception is certain to occur at run time.
  
!    * 'Possible reads of uninitialized variables'
  
       The compiler warns of many such cases, but its output is
       incomplete.
*************** A supplemental static analysis tool may
*** 6555,6595 ****
  comprehensive list of all possible points at which uninitialized data
  may be read.
  
!    * ‘Where run-time support routines are implicitly invoked’
  
!      In the output from ‘-gnatGL’, run-time calls are explicitly listed
       as calls to the relevant run-time routine.
  
!    * ‘Object code listing’
  
!      This may be obtained either by using the ‘-S’ switch, or the
       objdump utility.
  
!    * ‘Constructs known to be erroneous at compile time’
  
       These are identified by warnings issued by the compiler (use
!      ‘-gnatwa’).
  
!    * ‘Stack usage information’
  
       Static stack usage data (maximum per-subprogram) can be obtained
!      via the ‘-fstack-usage’ switch to the compiler.  Dynamic stack
!      usage data (per task) can be obtained via the ‘-u’ switch to
       gnatbind
  
!    * ‘Object code listing of entire partition’
  
!      This can be obtained by compiling the partition with ‘-S’, or by
       applying objdump to all the object files that are part of the
       partition.
  
!    * ‘A description of the run-time model’
  
       The full sources of the run-time are available, and the
       documentation of these routines describes how these run-time
       routines interface to the underlying operating system facilities.
  
!    * ‘Control and data-flow information’
  
  A supplemental static analysis tool may be used to obtain complete
  control and data-flow information, as well as comprehensive messages
--- 6555,6595 ----
  comprehensive list of all possible points at which uninitialized data
  may be read.
  
!    * 'Where run-time support routines are implicitly invoked'
  
!      In the output from '-gnatGL', run-time calls are explicitly listed
       as calls to the relevant run-time routine.
  
!    * 'Object code listing'
  
!      This may be obtained either by using the '-S' switch, or the
       objdump utility.
  
!    * 'Constructs known to be erroneous at compile time'
  
       These are identified by warnings issued by the compiler (use
!      '-gnatwa').
  
!    * 'Stack usage information'
  
       Static stack usage data (maximum per-subprogram) can be obtained
!      via the '-fstack-usage' switch to the compiler.  Dynamic stack
!      usage data (per task) can be obtained via the '-u' switch to
       gnatbind
  
!    * 'Object code listing of entire partition'
  
!      This can be obtained by compiling the partition with '-S', or by
       applying objdump to all the object files that are part of the
       partition.
  
!    * 'A description of the run-time model'
  
       The full sources of the run-time are available, and the
       documentation of these routines describes how these run-time
       routines interface to the underlying operating system facilities.
  
!    * 'Control and data-flow information'
  
  A supplemental static analysis tool may be used to obtain complete
  control and data-flow information, as well as comprehensive messages
*************** This pragma must appear as the first lin
*** 6889,6895 ****
  pragma line (for use in error messages and debugging information).
  ‘string_literal’ is a static string constant that specifies the file
  name to be used in error messages and debugging information.  This is
! most notably used for the output of ‘gnatchop’ with the ‘-r’ switch, to
  make sure that the original unchopped source file is the one referred
  to.
  
--- 6889,6895 ----
  pragma line (for use in error messages and debugging information).
  ‘string_literal’ is a static string constant that specifies the file
  name to be used in error messages and debugging information.  This is
! most notably used for the output of ‘gnatchop’ with the '-r' switch, to
  make sure that the original unchopped source file is the one referred
  to.
  
*************** is legal, including use as a configurati
*** 7079,7085 ****
  The form with a string literal specifies which style options are to be
  activated.  These are additive, so they apply in addition to any
  previously set style check options.  The codes for the options are the
! same as those used in the ‘-gnaty’ switch to ‘gcc’ or ‘gnatmake’.  For
  example the following two methods can be used to enable layout checking:
  
     *      pragma Style_Checks ("l");
--- 7079,7085 ----
  The form with a string literal specifies which style options are to be
  activated.  These are additive, so they apply in addition to any
  previously set style check options.  The codes for the options are the
! same as those used in the '-gnaty' switch to 'gcc' or 'gnatmake'.  For
  example the following two methods can be used to enable layout checking:
  
     *      pragma Style_Checks ("l");
*************** The form with a string literal specifies
*** 7894,7900 ****
  be activated.  The validity checks are first set to include only the
  default reference manual settings, and then a string of letters in the
  string specifies the exact set of options required.  The form of this
! string is exactly as described for the ‘-gnatVx’ compiler switch (see
  the GNAT User’s Guide for details).  For example the following two
  methods can be used to enable validity checking for mode ‘in’ and ‘in
  out’ subprogram parameters:
--- 7894,7900 ----
  be activated.  The validity checks are first set to include only the
  default reference manual settings, and then a string of letters in the
  string specifies the exact set of options required.  The form of this
! string is exactly as described for the '-gnatVx' compiler switch (see
  the GNAT User’s Guide for details).  For example the following two
  methods can be used to enable validity checking for mode ‘in’ and ‘in
  out’ subprogram parameters:
*************** message string (it is not necessary to p
*** 8003,8009 ****
  the end of the message, since this is implied).
  
  Another possibility for the static_string_EXPRESSION which works whether
! or not error tags are enabled (‘-gnatw.d’) is to use a single ‘-gnatw’
  tag string, enclosed in brackets, as shown in the example below, to
  treat one category of warnings as errors.  Note that if you want to
  treat multiple categories of warnings as errors, you can use multiple
--- 8003,8009 ----
  the end of the message, since this is implied).
  
  Another possibility for the static_string_EXPRESSION which works whether
! or not error tags are enabled ('-gnatw.d') is to use a single '-gnatw'
  tag string, enclosed in brackets, as shown in the example below, to
  treat one category of warnings as errors.  Note that if you want to
  treat multiple categories of warnings as errors, you can use multiple
*************** pragma Warning_As_Error.
*** 8012,8018 ****
  The above use of patterns to match the message applies only to warning
  messages generated by the front end.  This pragma can also be applied to
  warnings provided by the back end and mentioned in *note Pragma
! Warnings: 123.  By using a single full ‘-Wxxx’ switch in the pragma,
  such warnings can also be treated as errors.
  
  The pragma can appear either in a global configuration pragma file (e.g.
--- 8012,8018 ----
  The above use of patterns to match the message applies only to warning
  messages generated by the front end.  This pragma can also be applied to
  warnings provided by the back end and mentioned in *note Pragma
! Warnings: 123.  By using a single full '-Wxxx' switch in the pragma,
  such warnings can also be treated as errors.
  
  The pragma can appear either in a global configuration pragma file (e.g.
*************** pragma file containing:
*** 8022,8029 ****
       pragma Warning_As_Error ("[-gnatwj]");
  
  which will treat all obsolescent feature warnings as errors, the
! following program compiles as shown (compile options here are ‘-gnatwa.d
! -gnatl -gnatj55’).
  
           1. pragma Warning_As_Error ("*never assigned*");
           2. function Warnerr return String is
--- 8022,8029 ----
       pragma Warning_As_Error ("[-gnatwj]");
  
  which will treat all obsolescent feature warnings as errors, the
! following program compiles as shown (compile options here are '-gnatwa.d
! -gnatl -gnatj55').
  
           1. pragma Warning_As_Error ("*never assigned*");
           2. function Warnerr return String is
*************** string expression (which does not exist
*** 8081,8087 ****
  Note if the second argument of ‘DETAILS’ is a ‘local_NAME’ then the
  second form is always understood.  If the intention is to use the fourth
  form, then you can write ‘NAME & ""’ to force the interpretation as a
! ‘static_string_EXPRESSION’.
  
  Note: if the first argument is a valid ‘TOOL_NAME’, it will be
  interpreted that way.  The use of the ‘TOOL_NAME’ argument is relevant
--- 8081,8087 ----
  Note if the second argument of ‘DETAILS’ is a ‘local_NAME’ then the
  second form is always understood.  If the intention is to use the fourth
  form, then you can write ‘NAME & ""’ to force the interpretation as a
! 'static_string_EXPRESSION'.
  
  Note: if the first argument is a valid ‘TOOL_NAME’, it will be
  interpreted that way.  The use of the ‘TOOL_NAME’ argument is relevant
*************** front end of the compiler.  The GCC back
*** 8129,8135 ****
  warnings and they are controlled by the ‘-W’ switch.  Such warnings can
  be identified by the appearance of a string of the form ‘[-W{xxx}]’ in
  the message which designates the ‘-W`xxx'’ switch that controls the
! message.  The form with a single ‘static_string_EXPRESSION’ argument
  also works for these warnings, but the string must be a single full
  ‘-W`xxx'’ switch in this case.  The above reference lists a few examples
  of these additional warnings.
--- 8129,8135 ----
  warnings and they are controlled by the ‘-W’ switch.  Such warnings can
  be identified by the appearance of a string of the form ‘[-W{xxx}]’ in
  the message which designates the ‘-W`xxx'’ switch that controls the
! message.  The form with a single 'static_string_EXPRESSION' argument
  also works for these warnings, but the string must be a single full
  ‘-W`xxx'’ switch in this case.  The above reference lists a few examples
  of these additional warnings.
*************** pragmas must appear in sequence:
*** 8177,8183 ****
       pragma Warnings (On, Pattern);
  
  In this usage, the pattern string must match in the Off and On pragmas,
! and (if ‘-gnatw.w’ is given) at least one matching warning must be
  suppressed.
  
  Note: if the ON form is not found, then the effect of the OFF form
--- 8177,8183 ----
       pragma Warnings (On, Pattern);
  
  In this usage, the pattern string must match in the Off and On pragmas,
! and (if '-gnatw.w' is given) at least one matching warning must be
  suppressed.
  
  Note: if the ON form is not found, then the effect of the OFF form
*************** File: gnat_rm.info,  Node: Aspect Annota
*** 8431,8445 ****
  There are three forms of this aspect (where ID is an identifier, and ARG
  is a general expression), corresponding to *note pragma Annotate: 2b.
  
! ‘Annotate => ID’
  
       Equivalent to ‘pragma Annotate (ID, Entity => Name);’
  
! ‘Annotate => (ID)’
  
       Equivalent to ‘pragma Annotate (ID, Entity => Name);’
  
! ‘Annotate => (ID ,ID {, ARG})’
  
       Equivalent to ‘pragma Annotate (ID, ID {, ARG}, Entity => Name);’
  
--- 8431,8445 ----
  There are three forms of this aspect (where ID is an identifier, and ARG
  is a general expression), corresponding to *note pragma Annotate: 2b.
  
! 'Annotate => ID'
  
       Equivalent to ‘pragma Annotate (ID, Entity => Name);’
  
! 'Annotate => (ID)'
  
       Equivalent to ‘pragma Annotate (ID, Entity => Name);’
  
! 'Annotate => (ID ,ID {, ARG})'
  
       Equivalent to ‘pragma Annotate (ID, ID {, ARG}, Entity => Name);’
  
*************** File: gnat_rm.info,  Node: Attribute Bit
*** 9365,9371 ****
  ‘obj'Bit’, where ‘obj’ is any object, yields the bit offset within the
  storage unit (byte) that contains the first bit of storage allocated for
  the object.  The value of this attribute is of the type
! ‘universal_integer’ and is always a nonnegative number smaller than
  ‘System.Storage_Unit’.
  
  For an object that is a variable or a constant allocated in a register,
--- 9365,9371 ----
  ‘obj'Bit’, where ‘obj’ is any object, yields the bit offset within the
  storage unit (byte) that contains the first bit of storage allocated for
  the object.  The value of this attribute is of the type
! 'universal_integer' and is always a nonnegative number smaller than
  ‘System.Storage_Unit’.
  
  For an object that is a variable or a constant allocated in a register,
*************** File: gnat_rm.info,  Node: Attribute Bit
*** 9393,9399 ****
  ‘R.C'Bit_Position’, where ‘R’ is a record object and ‘C’ is one of the
  fields of the record type, yields the bit offset within the record
  contains the first bit of storage allocated for the object.  The value
! of this attribute is of the type ‘universal_integer’.  The value depends
  only on the field ‘C’ and is independent of the alignment of the
  containing record ‘R’.
  
--- 9393,9399 ----
  ‘R.C'Bit_Position’, where ‘R’ is a record object and ‘C’ is one of the
  fields of the record type, yields the bit offset within the record
  contains the first bit of storage allocated for the object.  The value
! of this attribute is of the type 'universal_integer'.  The value depends
  only on the field ‘C’ and is independent of the alignment of the
  containing record ‘R’.
  
*************** File: gnat_rm.info,  Node: Attribute Fin
*** 9687,9693 ****
  The prefix of attribute ‘Finalization_Size’ must be an object or a
  non-class-wide type.  This attribute returns the size of any hidden data
  reserved by the compiler to handle finalization-related actions.  The
! type of the attribute is ‘universal_integer’.
  
  ‘Finalization_Size’ yields a value of zero for a type with no controlled
  parts, an object whose type has no controlled parts, or an object of a
--- 9687,9693 ----
  The prefix of attribute ‘Finalization_Size’ must be an object or a
  non-class-wide type.  This attribute returns the size of any hidden data
  reserved by the compiler to handle finalization-related actions.  The
! type of the attribute is 'universal_integer'.
  
  ‘Finalization_Size’ yields a value of zero for a type with no controlled
  parts, an object whose type has no controlled parts, or an object of a
*************** File: gnat_rm.info,  Node: Attribute Mec
*** 9955,9969 ****
  
  ‘func'Mechanism_Code’ yields an integer code for the mechanism used for
  the result of function ‘func’, and ‘subprog'Mechanism_Code (n)’ yields
! the mechanism used for formal parameter number ‘n’ (a static integer
  value, with 1 meaning the first parameter) of subprogram ‘subprog’.  The
  code returned is:
  
! ‘1’
  
       by copy (value)
  
! ‘2’
  
       by reference
  
--- 9955,9969 ----
  
  ‘func'Mechanism_Code’ yields an integer code for the mechanism used for
  the result of function ‘func’, and ‘subprog'Mechanism_Code (n)’ yields
! the mechanism used for formal parameter number 'n' (a static integer
  value, with 1 meaning the first parameter) of subprogram ‘subprog’.  The
  code returned is:
  
! '1'
  
       by copy (value)
  
! '2'
  
       by reference
  
*************** normally the native ordering of the targ
*** 10306,10312 ****
  overridden using pragma ‘Default_Scalar_Storage_Order’.
  
  If a component of ‘T’ is itself of a record or array type, the specfied
! ‘Scalar_Storage_Order’ does ‘not’ apply to that nested type: an explicit
  attribute definition clause must be provided for the component type as
  well if desired.
  
--- 10306,10312 ----
  overridden using pragma ‘Default_Scalar_Storage_Order’.
  
  If a component of ‘T’ is itself of a record or array type, the specfied
! ‘Scalar_Storage_Order’ does 'not' apply to that nested type: an explicit
  attribute definition clause must be provided for the component type as
  well if desired.
  
*************** then the evaluation of an allocator for
*** 10402,10409 ****
  primitive ‘Allocate’ procedure for type ‘SSP’, passing
  ‘S'Simple_Storage_Pool’ as the pool parameter.  The detailed semantics
  of such allocators is the same as those defined for allocators in
! section 13.11 of the ‘Ada Reference Manual’, with the term ‘simple
! storage pool’ substituted for ‘storage pool’.
  
  If an access type ‘S’ has a specified simple storage pool of type ‘SSP’,
  then a call to an instance of the ‘Ada.Unchecked_Deallocation’ for that
--- 10402,10409 ----
  primitive ‘Allocate’ procedure for type ‘SSP’, passing
  ‘S'Simple_Storage_Pool’ as the pool parameter.  The detailed semantics
  of such allocators is the same as those defined for allocators in
! section 13.11 of the ‘Ada Reference Manual’, with the term 'simple
! storage pool' substituted for 'storage pool'.
  
  If an access type ‘S’ has a specified simple storage pool of type ‘SSP’,
  then a call to an instance of the ‘Ada.Unchecked_Deallocation’ for that
*************** access type invokes the primitive ‘Dea
*** 10411,10417 ****
  passing ‘S'Simple_Storage_Pool’ as the pool parameter.  The detailed
  semantics of such unchecked deallocations is the same as defined in
  section 13.11.2 of the Ada Reference Manual, except that the term
! ‘simple storage pool’ is substituted for ‘storage pool’.
  
  
  File: gnat_rm.info,  Node: Attribute Small,  Next: Attribute Small_Denominator,  Prev: Attribute Simple_Storage_Pool,  Up: Implementation Defined Attributes
--- 10411,10417 ----
  passing ‘S'Simple_Storage_Pool’ as the pool parameter.  The detailed
  semantics of such unchecked deallocations is the same as defined in
  section 13.11.2 of the Ada Reference Manual, except that the term
! 'simple storage pool' is substituted for 'storage pool'.
  
  
  File: gnat_rm.info,  Node: Attribute Small,  Next: Attribute Small_Denominator,  Prev: Attribute Simple_Storage_Pool,  Up: Implementation Defined Attributes
*************** Pragma                   Explanation
*** 12505,12538 ****
                           
  -------------------------------------------------
                           
! ‘Abort_Defer’            Affects semantics
                           
                           
! ‘Ada_83’                 Affects legality
                           
                           
! ‘Assert’                 Affects semantics
                           
                           
! ‘CPP_Class’              Affects semantics
                           
                           
! ‘CPP_Constructor’        Affects semantics
                           
                           
! ‘Debug’                  Affects semantics
                           
                           
! ‘Interface_Name’         Affects semantics
                           
                           
! ‘Machine_Attribute’      Affects semantics
                           
                           
! ‘Unimplemented_Unit’     Affects legality
                           
                           
! ‘Unchecked_Union’        Affects semantics
                           
  
  In each of the above cases, it is essential to the purpose of the pragma
--- 12505,12538 ----
                           
  -------------------------------------------------
                           
! 'Abort_Defer'            Affects semantics
                           
                           
! 'Ada_83'                 Affects legality
                           
                           
! 'Assert'                 Affects semantics
                           
                           
! 'CPP_Class'              Affects semantics
                           
                           
! 'CPP_Constructor'        Affects semantics
                           
                           
! 'Debug'                  Affects semantics
                           
                           
! 'Interface_Name'         Affects semantics
                           
                           
! 'Machine_Attribute'      Affects semantics
                           
                           
! 'Unimplemented_Unit'     Affects legality
                           
                           
! 'Unchecked_Union'        Affects semantics
                           
  
  In each of the above cases, it is essential to the purpose of the pragma
*************** File: gnat_rm.info,  Node: RM 3 6 2 11 M
*** 12661,12667 ****
       multidimensional array aggregates (see 4.3.3).  However, if a
       pragma ‘Convention’ (‘Fortran’, …) applies to a multidimensional
       array type, then column-major order should be used instead (see
!      B.5, ‘Interfacing with Fortran’).”
  
  Followed.
  
--- 12661,12667 ----
       multidimensional array aggregates (see 4.3.3).  However, if a
       pragma ‘Convention’ (‘Fortran’, …) applies to a multidimensional
       array type, then column-major order should be used instead (see
!      B.5, 'Interfacing with Fortran').”
  
  Followed.
  
*************** File: gnat_rm.info,  Node: RM 13 2 6-8 P
*** 12788,12794 ****
  
       For a packed record type, the components should be packed as
       tightly as possible subject to the Sizes of the component subtypes,
!      and subject to any ‘record_representation_clause’ that applies to
       the type; the implementation may, but need not, reorder components
       or cross aligned word boundaries to improve the packing.  A
       component whose ‘Size’ is greater than the word size may be
--- 12788,12794 ----
  
       For a packed record type, the components should be packed as
       tightly as possible subject to the Sizes of the component subtypes,
!      and subject to any 'record_representation_clause' that applies to
       the type; the implementation may, but need not, reorder components
       or cross aligned word boundaries to improve the packing.  A
       component whose ‘Size’ is greater than the word size may be
*************** File: gnat_rm.info,  Node: RM 13 5 1 17-
*** 12982,12988 ****
  ====================================================
  
       “The recommended level of support for
!      ‘record_representation_clause’s is:
  
       An implementation should support storage places that can be
       extracted with a load, mask, shift sequence of machine code, and
--- 12982,12988 ----
  ====================================================
  
       “The recommended level of support for
!      'record_representation_clause's is:
  
       An implementation should support storage places that can be
       extracted with a load, mask, shift sequence of machine code, and
*************** Followed.  The storage place for the tag
*** 13012,13018 ****
  tagged record, and its size is Address’Size.  GNAT will reject an
  explicit component clause for the tag field.
  
!      “An implementation need not support a ‘component_clause’ for a
       component of an extension part if the storage place is not after
       the storage places of all components of the parent type, whether or
       not those storage places had been specified.”
--- 13012,13018 ----
  tagged record, and its size is Address’Size.  GNAT will reject an
  explicit component clause for the tag field.
  
!      “An implementation need not support a 'component_clause' for a
       component of an extension part if the storage place is not after
       the storage places of all components of the parent type, whether or
       not those storage places had been specified.”
*************** Followed when the main program is in Ada
*** 13301,13310 ****
  foreign language, then ‘adainit’ must be called to elaborate
  pre-elaborated packages.
  
!      “For each supported convention ‘L’ other than ‘Intrinsic’, an
       implementation should support ‘Import’ and ‘Export’ pragmas for
!      objects of ‘L’-compatible types and for subprograms, and pragma
!      ‘Convention’ for ‘L’-eligible types and for subprograms, presuming
       the other language has corresponding features.  Pragma ‘Convention’
       need not be supported for scalar types.”
  
--- 13301,13310 ----
  foreign language, then ‘adainit’ must be called to elaborate
  pre-elaborated packages.
  
!      “For each supported convention 'L' other than ‘Intrinsic’, an
       implementation should support ‘Import’ and ‘Export’ pragmas for
!      objects of 'L'-compatible types and for subprograms, and pragma
!      ‘Convention’ for 'L'-eligible types and for subprograms, presuming
       the other language has corresponding features.  Pragma ‘Convention’
       need not be supported for scalar types.”
  
*************** File: gnat_rm.info,  Node: RM D 6 9-10 P
*** 13642,13651 ****
  6.54 RM D.6(9-10): Preemptive Abort
  ===================================
  
!      “Even though the ‘abort_statement’ is included in the list of
       potentially blocking operations (see 9.5.1), it is recommended that
       this statement be implemented in a way that never requires the task
!      executing the ‘abort_statement’ to block.”
  
  Followed.
  
--- 13642,13651 ----
  6.54 RM D.6(9-10): Preemptive Abort
  ===================================
  
!      “Even though the 'abort_statement' is included in the list of
       potentially blocking operations (see 9.5.1), it is recommended that
       this statement be implemented in a way that never requires the task
!      executing the 'abort_statement' to block.”
  
  Followed.
  
*************** There are no variations from the standar
*** 13914,13920 ****
     * “Which code_statements cause external interactions.  See
       1.1.3(10).”
  
! Any ‘code_statement’ can potentially cause external interactions.
  
     * “The coded representation for the text of an Ada program.  See
       2.1(4).”
--- 13914,13920 ----
     * “Which code_statements cause external interactions.  See
       1.1.3(10).”
  
! Any 'code_statement' can potentially cause external interactions.
  
     * “The coded representation for the text of an Ada program.  See
       2.1(4).”
*************** See separate section on source represent
*** 13935,13942 ****
  
  The maximum line length is 255 characters and the maximum length of a
  lexical element is also 255 characters.  This is the default setting if
! not overridden by the use of compiler switch ‘-gnaty’ (which sets the
! maximum to 79) or ‘-gnatyMnn’ which allows the maximum line length to be
  specified to be any value up to 32767.  The maximum length of a lexical
  element is the same as the maximum line length.
  
--- 13935,13942 ----
  
  The maximum line length is 255 characters and the maximum length of a
  lexical element is also 255 characters.  This is the default setting if
! not overridden by the use of compiler switch '-gnaty' (which sets the
! maximum to 79) or '-gnatyMnn' which allows the maximum line length to be
  specified to be any value up to 32767.  The maximum length of a lexical
  element is the same as the maximum line length.
  
*************** Type                          Representa
*** 13965,13988 ****
                                
  --------------------------------------------------------------------------
                                
! ‘Short_Short_Integer’         8-bit signed
                                
                                
! ‘Short_Integer’               16-bit signed
                                
                                
! ‘Integer’                     32-bit signed
                                
                                
! ‘Long_Integer’                64-bit signed (on most 64-bit targets,
                                depending on the C definition of long)
                                32-bit signed (on all other targets)
                                
                                
! ‘Long_Long_Integer’           64-bit signed
                                
                                
! ‘Long_Long_Long_Integer’      128-bit signed (on 64-bit targets) 64-bit
                                signed (on 32-bit targets)
                                
  
--- 13965,13988 ----
                                
  --------------------------------------------------------------------------
                                
! 'Short_Short_Integer'         8-bit signed
                                
                                
! 'Short_Integer'               16-bit signed
                                
                                
! 'Integer'                     32-bit signed
                                
                                
! 'Long_Integer'                64-bit signed (on most 64-bit targets,
                                depending on the C definition of long)
                                32-bit signed (on all other targets)
                                
                                
! 'Long_Long_Integer'           64-bit signed
                                
                                
! 'Long_Long_Long_Integer'      128-bit signed (on 64-bit targets) 64-bit
                                signed (on 32-bit targets)
                                
  
*************** Type                       Representatio
*** 14009,14024 ****
                             
  -------------------------------------------------------------------------------
                             
! ‘Short_Float’              IEEE Binary32 (Single)
                             
                             
! ‘Float’                    IEEE Binary32 (Single)
                             
                             
! ‘Long_Float’               IEEE Binary64 (Double)
                             
                             
! ‘Long_Long_Float’          IEEE Binary64 (Double) on non-x86 architectures
                             IEEE 80-bit Extended on x86 architecture
                             
  
--- 14009,14024 ----
                             
  -------------------------------------------------------------------------------
                             
! 'Short_Float'              IEEE Binary32 (Single)
                             
                             
! 'Float'                    IEEE Binary32 (Single)
                             
                             
! 'Long_Float'               IEEE Binary64 (Double)
                             
                             
! 'Long_Long_Float'          IEEE Binary64 (Double) on non-x86 architectures
                             IEEE 80-bit Extended on x86 architecture
                             
  
*************** in 1.0E-18 ..  1.0E+18 and the digits in
*** 14061,14069 ****
  the small must lie in 1.0E-38 ..  1.0E+38 and the digits in 1 ..  38.
  
     * “The result of ‘Tags.Expanded_Name’ for types declared within an
!      unnamed ‘block_statement’.  See 3.9(10).”
  
! Block numbers of the form ‘BNNN’, where ‘nnn’ is a decimal integer are
  allocated.
  
     * “The sequence of characters of the value returned by
--- 14061,14069 ----
  the small must lie in 1.0E-38 ..  1.0E+38 and the digits in 1 ..  38.
  
     * “The result of ‘Tags.Expanded_Name’ for types declared within an
!      unnamed 'block_statement'.  See 3.9(10).”
  
! Block numbers of the form ‘BNNN’, where 'nnn' is a decimal integer are
  allocated.
  
     * “The sequence of characters of the value returned by
*************** Difficult to characterize.
*** 14119,14125 ****
     * “Any extensions of the Default_Initial_Condition aspect.  See
       7.3.3(11).”
  
! SPARK allows specifying ‘null’ as the Default_Initial_Condition aspect
  of a type.  See the SPARK reference manual for further details.
  
     * “Any implementation-defined time types.  See 9.6(6).”
--- 14119,14125 ----
     * “Any extensions of the Default_Initial_Condition aspect.  See
       7.3.3(11).”
  
! SPARK allows specifying 'null' as the Default_Initial_Condition aspect
  of a type.  See the SPARK reference manual for further details.
  
     * “Any implementation-defined time types.  See 9.6(6).”
*************** The time zone used by package ‘Calenda
*** 14143,14149 ****
  setting for local time, as accessed by the C library function
  ‘localtime’.
  
!    * “Any limit on ‘delay_until_statements’ of ‘select_statements’.  See
       9.6(29).”
  
  There are no such limits.
--- 14143,14149 ----
  setting for local time, as accessed by the C library function
  ‘localtime’.
  
!    * “Any limit on 'delay_until_statements' of 'select_statements'.  See
       9.6(29).”
  
  There are no such limits.
*************** There are no implementation-defined conf
*** 14160,14166 ****
     * “The representation for a compilation.  See 10.1(2).”
  
  A compilation is represented by a sequence of files presented to the
! compiler in a single invocation of the ‘gcc’ command.
  
     * “Any restrictions on compilations that contain multiple
       compilation_units.  See 10.1(4).”
--- 14160,14166 ----
     * “The representation for a compilation.  See 10.1(2).”
  
  A compilation is represented by a sequence of files presented to the
! compiler in a single invocation of the 'gcc' command.
  
     * “Any restrictions on compilations that contain multiple
       compilation_units.  See 10.1(4).”
*************** e.g., by foreign language units, then al
*** 14189,14200 ****
  context clause of one of the needed Ada units.
  
  If the partition contains no main program, or if the main program is in
! a language other than Ada, then GNAT provides the binder options ‘-z’
! and ‘-n’ respectively, and in this case a list of units can be
  explicitly supplied to the binder for inclusion in the partition (all
  units needed by these units will also be included automatically).  For
! full details on the use of these options, refer to ‘GNAT Make Program
! gnatmake’ in the ‘GNAT User’s Guide’.
  
     * “The implementation-defined means, if any, of specifying which
       compilation units are needed by a given compilation unit.  See
--- 14189,14200 ----
  context clause of one of the needed Ada units.
  
  If the partition contains no main program, or if the main program is in
! a language other than Ada, then GNAT provides the binder options '-z'
! and '-n' respectively, and in this case a list of units can be
  explicitly supplied to the binder for inclusion in the partition (all
  units needed by these units will also be included automatically).  For
! full details on the use of these options, refer to 'GNAT Make Program
! gnatmake' in the ‘GNAT User’s Guide’.
  
     * “The implementation-defined means, if any, of specifying which
       compilation units are needed by a given compilation unit.  See
*************** units.
*** 14211,14217 ****
  The main program is designated by providing the name of the
  corresponding ‘ALI’ file as the input parameter to the binder.
  
!    * “The order of elaboration of ‘library_items’.  See 10.2(18).”
  
  The first constraint on ordering is that it meets the requirements of
  Chapter 10 of the Ada Reference Manual.  This still leaves some
--- 14211,14217 ----
  The main program is designated by providing the name of the
  corresponding ‘ALI’ file as the input parameter to the binder.
  
!    * “The order of elaboration of 'library_items'.  See 10.2(18).”
  
  The first constraint on ordering is that it meets the requirements of
  Chapter 10 of the Ada Reference Manual.  This still leaves some
*************** Exception message returns the null strin
*** 14254,14262 ****
  been passed by the program.
  
     * “The result of ‘Exceptions.Exception_Name’ for types declared
!      within an unnamed ‘block_statement’.  See 11.4.1(12).”
  
! Blocks have implementation defined names of the form ‘BNNN’ where ‘nnn’
  is an integer.
  
     * “The information returned by ‘Exception_Information’.  See
--- 14254,14262 ----
  been passed by the program.
  
     * “The result of ‘Exceptions.Exception_Name’ for types declared
!      within an unnamed 'block_statement'.  See 11.4.1(12).”
  
! Blocks have implementation defined names of the form ‘BNNN’ where 'nnn'
  is an integer.
  
     * “The information returned by ‘Exception_Information’.  See
*************** declarations are added to package System
*** 14415,14421 ****
  See the definition of package System.Storage_Elements in ‘s-stoele.ads’.
  
     * “The contents of the visible part of package ‘System.Machine_Code’,
!      and the meaning of ‘code_statements’.  See 13.8(7).”
  
  See the definition and documentation in file ‘s-maccod.ads’.
  
--- 14415,14421 ----
  See the definition of package System.Storage_Elements in ‘s-stoele.ads’.
  
     * “The contents of the visible part of package ‘System.Machine_Code’,
!      and the meaning of 'code_statements'.  See 13.8(7).”
  
  See the definition and documentation in file ‘s-maccod.ads’.
  
*************** state vector.
*** 14553,14559 ****
       ‘Model’, ‘Safe_First’, and ‘Safe_Last’ attributes, if the Numerics
       Annex is not supported.  See A.5.3(72).”
  
! Running the compiler with ‘-gnatS’ to produce a listing of package
  ‘Standard’ displays the values of these attributes.
  
     * “The value of ‘Buffer_Size’ in ‘Storage_IO’.  See A.9(10).”
--- 14553,14559 ----
       ‘Model’, ‘Safe_First’, and ‘Safe_Last’ attributes, if the Numerics
       Annex is not supported.  See A.5.3(72).”
  
! Running the compiler with '-gnatS' to produce a listing of package
  ‘Standard’ displays the values of these attributes.
  
     * “The value of ‘Buffer_Size’ in ‘Storage_IO’.  See A.9(10).”
*************** Convention Name             Interpretati
*** 14649,14715 ****
                              
  ---------------------------------------------------------------------------------------------------------------
                              
! ‘Ada’                       Ada
                              
                              
! ‘Ada_Pass_By_Copy’          Allowed for any types except by-reference types such as limited records.
                              Compatible with convention Ada, but causes any parameters with this convention
                              to be passed by copy.
                              
                              
! ‘Ada_Pass_By_Reference’     Allowed for any types except by-copy types such as scalars.  Compatible with
                              convention Ada, but causes any parameters with this convention to be passed by
                              reference.
                              
                              
! ‘Assembler’                 Assembly language
                              
                              
! ‘Asm’                       Synonym for Assembler
                              
                              
! ‘Assembly’                  Synonym for Assembler
                              
                              
! ‘C’                         C
                              
                              
! ‘C_Pass_By_Copy’            Allowed only for record types, like C, but also notes that record is to be
                              passed by copy rather than reference.
                              
                              
! ‘COBOL’                     COBOL
                              
                              
! ‘C_Plus_Plus (or CPP)’      C++
                              
                              
! ‘Default’                   Treated the same as C
                              
                              
! ‘External’                  Treated the same as C
                              
                              
! ‘Fortran’                   Fortran
                              
                              
! ‘Intrinsic’                 For support of pragma ‘Import’ with convention Intrinsic, see separate section
                              on Intrinsic Subprograms.
                              
                              
! ‘Stdcall’                   Stdcall (used for Windows implementations only).  This convention correspond to
                              the WINAPI (previously called Pascal convention) C/C++ convention under Windows.
                              A routine with this convention cleans the stack before exit.  This pragma cannot
                              be applied to a dispatching call.
                              
                              
! ‘DLL’                       Synonym for Stdcall
                              
                              
! ‘Win32’                     Synonym for Stdcall
                              
                              
! ‘Stubbed’                   Stubbed is a special convention used to indicate that the body of the subprogram
                              will be entirely ignored.  Any call to the subprogram is converted into a raise
                              of the ‘Program_Error’ exception.  If a pragma ‘Import’ specifies convention
                              ‘stubbed’ then no body need be present at all.  This convention is useful during
--- 14649,14715 ----
                              
  ---------------------------------------------------------------------------------------------------------------
                              
! 'Ada'                       Ada
                              
                              
! 'Ada_Pass_By_Copy'          Allowed for any types except by-reference types such as limited records.
                              Compatible with convention Ada, but causes any parameters with this convention
                              to be passed by copy.
                              
                              
! 'Ada_Pass_By_Reference'     Allowed for any types except by-copy types such as scalars.  Compatible with
                              convention Ada, but causes any parameters with this convention to be passed by
                              reference.
                              
                              
! 'Assembler'                 Assembly language
                              
                              
! 'Asm'                       Synonym for Assembler
                              
                              
! 'Assembly'                  Synonym for Assembler
                              
                              
! 'C'                         C
                              
                              
! 'C_Pass_By_Copy'            Allowed only for record types, like C, but also notes that record is to be
                              passed by copy rather than reference.
                              
                              
! 'COBOL'                     COBOL
                              
                              
! 'C_Plus_Plus (or CPP)'      C++
                              
                              
! 'Default'                   Treated the same as C
                              
                              
! 'External'                  Treated the same as C
                              
                              
! 'Fortran'                   Fortran
                              
                              
! 'Intrinsic'                 For support of pragma ‘Import’ with convention Intrinsic, see separate section
                              on Intrinsic Subprograms.
                              
                              
! 'Stdcall'                   Stdcall (used for Windows implementations only).  This convention correspond to
                              the WINAPI (previously called Pascal convention) C/C++ convention under Windows.
                              A routine with this convention cleans the stack before exit.  This pragma cannot
                              be applied to a dispatching call.
                              
                              
! 'DLL'                       Synonym for Stdcall
                              
                              
! 'Win32'                     Synonym for Stdcall
                              
                              
! 'Stubbed'                   Stubbed is a special convention used to indicate that the body of the subprogram
                              will be entirely ignored.  Any call to the subprogram is converted into a raise
                              of the ‘Program_Error’ exception.  If a pragma ‘Import’ specifies convention
                              ‘stubbed’ then no body need be present at all.  This convention is useful during
*************** COBOL                     Ada
*** 14770,14791 ****
                            
  -------------------------------------------------------------------
                            
! ‘Floating’                Float
                            
                            
! ‘Long_Floating’           (Floating) Long_Float
                            
                            
! ‘Binary’                  Integer
                            
                            
! ‘Long_Binary’             Long_Long_Integer
                            
                            
! ‘Decimal_Element’         Character
                            
                            
! ‘COBOL_Character’         Character
                            
  
  For initialization, see the file ‘i-cobol.ads’ in the distributed
--- 14770,14791 ----
                            
  -------------------------------------------------------------------
                            
! 'Floating'                Float
                            
                            
! 'Long_Floating'           (Floating) Long_Float
                            
                            
! 'Binary'                  Integer
                            
                            
! 'Long_Binary'             Long_Long_Integer
                            
                            
! 'Decimal_Element'         Character
                            
                            
! 'COBOL_Character'         Character
                            
  
  For initialization, see the file ‘i-cobol.ads’ in the distributed
*************** If Discard_Names is True for an enumerat
*** 14819,14825 ****
  provides the image of the Pos of the literal, and Value accepts Pos
  values.
  
! If both of the aspects‘‘Discard_Names‘‘ and ‘No_Tagged_Streams’ are true
  for a tagged type, its Expanded_Name and External_Tag values are empty
  strings.  This is useful to avoid exposing entity names at binary level.
  
--- 14819,14825 ----
  provides the image of the Pos of the literal, and Value accepts Pos
  values.
  
! If both of the aspects''Discard_Names'' and ‘No_Tagged_Streams’ are true
  for a tagged type, its Expanded_Name and External_Tag values are empty
  strings.  This is useful to avoid exposing entity names at binary level.
  
*************** The value is 1.
*** 14838,14844 ****
  The result of this attribute is a string that identifies the object or
  component that denotes a given task.  If a variable ‘Var’ has a task
  type, the image for this task will have the form ‘Var_XXXXXXXX’, where
! the suffix ‘XXXXXXXX’ is the hexadecimal representation of the virtual
  address of the corresponding task control block.  If the variable is an
  array of tasks, the image of each task will have the form of an indexed
  component indicating the position of a given task in the array, e.g.,
--- 14838,14844 ----
  The result of this attribute is a string that identifies the object or
  component that denotes a given task.  If a variable ‘Var’ has a task
  type, the image for this task will have the form ‘Var_XXXXXXXX’, where
! the suffix 'XXXXXXXX' is the hexadecimal representation of the virtual
  address of the corresponding task control block.  If the variable is an
  array of tasks, the image of each task will have the form of an indexed
  component indicating the position of a given task in the array, e.g.,
*************** There are no implementation-defined task
*** 14901,14907 ****
  
  The value is 10 milliseconds.
  
!    * “Implementation-defined ‘policy_identifiers’ allowed in a pragma
       ‘Locking_Policy’.  See D.3(4).”
  
  The two implementation defined policies permitted in GNAT are
--- 14901,14907 ----
  
  The value is 10 milliseconds.
  
!    * “Implementation-defined 'policy_identifiers' allowed in a pragma
       ‘Locking_Policy’.  See D.3(4).”
  
  The two implementation defined policies permitted in GNAT are
*************** Named Number             Value
*** 15038,15056 ****
                           
  ----------------------------------------
                           
! ‘Max_Scale’              +18
                           
                           
! ‘Min_Scale’              -18
                           
                           
! ‘Min_Delta’              1.0E-18
                           
                           
! ‘Max_Delta’              1.0E+18
                           
                           
! ‘Max_Decimal_Digits’     18
                           
  
     * “The value of ‘Max_Picture_Length’ in the package
--- 15038,15056 ----
                           
  ----------------------------------------
                           
! 'Max_Scale'              +18
                           
                           
! 'Min_Scale'              -18
                           
                           
! 'Min_Delta'              1.0E-18
                           
                           
! 'Max_Delta'              1.0E+18
                           
                           
! 'Max_Decimal_Digits'     18
                           
  
     * “The value of ‘Max_Picture_Length’ in the package
*************** floating-point format.
*** 15104,15110 ****
  Infinite and NaN values are produced as dictated by the IEEE
  floating-point standard.  Note that on machines that are not fully
  compliant with the IEEE floating-point standard, such as Alpha, the
! ‘-mieee’ compiler flag must be used for achieving IEEE conforming
  behavior (although at the cost of a significant performance penalty), so
  infinite and NaN values are properly generated.
  
--- 15104,15110 ----
  Infinite and NaN values are produced as dictated by the IEEE
  floating-point standard.  Note that on machines that are not fully
  compliant with the IEEE floating-point standard, such as Alpha, the
! '-mieee' compiler flag must be used for achieving IEEE conforming
  behavior (although at the cost of a significant performance penalty), so
  infinite and NaN values are properly generated.
  
*************** floating-point arithmetic.  The input op
*** 15123,15129 ****
  floating-point, the operation is done in floating-point, and the result
  is converted to the target type.
  
!    * “Conditions on a ‘universal_real’ operand of a fixed point
       multiplication or division for which the result shall be in the
       perfect result set.  See G.2.3(22).”
  
--- 15123,15129 ----
  floating-point, the operation is done in floating-point, and the result
  is converted to the target type.
  
!    * “Conditions on a 'universal_real' operand of a fixed point
       multiplication or division for which the result shall be in the
       perfect result set.  See G.2.3(22).”
  
*************** same as specifying 1.
*** 15449,15455 ****
  
  The default alignment values are as follows:
  
!    * ‘Elementary Types’.
  
       For elementary types, the alignment is the minimum of the actual
       size of objects of the type divided by ‘Storage_Unit’, and the
--- 15449,15455 ----
  
  The default alignment values are as follows:
  
!    * 'Elementary Types'.
  
       For elementary types, the alignment is the minimum of the actual
       size of objects of the type divided by ‘Storage_Unit’, and the
*************** The default alignment values are as foll
*** 15464,15470 ****
       may be smaller than 8, in which case objects of type ‘Long_Float’
       will be maximally aligned.
  
!    * ‘Arrays’.
  
       For arrays, the alignment is equal to the alignment of the
       component type for the normal case where no packing or component
--- 15464,15470 ----
       may be smaller than 8, in which case objects of type ‘Long_Float’
       will be maximally aligned.
  
!    * 'Arrays'.
  
       For arrays, the alignment is equal to the alignment of the
       component type for the normal case where no packing or component
*************** The default alignment values are as foll
*** 15478,15484 ****
       packed array of length 31 bits will have an object size of four
       bytes, and an alignment of 4.
  
!    * ‘Records’.
  
       For the normal unpacked case, the alignment of a record is equal to
       the maximum alignment of any of its components.  For tagged
--- 15478,15484 ----
       packed array of length 31 bits will have an object size of four
       bytes, and an alignment of 4.
  
!    * 'Records'.
  
       For the normal unpacked case, the alignment of a record is equal to
       the maximum alignment of any of its components.  For tagged
*************** Then ‘Default_Stack_Size’ can be def
*** 15630,15636 ****
  modified as required.  Any tasks requiring stack sizes different from
  the default can have an appropriate alternative reference in the pragma.
  
! You can also use the ‘-d’ binder switch to modify the default stack
  size.
  
  For access types, the ‘Storage_Size’ clause specifies the maximum space
--- 15630,15636 ----
  modified as required.  Any tasks requiring stack sizes different from
  the default can have an appropriate alternative reference in the pragma.
  
! You can also use the '-d' binder switch to modify the default stack
  size.
  
  For access types, the ‘Storage_Size’ clause specifies the maximum space
*************** The default rules for the value of ‘Ob
*** 15850,15856 ****
  as follows:
  
     * The ‘Object_Size’ for base subtypes reflect the natural hardware
!      size in bits (run the compiler with ‘-gnatS’ to find those values
       for numeric types).  Enumeration types and fixed-point base
       subtypes have 8, 16, 32, or 64 bits for this size, depending on the
       range of values to be stored.
--- 15850,15856 ----
  as follows:
  
     * The ‘Object_Size’ for base subtypes reflect the natural hardware
!      size in bits (run the compiler with '-gnatS' to find those values
       for numeric types).  Enumeration types and fixed-point base
       subtypes have 8, 16, 32, or 64 bits for this size, depending on the
       range of values to be stored.
*************** File: gnat_rm.info,  Node: Pragma Pack f
*** 16370,16377 ****
  ===========================
  
  Pragma ‘Pack’ applied to an array has an effect that depends upon
! whether the component type is ‘packable’.  For a component type to be
! ‘packable’, it must be one of the following cases:
  
     * Any elementary type.
  
--- 16370,16377 ----
  ===========================
  
  Pragma ‘Pack’ applied to an array has an effect that depends upon
! whether the component type is 'packable'.  For a component type to be
! 'packable', it must be one of the following cases:
  
     * Any elementary type.
  
*************** File: gnat_rm.info,  Node: Pragma Pack f
*** 16474,16481 ****
  
  Pragma ‘Pack’ applied to a record will pack the components to reduce
  wasted space from alignment gaps and by reducing the amount of space
! taken by components.  We distinguish between ‘packable’ components and
! ‘non-packable’ components.  Components of the following types are
  considered packable:
  
     * Components of an elementary type are packable unless they are
--- 16474,16481 ----
  
  Pragma ‘Pack’ applied to a record will pack the components to reduce
  wasted space from alignment gaps and by reducing the amount of space
! taken by components.  We distinguish between 'packable' components and
! 'non-packable' components.  Components of the following types are
  considered packable:
  
     * Components of an elementary type are packable unless they are
*************** be in the range:
*** 16697,16703 ****
  
       0 .. System.Max_Binary_Modulus;
  
! A ‘confirming’ representation clause is one in which the values range
  from 0 in sequence, i.e., a clause that confirms the default
  representation for an enumeration type.  Such a confirming
  representation is permitted by these rules, and is specially recognized
--- 16697,16703 ----
  
       0 .. System.Max_Binary_Modulus;
  
! A 'confirming' representation clause is one in which the values range
  from 0 in sequence, i.e., a clause that confirms the default
  representation for an enumeration type.  Such a confirming
  representation is permitted by these rules, and is specially recognized
*************** example) has no effect.
*** 17072,17078 ****
  
  There are four exceptions to this general rule:
  
!    * ‘Convention Fortran and array subtypes’.
  
       If pragma Convention Fortran is specified for an array subtype,
       then in accordance with the implementation advice in section
--- 17072,17078 ----
  
  There are four exceptions to this general rule:
  
!    * 'Convention Fortran and array subtypes'.
  
       If pragma Convention Fortran is specified for an array subtype,
       then in accordance with the implementation advice in section
*************** There are four exceptions to this genera
*** 17080,17086 ****
       a Fortran-compatible column-major manner, instead of the normal
       default row-major order.
  
!    * ‘Convention C and enumeration types’
  
       GNAT normally stores enumeration types in 8, 16, or 32 bits as
       required to accommodate all values of the type.  For example, for
--- 17080,17086 ----
       a Fortran-compatible column-major manner, instead of the normal
       default row-major order.
  
!    * 'Convention C and enumeration types'
  
       GNAT normally stores enumeration types in 8, 16, or 32 bits as
       required to accommodate all values of the type.  For example, for
*************** There are four exceptions to this genera
*** 17105,17111 ****
       this situation.  The warning can be suppressed by giving an
       explicit size clause specifying the desired size.
  
!    * ‘Convention C/Fortran and Boolean types’
  
       In C, the usual convention for boolean values, that is values used
       for conditions, is that zero represents false, and nonzero values
--- 17105,17111 ----
       this situation.  The warning can be suppressed by giving an
       explicit size clause specifying the desired size.
  
!    * 'Convention C/Fortran and Boolean types'
  
       In C, the usual convention for boolean values, that is values used
       for conditions, is that zero represents false, and nonzero values
*************** resulting fields placed?  The section on
*** 17221,17230 ****
  can be used to answer the second question, but it is often easier to
  just see what the compiler does.
  
! For this purpose, GNAT provides the option ‘-gnatR’.  If you compile
! with this option, then the compiler will output information on the
! actual representations chosen, in a format similar to source
! representation clauses.  For example, if we compile the package:
  
       package q is
          type r (x : boolean) is tagged record
--- 17221,17230 ----
  can be used to answer the second question, but it is often easier to
  just see what the compiler does.
  
! For this purpose, GNAT provides the option '-gnatR'. If you compile with
! this option, then the compiler will output information on the actual
! representations chosen, in a format similar to source representation
! clauses.  For example, if we compile the package:
  
       package q is
          type r (x : boolean) is tagged record
*************** representation clauses.  For example, if
*** 17268,17274 ****
          pragma Pack (x2);
       end q;
  
! using the switch ‘-gnatR’ we obtain the following output:
  
       Representation information for unit q
       -------------------------------------
--- 17268,17274 ----
          pragma Pack (x2);
       end q;
  
! using the switch '-gnatR' we obtain the following output:
  
       Representation information for unit q
       -------------------------------------
*************** units are not implemented, as marked by
*** 17372,17428 ****
  Unimplemented_Unit, and in this case the package declaration contains
  comments explaining why the unit is not implemented.
  
! ‘Ada’ ‘(A.2)’
  
       This is a parent package for all the standard library packages.  It
       is usually included implicitly in your program, and itself contains
       no useful data or routines.
  
! ‘Ada.Assertions’ ‘(11.4.2)’
  
       ‘Assertions’ provides the ‘Assert’ subprograms, and also the
       declaration of the ‘Assertion_Error’ exception.
  
! ‘Ada.Asynchronous_Task_Control’ ‘(D.11)’
  
       ‘Asynchronous_Task_Control’ provides low level facilities for task
       synchronization.  It is typically not implemented.  See package
       spec for details.
  
! ‘Ada.Calendar’ ‘(9.6)’
  
       ‘Calendar’ provides time of day access, and routines for
       manipulating times and durations.
  
! ‘Ada.Calendar.Arithmetic’ ‘(9.6.1)’
  
       This package provides additional arithmetic operations for
       ‘Calendar’.
  
! ‘Ada.Calendar.Formatting’ ‘(9.6.1)’
  
       This package provides formatting operations for ‘Calendar’.
  
! ‘Ada.Calendar.Time_Zones’ ‘(9.6.1)’
  
       This package provides additional ‘Calendar’ facilities for handling
       time zones.
  
! ‘Ada.Characters’ ‘(A.3.1)’
  
       This is a dummy parent package that contains no useful entities
  
! ‘Ada.Characters.Conversions’ ‘(A.3.2)’
  
       This package provides character conversion functions.
  
! ‘Ada.Characters.Handling’ ‘(A.3.2)’
  
       This package provides some basic character handling capabilities,
       including classification functions for classes of characters (e.g.,
       test for letters, or digits).
  
! ‘Ada.Characters.Latin_1’ ‘(A.3.3)’
  
       This package includes a complete set of definitions of the
       characters that appear in type CHARACTER. It is useful for writing
--- 17372,17428 ----
  Unimplemented_Unit, and in this case the package declaration contains
  comments explaining why the unit is not implemented.
  
! ‘Ada’ '(A.2)'
  
       This is a parent package for all the standard library packages.  It
       is usually included implicitly in your program, and itself contains
       no useful data or routines.
  
! ‘Ada.Assertions’ '(11.4.2)'
  
       ‘Assertions’ provides the ‘Assert’ subprograms, and also the
       declaration of the ‘Assertion_Error’ exception.
  
! ‘Ada.Asynchronous_Task_Control’ '(D.11)'
  
       ‘Asynchronous_Task_Control’ provides low level facilities for task
       synchronization.  It is typically not implemented.  See package
       spec for details.
  
! ‘Ada.Calendar’ '(9.6)'
  
       ‘Calendar’ provides time of day access, and routines for
       manipulating times and durations.
  
! ‘Ada.Calendar.Arithmetic’ '(9.6.1)'
  
       This package provides additional arithmetic operations for
       ‘Calendar’.
  
! ‘Ada.Calendar.Formatting’ '(9.6.1)'
  
       This package provides formatting operations for ‘Calendar’.
  
! ‘Ada.Calendar.Time_Zones’ '(9.6.1)'
  
       This package provides additional ‘Calendar’ facilities for handling
       time zones.
  
! ‘Ada.Characters’ '(A.3.1)'
  
       This is a dummy parent package that contains no useful entities
  
! ‘Ada.Characters.Conversions’ '(A.3.2)'
  
       This package provides character conversion functions.
  
! ‘Ada.Characters.Handling’ '(A.3.2)'
  
       This package provides some basic character handling capabilities,
       including classification functions for classes of characters (e.g.,
       test for letters, or digits).
  
! ‘Ada.Characters.Latin_1’ '(A.3.3)'
  
       This package includes a complete set of definitions of the
       characters that appear in type CHARACTER. It is useful for writing
*************** comments explaining why the unit is not
*** 17432,17629 ****
       Then your program will print in an understandable manner even if
       your environment does not support these extended characters.
  
! ‘Ada.Command_Line’ ‘(A.15)’
  
       This package provides access to the command line parameters and the
       name of the current program (analogous to the use of ‘argc’ and
       ‘argv’ in C), and also allows the exit status for the program to be
       set in a system-independent manner.
  
! ‘Ada.Complex_Text_IO’ ‘(G.1.3)’
  
       This package provides text input and output of complex numbers.
  
! ‘Ada.Containers’ ‘(A.18.1)’
  
       A top level package providing a few basic definitions used by all
       the following specific child packages that provide specific kinds
       of containers.
  
! ‘Ada.Containers.Bounded_Priority_Queues’ ‘(A.18.31)’
  
! ‘Ada.Containers.Bounded_Synchronized_Queues’ ‘(A.18.29)’
  
! ‘Ada.Containers.Doubly_Linked_Lists’ ‘(A.18.3)’
  
! ‘Ada.Containers.Generic_Array_Sort’ ‘(A.18.26)’
  
! ‘Ada.Containers.Generic_Constrained_Array_Sort’ ‘(A.18.26)’
  
! ‘Ada.Containers.Generic_Sort’ ‘(A.18.26)’
  
! ‘Ada.Containers.Hashed_Maps’ ‘(A.18.5)’
  
! ‘Ada.Containers.Hashed_Sets’ ‘(A.18.8)’
  
! ‘Ada.Containers.Indefinite_Doubly_Linked_Lists’ ‘(A.18.12)’
  
! ‘Ada.Containers.Indefinite_Hashed_Maps’ ‘(A.18.13)’
  
! ‘Ada.Containers.Indefinite_Hashed_Sets’ ‘(A.18.15)’
  
! ‘Ada.Containers.Indefinite_Holders’ ‘(A.18.18)’
  
! ‘Ada.Containers.Indefinite_Multiway_Trees’ ‘(A.18.17)’
  
! ‘Ada.Containers.Indefinite_Ordered_Maps’ ‘(A.18.14)’
  
! ‘Ada.Containers.Indefinite_Ordered_Sets’ ‘(A.18.16)’
  
! ‘Ada.Containers.Indefinite_Vectors’ ‘(A.18.11)’
  
! ‘Ada.Containers.Multiway_Trees’ ‘(A.18.10)’
  
! ‘Ada.Containers.Ordered_Maps’ ‘(A.18.6)’
  
! ‘Ada.Containers.Ordered_Sets’ ‘(A.18.9)’
  
! ‘Ada.Containers.Synchronized_Queue_Interfaces’ ‘(A.18.27)’
  
! ‘Ada.Containers.Unbounded_Priority_Queues’ ‘(A.18.30)’
  
! ‘Ada.Containers.Unbounded_Synchronized_Queues’ ‘(A.18.28)’
  
! ‘Ada.Containers.Vectors’ ‘(A.18.2)’
  
! ‘Ada.Directories’ ‘(A.16)’
  
       This package provides operations on directories.
  
! ‘Ada.Directories.Hierarchical_File_Names’ ‘(A.16.1)’
  
       This package provides additional directory operations handling
       hierarchical file names.
  
! ‘Ada.Directories.Information’ ‘(A.16)’
  
       This is an implementation defined package for additional directory
       operations, which is not implemented in GNAT.
  
! ‘Ada.Decimal’ ‘(F.2)’
  
       This package provides constants describing the range of decimal
       numbers implemented, and also a decimal divide routine (analogous
       to the COBOL verb DIVIDE … GIVING … REMAINDER …)
  
! ‘Ada.Direct_IO’ ‘(A.8.4)’
  
       This package provides input-output using a model of a set of
       records of fixed-length, containing an arbitrary definite Ada type,
       indexed by an integer record number.
  
! ‘Ada.Dispatching’ ‘(D.2.1)’
  
       A parent package containing definitions for task dispatching
       operations.
  
! ‘Ada.Dispatching.EDF’ ‘(D.2.6)’
  
       Not implemented in GNAT.
  
! ‘Ada.Dispatching.Non_Preemptive’ ‘(D.2.4)’
  
       Not implemented in GNAT.
  
! ‘Ada.Dispatching.Round_Robin’ ‘(D.2.5)’
  
       Not implemented in GNAT.
  
! ‘Ada.Dynamic_Priorities’ ‘(D.5)’
  
       This package allows the priorities of a task to be adjusted
       dynamically as the task is running.
  
! ‘Ada.Environment_Variables’ ‘(A.17)’
  
       This package provides facilities for accessing environment
       variables.
  
! ‘Ada.Exceptions’ ‘(11.4.1)’
  
       This package provides additional information on exceptions, and
       also contains facilities for treating exceptions as data objects,
       and raising exceptions with associated messages.
  
! ‘Ada.Execution_Time’ ‘(D.14)’
  
       This package provides CPU clock functionalities.  It is not
       implemented on all targets (see package spec for details).
  
! ‘Ada.Execution_Time.Group_Budgets’ ‘(D.14.2)’
  
       Not implemented in GNAT.
  
! ‘Ada.Execution_Time.Timers’ ‘(D.14.1)’’
  
       Not implemented in GNAT.
  
! ‘Ada.Finalization’ ‘(7.6)’
  
       This package contains the declarations and subprograms to support
       the use of controlled types, providing for automatic initialization
       and finalization (analogous to the constructors and destructors of
       C++).
  
! ‘Ada.Float_Text_IO’ ‘(A.10.9)’
  
       A library level instantiation of Text_IO.Float_IO for type Float.
  
! ‘Ada.Float_Wide_Text_IO’ ‘(A.10.9)’
  
       A library level instantiation of Wide_Text_IO.Float_IO for type
       Float.
  
! ‘Ada.Float_Wide_Wide_Text_IO’ ‘(A.10.9)’
  
       A library level instantiation of Wide_Wide_Text_IO.Float_IO for
       type Float.
  
! ‘Ada.Integer_Text_IO’ ‘(A.10.9)’
  
       A library level instantiation of Text_IO.Integer_IO for type
       Integer.
  
! ‘Ada.Integer_Wide_Text_IO’ ‘(A.10.9)’
  
       A library level instantiation of Wide_Text_IO.Integer_IO for type
       Integer.
  
! ‘Ada.Integer_Wide_Wide_Text_IO’ ‘(A.10.9)’
  
       A library level instantiation of Wide_Wide_Text_IO.Integer_IO for
       type Integer.
  
! ‘Ada.Interrupts’ ‘(C.3.2)’
  
       This package provides facilities for interfacing to interrupts,
       which includes the set of signals or conditions that can be raised
       and recognized as interrupts.
  
! ‘Ada.Interrupts.Names’ ‘(C.3.2)’
  
       This package provides the set of interrupt names (actually signal
       or condition names) that can be handled by GNAT.
  
! ‘Ada.IO_Exceptions’ ‘(A.13)’
  
       This package defines the set of exceptions that can be raised by
       use of the standard IO packages.
  
! ‘Ada.Iterator_Interfaces’ ‘(5.5.1)’
  
       This package provides a generic interface to generalized iterators.
  
! ‘Ada.Locales’ ‘(A.19)’
  
       This package provides declarations providing information (Language
       and Country) about the current locale.
--- 17432,17629 ----
       Then your program will print in an understandable manner even if
       your environment does not support these extended characters.
  
! ‘Ada.Command_Line’ '(A.15)'
  
       This package provides access to the command line parameters and the
       name of the current program (analogous to the use of ‘argc’ and
       ‘argv’ in C), and also allows the exit status for the program to be
       set in a system-independent manner.
  
! ‘Ada.Complex_Text_IO’ '(G.1.3)'
  
       This package provides text input and output of complex numbers.
  
! ‘Ada.Containers’ '(A.18.1)'
  
       A top level package providing a few basic definitions used by all
       the following specific child packages that provide specific kinds
       of containers.
  
! ‘Ada.Containers.Bounded_Priority_Queues’ '(A.18.31)'
  
! ‘Ada.Containers.Bounded_Synchronized_Queues’ '(A.18.29)'
  
! ‘Ada.Containers.Doubly_Linked_Lists’ '(A.18.3)'
  
! ‘Ada.Containers.Generic_Array_Sort’ '(A.18.26)'
  
! ‘Ada.Containers.Generic_Constrained_Array_Sort’ '(A.18.26)'
  
! ‘Ada.Containers.Generic_Sort’ '(A.18.26)'
  
! ‘Ada.Containers.Hashed_Maps’ '(A.18.5)'
  
! ‘Ada.Containers.Hashed_Sets’ '(A.18.8)'
  
! ‘Ada.Containers.Indefinite_Doubly_Linked_Lists’ '(A.18.12)'
  
! ‘Ada.Containers.Indefinite_Hashed_Maps’ '(A.18.13)'
  
! ‘Ada.Containers.Indefinite_Hashed_Sets’ '(A.18.15)'
  
! ‘Ada.Containers.Indefinite_Holders’ '(A.18.18)'
  
! ‘Ada.Containers.Indefinite_Multiway_Trees’ '(A.18.17)'
  
! ‘Ada.Containers.Indefinite_Ordered_Maps’ '(A.18.14)'
  
! ‘Ada.Containers.Indefinite_Ordered_Sets’ '(A.18.16)'
  
! ‘Ada.Containers.Indefinite_Vectors’ '(A.18.11)'
  
! ‘Ada.Containers.Multiway_Trees’ '(A.18.10)'
  
! ‘Ada.Containers.Ordered_Maps’ '(A.18.6)'
  
! ‘Ada.Containers.Ordered_Sets’ '(A.18.9)'
  
! ‘Ada.Containers.Synchronized_Queue_Interfaces’ '(A.18.27)'
  
! ‘Ada.Containers.Unbounded_Priority_Queues’ '(A.18.30)'
  
! ‘Ada.Containers.Unbounded_Synchronized_Queues’ '(A.18.28)'
  
! ‘Ada.Containers.Vectors’ '(A.18.2)'
  
! ‘Ada.Directories’ '(A.16)'
  
       This package provides operations on directories.
  
! ‘Ada.Directories.Hierarchical_File_Names’ '(A.16.1)'
  
       This package provides additional directory operations handling
       hierarchical file names.
  
! ‘Ada.Directories.Information’ '(A.16)'
  
       This is an implementation defined package for additional directory
       operations, which is not implemented in GNAT.
  
! ‘Ada.Decimal’ '(F.2)'
  
       This package provides constants describing the range of decimal
       numbers implemented, and also a decimal divide routine (analogous
       to the COBOL verb DIVIDE … GIVING … REMAINDER …)
  
! ‘Ada.Direct_IO’ '(A.8.4)'
  
       This package provides input-output using a model of a set of
       records of fixed-length, containing an arbitrary definite Ada type,
       indexed by an integer record number.
  
! ‘Ada.Dispatching’ '(D.2.1)'
  
       A parent package containing definitions for task dispatching
       operations.
  
! ‘Ada.Dispatching.EDF’ '(D.2.6)'
  
       Not implemented in GNAT.
  
! ‘Ada.Dispatching.Non_Preemptive’ '(D.2.4)'
  
       Not implemented in GNAT.
  
! ‘Ada.Dispatching.Round_Robin’ '(D.2.5)'
  
       Not implemented in GNAT.
  
! ‘Ada.Dynamic_Priorities’ '(D.5)'
  
       This package allows the priorities of a task to be adjusted
       dynamically as the task is running.
  
! ‘Ada.Environment_Variables’ '(A.17)'
  
       This package provides facilities for accessing environment
       variables.
  
! ‘Ada.Exceptions’ '(11.4.1)'
  
       This package provides additional information on exceptions, and
       also contains facilities for treating exceptions as data objects,
       and raising exceptions with associated messages.
  
! ‘Ada.Execution_Time’ '(D.14)'
  
       This package provides CPU clock functionalities.  It is not
       implemented on all targets (see package spec for details).
  
! ‘Ada.Execution_Time.Group_Budgets’ '(D.14.2)'
  
       Not implemented in GNAT.
  
! ‘Ada.Execution_Time.Timers’ '(D.14.1)’'
  
       Not implemented in GNAT.
  
! ‘Ada.Finalization’ '(7.6)'
  
       This package contains the declarations and subprograms to support
       the use of controlled types, providing for automatic initialization
       and finalization (analogous to the constructors and destructors of
       C++).
  
! ‘Ada.Float_Text_IO’ '(A.10.9)'
  
       A library level instantiation of Text_IO.Float_IO for type Float.
  
! ‘Ada.Float_Wide_Text_IO’ '(A.10.9)'
  
       A library level instantiation of Wide_Text_IO.Float_IO for type
       Float.
  
! ‘Ada.Float_Wide_Wide_Text_IO’ '(A.10.9)'
  
       A library level instantiation of Wide_Wide_Text_IO.Float_IO for
       type Float.
  
! ‘Ada.Integer_Text_IO’ '(A.10.9)'
  
       A library level instantiation of Text_IO.Integer_IO for type
       Integer.
  
! ‘Ada.Integer_Wide_Text_IO’ '(A.10.9)'
  
       A library level instantiation of Wide_Text_IO.Integer_IO for type
       Integer.
  
! ‘Ada.Integer_Wide_Wide_Text_IO’ '(A.10.9)'
  
       A library level instantiation of Wide_Wide_Text_IO.Integer_IO for
       type Integer.
  
! ‘Ada.Interrupts’ '(C.3.2)'
  
       This package provides facilities for interfacing to interrupts,
       which includes the set of signals or conditions that can be raised
       and recognized as interrupts.
  
! ‘Ada.Interrupts.Names’ '(C.3.2)'
  
       This package provides the set of interrupt names (actually signal
       or condition names) that can be handled by GNAT.
  
! ‘Ada.IO_Exceptions’ '(A.13)'
  
       This package defines the set of exceptions that can be raised by
       use of the standard IO packages.
  
! ‘Ada.Iterator_Interfaces’ '(5.5.1)'
  
       This package provides a generic interface to generalized iterators.
  
! ‘Ada.Locales’ '(A.19)'
  
       This package provides declarations providing information (Language
       and Country) about the current locale.
*************** comments explaining why the unit is not
*** 17635,17641 ****
       are defined here, and it is better to use these definitions than
       rolling your own.
  
! ‘Ada.Numerics.Complex_Arrays’ ‘(G.3.2)’
  
       Provides operations on arrays of complex numbers.
  
--- 17635,17641 ----
       are defined here, and it is better to use these definitions than
       rolling your own.
  
! ‘Ada.Numerics.Complex_Arrays’ '(G.3.2)'
  
       Provides operations on arrays of complex numbers.
  
*************** comments explaining why the unit is not
*** 17724,17738 ****
  
            ‘Ada.Numerics.Long_Elementary_Functions’
  
! ‘Ada.Numerics.Generic_Real_Arrays’ ‘(G.3.1)’
  
       Generic operations on arrays of reals
  
! ‘Ada.Numerics.Real_Arrays’ ‘(G.3.1)’
  
       Preinstantiation of Ada.Numerics.Generic_Real_Arrays (Float).
  
! ‘Ada.Real_Time’ ‘(D.8)’
  
       This package provides facilities similar to those of ‘Calendar’,
       but operating with a finer clock suitable for real time control.
--- 17724,17738 ----
  
            ‘Ada.Numerics.Long_Elementary_Functions’
  
! ‘Ada.Numerics.Generic_Real_Arrays’ '(G.3.1)'
  
       Generic operations on arrays of reals
  
! ‘Ada.Numerics.Real_Arrays’ '(G.3.1)'
  
       Preinstantiation of Ada.Numerics.Generic_Real_Arrays (Float).
  
! ‘Ada.Real_Time’ '(D.8)'
  
       This package provides facilities similar to those of ‘Calendar’,
       but operating with a finer clock suitable for real time control.
*************** comments explaining why the unit is not
*** 17741,17769 ****
       external clock on which the GNAT runtime depends is deliberately
       reset by some external event, then such a backward jump may occur.
  
! ‘Ada.Real_Time.Timing_Events’ ‘(D.15)’
  
       Not implemented in GNAT.
  
! ‘Ada.Sequential_IO’ ‘(A.8.1)’
  
       This package provides input-output facilities for sequential files,
       which can contain a sequence of values of a single type, which can
       be any Ada type, including indefinite (unconstrained) types.
  
! ‘Ada.Storage_IO’ ‘(A.9)’
  
       This package provides a facility for mapping arbitrary Ada types to
       and from a storage buffer.  It is primarily intended for the
       creation of new IO packages.
  
! ‘Ada.Streams’ ‘(13.13.1)’
  
       This is a generic package that provides the basic support for the
       concept of streams as used by the stream attributes (‘Input’,
       ‘Output’, ‘Read’ and ‘Write’).
  
! ‘Ada.Streams.Stream_IO’ ‘(A.12.1)’
  
       This package is a specialization of the type ‘Streams’ defined in
       package ‘Streams’ together with a set of operations providing
--- 17741,17769 ----
       external clock on which the GNAT runtime depends is deliberately
       reset by some external event, then such a backward jump may occur.
  
! ‘Ada.Real_Time.Timing_Events’ '(D.15)'
  
       Not implemented in GNAT.
  
! ‘Ada.Sequential_IO’ '(A.8.1)'
  
       This package provides input-output facilities for sequential files,
       which can contain a sequence of values of a single type, which can
       be any Ada type, including indefinite (unconstrained) types.
  
! ‘Ada.Storage_IO’ '(A.9)'
  
       This package provides a facility for mapping arbitrary Ada types to
       and from a storage buffer.  It is primarily intended for the
       creation of new IO packages.
  
! ‘Ada.Streams’ '(13.13.1)'
  
       This is a generic package that provides the basic support for the
       concept of streams as used by the stream attributes (‘Input’,
       ‘Output’, ‘Read’ and ‘Write’).
  
! ‘Ada.Streams.Stream_IO’ '(A.12.1)'
  
       This package is a specialization of the type ‘Streams’ defined in
       package ‘Streams’ together with a set of operations providing
*************** comments explaining why the unit is not
*** 17771,17851 ****
       sequential access to a file which can contain an arbitrary set of
       values of one or more Ada types.
  
! ‘Ada.Strings’ ‘(A.4.1)’
  
       This package provides some basic constants used by the string
       handling packages.
  
! ‘Ada.Strings.Bounded’ ‘(A.4.4)’
  
       This package provides facilities for handling variable length
       strings.  The bounded model requires a maximum length.  It is thus
       somewhat more limited than the unbounded model, but avoids the use
       of dynamic allocation or finalization.
  
! ‘Ada.Strings.Bounded.Equal_Case_Insensitive’ ‘(A.4.10)’
  
       Provides case-insensitive comparisons of bounded strings
  
! ‘Ada.Strings.Bounded.Hash’ ‘(A.4.9)’
  
       This package provides a generic hash function for bounded strings
  
! ‘Ada.Strings.Bounded.Hash_Case_Insensitive’ ‘(A.4.9)’
  
       This package provides a generic hash function for bounded strings
       that converts the string to be hashed to lower case.
  
! ‘Ada.Strings.Bounded.Less_Case_Insensitive’ ‘(A.4.10)’
  
       This package provides a comparison function for bounded strings
       that works in a case insensitive manner by converting to lower case
       before the comparison.
  
! ‘Ada.Strings.Fixed’ ‘(A.4.3)’
  
       This package provides facilities for handling fixed length strings.
  
! ‘Ada.Strings.Fixed.Equal_Case_Insensitive’ ‘(A.4.10)’
  
       This package provides an equality function for fixed strings that
       compares the strings after converting both to lower case.
  
! ‘Ada.Strings.Fixed.Hash_Case_Insensitive’ ‘(A.4.9)’
  
       This package provides a case insensitive hash function for fixed
       strings that converts the string to lower case before computing the
       hash.
  
! ‘Ada.Strings.Fixed.Less_Case_Insensitive’ ‘(A.4.10)’
  
       This package provides a comparison function for fixed strings that
       works in a case insensitive manner by converting to lower case
       before the comparison.
  
! ‘Ada.Strings.Hash’ ‘(A.4.9)’
  
       This package provides a hash function for strings.
  
! ‘Ada.Strings.Hash_Case_Insensitive’ ‘(A.4.9)’
  
       This package provides a hash function for strings that is case
       insensitive.  The string is converted to lower case before
       computing the hash.
  
! ‘Ada.Strings.Less_Case_Insensitive’ ‘(A.4.10)’
  
       This package provides a comparison function for\strings that works
       in a case insensitive manner by converting to lower case before the
       comparison.
  
! ‘Ada.Strings.Maps’ ‘(A.4.2)’
  
       This package provides facilities for handling character mappings
       and arbitrarily defined subsets of characters.  For instance it is
       useful in defining specialized translation tables.
  
! ‘Ada.Strings.Maps.Constants’ ‘(A.4.6)’
  
       This package provides a standard set of predefined mappings and
       predefined character sets.  For example, the standard upper to
--- 17771,17851 ----
       sequential access to a file which can contain an arbitrary set of
       values of one or more Ada types.
  
! ‘Ada.Strings’ '(A.4.1)'
  
       This package provides some basic constants used by the string
       handling packages.
  
! ‘Ada.Strings.Bounded’ '(A.4.4)'
  
       This package provides facilities for handling variable length
       strings.  The bounded model requires a maximum length.  It is thus
       somewhat more limited than the unbounded model, but avoids the use
       of dynamic allocation or finalization.
  
! ‘Ada.Strings.Bounded.Equal_Case_Insensitive’ '(A.4.10)'
  
       Provides case-insensitive comparisons of bounded strings
  
! ‘Ada.Strings.Bounded.Hash’ '(A.4.9)'
  
       This package provides a generic hash function for bounded strings
  
! ‘Ada.Strings.Bounded.Hash_Case_Insensitive’ '(A.4.9)'
  
       This package provides a generic hash function for bounded strings
       that converts the string to be hashed to lower case.
  
! ‘Ada.Strings.Bounded.Less_Case_Insensitive’ '(A.4.10)'
  
       This package provides a comparison function for bounded strings
       that works in a case insensitive manner by converting to lower case
       before the comparison.
  
! ‘Ada.Strings.Fixed’ '(A.4.3)'
  
       This package provides facilities for handling fixed length strings.
  
! ‘Ada.Strings.Fixed.Equal_Case_Insensitive’ '(A.4.10)'
  
       This package provides an equality function for fixed strings that
       compares the strings after converting both to lower case.
  
! ‘Ada.Strings.Fixed.Hash_Case_Insensitive’ '(A.4.9)'
  
       This package provides a case insensitive hash function for fixed
       strings that converts the string to lower case before computing the
       hash.
  
! ‘Ada.Strings.Fixed.Less_Case_Insensitive’ '(A.4.10)'
  
       This package provides a comparison function for fixed strings that
       works in a case insensitive manner by converting to lower case
       before the comparison.
  
! ‘Ada.Strings.Hash’ '(A.4.9)'
  
       This package provides a hash function for strings.
  
! ‘Ada.Strings.Hash_Case_Insensitive’ '(A.4.9)'
  
       This package provides a hash function for strings that is case
       insensitive.  The string is converted to lower case before
       computing the hash.
  
! ‘Ada.Strings.Less_Case_Insensitive’ '(A.4.10)'
  
       This package provides a comparison function for\strings that works
       in a case insensitive manner by converting to lower case before the
       comparison.
  
! ‘Ada.Strings.Maps’ '(A.4.2)'
  
       This package provides facilities for handling character mappings
       and arbitrarily defined subsets of characters.  For instance it is
       useful in defining specialized translation tables.
  
! ‘Ada.Strings.Maps.Constants’ '(A.4.6)'
  
       This package provides a standard set of predefined mappings and
       predefined character sets.  For example, the standard upper to
*************** comments explaining why the unit is not
*** 17855,17940 ****
       with an acute accent, into account.  You should use the mappings in
       this package (rather than adding 32 yourself) to do case mappings.
  
! ‘Ada.Strings.Unbounded’ ‘(A.4.5)’
  
       This package provides facilities for handling variable length
       strings.  The unbounded model allows arbitrary length strings, but
       requires the use of dynamic allocation and finalization.
  
! ‘Ada.Strings.Unbounded.Equal_Case_Insensitive’ ‘(A.4.10)’
  
       Provides case-insensitive comparisons of unbounded strings
  
! ‘Ada.Strings.Unbounded.Hash’ ‘(A.4.9)’
  
       This package provides a generic hash function for unbounded strings
  
! ‘Ada.Strings.Unbounded.Hash_Case_Insensitive’ ‘(A.4.9)’
  
       This package provides a generic hash function for unbounded strings
       that converts the string to be hashed to lower case.
  
! ‘Ada.Strings.Unbounded.Less_Case_Insensitive’ ‘(A.4.10)’
  
       This package provides a comparison function for unbounded strings
       that works in a case insensitive manner by converting to lower case
       before the comparison.
  
! ‘Ada.Strings.UTF_Encoding’ ‘(A.4.11)’
  
       This package provides basic definitions for dealing with
       UTF-encoded strings.
  
! ‘Ada.Strings.UTF_Encoding.Conversions’ ‘(A.4.11)’
  
       This package provides conversion functions for UTF-encoded strings.
  
! ‘Ada.Strings.UTF_Encoding.Strings’ ‘(A.4.11)’
  
! ‘Ada.Strings.UTF_Encoding.Wide_Strings’ ‘(A.4.11)’
  
! ‘Ada.Strings.UTF_Encoding.Wide_Wide_Strings’ ‘(A.4.11)’
  
       These packages provide facilities for handling UTF encodings for
       Strings, Wide_Strings and Wide_Wide_Strings.
  
! ‘Ada.Strings.Wide_Bounded’ ‘(A.4.7)’
  
! ‘Ada.Strings.Wide_Fixed’ ‘(A.4.7)’
  
! ‘Ada.Strings.Wide_Maps’ ‘(A.4.7)’
  
! ‘Ada.Strings.Wide_Unbounded’ ‘(A.4.7)’
  
       These packages provide analogous capabilities to the corresponding
       packages without ‘Wide_’ in the name, but operate with the types
       ‘Wide_String’ and ‘Wide_Character’ instead of ‘String’ and
       ‘Character’.  Versions of all the child packages are available.
  
! ‘Ada.Strings.Wide_Wide_Bounded’ ‘(A.4.7)’
  
! ‘Ada.Strings.Wide_Wide_Fixed’ ‘(A.4.7)’
  
! ‘Ada.Strings.Wide_Wide_Maps’ ‘(A.4.7)’
  
! ‘Ada.Strings.Wide_Wide_Unbounded’ ‘(A.4.7)’
  
       These packages provide analogous capabilities to the corresponding
       packages without ‘Wide_’ in the name, but operate with the types
       ‘Wide_Wide_String’ and ‘Wide_Wide_Character’ instead of ‘String’
       and ‘Character’.
  
! ‘Ada.Synchronous_Barriers’ ‘(D.10.1)’
  
       This package provides facilities for synchronizing tasks at a low
       level with barriers.
  
! ‘Ada.Synchronous_Task_Control’ ‘(D.10)’
  
       This package provides some standard facilities for controlling task
       communication in a synchronous manner.
  
! ‘Ada.Synchronous_Task_Control.EDF’ ‘(D.10)’
  
       Not implemented in GNAT.
  
--- 17855,17940 ----
       with an acute accent, into account.  You should use the mappings in
       this package (rather than adding 32 yourself) to do case mappings.
  
! ‘Ada.Strings.Unbounded’ '(A.4.5)'
  
       This package provides facilities for handling variable length
       strings.  The unbounded model allows arbitrary length strings, but
       requires the use of dynamic allocation and finalization.
  
! ‘Ada.Strings.Unbounded.Equal_Case_Insensitive’ '(A.4.10)'
  
       Provides case-insensitive comparisons of unbounded strings
  
! ‘Ada.Strings.Unbounded.Hash’ '(A.4.9)'
  
       This package provides a generic hash function for unbounded strings
  
! ‘Ada.Strings.Unbounded.Hash_Case_Insensitive’ '(A.4.9)'
  
       This package provides a generic hash function for unbounded strings
       that converts the string to be hashed to lower case.
  
! ‘Ada.Strings.Unbounded.Less_Case_Insensitive’ '(A.4.10)'
  
       This package provides a comparison function for unbounded strings
       that works in a case insensitive manner by converting to lower case
       before the comparison.
  
! ‘Ada.Strings.UTF_Encoding’ '(A.4.11)'
  
       This package provides basic definitions for dealing with
       UTF-encoded strings.
  
! ‘Ada.Strings.UTF_Encoding.Conversions’ '(A.4.11)'
  
       This package provides conversion functions for UTF-encoded strings.
  
! ‘Ada.Strings.UTF_Encoding.Strings’ '(A.4.11)'
  
! ‘Ada.Strings.UTF_Encoding.Wide_Strings’ '(A.4.11)'
  
! ‘Ada.Strings.UTF_Encoding.Wide_Wide_Strings’ '(A.4.11)'
  
       These packages provide facilities for handling UTF encodings for
       Strings, Wide_Strings and Wide_Wide_Strings.
  
! ‘Ada.Strings.Wide_Bounded’ '(A.4.7)'
  
! ‘Ada.Strings.Wide_Fixed’ '(A.4.7)'
  
! ‘Ada.Strings.Wide_Maps’ '(A.4.7)'
  
! ‘Ada.Strings.Wide_Unbounded’ '(A.4.7)'
  
       These packages provide analogous capabilities to the corresponding
       packages without ‘Wide_’ in the name, but operate with the types
       ‘Wide_String’ and ‘Wide_Character’ instead of ‘String’ and
       ‘Character’.  Versions of all the child packages are available.
  
! ‘Ada.Strings.Wide_Wide_Bounded’ '(A.4.7)'
  
! ‘Ada.Strings.Wide_Wide_Fixed’ '(A.4.7)'
  
! ‘Ada.Strings.Wide_Wide_Maps’ '(A.4.7)'
  
! ‘Ada.Strings.Wide_Wide_Unbounded’ '(A.4.7)'
  
       These packages provide analogous capabilities to the corresponding
       packages without ‘Wide_’ in the name, but operate with the types
       ‘Wide_Wide_String’ and ‘Wide_Wide_Character’ instead of ‘String’
       and ‘Character’.
  
! ‘Ada.Synchronous_Barriers’ '(D.10.1)'
  
       This package provides facilities for synchronizing tasks at a low
       level with barriers.
  
! ‘Ada.Synchronous_Task_Control’ '(D.10)'
  
       This package provides some standard facilities for controlling task
       communication in a synchronous manner.
  
! ‘Ada.Synchronous_Task_Control.EDF’ '(D.10)'
  
       Not implemented in GNAT.
  
*************** comments explaining why the unit is not
*** 17943,17963 ****
       This package contains definitions for manipulation of the tags of
       tagged values.
  
! ‘Ada.Tags.Generic_Dispatching_Constructor’ ‘(3.9)’
  
       This package provides a way of constructing tagged class-wide
       values given only the tag value.
  
! ‘Ada.Task_Attributes’ ‘(C.7.2)’
  
       This package provides the capability of associating arbitrary
       task-specific data with separate tasks.
  
! ‘Ada.Task_Identification’ ‘(C.7.1)’
  
       This package provides capabilities for task identification.
  
! ‘Ada.Task_Termination’ ‘(C.7.3)’
  
       This package provides control over task termination.
  
--- 17943,17963 ----
       This package contains definitions for manipulation of the tags of
       tagged values.
  
! ‘Ada.Tags.Generic_Dispatching_Constructor’ '(3.9)'
  
       This package provides a way of constructing tagged class-wide
       values given only the tag value.
  
! ‘Ada.Task_Attributes’ '(C.7.2)'
  
       This package provides the capability of associating arbitrary
       task-specific data with separate tasks.
  
! ‘Ada.Task_Identification’ '(C.7.1)'
  
       This package provides capabilities for task identification.
  
! ‘Ada.Task_Termination’ '(C.7.3)'
  
       This package provides control over task termination.
  
*************** comments explaining why the unit is not
*** 18109,18120 ****
       with pointers to unconstrained objects, since the bounds
       information cannot be handled correctly in this case.
  
! ‘Ada.Unchecked_Deallocation’ ‘(13.11.2)’
  
       This generic package allows explicit freeing of storage previously
       allocated by use of an allocator.
  
! ‘Ada.Wide_Text_IO’ ‘(A.11)’
  
       This package is similar to ‘Ada.Text_IO’, except that the external
       file supports wide character representations, and the internal
--- 18109,18120 ----
       with pointers to unconstrained objects, since the bounds
       information cannot be handled correctly in this case.
  
! ‘Ada.Unchecked_Deallocation’ '(13.11.2)'
  
       This generic package allows explicit freeing of storage previously
       allocated by use of an allocator.
  
! ‘Ada.Wide_Text_IO’ '(A.11)'
  
       This package is similar to ‘Ada.Text_IO’, except that the external
       file supports wide character representations, and the internal
*************** comments explaining why the unit is not
*** 18122,18128 ****
       and ‘String’.  The corresponding set of nested packages and child
       packages are defined.
  
! ‘Ada.Wide_Wide_Text_IO’ ‘(A.11)’
  
       This package is similar to ‘Ada.Text_IO’, except that the external
       file supports wide character representations, and the internal
--- 18122,18128 ----
       and ‘String’.  The corresponding set of nested packages and child
       packages are defined.
  
! ‘Ada.Wide_Wide_Text_IO’ '(A.11)'
  
       This package is similar to ‘Ada.Text_IO’, except that the external
       file supports wide character representations, and the internal
*************** Character      Encoding
*** 18569,18590 ****
                 
  ----------------------------------------
                 
! ‘h’            Hex ESC encoding
                 
                 
! ‘u’            Upper half encoding
                 
                 
! ‘s’            Shift-JIS encoding
                 
                 
! ‘e’            EUC Encoding
                 
                 
! ‘8’            UTF-8 encoding
                 
                 
! ‘b’            Brackets encoding
                 
  
  The encoding methods match those that can be used in a source program,
--- 18569,18590 ----
                 
  ----------------------------------------
                 
! 'h'            Hex ESC encoding
                 
                 
! 'u'            Upper half encoding
                 
                 
! 's'            Shift-JIS encoding
                 
                 
! 'e'            EUC Encoding
                 
                 
! '8'            UTF-8 encoding
                 
                 
! 'b'            Brackets encoding
                 
  
  The encoding methods match those that can be used in a source program,
*************** for which no WCEM parameter is given in
*** 18597,18603 ****
  character encoding specified for the main program (the default being
  brackets encoding if no coding method was specified with -gnatW).
  
! ‘Hex Coding’
  
       In this encoding, a wide character is represented by a five
       character sequence:
--- 18597,18603 ----
  character encoding specified for the main program (the default being
  brackets encoding if no coding method was specified with -gnatW).
  
! 'Hex Coding'
  
       In this encoding, a wide character is represented by a five
       character sequence:
*************** brackets encoding if no coding method wa
*** 18610,18616 ****
       This scheme is compatible with use of the full ‘Wide_Character’
       set.
  
! ‘Upper Half Coding’
  
       The wide character with encoding 16#abcd#, where the upper bit is
       on (i.e., a is in the range 8-F) is represented as two bytes 16#ab#
--- 18610,18616 ----
       This scheme is compatible with use of the full ‘Wide_Character’
       set.
  
! 'Upper Half Coding'
  
       The wide character with encoding 16#abcd#, where the upper bit is
       on (i.e., a is in the range 8-F) is represented as two bytes 16#ab#
*************** brackets encoding if no coding method wa
*** 18619,18625 ****
       method can be also used for shift-JIS or EUC where the internal
       coding matches the external coding.
  
! ‘Shift JIS Coding’
  
       A wide character is represented by a two character sequence 16#ab#
       and 16#cd#, with the restrictions described for upper half encoding
--- 18619,18625 ----
       method can be also used for shift-JIS or EUC where the internal
       coding matches the external coding.
  
! 'Shift JIS Coding'
  
       A wide character is represented by a two character sequence 16#ab#
       and 16#cd#, with the restrictions described for upper half encoding
*************** brackets encoding if no coding method wa
*** 18628,18634 ****
       Shift-JIS conversion.  Only characters defined in the JIS code set
       table can be used with this encoding method.
  
! ‘EUC Coding’
  
       A wide character is represented by a two character sequence 16#ab#
       and 16#cd#, with both characters being in the upper half.  The
--- 18628,18634 ----
       Shift-JIS conversion.  Only characters defined in the JIS code set
       table can be used with this encoding method.
  
! 'EUC Coding'
  
       A wide character is represented by a two character sequence 16#ab#
       and 16#cd#, with both characters being in the upper half.  The
*************** brackets encoding if no coding method wa
*** 18636,18642 ****
       according to the EUC encoding algorithm.  Only characters defined
       in the JIS code set table can be used with this encoding method.
  
! ‘UTF-8 Coding’
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
--- 18636,18642 ----
       according to the EUC encoding algorithm.  Only characters defined
       in the JIS code set table can be used with this encoding method.
  
! 'UTF-8 Coding'
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
*************** brackets encoding if no coding method wa
*** 18656,18662 ****
       of four or more bytes length will raise a Constraint_Error, as will
       all invalid UTF-8 sequences.)
  
! ‘Brackets Coding’
  
       In this encoding, a wide character is represented by the following
       eight character sequence:
--- 18656,18662 ----
       of four or more bytes length will raise a Constraint_Error, as will
       all invalid UTF-8 sequences.)
  
! 'Brackets Coding'
  
       In this encoding, a wide character is represented by the following
       eight character sequence:
*************** Character      Encoding
*** 18772,18793 ****
                 
  ----------------------------------------
                 
! ‘h’            Hex ESC encoding
                 
                 
! ‘u’            Upper half encoding
                 
                 
! ‘s’            Shift-JIS encoding
                 
                 
! ‘e’            EUC Encoding
                 
                 
! ‘8’            UTF-8 encoding
                 
                 
! ‘b’            Brackets encoding
                 
  
  The encoding methods match those that can be used in a source program,
--- 18772,18793 ----
                 
  ----------------------------------------
                 
! 'h'            Hex ESC encoding
                 
                 
! 'u'            Upper half encoding
                 
                 
! 's'            Shift-JIS encoding
                 
                 
! 'e'            EUC Encoding
                 
                 
! '8'            UTF-8 encoding
                 
                 
! 'b'            Brackets encoding
                 
  
  The encoding methods match those that can be used in a source program,
*************** for which no WCEM parameter is given in
*** 18800,18806 ****
  character encoding specified for the main program (the default being
  brackets encoding if no coding method was specified with -gnatW).
  
! ‘UTF-8 Coding’
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
--- 18800,18806 ----
  character encoding specified for the main program (the default being
  brackets encoding if no coding method was specified with -gnatW).
  
! 'UTF-8 Coding'
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
*************** brackets encoding if no coding method wa
*** 18818,18824 ****
       other wide characters are represented as sequences of upper-half
       characters.
  
! ‘Brackets Coding’
  
       In this encoding, a wide wide character is represented by the
       following eight character sequence if is in wide character range
--- 18818,18824 ----
       other wide characters are represented as sequences of upper-half
       characters.
  
! 'Brackets Coding'
  
       In this encoding, a wide wide character is represented by the
       following eight character sequence if is in wide character range
*************** In the absence of a ‘encoding=xxx’ f
*** 19007,19017 ****
  controlled by the ‘GNAT_CODE_PAGE’ environment variable.  And if not set
  ‘utf8’ is assumed.
  
! ‘CP_ACP’
  
       The current system Windows ANSI code page.
  
! ‘CP_UTF8’
  
       UTF-8 encoding
  
--- 19007,19017 ----
  controlled by the ‘GNAT_CODE_PAGE’ environment variable.  And if not set
  ‘utf8’ is assumed.
  
! 'CP_ACP'
  
       The current system Windows ANSI code page.
  
! 'CP_UTF8'
  
       UTF-8 encoding
  
*************** if not set ‘TEXT’ is assumed.
*** 19031,19049 ****
  
  The possible values are those supported on Windows:
  
! ‘TEXT’
  
       Translated text mode
  
! ‘WTEXT’
  
       Translated unicode encoding
  
! ‘U16TEXT’
  
       Unicode 16-bit encoding
  
! ‘U8TEXT’
  
       Unicode 8-bit encoding
  
--- 19031,19049 ----
  
  The possible values are those supported on Windows:
  
! 'TEXT'
  
       Translated text mode
  
! 'WTEXT'
  
       Translated unicode encoding
  
! 'U16TEXT'
  
       Unicode 16-bit encoding
  
! 'U8TEXT'
  
       Unicode 8-bit encoding
  
*************** shown in the following table:
*** 19062,19068 ****
  
  ----------------------------------------------------------------------------
                                                       
!                                  ‘OPEN’              ‘CREATE’
                                                       
                                                       
  Append_File                      “r+”                “w+”
--- 19062,19068 ----
  
  ----------------------------------------------------------------------------
                                                       
!                                  'OPEN'              'CREATE'
                                                       
                                                       
  Append_File                      “r+”                “w+”
*************** File: gnat_rm.info,  Node: GNAT CRC32 g-
*** 20017,20024 ****
  ==================================
  
  This package implements the CRC-32 algorithm.  For a full description of
! this algorithm see ‘Computation of Cyclic Redundancy Checks via Table
! Look-Up’, ‘Communications of the ACM’, Vol.  31 No.  8, pp.  1008-1013,
  Aug.  1988.  Sarwate, D.V.
  
  
--- 20017,20024 ----
  ==================================
  
  This package implements the CRC-32 algorithm.  For a full description of
! this algorithm see 'Computation of Cyclic Redundancy Checks via Table
! Look-Up', ‘Communications of the ACM’, Vol.  31 No.  8, pp.  1008-1013,
  Aug.  1988.  Sarwate, D.V.
  
  
*************** Ada 95, Ada 2005, and Ada 2012 define a
*** 21281,21310 ****
  Annexes, which are not required in all implementations.  However, as
  described in this chapter, GNAT implements all of these annexes:
  
! ‘Systems Programming (Annex C)’
  
       The Systems Programming Annex is fully implemented.
  
! ‘Real-Time Systems (Annex D)’
  
       The Real-Time Systems Annex is fully implemented.
  
! ‘Distributed Systems (Annex E)’
  
       Stub generation is fully implemented in the GNAT compiler.  In
       addition, a complete compatible PCS is available as part of the
       GLADE system, a separate product.  When the two products are used
       in conjunction, this annex is fully implemented.
  
! ‘Information Systems (Annex F)’
  
       The Information Systems annex is fully implemented.
  
! ‘Numerics (Annex G)’
  
       The Numerics Annex is fully implemented.
  
! ‘Safety and Security / High-Integrity Systems (Annex H)’
  
       The Safety and Security Annex (termed the High-Integrity Systems
       Annex in Ada 2005) is fully implemented.
--- 21281,21310 ----
  Annexes, which are not required in all implementations.  However, as
  described in this chapter, GNAT implements all of these annexes:
  
! 'Systems Programming (Annex C)'
  
       The Systems Programming Annex is fully implemented.
  
! 'Real-Time Systems (Annex D)'
  
       The Real-Time Systems Annex is fully implemented.
  
! 'Distributed Systems (Annex E)'
  
       Stub generation is fully implemented in the GNAT compiler.  In
       addition, a complete compatible PCS is available as part of the
       GLADE system, a separate product.  When the two products are used
       in conjunction, this annex is fully implemented.
  
! 'Information Systems (Annex F)'
  
       The Information Systems annex is fully implemented.
  
! 'Numerics (Annex G)'
  
       The Numerics Annex is fully implemented.
  
! 'Safety and Security / High-Integrity Systems (Annex H)'
  
       The Safety and Security Annex (termed the High-Integrity Systems
       Annex in Ada 2005) is fully implemented.
*************** provided for GNU C’s symbolic names fo
*** 21404,21410 ****
  If there are no input operands, this argument may either be omitted, or
  explicitly given as ‘No_Input_Operands’.  The fourth argument, not
  present in the above example, is a list of register names, called the
! ‘clobber’ argument.  This argument, if given, must be a static string
  expression, and is a space or comma separated list of names of registers
  that must be considered destroyed as a result of the ‘Asm’ call.  If
  this argument is the null string (the default value), then the code
--- 21404,21410 ----
  If there are no input operands, this argument may either be omitted, or
  explicitly given as ‘No_Input_Operands’.  The fourth argument, not
  present in the above example, is a list of register names, called the
! 'clobber' argument.  This argument, if given, must be a static string
  expression, and is a space or comma separated list of names of registers
  that must be considered destroyed as a result of the ‘Asm’ call.  If
  this argument is the null string (the default value), then the code
*************** addition to registers, the special clobb
*** 21413,21419 ****
  described in the GNU C docs are both supported.
  
  The fifth argument, not present in the above example, called the
! ‘volatile’ argument, is by default ‘False’.  It can be set to the
  literal value ‘True’ to indicate to the code generator that all
  optimizations with respect to the instruction specified should be
  suppressed, and in particular an instruction that has outputs will still
--- 21413,21419 ----
  described in the GNU C docs are both supported.
  
  The fifth argument, not present in the above example, called the
! 'volatile' argument, is by default ‘False’.  It can be set to the
  literal value ‘True’ to indicate to the code generator that all
  optimizations with respect to the instruction specified should be
  suppressed, and in particular an instruction that has outputs will still
*************** respecting the scheduling semantics spec
*** 21561,21573 ****
  For instance the Annex D requirement for the ‘FIFO_Within_Priorities’
  scheduling policy states:
  
!      ‘When the active priority of a ready task that is not running
       changes, or the setting of its base priority takes effect, the task
       is removed from the ready queue for its old active priority and is
       added at the tail of the ready queue for its new active priority,
       except in the case where the active priority is lowered due to the
       loss of inherited priority, in which case the task is added at the
!      head of the ready queue for its new active priority.’
  
  While most kernels do put tasks at the end of the priority queue when a
  task changes its priority, (which respects the main
--- 21561,21573 ----
  For instance the Annex D requirement for the ‘FIFO_Within_Priorities’
  scheduling policy states:
  
!      'When the active priority of a ready task that is not running
       changes, or the setting of its base priority takes effect, the task
       is removed from the ready queue for its old active priority and is
       added at the tail of the ready queue for its new active priority,
       except in the case where the active priority is lowered due to the
       loss of inherited priority, in which case the task is added at the
!      head of the ready queue for its new active priority.'
  
  While most kernels do put tasks at the end of the priority queue when a
  task changes its priority, (which respects the main
*************** application using the features in Annex
*** 21633,21639 ****
  However, the implementation approach used by GNAT provides for more
  extensive usage as follows:
  
! ‘Communication between separate programs’
  
       This allows separate programs to access the data in passive
       partitions, using protected objects for synchronization where
--- 21633,21639 ----
  However, the implementation approach used by GNAT provides for more
  extensive usage as follows:
  
! 'Communication between separate programs'
  
       This allows separate programs to access the data in passive
       partitions, using protected objects for synchronization where
*************** extensive usage as follows:
*** 21643,21649 ****
       different endianness) to communicate via the data in a passive
       partition.
  
! ‘Persistence between program runs’
  
       The data in a passive package can persist from one run of a program
       to another, so that a later program sees the final values stored by
--- 21643,21649 ----
       different endianness) to communicate via the data in a passive
       partition.
  
! 'Persistence between program runs'
  
       The data in a passive package can persist from one run of a program
       to another, so that a later program sees the final values stored by
*************** constraint:
*** 21871,21877 ****
  
       Word : Rec;
  
! Such an object is said to be ‘unconstrained’.  The discriminant of the
  object can be modified by a full assignment to the object, as long as it
  preserves the relation between the value of the discriminant, and the
  value of the components that depend on it:
--- 21871,21877 ----
  
       Word : Rec;
  
! Such an object is said to be 'unconstrained'.  The discriminant of the
  object can be modified by a full assignment to the object, as long as it
  preserves the relation between the value of the discriminant, and the
  value of the components that depend on it:
*************** proper approach is to declare an index t
*** 21915,21921 ****
  that unconstrained objects are not too large.
  
  One final wrinkle: if the object is declared to be ‘aliased’, or if it
! is created in the heap by means of an allocator, then it is ‘not’
  unconstrained: it is constrained by the default values of the
  discriminants, and those values cannot be modified by full assignment.
  This is because in the presence of aliasing all views of the object
--- 21915,21921 ----
  that unconstrained objects are not too large.
  
  One final wrinkle: if the object is declared to be ‘aliased’, or if it
! is created in the heap by means of an allocator, then it is 'not'
  unconstrained: it is constrained by the default values of the
  discriminants, and those values cannot be modified by full assignment.
  This is because in the presence of aliasing all views of the object
*************** default).
*** 21961,21975 ****
  
  Strict conformance to the Ada Reference Manual can be achieved by adding
  two compiler options for dynamic checks for access-before-elaboration on
! subprogram calls and generic instantiations (‘-gnatE’), and stack
! overflow checking (‘-fstack-check’).
  
  Note that the result of a floating point arithmetic operation in
  overflow and invalid situations, when the ‘Machine_Overflows’ attribute
  of the result type is ‘False’, is to generate IEEE NaN and infinite
  values.  This is the case for machines compliant with the IEEE
  floating-point standard, but on machines that are not fully compliant
! with this standard, such as Alpha, the ‘-mieee’ compiler flag must be
  used for achieving IEEE confirming behavior (although at the cost of a
  significant performance penalty), so infinite and NaN values are
  properly generated.
--- 21961,21975 ----
  
  Strict conformance to the Ada Reference Manual can be achieved by adding
  two compiler options for dynamic checks for access-before-elaboration on
! subprogram calls and generic instantiations ('-gnatE'), and stack
! overflow checking ('-fstack-check').
  
  Note that the result of a floating point arithmetic operation in
  overflow and invalid situations, when the ‘Machine_Overflows’ attribute
  of the result type is ‘False’, is to generate IEEE NaN and infinite
  values.  This is the case for machines compliant with the IEEE
  floating-point standard, but on machines that are not fully compliant
! with this standard, such as Alpha, the '-mieee' compiler flag must be
  used for achieving IEEE confirming behavior (although at the cost of a
  significant performance penalty), so infinite and NaN values are
  properly generated.
*************** File: gnat_rm.info,  Node: Implementatio
*** 21982,21988 ****
  
  This chapter contains a complete list of Ada 2012 features that have
  been implemented.  Generally, these features are only available if the
! ‘-gnat12’ (Ada 2012 features enabled) option is set, which is the
  default behavior, or if the configuration pragma ‘Ada_2012’ is used.
  
  However, new pragmas, attributes, and restrictions are unconditionally
--- 21982,21988 ----
  
  This chapter contains a complete list of Ada 2012 features that have
  been implemented.  Generally, these features are only available if the
! '-gnat12' (Ada 2012 features enabled) option is set, which is the
  default behavior, or if the configuration pragma ‘Ada_2012’ is used.
  
  However, new pragmas, attributes, and restrictions are unconditionally
*************** the RM, the earliest is used.
*** 22007,22013 ****
  A complete description of the AIs may be found in
  ‘http://www.ada-auth.org/ai05-summary.html’.
  
!    * ‘AI-0176 Quantified expressions (2010-09-29)’
  
       Both universally and existentially quantified expressions are
       implemented.  They use the new syntax for iterators proposed in
--- 22007,22013 ----
  A complete description of the AIs may be found in
  ‘http://www.ada-auth.org/ai05-summary.html’.
  
!    * 'AI-0176 Quantified expressions (2010-09-29)'
  
       Both universally and existentially quantified expressions are
       implemented.  They use the new syntax for iterators proposed in
*************** A complete description of the AIs may be
*** 22015,22031 ****
  
       RM References: 1.01.04 (12) 2.09 (2/2) 4.04 (7) 4.05.09 (0)
  
!    * ‘AI-0079 Allow other_format characters in source (2010-07-10)’
  
!      Wide characters in the unicode category ‘other_format’ are now
       allowed in source programs between tokens, but not within a token
       such as an identifier.
  
       RM References: 2.01 (4/2) 2.02 (7)
  
!    * ‘AI-0091 Do not allow other_format in identifiers (0000-00-00)’
  
!      Wide characters in the unicode category ‘other_format’ are not
       permitted within an identifier, since this can be a security
       problem.  The error message for this case has been improved to be
       more specific, but GNAT has never allowed such characters to appear
--- 22015,22031 ----
  
       RM References: 1.01.04 (12) 2.09 (2/2) 4.04 (7) 4.05.09 (0)
  
!    * 'AI-0079 Allow other_format characters in source (2010-07-10)'
  
!      Wide characters in the unicode category 'other_format' are now
       allowed in source programs between tokens, but not within a token
       such as an identifier.
  
       RM References: 2.01 (4/2) 2.02 (7)
  
!    * 'AI-0091 Do not allow other_format in identifiers (0000-00-00)'
  
!      Wide characters in the unicode category 'other_format' are not
       permitted within an identifier, since this can be a security
       problem.  The error message for this case has been improved to be
       more specific, but GNAT has never allowed such characters to appear
*************** A complete description of the AIs may be
*** 22034,22040 ****
       RM References: 2.03 (3.1/2) 2.03 (4/2) 2.03 (5/2) 2.03 (5.1/2) 2.03
       (5.2/2) 2.03 (5.3/2) 2.09 (2/2)
  
!    * ‘AI-0100 Placement of pragmas (2010-07-01)’
  
       This AI is an earlier version of AI-163.  It simplifies the rules
       for legal placement of pragmas.  In the case of lists that allow
--- 22034,22040 ----
       RM References: 2.03 (3.1/2) 2.03 (4/2) 2.03 (5/2) 2.03 (5.1/2) 2.03
       (5.2/2) 2.03 (5.3/2) 2.09 (2/2)
  
!    * 'AI-0100 Placement of pragmas (2010-07-01)'
  
       This AI is an earlier version of AI-163.  It simplifies the rules
       for legal placement of pragmas.  In the case of lists that allow
*************** A complete description of the AIs may be
*** 22043,22049 ****
  
       RM References: 2.08 (7)
  
!    * ‘AI-0163 Pragmas in place of null (2010-07-01)’
  
       A statement sequence may be composed entirely of pragmas.  It is no
       longer necessary to add a dummy ‘null’ statement to make the
--- 22043,22049 ----
  
       RM References: 2.08 (7)
  
!    * 'AI-0163 Pragmas in place of null (2010-07-01)'
  
       A statement sequence may be composed entirely of pragmas.  It is no
       longer necessary to add a dummy ‘null’ statement to make the
*************** A complete description of the AIs may be
*** 22051,22064 ****
  
       RM References: 2.08 (7) 2.08 (16)
  
!    * ‘AI-0080 ‘View of’ not needed if clear from context (0000-00-00)’
  
       This is an editorial change only, described as non-testable in the
       AI.
  
       RM References: 3.01 (7)
  
!    * ‘AI-0183 Aspect specifications (2010-08-16)’
  
       Aspect specifications have been fully implemented except for pre
       and post- conditions, and type invariants, which have their own
--- 22051,22064 ----
  
       RM References: 2.08 (7) 2.08 (16)
  
!    * 'AI-0080 ‘View of’ not needed if clear from context (0000-00-00)'
  
       This is an editorial change only, described as non-testable in the
       AI.
  
       RM References: 3.01 (7)
  
!    * 'AI-0183 Aspect specifications (2010-08-16)'
  
       Aspect specifications have been fully implemented except for pre
       and post- conditions, and type invariants, which have their own
*************** Supported Aspect
*** 22195,22201 ****
       (2.1/2) 12.06 (2.2/2) 12.07 (2) 13.01 (0.1/2) 13.03 (5/1) 13.03.01
       (0)
  
!    * ‘AI-0128 Inequality is a primitive operation (0000-00-00)’
  
       If an equality operator (“=”) is declared for a type, then the
       implicitly declared inequality operator (“/=”) is a primitive
--- 22195,22201 ----
       (2.1/2) 12.06 (2.2/2) 12.07 (2) 13.01 (0.1/2) 13.03 (5/1) 13.03.01
       (0)
  
!    * 'AI-0128 Inequality is a primitive operation (0000-00-00)'
  
       If an equality operator (“=”) is declared for a type, then the
       implicitly declared inequality operator (“/=”) is a primitive
*************** Supported Aspect
*** 22205,22211 ****
  
       RM References: 3.02.03 (6) 6.06 (6)
  
!    * ‘AI-0003 Qualified expressions as names (2010-07-11)’
  
       In Ada 2012, a qualified expression is considered to be
       syntactically a name, meaning that constructs such as ‘A'(F(X)).B’
--- 22205,22211 ----
  
       RM References: 3.02.03 (6) 6.06 (6)
  
!    * 'AI-0003 Qualified expressions as names (2010-07-11)'
  
       In Ada 2012, a qualified expression is considered to be
       syntactically a name, meaning that constructs such as ‘A'(F(X)).B’
*************** Supported Aspect
*** 22215,22221 ****
       RM References: 3.03 (11) 3.03 (21) 4.01 (2) 4.04 (7) 4.07 (3) 5.04
       (7)
  
!    * ‘AI-0120 Constant instance of protected object (0000-00-00)’
  
       This is an RM editorial change only.  The section that lists
       objects that are constant failed to include the current instance of
--- 22215,22221 ----
       RM References: 3.03 (11) 3.03 (21) 4.01 (2) 4.04 (7) 4.07 (3) 5.04
       (7)
  
!    * 'AI-0120 Constant instance of protected object (0000-00-00)'
  
       This is an RM editorial change only.  The section that lists
       objects that are constant failed to include the current instance of
*************** Supported Aspect
*** 22224,22230 ****
  
       RM References: 3.03 (21)
  
!    * ‘AI-0008 General access to constrained objects (0000-00-00)’
  
       The wording in the RM implied that if you have a general access to
       a constrained object, it could be used to modify the discriminants.
--- 22224,22230 ----
  
       RM References: 3.03 (21)
  
!    * 'AI-0008 General access to constrained objects (0000-00-00)'
  
       The wording in the RM implied that if you have a general access to
       a constrained object, it could be used to modify the discriminants.
*************** Supported Aspect
*** 22234,22247 ****
       RM References: 3.03 (23) 3.10.02 (26/2) 4.01 (9) 6.04.01 (17)
       8.05.01 (5/2)
  
!    * ‘AI-0093 Additional rules use immutably limited (0000-00-00)’
  
       This is an editorial change only, to make more widespread use of
       the Ada 2012 ‘immutably limited’.
  
       RM References: 3.03 (23.4/3)
  
!    * ‘AI-0096 Deriving from formal private types (2010-07-20)’
  
       In general it is illegal for a type derived from a formal limited
       type to be nonlimited.  This AI makes an exception to this rule:
--- 22234,22247 ----
       RM References: 3.03 (23) 3.10.02 (26/2) 4.01 (9) 6.04.01 (17)
       8.05.01 (5/2)
  
!    * 'AI-0093 Additional rules use immutably limited (0000-00-00)'
  
       This is an editorial change only, to make more widespread use of
       the Ada 2012 ‘immutably limited’.
  
       RM References: 3.03 (23.4/3)
  
!    * 'AI-0096 Deriving from formal private types (2010-07-20)'
  
       In general it is illegal for a type derived from a formal limited
       type to be nonlimited.  This AI makes an exception to this rule:
*************** Supported Aspect
*** 22252,22258 ****
  
       RM References: 3.04 (5.1/2) 6.02 (7)
  
!    * ‘AI-0181 Soft hyphen is a non-graphic character (2010-07-23)’
  
       From Ada 2005 on, soft hyphen is considered a non-graphic
       character, which means that it has a special name (‘SOFT_HYPHEN’)
--- 22252,22258 ----
  
       RM References: 3.04 (5.1/2) 6.02 (7)
  
!    * 'AI-0181 Soft hyphen is a non-graphic character (2010-07-23)'
  
       From Ada 2005 on, soft hyphen is considered a non-graphic
       character, which means that it has a special name (‘SOFT_HYPHEN’)
*************** Supported Aspect
*** 22263,22269 ****
  
       RM References: 3.05.02 (2/2) A.01 (35/2) A.03.03 (21)
  
!    * ‘AI-0182 Additional forms for’ ‘Character'Value’ ‘(0000-00-00)’
  
       This AI allows ‘Character'Value’ to accept the string ‘'?'’ where
       ‘?’ is any character including non-graphic control characters.
--- 22263,22269 ----
  
       RM References: 3.05.02 (2/2) A.01 (35/2) A.03.03 (21)
  
!    * 'AI-0182 Additional forms for' ‘Character'Value’ '(0000-00-00)'
  
       This AI allows ‘Character'Value’ to accept the string ‘'?'’ where
       ‘?’ is any character including non-graphic control characters.
*************** Supported Aspect
*** 22274,22280 ****
  
       RM References: 3.05 (56/2)
  
!    * ‘AI-0214 Defaulted discriminants for limited tagged (2010-10-01)’
  
       Ada 2012 relaxes the restriction that forbids discriminants of
       tagged types to have default expressions by allowing them when the
--- 22274,22280 ----
  
       RM References: 3.05 (56/2)
  
!    * 'AI-0214 Defaulted discriminants for limited tagged (2010-10-01)'
  
       Ada 2012 relaxes the restriction that forbids discriminants of
       tagged types to have default expressions by allowing them when the
*************** Supported Aspect
*** 22283,22289 ****
  
       RM References: 3.07 (9.1/2) 3.07.02 (3)
  
!    * ‘AI-0102 Some implicit conversions are illegal (0000-00-00)’
  
       It is illegal to assign an anonymous access constant to an
       anonymous access variable.  The RM did not have a clear rule to
--- 22283,22289 ----
  
       RM References: 3.07 (9.1/2) 3.07.02 (3)
  
!    * 'AI-0102 Some implicit conversions are illegal (0000-00-00)'
  
       It is illegal to assign an anonymous access constant to an
       anonymous access variable.  The RM did not have a clear rule to
*************** Supported Aspect
*** 22292,22298 ****
  
       RM References: 3.07 (16) 3.07.01 (9) 6.04.01 (6) 8.06 (27/2)
  
!    * ‘AI-0158 Generalizing membership tests (2010-09-16)’
  
       This AI extends the syntax of membership tests to simplify complex
       conditions that can be expressed as membership in a subset of
--- 22292,22298 ----
  
       RM References: 3.07 (16) 3.07.01 (9) 6.04.01 (6) 8.06 (27/2)
  
!    * 'AI-0158 Generalizing membership tests (2010-09-16)'
  
       This AI extends the syntax of membership tests to simplify complex
       conditions that can be expressed as membership in a subset of
*************** Supported Aspect
*** 22302,22315 ****
       RM References: 3.08.01 (5) 4.04 (3) 4.05.02 (3) 4.05.02 (5) 4.05.02
       (27)
  
!    * ‘AI-0173 Testing if tags represent abstract types (2010-07-03)’
  
       The function ‘Ada.Tags.Type_Is_Abstract’ returns ‘True’ if invoked
       with the tag of an abstract type, and ‘False’ otherwise.
  
       RM References: 3.09 (7.4/2) 3.09 (12.4/2)
  
!    * ‘AI-0076 function with controlling result (0000-00-00)’
  
       This is an editorial change only.  The RM defines calls with
       controlling results, but uses the term ‘function with controlling
--- 22302,22315 ----
       RM References: 3.08.01 (5) 4.04 (3) 4.05.02 (3) 4.05.02 (5) 4.05.02
       (27)
  
!    * 'AI-0173 Testing if tags represent abstract types (2010-07-03)'
  
       The function ‘Ada.Tags.Type_Is_Abstract’ returns ‘True’ if invoked
       with the tag of an abstract type, and ‘False’ otherwise.
  
       RM References: 3.09 (7.4/2) 3.09 (12.4/2)
  
!    * 'AI-0076 function with controlling result (0000-00-00)'
  
       This is an editorial change only.  The RM defines calls with
       controlling results, but uses the term ‘function with controlling
*************** Supported Aspect
*** 22317,22323 ****
  
       RM References: 3.09.02 (2/2)
  
!    * ‘AI-0126 Dispatching with no declared operation (0000-00-00)’
  
       This AI clarifies dispatching rules, and simply confirms that
       dispatching executes the operation of the parent type when there is
--- 22317,22323 ----
  
       RM References: 3.09.02 (2/2)
  
!    * 'AI-0126 Dispatching with no declared operation (0000-00-00)'
  
       This AI clarifies dispatching rules, and simply confirms that
       dispatching executes the operation of the parent type when there is
*************** Supported Aspect
*** 22326,22332 ****
  
       RM References: 3.09.02 (20/2) 3.09.02 (20.1/2) 3.09.02 (20.2/2)
  
!    * ‘AI-0097 Treatment of abstract null extension (2010-07-19)’
  
       The RM as written implied that in some cases it was possible to
       create an object of an abstract type, by having an abstract
--- 22326,22332 ----
  
       RM References: 3.09.02 (20/2) 3.09.02 (20.1/2) 3.09.02 (20.2/2)
  
!    * 'AI-0097 Treatment of abstract null extension (2010-07-19)'
  
       The RM as written implied that in some cases it was possible to
       create an object of an abstract type, by having an abstract
*************** Supported Aspect
*** 22336,22349 ****
  
       RM References: 3.09.03 (4/2)
  
!    * ‘AI-0203 Extended return cannot be abstract (0000-00-00)’
  
       A return_subtype_indication cannot denote an abstract subtype.
       GNAT has never permitted such usage.
  
       RM References: 3.09.03 (8/3)
  
!    * ‘AI-0198 Inheriting abstract operators (0000-00-00)’
  
       This AI resolves a conflict between two rules involving inherited
       abstract operations and predefined operators.  If a derived numeric
--- 22336,22349 ----
  
       RM References: 3.09.03 (4/2)
  
!    * 'AI-0203 Extended return cannot be abstract (0000-00-00)'
  
       A return_subtype_indication cannot denote an abstract subtype.
       GNAT has never permitted such usage.
  
       RM References: 3.09.03 (8/3)
  
!    * 'AI-0198 Inheriting abstract operators (0000-00-00)'
  
       This AI resolves a conflict between two rules involving inherited
       abstract operations and predefined operators.  If a derived numeric
*************** Supported Aspect
*** 22352,22358 ****
  
       RM References: 3.09.03 (4/3)
  
!    * ‘AI-0073 Functions returning abstract types (2010-07-10)’
  
       This AI covers a number of issues regarding returning abstract
       types.  In particular generic functions cannot have abstract result
--- 22352,22358 ----
  
       RM References: 3.09.03 (4/3)
  
!    * 'AI-0073 Functions returning abstract types (2010-07-10)'
  
       This AI covers a number of issues regarding returning abstract
       types.  In particular generic functions cannot have abstract result
*************** Supported Aspect
*** 22363,22369 ****
  
       RM References: 3.09.03 (8) 3.09.03 (10) 6.05 (8/2)
  
!    * ‘AI-0070 Elaboration of interface types (0000-00-00)’
  
       This is an editorial change only, there are no testable
       consequences short of checking for the absence of generated code
--- 22363,22369 ----
  
       RM References: 3.09.03 (8) 3.09.03 (10) 6.05 (8/2)
  
!    * 'AI-0070 Elaboration of interface types (0000-00-00)'
  
       This is an editorial change only, there are no testable
       consequences short of checking for the absence of generated code
*************** Supported Aspect
*** 22371,22377 ****
  
       RM References: 3.09.04 (18/2)
  
!    * ‘AI-0208 Characteristics of incomplete views (0000-00-00)’
  
       The wording in the Ada 2005 RM concerning characteristics of
       incomplete views was incorrect and implied that some programs
--- 22371,22377 ----
  
       RM References: 3.09.04 (18/2)
  
!    * 'AI-0208 Characteristics of incomplete views (0000-00-00)'
  
       The wording in the Ada 2005 RM concerning characteristics of
       incomplete views was incorrect and implied that some programs
*************** Supported Aspect
*** 22381,22387 ****
  
       RM References: 3.10.01 (2.4/2) 3.10.01 (2.6/2)
  
!    * ‘AI-0162 Incomplete type completed by partial view (2010-09-15)’
  
       Incomplete types are made more useful by allowing them to be
       completed by private types and private extensions.
--- 22381,22387 ----
  
       RM References: 3.10.01 (2.4/2) 3.10.01 (2.6/2)
  
!    * 'AI-0162 Incomplete type completed by partial view (2010-09-15)'
  
       Incomplete types are made more useful by allowing them to be
       completed by private types and private extensions.
*************** Supported Aspect
*** 22389,22395 ****
       RM References: 3.10.01 (2.5/2) 3.10.01 (2.6/2) 3.10.01 (3) 3.10.01
       (4/2)
  
!    * ‘AI-0098 Anonymous subprogram access restrictions (0000-00-00)’
  
       An unintentional omission in the RM implied some inconsistent
       restrictions on the use of anonymous access to subprogram values.
--- 22389,22395 ----
       RM References: 3.10.01 (2.5/2) 3.10.01 (2.6/2) 3.10.01 (3) 3.10.01
       (4/2)
  
!    * 'AI-0098 Anonymous subprogram access restrictions (0000-00-00)'
  
       An unintentional omission in the RM implied some inconsistent
       restrictions on the use of anonymous access to subprogram values.
*************** Supported Aspect
*** 22398,22404 ****
  
       RM References: 3.10.01 (6) 3.10.01 (9.2/2)
  
!    * ‘AI-0199 Aggregate with anonymous access components (2010-07-14)’
  
       A choice list in a record aggregate can include several components
       of (distinct) anonymous access types as long as they have matching
--- 22398,22404 ----
  
       RM References: 3.10.01 (6) 3.10.01 (9.2/2)
  
!    * 'AI-0199 Aggregate with anonymous access components (2010-07-14)'
  
       A choice list in a record aggregate can include several components
       of (distinct) anonymous access types as long as they have matching
*************** Supported Aspect
*** 22406,22412 ****
  
       RM References: 4.03.01 (16)
  
!    * ‘AI-0220 Needed components for aggregates (0000-00-00)’
  
       This AI addresses a wording problem in the RM that appears to
       permit some complex cases of aggregates with nonstatic
--- 22406,22412 ----
  
       RM References: 4.03.01 (16)
  
!    * 'AI-0220 Needed components for aggregates (0000-00-00)'
  
       This AI addresses a wording problem in the RM that appears to
       permit some complex cases of aggregates with nonstatic
*************** Supported Aspect
*** 22414,22420 ****
  
       RM References: 4.03.01 (17)
  
!    * ‘AI-0147 Conditional expressions (2009-03-29)’
  
       Conditional expressions are permitted.  The form of such an
       expression is:
--- 22414,22420 ----
  
       RM References: 4.03.01 (17)
  
!    * 'AI-0147 Conditional expressions (2009-03-29)'
  
       Conditional expressions are permitted.  The form of such an
       expression is:
*************** Supported Aspect
*** 22423,22436 ****
  
       The parentheses can be omitted in contexts where parentheses are
       present anyway, such as subprogram arguments and pragma arguments.
!      If the ‘else’ clause is omitted, ‘else’ ‘True’ is assumed; thus
!      ‘(if A then B)’ is a way to conveniently represent ‘(A implies B)’
       in standard logic.
  
       RM References: 4.03.03 (15) 4.04 (1) 4.04 (7) 4.05.07 (0) 4.07 (2)
       4.07 (3) 4.09 (12) 4.09 (33) 5.03 (3) 5.03 (4) 7.05 (2.1/2)
  
!    * ‘AI-0037 Out-of-range box associations in aggregate (0000-00-00)’
  
       This AI confirms that an association of the form ‘Indx => <>’ in an
       array aggregate must raise ‘Constraint_Error’ if ‘Indx’ is out of
--- 22423,22436 ----
  
       The parentheses can be omitted in contexts where parentheses are
       present anyway, such as subprogram arguments and pragma arguments.
!      If the 'else' clause is omitted, 'else' 'True' is assumed; thus
!      ‘(if A then B)’ is a way to conveniently represent '(A implies B)'
       in standard logic.
  
       RM References: 4.03.03 (15) 4.04 (1) 4.04 (7) 4.05.07 (0) 4.07 (2)
       4.07 (3) 4.09 (12) 4.09 (33) 5.03 (3) 5.03 (4) 7.05 (2.1/2)
  
!    * 'AI-0037 Out-of-range box associations in aggregate (0000-00-00)'
  
       This AI confirms that an association of the form ‘Indx => <>’ in an
       array aggregate must raise ‘Constraint_Error’ if ‘Indx’ is out of
*************** Supported Aspect
*** 22440,22446 ****
  
       RM References: 4.03.03 (29)
  
!    * ‘AI-0123 Composability of equality (2010-04-13)’
  
       Equality of untagged record composes, so that the predefined
       equality for a composite type that includes a component of some
--- 22440,22446 ----
  
       RM References: 4.03.03 (29)
  
!    * 'AI-0123 Composability of equality (2010-04-13)'
  
       Equality of untagged record composes, so that the predefined
       equality for a composite type that includes a component of some
*************** Supported Aspect
*** 22460,22466 ****
       RM References: 4.05.02 (9.7/2) 4.05.02 (14) 4.05.02 (15) 4.05.02
       (24) 8.05.04 (8)
  
!    * ‘AI-0088 The value of exponentiation (0000-00-00)’
  
       This AI clarifies the equivalence rule given for the dynamic
       semantics of exponentiation: the value of the operation can be
--- 22460,22466 ----
       RM References: 4.05.02 (9.7/2) 4.05.02 (14) 4.05.02 (15) 4.05.02
       (24) 8.05.04 (8)
  
!    * 'AI-0088 The value of exponentiation (0000-00-00)'
  
       This AI clarifies the equivalence rule given for the dynamic
       semantics of exponentiation: the value of the operation can be
*************** Supported Aspect
*** 22471,22477 ****
  
       RM References: 4.05.06 (11)
  
!    * ‘AI-0188 Case expressions (2010-01-09)’
  
       Case expressions are permitted.  This allows use of constructs such
       as:
--- 22471,22477 ----
  
       RM References: 4.05.06 (11)
  
!    * 'AI-0188 Case expressions (2010-01-09)'
  
       Case expressions are permitted.  This allows use of constructs such
       as:
*************** Supported Aspect
*** 22480,22494 ****
  
       RM References: 4.05.07 (0) 4.05.08 (0) 4.09 (12) 4.09 (33)
  
!    * ‘AI-0104 Null exclusion and uninitialized allocator (2010-07-15)’
  
       The assignment ‘Ptr := new not null Some_Ptr;’ will raise
       ‘Constraint_Error’ because the default value of the allocated
!      object is ‘null’.  This useless construct is illegal in Ada 2012.
  
       RM References: 4.08 (2)
  
!    * ‘AI-0157 Allocation/Deallocation from empty pool (2010-07-11)’
  
       Allocation and Deallocation from an empty storage pool (i.e.
       allocation or deallocation of a pointer for which a static storage
--- 22480,22494 ----
  
       RM References: 4.05.07 (0) 4.05.08 (0) 4.09 (12) 4.09 (33)
  
!    * 'AI-0104 Null exclusion and uninitialized allocator (2010-07-15)'
  
       The assignment ‘Ptr := new not null Some_Ptr;’ will raise
       ‘Constraint_Error’ because the default value of the allocated
!      object is 'null'.  This useless construct is illegal in Ada 2012.
  
       RM References: 4.08 (2)
  
!    * 'AI-0157 Allocation/Deallocation from empty pool (2010-07-11)'
  
       Allocation and Deallocation from an empty storage pool (i.e.
       allocation or deallocation of a pointer for which a static storage
*************** Supported Aspect
*** 22497,22503 ****
  
       RM References: 4.08 (5.3/2) 13.11.02 (4) 13.11.02 (17)
  
!    * ‘AI-0179 Statement not required after label (2010-04-10)’
  
       It is not necessary to have a statement following a label, so a
       label can appear at the end of a statement sequence without the
--- 22497,22503 ----
  
       RM References: 4.08 (5.3/2) 13.11.02 (4) 13.11.02 (17)
  
!    * 'AI-0179 Statement not required after label (2010-04-10)'
  
       It is not necessary to have a statement following a label, so a
       label can appear at the end of a statement sequence without the
*************** Supported Aspect
*** 22507,22513 ****
  
       RM References: 5.01 (2)
  
!    * ‘AI-0139-2 Syntactic sugar for iterators (2010-09-29)’
  
       The new syntax for iterating over arrays and containers is now
       implemented.  Iteration over containers is for now limited to
--- 22507,22513 ----
  
       RM References: 5.01 (2)
  
!    * 'AI-0139-2 Syntactic sugar for iterators (2010-09-29)'
  
       The new syntax for iterating over arrays and containers is now
       implemented.  Iteration over containers is for now limited to
*************** Supported Aspect
*** 22516,22522 ****
  
       RM References: 5.05
  
!    * ‘AI-0134 Profiles must match for full conformance (0000-00-00)’
  
       For full conformance, the profiles of
       anonymous-access-to-subprogram parameters must match.  GNAT has
--- 22516,22522 ----
  
       RM References: 5.05
  
!    * 'AI-0134 Profiles must match for full conformance (0000-00-00)'
  
       For full conformance, the profiles of
       anonymous-access-to-subprogram parameters must match.  GNAT has
*************** Supported Aspect
*** 22524,22530 ****
  
       RM References: 6.03.01 (18)
  
!    * ‘AI-0207 Mode conformance and access constant (0000-00-00)’
  
       This AI confirms that access_to_constant indication must match for
       mode conformance.  This was implemented in GNAT when the qualifier
--- 22524,22530 ----
  
       RM References: 6.03.01 (18)
  
!    * 'AI-0207 Mode conformance and access constant (0000-00-00)'
  
       This AI confirms that access_to_constant indication must match for
       mode conformance.  This was implemented in GNAT when the qualifier
*************** Supported Aspect
*** 22532,22545 ****
  
       RM References: 6.03.01 (16/2)
  
!    * ‘AI-0046 Null exclusion match for full conformance (2010-07-17)’
  
       For full conformance, in the case of access parameters, the null
       exclusion must match (either both or neither must have ‘not null’).
  
       RM References: 6.03.02 (18)
  
!    * ‘AI-0118 The association of parameter associations (0000-00-00)’
  
       This AI clarifies the rules for named associations in subprogram
       calls and generic instantiations.  The rules have been in place
--- 22532,22545 ----
  
       RM References: 6.03.01 (16/2)
  
!    * 'AI-0046 Null exclusion match for full conformance (2010-07-17)'
  
       For full conformance, in the case of access parameters, the null
       exclusion must match (either both or neither must have ‘not null’).
  
       RM References: 6.03.02 (18)
  
!    * 'AI-0118 The association of parameter associations (0000-00-00)'
  
       This AI clarifies the rules for named associations in subprogram
       calls and generic instantiations.  The rules have been in place
*************** Supported Aspect
*** 22547,22553 ****
  
       RM References: 6.04.01 (2) 12.03 (9)
  
!    * ‘AI-0196 Null exclusion tests for out parameters (0000-00-00)’
  
       Null exclusion checks are not made for ‘out’ parameters when
       evaluating the actual parameters.  GNAT has never generated these
--- 22547,22553 ----
  
       RM References: 6.04.01 (2) 12.03 (9)
  
!    * 'AI-0196 Null exclusion tests for out parameters (0000-00-00)'
  
       Null exclusion checks are not made for ‘out’ parameters when
       evaluating the actual parameters.  GNAT has never generated these
*************** Supported Aspect
*** 22555,22570 ****
  
       RM References: 6.04.01 (13)
  
!    * ‘AI-0015 Constant return objects (0000-00-00)’
  
!      The return object declared in an ‘extended_return_statement’ may be
       declared constant.  This was always intended, and GNAT has always
       allowed it.
  
       RM References: 6.05 (2.1/2) 3.03 (10/2) 3.03 (21) 6.05 (5/2) 6.05
       (5.7/2)
  
!    * ‘AI-0032 Extended return for class-wide functions (0000-00-00)’
  
       If a function returns a class-wide type, the object of an extended
       return statement can be declared with a specific type that is
--- 22555,22570 ----
  
       RM References: 6.04.01 (13)
  
!    * 'AI-0015 Constant return objects (0000-00-00)'
  
!      The return object declared in an 'extended_return_statement' may be
       declared constant.  This was always intended, and GNAT has always
       allowed it.
  
       RM References: 6.05 (2.1/2) 3.03 (10/2) 3.03 (21) 6.05 (5/2) 6.05
       (5.7/2)
  
!    * 'AI-0032 Extended return for class-wide functions (0000-00-00)'
  
       If a function returns a class-wide type, the object of an extended
       return statement can be declared with a specific type that is
*************** Supported Aspect
*** 22576,22582 ****
       RM References: 6.05 (5.2/2) 6.05 (5.3/2) 6.05 (5.6/2) 6.05 (5.8/2)
       6.05 (8/2)
  
!    * ‘AI-0103 Static matching for extended return (2010-07-23)’
  
       If the return subtype of a function is an elementary type or a
       constrained type, the subtype indication in an extended return
--- 22576,22582 ----
       RM References: 6.05 (5.2/2) 6.05 (5.3/2) 6.05 (5.6/2) 6.05 (5.8/2)
       6.05 (8/2)
  
!    * 'AI-0103 Static matching for extended return (2010-07-23)'
  
       If the return subtype of a function is an elementary type or a
       constrained type, the subtype indication in an extended return
*************** Supported Aspect
*** 22584,22590 ****
  
       RM References: 6.05 (5.2/2)
  
!    * ‘AI-0058 Abnormal completion of an extended return (0000-00-00)’
  
       The RM had some incorrect wording implying wrong treatment of
       abnormal completion in an extended return.  GNAT has always
--- 22584,22590 ----
  
       RM References: 6.05 (5.2/2)
  
!    * 'AI-0058 Abnormal completion of an extended return (0000-00-00)'
  
       The RM had some incorrect wording implying wrong treatment of
       abnormal completion in an extended return.  GNAT has always
*************** Supported Aspect
*** 22592,22599 ****
  
       RM References: 6.05 (22/2)
  
!    * ‘AI-0050 Raising Constraint_Error early for function call
!      (0000-00-00)’
  
       The implementation permissions for raising ‘Constraint_Error’ early
       on a function call when it was clear an exception would be raised
--- 22592,22599 ----
  
       RM References: 6.05 (22/2)
  
!    * 'AI-0050 Raising Constraint_Error early for function call
!      (0000-00-00)'
  
       The implementation permissions for raising ‘Constraint_Error’ early
       on a function call when it was clear an exception would be raised
*************** Supported Aspect
*** 22603,22609 ****
  
       RM References: 6.05 (24/2)
  
!    * ‘AI-0125 Nonoverridable operations of an ancestor (2010-09-28)’
  
       In Ada 2012, the declaration of a primitive operation of a type
       extension or private extension can also override an inherited
--- 22603,22609 ----
  
       RM References: 6.05 (24/2)
  
!    * 'AI-0125 Nonoverridable operations of an ancestor (2010-09-28)'
  
       In Ada 2012, the declaration of a primitive operation of a type
       extension or private extension can also override an inherited
*************** Supported Aspect
*** 22611,22624 ****
  
       RM References: 7.03.01 (6) 8.03 (23) 8.03.01 (5/2) 8.03.01 (6/2)
  
!    * ‘AI-0062 Null exclusions and deferred constants (0000-00-00)’
  
       A full constant may have a null exclusion even if its associated
       deferred constant does not.  GNAT has always allowed this.
  
       RM References: 7.04 (6/2) 7.04 (7.1/2)
  
!    * ‘AI-0178 Incomplete views are limited (0000-00-00)’
  
       This AI clarifies the role of incomplete views and plugs an
       omission in the RM. GNAT always correctly restricted the use of
--- 22611,22624 ----
  
       RM References: 7.03.01 (6) 8.03 (23) 8.03.01 (5/2) 8.03.01 (6/2)
  
!    * 'AI-0062 Null exclusions and deferred constants (0000-00-00)'
  
       A full constant may have a null exclusion even if its associated
       deferred constant does not.  GNAT has always allowed this.
  
       RM References: 7.04 (6/2) 7.04 (7.1/2)
  
!    * 'AI-0178 Incomplete views are limited (0000-00-00)'
  
       This AI clarifies the role of incomplete views and plugs an
       omission in the RM. GNAT always correctly restricted the use of
*************** Supported Aspect
*** 22626,22632 ****
  
       RM References: 7.05 (3/2) 7.05 (6/2)
  
!    * ‘AI-0087 Actual for formal nonlimited derived type (2010-07-15)’
  
       The actual for a formal nonlimited derived type cannot be limited.
       In particular, a formal derived type that extends a limited
--- 22626,22632 ----
  
       RM References: 7.05 (3/2) 7.05 (6/2)
  
!    * 'AI-0087 Actual for formal nonlimited derived type (2010-07-15)'
  
       The actual for a formal nonlimited derived type cannot be limited.
       In particular, a formal derived type that extends a limited
*************** Supported Aspect
*** 22635,22641 ****
  
       RM References: 7.05 (5/2) 12.05.01 (5.1/2)
  
!    * ‘AI-0099 Tag determines whether finalization needed (0000-00-00)’
  
       This AI clarifies that ‘needs finalization’ is part of dynamic
       semantics, and therefore depends on the run-time characteristics of
--- 22635,22641 ----
  
       RM References: 7.05 (5/2) 12.05.01 (5.1/2)
  
!    * 'AI-0099 Tag determines whether finalization needed (0000-00-00)'
  
       This AI clarifies that ‘needs finalization’ is part of dynamic
       semantics, and therefore depends on the run-time characteristics of
*************** Supported Aspect
*** 22644,22650 ****
  
       RM References: 7.06.01 (6) 7.06.01 (7) 7.06.01 (8) 7.06.01 (9/2)
  
!    * ‘AI-0064 Redundant finalization rule (0000-00-00)’
  
       This is an editorial change only.  The intended behavior is already
       checked by an existing ACATS test, which GNAT has always executed
--- 22644,22650 ----
  
       RM References: 7.06.01 (6) 7.06.01 (7) 7.06.01 (8) 7.06.01 (9/2)
  
!    * 'AI-0064 Redundant finalization rule (0000-00-00)'
  
       This is an editorial change only.  The intended behavior is already
       checked by an existing ACATS test, which GNAT has always executed
*************** Supported Aspect
*** 22652,22658 ****
  
       RM References: 7.06.01 (17.1/1)
  
!    * ‘AI-0026 Missing rules for Unchecked_Union (2010-07-07)’
  
       Record representation clauses concerning Unchecked_Union types
       cannot mention the discriminant of the type.  The type of a
--- 22652,22658 ----
  
       RM References: 7.06.01 (17.1/1)
  
!    * 'AI-0026 Missing rules for Unchecked_Union (2010-07-07)'
  
       Record representation clauses concerning Unchecked_Union types
       cannot mention the discriminant of the type.  The type of a
*************** Supported Aspect
*** 22665,22678 ****
  
       RM References: 7.06 (9.4/2) B.03.03 (9/2) B.03.03 (10/2)
  
!    * ‘AI-0205 Extended return declares visible name (0000-00-00)’
  
       This AI corrects a simple omission in the RM. Return objects have
       always been visible within an extended return statement.
  
       RM References: 8.03 (17)
  
!    * ‘AI-0042 Overriding versus implemented-by (0000-00-00)’
  
       This AI fixes a wording gap in the RM. An operation of a
       synchronized interface can be implemented by a protected or task
--- 22665,22678 ----
  
       RM References: 7.06 (9.4/2) B.03.03 (9/2) B.03.03 (10/2)
  
!    * 'AI-0205 Extended return declares visible name (0000-00-00)'
  
       This AI corrects a simple omission in the RM. Return objects have
       always been visible within an extended return statement.
  
       RM References: 8.03 (17)
  
!    * 'AI-0042 Overriding versus implemented-by (0000-00-00)'
  
       This AI fixes a wording gap in the RM. An operation of a
       synchronized interface can be implemented by a protected or task
*************** Supported Aspect
*** 22682,22688 ****
  
       RM References: 9.01 (9.2/2) 9.04 (11.1/2)
  
!    * ‘AI-0030 Requeue on synchronized interfaces (2010-07-19)’
  
       Requeue is permitted to a protected, synchronized or task interface
       primitive providing it is known that the overriding operation is an
--- 22682,22688 ----
  
       RM References: 9.01 (9.2/2) 9.04 (11.1/2)
  
!    * 'AI-0030 Requeue on synchronized interfaces (2010-07-19)'
  
       Requeue is permitted to a protected, synchronized or task interface
       primitive providing it is known that the overriding operation is an
*************** Supported Aspect
*** 22695,22701 ****
       RM References: 9.05 (9) 9.05.04 (2) 9.05.04 (3) 9.05.04 (5) 9.05.04
       (6) 9.05.04 (7) 9.05.04 (12)
  
!    * ‘AI-0201 Independence of atomic object components (2010-07-22)’
  
       If an Atomic object has a pragma ‘Pack’ or a ‘Component_Size’
       attribute, then individual components may not be addressable by
--- 22695,22701 ----
       RM References: 9.05 (9) 9.05.04 (2) 9.05.04 (3) 9.05.04 (5) 9.05.04
       (6) 9.05.04 (7) 9.05.04 (12)
  
!    * 'AI-0201 Independence of atomic object components (2010-07-22)'
  
       If an Atomic object has a pragma ‘Pack’ or a ‘Component_Size’
       attribute, then individual components may not be addressable by
*************** Supported Aspect
*** 22709,22715 ****
  
       RM References: 9.10 (1/3) C.06 (22/2) C.06 (23/2)
  
!    * ‘AI-0009 Pragma Independent[_Components] (2010-07-23)’
  
       This AI introduces the new pragmas ‘Independent’ and
       ‘Independent_Components’, which control guaranteeing independence
--- 22709,22715 ----
  
       RM References: 9.10 (1/3) C.06 (22/2) C.06 (23/2)
  
!    * 'AI-0009 Pragma Independent[_Components] (2010-07-23)'
  
       This AI introduces the new pragmas ‘Independent’ and
       ‘Independent_Components’, which control guaranteeing independence
*************** Supported Aspect
*** 22719,22725 ****
       RM References: 9.10 (1) 13.01 (15/1) 13.02 (9) 13.03 (13) C.06 (2)
       C.06 (4) C.06 (6) C.06 (9) C.06 (13) C.06 (14)
  
!    * ‘AI-0072 Task signalling using ‘Terminated (0000-00-00)’
  
       This AI clarifies that task signalling for reading ‘'Terminated’
       only occurs if the result is True.  GNAT semantics has always been
--- 22719,22725 ----
       RM References: 9.10 (1) 13.01 (15/1) 13.02 (9) 13.03 (13) C.06 (2)
       C.06 (4) C.06 (6) C.06 (9) C.06 (13) C.06 (14)
  
!    * 'AI-0072 Task signalling using ‘Terminated (0000-00-00)'
  
       This AI clarifies that task signalling for reading ‘'Terminated’
       only occurs if the result is True.  GNAT semantics has always been
*************** Supported Aspect
*** 22727,22740 ****
  
       RM References: 9.10 (6.1/1)
  
!    * ‘AI-0108 Limited incomplete view and discriminants (0000-00-00)’
  
       This AI confirms that an incomplete type from a limited view does
       not have discriminants.  This has always been the case in GNAT.
  
       RM References: 10.01.01 (12.3/2)
  
!    * ‘AI-0129 Limited views and incomplete types (0000-00-00)’
  
       This AI clarifies the description of limited views: a limited view
       of a package includes only one view of a type that has an
--- 22727,22740 ----
  
       RM References: 9.10 (6.1/1)
  
!    * 'AI-0108 Limited incomplete view and discriminants (0000-00-00)'
  
       This AI confirms that an incomplete type from a limited view does
       not have discriminants.  This has always been the case in GNAT.
  
       RM References: 10.01.01 (12.3/2)
  
!    * 'AI-0129 Limited views and incomplete types (0000-00-00)'
  
       This AI clarifies the description of limited views: a limited view
       of a package includes only one view of a type that has an
*************** Supported Aspect
*** 22745,22751 ****
  
       RM References: 10.01.01 (12.2/2) 10.01.01 (12.3/2)
  
!    * ‘AI-0077 Limited withs and scope of declarations (0000-00-00)’
  
       This AI clarifies that a declaration does not include a context
       clause, and confirms that it is illegal to have a context in which
--- 22745,22751 ----
  
       RM References: 10.01.01 (12.2/2) 10.01.01 (12.3/2)
  
!    * 'AI-0077 Limited withs and scope of declarations (0000-00-00)'
  
       This AI clarifies that a declaration does not include a context
       clause, and confirms that it is illegal to have a context in which
*************** Supported Aspect
*** 22754,22760 ****
  
       RM References: 10.01.02 (12/2) 10.01.02 (21/2) 10.01.02 (22/2)
  
!    * ‘AI-0122 Private with and children of generics (0000-00-00)’
  
       This AI clarifies the visibility of private children of generic
       units within instantiations of a parent.  GNAT has always handled
--- 22754,22760 ----
  
       RM References: 10.01.02 (12/2) 10.01.02 (21/2) 10.01.02 (22/2)
  
!    * 'AI-0122 Private with and children of generics (0000-00-00)'
  
       This AI clarifies the visibility of private children of generic
       units within instantiations of a parent.  GNAT has always handled
*************** Supported Aspect
*** 22762,22768 ****
  
       RM References: 10.01.02 (12/2)
  
!    * ‘AI-0040 Limited with clauses on descendant (0000-00-00)’
  
       This AI confirms that a limited with clause in a child unit cannot
       name an ancestor of the unit.  This has always been checked in
--- 22762,22768 ----
  
       RM References: 10.01.02 (12/2)
  
!    * 'AI-0040 Limited with clauses on descendant (0000-00-00)'
  
       This AI confirms that a limited with clause in a child unit cannot
       name an ancestor of the unit.  This has always been checked in
*************** Supported Aspect
*** 22770,22776 ****
  
       RM References: 10.01.02 (20/2)
  
!    * ‘AI-0132 Placement of library unit pragmas (0000-00-00)’
  
       This AI fills a gap in the description of library unit pragmas.
       The pragma clearly must apply to a library unit, even if it does
--- 22770,22776 ----
  
       RM References: 10.01.02 (20/2)
  
!    * 'AI-0132 Placement of library unit pragmas (0000-00-00)'
  
       This AI fills a gap in the description of library unit pragmas.
       The pragma clearly must apply to a library unit, even if it does
*************** Supported Aspect
*** 22779,22785 ****
  
       RM References: 10.01.05 (7)
  
!    * ‘AI-0034 Categorization of limited views (0000-00-00)’
  
       The RM makes certain limited with clauses illegal because of
       categorization considerations, when the corresponding normal with
--- 22779,22785 ----
  
       RM References: 10.01.05 (7)
  
!    * 'AI-0034 Categorization of limited views (0000-00-00)'
  
       The RM makes certain limited with clauses illegal because of
       categorization considerations, when the corresponding normal with
*************** Supported Aspect
*** 22788,22794 ****
  
       RM References: 10.02.01 (11/1) 10.02.01 (17/2)
  
!    * ‘AI-0035 Inconsistencies with Pure units (0000-00-00)’
  
       This AI remedies some inconsistencies in the legality rules for
       Pure units.  Derived access types are legal in a pure unit (on the
--- 22788,22794 ----
  
       RM References: 10.02.01 (11/1) 10.02.01 (17/2)
  
!    * 'AI-0035 Inconsistencies with Pure units (0000-00-00)'
  
       This AI remedies some inconsistencies in the legality rules for
       Pure units.  Derived access types are legal in a pure unit (on the
*************** Supported Aspect
*** 22800,22806 ****
       RM References: 10.02.01 (15.1/2) 10.02.01 (15.4/2) 10.02.01
       (15.5/2) 10.02.01 (17/2)
  
!    * ‘AI-0219 Pure permissions and limited parameters (2010-05-25)’
  
       This AI refines the rules for the cases with limited parameters
       which do not allow the implementations to omit ‘redundant’.  GNAT
--- 22800,22806 ----
       RM References: 10.02.01 (15.1/2) 10.02.01 (15.4/2) 10.02.01
       (15.5/2) 10.02.01 (17/2)
  
!    * 'AI-0219 Pure permissions and limited parameters (2010-05-25)'
  
       This AI refines the rules for the cases with limited parameters
       which do not allow the implementations to omit ‘redundant’.  GNAT
*************** Supported Aspect
*** 22809,22822 ****
  
       RM References: 10.02.01 (18/2)
  
!    * ‘AI-0043 Rules about raising exceptions (0000-00-00)’
  
       This AI covers various omissions in the RM regarding the raising of
       exceptions.  GNAT has always implemented the intended semantics.
  
       RM References: 11.04.01 (10.1/2) 11 (2)
  
!    * ‘AI-0200 Mismatches in formal package declarations (0000-00-00)’
  
       This AI plugs a gap in the RM which appeared to allow some
       obviously intended illegal instantiations.  GNAT has never allowed
--- 22809,22822 ----
  
       RM References: 10.02.01 (18/2)
  
!    * 'AI-0043 Rules about raising exceptions (0000-00-00)'
  
       This AI covers various omissions in the RM regarding the raising of
       exceptions.  GNAT has always implemented the intended semantics.
  
       RM References: 11.04.01 (10.1/2) 11 (2)
  
!    * 'AI-0200 Mismatches in formal package declarations (0000-00-00)'
  
       This AI plugs a gap in the RM which appeared to allow some
       obviously intended illegal instantiations.  GNAT has never allowed
*************** Supported Aspect
*** 22824,22830 ****
  
       RM References: 12.07 (16)
  
!    * ‘AI-0112 Detection of duplicate pragmas (2010-07-24)’
  
       This AI concerns giving names to various representation aspects,
       but the practical effect is simply to make the use of duplicate
--- 22824,22830 ----
  
       RM References: 12.07 (16)
  
!    * 'AI-0112 Detection of duplicate pragmas (2010-07-24)'
  
       This AI concerns giving names to various representation aspects,
       but the practical effect is simply to make the use of duplicate
*************** Supported Aspect
*** 22834,22840 ****
  
       RM References: 13.01 (8)
  
!    * ‘AI-0106 No representation pragmas on generic formals (0000-00-00)’
  
       The RM appeared to allow representation pragmas on generic formal
       parameters, but this was not intended, and GNAT has never permitted
--- 22834,22840 ----
  
       RM References: 13.01 (8)
  
!    * 'AI-0106 No representation pragmas on generic formals (0000-00-00)'
  
       The RM appeared to allow representation pragmas on generic formal
       parameters, but this was not intended, and GNAT has never permitted
*************** Supported Aspect
*** 22842,22848 ****
  
       RM References: 13.01 (9.1/1)
  
!    * ‘AI-0012 Pack/Component_Size for aliased/atomic (2010-07-15)’
  
       It is now illegal to give an inappropriate component size or a
       pragma ‘Pack’ that attempts to change the component size in the
--- 22842,22848 ----
  
       RM References: 13.01 (9.1/1)
  
!    * 'AI-0012 Pack/Component_Size for aliased/atomic (2010-07-15)'
  
       It is now illegal to give an inappropriate component size or a
       pragma ‘Pack’ that attempts to change the component size in the
*************** Supported Aspect
*** 22852,22867 ****
       RM References: 13.02 (6.1/2) 13.02 (7) C.06 (10) C.06 (11) C.06
       (21)
  
!    * ‘AI-0039 Stream attributes cannot be dynamic (0000-00-00)’
  
       The RM permitted the use of dynamic expressions (such as
!      ‘ptr.all’)‘ for stream attributes, but these were never useful and
       are now illegal.  GNAT has always regarded such expressions as
       illegal.
  
       RM References: 13.03 (4) 13.03 (6) 13.13.02 (38/2)
  
!    * ‘AI-0095 Address of intrinsic subprograms (0000-00-00)’
  
       The prefix of ‘'Address’ cannot statically denote a subprogram with
       convention ‘Intrinsic’.  The use of the ‘Address’ attribute raises
--- 22852,22867 ----
       RM References: 13.02 (6.1/2) 13.02 (7) C.06 (10) C.06 (11) C.06
       (21)
  
!    * 'AI-0039 Stream attributes cannot be dynamic (0000-00-00)'
  
       The RM permitted the use of dynamic expressions (such as
!      ‘ptr.all’)' for stream attributes, but these were never useful and
       are now illegal.  GNAT has always regarded such expressions as
       illegal.
  
       RM References: 13.03 (4) 13.03 (6) 13.13.02 (38/2)
  
!    * 'AI-0095 Address of intrinsic subprograms (0000-00-00)'
  
       The prefix of ‘'Address’ cannot statically denote a subprogram with
       convention ‘Intrinsic’.  The use of the ‘Address’ attribute raises
*************** Supported Aspect
*** 22870,22876 ****
  
       RM References: 13.03 (11/1)
  
!    * ‘AI-0116 Alignment of class-wide objects (0000-00-00)’
  
       This AI requires that the alignment of a class-wide object be no
       greater than the alignment of any type in the class.  GNAT has
--- 22870,22876 ----
  
       RM References: 13.03 (11/1)
  
!    * 'AI-0116 Alignment of class-wide objects (0000-00-00)'
  
       This AI requires that the alignment of a class-wide object be no
       greater than the alignment of any type in the class.  GNAT has
*************** Supported Aspect
*** 22878,22884 ****
  
       RM References: 13.03 (29) 13.11 (16)
  
!    * ‘AI-0146 Type invariants (2009-09-21)’
  
       Type invariants may be specified for private types using the aspect
       notation.  Aspect ‘Type_Invariant’ may be specified for any private
--- 22878,22884 ----
  
       RM References: 13.03 (29) 13.11 (16)
  
!    * 'AI-0146 Type invariants (2009-09-21)'
  
       Type invariants may be specified for private types using the aspect
       notation.  Aspect ‘Type_Invariant’ may be specified for any private
*************** Supported Aspect
*** 22887,22900 ****
       invariant is a boolean expression that is tested for being true in
       the following situations: conversions to the private type, object
       declarations for the private type that are default initialized, and
!      [‘in’] ‘out’ parameters and returned result on return from any
       primitive operation for the type that is visible to a client.  GNAT
       defines the synonyms ‘Invariant’ for ‘Type_Invariant’ and
       ‘Invariant'Class’ for ‘Type_Invariant'Class’.
  
       RM References: 13.03.03 (00)
  
!    * ‘AI-0078 Relax Unchecked_Conversion alignment rules (0000-00-00)’
  
       In Ada 2012, compilers are required to support unchecked conversion
       where the target alignment is a multiple of the source alignment.
--- 22887,22900 ----
       invariant is a boolean expression that is tested for being true in
       the following situations: conversions to the private type, object
       declarations for the private type that are default initialized, and
!      ['in'] 'out' parameters and returned result on return from any
       primitive operation for the type that is visible to a client.  GNAT
       defines the synonyms ‘Invariant’ for ‘Type_Invariant’ and
       ‘Invariant'Class’ for ‘Type_Invariant'Class’.
  
       RM References: 13.03.03 (00)
  
!    * 'AI-0078 Relax Unchecked_Conversion alignment rules (0000-00-00)'
  
       In Ada 2012, compilers are required to support unchecked conversion
       where the target alignment is a multiple of the source alignment.
*************** Supported Aspect
*** 22904,22911 ****
  
       RM References: 13.09 (7)
  
!    * ‘AI-0195 Invalid value handling is implementation defined
!      (2010-07-03)’
  
       The handling of invalid values is now designated to be
       implementation defined.  This is a documentation change only,
--- 22904,22911 ----
  
       RM References: 13.09 (7)
  
!    * 'AI-0195 Invalid value handling is implementation defined
!      (2010-07-03)'
  
       The handling of invalid values is now designated to be
       implementation defined.  This is a documentation change only,
*************** Supported Aspect
*** 22919,22925 ****
  
       RM References: 13.09.01 (10)
  
!    * ‘AI-0193 Alignment of allocators (2010-09-16)’
  
       This AI introduces a new attribute ‘Max_Alignment_For_Allocation’,
       analogous to ‘Max_Size_In_Storage_Elements’, but for alignment
--- 22919,22925 ----
  
       RM References: 13.09.01 (10)
  
!    * 'AI-0193 Alignment of allocators (2010-09-16)'
  
       This AI introduces a new attribute ‘Max_Alignment_For_Allocation’,
       analogous to ‘Max_Size_In_Storage_Elements’, but for alignment
*************** Supported Aspect
*** 22928,22934 ****
       RM References: 13.11 (16) 13.11 (21) 13.11.01 (0) 13.11.01 (1)
       13.11.01 (2) 13.11.01 (3)
  
!    * ‘AI-0177 Parameterized expressions (2010-07-10)’
  
       The new Ada 2012 notion of parameterized expressions is
       implemented.  The form is:
--- 22928,22934 ----
       RM References: 13.11 (16) 13.11 (21) 13.11.01 (0) 13.11.01 (1)
       13.11.01 (2) 13.11.01 (3)
  
!    * 'AI-0177 Parameterized expressions (2010-07-10)'
  
       The new Ada 2012 notion of parameterized expressions is
       implemented.  The form is:
*************** Supported Aspect
*** 22941,22947 ****
  
       RM References: 13.11.01 (3/2)
  
!    * ‘AI-0033 Attach/Interrupt_Handler in generic (2010-07-24)’
  
       Neither of these two pragmas may appear within a generic template,
       because the generic might be instantiated at other than the library
--- 22941,22947 ----
  
       RM References: 13.11.01 (3/2)
  
!    * 'AI-0033 Attach/Interrupt_Handler in generic (2010-07-24)'
  
       Neither of these two pragmas may appear within a generic template,
       because the generic might be instantiated at other than the library
*************** Supported Aspect
*** 22949,22955 ****
  
       RM References: 13.11.02 (16) C.03.01 (7/2) C.03.01 (8/2)
  
!    * ‘AI-0161 Restriction No_Default_Stream_Attributes (2010-09-11)’
  
       A new restriction ‘No_Default_Stream_Attributes’ prevents the use
       of any of the default stream attributes for elementary types.  If
--- 22949,22955 ----
  
       RM References: 13.11.02 (16) C.03.01 (7/2) C.03.01 (8/2)
  
!    * 'AI-0161 Restriction No_Default_Stream_Attributes (2010-09-11)'
  
       A new restriction ‘No_Default_Stream_Attributes’ prevents the use
       of any of the default stream attributes for elementary types.  If
*************** Supported Aspect
*** 22958,22964 ****
  
       RM References: 13.12.01 (4/2) 13.13.02 (40/2) 13.13.02 (52/2)
  
!    * ‘AI-0194 Value of Stream_Size attribute (0000-00-00)’
  
       The ‘Stream_Size’ attribute returns the default number of bits in
       the stream representation of the given type.  This value is not
--- 22958,22964 ----
  
       RM References: 13.12.01 (4/2) 13.13.02 (40/2) 13.13.02 (52/2)
  
!    * 'AI-0194 Value of Stream_Size attribute (0000-00-00)'
  
       The ‘Stream_Size’ attribute returns the default number of bits in
       the stream representation of the given type.  This value is not
*************** Supported Aspect
*** 22967,22980 ****
  
       RM References: 13.13.02 (1.2/2)
  
!    * ‘AI-0109 Redundant check in S’Class’Input (0000-00-00)’
  
       This AI is an editorial change only.  It removes the need for a tag
       check that can never fail.
  
       RM References: 13.13.02 (34/2)
  
!    * ‘AI-0007 Stream read and private scalar types (0000-00-00)’
  
       The RM as written appeared to limit the possibilities of declaring
       read attribute procedures for private scalar types.  This
--- 22967,22980 ----
  
       RM References: 13.13.02 (1.2/2)
  
!    * 'AI-0109 Redundant check in S’Class’Input (0000-00-00)'
  
       This AI is an editorial change only.  It removes the need for a tag
       check that can never fail.
  
       RM References: 13.13.02 (34/2)
  
!    * 'AI-0007 Stream read and private scalar types (0000-00-00)'
  
       The RM as written appeared to limit the possibilities of declaring
       read attribute procedures for private scalar types.  This
*************** Supported Aspect
*** 22982,22988 ****
  
       RM References: 13.13.02 (50/2) 13.13.02 (51/2)
  
!    * ‘AI-0065 Remote access types and external streaming (0000-00-00)’
  
       This AI clarifies the fact that all remote access types support
       external streaming.  This fixes an obvious oversight in the
--- 22982,22988 ----
  
       RM References: 13.13.02 (50/2) 13.13.02 (51/2)
  
!    * 'AI-0065 Remote access types and external streaming (0000-00-00)'
  
       This AI clarifies the fact that all remote access types support
       external streaming.  This fixes an obvious oversight in the
*************** Supported Aspect
*** 22991,22997 ****
  
       RM References: 13.13.02 (52/2)
  
!    * ‘AI-0019 Freezing of primitives for tagged types (0000-00-00)’
  
       The RM suggests that primitive subprograms of a specific tagged
       type are frozen when the tagged type is frozen.  This would be an
--- 22991,22997 ----
  
       RM References: 13.13.02 (52/2)
  
!    * 'AI-0019 Freezing of primitives for tagged types (0000-00-00)'
  
       The RM suggests that primitive subprograms of a specific tagged
       type are frozen when the tagged type is frozen.  This would be an
*************** Supported Aspect
*** 23002,23008 ****
       RM References: 13.14 (2) 13.14 (3/1) 13.14 (8.1/1) 13.14 (10) 13.14
       (14) 13.14 (15.1/2)
  
!    * ‘AI-0017 Freezing and incomplete types (0000-00-00)’
  
       So-called ‘Taft-amendment types’ (i.e., types that are completed in
       package bodies) are not frozen by the occurrence of bodies in the
--- 23002,23008 ----
       RM References: 13.14 (2) 13.14 (3/1) 13.14 (8.1/1) 13.14 (10) 13.14
       (14) 13.14 (15.1/2)
  
!    * 'AI-0017 Freezing and incomplete types (0000-00-00)'
  
       So-called ‘Taft-amendment types’ (i.e., types that are completed in
       package bodies) are not frozen by the occurrence of bodies in the
*************** Supported Aspect
*** 23010,23016 ****
  
       RM References: 13.14 (3/1)
  
!    * ‘AI-0060 Extended definition of remote access types (0000-00-00)’
  
       This AI extends the definition of remote access types to include
       access to limited, synchronized, protected or task class-wide
--- 23010,23016 ----
  
       RM References: 13.14 (3/1)
  
!    * 'AI-0060 Extended definition of remote access types (0000-00-00)'
  
       This AI extends the definition of remote access types to include
       access to limited, synchronized, protected or task class-wide
*************** Supported Aspect
*** 23019,23025 ****
       RM References: A (4) E.02.02 (9/1) E.02.02 (9.2/1) E.02.02 (14/2)
       E.02.02 (18)
  
!    * ‘AI-0114 Classification of letters (0000-00-00)’
  
       The code points 170 (‘FEMININE ORDINAL INDICATOR’), 181 (‘MICRO
       SIGN’), and 186 (‘MASCULINE ORDINAL INDICATOR’) are technically
--- 23019,23025 ----
       RM References: A (4) E.02.02 (9/1) E.02.02 (9.2/1) E.02.02 (14/2)
       E.02.02 (18)
  
!    * 'AI-0114 Classification of letters (0000-00-00)'
  
       The code points 170 (‘FEMININE ORDINAL INDICATOR’), 181 (‘MICRO
       SIGN’), and 186 (‘MASCULINE ORDINAL INDICATOR’) are technically
*************** Supported Aspect
*** 23030,23036 ****
  
       RM References: A.03.02 (59) A.04.06 (7)
  
!    * ‘AI-0185 Ada.Wide_[Wide_]Characters.Handling (2010-07-06)’
  
       Two new packages ‘Ada.Wide_[Wide_]Characters.Handling’ provide
       classification functions for ‘Wide_Character’ and
--- 23030,23036 ----
  
       RM References: A.03.02 (59) A.04.06 (7)
  
!    * 'AI-0185 Ada.Wide_[Wide_]Characters.Handling (2010-07-06)'
  
       Two new packages ‘Ada.Wide_[Wide_]Characters.Handling’ provide
       classification functions for ‘Wide_Character’ and
*************** Supported Aspect
*** 23039,23045 ****
  
       RM References: A.03.05 (0) A.03.06 (0)
  
!    * ‘AI-0031 Add From parameter to Find_Token (2010-07-25)’
  
       A new version of ‘Find_Token’ is added to all relevant string
       packages, with an extra parameter ‘From’.  Instead of starting at
--- 23039,23045 ----
  
       RM References: A.03.05 (0) A.03.06 (0)
  
!    * 'AI-0031 Add From parameter to Find_Token (2010-07-25)'
  
       A new version of ‘Find_Token’ is added to all relevant string
       packages, with an extra parameter ‘From’.  Instead of starting at
*************** Supported Aspect
*** 23052,23058 ****
       RM References: A.04.03 (16) A.04.03 (67) A.04.03 (68/1) A.04.04
       (51) A.04.05 (46)
  
!    * ‘AI-0056 Index on null string returns zero (0000-00-00)’
  
       The wording in the Ada 2005 RM implied an incompatible handling of
       the ‘Index’ functions, resulting in raising an exception instead of
--- 23052,23058 ----
       RM References: A.04.03 (16) A.04.03 (67) A.04.03 (68/1) A.04.04
       (51) A.04.05 (46)
  
!    * 'AI-0056 Index on null string returns zero (0000-00-00)'
  
       The wording in the Ada 2005 RM implied an incompatible handling of
       the ‘Index’ functions, resulting in raising an exception instead of
*************** Supported Aspect
*** 23062,23068 ****
  
       RM References: A.04.03 (56.2/2) A.04.03 (58.5/2)
  
!    * ‘AI-0137 String encoding package (2010-03-25)’
  
       The packages ‘Ada.Strings.UTF_Encoding’, together with its child
       packages, ‘Conversions’, ‘Strings’, ‘Wide_Strings’, and
--- 23062,23068 ----
  
       RM References: A.04.03 (56.2/2) A.04.03 (58.5/2)
  
!    * 'AI-0137 String encoding package (2010-03-25)'
  
       The packages ‘Ada.Strings.UTF_Encoding’, together with its child
       packages, ‘Conversions’, ‘Strings’, ‘Wide_Strings’, and
*************** Supported Aspect
*** 23080,23086 ****
  
       RM References: A.04.11
  
!    * ‘AI-0038 Minor errors in Text_IO (0000-00-00)’
  
       These are minor errors in the description on three points.  The
       intent on all these points has always been clear, and GNAT has
--- 23080,23086 ----
  
       RM References: A.04.11
  
!    * 'AI-0038 Minor errors in Text_IO (0000-00-00)'
  
       These are minor errors in the description on three points.  The
       intent on all these points has always been clear, and GNAT has
*************** Supported Aspect
*** 23089,23095 ****
       RM References: A.10.05 (37) A.10.07 (8/1) A.10.07 (10) A.10.07 (12)
       A.10.08 (10) A.10.08 (24)
  
!    * ‘AI-0044 Restrictions on container instantiations (0000-00-00)’
  
       This AI places restrictions on allowed instantiations of generic
       containers.  These restrictions are not checked by the compiler, so
--- 23089,23095 ----
       RM References: A.10.05 (37) A.10.07 (8/1) A.10.07 (10) A.10.07 (12)
       A.10.08 (10) A.10.08 (24)
  
!    * 'AI-0044 Restrictions on container instantiations (0000-00-00)'
  
       This AI places restrictions on allowed instantiations of generic
       containers.  These restrictions are not checked by the compiler, so
*************** Supported Aspect
*** 23099,23105 ****
       RM References: A.18 (4/2) A.18.02 (231/2) A.18.03 (145/2) A.18.06
       (56/2) A.18.08 (66/2) A.18.09 (79/2) A.18.26 (5/2) A.18.26 (9/2)
  
!    * ‘AI-0127 Adding Locale Capabilities (2010-09-29)’
  
       This package provides an interface for identifying the current
       locale.
--- 23099,23105 ----
       RM References: A.18 (4/2) A.18.02 (231/2) A.18.03 (145/2) A.18.06
       (56/2) A.18.08 (66/2) A.18.09 (79/2) A.18.26 (5/2) A.18.26 (9/2)
  
!    * 'AI-0127 Adding Locale Capabilities (2010-09-29)'
  
       This package provides an interface for identifying the current
       locale.
*************** Supported Aspect
*** 23107,23113 ****
       RM References: A.19 A.19.01 A.19.02 A.19.03 A.19.05 A.19.06 A.19.07
       A.19.08 A.19.09 A.19.10 A.19.11 A.19.12 A.19.13
  
!    * ‘AI-0002 Export C with unconstrained arrays (0000-00-00)’
  
       The compiler is not required to support exporting an Ada subprogram
       with convention C if there are parameters or a return type of an
--- 23107,23113 ----
       RM References: A.19 A.19.01 A.19.02 A.19.03 A.19.05 A.19.06 A.19.07
       A.19.08 A.19.09 A.19.10 A.19.11 A.19.12 A.19.13
  
!    * 'AI-0002 Export C with unconstrained arrays (0000-00-00)'
  
       The compiler is not required to support exporting an Ada subprogram
       with convention C if there are parameters or a return type of an
*************** Supported Aspect
*** 23118,23124 ****
  
       RM References: B.01 (17) B.03 (62) B.03 (71.1/2)
  
!    * ‘AI-0216 No_Task_Hierarchy forbids local tasks (0000-00-00)’
  
       It is clearly the intention that ‘No_Task_Hierarchy’ is intended to
       forbid tasks declared locally within subprograms, or functions
--- 23118,23124 ----
  
       RM References: B.01 (17) B.03 (62) B.03 (71.1/2)
  
!    * 'AI-0216 No_Task_Hierarchy forbids local tasks (0000-00-00)'
  
       It is clearly the intention that ‘No_Task_Hierarchy’ is intended to
       forbid tasks declared locally within subprograms, or functions
*************** Supported Aspect
*** 23129,23152 ****
  
       RM References: D.07 (3/3)
  
!    * ‘AI-0211 No_Relative_Delays forbids Set_Handler use (2010-07-09)’
  
       The restriction ‘No_Relative_Delays’ forbids any calls to the
       subprogram ‘Ada.Real_Time.Timing_Events.Set_Handler’.
  
       RM References: D.07 (5) D.07 (10/2) D.07 (10.4/2) D.07 (10.7/2)
  
!    * ‘AI-0190 pragma Default_Storage_Pool (2010-09-15)’
  
       This AI introduces a new pragma ‘Default_Storage_Pool’, which can
       be used to control storage pools globally.  In particular, you can
!      force every access type that is used for allocation (‘new’) to have
       an explicit storage pool, or you can declare a pool globally to be
       used for all access types that lack an explicit one.
  
       RM References: D.07 (8)
  
!    * ‘AI-0189 No_Allocators_After_Elaboration (2010-01-23)’
  
       This AI introduces a new restriction
       ‘No_Allocators_After_Elaboration’, which says that no dynamic
--- 23129,23152 ----
  
       RM References: D.07 (3/3)
  
!    * 'AI-0211 No_Relative_Delays forbids Set_Handler use (2010-07-09)'
  
       The restriction ‘No_Relative_Delays’ forbids any calls to the
       subprogram ‘Ada.Real_Time.Timing_Events.Set_Handler’.
  
       RM References: D.07 (5) D.07 (10/2) D.07 (10.4/2) D.07 (10.7/2)
  
!    * 'AI-0190 pragma Default_Storage_Pool (2010-09-15)'
  
       This AI introduces a new pragma ‘Default_Storage_Pool’, which can
       be used to control storage pools globally.  In particular, you can
!      force every access type that is used for allocation ('new') to have
       an explicit storage pool, or you can declare a pool globally to be
       used for all access types that lack an explicit one.
  
       RM References: D.07 (8)
  
!    * 'AI-0189 No_Allocators_After_Elaboration (2010-01-23)'
  
       This AI introduces a new restriction
       ‘No_Allocators_After_Elaboration’, which says that no dynamic
*************** Supported Aspect
*** 23158,23164 ****
  
       RM References: D.07 (19.1/2) H.04 (23.3/2)
  
!    * ‘AI-0171 Pragma CPU and Ravenscar Profile (2010-09-24)’
  
       A new package ‘System.Multiprocessors’ is added, together with the
       definition of pragma ‘CPU’ for controlling task affinity.  A new no
--- 23158,23164 ----
  
       RM References: D.07 (19.1/2) H.04 (23.3/2)
  
!    * 'AI-0171 Pragma CPU and Ravenscar Profile (2010-09-24)'
  
       A new package ‘System.Multiprocessors’ is added, together with the
       definition of pragma ‘CPU’ for controlling task affinity.  A new no
*************** Supported Aspect
*** 23168,23174 ****
  
       RM References: D.13.01 (4/2) D.16
  
!    * ‘AI-0210 Correct Timing_Events metric (0000-00-00)’
  
       This is a documentation only issue regarding wording of metric
       requirements, that does not affect the implementation of the
--- 23168,23174 ----
  
       RM References: D.13.01 (4/2) D.16
  
!    * 'AI-0210 Correct Timing_Events metric (0000-00-00)'
  
       This is a documentation only issue regarding wording of metric
       requirements, that does not affect the implementation of the
*************** Supported Aspect
*** 23176,23189 ****
  
       RM References: D.15 (24/2)
  
!    * ‘AI-0206 Remote types packages and preelaborate (2010-07-24)’
  
       Remote types packages are now allowed to depend on preelaborated
       packages.  This was formerly considered illegal.
  
       RM References: E.02.02 (6)
  
!    * ‘AI-0152 Restriction No_Anonymous_Allocators (2010-09-08)’
  
       Restriction ‘No_Anonymous_Allocators’ prevents the use of
       allocators where the type of the returned value is an anonymous
--- 23176,23189 ----
  
       RM References: D.15 (24/2)
  
!    * 'AI-0206 Remote types packages and preelaborate (2010-07-24)'
  
       Remote types packages are now allowed to depend on preelaborated
       packages.  This was formerly considered illegal.
  
       RM References: E.02.02 (6)
  
!    * 'AI-0152 Restriction No_Anonymous_Allocators (2010-09-08)'
  
       Restriction ‘No_Anonymous_Allocators’ prevents the use of
       allocators where the type of the returned value is an anonymous
*************** File: gnat_rm.info,  Node: Legal Ada 83
*** 24459,24465 ****
  Some legal Ada 83 programs are illegal (i.e., they will fail to compile)
  in Ada 95 and later versions of the standard:
  
!    * ‘Character literals’
  
       Some uses of character literals are ambiguous.  Since Ada 95 has
       introduced ‘Wide_Character’ as a new predefined character type,
--- 24459,24465 ----
  Some legal Ada 83 programs are illegal (i.e., they will fail to compile)
  in Ada 95 and later versions of the standard:
  
!    * 'Character literals'
  
       Some uses of character literals are ambiguous.  Since Ada 95 has
       introduced ‘Wide_Character’ as a new predefined character type,
*************** in Ada 95 and later versions of the stan
*** 24474,24487 ****
  
            for Char in Character range 'A' .. 'Z' loop ... end loop;
  
!    * ‘New reserved words’
  
       The identifiers ‘abstract’, ‘aliased’, ‘protected’, ‘requeue’,
       ‘tagged’, and ‘until’ are reserved in Ada 95.  Existing Ada 83 code
       using any of these identifiers must be edited to use some
       alternative name.
  
!    * ‘Freezing rules’
  
       The rules in Ada 95 are slightly different with regard to the point
       at which entities are frozen, and representation pragmas and
--- 24474,24487 ----
  
            for Char in Character range 'A' .. 'Z' loop ... end loop;
  
!    * 'New reserved words'
  
       The identifiers ‘abstract’, ‘aliased’, ‘protected’, ‘requeue’,
       ‘tagged’, and ‘until’ are reserved in Ada 95.  Existing Ada 83 code
       using any of these identifiers must be edited to use some
       alternative name.
  
!    * 'Freezing rules'
  
       The rules in Ada 95 are slightly different with regard to the point
       at which entities are frozen, and representation pragmas and
*************** in Ada 95 and later versions of the stan
*** 24495,24501 ****
       to a subprogram body.  If necessary, a separate subprogram
       declaration must be introduced to which the pragma can be applied.
  
!    * ‘Optional bodies for library packages’
  
       In Ada 83, a package that did not require a package body was
       nevertheless allowed to have one.  This lead to certain surprises
--- 24495,24501 ----
       to a subprogram body.  If necessary, a separate subprogram
       declaration must be introduced to which the pragma can be applied.
  
!    * 'Optional bodies for library packages'
  
       In Ada 83, a package that did not require a package body was
       nevertheless allowed to have one.  This lead to certain surprises
*************** in Ada 95 and later versions of the stan
*** 24513,24519 ****
       spec, since one effect of this pragma is to require the presence of
       a package body.
  
!    * ‘Numeric_Error is the same exception as Constraint_Error’
  
       In Ada 95, the exception ‘Numeric_Error’ is a renaming of
       ‘Constraint_Error’.  This means that it is illegal to have separate
--- 24513,24519 ----
       spec, since one effect of this pragma is to require the presence of
       a package body.
  
!    * 'Numeric_Error is the same exception as Constraint_Error'
  
       In Ada 95, the exception ‘Numeric_Error’ is a renaming of
       ‘Constraint_Error’.  This means that it is illegal to have separate
*************** in Ada 95 and later versions of the stan
*** 24522,24528 ****
       83, a compiler was free to raise ‘Constraint_Error’ in place of
       ‘Numeric_Error’ in all cases).
  
!    * ‘Indefinite subtypes in generics’
  
       In Ada 83, it was permissible to pass an indefinite type (e.g,
       ‘String’) as the actual for a generic formal private type, but then
--- 24522,24528 ----
       83, a compiler was free to raise ‘Constraint_Error’ in place of
       ‘Numeric_Error’ in all cases).
  
!    * 'Indefinite subtypes in generics'
  
       In Ada 83, it was permissible to pass an indefinite type (e.g,
       ‘String’) as the actual for a generic formal private type, but then
*************** File: gnat_rm.info,  Node: More determin
*** 24548,24554 ****
  20.2.2 More deterministic semantics
  -----------------------------------
  
!    * ‘Conversions’
  
       Conversions from real types to integer types round away from 0.  In
       Ada 83 the conversion Integer(2.5) could deliver either 2 or 3 as
--- 24548,24554 ----
  20.2.2 More deterministic semantics
  -----------------------------------
  
!    * 'Conversions'
  
       Conversions from real types to integer types round away from 0.  In
       Ada 83 the conversion Integer(2.5) could deliver either 2 or 3 as
*************** File: gnat_rm.info,  Node: More determin
*** 24560,24566 ****
       that this issue is no worse than already existed in Ada 83 when
       porting code from one vendor to another.
  
!    * ‘Tasking’
  
       The Real-Time Annex introduces a set of policies that define the
       behavior of features that were implementation dependent in Ada 83,
--- 24560,24566 ----
       that this issue is no worse than already existed in Ada 83 when
       porting code from one vendor to another.
  
!    * 'Tasking'
  
       The Real-Time Annex introduces a set of policies that define the
       behavior of features that were implementation dependent in Ada 83,
*************** was not possible in Ada 83.  Fortunately
*** 24578,24584 ****
  one situation that you should be alert to is the change in the
  predefined type ‘Character’ from 7-bit ASCII to 8-bit Latin-1.
  
!    * ‘Range of type ‘‘Character‘‘’
  
       The range of ‘Standard.Character’ is now the full 256 characters of
       Latin-1, whereas in most Ada 83 implementations it was restricted
--- 24578,24584 ----
  one situation that you should be alert to is the change in the
  predefined type ‘Character’ from 7-bit ASCII to 8-bit Latin-1.
  
!    * 'Range of type ''Character'''
  
       The range of ‘Standard.Character’ is now the full 256 characters of
       Latin-1, whereas in most Ada 83 implementations it was restricted
*************** File: gnat_rm.info,  Node: Other languag
*** 24603,24609 ****
  20.2.4 Other language compatibility issues
  ------------------------------------------
  
!    * ‘-gnat83’ switch
  
       All implementations of GNAT provide a switch that causes GNAT to
       operate in Ada 83 mode.  In this mode, some but not all
--- 24603,24609 ----
  20.2.4 Other language compatibility issues
  ------------------------------------------
  
!    * '-gnat83' switch
  
       All implementations of GNAT provide a switch that causes GNAT to
       operate in Ada 83 mode.  In this mode, some but not all
*************** there are a number of incompatibilities.
*** 24637,24649 ****
  for a complete description please see the ‘Annotated Ada 2005 Reference
  Manual’, or section 9.1.1 in ‘Rationale for Ada 2005’.
  
!    * ‘New reserved words.’
  
       The words ‘interface’, ‘overriding’ and ‘synchronized’ are reserved
       in Ada 2005.  A pre-Ada 2005 program that uses any of these as an
       identifier will be illegal.
  
!    * ‘New declarations in predefined packages.’
  
       A number of packages in the predefined environment contain new
       declarations: ‘Ada.Exceptions’, ‘Ada.Real_Time’, ‘Ada.Strings’,
--- 24637,24649 ----
  for a complete description please see the ‘Annotated Ada 2005 Reference
  Manual’, or section 9.1.1 in ‘Rationale for Ada 2005’.
  
!    * 'New reserved words.'
  
       The words ‘interface’, ‘overriding’ and ‘synchronized’ are reserved
       in Ada 2005.  A pre-Ada 2005 program that uses any of these as an
       identifier will be illegal.
  
!    * 'New declarations in predefined packages.'
  
       A number of packages in the predefined environment contain new
       declarations: ‘Ada.Exceptions’, ‘Ada.Real_Time’, ‘Ada.Strings’,
*************** Manual’, or section 9.1.1 in ‘Ration
*** 24654,24678 ****
       program does a ‘with’ and ‘use’ of any of these packages, the new
       declarations may cause name clashes.
  
!    * ‘Access parameters.’
  
       A nondispatching subprogram with an access parameter cannot be
       renamed as a dispatching operation.  This was permitted in Ada 95.
  
!    * ‘Access types, discriminants, and constraints.’
  
       Rule changes in this area have led to some incompatibilities; for
       example, constrained subtypes of some access types are not
       permitted in Ada 2005.
  
!    * ‘Aggregates for limited types.’
  
       The allowance of aggregates for limited types in Ada 2005 raises
       the possibility of ambiguities in legal Ada 95 programs, since
       additional types now need to be considered in expression
       resolution.
  
!    * ‘Fixed-point multiplication and division.’
  
       Certain expressions involving ‘*’ or ‘/’ for a fixed-point type,
       which were legal in Ada 95 and invoked the predefined versions of
--- 24654,24678 ----
       program does a ‘with’ and ‘use’ of any of these packages, the new
       declarations may cause name clashes.
  
!    * 'Access parameters.'
  
       A nondispatching subprogram with an access parameter cannot be
       renamed as a dispatching operation.  This was permitted in Ada 95.
  
!    * 'Access types, discriminants, and constraints.'
  
       Rule changes in this area have led to some incompatibilities; for
       example, constrained subtypes of some access types are not
       permitted in Ada 2005.
  
!    * 'Aggregates for limited types.'
  
       The allowance of aggregates for limited types in Ada 2005 raises
       the possibility of ambiguities in legal Ada 95 programs, since
       additional types now need to be considered in expression
       resolution.
  
!    * 'Fixed-point multiplication and division.'
  
       Certain expressions involving ‘*’ or ‘/’ for a fixed-point type,
       which were legal in Ada 95 and invoked the predefined versions of
*************** Manual’, or section 9.1.1 in ‘Ration
*** 24680,24686 ****
       either by applying a type conversion to the expression, or by
       explicitly invoking the operation from package ‘Standard’.
  
!    * ‘Return-by-reference types.’
  
       The Ada 95 return-by-reference mechanism has been removed.
       Instead, the user can declare a function returning a value from an
--- 24680,24686 ----
       either by applying a type conversion to the expression, or by
       explicitly invoking the operation from package ‘Standard’.
  
!    * 'Return-by-reference types.'
  
       The Ada 95 return-by-reference mechanism has been removed.
       Instead, the user can declare a function returning a value from an
*************** will not encounter access before elabora
*** 24783,24789 ****
  inserting ‘Elaborate’ or ‘Elaborate_All’ pragmas where needed.  However,
  this can lead to the creation of elaboration circularities and a
  resulting rejection of the program by gnatbind.  This issue is
! thoroughly described in the ‘Elaboration Order Handling in GNAT’
  appendix in the ‘GNAT User’s Guide’.  In brief, there are several ways
  to deal with this situation:
  
--- 24783,24789 ----
  inserting ‘Elaborate’ or ‘Elaborate_All’ pragmas where needed.  However,
  this can lead to the creation of elaboration circularities and a
  resulting rejection of the program by gnatbind.  This issue is
! thoroughly described in the 'Elaboration Order Handling in GNAT'
  appendix in the ‘GNAT User’s Guide’.  In brief, there are several ways
  to deal with this situation:
  
*************** to deal with this situation:
*** 24793,24799 ****
     * Constrain the elaboration order by including explicit
       ‘Elaborate_Body’ or ‘Elaborate’ pragmas, and then inhibit the
       generation of implicit ‘Elaborate_All’ pragmas either globally (as
!      an effect of the ‘-gnatE’ switch) or locally (by selectively
       suppressing elaboration checks via pragma
       ‘Suppress(Elaboration_Check)’ when it is safe to do so).
  
--- 24793,24799 ----
     * Constrain the elaboration order by including explicit
       ‘Elaborate_Body’ or ‘Elaborate’ pragmas, and then inhibit the
       generation of implicit ‘Elaborate_All’ pragmas either globally (as
!      an effect of the '-gnatE' switch) or locally (by selectively
       suppressing elaboration checks via pragma
       ‘Suppress(Elaboration_Check)’ when it is safe to do so).
  
*************** not affect porting code to GNAT. (As of
*** 24830,24836 ****
  compiler available for Ada 2005; the following issues may or may not
  arise for Ada 2005 programs when other compilers appear.)
  
!    * ‘Ada 83 Pragmas and Attributes’
  
       Ada 95 compilers are allowed, but not required, to implement the
       missing Ada 83 pragmas and attributes that are no longer defined in
--- 24830,24836 ----
  compiler available for Ada 2005; the following issues may or may not
  arise for Ada 2005 programs when other compilers appear.)
  
!    * 'Ada 83 Pragmas and Attributes'
  
       Ada 95 compilers are allowed, but not required, to implement the
       missing Ada 83 pragmas and attributes that are no longer defined in
*************** arise for Ada 2005 programs when other c
*** 24838,24851 ****
       eliminating this as a compatibility concern, but some other Ada 95
       compilers reject these pragmas and attributes.
  
!    * ‘Specialized Needs Annexes’
  
       GNAT implements the full set of special needs annexes.  At the
       current time, it is the only Ada 95 compiler to do so.  This means
       that programs making use of these features may not be portable to
       other Ada 95 compilation systems.
  
!    * ‘Representation Clauses’
  
       Some other Ada 95 compilers implement only the minimal set of
       representation clauses required by the Ada 95 reference manual.
--- 24838,24851 ----
       eliminating this as a compatibility concern, but some other Ada 95
       compilers reject these pragmas and attributes.
  
!    * 'Specialized Needs Annexes'
  
       GNAT implements the full set of special needs annexes.  At the
       current time, it is the only Ada 95 compiler to do so.  This means
       that programs making use of these features may not be portable to
       other Ada 95 compilation systems.
  
!    * 'Representation Clauses'
  
       Some other Ada 95 compilers implement only the minimal set of
       representation clauses required by the Ada 95 reference manual.
*************** implementation dependent characteristics
*** 24876,24882 ****
  following is a list of the cases most likely to arise in existing Ada 83
  code.
  
!    * ‘Implicit Packing’
  
       Some Ada 83 compilers allowed a Size specification to cause
       implicit packing of an array or record.  This could cause expensive
--- 24876,24882 ----
  following is a list of the cases most likely to arise in existing Ada 83
  code.
  
!    * 'Implicit Packing'
  
       Some Ada 83 compilers allowed a Size specification to cause
       implicit packing of an array or record.  This could cause expensive
*************** code.
*** 24891,24897 ****
       provide the explicit pragma ‘Pack’, or for more fine tuned control,
       provide a Component_Size clause.
  
!    * ‘Meaning of Size Attribute’
  
       The Size attribute in Ada 95 (and Ada 2005) for discrete types is
       defined as the minimal number of bits required to hold values of
--- 24891,24897 ----
       provide the explicit pragma ‘Pack’, or for more fine tuned control,
       provide a Component_Size clause.
  
!    * 'Meaning of Size Attribute'
  
       The Size attribute in Ada 95 (and Ada 2005) for discrete types is
       defined as the minimal number of bits required to hold values of
*************** code.
*** 24904,24910 ****
       can provide a useful way of duplicating the behavior of some Ada 83
       compiler systems.
  
!    * ‘Size of Access Types’
  
       A common assumption in Ada 83 code is that an access type is in
       fact a pointer, and that therefore it will be the same size as a
--- 24904,24910 ----
       can provide a useful way of duplicating the behavior of some Ada 83
       compiler systems.
  
!    * 'Size of Access Types'
  
       A common assumption in Ada 83 code is that an access type is in
       fact a pointer, and that therefore it will be the same size as a
*************** subset of them can sensibly be implement
*** 24955,24966 ****
  in *note Implementation Defined Pragmas: 7. indicates whether or not
  they are applicable to GNAT.
  
!    * ‘Default floating-point representation’
  
       In GNAT, the default floating-point format is IEEE, whereas in HP
       Ada 83, it is VMS format.
  
!    * ‘System’
  
       the package System in GNAT exactly corresponds to the definition in
       the Ada 95 reference manual, which means that it excludes many of
--- 24955,24966 ----
  in *note Implementation Defined Pragmas: 7. indicates whether or not
  they are applicable to GNAT.
  
!    * 'Default floating-point representation'
  
       In GNAT, the default floating-point format is IEEE, whereas in HP
       Ada 83, it is VMS format.
  
!    * 'System'
  
       the package System in GNAT exactly corresponds to the definition in
       the Ada 95 reference manual, which means that it excludes many of
*************** Copyright 2000, 2001, 2002, 2007, 2008 F
*** 24983,24989 ****
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
  
! ‘Preamble’
  
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document “free” in the sense of freedom: to assure
--- 24983,24989 ----
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
  
! 'Preamble'
  
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document “free” in the sense of freedom: to assure
*************** used for any textual work, regardless of
*** 25006,25027 ****
  published as a printed book.  We recommend this License principally for
  works whose purpose is instruction or reference.
  
! ‘1.  APPLICABILITY AND DEFINITIONS’
  
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
  world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The ‘Document’, below, refers
  to any such manual or work.  Any member of the public is a licensee, and
! is addressed as “‘you’”.  You accept the license if you copy, modify or
  distribute the work in a way requiring permission under copyright law.
  
! A “‘Modified Version’” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “‘Secondary Section’” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
  publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
--- 25006,25027 ----
  published as a printed book.  We recommend this License principally for
  works whose purpose is instruction or reference.
  
! '1.  APPLICABILITY AND DEFINITIONS'
  
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
  world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The 'Document', below, refers
  to any such manual or work.  Any member of the public is a licensee, and
! is addressed as “'you'”.  You accept the license if you copy, modify or
  distribute the work in a way requiring permission under copyright law.
  
! A “'Modified Version'” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “'Secondary Section'” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
  publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
*************** mathematics.)  The relationship could be
*** 25031,25037 ****
  connection with the subject or with related matters, or of legal,
  commercial, philosophical, ethical or political position regarding them.
  
! The “‘Invariant Sections’” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice that
  says that the Document is released under this License.  If a section
  does not fit the above definition of Secondary then it is not allowed to
--- 25031,25037 ----
  connection with the subject or with related matters, or of legal,
  commercial, philosophical, ethical or political position regarding them.
  
! The “'Invariant Sections'” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice that
  says that the Document is released under this License.  If a section
  does not fit the above definition of Secondary then it is not allowed to
*************** be designated as Invariant.  The Documen
*** 25039,25050 ****
  Sections.  If the Document does not identify any Invariant Sections then
  there are none.
  
! The “‘Cover Texts’” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may be
  at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “‘Transparent’” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the general
  public, that is suitable for revising the document straightforwardly
  with generic text editors or (for images composed of pixels) generic
--- 25039,25050 ----
  Sections.  If the Document does not identify any Invariant Sections then
  there are none.
  
! The “'Cover Texts'” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may be
  at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “'Transparent'” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the general
  public, that is suitable for revising the document straightforwardly
  with generic text editors or (for images composed of pixels) generic
*************** formatters.  A copy made in an otherwise
*** 25055,25061 ****
  markup, or absence of markup, has been arranged to thwart or discourage
  subsequent modification by readers is not Transparent.  An image format
  is not Transparent if used for any substantial amount of text.  A copy
! that is not “Transparent” is called ‘Opaque’.
  
  Examples of suitable formats for Transparent copies include plain ASCII
  without markup, Texinfo input format, LaTeX input format, SGML or XML
--- 25055,25061 ----
  markup, or absence of markup, has been arranged to thwart or discourage
  subsequent modification by readers is not Transparent.  An image format
  is not Transparent if used for any substantial amount of text.  A copy
! that is not “Transparent” is called 'Opaque'.
  
  Examples of suitable formats for Transparent copies include plain ASCII
  without markup, Texinfo input format, LaTeX input format, SGML or XML
*************** processing tools are not generally avail
*** 25068,25089 ****
  HTML, PostScript or PDF produced by some word processors for output
  purposes only.
  
! The “‘Title Page’” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in formats
  which do not have any title page as such, “Title Page” means the text
  near the most prominent appearance of the work’s title, preceding the
  beginning of the body of the text.
  
! The “‘publisher’” means any person or entity that distributes copies of
  the Document to the public.
  
! A section “‘Entitled XYZ’” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “‘Acknowledgements’”,
! “‘Dedications’”, “‘Endorsements’”, or “‘History’”.)  To “‘Preserve the
! Title’” of such a section when you modify the Document means that it
  remains a section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
--- 25068,25089 ----
  HTML, PostScript or PDF produced by some word processors for output
  purposes only.
  
! The “'Title Page'” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in formats
  which do not have any title page as such, “Title Page” means the text
  near the most prominent appearance of the work’s title, preceding the
  beginning of the body of the text.
  
! The “'publisher'” means any person or entity that distributes copies of
  the Document to the public.
  
! A section “'Entitled XYZ'” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “'Acknowledgements'”,
! “'Dedications'”, “'Endorsements'”, or “'History'”.)  To “'Preserve the
! Title'” of such a section when you modify the Document means that it
  remains a section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
*************** but only as regards disclaiming warranti
*** 25093,25099 ****
  these Warranty Disclaimers may have is void and has no effect on the
  meaning of this License.
  
! ‘2.  VERBATIM COPYING’
  
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
--- 25093,25099 ----
  these Warranty Disclaimers may have is void and has no effect on the
  meaning of this License.
  
! '2.  VERBATIM COPYING'
  
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
*************** number of copies you must also follow th
*** 25108,25114 ****
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
  
! ‘3.  COPYING IN QUANTITY’
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
--- 25108,25114 ----
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
  
! '3.  COPYING IN QUANTITY'
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
*************** It is requested, but not required, that
*** 25145,25151 ****
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
  
! ‘4.  MODIFICATIONS’
  
  You may copy and distribute a Modified Version of the Document under the
  conditions of sections 2 and 3 above, provided that you release the
--- 25145,25151 ----
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
  
! '4.  MODIFICATIONS'
  
  You may copy and distribute a Modified Version of the Document under the
  conditions of sections 2 and 3 above, provided that you release the
*************** The author(s) and publisher(s) of the Do
*** 25243,25249 ****
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  
! ‘5.  COMBINING DOCUMENTS’
  
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
--- 25243,25249 ----
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  
! '5.  COMBINING DOCUMENTS'
  
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
*************** likewise combine any sections Entitled �
*** 25267,25273 ****
  sections Entitled “Dedications”.  You must delete all sections Entitled
  “Endorsements”.
  
! ‘6.  COLLECTIONS OF DOCUMENTS’
  
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
--- 25267,25273 ----
  sections Entitled “Dedications”.  You must delete all sections Entitled
  “Endorsements”.
  
! '6.  COLLECTIONS OF DOCUMENTS'
  
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
*************** it individually under this License, prov
*** 25280,25286 ****
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
  
! ‘7.  AGGREGATION WITH INDEPENDENT WORKS’
  
  A compilation of the Document or its derivatives with other separate and
  independent documents or works, in or on a volume of a storage or
--- 25280,25286 ----
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
  
! '7.  AGGREGATION WITH INDEPENDENT WORKS'
  
  A compilation of the Document or its derivatives with other separate and
  independent documents or works, in or on a volume of a storage or
*************** that bracket the Document within the agg
*** 25298,25304 ****
  equivalent of covers if the Document is in electronic form.  Otherwise
  they must appear on printed covers that bracket the whole aggregate.
  
! ‘8.  TRANSLATION’
  
  Translation is considered a kind of modification, so you may distribute
  translations of the Document under the terms of section 4.  Replacing
--- 25298,25304 ----
  equivalent of covers if the Document is in electronic form.  Otherwise
  they must appear on printed covers that bracket the whole aggregate.
  
! '8.  TRANSLATION'
  
  Translation is considered a kind of modification, so you may distribute
  translations of the Document under the terms of section 4.  Replacing
*************** If a section in the Document is Entitled
*** 25317,25323 ****
  “Dedications”, or “History”, the requirement (section 4) to Preserve its
  Title (section 1) will typically require changing the actual title.
  
! ‘9.  TERMINATION’
  
  You may not copy, modify, sublicense, or distribute the Document except
  as expressly provided under this License.  Any attempt otherwise to
--- 25317,25323 ----
  “Dedications”, or “History”, the requirement (section 4) to Preserve its
  Title (section 1) will typically require changing the actual title.
  
! '9.  TERMINATION'
  
  You may not copy, modify, sublicense, or distribute the Document except
  as expressly provided under this License.  Any attempt otherwise to
*************** this License.  If your rights have been
*** 25344,25350 ****
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
  
! ‘10.  FUTURE REVISIONS OF THIS LICENSE’
  
  The Free Software Foundation may publish new, revised versions of the
  GNU Free Documentation License from time to time.  Such new versions
--- 25344,25350 ----
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
  
! '10.  FUTURE REVISIONS OF THIS LICENSE'
  
  The Free Software Foundation may publish new, revised versions of the
  GNU Free Documentation License from time to time.  Such new versions
*************** that a proxy can decide which future ver
*** 25364,25370 ****
  used, that proxy’s public statement of acceptance of a version
  permanently authorizes you to choose that version for the Document.
  
! ‘11.  RELICENSING’
  
  “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
  Wide Web server that publishes copyrightable works and also provides
--- 25364,25370 ----
  used, that proxy’s public statement of acceptance of a version
  permanently authorizes you to choose that version for the Document.
  
! '11.  RELICENSING'
  
  “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
  Wide Web server that publishes copyrightable works and also provides
*************** The operator of an MMC Site may republis
*** 25392,25398 ****
  under CC-BY-SA on the same site at any time before August 1, 2009,
  provided the MMC is eligible for relicensing.
  
! ‘ADDENDUM: How to use this License for your documents’
  
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and license
--- 25392,25398 ----
  under CC-BY-SA on the same site at any time before August 1, 2009,
  provided the MMC is eligible for relicensing.
  
! 'ADDENDUM: How to use this License for your documents'
  
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and license
*************** Index
*** 25431,25442 ****
  [index]
  * Menu:
  
  * -gnat12 option (gcc):                  Implementation of Ada 2012 Features.
                                                               (line    6)
  * -gnatR (gcc):                          Determining the Representations chosen by GNAT.
                                                               (line    6)
- * ___lock file (for shared passive packages): GNAT Implementation of Shared Passive Packages.
-                                                              (line   72)
  * Abort_Signal:                          Attribute Abort_Signal.
                                                               (line    6)
  * Abstract_State:                        Aspect Abstract_State.
--- 25431,25442 ----
  [index]
  * Menu:
  
+ * ___lock file (for shared passive packages): GNAT Implementation of Shared Passive Packages.
+                                                              (line   72)
  * -gnat12 option (gcc):                  Implementation of Ada 2012 Features.
                                                               (line    6)
  * -gnatR (gcc):                          Determining the Representations chosen by GNAT.
                                                               (line    6)
  * Abort_Signal:                          Attribute Abort_Signal.
                                                               (line    6)
  * Abstract_State:                        Aspect Abstract_State.
*************** Index
*** 25468,25473 ****
--- 25468,25475 ----
                                                               (line   79)
  * Ada Extensions:                        Pragma Extensions_Allowed.
                                                               (line    6)
+ * Ada_2012 configuration pragma:         Implementation of Ada 2012 Features.
+                                                              (line    6)
  * Ada.Characters.Handling:               RM A 1 52 Names of Predefined Numeric Types.
                                                               (line   13)
  * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads.
*************** Index
*** 25524,25531 ****
                                                               (line    6)
  * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads.
                                                               (line    6)
- * Ada_2012 configuration pragma:         Implementation of Ada 2012 Features.
-                                                              (line    6)
  * Address:                               RM 13 5 3 7-8 Bit Ordering.
                                                               (line   16)
  * Address <1>:                           RM 13 7 37 Address as Private.
--- 25526,25531 ----
*************** Index
*** 25815,25827 ****
                                                               (line    6)
  * Asm_Output:                            Attribute Asm_Output.
                                                               (line    6)
  * Assertions:                            Pragma Check.       (line    6)
  * Assertions <1>:                        Pragma Check_Policy.
                                                               (line    6)
  * Assertions <2>:                        System Assertions s-assert ads.
                                                               (line    6)
- * Assert_Failure:                        System Assertions s-assert ads.
-                                                              (line    6)
  * Async_Readers:                         Aspect Async_Readers.
                                                               (line    6)
  * Async_Writers:                         Aspect Async_Writers.
--- 25815,25827 ----
                                                               (line    6)
  * Asm_Output:                            Attribute Asm_Output.
                                                               (line    6)
+ * Assert_Failure:                        System Assertions s-assert ads.
+                                                              (line    6)
  * Assertions:                            Pragma Check.       (line    6)
  * Assertions <1>:                        Pragma Check_Policy.
                                                               (line    6)
  * Assertions <2>:                        System Assertions s-assert ads.
                                                               (line    6)
  * Async_Readers:                         Aspect Async_Readers.
                                                               (line    6)
  * Async_Writers:                         Aspect Async_Writers.
*************** Index
*** 25905,25911 ****
                                                               (line    6)
  * CGI (Common Gateway Interface) debugging: GNAT CGI Debug g-cgideb ads.
                                                               (line    6)
! * Character handling (‘‘GNAT.Case_Util‘‘): GNAT Case_Util g-casuti ads.
                                                               (line    6)
  * Character Sets:                        RM 2 8 17-19 Pragmas.
                                                               (line   17)
--- 25905,25911 ----
                                                               (line    6)
  * CGI (Common Gateway Interface) debugging: GNAT CGI Debug g-cgideb ads.
                                                               (line    6)
! * Character handling (''GNAT.Case_Util''): GNAT Case_Util g-casuti ads.
                                                               (line    6)
  * Character Sets:                        RM 2 8 17-19 Pragmas.
                                                               (line   17)
*************** Index
*** 26067,26073 ****
                                                               (line    6)
  * Dump Memory:                           GNAT Memory_Dump g-memdum ads.
                                                               (line    6)
! * Duration’Small:                        RM 3 6 2 11 Multidimensional Arrays.
                                                               (line   14)
  * effect on representation:              Effect of Convention on Representation.
                                                               (line    6)
--- 26067,26073 ----
                                                               (line    6)
  * Dump Memory:                           GNAT Memory_Dump g-memdum ads.
                                                               (line    6)
! * Duration'Small:                        RM 3 6 2 11 Multidimensional Arrays.
                                                               (line   14)
  * effect on representation:              Effect of Convention on Representation.
                                                               (line    6)
*************** Index
*** 26075,26090 ****
                                                               (line    6)
  * Effective_Writes:                      Aspect Effective_Writes.
                                                               (line    6)
- * Elaborated:                            Attribute Elaborated.
-                                                              (line    6)
- * Elaboration control:                   Pragma Elaboration_Checks.
-                                                              (line    6)
  * Elab_Body:                             Attribute Elab_Body.
                                                               (line    6)
  * Elab_Spec:                             Attribute Elab_Spec.
                                                               (line    6)
  * Elab_Subp_Body:                        Attribute Elab_Subp_Body.
                                                               (line    6)
  * Elimination of unused subprograms:     Pragma Eliminate.   (line    6)
  * Emax:                                  Attribute Emax.     (line    6)
  * Enabled:                               Attribute Enabled.  (line    6)
--- 26075,26090 ----
                                                               (line    6)
  * Effective_Writes:                      Aspect Effective_Writes.
                                                               (line    6)
  * Elab_Body:                             Attribute Elab_Body.
                                                               (line    6)
  * Elab_Spec:                             Attribute Elab_Spec.
                                                               (line    6)
  * Elab_Subp_Body:                        Attribute Elab_Subp_Body.
                                                               (line    6)
+ * Elaborated:                            Attribute Elaborated.
+                                                              (line    6)
+ * Elaboration control:                   Pragma Elaboration_Checks.
+                                                              (line    6)
  * Elimination of unused subprograms:     Pragma Eliminate.   (line    6)
  * Emax:                                  Attribute Emax.     (line    6)
  * Enabled:                               Attribute Enabled.  (line    6)
*************** Index
*** 26101,26114 ****
                                                               (line    6)
  * Entry queuing policies:                RM D 3 17 Locking Policies.
                                                               (line   12)
  * enumeration:                           RM 13 3 71-73 Component Size Clauses.
                                                               (line   23)
  * Enumeration representation clauses:    RM 13 3 71-73 Component Size Clauses.
                                                               (line   24)
  * Enumeration values:                    RM 3 5 4 29 Integer Types.
                                                               (line   12)
- * Enum_Rep:                              Attribute Enum_Rep. (line    6)
- * Enum_Val:                              Attribute Enum_Val. (line    6)
  * Environment entries:                   Ada Command_Line Environment a-colien ads.
                                                               (line    6)
  * Epsilon:                               Attribute Epsilon.  (line    6)
--- 26101,26114 ----
                                                               (line    6)
  * Entry queuing policies:                RM D 3 17 Locking Policies.
                                                               (line   12)
+ * Enum_Rep:                              Attribute Enum_Rep. (line    6)
+ * Enum_Val:                              Attribute Enum_Val. (line    6)
  * enumeration:                           RM 13 3 71-73 Component Size Clauses.
                                                               (line   23)
  * Enumeration representation clauses:    RM 13 3 71-73 Component Size Clauses.
                                                               (line   24)
  * Enumeration values:                    RM 3 5 4 29 Integer Types.
                                                               (line   12)
  * Environment entries:                   Ada Command_Line Environment a-colien ads.
                                                               (line    6)
  * Epsilon:                               Attribute Epsilon.  (line    6)
*************** Index
*** 26128,26133 ****
--- 26128,26139 ----
                                                               (line    6)
  * Exception traces:                      GNAT Exception_Traces g-exctra ads.
                                                               (line    6)
+ * Exception_Information':                Exception_Information.
+                                                              (line    6)
+ * Exception_Message:                     Pragma Prefix_Exception_Messages.
+                                                              (line    6)
+ * Exception_Message <1>:                 Exception_Message.  (line    6)
+ * Exception_Name:                        Exception_Name.     (line    6)
  * Exceptional_Cases:                     Pragma Exceptional_Cases.
                                                               (line    6)
  * Exceptional_Cases <1>:                 Aspect Exceptional_Cases.
*************** Index
*** 26136,26147 ****
                                                               (line    6)
  * exceptions:                            GNAT Exceptions g-except ads.
                                                               (line    6)
- * Exception_Information’:                Exception_Information.
-                                                              (line    6)
- * Exception_Message:                     Pragma Prefix_Exception_Messages.
-                                                              (line    6)
- * Exception_Message <1>:                 Exception_Message.  (line    6)
- * Exception_Name:                        Exception_Name.     (line    6)
  * Export:                                RM A 18 Containers. (line   17)
  * Export <1>:                            Address Clauses.    (line  116)
  * extendable:                            GNAT Dynamic_Tables g-dyntab ads.
--- 26142,26147 ----
*************** Index
*** 26281,26292 ****
                                                               (line    6)
  * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads.
                                                               (line    6)
- * GNAT.Exceptions (g-except.ads):        GNAT Exceptions g-except ads.
-                                                              (line    6)
  * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads.
                                                               (line    6)
  * GNAT.Exception_Traces (g-exctra.ads):  GNAT Exception_Traces g-exctra ads.
                                                               (line    6)
  * GNAT.Expect (g-expect.ads):            GNAT Expect g-expect ads.
                                                               (line    6)
  * GNAT.Expect.TTY (g-exptty.ads):        GNAT Expect TTY g-exptty ads.
--- 26281,26292 ----
                                                               (line    6)
  * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads.
                                                               (line    6)
  * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads.
                                                               (line    6)
  * GNAT.Exception_Traces (g-exctra.ads):  GNAT Exception_Traces g-exctra ads.
                                                               (line    6)
+ * GNAT.Exceptions (g-except.ads):        GNAT Exceptions g-except ads.
+                                                              (line    6)
  * GNAT.Expect (g-expect.ads):            GNAT Expect g-expect ads.
                                                               (line    6)
  * GNAT.Expect.TTY (g-exptty.ads):        GNAT Expect TTY g-exptty ads.
*************** Index
*** 26372,26383 ****
  * GNAT.SSE (g-sse.ads):                  GNAT SSE g-sse ads. (line    6)
  * GNAT.SSE.Vector_Types (g-ssvety.ads):  GNAT SSE Vector_Types g-ssvety ads.
                                                               (line    6)
- * GNAT.Strings (g-string.ads):           GNAT Strings g-string ads.
-                                                              (line    6)
  * GNAT.String_Hash (g-strhas.ads):       GNAT String_Hash g-strhas ads.
                                                               (line    6)
  * GNAT.String_Split (g-strspl.ads):      GNAT String_Split g-strspl ads.
                                                               (line    6)
  * GNAT.Table (g-table.ads):              GNAT Table g-table ads.
                                                               (line    6)
  * GNAT.Task_Lock (g-tasloc.ads):         GNAT Task_Lock g-tasloc ads.
--- 26372,26383 ----
  * GNAT.SSE (g-sse.ads):                  GNAT SSE g-sse ads. (line    6)
  * GNAT.SSE.Vector_Types (g-ssvety.ads):  GNAT SSE Vector_Types g-ssvety ads.
                                                               (line    6)
  * GNAT.String_Hash (g-strhas.ads):       GNAT String_Hash g-strhas ads.
                                                               (line    6)
  * GNAT.String_Split (g-strspl.ads):      GNAT String_Split g-strspl ads.
                                                               (line    6)
+ * GNAT.Strings (g-string.ads):           GNAT Strings g-string ads.
+                                                              (line    6)
  * GNAT.Table (g-table.ads):              GNAT Table g-table ads.
                                                               (line    6)
  * GNAT.Task_Lock (g-tasloc.ads):         GNAT Task_Lock g-tasloc ads.
*************** Index
*** 26406,26411 ****
--- 26406,26417 ----
                                                               (line    6)
  * Handling of Records with Holes:        Handling of Records with Holes.
                                                               (line    6)
+ * Has_Access_Values:                     Attribute Has_Access_Values.
+                                                              (line    6)
+ * Has_Discriminants:                     Attribute Has_Discriminants.
+                                                              (line    6)
+ * Has_Tagged_Values:                     Attribute Has_Tagged_Values.
+                                                              (line    6)
  * Hash functions:                        GNAT Perfect_Hash_Generators g-pehage ads.
                                                               (line    6)
  * Hash functions <1>:                    GNAT String_Hash g-strhas ads.
*************** Index
*** 26414,26425 ****
                                                               (line    6)
  * Hash tables <1>:                       GNAT HTable g-htable ads.
                                                               (line    6)
- * Has_Access_Values:                     Attribute Has_Access_Values.
-                                                              (line    6)
- * Has_Discriminants:                     Attribute Has_Discriminants.
-                                                              (line    6)
- * Has_Tagged_Values:                     Attribute Has_Tagged_Values.
-                                                              (line    6)
  * Heap usage:                            RM 13 9 14-17 Unchecked Conversion.
                                                               (line   34)
  * I/O interfacing:                       Interfaces VxWorks IO i-vxwoio ads.
--- 26420,26425 ----
*************** Index
*** 26435,26447 ****
  * implicit:                              RM 13 9 14-17 Unchecked Conversion.
                                                               (line   33)
  * Import:                                Address Clauses.    (line  121)
  * Initialization:                        Pragma Suppress_Initialization.
                                                               (line    6)
  * Initialized:                           Attribute Initialized.
                                                               (line    6)
  * Initializes:                           Aspect Initializes. (line    6)
- * Initial_Condition:                     Aspect Initial_Condition.
-                                                              (line    6)
  * Inline_Always:                         Aspect Inline_Always.
                                                               (line    6)
  * Input/Output facilities:               GNAT IO g-io ads.   (line    6)
--- 26435,26447 ----
  * implicit:                              RM 13 9 14-17 Unchecked Conversion.
                                                               (line   33)
  * Import:                                Address Clauses.    (line  121)
+ * Initial_Condition:                     Aspect Initial_Condition.
+                                                              (line    6)
  * Initialization:                        Pragma Suppress_Initialization.
                                                               (line    6)
  * Initialized:                           Attribute Initialized.
                                                               (line    6)
  * Initializes:                           Aspect Initializes. (line    6)
  * Inline_Always:                         Aspect Inline_Always.
                                                               (line    6)
  * Input/Output facilities:               GNAT IO g-io ads.   (line    6)
*************** Index
*** 26480,26486 ****
                                                               (line    6)
  * Interfacing to VxWorks <1>:            Interfaces VxWorks Int_Connection i-vxinco ads.
                                                               (line    6)
! * Interfacing to VxWorks’ I/O:           Interfaces VxWorks IO i-vxwoio ads.
                                                               (line    6)
  * interfacing with:                      RM B 2 12-13 Package Interfaces.
                                                               (line   21)
--- 26480,26486 ----
                                                               (line    6)
  * Interfacing to VxWorks <1>:            Interfaces VxWorks Int_Connection i-vxinco ads.
                                                               (line    6)
! * Interfacing to VxWorks' I/O:           Interfaces VxWorks IO i-vxwoio ads.
                                                               (line    6)
  * interfacing with:                      RM B 2 12-13 Package Interfaces.
                                                               (line   21)
*************** Index
*** 26488,26493 ****
--- 26488,26499 ----
                                                               (line   57)
  * interfacing with <2>:                  RM B 4 95-98 Interfacing with COBOL.
                                                               (line   27)
+ * Interfacing with ''Text_IO'':          Ada Text_IO C_Streams a-tiocst ads.
+                                                              (line    6)
+ * Interfacing with ''Wide_Text_IO'':     Ada Wide_Text_IO C_Streams a-wtcstr ads.
+                                                              (line    6)
+ * Interfacing with ''Wide_Wide_Text_IO'': Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
+                                                              (line    6)
  * Interfacing with C++:                  Pragma CPP_Class.   (line    6)
  * Interfacing with C++ <1>:              Pragma CPP_Constructor.
                                                               (line    6)
*************** Index
*** 26498,26509 ****
                                                               (line    6)
  * Interfacing with Stream_IO:            Ada Streams Stream_IO C_Streams a-ssicst ads.
                                                               (line    6)
- * Interfacing with ‘‘Text_IO‘‘:          Ada Text_IO C_Streams a-tiocst ads.
-                                                              (line    6)
- * Interfacing with ‘‘Wide_Text_IO‘‘:     Ada Wide_Text_IO C_Streams a-wtcstr ads.
-                                                              (line    6)
- * Interfacing with ‘‘Wide_Wide_Text_IO‘‘: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
-                                                              (line    6)
  * Interrupt:                             GNAT Ctrl_C g-ctrl_c ads.
                                                               (line    6)
  * Interrupt support:                     RM C 1 10-16 Access to Machine Operations.
--- 26504,26509 ----
*************** Index
*** 26521,26527 ****
  * Invalid_Value:                         Attribute Invalid_Value.
                                                               (line    6)
  * Invariant:                             Aspect Invariant.   (line    6)
! * Invariant’Class:                       Aspect Invariant’Class.
                                                               (line    6)
  * IO support:                            Ada Strings Unbounded Text_IO a-suteio ads.
                                                               (line    6)
--- 26521,26527 ----
  * Invalid_Value:                         Attribute Invalid_Value.
                                                               (line    6)
  * Invariant:                             Aspect Invariant.   (line    6)
! * Invariant'Class:                       Aspect Invariant’Class.
                                                               (line    6)
  * IO support:                            Ada Strings Unbounded Text_IO a-suteio ads.
                                                               (line    6)
*************** Index
*** 26532,26538 ****
  * Iterable:                              Aspect Iterable.    (line    6)
  * Iterable <1>:                          Attribute Iterable. (line    6)
  * Large:                                 Attribute Large.    (line    6)
- * Latin-1:                               Changed semantics.  (line   12)
  * Latin_1 constants for Wide_Character:  Ada Characters Wide_Latin_1 a-cwila1 ads.
                                                               (line    6)
  * Latin_1 constants for Wide_Wide_Character: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads.
--- 26532,26537 ----
*************** Index
*** 26543,26548 ****
--- 26542,26548 ----
                                                               (line    6)
  * Latin_9 constants for Wide_Wide_Character: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads.
                                                               (line    6)
+ * Latin-1:                               Changed semantics.  (line   12)
  * Library_Level:                         Attribute Library_Level.
                                                               (line    6)
  * License checking:                      Pragma License.     (line    6)
*************** Index
*** 26559,26571 ****
                                                               (line    6)
  * Local_Restrictions:                    Aspect Local_Restrictions.
                                                               (line    6)
  * Locking:                               GNAT Task_Lock g-tasloc ads.
                                                               (line    6)
  * Locking Policies:                      RM C 7 2 30 The Package Task_Attributes.
                                                               (line   17)
  * Locking using files:                   GNAT Lock_Files g-locfil ads.
                                                               (line    6)
- * Lock_Free:                             Aspect Lock_Free.   (line    6)
  * Loop_Entry:                            Attribute Loop_Entry.
                                                               (line    6)
  * Machine Code insertions:               Machine Code Insertions.
--- 26559,26571 ----
                                                               (line    6)
  * Local_Restrictions:                    Aspect Local_Restrictions.
                                                               (line    6)
+ * Lock_Free:                             Aspect Lock_Free.   (line    6)
  * Locking:                               GNAT Task_Lock g-tasloc ads.
                                                               (line    6)
  * Locking Policies:                      RM C 7 2 30 The Package Task_Attributes.
                                                               (line   17)
  * Locking using files:                   GNAT Lock_Files g-locfil ads.
                                                               (line    6)
  * Loop_Entry:                            Attribute Loop_Entry.
                                                               (line    6)
  * Machine Code insertions:               Machine Code Insertions.
*************** Index
*** 26583,26593 ****
                                                               (line    6)
  * Mathematical functions:                GNAT Generic_Fast_Math_Functions g-gfmafu ads.
                                                               (line    6)
- * maximum:                               Attribute Maximum_Alignment.
-                                                              (line    6)
- * Maximum_Alignment:                     Attribute Maximum_Alignment.
-                                                              (line    6)
- * Maximum_Alignment attribute:           Alignment Clauses.  (line   21)
  * Max_Asynchronous_Select_Nesting:       Max_Asynchronous_Select_Nesting.
                                                               (line    6)
  * Max_Entry_Queue_Depth:                 Max_Entry_Queue_Length.
--- 26583,26588 ----
*************** Index
*** 26604,26611 ****
                                                               (line    6)
  * Max_Storage_At_Blocking:               Max_Storage_At_Blocking.
                                                               (line    6)
- * Max_Tasks:                             Max_Tasks.          (line    6)
  * Max_Task_Entries:                      Max_Task_Entries.   (line    6)
  * Mechanism_Code:                        Attribute Mechanism_Code.
                                                               (line    6)
  * Memory allocation:                     System Memory s-memory ads.
--- 26599,26611 ----
                                                               (line    6)
  * Max_Storage_At_Blocking:               Max_Storage_At_Blocking.
                                                               (line    6)
  * Max_Task_Entries:                      Max_Task_Entries.   (line    6)
+ * Max_Tasks:                             Max_Tasks.          (line    6)
+ * maximum:                               Attribute Maximum_Alignment.
+                                                              (line    6)
+ * Maximum_Alignment:                     Attribute Maximum_Alignment.
+                                                              (line    6)
+ * Maximum_Alignment attribute:           Alignment Clauses.  (line   21)
  * Mechanism_Code:                        Attribute Mechanism_Code.
                                                               (line    6)
  * Memory allocation:                     System Memory s-memory ads.
*************** Index
*** 26672,26684 ****
  * No_Entry_Queue:                        No_Entry_Queue.     (line    6)
  * No_Enumeration_Maps:                   No_Enumeration_Maps.
                                                               (line    6)
- * No_Exceptions:                         No_Exceptions.      (line    6)
  * No_Exception_Handlers:                 No_Exception_Handlers.
                                                               (line    6)
  * No_Exception_Propagation:              No_Exception_Propagation.
                                                               (line    6)
  * No_Exception_Registration:             No_Exception_Registration.
                                                               (line    6)
  * No_Finalization:                       No_Finalization.    (line    6)
  * No_Fixed_Point:                        No_Fixed_Point.     (line    6)
  * No_Floating_Point:                     No_Floating_Point.  (line    6)
--- 26672,26684 ----
  * No_Entry_Queue:                        No_Entry_Queue.     (line    6)
  * No_Enumeration_Maps:                   No_Enumeration_Maps.
                                                               (line    6)
  * No_Exception_Handlers:                 No_Exception_Handlers.
                                                               (line    6)
  * No_Exception_Propagation:              No_Exception_Propagation.
                                                               (line    6)
  * No_Exception_Registration:             No_Exception_Registration.
                                                               (line    6)
+ * No_Exceptions:                         No_Exceptions.      (line    6)
  * No_Finalization:                       No_Finalization.    (line    6)
  * No_Fixed_Point:                        No_Fixed_Point.     (line    6)
  * No_Floating_Point:                     No_Floating_Point.  (line    6)
*************** Index
*** 26727,26735 ****
                                                               (line    6)
  * No_Obsolescent_Features:               No_Obsolescent_Features.
                                                               (line    6)
- * No_Protected_Types:                    No_Protected_Types. (line    6)
  * No_Protected_Type_Allocators:          No_Protected_Type_Allocators.
                                                               (line    6)
  * No_Recursion:                          No_Recursion.       (line    6)
  * No_Reentrancy:                         No_Reentrancy.      (line    6)
  * No_Relative_Delay:                     No_Relative_Delay.  (line    6)
--- 26727,26735 ----
                                                               (line    6)
  * No_Obsolescent_Features:               No_Obsolescent_Features.
                                                               (line    6)
  * No_Protected_Type_Allocators:          No_Protected_Type_Allocators.
                                                               (line    6)
+ * No_Protected_Types:                    No_Protected_Types. (line    6)
  * No_Recursion:                          No_Recursion.       (line    6)
  * No_Reentrancy:                         No_Reentrancy.      (line    6)
  * No_Relative_Delay:                     No_Relative_Delay.  (line    6)
*************** Index
*** 26740,26773 ****
  * No_Secondary_Stack:                    No_Secondary_Stack. (line    6)
  * No_Select_Statements:                  No_Select_Statements.
                                                               (line    6)
- * No_Specification_of_Aspect:            No_Specification_of_Aspect.
-                                                              (line    6)
  * No_Specific_Termination_Handlers:      No_Specific_Termination_Handlers.
                                                               (line    6)
  * No_Standard_Allocators_After_Elaboration: No_Standard_Allocators_After_Elaboration.
                                                               (line    6)
  * No_Standard_Storage_Pools:             No_Standard_Storage_Pools.
                                                               (line    6)
- * No_Streams:                            No_Streams.         (line    6)
  * No_Stream_Optimizations:               No_Stream_Optimizations.
                                                               (line    6)
  * No_Tagged_Streams:                     Aspect No_Tagged_Streams.
                                                               (line    6)
  * No_Tagged_Type_Registration:           No_Tagged_Type_Registration.
                                                               (line    6)
- * No_Tasking:                            No_Tasking.         (line    6)
  * No_Task_Allocators:                    No_Task_Allocators. (line    6)
  * No_Task_Attributes:                    No_Task_Attributes_Package.
                                                               (line    9)
  * No_Task_Attributes_Package:            No_Task_Attributes_Package.
                                                               (line    6)
- * No_Task_At_Interrupt_Priority:         No_Task_At_Interrupt_Priority.
-                                                              (line    6)
  * No_Task_Hierarchy:                     No_Task_Hierarchy.  (line    6)
  * No_Task_Parts:                         Aspect No_Task_Parts.
                                                               (line    6)
  * No_Task_Termination:                   No_Task_Termination.
                                                               (line    6)
  * No_Terminate_Alternatives:             No_Terminate_Alternatives.
                                                               (line    6)
  * No_Unchecked_Access:                   No_Unchecked_Access.
--- 26740,26773 ----
  * No_Secondary_Stack:                    No_Secondary_Stack. (line    6)
  * No_Select_Statements:                  No_Select_Statements.
                                                               (line    6)
  * No_Specific_Termination_Handlers:      No_Specific_Termination_Handlers.
                                                               (line    6)
+ * No_Specification_of_Aspect:            No_Specification_of_Aspect.
+                                                              (line    6)
  * No_Standard_Allocators_After_Elaboration: No_Standard_Allocators_After_Elaboration.
                                                               (line    6)
  * No_Standard_Storage_Pools:             No_Standard_Storage_Pools.
                                                               (line    6)
  * No_Stream_Optimizations:               No_Stream_Optimizations.
                                                               (line    6)
+ * No_Streams:                            No_Streams.         (line    6)
  * No_Tagged_Streams:                     Aspect No_Tagged_Streams.
                                                               (line    6)
  * No_Tagged_Type_Registration:           No_Tagged_Type_Registration.
                                                               (line    6)
  * No_Task_Allocators:                    No_Task_Allocators. (line    6)
+ * No_Task_At_Interrupt_Priority:         No_Task_At_Interrupt_Priority.
+                                                              (line    6)
  * No_Task_Attributes:                    No_Task_Attributes_Package.
                                                               (line    9)
  * No_Task_Attributes_Package:            No_Task_Attributes_Package.
                                                               (line    6)
  * No_Task_Hierarchy:                     No_Task_Hierarchy.  (line    6)
  * No_Task_Parts:                         Aspect No_Task_Parts.
                                                               (line    6)
  * No_Task_Termination:                   No_Task_Termination.
                                                               (line    6)
+ * No_Tasking:                            No_Tasking.         (line    6)
  * No_Terminate_Alternatives:             No_Terminate_Alternatives.
                                                               (line    6)
  * No_Unchecked_Access:                   No_Unchecked_Access.
*************** Index
*** 26807,26813 ****
  * of objects:                            Value_Size and Object_Size Clauses.
                                                               (line    6)
  * Old:                                   Attribute Old.      (line    6)
! * on ‘‘Address‘‘:                        RM 13 7 37 Address as Private.
                                                               (line   10)
  * Operating System interface:            GNAT OS_Lib g-os_lib ads.
                                                               (line    6)
--- 26807,26813 ----
  * of objects:                            Value_Size and Object_Size Clauses.
                                                               (line    6)
  * Old:                                   Attribute Old.      (line    6)
! * on ''Address'':                        RM 13 7 37 Address as Private.
                                                               (line   10)
  * Operating System interface:            GNAT OS_Lib g-os_lib ads.
                                                               (line    6)
*************** Index
*** 26819,26830 ****
  * ordering <1>:                          Effect of Bit_Order on Byte Ordering.
                                                               (line    6)
  * Overlaying of objects:                 Address Clauses.    (line  170)
  * Package Interfaces:                    RM B 1 39-41 Pragma Export.
                                                               (line   35)
  * Package Task_Attributes:               RM C 5 8 Pragma Discard_Names.
                                                               (line   12)
- * Package ‘‘Interrupts‘‘:                RM C 3 1 20-21 Protected Procedure Handlers.
-                                                              (line   17)
  * Packed Decimal:                        Interfaces Packed_Decimal i-pacdec ads.
                                                               (line    6)
  * Packed types:                          RM 13 1 21-24 Representation Clauses.
--- 26819,26830 ----
  * ordering <1>:                          Effect of Bit_Order on Byte Ordering.
                                                               (line    6)
  * Overlaying of objects:                 Address Clauses.    (line  170)
+ * Package ''Interrupts'':                RM C 3 1 20-21 Protected Procedure Handlers.
+                                                              (line   17)
  * Package Interfaces:                    RM B 1 39-41 Pragma Export.
                                                               (line   35)
  * Package Task_Attributes:               RM C 5 8 Pragma Discard_Names.
                                                               (line   12)
  * Packed Decimal:                        Interfaces Packed_Decimal i-pacdec ads.
                                                               (line    6)
  * Packed types:                          RM 13 1 21-24 Representation Clauses.
*************** Index
*** 26838,26848 ****
                                                               (line    6)
  * Parsing <2>:                           GNAT Bounded_Mailboxes g-boumai ads.
                                                               (line    6)
  * Partition communication subsystem:     RM D 8 47-49 Monotonic Time.
                                                               (line   23)
  * Partition interfacing functions:       System Partition_Interface s-parint ads.
                                                               (line    6)
- * Part_Of:                               Aspect Part_Of.     (line    6)
  * Passed_By_Reference:                   Attribute Passed_By_Reference.
                                                               (line    6)
  * passing:                               Attribute Null_Parameter.
--- 26838,26848 ----
                                                               (line    6)
  * Parsing <2>:                           GNAT Bounded_Mailboxes g-boumai ads.
                                                               (line    6)
+ * Part_Of:                               Aspect Part_Of.     (line    6)
  * Partition communication subsystem:     RM D 8 47-49 Monotonic Time.
                                                               (line   23)
  * Partition interfacing functions:       System Partition_Interface s-parint ads.
                                                               (line    6)
  * Passed_By_Reference:                   Attribute Passed_By_Reference.
                                                               (line    6)
  * passing:                               Attribute Null_Parameter.
*************** Index
*** 26895,26900 ****
--- 26895,26901 ----
  * Pragmas <1>:                           RM 1 1 5 12 Bounded Errors.
                                                               (line   12)
  * Pre:                                   Pragma Pre.         (line    6)
+ * Pre_Class:                             Pragma Pre_Class.   (line    6)
  * Pre-elaboration requirements:          RM C 3 2 25 Package Interrupts.
                                                               (line   14)
  * preconditions:                         Pragma Pre.         (line    6)
*************** Index
*** 26908,26914 ****
                                                               (line   10)
  * Prefix_Exception_Messages:             Pragma Prefix_Exception_Messages.
                                                               (line    6)
- * Pre_Class:                             Pragma Pre_Class.   (line    6)
  * Protected procedure handlers:          RM C 3 28 Interrupt Support.
                                                               (line   14)
  * Pure:                                  GNAT Exceptions g-except ads.
--- 26909,26914 ----
*************** Index
*** 26992,27003 ****
                                                               (line    6)
  * Response file for command line:        Ada Command_Line Response_File a-clrefi ads.
                                                               (line    6)
  * Restrictions:                          Attribute Restriction_Set.
                                                               (line    6)
  * Restrictions definitions:              System Rident s-rident ads.
                                                               (line    6)
- * Restriction_Set:                       Attribute Restriction_Set.
-                                                              (line    6)
  * Result:                                Attribute Result.   (line    6)
  * Return values:                         Attribute Mechanism_Code.
                                                               (line    6)
--- 26992,27003 ----
                                                               (line    6)
  * Response file for command line:        Ada Command_Line Response_File a-clrefi ads.
                                                               (line    6)
+ * Restriction_Set:                       Attribute Restriction_Set.
+                                                              (line    6)
  * Restrictions:                          Attribute Restriction_Set.
                                                               (line    6)
  * Restrictions definitions:              System Rident s-rident ads.
                                                               (line    6)
  * Result:                                Attribute Result.   (line    6)
  * Return values:                         Attribute Mechanism_Code.
                                                               (line    6)
*************** Index
*** 27094,27100 ****
                                                               (line   40)
  * Size for biased representation:        Biased Representation.
                                                               (line    6)
! * Size of ‘‘Address‘‘:                   Attribute Address_Size.
                                                               (line    6)
  * Small:                                 Attribute Small.    (line    6)
  * Small <1>:                             Attribute Small_Denominator.
--- 27094,27100 ----
                                                               (line   40)
  * Size for biased representation:        Biased Representation.
                                                               (line    6)
! * Size of ''Address'':                   Attribute Address_Size.
                                                               (line    6)
  * Small:                                 Attribute Small.    (line    6)
  * Small <1>:                             Attribute Small_Denominator.
*************** Index
*** 27190,27195 ****
--- 27190,27199 ----
  * Subprogram address:                    Attribute Code_Address.
                                                               (line    6)
  * subtypes:                              Alignment Clauses.  (line   87)
+ * Suppress_Debug_Info:                   Aspect Suppress_Debug_Info.
+                                                              (line    6)
+ * Suppress_Initialization:               Aspect Suppress_Initialization.
+                                                              (line    6)
  * Suppressing external name:             Pragma Export_Function.
                                                               (line   59)
  * Suppressing external name <1>:         Pragma Export_Procedure.
*************** Index
*** 27204,27219 ****
                                                               (line   22)
  * Suppression of checks:                 RM 11 4 1 19 Exception Information.
                                                               (line   23)
- * Suppress_Debug_Info:                   Aspect Suppress_Debug_Info.
-                                                              (line    6)
- * Suppress_Initialization:               Aspect Suppress_Initialization.
-                                                              (line    6)
  * synonyms:                              Pragma Convention_Identifier.
                                                               (line    6)
  * synonyms <1>:                          Pragma Rename_Pragma.
                                                               (line    6)
  * System:                                Pragma Extend_System.
                                                               (line    6)
  * System.Address_Image (s-addima.ads):   System Address_Image s-addima ads.
                                                               (line    6)
  * System.Assertions (s-assert.ads):      System Assertions s-assert ads.
--- 27208,27221 ----
                                                               (line   22)
  * Suppression of checks:                 RM 11 4 1 19 Exception Information.
                                                               (line   23)
  * synonyms:                              Pragma Convention_Identifier.
                                                               (line    6)
  * synonyms <1>:                          Pragma Rename_Pragma.
                                                               (line    6)
  * System:                                Pragma Extend_System.
                                                               (line    6)
+ * System_Allocator_Alignment:            Attribute System_Allocator_Alignment.
+                                                              (line    6)
  * System.Address_Image (s-addima.ads):   System Address_Image s-addima ads.
                                                               (line    6)
  * System.Assertions (s-assert.ads):      System Assertions s-assert ads.
*************** Index
*** 27244,27251 ****
                                                               (line    6)
  * System.Wch_Con (s-wchcon.ads):         System Wch_Con s-wchcon ads.
                                                               (line    6)
- * System_Allocator_Alignment:            Attribute System_Allocator_Alignment.
-                                                              (line    6)
  * Table implementation:                  GNAT Dynamic_Tables g-dyntab ads.
                                                               (line    6)
  * Table implementation <1>:              GNAT Table g-table ads.
--- 27246,27251 ----
*************** Index
*** 27260,27272 ****
                                                               (line    6)
  * Task synchronization:                  GNAT Task_Lock g-tasloc ads.
                                                               (line    6)
- * Tasking restrictions:                  RM D 6 9-10 Preemptive Abort.
-                                                              (line   18)
  * Task_Attributes:                       Pragma Thread_Local_Storage.
                                                               (line    6)
  * Task_Attributes <1>:                   RM C 5 8 Pragma Discard_Names.
                                                               (line   11)
  * Test cases:                            Pragma Test_Case.   (line    6)
  * testing for:                           Attribute Has_Access_Values.
                                                               (line    6)
  * testing for <1>:                       Attribute Has_Discriminants.
--- 27260,27273 ----
                                                               (line    6)
  * Task synchronization:                  GNAT Task_Lock g-tasloc ads.
                                                               (line    6)
  * Task_Attributes:                       Pragma Thread_Local_Storage.
                                                               (line    6)
  * Task_Attributes <1>:                   RM C 5 8 Pragma Discard_Names.
                                                               (line   11)
+ * Tasking restrictions:                  RM D 6 9-10 Preemptive Abort.
+                                                              (line   18)
  * Test cases:                            Pragma Test_Case.   (line    6)
+ * Test_Case:                             Aspect Test_Case.   (line    6)
  * testing for:                           Attribute Has_Access_Values.
                                                               (line    6)
  * testing for <1>:                       Attribute Has_Discriminants.
*************** Index
*** 27277,27283 ****
                                                               (line    6)
  * testing for <4>:                       Ada Exceptions Last_Chance_Handler a-elchha ads.
                                                               (line    6)
- * Test_Case:                             Aspect Test_Case.   (line    6)
  * Text_IO:                               Ada Strings Unbounded Text_IO a-suteio ads.
                                                               (line    6)
  * Text_IO <1>:                           Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
--- 27278,27283 ----
*************** Index
*** 27293,27302 ****
                                                               (line    6)
  * Text_IO resetting standard files:      Ada Text_IO Reset_Standard_Files a-tirsfi ads.
                                                               (line    6)
- * Threads:                               GNAT Threads g-thread ads.
-                                                              (line    6)
  * Thread_Local_Storage:                  Aspect Thread_Local_Storage.
                                                               (line    6)
  * Time:                                  RM D 7 21 Tasking Restrictions.
                                                               (line   14)
  * Time <1>:                              GNAT Calendar Time_IO g-catiio ads.
--- 27293,27302 ----
                                                               (line    6)
  * Text_IO resetting standard files:      Ada Text_IO Reset_Standard_Files a-tirsfi ads.
                                                               (line    6)
  * Thread_Local_Storage:                  Aspect Thread_Local_Storage.
                                                               (line    6)
+ * Threads:                               GNAT Threads g-thread ads.
+                                                              (line    6)
  * Time:                                  RM D 7 21 Tasking Restrictions.
                                                               (line   14)
  * Time <1>:                              GNAT Calendar Time_IO g-catiio ads.
*************** Index
*** 27317,27326 ****
                                                               (line    6)
  * trampoline:                            No_Implicit_Dynamic_Code.
                                                               (line    6)
- * TypeCode:                              Attribute TypeCode. (line    6)
  * Type_Class:                            Attribute Type_Class.
                                                               (line    6)
  * Type_Key:                              Attribute Type_Key. (line    6)
  * typographical:                         Conventions.        (line    6)
  * Typographical conventions:             Conventions.        (line    6)
  * Unbounded_String:                      Text_IO Facilities for Unbounded Strings.
--- 27317,27326 ----
                                                               (line    6)
  * trampoline:                            No_Implicit_Dynamic_Code.
                                                               (line    6)
  * Type_Class:                            Attribute Type_Class.
                                                               (line    6)
  * Type_Key:                              Attribute Type_Key. (line    6)
+ * TypeCode:                              Attribute TypeCode. (line    6)
  * typographical:                         Conventions.        (line    6)
  * Typographical conventions:             Conventions.        (line    6)
  * Unbounded_String:                      Text_IO Facilities for Unbounded Strings.
*************** Tag Table:
*** 27481,30596 ****
  Node: Top326
  Ref: gnat_rm doc554
  Ref: 0554
! Node: About This Guide34135
! Ref: gnat_rm/about_this_guide doc34243
! Ref: 234243
! Ref: gnat_rm/about_this_guide about-this-guide34243
! Ref: 334243
! Ref: gnat_rm/about_this_guide gnat-reference-manual34243
! Ref: 434243
! Ref: gnat_rm/about_this_guide id134243
! Ref: 534243
! Node: What This Reference Manual Contains35637
! Ref: gnat_rm/about_this_guide what-this-reference-manual-contains35746
! Ref: 635746
! Node: Conventions39419
! Ref: gnat_rm/about_this_guide conventions39556
! Ref: 1839556
! Node: Related Information40127
! Ref: gnat_rm/about_this_guide related-information40220
! Ref: 1940220
! Node: Implementation Defined Pragmas41514
! Ref: gnat_rm/implementation_defined_pragmas doc41649
! Ref: 1a41649
! Ref: gnat_rm/implementation_defined_pragmas id141649
! Ref: 1b41649
! Ref: gnat_rm/implementation_defined_pragmas implementation-defined-pragmas41649
! Ref: 741649
! Node: Pragma Abort_Defer47957
! Ref: gnat_rm/implementation_defined_pragmas pragma-abort-defer48073
! Ref: 1c48073
! Node: Pragma Abstract_State48944
! Ref: gnat_rm/implementation_defined_pragmas id249082
! Ref: 1d49082
! Ref: gnat_rm/implementation_defined_pragmas pragma-abstract-state49082
! Ref: 1e49082
! Node: Pragma Ada_8350320
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-8350453
! Ref: 1f50453
! Node: Pragma Ada_9551544
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-9551669
! Ref: 2051669
! Node: Pragma Ada_0552187
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-0552314
! Ref: 2152314
! Node: Pragma Ada_200553340
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-200553467
! Ref: 2253467
! Node: Pragma Ada_1253634
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-1253763
! Ref: 2353763
! Node: Pragma Ada_201254938
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-201255067
! Ref: 2455067
! Node: Pragma Ada_202255234
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-202255386
! Ref: 2555386
! Node: Pragma Aggregate_Individually_Assign56578
! Ref: gnat_rm/implementation_defined_pragmas pragma-aggregate-individually-assign56743
! Ref: 2656743
! Node: Pragma Allow_Integer_Address57150
! Ref: gnat_rm/implementation_defined_pragmas pragma-allow-integer-address57324
! Ref: 2757324
! Node: Pragma Always_Terminates58937
! Ref: gnat_rm/implementation_defined_pragmas id359090
! Ref: 2859090
! Ref: gnat_rm/implementation_defined_pragmas pragma-always-terminates59090
! Ref: 2959090
! Node: Pragma Annotate59352
! Ref: gnat_rm/implementation_defined_pragmas id459490
! Ref: 2a59490
! Ref: gnat_rm/implementation_defined_pragmas pragma-annotate59490
! Ref: 2b59490
! Node: Pragma Assert60938
! Ref: gnat_rm/implementation_defined_pragmas pragma-assert61073
! Ref: 2c61073
! Node: Pragma Assert_And_Cut63583
! Ref: gnat_rm/implementation_defined_pragmas pragma-assert-and-cut63726
! Ref: 2d63726
! Node: Pragma Assertion_Policy64538
! Ref: gnat_rm/implementation_defined_pragmas pragma-assertion-policy64681
! Ref: 2e64681
! Node: Pragma Assume68419
! Ref: gnat_rm/implementation_defined_pragmas pragma-assume68572
! Ref: 2f68572
! Node: Pragma Assume_No_Invalid_Values69551
! Ref: gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values69701
! Ref: 3069701
! Node: Pragma Async_Readers71484
! Ref: gnat_rm/implementation_defined_pragmas id571641
! Ref: 3171641
! Ref: gnat_rm/implementation_defined_pragmas pragma-async-readers71641
! Ref: 3271641
! Node: Pragma Async_Writers71894
! Ref: gnat_rm/implementation_defined_pragmas id672047
! Ref: 3372047
! Ref: gnat_rm/implementation_defined_pragmas pragma-async-writers72047
! Ref: 3472047
! Node: Pragma Attribute_Definition72300
! Ref: gnat_rm/implementation_defined_pragmas pragma-attribute-definition72454
! Ref: 3572454
! Node: Pragma C_Pass_By_Copy73081
! Ref: gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy73227
! Ref: 3673227
! Node: Pragma Check74409
! Ref: gnat_rm/implementation_defined_pragmas pragma-check74555
! Ref: 3774555
! Node: Pragma Check_Float_Overflow75813
! Ref: gnat_rm/implementation_defined_pragmas pragma-check-float-overflow75955
! Ref: 3875955
! Node: Pragma Check_Name78014
! Ref: gnat_rm/implementation_defined_pragmas pragma-check-name78163
! Ref: 3978163
! Node: Pragma Check_Policy79283
! Ref: gnat_rm/implementation_defined_pragmas pragma-check-policy79419
! Ref: 3a79419
! Node: Pragma Comment82236
! Ref: gnat_rm/implementation_defined_pragmas pragma-comment82375
! Ref: 3b82375
! Node: Pragma Common_Object82893
! Ref: gnat_rm/implementation_defined_pragmas pragma-common-object83038
! Ref: 3c83038
! Node: Pragma Compile_Time_Error83921
! Ref: gnat_rm/implementation_defined_pragmas compile-time-error84079
! Ref: 3d84079
! Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-error84079
! Ref: 3e84079
! Node: Pragma Compile_Time_Warning85149
! Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-warning85317
! Ref: 3f85317
! Node: Pragma Complete_Representation86558
! Ref: gnat_rm/implementation_defined_pragmas pragma-complete-representation86730
! Ref: 4086730
! Node: Pragma Complex_Representation87279
! Ref: gnat_rm/implementation_defined_pragmas pragma-complex-representation87450
! Ref: 4187450
! Node: Pragma Component_Alignment88206
! Ref: gnat_rm/implementation_defined_pragmas pragma-component-alignment88380
! Ref: 4288380
! Node: Pragma Constant_After_Elaboration91114
! Ref: gnat_rm/implementation_defined_pragmas id791280
! Ref: 4391280
! Ref: gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration91280
! Ref: 4491280
! Node: Pragma Contract_Cases91585
! Ref: gnat_rm/implementation_defined_pragmas id891753
! Ref: 4591753
! Ref: gnat_rm/implementation_defined_pragmas pragma-contract-cases91753
! Ref: 4691753
! Node: Pragma Convention_Identifier94588
! Ref: gnat_rm/implementation_defined_pragmas pragma-convention-identifier94739
! Ref: 4794739
! Node: Pragma CPP_Class95923
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-class96075
! Ref: 4896075
! Node: Pragma CPP_Constructor97189
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-constructor97331
! Ref: 4a97331
! Node: Pragma CPP_Virtual99291
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-virtual99434
! Ref: 4b99434
! Node: Pragma CPP_Vtable99904
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-vtable100035
! Ref: 4c100035
! Node: Pragma CPU100459
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpu100593
! Ref: 4d100593
! Node: Pragma Deadline_Floor100833
! Ref: gnat_rm/implementation_defined_pragmas pragma-deadline-floor100962
! Ref: 4e100962
! Node: Pragma Debug101278
! Ref: gnat_rm/implementation_defined_pragmas pragma-debug101416
! Ref: 4f101416
! Node: Pragma Debug_Policy102372
! Ref: gnat_rm/implementation_defined_pragmas pragma-debug-policy102521
! Ref: 50102521
! Node: Pragma Default_Initial_Condition102810
! Ref: gnat_rm/implementation_defined_pragmas id9102982
! Ref: 51102982
! Ref: gnat_rm/implementation_defined_pragmas pragma-default-initial-condition102982
! Ref: 52102982
! Node: Pragma Default_Scalar_Storage_Order103283
! Ref: gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order103463
! Ref: 53103463
! Node: Pragma Default_Storage_Pool105763
! Ref: gnat_rm/implementation_defined_pragmas pragma-default-storage-pool105925
! Ref: 54105925
! Node: Pragma Depends106230
! Ref: gnat_rm/implementation_defined_pragmas id10106379
! Ref: 55106379
! Ref: gnat_rm/implementation_defined_pragmas pragma-depends106379
! Ref: 56106379
! Node: Pragma Detect_Blocking107079
! Ref: gnat_rm/implementation_defined_pragmas pragma-detect-blocking107238
! Ref: 57107238
! Node: Pragma Disable_Atomic_Synchronization107627
! Ref: gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization107797
! Ref: 58107797
! Node: Pragma Dispatching_Domain108614
! Ref: gnat_rm/implementation_defined_pragmas pragma-dispatching-domain108784
! Ref: 59108784
! Node: Pragma Effective_Reads109069
! Ref: gnat_rm/implementation_defined_pragmas id11109225
! Ref: 5a109225
! Ref: gnat_rm/implementation_defined_pragmas pragma-effective-reads109225
! Ref: 5b109225
! Node: Pragma Effective_Writes109486
! Ref: gnat_rm/implementation_defined_pragmas id12109642
! Ref: 5c109642
! Ref: gnat_rm/implementation_defined_pragmas pragma-effective-writes109642
! Ref: 5d109642
! Node: Pragma Elaboration_Checks109907
! Ref: gnat_rm/implementation_defined_pragmas pragma-elaboration-checks110057
! Ref: 5e110057
! Node: Pragma Eliminate110889
! Ref: gnat_rm/implementation_defined_pragmas pragma-eliminate111052
! Ref: 5f111052
! Node: Pragma Enable_Atomic_Synchronization116784
! Ref: gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization116946
! Ref: 60116946
! Node: Pragma Exceptional_Cases117862
! Ref: gnat_rm/implementation_defined_pragmas pragma-exceptional-cases118030
! Ref: 61118030
! Node: Pragma Export_Function118449
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-function118601
! Ref: 62118601
! Node: Pragma Export_Object121057
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-object121208
! Ref: 63121208
! Node: Pragma Export_Procedure121879
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-procedure122038
! Ref: 64122038
! Node: Pragma Export_Valued_Procedure123536
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure123695
! Ref: 65123695
! Node: Pragma Extend_System125548
! Ref: gnat_rm/implementation_defined_pragmas pragma-extend-system125709
! Ref: 66125709
! Node: Pragma Extensions_Allowed127771
! Ref: gnat_rm/implementation_defined_pragmas id13127927
! Ref: 67127927
! Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-allowed127927
! Ref: 68127927
! Node: Pragma Extensions_Visible128662
! Ref: gnat_rm/implementation_defined_pragmas id14128813
! Ref: 6b128813
! Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-visible128813
! Ref: 6c128813
! Node: Pragma External129086
! Ref: gnat_rm/implementation_defined_pragmas pragma-external129239
! Ref: 6d129239
! Node: Pragma External_Name_Casing129806
! Ref: gnat_rm/implementation_defined_pragmas pragma-external-name-casing129950
! Ref: 6e129950
! Node: Pragma Fast_Math132958
! Ref: gnat_rm/implementation_defined_pragmas pragma-fast-math133109
! Ref: 6f133109
! Node: Pragma Favor_Top_Level133982
! Ref: gnat_rm/implementation_defined_pragmas id15134134
! Ref: 70134134
! Ref: gnat_rm/implementation_defined_pragmas pragma-favor-top-level134134
! Ref: 71134134
! Node: Pragma Finalize_Storage_Only134807
! Ref: gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only134970
! Ref: 72134970
! Node: Pragma Float_Representation135732
! Ref: gnat_rm/implementation_defined_pragmas pragma-float-representation135885
! Ref: 73135885
! Node: Pragma Ghost136740
! Ref: gnat_rm/implementation_defined_pragmas id16136878
! Ref: 74136878
! Ref: gnat_rm/implementation_defined_pragmas pragma-ghost136878
! Ref: 75136878
! Node: Pragma Global137097
! Ref: gnat_rm/implementation_defined_pragmas id17137220
! Ref: 76137220
! Ref: gnat_rm/implementation_defined_pragmas pragma-global137220
! Ref: 77137220
! Node: Pragma Ident137767
! Ref: gnat_rm/implementation_defined_pragmas pragma-ident137898
! Ref: 78137898
! Node: Pragma Ignore_Pragma138134
! Ref: gnat_rm/implementation_defined_pragmas pragma-ignore-pragma138281
! Ref: 79138281
! Node: Pragma Implementation_Defined139010
! Ref: gnat_rm/implementation_defined_pragmas pragma-implementation-defined139163
! Ref: 7a139163
! Node: Pragma Implemented139875
! Ref: gnat_rm/implementation_defined_pragmas pragma-implemented140031
! Ref: 7b140031
! Node: Pragma Implicit_Packing141650
! Ref: gnat_rm/implementation_defined_pragmas pragma-implicit-packing141799
! Ref: 7c141799
! Node: Pragma Import_Function143622
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-function143773
! Ref: 7d143773
! Node: Pragma Import_Object145886
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-object146037
! Ref: 7e146037
! Node: Pragma Import_Procedure146741
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-procedure146900
! Ref: 7f146900
! Node: Pragma Import_Valued_Procedure147832
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure147989
! Ref: 80147989
! Node: Pragma Independent149766
! Ref: gnat_rm/implementation_defined_pragmas pragma-independent149929
! Ref: 81149929
! Node: Pragma Independent_Components150606
! Ref: gnat_rm/implementation_defined_pragmas pragma-independent-components150763
! Ref: 82150763
! Node: Pragma Initial_Condition151425
! Ref: gnat_rm/implementation_defined_pragmas id18151589
! Ref: 83151589
! Ref: gnat_rm/implementation_defined_pragmas pragma-initial-condition151589
! Ref: 84151589
! Node: Pragma Initialize_Scalars151847
! Ref: gnat_rm/implementation_defined_pragmas pragma-initialize-scalars152000
! Ref: 85152000
! Node: Pragma Initializes155684
! Ref: gnat_rm/implementation_defined_pragmas id19155833
! Ref: 86155833
! Ref: gnat_rm/implementation_defined_pragmas pragma-initializes155833
! Ref: 87155833
! Node: Pragma Inline_Always156319
! Ref: gnat_rm/implementation_defined_pragmas id20156464
! Ref: 88156464
! Ref: gnat_rm/implementation_defined_pragmas pragma-inline-always156464
! Ref: 89156464
! Node: Pragma Inline_Generic157104
! Ref: gnat_rm/implementation_defined_pragmas pragma-inline-generic157247
! Ref: 8a157247
! Node: Pragma Interface157629
! Ref: gnat_rm/implementation_defined_pragmas pragma-interface157773
! Ref: 8b157773
! Node: Pragma Interface_Name158746
! Ref: gnat_rm/implementation_defined_pragmas pragma-interface-name158893
! Ref: 8c158893
! Node: Pragma Interrupt_Handler159411
! Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-handler159564
! Ref: 8d159564
! Node: Pragma Interrupt_State159820
! Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-state159968
! Ref: 8e159968
! Node: Pragma Invariant163168
! Ref: gnat_rm/implementation_defined_pragmas id21163309
! Ref: 8f163309
! Ref: gnat_rm/implementation_defined_pragmas pragma-invariant163309
! Ref: 90163309
! Node: Pragma Keep_Names164965
! Ref: gnat_rm/implementation_defined_pragmas pragma-keep-names165098
! Ref: 91165098
! Node: Pragma License165714
! Ref: gnat_rm/implementation_defined_pragmas pragma-license165847
! Ref: 92165847
! Node: Pragma Link_With168945
! Ref: gnat_rm/implementation_defined_pragmas pragma-link-with169080
! Ref: 93169080
! Node: Pragma Linker_Alias169721
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-alias169867
! Ref: 94169867
! Node: Pragma Linker_Constructor171146
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-constructor171300
! Ref: 95171300
! Node: Pragma Linker_Destructor172529
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-destructor172685
! Ref: 96172685
! Node: Pragma Linker_Section173464
! Ref: gnat_rm/implementation_defined_pragmas id22173611
! Ref: 97173611
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-section173611
! Ref: 98173611
! Node: Pragma Lock_Free176662
! Ref: gnat_rm/implementation_defined_pragmas id23176806
! Ref: 99176806
! Ref: gnat_rm/implementation_defined_pragmas pragma-lock-free176806
! Ref: 9a176806
! Node: Pragma Loop_Invariant178131
! Ref: gnat_rm/implementation_defined_pragmas pragma-loop-invariant178274
! Ref: 9b178274
! Node: Pragma Loop_Optimize179466
! Ref: gnat_rm/implementation_defined_pragmas pragma-loop-optimize179612
! Ref: 9c179612
! Node: Pragma Loop_Variant181354
! Ref: gnat_rm/implementation_defined_pragmas pragma-loop-variant181503
! Ref: 9d181503
! Node: Pragma Machine_Attribute183312
! Ref: gnat_rm/implementation_defined_pragmas pragma-machine-attribute183452
! Ref: 9e183452
! Node: Pragma Main184423
! Ref: gnat_rm/implementation_defined_pragmas pragma-main184563
! Ref: 9f184563
! Node: Pragma Main_Storage185001
! Ref: gnat_rm/implementation_defined_pragmas pragma-main-storage185140
! Ref: a0185140
! Node: Pragma Max_Queue_Length185547
! Ref: gnat_rm/implementation_defined_pragmas id24185689
! Ref: a1185689
! Ref: gnat_rm/implementation_defined_pragmas pragma-max-queue-length185689
! Ref: a2185689
! Node: Pragma No_Body186115
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-body186255
! Ref: a3186255
! Node: Pragma No_Caching187038
! Ref: gnat_rm/implementation_defined_pragmas id25187185
! Ref: a4187185
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-caching187185
! Ref: a5187185
! Node: Pragma No_Component_Reordering187428
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-component-reordering187591
! Ref: a6187591
! Node: Pragma No_Elaboration_Code_All188251
! Ref: gnat_rm/implementation_defined_pragmas id26188424
! Ref: a7188424
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all188424
! Ref: a8188424
! Node: Pragma No_Heap_Finalization189079
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization189238
! Ref: a9189238
! Node: Pragma No_Inline190390
! Ref: gnat_rm/implementation_defined_pragmas id27190535
! Ref: aa190535
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-inline190535
! Ref: ab190535
! Node: Pragma No_Return191050
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-return191193
! Ref: ac191193
! Node: Pragma No_Strict_Aliasing192166
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing192317
! Ref: ad192317
! Node: Pragma No_Tagged_Streams193043
! Ref: gnat_rm/implementation_defined_pragmas id28193202
! Ref: ae193202
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams193202
! Ref: af193202
! Node: Pragma Normalize_Scalars194977
! Ref: gnat_rm/implementation_defined_pragmas pragma-normalize-scalars195129
! Ref: b0195129
! Node: Pragma Obsolescent198099
! Ref: gnat_rm/implementation_defined_pragmas id29198252
! Ref: b1198252
! Ref: gnat_rm/implementation_defined_pragmas pragma-obsolescent198252
! Ref: b2198252
! Node: Pragma Optimize_Alignment201707
! Ref: gnat_rm/implementation_defined_pragmas pragma-optimize-alignment201850
! Ref: b3201850
! Node: Pragma Ordered205361
! Ref: gnat_rm/implementation_defined_pragmas pragma-ordered205506
! Ref: b4205506
! Node: Pragma Overflow_Mode208626
! Ref: gnat_rm/implementation_defined_pragmas pragma-overflow-mode208773
! Ref: b5208773
! Node: Pragma Overriding_Renamings210111
! Ref: gnat_rm/implementation_defined_pragmas pragma-overriding-renamings210258
! Ref: b6210258
! Node: Pragma Part_Of210920
! Ref: gnat_rm/implementation_defined_pragmas id30211082
! Ref: b7211082
! Ref: gnat_rm/implementation_defined_pragmas pragma-part-of211082
! Ref: b8211082
! Node: Pragma Partition_Elaboration_Policy211328
! Ref: gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy211477
! Ref: b9211477
! Node: Pragma Passive211853
! Ref: gnat_rm/implementation_defined_pragmas pragma-passive212009
! Ref: ba212009
! Node: Pragma Persistent_BSS212867
! Ref: gnat_rm/implementation_defined_pragmas id31212999
! Ref: bb212999
! Ref: gnat_rm/implementation_defined_pragmas pragma-persistent-bss212999
! Ref: bc212999
! Node: Pragma Post214195
! Ref: gnat_rm/implementation_defined_pragmas pragma-post214333
! Ref: bd214333
! Node: Pragma Postcondition214848
! Ref: gnat_rm/implementation_defined_pragmas pragma-postcondition214982
! Ref: be214982
! Node: Pragma Post_Class220730
! Ref: gnat_rm/implementation_defined_pragmas pragma-post-class220863
! Ref: bf220863
! Node: Pragma Pre221920
! Ref: gnat_rm/implementation_defined_pragmas pragma-pre222052
! Ref: c0222052
! Node: Pragma Precondition222562
! Ref: gnat_rm/implementation_defined_pragmas pragma-precondition222693
! Ref: c1222693
! Node: Pragma Predicate224640
! Ref: gnat_rm/implementation_defined_pragmas id32224785
! Ref: c2224785
! Ref: gnat_rm/implementation_defined_pragmas pragma-predicate224785
! Ref: c3224785
! Node: Pragma Predicate_Failure226541
! Ref: gnat_rm/implementation_defined_pragmas pragma-predicate-failure226702
! Ref: c4226702
! Node: Pragma Preelaborable_Initialization227059
! Ref: gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization227236
! Ref: c5227236
! Node: Pragma Prefix_Exception_Messages227554
! Ref: gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages227723
! Ref: c6227723
! Node: Pragma Pre_Class228644
! Ref: gnat_rm/implementation_defined_pragmas pragma-pre-class228814
! Ref: c7228814
! Node: Pragma Priority_Specific_Dispatching229862
! Ref: gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching230014
! Ref: c8230014
! Node: Pragma Profile230613
! Ref: gnat_rm/implementation_defined_pragmas pragma-profile230772
! Ref: c9230772
! Node: Pragma Profile_Warnings237709
! Ref: gnat_rm/implementation_defined_pragmas pragma-profile-warnings237859
! Ref: ca237859
! Node: Pragma Propagate_Exceptions238298
! Ref: gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions238464
! Ref: cb238464
! Node: Pragma Provide_Shift_Operators238862
! Ref: gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators239024
! Ref: cc239024
! Node: Pragma Psect_Object239587
! Ref: gnat_rm/implementation_defined_pragmas pragma-psect-object239742
! Ref: cd239742
! Node: Pragma Pure_Function240095
! Ref: gnat_rm/implementation_defined_pragmas id33240235
! Ref: ce240235
! Ref: gnat_rm/implementation_defined_pragmas pragma-pure-function240235
! Ref: cf240235
! Node: Pragma Rational243281
! Ref: gnat_rm/implementation_defined_pragmas pragma-rational243418
! Ref: d0243418
! Node: Pragma Ravenscar243634
! Ref: gnat_rm/implementation_defined_pragmas pragma-ravenscar243773
! Ref: d1243773
! Node: Pragma Refined_Depends244064
! Ref: gnat_rm/implementation_defined_pragmas id34244209
! Ref: d2244209
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-depends244209
! Ref: d3244209
! Node: Pragma Refined_Global244943
! Ref: gnat_rm/implementation_defined_pragmas id35245091
! Ref: d4245091
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-global245091
! Ref: d5245091
! Node: Pragma Refined_Post245672
! Ref: gnat_rm/implementation_defined_pragmas id36245818
! Ref: d6245818
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-post245818
! Ref: d7245818
! Node: Pragma Refined_State246058
! Ref: gnat_rm/implementation_defined_pragmas id37246207
! Ref: d8246207
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-state246207
! Ref: d9246207
! Node: Pragma Relative_Deadline246732
! Ref: gnat_rm/implementation_defined_pragmas pragma-relative-deadline246887
! Ref: da246887
! Node: Pragma Remote_Access_Type247181
! Ref: gnat_rm/implementation_defined_pragmas id38247336
! Ref: db247336
! Ref: gnat_rm/implementation_defined_pragmas pragma-remote-access-type247336
! Ref: dc247336
! Node: Pragma Rename_Pragma248214
! Ref: gnat_rm/implementation_defined_pragmas pragma-rename-pragma248371
! Ref: dd248371
! Node: Pragma Restricted_Run_Time249534
! Ref: gnat_rm/implementation_defined_pragmas pragma-restricted-run-time249693
! Ref: de249693
! Node: Pragma Restriction_Warnings250019
! Ref: gnat_rm/implementation_defined_pragmas pragma-restriction-warnings250175
! Ref: df250175
! Node: Pragma Reviewable251463
! Ref: gnat_rm/implementation_defined_pragmas pragma-reviewable251620
! Ref: e0251620
! Node: Pragma Secondary_Stack_Size254216
! Ref: gnat_rm/implementation_defined_pragmas id39254366
! Ref: e1254366
! Ref: gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size254366
! Ref: e2254366
! Node: Pragma Share_Generic255842
! Ref: gnat_rm/implementation_defined_pragmas pragma-share-generic255988
! Ref: e3255988
! Node: Pragma Shared256380
! Ref: gnat_rm/implementation_defined_pragmas id40256526
! Ref: e4256526
! Ref: gnat_rm/implementation_defined_pragmas pragma-shared256526
! Ref: e5256526
! Node: Pragma Short_Circuit_And_Or256681
! Ref: gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or256831
! Ref: e6256831
! Node: Pragma Short_Descriptors257485
! Ref: gnat_rm/implementation_defined_pragmas pragma-short-descriptors257641
! Ref: e7257641
! Node: Pragma Side_Effects257883
! Ref: gnat_rm/implementation_defined_pragmas id41258043
! Ref: e8258043
! Ref: gnat_rm/implementation_defined_pragmas pragma-side-effects258043
! Ref: e9258043
! Node: Pragma Simple_Storage_Pool_Type258290
! Ref: gnat_rm/implementation_defined_pragmas id42258449
! Ref: ea258449
! Ref: gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type258449
! Ref: eb258449
! Node: Pragma Source_File_Name260739
! Ref: gnat_rm/implementation_defined_pragmas id43260910
! Ref: ed260910
! Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name260910
! Ref: ee260910
! Node: Pragma Source_File_Name_Project264385
! Ref: gnat_rm/implementation_defined_pragmas id44264548
! Ref: f0264548
! Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name-project264548
! Ref: ef264548
! Node: Pragma Source_Reference265323
! Ref: gnat_rm/implementation_defined_pragmas pragma-source-reference265480
! Ref: f1265480
! Node: Pragma SPARK_Mode266325
! Ref: gnat_rm/implementation_defined_pragmas id45266484
! Ref: f2266484
! Ref: gnat_rm/implementation_defined_pragmas pragma-spark-mode266484
! Ref: f3266484
! Node: Pragma Static_Elaboration_Desired268501
! Ref: gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired268658
! Ref: f4268658
! Node: Pragma Stream_Convert269668
! Ref: gnat_rm/implementation_defined_pragmas pragma-stream-convert269827
! Ref: f5269827
! Node: Pragma Style_Checks272996
! Ref: gnat_rm/implementation_defined_pragmas pragma-style-checks273137
! Ref: f6273137
! Node: Pragma Subtitle275477
! Ref: gnat_rm/implementation_defined_pragmas pragma-subtitle275612
! Ref: f7275612
! Node: Pragma Suppress275814
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress275949
! Ref: f8275949
! Node: Pragma Suppress_All278820
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-all278966
! Ref: f9278966
! Node: Pragma Suppress_Debug_Info279508
! Ref: gnat_rm/implementation_defined_pragmas id46279674
! Ref: fa279674
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info279674
! Ref: fb279674
! Node: Pragma Suppress_Exception_Locations280006
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations280183
! Ref: fc280183
! Node: Pragma Suppress_Initialization281114
! Ref: gnat_rm/implementation_defined_pragmas id47281281
! Ref: fd281281
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-initialization281281
! Ref: fe281281
! Node: Pragma Task_Name282845
! Ref: gnat_rm/implementation_defined_pragmas pragma-task-name282996
! Ref: ff282996
! Node: Pragma Task_Storage284575
! Ref: gnat_rm/implementation_defined_pragmas pragma-task-storage284712
! Ref: 100284712
! Node: Pragma Test_Case285247
! Ref: gnat_rm/implementation_defined_pragmas id48285395
! Ref: 101285395
! Ref: gnat_rm/implementation_defined_pragmas pragma-test-case285395
! Ref: 102285395
! Node: Pragma Thread_Local_Storage287489
! Ref: gnat_rm/implementation_defined_pragmas id49287635
! Ref: 103287635
! Ref: gnat_rm/implementation_defined_pragmas pragma-thread-local-storage287635
! Ref: 104287635
! Node: Pragma Time_Slice288848
! Ref: gnat_rm/implementation_defined_pragmas pragma-time-slice288990
! Ref: 105288990
! Node: Pragma Title289374
! Ref: gnat_rm/implementation_defined_pragmas pragma-title289510
! Ref: 106289510
! Node: Pragma Type_Invariant290227
! Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant290373
! Ref: 107290373
! Node: Pragma Type_Invariant_Class290913
! Ref: gnat_rm/implementation_defined_pragmas id50291069
! Ref: 108291069
! Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant-class291069
! Ref: 109291069
! Node: Pragma Unchecked_Union291984
! Ref: gnat_rm/implementation_defined_pragmas pragma-unchecked-union292148
! Ref: 10a292148
! Node: Pragma Unevaluated_Use_Of_Old292714
! Ref: gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old292880
! Ref: 10b292880
! Node: Pragma User_Aspect_Definition294807
! Ref: gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition294976
! Ref: 10c294976
! Node: Pragma Unimplemented_Unit296327
! Ref: gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit296492
! Ref: 10d296492
! Node: Pragma Universal_Aliasing297027
! Ref: gnat_rm/implementation_defined_pragmas id51297180
! Ref: 10e297180
! Ref: gnat_rm/implementation_defined_pragmas pragma-universal-aliasing297180
! Ref: 10f297180
! Node: Pragma Unmodified297821
! Ref: gnat_rm/implementation_defined_pragmas id52297968
! Ref: 110297968
! Ref: gnat_rm/implementation_defined_pragmas pragma-unmodified297968
! Ref: 111297968
! Node: Pragma Unreferenced299046
! Ref: gnat_rm/implementation_defined_pragmas id53299195
! Ref: 112299195
! Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced299195
! Ref: 113299195
! Node: Pragma Unreferenced_Objects301873
! Ref: gnat_rm/implementation_defined_pragmas id54302036
! Ref: 114302036
! Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects302036
! Ref: 115302036
! Node: Pragma Unreserve_All_Interrupts302813
! Ref: gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts302974
! Ref: 116302974
! Node: Pragma Unsuppress304479
! Ref: gnat_rm/implementation_defined_pragmas pragma-unsuppress304626
! Ref: 117304626
! Node: Pragma Unused305896
! Ref: gnat_rm/implementation_defined_pragmas id55306032
! Ref: 118306032
! Ref: gnat_rm/implementation_defined_pragmas pragma-unused306032
! Ref: 119306032
! Node: Pragma Use_VADS_Size307208
! Ref: gnat_rm/implementation_defined_pragmas pragma-use-vads-size307349
! Ref: 11a307349
! Node: Pragma Validity_Checks307910
! Ref: gnat_rm/implementation_defined_pragmas pragma-validity-checks308053
! Ref: 11b308053
! Node: Pragma Volatile309824
! Ref: gnat_rm/implementation_defined_pragmas id56309974
! Ref: 11c309974
! Ref: gnat_rm/implementation_defined_pragmas pragma-volatile309974
! Ref: 11d309974
! Node: Pragma Volatile_Full_Access310444
! Ref: gnat_rm/implementation_defined_pragmas id57310596
! Ref: 11e310596
! Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-full-access310596
! Ref: 11f310596
! Node: Pragma Volatile_Function311664
! Ref: gnat_rm/implementation_defined_pragmas id58311824
! Ref: 120311824
! Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-function311824
! Ref: 121311824
! Node: Pragma Warning_As_Error312095
! Ref: gnat_rm/implementation_defined_pragmas pragma-warning-as-error312243
! Ref: 122312243
! Node: Pragma Warnings315615
! Ref: gnat_rm/implementation_defined_pragmas id59315759
! Ref: 124315759
! Ref: gnat_rm/implementation_defined_pragmas pragma-warnings315759
! Ref: 123315759
! Node: Pragma Weak_External323226
! Ref: gnat_rm/implementation_defined_pragmas pragma-weak-external323377
! Ref: 125323377
! Node: Pragma Wide_Character_Encoding325058
! Ref: gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding325185
! Ref: 126325185
! Node: Implementation Defined Aspects326317
! Ref: gnat_rm/implementation_defined_aspects doc326469
! Ref: 127326469
! Ref: gnat_rm/implementation_defined_aspects id1326469
! Ref: 128326469
! Ref: gnat_rm/implementation_defined_aspects implementation-defined-aspects326469
! Ref: 129326469
! Node: Aspect Abstract_State329847
! Ref: gnat_rm/implementation_defined_aspects aspect-abstract-state329969
! Ref: 12a329969
! Node: Aspect Always_Terminates330085
! Ref: gnat_rm/implementation_defined_aspects aspect-always-terminates330231
! Ref: 12b330231
! Node: Aspect Annotate330364
! Ref: gnat_rm/implementation_defined_aspects aspect-annotate330509
! Ref: 12c330509
! Node: Aspect Async_Readers330980
! Ref: gnat_rm/implementation_defined_aspects aspect-async-readers331121
! Ref: 12d331121
! Node: Aspect Async_Writers331242
! Ref: gnat_rm/implementation_defined_aspects aspect-async-writers331401
! Ref: 12e331401
! Node: Aspect Constant_After_Elaboration331522
! Ref: gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration331682
! Ref: 12f331682
! Node: Aspect Contract_Cases331834
! Ref: gnat_rm/implementation_defined_aspects aspect-contract-cases331988
! Ref: 130331988
! Node: Aspect Depends332200
! Ref: gnat_rm/implementation_defined_aspects aspect-depends332353
! Ref: 131332353
! Node: Aspect Default_Initial_Condition332448
! Ref: gnat_rm/implementation_defined_aspects aspect-default-initial-condition332596
! Ref: 132332596
! Node: Aspect Dimension332745
! Ref: gnat_rm/implementation_defined_aspects aspect-dimension332902
! Ref: 133332902
! Node: Aspect Dimension_System334124
! Ref: gnat_rm/implementation_defined_aspects aspect-dimension-system334274
! Ref: 134334274
! Node: Aspect Disable_Controlled336824
! Ref: gnat_rm/implementation_defined_aspects aspect-disable-controlled336980
! Ref: 135336980
! Node: Aspect Effective_Reads337421
! Ref: gnat_rm/implementation_defined_aspects aspect-effective-reads337577
! Ref: 136337577
! Node: Aspect Effective_Writes337698
! Ref: gnat_rm/implementation_defined_aspects aspect-effective-writes337853
! Ref: 137337853
! Node: Aspect Exceptional_Cases337977
! Ref: gnat_rm/implementation_defined_aspects aspect-exceptional-cases338135
! Ref: 138338135
! Node: Aspect Extensions_Visible338553
! Ref: gnat_rm/implementation_defined_aspects aspect-extensions-visible338710
! Ref: 139338710
! Node: Aspect Favor_Top_Level338840
! Ref: gnat_rm/implementation_defined_aspects aspect-favor-top-level338985
! Ref: 13a338985
! Node: Aspect Ghost339114
! Ref: gnat_rm/implementation_defined_aspects aspect-ghost339256
! Ref: 13b339256
! Node: Aspect Ghost_Predicate339347
! Ref: gnat_rm/implementation_defined_aspects aspect-ghost-predicate339480
! Ref: 13c339480
! Node: Aspect Global339810
! Ref: gnat_rm/implementation_defined_aspects aspect-global339955
! Ref: 13d339955
! Node: Aspect Initial_Condition340049
! Ref: gnat_rm/implementation_defined_aspects aspect-initial-condition340190
! Ref: 13e340190
! Node: Aspect Initializes340317
! Ref: gnat_rm/implementation_defined_aspects aspect-initializes340465
! Ref: 13f340465
! Node: Aspect Inline_Always340574
! Ref: gnat_rm/implementation_defined_aspects aspect-inline-always340714
! Ref: 140340714
! Node: Aspect Invariant340837
! Ref: gnat_rm/implementation_defined_aspects aspect-invariant340983
! Ref: 141340983
! Node: Aspect Invariant’Class341235
! Ref: gnat_rm/implementation_defined_aspects aspect-invariant-class341376
! Ref: 142341376
! Node: Aspect Iterable341660
! Ref: gnat_rm/implementation_defined_aspects aspect-iterable341806
! Ref: 143341806
! Node: Aspect Linker_Section344413
! Ref: gnat_rm/implementation_defined_aspects aspect-linker-section344560
! Ref: 144344560
! Node: Aspect Local_Restrictions344678
! Ref: gnat_rm/implementation_defined_aspects aspect-local-restrictions344826
! Ref: 145344826
! Node: Aspect Lock_Free347572
! Ref: gnat_rm/implementation_defined_aspects aspect-lock-free347722
! Ref: 146347722
! Node: Aspect Max_Queue_Length347833
! Ref: gnat_rm/implementation_defined_aspects aspect-max-queue-length347975
! Ref: 147347975
! Node: Aspect No_Caching348099
! Ref: gnat_rm/implementation_defined_aspects aspect-no-caching348255
! Ref: 148348255
! Node: Aspect No_Elaboration_Code_All348369
! Ref: gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all348518
! Ref: 149348518
! Node: Aspect No_Inline348683
! Ref: gnat_rm/implementation_defined_aspects aspect-no-inline348839
! Ref: 14a348839
! Node: Aspect No_Tagged_Streams348950
! Ref: gnat_rm/implementation_defined_aspects aspect-no-tagged-streams349096
! Ref: 14b349096
! Node: Aspect No_Task_Parts349325
! Ref: gnat_rm/implementation_defined_aspects aspect-no-task-parts349473
! Ref: 14c349473
! Node: Aspect Object_Size349979
! Ref: gnat_rm/implementation_defined_aspects aspect-object-size350121
! Ref: 14d350121
! Node: Aspect Obsolescent350234
! Ref: gnat_rm/implementation_defined_aspects aspect-obsolescent350370
! Ref: 14f350370
! Node: Aspect Part_Of350598
! Ref: gnat_rm/implementation_defined_aspects aspect-part-of350737
! Ref: 150350737
! Node: Aspect Persistent_BSS350834
! Ref: gnat_rm/implementation_defined_aspects aspect-persistent-bss350971
! Ref: 151350971
! Node: Aspect Predicate351097
! Ref: gnat_rm/implementation_defined_aspects aspect-predicate351240
! Ref: 152351240
! Node: Aspect Pure_Function351629
! Ref: gnat_rm/implementation_defined_aspects aspect-pure-function351773
! Ref: 153351773
! Node: Aspect Refined_Depends351896
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-depends352045
! Ref: 154352045
! Node: Aspect Refined_Global352166
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-global352314
! Ref: 155352314
! Node: Aspect Refined_Post352432
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-post352578
! Ref: 156352578
! Node: Aspect Refined_State352690
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-state352844
! Ref: 157352844
! Node: Aspect Relaxed_Initialization352959
! Ref: gnat_rm/implementation_defined_aspects aspect-relaxed-initialization353119
! Ref: 158353119
! Node: Aspect Remote_Access_Type353287
! Ref: gnat_rm/implementation_defined_aspects aspect-remote-access-type353454
! Ref: 159353454
! Node: Aspect Secondary_Stack_Size353584
! Ref: gnat_rm/implementation_defined_aspects aspect-secondary-stack-size353749
! Ref: 15a353749
! Node: Aspect Scalar_Storage_Order353885
! Ref: gnat_rm/implementation_defined_aspects aspect-scalar-storage-order354038
! Ref: 15b354038
! Node: Aspect Shared354180
! Ref: gnat_rm/implementation_defined_aspects aspect-shared354325
! Ref: 15d354325
! Node: Aspect Side_Effects354474
! Ref: gnat_rm/implementation_defined_aspects aspect-side-effects354618
! Ref: 15e354618
! Node: Aspect Simple_Storage_Pool354730
! Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool354892
! Ref: 15f354892
! Node: Aspect Simple_Storage_Pool_Type355028
! Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type355188
! Ref: 160355188
! Node: Aspect SPARK_Mode355344
! Ref: gnat_rm/implementation_defined_aspects aspect-spark-mode355504
! Ref: 161355504
! Node: Aspect Suppress_Debug_Info355708
! Ref: gnat_rm/implementation_defined_aspects aspect-suppress-debug-info355867
! Ref: 162355867
! Node: Aspect Suppress_Initialization356008
! Ref: gnat_rm/implementation_defined_aspects aspect-suppress-initialization356166
! Ref: 163356166
! Node: Aspect Test_Case356319
! Ref: gnat_rm/implementation_defined_aspects aspect-test-case356478
! Ref: 164356478
! Node: Aspect Thread_Local_Storage356582
! Ref: gnat_rm/implementation_defined_aspects aspect-thread-local-storage356736
! Ref: 165356736
! Node: Aspect Universal_Aliasing356881
! Ref: gnat_rm/implementation_defined_aspects aspect-universal-aliasing357036
! Ref: 166357036
! Node: Aspect Unmodified357175
! Ref: gnat_rm/implementation_defined_aspects aspect-unmodified357322
! Ref: 167357322
! Node: Aspect Unreferenced357437
! Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced357586
! Ref: 168357586
! Node: Aspect Unreferenced_Objects357871
! Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced-objects358021
! Ref: 169358021
! Node: Aspect User_Aspect358166
! Ref: gnat_rm/implementation_defined_aspects aspect-user-aspect358314
! Ref: 16a358314
! Node: Aspect Value_Size358642
! Ref: gnat_rm/implementation_defined_aspects aspect-value-size358790
! Ref: 16b358790
! Node: Aspect Volatile_Full_Access358900
! Ref: gnat_rm/implementation_defined_aspects aspect-volatile-full-access359054
! Ref: 16d359054
! Node: Aspect Volatile_Function359199
! Ref: gnat_rm/implementation_defined_aspects aspect-volatile-function359351
! Ref: 16e359351
! Node: Aspect Warnings359487
! Ref: gnat_rm/implementation_defined_aspects aspect-warnings359603
! Ref: 16f359603
! Node: Implementation Defined Attributes359818
! Ref: gnat_rm/implementation_defined_attributes doc359988
! Ref: 170359988
! Ref: gnat_rm/implementation_defined_attributes id1359988
! Ref: 171359988
! Ref: gnat_rm/implementation_defined_attributes implementation-defined-attributes359988
! Ref: 8359988
! Node: Attribute Abort_Signal363180
! Ref: gnat_rm/implementation_defined_attributes attribute-abort-signal363304
! Ref: 172363304
! Node: Attribute Address_Size363739
! Ref: gnat_rm/implementation_defined_attributes attribute-address-size363891
! Ref: 173363891
! Node: Attribute Asm_Input364272
! Ref: gnat_rm/implementation_defined_attributes attribute-asm-input364422
! Ref: 174364422
! Node: Attribute Asm_Output365047
! Ref: gnat_rm/implementation_defined_attributes attribute-asm-output365208
! Ref: 176365208
! Node: Attribute Atomic_Always_Lock_Free365984
! Ref: gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free366139
! Ref: 177366139
! Node: Attribute Bit366478
! Ref: gnat_rm/implementation_defined_attributes attribute-bit366635
! Ref: 178366635
! Node: Attribute Bit_Position367720
! Ref: gnat_rm/implementation_defined_attributes attribute-bit-position367866
! Ref: 179367866
! Node: Attribute Code_Address368316
! Ref: gnat_rm/implementation_defined_attributes attribute-code-address368475
! Ref: 17a368475
! Node: Attribute Compiler_Version369809
! Ref: gnat_rm/implementation_defined_attributes attribute-compiler-version369967
! Ref: 17b369967
! Node: Attribute Constrained370237
! Ref: gnat_rm/implementation_defined_attributes attribute-constrained370400
! Ref: 17c370400
! Node: Attribute Default_Bit_Order370874
! Ref: gnat_rm/implementation_defined_attributes attribute-default-bit-order371049
! Ref: 17d371049
! Node: Attribute Default_Scalar_Storage_Order371421
! Ref: gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order371590
! Ref: 17e371590
! Node: Attribute Deref372011
! Ref: gnat_rm/implementation_defined_attributes attribute-deref372178
! Ref: 17f372178
! Node: Attribute Descriptor_Size372608
! Ref: gnat_rm/implementation_defined_attributes attribute-descriptor-size372757
! Ref: 180372757
! Node: Attribute Elaborated373759
! Ref: gnat_rm/implementation_defined_attributes attribute-elaborated373912
! Ref: 181373912
! Node: Attribute Elab_Body374454
! Ref: gnat_rm/implementation_defined_attributes attribute-elab-body374601
! Ref: 182374601
! Node: Attribute Elab_Spec375151
! Ref: gnat_rm/implementation_defined_attributes attribute-elab-spec375302
! Ref: 183375302
! Node: Attribute Elab_Subp_Body375852
! Ref: gnat_rm/implementation_defined_attributes attribute-elab-subp-body375998
! Ref: 184375998
! Node: Attribute Emax376420
! Ref: gnat_rm/implementation_defined_attributes attribute-emax376564
! Ref: 185376564
! Node: Attribute Enabled376768
! Ref: gnat_rm/implementation_defined_attributes attribute-enabled376906
! Ref: 186376906
! Node: Attribute Enum_Rep378028
! Ref: gnat_rm/implementation_defined_attributes attribute-enum-rep378170
! Ref: 187378170
! Node: Attribute Enum_Val379663
! Ref: gnat_rm/implementation_defined_attributes attribute-enum-val379805
! Ref: 188379805
! Node: Attribute Epsilon380531
! Ref: gnat_rm/implementation_defined_attributes attribute-epsilon380674
! Ref: 189380674
! Node: Attribute Fast_Math380887
! Ref: gnat_rm/implementation_defined_attributes attribute-fast-math381039
! Ref: 18a381039
! Node: Attribute Finalization_Size381261
! Ref: gnat_rm/implementation_defined_attributes attribute-finalization-size381417
! Ref: 18b381417
! Node: Attribute Fixed_Value382031
! Ref: gnat_rm/implementation_defined_attributes attribute-fixed-value382186
! Ref: 18c382186
! Node: Attribute From_Any382888
! Ref: gnat_rm/implementation_defined_attributes attribute-from-any383043
! Ref: 18d383043
! Node: Attribute Has_Access_Values383220
! Ref: gnat_rm/implementation_defined_attributes attribute-has-access-values383381
! Ref: 18e383381
! Node: Attribute Has_Discriminants383907
! Ref: gnat_rm/implementation_defined_attributes attribute-has-discriminants384077
! Ref: 18f384077
! Node: Attribute Has_Tagged_Values384518
! Ref: gnat_rm/implementation_defined_attributes attribute-has-tagged-values384674
! Ref: 190384674
! Node: Attribute Img385204
! Ref: gnat_rm/implementation_defined_attributes attribute-img385354
! Ref: 191385354
! Node: Attribute Initialized386021
! Ref: gnat_rm/implementation_defined_attributes attribute-initialized386167
! Ref: 192386167
! Node: Attribute Integer_Value386322
! Ref: gnat_rm/implementation_defined_attributes attribute-integer-value386478
! Ref: 193386478
! Node: Attribute Invalid_Value387242
! Ref: gnat_rm/implementation_defined_attributes attribute-invalid-value387395
! Ref: 194387395
! Node: Attribute Iterable387869
! Ref: gnat_rm/implementation_defined_attributes attribute-iterable388014
! Ref: 195388014
! Node: Attribute Large388095
! Ref: gnat_rm/implementation_defined_attributes attribute-large388240
! Ref: 196388240
! Node: Attribute Library_Level388447
! Ref: gnat_rm/implementation_defined_attributes attribute-library-level388594
! Ref: 197388594
! Node: Attribute Loop_Entry389230
! Ref: gnat_rm/implementation_defined_attributes attribute-loop-entry389384
! Ref: 198389384
! Node: Attribute Machine_Size390630
! Ref: gnat_rm/implementation_defined_attributes attribute-machine-size390779
! Ref: 199390779
! Node: Attribute Mantissa390979
! Ref: gnat_rm/implementation_defined_attributes attribute-mantissa391135
! Ref: 19a391135
! Node: Attribute Maximum_Alignment391351
! Ref: gnat_rm/implementation_defined_attributes attribute-maximum-alignment391511
! Ref: 19b391511
! Ref: gnat_rm/implementation_defined_attributes id2391511
! Ref: 19c391511
! Node: Attribute Max_Integer_Size391852
! Ref: gnat_rm/implementation_defined_attributes attribute-max-integer-size392018
! Ref: 19d392018
! Node: Attribute Mechanism_Code392265
! Ref: gnat_rm/implementation_defined_attributes attribute-mechanism-code392428
! Ref: 19e392428
! Node: Attribute Null_Parameter392872
! Ref: gnat_rm/implementation_defined_attributes attribute-null-parameter393030
! Ref: 19f393030
! Node: Attribute Object_Size393755
! Ref: gnat_rm/implementation_defined_attributes attribute-object-size393902
! Ref: 14e393902
! Ref: gnat_rm/implementation_defined_attributes id3393902
! Ref: 1a0393902
! Node: Attribute Old396134
! Ref: gnat_rm/implementation_defined_attributes attribute-old396286
! Ref: 1a1396286
! Node: Attribute Passed_By_Reference396744
! Ref: gnat_rm/implementation_defined_attributes attribute-passed-by-reference396897
! Ref: 1a2396897
! Node: Attribute Pool_Address397311
! Ref: gnat_rm/implementation_defined_attributes attribute-pool-address397473
! Ref: 1a3397473
! Node: Attribute Range_Length398229
! Ref: gnat_rm/implementation_defined_attributes attribute-range-length398387
! Ref: 1a4398387
! Node: Attribute Restriction_Set398773
! Ref: gnat_rm/implementation_defined_attributes attribute-restriction-set398925
! Ref: 1a5398925
! Node: Attribute Result401399
! Ref: gnat_rm/implementation_defined_attributes attribute-result401548
! Ref: 1a6401548
! Node: Attribute Safe_Emax401950
! Ref: gnat_rm/implementation_defined_attributes attribute-safe-emax402094
! Ref: 1a7402094
! Node: Attribute Safe_Large402312
! Ref: gnat_rm/implementation_defined_attributes attribute-safe-large402460
! Ref: 1a8402460
! Node: Attribute Safe_Small402681
! Ref: gnat_rm/implementation_defined_attributes attribute-safe-small402840
! Ref: 1a9402840
! Node: Attribute Scalar_Storage_Order403061
! Ref: gnat_rm/implementation_defined_attributes attribute-scalar-storage-order403229
! Ref: 15c403229
! Ref: gnat_rm/implementation_defined_attributes id4403229
! Ref: 1aa403229
! Node: Attribute Simple_Storage_Pool409053
! Ref: gnat_rm/implementation_defined_attributes attribute-simple-storage-pool409216
! Ref: ec409216
! Ref: gnat_rm/implementation_defined_attributes id5409216
! Ref: 1ab409216
! Node: Attribute Small411849
! Ref: gnat_rm/implementation_defined_attributes attribute-small412009
! Ref: 1ac412009
! Node: Attribute Small_Denominator412376
! Ref: gnat_rm/implementation_defined_attributes attribute-small-denominator412532
! Ref: 1ad412532
! Node: Attribute Small_Numerator412808
! Ref: gnat_rm/implementation_defined_attributes attribute-small-numerator412971
! Ref: 1ae412971
! Node: Attribute Storage_Unit413239
! Ref: gnat_rm/implementation_defined_attributes attribute-storage-unit413394
! Ref: 1af413394
! Node: Attribute Stub_Type413578
! Ref: gnat_rm/implementation_defined_attributes attribute-stub-type413744
! Ref: 1b0413744
! Node: Attribute System_Allocator_Alignment414699
! Ref: gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment414864
! Ref: 1b1414864
! Node: Attribute Target_Name415340
! Ref: gnat_rm/implementation_defined_attributes attribute-target-name415506
! Ref: 1b2415506
! Node: Attribute To_Address415881
! Ref: gnat_rm/implementation_defined_attributes attribute-to-address416027
! Ref: 1b3416027
! Node: Attribute To_Any416850
! Ref: gnat_rm/implementation_defined_attributes attribute-to-any416995
! Ref: 1b4416995
! Node: Attribute Type_Class417168
! Ref: gnat_rm/implementation_defined_attributes attribute-type-class417311
! Ref: 1b5417311
! Node: Attribute Type_Key418176
! Ref: gnat_rm/implementation_defined_attributes attribute-type-key418321
! Ref: 1b6418321
! Node: Attribute TypeCode418630
! Ref: gnat_rm/implementation_defined_attributes attribute-typecode418784
! Ref: 1b7418784
! Node: Attribute Unconstrained_Array418961
! Ref: gnat_rm/implementation_defined_attributes attribute-unconstrained-array419131
! Ref: 1b8419131
! Node: Attribute Universal_Literal_String419547
! Ref: gnat_rm/implementation_defined_attributes attribute-universal-literal-string419728
! Ref: 1b9419728
! Node: Attribute Unrestricted_Access420420
! Ref: gnat_rm/implementation_defined_attributes attribute-unrestricted-access420588
! Ref: 1ba420588
! Node: Attribute Update426908
! Ref: gnat_rm/implementation_defined_attributes attribute-update427063
! Ref: 1bb427063
! Node: Attribute Valid_Value429894
! Ref: gnat_rm/implementation_defined_attributes attribute-valid-value430043
! Ref: 1bc430043
! Node: Attribute Valid_Scalars430380
! Ref: gnat_rm/implementation_defined_attributes attribute-valid-scalars430532
! Ref: 1bd430532
! Node: Attribute VADS_Size432190
! Ref: gnat_rm/implementation_defined_attributes attribute-vads-size432341
! Ref: 1be432341
! Node: Attribute Value_Size432982
! Ref: gnat_rm/implementation_defined_attributes attribute-value-size433132
! Ref: 16c433132
! Ref: gnat_rm/implementation_defined_attributes id6433132
! Ref: 1bf433132
! Node: Attribute Wchar_T_Size433377
! Ref: gnat_rm/implementation_defined_attributes attribute-wchar-t-size433527
! Ref: 1c0433527
! Node: Attribute Word_Size433831
! Ref: gnat_rm/implementation_defined_attributes attribute-word-size433952
! Ref: 1c1433952
! Node: Standard and Implementation Defined Restrictions434150
! Ref: gnat_rm/standard_and_implementation_defined_restrictions doc434311
! Ref: 1c2434311
! Ref: gnat_rm/standard_and_implementation_defined_restrictions id1434311
! Ref: 1c3434311
! Ref: gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions434311
! Ref: 9434311
! Node: Partition-Wide Restrictions434842
! Ref: gnat_rm/standard_and_implementation_defined_restrictions id2434995
! Ref: 1c4434995
! Ref: gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions434995
! Ref: 1c5434995
! Node: Immediate_Reclamation437381
! Ref: gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation437507
! Ref: 1c6437507
! Node: Max_Asynchronous_Select_Nesting437820
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting437977
! Ref: 1c7437977
! Node: Max_Entry_Queue_Length438310
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length438467
! Ref: 1c8438467
! Node: Max_Protected_Entries439163
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries439312
! Ref: 1c9439312
! Node: Max_Select_Alternatives439597
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives439747
! Ref: 1ca439747
! Node: Max_Storage_At_Blocking439886
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking440031
! Ref: 1cb440031
! Node: Max_Task_Entries440289
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-task-entries440420
! Ref: 1cc440420
! Node: Max_Tasks440681
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-tasks440808
! Ref: 1cd440808
! Node: No_Abort_Statements441136
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements441277
! Ref: 1ce441277
! Node: No_Access_Parameter_Allocators441429
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators441582
! Ref: 1cf441582
! Node: No_Access_Subprograms441804
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms441951
! Ref: 1d0441951
! Node: No_Allocators442123
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-allocators442263
! Ref: 1d1442263
! Node: No_Anonymous_Allocators442404
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators442546
! Ref: 1d2442546
! Node: No_Asynchronous_Control442732
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control442872
! Ref: 1d3442872
! Node: No_Calendar443079
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-calendar443211
! Ref: 1d4443211
! Node: No_Coextensions443359
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-coextensions443493
! Ref: 1d5443493
! Node: No_Default_Initialization443636
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization443767
! Ref: 1d6443767
! Node: No_Delay444467
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-delay444596
! Ref: 1d7444596
! Node: No_Dependence444764
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dependence444895
! Ref: 1d8444895
! Node: No_Direct_Boolean_Operators445905
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators446039
! Ref: 1d9446039
! Node: No_Dispatch446439
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatch446580
! Ref: 1da446580
! Node: No_Dispatching_Calls446752
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls446887
! Ref: 1db446887
! Node: No_Dynamic_Attachment448983
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment449128
! Ref: 1dc449128
! Node: No_Dynamic_Priorities449671
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities449830
! Ref: 1dd449830
! Node: No_Entry_Calls_In_Elaboration_Code449969
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code450126
! Ref: 1de450126
! Node: No_Enumeration_Maps450486
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps450643
! Ref: 1df450643
! Node: No_Exception_Handlers450869
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers451016
! Ref: 1e0451016
! Node: No_Exception_Propagation451889
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation452042
! Ref: 1e1452042
! Node: No_Exception_Registration452715
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration452860
! Ref: 1e2452860
! Node: No_Exceptions453341
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exceptions453477
! Ref: 1e3453477
! Node: No_Finalization453704
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-finalization453829
! Ref: 1e4453829
! Node: No_Fixed_Point454661
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point454790
! Ref: 1e5454790
! Node: No_Floating_Point454953
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-floating-point455091
! Ref: 1e6455091
! Node: No_Implicit_Conditionals455263
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals455411
! Ref: 1e7455411
! Node: No_Implicit_Dynamic_Code456046
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code456205
! Ref: 1e8456205
! Node: No_Implicit_Heap_Allocations457426
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations457601
! Ref: 1e9457601
! Node: No_Implicit_Protected_Object_Allocations457745
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations457924
! Ref: 1ea457924
! Node: No_Implicit_Task_Allocations458112
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations458284
! Ref: 1eb458284
! Node: No_Initialize_Scalars458436
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars458573
! Ref: 1ec458573
! Node: No_IO458917
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-io459045
! Ref: 1ed459045
! Node: No_Local_Allocators459263
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators459396
! Ref: 1ee459396
! Node: No_Local_Protected_Objects459610
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects459759
! Ref: 1ef459759
! Node: No_Local_Tagged_Types459942
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types460094
! Ref: 1f0460094
! Node: No_Local_Timing_Events460260
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events460407
! Ref: 1f1460407
! Node: No_Long_Long_Integers460574
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers460723
! Ref: 1f2460723
! Node: No_Multiple_Elaboration461033
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration461182
! Ref: 1f3461182
! Node: No_Nested_Finalization461825
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization461981
! Ref: 1f4461981
! Node: No_Protected_Type_Allocators462122
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators462273
! Ref: 1f5462273
! Node: No_Protected_Types462481
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-types462622
! Ref: 1f6462622
! Node: No_Recursion462798
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-recursion462924
! Ref: 1f7462924
! Node: No_Reentrancy463061
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy463186
! Ref: 1f8463186
! Node: No_Relative_Delay463331
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay463465
! Ref: 1f9463465
! Node: No_Requeue_Statements463693
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements463832
! Ref: 1fa463832
! Node: No_Secondary_Stack464299
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack464441
! Ref: 1fb464441
! Node: No_Select_Statements464846
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-select-statements464999
! Ref: 1fc464999
! Node: No_Specific_Termination_Handlers465204
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers465365
! Ref: 1fd465365
! Node: No_Specification_of_Aspect465565
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect465746
! Ref: 1fe465746
! Node: No_Standard_Allocators_After_Elaboration465967
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration466141
! Ref: 1ff466141
! Node: No_Standard_Storage_Pools466456
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools466627
! Ref: 200466627
! Node: No_Stream_Optimizations466922
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations467063
! Ref: 201467063
! Node: No_Streams467496
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-streams467639
! Ref: 202467639
! Node: No_Tagged_Type_Registration468360
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration468498
! Ref: 203468498
! Node: No_Task_Allocators468980
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators469137
! Ref: 204469137
! Node: No_Task_At_Interrupt_Priority469279
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority469435
! Ref: 205469435
! Node: No_Task_Attributes_Package469737
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package469892
! Ref: 206469892
! Node: No_Task_Hierarchy470364
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy470509
! Ref: 207470509
! Node: No_Task_Termination470656
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-termination470785
! Ref: 208470785
! Node: No_Tasking470886
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tasking471023
! Ref: 209471023
! Node: No_Terminate_Alternatives471343
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives471480
! Ref: 20a471480
! Node: No_Unchecked_Access471617
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access471767
! Ref: 20b471767
! Node: No_Unchecked_Conversion471938
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion472088
! Ref: 20c472088
! Node: No_Unchecked_Deallocation472299
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation472449
! Ref: 20d472449
! Node: No_Use_Of_Attribute472667
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute472810
! Ref: 20e472810
! Node: No_Use_Of_Entity472968
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity473102
! Ref: 20f473102
! Node: No_Use_Of_Pragma473400
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma473528
! Ref: 210473528
! Node: Pure_Barriers473680
! Ref: gnat_rm/standard_and_implementation_defined_restrictions pure-barriers473807
! Ref: 211473807
! Node: Simple_Barriers474512
! Ref: gnat_rm/standard_and_implementation_defined_restrictions simple-barriers474640
! Ref: 212474640
! Node: Static_Priorities475239
! Ref: gnat_rm/standard_and_implementation_defined_restrictions static-priorities475373
! Ref: 213475373
! Node: Static_Storage_Size475594
! Ref: gnat_rm/standard_and_implementation_defined_restrictions static-storage-size475704
! Ref: 214475704
! Node: Program Unit Level Restrictions475905
! Ref: gnat_rm/standard_and_implementation_defined_restrictions id3476058
! Ref: 215476058
! Ref: gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions476058
! Ref: 216476058
! Node: No_Elaboration_Code476817
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code476945
! Ref: 217476945
! Node: No_Dynamic_Accessibility_Checks479544
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks479705
! Ref: 218479705
! Node: No_Dynamic_Sized_Objects481515
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects481671
! Ref: 219481671
! Node: No_Entry_Queue482393
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue482557
! Ref: 21a482557
! Node: No_Implementation_Aspect_Specifications482943
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications483111
! Ref: 21b483111
! Node: No_Implementation_Attributes483405
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes483588
! Ref: 21c483588
! Node: No_Implementation_Identifiers483866
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers484035
! Ref: 21d484035
! Node: No_Implementation_Pragmas484289
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas484460
! Ref: 21e484460
! Node: No_Implementation_Restrictions484726
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions484891
! Ref: 21f484891
! Node: No_Implementation_Units485256
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units485416
! Ref: 220485416
! Node: No_Implicit_Aliasing485662
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing485809
! Ref: 221485809
! Node: No_Implicit_Loops486363
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops486510
! Ref: 222486510
! Node: No_Obsolescent_Features487246
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features487391
! Ref: 223487391
! Node: No_Wide_Characters487598
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters487748
! Ref: 224487748
! Node: Static_Dispatch_Tables488112
! Ref: gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables488247
! Ref: 225488247
! Node: SPARK_05488446
! Ref: gnat_rm/standard_and_implementation_defined_restrictions spark-05488554
! Ref: 226488554
! Node: Implementation Advice489013
! Ref: gnat_rm/implementation_advice doc489179
! Ref: 227489179
! Ref: gnat_rm/implementation_advice id1489179
! Ref: 228489179
! Ref: gnat_rm/implementation_advice implementation-advice489179
! Ref: a489179
! Node: RM 1 1 3 20 Error Detection495084
! Ref: gnat_rm/implementation_advice rm-1-1-3-20-error-detection495202
! Ref: 229495202
! Node: RM 1 1 3 31 Child Units495547
! Ref: gnat_rm/implementation_advice rm-1-1-3-31-child-units495700
! Ref: 22a495700
! Node: RM 1 1 5 12 Bounded Errors495989
! Ref: gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors496132
! Ref: 22b496132
! Node: RM 2 8 16 Pragmas496471
! Ref: gnat_rm/implementation_advice id2496611
! Ref: 22c496611
! Ref: gnat_rm/implementation_advice rm-2-8-16-pragmas496611
! Ref: 22d496611
! Node: RM 2 8 17-19 Pragmas498292
! Ref: gnat_rm/implementation_advice rm-2-8-17-19-pragmas498443
! Ref: 22e498443
! Node: RM 3 5 2 5 Alternative Character Sets498877
! Ref: gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets499036
! Ref: 22f499036
! Node: RM 3 5 4 28 Integer Types500193
! Ref: gnat_rm/implementation_advice rm-3-5-4-28-integer-types500357
! Ref: 230500357
! Node: RM 3 5 4 29 Integer Types501031
! Ref: gnat_rm/implementation_advice rm-3-5-4-29-integer-types501187
! Ref: 231501187
! Node: RM 3 5 5 8 Enumeration Values501505
! Ref: gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values501659
! Ref: 232501659
! Node: RM 3 5 7 17 Float Types502208
! Ref: gnat_rm/implementation_advice rm-3-5-7-17-float-types502372
! Ref: 233502372
! Node: RM 3 6 2 11 Multidimensional Arrays503481
! Ref: gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays503645
! Ref: 234503645
! Node: RM 9 6 30-31 Duration’Small504145
! Ref: gnat_rm/implementation_advice rm-9-6-30-31-duration-small504324
! Ref: 235504324
! Node: RM 10 2 1 12 Consistent Representation504746
! Ref: gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation504924
! Ref: 236504924
! Node: RM 11 4 1 19 Exception Information505714
! Ref: gnat_rm/implementation_advice rm-11-4-1-19-exception-information505895
! Ref: 237505895
! Node: RM 11 5 28 Suppression of Checks507037
! Ref: gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks507216
! Ref: 238507216
! Node: RM 13 1 21-24 Representation Clauses507416
! Ref: gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses507585
! Ref: 239507585
! Node: RM 13 2 6-8 Packed Types508999
! Ref: gnat_rm/implementation_advice rm-13-2-6-8-packed-types509165
! Ref: 23a509165
! Node: RM 13 3 14-19 Address Clauses510398
! Ref: gnat_rm/implementation_advice rm-13-3-14-19-address-clauses510559
! Ref: 23b510559
! Node: RM 13 3 29-35 Alignment Clauses511694
! Ref: gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses511857
! Ref: 23c511857
! Node: RM 13 3 42-43 Size Clauses513058
! Ref: gnat_rm/implementation_advice rm-13-3-42-43-size-clauses513218
! Ref: 23d513218
! Node: RM 13 3 50-56 Size Clauses513683
! Ref: gnat_rm/implementation_advice rm-13-3-50-56-size-clauses513848
! Ref: 23e513848
! Node: RM 13 3 71-73 Component Size Clauses515222
! Ref: gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses515408
! Ref: 23f515408
! Node: RM 13 4 9-10 Enumeration Representation Clauses516216
! Ref: gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses516421
! Ref: 240516421
! Node: RM 13 5 1 17-22 Record Representation Clauses516843
! Ref: gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses517048
! Ref: 241517048
! Node: RM 13 5 2 5 Storage Place Attributes518751
! Ref: gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes518935
! Ref: 242518935
! Node: RM 13 5 3 7-8 Bit Ordering519547
! Ref: gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering519715
! Ref: 243519715
! Node: RM 13 7 37 Address as Private520159
! Ref: gnat_rm/implementation_advice rm-13-7-37-address-as-private520322
! Ref: 244520322
! Node: RM 13 7 1 16 Address Operations520463
! Ref: gnat_rm/implementation_advice rm-13-7-1-16-address-operations520634
! Ref: 245520634
! Node: RM 13 9 14-17 Unchecked Conversion521173
! Ref: gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion521349
! Ref: 246521349
! Node: RM 13 11 23-25 Implicit Heap Usage522741
! Ref: gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage522922
! Ref: 247522922
! Node: RM 13 11 2 17 Unchecked Deallocation523941
! Ref: gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation524129
! Ref: 248524129
! Node: RM 13 13 2 1 6 Stream Oriented Attributes524323
! Ref: gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes524520
! Ref: 249524520
! Node: RM A 1 52 Names of Predefined Numeric Types525484
! Ref: gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types525680
! Ref: 24a525680
! Node: RM A 3 2 49 Ada Characters Handling526118
! Ref: gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling526316
! Ref: 24b526316
! Node: RM A 4 4 106 Bounded-Length String Handling526708
! Ref: gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling526902
! Ref: 24c526902
! Node: RM A 5 2 46-47 Random Number Generation527181
! Ref: gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation527366
! Ref: 24d527366
! Node: RM A 10 7 23 Get_Immediate528198
! Ref: gnat_rm/implementation_advice rm-a-10-7-23-get-immediate528358
! Ref: 24e528358
! Node: RM A 18 Containers529210
! Ref: gnat_rm/implementation_advice rm-a-18-containers529357
! Ref: 24f529357
! Node: RM B 1 39-41 Pragma Export529988
! Ref: gnat_rm/implementation_advice rm-b-1-39-41-pragma-export530140
! Ref: 250530140
! Node: RM B 2 12-13 Package Interfaces531680
! Ref: gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces531845
! Ref: 251531845
! Node: RM B 3 63-71 Interfacing with C532658
! Ref: gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c532832
! Ref: 252532832
! Node: RM B 4 95-98 Interfacing with COBOL534767
! Ref: gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol534947
! Ref: 253534947
! Node: RM B 5 22-26 Interfacing with Fortran535681
! Ref: gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran535869
! Ref: 254535869
! Node: RM C 1 3-5 Access to Machine Operations536957
! Ref: gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations537151
! Ref: 255537151
! Node: RM C 1 10-16 Access to Machine Operations538127
! Ref: gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations538311
! Ref: 256538311
! Node: RM C 3 28 Interrupt Support539581
! Ref: gnat_rm/implementation_advice rm-c-3-28-interrupt-support539769
! Ref: 257539769
! Node: RM C 3 1 20-21 Protected Procedure Handlers540235
! Ref: gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers540412
! Ref: 258540412
! Node: RM C 3 2 25 Package Interrupts540916
! Ref: gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts541104
! Ref: 259541104
! Node: RM C 4 14 Pre-elaboration Requirements541574
! Ref: gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements541748
! Ref: 25a541748
! Node: RM C 5 8 Pragma Discard_Names542188
! Ref: gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names542371
! Ref: 25b542371
! Node: RM C 7 2 30 The Package Task_Attributes542635
! Ref: gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes542806
! Ref: 25c542806
! Node: RM D 3 17 Locking Policies543542
! Ref: gnat_rm/implementation_advice rm-d-3-17-locking-policies543716
! Ref: 25d543716
! Node: RM D 4 16 Entry Queuing Policies544089
! Ref: gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies544252
! Ref: 25e544252
! Node: RM D 6 9-10 Preemptive Abort544516
! Ref: gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort544683
! Ref: 25f544683
! Node: RM D 7 21 Tasking Restrictions545257
! Ref: gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions545419
! Ref: 260545419
! Node: RM D 8 47-49 Monotonic Time545921
! Ref: gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time546101
! Ref: 261546101
! Node: RM E 5 28-29 Partition Communication Subsystem546776
! Ref: gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem546946
! Ref: 262546946
! Node: RM F 7 COBOL Support547640
! Ref: gnat_rm/implementation_advice rm-f-7-cobol-support547813
! Ref: 263547813
! Node: RM F 1 2 Decimal Radix Support548364
! Ref: gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support548504
! Ref: 264548504
! Node: RM G Numerics548818
! Ref: gnat_rm/implementation_advice rm-g-numerics548966
! Ref: 265548966
! Node: RM G 1 1 56-58 Complex Types549496
! Ref: gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types549654
! Ref: 266549654
! Node: RM G 1 2 49 Complex Elementary Functions552483
! Ref: gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions552661
! Ref: 267552661
! Node: RM G 2 4 19 Accuracy Requirements553394
! Ref: gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements553583
! Ref: 268553583
! Node: RM G 2 6 15 Complex Arithmetic Accuracy554198
! Ref: gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy554394
! Ref: 269554394
! Node: RM H 6 15/2 Pragma Partition_Elaboration_Policy554817
! Ref: gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy554971
! Ref: 26a554971
! Node: Implementation Defined Characteristics555353
! Ref: gnat_rm/implementation_defined_characteristics doc555492
! Ref: 26b555492
! Ref: gnat_rm/implementation_defined_characteristics id1555492
! Ref: 26c555492
! Ref: gnat_rm/implementation_defined_characteristics implementation-defined-characteristics555492
! Ref: b555492
! Node: Intrinsic Subprograms607358
! Ref: gnat_rm/intrinsic_subprograms doc607510
! Ref: 26e607510
! Ref: gnat_rm/intrinsic_subprograms id1607510
! Ref: 26f607510
! Ref: gnat_rm/intrinsic_subprograms intrinsic-subprograms607510
! Ref: c607510
! Node: Intrinsic Operators608490
! Ref: gnat_rm/intrinsic_subprograms id2608597
! Ref: 270608597
! Ref: gnat_rm/intrinsic_subprograms intrinsic-operators608597
! Ref: 271608597
! Node: Compilation_ISO_Date609596
! Ref: gnat_rm/intrinsic_subprograms compilation-iso-date609728
! Ref: 272609728
! Ref: gnat_rm/intrinsic_subprograms id3609728
! Ref: 273609728
! Node: Compilation_Date610149
! Ref: gnat_rm/intrinsic_subprograms compilation-date610278
! Ref: 274610278
! Ref: gnat_rm/intrinsic_subprograms id4610278
! Ref: 275610278
! Node: Compilation_Time610398
! Ref: gnat_rm/intrinsic_subprograms compilation-time610523
! Ref: 276610523
! Ref: gnat_rm/intrinsic_subprograms id5610523
! Ref: 277610523
! Node: Enclosing_Entity610930
! Ref: gnat_rm/intrinsic_subprograms enclosing-entity611060
! Ref: 278611060
! Ref: gnat_rm/intrinsic_subprograms id6611060
! Ref: 279611060
! Node: Exception_Information611481
! Ref: gnat_rm/intrinsic_subprograms exception-information611612
! Ref: 27a611612
! Ref: gnat_rm/intrinsic_subprograms id7611612
! Ref: 27b611612
! Node: Exception_Message612042
! Ref: gnat_rm/intrinsic_subprograms exception-message612171
! Ref: 27c612171
! Ref: gnat_rm/intrinsic_subprograms id8612171
! Ref: 27d612171
! Node: Exception_Name612575
! Ref: gnat_rm/intrinsic_subprograms exception-name612687
! Ref: 27e612687
! Ref: gnat_rm/intrinsic_subprograms id9612687
! Ref: 27f612687
! Node: File613066
! Ref: gnat_rm/intrinsic_subprograms file613165
! Ref: 280613165
! Ref: gnat_rm/intrinsic_subprograms id10613165
! Ref: 281613165
! Node: Line613497
! Ref: gnat_rm/intrinsic_subprograms id11613600
! Ref: 282613600
! Ref: gnat_rm/intrinsic_subprograms line613600
! Ref: 283613600
! Node: Shifts and Rotates613943
! Ref: gnat_rm/intrinsic_subprograms id12614057
! Ref: 284614057
! Ref: gnat_rm/intrinsic_subprograms shifts-and-rotates614057
! Ref: 285614057
! Node: Source_Location615295
! Ref: gnat_rm/intrinsic_subprograms id13615396
! Ref: 286615396
! Ref: gnat_rm/intrinsic_subprograms source-location615396
! Ref: 287615396
! Node: Representation Clauses and Pragmas615767
! Ref: gnat_rm/representation_clauses_and_pragmas doc615906
! Ref: 288615906
! Ref: gnat_rm/representation_clauses_and_pragmas id1615906
! Ref: 289615906
! Ref: gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas615906
! Ref: d615906
! Node: Alignment Clauses617092
! Ref: gnat_rm/representation_clauses_and_pragmas alignment-clauses617202
! Ref: 28a617202
! Ref: gnat_rm/representation_clauses_and_pragmas id2617202
! Ref: 28b617202
! Node: Size Clauses621648
! Ref: gnat_rm/representation_clauses_and_pragmas id3621787
! Ref: 28c621787
! Ref: gnat_rm/representation_clauses_and_pragmas size-clauses621787
! Ref: 28d621787
! Node: Storage_Size Clauses624571
! Ref: gnat_rm/representation_clauses_and_pragmas id4624723
! Ref: 28e624723
! Ref: gnat_rm/representation_clauses_and_pragmas storage-size-clauses624723
! Ref: 28f624723
! Node: Size of Variant Record Objects627255
! Ref: gnat_rm/representation_clauses_and_pragmas id5627416
! Ref: 290627416
! Ref: gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects627416
! Ref: 291627416
! Node: Biased Representation630528
! Ref: gnat_rm/representation_clauses_and_pragmas biased-representation630703
! Ref: 292630703
! Ref: gnat_rm/representation_clauses_and_pragmas id6630703
! Ref: 293630703
! Node: Value_Size and Object_Size Clauses631747
! Ref: gnat_rm/representation_clauses_and_pragmas id7631914
! Ref: 294631914
! Ref: gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses631914
! Ref: 295631914
! Node: Component_Size Clauses641572
! Ref: gnat_rm/representation_clauses_and_pragmas component-size-clauses641735
! Ref: 296641735
! Ref: gnat_rm/representation_clauses_and_pragmas id8641735
! Ref: 297641735
! Node: Bit_Order Clauses643369
! Ref: gnat_rm/representation_clauses_and_pragmas bit-order-clauses643534
! Ref: 298643534
! Ref: gnat_rm/representation_clauses_and_pragmas id9643534
! Ref: 299643534
! Node: Effect of Bit_Order on Byte Ordering646979
! Ref: gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering647144
! Ref: 29a647144
! Ref: gnat_rm/representation_clauses_and_pragmas id10647144
! Ref: 29b647144
! Node: Pragma Pack for Arrays656599
! Ref: gnat_rm/representation_clauses_and_pragmas id11656770
! Ref: 29c656770
! Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays656770
! Ref: 29d656770
! Node: Pragma Pack for Records661275
! Ref: gnat_rm/representation_clauses_and_pragmas id12661439
! Ref: 29e661439
! Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records661439
! Ref: 29f661439
! Node: Record Representation Clauses663999
! Ref: gnat_rm/representation_clauses_and_pragmas id13664171
! Ref: 2a0664171
! Ref: gnat_rm/representation_clauses_and_pragmas record-representation-clauses664171
! Ref: 2a1664171
! Node: Handling of Records with Holes667059
! Ref: gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes667227
! Ref: 2a2667227
! Ref: gnat_rm/representation_clauses_and_pragmas id14667227
! Ref: 2a3667227
! Node: Enumeration Clauses669489
! Ref: gnat_rm/representation_clauses_and_pragmas enumeration-clauses669643
! Ref: 2a4669643
! Ref: gnat_rm/representation_clauses_and_pragmas id15669643
! Ref: 2a5669643
! Node: Address Clauses671079
! Ref: gnat_rm/representation_clauses_and_pragmas address-clauses671247
! Ref: 2a6671247
! Ref: gnat_rm/representation_clauses_and_pragmas id16671247
! Ref: 2a7671247
! Node: Use of Address Clauses for Memory-Mapped I/O682739
! Ref: gnat_rm/representation_clauses_and_pragmas id17682926
! Ref: 2a8682926
! Ref: gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o682926
! Ref: 2a9682926
! Node: Effect of Convention on Representation684794
! Ref: gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation685004
! Ref: 2aa685004
! Ref: gnat_rm/representation_clauses_and_pragmas id18685004
! Ref: 2ab685004
! Node: Conventions and Anonymous Access Types688129
! Ref: gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types688341
! Ref: 2ac688341
! Ref: gnat_rm/representation_clauses_and_pragmas id19688341
! Ref: 2ad688341
! Node: Determining the Representations chosen by GNAT690832
! Ref: gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat690997
! Ref: 2ae690997
! Ref: gnat_rm/representation_clauses_and_pragmas id20690997
! Ref: 2af690997
! Node: Standard Library Routines695596
! Ref: gnat_rm/standard_library_routines doc695748
! Ref: 2b0695748
! Ref: gnat_rm/standard_library_routines id1695748
! Ref: 2b1695748
! Ref: gnat_rm/standard_library_routines standard-library-routines695748
! Ref: e695748
! Node: The Implementation of Standard I/O722857
! Ref: gnat_rm/the_implementation_of_standard_i_o doc722991
! Ref: 2b2722991
! Ref: gnat_rm/the_implementation_of_standard_i_o id1722991
! Ref: 2b3722991
! Ref: gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o722991
! Ref: f722991
! Node: Standard I/O Packages725041
! Ref: gnat_rm/the_implementation_of_standard_i_o id2725155
! Ref: 2b4725155
! Ref: gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages725155
! Ref: 2b5725155
! Node: FORM Strings726494
! Ref: gnat_rm/the_implementation_of_standard_i_o form-strings726626
! Ref: 2b6726626
! Ref: gnat_rm/the_implementation_of_standard_i_o id3726626
! Ref: 2b7726626
! Node: Direct_IO727240
! Ref: gnat_rm/the_implementation_of_standard_i_o direct-io727364
! Ref: 2b8727364
! Ref: gnat_rm/the_implementation_of_standard_i_o id4727364
! Ref: 2b9727364
! Node: Sequential_IO728141
! Ref: gnat_rm/the_implementation_of_standard_i_o id5728260
! Ref: 2ba728260
! Ref: gnat_rm/the_implementation_of_standard_i_o sequential-io728260
! Ref: 2bb728260
! Node: Text_IO730097
! Ref: gnat_rm/the_implementation_of_standard_i_o id6730219
! Ref: 2bc730219
! Ref: gnat_rm/the_implementation_of_standard_i_o text-io730219
! Ref: 2bd730219
! Node: Stream Pointer Positioning732707
! Ref: gnat_rm/the_implementation_of_standard_i_o id7732824
! Ref: 2be732824
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning732824
! Ref: 2bf732824
! Node: Reading and Writing Non-Regular Files734271
! Ref: gnat_rm/the_implementation_of_standard_i_o id8734410
! Ref: 2c0734410
! Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files734410
! Ref: 2c1734410
! Node: Get_Immediate736184
! Ref: gnat_rm/the_implementation_of_standard_i_o get-immediate736330
! Ref: 2c2736330
! Ref: gnat_rm/the_implementation_of_standard_i_o id9736330
! Ref: 2c3736330
! Node: Treating Text_IO Files as Streams737023
! Ref: gnat_rm/the_implementation_of_standard_i_o id10737150
! Ref: 2c4737150
! Ref: gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams737150
! Ref: 2c5737150
! Node: Text_IO Extensions737738
! Ref: gnat_rm/the_implementation_of_standard_i_o id11737892
! Ref: 2c6737892
! Ref: gnat_rm/the_implementation_of_standard_i_o text-io-extensions737892
! Ref: 2c7737892
! Node: Text_IO Facilities for Unbounded Strings738509
! Ref: gnat_rm/the_implementation_of_standard_i_o id12738621
! Ref: 2c8738621
! Ref: gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings738621
! Ref: 2c9738621
! Node: Wide_Text_IO740195
! Ref: gnat_rm/the_implementation_of_standard_i_o id13740321
! Ref: 2ca740321
! Ref: gnat_rm/the_implementation_of_standard_i_o wide-text-io740321
! Ref: 2cb740321
! Node: Stream Pointer Positioning<2>747298
! Ref: gnat_rm/the_implementation_of_standard_i_o id14747426
! Ref: 2cc747426
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1747426
! Ref: 2cd747426
! Node: Reading and Writing Non-Regular Files<2>748344
! Ref: gnat_rm/the_implementation_of_standard_i_o id15748472
! Ref: 2ce748472
! Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1748472
! Ref: 2cf748472
! Node: Wide_Wide_Text_IO748881
! Ref: gnat_rm/the_implementation_of_standard_i_o id16749009
! Ref: 2d0749009
! Ref: gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io749009
! Ref: 2d1749009
! Node: Stream Pointer Positioning<3>752690
! Ref: gnat_rm/the_implementation_of_standard_i_o id17752823
! Ref: 2d2752823
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2752823
! Ref: 2d3752823
! Node: Reading and Writing Non-Regular Files<3>753773
! Ref: gnat_rm/the_implementation_of_standard_i_o id18753906
! Ref: 2d4753906
! Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2753906
! Ref: 2d5753906
! Node: Stream_IO754315
! Ref: gnat_rm/the_implementation_of_standard_i_o id19754447
! Ref: 2d6754447
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-io754447
! Ref: 2d7754447
! Node: Text Translation754964
! Ref: gnat_rm/the_implementation_of_standard_i_o id20755091
! Ref: 2d8755091
! Ref: gnat_rm/the_implementation_of_standard_i_o text-translation755091
! Ref: 2d9755091
! Node: Shared Files755891
! Ref: gnat_rm/the_implementation_of_standard_i_o id21756027
! Ref: 2da756027
! Ref: gnat_rm/the_implementation_of_standard_i_o shared-files756027
! Ref: 2db756027
! Node: Filenames encoding758773
! Ref: gnat_rm/the_implementation_of_standard_i_o filenames-encoding758914
! Ref: 2dc758914
! Ref: gnat_rm/the_implementation_of_standard_i_o id22758914
! Ref: 2dd758914
! Node: File content encoding759724
! Ref: gnat_rm/the_implementation_of_standard_i_o file-content-encoding759863
! Ref: 2de759863
! Ref: gnat_rm/the_implementation_of_standard_i_o id23759863
! Ref: 2df759863
! Node: Open Modes760387
! Ref: gnat_rm/the_implementation_of_standard_i_o id24760531
! Ref: 2e0760531
! Ref: gnat_rm/the_implementation_of_standard_i_o open-modes760531
! Ref: 2e1760531
! Node: Operations on C Streams762525
! Ref: gnat_rm/the_implementation_of_standard_i_o id25762672
! Ref: 2e2762672
! Ref: gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams762672
! Ref: 2e3762672
! Node: Interfacing to C Streams769476
! Ref: gnat_rm/the_implementation_of_standard_i_o id26769604
! Ref: 2e4769604
! Ref: gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams769604
! Ref: 2e5769604
! Node: The GNAT Library772916
! Ref: gnat_rm/the_gnat_library doc773055
! Ref: 2e6773055
! Ref: gnat_rm/the_gnat_library id1773055
! Ref: 2e7773055
! Ref: gnat_rm/the_gnat_library the-gnat-library773055
! Ref: 10773055
! Node: Ada Characters Latin_9 a-chlat9 ads785935
! Ref: gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads786073
! Ref: 2e8786073
! Ref: gnat_rm/the_gnat_library id2786073
! Ref: 2e9786073
! Node: Ada Characters Wide_Latin_1 a-cwila1 ads786483
! Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads786670
! Ref: 2ea786670
! Ref: gnat_rm/the_gnat_library id3786670
! Ref: 2eb786670
! Node: Ada Characters Wide_Latin_9 a-cwila9 ads787122
! Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads787319
! Ref: 2ec787319
! Ref: gnat_rm/the_gnat_library id4787319
! Ref: 2ed787319
! Node: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads787773
! Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads787975
! Ref: 2ee787975
! Ref: gnat_rm/the_gnat_library id5787975
! Ref: 2ef787975
! Node: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads788442
! Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads788647
! Ref: 2f0788647
! Ref: gnat_rm/the_gnat_library id6788647
! Ref: 2f1788647
! Node: Ada Containers Bounded_Holders a-coboho ads789116
! Ref: gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads789317
! Ref: 2f2789317
! Ref: gnat_rm/the_gnat_library id7789317
! Ref: 2f3789317
! Node: Ada Command_Line Environment a-colien ads789550
! Ref: gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads789742
! Ref: 2f4789742
! Ref: gnat_rm/the_gnat_library id8789742
! Ref: 2f5789742
! Node: Ada Command_Line Remove a-colire ads789992
! Ref: gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads790184
! Ref: 2f6790184
! Ref: gnat_rm/the_gnat_library id9790184
! Ref: 2f7790184
! Node: Ada Command_Line Response_File a-clrefi ads790557
! Ref: gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads790744
! Ref: 2f8790744
! Ref: gnat_rm/the_gnat_library id10790744
! Ref: 2f9790744
! Node: Ada Direct_IO C_Streams a-diocst ads791156
! Ref: gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads791353
! Ref: 2fa791353
! Ref: gnat_rm/the_gnat_library id11791353
! Ref: 2fb791353
! Node: Ada Exceptions Is_Null_Occurrence a-einuoc ads791704
! Ref: gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads791905
! Ref: 2fc791905
! Ref: gnat_rm/the_gnat_library id12791905
! Ref: 2fd791905
! Node: Ada Exceptions Last_Chance_Handler a-elchha ads792169
! Ref: gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads792371
! Ref: 2fe792371
! Ref: gnat_rm/the_gnat_library id13792371
! Ref: 2ff792371
! Node: Ada Exceptions Traceback a-exctra ads792701
! Ref: gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads792897
! Ref: 300792897
! Ref: gnat_rm/the_gnat_library id14792897
! Ref: 301792897
! Node: Ada Sequential_IO C_Streams a-siocst ads793142
! Ref: gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads793335
! Ref: 302793335
! Ref: gnat_rm/the_gnat_library id15793335
! Ref: 303793335
! Node: Ada Streams Stream_IO C_Streams a-ssicst ads793698
! Ref: gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads793896
! Ref: 304793896
! Ref: gnat_rm/the_gnat_library id16793896
! Ref: 305793896
! Node: Ada Strings Unbounded Text_IO a-suteio ads794263
! Ref: gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads794473
! Ref: 306794473
! Ref: gnat_rm/the_gnat_library id17794473
! Ref: 307794473
! Node: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads794738
! Ref: gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads794966
! Ref: 308794966
! Ref: gnat_rm/the_gnat_library id18794966
! Ref: 309794966
! Node: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads795261
! Ref: gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads795483
! Ref: 30a795483
! Ref: gnat_rm/the_gnat_library id19795483
! Ref: 30b795483
! Node: Ada Task_Initialization a-tasini ads795808
! Ref: gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads796012
! Ref: 30c796012
! Ref: gnat_rm/the_gnat_library id20796012
! Ref: 30d796012
! Node: Ada Text_IO C_Streams a-tiocst ads796381
! Ref: gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads796568
! Ref: 30e796568
! Ref: gnat_rm/the_gnat_library id21796568
! Ref: 30f796568
! Node: Ada Text_IO Reset_Standard_Files a-tirsfi ads796913
! Ref: gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads797104
! Ref: 310797104
! Ref: gnat_rm/the_gnat_library id22797104
! Ref: 311797104
! Node: Ada Wide_Characters Unicode a-wichun ads797523
! Ref: gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads797719
! Ref: 312797719
! Ref: gnat_rm/the_gnat_library id23797719
! Ref: 313797719
! Node: Ada Wide_Text_IO C_Streams a-wtcstr ads797953
! Ref: gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads798154
! Ref: 314798154
! Ref: gnat_rm/the_gnat_library id24798154
! Ref: 315798154
! Node: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads798514
! Ref: gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads798720
! Ref: 316798720
! Ref: gnat_rm/the_gnat_library id25798720
! Ref: 317798720
! Node: Ada Wide_Wide_Characters Unicode a-zchuni ads799154
! Ref: gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads799365
! Ref: 318799365
! Ref: gnat_rm/the_gnat_library id26799365
! Ref: 319799365
! Node: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads799614
! Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads799830
! Ref: 31a799830
! Ref: gnat_rm/the_gnat_library id27799830
! Ref: 31b799830
! Node: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads800205
! Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads800401
! Ref: 31c800401
! Ref: gnat_rm/the_gnat_library id28800401
! Ref: 31d800401
! Node: GNAT Altivec g-altive ads800850
! Ref: gnat_rm/the_gnat_library gnat-altivec-g-altive-ads801039
! Ref: 31e801039
! Ref: gnat_rm/the_gnat_library id29801039
! Ref: 31f801039
! Node: GNAT Altivec Conversions g-altcon ads801270
! Ref: gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads801447
! Ref: 320801447
! Ref: gnat_rm/the_gnat_library id30801447
! Ref: 321801447
! Node: GNAT Altivec Vector_Operations g-alveop ads801616
! Ref: gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads801806
! Ref: 322801806
! Ref: gnat_rm/the_gnat_library id31801806
! Ref: 323801806
! Node: GNAT Altivec Vector_Types g-alvety ads802166
! Ref: gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads802357
! Ref: 324802357
! Ref: gnat_rm/the_gnat_library id32802357
! Ref: 325802357
! Node: GNAT Altivec Vector_Views g-alvevi ads802562
! Ref: gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads802739
! Ref: 326802739
! Ref: gnat_rm/the_gnat_library id33802739
! Ref: 327802739
! Node: GNAT Array_Split g-arrspl ads803110
! Ref: gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads803267
! Ref: 328803267
! Ref: gnat_rm/the_gnat_library id34803267
! Ref: 329803267
! Node: GNAT AWK g-awk ads803522
! Ref: gnat_rm/the_gnat_library gnat-awk-g-awk-ads803672
! Ref: 32a803672
! Ref: gnat_rm/the_gnat_library id35803672
! Ref: 32b803672
! Node: GNAT Binary_Search g-binsea ads803967
! Ref: gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads804122
! Ref: 32c804122
! Ref: gnat_rm/the_gnat_library id36804122
! Ref: 32d804122
! Node: GNAT Bind_Environment g-binenv ads804342
! Ref: gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads804514
! Ref: 32e804514
! Ref: gnat_rm/the_gnat_library id37804514
! Ref: 32f804514
! Node: GNAT Branch_Prediction g-brapre ads804767
! Ref: gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads804941
! Ref: 330804941
! Ref: gnat_rm/the_gnat_library id38804941
! Ref: 331804941
! Node: GNAT Bounded_Buffers g-boubuf ads805125
! Ref: gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads805300
! Ref: 332805300
! Ref: gnat_rm/the_gnat_library id39805300
! Ref: 333805300
! Node: GNAT Bounded_Mailboxes g-boumai ads805568
! Ref: gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads805737
! Ref: 334805737
! Ref: gnat_rm/the_gnat_library id40805737
! Ref: 335805737
! Node: GNAT Bubble_Sort g-bubsor ads805921
! Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads806088
! Ref: 336806088
! Ref: gnat_rm/the_gnat_library id41806088
! Ref: 337806088
! Node: GNAT Bubble_Sort_A g-busora ads806360
! Ref: gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads806523
! Ref: 338806523
! Ref: gnat_rm/the_gnat_library id42806523
! Ref: 339806523
! Node: GNAT Bubble_Sort_G g-busorg ads806902
! Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads807069
! Ref: 33a807069
! Ref: gnat_rm/the_gnat_library id43807069
! Ref: 33b807069
! Node: GNAT Byte_Order_Mark g-byorma ads807413
! Ref: gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads807580
! Ref: 33c807580
! Ref: gnat_rm/the_gnat_library id44807580
! Ref: 33d807580
! Node: GNAT Byte_Swapping g-bytswa ads807950
! Ref: gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads808112
! Ref: 33e808112
! Ref: gnat_rm/the_gnat_library id45808112
! Ref: 33f808112
! Node: GNAT Calendar g-calend ads808347
! Ref: gnat_rm/the_gnat_library gnat-calendar-g-calend-ads808510
! Ref: 340808510
! Ref: gnat_rm/the_gnat_library id46808510
! Ref: 341808510
! Node: GNAT Calendar Time_IO g-catiio ads808847
! Ref: gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads809001
! Ref: 342809001
! Ref: gnat_rm/the_gnat_library id47809001
! Ref: 343809001
! Node: GNAT CRC32 g-crc32 ads809104
! Ref: gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads809259
! Ref: 344809259
! Ref: gnat_rm/the_gnat_library id48809259
! Ref: 345809259
! Node: GNAT Case_Util g-casuti ads809589
! Ref: gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads809728
! Ref: 346809728
! Ref: gnat_rm/the_gnat_library id49809728
! Ref: 347809728
! Node: GNAT CGI g-cgi ads809971
! Ref: gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads810116
! Ref: 348810116
! Ref: gnat_rm/the_gnat_library id50810116
! Ref: 349810116
! Node: GNAT CGI Cookie g-cgicoo ads810498
! Ref: gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads810643
! Ref: 34a810643
! Ref: gnat_rm/the_gnat_library id51810643
! Ref: 34b810643
! Node: GNAT CGI Debug g-cgideb ads810940
! Ref: gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads811097
! Ref: 34c811097
! Ref: gnat_rm/the_gnat_library id52811097
! Ref: 34d811097
! Node: GNAT Command_Line g-comlin ads811279
! Ref: gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads811442
! Ref: 34e811442
! Ref: gnat_rm/the_gnat_library id53811442
! Ref: 34f811442
! Node: GNAT Compiler_Version g-comver ads811730
! Ref: gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads811890
! Ref: 350811890
! Ref: gnat_rm/the_gnat_library id54811890
! Ref: 351811890
! Node: GNAT Ctrl_C g-ctrl_c ads812294
! Ref: gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads812459
! Ref: 352812459
! Ref: gnat_rm/the_gnat_library id55812459
! Ref: 353812459
! Node: GNAT Current_Exception g-curexc ads812605
! Ref: gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads812765
! Ref: 354812765
! Ref: gnat_rm/the_gnat_library id56812765
! Ref: 355812765
! Node: GNAT Debug_Pools g-debpoo ads813181
! Ref: gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads813350
! Ref: 356813350
! Ref: gnat_rm/the_gnat_library id57813350
! Ref: 357813350
! Node: GNAT Debug_Utilities g-debuti ads813609
! Ref: gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads813774
! Ref: 358813774
! Ref: gnat_rm/the_gnat_library id58813774
! Ref: 359813774
! Node: GNAT Decode_String g-decstr ads814057
! Ref: gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads814229
! Ref: 35a814229
! Ref: gnat_rm/the_gnat_library id59814229
! Ref: 35b814229
! Node: GNAT Decode_UTF8_String g-deutst ads814737
! Ref: gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads814914
! Ref: 35c814914
! Ref: gnat_rm/the_gnat_library id60814914
! Ref: 35d814914
! Node: GNAT Directory_Operations g-dirope ads815084
! Ref: gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads815278
! Ref: 35e815278
! Ref: gnat_rm/the_gnat_library id61815278
! Ref: 35f815278
! Node: GNAT Directory_Operations Iteration g-diopit ads815552
! Ref: gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads815743
! Ref: 360815743
! Ref: gnat_rm/the_gnat_library id62815743
! Ref: 361815743
! Node: GNAT Dynamic_HTables g-dynhta ads815984
! Ref: gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads816169
! Ref: 362816169
! Ref: gnat_rm/the_gnat_library id63816169
! Ref: 363816169
! Node: GNAT Dynamic_Tables g-dyntab ads816750
! Ref: gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads816918
! Ref: 364816918
! Ref: gnat_rm/the_gnat_library id64816918
! Ref: 365816918
! Node: GNAT Encode_String g-encstr ads817401
! Ref: gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads817572
! Ref: 366817572
! Ref: gnat_rm/the_gnat_library id65817572
! Ref: 367817572
! Node: GNAT Encode_UTF8_String g-enutst ads817951
! Ref: gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads818125
! Ref: 368818125
! Ref: gnat_rm/the_gnat_library id66818125
! Ref: 369818125
! Node: GNAT Exception_Actions g-excact ads818295
! Ref: gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads818472
! Ref: 36a818472
! Ref: gnat_rm/the_gnat_library id67818472
! Ref: 36b818472
! Node: GNAT Exception_Traces g-exctra ads818783
! Ref: gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads818952
! Ref: 36c818952
! Ref: gnat_rm/the_gnat_library id68818952
! Ref: 36d818952
! Node: GNAT Exceptions g-except ads819143
! Ref: gnat_rm/the_gnat_library gnat-exceptions-g-except-ads819301
! Ref: 36e819301
! Ref: gnat_rm/the_gnat_library id69819301
! Ref: 36f819301
! Node: GNAT Expect g-expect ads819795
! Ref: gnat_rm/the_gnat_library gnat-expect-g-expect-ads819947
! Ref: 370819947
! Ref: gnat_rm/the_gnat_library id70819947
! Ref: 371819947
! Node: GNAT Expect TTY g-exptty ads820478
! Ref: gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads820633
! Ref: 372820633
! Ref: gnat_rm/the_gnat_library id71820633
! Ref: 373820633
! Node: GNAT Float_Control g-flocon ads820941
! Ref: gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads821106
! Ref: 374821106
! Ref: gnat_rm/the_gnat_library id72821106
! Ref: 375821106
! Node: GNAT Formatted_String g-forstr ads821485
! Ref: gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads821667
! Ref: 376821667
! Ref: gnat_rm/the_gnat_library id73821667
! Ref: 377821667
! Node: GNAT Generic_Fast_Math_Functions g-gfmafu ads822058
! Ref: gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads822236
! Ref: 378822236
! Ref: gnat_rm/the_gnat_library id74822236
! Ref: 379822236
! Node: GNAT Heap_Sort g-heasor ads822909
! Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads823082
! Ref: 37a823082
! Ref: gnat_rm/the_gnat_library id75823082
! Ref: 37b823082
! Node: GNAT Heap_Sort_A g-hesora ads823460
! Ref: gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads823617
! Ref: 37c823617
! Ref: gnat_rm/the_gnat_library id76823617
! Ref: 37d823617
! Node: GNAT Heap_Sort_G g-hesorg ads824110
! Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads824264
! Ref: 37e824264
! Ref: gnat_rm/the_gnat_library id77824264
! Ref: 37f824264
! Node: GNAT HTable g-htable ads824602
! Ref: gnat_rm/the_gnat_library gnat-htable-g-htable-ads824743
! Ref: 380824743
! Ref: gnat_rm/the_gnat_library id78824743
! Ref: 381824743
! Node: GNAT IO g-io ads825018
! Ref: gnat_rm/the_gnat_library gnat-io-g-io-ads825154
! Ref: 382825154
! Ref: gnat_rm/the_gnat_library id79825154
! Ref: 383825154
! Node: GNAT IO_Aux g-io_aux ads825463
! Ref: gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads825603
! Ref: 384825603
! Ref: gnat_rm/the_gnat_library id80825603
! Ref: 385825603
! Node: GNAT Lock_Files g-locfil ads825829
! Ref: gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads825991
! Ref: 386825991
! Ref: gnat_rm/the_gnat_library id81825991
! Ref: 387825991
! Node: GNAT MBBS_Discrete_Random g-mbdira ads826196
! Ref: gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads826369
! Ref: 388826369
! Ref: gnat_rm/the_gnat_library id82826369
! Ref: 389826369
! Node: GNAT MBBS_Float_Random g-mbflra ads826606
! Ref: gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads826769
! Ref: 38a826769
! Ref: gnat_rm/the_gnat_library id83826769
! Ref: 38b826769
! Node: GNAT MD5 g-md5 ads826997
! Ref: gnat_rm/the_gnat_library gnat-md5-g-md5-ads827151
! Ref: 38c827151
! Ref: gnat_rm/the_gnat_library id84827151
! Ref: 38d827151
! Node: GNAT Memory_Dump g-memdum ads827385
! Ref: gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads827543
! Ref: 38e827543
! Ref: gnat_rm/the_gnat_library id85827543
! Ref: 38f827543
! Node: GNAT Most_Recent_Exception g-moreex ads827778
! Ref: gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads827942
! Ref: 390827942
! Ref: gnat_rm/the_gnat_library id86827942
! Ref: 391827942
! Node: GNAT OS_Lib g-os_lib ads828242
! Ref: gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads828418
! Ref: 392828418
! Ref: gnat_rm/the_gnat_library id87828418
! Ref: 393828418
! Node: GNAT Perfect_Hash_Generators g-pehage ads828749
! Ref: gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads828918
! Ref: 394828918
! Ref: gnat_rm/the_gnat_library id88828918
! Ref: 395828918
! Node: GNAT Random_Numbers g-rannum ads829570
! Ref: gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads829739
! Ref: 396829739
! Ref: gnat_rm/the_gnat_library id89829739
! Ref: 397829739
! Node: GNAT Regexp g-regexp ads829964
! Ref: gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads830118
! Ref: 26d830118
! Ref: gnat_rm/the_gnat_library id90830118
! Ref: 398830118
! Node: GNAT Registry g-regist ads830474
! Ref: gnat_rm/the_gnat_library gnat-registry-g-regist-ads830620
! Ref: 399830620
! Ref: gnat_rm/the_gnat_library id91830620
! Ref: 39a830620
! Node: GNAT Regpat g-regpat ads830974
! Ref: gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads831126
! Ref: 39b831126
! Ref: gnat_rm/the_gnat_library id92831126
! Ref: 39c831126
! Node: GNAT Rewrite_Data g-rewdat ads831415
! Ref: gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads831579
! Ref: 39d831579
! Ref: gnat_rm/the_gnat_library id93831579
! Ref: 39e831579
! Node: GNAT Secondary_Stack_Info g-sestin ads831943
! Ref: gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads832111
! Ref: 39f832111
! Ref: gnat_rm/the_gnat_library id94832111
! Ref: 3a0832111
! Node: GNAT Semaphores g-semaph ads832317
! Ref: gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads832494
! Ref: 3a1832494
! Ref: gnat_rm/the_gnat_library id95832494
! Ref: 3a2832494
! Node: GNAT Serial_Communications g-sercom ads832657
! Ref: gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads832816
! Ref: 3a3832816
! Ref: gnat_rm/the_gnat_library id96832816
! Ref: 3a4832816
! Node: GNAT SHA1 g-sha1 ads833052
! Ref: gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads833207
! Ref: 3a5833207
! Ref: gnat_rm/the_gnat_library id97833207
! Ref: 3a6833207
! Node: GNAT SHA224 g-sha224 ads833464
! Ref: gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads833604
! Ref: 3a7833604
! Ref: gnat_rm/the_gnat_library id98833604
! Ref: 3a8833604
! Node: GNAT SHA256 g-sha256 ads833860
! Ref: gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads834004
! Ref: 3a9834004
! Ref: gnat_rm/the_gnat_library id99834004
! Ref: 3aa834004
! Node: GNAT SHA384 g-sha384 ads834260
! Ref: gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads834404
! Ref: 3ab834404
! Ref: gnat_rm/the_gnat_library id100834404
! Ref: 3ac834404
! Node: GNAT SHA512 g-sha512 ads834660
! Ref: gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads834805
! Ref: 3ad834805
! Ref: gnat_rm/the_gnat_library id101834805
! Ref: 3ae834805
! Node: GNAT Signals g-signal ads835063
! Ref: gnat_rm/the_gnat_library gnat-signals-g-signal-ads835209
! Ref: 3af835209
! Ref: gnat_rm/the_gnat_library id102835209
! Ref: 3b0835209
! Node: GNAT Sockets g-socket ads835384
! Ref: gnat_rm/the_gnat_library gnat-sockets-g-socket-ads835535
! Ref: 3b1835535
! Ref: gnat_rm/the_gnat_library id103835535
! Ref: 3b2835535
! Node: GNAT Source_Info g-souinf ads835931
! Ref: gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads836091
! Ref: 3b3836091
! Ref: gnat_rm/the_gnat_library id104836091
! Ref: 3b4836091
! Node: GNAT Spelling_Checker g-speche ads836457
! Ref: gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads836634
! Ref: 3b5836634
! Ref: gnat_rm/the_gnat_library id105836634
! Ref: 3b6836634
! Node: GNAT Spelling_Checker_Generic g-spchge ads836846
! Ref: gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads837028
! Ref: 3b7837028
! Ref: gnat_rm/the_gnat_library id106837028
! Ref: 3b8837028
! Node: GNAT Spitbol Patterns g-spipat ads837308
! Ref: gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads837481
! Ref: 3b9837481
! Ref: gnat_rm/the_gnat_library id107837481
! Ref: 3ba837481
! Node: GNAT Spitbol g-spitbo ads837888
! Ref: gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads838058
! Ref: 3bb838058
! Ref: gnat_rm/the_gnat_library id108838058
! Ref: 3bc838058
! Node: GNAT Spitbol Table_Boolean g-sptabo ads838468
! Ref: gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads838643
! Ref: 3bd838643
! Ref: gnat_rm/the_gnat_library id109838643
! Ref: 3be838643
! Node: GNAT Spitbol Table_Integer g-sptain ads838913
! Ref: gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads839102
! Ref: 3bf839102
! Ref: gnat_rm/the_gnat_library id110839102
! Ref: 3c0839102
! Node: GNAT Spitbol Table_VString g-sptavs ads839385
! Ref: gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads839553
! Ref: 3c1839553
! Ref: gnat_rm/the_gnat_library id111839553
! Ref: 3c2839553
! Node: GNAT SSE g-sse ads839840
! Ref: gnat_rm/the_gnat_library gnat-sse-g-sse-ads840003
! Ref: 3c3840003
! Ref: gnat_rm/the_gnat_library id112840003
! Ref: 3c4840003
! Node: GNAT SSE Vector_Types g-ssvety ads840330
! Ref: gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads840483
! Ref: 3c5840483
! Ref: gnat_rm/the_gnat_library id113840483
! Ref: 3c6840483
! Node: GNAT String_Hash g-strhas ads840643
! Ref: gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads840803
! Ref: 3c7840803
! Ref: gnat_rm/the_gnat_library id114840803
! Ref: 3c8840803
! Node: GNAT Strings g-string ads841025
! Ref: gnat_rm/the_gnat_library gnat-strings-g-string-ads841181
! Ref: 3c9841181
! Ref: gnat_rm/the_gnat_library id115841181
! Ref: 3ca841181
! Node: GNAT String_Split g-strspl ads841396
! Ref: gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads841545
! Ref: 3cb841545
! Ref: gnat_rm/the_gnat_library id116841545
! Ref: 3cc841545
! Node: GNAT Table g-table ads841864
! Ref: gnat_rm/the_gnat_library gnat-table-g-table-ads842015
! Ref: 3cd842015
! Ref: gnat_rm/the_gnat_library id117842015
! Ref: 3ce842015
! Node: GNAT Task_Lock g-tasloc ads842498
! Ref: gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads842647
! Ref: 3cf842647
! Ref: gnat_rm/the_gnat_library id118842647
! Ref: 3d0842647
! Node: GNAT Time_Stamp g-timsta ads842929
! Ref: gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads843081
! Ref: 3d1843081
! Ref: gnat_rm/the_gnat_library id119843081
! Ref: 3d2843081
! Node: GNAT Threads g-thread ads843407
! Ref: gnat_rm/the_gnat_library gnat-threads-g-thread-ads843559
! Ref: 3d3843559
! Ref: gnat_rm/the_gnat_library id120843559
! Ref: 3d4843559
! Node: GNAT Traceback g-traceb ads843915
! Ref: gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads844075
! Ref: 3d5844075
! Ref: gnat_rm/the_gnat_library id121844075
! Ref: 3d6844075
! Node: GNAT Traceback Symbolic g-trasym ads844277
! Ref: gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads844436
! Ref: 3d7844436
! Ref: gnat_rm/the_gnat_library id122844436
! Ref: 3d8844436
! Node: GNAT UTF_32 g-utf_32 ads844545
! Ref: gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads844718
! Ref: 3d9844718
! Ref: gnat_rm/the_gnat_library id123844718
! Ref: 3da844718
! Node: GNAT UTF_32_Spelling_Checker g-u3spch ads845282
! Ref: gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads845458
! Ref: 3db845458
! Ref: gnat_rm/the_gnat_library id124845458
! Ref: 3dc845458
! Node: GNAT Wide_Spelling_Checker g-wispch ads845794
! Ref: gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads845981
! Ref: 3dd845981
! Ref: gnat_rm/the_gnat_library id125845981
! Ref: 3de845981
! Node: GNAT Wide_String_Split g-wistsp ads846213
! Ref: gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads846403
! Ref: 3df846403
! Ref: gnat_rm/the_gnat_library id126846403
! Ref: 3e0846403
! Node: GNAT Wide_Wide_Spelling_Checker g-zspche ads846742
! Ref: gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads846933
! Ref: 3e1846933
! Ref: gnat_rm/the_gnat_library id127846933
! Ref: 3e2846933
! Node: GNAT Wide_Wide_String_Split g-zistsp ads847185
! Ref: gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads847377
! Ref: 3e3847377
! Ref: gnat_rm/the_gnat_library id128847377
! Ref: 3e4847377
! Node: Interfaces C Extensions i-cexten ads847736
! Ref: gnat_rm/the_gnat_library id129847917
! Ref: 3e5847917
! Ref: gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads847917
! Ref: 3e6847917
! Node: Interfaces C Streams i-cstrea ads848173
! Ref: gnat_rm/the_gnat_library id130848352
! Ref: 3e7848352
! Ref: gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads848352
! Ref: 3e8848352
! Node: Interfaces Packed_Decimal i-pacdec ads848534
! Ref: gnat_rm/the_gnat_library id131848708
! Ref: 3e9848708
! Ref: gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads848708
! Ref: 3ea848708
! Node: Interfaces VxWorks i-vxwork ads848959
! Ref: gnat_rm/the_gnat_library id132849146
! Ref: 3eb849146
! Ref: gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads849146
! Ref: 3ec849146
! Node: Interfaces VxWorks Int_Connection i-vxinco ads849383
! Ref: gnat_rm/the_gnat_library id133849566
! Ref: 3ed849566
! Ref: gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads849566
! Ref: 3ee849566
! Node: Interfaces VxWorks IO i-vxwoio ads849826
! Ref: gnat_rm/the_gnat_library id134850011
! Ref: 3ef850011
! Ref: gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads850011
! Ref: 3f0850011
! Node: System Address_Image s-addima ads850335
! Ref: gnat_rm/the_gnat_library id135850504
! Ref: 3f1850504
! Ref: gnat_rm/the_gnat_library system-address-image-s-addima-ads850504
! Ref: 3f2850504
! Node: System Assertions s-assert ads850736
! Ref: gnat_rm/the_gnat_library id136850906
! Ref: 3f3850906
! Ref: gnat_rm/the_gnat_library system-assertions-s-assert-ads850906
! Ref: 3f4850906
! Node: System Atomic_Counters s-atocou ads851172
! Ref: gnat_rm/the_gnat_library id137851335
! Ref: 3f5851335
! Ref: gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads851335
! Ref: 3f6851335
! Node: System Memory s-memory ads851781
! Ref: gnat_rm/the_gnat_library id138851949
! Ref: 3f7851949
! Ref: gnat_rm/the_gnat_library system-memory-s-memory-ads851949
! Ref: 3f8851949
! Node: System Multiprocessors s-multip ads852557
! Ref: gnat_rm/the_gnat_library id139852745
! Ref: 3f9852745
! Ref: gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads852745
! Ref: 3fa852745
! Node: System Multiprocessors Dispatching_Domains s-mudido ads853043
! Ref: gnat_rm/the_gnat_library id140853244
! Ref: 3fb853244
! Ref: gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads853244
! Ref: 3fc853244
! Node: System Partition_Interface s-parint ads853582
! Ref: gnat_rm/the_gnat_library id141853779
! Ref: 3fd853779
! Ref: gnat_rm/the_gnat_library system-partition-interface-s-parint-ads853779
! Ref: 3fe853779
! Node: System Pool_Global s-pooglo ads854040
! Ref: gnat_rm/the_gnat_library id142854212
! Ref: 3ff854212
! Ref: gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads854212
! Ref: 400854212
! Node: System Pool_Local s-pooloc ads854554
! Ref: gnat_rm/the_gnat_library id143854719
! Ref: 401854719
! Ref: gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads854719
! Ref: 402854719
! Node: System Restrictions s-restri ads855094
! Ref: gnat_rm/the_gnat_library id144855254
! Ref: 403855254
! Ref: gnat_rm/the_gnat_library system-restrictions-s-restri-ads855254
! Ref: 404855254
! Node: System Rident s-rident ads855692
! Ref: gnat_rm/the_gnat_library id145855860
! Ref: 405855860
! Ref: gnat_rm/the_gnat_library system-rident-s-rident-ads855860
! Ref: 406855860
! Node: System Strings Stream_Ops s-ststop ads856259
! Ref: gnat_rm/the_gnat_library id146856429
! Ref: 407856429
! Ref: gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads856429
! Ref: 408856429
! Node: System Unsigned_Types s-unstyp ads856824
! Ref: gnat_rm/the_gnat_library id147856995
! Ref: 409856995
! Ref: gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads856995
! Ref: 40a856995
! Node: System Wch_Cnv s-wchcnv ads857431
! Ref: gnat_rm/the_gnat_library id148857591
! Ref: 40b857591
! Ref: gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads857591
! Ref: 40c857591
! Node: System Wch_Con s-wchcon ads857934
! Ref: gnat_rm/the_gnat_library id149858051
! Ref: 40d858051
! Ref: gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads858051
! Ref: 40e858051
! Node: Interfacing to Other Languages858337
! Ref: gnat_rm/interfacing_to_other_languages doc858467
! Ref: 40f858467
! Ref: gnat_rm/interfacing_to_other_languages id1858467
! Ref: 410858467
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-other-languages858467
! Ref: 11858467
! Node: Interfacing to C858819
! Ref: gnat_rm/interfacing_to_other_languages id2858930
! Ref: 411858930
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-c858930
! Ref: 412858930
! Node: Interfacing to C++861733
! Ref: gnat_rm/interfacing_to_other_languages id3861873
! Ref: 49861873
! Ref: gnat_rm/interfacing_to_other_languages id4861873
! Ref: 413861873
! Node: Interfacing to COBOL864081
! Ref: gnat_rm/interfacing_to_other_languages id5864227
! Ref: 414864227
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-cobol864227
! Ref: 415864227
! Node: Interfacing to Fortran864371
! Ref: gnat_rm/interfacing_to_other_languages id6864531
! Ref: 416864531
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-fortran864531
! Ref: 417864531
! Node: Interfacing to non-GNAT Ada code864857
! Ref: gnat_rm/interfacing_to_other_languages id7864988
! Ref: 418864988
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code864988
! Ref: 419864988
! Node: Specialized Needs Annexes866015
! Ref: gnat_rm/specialized_needs_annexes doc866168
! Ref: 41a866168
! Ref: gnat_rm/specialized_needs_annexes id1866168
! Ref: 41b866168
! Ref: gnat_rm/specialized_needs_annexes specialized-needs-annexes866168
! Ref: 12866168
! Node: Implementation of Specific Ada Features867263
! Ref: gnat_rm/implementation_of_specific_ada_features doc867421
! Ref: 41c867421
! Ref: gnat_rm/implementation_of_specific_ada_features id1867421
! Ref: 41d867421
! Ref: gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features867421
! Ref: 13867421
! Node: Machine Code Insertions867910
! Ref: gnat_rm/implementation_of_specific_ada_features id2868049
! Ref: 41e868049
! Ref: gnat_rm/implementation_of_specific_ada_features machine-code-insertions868049
! Ref: 175868049
! Node: GNAT Implementation of Tasking875475
! Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking875669
! Ref: 41f875669
! Ref: gnat_rm/implementation_of_specific_ada_features id3875669
! Ref: 420875669
! Node: Mapping Ada Tasks onto the Underlying Kernel Threads876083
! Ref: gnat_rm/implementation_of_specific_ada_features id4876256
! Ref: 421876256
! Ref: gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads876256
! Ref: 422876256
! Node: Ensuring Compliance with the Real-Time Annex878412
! Ref: gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex878622
! Ref: 423878622
! Ref: gnat_rm/implementation_of_specific_ada_features id5878622
! Ref: 424878622
! Node: Support for Locking Policies880538
! Ref: gnat_rm/implementation_of_specific_ada_features support-for-locking-policies880687
! Ref: 425880687
! Node: GNAT Implementation of Shared Passive Packages881846
! Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages882053
! Ref: 426882053
! Ref: gnat_rm/implementation_of_specific_ada_features id6882053
! Ref: 427882053
! Node: Code Generation for Array Aggregates885179
! Ref: gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates885416
! Ref: 428885416
! Ref: gnat_rm/implementation_of_specific_ada_features id7885416
! Ref: 429885416
! Node: Static constant aggregates with static bounds886839
! Ref: gnat_rm/implementation_of_specific_ada_features id8887019
! Ref: 42a887019
! Ref: gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds887019
! Ref: 42b887019
! Node: Constant aggregates with unconstrained nominal types888422
! Ref: gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types888640
! Ref: 42c888640
! Ref: gnat_rm/implementation_of_specific_ada_features id9888640
! Ref: 42d888640
! Node: Aggregates with static bounds889140
! Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds889345
! Ref: 42e889345
! Ref: gnat_rm/implementation_of_specific_ada_features id10889345
! Ref: 42f889345
! Node: Aggregates with nonstatic bounds889979
! Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds890167
! Ref: 430890167
! Ref: gnat_rm/implementation_of_specific_ada_features id11890167
! Ref: 431890167
! Node: Aggregates in assignment statements890575
! Ref: gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements890725
! Ref: 432890725
! Ref: gnat_rm/implementation_of_specific_ada_features id12890725
! Ref: 433890725
! Node: The Size of Discriminated Records with Default Discriminants891983
! Ref: gnat_rm/implementation_of_specific_ada_features id13892206
! Ref: 434892206
! Ref: gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants892206
! Ref: 435892206
! Node: Image Values For Nonscalar Types895158
! Ref: gnat_rm/implementation_of_specific_ada_features id14895391
! Ref: 436895391
! Ref: gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types895391
! Ref: 437895391
! Node: Strict Conformance to the Ada Reference Manual896454
! Ref: gnat_rm/implementation_of_specific_ada_features id15896618
! Ref: 438896618
! Ref: gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual896618
! Ref: 439896618
! Node: Implementation of Ada 2012 Features898061
! Ref: gnat_rm/implementation_of_ada_2012_features doc898218
! Ref: 43a898218
! Ref: gnat_rm/implementation_of_ada_2012_features id1898218
! Ref: 43b898218
! Ref: gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features898218
! Ref: 14898218
! Node: GNAT language extensions947162
! Ref: gnat_rm/gnat_language_extensions doc947307
! Ref: 43c947307
! Ref: gnat_rm/gnat_language_extensions gnat-language-extensions947307
! Ref: 43d947307
! Ref: gnat_rm/gnat_language_extensions id1947307
! Ref: 43e947307
! Node: How to activate the extended GNAT Ada superset948058
! Ref: gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset948193
! Ref: 43f948193
! Node: Curated Extensions949114
! Ref: gnat_rm/gnat_language_extensions curated-extensions949290
! Ref: 440949290
! Ref: gnat_rm/gnat_language_extensions curated-language-extensions949290
! Ref: 69949290
! Node: Local Declarations Without Block949741
! Ref: gnat_rm/gnat_language_extensions local-declarations-without-block949865
! Ref: 441949865
! Node: Conditional when constructs950367
! Ref: gnat_rm/gnat_language_extensions conditional-when-constructs950521
! Ref: 442950521
! Node: Case pattern matching951947
! Ref: gnat_rm/gnat_language_extensions case-pattern-matching952116
! Ref: 443952116
! Node: Fixed lower bounds for array types and subtypes957252
! Ref: gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes957469
! Ref: 444957469
! Node: Prefixed-view notation for calls to primitive subprograms of untagged types959428
! Ref: gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types959672
! Ref: 445959672
! Node: Expression defaults for generic formal functions961716
! Ref: gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions961933
! Ref: 446961933
! Node: String interpolation962777
! Ref: gnat_rm/gnat_language_extensions string-interpolation962960
! Ref: 447962960
! Node: Constrained attribute for generic objects965918
! Ref: gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects966089
! Ref: 448966089
! Node: Static aspect on intrinsic functions966334
! Ref: gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions966476
! Ref: 449966476
! Node: Experimental Language Extensions966793
! Ref: gnat_rm/gnat_language_extensions experimental-language-extensions966914
! Ref: 6a966914
! Ref: gnat_rm/gnat_language_extensions id2966914
! Ref: 44a966914
! Node: Pragma Storage_Model967058
! Ref: gnat_rm/gnat_language_extensions pragma-storage-model967184
! Ref: 44b967184
! Node: Simpler accessibility model967657
! Ref: gnat_rm/gnat_language_extensions simpler-accessibility-model967783
! Ref: 44c967783
! Node: Security Hardening Features968269
! Ref: gnat_rm/security_hardening_features doc968399
! Ref: 44d968399
! Ref: gnat_rm/security_hardening_features id1968399
! Ref: 44e968399
! Ref: gnat_rm/security_hardening_features security-hardening-features968399
! Ref: 15968399
! Node: Register Scrubbing968765
! Ref: gnat_rm/security_hardening_features register-scrubbing968872
! Ref: 44f968872
! Node: Stack Scrubbing970066
! Ref: gnat_rm/security_hardening_features stack-scrubbing970203
! Ref: 450970203
! Node: Hardened Conditionals975184
! Ref: gnat_rm/security_hardening_features hardened-conditionals975320
! Ref: 451975320
! Node: Hardened Booleans977922
! Ref: gnat_rm/security_hardening_features hardened-booleans978066
! Ref: 452978066
! Node: Control Flow Redundancy979944
! Ref: gnat_rm/security_hardening_features control-flow-redundancy980058
! Ref: 453980058
! Node: Obsolescent Features986190
! Ref: gnat_rm/obsolescent_features doc986327
! Ref: 454986327
! Ref: gnat_rm/obsolescent_features id1986327
! Ref: 455986327
! Ref: gnat_rm/obsolescent_features obsolescent-features986327
! Ref: 16986327
! Node: pragma No_Run_Time986791
! Ref: gnat_rm/obsolescent_features id2986892
! Ref: 456986892
! Ref: gnat_rm/obsolescent_features pragma-no-run-time986892
! Ref: 457986892
! Node: pragma Ravenscar987424
! Ref: gnat_rm/obsolescent_features id3987560
! Ref: 458987560
! Ref: gnat_rm/obsolescent_features pragma-ravenscar987560
! Ref: 459987560
! Node: pragma Restricted_Run_Time987776
! Ref: gnat_rm/obsolescent_features id4987910
! Ref: 45a987910
! Ref: gnat_rm/obsolescent_features pragma-restricted-run-time987910
! Ref: 45b987910
! Node: pragma Task_Info988214
! Ref: gnat_rm/obsolescent_features id5988369
! Ref: 45c988369
! Ref: gnat_rm/obsolescent_features pragma-task-info988369
! Ref: 45d988369
! Node: package System Task_Info s-tasinf ads989234
! Ref: gnat_rm/obsolescent_features package-system-task-info989354
! Ref: 45e989354
! Ref: gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads989354
! Ref: 45f989354
! Node: Compatibility and Porting Guide989720
! Ref: gnat_rm/compatibility_and_porting_guide doc989860
! Ref: 460989860
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide989860
! Ref: 17989860
! Ref: gnat_rm/compatibility_and_porting_guide id1989860
! Ref: 461989860
! Node: Writing Portable Fixed-Point Declarations990499
! Ref: gnat_rm/compatibility_and_porting_guide id2990643
! Ref: 462990643
! Ref: gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations990643
! Ref: 463990643
! Node: Compatibility with Ada 83994541
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83994735
! Ref: 464994735
! Ref: gnat_rm/compatibility_and_porting_guide id3994735
! Ref: 465994735
! Node: Legal Ada 83 programs that are illegal in Ada 95995609
! Ref: gnat_rm/compatibility_and_porting_guide id4995757
! Ref: 466995757
! Ref: gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95995757
! Ref: 467995757
! Node: More deterministic semantics1000339
! Ref: gnat_rm/compatibility_and_porting_guide id51000513
! Ref: 4681000513
! Ref: gnat_rm/compatibility_and_porting_guide more-deterministic-semantics1000513
! Ref: 4691000513
! Node: Changed semantics1001449
! Ref: gnat_rm/compatibility_and_porting_guide changed-semantics1001610
! Ref: 46a1001610
! Ref: gnat_rm/compatibility_and_porting_guide id61001610
! Ref: 46b1001610
! Node: Other language compatibility issues1003197
! Ref: gnat_rm/compatibility_and_porting_guide id71003321
! Ref: 46c1003321
! Ref: gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues1003321
! Ref: 46d1003321
! Node: Compatibility between Ada 95 and Ada 20051004618
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-20051004811
! Ref: 46e1004811
! Ref: gnat_rm/compatibility_and_porting_guide id81004811
! Ref: 46f1004811
! Node: Implementation-dependent characteristics1007268
! Ref: gnat_rm/compatibility_and_porting_guide id91007472
! Ref: 4701007472
! Ref: gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics1007472
! Ref: 4711007472
! Node: Implementation-defined pragmas1008259
! Ref: gnat_rm/compatibility_and_porting_guide id101008409
! Ref: 4721008409
! Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas1008409
! Ref: 4731008409
! Node: Implementation-defined attributes1009393
! Ref: gnat_rm/compatibility_and_porting_guide id111009561
! Ref: 4741009561
! Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-attributes1009561
! Ref: 4751009561
! Node: Libraries1010113
! Ref: gnat_rm/compatibility_and_porting_guide id121010268
! Ref: 4761010268
! Ref: gnat_rm/compatibility_and_porting_guide libraries1010268
! Ref: 4771010268
! Node: Elaboration order1011172
! Ref: gnat_rm/compatibility_and_porting_guide elaboration-order1011317
! Ref: 4781011317
! Ref: gnat_rm/compatibility_and_porting_guide id131011317
! Ref: 4791011317
! Node: Target-specific aspects1012777
! Ref: gnat_rm/compatibility_and_porting_guide id141012904
! Ref: 47a1012904
! Ref: gnat_rm/compatibility_and_porting_guide target-specific-aspects1012904
! Ref: 47b1012904
! Node: Compatibility with Other Ada Systems1013667
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems1013852
! Ref: 47d1013852
! Ref: gnat_rm/compatibility_and_porting_guide id151013852
! Ref: 47e1013852
! Node: Representation Clauses1015408
! Ref: gnat_rm/compatibility_and_porting_guide id161015581
! Ref: 47f1015581
! Ref: gnat_rm/compatibility_and_porting_guide representation-clauses1015581
! Ref: 47c1015581
! Node: Compatibility with HP Ada 831020232
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-831020360
! Ref: 4801020360
! Ref: gnat_rm/compatibility_and_porting_guide id171020360
! Ref: 4811020360
! Node: GNU Free Documentation License1021246
! Ref: share/gnu_free_documentation_license doc1021371
! Ref: 4821021371
! Ref: share/gnu_free_documentation_license gnu-fdl1021371
! Ref: 11021371
! Ref: share/gnu_free_documentation_license gnu-free-documentation-license1021371
! Ref: 4831021371
! Node: Index1044829
  
  End Tag Table
  
--- 27481,30596 ----
  Node: Top326
  Ref: gnat_rm doc554
  Ref: 0554
! Node: About This Guide34129
! Ref: gnat_rm/about_this_guide doc34237
! Ref: 234237
! Ref: gnat_rm/about_this_guide about-this-guide34237
! Ref: 334237
! Ref: gnat_rm/about_this_guide gnat-reference-manual34237
! Ref: 434237
! Ref: gnat_rm/about_this_guide id134237
! Ref: 534237
! Node: What This Reference Manual Contains35627
! Ref: gnat_rm/about_this_guide what-this-reference-manual-contains35736
! Ref: 635736
! Node: Conventions39409
! Ref: gnat_rm/about_this_guide conventions39546
! Ref: 1839546
! Node: Related Information40113
! Ref: gnat_rm/about_this_guide related-information40206
! Ref: 1940206
! Node: Implementation Defined Pragmas41500
! Ref: gnat_rm/implementation_defined_pragmas doc41635
! Ref: 1a41635
! Ref: gnat_rm/implementation_defined_pragmas id141635
! Ref: 1b41635
! Ref: gnat_rm/implementation_defined_pragmas implementation-defined-pragmas41635
! Ref: 741635
! Node: Pragma Abort_Defer47943
! Ref: gnat_rm/implementation_defined_pragmas pragma-abort-defer48059
! Ref: 1c48059
! Node: Pragma Abstract_State48930
! Ref: gnat_rm/implementation_defined_pragmas id249068
! Ref: 1d49068
! Ref: gnat_rm/implementation_defined_pragmas pragma-abstract-state49068
! Ref: 1e49068
! Node: Pragma Ada_8350306
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-8350439
! Ref: 1f50439
! Node: Pragma Ada_9551530
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-9551655
! Ref: 2051655
! Node: Pragma Ada_0552173
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-0552300
! Ref: 2152300
! Node: Pragma Ada_200553326
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-200553453
! Ref: 2253453
! Node: Pragma Ada_1253620
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-1253749
! Ref: 2353749
! Node: Pragma Ada_201254924
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-201255053
! Ref: 2455053
! Node: Pragma Ada_202255220
! Ref: gnat_rm/implementation_defined_pragmas pragma-ada-202255372
! Ref: 2555372
! Node: Pragma Aggregate_Individually_Assign56564
! Ref: gnat_rm/implementation_defined_pragmas pragma-aggregate-individually-assign56729
! Ref: 2656729
! Node: Pragma Allow_Integer_Address57136
! Ref: gnat_rm/implementation_defined_pragmas pragma-allow-integer-address57310
! Ref: 2757310
! Node: Pragma Always_Terminates58923
! Ref: gnat_rm/implementation_defined_pragmas id359076
! Ref: 2859076
! Ref: gnat_rm/implementation_defined_pragmas pragma-always-terminates59076
! Ref: 2959076
! Node: Pragma Annotate59338
! Ref: gnat_rm/implementation_defined_pragmas id459476
! Ref: 2a59476
! Ref: gnat_rm/implementation_defined_pragmas pragma-annotate59476
! Ref: 2b59476
! Node: Pragma Assert60924
! Ref: gnat_rm/implementation_defined_pragmas pragma-assert61059
! Ref: 2c61059
! Node: Pragma Assert_And_Cut63565
! Ref: gnat_rm/implementation_defined_pragmas pragma-assert-and-cut63708
! Ref: 2d63708
! Node: Pragma Assertion_Policy64520
! Ref: gnat_rm/implementation_defined_pragmas pragma-assertion-policy64663
! Ref: 2e64663
! Node: Pragma Assume68393
! Ref: gnat_rm/implementation_defined_pragmas pragma-assume68546
! Ref: 2f68546
! Node: Pragma Assume_No_Invalid_Values69525
! Ref: gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values69675
! Ref: 3069675
! Node: Pragma Async_Readers71458
! Ref: gnat_rm/implementation_defined_pragmas id571615
! Ref: 3171615
! Ref: gnat_rm/implementation_defined_pragmas pragma-async-readers71615
! Ref: 3271615
! Node: Pragma Async_Writers71868
! Ref: gnat_rm/implementation_defined_pragmas id672021
! Ref: 3372021
! Ref: gnat_rm/implementation_defined_pragmas pragma-async-writers72021
! Ref: 3472021
! Node: Pragma Attribute_Definition72274
! Ref: gnat_rm/implementation_defined_pragmas pragma-attribute-definition72428
! Ref: 3572428
! Node: Pragma C_Pass_By_Copy73055
! Ref: gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy73201
! Ref: 3673201
! Node: Pragma Check74383
! Ref: gnat_rm/implementation_defined_pragmas pragma-check74529
! Ref: 3774529
! Node: Pragma Check_Float_Overflow75783
! Ref: gnat_rm/implementation_defined_pragmas pragma-check-float-overflow75925
! Ref: 3875925
! Node: Pragma Check_Name77976
! Ref: gnat_rm/implementation_defined_pragmas pragma-check-name78125
! Ref: 3978125
! Node: Pragma Check_Policy79245
! Ref: gnat_rm/implementation_defined_pragmas pragma-check-policy79381
! Ref: 3a79381
! Node: Pragma Comment82194
! Ref: gnat_rm/implementation_defined_pragmas pragma-comment82333
! Ref: 3b82333
! Node: Pragma Common_Object82851
! Ref: gnat_rm/implementation_defined_pragmas pragma-common-object82996
! Ref: 3c82996
! Node: Pragma Compile_Time_Error83879
! Ref: gnat_rm/implementation_defined_pragmas compile-time-error84037
! Ref: 3d84037
! Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-error84037
! Ref: 3e84037
! Node: Pragma Compile_Time_Warning85107
! Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-warning85275
! Ref: 3f85275
! Node: Pragma Complete_Representation86508
! Ref: gnat_rm/implementation_defined_pragmas pragma-complete-representation86680
! Ref: 4086680
! Node: Pragma Complex_Representation87229
! Ref: gnat_rm/implementation_defined_pragmas pragma-complex-representation87400
! Ref: 4187400
! Node: Pragma Component_Alignment88156
! Ref: gnat_rm/implementation_defined_pragmas pragma-component-alignment88330
! Ref: 4288330
! Node: Pragma Constant_After_Elaboration91048
! Ref: gnat_rm/implementation_defined_pragmas id791214
! Ref: 4391214
! Ref: gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration91214
! Ref: 4491214
! Node: Pragma Contract_Cases91519
! Ref: gnat_rm/implementation_defined_pragmas id891687
! Ref: 4591687
! Ref: gnat_rm/implementation_defined_pragmas pragma-contract-cases91687
! Ref: 4691687
! Node: Pragma Convention_Identifier94522
! Ref: gnat_rm/implementation_defined_pragmas pragma-convention-identifier94673
! Ref: 4794673
! Node: Pragma CPP_Class95857
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-class96009
! Ref: 4896009
! Node: Pragma CPP_Constructor97123
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-constructor97265
! Ref: 4a97265
! Node: Pragma CPP_Virtual99189
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-virtual99332
! Ref: 4b99332
! Node: Pragma CPP_Vtable99802
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-vtable99933
! Ref: 4c99933
! Node: Pragma CPU100357
! Ref: gnat_rm/implementation_defined_pragmas pragma-cpu100491
! Ref: 4d100491
! Node: Pragma Deadline_Floor100731
! Ref: gnat_rm/implementation_defined_pragmas pragma-deadline-floor100860
! Ref: 4e100860
! Node: Pragma Debug101176
! Ref: gnat_rm/implementation_defined_pragmas pragma-debug101314
! Ref: 4f101314
! Node: Pragma Debug_Policy102266
! Ref: gnat_rm/implementation_defined_pragmas pragma-debug-policy102415
! Ref: 50102415
! Node: Pragma Default_Initial_Condition102704
! Ref: gnat_rm/implementation_defined_pragmas id9102876
! Ref: 51102876
! Ref: gnat_rm/implementation_defined_pragmas pragma-default-initial-condition102876
! Ref: 52102876
! Node: Pragma Default_Scalar_Storage_Order103177
! Ref: gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order103357
! Ref: 53103357
! Node: Pragma Default_Storage_Pool105649
! Ref: gnat_rm/implementation_defined_pragmas pragma-default-storage-pool105811
! Ref: 54105811
! Node: Pragma Depends106116
! Ref: gnat_rm/implementation_defined_pragmas id10106265
! Ref: 55106265
! Ref: gnat_rm/implementation_defined_pragmas pragma-depends106265
! Ref: 56106265
! Node: Pragma Detect_Blocking106965
! Ref: gnat_rm/implementation_defined_pragmas pragma-detect-blocking107124
! Ref: 57107124
! Node: Pragma Disable_Atomic_Synchronization107513
! Ref: gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization107683
! Ref: 58107683
! Node: Pragma Dispatching_Domain108500
! Ref: gnat_rm/implementation_defined_pragmas pragma-dispatching-domain108670
! Ref: 59108670
! Node: Pragma Effective_Reads108955
! Ref: gnat_rm/implementation_defined_pragmas id11109111
! Ref: 5a109111
! Ref: gnat_rm/implementation_defined_pragmas pragma-effective-reads109111
! Ref: 5b109111
! Node: Pragma Effective_Writes109372
! Ref: gnat_rm/implementation_defined_pragmas id12109528
! Ref: 5c109528
! Ref: gnat_rm/implementation_defined_pragmas pragma-effective-writes109528
! Ref: 5d109528
! Node: Pragma Elaboration_Checks109793
! Ref: gnat_rm/implementation_defined_pragmas pragma-elaboration-checks109943
! Ref: 5e109943
! Node: Pragma Eliminate110771
! Ref: gnat_rm/implementation_defined_pragmas pragma-eliminate110934
! Ref: 5f110934
! Node: Pragma Enable_Atomic_Synchronization116666
! Ref: gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization116828
! Ref: 60116828
! Node: Pragma Exceptional_Cases117744
! Ref: gnat_rm/implementation_defined_pragmas pragma-exceptional-cases117912
! Ref: 61117912
! Node: Pragma Export_Function118331
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-function118483
! Ref: 62118483
! Node: Pragma Export_Object120939
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-object121090
! Ref: 63121090
! Node: Pragma Export_Procedure121761
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-procedure121920
! Ref: 64121920
! Node: Pragma Export_Valued_Procedure123418
! Ref: gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure123577
! Ref: 65123577
! Node: Pragma Extend_System125430
! Ref: gnat_rm/implementation_defined_pragmas pragma-extend-system125591
! Ref: 66125591
! Node: Pragma Extensions_Allowed127645
! Ref: gnat_rm/implementation_defined_pragmas id13127801
! Ref: 67127801
! Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-allowed127801
! Ref: 68127801
! Node: Pragma Extensions_Visible128536
! Ref: gnat_rm/implementation_defined_pragmas id14128687
! Ref: 6b128687
! Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-visible128687
! Ref: 6c128687
! Node: Pragma External128960
! Ref: gnat_rm/implementation_defined_pragmas pragma-external129113
! Ref: 6d129113
! Node: Pragma External_Name_Casing129680
! Ref: gnat_rm/implementation_defined_pragmas pragma-external-name-casing129824
! Ref: 6e129824
! Node: Pragma Fast_Math132832
! Ref: gnat_rm/implementation_defined_pragmas pragma-fast-math132983
! Ref: 6f132983
! Node: Pragma Favor_Top_Level133852
! Ref: gnat_rm/implementation_defined_pragmas id15134004
! Ref: 70134004
! Ref: gnat_rm/implementation_defined_pragmas pragma-favor-top-level134004
! Ref: 71134004
! Node: Pragma Finalize_Storage_Only134677
! Ref: gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only134840
! Ref: 72134840
! Node: Pragma Float_Representation135602
! Ref: gnat_rm/implementation_defined_pragmas pragma-float-representation135755
! Ref: 73135755
! Node: Pragma Ghost136610
! Ref: gnat_rm/implementation_defined_pragmas id16136748
! Ref: 74136748
! Ref: gnat_rm/implementation_defined_pragmas pragma-ghost136748
! Ref: 75136748
! Node: Pragma Global136967
! Ref: gnat_rm/implementation_defined_pragmas id17137090
! Ref: 76137090
! Ref: gnat_rm/implementation_defined_pragmas pragma-global137090
! Ref: 77137090
! Node: Pragma Ident137637
! Ref: gnat_rm/implementation_defined_pragmas pragma-ident137768
! Ref: 78137768
! Node: Pragma Ignore_Pragma138004
! Ref: gnat_rm/implementation_defined_pragmas pragma-ignore-pragma138151
! Ref: 79138151
! Node: Pragma Implementation_Defined138880
! Ref: gnat_rm/implementation_defined_pragmas pragma-implementation-defined139033
! Ref: 7a139033
! Node: Pragma Implemented139745
! Ref: gnat_rm/implementation_defined_pragmas pragma-implemented139901
! Ref: 7b139901
! Node: Pragma Implicit_Packing141520
! Ref: gnat_rm/implementation_defined_pragmas pragma-implicit-packing141669
! Ref: 7c141669
! Node: Pragma Import_Function143492
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-function143643
! Ref: 7d143643
! Node: Pragma Import_Object145756
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-object145907
! Ref: 7e145907
! Node: Pragma Import_Procedure146611
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-procedure146770
! Ref: 7f146770
! Node: Pragma Import_Valued_Procedure147702
! Ref: gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure147859
! Ref: 80147859
! Node: Pragma Independent149636
! Ref: gnat_rm/implementation_defined_pragmas pragma-independent149799
! Ref: 81149799
! Node: Pragma Independent_Components150476
! Ref: gnat_rm/implementation_defined_pragmas pragma-independent-components150633
! Ref: 82150633
! Node: Pragma Initial_Condition151295
! Ref: gnat_rm/implementation_defined_pragmas id18151459
! Ref: 83151459
! Ref: gnat_rm/implementation_defined_pragmas pragma-initial-condition151459
! Ref: 84151459
! Node: Pragma Initialize_Scalars151717
! Ref: gnat_rm/implementation_defined_pragmas pragma-initialize-scalars151870
! Ref: 85151870
! Node: Pragma Initializes155550
! Ref: gnat_rm/implementation_defined_pragmas id19155699
! Ref: 86155699
! Ref: gnat_rm/implementation_defined_pragmas pragma-initializes155699
! Ref: 87155699
! Node: Pragma Inline_Always156185
! Ref: gnat_rm/implementation_defined_pragmas id20156330
! Ref: 88156330
! Ref: gnat_rm/implementation_defined_pragmas pragma-inline-always156330
! Ref: 89156330
! Node: Pragma Inline_Generic156962
! Ref: gnat_rm/implementation_defined_pragmas pragma-inline-generic157105
! Ref: 8a157105
! Node: Pragma Interface157487
! Ref: gnat_rm/implementation_defined_pragmas pragma-interface157631
! Ref: 8b157631
! Node: Pragma Interface_Name158604
! Ref: gnat_rm/implementation_defined_pragmas pragma-interface-name158751
! Ref: 8c158751
! Node: Pragma Interrupt_Handler159269
! Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-handler159422
! Ref: 8d159422
! Node: Pragma Interrupt_State159678
! Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-state159826
! Ref: 8e159826
! Node: Pragma Invariant163026
! Ref: gnat_rm/implementation_defined_pragmas id21163167
! Ref: 8f163167
! Ref: gnat_rm/implementation_defined_pragmas pragma-invariant163167
! Ref: 90163167
! Node: Pragma Keep_Names164823
! Ref: gnat_rm/implementation_defined_pragmas pragma-keep-names164956
! Ref: 91164956
! Node: Pragma License165572
! Ref: gnat_rm/implementation_defined_pragmas pragma-license165705
! Ref: 92165705
! Node: Pragma Link_With168803
! Ref: gnat_rm/implementation_defined_pragmas pragma-link-with168938
! Ref: 93168938
! Node: Pragma Linker_Alias169579
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-alias169725
! Ref: 94169725
! Node: Pragma Linker_Constructor171004
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-constructor171158
! Ref: 95171158
! Node: Pragma Linker_Destructor172387
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-destructor172543
! Ref: 96172543
! Node: Pragma Linker_Section173322
! Ref: gnat_rm/implementation_defined_pragmas id22173469
! Ref: 97173469
! Ref: gnat_rm/implementation_defined_pragmas pragma-linker-section173469
! Ref: 98173469
! Node: Pragma Lock_Free176520
! Ref: gnat_rm/implementation_defined_pragmas id23176664
! Ref: 99176664
! Ref: gnat_rm/implementation_defined_pragmas pragma-lock-free176664
! Ref: 9a176664
! Node: Pragma Loop_Invariant177989
! Ref: gnat_rm/implementation_defined_pragmas pragma-loop-invariant178132
! Ref: 9b178132
! Node: Pragma Loop_Optimize179324
! Ref: gnat_rm/implementation_defined_pragmas pragma-loop-optimize179470
! Ref: 9c179470
! Node: Pragma Loop_Variant181204
! Ref: gnat_rm/implementation_defined_pragmas pragma-loop-variant181353
! Ref: 9d181353
! Node: Pragma Machine_Attribute183162
! Ref: gnat_rm/implementation_defined_pragmas pragma-machine-attribute183302
! Ref: 9e183302
! Node: Pragma Main184269
! Ref: gnat_rm/implementation_defined_pragmas pragma-main184409
! Ref: 9f184409
! Node: Pragma Main_Storage184847
! Ref: gnat_rm/implementation_defined_pragmas pragma-main-storage184986
! Ref: a0184986
! Node: Pragma Max_Queue_Length185393
! Ref: gnat_rm/implementation_defined_pragmas id24185535
! Ref: a1185535
! Ref: gnat_rm/implementation_defined_pragmas pragma-max-queue-length185535
! Ref: a2185535
! Node: Pragma No_Body185961
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-body186101
! Ref: a3186101
! Node: Pragma No_Caching186884
! Ref: gnat_rm/implementation_defined_pragmas id25187031
! Ref: a4187031
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-caching187031
! Ref: a5187031
! Node: Pragma No_Component_Reordering187274
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-component-reordering187437
! Ref: a6187437
! Node: Pragma No_Elaboration_Code_All188097
! Ref: gnat_rm/implementation_defined_pragmas id26188270
! Ref: a7188270
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all188270
! Ref: a8188270
! Node: Pragma No_Heap_Finalization188925
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization189084
! Ref: a9189084
! Node: Pragma No_Inline190236
! Ref: gnat_rm/implementation_defined_pragmas id27190381
! Ref: aa190381
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-inline190381
! Ref: ab190381
! Node: Pragma No_Return190888
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-return191031
! Ref: ac191031
! Node: Pragma No_Strict_Aliasing192004
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing192155
! Ref: ad192155
! Node: Pragma No_Tagged_Streams192881
! Ref: gnat_rm/implementation_defined_pragmas id28193040
! Ref: ae193040
! Ref: gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams193040
! Ref: af193040
! Node: Pragma Normalize_Scalars194815
! Ref: gnat_rm/implementation_defined_pragmas pragma-normalize-scalars194967
! Ref: b0194967
! Node: Pragma Obsolescent197905
! Ref: gnat_rm/implementation_defined_pragmas id29198058
! Ref: b1198058
! Ref: gnat_rm/implementation_defined_pragmas pragma-obsolescent198058
! Ref: b2198058
! Node: Pragma Optimize_Alignment201513
! Ref: gnat_rm/implementation_defined_pragmas pragma-optimize-alignment201656
! Ref: b3201656
! Node: Pragma Ordered205167
! Ref: gnat_rm/implementation_defined_pragmas pragma-ordered205312
! Ref: b4205312
! Node: Pragma Overflow_Mode208416
! Ref: gnat_rm/implementation_defined_pragmas pragma-overflow-mode208563
! Ref: b5208563
! Node: Pragma Overriding_Renamings209901
! Ref: gnat_rm/implementation_defined_pragmas pragma-overriding-renamings210048
! Ref: b6210048
! Node: Pragma Part_Of210710
! Ref: gnat_rm/implementation_defined_pragmas id30210872
! Ref: b7210872
! Ref: gnat_rm/implementation_defined_pragmas pragma-part-of210872
! Ref: b8210872
! Node: Pragma Partition_Elaboration_Policy211118
! Ref: gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy211267
! Ref: b9211267
! Node: Pragma Passive211643
! Ref: gnat_rm/implementation_defined_pragmas pragma-passive211799
! Ref: ba211799
! Node: Pragma Persistent_BSS212657
! Ref: gnat_rm/implementation_defined_pragmas id31212789
! Ref: bb212789
! Ref: gnat_rm/implementation_defined_pragmas pragma-persistent-bss212789
! Ref: bc212789
! Node: Pragma Post213985
! Ref: gnat_rm/implementation_defined_pragmas pragma-post214123
! Ref: bd214123
! Node: Pragma Postcondition214638
! Ref: gnat_rm/implementation_defined_pragmas pragma-postcondition214772
! Ref: be214772
! Node: Pragma Post_Class220516
! Ref: gnat_rm/implementation_defined_pragmas pragma-post-class220649
! Ref: bf220649
! Node: Pragma Pre221706
! Ref: gnat_rm/implementation_defined_pragmas pragma-pre221838
! Ref: c0221838
! Node: Pragma Precondition222348
! Ref: gnat_rm/implementation_defined_pragmas pragma-precondition222479
! Ref: c1222479
! Node: Pragma Predicate224426
! Ref: gnat_rm/implementation_defined_pragmas id32224571
! Ref: c2224571
! Ref: gnat_rm/implementation_defined_pragmas pragma-predicate224571
! Ref: c3224571
! Node: Pragma Predicate_Failure226327
! Ref: gnat_rm/implementation_defined_pragmas pragma-predicate-failure226488
! Ref: c4226488
! Node: Pragma Preelaborable_Initialization226845
! Ref: gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization227022
! Ref: c5227022
! Node: Pragma Prefix_Exception_Messages227340
! Ref: gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages227509
! Ref: c6227509
! Node: Pragma Pre_Class228430
! Ref: gnat_rm/implementation_defined_pragmas pragma-pre-class228600
! Ref: c7228600
! Node: Pragma Priority_Specific_Dispatching229648
! Ref: gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching229800
! Ref: c8229800
! Node: Pragma Profile230399
! Ref: gnat_rm/implementation_defined_pragmas pragma-profile230558
! Ref: c9230558
! Node: Pragma Profile_Warnings237495
! Ref: gnat_rm/implementation_defined_pragmas pragma-profile-warnings237645
! Ref: ca237645
! Node: Pragma Propagate_Exceptions238084
! Ref: gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions238250
! Ref: cb238250
! Node: Pragma Provide_Shift_Operators238648
! Ref: gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators238810
! Ref: cc238810
! Node: Pragma Psect_Object239373
! Ref: gnat_rm/implementation_defined_pragmas pragma-psect-object239528
! Ref: cd239528
! Node: Pragma Pure_Function239881
! Ref: gnat_rm/implementation_defined_pragmas id33240021
! Ref: ce240021
! Ref: gnat_rm/implementation_defined_pragmas pragma-pure-function240021
! Ref: cf240021
! Node: Pragma Rational243067
! Ref: gnat_rm/implementation_defined_pragmas pragma-rational243204
! Ref: d0243204
! Node: Pragma Ravenscar243420
! Ref: gnat_rm/implementation_defined_pragmas pragma-ravenscar243559
! Ref: d1243559
! Node: Pragma Refined_Depends243850
! Ref: gnat_rm/implementation_defined_pragmas id34243995
! Ref: d2243995
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-depends243995
! Ref: d3243995
! Node: Pragma Refined_Global244729
! Ref: gnat_rm/implementation_defined_pragmas id35244877
! Ref: d4244877
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-global244877
! Ref: d5244877
! Node: Pragma Refined_Post245458
! Ref: gnat_rm/implementation_defined_pragmas id36245604
! Ref: d6245604
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-post245604
! Ref: d7245604
! Node: Pragma Refined_State245844
! Ref: gnat_rm/implementation_defined_pragmas id37245993
! Ref: d8245993
! Ref: gnat_rm/implementation_defined_pragmas pragma-refined-state245993
! Ref: d9245993
! Node: Pragma Relative_Deadline246518
! Ref: gnat_rm/implementation_defined_pragmas pragma-relative-deadline246673
! Ref: da246673
! Node: Pragma Remote_Access_Type246967
! Ref: gnat_rm/implementation_defined_pragmas id38247122
! Ref: db247122
! Ref: gnat_rm/implementation_defined_pragmas pragma-remote-access-type247122
! Ref: dc247122
! Node: Pragma Rename_Pragma248000
! Ref: gnat_rm/implementation_defined_pragmas pragma-rename-pragma248157
! Ref: dd248157
! Node: Pragma Restricted_Run_Time249320
! Ref: gnat_rm/implementation_defined_pragmas pragma-restricted-run-time249479
! Ref: de249479
! Node: Pragma Restriction_Warnings249805
! Ref: gnat_rm/implementation_defined_pragmas pragma-restriction-warnings249961
! Ref: df249961
! Node: Pragma Reviewable251249
! Ref: gnat_rm/implementation_defined_pragmas pragma-reviewable251406
! Ref: e0251406
! Node: Pragma Secondary_Stack_Size253930
! Ref: gnat_rm/implementation_defined_pragmas id39254080
! Ref: e1254080
! Ref: gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size254080
! Ref: e2254080
! Node: Pragma Share_Generic255556
! Ref: gnat_rm/implementation_defined_pragmas pragma-share-generic255702
! Ref: e3255702
! Node: Pragma Shared256094
! Ref: gnat_rm/implementation_defined_pragmas id40256240
! Ref: e4256240
! Ref: gnat_rm/implementation_defined_pragmas pragma-shared256240
! Ref: e5256240
! Node: Pragma Short_Circuit_And_Or256395
! Ref: gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or256545
! Ref: e6256545
! Node: Pragma Short_Descriptors257199
! Ref: gnat_rm/implementation_defined_pragmas pragma-short-descriptors257355
! Ref: e7257355
! Node: Pragma Side_Effects257597
! Ref: gnat_rm/implementation_defined_pragmas id41257757
! Ref: e8257757
! Ref: gnat_rm/implementation_defined_pragmas pragma-side-effects257757
! Ref: e9257757
! Node: Pragma Simple_Storage_Pool_Type258004
! Ref: gnat_rm/implementation_defined_pragmas id42258163
! Ref: ea258163
! Ref: gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type258163
! Ref: eb258163
! Node: Pragma Source_File_Name260453
! Ref: gnat_rm/implementation_defined_pragmas id43260624
! Ref: ed260624
! Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name260624
! Ref: ee260624
! Node: Pragma Source_File_Name_Project264099
! Ref: gnat_rm/implementation_defined_pragmas id44264262
! Ref: f0264262
! Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name-project264262
! Ref: ef264262
! Node: Pragma Source_Reference265037
! Ref: gnat_rm/implementation_defined_pragmas pragma-source-reference265194
! Ref: f1265194
! Node: Pragma SPARK_Mode266035
! Ref: gnat_rm/implementation_defined_pragmas id45266194
! Ref: f2266194
! Ref: gnat_rm/implementation_defined_pragmas pragma-spark-mode266194
! Ref: f3266194
! Node: Pragma Static_Elaboration_Desired268211
! Ref: gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired268368
! Ref: f4268368
! Node: Pragma Stream_Convert269378
! Ref: gnat_rm/implementation_defined_pragmas pragma-stream-convert269537
! Ref: f5269537
! Node: Pragma Style_Checks272706
! Ref: gnat_rm/implementation_defined_pragmas pragma-style-checks272847
! Ref: f6272847
! Node: Pragma Subtitle275175
! Ref: gnat_rm/implementation_defined_pragmas pragma-subtitle275310
! Ref: f7275310
! Node: Pragma Suppress275512
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress275647
! Ref: f8275647
! Node: Pragma Suppress_All278518
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-all278664
! Ref: f9278664
! Node: Pragma Suppress_Debug_Info279206
! Ref: gnat_rm/implementation_defined_pragmas id46279372
! Ref: fa279372
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info279372
! Ref: fb279372
! Node: Pragma Suppress_Exception_Locations279704
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations279881
! Ref: fc279881
! Node: Pragma Suppress_Initialization280812
! Ref: gnat_rm/implementation_defined_pragmas id47280979
! Ref: fd280979
! Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-initialization280979
! Ref: fe280979
! Node: Pragma Task_Name282543
! Ref: gnat_rm/implementation_defined_pragmas pragma-task-name282694
! Ref: ff282694
! Node: Pragma Task_Storage284273
! Ref: gnat_rm/implementation_defined_pragmas pragma-task-storage284410
! Ref: 100284410
! Node: Pragma Test_Case284945
! Ref: gnat_rm/implementation_defined_pragmas id48285093
! Ref: 101285093
! Ref: gnat_rm/implementation_defined_pragmas pragma-test-case285093
! Ref: 102285093
! Node: Pragma Thread_Local_Storage287187
! Ref: gnat_rm/implementation_defined_pragmas id49287333
! Ref: 103287333
! Ref: gnat_rm/implementation_defined_pragmas pragma-thread-local-storage287333
! Ref: 104287333
! Node: Pragma Time_Slice288546
! Ref: gnat_rm/implementation_defined_pragmas pragma-time-slice288688
! Ref: 105288688
! Node: Pragma Title289072
! Ref: gnat_rm/implementation_defined_pragmas pragma-title289208
! Ref: 106289208
! Node: Pragma Type_Invariant289925
! Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant290071
! Ref: 107290071
! Node: Pragma Type_Invariant_Class290611
! Ref: gnat_rm/implementation_defined_pragmas id50290767
! Ref: 108290767
! Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant-class290767
! Ref: 109290767
! Node: Pragma Unchecked_Union291682
! Ref: gnat_rm/implementation_defined_pragmas pragma-unchecked-union291846
! Ref: 10a291846
! Node: Pragma Unevaluated_Use_Of_Old292412
! Ref: gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old292578
! Ref: 10b292578
! Node: Pragma User_Aspect_Definition294505
! Ref: gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition294674
! Ref: 10c294674
! Node: Pragma Unimplemented_Unit296025
! Ref: gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit296190
! Ref: 10d296190
! Node: Pragma Universal_Aliasing296725
! Ref: gnat_rm/implementation_defined_pragmas id51296878
! Ref: 10e296878
! Ref: gnat_rm/implementation_defined_pragmas pragma-universal-aliasing296878
! Ref: 10f296878
! Node: Pragma Unmodified297519
! Ref: gnat_rm/implementation_defined_pragmas id52297666
! Ref: 110297666
! Ref: gnat_rm/implementation_defined_pragmas pragma-unmodified297666
! Ref: 111297666
! Node: Pragma Unreferenced298744
! Ref: gnat_rm/implementation_defined_pragmas id53298893
! Ref: 112298893
! Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced298893
! Ref: 113298893
! Node: Pragma Unreferenced_Objects301571
! Ref: gnat_rm/implementation_defined_pragmas id54301734
! Ref: 114301734
! Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects301734
! Ref: 115301734
! Node: Pragma Unreserve_All_Interrupts302511
! Ref: gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts302672
! Ref: 116302672
! Node: Pragma Unsuppress304177
! Ref: gnat_rm/implementation_defined_pragmas pragma-unsuppress304324
! Ref: 117304324
! Node: Pragma Unused305594
! Ref: gnat_rm/implementation_defined_pragmas id55305730
! Ref: 118305730
! Ref: gnat_rm/implementation_defined_pragmas pragma-unused305730
! Ref: 119305730
! Node: Pragma Use_VADS_Size306906
! Ref: gnat_rm/implementation_defined_pragmas pragma-use-vads-size307047
! Ref: 11a307047
! Node: Pragma Validity_Checks307608
! Ref: gnat_rm/implementation_defined_pragmas pragma-validity-checks307751
! Ref: 11b307751
! Node: Pragma Volatile309518
! Ref: gnat_rm/implementation_defined_pragmas id56309668
! Ref: 11c309668
! Ref: gnat_rm/implementation_defined_pragmas pragma-volatile309668
! Ref: 11d309668
! Node: Pragma Volatile_Full_Access310138
! Ref: gnat_rm/implementation_defined_pragmas id57310290
! Ref: 11e310290
! Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-full-access310290
! Ref: 11f310290
! Node: Pragma Volatile_Function311358
! Ref: gnat_rm/implementation_defined_pragmas id58311518
! Ref: 120311518
! Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-function311518
! Ref: 121311518
! Node: Pragma Warning_As_Error311789
! Ref: gnat_rm/implementation_defined_pragmas pragma-warning-as-error311937
! Ref: 122311937
! Node: Pragma Warnings315293
! Ref: gnat_rm/implementation_defined_pragmas id59315437
! Ref: 124315437
! Ref: gnat_rm/implementation_defined_pragmas pragma-warnings315437
! Ref: 123315437
! Node: Pragma Weak_External322892
! Ref: gnat_rm/implementation_defined_pragmas pragma-weak-external323043
! Ref: 125323043
! Node: Pragma Wide_Character_Encoding324724
! Ref: gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding324851
! Ref: 126324851
! Node: Implementation Defined Aspects325983
! Ref: gnat_rm/implementation_defined_aspects doc326135
! Ref: 127326135
! Ref: gnat_rm/implementation_defined_aspects id1326135
! Ref: 128326135
! Ref: gnat_rm/implementation_defined_aspects implementation-defined-aspects326135
! Ref: 129326135
! Node: Aspect Abstract_State329513
! Ref: gnat_rm/implementation_defined_aspects aspect-abstract-state329635
! Ref: 12a329635
! Node: Aspect Always_Terminates329751
! Ref: gnat_rm/implementation_defined_aspects aspect-always-terminates329897
! Ref: 12b329897
! Node: Aspect Annotate330030
! Ref: gnat_rm/implementation_defined_aspects aspect-annotate330175
! Ref: 12c330175
! Node: Aspect Async_Readers330634
! Ref: gnat_rm/implementation_defined_aspects aspect-async-readers330775
! Ref: 12d330775
! Node: Aspect Async_Writers330896
! Ref: gnat_rm/implementation_defined_aspects aspect-async-writers331055
! Ref: 12e331055
! Node: Aspect Constant_After_Elaboration331176
! Ref: gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration331336
! Ref: 12f331336
! Node: Aspect Contract_Cases331488
! Ref: gnat_rm/implementation_defined_aspects aspect-contract-cases331642
! Ref: 130331642
! Node: Aspect Depends331854
! Ref: gnat_rm/implementation_defined_aspects aspect-depends332007
! Ref: 131332007
! Node: Aspect Default_Initial_Condition332102
! Ref: gnat_rm/implementation_defined_aspects aspect-default-initial-condition332250
! Ref: 132332250
! Node: Aspect Dimension332399
! Ref: gnat_rm/implementation_defined_aspects aspect-dimension332556
! Ref: 133332556
! Node: Aspect Dimension_System333778
! Ref: gnat_rm/implementation_defined_aspects aspect-dimension-system333928
! Ref: 134333928
! Node: Aspect Disable_Controlled336478
! Ref: gnat_rm/implementation_defined_aspects aspect-disable-controlled336634
! Ref: 135336634
! Node: Aspect Effective_Reads337075
! Ref: gnat_rm/implementation_defined_aspects aspect-effective-reads337231
! Ref: 136337231
! Node: Aspect Effective_Writes337352
! Ref: gnat_rm/implementation_defined_aspects aspect-effective-writes337507
! Ref: 137337507
! Node: Aspect Exceptional_Cases337631
! Ref: gnat_rm/implementation_defined_aspects aspect-exceptional-cases337789
! Ref: 138337789
! Node: Aspect Extensions_Visible338207
! Ref: gnat_rm/implementation_defined_aspects aspect-extensions-visible338364
! Ref: 139338364
! Node: Aspect Favor_Top_Level338494
! Ref: gnat_rm/implementation_defined_aspects aspect-favor-top-level338639
! Ref: 13a338639
! Node: Aspect Ghost338768
! Ref: gnat_rm/implementation_defined_aspects aspect-ghost338910
! Ref: 13b338910
! Node: Aspect Ghost_Predicate339001
! Ref: gnat_rm/implementation_defined_aspects aspect-ghost-predicate339134
! Ref: 13c339134
! Node: Aspect Global339464
! Ref: gnat_rm/implementation_defined_aspects aspect-global339609
! Ref: 13d339609
! Node: Aspect Initial_Condition339703
! Ref: gnat_rm/implementation_defined_aspects aspect-initial-condition339844
! Ref: 13e339844
! Node: Aspect Initializes339971
! Ref: gnat_rm/implementation_defined_aspects aspect-initializes340119
! Ref: 13f340119
! Node: Aspect Inline_Always340228
! Ref: gnat_rm/implementation_defined_aspects aspect-inline-always340368
! Ref: 140340368
! Node: Aspect Invariant340491
! Ref: gnat_rm/implementation_defined_aspects aspect-invariant340637
! Ref: 141340637
! Node: Aspect Invariant’Class340889
! Ref: gnat_rm/implementation_defined_aspects aspect-invariant-class341030
! Ref: 142341030
! Node: Aspect Iterable341314
! Ref: gnat_rm/implementation_defined_aspects aspect-iterable341460
! Ref: 143341460
! Node: Aspect Linker_Section344067
! Ref: gnat_rm/implementation_defined_aspects aspect-linker-section344214
! Ref: 144344214
! Node: Aspect Local_Restrictions344332
! Ref: gnat_rm/implementation_defined_aspects aspect-local-restrictions344480
! Ref: 145344480
! Node: Aspect Lock_Free347226
! Ref: gnat_rm/implementation_defined_aspects aspect-lock-free347376
! Ref: 146347376
! Node: Aspect Max_Queue_Length347487
! Ref: gnat_rm/implementation_defined_aspects aspect-max-queue-length347629
! Ref: 147347629
! Node: Aspect No_Caching347753
! Ref: gnat_rm/implementation_defined_aspects aspect-no-caching347909
! Ref: 148347909
! Node: Aspect No_Elaboration_Code_All348023
! Ref: gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all348172
! Ref: 149348172
! Node: Aspect No_Inline348337
! Ref: gnat_rm/implementation_defined_aspects aspect-no-inline348493
! Ref: 14a348493
! Node: Aspect No_Tagged_Streams348604
! Ref: gnat_rm/implementation_defined_aspects aspect-no-tagged-streams348750
! Ref: 14b348750
! Node: Aspect No_Task_Parts348979
! Ref: gnat_rm/implementation_defined_aspects aspect-no-task-parts349127
! Ref: 14c349127
! Node: Aspect Object_Size349633
! Ref: gnat_rm/implementation_defined_aspects aspect-object-size349775
! Ref: 14d349775
! Node: Aspect Obsolescent349888
! Ref: gnat_rm/implementation_defined_aspects aspect-obsolescent350024
! Ref: 14f350024
! Node: Aspect Part_Of350252
! Ref: gnat_rm/implementation_defined_aspects aspect-part-of350391
! Ref: 150350391
! Node: Aspect Persistent_BSS350488
! Ref: gnat_rm/implementation_defined_aspects aspect-persistent-bss350625
! Ref: 151350625
! Node: Aspect Predicate350751
! Ref: gnat_rm/implementation_defined_aspects aspect-predicate350894
! Ref: 152350894
! Node: Aspect Pure_Function351283
! Ref: gnat_rm/implementation_defined_aspects aspect-pure-function351427
! Ref: 153351427
! Node: Aspect Refined_Depends351550
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-depends351699
! Ref: 154351699
! Node: Aspect Refined_Global351820
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-global351968
! Ref: 155351968
! Node: Aspect Refined_Post352086
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-post352232
! Ref: 156352232
! Node: Aspect Refined_State352344
! Ref: gnat_rm/implementation_defined_aspects aspect-refined-state352498
! Ref: 157352498
! Node: Aspect Relaxed_Initialization352613
! Ref: gnat_rm/implementation_defined_aspects aspect-relaxed-initialization352773
! Ref: 158352773
! Node: Aspect Remote_Access_Type352941
! Ref: gnat_rm/implementation_defined_aspects aspect-remote-access-type353108
! Ref: 159353108
! Node: Aspect Secondary_Stack_Size353238
! Ref: gnat_rm/implementation_defined_aspects aspect-secondary-stack-size353403
! Ref: 15a353403
! Node: Aspect Scalar_Storage_Order353539
! Ref: gnat_rm/implementation_defined_aspects aspect-scalar-storage-order353692
! Ref: 15b353692
! Node: Aspect Shared353834
! Ref: gnat_rm/implementation_defined_aspects aspect-shared353979
! Ref: 15d353979
! Node: Aspect Side_Effects354128
! Ref: gnat_rm/implementation_defined_aspects aspect-side-effects354272
! Ref: 15e354272
! Node: Aspect Simple_Storage_Pool354384
! Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool354546
! Ref: 15f354546
! Node: Aspect Simple_Storage_Pool_Type354682
! Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type354842
! Ref: 160354842
! Node: Aspect SPARK_Mode354998
! Ref: gnat_rm/implementation_defined_aspects aspect-spark-mode355158
! Ref: 161355158
! Node: Aspect Suppress_Debug_Info355362
! Ref: gnat_rm/implementation_defined_aspects aspect-suppress-debug-info355521
! Ref: 162355521
! Node: Aspect Suppress_Initialization355662
! Ref: gnat_rm/implementation_defined_aspects aspect-suppress-initialization355820
! Ref: 163355820
! Node: Aspect Test_Case355973
! Ref: gnat_rm/implementation_defined_aspects aspect-test-case356132
! Ref: 164356132
! Node: Aspect Thread_Local_Storage356236
! Ref: gnat_rm/implementation_defined_aspects aspect-thread-local-storage356390
! Ref: 165356390
! Node: Aspect Universal_Aliasing356535
! Ref: gnat_rm/implementation_defined_aspects aspect-universal-aliasing356690
! Ref: 166356690
! Node: Aspect Unmodified356829
! Ref: gnat_rm/implementation_defined_aspects aspect-unmodified356976
! Ref: 167356976
! Node: Aspect Unreferenced357091
! Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced357240
! Ref: 168357240
! Node: Aspect Unreferenced_Objects357525
! Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced-objects357675
! Ref: 169357675
! Node: Aspect User_Aspect357820
! Ref: gnat_rm/implementation_defined_aspects aspect-user-aspect357968
! Ref: 16a357968
! Node: Aspect Value_Size358296
! Ref: gnat_rm/implementation_defined_aspects aspect-value-size358444
! Ref: 16b358444
! Node: Aspect Volatile_Full_Access358554
! Ref: gnat_rm/implementation_defined_aspects aspect-volatile-full-access358708
! Ref: 16d358708
! Node: Aspect Volatile_Function358853
! Ref: gnat_rm/implementation_defined_aspects aspect-volatile-function359005
! Ref: 16e359005
! Node: Aspect Warnings359141
! Ref: gnat_rm/implementation_defined_aspects aspect-warnings359257
! Ref: 16f359257
! Node: Implementation Defined Attributes359472
! Ref: gnat_rm/implementation_defined_attributes doc359642
! Ref: 170359642
! Ref: gnat_rm/implementation_defined_attributes id1359642
! Ref: 171359642
! Ref: gnat_rm/implementation_defined_attributes implementation-defined-attributes359642
! Ref: 8359642
! Node: Attribute Abort_Signal362834
! Ref: gnat_rm/implementation_defined_attributes attribute-abort-signal362958
! Ref: 172362958
! Node: Attribute Address_Size363393
! Ref: gnat_rm/implementation_defined_attributes attribute-address-size363545
! Ref: 173363545
! Node: Attribute Asm_Input363926
! Ref: gnat_rm/implementation_defined_attributes attribute-asm-input364076
! Ref: 174364076
! Node: Attribute Asm_Output364701
! Ref: gnat_rm/implementation_defined_attributes attribute-asm-output364862
! Ref: 176364862
! Node: Attribute Atomic_Always_Lock_Free365638
! Ref: gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free365793
! Ref: 177365793
! Node: Attribute Bit366132
! Ref: gnat_rm/implementation_defined_attributes attribute-bit366289
! Ref: 178366289
! Node: Attribute Bit_Position367370
! Ref: gnat_rm/implementation_defined_attributes attribute-bit-position367516
! Ref: 179367516
! Node: Attribute Code_Address367962
! Ref: gnat_rm/implementation_defined_attributes attribute-code-address368121
! Ref: 17a368121
! Node: Attribute Compiler_Version369455
! Ref: gnat_rm/implementation_defined_attributes attribute-compiler-version369613
! Ref: 17b369613
! Node: Attribute Constrained369883
! Ref: gnat_rm/implementation_defined_attributes attribute-constrained370046
! Ref: 17c370046
! Node: Attribute Default_Bit_Order370520
! Ref: gnat_rm/implementation_defined_attributes attribute-default-bit-order370695
! Ref: 17d370695
! Node: Attribute Default_Scalar_Storage_Order371067
! Ref: gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order371236
! Ref: 17e371236
! Node: Attribute Deref371657
! Ref: gnat_rm/implementation_defined_attributes attribute-deref371824
! Ref: 17f371824
! Node: Attribute Descriptor_Size372254
! Ref: gnat_rm/implementation_defined_attributes attribute-descriptor-size372403
! Ref: 180372403
! Node: Attribute Elaborated373405
! Ref: gnat_rm/implementation_defined_attributes attribute-elaborated373558
! Ref: 181373558
! Node: Attribute Elab_Body374100
! Ref: gnat_rm/implementation_defined_attributes attribute-elab-body374247
! Ref: 182374247
! Node: Attribute Elab_Spec374797
! Ref: gnat_rm/implementation_defined_attributes attribute-elab-spec374948
! Ref: 183374948
! Node: Attribute Elab_Subp_Body375498
! Ref: gnat_rm/implementation_defined_attributes attribute-elab-subp-body375644
! Ref: 184375644
! Node: Attribute Emax376066
! Ref: gnat_rm/implementation_defined_attributes attribute-emax376210
! Ref: 185376210
! Node: Attribute Enabled376414
! Ref: gnat_rm/implementation_defined_attributes attribute-enabled376552
! Ref: 186376552
! Node: Attribute Enum_Rep377674
! Ref: gnat_rm/implementation_defined_attributes attribute-enum-rep377816
! Ref: 187377816
! Node: Attribute Enum_Val379309
! Ref: gnat_rm/implementation_defined_attributes attribute-enum-val379451
! Ref: 188379451
! Node: Attribute Epsilon380177
! Ref: gnat_rm/implementation_defined_attributes attribute-epsilon380320
! Ref: 189380320
! Node: Attribute Fast_Math380533
! Ref: gnat_rm/implementation_defined_attributes attribute-fast-math380685
! Ref: 18a380685
! Node: Attribute Finalization_Size380907
! Ref: gnat_rm/implementation_defined_attributes attribute-finalization-size381063
! Ref: 18b381063
! Node: Attribute Fixed_Value381673
! Ref: gnat_rm/implementation_defined_attributes attribute-fixed-value381828
! Ref: 18c381828
! Node: Attribute From_Any382530
! Ref: gnat_rm/implementation_defined_attributes attribute-from-any382685
! Ref: 18d382685
! Node: Attribute Has_Access_Values382862
! Ref: gnat_rm/implementation_defined_attributes attribute-has-access-values383023
! Ref: 18e383023
! Node: Attribute Has_Discriminants383549
! Ref: gnat_rm/implementation_defined_attributes attribute-has-discriminants383719
! Ref: 18f383719
! Node: Attribute Has_Tagged_Values384160
! Ref: gnat_rm/implementation_defined_attributes attribute-has-tagged-values384316
! Ref: 190384316
! Node: Attribute Img384846
! Ref: gnat_rm/implementation_defined_attributes attribute-img384996
! Ref: 191384996
! Node: Attribute Initialized385663
! Ref: gnat_rm/implementation_defined_attributes attribute-initialized385809
! Ref: 192385809
! Node: Attribute Integer_Value385964
! Ref: gnat_rm/implementation_defined_attributes attribute-integer-value386120
! Ref: 193386120
! Node: Attribute Invalid_Value386884
! Ref: gnat_rm/implementation_defined_attributes attribute-invalid-value387037
! Ref: 194387037
! Node: Attribute Iterable387511
! Ref: gnat_rm/implementation_defined_attributes attribute-iterable387656
! Ref: 195387656
! Node: Attribute Large387737
! Ref: gnat_rm/implementation_defined_attributes attribute-large387882
! Ref: 196387882
! Node: Attribute Library_Level388089
! Ref: gnat_rm/implementation_defined_attributes attribute-library-level388236
! Ref: 197388236
! Node: Attribute Loop_Entry388872
! Ref: gnat_rm/implementation_defined_attributes attribute-loop-entry389026
! Ref: 198389026
! Node: Attribute Machine_Size390272
! Ref: gnat_rm/implementation_defined_attributes attribute-machine-size390421
! Ref: 199390421
! Node: Attribute Mantissa390621
! Ref: gnat_rm/implementation_defined_attributes attribute-mantissa390777
! Ref: 19a390777
! Node: Attribute Maximum_Alignment390993
! Ref: gnat_rm/implementation_defined_attributes attribute-maximum-alignment391153
! Ref: 19b391153
! Ref: gnat_rm/implementation_defined_attributes id2391153
! Ref: 19c391153
! Node: Attribute Max_Integer_Size391494
! Ref: gnat_rm/implementation_defined_attributes attribute-max-integer-size391660
! Ref: 19d391660
! Node: Attribute Mechanism_Code391907
! Ref: gnat_rm/implementation_defined_attributes attribute-mechanism-code392070
! Ref: 19e392070
! Node: Attribute Null_Parameter392502
! Ref: gnat_rm/implementation_defined_attributes attribute-null-parameter392660
! Ref: 19f392660
! Node: Attribute Object_Size393385
! Ref: gnat_rm/implementation_defined_attributes attribute-object-size393532
! Ref: 14e393532
! Ref: gnat_rm/implementation_defined_attributes id3393532
! Ref: 1a0393532
! Node: Attribute Old395764
! Ref: gnat_rm/implementation_defined_attributes attribute-old395916
! Ref: 1a1395916
! Node: Attribute Passed_By_Reference396374
! Ref: gnat_rm/implementation_defined_attributes attribute-passed-by-reference396527
! Ref: 1a2396527
! Node: Attribute Pool_Address396941
! Ref: gnat_rm/implementation_defined_attributes attribute-pool-address397103
! Ref: 1a3397103
! Node: Attribute Range_Length397859
! Ref: gnat_rm/implementation_defined_attributes attribute-range-length398017
! Ref: 1a4398017
! Node: Attribute Restriction_Set398403
! Ref: gnat_rm/implementation_defined_attributes attribute-restriction-set398555
! Ref: 1a5398555
! Node: Attribute Result401029
! Ref: gnat_rm/implementation_defined_attributes attribute-result401178
! Ref: 1a6401178
! Node: Attribute Safe_Emax401580
! Ref: gnat_rm/implementation_defined_attributes attribute-safe-emax401724
! Ref: 1a7401724
! Node: Attribute Safe_Large401942
! Ref: gnat_rm/implementation_defined_attributes attribute-safe-large402090
! Ref: 1a8402090
! Node: Attribute Safe_Small402311
! Ref: gnat_rm/implementation_defined_attributes attribute-safe-small402470
! Ref: 1a9402470
! Node: Attribute Scalar_Storage_Order402691
! Ref: gnat_rm/implementation_defined_attributes attribute-scalar-storage-order402859
! Ref: 15c402859
! Ref: gnat_rm/implementation_defined_attributes id4402859
! Ref: 1aa402859
! Node: Attribute Simple_Storage_Pool408679
! Ref: gnat_rm/implementation_defined_attributes attribute-simple-storage-pool408842
! Ref: ec408842
! Ref: gnat_rm/implementation_defined_attributes id5408842
! Ref: 1ab408842
! Node: Attribute Small411459
! Ref: gnat_rm/implementation_defined_attributes attribute-small411619
! Ref: 1ac411619
! Node: Attribute Small_Denominator411986
! Ref: gnat_rm/implementation_defined_attributes attribute-small-denominator412142
! Ref: 1ad412142
! Node: Attribute Small_Numerator412418
! Ref: gnat_rm/implementation_defined_attributes attribute-small-numerator412581
! Ref: 1ae412581
! Node: Attribute Storage_Unit412849
! Ref: gnat_rm/implementation_defined_attributes attribute-storage-unit413004
! Ref: 1af413004
! Node: Attribute Stub_Type413188
! Ref: gnat_rm/implementation_defined_attributes attribute-stub-type413354
! Ref: 1b0413354
! Node: Attribute System_Allocator_Alignment414309
! Ref: gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment414474
! Ref: 1b1414474
! Node: Attribute Target_Name414950
! Ref: gnat_rm/implementation_defined_attributes attribute-target-name415116
! Ref: 1b2415116
! Node: Attribute To_Address415491
! Ref: gnat_rm/implementation_defined_attributes attribute-to-address415637
! Ref: 1b3415637
! Node: Attribute To_Any416460
! Ref: gnat_rm/implementation_defined_attributes attribute-to-any416605
! Ref: 1b4416605
! Node: Attribute Type_Class416778
! Ref: gnat_rm/implementation_defined_attributes attribute-type-class416921
! Ref: 1b5416921
! Node: Attribute Type_Key417786
! Ref: gnat_rm/implementation_defined_attributes attribute-type-key417931
! Ref: 1b6417931
! Node: Attribute TypeCode418240
! Ref: gnat_rm/implementation_defined_attributes attribute-typecode418394
! Ref: 1b7418394
! Node: Attribute Unconstrained_Array418571
! Ref: gnat_rm/implementation_defined_attributes attribute-unconstrained-array418741
! Ref: 1b8418741
! Node: Attribute Universal_Literal_String419157
! Ref: gnat_rm/implementation_defined_attributes attribute-universal-literal-string419338
! Ref: 1b9419338
! Node: Attribute Unrestricted_Access420030
! Ref: gnat_rm/implementation_defined_attributes attribute-unrestricted-access420198
! Ref: 1ba420198
! Node: Attribute Update426518
! Ref: gnat_rm/implementation_defined_attributes attribute-update426673
! Ref: 1bb426673
! Node: Attribute Valid_Value429504
! Ref: gnat_rm/implementation_defined_attributes attribute-valid-value429653
! Ref: 1bc429653
! Node: Attribute Valid_Scalars429990
! Ref: gnat_rm/implementation_defined_attributes attribute-valid-scalars430142
! Ref: 1bd430142
! Node: Attribute VADS_Size431800
! Ref: gnat_rm/implementation_defined_attributes attribute-vads-size431951
! Ref: 1be431951
! Node: Attribute Value_Size432592
! Ref: gnat_rm/implementation_defined_attributes attribute-value-size432742
! Ref: 16c432742
! Ref: gnat_rm/implementation_defined_attributes id6432742
! Ref: 1bf432742
! Node: Attribute Wchar_T_Size432987
! Ref: gnat_rm/implementation_defined_attributes attribute-wchar-t-size433137
! Ref: 1c0433137
! Node: Attribute Word_Size433441
! Ref: gnat_rm/implementation_defined_attributes attribute-word-size433562
! Ref: 1c1433562
! Node: Standard and Implementation Defined Restrictions433760
! Ref: gnat_rm/standard_and_implementation_defined_restrictions doc433921
! Ref: 1c2433921
! Ref: gnat_rm/standard_and_implementation_defined_restrictions id1433921
! Ref: 1c3433921
! Ref: gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions433921
! Ref: 9433921
! Node: Partition-Wide Restrictions434452
! Ref: gnat_rm/standard_and_implementation_defined_restrictions id2434605
! Ref: 1c4434605
! Ref: gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions434605
! Ref: 1c5434605
! Node: Immediate_Reclamation436991
! Ref: gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation437117
! Ref: 1c6437117
! Node: Max_Asynchronous_Select_Nesting437430
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting437587
! Ref: 1c7437587
! Node: Max_Entry_Queue_Length437920
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length438077
! Ref: 1c8438077
! Node: Max_Protected_Entries438773
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries438922
! Ref: 1c9438922
! Node: Max_Select_Alternatives439207
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives439357
! Ref: 1ca439357
! Node: Max_Storage_At_Blocking439496
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking439641
! Ref: 1cb439641
! Node: Max_Task_Entries439899
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-task-entries440030
! Ref: 1cc440030
! Node: Max_Tasks440291
! Ref: gnat_rm/standard_and_implementation_defined_restrictions max-tasks440418
! Ref: 1cd440418
! Node: No_Abort_Statements440746
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements440887
! Ref: 1ce440887
! Node: No_Access_Parameter_Allocators441039
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators441192
! Ref: 1cf441192
! Node: No_Access_Subprograms441414
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms441561
! Ref: 1d0441561
! Node: No_Allocators441733
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-allocators441873
! Ref: 1d1441873
! Node: No_Anonymous_Allocators442014
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators442156
! Ref: 1d2442156
! Node: No_Asynchronous_Control442342
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control442482
! Ref: 1d3442482
! Node: No_Calendar442689
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-calendar442821
! Ref: 1d4442821
! Node: No_Coextensions442969
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-coextensions443103
! Ref: 1d5443103
! Node: No_Default_Initialization443246
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization443377
! Ref: 1d6443377
! Node: No_Delay444077
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-delay444206
! Ref: 1d7444206
! Node: No_Dependence444374
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dependence444505
! Ref: 1d8444505
! Node: No_Direct_Boolean_Operators445515
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators445649
! Ref: 1d9445649
! Node: No_Dispatch446049
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatch446190
! Ref: 1da446190
! Node: No_Dispatching_Calls446362
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls446497
! Ref: 1db446497
! Node: No_Dynamic_Attachment448593
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment448738
! Ref: 1dc448738
! Node: No_Dynamic_Priorities449281
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities449440
! Ref: 1dd449440
! Node: No_Entry_Calls_In_Elaboration_Code449579
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code449736
! Ref: 1de449736
! Node: No_Enumeration_Maps450096
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps450253
! Ref: 1df450253
! Node: No_Exception_Handlers450479
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers450626
! Ref: 1e0450626
! Node: No_Exception_Propagation451499
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation451652
! Ref: 1e1451652
! Node: No_Exception_Registration452325
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration452470
! Ref: 1e2452470
! Node: No_Exceptions452951
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exceptions453087
! Ref: 1e3453087
! Node: No_Finalization453314
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-finalization453439
! Ref: 1e4453439
! Node: No_Fixed_Point454271
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point454400
! Ref: 1e5454400
! Node: No_Floating_Point454563
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-floating-point454701
! Ref: 1e6454701
! Node: No_Implicit_Conditionals454873
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals455021
! Ref: 1e7455021
! Node: No_Implicit_Dynamic_Code455656
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code455815
! Ref: 1e8455815
! Node: No_Implicit_Heap_Allocations457036
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations457211
! Ref: 1e9457211
! Node: No_Implicit_Protected_Object_Allocations457355
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations457534
! Ref: 1ea457534
! Node: No_Implicit_Task_Allocations457722
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations457894
! Ref: 1eb457894
! Node: No_Initialize_Scalars458046
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars458183
! Ref: 1ec458183
! Node: No_IO458527
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-io458655
! Ref: 1ed458655
! Node: No_Local_Allocators458873
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators459006
! Ref: 1ee459006
! Node: No_Local_Protected_Objects459220
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects459369
! Ref: 1ef459369
! Node: No_Local_Tagged_Types459552
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types459704
! Ref: 1f0459704
! Node: No_Local_Timing_Events459870
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events460017
! Ref: 1f1460017
! Node: No_Long_Long_Integers460184
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers460333
! Ref: 1f2460333
! Node: No_Multiple_Elaboration460643
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration460792
! Ref: 1f3460792
! Node: No_Nested_Finalization461435
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization461591
! Ref: 1f4461591
! Node: No_Protected_Type_Allocators461732
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators461883
! Ref: 1f5461883
! Node: No_Protected_Types462091
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-types462232
! Ref: 1f6462232
! Node: No_Recursion462408
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-recursion462534
! Ref: 1f7462534
! Node: No_Reentrancy462671
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy462796
! Ref: 1f8462796
! Node: No_Relative_Delay462941
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay463075
! Ref: 1f9463075
! Node: No_Requeue_Statements463303
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements463442
! Ref: 1fa463442
! Node: No_Secondary_Stack463909
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack464051
! Ref: 1fb464051
! Node: No_Select_Statements464456
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-select-statements464609
! Ref: 1fc464609
! Node: No_Specific_Termination_Handlers464814
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers464975
! Ref: 1fd464975
! Node: No_Specification_of_Aspect465175
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect465356
! Ref: 1fe465356
! Node: No_Standard_Allocators_After_Elaboration465577
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration465751
! Ref: 1ff465751
! Node: No_Standard_Storage_Pools466066
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools466237
! Ref: 200466237
! Node: No_Stream_Optimizations466532
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations466673
! Ref: 201466673
! Node: No_Streams467106
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-streams467249
! Ref: 202467249
! Node: No_Tagged_Type_Registration467970
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration468108
! Ref: 203468108
! Node: No_Task_Allocators468590
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators468747
! Ref: 204468747
! Node: No_Task_At_Interrupt_Priority468889
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority469045
! Ref: 205469045
! Node: No_Task_Attributes_Package469347
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package469502
! Ref: 206469502
! Node: No_Task_Hierarchy469974
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy470119
! Ref: 207470119
! Node: No_Task_Termination470266
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-termination470395
! Ref: 208470395
! Node: No_Tasking470496
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tasking470633
! Ref: 209470633
! Node: No_Terminate_Alternatives470953
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives471090
! Ref: 20a471090
! Node: No_Unchecked_Access471227
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access471377
! Ref: 20b471377
! Node: No_Unchecked_Conversion471548
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion471698
! Ref: 20c471698
! Node: No_Unchecked_Deallocation471909
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation472059
! Ref: 20d472059
! Node: No_Use_Of_Attribute472277
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute472420
! Ref: 20e472420
! Node: No_Use_Of_Entity472578
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity472712
! Ref: 20f472712
! Node: No_Use_Of_Pragma473010
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma473138
! Ref: 210473138
! Node: Pure_Barriers473290
! Ref: gnat_rm/standard_and_implementation_defined_restrictions pure-barriers473417
! Ref: 211473417
! Node: Simple_Barriers474122
! Ref: gnat_rm/standard_and_implementation_defined_restrictions simple-barriers474250
! Ref: 212474250
! Node: Static_Priorities474849
! Ref: gnat_rm/standard_and_implementation_defined_restrictions static-priorities474983
! Ref: 213474983
! Node: Static_Storage_Size475204
! Ref: gnat_rm/standard_and_implementation_defined_restrictions static-storage-size475314
! Ref: 214475314
! Node: Program Unit Level Restrictions475515
! Ref: gnat_rm/standard_and_implementation_defined_restrictions id3475668
! Ref: 215475668
! Ref: gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions475668
! Ref: 216475668
! Node: No_Elaboration_Code476427
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code476555
! Ref: 217476555
! Node: No_Dynamic_Accessibility_Checks479154
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks479315
! Ref: 218479315
! Node: No_Dynamic_Sized_Objects481125
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects481281
! Ref: 219481281
! Node: No_Entry_Queue482003
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue482167
! Ref: 21a482167
! Node: No_Implementation_Aspect_Specifications482553
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications482721
! Ref: 21b482721
! Node: No_Implementation_Attributes483015
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes483198
! Ref: 21c483198
! Node: No_Implementation_Identifiers483476
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers483645
! Ref: 21d483645
! Node: No_Implementation_Pragmas483899
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas484070
! Ref: 21e484070
! Node: No_Implementation_Restrictions484336
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions484501
! Ref: 21f484501
! Node: No_Implementation_Units484866
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units485026
! Ref: 220485026
! Node: No_Implicit_Aliasing485272
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing485419
! Ref: 221485419
! Node: No_Implicit_Loops485973
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops486120
! Ref: 222486120
! Node: No_Obsolescent_Features486856
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features487001
! Ref: 223487001
! Node: No_Wide_Characters487208
! Ref: gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters487358
! Ref: 224487358
! Node: Static_Dispatch_Tables487722
! Ref: gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables487857
! Ref: 225487857
! Node: SPARK_05488056
! Ref: gnat_rm/standard_and_implementation_defined_restrictions spark-05488164
! Ref: 226488164
! Node: Implementation Advice488623
! Ref: gnat_rm/implementation_advice doc488789
! Ref: 227488789
! Ref: gnat_rm/implementation_advice id1488789
! Ref: 228488789
! Ref: gnat_rm/implementation_advice implementation-advice488789
! Ref: a488789
! Node: RM 1 1 3 20 Error Detection494694
! Ref: gnat_rm/implementation_advice rm-1-1-3-20-error-detection494812
! Ref: 229494812
! Node: RM 1 1 3 31 Child Units495157
! Ref: gnat_rm/implementation_advice rm-1-1-3-31-child-units495310
! Ref: 22a495310
! Node: RM 1 1 5 12 Bounded Errors495599
! Ref: gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors495742
! Ref: 22b495742
! Node: RM 2 8 16 Pragmas496081
! Ref: gnat_rm/implementation_advice id2496221
! Ref: 22c496221
! Ref: gnat_rm/implementation_advice rm-2-8-16-pragmas496221
! Ref: 22d496221
! Node: RM 2 8 17-19 Pragmas497862
! Ref: gnat_rm/implementation_advice rm-2-8-17-19-pragmas498013
! Ref: 22e498013
! Node: RM 3 5 2 5 Alternative Character Sets498447
! Ref: gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets498606
! Ref: 22f498606
! Node: RM 3 5 4 28 Integer Types499763
! Ref: gnat_rm/implementation_advice rm-3-5-4-28-integer-types499927
! Ref: 230499927
! Node: RM 3 5 4 29 Integer Types500601
! Ref: gnat_rm/implementation_advice rm-3-5-4-29-integer-types500757
! Ref: 231500757
! Node: RM 3 5 5 8 Enumeration Values501075
! Ref: gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values501229
! Ref: 232501229
! Node: RM 3 5 7 17 Float Types501778
! Ref: gnat_rm/implementation_advice rm-3-5-7-17-float-types501942
! Ref: 233501942
! Node: RM 3 6 2 11 Multidimensional Arrays503051
! Ref: gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays503215
! Ref: 234503215
! Node: RM 9 6 30-31 Duration’Small503711
! Ref: gnat_rm/implementation_advice rm-9-6-30-31-duration-small503890
! Ref: 235503890
! Node: RM 10 2 1 12 Consistent Representation504312
! Ref: gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation504490
! Ref: 236504490
! Node: RM 11 4 1 19 Exception Information505280
! Ref: gnat_rm/implementation_advice rm-11-4-1-19-exception-information505461
! Ref: 237505461
! Node: RM 11 5 28 Suppression of Checks506603
! Ref: gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks506782
! Ref: 238506782
! Node: RM 13 1 21-24 Representation Clauses506982
! Ref: gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses507151
! Ref: 239507151
! Node: RM 13 2 6-8 Packed Types508565
! Ref: gnat_rm/implementation_advice rm-13-2-6-8-packed-types508731
! Ref: 23a508731
! Node: RM 13 3 14-19 Address Clauses509960
! Ref: gnat_rm/implementation_advice rm-13-3-14-19-address-clauses510121
! Ref: 23b510121
! Node: RM 13 3 29-35 Alignment Clauses511256
! Ref: gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses511419
! Ref: 23c511419
! Node: RM 13 3 42-43 Size Clauses512620
! Ref: gnat_rm/implementation_advice rm-13-3-42-43-size-clauses512780
! Ref: 23d512780
! Node: RM 13 3 50-56 Size Clauses513245
! Ref: gnat_rm/implementation_advice rm-13-3-50-56-size-clauses513410
! Ref: 23e513410
! Node: RM 13 3 71-73 Component Size Clauses514784
! Ref: gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses514970
! Ref: 23f514970
! Node: RM 13 4 9-10 Enumeration Representation Clauses515778
! Ref: gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses515983
! Ref: 240515983
! Node: RM 13 5 1 17-22 Record Representation Clauses516405
! Ref: gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses516610
! Ref: 241516610
! Node: RM 13 5 2 5 Storage Place Attributes518305
! Ref: gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes518489
! Ref: 242518489
! Node: RM 13 5 3 7-8 Bit Ordering519101
! Ref: gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering519269
! Ref: 243519269
! Node: RM 13 7 37 Address as Private519713
! Ref: gnat_rm/implementation_advice rm-13-7-37-address-as-private519876
! Ref: 244519876
! Node: RM 13 7 1 16 Address Operations520017
! Ref: gnat_rm/implementation_advice rm-13-7-1-16-address-operations520188
! Ref: 245520188
! Node: RM 13 9 14-17 Unchecked Conversion520727
! Ref: gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion520903
! Ref: 246520903
! Node: RM 13 11 23-25 Implicit Heap Usage522295
! Ref: gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage522476
! Ref: 247522476
! Node: RM 13 11 2 17 Unchecked Deallocation523495
! Ref: gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation523683
! Ref: 248523683
! Node: RM 13 13 2 1 6 Stream Oriented Attributes523877
! Ref: gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes524074
! Ref: 249524074
! Node: RM A 1 52 Names of Predefined Numeric Types525038
! Ref: gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types525234
! Ref: 24a525234
! Node: RM A 3 2 49 Ada Characters Handling525672
! Ref: gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling525870
! Ref: 24b525870
! Node: RM A 4 4 106 Bounded-Length String Handling526262
! Ref: gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling526456
! Ref: 24c526456
! Node: RM A 5 2 46-47 Random Number Generation526735
! Ref: gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation526920
! Ref: 24d526920
! Node: RM A 10 7 23 Get_Immediate527752
! Ref: gnat_rm/implementation_advice rm-a-10-7-23-get-immediate527912
! Ref: 24e527912
! Node: RM A 18 Containers528764
! Ref: gnat_rm/implementation_advice rm-a-18-containers528911
! Ref: 24f528911
! Node: RM B 1 39-41 Pragma Export529542
! Ref: gnat_rm/implementation_advice rm-b-1-39-41-pragma-export529694
! Ref: 250529694
! Node: RM B 2 12-13 Package Interfaces531222
! Ref: gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces531387
! Ref: 251531387
! Node: RM B 3 63-71 Interfacing with C532200
! Ref: gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c532374
! Ref: 252532374
! Node: RM B 4 95-98 Interfacing with COBOL534309
! Ref: gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol534489
! Ref: 253534489
! Node: RM B 5 22-26 Interfacing with Fortran535223
! Ref: gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran535411
! Ref: 254535411
! Node: RM C 1 3-5 Access to Machine Operations536499
! Ref: gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations536693
! Ref: 255536693
! Node: RM C 1 10-16 Access to Machine Operations537669
! Ref: gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations537853
! Ref: 256537853
! Node: RM C 3 28 Interrupt Support539123
! Ref: gnat_rm/implementation_advice rm-c-3-28-interrupt-support539311
! Ref: 257539311
! Node: RM C 3 1 20-21 Protected Procedure Handlers539777
! Ref: gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers539954
! Ref: 258539954
! Node: RM C 3 2 25 Package Interrupts540458
! Ref: gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts540646
! Ref: 259540646
! Node: RM C 4 14 Pre-elaboration Requirements541116
! Ref: gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements541290
! Ref: 25a541290
! Node: RM C 5 8 Pragma Discard_Names541730
! Ref: gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names541913
! Ref: 25b541913
! Node: RM C 7 2 30 The Package Task_Attributes542177
! Ref: gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes542348
! Ref: 25c542348
! Node: RM D 3 17 Locking Policies543084
! Ref: gnat_rm/implementation_advice rm-d-3-17-locking-policies543258
! Ref: 25d543258
! Node: RM D 4 16 Entry Queuing Policies543631
! Ref: gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies543794
! Ref: 25e543794
! Node: RM D 6 9-10 Preemptive Abort544058
! Ref: gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort544225
! Ref: 25f544225
! Node: RM D 7 21 Tasking Restrictions544791
! Ref: gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions544953
! Ref: 260544953
! Node: RM D 8 47-49 Monotonic Time545455
! Ref: gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time545635
! Ref: 261545635
! Node: RM E 5 28-29 Partition Communication Subsystem546310
! Ref: gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem546480
! Ref: 262546480
! Node: RM F 7 COBOL Support547174
! Ref: gnat_rm/implementation_advice rm-f-7-cobol-support547347
! Ref: 263547347
! Node: RM F 1 2 Decimal Radix Support547898
! Ref: gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support548038
! Ref: 264548038
! Node: RM G Numerics548352
! Ref: gnat_rm/implementation_advice rm-g-numerics548500
! Ref: 265548500
! Node: RM G 1 1 56-58 Complex Types549030
! Ref: gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types549188
! Ref: 266549188
! Node: RM G 1 2 49 Complex Elementary Functions552017
! Ref: gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions552195
! Ref: 267552195
! Node: RM G 2 4 19 Accuracy Requirements552928
! Ref: gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements553117
! Ref: 268553117
! Node: RM G 2 6 15 Complex Arithmetic Accuracy553732
! Ref: gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy553928
! Ref: 269553928
! Node: RM H 6 15/2 Pragma Partition_Elaboration_Policy554351
! Ref: gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy554505
! Ref: 26a554505
! Node: Implementation Defined Characteristics554887
! Ref: gnat_rm/implementation_defined_characteristics doc555026
! Ref: 26b555026
! Ref: gnat_rm/implementation_defined_characteristics id1555026
! Ref: 26c555026
! Ref: gnat_rm/implementation_defined_characteristics implementation-defined-characteristics555026
! Ref: b555026
! Node: Intrinsic Subprograms606644
! Ref: gnat_rm/intrinsic_subprograms doc606796
! Ref: 26e606796
! Ref: gnat_rm/intrinsic_subprograms id1606796
! Ref: 26f606796
! Ref: gnat_rm/intrinsic_subprograms intrinsic-subprograms606796
! Ref: c606796
! Node: Intrinsic Operators607776
! Ref: gnat_rm/intrinsic_subprograms id2607883
! Ref: 270607883
! Ref: gnat_rm/intrinsic_subprograms intrinsic-operators607883
! Ref: 271607883
! Node: Compilation_ISO_Date608882
! Ref: gnat_rm/intrinsic_subprograms compilation-iso-date609014
! Ref: 272609014
! Ref: gnat_rm/intrinsic_subprograms id3609014
! Ref: 273609014
! Node: Compilation_Date609435
! Ref: gnat_rm/intrinsic_subprograms compilation-date609564
! Ref: 274609564
! Ref: gnat_rm/intrinsic_subprograms id4609564
! Ref: 275609564
! Node: Compilation_Time609684
! Ref: gnat_rm/intrinsic_subprograms compilation-time609809
! Ref: 276609809
! Ref: gnat_rm/intrinsic_subprograms id5609809
! Ref: 277609809
! Node: Enclosing_Entity610216
! Ref: gnat_rm/intrinsic_subprograms enclosing-entity610346
! Ref: 278610346
! Ref: gnat_rm/intrinsic_subprograms id6610346
! Ref: 279610346
! Node: Exception_Information610767
! Ref: gnat_rm/intrinsic_subprograms exception-information610898
! Ref: 27a610898
! Ref: gnat_rm/intrinsic_subprograms id7610898
! Ref: 27b610898
! Node: Exception_Message611328
! Ref: gnat_rm/intrinsic_subprograms exception-message611457
! Ref: 27c611457
! Ref: gnat_rm/intrinsic_subprograms id8611457
! Ref: 27d611457
! Node: Exception_Name611861
! Ref: gnat_rm/intrinsic_subprograms exception-name611973
! Ref: 27e611973
! Ref: gnat_rm/intrinsic_subprograms id9611973
! Ref: 27f611973
! Node: File612352
! Ref: gnat_rm/intrinsic_subprograms file612451
! Ref: 280612451
! Ref: gnat_rm/intrinsic_subprograms id10612451
! Ref: 281612451
! Node: Line612783
! Ref: gnat_rm/intrinsic_subprograms id11612886
! Ref: 282612886
! Ref: gnat_rm/intrinsic_subprograms line612886
! Ref: 283612886
! Node: Shifts and Rotates613229
! Ref: gnat_rm/intrinsic_subprograms id12613343
! Ref: 284613343
! Ref: gnat_rm/intrinsic_subprograms shifts-and-rotates613343
! Ref: 285613343
! Node: Source_Location614581
! Ref: gnat_rm/intrinsic_subprograms id13614682
! Ref: 286614682
! Ref: gnat_rm/intrinsic_subprograms source-location614682
! Ref: 287614682
! Node: Representation Clauses and Pragmas615053
! Ref: gnat_rm/representation_clauses_and_pragmas doc615192
! Ref: 288615192
! Ref: gnat_rm/representation_clauses_and_pragmas id1615192
! Ref: 289615192
! Ref: gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas615192
! Ref: d615192
! Node: Alignment Clauses616378
! Ref: gnat_rm/representation_clauses_and_pragmas alignment-clauses616488
! Ref: 28a616488
! Ref: gnat_rm/representation_clauses_and_pragmas id2616488
! Ref: 28b616488
! Node: Size Clauses620922
! Ref: gnat_rm/representation_clauses_and_pragmas id3621061
! Ref: 28c621061
! Ref: gnat_rm/representation_clauses_and_pragmas size-clauses621061
! Ref: 28d621061
! Node: Storage_Size Clauses623845
! Ref: gnat_rm/representation_clauses_and_pragmas id4623997
! Ref: 28e623997
! Ref: gnat_rm/representation_clauses_and_pragmas storage-size-clauses623997
! Ref: 28f623997
! Node: Size of Variant Record Objects626525
! Ref: gnat_rm/representation_clauses_and_pragmas id5626686
! Ref: 290626686
! Ref: gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects626686
! Ref: 291626686
! Node: Biased Representation629798
! Ref: gnat_rm/representation_clauses_and_pragmas biased-representation629973
! Ref: 292629973
! Ref: gnat_rm/representation_clauses_and_pragmas id6629973
! Ref: 293629973
! Node: Value_Size and Object_Size Clauses631017
! Ref: gnat_rm/representation_clauses_and_pragmas id7631184
! Ref: 294631184
! Ref: gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses631184
! Ref: 295631184
! Node: Component_Size Clauses640838
! Ref: gnat_rm/representation_clauses_and_pragmas component-size-clauses641001
! Ref: 296641001
! Ref: gnat_rm/representation_clauses_and_pragmas id8641001
! Ref: 297641001
! Node: Bit_Order Clauses642635
! Ref: gnat_rm/representation_clauses_and_pragmas bit-order-clauses642800
! Ref: 298642800
! Ref: gnat_rm/representation_clauses_and_pragmas id9642800
! Ref: 299642800
! Node: Effect of Bit_Order on Byte Ordering646245
! Ref: gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering646410
! Ref: 29a646410
! Ref: gnat_rm/representation_clauses_and_pragmas id10646410
! Ref: 29b646410
! Node: Pragma Pack for Arrays655865
! Ref: gnat_rm/representation_clauses_and_pragmas id11656036
! Ref: 29c656036
! Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays656036
! Ref: 29d656036
! Node: Pragma Pack for Records660533
! Ref: gnat_rm/representation_clauses_and_pragmas id12660697
! Ref: 29e660697
! Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records660697
! Ref: 29f660697
! Node: Record Representation Clauses663249
! Ref: gnat_rm/representation_clauses_and_pragmas id13663421
! Ref: 2a0663421
! Ref: gnat_rm/representation_clauses_and_pragmas record-representation-clauses663421
! Ref: 2a1663421
! Node: Handling of Records with Holes666309
! Ref: gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes666477
! Ref: 2a2666477
! Ref: gnat_rm/representation_clauses_and_pragmas id14666477
! Ref: 2a3666477
! Node: Enumeration Clauses668739
! Ref: gnat_rm/representation_clauses_and_pragmas enumeration-clauses668893
! Ref: 2a4668893
! Ref: gnat_rm/representation_clauses_and_pragmas id15668893
! Ref: 2a5668893
! Node: Address Clauses670325
! Ref: gnat_rm/representation_clauses_and_pragmas address-clauses670493
! Ref: 2a6670493
! Ref: gnat_rm/representation_clauses_and_pragmas id16670493
! Ref: 2a7670493
! Node: Use of Address Clauses for Memory-Mapped I/O681985
! Ref: gnat_rm/representation_clauses_and_pragmas id17682172
! Ref: 2a8682172
! Ref: gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o682172
! Ref: 2a9682172
! Node: Effect of Convention on Representation684040
! Ref: gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation684250
! Ref: 2aa684250
! Ref: gnat_rm/representation_clauses_and_pragmas id18684250
! Ref: 2ab684250
! Node: Conventions and Anonymous Access Types687363
! Ref: gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types687575
! Ref: 2ac687575
! Ref: gnat_rm/representation_clauses_and_pragmas id19687575
! Ref: 2ad687575
! Node: Determining the Representations chosen by GNAT690066
! Ref: gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat690231
! Ref: 2ae690231
! Ref: gnat_rm/representation_clauses_and_pragmas id20690231
! Ref: 2af690231
! Node: Standard Library Routines694821
! Ref: gnat_rm/standard_library_routines doc694973
! Ref: 2b0694973
! Ref: gnat_rm/standard_library_routines id1694973
! Ref: 2b1694973
! Ref: gnat_rm/standard_library_routines standard-library-routines694973
! Ref: e694973
! Node: The Implementation of Standard I/O721618
! Ref: gnat_rm/the_implementation_of_standard_i_o doc721752
! Ref: 2b2721752
! Ref: gnat_rm/the_implementation_of_standard_i_o id1721752
! Ref: 2b3721752
! Ref: gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o721752
! Ref: f721752
! Node: Standard I/O Packages723802
! Ref: gnat_rm/the_implementation_of_standard_i_o id2723916
! Ref: 2b4723916
! Ref: gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages723916
! Ref: 2b5723916
! Node: FORM Strings725255
! Ref: gnat_rm/the_implementation_of_standard_i_o form-strings725387
! Ref: 2b6725387
! Ref: gnat_rm/the_implementation_of_standard_i_o id3725387
! Ref: 2b7725387
! Node: Direct_IO726001
! Ref: gnat_rm/the_implementation_of_standard_i_o direct-io726125
! Ref: 2b8726125
! Ref: gnat_rm/the_implementation_of_standard_i_o id4726125
! Ref: 2b9726125
! Node: Sequential_IO726902
! Ref: gnat_rm/the_implementation_of_standard_i_o id5727021
! Ref: 2ba727021
! Ref: gnat_rm/the_implementation_of_standard_i_o sequential-io727021
! Ref: 2bb727021
! Node: Text_IO728858
! Ref: gnat_rm/the_implementation_of_standard_i_o id6728980
! Ref: 2bc728980
! Ref: gnat_rm/the_implementation_of_standard_i_o text-io728980
! Ref: 2bd728980
! Node: Stream Pointer Positioning731468
! Ref: gnat_rm/the_implementation_of_standard_i_o id7731585
! Ref: 2be731585
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning731585
! Ref: 2bf731585
! Node: Reading and Writing Non-Regular Files733032
! Ref: gnat_rm/the_implementation_of_standard_i_o id8733171
! Ref: 2c0733171
! Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files733171
! Ref: 2c1733171
! Node: Get_Immediate734945
! Ref: gnat_rm/the_implementation_of_standard_i_o get-immediate735091
! Ref: 2c2735091
! Ref: gnat_rm/the_implementation_of_standard_i_o id9735091
! Ref: 2c3735091
! Node: Treating Text_IO Files as Streams735784
! Ref: gnat_rm/the_implementation_of_standard_i_o id10735911
! Ref: 2c4735911
! Ref: gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams735911
! Ref: 2c5735911
! Node: Text_IO Extensions736499
! Ref: gnat_rm/the_implementation_of_standard_i_o id11736653
! Ref: 2c6736653
! Ref: gnat_rm/the_implementation_of_standard_i_o text-io-extensions736653
! Ref: 2c7736653
! Node: Text_IO Facilities for Unbounded Strings737270
! Ref: gnat_rm/the_implementation_of_standard_i_o id12737382
! Ref: 2c8737382
! Ref: gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings737382
! Ref: 2c9737382
! Node: Wide_Text_IO738956
! Ref: gnat_rm/the_implementation_of_standard_i_o id13739082
! Ref: 2ca739082
! Ref: gnat_rm/the_implementation_of_standard_i_o wide-text-io739082
! Ref: 2cb739082
! Node: Stream Pointer Positioning<2>746011
! Ref: gnat_rm/the_implementation_of_standard_i_o id14746139
! Ref: 2cc746139
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1746139
! Ref: 2cd746139
! Node: Reading and Writing Non-Regular Files<2>747057
! Ref: gnat_rm/the_implementation_of_standard_i_o id15747185
! Ref: 2ce747185
! Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1747185
! Ref: 2cf747185
! Node: Wide_Wide_Text_IO747594
! Ref: gnat_rm/the_implementation_of_standard_i_o id16747722
! Ref: 2d0747722
! Ref: gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io747722
! Ref: 2d1747722
! Node: Stream Pointer Positioning<3>751371
! Ref: gnat_rm/the_implementation_of_standard_i_o id17751504
! Ref: 2d2751504
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2751504
! Ref: 2d3751504
! Node: Reading and Writing Non-Regular Files<3>752454
! Ref: gnat_rm/the_implementation_of_standard_i_o id18752587
! Ref: 2d4752587
! Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2752587
! Ref: 2d5752587
! Node: Stream_IO752996
! Ref: gnat_rm/the_implementation_of_standard_i_o id19753128
! Ref: 2d6753128
! Ref: gnat_rm/the_implementation_of_standard_i_o stream-io753128
! Ref: 2d7753128
! Node: Text Translation753645
! Ref: gnat_rm/the_implementation_of_standard_i_o id20753772
! Ref: 2d8753772
! Ref: gnat_rm/the_implementation_of_standard_i_o text-translation753772
! Ref: 2d9753772
! Node: Shared Files754572
! Ref: gnat_rm/the_implementation_of_standard_i_o id21754708
! Ref: 2da754708
! Ref: gnat_rm/the_implementation_of_standard_i_o shared-files754708
! Ref: 2db754708
! Node: Filenames encoding757454
! Ref: gnat_rm/the_implementation_of_standard_i_o filenames-encoding757595
! Ref: 2dc757595
! Ref: gnat_rm/the_implementation_of_standard_i_o id22757595
! Ref: 2dd757595
! Node: File content encoding758397
! Ref: gnat_rm/the_implementation_of_standard_i_o file-content-encoding758536
! Ref: 2de758536
! Ref: gnat_rm/the_implementation_of_standard_i_o id23758536
! Ref: 2df758536
! Node: Open Modes759044
! Ref: gnat_rm/the_implementation_of_standard_i_o id24759188
! Ref: 2e0759188
! Ref: gnat_rm/the_implementation_of_standard_i_o open-modes759188
! Ref: 2e1759188
! Node: Operations on C Streams761174
! Ref: gnat_rm/the_implementation_of_standard_i_o id25761321
! Ref: 2e2761321
! Ref: gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams761321
! Ref: 2e3761321
! Node: Interfacing to C Streams768125
! Ref: gnat_rm/the_implementation_of_standard_i_o id26768253
! Ref: 2e4768253
! Ref: gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams768253
! Ref: 2e5768253
! Node: The GNAT Library771565
! Ref: gnat_rm/the_gnat_library doc771704
! Ref: 2e6771704
! Ref: gnat_rm/the_gnat_library id1771704
! Ref: 2e7771704
! Ref: gnat_rm/the_gnat_library the-gnat-library771704
! Ref: 10771704
! Node: Ada Characters Latin_9 a-chlat9 ads784584
! Ref: gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads784722
! Ref: 2e8784722
! Ref: gnat_rm/the_gnat_library id2784722
! Ref: 2e9784722
! Node: Ada Characters Wide_Latin_1 a-cwila1 ads785132
! Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads785319
! Ref: 2ea785319
! Ref: gnat_rm/the_gnat_library id3785319
! Ref: 2eb785319
! Node: Ada Characters Wide_Latin_9 a-cwila9 ads785771
! Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads785968
! Ref: 2ec785968
! Ref: gnat_rm/the_gnat_library id4785968
! Ref: 2ed785968
! Node: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads786422
! Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads786624
! Ref: 2ee786624
! Ref: gnat_rm/the_gnat_library id5786624
! Ref: 2ef786624
! Node: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads787091
! Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads787296
! Ref: 2f0787296
! Ref: gnat_rm/the_gnat_library id6787296
! Ref: 2f1787296
! Node: Ada Containers Bounded_Holders a-coboho ads787765
! Ref: gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads787966
! Ref: 2f2787966
! Ref: gnat_rm/the_gnat_library id7787966
! Ref: 2f3787966
! Node: Ada Command_Line Environment a-colien ads788199
! Ref: gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads788391
! Ref: 2f4788391
! Ref: gnat_rm/the_gnat_library id8788391
! Ref: 2f5788391
! Node: Ada Command_Line Remove a-colire ads788641
! Ref: gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads788833
! Ref: 2f6788833
! Ref: gnat_rm/the_gnat_library id9788833
! Ref: 2f7788833
! Node: Ada Command_Line Response_File a-clrefi ads789206
! Ref: gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads789393
! Ref: 2f8789393
! Ref: gnat_rm/the_gnat_library id10789393
! Ref: 2f9789393
! Node: Ada Direct_IO C_Streams a-diocst ads789805
! Ref: gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads790002
! Ref: 2fa790002
! Ref: gnat_rm/the_gnat_library id11790002
! Ref: 2fb790002
! Node: Ada Exceptions Is_Null_Occurrence a-einuoc ads790353
! Ref: gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads790554
! Ref: 2fc790554
! Ref: gnat_rm/the_gnat_library id12790554
! Ref: 2fd790554
! Node: Ada Exceptions Last_Chance_Handler a-elchha ads790818
! Ref: gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads791020
! Ref: 2fe791020
! Ref: gnat_rm/the_gnat_library id13791020
! Ref: 2ff791020
! Node: Ada Exceptions Traceback a-exctra ads791350
! Ref: gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads791546
! Ref: 300791546
! Ref: gnat_rm/the_gnat_library id14791546
! Ref: 301791546
! Node: Ada Sequential_IO C_Streams a-siocst ads791791
! Ref: gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads791984
! Ref: 302791984
! Ref: gnat_rm/the_gnat_library id15791984
! Ref: 303791984
! Node: Ada Streams Stream_IO C_Streams a-ssicst ads792347
! Ref: gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads792545
! Ref: 304792545
! Ref: gnat_rm/the_gnat_library id16792545
! Ref: 305792545
! Node: Ada Strings Unbounded Text_IO a-suteio ads792912
! Ref: gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads793122
! Ref: 306793122
! Ref: gnat_rm/the_gnat_library id17793122
! Ref: 307793122
! Node: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads793387
! Ref: gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads793615
! Ref: 308793615
! Ref: gnat_rm/the_gnat_library id18793615
! Ref: 309793615
! Node: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads793910
! Ref: gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads794132
! Ref: 30a794132
! Ref: gnat_rm/the_gnat_library id19794132
! Ref: 30b794132
! Node: Ada Task_Initialization a-tasini ads794457
! Ref: gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads794661
! Ref: 30c794661
! Ref: gnat_rm/the_gnat_library id20794661
! Ref: 30d794661
! Node: Ada Text_IO C_Streams a-tiocst ads795030
! Ref: gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads795217
! Ref: 30e795217
! Ref: gnat_rm/the_gnat_library id21795217
! Ref: 30f795217
! Node: Ada Text_IO Reset_Standard_Files a-tirsfi ads795562
! Ref: gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads795753
! Ref: 310795753
! Ref: gnat_rm/the_gnat_library id22795753
! Ref: 311795753
! Node: Ada Wide_Characters Unicode a-wichun ads796172
! Ref: gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads796368
! Ref: 312796368
! Ref: gnat_rm/the_gnat_library id23796368
! Ref: 313796368
! Node: Ada Wide_Text_IO C_Streams a-wtcstr ads796602
! Ref: gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads796803
! Ref: 314796803
! Ref: gnat_rm/the_gnat_library id24796803
! Ref: 315796803
! Node: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads797163
! Ref: gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads797369
! Ref: 316797369
! Ref: gnat_rm/the_gnat_library id25797369
! Ref: 317797369
! Node: Ada Wide_Wide_Characters Unicode a-zchuni ads797803
! Ref: gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads798014
! Ref: 318798014
! Ref: gnat_rm/the_gnat_library id26798014
! Ref: 319798014
! Node: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads798263
! Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads798479
! Ref: 31a798479
! Ref: gnat_rm/the_gnat_library id27798479
! Ref: 31b798479
! Node: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads798854
! Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads799050
! Ref: 31c799050
! Ref: gnat_rm/the_gnat_library id28799050
! Ref: 31d799050
! Node: GNAT Altivec g-altive ads799499
! Ref: gnat_rm/the_gnat_library gnat-altivec-g-altive-ads799688
! Ref: 31e799688
! Ref: gnat_rm/the_gnat_library id29799688
! Ref: 31f799688
! Node: GNAT Altivec Conversions g-altcon ads799919
! Ref: gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads800096
! Ref: 320800096
! Ref: gnat_rm/the_gnat_library id30800096
! Ref: 321800096
! Node: GNAT Altivec Vector_Operations g-alveop ads800265
! Ref: gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads800455
! Ref: 322800455
! Ref: gnat_rm/the_gnat_library id31800455
! Ref: 323800455
! Node: GNAT Altivec Vector_Types g-alvety ads800815
! Ref: gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads801006
! Ref: 324801006
! Ref: gnat_rm/the_gnat_library id32801006
! Ref: 325801006
! Node: GNAT Altivec Vector_Views g-alvevi ads801211
! Ref: gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads801388
! Ref: 326801388
! Ref: gnat_rm/the_gnat_library id33801388
! Ref: 327801388
! Node: GNAT Array_Split g-arrspl ads801759
! Ref: gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads801916
! Ref: 328801916
! Ref: gnat_rm/the_gnat_library id34801916
! Ref: 329801916
! Node: GNAT AWK g-awk ads802171
! Ref: gnat_rm/the_gnat_library gnat-awk-g-awk-ads802321
! Ref: 32a802321
! Ref: gnat_rm/the_gnat_library id35802321
! Ref: 32b802321
! Node: GNAT Binary_Search g-binsea ads802616
! Ref: gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads802771
! Ref: 32c802771
! Ref: gnat_rm/the_gnat_library id36802771
! Ref: 32d802771
! Node: GNAT Bind_Environment g-binenv ads802991
! Ref: gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads803163
! Ref: 32e803163
! Ref: gnat_rm/the_gnat_library id37803163
! Ref: 32f803163
! Node: GNAT Branch_Prediction g-brapre ads803416
! Ref: gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads803590
! Ref: 330803590
! Ref: gnat_rm/the_gnat_library id38803590
! Ref: 331803590
! Node: GNAT Bounded_Buffers g-boubuf ads803774
! Ref: gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads803949
! Ref: 332803949
! Ref: gnat_rm/the_gnat_library id39803949
! Ref: 333803949
! Node: GNAT Bounded_Mailboxes g-boumai ads804217
! Ref: gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads804386
! Ref: 334804386
! Ref: gnat_rm/the_gnat_library id40804386
! Ref: 335804386
! Node: GNAT Bubble_Sort g-bubsor ads804570
! Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads804737
! Ref: 336804737
! Ref: gnat_rm/the_gnat_library id41804737
! Ref: 337804737
! Node: GNAT Bubble_Sort_A g-busora ads805009
! Ref: gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads805172
! Ref: 338805172
! Ref: gnat_rm/the_gnat_library id42805172
! Ref: 339805172
! Node: GNAT Bubble_Sort_G g-busorg ads805551
! Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads805718
! Ref: 33a805718
! Ref: gnat_rm/the_gnat_library id43805718
! Ref: 33b805718
! Node: GNAT Byte_Order_Mark g-byorma ads806062
! Ref: gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads806229
! Ref: 33c806229
! Ref: gnat_rm/the_gnat_library id44806229
! Ref: 33d806229
! Node: GNAT Byte_Swapping g-bytswa ads806599
! Ref: gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads806761
! Ref: 33e806761
! Ref: gnat_rm/the_gnat_library id45806761
! Ref: 33f806761
! Node: GNAT Calendar g-calend ads806996
! Ref: gnat_rm/the_gnat_library gnat-calendar-g-calend-ads807159
! Ref: 340807159
! Ref: gnat_rm/the_gnat_library id46807159
! Ref: 341807159
! Node: GNAT Calendar Time_IO g-catiio ads807496
! Ref: gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads807650
! Ref: 342807650
! Ref: gnat_rm/the_gnat_library id47807650
! Ref: 343807650
! Node: GNAT CRC32 g-crc32 ads807753
! Ref: gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads807908
! Ref: 344807908
! Ref: gnat_rm/the_gnat_library id48807908
! Ref: 345807908
! Node: GNAT Case_Util g-casuti ads808234
! Ref: gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads808373
! Ref: 346808373
! Ref: gnat_rm/the_gnat_library id49808373
! Ref: 347808373
! Node: GNAT CGI g-cgi ads808616
! Ref: gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads808761
! Ref: 348808761
! Ref: gnat_rm/the_gnat_library id50808761
! Ref: 349808761
! Node: GNAT CGI Cookie g-cgicoo ads809143
! Ref: gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads809288
! Ref: 34a809288
! Ref: gnat_rm/the_gnat_library id51809288
! Ref: 34b809288
! Node: GNAT CGI Debug g-cgideb ads809585
! Ref: gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads809742
! Ref: 34c809742
! Ref: gnat_rm/the_gnat_library id52809742
! Ref: 34d809742
! Node: GNAT Command_Line g-comlin ads809924
! Ref: gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads810087
! Ref: 34e810087
! Ref: gnat_rm/the_gnat_library id53810087
! Ref: 34f810087
! Node: GNAT Compiler_Version g-comver ads810375
! Ref: gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads810535
! Ref: 350810535
! Ref: gnat_rm/the_gnat_library id54810535
! Ref: 351810535
! Node: GNAT Ctrl_C g-ctrl_c ads810939
! Ref: gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads811104
! Ref: 352811104
! Ref: gnat_rm/the_gnat_library id55811104
! Ref: 353811104
! Node: GNAT Current_Exception g-curexc ads811250
! Ref: gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads811410
! Ref: 354811410
! Ref: gnat_rm/the_gnat_library id56811410
! Ref: 355811410
! Node: GNAT Debug_Pools g-debpoo ads811826
! Ref: gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads811995
! Ref: 356811995
! Ref: gnat_rm/the_gnat_library id57811995
! Ref: 357811995
! Node: GNAT Debug_Utilities g-debuti ads812254
! Ref: gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads812419
! Ref: 358812419
! Ref: gnat_rm/the_gnat_library id58812419
! Ref: 359812419
! Node: GNAT Decode_String g-decstr ads812702
! Ref: gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads812874
! Ref: 35a812874
! Ref: gnat_rm/the_gnat_library id59812874
! Ref: 35b812874
! Node: GNAT Decode_UTF8_String g-deutst ads813382
! Ref: gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads813559
! Ref: 35c813559
! Ref: gnat_rm/the_gnat_library id60813559
! Ref: 35d813559
! Node: GNAT Directory_Operations g-dirope ads813729
! Ref: gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads813923
! Ref: 35e813923
! Ref: gnat_rm/the_gnat_library id61813923
! Ref: 35f813923
! Node: GNAT Directory_Operations Iteration g-diopit ads814197
! Ref: gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads814388
! Ref: 360814388
! Ref: gnat_rm/the_gnat_library id62814388
! Ref: 361814388
! Node: GNAT Dynamic_HTables g-dynhta ads814629
! Ref: gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads814814
! Ref: 362814814
! Ref: gnat_rm/the_gnat_library id63814814
! Ref: 363814814
! Node: GNAT Dynamic_Tables g-dyntab ads815395
! Ref: gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads815563
! Ref: 364815563
! Ref: gnat_rm/the_gnat_library id64815563
! Ref: 365815563
! Node: GNAT Encode_String g-encstr ads816046
! Ref: gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads816217
! Ref: 366816217
! Ref: gnat_rm/the_gnat_library id65816217
! Ref: 367816217
! Node: GNAT Encode_UTF8_String g-enutst ads816596
! Ref: gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads816770
! Ref: 368816770
! Ref: gnat_rm/the_gnat_library id66816770
! Ref: 369816770
! Node: GNAT Exception_Actions g-excact ads816940
! Ref: gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads817117
! Ref: 36a817117
! Ref: gnat_rm/the_gnat_library id67817117
! Ref: 36b817117
! Node: GNAT Exception_Traces g-exctra ads817428
! Ref: gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads817597
! Ref: 36c817597
! Ref: gnat_rm/the_gnat_library id68817597
! Ref: 36d817597
! Node: GNAT Exceptions g-except ads817788
! Ref: gnat_rm/the_gnat_library gnat-exceptions-g-except-ads817946
! Ref: 36e817946
! Ref: gnat_rm/the_gnat_library id69817946
! Ref: 36f817946
! Node: GNAT Expect g-expect ads818440
! Ref: gnat_rm/the_gnat_library gnat-expect-g-expect-ads818592
! Ref: 370818592
! Ref: gnat_rm/the_gnat_library id70818592
! Ref: 371818592
! Node: GNAT Expect TTY g-exptty ads819123
! Ref: gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads819278
! Ref: 372819278
! Ref: gnat_rm/the_gnat_library id71819278
! Ref: 373819278
! Node: GNAT Float_Control g-flocon ads819586
! Ref: gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads819751
! Ref: 374819751
! Ref: gnat_rm/the_gnat_library id72819751
! Ref: 375819751
! Node: GNAT Formatted_String g-forstr ads820130
! Ref: gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads820312
! Ref: 376820312
! Ref: gnat_rm/the_gnat_library id73820312
! Ref: 377820312
! Node: GNAT Generic_Fast_Math_Functions g-gfmafu ads820703
! Ref: gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads820881
! Ref: 378820881
! Ref: gnat_rm/the_gnat_library id74820881
! Ref: 379820881
! Node: GNAT Heap_Sort g-heasor ads821554
! Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads821727
! Ref: 37a821727
! Ref: gnat_rm/the_gnat_library id75821727
! Ref: 37b821727
! Node: GNAT Heap_Sort_A g-hesora ads822105
! Ref: gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads822262
! Ref: 37c822262
! Ref: gnat_rm/the_gnat_library id76822262
! Ref: 37d822262
! Node: GNAT Heap_Sort_G g-hesorg ads822755
! Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads822909
! Ref: 37e822909
! Ref: gnat_rm/the_gnat_library id77822909
! Ref: 37f822909
! Node: GNAT HTable g-htable ads823247
! Ref: gnat_rm/the_gnat_library gnat-htable-g-htable-ads823388
! Ref: 380823388
! Ref: gnat_rm/the_gnat_library id78823388
! Ref: 381823388
! Node: GNAT IO g-io ads823663
! Ref: gnat_rm/the_gnat_library gnat-io-g-io-ads823799
! Ref: 382823799
! Ref: gnat_rm/the_gnat_library id79823799
! Ref: 383823799
! Node: GNAT IO_Aux g-io_aux ads824108
! Ref: gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads824248
! Ref: 384824248
! Ref: gnat_rm/the_gnat_library id80824248
! Ref: 385824248
! Node: GNAT Lock_Files g-locfil ads824474
! Ref: gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads824636
! Ref: 386824636
! Ref: gnat_rm/the_gnat_library id81824636
! Ref: 387824636
! Node: GNAT MBBS_Discrete_Random g-mbdira ads824841
! Ref: gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads825014
! Ref: 388825014
! Ref: gnat_rm/the_gnat_library id82825014
! Ref: 389825014
! Node: GNAT MBBS_Float_Random g-mbflra ads825251
! Ref: gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads825414
! Ref: 38a825414
! Ref: gnat_rm/the_gnat_library id83825414
! Ref: 38b825414
! Node: GNAT MD5 g-md5 ads825642
! Ref: gnat_rm/the_gnat_library gnat-md5-g-md5-ads825796
! Ref: 38c825796
! Ref: gnat_rm/the_gnat_library id84825796
! Ref: 38d825796
! Node: GNAT Memory_Dump g-memdum ads826030
! Ref: gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads826188
! Ref: 38e826188
! Ref: gnat_rm/the_gnat_library id85826188
! Ref: 38f826188
! Node: GNAT Most_Recent_Exception g-moreex ads826423
! Ref: gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads826587
! Ref: 390826587
! Ref: gnat_rm/the_gnat_library id86826587
! Ref: 391826587
! Node: GNAT OS_Lib g-os_lib ads826887
! Ref: gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads827063
! Ref: 392827063
! Ref: gnat_rm/the_gnat_library id87827063
! Ref: 393827063
! Node: GNAT Perfect_Hash_Generators g-pehage ads827394
! Ref: gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads827563
! Ref: 394827563
! Ref: gnat_rm/the_gnat_library id88827563
! Ref: 395827563
! Node: GNAT Random_Numbers g-rannum ads828215
! Ref: gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads828384
! Ref: 396828384
! Ref: gnat_rm/the_gnat_library id89828384
! Ref: 397828384
! Node: GNAT Regexp g-regexp ads828609
! Ref: gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads828763
! Ref: 26d828763
! Ref: gnat_rm/the_gnat_library id90828763
! Ref: 398828763
! Node: GNAT Registry g-regist ads829119
! Ref: gnat_rm/the_gnat_library gnat-registry-g-regist-ads829265
! Ref: 399829265
! Ref: gnat_rm/the_gnat_library id91829265
! Ref: 39a829265
! Node: GNAT Regpat g-regpat ads829619
! Ref: gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads829771
! Ref: 39b829771
! Ref: gnat_rm/the_gnat_library id92829771
! Ref: 39c829771
! Node: GNAT Rewrite_Data g-rewdat ads830060
! Ref: gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads830224
! Ref: 39d830224
! Ref: gnat_rm/the_gnat_library id93830224
! Ref: 39e830224
! Node: GNAT Secondary_Stack_Info g-sestin ads830588
! Ref: gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads830756
! Ref: 39f830756
! Ref: gnat_rm/the_gnat_library id94830756
! Ref: 3a0830756
! Node: GNAT Semaphores g-semaph ads830962
! Ref: gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads831139
! Ref: 3a1831139
! Ref: gnat_rm/the_gnat_library id95831139
! Ref: 3a2831139
! Node: GNAT Serial_Communications g-sercom ads831302
! Ref: gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads831461
! Ref: 3a3831461
! Ref: gnat_rm/the_gnat_library id96831461
! Ref: 3a4831461
! Node: GNAT SHA1 g-sha1 ads831697
! Ref: gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads831852
! Ref: 3a5831852
! Ref: gnat_rm/the_gnat_library id97831852
! Ref: 3a6831852
! Node: GNAT SHA224 g-sha224 ads832109
! Ref: gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads832249
! Ref: 3a7832249
! Ref: gnat_rm/the_gnat_library id98832249
! Ref: 3a8832249
! Node: GNAT SHA256 g-sha256 ads832505
! Ref: gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads832649
! Ref: 3a9832649
! Ref: gnat_rm/the_gnat_library id99832649
! Ref: 3aa832649
! Node: GNAT SHA384 g-sha384 ads832905
! Ref: gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads833049
! Ref: 3ab833049
! Ref: gnat_rm/the_gnat_library id100833049
! Ref: 3ac833049
! Node: GNAT SHA512 g-sha512 ads833305
! Ref: gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads833450
! Ref: 3ad833450
! Ref: gnat_rm/the_gnat_library id101833450
! Ref: 3ae833450
! Node: GNAT Signals g-signal ads833708
! Ref: gnat_rm/the_gnat_library gnat-signals-g-signal-ads833854
! Ref: 3af833854
! Ref: gnat_rm/the_gnat_library id102833854
! Ref: 3b0833854
! Node: GNAT Sockets g-socket ads834029
! Ref: gnat_rm/the_gnat_library gnat-sockets-g-socket-ads834180
! Ref: 3b1834180
! Ref: gnat_rm/the_gnat_library id103834180
! Ref: 3b2834180
! Node: GNAT Source_Info g-souinf ads834576
! Ref: gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads834736
! Ref: 3b3834736
! Ref: gnat_rm/the_gnat_library id104834736
! Ref: 3b4834736
! Node: GNAT Spelling_Checker g-speche ads835102
! Ref: gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads835279
! Ref: 3b5835279
! Ref: gnat_rm/the_gnat_library id105835279
! Ref: 3b6835279
! Node: GNAT Spelling_Checker_Generic g-spchge ads835491
! Ref: gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads835673
! Ref: 3b7835673
! Ref: gnat_rm/the_gnat_library id106835673
! Ref: 3b8835673
! Node: GNAT Spitbol Patterns g-spipat ads835953
! Ref: gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads836126
! Ref: 3b9836126
! Ref: gnat_rm/the_gnat_library id107836126
! Ref: 3ba836126
! Node: GNAT Spitbol g-spitbo ads836533
! Ref: gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads836703
! Ref: 3bb836703
! Ref: gnat_rm/the_gnat_library id108836703
! Ref: 3bc836703
! Node: GNAT Spitbol Table_Boolean g-sptabo ads837113
! Ref: gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads837288
! Ref: 3bd837288
! Ref: gnat_rm/the_gnat_library id109837288
! Ref: 3be837288
! Node: GNAT Spitbol Table_Integer g-sptain ads837558
! Ref: gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads837747
! Ref: 3bf837747
! Ref: gnat_rm/the_gnat_library id110837747
! Ref: 3c0837747
! Node: GNAT Spitbol Table_VString g-sptavs ads838030
! Ref: gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads838198
! Ref: 3c1838198
! Ref: gnat_rm/the_gnat_library id111838198
! Ref: 3c2838198
! Node: GNAT SSE g-sse ads838485
! Ref: gnat_rm/the_gnat_library gnat-sse-g-sse-ads838648
! Ref: 3c3838648
! Ref: gnat_rm/the_gnat_library id112838648
! Ref: 3c4838648
! Node: GNAT SSE Vector_Types g-ssvety ads838975
! Ref: gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads839128
! Ref: 3c5839128
! Ref: gnat_rm/the_gnat_library id113839128
! Ref: 3c6839128
! Node: GNAT String_Hash g-strhas ads839288
! Ref: gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads839448
! Ref: 3c7839448
! Ref: gnat_rm/the_gnat_library id114839448
! Ref: 3c8839448
! Node: GNAT Strings g-string ads839670
! Ref: gnat_rm/the_gnat_library gnat-strings-g-string-ads839826
! Ref: 3c9839826
! Ref: gnat_rm/the_gnat_library id115839826
! Ref: 3ca839826
! Node: GNAT String_Split g-strspl ads840041
! Ref: gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads840190
! Ref: 3cb840190
! Ref: gnat_rm/the_gnat_library id116840190
! Ref: 3cc840190
! Node: GNAT Table g-table ads840509
! Ref: gnat_rm/the_gnat_library gnat-table-g-table-ads840660
! Ref: 3cd840660
! Ref: gnat_rm/the_gnat_library id117840660
! Ref: 3ce840660
! Node: GNAT Task_Lock g-tasloc ads841143
! Ref: gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads841292
! Ref: 3cf841292
! Ref: gnat_rm/the_gnat_library id118841292
! Ref: 3d0841292
! Node: GNAT Time_Stamp g-timsta ads841574
! Ref: gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads841726
! Ref: 3d1841726
! Ref: gnat_rm/the_gnat_library id119841726
! Ref: 3d2841726
! Node: GNAT Threads g-thread ads842052
! Ref: gnat_rm/the_gnat_library gnat-threads-g-thread-ads842204
! Ref: 3d3842204
! Ref: gnat_rm/the_gnat_library id120842204
! Ref: 3d4842204
! Node: GNAT Traceback g-traceb ads842560
! Ref: gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads842720
! Ref: 3d5842720
! Ref: gnat_rm/the_gnat_library id121842720
! Ref: 3d6842720
! Node: GNAT Traceback Symbolic g-trasym ads842922
! Ref: gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads843081
! Ref: 3d7843081
! Ref: gnat_rm/the_gnat_library id122843081
! Ref: 3d8843081
! Node: GNAT UTF_32 g-utf_32 ads843190
! Ref: gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads843363
! Ref: 3d9843363
! Ref: gnat_rm/the_gnat_library id123843363
! Ref: 3da843363
! Node: GNAT UTF_32_Spelling_Checker g-u3spch ads843927
! Ref: gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads844103
! Ref: 3db844103
! Ref: gnat_rm/the_gnat_library id124844103
! Ref: 3dc844103
! Node: GNAT Wide_Spelling_Checker g-wispch ads844439
! Ref: gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads844626
! Ref: 3dd844626
! Ref: gnat_rm/the_gnat_library id125844626
! Ref: 3de844626
! Node: GNAT Wide_String_Split g-wistsp ads844858
! Ref: gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads845048
! Ref: 3df845048
! Ref: gnat_rm/the_gnat_library id126845048
! Ref: 3e0845048
! Node: GNAT Wide_Wide_Spelling_Checker g-zspche ads845387
! Ref: gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads845578
! Ref: 3e1845578
! Ref: gnat_rm/the_gnat_library id127845578
! Ref: 3e2845578
! Node: GNAT Wide_Wide_String_Split g-zistsp ads845830
! Ref: gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads846022
! Ref: 3e3846022
! Ref: gnat_rm/the_gnat_library id128846022
! Ref: 3e4846022
! Node: Interfaces C Extensions i-cexten ads846381
! Ref: gnat_rm/the_gnat_library id129846562
! Ref: 3e5846562
! Ref: gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads846562
! Ref: 3e6846562
! Node: Interfaces C Streams i-cstrea ads846818
! Ref: gnat_rm/the_gnat_library id130846997
! Ref: 3e7846997
! Ref: gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads846997
! Ref: 3e8846997
! Node: Interfaces Packed_Decimal i-pacdec ads847179
! Ref: gnat_rm/the_gnat_library id131847353
! Ref: 3e9847353
! Ref: gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads847353
! Ref: 3ea847353
! Node: Interfaces VxWorks i-vxwork ads847604
! Ref: gnat_rm/the_gnat_library id132847791
! Ref: 3eb847791
! Ref: gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads847791
! Ref: 3ec847791
! Node: Interfaces VxWorks Int_Connection i-vxinco ads848028
! Ref: gnat_rm/the_gnat_library id133848211
! Ref: 3ed848211
! Ref: gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads848211
! Ref: 3ee848211
! Node: Interfaces VxWorks IO i-vxwoio ads848471
! Ref: gnat_rm/the_gnat_library id134848656
! Ref: 3ef848656
! Ref: gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads848656
! Ref: 3f0848656
! Node: System Address_Image s-addima ads848980
! Ref: gnat_rm/the_gnat_library id135849149
! Ref: 3f1849149
! Ref: gnat_rm/the_gnat_library system-address-image-s-addima-ads849149
! Ref: 3f2849149
! Node: System Assertions s-assert ads849381
! Ref: gnat_rm/the_gnat_library id136849551
! Ref: 3f3849551
! Ref: gnat_rm/the_gnat_library system-assertions-s-assert-ads849551
! Ref: 3f4849551
! Node: System Atomic_Counters s-atocou ads849817
! Ref: gnat_rm/the_gnat_library id137849980
! Ref: 3f5849980
! Ref: gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads849980
! Ref: 3f6849980
! Node: System Memory s-memory ads850426
! Ref: gnat_rm/the_gnat_library id138850594
! Ref: 3f7850594
! Ref: gnat_rm/the_gnat_library system-memory-s-memory-ads850594
! Ref: 3f8850594
! Node: System Multiprocessors s-multip ads851202
! Ref: gnat_rm/the_gnat_library id139851390
! Ref: 3f9851390
! Ref: gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads851390
! Ref: 3fa851390
! Node: System Multiprocessors Dispatching_Domains s-mudido ads851688
! Ref: gnat_rm/the_gnat_library id140851889
! Ref: 3fb851889
! Ref: gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads851889
! Ref: 3fc851889
! Node: System Partition_Interface s-parint ads852227
! Ref: gnat_rm/the_gnat_library id141852424
! Ref: 3fd852424
! Ref: gnat_rm/the_gnat_library system-partition-interface-s-parint-ads852424
! Ref: 3fe852424
! Node: System Pool_Global s-pooglo ads852685
! Ref: gnat_rm/the_gnat_library id142852857
! Ref: 3ff852857
! Ref: gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads852857
! Ref: 400852857
! Node: System Pool_Local s-pooloc ads853199
! Ref: gnat_rm/the_gnat_library id143853364
! Ref: 401853364
! Ref: gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads853364
! Ref: 402853364
! Node: System Restrictions s-restri ads853739
! Ref: gnat_rm/the_gnat_library id144853899
! Ref: 403853899
! Ref: gnat_rm/the_gnat_library system-restrictions-s-restri-ads853899
! Ref: 404853899
! Node: System Rident s-rident ads854337
! Ref: gnat_rm/the_gnat_library id145854505
! Ref: 405854505
! Ref: gnat_rm/the_gnat_library system-rident-s-rident-ads854505
! Ref: 406854505
! Node: System Strings Stream_Ops s-ststop ads854904
! Ref: gnat_rm/the_gnat_library id146855074
! Ref: 407855074
! Ref: gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads855074
! Ref: 408855074
! Node: System Unsigned_Types s-unstyp ads855469
! Ref: gnat_rm/the_gnat_library id147855640
! Ref: 409855640
! Ref: gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads855640
! Ref: 40a855640
! Node: System Wch_Cnv s-wchcnv ads856076
! Ref: gnat_rm/the_gnat_library id148856236
! Ref: 40b856236
! Ref: gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads856236
! Ref: 40c856236
! Node: System Wch_Con s-wchcon ads856579
! Ref: gnat_rm/the_gnat_library id149856696
! Ref: 40d856696
! Ref: gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads856696
! Ref: 40e856696
! Node: Interfacing to Other Languages856982
! Ref: gnat_rm/interfacing_to_other_languages doc857112
! Ref: 40f857112
! Ref: gnat_rm/interfacing_to_other_languages id1857112
! Ref: 410857112
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-other-languages857112
! Ref: 11857112
! Node: Interfacing to C857464
! Ref: gnat_rm/interfacing_to_other_languages id2857575
! Ref: 411857575
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-c857575
! Ref: 412857575
! Node: Interfacing to C++860378
! Ref: gnat_rm/interfacing_to_other_languages id3860518
! Ref: 49860518
! Ref: gnat_rm/interfacing_to_other_languages id4860518
! Ref: 413860518
! Node: Interfacing to COBOL862726
! Ref: gnat_rm/interfacing_to_other_languages id5862872
! Ref: 414862872
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-cobol862872
! Ref: 415862872
! Node: Interfacing to Fortran863016
! Ref: gnat_rm/interfacing_to_other_languages id6863176
! Ref: 416863176
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-fortran863176
! Ref: 417863176
! Node: Interfacing to non-GNAT Ada code863502
! Ref: gnat_rm/interfacing_to_other_languages id7863633
! Ref: 418863633
! Ref: gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code863633
! Ref: 419863633
! Node: Specialized Needs Annexes864660
! Ref: gnat_rm/specialized_needs_annexes doc864813
! Ref: 41a864813
! Ref: gnat_rm/specialized_needs_annexes id1864813
! Ref: 41b864813
! Ref: gnat_rm/specialized_needs_annexes specialized-needs-annexes864813
! Ref: 12864813
! Node: Implementation of Specific Ada Features865884
! Ref: gnat_rm/implementation_of_specific_ada_features doc866042
! Ref: 41c866042
! Ref: gnat_rm/implementation_of_specific_ada_features id1866042
! Ref: 41d866042
! Ref: gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features866042
! Ref: 13866042
! Node: Machine Code Insertions866531
! Ref: gnat_rm/implementation_of_specific_ada_features id2866670
! Ref: 41e866670
! Ref: gnat_rm/implementation_of_specific_ada_features machine-code-insertions866670
! Ref: 175866670
! Node: GNAT Implementation of Tasking874088
! Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking874282
! Ref: 41f874282
! Ref: gnat_rm/implementation_of_specific_ada_features id3874282
! Ref: 420874282
! Node: Mapping Ada Tasks onto the Underlying Kernel Threads874696
! Ref: gnat_rm/implementation_of_specific_ada_features id4874869
! Ref: 421874869
! Ref: gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads874869
! Ref: 422874869
! Node: Ensuring Compliance with the Real-Time Annex877025
! Ref: gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex877235
! Ref: 423877235
! Ref: gnat_rm/implementation_of_specific_ada_features id5877235
! Ref: 424877235
! Node: Support for Locking Policies879147
! Ref: gnat_rm/implementation_of_specific_ada_features support-for-locking-policies879296
! Ref: 425879296
! Node: GNAT Implementation of Shared Passive Packages880455
! Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages880662
! Ref: 426880662
! Ref: gnat_rm/implementation_of_specific_ada_features id6880662
! Ref: 427880662
! Node: Code Generation for Array Aggregates883780
! Ref: gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates884017
! Ref: 428884017
! Ref: gnat_rm/implementation_of_specific_ada_features id7884017
! Ref: 429884017
! Node: Static constant aggregates with static bounds885440
! Ref: gnat_rm/implementation_of_specific_ada_features id8885620
! Ref: 42a885620
! Ref: gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds885620
! Ref: 42b885620
! Node: Constant aggregates with unconstrained nominal types887023
! Ref: gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types887241
! Ref: 42c887241
! Ref: gnat_rm/implementation_of_specific_ada_features id9887241
! Ref: 42d887241
! Node: Aggregates with static bounds887741
! Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds887946
! Ref: 42e887946
! Ref: gnat_rm/implementation_of_specific_ada_features id10887946
! Ref: 42f887946
! Node: Aggregates with nonstatic bounds888580
! Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds888768
! Ref: 430888768
! Ref: gnat_rm/implementation_of_specific_ada_features id11888768
! Ref: 431888768
! Node: Aggregates in assignment statements889176
! Ref: gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements889326
! Ref: 432889326
! Ref: gnat_rm/implementation_of_specific_ada_features id12889326
! Ref: 433889326
! Node: The Size of Discriminated Records with Default Discriminants890584
! Ref: gnat_rm/implementation_of_specific_ada_features id13890807
! Ref: 434890807
! Ref: gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants890807
! Ref: 435890807
! Node: Image Values For Nonscalar Types893751
! Ref: gnat_rm/implementation_of_specific_ada_features id14893984
! Ref: 436893984
! Ref: gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types893984
! Ref: 437893984
! Node: Strict Conformance to the Ada Reference Manual895047
! Ref: gnat_rm/implementation_of_specific_ada_features id15895211
! Ref: 438895211
! Ref: gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual895211
! Ref: 439895211
! Node: Implementation of Ada 2012 Features896642
! Ref: gnat_rm/implementation_of_ada_2012_features doc896799
! Ref: 43a896799
! Ref: gnat_rm/implementation_of_ada_2012_features id1896799
! Ref: 43b896799
! Ref: gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features896799
! Ref: 14896799
! Node: GNAT language extensions945245
! Ref: gnat_rm/gnat_language_extensions doc945390
! Ref: 43c945390
! Ref: gnat_rm/gnat_language_extensions gnat-language-extensions945390
! Ref: 43d945390
! Ref: gnat_rm/gnat_language_extensions id1945390
! Ref: 43e945390
! Node: How to activate the extended GNAT Ada superset946141
! Ref: gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset946276
! Ref: 43f946276
! Node: Curated Extensions947197
! Ref: gnat_rm/gnat_language_extensions curated-extensions947373
! Ref: 440947373
! Ref: gnat_rm/gnat_language_extensions curated-language-extensions947373
! Ref: 69947373
! Node: Local Declarations Without Block947824
! Ref: gnat_rm/gnat_language_extensions local-declarations-without-block947948
! Ref: 441947948
! Node: Conditional when constructs948450
! Ref: gnat_rm/gnat_language_extensions conditional-when-constructs948604
! Ref: 442948604
! Node: Case pattern matching950030
! Ref: gnat_rm/gnat_language_extensions case-pattern-matching950199
! Ref: 443950199
! Node: Fixed lower bounds for array types and subtypes955335
! Ref: gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes955552
! Ref: 444955552
! Node: Prefixed-view notation for calls to primitive subprograms of untagged types957511
! Ref: gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types957755
! Ref: 445957755
! Node: Expression defaults for generic formal functions959799
! Ref: gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions960016
! Ref: 446960016
! Node: String interpolation960860
! Ref: gnat_rm/gnat_language_extensions string-interpolation961043
! Ref: 447961043
! Node: Constrained attribute for generic objects964001
! Ref: gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects964172
! Ref: 448964172
! Node: Static aspect on intrinsic functions964417
! Ref: gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions964559
! Ref: 449964559
! Node: Experimental Language Extensions964876
! Ref: gnat_rm/gnat_language_extensions experimental-language-extensions964997
! Ref: 6a964997
! Ref: gnat_rm/gnat_language_extensions id2964997
! Ref: 44a964997
! Node: Pragma Storage_Model965141
! Ref: gnat_rm/gnat_language_extensions pragma-storage-model965267
! Ref: 44b965267
! Node: Simpler accessibility model965740
! Ref: gnat_rm/gnat_language_extensions simpler-accessibility-model965866
! Ref: 44c965866
! Node: Security Hardening Features966352
! Ref: gnat_rm/security_hardening_features doc966482
! Ref: 44d966482
! Ref: gnat_rm/security_hardening_features id1966482
! Ref: 44e966482
! Ref: gnat_rm/security_hardening_features security-hardening-features966482
! Ref: 15966482
! Node: Register Scrubbing966848
! Ref: gnat_rm/security_hardening_features register-scrubbing966955
! Ref: 44f966955
! Node: Stack Scrubbing968149
! Ref: gnat_rm/security_hardening_features stack-scrubbing968286
! Ref: 450968286
! Node: Hardened Conditionals973267
! Ref: gnat_rm/security_hardening_features hardened-conditionals973403
! Ref: 451973403
! Node: Hardened Booleans976005
! Ref: gnat_rm/security_hardening_features hardened-booleans976149
! Ref: 452976149
! Node: Control Flow Redundancy978027
! Ref: gnat_rm/security_hardening_features control-flow-redundancy978141
! Ref: 453978141
! Node: Obsolescent Features984273
! Ref: gnat_rm/obsolescent_features doc984410
! Ref: 454984410
! Ref: gnat_rm/obsolescent_features id1984410
! Ref: 455984410
! Ref: gnat_rm/obsolescent_features obsolescent-features984410
! Ref: 16984410
! Node: pragma No_Run_Time984874
! Ref: gnat_rm/obsolescent_features id2984975
! Ref: 456984975
! Ref: gnat_rm/obsolescent_features pragma-no-run-time984975
! Ref: 457984975
! Node: pragma Ravenscar985507
! Ref: gnat_rm/obsolescent_features id3985643
! Ref: 458985643
! Ref: gnat_rm/obsolescent_features pragma-ravenscar985643
! Ref: 459985643
! Node: pragma Restricted_Run_Time985859
! Ref: gnat_rm/obsolescent_features id4985993
! Ref: 45a985993
! Ref: gnat_rm/obsolescent_features pragma-restricted-run-time985993
! Ref: 45b985993
! Node: pragma Task_Info986297
! Ref: gnat_rm/obsolescent_features id5986452
! Ref: 45c986452
! Ref: gnat_rm/obsolescent_features pragma-task-info986452
! Ref: 45d986452
! Node: package System Task_Info s-tasinf ads987317
! Ref: gnat_rm/obsolescent_features package-system-task-info987437
! Ref: 45e987437
! Ref: gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads987437
! Ref: 45f987437
! Node: Compatibility and Porting Guide987803
! Ref: gnat_rm/compatibility_and_porting_guide doc987943
! Ref: 460987943
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide987943
! Ref: 17987943
! Ref: gnat_rm/compatibility_and_porting_guide id1987943
! Ref: 461987943
! Node: Writing Portable Fixed-Point Declarations988582
! Ref: gnat_rm/compatibility_and_porting_guide id2988726
! Ref: 462988726
! Ref: gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations988726
! Ref: 463988726
! Node: Compatibility with Ada 83992624
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83992818
! Ref: 464992818
! Ref: gnat_rm/compatibility_and_porting_guide id3992818
! Ref: 465992818
! Node: Legal Ada 83 programs that are illegal in Ada 95993692
! Ref: gnat_rm/compatibility_and_porting_guide id4993840
! Ref: 466993840
! Ref: gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95993840
! Ref: 467993840
! Node: More deterministic semantics998398
! Ref: gnat_rm/compatibility_and_porting_guide id5998572
! Ref: 468998572
! Ref: gnat_rm/compatibility_and_porting_guide more-deterministic-semantics998572
! Ref: 469998572
! Node: Changed semantics999500
! Ref: gnat_rm/compatibility_and_porting_guide changed-semantics999661
! Ref: 46a999661
! Ref: gnat_rm/compatibility_and_porting_guide id6999661
! Ref: 46b999661
! Node: Other language compatibility issues1001236
! Ref: gnat_rm/compatibility_and_porting_guide id71001360
! Ref: 46c1001360
! Ref: gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues1001360
! Ref: 46d1001360
! Node: Compatibility between Ada 95 and Ada 20051002653
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-20051002846
! Ref: 46e1002846
! Ref: gnat_rm/compatibility_and_porting_guide id81002846
! Ref: 46f1002846
! Node: Implementation-dependent characteristics1005275
! Ref: gnat_rm/compatibility_and_porting_guide id91005479
! Ref: 4701005479
! Ref: gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics1005479
! Ref: 4711005479
! Node: Implementation-defined pragmas1006266
! Ref: gnat_rm/compatibility_and_porting_guide id101006416
! Ref: 4721006416
! Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas1006416
! Ref: 4731006416
! Node: Implementation-defined attributes1007400
! Ref: gnat_rm/compatibility_and_porting_guide id111007568
! Ref: 4741007568
! Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-attributes1007568
! Ref: 4751007568
! Node: Libraries1008120
! Ref: gnat_rm/compatibility_and_porting_guide id121008275
! Ref: 4761008275
! Ref: gnat_rm/compatibility_and_porting_guide libraries1008275
! Ref: 4771008275
! Node: Elaboration order1009179
! Ref: gnat_rm/compatibility_and_porting_guide elaboration-order1009324
! Ref: 4781009324
! Ref: gnat_rm/compatibility_and_porting_guide id131009324
! Ref: 4791009324
! Node: Target-specific aspects1010776
! Ref: gnat_rm/compatibility_and_porting_guide id141010903
! Ref: 47a1010903
! Ref: gnat_rm/compatibility_and_porting_guide target-specific-aspects1010903
! Ref: 47b1010903
! Node: Compatibility with Other Ada Systems1011666
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems1011851
! Ref: 47d1011851
! Ref: gnat_rm/compatibility_and_porting_guide id151011851
! Ref: 47e1011851
! Node: Representation Clauses1013395
! Ref: gnat_rm/compatibility_and_porting_guide id161013568
! Ref: 47f1013568
! Ref: gnat_rm/compatibility_and_porting_guide representation-clauses1013568
! Ref: 47c1013568
! Node: Compatibility with HP Ada 831018207
! Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-831018335
! Ref: 4801018335
! Ref: gnat_rm/compatibility_and_porting_guide id171018335
! Ref: 4811018335
! Node: GNU Free Documentation License1019213
! Ref: share/gnu_free_documentation_license doc1019338
! Ref: 4821019338
! Ref: share/gnu_free_documentation_license gnu-fdl1019338
! Ref: 11019338
! Ref: share/gnu_free_documentation_license gnu-free-documentation-license1019338
! Ref: 4831019338
! Node: Index1042680
  
  End Tag Table
  
diff -Nrcpad gcc-14.3.0/gcc/doc/gnat_ugn.info gcc-14.3.0-RC-20260619/gcc/doc/gnat_ugn.info
*** gcc-14.3.0/gcc/doc/gnat_ugn.info	Fri May 23 11:28:07 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gnat_ugn.info	Fri Jun 19 07:14:53 2026
***************
*** 1,7 ****
! This is gnat_ugn.info, produced by makeinfo version 6.5 from
  gnat_ugn.texi.
  
!      GNAT User’s Guide for Native Platforms , Apr 15, 2024
  
       AdaCore
  
--- 1,7 ----
! This is gnat_ugn.info, produced by makeinfo version 7.1 from
  gnat_ugn.texi.
  
!      GNAT User's Guide for Native Platforms , Apr 15, 2024
  
       AdaCore
  
*************** END-INFO-DIR-ENTRY
*** 18,35 ****
  
  File: gnat_ugn.info,  Node: Top,  Next: About This Guide,  Up: (dir)
  
! GNAT User’s Guide for Native Platforms
  **************************************
  
!      GNAT User’s Guide for Native Platforms , Apr 15, 2024
  
       AdaCore
  
       Copyright © 2008-2024, Free Software Foundation
  
! ‘GNAT, The GNU Ada Development Environment’
  
! GCC version 14.3.0
  AdaCore
  
  Permission is granted to copy, distribute and/or modify this document
--- 18,35 ----
  
  File: gnat_ugn.info,  Node: Top,  Next: About This Guide,  Up: (dir)
  
! GNAT User's Guide for Native Platforms
  **************************************
  
!      GNAT User's Guide for Native Platforms , Apr 15, 2024
  
       AdaCore
  
       Copyright © 2008-2024, Free Software Foundation
  
! 'GNAT, The GNU Ada Development Environment'
  
! GCC version 14.3.1
  AdaCore
  
  Permission is granted to copy, distribute and/or modify this document
*************** License: 1.
*** 55,61 ****
  * GNU Free Documentation License::
  * Index::
  
!  — The Detailed Node Listing —
  
  About This Guide
  
--- 55,61 ----
  * GNU Free Documentation License::
  * Index::
  
!  -- The Detailed Node Listing --
  
  About This Guide
  
*************** in this guide:
*** 638,644 ****
  
     * ‘Variables’
  
!    * ‘Emphasis’
  
     * [optional information or parameters]
  
--- 638,644 ----
  
     * ‘Variables’
  
!    * 'Emphasis'
  
     * [optional information or parameters]
  
*************** main program, and the spec and body of a
*** 838,852 ****
  Following the one-unit-per-file rule, place this program in the
  following three separate files:
  
! ‘greetings.ads’
  
       spec of package ‘Greetings’
  
! ‘greetings.adb’
  
       body of package ‘Greetings’
  
! ‘gmain.adb’
  
       body of main program
  
--- 838,852 ----
  Following the one-unit-per-file rule, place this program in the
  following three separate files:
  
! 'greetings.ads'
  
       spec of package ‘Greetings’
  
! 'greetings.adb'
  
       body of package ‘Greetings’
  
! 'gmain.adb'
  
       body of main program
  
*************** is used to represent the end of file.
*** 966,973 ****
  
  Each file contains a single Ada compilation unit, including any pragmas
  associated with the unit.  For example, this means you must place a
! package declaration (a package ‘spec’) and the corresponding body in
! separate files.  An Ada ‘compilation’ (which is a sequence of
  compilation units) is represented using a sequence of files.  Similarly,
  you will place each subunit or child unit in a separate file.
  
--- 966,973 ----
  
  Each file contains a single Ada compilation unit, including any pragmas
  associated with the unit.  For example, this means you must place a
! package declaration (a package 'spec') and the corresponding body in
! separate files.  An Ada 'compilation' (which is a sequence of
  compilation units) is represented using a sequence of files.  Similarly,
  you will place each subunit or child unit in a separate file.
  
*************** File: gnat_ugn.info,  Node: Other 8-Bit
*** 1015,1046 ****
  
  GNAT also supports several other 8-bit coding schemes:
  
! ‘ISO 8859-2 (Latin-2)’
  
       Latin-2 letters allowed in identifiers, with uppercase and
       lowercase equivalence.
  
! ‘ISO 8859-3 (Latin-3)’
  
       Latin-3 letters allowed in identifiers, with uppercase and
       lowercase equivalence.
  
! ‘ISO 8859-4 (Latin-4)’
  
       Latin-4 letters allowed in identifiers, with uppercase and
       lowercase equivalence.
  
! ‘ISO 8859-5 (Cyrillic)’
  
       ISO 8859-5 letters (Cyrillic) allowed in identifiers, with
       uppercase and lowercase equivalence.
  
! ‘ISO 8859-15 (Latin-9)’
  
       ISO 8859-15 (Latin-9) letters allowed in identifiers, with
       uppercase and lowercase equivalence.
  
! ‘IBM PC (code page 437)’
  
       This code page is the normal default for PCs in the U.S. It
       corresponds to the original IBM PC character set.  This set has
--- 1015,1046 ----
  
  GNAT also supports several other 8-bit coding schemes:
  
! 'ISO 8859-2 (Latin-2)'
  
       Latin-2 letters allowed in identifiers, with uppercase and
       lowercase equivalence.
  
! 'ISO 8859-3 (Latin-3)'
  
       Latin-3 letters allowed in identifiers, with uppercase and
       lowercase equivalence.
  
! 'ISO 8859-4 (Latin-4)'
  
       Latin-4 letters allowed in identifiers, with uppercase and
       lowercase equivalence.
  
! 'ISO 8859-5 (Cyrillic)'
  
       ISO 8859-5 letters (Cyrillic) allowed in identifiers, with
       uppercase and lowercase equivalence.
  
! 'ISO 8859-15 (Latin-9)'
  
       ISO 8859-15 (Latin-9) letters allowed in identifiers, with
       uppercase and lowercase equivalence.
  
! 'IBM PC (code page 437)'
  
       This code page is the normal default for PCs in the U.S. It
       corresponds to the original IBM PC character set.  This set has
*************** GNAT also supports several other 8-bit c
*** 1049,1062 ****
       these letters are allowed in identifiers with uppercase and
       lowercase equivalence.
  
! ‘IBM PC (code page 850)’
  
       This code page is a modification of 437 extended to include all the
       Latin-1 letters, but still not with the usual Latin-1 encoding.  In
       this mode, all these letters are allowed in identifiers with
       uppercase and lowercase equivalence.
  
! ‘Full Upper 8-bit’
  
       Any character in the range 80-FF allowed in identifiers, and all
       are considered distinct.  In other words, there are no uppercase
--- 1049,1062 ----
       these letters are allowed in identifiers with uppercase and
       lowercase equivalence.
  
! 'IBM PC (code page 850)'
  
       This code page is a modification of 437 extended to include all the
       Latin-1 letters, but still not with the usual Latin-1 encoding.  In
       this mode, all these letters are allowed in identifiers with
       uppercase and lowercase equivalence.
  
! 'Full Upper 8-bit'
  
       Any character in the range 80-FF allowed in identifiers, and all
       are considered distinct.  In other words, there are no uppercase
*************** GNAT also supports several other 8-bit c
*** 1065,1071 ****
       character sets (e.g., the typical method of representing Chinese
       characters on the PC).
  
! ‘No Upper-Half’
  
       No upper-half characters in the range 80-FF are allowed in
       identifiers.  This gives Ada 83 compatibility for identifier names.
--- 1065,1071 ----
       character sets (e.g., the typical method of representing Chinese
       characters on the PC).
  
! 'No Upper-Half'
  
       No upper-half characters in the range 80-FF are allowed in
       identifiers.  This gives Ada 83 compatibility for identifier names.
*************** GNAT allows wide character codes to appe
*** 1085,1091 ****
  literals, and also optionally in identifiers, by means of the following
  possible encoding schemes:
  
! ‘Hex Coding’
  
       In this encoding, a wide character is represented by the following
       five character sequence:
--- 1085,1091 ----
  literals, and also optionally in identifiers, by means of the following
  possible encoding schemes:
  
! 'Hex Coding'
  
       In this encoding, a wide character is represented by the following
       five character sequence:
*************** possible encoding schemes:
*** 1097,1103 ****
       A345 is used to represent the wide character with code ‘16#A345#’.
       This scheme is compatible with use of the full Wide_Character set.
  
! ‘Upper-Half Coding’
  
       The wide character with encoding ‘16#abcd#’ where the upper bit is
       on (in other words, ‘a’ is in the range 8-F) is represented as two
--- 1097,1103 ----
       A345 is used to represent the wide character with code ‘16#A345#’.
       This scheme is compatible with use of the full Wide_Character set.
  
! 'Upper-Half Coding'
  
       The wide character with encoding ‘16#abcd#’ where the upper bit is
       on (in other words, ‘a’ is in the range 8-F) is represented as two
*************** possible encoding schemes:
*** 1106,1112 ****
       This method can be also used for shift-JIS or EUC, where the
       internal coding matches the external coding.
  
! ‘Shift JIS Coding’
  
       A wide character is represented by a two-character sequence,
       ‘16#ab#’ and ‘16#cd#’, with the restrictions described for
--- 1106,1112 ----
       This method can be also used for shift-JIS or EUC, where the
       internal coding matches the external coding.
  
! 'Shift JIS Coding'
  
       A wide character is represented by a two-character sequence,
       ‘16#ab#’ and ‘16#cd#’, with the restrictions described for
*************** possible encoding schemes:
*** 1115,1121 ****
       algorithm for Shift-JIS conversion.  Only characters defined in the
       JIS code set table can be used with this encoding method.
  
! ‘EUC Coding’
  
       A wide character is represented by a two-character sequence
       ‘16#ab#’ and ‘16#cd#’, with both characters being in the upper
--- 1115,1121 ----
       algorithm for Shift-JIS conversion.  Only characters defined in the
       JIS code set table can be used with this encoding method.
  
! 'EUC Coding'
  
       A wide character is represented by a two-character sequence
       ‘16#ab#’ and ‘16#cd#’, with both characters being in the upper
*************** possible encoding schemes:
*** 1124,1130 ****
       defined in the JIS code set table can be used with this encoding
       method.
  
! ‘UTF-8 Coding’
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
--- 1124,1130 ----
       defined in the JIS code set table can be used with this encoding
       method.
  
! 'UTF-8 Coding'
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
*************** possible encoding schemes:
*** 1143,1149 ****
       6-byte sequences, and in the following section on wide wide
       characters, the use of these sequences is documented).
  
! ‘Brackets Coding’
  
       In this encoding, a wide character is represented by the following
       eight character sequence:
--- 1143,1149 ----
       6-byte sequences, and in the following section on wide wide
       characters, the use of these sequences is documented).
  
! 'Brackets Coding'
  
       In this encoding, a wide character is represented by the following
       eight character sequence:
*************** GNAT allows wide wide character codes to
*** 1176,1182 ****
  literals, and also optionally in identifiers, by means of the following
  possible encoding schemes:
  
! ‘UTF-8 Coding’
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
--- 1176,1182 ----
  literals, and also optionally in identifiers, by means of the following
  possible encoding schemes:
  
! 'UTF-8 Coding'
  
       A wide character is represented using UCS Transformation Format 8
       (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
*************** possible encoding schemes:
*** 1194,1200 ****
       where the ‘xxx’ bits correspond to the left-padded bits of the
       32-bit character value.
  
! ‘Brackets Coding’
  
       In this encoding, a wide wide character is represented by the
       following ten or twelve byte character sequence:
--- 1194,1200 ----
       where the ‘xxx’ bits correspond to the left-padded bits of the
       32-bit character value.
  
! 'Brackets Coding'
  
       In this encoding, a wide wide character is represented by the
       following ten or twelve byte character sequence:
*************** File: gnat_ugn.info,  Node: Switches for
*** 2079,2085 ****
  ‘-gnat`xxx'’
  
       This passes the given ‘-gnat`xxx'’ switch to ‘gnat’ which is used
!      to parse the given file.  Not all ‘xxx’ options make sense, but for
       example, the use of ‘-gnati2’ allows ‘gnatchop’ to process a source
       file that uses Latin-2 coding for identifiers.
  
--- 2079,2085 ----
  ‘-gnat`xxx'’
  
       This passes the given ‘-gnat`xxx'’ switch to ‘gnat’ which is used
!      to parse the given file.  Not all 'xxx' options make sense, but for
       example, the use of ‘-gnati2’ allows ‘gnatchop’ to process a source
       file that uses Latin-2 coding for identifiers.
  
*************** of restriction.
*** 2304,2310 ****
  
  Restrictions that require partition-wide consistency (like ‘No_Tasking’)
  are recognized wherever they appear and can be freely inherited, e.g.
! from a ‘with’ed unit to the ‘with’ing unit.  This makes sense since the
  binder will in any case insist on seeing consistent use, so any unit not
  conforming to any restrictions that are anywhere in the partition will
  be rejected, and you might as well find that out at compile time rather
--- 2304,2310 ----
  
  Restrictions that require partition-wide consistency (like ‘No_Tasking’)
  are recognized wherever they appear and can be freely inherited, e.g.
! from a 'with'ed unit to the 'with'ing unit.  This makes sense since the
  binder will in any case insist on seeing consistent use, so any unit not
  conforming to any restrictions that are anywhere in the partition will
  be rejected, and you might as well find that out at compile time rather
*************** if changes to the source file require th
*** 2436,2445 ****
  In addition to this basic dependency, a given object may depend on
  additional source files as follows:
  
!    * If a file being compiled ‘with’s a unit ‘X’, the object file
       depends on the file containing the spec of unit ‘X’.  This includes
!      files that are ‘with’ed implicitly either because they are parents
!      of ‘with’ed child units or they are run-time units required by the
       language constructs used in a particular unit.
  
     * If a file being compiled instantiates a library level generic unit,
--- 2436,2445 ----
  In addition to this basic dependency, a given object may depend on
  additional source files as follows:
  
!    * If a file being compiled 'with's a unit ‘X’, the object file
       depends on the file containing the spec of unit ‘X’.  This includes
!      files that are 'with'ed implicitly either because they are parents
!      of 'with'ed child units or they are run-time units required by the
       language constructs used in a particular unit.
  
     * If a file being compiled instantiates a library level generic unit,
*************** additional source files as follows:
*** 2479,2485 ****
       dependencies and recompilation, a body and all its subunits are
       treated as an indivisible whole.
  
!      These rules are applied transitively: if unit ‘A’ ‘with’s unit ‘B’,
       whose elaboration calls an inlined procedure in package ‘C’, the
       object file for unit ‘A’ will depend on the body of ‘C’, in file
       ‘c.adb’.
--- 2479,2485 ----
       dependencies and recompilation, a body and all its subunits are
       treated as an indivisible whole.
  
!      These rules are applied transitively: if unit ‘A’ 'with's unit ‘B’,
       whose elaboration calls an inlined procedure in package ‘C’, the
       object file for unit ‘A’ will depend on the body of ‘C’, in file
       ‘c.adb’.
*************** contained in the ‘ALI’ file.
*** 2529,2535 ****
  
     * Categorization information (e.g., use of pragma ‘Pure’).
  
!    * Information on all ‘with’ed units, including presence of
       ‘Elaborate’ or ‘Elaborate_All’ pragmas.
  
     * Information from any ‘Linker_Options’ pragmas used in the unit
--- 2529,2535 ----
  
     * Categorization information (e.g., use of pragma ‘Pure’).
  
!    * Information on all 'with'ed units, including presence of
       ‘Elaborate’ or ‘Elaborate_All’ pragmas.
  
     * Information from any ‘Linker_Options’ pragmas used in the unit
*************** File: gnat_ugn.info,  Node: GNAT and Lib
*** 2595,2601 ****
  This section describes how to build and use libraries with GNAT, and
  also shows how to recompile the GNAT run-time library.  You should be
  familiar with the Project Manager facility (see the
! ‘GNAT_Project_Manager’ chapter of the ‘GPRbuild User’s Guide’) before
  reading this chapter.
  
  * Menu:
--- 2595,2601 ----
  This section describes how to build and use libraries with GNAT, and
  also shows how to recompile the GNAT run-time library.  You should be
  familiar with the Project Manager facility (see the
! 'GNAT_Project_Manager' chapter of the 'GPRbuild User’s Guide') before
  reading this chapter.
  
  * Menu:
*************** documentation purposes.  Alternatively,
*** 2639,2653 ****
  needed by an external user to make use of the library.  That is to say,
  the specs reflecting the library services along with all the units
  needed to compile those specs, which can include generic bodies or any
! body implementing an inlined routine.  In the case of ‘stand-alone
! libraries’ those exposed units are called ‘interface units’ (*note
  Stand-alone Ada Libraries: 6b.).
  
  All compilation units comprising an application, including those in a
  library, need to be elaborated in an order partially defined by Ada’s
  semantics.  GNAT computes the elaboration order from the ‘ALI’ files and
  this is why they constitute a mandatory part of GNAT libraries.
! ‘Stand-alone libraries’ are the exception to this rule because a
  specific library elaboration routine is produced independently of the
  application(s) using the library.
  
--- 2639,2653 ----
  needed by an external user to make use of the library.  That is to say,
  the specs reflecting the library services along with all the units
  needed to compile those specs, which can include generic bodies or any
! body implementing an inlined routine.  In the case of 'stand-alone
! libraries' those exposed units are called 'interface units' (*note
  Stand-alone Ada Libraries: 6b.).
  
  All compilation units comprising an application, including those in a
  library, need to be elaborated in an order partially defined by Ada’s
  semantics.  GNAT computes the elaboration order from the ‘ALI’ files and
  this is why they constitute a mandatory part of GNAT libraries.
! 'Stand-alone libraries' are the exception to this rule because a
  specific library elaboration routine is produced independently of the
  application(s) using the library.
  
*************** File: gnat_ugn.info,  Node: Building a l
*** 2670,2678 ****
  ..........................
  
  The easiest way to build a library is to use the Project Manager, which
! supports a special type of project called a ‘Library Project’ (see the
! ‘Library Projects’ section in the ‘GNAT Project Manager’ chapter of the
! ‘GPRbuild User’s Guide’).
  
  A project is considered a library project, when two project-level
  attributes are defined in it: ‘Library_Name’ and ‘Library_Dir’.  In
--- 2670,2678 ----
  ..........................
  
  The easiest way to build a library is to use the Project Manager, which
! supports a special type of project called a 'Library Project' (see the
! 'Library Projects' section in the 'GNAT Project Manager' chapter of the
! 'GPRbuild User’s Guide').
  
  A project is considered a library project, when two project-level
  attributes are defined in it: ‘Library_Name’ and ‘Library_Dir’.  In
*************** File: gnat_ugn.info,  Node: Installing a
*** 2784,2791 ****
  ............................
  
  If you use project files, library installation is part of the library
! build process (see the ‘Installing a Library with Project Files’ section
! of the ‘GNAT Project Manager’ chapter of the ‘GPRbuild User’s Guide’).
  
  When project files are not an option, it is also possible, but not
  recommended, to install the library so that the sources needed to use
--- 2784,2791 ----
  ............................
  
  If you use project files, library installation is part of the library
! build process (see the 'Installing a Library with Project Files' section
! of the 'GNAT Project Manager' chapter of the 'GPRbuild User’s Guide').
  
  When project files are not an option, it is also possible, but not
  recommended, to install the library so that the sources needed to use
*************** File: gnat_ugn.info,  Node: Using a libr
*** 2835,2841 ****
  
  Once again, the project facility greatly simplifies the use of
  libraries.  In this context, using a library is just a matter of adding
! a ‘with’ clause in the user project.  For instance, to make use of the
  library ‘My_Lib’ shown in examples in earlier sections, you can write:
  
       with "my_lib";
--- 2835,2841 ----
  
  Once again, the project facility greatly simplifies the use of
  libraries.  In this context, using a library is just a matter of adding
! a 'with' clause in the user project.  For instance, to make use of the
  library ‘My_Lib’ shown in examples in earlier sections, you can write:
  
       with "my_lib";
*************** library ‘My_Lib’ shown in examples i
*** 2845,2851 ****
  
  Even if you have a third-party, non-Ada library, you can still use
  GNAT’s Project Manager facility to provide a wrapper for it.  For
! example, the following project, when ‘with’ed by your main project, will
  link with the third-party library ‘liba.a’:
  
       project Liba is
--- 2845,2851 ----
  
  Even if you have a third-party, non-Ada library, you can still use
  GNAT’s Project Manager facility to provide a wrapper for it.  For
! example, the following project, when 'with'ed by your main project, will
  link with the third-party library ‘liba.a’:
  
       project Liba is
*************** File: gnat_ugn.info,  Node: Building a S
*** 2951,2962 ****
  ......................................
  
  GNAT’s Project facility provides a simple way of building and installing
! stand-alone libraries; see the ‘Stand-alone Library Projects’ section in
! the ‘GNAT Project Manager’ chapter of the ‘GPRbuild User’s Guide’.  To
  be a Stand-alone Library Project, in addition to the two attributes that
  make a project a Library Project (‘Library_Name’ and ‘Library_Dir’; see
! the ‘Library Projects’ section in the ‘GNAT Project Manager’ chapter of
! the ‘GPRbuild User’s Guide’), the attribute ‘Library_Interface’ must be
  defined.  For example:
  
       for Library_Dir use "lib_dir";
--- 2951,2962 ----
  ......................................
  
  GNAT’s Project facility provides a simple way of building and installing
! stand-alone libraries; see the 'Stand-alone Library Projects' section in
! the 'GNAT Project Manager' chapter of the 'GPRbuild User’s Guide'.  To
  be a Stand-alone Library Project, in addition to the two attributes that
  make a project a Library Project (‘Library_Name’ and ‘Library_Dir’; see
! the 'Library Projects' section in the 'GNAT Project Manager' chapter of
! the 'GPRbuild User’s Guide'), the attribute ‘Library_Interface’ must be
  defined.  For example:
  
       for Library_Dir use "lib_dir";
*************** like:
*** 3279,3285 ****
  
  The ‘Config’ package exists in multiple forms for the various targets,
  with an appropriate script selecting the version of ‘Config’ needed.
! Then any other unit requiring conditional compilation can do a ‘with’ of
  ‘Config’ to make the constants visible.
  
  
--- 3279,3285 ----
  
  The ‘Config’ package exists in multiple forms for the various targets,
  with an appropriate script selecting the version of ‘Config’ needed.
! Then any other unit requiring conditional compilation can do a 'with' of
  ‘Config’ to make the constants visible.
  
  
*************** File: gnat_ugn.info,  Node: Preprocessin
*** 3602,3608 ****
  3.10.2.1 Preprocessing Symbols
  ..............................
  
! Preprocessing symbols are defined in ‘definition files’ and referenced
  in the sources to be preprocessed.  A preprocessing symbol is an
  identifier, following normal Ada (case-insensitive) rules for its
  syntax, with the restriction that all characters need to be in the ASCII
--- 3602,3608 ----
  3.10.2.1 Preprocessing Symbols
  ..............................
  
! Preprocessing symbols are defined in 'definition files' and referenced
  in the sources to be preprocessed.  A preprocessing symbol is an
  identifier, following normal Ada (case-insensitive) rules for its
  syntax, with the restriction that all characters need to be in the ASCII
*************** To call ‘gnatprep’ use:
*** 3621,3639 ****
  where
  
     * 
!      ‘switches’
  
            is an optional sequence of switches as described in the next
            section.
  
     * 
!      ‘infile’
  
            is the full name of the input file, which is an Ada source
            file containing preprocessor directives.
  
     * 
!      ‘outfile’
  
            is the full name of the output file, which is an Ada source in
            standard Ada form.  When used with GNAT, this file name will
--- 3621,3639 ----
  where
  
     * 
!      'switches'
  
            is an optional sequence of switches as described in the next
            section.
  
     * 
!      'infile'
  
            is the full name of the input file, which is an Ada source
            file containing preprocessor directives.
  
     * 
!      'outfile'
  
            is the full name of the output file, which is an Ada source in
            standard Ada form.  When used with GNAT, this file name will
*************** As noted above, a file to be preprocesse
*** 3884,3894 ****
  which preprocessing lines have been inserted.  However, instead of using
  ‘gnatprep’ to explicitly preprocess a file as a separate step before
  compilation, you can carry out the preprocessing implicitly as part of
! compilation.  Such ‘integrated preprocessing’, which is the common style
  with C, is performed when either or both of the following switches are
  passed to the compiler:
  
!         * ‘-gnatep’, which specifies the ‘preprocessor data file’.  This
            file dictates how the source files will be preprocessed (e.g.,
            which symbol definition files apply to which sources).
  
--- 3884,3894 ----
  which preprocessing lines have been inserted.  However, instead of using
  ‘gnatprep’ to explicitly preprocess a file as a separate step before
  compilation, you can carry out the preprocessing implicitly as part of
! compilation.  Such 'integrated preprocessing', which is the common style
  with C, is performed when either or both of the following switches are
  passed to the compiler:
  
!         * ‘-gnatep’, which specifies the 'preprocessor data file'.  This
            file dictates how the source files will be preprocessed (e.g.,
            which symbol definition files apply to which sources).
  
*************** When using project files:
*** 3907,3913 ****
  
          * the builder switch ‘-x’ should be used if any Ada source is
            compiled with ‘gnatep=’, so that the compiler finds the
!           ‘preprocessor data file’.
  
          * the preprocessing data file and the symbol definition files
            should be located in the source directories of the project.
--- 3907,3913 ----
  
          * the builder switch ‘-x’ should be used if any Ada source is
            compiled with ‘gnatep=’, so that the compiler finds the
!           'preprocessor data file'.
  
          * the preprocessing data file and the symbol definition files
            should be located in the source directories of the project.
*************** that relate to integrated preprocessing.
*** 3935,3946 ****
                    end Compiler;
                 end Prj;
  
!      A preprocessor data file is a text file that contains ‘preprocessor
!      control lines’.  A preprocessor control line directs the
       preprocessing of either a particular source file, or, analogous to
       ‘others’ in Ada, all sources not specified elsewhere in the
       preprocessor data file.  A preprocessor control line can optionally
!      identify a ‘definition file’ that assigns values to preprocessor
       symbols, as well as a list of switches that relate to
       preprocessing.  Empty lines and comments (using Ada syntax) are
       also permitted, with no semantic effect.
--- 3935,3946 ----
                    end Compiler;
                 end Prj;
  
!      A preprocessor data file is a text file that contains 'preprocessor
!      control lines'.  A preprocessor control line directs the
       preprocessing of either a particular source file, or, analogous to
       ‘others’ in Ada, all sources not specified elsewhere in the
       preprocessor data file.  A preprocessor control line can optionally
!      identify a 'definition file' that assigns values to preprocessor
       symbols, as well as a list of switches that relate to
       preprocessing.  Empty lines and comments (using Ada syntax) are
       also permitted, with no semantic effect.
*************** File: gnat_ugn.info,  Node: Generating B
*** 5263,5269 ****
  ............................................
  
  Generating bindings for C++ headers is done using the same options,
! always with the ‘g++’ compiler.  Note that generating Ada spec from C++
  headers is a much more complex job and support for C++ headers is much
  more limited that support for C headers.  As a result, you will need to
  modify the resulting bindings by hand more extensively when using C++
--- 5263,5269 ----
  ............................................
  
  Generating bindings for C++ headers is done using the same options,
! always with the 'g++' compiler.  Note that generating Ada spec from C++
  headers is a much more complex job and support for C++ headers is much
  more limited that support for C headers.  As a result, you will need to
  modify the resulting bindings by hand more extensively when using C++
*************** headers.
*** 5272,5278 ****
  In this mode, C++ classes will be mapped to Ada tagged types,
  constructors will be mapped using the ‘CPP_Constructor’ pragma, and when
  possible, multiple inheritance of abstract classes will be mapped to Ada
! interfaces (see the ‘Interfacing to C++’ section in the ‘GNAT Reference
  Manual’ for additional information on interfacing to C++).
  
  For example, given the following C++ header file:
--- 5272,5278 ----
  In this mode, C++ classes will be mapped to Ada tagged types,
  constructors will be mapped using the ‘CPP_Constructor’ pragma, and when
  possible, multiple inheritance of abstract classes will be mapped to Ada
! interfaces (see the 'Interfacing to C++' section in the ‘GNAT Reference
  Manual’ for additional information on interfacing to C++).
  
  For example, given the following C++ header file:
*************** File: gnat_ugn.info,  Node: Comparison b
*** 5495,5501 ****
  The GNAT model of compilation is close to the C and C++ models.  You can
  think of Ada specs as corresponding to header files in C. As in C, you
  don’t need to compile specs; they are compiled when they are used.  The
! Ada ‘with’ is similar in effect to the ‘#include’ of a C header.
  
  One notable difference is that, in Ada, you may compile specs separately
  to check them for semantic and syntactic accuracy.  This is not always
--- 5495,5501 ----
  The GNAT model of compilation is close to the C and C++ models.  You can
  think of Ada specs as corresponding to header files in C. As in C, you
  don’t need to compile specs; they are compiled when they are used.  The
! Ada 'with' is similar in effect to the ‘#include’ of a C header.
  
  One notable difference is that, in Ada, you may compile specs separately
  to check them for semantic and syntactic accuracy.  This is not always
*************** source file being compiled, but also fro
*** 5537,5543 ****
  means that the effect of a compilation depends on what has been
  previously compiled.  In particular:
  
!    * When a unit is ‘with’ed, the unit seen by the compiler corresponds
       to the version of the unit most recently compiled into the library.
  
     * Inlining is effective only if the necessary body has already been
--- 5537,5543 ----
  means that the effect of a compilation depends on what has been
  previously compiled.  In particular:
  
!    * When a unit is 'with'ed, the unit seen by the compiler corresponds
       to the version of the unit most recently compiled into the library.
  
     * Inlining is effective only if the necessary body has already been
*************** In GNAT, compiling one unit never affect
*** 5549,5555 ****
  units because the compiler reads only source files.  Only changes to
  source files can affect the results of a compilation.  In particular:
  
!    * When a unit is ‘with’ed, the unit seen by the compiler corresponds
       to the source version of the unit that is currently accessible to
       the compiler.
  
--- 5549,5555 ----
  units because the compiler reads only source files.  Only changes to
  source files can affect the results of a compilation.  In particular:
  
!    * When a unit is 'with'ed, the unit seen by the compiler corresponds
       to the source version of the unit that is currently accessible to
       the compiler.
  
*************** dependencies, they will always be tracke
*** 5713,5720 ****
  ‘gnatmake’.
  
  Note that for advanced forms of project structure, we recommend creating
! a project file as explained in the ‘GNAT_Project_Manager’ chapter in the
! ‘GPRbuild User’s Guide’, and using the ‘gprbuild’ tool which supports
  building with project files and works similarly to ‘gnatmake’.
  
  * Menu:
--- 5713,5720 ----
  ‘gnatmake’.
  
  Note that for advanced forms of project structure, we recommend creating
! a project file as explained in the 'GNAT_Project_Manager' chapter in the
! 'GPRbuild User’s Guide', and using the ‘gprbuild’ tool which supports
  building with project files and works similarly to ‘gnatmake’.
  
  * Menu:
*************** You may specify any of the following swi
*** 5934,5940 ****
       (absolute or relative) by this switch, should already exist,
       otherwise the switch is ineffective.  The specified mapping file
       will be communicated to the compiler.  This switch is not
!      compatible with a project file (-P‘file‘) or with multiple
       compiling processes (-jnnn, when nnn is greater than 1).
  
  ‘-d’
--- 5934,5940 ----
       (absolute or relative) by this switch, should already exist,
       otherwise the switch is ineffective.  The specified mapping file
       will be communicated to the compiler.  This switch is not
!      compatible with a project file (-P'file') or with multiple
       compiling processes (-jnnn, when nnn is greater than 1).
  
  ‘-d’
*************** Source and library search path switches
*** 6258,6268 ****
       a valid run-time is found (‘adainclude’ or ‘ada_source_path’, and
       ‘adalib’ or ‘ada_object_path’ present):
  
!         * ‘<current directory>/$rts_path’
  
!         * ‘<default-search-dir>/$rts_path’
  
!         * ‘<default-search-dir>/rts-$rts_path’
  
          * The selected path is handled like a normal RTS path.
  
--- 6258,6268 ----
       a valid run-time is found (‘adainclude’ or ‘ada_source_path’, and
       ‘adalib’ or ‘ada_object_path’ present):
  
!         * '<current directory>/$rts_path'
  
!         * '<default-search-dir>/$rts_path'
  
!         * '<default-search-dir>/rts-$rts_path'
  
          * The selected path is handled like a normal RTS path.
  
*************** the ‘gnatmake’ command.
*** 6334,6341 ****
  
     * ‘gnatmake’ has been designed to make the use of Ada libraries
       particularly convenient.  Assume you have an Ada library organized
!      as follows: ‘obj-dir’ contains the objects and ALI files for of
!      your Ada compilation units, whereas ‘include-dir’ contains the
       specs of these units, but no bodies.  Then to compile a unit stored
       in ‘main.adb’, which uses this Ada library you would just type:
  
--- 6334,6341 ----
  
     * ‘gnatmake’ has been designed to make the use of Ada libraries
       particularly convenient.  Assume you have an Ada library organized
!      as follows: 'obj-dir' contains the objects and ALI files for of
!      your Ada compilation units, whereas 'include-dir' contains the
       specs of these units, but no bodies.  Then to compile a unit stored
       in ‘main.adb’, which uses this Ada library you would just type:
  
*************** useful to have some basic understanding
*** 6366,6372 ****
  in particular to understand how it uses the results of previous
  compilations without incorrectly depending on them.
  
! First a definition: an object file is considered ‘up to date’ if the
  corresponding ALI file exists and if all the source files listed in the
  dependency section of this ALI file have time stamps matching those in
  the ALI file.  This means that neither the source file itself nor any
--- 6366,6372 ----
  in particular to understand how it uses the results of previous
  compilations without incorrectly depending on them.
  
! First a definition: an object file is considered 'up to date' if the
  corresponding ALI file exists and if all the source files listed in the
  dependency section of this ALI file have time stamps matching those in
  the ALI file.  This means that neither the source file itself nor any
*************** files:
*** 6466,6472 ****
     * the body file (‘.adb’) for a library level package or generic
       package that has a body
  
! You need ‘not’ compile the following files
  
     * the spec of a library unit which has a body
  
--- 6466,6472 ----
     * the body file (‘.adb’) for a library level package or generic
       package that has a body
  
! You need 'not' compile the following files
  
     * the spec of a library unit which has a body
  
*************** model are as follows:
*** 6634,6640 ****
       into the object file directly.
  
     * When you compile a unit, the source files for the specs of all
!      units that it ‘with’s, all its subunits, and the bodies of any
       generics it instantiates must be available (reachable by the
       search-paths mechanism described above), or you will receive a
       fatal error message.
--- 6634,6640 ----
       into the object file directly.
  
     * When you compile a unit, the source files for the specs of all
!      units that it 'with's, all its subunits, and the bodies of any
       generics it instantiates must be available (reachable by the
       search-paths mechanism described above), or you will receive a
       fatal error message.
*************** File: gnat_ugn.info,  Node: Alphabetical
*** 7419,7431 ****
       Digit     Interpretation
                 
                 
!      ‘1’       All intermediate overflows checked against base type (‘STRICT’)
                 
                 
!      ‘2’       Minimize intermediate overflows (‘MINIMIZED’)
                 
                 
!      ‘3’       Eliminate intermediate overflows (‘ELIMINATED’)
                 
  
       If only one digit appears, then it applies to all cases; if two
--- 7419,7431 ----
       Digit     Interpretation
                 
                 
!      '1'       All intermediate overflows checked against base type (‘STRICT’)
                 
                 
!      '2'       Minimize intermediate overflows (‘MINIMIZED’)
                 
                 
!      '3'       Eliminate intermediate overflows (‘ELIMINATED’)
                 
  
       If only one digit appears, then it applies to all cases; if two
*************** File: gnat_ugn.info,  Node: Alphabetical
*** 7575,7599 ****
  
       ‘n’ controls the optimization level:
  
!      ‘n’         Effect
                   
                   
!      ‘0’         No optimization, the default setting if no ‘-O’ appears
                   
                   
!      ‘1’         Normal optimization, the default if you specify ‘-O’ without an operand.
                   A good compromise between code quality and compilation time.
                   
                   
!      ‘2’         Extensive optimization, may improve execution time, possibly at the cost
                   of substantially increased compilation time.
                   
                   
!      ‘3’         Same as ‘-O2’, and also includes inline expansion for small subprograms in
                   the same unit.
                   
                   
!      ‘s’         Optimize space usage
                   
  
       See also *note Optimization Levels: ef.
--- 7575,7599 ----
  
       ‘n’ controls the optimization level:
  
!      'n'         Effect
                   
                   
!      '0'         No optimization, the default setting if no ‘-O’ appears
                   
                   
!      '1'         Normal optimization, the default if you specify ‘-O’ without an operand.
                   A good compromise between code quality and compilation time.
                   
                   
!      '2'         Extensive optimization, may improve execution time, possibly at the cost
                   of substantially increased compilation time.
                   
                   
!      '3'         Same as ‘-O2’, and also includes inline expansion for small subprograms in
                   the same unit.
                   
                   
!      's'         Optimize space usage
                   
  
       See also *note Optimization Levels: ef.
*************** warnings that are generated.
*** 7977,7983 ****
  
     * Violations of style rules if style checking is enabled
  
!    * Unused ‘with’ clauses
  
     * ‘Bit_Order’ usage that does not have any effect
  
--- 7977,7983 ----
  
     * Violations of style rules if style checking is enabled
  
!    * Unused 'with' clauses
  
     * ‘Bit_Order’ usage that does not have any effect
  
*************** warnings that are generated.
*** 7987,7993 ****
  
     * Declaration that is likely to cause storage error
  
!    * Internal GNAT unit ‘with’ed by application unit
  
     * Values known to be out of range at compile time
  
--- 7987,7993 ----
  
     * Declaration that is likely to cause storage error
  
!    * Internal GNAT unit 'with'ed by application unit
  
     * Values known to be out of range at compile time
  
*************** using the GNAT pragma Warnings (see the
*** 8024,8030 ****
  
  ‘-gnatwa’
  
!      ‘Activate most optional warnings.’
  
       This switch activates most optional warning messages.  See the
       remaining list in this section for details on optional warning
--- 8024,8030 ----
  
  ‘-gnatwa’
  
!      'Activate most optional warnings.'
  
       This switch activates most optional warning messages.  See the
       remaining list in this section for details on optional warning
*************** using the GNAT pragma Warnings (see the
*** 8075,8081 ****
  
  ‘-gnatwA’
  
!      ‘Suppress all optional errors.’
  
       This switch suppresses all optional warning messages, see remaining
       list in this section for details on optional warning messages that
--- 8075,8081 ----
  
  ‘-gnatwA’
  
!      'Suppress all optional errors.'
  
       This switch suppresses all optional warning messages, see remaining
       list in this section for details on optional warning messages that
*************** using the GNAT pragma Warnings (see the
*** 8091,8097 ****
  
  ‘-gnatw.a’
  
!      ‘Activate warnings on failing assertions.’
  
       This switch activates warnings for assertions where the compiler
       can tell at compile time that the assertion will fail.  Note that
--- 8091,8097 ----
  
  ‘-gnatw.a’
  
!      'Activate warnings on failing assertions.'
  
       This switch activates warnings for assertions where the compiler
       can tell at compile time that the assertion will fail.  Note that
*************** using the GNAT pragma Warnings (see the
*** 8100,8113 ****
  
  ‘-gnatw.A’
  
!      ‘Suppress warnings on failing assertions.’
  
       This switch suppresses warnings for assertions where the compiler
       can tell at compile time that the assertion will fail.
  
  ‘-gnatw_a’
  
!      ‘Activate warnings on anonymous allocators.’
  
       This switch activates warnings for allocators of anonymous access
       types, which can involve run-time accessibility checks and lead to
--- 8100,8113 ----
  
  ‘-gnatw.A’
  
!      'Suppress warnings on failing assertions.'
  
       This switch suppresses warnings for assertions where the compiler
       can tell at compile time that the assertion will fail.
  
  ‘-gnatw_a’
  
!      'Activate warnings on anonymous allocators.'
  
       This switch activates warnings for allocators of anonymous access
       types, which can involve run-time accessibility checks and lead to
*************** using the GNAT pragma Warnings (see the
*** 8116,8129 ****
  
  ‘-gnatw_A’
  
!      ‘Suppress warnings on anonymous allocators.’
  
       This switch suppresses warnings for anonymous access type
       allocators.
  
  ‘-gnatwb’
  
!      ‘Activate warnings on bad fixed values.’
  
       This switch activates warnings for static fixed-point expressions
       whose value is not an exact multiple of Small.  Such values are
--- 8116,8129 ----
  
  ‘-gnatw_A’
  
!      'Suppress warnings on anonymous allocators.'
  
       This switch suppresses warnings for anonymous access type
       allocators.
  
  ‘-gnatwb’
  
!      'Activate warnings on bad fixed values.'
  
       This switch activates warnings for static fixed-point expressions
       whose value is not an exact multiple of Small.  Such values are
*************** using the GNAT pragma Warnings (see the
*** 8136,8149 ****
  
  ‘-gnatwB’
  
!      ‘Suppress warnings on bad fixed values.’
  
       This switch suppresses warnings for static fixed-point expressions
       whose value is not an exact multiple of Small.
  
  ‘-gnatw.b’
  
!      ‘Activate warnings on biased representation.’
  
       This switch activates warnings when a size clause, value size
       clause, component clause, or component size clause forces the use
--- 8136,8149 ----
  
  ‘-gnatwB’
  
!      'Suppress warnings on bad fixed values.'
  
       This switch suppresses warnings for static fixed-point expressions
       whose value is not an exact multiple of Small.
  
  ‘-gnatw.b’
  
!      'Activate warnings on biased representation.'
  
       This switch activates warnings when a size clause, value size
       clause, component clause, or component size clause forces the use
*************** using the GNAT pragma Warnings (see the
*** 8153,8166 ****
  
  ‘-gnatw.B’
  
!      ‘Suppress warnings on biased representation.’
  
       This switch suppresses warnings for representation clauses that
       force the use of biased representation.
  
  ‘-gnatwc’
  
!      ‘Activate warnings on conditionals.’
  
       This switch activates warnings for boolean expressions that are
       known to be True or False at compile time.  The default is that
--- 8153,8166 ----
  
  ‘-gnatw.B’
  
!      'Suppress warnings on biased representation.'
  
       This switch suppresses warnings for representation clauses that
       force the use of biased representation.
  
  ‘-gnatwc’
  
!      'Activate warnings on conditionals.'
  
       This switch activates warnings for boolean expressions that are
       known to be True or False at compile time.  The default is that
*************** using the GNAT pragma Warnings (see the
*** 8187,8200 ****
  
  ‘-gnatwC’
  
!      ‘Suppress warnings on conditionals.’
  
       This switch suppresses warnings for conditional expressions used in
       tests that are known to be True or False at compile time.
  
  ‘-gnatw.c’
  
!      ‘Activate warnings on missing component clauses.’
  
       This switch activates warnings for record components where a record
       representation clause is present and has component clauses for the
--- 8187,8200 ----
  
  ‘-gnatwC’
  
!      'Suppress warnings on conditionals.'
  
       This switch suppresses warnings for conditional expressions used in
       tests that are known to be True or False at compile time.
  
  ‘-gnatw.c’
  
!      'Activate warnings on missing component clauses.'
  
       This switch activates warnings for record components where a record
       representation clause is present and has component clauses for the
*************** using the GNAT pragma Warnings (see the
*** 8203,8216 ****
  
  ‘-gnatw.C’
  
!      ‘Suppress warnings on missing component clauses.’
  
       This switch suppresses warnings for record components that are
       missing a component clause in the situation described above.
  
  ‘-gnatw_c’
  
!      ‘Activate warnings on unknown condition in Compile_Time_Warning.’
  
       This switch activates warnings on a pragma Compile_Time_Warning or
       Compile_Time_Error whose condition has a value that is not known at
--- 8203,8216 ----
  
  ‘-gnatw.C’
  
!      'Suppress warnings on missing component clauses.'
  
       This switch suppresses warnings for record components that are
       missing a component clause in the situation described above.
  
  ‘-gnatw_c’
  
!      'Activate warnings on unknown condition in Compile_Time_Warning.'
  
       This switch activates warnings on a pragma Compile_Time_Warning or
       Compile_Time_Error whose condition has a value that is not known at
*************** using the GNAT pragma Warnings (see the
*** 8218,8224 ****
  
  ‘-gnatw_C’
  
!      ‘Suppress warnings on unknown condition in Compile_Time_Warning.’
  
       This switch suppresses warnings on a pragma Compile_Time_Warning or
       Compile_Time_Error whose condition has a value that is not known at
--- 8218,8224 ----
  
  ‘-gnatw_C’
  
!      'Suppress warnings on unknown condition in Compile_Time_Warning.'
  
       This switch suppresses warnings on a pragma Compile_Time_Warning or
       Compile_Time_Error whose condition has a value that is not known at
*************** using the GNAT pragma Warnings (see the
*** 8226,8232 ****
  
  ‘-gnatwd’
  
!      ‘Activate warnings on implicit dereferencing.’
  
       If this switch is set, then the use of a prefix of an access type
       in an indexed component, slice, or selected component without an
--- 8226,8232 ----
  
  ‘-gnatwd’
  
!      'Activate warnings on implicit dereferencing.'
  
       If this switch is set, then the use of a prefix of an access type
       in an indexed component, slice, or selected component without an
*************** using the GNAT pragma Warnings (see the
*** 8238,8282 ****
  
  ‘-gnatwD’
  
!      ‘Suppress warnings on implicit dereferencing.’
  
       This switch suppresses warnings for implicit dereferences in
       indexed components, slices, and selected components.
  
  ‘-gnatw.d’
  
!      ‘Activate tagging of warning and info messages.’
  
       If this switch is set, then warning messages are tagged, with one
       of the following strings:
  
!              - ‘[-gnatw?]’ Used to tag warnings controlled by the switch
!                ‘-gnatwx’ where x is a letter a-z.
  
!              - ‘[-gnatw.?]’ Used to tag warnings controlled by the
                 switch ‘-gnatw.x’ where x is a letter a-z.
  
!              - ‘[-gnatel]’ Used to tag elaboration information (info)
                 messages generated when the static model of elaboration
                 is used and the ‘-gnatel’ switch is set.
  
!              - ‘[restriction warning]’ Used to tag warning messages for
                 restriction violations, activated by use of the pragma
                 ‘Restriction_Warnings’.
  
!              - ‘[warning-as-error]’ Used to tag warning messages that
                 have been converted to error messages by use of the
                 pragma Warning_As_Error.  Note that such warnings are
                 prefixed by the string “error: ” rather than “warning: “.
  
!              - ‘[enabled by default]’ Used to tag all other warnings
                 that are always given by default, unless warnings are
!                completely suppressed using pragma ‘Warnings(Off)’ or the
                 switch ‘-gnatws’.
  
  ‘-gnatw.D’
  
!      ‘Deactivate tagging of warning and info messages messages.’
  
       If this switch is set, then warning messages return to the default
       mode in which warnings and info messages are not tagged as
--- 8238,8282 ----
  
  ‘-gnatwD’
  
!      'Suppress warnings on implicit dereferencing.'
  
       This switch suppresses warnings for implicit dereferences in
       indexed components, slices, and selected components.
  
  ‘-gnatw.d’
  
!      'Activate tagging of warning and info messages.'
  
       If this switch is set, then warning messages are tagged, with one
       of the following strings:
  
!              - '[-gnatw?]'  Used to tag warnings controlled by the
!                switch ‘-gnatwx’ where x is a letter a-z.
  
!              - '[-gnatw.?]'  Used to tag warnings controlled by the
                 switch ‘-gnatw.x’ where x is a letter a-z.
  
!              - '[-gnatel]' Used to tag elaboration information (info)
                 messages generated when the static model of elaboration
                 is used and the ‘-gnatel’ switch is set.
  
!              - '[restriction warning]' Used to tag warning messages for
                 restriction violations, activated by use of the pragma
                 ‘Restriction_Warnings’.
  
!              - '[warning-as-error]' Used to tag warning messages that
                 have been converted to error messages by use of the
                 pragma Warning_As_Error.  Note that such warnings are
                 prefixed by the string “error: ” rather than “warning: “.
  
!              - '[enabled by default]' Used to tag all other warnings
                 that are always given by default, unless warnings are
!                completely suppressed using pragma 'Warnings(Off)' or the
                 switch ‘-gnatws’.
  
  ‘-gnatw.D’
  
!      'Deactivate tagging of warning and info messages messages.'
  
       If this switch is set, then warning messages return to the default
       mode in which warnings and info messages are not tagged as
*************** using the GNAT pragma Warnings (see the
*** 8284,8290 ****
  
  ‘-gnatwe’
  
!      ‘Treat warnings and style checks as errors.’
  
       This switch causes warning messages and style check messages to be
       treated as errors.  The warning string still appears, but the
--- 8284,8290 ----
  
  ‘-gnatwe’
  
!      'Treat warnings and style checks as errors.'
  
       This switch causes warning messages and style check messages to be
       treated as errors.  The warning string still appears, but the
*************** using the GNAT pragma Warnings (see the
*** 8296,8302 ****
  
  ‘-gnatw.e’
  
!      ‘Activate every optional warning.’
  
       This switch activates all optional warnings, including those which
       are not activated by ‘-gnatwa’.  The use of this switch is not
--- 8296,8302 ----
  
  ‘-gnatw.e’
  
!      'Activate every optional warning.'
  
       This switch activates all optional warnings, including those which
       are not activated by ‘-gnatwa’.  The use of this switch is not
*************** using the GNAT pragma Warnings (see the
*** 8309,8322 ****
  
  ‘-gnatwE’
  
!      ‘Treat all run-time exception warnings as errors.’
  
       This switch causes warning messages regarding errors that will be
       raised during run-time execution to be treated as errors.
  
  ‘-gnatwf’
  
!      ‘Activate warnings on unreferenced formals.’
  
       This switch causes a warning to be generated if a formal parameter
       is not referenced in the body of the subprogram.  This warning can
--- 8309,8322 ----
  
  ‘-gnatwE’
  
!      'Treat all run-time exception warnings as errors.'
  
       This switch causes warning messages regarding errors that will be
       raised during run-time execution to be treated as errors.
  
  ‘-gnatwf’
  
!      'Activate warnings on unreferenced formals.'
  
       This switch causes a warning to be generated if a formal parameter
       is not referenced in the body of the subprogram.  This warning can
*************** using the GNAT pragma Warnings (see the
*** 8325,8331 ****
  
  ‘-gnatwF’
  
!      ‘Suppress warnings on unreferenced formals.’
  
       This switch suppresses warnings for unreferenced formal parameters.
       Note that the combination ‘-gnatwu’ followed by ‘-gnatwF’ has the
--- 8325,8331 ----
  
  ‘-gnatwF’
  
!      'Suppress warnings on unreferenced formals.'
  
       This switch suppresses warnings for unreferenced formal parameters.
       Note that the combination ‘-gnatwu’ followed by ‘-gnatwF’ has the
*************** using the GNAT pragma Warnings (see the
*** 8334,8340 ****
  
  ‘-gnatwg’
  
!      ‘Activate warnings on unrecognized pragmas.’
  
       This switch causes a warning to be generated if an unrecognized
       pragma is encountered.  Apart from issuing this warning, the pragma
--- 8334,8340 ----
  
  ‘-gnatwg’
  
!      'Activate warnings on unrecognized pragmas.'
  
       This switch causes a warning to be generated if an unrecognized
       pragma is encountered.  Apart from issuing this warning, the pragma
*************** using the GNAT pragma Warnings (see the
*** 8344,8356 ****
  
  ‘-gnatwG’
  
!      ‘Suppress warnings on unrecognized pragmas.’
  
       This switch suppresses warnings for unrecognized pragmas.
  
  ‘-gnatw.g’
  
!      ‘Warnings used for GNAT sources.’
  
       This switch sets the warning categories that are used by the
       standard GNAT style.  Currently this is equivalent to
--- 8344,8356 ----
  
  ‘-gnatwG’
  
!      'Suppress warnings on unrecognized pragmas.'
  
       This switch suppresses warnings for unrecognized pragmas.
  
  ‘-gnatw.g’
  
!      'Warnings used for GNAT sources.'
  
       This switch sets the warning categories that are used by the
       standard GNAT style.  Currently this is equivalent to
*************** using the GNAT pragma Warnings (see the
*** 8359,8365 ****
  
  ‘-gnatwh’
  
!      ‘Activate warnings on hiding.’
  
       This switch activates warnings on hiding declarations that are
       considered potentially confusing.  Not all cases of hiding cause
--- 8359,8365 ----
  
  ‘-gnatwh’
  
!      'Activate warnings on hiding.'
  
       This switch activates warnings on hiding declarations that are
       considered potentially confusing.  Not all cases of hiding cause
*************** using the GNAT pragma Warnings (see the
*** 8369,8381 ****
  
  ‘-gnatwH’
  
!      ‘Suppress warnings on hiding.’
  
       This switch suppresses warnings on hiding declarations.
  
  ‘-gnatw.h’
  
!      ‘Activate warnings on holes/gaps in records.’
  
       This switch activates warnings on component clauses in record
       representation clauses that leave holes (gaps) in the record
--- 8369,8381 ----
  
  ‘-gnatwH’
  
!      'Suppress warnings on hiding.'
  
       This switch suppresses warnings on hiding declarations.
  
  ‘-gnatw.h’
  
!      'Activate warnings on holes/gaps in records.'
  
       This switch activates warnings on component clauses in record
       representation clauses that leave holes (gaps) in the record
*************** using the GNAT pragma Warnings (see the
*** 8389,8395 ****
  
  ‘-gnatw.H’
  
!      ‘Suppress warnings on holes/gaps in records.’
  
       This switch suppresses warnings on component clauses in record
       representation clauses that leave holes (haps) in the record
--- 8389,8395 ----
  
  ‘-gnatw.H’
  
!      'Suppress warnings on holes/gaps in records.'
  
       This switch suppresses warnings on component clauses in record
       representation clauses that leave holes (haps) in the record
*************** using the GNAT pragma Warnings (see the
*** 8397,8422 ****
  
  ‘-gnatwi’
  
!      ‘Activate warnings on implementation units.’
  
!      This switch activates warnings for a ‘with’ of an internal GNAT
       implementation unit, defined as any unit from the ‘Ada’,
       ‘Interfaces’, ‘GNAT’, or ‘System’ hierarchies that is not
       documented in either the Ada Reference Manual or the GNAT
       Programmer’s Reference Manual.  Such units are intended only for
!      internal implementation purposes and should not be ‘with’ed by user
       programs.  The default is that such warnings are generated
  
  ‘-gnatwI’
  
!      ‘Disable warnings on implementation units.’
  
!      This switch disables warnings for a ‘with’ of an internal GNAT
       implementation unit.
  
  ‘-gnatw.i’
  
!      ‘Activate warnings on overlapping actuals.’
  
       This switch enables a warning on statically detectable overlapping
       actuals in a subprogram call, when one of the actuals is an in-out
--- 8397,8422 ----
  
  ‘-gnatwi’
  
!      'Activate warnings on implementation units.'
  
!      This switch activates warnings for a 'with' of an internal GNAT
       implementation unit, defined as any unit from the ‘Ada’,
       ‘Interfaces’, ‘GNAT’, or ‘System’ hierarchies that is not
       documented in either the Ada Reference Manual or the GNAT
       Programmer’s Reference Manual.  Such units are intended only for
!      internal implementation purposes and should not be 'with'ed by user
       programs.  The default is that such warnings are generated
  
  ‘-gnatwI’
  
!      'Disable warnings on implementation units.'
  
!      This switch disables warnings for a 'with' of an internal GNAT
       implementation unit.
  
  ‘-gnatw.i’
  
!      'Activate warnings on overlapping actuals.'
  
       This switch enables a warning on statically detectable overlapping
       actuals in a subprogram call, when one of the actuals is an in-out
*************** using the GNAT pragma Warnings (see the
*** 8425,8437 ****
  
  ‘-gnatw.I’
  
!      ‘Disable warnings on overlapping actuals.’
  
       This switch disables warnings on overlapping actuals in a call.
  
  ‘-gnatwj’
  
!      ‘Activate warnings on obsolescent features (Annex J).’
  
       If this warning option is activated, then warnings are generated
       for calls to subprograms marked with ‘pragma Obsolescent’ and for
--- 8425,8437 ----
  
  ‘-gnatw.I’
  
!      'Disable warnings on overlapping actuals.'
  
       This switch disables warnings on overlapping actuals in a call.
  
  ‘-gnatwj’
  
!      'Activate warnings on obsolescent features (Annex J).'
  
       If this warning option is activated, then warnings are generated
       for calls to subprograms marked with ‘pragma Obsolescent’ and for
*************** using the GNAT pragma Warnings (see the
*** 8456,8482 ****
  
  ‘-gnatwJ’
  
!      ‘Suppress warnings on obsolescent features (Annex J).’
  
       This switch disables warnings on use of obsolescent features.
  
  ‘-gnatw.j’
  
!      ‘Activate warnings on late declarations of tagged type primitives.’
  
       This switch activates warnings on visible primitives added to a
       tagged type after deriving a private extension from it.
  
  ‘-gnatw.J’
  
!      ‘Suppress warnings on late declarations of tagged type primitives.’
  
       This switch suppresses warnings on visible primitives added to a
       tagged type after deriving a private extension from it.
  
  ‘-gnatwk’
  
!      ‘Activate warnings on variables that could be constants.’
  
       This switch activates warnings for variables that are initialized
       but never modified, and then could be declared constants.  The
--- 8456,8482 ----
  
  ‘-gnatwJ’
  
!      'Suppress warnings on obsolescent features (Annex J).'
  
       This switch disables warnings on use of obsolescent features.
  
  ‘-gnatw.j’
  
!      'Activate warnings on late declarations of tagged type primitives.'
  
       This switch activates warnings on visible primitives added to a
       tagged type after deriving a private extension from it.
  
  ‘-gnatw.J’
  
!      'Suppress warnings on late declarations of tagged type primitives.'
  
       This switch suppresses warnings on visible primitives added to a
       tagged type after deriving a private extension from it.
  
  ‘-gnatwk’
  
!      'Activate warnings on variables that could be constants.'
  
       This switch activates warnings for variables that are initialized
       but never modified, and then could be declared constants.  The
*************** using the GNAT pragma Warnings (see the
*** 8484,8497 ****
  
  ‘-gnatwK’
  
!      ‘Suppress warnings on variables that could be constants.’
  
       This switch disables warnings on variables that could be declared
       constants.
  
  ‘-gnatw.k’
  
!      ‘Activate warnings on redefinition of names in standard.’
  
       This switch activates warnings for declarations that declare a name
       that is defined in package Standard.  Such declarations can be
--- 8484,8497 ----
  
  ‘-gnatwK’
  
!      'Suppress warnings on variables that could be constants.'
  
       This switch disables warnings on variables that could be declared
       constants.
  
  ‘-gnatw.k’
  
!      'Activate warnings on redefinition of names in standard.'
  
       This switch activates warnings for declarations that declare a name
       that is defined in package Standard.  Such declarations can be
*************** using the GNAT pragma Warnings (see the
*** 8502,8515 ****
  
  ‘-gnatw.K’
  
!      ‘Suppress warnings on redefinition of names in standard.’
  
       This switch disables warnings for declarations that declare a name
       that is defined in package Standard.
  
  ‘-gnatwl’
  
!      ‘Activate warnings for elaboration pragmas.’
  
       This switch activates warnings for possible elaboration problems,
       including suspicious use of ‘Elaborate’ pragmas, when using the
--- 8502,8515 ----
  
  ‘-gnatw.K’
  
!      'Suppress warnings on redefinition of names in standard.'
  
       This switch disables warnings for declarations that declare a name
       that is defined in package Standard.
  
  ‘-gnatwl’
  
!      'Activate warnings for elaboration pragmas.'
  
       This switch activates warnings for possible elaboration problems,
       including suspicious use of ‘Elaborate’ pragmas, when using the
*************** using the GNAT pragma Warnings (see the
*** 8520,8532 ****
  
  ‘-gnatwL’
  
!      ‘Suppress warnings for elaboration pragmas.’
  
       This switch suppresses warnings for possible elaboration problems.
  
  ‘-gnatw.l’
  
!      ‘List inherited aspects.’
  
       This switch causes the compiler to list inherited invariants,
       preconditions, and postconditions from Type_Invariant’Class,
--- 8520,8532 ----
  
  ‘-gnatwL’
  
!      'Suppress warnings for elaboration pragmas.'
  
       This switch suppresses warnings for possible elaboration problems.
  
  ‘-gnatw.l’
  
!      'List inherited aspects.'
  
       This switch causes the compiler to list inherited invariants,
       preconditions, and postconditions from Type_Invariant’Class,
*************** using the GNAT pragma Warnings (see the
*** 8535,8547 ****
  
  ‘-gnatw.L’
  
!      ‘Suppress listing of inherited aspects.’
  
       This switch suppresses listing of inherited aspects.
  
  ‘-gnatwm’
  
!      ‘Activate warnings on modified but unreferenced variables.’
  
       This switch activates warnings for variables that are assigned
       (using an initialization value or with one or more assignment
--- 8535,8547 ----
  
  ‘-gnatw.L’
  
!      'Suppress listing of inherited aspects.'
  
       This switch suppresses listing of inherited aspects.
  
  ‘-gnatwm’
  
!      'Activate warnings on modified but unreferenced variables.'
  
       This switch activates warnings for variables that are assigned
       (using an initialization value or with one or more assignment
*************** using the GNAT pragma Warnings (see the
*** 8552,8565 ****
  
  ‘-gnatwM’
  
!      ‘Disable warnings on modified but unreferenced variables.’
  
       This switch disables warnings for variables that are assigned or
       initialized, but never read.
  
  ‘-gnatw.m’
  
!      ‘Activate warnings on suspicious modulus values.’
  
       This switch activates warnings for modulus values that seem
       suspicious.  The cases caught are where the size is the same as the
--- 8552,8565 ----
  
  ‘-gnatwM’
  
!      'Disable warnings on modified but unreferenced variables.'
  
       This switch disables warnings for variables that are assigned or
       initialized, but never read.
  
  ‘-gnatw.m’
  
!      'Activate warnings on suspicious modulus values.'
  
       This switch activates warnings for modulus values that seem
       suspicious.  The cases caught are where the size is the same as the
*************** using the GNAT pragma Warnings (see the
*** 8574,8586 ****
  
  ‘-gnatw.M’
  
!      ‘Disable warnings on suspicious modulus values.’
  
       This switch disables warnings for suspicious modulus values.
  
  ‘-gnatwn’
  
!      ‘Set normal warnings mode.’
  
       This switch sets normal warning mode, in which enabled warnings are
       issued and treated as warnings rather than errors.  This is the
--- 8574,8586 ----
  
  ‘-gnatw.M’
  
!      'Disable warnings on suspicious modulus values.'
  
       This switch disables warnings for suspicious modulus values.
  
  ‘-gnatwn’
  
!      'Set normal warnings mode.'
  
       This switch sets normal warning mode, in which enabled warnings are
       issued and treated as warnings rather than errors.  This is the
*************** using the GNAT pragma Warnings (see the
*** 8591,8597 ****
  
  ‘-gnatw.n’
  
!      ‘Activate warnings on atomic synchronization.’
  
       This switch actives warnings when an access to an atomic variable
       requires the generation of atomic synchronization code.  These
--- 8591,8597 ----
  
  ‘-gnatw.n’
  
!      'Activate warnings on atomic synchronization.'
  
       This switch actives warnings when an access to an atomic variable
       requires the generation of atomic synchronization code.  These
*************** using the GNAT pragma Warnings (see the
*** 8599,8612 ****
  
  ‘-gnatw.N’
  
!      ‘Suppress warnings on atomic synchronization.’
  
       This switch suppresses warnings when an access to an atomic
       variable requires the generation of atomic synchronization code.
  
  ‘-gnatwo’
  
!      ‘Activate warnings on address clause overlays.’
  
       This switch activates warnings for possibly unintended
       initialization effects of defining address clauses that cause one
--- 8599,8612 ----
  
  ‘-gnatw.N’
  
!      'Suppress warnings on atomic synchronization.'
  
       This switch suppresses warnings when an access to an atomic
       variable requires the generation of atomic synchronization code.
  
  ‘-gnatwo’
  
!      'Activate warnings on address clause overlays.'
  
       This switch activates warnings for possibly unintended
       initialization effects of defining address clauses that cause one
*************** using the GNAT pragma Warnings (see the
*** 8615,8621 ****
  
  ‘-gnatwO’
  
!      ‘Suppress warnings on address clause overlays.’
  
       This switch suppresses warnings on possibly unintended
       initialization effects of defining address clauses that cause one
--- 8615,8621 ----
  
  ‘-gnatwO’
  
!      'Suppress warnings on address clause overlays.'
  
       This switch suppresses warnings on possibly unintended
       initialization effects of defining address clauses that cause one
*************** using the GNAT pragma Warnings (see the
*** 8623,8629 ****
  
  ‘-gnatw.o’
  
!      ‘Activate warnings on modified but unreferenced out parameters.’
  
       This switch activates warnings for variables that are modified by
       using them as actuals for a call to a procedure with an out mode
--- 8623,8629 ----
  
  ‘-gnatw.o’
  
!      'Activate warnings on modified but unreferenced out parameters.'
  
       This switch activates warnings for variables that are modified by
       using them as actuals for a call to a procedure with an out mode
*************** using the GNAT pragma Warnings (see the
*** 8637,8643 ****
  
  ‘-gnatw.O’
  
!      ‘Disable warnings on modified but unreferenced out parameters.’
  
       This switch suppresses warnings for variables that are modified by
       using them as actuals for a call to a procedure with an out mode
--- 8637,8643 ----
  
  ‘-gnatw.O’
  
!      'Disable warnings on modified but unreferenced out parameters.'
  
       This switch suppresses warnings for variables that are modified by
       using them as actuals for a call to a procedure with an out mode
*************** using the GNAT pragma Warnings (see the
*** 8645,8651 ****
  
  ‘-gnatwp’
  
!      ‘Activate warnings on ineffective pragma Inlines.’
  
       This switch activates warnings for failure of front end inlining
       (activated by ‘-gnatN’) to inline a particular call.  There are
--- 8645,8651 ----
  
  ‘-gnatwp’
  
!      'Activate warnings on ineffective pragma Inlines.'
  
       This switch activates warnings for failure of front end inlining
       (activated by ‘-gnatN’) to inline a particular call.  There are
*************** using the GNAT pragma Warnings (see the
*** 8657,8663 ****
  
  ‘-gnatwP’
  
!      ‘Suppress warnings on ineffective pragma Inlines.’
  
       This switch suppresses warnings on ineffective pragma Inlines.  If
       the inlining mechanism cannot inline a call, it will simply ignore
--- 8657,8663 ----
  
  ‘-gnatwP’
  
!      'Suppress warnings on ineffective pragma Inlines.'
  
       This switch suppresses warnings on ineffective pragma Inlines.  If
       the inlining mechanism cannot inline a call, it will simply ignore
*************** using the GNAT pragma Warnings (see the
*** 8665,8671 ****
  
  ‘-gnatw.p’
  
!      ‘Activate warnings on parameter ordering.’
  
       This switch activates warnings for cases of suspicious parameter
       ordering when the list of arguments are all simple identifiers that
--- 8665,8671 ----
  
  ‘-gnatw.p’
  
!      'Activate warnings on parameter ordering.'
  
       This switch activates warnings for cases of suspicious parameter
       ordering when the list of arguments are all simple identifiers that
*************** using the GNAT pragma Warnings (see the
*** 8677,8690 ****
  
  ‘-gnatw.P’
  
!      ‘Suppress warnings on parameter ordering.’
  
       This switch suppresses warnings on cases of suspicious parameter
       ordering.
  
  ‘-gnatw_p’
  
!      ‘Activate warnings for pedantic checks.’
  
       This switch activates warnings for the failure of certain pedantic
       checks.  The only case currently supported is a check that the
--- 8677,8690 ----
  
  ‘-gnatw.P’
  
!      'Suppress warnings on parameter ordering.'
  
       This switch suppresses warnings on cases of suspicious parameter
       ordering.
  
  ‘-gnatw_p’
  
!      'Activate warnings for pedantic checks.'
  
       This switch activates warnings for the failure of certain pedantic
       checks.  The only case currently supported is a check that the
*************** using the GNAT pragma Warnings (see the
*** 8695,8707 ****
  
  ‘-gnatw_P’
  
!      ‘Suppress warnings for pedantic checks.’
  
       This switch suppresses warnings on violations of pedantic checks.
  
  ‘-gnatwq’
  
!      ‘Activate warnings on questionable missing parentheses.’
  
       This switch activates warnings for cases where parentheses are not
       used and the result is potential ambiguity from a readers point of
--- 8695,8707 ----
  
  ‘-gnatw_P’
  
!      'Suppress warnings for pedantic checks.'
  
       This switch suppresses warnings on violations of pedantic checks.
  
  ‘-gnatwq’
  
!      'Activate warnings on questionable missing parentheses.'
  
       This switch activates warnings for cases where parentheses are not
       used and the result is potential ambiguity from a readers point of
*************** using the GNAT pragma Warnings (see the
*** 8715,8728 ****
  
  ‘-gnatwQ’
  
!      ‘Suppress warnings on questionable missing parentheses.’
  
       This switch suppresses warnings for cases where the association is
       not clear and the use of parentheses is preferred.
  
  ‘-gnatw.q’
  
!      ‘Activate warnings on questionable layout of record types.’
  
       This switch activates warnings for cases where the default layout
       of a record type, that is to say the layout of its components in
--- 8715,8728 ----
  
  ‘-gnatwQ’
  
!      'Suppress warnings on questionable missing parentheses.'
  
       This switch suppresses warnings for cases where the association is
       not clear and the use of parentheses is preferred.
  
  ‘-gnatw.q’
  
!      'Activate warnings on questionable layout of record types.'
  
       This switch activates warnings for cases where the default layout
       of a record type, that is to say the layout of its components in
*************** using the GNAT pragma Warnings (see the
*** 8763,8776 ****
  
  ‘-gnatw.Q’
  
!      ‘Suppress warnings on questionable layout of record types.’
  
       This switch suppresses warnings for cases where the default layout
       of a record type would very likely cause inefficiencies.
  
  ‘-gnatw_q’
  
!      ‘Activate warnings for ignored equality operators.’
  
       This switch activates warnings for a user-defined “=” function that
       does not compose (i.e.  is ignored for a predefined “=” for a
--- 8763,8776 ----
  
  ‘-gnatw.Q’
  
!      'Suppress warnings on questionable layout of record types.'
  
       This switch suppresses warnings for cases where the default layout
       of a record type would very likely cause inefficiencies.
  
  ‘-gnatw_q’
  
!      'Activate warnings for ignored equality operators.'
  
       This switch activates warnings for a user-defined “=” function that
       does not compose (i.e.  is ignored for a predefined “=” for a
*************** using the GNAT pragma Warnings (see the
*** 8784,8794 ****
  
  ‘-gnatw_Q’
  
!      ‘Suppress warnings for ignored equality operators.’
  
  ‘-gnatwr’
  
!      ‘Activate warnings on redundant constructs.’
  
       This switch activates warnings for redundant constructs.  The
       following is the current list of constructs regarded as redundant:
--- 8784,8794 ----
  
  ‘-gnatw_Q’
  
!      'Suppress warnings for ignored equality operators.'
  
  ‘-gnatwr’
  
!      'Activate warnings on redundant constructs.'
  
       This switch activates warnings for redundant constructs.  The
       following is the current list of constructs regarded as redundant:
*************** using the GNAT pragma Warnings (see the
*** 8819,8831 ****
  
  ‘-gnatwR’
  
!      ‘Suppress warnings on redundant constructs.’
  
       This switch suppresses warnings for redundant constructs.
  
  ‘-gnatw.r’
  
!      ‘Activate warnings for object renaming function.’
  
       This switch activates warnings for an object renaming that renames
       a function call, which is equivalent to a constant declaration (as
--- 8819,8831 ----
  
  ‘-gnatwR’
  
!      'Suppress warnings on redundant constructs.'
  
       This switch suppresses warnings for redundant constructs.
  
  ‘-gnatw.r’
  
!      'Activate warnings for object renaming function.'
  
       This switch activates warnings for an object renaming that renames
       a function call, which is equivalent to a constant declaration (as
*************** using the GNAT pragma Warnings (see the
*** 8834,8846 ****
  
  ‘-gnatw.R’
  
!      ‘Suppress warnings for object renaming function.’
  
       This switch suppresses warnings for object renaming function.
  
  ‘-gnatw_r’
  
!      ‘Activate warnings for out-of-order record representation clauses.’
  
       This switch activates warnings for record representation clauses,
       if the order of component declarations, component clauses, and
--- 8834,8846 ----
  
  ‘-gnatw.R’
  
!      'Suppress warnings for object renaming function.'
  
       This switch suppresses warnings for object renaming function.
  
  ‘-gnatw_r’
  
!      'Activate warnings for out-of-order record representation clauses.'
  
       This switch activates warnings for record representation clauses,
       if the order of component declarations, component clauses, and
*************** using the GNAT pragma Warnings (see the
*** 8849,8859 ****
  
  ‘-gnatw_R’
  
!      ‘Suppress warnings for out-of-order record representation clauses.’
  
  ‘-gnatws’
  
!      ‘Suppress all warnings.’
  
       This switch completely suppresses the output of all warning
       messages from the GNAT front end, including both warnings that can
--- 8849,8859 ----
  
  ‘-gnatw_R’
  
!      'Suppress warnings for out-of-order record representation clauses.'
  
  ‘-gnatws’
  
!      'Suppress all warnings.'
  
       This switch completely suppresses the output of all warning
       messages from the GNAT front end, including both warnings that can
*************** using the GNAT pragma Warnings (see the
*** 8869,8875 ****
  
  ‘-gnatw.s’
  
!      ‘Activate warnings on overridden size clauses.’
  
       This switch activates warnings on component clauses in record
       representation clauses where the length given overrides that
--- 8869,8875 ----
  
  ‘-gnatw.s’
  
!      'Activate warnings on overridden size clauses.'
  
       This switch activates warnings on component clauses in record
       representation clauses where the length given overrides that
*************** using the GNAT pragma Warnings (see the
*** 8880,8886 ****
  
  ‘-gnatw.S’
  
!      ‘Suppress warnings on overridden size clauses.’
  
       This switch suppresses warnings on component clauses in record
       representation clauses that override size clauses, and similar
--- 8880,8886 ----
  
  ‘-gnatw.S’
  
!      'Suppress warnings on overridden size clauses.'
  
       This switch suppresses warnings on component clauses in record
       representation clauses that override size clauses, and similar
*************** using the GNAT pragma Warnings (see the
*** 8888,8894 ****
  
  ‘-gnatw_s’
  
!      ‘Activate warnings on ineffective predicate tests.’
  
       This switch activates warnings on Static_Predicate aspect
       specifications that test for values that do not belong to the
--- 8888,8894 ----
  
  ‘-gnatw_s’
  
!      'Activate warnings on ineffective predicate tests.'
  
       This switch activates warnings on Static_Predicate aspect
       specifications that test for values that do not belong to the
*************** using the GNAT pragma Warnings (see the
*** 8896,8902 ****
  
  ‘-gnatw_S’
  
!      ‘Suppress warnings on ineffective predicate tests.’
  
       This switch suppresses warnings on Static_Predicate aspect
       specifications that test for values that do not belong to the
--- 8896,8902 ----
  
  ‘-gnatw_S’
  
!      'Suppress warnings on ineffective predicate tests.'
  
       This switch suppresses warnings on Static_Predicate aspect
       specifications that test for values that do not belong to the
*************** using the GNAT pragma Warnings (see the
*** 8904,8910 ****
  
  ‘-gnatwt’
  
!      ‘Activate warnings for tracking of deleted conditional code.’
  
       This switch activates warnings for tracking of code in conditionals
       (IF and CASE statements) that is detected to be dead code which
--- 8904,8910 ----
  
  ‘-gnatwt’
  
!      'Activate warnings for tracking of deleted conditional code.'
  
       This switch activates warnings for tracking of code in conditionals
       (IF and CASE statements) that is detected to be dead code which
*************** using the GNAT pragma Warnings (see the
*** 8914,8927 ****
  
  ‘-gnatwT’
  
!      ‘Suppress warnings for tracking of deleted conditional code.’
  
       This switch suppresses warnings for tracking of deleted conditional
       code.
  
  ‘-gnatw.t’
  
!      ‘Activate warnings on suspicious contracts.’
  
       This switch activates warnings on suspicious contracts.  This
       includes warnings on suspicious postconditions (whether a pragma
--- 8914,8927 ----
  
  ‘-gnatwT’
  
!      'Suppress warnings for tracking of deleted conditional code.'
  
       This switch suppresses warnings for tracking of deleted conditional
       code.
  
  ‘-gnatw.t’
  
!      'Activate warnings on suspicious contracts.'
  
       This switch activates warnings on suspicious contracts.  This
       includes warnings on suspicious postconditions (whether a pragma
*************** using the GNAT pragma Warnings (see the
*** 8939,8970 ****
  
  ‘-gnatw.T’
  
!      ‘Suppress warnings on suspicious contracts.’
  
       This switch suppresses warnings on suspicious contracts.
  
  ‘-gnatwu’
  
!      ‘Activate warnings on unused entities.’
  
       This switch activates warnings to be generated for entities that
!      are declared but not referenced, and for units that are ‘with’ed
       and not referenced.  In the case of packages, a warning is also
       generated if no entities in the package are referenced.  This means
       that if a with’ed package is referenced but the only references are
       in ‘use’ clauses or ‘renames’ declarations, a warning is still
       generated.  A warning is also generated for a generic package that
!      is ‘with’ed but never instantiated.  In the case where a package or
!      subprogram body is compiled, and there is a ‘with’ on the
       corresponding spec that is only referenced in the body, a warning
!      is also generated, noting that the ‘with’ can be moved to the body.
       The default is that such warnings are not generated.  This switch
       also activates warnings on unreferenced formals (it includes the
       effect of ‘-gnatwf’).
  
  ‘-gnatwU’
  
!      ‘Suppress warnings on unused entities.’
  
       This switch suppresses warnings for unused entities and packages.
       It also turns off warnings on unreferenced formals (and thus
--- 8939,8970 ----
  
  ‘-gnatw.T’
  
!      'Suppress warnings on suspicious contracts.'
  
       This switch suppresses warnings on suspicious contracts.
  
  ‘-gnatwu’
  
!      'Activate warnings on unused entities.'
  
       This switch activates warnings to be generated for entities that
!      are declared but not referenced, and for units that are 'with'ed
       and not referenced.  In the case of packages, a warning is also
       generated if no entities in the package are referenced.  This means
       that if a with’ed package is referenced but the only references are
       in ‘use’ clauses or ‘renames’ declarations, a warning is still
       generated.  A warning is also generated for a generic package that
!      is 'with'ed but never instantiated.  In the case where a package or
!      subprogram body is compiled, and there is a 'with' on the
       corresponding spec that is only referenced in the body, a warning
!      is also generated, noting that the 'with' can be moved to the body.
       The default is that such warnings are not generated.  This switch
       also activates warnings on unreferenced formals (it includes the
       effect of ‘-gnatwf’).
  
  ‘-gnatwU’
  
!      'Suppress warnings on unused entities.'
  
       This switch suppresses warnings for unused entities and packages.
       It also turns off warnings on unreferenced formals (and thus
*************** using the GNAT pragma Warnings (see the
*** 8972,8984 ****
  
  ‘-gnatw.u’
  
!      ‘Activate warnings on unordered enumeration types.’
  
       This switch causes enumeration types to be considered as
       conceptually unordered, unless an explicit pragma ‘Ordered’ is
       given for the type.  The effect is to generate warnings in clients
       that use explicit comparisons or subranges, since these constructs
!      both treat objects of the type as ordered.  (A ‘client’ is defined
       as a unit that is other than the unit in which the type is
       declared, or its body or subunits.)  Please refer to the
       description of pragma ‘Ordered’ in the ‘GNAT Reference Manual’ for
--- 8972,8984 ----
  
  ‘-gnatw.u’
  
!      'Activate warnings on unordered enumeration types.'
  
       This switch causes enumeration types to be considered as
       conceptually unordered, unless an explicit pragma ‘Ordered’ is
       given for the type.  The effect is to generate warnings in clients
       that use explicit comparisons or subranges, since these constructs
!      both treat objects of the type as ordered.  (A 'client' is defined
       as a unit that is other than the unit in which the type is
       declared, or its body or subunits.)  Please refer to the
       description of pragma ‘Ordered’ in the ‘GNAT Reference Manual’ for
*************** using the GNAT pragma Warnings (see the
*** 8987,8993 ****
  
  ‘-gnatw.U’
  
!      ‘Deactivate warnings on unordered enumeration types.’
  
       This switch causes all enumeration types to be considered as
       ordered, so that no warnings are given for comparisons or subranges
--- 8987,8993 ----
  
  ‘-gnatw.U’
  
!      'Deactivate warnings on unordered enumeration types.'
  
       This switch causes all enumeration types to be considered as
       ordered, so that no warnings are given for comparisons or subranges
*************** using the GNAT pragma Warnings (see the
*** 8995,9001 ****
  
  ‘-gnatwv’
  
!      ‘Activate warnings on unassigned variables.’
  
       This switch activates warnings for access to variables which may
       not be properly initialized.  The default is that such warnings are
--- 8995,9001 ----
  
  ‘-gnatwv’
  
!      'Activate warnings on unassigned variables.'
  
       This switch activates warnings for access to variables which may
       not be properly initialized.  The default is that such warnings are
*************** using the GNAT pragma Warnings (see the
*** 9008,9021 ****
  
  ‘-gnatwV’
  
!      ‘Suppress warnings on unassigned variables.’
  
       This switch suppresses warnings for access to variables which may
       not be properly initialized.
  
  ‘-gnatw.v’
  
!      ‘Activate info messages for non-default bit order.’
  
       This switch activates messages (labeled “info”, they are not
       warnings, just informational messages) about the effects of
--- 9008,9021 ----
  
  ‘-gnatwV’
  
!      'Suppress warnings on unassigned variables.'
  
       This switch suppresses warnings for access to variables which may
       not be properly initialized.
  
  ‘-gnatw.v’
  
!      'Activate info messages for non-default bit order.'
  
       This switch activates messages (labeled “info”, they are not
       warnings, just informational messages) about the effects of
*************** using the GNAT pragma Warnings (see the
*** 9027,9033 ****
  
  ‘-gnatw.V’
  
!      ‘Suppress info messages for non-default bit order.’
  
       This switch suppresses information messages for the effects of
       specifying non-default bit order on record components with
--- 9027,9033 ----
  
  ‘-gnatw.V’
  
!      'Suppress info messages for non-default bit order.'
  
       This switch suppresses information messages for the effects of
       specifying non-default bit order on record components with
*************** using the GNAT pragma Warnings (see the
*** 9035,9041 ****
  
  ‘-gnatww’
  
!      ‘Activate warnings on wrong low bound assumption.’
  
       This switch activates warnings for indexing an unconstrained string
       parameter with a literal or S’Length.  This is a case where the
--- 9035,9041 ----
  
  ‘-gnatww’
  
!      'Activate warnings on wrong low bound assumption.'
  
       This switch activates warnings for indexing an unconstrained string
       parameter with a literal or S’Length.  This is a case where the
*************** using the GNAT pragma Warnings (see the
*** 9045,9051 ****
  
  ‘-gnatwW’
  
!      ‘Suppress warnings on wrong low bound assumption.’
  
       This switch suppresses warnings for indexing an unconstrained
       string parameter with a literal or S’Length.  Note that this
--- 9045,9051 ----
  
  ‘-gnatwW’
  
!      'Suppress warnings on wrong low bound assumption.'
  
       This switch suppresses warnings for indexing an unconstrained
       string parameter with a literal or S’Length.  Note that this
*************** using the GNAT pragma Warnings (see the
*** 9059,9065 ****
  
  ‘-gnatw.w’
  
!      ‘Activate warnings on Warnings Off pragmas.’
  
       This switch activates warnings for use of ‘pragma Warnings (Off,
       entity)’ where either the pragma is entirely useless (because it
--- 9059,9065 ----
  
  ‘-gnatw.w’
  
!      'Activate warnings on Warnings Off pragmas.'
  
       This switch activates warnings for use of ‘pragma Warnings (Off,
       entity)’ where either the pragma is entirely useless (because it
*************** using the GNAT pragma Warnings (see the
*** 9072,9085 ****
  
  ‘-gnatw.W’
  
!      ‘Suppress warnings on unnecessary Warnings Off pragmas.’
  
       This switch suppresses warnings for use of ‘pragma Warnings (Off,
       ...)’.
  
  ‘-gnatwx’
  
!      ‘Activate warnings on Export/Import pragmas.’
  
       This switch activates warnings on Export/Import pragmas when the
       compiler detects a possible conflict between the Ada and foreign
--- 9072,9085 ----
  
  ‘-gnatw.W’
  
!      'Suppress warnings on unnecessary Warnings Off pragmas.'
  
       This switch suppresses warnings for use of ‘pragma Warnings (Off,
       ...)’.
  
  ‘-gnatwx’
  
!      'Activate warnings on Export/Import pragmas.'
  
       This switch activates warnings on Export/Import pragmas when the
       compiler detects a possible conflict between the Ada and foreign
*************** using the GNAT pragma Warnings (see the
*** 9090,9096 ****
  
  ‘-gnatwX’
  
!      ‘Suppress warnings on Export/Import pragmas.’
  
       This switch suppresses warnings on Export/Import pragmas.  The
       sense of this is that you are telling the compiler that you know
--- 9090,9096 ----
  
  ‘-gnatwX’
  
!      'Suppress warnings on Export/Import pragmas.'
  
       This switch suppresses warnings on Export/Import pragmas.  The
       sense of this is that you are telling the compiler that you know
*************** using the GNAT pragma Warnings (see the
*** 9099,9105 ****
  
  ‘-gnatw.x’
  
!      ‘Activate warnings for No_Exception_Propagation mode.’
  
       This switch activates warnings for exception usage when pragma
       Restrictions (No_Exception_Propagation) is in effect.  Warnings are
--- 9099,9105 ----
  
  ‘-gnatw.x’
  
!      'Activate warnings for No_Exception_Propagation mode.'
  
       This switch activates warnings for exception usage when pragma
       Restrictions (No_Exception_Propagation) is in effect.  Warnings are
*************** using the GNAT pragma Warnings (see the
*** 9110,9123 ****
  
  ‘-gnatw.X’
  
!      ‘Disable warnings for No_Exception_Propagation mode.’
  
       This switch disables warnings for exception usage when pragma
       Restrictions (No_Exception_Propagation) is in effect.
  
  ‘-gnatwy’
  
!      ‘Activate warnings for Ada compatibility issues.’
  
       For the most part, newer versions of Ada are upwards compatible
       with older versions.  For example, Ada 2005 programs will almost
--- 9110,9123 ----
  
  ‘-gnatw.X’
  
!      'Disable warnings for No_Exception_Propagation mode.'
  
       This switch disables warnings for exception usage when pragma
       Restrictions (No_Exception_Propagation) is in effect.
  
  ‘-gnatwy’
  
!      'Activate warnings for Ada compatibility issues.'
  
       For the most part, newer versions of Ada are upwards compatible
       with older versions.  For example, Ada 2005 programs will almost
*************** using the GNAT pragma Warnings (see the
*** 9130,9143 ****
  
  ‘-gnatwY’
  
!      ‘Disable warnings for Ada compatibility issues.’
  
       This switch suppresses the warnings intended to help in identifying
       incompatibilities between Ada language versions.
  
  ‘-gnatw.y’
  
!      ‘Activate information messages for why package spec needs body.’
  
       There are a number of cases in which a package spec needs a body.
       For example, the use of pragma Elaborate_Body, or the declaration
--- 9130,9143 ----
  
  ‘-gnatwY’
  
!      'Disable warnings for Ada compatibility issues.'
  
       This switch suppresses the warnings intended to help in identifying
       incompatibilities between Ada language versions.
  
  ‘-gnatw.y’
  
!      'Activate information messages for why package spec needs body.'
  
       There are a number of cases in which a package spec needs a body.
       For example, the use of pragma Elaborate_Body, or the declaration
*************** using the GNAT pragma Warnings (see the
*** 9149,9162 ****
  
  ‘-gnatw.Y’
  
!      ‘Disable information messages for why package spec needs body.’
  
       This switch suppresses the output of information messages showing
       why a package specification needs a body.
  
  ‘-gnatwz’
  
!      ‘Activate warnings on unchecked conversions.’
  
       This switch activates warnings for unchecked conversions where the
       types are known at compile time to have different sizes.  The
--- 9149,9162 ----
  
  ‘-gnatw.Y’
  
!      'Disable information messages for why package spec needs body.'
  
       This switch suppresses the output of information messages showing
       why a package specification needs a body.
  
  ‘-gnatwz’
  
!      'Activate warnings on unchecked conversions.'
  
       This switch activates warnings for unchecked conversions where the
       types are known at compile time to have different sizes.  The
*************** using the GNAT pragma Warnings (see the
*** 9165,9171 ****
  
  ‘-gnatwZ’
  
!      ‘Suppress warnings on unchecked conversions.’
  
       This switch suppresses warnings for unchecked conversions where the
       types are known at compile time to have different sizes or
--- 9165,9171 ----
  
  ‘-gnatwZ’
  
!      'Suppress warnings on unchecked conversions.'
  
       This switch suppresses warnings for unchecked conversions where the
       types are known at compile time to have different sizes or
*************** using the GNAT pragma Warnings (see the
*** 9173,9179 ****
  
  ‘-gnatw.z’
  
!      ‘Activate warnings for size not a multiple of alignment.’
  
       This switch activates warnings for cases of array and record types
       with specified ‘Size’ and ‘Alignment’ attributes where the size is
--- 9173,9179 ----
  
  ‘-gnatw.z’
  
!      'Activate warnings for size not a multiple of alignment.'
  
       This switch activates warnings for cases of array and record types
       with specified ‘Size’ and ‘Alignment’ attributes where the size is
*************** using the GNAT pragma Warnings (see the
*** 9183,9189 ****
  
  ‘-gnatw.Z’
  
!      ‘Suppress warnings for size not a multiple of alignment.’
  
       This switch suppresses warnings for cases of array and record types
       with specified ‘Size’ and ‘Alignment’ attributes where the size is
--- 9183,9189 ----
  
  ‘-gnatw.Z’
  
!      'Suppress warnings for size not a multiple of alignment.'
  
       This switch suppresses warnings for cases of array and record types
       with specified ‘Size’ and ‘Alignment’ attributes where the size is
*************** default checks required by Ada as descri
*** 9467,9487 ****
  
  ‘-gnatVa’
  
!      ‘All validity checks.’
  
       All validity checks are turned on.  That is, ‘-gnatVa’ is
       equivalent to ‘gnatVcdefimoprst’.
  
  ‘-gnatVc’
  
!      ‘Validity checks for copies.’
  
       The right-hand side of assignments, and the (explicit) initializing
       values of object declarations are validity checked.
  
  ‘-gnatVd’
  
!      ‘Default (RM) validity checks.’
  
       Some validity checks are required by Ada (see RM 13.9.1 (9-11));
       these (and only these) validity checks are enabled by default.  For
--- 9467,9487 ----
  
  ‘-gnatVa’
  
!      'All validity checks.'
  
       All validity checks are turned on.  That is, ‘-gnatVa’ is
       equivalent to ‘gnatVcdefimoprst’.
  
  ‘-gnatVc’
  
!      'Validity checks for copies.'
  
       The right-hand side of assignments, and the (explicit) initializing
       values of object declarations are validity checked.
  
  ‘-gnatVd’
  
!      'Default (RM) validity checks.'
  
       Some validity checks are required by Ada (see RM 13.9.1 (9-11));
       these (and only these) validity checks are enabled by default.  For
*************** default checks required by Ada as descri
*** 9501,9507 ****
  
  ‘-gnatVe’
  
!      ‘Validity checks for scalar components.’
  
       In the absence of this switch, assignments to scalar components of
       enclosing record or array objects are not validity checked, even if
--- 9501,9507 ----
  
  ‘-gnatVe’
  
!      'Validity checks for scalar components.'
  
       In the absence of this switch, assignments to scalar components of
       enclosing record or array objects are not validity checked, even if
*************** default checks required by Ada as descri
*** 9511,9517 ****
  
  ‘-gnatVf’
  
!      ‘Validity checks for floating-point values.’
  
       Specifying this switch enables validity checking for floating-point
       values in the same contexts where validity checking is enabled for
--- 9511,9517 ----
  
  ‘-gnatVf’
  
!      'Validity checks for floating-point values.'
  
       Specifying this switch enables validity checking for floating-point
       values in the same contexts where validity checking is enabled for
*************** default checks required by Ada as descri
*** 9532,9545 ****
  
  ‘-gnatVi’
  
!      ‘Validity checks for ‘‘in‘‘ mode parameters.’
  
       Arguments for parameters of mode ‘in’ are validity checked in
       function and procedure calls at the point of call.
  
  ‘-gnatVm’
  
!      ‘Validity checks for ‘‘in out‘‘ mode parameters.’
  
       Arguments for parameters of mode ‘in out’ are validity checked in
       procedure calls at the point of call.  The ‘'m'’ here stands for
--- 9532,9545 ----
  
  ‘-gnatVi’
  
!      'Validity checks for ''in'' mode parameters.'
  
       Arguments for parameters of mode ‘in’ are validity checked in
       function and procedure calls at the point of call.
  
  ‘-gnatVm’
  
!      'Validity checks for ''in out'' mode parameters.'
  
       Arguments for parameters of mode ‘in out’ are validity checked in
       procedure calls at the point of call.  The ‘'m'’ here stands for
*************** default checks required by Ada as descri
*** 9551,9557 ****
  
  ‘-gnatVn’
  
!      ‘No validity checks.’
  
       This switch turns off all validity checking, including the default
       checking for case statements and left hand side subscripts.  Note
--- 9551,9557 ----
  
  ‘-gnatVn’
  
!      'No validity checks.'
  
       This switch turns off all validity checking, including the default
       checking for case statements and left hand side subscripts.  Note
*************** default checks required by Ada as descri
*** 9561,9567 ****
  
  ‘-gnatVo’
  
!      ‘Validity checks for operator and attribute operands.’
  
       Scalar arguments for predefined operators and for attributes are
       validity checked.  This includes all operators in package
--- 9561,9567 ----
  
  ‘-gnatVo’
  
!      'Validity checks for operator and attribute operands.'
  
       Scalar arguments for predefined operators and for attributes are
       validity checked.  This includes all operators in package
*************** default checks required by Ada as descri
*** 9574,9580 ****
  
  ‘-gnatVp’
  
!      ‘Validity checks for parameters.’
  
       This controls the treatment of formal parameters within a
       subprogram (as opposed to ‘-gnatVi’ and ‘-gnatVm’, which control
--- 9574,9580 ----
  
  ‘-gnatVp’
  
!      'Validity checks for parameters.'
  
       This controls the treatment of formal parameters within a
       subprogram (as opposed to ‘-gnatVi’ and ‘-gnatVm’, which control
*************** default checks required by Ada as descri
*** 9590,9603 ****
  
  ‘-gnatVr’
  
!      ‘Validity checks for function returns.’
  
       The expression in simple ‘return’ statements in functions is
       validity checked.
  
  ‘-gnatVs’
  
!      ‘Validity checks for subscripts.’
  
       All subscript expressions are checked for validity, whatever
       context they occur in (in default mode some subscripts are not
--- 9590,9603 ----
  
  ‘-gnatVr’
  
!      'Validity checks for function returns.'
  
       The expression in simple ‘return’ statements in functions is
       validity checked.
  
  ‘-gnatVs’
  
!      'Validity checks for subscripts.'
  
       All subscript expressions are checked for validity, whatever
       context they occur in (in default mode some subscripts are not
*************** default checks required by Ada as descri
*** 9606,9612 ****
  
  ‘-gnatVt’
  
!      ‘Validity checks for tests.’
  
       Expressions used as conditions in ‘if’, ‘while’ or ‘exit’
       statements are checked, as well as guard expressions in entry
--- 9606,9612 ----
  
  ‘-gnatVt’
  
!      'Validity checks for tests.'
  
       Expressions used as conditions in ‘if’, ‘while’ or ‘exit’
       statements are checked, as well as guard expressions in entry
*************** defined:
*** 9661,9667 ****
  
  ‘-gnaty0’
  
!      ‘Specify indentation level.’
  
       If a digit from 1-9 appears in the string after ‘-gnaty’ then
       proper indentation is checked, with the digit indicating the
--- 9661,9667 ----
  
  ‘-gnaty0’
  
!      'Specify indentation level.'
  
       If a digit from 1-9 appears in the string after ‘-gnaty’ then
       proper indentation is checked, with the digit indicating the
*************** defined:
*** 9687,9693 ****
  
  ‘-gnatya’
  
!      ‘Check attribute casing.’
  
       Attribute names, including the case of keywords such as ‘digits’
       used as attributes names, must be written in mixed case, that is,
--- 9687,9693 ----
  
  ‘-gnatya’
  
!      'Check attribute casing.'
  
       Attribute names, including the case of keywords such as ‘digits’
       used as attributes names, must be written in mixed case, that is,
*************** defined:
*** 9696,9702 ****
  
  ‘-gnatyA’
  
!      ‘Use of array index numbers in array attributes.’
  
       When using the array attributes First, Last, Range, or Length, the
       index number must be omitted for one-dimensional arrays and is
--- 9696,9702 ----
  
  ‘-gnatyA’
  
!      'Use of array index numbers in array attributes.'
  
       When using the array attributes First, Last, Range, or Length, the
       index number must be omitted for one-dimensional arrays and is
*************** defined:
*** 9704,9710 ****
  
  ‘-gnatyb’
  
!      ‘Blanks not allowed at statement end.’
  
       Trailing blanks are not allowed at the end of statements.  The
       purpose of this rule, together with h (no horizontal tabs), is to
--- 9704,9710 ----
  
  ‘-gnatyb’
  
!      'Blanks not allowed at statement end.'
  
       Trailing blanks are not allowed at the end of statements.  The
       purpose of this rule, together with h (no horizontal tabs), is to
*************** defined:
*** 9713,9719 ****
  
  ‘-gnatyB’
  
!      ‘Check Boolean operators.’
  
       The use of AND/OR operators is not permitted except in the cases of
       modular operands, array operands, and simple stand-alone boolean
--- 9713,9719 ----
  
  ‘-gnatyB’
  
!      'Check Boolean operators.'
  
       The use of AND/OR operators is not permitted except in the cases of
       modular operands, array operands, and simple stand-alone boolean
*************** defined:
*** 9722,9728 ****
  
  ‘-gnatyc’
  
!      ‘Check comments, double space.’
  
       Comments must meet the following set of rules:
  
--- 9722,9728 ----
  
  ‘-gnatyc’
  
!      'Check comments, double space.'
  
       Comments must meet the following set of rules:
  
*************** defined:
*** 9765,9785 ****
  
  ‘-gnatyC’
  
!      ‘Check comments, single space.’
  
       This is identical to ‘c’ except that only one space is required
       following the ‘--’ of a comment instead of two.
  
  ‘-gnatyd’
  
!      ‘Check no DOS line terminators present.’
  
       All lines must be terminated by a single ASCII.LF character (in
       particular the DOS line terminator sequence CR/LF is not allowed).
  
  ‘-gnatyD’
  
!      ‘Check declared identifiers in mixed case.’
  
       Declared identifiers must be in mixed case, as in
       This_Is_An_Identifier.  Use -gnatyr in addition to ensure that
--- 9765,9785 ----
  
  ‘-gnatyC’
  
!      'Check comments, single space.'
  
       This is identical to ‘c’ except that only one space is required
       following the ‘--’ of a comment instead of two.
  
  ‘-gnatyd’
  
!      'Check no DOS line terminators present.'
  
       All lines must be terminated by a single ASCII.LF character (in
       particular the DOS line terminator sequence CR/LF is not allowed).
  
  ‘-gnatyD’
  
!      'Check declared identifiers in mixed case.'
  
       Declared identifiers must be in mixed case, as in
       This_Is_An_Identifier.  Use -gnatyr in addition to ensure that
*************** defined:
*** 9787,9807 ****
  
  ‘-gnatye’
  
!      ‘Check end/exit labels.’
  
       Optional labels on ‘end’ statements ending subprograms and on
       ‘exit’ statements exiting named loops, are required to be present.
  
  ‘-gnatyf’
  
!      ‘No form feeds or vertical tabs.’
  
       Neither form feeds nor vertical tab characters are permitted in the
       source text.
  
  ‘-gnatyg’
  
!      ‘GNAT style mode.’
  
       The set of style check switches is set to match that used by the
       GNAT sources.  This may be useful when developing code that is
--- 9787,9807 ----
  
  ‘-gnatye’
  
!      'Check end/exit labels.'
  
       Optional labels on ‘end’ statements ending subprograms and on
       ‘exit’ statements exiting named loops, are required to be present.
  
  ‘-gnatyf’
  
!      'No form feeds or vertical tabs.'
  
       Neither form feeds nor vertical tab characters are permitted in the
       source text.
  
  ‘-gnatyg’
  
!      'GNAT style mode.'
  
       The set of style check switches is set to match that used by the
       GNAT sources.  This may be useful when developing code that is
*************** defined:
*** 9811,9817 ****
  
  ‘-gnatyh’
  
!      ‘No horizontal tabs.’
  
       Horizontal tab characters are not permitted in the source text.
       Together with the b (no blanks at end of line) check, this enforces
--- 9811,9817 ----
  
  ‘-gnatyh’
  
!      'No horizontal tabs.'
  
       Horizontal tab characters are not permitted in the source text.
       Together with the b (no blanks at end of line) check, this enforces
*************** defined:
*** 9819,9825 ****
  
  ‘-gnatyi’
  
!      ‘Check if-then layout.’
  
       The keyword ‘then’ must appear either on the same line as
       corresponding ‘if’, or on a line on its own, lined up under the
--- 9819,9825 ----
  
  ‘-gnatyi’
  
!      'Check if-then layout.'
  
       The keyword ‘then’ must appear either on the same line as
       corresponding ‘if’, or on a line on its own, lined up under the
*************** defined:
*** 9827,9840 ****
  
  ‘-gnatyI’
  
!      ‘check mode IN keywords.’
  
       Mode ‘in’ (the default mode) is not allowed to be given explicitly.
       ‘in out’ is fine, but not ‘in’ on its own.
  
  ‘-gnatyk’
  
!      ‘Check keyword casing.’
  
       All keywords must be in lower case (with the exception of keywords
       such as ‘digits’ used as attribute names to which this check does
--- 9827,9840 ----
  
  ‘-gnatyI’
  
!      'check mode IN keywords.'
  
       Mode ‘in’ (the default mode) is not allowed to be given explicitly.
       ‘in out’ is fine, but not ‘in’ on its own.
  
  ‘-gnatyk’
  
!      'Check keyword casing.'
  
       All keywords must be in lower case (with the exception of keywords
       such as ‘digits’ used as attribute names to which this check does
*************** defined:
*** 9843,9849 ****
  
  ‘-gnatyl’
  
!      ‘Check layout.’
  
       Layout of statement and declaration constructs must follow the
       recommendations in the Ada Reference Manual, as indicated by the
--- 9843,9849 ----
  
  ‘-gnatyl’
  
!      'Check layout.'
  
       Layout of statement and declaration constructs must follow the
       recommendations in the Ada Reference Manual, as indicated by the
*************** defined:
*** 9908,9922 ****
  
  ‘-gnatyL’
  
!      ‘Set maximum nesting level.’
  
       The maximum level of nesting of constructs (including subprograms,
       loops, blocks, packages, and conditionals) may not exceed the given
!      value ‘nnn’.  A value of zero disconnects this style check.
  
  ‘-gnatym’
  
!      ‘Check maximum line length.’
  
       The length of source lines must not exceed 79 characters, including
       any trailing blanks.  The value of 79 allows convenient display on
--- 9908,9922 ----
  
  ‘-gnatyL’
  
!      'Set maximum nesting level.'
  
       The maximum level of nesting of constructs (including subprograms,
       loops, blocks, packages, and conditionals) may not exceed the given
!      value 'nnn'.  A value of zero disconnects this style check.
  
  ‘-gnatym’
  
!      'Check maximum line length.'
  
       The length of source lines must not exceed 79 characters, including
       any trailing blanks.  The value of 79 allows convenient display on
*************** defined:
*** 9929,9937 ****
  
  ‘-gnatyM’
  
!      ‘Set maximum line length.’
  
!      The length of lines must not exceed the given value ‘nnn’.  The
       maximum value that can be specified is 32767.  If neither style
       option for setting the line length is used, then the default is
       255.  This also controls the maximum length of lexical elements,
--- 9929,9937 ----
  
  ‘-gnatyM’
  
!      'Set maximum line length.'
  
!      The length of lines must not exceed the given value 'nnn'.  The
       maximum value that can be specified is 32767.  If neither style
       option for setting the line length is used, then the default is
       255.  This also controls the maximum length of lexical elements,
*************** defined:
*** 9939,9945 ****
  
  ‘-gnatyn’
  
!      ‘Check casing of entities in Standard.’
  
       Any identifier from Standard must be cased to match the
       presentation in the Ada Reference Manual (for example, ‘Integer’
--- 9939,9945 ----
  
  ‘-gnatyn’
  
!      'Check casing of entities in Standard.'
  
       Any identifier from Standard must be cased to match the
       presentation in the Ada Reference Manual (for example, ‘Integer’
*************** defined:
*** 9947,9959 ****
  
  ‘-gnatyN’
  
!      ‘Turn off all style checks.’
  
       All style check options are turned off.
  
  ‘-gnatyo’
  
!      ‘Check order of subprogram bodies.’
  
       All subprogram bodies in a given scope (e.g., a package body) must
       be in alphabetical order.  The ordering rule uses normal Ada rules
--- 9947,9959 ----
  
  ‘-gnatyN’
  
!      'Turn off all style checks.'
  
       All style check options are turned off.
  
  ‘-gnatyo’
  
!      'Check order of subprogram bodies.'
  
       All subprogram bodies in a given scope (e.g., a package body) must
       be in alphabetical order.  The ordering rule uses normal Ada rules
*************** defined:
*** 9963,9969 ****
  
  ‘-gnatyO’
  
!      ‘Check that overriding subprograms are explicitly marked as such.’
  
       This applies to all subprograms of a derived type that override a
       primitive operation of the type, for both tagged and untagged
--- 9963,9969 ----
  
  ‘-gnatyO’
  
!      'Check that overriding subprograms are explicitly marked as such.'
  
       This applies to all subprograms of a derived type that override a
       primitive operation of the type, for both tagged and untagged
*************** defined:
*** 9975,9981 ****
  
  ‘-gnatyp’
  
!      ‘Check pragma casing.’
  
       Pragma names must be written in mixed case, that is, the initial
       letter and any letter following an underscore must be uppercase.
--- 9975,9981 ----
  
  ‘-gnatyp’
  
!      'Check pragma casing.'
  
       Pragma names must be written in mixed case, that is, the initial
       letter and any letter following an underscore must be uppercase.
*************** defined:
*** 9984,9990 ****
  
  ‘-gnatyr’
  
!      ‘Check references.’
  
       All identifier references must be cased in the same way as the
       corresponding declaration.  No specific casing style is imposed on
--- 9984,9990 ----
  
  ‘-gnatyr’
  
!      'Check references.'
  
       All identifier references must be cased in the same way as the
       corresponding declaration.  No specific casing style is imposed on
*************** defined:
*** 9993,9999 ****
  
  ‘-gnatys’
  
!      ‘Check separate specs.’
  
       Separate declarations (‘specs’) are required for subprograms (a
       body is not allowed to serve as its own declaration).  The only
--- 9993,9999 ----
  
  ‘-gnatys’
  
!      'Check separate specs.'
  
       Separate declarations (‘specs’) are required for subprograms (a
       body is not allowed to serve as its own declaration).  The only
*************** defined:
*** 10003,10009 ****
  
  ‘-gnatyS’
  
!      ‘Check no statements after then/else.’
  
       No statements are allowed on the same line as a ‘then’ or ‘else’
       keyword following the keyword in an ‘if’ statement.  ‘or else’ and
--- 10003,10009 ----
  
  ‘-gnatyS’
  
!      'Check no statements after then/else.'
  
       No statements are allowed on the same line as a ‘then’ or ‘else’
       keyword following the keyword in an ‘if’ statement.  ‘or else’ and
*************** defined:
*** 10012,10018 ****
  
  ‘-gnatyt’
  
!      ‘Check token spacing.’
  
       The following token spacing rules are enforced:
  
--- 10012,10018 ----
  
  ‘-gnatyt’
  
!      'Check token spacing.'
  
       The following token spacing rules are enforced:
  
*************** defined:
*** 10058,10064 ****
  
  ‘-gnatyu’
  
!      ‘Check unnecessary blank lines.’
  
       Unnecessary blank lines are not allowed.  A blank line is
       considered unnecessary if it appears at the end of the file, or if
--- 10058,10064 ----
  
  ‘-gnatyu’
  
!      'Check unnecessary blank lines.'
  
       Unnecessary blank lines are not allowed.  A blank line is
       considered unnecessary if it appears at the end of the file, or if
*************** defined:
*** 10066,10072 ****
  
  ‘-gnatyx’
  
!      ‘Check extra parentheses.’
  
       Unnecessary extra levels of parentheses (C-style) are not allowed
       around conditions (or selection expressions) in ‘if’, ‘while’,
--- 10066,10072 ----
  
  ‘-gnatyx’
  
!      'Check extra parentheses.'
  
       Unnecessary extra levels of parentheses (C-style) are not allowed
       around conditions (or selection expressions) in ‘if’, ‘while’,
*************** defined:
*** 10074,10080 ****
  
  ‘-gnatyy’
  
!      ‘Set all standard style check options.’
  
       This is equivalent to ‘gnaty3aAbcefhiklmnprst’, that is all
       checking options enabled with the exception of ‘-gnatyB’,
--- 10074,10080 ----
  
  ‘-gnatyy’
  
!      'Set all standard style check options.'
  
       This is equivalent to ‘gnaty3aAbcefhiklmnprst’, that is all
       checking options enabled with the exception of ‘-gnatyB’,
*************** defined:
*** 10083,10108 ****
  
  ‘-gnatyz’
  
!      ‘Check extra parentheses (operator precedence).’
  
       Extra levels of parentheses that are not required by operator
       precedence rules are flagged.  See also ‘-gnatyx’.
  
  ‘-gnaty-’
  
!      ‘Remove style check options.’
  
       This causes any subsequent options in the string to act as
       canceling the corresponding style check option.  To cancel maximum
       nesting level control, use the ‘L’ parameter without any integer
!      value after that, because any digit following ‘-’ in the parameter
       string of the ‘-gnaty’ option will be treated as canceling the
       indentation check.  The same is true for the ‘M’ parameter.  ‘y’
!      and ‘N’ parameters are not allowed after ‘-’.
  
  ‘-gnaty+’
  
!      ‘Enable style check options.’
  
       This causes any subsequent options in the string to enable the
       corresponding style check option.  That is, it cancels the effect
--- 10083,10108 ----
  
  ‘-gnatyz’
  
!      'Check extra parentheses (operator precedence).'
  
       Extra levels of parentheses that are not required by operator
       precedence rules are flagged.  See also ‘-gnatyx’.
  
  ‘-gnaty-’
  
!      'Remove style check options.'
  
       This causes any subsequent options in the string to act as
       canceling the corresponding style check option.  To cancel maximum
       nesting level control, use the ‘L’ parameter without any integer
!      value after that, because any digit following '-' in the parameter
       string of the ‘-gnaty’ option will be treated as canceling the
       indentation check.  The same is true for the ‘M’ parameter.  ‘y’
!      and ‘N’ parameters are not allowed after '-'.
  
  ‘-gnaty+’
  
!      'Enable style check options.'
  
       This causes any subsequent options in the string to enable the
       corresponding style check option.  That is, it cancels the effect
*************** default behavior.
*** 10204,10216 ****
       Overflow checks are always enabled by this switch.  The argument
       controls the mode, using the codes
  
!      ‘1 = STRICT’
  
            In STRICT mode, intermediate operations are always done using
            the base type, and overflow checking ensures that the result
            is within the base type range.
  
!      ‘2 = MINIMIZED’
  
            In MINIMIZED mode, overflows in intermediate operations are
            avoided where possible by using a larger integer type for the
--- 10204,10216 ----
       Overflow checks are always enabled by this switch.  The argument
       controls the mode, using the codes
  
!      '1 = STRICT'
  
            In STRICT mode, intermediate operations are always done using
            the base type, and overflow checking ensures that the result
            is within the base type range.
  
!      '2 = MINIMIZED'
  
            In MINIMIZED mode, overflows in intermediate operations are
            avoided where possible by using a larger integer type for the
*************** default behavior.
*** 10218,10224 ****
            checking ensures that the result fits in this larger integer
            type.
  
!      ‘3 = ELIMINATED’
  
            In ELIMINATED mode, overflows in intermediate operations are
            avoided by using multi-precision arithmetic.  In this case,
--- 10218,10224 ----
            checking ensures that the result fits in this larger integer
            type.
  
!      '3 = ELIMINATED'
  
            In ELIMINATED mode, overflows in intermediate operations are
            avoided by using multi-precision arithmetic.  In this case,
*************** File: gnat_ugn.info,  Node: Using gcc fo
*** 10309,10315 ****
       Otherwise, the output is simply the error messages, if any.  No
       object file or ALI file is generated by a syntax-only compilation.
       Also, no units other than the one specified are accessed.  For
!      example, if a unit ‘X’ ‘with’s a unit ‘Y’, compiling unit ‘X’ in
       syntax check only mode does not access the source file containing
       unit ‘Y’.
  
--- 10309,10315 ----
       Otherwise, the output is simply the error messages, if any.  No
       object file or ALI file is generated by a syntax-only compilation.
       Also, no units other than the one specified are accessed.  For
!      example, if a unit ‘X’ 'with's a unit ‘Y’, compiling unit ‘X’ in
       syntax check only mode does not access the source file containing
       unit ‘Y’.
  
*************** mode, or indicate Ada 83 compatibility m
*** 10386,10392 ****
       and Ada 2005 are upwardly compatible with Ada 83.  Thus a correct
       Ada 83 program is usually also a correct program in these later
       versions of the language standard.  For further information please
!      refer to the ‘Compatibility and Porting Guide’ chapter in the ‘GNAT
       Reference Manual’.
  
  ‘-gnat95’ (Ada 95 mode)
--- 10386,10392 ----
       and Ada 2005 are upwardly compatible with Ada 83.  Thus a correct
       Ada 83 program is usually also a correct program in these later
       versions of the language standard.  For further information please
!      refer to the 'Compatibility and Porting Guide' chapter in the ‘GNAT
       Reference Manual’.
  
  ‘-gnat95’ (Ada 95 mode)
*************** File: gnat_ugn.info,  Node: Character Se
*** 10456,10492 ****
       identifiers.  ‘c’ is a single character indicating the character
       set, as follows:
  
!      ‘1’            ISO 8859-1 (Latin-1) identifiers
                      
                      
!      ‘2’            ISO 8859-2 (Latin-2) letters allowed in identifiers
                      
                      
!      ‘3’            ISO 8859-3 (Latin-3) letters allowed in identifiers
                      
                      
!      ‘4’            ISO 8859-4 (Latin-4) letters allowed in identifiers
                      
                      
!      ‘5’            ISO 8859-5 (Cyrillic) letters allowed in identifiers
                      
                      
!      ‘9’            ISO 8859-15 (Latin-9) letters allowed in identifiers
                      
                      
!      ‘p’            IBM PC letters (code page 437) allowed in identifiers
                      
                      
!      ‘8’            IBM PC letters (code page 850) allowed in identifiers
                      
                      
!      ‘f’            Full upper-half codes allowed in identifiers
                      
                      
!      ‘n’            No upper-half codes allowed in identifiers
                      
                      
!      ‘w’            Wide-character codes (that is, codes greater than 255)
                      allowed in identifiers
                      
  
--- 10456,10492 ----
       identifiers.  ‘c’ is a single character indicating the character
       set, as follows:
  
!      '1'            ISO 8859-1 (Latin-1) identifiers
                      
                      
!      '2'            ISO 8859-2 (Latin-2) letters allowed in identifiers
                      
                      
!      '3'            ISO 8859-3 (Latin-3) letters allowed in identifiers
                      
                      
!      '4'            ISO 8859-4 (Latin-4) letters allowed in identifiers
                      
                      
!      '5'            ISO 8859-5 (Cyrillic) letters allowed in identifiers
                      
                      
!      '9'            ISO 8859-15 (Latin-9) letters allowed in identifiers
                      
                      
!      'p'            IBM PC letters (code page 437) allowed in identifiers
                      
                      
!      '8'            IBM PC letters (code page 850) allowed in identifiers
                      
                      
!      'f'            Full upper-half codes allowed in identifiers
                      
                      
!      'n'            No upper-half codes allowed in identifiers
                      
                      
!      'w'            Wide-character codes (that is, codes greater than 255)
                      allowed in identifiers
                      
  
*************** File: gnat_ugn.info,  Node: Character Se
*** 10498,10519 ****
       Specify the method of encoding for wide characters.  ‘e’ is one of
       the following:
  
!      ‘h’            Hex encoding (brackets coding also recognized)
                      
                      
!      ‘u’            Upper half encoding (brackets encoding also recognized)
                      
                      
!      ‘s’            Shift/JIS encoding (brackets encoding also recognized)
                      
                      
!      ‘e’            EUC encoding (brackets encoding also recognized)
                      
                      
!      ‘8’            UTF-8 encoding (brackets encoding also recognized)
                      
                      
!      ‘b’            Brackets encoding only (default value)
                      
  
       For full details on these encoding methods see *note Wide_Character
--- 10498,10519 ----
       Specify the method of encoding for wide characters.  ‘e’ is one of
       the following:
  
!      'h'            Hex encoding (brackets coding also recognized)
                      
                      
!      'u'            Upper half encoding (brackets encoding also recognized)
                      
                      
!      's'            Shift/JIS encoding (brackets encoding also recognized)
                      
                      
!      'e'            EUC encoding (brackets encoding also recognized)
                      
                      
!      '8'            UTF-8 encoding (brackets encoding also recognized)
                      
                      
!      'b'            Brackets encoding only (default value)
                      
  
       For full details on these encoding methods see *note Wide_Character
*************** File: gnat_ugn.info,  Node: Auxiliary Ou
*** 10647,10662 ****
       status and allows an integrated development environment to better
       react to a compilation failure.  Those exit status are:
  
!      ‘5’            There was an error in at least one source file.
                      
                      
!      ‘3’            At least one source file did not generate an object file.
                      
                      
!      ‘2’            The compiler died unexpectedly (internal error for example).
                      
                      
!      ‘0’            An object file has been generated for every source file.
                      
  
  
--- 10647,10662 ----
       status and allows an integrated development environment to better
       react to a compilation failure.  Those exit status are:
  
!      '5'            There was an error in at least one source file.
                      
                      
!      '3'            At least one source file did not generate an object file.
                      
                      
!      '2'            The compiler died unexpectedly (internal error for example).
                      
                      
!      '0'            An object file has been generated for every source file.
                      
  
  
*************** presented in subsequent sections.
*** 11386,11392 ****
  
       Generate a binder file suitable for space-constrained applications.
       When active, binder-generated objects not required for program
!      operation are no longer generated.  ‘Warning:’ this option comes
       with the following limitations:
  
          * Starting the program’s execution in the debugger will cause it
--- 11386,11392 ----
  
       Generate a binder file suitable for space-constrained applications.
       When active, binder-generated objects not required for program
!      operation are no longer generated.  'Warning:' this option comes
       with the following limitations:
  
          * Starting the program’s execution in the debugger will cause it
*************** presented in subsequent sections.
*** 11417,11423 ****
  
  ‘-o `file'’
  
!      Name the output file ‘file’ (default is ‘b~`xxx’.adb‘).  Note that
       if this option is used, then linking must be done manually,
       gnatlink cannot be used.
  
--- 11417,11423 ----
  
  ‘-o `file'’
  
!      Name the output file ‘file’ (default is ‘b~`xxx’.adb').  Note that
       if this option is used, then linking must be done manually,
       gnatlink cannot be used.
  
*************** presented in subsequent sections.
*** 11445,11453 ****
       While the binder sizes this pool to match the number of such tasks
       defined in the application, the pool size may need to be increased
       with the ‘-Q’ switch to accommodate foreign threads registered with
!      the Light run-time.  For more information, please see the ‘The
!      Primary and Secondary Stack’ chapter in the ‘GNAT User’s Guide
!      Supplement for Cross Platforms’.
  
  ‘-R’
  
--- 11445,11453 ----
       While the binder sizes this pool to match the number of such tasks
       defined in the application, the pool size may need to be increased
       with the ‘-Q’ switch to accommodate foreign threads registered with
!      the Light run-time.  For more information, please see the 'The
!      Primary and Secondary Stack' chapter in the 'GNAT User’s Guide
!      Supplement for Cross Platforms'.
  
  ‘-R’
  
*************** generated by the binder.
*** 11846,11852 ****
  ‘-o `file'’
  
       Set name of output file to ‘file’ instead of the normal
!      ‘b~`mainprog’.adb‘ default.  Note that ‘file’ denote the Ada binder
       generated body filename.  Note that if this option is used, then
       linking must be done manually.  It is not possible to use gnatlink
       in this case, since it cannot locate the binder file.
--- 11846,11852 ----
  ‘-o `file'’
  
       Set name of output file to ‘file’ instead of the normal
!      ‘b~`mainprog’.adb' default.  Note that ‘file’ denote the Ada binder
       generated body filename.  Note that if this option is used, then
       linking must be done manually.  It is not possible to use gnatlink
       in this case, since it cannot locate the binder file.
*************** containing the following callable routin
*** 11928,11934 ****
  If the ‘-n’ switch is given, more than one ALI file may appear on the
  command line for ‘gnatbind’.  The normal ‘closure’ calculation is
  performed for each of the specified units.  Calculating the closure
! means finding out the set of units involved by tracing ‘with’
  references.  The reason it is necessary to be able to specify more than
  one ALI file is that a given program may invoke two or more quite
  separate groups of Ada units.
--- 11928,11934 ----
  If the ‘-n’ switch is given, more than one ALI file may appear on the
  command line for ‘gnatbind’.  The normal ‘closure’ calculation is
  performed for each of the specified units.  Calculating the closure
! means finding out the set of units involved by tracing 'with'
  references.  The reason it is necessary to be able to specify more than
  one ALI file is that a given program may invoke two or more quite
  separate groups of Ada units.
*************** correctly, the two variables
*** 11984,11991 ****
  
  are declared in one of the GNAT library routines.  These variables must
  be set from the actual ‘argc’ and ‘argv’ values passed to the main
! program.  With no ‘n’ present, ‘gnatbind’ generates the C main program
! to automatically set these variables.  If the ‘n’ switch is used, there
  is no automatic way to set these variables.  If they are not set, the
  procedures in ‘Ada.Command_Line’ will not be available, and any attempt
  to use them will raise ‘Constraint_Error’.  If command line access is
--- 11984,11991 ----
  
  are declared in one of the GNAT library routines.  These variables must
  be set from the actual ‘argc’ and ‘argv’ values passed to the main
! program.  With no 'n' present, ‘gnatbind’ generates the C main program
! to automatically set these variables.  If the 'n' switch is used, there
  is no automatic way to set these variables.  If they are not set, the
  procedures in ‘Ada.Command_Line’ will not be available, and any attempt
  to use them will raise ‘Constraint_Error’.  If command line access is
*************** contained in object file ‘demo1.o’ i
*** 12767,12794 ****
  compilation of demo1 has been modified (DIF). Each source file has a
  status qualifier which can be:
  
! ‘OK (unchanged)’
  
       The version of the source file used for the compilation of the
       specified unit corresponds exactly to the actual source file.
  
! ‘MOK (slightly modified)’
  
       The version of the source file used for the compilation of the
       specified unit differs from the actual source file but not enough
       to require recompilation.  If you use gnatmake with the option ‘-m’
       (minimal recompilation), a file marked MOK will not be recompiled.
  
! ‘DIF (modified)’
  
       No version of the source found on the path corresponds to the
       source used to build this object.
  
! ‘??? (file not found)’
  
       No source file was found for this unit.
  
! ‘HID (hidden, unchanged version not first on PATH)’
  
       The version of the source that corresponds exactly to the source
       used for compilation has been found on the path but it is hidden by
--- 12767,12794 ----
  compilation of demo1 has been modified (DIF). Each source file has a
  status qualifier which can be:
  
! 'OK (unchanged)'
  
       The version of the source file used for the compilation of the
       specified unit corresponds exactly to the actual source file.
  
! 'MOK (slightly modified)'
  
       The version of the source file used for the compilation of the
       specified unit differs from the actual source file but not enough
       to require recompilation.  If you use gnatmake with the option ‘-m’
       (minimal recompilation), a file marked MOK will not be recompiled.
  
! 'DIF (modified)'
  
       No version of the source found on the path corresponds to the
       source used to build this object.
  
! '??? (file not found)'
  
       No source file was found for this unit.
  
! 'HID (hidden, unchanged version not first on PATH)'
  
       The version of the source that corresponds exactly to the source
       used for compilation has been found on the path but it is hidden by
*************** File: gnat_ugn.info,  Node: Switches for
*** 12866,12888 ****
       format giving as much as information possible on each requested
       units, including special characteristics such as:
  
!         * ‘Preelaborable’: The unit is preelaborable in the Ada sense.
  
!         * ‘No_Elab_Code’: No elaboration code has been produced by the
            compiler for this unit.
  
!         * ‘Pure’: The unit is pure in the Ada sense.
  
!         * ‘Elaborate_Body’: The unit contains a pragma Elaborate_Body.
  
!         * ‘Remote_Types’: The unit contains a pragma Remote_Types.
  
!         * ‘Shared_Passive’: The unit contains a pragma Shared_Passive.
  
!         * ‘Predefined’: This unit is part of the predefined environment
            and cannot be modified by the user.
  
!         * ‘Remote_Call_Interface’: The unit contains a pragma
            Remote_Call_Interface.
  
  
--- 12866,12888 ----
       format giving as much as information possible on each requested
       units, including special characteristics such as:
  
!         * 'Preelaborable': The unit is preelaborable in the Ada sense.
  
!         * 'No_Elab_Code': No elaboration code has been produced by the
            compiler for this unit.
  
!         * 'Pure': The unit is pure in the Ada sense.
  
!         * 'Elaborate_Body': The unit contains a pragma Elaborate_Body.
  
!         * 'Remote_Types': The unit contains a pragma Remote_Types.
  
!         * 'Shared_Passive': The unit contains a pragma Shared_Passive.
  
!         * 'Predefined': This unit is part of the predefined environment
            and cannot be modified by the user.
  
!         * 'Remote_Call_Interface': The unit contains a pragma
            Remote_Call_Interface.
  
  
*************** File: gnat_ugn.info,  Node: Introduction
*** 13117,13123 ****
  
  ‘GDB’ contains a large repertoire of commands.  See ‘Debugging with GDB’
  for extensive documentation on the use of these commands, together with
! examples of their use.  Furthermore, the command ‘help’ invoked from
  within GDB activates a simple help facility which summarizes the
  available commands and their options.  In this section we summarize a
  few of the most commonly used commands to give an idea of what ‘GDB’ is
--- 13117,13123 ----
  
  ‘GDB’ contains a large repertoire of commands.  See ‘Debugging with GDB’
  for extensive documentation on the use of these commands, together with
! examples of their use.  Furthermore, the command 'help' invoked from
  within GDB activates a simple help facility which summarizes the
  available commands and their options.  In this section we summarize a
  few of the most commonly used commands to give an idea of what ‘GDB’ is
*************** you read through the following section.
*** 13128,13134 ****
     * 
       ‘set args ARGUMENTS’
  
!           The ‘arguments’ list above is a list of arguments to be passed
            to the program on a subsequent run command, just as though the
            arguments had been entered on a normal invocation of the
            program.  The ‘set args’ command is not needed if the program
--- 13128,13134 ----
     * 
       ‘set args ARGUMENTS’
  
!           The 'arguments' list above is a list of arguments to be passed
            to the program on a subsequent run command, just as though the
            arguments had been entered on a normal invocation of the
            program.  The ‘set args’ command is not needed if the program
*************** you read through the following section.
*** 13148,13154 ****
  
            The breakpoint command sets a breakpoint, that is to say a
            point at which execution will halt and ‘GDB’ will await
!           further commands.  ‘location’ is either a line number within a
            file, given in the format ‘file:linenumber’, or it is the name
            of a subprogram.  If you request that a breakpoint be set on a
            subprogram that is overloaded, a prompt will ask you to
--- 13148,13154 ----
  
            The breakpoint command sets a breakpoint, that is to say a
            point at which execution will halt and ‘GDB’ will await
!           further commands.  'location' is either a line number within a
            file, given in the format ‘file:linenumber’, or it is the name
            of a subprogram.  If you request that a breakpoint be set on a
            subprogram that is overloaded, a prompt will ask you to
*************** procedure that prints the elements in th
*** 13347,13353 ****
  
  File: gnat_ugn.info,  Node: Using the next Command in a Function,  Next: Stopping When Ada Exceptions Are Raised,  Prev: Calling User-Defined Subprograms,  Up: Running and Debugging Ada Programs
  
! 6.1.6 Using the ‘next’ Command in a Function
  --------------------------------------------
  
  When you use the ‘next’ command in a function, the current source
--- 13347,13353 ----
  
  File: gnat_ugn.info,  Node: Using the next Command in a Function,  Next: Stopping When Ada Exceptions Are Raised,  Prev: Calling User-Defined Subprograms,  Up: Running and Debugging Ada Programs
  
! 6.1.6 Using the 'next' Command in a Function
  --------------------------------------------
  
  When you use the ‘next’ command in a function, the current source
*************** program raises selected exceptions.
*** 13387,13393 ****
       ‘catch exception NAME’
  
            Set a catchpoint that stops execution whenever (any task in
!           the) program raises the exception ‘name’.
  
     * 
       ‘catch exception unhandled’
--- 13387,13393 ----
       ‘catch exception NAME’
  
            Set a catchpoint that stops execution whenever (any task in
!           the) program raises the exception 'name'.
  
     * 
       ‘catch exception unhandled’
*************** program raises selected exceptions.
*** 13401,13408 ****
  
            The ‘info exceptions’ command permits the user to examine all
            defined exceptions within Ada programs.  With a regular
!           expression, ‘regexp’, as argument, prints out only those
!           exceptions whose name matches ‘regexp’.
  
  
  File: gnat_ugn.info,  Node: Ada Tasks,  Next: Debugging Generic Units,  Prev: Stopping When Ada Exceptions Are Raised,  Up: Running and Debugging Ada Programs
--- 13401,13408 ----
  
            The ‘info exceptions’ command permits the user to examine all
            defined exceptions within Ada programs.  With a regular
!           expression, 'regexp', as argument, prints out only those
!           exceptions whose name matches 'regexp'.
  
  
  File: gnat_ugn.info,  Node: Ada Tasks,  Next: Debugging Generic Units,  Prev: Stopping When Ada Exceptions Are Raised,  Up: Running and Debugging Ada Programs
*************** File: gnat_ugn.info,  Node: Ada Tasks,
*** 13430,13449 ****
            the task ID that is used to refer to tasks in the following
            commands.
  
!    * ‘break’ ‘linespec’ ‘task’ ‘taskid’, ‘break’ ‘linespec’ ‘task’
!      ‘taskid’ ‘if’ …
  
            These commands are like the ‘break ... thread ...’.
!           ‘linespec’ specifies source lines.
  
            Use the qualifier ‘task TASKID’ with a breakpoint command to
            specify that you only want ‘GDB’ to stop the program when a
!           particular Ada task reaches this breakpoint.  ‘taskid’ is one
            of the numeric task identifiers assigned by ‘GDB’, shown in
            the first column of the ‘info tasks’ display.
  
            If you do not specify ‘task TASKID’ when you set a breakpoint,
!           the breakpoint applies to ‘all’ tasks of your program.
  
            You can use the ‘task’ qualifier on conditional breakpoints as
            well; in this case, place ‘task TASKID’ before the breakpoint
--- 13430,13449 ----
            the task ID that is used to refer to tasks in the following
            commands.
  
!    * ‘break’ 'linespec' ‘task’ 'taskid', ‘break’ 'linespec' ‘task’
!      'taskid' ‘if’ …
  
            These commands are like the ‘break ... thread ...’.
!           'linespec' specifies source lines.
  
            Use the qualifier ‘task TASKID’ with a breakpoint command to
            specify that you only want ‘GDB’ to stop the program when a
!           particular Ada task reaches this breakpoint.  'taskid' is one
            of the numeric task identifiers assigned by ‘GDB’, shown in
            the first column of the ‘info tasks’ display.
  
            If you do not specify ‘task TASKID’ when you set a breakpoint,
!           the breakpoint applies to 'all' tasks of your program.
  
            You can use the ‘task’ qualifier on conditional breakpoints as
            well; in this case, place ‘task TASKID’ before the breakpoint
*************** File: gnat_ugn.info,  Node: Ada Tasks,
*** 13452,13458 ****
     * ‘task TASKNO’
  
            This command allows switching to the task referred by
!           ‘taskno’.  In particular, this allows browsing of the
            backtrace of the specified task.  It is advisable to switch
            back to the original task before continuing execution
            otherwise the scheduling of the program may be perturbed.
--- 13452,13458 ----
     * ‘task TASKNO’
  
            This command allows switching to the task referred by
!           'taskno'.  In particular, this allows browsing of the
            backtrace of the specified task.  It is advisable to switch
            back to the original task before continuing execution
            otherwise the scheduling of the program may be perturbed.
*************** It is also possible to use gdbserver to
*** 13551,13558 ****
  program, in which case the execution of that program is simply suspended
  until the connection between the debugger and gdbserver is established.
  
! For more information on how to use gdbserver, see the ‘Using the
! gdbserver Program’ section in ‘Debugging with GDB’. GNAT provides
  support for gdbserver on x86-linux, x86-windows and x86_64-linux.
  
  
--- 13551,13558 ----
  program, in which case the execution of that program is simply suspended
  until the connection between the debugger and gdbserver is established.
  
! For more information on how to use gdbserver, see the 'Using the
! gdbserver Program' section in ‘Debugging with GDB’. GNAT provides
  support for gdbserver on x86-linux, x86-windows and x86_64-linux.
  
  
*************** File: gnat_ugn.info,  Node: Stack Traceb
*** 13692,13698 ****
  Traceback is a mechanism to display the sequence of subprogram calls
  that leads to a specified execution point in a program.  Often (but not
  always) the execution point is an instruction at which an exception has
! been raised.  This mechanism is also known as ‘stack unwinding’ because
  it obtains its information by scanning the run-time stack and recovering
  the activation records of all active subprograms.  Stack unwinding is
  one of the most important tools for program debugging.
--- 13692,13698 ----
  Traceback is a mechanism to display the sequence of subprogram calls
  that leads to a specified execution point in a program.  Often (but not
  always) the execution point is an instruction at which an exception has
! been raised.  This mechanism is also known as 'stack unwinding' because
  it obtains its information by scanning the run-time stack and recovering
  the activation records of all active subprograms.  Stack unwinding is
  one of the most important tools for program debugging.
*************** invoked with its ‘/r’ option:
*** 14156,14162 ****
            $1 = (
              tree => (...
  
! Finer control of pretty-printers is also possible: see GDB’s online
  documentation(2) for more information.
  
     ---------- Footnotes ----------
--- 14156,14162 ----
            $1 = (
              tree => (...
  
! Finer control of pretty-printers is also possible: see GDB's online
  documentation(2) for more information.
  
     ---------- Footnotes ----------
*************** experiment to find the best level for yo
*** 14550,14564 ****
  
  Since the precise set of optimizations done at each level will vary from
  release to release (and sometime from target to target), it is best to
! think of the optimization settings in general terms.  See the ‘Options
! That Control Optimization’ section in ‘Using the GNU Compiler Collection
  (GCC)’ for details about the ‘-O’ settings and a number of ‘-f’ options
  that individually enable or disable specific optimizations.
  
  Unlike some other compilation systems, ‘gcc’ has been tested extensively
  at all optimization levels.  There are some bugs which appear only with
  optimization turned on, but there have also been bugs which show up only
! in ‘unoptimized’ code.  Selecting a lower level of optimization does not
  improve the reliability of the code generator, which in practice is
  highly reliable at all optimization levels.
  
--- 14550,14564 ----
  
  Since the precise set of optimizations done at each level will vary from
  release to release (and sometime from target to target), it is best to
! think of the optimization settings in general terms.  See the 'Options
! That Control Optimization' section in ‘Using the GNU Compiler Collection
  (GCC)’ for details about the ‘-O’ settings and a number of ‘-f’ options
  that individually enable or disable specific optimizations.
  
  Unlike some other compilation systems, ‘gcc’ has been tested extensively
  at all optimization levels.  There are some bugs which appear only with
  optimization turned on, but there have also been bugs which show up only
! in 'unoptimized' code.  Selecting a lower level of optimization does not
  improve the reliability of the code generator, which in practice is
  highly reliable at all optimization levels.
  
*************** invalidate some of the debugging data.
*** 14592,14610 ****
  certain anomalous situations that may arise while debugging optimized
  code.  These are the most common cases:
  
!    * ‘The ‘hopping Program Counter’:’ Repeated ‘step’ or ‘next’ commands
       show the PC bouncing back and forth in the code.  This may result
       from any of the following optimizations:
  
!         - ‘Common subexpression elimination:’ using a single instance of
            code for a quantity that the source computes several times.
            As a result you may not be able to stop on what looks like a
            statement.
  
!         - ‘Invariant code motion:’ moving an expression that does not
            change within a loop, to the beginning of the loop.
  
!         - ‘Instruction scheduling:’ moving instructions so as to overlap
            loads and stores (typically) with other code, or in general to
            move computations of values closer to their uses.  Often this
            causes you to pass an assignment statement without the
--- 14592,14610 ----
  certain anomalous situations that may arise while debugging optimized
  code.  These are the most common cases:
  
!    * 'The ‘hopping Program Counter’:' Repeated ‘step’ or ‘next’ commands
       show the PC bouncing back and forth in the code.  This may result
       from any of the following optimizations:
  
!         - 'Common subexpression elimination:' using a single instance of
            code for a quantity that the source computes several times.
            As a result you may not be able to stop on what looks like a
            statement.
  
!         - 'Invariant code motion:' moving an expression that does not
            change within a loop, to the beginning of the loop.
  
!         - 'Instruction scheduling:' moving instructions so as to overlap
            loads and stores (typically) with other code, or in general to
            move computations of values closer to their uses.  Often this
            causes you to pass an assignment statement without the
*************** code.  These are the most common cases:
*** 14613,14627 ****
            breakpoint on a line of code and then stepping over it may,
            therefore, not always cause all the expected side-effects.
  
!    * ‘The ‘big leap’:’ More commonly known as ‘cross-jumping’, in which
       two identical pieces of code are merged and the program counter
       suddenly jumps to a statement that is not supposed to be executed,
       simply because it (and the code following) translates to the same
!      thing as the code that ‘was’ supposed to be executed.  This effect
       is typically seen in sequences that end in a jump, such as a
       ‘goto’, a ‘return’, or a ‘break’ in a C ‘switch’ statement.
  
!    * ‘The ‘roving variable’:’ The symptom is an unexpected value in a
       variable.  There are various reasons for this effect:
  
          - In a subprogram prologue, a parameter may not yet have been
--- 14613,14627 ----
            breakpoint on a line of code and then stepping over it may,
            therefore, not always cause all the expected side-effects.
  
!    * 'The ‘big leap’:' More commonly known as 'cross-jumping', in which
       two identical pieces of code are merged and the program counter
       suddenly jumps to a statement that is not supposed to be executed,
       simply because it (and the code following) translates to the same
!      thing as the code that 'was' supposed to be executed.  This effect
       is typically seen in sequences that end in a jump, such as a
       ‘goto’, a ‘return’, or a ‘break’ in a C ‘switch’ statement.
  
!    * 'The ‘roving variable’:' The symptom is an unexpected value in a
       variable.  There are various reasons for this effect:
  
          - In a subprogram prologue, a parameter may not yet have been
*************** code.  These are the most common cases:
*** 14649,14655 ****
       those other values); or re-running the code and stopping a little
       earlier (perhaps before the call) and stepping to better see how
       the variable obtained the value in question; or continuing to step
!      ‘from’ the point of the strange value to see if code motion had
       simply moved the variable’s assignments later.
  
  In light of such anomalies, a recommended technique is to use ‘-O0’
--- 14649,14655 ----
       those other values); or re-running the code and stopping a little
       earlier (perhaps before the call) and stepping to better see how
       the variable obtained the value in question; or continuing to step
!      'from' the point of the strange value to see if code motion had
       simply moved the variable’s assignments later.
  
  In light of such anomalies, a recommended technique is to use ‘-O0’
*************** following conditions are met:
*** 14680,14686 ****
       from within it; the subprogram is small and optimization level
       ‘-O2’ is specified; optimization level ‘-O3’ is specified.
  
! Calls to subprograms in ‘with’ed units are normally not inlined.  To
  achieve actual inlining (that is, replacement of the call by the code in
  the body of the subprogram), the following conditions must all be true:
  
--- 14680,14686 ----
       from within it; the subprogram is small and optimization level
       ‘-O2’ is specified; optimization level ‘-O3’ is specified.
  
! Calls to subprograms in 'with'ed units are normally not inlined.  To
  achieve actual inlining (that is, replacement of the call by the code in
  the body of the subprogram), the following conditions must all be true:
  
*************** Examples of switches in this category ar
*** 14937,14943 ****
  various target-specific ‘-m’ options (in particular, it has been
  observed that ‘-march=xxx’ can significantly improve performance on
  appropriate machines).  For full details of these switches, see the
! ‘Submodel Options’ section in the ‘Hardware Models and Configurations’
  chapter of ‘Using the GNU Compiler Collection (GCC)’.
  
  
--- 14937,14943 ----
  various target-specific ‘-m’ options (in particular, it has been
  observed that ‘-march=xxx’ can significantly improve performance on
  appropriate machines).  For full details of these switches, see the
! 'Submodel Options' section in the 'Hardware Models and Configurations'
  chapter of ‘Using the GNU Compiler Collection (GCC)’.
  
  
*************** If ‘Text_IO’ must be used, note that
*** 15312,15318 ****
  output and standard error files is unbuffered (this provides better
  behavior when output statements are used for debugging, or if the
  progress of a program is observed by tracking the output, e.g.  by using
! the Unix ‘tail -f’ command to watch redirected output).
  
  If you are generating large volumes of output with ‘Text_IO’ and
  performance is an important factor, use a designated file instead of the
--- 15312,15318 ----
  output and standard error files is unbuffered (this provides better
  behavior when output statements are used for debugging, or if the
  progress of a program is observed by tracking the output, e.g.  by using
! the Unix 'tail -f' command to watch redirected output).
  
  If you are generating large volumes of output with ‘Text_IO’ and
  performance is an important factor, use a designated file instead of the
*************** outside assertions.
*** 15568,15574 ****
  
  The three modes are:
  
!    * ‘Use base type for intermediate operations’ (‘STRICT’)
  
       In this mode, all intermediate results for predefined arithmetic
       operators are computed using the base type, and the result must be
--- 15568,15574 ----
  
  The three modes are:
  
!    * 'Use base type for intermediate operations' (‘STRICT’)
  
       In this mode, all intermediate results for predefined arithmetic
       operators are computed using the base type, and the result must be
*************** The three modes are:
*** 15577,15583 ****
       execution is erroneous (if overflow checks are suppressed).  This
       is the normal default mode.
  
!    * ‘Most intermediate overflows avoided’ (‘MINIMIZED’)
  
       In this mode, the compiler attempts to avoid intermediate overflows
       by using a larger integer type, typically ‘Long_Long_Integer’, as
--- 15577,15583 ----
       execution is erroneous (if overflow checks are suppressed).  This
       is the normal default mode.
  
!    * 'Most intermediate overflows avoided' (‘MINIMIZED’)
  
       In this mode, the compiler attempts to avoid intermediate overflows
       by using a larger integer type, typically ‘Long_Long_Integer’, as
*************** The three modes are:
*** 15603,15613 ****
       final result is in range and the precondition is True (from a
       mathematical point of view).  In such a case, operating in this
       mode, an overflow occurs for the intermediate computation (which is
!      why this mode says ‘most’ intermediate overflows are avoided).  In
       this case, an exception is raised if overflow checks are enabled,
       and the execution is erroneous if overflow checks are suppressed.
  
!    * ‘All intermediate overflows avoided’ (‘ELIMINATED’)
  
       In this mode, the compiler avoids all intermediate overflows by
       using arbitrary precision arithmetic as required.  In this mode,
--- 15603,15613 ----
       final result is in range and the precondition is True (from a
       mathematical point of view).  In such a case, operating in this
       mode, an overflow occurs for the intermediate computation (which is
!      why this mode says 'most' intermediate overflows are avoided).  In
       this case, an exception is raised if overflow checks are enabled,
       and the execution is erroneous if overflow checks are suppressed.
  
!    * 'All intermediate overflows avoided' (‘ELIMINATED’)
  
       In this mode, the compiler avoids all intermediate overflows by
       using arbitrary precision arithmetic as required.  In this mode,
*************** from version 7.0.1 of GNAT onwards.  The
*** 15807,15814 ****
  ‘Dimension_System’ allows you to define a system of units; the aspect
  ‘Dimension’ then allows the user to declare dimensioned quantities
  within a given system.  (These aspects are described in the
! ‘Implementation Defined Aspects’ chapter of the ‘GNAT Reference
! Manual’).
  
  The major advantage of this model is that it does not require the
  declaration of multiple operators for all possible combinations of
--- 15807,15814 ----
  ‘Dimension_System’ allows you to define a system of units; the aspect
  ‘Dimension’ then allows the user to declare dimensioned quantities
  within a given system.  (These aspects are described in the
! 'Implementation Defined Aspects' chapter of the 'GNAT Reference
! Manual').
  
  The major advantage of this model is that it does not require the
  declaration of multiple operators for all possible combinations of
*************** then the output includes:
*** 15937,15951 ****
  
            Final velocity: 98.10 m.s**(-1)
  
! The type ‘Mks_Type’ is said to be a ‘dimensionable type’ since it has a
  ‘Dimension_System’ aspect, and the subtypes ‘Length’, ‘Mass’, etc., are
! said to be ‘dimensioned subtypes’ since each one has a ‘Dimension’
  aspect.
  
  The ‘Dimension’ aspect of a dimensioned subtype ‘S’ defines a mapping
  from the base type’s Unit_Names to integer (or, more generally,
! rational) values.  This mapping is the ‘dimension vector’ (also referred
! to as the ‘dimensionality’) for that subtype, denoted by ‘DV(S)’, and
  thus for each object of that subtype.  Intuitively, the value specified
  for each ‘Unit_Name’ is the exponent associated with that unit; a zero
  value means that the unit is not used.  For example:
--- 15937,15951 ----
  
            Final velocity: 98.10 m.s**(-1)
  
! The type ‘Mks_Type’ is said to be a 'dimensionable type' since it has a
  ‘Dimension_System’ aspect, and the subtypes ‘Length’, ‘Mass’, etc., are
! said to be 'dimensioned subtypes' since each one has a ‘Dimension’
  aspect.
  
  The ‘Dimension’ aspect of a dimensioned subtype ‘S’ defines a mapping
  from the base type’s Unit_Names to integer (or, more generally,
! rational) values.  This mapping is the 'dimension vector' (also referred
! to as the 'dimensionality') for that subtype, denoted by ‘DV(S)’, and
  thus for each object of that subtype.  Intuitively, the value specified
  for each ‘Unit_Name’ is the exponent associated with that unit; a zero
  value means that the unit is not used.  For example:
*************** dimension vectors of its components, wit
*** 15966,15991 ****
  checks that help prevent mismatches such as using an ‘Acceleration’
  where a ‘Length’ is required.
  
! The dimension vector of the result of an arithmetic expression ‘expr’,
  or ‘DV(EXPR)’, is defined as follows, assuming conventional mathematical
  definitions for the vector operations that are used:
  
!    * If ‘expr’ is of the type ‘universal_real’, or is not of a
!      dimensioned subtype, then ‘expr’ is dimensionless; ‘DV(EXPR)’ is
       the empty vector.
  
!    * ‘DV(OP EXPR)’, where ‘op’ is a unary operator, is ‘DV(EXPR)’
  
!    * ‘DV(EXPR1 OP EXPR2)’ where ‘op’ is “+” or “-” is ‘DV(EXPR1)’
       provided that ‘DV(EXPR1)’ = ‘DV(EXPR2)’.  If this condition is not
       met then the construct is illegal.
  
     * ‘DV(EXPR1 * EXPR2)’ is ‘DV(EXPR1)’ + ‘DV(EXPR2)’, and ‘DV(EXPR1 /
       EXPR2)’ = ‘DV(EXPR1)’ - ‘DV(EXPR2)’.  In this context if one of the
!      ‘expr’s is dimensionless then its empty dimension vector is treated
       as ‘(others => 0)’.
  
!    * ‘DV(EXPR ** POWER)’ is ‘power’ * ‘DV(EXPR)’, provided that ‘power’
       is a static rational value.  If this condition is not met then the
       construct is illegal.
  
--- 15966,15991 ----
  checks that help prevent mismatches such as using an ‘Acceleration’
  where a ‘Length’ is required.
  
! The dimension vector of the result of an arithmetic expression 'expr',
  or ‘DV(EXPR)’, is defined as follows, assuming conventional mathematical
  definitions for the vector operations that are used:
  
!    * If 'expr' is of the type 'universal_real', or is not of a
!      dimensioned subtype, then 'expr' is dimensionless; ‘DV(EXPR)’ is
       the empty vector.
  
!    * ‘DV(OP EXPR)’, where 'op' is a unary operator, is ‘DV(EXPR)’
  
!    * ‘DV(EXPR1 OP EXPR2)’ where 'op' is “+” or “-” is ‘DV(EXPR1)’
       provided that ‘DV(EXPR1)’ = ‘DV(EXPR2)’.  If this condition is not
       met then the construct is illegal.
  
     * ‘DV(EXPR1 * EXPR2)’ is ‘DV(EXPR1)’ + ‘DV(EXPR2)’, and ‘DV(EXPR1 /
       EXPR2)’ = ‘DV(EXPR1)’ - ‘DV(EXPR2)’.  In this context if one of the
!      'expr's is dimensionless then its empty dimension vector is treated
       as ‘(others => 0)’.
  
!    * ‘DV(EXPR ** POWER)’ is 'power' * ‘DV(EXPR)’, provided that 'power'
       is a static rational value.  If this condition is not met then the
       construct is illegal.
  
*************** The dimension vector of a type conversio
*** 16015,16022 ****
  follows, based on the nature of ‘T’:
  
     * If ‘T’ is a dimensioned subtype then ‘DV(T(EXPR))’ is ‘DV(T)’
!      provided that either ‘expr’ is dimensionless or ‘DV(T)’ =
!      ‘DV(EXPR)’.  The conversion is illegal if ‘expr’ is dimensioned and
       ‘DV(EXPR)’ /= ‘DV(T)’.  Note that vector equality does not require
       that the corresponding Unit_Names be the same.
  
--- 16015,16022 ----
  follows, based on the nature of ‘T’:
  
     * If ‘T’ is a dimensioned subtype then ‘DV(T(EXPR))’ is ‘DV(T)’
!      provided that either 'expr' is dimensionless or ‘DV(T)’ =
!      ‘DV(EXPR)’.  The conversion is illegal if 'expr' is dimensioned and
       ‘DV(EXPR)’ /= ‘DV(T)’.  Note that vector equality does not require
       that the corresponding Unit_Names be the same.
  
*************** follows, based on the nature of ‘T’:
*** 16028,16036 ****
       suitable conversion factor) but cannot be converted, for example,
       to a mass in pounds.
  
!    * If ‘T’ is the base type for ‘expr’ (and the dimensionless root type
       of the dimension system), then ‘DV(T(EXPR))’ is ‘DV(expr)’.  Thus,
!      if ‘expr’ is of a dimensioned subtype of ‘T’, the conversion may be
       regarded as a “view conversion” that preserves dimensionality.
  
       This rule makes it possible to write generic code that can be
--- 16028,16036 ----
       suitable conversion factor) but cannot be converted, for example,
       to a mass in pounds.
  
!    * If ‘T’ is the base type for 'expr' (and the dimensionless root type
       of the dimension system), then ‘DV(T(EXPR))’ is ‘DV(expr)’.  Thus,
!      if 'expr' is of a dimensioned subtype of ‘T’, the conversion may be
       regarded as a “view conversion” that preserves dimensionality.
  
       This rule makes it possible to write generic code that can be
*************** displayed in four columns:
*** 16189,16201 ****
  
  where:
  
!    * ‘Index’ is a number associated with each task.
  
!    * ‘Task Name’ is the name of the task analyzed.
  
!    * ‘Stack Size’ is the maximum size for the stack.
  
!    * ‘Stack Usage’ is the measure done by the stack analyzer.  In order
       to prevent overflow, the stack is not entirely analyzed, and it’s
       not possible to know exactly how much has actually been used.
  
--- 16189,16201 ----
  
  where:
  
!    * 'Index' is a number associated with each task.
  
!    * 'Task Name' is the name of the task analyzed.
  
!    * 'Stack Size' is the maximum size for the stack.
  
!    * 'Stack Usage' is the measure done by the stack analyzer.  In order
       to prevent overflow, the stack is not entirely analyzed, and it’s
       not possible to know exactly how much has actually been used.
  
*************** the underlying operating system.
*** 16456,16465 ****
  
  For exception handling, either or both of two models are supplied:
  
!    * ‘Zero-Cost Exceptions’ (“ZCX”), which uses binder-generated tables
       that are interrogated at run time to locate a handler.
  
!    * ‘setjmp / longjmp’ (‘SJLJ’), which uses dynamically-set data to
       establish the set of handlers
  
  Most programs should experience a substantial speed improvement by being
--- 16456,16465 ----
  
  For exception handling, either or both of two models are supplied:
  
!    * 'Zero-Cost Exceptions' (“ZCX”), which uses binder-generated tables
       that are interrogated at run time to locate a handler.
  
!    * 'setjmp / longjmp' (‘SJLJ’), which uses dynamically-set data to
       establish the set of handlers
  
  Most programs should experience a substantial speed improvement by being
*************** and contain a complete source and binary
*** 16525,16531 ****
  description below explains the differences between the different
  libraries in terms of their thread support.
  
! The default run-time library (when GNAT is installed) is ‘rts-native’.
  This default run-time is selected by the means of soft links.  For
  example on x86-linux:
  
--- 16525,16531 ----
  description below explains the differences between the different
  libraries in terms of their thread support.
  
! The default run-time library (when GNAT is installed) is 'rts-native'.
  This default run-time is selected by the means of soft links.  For
  example on x86-linux:
  
*************** example on x86-linux:
*** 16547,16553 ****
                     Run-Time Library Directory Structure
          (Upper-case names and dotted/dashed arrows represent soft links)
  
! If the ‘rts-sjlj’ library is to be selected on a permanent basis, these
  soft links can be modified with the following commands:
  
            $ cd $target
--- 16547,16553 ----
                     Run-Time Library Directory Structure
          (Upper-case names and dotted/dashed arrows represent soft links)
  
! If the 'rts-sjlj' library is to be selected on a permanent basis, these
  soft links can be modified with the following commands:
  
            $ cd $target
*************** Independent.
*** 16668,16678 ****
  If you are not interested in building PIE binaries, you can simply turn
  this feature off by first compiling your code with ‘-fno-pie’ and then
  by linking with ‘-no-pie’ (note the subtle but important difference in
! the names of the options – the linker option does ‘not’ have an ‘f’
  after the dash!).  When using gprbuild, this is achieved by updating the
! ‘Required_Switches’ attribute in package ‘Compiler’ and, depending on
! your type of project, either attribute ‘Switches’ or attribute
! ‘Library_Options’ in package ‘Linker’.
  
  On the other hand, if you would like to build PIE binaries and you are
  getting the error above, a quick and easy workaround to allow linking to
--- 16668,16678 ----
  If you are not interested in building PIE binaries, you can simply turn
  this feature off by first compiling your code with ‘-fno-pie’ and then
  by linking with ‘-no-pie’ (note the subtle but important difference in
! the names of the options – the linker option does 'not' have an ‘f’
  after the dash!).  When using gprbuild, this is achieved by updating the
! 'Required_Switches' attribute in package ‘Compiler’ and, depending on
! your type of project, either attribute 'Switches' or attribute
! 'Library_Options' in package ‘Linker’.
  
  On the other hand, if you would like to build PIE binaries and you are
  getting the error above, a quick and easy workaround to allow linking to
*************** suffix) has the following structure:
*** 17369,17384 ****
               ``symbol2``
               ...
  
! ‘LIBRARY name’
  
       This section, which is optional, gives the name of the DLL.
  
! ‘DESCRIPTION string’
  
       This section, which is optional, gives a description string that
       will be embedded in the import library.
  
! ‘EXPORTS’
  
       This section gives the list of exported symbols (procedures,
       functions or variables).  For instance in the case of ‘API.dll’ the
--- 17369,17384 ----
               ``symbol2``
               ...
  
! 'LIBRARY name'
  
       This section, which is optional, gives the name of the DLL.
  
! 'DESCRIPTION string'
  
       This section, which is optional, gives a description string that
       will be embedded in the import library.
  
! 'EXPORTS'
  
       This section gives the list of exported symbols (procedures,
       functions or variables).  For instance in the case of ‘API.dll’ the
*************** File: gnat_ugn.info,  Node: Building DLL
*** 17469,17476 ****
  ..............................................
  
  There is nothing specific to Windows in the build process.  See the
! ‘Library Projects’ section in the ‘GNAT Project Manager’ chapter of the
! ‘GPRbuild User’s Guide’.
  
  Due to a system limitation, it is not possible under Windows to create
  threads when inside the ‘DllMain’ routine which is used for
--- 17469,17476 ----
  ..............................................
  
  There is nothing specific to Windows in the build process.  See the
! 'Library Projects' section in the 'GNAT Project Manager' chapter of the
! 'GPRbuild User’s Guide'.
  
  Due to a system limitation, it is not possible under Windows to create
  threads when inside the ‘DllMain’ routine which is used for
*************** as non-Ada applications are as follows:
*** 17576,17584 ****
  Note that a relocatable DLL stripped using the ‘strip’ binutils tool
  will not be relocatable anymore.  To build a DLL without debug
  information pass ‘-largs -s’ to ‘gnatdll’.  This restriction does not
! apply to a DLL built using a Library Project.  See the ‘Library
! Projects’ section in the ‘GNAT Project Manager’ chapter of the ‘GPRbuild
! User’s Guide’.
  
  * Menu:
  
--- 17576,17584 ----
  Note that a relocatable DLL stripped using the ‘strip’ binutils tool
  will not be relocatable anymore.  To build a DLL without debug
  information pass ‘-largs -s’ to ‘gnatdll’.  This restriction does not
! apply to a DLL built using a Library Project.  See the 'Library
! Projects' section in the 'GNAT Project Manager' chapter of the 'GPRbuild
! User’s Guide'.
  
  * Menu:
  
*************** switch).  Here are the step-by-step inst
*** 18263,18269 ****
            (gdb) start
  
       This step is required to be able to set a breakpoint inside the
!      DLL. As long as the program is not run, the DLL is not loaded.
       This has the consequence that the DLL debugging information is also
       not loaded, so it is not possible to set a breakpoint in the DLL.
  
--- 18263,18269 ----
            (gdb) start
  
       This step is required to be able to set a breakpoint inside the
!      DLL.  As long as the program is not run, the DLL is not loaded.
       This has the consequence that the DLL debugging information is also
       not loaded, so it is not possible to set a breakpoint in the DLL.
  
*************** in the code of the DLL to meet this crit
*** 18357,18363 ****
  
            $ main
  
!    * Use the Windows ‘Task Manager’ to find the process ID. Let’s say
       that the process PID for ‘main.exe’ is 208.
  
     * Launch gdb.
--- 18357,18363 ----
  
            $ main
  
!    * Use the Windows 'Task Manager' to find the process ID. Let’s say
       that the process PID for ‘main.exe’ is 208.
  
     * Launch gdb.
*************** File: gnat_ugn.info,  Node: Setting Stac
*** 18394,18400 ****
  It is possible to specify the program stack size at link time.  On
  modern versions of Windows, starting with XP, this is mostly useful to
  set the size of the main stack (environment task).  The other task
! stacks are set with pragma Storage_Size or with the ‘gnatbind -d’
  command.
  
  Since older versions of Windows (2000, NT4, etc.)  do not allow setting
--- 18394,18400 ----
  It is possible to specify the program stack size at link time.  On
  modern versions of Windows, starting with XP, this is mostly useful to
  set the size of the main stack (environment task).  The other task
! stacks are set with pragma Storage_Size or with the 'gnatbind -d'
  command.
  
  Since older versions of Windows (2000, NT4, etc.)  do not allow setting
*************** File: gnat_ugn.info,  Node: Example of B
*** 18578,18584 ****
  *******************************
  
  This Appendix displays the source code for the output file generated by
! ‘gnatbind’ for a simple ‘Hello World’ program.  Comments have been added
  for clarification purposes.
  
       --  The package is called Ada_Main unless this name is actually used
--- 18578,18584 ----
  *******************************
  
  This Appendix displays the source code for the output file generated by
! 'gnatbind' for a simple ‘Hello World’ program.  Comments have been added
  for clarification purposes.
  
       --  The package is called Ada_Main unless this name is actually used
*************** File: gnat_ugn.info,  Node: Elaboration
*** 19344,19357 ****
  9.1 Elaboration Code
  ====================
  
! Ada defines the term ‘execution’ as the process by which a construct
  achieves its run-time effect.  This process is also referred to as
! ‘elaboration’ for declarations and ‘evaluation’ for expressions.
  
  The execution model in Ada allows for certain sections of an Ada program
  to be executed prior to execution of the program itself, primarily with
  the intent of initializing data.  These sections are referred to as
! ‘elaboration code’.  Elaboration code is executed as follows:
  
     * All partitions of an Ada program are executed in parallel with one
       another, possibly in a separate address space, and possibly on a
--- 19344,19357 ----
  9.1 Elaboration Code
  ====================
  
! Ada defines the term 'execution' as the process by which a construct
  achieves its run-time effect.  This process is also referred to as
! 'elaboration' for declarations and 'evaluation' for expressions.
  
  The execution model in Ada allows for certain sections of an Ada program
  to be executed prior to execution of the program itself, primarily with
  the intent of initializing data.  These sections are referred to as
! 'elaboration code'.  Elaboration code is executed as follows:
  
     * All partitions of an Ada program are executed in parallel with one
       another, possibly in a separate address space, and possibly on a
*************** the intent of initializing data.  These
*** 19362,19368 ****
  
     * The environment task executes all elaboration code (if available)
       for all units within that partition.  This code is said to be
!      executed at ‘elaboration time’.
  
     * The environment task executes the Ada program (if available) for
       that partition.
--- 19362,19368 ----
  
     * The environment task executes all elaboration code (if available)
       for all units within that partition.  This code is said to be
!      executed at 'elaboration time'.
  
     * The environment task executes the Ada program (if available) for
       that partition.
*************** the intent of initializing data.  These
*** 19370,19384 ****
  In addition to the Ada terminology, this appendix defines the following
  terms:
  
!    * ‘Invocation’
  
       The act of calling a subprogram, instantiating a generic, or
       activating a task.
  
!    * ‘Scenario’
  
       A construct that is elaborated or invoked by elaboration code is
!      referred to as an ‘elaboration scenario’ or simply a ‘scenario’.
       GNAT recognizes the following scenarios:
  
          - ‘'Access’ of entries, operators, and subprograms
--- 19370,19384 ----
  In addition to the Ada terminology, this appendix defines the following
  terms:
  
!    * 'Invocation'
  
       The act of calling a subprogram, instantiating a generic, or
       activating a task.
  
!    * 'Scenario'
  
       A construct that is elaborated or invoked by elaboration code is
!      referred to as an 'elaboration scenario' or simply a 'scenario'.
       GNAT recognizes the following scenarios:
  
          - ‘'Access’ of entries, operators, and subprograms
*************** terms:
*** 19389,19398 ****
  
          - Instantiations of generic templates
  
!    * ‘Target’
  
!      A construct elaborated by a scenario is referred to as ‘elaboration
!      target’ or simply ‘target’.  GNAT recognizes the following targets:
  
          - For ‘'Access’ of entries, operators, and subprograms, the
            target is the entry, operator, or subprogram being aliased.
--- 19389,19398 ----
  
          - Instantiations of generic templates
  
!    * 'Target'
  
!      A construct elaborated by a scenario is referred to as 'elaboration
!      target' or simply 'target'.  GNAT recognizes the following targets:
  
          - For ‘'Access’ of entries, operators, and subprograms, the
            target is the entry, operator, or subprogram being aliased.
*************** terms:
*** 19407,19413 ****
  
  Elaboration code may appear in two distinct contexts:
  
!    * ‘Library level’
  
       A scenario appears at the library level when it is encapsulated by
       a package [body] compilation unit, ignoring any other package
--- 19407,19413 ----
  
  Elaboration code may appear in two distinct contexts:
  
!    * 'Library level'
  
       A scenario appears at the library level when it is encapsulated by
       a package [body] compilation unit, ignoring any other package
*************** Elaboration code may appear in two disti
*** 19429,19435 ****
       ‘Server.Func’ will be invoked when the spec of unit ‘Client’ is
       elaborated.
  
!    * ‘Package body statements’
  
       A scenario appears within the statement sequence of a package body
       when it is bounded by the region starting from the ‘begin’ keyword
--- 19429,19435 ----
       ‘Server.Func’ will be invoked when the spec of unit ‘Client’ is
       elaborated.
  
!    * 'Package body statements'
  
       A scenario appears within the statement sequence of a package body
       when it is bounded by the region starting from the ‘begin’ keyword
*************** File: gnat_ugn.info,  Node: Elaboration
*** 19457,19463 ****
  =====================
  
  The sequence by which the elaboration code of all units within a
! partition is executed is referred to as ‘elaboration order’.
  
  Within a single unit, elaboration code is executed in sequential order.
  
--- 19457,19463 ----
  =====================
  
  The sequence by which the elaboration code of all units within a
! partition is executed is referred to as 'elaboration order'.
  
  Within a single unit, elaboration code is executed in sequential order.
  
*************** is as follows:
*** 19493,19499 ****
  The elaboration order of all units within a partition depends on the
  following factors:
  
!    * ‘with’ed units
  
     * parent units
  
--- 19493,19499 ----
  The elaboration order of all units within a partition depends on the
  following factors:
  
!    * 'with'ed units
  
     * parent units
  
*************** structure.
*** 19530,19536 ****
            procedure Main is begin null; end Main;
  
  The following elaboration order exhibits a fundamental problem referred
! to as ‘access-before-elaboration’ or simply ‘ABE’.
  
            spec of Server
            spec of Client
--- 19530,19536 ----
            procedure Main is begin null; end Main;
  
  The following elaboration order exhibits a fundamental problem referred
! to as 'access-before-elaboration' or simply 'ABE'.
  
            spec of Server
            spec of Client
*************** can be successfully elaborated.
*** 19561,19567 ****
  Ada states that a total elaboration order must exist, but it does not
  define what this order is.  A compiler is thus tasked with choosing a
  suitable elaboration order which satisfies the dependencies imposed by
! ‘with’ clauses, unit categorization, elaboration-control pragmas, and
  invocations performed in elaboration code.  Ideally an order that avoids
  ABE problems should be chosen, however a compiler may not always find
  such an order due to complications with respect to control and data
--- 19561,19567 ----
  Ada states that a total elaboration order must exist, but it does not
  define what this order is.  A compiler is thus tasked with choosing a
  suitable elaboration order which satisfies the dependencies imposed by
! 'with' clauses, unit categorization, elaboration-control pragmas, and
  invocations performed in elaboration code.  Ideally an order that avoids
  ABE problems should be chosen, however a compiler may not always find
  such an order due to complications with respect to control and data
*************** File: gnat_ugn.info,  Node: Checking the
*** 19576,19618 ****
  To avoid placing the entire elaboration-order burden on the programmer,
  Ada provides three lines of defense:
  
!    * ‘Static semantics’
  
       Static semantic rules restrict the possible choice of elaboration
!      order.  For instance, if unit Client ‘with’s unit Server, then the
       spec of Server is always elaborated prior to Client.  The same
       principle applies to child units - the spec of a parent unit is
       always elaborated prior to the child unit.
  
!    * ‘Dynamic semantics’
  
       Dynamic checks are performed at run time, to ensure that a target
       is elaborated prior to a scenario that invokes it, thus avoiding
       ABE problems.  A failed run-time check raises exception
       ‘Program_Error’.  The following restrictions apply:
  
!         - ‘Restrictions on calls’
  
            An entry, operator, or subprogram can be called from
            elaboration code only when the corresponding body has been
            elaborated.
  
!         - ‘Restrictions on instantiations’
  
            A generic unit can be instantiated by elaboration code only
            when the corresponding body has been elaborated.
  
!         - ‘Restrictions on task activation’
  
            A task can be activated by elaboration code only when the body
            of the associated task type has been elaborated.
  
       The restrictions above can be summarized by the following rule:
  
!      ‘If a target has a body, then this body must be elaborated prior to
!      the scenario that invokes the target.’
  
!    * ‘Elaboration control’
  
       Pragmas are provided for the programmer to specify the desired
       elaboration order.
--- 19576,19618 ----
  To avoid placing the entire elaboration-order burden on the programmer,
  Ada provides three lines of defense:
  
!    * 'Static semantics'
  
       Static semantic rules restrict the possible choice of elaboration
!      order.  For instance, if unit Client 'with's unit Server, then the
       spec of Server is always elaborated prior to Client.  The same
       principle applies to child units - the spec of a parent unit is
       always elaborated prior to the child unit.
  
!    * 'Dynamic semantics'
  
       Dynamic checks are performed at run time, to ensure that a target
       is elaborated prior to a scenario that invokes it, thus avoiding
       ABE problems.  A failed run-time check raises exception
       ‘Program_Error’.  The following restrictions apply:
  
!         - 'Restrictions on calls'
  
            An entry, operator, or subprogram can be called from
            elaboration code only when the corresponding body has been
            elaborated.
  
!         - 'Restrictions on instantiations'
  
            A generic unit can be instantiated by elaboration code only
            when the corresponding body has been elaborated.
  
!         - 'Restrictions on task activation'
  
            A task can be activated by elaboration code only when the body
            of the associated task type has been elaborated.
  
       The restrictions above can be summarized by the following rule:
  
!      'If a target has a body, then this body must be elaborated prior to
!      the scenario that invokes the target.'
  
!    * 'Elaboration control'
  
       Pragmas are provided for the programmer to specify the desired
       elaboration order.
*************** Ada provides several idioms and pragmas
*** 19627,19633 ****
  specifying the desired elaboration order and avoiding ABE problems
  altogether.
  
!    * ‘Packages without a body’
  
       A library package which does not require a completing body does not
       suffer from ABE problems.
--- 19627,19633 ----
  specifying the desired elaboration order and avoiding ABE problems
  altogether.
  
!    * 'Packages without a body'
  
       A library package which does not require a completing body does not
       suffer from ABE problems.
*************** altogether.
*** 19645,19662 ****
       in a body.  As a result, generic ‘Pack.Containers’ can be
       instantiated without encountering any ABE problems.
  
!    * ‘pragma Pure’
  
       Pragma ‘Pure’ places sufficient restrictions on a unit to guarantee
       that no scenario within the unit can result in an ABE problem.
  
!    * ‘pragma Preelaborate’
  
       Pragma ‘Preelaborate’ is slightly less restrictive than pragma
       ‘Pure’, but still strong enough to prevent ABE problems within a
       unit.
  
!    * ‘pragma Elaborate_Body’
  
       Pragma ‘Elaborate_Body’ requires that the body of a unit is
       elaborated immediately after its spec.  This restriction guarantees
--- 19645,19662 ----
       in a body.  As a result, generic ‘Pack.Containers’ can be
       instantiated without encountering any ABE problems.
  
!    * 'pragma Pure'
  
       Pragma ‘Pure’ places sufficient restrictions on a unit to guarantee
       that no scenario within the unit can result in an ABE problem.
  
!    * 'pragma Preelaborate'
  
       Pragma ‘Preelaborate’ is slightly less restrictive than pragma
       ‘Pure’, but still strong enough to prevent ABE problems within a
       unit.
  
!    * 'pragma Elaborate_Body'
  
       Pragma ‘Elaborate_Body’ requires that the body of a unit is
       elaborated immediately after its spec.  This restriction guarantees
*************** altogether.
*** 19690,19696 ****
            spec of Client
  
       because the spec of ‘Server’ must be elaborated prior to ‘Client’
!      by virtue of the ‘with’ clause, and in addition the body of
       ‘Server’ must be elaborated immediately after the spec of ‘Server’.
  
       Removing pragma ‘Elaborate_Body’ could result in the following
--- 19690,19696 ----
            spec of Client
  
       because the spec of ‘Server’ must be elaborated prior to ‘Client’
!      by virtue of the 'with' clause, and in addition the body of
       ‘Server’ must be elaborated immediately after the spec of ‘Server’.
  
       Removing pragma ‘Elaborate_Body’ could result in the following
*************** There are however situations where ‘Pu
*** 19713,19722 ****
  pragmas for use by client units to help ensure the elaboration safety of
  server units they depend on.
  
!    * ‘pragma Elaborate (Unit)’
  
       Pragma ‘Elaborate’ can be placed in the context clauses of a unit,
!      after a ‘with’ clause.  It guarantees that both the spec and body
       of its argument will be elaborated prior to the unit with the
       pragma.  Note that other unrelated units may be elaborated in
       between the spec and the body.
--- 19713,19722 ----
  pragmas for use by client units to help ensure the elaboration safety of
  server units they depend on.
  
!    * 'pragma Elaborate (Unit)'
  
       Pragma ‘Elaborate’ can be placed in the context clauses of a unit,
!      after a 'with' clause.  It guarantees that both the spec and body
       of its argument will be elaborated prior to the unit with the
       pragma.  Note that other unrelated units may be elaborated in
       between the spec and the body.
*************** server units they depend on.
*** 19755,19766 ****
       where ‘Client’ invokes ‘Server.Func’, but the body of ‘Server.Func’
       has not been elaborated yet.
  
!    * ‘pragma Elaborate_All (Unit)’
  
       Pragma ‘Elaborate_All’ is placed in the context clauses of a unit,
!      after a ‘with’ clause.  It guarantees that both the spec and body
       of its argument will be elaborated prior to the unit with the
!      pragma, as well as all units ‘with’ed by the spec and body of the
       argument, recursively.  Note that other unrelated units may be
       elaborated in between the spec and the body.
  
--- 19755,19766 ----
       where ‘Client’ invokes ‘Server.Func’, but the body of ‘Server.Func’
       has not been elaborated yet.
  
!    * 'pragma Elaborate_All (Unit)'
  
       Pragma ‘Elaborate_All’ is placed in the context clauses of a unit,
!      after a 'with' clause.  It guarantees that both the spec and body
       of its argument will be elaborated prior to the unit with the
!      pragma, as well as all units 'with'ed by the spec and body of the
       argument, recursively.  Note that other unrelated units may be
       elaborated in between the spec and the body.
  
*************** server units they depend on.
*** 19832,19856 ****
  
  All pragmas shown above can be summarized by the following rule:
  
! ‘If a client unit elaborates a server target directly or indirectly,
  then if the server unit requires a body and does not have pragma Pure,
  Preelaborate, or Elaborate_Body, then the client unit should have pragma
! Elaborate or Elaborate_All for the server unit.’
  
  If the rule outlined above is not followed, then a program may fall in
  one of the following states:
  
!    * ‘No elaboration order exists’
  
       In this case a compiler must diagnose the situation, and refuse to
       build an executable program.
  
!    * ‘One or more incorrect elaboration orders exist’
  
       In this case a compiler can build an executable program, but
       ‘Program_Error’ will be raised when the program is run.
  
!    * ‘Several elaboration orders exist, some correct, some incorrect’
  
       In this case the programmer has not controlled the elaboration
       order.  As a result, a compiler may or may not pick one of the
--- 19832,19856 ----
  
  All pragmas shown above can be summarized by the following rule:
  
! 'If a client unit elaborates a server target directly or indirectly,
  then if the server unit requires a body and does not have pragma Pure,
  Preelaborate, or Elaborate_Body, then the client unit should have pragma
! Elaborate or Elaborate_All for the server unit.'
  
  If the rule outlined above is not followed, then a program may fall in
  one of the following states:
  
!    * 'No elaboration order exists'
  
       In this case a compiler must diagnose the situation, and refuse to
       build an executable program.
  
!    * 'One or more incorrect elaboration orders exist'
  
       In this case a compiler can build an executable program, but
       ‘Program_Error’ will be raised when the program is run.
  
!    * 'Several elaboration orders exist, some correct, some incorrect'
  
       In this case the programmer has not controlled the elaboration
       order.  As a result, a compiler may or may not pick one of the
*************** one of the following states:
*** 19859,19865 ****
       because the program may fail on another compiler, or even another
       version of the same compiler.
  
!    * ‘One or more correct orders exist’
  
       In this case a compiler can build an executable program, and the
       program is run successfully.  This state may be guaranteed by
--- 19859,19865 ----
       because the program may fail on another compiler, or even another
       version of the same compiler.
  
!    * 'One or more correct orders exist'
  
       In this case a compiler can build an executable program, and the
       program is run successfully.  This state may be guaranteed by
*************** In addition to Ada semantics and rules s
*** 19881,19887 ****
  offers three elaboration models to aid the programmer with specifying
  the correct elaboration order and to diagnose elaboration problems.
  
!    * ‘Dynamic elaboration model’
  
       This is the most permissive of the three elaboration models and
       emulates the behavior specified by the Ada Reference Manual.  When
--- 19881,19887 ----
  offers three elaboration models to aid the programmer with specifying
  the correct elaboration order and to diagnose elaboration problems.
  
!    * 'Dynamic elaboration model'
  
       This is the most permissive of the three elaboration models and
       emulates the behavior specified by the Ada Reference Manual.  When
*************** the correct elaboration order and to dia
*** 19899,19905 ****
       generates run-time checks for all external targets and for all
       scenarios that may exhibit ABE problems.
  
!      The elaboration order is obtained by honoring all ‘with’ clauses,
       purity and preelaborability of units, and elaboration-control
       pragmas.  The dynamic model attempts to take all invocations in
       elaboration code into account.  If an invocation leads to a
--- 19899,19905 ----
       generates run-time checks for all external targets and for all
       scenarios that may exhibit ABE problems.
  
!      The elaboration order is obtained by honoring all 'with' clauses,
       purity and preelaborability of units, and elaboration-control
       pragmas.  The dynamic model attempts to take all invocations in
       elaboration code into account.  If an invocation leads to a
*************** the correct elaboration order and to dia
*** 19909,19915 ****
  
       The dynamic model is enabled with compiler switch ‘-gnatE’.
  
!    * ‘Static elaboration model’
  
       This is the middle ground of the three models.  When the static
       model is in effect, GNAT makes the following assumptions:
--- 19909,19915 ----
  
       The dynamic model is enabled with compiler switch ‘-gnatE’.
  
!    * 'Static elaboration model'
  
       This is the middle ground of the three models.  When the static
       model is in effect, GNAT makes the following assumptions:
*************** the correct elaboration order and to dia
*** 19926,19932 ****
       generates run-time checks for all external targets and for all
       scenarios that may exhibit ABE problems.
  
!      The elaboration order is obtained by honoring all ‘with’ clauses,
       purity and preelaborability of units, presence of
       elaboration-control pragmas, and all invocations in elaboration
       code.  An order obtained using the static model is guaranteed to be
--- 19926,19932 ----
       generates run-time checks for all external targets and for all
       scenarios that may exhibit ABE problems.
  
!      The elaboration order is obtained by honoring all 'with' clauses,
       purity and preelaborability of units, presence of
       elaboration-control pragmas, and all invocations in elaboration
       code.  An order obtained using the static model is guaranteed to be
*************** the correct elaboration order and to dia
*** 19935,19941 ****
  
       The static model is the default model in GNAT.
  
!    * ‘SPARK elaboration model’
  
       This is the most conservative of the three models and enforces the
       SPARK rules of elaboration as defined in the SPARK Reference
--- 19935,19941 ----
  
       The static model is the default model in GNAT.
  
!    * 'SPARK elaboration model'
  
       This is the most conservative of the three models and enforces the
       SPARK rules of elaboration as defined in the SPARK Reference
*************** the correct elaboration order and to dia
*** 19945,19951 ****
  
       The SPARK model is enabled with compiler switch ‘-gnatd.v’.
  
!    * ‘Legacy elaboration models’
  
       In addition to the three elaboration models outlined above, GNAT
       provides the following legacy models:
--- 19945,19951 ----
  
       The SPARK model is enabled with compiler switch ‘-gnatd.v’.
  
!    * 'Legacy elaboration models'
  
       In addition to the three elaboration models outlined above, GNAT
       provides the following legacy models:
*************** File: gnat_ugn.info,  Node: Mixing Elabo
*** 19972,19978 ****
  It is possible to mix units compiled with a different elaboration model,
  however the following rules must be observed:
  
!    * A client unit compiled with the dynamic model can only ‘with’ a
       server unit that meets at least one of the following criteria:
  
          - The server unit is compiled with the dynamic model.
--- 19972,19978 ----
  It is possible to mix units compiled with a different elaboration model,
  however the following rules must be observed:
  
!    * A client unit compiled with the dynamic model can only 'with' a
       server unit that meets at least one of the following criteria:
  
          - The server unit is compiled with the dynamic model.
*************** not be invoked due conditional execution
*** 20010,20017 ****
  suppressed selectively with ‘pragma Warnings (Off)’ or globally with
  compiler switch ‘-gnatwL’.
  
! A ‘guaranteed ABE’ arises when the body of a target is not elaborated
! early enough, and causes ‘all’ scenarios that directly invoke the target
  to fail.
  
            package body Guaranteed_ABE is
--- 20010,20017 ----
  suppressed selectively with ‘pragma Warnings (Off)’ or globally with
  compiler switch ‘-gnatwL’.
  
! A 'guaranteed ABE' arises when the body of a target is not elaborated
! early enough, and causes 'all' scenarios that directly invoke the target
  to fail.
  
            package body Guaranteed_ABE is
*************** following diagnostic:
*** 20035,20042 ****
               >>> warning: cannot call "ABE" before body seen
               >>> warning: Program_Error will be raised at run time
  
! A ‘conditional ABE’ arises when the body of a target is not elaborated
! early enough, and causes ‘some’ scenarios that directly invoke the
  target to fail.
  
             1. package body Conditional_ABE is
--- 20035,20042 ----
               >>> warning: cannot call "ABE" before body seen
               >>> warning: Program_Error will be raised at run time
  
! A 'conditional ABE' arises when the body of a target is not elaborated
! early enough, and causes 'some' scenarios that directly invoke the
  target to fail.
  
             1. package body Conditional_ABE is
*************** File: gnat_ugn.info,  Node: Elaboration
*** 20113,20122 ****
  9.9 Elaboration Circularities
  =============================
  
! An ‘elaboration circularity’ occurs whenever the elaboration of a set of
  units enters a deadlocked state, where each unit is waiting for another
  unit to be elaborated.  This situation may be the result of improper use
! of ‘with’ clauses, elaboration-control pragmas, or invocations in
  elaboration code.
  
  The following example exhibits an elaboration circularity.
--- 20113,20122 ----
  9.9 Elaboration Circularities
  =============================
  
! An 'elaboration circularity' occurs whenever the elaboration of a set of
  units enters a deadlocked state, where each unit is waiting for another
  unit to be elaborated.  This situation may be the result of improper use
! of 'with' clauses, elaboration-control pragmas, or invocations in
  elaboration code.
  
  The following example exhibits an elaboration circularity.
*************** especially in the case of complex legacy
*** 20203,20209 ****
  When faced with an elaboration circularity, the programmer should also
  consider the tactics given in the suggestions section of the circularity
  diagnostic.  Depending on the units involved in the circularity, their
! ‘with’ clauses, purity, preelaborability, presence of
  elaboration-control pragmas and invocations at elaboration time, the
  binder may suggest one or more of the following tactics to eliminate the
  circularity:
--- 20203,20209 ----
  When faced with an elaboration circularity, the programmer should also
  consider the tactics given in the suggestions section of the circularity
  diagnostic.  Depending on the units involved in the circularity, their
! 'with' clauses, purity, preelaborability, presence of
  elaboration-control pragmas and invocations at elaboration time, the
  binder may suggest one or more of the following tactics to eliminate the
  circularity:
*************** circularity:
*** 20239,20245 ****
  
          - The removal of the pragma will not eliminate the semantic
            effects of the pragma.  In other words, the argument of the
!           pragma along with its ‘with’ closure will still be elaborated
            prior to the unit containing the pragma.
  
          - The removal of the pragma will enable the successful ordering
--- 20239,20245 ----
  
          - The removal of the pragma will not eliminate the semantic
            effects of the pragma.  In other words, the argument of the
!           pragma along with its 'with' closure will still be elaborated
            prior to the unit containing the pragma.
  
          - The removal of the pragma will enable the successful ordering
*************** consequently the elaboration order chose
*** 20414,20431 ****
       supplementary information depending on the elaboration model in
       effect.
  
!         - ‘Dynamic model’
  
            GNAT will indicate missing ‘Elaborate’ and ‘Elaborate_All’
            pragmas for all library-level scenarios within the partition.
  
!         - ‘Static model’
  
            GNAT will indicate all scenarios invoked during elaboration.
            In addition, it will provide detailed traceback when an
            implicit ‘Elaborate’ or ‘Elaborate_All’ pragma is generated.
  
!         - ‘SPARK model’
  
            GNAT will indicate how an elaboration requirement is met by
            the context of a unit.  This diagnostic requires compiler
--- 20414,20431 ----
       supplementary information depending on the elaboration model in
       effect.
  
!         - 'Dynamic model'
  
            GNAT will indicate missing ‘Elaborate’ and ‘Elaborate_All’
            pragmas for all library-level scenarios within the partition.
  
!         - 'Static model'
  
            GNAT will indicate all scenarios invoked during elaboration.
            In addition, it will provide detailed traceback when an
            implicit ‘Elaborate’ or ‘Elaborate_All’ pragma is generated.
  
!         - 'SPARK model'
  
            GNAT will indicate how an elaboration requirement is met by
            the context of a unit.  This diagnostic requires compiler
*************** out the differences from the Intel conve
*** 20763,20805 ****
  ‘gas’ (an ‘as’ macro pre-processor) documentation for further
  information.
  
!      ‘Register names’ 
!           gcc / ‘as’: Prefix with ‘%’; for example ‘%eax’ 
!           Intel: No extra punctuation; for example ‘eax’ 
  
!      ‘Immediate operand’ 
!           gcc / ‘as’: Prefix with ‘$’; for example ‘$4’ 
!           Intel: No extra punctuation; for example ‘4’ 
  
!      ‘Address’ 
!           gcc / ‘as’: Prefix with ‘$’; for example ‘$loc’ 
!           Intel: No extra punctuation; for example ‘loc’ 
  
!      ‘Memory contents’ 
!           gcc / ‘as’: No extra punctuation; for example ‘loc’ 
!           Intel: Square brackets; for example ‘[loc]’ 
  
!      ‘Register contents’ 
!           gcc / ‘as’: Parentheses; for example ‘(%eax)’ 
!           Intel: Square brackets; for example ‘[eax]’ 
  
!      ‘Hexadecimal numbers’ 
!           gcc / ‘as’: Leading ‘0x’ (C language syntax); for example ‘0xA0’ 
!           Intel: Trailing ‘h’; for example ‘A0h’ 
  
!      ‘Operand size’ 
!           gcc / ‘as’: Explicit in op code; for example ‘movw’ to move a 16-bit word 
!           Intel: Implicit, deduced by assembler; for example ‘mov’ 
  
!      ‘Instruction repetition’ 
!           gcc / ‘as’: Split into two lines; for example 
!                ‘rep’ 
!                ‘stosl’ 
!           Intel: Keep on one line; for example ‘rep stosl’ 
  
!      ‘Order of operands’ 
!           gcc / ‘as’: Source first; for example ‘movw $4, %eax’ 
!           Intel: Destination first; for example ‘mov eax, 4’ 
  
  
  File: gnat_ugn.info,  Node: A Simple Example of Inline Assembler,  Next: Output Variables in Inline Assembler,  Prev: Basic Assembler Syntax,  Up: Inline Assembler
--- 20763,20805 ----
  ‘gas’ (an ‘as’ macro pre-processor) documentation for further
  information.
  
!      'Register names'
!           gcc / ‘as’: Prefix with ‘%’; for example ‘%eax’
!           Intel: No extra punctuation; for example ‘eax’
  
!      'Immediate operand'
!           gcc / ‘as’: Prefix with ‘$’; for example ‘$4’
!           Intel: No extra punctuation; for example ‘4’
  
!      'Address'
!           gcc / ‘as’: Prefix with ‘$’; for example ‘$loc’
!           Intel: No extra punctuation; for example ‘loc’
  
!      'Memory contents'
!           gcc / ‘as’: No extra punctuation; for example ‘loc’
!           Intel: Square brackets; for example ‘[loc]’
  
!      'Register contents'
!           gcc / ‘as’: Parentheses; for example ‘(%eax)’
!           Intel: Square brackets; for example ‘[eax]’
  
!      'Hexadecimal numbers'
!           gcc / ‘as’: Leading ‘0x’ (C language syntax); for example ‘0xA0’
!           Intel: Trailing ‘h’; for example ‘A0h’
  
!      'Operand size'
!           gcc / ‘as’: Explicit in op code; for example ‘movw’ to move a 16-bit word
!           Intel: Implicit, deduced by assembler; for example ‘mov’
  
!      'Instruction repetition'
!           gcc / ‘as’: Split into two lines; for example
!                ‘rep’
!                ‘stosl’
!           Intel: Keep on one line; for example ‘rep stosl’
  
!      'Order of operands'
!           gcc / ‘as’: Source first; for example ‘movw $4, %eax’
!           Intel: Destination first; for example ‘mov eax, 4’
  
  
  File: gnat_ugn.info,  Node: A Simple Example of Inline Assembler,  Next: Output Variables in Inline Assembler,  Prev: Basic Assembler Syntax,  Up: Inline Assembler
*************** Inline Assembler facility.
*** 20819,20825 ****
            end Nothing;
  
  ‘Asm’ is a procedure declared in package ‘System.Machine_Code’; here it
! takes one parameter, a ‘template string’ that must be a static
  expression and that will form the generated instruction.  ‘Asm’ may be
  regarded as a compile-time procedure that parses the template string and
  additional parameters (none here), from which it generates a sequence of
--- 20819,20825 ----
            end Nothing;
  
  ‘Asm’ is a procedure declared in package ‘System.Machine_Code’; here it
! takes one parameter, a 'template string' that must be a static
  expression and that will form the generated instruction.  ‘Asm’ may be
  regarded as a compile-time procedure that parses the template string and
  additional parameters (none here), from which it generates a sequence of
*************** allowing the optimizer to choose whateve
*** 21008,21047 ****
  There are a fairly large number of constraints, but the ones that are
  most useful (for the Intel x86 processor) are the following:
  
!      ‘=’        output constraint
                  
                  
!      ‘g’        global (i.e., can be stored anywhere)
                  
                  
!      ‘m’        in memory
                  
                  
!      ‘I’        a constant
                  
                  
!      ‘a’        use eax
                  
                  
!      ‘b’        use ebx
                  
                  
!      ‘c’        use ecx
                  
                  
!      ‘d’        use edx
                  
                  
!      ‘S’        use esi
                  
                  
!      ‘D’        use edi
                  
                  
!      ‘r’        use one of eax, ebx, ecx or edx
                  
                  
!      ‘q’        use one of eax, ebx, ecx, edx, esi or edi
                  
  
  The full set of constraints is described in the gcc and ‘as’
--- 21008,21047 ----
  There are a fairly large number of constraints, but the ones that are
  most useful (for the Intel x86 processor) are the following:
  
!      '='        output constraint
                  
                  
!      'g'        global (i.e., can be stored anywhere)
                  
                  
!      'm'        in memory
                  
                  
!      'I'        a constant
                  
                  
!      'a'        use eax
                  
                  
!      'b'        use ebx
                  
                  
!      'c'        use ecx
                  
                  
!      'd'        use edx
                  
                  
!      'S'        use esi
                  
                  
!      'D'        use edi
                  
                  
!      'r'        use one of eax, ebx, ecx or edx
                  
                  
!      'q'        use one of eax, ebx, ecx, edx, esi or edi
                  
  
  The full set of constraints is described in the gcc and ‘as’
*************** documentation; note that it is possible
*** 21049,21055 ****
  in one constraint string.
  
  You specify the association of an output variable with an assembler
! operand through the ‘%N’ notation, where ‘n’ is a non-negative integer.
  Thus in
  
            Asm ("pushfl"          & LF & HT & -- push flags on stack
--- 21049,21055 ----
  in one constraint string.
  
  You specify the association of an output variable with an assembler
! operand through the ‘%N’ notation, where 'n' is a non-negative integer.
  Thus in
  
            Asm ("pushfl"          & LF & HT & -- push flags on stack
*************** identify the registers that will be used
*** 21305,21311 ****
                 Clobber => "ebx");
  
  The Clobber parameter is a static string expression specifying the
! register(s) you are using.  Note that register names are ‘not’ prefixed
  by a percent sign.  Also, if more than one register is used then their
  names are separated by commas; e.g., ‘"eax, ebx"’
  
--- 21305,21311 ----
                 Clobber => "ebx");
  
  The Clobber parameter is a static string expression specifying the
! register(s) you are using.  Note that register names are 'not' prefixed
  by a percent sign.  Also, if more than one register is used then their
  names are separated by commas; e.g., ‘"eax, ebx"’
  
*************** Copyright 2000, 2001, 2002, 2007, 2008 F
*** 21359,21365 ****
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
  
! ‘Preamble’
  
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document “free” in the sense of freedom: to assure
--- 21359,21365 ----
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
  
! 'Preamble'
  
  The purpose of this License is to make a manual, textbook, or other
  functional and useful document “free” in the sense of freedom: to assure
*************** used for any textual work, regardless of
*** 21382,21403 ****
  published as a printed book.  We recommend this License principally for
  works whose purpose is instruction or reference.
  
! ‘1.  APPLICABILITY AND DEFINITIONS’
  
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
  world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The ‘Document’, below, refers
  to any such manual or work.  Any member of the public is a licensee, and
! is addressed as “‘you’”.  You accept the license if you copy, modify or
  distribute the work in a way requiring permission under copyright law.
  
! A “‘Modified Version’” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “‘Secondary Section’” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
  publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
--- 21382,21403 ----
  published as a printed book.  We recommend this License principally for
  works whose purpose is instruction or reference.
  
! '1.  APPLICABILITY AND DEFINITIONS'
  
  This License applies to any manual or other work, in any medium, that
  contains a notice placed by the copyright holder saying it can be
  distributed under the terms of this License.  Such a notice grants a
  world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The 'Document', below, refers
  to any such manual or work.  Any member of the public is a licensee, and
! is addressed as “'you'”.  You accept the license if you copy, modify or
  distribute the work in a way requiring permission under copyright law.
  
! A “'Modified Version'” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “'Secondary Section'” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
  publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
*************** mathematics.)  The relationship could be
*** 21407,21413 ****
  connection with the subject or with related matters, or of legal,
  commercial, philosophical, ethical or political position regarding them.
  
! The “‘Invariant Sections’” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice that
  says that the Document is released under this License.  If a section
  does not fit the above definition of Secondary then it is not allowed to
--- 21407,21413 ----
  connection with the subject or with related matters, or of legal,
  commercial, philosophical, ethical or political position regarding them.
  
! The “'Invariant Sections'” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice that
  says that the Document is released under this License.  If a section
  does not fit the above definition of Secondary then it is not allowed to
*************** be designated as Invariant.  The Documen
*** 21415,21426 ****
  Sections.  If the Document does not identify any Invariant Sections then
  there are none.
  
! The “‘Cover Texts’” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may be
  at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “‘Transparent’” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the general
  public, that is suitable for revising the document straightforwardly
  with generic text editors or (for images composed of pixels) generic
--- 21415,21426 ----
  Sections.  If the Document does not identify any Invariant Sections then
  there are none.
  
! The “'Cover Texts'” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may be
  at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “'Transparent'” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the general
  public, that is suitable for revising the document straightforwardly
  with generic text editors or (for images composed of pixels) generic
*************** formatters.  A copy made in an otherwise
*** 21431,21437 ****
  markup, or absence of markup, has been arranged to thwart or discourage
  subsequent modification by readers is not Transparent.  An image format
  is not Transparent if used for any substantial amount of text.  A copy
! that is not “Transparent” is called ‘Opaque’.
  
  Examples of suitable formats for Transparent copies include plain ASCII
  without markup, Texinfo input format, LaTeX input format, SGML or XML
--- 21431,21437 ----
  markup, or absence of markup, has been arranged to thwart or discourage
  subsequent modification by readers is not Transparent.  An image format
  is not Transparent if used for any substantial amount of text.  A copy
! that is not “Transparent” is called 'Opaque'.
  
  Examples of suitable formats for Transparent copies include plain ASCII
  without markup, Texinfo input format, LaTeX input format, SGML or XML
*************** processing tools are not generally avail
*** 21444,21465 ****
  HTML, PostScript or PDF produced by some word processors for output
  purposes only.
  
! The “‘Title Page’” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in formats
  which do not have any title page as such, “Title Page” means the text
  near the most prominent appearance of the work’s title, preceding the
  beginning of the body of the text.
  
! The “‘publisher’” means any person or entity that distributes copies of
  the Document to the public.
  
! A section “‘Entitled XYZ’” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “‘Acknowledgements’”,
! “‘Dedications’”, “‘Endorsements’”, or “‘History’”.)  To “‘Preserve the
! Title’” of such a section when you modify the Document means that it
  remains a section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
--- 21444,21465 ----
  HTML, PostScript or PDF produced by some word processors for output
  purposes only.
  
! The “'Title Page'” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in formats
  which do not have any title page as such, “Title Page” means the text
  near the most prominent appearance of the work’s title, preceding the
  beginning of the body of the text.
  
! The “'publisher'” means any person or entity that distributes copies of
  the Document to the public.
  
! A section “'Entitled XYZ'” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “'Acknowledgements'”,
! “'Dedications'”, “'Endorsements'”, or “'History'”.)  To “'Preserve the
! Title'” of such a section when you modify the Document means that it
  remains a section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
*************** but only as regards disclaiming warranti
*** 21469,21475 ****
  these Warranty Disclaimers may have is void and has no effect on the
  meaning of this License.
  
! ‘2.  VERBATIM COPYING’
  
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
--- 21469,21475 ----
  these Warranty Disclaimers may have is void and has no effect on the
  meaning of this License.
  
! '2.  VERBATIM COPYING'
  
  You may copy and distribute the Document in any medium, either
  commercially or noncommercially, provided that this License, the
*************** number of copies you must also follow th
*** 21484,21490 ****
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
  
! ‘3.  COPYING IN QUANTITY’
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
--- 21484,21490 ----
  You may also lend copies, under the same conditions stated above, and
  you may publicly display copies.
  
! '3.  COPYING IN QUANTITY'
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
*************** It is requested, but not required, that
*** 21521,21527 ****
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
  
! ‘4.  MODIFICATIONS’
  
  You may copy and distribute a Modified Version of the Document under the
  conditions of sections 2 and 3 above, provided that you release the
--- 21521,21527 ----
  Document well before redistributing any large number of copies, to give
  them a chance to provide you with an updated version of the Document.
  
! '4.  MODIFICATIONS'
  
  You may copy and distribute a Modified Version of the Document under the
  conditions of sections 2 and 3 above, provided that you release the
*************** The author(s) and publisher(s) of the Do
*** 21619,21625 ****
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  
! ‘5.  COMBINING DOCUMENTS’
  
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
--- 21619,21625 ----
  give permission to use their names for publicity for or to assert or
  imply endorsement of any Modified Version.
  
! '5.  COMBINING DOCUMENTS'
  
  You may combine the Document with other documents released under this
  License, under the terms defined in section 4 above for modified
*************** likewise combine any sections Entitled �
*** 21643,21649 ****
  sections Entitled “Dedications”.  You must delete all sections Entitled
  “Endorsements”.
  
! ‘6.  COLLECTIONS OF DOCUMENTS’
  
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
--- 21643,21649 ----
  sections Entitled “Dedications”.  You must delete all sections Entitled
  “Endorsements”.
  
! '6.  COLLECTIONS OF DOCUMENTS'
  
  You may make a collection consisting of the Document and other documents
  released under this License, and replace the individual copies of this
*************** it individually under this License, prov
*** 21656,21662 ****
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
  
! ‘7.  AGGREGATION WITH INDEPENDENT WORKS’
  
  A compilation of the Document or its derivatives with other separate and
  independent documents or works, in or on a volume of a storage or
--- 21656,21662 ----
  License into the extracted document, and follow this License in all
  other respects regarding verbatim copying of that document.
  
! '7.  AGGREGATION WITH INDEPENDENT WORKS'
  
  A compilation of the Document or its derivatives with other separate and
  independent documents or works, in or on a volume of a storage or
*************** that bracket the Document within the agg
*** 21674,21680 ****
  equivalent of covers if the Document is in electronic form.  Otherwise
  they must appear on printed covers that bracket the whole aggregate.
  
! ‘8.  TRANSLATION’
  
  Translation is considered a kind of modification, so you may distribute
  translations of the Document under the terms of section 4.  Replacing
--- 21674,21680 ----
  equivalent of covers if the Document is in electronic form.  Otherwise
  they must appear on printed covers that bracket the whole aggregate.
  
! '8.  TRANSLATION'
  
  Translation is considered a kind of modification, so you may distribute
  translations of the Document under the terms of section 4.  Replacing
*************** If a section in the Document is Entitled
*** 21693,21699 ****
  “Dedications”, or “History”, the requirement (section 4) to Preserve its
  Title (section 1) will typically require changing the actual title.
  
! ‘9.  TERMINATION’
  
  You may not copy, modify, sublicense, or distribute the Document except
  as expressly provided under this License.  Any attempt otherwise to
--- 21693,21699 ----
  “Dedications”, or “History”, the requirement (section 4) to Preserve its
  Title (section 1) will typically require changing the actual title.
  
! '9.  TERMINATION'
  
  You may not copy, modify, sublicense, or distribute the Document except
  as expressly provided under this License.  Any attempt otherwise to
*************** this License.  If your rights have been
*** 21720,21726 ****
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
  
! ‘10.  FUTURE REVISIONS OF THIS LICENSE’
  
  The Free Software Foundation may publish new, revised versions of the
  GNU Free Documentation License from time to time.  Such new versions
--- 21720,21726 ----
  reinstated, receipt of a copy of some or all of the same material does
  not give you any rights to use it.
  
! '10.  FUTURE REVISIONS OF THIS LICENSE'
  
  The Free Software Foundation may publish new, revised versions of the
  GNU Free Documentation License from time to time.  Such new versions
*************** that a proxy can decide which future ver
*** 21740,21746 ****
  used, that proxy’s public statement of acceptance of a version
  permanently authorizes you to choose that version for the Document.
  
! ‘11.  RELICENSING’
  
  “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
  Wide Web server that publishes copyrightable works and also provides
--- 21740,21746 ----
  used, that proxy’s public statement of acceptance of a version
  permanently authorizes you to choose that version for the Document.
  
! '11.  RELICENSING'
  
  “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
  Wide Web server that publishes copyrightable works and also provides
*************** The operator of an MMC Site may republis
*** 21768,21774 ****
  under CC-BY-SA on the same site at any time before August 1, 2009,
  provided the MMC is eligible for relicensing.
  
! ‘ADDENDUM: How to use this License for your documents’
  
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and license
--- 21768,21774 ----
  under CC-BY-SA on the same site at any time before August 1, 2009,
  provided the MMC is eligible for relicensing.
  
! 'ADDENDUM: How to use this License for your documents'
  
  To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and license
*************** Index
*** 21807,21812 ****
--- 21807,21814 ----
  [index]
  * Menu:
  
+ * __gnat_malloc:                         Switches for gnatbind.
+                                                              (line  137)
  * -a (gnatbind):                         Switches for gnatbind.
                                                               (line   19)
  * -A (gnatbind):                         Switches for gnatbind.
*************** Index
*** 21840,21846 ****
                                                               (line  458)
  * -aP (gnatls):                          Switches for gnatls.
                                                               (line   55)
! * –as (dlltool):                         Using gnatdll.      (line  227)
  * -b (gcc):                              Alphabetical List of All Switches.
                                                               (line    6)
  * -B (gcc):                              Alphabetical List of All Switches.
--- 21842,21848 ----
                                                               (line  458)
  * -aP (gnatls):                          Switches for gnatls.
                                                               (line   55)
! * -as (dlltool):                         Using gnatdll.      (line  227)
  * -b (gcc):                              Alphabetical List of All Switches.
                                                               (line    6)
  * -B (gcc):                              Alphabetical List of All Switches.
*************** Index
*** 21859,21865 ****
  * -bargs (gnatdll):                      Using gnatdll.      (line   35)
  * -bargs (gnatmake):                     Mode Switches for gnatmake.
                                                               (line   19)
! * –base-file (dlltool):                  Using gnatdll.      (line  189)
  * -C (gcc):                              Switches.           (line   21)
  * -c (gcc):                              Alphabetical List of All Switches.
                                                               (line   21)
--- 21861,21867 ----
  * -bargs (gnatdll):                      Using gnatdll.      (line   35)
  * -bargs (gnatmake):                     Mode Switches for gnatmake.
                                                               (line   19)
! * -base-file (dlltool):                  Using gnatdll.      (line  189)
  * -C (gcc):                              Switches.           (line   21)
  * -c (gcc):                              Alphabetical List of All Switches.
                                                               (line   21)
*************** Index
*** 21884,21890 ****
                                                               (line  170)
  * -cargs (gnatmake):                     Mode Switches for gnatmake.
                                                               (line   13)
! * –create-missing-dirs (gnatmake):       Switches for gnatmake.
                                                               (line   72)
  * -D (gnatbind):                         Switches for gnatbind.
                                                               (line   58)
--- 21886,21892 ----
                                                               (line  170)
  * -cargs (gnatmake):                     Mode Switches for gnatmake.
                                                               (line   13)
! * -create-missing-dirs (gnatmake):       Switches for gnatmake.
                                                               (line   72)
  * -D (gnatbind):                         Switches for gnatbind.
                                                               (line   58)
*************** Index
*** 21903,21911 ****
                                                               (line   59)
  * -D (gnatprep):                         Switches for gnatprep.
                                                               (line   40)
! * –def (dlltool):                        Using gnatdll.      (line  194)
! * –demangle (gprof):                     Running gprof.      (line   24)
! * –dllname (dlltool):                    Using gnatdll.      (line  198)
  * -dnn[k|m] (gnatbind):                  Switches for gnatbind.
                                                               (line   46)
  * -e (gnatbind):                         Switches for gnatbind.
--- 21905,21913 ----
                                                               (line   59)
  * -D (gnatprep):                         Switches for gnatprep.
                                                               (line   40)
! * -def (dlltool):                        Using gnatdll.      (line  194)
! * -demangle (gprof):                     Running gprof.      (line   24)
! * -dllname (dlltool):                    Using gnatdll.      (line  198)
  * -dnn[k|m] (gnatbind):                  Switches for gnatbind.
                                                               (line   46)
  * -e (gnatbind):                         Switches for gnatbind.
*************** Index
*** 22007,22017 ****
                                                               (line   27)
  * -g (gnatmake):                         Switches for gnatmake.
                                                               (line  240)
! * –GCC= (gnatchop):                      Switches for gnatchop.
                                                               (line   98)
! * –GCC=compiler_name (gnatlink):         Switches for gnatlink.
                                                               (line   80)
! * –GCC=compiler_name (gnatmake):         Switches for gnatmake.
                                                               (line   24)
  * -gnat-p (gcc):                         Alphabetical List of All Switches.
                                                               (line  758)
--- 22009,22019 ----
                                                               (line   27)
  * -g (gnatmake):                         Switches for gnatmake.
                                                               (line  240)
! * -GCC= (gnatchop):                      Switches for gnatchop.
                                                               (line   98)
! * -GCC=compiler_name (gnatlink):         Switches for gnatlink.
                                                               (line   80)
! * -GCC=compiler_name (gnatmake):         Switches for gnatmake.
                                                               (line   24)
  * -gnat-p (gcc):                         Alphabetical List of All Switches.
                                                               (line  758)
*************** Index
*** 22058,22064 ****
                                                               (line  209)
  * -gnatb (gcc) <1>:                      Output and Error Message Control.
                                                               (line  101)
! * –GNATBIND=binder_name (gnatmake):      Switches for gnatmake.
                                                               (line   40)
  * -gnatc (gcc):                          Alphabetical List of All Switches.
                                                               (line  214)
--- 22060,22066 ----
                                                               (line  209)
  * -gnatb (gcc) <1>:                      Output and Error Message Control.
                                                               (line  101)
! * -GNATBIND=binder_name (gnatmake):      Switches for gnatmake.
                                                               (line   40)
  * -gnatc (gcc):                          Alphabetical List of All Switches.
                                                               (line  214)
*************** Index
*** 22070,22079 ****
                                                               (line  235)
  * -gnatd (gcc) <1>:                      Debugging Control.  (line    6)
  * -gnatD (gcc):                          Debugging Control.  (line  142)
- * -gnatdc switch:                        GNAT Abnormal Termination or Failure to Terminate.
-                                                              (line   33)
  * -gnatD[nn] (gcc):                      Alphabetical List of All Switches.
                                                               (line  245)
  * -gnatE (gcc):                          Alphabetical List of All Switches.
                                                               (line  564)
  * -gnatE (gcc) <1>:                      Run-Time Checks.    (line  129)
--- 22072,22081 ----
                                                               (line  235)
  * -gnatd (gcc) <1>:                      Debugging Control.  (line    6)
  * -gnatD (gcc):                          Debugging Control.  (line  142)
  * -gnatD[nn] (gcc):                      Alphabetical List of All Switches.
                                                               (line  245)
+ * -gnatdc switch:                        GNAT Abnormal Termination or Failure to Terminate.
+                                                              (line   33)
  * -gnatE (gcc):                          Alphabetical List of All Switches.
                                                               (line  564)
  * -gnatE (gcc) <1>:                      Run-Time Checks.    (line  129)
*************** Index
*** 22182,22188 ****
  * -gnatL (gcc) <2>:                      Debugging Control.  (line  163)
  * -gnatl=fname (gcc):                    Output and Error Message Control.
                                                               (line   84)
! * –GNATLINK=linker_name (gnatmake):      Switches for gnatmake.
                                                               (line   51)
  * -gnatm (gcc):                          Alphabetical List of All Switches.
                                                               (line  672)
--- 22184,22190 ----
  * -gnatL (gcc) <2>:                      Debugging Control.  (line  163)
  * -gnatl=fname (gcc):                    Output and Error Message Control.
                                                               (line   84)
! * -GNATLINK=linker_name (gnatmake):      Switches for gnatmake.
                                                               (line   51)
  * -gnatm (gcc):                          Alphabetical List of All Switches.
                                                               (line  672)
*************** Index
*** 22202,22209 ****
                                                               (line   34)
  * -gnato (gcc):                          Controlling Run-Time Checks.
                                                               (line   11)
- * -gnato0 (gcc):                         Alphabetical List of All Switches.
-                                                              (line  703)
  * -gnato? (gcc):                         Specifying the Desired Mode.
                                                               (line   52)
  * -gnato?? (gcc):                        Alphabetical List of All Switches.
--- 22204,22209 ----
*************** Index
*** 22211,22216 ****
--- 22211,22218 ----
  * -gnato?? (gcc) <1>:                    Run-Time Checks.    (line   64)
  * -gnato?? (gcc) <2>:                    Specifying the Desired Mode.
                                                               (line   52)
+ * -gnato0 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  703)
  * -gnatp (gcc):                          Alphabetical List of All Switches.
                                                               (line  752)
  * -gnatp (gcc) <1>:                      Run-Time Checks.    (line   12)
*************** Index
*** 22272,22277 ****
--- 22274,22303 ----
                                                               (line  817)
  * -gnatW (gcc) <1>:                      Character Set Control.
                                                               (line   51)
+ * -gnatw_a:                              Warning Message Control.
+                                                              (line  217)
+ * -gnatw_A:                              Warning Message Control.
+                                                              (line  226)
+ * -gnatw_c (gcc):                        Warning Message Control.
+                                                              (line  320)
+ * -gnatw_C (gcc):                        Warning Message Control.
+                                                              (line  328)
+ * -gnatw_p (gcc):                        Warning Message Control.
+                                                              (line  794)
+ * -gnatw_P (gcc):                        Warning Message Control.
+                                                              (line  805)
+ * -gnatw_q (gcc):                        Warning Message Control.
+                                                              (line  880)
+ * -gnatw_Q (gcc):                        Warning Message Control.
+                                                              (line  894)
+ * -gnatw_r (gcc):                        Warning Message Control.
+                                                              (line  950)
+ * -gnatw_R (gcc):                        Warning Message Control.
+                                                              (line  959)
+ * -gnatw_s (gcc):                        Warning Message Control.
+                                                              (line  998)
+ * -gnatw_S (gcc):                        Warning Message Control.
+                                                              (line 1006)
  * -gnatw.a (gcc):                        Warning Message Control.
                                                               (line  201)
  * -gnatw.A (gcc):                        Warning Message Control.
*************** Index
*** 22470,22499 ****
                                                               (line 1266)
  * -gnatwZ (gcc):                         Warning Message Control.
                                                               (line 1275)
- * -gnatw_a:                              Warning Message Control.
-                                                              (line  217)
- * -gnatw_A:                              Warning Message Control.
-                                                              (line  226)
- * -gnatw_c (gcc):                        Warning Message Control.
-                                                              (line  320)
- * -gnatw_C (gcc):                        Warning Message Control.
-                                                              (line  328)
- * -gnatw_p (gcc):                        Warning Message Control.
-                                                              (line  794)
- * -gnatw_P (gcc):                        Warning Message Control.
-                                                              (line  805)
- * -gnatw_q (gcc):                        Warning Message Control.
-                                                              (line  880)
- * -gnatw_Q (gcc):                        Warning Message Control.
-                                                              (line  894)
- * -gnatw_r (gcc):                        Warning Message Control.
-                                                              (line  950)
- * -gnatw_R (gcc):                        Warning Message Control.
-                                                              (line  959)
- * -gnatw_s (gcc):                        Warning Message Control.
-                                                              (line  998)
- * -gnatw_S (gcc):                        Warning Message Control.
-                                                              (line 1006)
  * -gnatx (gcc):                          Alphabetical List of All Switches.
                                                               (line  821)
  * -gnatX (gcc):                          Alphabetical List of All Switches.
--- 22496,22501 ----
*************** Index
*** 22508,22515 ****
  * -gnaty (gcc):                          Alphabetical List of All Switches.
                                                               (line  833)
  * -gnaty (gcc) <1>:                      Style Checking.     (line    6)
- * -gnaty+ (gcc):                         Style Checking.     (line  466)
  * -gnaty- (gcc):                         Style Checking.     (line  454)
  * -gnatya (gcc):                         Style Checking.     (line   51)
  * -gnatyA (gcc):                         Style Checking.     (line   60)
  * -gnatyb (gcc):                         Style Checking.     (line   68)
--- 22510,22518 ----
  * -gnaty (gcc):                          Alphabetical List of All Switches.
                                                               (line  833)
  * -gnaty (gcc) <1>:                      Style Checking.     (line    6)
  * -gnaty- (gcc):                         Style Checking.     (line  454)
+ * -gnaty[0-9] (gcc):                     Style Checking.     (line   25)
+ * -gnaty+ (gcc):                         Style Checking.     (line  466)
  * -gnatya (gcc):                         Style Checking.     (line   51)
  * -gnatyA (gcc):                         Style Checking.     (line   60)
  * -gnatyb (gcc):                         Style Checking.     (line   68)
*************** Index
*** 22542,22548 ****
  * -gnatyx (gcc):                         Style Checking.     (line  430)
  * -gnatyy (gcc):                         Style Checking.     (line  438)
  * -gnatyz (gcc):                         Style Checking.     (line  447)
- * -gnaty[0-9] (gcc):                     Style Checking.     (line   25)
  * -gnatz (gcc):                          Alphabetical List of All Switches.
                                                               (line  837)
  * -h (gnatbind):                         Switches for gnatbind.
--- 22545,22550 ----
*************** Index
*** 22561,22582 ****
                                                               (line  131)
  * -H64 (gnatbind):                       Switches for gnatbind.
                                                               (line  137)
! * –help (dlltool):                       Using gnatdll.      (line  209)
! * –help (gnatbind):                      Switches for gnatbind.
                                                               (line   14)
! * –help (gnatchop):                      Switches for gnatchop.
                                                               (line   13)
! * –help (gnatclean):                     Switches for gnatclean.
                                                               (line   13)
! * –help (gnatlink):                      Switches for gnatlink.
                                                               (line   13)
! * –help (gnatls):                        Switches for gnatls.
                                                               (line   13)
! * –help (gnatmake):                      Switches for gnatmake.
                                                               (line   13)
! * –help (gnatname):                      Switches for gnatname.
                                                               (line   15)
! * –help (gnatprep):                      Switches for gnatprep.
                                                               (line   11)
  * -I (gcc):                              Alphabetical List of All Switches.
                                                               (line  842)
--- 22563,22584 ----
                                                               (line  131)
  * -H64 (gnatbind):                       Switches for gnatbind.
                                                               (line  137)
! * -help (dlltool):                       Using gnatdll.      (line  209)
! * -help (gnatbind):                      Switches for gnatbind.
                                                               (line   14)
! * -help (gnatchop):                      Switches for gnatchop.
                                                               (line   13)
! * -help (gnatclean):                     Switches for gnatclean.
                                                               (line   13)
! * -help (gnatlink):                      Switches for gnatlink.
                                                               (line   13)
! * -help (gnatls):                        Switches for gnatls.
                                                               (line   13)
! * -help (gnatmake):                      Switches for gnatmake.
                                                               (line   13)
! * -help (gnatname):                      Switches for gnatname.
                                                               (line   15)
! * -help (gnatprep):                      Switches for gnatprep.
                                                               (line   11)
  * -I (gcc):                              Alphabetical List of All Switches.
                                                               (line  842)
*************** Index
*** 22629,22635 ****
  * -largs (gnatdll):                      Using gnatdll.      (line   99)
  * -largs (gnatmake):                     Mode Switches for gnatmake.
                                                               (line   25)
! * –LINK= (gnatlink):                     Switches for gnatlink.
                                                               (line  101)
  * -M (gnatbind):                         Switches for gnatbind.
                                                               (line  176)
--- 22631,22637 ----
  * -largs (gnatdll):                      Using gnatdll.      (line   99)
  * -largs (gnatmake):                     Mode Switches for gnatmake.
                                                               (line   25)
! * -LINK= (gnatlink):                     Switches for gnatlink.
                                                               (line  101)
  * -M (gnatbind):                         Switches for gnatbind.
                                                               (line  176)
*************** Index
*** 22698,22705 ****
                                                               (line   31)
  * -o (gnatmake):                         Switches for gnatmake.
                                                               (line  337)
! * –output-exp (dlltool):                 Using gnatdll.      (line  213)
! * –output-lib (dlltool):                 Using gnatdll.      (line  219)
  * -p (gnatbind):                         Switches for gnatbind.
                                                               (line  234)
  * -P (gnatbind):                         Switches for gnatbind.
--- 22700,22707 ----
                                                               (line   31)
  * -o (gnatmake):                         Switches for gnatmake.
                                                               (line  337)
! * -output-exp (dlltool):                 Using gnatdll.      (line  213)
! * -output-lib (dlltool):                 Using gnatdll.      (line  219)
  * -p (gnatbind):                         Switches for gnatbind.
                                                               (line  234)
  * -P (gnatbind):                         Switches for gnatbind.
*************** Index
*** 22744,22762 ****
                                                               (line   46)
  * -Ra (gnatbind):                        Switches for gnatbind.
                                                               (line  263)
! * –RTS (gcc):                            Alphabetical List of All Switches.
                                                               (line  904)
! * –RTS (gnatbind):                       Switches for gnatbind.
                                                               (line  218)
! * –RTS (gnatls):                         Switches for gnatls.
                                                               (line   59)
! * –RTS (gnatmake):                       Switches for gnatmake.
                                                               (line  493)
! * –RTS option:                           Specifying a Run-Time Library.
                                                               (line   53)
! * –RTS=sjlj (gnatmake):                  Exception Handling Control.
                                                               (line   29)
! * –RTS=zcx (gnatmake):                   Exception Handling Control.
                                                               (line   40)
  * -S (gcc):                              Alphabetical List of All Switches.
                                                               (line  910)
--- 22746,22764 ----
                                                               (line   46)
  * -Ra (gnatbind):                        Switches for gnatbind.
                                                               (line  263)
! * -RTS (gcc):                            Alphabetical List of All Switches.
                                                               (line  904)
! * -RTS (gnatbind):                       Switches for gnatbind.
                                                               (line  218)
! * -RTS (gnatls):                         Switches for gnatls.
                                                               (line   59)
! * -RTS (gnatmake):                       Switches for gnatmake.
                                                               (line  493)
! * -RTS option:                           Specifying a Run-Time Library.
                                                               (line   53)
! * -RTS=sjlj (gnatmake):                  Exception Handling Control.
                                                               (line   29)
! * -RTS=zcx (gnatmake):                   Exception Handling Control.
                                                               (line   40)
  * -S (gcc):                              Alphabetical List of All Switches.
                                                               (line  910)
*************** Index
*** 22796,22801 ****
--- 22798,22807 ----
                                                               (line  374)
  * -u (gnatprep):                         Switches for gnatprep.
                                                               (line   72)
+ * -v -v (gnatlink):                      Switches for gnatlink.
+                                                              (line   48)
+ * -v -v (gnatname):                      Switches for gnatname.
+                                                              (line  109)
  * -v (dlltool):                          Using gnatdll.      (line  223)
  * -v (gcc):                              Alphabetical List of All Switches.
                                                               (line  923)
*************** Index
*** 22822,22846 ****
                                                               (line  101)
  * -v (gnatprep):                         Switches for gnatprep.
                                                               (line   79)
! * -v -v (gnatlink):                      Switches for gnatlink.
!                                                              (line   48)
! * -v -v (gnatname):                      Switches for gnatname.
!                                                              (line  109)
! * –version (gnatbind):                   Switches for gnatbind.
                                                               (line    9)
! * –version (gnatchop):                   Switches for gnatchop.
                                                               (line    8)
! * –version (gnatclean):                  Switches for gnatclean.
                                                               (line    8)
! * –version (gnatlink):                   Switches for gnatlink.
                                                               (line    8)
! * –version (gnatls):                     Switches for gnatls.
                                                               (line    8)
! * –version (gnatmake):                   Switches for gnatmake.
                                                               (line    8)
! * –version (gnatname):                   Switches for gnatname.
                                                               (line   10)
! * –version (gnatprep):                   Switches for gnatprep.
                                                               (line    6)
  * -vl (gnatmake):                        Switches for gnatmake.
                                                               (line  387)
--- 22828,22848 ----
                                                               (line  101)
  * -v (gnatprep):                         Switches for gnatprep.
                                                               (line   79)
! * -version (gnatbind):                   Switches for gnatbind.
                                                               (line    9)
! * -version (gnatchop):                   Switches for gnatchop.
                                                               (line    8)
! * -version (gnatclean):                  Switches for gnatclean.
                                                               (line    8)
! * -version (gnatlink):                   Switches for gnatlink.
                                                               (line    8)
! * -version (gnatls):                     Switches for gnatls.
                                                               (line    8)
! * -version (gnatmake):                   Switches for gnatmake.
                                                               (line    8)
! * -version (gnatname):                   Switches for gnatname.
                                                               (line   10)
! * -version (gnatprep):                   Switches for gnatprep.
                                                               (line    6)
  * -vl (gnatmake):                        Switches for gnatmake.
                                                               (line  387)
*************** Index
*** 22898,22905 ****
                                                               (line   12)
  * -z (gnatmake):                         Switches for gnatmake.
                                                               (line  423)
- * __gnat_malloc:                         Switches for gnatbind.
-                                                              (line  137)
  * Abnormal Termination or Failure to Terminate: Remote Debugging with gdbserver.
                                                               (line   46)
  * Access before elaboration:             Run-Time Checks.    (line    6)
--- 22900,22905 ----
*************** Index
*** 22938,22948 ****
                                                               (line   80)
  * Ada Library Information files:         The Ada Library Information Files.
                                                               (line    6)
- * Ada.Characters.Latin_1:                Latin-1.            (line   13)
- * adafinal:                              Binding with Non-Ada Main Programs.
-                                                              (line   38)
- * adainit:                               Binding with Non-Ada Main Programs.
-                                                              (line   22)
  * ADA_INCLUDE_PATH:                      Using a library.    (line   54)
  * ADA_INCLUDE_PATH <1>:                  Search Paths and the Run-Time Library RTL.
                                                               (line   28)
--- 22938,22943 ----
*************** Index
*** 22967,22972 ****
--- 22962,22972 ----
                                                               (line   23)
  * ADA_PROJECT_PATH:                      Installing a library.
                                                               (line    6)
+ * Ada.Characters.Latin_1:                Latin-1.            (line   13)
+ * adafinal:                              Binding with Non-Ada Main Programs.
+                                                              (line   38)
+ * adainit:                               Binding with Non-Ada Main Programs.
+                                                              (line   22)
  * Address Clauses:                       Warning Message Control.
                                                               (line  716)
  * ALI files:                             The Ada Library Information Files.
*************** Index
*** 23042,23047 ****
--- 23042,23049 ----
                                                               (line    6)
  * C varargs function:                    Calling Conventions.
                                                               (line   64)
+ * C_INCLUDE_PATH:                        Linking a Mixed C++ & Ada Program.
+                                                              (line   28)
  * C++:                                   Calling Conventions.
                                                               (line   89)
  * C++ headers (binding generation):      Generating Ada Bindings for C and C++ headers.
*************** Index
*** 23131,23138 ****
  * CR:                                    Source Representation.
                                                               (line    6)
  * Cyrillic:                              Other 8-Bit Codes.  (line   23)
- * C_INCLUDE_PATH:                        Linking a Mixed C++ & Ada Program.
-                                                              (line   28)
  * Deactivated code:                      Warning Message Control.
                                                               (line 1014)
  * Debug:                                 Debugging and Assertion Control.
--- 23133,23138 ----
*************** Index
*** 23167,23182 ****
                                                               (line  153)
  * Dimension Vector (for a dimensioned subtype): Performing Dimensionality Analysis in GNAT.
                                                               (line  153)
  * Dimensionable type:                    Performing Dimensionality Analysis in GNAT.
                                                               (line  148)
  * Dimensionality analysis:               Performing Dimensionality Analysis in GNAT.
                                                               (line    6)
  * Dimensioned subtype:                   Performing Dimensionality Analysis in GNAT.
                                                               (line  148)
- * Dimension_System aspect:               Performing Dimensionality Analysis in GNAT.
-                                                              (line   13)
- * Dimension_System aspect <1>:           Performing Dimensionality Analysis in GNAT.
-                                                              (line  153)
  * Division by zero:                      Run-Time Checks.    (line    6)
  * division by zero:                      Run-Time Checks.    (line    6)
  * DLL:                                   Calling Conventions.
--- 23167,23182 ----
                                                               (line  153)
  * Dimension Vector (for a dimensioned subtype): Performing Dimensionality Analysis in GNAT.
                                                               (line  153)
+ * Dimension_System aspect:               Performing Dimensionality Analysis in GNAT.
+                                                              (line   13)
+ * Dimension_System aspect <1>:           Performing Dimensionality Analysis in GNAT.
+                                                              (line  153)
  * Dimensionable type:                    Performing Dimensionality Analysis in GNAT.
                                                               (line  148)
  * Dimensionality analysis:               Performing Dimensionality Analysis in GNAT.
                                                               (line    6)
  * Dimensioned subtype:                   Performing Dimensionality Analysis in GNAT.
                                                               (line  148)
  * Division by zero:                      Run-Time Checks.    (line    6)
  * division by zero:                      Run-Time Checks.    (line    6)
  * DLL:                                   Calling Conventions.
*************** Index
*** 23306,23311 ****
--- 23306,23317 ----
                                                               (line   10)
  * GNAT Run-Time Library:                 Rebuilding the GNAT Run-Time Library.
                                                               (line    6)
+ * gnat_argc:                             Command-Line Access.
+                                                              (line   13)
+ * gnat_argv:                             Command-Line Access.
+                                                              (line   13)
+ * GNAT_INIT_SCALARS:                     Switches for gnatbind.
+                                                              (line  316)
  * gnat.adc:                              Using Other File Names.
                                                               (line   35)
  * gnat.adc <1>:                          The Configuration Pragmas Files.
*************** Index
*** 23331,23349 ****
  * gnatprep:                              Preprocessing.      (line   17)
  * gnatprep <1>:                          Preprocessing with gnatprep.
                                                               (line    6)
- * gnat_argc:                             Command-Line Access.
-                                                              (line   13)
- * gnat_argv:                             Command-Line Access.
-                                                              (line   13)
- * GNAT_INIT_SCALARS:                     Switches for gnatbind.
-                                                              (line  316)
  * GNU make:                              Using the GNU make Utility.
                                                               (line    6)
  * GNU/Linux:                             Choosing the Scheduling Policy.
                                                               (line   38)
- * gprof:                                 Profiling.          (line    9)
  * GPR_PROJECT_PATH:                      Installing a library.
                                                               (line    6)
  * Hiding of Declarations:                Warning Message Control.
                                                               (line  473)
  * HT:                                    Source Representation.
--- 23337,23349 ----
  * gnatprep:                              Preprocessing.      (line   17)
  * gnatprep <1>:                          Preprocessing with gnatprep.
                                                               (line    6)
  * GNU make:                              Using the GNU make Utility.
                                                               (line    6)
  * GNU/Linux:                             Choosing the Scheduling Policy.
                                                               (line   38)
  * GPR_PROJECT_PATH:                      Installing a library.
                                                               (line    6)
+ * gprof:                                 Profiling.          (line    9)
  * Hiding of Declarations:                Warning Message Control.
                                                               (line  473)
  * HT:                                    Source Representation.
*************** Index
*** 23435,23443 ****
                                                               (line  211)
  * No information messages for why package spec needs body: Warning Message Control.
                                                               (line 1259)
- * non-symbolic:                          Stack Traceback.    (line   21)
  * No_Strict_Aliasing:                    Optimization and Strict Aliasing.
                                                               (line    6)
  * obsolescent:                           Warning Message Control.
                                                               (line  545)
  * Obsolescent features:                  Warning Message Control.
--- 23435,23443 ----
                                                               (line  211)
  * No information messages for why package spec needs body: Warning Message Control.
                                                               (line 1259)
  * No_Strict_Aliasing:                    Optimization and Strict Aliasing.
                                                               (line    6)
+ * non-symbolic:                          Stack Traceback.    (line   21)
  * obsolescent:                           Warning Message Control.
                                                               (line  545)
  * Obsolescent features:                  Warning Message Control.
*************** Index
*** 23715,23721 ****
  * Validity Checking:                     Validity Checking.  (line    6)
  * varargs function interfaces:           Calling Conventions.
                                                               (line   64)
! * Version skew (avoided by ‘‘gnatmake‘‘): Running a Simple Ada Program.
                                                               (line   58)
  * Volatile parameter:                    The Volatile Parameter.
                                                               (line    6)
--- 23715,23721 ----
  * Validity Checking:                     Validity Checking.  (line    6)
  * varargs function interfaces:           Calling Conventions.
                                                               (line   64)
! * Version skew (avoided by ''gnatmake''): Running a Simple Ada Program.
                                                               (line   58)
  * Volatile parameter:                    The Volatile Parameter.
                                                               (line    6)
*************** Index
*** 23770,25244 ****
                                                               (line   40)
  * Zero-Cost Exceptions:                  Run-Time Libraries. (line   13)
  
!                                                              
  
  
  
  Tag Table:
! Node: Top350
! Ref: gnat_ugn doc634
! Ref: 0634
! Node: About This Guide12306
! Ref: gnat_ugn/about_this_guide doc12410
! Ref: 212410
! Ref: gnat_ugn/about_this_guide about-this-guide12410
! Ref: 312410
! Ref: gnat_ugn/about_this_guide gnat-user-s-guide-for-native-platforms12410
! Ref: 412410
! Ref: gnat_ugn/about_this_guide id112410
! Ref: 512410
! Node: What This Guide Contains13235
! Ref: gnat_ugn/about_this_guide what-this-guide-contains13369
! Ref: 713369
! Node: What You Should Know before Reading This Guide14809
! Ref: gnat_ugn/about_this_guide what-you-should-know-before-reading-this-guide14971
! Ref: 1114971
! Node: Related Information15323
! Ref: gnat_ugn/about_this_guide related-information15472
! Ref: 1215472
! Node: Conventions16358
! Ref: gnat_ugn/about_this_guide conventions16452
! Ref: 1316452
! Node: Getting Started with GNAT17276
! Ref: gnat_ugn/getting_started_with_gnat doc17403
! Ref: 1417403
! Ref: gnat_ugn/getting_started_with_gnat getting-started-with-gnat17403
! Ref: 817403
! Ref: gnat_ugn/getting_started_with_gnat id117403
! Ref: 1517403
! Node: System Requirements18049
! Ref: gnat_ugn/getting_started_with_gnat id218153
! Ref: 1618153
! Ref: gnat_ugn/getting_started_with_gnat system-requirements18153
! Ref: 1718153
! Node: Running GNAT19600
! Ref: gnat_ugn/getting_started_with_gnat id319741
! Ref: 1819741
! Ref: gnat_ugn/getting_started_with_gnat running-gnat19741
! Ref: 1919741
! Node: Running a Simple Ada Program20239
! Ref: gnat_ugn/getting_started_with_gnat id420398
! Ref: 1a20398
! Ref: gnat_ugn/getting_started_with_gnat running-a-simple-ada-program20398
! Ref: 1b20398
! Node: Running a Program with Multiple Units23375
! Ref: gnat_ugn/getting_started_with_gnat id523513
! Ref: 1e23513
! Ref: gnat_ugn/getting_started_with_gnat running-a-program-with-multiple-units23513
! Ref: 1f23513
! Node: The GNAT Compilation Model25122
! Ref: gnat_ugn/the_gnat_compilation_model doc25271
! Ref: 2025271
! Ref: gnat_ugn/the_gnat_compilation_model id125271
! Ref: 2125271
! Ref: gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model25271
! Ref: 925271
! Node: Source Representation26689
! Ref: gnat_ugn/the_gnat_compilation_model id226815
! Ref: 2f26815
! Ref: gnat_ugn/the_gnat_compilation_model source-representation26815
! Ref: 2226815
! Node: Foreign Language Representation29279
! Ref: gnat_ugn/the_gnat_compilation_model foreign-language-representation29446
! Ref: 2329446
! Ref: gnat_ugn/the_gnat_compilation_model id329446
! Ref: 3029446
! Node: Latin-129819
! Ref: gnat_ugn/the_gnat_compilation_model id429922
! Ref: 3229922
! Ref: gnat_ugn/the_gnat_compilation_model latin-129922
! Ref: 3329922
! Node: Other 8-Bit Codes30710
! Ref: gnat_ugn/the_gnat_compilation_model id530846
! Ref: 3430846
! Ref: gnat_ugn/the_gnat_compilation_model other-8-bit-codes30846
! Ref: 3530846
! Node: Wide_Character Encodings33070
! Ref: gnat_ugn/the_gnat_compilation_model id633228
! Ref: 3633228
! Ref: gnat_ugn/the_gnat_compilation_model wide-character-encodings33228
! Ref: 3733228
! Node: Wide_Wide_Character Encodings37068
! Ref: gnat_ugn/the_gnat_compilation_model id737200
! Ref: 3837200
! Ref: gnat_ugn/the_gnat_compilation_model wide-wide-character-encodings37200
! Ref: 3937200
! Node: File Naming Topics and Utilities38928
! Ref: gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities39095
! Ref: 2439095
! Ref: gnat_ugn/the_gnat_compilation_model id839095
! Ref: 3a39095
! Node: File Naming Rules39604
! Ref: gnat_ugn/the_gnat_compilation_model file-naming-rules39723
! Ref: 3b39723
! Ref: gnat_ugn/the_gnat_compilation_model id939723
! Ref: 3c39723
! Node: Using Other File Names43254
! Ref: gnat_ugn/the_gnat_compilation_model id1043413
! Ref: 3e43413
! Ref: gnat_ugn/the_gnat_compilation_model using-other-file-names43413
! Ref: 1c43413
! Node: Alternative File Naming Schemes45661
! Ref: gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes45859
! Ref: 4045859
! Ref: gnat_ugn/the_gnat_compilation_model id1145859
! Ref: 4145859
! Node: Handling Arbitrary File Naming Conventions with gnatname51001
! Ref: gnat_ugn/the_gnat_compilation_model handling-arbitrary-file-naming-conventions-with-gnatname51208
! Ref: 4251208
! Ref: gnat_ugn/the_gnat_compilation_model id1251208
! Ref: 4351208
! Node: Arbitrary File Naming Conventions51469
! Ref: gnat_ugn/the_gnat_compilation_model arbitrary-file-naming-conventions51622
! Ref: 4451622
! Ref: gnat_ugn/the_gnat_compilation_model id1351622
! Ref: 4551622
! Node: Running gnatname52762
! Ref: gnat_ugn/the_gnat_compilation_model id1452945
! Ref: 4652945
! Ref: gnat_ugn/the_gnat_compilation_model running-gnatname52945
! Ref: 4752945
! Node: Switches for gnatname54811
! Ref: gnat_ugn/the_gnat_compilation_model id1554987
! Ref: 4854987
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatname54987
! Ref: 4954987
! Node: Examples of gnatname Usage59785
! Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatname-usage59936
! Ref: 4a59936
! Ref: gnat_ugn/the_gnat_compilation_model id1659936
! Ref: 4b59936
! Node: File Name Krunching with gnatkr60631
! Ref: gnat_ugn/the_gnat_compilation_model file-name-krunching-with-gnatkr60835
! Ref: 4c60835
! Ref: gnat_ugn/the_gnat_compilation_model id1760835
! Ref: 4d60835
! Node: About gnatkr61296
! Ref: gnat_ugn/the_gnat_compilation_model about-gnatkr61399
! Ref: 4e61399
! Ref: gnat_ugn/the_gnat_compilation_model id1861399
! Ref: 4f61399
! Node: Using gnatkr62380
! Ref: gnat_ugn/the_gnat_compilation_model id1962508
! Ref: 5062508
! Ref: gnat_ugn/the_gnat_compilation_model using-gnatkr62508
! Ref: 3d62508
! Node: Krunching Method64032
! Ref: gnat_ugn/the_gnat_compilation_model id2064172
! Ref: 5164172
! Ref: gnat_ugn/the_gnat_compilation_model krunching-method64172
! Ref: 5264172
! Node: Examples of gnatkr Usage67660
! Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage67779
! Ref: 5367779
! Ref: gnat_ugn/the_gnat_compilation_model id2167779
! Ref: 5467779
! Node: Renaming Files with gnatchop68226
! Ref: gnat_ugn/the_gnat_compilation_model id2268365
! Ref: 5568365
! Ref: gnat_ugn/the_gnat_compilation_model renaming-files-with-gnatchop68365
! Ref: 1d68365
! Node: Handling Files with Multiple Units68830
! Ref: gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units68978
! Ref: 5668978
! Ref: gnat_ugn/the_gnat_compilation_model id2368978
! Ref: 5768978
! Node: Operating gnatchop in Compilation Mode70214
! Ref: gnat_ugn/the_gnat_compilation_model id2470396
! Ref: 5870396
! Ref: gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode70396
! Ref: 5970396
! Node: Command Line for gnatchop73544
! Ref: gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop73713
! Ref: 5a73713
! Ref: gnat_ugn/the_gnat_compilation_model id2573713
! Ref: 5b73713
! Node: Switches for gnatchop75534
! Ref: gnat_ugn/the_gnat_compilation_model id2675691
! Ref: 5c75691
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatchop75691
! Ref: 5d75691
! Node: Examples of gnatchop Usage79714
! Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage79837
! Ref: 5e79837
! Ref: gnat_ugn/the_gnat_compilation_model id2779837
! Ref: 5f79837
! Node: Configuration Pragmas81077
! Ref: gnat_ugn/the_gnat_compilation_model configuration-pragmas81236
! Ref: 2581236
! Ref: gnat_ugn/the_gnat_compilation_model id2881236
! Ref: 6081236
! Node: Handling of Configuration Pragmas83509
! Ref: gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas83642
! Ref: 3f83642
! Ref: gnat_ugn/the_gnat_compilation_model id2983642
! Ref: 6183642
! Node: The Configuration Pragmas Files85615
! Ref: gnat_ugn/the_gnat_compilation_model id3085748
! Ref: 6285748
! Ref: gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files85748
! Ref: 6385748
! Node: Generating Object Files87944
! Ref: gnat_ugn/the_gnat_compilation_model generating-object-files88090
! Ref: 2688090
! Ref: gnat_ugn/the_gnat_compilation_model id3188090
! Ref: 6488090
! Node: Source Dependencies90664
! Ref: gnat_ugn/the_gnat_compilation_model id3290822
! Ref: 6590822
! Ref: gnat_ugn/the_gnat_compilation_model source-dependencies90822
! Ref: 2790822
! Node: The Ada Library Information Files94518
! Ref: gnat_ugn/the_gnat_compilation_model id3394675
! Ref: 6694675
! Ref: gnat_ugn/the_gnat_compilation_model the-ada-library-information-files94675
! Ref: 2894675
! Node: Binding an Ada Program96696
! Ref: gnat_ugn/the_gnat_compilation_model binding-an-ada-program96852
! Ref: 2996852
! Ref: gnat_ugn/the_gnat_compilation_model id3496852
! Ref: 6796852
! Node: GNAT and Libraries98548
! Ref: gnat_ugn/the_gnat_compilation_model gnat-and-libraries98694
! Ref: 2a98694
! Ref: gnat_ugn/the_gnat_compilation_model id3598694
! Ref: 6898694
! Node: Introduction to Libraries in GNAT99180
! Ref: gnat_ugn/the_gnat_compilation_model id3699300
! Ref: 6999300
! Ref: gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat99300
! Ref: 6a99300
! Node: General Ada Libraries101445
! Ref: gnat_ugn/the_gnat_compilation_model general-ada-libraries101599
! Ref: 6c101599
! Ref: gnat_ugn/the_gnat_compilation_model id37101599
! Ref: 6d101599
! Node: Building a library101734
! Ref: gnat_ugn/the_gnat_compilation_model building-a-library101841
! Ref: 6e101841
! Ref: gnat_ugn/the_gnat_compilation_model id38101841
! Ref: 6f101841
! Node: Installing a library105725
! Ref: gnat_ugn/the_gnat_compilation_model id39105856
! Ref: 71105856
! Ref: gnat_ugn/the_gnat_compilation_model installing-a-library105856
! Ref: 72105856
! Node: Using a library108375
! Ref: gnat_ugn/the_gnat_compilation_model id40108479
! Ref: 74108479
! Ref: gnat_ugn/the_gnat_compilation_model using-a-library108479
! Ref: 75108479
! Node: Stand-alone Ada Libraries111057
! Ref: gnat_ugn/the_gnat_compilation_model id41111214
! Ref: 77111214
! Ref: gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries111214
! Ref: 6b111214
! Node: Introduction to Stand-alone Libraries111475
! Ref: gnat_ugn/the_gnat_compilation_model id42111615
! Ref: 78111615
! Ref: gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries111615
! Ref: 79111615
! Node: Building a Stand-alone Library113237
! Ref: gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library113448
! Ref: 7a113448
! Ref: gnat_ugn/the_gnat_compilation_model id43113448
! Ref: 7b113448
! Node: Creating a Stand-alone Library to be used in a non-Ada context118306
! Ref: gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context118517
! Ref: 7c118517
! Ref: gnat_ugn/the_gnat_compilation_model id44118517
! Ref: 7d118517
! Node: Restrictions in Stand-alone Libraries121431
! Ref: gnat_ugn/the_gnat_compilation_model id45121603
! Ref: 7f121603
! Ref: gnat_ugn/the_gnat_compilation_model restrictions-in-stand-alone-libraries121603
! Ref: 80121603
! Node: Rebuilding the GNAT Run-Time Library122926
! Ref: gnat_ugn/the_gnat_compilation_model id46123053
! Ref: 81123053
! Ref: gnat_ugn/the_gnat_compilation_model rebuilding-the-gnat-run-time-library123053
! Ref: 82123053
! Node: Conditional Compilation123895
! Ref: gnat_ugn/the_gnat_compilation_model conditional-compilation124045
! Ref: 2b124045
! Ref: gnat_ugn/the_gnat_compilation_model id47124045
! Ref: 83124045
! Node: Modeling Conditional Compilation in Ada124351
! Ref: gnat_ugn/the_gnat_compilation_model id48124488
! Ref: 84124488
! Ref: gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada124488
! Ref: 85124488
! Node: Use of Boolean Constants126048
! Ref: gnat_ugn/the_gnat_compilation_model id49126185
! Ref: 86126185
! Ref: gnat_ugn/the_gnat_compilation_model use-of-boolean-constants126185
! Ref: 87126185
! Node: Debugging - A Special Case127498
! Ref: gnat_ugn/the_gnat_compilation_model debugging-a-special-case127673
! Ref: 88127673
! Ref: gnat_ugn/the_gnat_compilation_model id50127673
! Ref: 89127673
! Node: Conditionalizing Declarations131180
! Ref: gnat_ugn/the_gnat_compilation_model conditionalizing-declarations131365
! Ref: 8a131365
! Ref: gnat_ugn/the_gnat_compilation_model id51131365
! Ref: 8b131365
! Node: Use of Alternative Implementations133093
! Ref: gnat_ugn/the_gnat_compilation_model id52133265
! Ref: 8c133265
! Ref: gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations133265
! Ref: 8d133265
! Node: Preprocessing137461
! Ref: gnat_ugn/the_gnat_compilation_model id53137595
! Ref: 8e137595
! Ref: gnat_ugn/the_gnat_compilation_model preprocessing137595
! Ref: 8f137595
! Node: Preprocessing with gnatprep139277
! Ref: gnat_ugn/the_gnat_compilation_model id54139447
! Ref: 92139447
! Ref: gnat_ugn/the_gnat_compilation_model preprocessing-with-gnatprep139447
! Ref: 90139447
! Node: Preprocessing Symbols139966
! Ref: gnat_ugn/the_gnat_compilation_model id55140076
! Ref: 93140076
! Ref: gnat_ugn/the_gnat_compilation_model preprocessing-symbols140076
! Ref: 94140076
! Node: Using gnatprep140446
! Ref: gnat_ugn/the_gnat_compilation_model id56140586
! Ref: 95140586
! Ref: gnat_ugn/the_gnat_compilation_model using-gnatprep140586
! Ref: 96140586
! Node: Switches for gnatprep141496
! Ref: gnat_ugn/the_gnat_compilation_model id57141639
! Ref: 97141639
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatprep141639
! Ref: 98141639
! Node: Form of Definitions File144754
! Ref: gnat_ugn/the_gnat_compilation_model form-of-definitions-file144914
! Ref: 99144914
! Ref: gnat_ugn/the_gnat_compilation_model id58144914
! Ref: 9a144914
! Node: Form of Input Text for gnatprep145476
! Ref: gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep145606
! Ref: 9b145606
! Ref: gnat_ugn/the_gnat_compilation_model id59145606
! Ref: 9c145606
! Node: Integrated Preprocessing150169
! Ref: gnat_ugn/the_gnat_compilation_model id60150291
! Ref: 9d150291
! Ref: gnat_ugn/the_gnat_compilation_model integrated-preprocessing150291
! Ref: 91150291
! Node: Mixed Language Programming158683
! Ref: gnat_ugn/the_gnat_compilation_model id61158848
! Ref: 9e158848
! Ref: gnat_ugn/the_gnat_compilation_model mixed-language-programming158848
! Ref: 2c158848
! Node: Interfacing to C159244
! Ref: gnat_ugn/the_gnat_compilation_model id62159353
! Ref: 9f159353
! Ref: gnat_ugn/the_gnat_compilation_model interfacing-to-c159353
! Ref: a0159353
! Node: Calling Conventions164563
! Ref: gnat_ugn/the_gnat_compilation_model calling-conventions164716
! Ref: a1164716
! Ref: gnat_ugn/the_gnat_compilation_model id63164716
! Ref: a2164716
! Node: Building Mixed Ada and C++ Programs172568
! Ref: gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs172728
! Ref: a3172728
! Ref: gnat_ugn/the_gnat_compilation_model id64172728
! Ref: a4172728
! Node: Interfacing to C++173207
! Ref: gnat_ugn/the_gnat_compilation_model id65173341
! Ref: a5173341
! Ref: gnat_ugn/the_gnat_compilation_model id66173341
! Ref: a6173341
! Node: Linking a Mixed C++ & Ada Program174454
! Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-ada-program174613
! Ref: a8174613
! Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-and-ada-program174613
! Ref: a9174613
! Node: A Simple Example178644
! Ref: gnat_ugn/the_gnat_compilation_model a-simple-example178818
! Ref: aa178818
! Ref: gnat_ugn/the_gnat_compilation_model id67178818
! Ref: ab178818
! Node: Interfacing with C++ constructors181537
! Ref: gnat_ugn/the_gnat_compilation_model id68181717
! Ref: ac181717
! Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-constructors181717
! Ref: ad181717
! Node: Interfacing with C++ at the Class Level188456
! Ref: gnat_ugn/the_gnat_compilation_model id69188611
! Ref: af188611
! Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level188611
! Ref: ae188611
! Node: Partition-Wide Settings197308
! Ref: gnat_ugn/the_gnat_compilation_model id70197494
! Ref: b0197494
! Ref: gnat_ugn/the_gnat_compilation_model partition-wide-settings197494
! Ref: b1197494
! Node: Generating Ada Bindings for C and C++ headers199467
! Ref: gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers199661
! Ref: a7199661
! Ref: gnat_ugn/the_gnat_compilation_model id71199661
! Ref: b2199661
! Node: Running the Binding Generator200948
! Ref: gnat_ugn/the_gnat_compilation_model id72201105
! Ref: b3201105
! Ref: gnat_ugn/the_gnat_compilation_model running-the-binding-generator201105
! Ref: b4201105
! Node: Generating Bindings for C++ Headers203684
! Ref: gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers203858
! Ref: b5203858
! Ref: gnat_ugn/the_gnat_compilation_model id73203858
! Ref: b6203858
! Node: Switches206787
! Ref: gnat_ugn/the_gnat_compilation_model switches206923
! Ref: b7206923
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-ada-binding-generation206923
! Ref: b8206923
! Node: Generating C Headers for Ada Specifications207494
! Ref: gnat_ugn/the_gnat_compilation_model generating-c-headers-for-ada-specifications207656
! Ref: b9207656
! Ref: gnat_ugn/the_gnat_compilation_model id74207656
! Ref: ba207656
! Node: Running the C Header Generator208159
! Ref: gnat_ugn/the_gnat_compilation_model running-the-c-header-generator208271
! Ref: bb208271
! Node: GNAT and Other Compilation Models210051
! Ref: gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models210229
! Ref: 2d210229
! Ref: gnat_ugn/the_gnat_compilation_model id75210229
! Ref: bc210229
! Node: Comparison between GNAT and C/C++ Compilation Models210663
! Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-c-c-compilation-models210855
! Ref: bd210855
! Ref: gnat_ugn/the_gnat_compilation_model id76210855
! Ref: be210855
! Node: Comparison between GNAT and Conventional Ada Library Models212380
! Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-conventional-ada-library-models212572
! Ref: bf212572
! Ref: gnat_ugn/the_gnat_compilation_model id77212572
! Ref: c0212572
! Node: Using GNAT Files with External Tools214959
! Ref: gnat_ugn/the_gnat_compilation_model id78215102
! Ref: c1215102
! Ref: gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools215102
! Ref: 2e215102
! Node: Using Other Utility Programs with GNAT215398
! Ref: gnat_ugn/the_gnat_compilation_model id79215561
! Ref: c2215561
! Ref: gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat215561
! Ref: c3215561
! Node: The External Symbol Naming Scheme of GNAT216120
! Ref: gnat_ugn/the_gnat_compilation_model id80216283
! Ref: c4216283
! Ref: gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat216283
! Ref: c5216283
! Node: Building Executable Programs with GNAT218193
! Ref: gnat_ugn/building_executable_programs_with_gnat doc218338
! Ref: c6218338
! Ref: gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat218338
! Ref: a218338
! Ref: gnat_ugn/building_executable_programs_with_gnat id1218338
! Ref: c7218338
! Node: Building with gnatmake219253
! Ref: gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake219379
! Ref: cc219379
! Ref: gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake219379
! Ref: c8219379
! Node: Running gnatmake221008
! Ref: gnat_ugn/building_executable_programs_with_gnat id2221115
! Ref: cd221115
! Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatmake221115
! Ref: ce221115
! Node: Switches for gnatmake222589
! Ref: gnat_ugn/building_executable_programs_with_gnat id3222731
! Ref: cf222731
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake222731
! Ref: d0222731
! Node: Mode Switches for gnatmake244081
! Ref: gnat_ugn/building_executable_programs_with_gnat id4244232
! Ref: d2244232
! Ref: gnat_ugn/building_executable_programs_with_gnat mode-switches-for-gnatmake244232
! Ref: d3244232
! Node: Notes on the Command Line245527
! Ref: gnat_ugn/building_executable_programs_with_gnat id5245675
! Ref: d4245675
! Ref: gnat_ugn/building_executable_programs_with_gnat notes-on-the-command-line245675
! Ref: d5245675
! Node: How gnatmake Works248160
! Ref: gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works248308
! Ref: d6248308
! Ref: gnat_ugn/building_executable_programs_with_gnat id6248308
! Ref: d7248308
! Node: Examples of gnatmake Usage250663
! Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatmake-usage250777
! Ref: d8250777
! Ref: gnat_ugn/building_executable_programs_with_gnat id7250777
! Ref: d9250777
! Node: Compiling with gcc251872
! Ref: gnat_ugn/building_executable_programs_with_gnat compiling-with-gcc252024
! Ref: c9252024
! Ref: gnat_ugn/building_executable_programs_with_gnat id8252024
! Ref: da252024
! Node: Compiling Programs252425
! Ref: gnat_ugn/building_executable_programs_with_gnat compiling-programs252550
! Ref: db252550
! Ref: gnat_ugn/building_executable_programs_with_gnat id9252550
! Ref: dc252550
! Node: Search Paths and the Run-Time Library RTL255966
! Ref: gnat_ugn/building_executable_programs_with_gnat id10256127
! Ref: de256127
! Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-and-the-run-time-library-rtl256127
! Ref: 73256127
! Node: Order of Compilation Issues259569
! Ref: gnat_ugn/building_executable_programs_with_gnat id11259720
! Ref: df259720
! Ref: gnat_ugn/building_executable_programs_with_gnat order-of-compilation-issues259720
! Ref: e0259720
! Node: Examples261293
! Ref: gnat_ugn/building_executable_programs_with_gnat examples261394
! Ref: e1261394
! Ref: gnat_ugn/building_executable_programs_with_gnat id12261394
! Ref: e2261394
! Node: Compiler Switches261876
! Ref: gnat_ugn/building_executable_programs_with_gnat compiler-switches262021
! Ref: e3262021
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gcc262021
! Ref: dd262021
! Node: Alphabetical List of All Switches263175
! Ref: gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches263305
! Ref: e4263305
! Ref: gnat_ugn/building_executable_programs_with_gnat id13263305
! Ref: e5263305
! Node: Output and Error Message Control300131
! Ref: gnat_ugn/building_executable_programs_with_gnat id14300293
! Ref: f0300293
! Ref: gnat_ugn/building_executable_programs_with_gnat output-and-error-message-control300293
! Ref: f1300293
! Node: Warning Message Control308369
! Ref: gnat_ugn/building_executable_programs_with_gnat id15308529
! Ref: f2308529
! Ref: gnat_ugn/building_executable_programs_with_gnat warning-message-control308529
! Ref: ed308529
! Node: Debugging and Assertion Control360250
! Ref: gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control360395
! Ref: f3360395
! Ref: gnat_ugn/building_executable_programs_with_gnat id16360395
! Ref: f4360395
! Node: Validity Checking363842
! Ref: gnat_ugn/building_executable_programs_with_gnat id17363978
! Ref: f5363978
! Ref: gnat_ugn/building_executable_programs_with_gnat validity-checking363978
! Ref: e9363978
! Node: Style Checking374070
! Ref: gnat_ugn/building_executable_programs_with_gnat id18374190
! Ref: f6374190
! Ref: gnat_ugn/building_executable_programs_with_gnat style-checking374190
! Ref: ee374190
! Node: Run-Time Checks392187
! Ref: gnat_ugn/building_executable_programs_with_gnat id19392319
! Ref: f7392319
! Ref: gnat_ugn/building_executable_programs_with_gnat run-time-checks392319
! Ref: ec392319
! Node: Using gcc for Syntax Checking399028
! Ref: gnat_ugn/building_executable_programs_with_gnat id20399177
! Ref: f8399177
! Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking399177
! Ref: f9399177
! Node: Using gcc for Semantic Checking400867
! Ref: gnat_ugn/building_executable_programs_with_gnat id21401036
! Ref: fa401036
! Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking401036
! Ref: fb401036
! Node: Compiling Different Versions of Ada402394
! Ref: gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada402555
! Ref: 6402555
! Ref: gnat_ugn/building_executable_programs_with_gnat id22402555
! Ref: fc402555
! Node: Character Set Control406820
! Ref: gnat_ugn/building_executable_programs_with_gnat character-set-control406969
! Ref: 31406969
! Ref: gnat_ugn/building_executable_programs_with_gnat id23406969
! Ref: fd406969
! Node: File Naming Control412355
! Ref: gnat_ugn/building_executable_programs_with_gnat file-naming-control412496
! Ref: fe412496
! Ref: gnat_ugn/building_executable_programs_with_gnat id24412496
! Ref: ff412496
! Node: Subprogram Inlining Control412904
! Ref: gnat_ugn/building_executable_programs_with_gnat id25413048
! Ref: 100413048
! Ref: gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control413048
! Ref: 101413048
! Node: Auxiliary Output Control414925
! Ref: gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control415067
! Ref: 103415067
! Ref: gnat_ugn/building_executable_programs_with_gnat id26415067
! Ref: 104415067
! Node: Debugging Control416244
! Ref: gnat_ugn/building_executable_programs_with_gnat debugging-control416385
! Ref: 105416385
! Ref: gnat_ugn/building_executable_programs_with_gnat id27416385
! Ref: 106416385
! Node: Exception Handling Control428239
! Ref: gnat_ugn/building_executable_programs_with_gnat exception-handling-control428386
! Ref: 107428386
! Ref: gnat_ugn/building_executable_programs_with_gnat id28428386
! Ref: 108428386
! Node: Units to Sources Mapping Files431063
! Ref: gnat_ugn/building_executable_programs_with_gnat id29431216
! Ref: 109431216
! Ref: gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files431216
! Ref: ea431216
! Node: Code Generation Control433155
! Ref: gnat_ugn/building_executable_programs_with_gnat code-generation-control433273
! Ref: 10a433273
! Ref: gnat_ugn/building_executable_programs_with_gnat id30433273
! Ref: 10b433273
! Node: Linker Switches434445
! Ref: gnat_ugn/building_executable_programs_with_gnat id31434593
! Ref: 10c434593
! Ref: gnat_ugn/building_executable_programs_with_gnat linker-switches434593
! Ref: 10d434593
! Node: Binding with gnatbind434955
! Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind435107
! Ref: ca435107
! Ref: gnat_ugn/building_executable_programs_with_gnat id32435107
! Ref: 10e435107
! Node: Running gnatbind436631
! Ref: gnat_ugn/building_executable_programs_with_gnat id33436737
! Ref: 10f436737
! Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatbind436737
! Ref: 110436737
! Node: Switches for gnatbind439769
! Ref: gnat_ugn/building_executable_programs_with_gnat id34439903
! Ref: 111439903
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind439903
! Ref: 112439903
! Node: Consistency-Checking Modes454028
! Ref: gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes454151
! Ref: 116454151
! Ref: gnat_ugn/building_executable_programs_with_gnat id35454151
! Ref: 117454151
! Node: Binder Error Message Control455970
! Ref: gnat_ugn/building_executable_programs_with_gnat binder-error-message-control456121
! Ref: 118456121
! Ref: gnat_ugn/building_executable_programs_with_gnat id36456121
! Ref: 119456121
! Node: Elaboration Control458365
! Ref: gnat_ugn/building_executable_programs_with_gnat elaboration-control458504
! Ref: 113458504
! Ref: gnat_ugn/building_executable_programs_with_gnat id37458504
! Ref: 11a458504
! Node: Output Control461806
! Ref: gnat_ugn/building_executable_programs_with_gnat id38461943
! Ref: 11b461943
! Ref: gnat_ugn/building_executable_programs_with_gnat output-control461943
! Ref: 11c461943
! Node: Dynamic Allocation Control463940
! Ref: gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control464092
! Ref: 114464092
! Ref: gnat_ugn/building_executable_programs_with_gnat id39464092
! Ref: 11d464092
! Node: Binding with Non-Ada Main Programs464713
! Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs464891
! Ref: 7e464891
! Ref: gnat_ugn/building_executable_programs_with_gnat id40464891
! Ref: 11e464891
! Node: Binding Programs with No Main Subprogram467905
! Ref: gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram468048
! Ref: 11f468048
! Ref: gnat_ugn/building_executable_programs_with_gnat id41468048
! Ref: 120468048
! Node: Command-Line Access468916
! Ref: gnat_ugn/building_executable_programs_with_gnat command-line-access469059
! Ref: 121469059
! Ref: gnat_ugn/building_executable_programs_with_gnat id42469059
! Ref: 122469059
! Node: Search Paths for gnatbind469977
! Ref: gnat_ugn/building_executable_programs_with_gnat id43470125
! Ref: 123470125
! Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind470125
! Ref: 76470125
! Node: Examples of gnatbind Usage472942
! Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage473062
! Ref: 124473062
! Ref: gnat_ugn/building_executable_programs_with_gnat id44473062
! Ref: 125473062
! Node: Linking with gnatlink473910
! Ref: gnat_ugn/building_executable_programs_with_gnat id45474073
! Ref: 126474073
! Ref: gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink474073
! Ref: cb474073
! Node: Running gnatlink474609
! Ref: gnat_ugn/building_executable_programs_with_gnat id46474715
! Ref: 127474715
! Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatlink474715
! Ref: 128474715
! Node: Switches for gnatlink477187
! Ref: gnat_ugn/building_executable_programs_with_gnat id47477293
! Ref: 12b477293
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink477293
! Ref: 12c477293
! Node: Using the GNU make Utility482003
! Ref: gnat_ugn/building_executable_programs_with_gnat id48482136
! Ref: 12d482136
! Ref: gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility482136
! Ref: 70482136
! Node: Using gnatmake in a Makefile482824
! Ref: gnat_ugn/building_executable_programs_with_gnat id49482970
! Ref: 12e482970
! Ref: gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile482970
! Ref: 12f482970
! Node: Automatically Creating a List of Directories486998
! Ref: gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories487189
! Ref: 130487189
! Ref: gnat_ugn/building_executable_programs_with_gnat id50487189
! Ref: 131487189
! Node: Generating the Command Line Switches490144
! Ref: gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches490344
! Ref: 132490344
! Ref: gnat_ugn/building_executable_programs_with_gnat id51490344
! Ref: 133490344
! Node: Overcoming Command Line Length Limits491122
! Ref: gnat_ugn/building_executable_programs_with_gnat id52491269
! Ref: 134491269
! Ref: gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits491269
! Ref: 135491269
! Node: GNAT Utility Programs493574
! Ref: gnat_ugn/gnat_utility_programs doc493719
! Ref: 136493719
! Ref: gnat_ugn/gnat_utility_programs gnat-utility-programs493719
! Ref: b493719
! Ref: gnat_ugn/gnat_utility_programs id1493719
! Ref: 137493719
! Node: The File Cleanup Utility gnatclean494286
! Ref: gnat_ugn/gnat_utility_programs id2494420
! Ref: 13a494420
! Ref: gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean494420
! Ref: 138494420
! Node: Running gnatclean494831
! Ref: gnat_ugn/gnat_utility_programs id3494952
! Ref: 13b494952
! Ref: gnat_ugn/gnat_utility_programs running-gnatclean494952
! Ref: 13c494952
! Node: Switches for gnatclean495601
! Ref: gnat_ugn/gnat_utility_programs id4495722
! Ref: 13d495722
! Ref: gnat_ugn/gnat_utility_programs switches-for-gnatclean495722
! Ref: 13e495722
! Node: The GNAT Library Browser gnatls498862
! Ref: gnat_ugn/gnat_utility_programs id5498996
! Ref: 13f498996
! Ref: gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls498996
! Ref: 139498996
! Node: Running gnatls499402
! Ref: gnat_ugn/gnat_utility_programs id6499514
! Ref: 140499514
! Ref: gnat_ugn/gnat_utility_programs running-gnatls499514
! Ref: 141499514
! Node: Switches for gnatls502023
! Ref: gnat_ugn/gnat_utility_programs id7502167
! Ref: 142502167
! Ref: gnat_ugn/gnat_utility_programs switches-for-gnatls502167
! Ref: 143502167
! Node: Example of gnatls Usage504625
! Ref: gnat_ugn/gnat_utility_programs example-of-gnatls-usage504746
! Ref: 144504746
! Ref: gnat_ugn/gnat_utility_programs id8504746
! Ref: 145504746
! Node: GNAT and Program Execution507149
! Ref: gnat_ugn/gnat_and_program_execution doc507285
! Ref: 146507285
! Ref: gnat_ugn/gnat_and_program_execution gnat-and-program-execution507285
! Ref: c507285
! Ref: gnat_ugn/gnat_and_program_execution id1507285
! Ref: 147507285
! Node: Running and Debugging Ada Programs507929
! Ref: gnat_ugn/gnat_and_program_execution id2508046
! Ref: 148508046
! Ref: gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs508046
! Ref: 14f508046
! Node: The GNAT Debugger GDB509416
! Ref: gnat_ugn/gnat_and_program_execution id3509530
! Ref: 150509530
! Ref: gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb509530
! Ref: 151509530
! Node: Running GDB512595
! Ref: gnat_ugn/gnat_and_program_execution id4512746
! Ref: 152512746
! Ref: gnat_ugn/gnat_and_program_execution running-gdb512746
! Ref: 153512746
! Node: Introduction to GDB Commands513539
! Ref: gnat_ugn/gnat_and_program_execution id5513690
! Ref: 154513690
! Ref: gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands513690
! Ref: 155513690
! Node: Using Ada Expressions519646
! Ref: gnat_ugn/gnat_and_program_execution id6519818
! Ref: 156519818
! Ref: gnat_ugn/gnat_and_program_execution using-ada-expressions519818
! Ref: 157519818
! Node: Calling User-Defined Subprograms520933
! Ref: gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms521113
! Ref: 158521113
! Ref: gnat_ugn/gnat_and_program_execution id7521113
! Ref: 159521113
! Node: Using the next Command in a Function523880
! Ref: gnat_ugn/gnat_and_program_execution id8524078
! Ref: 15a524078
! Ref: gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function524078
! Ref: 15b524078
! Node: Stopping When Ada Exceptions Are Raised525106
! Ref: gnat_ugn/gnat_and_program_execution id9525281
! Ref: 15c525281
! Ref: gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised525281
! Ref: 15d525281
! Node: Ada Tasks526324
! Ref: gnat_ugn/gnat_and_program_execution ada-tasks526486
! Ref: 15e526486
! Ref: gnat_ugn/gnat_and_program_execution id10526486
! Ref: 15f526486
! Node: Debugging Generic Units528730
! Ref: gnat_ugn/gnat_and_program_execution debugging-generic-units528884
! Ref: 160528884
! Ref: gnat_ugn/gnat_and_program_execution id11528884
! Ref: 161528884
! Node: Remote Debugging with gdbserver530202
! Ref: gnat_ugn/gnat_and_program_execution id12530396
! Ref: 162530396
! Ref: gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver530396
! Ref: 163530396
! Node: GNAT Abnormal Termination or Failure to Terminate532332
! Ref: gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate532543
! Ref: 164532543
! Ref: gnat_ugn/gnat_and_program_execution id13532543
! Ref: 165532543
! Node: Naming Conventions for GNAT Source Files535022
! Ref: gnat_ugn/gnat_and_program_execution id14535240
! Ref: 166535240
! Ref: gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files535240
! Ref: 167535240
! Node: Getting Internal Debugging Information537715
! Ref: gnat_ugn/gnat_and_program_execution getting-internal-debugging-information537899
! Ref: 168537899
! Ref: gnat_ugn/gnat_and_program_execution id15537899
! Ref: 169537899
! Node: Stack Traceback538933
! Ref: gnat_ugn/gnat_and_program_execution id16539113
! Ref: 16a539113
! Ref: gnat_ugn/gnat_and_program_execution stack-traceback539113
! Ref: 16b539113
! Node: Non-Symbolic Traceback540034
! Ref: gnat_ugn/gnat_and_program_execution id17540137
! Ref: 16c540137
! Ref: gnat_ugn/gnat_and_program_execution non-symbolic-traceback540137
! Ref: 16d540137
! Node: Symbolic Traceback549344
! Ref: gnat_ugn/gnat_and_program_execution id18549447
! Ref: 16e549447
! Ref: gnat_ugn/gnat_and_program_execution symbolic-traceback549447
! Ref: 16f549447
! Node: Pretty-Printers for the GNAT runtime552521
! Ref: gnat_ugn/gnat_and_program_execution id19552654
! Ref: 170552654
! Ref: gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime552654
! Ref: 171552654
! Ref: Pretty-Printers for the GNAT runtime-Footnote-1555295
! Ref: Pretty-Printers for the GNAT runtime-Footnote-2555383
! Node: Profiling555467
! Ref: gnat_ugn/gnat_and_program_execution id20555614
! Ref: 172555614
! Ref: gnat_ugn/gnat_and_program_execution profiling555614
! Ref: 149555614
! Node: Profiling an Ada Program with gprof555775
! Ref: gnat_ugn/gnat_and_program_execution id21555858
! Ref: 173555858
! Ref: gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof555858
! Ref: 174555858
! Node: Compilation for profiling557075
! Ref: gnat_ugn/gnat_and_program_execution compilation-for-profiling557200
! Ref: 175557200
! Ref: gnat_ugn/gnat_and_program_execution id22557200
! Ref: 176557200
! Node: Program execution557984
! Ref: gnat_ugn/gnat_and_program_execution id23558131
! Ref: 177558131
! Ref: gnat_ugn/gnat_and_program_execution program-execution558131
! Ref: 178558131
! Node: Running gprof558623
! Ref: gnat_ugn/gnat_and_program_execution id24558780
! Ref: 179558780
! Ref: gnat_ugn/gnat_and_program_execution running-gprof558780
! Ref: 17a558780
! Node: Interpretation of profiling results561488
! Ref: gnat_ugn/gnat_and_program_execution id25561619
! Ref: 17b561619
! Ref: gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results561619
! Ref: 17c561619
! Node: Improving Performance562294
! Ref: gnat_ugn/gnat_and_program_execution id26562438
! Ref: 14a562438
! Ref: gnat_ugn/gnat_and_program_execution improving-performance562438
! Ref: 17d562438
! Node: Performance Considerations562948
! Ref: gnat_ugn/gnat_and_program_execution id27563062
! Ref: 17e563062
! Ref: gnat_ugn/gnat_and_program_execution performance-considerations563062
! Ref: 17f563062
! Node: Controlling Run-Time Checks564231
! Ref: gnat_ugn/gnat_and_program_execution controlling-run-time-checks564351
! Ref: 180564351
! Ref: gnat_ugn/gnat_and_program_execution id28564351
! Ref: 181564351
! Node: Use of Restrictions565909
! Ref: gnat_ugn/gnat_and_program_execution id29566057
! Ref: 182566057
! Ref: gnat_ugn/gnat_and_program_execution use-of-restrictions566057
! Ref: 183566057
! Node: Optimization Levels567415
! Ref: gnat_ugn/gnat_and_program_execution id30567560
! Ref: 184567560
! Ref: gnat_ugn/gnat_and_program_execution optimization-levels567560
! Ref: ef567560
! Node: Debugging Optimized Code571427
! Ref: gnat_ugn/gnat_and_program_execution debugging-optimized-code571576
! Ref: 185571576
! Ref: gnat_ugn/gnat_and_program_execution id31571576
! Ref: 186571576
! Node: Inlining of Subprograms576528
! Ref: gnat_ugn/gnat_and_program_execution id32576683
! Ref: 187576683
! Ref: gnat_ugn/gnat_and_program_execution inlining-of-subprograms576683
! Ref: 102576683
! Node: Floating Point Operations581367
! Ref: gnat_ugn/gnat_and_program_execution floating-point-operations581520
! Ref: 188581520
! Ref: gnat_ugn/gnat_and_program_execution id33581520
! Ref: 189581520
! Node: Vectorization of loops583703
! Ref: gnat_ugn/gnat_and_program_execution id34583860
! Ref: 18a583860
! Ref: gnat_ugn/gnat_and_program_execution vectorization-of-loops583860
! Ref: 18b583860
! Node: Other Optimization Switches588488
! Ref: gnat_ugn/gnat_and_program_execution id35588652
! Ref: 18c588652
! Ref: gnat_ugn/gnat_and_program_execution other-optimization-switches588652
! Ref: 18d588652
! Node: Optimization and Strict Aliasing589357
! Ref: gnat_ugn/gnat_and_program_execution id36589533
! Ref: 18e589533
! Ref: gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing589533
! Ref: e6589533
! Node: Aliased Variables and Optimization598564
! Ref: gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization598746
! Ref: 18f598746
! Ref: gnat_ugn/gnat_and_program_execution id37598746
! Ref: 190598746
! Node: Atomic Variables and Optimization600738
! Ref: gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization600913
! Ref: 191600913
! Ref: gnat_ugn/gnat_and_program_execution id38600913
! Ref: 192600913
! Node: Passive Task Optimization603513
! Ref: gnat_ugn/gnat_and_program_execution id39603645
! Ref: 193603645
! Ref: gnat_ugn/gnat_and_program_execution passive-task-optimization603645
! Ref: 194603645
! Node: Text_IO Suggestions605620
! Ref: gnat_ugn/gnat_and_program_execution id40605811
! Ref: 195605811
! Ref: gnat_ugn/gnat_and_program_execution text-io-suggestions605811
! Ref: 196605811
! Node: Reducing Size of Executables with Unused Subprogram/Data Elimination606751
! Ref: gnat_ugn/gnat_and_program_execution id41606907
! Ref: 197606907
! Ref: gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination606907
! Ref: 198606907
! Node: About unused subprogram/data elimination607327
! Ref: gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination607502
! Ref: 199607502
! Ref: gnat_ugn/gnat_and_program_execution id42607502
! Ref: 19a607502
! Node: Compilation options608143
! Ref: gnat_ugn/gnat_and_program_execution compilation-options608372
! Ref: 19b608372
! Ref: gnat_ugn/gnat_and_program_execution id43608372
! Ref: 19c608372
! Node: Example of unused subprogram/data elimination609761
! Ref: gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination609941
! Ref: 19d609941
! Ref: gnat_ugn/gnat_and_program_execution id44609941
! Ref: 19e609941
! Node: Overflow Check Handling in GNAT611413
! Ref: gnat_ugn/gnat_and_program_execution id45611590
! Ref: 14b611590
! Ref: gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat611590
! Ref: 19f611590
! Node: Background611873
! Ref: gnat_ugn/gnat_and_program_execution background611993
! Ref: 1a0611993
! Ref: gnat_ugn/gnat_and_program_execution id46611993
! Ref: 1a1611993
! Node: Management of Overflows in GNAT615666
! Ref: gnat_ugn/gnat_and_program_execution id47615822
! Ref: 1a2615822
! Ref: gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat615822
! Ref: 1a3615822
! Node: Specifying the Desired Mode620838
! Ref: gnat_ugn/gnat_and_program_execution id48621000
! Ref: 1a4621000
! Ref: gnat_ugn/gnat_and_program_execution specifying-the-desired-mode621000
! Ref: eb621000
! Node: Default Settings624114
! Ref: gnat_ugn/gnat_and_program_execution default-settings624265
! Ref: 1a5624265
! Ref: gnat_ugn/gnat_and_program_execution id49624265
! Ref: 1a6624265
! Node: Implementation Notes624829
! Ref: gnat_ugn/gnat_and_program_execution id50624944
! Ref: 1a7624944
! Ref: gnat_ugn/gnat_and_program_execution implementation-notes624944
! Ref: 1a8624944
! Node: Performing Dimensionality Analysis in GNAT627085
! Ref: gnat_ugn/gnat_and_program_execution id51627265
! Ref: 14c627265
! Ref: gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat627265
! Ref: 1a9627265
! Node: Stack Related Facilities638902
! Ref: gnat_ugn/gnat_and_program_execution id52639075
! Ref: 14d639075
! Ref: gnat_ugn/gnat_and_program_execution stack-related-facilities639075
! Ref: 1aa639075
! Node: Stack Overflow Checking639399
! Ref: gnat_ugn/gnat_and_program_execution id53639521
! Ref: 1ab639521
! Ref: gnat_ugn/gnat_and_program_execution stack-overflow-checking639521
! Ref: e7639521
! Node: Static Stack Usage Analysis641161
! Ref: gnat_ugn/gnat_and_program_execution id54641320
! Ref: 1ac641320
! Ref: gnat_ugn/gnat_and_program_execution static-stack-usage-analysis641320
! Ref: e8641320
! Node: Dynamic Stack Usage Analysis642719
! Ref: gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis642846
! Ref: 115642846
! Ref: gnat_ugn/gnat_and_program_execution id55642846
! Ref: 1ad642846
! Node: Memory Management Issues644791
! Ref: gnat_ugn/gnat_and_program_execution id56644913
! Ref: 14e644913
! Ref: gnat_ugn/gnat_and_program_execution memory-management-issues644913
! Ref: 1ae644913
! Node: Some Useful Memory Pools645269
! Ref: gnat_ugn/gnat_and_program_execution id57645393
! Ref: 1af645393
! Ref: gnat_ugn/gnat_and_program_execution some-useful-memory-pools645393
! Ref: 1b0645393
! Node: The GNAT Debug Pool Facility648048
! Ref: gnat_ugn/gnat_and_program_execution id58648172
! Ref: 1b1648172
! Ref: gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility648172
! Ref: 1b2648172
! Node: Platform-Specific Information653189
! Ref: gnat_ugn/platform_specific_information doc653333
! Ref: 1b3653333
! Ref: gnat_ugn/platform_specific_information id1653333
! Ref: 1b4653333
! Ref: gnat_ugn/platform_specific_information platform-specific-information653333
! Ref: d653333
! Node: Run-Time Libraries653732
! Ref: gnat_ugn/platform_specific_information id2653856
! Ref: 1b5653856
! Ref: gnat_ugn/platform_specific_information run-time-libraries653856
! Ref: 1b6653856
! Node: Summary of Run-Time Configurations655148
! Ref: gnat_ugn/platform_specific_information id3655239
! Ref: 1b7655239
! Ref: gnat_ugn/platform_specific_information summary-of-run-time-configurations655239
! Ref: 1b8655239
! Node: Specifying a Run-Time Library656552
! Ref: gnat_ugn/platform_specific_information id4656701
! Ref: 1b9656701
! Ref: gnat_ugn/platform_specific_information specifying-a-run-time-library656701
! Ref: 1ba656701
! Ref: gnat_ugn/platform_specific_information choosing-the-scheduling-policy659005
! Ref: 1bb659005
! Node: Choosing the Scheduling Policy659052
! Ref: gnat_ugn/platform_specific_information id5659150
! Ref: 1bc659150
! Node: GNU/Linux Topics660634
! Ref: gnat_ugn/platform_specific_information gnu-linux-topics660789
! Ref: 1bd660789
! Ref: gnat_ugn/platform_specific_information id6660789
! Ref: 1be660789
! Node: Required Packages on GNU/Linux661112
! Ref: gnat_ugn/platform_specific_information id7661269
! Ref: 1bf661269
! Ref: gnat_ugn/platform_specific_information required-packages-on-gnu-linux661269
! Ref: 1c0661269
! Node: Position Independent Executable PIE Enabled by Default on Linux662019
! Ref: gnat_ugn/platform_specific_information pie-enabled-by-default-on-linux662208
! Ref: 1c1662208
! Ref: gnat_ugn/platform_specific_information position-independent-executable-pie-enabled-by-default-on-linux662208
! Ref: 1c2662208
! Node: A GNU/Linux Debug Quirk664209
! Ref: gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk664359
! Ref: 1c3664359
! Ref: gnat_ugn/platform_specific_information id8664359
! Ref: 1c4664359
! Node: Microsoft Windows Topics665110
! Ref: gnat_ugn/platform_specific_information id9665249
! Ref: 1c5665249
! Ref: gnat_ugn/platform_specific_information microsoft-windows-topics665249
! Ref: 1c6665249
! Node: Using GNAT on Windows665670
! Ref: gnat_ugn/platform_specific_information id10665799
! Ref: 1c7665799
! Ref: gnat_ugn/platform_specific_information using-gnat-on-windows665799
! Ref: 1c8665799
! Node: Using a network installation of GNAT668618
! Ref: gnat_ugn/platform_specific_information id11668786
! Ref: 1c9668786
! Ref: gnat_ugn/platform_specific_information using-a-network-installation-of-gnat668786
! Ref: 1ca668786
! Node: CONSOLE and WINDOWS subsystems669687
! Ref: gnat_ugn/platform_specific_information console-and-windows-subsystems669849
! Ref: 1cb669849
! Ref: gnat_ugn/platform_specific_information id12669849
! Ref: 1cc669849
! Node: Temporary Files670362
! Ref: gnat_ugn/platform_specific_information id13670529
! Ref: 1cd670529
! Ref: gnat_ugn/platform_specific_information temporary-files670529
! Ref: 1ce670529
! Node: Disabling Command Line Argument Expansion671205
! Ref: gnat_ugn/platform_specific_information disabling-command-line-argument-expansion671365
! Ref: 1cf671365
! Node: Windows Socket Timeouts672987
! Ref: gnat_ugn/platform_specific_information windows-socket-timeouts673169
! Ref: 1d0673169
! Node: Mixed-Language Programming on Windows675395
! Ref: gnat_ugn/platform_specific_information id14675560
! Ref: 1d1675560
! Ref: gnat_ugn/platform_specific_information mixed-language-programming-on-windows675560
! Ref: 1d2675560
! Node: Windows Calling Conventions678107
! Ref: gnat_ugn/platform_specific_information id15678262
! Ref: 1d5678262
! Ref: gnat_ugn/platform_specific_information windows-calling-conventions678262
! Ref: 1d6678262
! Node: C Calling Convention679192
! Ref: gnat_ugn/platform_specific_information c-calling-convention679313
! Ref: 1d7679313
! Ref: gnat_ugn/platform_specific_information id16679313
! Ref: 1d8679313
! Node: Stdcall Calling Convention680793
! Ref: gnat_ugn/platform_specific_information id17680947
! Ref: 1da680947
! Ref: gnat_ugn/platform_specific_information stdcall-calling-convention680947
! Ref: 1d9680947
! Node: Win32 Calling Convention683736
! Ref: gnat_ugn/platform_specific_information id18683892
! Ref: 1db683892
! Ref: gnat_ugn/platform_specific_information win32-calling-convention683892
! Ref: 1dc683892
! Node: DLL Calling Convention684085
! Ref: gnat_ugn/platform_specific_information dll-calling-convention684206
! Ref: 1dd684206
! Ref: gnat_ugn/platform_specific_information id19684206
! Ref: 1de684206
! Node: Introduction to Dynamic Link Libraries DLLs684395
! Ref: gnat_ugn/platform_specific_information id20684579
! Ref: 1df684579
! Ref: gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls684579
! Ref: 1e0684579
! Node: Using DLLs with GNAT687976
! Ref: gnat_ugn/platform_specific_information id21688170
! Ref: 1e2688170
! Ref: gnat_ugn/platform_specific_information using-dlls-with-gnat688170
! Ref: 1d3688170
! Node: Creating an Ada Spec for the DLL Services690160
! Ref: gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services690295
! Ref: 1e3690295
! Ref: gnat_ugn/platform_specific_information id22690295
! Ref: 1e4690295
! Node: Creating an Import Library691259
! Ref: gnat_ugn/platform_specific_information creating-an-import-library691394
! Ref: 1e5691394
! Ref: gnat_ugn/platform_specific_information id23691394
! Ref: 1e6691394
! Ref: gnat_ugn/platform_specific_information the-definition-file691820
! Ref: 1e1691820
! Ref: gnat_ugn/platform_specific_information create-def-file-automatically693129
! Ref: 1e7693129
! Ref: gnat_ugn/platform_specific_information gnat-style-import-library694283
! Ref: 1e8694283
! Ref: gnat_ugn/platform_specific_information msvs-style-import-library695213
! Ref: 1ea695213
! Node: Building DLLs with GNAT Project files695934
! Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files696108
! Ref: 1d4696108
! Ref: gnat_ugn/platform_specific_information id24696108
! Ref: 1eb696108
! Node: Building DLLs with GNAT696619
! Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat696799
! Ref: 1ec696799
! Ref: gnat_ugn/platform_specific_information id25696799
! Ref: 1ed696799
! Node: Building DLLs with gnatdll698707
! Ref: gnat_ugn/platform_specific_information building-dlls-with-gnatdll698875
! Ref: 1ee698875
! Ref: gnat_ugn/platform_specific_information id26698875
! Ref: 1ef698875
! Node: Limitations When Using Ada DLLs from Ada701372
! Ref: gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada701508
! Ref: 1f3701508
! Node: Exporting Ada Entities702419
! Ref: gnat_ugn/platform_specific_information exporting-ada-entities702588
! Ref: 1f0702588
! Ref: gnat_ugn/platform_specific_information id27702588
! Ref: 1f4702588
! Node: Ada DLLs and Elaboration705477
! Ref: gnat_ugn/platform_specific_information ada-dlls-and-elaboration705597
! Ref: 1f1705597
! Ref: gnat_ugn/platform_specific_information id28705597
! Ref: 1f6705597
! Node: Ada DLLs and Finalization707035
! Ref: gnat_ugn/platform_specific_information ada-dlls-and-finalization707208
! Ref: 1f2707208
! Ref: gnat_ugn/platform_specific_information id29707208
! Ref: 1f7707208
! Node: Creating a Spec for Ada DLLs707879
! Ref: gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls708052
! Ref: 1f8708052
! Ref: gnat_ugn/platform_specific_information id30708052
! Ref: 1f9708052
! Node: Creating the Definition File709461
! Ref: gnat_ugn/platform_specific_information creating-the-definition-file709578
! Ref: 1f5709578
! Ref: gnat_ugn/platform_specific_information id31709578
! Ref: 1fa709578
! Node: Using gnatdll710336
! Ref: gnat_ugn/platform_specific_information id32710453
! Ref: 1fb710453
! Ref: gnat_ugn/platform_specific_information using-gnatdll710453
! Ref: 1e9710453
! Ref: gnat_ugn/platform_specific_information using-dlltool716989
! Ref: 1fc716989
! Node: GNAT and Windows Resources718356
! Ref: gnat_ugn/platform_specific_information gnat-and-windows-resources718561
! Ref: 1fd718561
! Ref: gnat_ugn/platform_specific_information id33718561
! Ref: 1fe718561
! Node: Building Resources720457
! Ref: gnat_ugn/platform_specific_information building-resources720568
! Ref: 1ff720568
! Ref: gnat_ugn/platform_specific_information id34720568
! Ref: 200720568
! Node: Compiling Resources721146
! Ref: gnat_ugn/platform_specific_information compiling-resources721281
! Ref: 201721281
! Ref: gnat_ugn/platform_specific_information id35721281
! Ref: 202721281
! Node: Using Resources722221
! Ref: gnat_ugn/platform_specific_information id36722329
! Ref: 203722329
! Ref: gnat_ugn/platform_specific_information using-resources722329
! Ref: 204722329
! Node: Using GNAT DLLs from Microsoft Visual Studio Applications722623
! Ref: gnat_ugn/platform_specific_information using-gnat-dll-from-msvs722815
! Ref: 205722815
! Ref: gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications722815
! Ref: 206722815
! Node: Debugging a DLL724377
! Ref: gnat_ugn/platform_specific_information debugging-a-dll724575
! Ref: 207724575
! Ref: gnat_ugn/platform_specific_information id37724575
! Ref: 208724575
! Node: Program and DLL Both Built with GCC/GNAT725439
! Ref: gnat_ugn/platform_specific_information id38725602
! Ref: 209725602
! Ref: gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat725602
! Ref: 20a725602
! Node: Program Built with Foreign Tools and DLL Built with GCC/GNAT726930
! Ref: gnat_ugn/platform_specific_information id39727093
! Ref: 20b727093
! Ref: gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat727093
! Ref: 20c727093
! Node: Setting Stack Size from gnatlink730499
! Ref: gnat_ugn/platform_specific_information id40730671
! Ref: 20d730671
! Ref: gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink730671
! Ref: 129730671
! Node: Setting Heap Size from gnatlink731888
! Ref: gnat_ugn/platform_specific_information id41732036
! Ref: 20e732036
! Ref: gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink732036
! Ref: 12a732036
! Node: Windows Specific Add-Ons732723
! Ref: gnat_ugn/platform_specific_information win32-specific-addons732856
! Ref: 20f732856
! Ref: gnat_ugn/platform_specific_information windows-specific-add-ons732856
! Ref: 210732856
! Node: Win32Ada733007
! Ref: gnat_ugn/platform_specific_information id42733093
! Ref: 211733093
! Ref: gnat_ugn/platform_specific_information win32ada733093
! Ref: 212733093
! Node: wPOSIX733690
! Ref: gnat_ugn/platform_specific_information id43733776
! Ref: 213733776
! Ref: gnat_ugn/platform_specific_information wposix733776
! Ref: 214733776
! Node: Mac OS Topics734460
! Ref: gnat_ugn/platform_specific_information id44734574
! Ref: 215734574
! Ref: gnat_ugn/platform_specific_information mac-os-topics734574
! Ref: 216734574
! Node: Codesigning the Debugger734727
! Ref: gnat_ugn/platform_specific_information codesigning-the-debugger734803
! Ref: 217734803
! Node: Example of Binder Output File736786
! Ref: gnat_ugn/example_of_binder_output doc736938
! Ref: 218736938
! Ref: gnat_ugn/example_of_binder_output example-of-binder-output-file736938
! Ref: e736938
! Ref: gnat_ugn/example_of_binder_output id1736938
! Ref: 219736938
! Node: Elaboration Order Handling in GNAT768025
! Ref: gnat_ugn/elaboration_order_handling_in_gnat doc768164
! Ref: 21a768164
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat768164
! Ref: f768164
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id1768164
! Ref: 21b768164
! Node: Elaboration Code768918
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-code769033
! Ref: 21c769033
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id2769033
! Ref: 21d769033
! Node: Elaboration Order772922
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order773076
! Ref: 21e773076
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id3773076
! Ref: 21f773076
! Node: Checking the Elaboration Order776738
! Ref: gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order776916
! Ref: 220776916
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id4776916
! Ref: 221776916
! Node: Controlling the Elaboration Order in Ada778624
! Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada778826
! Ref: 222778826
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id5778826
! Ref: 223778826
! Node: Controlling the Elaboration Order in GNAT787448
! Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat787645
! Ref: 224787645
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id6787645
! Ref: 225787645
! Node: Mixing Elaboration Models791500
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id7791672
! Ref: 226791672
! Ref: gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models791672
! Ref: 227791672
! Node: ABE Diagnostics792689
! Ref: gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics792837
! Ref: 228792837
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id8792837
! Ref: 229792837
! Node: SPARK Diagnostics796371
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id9796519
! Ref: 22a796519
! Ref: gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics796519
! Ref: 22b796519
! Node: Elaboration Circularities797290
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities797458
! Ref: 22c797458
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id10797458
! Ref: 22d797458
! Node: Resolving Elaboration Circularities799713
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id11799901
! Ref: 22e799901
! Ref: gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities799901
! Ref: 22f799901
! Node: Elaboration-related Compiler Switches807434
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches807642
! Ref: 230807642
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id12807642
! Ref: 231807642
! Node: Summary of Procedures for Elaboration Control812483
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id13812695
! Ref: 232812695
! Ref: gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control812695
! Ref: 233812695
! Node: Inspecting the Chosen Elaboration Order814546
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id14814712
! Ref: 234814712
! Ref: gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order814712
! Ref: 235814712
! Node: Inline Assembler819327
! Ref: gnat_ugn/inline_assembler doc819467
! Ref: 236819467
! Ref: gnat_ugn/inline_assembler id1819467
! Ref: 237819467
! Ref: gnat_ugn/inline_assembler inline-assembler819467
! Ref: 10819467
! Node: Basic Assembler Syntax821010
! Ref: gnat_ugn/inline_assembler basic-assembler-syntax821132
! Ref: 238821132
! Ref: gnat_ugn/inline_assembler id2821132
! Ref: 239821132
! Node: A Simple Example of Inline Assembler823183
! Ref: gnat_ugn/inline_assembler a-simple-example-of-inline-assembler823350
! Ref: 23a823350
! Ref: gnat_ugn/inline_assembler id3823350
! Ref: 23b823350
! Node: Output Variables in Inline Assembler826659
! Ref: gnat_ugn/inline_assembler id4826839
! Ref: 23c826839
! Ref: gnat_ugn/inline_assembler output-variables-in-inline-assembler826839
! Ref: 23d826839
! Node: Input Variables in Inline Assembler834975
! Ref: gnat_ugn/inline_assembler id5835149
! Ref: 23e835149
! Ref: gnat_ugn/inline_assembler input-variables-in-inline-assembler835149
! Ref: 23f835149
! Node: Inlining Inline Assembler Code837537
! Ref: gnat_ugn/inline_assembler id6837698
! Ref: 240837698
! Ref: gnat_ugn/inline_assembler inlining-inline-assembler-code837698
! Ref: 241837698
! Node: Other Asm Functionality839597
! Ref: gnat_ugn/inline_assembler id7839714
! Ref: 242839714
! Ref: gnat_ugn/inline_assembler other-asm-functionality839714
! Ref: 243839714
! Node: The Clobber Parameter840028
! Ref: gnat_ugn/inline_assembler id8840142
! Ref: 244840142
! Ref: gnat_ugn/inline_assembler the-clobber-parameter840142
! Ref: 245840142
! Node: The Volatile Parameter842117
! Ref: gnat_ugn/inline_assembler id9842231
! Ref: 246842231
! Ref: gnat_ugn/inline_assembler the-volatile-parameter842231
! Ref: 247842231
! Node: GNU Free Documentation License843387
! Ref: share/gnu_free_documentation_license doc843498
! Ref: 248843498
! Ref: share/gnu_free_documentation_license gnu-fdl843498
! Ref: 1843498
! Ref: share/gnu_free_documentation_license gnu-free-documentation-license843498
! Ref: 249843498
! Node: Index866956
! Ref: gnat_ugn/gnat_utility_programs switches-related-to-project-files1007629
! Ref: d11007659
  
  End Tag Table
  
--- 23770,25244 ----
                                                               (line   40)
  * Zero-Cost Exceptions:                  Run-Time Libraries. (line   13)
  
!    
  
  
  
  Tag Table:
! Node: Top348
! Ref: gnat_ugn doc628
! Ref: 0628
! Node: About This Guide12294
! Ref: gnat_ugn/about_this_guide doc12398
! Ref: 212398
! Ref: gnat_ugn/about_this_guide about-this-guide12398
! Ref: 312398
! Ref: gnat_ugn/about_this_guide gnat-user-s-guide-for-native-platforms12398
! Ref: 412398
! Ref: gnat_ugn/about_this_guide id112398
! Ref: 512398
! Node: What This Guide Contains13223
! Ref: gnat_ugn/about_this_guide what-this-guide-contains13357
! Ref: 713357
! Node: What You Should Know before Reading This Guide14797
! Ref: gnat_ugn/about_this_guide what-you-should-know-before-reading-this-guide14959
! Ref: 1114959
! Node: Related Information15311
! Ref: gnat_ugn/about_this_guide related-information15460
! Ref: 1215460
! Node: Conventions16346
! Ref: gnat_ugn/about_this_guide conventions16440
! Ref: 1316440
! Node: Getting Started with GNAT17260
! Ref: gnat_ugn/getting_started_with_gnat doc17387
! Ref: 1417387
! Ref: gnat_ugn/getting_started_with_gnat getting-started-with-gnat17387
! Ref: 817387
! Ref: gnat_ugn/getting_started_with_gnat id117387
! Ref: 1517387
! Node: System Requirements18033
! Ref: gnat_ugn/getting_started_with_gnat id218137
! Ref: 1618137
! Ref: gnat_ugn/getting_started_with_gnat system-requirements18137
! Ref: 1718137
! Node: Running GNAT19584
! Ref: gnat_ugn/getting_started_with_gnat id319725
! Ref: 1819725
! Ref: gnat_ugn/getting_started_with_gnat running-gnat19725
! Ref: 1919725
! Node: Running a Simple Ada Program20223
! Ref: gnat_ugn/getting_started_with_gnat id420382
! Ref: 1a20382
! Ref: gnat_ugn/getting_started_with_gnat running-a-simple-ada-program20382
! Ref: 1b20382
! Node: Running a Program with Multiple Units23359
! Ref: gnat_ugn/getting_started_with_gnat id523497
! Ref: 1e23497
! Ref: gnat_ugn/getting_started_with_gnat running-a-program-with-multiple-units23497
! Ref: 1f23497
! Node: The GNAT Compilation Model25094
! Ref: gnat_ugn/the_gnat_compilation_model doc25243
! Ref: 2025243
! Ref: gnat_ugn/the_gnat_compilation_model id125243
! Ref: 2125243
! Ref: gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model25243
! Ref: 925243
! Node: Source Representation26661
! Ref: gnat_ugn/the_gnat_compilation_model id226787
! Ref: 2f26787
! Ref: gnat_ugn/the_gnat_compilation_model source-representation26787
! Ref: 2226787
! Node: Foreign Language Representation29243
! Ref: gnat_ugn/the_gnat_compilation_model foreign-language-representation29410
! Ref: 2329410
! Ref: gnat_ugn/the_gnat_compilation_model id329410
! Ref: 3029410
! Node: Latin-129783
! Ref: gnat_ugn/the_gnat_compilation_model id429886
! Ref: 3229886
! Ref: gnat_ugn/the_gnat_compilation_model latin-129886
! Ref: 3329886
! Node: Other 8-Bit Codes30674
! Ref: gnat_ugn/the_gnat_compilation_model id530810
! Ref: 3430810
! Ref: gnat_ugn/the_gnat_compilation_model other-8-bit-codes30810
! Ref: 3530810
! Node: Wide_Character Encodings32998
! Ref: gnat_ugn/the_gnat_compilation_model id633156
! Ref: 3633156
! Ref: gnat_ugn/the_gnat_compilation_model wide-character-encodings33156
! Ref: 3733156
! Node: Wide_Wide_Character Encodings36972
! Ref: gnat_ugn/the_gnat_compilation_model id737104
! Ref: 3837104
! Ref: gnat_ugn/the_gnat_compilation_model wide-wide-character-encodings37104
! Ref: 3937104
! Node: File Naming Topics and Utilities38824
! Ref: gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities38991
! Ref: 2438991
! Ref: gnat_ugn/the_gnat_compilation_model id838991
! Ref: 3a38991
! Node: File Naming Rules39500
! Ref: gnat_ugn/the_gnat_compilation_model file-naming-rules39619
! Ref: 3b39619
! Ref: gnat_ugn/the_gnat_compilation_model id939619
! Ref: 3c39619
! Node: Using Other File Names43150
! Ref: gnat_ugn/the_gnat_compilation_model id1043309
! Ref: 3e43309
! Ref: gnat_ugn/the_gnat_compilation_model using-other-file-names43309
! Ref: 1c43309
! Node: Alternative File Naming Schemes45557
! Ref: gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes45755
! Ref: 4045755
! Ref: gnat_ugn/the_gnat_compilation_model id1145755
! Ref: 4145755
! Node: Handling Arbitrary File Naming Conventions with gnatname50897
! Ref: gnat_ugn/the_gnat_compilation_model handling-arbitrary-file-naming-conventions-with-gnatname51104
! Ref: 4251104
! Ref: gnat_ugn/the_gnat_compilation_model id1251104
! Ref: 4351104
! Node: Arbitrary File Naming Conventions51365
! Ref: gnat_ugn/the_gnat_compilation_model arbitrary-file-naming-conventions51518
! Ref: 4451518
! Ref: gnat_ugn/the_gnat_compilation_model id1351518
! Ref: 4551518
! Node: Running gnatname52658
! Ref: gnat_ugn/the_gnat_compilation_model id1452841
! Ref: 4652841
! Ref: gnat_ugn/the_gnat_compilation_model running-gnatname52841
! Ref: 4752841
! Node: Switches for gnatname54707
! Ref: gnat_ugn/the_gnat_compilation_model id1554883
! Ref: 4854883
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatname54883
! Ref: 4954883
! Node: Examples of gnatname Usage59681
! Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatname-usage59832
! Ref: 4a59832
! Ref: gnat_ugn/the_gnat_compilation_model id1659832
! Ref: 4b59832
! Node: File Name Krunching with gnatkr60527
! Ref: gnat_ugn/the_gnat_compilation_model file-name-krunching-with-gnatkr60731
! Ref: 4c60731
! Ref: gnat_ugn/the_gnat_compilation_model id1760731
! Ref: 4d60731
! Node: About gnatkr61192
! Ref: gnat_ugn/the_gnat_compilation_model about-gnatkr61295
! Ref: 4e61295
! Ref: gnat_ugn/the_gnat_compilation_model id1861295
! Ref: 4f61295
! Node: Using gnatkr62276
! Ref: gnat_ugn/the_gnat_compilation_model id1962404
! Ref: 5062404
! Ref: gnat_ugn/the_gnat_compilation_model using-gnatkr62404
! Ref: 3d62404
! Node: Krunching Method63928
! Ref: gnat_ugn/the_gnat_compilation_model id2064068
! Ref: 5164068
! Ref: gnat_ugn/the_gnat_compilation_model krunching-method64068
! Ref: 5264068
! Node: Examples of gnatkr Usage67556
! Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage67675
! Ref: 5367675
! Ref: gnat_ugn/the_gnat_compilation_model id2167675
! Ref: 5467675
! Node: Renaming Files with gnatchop68122
! Ref: gnat_ugn/the_gnat_compilation_model id2268261
! Ref: 5568261
! Ref: gnat_ugn/the_gnat_compilation_model renaming-files-with-gnatchop68261
! Ref: 1d68261
! Node: Handling Files with Multiple Units68726
! Ref: gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units68874
! Ref: 5668874
! Ref: gnat_ugn/the_gnat_compilation_model id2368874
! Ref: 5768874
! Node: Operating gnatchop in Compilation Mode70110
! Ref: gnat_ugn/the_gnat_compilation_model id2470292
! Ref: 5870292
! Ref: gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode70292
! Ref: 5970292
! Node: Command Line for gnatchop73440
! Ref: gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop73609
! Ref: 5a73609
! Ref: gnat_ugn/the_gnat_compilation_model id2573609
! Ref: 5b73609
! Node: Switches for gnatchop75430
! Ref: gnat_ugn/the_gnat_compilation_model id2675587
! Ref: 5c75587
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatchop75587
! Ref: 5d75587
! Node: Examples of gnatchop Usage79606
! Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage79729
! Ref: 5e79729
! Ref: gnat_ugn/the_gnat_compilation_model id2779729
! Ref: 5f79729
! Node: Configuration Pragmas80969
! Ref: gnat_ugn/the_gnat_compilation_model configuration-pragmas81128
! Ref: 2581128
! Ref: gnat_ugn/the_gnat_compilation_model id2881128
! Ref: 6081128
! Node: Handling of Configuration Pragmas83401
! Ref: gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas83534
! Ref: 3f83534
! Ref: gnat_ugn/the_gnat_compilation_model id2983534
! Ref: 6183534
! Node: The Configuration Pragmas Files85499
! Ref: gnat_ugn/the_gnat_compilation_model id3085632
! Ref: 6285632
! Ref: gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files85632
! Ref: 6385632
! Node: Generating Object Files87828
! Ref: gnat_ugn/the_gnat_compilation_model generating-object-files87974
! Ref: 2687974
! Ref: gnat_ugn/the_gnat_compilation_model id3187974
! Ref: 6487974
! Node: Source Dependencies90548
! Ref: gnat_ugn/the_gnat_compilation_model id3290706
! Ref: 6590706
! Ref: gnat_ugn/the_gnat_compilation_model source-dependencies90706
! Ref: 2790706
! Node: The Ada Library Information Files94386
! Ref: gnat_ugn/the_gnat_compilation_model id3394543
! Ref: 6694543
! Ref: gnat_ugn/the_gnat_compilation_model the-ada-library-information-files94543
! Ref: 2894543
! Node: Binding an Ada Program96560
! Ref: gnat_ugn/the_gnat_compilation_model binding-an-ada-program96716
! Ref: 2996716
! Ref: gnat_ugn/the_gnat_compilation_model id3496716
! Ref: 6796716
! Node: GNAT and Libraries98412
! Ref: gnat_ugn/the_gnat_compilation_model gnat-and-libraries98558
! Ref: 2a98558
! Ref: gnat_ugn/the_gnat_compilation_model id3598558
! Ref: 6898558
! Node: Introduction to Libraries in GNAT99036
! Ref: gnat_ugn/the_gnat_compilation_model id3699156
! Ref: 6999156
! Ref: gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat99156
! Ref: 6a99156
! Node: General Ada Libraries101289
! Ref: gnat_ugn/the_gnat_compilation_model general-ada-libraries101443
! Ref: 6c101443
! Ref: gnat_ugn/the_gnat_compilation_model id37101443
! Ref: 6d101443
! Node: Building a library101578
! Ref: gnat_ugn/the_gnat_compilation_model building-a-library101685
! Ref: 6e101685
! Ref: gnat_ugn/the_gnat_compilation_model id38101685
! Ref: 6f101685
! Node: Installing a library105553
! Ref: gnat_ugn/the_gnat_compilation_model id39105684
! Ref: 71105684
! Ref: gnat_ugn/the_gnat_compilation_model installing-a-library105684
! Ref: 72105684
! Node: Using a library108191
! Ref: gnat_ugn/the_gnat_compilation_model id40108295
! Ref: 74108295
! Ref: gnat_ugn/the_gnat_compilation_model using-a-library108295
! Ref: 75108295
! Node: Stand-alone Ada Libraries110865
! Ref: gnat_ugn/the_gnat_compilation_model id41111022
! Ref: 77111022
! Ref: gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries111022
! Ref: 6b111022
! Node: Introduction to Stand-alone Libraries111283
! Ref: gnat_ugn/the_gnat_compilation_model id42111423
! Ref: 78111423
! Ref: gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries111423
! Ref: 79111423
! Node: Building a Stand-alone Library113045
! Ref: gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library113256
! Ref: 7a113256
! Ref: gnat_ugn/the_gnat_compilation_model id43113256
! Ref: 7b113256
! Node: Creating a Stand-alone Library to be used in a non-Ada context118090
! Ref: gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context118301
! Ref: 7c118301
! Ref: gnat_ugn/the_gnat_compilation_model id44118301
! Ref: 7d118301
! Node: Restrictions in Stand-alone Libraries121215
! Ref: gnat_ugn/the_gnat_compilation_model id45121387
! Ref: 7f121387
! Ref: gnat_ugn/the_gnat_compilation_model restrictions-in-stand-alone-libraries121387
! Ref: 80121387
! Node: Rebuilding the GNAT Run-Time Library122710
! Ref: gnat_ugn/the_gnat_compilation_model id46122837
! Ref: 81122837
! Ref: gnat_ugn/the_gnat_compilation_model rebuilding-the-gnat-run-time-library122837
! Ref: 82122837
! Node: Conditional Compilation123679
! Ref: gnat_ugn/the_gnat_compilation_model conditional-compilation123829
! Ref: 2b123829
! Ref: gnat_ugn/the_gnat_compilation_model id47123829
! Ref: 83123829
! Node: Modeling Conditional Compilation in Ada124135
! Ref: gnat_ugn/the_gnat_compilation_model id48124272
! Ref: 84124272
! Ref: gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada124272
! Ref: 85124272
! Node: Use of Boolean Constants125832
! Ref: gnat_ugn/the_gnat_compilation_model id49125969
! Ref: 86125969
! Ref: gnat_ugn/the_gnat_compilation_model use-of-boolean-constants125969
! Ref: 87125969
! Node: Debugging - A Special Case127278
! Ref: gnat_ugn/the_gnat_compilation_model debugging-a-special-case127453
! Ref: 88127453
! Ref: gnat_ugn/the_gnat_compilation_model id50127453
! Ref: 89127453
! Node: Conditionalizing Declarations130960
! Ref: gnat_ugn/the_gnat_compilation_model conditionalizing-declarations131145
! Ref: 8a131145
! Ref: gnat_ugn/the_gnat_compilation_model id51131145
! Ref: 8b131145
! Node: Use of Alternative Implementations132873
! Ref: gnat_ugn/the_gnat_compilation_model id52133045
! Ref: 8c133045
! Ref: gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations133045
! Ref: 8d133045
! Node: Preprocessing137241
! Ref: gnat_ugn/the_gnat_compilation_model id53137375
! Ref: 8e137375
! Ref: gnat_ugn/the_gnat_compilation_model preprocessing137375
! Ref: 8f137375
! Node: Preprocessing with gnatprep139057
! Ref: gnat_ugn/the_gnat_compilation_model id54139227
! Ref: 92139227
! Ref: gnat_ugn/the_gnat_compilation_model preprocessing-with-gnatprep139227
! Ref: 90139227
! Node: Preprocessing Symbols139746
! Ref: gnat_ugn/the_gnat_compilation_model id55139856
! Ref: 93139856
! Ref: gnat_ugn/the_gnat_compilation_model preprocessing-symbols139856
! Ref: 94139856
! Node: Using gnatprep140222
! Ref: gnat_ugn/the_gnat_compilation_model id56140362
! Ref: 95140362
! Ref: gnat_ugn/the_gnat_compilation_model using-gnatprep140362
! Ref: 96140362
! Node: Switches for gnatprep141260
! Ref: gnat_ugn/the_gnat_compilation_model id57141403
! Ref: 97141403
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatprep141403
! Ref: 98141403
! Node: Form of Definitions File144518
! Ref: gnat_ugn/the_gnat_compilation_model form-of-definitions-file144678
! Ref: 99144678
! Ref: gnat_ugn/the_gnat_compilation_model id58144678
! Ref: 9a144678
! Node: Form of Input Text for gnatprep145240
! Ref: gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep145370
! Ref: 9b145370
! Ref: gnat_ugn/the_gnat_compilation_model id59145370
! Ref: 9c145370
! Node: Integrated Preprocessing149933
! Ref: gnat_ugn/the_gnat_compilation_model id60150055
! Ref: 9d150055
! Ref: gnat_ugn/the_gnat_compilation_model integrated-preprocessing150055
! Ref: 91150055
! Node: Mixed Language Programming158427
! Ref: gnat_ugn/the_gnat_compilation_model id61158592
! Ref: 9e158592
! Ref: gnat_ugn/the_gnat_compilation_model mixed-language-programming158592
! Ref: 2c158592
! Node: Interfacing to C158988
! Ref: gnat_ugn/the_gnat_compilation_model id62159097
! Ref: 9f159097
! Ref: gnat_ugn/the_gnat_compilation_model interfacing-to-c159097
! Ref: a0159097
! Node: Calling Conventions164307
! Ref: gnat_ugn/the_gnat_compilation_model calling-conventions164460
! Ref: a1164460
! Ref: gnat_ugn/the_gnat_compilation_model id63164460
! Ref: a2164460
! Node: Building Mixed Ada and C++ Programs172312
! Ref: gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs172472
! Ref: a3172472
! Ref: gnat_ugn/the_gnat_compilation_model id64172472
! Ref: a4172472
! Node: Interfacing to C++172951
! Ref: gnat_ugn/the_gnat_compilation_model id65173085
! Ref: a5173085
! Ref: gnat_ugn/the_gnat_compilation_model id66173085
! Ref: a6173085
! Node: Linking a Mixed C++ & Ada Program174198
! Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-ada-program174357
! Ref: a8174357
! Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-and-ada-program174357
! Ref: a9174357
! Node: A Simple Example178388
! Ref: gnat_ugn/the_gnat_compilation_model a-simple-example178562
! Ref: aa178562
! Ref: gnat_ugn/the_gnat_compilation_model id67178562
! Ref: ab178562
! Node: Interfacing with C++ constructors181281
! Ref: gnat_ugn/the_gnat_compilation_model id68181461
! Ref: ac181461
! Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-constructors181461
! Ref: ad181461
! Node: Interfacing with C++ at the Class Level188200
! Ref: gnat_ugn/the_gnat_compilation_model id69188355
! Ref: af188355
! Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level188355
! Ref: ae188355
! Node: Partition-Wide Settings197052
! Ref: gnat_ugn/the_gnat_compilation_model id70197238
! Ref: b0197238
! Ref: gnat_ugn/the_gnat_compilation_model partition-wide-settings197238
! Ref: b1197238
! Node: Generating Ada Bindings for C and C++ headers199211
! Ref: gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers199405
! Ref: a7199405
! Ref: gnat_ugn/the_gnat_compilation_model id71199405
! Ref: b2199405
! Node: Running the Binding Generator200692
! Ref: gnat_ugn/the_gnat_compilation_model id72200849
! Ref: b3200849
! Ref: gnat_ugn/the_gnat_compilation_model running-the-binding-generator200849
! Ref: b4200849
! Node: Generating Bindings for C++ Headers203428
! Ref: gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers203602
! Ref: b5203602
! Ref: gnat_ugn/the_gnat_compilation_model id73203602
! Ref: b6203602
! Node: Switches206523
! Ref: gnat_ugn/the_gnat_compilation_model switches206659
! Ref: b7206659
! Ref: gnat_ugn/the_gnat_compilation_model switches-for-ada-binding-generation206659
! Ref: b8206659
! Node: Generating C Headers for Ada Specifications207230
! Ref: gnat_ugn/the_gnat_compilation_model generating-c-headers-for-ada-specifications207392
! Ref: b9207392
! Ref: gnat_ugn/the_gnat_compilation_model id74207392
! Ref: ba207392
! Node: Running the C Header Generator207895
! Ref: gnat_ugn/the_gnat_compilation_model running-the-c-header-generator208007
! Ref: bb208007
! Node: GNAT and Other Compilation Models209787
! Ref: gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models209965
! Ref: 2d209965
! Ref: gnat_ugn/the_gnat_compilation_model id75209965
! Ref: bc209965
! Node: Comparison between GNAT and C/C++ Compilation Models210399
! Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-c-c-compilation-models210591
! Ref: bd210591
! Ref: gnat_ugn/the_gnat_compilation_model id76210591
! Ref: be210591
! Node: Comparison between GNAT and Conventional Ada Library Models212112
! Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-conventional-ada-library-models212304
! Ref: bf212304
! Ref: gnat_ugn/the_gnat_compilation_model id77212304
! Ref: c0212304
! Node: Using GNAT Files with External Tools214683
! Ref: gnat_ugn/the_gnat_compilation_model id78214826
! Ref: c1214826
! Ref: gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools214826
! Ref: 2e214826
! Node: Using Other Utility Programs with GNAT215122
! Ref: gnat_ugn/the_gnat_compilation_model id79215285
! Ref: c2215285
! Ref: gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat215285
! Ref: c3215285
! Node: The External Symbol Naming Scheme of GNAT215844
! Ref: gnat_ugn/the_gnat_compilation_model id80216007
! Ref: c4216007
! Ref: gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat216007
! Ref: c5216007
! Node: Building Executable Programs with GNAT217917
! Ref: gnat_ugn/building_executable_programs_with_gnat doc218062
! Ref: c6218062
! Ref: gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat218062
! Ref: a218062
! Ref: gnat_ugn/building_executable_programs_with_gnat id1218062
! Ref: c7218062
! Node: Building with gnatmake218977
! Ref: gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake219103
! Ref: cc219103
! Ref: gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake219103
! Ref: c8219103
! Node: Running gnatmake220724
! Ref: gnat_ugn/building_executable_programs_with_gnat id2220831
! Ref: cd220831
! Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatmake220831
! Ref: ce220831
! Node: Switches for gnatmake222305
! Ref: gnat_ugn/building_executable_programs_with_gnat id3222447
! Ref: cf222447
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake222447
! Ref: d0222447
! Node: Mode Switches for gnatmake243781
! Ref: gnat_ugn/building_executable_programs_with_gnat id4243932
! Ref: d2243932
! Ref: gnat_ugn/building_executable_programs_with_gnat mode-switches-for-gnatmake243932
! Ref: d3243932
! Node: Notes on the Command Line245227
! Ref: gnat_ugn/building_executable_programs_with_gnat id5245375
! Ref: d4245375
! Ref: gnat_ugn/building_executable_programs_with_gnat notes-on-the-command-line245375
! Ref: d5245375
! Node: How gnatmake Works247852
! Ref: gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works248000
! Ref: d6248000
! Ref: gnat_ugn/building_executable_programs_with_gnat id6248000
! Ref: d7248000
! Node: Examples of gnatmake Usage250351
! Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatmake-usage250465
! Ref: d8250465
! Ref: gnat_ugn/building_executable_programs_with_gnat id7250465
! Ref: d9250465
! Node: Compiling with gcc251560
! Ref: gnat_ugn/building_executable_programs_with_gnat compiling-with-gcc251712
! Ref: c9251712
! Ref: gnat_ugn/building_executable_programs_with_gnat id8251712
! Ref: da251712
! Node: Compiling Programs252113
! Ref: gnat_ugn/building_executable_programs_with_gnat compiling-programs252238
! Ref: db252238
! Ref: gnat_ugn/building_executable_programs_with_gnat id9252238
! Ref: dc252238
! Node: Search Paths and the Run-Time Library RTL255650
! Ref: gnat_ugn/building_executable_programs_with_gnat id10255811
! Ref: de255811
! Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-and-the-run-time-library-rtl255811
! Ref: 73255811
! Node: Order of Compilation Issues259253
! Ref: gnat_ugn/building_executable_programs_with_gnat id11259404
! Ref: df259404
! Ref: gnat_ugn/building_executable_programs_with_gnat order-of-compilation-issues259404
! Ref: e0259404
! Node: Examples260973
! Ref: gnat_ugn/building_executable_programs_with_gnat examples261074
! Ref: e1261074
! Ref: gnat_ugn/building_executable_programs_with_gnat id12261074
! Ref: e2261074
! Node: Compiler Switches261556
! Ref: gnat_ugn/building_executable_programs_with_gnat compiler-switches261701
! Ref: e3261701
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gcc261701
! Ref: dd261701
! Node: Alphabetical List of All Switches262855
! Ref: gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches262985
! Ref: e4262985
! Ref: gnat_ugn/building_executable_programs_with_gnat id13262985
! Ref: e5262985
! Node: Output and Error Message Control299775
! Ref: gnat_ugn/building_executable_programs_with_gnat id14299937
! Ref: f0299937
! Ref: gnat_ugn/building_executable_programs_with_gnat output-and-error-message-control299937
! Ref: f1299937
! Node: Warning Message Control308013
! Ref: gnat_ugn/building_executable_programs_with_gnat id15308173
! Ref: f2308173
! Ref: gnat_ugn/building_executable_programs_with_gnat warning-message-control308173
! Ref: ed308173
! Node: Debugging and Assertion Control359388
! Ref: gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control359533
! Ref: f3359533
! Ref: gnat_ugn/building_executable_programs_with_gnat id16359533
! Ref: f4359533
! Node: Validity Checking362980
! Ref: gnat_ugn/building_executable_programs_with_gnat id17363116
! Ref: f5363116
! Ref: gnat_ugn/building_executable_programs_with_gnat validity-checking363116
! Ref: e9363116
! Node: Style Checking373140
! Ref: gnat_ugn/building_executable_programs_with_gnat id18373260
! Ref: f6373260
! Ref: gnat_ugn/building_executable_programs_with_gnat style-checking373260
! Ref: ee373260
! Node: Run-Time Checks391101
! Ref: gnat_ugn/building_executable_programs_with_gnat id19391233
! Ref: f7391233
! Ref: gnat_ugn/building_executable_programs_with_gnat run-time-checks391233
! Ref: ec391233
! Node: Using gcc for Syntax Checking397930
! Ref: gnat_ugn/building_executable_programs_with_gnat id20398079
! Ref: f8398079
! Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking398079
! Ref: f9398079
! Node: Using gcc for Semantic Checking399765
! Ref: gnat_ugn/building_executable_programs_with_gnat id21399934
! Ref: fa399934
! Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking399934
! Ref: fb399934
! Node: Compiling Different Versions of Ada401292
! Ref: gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada401453
! Ref: 6401453
! Ref: gnat_ugn/building_executable_programs_with_gnat id22401453
! Ref: fc401453
! Node: Character Set Control405714
! Ref: gnat_ugn/building_executable_programs_with_gnat character-set-control405863
! Ref: 31405863
! Ref: gnat_ugn/building_executable_programs_with_gnat id23405863
! Ref: fd405863
! Node: File Naming Control411181
! Ref: gnat_ugn/building_executable_programs_with_gnat file-naming-control411322
! Ref: fe411322
! Ref: gnat_ugn/building_executable_programs_with_gnat id24411322
! Ref: ff411322
! Node: Subprogram Inlining Control411730
! Ref: gnat_ugn/building_executable_programs_with_gnat id25411874
! Ref: 100411874
! Ref: gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control411874
! Ref: 101411874
! Node: Auxiliary Output Control413751
! Ref: gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control413893
! Ref: 103413893
! Ref: gnat_ugn/building_executable_programs_with_gnat id26413893
! Ref: 104413893
! Node: Debugging Control415054
! Ref: gnat_ugn/building_executable_programs_with_gnat debugging-control415195
! Ref: 105415195
! Ref: gnat_ugn/building_executable_programs_with_gnat id27415195
! Ref: 106415195
! Node: Exception Handling Control427049
! Ref: gnat_ugn/building_executable_programs_with_gnat exception-handling-control427196
! Ref: 107427196
! Ref: gnat_ugn/building_executable_programs_with_gnat id28427196
! Ref: 108427196
! Node: Units to Sources Mapping Files429873
! Ref: gnat_ugn/building_executable_programs_with_gnat id29430026
! Ref: 109430026
! Ref: gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files430026
! Ref: ea430026
! Node: Code Generation Control431965
! Ref: gnat_ugn/building_executable_programs_with_gnat code-generation-control432083
! Ref: 10a432083
! Ref: gnat_ugn/building_executable_programs_with_gnat id30432083
! Ref: 10b432083
! Node: Linker Switches433255
! Ref: gnat_ugn/building_executable_programs_with_gnat id31433403
! Ref: 10c433403
! Ref: gnat_ugn/building_executable_programs_with_gnat linker-switches433403
! Ref: 10d433403
! Node: Binding with gnatbind433765
! Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind433917
! Ref: ca433917
! Ref: gnat_ugn/building_executable_programs_with_gnat id32433917
! Ref: 10e433917
! Node: Running gnatbind435441
! Ref: gnat_ugn/building_executable_programs_with_gnat id33435547
! Ref: 10f435547
! Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatbind435547
! Ref: 110435547
! Node: Switches for gnatbind438579
! Ref: gnat_ugn/building_executable_programs_with_gnat id34438713
! Ref: 111438713
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind438713
! Ref: 112438713
! Node: Consistency-Checking Modes452824
! Ref: gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes452947
! Ref: 116452947
! Ref: gnat_ugn/building_executable_programs_with_gnat id35452947
! Ref: 117452947
! Node: Binder Error Message Control454766
! Ref: gnat_ugn/building_executable_programs_with_gnat binder-error-message-control454917
! Ref: 118454917
! Ref: gnat_ugn/building_executable_programs_with_gnat id36454917
! Ref: 119454917
! Node: Elaboration Control457161
! Ref: gnat_ugn/building_executable_programs_with_gnat elaboration-control457300
! Ref: 113457300
! Ref: gnat_ugn/building_executable_programs_with_gnat id37457300
! Ref: 11a457300
! Node: Output Control460602
! Ref: gnat_ugn/building_executable_programs_with_gnat id38460739
! Ref: 11b460739
! Ref: gnat_ugn/building_executable_programs_with_gnat output-control460739
! Ref: 11c460739
! Node: Dynamic Allocation Control462734
! Ref: gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control462886
! Ref: 114462886
! Ref: gnat_ugn/building_executable_programs_with_gnat id39462886
! Ref: 11d462886
! Node: Binding with Non-Ada Main Programs463507
! Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs463685
! Ref: 7e463685
! Ref: gnat_ugn/building_executable_programs_with_gnat id40463685
! Ref: 11e463685
! Node: Binding Programs with No Main Subprogram466695
! Ref: gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram466838
! Ref: 11f466838
! Ref: gnat_ugn/building_executable_programs_with_gnat id41466838
! Ref: 120466838
! Node: Command-Line Access467706
! Ref: gnat_ugn/building_executable_programs_with_gnat command-line-access467849
! Ref: 121467849
! Ref: gnat_ugn/building_executable_programs_with_gnat id42467849
! Ref: 122467849
! Node: Search Paths for gnatbind468759
! Ref: gnat_ugn/building_executable_programs_with_gnat id43468907
! Ref: 123468907
! Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind468907
! Ref: 76468907
! Node: Examples of gnatbind Usage471724
! Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage471844
! Ref: 124471844
! Ref: gnat_ugn/building_executable_programs_with_gnat id44471844
! Ref: 125471844
! Node: Linking with gnatlink472692
! Ref: gnat_ugn/building_executable_programs_with_gnat id45472855
! Ref: 126472855
! Ref: gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink472855
! Ref: cb472855
! Node: Running gnatlink473391
! Ref: gnat_ugn/building_executable_programs_with_gnat id46473497
! Ref: 127473497
! Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatlink473497
! Ref: 128473497
! Node: Switches for gnatlink475969
! Ref: gnat_ugn/building_executable_programs_with_gnat id47476075
! Ref: 12b476075
! Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink476075
! Ref: 12c476075
! Node: Using the GNU make Utility480785
! Ref: gnat_ugn/building_executable_programs_with_gnat id48480918
! Ref: 12d480918
! Ref: gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility480918
! Ref: 70480918
! Node: Using gnatmake in a Makefile481606
! Ref: gnat_ugn/building_executable_programs_with_gnat id49481752
! Ref: 12e481752
! Ref: gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile481752
! Ref: 12f481752
! Node: Automatically Creating a List of Directories485780
! Ref: gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories485971
! Ref: 130485971
! Ref: gnat_ugn/building_executable_programs_with_gnat id50485971
! Ref: 131485971
! Node: Generating the Command Line Switches488926
! Ref: gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches489126
! Ref: 132489126
! Ref: gnat_ugn/building_executable_programs_with_gnat id51489126
! Ref: 133489126
! Node: Overcoming Command Line Length Limits489904
! Ref: gnat_ugn/building_executable_programs_with_gnat id52490051
! Ref: 134490051
! Ref: gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits490051
! Ref: 135490051
! Node: GNAT Utility Programs492356
! Ref: gnat_ugn/gnat_utility_programs doc492501
! Ref: 136492501
! Ref: gnat_ugn/gnat_utility_programs gnat-utility-programs492501
! Ref: b492501
! Ref: gnat_ugn/gnat_utility_programs id1492501
! Ref: 137492501
! Node: The File Cleanup Utility gnatclean493068
! Ref: gnat_ugn/gnat_utility_programs id2493202
! Ref: 13a493202
! Ref: gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean493202
! Ref: 138493202
! Node: Running gnatclean493613
! Ref: gnat_ugn/gnat_utility_programs id3493734
! Ref: 13b493734
! Ref: gnat_ugn/gnat_utility_programs running-gnatclean493734
! Ref: 13c493734
! Node: Switches for gnatclean494383
! Ref: gnat_ugn/gnat_utility_programs id4494504
! Ref: 13d494504
! Ref: gnat_ugn/gnat_utility_programs switches-for-gnatclean494504
! Ref: 13e494504
! Node: The GNAT Library Browser gnatls497644
! Ref: gnat_ugn/gnat_utility_programs id5497778
! Ref: 13f497778
! Ref: gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls497778
! Ref: 139497778
! Node: Running gnatls498184
! Ref: gnat_ugn/gnat_utility_programs id6498296
! Ref: 140498296
! Ref: gnat_ugn/gnat_utility_programs running-gnatls498296
! Ref: 141498296
! Node: Switches for gnatls500785
! Ref: gnat_ugn/gnat_utility_programs id7500929
! Ref: 142500929
! Ref: gnat_ugn/gnat_utility_programs switches-for-gnatls500929
! Ref: 143500929
! Node: Example of gnatls Usage503355
! Ref: gnat_ugn/gnat_utility_programs example-of-gnatls-usage503476
! Ref: 144503476
! Ref: gnat_ugn/gnat_utility_programs id8503476
! Ref: 145503476
! Node: GNAT and Program Execution505879
! Ref: gnat_ugn/gnat_and_program_execution doc506015
! Ref: 146506015
! Ref: gnat_ugn/gnat_and_program_execution gnat-and-program-execution506015
! Ref: c506015
! Ref: gnat_ugn/gnat_and_program_execution id1506015
! Ref: 147506015
! Node: Running and Debugging Ada Programs506659
! Ref: gnat_ugn/gnat_and_program_execution id2506776
! Ref: 148506776
! Ref: gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs506776
! Ref: 14f506776
! Node: The GNAT Debugger GDB508146
! Ref: gnat_ugn/gnat_and_program_execution id3508260
! Ref: 150508260
! Ref: gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb508260
! Ref: 151508260
! Node: Running GDB511325
! Ref: gnat_ugn/gnat_and_program_execution id4511476
! Ref: 152511476
! Ref: gnat_ugn/gnat_and_program_execution running-gdb511476
! Ref: 153511476
! Node: Introduction to GDB Commands512269
! Ref: gnat_ugn/gnat_and_program_execution id5512420
! Ref: 154512420
! Ref: gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands512420
! Ref: 155512420
! Node: Using Ada Expressions518364
! Ref: gnat_ugn/gnat_and_program_execution id6518536
! Ref: 156518536
! Ref: gnat_ugn/gnat_and_program_execution using-ada-expressions518536
! Ref: 157518536
! Node: Calling User-Defined Subprograms519651
! Ref: gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms519831
! Ref: 158519831
! Ref: gnat_ugn/gnat_and_program_execution id7519831
! Ref: 159519831
! Node: Using the next Command in a Function522598
! Ref: gnat_ugn/gnat_and_program_execution id8522796
! Ref: 15a522796
! Ref: gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function522796
! Ref: 15b522796
! Node: Stopping When Ada Exceptions Are Raised523820
! Ref: gnat_ugn/gnat_and_program_execution id9523995
! Ref: 15c523995
! Ref: gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised523995
! Ref: 15d523995
! Node: Ada Tasks525026
! Ref: gnat_ugn/gnat_and_program_execution ada-tasks525188
! Ref: 15e525188
! Ref: gnat_ugn/gnat_and_program_execution id10525188
! Ref: 15f525188
! Node: Debugging Generic Units527400
! Ref: gnat_ugn/gnat_and_program_execution debugging-generic-units527554
! Ref: 160527554
! Ref: gnat_ugn/gnat_and_program_execution id11527554
! Ref: 161527554
! Node: Remote Debugging with gdbserver528872
! Ref: gnat_ugn/gnat_and_program_execution id12529066
! Ref: 162529066
! Ref: gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver529066
! Ref: 163529066
! Node: GNAT Abnormal Termination or Failure to Terminate530998
! Ref: gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate531209
! Ref: 164531209
! Ref: gnat_ugn/gnat_and_program_execution id13531209
! Ref: 165531209
! Node: Naming Conventions for GNAT Source Files533688
! Ref: gnat_ugn/gnat_and_program_execution id14533906
! Ref: 166533906
! Ref: gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files533906
! Ref: 167533906
! Node: Getting Internal Debugging Information536381
! Ref: gnat_ugn/gnat_and_program_execution getting-internal-debugging-information536565
! Ref: 168536565
! Ref: gnat_ugn/gnat_and_program_execution id15536565
! Ref: 169536565
! Node: Stack Traceback537599
! Ref: gnat_ugn/gnat_and_program_execution id16537779
! Ref: 16a537779
! Ref: gnat_ugn/gnat_and_program_execution stack-traceback537779
! Ref: 16b537779
! Node: Non-Symbolic Traceback538696
! Ref: gnat_ugn/gnat_and_program_execution id17538799
! Ref: 16c538799
! Ref: gnat_ugn/gnat_and_program_execution non-symbolic-traceback538799
! Ref: 16d538799
! Node: Symbolic Traceback548006
! Ref: gnat_ugn/gnat_and_program_execution id18548109
! Ref: 16e548109
! Ref: gnat_ugn/gnat_and_program_execution symbolic-traceback548109
! Ref: 16f548109
! Node: Pretty-Printers for the GNAT runtime551183
! Ref: gnat_ugn/gnat_and_program_execution id19551316
! Ref: 170551316
! Ref: gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime551316
! Ref: 171551316
! Ref: Pretty-Printers for the GNAT runtime-Footnote-1553955
! Ref: Pretty-Printers for the GNAT runtime-Footnote-2554043
! Node: Profiling554127
! Ref: gnat_ugn/gnat_and_program_execution id20554274
! Ref: 172554274
! Ref: gnat_ugn/gnat_and_program_execution profiling554274
! Ref: 149554274
! Node: Profiling an Ada Program with gprof554435
! Ref: gnat_ugn/gnat_and_program_execution id21554518
! Ref: 173554518
! Ref: gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof554518
! Ref: 174554518
! Node: Compilation for profiling555735
! Ref: gnat_ugn/gnat_and_program_execution compilation-for-profiling555860
! Ref: 175555860
! Ref: gnat_ugn/gnat_and_program_execution id22555860
! Ref: 176555860
! Node: Program execution556644
! Ref: gnat_ugn/gnat_and_program_execution id23556791
! Ref: 177556791
! Ref: gnat_ugn/gnat_and_program_execution program-execution556791
! Ref: 178556791
! Node: Running gprof557283
! Ref: gnat_ugn/gnat_and_program_execution id24557440
! Ref: 179557440
! Ref: gnat_ugn/gnat_and_program_execution running-gprof557440
! Ref: 17a557440
! Node: Interpretation of profiling results560148
! Ref: gnat_ugn/gnat_and_program_execution id25560279
! Ref: 17b560279
! Ref: gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results560279
! Ref: 17c560279
! Node: Improving Performance560954
! Ref: gnat_ugn/gnat_and_program_execution id26561098
! Ref: 14a561098
! Ref: gnat_ugn/gnat_and_program_execution improving-performance561098
! Ref: 17d561098
! Node: Performance Considerations561608
! Ref: gnat_ugn/gnat_and_program_execution id27561722
! Ref: 17e561722
! Ref: gnat_ugn/gnat_and_program_execution performance-considerations561722
! Ref: 17f561722
! Node: Controlling Run-Time Checks562891
! Ref: gnat_ugn/gnat_and_program_execution controlling-run-time-checks563011
! Ref: 180563011
! Ref: gnat_ugn/gnat_and_program_execution id28563011
! Ref: 181563011
! Node: Use of Restrictions564569
! Ref: gnat_ugn/gnat_and_program_execution id29564717
! Ref: 182564717
! Ref: gnat_ugn/gnat_and_program_execution use-of-restrictions564717
! Ref: 183564717
! Node: Optimization Levels566075
! Ref: gnat_ugn/gnat_and_program_execution id30566220
! Ref: 184566220
! Ref: gnat_ugn/gnat_and_program_execution optimization-levels566220
! Ref: ef566220
! Node: Debugging Optimized Code570079
! Ref: gnat_ugn/gnat_and_program_execution debugging-optimized-code570228
! Ref: 185570228
! Ref: gnat_ugn/gnat_and_program_execution id31570228
! Ref: 186570228
! Node: Inlining of Subprograms575144
! Ref: gnat_ugn/gnat_and_program_execution id32575299
! Ref: 187575299
! Ref: gnat_ugn/gnat_and_program_execution inlining-of-subprograms575299
! Ref: 102575299
! Node: Floating Point Operations579979
! Ref: gnat_ugn/gnat_and_program_execution floating-point-operations580132
! Ref: 188580132
! Ref: gnat_ugn/gnat_and_program_execution id33580132
! Ref: 189580132
! Node: Vectorization of loops582315
! Ref: gnat_ugn/gnat_and_program_execution id34582472
! Ref: 18a582472
! Ref: gnat_ugn/gnat_and_program_execution vectorization-of-loops582472
! Ref: 18b582472
! Node: Other Optimization Switches587100
! Ref: gnat_ugn/gnat_and_program_execution id35587264
! Ref: 18c587264
! Ref: gnat_ugn/gnat_and_program_execution other-optimization-switches587264
! Ref: 18d587264
! Node: Optimization and Strict Aliasing587961
! Ref: gnat_ugn/gnat_and_program_execution id36588137
! Ref: 18e588137
! Ref: gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing588137
! Ref: e6588137
! Node: Aliased Variables and Optimization597168
! Ref: gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization597350
! Ref: 18f597350
! Ref: gnat_ugn/gnat_and_program_execution id37597350
! Ref: 190597350
! Node: Atomic Variables and Optimization599342
! Ref: gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization599517
! Ref: 191599517
! Ref: gnat_ugn/gnat_and_program_execution id38599517
! Ref: 192599517
! Node: Passive Task Optimization602117
! Ref: gnat_ugn/gnat_and_program_execution id39602249
! Ref: 193602249
! Ref: gnat_ugn/gnat_and_program_execution passive-task-optimization602249
! Ref: 194602249
! Node: Text_IO Suggestions604224
! Ref: gnat_ugn/gnat_and_program_execution id40604415
! Ref: 195604415
! Ref: gnat_ugn/gnat_and_program_execution text-io-suggestions604415
! Ref: 196604415
! Node: Reducing Size of Executables with Unused Subprogram/Data Elimination605351
! Ref: gnat_ugn/gnat_and_program_execution id41605507
! Ref: 197605507
! Ref: gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination605507
! Ref: 198605507
! Node: About unused subprogram/data elimination605927
! Ref: gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination606102
! Ref: 199606102
! Ref: gnat_ugn/gnat_and_program_execution id42606102
! Ref: 19a606102
! Node: Compilation options606743
! Ref: gnat_ugn/gnat_and_program_execution compilation-options606972
! Ref: 19b606972
! Ref: gnat_ugn/gnat_and_program_execution id43606972
! Ref: 19c606972
! Node: Example of unused subprogram/data elimination608361
! Ref: gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination608541
! Ref: 19d608541
! Ref: gnat_ugn/gnat_and_program_execution id44608541
! Ref: 19e608541
! Node: Overflow Check Handling in GNAT610013
! Ref: gnat_ugn/gnat_and_program_execution id45610190
! Ref: 14b610190
! Ref: gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat610190
! Ref: 19f610190
! Node: Background610473
! Ref: gnat_ugn/gnat_and_program_execution background610593
! Ref: 1a0610593
! Ref: gnat_ugn/gnat_and_program_execution id46610593
! Ref: 1a1610593
! Node: Management of Overflows in GNAT614266
! Ref: gnat_ugn/gnat_and_program_execution id47614422
! Ref: 1a2614422
! Ref: gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat614422
! Ref: 1a3614422
! Node: Specifying the Desired Mode619422
! Ref: gnat_ugn/gnat_and_program_execution id48619584
! Ref: 1a4619584
! Ref: gnat_ugn/gnat_and_program_execution specifying-the-desired-mode619584
! Ref: eb619584
! Node: Default Settings622698
! Ref: gnat_ugn/gnat_and_program_execution default-settings622849
! Ref: 1a5622849
! Ref: gnat_ugn/gnat_and_program_execution id49622849
! Ref: 1a6622849
! Node: Implementation Notes623413
! Ref: gnat_ugn/gnat_and_program_execution id50623528
! Ref: 1a7623528
! Ref: gnat_ugn/gnat_and_program_execution implementation-notes623528
! Ref: 1a8623528
! Node: Performing Dimensionality Analysis in GNAT625669
! Ref: gnat_ugn/gnat_and_program_execution id51625849
! Ref: 14c625849
! Ref: gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat625849
! Ref: 1a9625849
! Node: Stack Related Facilities637410
! Ref: gnat_ugn/gnat_and_program_execution id52637583
! Ref: 14d637583
! Ref: gnat_ugn/gnat_and_program_execution stack-related-facilities637583
! Ref: 1aa637583
! Node: Stack Overflow Checking637907
! Ref: gnat_ugn/gnat_and_program_execution id53638029
! Ref: 1ab638029
! Ref: gnat_ugn/gnat_and_program_execution stack-overflow-checking638029
! Ref: e7638029
! Node: Static Stack Usage Analysis639669
! Ref: gnat_ugn/gnat_and_program_execution id54639828
! Ref: 1ac639828
! Ref: gnat_ugn/gnat_and_program_execution static-stack-usage-analysis639828
! Ref: e8639828
! Node: Dynamic Stack Usage Analysis641227
! Ref: gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis641354
! Ref: 115641354
! Ref: gnat_ugn/gnat_and_program_execution id55641354
! Ref: 1ad641354
! Node: Memory Management Issues643283
! Ref: gnat_ugn/gnat_and_program_execution id56643405
! Ref: 14e643405
! Ref: gnat_ugn/gnat_and_program_execution memory-management-issues643405
! Ref: 1ae643405
! Node: Some Useful Memory Pools643761
! Ref: gnat_ugn/gnat_and_program_execution id57643885
! Ref: 1af643885
! Ref: gnat_ugn/gnat_and_program_execution some-useful-memory-pools643885
! Ref: 1b0643885
! Node: The GNAT Debug Pool Facility646540
! Ref: gnat_ugn/gnat_and_program_execution id58646664
! Ref: 1b1646664
! Ref: gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility646664
! Ref: 1b2646664
! Node: Platform-Specific Information651681
! Ref: gnat_ugn/platform_specific_information doc651825
! Ref: 1b3651825
! Ref: gnat_ugn/platform_specific_information id1651825
! Ref: 1b4651825
! Ref: gnat_ugn/platform_specific_information platform-specific-information651825
! Ref: d651825
! Node: Run-Time Libraries652224
! Ref: gnat_ugn/platform_specific_information id2652348
! Ref: 1b5652348
! Ref: gnat_ugn/platform_specific_information run-time-libraries652348
! Ref: 1b6652348
! Node: Summary of Run-Time Configurations653632
! Ref: gnat_ugn/platform_specific_information id3653723
! Ref: 1b7653723
! Ref: gnat_ugn/platform_specific_information summary-of-run-time-configurations653723
! Ref: 1b8653723
! Node: Specifying a Run-Time Library655036
! Ref: gnat_ugn/platform_specific_information id4655185
! Ref: 1b9655185
! Ref: gnat_ugn/platform_specific_information specifying-a-run-time-library655185
! Ref: 1ba655185
! Ref: gnat_ugn/platform_specific_information choosing-the-scheduling-policy657481
! Ref: 1bb657481
! Node: Choosing the Scheduling Policy657528
! Ref: gnat_ugn/platform_specific_information id5657626
! Ref: 1bc657626
! Node: GNU/Linux Topics659110
! Ref: gnat_ugn/platform_specific_information gnu-linux-topics659265
! Ref: 1bd659265
! Ref: gnat_ugn/platform_specific_information id6659265
! Ref: 1be659265
! Node: Required Packages on GNU/Linux659588
! Ref: gnat_ugn/platform_specific_information id7659745
! Ref: 1bf659745
! Ref: gnat_ugn/platform_specific_information required-packages-on-gnu-linux659745
! Ref: 1c0659745
! Node: Position Independent Executable PIE Enabled by Default on Linux660495
! Ref: gnat_ugn/platform_specific_information pie-enabled-by-default-on-linux660684
! Ref: 1c1660684
! Ref: gnat_ugn/platform_specific_information position-independent-executable-pie-enabled-by-default-on-linux660684
! Ref: 1c2660684
! Node: A GNU/Linux Debug Quirk662669
! Ref: gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk662819
! Ref: 1c3662819
! Ref: gnat_ugn/platform_specific_information id8662819
! Ref: 1c4662819
! Node: Microsoft Windows Topics663570
! Ref: gnat_ugn/platform_specific_information id9663709
! Ref: 1c5663709
! Ref: gnat_ugn/platform_specific_information microsoft-windows-topics663709
! Ref: 1c6663709
! Node: Using GNAT on Windows664130
! Ref: gnat_ugn/platform_specific_information id10664259
! Ref: 1c7664259
! Ref: gnat_ugn/platform_specific_information using-gnat-on-windows664259
! Ref: 1c8664259
! Node: Using a network installation of GNAT667078
! Ref: gnat_ugn/platform_specific_information id11667246
! Ref: 1c9667246
! Ref: gnat_ugn/platform_specific_information using-a-network-installation-of-gnat667246
! Ref: 1ca667246
! Node: CONSOLE and WINDOWS subsystems668147
! Ref: gnat_ugn/platform_specific_information console-and-windows-subsystems668309
! Ref: 1cb668309
! Ref: gnat_ugn/platform_specific_information id12668309
! Ref: 1cc668309
! Node: Temporary Files668822
! Ref: gnat_ugn/platform_specific_information id13668989
! Ref: 1cd668989
! Ref: gnat_ugn/platform_specific_information temporary-files668989
! Ref: 1ce668989
! Node: Disabling Command Line Argument Expansion669665
! Ref: gnat_ugn/platform_specific_information disabling-command-line-argument-expansion669825
! Ref: 1cf669825
! Node: Windows Socket Timeouts671447
! Ref: gnat_ugn/platform_specific_information windows-socket-timeouts671629
! Ref: 1d0671629
! Node: Mixed-Language Programming on Windows673855
! Ref: gnat_ugn/platform_specific_information id14674020
! Ref: 1d1674020
! Ref: gnat_ugn/platform_specific_information mixed-language-programming-on-windows674020
! Ref: 1d2674020
! Node: Windows Calling Conventions676567
! Ref: gnat_ugn/platform_specific_information id15676722
! Ref: 1d5676722
! Ref: gnat_ugn/platform_specific_information windows-calling-conventions676722
! Ref: 1d6676722
! Node: C Calling Convention677652
! Ref: gnat_ugn/platform_specific_information c-calling-convention677773
! Ref: 1d7677773
! Ref: gnat_ugn/platform_specific_information id16677773
! Ref: 1d8677773
! Node: Stdcall Calling Convention679253
! Ref: gnat_ugn/platform_specific_information id17679407
! Ref: 1da679407
! Ref: gnat_ugn/platform_specific_information stdcall-calling-convention679407
! Ref: 1d9679407
! Node: Win32 Calling Convention682196
! Ref: gnat_ugn/platform_specific_information id18682352
! Ref: 1db682352
! Ref: gnat_ugn/platform_specific_information win32-calling-convention682352
! Ref: 1dc682352
! Node: DLL Calling Convention682545
! Ref: gnat_ugn/platform_specific_information dll-calling-convention682666
! Ref: 1dd682666
! Ref: gnat_ugn/platform_specific_information id19682666
! Ref: 1de682666
! Node: Introduction to Dynamic Link Libraries DLLs682855
! Ref: gnat_ugn/platform_specific_information id20683039
! Ref: 1df683039
! Ref: gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls683039
! Ref: 1e0683039
! Node: Using DLLs with GNAT686436
! Ref: gnat_ugn/platform_specific_information id21686630
! Ref: 1e2686630
! Ref: gnat_ugn/platform_specific_information using-dlls-with-gnat686630
! Ref: 1d3686630
! Node: Creating an Ada Spec for the DLL Services688620
! Ref: gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services688755
! Ref: 1e3688755
! Ref: gnat_ugn/platform_specific_information id22688755
! Ref: 1e4688755
! Node: Creating an Import Library689719
! Ref: gnat_ugn/platform_specific_information creating-an-import-library689854
! Ref: 1e5689854
! Ref: gnat_ugn/platform_specific_information id23689854
! Ref: 1e6689854
! Ref: gnat_ugn/platform_specific_information the-definition-file690280
! Ref: 1e1690280
! Ref: gnat_ugn/platform_specific_information create-def-file-automatically691577
! Ref: 1e7691577
! Ref: gnat_ugn/platform_specific_information gnat-style-import-library692731
! Ref: 1e8692731
! Ref: gnat_ugn/platform_specific_information msvs-style-import-library693661
! Ref: 1ea693661
! Node: Building DLLs with GNAT Project files694382
! Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files694556
! Ref: 1d4694556
! Ref: gnat_ugn/platform_specific_information id24694556
! Ref: 1eb694556
! Node: Building DLLs with GNAT695055
! Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat695235
! Ref: 1ec695235
! Ref: gnat_ugn/platform_specific_information id25695235
! Ref: 1ed695235
! Node: Building DLLs with gnatdll697143
! Ref: gnat_ugn/platform_specific_information building-dlls-with-gnatdll697311
! Ref: 1ee697311
! Ref: gnat_ugn/platform_specific_information id26697311
! Ref: 1ef697311
! Node: Limitations When Using Ada DLLs from Ada699796
! Ref: gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada699932
! Ref: 1f3699932
! Node: Exporting Ada Entities700843
! Ref: gnat_ugn/platform_specific_information exporting-ada-entities701012
! Ref: 1f0701012
! Ref: gnat_ugn/platform_specific_information id27701012
! Ref: 1f4701012
! Node: Ada DLLs and Elaboration703901
! Ref: gnat_ugn/platform_specific_information ada-dlls-and-elaboration704021
! Ref: 1f1704021
! Ref: gnat_ugn/platform_specific_information id28704021
! Ref: 1f6704021
! Node: Ada DLLs and Finalization705459
! Ref: gnat_ugn/platform_specific_information ada-dlls-and-finalization705632
! Ref: 1f2705632
! Ref: gnat_ugn/platform_specific_information id29705632
! Ref: 1f7705632
! Node: Creating a Spec for Ada DLLs706303
! Ref: gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls706476
! Ref: 1f8706476
! Ref: gnat_ugn/platform_specific_information id30706476
! Ref: 1f9706476
! Node: Creating the Definition File707885
! Ref: gnat_ugn/platform_specific_information creating-the-definition-file708002
! Ref: 1f5708002
! Ref: gnat_ugn/platform_specific_information id31708002
! Ref: 1fa708002
! Node: Using gnatdll708760
! Ref: gnat_ugn/platform_specific_information id32708877
! Ref: 1fb708877
! Ref: gnat_ugn/platform_specific_information using-gnatdll708877
! Ref: 1e9708877
! Ref: gnat_ugn/platform_specific_information using-dlltool715413
! Ref: 1fc715413
! Node: GNAT and Windows Resources716780
! Ref: gnat_ugn/platform_specific_information gnat-and-windows-resources716985
! Ref: 1fd716985
! Ref: gnat_ugn/platform_specific_information id33716985
! Ref: 1fe716985
! Node: Building Resources718881
! Ref: gnat_ugn/platform_specific_information building-resources718992
! Ref: 1ff718992
! Ref: gnat_ugn/platform_specific_information id34718992
! Ref: 200718992
! Node: Compiling Resources719570
! Ref: gnat_ugn/platform_specific_information compiling-resources719705
! Ref: 201719705
! Ref: gnat_ugn/platform_specific_information id35719705
! Ref: 202719705
! Node: Using Resources720645
! Ref: gnat_ugn/platform_specific_information id36720753
! Ref: 203720753
! Ref: gnat_ugn/platform_specific_information using-resources720753
! Ref: 204720753
! Node: Using GNAT DLLs from Microsoft Visual Studio Applications721047
! Ref: gnat_ugn/platform_specific_information using-gnat-dll-from-msvs721239
! Ref: 205721239
! Ref: gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications721239
! Ref: 206721239
! Node: Debugging a DLL722801
! Ref: gnat_ugn/platform_specific_information debugging-a-dll722999
! Ref: 207722999
! Ref: gnat_ugn/platform_specific_information id37722999
! Ref: 208722999
! Node: Program and DLL Both Built with GCC/GNAT723863
! Ref: gnat_ugn/platform_specific_information id38724026
! Ref: 209724026
! Ref: gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat724026
! Ref: 20a724026
! Node: Program Built with Foreign Tools and DLL Built with GCC/GNAT725355
! Ref: gnat_ugn/platform_specific_information id39725518
! Ref: 20b725518
! Ref: gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat725518
! Ref: 20c725518
! Node: Setting Stack Size from gnatlink728920
! Ref: gnat_ugn/platform_specific_information id40729092
! Ref: 20d729092
! Ref: gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink729092
! Ref: 129729092
! Node: Setting Heap Size from gnatlink730305
! Ref: gnat_ugn/platform_specific_information id41730453
! Ref: 20e730453
! Ref: gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink730453
! Ref: 12a730453
! Node: Windows Specific Add-Ons731140
! Ref: gnat_ugn/platform_specific_information win32-specific-addons731273
! Ref: 20f731273
! Ref: gnat_ugn/platform_specific_information windows-specific-add-ons731273
! Ref: 210731273
! Node: Win32Ada731424
! Ref: gnat_ugn/platform_specific_information id42731510
! Ref: 211731510
! Ref: gnat_ugn/platform_specific_information win32ada731510
! Ref: 212731510
! Node: wPOSIX732107
! Ref: gnat_ugn/platform_specific_information id43732193
! Ref: 213732193
! Ref: gnat_ugn/platform_specific_information wposix732193
! Ref: 214732193
! Node: Mac OS Topics732877
! Ref: gnat_ugn/platform_specific_information id44732991
! Ref: 215732991
! Ref: gnat_ugn/platform_specific_information mac-os-topics732991
! Ref: 216732991
! Node: Codesigning the Debugger733144
! Ref: gnat_ugn/platform_specific_information codesigning-the-debugger733220
! Ref: 217733220
! Node: Example of Binder Output File735203
! Ref: gnat_ugn/example_of_binder_output doc735355
! Ref: 218735355
! Ref: gnat_ugn/example_of_binder_output example-of-binder-output-file735355
! Ref: e735355
! Ref: gnat_ugn/example_of_binder_output id1735355
! Ref: 219735355
! Node: Elaboration Order Handling in GNAT766438
! Ref: gnat_ugn/elaboration_order_handling_in_gnat doc766577
! Ref: 21a766577
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat766577
! Ref: f766577
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id1766577
! Ref: 21b766577
! Node: Elaboration Code767331
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-code767446
! Ref: 21c767446
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id2767446
! Ref: 21d767446
! Node: Elaboration Order771279
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order771433
! Ref: 21e771433
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id3771433
! Ref: 21f771433
! Node: Checking the Elaboration Order775075
! Ref: gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order775253
! Ref: 220775253
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id4775253
! Ref: 221775253
! Node: Controlling the Elaboration Order in Ada776929
! Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada777131
! Ref: 222777131
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id5777131
! Ref: 223777131
! Node: Controlling the Elaboration Order in GNAT785693
! Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat785890
! Ref: 224785890
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id6785890
! Ref: 225785890
! Node: Mixing Elaboration Models789721
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id7789893
! Ref: 226789893
! Ref: gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models789893
! Ref: 227789893
! Node: ABE Diagnostics790906
! Ref: gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics791054
! Ref: 228791054
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id8791054
! Ref: 229791054
! Node: SPARK Diagnostics794572
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id9794720
! Ref: 22a794720
! Ref: gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics794720
! Ref: 22b794720
! Node: Elaboration Circularities795491
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities795659
! Ref: 22c795659
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id10795659
! Ref: 22d795659
! Node: Resolving Elaboration Circularities797906
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id11798094
! Ref: 22e798094
! Ref: gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities798094
! Ref: 22f798094
! Node: Elaboration-related Compiler Switches805619
! Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches805827
! Ref: 230805827
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id12805827
! Ref: 231805827
! Node: Summary of Procedures for Elaboration Control810656
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id13810868
! Ref: 232810868
! Ref: gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control810868
! Ref: 233810868
! Node: Inspecting the Chosen Elaboration Order812719
! Ref: gnat_ugn/elaboration_order_handling_in_gnat id14812885
! Ref: 234812885
! Ref: gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order812885
! Ref: 235812885
! Node: Inline Assembler817500
! Ref: gnat_ugn/inline_assembler doc817640
! Ref: 236817640
! Ref: gnat_ugn/inline_assembler id1817640
! Ref: 237817640
! Ref: gnat_ugn/inline_assembler inline-assembler817640
! Ref: 10817640
! Node: Basic Assembler Syntax819183
! Ref: gnat_ugn/inline_assembler basic-assembler-syntax819305
! Ref: 238819305
! Ref: gnat_ugn/inline_assembler id2819305
! Ref: 239819305
! Node: A Simple Example of Inline Assembler821291
! Ref: gnat_ugn/inline_assembler a-simple-example-of-inline-assembler821458
! Ref: 23a821458
! Ref: gnat_ugn/inline_assembler id3821458
! Ref: 23b821458
! Node: Output Variables in Inline Assembler824763
! Ref: gnat_ugn/inline_assembler id4824943
! Ref: 23c824943
! Ref: gnat_ugn/inline_assembler output-variables-in-inline-assembler824943
! Ref: 23d824943
! Node: Input Variables in Inline Assembler833027
! Ref: gnat_ugn/inline_assembler id5833201
! Ref: 23e833201
! Ref: gnat_ugn/inline_assembler input-variables-in-inline-assembler833201
! Ref: 23f833201
! Node: Inlining Inline Assembler Code835589
! Ref: gnat_ugn/inline_assembler id6835750
! Ref: 240835750
! Ref: gnat_ugn/inline_assembler inlining-inline-assembler-code835750
! Ref: 241835750
! Node: Other Asm Functionality837649
! Ref: gnat_ugn/inline_assembler id7837766
! Ref: 242837766
! Ref: gnat_ugn/inline_assembler other-asm-functionality837766
! Ref: 243837766
! Node: The Clobber Parameter838080
! Ref: gnat_ugn/inline_assembler id8838194
! Ref: 244838194
! Ref: gnat_ugn/inline_assembler the-clobber-parameter838194
! Ref: 245838194
! Node: The Volatile Parameter840165
! Ref: gnat_ugn/inline_assembler id9840279
! Ref: 246840279
! Ref: gnat_ugn/inline_assembler the-volatile-parameter840279
! Ref: 247840279
! Node: GNU Free Documentation License841435
! Ref: share/gnu_free_documentation_license doc841546
! Ref: 248841546
! Ref: share/gnu_free_documentation_license gnu-fdl841546
! Ref: 1841546
! Ref: share/gnu_free_documentation_license gnu-free-documentation-license841546
! Ref: 249841546
! Node: Index864888
! Ref: gnat_ugn/gnat_utility_programs switches-related-to-project-files1005477
! Ref: d11005478
  
  End Tag Table
  
diff -Nrcpad gcc-14.3.0/gcc/doc/gpl.7 gcc-14.3.0-RC-20260619/gcc/doc/gpl.7
*** gcc-14.3.0/gcc/doc/gpl.7	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/gpl.7	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,144 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "GPL 7"
! .TH GPL 7 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  gpl \- GNU General Public License
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! .SS "\s-1GNU\s0 General Public License"
  .IX Subsection "GNU General Public License"
  .SS "Version 3, 29 June 2007"
  .IX Subsection "Version 3, 29 June 2007"
--- 38,73 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "GPL 7"
! .TH GPL 7 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  gpl \- GNU General Public License
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! .SS "GNU General Public License"
  .IX Subsection "GNU General Public License"
  .SS "Version 3, 29 June 2007"
  .IX Subsection "Version 3, 29 June 2007"
*************** gpl \- GNU General Public License
*** 148,164 ****
  \&        Everyone is permitted to copy and distribute verbatim copies of this
  \&        license document, but changing it is not allowed.
  .Ve
! .SS "Preamble"
  .IX Subsection "Preamble"
! The \s-1GNU\s0 General Public License is a free, copyleft license for
  software and other kinds of works.
  .PP
  The licenses for most software and other practical works are designed
  to take away your freedom to share and change the works.  By contrast,
! the \s-1GNU\s0 General Public License is intended to guarantee your freedom
! to share and change all versions of a program\*(--to make sure it remains
  free software for all its users.  We, the Free Software Foundation,
! use the \s-1GNU\s0 General Public License for most of our software; it
  applies also to any other work released this way by its authors.  You
  can apply it to your programs, too.
  .PP
--- 77,93 ----
  \&        Everyone is permitted to copy and distribute verbatim copies of this
  \&        license document, but changing it is not allowed.
  .Ve
! .SS Preamble
  .IX Subsection "Preamble"
! The GNU General Public License is a free, copyleft license for
  software and other kinds of works.
  .PP
  The licenses for most software and other practical works are designed
  to take away your freedom to share and change the works.  By contrast,
! the GNU General Public License is intended to guarantee your freedom
! to share and change all versions of a program\-\-to make sure it remains
  free software for all its users.  We, the Free Software Foundation,
! use the GNU General Public License for most of our software; it
  applies also to any other work released this way by its authors.  You
  can apply it to your programs, too.
  .PP
*************** freedoms that you received.  You must ma
*** 181,251 ****
  receive or can get the source code.  And you must show them these
  terms so they know their rights.
  .PP
! Developers that use the \s-1GNU GPL\s0 protect your rights with two steps:
  (1) assert copyright on the software, and (2) offer you this License
  giving you legal permission to copy, distribute and/or modify it.
  .PP
! For the developers' and authors' protection, the \s-1GPL\s0 clearly explains
! that there is no warranty for this free software.  For both users' and
! authors' sake, the \s-1GPL\s0 requires that modified versions be marked as
  changed, so that their problems will not be attributed erroneously to
  authors of previous versions.
  .PP
  Some devices are designed to deny users access to install or run
  modified versions of the software inside them, although the
  manufacturer can do so.  This is fundamentally incompatible with the
! aim of protecting users' freedom to change the software.  The
  systematic pattern of such abuse occurs in the area of products for
  individuals to use, which is precisely where it is most unacceptable.
! Therefore, we have designed this version of the \s-1GPL\s0 to prohibit the
  practice for those products.  If such problems arise substantially in
  other domains, we stand ready to extend this provision to those
! domains in future versions of the \s-1GPL,\s0 as needed to protect the
  freedom of users.
  .PP
  Finally, every program is threatened constantly by software patents.
  States should not allow patents to restrict development and use of
! software on general-purpose computers, but in those that do, we wish
  to avoid the special danger that patents applied to a free program
! could make it effectively proprietary.  To prevent this, the \s-1GPL\s0
! assures that patents cannot be used to render the program non-free.
  .PP
  The precise terms and conditions for copying, distribution and
  modification follow.
! .SS "\s-1TERMS AND CONDITIONS\s0"
  .IX Subsection "TERMS AND CONDITIONS"
  .IP "0. Definitions." 4
  .IX Item "0. Definitions."
! \&\*(L"This License\*(R" refers to version 3 of the \s-1GNU\s0 General Public License.
  .Sp
! \&\*(L"Copyright\*(R" also means copyright-like laws that apply to other kinds
  of works, such as semiconductor masks.
  .Sp
! \&\*(L"The Program\*(R" refers to any copyrightable work licensed under this
! License.  Each licensee is addressed as \*(L"you\*(R".  \*(L"Licensees\*(R" and
! \&\*(L"recipients\*(R" may be individuals or organizations.
  .Sp
! To \*(L"modify\*(R" a work means to copy from or adapt all or part of the work
  in a fashion requiring copyright permission, other than the making of
! an exact copy.  The resulting work is called a \*(L"modified version\*(R" of
! the earlier work or a work \*(L"based on\*(R" the earlier work.
  .Sp
! A \*(L"covered work\*(R" means either the unmodified Program or a work based
  on the Program.
  .Sp
! To \*(L"propagate\*(R" a work means to do anything with it that, without
  permission, would make you directly or secondarily liable for
  infringement under applicable copyright law, except executing it on a
  computer or modifying a private copy.  Propagation includes copying,
  distribution (with or without modification), making available to the
  public, and in some countries other activities as well.
  .Sp
! To \*(L"convey\*(R" a work means any kind of propagation that enables other
  parties to make or receive copies.  Mere interaction with a user
  through a computer network, with no transfer of a copy, is not
  conveying.
  .Sp
! An interactive user interface displays \*(L"Appropriate Legal Notices\*(R" to
  the extent that it includes a convenient and prominently visible
  feature that (1) displays an appropriate copyright notice, and (2)
  tells the user that there is no warranty for the work (except to the
--- 110,180 ----
  receive or can get the source code.  And you must show them these
  terms so they know their rights.
  .PP
! Developers that use the GNU GPL protect your rights with two steps:
  (1) assert copyright on the software, and (2) offer you this License
  giving you legal permission to copy, distribute and/or modify it.
  .PP
! For the developers\*(Aq and authors\*(Aq protection, the GPL clearly explains
! that there is no warranty for this free software.  For both users\*(Aq and
! authors\*(Aq sake, the GPL requires that modified versions be marked as
  changed, so that their problems will not be attributed erroneously to
  authors of previous versions.
  .PP
  Some devices are designed to deny users access to install or run
  modified versions of the software inside them, although the
  manufacturer can do so.  This is fundamentally incompatible with the
! aim of protecting users\*(Aq freedom to change the software.  The
  systematic pattern of such abuse occurs in the area of products for
  individuals to use, which is precisely where it is most unacceptable.
! Therefore, we have designed this version of the GPL to prohibit the
  practice for those products.  If such problems arise substantially in
  other domains, we stand ready to extend this provision to those
! domains in future versions of the GPL, as needed to protect the
  freedom of users.
  .PP
  Finally, every program is threatened constantly by software patents.
  States should not allow patents to restrict development and use of
! software on general\-purpose computers, but in those that do, we wish
  to avoid the special danger that patents applied to a free program
! could make it effectively proprietary.  To prevent this, the GPL
! assures that patents cannot be used to render the program non\-free.
  .PP
  The precise terms and conditions for copying, distribution and
  modification follow.
! .SS "TERMS AND CONDITIONS"
  .IX Subsection "TERMS AND CONDITIONS"
  .IP "0. Definitions." 4
  .IX Item "0. Definitions."
! "This License" refers to version 3 of the GNU General Public License.
  .Sp
! "Copyright" also means copyright\-like laws that apply to other kinds
  of works, such as semiconductor masks.
  .Sp
! "The Program" refers to any copyrightable work licensed under this
! License.  Each licensee is addressed as "you".  "Licensees" and
! "recipients" may be individuals or organizations.
  .Sp
! To "modify" a work means to copy from or adapt all or part of the work
  in a fashion requiring copyright permission, other than the making of
! an exact copy.  The resulting work is called a "modified version" of
! the earlier work or a work "based on" the earlier work.
  .Sp
! A "covered work" means either the unmodified Program or a work based
  on the Program.
  .Sp
! To "propagate" a work means to do anything with it that, without
  permission, would make you directly or secondarily liable for
  infringement under applicable copyright law, except executing it on a
  computer or modifying a private copy.  Propagation includes copying,
  distribution (with or without modification), making available to the
  public, and in some countries other activities as well.
  .Sp
! To "convey" a work means any kind of propagation that enables other
  parties to make or receive copies.  Mere interaction with a user
  through a computer network, with no transfer of a copy, is not
  conveying.
  .Sp
! An interactive user interface displays "Appropriate Legal Notices" to
  the extent that it includes a convenient and prominently visible
  feature that (1) displays an appropriate copyright notice, and (2)
  tells the user that there is no warranty for the work (except to the
*************** the interface presents a list of user co
*** 255,285 ****
  menu, a prominent item in the list meets this criterion.
  .IP "1. Source Code." 4
  .IX Item "1. Source Code."
! The \*(L"source code\*(R" for a work means the preferred form of the work for
! making modifications to it.  \*(L"Object code\*(R" means any non-source form
  of a work.
  .Sp
! A \*(L"Standard Interface\*(R" means an interface that either is an official
  standard defined by a recognized standards body, or, in the case of
  interfaces specified for a particular programming language, one that
  is widely used among developers working in that language.
  .Sp
! The \*(L"System Libraries\*(R" of an executable work include anything, other
  than the work as a whole, that (a) is included in the normal form of
  packaging a Major Component, but which is not part of that Major
  Component, and (b) serves only to enable use of the work with that
  Major Component, or to implement a Standard Interface for which an
  implementation is available to the public in source code form.  A
! \&\*(L"Major Component\*(R", in this context, means a major essential component
  (kernel, window system, and so on) of the specific operating system
  (if any) on which the executable work runs, or a compiler used to
  produce the work, or an object code interpreter used to run it.
  .Sp
! The \*(L"Corresponding Source\*(R" for a work in object code form means all
  the source code needed to generate, install, and (for an executable
  work) run the object code and to modify the work, including scripts to
! control those activities.  However, it does not include the work's
! System Libraries, or general-purpose tools or generally available free
  programs which are used unmodified in performing those activities but
  which are not part of the work.  For example, Corresponding Source
  includes interface definition files associated with source files for
--- 184,214 ----
  menu, a prominent item in the list meets this criterion.
  .IP "1. Source Code." 4
  .IX Item "1. Source Code."
! The "source code" for a work means the preferred form of the work for
! making modifications to it.  "Object code" means any non\-source form
  of a work.
  .Sp
! A "Standard Interface" means an interface that either is an official
  standard defined by a recognized standards body, or, in the case of
  interfaces specified for a particular programming language, one that
  is widely used among developers working in that language.
  .Sp
! The "System Libraries" of an executable work include anything, other
  than the work as a whole, that (a) is included in the normal form of
  packaging a Major Component, but which is not part of that Major
  Component, and (b) serves only to enable use of the work with that
  Major Component, or to implement a Standard Interface for which an
  implementation is available to the public in source code form.  A
! "Major Component", in this context, means a major essential component
  (kernel, window system, and so on) of the specific operating system
  (if any) on which the executable work runs, or a compiler used to
  produce the work, or an object code interpreter used to run it.
  .Sp
! The "Corresponding Source" for a work in object code form means all
  the source code needed to generate, install, and (for an executable
  work) run the object code and to modify the work, including scripts to
! control those activities.  However, it does not include the work\*(Aqs
! System Libraries, or general\-purpose tools or generally available free
  programs which are used unmodified in performing those activities but
  which are not part of the work.  For example, Corresponding Source
  includes interface definition files associated with source files for
*************** copyrighted material outside their relat
*** 317,327 ****
  Conveying under any other circumstances is permitted solely under the
  conditions stated below.  Sublicensing is not allowed; section 10
  makes it unnecessary.
! .IP "3. Protecting Users' Legal Rights From Anti-Circumvention Law." 4
  .IX Item "3. Protecting Users' Legal Rights From Anti-Circumvention Law."
  No covered work shall be deemed part of an effective technological
  measure under any applicable law fulfilling obligations under article
! 11 of the \s-1WIPO\s0 copyright treaty adopted on 20 December 1996, or
  similar laws prohibiting or restricting circumvention of such
  measures.
  .Sp
--- 246,256 ----
  Conveying under any other circumstances is permitted solely under the
  conditions stated below.  Sublicensing is not allowed; section 10
  makes it unnecessary.
! .IP "3. Protecting Users\*(Aq Legal Rights From Anti\-Circumvention Law." 4
  .IX Item "3. Protecting Users' Legal Rights From Anti-Circumvention Law."
  No covered work shall be deemed part of an effective technological
  measure under any applicable law fulfilling obligations under article
! 11 of the WIPO copyright treaty adopted on 20 December 1996, or
  similar laws prohibiting or restricting circumvention of such
  measures.
  .Sp
*************** circumvention of technological measures
*** 330,344 ****
  circumvention is effected by exercising rights under this License with
  respect to the covered work, and you disclaim any intention to limit
  operation or modification of the work as a means of enforcing, against
! the work's users, your or third parties' legal rights to forbid
  circumvention of technological measures.
  .IP "4. Conveying Verbatim Copies." 4
  .IX Item "4. Conveying Verbatim Copies."
! You may convey verbatim copies of the Program's source code as you
  receive it, in any medium, provided that you conspicuously and
  appropriately publish on each copy an appropriate copyright notice;
  keep intact all notices stating that this License and any
! non-permissive terms added in accord with section 7 apply to the code;
  keep intact all notices of the absence of any warranty; and give all
  recipients a copy of this License along with the Program.
  .Sp
--- 259,273 ----
  circumvention is effected by exercising rights under this License with
  respect to the covered work, and you disclaim any intention to limit
  operation or modification of the work as a means of enforcing, against
! the work\*(Aqs users, your or third parties\*(Aq legal rights to forbid
  circumvention of technological measures.
  .IP "4. Conveying Verbatim Copies." 4
  .IX Item "4. Conveying Verbatim Copies."
! You may convey verbatim copies of the Program\*(Aqs source code as you
  receive it, in any medium, provided that you conspicuously and
  appropriately publish on each copy an appropriate copyright notice;
  keep intact all notices stating that this License and any
! non\-permissive terms added in accord with section 7 apply to the code;
  keep intact all notices of the absence of any warranty; and give all
  recipients a copy of this License along with the Program.
  .Sp
*************** produce it from the Program, in the form
*** 351,367 ****
  terms of section 4, provided that you also meet all of these
  conditions:
  .RS 4
! .IP "a." 4
  .IX Item "a."
  The work must carry prominent notices stating that you modified it,
  and giving a relevant date.
! .IP "b." 4
  .IX Item "b."
  The work must carry prominent notices stating that it is released
  under this License and any conditions added under section 7.  This
! requirement modifies the requirement in section 4 to \*(L"keep intact all
! notices\*(R".
! .IP "c." 4
  .IX Item "c."
  You must license the entire work, as a whole, under this License to
  anyone who comes into possession of a copy.  This License will
--- 280,296 ----
  terms of section 4, provided that you also meet all of these
  conditions:
  .RS 4
! .IP a. 4
  .IX Item "a."
  The work must carry prominent notices stating that you modified it,
  and giving a relevant date.
! .IP b. 4
  .IX Item "b."
  The work must carry prominent notices stating that it is released
  under this License and any conditions added under section 7.  This
! requirement modifies the requirement in section 4 to "keep intact all
! notices".
! .IP c. 4
  .IX Item "c."
  You must license the entire work, as a whole, under this License to
  anyone who comes into possession of a copy.  This License will
*************** to the whole of the work, and all its pa
*** 370,376 ****
  are packaged.  This License gives no permission to license the work in
  any other way, but it does not invalidate such permission if you have
  separately received it.
! .IP "d." 4
  .IX Item "d."
  If the work has interactive user interfaces, each must display
  Appropriate Legal Notices; however, if the Program has interactive
--- 299,305 ----
  are packaged.  This License gives no permission to license the work in
  any other way, but it does not invalidate such permission if you have
  separately received it.
! .IP d. 4
  .IX Item "d."
  If the work has interactive user interfaces, each must display
  Appropriate Legal Notices; however, if the Program has interactive
*************** A compilation of a covered work with oth
*** 383,408 ****
  works, which are not by their nature extensions of the covered work,
  and which are not combined with it such as to form a larger program,
  in or on a volume of a storage or distribution medium, is called an
! \&\*(L"aggregate\*(R" if the compilation and its resulting copyright are not
! used to limit the access or legal rights of the compilation's users
  beyond what the individual works permit.  Inclusion of a covered work
  in an aggregate does not cause this License to apply to the other
  parts of the aggregate.
  .RE
! .IP "6. Conveying Non-Source Forms." 4
  .IX Item "6. Conveying Non-Source Forms."
  You may convey a covered work in object code form under the terms of
! sections 4 and 5, provided that you also convey the machine-readable
  Corresponding Source under the terms of this License, in one of these
  ways:
  .RS 4
! .IP "a." 4
  .IX Item "a."
  Convey the object code in, or embodied in, a physical product
  (including a physical distribution medium), accompanied by the
  Corresponding Source fixed on a durable physical medium customarily
  used for software interchange.
! .IP "b." 4
  .IX Item "b."
  Convey the object code in, or embodied in, a physical product
  (including a physical distribution medium), accompanied by a written
--- 312,337 ----
  works, which are not by their nature extensions of the covered work,
  and which are not combined with it such as to form a larger program,
  in or on a volume of a storage or distribution medium, is called an
! "aggregate" if the compilation and its resulting copyright are not
! used to limit the access or legal rights of the compilation\*(Aqs users
  beyond what the individual works permit.  Inclusion of a covered work
  in an aggregate does not cause this License to apply to the other
  parts of the aggregate.
  .RE
! .IP "6. Conveying Non\-Source Forms." 4
  .IX Item "6. Conveying Non-Source Forms."
  You may convey a covered work in object code form under the terms of
! sections 4 and 5, provided that you also convey the machine\-readable
  Corresponding Source under the terms of this License, in one of these
  ways:
  .RS 4
! .IP a. 4
  .IX Item "a."
  Convey the object code in, or embodied in, a physical product
  (including a physical distribution medium), accompanied by the
  Corresponding Source fixed on a durable physical medium customarily
  used for software interchange.
! .IP b. 4
  .IX Item "b."
  Convey the object code in, or embodied in, a physical product
  (including a physical distribution medium), accompanied by a written
*************** covered by this License, on a durable ph
*** 414,427 ****
  for software interchange, for a price no more than your reasonable
  cost of physically performing this conveying of source, or (2) access
  to copy the Corresponding Source from a network server at no charge.
! .IP "c." 4
  .IX Item "c."
  Convey individual copies of the object code with a copy of the written
  offer to provide the Corresponding Source.  This alternative is
  allowed only occasionally and noncommercially, and only if you
  received the object code with such an offer, in accord with subsection
  6b.
! .IP "d." 4
  .IX Item "d."
  Convey the object code by offering access from a designated place
  (gratis or for a charge), and offer equivalent access to the
--- 343,356 ----
  for software interchange, for a price no more than your reasonable
  cost of physically performing this conveying of source, or (2) access
  to copy the Corresponding Source from a network server at no charge.
! .IP c. 4
  .IX Item "c."
  Convey individual copies of the object code with a copy of the written
  offer to provide the Corresponding Source.  This alternative is
  allowed only occasionally and noncommercially, and only if you
  received the object code with such an offer, in accord with subsection
  6b.
! .IP d. 4
  .IX Item "d."
  Convey the object code by offering access from a designated place
  (gratis or for a charge), and offer equivalent access to the
*************** next to the object code saying where to
*** 435,443 ****
  Regardless of what server hosts the Corresponding Source, you remain
  obligated to ensure that it is available for as long as needed to
  satisfy these requirements.
! .IP "e." 4
  .IX Item "e."
! Convey the object code using peer-to-peer transmission, provided you
  inform other peers where the object code and Corresponding Source of
  the work are being offered to the general public at no charge under
  subsection 6d.
--- 364,372 ----
  Regardless of what server hosts the Corresponding Source, you remain
  obligated to ensure that it is available for as long as needed to
  satisfy these requirements.
! .IP e. 4
  .IX Item "e."
! Convey the object code using peer\-to\-peer transmission, provided you
  inform other peers where the object code and Corresponding Source of
  the work are being offered to the general public at no charge under
  subsection 6d.
*************** A separable portion of the object code,
*** 448,468 ****
  from the Corresponding Source as a System Library, need not be
  included in conveying the object code work.
  .Sp
! A \*(L"User Product\*(R" is either (1) a \*(L"consumer product\*(R", which means any
  tangible personal property which is normally used for personal,
  family, or household purposes, or (2) anything designed or sold for
  incorporation into a dwelling.  In determining whether a product is a
  consumer product, doubtful cases shall be resolved in favor of
  coverage.  For a particular product received by a particular user,
! \&\*(L"normally used\*(R" refers to a typical or common use of that class of
  product, regardless of the status of the particular user or of the way
  in which the particular user actually uses, or expects or is expected
  to use, the product.  A product is a consumer product regardless of
  whether the product has substantial commercial, industrial or
! non-consumer uses, unless such uses represent the only significant
  mode of use of the product.
  .Sp
! \&\*(L"Installation Information\*(R" for a User Product means any methods,
  procedures, authorization keys, or other information required to
  install and execute modified versions of a covered work in that User
  Product from a modified version of its Corresponding Source.  The
--- 377,397 ----
  from the Corresponding Source as a System Library, need not be
  included in conveying the object code work.
  .Sp
! A "User Product" is either (1) a "consumer product", which means any
  tangible personal property which is normally used for personal,
  family, or household purposes, or (2) anything designed or sold for
  incorporation into a dwelling.  In determining whether a product is a
  consumer product, doubtful cases shall be resolved in favor of
  coverage.  For a particular product received by a particular user,
! "normally used" refers to a typical or common use of that class of
  product, regardless of the status of the particular user or of the way
  in which the particular user actually uses, or expects or is expected
  to use, the product.  A product is a consumer product regardless of
  whether the product has substantial commercial, industrial or
! non\-consumer uses, unless such uses represent the only significant
  mode of use of the product.
  .Sp
! "Installation Information" for a User Product means any methods,
  procedures, authorization keys, or other information required to
  install and execute modified versions of a covered work in that User
  Product from a modified version of its Corresponding Source.  The
*************** Corresponding Source conveyed under this
*** 479,485 ****
  by the Installation Information.  But this requirement does not apply
  if neither you nor any third party retains the ability to install
  modified object code on the User Product (for example, the work has
! been installed in \s-1ROM\s0).
  .Sp
  The requirement to provide Installation Information does not include a
  requirement to continue to provide support service, warranty, or
--- 408,414 ----
  by the Installation Information.  But this requirement does not apply
  if neither you nor any third party retains the ability to install
  modified object code on the User Product (for example, the work has
! been installed in ROM).
  .Sp
  The requirement to provide Installation Information does not include a
  requirement to continue to provide support service, warranty, or
*************** unpacking, reading or copying.
*** 498,504 ****
  .RE
  .IP "7. Additional Terms." 4
  .IX Item "7. Additional Terms."
! \&\*(L"Additional permissions\*(R" are terms that supplement the terms of this
  License by making exceptions from one or more of its conditions.
  Additional permissions that are applicable to the entire Program shall
  be treated as though they were included in this License, to the extent
--- 427,433 ----
  .RE
  .IP "7. Additional Terms." 4
  .IX Item "7. Additional Terms."
! "Additional permissions" are terms that supplement the terms of this
  License by making exceptions from one or more of its conditions.
  Additional permissions that are applicable to the entire Program shall
  be treated as though they were included in this License, to the extent
*************** Notwithstanding any other provision of t
*** 518,546 ****
  add to a covered work, you may (if authorized by the copyright holders
  of that material) supplement the terms of this License with terms:
  .RS 4
! .IP "a." 4
  .IX Item "a."
  Disclaiming warranty or limiting liability differently from the terms
  of sections 15 and 16 of this License; or
! .IP "b." 4
  .IX Item "b."
  Requiring preservation of specified reasonable legal notices or author
  attributions in that material or in the Appropriate Legal Notices
  displayed by works containing it; or
! .IP "c." 4
  .IX Item "c."
  Prohibiting misrepresentation of the origin of that material, or
  requiring that modified versions of such material be marked in
  reasonable ways as different from the original version; or
! .IP "d." 4
  .IX Item "d."
  Limiting the use for publicity purposes of names of licensors or
  authors of the material; or
! .IP "e." 4
  .IX Item "e."
  Declining to grant rights under trademark law for use of some trade
  names, trademarks, or service marks; or
! .IP "f." 4
  .IX Item "f."
  Requiring indemnification of licensors and authors of that material by
  anyone who conveys the material (or modified versions of it) with
--- 447,475 ----
  add to a covered work, you may (if authorized by the copyright holders
  of that material) supplement the terms of this License with terms:
  .RS 4
! .IP a. 4
  .IX Item "a."
  Disclaiming warranty or limiting liability differently from the terms
  of sections 15 and 16 of this License; or
! .IP b. 4
  .IX Item "b."
  Requiring preservation of specified reasonable legal notices or author
  attributions in that material or in the Appropriate Legal Notices
  displayed by works containing it; or
! .IP c. 4
  .IX Item "c."
  Prohibiting misrepresentation of the origin of that material, or
  requiring that modified versions of such material be marked in
  reasonable ways as different from the original version; or
! .IP d. 4
  .IX Item "d."
  Limiting the use for publicity purposes of names of licensors or
  authors of the material; or
! .IP e. 4
  .IX Item "e."
  Declining to grant rights under trademark law for use of some trade
  names, trademarks, or service marks; or
! .IP f. 4
  .IX Item "f."
  Requiring indemnification of licensors and authors of that material by
  anyone who conveys the material (or modified versions of it) with
*************** licensors and authors.
*** 550,557 ****
  .RE
  .RS 4
  .Sp
! All other non-permissive additional terms are considered \*(L"further
! restrictions\*(R" within the meaning of section 10.  If the Program as you
  received it, or any part of it, contains a notice stating that it is
  governed by this License along with a term that is a further
  restriction, you may remove that term.  If a license document contains
--- 479,486 ----
  .RE
  .RS 4
  .Sp
! All other non\-permissive additional terms are considered "further
! restrictions" within the meaning of section 10.  If the Program as you
  received it, or any part of it, contains a notice stating that it is
  governed by this License along with a term that is a further
  restriction, you may remove that term.  If a license document contains
*************** must place, in the relevant source files
*** 565,571 ****
  additional terms that apply to those files, or a notice indicating
  where to find the applicable terms.
  .Sp
! Additional terms, permissive or non-permissive, may be stated in the
  form of a separately written license, or stated as exceptions; the
  above requirements apply either way.
  .RE
--- 494,500 ----
  additional terms that apply to those files, or a notice indicating
  where to find the applicable terms.
  .Sp
! Additional terms, permissive or non\-permissive, may be stated in the
  form of a separately written license, or stated as exceptions; the
  above requirements apply either way.
  .RE
*************** material under section 10.
*** 600,606 ****
  .IX Item "9. Acceptance Not Required for Having Copies."
  You are not required to accept this License in order to receive or run
  a copy of the Program.  Ancillary propagation of a covered work
! occurring solely as a consequence of using peer-to-peer transmission
  to receive a copy likewise does not require acceptance.  However,
  nothing other than this License grants you permission to propagate or
  modify any covered work.  These actions infringe copyright if you do
--- 529,535 ----
  .IX Item "9. Acceptance Not Required for Having Copies."
  You are not required to accept this License in order to receive or run
  a copy of the Program.  Ancillary propagation of a covered work
! occurring solely as a consequence of using peer\-to\-peer transmission
  to receive a copy likewise does not require acceptance.  However,
  nothing other than this License grants you permission to propagate or
  modify any covered work.  These actions infringe copyright if you do
*************** receives a license from the original lic
*** 613,624 ****
  propagate that work, subject to this License.  You are not responsible
  for enforcing compliance by third parties with this License.
  .Sp
! An \*(L"entity transaction\*(R" is a transaction transferring control of an
  organization, or substantially all assets of one, or subdividing an
  organization, or merging organizations.  If propagation of a covered
  work results from an entity transaction, each party to that
  transaction who receives a copy of the work also receives whatever
! licenses to the work the party's predecessor in interest had or could
  give under the previous paragraph, plus a right to possession of the
  Corresponding Source of the work from the predecessor in interest, if
  the predecessor has it or can get it with reasonable efforts.
--- 542,553 ----
  propagate that work, subject to this License.  You are not responsible
  for enforcing compliance by third parties with this License.
  .Sp
! An "entity transaction" is a transaction transferring control of an
  organization, or substantially all assets of one, or subdividing an
  organization, or merging organizations.  If propagation of a covered
  work results from an entity transaction, each party to that
  transaction who receives a copy of the work also receives whatever
! licenses to the work the party\*(Aqs predecessor in interest had or could
  give under the previous paragraph, plus a right to possession of the
  Corresponding Source of the work from the predecessor in interest, if
  the predecessor has it or can get it with reasonable efforts.
*************** You may not impose any further restricti
*** 627,660 ****
  rights granted or affirmed under this License.  For example, you may
  not impose a license fee, royalty, or other charge for exercise of
  rights granted under this License, and you may not initiate litigation
! (including a cross-claim or counterclaim in a lawsuit) alleging that
  any patent claim is infringed by making, using, selling, offering for
  sale, or importing the Program or any portion of it.
  .IP "11. Patents." 4
  .IX Item "11. Patents."
! A \*(L"contributor\*(R" is a copyright holder who authorizes use under this
  License of the Program or a work on which the Program is based.  The
! work thus licensed is called the contributor's \*(L"contributor version\*(R".
  .Sp
! A contributor's \*(L"essential patent claims\*(R" are all patent claims owned
  or controlled by the contributor, whether already acquired or
  hereafter acquired, that would be infringed by some manner, permitted
  by this License, of making, using, or selling its contributor version,
  but do not include claims that would be infringed only as a
  consequence of further modification of the contributor version.  For
! purposes of this definition, \*(L"control\*(R" includes the right to grant
  patent sublicenses in a manner consistent with the requirements of
  this License.
  .Sp
! Each contributor grants you a non-exclusive, worldwide, royalty-free
! patent license under the contributor's essential patent claims, to
  make, use, sell, offer for sale, import and otherwise run, modify and
  propagate the contents of its contributor version.
  .Sp
! In the following three paragraphs, a \*(L"patent license\*(R" is any express
  agreement or commitment, however denominated, not to enforce a patent
  (such as an express permission to practice a patent or covenant not to
! sue for patent infringement).  To \*(L"grant\*(R" such a patent license to a
  party means to make such an agreement or commitment not to enforce a
  patent against the party.
  .Sp
--- 556,589 ----
  rights granted or affirmed under this License.  For example, you may
  not impose a license fee, royalty, or other charge for exercise of
  rights granted under this License, and you may not initiate litigation
! (including a cross\-claim or counterclaim in a lawsuit) alleging that
  any patent claim is infringed by making, using, selling, offering for
  sale, or importing the Program or any portion of it.
  .IP "11. Patents." 4
  .IX Item "11. Patents."
! A "contributor" is a copyright holder who authorizes use under this
  License of the Program or a work on which the Program is based.  The
! work thus licensed is called the contributor\*(Aqs "contributor version".
  .Sp
! A contributor\*(Aqs "essential patent claims" are all patent claims owned
  or controlled by the contributor, whether already acquired or
  hereafter acquired, that would be infringed by some manner, permitted
  by this License, of making, using, or selling its contributor version,
  but do not include claims that would be infringed only as a
  consequence of further modification of the contributor version.  For
! purposes of this definition, "control" includes the right to grant
  patent sublicenses in a manner consistent with the requirements of
  this License.
  .Sp
! Each contributor grants you a non\-exclusive, worldwide, royalty\-free
! patent license under the contributor\*(Aqs essential patent claims, to
  make, use, sell, offer for sale, import and otherwise run, modify and
  propagate the contents of its contributor version.
  .Sp
! In the following three paragraphs, a "patent license" is any express
  agreement or commitment, however denominated, not to enforce a patent
  (such as an express permission to practice a patent or covenant not to
! sue for patent infringement).  To "grant" such a patent license to a
  party means to make such an agreement or commitment not to enforce a
  patent against the party.
  .Sp
*************** then you must either (1) cause the Corre
*** 666,674 ****
  available, or (2) arrange to deprive yourself of the benefit of the
  patent license for this particular work, or (3) arrange, in a manner
  consistent with the requirements of this License, to extend the patent
! license to downstream recipients.  \*(L"Knowingly relying\*(R" means you have
  actual knowledge that, but for the patent license, your conveying the
! covered work in a country, or your recipient's use of the covered work
  in a country, would infringe one or more identifiable patents in that
  country that you have reason to believe are valid.
  .Sp
--- 595,603 ----
  available, or (2) arrange to deprive yourself of the benefit of the
  patent license for this particular work, or (3) arrange, in a manner
  consistent with the requirements of this License, to extend the patent
! license to downstream recipients.  "Knowingly relying" means you have
  actual knowledge that, but for the patent license, your conveying the
! covered work in a country, or your recipient\*(Aqs use of the covered work
  in a country, would infringe one or more identifiable patents in that
  country that you have reason to believe are valid.
  .Sp
*************** or convey a specific copy of the covered
*** 680,688 ****
  you grant is automatically extended to all recipients of the covered
  work and works based on it.
  .Sp
! A patent license is \*(L"discriminatory\*(R" if it does not include within the
  scope of its coverage, prohibits the exercise of, or is conditioned on
! the non-exercise of one or more of the rights that are specifically
  granted under this License.  You may not convey a covered work if you
  are a party to an arrangement with a third party that is in the
  business of distributing software, under which you make payment to the
--- 609,617 ----
  you grant is automatically extended to all recipients of the covered
  work and works based on it.
  .Sp
! A patent license is "discriminatory" if it does not include within the
  scope of its coverage, prohibits the exercise of, or is conditioned on
! the non\-exercise of one or more of the rights that are specifically
  granted under this License.  You may not convey a covered work if you
  are a party to an arrangement with a third party that is in the
  business of distributing software, under which you make payment to the
*************** license was granted, prior to 28 March 2
*** 698,704 ****
  Nothing in this License shall be construed as excluding or limiting
  any implied license or other defenses to infringement that may
  otherwise be available to you under applicable patent law.
! .IP "12. No Surrender of Others' Freedom." 4
  .IX Item "12. No Surrender of Others' Freedom."
  If conditions are imposed on you (whether by court order, agreement or
  otherwise) that contradict the conditions of this License, they do not
--- 627,633 ----
  Nothing in this License shall be construed as excluding or limiting
  any implied license or other defenses to infringement that may
  otherwise be available to you under applicable patent law.
! .IP "12. No Surrender of Others\*(Aq Freedom." 4
  .IX Item "12. No Surrender of Others' Freedom."
  If conditions are imposed on you (whether by court order, agreement or
  otherwise) that contradict the conditions of this License, they do not
*************** to terms that obligate you to collect a
*** 710,743 ****
  from those to whom you convey the Program, the only way you could
  satisfy both those terms and this License would be to refrain entirely
  from conveying the Program.
! .IP "13. Use with the \s-1GNU\s0 Affero General Public License." 4
  .IX Item "13. Use with the GNU Affero General Public License."
  Notwithstanding any other provision of this License, you have
  permission to link or combine any covered work with a work licensed
! under version 3 of the \s-1GNU\s0 Affero General Public License into a single
  combined work, and to convey the resulting work.  The terms of this
  License will continue to apply to the part which is the covered work,
! but the special requirements of the \s-1GNU\s0 Affero General Public License,
  section 13, concerning interaction through a network will apply to the
  combination as such.
  .IP "14. Revised Versions of this License." 4
  .IX Item "14. Revised Versions of this License."
  The Free Software Foundation may publish revised and/or new versions
! of the \s-1GNU\s0 General Public License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.
  .Sp
  Each version is given a distinguishing version number.  If the Program
! specifies that a certain numbered version of the \s-1GNU\s0 General Public
! License \*(L"or any later version\*(R" applies to it, you have the option of
  following the terms and conditions either of that numbered version or
  of any later version published by the Free Software Foundation.  If
! the Program does not specify a version number of the \s-1GNU\s0 General
  Public License, you may choose any version ever published by the Free
  Software Foundation.
  .Sp
  If the Program specifies that a proxy can decide which future versions
! of the \s-1GNU\s0 General Public License can be used, that proxy's public
  statement of acceptance of a version permanently authorizes you to
  choose that version for the Program.
  .Sp
--- 639,672 ----
  from those to whom you convey the Program, the only way you could
  satisfy both those terms and this License would be to refrain entirely
  from conveying the Program.
! .IP "13. Use with the GNU Affero General Public License." 4
  .IX Item "13. Use with the GNU Affero General Public License."
  Notwithstanding any other provision of this License, you have
  permission to link or combine any covered work with a work licensed
! under version 3 of the GNU Affero General Public License into a single
  combined work, and to convey the resulting work.  The terms of this
  License will continue to apply to the part which is the covered work,
! but the special requirements of the GNU Affero General Public License,
  section 13, concerning interaction through a network will apply to the
  combination as such.
  .IP "14. Revised Versions of this License." 4
  .IX Item "14. Revised Versions of this License."
  The Free Software Foundation may publish revised and/or new versions
! of the GNU General Public License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.
  .Sp
  Each version is given a distinguishing version number.  If the Program
! specifies that a certain numbered version of the GNU General Public
! License "or any later version" applies to it, you have the option of
  following the terms and conditions either of that numbered version or
  of any later version published by the Free Software Foundation.  If
! the Program does not specify a version number of the GNU General
  Public License, you may choose any version ever published by the Free
  Software Foundation.
  .Sp
  If the Program specifies that a proxy can decide which future versions
! of the GNU General Public License can be used, that proxy\*(Aqs public
  statement of acceptance of a version permanently authorizes you to
  choose that version for the Program.
  .Sp
*************** author or copyright holder as a result o
*** 747,772 ****
  later version.
  .IP "15. Disclaimer of Warranty." 4
  .IX Item "15. Disclaimer of Warranty."
! \&\s-1THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
! APPLICABLE LAW.\s0  \s-1EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
! HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \*(L"AS IS\*(R" WITHOUT
  WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
! A PARTICULAR PURPOSE.\s0  \s-1THE ENTIRE RISK AS TO THE QUALITY AND
! PERFORMANCE OF THE PROGRAM IS WITH YOU.\s0  \s-1SHOULD THE PROGRAM PROVE
  DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! CORRECTION.\s0
  .IP "16. Limitation of Liability." 4
  .IX Item "16. Limitation of Liability."
! \&\s-1IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
  CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
! ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM\s0 (\s-1INCLUDING BUT
  NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
  LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
! TO OPERATE WITH ANY OTHER PROGRAMS\s0), \s-1EVEN IF SUCH HOLDER OR OTHER
! PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\s0
  .IP "17. Interpretation of Sections 15 and 16." 4
  .IX Item "17. Interpretation of Sections 15 and 16."
  If the disclaimer of warranty and limitation of liability provided
--- 676,701 ----
  later version.
  .IP "15. Disclaimer of Warranty." 4
  .IX Item "15. Disclaimer of Warranty."
! THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
! APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
! HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
  WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
! A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
! PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
  DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! CORRECTION.
  .IP "16. Limitation of Liability." 4
  .IX Item "16. Limitation of Liability."
! IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
  CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
! ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
  NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
  LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
! TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
! PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  .IP "17. Interpretation of Sections 15 and 16." 4
  .IX Item "17. Interpretation of Sections 15 and 16."
  If the disclaimer of warranty and limitation of liability provided
*************** reviewing courts shall apply local law t
*** 775,781 ****
  an absolute waiver of all civil liability in connection with the
  Program, unless a warranty or assumption of liability accompanies a
  copy of the Program in return for a fee.
! .SS "\s-1END OF TERMS AND CONDITIONS\s0"
  .IX Subsection "END OF TERMS AND CONDITIONS"
  .SS "How to Apply These Terms to Your New Programs"
  .IX Subsection "How to Apply These Terms to Your New Programs"
--- 704,710 ----
  an absolute waiver of all civil liability in connection with the
  Program, unless a warranty or assumption of liability accompanies a
  copy of the Program in return for a fee.
! .SS "END OF TERMS AND CONDITIONS"
  .IX Subsection "END OF TERMS AND CONDITIONS"
  .SS "How to Apply These Terms to Your New Programs"
  .IX Subsection "How to Apply These Terms to Your New Programs"
*************** terms.
*** 787,793 ****
  To do so, attach the following notices to the program.  It is safest
  to attach them to the start of each source file to most effectively
  state the exclusion of warranty; and each file should have at least
! the \*(L"copyright\*(R" line and a pointer to where the full notice is found.
  .PP
  .Vb 2
  \&        <one line to give the program\*(Aqs name and a brief idea of what it does.>  
--- 716,722 ----
  To do so, attach the following notices to the program.  It is safest
  to attach them to the start of each source file to most effectively
  state the exclusion of warranty; and each file should have at least
! the "copyright" line and a pointer to where the full notice is found.
  .PP
  .Vb 2
  \&        <one line to give the program\*(Aqs name and a brief idea of what it does.>  
*************** notice like this when it starts in an in
*** 821,844 ****
  .PP
  The hypothetical commands \fBshow w\fR and \fBshow c\fR should show
  the appropriate parts of the General Public License.  Of course, your
! program's commands might be different; for a \s-1GUI\s0 interface, you would
! use an \*(L"about box\*(R".
  .PP
  You should also get your employer (if you work as a programmer) or school,
! if any, to sign a \*(L"copyright disclaimer\*(R" for the program, if necessary.
! For more information on this, and how to apply and follow the \s-1GNU GPL,\s0 see
  <\fBhttps://www.gnu.org/licenses/\fR>.
  .PP
! The \s-1GNU\s0 General Public License does not permit incorporating your
  program into proprietary programs.  If your program is a subroutine
  library, you may consider it more useful to permit linking proprietary
  applications with the library.  If this is what you want to do, use
! the \s-1GNU\s0 Lesser General Public License instead of this License.  But
  first, please read <\fBhttps://www.gnu.org/licenses/why\-not\-lgpl.html\fR>.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7).
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2007 Free Software Foundation, Inc.
  .PP
--- 750,773 ----
  .PP
  The hypothetical commands \fBshow w\fR and \fBshow c\fR should show
  the appropriate parts of the General Public License.  Of course, your
! program\*(Aqs commands might be different; for a GUI interface, you would
! use an "about box".
  .PP
  You should also get your employer (if you work as a programmer) or school,
! if any, to sign a "copyright disclaimer" for the program, if necessary.
! For more information on this, and how to apply and follow the GNU GPL, see
  <\fBhttps://www.gnu.org/licenses/\fR>.
  .PP
! The GNU General Public License does not permit incorporating your
  program into proprietary programs.  If your program is a subroutine
  library, you may consider it more useful to permit linking proprietary
  applications with the library.  If this is what you want to do, use
! the GNU Lesser General Public License instead of this License.  But
  first, please read <\fBhttps://www.gnu.org/licenses/why\-not\-lgpl.html\fR>.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7).
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2007 Free Software Foundation, Inc.
  .PP
diff -Nrcpad gcc-14.3.0/gcc/doc/install.texi gcc-14.3.0-RC-20260619/gcc/doc/install.texi
*** gcc-14.3.0/gcc/doc/install.texi	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/install.texi	Fri Jun 19 06:51:02 2026
*************** Same as @uref{#with-as,,@option{--with-a
*** 1195,1201 ****
  but for the debug linker (only used on Darwin platforms so far).
  
  @item --with-tls=@var{dialect}
! Specify the default TLS dialect, for systems were there is a choice.
  For ARM targets, possible values for @var{dialect} are @code{gnu} or
  @code{gnu2}, which select between the original GNU dialect and the GNU TLS
  descriptor-based dialect.
--- 1195,1201 ----
  but for the debug linker (only used on Darwin platforms so far).
  
  @item --with-tls=@var{dialect}
! Specify the default TLS dialect, for systems where there is a choice.
  For ARM targets, possible values for @var{dialect} are @code{gnu} or
  @code{gnu2}, which select between the original GNU dialect and the GNU TLS
  descriptor-based dialect.
diff -Nrcpad gcc-14.3.0/gcc/doc/invoke.texi gcc-14.3.0-RC-20260619/gcc/doc/invoke.texi
*** gcc-14.3.0/gcc/doc/invoke.texi	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/invoke.texi	Fri Jun 19 06:51:02 2026
*************** the next @option{-x} option.  Possible v
*** 1677,1689 ****
  @smallexample
  c  c-header  cpp-output
  c++  c++-header  c++-system-header c++-user-header c++-cpp-output
! objective-c  objective-c-header  objective-c-cpp-output
! objective-c++ objective-c++-header objective-c++-cpp-output
  assembler  assembler-with-cpp
! ada
  d
! f77  f77-cpp-input f95  f95-cpp-input
  go
  @end smallexample
  
  @item -x none
--- 1677,1693 ----
  @smallexample
  c  c-header  cpp-output
  c++  c++-header  c++-system-header c++-user-header c++-cpp-output
! objective-c  objective-c-header  objective-c-cpp-output  objc-cpp-output
! objective-c++  objective-c++-header  objective-c++-cpp-output
! objc++-cpp-output
  assembler  assembler-with-cpp
! ada  adascil  adawhy
  d
! f77  f77-cpp-input  f95  f95-cpp-input
  go
+ modula-2  modula-2-cpp-output
+ rust
+ lto
  @end smallexample
  
  @item -x none
*************** performance of the code.  Permissible va
*** 21422,21428 ****
  @samp{octeontx2f95mm},
  @samp{a64fx}, @samp{fujitsu-monaka},
  @samp{thunderx}, @samp{thunderxt88},
! @samp{thunderxt88p1}, @samp{thunderxt81}, @samp{tsv110},
  @samp{thunderxt83}, @samp{thunderx2t99}, @samp{thunderx3t110}, @samp{zeus},
  @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
--- 21426,21432 ----
  @samp{octeontx2f95mm},
  @samp{a64fx}, @samp{fujitsu-monaka},
  @samp{thunderx}, @samp{thunderxt88},
! @samp{thunderxt88p1}, @samp{thunderxt81}, @samp{tsv110}, @samp{hip12},
  @samp{thunderxt83}, @samp{thunderx2t99}, @samp{thunderx3t110}, @samp{zeus},
  @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
*************** VPCLMULQDQ, AVX512BITALG, RDPID and AVX5
*** 34514,34550 ****
  Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont CPU with 64-bit extensions,
  MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
  PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,
! GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI,
! BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
! WIDEKL and AVX-VNNI instruction set support.
  
  @item arrowlake
  Intel Arrow Lake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
! MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT and CMPCCXADD instruction set
! support.
  
  @item arrowlake-s
  @itemx lunarlake
  Intel Arrow Lake S/Lunar Lake CPU with 64-bit extensions, MOVBE, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
  XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
! MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3 and SM4 instruction set support.
  
  @item pantherlake
  Intel Panther Lake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
! MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4 and PREFETCHI instruction set support.
  
  @item sapphirerapids
  @itemx emeraldrapids
--- 34518,34553 ----
  Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont CPU with 64-bit extensions,
  MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
  PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,
! GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C,
! FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and
! AVX-VNNI instruction set support.
  
  @item arrowlake
  Intel Arrow Lake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
! MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA,
! AVXVNNIINT8, AVXNECONVERT and CMPCCXADD instruction set support.
  
  @item arrowlake-s
  @itemx lunarlake
  Intel Arrow Lake S/Lunar Lake CPU with 64-bit extensions, MOVBE, MMX, SSE,
  SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
  XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
! MOVDIRI, MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
! PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR,
! AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and
! SM4 instruction set support.
  
  @item pantherlake
  Intel Panther Lake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
! MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
! AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3 and SM4 instruction set
! support.
  
  @item sapphirerapids
  @itemx emeraldrapids
*************** Intel Clearwater Forest CPU with 64-bit
*** 34633,34641 ****
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
  XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
! ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16,
! SHA512, SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
  @item knl
  Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
--- 34636,34644 ----
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
  XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX-VNNI, ENQCMD,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
  @item knl
  Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
diff -Nrcpad gcc-14.3.0/gcc/doc/lto-dump.1 gcc-14.3.0-RC-20260619/gcc/doc/lto-dump.1
*** gcc-14.3.0/gcc/doc/lto-dump.1	Fri May 23 11:04:35 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/lto-dump.1	Fri Jun 19 06:52:39 2026
***************
*** 1,4 ****
! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
--- 1,5 ----
! .\" -*- mode: troff; coding: utf-8 -*-
! .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
  .\"
  .\" Standard preamble:
  .\" ========================================================================
***************
*** 15,43 ****
  .ft R
  .fi
  ..
! .\" Set up some character translations and predefined strings.  \*(-- will
! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
! .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
! .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
! .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
! .\" nothing in troff, for use with C<>.
! .tr \(*W-
! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
  .    ds C`
  .    ds C'
  'br\}
--- 16,27 ----
  .ft R
  .fi
  ..
! .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  .ie n \{\
  .    ds C` ""
  .    ds C' ""
  'br\}
  .el\{\
  .    ds C`
  .    ds C'
  'br\}
***************
*** 54,144 ****
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .if !\nF .nr F 0
! .if \nF>0 \{\
! .    de IX
! .    tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .    if !\nF==2 \{\
! .        nr % 0
! .        nr F 2
  .    \}
  .\}
  .\"
! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
! .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
! .    \" fudge factors for nroff and troff
! .if n \{\
! .    ds #H 0
! .    ds #V .8m
! .    ds #F .3m
! .    ds #[ \f1
! .    ds #] \fP
! .\}
! .if t \{\
! .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
! .    ds #V .6m
! .    ds #F 0
! .    ds #[ \&
! .    ds #] \&
! .\}
! .    \" simple accents for nroff and troff
! .if n \{\
! .    ds ' \&
! .    ds ` \&
! .    ds ^ \&
! .    ds , \&
! .    ds ~ ~
! .    ds /
! .\}
! .if t \{\
! .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
! .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
! .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
! .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
! .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
! .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
! .\}
! .    \" troff and (daisy-wheel) nroff accents
! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
! .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
! .ds ae a\h'-(\w'a'u*4/10)'e
! .ds Ae A\h'-(\w'A'u*4/10)'E
! .    \" corrections for vroff
! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
! .    \" for low resolution devices (crt and lpr)
! .if \n(.H>23 .if \n(.V>19 \
! \{\
! .    ds : e
! .    ds 8 ss
! .    ds o a
! .    ds d- d\h'-1'\(ga
! .    ds D- D\h'-1'\(hy
! .    ds th \o'bp'
! .    ds Th \o'LP'
! .    ds ae ae
! .    ds Ae AE
! .\}
! .rm #[ #] #H #V #F C
  .\" ========================================================================
  .\"
  .IX Title "LTO-DUMP 1"
! .TH LTO-DUMP 1 "2025-05-23" "gcc-14.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH "NAME"
  lto\-dump \- Tool for dumping LTO object files
! .SH "SYNOPSIS"
  .IX Header "SYNOPSIS"
! lto-dump [\fB\-list\fR]
       [\fB\-demangle\fR]
       [\fB\-defined\-only\fR]
       [\fB\-print\-value\fR]
--- 38,73 ----
  .\" Avoid warning from groff about undefined register 'F'.
  .de IX
  ..
! .nr rF 0
! .if \n(.g .if rF .nr rF 1
! .if (\n(rF:(\n(.g==0)) \{\
! .    if \nF \{\
! .        de IX
! .        tm Index:\\$1\t\\n%\t"\\$2"
  ..
! .        if !\nF==2 \{\
! .            nr % 0
! .            nr F 2
! .        \}
  .    \}
  .\}
+ .rr rF
  .\"
! .\" Required to disable full justification in groff 1.23.0.
! .if n .ds AD l
  .\" ========================================================================
  .\"
  .IX Title "LTO-DUMP 1"
! .TH LTO-DUMP 1 2026-06-19 gcc-14.3.1 GNU
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
  .nh
! .SH NAME
  lto\-dump \- Tool for dumping LTO object files
! .SH SYNOPSIS
  .IX Header "SYNOPSIS"
! lto\-dump [\fB\-list\fR]
       [\fB\-demangle\fR]
       [\fB\-defined\-only\fR]
       [\fB\-print\-value\fR]
*************** lto-dump [\fB\-list\fR]
*** 153,232 ****
       [\fB\-gimple\-stats\fR]
       [\fB\-dump\-level=\fR]
       [\fB\-dump\-body=\fR]
!      [\fB\-help\fR] \fIlto-dump\fR
! .SH "DESCRIPTION"
  .IX Header "DESCRIPTION"
! \&\fBlto-dump\fR is a tool you can use in conjunction with \s-1GCC\s0 to
  dump link time optimization object files.
! .SH "OPTIONS"
  .IX Header "OPTIONS"
! .IP "\fB\-list\fR" 4
  .IX Item "-list"
  Dumps list of details of functions and variables.
! .IP "\fB\-demangle\fR" 4
  .IX Item "-demangle"
  Dump the demangled output.
! .IP "\fB\-defined\-only\fR" 4
  .IX Item "-defined-only"
  Dump only the defined symbols.
! .IP "\fB\-print\-value\fR" 4
  .IX Item "-print-value"
  Dump initial values of the variables.
! .IP "\fB\-name\-sort\fR" 4
  .IX Item "-name-sort"
  Sort the symbols alphabetically.
! .IP "\fB\-size\-sort\fR" 4
  .IX Item "-size-sort"
  Sort the symbols according to size.
! .IP "\fB\-reverse\-sort\fR" 4
  .IX Item "-reverse-sort"
  Dump the symbols in reverse order.
! .IP "\fB\-no\-sort\fR" 4
  .IX Item "-no-sort"
  Dump the symbols in order of occurrence.
! .IP "\fB\-symbol=\fR" 4
  .IX Item "-symbol="
  Dump the details of specific symbol.
! .IP "\fB\-objects\fR" 4
  .IX Item "-objects"
! Dump the details of \s-1LTO\s0 objects.
! .IP "\fB\-type\-stats\fR" 4
  .IX Item "-type-stats"
  Dump the statistics of tree types.
! .IP "\fB\-tree\-stats\fR" 4
  .IX Item "-tree-stats"
  Dump the statistics of trees.
! .IP "\fB\-gimple\-stats\fR" 4
  .IX Item "-gimple-stats"
  Dump the statistics of gimple statements.
! .IP "\fB\-dump\-level=\fR" 4
  .IX Item "-dump-level="
  For deciding the optimization level of body.
! .IP "\fB\-dump\-body=\fR" 4
  .IX Item "-dump-body="
  Dump the specific gimple body.
! .IP "\fB\-help\fR" 4
  .IX Item "-help"
  Display the dump tool help.
! .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (c) 2017\-2024 Free Software Foundation, Inc.
  .PP
  Permission is granted to copy, distribute and/or modify this document
! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with the
! Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
! Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
  .PP
! (a) The \s-1FSF\s0's Front-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The \s-1FSF\s0's Back-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
--- 82,161 ----
       [\fB\-gimple\-stats\fR]
       [\fB\-dump\-level=\fR]
       [\fB\-dump\-body=\fR]
!      [\fB\-help\fR] \fIlto\-dump\fR
! .SH DESCRIPTION
  .IX Header "DESCRIPTION"
! \&\fBlto\-dump\fR is a tool you can use in conjunction with GCC to
  dump link time optimization object files.
! .SH OPTIONS
  .IX Header "OPTIONS"
! .IP \fB\-list\fR 4
  .IX Item "-list"
  Dumps list of details of functions and variables.
! .IP \fB\-demangle\fR 4
  .IX Item "-demangle"
  Dump the demangled output.
! .IP \fB\-defined\-only\fR 4
  .IX Item "-defined-only"
  Dump only the defined symbols.
! .IP \fB\-print\-value\fR 4
  .IX Item "-print-value"
  Dump initial values of the variables.
! .IP \fB\-name\-sort\fR 4
  .IX Item "-name-sort"
  Sort the symbols alphabetically.
! .IP \fB\-size\-sort\fR 4
  .IX Item "-size-sort"
  Sort the symbols according to size.
! .IP \fB\-reverse\-sort\fR 4
  .IX Item "-reverse-sort"
  Dump the symbols in reverse order.
! .IP \fB\-no\-sort\fR 4
  .IX Item "-no-sort"
  Dump the symbols in order of occurrence.
! .IP \fB\-symbol=\fR 4
  .IX Item "-symbol="
  Dump the details of specific symbol.
! .IP \fB\-objects\fR 4
  .IX Item "-objects"
! Dump the details of LTO objects.
! .IP \fB\-type\-stats\fR 4
  .IX Item "-type-stats"
  Dump the statistics of tree types.
! .IP \fB\-tree\-stats\fR 4
  .IX Item "-tree-stats"
  Dump the statistics of trees.
! .IP \fB\-gimple\-stats\fR 4
  .IX Item "-gimple-stats"
  Dump the statistics of gimple statements.
! .IP \fB\-dump\-level=\fR 4
  .IX Item "-dump-level="
  For deciding the optimization level of body.
! .IP \fB\-dump\-body=\fR 4
  .IX Item "-dump-body="
  Dump the specific gimple body.
! .IP \fB\-help\fR 4
  .IX Item "-help"
  Display the dump tool help.
! .SH COPYRIGHT
  .IX Header "COPYRIGHT"
  Copyright (c) 2017\-2024 Free Software Foundation, Inc.
  .PP
  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 \fBgfdl\fR\|(7) man page.
  .PP
! (a) The FSF\*(Aqs Front\-Cover Text is:
  .PP
  .Vb 1
  \&     A GNU Manual
  .Ve
  .PP
! (b) The FSF\*(Aqs Back\-Cover Text is:
  .PP
  .Vb 3
  \&     You have freedom to copy and modify this GNU Manual, like GNU
diff -Nrcpad gcc-14.3.0/gcc/doc/m2.info gcc-14.3.0-RC-20260619/gcc/doc/m2.info
*** gcc-14.3.0/gcc/doc/m2.info	Fri May 23 11:23:57 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/m2.info	Fri Jun 19 07:10:57 2026
***************
*** 1,6 ****
! This is m2.info, produced by makeinfo version 6.5 from gm2.texi.
  
! Copyright (C) 1999-2024 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
--- 1,6 ----
! This is m2.info, produced by makeinfo version 7.1 from gm2.texi.
  
! Copyright © 1999-2024 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
*************** START-INFO-DIR-ENTRY
*** 14,20 ****
  END-INFO-DIR-ENTRY
  
  
!    Copyright (C) 1999-2024 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
--- 14,20 ----
  END-INFO-DIR-ENTRY
  
  
!    Copyright © 1999-2024 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
*************** available and access to assembly program
*** 115,123 ****
  syntax as that used by GCC.
  
     The gm2 driver allows third party libraries to be installed alongside
! gm2 libraries.  For example if the user specifies library 'foo' using
! '-flibs=foo' the driver will check the standard GCC install directory
! for a sub directory 'foo' containing the library contents.  The library
  module search path is altered accordingly for compile and link.
  
  
--- 115,123 ----
  syntax as that used by GCC.
  
     The gm2 driver allows third party libraries to be installed alongside
! gm2 libraries.  For example if the user specifies library ‘foo’ using
! ‘-flibs=foo’ the driver will check the standard GCC install directory
! for a sub directory ‘foo’ containing the library contents.  The library
  module search path is altered accordingly for compile and link.
  
  
*************** File: m2.info,  Node: Features,  Prev: D
*** 134,176 ****
  1.4 GNU Modula-2 Features
  =========================
  
!    * the compiler currently complies with Programming in Modula-2
       Edition 2, 3, 4 and ISO Modula-2.  Users can switch on specific
!      language features by using: '-fpim', '-fpim2', '-fpim3', '-fpim4'
!      or '-fiso'.
  
!    * the option '-fswig' will automatically create a swig interface file
       which corresponds to the definition module of the file being
       compiled.
  
!    * exception handling is compatible with C++ and swig.  Modula-2 code
       can be used with C or C++ code.
  
!    * Python can call GNU Modula-2 modules via swig.
  
!    * shared libraries can be built.
  
!    * fixed sized types are now available from 'SYSTEM'.
  
!    * variables can be declared at addresses.
  
!    * much better dwarf-2 debugging support and when used with 'gdb' the
!      programmer can display 'RECORD's, 'ARRAY's, 'SET's, subranges and
       constant char literals in Modula-2 syntax.
  
!    * supports sets of any ordinal size (memory permitting).
  
!    * easy interface to C, and varargs can be passed to C routines.
  
!    * many Logitech libraries have been implemented and can be accessed
!      via: '-flibs=m2log,m2pim,m2iso'.
  
!    * coroutines have been implemented in the PIM style and these are
       accessible from SYSTEM. A number of supporting libraries (executive
       and file descriptor mapping to interrupt vector libraries are
!      available through the '-flibs=m2iso,m2pim' switch).
  
!    * can be built as a cross compiler (for embedded microprocessors such
       as the AVR and the ARM).
  
  
--- 134,176 ----
  1.4 GNU Modula-2 Features
  =========================
  
!    • the compiler currently complies with Programming in Modula-2
       Edition 2, 3, 4 and ISO Modula-2.  Users can switch on specific
!      language features by using: ‘-fpim’, ‘-fpim2’, ‘-fpim3’, ‘-fpim4’
!      or ‘-fiso’.
  
!    • the option ‘-fswig’ will automatically create a swig interface file
       which corresponds to the definition module of the file being
       compiled.
  
!    • exception handling is compatible with C++ and swig.  Modula-2 code
       can be used with C or C++ code.
  
!    • Python can call GNU Modula-2 modules via swig.
  
!    • shared libraries can be built.
  
!    • fixed sized types are now available from ‘SYSTEM’.
  
!    • variables can be declared at addresses.
  
!    • much better dwarf-2 debugging support and when used with ‘gdb’ the
!      programmer can display ‘RECORD’s, ‘ARRAY’s, ‘SET’s, subranges and
       constant char literals in Modula-2 syntax.
  
!    • supports sets of any ordinal size (memory permitting).
  
!    • easy interface to C, and varargs can be passed to C routines.
  
!    • many Logitech libraries have been implemented and can be accessed
!      via: ‘-flibs=m2log,m2pim,m2iso’.
  
!    • coroutines have been implemented in the PIM style and these are
       accessible from SYSTEM. A number of supporting libraries (executive
       and file descriptor mapping to interrupt vector libraries are
!      available through the ‘-flibs=m2iso,m2pim’ switch).
  
!    • can be built as a cross compiler (for embedded microprocessors such
       as the AVR and the ARM).
  
  
*************** File: m2.info,  Node: Example usage,  Ne
*** 221,235 ****
  2.1 Example compile and link
  ============================
  
! The 'gm2' command is the GNU compiler for the Modula-2 language and
! supports many of the same options as 'gcc'.  *Note Option Summary:
  (gcc)Option Summary.  This manual only documents the options specific to
! 'gm2'.
  
     This section describes how to compile and link a simple hello world
  program.  It provides a few examples of using the different options
  mentioned in *note Compiler options::.  Assuming that you have a file
! called 'hello.mod' in your current directory which contains:
  
       MODULE hello ;
  
--- 221,235 ----
  2.1 Example compile and link
  ============================
  
! The ‘gm2’ command is the GNU compiler for the Modula-2 language and
! supports many of the same options as ‘gcc’.  *Note Option Summary:
  (gcc)Option Summary.  This manual only documents the options specific to
! ‘gm2’.
  
     This section describes how to compile and link a simple hello world
  program.  It provides a few examples of using the different options
  mentioned in *note Compiler options::.  Assuming that you have a file
! called ‘hello.mod’ in your current directory which contains:
  
       MODULE hello ;
  
*************** called 'hello.mod' in your current direc
*** 239,261 ****
          WriteString ('hello world') ; WriteLn
       END hello.
  
!    You can compile and link it by: 'gm2 -g hello.mod'.  The result will
! be an 'a.out' file created in your directory.
  
     You can split this command into two steps if you prefer.  The compile
! step can be achieved by: 'gm2 -g -c -fscaffold-main hello.mod' and the
! link via: 'gm2 -g hello.o'.
  
     (1)
  
     ---------- Footnotes ----------
  
!    (1) To see all the compile actions taken by 'gm2' users can also add
! the '-v' flag at the command line, for example:
  
!    'gm2 -v -g -I. hello.mod'
  
!    This displays the sub processes initiated by 'gm2' which can be
  useful when trouble shooting.
  
  
--- 239,261 ----
          WriteString ('hello world') ; WriteLn
       END hello.
  
!    You can compile and link it by: ‘gm2 -g hello.mod’.  The result will
! be an ‘a.out’ file created in your directory.
  
     You can split this command into two steps if you prefer.  The compile
! step can be achieved by: ‘gm2 -g -c -fscaffold-main hello.mod’ and the
! link via: ‘gm2 -g hello.o’.
  
     (1)
  
     ---------- Footnotes ----------
  
!    (1) To see all the compile actions taken by ‘gm2’ users can also add
! the ‘-v’ flag at the command line, for example:
  
!    ‘gm2 -v -g -I. hello.mod’
  
!    This displays the sub processes initiated by ‘gm2’ which can be
  useful when trouble shooting.
  
  
*************** generic flags details *Note (gcc)Invokin
*** 271,367 ****
  of compilation is done.  The following kinds of input file names are
  supported:
  
! 'FILE.mod'
!      Modula-2 implementation or program source files.  See the '-fmod='
       option if you wish to compile a project which uses a different
       source file extension.
! 'FILE.def'
       Modula-2 definition module source files.  Definition modules are
       not compiled separately, in GNU Modula-2 definition modules are
       parsed as required when program or implementation modules are
!      compiled.  See the '-fdef=' option if you wish to compile a project
       which uses a different source file extension.
  
!    You can specify more than one input file on the 'gm2' command line,
  
! '-g'
!      create debugging information so that debuggers such as 'gdb' can
       inspect and control executable.
  
! '-I'
       used to specify the search path for definition and implementation
!      modules.  An example is: 'gm2 -g -c -I.:../../libs foo.mod'.  If
       this option is not specified then the default path is added which
       consists of the current directory followed by the appropriate
       language dialect library directories.
  
! '-fauto-init'
       turns on auto initialization of pointers to NIL. Whenever a block
       is created all pointers declared within this scope will have their
       addresses assigned to NIL.
  
! '-fbounds'
!      turns on run time subrange, array index and indirection via 'NIL'
       pointer checking.
  
! '-fcase'
!      turns on compile time checking to check whether a 'CASE' statement
!      requires an 'ELSE' clause when on was not specified.
  
! '-fcpp'
!      preprocess the source with 'cpp -lang-asm -traditional-cpp' For
       further details about these options *Note (cpp)Invocation::.  If
!      '-fcpp' is supplied then all definition modules and implementation
!      modules which are parsed will be prepossessed by 'cpp'.
  
! '-fdebug-builtins'
       call a real function, rather than the builtin equivalent.  This can
       be useful for debugging parameter values to a builtin function as
       it allows users to single step code into an intrinsic function.
  
! '-fdef='
       recognize the specified suffix as a definition module filename.
!      The default implementation and module filename suffix is '.def'.
       If this option is used GNU Modula-2 will still fall back to this
       default if a requested definition module is not found.
  
! '-fdump-system-exports'
       display all inbuilt system items.  This is an internal command line
       option.
  
! '-fexceptions'
       turn on exception handling code.  By default this option is on.
!      Exception handling can be disabled by '-fno-exceptions' and no
       references are made to the run time exception libraries.
  
! '-fextended-opaque'
       allows opaque types to be implemented as any type.  This is a GNU
       Modula-2 extension and it requires that the implementation module
       defining the opaque type is available so that it can be resolved
       when compiling the module which imports the opaque type.
  
! '-ffloatvalue'
       turns on run time checking to check whether a floating point number
       is about to exceed range.
  
! '-fgen-module-list=filename'
       attempt to find all modules when linking and generate a module
!      list.  If the 'filename' is '-' then the contents are not written
       and only used to force the linking of all module ctors.  This
!      option cannot be used if '-fuse-list=' is enabled.
  
! '-findex'
       generate code to check whether array index values are out of
!      bounds.  Array index checking can be disabled via '-fno-index'.
  
! '-fiso'
       turn on ISO standard features.  Currently this enables the ISO
!      'SYSTEM' module and alters the default library search path so that
       the ISO libraries are searched before the PIM libraries.  It also
!      effects the behavior of 'DIV' and 'MOD' operators.  *Note
       Dialect::.
  
! '-flibs='
       modifies the default library search path.  The libraries supplied
       are: m2pim, m2iso, m2min, m2log and m2cor.  These map onto the
       Programming in Modula-2 base libraries, ISO standard libraries,
--- 271,367 ----
  of compilation is done.  The following kinds of input file names are
  supported:
  
! ‘FILE.mod’
!      Modula-2 implementation or program source files.  See the ‘-fmod=’
       option if you wish to compile a project which uses a different
       source file extension.
! ‘FILE.def’
       Modula-2 definition module source files.  Definition modules are
       not compiled separately, in GNU Modula-2 definition modules are
       parsed as required when program or implementation modules are
!      compiled.  See the ‘-fdef=’ option if you wish to compile a project
       which uses a different source file extension.
  
!    You can specify more than one input file on the ‘gm2’ command line,
  
! ‘-g’
!      create debugging information so that debuggers such as ‘gdb’ can
       inspect and control executable.
  
! ‘-I’
       used to specify the search path for definition and implementation
!      modules.  An example is: ‘gm2 -g -c -I.:../../libs foo.mod’.  If
       this option is not specified then the default path is added which
       consists of the current directory followed by the appropriate
       language dialect library directories.
  
! ‘-fauto-init’
       turns on auto initialization of pointers to NIL. Whenever a block
       is created all pointers declared within this scope will have their
       addresses assigned to NIL.
  
! ‘-fbounds’
!      turns on run time subrange, array index and indirection via ‘NIL’
       pointer checking.
  
! ‘-fcase’
!      turns on compile time checking to check whether a ‘CASE’ statement
!      requires an ‘ELSE’ clause when on was not specified.
  
! ‘-fcpp’
!      preprocess the source with ‘cpp -lang-asm -traditional-cpp’ For
       further details about these options *Note (cpp)Invocation::.  If
!      ‘-fcpp’ is supplied then all definition modules and implementation
!      modules which are parsed will be prepossessed by ‘cpp’.
  
! ‘-fdebug-builtins’
       call a real function, rather than the builtin equivalent.  This can
       be useful for debugging parameter values to a builtin function as
       it allows users to single step code into an intrinsic function.
  
! ‘-fdef=’
       recognize the specified suffix as a definition module filename.
!      The default implementation and module filename suffix is ‘.def’.
       If this option is used GNU Modula-2 will still fall back to this
       default if a requested definition module is not found.
  
! ‘-fdump-system-exports’
       display all inbuilt system items.  This is an internal command line
       option.
  
! ‘-fexceptions’
       turn on exception handling code.  By default this option is on.
!      Exception handling can be disabled by ‘-fno-exceptions’ and no
       references are made to the run time exception libraries.
  
! ‘-fextended-opaque’
       allows opaque types to be implemented as any type.  This is a GNU
       Modula-2 extension and it requires that the implementation module
       defining the opaque type is available so that it can be resolved
       when compiling the module which imports the opaque type.
  
! ‘-ffloatvalue’
       turns on run time checking to check whether a floating point number
       is about to exceed range.
  
! ‘-fgen-module-list=filename’
       attempt to find all modules when linking and generate a module
!      list.  If the ‘filename’ is ‘-’ then the contents are not written
       and only used to force the linking of all module ctors.  This
!      option cannot be used if ‘-fuse-list=’ is enabled.
  
! ‘-findex’
       generate code to check whether array index values are out of
!      bounds.  Array index checking can be disabled via ‘-fno-index’.
  
! ‘-fiso’
       turn on ISO standard features.  Currently this enables the ISO
!      ‘SYSTEM’ module and alters the default library search path so that
       the ISO libraries are searched before the PIM libraries.  It also
!      effects the behavior of ‘DIV’ and ‘MOD’ operators.  *Note
       Dialect::.
  
! ‘-flibs=’
       modifies the default library search path.  The libraries supplied
       are: m2pim, m2iso, m2min, m2log and m2cor.  These map onto the
       Programming in Modula-2 base libraries, ISO standard libraries,
*************** supported:
*** 372,539 ****
       -flibs=m2iso if you also specify -fpim, -fpim2, -fpim3, -fpim4 or
       -fiso.  Unless you are using -flibs=m2min you should include m2pim
       as the they provide the base modules which all other dialects
!      utilize.  The option '-fno-libs=-' disables the 'gm2' driver from
       modifying the search and library paths.
  
! '-static-libgm2'
       On systems that provide the m2 runtimes as both shared and static
       libraries, this option forces the use of the static version.
  
! '-fm2-g'
       improve the debugging experience for new programmers at the expense
!      of generating 'nop' instructions if necessary to ensure single
       stepping precision over all code related keywords.  An example of
!      this is in termination of a list of nested 'IF' statements where
!      multiple 'END' keywords are mapped onto a sequence of 'nop'
       instructions.
  
! '-fm2-lower-case'
       render keywords in error messages using lower case.
  
! '-fm2-pathname='
       specify the module mangled prefix name for all modules in the
       following include paths.
  
! '-fm2-pathnameI'
       for internal use only: used by the driver to copy the user facing
       -I option.
  
! '-fm2-plugin'
       insert plugin to identify run time errors at compile time (default
       on).
  
! '-fm2-prefix='
       specify the module mangled prefix name.  All exported symbols from
       a definition module will have the prefix name.
  
! '-fm2-statistics'
       generates quadruple information: number of quadruples generated,
       number of quadruples remaining after optimization and number of
       source lines compiled.
  
! '-fm2-strict-type'
       experimental flag to turn on the new strict type checker.
  
! '-fm2-whole-program'
       compile all implementation modules and program module at once.
       Notice that you need to take care if you are compiling different
       dialect modules (particularly with the negative operands to
!      modulus).  But this option, when coupled together with '-O3', can
       deliver huge performance improvements.
  
! '-fmod='
       recognize the specified suffix as implementation and module
       filenames.  The default implementation and module filename suffix
!      is '.mod'.  If this option is used GNU Modula-2 will still fall
       back to this default if it needs to read an implementation module
       and the specified suffixed filename does not exist.
  
! '-fnil'
!      generate code to detect accessing data through a 'NIL' value
!      pointer.  Dereferencing checking through a 'NIL' pointer can be
!      disabled by '-fno-nil'.
  
! '-fpim'
       turn on PIM standard features.  Currently this enables the PIM
!      'SYSTEM' module and determines which identifiers are pervasive
!      (declared in the base module).  If no other '-fpim[234]' switch is
       used then division and modulus operators behave as defined in PIM4.
       *Note Dialect::.
  
! '-fpim2'
!      turn on PIM-2 standard features.  Currently this removes 'SIZE'
       from being a pervasive identifier (declared in the base module).
!      It places 'SIZE' in the 'SYSTEM' module.  It also effects the
!      behavior of 'DIV' and 'MOD' operators.  *Note Dialect::.
  
! '-fpim3'
       turn on PIM-3 standard features.  Currently this only effects the
!      behavior of 'DIV' and 'MOD' operators.  *Note Dialect::.
  
! '-fpim4'
       turn on PIM-4 standard features.  Currently this only effects the
!      behavior of 'DIV' and 'MOD' operators.  *Note Dialect::.
  
! '-fpositive-mod-floor-div'
!      forces the 'DIV' and 'MOD' operators to behave as defined by PIM4.
       All modulus results are positive and the results from the division
       are rounded to the floor.  *Note Dialect::.
  
! '-fpthread'
       link against the pthread library.  By default this option is on.
!      It can be disabled by '-fno-pthread'.  GNU Modula-2 uses the GCC
       pthread libraries to implement coroutines (see the SYSTEM
       implementation module).
  
! '-frange'
       generate code to check the assignment range, return value range set
       range and constructor range.  Range checking can be disabled via
!      '-fno-range'.
  
! '-freturn'
!      generate code to check that functions always exit with a 'RETURN'
       and do not fall out at the end.  Return checking can be disabled
!      via '-fno-return'.
  
! '-fruntime-modules='
       specify, using a comma separated list, the run time modules and
       their order.  These modules will initialized first before any other
       modules in the application dependency.  By default the run time
!      modules list is set to 'm2iso:RTentity,m2iso:Storage,m2iso:SYSTEM,'
!      'm2iso:M2RTS,m2iso:RTExceptions,m2iso:IOLink'.  Note that these
       modules will only be linked into your executable if they are
       required.  Adding a long list of dependent modules will not effect
       the size of the executable it merely states the initialization
       order should they be required.
  
! '-fscaffold-dynamic'
!      the option ensures that 'gm2' will generate a dynamic scaffold
       infrastructure when compiling implementation and program modules.
!      By default this option is on.  Use '-fno-scaffold-dynamic' to turn
!      it off or select '-fno-scaffold-static'.
  
! '-fscaffold-c'
       generate a C source scaffold for the current module being compiled.
  
! '-fscaffold-c++'
       generate a C++ source scaffold for the current module being
       compiled.
  
! '-fscaffold-main'
!      force the generation of the 'main' function.  This is not necessary
!      if the '-c' is omitted.
  
! '-fscaffold-static'
!      the option ensures that 'gm2' will generate a static scaffold
       within the program module.  The static scaffold consists of
       sequences of calls to all dependent module initialization and
       finalization procedures.  The static scaffold is useful for
       debugging and single stepping the initialization blocks of
       implementation modules.
  
! '-fshared'
       generate a shared library from the module.
  
! '-fsoft-check-all'
       turns on all run time checks.  This is the same as invoking GNU
!      Modula-2 using the command options '-fnil' '-frange' '-findex'
!      '-fwholevalue' '-fwholediv' '-fcase' '-freturn'.
  
! '-fsources'
       displays the path to the source of each module.  This option can be
       used at compile time to check the correct definition module is
       being used.
  
! '-fswig'
       generate a swig interface file.
  
! '-funbounded-by-reference'
       enable optimization of unbounded parameters by attempting to pass
!      non 'VAR' unbounded parameters by reference.  This optimization
       avoids the implicit copy inside the callee procedure.  GNU Modula-2
       will only allow unbounded parameters to be passed by reference if,
       inside the callee procedure, they are not written to, no address is
!      calculated on the array and it is not passed as a 'VAR' parameter.
       Note that it is possible to write code to break this optimization,
       therefore this option should be used carefully.  For example it
       would be possible to take the address of an array, pass the address
--- 372,539 ----
       -flibs=m2iso if you also specify -fpim, -fpim2, -fpim3, -fpim4 or
       -fiso.  Unless you are using -flibs=m2min you should include m2pim
       as the they provide the base modules which all other dialects
!      utilize.  The option ‘-fno-libs=-’ disables the ‘gm2’ driver from
       modifying the search and library paths.
  
! ‘-static-libgm2’
       On systems that provide the m2 runtimes as both shared and static
       libraries, this option forces the use of the static version.
  
! ‘-fm2-g’
       improve the debugging experience for new programmers at the expense
!      of generating ‘nop’ instructions if necessary to ensure single
       stepping precision over all code related keywords.  An example of
!      this is in termination of a list of nested ‘IF’ statements where
!      multiple ‘END’ keywords are mapped onto a sequence of ‘nop’
       instructions.
  
! ‘-fm2-lower-case’
       render keywords in error messages using lower case.
  
! ‘-fm2-pathname=’
       specify the module mangled prefix name for all modules in the
       following include paths.
  
! ‘-fm2-pathnameI’
       for internal use only: used by the driver to copy the user facing
       -I option.
  
! ‘-fm2-plugin’
       insert plugin to identify run time errors at compile time (default
       on).
  
! ‘-fm2-prefix=’
       specify the module mangled prefix name.  All exported symbols from
       a definition module will have the prefix name.
  
! ‘-fm2-statistics’
       generates quadruple information: number of quadruples generated,
       number of quadruples remaining after optimization and number of
       source lines compiled.
  
! ‘-fm2-strict-type’
       experimental flag to turn on the new strict type checker.
  
! ‘-fm2-whole-program’
       compile all implementation modules and program module at once.
       Notice that you need to take care if you are compiling different
       dialect modules (particularly with the negative operands to
!      modulus).  But this option, when coupled together with ‘-O3’, can
       deliver huge performance improvements.
  
! ‘-fmod=’
       recognize the specified suffix as implementation and module
       filenames.  The default implementation and module filename suffix
!      is ‘.mod’.  If this option is used GNU Modula-2 will still fall
       back to this default if it needs to read an implementation module
       and the specified suffixed filename does not exist.
  
! ‘-fnil’
!      generate code to detect accessing data through a ‘NIL’ value
!      pointer.  Dereferencing checking through a ‘NIL’ pointer can be
!      disabled by ‘-fno-nil’.
  
! ‘-fpim’
       turn on PIM standard features.  Currently this enables the PIM
!      ‘SYSTEM’ module and determines which identifiers are pervasive
!      (declared in the base module).  If no other ‘-fpim[234]’ switch is
       used then division and modulus operators behave as defined in PIM4.
       *Note Dialect::.
  
! ‘-fpim2’
!      turn on PIM-2 standard features.  Currently this removes ‘SIZE’
       from being a pervasive identifier (declared in the base module).
!      It places ‘SIZE’ in the ‘SYSTEM’ module.  It also effects the
!      behavior of ‘DIV’ and ‘MOD’ operators.  *Note Dialect::.
  
! ‘-fpim3’
       turn on PIM-3 standard features.  Currently this only effects the
!      behavior of ‘DIV’ and ‘MOD’ operators.  *Note Dialect::.
  
! ‘-fpim4’
       turn on PIM-4 standard features.  Currently this only effects the
!      behavior of ‘DIV’ and ‘MOD’ operators.  *Note Dialect::.
  
! ‘-fpositive-mod-floor-div’
!      forces the ‘DIV’ and ‘MOD’ operators to behave as defined by PIM4.
       All modulus results are positive and the results from the division
       are rounded to the floor.  *Note Dialect::.
  
! ‘-fpthread’
       link against the pthread library.  By default this option is on.
!      It can be disabled by ‘-fno-pthread’.  GNU Modula-2 uses the GCC
       pthread libraries to implement coroutines (see the SYSTEM
       implementation module).
  
! ‘-frange’
       generate code to check the assignment range, return value range set
       range and constructor range.  Range checking can be disabled via
!      ‘-fno-range’.
  
! ‘-freturn’
!      generate code to check that functions always exit with a ‘RETURN’
       and do not fall out at the end.  Return checking can be disabled
!      via ‘-fno-return’.
  
! ‘-fruntime-modules=’
       specify, using a comma separated list, the run time modules and
       their order.  These modules will initialized first before any other
       modules in the application dependency.  By default the run time
!      modules list is set to ‘m2iso:RTentity,m2iso:Storage,m2iso:SYSTEM,’
!      ‘m2iso:M2RTS,m2iso:RTExceptions,m2iso:IOLink’.  Note that these
       modules will only be linked into your executable if they are
       required.  Adding a long list of dependent modules will not effect
       the size of the executable it merely states the initialization
       order should they be required.
  
! ‘-fscaffold-dynamic’
!      the option ensures that ‘gm2’ will generate a dynamic scaffold
       infrastructure when compiling implementation and program modules.
!      By default this option is on.  Use ‘-fno-scaffold-dynamic’ to turn
!      it off or select ‘-fno-scaffold-static’.
  
! ‘-fscaffold-c’
       generate a C source scaffold for the current module being compiled.
  
! ‘-fscaffold-c++’
       generate a C++ source scaffold for the current module being
       compiled.
  
! ‘-fscaffold-main’
!      force the generation of the ‘main’ function.  This is not necessary
!      if the ‘-c’ is omitted.
  
! ‘-fscaffold-static’
!      the option ensures that ‘gm2’ will generate a static scaffold
       within the program module.  The static scaffold consists of
       sequences of calls to all dependent module initialization and
       finalization procedures.  The static scaffold is useful for
       debugging and single stepping the initialization blocks of
       implementation modules.
  
! ‘-fshared’
       generate a shared library from the module.
  
! ‘-fsoft-check-all’
       turns on all run time checks.  This is the same as invoking GNU
!      Modula-2 using the command options ‘-fnil’ ‘-frange’ ‘-findex’
!      ‘-fwholevalue’ ‘-fwholediv’ ‘-fcase’ ‘-freturn’.
  
! ‘-fsources’
       displays the path to the source of each module.  This option can be
       used at compile time to check the correct definition module is
       being used.
  
! ‘-fswig’
       generate a swig interface file.
  
! ‘-funbounded-by-reference’
       enable optimization of unbounded parameters by attempting to pass
!      non ‘VAR’ unbounded parameters by reference.  This optimization
       avoids the implicit copy inside the callee procedure.  GNU Modula-2
       will only allow unbounded parameters to be passed by reference if,
       inside the callee procedure, they are not written to, no address is
!      calculated on the array and it is not passed as a ‘VAR’ parameter.
       Note that it is possible to write code to break this optimization,
       therefore this option should be used carefully.  For example it
       would be possible to take the address of an array, pass the address
*************** supported:
*** 541,582 ****
       and write to the location using the address parameter.
  
       Due to the dangerous nature of this option it is not enabled when
!      the '-O' option is specified.
  
! '-fuse-list=filename'
!      if '-fscaffold-static' is enabled then use the file 'filename' for
       the initialization order of modules.  Whereas if
!      '-fscaffold-dynamic' is enabled then use this file to force linking
       of all module ctors.  This option cannot be used if
!      '-fgen-module-list=' is enabled.
  
! '-fwholediv'
       generate code to detect whole number division by zero or modulus by
       zero.
  
! '-fwholevalue'
       generate code to detect whole number overflow and underflow.
  
! '-Wcase-enum'
!      generate a warning if a 'CASE' statement selects on an enumerated
!      type expression and the statement is missing one or more 'CASE'
!      labels.  No warning is issued if the 'CASE' statement has a default
!      'ELSE' clause.  The option '-Wall' will turn on this flag.
  
! '-Wuninit-variable-checking'
       issue a warning if a variable is used before it is initialized.
       The checking only occurs in the first basic block in each
       procedure.  It does not check parameters, array types or set types.
  
! '-Wuninit-variable-checking=all,known,cond'
       issue a warning if a variable is used before it is initialized.
       The checking will only occur in the first basic block in each
!      procedure if 'known' is specified.  If 'cond' or 'all' is specified
       then checking continues into conditional branches of the flow
       graph.  All checking will stop when a procedure call is invoked or
!      the top of a loop is encountered.  The option '-Wall' will turn on
!      this flag with '-Wuninit-variable-checking=known'.  The
!      '-Wuninit-variable-checking=all' will increase compile time.
  
  
  File: m2.info,  Node: Linking,  Next: Elementary data types,  Prev: Compiler options,  Up: Using
--- 541,582 ----
       and write to the location using the address parameter.
  
       Due to the dangerous nature of this option it is not enabled when
!      the ‘-O’ option is specified.
  
! ‘-fuse-list=filename’
!      if ‘-fscaffold-static’ is enabled then use the file ‘filename’ for
       the initialization order of modules.  Whereas if
!      ‘-fscaffold-dynamic’ is enabled then use this file to force linking
       of all module ctors.  This option cannot be used if
!      ‘-fgen-module-list=’ is enabled.
  
! ‘-fwholediv’
       generate code to detect whole number division by zero or modulus by
       zero.
  
! ‘-fwholevalue’
       generate code to detect whole number overflow and underflow.
  
! ‘-Wcase-enum’
!      generate a warning if a ‘CASE’ statement selects on an enumerated
!      type expression and the statement is missing one or more ‘CASE’
!      labels.  No warning is issued if the ‘CASE’ statement has a default
!      ‘ELSE’ clause.  The option ‘-Wall’ will turn on this flag.
  
! ‘-Wuninit-variable-checking’
       issue a warning if a variable is used before it is initialized.
       The checking only occurs in the first basic block in each
       procedure.  It does not check parameters, array types or set types.
  
! ‘-Wuninit-variable-checking=all,known,cond’
       issue a warning if a variable is used before it is initialized.
       The checking will only occur in the first basic block in each
!      procedure if ‘known’ is specified.  If ‘cond’ or ‘all’ is specified
       then checking continues into conditional branches of the flow
       graph.  All checking will stop when a procedure call is invoked or
!      the top of a loop is encountered.  The option ‘-Wall’ will turn on
!      this flag with ‘-Wuninit-variable-checking=known’.  The
!      ‘-Wuninit-variable-checking=all’ will increase compile time.
  
  
  File: m2.info,  Node: Linking,  Next: Elementary data types,  Prev: Compiler options,  Up: Using
*************** File: m2.info,  Node: Linking,  Next: El
*** 584,604 ****
  This section describes the linking related options.  There are three
  linking strategies available which are dynamic scaffold, static scaffold
  and user defined.  The dynamic scaffold is enabled by default and each
! module will register itself to the run time 'M2RTS' via a constructor.
! The static scaffold mechanism will invoke each modules '_init' and
! '_finish' function in turn via a sequence of calls from within 'main'.
  Lastly the user defined strategy can be implemented by turning off the
! dynamic and static options via '-fno-scaffold-dynamic' and
! '-fno-scaffold-static'.
  
     In the simple test below:
  
       $ gm2 hello.mod
  
!    the driver will add the options '-fscaffold-dynamic' and
! '-fgen-module-list=-' which generate a list of application modules and
! also creates the 'main' function with calls to 'M2RTS'.  It can be
! useful to add the option '-fsources' which displays the source files as
  they are parsed and summarizes whether the source file is required for
  compilation or linking.
  
--- 584,604 ----
  This section describes the linking related options.  There are three
  linking strategies available which are dynamic scaffold, static scaffold
  and user defined.  The dynamic scaffold is enabled by default and each
! module will register itself to the run time ‘M2RTS’ via a constructor.
! The static scaffold mechanism will invoke each modules ‘_init’ and
! ‘_finish’ function in turn via a sequence of calls from within ‘main’.
  Lastly the user defined strategy can be implemented by turning off the
! dynamic and static options via ‘-fno-scaffold-dynamic’ and
! ‘-fno-scaffold-static’.
  
     In the simple test below:
  
       $ gm2 hello.mod
  
!    the driver will add the options ‘-fscaffold-dynamic’ and
! ‘-fgen-module-list=-’ which generate a list of application modules and
! also creates the ‘main’ function with calls to ‘M2RTS’.  It can be
! useful to add the option ‘-fsources’ which displays the source files as
  they are parsed and summarizes whether the source file is required for
  compilation or linking.
  
*************** then you could use these steps:
*** 608,617 ****
       $ gm2 -c -fscaffold-main hello.mod
       $ gm2 hello.o
  
!    The '-fscaffold-main' informs the compiler to generate the 'main'
  function and scaffold.  You can enable the environment variable
! 'GCC_M2LINK_RTFLAG' to trace the construction and destruction of the
! application.  The values for 'GCC_M2LINK_RTFLAG' are shown in the table
  below:
  
       value   | meaning
--- 608,617 ----
       $ gm2 -c -fscaffold-main hello.mod
       $ gm2 hello.o
  
!    The ‘-fscaffold-main’ informs the compiler to generate the ‘main’
  function and scaffold.  You can enable the environment variable
! ‘GCC_M2LINK_RTFLAG’ to trace the construction and destruction of the
! application.  The values for ‘GCC_M2LINK_RTFLAG’ are shown in the table
  below:
  
       value   | meaning
*************** below:
*** 631,638 ****
     One of the advantages of the dynamic scaffold is that the driver
  behaves in a similar way to the other front end drivers.  For example
  consider a small project consisting of 4 definition implementation
! modules ('a.def', 'a.mod', 'b.def', 'b.mod', 'c.def', 'c.mod', 'd.def',
! 'd.mod') and a program module 'program.mod'.
  
     To link this project we could:
  
--- 631,638 ----
     One of the advantages of the dynamic scaffold is that the driver
  behaves in a similar way to the other front end drivers.  For example
  consider a small project consisting of 4 definition implementation
! modules (‘a.def’, ‘a.mod’, ‘b.def’, ‘b.mod’, ‘c.def’, ‘c.mod’, ‘d.def’,
! ‘d.mod’) and a program module ‘program.mod’.
  
     To link this project we could:
  
*************** order in which the corresponding separat
*** 648,655 ****
  of their import lists.
  
     However, if required, you can override this using
! '-fruntime-modules=a,b,c,d' for example which forces the initialization
! sequence to 'a', 'b', 'c' and 'd'.
  
  
  File: m2.info,  Node: Elementary data types,  Next: Standard procedures,  Prev: Linking,  Up: Using
--- 648,655 ----
  of their import lists.
  
     However, if required, you can override this using
! ‘-fruntime-modules=a,b,c,d’ for example which forces the initialization
! sequence to ‘a’, ‘b’, ‘c’ and ‘d’.
  
  
  File: m2.info,  Node: Elementary data types,  Next: Standard procedures,  Prev: Linking,  Up: Using
*************** This section describes the elementary da
*** 661,670 ****
  Modula-2.  It also describes the relationship between these data types
  and the equivalent C data types.
  
!    The following data types are supported: 'INTEGER', 'LONGINT',
! 'SHORTINT', 'CARDINAL', 'LONGCARD', 'SHORTCARD', 'BOOLEAN', 'REAL',
! 'LONGREAL', 'SHORTREAL', 'COMPLEX', 'LONGCOMPLEX', 'SHORTCOMPLEX' and
! 'CHAR'.
  
     An equivalence table is given below:
  
--- 661,670 ----
  Modula-2.  It also describes the relationship between these data types
  and the equivalent C data types.
  
!    The following data types are supported: ‘INTEGER’, ‘LONGINT’,
! ‘SHORTINT’, ‘CARDINAL’, ‘LONGCARD’, ‘SHORTCARD’, ‘BOOLEAN’, ‘REAL’,
! ‘LONGREAL’, ‘SHORTREAL’, ‘COMPLEX’, ‘LONGCOMPLEX’, ‘SHORTCOMPLEX’ and
! ‘CHAR’.
  
     An equivalence table is given below:
  
*************** and the equivalent C data types.
*** 686,692 ****
       LONGCOMPLEX               complex long double
  
     Note that GNU Modula-2 also supports fixed sized data types which are
! exported from the 'SYSTEM' module.  *Note The PIM system module::.
  *Note The ISO system module::.
  
  
--- 686,692 ----
       LONGCOMPLEX               complex long double
  
     Note that GNU Modula-2 also supports fixed sized data types which are
! exported from the ‘SYSTEM’ module.  *Note The PIM system module::.
  *Note The ISO system module::.
  
  
*************** visible.
*** 702,712 ****
  -------------------------------------------------------------
  
  The following procedures are implemented and conform with Programming in
! Modula-2 and ISO Modula-2: 'NEW', 'DISPOSE', 'INC', 'DEC', 'INCL',
! 'EXCL' and 'HALT'.  The standard functions are: 'ABS', 'CAP', 'CHR',
! 'FLOAT', 'HIGH', 'LFLOAT', 'LTRUNC', 'MIN', 'MAX', 'ODD', 'SFLOAT',
! 'STRUNC' 'TRUNC' and 'VAL'.  All these functions and procedures (except
! 'HALT', 'NEW', 'DISPOSE' and, under non constant conditions, 'LENGTH')
  generate in-line code for efficiency.
  
  
--- 702,712 ----
  -------------------------------------------------------------
  
  The following procedures are implemented and conform with Programming in
! Modula-2 and ISO Modula-2: ‘NEW’, ‘DISPOSE’, ‘INC’, ‘DEC’, ‘INCL’,
! ‘EXCL’ and ‘HALT’.  The standard functions are: ‘ABS’, ‘CAP’, ‘CHR’,
! ‘FLOAT’, ‘HIGH’, ‘LFLOAT’, ‘LTRUNC’, ‘MIN’, ‘MAX’, ‘ODD’, ‘SFLOAT’,
! ‘STRUNC’ ‘TRUNC’ and ‘VAL’.  All these functions and procedures (except
! ‘HALT’, ‘NEW’, ‘DISPOSE’ and, under non constant conditions, ‘LENGTH’)
  generate in-line code for efficiency.
  
  
*************** generate in-line code for efficiency.
*** 953,959 ****
  2.4.2 ISO specific standard procedures and functions
  ----------------------------------------------------
  
! The standard function 'LENGTH' is specific to ISO Modula-2 and is
  defined as:
  
  
--- 953,959 ----
  2.4.2 ISO specific standard procedures and functions
  ----------------------------------------------------
  
! The standard function ‘LENGTH’ is specific to ISO Modula-2 and is
  defined as:
  
  
*************** defined as:
*** 980,988 ****
  
       PROCEDURE LENGTH (a: ARRAY OF CHAR) : CARDINAL ;
  
!    This function is evaluated at compile time, providing that string 'a'
! is a constant.  If 'a' cannot be evaluated then a call is made to
! 'M2RTS.Length'.
  
  
       (*
--- 980,988 ----
  
       PROCEDURE LENGTH (a: ARRAY OF CHAR) : CARDINAL ;
  
!    This function is evaluated at compile time, providing that string ‘a’
! is a constant.  If ‘a’ cannot be evaluated then a call is made to
! ‘M2RTS.Length’.
  
  
       (*
*************** File: m2.info,  Node: High procedure fun
*** 1008,1029 ****
  ===========================================
  
  This section describes the behavior of the standard procedure function
! 'HIGH' and it includes a table of parameters with the expected return
  result.  The standard procedure function will return the last accessible
! indice of an 'ARRAY'.  If the parameter to 'HIGH' is a static array then
! the result will be a 'CARDINAL' value matching the upper bound in the
! 'ARRAY' declaration.
  
     The section also describes the behavior of a string literal actual
! parameter and how it relates to 'HIGH'.  The PIM2, PIM3, PIM4 and ISO
! standard is silent on the issue of whether a 'nul' is present in an
! 'ARRAY' 'OF' 'CHAR' actual parameter.
  
!    If the first parameter to 'HIGH' is an unbounded 'ARRAY' the return
! value from 'HIGH' will be the last accessible element in the array.  If
  a constant string literal is passed as an actual parameter then it will
! be 'nul' terminated.  The table and example code below describe the
! effect of passing an actual parameter and the expected 'HIGH' value.
  
       MODULE example1 ;
  
--- 1008,1029 ----
  ===========================================
  
  This section describes the behavior of the standard procedure function
! ‘HIGH’ and it includes a table of parameters with the expected return
  result.  The standard procedure function will return the last accessible
! indice of an ‘ARRAY’.  If the parameter to ‘HIGH’ is a static array then
! the result will be a ‘CARDINAL’ value matching the upper bound in the
! ‘ARRAY’ declaration.
  
     The section also describes the behavior of a string literal actual
! parameter and how it relates to ‘HIGH’.  The PIM2, PIM3, PIM4 and ISO
! standard is silent on the issue of whether a ‘nul’ is present in an
! ‘ARRAY’ ‘OF’ ‘CHAR’ actual parameter.
  
!    If the first parameter to ‘HIGH’ is an unbounded ‘ARRAY’ the return
! value from ‘HIGH’ will be the last accessible element in the array.  If
  a constant string literal is passed as an actual parameter then it will
! be ‘nul’ terminated.  The table and example code below describe the
! effect of passing an actual parameter and the expected ‘HIGH’ value.
  
       MODULE example1 ;
  
*************** effect of passing an actual parameter an
*** 1051,1060 ****
        '12'            | 2        | TRUE
        '123'           | 3        | TRUE
  
!    A constant string literal will be passed to an 'ARRAY' 'OF' 'CHAR'
! with an appended 'nul' 'CHAR'.  Thus if the constant string literal ''''
  is passed as an actual parameter (in example1) then the result from
! 'HIGH(a)' will be '0'.
  
       MODULE example2 ;
  
--- 1051,1060 ----
        '12'            | 2        | TRUE
        '123'           | 3        | TRUE
  
!    A constant string literal will be passed to an ‘ARRAY’ ‘OF’ ‘CHAR’
! with an appended ‘nul’ ‘CHAR’.  Thus if the constant string literal ‘''’
  is passed as an actual parameter (in example1) then the result from
! ‘HIGH(a)’ will be ‘0’.
  
       MODULE example2 ;
  
*************** Modula-2 language as defined in ISO/IEC
*** 1109,1127 ****
  programming languages - part 1: Modula-2 Language, ISO/IEC 10514-1
  (1996) (ISO).
  
!    The command line switches '-fpim2', '-fpim3', '-fpim4' and '-fiso'
  can be used to force mutually exclusive features.  However by default
  the compiler will not aggressively fail if a non mutually exclusive
  feature is used from another dialect.  For example it is possible to
! specify '-fpim2' and still utilize 'DEFINITION' 'MODULES' which have no
  export list.
  
     Some dialect differences will force a compile time error, for example
! in PIM2 the user must 'IMPORT' 'SIZE' from the module 'SYSTEM', whereas
! in PIM3 and PIM4 'SIZE' is a pervasive function.  Thus compiling PIM4
! source code with the '-fpim2' switch will cause a compile time error.
! This can be fixed quickly with an additional 'IMPORT' or alternatively
! by compiling with the '-fpim4' switch.
  
     However there are some very important differences between the
  dialects which are mutually exclusive and therefore it is vital that
--- 1109,1127 ----
  programming languages - part 1: Modula-2 Language, ISO/IEC 10514-1
  (1996) (ISO).
  
!    The command line switches ‘-fpim2’, ‘-fpim3’, ‘-fpim4’ and ‘-fiso’
  can be used to force mutually exclusive features.  However by default
  the compiler will not aggressively fail if a non mutually exclusive
  feature is used from another dialect.  For example it is possible to
! specify ‘-fpim2’ and still utilize ‘DEFINITION’ ‘MODULES’ which have no
  export list.
  
     Some dialect differences will force a compile time error, for example
! in PIM2 the user must ‘IMPORT’ ‘SIZE’ from the module ‘SYSTEM’, whereas
! in PIM3 and PIM4 ‘SIZE’ is a pervasive function.  Thus compiling PIM4
! source code with the ‘-fpim2’ switch will cause a compile time error.
! This can be fixed quickly with an additional ‘IMPORT’ or alternatively
! by compiling with the ‘-fpim4’ switch.
  
     However there are some very important differences between the
  dialects which are mutually exclusive and therefore it is vital that
*************** used.
*** 1132,1138 ****
  ---------------------------------------------
  
  The most dangerous set of mutually exclusive features found in the four
! dialects supported by GNU Modula-2 are the 'INTEGER' division, remainder
  and modulus arithmetic operators.  It is important to note that the same
  source code can be compiled to give different run time results depending
  upon these switches!  The reference manual for the various dialects of
--- 1132,1138 ----
  ---------------------------------------------
  
  The most dangerous set of mutually exclusive features found in the four
! dialects supported by GNU Modula-2 are the ‘INTEGER’ division, remainder
  and modulus arithmetic operators.  It is important to note that the same
  source code can be compiled to give different run time results depending
  upon these switches!  The reference manual for the various dialects of
*************** File: m2.info,  Node: Exceptions,  Next:
*** 1164,1188 ****
  
  This section describes how exceptions are implemented in GNU Modula-2
  and how command line switches affect their behavior.  The option
! '-fsoft-check-all' enables all software checking of nil dereferences,
  division by zero etc.  Additional code is produced to check these
  conditions and exception handlers are invoked if the conditions prevail.
  
!    Without '-fsoft-check-all' these exceptions will be caught by
  hardware (assuming the hardware support exists) and a signal handler is
! invoked.  The signal handler will in turn 'THROW' an exception which
  will be caught by the appropriate Modula-2 handler.  However the action
  of throwing an exception from within a signal handler is implementation
  defined (according to the C++ documentation).  For example on the x86_64
  architecture this works whereas on the i686 architecture it does not.
  Therefore to ensure portability it is recommended to use
! '-fsoft-check-all'.
  
     (1)
  
     ---------- Footnotes ----------
  
!    (1) '-fsoft-check-all' can be effectively combined with '-O2' to
  semantically analyze source code for possible run time errors at compile
  time.
  
--- 1164,1188 ----
  
  This section describes how exceptions are implemented in GNU Modula-2
  and how command line switches affect their behavior.  The option
! ‘-fsoft-check-all’ enables all software checking of nil dereferences,
  division by zero etc.  Additional code is produced to check these
  conditions and exception handlers are invoked if the conditions prevail.
  
!    Without ‘-fsoft-check-all’ these exceptions will be caught by
  hardware (assuming the hardware support exists) and a signal handler is
! invoked.  The signal handler will in turn ‘THROW’ an exception which
  will be caught by the appropriate Modula-2 handler.  However the action
  of throwing an exception from within a signal handler is implementation
  defined (according to the C++ documentation).  For example on the x86_64
  architecture this works whereas on the i686 architecture it does not.
  Therefore to ensure portability it is recommended to use
! ‘-fsoft-check-all’.
  
     (1)
  
     ---------- Footnotes ----------
  
!    (1) ‘-fsoft-check-all’ can be effectively combined with ‘-O2’ to
  semantically analyze source code for possible run time errors at compile
  time.
  
*************** Consider the following program:
*** 1213,1219 ****
       END assignvalue.
  
     here we see that the programmer has overlooked that the return value
! from 'bad' will cause an overflow to 'foo'.  If we compile the code with
  the following options:
  
       $ gm2 -g -fsoft-check-all -O2 -c assignvalue.mod
--- 1213,1219 ----
       END assignvalue.
  
     here we see that the programmer has overlooked that the return value
! from ‘bad’ will cause an overflow to ‘foo’.  If we compile the code with
  the following options:
  
       $ gm2 -g -fsoft-check-all -O2 -c assignvalue.mod
*************** the following options:
*** 1222,1233 ****
  
     The gm2 semantic plugin is automatically run and will generate a
  warning message for every exception call which is known as reachable.
! It is highly advised to run the optimizer ('-O2' or '-O3') with
! '-fsoft-check-all' so that the compiler is able to run the optimizer and
  perform variable and flow analysis before the semantic plugin is
  invoked.
  
!    The '-Wuninit-variable-checking' can be used to identify
  uninitialized variables within the first basic block in a procedure.
  The checking is limited to variables so long as they are not an array or
  set or a variant record or var parameter.
--- 1222,1233 ----
  
     The gm2 semantic plugin is automatically run and will generate a
  warning message for every exception call which is known as reachable.
! It is highly advised to run the optimizer (‘-O2’ or ‘-O3’) with
! ‘-fsoft-check-all’ so that the compiler is able to run the optimizer and
  perform variable and flow analysis before the semantic plugin is
  invoked.
  
!    The ‘-Wuninit-variable-checking’ can be used to identify
  uninitialized variables within the first basic block in a procedure.
  The checking is limited to variables so long as they are not an array or
  set or a variant record or var parameter.
*************** uninitialized.
*** 1294,1300 ****
       END testwithnoptr.
  
     The following example detects a record is uninitialized via a pointer
! variable in a 'WITH' block.
  
       $ gm2 -g -c -Wuninit-variable-checking testwithnoptr.mod
       testwithnoptr.mod:21:8: warning: In procedure ‘test’: attempting to
--- 1294,1300 ----
       END testwithnoptr.
  
     The following example detects a record is uninitialized via a pointer
! variable in a ‘WITH’ block.
  
       $ gm2 -g -c -Wuninit-variable-checking testwithnoptr.mod
       testwithnoptr.mod:21:8: warning: In procedure ‘test’: attempting to
*************** File: m2.info,  Node: Extensions,  Next:
*** 1344,1361 ****
  
  This section introduces the GNU Modula-2 language extensions.  The GNU
  Modula-2 compiler allows abstract data types to be any type, not just
! restricted to a pointer type providing the '-fextended-opaque' option is
  supplied *Note Compiler options::.
  
     Declarations can be made in any order, whether they are types,
  constants, procedures, nested modules or variables.
  
!    GNU Modula-2 also allows programmers to interface to 'C' and assembly
  language.
  
!    GNU Modula-2 provides support for the special tokens '__LINE__',
! '__FILE__', '__FUNCTION__' and '__DATE__'.  Support for these tokens
! will occur even if the '-fcpp' option is not supplied.  A table of these
  identifiers and their data type and values is given below:
  
       Scope       GNU Modula-2 token      Data type and example value
--- 1344,1361 ----
  
  This section introduces the GNU Modula-2 language extensions.  The GNU
  Modula-2 compiler allows abstract data types to be any type, not just
! restricted to a pointer type providing the ‘-fextended-opaque’ option is
  supplied *Note Compiler options::.
  
     Declarations can be made in any order, whether they are types,
  constants, procedures, nested modules or variables.
  
!    GNU Modula-2 also allows programmers to interface to ‘C’ and assembly
  language.
  
!    GNU Modula-2 provides support for the special tokens ‘__LINE__’,
! ‘__FILE__’, ‘__FUNCTION__’ and ‘__DATE__’.  Support for these tokens
! will occur even if the ‘-fcpp’ option is not supplied.  A table of these
  identifiers and their data type and values is given below:
  
       Scope       GNU Modula-2 token      Data type and example value
*************** identifiers and their data type and valu
*** 1392,1405 ****
                                           is 1.
  
  
!    The preprocessor 'cpp' can be invoked via the '-fcpp' command line
! option.  This in turn invokes 'cpp' with the following arguments
! '-traditional -lang-asm'.  These options preserve comments and all
! quotations.  'gm2' treats a '#' character in the first column as a
! preprocessor directive unless '-fno-cpp' is supplied.
  
!    For example here is a module which calls 'FatalError' via the macro
! 'ERROR'.
  
       MODULE cpp ;
  
--- 1392,1405 ----
                                           is 1.
  
  
!    The preprocessor ‘cpp’ can be invoked via the ‘-fcpp’ command line
! option.  This in turn invokes ‘cpp’ with the following arguments
! ‘-traditional -lang-asm’.  These options preserve comments and all
! quotations.  ‘gm2’ treats a ‘#’ character in the first column as a
! preprocessor directive unless ‘-fno-cpp’ is supplied.
  
!    For example here is a module which calls ‘FatalError’ via the macro
! ‘ERROR’.
  
       MODULE cpp ;
  
*************** preprocessor directive unless '-fno-cpp'
*** 1428,1438 ****
       END cpp.
  
     Another use for the C preprocessor in Modula-2 might be to turn on
! debugging code.  For example the library module 'FormatStrings.mod' uses
! procedures from 'DynamicStrings.mod' and to track down memory leaks it
  was useful to track the source file and line where each string was
! created.  Here is a section of 'FormatStrings.mod' which shows how the
! debugging code was enabled and disabled by adding '-fcpp' to the command
  line.
  
       FROM DynamicStrings IMPORT String, InitString, InitStringChar, Mark,
--- 1428,1438 ----
       END cpp.
  
     Another use for the C preprocessor in Modula-2 might be to turn on
! debugging code.  For example the library module ‘FormatStrings.mod’ uses
! procedures from ‘DynamicStrings.mod’ and to track down memory leaks it
  was useful to track the source file and line where each string was
! created.  Here is a section of ‘FormatStrings.mod’ which shows how the
! debugging code was enabled and disabled by adding ‘-fcpp’ to the command
  line.
  
       FROM DynamicStrings IMPORT String, InitString, InitStringChar, Mark,
*************** line.
*** 1483,1491 ****
          RETURN s
       END Sprintf1 ;
  
!    It is worth noting that the overhead of this code once '-fcpp' is not
  present and -O2 is used will be zero since the local empty procedures
! 'DSdbEnter' and 'DSdbExit' will be thrown away by the optimization
  passes of the GCC backend.
  
  2.9.1 Optional procedure parameter
--- 1483,1491 ----
          RETURN s
       END Sprintf1 ;
  
!    It is worth noting that the overhead of this code once ‘-fcpp’ is not
  present and -O2 is used will be zero since the local empty procedures
! ‘DSdbEnter’ and ‘DSdbExit’ will be thrown away by the optimization
  passes of the GCC backend.
  
  2.9.1 Optional procedure parameter
*************** passes of the GCC backend.
*** 1493,1501 ****
  
  GNU Modula-2 allows the last parameter to a procedure or function
  parameter to be optional.  For example in the ISO library
! 'COROUTINES.def' the procedure 'NEWCOROUTINE' is defined as having an
! optional fifth argument ('initProtection') which, if absent, is
! automatically replaced by 'NIL'.
  
       PROCEDURE NEWCOROUTINE (procBody: PROC; workspace: SYSTEM.ADDRESS;
                               size: CARDINAL; VAR cr: COROUTINE;
--- 1493,1501 ----
  
  GNU Modula-2 allows the last parameter to a procedure or function
  parameter to be optional.  For example in the ISO library
! ‘COROUTINES.def’ the procedure ‘NEWCOROUTINE’ is defined as having an
! optional fifth argument (‘initProtection’) which, if absent, is
! automatically replaced by ‘NIL’.
  
       PROCEDURE NEWCOROUTINE (procBody: PROC; workspace: SYSTEM.ADDRESS;
                               size: CARDINAL; VAR cr: COROUTINE;
*************** automatically replaced by 'NIL'.
*** 1511,1517 ****
            which specifies the initial protection level of the coroutine.
         *)
  
!    The implementation module 'COROUTINES.mod' implements this procedure
  using the following syntax:
  
       PROCEDURE NEWCOROUTINE (procBody: PROC; workspace: SYSTEM.ADDRESS;
--- 1511,1517 ----
            which specifies the initial protection level of the coroutine.
         *)
  
!    The implementation module ‘COROUTINES.mod’ implements this procedure
  using the following syntax:
  
       PROCEDURE NEWCOROUTINE (procBody: PROC; workspace: SYSTEM.ADDRESS;
*************** using the following syntax:
*** 1522,1529 ****
       END NEWCOROUTINE ;
  
     Note that it is illegal for this declaration to contain an
! initializer value for 'initProtection'.  However it is necessary to
! surround this parameter with the brackets '[' and ']'.  This serves to
  remind the programmer that the last parameter was declared as optional
  in the definition module.
  
--- 1522,1529 ----
       END NEWCOROUTINE ;
  
     Note that it is illegal for this declaration to contain an
! initializer value for ‘initProtection’.  However it is necessary to
! surround this parameter with the brackets ‘[’ and ‘]’.  This serves to
  remind the programmer that the last parameter was declared as optional
  in the definition module.
  
*************** in which case the initializer is mandato
*** 1532,1538 ****
  program module.
  
     GNU Modula-2 also provides additional fixed sized data types which
! are all exported from the 'SYSTEM' module.  *Note The PIM system
  module::.  *Note The ISO system module::.
  
  
--- 1532,1538 ----
  program module.
  
     GNU Modula-2 also provides additional fixed sized data types which
! are all exported from the ‘SYSTEM’ module.  *Note The PIM system
  module::.  *Note The ISO system module::.
  
  
*************** PIM type compatibility see Programming i
*** 1611,1617 ****
  Modula-2 restricts the types of expressions to the same type.
  Expression compatibility is a symmetric relation.
  
!    For example two sub expressions of 'INTEGER' and 'CARDINAL' are not
  expression compatible
  (<http://freepages.modula2.org/report4/modula-2.html> and ISO Modula-2).
  
--- 1611,1617 ----
  Modula-2 restricts the types of expressions to the same type.
  Expression compatibility is a symmetric relation.
  
!    For example two sub expressions of ‘INTEGER’ and ‘CARDINAL’ are not
  expression compatible
  (<http://freepages.modula2.org/report4/modula-2.html> and ISO Modula-2).
  
*************** data types (imported from SYSTEM).
*** 1622,1655 ****
  -------------------------------
  
  This section discusses the assignment issues surrounding assignment
! compatibility of elementary types ('INTEGER', 'CARDINAL', 'REAL' and
! 'CHAR' for example).  The information here is found in more detail in
  the Modula-2 ISO standard BS ISO/IEC 10514-1:1996 page 122.
  
     Assignment compatibility exists between the same sized elementary
  types.
  
     Same type family of different sizes are also compatible as long as
! the 'MAX('type')' and 'MIN('type')' is known.  So for example this
! includes the 'INTEGER' family, 'CARDINAL' family and the 'REAL' family.
  
     The reason for this is that when the assignment is performed the
  compiler will check to see that the expression (on the right of the
! ':=') lies within the range of the designator type (on the left hand
! side of the ':=').  Thus these ordinal types can be assignment
! compatible.  However it does mean that 'WORD32' is not compatible with
! 'WORD16' as 'WORD32' does not have a minimum or maximum value and
  therefore cannot be checked.  The compiler does not know which of the
! two bytes from 'WORD32' should be copied into 'WORD16' and which two
! should be ignored.  Currently the types 'BITSET8', 'BITSET16' and
! 'BITSET32' are assignment incompatible.  However this restriction maybe
  lifted when further run time checking is achieved.
  
!    Modula-2 does allow 'INTEGER' to be assignment compatible with 'WORD'
! as they are the same size.  Likewise GNU Modula-2 allows 'INTEGER16' to
! be compatible with 'WORD16' and the same for the other fixed sized types
! and their sized equivalent in either 'WORD'n, 'BYTE' or 'LOC' types.
! However it prohibits assignment between 'WORD' and 'WORD32' even though
  on many systems these sizes will be the same.  The reasoning behind this
  rule is that the extended fixed sized types are meant to be used by
  applications requiring fixed sized data types and it is more portable to
--- 1622,1655 ----
  -------------------------------
  
  This section discusses the assignment issues surrounding assignment
! compatibility of elementary types (‘INTEGER’, ‘CARDINAL’, ‘REAL’ and
! ‘CHAR’ for example).  The information here is found in more detail in
  the Modula-2 ISO standard BS ISO/IEC 10514-1:1996 page 122.
  
     Assignment compatibility exists between the same sized elementary
  types.
  
     Same type family of different sizes are also compatible as long as
! the ‘MAX(’type‘)’ and ‘MIN(’type‘)’ is known.  So for example this
! includes the ‘INTEGER’ family, ‘CARDINAL’ family and the ‘REAL’ family.
  
     The reason for this is that when the assignment is performed the
  compiler will check to see that the expression (on the right of the
! ‘:=’) lies within the range of the designator type (on the left hand
! side of the ‘:=’).  Thus these ordinal types can be assignment
! compatible.  However it does mean that ‘WORD32’ is not compatible with
! ‘WORD16’ as ‘WORD32’ does not have a minimum or maximum value and
  therefore cannot be checked.  The compiler does not know which of the
! two bytes from ‘WORD32’ should be copied into ‘WORD16’ and which two
! should be ignored.  Currently the types ‘BITSET8’, ‘BITSET16’ and
! ‘BITSET32’ are assignment incompatible.  However this restriction maybe
  lifted when further run time checking is achieved.
  
!    Modula-2 does allow ‘INTEGER’ to be assignment compatible with ‘WORD’
! as they are the same size.  Likewise GNU Modula-2 allows ‘INTEGER16’ to
! be compatible with ‘WORD16’ and the same for the other fixed sized types
! and their sized equivalent in either ‘WORD’n, ‘BYTE’ or ‘LOC’ types.
! However it prohibits assignment between ‘WORD’ and ‘WORD32’ even though
  on many systems these sizes will be the same.  The reasoning behind this
  rule is that the extended fixed sized types are meant to be used by
  applications requiring fixed sized data types and it is more portable to
*************** exceed the type range will result in a c
*** 1668,1680 ****
  ------------------------------
  
  Parameter compatibility is divided into two areas, pass by value and
! pass by reference ('VAR').  In the case of pass by value the rules are
  exactly the same as assignment.  However in the second case, pass by
  reference, the actual parameter and formal parameter must be the same
! size and family.  Furthermore 'INTEGER' and 'CARDINAL's are not treated
  as compatible in the pass by reference case.
  
!    The types 'BYTE', 'LOC', 'WORD' and 'WORD'n derivatives are
  assignment and parameter compatible with any data type of the same size.
  
  
--- 1668,1680 ----
  ------------------------------
  
  Parameter compatibility is divided into two areas, pass by value and
! pass by reference (‘VAR’).  In the case of pass by value the rules are
  exactly the same as assignment.  However in the second case, pass by
  reference, the actual parameter and formal parameter must be the same
! size and family.  Furthermore ‘INTEGER’ and ‘CARDINAL’s are not treated
  as compatible in the pass by reference case.
  
!    The types ‘BYTE’, ‘LOC’, ‘WORD’ and ‘WORD’n derivatives are
  assignment and parameter compatible with any data type of the same size.
  
  
*************** File: m2.info,  Node: Unbounded by refer
*** 1686,1692 ****
  This section documents a GNU Modula-2 compiler switch which implements a
  language optimization surrounding the implementation of unbounded
  arrays.  In GNU Modula-2 the unbounded array is implemented by utilizing
! an internal structure 'struct {dataType *address, unsigned int high}'.
  So given the Modula-2 procedure declaration:
  
       PROCEDURE foo (VAR a: ARRAY OF dataType) ;
--- 1686,1692 ----
  This section documents a GNU Modula-2 compiler switch which implements a
  language optimization surrounding the implementation of unbounded
  arrays.  In GNU Modula-2 the unbounded array is implemented by utilizing
! an internal structure ‘struct {dataType *address, unsigned int high}’.
  So given the Modula-2 procedure declaration:
  
       PROCEDURE foo (VAR a: ARRAY OF dataType) ;
*************** So given the Modula-2 procedure declarat
*** 1694,1700 ****
          IF a[2]= (* etc *)
       END foo ;
  
!    it is translated into GCC 'tree's, which can be represented in their
  C form thus:
  
       void foo (struct {dataType *address, unsigned int high} a)
--- 1694,1700 ----
          IF a[2]= (* etc *)
       END foo ;
  
!    it is translated into GCC ‘tree’s, which can be represented in their
  C form thus:
  
       void foo (struct {dataType *address, unsigned int high} a)
*************** C form thus:
*** 1702,1708 ****
          if (a.address[2] == /* etc */
       }
  
!    Whereas if the procedure 'foo' was declared as:
  
       PROCEDURE foo (a: ARRAY OF dataType) ;
       BEGIN
--- 1702,1708 ----
          if (a.address[2] == /* etc */
       }
  
!    Whereas if the procedure ‘foo’ was declared as:
  
       PROCEDURE foo (a: ARRAY OF dataType) ;
       BEGIN
*************** C form thus:
*** 1710,1716 ****
       END foo ;
  
     then it is implemented by being translated into the following GCC
! 'tree's, which can be represented in their C form thus:
  
       void foo (struct {dataType *address, unsigned int high} a)
       {
--- 1710,1716 ----
       END foo ;
  
     then it is implemented by being translated into the following GCC
! ‘tree’s, which can be represented in their C form thus:
  
       void foo (struct {dataType *address, unsigned int high} a)
       {
*************** C form thus:
*** 1723,1739 ****
  
     This implementation works, but it makes a copy of each non VAR
  unbounded array when a procedure is entered.  If the unbounded array is
! not changed during procedure 'foo' then this implementation will be very
! inefficient.  In effect Modula-2 lacks the 'REF' keyword of Ada.
  Consequently the programmer maybe tempted to sacrifice semantic clarity
! for greater efficiency by declaring the parameter using the 'VAR'
! keyword in place of 'REF'.
  
!    The '-funbounded-by-reference' switch instructs the compiler to check
  and see if the programmer is modifying the content of any unbounded
  array.  If it is modified then a copy will be made upon entry into the
  procedure.  Conversely if the content is only read and never modified
! then this non 'VAR' unbounded array is a candidate for being passed by
  reference.  It is only a candidate as it is still possible that passing
  this parameter by reference could alter the meaning of the source code.
  For example consider the following case:
--- 1723,1739 ----
  
     This implementation works, but it makes a copy of each non VAR
  unbounded array when a procedure is entered.  If the unbounded array is
! not changed during procedure ‘foo’ then this implementation will be very
! inefficient.  In effect Modula-2 lacks the ‘REF’ keyword of Ada.
  Consequently the programmer maybe tempted to sacrifice semantic clarity
! for greater efficiency by declaring the parameter using the ‘VAR’
! keyword in place of ‘REF’.
  
!    The ‘-funbounded-by-reference’ switch instructs the compiler to check
  and see if the programmer is modifying the content of any unbounded
  array.  If it is modified then a copy will be made upon entry into the
  procedure.  Conversely if the content is only read and never modified
! then this non ‘VAR’ unbounded array is a candidate for being passed by
  reference.  It is only a candidate as it is still possible that passing
  this parameter by reference could alter the meaning of the source code.
  For example consider the following case:
*************** For example consider the following case:
*** 1751,1768 ****
          StrConCat(a, a, a)
       END foo ;
  
!    In the code above we see that the same parameter, 'a', is being
! passed three times to 'StrConCat'.  Clearly even though parameters 'b'
! and 'c' are never modified it would be incorrect to implement them as
  pass by reference.  Therefore the compiler checks to see if any non
! 'VAR' parameter is type compatible with any 'VAR' parameter and if so it
  generates run time procedure entry checks to determine whether the
! contents of parameters 'b' or 'c' matches the contents of 'a'.  If a
! match is detected then a copy is made and the 'address' in the unbounded
! 'struct'ure is modified.
  
     The compiler will check the address range of each candidate against
! the address range of any 'VAR' parameter, providing they are type
  compatible.  For example consider:
  
       PROCEDURE foo (a: ARRAY OF BYTE; VAR f: REAL) ;
--- 1751,1768 ----
          StrConCat(a, a, a)
       END foo ;
  
!    In the code above we see that the same parameter, ‘a’, is being
! passed three times to ‘StrConCat’.  Clearly even though parameters ‘b’
! and ‘c’ are never modified it would be incorrect to implement them as
  pass by reference.  Therefore the compiler checks to see if any non
! ‘VAR’ parameter is type compatible with any ‘VAR’ parameter and if so it
  generates run time procedure entry checks to determine whether the
! contents of parameters ‘b’ or ‘c’ matches the contents of ‘a’.  If a
! match is detected then a copy is made and the ‘address’ in the unbounded
! ‘struct’ure is modified.
  
     The compiler will check the address range of each candidate against
! the address range of any ‘VAR’ parameter, providing they are type
  compatible.  For example consider:
  
       PROCEDURE foo (a: ARRAY OF BYTE; VAR f: REAL) ;
*************** compatible.  For example consider:
*** 1780,1788 ****
          foo(r, r)
       END bar ;
  
!    Here we see that although parameter, 'a', is a candidate for the
  passing by reference, it would be incorrect to use this transformation.
! Thus the compiler detects that parameters, 'a' and 'f' are type
  compatible and will produce run time checking code to test whether the
  address range of their respective contents intersect.
  
--- 1780,1788 ----
          foo(r, r)
       END bar ;
  
!    Here we see that although parameter, ‘a’, is a candidate for the
  passing by reference, it would be incorrect to use this transformation.
! Thus the compiler detects that parameters, ‘a’ and ‘f’ are type
  compatible and will produce run time checking code to test whether the
  address range of their respective contents intersect.
  
*************** File: m2.info,  Node: Building a shared
*** 1793,1801 ****
  ==============================
  
  This section describes building a tiny shared library implemented in
! Modula-2 and built with 'libtool'.  Suppose a project consists of two
  definition modules and two implementation modules and a program module
! 'a.def', 'a.mod', 'b.def', 'b.mod' and 'c.mod'.  The first step is to
  compile the modules using position independent code.  This can be
  achieved by the following three commands:
  
--- 1793,1801 ----
  ==============================
  
  This section describes building a tiny shared library implemented in
! Modula-2 and built with ‘libtool’.  Suppose a project consists of two
  definition modules and two implementation modules and a program module
! ‘a.def’, ‘a.mod’, ‘b.def’, ‘b.mod’ and ‘c.mod’.  The first step is to
  compile the modules using position independent code.  This can be
  achieved by the following three commands:
  
*************** also must compile the scaffold.
*** 1812,1825 ****
       gm2 -c -g -fmakeinit -fshared c.mod
       libtool --tag=CC --mode=compile g++ -g -c c_m2.cpp -o c_m2.lo
  
!    The third step is to link all these '.lo' files.
  
       libtool --mode=link gcc -g c_m2.lo a.lo b.lo c.lo \
               -L$(prefix)/lib64 \
               -rpath `pwd` -lgm2 -lstdc++ -lm -o libabc.la
  
!    At this point the shared library 'libabc.so' will have been created
! inside the directory '.libs'.
  
  
  File: m2.info,  Node: Interface for Python,  Next: Producing a Python module,  Prev: Building a shared library,  Up: Using
--- 1812,1825 ----
       gm2 -c -g -fmakeinit -fshared c.mod
       libtool --tag=CC --mode=compile g++ -g -c c_m2.cpp -o c_m2.lo
  
!    The third step is to link all these ‘.lo’ files.
  
       libtool --mode=link gcc -g c_m2.lo a.lo b.lo c.lo \
               -L$(prefix)/lib64 \
               -rpath `pwd` -lgm2 -lstdc++ -lm -o libabc.la
  
!    At this point the shared library ‘libabc.so’ will have been created
! inside the directory ‘.libs’.
  
  
  File: m2.info,  Node: Interface for Python,  Next: Producing a Python module,  Prev: Building a shared library,  Up: Using
*************** to generate all the necessary wrapping t
*** 1835,1846 ****
  language may access the implementation module.
  
     Here is an example of how you might call upon the services of the
! Modula-2 library module 'NumberIO' from Python3.
  
     The following commands can be used to generate the Python3 module:
  
!      export src='directory to the sources'
!      export prefix='directory to where the compiler is installed'
       gm2 -I${src} -c -g -fswig ${src}/../../../gm2-libs/NumberIO.mod
       gm2 -I${src} -c -g -fmakelist ${src}/../../../gm2-libs/NumberIO.mod
  
--- 1835,1846 ----
  language may access the implementation module.
  
     Here is an example of how you might call upon the services of the
! Modula-2 library module ‘NumberIO’ from Python3.
  
     The following commands can be used to generate the Python3 module:
  
!      export src=‘directory to the sources’
!      export prefix=‘directory to where the compiler is installed’
       gm2 -I${src} -c -g -fswig ${src}/../../../gm2-libs/NumberIO.mod
       gm2 -I${src} -c -g -fmakelist ${src}/../../../gm2-libs/NumberIO.mod
  
*************** Modula-2 library module 'NumberIO' from
*** 1866,1879 ****
       cp .libs/libNumberIO.so _NumberIO.so
  
     The first four commands, generate the swig interface file
! 'NumberIO.i' and python wrap files 'NumberIO_wrap.cxx' and
! 'NumberIO.py'.  The next three 'libtool' commnads compile the C++ and
! Modula-2 source code into '.lo' objects.  The last 'libtool' command
! links all the '.lo' files into a '.la' file and includes all shared
  library dependencies.
  
     Now it is possible to run the following Python script (called
! 'testnum.py'):
  
       import NumberIO
  
--- 1866,1879 ----
       cp .libs/libNumberIO.so _NumberIO.so
  
     The first four commands, generate the swig interface file
! ‘NumberIO.i’ and python wrap files ‘NumberIO_wrap.cxx’ and
! ‘NumberIO.py’.  The next three ‘libtool’ commnads compile the C++ and
! Modula-2 source code into ‘.lo’ objects.  The last ‘libtool’ command
! links all the ‘.lo’ files into a ‘.la’ file and includes all shared
  library dependencies.
  
     Now it is possible to run the following Python script (called
! ‘testnum.py’):
  
       import NumberIO
  
*************** library dependencies.
*** 1885,1901 ****
       1234 x 2 = 2468
  
     *Note Producing a Python module:: for another example which uses the
! 'UNQUALIFIED' keyword to reduce the module name clutter from the
  viewport of Python3.
  
  2.13.1 Limitations of automatic generated of Swig files
  -------------------------------------------------------
  
  This section discusses the limitations of automatically generating swig
! files.  From the previous example we see that the module 'NumberIO' had
! a swig interface file 'NumberIO.i' automatically generated by the
  compiler.  If we consider three of the procedure definitions in
! 'NumberIO.def' we can see the success and limitations of the automatic
  interface generation.
  
       PROCEDURE StrToHex (a: ARRAY OF CHAR; VAR x: CARDINAL) ;
--- 1885,1901 ----
       1234 x 2 = 2468
  
     *Note Producing a Python module:: for another example which uses the
! ‘UNQUALIFIED’ keyword to reduce the module name clutter from the
  viewport of Python3.
  
  2.13.1 Limitations of automatic generated of Swig files
  -------------------------------------------------------
  
  This section discusses the limitations of automatically generating swig
! files.  From the previous example we see that the module ‘NumberIO’ had
! a swig interface file ‘NumberIO.i’ automatically generated by the
  compiler.  If we consider three of the procedure definitions in
! ‘NumberIO.def’ we can see the success and limitations of the automatic
  interface generation.
  
       PROCEDURE StrToHex (a: ARRAY OF CHAR; VAR x: CARDINAL) ;
*************** interface generation.
*** 1913,1929 ****
       extern void NumberIO_ReadInt (int *x);
       /*  parameters: x is unknown */
  
!    In the case of 'StrToHex' it can be seen that the compiler detects
  that the last parameter is an output.  It explicitly tells swig this by
! using the parameter name 'OUTPUT' and in the following comment it
  informs the user that it knows this to be an output parameter.  In the
! second procedure 'StrToInt' it marks the final parameter as an output,
! but it tells the user that this is only a guess.  Finally in 'ReadInt'
! it informs the user that it does not know whether the parameter, 'x', is
  an output, input or an inout parameter.
  
!    The compiler decides whether to mark a parameter as either: 'INPUT',
! 'OUTPUT' or 'INOUT' if it is read before written or visa versa in the
  first basic block.  At this point it will write output that the
  parameter is known.  If it is not read or written in the first basic
  block then subsequent basic blocks are searched and the result is
--- 1913,1929 ----
       extern void NumberIO_ReadInt (int *x);
       /*  parameters: x is unknown */
  
!    In the case of ‘StrToHex’ it can be seen that the compiler detects
  that the last parameter is an output.  It explicitly tells swig this by
! using the parameter name ‘OUTPUT’ and in the following comment it
  informs the user that it knows this to be an output parameter.  In the
! second procedure ‘StrToInt’ it marks the final parameter as an output,
! but it tells the user that this is only a guess.  Finally in ‘ReadInt’
! it informs the user that it does not know whether the parameter, ‘x’, is
  an output, input or an inout parameter.
  
!    The compiler decides whether to mark a parameter as either: ‘INPUT’,
! ‘OUTPUT’ or ‘INOUT’ if it is read before written or visa versa in the
  first basic block.  At this point it will write output that the
  parameter is known.  If it is not read or written in the first basic
  block then subsequent basic blocks are searched and the result is
*************** useful despite these limitations.
*** 1936,1942 ****
     In conclusion it would be wise to check all parameters in any
  automatically generated swig interface file.  Furthermore you can force
  the automatic mechanism to generate correct interface files by reading
! or writing to the 'VAR' parameter in the first basic block of a
  procedure.
  
  
--- 1936,1942 ----
     In conclusion it would be wise to check all parameters in any
  automatically generated swig interface file.  Furthermore you can force
  the automatic mechanism to generate correct interface files by reading
! or writing to the ‘VAR’ parameter in the first basic block of a
  procedure.
  
  
*************** initialize your application in Python.
*** 1954,1960 ****
  next event simulation.  The Python module needs to have a clear API
  which should be placed in a single definition module.  Furthermore the
  API should only use fundamental pervasive data types and strings.  Below
! the API is contained in the file 'twoDsim.def':
  
       DEFINITION MODULE twoDsim ;
  
--- 1954,1960 ----
  next event simulation.  The Python module needs to have a clear API
  which should be placed in a single definition module.  Furthermore the
  API should only use fundamental pervasive data types and strings.  Below
! the API is contained in the file ‘twoDsim.def’:
  
       DEFINITION MODULE twoDsim ;
  
*************** the API is contained in the file 'twoDsi
*** 2061,2070 ****
  
       END twoDsim.
  
!    The keyword 'UNQUALIFIED' can be used to ensure that the compiler
! will provide externally accessible functions 'gravity', 'box', 'poly3',
! 'poly5', 'poly6', 'mass', 'fix', 'circle', 'pivot', 'velocity', 'accel',
! 'fps', 'replayRate', 'simulateFor' rather than name mangled
  alternatives.  Hence in our Python3 application we could write:
  
       #!/usr/bin/env python3
--- 2061,2070 ----
  
       END twoDsim.
  
!    The keyword ‘UNQUALIFIED’ can be used to ensure that the compiler
! will provide externally accessible functions ‘gravity’, ‘box’, ‘poly3’,
! ‘poly5’, ‘poly6’, ‘mass’, ‘fix’, ‘circle’, ‘pivot’, ‘velocity’, ‘accel’,
! ‘fps’, ‘replayRate’, ‘simulateFor’ rather than name mangled
  alternatives.  Hence in our Python3 application we could write:
  
       #!/usr/bin/env python3
*************** alternatives.  Hence in our Python3 appl
*** 2089,2103 ****
           print ("exception raised")
  
     which accesses the various functions defined and implemented by the
! module 'twoDsim'.  The Modula-2 source code is compiled via:
  
       $ gm2 -g -fiso -c -fswig twoDsim.mod
       $ gm2 -g -fiso -c -fmakelist twoDsim.mod
       $ gm2 -g -fiso -c -fmakeinit twoDsim.mod
  
!    The first command both compiles the source file creating 'twoDsim.o'
! and produces a swig interface file 'swig.i'.  We now use 'swig' and
! 'g++' to produce and compile the interface wrappers:
  
       $ libtool --mode=compile g++ -g -c twoDsim_m2.cpp -o twoDsim_m2.lo
       $ swig -c++ -python3 twoDsim.i
--- 2089,2103 ----
           print ("exception raised")
  
     which accesses the various functions defined and implemented by the
! module ‘twoDsim’.  The Modula-2 source code is compiled via:
  
       $ gm2 -g -fiso -c -fswig twoDsim.mod
       $ gm2 -g -fiso -c -fmakelist twoDsim.mod
       $ gm2 -g -fiso -c -fmakeinit twoDsim.mod
  
!    The first command both compiles the source file creating ‘twoDsim.o’
! and produces a swig interface file ‘swig.i’.  We now use ‘swig’ and
! ‘g++’ to produce and compile the interface wrappers:
  
       $ libtool --mode=compile g++ -g -c twoDsim_m2.cpp -o twoDsim_m2.lo
       $ swig -c++ -python3 twoDsim.i
*************** and produces a swig interface file 'swig
*** 2116,2122 ****
          -rpath `pwd` -lgm2 -lstdc++ -lm -o libtwoDsim.la
       cp .libs/libtwoDsim.so _twoDsim.so
  
!    The library name must start with '_' to comply with the Python3
  module naming scheme.
  
  
--- 2116,2122 ----
          -rpath `pwd` -lgm2 -lstdc++ -lm -o libtwoDsim.la
       cp .libs/libtwoDsim.so _twoDsim.so
  
!    The library name must start with ‘_’ to comply with the Python3
  module naming scheme.
  
  
*************** File: m2.info,  Node: Interface to C,  N
*** 2128,2142 ****
  The GNU Modula-2 compiler tries to use the C calling convention wherever
  possible however some parameters have no C equivalent and thus a
  language specific method is used.  For example unbounded arrays are
! passed as a 'struct {void *address, unsigned int high}' and the contents
  of these arrays are copied by callee functions when they are declared as
! non 'VAR' parameters.  The 'VAR' equivalent unbounded array parameters
! need no copy, but still use the 'struct' representation.
  
     The recommended method of interfacing GNU Modula-2 to C is by telling
  the definition module that the implementation is in the C language.
! This is achieved by using the tokens 'DEFINITION MODULE FOR "C"'.  Here
! is an example 'libprintf.def'.
  
       DEFINITION MODULE FOR "C" libprintf ;
  
--- 2128,2142 ----
  The GNU Modula-2 compiler tries to use the C calling convention wherever
  possible however some parameters have no C equivalent and thus a
  language specific method is used.  For example unbounded arrays are
! passed as a ‘struct {void *address, unsigned int high}’ and the contents
  of these arrays are copied by callee functions when they are declared as
! non ‘VAR’ parameters.  The ‘VAR’ equivalent unbounded array parameters
! need no copy, but still use the ‘struct’ representation.
  
     The recommended method of interfacing GNU Modula-2 to C is by telling
  the definition module that the implementation is in the C language.
! This is achieved by using the tokens ‘DEFINITION MODULE FOR "C"’.  Here
! is an example ‘libprintf.def’.
  
       DEFINITION MODULE FOR "C" libprintf ;
  
*************** is an example 'libprintf.def'.
*** 2146,2161 ****
  
       END libprintf.
  
!    the 'UNQUALIFIED' keyword in the definition module informs GNU
  Modula-2 not to prefix the module name to exported references in the
  object file.
  
!    The 'printf' declaration states that the first parameter semantically
! matches 'ARRAY OF CHAR' but since the module is for the C language it
! will be mapped onto 'char *'.  The token '...' indicates a variable
  number of arguments (varargs) and all parameters passed here are mapped
  onto their C equivalents.  Arrays and constant strings are passed as
! pointers.  Lastly '[ INTEGER ]' states that the caller can ignore the
  function return result if desired.
  
     The hello world program can be rewritten as:
--- 2146,2161 ----
  
       END libprintf.
  
!    the ‘UNQUALIFIED’ keyword in the definition module informs GNU
  Modula-2 not to prefix the module name to exported references in the
  object file.
  
!    The ‘printf’ declaration states that the first parameter semantically
! matches ‘ARRAY OF CHAR’ but since the module is for the C language it
! will be mapped onto ‘char *’.  The token ‘...’ indicates a variable
  number of arguments (varargs) and all parameters passed here are mapped
  onto their C equivalents.  Arrays and constant strings are passed as
! pointers.  Lastly ‘[ INTEGER ]’ states that the caller can ignore the
  function return result if desired.
  
     The hello world program can be rewritten as:
*************** function return result if desired.
*** 2170,2181 ****
  
     and it can be compiled by:
  
!    'gm2 -g hello.mod -lc'
  
!    In reality the '-lc' is redundant as libc is always included in the
  linking process.  It is shown here to emphasize that the C library or
! object file containing 'printf' must be present.  The search path for
! modules can be changed by using '-I'.
  
     If a procedure function is declared using varargs then some parameter
  values are converted.  The table below summarizes the default
--- 2170,2181 ----
  
     and it can be compiled by:
  
!    ‘gm2 -g hello.mod -lc’
  
!    In reality the ‘-lc’ is redundant as libc is always included in the
  linking process.  It is shown here to emphasize that the C library or
! object file containing ‘printf’ must be present.  The search path for
! modules can be changed by using ‘-I’.
  
     If a procedure function is declared using varargs then some parameter
  values are converted.  The table below summarizes the default
*************** conversions and default types used.
*** 2190,2198 ****
       a: ARRAY [0..5] OF CHAR|  ADR (a)             |   char *
       3.14                   |  none                |   long double
  
!    If you wish to pass 'int' values then you should explicitly convert
  the constants using one of the conversion mechanisms.  For example:
! 'INTEGER(10)' or 'VAL(INTEGER, 10)' or 'CAST(INTEGER, 10)'.
  
  
  File: m2.info,  Node: Assembly language,  Next: Alignment,  Prev: Interface to C,  Up: Using
--- 2190,2198 ----
       a: ARRAY [0..5] OF CHAR|  ADR (a)             |   char *
       3.14                   |  none                |   long double
  
!    If you wish to pass ‘int’ values then you should explicitly convert
  the constants using one of the conversion mechanisms.  For example:
! ‘INTEGER(10)’ or ‘VAL(INTEGER, 10)’ or ‘CAST(INTEGER, 10)’.
  
  
  File: m2.info,  Node: Assembly language,  Next: Alignment,  Prev: Interface to C,  Up: Using
*************** File: m2.info,  Node: Assembly language,
*** 2201,2211 ****
  ===================================
  
  The interface for GNU Modula-2 to assembly language is almost identical
! to GNU C. The only alterations are that the keywords 'asm' and
! 'volatile' are in capitals, following the Modula-2 convention.
  
     A simple, but highly non optimal, example is given below.  Here we
! want to add the two 'CARDINAL's 'foo' and 'bar' together and return the
  result.  The target processor is assumed to be executing the x86_64
  instruction set.
  
--- 2201,2211 ----
  ===================================
  
  The interface for GNU Modula-2 to assembly language is almost identical
! to GNU C. The only alterations are that the keywords ‘asm’ and
! ‘volatile’ are in capitals, following the Modula-2 convention.
  
     A simple, but highly non optimal, example is given below.  Here we
! want to add the two ‘CARDINAL’s ‘foo’ and ‘bar’ together and return the
  result.  The target processor is assumed to be executing the x86_64
  instruction set.
  
*************** File: m2.info,  Node: Alignment,  Next:
*** 2253,2260 ****
  ========================
  
  GNU Modula-2 allows you to specify alignment for types and variables.
! The syntax for alignment is to use the ISO pragma directives '<*'
! 'bytealignment (' expression ')' and '*>'.  These directives can be used
  after type and variable declarations.
  
     The ebnf of the alignment production is:
--- 2253,2260 ----
  ========================
  
  GNU Modula-2 allows you to specify alignment for types and variables.
! The syntax for alignment is to use the ISO pragma directives ‘<*’
! ‘bytealignment (’ expression ‘)’ and ‘*>’.  These directives can be used
  after type and variable declarations.
  
     The ebnf of the alignment production is:
*************** after type and variable declarations.
*** 2263,2271 ****
       ByteAlignment := '<*' AttributeExpression '*>' =:
       AlignmentExpression := "(" ConstExpression ")" =:
  
!    The 'Alignment' ebnf statement may be used during construction of
  types, records, record fields, arrays, pointers and variables.  Below is
! an example of aligning a type so that the variable 'bar' is aligned on a
  1024 address.
  
       MODULE align ;
--- 2263,2271 ----
       ByteAlignment := '<*' AttributeExpression '*>' =:
       AlignmentExpression := "(" ConstExpression ")" =:
  
!    The ‘Alignment’ ebnf statement may be used during construction of
  types, records, record fields, arrays, pointers and variables.  Below is
! an example of aligning a type so that the variable ‘bar’ is aligned on a
  1024 address.
  
       MODULE align ;
*************** an example of aligning a type so that th
*** 2308,2314 ****
          END
       END align4.
  
!    In example 'align5' record field 'y' is aligned on a 1024 byte
  boundary.
  
       MODULE align5 ;
--- 2308,2314 ----
          END
       END align4.
  
!    In example ‘align5’ record field ‘y’ is aligned on a 1024 byte
  boundary.
  
       MODULE align5 ;
*************** boundary.
*** 2332,2339 ****
          END
       END align5.
  
!    In the example below module 'align6' declares 'foo' as an array of
! 256 'INTEGER's.  The array 'foo' is aligned on a 1024 byte boundary.
  
       MODULE align6 ;
  
--- 2332,2339 ----
          END
       END align5.
  
!    In the example below module ‘align6’ declares ‘foo’ as an array of
! 256 ‘INTEGER’s.  The array ‘foo’ is aligned on a 1024 byte boundary.
  
       MODULE align6 ;
  
*************** File: m2.info,  Node: Packed,  Next: Bui
*** 2361,2368 ****
  2.18 Packing data types
  =======================
  
! The pragma '<* bytealignment(0) *>' can be used to specify that the
! fields within a 'RECORD' are to be packed.  Currently this only applies
  to fields which are declared as subranges, ordinal types and enumerated
  types.  Here is an example of how two subranges might be packed into a
  byte.
--- 2361,2368 ----
  2.18 Packing data types
  =======================
  
! The pragma ‘<* bytealignment(0) *>’ can be used to specify that the
! fields within a ‘RECORD’ are to be packed.  Currently this only applies
  to fields which are declared as subranges, ordinal types and enumerated
  types.  Here is an example of how two subranges might be packed into a
  byte.
*************** byte.
*** 2378,2390 ****
                     y: bits3i ;
                 END ;
  
!    Notice that the user has specified that in between fields 'x' and 'y'
  there are two bits unused.
  
     Now the user wishes to create a record with byte numbers zero and one
! occupied and then an 'INTEGER32' field which is four byte aligned.  In
  this case byte numbers two and three will be unused.  The pragma
! 'bytealignment' can be issued at the start of the record indicating the
  default alignment for the whole record and this can be overridden by
  individual fields if necessary.
  
--- 2378,2390 ----
                     y: bits3i ;
                 END ;
  
!    Notice that the user has specified that in between fields ‘x’ and ‘y’
  there are two bits unused.
  
     Now the user wishes to create a record with byte numbers zero and one
! occupied and then an ‘INTEGER32’ field which is four byte aligned.  In
  this case byte numbers two and three will be unused.  The pragma
! ‘bytealignment’ can be issued at the start of the record indicating the
  default alignment for the whole record and this can be overridden by
  individual fields if necessary.
  
*************** individual fields if necessary.
*** 2395,2401 ****
                END ;
  
     In the following example the user has specified that a record has two
! fields 'p' and 'q' but that there are three bytes unused between these
  fields.
  
          header = RECORD
--- 2395,2401 ----
                END ;
  
     In the following example the user has specified that a record has two
! fields ‘p’ and ‘q’ but that there are three bytes unused between these
  fields.
  
          header = RECORD
*************** fields.
*** 2405,2414 ****
                      q: byte ;
                   END ;
  
!    The pragma '<* bytesunused(x) *>' can only be used if the current
! field is on a byte boundary.  There is also a 'SYSTEM' pseudo procedure
! function 'TBITSIZE(T)' which returns the minimum number of bits
! necessary to represent type 'T'.
  
     Another example of packing record bit fields is given below:
  
--- 2405,2414 ----
                      q: byte ;
                   END ;
  
!    The pragma ‘<* bytesunused(x) *>’ can only be used if the current
! field is on a byte boundary.  There is also a ‘SYSTEM’ pseudo procedure
! function ‘TBITSIZE(T)’ which returns the minimum number of bits
! necessary to represent type ‘T’.
  
     Another example of packing record bit fields is given below:
  
*************** File: m2.info,  Node: Built-ins,  Next:
*** 2454,2467 ****
  
  This section describes the built-in constants and functions defined in
  GNU Modula-2.  The following compiler constants can be accessed using
! the '__ATTRIBUTE__' '__BUILTIN__' keywords.  These are not part of the
  Modula-2 language and they may differ depending upon the target
  architecture but they provide a method whereby common libraries can
  interface to a different underlying architecture.
  
!    The built-in constants are: 'BITS_PER_UNIT', 'BITS_PER_WORD',
! 'BITS_PER_CHAR' and 'UNITS_PER_WORD'.  They are integrated into GNU
! Modula-2 by an extension to the 'ConstFactor' rule:
  
       ConstFactor := ConstQualidentOrSet | Number | ConstString |
                      "(" ConstExpression ")" | "NOT" ConstFactor |
--- 2454,2467 ----
  
  This section describes the built-in constants and functions defined in
  GNU Modula-2.  The following compiler constants can be accessed using
! the ‘__ATTRIBUTE__’ ‘__BUILTIN__’ keywords.  These are not part of the
  Modula-2 language and they may differ depending upon the target
  architecture but they provide a method whereby common libraries can
  interface to a different underlying architecture.
  
!    The built-in constants are: ‘BITS_PER_UNIT’, ‘BITS_PER_WORD’,
! ‘BITS_PER_CHAR’ and ‘UNITS_PER_WORD’.  They are integrated into GNU
! Modula-2 by an extension to the ‘ConstFactor’ rule:
  
       ConstFactor := ConstQualidentOrSet | Number | ConstString |
                      "(" ConstExpression ")" | "NOT" ConstFactor |
*************** Modula-2 by an extension to the 'ConstFa
*** 2469,2507 ****
  
       ConstAttribute := "__ATTRIBUTE__" "__BUILTIN__" "(" "(" Ident ")" ")" =:
  
!    Here is an example taken from the ISO library 'SYSTEM.def':
  
       CONST
          BITSPERLOC    = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
          LOCSPERWORD   = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
  
     Built-in functions are transparent to the end user.  All built-in
! functions are declared in 'DEFINITION MODULE's and are imported as and
  when required.  Built-in functions are declared in definition modules by
! using the '__BUILTIN__' keyword.  Here is a section of the ISO library
! 'LongMath.def' which demonstrates this feature.
  
       PROCEDURE __BUILTIN__ sqrt (x: LONGREAL): LONGREAL;
         (* Returns the square root of x *)
  
!    This indicates that the function 'sqrt' will be implemented using the
  gcc built-in maths library.  If gcc cannot utilize the built-in function
! (for example if the programmer requested the address of 'sqrt') then
  code is generated to call the alternative function implemented in the
! 'IMPLEMENTATION' 'MODULE'.
  
!    Sometimes a function exported from the 'DEFINITION' 'MODULE' will
  have a different name from the built-in function within gcc.  In such
  cases the mapping between the GNU Modula-2 function name and the gcc
! name is expressed using the keywords '__ATTRIBUTE__' '__BUILTIN__'
! '((Ident))'.  For example the function 'sqrt' in 'LongMath.def' maps
! onto the gcc built-in function 'sqrtl' and this is expressed as:
  
       PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((sqrtl)) sqrt
                                           (x: LONGREAL) : LONGREAL;
         (* Returns the positive square root of x *)
  
!    The following module 'Builtins.def' enumerates the list of built-in
  functions which can be accessed in GNU Modula-2.  It also serves to
  define the parameter and return value for each function:
  
--- 2469,2507 ----
  
       ConstAttribute := "__ATTRIBUTE__" "__BUILTIN__" "(" "(" Ident ")" ")" =:
  
!    Here is an example taken from the ISO library ‘SYSTEM.def’:
  
       CONST
          BITSPERLOC    = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
          LOCSPERWORD   = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
  
     Built-in functions are transparent to the end user.  All built-in
! functions are declared in ‘DEFINITION MODULE’s and are imported as and
  when required.  Built-in functions are declared in definition modules by
! using the ‘__BUILTIN__’ keyword.  Here is a section of the ISO library
! ‘LongMath.def’ which demonstrates this feature.
  
       PROCEDURE __BUILTIN__ sqrt (x: LONGREAL): LONGREAL;
         (* Returns the square root of x *)
  
!    This indicates that the function ‘sqrt’ will be implemented using the
  gcc built-in maths library.  If gcc cannot utilize the built-in function
! (for example if the programmer requested the address of ‘sqrt’) then
  code is generated to call the alternative function implemented in the
! ‘IMPLEMENTATION’ ‘MODULE’.
  
!    Sometimes a function exported from the ‘DEFINITION’ ‘MODULE’ will
  have a different name from the built-in function within gcc.  In such
  cases the mapping between the GNU Modula-2 function name and the gcc
! name is expressed using the keywords ‘__ATTRIBUTE__’ ‘__BUILTIN__’
! ‘((Ident))’.  For example the function ‘sqrt’ in ‘LongMath.def’ maps
! onto the gcc built-in function ‘sqrtl’ and this is expressed as:
  
       PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((sqrtl)) sqrt
                                           (x: LONGREAL) : LONGREAL;
         (* Returns the positive square root of x *)
  
!    The following module ‘Builtins.def’ enumerates the list of built-in
  functions which can be accessed in GNU Modula-2.  It also serves to
  define the parameter and return value for each function:
  
*************** in-line code if optimization flags are p
*** 2761,2767 ****
  advised to utilize the same functions from more generic libraries.  The
  built-in mechanism will be applied to these generic libraries where
  appropriate.  Note for the mathematical routines to be in-lined you need
! to specify the '-ffast-math -O' options.
  
  
  File: m2.info,  Node: The PIM system module,  Next: The ISO system module,  Prev: Built-ins,  Up: Using
--- 2761,2767 ----
  advised to utilize the same functions from more generic libraries.  The
  built-in mechanism will be applied to these generic libraries where
  appropriate.  Note for the mathematical routines to be in-lined you need
! to specify the ‘-ffast-math -O’ options.
  
  
  File: m2.info,  Node: The PIM system module,  Next: The ISO system module,  Prev: Built-ins,  Up: Using
*************** File: m2.info,  Node: The PIM system mod
*** 2973,2994 ****
       END SYSTEM.
  
     The different dialects of Modula-2 PIM-[234] and ISO Modula-2 declare
! the function 'SIZE' in different places.  PIM-[34] and ISO Modula-2
! declare 'SIZE' as a pervasive function (declared in the base module).
! PIM-2 defined 'SIZE' in the 'SYSTEM' module (as shown above).
  
     GNU Modula-2 allows users to specify the dialect of Modula-2 by using
! the '-fiso' and '-fpim2' command line switches.
  
!    The data types 'CSIZE_T' and 'CSSIZE_T' are also exported from the
! 'SYSTEM' module.  The type 'CSIZE_T' is unsigned and is mapped onto the
! target C data type 'size_t' whereas the type 'CSSIZE_T' is mapped onto
! the signed C data type 'ssize_t'.
  
     It is anticipated that these should only be used to provide cross
  platform definition modules for C libraries.
  
!    There are also a variety of fixed sized 'INTEGER' and 'CARDINAL'
  types.  The variety of the fixed sized types will depend upon the target
  architecture.
  
--- 2973,2994 ----
       END SYSTEM.
  
     The different dialects of Modula-2 PIM-[234] and ISO Modula-2 declare
! the function ‘SIZE’ in different places.  PIM-[34] and ISO Modula-2
! declare ‘SIZE’ as a pervasive function (declared in the base module).
! PIM-2 defined ‘SIZE’ in the ‘SYSTEM’ module (as shown above).
  
     GNU Modula-2 allows users to specify the dialect of Modula-2 by using
! the ‘-fiso’ and ‘-fpim2’ command line switches.
  
!    The data types ‘CSIZE_T’ and ‘CSSIZE_T’ are also exported from the
! ‘SYSTEM’ module.  The type ‘CSIZE_T’ is unsigned and is mapped onto the
! target C data type ‘size_t’ whereas the type ‘CSSIZE_T’ is mapped onto
! the signed C data type ‘ssize_t’.
  
     It is anticipated that these should only be used to provide cross
  platform definition modules for C libraries.
  
!    There are also a variety of fixed sized ‘INTEGER’ and ‘CARDINAL’
  types.  The variety of the fixed sized types will depend upon the target
  architecture.
  
*************** File: m2.info,  Node: The ISO system mod
*** 3254,3268 ****
  
       END SYSTEM.
  
!    The data types 'CSIZE_T' and 'CSSIZE_T' are also exported from the
! 'SYSTEM' module.  The type 'CSIZE_T' is unsigned and is mapped onto the
! target C data type 'size_t' whereas the type 'CSSIZE_T' is mapped onto
! the signed C data type 'ssize_t'.
  
     It is anticipated that these should only be used to provide cross
  platform definition modules for C libraries.
  
!    There are also a variety of fixed sized 'INTEGER' and 'CARDINAL'
  types.  The variety of the fixed sized types will depend upon the target
  architecture.
  
--- 3254,3268 ----
  
       END SYSTEM.
  
!    The data types ‘CSIZE_T’ and ‘CSSIZE_T’ are also exported from the
! ‘SYSTEM’ module.  The type ‘CSIZE_T’ is unsigned and is mapped onto the
! target C data type ‘size_t’ whereas the type ‘CSSIZE_T’ is mapped onto
! the signed C data type ‘ssize_t’.
  
     It is anticipated that these should only be used to provide cross
  platform definition modules for C libraries.
  
!    There are also a variety of fixed sized ‘INTEGER’ and ‘CARDINAL’
  types.  The variety of the fixed sized types will depend upon the target
  architecture.
  
*************** run using:
*** 3312,3320 ****
  
     Finally the results of the testsuite can be emailed to the
  gcc-testresults (https://gcc.gnu.org/lists.html) list using the
! 'test_summary' script found in the gcc source tree:
  
!      $ 'directory to the sources'/contrib/test_summary
  
  
  File: m2.info,  Node: Limitations,  Next: Objectives,  Prev: Regression tests,  Up: Using
--- 3312,3320 ----
  
     Finally the results of the testsuite can be emailed to the
  gcc-testresults (https://gcc.gnu.org/lists.html) list using the
! ‘test_summary’ script found in the gcc source tree:
  
!      $ ‘directory to the sources’/contrib/test_summary
  
  
  File: m2.info,  Node: Limitations,  Next: Objectives,  Prev: Regression tests,  Up: Using
*************** File: m2.info,  Node: Objectives,  Next:
*** 3332,3348 ****
  2.26 Objectives
  ===============
  
!    * The intention of GNU Modula-2 is to provide a production Modula-2
       front end to GCC.
  
!    * It should support all Niklaus Wirth PIM Dialects [234] and also ISO
       Modula-2 including a re-implementation of all the ISO modules.
  
!    * There should be an easy interface to C.
  
!    * Exploit the features of GCC.
  
!    * Listen to the requests of the users.
  
  
  File: m2.info,  Node: FAQ,  Next: Community,  Prev: Objectives,  Up: Using
--- 3332,3348 ----
  2.26 Objectives
  ===============
  
!    • The intention of GNU Modula-2 is to provide a production Modula-2
       front end to GCC.
  
!    • It should support all Niklaus Wirth PIM Dialects [234] and also ISO
       Modula-2 including a re-implementation of all the ISO modules.
  
!    • There should be an easy interface to C.
  
!    • Exploit the features of GCC.
  
!    • Listen to the requests of the users.
  
  
  File: m2.info,  Node: FAQ,  Next: Community,  Prev: Objectives,  Up: Using
*************** GNU General Public License
*** 3408,3414 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 3408,3414 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 4095,4105 ****
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!    The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 4095,4105 ----
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!    The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** applications with the library.  If this
*** 4116,4125 ****
  GNU Lesser General Public License instead of this License.  But first,
  please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
  
- * Menu:
- 
- * Contributing::
- 
  
  File: m2.info,  Node: Contributing,  Next: EBNF,  Prev: Copying,  Up: Top
  
--- 4116,4121 ----
*************** modules originally came from the M2F com
*** 4657,4666 ****
  and extended.  They provide a basic interface to the underlying
  operating system via libc.  They also include a number of libraries to
  allow access to compiler built-ins.  Perhaps the largest difference to
! PIM and ISO libraries is the 'DynamicString' module which declares the
! type 'String'.  The heavy use of this opaque data type results in a
! number of equivalent modules that can either handle 'ARRAY OF CHAR' or
! 'String'.
  
     These modules have been extensively tested and are used throughout
  building the GNU Modula-2 compiler.
--- 4653,4662 ----
  and extended.  They provide a basic interface to the underlying
  operating system via libc.  They also include a number of libraries to
  allow access to compiler built-ins.  Perhaps the largest difference to
! PIM and ISO libraries is the ‘DynamicString’ module which declares the
! type ‘String’.  The heavy use of this opaque data type results in a
! number of equivalent modules that can either handle ‘ARRAY OF CHAR’ or
! ‘String’.
  
     These modules have been extensively tested and are used throughout
  building the GNU Modula-2 compiler.
*************** File: m2.info,  Node: PIM coroutine supp
*** 11974,11981 ****
  4.3 PIM coroutine support
  =========================
  
! This directory contains a PIM 'SYSTEM' containing the 'PROCESS'
! primitives built on top of 'gthread's.
  * Menu:
  
  * gm2-libs-coroutines/Executive::Executive.def
--- 11970,11977 ----
  4.3 PIM coroutine support
  =========================
  
! This directory contains a PIM ‘SYSTEM’ containing the ‘PROCESS’
! primitives built on top of ‘gthread’s.
  * Menu:
  
  * gm2-libs-coroutines/Executive::Executive.def
*************** File: m2.info,  Node: M2 ISO Libraries,
*** 12541,12589 ****
  
  This directory contains the ISO definition modules and some
  corresponding implementation modules.  The definition files:
! 'ChanConsts.def', 'CharClass.def', 'ComplexMath.def',
! 'ConvStringLong.def', 'ConvStringReal.def', 'ConvTypes.def',
! 'COROUTINES.def', 'EXCEPTIONS.def', 'GeneralUserExceptions.def',
! 'IOChan.def', 'IOConsts.def', 'IOLink.def', 'IOLink.def',
! 'IOResult.def', 'LongComplexMath.def', 'LongConv.def', 'LongIO.def',
! 'LongMath.def', 'LongStr.def', 'LowLong.def', 'LowReal.def',
! 'M2EXCEPTION.def', 'Processes.def', 'ProgramArgs.def', 'RawIO.def',
! 'RealConv.def', 'RealIO.def', 'RealMath.def', 'RealStr.def',
! 'RndFile.def', 'Semaphores.def', 'SeqFile.def', 'SIOResult.def',
! 'SLongIO.def', 'SRawIO.def', 'SRealIO.def', 'StdChans.def',
! 'STextIO.def', 'Storage.def', 'StreamFile.def', 'Strings.def',
! 'SWholeIO.def', 'SysClock.def', 'SYSTEM.def', 'TERMINATION.def',
! 'TextIO.def', 'WholeConv.def', 'WholeIO.def' and 'WholeStr.def' were
  defined by the International Standard Information technology -
  programming languages BS ISO/IEC 10514-1:1996E Part 1: Modula-2, Base
  Language.
  
!    The Copyright to the definition files 'ChanConsts.def',
! 'CharClass.def', 'ComplexMath.def', 'ConvStringLong.def',
! 'ConvStringReal.def', 'ConvTypes.def', 'COROUTINES.def',
! 'EXCEPTIONS.def', 'GeneralUserExceptions.def', 'IOChan.def',
! 'IOConsts.def', 'IOLink.def', 'IOLink.def', 'IOResult.def',
! 'LongComplexMath.def', 'LongConv.def', 'LongIO.def', 'LongMath.def',
! 'LongStr.def', 'LowLong.def', 'LowReal.def', 'M2EXCEPTION.def',
! 'Processes.def', 'ProgramArgs.def', 'RawIO.def', 'RealConv.def',
! 'RealIO.def', 'RealMath.def', 'RealStr.def', 'RndFile.def',
! 'Semaphores.def', 'SeqFile.def', 'SIOResult.def', 'SLongIO.def',
! 'SRawIO.def', 'SRealIO.def', 'StdChans.def', 'STextIO.def',
! 'Storage.def', 'StreamFile.def', 'Strings.def', 'SWholeIO.def',
! 'SysClock.def', 'SYSTEM.def', 'TERMINATION.def', 'TextIO.def',
! 'WholeConv.def', 'WholeIO.def' and 'WholeStr.def' belong to ISO/IEC
  (International Organization for Standardization and International
  Electrotechnical Commission).  The licence allows them to be distributed
  with the compiler (as described on page 707 of the Information
  technology - Programming languages Part 1: Modula-2, Base Language.  BS
  ISO/IEC 10514-1:1996).
  
!    All implementation modules and 'ClientSocket.def', 'LongWholeIO.def',
! 'M2RTS.def', 'MemStream.def', 'pth.def', 'RandomNumber.def',
! 'RTdata.def', 'RTentity.def', 'RTfio.def', 'RTio.def',
! 'ShortComplexMath.def', 'ShortIO.def', 'ShortWholeIO.def',
! 'SimpleCipher.def', 'SLongWholeIO.def', 'SShortIO.def',
! 'SShortWholeIO.def', 'StringChan.def' and 'wraptime.def' are Copyright
  of the FSF and are held under the GPLv3 with runtime exceptions.
  
     Under Section 7 of GPL version 3, you are granted additional
--- 12537,12585 ----
  
  This directory contains the ISO definition modules and some
  corresponding implementation modules.  The definition files:
! ‘ChanConsts.def’, ‘CharClass.def’, ‘ComplexMath.def’,
! ‘ConvStringLong.def’, ‘ConvStringReal.def’, ‘ConvTypes.def’,
! ‘COROUTINES.def’, ‘EXCEPTIONS.def’, ‘GeneralUserExceptions.def’,
! ‘IOChan.def’, ‘IOConsts.def’, ‘IOLink.def’, ‘IOLink.def’,
! ‘IOResult.def’, ‘LongComplexMath.def’, ‘LongConv.def’, ‘LongIO.def’,
! ‘LongMath.def’, ‘LongStr.def’, ‘LowLong.def’, ‘LowReal.def’,
! ‘M2EXCEPTION.def’, ‘Processes.def’, ‘ProgramArgs.def’, ‘RawIO.def’,
! ‘RealConv.def’, ‘RealIO.def’, ‘RealMath.def’, ‘RealStr.def’,
! ‘RndFile.def’, ‘Semaphores.def’, ‘SeqFile.def’, ‘SIOResult.def’,
! ‘SLongIO.def’, ‘SRawIO.def’, ‘SRealIO.def’, ‘StdChans.def’,
! ‘STextIO.def’, ‘Storage.def’, ‘StreamFile.def’, ‘Strings.def’,
! ‘SWholeIO.def’, ‘SysClock.def’, ‘SYSTEM.def’, ‘TERMINATION.def’,
! ‘TextIO.def’, ‘WholeConv.def’, ‘WholeIO.def’ and ‘WholeStr.def’ were
  defined by the International Standard Information technology -
  programming languages BS ISO/IEC 10514-1:1996E Part 1: Modula-2, Base
  Language.
  
!    The Copyright to the definition files ‘ChanConsts.def’,
! ‘CharClass.def’, ‘ComplexMath.def’, ‘ConvStringLong.def’,
! ‘ConvStringReal.def’, ‘ConvTypes.def’, ‘COROUTINES.def’,
! ‘EXCEPTIONS.def’, ‘GeneralUserExceptions.def’, ‘IOChan.def’,
! ‘IOConsts.def’, ‘IOLink.def’, ‘IOLink.def’, ‘IOResult.def’,
! ‘LongComplexMath.def’, ‘LongConv.def’, ‘LongIO.def’, ‘LongMath.def’,
! ‘LongStr.def’, ‘LowLong.def’, ‘LowReal.def’, ‘M2EXCEPTION.def’,
! ‘Processes.def’, ‘ProgramArgs.def’, ‘RawIO.def’, ‘RealConv.def’,
! ‘RealIO.def’, ‘RealMath.def’, ‘RealStr.def’, ‘RndFile.def’,
! ‘Semaphores.def’, ‘SeqFile.def’, ‘SIOResult.def’, ‘SLongIO.def’,
! ‘SRawIO.def’, ‘SRealIO.def’, ‘StdChans.def’, ‘STextIO.def’,
! ‘Storage.def’, ‘StreamFile.def’, ‘Strings.def’, ‘SWholeIO.def’,
! ‘SysClock.def’, ‘SYSTEM.def’, ‘TERMINATION.def’, ‘TextIO.def’,
! ‘WholeConv.def’, ‘WholeIO.def’ and ‘WholeStr.def’ belong to ISO/IEC
  (International Organization for Standardization and International
  Electrotechnical Commission).  The licence allows them to be distributed
  with the compiler (as described on page 707 of the Information
  technology - Programming languages Part 1: Modula-2, Base Language.  BS
  ISO/IEC 10514-1:1996).
  
!    All implementation modules and ‘ClientSocket.def’, ‘LongWholeIO.def’,
! ‘M2RTS.def’, ‘MemStream.def’, ‘pth.def’, ‘RandomNumber.def’,
! ‘RTdata.def’, ‘RTentity.def’, ‘RTfio.def’, ‘RTio.def’,
! ‘ShortComplexMath.def’, ‘ShortIO.def’, ‘ShortWholeIO.def’,
! ‘SimpleCipher.def’, ‘SLongWholeIO.def’, ‘SShortIO.def’,
! ‘SShortWholeIO.def’, ‘StringChan.def’ and ‘wraptime.def’ are Copyright
  of the FSF and are held under the GPLv3 with runtime exceptions.
  
     Under Section 7 of GPL version 3, you are granted additional
*************** the files COPYING3 and COPYING.RUNTIME r
*** 12596,12604 ****
  <http://www.gnu.org/licenses/>.
  
     Notice that GNU Modula-2 contains additional libraries for
! input/output of 'SHORTREAL', 'SHORTCARD', 'SHORTINT', 'LONGCARD',
! 'LONGINT' data types.  It also provides a 'RandomNumber', 'SimpleCipher'
! and 'ClientSocket' modules as well as low level modules which allow the
  IO libraries to coexist with their PIM counterparts.
  * Menu:
  
--- 12592,12600 ----
  <http://www.gnu.org/licenses/>.
  
     Notice that GNU Modula-2 contains additional libraries for
! input/output of ‘SHORTREAL’, ‘SHORTCARD’, ‘SHORTINT’, ‘LONGCARD’,
! ‘LONGINT’ data types.  It also provides a ‘RandomNumber’, ‘SimpleCipher’
! and ‘ClientSocket’ modules as well as low level modules which allow the
  IO libraries to coexist with their PIM counterparts.
  * Menu:
  
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 18358,18363 ****
--- 18354,18361 ----
  * alloca:                                Built-ins.           (line 236)
  * alloca <1>:                            gm2-libs/Builtins.   (line 183)
  * alloca <2>:                            gm2-libs/cbuiltin.   (line  52)
+ * alloca_trace:                          Built-ins.           (line 305)
+ * alloca_trace <1>:                      gm2-libs/Builtins.   (line 252)
  * ALLOCATE:                              gm2-libs/Storage.    (line  19)
  * ALLOCATE <1>:                          gm2-libs/SysStorage. (line  21)
  * ALLOCATE <2>:                          gm2-libs-iso/Storage.
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 18365,18372 ****
  * AllocateDeviceId:                      gm2-libs-iso/IOLink. (line  18)
  * AllocateSource:                        gm2-libs-iso/EXCEPTIONS.
                                                                (line  18)
- * alloca_trace:                          Built-ins.           (line 305)
- * alloca_trace <1>:                      gm2-libs/Builtins.   (line 252)
  * Append:                                gm2-libs-iso/Strings.
                                                                (line  55)
  * arccos:                                gm2-libs-iso/ComplexMath.
--- 18363,18368 ----
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 19485,19494 ****
                                                                (line  50)
  * GetOpt:                                gm2-libs/GetOpt.     (line  25)
  * getopt:                                gm2-libs/cgetopt.    (line  29)
- * GetOptLong:                            gm2-libs/GetOpt.     (line  87)
- * GetOptLongOnly:                        gm2-libs/GetOpt.     (line  97)
  * getopt_long:                           gm2-libs/cgetopt.    (line  42)
  * getopt_long_only:                      gm2-libs/cgetopt.    (line  50)
  * getpid:                                gm2-libs/libc.       (line 172)
  * GetPos:                                gm2-libs-log/FileSystem.
                                                                (line 226)
--- 19481,19490 ----
                                                                (line  50)
  * GetOpt:                                gm2-libs/GetOpt.     (line  25)
  * getopt:                                gm2-libs/cgetopt.    (line  29)
  * getopt_long:                           gm2-libs/cgetopt.    (line  42)
  * getopt_long_only:                      gm2-libs/cgetopt.    (line  50)
+ * GetOptLong:                            gm2-libs/GetOpt.     (line  87)
+ * GetOptLongOnly:                        gm2-libs/GetOpt.     (line  97)
  * getpid:                                gm2-libs/libc.       (line 172)
  * GetPos:                                gm2-libs-log/FileSystem.
                                                                (line 226)
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 20225,20237 ****
                                                                (line  25)
  * nModes (const) <2>:                    gm2-libs-iso/LowShort.
                                                                (line  25)
  * NoException:                           gm2-libs/M2RTS.      (line 175)
  * NoException <1>:                       gm2-libs-iso/M2RTS.  (line 183)
  * NonVarFPSection (ebnf):                EBNF.                (line 424)
  * NoReturnException:                     gm2-libs/M2RTS.      (line 166)
  * NoReturnException <1>:                 gm2-libs-iso/M2RTS.  (line 174)
  * NormalPart (ebnf):                     EBNF.                (line 385)
- * no_argument (const):                   gm2-libs/GetOpt.     (line  12)
  * np (const):                            gm2-libs/ASCII.      (line  24)
  * nul (const):                           gm2-libs/ASCII.      (line  21)
  * NullChan:                              gm2-libs-iso/StdChans.
--- 20221,20233 ----
                                                                (line  25)
  * nModes (const) <2>:                    gm2-libs-iso/LowShort.
                                                                (line  25)
+ * no_argument (const):                   gm2-libs/GetOpt.     (line  12)
  * NoException:                           gm2-libs/M2RTS.      (line 175)
  * NoException <1>:                       gm2-libs-iso/M2RTS.  (line 183)
  * NonVarFPSection (ebnf):                EBNF.                (line 424)
  * NoReturnException:                     gm2-libs/M2RTS.      (line 166)
  * NoReturnException <1>:                 gm2-libs-iso/M2RTS.  (line 174)
  * NormalPart (ebnf):                     EBNF.                (line 385)
  * np (const):                            gm2-libs/ASCII.      (line  24)
  * nul (const):                           gm2-libs/ASCII.      (line  21)
  * NullChan:                              gm2-libs-iso/StdChans.
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 20750,20759 ****
  * Resume:                                gm2-libs-coroutines/Executive.
                                                                (line  46)
  * RetryStatement (ebnf):                 EBNF.                (line 286)
- * ReturnException:                       gm2-libs/M2RTS.      (line 153)
- * ReturnException <1>:                   gm2-libs-iso/M2RTS.  (line 161)
  * return_address:                        Built-ins.           (line 298)
  * return_address <1>:                    gm2-libs/Builtins.   (line 245)
  * ReverseIndex:                          gm2-libs/DynamicStrings.
                                                                (line 201)
  * Rewrite:                               gm2-libs-iso/MemStream.
--- 20746,20755 ----
  * Resume:                                gm2-libs-coroutines/Executive.
                                                                (line  46)
  * RetryStatement (ebnf):                 EBNF.                (line 286)
  * return_address:                        Built-ins.           (line 298)
  * return_address <1>:                    gm2-libs/Builtins.   (line 245)
+ * ReturnException:                       gm2-libs/M2RTS.      (line 153)
+ * ReturnException <1>:                   gm2-libs-iso/M2RTS.  (line 161)
  * ReverseIndex:                          gm2-libs/DynamicStrings.
                                                                (line 201)
  * Rewrite:                               gm2-libs-iso/MemStream.
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 21381,21386 ****
--- 21377,21383 ----
  * TicksPerSecond (const):                gm2-libs-coroutines/TimerHandler.
                                                                (line  16)
  * time:                                  gm2-libs/libc.       (line 379)
+ * time_t (type):                         gm2-libs/libc.       (line  30)
  * timeb (type):                          gm2-libs/libc.       (line  47)
  * timespec (type):                       gm2-libs-iso/wrapclock.
                                                                (line  11)
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 21395,21401 ****
                                                                (line  23)
  * timezone (type):                       gm2-libs-iso/wraptime.
                                                                (line  19)
- * time_t (type):                         gm2-libs/libc.       (line  30)
  * tm (type):                             gm2-libs/libc.       (line  33)
  * tm (type) <1>:                         gm2-libs-iso/wraptime.
                                                                (line  20)
--- 21392,21397 ----
*************** File: m2.info,  Node: Indices,  Prev: Li
*** 21748,21969 ****
  
  
  Tag Table:
! Node: Top1081
! Node: Overview1561
! Node: What is GNU Modula-21919
! Ref: What is GNU Modula-2-Footnote-12392
! Node: Why use GNU Modula-22962
! Node: Development4536
! Node: Features4782
! Node: Using6388
! Node: Example usage8280
! Ref: Example usage-Footnote-19394
! Node: Compiler options9643
! Node: Linking23089
! Node: Elementary data types26106
! Node: Standard procedures27541
! Node: High procedure function36267
! Node: Dialect39160
! Node: Exceptions42510
! Ref: Exceptions-Footnote-143619
! Node: Semantic checking43767
! Node: Extensions47715
! Node: Type compatibility55571
! Node: Unbounded by reference61914
! Node: Building a shared library65885
! Node: Interface for Python67335
! Node: Producing a Python module72401
! Node: Interface to C77403
! Node: Assembly language80465
! Node: Alignment82502
! Node: Packed84989
! Node: Built-ins87662
! Node: The PIM system module102324
! Node: The ISO system module110762
! Node: Release map121176
! Node: Documentation121723
! Node: Regression tests121988
! Node: Limitations122803
! Node: Objectives123122
! Node: FAQ123596
! Node: Community124037
! Node: Other languages124385
! Node: License124628
! Node: Copying125542
! Node: Contributing163091
! Node: EBNF163795
! Node: Libraries178566
! Node: Base libraries178994
! Node: gm2-libs/ASCII181706
! Node: gm2-libs/Args182799
! Node: gm2-libs/Assertion183395
! Node: gm2-libs/Break183806
! Node: gm2-libs/Builtins184012
! Node: gm2-libs/COROUTINES195698
! Node: gm2-libs/CmdArgs196075
! Node: gm2-libs/Debug196776
! Node: gm2-libs/DynamicStrings197632
! Node: gm2-libs/Environment208380
! Node: gm2-libs/FIO209390
! Node: gm2-libs/FormatStrings218635
! Node: gm2-libs/FpuIO220301
! Node: gm2-libs/GetOpt221719
! Node: gm2-libs/IO225177
! Node: gm2-libs/Indexing226908
! Node: gm2-libs/LMathLib0229669
! Node: gm2-libs/LegacyReal230440
! Node: gm2-libs/M2Dependent230715
! Node: gm2-libs/M2EXCEPTION233247
! Node: gm2-libs/M2RTS234497
! Node: gm2-libs/MathLib0242205
! Node: gm2-libs/MemUtils242906
! Node: gm2-libs/NumberIO243507
! Node: gm2-libs/OptLib245394
! Node: gm2-libs/PushBackInput247292
! Node: gm2-libs/RTExceptions249906
! Node: gm2-libs/RTint254553
! Node: gm2-libs/SArgs257484
! Node: gm2-libs/SCmdArgs258244
! Node: gm2-libs/SEnvironment258975
! Node: gm2-libs/SFIO259965
! Node: gm2-libs/SMathLib0262230
! Node: gm2-libs/SYSTEM263008
! Node: gm2-libs/Scan270527
! Node: gm2-libs/Selective272413
! Node: gm2-libs/StdIO274308
! Node: gm2-libs/Storage276142
! Node: gm2-libs/StrCase277394
! Node: gm2-libs/StrIO278624
! Node: gm2-libs/StrLib279399
! Node: gm2-libs/StringConvert281020
! Node: gm2-libs/SysExceptions292317
! Node: gm2-libs/SysStorage293301
! Node: gm2-libs/TimeString294999
! Node: gm2-libs/UnixArgs295418
! Node: gm2-libs/cbuiltin295844
! Node: gm2-libs/cgetopt304328
! Node: gm2-libs/cxxabi307110
! Node: gm2-libs/dtoa307663
! Node: gm2-libs/errno308748
! Node: gm2-libs/gdbif309166
! Node: gm2-libs/ldtoa310159
! Node: gm2-libs/libc311309
! Node: gm2-libs/libm323195
! Node: gm2-libs/sckt326179
! Node: gm2-libs/termios329977
! Node: gm2-libs/wrapc334992
! Node: PIM and Logitech 3.0 Compatible338327
! Node: gm2-libs-log/BitBlockOps341085
! Node: gm2-libs-log/BitByteOps344987
! Node: gm2-libs-log/BitWordOps347877
! Node: gm2-libs-log/BlockOps350723
! Node: gm2-libs-log/Break352896
! Node: gm2-libs-log/CardinalIO353907
! Node: gm2-libs-log/Conversions357725
! Node: gm2-libs-log/DebugPMD359108
! Node: gm2-libs-log/DebugTrace359370
! Node: gm2-libs-log/Delay359634
! Node: gm2-libs-log/Display360053
! Node: gm2-libs-log/ErrorCode360582
! Node: gm2-libs-log/FileSystem361458
! Node: gm2-libs-log/FloatingUtilities368115
! Node: gm2-libs-log/InOut369866
! Node: gm2-libs-log/Keyboard374212
! Node: gm2-libs-log/LongIO374871
! Node: gm2-libs-log/NumberConversion375323
! Node: gm2-libs-log/Random375654
! Node: gm2-libs-log/RealConversions377030
! Node: gm2-libs-log/RealInOut381911
! Node: gm2-libs-log/Strings384666
! Node: gm2-libs-log/Termbase386465
! Node: gm2-libs-log/Terminal389011
! Node: gm2-libs-log/TimeDate390527
! Node: PIM coroutine support392487
! Node: gm2-libs-coroutines/Executive392975
! Node: gm2-libs-coroutines/KeyBoardLEDs396626
! Node: gm2-libs-coroutines/SYSTEM397591
! Node: gm2-libs-coroutines/TimerHandler408086
! Node: M2 ISO Libraries410509
! Node: gm2-libs-iso/COROUTINES417271
! Node: gm2-libs-iso/ChanConsts421120
! Node: gm2-libs-iso/CharClass424471
! Node: gm2-libs-iso/ClientSocket425542
! Node: gm2-libs-iso/ComplexMath426647
! Node: gm2-libs-iso/ConvStringLong428972
! Node: gm2-libs-iso/ConvStringReal430292
! Node: gm2-libs-iso/ConvStringShort431604
! Node: gm2-libs-iso/ConvTypes432930
! Node: gm2-libs-iso/EXCEPTIONS434310
! Node: gm2-libs-iso/ErrnoCategory436471
! Node: gm2-libs-iso/GeneralUserExceptions437941
! Node: gm2-libs-iso/IOChan439138
! Node: gm2-libs-iso/IOConsts446626
! Node: gm2-libs-iso/IOLink447403
! Node: gm2-libs-iso/IOResult453226
! Node: gm2-libs-iso/LongComplexMath454258
! Node: gm2-libs-iso/LongConv456571
! Node: gm2-libs-iso/LongIO458748
! Node: gm2-libs-iso/LongMath461220
! Node: gm2-libs-iso/LongStr463079
! Node: gm2-libs-iso/LongWholeIO465665
! Node: gm2-libs-iso/LowLong467520
! Node: gm2-libs-iso/LowReal471094
! Node: gm2-libs-iso/LowShort474491
! Node: gm2-libs-iso/M2EXCEPTION478112
! Node: gm2-libs-iso/M2RTS479330
! Node: gm2-libs-iso/MemStream487130
! Node: gm2-libs-iso/Preemptive490402
! Node: gm2-libs-iso/Processes490903
! Node: gm2-libs-iso/ProgramArgs496718
! Node: gm2-libs-iso/RTco497787
! Node: gm2-libs-iso/RTdata499461
! Node: gm2-libs-iso/RTentity500748
! Node: gm2-libs-iso/RTfio501861
! Node: gm2-libs-iso/RTgen504487
! Node: gm2-libs-iso/RTgenif507452
! Node: gm2-libs-iso/RTio511432
! Node: gm2-libs-iso/RandomNumber513080
! Node: gm2-libs-iso/RawIO515499
! Node: gm2-libs-iso/RealConv516396
! Node: gm2-libs-iso/RealIO518509
! Node: gm2-libs-iso/RealMath520955
! Node: gm2-libs-iso/RealStr522729
! Node: gm2-libs-iso/RndFile525282
! Node: gm2-libs-iso/SIOResult530040
! Node: gm2-libs-iso/SLongIO531068
! Node: gm2-libs-iso/SLongWholeIO533492
! Node: gm2-libs-iso/SRawIO535302
! Node: gm2-libs-iso/SRealIO536186
! Node: gm2-libs-iso/SShortIO538498
! Node: gm2-libs-iso/SShortWholeIO540932
! Node: gm2-libs-iso/STextIO542753
! Node: gm2-libs-iso/SWholeIO545153
! Node: gm2-libs-iso/SYSTEM546943
! Node: gm2-libs-iso/Semaphores556859
! Node: gm2-libs-iso/SeqFile558474
! Node: gm2-libs-iso/ShortComplexMath563026
! Node: gm2-libs-iso/ShortConv565377
! Node: gm2-libs-iso/ShortIO567513
! Node: gm2-libs-iso/ShortMath569997
! Node: gm2-libs-iso/ShortStr571883
! Node: gm2-libs-iso/ShortWholeIO574481
! Node: gm2-libs-iso/SimpleCipher576351
! Node: gm2-libs-iso/StdChans577341
! Node: gm2-libs-iso/Storage579338
! Node: gm2-libs-iso/StreamFile581424
! Node: gm2-libs-iso/StringChan583484
! Node: gm2-libs-iso/Strings584699
! Node: gm2-libs-iso/SysClock592179
! Node: gm2-libs-iso/TERMINATION593982
! Node: gm2-libs-iso/TermFile594595
! Node: gm2-libs-iso/TextIO596890
! Node: gm2-libs-iso/TextUtil599518
! Node: gm2-libs-iso/WholeConv600279
! Node: gm2-libs-iso/WholeIO602809
! Node: gm2-libs-iso/WholeStr604647
! Node: gm2-libs-iso/wrapclock606438
! Node: gm2-libs-iso/wrapsock610055
! Node: gm2-libs-iso/wraptime612649
! Node: Indices617022
  
  End Tag Table
--- 21744,21970 ----
  
  
  Tag Table:
! Node: Top1079
! Node: Overview1559
! Node: What is GNU Modula-21917
! Ref: What is GNU Modula-2-Footnote-12390
! Node: Why use GNU Modula-22960
! Node: Development4546
! Node: Features4792
! Node: Using6476
! Node: Example usage8368
! Ref: Example usage-Footnote-19514
! Node: Compiler options9779
! Node: Linking23769
! Node: Elementary data types26902
! Node: Standard procedures28397
! Node: High procedure function37239
! Node: Dialect40224
! Node: Exceptions43634
! Ref: Exceptions-Footnote-144759
! Node: Semantic checking44915
! Node: Extensions48891
! Node: Type compatibility56875
! Node: Unbounded by reference63374
! Node: Building a shared library67445
! Node: Interface for Python68931
! Node: Producing a Python module74097
! Node: Interface to C79187
! Node: Assembly language82329
! Node: Alignment84386
! Node: Packed86921
! Node: Built-ins89642
! Node: The PIM system module104404
! Node: The ISO system module112902
! Node: Release map123352
! Node: Documentation123899
! Node: Regression tests124164
! Node: Limitations124987
! Node: Objectives125306
! Node: FAQ125790
! Node: Community126231
! Node: Other languages126579
! Node: License126822
! Node: Copying127736
! Node: Contributing165273
! Node: EBNF165977
! Node: Libraries180748
! Node: Base libraries181176
! Node: gm2-libs/ASCII183904
! Node: gm2-libs/Args184997
! Node: gm2-libs/Assertion185593
! Node: gm2-libs/Break186004
! Node: gm2-libs/Builtins186210
! Node: gm2-libs/COROUTINES197896
! Node: gm2-libs/CmdArgs198273
! Node: gm2-libs/Debug198974
! Node: gm2-libs/DynamicStrings199830
! Node: gm2-libs/Environment210578
! Node: gm2-libs/FIO211588
! Node: gm2-libs/FormatStrings220833
! Node: gm2-libs/FpuIO222499
! Node: gm2-libs/GetOpt223917
! Node: gm2-libs/IO227375
! Node: gm2-libs/Indexing229106
! Node: gm2-libs/LMathLib0231867
! Node: gm2-libs/LegacyReal232638
! Node: gm2-libs/M2Dependent232913
! Node: gm2-libs/M2EXCEPTION235445
! Node: gm2-libs/M2RTS236695
! Node: gm2-libs/MathLib0244403
! Node: gm2-libs/MemUtils245104
! Node: gm2-libs/NumberIO245705
! Node: gm2-libs/OptLib247592
! Node: gm2-libs/PushBackInput249490
! Node: gm2-libs/RTExceptions252104
! Node: gm2-libs/RTint256751
! Node: gm2-libs/SArgs259682
! Node: gm2-libs/SCmdArgs260442
! Node: gm2-libs/SEnvironment261173
! Node: gm2-libs/SFIO262163
! Node: gm2-libs/SMathLib0264428
! Node: gm2-libs/SYSTEM265206
! Node: gm2-libs/Scan272725
! Node: gm2-libs/Selective274611
! Node: gm2-libs/StdIO276506
! Node: gm2-libs/Storage278340
! Node: gm2-libs/StrCase279592
! Node: gm2-libs/StrIO280822
! Node: gm2-libs/StrLib281597
! Node: gm2-libs/StringConvert283218
! Node: gm2-libs/SysExceptions294515
! Node: gm2-libs/SysStorage295499
! Node: gm2-libs/TimeString297197
! Node: gm2-libs/UnixArgs297616
! Node: gm2-libs/cbuiltin298042
! Node: gm2-libs/cgetopt306526
! Node: gm2-libs/cxxabi309308
! Node: gm2-libs/dtoa309861
! Node: gm2-libs/errno310946
! Node: gm2-libs/gdbif311364
! Node: gm2-libs/ldtoa312357
! Node: gm2-libs/libc313507
! Node: gm2-libs/libm325393
! Node: gm2-libs/sckt328377
! Node: gm2-libs/termios332175
! Node: gm2-libs/wrapc337190
! Node: PIM and Logitech 3.0 Compatible340525
! Node: gm2-libs-log/BitBlockOps343283
! Node: gm2-libs-log/BitByteOps347185
! Node: gm2-libs-log/BitWordOps350075
! Node: gm2-libs-log/BlockOps352921
! Node: gm2-libs-log/Break355094
! Node: gm2-libs-log/CardinalIO356105
! Node: gm2-libs-log/Conversions359923
! Node: gm2-libs-log/DebugPMD361306
! Node: gm2-libs-log/DebugTrace361568
! Node: gm2-libs-log/Delay361832
! Node: gm2-libs-log/Display362251
! Node: gm2-libs-log/ErrorCode362780
! Node: gm2-libs-log/FileSystem363656
! Node: gm2-libs-log/FloatingUtilities370313
! Node: gm2-libs-log/InOut372064
! Node: gm2-libs-log/Keyboard376410
! Node: gm2-libs-log/LongIO377069
! Node: gm2-libs-log/NumberConversion377521
! Node: gm2-libs-log/Random377852
! Node: gm2-libs-log/RealConversions379228
! Node: gm2-libs-log/RealInOut384109
! Node: gm2-libs-log/Strings386864
! Node: gm2-libs-log/Termbase388663
! Node: gm2-libs-log/Terminal391209
! Node: gm2-libs-log/TimeDate392725
! Node: PIM coroutine support394685
! Node: gm2-libs-coroutines/Executive395185
! Node: gm2-libs-coroutines/KeyBoardLEDs398836
! Node: gm2-libs-coroutines/SYSTEM399801
! Node: gm2-libs-coroutines/TimerHandler410296
! Node: M2 ISO Libraries412719
! Node: gm2-libs-iso/COROUTINES419981
! Node: gm2-libs-iso/ChanConsts423830
! Node: gm2-libs-iso/CharClass427181
! Node: gm2-libs-iso/ClientSocket428252
! Node: gm2-libs-iso/ComplexMath429357
! Node: gm2-libs-iso/ConvStringLong431682
! Node: gm2-libs-iso/ConvStringReal433002
! Node: gm2-libs-iso/ConvStringShort434314
! Node: gm2-libs-iso/ConvTypes435640
! Node: gm2-libs-iso/EXCEPTIONS437020
! Node: gm2-libs-iso/ErrnoCategory439181
! Node: gm2-libs-iso/GeneralUserExceptions440651
! Node: gm2-libs-iso/IOChan441848
! Node: gm2-libs-iso/IOConsts449336
! Node: gm2-libs-iso/IOLink450113
! Node: gm2-libs-iso/IOResult455936
! Node: gm2-libs-iso/LongComplexMath456968
! Node: gm2-libs-iso/LongConv459281
! Node: gm2-libs-iso/LongIO461458
! Node: gm2-libs-iso/LongMath463930
! Node: gm2-libs-iso/LongStr465789
! Node: gm2-libs-iso/LongWholeIO468375
! Node: gm2-libs-iso/LowLong470230
! Node: gm2-libs-iso/LowReal473804
! Node: gm2-libs-iso/LowShort477201
! Node: gm2-libs-iso/M2EXCEPTION480822
! Node: gm2-libs-iso/M2RTS482040
! Node: gm2-libs-iso/MemStream489840
! Node: gm2-libs-iso/Preemptive493112
! Node: gm2-libs-iso/Processes493613
! Node: gm2-libs-iso/ProgramArgs499428
! Node: gm2-libs-iso/RTco500497
! Node: gm2-libs-iso/RTdata502171
! Node: gm2-libs-iso/RTentity503458
! Node: gm2-libs-iso/RTfio504571
! Node: gm2-libs-iso/RTgen507197
! Node: gm2-libs-iso/RTgenif510162
! Node: gm2-libs-iso/RTio514142
! Node: gm2-libs-iso/RandomNumber515790
! Node: gm2-libs-iso/RawIO518209
! Node: gm2-libs-iso/RealConv519106
! Node: gm2-libs-iso/RealIO521219
! Node: gm2-libs-iso/RealMath523665
! Node: gm2-libs-iso/RealStr525439
! Node: gm2-libs-iso/RndFile527992
! Node: gm2-libs-iso/SIOResult532750
! Node: gm2-libs-iso/SLongIO533778
! Node: gm2-libs-iso/SLongWholeIO536202
! Node: gm2-libs-iso/SRawIO538012
! Node: gm2-libs-iso/SRealIO538896
! Node: gm2-libs-iso/SShortIO541208
! Node: gm2-libs-iso/SShortWholeIO543642
! Node: gm2-libs-iso/STextIO545463
! Node: gm2-libs-iso/SWholeIO547863
! Node: gm2-libs-iso/SYSTEM549653
! Node: gm2-libs-iso/Semaphores559569
! Node: gm2-libs-iso/SeqFile561184
! Node: gm2-libs-iso/ShortComplexMath565736
! Node: gm2-libs-iso/ShortConv568087
! Node: gm2-libs-iso/ShortIO570223
! Node: gm2-libs-iso/ShortMath572707
! Node: gm2-libs-iso/ShortStr574593
! Node: gm2-libs-iso/ShortWholeIO577191
! Node: gm2-libs-iso/SimpleCipher579061
! Node: gm2-libs-iso/StdChans580051
! Node: gm2-libs-iso/Storage582048
! Node: gm2-libs-iso/StreamFile584134
! Node: gm2-libs-iso/StringChan586194
! Node: gm2-libs-iso/Strings587409
! Node: gm2-libs-iso/SysClock594889
! Node: gm2-libs-iso/TERMINATION596692
! Node: gm2-libs-iso/TermFile597305
! Node: gm2-libs-iso/TextIO599600
! Node: gm2-libs-iso/TextUtil602228
! Node: gm2-libs-iso/WholeConv602989
! Node: gm2-libs-iso/WholeIO605519
! Node: gm2-libs-iso/WholeStr607357
! Node: gm2-libs-iso/wrapclock609148
! Node: gm2-libs-iso/wrapsock612765
! Node: gm2-libs-iso/wraptime615359
! Node: Indices619732
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/doc/sourcebuild.texi gcc-14.3.0-RC-20260619/gcc/doc/sourcebuild.texi
*** gcc-14.3.0/gcc/doc/sourcebuild.texi	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/doc/sourcebuild.texi	Fri Jun 19 06:51:02 2026
*************** whether it does so by default).
*** 2346,2351 ****
--- 2346,2354 ----
  @itemx aarch64_sve1024_hw
  @itemx aarch64_sve2048_hw
  Like @code{aarch64_sve_hw}, but also test for an exact hardware vector length.
+ @item aarch64_sme_hw
+ AArch64 target that is able to generate and execute SME code (regardless of
+ whether it does so by default).
  
  @item aarch64_fjcvtzs_hw
  AArch64 target that is able to generate and execute armv8.3-a FJCVTZS
diff -Nrcpad gcc-14.3.0/gcc/dse.cc gcc-14.3.0-RC-20260619/gcc/dse.cc
*** gcc-14.3.0/gcc/dse.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/dse.cc	Fri Jun 19 06:51:02 2026
*************** canon_address (rtx mem,
*** 1190,1196 ****
        address = strip_offset_and_add (address, offset);
  
        if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem))
! 	  && const_or_frame_p (address))
  	{
  	  group_info *group = get_group_info (address);
  
--- 1190,1199 ----
        address = strip_offset_and_add (address, offset);
  
        if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem))
! 	  && const_or_frame_p (address)
! 	  /* Literal addresses can alias any base, avoid creating a
! 	     group for them.  */
! 	  && ! CONST_SCALAR_INT_P (address))
  	{
  	  group_info *group = get_group_info (address);
  
diff -Nrcpad gcc-14.3.0/gcc/dwarf2out.cc gcc-14.3.0-RC-20260619/gcc/dwarf2out.cc
*** gcc-14.3.0/gcc/dwarf2out.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/dwarf2out.cc	Fri Jun 19 06:51:02 2026
*************** equate_type_number_to_die (tree type, dw
*** 5959,5965 ****
  static dw_die_ref maybe_create_die_with_external_ref (tree);
  struct GTY(()) sym_off_pair 
  {
!   const char * GTY((skip)) sym;
    unsigned HOST_WIDE_INT off;
  };
  static GTY(()) hash_map<tree, sym_off_pair> *external_die_map;
--- 5959,5965 ----
  static dw_die_ref maybe_create_die_with_external_ref (tree);
  struct GTY(()) sym_off_pair 
  {
!   const char *sym;
    unsigned HOST_WIDE_INT off;
  };
  static GTY(()) hash_map<tree, sym_off_pair> *external_die_map;
*************** gen_array_type_die (tree type, dw_die_re
*** 22666,22671 ****
--- 22666,22693 ----
  		      && TYPE_REVERSE_STORAGE_ORDER (type),
  		      context_die);
  
+   /* Add bit stride information to boolean vectors of single bits so that
+      elements can be correctly read and displayed by a debugger.  */
+   if (VECTOR_BOOLEAN_TYPE_P (type))
+     {
+       enum machine_mode tmode = TYPE_MODE_RAW (type);
+       if (GET_MODE_CLASS (tmode) == MODE_VECTOR_BOOL)
+ 	{
+ 	  /* Calculate bit-size of element based on mnode.  */
+ 	  poly_uint16 bit_size = exact_div (GET_MODE_BITSIZE (tmode),
+ 					    GET_MODE_NUNITS (tmode));
+ 	  /* Set bit stride in the array type DIE.  */
+ 	  add_AT_unsigned (array_die, DW_AT_bit_stride, bit_size.coeffs[0]);
+ 	  /* Find DIE corresponding to the element type so that we could
+ 	     add DW_AT_bit_size to it.  */
+ 	  dw_die_ref elem_die = get_AT_ref (array_die, DW_AT_type);
+ 	  /* Avoid adding DW_AT_bit_size twice.  */
+ 	  if (get_AT (elem_die, DW_AT_bit_size) == NULL)
+ 	    add_AT_unsigned (elem_die, DW_AT_bit_size,
+ 			     TYPE_PRECISION (element_type));
+ 	}
+     }
+ 
    add_gnat_descriptive_type_attribute (array_die, type, context_die);
    if (TYPE_ARTIFICIAL (type))
      add_AT_flag (array_die, DW_AT_artificial, 1);
diff -Nrcpad gcc-14.3.0/gcc/expmed.cc gcc-14.3.0-RC-20260619/gcc/expmed.cc
*** gcc-14.3.0/gcc/expmed.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/expmed.cc	Fri Jun 19 06:51:02 2026
*************** make_tree (tree type, rtx x)
*** 5367,5372 ****
--- 5367,5375 ----
        t = wide_int_to_tree (type, rtx_mode_t (x, TYPE_MODE (type)));
        return t;
  
+     case CONST_POLY_INT:
+       return wide_int_to_tree (type, const_poly_int_value (x));
+ 
      case CONST_DOUBLE:
        STATIC_ASSERT (HOST_BITS_PER_WIDE_INT * 2 <= MAX_BITSIZE_MODE_ANY_INT);
        if (TARGET_SUPPORTS_WIDE_INT == 0 && GET_MODE (x) == VOIDmode)
*************** make_tree (tree type, rtx x)
*** 5458,5466 ****
        /* fall through.  */
  
      default:
-       if (CONST_POLY_INT_P (x))
- 	return wide_int_to_tree (t, const_poly_int_value (x));
- 
        t = build_decl (RTL_LOCATION (x), VAR_DECL, NULL_TREE, type);
  
        /* If TYPE is a POINTER_TYPE, we might need to convert X from
--- 5461,5466 ----
diff -Nrcpad gcc-14.3.0/gcc/fold-const.cc gcc-14.3.0-RC-20260619/gcc/fold-const.cc
*** gcc-14.3.0/gcc/fold-const.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fold-const.cc	Fri Jun 19 06:51:02 2026
*************** fold_vec_perm (tree type, tree arg0, tre
*** 10985,10995 ****
  
    /* For fall back case, we want to ensure we have VLS vectors
       with equal length.  */
!   if (!sel.length ().is_constant (&nelts))
      return NULL_TREE;
  
-   gcc_assert (known_eq (sel.length (),
- 			TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))));
    tree *in_elts = XALLOCAVEC (tree, nelts * 2);
    if (!vec_cst_ctor_to_array (arg0, nelts, in_elts)
        || !vec_cst_ctor_to_array (arg1, nelts, in_elts + nelts))
--- 10985,10994 ----
  
    /* For fall back case, we want to ensure we have VLS vectors
       with equal length.  */
!   if (!sel.length ().is_constant (&nelts)
!       || !known_eq (sel.length (), TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))))
      return NULL_TREE;
  
    tree *in_elts = XALLOCAVEC (tree, nelts * 2);
    if (!vec_cst_ctor_to_array (arg0, nelts, in_elts)
        || !vec_cst_ctor_to_array (arg1, nelts, in_elts + nelts))
diff -Nrcpad gcc-14.3.0/gcc/fortran/ChangeLog gcc-14.3.0-RC-20260619/gcc/fortran/ChangeLog
*** gcc-14.3.0/gcc/fortran/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,501 ----
+ 2026-05-21  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-05-20  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/106546
+ 	* frontend-passes.cc (create_var): Set attr->automatic on
+ 	new symbol.
+ 	(create_do_loop): Likewise on iteration variable.
+ 
+ 2026-05-20  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/115260
+ 	* trans-expr.cc (gfc_conv_subref_array_arg): Pass false to
+ 	dealloc argument of gfc_trans_scalar_assign if we are
+ 	converting a g77-style argument.
+ 
+ 2026-05-14  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-08  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/96986
+ 	* resolve.cc (resolve_global_procedure): Move entry symbol
+ 	lookup outside the resolved != -1 block.
+ 
+ 2026-05-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-10  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/94978
+ 	* frontend-passes.cc (evaluate_loop_bound): New helper.
+ 	(inner_loop_may_be_skipped): New helper.
+ 	(do_subscript): Skip outer-loop bound warnings when nested inner loops
+ 	may be zero-trip for the substituted bound.
+ 
+ 2026-05-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-16  Paul Thomas  <pault@gcc.gnu.org>
+ 		    Steve Kargl  <kargls@comcast.net>
+ 
+ 	PR fortran/93832
+ 	* array.cc (resolve_array_bound): Emit error and return false
+ 	if bound expression is derived type or class.
+ 	* primary.cc (gfc_convert_to_structure_constructor): Do not
+ 	dereference NULL in character component test. Define 'shorter'
+ 	and use it help cure one of several whitespace issues.
+ 
+ 2026-05-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-11  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/93814
+ 	* trans-decl.cc (build_entry_thunks): Create local result buffer
+ 	and length temporaries for bind(c) CHARACTER entry thunks when the
+ 	master returns by reference but the thunk returns by value.
+ 
+ 2026-05-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-08  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/93715
+ 	* trans-decl.cc (gfc_trans_deferred_vars): Skip auto array
+ 	allocation for scalar coarrays.
+ 
+ 2026-05-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	* trans-openmp.cc (gfc_omp_finish_clause): Compute OMP_CLAUSE_SIZE
+ 	from the array domain bounds and element size for VLA types instead
+ 	of using TYPE_SIZE_UNIT directly, to avoid corrupting the type.
+ 
+ 2026-05-12  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-07  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/85352
+ 	* resolve.cc (specification_expr_symbol): New variable.
+ 	(entry_dummy_seen_p): Return whether a dummy appears in an already
+ 	seen ENTRY.
+ 	(gfc_resolve_formal_arglist): Remember the dummy whose specification
+ 	expressions are being resolved.
+ 	(resolve_variable): Accept unresolved sibling ENTRY dummy arguments
+ 	while resolving the current dummy's specification expressions.
+ 	(resolve_fl_variable): Preserve specification_expr_symbol.
+ 	(resolve_symbol_array_spec): Likewise.
+ 
+ 2026-05-09  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-07  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/107425
+ 	* trans-decl.cc (gfc_finish_var_decl): Check for
+ 	omp_affinity_iterators namespace before FL_LABEL BLOCK check.
+ 	Only route actual iterator variables through add_decl_as_local;
+ 	add other variables to the enclosing function.
+ 
+ 2026-05-09  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-06  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/79524
+ 	PR fortran/79524
+ 	* decl.cc (discard_pending_charlens): New helper.
+ 	(add_init_expr_to_sym): Drop statement-local charlens when
+ 	rejecting variable-length parameter arrays.
+ 	(variable_decl, do_parm, enumerator_decl): Save the current
+ 	namespace charlen list before parsing declarations with
+ 	initializers.
+ 	(match_procedure_decl): Adjust call to add_init_expr_to_sym.
+ 
+ 2026-05-06  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-05  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/109788
+ 	* iresolve.cc (copy_intrinsic_sym): New helper.
+ 	(gfc_resolve_spread): Copy the intrinsic descriptor before
+ 	specializing the character formal argument type.
+ 
+ 2026-05-06  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-07  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/102430
+ 	* openmp.cc (resolve_omp_clauses): Reject array/allocatable LINEAR on
+ 	worksharing-loop constructs.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-02-07  Tomáš Trnka  <trnka@scm.com>
+ 
+ 	PR fortran/116829
+ 	* trans-decl.cc (init_intent_out_dt): Always call
+ 	gfc_init_default_dt() for BT_DERIVED to apply s->value if the
+ 	symbol isn't allocatable. Also simplify the logic a bit.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-04-03  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/100155
+ 	* trans-expr.cc (gfc_add_interface_mapping): 'new_sym' dummy
+ 	attribute set to zero.
+ 	(gfc_conv_procedure_call): Deallocate allocatable components of
+ 	a class argument, enclosed in parentheses,wrap up the parmse
+ 	and proceed to the next argument.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-27  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/102619
+ 	* trans-expr.cc (gfc_get_interface_mapping_array): Add argument
+ 	'assumed_rank_formal', which if true returns the descriptor in
+ 	'ifm'.
+ 	(gfc_add_interface_mapping): Detect an assumed rank formal arg
+ 	of a non-intrinsic function to set 'assumed_rank_formal' and
+ 	pass the descriptor to gfc_get_interface_mapping_array.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-21  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/59104
+ 	* gfortran.h : Add decl_order to gfc_symbol.
+ 	* symbol.cc : Add static next_decl_order..
+ 	(gfc_set_sym_referenced): Set symbol decl_order.
+ 	* trans-decl.cc : Include dependency.h.
+ 	(decl_order): Replace symbol declared_at.lb->location with
+ 	decl_order.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-06-20  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/59104
+ 	* dependency.cc (dependency_fcn, gfc_function_dependency): New
+ 	functions to detect dependency in array bounds and character
+ 	lengths on old style function results.
+ 	* dependency.h : Add prototype for gfc_function_dependency.
+ 	* error.cc (error_print): Remove trailing space.
+ 	* gfortran.h : Remove dummy_order and add fn_result_spec.
+ 	* symbol.cc : Remove declaration of next_dummy_order..
+ 	(gfc_set_sym_referenced): remove setting of symbol dummy order.
+ 	* trans-array.cc (gfc_trans_auto_array_allocation): Detect
+ 	non-dummy symbols with function dependencies and put the
+ 	allocation at the end of the initialization code.
+ 	* trans-decl.cc : Include dependency.h.
+ 	(decl_order): New function that determines uses the location
+ 	field of the symbol 'declared_at' to determine the order of two
+ 	declarations.
+ 	(gfc_defer_symbol_init): Call gfc_function_dependency to put
+ 	dependent symbols in the right part of the tlink chain. Use
+ 	the location field of the symbol declared_at to determine the
+ 	order of declarations.
+ 	(gfc_trans_auto_character_variable): Put character length
+ 	initialization of dependent symbols at the end of the chain.
+ 	* trans.cc (gfc_add_init_cleanup): Add boolean argument with
+ 	default false that determines whther an expression is placed at
+ 	the back or the front of the initialization chain.
+ 	* trans.h : Update the prototype for gfc_add_init_cleanup.
+ 
+ 2026-04-14  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121616
+ 	* primary.cc (gfc_variable_attr): Properly set dimension attribute
+ 	from a component ref.
+ 
+ 2026-04-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 	    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/124751
+ 	* trans-array.cc (gfc_conv_array_parameter): Build a packed
+ 	descriptor for assumed-rank actual arguments instead of reusing
+ 	stale metadata from the original descriptor.
+ 
+ 2026-04-14  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-01  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/100194
+ 	* trans-expr.cc (gfc_conv_procedure_call): Skip
+ 	gfc_conv_subref_array_arg for assumed-rank actual arguments
+ 	(e->rank == -1) when the dummy is contiguous.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-30  Christopher Albert  <albert@tugraz.at>
+ 
+ 	* scanner.cc (skip_free_oacc_sentinel): Clear openmp_flag only for
+ 	fresh OpenACC directive lines.
+ 	(skip_free_omp_sentinel): Clear openacc_flag only for fresh OpenMP
+ 	directive lines.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/95879
+ 	PR fortran/95879
+ 	* parse.cc (fixup_st_func_formals): New function to update
+ 	statement function formal argument lists referencing a symbol
+ 	about to be freed.
+ 	(gfc_fixup_sibling_symbols): Call fixup_st_func_formals before
+ 	gfc_release_symbol.
+ 
+ 2026-04-05  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-20  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/120723
+ 	* trans-openmp.cc (gfc_trans_omp_clauses): Handle bare scalar
+ 	OpenACC attach/detach clauses without pointer-mapping nodes.
+ 
+ 2026-04-02  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/102596
+ 	* trans-openmp.cc (gfc_omp_clause_default_ctor): Only require an
+ 	outer reference when the constructor path actually uses it.
+ 
+ 2026-04-02  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/120286
+ 	* trans-openmp.cc (gfc_is_class_pointer_type): New helper.
+ 	(gfc_omp_clause_copy_ctor): Unwrap saved descriptors before
+ 	deciding whether privatization should preserve only pointer
+ 	association.  Handle scalar class pointers on that path too.
+ 	(gfc_omp_clause_dtor): Likewise.
+ 
+ 2026-03-30  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-11  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/95338
+ 	* trans-types.cc (gfc_get_entry_result_type): New helper to use the
+ 	ABI return type for mixed ENTRY union fields.
+ 	(gfc_get_mixed_entry_union): Use it for each entry result field.
+ 
+ 2026-03-29  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/102459
+ 	* trans-openmp.cc (gfc_trans_omp_clauses): Choose the scalar
+ 	reference path from the full expression rank rather than the first
+ 	array reference.
+ 	(gfc_trans_omp_depobj): Likewise.
+ 
+ 2026-03-29  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-12  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/82721
+ 	* decl.cc (discard_pending_charlen): New helper.
+ 	(build_sym): Discard unattached CHARACTER length nodes when
+ 	gfc_add_type rejects the declaration.
+ 
+ 2026-03-29  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-01-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/96087
+ 	* trans-decl.cc (gfc_get_symbol_decl): If a dummy is missing a
+ 	backend decl, it is likely that it has come from a module proc
+ 	interface. Look for the formal symbol by name in the containing
+ 	proc and use its backend decl.
+ 	* trans-expr.cc (gfc_apply_interface_mapping_to_expr): For the
+ 	same reason, match the name, rather than the symbol address to
+ 	perform the mapping.
+ 
+ 2026-03-28  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-28  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84245
+ 	* match.cc (gfc_match_select_type): Free the temporary namespace
+ 	only on MATCH_NO. Return immediately on MATCH_ERROR.
+ 
+ 2026-03-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/119273
+ 	* trans-array.cc (expr_contains_impure_fcn): New function.
+ 	(gfc_expr_contains_impure_fcn): New function calling above fcn.
+ 	(array_bound_check_elemental): Add indexse pre-block to se pre.
+ 	Warn if the index expression contains a function not declared
+ 	to be pure.
+ 
+ 2026-03-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/105168
+ 	* trans-expr.cc (gfc_conv_class_to_class): If the argument expr
+ 	is not a variable use the parent tree if that is a class.
+ 	(gfc_conv_procedure_call): If the argument expression is not a
+ 	variable, shift the bounds to give unity lbounds.
+ 	(gfc_trans_arrayfunc_assign): Return NULL_TREE instead of NULL.
+ 
+ 2026-03-19  Mikael Morin  <morin-mikael@orange.fr>
+ 
+ 	Backported from master:
+ 	2025-09-24  Mikael Morin  <morin-mikael@orange.fr>
+ 
+ 	PR fortran/122046
+ 	* symbol.cc (gfc_get_procedure_ns): Try to find the namespace
+ 	among the list of contained namespaces before returning the
+ 	value from the formal_ns field.
+ 
+ 2026-03-19  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-19  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/124161
+ 	* resolve.cc (resolve_symbol): Do not apply the default
+ 	initializer if the symbol is used in a submodule.
+ 
+ 2026-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/106946
+ 	PR fortran/124482
+ 	* decl.cc (gfc_match_data_decl): Defer CLASS container cleanup
+ 	until after all failed components are unlinked.  Check remaining
+ 	component list before freeing a shared container.
+ 	* gfortran.h (gfc_free_component): Declare.
+ 	(gfc_delete_symtree): Declare.
+ 	* symbol.cc (gfc_free_component): New function.
+ 	(free_components): Use it.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/124450
+ 	* trans-io.cc (transfer_expr): If code is NULL, call
+ 	transfer_array_component with NULL where argument rather than
+ 	&code->loc.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/107968
+ 	* trans-io.cc (gfc_trans_transfer): Also scalarize I/O of section
+ 	of an array pointer.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/122206
+ 	* trans-types.cc (gfc_get_function_type): Do not clobber an
+ 	existing procedure interface.
+ 
+ 2025-10-05  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-03  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121263
+ 	* trans-intrinsic.cc (gfc_conv_intrinsic_transfer): For an
+ 	unlimited polymorphic SOURCE to TRANSFER use saved descriptor
+ 	if possible.
+ 
+ 2025-09-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-08-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/89092
+ 	* resolve.cc (was_declared): Add subroutine attribute.
+ 
+ 2025-08-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-07-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121145
+ 	* trans-expr.cc (gfc_conv_procedure_call): Do not create pointer
+ 	check for proc-pointer actual passed to optional dummy.
+ 
+ 2025-08-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-06-27  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/120784
+ 	* interface.cc (gfc_match_end_interface): Detect empty local_name.
+ 
+ 2025-08-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-06-23  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/120784
+ 	* interface.cc (gfc_match_end_interface): If a use-associated
+ 	symbol is renamed, use the local_name for checking.
+ 
+ 2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121060
+ 	* interface.cc (matching_typebound_op): Defer determination of
+ 	specific procedure until resolution by returning NULL.
+ 
+ 2025-05-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-05-15  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/85750
+ 	* resolve.cc (resolve_symbol): Reorder conditions when to apply
+ 	default-initializers.
+ 
+ 2025-05-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-08-30  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/98454
+ 	* resolve.cc (resolve_symbol): Add default-initialization of
+ 	non-allocatable, non-pointer derived-type function results.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/fortran/array.cc gcc-14.3.0-RC-20260619/gcc/fortran/array.cc
*** gcc-14.3.0/gcc/fortran/array.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/array.cc	Fri Jun 19 06:51:02 2026
*************** resolve_array_bound (gfc_expr *e, int ch
*** 382,387 ****
--- 382,394 ----
    if (e == NULL)
      return true;
  
+   if (e->ts.type == BT_DERIVED || e->ts.type == BT_CLASS)
+     {
+       gfc_error ("Derived type or class expression for array bound at %L",
+ 		 &e->where);
+       return false;
+     }
+ 
    if (!gfc_resolve_expr (e)
        || !gfc_specification_expr (e))
      return false;
diff -Nrcpad gcc-14.3.0/gcc/fortran/decl.cc gcc-14.3.0-RC-20260619/gcc/fortran/decl.cc
*** gcc-14.3.0/gcc/fortran/decl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/decl.cc	Fri Jun 19 06:51:02 2026
*************** static gfc_expr *saved_kind_expr = NULL;
*** 116,121 ****
--- 116,156 ----
  static gfc_actual_arglist *decl_type_param_list;
  static gfc_actual_arglist *type_param_spec_list;
  
+ /* Drop an unattached gfc_charlen node from the current namespace.  This is
+    used when declaration processing created a length node for a symbol that is
+    rejected before the node is attached to any surviving symbol.  */
+ static void
+ discard_pending_charlen (gfc_charlen *cl)
+ {
+   if (!cl || !gfc_current_ns || gfc_current_ns->cl_list != cl)
+     return;
+ 
+   gfc_current_ns->cl_list = cl->next;
+   gfc_free_expr (cl->length);
+   free (cl);
+ }
+ 
+ /* Drop the charlen nodes created while matching a declaration that is about
+    to be rejected.  Callers must clear any surviving owners before using this
+    helper, so only the statement-local nodes remain on the namespace list.  */
+ 
+ static void
+ discard_pending_charlens (gfc_charlen *saved_cl)
+ {
+   if (!gfc_current_ns)
+     return;
+ 
+   while (gfc_current_ns->cl_list != saved_cl)
+     {
+       gfc_charlen *cl = gfc_current_ns->cl_list;
+ 
+       gcc_assert (cl);
+       gfc_current_ns->cl_list = cl->next;
+       gfc_free_expr (cl->length);
+       free (cl);
+     }
+ }
+ 
  /********************* DATA statement subroutines *********************/
  
  static bool in_match_data = false;
*************** build_sym (const char *name, int elem, g
*** 1777,1783 ****
        && (sym->attr.implicit_type == 0
  	  || !gfc_compare_types (&sym->ts, &current_ts))
        && !gfc_add_type (sym, &current_ts, var_locus))
!     return false;
  
    if (sym->ts.type == BT_CHARACTER)
      {
--- 1812,1831 ----
        && (sym->attr.implicit_type == 0
  	  || !gfc_compare_types (&sym->ts, &current_ts))
        && !gfc_add_type (sym, &current_ts, var_locus))
!     {
!       /* Duplicate-type rejection can leave a fresh CHARACTER length node on
! 	 the namespace list before it is attached to any surviving symbol.
! 	 Drop only that unattached node; shared constant charlen nodes are
! 	 already reachable from earlier declarations.  PR82721.  */
!       if (current_ts.type == BT_CHARACTER && cl && elem == 1)
! 	{
! 	  discard_pending_charlen (cl);
! 	  gfc_clear_ts (&current_ts);
! 	}
!       else if (current_ts.type == BT_CHARACTER && cl && cl != current_ts.u.cl)
! 	discard_pending_charlen (cl);
!       return false;
!     }
  
    if (sym->ts.type == BT_CHARACTER)
      {
*************** fix_initializer_charlen (gfc_typespec *t
*** 2011,2017 ****
     expression to a symbol.  */
  
  static bool
! add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
  {
    symbol_attribute attr;
    gfc_symbol *sym;
--- 2059,2066 ----
     expression to a symbol.  */
  
  static bool
! add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus,
! 		      gfc_charlen *saved_cl_list)
  {
    symbol_attribute attr;
    gfc_symbol *sym;
*************** add_init_expr_to_sym (const char *name,
*** 2099,2104 ****
--- 2148,2163 ----
  					 "at %L "
  					 "with variable length elements",
  					 &sym->declared_at);
+ 
+ 			      /* This rejection path can leave several
+ 				 declaration-local charlens on cl_list,
+ 				 including the replacement symbol charlen and
+ 				 the array-constructor typespec charlen.
+ 				 Clear the surviving owners first, then drop
+ 				 only the nodes created by this declaration.  */
+ 			      sym->ts.u.cl = NULL;
+ 			      init->ts.u.cl = NULL;
+ 			      discard_pending_charlens (saved_cl_list);
  			      return false;
  			    }
  			  clen = mpz_get_si (length->value.integer);
*************** variable_decl (int elem)
*** 2628,2633 ****
--- 2687,2693 ----
    gfc_array_spec *as;
    gfc_array_spec *cp_as; /* Extra copy for Cray Pointees.  */
    gfc_charlen *cl;
+   gfc_charlen *saved_cl_list;
    bool cl_deferred;
    locus var_locus;
    match m;
*************** variable_decl (int elem)
*** 2638,2643 ****
--- 2698,2704 ----
    initializer = NULL;
    as = NULL;
    cp_as = NULL;
+   saved_cl_list = gfc_current_ns->cl_list;
  
    /* When we get here, we've just matched a list of attributes and
       maybe a type and a double colon.  The next thing we expect to see
*************** variable_decl (int elem)
*** 3176,3182 ****
       NULL here, because we sometimes also need to check if a
       declaration *must* have an initialization expression.  */
    if (!gfc_comp_struct (gfc_current_state ()))
!     t = add_init_expr_to_sym (name, &initializer, &var_locus);
    else
      {
        if (current_ts.type == BT_DERIVED
--- 3237,3244 ----
       NULL here, because we sometimes also need to check if a
       declaration *must* have an initialization expression.  */
    if (!gfc_comp_struct (gfc_current_state ()))
!     t = add_init_expr_to_sym (name, &initializer, &var_locus,
! 			      saved_cl_list);
    else
      {
        if (current_ts.type == BT_DERIVED
*************** gfc_match_data_decl (void)
*** 6311,6322 ****
--- 6373,6400 ----
    gfc_symbol *sym;
    match m;
    int elem;
+   gfc_component *comp_tail = NULL;
  
    type_param_spec_list = NULL;
    decl_type_param_list = NULL;
  
    num_idents_on_line = 0;
  
+   /* Record the last component before we start, so that we can roll back
+      any components added during this statement on error.  PR106946.
+      Must be set before any 'goto cleanup' with m == MATCH_ERROR.  */
+   if (gfc_comp_struct (gfc_current_state ()))
+     {
+       gfc_symbol *block = gfc_current_block ();
+       if (block)
+ 	{
+ 	  comp_tail = block->components;
+ 	  if (comp_tail)
+ 	    while (comp_tail->next)
+ 	      comp_tail = comp_tail->next;
+ 	}
+     }
+ 
    m = gfc_match_decl_type_spec (&current_ts, 0);
    if (m != MATCH_YES)
      return m;
*************** ok:
*** 6436,6441 ****
--- 6514,6593 ----
    gfc_free_data_all (gfc_current_ns);
  
  cleanup:
+   /* If we failed inside a derived type definition, remove any CLASS
+      components that were added during this failed statement.  For CLASS
+      components, gfc_build_class_symbol creates an extra container symbol in
+      the namespace outside the normal undo machinery.  When reject_statement
+      later calls gfc_undo_symbols, the declaration state is rolled back but
+      that helper symbol survives and leaves the component dangling.  Ordinary
+      components do not create that extra helper symbol, so leave them in
+      place for the usual follow-up diagnostics.  PR106946.
+ 
+      CLASS containers are shared between components of the same class type
+      and attributes (gfc_build_class_symbol reuses existing containers).
+      We must not free a container that is still referenced by a previously
+      committed component.  Unlink and free the components first, then clean
+      up only orphaned containers.  PR124482.  */
+   if (m == MATCH_ERROR && gfc_comp_struct (gfc_current_state ()))
+     {
+       gfc_symbol *block = gfc_current_block ();
+       if (block)
+ 	{
+ 	  gfc_component **prev;
+ 	  if (comp_tail)
+ 	    prev = &comp_tail->next;
+ 	  else
+ 	    prev = &block->components;
+ 
+ 	  /* Record the CLASS container from the removed components.
+ 	     Normally all components in one declaration share a single
+ 	     container, but per-variable array specs can produce
+ 	     additional ones; any beyond the first are harmlessly
+ 	     leaked until namespace destruction.  */
+ 	  gfc_symbol *fclass_container = NULL;
+ 
+ 	  while (*prev)
+ 	    {
+ 	      gfc_component *c = *prev;
+ 	      if (c->ts.type == BT_CLASS && c->ts.u.derived
+ 		  && c->ts.u.derived->attr.is_class)
+ 		{
+ 		  *prev = c->next;
+ 		  if (!fclass_container)
+ 		    fclass_container = c->ts.u.derived;
+ 		  c->ts.u.derived = NULL;
+ 		  gfc_free_component (c);
+ 		}
+ 	      else
+ 		prev = &c->next;
+ 	    }
+ 
+ 	  /* Free the container only if no remaining component still
+ 	     references it.  CLASS containers are shared between
+ 	     components of the same class type and attributes
+ 	     (gfc_build_class_symbol reuses existing ones).  */
+ 	  if (fclass_container)
+ 	    {
+ 	      bool shared = false;
+ 	      for (gfc_component *q = block->components; q; q = q->next)
+ 		if (q->ts.type == BT_CLASS
+ 		    && q->ts.u.derived == fclass_container)
+ 		  {
+ 		    shared = true;
+ 		    break;
+ 		  }
+ 	      if (!shared)
+ 		{
+ 		  if (gfc_find_symtree (fclass_container->ns->sym_root,
+ 					fclass_container->name))
+ 		    gfc_delete_symtree (&fclass_container->ns->sym_root,
+ 					fclass_container->name);
+ 		  gfc_release_symbol (fclass_container);
+ 		}
+ 	    }
+ 	}
+     }
+ 
    if (saved_kind_expr)
      gfc_free_expr (saved_kind_expr);
    if (type_param_spec_list)
*************** match_procedure_decl (void)
*** 7252,7258 ****
  	  if (m != MATCH_YES)
  	    goto cleanup;
  
! 	  if (!add_init_expr_to_sym (sym->name, &initializer, &gfc_current_locus))
  	    goto cleanup;
  
  	}
--- 7404,7412 ----
  	  if (m != MATCH_YES)
  	    goto cleanup;
  
! 	  if (!add_init_expr_to_sym (sym->name, &initializer,
! 				     &gfc_current_locus,
! 				     gfc_current_ns->cl_list))
  	    goto cleanup;
  
  	}
*************** do_parm (void)
*** 9482,9490 ****
--- 9636,9647 ----
  {
    gfc_symbol *sym;
    gfc_expr *init;
+   gfc_charlen *saved_cl_list;
    match m;
    bool t;
  
+   saved_cl_list = gfc_current_ns->cl_list;
+ 
    m = gfc_match_symbol (&sym, 0);
    if (m == MATCH_NO)
      gfc_error ("Expected variable name at %C in PARAMETER statement");
*************** do_parm (void)
*** 9525,9531 ****
        goto cleanup;
      }
  
!   t = add_init_expr_to_sym (sym->name, &init, &gfc_current_locus);
    return (t) ? MATCH_YES : MATCH_ERROR;
  
  cleanup:
--- 9682,9689 ----
        goto cleanup;
      }
  
!   t = add_init_expr_to_sym (sym->name, &init, &gfc_current_locus,
! 			    saved_cl_list);
    return (t) ? MATCH_YES : MATCH_ERROR;
  
  cleanup:
*************** enumerator_decl (void)
*** 10936,10941 ****
--- 11094,11100 ----
    char name[GFC_MAX_SYMBOL_LEN + 1];
    gfc_expr *initializer;
    gfc_array_spec *as = NULL;
+   gfc_charlen *saved_cl_list;
    gfc_symbol *sym;
    locus var_locus;
    match m;
*************** enumerator_decl (void)
*** 10943,10948 ****
--- 11102,11108 ----
    locus old_locus;
  
    initializer = NULL;
+   saved_cl_list = gfc_current_ns->cl_list;
    old_locus = gfc_current_locus;
  
    /* When we get here, we've just matched a list of attributes and
*************** enumerator_decl (void)
*** 10999,11005 ****
       to be parsed.  add_init_expr_to_sym() zeros initializer, so we
       use last_initializer below.  */
    last_initializer = initializer;
!   t = add_init_expr_to_sym (name, &initializer, &var_locus);
  
    /* Maintain enumerator history.  */
    gfc_find_symbol (name, NULL, 0, &sym);
--- 11159,11166 ----
       to be parsed.  add_init_expr_to_sym() zeros initializer, so we
       use last_initializer below.  */
    last_initializer = initializer;
!   t = add_init_expr_to_sym (name, &initializer, &var_locus,
! 			    saved_cl_list);
  
    /* Maintain enumerator history.  */
    gfc_find_symbol (name, NULL, 0, &sym);
diff -Nrcpad gcc-14.3.0/gcc/fortran/dependency.cc gcc-14.3.0-RC-20260619/gcc/fortran/dependency.cc
*** gcc-14.3.0/gcc/fortran/dependency.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/dependency.cc	Fri Jun 19 06:51:02 2026
*************** gfc_omp_expr_prefix_same (gfc_expr *lexp
*** 2497,2499 ****
--- 2497,2581 ----
  
    return true;
  }
+ 
+ 
+ /* gfc_function_dependency returns true for non-dummy symbols with dependencies
+    on an old-fashioned function result (ie. proc_name = proc_name->result).
+    This is used to ensure that initialization code appears after the function
+    result is treated and that any mutual dependencies between these symbols are
+    respected.  */
+ 
+ static bool
+ dependency_fcn (gfc_expr *e, gfc_symbol *sym,
+ 		 int *f ATTRIBUTE_UNUSED)
+ {
+   if (e == NULL)
+     return false;
+ 
+   if (e && e->expr_type == EXPR_VARIABLE)
+     {
+       if (e->symtree && e->symtree->n.sym == sym)
+ 	return true;
+       /* Recurse to see if this symbol is dependent on the function result. If
+ 	 so an indirect dependence exists, which should be handled in the same
+ 	 way as a direct dependence. The recursion is prevented from being
+ 	 infinite by statement order.  */
+       else if (e->symtree && e->symtree->n.sym)
+ 	return gfc_function_dependency (e->symtree->n.sym, sym);
+     }
+ 
+   return false;
+ }
+ 
+ 
+ bool
+ gfc_function_dependency (gfc_symbol *sym, gfc_symbol *proc_name)
+ {
+   bool dep = false;
+ 
+   if (proc_name && proc_name->attr.function
+       && proc_name == proc_name->result
+       && !(sym->attr.dummy || sym->attr.result))
+     {
+       if (sym->fn_result_dep)
+ 	return true;
+ 
+       if (sym->as && sym->as->type == AS_EXPLICIT)
+ 	{
+ 	  for (int dim = 0; dim < sym->as->rank; dim++)
+ 	    {
+ 	      if (sym->as->lower[dim]
+ 		  && sym->as->lower[dim]->expr_type != EXPR_CONSTANT)
+ 		dep = gfc_traverse_expr (sym->as->lower[dim], proc_name,
+ 					 dependency_fcn, 0);
+ 	      if (dep)
+ 		{
+ 		  sym->fn_result_dep = 1;
+ 		  return true;
+ 		}
+ 	      if (sym->as->upper[dim]
+ 		  && sym->as->upper[dim]->expr_type != EXPR_CONSTANT)
+ 		dep = gfc_traverse_expr (sym->as->upper[dim], proc_name,
+ 					 dependency_fcn, 0);
+ 	      if (dep)
+ 		{
+ 		  sym->fn_result_dep = 1;
+ 		  return true;
+ 		}
+ 	    }
+ 	}
+ 
+       if (sym->ts.type == BT_CHARACTER
+ 	  && sym->ts.u.cl && sym->ts.u.cl->length
+ 	  && sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
+ 	dep = gfc_traverse_expr (sym->ts.u.cl->length, proc_name,
+ 				 dependency_fcn, 0);
+       if (dep)
+ 	{
+ 	  sym->fn_result_dep = 1;
+ 	  return true;
+ 	}
+     }
+ 
+   return false;
+  }
diff -Nrcpad gcc-14.3.0/gcc/fortran/dependency.h gcc-14.3.0-RC-20260619/gcc/fortran/dependency.h
*** gcc-14.3.0/gcc/fortran/dependency.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/dependency.h	Fri Jun 19 06:51:02 2026
*************** enum gfc_dep_check
*** 23,29 ****
  {
    NOT_ELEMENTAL,        /* Not elemental case: normal dependency check.  */
    ELEM_CHECK_VARIABLE,  /* Test whether variables overlap.  */
!   ELEM_DONT_CHECK_VARIABLE  /* Test whether variables overlap only if used 
  			       in an expression.  */
  };
  
--- 23,29 ----
  {
    NOT_ELEMENTAL,        /* Not elemental case: normal dependency check.  */
    ELEM_CHECK_VARIABLE,  /* Test whether variables overlap.  */
!   ELEM_DONT_CHECK_VARIABLE  /* Test whether variables overlap only if used
  			       in an expression.  */
  };
  
*************** bool gfc_are_equivalenced_arrays (gfc_ex
*** 43,45 ****
--- 43,47 ----
  bool gfc_omp_expr_prefix_same (gfc_expr *, gfc_expr *);
  
  gfc_expr * gfc_discard_nops (gfc_expr *);
+ 
+ bool gfc_function_dependency (gfc_symbol *, gfc_symbol *);
diff -Nrcpad gcc-14.3.0/gcc/fortran/error.cc gcc-14.3.0-RC-20260619/gcc/fortran/error.cc
*** gcc-14.3.0/gcc/fortran/error.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/error.cc	Fri Jun 19 06:51:02 2026
*************** error_print (const char *type, const cha
*** 892,898 ****
  #else
  	      m = INTTYPE_MAXIMUM (ptrdiff_t);
  #endif
! 	      m = 2 * m + 1;  
  	      error_uinteger (a & m);
  	    }
  	  else
--- 892,898 ----
  #else
  	      m = INTTYPE_MAXIMUM (ptrdiff_t);
  #endif
! 	      m = 2 * m + 1;
  	      error_uinteger (a & m);
  	    }
  	  else
diff -Nrcpad gcc-14.3.0/gcc/fortran/frontend-passes.cc gcc-14.3.0-RC-20260619/gcc/fortran/frontend-passes.cc
*** gcc-14.3.0/gcc/fortran/frontend-passes.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/frontend-passes.cc	Fri Jun 19 06:51:02 2026
*************** create_var (gfc_expr * e, const char *vn
*** 846,851 ****
--- 846,852 ----
    symbol->attr.referenced = 1;
    symbol->attr.dimension = e->rank > 0;
    symbol->attr.fe_temp = 1;
+   symbol->attr.automatic = 1;
    gfc_commit_symbol (symbol);
  
    result = gfc_get_expr ();
*************** insert_index (gfc_expr *e, gfc_symbol *s
*** 2784,2789 ****
--- 2785,2850 ----
  
  }
  
+ static bool
+ evaluate_loop_bound (gfc_expr *e, gfc_symbol *sym, mpz_t val, mpz_t ret)
+ {
+   if (e->expr_type == EXPR_CONSTANT)
+     {
+       mpz_init_set (ret, e->value.integer);
+       return true;
+     }
+ 
+   return insert_index (e, sym, val, ret);
+ }
+ 
+ /* Return true if any loop nested inside LOOP_INDEX is not provably entered
+    after substituting OUTER_VAL for OUTER_SYM.  In that case the guarded array
+    reference may never be evaluated, so do not warn from the outer loop alone.  */
+ 
+ static bool
+ inner_loop_may_be_skipped (int loop_index, gfc_symbol *outer_sym, mpz_t outer_val)
+ {
+   int k;
+   do_t *lp;
+ 
+   FOR_EACH_VEC_ELT_FROM (doloop_list, k, lp, loop_index + 1)
+     {
+       gfc_code *loop = lp->c;
+       int sgn, cmp;
+       mpz_t do_start, do_end, do_step;
+ 
+       if (loop == NULL || loop->ext.iterator == NULL || loop->ext.iterator->var == NULL)
+ 	return true;
+ 
+       if (!evaluate_loop_bound (loop->ext.iterator->step, outer_sym, outer_val, do_step))
+ 	return true;
+ 
+       sgn = mpz_cmp_ui (do_step, 0);
+       if (sgn == 0)
+ 	{
+ 	  mpz_clear (do_step);
+ 	  return true;
+ 	}
+ 
+       if (!evaluate_loop_bound (loop->ext.iterator->start, outer_sym, outer_val, do_start)
+ 	  || !evaluate_loop_bound (loop->ext.iterator->end, outer_sym, outer_val, do_end))
+ 	{
+ 	  mpz_clear (do_step);
+ 	  return true;
+ 	}
+ 
+       cmp = mpz_cmp (do_end, do_start);
+       mpz_clear (do_start);
+       mpz_clear (do_end);
+       mpz_clear (do_step);
+ 
+       if ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0))
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
  /* Check array subscripts for possible out-of-bounds accesses in DO
     loops with constant bounds.  */
  
*************** do_subscript (gfc_expr **e)
*** 2918,2927 ****
  		  mpz_clear (rem);
  		}
  
  	      for (i = 0; i< ar->dimen; i++)
  		{
  		  mpz_t val;
! 		  if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_start
  		      && insert_index (ar->start[i], do_sym, do_start, val))
  		    {
  		      if (ar->as->lower[i]
--- 2979,2993 ----
  		  mpz_clear (rem);
  		}
  
+ 	      bool skip_start = have_do_start
+ 				&& inner_loop_may_be_skipped (j, do_sym, do_start);
+ 	      bool skip_end = have_do_end
+ 			      && inner_loop_may_be_skipped (j, do_sym, do_end);
+ 
  	      for (i = 0; i< ar->dimen; i++)
  		{
  		  mpz_t val;
! 		  if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_start && !skip_start
  		      && insert_index (ar->start[i], do_sym, do_start, val))
  		    {
  		      if (ar->as->lower[i]
*************** do_subscript (gfc_expr **e)
*** 2947,2953 ****
  		      mpz_clear (val);
  		    }
  
! 		  if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_end
  		      && insert_index (ar->start[i], do_sym, do_end, val))
  		    {
  		      if (ar->as->lower[i]
--- 3013,3019 ----
  		      mpz_clear (val);
  		    }
  
! 		  if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_end && !skip_end
  		      && insert_index (ar->start[i], do_sym, do_end, val))
  		    {
  		      if (ar->as->lower[i]
*************** create_do_loop (gfc_expr *start, gfc_exp
*** 3781,3786 ****
--- 3847,3853 ----
    symbol->attr.referenced = 1;
    symbol->attr.dimension = 0;
    symbol->attr.fe_temp = 1;
+   symbol->attr.automatic = 1;
    gfc_commit_symbol (symbol);
  
    i = gfc_get_expr ();
diff -Nrcpad gcc-14.3.0/gcc/fortran/gfortran.h gcc-14.3.0-RC-20260619/gcc/fortran/gfortran.h
*** gcc-14.3.0/gcc/fortran/gfortran.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/gfortran.h	Fri Jun 19 06:51:02 2026
*************** typedef struct gfc_symbol
*** 1887,1895 ****
       points to C and B's is NULL.  */
    struct gfc_common_head* common_head;
  
!   /* Make sure setup code for dummy arguments is generated in the correct
!      order.  */
!   int dummy_order;
  
    gfc_namelist *namelist, *namelist_tail;
  
--- 1887,1894 ----
       points to C and B's is NULL.  */
    struct gfc_common_head* common_head;
  
!   /* Make sure initialization code is generated in the correct order.  */
!   int decl_order;
  
    gfc_namelist *namelist, *namelist_tail;
  
*************** typedef struct gfc_symbol
*** 1929,1934 ****
--- 1928,1935 ----
    unsigned forall_index:1;
    /* Set if the symbol is used in a function result specification .  */
    unsigned fn_result_spec:1;
+   /* Set if the symbol spec. depends on an old-style function result.  */
+   unsigned fn_result_dep:1;
    /* Used to avoid multiple resolutions of a single symbol.  */
    /* = 2 if this has already been resolved as an intrinsic,
         in gfc_resolve_intrinsic,
*************** bool gfc_missing_attr (symbol_attribute
*** 3543,3548 ****
--- 3544,3550 ----
  bool gfc_copy_attr (symbol_attribute *, symbol_attribute *, locus *);
  int gfc_copy_dummy_sym (gfc_symbol **, gfc_symbol *, int);
  bool gfc_add_component (gfc_symbol *, const char *, gfc_component **);
+ void gfc_free_component (gfc_component *);
  gfc_symbol *gfc_use_derived (gfc_symbol *);
  gfc_component *gfc_find_component (gfc_symbol *, const char *, bool, bool,
                                     gfc_ref **);
*************** bool gfc_reference_st_label (gfc_st_labe
*** 3556,3561 ****
--- 3558,3564 ----
  
  gfc_namespace *gfc_get_namespace (gfc_namespace *, int);
  gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *);
+ void gfc_delete_symtree (gfc_symtree **, const char *);
  gfc_symtree *gfc_find_symtree (gfc_symtree *, const char *);
  gfc_symtree *gfc_get_unique_symtree (gfc_namespace *);
  gfc_user_op *gfc_get_uop (const char *);
diff -Nrcpad gcc-14.3.0/gcc/fortran/gfortran.info gcc-14.3.0-RC-20260619/gcc/fortran/gfortran.info
*** gcc-14.3.0/gcc/fortran/gfortran.info	Fri May 23 11:28:13 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/gfortran.info	Fri Jun 19 07:14:57 2026
***************
*** 1,7 ****
! This is gfortran.info, produced by makeinfo version 6.5 from
  gfortran.texi.
  
! Copyright (C) 1999-2024 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
--- 1,7 ----
! This is gfortran.info, produced by makeinfo version 7.1 from
  gfortran.texi.
  
! Copyright © 1999-2024 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
*************** START-INFO-DIR-ENTRY
*** 26,37 ****
  END-INFO-DIR-ENTRY
  
     This file documents the use and the internals of the GNU Fortran
! compiler, ('gfortran').
  
     Published by the Free Software Foundation 51 Franklin Street, Fifth
  Floor Boston, MA 02110-1301 USA
  
!    Copyright (C) 1999-2024 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
--- 26,37 ----
  END-INFO-DIR-ENTRY
  
     This file documents the use and the internals of the GNU Fortran
! compiler, (‘gfortran’).
  
     Published by the Free Software Foundation 51 Franklin Street, Fifth
  Floor Boston, MA 02110-1301 USA
  
!    Copyright © 1999-2024 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
*************** File: gfortran.info,  Node: Top,  Next:
*** 57,64 ****
  Introduction
  ************
  
! This manual documents the use of 'gfortran', the GNU Fortran compiler.
! You can find in this manual how to invoke 'gfortran', as well as its
  features and incompatibilities.
  
  * Menu:
--- 57,64 ----
  Introduction
  ************
  
! This manual documents the use of ‘gfortran’, the GNU Fortran compiler.
! You can find in this manual how to invoke ‘gfortran’, as well as its
  features and incompatibilities.
  
  * Menu:
*************** features and incompatibilities.
*** 66,72 ****
  * Introduction::
  
  Part I: Invoking GNU Fortran
! * Invoking GNU Fortran:: Command options supported by 'gfortran'.
  * Runtime::              Influencing runtime behavior with environment variables.
  
  Part II: Language Reference
--- 66,72 ----
  * Introduction::
  
  Part I: Invoking GNU Fortran
! * Invoking GNU Fortran:: Command options supported by ‘gfortran’.
  * Runtime::              Influencing runtime behavior with environment variables.
  
  Part II: Language Reference
*************** File: gfortran.info,  Node: About GNU Fo
*** 104,113 ****
  1.1 About GNU Fortran
  =====================
  
! The GNU Fortran compiler is the successor to 'g77', the Fortran 77 front
  end included in GCC prior to version 4 (released in 2005).  While it is
! backward-compatible with most 'g77' extensions and command-line options,
! 'gfortran' is a completely new implemention designed to support more
  modern dialects of Fortran.  GNU Fortran implements the Fortran 77, 90
  and 95 standards completely, most of the Fortran 2003 and 2008
  standards, and some features from the 2018 standard.  It also implements
--- 104,113 ----
  1.1 About GNU Fortran
  =====================
  
! The GNU Fortran compiler is the successor to ‘g77’, the Fortran 77 front
  end included in GCC prior to version 4 (released in 2005).  While it is
! backward-compatible with most ‘g77’ extensions and command-line options,
! ‘gfortran’ is a completely new implemention designed to support more
  modern dialects of Fortran.  GNU Fortran implements the Fortran 77, 90
  and 95 standards completely, most of the Fortran 2003 and 2008
  standards, and some features from the 2018 standard.  It also implements
*************** see <https://gcc.gnu.org/wiki/GfortranAp
*** 128,198 ****
  
     GNU Fortran provides the following functionality:
  
!    * Read a program, stored in a file and containing "source code"
       instructions written in Fortran 77.
  
!    * Translate the program into instructions a computer can carry out
       more quickly than it takes to translate the original Fortran
       instructions.  The result after compilation of a program is
!      "machine code", which is efficiently translated and processed by a
       machine such as your computer.  Humans usually are not as good
       writing machine code as they are at writing Fortran (or C++, Ada,
       or Java), because it is easy to make tiny mistakes writing machine
       code.
  
!    * Provide information about the reasons why the compiler may be
       unable to create a binary from the source code, for example if the
       source code is flawed.  The Fortran language standards require that
       the compiler can point out mistakes in your code.  An incorrect
!      usage of the language causes an "error message".
  
       The compiler also attempts to diagnose cases where your program
       contains a correct usage of the language, but instructs the
       computer to do something questionable.  This kind of diagnostic
!      message is called a "warning message".
  
!    * Provide optional information about the translation passes from the
       source code to machine code.  This can help you to find the cause
       of certain bugs which may not be obvious in the source code, but
       may be more easily found at a lower level compiler output.  It also
       helps developers to find bugs in the compiler itself.
  
!    * Provide information in the generated machine code that can make it
       easier to find bugs in the program (using a debugging tool, called
!      a "debugger", such as the GNU Debugger 'gdb').
  
!    * Locate and gather machine code already generated to perform actions
       requested by statements in the program.  This machine code is
!      organized into "modules" and is located and "linked" to the user
       program.
  
     The GNU Fortran compiler consists of several components:
  
!    * A version of the 'gcc' command (which also might be installed as
!      the system's 'cc' command) that also understands and accepts
!      Fortran source code.  The 'gcc' command is the "driver" program for
!      all the languages in the GNU Compiler Collection (GCC); With 'gcc',
       you can compile the source code of any language for which a front
       end is available in GCC.
  
!    * The 'gfortran' command itself, which also might be installed as the
!      system's 'f95' command.  'gfortran' is just another driver program,
       but specifically for the Fortran compiler only.  The primary
!      difference between the 'gcc' and 'gfortran' commands is that the
       latter automatically links the correct libraries to your program.
  
!    * A collection of run-time libraries.  These libraries contain the
       machine code needed to support capabilities of the Fortran language
       that are not directly provided by the machine code generated by the
!      'gfortran' compilation phase, such as intrinsic functions and
       subroutines, and routines for interaction with files and the
       operating system.
  
!    * The Fortran compiler itself, ('f951').  This is the GNU Fortran
       parser and code generator, linked to and interfaced with the GCC
!      backend library.  'f951' "translates" the source code to assembler
       code.  You would typically not use this program directly; instead,
!      the 'gcc' or 'gfortran' driver programs call it for you.
  
  
  File: gfortran.info,  Node: GNU Fortran and GCC,  Next: Standards,  Prev: About GNU Fortran,  Up: Introduction
--- 128,198 ----
  
     GNU Fortran provides the following functionality:
  
!    • Read a program, stored in a file and containing “source code”
       instructions written in Fortran 77.
  
!    • Translate the program into instructions a computer can carry out
       more quickly than it takes to translate the original Fortran
       instructions.  The result after compilation of a program is
!      “machine code”, which is efficiently translated and processed by a
       machine such as your computer.  Humans usually are not as good
       writing machine code as they are at writing Fortran (or C++, Ada,
       or Java), because it is easy to make tiny mistakes writing machine
       code.
  
!    • Provide information about the reasons why the compiler may be
       unable to create a binary from the source code, for example if the
       source code is flawed.  The Fortran language standards require that
       the compiler can point out mistakes in your code.  An incorrect
!      usage of the language causes an “error message”.
  
       The compiler also attempts to diagnose cases where your program
       contains a correct usage of the language, but instructs the
       computer to do something questionable.  This kind of diagnostic
!      message is called a “warning message”.
  
!    • Provide optional information about the translation passes from the
       source code to machine code.  This can help you to find the cause
       of certain bugs which may not be obvious in the source code, but
       may be more easily found at a lower level compiler output.  It also
       helps developers to find bugs in the compiler itself.
  
!    • Provide information in the generated machine code that can make it
       easier to find bugs in the program (using a debugging tool, called
!      a “debugger”, such as the GNU Debugger ‘gdb’).
  
!    • Locate and gather machine code already generated to perform actions
       requested by statements in the program.  This machine code is
!      organized into “modules” and is located and “linked” to the user
       program.
  
     The GNU Fortran compiler consists of several components:
  
!    • A version of the ‘gcc’ command (which also might be installed as
!      the system's ‘cc’ command) that also understands and accepts
!      Fortran source code.  The ‘gcc’ command is the “driver” program for
!      all the languages in the GNU Compiler Collection (GCC); With ‘gcc’,
       you can compile the source code of any language for which a front
       end is available in GCC.
  
!    • The ‘gfortran’ command itself, which also might be installed as the
!      system's ‘f95’ command.  ‘gfortran’ is just another driver program,
       but specifically for the Fortran compiler only.  The primary
!      difference between the ‘gcc’ and ‘gfortran’ commands is that the
       latter automatically links the correct libraries to your program.
  
!    • A collection of run-time libraries.  These libraries contain the
       machine code needed to support capabilities of the Fortran language
       that are not directly provided by the machine code generated by the
!      ‘gfortran’ compilation phase, such as intrinsic functions and
       subroutines, and routines for interaction with files and the
       operating system.
  
!    • The Fortran compiler itself, (‘f951’).  This is the GNU Fortran
       parser and code generator, linked to and interfaced with the GCC
!      backend library.  ‘f951’ "translates" the source code to assembler
       code.  You would typically not use this program directly; instead,
!      the ‘gcc’ or ‘gfortran’ driver programs call it for you.
  
  
  File: gfortran.info,  Node: GNU Fortran and GCC,  Next: Standards,  Prev: About GNU Fortran,  Up: Introduction
*************** File: gfortran.info,  Node: GNU Fortran
*** 200,231 ****
  1.2 GNU Fortran and GCC
  =======================
  
! GNU Fortran is a part of GCC, the "GNU Compiler Collection".  GCC
  consists of a collection of front ends for various languages, which
  translate the source code into a language-independent form called
! "GENERIC". This is then processed by a common middle end which provides
  optimization, and then passed to one of a collection of back ends which
  generate code for different computer architectures and operating
  systems.
  
!    Functionally, this is implemented with a driver program ('gcc') which
  provides the command-line interface for the compiler.  It calls the
! relevant compiler front-end program (e.g., 'f951' for Fortran) for each
  file in the source code, and then calls the assembler and linker as
  appropriate to produce the compiled output.  In a copy of GCC that has
! been compiled with Fortran language support enabled, 'gcc' recognizes
! files with '.f', '.for', '.ftn', '.f90', '.f95', '.f03' and '.f08'
  extensions as Fortran source code, and compiles it accordingly.  A
! 'gfortran' driver program is also provided, which is identical to 'gcc'
  except that it automatically links the Fortran runtime libraries into
  the compiled program.
  
!    Source files with '.f', '.for', '.fpp', '.ftn', '.F', '.FOR', '.FPP',
! and '.FTN' extensions are treated as fixed form.  Source files with
! '.f90', '.f95', '.f03', '.f08', '.F90', '.F95', '.F03' and '.F08'
  extensions are treated as free form.  The capitalized versions of either
  form are run through preprocessing.  Source files with the lower case
! '.fpp' extension are also run through preprocessing.
  
     This manual specifically documents the Fortran front end, which
  handles the programming language's syntax and semantics.  The aspects of
--- 200,231 ----
  1.2 GNU Fortran and GCC
  =======================
  
! GNU Fortran is a part of GCC, the “GNU Compiler Collection”.  GCC
  consists of a collection of front ends for various languages, which
  translate the source code into a language-independent form called
! “GENERIC”. This is then processed by a common middle end which provides
  optimization, and then passed to one of a collection of back ends which
  generate code for different computer architectures and operating
  systems.
  
!    Functionally, this is implemented with a driver program (‘gcc’) which
  provides the command-line interface for the compiler.  It calls the
! relevant compiler front-end program (e.g., ‘f951’ for Fortran) for each
  file in the source code, and then calls the assembler and linker as
  appropriate to produce the compiled output.  In a copy of GCC that has
! been compiled with Fortran language support enabled, ‘gcc’ recognizes
! files with ‘.f’, ‘.for’, ‘.ftn’, ‘.f90’, ‘.f95’, ‘.f03’ and ‘.f08’
  extensions as Fortran source code, and compiles it accordingly.  A
! ‘gfortran’ driver program is also provided, which is identical to ‘gcc’
  except that it automatically links the Fortran runtime libraries into
  the compiled program.
  
!    Source files with ‘.f’, ‘.for’, ‘.fpp’, ‘.ftn’, ‘.F’, ‘.FOR’, ‘.FPP’,
! and ‘.FTN’ extensions are treated as fixed form.  Source files with
! ‘.f90’, ‘.f95’, ‘.f03’, ‘.f08’, ‘.F90’, ‘.F95’, ‘.F03’ and ‘.F08’
  extensions are treated as free form.  The capitalized versions of either
  form are run through preprocessing.  Source files with the lower case
! ‘.fpp’ extension are also run through preprocessing.
  
     This manual specifically documents the Fortran front end, which
  handles the programming language's syntax and semantics.  The aspects of
*************** enhancements to allocatable arrays.
*** 264,271 ****
  2003) and ISO/IEC 1539-1:2010 (Fortran 2008).  It has partial support
  for features introduced in ISO/IEC 1539:2018 (Fortran 2018), the most
  recent version of the Fortran language standard, including full support
! for the Technical Specification 'Further Interoperability of Fortran
! with C' (ISO/IEC TS 29113:2012).  More details on support for these
  standards can be found in the following sections of the documentation.
  
     Additionally, the GNU Fortran compilers supports the OpenMP
--- 264,271 ----
  2003) and ISO/IEC 1539-1:2010 (Fortran 2008).  It has partial support
  for features introduced in ISO/IEC 1539:2018 (Fortran 2018), the most
  recent version of the Fortran language standard, including full support
! for the Technical Specification ‘Further Interoperability of Fortran
! with C’ (ISO/IEC TS 29113:2012).  More details on support for these
  standards can be found in the following sections of the documentation.
  
     Additionally, the GNU Fortran compilers supports the OpenMP
*************** for them, which work with GNU Fortran.
*** 288,296 ****
  <http://user.astro.wisc.edu/~townsend/static.php?ref=iso-varying-string>.
  
     Deferred-length character strings of Fortran 2003 supports part of
! the features of 'ISO_VARYING_STRING' and should be considered as
  replacement.  (Namely, allocatable or pointers of the type
! 'character(len=:)'.)
  
     Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
  Conditional Compilation, which is not widely used and not directly
--- 288,296 ----
  <http://user.astro.wisc.edu/~townsend/static.php?ref=iso-varying-string>.
  
     Deferred-length character strings of Fortran 2003 supports part of
! the features of ‘ISO_VARYING_STRING’ and should be considered as
  replacement.  (Namely, allocatable or pointers of the type
! ‘character(len=:)’.)
  
     Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
  Conditional Compilation, which is not widely used and not directly
*************** the wiki (https://gcc.gnu.org/wiki/Fortr
*** 319,329 ****
  information about the current implementation status.  In particular, the
  following are not yet supported:
  
!    * 'DO CONCURRENT' and 'FORALL' do not recognize a type-spec in the
       loop header.
  
!    * The change to permit any constant expression in subscripts and
!      nested implied-do limits in a 'DATA' statement has not been
       implemented.
  
  
--- 319,329 ----
  information about the current implementation status.  In particular, the
  following are not yet supported:
  
!    • ‘DO CONCURRENT’ and ‘FORALL’ do not recognize a type-spec in the
       loop header.
  
!    • The change to permit any constant expression in subscripts and
!      nested implied-do limits in a ‘DATA’ statement has not been
       implemented.
  
  
*************** Fortran 2018 (ISO/IEC 1539:2018) is the
*** 336,370 ****
  Fortran language standard.  GNU Fortran implements some of the new
  features of this standard:
  
!    * All Fortran 2018 features derived from ISO/IEC TS 29113:2012,
       "Further Interoperability of Fortran with C", are supported by GNU
       Fortran.  This includes assumed-type and assumed-rank objects and
!      the 'SELECT RANK' construct as well as the parts relating to
!      'BIND(C)' functions.  See also *note Further Interoperability of
       Fortran with C::.
  
!    * GNU Fortran supports a subset of features derived from ISO/IEC TS
       18508:2015, "Additional Parallel Features in Fortran":
  
!         * The new atomic ADD, CAS, FETCH and ADD/OR/XOR, OR and XOR
            intrinsics.
  
!         * The 'CO_MIN' and 'CO_MAX' and 'SUM' reduction intrinsics, and
!           the 'CO_BROADCAST' and 'CO_REDUCE' intrinsic, except that
            those do not support polymorphic types or types with
            allocatable, pointer or polymorphic components.
  
!         * Events ('EVENT POST', 'EVENT WAIT', 'EVENT_QUERY').
  
!         * Failed images ('FAIL IMAGE', 'IMAGE_STATUS', 'FAILED_IMAGES',
!           'STOPPED_IMAGES').
  
!    * An 'ERROR STOP' statement is permitted in a 'PURE' procedure.
  
!    * GNU Fortran supports the 'IMPLICIT NONE' statement with an
!      'implicit-none-spec-list'.
  
!    * The behavior of the 'INQUIRE' statement with the 'RECL=' specifier
       now conforms to Fortran 2018.
  
  
--- 336,370 ----
  Fortran language standard.  GNU Fortran implements some of the new
  features of this standard:
  
!    • All Fortran 2018 features derived from ISO/IEC TS 29113:2012,
       "Further Interoperability of Fortran with C", are supported by GNU
       Fortran.  This includes assumed-type and assumed-rank objects and
!      the ‘SELECT RANK’ construct as well as the parts relating to
!      ‘BIND(C)’ functions.  See also *note Further Interoperability of
       Fortran with C::.
  
!    • GNU Fortran supports a subset of features derived from ISO/IEC TS
       18508:2015, "Additional Parallel Features in Fortran":
  
!         • The new atomic ADD, CAS, FETCH and ADD/OR/XOR, OR and XOR
            intrinsics.
  
!         • The ‘CO_MIN’ and ‘CO_MAX’ and ‘SUM’ reduction intrinsics, and
!           the ‘CO_BROADCAST’ and ‘CO_REDUCE’ intrinsic, except that
            those do not support polymorphic types or types with
            allocatable, pointer or polymorphic components.
  
!         • Events (‘EVENT POST’, ‘EVENT WAIT’, ‘EVENT_QUERY’).
  
!         • Failed images (‘FAIL IMAGE’, ‘IMAGE_STATUS’, ‘FAILED_IMAGES’,
!           ‘STOPPED_IMAGES’).
  
!    • An ‘ERROR STOP’ statement is permitted in a ‘PURE’ procedure.
  
!    • GNU Fortran supports the ‘IMPLICIT NONE’ statement with an
!      ‘implicit-none-spec-list’.
  
!    • The behavior of the ‘INQUIRE’ statement with the ‘RECL=’ specifier
       now conforms to Fortran 2018.
  
  
*************** File: gfortran.info,  Node: Invoking GNU
*** 373,397 ****
  2 GNU Fortran Command Options
  *****************************
  
! The 'gfortran' command supports all the options supported by the 'gcc'
  command.  Only options specific to GNU Fortran are documented here.
  
     *Note GCC Command Options: (gcc)Invoking GCC, for information on the
! non-Fortran-specific aspects of the 'gcc' command (and, therefore, the
! 'gfortran' command).
  
!    All GCC and GNU Fortran options are accepted both by 'gfortran' and
! by 'gcc' (as well as any other drivers built at the same time, such as
! 'g++'), since adding GNU Fortran to the GCC distribution enables
  acceptance of GNU Fortran options by all of the relevant drivers.
  
     In some cases, options have positive and negative forms; the negative
! form of '-ffoo' would be '-fno-foo'.  This manual documents only one of
  these two forms, whichever one is not the default.
  
  * Menu:
  
! * Option Summary::      Brief list of all 'gfortran' options,
                          without explanations.
  * Fortran Dialect Options::  Controlling the variant of Fortran language
                               compiled.
--- 373,397 ----
  2 GNU Fortran Command Options
  *****************************
  
! The ‘gfortran’ command supports all the options supported by the ‘gcc’
  command.  Only options specific to GNU Fortran are documented here.
  
     *Note GCC Command Options: (gcc)Invoking GCC, for information on the
! non-Fortran-specific aspects of the ‘gcc’ command (and, therefore, the
! ‘gfortran’ command).
  
!    All GCC and GNU Fortran options are accepted both by ‘gfortran’ and
! by ‘gcc’ (as well as any other drivers built at the same time, such as
! ‘g++’), since adding GNU Fortran to the GCC distribution enables
  acceptance of GNU Fortran options by all of the relevant drivers.
  
     In some cases, options have positive and negative forms; the negative
! form of ‘-ffoo’ would be ‘-fno-foo’.  This manual documents only one of
  these two forms, whichever one is not the default.
  
  * Menu:
  
! * Option Summary::      Brief list of all ‘gfortran’ options,
                          without explanations.
  * Fortran Dialect Options::  Controlling the variant of Fortran language
                               compiled.
*************** these two forms, whichever one is not th
*** 406,412 ****
  * Developer Options::   Printing GNU Fortran specific info, debugging dumps.
  * Interoperability Options::  Options for interoperability with other
                                languages.
! * Environment Variables:: Environment variables that affect 'gfortran'.
  
  
  File: gfortran.info,  Node: Option Summary,  Next: Fortran Dialect Options,  Up: Invoking GNU Fortran
--- 406,412 ----
  * Developer Options::   Printing GNU Fortran specific info, debugging dumps.
  * Interoperability Options::  Options for interoperability with other
                                languages.
! * Environment Variables:: Environment variables that affect ‘gfortran’.
  
  
  File: gfortran.info,  Node: Option Summary,  Next: Fortran Dialect Options,  Up: Invoking GNU Fortran
*************** File: gfortran.info,  Node: Fortran Dial
*** 519,717 ****
  The following options control the details of the Fortran dialect
  accepted by the compiler:
  
! '-ffree-form'
! '-ffixed-form'
       Specify the layout used by the source file.  The free form layout
       was introduced in Fortran 90.  Fixed form was traditionally used in
       older Fortran programs.  When neither option is specified, the
       source form is determined by the file extension.
  
! '-fall-intrinsics'
       This option causes all intrinsic procedures (including the
       GNU-specific extensions) to be accepted.  This can be useful with
!      '-std=' to force standard-compliance but get access to the full
!      range of intrinsics available with 'gfortran'.  As a consequence,
!      '-Wintrinsics-std' will be ignored and no user-defined procedure
       with the same name as any intrinsic will be called except when it
!      is explicitly declared 'EXTERNAL'.
  
! '-fallow-argument-mismatch'
       Some code contains calls to external procedures with mismatches
       between the calls and the procedure definition, or with mismatches
       between different calls.  Such code is non-conforming, and will
       usually be flagged with an error.  This options degrades the error
       to a warning, which can only be disabled by disabling all warnings
!      via '-w'.  Only a single occurrence per argument is flagged by this
!      warning.  '-fallow-argument-mismatch' is implied by '-std=legacy'.
  
       Using this option is _strongly_ discouraged.  It is possible to
       provide standard-conforming code which allows different types of
!      arguments by using an explicit interface and 'TYPE(*)'.
  
! '-fallow-invalid-boz'
       A BOZ literal constant can occur in a limited number of contexts in
       standard conforming Fortran.  This option degrades an error
       condition to a warning, and allows a BOZ literal constant to appear
       where the Fortran standard would otherwise prohibit its use.
  
! '-fd-lines-as-code'
! '-fd-lines-as-comments'
!      Enable special treatment for lines beginning with 'd' or 'D' in
!      fixed form sources.  If the '-fd-lines-as-code' option is given
       they are treated as if the first column contained a blank.  If the
!      '-fd-lines-as-comments' option is given, they are treated as
       comment lines.
  
! '-fdec'
       DEC compatibility mode.  Enables extensions and other features that
       mimic the default behavior of older compilers (such as DEC). These
       features are non-standard and should be avoided at all costs.  For
       details on GNU Fortran's implementation of these extensions see the
       full documentation.
  
!      Other flags enabled by this switch are: '-fdollar-ok'
!      '-fcray-pointer' '-fdec-char-conversions' '-fdec-structure'
!      '-fdec-intrinsic-ints' '-fdec-static' '-fdec-math' '-fdec-include'
!      '-fdec-blank-format-item' '-fdec-format-defaults'
  
!      If '-fd-lines-as-code'/'-fd-lines-as-comments' are unset, then
!      '-fdec' also sets '-fd-lines-as-comments'.
  
! '-fdec-char-conversions'
!      Enable the use of character literals in assignments and 'DATA'
       statements for non-character variables.
  
! '-fdec-structure'
!      Enable DEC 'STRUCTURE' and 'RECORD' as well as 'UNION', 'MAP', and
       dot ('.')  as a member separator (in addition to '%').  This is
       provided for compatibility only; Fortran 90 derived types should be
       used instead where possible.
  
! '-fdec-intrinsic-ints'
       Enable B/I/J/K kind variants of existing integer functions (e.g.
       BIAND, IIAND, JIAND, etc...).  For a complete list of intrinsics
       see the full documentation.
  
! '-fdec-math'
       Obsolete flag.  The purpose of this option was to enable legacy
       math intrinsics such as COTAN and degree-valued trigonometric
       functions (e.g.  TAND, ATAND, etc...)  for compatability with older
       code.  This option is no longer operable.  The trigonometric
       functions are now either part of Fortran 2023 or GNU extensions.
  
! '-fdec-static'
       Enable DEC-style STATIC and AUTOMATIC attributes to explicitly
       specify the storage of variables and other objects.
  
! '-fdec-include'
       Enable parsing of INCLUDE as a statement in addition to parsing it
       as INCLUDE line.  When parsed as INCLUDE statement, INCLUDE does
       not have to be on a single line and can use line continuations.
  
! '-fdec-format-defaults'
       Enable format specifiers F, G and I to be used without width
       specifiers, default widths will be used instead.
  
! '-fdec-blank-format-item'
       Enable a blank format item at the end of a format specification
       i.e.  nothing following the final comma.
  
! '-fdollar-ok'
!      Allow '$' as a valid non-first character in a symbol name.  Symbols
!      that start with '$' are rejected since it is unclear which rules to
       apply to implicit typing as different vendors implement different
!      rules.  Using '$' in 'IMPLICIT' statements is also rejected.
  
! '-fbackslash'
       Change the interpretation of backslashes in string literals from a
       single backslash character to "C-style" escape characters.  The
!      following combinations are expanded '\a', '\b', '\f', '\n', '\r',
!      '\t', '\v', '\\', and '\0' to the ASCII characters alert,
       backspace, form feed, newline, carriage return, horizontal tab,
       vertical tab, backslash, and NUL, respectively.  Additionally,
!      '\x'NN, '\u'NNNN and '\U'NNNNNNNN (where each N is a hexadecimal
       digit) are translated into the Unicode characters corresponding to
       the specified code points.  All other combinations of a character
       preceded by \ are unexpanded.
  
! '-fmodule-private'
!      Set the default accessibility of module entities to 'PRIVATE'.
       Use-associated entities will not be accessible unless they are
!      explicitly declared as 'PUBLIC'.
  
! '-ffixed-line-length-N'
       Set column after which characters are ignored in typical fixed-form
!      lines in the source file, and, unless '-fno-pad-source', through
       which spaces are assumed (as if padded to that length) after the
       ends of short fixed-form lines.
  
       Popular values for N include 72 (the standard and the default), 80
       (card image), and 132 (corresponding to "extended-source" options
!      in some popular compilers).  N may also be 'none', meaning that the
       entire line is meaningful and that continued character constants
       never have implicit spaces appended to them to fill out the line.
!      '-ffixed-line-length-0' means the same thing as
!      '-ffixed-line-length-none'.
  
! '-fno-pad-source'
       By default fixed-form lines have spaces assumed (as if padded to
       that length) after the ends of short fixed-form lines.  This is not
!      done either if '-ffixed-line-length-0', '-ffixed-line-length-none'
!      or if '-fno-pad-source' option is used.  With any of those options
       continued character constants never have implicit spaces appended
       to them to fill out the line.
  
! '-ffree-line-length-N'
       Set column after which characters are ignored in typical free-form
       lines in the source file.  The default value is 132.  N may be
!      'none', meaning that the entire line is meaningful.
!      '-ffree-line-length-0' means the same thing as
!      '-ffree-line-length-none'.
  
! '-fmax-identifier-length=N'
       Specify the maximum allowed identifier length.  Typical values are
       31 (Fortran 95) and 63 (Fortran 2003 and later).
  
! '-fimplicit-none'
       Specify that no implicit typing is allowed, unless overridden by
!      explicit 'IMPLICIT' statements.  This is the equivalent of adding
!      'implicit none' to the start of every procedure.
  
! '-fcray-pointer'
       Enable the Cray pointer extension, which provides C-like pointer
       functionality.
  
! '-fopenacc'
!      Enable handling of OpenACC directives '!$acc' in free-form Fortran
!      and '!$acc', 'c$acc' and '*$acc' in fixed-form Fortran.  When
!      '-fopenacc' is specified, the compiler generates accelerated code
       according to the OpenACC Application Programming Interface v2.6
!      <https://www.openacc.org>.  This option implies '-pthread', and
!      thus is only supported on targets that have support for '-pthread'.
!      The option '-fopenacc' implies '-frecursive'.
  
! '-fopenmp'
!      Enable handling of OpenMP directives '!$omp' in Fortran.  It
!      additionally enables the conditional compilation sentinel '!$' in
       Fortran.  In fixed source form Fortran, the sentinels can also
!      start with 'c' or '*'.  When '-fopenmp' is specified, the compiler
       generates parallel code according to the OpenMP Application Program
       Interface v4.5 <https://www.openmp.org>.  This option implies
!      '-pthread', and thus is only supported on targets that have support
!      for '-pthread'.  '-fopenmp' implies '-fopenmp-simd' and
!      '-frecursive'.
  
! '-fopenmp-allocators'
       Enables handling of allocation, reallocation and deallocation of
       Fortran allocatable and pointer variables that are allocated using
!      the '!$omp allocators' and '!$omp allocate' constructs.  Files
       containing either directive have to be compiled with this option in
!      addition to '-fopenmp'.  Additionally, all files that might
       deallocate or reallocate a variable that has been allocated with an
       OpenMP allocator have to be compiled with this option.  This
       includes intrinsic assignment to allocatable variables when
       reallocation may occur and deallocation due to either of the
!      following: end of scope, explicit deallocation, 'intent(out)',
       deallocation of allocatable components etc.  Files not changing the
       allocation status or only for components of a derived type that
       have not been allocated using those two directives do not need to
--- 519,717 ----
  The following options control the details of the Fortran dialect
  accepted by the compiler:
  
! ‘-ffree-form’
! ‘-ffixed-form’
       Specify the layout used by the source file.  The free form layout
       was introduced in Fortran 90.  Fixed form was traditionally used in
       older Fortran programs.  When neither option is specified, the
       source form is determined by the file extension.
  
! ‘-fall-intrinsics’
       This option causes all intrinsic procedures (including the
       GNU-specific extensions) to be accepted.  This can be useful with
!      ‘-std=’ to force standard-compliance but get access to the full
!      range of intrinsics available with ‘gfortran’.  As a consequence,
!      ‘-Wintrinsics-std’ will be ignored and no user-defined procedure
       with the same name as any intrinsic will be called except when it
!      is explicitly declared ‘EXTERNAL’.
  
! ‘-fallow-argument-mismatch’
       Some code contains calls to external procedures with mismatches
       between the calls and the procedure definition, or with mismatches
       between different calls.  Such code is non-conforming, and will
       usually be flagged with an error.  This options degrades the error
       to a warning, which can only be disabled by disabling all warnings
!      via ‘-w’.  Only a single occurrence per argument is flagged by this
!      warning.  ‘-fallow-argument-mismatch’ is implied by ‘-std=legacy’.
  
       Using this option is _strongly_ discouraged.  It is possible to
       provide standard-conforming code which allows different types of
!      arguments by using an explicit interface and ‘TYPE(*)’.
  
! ‘-fallow-invalid-boz’
       A BOZ literal constant can occur in a limited number of contexts in
       standard conforming Fortran.  This option degrades an error
       condition to a warning, and allows a BOZ literal constant to appear
       where the Fortran standard would otherwise prohibit its use.
  
! ‘-fd-lines-as-code’
! ‘-fd-lines-as-comments’
!      Enable special treatment for lines beginning with ‘d’ or ‘D’ in
!      fixed form sources.  If the ‘-fd-lines-as-code’ option is given
       they are treated as if the first column contained a blank.  If the
!      ‘-fd-lines-as-comments’ option is given, they are treated as
       comment lines.
  
! ‘-fdec’
       DEC compatibility mode.  Enables extensions and other features that
       mimic the default behavior of older compilers (such as DEC). These
       features are non-standard and should be avoided at all costs.  For
       details on GNU Fortran's implementation of these extensions see the
       full documentation.
  
!      Other flags enabled by this switch are: ‘-fdollar-ok’
!      ‘-fcray-pointer’ ‘-fdec-char-conversions’ ‘-fdec-structure’
!      ‘-fdec-intrinsic-ints’ ‘-fdec-static’ ‘-fdec-math’ ‘-fdec-include’
!      ‘-fdec-blank-format-item’ ‘-fdec-format-defaults’
  
!      If ‘-fd-lines-as-code’/‘-fd-lines-as-comments’ are unset, then
!      ‘-fdec’ also sets ‘-fd-lines-as-comments’.
  
! ‘-fdec-char-conversions’
!      Enable the use of character literals in assignments and ‘DATA’
       statements for non-character variables.
  
! ‘-fdec-structure’
!      Enable DEC ‘STRUCTURE’ and ‘RECORD’ as well as ‘UNION’, ‘MAP’, and
       dot ('.')  as a member separator (in addition to '%').  This is
       provided for compatibility only; Fortran 90 derived types should be
       used instead where possible.
  
! ‘-fdec-intrinsic-ints’
       Enable B/I/J/K kind variants of existing integer functions (e.g.
       BIAND, IIAND, JIAND, etc...).  For a complete list of intrinsics
       see the full documentation.
  
! ‘-fdec-math’
       Obsolete flag.  The purpose of this option was to enable legacy
       math intrinsics such as COTAN and degree-valued trigonometric
       functions (e.g.  TAND, ATAND, etc...)  for compatability with older
       code.  This option is no longer operable.  The trigonometric
       functions are now either part of Fortran 2023 or GNU extensions.
  
! ‘-fdec-static’
       Enable DEC-style STATIC and AUTOMATIC attributes to explicitly
       specify the storage of variables and other objects.
  
! ‘-fdec-include’
       Enable parsing of INCLUDE as a statement in addition to parsing it
       as INCLUDE line.  When parsed as INCLUDE statement, INCLUDE does
       not have to be on a single line and can use line continuations.
  
! ‘-fdec-format-defaults’
       Enable format specifiers F, G and I to be used without width
       specifiers, default widths will be used instead.
  
! ‘-fdec-blank-format-item’
       Enable a blank format item at the end of a format specification
       i.e.  nothing following the final comma.
  
! ‘-fdollar-ok’
!      Allow ‘$’ as a valid non-first character in a symbol name.  Symbols
!      that start with ‘$’ are rejected since it is unclear which rules to
       apply to implicit typing as different vendors implement different
!      rules.  Using ‘$’ in ‘IMPLICIT’ statements is also rejected.
  
! ‘-fbackslash’
       Change the interpretation of backslashes in string literals from a
       single backslash character to "C-style" escape characters.  The
!      following combinations are expanded ‘\a’, ‘\b’, ‘\f’, ‘\n’, ‘\r’,
!      ‘\t’, ‘\v’, ‘\\’, and ‘\0’ to the ASCII characters alert,
       backspace, form feed, newline, carriage return, horizontal tab,
       vertical tab, backslash, and NUL, respectively.  Additionally,
!      ‘\x’NN, ‘\u’NNNN and ‘\U’NNNNNNNN (where each N is a hexadecimal
       digit) are translated into the Unicode characters corresponding to
       the specified code points.  All other combinations of a character
       preceded by \ are unexpanded.
  
! ‘-fmodule-private’
!      Set the default accessibility of module entities to ‘PRIVATE’.
       Use-associated entities will not be accessible unless they are
!      explicitly declared as ‘PUBLIC’.
  
! ‘-ffixed-line-length-N’
       Set column after which characters are ignored in typical fixed-form
!      lines in the source file, and, unless ‘-fno-pad-source’, through
       which spaces are assumed (as if padded to that length) after the
       ends of short fixed-form lines.
  
       Popular values for N include 72 (the standard and the default), 80
       (card image), and 132 (corresponding to "extended-source" options
!      in some popular compilers).  N may also be ‘none’, meaning that the
       entire line is meaningful and that continued character constants
       never have implicit spaces appended to them to fill out the line.
!      ‘-ffixed-line-length-0’ means the same thing as
!      ‘-ffixed-line-length-none’.
  
! ‘-fno-pad-source’
       By default fixed-form lines have spaces assumed (as if padded to
       that length) after the ends of short fixed-form lines.  This is not
!      done either if ‘-ffixed-line-length-0’, ‘-ffixed-line-length-none’
!      or if ‘-fno-pad-source’ option is used.  With any of those options
       continued character constants never have implicit spaces appended
       to them to fill out the line.
  
! ‘-ffree-line-length-N’
       Set column after which characters are ignored in typical free-form
       lines in the source file.  The default value is 132.  N may be
!      ‘none’, meaning that the entire line is meaningful.
!      ‘-ffree-line-length-0’ means the same thing as
!      ‘-ffree-line-length-none’.
  
! ‘-fmax-identifier-length=N’
       Specify the maximum allowed identifier length.  Typical values are
       31 (Fortran 95) and 63 (Fortran 2003 and later).
  
! ‘-fimplicit-none’
       Specify that no implicit typing is allowed, unless overridden by
!      explicit ‘IMPLICIT’ statements.  This is the equivalent of adding
!      ‘implicit none’ to the start of every procedure.
  
! ‘-fcray-pointer’
       Enable the Cray pointer extension, which provides C-like pointer
       functionality.
  
! ‘-fopenacc’
!      Enable handling of OpenACC directives ‘!$acc’ in free-form Fortran
!      and ‘!$acc’, ‘c$acc’ and ‘*$acc’ in fixed-form Fortran.  When
!      ‘-fopenacc’ is specified, the compiler generates accelerated code
       according to the OpenACC Application Programming Interface v2.6
!      <https://www.openacc.org>.  This option implies ‘-pthread’, and
!      thus is only supported on targets that have support for ‘-pthread’.
!      The option ‘-fopenacc’ implies ‘-frecursive’.
  
! ‘-fopenmp’
!      Enable handling of OpenMP directives ‘!$omp’ in Fortran.  It
!      additionally enables the conditional compilation sentinel ‘!$’ in
       Fortran.  In fixed source form Fortran, the sentinels can also
!      start with ‘c’ or ‘*’.  When ‘-fopenmp’ is specified, the compiler
       generates parallel code according to the OpenMP Application Program
       Interface v4.5 <https://www.openmp.org>.  This option implies
!      ‘-pthread’, and thus is only supported on targets that have support
!      for ‘-pthread’.  ‘-fopenmp’ implies ‘-fopenmp-simd’ and
!      ‘-frecursive’.
  
! ‘-fopenmp-allocators’
       Enables handling of allocation, reallocation and deallocation of
       Fortran allocatable and pointer variables that are allocated using
!      the ‘!$omp allocators’ and ‘!$omp allocate’ constructs.  Files
       containing either directive have to be compiled with this option in
!      addition to ‘-fopenmp’.  Additionally, all files that might
       deallocate or reallocate a variable that has been allocated with an
       OpenMP allocator have to be compiled with this option.  This
       includes intrinsic assignment to allocatable variables when
       reallocation may occur and deallocation due to either of the
!      following: end of scope, explicit deallocation, ‘intent(out)’,
       deallocation of allocatable components etc.  Files not changing the
       allocation status or only for components of a derived type that
       have not been allocated using those two directives do not need to
*************** accepted by the compiler:
*** 719,849 ****
       variables after they have been deallocated or allocated by the
       normal Fortran allocator.
  
! '-fopenmp-simd'
!      Enable handling of OpenMP's 'simd', 'declare simd', 'declare
!      reduction', 'assume', 'ordered', 'scan' and 'loop' directive, and
!      of combined or composite directives with 'simd' as constituent with
!      '!$omp' in Fortran.  It additionally enables the conditional
!      compilation sentinel '!$' in Fortran.  In fixed source form
!      Fortran, the sentinels can also start with 'c' or '*'.  Other
!      OpenMP directives are ignored.  Unless '-fopenmp' is additionally
!      specified, the 'loop' region binds to the current task region,
!      independent of the specified 'bind' clause.
  
! '-fno-range-check'
       Disable range checking on results of simplification of constant
       expressions during compilation.  For example, GNU Fortran will give
!      an error at compile time when simplifying 'a = 1. / 0'.  With this
!      option, no error will be given and 'a' will be assigned the value
!      '+Infinity'.  If an expression evaluates to a value outside of the
!      relevant range of ['-HUGE()':'HUGE()'], then the expression will be
!      replaced by '-Inf' or '+Inf' as appropriate.  Similarly, 'DATA
!      i/Z'FFFFFFFF'/' will result in an integer overflow on most systems,
!      but with '-fno-range-check' the value will "wrap around" and 'i'
       will be initialized to -1 instead.
  
! '-fdefault-integer-8'
       Set the default integer and logical types to an 8 byte wide type.
!      This option also affects the kind of integer constants like '42'.
!      Unlike '-finteger-4-integer-8', it does not promote variables with
       explicit kind declaration.
  
! '-fdefault-real-8'
       Set the default real type to an 8 byte wide type.  This option also
!      affects the kind of non-double real constants like '1.0'.  This
!      option promotes the default width of 'DOUBLE PRECISION' and double
!      real constants like '1.d0' to 16 bytes if possible.  If
!      '-fdefault-double-8' is given along with 'fdefault-real-8', 'DOUBLE
!      PRECISION' and double real constants are not promoted.  Unlike
!      '-freal-4-real-8', 'fdefault-real-8' does not promote variables
       with explicit kind declarations.
  
! '-fdefault-real-10'
       Set the default real type to an 10 byte wide type.  This option
!      also affects the kind of non-double real constants like '1.0'.
!      This option promotes the default width of 'DOUBLE PRECISION' and
!      double real constants like '1.d0' to 16 bytes if possible.  If
!      '-fdefault-double-8' is given along with 'fdefault-real-10',
!      'DOUBLE PRECISION' and double real constants are not promoted.
!      Unlike '-freal-4-real-10', 'fdefault-real-10' does not promote
       variables with explicit kind declarations.
  
! '-fdefault-real-16'
       Set the default real type to an 16 byte wide type.  This option
!      also affects the kind of non-double real constants like '1.0'.
!      This option promotes the default width of 'DOUBLE PRECISION' and
!      double real constants like '1.d0' to 16 bytes if possible.  If
!      '-fdefault-double-8' is given along with 'fdefault-real-16',
!      'DOUBLE PRECISION' and double real constants are not promoted.
!      Unlike '-freal-4-real-16', 'fdefault-real-16' does not promote
       variables with explicit kind declarations.
  
! '-fdefault-double-8'
!      Set the 'DOUBLE PRECISION' type and double real constants like
!      '1.d0' to an 8 byte wide type.  Do nothing if this is already the
!      default.  This option prevents '-fdefault-real-8',
!      '-fdefault-real-10', and '-fdefault-real-16', from promoting
!      'DOUBLE PRECISION' and double real constants like '1.d0' to 16
       bytes.
  
! '-finteger-4-integer-8'
!      Promote all 'INTEGER(KIND=4)' entities to an 'INTEGER(KIND=8)'
!      entities.  If 'KIND=8' is unavailable, then an error will be
       issued.  This option should be used with care and may not be
       suitable for your codes.  Areas of possible concern include calls
!      to external procedures, alignment in 'EQUIVALENCE' and/or 'COMMON',
       generic interfaces, BOZ literal constant conversion, and I/O.
       Inspection of the intermediate representation of the translated
!      Fortran code, produced by '-fdump-tree-original', is suggested.
  
! '-freal-4-real-8'
! '-freal-4-real-10'
! '-freal-4-real-16'
! '-freal-8-real-4'
! '-freal-8-real-10'
! '-freal-8-real-16'
!      Promote all 'REAL(KIND=M)' entities to 'REAL(KIND=N)' entities.  If
!      'REAL(KIND=N)' is unavailable, then an error will be issued.  The
!      '-freal-4-' flags also affect the default real kind and the
!      '-freal-8-' flags also the double-precision real kind.  All other
       real-kind types are unaffected by this option.  The promotion is
       also applied to real literal constants of default and
       double-precision kind and a specified kind number of 4 or 8,
!      respectively.  However, '-fdefault-real-8', '-fdefault-real-10',
!      '-fdefault-real-10', and '-fdefault-double-8' take precedence for
       the default and double-precision real kinds, both for real literal
       constants and for declarations without a kind number.  Note that
!      for 'REAL(KIND=KIND(1.0))' the literal may get promoted and then
       the result may get promoted again.  These options should be used
       with care and may not be suitable for your codes.  Areas of
       possible concern include calls to external procedures, alignment in
!      'EQUIVALENCE' and/or 'COMMON', generic interfaces, BOZ literal
       constant conversion, and I/O and calls to intrinsic procedures when
!      passing a value to the 'kind=' dummy argument.  Inspection of the
       intermediate representation of the translated Fortran code,
!      produced by '-fdump-fortran-original' or '-fdump-tree-original', is
       suggested.
  
! '-std=STD'
       Specify the standard to which the program is expected to conform,
!      which may be one of 'f95', 'f2003', 'f2008', 'f2018', 'f2023',
!      'gnu', or 'legacy'.  The default value for STD is 'gnu', which
       specifies a superset of the latest Fortran standard that includes
       all of the extensions supported by GNU Fortran, although warnings
       will be given for obsolete extensions not recommended for use in
!      new code.  The 'legacy' value is equivalent but without the
       warnings for obsolete extensions, and may be useful for old
!      non-standard programs.  The 'f95', 'f2003', 'f2008', 'f2018', and
!      'f2023' values specify strict conformance to the Fortran 95,
       Fortran 2003, Fortran 2008, Fortran 2018 and Fortran 2023
       standards, respectively; errors are given for all extensions beyond
       the relevant language standard, and warnings are given for the
       Fortran 77 features that are permitted but obsolescent in later
!      standards.  The deprecated option '-std=f2008ts' acts as an alias
!      for '-std=f2018'.  It is only present for backwards compatibility
       with earlier gfortran versions and should not be used any more.
  
! '-ftest-forall-temp'
       Enhance test coverage by forcing most forall assignments to use
       temporary.
  
--- 719,849 ----
       variables after they have been deallocated or allocated by the
       normal Fortran allocator.
  
! ‘-fopenmp-simd’
!      Enable handling of OpenMP's ‘simd’, ‘declare simd’, ‘declare
!      reduction’, ‘assume’, ‘ordered’, ‘scan’ and ‘loop’ directive, and
!      of combined or composite directives with ‘simd’ as constituent with
!      ‘!$omp’ in Fortran.  It additionally enables the conditional
!      compilation sentinel ‘!$’ in Fortran.  In fixed source form
!      Fortran, the sentinels can also start with ‘c’ or ‘*’.  Other
!      OpenMP directives are ignored.  Unless ‘-fopenmp’ is additionally
!      specified, the ‘loop’ region binds to the current task region,
!      independent of the specified ‘bind’ clause.
  
! ‘-fno-range-check’
       Disable range checking on results of simplification of constant
       expressions during compilation.  For example, GNU Fortran will give
!      an error at compile time when simplifying ‘a = 1. / 0’.  With this
!      option, no error will be given and ‘a’ will be assigned the value
!      ‘+Infinity’.  If an expression evaluates to a value outside of the
!      relevant range of [‘-HUGE()’:‘HUGE()’], then the expression will be
!      replaced by ‘-Inf’ or ‘+Inf’ as appropriate.  Similarly, ‘DATA
!      i/Z'FFFFFFFF'/’ will result in an integer overflow on most systems,
!      but with ‘-fno-range-check’ the value will "wrap around" and ‘i’
       will be initialized to -1 instead.
  
! ‘-fdefault-integer-8’
       Set the default integer and logical types to an 8 byte wide type.
!      This option also affects the kind of integer constants like ‘42’.
!      Unlike ‘-finteger-4-integer-8’, it does not promote variables with
       explicit kind declaration.
  
! ‘-fdefault-real-8’
       Set the default real type to an 8 byte wide type.  This option also
!      affects the kind of non-double real constants like ‘1.0’.  This
!      option promotes the default width of ‘DOUBLE PRECISION’ and double
!      real constants like ‘1.d0’ to 16 bytes if possible.  If
!      ‘-fdefault-double-8’ is given along with ‘fdefault-real-8’, ‘DOUBLE
!      PRECISION’ and double real constants are not promoted.  Unlike
!      ‘-freal-4-real-8’, ‘fdefault-real-8’ does not promote variables
       with explicit kind declarations.
  
! ‘-fdefault-real-10’
       Set the default real type to an 10 byte wide type.  This option
!      also affects the kind of non-double real constants like ‘1.0’.
!      This option promotes the default width of ‘DOUBLE PRECISION’ and
!      double real constants like ‘1.d0’ to 16 bytes if possible.  If
!      ‘-fdefault-double-8’ is given along with ‘fdefault-real-10’,
!      ‘DOUBLE PRECISION’ and double real constants are not promoted.
!      Unlike ‘-freal-4-real-10’, ‘fdefault-real-10’ does not promote
       variables with explicit kind declarations.
  
! ‘-fdefault-real-16’
       Set the default real type to an 16 byte wide type.  This option
!      also affects the kind of non-double real constants like ‘1.0’.
!      This option promotes the default width of ‘DOUBLE PRECISION’ and
!      double real constants like ‘1.d0’ to 16 bytes if possible.  If
!      ‘-fdefault-double-8’ is given along with ‘fdefault-real-16’,
!      ‘DOUBLE PRECISION’ and double real constants are not promoted.
!      Unlike ‘-freal-4-real-16’, ‘fdefault-real-16’ does not promote
       variables with explicit kind declarations.
  
! ‘-fdefault-double-8’
!      Set the ‘DOUBLE PRECISION’ type and double real constants like
!      ‘1.d0’ to an 8 byte wide type.  Do nothing if this is already the
!      default.  This option prevents ‘-fdefault-real-8’,
!      ‘-fdefault-real-10’, and ‘-fdefault-real-16’, from promoting
!      ‘DOUBLE PRECISION’ and double real constants like ‘1.d0’ to 16
       bytes.
  
! ‘-finteger-4-integer-8’
!      Promote all ‘INTEGER(KIND=4)’ entities to an ‘INTEGER(KIND=8)’
!      entities.  If ‘KIND=8’ is unavailable, then an error will be
       issued.  This option should be used with care and may not be
       suitable for your codes.  Areas of possible concern include calls
!      to external procedures, alignment in ‘EQUIVALENCE’ and/or ‘COMMON’,
       generic interfaces, BOZ literal constant conversion, and I/O.
       Inspection of the intermediate representation of the translated
!      Fortran code, produced by ‘-fdump-tree-original’, is suggested.
  
! ‘-freal-4-real-8’
! ‘-freal-4-real-10’
! ‘-freal-4-real-16’
! ‘-freal-8-real-4’
! ‘-freal-8-real-10’
! ‘-freal-8-real-16’
!      Promote all ‘REAL(KIND=M)’ entities to ‘REAL(KIND=N)’ entities.  If
!      ‘REAL(KIND=N)’ is unavailable, then an error will be issued.  The
!      ‘-freal-4-’ flags also affect the default real kind and the
!      ‘-freal-8-’ flags also the double-precision real kind.  All other
       real-kind types are unaffected by this option.  The promotion is
       also applied to real literal constants of default and
       double-precision kind and a specified kind number of 4 or 8,
!      respectively.  However, ‘-fdefault-real-8’, ‘-fdefault-real-10’,
!      ‘-fdefault-real-10’, and ‘-fdefault-double-8’ take precedence for
       the default and double-precision real kinds, both for real literal
       constants and for declarations without a kind number.  Note that
!      for ‘REAL(KIND=KIND(1.0))’ the literal may get promoted and then
       the result may get promoted again.  These options should be used
       with care and may not be suitable for your codes.  Areas of
       possible concern include calls to external procedures, alignment in
!      ‘EQUIVALENCE’ and/or ‘COMMON’, generic interfaces, BOZ literal
       constant conversion, and I/O and calls to intrinsic procedures when
!      passing a value to the ‘kind=’ dummy argument.  Inspection of the
       intermediate representation of the translated Fortran code,
!      produced by ‘-fdump-fortran-original’ or ‘-fdump-tree-original’, is
       suggested.
  
! ‘-std=STD’
       Specify the standard to which the program is expected to conform,
!      which may be one of ‘f95’, ‘f2003’, ‘f2008’, ‘f2018’, ‘f2023’,
!      ‘gnu’, or ‘legacy’.  The default value for STD is ‘gnu’, which
       specifies a superset of the latest Fortran standard that includes
       all of the extensions supported by GNU Fortran, although warnings
       will be given for obsolete extensions not recommended for use in
!      new code.  The ‘legacy’ value is equivalent but without the
       warnings for obsolete extensions, and may be useful for old
!      non-standard programs.  The ‘f95’, ‘f2003’, ‘f2008’, ‘f2018’, and
!      ‘f2023’ values specify strict conformance to the Fortran 95,
       Fortran 2003, Fortran 2008, Fortran 2018 and Fortran 2023
       standards, respectively; errors are given for all extensions beyond
       the relevant language standard, and warnings are given for the
       Fortran 77 features that are permitted but obsolescent in later
!      standards.  The deprecated option ‘-std=f2008ts’ acts as an alias
!      for ‘-std=f2018’.  It is only present for backwards compatibility
       with earlier gfortran versions and should not be used any more.
  
! ‘-ftest-forall-temp’
       Enhance test coverage by forcing most forall assignments to use
       temporary.
  
*************** code through a C preprocessor (CPP; some
*** 858,885 ****
  preprocessor, FPP) to allow for conditional compilation.  In the case of
  GNU Fortran, this is the GNU C Preprocessor in the traditional mode.  On
  systems with case-preserving file names, the preprocessor is
! automatically invoked if the filename extension is '.F', '.FOR', '.FTN',
! '.fpp', '.FPP', '.F90', '.F95', '.F03' or '.F08'.  To manually invoke
! the preprocessor on any file, use '-cpp', to disable preprocessing on
! files where the preprocessor is run automatically, use '-nocpp'.
  
     If a preprocessed file includes another file with the Fortran
! 'INCLUDE' statement, the included file is not preprocessed.  To
  preprocess included files, use the equivalent preprocessor statement
! '#include'.
  
!    If GNU Fortran invokes the preprocessor, '__GFORTRAN__' is defined.
! The macros '__GNUC__', '__GNUC_MINOR__' and '__GNUC_PATCHLEVEL__' can be
  used to determine the version of the compiler.  See *note Overview:
  (cpp)Top. for details.
  
!    GNU Fortran supports a number of 'INTEGER' and 'REAL' kind types in
  additional to the kind types required by the Fortran standard.  The
  availability of any given kind type is architecture dependent.  The
  following pre-defined preprocessor macros can be used to conditionally
! include code for these additional kind types: '__GFC_INT_1__',
! '__GFC_INT_2__', '__GFC_INT_8__', '__GFC_INT_16__', '__GFC_REAL_10__',
! and '__GFC_REAL_16__'.
  
     While CPP is the de-facto standard for preprocessing Fortran code,
  Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
--- 858,885 ----
  preprocessor, FPP) to allow for conditional compilation.  In the case of
  GNU Fortran, this is the GNU C Preprocessor in the traditional mode.  On
  systems with case-preserving file names, the preprocessor is
! automatically invoked if the filename extension is ‘.F’, ‘.FOR’, ‘.FTN’,
! ‘.fpp’, ‘.FPP’, ‘.F90’, ‘.F95’, ‘.F03’ or ‘.F08’.  To manually invoke
! the preprocessor on any file, use ‘-cpp’, to disable preprocessing on
! files where the preprocessor is run automatically, use ‘-nocpp’.
  
     If a preprocessed file includes another file with the Fortran
! ‘INCLUDE’ statement, the included file is not preprocessed.  To
  preprocess included files, use the equivalent preprocessor statement
! ‘#include’.
  
!    If GNU Fortran invokes the preprocessor, ‘__GFORTRAN__’ is defined.
! The macros ‘__GNUC__’, ‘__GNUC_MINOR__’ and ‘__GNUC_PATCHLEVEL__’ can be
  used to determine the version of the compiler.  See *note Overview:
  (cpp)Top. for details.
  
!    GNU Fortran supports a number of ‘INTEGER’ and ‘REAL’ kind types in
  additional to the kind types required by the Fortran standard.  The
  availability of any given kind type is architecture dependent.  The
  following pre-defined preprocessor macros can be used to conditionally
! include code for these additional kind types: ‘__GFC_INT_1__’,
! ‘__GFC_INT_2__’, ‘__GFC_INT_8__’, ‘__GFC_INT_16__’, ‘__GFC_REAL_10__’,
! and ‘__GFC_REAL_16__’.
  
     While CPP is the de-facto standard for preprocessing Fortran code,
  Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
*************** preprocess such files (<http://www.danie
*** 889,939 ****
  
     The following options control preprocessing of Fortran code:
  
! '-cpp'
! '-nocpp'
       Enable preprocessing.  The preprocessor is automatically invoked if
!      the file extension is '.fpp', '.FPP', '.F', '.FOR', '.FTN', '.F90',
!      '.F95', '.F03' or '.F08'.  Use this option to manually enable
       preprocessing of any kind of Fortran file.
  
       To disable preprocessing of files with any of the above listed
!      extensions, use the negative form: '-nocpp'.
  
       The preprocessor is run in traditional mode.  Any restrictions of
       the file-format, especially the limits on line length, apply for
       preprocessed output as well, so it might be advisable to use the
!      '-ffree-line-length-none' or '-ffixed-line-length-none' options.
  
! '-dM'
!      Instead of the normal output, generate a list of ''#define''
       directives for all the macros defined during the execution of the
       preprocessor, including predefined macros.  This gives you a way of
       finding out what is predefined in your version of the preprocessor.
!      Assuming you have no file 'foo.f90', the command
              touch foo.f90; gfortran -cpp -E -dM foo.f90
       will show all the predefined macros.
  
! '-dD'
!      Like '-dM' except in two respects: it does not include the
!      predefined macros, and it outputs both the '#define' directives and
       the result of preprocessing.  Both kinds of output go to the
       standard output file.
  
! '-dN'
!      Like '-dD', but emit only the macro names, not their expansions.
  
! '-dU'
!      Like 'dD' except that only macros that are expanded, or whose
       definedness is tested in preprocessor directives, are output; the
       output is delayed until the use or test of the macro; and
!      ''#undef'' directives are also output for macros tested but
       undefined at the time.
  
! '-dI'
!      Output ''#include'' directives in addition to the result of
       preprocessing.
  
! '-fworking-directory'
       Enable generation of linemarkers in the preprocessor output that
       will let the compiler know the current working directory at the
       time of preprocessing.  When this option is enabled, the
--- 889,939 ----
  
     The following options control preprocessing of Fortran code:
  
! ‘-cpp’
! ‘-nocpp’
       Enable preprocessing.  The preprocessor is automatically invoked if
!      the file extension is ‘.fpp’, ‘.FPP’, ‘.F’, ‘.FOR’, ‘.FTN’, ‘.F90’,
!      ‘.F95’, ‘.F03’ or ‘.F08’.  Use this option to manually enable
       preprocessing of any kind of Fortran file.
  
       To disable preprocessing of files with any of the above listed
!      extensions, use the negative form: ‘-nocpp’.
  
       The preprocessor is run in traditional mode.  Any restrictions of
       the file-format, especially the limits on line length, apply for
       preprocessed output as well, so it might be advisable to use the
!      ‘-ffree-line-length-none’ or ‘-ffixed-line-length-none’ options.
  
! ‘-dM’
!      Instead of the normal output, generate a list of ‘'#define'’
       directives for all the macros defined during the execution of the
       preprocessor, including predefined macros.  This gives you a way of
       finding out what is predefined in your version of the preprocessor.
!      Assuming you have no file ‘foo.f90’, the command
              touch foo.f90; gfortran -cpp -E -dM foo.f90
       will show all the predefined macros.
  
! ‘-dD’
!      Like ‘-dM’ except in two respects: it does not include the
!      predefined macros, and it outputs both the ‘#define’ directives and
       the result of preprocessing.  Both kinds of output go to the
       standard output file.
  
! ‘-dN’
!      Like ‘-dD’, but emit only the macro names, not their expansions.
  
! ‘-dU’
!      Like ‘dD’ except that only macros that are expanded, or whose
       definedness is tested in preprocessor directives, are output; the
       output is delayed until the use or test of the macro; and
!      ‘'#undef'’ directives are also output for macros tested but
       undefined at the time.
  
! ‘-dI’
!      Output ‘'#include'’ directives in addition to the result of
       preprocessing.
  
! ‘-fworking-directory’
       Enable generation of linemarkers in the preprocessor output that
       will let the compiler know the current working directory at the
       time of preprocessing.  When this option is enabled, the
*************** preprocess such files (<http://www.danie
*** 943,1040 ****
       preprocessed input, as the directory emitted as the current working
       directory in some debugging information formats.  This option is
       implicitly enabled if debugging information is enabled, but this
!      can be inhibited with the negated form '-fno-working-directory'.
!      If the '-P' flag is present in the command line, this option has no
!      effect, since no '#line' directives are emitted whatsoever.
  
! '-idirafter DIR'
       Search DIR for include files, but do it after all directories
!      specified with '-I' and the standard system directories have been
       exhausted.  DIR is treated as a system include directory.  If dir
!      begins with '=', then the '=' will be replaced by the sysroot
!      prefix; see '--sysroot' and '-isysroot'.
  
! '-imultilib DIR'
       Use DIR as a subdirectory of the directory containing
       target-specific C++ headers.
  
! '-iprefix PREFIX'
!      Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
       If the PREFIX represents a directory, you should include the final
!      ''/''.
  
! '-isysroot DIR'
!      This option is like the '--sysroot' option, but applies only to
!      header files.  See the '--sysroot' option for more information.
  
! '-iquote DIR'
!      Search DIR only for header files requested with '#include "file"';
!      they are not searched for '#include <file>', before all directories
!      specified by '-I' and before the standard system directories.  If
!      DIR begins with '=', then the '=' will be replaced by the sysroot
!      prefix; see '--sysroot' and '-isysroot'.
  
! '-isystem DIR'
       Search DIR for header files, after all directories specified by
!      '-I' but before the standard system directories.  Mark it as a
       system directory, so that it gets the same special treatment as is
       applied to the standard system directories.  If DIR begins with
!      '=', then the '=' will be replaced by the sysroot prefix; see
!      '--sysroot' and '-isysroot'.
  
! '-nostdinc'
       Do not search the standard system directories for header files.
!      Only the directories you have specified with '-I' options (and the
       directory of the current file, if appropriate) are searched.
  
! '-undef'
       Do not predefine any system-specific or GCC-specific macros.  The
       standard predefined macros remain defined.
  
! '-APREDICATE=ANSWER'
       Make an assertion with the predicate PREDICATE and answer ANSWER.
       This form is preferred to the older form -A predicate(answer),
       which is still supported, because it does not use shell special
       characters.
  
! '-A-PREDICATE=ANSWER'
       Cancel an assertion with the predicate PREDICATE and answer ANSWER.
  
! '-C'
       Do not discard comments.  All comments are passed through to the
       output file, except for comments in processed directives, which are
       deleted along with the directive.
  
!      You should be prepared for side effects when using '-C'; it causes
       the preprocessor to treat comments as tokens in their own right.
       For example, comments appearing at the start of what would be a
       directive line have the effect of turning that line into an
       ordinary source line, since the first token on the line is no
!      longer a ''#''.
  
       Warning: this currently handles C-Style comments only.  The
       preprocessor does not yet recognize Fortran-style comments.
  
! '-CC'
       Do not discard comments, including during macro expansion.  This is
!      like '-C', except that comments contained within macros are also
       passed through to the output file where the macro is expanded.
  
!      In addition to the side-effects of the '-C' option, the '-CC'
       option causes all C++-style comments inside a macro to be converted
       to C-style comments.  This is to prevent later use of that macro
       from inadvertently commenting out the remainder of the source line.
!      The '-CC' option is generally used to support lint comments.
  
       Warning: this currently handles C- and C++-Style comments only.
       The preprocessor does not yet recognize Fortran-style comments.
  
! '-DNAME'
!      Predefine name as a macro, with definition '1'.
  
! '-DNAME=DEFINITION'
       The contents of DEFINITION are tokenized and processed as if they
!      appeared during translation phase three in a ''#define'' directive.
       In particular, the definition will be truncated by embedded newline
       characters.
  
--- 943,1040 ----
       preprocessed input, as the directory emitted as the current working
       directory in some debugging information formats.  This option is
       implicitly enabled if debugging information is enabled, but this
!      can be inhibited with the negated form ‘-fno-working-directory’.
!      If the ‘-P’ flag is present in the command line, this option has no
!      effect, since no ‘#line’ directives are emitted whatsoever.
  
! ‘-idirafter DIR’
       Search DIR for include files, but do it after all directories
!      specified with ‘-I’ and the standard system directories have been
       exhausted.  DIR is treated as a system include directory.  If dir
!      begins with ‘=’, then the ‘=’ will be replaced by the sysroot
!      prefix; see ‘--sysroot’ and ‘-isysroot’.
  
! ‘-imultilib DIR’
       Use DIR as a subdirectory of the directory containing
       target-specific C++ headers.
  
! ‘-iprefix PREFIX’
!      Specify PREFIX as the prefix for subsequent ‘-iwithprefix’ options.
       If the PREFIX represents a directory, you should include the final
!      ‘'/'’.
  
! ‘-isysroot DIR’
!      This option is like the ‘--sysroot’ option, but applies only to
!      header files.  See the ‘--sysroot’ option for more information.
  
! ‘-iquote DIR’
!      Search DIR only for header files requested with ‘#include "file"’;
!      they are not searched for ‘#include <file>’, before all directories
!      specified by ‘-I’ and before the standard system directories.  If
!      DIR begins with ‘=’, then the ‘=’ will be replaced by the sysroot
!      prefix; see ‘--sysroot’ and ‘-isysroot’.
  
! ‘-isystem DIR’
       Search DIR for header files, after all directories specified by
!      ‘-I’ but before the standard system directories.  Mark it as a
       system directory, so that it gets the same special treatment as is
       applied to the standard system directories.  If DIR begins with
!      ‘=’, then the ‘=’ will be replaced by the sysroot prefix; see
!      ‘--sysroot’ and ‘-isysroot’.
  
! ‘-nostdinc’
       Do not search the standard system directories for header files.
!      Only the directories you have specified with ‘-I’ options (and the
       directory of the current file, if appropriate) are searched.
  
! ‘-undef’
       Do not predefine any system-specific or GCC-specific macros.  The
       standard predefined macros remain defined.
  
! ‘-APREDICATE=ANSWER’
       Make an assertion with the predicate PREDICATE and answer ANSWER.
       This form is preferred to the older form -A predicate(answer),
       which is still supported, because it does not use shell special
       characters.
  
! ‘-A-PREDICATE=ANSWER’
       Cancel an assertion with the predicate PREDICATE and answer ANSWER.
  
! ‘-C’
       Do not discard comments.  All comments are passed through to the
       output file, except for comments in processed directives, which are
       deleted along with the directive.
  
!      You should be prepared for side effects when using ‘-C’; it causes
       the preprocessor to treat comments as tokens in their own right.
       For example, comments appearing at the start of what would be a
       directive line have the effect of turning that line into an
       ordinary source line, since the first token on the line is no
!      longer a ‘'#'’.
  
       Warning: this currently handles C-Style comments only.  The
       preprocessor does not yet recognize Fortran-style comments.
  
! ‘-CC’
       Do not discard comments, including during macro expansion.  This is
!      like ‘-C’, except that comments contained within macros are also
       passed through to the output file where the macro is expanded.
  
!      In addition to the side-effects of the ‘-C’ option, the ‘-CC’
       option causes all C++-style comments inside a macro to be converted
       to C-style comments.  This is to prevent later use of that macro
       from inadvertently commenting out the remainder of the source line.
!      The ‘-CC’ option is generally used to support lint comments.
  
       Warning: this currently handles C- and C++-Style comments only.
       The preprocessor does not yet recognize Fortran-style comments.
  
! ‘-DNAME’
!      Predefine name as a macro, with definition ‘1’.
  
! ‘-DNAME=DEFINITION’
       The contents of DEFINITION are tokenized and processed as if they
!      appeared during translation phase three in a ‘'#define'’ directive.
       In particular, the definition will be truncated by embedded newline
       characters.
  
*************** preprocess such files (<http://www.danie
*** 1046,1071 ****
       write its argument list with surrounding parentheses before the
       equals sign (if any).  Parentheses are meaningful to most shells,
       so you will need to quote the option.  With sh and csh,
!      '-D'name(args...)=definition'' works.
  
!      '-D' and '-U' options are processed in the order they are given on
       the command line.  All -imacros file and -include file options are
       processed after all -D and -U options.
  
! '-H'
       Print the name of each header file used, in addition to other
       normal activities.  Each name is indented to show how deep in the
!      ''#include'' stack it is.
  
! '-P'
       Inhibit generation of linemarkers in the output from the
       preprocessor.  This might be useful when running the preprocessor
       on something that is not C code, and will be sent to a program
       which might be confused by the linemarkers.
  
! '-UNAME'
       Cancel any previous definition of NAME, either built in or provided
!      with a '-D' option.
  
  
  File: gfortran.info,  Node: Error and Warning Options,  Next: Debugging Options,  Prev: Preprocessing Options,  Up: Invoking GNU Fortran
--- 1046,1071 ----
       write its argument list with surrounding parentheses before the
       equals sign (if any).  Parentheses are meaningful to most shells,
       so you will need to quote the option.  With sh and csh,
!      ‘-D'name(args...)=definition'’ works.
  
!      ‘-D’ and ‘-U’ options are processed in the order they are given on
       the command line.  All -imacros file and -include file options are
       processed after all -D and -U options.
  
! ‘-H’
       Print the name of each header file used, in addition to other
       normal activities.  Each name is indented to show how deep in the
!      ‘'#include'’ stack it is.
  
! ‘-P’
       Inhibit generation of linemarkers in the output from the
       preprocessor.  This might be useful when running the preprocessor
       on something that is not C code, and will be sent to a program
       which might be confused by the linemarkers.
  
! ‘-UNAME’
       Cancel any previous definition of NAME, either built in or provided
!      with a ‘-D’ option.
  
  
  File: gfortran.info,  Node: Error and Warning Options,  Next: Debugging Options,  Prev: Preprocessing Options,  Up: Invoking GNU Fortran
*************** to aid in debugging, but will not produc
*** 1080,1146 ****
  
     Warnings are diagnostic messages that report constructions which are
  not inherently erroneous but which are risky or suggest there is likely
! to be a bug in the program.  Unless '-Werror' is specified, they do not
  prevent compilation of the program.
  
!    You can request many specific warnings with options beginning '-W',
! for example '-Wimplicit' to request warnings on implicit declarations.
  Each of these specific warning options also has a negative form
! beginning '-Wno-' to turn off warnings; for example, '-Wno-implicit'.
  This manual lists only one of the two forms, whichever is not the
  default.
  
     These options control the amount and kinds of errors and warnings
  produced by GNU Fortran:
  
! '-fmax-errors=N'
       Limits the maximum number of error messages to N, at which point
       GNU Fortran bails out rather than attempting to continue processing
       the source code.  If N is 0, there is no limit on the number of
       error messages produced.
  
! '-fsyntax-only'
       Check the code for syntax errors, but do not actually compile it.
       This will generate module files for each module present in the
       code, but no other output file.
  
! '-Wpedantic'
! '-pedantic'
!      Issue warnings for uses of extensions to Fortran.  '-pedantic' also
       applies to C-language constructs where they occur in GNU Fortran
!      source files, such as use of '\e' in a character constant within a
!      directive like '#include'.
  
       Valid Fortran programs should compile properly with or without this
       option.  However, without this option, certain GNU extensions and
       traditional Fortran features are supported as well.  With this
       option, many of them are rejected.
  
!      Some users try to use '-pedantic' to check programs for
       conformance.  They soon find that it does not do quite what they
       want--it finds some nonstandard practices, but not all.  However,
       improvements to GNU Fortran in this area are welcome.
  
!      This should be used in conjunction with '-std=f95', '-std=f2003',
!      '-std=f2008', '-std=f2018' or '-std=f2023'.
  
! '-pedantic-errors'
!      Like '-pedantic', except that errors are produced rather than
       warnings.
  
! '-Wall'
       Enables commonly used warning options pertaining to usage that we
       recommend avoiding and that we believe are easy to avoid.  This
!      currently includes '-Waliasing', '-Wampersand', '-Wconversion',
!      '-Wsurprising', '-Wc-binding-type', '-Wintrinsics-std', '-Wtabs',
!      '-Wintrinsic-shadow', '-Wline-truncation', '-Wtarget-lifetime',
!      '-Winteger-division', '-Wreal-q-constant', '-Wunused' and
!      '-Wundefined-do-loop'.
  
! '-Waliasing'
       Warn about possible aliasing of dummy arguments.  Specifically, it
       warns if the same actual argument is associated with a dummy
!      argument with 'INTENT(IN)' and a dummy argument with 'INTENT(OUT)'
       in a call with an explicit interface.
  
       The following example will trigger the warning.
--- 1080,1146 ----
  
     Warnings are diagnostic messages that report constructions which are
  not inherently erroneous but which are risky or suggest there is likely
! to be a bug in the program.  Unless ‘-Werror’ is specified, they do not
  prevent compilation of the program.
  
!    You can request many specific warnings with options beginning ‘-W’,
! for example ‘-Wimplicit’ to request warnings on implicit declarations.
  Each of these specific warning options also has a negative form
! beginning ‘-Wno-’ to turn off warnings; for example, ‘-Wno-implicit’.
  This manual lists only one of the two forms, whichever is not the
  default.
  
     These options control the amount and kinds of errors and warnings
  produced by GNU Fortran:
  
! ‘-fmax-errors=N’
       Limits the maximum number of error messages to N, at which point
       GNU Fortran bails out rather than attempting to continue processing
       the source code.  If N is 0, there is no limit on the number of
       error messages produced.
  
! ‘-fsyntax-only’
       Check the code for syntax errors, but do not actually compile it.
       This will generate module files for each module present in the
       code, but no other output file.
  
! ‘-Wpedantic’
! ‘-pedantic’
!      Issue warnings for uses of extensions to Fortran.  ‘-pedantic’ also
       applies to C-language constructs where they occur in GNU Fortran
!      source files, such as use of ‘\e’ in a character constant within a
!      directive like ‘#include’.
  
       Valid Fortran programs should compile properly with or without this
       option.  However, without this option, certain GNU extensions and
       traditional Fortran features are supported as well.  With this
       option, many of them are rejected.
  
!      Some users try to use ‘-pedantic’ to check programs for
       conformance.  They soon find that it does not do quite what they
       want--it finds some nonstandard practices, but not all.  However,
       improvements to GNU Fortran in this area are welcome.
  
!      This should be used in conjunction with ‘-std=f95’, ‘-std=f2003’,
!      ‘-std=f2008’, ‘-std=f2018’ or ‘-std=f2023’.
  
! ‘-pedantic-errors’
!      Like ‘-pedantic’, except that errors are produced rather than
       warnings.
  
! ‘-Wall’
       Enables commonly used warning options pertaining to usage that we
       recommend avoiding and that we believe are easy to avoid.  This
!      currently includes ‘-Waliasing’, ‘-Wampersand’, ‘-Wconversion’,
!      ‘-Wsurprising’, ‘-Wc-binding-type’, ‘-Wintrinsics-std’, ‘-Wtabs’,
!      ‘-Wintrinsic-shadow’, ‘-Wline-truncation’, ‘-Wtarget-lifetime’,
!      ‘-Winteger-division’, ‘-Wreal-q-constant’, ‘-Wunused’ and
!      ‘-Wundefined-do-loop’.
  
! ‘-Waliasing’
       Warn about possible aliasing of dummy arguments.  Specifically, it
       warns if the same actual argument is associated with a dummy
!      argument with ‘INTENT(IN)’ and a dummy argument with ‘INTENT(OUT)’
       in a call with an explicit interface.
  
       The following example will trigger the warning.
*************** produced by GNU Fortran:
*** 1154,1239 ****
  
              call bar(a,a)
  
! '-Wampersand'
       Warn about missing ampersand in continued character constants.  The
!      warning is given with '-Wampersand', '-pedantic', '-std=f95',
!      '-std=f2003', '-std=f2008', '-std=f2018' and '-std=f2023'.  Note:
       With no ampersand given in a continued character constant, GNU
       Fortran assumes continuation at the first non-comment,
       non-whitespace character after the ampersand that initiated the
       continuation.
  
! '-Warray-temporaries'
       Warn about array temporaries generated by the compiler.  The
       information generated by this warning is sometimes useful in
       optimization, in order to avoid such temporaries.
  
! '-Wc-binding-type'
       Warn if the a variable might not be C interoperable.  In
       particular, warn if the variable has been declared using an
       intrinsic type with default kind instead of using a kind parameter
!      defined for C interoperability in the intrinsic 'ISO_C_Binding'
!      module.  This option is implied by '-Wall'.
  
! '-Wcharacter-truncation'
       Warn when a character assignment will truncate the assigned string.
  
! '-Wline-truncation'
       Warn when a source code line will be truncated.  This option is
!      implied by '-Wall'.  For free-form source code, the default is
!      '-Werror=line-truncation' such that truncations are reported as
       error.
  
! '-Wconversion'
       Warn about implicit conversions that are likely to change the value
!      of the expression after conversion.  Implied by '-Wall'.
  
! '-Wconversion-extra'
       Warn about implicit conversions between different types and kinds.
!      This option does _not_ imply '-Wconversion'.
  
! '-Wextra'
       Enables some warning options for usages of language features which
!      may be problematic.  This currently includes '-Wcompare-reals',
!      '-Wunused-parameter' and '-Wdo-subscript'.
  
! '-Wfrontend-loop-interchange'
!      Warn when using '-ffrontend-loop-interchange' for performing loop
       interchanges.
  
! '-Wimplicit-interface'
       Warn if a procedure is called without an explicit interface.  Note
       this only checks that an explicit interface is present.  It does
       not check that the declared interfaces are consistent across
       program units.
  
! '-Wimplicit-procedure'
       Warn if a procedure is called that has neither an explicit
!      interface nor has been declared as 'EXTERNAL'.
  
! '-Winteger-division'
       Warn if a constant integer division truncates its result.  As an
       example, 3/5 evaluates to 0.
  
! '-Wintrinsics-std'
!      Warn if 'gfortran' finds a procedure named like an intrinsic not
!      available in the currently selected standard (with '-std') and
!      treats it as 'EXTERNAL' procedure because of this.
!      '-fall-intrinsics' can be used to never trigger this behavior and
       always link to the intrinsic regardless of the selected standard.
  
! '-Wno-overwrite-recursive'
!      Do not warn when '-fno-automatic' is used with '-frecursive'.
       Recursion will be broken if the relevant local variables do not
!      have the attribute 'AUTOMATIC' explicitly declared.  This option
       can be used to suppress the warning when it is known that recursion
!      is not broken.  Useful for build environments that use '-Werror'.
  
! '-Wreal-q-constant'
!      Produce a warning if a real-literal-constant contains a 'q'
       exponent-letter.
  
! '-Wsurprising'
       Produce a warning when "suspicious" code constructs are
       encountered.  While technically legal these usually indicate that
       an error has been made.
--- 1154,1239 ----
  
              call bar(a,a)
  
! ‘-Wampersand’
       Warn about missing ampersand in continued character constants.  The
!      warning is given with ‘-Wampersand’, ‘-pedantic’, ‘-std=f95’,
!      ‘-std=f2003’, ‘-std=f2008’, ‘-std=f2018’ and ‘-std=f2023’.  Note:
       With no ampersand given in a continued character constant, GNU
       Fortran assumes continuation at the first non-comment,
       non-whitespace character after the ampersand that initiated the
       continuation.
  
! ‘-Warray-temporaries’
       Warn about array temporaries generated by the compiler.  The
       information generated by this warning is sometimes useful in
       optimization, in order to avoid such temporaries.
  
! ‘-Wc-binding-type’
       Warn if the a variable might not be C interoperable.  In
       particular, warn if the variable has been declared using an
       intrinsic type with default kind instead of using a kind parameter
!      defined for C interoperability in the intrinsic ‘ISO_C_Binding’
!      module.  This option is implied by ‘-Wall’.
  
! ‘-Wcharacter-truncation’
       Warn when a character assignment will truncate the assigned string.
  
! ‘-Wline-truncation’
       Warn when a source code line will be truncated.  This option is
!      implied by ‘-Wall’.  For free-form source code, the default is
!      ‘-Werror=line-truncation’ such that truncations are reported as
       error.
  
! ‘-Wconversion’
       Warn about implicit conversions that are likely to change the value
!      of the expression after conversion.  Implied by ‘-Wall’.
  
! ‘-Wconversion-extra’
       Warn about implicit conversions between different types and kinds.
!      This option does _not_ imply ‘-Wconversion’.
  
! ‘-Wextra’
       Enables some warning options for usages of language features which
!      may be problematic.  This currently includes ‘-Wcompare-reals’,
!      ‘-Wunused-parameter’ and ‘-Wdo-subscript’.
  
! ‘-Wfrontend-loop-interchange’
!      Warn when using ‘-ffrontend-loop-interchange’ for performing loop
       interchanges.
  
! ‘-Wimplicit-interface’
       Warn if a procedure is called without an explicit interface.  Note
       this only checks that an explicit interface is present.  It does
       not check that the declared interfaces are consistent across
       program units.
  
! ‘-Wimplicit-procedure’
       Warn if a procedure is called that has neither an explicit
!      interface nor has been declared as ‘EXTERNAL’.
  
! ‘-Winteger-division’
       Warn if a constant integer division truncates its result.  As an
       example, 3/5 evaluates to 0.
  
! ‘-Wintrinsics-std’
!      Warn if ‘gfortran’ finds a procedure named like an intrinsic not
!      available in the currently selected standard (with ‘-std’) and
!      treats it as ‘EXTERNAL’ procedure because of this.
!      ‘-fall-intrinsics’ can be used to never trigger this behavior and
       always link to the intrinsic regardless of the selected standard.
  
! ‘-Wno-overwrite-recursive’
!      Do not warn when ‘-fno-automatic’ is used with ‘-frecursive’.
       Recursion will be broken if the relevant local variables do not
!      have the attribute ‘AUTOMATIC’ explicitly declared.  This option
       can be used to suppress the warning when it is known that recursion
!      is not broken.  Useful for build environments that use ‘-Werror’.
  
! ‘-Wreal-q-constant’
!      Produce a warning if a real-literal-constant contains a ‘q’
       exponent-letter.
  
! ‘-Wsurprising’
       Produce a warning when "suspicious" code constructs are
       encountered.  While technically legal these usually indicate that
       an error has been made.
*************** produced by GNU Fortran:
*** 1241,1346 ****
       This currently produces a warning under the following
       circumstances:
  
!         * An INTEGER SELECT construct has a CASE that can never be
            matched as its lower value is greater than its upper value.
  
!         * A LOGICAL SELECT construct has three CASE statements.
  
!         * A TRANSFER specifies a source that is shorter than the
            destination.
  
!         * The type of a function result is declared more than once with
!           the same type.  If '-pedantic' or standard-conforming mode is
            enabled, this is an error.
  
!         * A 'CHARACTER' variable is declared with negative length.
  
!         * With '-fopenmp', for fixed-form source code, when an 'omx'
            vendor-extension sentinel is encountered.  (The equivalent
!           'ompx', used in free-form source code, is diagnosed by
            default.)
  
! '-Wtabs'
       By default, tabs are accepted as whitespace, but tabs are not
       members of the Fortran Character Set.  For continuation lines, a
!      tab followed by a digit between 1 and 9 is supported.  '-Wtabs'
       will cause a warning to be issued if a tab is encountered.  Note,
!      '-Wtabs' is active for '-pedantic', '-std=f95', '-std=f2003',
!      '-std=f2008', '-std=f2018', '-std=f2023' and '-Wall'.
  
! '-Wundefined-do-loop'
       Warn if a DO loop with step either 1 or -1 yields an underflow or
       an overflow during iteration of an induction variable of the loop.
!      This option is implied by '-Wall'.
  
! '-Wunderflow'
       Produce a warning when numerical constant expressions are
       encountered, which yield an UNDERFLOW during compilation.  Enabled
       by default.
  
! '-Wintrinsic-shadow'
       Warn if a user-defined procedure or module procedure has the same
       name as an intrinsic; in this case, an explicit interface or
!      'EXTERNAL' or 'INTRINSIC' declaration might be needed to get calls
       later resolved to the desired intrinsic/procedure.  This option is
!      implied by '-Wall'.
  
! '-Wuse-without-only'
!      Warn if a 'USE' statement has no 'ONLY' qualifier and thus
       implicitly imports all public entities of the used module.
  
! '-Wunused-dummy-argument'
       Warn about unused dummy arguments.  This option is implied by
!      '-Wall'.
  
! '-Wunused-parameter'
!      Contrary to 'gcc''s meaning of '-Wunused-parameter', 'gfortran''s
       implementation of this option does not warn about unused dummy
!      arguments (see '-Wunused-dummy-argument'), but about unused
!      'PARAMETER' values.  '-Wunused-parameter' is implied by '-Wextra'
!      if also '-Wunused' or '-Wall' is used.
  
! '-Walign-commons'
!      By default, 'gfortran' warns about any occasion of variables being
!      padded for proper alignment inside a 'COMMON' block.  This warning
!      can be turned off via '-Wno-align-commons'.  See also
!      '-falign-commons'.
  
! '-Wfunction-elimination'
       Warn if any calls to impure functions are eliminated by the
!      optimizations enabled by the '-ffrontend-optimize' option.  This
!      option is implied by '-Wextra'.
  
! '-Wrealloc-lhs'
       Warn when the compiler might insert code to for allocation or
       reallocation of an allocatable array variable of intrinsic type in
       intrinsic assignments.  In hot loops, the Fortran 2003 reallocation
       feature may reduce the performance.  If the array is already
       allocated with the correct shape, consider using a whole-array
!      array-spec (e.g.  '(:,:,:)') for the variable on the left-hand side
       to prevent the reallocation check.  Note that in some cases the
       warning is shown, even if the compiler will optimize reallocation
       checks away.  For instance, when the right-hand side contains the
!      same variable multiplied by a scalar.  See also '-frealloc-lhs'.
  
! '-Wrealloc-lhs-all'
       Warn when the compiler inserts code to for allocation or
       reallocation of an allocatable variable; this includes scalars and
       derived types.
  
! '-Wcompare-reals'
       Warn when comparing real or complex types for equality or
!      inequality.  This option is implied by '-Wextra'.
  
! '-Wtarget-lifetime'
       Warn if the pointer in a pointer assignment might be longer than
!      the its target.  This option is implied by '-Wall'.
  
! '-Wzerotrip'
!      Warn if a 'DO' loop is known to execute zero times at compile time.
!      This option is implied by '-Wall'.
  
! '-Wdo-subscript'
       Warn if an array subscript inside a DO loop could lead to an
       out-of-bounds access even if the compiler cannot prove that the
       statement is actually executed, in cases like
--- 1241,1346 ----
       This currently produces a warning under the following
       circumstances:
  
!         • An INTEGER SELECT construct has a CASE that can never be
            matched as its lower value is greater than its upper value.
  
!         • A LOGICAL SELECT construct has three CASE statements.
  
!         • A TRANSFER specifies a source that is shorter than the
            destination.
  
!         • The type of a function result is declared more than once with
!           the same type.  If ‘-pedantic’ or standard-conforming mode is
            enabled, this is an error.
  
!         • A ‘CHARACTER’ variable is declared with negative length.
  
!         • With ‘-fopenmp’, for fixed-form source code, when an ‘omx’
            vendor-extension sentinel is encountered.  (The equivalent
!           ‘ompx’, used in free-form source code, is diagnosed by
            default.)
  
! ‘-Wtabs’
       By default, tabs are accepted as whitespace, but tabs are not
       members of the Fortran Character Set.  For continuation lines, a
!      tab followed by a digit between 1 and 9 is supported.  ‘-Wtabs’
       will cause a warning to be issued if a tab is encountered.  Note,
!      ‘-Wtabs’ is active for ‘-pedantic’, ‘-std=f95’, ‘-std=f2003’,
!      ‘-std=f2008’, ‘-std=f2018’, ‘-std=f2023’ and ‘-Wall’.
  
! ‘-Wundefined-do-loop’
       Warn if a DO loop with step either 1 or -1 yields an underflow or
       an overflow during iteration of an induction variable of the loop.
!      This option is implied by ‘-Wall’.
  
! ‘-Wunderflow’
       Produce a warning when numerical constant expressions are
       encountered, which yield an UNDERFLOW during compilation.  Enabled
       by default.
  
! ‘-Wintrinsic-shadow’
       Warn if a user-defined procedure or module procedure has the same
       name as an intrinsic; in this case, an explicit interface or
!      ‘EXTERNAL’ or ‘INTRINSIC’ declaration might be needed to get calls
       later resolved to the desired intrinsic/procedure.  This option is
!      implied by ‘-Wall’.
  
! ‘-Wuse-without-only’
!      Warn if a ‘USE’ statement has no ‘ONLY’ qualifier and thus
       implicitly imports all public entities of the used module.
  
! ‘-Wunused-dummy-argument’
       Warn about unused dummy arguments.  This option is implied by
!      ‘-Wall’.
  
! ‘-Wunused-parameter’
!      Contrary to ‘gcc’'s meaning of ‘-Wunused-parameter’, ‘gfortran’'s
       implementation of this option does not warn about unused dummy
!      arguments (see ‘-Wunused-dummy-argument’), but about unused
!      ‘PARAMETER’ values.  ‘-Wunused-parameter’ is implied by ‘-Wextra’
!      if also ‘-Wunused’ or ‘-Wall’ is used.
  
! ‘-Walign-commons’
!      By default, ‘gfortran’ warns about any occasion of variables being
!      padded for proper alignment inside a ‘COMMON’ block.  This warning
!      can be turned off via ‘-Wno-align-commons’.  See also
!      ‘-falign-commons’.
  
! ‘-Wfunction-elimination’
       Warn if any calls to impure functions are eliminated by the
!      optimizations enabled by the ‘-ffrontend-optimize’ option.  This
!      option is implied by ‘-Wextra’.
  
! ‘-Wrealloc-lhs’
       Warn when the compiler might insert code to for allocation or
       reallocation of an allocatable array variable of intrinsic type in
       intrinsic assignments.  In hot loops, the Fortran 2003 reallocation
       feature may reduce the performance.  If the array is already
       allocated with the correct shape, consider using a whole-array
!      array-spec (e.g.  ‘(:,:,:)’) for the variable on the left-hand side
       to prevent the reallocation check.  Note that in some cases the
       warning is shown, even if the compiler will optimize reallocation
       checks away.  For instance, when the right-hand side contains the
!      same variable multiplied by a scalar.  See also ‘-frealloc-lhs’.
  
! ‘-Wrealloc-lhs-all’
       Warn when the compiler inserts code to for allocation or
       reallocation of an allocatable variable; this includes scalars and
       derived types.
  
! ‘-Wcompare-reals’
       Warn when comparing real or complex types for equality or
!      inequality.  This option is implied by ‘-Wextra’.
  
! ‘-Wtarget-lifetime’
       Warn if the pointer in a pointer assignment might be longer than
!      the its target.  This option is implied by ‘-Wall’.
  
! ‘-Wzerotrip’
!      Warn if a ‘DO’ loop is known to execute zero times at compile time.
!      This option is implied by ‘-Wall’.
  
! ‘-Wdo-subscript’
       Warn if an array subscript inside a DO loop could lead to an
       out-of-bounds access even if the compiler cannot prove that the
       statement is actually executed, in cases like
*************** produced by GNU Fortran:
*** 1350,1363 ****
                  a(i) = 1.2
                end if
              end do
!      This option is implied by '-Wextra'.
  
! '-Werror'
       Turns all warnings into errors.
  
     *Note Options to Request or Suppress Errors and Warnings:
  (gcc)Warning Options, for information on more options offered by the GBE
! shared by 'gfortran', 'gcc' and other GNU compilers.
  
     Some of these have no effect when compiling programs written in
  Fortran.
--- 1350,1363 ----
                  a(i) = 1.2
                end if
              end do
!      This option is implied by ‘-Wextra’.
  
! ‘-Werror’
       Turns all warnings into errors.
  
     *Note Options to Request or Suppress Errors and Warnings:
  (gcc)Warning Options, for information on more options offered by the GBE
! shared by ‘gfortran’, ‘gcc’ and other GNU compilers.
  
     Some of these have no effect when compiling programs written in
  Fortran.
*************** File: gfortran.info,  Node: Debugging Op
*** 1371,1437 ****
  GNU Fortran has various special options that are used for debugging your
  program.
  
! '-fdebug-aux-vars'
       Renames internal variables created by the gfortran front end and
       makes them accessible to a debugger.  The name of the internal
       variables then start with upper-case letters followed by an
       underscore.  This option is useful for debugging the compiler's
!      code generation together with '-fdump-tree-original' and enabling
!      debugging of the executable program by using '-g' or '-ggdb3'.
  
! '-ffpe-trap=LIST'
       Specify a list of floating point exception traps to enable.  On
       most systems, if a floating point exception occurs and the trap for
       that exception is enabled, a SIGFPE signal will be sent and the
       program being aborted, producing a core file useful for debugging.
!      LIST is a (possibly empty) comma-separated list of either 'none'
       (to clear the set of exceptions to be trapped), or of the following
!      exceptions: 'invalid' (invalid floating point operation, such as
!      'SQRT(-1.0)'), 'zero' (division by zero), 'overflow' (overflow in a
!      floating point operation), 'underflow' (underflow in a floating
!      point operation), 'inexact' (loss of precision during operation),
!      and 'denormal' (operation performed on a denormal value).  The
       first five exceptions correspond to the five IEEE 754 exceptions,
!      whereas the last one ('denormal') is not part of the IEEE 754
       standard but is available on some common architectures such as x86.
  
!      The first three exceptions ('invalid', 'zero', and 'overflow')
       often indicate serious errors, and unless the program has
       provisions for dealing with these exceptions, enabling traps for
       these three exceptions is probably a good idea.
  
       If the option is used more than once in the command line, the lists
!      will be joined: ''ffpe-trap='LIST1 'ffpe-trap='LIST2' is equivalent
!      to 'ffpe-trap='LIST1,LIST2.
  
       Note that once enabled an exception cannot be disabled (no negative
!      form), except by clearing all traps by specifying 'none'.
  
       Many, if not most, floating point operations incur loss of
!      precision due to rounding, and hence the 'ffpe-trap=inexact' is
       likely to be uninteresting in practice.
  
       By default no exception traps are enabled.
  
! '-ffpe-summary=LIST'
       Specify a list of floating-point exceptions, whose flag status is
!      printed to 'ERROR_UNIT' when invoking 'STOP' and 'ERROR STOP'.
!      LIST can be either 'none', 'all' or a comma-separated list of the
!      following exceptions: 'invalid', 'zero', 'overflow', 'underflow',
!      'inexact' and 'denormal'.  (See '-ffpe-trap' for a description of
       the exceptions.)
  
       If the option is used more than once in the command line, only the
       last one will be used.
  
!      By default, a summary for all exceptions but 'inexact' is shown.
  
! '-fno-backtrace'
       When a serious runtime error is encountered or a deadly signal is
       emitted (segmentation fault, illegal instruction, bus error,
       floating-point exception, and the other POSIX signals that have the
!      action 'core'), the Fortran runtime library tries to output a
!      backtrace of the error.  '-fno-backtrace' disables the backtrace
       generation.  This option only has influence for compilation of the
       Fortran main program.
  
--- 1371,1437 ----
  GNU Fortran has various special options that are used for debugging your
  program.
  
! ‘-fdebug-aux-vars’
       Renames internal variables created by the gfortran front end and
       makes them accessible to a debugger.  The name of the internal
       variables then start with upper-case letters followed by an
       underscore.  This option is useful for debugging the compiler's
!      code generation together with ‘-fdump-tree-original’ and enabling
!      debugging of the executable program by using ‘-g’ or ‘-ggdb3’.
  
! ‘-ffpe-trap=LIST’
       Specify a list of floating point exception traps to enable.  On
       most systems, if a floating point exception occurs and the trap for
       that exception is enabled, a SIGFPE signal will be sent and the
       program being aborted, producing a core file useful for debugging.
!      LIST is a (possibly empty) comma-separated list of either ‘none’
       (to clear the set of exceptions to be trapped), or of the following
!      exceptions: ‘invalid’ (invalid floating point operation, such as
!      ‘SQRT(-1.0)’), ‘zero’ (division by zero), ‘overflow’ (overflow in a
!      floating point operation), ‘underflow’ (underflow in a floating
!      point operation), ‘inexact’ (loss of precision during operation),
!      and ‘denormal’ (operation performed on a denormal value).  The
       first five exceptions correspond to the five IEEE 754 exceptions,
!      whereas the last one (‘denormal’) is not part of the IEEE 754
       standard but is available on some common architectures such as x86.
  
!      The first three exceptions (‘invalid’, ‘zero’, and ‘overflow’)
       often indicate serious errors, and unless the program has
       provisions for dealing with these exceptions, enabling traps for
       these three exceptions is probably a good idea.
  
       If the option is used more than once in the command line, the lists
!      will be joined: '‘ffpe-trap=’LIST1 ‘ffpe-trap=’LIST2' is equivalent
!      to ‘ffpe-trap=’LIST1,LIST2.
  
       Note that once enabled an exception cannot be disabled (no negative
!      form), except by clearing all traps by specifying ‘none’.
  
       Many, if not most, floating point operations incur loss of
!      precision due to rounding, and hence the ‘ffpe-trap=inexact’ is
       likely to be uninteresting in practice.
  
       By default no exception traps are enabled.
  
! ‘-ffpe-summary=LIST’
       Specify a list of floating-point exceptions, whose flag status is
!      printed to ‘ERROR_UNIT’ when invoking ‘STOP’ and ‘ERROR STOP’.
!      LIST can be either ‘none’, ‘all’ or a comma-separated list of the
!      following exceptions: ‘invalid’, ‘zero’, ‘overflow’, ‘underflow’,
!      ‘inexact’ and ‘denormal’.  (See ‘-ffpe-trap’ for a description of
       the exceptions.)
  
       If the option is used more than once in the command line, only the
       last one will be used.
  
!      By default, a summary for all exceptions but ‘inexact’ is shown.
  
! ‘-fno-backtrace’
       When a serious runtime error is encountered or a deadly signal is
       emitted (segmentation fault, illegal instruction, bus error,
       floating-point exception, and the other POSIX signals that have the
!      action ‘core’), the Fortran runtime library tries to output a
!      backtrace of the error.  ‘-fno-backtrace’ disables the backtrace
       generation.  This option only has influence for compilation of the
       Fortran main program.
  
*************** File: gfortran.info,  Node: Directory Op
*** 1445,1479 ****
  ================================
  
  These options affect how GNU Fortran searches for files specified by the
! 'INCLUDE' directive and where it searches for previously compiled
  modules.
  
!    It also affects the search paths used by 'cpp' when used to
  preprocess Fortran source.
  
! '-IDIR'
!      These affect interpretation of the 'INCLUDE' directive (as well as
!      of the '#include' directive of the 'cpp' preprocessor).
  
!      Also note that the general behavior of '-I' and 'INCLUDE' is pretty
!      much the same as of '-I' with '#include' in the 'cpp' preprocessor,
!      with regard to looking for 'header.gcc' files and other such
       things.
  
!      This path is also used to search for '.mod' files when previously
!      compiled modules are required by a 'USE' statement.
  
       *Note Options for Directory Search: (gcc)Directory Options, for
!      information on the '-I' option.
  
! '-JDIR'
!      This option specifies where to put '.mod' files for compiled
       modules.  It is also added to the list of directories to searched
!      by an 'USE' statement.
  
       The default is the current directory.
  
! '-fintrinsic-modules-path DIR'
       This option specifies the location of pre-compiled intrinsic
       modules, if they are not in the default location expected by the
       compiler.
--- 1445,1479 ----
  ================================
  
  These options affect how GNU Fortran searches for files specified by the
! ‘INCLUDE’ directive and where it searches for previously compiled
  modules.
  
!    It also affects the search paths used by ‘cpp’ when used to
  preprocess Fortran source.
  
! ‘-IDIR’
!      These affect interpretation of the ‘INCLUDE’ directive (as well as
!      of the ‘#include’ directive of the ‘cpp’ preprocessor).
  
!      Also note that the general behavior of ‘-I’ and ‘INCLUDE’ is pretty
!      much the same as of ‘-I’ with ‘#include’ in the ‘cpp’ preprocessor,
!      with regard to looking for ‘header.gcc’ files and other such
       things.
  
!      This path is also used to search for ‘.mod’ files when previously
!      compiled modules are required by a ‘USE’ statement.
  
       *Note Options for Directory Search: (gcc)Directory Options, for
!      information on the ‘-I’ option.
  
! ‘-JDIR’
!      This option specifies where to put ‘.mod’ files for compiled
       modules.  It is also added to the list of directories to searched
!      by an ‘USE’ statement.
  
       The default is the current directory.
  
! ‘-fintrinsic-modules-path DIR’
       This option specifies the location of pre-compiled intrinsic
       modules, if they are not in the default location expected by the
       compiler.
*************** These options come into play when the co
*** 1488,1506 ****
  an executable output file.  They are meaningless if the compiler is not
  doing a link step.
  
! '-static-libgfortran'
!      On systems that provide 'libgfortran' as a shared and a static
       library, this option forces the use of the static version.  If no
!      shared version of 'libgfortran' was built when the compiler was
       configured, this option has no effect.
  
! '-static-libquadmath'
!      On systems that provide 'libquadmath' as a shared and a static
       library, this option forces the use of the static version.  If no
!      shared version of 'libquadmath' was built when the compiler was
       configured, this option has no effect.
  
!      Please note that the 'libquadmath' runtime library is licensed
       under the GNU Lesser General Public License (LGPL), and linking it
       statically introduces requirements when redistributing the
       resulting binaries.
--- 1488,1506 ----
  an executable output file.  They are meaningless if the compiler is not
  doing a link step.
  
! ‘-static-libgfortran’
!      On systems that provide ‘libgfortran’ as a shared and a static
       library, this option forces the use of the static version.  If no
!      shared version of ‘libgfortran’ was built when the compiler was
       configured, this option has no effect.
  
! ‘-static-libquadmath’
!      On systems that provide ‘libquadmath’ as a shared and a static
       library, this option forces the use of the static version.  If no
!      shared version of ‘libquadmath’ was built when the compiler was
       configured, this option has no effect.
  
!      Please note that the ‘libquadmath’ runtime library is licensed
       under the GNU Lesser General Public License (LGPL), and linking it
       statically introduces requirements when redistributing the
       resulting binaries.
*************** File: gfortran.info,  Node: Runtime Opti
*** 1514,1559 ****
  These options affect the runtime behavior of programs compiled with GNU
  Fortran.
  
! '-fconvert=CONVERSION'
       Specify the representation of data for unformatted files.  Valid
!      values for conversion on most systems are: 'native', the default;
!      'swap', swap between big- and little-endian; 'big-endian', use
!      big-endian representation for unformatted files; 'little-endian',
       use little-endian representation for unformatted files.
  
!      On POWER systems which suppport '-mabi=ieeelongdouble', there are
       additional options, which can be combined with others with commas.
       Those are
!           '-fconvert=r16_ieee' Use IEEE 128-bit format for
!           'REAL(KIND=16)'.
!           '-fconvert=r16_ibm' Use IBM long double format for
!           'REAL(KIND=16)'.
  
       _This option has an effect only when used in the main program.  The
!      'CONVERT' specifier and the GFORTRAN_CONVERT_UNIT environment
!      variable override the default specified by '-fconvert'._
  
! '-frecord-marker=LENGTH'
       Specify the length of record markers for unformatted files.  Valid
       values for LENGTH are 4 and 8.  Default is 4.  _This is different
!      from previous versions of 'gfortran'_, which specified a default
       record marker length of 8 on most systems.  If you want to read or
!      write files compatible with earlier versions of 'gfortran', use
!      '-frecord-marker=8'.
  
! '-fmax-subrecord-length=LENGTH'
       Specify the maximum length for a subrecord.  The maximum permitted
       value for length is 2147483639, which is also the default.  Only
       really useful for use by the gfortran testsuite.
  
! '-fsign-zero'
       When enabled, floating point numbers of value zero with the sign
       bit set are written as negative number in formatted output and
!      treated as negative in the 'SIGN' intrinsic.  '-fno-sign-zero' does
       not print the negative sign of zero values (or values rounded to
!      zero for I/O) and regards zero as positive number in the 'SIGN'
       intrinsic for compatibility with Fortran 77.  The default is
!      '-fsign-zero'.
  
  
  File: gfortran.info,  Node: Developer Options,  Next: Code Gen Options,  Prev: Runtime Options,  Up: Invoking GNU Fortran
--- 1514,1559 ----
  These options affect the runtime behavior of programs compiled with GNU
  Fortran.
  
! ‘-fconvert=CONVERSION’
       Specify the representation of data for unformatted files.  Valid
!      values for conversion on most systems are: ‘native’, the default;
!      ‘swap’, swap between big- and little-endian; ‘big-endian’, use
!      big-endian representation for unformatted files; ‘little-endian’,
       use little-endian representation for unformatted files.
  
!      On POWER systems which suppport ‘-mabi=ieeelongdouble’, there are
       additional options, which can be combined with others with commas.
       Those are
!           ‘-fconvert=r16_ieee’ Use IEEE 128-bit format for
!           ‘REAL(KIND=16)’.
!           ‘-fconvert=r16_ibm’ Use IBM long double format for
!           ‘REAL(KIND=16)’.
  
       _This option has an effect only when used in the main program.  The
!      ‘CONVERT’ specifier and the GFORTRAN_CONVERT_UNIT environment
!      variable override the default specified by ‘-fconvert’._
  
! ‘-frecord-marker=LENGTH’
       Specify the length of record markers for unformatted files.  Valid
       values for LENGTH are 4 and 8.  Default is 4.  _This is different
!      from previous versions of ‘gfortran’_, which specified a default
       record marker length of 8 on most systems.  If you want to read or
!      write files compatible with earlier versions of ‘gfortran’, use
!      ‘-frecord-marker=8’.
  
! ‘-fmax-subrecord-length=LENGTH’
       Specify the maximum length for a subrecord.  The maximum permitted
       value for length is 2147483639, which is also the default.  Only
       really useful for use by the gfortran testsuite.
  
! ‘-fsign-zero’
       When enabled, floating point numbers of value zero with the sign
       bit set are written as negative number in formatted output and
!      treated as negative in the ‘SIGN’ intrinsic.  ‘-fno-sign-zero’ does
       not print the negative sign of zero values (or values rounded to
!      zero for I/O) and regards zero as positive number in the ‘SIGN’
       intrinsic for compatibility with Fortran 77.  The default is
!      ‘-fsign-zero’.
  
  
  File: gfortran.info,  Node: Developer Options,  Next: Code Gen Options,  Prev: Runtime Options,  Up: Invoking GNU Fortran
*************** File: gfortran.info,  Node: Developer Op
*** 1564,1584 ****
  GNU Fortran has various special options that are used for debugging the
  GNU Fortran compiler.
  
! '-fdump-fortran-global'
       Output a list of the global identifiers after translating into
       middle-end representation.  Mostly useful for debugging the GNU
       Fortran compiler itself.  The output generated by this option might
       change between releases.  This option may also generate internal
       compiler errors for features which have only recently been added.
  
! '-fdump-fortran-optimized'
       Output the parse tree after front-end optimization.  Mostly useful
       for debugging the GNU Fortran compiler itself.  The output
       generated by this option might change between releases.  This
       option may also generate internal compiler errors for features
       which have only recently been added.
  
! '-fdump-fortran-original'
       Output the internal parse tree after translating the source program
       into internal representation.  This option is mostly useful for
       debugging the GNU Fortran compiler itself.  The output generated by
--- 1564,1584 ----
  GNU Fortran has various special options that are used for debugging the
  GNU Fortran compiler.
  
! ‘-fdump-fortran-global’
       Output a list of the global identifiers after translating into
       middle-end representation.  Mostly useful for debugging the GNU
       Fortran compiler itself.  The output generated by this option might
       change between releases.  This option may also generate internal
       compiler errors for features which have only recently been added.
  
! ‘-fdump-fortran-optimized’
       Output the parse tree after front-end optimization.  Mostly useful
       for debugging the GNU Fortran compiler itself.  The output
       generated by this option might change between releases.  This
       option may also generate internal compiler errors for features
       which have only recently been added.
  
! ‘-fdump-fortran-original’
       Output the internal parse tree after translating the source program
       into internal representation.  This option is mostly useful for
       debugging the GNU Fortran compiler itself.  The output generated by
*************** GNU Fortran compiler.
*** 1586,1614 ****
       generate internal compiler errors for features which have only
       recently been added.
  
! '-fdump-parse-tree'
       Output the internal parse tree after translating the source program
       into internal representation.  Mostly useful for debugging the GNU
       Fortran compiler itself.  The output generated by this option might
       change between releases.  This option may also generate internal
       compiler errors for features which have only recently been added.
!      This option is deprecated; use '-fdump-fortran-original' instead.
  
! '-save-temps'
       Store the usual "temporary" intermediate files permanently; name
       them as auxiliary output files, as specified described under GCC
!      '-dumpbase' and '-dumpdir'.
  
            gfortran -save-temps -c foo.F90
  
!      preprocesses input file 'foo.F90' to 'foo.fii', compiles to an
!      intermediate 'foo.s', and then assembles to the (implied) output
!      file 'foo.o', whereas:
  
            gfortran -save-temps -S foo.F
  
!      saves the preprocessor output in 'foo.fi', and then compiles to the
!      (implied) output file 'foo.s'.
  
  
  File: gfortran.info,  Node: Code Gen Options,  Next: Interoperability Options,  Prev: Developer Options,  Up: Invoking GNU Fortran
--- 1586,1614 ----
       generate internal compiler errors for features which have only
       recently been added.
  
! ‘-fdump-parse-tree’
       Output the internal parse tree after translating the source program
       into internal representation.  Mostly useful for debugging the GNU
       Fortran compiler itself.  The output generated by this option might
       change between releases.  This option may also generate internal
       compiler errors for features which have only recently been added.
!      This option is deprecated; use ‘-fdump-fortran-original’ instead.
  
! ‘-save-temps’
       Store the usual "temporary" intermediate files permanently; name
       them as auxiliary output files, as specified described under GCC
!      ‘-dumpbase’ and ‘-dumpdir’.
  
            gfortran -save-temps -c foo.F90
  
!      preprocesses input file ‘foo.F90’ to ‘foo.fii’, compiles to an
!      intermediate ‘foo.s’, and then assembles to the (implied) output
!      file ‘foo.o’, whereas:
  
            gfortran -save-temps -S foo.F
  
!      saves the preprocessor output in ‘foo.fi’, and then compiles to the
!      (implied) output file ‘foo.s’.
  
  
  File: gfortran.info,  Node: Code Gen Options,  Next: Interoperability Options,  Prev: Developer Options,  Up: Invoking GNU Fortran
*************** These machine-independent options contro
*** 1620,1701 ****
  in code generation.
  
     Most of them have both positive and negative forms; the negative form
! of '-ffoo' would be '-fno-foo'.  In the table below, only one of the
  forms is listed--the one which is not the default.  You can figure out
! the other form by either removing 'no-' or adding it.
  
! '-fno-automatic'
       Treat each program unit (except those marked as RECURSIVE) as if
!      the 'SAVE' statement were specified for every local variable and
       array referenced in it.  Does not affect common blocks.  (Some
!      Fortran compilers provide this option under the name '-static' or
!      '-save'.)  The default, which is '-fautomatic', uses the stack for
       local variables smaller than the value given by
!      '-fmax-stack-var-size'.  Use the option '-frecursive' to use no
       static memory.
  
!      Local variables or arrays having an explicit 'SAVE' attribute are
!      silently ignored unless the '-pedantic' option is added.
  
! '-ff2c'
       Generate code designed to be compatible with code generated by
!      'g77' and 'f2c'.
  
!      The calling conventions used by 'g77' (originally implemented in
!      'f2c') require functions that return type default 'REAL' to
!      actually return the C type 'double', and functions that return type
!      'COMPLEX' to return the values via an extra argument in the calling
       sequence that points to where to store the return value.  Under the
       default GNU calling conventions, such functions simply return their
!      results as they would in GNU C--default 'REAL' functions return the
!      C type 'float', and 'COMPLEX' functions return the GNU C type
!      'complex'.  Additionally, this option implies the
!      '-fsecond-underscore' option, unless '-fno-second-underscore' is
       explicitly requested.
  
       This does not affect the generation of code that interfaces with
!      the 'libgfortran' library.
  
       _Caution:_ It is not a good idea to mix Fortran code compiled with
!      '-ff2c' with code compiled with the default '-fno-f2c' calling
!      conventions as, calling 'COMPLEX' or default 'REAL' functions
       between program parts which were compiled with different calling
       conventions will break at execution time.
  
       _Caution:_ This will break code which passes intrinsic functions of
!      type default 'REAL' or 'COMPLEX' as actual arguments, as the
!      library implementations use the '-fno-f2c' calling conventions.
  
! '-fno-underscoring'
       Do not transform names of entities specified in the Fortran source
       file by appending underscores to them.
  
!      With '-funderscoring' in effect, GNU Fortran appends one underscore
       to external names.  This is done to ensure compatibility with code
       produced by many UNIX Fortran compilers.
  
       _Caution_: The default behavior of GNU Fortran is incompatible with
!      'f2c' and 'g77', please use the '-ff2c' option if you want object
       files compiled with GNU Fortran to be compatible with object code
       created with these tools.
  
!      Use of '-fno-underscoring' is not recommended unless you are
       experimenting with issues such as integration of GNU Fortran into
!      existing system environments (vis-a`-vis existing libraries, tools,
       and so on).
  
!      For example, with '-funderscoring', and assuming that 'j()' and
!      'max_count()' are external functions while 'my_var' and 'lvar' are
       local variables, a statement like
            I = J() + MAX_COUNT (MY_VAR, LVAR)
       is implemented as something akin to:
            i = j_() + max_count_(&my_var, &lvar);
  
!      With '-fno-underscoring', the same statement is implemented as:
  
            i = j() + max_count(&my_var, &lvar);
  
!      Use of '-fno-underscoring' allows direct specification of
       user-defined names while debugging and when interfacing GNU Fortran
       code with other languages.
  
--- 1620,1701 ----
  in code generation.
  
     Most of them have both positive and negative forms; the negative form
! of ‘-ffoo’ would be ‘-fno-foo’.  In the table below, only one of the
  forms is listed--the one which is not the default.  You can figure out
! the other form by either removing ‘no-’ or adding it.
  
! ‘-fno-automatic’
       Treat each program unit (except those marked as RECURSIVE) as if
!      the ‘SAVE’ statement were specified for every local variable and
       array referenced in it.  Does not affect common blocks.  (Some
!      Fortran compilers provide this option under the name ‘-static’ or
!      ‘-save’.)  The default, which is ‘-fautomatic’, uses the stack for
       local variables smaller than the value given by
!      ‘-fmax-stack-var-size’.  Use the option ‘-frecursive’ to use no
       static memory.
  
!      Local variables or arrays having an explicit ‘SAVE’ attribute are
!      silently ignored unless the ‘-pedantic’ option is added.
  
! ‘-ff2c’
       Generate code designed to be compatible with code generated by
!      ‘g77’ and ‘f2c’.
  
!      The calling conventions used by ‘g77’ (originally implemented in
!      ‘f2c’) require functions that return type default ‘REAL’ to
!      actually return the C type ‘double’, and functions that return type
!      ‘COMPLEX’ to return the values via an extra argument in the calling
       sequence that points to where to store the return value.  Under the
       default GNU calling conventions, such functions simply return their
!      results as they would in GNU C--default ‘REAL’ functions return the
!      C type ‘float’, and ‘COMPLEX’ functions return the GNU C type
!      ‘complex’.  Additionally, this option implies the
!      ‘-fsecond-underscore’ option, unless ‘-fno-second-underscore’ is
       explicitly requested.
  
       This does not affect the generation of code that interfaces with
!      the ‘libgfortran’ library.
  
       _Caution:_ It is not a good idea to mix Fortran code compiled with
!      ‘-ff2c’ with code compiled with the default ‘-fno-f2c’ calling
!      conventions as, calling ‘COMPLEX’ or default ‘REAL’ functions
       between program parts which were compiled with different calling
       conventions will break at execution time.
  
       _Caution:_ This will break code which passes intrinsic functions of
!      type default ‘REAL’ or ‘COMPLEX’ as actual arguments, as the
!      library implementations use the ‘-fno-f2c’ calling conventions.
  
! ‘-fno-underscoring’
       Do not transform names of entities specified in the Fortran source
       file by appending underscores to them.
  
!      With ‘-funderscoring’ in effect, GNU Fortran appends one underscore
       to external names.  This is done to ensure compatibility with code
       produced by many UNIX Fortran compilers.
  
       _Caution_: The default behavior of GNU Fortran is incompatible with
!      ‘f2c’ and ‘g77’, please use the ‘-ff2c’ option if you want object
       files compiled with GNU Fortran to be compatible with object code
       created with these tools.
  
!      Use of ‘-fno-underscoring’ is not recommended unless you are
       experimenting with issues such as integration of GNU Fortran into
!      existing system environments (vis-à-vis existing libraries, tools,
       and so on).
  
!      For example, with ‘-funderscoring’, and assuming that ‘j()’ and
!      ‘max_count()’ are external functions while ‘my_var’ and ‘lvar’ are
       local variables, a statement like
            I = J() + MAX_COUNT (MY_VAR, LVAR)
       is implemented as something akin to:
            i = j_() + max_count_(&my_var, &lvar);
  
!      With ‘-fno-underscoring’, the same statement is implemented as:
  
            i = j() + max_count(&my_var, &lvar);
  
!      Use of ‘-fno-underscoring’ allows direct specification of
       user-defined names while debugging and when interfacing GNU Fortran
       code with other languages.
  
*************** the other form by either removing 'no-'
*** 1709,1715 ****
       can require significant effort, and, unlike naming disagreements,
       linkers normally cannot detect disagreements in these other areas.
  
!      Also, note that with '-fno-underscoring', the lack of appended
       underscores introduces the very real possibility that a
       user-defined external name will conflict with a name in a system
       library, which could make finding unresolved-reference bugs quite
--- 1709,1715 ----
       can require significant effort, and, unlike naming disagreements,
       linkers normally cannot detect disagreements in these other areas.
  
!      Also, note that with ‘-fno-underscoring’, the lack of appended
       underscores introduces the very real possibility that a
       user-defined external name will conflict with a name in a system
       library, which could make finding unresolved-reference bugs quite
*************** the other form by either removing 'no-'
*** 1722,1728 ****
       are mangled to prevent accidental linking between procedures with
       incompatible interfaces.
  
! '-fsecond-underscore'
       By default, GNU Fortran appends an underscore to external names.
       If this option is used GNU Fortran appends two underscores to names
       with underscores and one underscore to external names with no
--- 1722,1728 ----
       are mangled to prevent accidental linking between procedures with
       incompatible interfaces.
  
! ‘-fsecond-underscore’
       By default, GNU Fortran appends an underscore to external names.
       If this option is used GNU Fortran appends two underscores to names
       with underscores and one underscore to external names with no
*************** the other form by either removing 'no-'
*** 1730,1769 ****
       names with underscores to avoid naming collisions with external
       names.
  
!      This option has no effect if '-fno-underscoring' is in effect.  It
!      is implied by the '-ff2c' option.
  
!      Otherwise, with this option, an external name such as 'MAX_COUNT'
       is implemented as a reference to the link-time external symbol
!      'max_count__', instead of 'max_count_'.  This is required for
!      compatibility with 'g77' and 'f2c', and is implied by use of the
!      '-ff2c' option.
  
! '-fcoarray=<KEYWORD>'
  
!      'none'
            Disable coarray support; using coarray declarations and
            image-control statements will produce a compile-time error.
            (Default)
  
!      'single'
!           Single-image mode, i.e.  'num_images()' is always one.
  
!      'lib'
            Library-based coarray parallelization; a suitable GNU Fortran
            coarray library needs to be linked.
  
! '-fcheck=<KEYWORD>'
  
       Enable the generation of run-time checks; the argument shall be a
       comma-delimited list of the following keywords.  Prefixing a check
!      with 'no-' disables it if it was activated by a previous
       specification.
  
!      'all'
!           Enable all run-time test of '-fcheck'.
  
!      'array-temps'
            Warns at run time when for passing an actual argument a
            temporary array had to be generated.  The information
            generated by this warning is sometimes useful in optimization,
--- 1730,1769 ----
       names with underscores to avoid naming collisions with external
       names.
  
!      This option has no effect if ‘-fno-underscoring’ is in effect.  It
!      is implied by the ‘-ff2c’ option.
  
!      Otherwise, with this option, an external name such as ‘MAX_COUNT’
       is implemented as a reference to the link-time external symbol
!      ‘max_count__’, instead of ‘max_count_’.  This is required for
!      compatibility with ‘g77’ and ‘f2c’, and is implied by use of the
!      ‘-ff2c’ option.
  
! ‘-fcoarray=<KEYWORD>’
  
!      ‘none’
            Disable coarray support; using coarray declarations and
            image-control statements will produce a compile-time error.
            (Default)
  
!      ‘single’
!           Single-image mode, i.e.  ‘num_images()’ is always one.
  
!      ‘lib’
            Library-based coarray parallelization; a suitable GNU Fortran
            coarray library needs to be linked.
  
! ‘-fcheck=<KEYWORD>’
  
       Enable the generation of run-time checks; the argument shall be a
       comma-delimited list of the following keywords.  Prefixing a check
!      with ‘no-’ disables it if it was activated by a previous
       specification.
  
!      ‘all’
!           Enable all run-time test of ‘-fcheck’.
  
!      ‘array-temps’
            Warns at run time when for passing an actual argument a
            temporary array had to be generated.  The information
            generated by this warning is sometimes useful in optimization,
*************** the other form by either removing 'no-'
*** 1771,1781 ****
  
            Note: The warning is only printed once per location.
  
!      'bits'
            Enable generation of run-time checks for invalid arguments to
            the bit manipulation intrinsics.
  
!      'bounds'
            Enable generation of run-time checks for array subscripts and
            against the declared minimum and maximum values.  It also
            checks array indices for assumed and deferred shape arrays
--- 1771,1781 ----
  
            Note: The warning is only printed once per location.
  
!      ‘bits’
            Enable generation of run-time checks for invalid arguments to
            the bit manipulation intrinsics.
  
!      ‘bounds’
            Enable generation of run-time checks for array subscripts and
            against the declared minimum and maximum values.  It also
            checks array indices for assumed and deferred shape arrays
*************** the other form by either removing 'no-'
*** 1783,1824 ****
            string lengths are equal for character array constructors
            without an explicit typespec.
  
!           Some checks require that '-fcheck=bounds' is set for the
            compilation of the main program.
  
            Note: In the future this may also include other forms of
            checking, e.g., checking substring references.
  
!      'do'
            Enable generation of run-time checks for invalid modification
            of loop iteration variables.
  
!      'mem'
            Enable generation of run-time checks for memory allocation.
            Note: This option does not affect explicit allocations using
!           the 'ALLOCATE' statement, which will be always checked.
  
!      'pointer'
            Enable generation of run-time checks for pointers and
            allocatables.
  
!      'recursion'
            Enable generation of run-time checks for recursively called
            subroutines and functions which are not marked as recursive.
!           See also '-frecursive'.  Note: This check does not work for
            OpenMP programs and is disabled if used together with
!           '-frecursive' and '-fopenmp'.
  
!      Example: Assuming you have a file 'foo.f90', the command
              gfortran -fcheck=all,no-array-temps foo.f90
       will compile the file with all checks enabled as specified above
       except warnings for generated array temporaries.
  
! '-fbounds-check'
!      Deprecated alias for '-fcheck=bounds'.
  
! '-ftail-call-workaround'
! '-ftail-call-workaround=N'
       Some C interfaces to Fortran codes violate the gfortran ABI by
       omitting the hidden character length arguments as described in
       *Note Argument passing conventions::.  This can lead to crashes
--- 1783,1824 ----
            string lengths are equal for character array constructors
            without an explicit typespec.
  
!           Some checks require that ‘-fcheck=bounds’ is set for the
            compilation of the main program.
  
            Note: In the future this may also include other forms of
            checking, e.g., checking substring references.
  
!      ‘do’
            Enable generation of run-time checks for invalid modification
            of loop iteration variables.
  
!      ‘mem’
            Enable generation of run-time checks for memory allocation.
            Note: This option does not affect explicit allocations using
!           the ‘ALLOCATE’ statement, which will be always checked.
  
!      ‘pointer’
            Enable generation of run-time checks for pointers and
            allocatables.
  
!      ‘recursion’
            Enable generation of run-time checks for recursively called
            subroutines and functions which are not marked as recursive.
!           See also ‘-frecursive’.  Note: This check does not work for
            OpenMP programs and is disabled if used together with
!           ‘-frecursive’ and ‘-fopenmp’.
  
!      Example: Assuming you have a file ‘foo.f90’, the command
              gfortran -fcheck=all,no-array-temps foo.f90
       will compile the file with all checks enabled as specified above
       except warnings for generated array temporaries.
  
! ‘-fbounds-check’
!      Deprecated alias for ‘-fcheck=bounds’.
  
! ‘-ftail-call-workaround’
! ‘-ftail-call-workaround=N’
       Some C interfaces to Fortran codes violate the gfortran ABI by
       omitting the hidden character length arguments as described in
       *Note Argument passing conventions::.  This can lead to crashes
*************** the other form by either removing 'no-'
*** 1826,1857 ****
  
       To provide a workaround for existing binary packages, this option
       disables tail call optimization for gfortran procedures with
!      character arguments.  With '-ftail-call-workaround=2' tail call
       optimization is disabled in all gfortran procedures with character
!      arguments, with '-ftail-call-workaround=1' or equivalent
!      '-ftail-call-workaround' only in gfortran procedures with character
       arguments that call implicitly prototyped procedures.
  
       Using this option can lead to problems including crashes due to
       insufficient stack space.
  
       It is _very strongly_ recommended to fix the code in question.  The
!      '-fc-prototypes-external' option can be used to generate prototypes
       which conform to gfortran's ABI, for inclusion in the source code.
  
       Support for this option will likely be withdrawn in a future
       release of gfortran.
  
!      The negative form, '-fno-tail-call-workaround' or equivalent
!      '-ftail-call-workaround=0', can be used to disable this option.
  
!      Default is currently '-ftail-call-workaround', this will change in
       future releases.
  
! '-fcheck-array-temporaries'
!      Deprecated alias for '-fcheck=array-temps'.
  
! '-fmax-array-constructor=N'
       This option can be used to increase the upper limit permitted in
       array constructors.  The code below requires this option to expand
       the array at compile time.
--- 1826,1857 ----
  
       To provide a workaround for existing binary packages, this option
       disables tail call optimization for gfortran procedures with
!      character arguments.  With ‘-ftail-call-workaround=2’ tail call
       optimization is disabled in all gfortran procedures with character
!      arguments, with ‘-ftail-call-workaround=1’ or equivalent
!      ‘-ftail-call-workaround’ only in gfortran procedures with character
       arguments that call implicitly prototyped procedures.
  
       Using this option can lead to problems including crashes due to
       insufficient stack space.
  
       It is _very strongly_ recommended to fix the code in question.  The
!      ‘-fc-prototypes-external’ option can be used to generate prototypes
       which conform to gfortran's ABI, for inclusion in the source code.
  
       Support for this option will likely be withdrawn in a future
       release of gfortran.
  
!      The negative form, ‘-fno-tail-call-workaround’ or equivalent
!      ‘-ftail-call-workaround=0’, can be used to disable this option.
  
!      Default is currently ‘-ftail-call-workaround’, this will change in
       future releases.
  
! ‘-fcheck-array-temporaries’
!      Deprecated alias for ‘-fcheck=array-temps’.
  
! ‘-fmax-array-constructor=N’
       This option can be used to increase the upper limit permitted in
       array constructors.  The code below requires this option to expand
       the array at compile time.
*************** the other form by either removing 'no-'
*** 1869,1880 ****
  
       The default value for N is 65535.
  
! '-fmax-stack-var-size=N'
       This option specifies the size in bytes of the largest array that
       will be put on the stack; if the size is exceeded static memory is
       used (except in procedures marked as RECURSIVE). Use the option
!      '-frecursive' to allow for recursive procedures which do not have a
!      RECURSIVE attribute or for parallel programs.  Use '-fno-automatic'
       to never use the stack.
  
       This option currently only affects local arrays declared with
--- 1869,1880 ----
  
       The default value for N is 65535.
  
! ‘-fmax-stack-var-size=N’
       This option specifies the size in bytes of the largest array that
       will be put on the stack; if the size is exceeded static memory is
       used (except in procedures marked as RECURSIVE). Use the option
!      ‘-frecursive’ to allow for recursive procedures which do not have a
!      RECURSIVE attribute or for parallel programs.  Use ‘-fno-automatic’
       to never use the stack.
  
       This option currently only affects local arrays declared with
*************** the other form by either removing 'no-'
*** 1883,1903 ****
  
       The default value for N is 65536.
  
! '-fstack-arrays'
       Adding this option will make the Fortran compiler put all arrays of
       unknown size and array temporaries onto stack memory.  If your
       program uses very large local arrays it is possible that you will
       have to extend your runtime limits for stack memory on some
       operating systems.  This flag is enabled by default at optimization
!      level '-Ofast' unless '-fmax-stack-var-size' is specified.
  
! '-fpack-derived'
       This option tells GNU Fortran to pack derived type members as
       closely as possible.  Code compiled with this option is likely to
       be incompatible with code compiled without this option, and may
       execute slower.
  
! '-frepack-arrays'
       In some circumstances GNU Fortran may pass assumed shape array
       sections via a descriptor describing a noncontiguous area of
       memory.  This option adds code to the function prologue to repack
--- 1883,1903 ----
  
       The default value for N is 65536.
  
! ‘-fstack-arrays’
       Adding this option will make the Fortran compiler put all arrays of
       unknown size and array temporaries onto stack memory.  If your
       program uses very large local arrays it is possible that you will
       have to extend your runtime limits for stack memory on some
       operating systems.  This flag is enabled by default at optimization
!      level ‘-Ofast’ unless ‘-fmax-stack-var-size’ is specified.
  
! ‘-fpack-derived’
       This option tells GNU Fortran to pack derived type members as
       closely as possible.  Code compiled with this option is likely to
       be incompatible with code compiled without this option, and may
       execute slower.
  
! ‘-frepack-arrays’
       In some circumstances GNU Fortran may pass assumed shape array
       sections via a descriptor describing a noncontiguous area of
       memory.  This option adds code to the function prologue to repack
*************** the other form by either removing 'no-'
*** 1907,1924 ****
       introduce significant overhead to the function call, especially
       when the passed data is noncontiguous.
  
! '-fshort-enums'
       This option is provided for interoperability with C code that was
!      compiled with the '-fshort-enums' option.  It will make GNU Fortran
!      choose the smallest 'INTEGER' kind a given enumerator set will fit
       in, and give all its enumerators this kind.
  
! '-finline-arg-packing'
       When passing an assumed-shape argument of a procedure as actual
       argument to an assumed-size or explicit size or as argument to a
       procedure that does not have an explicit interface, the argument
       may have to be packed, that is put into contiguous memory.  An
!      example is the call to 'foo' in
              subroutine foo(a)
                 real, dimension(*) :: a
              end subroutine foo
--- 1907,1924 ----
       introduce significant overhead to the function call, especially
       when the passed data is noncontiguous.
  
! ‘-fshort-enums’
       This option is provided for interoperability with C code that was
!      compiled with the ‘-fshort-enums’ option.  It will make GNU Fortran
!      choose the smallest ‘INTEGER’ kind a given enumerator set will fit
       in, and give all its enumerators this kind.
  
! ‘-finline-arg-packing’
       When passing an assumed-shape argument of a procedure as actual
       argument to an assumed-size or explicit size or as argument to a
       procedure that does not have an explicit interface, the argument
       may have to be packed, that is put into contiguous memory.  An
!      example is the call to ‘foo’ in
              subroutine foo(a)
                 real, dimension(*) :: a
              end subroutine foo
*************** the other form by either removing 'no-'
*** 1927,2079 ****
                 call foo(b)
              end subroutine bar
  
!      When '-finline-arg-packing' is in effect, this packing will be
       performed by inline code.  This allows for more optimization while
       increasing code size.
  
!      '-finline-arg-packing' is implied by any of the '-O' options except
!      when optimizing for size via '-Os'.  If the code contains a very
       large number of argument that have to be packed, code size and also
       compilation time may become excessive.  If that is the case, it may
       be better to disable this option.  Instances of packing can be
!      found by using '-Warray-temporaries'.
  
! '-fexternal-blas'
!      This option will make 'gfortran' generate calls to BLAS functions
!      for some matrix operations like 'MATMUL', instead of using our own
       algorithms, if the size of the matrices involved is larger than a
!      given limit (see '-fblas-matmul-limit').  This may be profitable if
       an optimized vendor BLAS library is available.  The BLAS library
       will have to be specified at link time.
  
! '-fblas-matmul-limit=N'
!      Only significant when '-fexternal-blas' is in effect.  Matrix
       multiplication of matrices with size larger than (or equal to) N
       will be performed by calls to BLAS functions, while others will be
!      handled by 'gfortran' internal algorithms.  If the matrices
       involved are not square, the size comparison is performed using the
       geometric mean of the dimensions of the argument and result
       matrices.
  
       The default value for N is 30.
  
! '-finline-matmul-limit=N'
!      When front-end optimization is active, some calls to the 'MATMUL'
       intrinsic function will be inlined.  This may result in code size
       increase if the size of the matrix cannot be determined at compile
       time, as code for both cases is generated.  Setting
!      '-finline-matmul-limit=0' will disable inlining in all cases.
       Setting this option with a value of N will produce inline code for
       matrices with size up to N.  If the matrices involved are not
       square, the size comparison is performed using the geometric mean
       of the dimensions of the argument and result matrices.
  
!      The default value for N is 30.  The '-fblas-matmul-limit' can be
       used to change this value.
  
! '-frecursive'
       Allow indirect recursion by forcing all local arrays to be
       allocated on the stack.  This flag cannot be used together with
!      '-fmax-stack-var-size=' or '-fno-automatic'.
  
! '-finit-local-zero'
! '-finit-derived'
! '-finit-integer=N'
! '-finit-real=<ZERO|INF|-INF|NAN|SNAN>'
! '-finit-logical=<TRUE|FALSE>'
! '-finit-character=N'
!      The '-finit-local-zero' option instructs the compiler to initialize
!      local 'INTEGER', 'REAL', and 'COMPLEX' variables to zero, 'LOGICAL'
!      variables to false, and 'CHARACTER' variables to a string of null
       bytes.  Finer-grained initialization options are provided by the
!      '-finit-integer=N', '-finit-real=<ZERO|INF|-INF|NAN|SNAN>' (which
!      also initializes the real and imaginary parts of local 'COMPLEX'
!      variables), '-finit-logical=<TRUE|FALSE>', and '-finit-character=N'
       (where N is an ASCII character value) options.
  
!      With '-finit-derived', components of derived type variables will be
       initialized according to these flags.  Components whose type is not
!      covered by an explicit '-finit-*' flag will be treated as described
!      above with '-finit-local-zero'.
  
       These options do not initialize
!         * objects with the POINTER attribute
!         * allocatable arrays
!         * variables that appear in an 'EQUIVALENCE' statement.
       (These limitations may be removed in future releases).
  
!      Note that the '-finit-real=nan' option initializes 'REAL' and
!      'COMPLEX' variables with a quiet NaN. For a signalling NaN use
!      '-finit-real=snan'; note, however, that compile-time optimizations
       may convert them into quiet NaN and that trapping needs to be
!      enabled (e.g.  via '-ffpe-trap').
  
!      The '-finit-integer' option will parse the value into an integer of
!      type 'INTEGER(kind=C_LONG)' on the host.  Said value is then
       assigned to the integer variables in the Fortran code, which might
       result in wraparound if the value is too large for the kind.
  
!      Finally, note that enabling any of the '-finit-*' options will
!      silence warnings that would have been emitted by '-Wuninitialized'
       for the affected local variables.
  
! '-falign-commons'
!      By default, 'gfortran' enforces proper alignment of all variables
!      in a 'COMMON' block by padding them as needed.  On certain
       platforms this is mandatory, on others it increases performance.
!      If a 'COMMON' block is not declared with consistent data types
       everywhere, this padding can cause trouble, and
!      '-fno-align-commons' can be used to disable automatic alignment.
       The same form of this option should be used for all files that
!      share a 'COMMON' block.  To avoid potential alignment issues in
!      'COMMON' blocks, it is recommended to order objects from largest to
       smallest.
  
! '-fno-protect-parens'
       By default the parentheses in expression are honored for all
       optimization levels such that the compiler does not do any
!      re-association.  Using '-fno-protect-parens' allows the compiler to
!      reorder 'REAL' and 'COMPLEX' expressions to produce faster code.
!      Note that for the re-association optimization '-fno-signed-zeros'
!      and '-fno-trapping-math' need to be in effect.  The parentheses
!      protection is enabled by default, unless '-Ofast' is given.
  
! '-frealloc-lhs'
       An allocatable left-hand side of an intrinsic assignment is
       automatically (re)allocated if it is either unallocated or has a
       different shape.  The option is enabled by default except when
!      '-std=f95' is given.  See also '-Wrealloc-lhs'.
  
! '-faggressive-function-elimination'
       Functions with identical argument lists are eliminated within
!      statements, regardless of whether these functions are marked 'PURE'
       or not.  For example, in
              a = f(b,c) + f(b,c)
!      there will only be a single call to 'f'.  This option only works if
!      '-ffrontend-optimize' is in effect.
  
! '-ffrontend-optimize'
       This option performs front-end optimization, based on manipulating
!      parts the Fortran parse tree.  Enabled by default by any '-O'
!      option except '-O0' and '-Og'.  Optimizations enabled by this
       option include:
!         * inlining calls to 'MATMUL',
!         * elimination of identical function calls within expressions,
!         * removing unnecessary calls to 'TRIM' in comparisons and
            assignments,
!         * replacing 'TRIM(a)' with 'a(1:LEN_TRIM(a))' and
!         * short-circuiting of logical operators ('.AND.' and '.OR.').
!      It can be deselected by specifying '-fno-frontend-optimize'.
  
! '-ffrontend-loop-interchange'
       Attempt to interchange loops in the Fortran front end where
!      profitable.  Enabled by default by any '-O' option.  At the moment,
!      this option only affects 'FORALL' and 'DO CONCURRENT' statements
       with several forall triplets.
  
     *Note Options for Code Generation Conventions: (gcc)Code Gen Options,
! for information on more options offered by the GBE shared by 'gfortran',
! 'gcc', and other GNU compilers.
  
  
  File: gfortran.info,  Node: Interoperability Options,  Next: Environment Variables,  Prev: Code Gen Options,  Up: Invoking GNU Fortran
--- 1927,2079 ----
                 call foo(b)
              end subroutine bar
  
!      When ‘-finline-arg-packing’ is in effect, this packing will be
       performed by inline code.  This allows for more optimization while
       increasing code size.
  
!      ‘-finline-arg-packing’ is implied by any of the ‘-O’ options except
!      when optimizing for size via ‘-Os’.  If the code contains a very
       large number of argument that have to be packed, code size and also
       compilation time may become excessive.  If that is the case, it may
       be better to disable this option.  Instances of packing can be
!      found by using ‘-Warray-temporaries’.
  
! ‘-fexternal-blas’
!      This option will make ‘gfortran’ generate calls to BLAS functions
!      for some matrix operations like ‘MATMUL’, instead of using our own
       algorithms, if the size of the matrices involved is larger than a
!      given limit (see ‘-fblas-matmul-limit’).  This may be profitable if
       an optimized vendor BLAS library is available.  The BLAS library
       will have to be specified at link time.
  
! ‘-fblas-matmul-limit=N’
!      Only significant when ‘-fexternal-blas’ is in effect.  Matrix
       multiplication of matrices with size larger than (or equal to) N
       will be performed by calls to BLAS functions, while others will be
!      handled by ‘gfortran’ internal algorithms.  If the matrices
       involved are not square, the size comparison is performed using the
       geometric mean of the dimensions of the argument and result
       matrices.
  
       The default value for N is 30.
  
! ‘-finline-matmul-limit=N’
!      When front-end optimization is active, some calls to the ‘MATMUL’
       intrinsic function will be inlined.  This may result in code size
       increase if the size of the matrix cannot be determined at compile
       time, as code for both cases is generated.  Setting
!      ‘-finline-matmul-limit=0’ will disable inlining in all cases.
       Setting this option with a value of N will produce inline code for
       matrices with size up to N.  If the matrices involved are not
       square, the size comparison is performed using the geometric mean
       of the dimensions of the argument and result matrices.
  
!      The default value for N is 30.  The ‘-fblas-matmul-limit’ can be
       used to change this value.
  
! ‘-frecursive’
       Allow indirect recursion by forcing all local arrays to be
       allocated on the stack.  This flag cannot be used together with
!      ‘-fmax-stack-var-size=’ or ‘-fno-automatic’.
  
! ‘-finit-local-zero’
! ‘-finit-derived’
! ‘-finit-integer=N’
! ‘-finit-real=<ZERO|INF|-INF|NAN|SNAN>’
! ‘-finit-logical=<TRUE|FALSE>’
! ‘-finit-character=N’
!      The ‘-finit-local-zero’ option instructs the compiler to initialize
!      local ‘INTEGER’, ‘REAL’, and ‘COMPLEX’ variables to zero, ‘LOGICAL’
!      variables to false, and ‘CHARACTER’ variables to a string of null
       bytes.  Finer-grained initialization options are provided by the
!      ‘-finit-integer=N’, ‘-finit-real=<ZERO|INF|-INF|NAN|SNAN>’ (which
!      also initializes the real and imaginary parts of local ‘COMPLEX’
!      variables), ‘-finit-logical=<TRUE|FALSE>’, and ‘-finit-character=N’
       (where N is an ASCII character value) options.
  
!      With ‘-finit-derived’, components of derived type variables will be
       initialized according to these flags.  Components whose type is not
!      covered by an explicit ‘-finit-*’ flag will be treated as described
!      above with ‘-finit-local-zero’.
  
       These options do not initialize
!         • objects with the POINTER attribute
!         • allocatable arrays
!         • variables that appear in an ‘EQUIVALENCE’ statement.
       (These limitations may be removed in future releases).
  
!      Note that the ‘-finit-real=nan’ option initializes ‘REAL’ and
!      ‘COMPLEX’ variables with a quiet NaN. For a signalling NaN use
!      ‘-finit-real=snan’; note, however, that compile-time optimizations
       may convert them into quiet NaN and that trapping needs to be
!      enabled (e.g.  via ‘-ffpe-trap’).
  
!      The ‘-finit-integer’ option will parse the value into an integer of
!      type ‘INTEGER(kind=C_LONG)’ on the host.  Said value is then
       assigned to the integer variables in the Fortran code, which might
       result in wraparound if the value is too large for the kind.
  
!      Finally, note that enabling any of the ‘-finit-*’ options will
!      silence warnings that would have been emitted by ‘-Wuninitialized’
       for the affected local variables.
  
! ‘-falign-commons’
!      By default, ‘gfortran’ enforces proper alignment of all variables
!      in a ‘COMMON’ block by padding them as needed.  On certain
       platforms this is mandatory, on others it increases performance.
!      If a ‘COMMON’ block is not declared with consistent data types
       everywhere, this padding can cause trouble, and
!      ‘-fno-align-commons’ can be used to disable automatic alignment.
       The same form of this option should be used for all files that
!      share a ‘COMMON’ block.  To avoid potential alignment issues in
!      ‘COMMON’ blocks, it is recommended to order objects from largest to
       smallest.
  
! ‘-fno-protect-parens’
       By default the parentheses in expression are honored for all
       optimization levels such that the compiler does not do any
!      re-association.  Using ‘-fno-protect-parens’ allows the compiler to
!      reorder ‘REAL’ and ‘COMPLEX’ expressions to produce faster code.
!      Note that for the re-association optimization ‘-fno-signed-zeros’
!      and ‘-fno-trapping-math’ need to be in effect.  The parentheses
!      protection is enabled by default, unless ‘-Ofast’ is given.
  
! ‘-frealloc-lhs’
       An allocatable left-hand side of an intrinsic assignment is
       automatically (re)allocated if it is either unallocated or has a
       different shape.  The option is enabled by default except when
!      ‘-std=f95’ is given.  See also ‘-Wrealloc-lhs’.
  
! ‘-faggressive-function-elimination’
       Functions with identical argument lists are eliminated within
!      statements, regardless of whether these functions are marked ‘PURE’
       or not.  For example, in
              a = f(b,c) + f(b,c)
!      there will only be a single call to ‘f’.  This option only works if
!      ‘-ffrontend-optimize’ is in effect.
  
! ‘-ffrontend-optimize’
       This option performs front-end optimization, based on manipulating
!      parts the Fortran parse tree.  Enabled by default by any ‘-O’
!      option except ‘-O0’ and ‘-Og’.  Optimizations enabled by this
       option include:
!         • inlining calls to ‘MATMUL’,
!         • elimination of identical function calls within expressions,
!         • removing unnecessary calls to ‘TRIM’ in comparisons and
            assignments,
!         • replacing ‘TRIM(a)’ with ‘a(1:LEN_TRIM(a))’ and
!         • short-circuiting of logical operators (‘.AND.’ and ‘.OR.’).
!      It can be deselected by specifying ‘-fno-frontend-optimize’.
  
! ‘-ffrontend-loop-interchange’
       Attempt to interchange loops in the Fortran front end where
!      profitable.  Enabled by default by any ‘-O’ option.  At the moment,
!      this option only affects ‘FORALL’ and ‘DO CONCURRENT’ statements
       with several forall triplets.
  
     *Note Options for Code Generation Conventions: (gcc)Code Gen Options,
! for information on more options offered by the GBE shared by ‘gfortran’,
! ‘gcc’, and other GNU compilers.
  
  
  File: gfortran.info,  Node: Interoperability Options,  Next: Environment Variables,  Prev: Code Gen Options,  Up: Invoking GNU Fortran
*************** File: gfortran.info,  Node: Interoperabi
*** 2082,2135 ****
  ======================================================
  
  -fc-prototypes
!      This option will generate C prototypes from 'BIND(C)' variable
       declarations, types and procedure interfaces and writes them to
!      standard output.  'ENUM' is not yet supported.
  
       The generated prototypes may need inclusion of an appropriate
!      header, such as '<stdint.h>' or '<stdlib.h>'.  For types which are
!      not specified using the appropriate kind from the 'iso_c_binding'
       module, a warning is added as a comment to the code.
  
!      For function pointers, a pointer to a function returning 'int'
       without an explicit argument list is generated.
  
       Example of use:
            $ gfortran -fc-prototypes -fsyntax-only foo.f90 > foo.h
       where the C code intended for interoperating with the Fortran code
!      then uses '#include "foo.h"'.
  
  -fc-prototypes-external
       This option will generate C prototypes from external functions and
       subroutines and write them to standard output.  This may be useful
       for making sure that C bindings to Fortran code are correct.  This
!      option does not generate prototypes for 'BIND(C)' procedures, use
!      '-fc-prototypes' for that.
  
       The generated prototypes may need inclusion of an appropriate
!      header, such as '<stdint.h>' or '<stdlib.h>'.
  
       This is primarily meant for legacy code to ensure that existing C
!      bindings match what 'gfortran' emits.  The generated C prototypes
       should be correct for the current version of the compiler, but may
!      not match what other compilers or earlier versions of 'gfortran'
!      need.  For new developments, use of the 'BIND(C)' features is
       recommended.
  
       Example of use:
            $ gfortran -fc-prototypes-external -fsyntax-only foo.f > foo.h
       where the C code intended for interoperating with the Fortran code
!      then uses '#include "foo.h"'.
  
  
  File: gfortran.info,  Node: Environment Variables,  Prev: Interoperability Options,  Up: Invoking GNU Fortran
  
! 2.12 Environment variables affecting 'gfortran'
  ===============================================
  
! The 'gfortran' compiler currently does not make use of any environment
  variables to control its operation above and beyond those that affect
! the operation of 'gcc'.
  
     *Note Environment Variables Affecting GCC: (gcc)Environment
  Variables, for information on environment variables.
--- 2082,2135 ----
  ======================================================
  
  -fc-prototypes
!      This option will generate C prototypes from ‘BIND(C)’ variable
       declarations, types and procedure interfaces and writes them to
!      standard output.  ‘ENUM’ is not yet supported.
  
       The generated prototypes may need inclusion of an appropriate
!      header, such as ‘<stdint.h>’ or ‘<stdlib.h>’.  For types which are
!      not specified using the appropriate kind from the ‘iso_c_binding’
       module, a warning is added as a comment to the code.
  
!      For function pointers, a pointer to a function returning ‘int’
       without an explicit argument list is generated.
  
       Example of use:
            $ gfortran -fc-prototypes -fsyntax-only foo.f90 > foo.h
       where the C code intended for interoperating with the Fortran code
!      then uses ‘#include "foo.h"’.
  
  -fc-prototypes-external
       This option will generate C prototypes from external functions and
       subroutines and write them to standard output.  This may be useful
       for making sure that C bindings to Fortran code are correct.  This
!      option does not generate prototypes for ‘BIND(C)’ procedures, use
!      ‘-fc-prototypes’ for that.
  
       The generated prototypes may need inclusion of an appropriate
!      header, such as ‘<stdint.h>’ or ‘<stdlib.h>’.
  
       This is primarily meant for legacy code to ensure that existing C
!      bindings match what ‘gfortran’ emits.  The generated C prototypes
       should be correct for the current version of the compiler, but may
!      not match what other compilers or earlier versions of ‘gfortran’
!      need.  For new developments, use of the ‘BIND(C)’ features is
       recommended.
  
       Example of use:
            $ gfortran -fc-prototypes-external -fsyntax-only foo.f > foo.h
       where the C code intended for interoperating with the Fortran code
!      then uses ‘#include "foo.h"’.
  
  
  File: gfortran.info,  Node: Environment Variables,  Prev: Interoperability Options,  Up: Invoking GNU Fortran
  
! 2.12 Environment variables affecting ‘gfortran’
  ===============================================
  
! The ‘gfortran’ compiler currently does not make use of any environment
  variables to control its operation above and beyond those that affect
! the operation of ‘gcc’.
  
     *Note Environment Variables Affecting GCC: (gcc)Environment
  Variables, for information on environment variables.
*************** File: gfortran.info,  Node: Runtime,  Ne
*** 2143,2149 ****
  3 Runtime: Influencing runtime behavior with environment variables
  ******************************************************************
  
! The behavior of the 'gfortran' can be influenced by environment
  variables.
  
     Malformed environment variables are silently ignored.
--- 2143,2149 ----
  3 Runtime: Influencing runtime behavior with environment variables
  ******************************************************************
  
! The behavior of the ‘gfortran’ can be influenced by environment
  variables.
  
     Malformed environment variables are silently ignored.
*************** variables.
*** 2167,2192 ****
  
  File: gfortran.info,  Node: TMPDIR,  Next: GFORTRAN_STDIN_UNIT,  Up: Runtime
  
! 3.1 'TMPDIR'--Directory for scratch files
  =========================================
  
! When opening a file with 'STATUS='SCRATCH'', GNU Fortran tries to create
  the file in one of the potential directories by testing each directory
  in the order below.
  
!   1. The environment variable 'TMPDIR', if it exists.
  
!   2. On the MinGW target, the directory returned by the 'GetTempPath'
!      function.  Alternatively, on the Cygwin target, the 'TMP' and
!      'TEMP' environment variables, if they exist, in that order.
  
!   3. The 'P_tmpdir' macro if it is defined, otherwise the directory
!      '/tmp'.
  
  
  File: gfortran.info,  Node: GFORTRAN_STDIN_UNIT,  Next: GFORTRAN_STDOUT_UNIT,  Prev: TMPDIR,  Up: Runtime
  
! 3.2 'GFORTRAN_STDIN_UNIT'--Unit number for standard input
  =========================================================
  
  This environment variable can be used to select the unit number
--- 2167,2192 ----
  
  File: gfortran.info,  Node: TMPDIR,  Next: GFORTRAN_STDIN_UNIT,  Up: Runtime
  
! 3.1 ‘TMPDIR’--Directory for scratch files
  =========================================
  
! When opening a file with ‘STATUS='SCRATCH'’, GNU Fortran tries to create
  the file in one of the potential directories by testing each directory
  in the order below.
  
!   1. The environment variable ‘TMPDIR’, if it exists.
  
!   2. On the MinGW target, the directory returned by the ‘GetTempPath’
!      function.  Alternatively, on the Cygwin target, the ‘TMP’ and
!      ‘TEMP’ environment variables, if they exist, in that order.
  
!   3. The ‘P_tmpdir’ macro if it is defined, otherwise the directory
!      ‘/tmp’.
  
  
  File: gfortran.info,  Node: GFORTRAN_STDIN_UNIT,  Next: GFORTRAN_STDOUT_UNIT,  Prev: TMPDIR,  Up: Runtime
  
! 3.2 ‘GFORTRAN_STDIN_UNIT’--Unit number for standard input
  =========================================================
  
  This environment variable can be used to select the unit number
*************** default value is 5.
*** 2196,2202 ****
  
  File: gfortran.info,  Node: GFORTRAN_STDOUT_UNIT,  Next: GFORTRAN_STDERR_UNIT,  Prev: GFORTRAN_STDIN_UNIT,  Up: Runtime
  
! 3.3 'GFORTRAN_STDOUT_UNIT'--Unit number for standard output
  ===========================================================
  
  This environment variable can be used to select the unit number
--- 2196,2202 ----
  
  File: gfortran.info,  Node: GFORTRAN_STDOUT_UNIT,  Next: GFORTRAN_STDERR_UNIT,  Prev: GFORTRAN_STDIN_UNIT,  Up: Runtime
  
! 3.3 ‘GFORTRAN_STDOUT_UNIT’--Unit number for standard output
  ===========================================================
  
  This environment variable can be used to select the unit number
*************** default value is 6.
*** 2206,2212 ****
  
  File: gfortran.info,  Node: GFORTRAN_STDERR_UNIT,  Next: GFORTRAN_UNBUFFERED_ALL,  Prev: GFORTRAN_STDOUT_UNIT,  Up: Runtime
  
! 3.4 'GFORTRAN_STDERR_UNIT'--Unit number for standard error
  ==========================================================
  
  This environment variable can be used to select the unit number
--- 2206,2212 ----
  
  File: gfortran.info,  Node: GFORTRAN_STDERR_UNIT,  Next: GFORTRAN_UNBUFFERED_ALL,  Prev: GFORTRAN_STDOUT_UNIT,  Up: Runtime
  
! 3.4 ‘GFORTRAN_STDERR_UNIT’--Unit number for standard error
  ==========================================================
  
  This environment variable can be used to select the unit number
*************** default value is 0.
*** 2216,2267 ****
  
  File: gfortran.info,  Node: GFORTRAN_UNBUFFERED_ALL,  Next: GFORTRAN_UNBUFFERED_PRECONNECTED,  Prev: GFORTRAN_STDERR_UNIT,  Up: Runtime
  
! 3.5 'GFORTRAN_UNBUFFERED_ALL'--Do not buffer I/O on all units
  =============================================================
  
  This environment variable controls whether all I/O is unbuffered.  If
! the first letter is 'y', 'Y' or '1', all I/O is unbuffered.  This will
  slow down small sequential reads and writes.  If the first letter is
! 'n', 'N' or '0', I/O is buffered.  This is the default.
  
  
  File: gfortran.info,  Node: GFORTRAN_UNBUFFERED_PRECONNECTED,  Next: GFORTRAN_SHOW_LOCUS,  Prev: GFORTRAN_UNBUFFERED_ALL,  Up: Runtime
  
! 3.6 'GFORTRAN_UNBUFFERED_PRECONNECTED'--Do not buffer I/O on preconnected units
  ===============================================================================
  
! The environment variable named 'GFORTRAN_UNBUFFERED_PRECONNECTED'
  controls whether I/O on a preconnected unit (i.e. STDOUT or STDERR) is
! unbuffered.  If the first letter is 'y', 'Y' or '1', I/O is unbuffered.
  This will slow down small sequential reads and writes.  If the first
! letter is 'n', 'N' or '0', I/O is buffered.  This is the default.
  
  
  File: gfortran.info,  Node: GFORTRAN_SHOW_LOCUS,  Next: GFORTRAN_OPTIONAL_PLUS,  Prev: GFORTRAN_UNBUFFERED_PRECONNECTED,  Up: Runtime
  
! 3.7 'GFORTRAN_SHOW_LOCUS'--Show location for runtime errors
  ===========================================================
  
! If the first letter is 'y', 'Y' or '1', filename and line numbers for
! runtime errors are printed.  If the first letter is 'n', 'N' or '0', do
  not print filename and line numbers for runtime errors.  The default is
  to print the location.
  
  
  File: gfortran.info,  Node: GFORTRAN_OPTIONAL_PLUS,  Next: GFORTRAN_LIST_SEPARATOR,  Prev: GFORTRAN_SHOW_LOCUS,  Up: Runtime
  
! 3.8 'GFORTRAN_OPTIONAL_PLUS'--Print leading + where permitted
  =============================================================
  
! If the first letter is 'y', 'Y' or '1', a plus sign is printed where
! permitted by the Fortran standard.  If the first letter is 'n', 'N' or
! '0', a plus sign is not printed in most cases.  Default is not to print
  plus signs.
  
  
  File: gfortran.info,  Node: GFORTRAN_LIST_SEPARATOR,  Next: GFORTRAN_CONVERT_UNIT,  Prev: GFORTRAN_OPTIONAL_PLUS,  Up: Runtime
  
! 3.9 'GFORTRAN_LIST_SEPARATOR'--Separator for list output
  ========================================================
  
  This environment variable specifies the separator when writing
--- 2216,2267 ----
  
  File: gfortran.info,  Node: GFORTRAN_UNBUFFERED_ALL,  Next: GFORTRAN_UNBUFFERED_PRECONNECTED,  Prev: GFORTRAN_STDERR_UNIT,  Up: Runtime
  
! 3.5 ‘GFORTRAN_UNBUFFERED_ALL’--Do not buffer I/O on all units
  =============================================================
  
  This environment variable controls whether all I/O is unbuffered.  If
! the first letter is ‘y’, ‘Y’ or ‘1’, all I/O is unbuffered.  This will
  slow down small sequential reads and writes.  If the first letter is
! ‘n’, ‘N’ or ‘0’, I/O is buffered.  This is the default.
  
  
  File: gfortran.info,  Node: GFORTRAN_UNBUFFERED_PRECONNECTED,  Next: GFORTRAN_SHOW_LOCUS,  Prev: GFORTRAN_UNBUFFERED_ALL,  Up: Runtime
  
! 3.6 ‘GFORTRAN_UNBUFFERED_PRECONNECTED’--Do not buffer I/O on preconnected units
  ===============================================================================
  
! The environment variable named ‘GFORTRAN_UNBUFFERED_PRECONNECTED’
  controls whether I/O on a preconnected unit (i.e. STDOUT or STDERR) is
! unbuffered.  If the first letter is ‘y’, ‘Y’ or ‘1’, I/O is unbuffered.
  This will slow down small sequential reads and writes.  If the first
! letter is ‘n’, ‘N’ or ‘0’, I/O is buffered.  This is the default.
  
  
  File: gfortran.info,  Node: GFORTRAN_SHOW_LOCUS,  Next: GFORTRAN_OPTIONAL_PLUS,  Prev: GFORTRAN_UNBUFFERED_PRECONNECTED,  Up: Runtime
  
! 3.7 ‘GFORTRAN_SHOW_LOCUS’--Show location for runtime errors
  ===========================================================
  
! If the first letter is ‘y’, ‘Y’ or ‘1’, filename and line numbers for
! runtime errors are printed.  If the first letter is ‘n’, ‘N’ or ‘0’, do
  not print filename and line numbers for runtime errors.  The default is
  to print the location.
  
  
  File: gfortran.info,  Node: GFORTRAN_OPTIONAL_PLUS,  Next: GFORTRAN_LIST_SEPARATOR,  Prev: GFORTRAN_SHOW_LOCUS,  Up: Runtime
  
! 3.8 ‘GFORTRAN_OPTIONAL_PLUS’--Print leading + where permitted
  =============================================================
  
! If the first letter is ‘y’, ‘Y’ or ‘1’, a plus sign is printed where
! permitted by the Fortran standard.  If the first letter is ‘n’, ‘N’ or
! ‘0’, a plus sign is not printed in most cases.  Default is not to print
  plus signs.
  
  
  File: gfortran.info,  Node: GFORTRAN_LIST_SEPARATOR,  Next: GFORTRAN_CONVERT_UNIT,  Prev: GFORTRAN_OPTIONAL_PLUS,  Up: Runtime
  
! 3.9 ‘GFORTRAN_LIST_SEPARATOR’--Separator for list output
  ========================================================
  
  This environment variable specifies the separator when writing
*************** list-directed output.  It may contain an
*** 2269,2286 ****
  one comma.  If you specify this on the command line, be sure to quote
  spaces, as in
       $ GFORTRAN_LIST_SEPARATOR='  ,  ' ./a.out
!    when 'a.out' is the compiled Fortran program that you want to run.
  Default is a single space.
  
  
  File: gfortran.info,  Node: GFORTRAN_CONVERT_UNIT,  Next: GFORTRAN_ERROR_BACKTRACE,  Prev: GFORTRAN_LIST_SEPARATOR,  Up: Runtime
  
! 3.10 'GFORTRAN_CONVERT_UNIT'--Set conversion for unformatted I/O
  ================================================================
  
! By setting the 'GFORTRAN_CONVERT_UNIT' variable, it is possible to
  change the representation of data for unformatted files.  The syntax for
! the 'GFORTRAN_CONVERT_UNIT' variable for most systems is:
       GFORTRAN_CONVERT_UNIT: mode | mode ';' exception | exception ;
       mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ;
       exception: mode ':' unit_list | unit_list ;
--- 2269,2286 ----
  one comma.  If you specify this on the command line, be sure to quote
  spaces, as in
       $ GFORTRAN_LIST_SEPARATOR='  ,  ' ./a.out
!    when ‘a.out’ is the compiled Fortran program that you want to run.
  Default is a single space.
  
  
  File: gfortran.info,  Node: GFORTRAN_CONVERT_UNIT,  Next: GFORTRAN_ERROR_BACKTRACE,  Prev: GFORTRAN_LIST_SEPARATOR,  Up: Runtime
  
! 3.10 ‘GFORTRAN_CONVERT_UNIT’--Set conversion for unformatted I/O
  ================================================================
  
! By setting the ‘GFORTRAN_CONVERT_UNIT’ variable, it is possible to
  change the representation of data for unformatted files.  The syntax for
! the ‘GFORTRAN_CONVERT_UNIT’ variable for most systems is:
       GFORTRAN_CONVERT_UNIT: mode | mode ';' exception | exception ;
       mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ;
       exception: mode ':' unit_list | unit_list ;
*************** the 'GFORTRAN_CONVERT_UNIT' variable for
*** 2290,2325 ****
  of optional exceptions, which are separated by semicolons from the
  preceding default and each other.  Each exception consists of a format
  and a comma-separated list of units.  Valid values for the modes are the
! same as for the 'CONVERT' specifier:
  
!      'NATIVE' Use the native format.  This is the default.
!      'SWAP' Swap between little- and big-endian.
!      'LITTLE_ENDIAN' Use the little-endian format for unformatted files.
!      'BIG_ENDIAN' Use the big-endian format for unformatted files.
!    For POWER systems which support '-mabi=ieeelongdouble', there are
  additional options, which can be combined with the others with commas.
  Those are
!      'R16_IEEE' Use IEEE 128-bit format for 'REAL(KIND=16)'.
!      'R16_IBM' Use IBM 'long double' format for 'REAL(KIND=16)'.
!    A missing mode for an exception is taken to mean 'BIG_ENDIAN'.
! Examples of values for 'GFORTRAN_CONVERT_UNIT' are:
!      ''big_endian'' Do all unformatted I/O in big_endian mode.
!      ''little_endian;native:10-20,25'' Do all unformatted I/O in
       little_endian mode, except for units 10 to 20 and 25, which are in
       native format.
!      ''10-20'' Units 10 to 20 are big-endian, the rest is native.
!      ''big_endian,r16_ibm'' Do all unformatted I/O in big-endian mode
!      and use IBM long double for output of 'REAL(KIND=16)' values.
  
     Setting the environment variables should be done on the command line
! or via the 'export' command for 'sh'-compatible shells and via 'setenv'
! for 'csh'-compatible shells.
  
!    Example for 'sh':
       $ gfortran foo.f90
       $ GFORTRAN_CONVERT_UNIT='big_endian;native:10-20' ./a.out
  
!    Example code for 'csh':
       % gfortran foo.f90
       % setenv GFORTRAN_CONVERT_UNIT 'big_endian;native:10-20'
       % ./a.out
--- 2290,2325 ----
  of optional exceptions, which are separated by semicolons from the
  preceding default and each other.  Each exception consists of a format
  and a comma-separated list of units.  Valid values for the modes are the
! same as for the ‘CONVERT’ specifier:
  
!      ‘NATIVE’ Use the native format.  This is the default.
!      ‘SWAP’ Swap between little- and big-endian.
!      ‘LITTLE_ENDIAN’ Use the little-endian format for unformatted files.
!      ‘BIG_ENDIAN’ Use the big-endian format for unformatted files.
!    For POWER systems which support ‘-mabi=ieeelongdouble’, there are
  additional options, which can be combined with the others with commas.
  Those are
!      ‘R16_IEEE’ Use IEEE 128-bit format for ‘REAL(KIND=16)’.
!      ‘R16_IBM’ Use IBM ‘long double’ format for ‘REAL(KIND=16)’.
!    A missing mode for an exception is taken to mean ‘BIG_ENDIAN’.
! Examples of values for ‘GFORTRAN_CONVERT_UNIT’ are:
!      ‘'big_endian'’ Do all unformatted I/O in big_endian mode.
!      ‘'little_endian;native:10-20,25'’ Do all unformatted I/O in
       little_endian mode, except for units 10 to 20 and 25, which are in
       native format.
!      ‘'10-20'’ Units 10 to 20 are big-endian, the rest is native.
!      ‘'big_endian,r16_ibm'’ Do all unformatted I/O in big-endian mode
!      and use IBM long double for output of ‘REAL(KIND=16)’ values.
  
     Setting the environment variables should be done on the command line
! or via the ‘export’ command for ‘sh’-compatible shells and via ‘setenv’
! for ‘csh’-compatible shells.
  
!    Example for ‘sh’:
       $ gfortran foo.f90
       $ GFORTRAN_CONVERT_UNIT='big_endian;native:10-20' ./a.out
  
!    Example code for ‘csh’:
       % gfortran foo.f90
       % setenv GFORTRAN_CONVERT_UNIT 'big_endian;native:10-20'
       % ./a.out
*************** you, it is best if you use this only for
*** 2331,2337 ****
     *Note CONVERT specifier::, for an alternative way to specify the data
  representation for unformatted files.  *Note Runtime Options::, for
  setting a default data representation for the whole program.  The
! 'CONVERT' specifier overrides the '-fconvert' compile options.
  
     _Note that the values specified via the GFORTRAN_CONVERT_UNIT
  environment variable will override the CONVERT specifier in the open
--- 2331,2337 ----
     *Note CONVERT specifier::, for an alternative way to specify the data
  representation for unformatted files.  *Note Runtime Options::, for
  setting a default data representation for the whole program.  The
! ‘CONVERT’ specifier overrides the ‘-fconvert’ compile options.
  
     _Note that the values specified via the GFORTRAN_CONVERT_UNIT
  environment variable will override the CONVERT specifier in the open
*************** not have the source code of their progra
*** 2341,2372 ****
  
  File: gfortran.info,  Node: GFORTRAN_ERROR_BACKTRACE,  Next: GFORTRAN_FORMATTED_BUFFER_SIZE,  Prev: GFORTRAN_CONVERT_UNIT,  Up: Runtime
  
! 3.11 'GFORTRAN_ERROR_BACKTRACE'--Show backtrace on run-time errors
  ==================================================================
  
! If the 'GFORTRAN_ERROR_BACKTRACE' variable is set to 'y', 'Y' or '1'
  (only the first letter is relevant) then a backtrace is printed when a
  serious run-time error occurs.  To disable the backtracing, set the
! variable to 'n', 'N', '0'.  Default is to print a backtrace unless the
! '-fno-backtrace' compile option was used.
  
  
  File: gfortran.info,  Node: GFORTRAN_FORMATTED_BUFFER_SIZE,  Next: GFORTRAN_UNFORMATTED_BUFFER_SIZE,  Prev: GFORTRAN_ERROR_BACKTRACE,  Up: Runtime
  
! 3.12 'GFORTRAN_FORMATTED_BUFFER_SIZE'--Set buffer size for formatted I/O
  ========================================================================
  
! The 'GFORTRAN_FORMATTED_BUFFER_SIZE' environment variable specifies
  buffer size in bytes to be used for formatted output.  The default value
  is 8192.
  
  
  File: gfortran.info,  Node: GFORTRAN_UNFORMATTED_BUFFER_SIZE,  Prev: GFORTRAN_FORMATTED_BUFFER_SIZE,  Up: Runtime
  
! 3.13 'GFORTRAN_UNFORMATTED_BUFFER_SIZE'--Set buffer size for unformatted I/O
  ============================================================================
  
! The 'GFORTRAN_UNFORMATTED_BUFFER_SIZE' environment variable specifies
  buffer size in bytes to be used for unformatted output.  The default
  value is 131072.
  
--- 2341,2372 ----
  
  File: gfortran.info,  Node: GFORTRAN_ERROR_BACKTRACE,  Next: GFORTRAN_FORMATTED_BUFFER_SIZE,  Prev: GFORTRAN_CONVERT_UNIT,  Up: Runtime
  
! 3.11 ‘GFORTRAN_ERROR_BACKTRACE’--Show backtrace on run-time errors
  ==================================================================
  
! If the ‘GFORTRAN_ERROR_BACKTRACE’ variable is set to ‘y’, ‘Y’ or ‘1’
  (only the first letter is relevant) then a backtrace is printed when a
  serious run-time error occurs.  To disable the backtracing, set the
! variable to ‘n’, ‘N’, ‘0’.  Default is to print a backtrace unless the
! ‘-fno-backtrace’ compile option was used.
  
  
  File: gfortran.info,  Node: GFORTRAN_FORMATTED_BUFFER_SIZE,  Next: GFORTRAN_UNFORMATTED_BUFFER_SIZE,  Prev: GFORTRAN_ERROR_BACKTRACE,  Up: Runtime
  
! 3.12 ‘GFORTRAN_FORMATTED_BUFFER_SIZE’--Set buffer size for formatted I/O
  ========================================================================
  
! The ‘GFORTRAN_FORMATTED_BUFFER_SIZE’ environment variable specifies
  buffer size in bytes to be used for formatted output.  The default value
  is 8192.
  
  
  File: gfortran.info,  Node: GFORTRAN_UNFORMATTED_BUFFER_SIZE,  Prev: GFORTRAN_FORMATTED_BUFFER_SIZE,  Up: Runtime
  
! 3.13 ‘GFORTRAN_UNFORMATTED_BUFFER_SIZE’--Set buffer size for unformatted I/O
  ============================================================================
  
! The ‘GFORTRAN_UNFORMATTED_BUFFER_SIZE’ environment variable specifies
  buffer size in bytes to be used for unformatted output.  The default
  value is 131072.
  
*************** File: gfortran.info,  Node: KIND Type Pa
*** 2400,2440 ****
  4.1 KIND Type Parameters
  ========================
  
! The 'KIND' type parameters supported by GNU Fortran for the primitive
  data types are:
  
! 'INTEGER'
       1, 2, 4, 8*, 16*, default: 4**
  
! 'LOGICAL'
       1, 2, 4, 8*, 16*, default: 4**
  
! 'REAL'
       4, 8, 10*, 16*, default: 4***
  
! 'COMPLEX'
       4, 8, 10*, 16*, default: 4***
  
! 'DOUBLE PRECISION'
       4, 8, 10*, 16*, default: 8***
  
! 'CHARACTER'
       1, 4, default: 1
  
  * not available on all systems
! ** unless '-fdefault-integer-8' is used
! *** unless '-fdefault-real-8' is used (see *note Fortran Dialect
  Options::)
  
! The 'KIND' value matches the storage size in bytes, except for 'COMPLEX'
  where the storage size is twice as much (or both real and imaginary part
  are a real value of the given size).  It is recommended to use the *note
  SELECTED_CHAR_KIND::, *note SELECTED_INT_KIND:: and *note
! SELECTED_REAL_KIND:: intrinsics or the 'INT8', 'INT16', 'INT32',
! 'INT64', 'REAL32', 'REAL64', and 'REAL128' parameters of the
! 'ISO_FORTRAN_ENV' module instead of the concrete values.  The available
! kind parameters can be found in the constant arrays 'CHARACTER_KINDS',
! 'INTEGER_KINDS', 'LOGICAL_KINDS' and 'REAL_KINDS' in the *note
  ISO_FORTRAN_ENV:: module.  For C interoperability, the kind parameters
  of the *note ISO_C_BINDING:: module should be used.
  
--- 2400,2440 ----
  4.1 KIND Type Parameters
  ========================
  
! The ‘KIND’ type parameters supported by GNU Fortran for the primitive
  data types are:
  
! ‘INTEGER’
       1, 2, 4, 8*, 16*, default: 4**
  
! ‘LOGICAL’
       1, 2, 4, 8*, 16*, default: 4**
  
! ‘REAL’
       4, 8, 10*, 16*, default: 4***
  
! ‘COMPLEX’
       4, 8, 10*, 16*, default: 4***
  
! ‘DOUBLE PRECISION’
       4, 8, 10*, 16*, default: 8***
  
! ‘CHARACTER’
       1, 4, default: 1
  
  * not available on all systems
! ** unless ‘-fdefault-integer-8’ is used
! *** unless ‘-fdefault-real-8’ is used (see *note Fortran Dialect
  Options::)
  
! The ‘KIND’ value matches the storage size in bytes, except for ‘COMPLEX’
  where the storage size is twice as much (or both real and imaginary part
  are a real value of the given size).  It is recommended to use the *note
  SELECTED_CHAR_KIND::, *note SELECTED_INT_KIND:: and *note
! SELECTED_REAL_KIND:: intrinsics or the ‘INT8’, ‘INT16’, ‘INT32’,
! ‘INT64’, ‘REAL32’, ‘REAL64’, and ‘REAL128’ parameters of the
! ‘ISO_FORTRAN_ENV’ module instead of the concrete values.  The available
! kind parameters can be found in the constant arrays ‘CHARACTER_KINDS’,
! ‘INTEGER_KINDS’, ‘LOGICAL_KINDS’ and ‘REAL_KINDS’ in the *note
  ISO_FORTRAN_ENV:: module.  For C interoperability, the kind parameters
  of the *note ISO_C_BINDING:: module should be used.
  
*************** File: gfortran.info,  Node: Internal rep
*** 2444,2457 ****
  4.2 Internal representation of LOGICAL variables
  ================================================
  
! The Fortran standard does not specify how variables of 'LOGICAL' type
! are represented, beyond requiring that 'LOGICAL' variables of default
! kind have the same storage size as default 'INTEGER' and 'REAL'
  variables.  The GNU Fortran internal representation is as follows.
  
!    A 'LOGICAL(KIND=N)' variable is represented as an 'INTEGER(KIND=N)'
! variable, however, with only two permissible values: '1' for '.TRUE.'
! and '0' for '.FALSE.'.  Any other integer value results in undefined
  behavior.
  
     See also *note Argument passing conventions:: and *note
--- 2444,2457 ----
  4.2 Internal representation of LOGICAL variables
  ================================================
  
! The Fortran standard does not specify how variables of ‘LOGICAL’ type
! are represented, beyond requiring that ‘LOGICAL’ variables of default
! kind have the same storage size as default ‘INTEGER’ and ‘REAL’
  variables.  The GNU Fortran internal representation is as follows.
  
!    A ‘LOGICAL(KIND=N)’ variable is represented as an ‘INTEGER(KIND=N)’
! variable, however, with only two permissible values: ‘1’ for ‘.TRUE.’
! and ‘0’ for ‘.FALSE.’.  Any other integer value results in undefined
  behavior.
  
     See also *note Argument passing conventions:: and *note
*************** File: gfortran.info,  Node: Evaluation o
*** 2465,2476 ****
  
  The Fortran standard does not require the compiler to evaluate all parts
  of an expression, if they do not contribute to the final result.  For
! logical expressions with '.AND.' or '.OR.' operators, in particular, GNU
  Fortran will optimize out function calls (even to impure functions) if
  the result of the expression can be established without them.  However,
  since not all compilers do that, and such an optimization can
  potentially modify the program flow and subsequent results, GNU Fortran
! throws warnings for such situations with the '-Wfunction-elimination'
  flag.
  
  
--- 2465,2476 ----
  
  The Fortran standard does not require the compiler to evaluate all parts
  of an expression, if they do not contribute to the final result.  For
! logical expressions with ‘.AND.’ or ‘.OR.’ operators, in particular, GNU
  Fortran will optimize out function calls (even to impure functions) if
  the result of the expression can be established without them.  However,
  since not all compilers do that, and such an optimization can
  potentially modify the program flow and subsequent results, GNU Fortran
! throws warnings for such situations with the ‘-Wfunction-elimination’
  flag.
  
  
*************** File: gfortran.info,  Node: MAX and MIN
*** 2479,2492 ****
  4.4 MAX and MIN intrinsics with REAL NaN arguments
  ==================================================
  
! The Fortran standard does not specify what the result of the 'MAX' and
! 'MIN' intrinsics are if one of the arguments is a 'NaN'.  Accordingly,
  the GNU Fortran compiler does not specify that either, as this allows
  for faster and more compact code to be generated.  If the programmer
  wishes to take some specific action in case one of the arguments is a
! 'NaN', it is necessary to explicitly test the arguments before calling
! 'MAX' or 'MIN', e.g.  with the 'IEEE_IS_NAN' function from the intrinsic
! module 'IEEE_ARITHMETIC'.
  
  
  File: gfortran.info,  Node: Thread-safety of the runtime library,  Next: Data consistency and durability,  Prev: MAX and MIN intrinsics with REAL NaN arguments,  Up: Compiler Characteristics
--- 2479,2492 ----
  4.4 MAX and MIN intrinsics with REAL NaN arguments
  ==================================================
  
! The Fortran standard does not specify what the result of the ‘MAX’ and
! ‘MIN’ intrinsics are if one of the arguments is a ‘NaN’.  Accordingly,
  the GNU Fortran compiler does not specify that either, as this allows
  for faster and more compact code to be generated.  If the programmer
  wishes to take some specific action in case one of the arguments is a
! ‘NaN’, it is necessary to explicitly test the arguments before calling
! ‘MAX’ or ‘MIN’, e.g.  with the ‘IEEE_IS_NAN’ function from the intrinsic
! module ‘IEEE_ARITHMETIC’.
  
  
  File: gfortran.info,  Node: Thread-safety of the runtime library,  Next: Data consistency and durability,  Prev: MAX and MIN intrinsics with REAL NaN arguments,  Up: Compiler Characteristics
*************** File: gfortran.info,  Node: Thread-safet
*** 2495,2516 ****
  ========================================
  
  GNU Fortran can be used in programs with multiple threads, e.g. by using
! OpenMP, by calling OS thread handling functions via the 'ISO_C_BINDING'
  facility, or by GNU Fortran compiled library code being called from a
  multi-threaded program.
  
!    The GNU Fortran runtime library, ('libgfortran'), supports being
  called concurrently from multiple threads with the following exceptions.
  
!    During library initialization, the C 'getenv' function is used, which
! need not be thread-safe.  Similarly, the 'getenv' function is used to
! implement the 'GET_ENVIRONMENT_VARIABLE' and 'GETENV' intrinsics.  It is
  the responsibility of the user to ensure that the environment is not
  being updated concurrently when any of these actions are taking place.
  
!    The 'EXECUTE_COMMAND_LINE' and 'SYSTEM' intrinsics are implemented
! with the 'system' function, which need not be thread-safe.  It is the
! responsibility of the user to ensure that 'system' is not called
  concurrently.
  
     For platforms not supporting thread-safe POSIX functions, further
--- 2495,2516 ----
  ========================================
  
  GNU Fortran can be used in programs with multiple threads, e.g. by using
! OpenMP, by calling OS thread handling functions via the ‘ISO_C_BINDING’
  facility, or by GNU Fortran compiled library code being called from a
  multi-threaded program.
  
!    The GNU Fortran runtime library, (‘libgfortran’), supports being
  called concurrently from multiple threads with the following exceptions.
  
!    During library initialization, the C ‘getenv’ function is used, which
! need not be thread-safe.  Similarly, the ‘getenv’ function is used to
! implement the ‘GET_ENVIRONMENT_VARIABLE’ and ‘GETENV’ intrinsics.  It is
  the responsibility of the user to ensure that the environment is not
  being updated concurrently when any of these actions are taking place.
  
!    The ‘EXECUTE_COMMAND_LINE’ and ‘SYSTEM’ intrinsics are implemented
! with the ‘system’ function, which need not be thread-safe.  It is the
! responsibility of the user to ensure that ‘system’ is not called
  concurrently.
  
     For platforms not supporting thread-safe POSIX functions, further
*************** functionality might not be thread-safe.
*** 2518,2533 ****
  documentation for your operating system.
  
     The GNU Fortran runtime library uses various C library functions that
! depend on the locale, such as 'strtod' and 'snprintf'.  In order to work
  correctly in locale-aware programs that set the locale using
! 'setlocale', the locale is reset to the default "C" locale while
! executing a formatted 'READ' or 'WRITE' statement.  On targets
  supporting the POSIX 2008 per-thread locale functions (e.g.
! 'newlocale', 'uselocale', 'freelocale'), these are used and thus the
! global locale set using 'setlocale' or the per-thread locales in other
  threads are not affected.  However, on targets lacking this
  functionality, the global LC_NUMERIC locale is set to "C" during the
! formatted I/O. Thus, on such targets it's not safe to call 'setlocale'
  concurrently from another thread while a Fortran formatted I/O operation
  is in progress.  Also, other threads doing something dependent on the
  LC_NUMERIC locale might not work correctly if a formatted I/O operation
--- 2518,2533 ----
  documentation for your operating system.
  
     The GNU Fortran runtime library uses various C library functions that
! depend on the locale, such as ‘strtod’ and ‘snprintf’.  In order to work
  correctly in locale-aware programs that set the locale using
! ‘setlocale’, the locale is reset to the default "C" locale while
! executing a formatted ‘READ’ or ‘WRITE’ statement.  On targets
  supporting the POSIX 2008 per-thread locale functions (e.g.
! ‘newlocale’, ‘uselocale’, ‘freelocale’), these are used and thus the
! global locale set using ‘setlocale’ or the per-thread locales in other
  threads are not affected.  However, on targets lacking this
  functionality, the global LC_NUMERIC locale is set to "C" during the
! formatted I/O. Thus, on such targets it's not safe to call ‘setlocale’
  concurrently from another thread while a Fortran formatted I/O operation
  is in progress.  Also, other threads doing something dependent on the
  LC_NUMERIC locale might not work correctly if a formatted I/O operation
*************** and durability issues when doing I/O.
*** 2544,2554 ****
  
     With respect to durability, GNU Fortran makes no effort to ensure
  that data is committed to stable storage.  If this is required, the GNU
! Fortran programmer can use the intrinsic 'FNUM' to retrieve the low
  level file descriptor corresponding to an open Fortran unit.  Then,
! using e.g.  the 'ISO_C_BINDING' feature, one can call the underlying
! system call to flush dirty data to stable storage, such as 'fsync' on
! POSIX, '_commit' on MingW, or 'fcntl(fd, F_FULLSYNC, 0)' on macOS. The
  following example shows how to call fsync:
  
         ! Declare the interface for POSIX fsync function
--- 2544,2554 ----
  
     With respect to durability, GNU Fortran makes no effort to ensure
  that data is committed to stable storage.  If this is required, the GNU
! Fortran programmer can use the intrinsic ‘FNUM’ to retrieve the low
  level file descriptor corresponding to an open Fortran unit.  Then,
! using e.g.  the ‘ISO_C_BINDING’ feature, one can call the underlying
! system call to flush dirty data to stable storage, such as ‘fsync’ on
! POSIX, ‘_commit’ on MingW, or ‘fcntl(fd, F_FULLSYNC, 0)’ on macOS. The
  following example shows how to call fsync:
  
         ! Declare the interface for POSIX fsync function
*************** following example shows how to call fsyn
*** 2580,2597 ****
     With respect to consistency, for regular files GNU Fortran uses
  buffered I/O in order to improve performance.  This buffer is flushed
  automatically when full and in some other situations, e.g.  when closing
! a unit.  It can also be explicitly flushed with the 'FLUSH' statement.
! Also, the buffering can be turned off with the 'GFORTRAN_UNBUFFERED_ALL'
! and 'GFORTRAN_UNBUFFERED_PRECONNECTED' environment variables.  Special
  files, such as terminals and pipes, are always unbuffered.  Sometimes,
  however, further things may need to be done in order to allow other
  processes to see data that GNU Fortran has written, as follows.
  
     The Windows platform supports a relaxed metadata consistency model,
  where file metadata is written to the directory lazily.  This means
! that, for instance, the 'dir' command can show a stale size for a file.
  One can force a directory metadata update by closing the unit, or by
! calling '_commit' on the file descriptor.  Note, though, that '_commit'
  will force all dirty data to stable storage, which is often a very slow
  operation.
  
--- 2580,2597 ----
     With respect to consistency, for regular files GNU Fortran uses
  buffered I/O in order to improve performance.  This buffer is flushed
  automatically when full and in some other situations, e.g.  when closing
! a unit.  It can also be explicitly flushed with the ‘FLUSH’ statement.
! Also, the buffering can be turned off with the ‘GFORTRAN_UNBUFFERED_ALL’
! and ‘GFORTRAN_UNBUFFERED_PRECONNECTED’ environment variables.  Special
  files, such as terminals and pipes, are always unbuffered.  Sometimes,
  however, further things may need to be done in order to allow other
  processes to see data that GNU Fortran has written, as follows.
  
     The Windows platform supports a relaxed metadata consistency model,
  where file metadata is written to the directory lazily.  This means
! that, for instance, the ‘dir’ command can show a stale size for a file.
  One can force a directory metadata update by closing the unit, or by
! calling ‘_commit’ on the file descriptor.  Note, though, that ‘_commit’
  will force all dirty data to stable storage, which is often a very slow
  operation.
  
*************** operation.
*** 2599,2606 ****
  called open-to-close consistency.  Closing a file forces dirty data and
  metadata to be flushed to the server, and opening a file forces the
  client to contact the server in order to revalidate cached data.
! 'fsync' will also force a flush of dirty data and metadata to the
! server.  Similar to 'open' and 'close', acquiring and releasing 'fcntl'
  file locks, if the server supports them, will also force cache
  validation and flushing dirty data and metadata.
  
--- 2599,2606 ----
  called open-to-close consistency.  Closing a file forces dirty data and
  metadata to be flushed to the server, and opening a file forces the
  client to contact the server in order to revalidate cached data.
! ‘fsync’ will also force a flush of dirty data and metadata to the
! server.  Similar to ‘open’ and ‘close’, acquiring and releasing ‘fcntl’
  file locks, if the server supports them, will also force cache
  validation and flushing dirty data and metadata.
  
*************** File: gfortran.info,  Node: Files opened
*** 2610,2622 ****
  4.7 Files opened without an explicit ACTION= specifier
  ======================================================
  
! The Fortran standard says that if an 'OPEN' statement is executed
! without an explicit 'ACTION=' specifier, the default value is processor
  dependent.  GNU Fortran behaves as follows:
  
!   1. Attempt to open the file with 'ACTION='READWRITE''
!   2. If that fails, try to open with 'ACTION='READ''
!   3. If that fails, try to open with 'ACTION='WRITE''
    4. If that fails, generate an error
  
  
--- 2610,2622 ----
  4.7 Files opened without an explicit ACTION= specifier
  ======================================================
  
! The Fortran standard says that if an ‘OPEN’ statement is executed
! without an explicit ‘ACTION=’ specifier, the default value is processor
  dependent.  GNU Fortran behaves as follows:
  
!   1. Attempt to open the file with ‘ACTION='READWRITE'’
!   2. If that fails, try to open with ‘ACTION='READ'’
!   3. If that fails, try to open with ‘ACTION='WRITE'’
    4. If that fails, generate an error
  
  
*************** File: gfortran.info,  Node: File operati
*** 2628,2645 ****
  This section documents the behavior of GNU Fortran for file operations
  on symbolic links, on systems that support them.
  
!    * Results of INQUIRE statements of the "inquire by file" form will
       relate to the target of the symbolic link.  For example,
!      'INQUIRE(FILE="foo",EXIST=ex)' will set EX to .TRUE. if FOO is a
       symbolic link pointing to an existing file, and .FALSE. if FOO
       points to an non-existing file ("dangling" symbolic link).
  
!    * Using the 'OPEN' statement with a 'STATUS="NEW"' specifier on a
       symbolic link will result in an error condition, whether the
       symbolic link points to an existing target or is dangling.
  
!    * If a symbolic link was connected, using the 'CLOSE' statement with
!      a 'STATUS="DELETE"' specifier will cause the symbolic link itself
       to be deleted, not its target.
  
  
--- 2628,2645 ----
  This section documents the behavior of GNU Fortran for file operations
  on symbolic links, on systems that support them.
  
!    • Results of INQUIRE statements of the "inquire by file" form will
       relate to the target of the symbolic link.  For example,
!      ‘INQUIRE(FILE="foo",EXIST=ex)’ will set EX to .TRUE. if FOO is a
       symbolic link pointing to an existing file, and .FALSE. if FOO
       points to an non-existing file ("dangling" symbolic link).
  
!    • Using the ‘OPEN’ statement with a ‘STATUS="NEW"’ specifier on a
       symbolic link will result in an error condition, whether the
       symbolic link points to an existing target or is dangling.
  
!    • If a symbolic link was connected, using the ‘CLOSE’ statement with
!      a ‘STATUS="DELETE"’ specifier will cause the symbolic link itself
       to be deleted, not its target.
  
  
*************** markers.  Each logical record consists o
*** 2654,2670 ****
     Each subrecord consists of a leading record marker, the data written
  by the user program, and a trailing record marker.  The record markers
  are four-byte integers by default, and eight-byte integers if the
! '-fmax-subrecord-length=8' option (which exists for backwards
  compability only) is in effect.
  
     The representation of the record markers is that of unformatted files
! given with the '-fconvert' option, the *note CONVERT specifier:: in an
  open statement or the *note GFORTRAN_CONVERT_UNIT:: environment
  variable.
  
     The maximum number of bytes of user data in a subrecord is 2147483639
  (2 GiB - 9) for a four-byte record marker.  This limit can be lowered
! with the '-fmax-subrecord-length' option, although this is rarely
  useful.  If the length of a logical record exceeds this limit, the data
  is distributed among several subrecords.
  
--- 2654,2670 ----
     Each subrecord consists of a leading record marker, the data written
  by the user program, and a trailing record marker.  The record markers
  are four-byte integers by default, and eight-byte integers if the
! ‘-fmax-subrecord-length=8’ option (which exists for backwards
  compability only) is in effect.
  
     The representation of the record markers is that of unformatted files
! given with the ‘-fconvert’ option, the *note CONVERT specifier:: in an
  open statement or the *note GFORTRAN_CONVERT_UNIT:: environment
  variable.
  
     The maximum number of bytes of user data in a subrecord is 2147483639
  (2 GiB - 9) for a four-byte record marker.  This limit can be lowered
! with the ‘-fmax-subrecord-length’ option, although this is rarely
  useful.  If the length of a logical record exceeds this limit, the data
  is distributed among several subrecords.
  
*************** variables, such as AIX, I/O is also perf
*** 2710,2717 ****
  
     On some systems, such as Darwin or Solaris, the POSIX thread library
  is always linked in, so asynchronous I/O is always performed.  On other
! sytems, such as Linux, it is necessary to specify '-pthread',
! '-lpthread' or '-fopenmp' during the linking step.
  
  
  File: gfortran.info,  Node: Behavior on integer overflow,  Prev: Asynchronous I/O,  Up: Compiler Characteristics
--- 2710,2717 ----
  
     On some systems, such as Darwin or Solaris, the POSIX thread library
  is always linked in, so asynchronous I/O is always performed.  On other
! sytems, such as Linux, it is necessary to specify ‘-pthread’,
! ‘-lpthread’ or ‘-fopenmp’ during the linking step.
  
  
  File: gfortran.info,  Node: Behavior on integer overflow,  Prev: Asynchronous I/O,  Up: Compiler Characteristics
*************** Integer overflow is prohibited by the Fo
*** 2723,2734 ****
  gfortran on integer overflow is undefined by default.  Traditional code,
  like linear congruential pseudo-random number generators in old programs
  that rely on specific, non-standard behavior may generate unexpected
! results.  The '-fsanitize=undefined' option can be used to detect such
  code at runtime.
  
!    It is recommended to use the intrinsic subroutine 'RANDOM_NUMBER' for
  random number generators or, if the old behavior is desired, to use the
! '-fwrapv' option.  Note that this option can impact performance.
  
  
  File: gfortran.info,  Node: Extensions,  Next: Mixed-Language Programming,  Prev: Compiler Characteristics,  Up: Top
--- 2723,2734 ----
  gfortran on integer overflow is undefined by default.  Traditional code,
  like linear congruential pseudo-random number generators in old programs
  that rely on specific, non-standard behavior may generate unexpected
! results.  The ‘-fsanitize=undefined’ option can be used to detect such
  code at runtime.
  
!    It is recommended to use the intrinsic subroutine ‘RANDOM_NUMBER’ for
  random number generators or, if the old behavior is desired, to use the
! ‘-fwrapv’ option.  Note that this option can impact performance.
  
  
  File: gfortran.info,  Node: Extensions,  Next: Mixed-Language Programming,  Prev: Compiler Characteristics,  Up: Top
*************** This chapter contains information on the
*** 2759,2771 ****
  are currently two categories of GNU Fortran extensions, those that
  provide functionality beyond that provided by any standard, and those
  that are supported by GNU Fortran purely for backward compatibility with
! legacy compilers.  By default, '-std=gnu' allows the compiler to accept
  both types of extensions, but to warn about the use of the latter.
! Specifying either '-std=f95', '-std=f2003', '-std=f2008', or
! '-std=f2018' disables both types of extensions, and '-std=legacy' allows
! both without warning.  The special compile flag '-fdec' enables
  additional compatibility extensions along with those enabled by
! '-std=legacy'.
  
  * Menu:
  
--- 2759,2771 ----
  are currently two categories of GNU Fortran extensions, those that
  provide functionality beyond that provided by any standard, and those
  that are supported by GNU Fortran purely for backward compatibility with
! legacy compilers.  By default, ‘-std=gnu’ allows the compiler to accept
  both types of extensions, but to warn about the use of the latter.
! Specifying either ‘-std=f95’, ‘-std=f2003’, ‘-std=f2008’, or
! ‘-std=f2018’ disables both types of extensions, and ‘-std=legacy’ allows
! both without warning.  The special compile flag ‘-fdec’ enables
  additional compatibility extensions along with those enabled by
! ‘-std=legacy’.
  
  * Menu:
  
*************** File: gfortran.info,  Node: Old-style ki
*** 2812,2828 ****
  GNU Fortran allows old-style kind specifications in declarations.  These
  look like:
             TYPESPEC*size x,y,z
! where 'TYPESPEC' is a basic type ('INTEGER', 'REAL', etc.), and where
! 'size' is a byte count corresponding to the storage size of a valid kind
! for that type.  (For 'COMPLEX' variables, 'size' is the total size of
! the real and imaginary parts.)  The statement then declares 'x', 'y' and
! 'z' to be of type 'TYPESPEC' with the appropriate kind.  This is
  equivalent to the standard-conforming declaration
             TYPESPEC(k) x,y,z
! where 'k' is the kind parameter suitable for the intended precision.  As
! kind parameters are implementation-dependent, use the 'KIND',
! 'SELECTED_INT_KIND' and 'SELECTED_REAL_KIND' intrinsics to retrieve the
! correct value, for instance 'REAL*8 x' can be replaced by:
       INTEGER, PARAMETER :: dbl = KIND(1.0d0)
       REAL(KIND=dbl) :: x
  
--- 2812,2828 ----
  GNU Fortran allows old-style kind specifications in declarations.  These
  look like:
             TYPESPEC*size x,y,z
! where ‘TYPESPEC’ is a basic type (‘INTEGER’, ‘REAL’, etc.), and where
! ‘size’ is a byte count corresponding to the storage size of a valid kind
! for that type.  (For ‘COMPLEX’ variables, ‘size’ is the total size of
! the real and imaginary parts.)  The statement then declares ‘x’, ‘y’ and
! ‘z’ to be of type ‘TYPESPEC’ with the appropriate kind.  This is
  equivalent to the standard-conforming declaration
             TYPESPEC(k) x,y,z
! where ‘k’ is the kind parameter suitable for the intended precision.  As
! kind parameters are implementation-dependent, use the ‘KIND’,
! ‘SELECTED_INT_KIND’ and ‘SELECTED_REAL_KIND’ intrinsics to retrieve the
! correct value, for instance ‘REAL*8 x’ can be replaced by:
       INTEGER, PARAMETER :: dbl = KIND(1.0d0)
       REAL(KIND=dbl) :: x
  
*************** File: gfortran.info,  Node: Old-style va
*** 2835,2846 ****
  GNU Fortran allows old-style initialization of variables of the form:
             INTEGER i/1/,j/2/
             REAL x(2,2) /3*0.,1./
!    The syntax for the initializers is as for the 'DATA' statement, but
! unlike in a 'DATA' statement, an initializer only applies to the
  variable immediately preceding the initialization.  In other words,
! something like 'INTEGER I,J/2,3/' is not valid.  This style of
  initialization is only allowed in declarations without double colons
! ('::'); the double colons were introduced in Fortran 90, which also
  introduced a standard syntax for initializing variables in type
  declarations.
  
--- 2835,2846 ----
  GNU Fortran allows old-style initialization of variables of the form:
             INTEGER i/1/,j/2/
             REAL x(2,2) /3*0.,1./
!    The syntax for the initializers is as for the ‘DATA’ statement, but
! unlike in a ‘DATA’ statement, an initializer only applies to the
  variable immediately preceding the initialization.  In other words,
! something like ‘INTEGER I,J/2,3/’ is not valid.  This style of
  initialization is only allowed in declarations without double colons
! (‘::’); the double colons were introduced in Fortran 90, which also
  introduced a standard syntax for initializing variables in type
  declarations.
  
*************** are:
*** 2855,2861 ****
             DATA i/1/, j/2/, x/3*0.,1./
  
     Note that variables which are explicitly initialized in declarations
! or in 'DATA' statements automatically acquire the 'SAVE' attribute.
  
  
  File: gfortran.info,  Node: Extensions to namelist,  Next: X format descriptor without count field,  Prev: Old-style variable initialization,  Up: Extensions implemented in GNU Fortran
--- 2855,2861 ----
             DATA i/1/, j/2/, x/3*0.,1./
  
     Note that variables which are explicitly initialized in declarations
! or in ‘DATA’ statements automatically acquire the ‘SAVE’ attribute.
  
  
  File: gfortran.info,  Node: Extensions to namelist,  Next: X format descriptor without count field,  Prev: Old-style variable initialization,  Up: Extensions implemented in GNU Fortran
*************** types.  The output from a namelist write
*** 2869,2885 ****
  read.  The output has all names in upper case and indentation to column
  1 after the namelist name.  Two extensions are permitted:
  
!    Old-style use of '$' instead of '&'
       $MYNML
        X(:)%Y(2) = 1.0 2.0 3.0
        CH(1:4) = "abcd"
       $END
  
!    It should be noted that the default terminator is '/' rather than
! '&END'.
  
     Querying of the namelist when inputting from stdin.  After at least
! one space, entering '?' sends to stdout the namelist name and the names
  of the variables in the namelist:
        ?
  
--- 2869,2885 ----
  read.  The output has all names in upper case and indentation to column
  1 after the namelist name.  Two extensions are permitted:
  
!    Old-style use of ‘$’ instead of ‘&’
       $MYNML
        X(:)%Y(2) = 1.0 2.0 3.0
        CH(1:4) = "abcd"
       $END
  
!    It should be noted that the default terminator is ‘/’ rather than
! ‘&END’.
  
     Querying of the namelist when inputting from stdin.  After at least
! one space, entering ‘?’ sends to stdout the namelist name and the names
  of the variables in the namelist:
        ?
  
*************** of the variables in the namelist:
*** 2889,2896 ****
        ch
       &end
  
!    Entering '=?' outputs the namelist to stdout, as if 'WRITE(*,NML =
! mynml)' had been called:
       =?
  
       &MYNML
--- 2889,2896 ----
        ch
       &end
  
!    Entering ‘=?’ outputs the namelist to stdout, as if ‘WRITE(*,NML =
! mynml)’ had been called:
       =?
  
       &MYNML
*************** mynml)' had been called:
*** 2900,2908 ****
        CH=abcd,  /
  
     To aid this dialog, when input is from stdin, errors send their
! messages to stderr and execution continues, even if 'IOSTAT' is set.
  
!    'PRINT' namelist is permitted.  This causes an error if '-std=f95' is
  used.
       PROGRAM test_print
         REAL, dimension (4)  ::  x = (/1.0, 2.0, 3.0, 4.0/)
--- 2900,2908 ----
        CH=abcd,  /
  
     To aid this dialog, when input is from stdin, errors send their
! messages to stderr and execution continues, even if ‘IOSTAT’ is set.
  
!    ‘PRINT’ namelist is permitted.  This causes an error if ‘-std=f95’ is
  used.
       PROGRAM test_print
         REAL, dimension (4)  ::  x = (/1.0, 2.0, 3.0, 4.0/)
*************** used.
*** 2911,2924 ****
       END PROGRAM test_print
  
     Expanded namelist reads are permitted.  This causes an error if
! '-std=f95' is used.  In the following example, the first element of the
  array will be given the value 0.00 and the two succeeding elements will
  be given the values 1.00 and 2.00.
       &MYNML
         X(1,1) = 0.00 , 1.00 , 2.00
       /
  
!    When writing a namelist, if no 'DELIM=' is specified, by default a
  double quote is used to delimit character strings.  If -std=F95, F2003,
  or F2008, etc, the delim status is set to 'none'.  Defaulting to quotes
  ensures that namelists with character strings can be subsequently read
--- 2911,2924 ----
       END PROGRAM test_print
  
     Expanded namelist reads are permitted.  This causes an error if
! ‘-std=f95’ is used.  In the following example, the first element of the
  array will be given the value 0.00 and the two succeeding elements will
  be given the values 1.00 and 2.00.
       &MYNML
         X(1,1) = 0.00 , 1.00 , 2.00
       /
  
!    When writing a namelist, if no ‘DELIM=’ is specified, by default a
  double quote is used to delimit character strings.  If -std=F95, F2003,
  or F2008, etc, the delim status is set to 'none'.  Defaulting to quotes
  ensures that namelists with character strings can be subsequently read
*************** back in accurately.
*** 2927,2937 ****
  
  File: gfortran.info,  Node: X format descriptor without count field,  Next: Commas in FORMAT specifications,  Prev: Extensions to namelist,  Up: Extensions implemented in GNU Fortran
  
! 5.1.4 'X' format descriptor without count field
  -----------------------------------------------
  
! To support legacy codes, GNU Fortran permits the count field of the 'X'
! edit descriptor in 'FORMAT' statements to be omitted.  When omitted, the
  count is implicitly assumed to be one.
  
              PRINT 10, 2, 3
--- 2927,2937 ----
  
  File: gfortran.info,  Node: X format descriptor without count field,  Next: Commas in FORMAT specifications,  Prev: Extensions to namelist,  Up: Extensions implemented in GNU Fortran
  
! 5.1.4 ‘X’ format descriptor without count field
  -----------------------------------------------
  
! To support legacy codes, GNU Fortran permits the count field of the ‘X’
! edit descriptor in ‘FORMAT’ statements to be omitted.  When omitted, the
  count is implicitly assumed to be one.
  
              PRINT 10, 2, 3
*************** count is implicitly assumed to be one.
*** 2940,2952 ****
  
  File: gfortran.info,  Node: Commas in FORMAT specifications,  Next: Missing period in FORMAT specifications,  Prev: X format descriptor without count field,  Up: Extensions implemented in GNU Fortran
  
! 5.1.5 Commas in 'FORMAT' specifications
  ---------------------------------------
  
  To support legacy codes, GNU Fortran allows the comma separator to be
  omitted immediately before and after character string edit descriptors
! in 'FORMAT' statements.  A comma with no following format descriptor is
! permitted if the '-fdec-blank-format-item' is given on the command line.
  This is considered non-conforming code and is discouraged.
  
              PRINT 10, 2, 3
--- 2940,2952 ----
  
  File: gfortran.info,  Node: Commas in FORMAT specifications,  Next: Missing period in FORMAT specifications,  Prev: X format descriptor without count field,  Up: Extensions implemented in GNU Fortran
  
! 5.1.5 Commas in ‘FORMAT’ specifications
  ---------------------------------------
  
  To support legacy codes, GNU Fortran allows the comma separator to be
  omitted immediately before and after character string edit descriptors
! in ‘FORMAT’ statements.  A comma with no following format descriptor is
! permitted if the ‘-fdec-blank-format-item’ is given on the command line.
  This is considered non-conforming code and is discouraged.
  
              PRINT 10, 2, 3
*************** This is considered non-conforming code a
*** 2955,2967 ****
       20     FORMAT (I3, I3,)
  
  
! File: gfortran.info,  Node: Missing period in FORMAT specifications,  Next: Default widths for F, G and I format descriptors,  Prev: Commas in FORMAT specifications,  Up: Extensions implemented in GNU Fortran
  
! 5.1.6 Missing period in 'FORMAT' specifications
  -----------------------------------------------
  
  To support legacy codes, GNU Fortran allows missing periods in format
! specifications if and only if '-std=legacy' is given on the command
  line.  This is considered non-conforming code and is discouraged.
  
              REAL :: value
--- 2955,2967 ----
       20     FORMAT (I3, I3,)
  
  
! File: gfortran.info,  Node: Missing period in FORMAT specifications,  Next: Default widths for F, G and I format descriptors,  Prev: Commas in FORMAT specifications,  Up: Extensions implemented in GNU Fortran
  
! 5.1.6 Missing period in ‘FORMAT’ specifications
  -----------------------------------------------
  
  To support legacy codes, GNU Fortran allows missing periods in format
! specifications if and only if ‘-std=legacy’ is given on the command
  line.  This is considered non-conforming code and is discouraged.
  
              REAL :: value
*************** line.  This is considered non-conforming
*** 2969,2981 ****
       10     FORMAT ('F4')
  
  
! File: gfortran.info,  Node: Default widths for F, G and I format descriptors,  Next: I/O item lists,  Prev: Missing period in FORMAT specifications,  Up: Extensions implemented in GNU Fortran
  
! 5.1.7 Default widths for 'F', 'G' and 'I' format descriptors
  ------------------------------------------------------------
  
  To support legacy codes, GNU Fortran allows width to be omitted from
! format specifications if and only if '-fdec-format-defaults' is given on
  the command line.  Default widths will be used.  This is considered
  non-conforming code and is discouraged.
  
--- 2969,2981 ----
       10     FORMAT ('F4')
  
  
! File: gfortran.info,  Node: Default widths for F, G and I format descriptors,  Next: I/O item lists,  Prev: Missing period in FORMAT specifications,  Up: Extensions implemented in GNU Fortran
  
! 5.1.7 Default widths for ‘F’, ‘G’ and ‘I’ format descriptors
  ------------------------------------------------------------
  
  To support legacy codes, GNU Fortran allows width to be omitted from
! format specifications if and only if ‘-fdec-format-defaults’ is given on
  the command line.  Default widths will be used.  This is considered
  non-conforming code and is discouraged.
  
*************** non-conforming code and is discouraged.
*** 2985,3011 ****
       10     FORMAT ('F, G, I')
  
  
! File: gfortran.info,  Node: I/O item lists,  Next: Q exponent-letter,  Prev: Default widths for F, G and I format descriptors,  Up: Extensions implemented in GNU Fortran
  
  5.1.8 I/O item lists
  --------------------
  
  To support legacy codes, GNU Fortran allows the input item list of the
! 'READ' statement, and the output item lists of the 'WRITE' and 'PRINT'
  statements, to start with a comma.
  
  
  File: gfortran.info,  Node: Q exponent-letter,  Next: BOZ literal constants,  Prev: I/O item lists,  Up: Extensions implemented in GNU Fortran
  
! 5.1.9 'Q' exponent-letter
  -------------------------
  
  GNU Fortran accepts real literal constants with an exponent-letter of
! 'Q', for example, '1.23Q45'.  The constant is interpreted as a
! 'REAL(16)' entity on targets that support this type.  If the target does
! not support 'REAL(16)' but has a 'REAL(10)' type, then the
! real-literal-constant will be interpreted as a 'REAL(10)' entity.  In
! the absence of 'REAL(16)' and 'REAL(10)', an error will occur.
  
  
  File: gfortran.info,  Node: BOZ literal constants,  Next: Real array indices,  Prev: Q exponent-letter,  Up: Extensions implemented in GNU Fortran
--- 2985,3011 ----
       10     FORMAT ('F, G, I')
  
  
! File: gfortran.info,  Node: I/O item lists,  Next: Q exponent-letter,  Prev: Default widths for F, G and I format descriptors,  Up: Extensions implemented in GNU Fortran
  
  5.1.8 I/O item lists
  --------------------
  
  To support legacy codes, GNU Fortran allows the input item list of the
! ‘READ’ statement, and the output item lists of the ‘WRITE’ and ‘PRINT’
  statements, to start with a comma.
  
  
  File: gfortran.info,  Node: Q exponent-letter,  Next: BOZ literal constants,  Prev: I/O item lists,  Up: Extensions implemented in GNU Fortran
  
! 5.1.9 ‘Q’ exponent-letter
  -------------------------
  
  GNU Fortran accepts real literal constants with an exponent-letter of
! ‘Q’, for example, ‘1.23Q45’.  The constant is interpreted as a
! ‘REAL(16)’ entity on targets that support this type.  If the target does
! not support ‘REAL(16)’ but has a ‘REAL(10)’ type, then the
! real-literal-constant will be interpreted as a ‘REAL(10)’ entity.  In
! the absence of ‘REAL(16)’ and ‘REAL(10)’, an error will occur.
  
  
  File: gfortran.info,  Node: BOZ literal constants,  Next: Real array indices,  Prev: Q exponent-letter,  Up: Extensions implemented in GNU Fortran
*************** File: gfortran.info,  Node: BOZ literal
*** 3013,3041 ****
  5.1.10 BOZ literal constants
  ----------------------------
  
! Besides decimal constants, Fortran also supports binary ('b'), octal
! ('o') and hexadecimal ('z') integer constants.  The syntax is: 'prefix
! quote digits quote', where the prefix is either 'b', 'o' or 'z', quote
! is either ''' or '"' and the digits are '0' or '1' for binary, between
! '0' and '7' for octal, and between '0' and 'F' for hexadecimal.
! (Example: 'b'01011101''.)
  
     Up to Fortran 95, BOZ literal constants were only allowed to
  initialize integer variables in DATA statements.  Since Fortran 2003 BOZ
! literal constants are also allowed as actual arguments to the 'REAL',
! 'DBLE', 'INT' and 'CMPLX' intrinsic functions.  The BOZ literal constant
  is simply a string of bits, which is padded or truncated as needed,
  during conversion to a numeric type.  The Fortran standard states that
  the treatment of the sign bit is processor dependent.  Gfortran
  interprets the sign bit as a user would expect.
  
     As a deprecated extension, GNU Fortran allows hexadecimal BOZ literal
! constants to be specified using the 'X' prefix.  That the BOZ literal
  constant can also be specified by adding a suffix to the string, for
! example, 'Z'ABC'' and ''ABC'X' are equivalent.  Additionally, as
! extension, BOZ literals are permitted in some contexts outside of 'DATA'
  and the intrinsic functions listed in the Fortran standard.  Use
! '-fallow-invalid-boz' to enable the extension.
  
  
  File: gfortran.info,  Node: Real array indices,  Next: Unary operators,  Prev: BOZ literal constants,  Up: Extensions implemented in GNU Fortran
--- 3013,3041 ----
  5.1.10 BOZ literal constants
  ----------------------------
  
! Besides decimal constants, Fortran also supports binary (‘b’), octal
! (‘o’) and hexadecimal (‘z’) integer constants.  The syntax is: ‘prefix
! quote digits quote’, where the prefix is either ‘b’, ‘o’ or ‘z’, quote
! is either ‘'’ or ‘"’ and the digits are ‘0’ or ‘1’ for binary, between
! ‘0’ and ‘7’ for octal, and between ‘0’ and ‘F’ for hexadecimal.
! (Example: ‘b'01011101'’.)
  
     Up to Fortran 95, BOZ literal constants were only allowed to
  initialize integer variables in DATA statements.  Since Fortran 2003 BOZ
! literal constants are also allowed as actual arguments to the ‘REAL’,
! ‘DBLE’, ‘INT’ and ‘CMPLX’ intrinsic functions.  The BOZ literal constant
  is simply a string of bits, which is padded or truncated as needed,
  during conversion to a numeric type.  The Fortran standard states that
  the treatment of the sign bit is processor dependent.  Gfortran
  interprets the sign bit as a user would expect.
  
     As a deprecated extension, GNU Fortran allows hexadecimal BOZ literal
! constants to be specified using the ‘X’ prefix.  That the BOZ literal
  constant can also be specified by adding a suffix to the string, for
! example, ‘Z'ABC'’ and ‘'ABC'X’ are equivalent.  Additionally, as
! extension, BOZ literals are permitted in some contexts outside of ‘DATA’
  and the intrinsic functions listed in the Fortran standard.  Use
! ‘-fallow-invalid-boz’ to enable the extension.
  
  
  File: gfortran.info,  Node: Real array indices,  Next: Unary operators,  Prev: BOZ literal constants,  Up: Extensions implemented in GNU Fortran
*************** File: gfortran.info,  Node: Real array i
*** 3043,3049 ****
  5.1.11 Real array indices
  -------------------------
  
! As an extension, GNU Fortran allows the use of 'REAL' expressions or
  variables as array indices.
  
  
--- 3043,3049 ----
  5.1.11 Real array indices
  -------------------------
  
! As an extension, GNU Fortran allows the use of ‘REAL’ expressions or
  variables as array indices.
  
  
*************** the need for parenthesis.
*** 3061,3084 ****
  
  File: gfortran.info,  Node: Implicitly convert LOGICAL and INTEGER values,  Next: Hollerith constants support,  Prev: Unary operators,  Up: Extensions implemented in GNU Fortran
  
! 5.1.13 Implicitly convert 'LOGICAL' and 'INTEGER' values
  --------------------------------------------------------
  
  As an extension for backwards compatibility with other compilers, GNU
! Fortran allows the implicit conversion of 'LOGICAL' values to 'INTEGER'
! values and vice versa.  When converting from a 'LOGICAL' to an
! 'INTEGER', '.FALSE.' is interpreted as zero, and '.TRUE.' is interpreted
! as one.  When converting from 'INTEGER' to 'LOGICAL', the value zero is
! interpreted as '.FALSE.' and any nonzero value is interpreted as
! '.TRUE.'.
  
               LOGICAL :: l
               l = 1
               INTEGER :: i
               i = .TRUE.
  
!    However, there is no implicit conversion of 'INTEGER' values in
! 'if'-statements, nor of 'LOGICAL' or 'INTEGER' values in I/O operations.
  
  
  File: gfortran.info,  Node: Hollerith constants support,  Next: Character conversion,  Prev: Implicitly convert LOGICAL and INTEGER values,  Up: Extensions implemented in GNU Fortran
--- 3061,3084 ----
  
  File: gfortran.info,  Node: Implicitly convert LOGICAL and INTEGER values,  Next: Hollerith constants support,  Prev: Unary operators,  Up: Extensions implemented in GNU Fortran
  
! 5.1.13 Implicitly convert ‘LOGICAL’ and ‘INTEGER’ values
  --------------------------------------------------------
  
  As an extension for backwards compatibility with other compilers, GNU
! Fortran allows the implicit conversion of ‘LOGICAL’ values to ‘INTEGER’
! values and vice versa.  When converting from a ‘LOGICAL’ to an
! ‘INTEGER’, ‘.FALSE.’ is interpreted as zero, and ‘.TRUE.’ is interpreted
! as one.  When converting from ‘INTEGER’ to ‘LOGICAL’, the value zero is
! interpreted as ‘.FALSE.’ and any nonzero value is interpreted as
! ‘.TRUE.’.
  
               LOGICAL :: l
               l = 1
               INTEGER :: i
               i = .TRUE.
  
!    However, there is no implicit conversion of ‘INTEGER’ values in
! ‘if’-statements, nor of ‘LOGICAL’ or ‘INTEGER’ values in I/O operations.
  
  
  File: gfortran.info,  Node: Hollerith constants support,  Next: Character conversion,  Prev: Implicitly convert LOGICAL and INTEGER values,  Up: Extensions implemented in GNU Fortran
*************** File: gfortran.info,  Node: Hollerith co
*** 3086,3097 ****
  5.1.14 Hollerith constants support
  ----------------------------------
  
! GNU Fortran supports Hollerith constants in assignments, 'DATA'
  statements, function and subroutine arguments.  A Hollerith constant is
  written as a string of characters preceded by an integer constant
! indicating the character count, and the letter 'H' or 'h', and stored in
! bytewise fashion in a numeric ('INTEGER', 'REAL', or 'COMPLEX'),
! 'LOGICAL' or 'CHARACTER' variable.  The constant will be padded with
  spaces or truncated to fit the size of the variable in which it is
  stored.
  
--- 3086,3097 ----
  5.1.14 Hollerith constants support
  ----------------------------------
  
! GNU Fortran supports Hollerith constants in assignments, ‘DATA’
  statements, function and subroutine arguments.  A Hollerith constant is
  written as a string of characters preceded by an integer constant
! indicating the character count, and the letter ‘H’ or ‘h’, and stored in
! bytewise fashion in a numeric (‘INTEGER’, ‘REAL’, or ‘COMPLEX’),
! ‘LOGICAL’ or ‘CHARACTER’ variable.  The constant will be padded with
  spaces or truncated to fit the size of the variable in which it is
  stored.
  
*************** stored.
*** 3110,3125 ****
  
     In general, Hollerith constants were used to provide a rudimentary
  facility for handling character strings in early Fortran compilers,
! prior to the introduction of 'CHARACTER' variables in Fortran 77; in
  those cases, the standard-compliant equivalent is to convert the program
  to use proper character strings.  On occasion, there may be a case where
  the intent is specifically to initialize a numeric variable with a given
  byte sequence.  In these cases, the same result can be obtained by using
! the 'TRANSFER' statement, as in this example.
             integer(kind=4) :: a
             a = transfer ("abcd", a)     ! equivalent to: a = 4Habcd
  
!    The use of the '-fdec' option extends support of Hollerith constants
  to comparisons:
             integer*4 a
             a = 4hABCD
--- 3110,3125 ----
  
     In general, Hollerith constants were used to provide a rudimentary
  facility for handling character strings in early Fortran compilers,
! prior to the introduction of ‘CHARACTER’ variables in Fortran 77; in
  those cases, the standard-compliant equivalent is to convert the program
  to use proper character strings.  On occasion, there may be a case where
  the intent is specifically to initialize a numeric variable with a given
  byte sequence.  In these cases, the same result can be obtained by using
! the ‘TRANSFER’ statement, as in this example.
             integer(kind=4) :: a
             a = transfer ("abcd", a)     ! equivalent to: a = 4Habcd
  
!    The use of the ‘-fdec’ option extends support of Hollerith constants
  to comparisons:
             integer*4 a
             a = 4hABCD
*************** to comparisons:
*** 3127,3134 ****
               write(*,*) "no match"
             end if
  
!    Supported types are numeric ('INTEGER', 'REAL', or 'COMPLEX'), and
! 'CHARACTER'.
  
  
  File: gfortran.info,  Node: Character conversion,  Next: Cray pointers,  Prev: Hollerith constants support,  Up: Extensions implemented in GNU Fortran
--- 3127,3134 ----
               write(*,*) "no match"
             end if
  
!    Supported types are numeric (‘INTEGER’, ‘REAL’, or ‘COMPLEX’), and
! ‘CHARACTER’.
  
  
  File: gfortran.info,  Node: Character conversion,  Next: Cray pointers,  Prev: Hollerith constants support,  Up: Extensions implemented in GNU Fortran
*************** File: gfortran.info,  Node: Character co
*** 3139,3148 ****
  Allowing character literals to be used in a similar way to Hollerith
  constants is a non-standard extension.  This feature is enabled using
  -fdec-char-conversions and only applies to character literals of
! 'kind=1'.
  
!    Character literals can be used in 'DATA' statements and assignments
! with numeric ('INTEGER', 'REAL', or 'COMPLEX') or 'LOGICAL' variables.
  Like Hollerith constants they are copied byte-wise fashion.  The
  constant will be padded with spaces or truncated to fit the size of the
  variable in which it is stored.
--- 3139,3148 ----
  Allowing character literals to be used in a similar way to Hollerith
  constants is a non-standard extension.  This feature is enabled using
  -fdec-char-conversions and only applies to character literals of
! ‘kind=1’.
  
!    Character literals can be used in ‘DATA’ statements and assignments
! with numeric (‘INTEGER’, ‘REAL’, or ‘COMPLEX’) or ‘LOGICAL’ variables.
  Like Hollerith constants they are copied byte-wise fashion.  The
  constant will be padded with spaces or truncated to fit the size of the
  variable in which it is stored.
*************** variables: an integer "pointer" that hol
*** 3173,3179 ****
  The pointee may be an array or scalar.  If an assumed-size array is
  permitted within the scoping unit, a pointee can be an assumed-size
  array.  That is, the last dimension may be left unspecified by using a
! '*' in place of a value.  A pointee cannot be an assumed shape array.
  No space is allocated for the pointee.
  
     The pointee may have its type declared before or after the pointer
--- 3173,3179 ----
  The pointee may be an array or scalar.  If an assumed-size array is
  permitted within the scoping unit, a pointee can be an assumed-size
  array.  That is, the last dimension may be left unspecified by using a
! ‘*’ in place of a value.  A pointee cannot be an assumed shape array.
  No space is allocated for the pointee.
  
     The pointee may have its type declared before or after the pointer
*************** pointer in order to increment it.  Consi
*** 3200,3221 ****
               pointer (ipt, pointee)
               ipt = loc (target)
               ipt = ipt + 1
!    The last statement does not set 'ipt' to the address of 'target(1)',
! as it would in C pointer arithmetic.  Adding '1' to 'ipt' just adds one
! byte to the address stored in 'ipt'.
  
     Any expression involving the pointee will be translated to use the
  value stored in the pointer as the base address.
  
     To get the address of elements, this extension provides an intrinsic
! function 'LOC()'.  The 'LOC()' function is equivalent to the '&'
  operator in C, except the address is cast to an integer type:
               real ar(10)
               pointer(ipt, arpte(10))
               real arpte
               ipt = loc(ar)  ! Makes arpte is an alias for ar
               arpte(1) = 1.0 ! Sets ar(1) to 1.0
!    The pointer can also be set by a call to the 'MALLOC' intrinsic (see
  *note MALLOC::).
  
     Cray pointees often are used to alias an existing variable.  For
--- 3200,3221 ----
               pointer (ipt, pointee)
               ipt = loc (target)
               ipt = ipt + 1
!    The last statement does not set ‘ipt’ to the address of ‘target(1)’,
! as it would in C pointer arithmetic.  Adding ‘1’ to ‘ipt’ just adds one
! byte to the address stored in ‘ipt’.
  
     Any expression involving the pointee will be translated to use the
  value stored in the pointer as the base address.
  
     To get the address of elements, this extension provides an intrinsic
! function ‘LOC()’.  The ‘LOC()’ function is equivalent to the ‘&’
  operator in C, except the address is cast to an integer type:
               real ar(10)
               pointer(ipt, arpte(10))
               real arpte
               ipt = loc(ar)  ! Makes arpte is an alias for ar
               arpte(1) = 1.0 ! Sets ar(1) to 1.0
!    The pointer can also be set by a call to the ‘MALLOC’ intrinsic (see
  *note MALLOC::).
  
     Cray pointees often are used to alias an existing variable.  For
*************** example:
*** 3224,3232 ****
               integer iarr(10)
               pointer (ipt, iarr)
               ipt = loc(target)
!    As long as 'ipt' remains unchanged, 'iarr' is now an alias for
! 'target'.  The optimizer, however, will not detect this aliasing, so it
! is unsafe to use 'iarr' and 'target' simultaneously.  Using a pointee in
  any way that violates the Fortran aliasing rules or assumptions is
  illegal.  It is the user's responsibility to avoid doing this; the
  compiler works under the assumption that no such aliasing occurs.
--- 3224,3232 ----
               integer iarr(10)
               pointer (ipt, iarr)
               ipt = loc(target)
!    As long as ‘ipt’ remains unchanged, ‘iarr’ is now an alias for
! ‘target’.  The optimizer, however, will not detect this aliasing, so it
! is unsafe to use ‘iarr’ and ‘target’ simultaneously.  Using a pointee in
  any way that violates the Fortran aliasing rules or assumptions is
  illegal.  It is the user's responsibility to avoid doing this; the
  compiler works under the assumption that no such aliasing occurs.
*************** pointers will "incorrectly" optimize cod
*** 3242,3250 ****
  
     There are a number of restrictions on the attributes that can be
  applied to Cray pointers and pointees.  Pointees may not have the
! 'ALLOCATABLE', 'INTENT', 'OPTIONAL', 'DUMMY', 'TARGET', 'INTRINSIC', or
! 'POINTER' attributes.  Pointers may not have the 'DIMENSION', 'POINTER',
! 'TARGET', 'ALLOCATABLE', 'EXTERNAL', or 'INTRINSIC' attributes, nor may
  they be function results.  Pointees may not occur in more than one
  pointer statement.  A pointee cannot be a pointer.  Pointees cannot
  occur in equivalence, common, or data statements.
--- 3242,3250 ----
  
     There are a number of restrictions on the attributes that can be
  applied to Cray pointers and pointees.  Pointees may not have the
! ‘ALLOCATABLE’, ‘INTENT’, ‘OPTIONAL’, ‘DUMMY’, ‘TARGET’, ‘INTRINSIC’, or
! ‘POINTER’ attributes.  Pointers may not have the ‘DIMENSION’, ‘POINTER’,
! ‘TARGET’, ‘ALLOCATABLE’, ‘EXTERNAL’, or ‘INTRINSIC’ attributes, nor may
  they be function results.  Pointees may not occur in more than one
  pointer statement.  A pointee cannot be a pointer.  Pointees cannot
  occur in equivalence, common, or data statements.
*************** change the base address of the array tha
*** 3271,3313 ****
  
  File: gfortran.info,  Node: CONVERT specifier,  Next: OpenMP,  Prev: Cray pointers,  Up: Extensions implemented in GNU Fortran
  
! 5.1.17 'CONVERT' specifier
  --------------------------
  
  GNU Fortran allows the conversion of unformatted data between little-
  and big-endian representation to facilitate moving of data between
! different systems.  The conversion can be indicated with the 'CONVERT'
! specifier on the 'OPEN' statement.  *Note GFORTRAN_CONVERT_UNIT::, for
  an alternative way of specifying the data format via an environment
  variable.
  
!    Valid values for 'CONVERT' on most systems are:
!      'CONVERT='NATIVE'' Use the native format.  This is the default.
!      'CONVERT='SWAP'' Swap between little- and big-endian.
!      'CONVERT='LITTLE_ENDIAN'' Use the little-endian representation for
       unformatted files.
!      'CONVERT='BIG_ENDIAN'' Use the big-endian representation for
       unformatted files.
!    On POWER systems which support '-mabi=ieeelongdouble', there are
  additional options, which can be combined with the others with commas.
  Those are
!      'CONVERT='R16_IEEE'' Use IEEE 128-bit format for 'REAL(KIND=16)'.
!      'CONVERT='R16_IBM'' Use IBM 'long double' format for
!      real'REAL(KIND=16)'.
  
     Using the option could look like this:
         open(file='big.dat',form='unformatted',access='sequential', &
              convert='big_endian')
  
     The value of the conversion can be queried by using
! 'INQUIRE(CONVERT=ch)'.  The values returned are ''BIG_ENDIAN'' and
! ''LITTLE_ENDIAN''.
  
!    'CONVERT' works between big- and little-endian for 'INTEGER' values
! of all supported kinds and for 'REAL' on IEEE systems of kinds 4 and 8.
  Conversion between different "extended double" types on different
  architectures such as m68k and x86_64, which GNU Fortran supports as
! 'REAL(KIND=10)' and 'REAL(KIND=16)', will probably not work.
  
     _Note that the values specified via the GFORTRAN_CONVERT_UNIT
  environment variable will override the CONVERT specifier in the open
--- 3271,3313 ----
  
  File: gfortran.info,  Node: CONVERT specifier,  Next: OpenMP,  Prev: Cray pointers,  Up: Extensions implemented in GNU Fortran
  
! 5.1.17 ‘CONVERT’ specifier
  --------------------------
  
  GNU Fortran allows the conversion of unformatted data between little-
  and big-endian representation to facilitate moving of data between
! different systems.  The conversion can be indicated with the ‘CONVERT’
! specifier on the ‘OPEN’ statement.  *Note GFORTRAN_CONVERT_UNIT::, for
  an alternative way of specifying the data format via an environment
  variable.
  
!    Valid values for ‘CONVERT’ on most systems are:
!      ‘CONVERT='NATIVE'’ Use the native format.  This is the default.
!      ‘CONVERT='SWAP'’ Swap between little- and big-endian.
!      ‘CONVERT='LITTLE_ENDIAN'’ Use the little-endian representation for
       unformatted files.
!      ‘CONVERT='BIG_ENDIAN'’ Use the big-endian representation for
       unformatted files.
!    On POWER systems which support ‘-mabi=ieeelongdouble’, there are
  additional options, which can be combined with the others with commas.
  Those are
!      ‘CONVERT='R16_IEEE'’ Use IEEE 128-bit format for ‘REAL(KIND=16)’.
!      ‘CONVERT='R16_IBM'’ Use IBM ‘long double’ format for
!      real‘REAL(KIND=16)’.
  
     Using the option could look like this:
         open(file='big.dat',form='unformatted',access='sequential', &
              convert='big_endian')
  
     The value of the conversion can be queried by using
! ‘INQUIRE(CONVERT=ch)’.  The values returned are ‘'BIG_ENDIAN'’ and
! ‘'LITTLE_ENDIAN'’.
  
!    ‘CONVERT’ works between big- and little-endian for ‘INTEGER’ values
! of all supported kinds and for ‘REAL’ on IEEE systems of kinds 4 and 8.
  Conversion between different "extended double" types on different
  architectures such as m68k and x86_64, which GNU Fortran supports as
! ‘REAL(KIND=10)’ and ‘REAL(KIND=16)’, will probably not work.
  
     _Note that the values specified via the GFORTRAN_CONVERT_UNIT
  environment variable will override the CONVERT specifier in the open
*************** run-time behavior.
*** 3334,3350 ****
     GNU Fortran strives to be compatible to the OpenMP Application
  Program Interface v4.5 (https://openmp.org/specifications/).
  
!    To enable the processing of the OpenMP directive '!$omp' in free-form
! source code; the 'c$omp', '*$omp' and '!$omp' directives in fixed form;
! the '!$' conditional compilation sentinels in free form; and the 'c$',
! '*$' and '!$' sentinels in fixed form, 'gfortran' needs to be invoked
! with the '-fopenmp'.  This also arranges for automatic linking of the
  GNU Offloading and Multi Processing Runtime Library *note libgomp:
  (libgomp)Top.
  
     The OpenMP Fortran runtime library routines are provided both in a
! form of a Fortran 90 module named 'omp_lib' and in a form of a Fortran
! 'include' file named 'omp_lib.h'.
  
     An example of a parallelized loop taken from Appendix A.1 of the
  OpenMP Application Program Interface v2.5:
--- 3334,3350 ----
     GNU Fortran strives to be compatible to the OpenMP Application
  Program Interface v4.5 (https://openmp.org/specifications/).
  
!    To enable the processing of the OpenMP directive ‘!$omp’ in free-form
! source code; the ‘c$omp’, ‘*$omp’ and ‘!$omp’ directives in fixed form;
! the ‘!$’ conditional compilation sentinels in free form; and the ‘c$’,
! ‘*$’ and ‘!$’ sentinels in fixed form, ‘gfortran’ needs to be invoked
! with the ‘-fopenmp’.  This also arranges for automatic linking of the
  GNU Offloading and Multi Processing Runtime Library *note libgomp:
  (libgomp)Top.
  
     The OpenMP Fortran runtime library routines are provided both in a
! form of a Fortran 90 module named ‘omp_lib’ and in a form of a Fortran
! ‘include’ file named ‘omp_lib.h’.
  
     An example of a parallelized loop taken from Appendix A.1 of the
  OpenMP Application Program Interface v2.5:
*************** OpenMP Application Program Interface v2.
*** 3359,3375 ****
       END SUBROUTINE A1
  
     Please note:
!    * '-fopenmp' implies '-frecursive', i.e., all local arrays will be
       allocated on the stack.  When porting existing code to OpenMP, this
       may lead to surprising results, especially to segmentation faults
       if the stacksize is limited.
  
!    * On glibc-based systems, OpenMP enabled applications cannot be
       statically linked due to limitations of the underlying
       pthreads-implementation.  It might be possible to get a working
!      solution if '-Wl,--whole-archive -lpthread -Wl,--no-whole-archive'
       is added to the command line.  However, this is not supported by
!      'gcc' and thus not recommended.
  
  
  File: gfortran.info,  Node: OpenACC,  Next: Argument list functions,  Prev: OpenMP,  Up: Extensions implemented in GNU Fortran
--- 3359,3375 ----
       END SUBROUTINE A1
  
     Please note:
!    • ‘-fopenmp’ implies ‘-frecursive’, i.e., all local arrays will be
       allocated on the stack.  When porting existing code to OpenMP, this
       may lead to surprising results, especially to segmentation faults
       if the stacksize is limited.
  
!    • On glibc-based systems, OpenMP enabled applications cannot be
       statically linked due to limitations of the underlying
       pthreads-implementation.  It might be possible to get a working
!      solution if ‘-Wl,--whole-archive -lpthread -Wl,--no-whole-archive’
       is added to the command line.  However, this is not supported by
!      ‘gcc’ and thus not recommended.
  
  
  File: gfortran.info,  Node: OpenACC,  Next: Argument list functions,  Prev: OpenMP,  Up: Extensions implemented in GNU Fortran
*************** influence run-time behavior.
*** 3385,3409 ****
     GNU Fortran strives to be compatible to the OpenACC Application
  Programming Interface v2.6 (https://www.openacc.org/).
  
!    To enable the processing of the OpenACC directive '!$acc' in
! free-form source code; the 'c$acc', '*$acc' and '!$acc' directives in
! fixed form; the '!$' conditional compilation sentinels in free form; and
! the 'c$', '*$' and '!$' sentinels in fixed form, 'gfortran' needs to be
! invoked with the '-fopenacc'.  This also arranges for automatic linking
  of the GNU Offloading and Multi Processing Runtime Library *note
  libgomp: (libgomp)Top.
  
     The OpenACC Fortran runtime library routines are provided both in a
! form of a Fortran 90 module named 'openacc' and in a form of a Fortran
! 'include' file named 'openacc_lib.h'.
  
  
  File: gfortran.info,  Node: Argument list functions,  Next: Read/Write after EOF marker,  Prev: OpenACC,  Up: Extensions implemented in GNU Fortran
  
! 5.1.20 Argument list functions '%VAL', '%REF' and '%LOC'
  --------------------------------------------------------
  
! GNU Fortran supports argument list functions '%VAL', '%REF' and '%LOC'
  statements, for backward compatibility with g77.  It is recommended that
  these should be used only for code that is accessing facilities outside
  of GNU Fortran, such as operating system or windowing facilities.  It is
--- 3385,3409 ----
     GNU Fortran strives to be compatible to the OpenACC Application
  Programming Interface v2.6 (https://www.openacc.org/).
  
!    To enable the processing of the OpenACC directive ‘!$acc’ in
! free-form source code; the ‘c$acc’, ‘*$acc’ and ‘!$acc’ directives in
! fixed form; the ‘!$’ conditional compilation sentinels in free form; and
! the ‘c$’, ‘*$’ and ‘!$’ sentinels in fixed form, ‘gfortran’ needs to be
! invoked with the ‘-fopenacc’.  This also arranges for automatic linking
  of the GNU Offloading and Multi Processing Runtime Library *note
  libgomp: (libgomp)Top.
  
     The OpenACC Fortran runtime library routines are provided both in a
! form of a Fortran 90 module named ‘openacc’ and in a form of a Fortran
! ‘include’ file named ‘openacc_lib.h’.
  
  
  File: gfortran.info,  Node: Argument list functions,  Next: Read/Write after EOF marker,  Prev: OpenACC,  Up: Extensions implemented in GNU Fortran
  
! 5.1.20 Argument list functions ‘%VAL’, ‘%REF’ and ‘%LOC’
  --------------------------------------------------------
  
! GNU Fortran supports argument list functions ‘%VAL’, ‘%REF’ and ‘%LOC’
  statements, for backward compatibility with g77.  It is recommended that
  these should be used only for code that is accessing facilities outside
  of GNU Fortran, such as operating system or windowing facilities.  It is
*************** use by the program as a whole, but are t
*** 3414,3423 ****
  should be thoroughly tested each time they are rebuilt using a new
  compiler or version of a compiler.
  
!    '%VAL' passes a scalar argument by value, '%REF' passes it by
! reference and '%LOC' passes its memory location.  Since gfortran already
! passes scalar arguments by reference, '%REF' is in effect a do-nothing.
! '%LOC' has the same effect as a Fortran pointer.
  
     An example of passing an argument by value to a C subroutine foo.:
       C
--- 3414,3423 ----
  should be thoroughly tested each time they are rebuilt using a new
  compiler or version of a compiler.
  
!    ‘%VAL’ passes a scalar argument by value, ‘%REF’ passes it by
! reference and ‘%LOC’ passes its memory location.  Since gfortran already
! passes scalar arguments by reference, ‘%REF’ is in effect a do-nothing.
! ‘%LOC’ has the same effect as a Fortran pointer.
  
     An example of passing an argument by value to a C subroutine foo.:
       C
*************** passes scalar arguments by reference, '%
*** 3432,3438 ****
     For details refer to the g77 manual
  <https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/index.html#Top>.
  
!    Also, 'c_by_val.f' and its partner 'c_by_val.c' of the GNU Fortran
  testsuite are worth a look.
  
  
--- 3432,3438 ----
     For details refer to the g77 manual
  <https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/index.html#Top>.
  
!    Also, ‘c_by_val.f’ and its partner ‘c_by_val.c’ of the GNU Fortran
  testsuite are worth a look.
  
  
*************** File: gfortran.info,  Node: Read/Write a
*** 3441,3470 ****
  5.1.21 Read/Write after EOF marker
  ----------------------------------
  
! Some legacy codes rely on allowing 'READ' or 'WRITE' after the EOF file
  marker in order to find the end of a file.  GNU Fortran normally rejects
  these codes with a run-time error message and suggests the user consider
! 'BACKSPACE' or 'REWIND' to properly position the file before the EOF
  marker.  As an extension, the run-time error may be disabled using
  -std=legacy.
  
  
  File: gfortran.info,  Node: STRUCTURE and RECORD,  Next: UNION and MAP,  Prev: Read/Write after EOF marker,  Up: Extensions implemented in GNU Fortran
  
! 5.1.22 'STRUCTURE' and 'RECORD'
  -------------------------------
  
  Record structures are a pre-Fortran-90 vendor extension to create
  user-defined aggregate data types.  Support for record structures in GNU
! Fortran can be enabled with the '-fdec-structure' compile flag.  If you
  have a choice, you should instead use Fortran 90's "derived types",
  which have a different syntax.
  
     In many cases, record structures can easily be converted to derived
! types.  To convert, replace 'STRUCTURE /'STRUCTURE-NAME'/' by 'TYPE'
! TYPE-NAME.  Additionally, replace 'RECORD /'STRUCTURE-NAME'/' by
! 'TYPE('TYPE-NAME')'.  Finally, in the component access, replace the
! period ('.') by the percent sign ('%').
  
     Here is an example of code using the non portable record structure
  syntax:
--- 3441,3470 ----
  5.1.21 Read/Write after EOF marker
  ----------------------------------
  
! Some legacy codes rely on allowing ‘READ’ or ‘WRITE’ after the EOF file
  marker in order to find the end of a file.  GNU Fortran normally rejects
  these codes with a run-time error message and suggests the user consider
! ‘BACKSPACE’ or ‘REWIND’ to properly position the file before the EOF
  marker.  As an extension, the run-time error may be disabled using
  -std=legacy.
  
  
  File: gfortran.info,  Node: STRUCTURE and RECORD,  Next: UNION and MAP,  Prev: Read/Write after EOF marker,  Up: Extensions implemented in GNU Fortran
  
! 5.1.22 ‘STRUCTURE’ and ‘RECORD’
  -------------------------------
  
  Record structures are a pre-Fortran-90 vendor extension to create
  user-defined aggregate data types.  Support for record structures in GNU
! Fortran can be enabled with the ‘-fdec-structure’ compile flag.  If you
  have a choice, you should instead use Fortran 90's "derived types",
  which have a different syntax.
  
     In many cases, record structures can easily be converted to derived
! types.  To convert, replace ‘STRUCTURE /’STRUCTURE-NAME‘/’ by ‘TYPE’
! TYPE-NAME.  Additionally, replace ‘RECORD /’STRUCTURE-NAME‘/’ by
! ‘TYPE(’TYPE-NAME‘)’.  Finally, in the component access, replace the
! period (‘.’) by the percent sign (‘%’).
  
     Here is an example of code using the non portable record structure
  syntax:
*************** This code can easily be rewritten in the
*** 3522,3531 ****
  GNU Fortran implements STRUCTURES like derived types with the following
  rules and exceptions:
  
!    * Structures act like derived types with the 'SEQUENCE' attribute.
       Otherwise they may contain no specifiers.
  
!    * Structures may contain a special field with the name '%FILL'.  This
       will create an anonymous component which cannot be accessed but
       occupies space just as if a component of the same type was declared
       in its place, useful for alignment purposes.  As an example, the
--- 3522,3531 ----
  GNU Fortran implements STRUCTURES like derived types with the following
  rules and exceptions:
  
!    • Structures act like derived types with the ‘SEQUENCE’ attribute.
       Otherwise they may contain no specifiers.
  
!    • Structures may contain a special field with the name ‘%FILL’.  This
       will create an anonymous component which cannot be accessed but
       occupies space just as if a component of the same type was declared
       in its place, useful for alignment purposes.  As an example, the
*************** rules and exceptions:
*** 3537,3543 ****
              character(4) end
            end structure
  
!    * Structures may share names with other symbols.  For example, the
       following is invalid for derived types, but valid for structures:
  
            structure /header/
--- 3537,3543 ----
              character(4) end
            end structure
  
!    • Structures may share names with other symbols.  For example, the
       following is invalid for derived types, but valid for structures:
  
            structure /header/
*************** rules and exceptions:
*** 3545,3551 ****
            end structure
            record /header/ header
  
!    * Structure types may be declared nested within another parent
       structure.  The syntax is:
            structure /type-name/
                ...
--- 3545,3551 ----
            end structure
            record /header/ header
  
!    • Structure types may be declared nested within another parent
       structure.  The syntax is:
            structure /type-name/
                ...
*************** rules and exceptions:
*** 3578,3609 ****
              character(10) memo
            end structure
  
!    * Structures may contain 'UNION' blocks.  For more detail see the
       section on *note UNION and MAP::.
  
!    * Structures support old-style initialization of components, like
       those described in *note Old-style variable initialization::.  For
       array initializers, an initializer may contain a repeat
!      specification of the form '<literal-integer> *
!      <constant-initializer>'.  The value of the integer indicates the
       number of times to repeat the constant initializer when expanding
       the initializer list.
  
  
  File: gfortran.info,  Node: UNION and MAP,  Next: Type variants for integer intrinsics,  Prev: STRUCTURE and RECORD,  Up: Extensions implemented in GNU Fortran
  
! 5.1.23 'UNION' and 'MAP'
  ------------------------
  
  Unions are an old vendor extension which were commonly used with the
! non-standard *note STRUCTURE and RECORD:: extensions.  Use of 'UNION'
! and 'MAP' is automatically enabled with '-fdec-structure'.
  
!    A 'UNION' declaration occurs within a structure; within the
! definition of each union is a number of 'MAP' blocks.  Each 'MAP' shares
  storage with its sibling maps (in the same union), and the size of the
  union is the size of the largest map within it, just as with unions in
! C. The major difference is that component references do not indicate
  which union or map the component is in (the compiler gets to figure that
  out).
  
--- 3578,3609 ----
              character(10) memo
            end structure
  
!    • Structures may contain ‘UNION’ blocks.  For more detail see the
       section on *note UNION and MAP::.
  
!    • Structures support old-style initialization of components, like
       those described in *note Old-style variable initialization::.  For
       array initializers, an initializer may contain a repeat
!      specification of the form ‘<literal-integer> *
!      <constant-initializer>’.  The value of the integer indicates the
       number of times to repeat the constant initializer when expanding
       the initializer list.
  
  
  File: gfortran.info,  Node: UNION and MAP,  Next: Type variants for integer intrinsics,  Prev: STRUCTURE and RECORD,  Up: Extensions implemented in GNU Fortran
  
! 5.1.23 ‘UNION’ and ‘MAP’
  ------------------------
  
  Unions are an old vendor extension which were commonly used with the
! non-standard *note STRUCTURE and RECORD:: extensions.  Use of ‘UNION’
! and ‘MAP’ is automatically enabled with ‘-fdec-structure’.
  
!    A ‘UNION’ declaration occurs within a structure; within the
! definition of each union is a number of ‘MAP’ blocks.  Each ‘MAP’ shares
  storage with its sibling maps (in the same union), and the size of the
  union is the size of the largest map within it, just as with unions in
! C.  The major difference is that component references do not indicate
  which union or map the component is in (the compiler gets to figure that
  out).
  
*************** each are:
*** 3710,3716 ****
       J - INTEGER(kind=4)
       K - INTEGER(kind=8)
  
!    GNU Fortran supports these with the flag '-fdec-intrinsic-ints'.
  Intrinsics for which prefixed versions are available and in what form
  are noted in *note Intrinsic Procedures::.  The complete list of
  supported intrinsics is here:
--- 3710,3716 ----
       J - INTEGER(kind=4)
       K - INTEGER(kind=8)
  
!    GNU Fortran supports these with the flag ‘-fdec-intrinsic-ints’.
  Intrinsics for which prefixed versions are available and in what form
  are noted in *note Intrinsic Procedures::.  The complete list of
  supported intrinsics is here:
*************** supported intrinsics is here:
*** 3718,3758 ****
  Intrinsic      B              I              J              K
                                                              
  ---------------------------------------------------------------------------
! '*note ABS::'  'BABS'         'IIABS'        'JIABS'        'KIABS'
! '*note BTEST::''BBTEST'       'BITEST'       'BJTEST'       'BKTEST'
! '*note IAND::' 'BIAND'        'IIAND'        'JIAND'        'KIAND'
! '*note IBCLR::''BBCLR'        'IIBCLR'       'JIBCLR'       'KIBCLR'
! '*note IBITS::''BBITS'        'IIBITS'       'JIBITS'       'KIBITS'
! '*note IBSET::''BBSET'        'IIBSET'       'JIBSET'       'KIBSET'
! '*note IEOR::' 'BIEOR'        'IIEOR'        'JIEOR'        'KIEOR'
! '*note IOR::'  'BIOR'         'IIOR'         'JIOR'         'KIOR'
! '*note ISHFT::''BSHFT'        'IISHFT'       'JISHFT'       'KISHFT'
! '*note ISHFTC::''BSHFTC'      'IISHFTC'      'JISHFTC'      'KISHFTC'
! '*note MOD::'  'BMOD'         'IMOD'         'JMOD'         'KMOD'
! '*note NOT::'  'BNOT'         'INOT'         'JNOT'         'KNOT'
! '*note REAL::' '--'           'FLOATI'       'FLOATJ'       'FLOATK'
  
  
  File: gfortran.info,  Node: AUTOMATIC and STATIC attributes,  Next: Form feed as whitespace,  Prev: Type variants for integer intrinsics,  Up: Extensions implemented in GNU Fortran
  
! 5.1.25 'AUTOMATIC' and 'STATIC' attributes
  ------------------------------------------
  
! With '-fdec-static' GNU Fortran supports the DEC extended attributes
! 'STATIC' and 'AUTOMATIC' to provide explicit specification of entity
! storage.  These follow the syntax of the Fortran standard 'SAVE'
  attribute.
  
!    'STATIC' is exactly equivalent to 'SAVE', and specifies that an
! entity should be allocated in static memory.  As an example, 'STATIC'
  local variables will retain their values across multiple calls to a
  function.
  
!    Entities marked 'AUTOMATIC' will be stack automatic whenever
! possible.  'AUTOMATIC' is the default for local variables smaller than
! '-fmax-stack-var-size', unless '-fno-automatic' is given.  This
! attribute overrides '-fno-automatic', '-fmax-stack-var-size', and
! blanket 'SAVE' statements.
  
     Examples:
  
--- 3718,3758 ----
  Intrinsic      B              I              J              K
                                                              
  ---------------------------------------------------------------------------
! ‘*note ABS::’  ‘BABS’         ‘IIABS’        ‘JIABS’        ‘KIABS’
! ‘*note BTEST::’‘BBTEST’       ‘BITEST’       ‘BJTEST’       ‘BKTEST’
! ‘*note IAND::’ ‘BIAND’        ‘IIAND’        ‘JIAND’        ‘KIAND’
! ‘*note IBCLR::’‘BBCLR’        ‘IIBCLR’       ‘JIBCLR’       ‘KIBCLR’
! ‘*note IBITS::’‘BBITS’        ‘IIBITS’       ‘JIBITS’       ‘KIBITS’
! ‘*note IBSET::’‘BBSET’        ‘IIBSET’       ‘JIBSET’       ‘KIBSET’
! ‘*note IEOR::’ ‘BIEOR’        ‘IIEOR’        ‘JIEOR’        ‘KIEOR’
! ‘*note IOR::’  ‘BIOR’         ‘IIOR’         ‘JIOR’         ‘KIOR’
! ‘*note ISHFT::’‘BSHFT’        ‘IISHFT’       ‘JISHFT’       ‘KISHFT’
! ‘*note ISHFTC::’‘BSHFTC’      ‘IISHFTC’      ‘JISHFTC’      ‘KISHFTC’
! ‘*note MOD::’  ‘BMOD’         ‘IMOD’         ‘JMOD’         ‘KMOD’
! ‘*note NOT::’  ‘BNOT’         ‘INOT’         ‘JNOT’         ‘KNOT’
! ‘*note REAL::’ ‘--’           ‘FLOATI’       ‘FLOATJ’       ‘FLOATK’
  
  
  File: gfortran.info,  Node: AUTOMATIC and STATIC attributes,  Next: Form feed as whitespace,  Prev: Type variants for integer intrinsics,  Up: Extensions implemented in GNU Fortran
  
! 5.1.25 ‘AUTOMATIC’ and ‘STATIC’ attributes
  ------------------------------------------
  
! With ‘-fdec-static’ GNU Fortran supports the DEC extended attributes
! ‘STATIC’ and ‘AUTOMATIC’ to provide explicit specification of entity
! storage.  These follow the syntax of the Fortran standard ‘SAVE’
  attribute.
  
!    ‘STATIC’ is exactly equivalent to ‘SAVE’, and specifies that an
! entity should be allocated in static memory.  As an example, ‘STATIC’
  local variables will retain their values across multiple calls to a
  function.
  
!    Entities marked ‘AUTOMATIC’ will be stack automatic whenever
! possible.  ‘AUTOMATIC’ is the default for local variables smaller than
! ‘-fmax-stack-var-size’, unless ‘-fno-automatic’ is given.  This
! attribute overrides ‘-fno-automatic’, ‘-fmax-stack-var-size’, and
! blanket ‘SAVE’ statements.
  
     Examples:
  
*************** File: gfortran.info,  Node: TYPE as an a
*** 3795,3802 ****
  5.1.27 TYPE as an alias for PRINT
  ---------------------------------
  
! For compatibility, GNU Fortran will interpret 'TYPE' statements as
! 'PRINT' statements with the flag '-fdec'.  With this flag asserted, the
  following two examples are equivalent:
  
       TYPE *, 'hello world'
--- 3795,3802 ----
  5.1.27 TYPE as an alias for PRINT
  ---------------------------------
  
! For compatibility, GNU Fortran will interpret ‘TYPE’ statements as
! ‘PRINT’ statements with the flag ‘-fdec’.  With this flag asserted, the
  following two examples are equivalent:
  
       TYPE *, 'hello world'
*************** File: gfortran.info,  Node: %LOC as an r
*** 3809,3818 ****
  5.1.28 %LOC as an rvalue
  ------------------------
  
! Normally '%LOC' is allowed only in parameter lists.  However the
! intrinsic function 'LOC' does the same thing, and is usable as the
  right-hand-side of assignments.  For compatibility, GNU Fortran supports
! the use of '%LOC' as an alias for the builtin 'LOC' with '-std=legacy'.
  With this feature enabled the following two examples are equivalent:
  
       integer :: i, l
--- 3809,3818 ----
  5.1.28 %LOC as an rvalue
  ------------------------
  
! Normally ‘%LOC’ is allowed only in parameter lists.  However the
! intrinsic function ‘LOC’ does the same thing, and is usable as the
  right-hand-side of assignments.  For compatibility, GNU Fortran supports
! the use of ‘%LOC’ as an alias for the builtin ‘LOC’ with ‘-std=legacy’.
  With this feature enabled the following two examples are equivalent:
  
       integer :: i, l
*************** File: gfortran.info,  Node: .XOR. operat
*** 3828,3835 ****
  5.1.29 .XOR. operator
  ---------------------
  
! GNU Fortran supports '.XOR.' as a logical operator with '-std=legacy'
! for compatibility with legacy code.  '.XOR.' is equivalent to '.NEQV.'.
  That is, the output is true if and only if the inputs differ.
  
  
--- 3828,3835 ----
  5.1.29 .XOR. operator
  ---------------------
  
! GNU Fortran supports ‘.XOR.’ as a logical operator with ‘-std=legacy’
! for compatibility with legacy code.  ‘.XOR.’ is equivalent to ‘.NEQV.’.
  That is, the output is true if and only if the inputs differ.
  
  
*************** File: gfortran.info,  Node: Bitwise logi
*** 3838,3844 ****
  5.1.30 Bitwise logical operators
  --------------------------------
  
! With '-fdec', GNU Fortran relaxes the type constraints on logical
  operators to allow integer operands, and performs the corresponding
  bitwise operation instead.  This flag is for compatibility only, and
  should be avoided in new code.  Consider:
--- 3838,3844 ----
  5.1.30 Bitwise logical operators
  --------------------------------
  
! With ‘-fdec’, GNU Fortran relaxes the type constraints on logical
  operators to allow integer operands, and performs the corresponding
  bitwise operation instead.  This flag is for compatibility only, and
  should be avoided in new code.  Consider:
*************** should be avoided in new code.  Consider
*** 3848,3872 ****
         j = z'cc'
         print *, i .AND. j
  
!    In this example, compiled with '-fdec', GNU Fortran will replace the
! '.AND.' operation with a call to the intrinsic '*note IAND::' function,
! yielding the bitwise-and of 'i' and 'j'.
  
     Note that this conversion will occur if at least one operand is of
  integral type.  As a result, a logical operand will be converted to an
  integer when the other operand is an integer in a logical operation.  In
! this case, '.TRUE.' is converted to '1' and '.FALSE.' to '0'.
  
     Here is the mapping of logical operator to bitwise intrinsic used
! with '-fdec':
  
  Operator           Intrinsic          Bitwise operation
  ---------------------------------------------------------------------------
! '.NOT.'            '*note NOT::'      complement
! '.AND.'            '*note IAND::'     intersection
! '.OR.'             '*note IOR::'      union
! '.NEQV.'           '*note IEOR::'     exclusive or
! '.EQV.'            '*note NOT::(*note IEOR::)'complement of exclusive or
  
  
  File: gfortran.info,  Node: Extended I/O specifiers,  Next: Legacy PARAMETER statements,  Prev: Bitwise logical operators,  Up: Extensions implemented in GNU Fortran
--- 3848,3872 ----
         j = z'cc'
         print *, i .AND. j
  
!    In this example, compiled with ‘-fdec’, GNU Fortran will replace the
! ‘.AND.’ operation with a call to the intrinsic ‘*note IAND::’ function,
! yielding the bitwise-and of ‘i’ and ‘j’.
  
     Note that this conversion will occur if at least one operand is of
  integral type.  As a result, a logical operand will be converted to an
  integer when the other operand is an integer in a logical operation.  In
! this case, ‘.TRUE.’ is converted to ‘1’ and ‘.FALSE.’ to ‘0’.
  
     Here is the mapping of logical operator to bitwise intrinsic used
! with ‘-fdec’:
  
  Operator           Intrinsic          Bitwise operation
  ---------------------------------------------------------------------------
! ‘.NOT.’            ‘*note NOT::’      complement
! ‘.AND.’            ‘*note IAND::’     intersection
! ‘.OR.’             ‘*note IOR::’      union
! ‘.NEQV.’           ‘*note IEOR::’     exclusive or
! ‘.EQV.’            ‘*note NOT::(*note IEOR::)’complement of exclusive or
  
  
  File: gfortran.info,  Node: Extended I/O specifiers,  Next: Legacy PARAMETER statements,  Prev: Bitwise logical operators,  Up: Extensions implemented in GNU Fortran
*************** File: gfortran.info,  Node: Extended I/O
*** 3875,3889 ****
  ------------------------------
  
  GNU Fortran supports the additional legacy I/O specifiers
! 'CARRIAGECONTROL', 'READONLY', and 'SHARE' with the compile flag
! '-fdec', for compatibility.
  
! 'CARRIAGECONTROL'
!      The 'CARRIAGECONTROL' specifier allows a user to control line
       termination settings between output records for an I/O unit.  The
       specifier has no meaning for readonly files.  When
!      'CARRAIGECONTROL' is specified upon opening a unit for formatted
!      writing, the exact 'CARRIAGECONTROL' setting determines what
       characters to write between output records.  The syntax is:
  
            OPEN(..., CARRIAGECONTROL=cc)
--- 3875,3889 ----
  ------------------------------
  
  GNU Fortran supports the additional legacy I/O specifiers
! ‘CARRIAGECONTROL’, ‘READONLY’, and ‘SHARE’ with the compile flag
! ‘-fdec’, for compatibility.
  
! ‘CARRIAGECONTROL’
!      The ‘CARRIAGECONTROL’ specifier allows a user to control line
       termination settings between output records for an I/O unit.  The
       specifier has no meaning for readonly files.  When
!      ‘CARRAIGECONTROL’ is specified upon opening a unit for formatted
!      writing, the exact ‘CARRIAGECONTROL’ setting determines what
       characters to write between output records.  The syntax is:
  
            OPEN(..., CARRIAGECONTROL=cc)
*************** GNU Fortran supports the additional lega
*** 3891,3931 ****
       Where _cc_ is a character expression that evaluates to one of the
       following values:
  
!      ''LIST''       One line feed between records (default)
!      ''FORTRAN''    Legacy interpretation of the first character (see below)
!      ''NONE''       No separator between records
  
!      With 'CARRIAGECONTROL='FORTRAN'', when a record is written, the
       first character of the input record is not written, and instead
       determines the output record separator as follows:
  
       Leading character      Meaning                Output separating
                                                     character(s)
       ----------------------------------------------------------------------------
!      ''+''                  Overprinting           Carriage return only
!      ''-''                  New line               Line feed and carriage
                                                     return
!      ''0''                  Skip line              Two line feeds and carriage
                                                     return
!      ''1''                  New page               Form feed and carriage
                                                     return
!      ''$''                  Prompting              Line feed (no carriage
                                                     return)
!      'CHAR(0)'              Overprinting (no       None
                              advance)
  
! 'READONLY'
!      The 'READONLY' specifier may be given upon opening a unit, and is
!      equivalent to specifying 'ACTION='READ'', except that the file may
!      not be deleted on close (i.e.  'CLOSE' with 'STATUS="DELETE"').
       The syntax is:
  
            OPEN(..., READONLY)
  
! 'SHARE'
!      The 'SHARE' specifier allows system-level locking on a unit upon
       opening it for controlled access from multiple processes/threads.
!      The 'SHARE' specifier has several forms:
  
            OPEN(..., SHARE=sh)
            OPEN(..., SHARED)
--- 3891,3931 ----
       Where _cc_ is a character expression that evaluates to one of the
       following values:
  
!      ‘'LIST'’       One line feed between records (default)
!      ‘'FORTRAN'’    Legacy interpretation of the first character (see below)
!      ‘'NONE'’       No separator between records
  
!      With ‘CARRIAGECONTROL='FORTRAN'’, when a record is written, the
       first character of the input record is not written, and instead
       determines the output record separator as follows:
  
       Leading character      Meaning                Output separating
                                                     character(s)
       ----------------------------------------------------------------------------
!      ‘'+'’                  Overprinting           Carriage return only
!      ‘'-'’                  New line               Line feed and carriage
                                                     return
!      ‘'0'’                  Skip line              Two line feeds and carriage
                                                     return
!      ‘'1'’                  New page               Form feed and carriage
                                                     return
!      ‘'$'’                  Prompting              Line feed (no carriage
                                                     return)
!      ‘CHAR(0)’              Overprinting (no       None
                              advance)
  
! ‘READONLY’
!      The ‘READONLY’ specifier may be given upon opening a unit, and is
!      equivalent to specifying ‘ACTION='READ'’, except that the file may
!      not be deleted on close (i.e.  ‘CLOSE’ with ‘STATUS="DELETE"’).
       The syntax is:
  
            OPEN(..., READONLY)
  
! ‘SHARE’
!      The ‘SHARE’ specifier allows system-level locking on a unit upon
       opening it for controlled access from multiple processes/threads.
!      The ‘SHARE’ specifier has several forms:
  
            OPEN(..., SHARE=sh)
            OPEN(..., SHARED)
*************** GNU Fortran supports the additional lega
*** 3937,3953 ****
  
       Explicit form          Short form             Meaning
       ----------------------------------------------------------------------------
!      'SHARE='DENYRW''       'NOSHARED'             Exclusive (write) lock
!      'SHARE='DENYNONE''     'SHARED'               Shared (read) lock
  
       In general only one process may hold an exclusive (write) lock for
       a given file at a time, whereas many processes may hold shared
       (read) locks for the same file.
  
       The behavior of locking may vary with your operating system.  On
!      POSIX systems, locking is implemented with 'fcntl'.  Consult your
       corresponding operating system's manual pages for further details.
!      Locking via 'SHARE=' is not supported on other systems.
  
  
  File: gfortran.info,  Node: Legacy PARAMETER statements,  Next: Default exponents,  Prev: Extended I/O specifiers,  Up: Extensions implemented in GNU Fortran
--- 3937,3953 ----
  
       Explicit form          Short form             Meaning
       ----------------------------------------------------------------------------
!      ‘SHARE='DENYRW'’       ‘NOSHARED’             Exclusive (write) lock
!      ‘SHARE='DENYNONE'’     ‘SHARED’               Shared (read) lock
  
       In general only one process may hold an exclusive (write) lock for
       a given file at a time, whereas many processes may hold shared
       (read) locks for the same file.
  
       The behavior of locking may vary with your operating system.  On
!      POSIX systems, locking is implemented with ‘fcntl’.  Consult your
       corresponding operating system's manual pages for further details.
!      Locking via ‘SHARE=’ is not supported on other systems.
  
  
  File: gfortran.info,  Node: Legacy PARAMETER statements,  Next: Default exponents,  Prev: Extended I/O specifiers,  Up: Extensions implemented in GNU Fortran
*************** File: gfortran.info,  Node: Legacy PARAM
*** 3956,3964 ****
  ----------------------------------
  
  For compatibility, GNU Fortran supports legacy PARAMETER statements
! without parentheses with '-std=legacy'.  A warning is emitted if used
! with '-std=gnu', and an error is acknowledged with a real Fortran
! standard flag ('-std=f95', etc...).  These statements take the following
  form:
  
       implicit real (E)
--- 3956,3964 ----
  ----------------------------------
  
  For compatibility, GNU Fortran supports legacy PARAMETER statements
! without parentheses with ‘-std=legacy’.  A warning is emitted if used
! with ‘-std=gnu’, and an error is acknowledged with a real Fortran
! standard flag (‘-std=f95’, etc...).  These statements take the following
  form:
  
       implicit real (E)
*************** File: gfortran.info,  Node: Default expo
*** 3973,3980 ****
  ------------------------
  
  For compatibility, GNU Fortran supports a default exponent of zero in
! real constants with '-fdec'.  For example, '9e' would be interpreted as
! '9e0', rather than an error.
  
  
  File: gfortran.info,  Node: Extensions not implemented in GNU Fortran,  Prev: Extensions implemented in GNU Fortran,  Up: Extensions
--- 3973,3980 ----
  ------------------------
  
  For compatibility, GNU Fortran supports a default exponent of zero in
! real constants with ‘-fdec’.  For example, ‘9e’ would be interpreted as
! ‘9e0’, rather than an error.
  
  
  File: gfortran.info,  Node: Extensions not implemented in GNU Fortran,  Prev: Extensions implemented in GNU Fortran,  Up: Extensions
*************** make code that uses them running with th
*** 4003,4014 ****
  
  File: gfortran.info,  Node: ENCODE and DECODE statements,  Next: Variable FORMAT expressions,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.1 'ENCODE' and 'DECODE' statements
  --------------------------------------
  
! GNU Fortran does not support the 'ENCODE' and 'DECODE' statements.
! These statements are best replaced by 'READ' and 'WRITE' statements
! involving internal files ('CHARACTER' variables and arrays), which have
  been part of the Fortran standard since Fortran 77.  For example,
  replace a code fragment like
  
--- 4003,4014 ----
  
  File: gfortran.info,  Node: ENCODE and DECODE statements,  Next: Variable FORMAT expressions,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.1 ‘ENCODE’ and ‘DECODE’ statements
  --------------------------------------
  
! GNU Fortran does not support the ‘ENCODE’ and ‘DECODE’ statements.
! These statements are best replaced by ‘READ’ and ‘WRITE’ statements
! involving internal files (‘CHARACTER’ variables and arrays), which have
  been part of the Fortran standard since Fortran 77.  For example,
  replace a code fragment like
  
*************** with the following:
*** 4045,4055 ****
  
  File: gfortran.info,  Node: Variable FORMAT expressions,  Next: Alternate complex function syntax,  Prev: ENCODE and DECODE statements,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.2 Variable 'FORMAT' expressions
  -----------------------------------
  
! A variable 'FORMAT' expression is format statement which includes angle
! brackets enclosing a Fortran expression: 'FORMAT(I<N>)'.  GNU Fortran
  does not support this legacy extension.  The effect of variable format
  expressions can be reproduced by using the more powerful (and standard)
  combination of internal output and string formats.  For example, replace
--- 4045,4055 ----
  
  File: gfortran.info,  Node: Variable FORMAT expressions,  Next: Alternate complex function syntax,  Prev: ENCODE and DECODE statements,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.2 Variable ‘FORMAT’ expressions
  -----------------------------------
  
! A variable ‘FORMAT’ expression is format statement which includes angle
! brackets enclosing a Fortran expression: ‘FORMAT(I<N>)’.  GNU Fortran
  does not support this legacy extension.  The effect of variable format
  expressions can be reproduced by using the more powerful (and standard)
  combination of internal output and string formats.  For example, replace
*************** File: gfortran.info,  Node: Alternate co
*** 4084,4137 ****
  5.2.3 Alternate complex function syntax
  ---------------------------------------
  
! Some Fortran compilers, including 'g77', let the user declare complex
! functions with the syntax 'COMPLEX FUNCTION name*16()', as well as
! 'COMPLEX*16 FUNCTION name()'.  Both are non-standard, legacy extensions.
! 'gfortran' accepts the latter form, which is more common, but not the
  former.
  
  
  File: gfortran.info,  Node: Volatile COMMON blocks,  Next: OPEN( ... NAME=),  Prev: Alternate complex function syntax,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.4 Volatile 'COMMON' blocks
  ------------------------------
  
! Some Fortran compilers, including 'g77', let the user declare 'COMMON'
! with the 'VOLATILE' attribute.  This is invalid standard Fortran syntax
! and is not supported by 'gfortran'.  Note that 'gfortran' accepts
! 'VOLATILE' variables in 'COMMON' blocks since revision 4.3.
  
  
  File: gfortran.info,  Node: OPEN( ... NAME=),  Next: Q edit descriptor,  Prev: Volatile COMMON blocks,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.5 'OPEN( ... NAME=)'
  ------------------------
  
! Some Fortran compilers, including 'g77', let the user declare 'OPEN( ...
! NAME=)'.  This is invalid standard Fortran syntax and is not supported
! by 'gfortran'.  'OPEN( ... NAME=)' should be replaced with 'OPEN( ...
! FILE=)'.
  
  
  File: gfortran.info,  Node: Q edit descriptor,  Prev: OPEN( ... NAME=),  Up: Extensions not implemented in GNU Fortran
  
! 5.2.6 'Q' edit descriptor
  -------------------------
  
! Some Fortran compilers provide the 'Q' edit descriptor, which transfers
  the number of characters left within an input record into an integer
  variable.
  
!    A direct replacement of the 'Q' edit descriptor is not available in
! 'gfortran'.  How to replicate its functionality using
  standard-conforming code depends on what the intent of the original code
  is.
  
!    Options to replace 'Q' may be to read the whole line into a character
  variable and then counting the number of non-blank characters left using
! 'LEN_TRIM'.  Another method may be to use formatted stream, read the
! data up to the position where the 'Q' descriptor occurred, use 'INQUIRE'
! to get the file position, count the characters up to the next 'NEW_LINE'
  and then start reading from the position marked previously.
  
  
--- 4084,4137 ----
  5.2.3 Alternate complex function syntax
  ---------------------------------------
  
! Some Fortran compilers, including ‘g77’, let the user declare complex
! functions with the syntax ‘COMPLEX FUNCTION name*16()’, as well as
! ‘COMPLEX*16 FUNCTION name()’.  Both are non-standard, legacy extensions.
! ‘gfortran’ accepts the latter form, which is more common, but not the
  former.
  
  
  File: gfortran.info,  Node: Volatile COMMON blocks,  Next: OPEN( ... NAME=),  Prev: Alternate complex function syntax,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.4 Volatile ‘COMMON’ blocks
  ------------------------------
  
! Some Fortran compilers, including ‘g77’, let the user declare ‘COMMON’
! with the ‘VOLATILE’ attribute.  This is invalid standard Fortran syntax
! and is not supported by ‘gfortran’.  Note that ‘gfortran’ accepts
! ‘VOLATILE’ variables in ‘COMMON’ blocks since revision 4.3.
  
  
  File: gfortran.info,  Node: OPEN( ... NAME=),  Next: Q edit descriptor,  Prev: Volatile COMMON blocks,  Up: Extensions not implemented in GNU Fortran
  
! 5.2.5 ‘OPEN( ... NAME=)’
  ------------------------
  
! Some Fortran compilers, including ‘g77’, let the user declare ‘OPEN( ...
! NAME=)’.  This is invalid standard Fortran syntax and is not supported
! by ‘gfortran’.  ‘OPEN( ... NAME=)’ should be replaced with ‘OPEN( ...
! FILE=)’.
  
  
  File: gfortran.info,  Node: Q edit descriptor,  Prev: OPEN( ... NAME=),  Up: Extensions not implemented in GNU Fortran
  
! 5.2.6 ‘Q’ edit descriptor
  -------------------------
  
! Some Fortran compilers provide the ‘Q’ edit descriptor, which transfers
  the number of characters left within an input record into an integer
  variable.
  
!    A direct replacement of the ‘Q’ edit descriptor is not available in
! ‘gfortran’.  How to replicate its functionality using
  standard-conforming code depends on what the intent of the original code
  is.
  
!    Options to replace ‘Q’ may be to read the whole line into a character
  variable and then counting the number of non-blank characters left using
! ‘LEN_TRIM’.  Another method may be to use formatted stream, read the
! data up to the position where the ‘Q’ descriptor occurred, use ‘INQUIRE’
! to get the file position, count the characters up to the next ‘NEW_LINE’
  and then start reading from the position marked previously.
  
  
*************** cases, use of the C Binding features of
*** 4153,4166 ****
  standards is sufficient.
  
     For example, it is possible to mix Fortran code with C++ code as well
! as C, if you declare the interface functions as 'extern "C"' on the C++
! side and 'BIND(C)' on the Fortran side, and follow the rules for
  interoperability with C. Note that you cannot manipulate C++ class
  objects in Fortran or vice versa except as opaque pointers.
  
!    You can use the 'gfortran' command to link both Fortran and
! non-Fortran code into the same program, or you can use 'gcc' or 'g++' if
! you also add an explicit '-lgfortran' option to link with the Fortran
  library.  If your main program is written in C or some other language
  instead of Fortran, see *note Non-Fortran Main Program::, below.
  
--- 4153,4166 ----
  standards is sufficient.
  
     For example, it is possible to mix Fortran code with C++ code as well
! as C, if you declare the interface functions as ‘extern "C"’ on the C++
! side and ‘BIND(C)’ on the Fortran side, and follow the rules for
  interoperability with C. Note that you cannot manipulate C++ class
  objects in Fortran or vice versa except as opaque pointers.
  
!    You can use the ‘gfortran’ command to link both Fortran and
! non-Fortran code into the same program, or you can use ‘gcc’ or ‘g++’ if
! you also add an explicit ‘-lgfortran’ option to link with the Fortran
  library.  If your main program is written in C or some other language
  instead of Fortran, see *note Non-Fortran Main Program::, below.
  
*************** File: gfortran.info,  Node: Interoperabi
*** 4181,4187 ****
  
  Since Fortran 2003 (ISO/IEC 1539-1:2004(E)) there is a standardized way
  to generate procedure and derived-type declarations and global variables
! that are interoperable with C (ISO/IEC 9899:1999).  The 'BIND(C)'
  attribute has been added to inform the compiler that a symbol shall be
  interoperable with C; also, some constraints are added.  Note, however,
  that not all C features have a Fortran equivalent or vice versa.  For
--- 4181,4187 ----
  
  Since Fortran 2003 (ISO/IEC 1539-1:2004(E)) there is a standardized way
  to generate procedure and derived-type declarations and global variables
! that are interoperable with C (ISO/IEC 9899:1999).  The ‘BIND(C)’
  attribute has been added to inform the compiler that a symbol shall be
  interoperable with C; also, some constraints are added.  Note, however,
  that not all C features have a Fortran equivalent or vice versa.  For
*************** number of arguments have an equivalent i
*** 4190,4199 ****
  
     Note that array dimensions are reversely ordered in C and that arrays
  in C always start with index 0 while in Fortran they start by default
! with 1.  Thus, an array declaration 'A(n,m)' in Fortran matches
! 'A[m][n]' in C and accessing the element 'A(i,j)' matches 'A[j-1][i-1]'.
! The element following 'A(i,j)' (C: 'A[j-1][i-1]'; assuming i < n) in
! memory is 'A(i+1,j)' (C: 'A[j-1][i]').
  
  
  File: gfortran.info,  Node: Intrinsic Types,  Next: Derived Types and struct,  Up: Interoperability with C
--- 4190,4199 ----
  
     Note that array dimensions are reversely ordered in C and that arrays
  in C always start with index 0 while in Fortran they start by default
! with 1.  Thus, an array declaration ‘A(n,m)’ in Fortran matches
! ‘A[m][n]’ in C and accessing the element ‘A(i,j)’ matches ‘A[j-1][i-1]’.
! The element following ‘A(i,j)’ (C: ‘A[j-1][i-1]’; assuming i < n) in
! memory is ‘A(i+1,j)’ (C: ‘A[j-1][i]’).
  
  
  File: gfortran.info,  Node: Intrinsic Types,  Next: Derived Types and struct,  Up: Interoperability with C
*************** File: gfortran.info,  Node: Intrinsic Ty
*** 4203,4220 ****
  
  In order to ensure that exactly the same variable type and kind is used
  in C and Fortran, you should use the named constants for kind parameters
! that are defined in the 'ISO_C_BINDING' intrinsic module.  That module
  contains named constants of character type representing the escaped
  special characters in C, such as newline.  For a list of the constants,
  see *note ISO_C_BINDING::.
  
     For logical types, please note that the Fortran standard only
! guarantees interoperability between C99's '_Bool' and Fortran's
! 'C_Bool'-kind logicals and C99 defines that 'true' has the value 1 and
! 'false' the value 0.  Using any other integer value with GNU Fortran's
! 'LOGICAL' (with any kind parameter) gives an undefined result.  (Passing
! other integer values than 0 and 1 to GCC's '_Bool' is also undefined,
! unless the integer is explicitly or implicitly casted to '_Bool'.)
  
  
  File: gfortran.info,  Node: Derived Types and struct,  Next: Interoperable Global Variables,  Prev: Intrinsic Types,  Up: Interoperability with C
--- 4203,4220 ----
  
  In order to ensure that exactly the same variable type and kind is used
  in C and Fortran, you should use the named constants for kind parameters
! that are defined in the ‘ISO_C_BINDING’ intrinsic module.  That module
  contains named constants of character type representing the escaped
  special characters in C, such as newline.  For a list of the constants,
  see *note ISO_C_BINDING::.
  
     For logical types, please note that the Fortran standard only
! guarantees interoperability between C99's ‘_Bool’ and Fortran's
! ‘C_Bool’-kind logicals and C99 defines that ‘true’ has the value 1 and
! ‘false’ the value 0.  Using any other integer value with GNU Fortran's
! ‘LOGICAL’ (with any kind parameter) gives an undefined result.  (Passing
! other integer values than 0 and 1 to GCC's ‘_Bool’ is also undefined,
! unless the integer is explicitly or implicitly casted to ‘_Bool’.)
  
  
  File: gfortran.info,  Node: Derived Types and struct,  Next: Interoperable Global Variables,  Prev: Intrinsic Types,  Up: Interoperability with C
*************** File: gfortran.info,  Node: Derived Type
*** 4222,4228 ****
  6.1.2 Derived Types and struct
  ------------------------------
  
! For compatibility of derived types with 'struct', use the 'BIND(C)'
  attribute in the type declaration.  For instance, the following type
  declaration
  
--- 4222,4228 ----
  6.1.2 Derived Types and struct
  ------------------------------
  
! For compatibility of derived types with ‘struct’, use the ‘BIND(C)’
  attribute in the type declaration.  For instance, the following type
  declaration
  
*************** declaration
*** 4235,4241 ****
          CHARACTER(KIND=C_CHAR) :: str(5)
        END TYPE
  
! matches the following 'struct' declaration in C
  
        struct {
          int i1, i2;
--- 4235,4241 ----
          CHARACTER(KIND=C_CHAR) :: str(5)
        END TYPE
  
! matches the following ‘struct’ declaration in C
  
        struct {
          int i1, i2;
*************** matches the following 'struct' declarati
*** 4247,4255 ****
        } myType;
  
     Derived types with the C binding attribute shall not have the
! 'sequence' attribute, type parameters, the 'extends' attribute, nor
  type-bound procedures.  Every component must be of interoperable type
! and kind and may not have the 'pointer' or 'allocatable' attribute.  The
  names of the components are irrelevant for interoperability.
  
     As there exist no direct Fortran equivalents, neither unions nor
--- 4247,4255 ----
        } myType;
  
     Derived types with the C binding attribute shall not have the
! ‘sequence’ attribute, type parameters, the ‘extends’ attribute, nor
  type-bound procedures.  Every component must be of interoperable type
! and kind and may not have the ‘pointer’ or ‘allocatable’ attribute.  The
  names of the components are irrelevant for interoperability.
  
     As there exist no direct Fortran equivalents, neither unions nor
*************** File: gfortran.info,  Node: Interoperabl
*** 4264,4271 ****
  
  Variables can be made accessible from C using the C binding attribute,
  optionally together with specifying a binding name.  Those variables
! have to be declared in the declaration part of a 'MODULE', be of
! interoperable type, and have neither the 'pointer' nor the 'allocatable'
  attribute.
  
         MODULE m
--- 4264,4271 ----
  
  Variables can be made accessible from C using the C binding attribute,
  optionally together with specifying a binding name.  Those variables
! have to be declared in the declaration part of a ‘MODULE’, be of
! interoperable type, and have neither the ‘pointer’ nor the ‘allocatable’
  attribute.
  
         MODULE m
*************** attribute.
*** 4275,4287 ****
           type(myType), bind(C) :: tp
         END MODULE
  
!    Here, '_MyProject_flags' is the case-sensitive name of the variable
! as seen from C programs while 'global_flag' is the case-insensitive name
  as seen from Fortran.  If no binding name is specified, as for TP, the C
  binding name is the (lowercase) Fortran binding name.  If a binding name
  is specified, only a single variable may be after the double colon.
  Note of warning: You cannot use a global variable to access ERRNO of the
! C library as the C standard allows it to be a macro.  Use the 'IERRNO'
  intrinsic (GNU extension) instead.
  
  
--- 4275,4287 ----
           type(myType), bind(C) :: tp
         END MODULE
  
!    Here, ‘_MyProject_flags’ is the case-sensitive name of the variable
! as seen from C programs while ‘global_flag’ is the case-insensitive name
  as seen from Fortran.  If no binding name is specified, as for TP, the C
  binding name is the (lowercase) Fortran binding name.  If a binding name
  is specified, only a single variable may be after the double colon.
  Note of warning: You cannot use a global variable to access ERRNO of the
! C library as the C standard allows it to be a macro.  Use the ‘IERRNO’
  intrinsic (GNU extension) instead.
  
  
*************** File: gfortran.info,  Node: Interoperabl
*** 4290,4303 ****
  6.1.4 Interoperable Subroutines and Functions
  ---------------------------------------------
  
! Subroutines and functions have to have the 'BIND(C)' attribute to be
  compatible with C. The dummy argument declaration is relatively
  straightforward.  However, one needs to be careful because C uses
  call-by-value by default while Fortran behaves usually similar to
  call-by-reference.  Furthermore, strings and pointers are handled
  differently.
  
!    To pass a variable by value, use the 'VALUE' attribute.  Thus, the
  following C prototype
  
       int func(int i, int *j)
--- 4290,4303 ----
  6.1.4 Interoperable Subroutines and Functions
  ---------------------------------------------
  
! Subroutines and functions have to have the ‘BIND(C)’ attribute to be
  compatible with C. The dummy argument declaration is relatively
  straightforward.  However, one needs to be careful because C uses
  call-by-value by default while Fortran behaves usually similar to
  call-by-reference.  Furthermore, strings and pointers are handled
  differently.
  
!    To pass a variable by value, use the ‘VALUE’ attribute.  Thus, the
  following C prototype
  
       int func(int i, int *j)
*************** matches the Fortran declaration
*** 4309,4321 ****
           integer(c_int), VALUE :: i
           integer(c_int) :: j
  
!    Note that pointer arguments also frequently need the 'VALUE'
  attribute, see *note Working with C Pointers::.
  
     Strings are handled quite differently in C and Fortran.  In C a
! string is a 'NUL'-terminated array of characters while in Fortran each
  string has a length associated with it and is thus not terminated (by
! e.g.  'NUL').  For example, if you want to use the following C function,
  
         #include <stdio.h>
         void print_C(char *string) /* equivalent: char string[]  */
--- 4309,4321 ----
           integer(c_int), VALUE :: i
           integer(c_int) :: j
  
!    Note that pointer arguments also frequently need the ‘VALUE’
  attribute, see *note Working with C Pointers::.
  
     Strings are handled quite differently in C and Fortran.  In C a
! string is a ‘NUL’-terminated array of characters while in Fortran each
  string has a length associated with it and is thus not terminated (by
! e.g.  ‘NUL’).  For example, if you want to use the following C function,
  
         #include <stdio.h>
         void print_C(char *string) /* equivalent: char string[]  */
*************** to print "Hello World" from Fortran, you
*** 4334,4353 ****
         end interface
         call print_c(C_CHAR_"Hello World"//C_NULL_CHAR)
  
!    As the example shows, you need to ensure that the string is 'NUL'
! terminated.  Additionally, the dummy argument STRING of 'print_C' is a
! length-one assumed-size array; using 'character(len=*)' is not allowed.
! The example above uses 'c_char_"Hello World"' to ensure the string
  literal has the right type; typically the default character kind and
! 'c_char' are the same and thus '"Hello World"' is equivalent.  However,
  the standard does not guarantee this.
  
     The use of strings is now further illustrated using the C library
! function 'strncpy', whose prototype is
  
         char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
  
! The function 'strncpy' copies at most N characters from string S2 to S1
  and returns S1.  In the following example, we ignore the return value:
  
         use iso_c_binding
--- 4334,4353 ----
         end interface
         call print_c(C_CHAR_"Hello World"//C_NULL_CHAR)
  
!    As the example shows, you need to ensure that the string is ‘NUL’
! terminated.  Additionally, the dummy argument STRING of ‘print_C’ is a
! length-one assumed-size array; using ‘character(len=*)’ is not allowed.
! The example above uses ‘c_char_"Hello World"’ to ensure the string
  literal has the right type; typically the default character kind and
! ‘c_char’ are the same and thus ‘"Hello World"’ is equivalent.  However,
  the standard does not guarantee this.
  
     The use of strings is now further illustrated using the C library
! function ‘strncpy’, whose prototype is
  
         char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
  
! The function ‘strncpy’ copies at most N characters from string S2 to S1
  and returns S1.  In the following example, we ignore the return value:
  
         use iso_c_binding
*************** File: gfortran.info,  Node: Working with
*** 4379,4388 ****
  -----------------------------
  
  C pointers are represented in Fortran via the special opaque derived
! type 'type(c_ptr)' (with private components).  C pointers are distinct
! from Fortran objects with the 'POINTER' attribute.  Thus one needs to
  use intrinsic conversion procedures to convert from or to C pointers.
! For some applications, using an assumed type ('TYPE(*)') can be an
  alternative to a C pointer, and you can also use library routines to
  access Fortran pointers from C. See *note Further Interoperability of
  Fortran with C::.
--- 4379,4388 ----
  -----------------------------
  
  C pointers are represented in Fortran via the special opaque derived
! type ‘type(c_ptr)’ (with private components).  C pointers are distinct
! from Fortran objects with the ‘POINTER’ attribute.  Thus one needs to
  use intrinsic conversion procedures to convert from or to C pointers.
! For some applications, using an assumed type (‘TYPE(*)’) can be an
  alternative to a C pointer, and you can also use library routines to
  access Fortran pointers from C. See *note Further Interoperability of
  Fortran with C::.
*************** Fortran with C::.
*** 4400,4415 ****
         call c_f_pointer(cptr2, ps)
         call c_f_pointer(cptr2, pa, shape=[7])
  
!    When converting C to Fortran arrays, the one-dimensional 'SHAPE'
  argument has to be passed.
  
     If a pointer is a dummy argument of an interoperable procedure, it
! usually has to be declared using the 'VALUE' attribute.  'void*' matches
! 'TYPE(C_PTR), VALUE', while 'TYPE(C_PTR)' alone matches 'void**'.
  
     Procedure pointers are handled analogously to pointers; the C type is
! 'TYPE(C_FUNPTR)' and the intrinsic conversion procedures are
! 'C_F_PROCPOINTER' and 'C_FUNLOC'.
  
     Let us consider two examples of actually passing a procedure pointer
  from C to Fortran and vice versa.  Note that these examples are also
--- 4400,4415 ----
         call c_f_pointer(cptr2, ps)
         call c_f_pointer(cptr2, pa, shape=[7])
  
!    When converting C to Fortran arrays, the one-dimensional ‘SHAPE’
  argument has to be passed.
  
     If a pointer is a dummy argument of an interoperable procedure, it
! usually has to be declared using the ‘VALUE’ attribute.  ‘void*’ matches
! ‘TYPE(C_PTR), VALUE’, while ‘TYPE(C_PTR)’ alone matches ‘void**’.
  
     Procedure pointers are handled analogously to pointers; the C type is
! ‘TYPE(C_FUNPTR)’ and the intrinsic conversion procedures are
! ‘C_F_PROCPOINTER’ and ‘C_FUNLOC’.
  
     Let us consider two examples of actually passing a procedure pointer
  from C to Fortran and vice versa.  Note that these examples are also
*************** First, consider this code in C:
*** 4433,4441 ****
         get_values (&print_it);
       }
  
!    A matching implementation for 'get_values' in Fortran, that correctly
  receives the procedure pointer from C and is able to call it, is given
! in the following 'MODULE':
  
       MODULE m
         IMPLICIT NONE
--- 4433,4441 ----
         get_values (&print_it);
       }
  
!    A matching implementation for ‘get_values’ in Fortran, that correctly
  receives the procedure pointer from C and is able to call it, is given
! in the following ‘MODULE’:
  
       MODULE m
         IMPLICIT NONE
*************** GNU Fortran implements the Technical Spe
*** 4528,4544 ****
  29113:2012, which extends the interoperability support of Fortran 2003
  and Fortran 2008 and is now part of the 2018 Fortran standard.  Besides
  removing some restrictions and constraints, the Technical Specification
! adds assumed-type ('TYPE(*)') and assumed-rank ('DIMENSION(..)')
  variables and allows for interoperability of assumed-shape,
  assumed-rank, and deferred-shape arrays, as well as allocatables and
! pointers.  Objects of these types are passed to 'BIND(C)' functions as
  descriptors with a standard interface, declared in the header file
! '<ISO_Fortran_binding.h>'.
  
     Note: Currently, GNU Fortran does not use internally the array
  descriptor (dope vector) as specified in the Technical Specification,
  but uses an array descriptor with different fields in functions without
! the 'BIND(C)' attribute.  Arguments to functions marked 'BIND(C)' are
  converted to the specified form.  If you need to access GNU Fortran's
  internal array descriptor, you can use the Chasm Language
  Interoperability Tools, <http://chasm-interop.sourceforge.net/>.
--- 4528,4544 ----
  29113:2012, which extends the interoperability support of Fortran 2003
  and Fortran 2008 and is now part of the 2018 Fortran standard.  Besides
  removing some restrictions and constraints, the Technical Specification
! adds assumed-type (‘TYPE(*)’) and assumed-rank (‘DIMENSION(..)’)
  variables and allows for interoperability of assumed-shape,
  assumed-rank, and deferred-shape arrays, as well as allocatables and
! pointers.  Objects of these types are passed to ‘BIND(C)’ functions as
  descriptors with a standard interface, declared in the header file
! ‘<ISO_Fortran_binding.h>’.
  
     Note: Currently, GNU Fortran does not use internally the array
  descriptor (dope vector) as specified in the Technical Specification,
  but uses an array descriptor with different fields in functions without
! the ‘BIND(C)’ attribute.  Arguments to functions marked ‘BIND(C)’ are
  converted to the specified form.  If you need to access GNU Fortran's
  internal array descriptor, you can use the Chasm Language
  Interoperability Tools, <http://chasm-interop.sourceforge.net/>.
*************** on the processor; see *note C Extensions
*** 4575,4583 ****
     For procedures and procedure pointers, the following attributes can
  be used to change the calling convention:
  
!    * 'CDECL' - standard C calling convention
!    * 'STDCALL' - convention where the called procedure pops the stack
!    * 'FASTCALL' - part of the arguments are passed via registers instead
       using the stack
  
     Besides changing the calling convention, the attributes also
--- 4575,4583 ----
     For procedures and procedure pointers, the following attributes can
  be used to change the calling convention:
  
!    • ‘CDECL’ - standard C calling convention
!    • ‘STDCALL’ - convention where the called procedure pops the stack
!    • ‘FASTCALL’ - part of the arguments are passed via registers instead
       using the stack
  
     Besides changing the calling convention, the attributes also
*************** the stack.  When assigning a procedure t
*** 4587,4623 ****
  should use the same calling convention.
  
     On some systems, procedures and global variables (module variables
! and 'COMMON' blocks) need special handling to be accessible when they
  are in a shared library.  The following attributes are available:
  
!    * 'DLLEXPORT' - provide a global pointer to a pointer in the DLL
!    * 'DLLIMPORT' - reference the function or variable using a global
       pointer
  
!    For dummy arguments, the 'NO_ARG_CHECK' attribute can be used; in
! other compilers, it is also known as 'IGNORE_TKR'.  For dummy arguments
  with this attribute actual arguments of any type and kind (similar to
! 'TYPE(*)'), scalars and arrays of any rank (no equivalent in Fortran
! standard) are accepted.  As with 'TYPE(*)', the argument is unlimited
  polymorphic and no type information is available.  Additionally, the
! argument may only be passed to dummy arguments with the 'NO_ARG_CHECK'
! attribute and as argument to the 'PRESENT' intrinsic function and to
! 'C_LOC' of the 'ISO_C_BINDING' module.
  
!    Variables with 'NO_ARG_CHECK' attribute shall be of assumed-type
! ('TYPE(*)'; recommended) or of type 'INTEGER', 'LOGICAL', 'REAL' or
! 'COMPLEX'.  They shall not have the 'ALLOCATE', 'CODIMENSION',
! 'INTENT(OUT)', 'POINTER' or 'VALUE' attribute; furthermore, they shall
! be either scalar or of assumed-size ('dimension(*)').  As 'TYPE(*)', the
! 'NO_ARG_CHECK' attribute requires an explicit interface.
  
!    * 'NO_ARG_CHECK' - disable the type, kind and rank checking
!    * 'DEPRECATED' - print a warning when using a such-tagged deprecated
       procedure, variable or parameter; the warning can be suppressed
!      with '-Wno-deprecated-declarations'.
!    * 'NOINLINE' - prevent inlining given function.
!    * 'NORETURN' - add a hint that a given function cannot return.
!    * 'WEAK' - emit the declaration of an external symbol as a weak
       symbol rather than a global.  This is primarily useful in defining
       library functions that can be overridden in user code, though it
       can also be used with non-function declarations.  The overriding
--- 4587,4623 ----
  should use the same calling convention.
  
     On some systems, procedures and global variables (module variables
! and ‘COMMON’ blocks) need special handling to be accessible when they
  are in a shared library.  The following attributes are available:
  
!    • ‘DLLEXPORT’ - provide a global pointer to a pointer in the DLL
!    • ‘DLLIMPORT’ - reference the function or variable using a global
       pointer
  
!    For dummy arguments, the ‘NO_ARG_CHECK’ attribute can be used; in
! other compilers, it is also known as ‘IGNORE_TKR’.  For dummy arguments
  with this attribute actual arguments of any type and kind (similar to
! ‘TYPE(*)’), scalars and arrays of any rank (no equivalent in Fortran
! standard) are accepted.  As with ‘TYPE(*)’, the argument is unlimited
  polymorphic and no type information is available.  Additionally, the
! argument may only be passed to dummy arguments with the ‘NO_ARG_CHECK’
! attribute and as argument to the ‘PRESENT’ intrinsic function and to
! ‘C_LOC’ of the ‘ISO_C_BINDING’ module.
  
!    Variables with ‘NO_ARG_CHECK’ attribute shall be of assumed-type
! (‘TYPE(*)’; recommended) or of type ‘INTEGER’, ‘LOGICAL’, ‘REAL’ or
! ‘COMPLEX’.  They shall not have the ‘ALLOCATE’, ‘CODIMENSION’,
! ‘INTENT(OUT)’, ‘POINTER’ or ‘VALUE’ attribute; furthermore, they shall
! be either scalar or of assumed-size (‘dimension(*)’).  As ‘TYPE(*)’, the
! ‘NO_ARG_CHECK’ attribute requires an explicit interface.
  
!    • ‘NO_ARG_CHECK’ - disable the type, kind and rank checking
!    • ‘DEPRECATED’ - print a warning when using a such-tagged deprecated
       procedure, variable or parameter; the warning can be suppressed
!      with ‘-Wno-deprecated-declarations’.
!    • ‘NOINLINE’ - prevent inlining given function.
!    • ‘NORETURN’ - add a hint that a given function cannot return.
!    • ‘WEAK’ - emit the declaration of an external symbol as a weak
       symbol rather than a global.  This is primarily useful in defining
       library functions that can be overridden in user code, though it
       can also be used with non-function declarations.  The overriding
*************** be either scalar or of assumed-size ('di
*** 4625,4634 ****
  
     The attributes are specified using the syntax
  
!    '!GCC$ ATTRIBUTES' ATTRIBUTE-LIST '::' VARIABLE-LIST
  
     where in free-form source code only whitespace is allowed before
! '!GCC$' and in fixed-form source code '!GCC$', 'cGCC$' or '*GCC$' shall
  start in the first column.
  
     For procedures, the compiler directives shall be placed into the body
--- 4625,4634 ----
  
     The attributes are specified using the syntax
  
!    ‘!GCC$ ATTRIBUTES’ ATTRIBUTE-LIST ‘::’ VARIABLE-LIST
  
     where in free-form source code only whitespace is allowed before
! ‘!GCC$’ and in fixed-form source code ‘!GCC$’, ‘cGCC$’ or ‘*GCC$’ shall
  start in the first column.
  
     For procedures, the compiler directives shall be placed into the body
*************** File: gfortran.info,  Node: UNROLL direc
*** 4643,4657 ****
  
  The syntax of the directive is
  
!    '!GCC$ unroll N'
  
     You can use this directive to control how many times a loop should be
! unrolled.  It must be placed immediately before a 'DO' loop and applies
  only to the loop that follows.  N is an integer constant specifying the
  unrolling factor.  The values of 0 and 1 block any unrolling of the
  loop.
  
!    For 'DO CONCURRENT' constructs the unrolling specification applies
  only to the first loop control variable.
  
  
--- 4643,4657 ----
  
  The syntax of the directive is
  
!    ‘!GCC$ unroll N’
  
     You can use this directive to control how many times a loop should be
! unrolled.  It must be placed immediately before a ‘DO’ loop and applies
  only to the loop that follows.  N is an integer constant specifying the
  unrolling factor.  The values of 0 and 1 block any unrolling of the
  loop.
  
!    For ‘DO CONCURRENT’ constructs the unrolling specification applies
  only to the first loop control variable.
  
  
*************** File: gfortran.info,  Node: BUILTIN dire
*** 4662,4673 ****
  
  The syntax of the directive is
  
!    '!GCC$ BUILTIN (B) attributes simd FLAGS IF('target')'
  
     You can use this directive to define which middle-end built-ins
! provide vector implementations.  'B' is name of the middle-end built-in.
! 'FLAGS' are optional and must be either "(inbranch)" or "(notinbranch)".
! 'IF' statement is optional and is used to filter multilib ABIs for the
  built-in that should be vectorized.  Example usage:
  
       !GCC$ builtin (sinf) attributes simd (notinbranch) if('x86_64')
--- 4662,4673 ----
  
  The syntax of the directive is
  
!    ‘!GCC$ BUILTIN (B) attributes simd FLAGS IF('target')’
  
     You can use this directive to define which middle-end built-ins
! provide vector implementations.  ‘B’ is name of the middle-end built-in.
! ‘FLAGS’ are optional and must be either "(inbranch)" or "(notinbranch)".
! ‘IF’ statement is optional and is used to filter multilib ABIs for the
  built-in that should be vectorized.  Example usage:
  
       !GCC$ builtin (sinf) attributes simd (notinbranch) if('x86_64')
*************** File: gfortran.info,  Node: IVDEP direct
*** 4684,4693 ****
  
  The syntax of the directive is
  
!    '!GCC$ ivdep'
  
     This directive tells the compiler to ignore vector dependencies in
! the following loop.  It must be placed immediately before a 'DO' loop
  and applies only to the loop that follows.
  
     Sometimes the compiler may not have sufficient information to decide
--- 4684,4693 ----
  
  The syntax of the directive is
  
!    ‘!GCC$ ivdep’
  
     This directive tells the compiler to ignore vector dependencies in
! the following loop.  It must be placed immediately before a ‘DO’ loop
  and applies only to the loop that follows.
  
     Sometimes the compiler may not have sufficient information to decide
*************** whether a particular loop is vectorizabl
*** 4695,4701 ****
  between iterations.  The purpose of the directive is to tell the
  compiler that vectorization is safe.
  
!    For 'DO CONCURRENT' constructs this annotation is implicit to all
  loop control variables.
  
     This directive is intended for annotation of existing code.  For new
--- 4695,4701 ----
  between iterations.  The purpose of the directive is to tell the
  compiler that vectorization is safe.
  
!    For ‘DO CONCURRENT’ constructs this annotation is implicit to all
  loop control variables.
  
     This directive is intended for annotation of existing code.  For new
*************** File: gfortran.info,  Node: VECTOR direc
*** 4710,4722 ****
  
  The syntax of the directive is
  
!    '!GCC$ vector'
  
     This directive tells the compiler to vectorize the following loop.
! It must be placed immediately before a 'DO' loop and applies only to the
  loop that follows.
  
!    For 'DO CONCURRENT' constructs this annotation applies to all loops
  specified in the concurrent header.
  
  
--- 4710,4722 ----
  
  The syntax of the directive is
  
!    ‘!GCC$ vector’
  
     This directive tells the compiler to vectorize the following loop.
! It must be placed immediately before a ‘DO’ loop and applies only to the
  loop that follows.
  
!    For ‘DO CONCURRENT’ constructs this annotation applies to all loops
  specified in the concurrent header.
  
  
*************** File: gfortran.info,  Node: NOVECTOR dir
*** 4727,4739 ****
  
  The syntax of the directive is
  
!    '!GCC$ novector'
  
     This directive tells the compiler to not vectorize the following
! loop.  It must be placed immediately before a 'DO' loop and applies only
  to the loop that follows.
  
!    For 'DO CONCURRENT' constructs this annotation applies to all loops
  specified in the concurrent header.
  
  
--- 4727,4739 ----
  
  The syntax of the directive is
  
!    ‘!GCC$ novector’
  
     This directive tells the compiler to not vectorize the following
! loop.  It must be placed immediately before a ‘DO’ loop and applies only
  to the loop that follows.
  
!    For ‘DO CONCURRENT’ constructs this annotation applies to all loops
  specified in the concurrent header.
  
  
*************** you do not need to know or use the infor
*** 4756,4781 ****
  it is about the internal structure of GNU Fortran, it may also change in
  GCC minor releases.
  
!    When you compile a 'PROGRAM' with GNU Fortran, a function with the
! name 'main' (in the symbol table of the object file) is generated, which
  initializes the libgfortran library and then calls the actual program
! which uses the name 'MAIN__', for historic reasons.  If you link GNU
  Fortran compiled procedures to, e.g., a C or C++ program or to a Fortran
  program compiled by a different compiler, the libgfortran library is not
  initialized and thus a few intrinsic procedures do not work properly,
  e.g.  those for obtaining the command-line arguments.
  
!    Therefore, if your 'PROGRAM' is not compiled with GNU Fortran and the
  GNU Fortran compiled procedures require intrinsics relying on the
  library initialization, you need to initialize the library yourself.
! Using the default options, gfortran calls '_gfortran_set_args' and
! '_gfortran_set_options'.  The initialization of the former is needed if
  the called procedures access the command line (and for backtracing); the
  latter sets some flags based on the standard chosen or to enable
  backtracing.  In typical programs, it is not necessary to call any
  initialization function.
  
!    If your 'PROGRAM' is compiled with GNU Fortran, you shall not call
  any of the following functions.  The libgfortran initialization
  functions are shown in C syntax but using C bindings they are also
  accessible from Fortran.
--- 4756,4781 ----
  it is about the internal structure of GNU Fortran, it may also change in
  GCC minor releases.
  
!    When you compile a ‘PROGRAM’ with GNU Fortran, a function with the
! name ‘main’ (in the symbol table of the object file) is generated, which
  initializes the libgfortran library and then calls the actual program
! which uses the name ‘MAIN__’, for historic reasons.  If you link GNU
  Fortran compiled procedures to, e.g., a C or C++ program or to a Fortran
  program compiled by a different compiler, the libgfortran library is not
  initialized and thus a few intrinsic procedures do not work properly,
  e.g.  those for obtaining the command-line arguments.
  
!    Therefore, if your ‘PROGRAM’ is not compiled with GNU Fortran and the
  GNU Fortran compiled procedures require intrinsics relying on the
  library initialization, you need to initialize the library yourself.
! Using the default options, gfortran calls ‘_gfortran_set_args’ and
! ‘_gfortran_set_options’.  The initialization of the former is needed if
  the called procedures access the command line (and for backtracing); the
  latter sets some flags based on the standard chosen or to enable
  backtracing.  In typical programs, it is not necessary to call any
  initialization function.
  
!    If your ‘PROGRAM’ is compiled with GNU Fortran, you shall not call
  any of the following functions.  The libgfortran initialization
  functions are shown in C syntax but using C bindings they are also
  accessible from Fortran.
*************** accessible from Fortran.
*** 4783,4799 ****
  
  File: gfortran.info,  Node: _gfortran_set_args,  Next: _gfortran_set_options,  Up: Non-Fortran Main Program
  
! 6.3.1 '_gfortran_set_args' -- Save command-line arguments
  ---------------------------------------------------------
  
  _Description_:
!      '_gfortran_set_args' saves the command-line arguments; this
       initialization is required if any of the command-line intrinsics is
       called.  Additionally, it shall be called if backtracing is enabled
!      (see '_gfortran_set_options').
  
  _Syntax_:
!      'void _gfortran_set_args (int argc, char *argv[])'
  
  _Arguments_:
       ARGC        number of command line argument strings
--- 4783,4799 ----
  
  File: gfortran.info,  Node: _gfortran_set_args,  Next: _gfortran_set_options,  Up: Non-Fortran Main Program
  
! 6.3.1 ‘_gfortran_set_args’ -- Save command-line arguments
  ---------------------------------------------------------
  
  _Description_:
!      ‘_gfortran_set_args’ saves the command-line arguments; this
       initialization is required if any of the command-line intrinsics is
       called.  Additionally, it shall be called if backtracing is enabled
!      (see ‘_gfortran_set_options’).
  
  _Syntax_:
!      ‘void _gfortran_set_args (int argc, char *argv[])’
  
  _Arguments_:
       ARGC        number of command line argument strings
*************** _Example_:
*** 4811,4821 ****
  
  File: gfortran.info,  Node: _gfortran_set_options,  Next: _gfortran_set_convert,  Prev: _gfortran_set_args,  Up: Non-Fortran Main Program
  
! 6.3.2 '_gfortran_set_options' -- Set library option flags
  ---------------------------------------------------------
  
  _Description_:
!      '_gfortran_set_options' sets several flags related to the Fortran
       standard to be used, whether backtracing should be enabled and
       whether range checks should be performed.  The syntax allows for
       upward compatibility since the number of passed flags is specified;
--- 4811,4821 ----
  
  File: gfortran.info,  Node: _gfortran_set_options,  Next: _gfortran_set_convert,  Prev: _gfortran_set_args,  Up: Non-Fortran Main Program
  
! 6.3.2 ‘_gfortran_set_options’ -- Set library option flags
  ---------------------------------------------------------
  
  _Description_:
!      ‘_gfortran_set_options’ sets several flags related to the Fortran
       standard to be used, whether backtracing should be enabled and
       whether range checks should be performed.  The syntax allows for
       upward compatibility since the number of passed flags is specified;
*************** _Description_:
*** 4824,4830 ****
       used.
  
  _Syntax_:
!      'void _gfortran_set_options (int num, int options[])'
  
  _Arguments_:
       NUM         number of options passed
--- 4824,4830 ----
       used.
  
  _Syntax_:
!      ‘void _gfortran_set_options (int num, int options[])’
  
  _Arguments_:
       NUM         number of options passed
*************** _option flag list_:
*** 4834,4857 ****
       OPTION[0]   Allowed standard; can give run-time errors if
                   e.g.  an input-output edit descriptor is invalid
                   in a given standard.  Possible values are
!                  (bitwise or-ed) 'GFC_STD_F77' (1),
!                  'GFC_STD_F95_OBS' (2), 'GFC_STD_F95_DEL' (4),
!                  'GFC_STD_F95' (8), 'GFC_STD_F2003' (16),
!                  'GFC_STD_GNU' (32), 'GFC_STD_LEGACY' (64),
!                  'GFC_STD_F2008' (128), 'GFC_STD_F2008_OBS'
!                  (256), 'GFC_STD_F2018' (512),
!                  'GFC_STD_F2018_OBS' (1024), 'GFC_STD_F2018_DEL'
!                  (2048), 'GFC_STD_F2023' (4096), and
!                  'GFC_STD_F2023_DEL' (8192).  Default:
!                  'GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_F95
                   | GFC_STD_F2003 | GFC_STD_F2008 |
                   GFC_STD_F2008_OBS | GFC_STD_F77 | GFC_STD_F2018
                   | GFC_STD_F2018_OBS | GFC_STD_F2018_DEL |
                   GFC_STD_F2023 | GFC_STD_F2023_DEL | GFC_STD_GNU
!                  | GFC_STD_LEGACY'.
       OPTION[1]   Standard-warning flag; prints a warning to
!                  standard error.  Default: 'GFC_STD_F95_DEL |
!                  GFC_STD_LEGACY'.
       OPTION[2]   If non zero, enable pedantic checking.  Default:
                   off.
       OPTION[3]   Unused.
--- 4834,4857 ----
       OPTION[0]   Allowed standard; can give run-time errors if
                   e.g.  an input-output edit descriptor is invalid
                   in a given standard.  Possible values are
!                  (bitwise or-ed) ‘GFC_STD_F77’ (1),
!                  ‘GFC_STD_F95_OBS’ (2), ‘GFC_STD_F95_DEL’ (4),
!                  ‘GFC_STD_F95’ (8), ‘GFC_STD_F2003’ (16),
!                  ‘GFC_STD_GNU’ (32), ‘GFC_STD_LEGACY’ (64),
!                  ‘GFC_STD_F2008’ (128), ‘GFC_STD_F2008_OBS’
!                  (256), ‘GFC_STD_F2018’ (512),
!                  ‘GFC_STD_F2018_OBS’ (1024), ‘GFC_STD_F2018_DEL’
!                  (2048), ‘GFC_STD_F2023’ (4096), and
!                  ‘GFC_STD_F2023_DEL’ (8192).  Default:
!                  ‘GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_F95
                   | GFC_STD_F2003 | GFC_STD_F2008 |
                   GFC_STD_F2008_OBS | GFC_STD_F77 | GFC_STD_F2018
                   | GFC_STD_F2018_OBS | GFC_STD_F2018_DEL |
                   GFC_STD_F2023 | GFC_STD_F2023_DEL | GFC_STD_GNU
!                  | GFC_STD_LEGACY’.
       OPTION[1]   Standard-warning flag; prints a warning to
!                  standard error.  Default: ‘GFC_STD_F95_DEL |
!                  GFC_STD_LEGACY’.
       OPTION[2]   If non zero, enable pedantic checking.  Default:
                   off.
       OPTION[3]   Unused.
*************** _option flag list_:
*** 4859,4865 ****
                   errors.  Default: off.  (Default in the
                   compiler: on.)  Note: Installs a signal handler
                   and requires command-line initialization using
!                  '_gfortran_set_args'.
       OPTION[5]   If non zero, supports signed zeros.  Default:
                   enabled.
       OPTION[6]   Enables run-time checking.  Possible values are
--- 4859,4865 ----
                   errors.  Default: off.  (Default in the
                   compiler: on.)  Note: Installs a signal handler
                   and requires command-line initialization using
!                  ‘_gfortran_set_args’.
       OPTION[5]   If non zero, supports signed zeros.  Default:
                   enabled.
       OPTION[6]   Enables run-time checking.  Possible values are
*************** _option flag list_:
*** 4869,4884 ****
                   GFC_RTCHECK_POINTER (16), GFC_RTCHECK_MEM (32),
                   GFC_RTCHECK_BITS (64).  Default: disabled.
       OPTION[7]   Unused.
!      OPTION[8]   Show a warning when invoking 'STOP' and 'ERROR
!                  STOP' if a floating-point exception occurred.
                   Possible values are (bitwise or-ed)
!                  'GFC_FPE_INVALID' (1), 'GFC_FPE_DENORMAL' (2),
!                  'GFC_FPE_ZERO' (4), 'GFC_FPE_OVERFLOW' (8),
!                  'GFC_FPE_UNDERFLOW' (16), 'GFC_FPE_INEXACT'
                   (32).  Default: None (0).  (Default in the
!                  compiler: 'GFC_FPE_INVALID | GFC_FPE_DENORMAL |
                   GFC_FPE_ZERO | GFC_FPE_OVERFLOW |
!                  GFC_FPE_UNDERFLOW'.)
  
  _Example_:
              /* Use gfortran 4.9 default options.  */
--- 4869,4884 ----
                   GFC_RTCHECK_POINTER (16), GFC_RTCHECK_MEM (32),
                   GFC_RTCHECK_BITS (64).  Default: disabled.
       OPTION[7]   Unused.
!      OPTION[8]   Show a warning when invoking ‘STOP’ and ‘ERROR
!                  STOP’ if a floating-point exception occurred.
                   Possible values are (bitwise or-ed)
!                  ‘GFC_FPE_INVALID’ (1), ‘GFC_FPE_DENORMAL’ (2),
!                  ‘GFC_FPE_ZERO’ (4), ‘GFC_FPE_OVERFLOW’ (8),
!                  ‘GFC_FPE_UNDERFLOW’ (16), ‘GFC_FPE_INEXACT’
                   (32).  Default: None (0).  (Default in the
!                  compiler: ‘GFC_FPE_INVALID | GFC_FPE_DENORMAL |
                   GFC_FPE_ZERO | GFC_FPE_OVERFLOW |
!                  GFC_FPE_UNDERFLOW’.)
  
  _Example_:
              /* Use gfortran 4.9 default options.  */
*************** _Example_:
*** 4888,4902 ****
  
  File: gfortran.info,  Node: _gfortran_set_convert,  Next: _gfortran_set_record_marker,  Prev: _gfortran_set_options,  Up: Non-Fortran Main Program
  
! 6.3.3 '_gfortran_set_convert' -- Set endian conversion
  ------------------------------------------------------
  
  _Description_:
!      '_gfortran_set_convert' set the representation of data for
       unformatted files.
  
  _Syntax_:
!      'void _gfortran_set_convert (int conv)'
  
  _Arguments_:
       CONV        Endian conversion, possible values:
--- 4888,4902 ----
  
  File: gfortran.info,  Node: _gfortran_set_convert,  Next: _gfortran_set_record_marker,  Prev: _gfortran_set_options,  Up: Non-Fortran Main Program
  
! 6.3.3 ‘_gfortran_set_convert’ -- Set endian conversion
  ------------------------------------------------------
  
  _Description_:
!      ‘_gfortran_set_convert’ set the representation of data for
       unformatted files.
  
  _Syntax_:
!      ‘void _gfortran_set_convert (int conv)’
  
  _Arguments_:
       CONV        Endian conversion, possible values:
*************** _Example_:
*** 4916,4930 ****
  
  File: gfortran.info,  Node: _gfortran_set_record_marker,  Next: _gfortran_set_fpe,  Prev: _gfortran_set_convert,  Up: Non-Fortran Main Program
  
! 6.3.4 '_gfortran_set_record_marker' -- Set length of record markers
  -------------------------------------------------------------------
  
  _Description_:
!      '_gfortran_set_record_marker' sets the length of record markers for
       unformatted files.
  
  _Syntax_:
!      'void _gfortran_set_record_marker (int val)'
  
  _Arguments_:
       VAL         Length of the record marker; valid values are 4
--- 4916,4930 ----
  
  File: gfortran.info,  Node: _gfortran_set_record_marker,  Next: _gfortran_set_fpe,  Prev: _gfortran_set_convert,  Up: Non-Fortran Main Program
  
! 6.3.4 ‘_gfortran_set_record_marker’ -- Set length of record markers
  -------------------------------------------------------------------
  
  _Description_:
!      ‘_gfortran_set_record_marker’ sets the length of record markers for
       unformatted files.
  
  _Syntax_:
!      ‘void _gfortran_set_record_marker (int val)’
  
  _Arguments_:
       VAL         Length of the record marker; valid values are 4
*************** _Example_:
*** 4942,4964 ****
  
  File: gfortran.info,  Node: _gfortran_set_fpe,  Next: _gfortran_set_max_subrecord_length,  Prev: _gfortran_set_record_marker,  Up: Non-Fortran Main Program
  
! 6.3.5 '_gfortran_set_fpe' -- Enable floating point exception traps
  ------------------------------------------------------------------
  
  _Description_:
!      '_gfortran_set_fpe' enables floating point exception traps for the
       specified exceptions.  On most systems, this will result in a
       SIGFPE signal being sent and the program being aborted.
  
  _Syntax_:
!      'void _gfortran_set_fpe (int val)'
  
  _Arguments_:
       OPTION[0]   IEEE exceptions.  Possible values are (bitwise
                   or-ed) zero (0, default) no trapping,
!                  'GFC_FPE_INVALID' (1), 'GFC_FPE_DENORMAL' (2),
!                  'GFC_FPE_ZERO' (4), 'GFC_FPE_OVERFLOW' (8),
!                  'GFC_FPE_UNDERFLOW' (16), and 'GFC_FPE_INEXACT'
                   (32).
  
  _Example_:
--- 4942,4964 ----
  
  File: gfortran.info,  Node: _gfortran_set_fpe,  Next: _gfortran_set_max_subrecord_length,  Prev: _gfortran_set_record_marker,  Up: Non-Fortran Main Program
  
! 6.3.5 ‘_gfortran_set_fpe’ -- Enable floating point exception traps
  ------------------------------------------------------------------
  
  _Description_:
!      ‘_gfortran_set_fpe’ enables floating point exception traps for the
       specified exceptions.  On most systems, this will result in a
       SIGFPE signal being sent and the program being aborted.
  
  _Syntax_:
!      ‘void _gfortran_set_fpe (int val)’
  
  _Arguments_:
       OPTION[0]   IEEE exceptions.  Possible values are (bitwise
                   or-ed) zero (0, default) no trapping,
!                  ‘GFC_FPE_INVALID’ (1), ‘GFC_FPE_DENORMAL’ (2),
!                  ‘GFC_FPE_ZERO’ (4), ‘GFC_FPE_OVERFLOW’ (8),
!                  ‘GFC_FPE_UNDERFLOW’ (16), and ‘GFC_FPE_INEXACT’
                   (32).
  
  _Example_:
*************** _Example_:
*** 4974,4989 ****
  
  File: gfortran.info,  Node: _gfortran_set_max_subrecord_length,  Prev: _gfortran_set_fpe,  Up: Non-Fortran Main Program
  
! 6.3.6 '_gfortran_set_max_subrecord_length' -- Set subrecord length
  ------------------------------------------------------------------
  
  _Description_:
!      '_gfortran_set_max_subrecord_length' set the maximum length for a
       subrecord.  This option only makes sense for testing and debugging
       of unformatted I/O.
  
  _Syntax_:
!      'void _gfortran_set_max_subrecord_length (int val)'
  
  _Arguments_:
       VAL         the maximum length for a subrecord; the maximum
--- 4974,4989 ----
  
  File: gfortran.info,  Node: _gfortran_set_max_subrecord_length,  Prev: _gfortran_set_fpe,  Up: Non-Fortran Main Program
  
! 6.3.6 ‘_gfortran_set_max_subrecord_length’ -- Set subrecord length
  ------------------------------------------------------------------
  
  _Description_:
!      ‘_gfortran_set_max_subrecord_length’ set the maximum length for a
       subrecord.  This option only makes sense for testing and debugging
       of unformatted I/O.
  
  _Syntax_:
!      ‘void _gfortran_set_max_subrecord_length (int val)’
  
  _Arguments_:
       VAL         the maximum length for a subrecord; the maximum
*************** File: gfortran.info,  Node: Naming conve
*** 5024,5050 ****
  ------------------------
  
  According the Fortran standard, valid Fortran names consist of a letter
! between 'A' to 'Z', 'a' to 'z', digits '0', '1' to '9' and underscores
! ('_') with the restriction that names may only start with a letter.  As
! vendor extension, the dollar sign ('$') is additionally permitted with
! the option '-fdollar-ok', but not as first character and only if the
  target system supports it.
  
     By default, the procedure name is the lower-cased Fortran name with
! an appended underscore ('_'); using '-fno-underscoring' no underscore is
! appended while '-fsecond-underscore' appends two underscores.  Depending
  on the target system and the calling convention, the procedure might be
! additionally dressed; for instance, on 32bit Windows with 'stdcall', an
! at-sign '@' followed by an integer number is appended.  For the changing
  the calling convention, see *note GNU Fortran Compiler Directives::.
  
     For common blocks, the same convention is used, i.e.  by default an
  underscore is appended to the lower-cased Fortran name.  Blank commons
! have the name '__BLNK__'.
  
     For procedures and variables declared in the specification space of a
! module, the name is formed by '__', followed by the lower-cased module
! name, '_MOD_', and the lower-cased Fortran name.  Note that no
  underscore is appended.
  
  
--- 5024,5050 ----
  ------------------------
  
  According the Fortran standard, valid Fortran names consist of a letter
! between ‘A’ to ‘Z’, ‘a’ to ‘z’, digits ‘0’, ‘1’ to ‘9’ and underscores
! (‘_’) with the restriction that names may only start with a letter.  As
! vendor extension, the dollar sign (‘$’) is additionally permitted with
! the option ‘-fdollar-ok’, but not as first character and only if the
  target system supports it.
  
     By default, the procedure name is the lower-cased Fortran name with
! an appended underscore (‘_’); using ‘-fno-underscoring’ no underscore is
! appended while ‘-fsecond-underscore’ appends two underscores.  Depending
  on the target system and the calling convention, the procedure might be
! additionally dressed; for instance, on 32bit Windows with ‘stdcall’, an
! at-sign ‘@’ followed by an integer number is appended.  For the changing
  the calling convention, see *note GNU Fortran Compiler Directives::.
  
     For common blocks, the same convention is used, i.e.  by default an
  underscore is appended to the lower-cased Fortran name.  Blank commons
! have the name ‘__BLNK__’.
  
     For procedures and variables declared in the specification space of a
! module, the name is formed by ‘__’, followed by the lower-cased module
! name, ‘_MOD_’, and the lower-cased Fortran name.  Note that no
  underscore is appended.
  
  
*************** File: gfortran.info,  Node: Argument pas
*** 5053,5072 ****
  6.4.2 Argument passing conventions
  ----------------------------------
  
! Subroutines do not return a value (matching C99's 'void') while
  functions either return a value as specified in the platform ABI or the
  result variable is passed as hidden argument to the function and no
  result is returned.  A hidden result variable is used when the result
! variable is an array or of type 'CHARACTER'.
  
     Arguments are passed according to the platform ABI. In particular,
  complex arguments might not be compatible to a struct with two real
  components for the real and imaginary part.  The argument passing
! matches the one of C99's '_Complex'.  Functions with scalar complex
  result variables return their value and do not use a by-reference
! argument.  Note that with the '-ff2c' option, the argument passing is
  modified and no longer completely matches the platform ABI. Some other
! Fortran compilers use 'f2c' semantic by default; this might cause
  problems with interoperablility.
  
     GNU Fortran passes most arguments by reference, i.e.  by passing a
--- 5053,5072 ----
  6.4.2 Argument passing conventions
  ----------------------------------
  
! Subroutines do not return a value (matching C99's ‘void’) while
  functions either return a value as specified in the platform ABI or the
  result variable is passed as hidden argument to the function and no
  result is returned.  A hidden result variable is used when the result
! variable is an array or of type ‘CHARACTER’.
  
     Arguments are passed according to the platform ABI. In particular,
  complex arguments might not be compatible to a struct with two real
  components for the real and imaginary part.  The argument passing
! matches the one of C99's ‘_Complex’.  Functions with scalar complex
  result variables return their value and do not use a by-reference
! argument.  Note that with the ‘-ff2c’ option, the argument passing is
  modified and no longer completely matches the platform ABI. Some other
! Fortran compilers use ‘f2c’ semantic by default; this might cause
  problems with interoperablility.
  
     GNU Fortran passes most arguments by reference, i.e.  by passing a
*************** pointer to the data.  Note that the comp
*** 5074,5106 ****
  variable into which the actual argument has been copied, if required
  semantically (copy-in/copy-out).
  
!    For arguments with 'ALLOCATABLE' and 'POINTER' attribute (including
  procedure pointers), a pointer to the pointer is passed such that the
  pointer address can be modified in the procedure.
  
!    For dummy arguments with the 'VALUE' attribute: Scalar arguments of
! the type 'INTEGER', 'LOGICAL', 'REAL' and 'COMPLEX' are passed by value
  according to the platform ABI. (As vendor extension and not recommended,
! using '%VAL()' in the call to a procedure has the same effect.)  For
! 'TYPE(C_PTR)' and procedure pointers, the pointer itself is passed such
  that it can be modified without affecting the caller.
  
!    For Boolean ('LOGICAL') arguments, please note that GCC expects only
! the integer value 0 and 1.  If a GNU Fortran 'LOGICAL' variable contains
  another integer value, the result is undefined.  As some other Fortran
! compilers use -1 for '.TRUE.', extra care has to be taken - such as
! passing the value as 'INTEGER'.  (The same value restriction also
  applies to other front ends of GCC, e.g.  to GCC's C99 compiler for
! '_Bool' or GCC's Ada compiler for 'Boolean'.)
  
!    For arguments of 'CHARACTER' type, the character length is passed as
  a hidden argument at the end of the argument list, except when the
! corresponding dummy argument is declared as 'TYPE(*)'.  For
  deferred-length strings, the value is passed by reference, otherwise by
! value.  The character length has the C type 'size_t' (or
! 'INTEGER(kind=C_SIZE_T)' in Fortran).  Note that this is different to
  older versions of the GNU Fortran compiler, where the type of the hidden
! character length argument was a C 'int'.  In order to retain
  compatibility with older versions, one can e.g.  for the following
  Fortran procedure
  
--- 5074,5106 ----
  variable into which the actual argument has been copied, if required
  semantically (copy-in/copy-out).
  
!    For arguments with ‘ALLOCATABLE’ and ‘POINTER’ attribute (including
  procedure pointers), a pointer to the pointer is passed such that the
  pointer address can be modified in the procedure.
  
!    For dummy arguments with the ‘VALUE’ attribute: Scalar arguments of
! the type ‘INTEGER’, ‘LOGICAL’, ‘REAL’ and ‘COMPLEX’ are passed by value
  according to the platform ABI. (As vendor extension and not recommended,
! using ‘%VAL()’ in the call to a procedure has the same effect.)  For
! ‘TYPE(C_PTR)’ and procedure pointers, the pointer itself is passed such
  that it can be modified without affecting the caller.
  
!    For Boolean (‘LOGICAL’) arguments, please note that GCC expects only
! the integer value 0 and 1.  If a GNU Fortran ‘LOGICAL’ variable contains
  another integer value, the result is undefined.  As some other Fortran
! compilers use -1 for ‘.TRUE.’, extra care has to be taken - such as
! passing the value as ‘INTEGER’.  (The same value restriction also
  applies to other front ends of GCC, e.g.  to GCC's C99 compiler for
! ‘_Bool’ or GCC's Ada compiler for ‘Boolean’.)
  
!    For arguments of ‘CHARACTER’ type, the character length is passed as
  a hidden argument at the end of the argument list, except when the
! corresponding dummy argument is declared as ‘TYPE(*)’.  For
  deferred-length strings, the value is passed by reference, otherwise by
! value.  The character length has the C type ‘size_t’ (or
! ‘INTEGER(kind=C_SIZE_T)’ in Fortran).  Note that this is different to
  older versions of the GNU Fortran compiler, where the type of the hidden
! character length argument was a C ‘int’.  In order to retain
  compatibility with older versions, one can e.g.  for the following
  Fortran procedure
  
*************** Fortran procedure
*** 5123,5159 ****
     In order to avoid such compiler-specific details, for new code it is
  instead recommended to use the ISO_C_BINDING feature.
  
!    Note with C binding, 'CHARACTER(len=1)' result variables are returned
  according to the platform ABI and no hidden length argument is used for
! dummy arguments; with 'VALUE', those variables are passed by value.
  
!    For 'OPTIONAL' dummy arguments, an absent argument is denoted by a
  NULL pointer, except for scalar dummy arguments of intrinsic type or
! derived type (but not 'CLASS') and that have the 'VALUE' attribute.  For
! those, a hidden Boolean argument ('logical(kind=C_bool),value') is used
  to indicate whether the argument is present.
  
     Arguments which are assumed-shape, assumed-rank or deferred-rank
! arrays or, with '-fcoarray=lib', allocatable scalar coarrays use an
  array descriptor.  All other arrays pass the address of the first
! element of the array.  With '-fcoarray=lib', the token and the offset
  belonging to nonallocatable coarrays dummy arguments are passed as
  hidden argument along the character length hidden arguments.  The token
  is an opaque pointer identifying the coarray and the offset is a
! passed-by-value integer of kind 'C_PTRDIFF_T', denoting the byte offset
  between the base address of the coarray and the passed scalar or first
  element of the passed array.
  
     The arguments are passed in the following order
!    * Result variable, when the function result is passed by reference
!    * Character length of the function result, if it is a of type
!      'CHARACTER' and no C binding is used
!    * The arguments in the order in which they appear in the Fortran
       declaration
!    * The present status for optional arguments with value attribute,
       which are internally passed by value
!    * The character length and/or coarray token and offset for the first
!      argument which is a 'CHARACTER' or a nonallocatable coarray dummy
       argument, followed by the hidden arguments of the next dummy
       argument of such a type
  
--- 5123,5159 ----
     In order to avoid such compiler-specific details, for new code it is
  instead recommended to use the ISO_C_BINDING feature.
  
!    Note with C binding, ‘CHARACTER(len=1)’ result variables are returned
  according to the platform ABI and no hidden length argument is used for
! dummy arguments; with ‘VALUE’, those variables are passed by value.
  
!    For ‘OPTIONAL’ dummy arguments, an absent argument is denoted by a
  NULL pointer, except for scalar dummy arguments of intrinsic type or
! derived type (but not ‘CLASS’) and that have the ‘VALUE’ attribute.  For
! those, a hidden Boolean argument (‘logical(kind=C_bool),value’) is used
  to indicate whether the argument is present.
  
     Arguments which are assumed-shape, assumed-rank or deferred-rank
! arrays or, with ‘-fcoarray=lib’, allocatable scalar coarrays use an
  array descriptor.  All other arrays pass the address of the first
! element of the array.  With ‘-fcoarray=lib’, the token and the offset
  belonging to nonallocatable coarrays dummy arguments are passed as
  hidden argument along the character length hidden arguments.  The token
  is an opaque pointer identifying the coarray and the offset is a
! passed-by-value integer of kind ‘C_PTRDIFF_T’, denoting the byte offset
  between the base address of the coarray and the passed scalar or first
  element of the passed array.
  
     The arguments are passed in the following order
!    • Result variable, when the function result is passed by reference
!    • Character length of the function result, if it is a of type
!      ‘CHARACTER’ and no C binding is used
!    • The arguments in the order in which they appear in the Fortran
       declaration
!    • The present status for optional arguments with value attribute,
       which are internally passed by value
!    • The character length and/or coarray token and offset for the first
!      argument which is a ‘CHARACTER’ or a nonallocatable coarray dummy
       argument, followed by the hidden arguments of the next dummy
       argument of such a type
  
*************** File: gfortran.info,  Node: Type and enu
*** 5185,5200 ****
  
  File: gfortran.info,  Node: caf_token_t,  Next: caf_register_t,  Up: Type and enum ABI Documentation
  
! 7.1.1 'caf_token_t'
  -------------------
  
! Typedef of type 'void *' on the compiler side.  Can be any data type on
  the library side.
  
  
  File: gfortran.info,  Node: caf_register_t,  Next: caf_deregister_t,  Prev: caf_token_t,  Up: Type and enum ABI Documentation
  
! 7.1.2 'caf_register_t'
  ----------------------
  
  Indicates which kind of coarray variable should be registered.
--- 5185,5200 ----
  
  File: gfortran.info,  Node: caf_token_t,  Next: caf_register_t,  Up: Type and enum ABI Documentation
  
! 7.1.1 ‘caf_token_t’
  -------------------
  
! Typedef of type ‘void *’ on the compiler side.  Can be any data type on
  the library side.
  
  
  File: gfortran.info,  Node: caf_register_t,  Next: caf_deregister_t,  Prev: caf_token_t,  Up: Type and enum ABI Documentation
  
! 7.1.2 ‘caf_register_t’
  ----------------------
  
  Indicates which kind of coarray variable should be registered.
*************** typedef enum caf_register_t {
*** 5212,5232 ****
  }
  caf_register_t;
  
!    The values 'CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY' and
! 'CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY' are for allocatable components
  in derived type coarrays only.  The first one sets up the token without
  allocating memory for allocatable component.  The latter one only
  allocates the memory for an allocatable component in a derived type
  coarray.  The token needs to be setup previously by the REGISTER_ONLY.
  This allows to have allocatable components un-allocated on some images.
  The status whether an allocatable component is allocated on a remote
! image can be queried by '_caf_is_present' which used internally by the
! 'ALLOCATED' intrinsic.
  
  
  File: gfortran.info,  Node: caf_deregister_t,  Next: caf_reference_t,  Prev: caf_register_t,  Up: Type and enum ABI Documentation
  
! 7.1.3 'caf_deregister_t'
  ------------------------
  
  typedef enum caf_deregister_t {
--- 5212,5232 ----
  }
  caf_register_t;
  
!    The values ‘CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY’ and
! ‘CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY’ are for allocatable components
  in derived type coarrays only.  The first one sets up the token without
  allocating memory for allocatable component.  The latter one only
  allocates the memory for an allocatable component in a derived type
  coarray.  The token needs to be setup previously by the REGISTER_ONLY.
  This allows to have allocatable components un-allocated on some images.
  The status whether an allocatable component is allocated on a remote
! image can be queried by ‘_caf_is_present’ which used internally by the
! ‘ALLOCATED’ intrinsic.
  
  
  File: gfortran.info,  Node: caf_deregister_t,  Next: caf_reference_t,  Prev: caf_register_t,  Up: Type and enum ABI Documentation
  
! 7.1.3 ‘caf_deregister_t’
  ------------------------
  
  typedef enum caf_deregister_t {
*************** typedef enum caf_deregister_t {
*** 5236,5255 ****
  caf_deregister_t;
  
     Allows to specify the type of deregistration of a coarray object.
! The 'CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY' flag is only allowed for
  allocatable components in derived type coarrays.
  
  
  File: gfortran.info,  Node: caf_reference_t,  Next: caf_team_t,  Prev: caf_deregister_t,  Up: Type and enum ABI Documentation
  
! 7.1.4 'caf_reference_t'
  -----------------------
  
  The structure used for implementing arbitrary reference chains.  A
! 'CAF_REFERENCE_T' allows to specify a component reference or any kind of
  array reference of any rank supported by gfortran.  For array references
  all kinds as known by the compiler/Fortran standard are supported
! indicated by a 'MODE'.
  
  typedef enum caf_ref_type_t {
    /* Reference a component of a derived type, either regular one or an
--- 5236,5255 ----
  caf_deregister_t;
  
     Allows to specify the type of deregistration of a coarray object.
! The ‘CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY’ flag is only allowed for
  allocatable components in derived type coarrays.
  
  
  File: gfortran.info,  Node: caf_reference_t,  Next: caf_team_t,  Prev: caf_deregister_t,  Up: Type and enum ABI Documentation
  
! 7.1.4 ‘caf_reference_t’
  -----------------------
  
  The structure used for implementing arbitrary reference chains.  A
! ‘CAF_REFERENCE_T’ allows to specify a component reference or any kind of
  array reference of any rank supported by gfortran.  For array references
  all kinds as known by the compiler/Fortran standard are supported
! indicated by a ‘MODE’.
  
  typedef enum caf_ref_type_t {
    /* Reference a component of a derived type, either regular one or an
*************** typedef struct caf_reference_t {
*** 5331,5354 ****
  } caf_reference_t;
  
     The references make up a single linked list of reference operations.
! The 'NEXT' member links to the next reference or NULL to indicate the
  end of the chain.  Component and array refs can be arbitrarily mixed as
  long as they comply to the Fortran standard.
  
!    _NOTES_ The member 'STATIC_ARRAY_TYPE' is used only when the 'TYPE'
! is 'CAF_REF_STATIC_ARRAY'.  The member gives the type of the data
  referenced.  Because no array descriptor is available for a
  descriptor-less array and type conversion still needs to take place the
  type is transported here.
  
!    At the moment 'CAF_ARR_REF_VECTOR' is not implemented in the front
  end for descriptor-less arrays.  The library caf_single has untested
  support for it.
  
  
  File: gfortran.info,  Node: caf_team_t,  Prev: caf_reference_t,  Up: Type and enum ABI Documentation
  
! 7.1.5 'caf_team_t'
  ------------------
  
  Opaque pointer to represent a team-handle.  This type is a stand-in for
--- 5331,5354 ----
  } caf_reference_t;
  
     The references make up a single linked list of reference operations.
! The ‘NEXT’ member links to the next reference or NULL to indicate the
  end of the chain.  Component and array refs can be arbitrarily mixed as
  long as they comply to the Fortran standard.
  
!    _NOTES_ The member ‘STATIC_ARRAY_TYPE’ is used only when the ‘TYPE’
! is ‘CAF_REF_STATIC_ARRAY’.  The member gives the type of the data
  referenced.  Because no array descriptor is available for a
  descriptor-less array and type conversion still needs to take place the
  type is transported here.
  
!    At the moment ‘CAF_ARR_REF_VECTOR’ is not implemented in the front
  end for descriptor-less arrays.  The library caf_single has untested
  support for it.
  
  
  File: gfortran.info,  Node: caf_team_t,  Prev: caf_reference_t,  Up: Type and enum ABI Documentation
  
! 7.1.5 ‘caf_team_t’
  ------------------
  
  Opaque pointer to represent a team-handle.  This type is a stand-in for
*************** File: gfortran.info,  Node: Function ABI
*** 5403,5427 ****
  
  File: gfortran.info,  Node: _gfortran_caf_init,  Next: _gfortran_caf_finish,  Up: Function ABI Documentation
  
! 7.2.1 '_gfortran_caf_init' -- Initialiation function
  ----------------------------------------------------
  
  _Description_:
       This function is called at startup of the program before the
       Fortran main program, if the latter has been compiled with
!      '-fcoarray=lib'.  It takes as arguments the command-line arguments
!      of the program.  It is permitted to pass two 'NULL' pointers as
!      argument; if non-'NULL', the library is permitted to modify the
       arguments.
  
  _Syntax_:
!      'void _gfortran_caf_init (int *argc, char ***argv)'
  
  _Arguments_:
       ARGC        intent(inout) An integer pointer with the number
!                  of arguments passed to the program or 'NULL'.
       ARGV        intent(inout) A pointer to an array of strings
!                  with the command-line arguments or 'NULL'.
  
  _NOTES_
       The function is modelled after the initialization function of the
--- 5403,5427 ----
  
  File: gfortran.info,  Node: _gfortran_caf_init,  Next: _gfortran_caf_finish,  Up: Function ABI Documentation
  
! 7.2.1 ‘_gfortran_caf_init’ -- Initialiation function
  ----------------------------------------------------
  
  _Description_:
       This function is called at startup of the program before the
       Fortran main program, if the latter has been compiled with
!      ‘-fcoarray=lib’.  It takes as arguments the command-line arguments
!      of the program.  It is permitted to pass two ‘NULL’ pointers as
!      argument; if non-‘NULL’, the library is permitted to modify the
       arguments.
  
  _Syntax_:
!      ‘void _gfortran_caf_init (int *argc, char ***argv)’
  
  _Arguments_:
       ARGC        intent(inout) An integer pointer with the number
!                  of arguments passed to the program or ‘NULL’.
       ARGV        intent(inout) A pointer to an array of strings
!                  with the command-line arguments or ‘NULL’.
  
  _NOTES_
       The function is modelled after the initialization function of the
*************** _NOTES_
*** 5435,5449 ****
  
  File: gfortran.info,  Node: _gfortran_caf_finish,  Next: _gfortran_caf_this_image,  Prev: _gfortran_caf_init,  Up: Function ABI Documentation
  
! 7.2.2 '_gfortran_caf_finish' -- Finalization function
  -----------------------------------------------------
  
  _Description_:
       This function is called at the end of the Fortran main program, if
!      it has been compiled with the '-fcoarray=lib' option.
  
  _Syntax_:
!      'void _gfortran_caf_finish (void)'
  
  _NOTES_
       For non-Fortran programs, it is recommended to call the function at
--- 5435,5449 ----
  
  File: gfortran.info,  Node: _gfortran_caf_finish,  Next: _gfortran_caf_this_image,  Prev: _gfortran_caf_init,  Up: Function ABI Documentation
  
! 7.2.2 ‘_gfortran_caf_finish’ -- Finalization function
  -----------------------------------------------------
  
  _Description_:
       This function is called at the end of the Fortran main program, if
!      it has been compiled with the ‘-fcoarray=lib’ option.
  
  _Syntax_:
!      ‘void _gfortran_caf_finish (void)’
  
  _NOTES_
       For non-Fortran programs, it is recommended to call the function at
*************** _NOTES_
*** 5457,5463 ****
  
  File: gfortran.info,  Node: _gfortran_caf_this_image,  Next: _gfortran_caf_num_images,  Prev: _gfortran_caf_finish,  Up: Function ABI Documentation
  
! 7.2.3 '_gfortran_caf_this_image' -- Querying the image number
  -------------------------------------------------------------
  
  _Description_:
--- 5457,5463 ----
  
  File: gfortran.info,  Node: _gfortran_caf_this_image,  Next: _gfortran_caf_num_images,  Prev: _gfortran_caf_finish,  Up: Function ABI Documentation
  
! 7.2.3 ‘_gfortran_caf_this_image’ -- Querying the image number
  -------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5465,5485 ****
       number.
  
  _Syntax_:
!      'int _gfortran_caf_this_image (int distance)'
  
  _Arguments_:
!      DISTANCE    As specified for the 'this_image' intrinsic in
                   TS18508.  Shall be a non-negative number.
  
  _NOTES_
!      If the Fortran intrinsic 'this_image' is invoked without an
       argument, which is the only permitted form in Fortran 2008, GCC
!      passes '0' as first argument.
  
  
  File: gfortran.info,  Node: _gfortran_caf_num_images,  Next: _gfortran_caf_image_status,  Prev: _gfortran_caf_this_image,  Up: Function ABI Documentation
  
! 7.2.4 '_gfortran_caf_num_images' -- Querying the maximal number of images
  -------------------------------------------------------------------------
  
  _Description_:
--- 5465,5485 ----
       number.
  
  _Syntax_:
!      ‘int _gfortran_caf_this_image (int distance)’
  
  _Arguments_:
!      DISTANCE    As specified for the ‘this_image’ intrinsic in
                   TS18508.  Shall be a non-negative number.
  
  _NOTES_
!      If the Fortran intrinsic ‘this_image’ is invoked without an
       argument, which is the only permitted form in Fortran 2008, GCC
!      passes ‘0’ as first argument.
  
  
  File: gfortran.info,  Node: _gfortran_caf_num_images,  Next: _gfortran_caf_image_status,  Prev: _gfortran_caf_this_image,  Up: Function ABI Documentation
  
! 7.2.4 ‘_gfortran_caf_num_images’ -- Querying the maximal number of images
  -------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5491,5497 ****
       returns the number of failed images.
  
  _Syntax_:
!      'int _gfortran_caf_num_images(int distance, int failed)'
  
  _Arguments_:
       DISTANCE    the distance from this image to the ancestor.
--- 5491,5497 ----
       returns the number of failed images.
  
  _Syntax_:
!      ‘int _gfortran_caf_num_images(int distance, int failed)’
  
  _Arguments_:
       DISTANCE    the distance from this image to the ancestor.
*************** _Arguments_:
*** 5500,5524 ****
  
  _NOTES_
       This function follows TS18508.  If the num_image intrinsic has no
!      arguments, then the compiler passes 'distance=0' and 'failed=-1' to
       the function.
  
  
  File: gfortran.info,  Node: _gfortran_caf_image_status,  Next: _gfortran_caf_failed_images,  Prev: _gfortran_caf_num_images,  Up: Function ABI Documentation
  
! 7.2.5 '_gfortran_caf_image_status' -- Query the status of an image
  ------------------------------------------------------------------
  
  _Description_:
       Get the status of the image given by the id IMAGE of the team given
       by TEAM.  Valid results are zero, for image is ok,
!      'STAT_STOPPED_IMAGE' from the ISO_FORTRAN_ENV module to indicate
!      that the image has been stopped and 'STAT_FAILED_IMAGE' also from
!      ISO_FORTRAN_ENV to indicate that the image has executed a 'FAIL
!      IMAGE' statement.
  
  _Syntax_:
!      'int _gfortran_caf_image_status (int image, caf_team_t * team)'
  
  _Arguments_:
       IMAGE       the positive scalar id of the image in the
--- 5500,5524 ----
  
  _NOTES_
       This function follows TS18508.  If the num_image intrinsic has no
!      arguments, then the compiler passes ‘distance=0’ and ‘failed=-1’ to
       the function.
  
  
  File: gfortran.info,  Node: _gfortran_caf_image_status,  Next: _gfortran_caf_failed_images,  Prev: _gfortran_caf_num_images,  Up: Function ABI Documentation
  
! 7.2.5 ‘_gfortran_caf_image_status’ -- Query the status of an image
  ------------------------------------------------------------------
  
  _Description_:
       Get the status of the image given by the id IMAGE of the team given
       by TEAM.  Valid results are zero, for image is ok,
!      ‘STAT_STOPPED_IMAGE’ from the ISO_FORTRAN_ENV module to indicate
!      that the image has been stopped and ‘STAT_FAILED_IMAGE’ also from
!      ISO_FORTRAN_ENV to indicate that the image has executed a ‘FAIL
!      IMAGE’ statement.
  
  _Syntax_:
!      ‘int _gfortran_caf_image_status (int image, caf_team_t * team)’
  
  _Arguments_:
       IMAGE       the positive scalar id of the image in the
*************** _NOTES_
*** 5534,5540 ****
  
  File: gfortran.info,  Node: _gfortran_caf_failed_images,  Next: _gfortran_caf_stopped_images,  Prev: _gfortran_caf_image_status,  Up: Function ABI Documentation
  
! 7.2.6 '_gfortran_caf_failed_images' -- Get an array of the indexes of the failed images
  ---------------------------------------------------------------------------------------
  
  _Description_:
--- 5534,5540 ----
  
  File: gfortran.info,  Node: _gfortran_caf_failed_images,  Next: _gfortran_caf_stopped_images,  Prev: _gfortran_caf_image_status,  Up: Function ABI Documentation
  
! 7.2.6 ‘_gfortran_caf_failed_images’ -- Get an array of the indexes of the failed images
  ---------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5546,5552 ****
       images have failed.
  
  _Syntax_:
!      'int _gfortran_caf_failed_images (caf_team_t * team, int * kind)'
  
  _Arguments_:
       TEAM        optional; team on the which the inquiry is to be
--- 5546,5552 ----
       images have failed.
  
  _Syntax_:
!      ‘int _gfortran_caf_failed_images (caf_team_t * team, int * kind)’
  
  _Arguments_:
       TEAM        optional; team on the which the inquiry is to be
*************** _NOTES_
*** 5562,5568 ****
  
  File: gfortran.info,  Node: _gfortran_caf_stopped_images,  Next: _gfortran_caf_register,  Prev: _gfortran_caf_failed_images,  Up: Function ABI Documentation
  
! 7.2.7 '_gfortran_caf_stopped_images' -- Get an array of the indexes of the stopped images
  -----------------------------------------------------------------------------------------
  
  _Description_:
--- 5562,5568 ----
  
  File: gfortran.info,  Node: _gfortran_caf_stopped_images,  Next: _gfortran_caf_register,  Prev: _gfortran_caf_failed_images,  Up: Function ABI Documentation
  
! 7.2.7 ‘_gfortran_caf_stopped_images’ -- Get an array of the indexes of the stopped images
  -----------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5574,5580 ****
       when no images have failed.
  
  _Syntax_:
!      'int _gfortran_caf_stopped_images (caf_team_t * team, int * kind)'
  
  _Arguments_:
       TEAM        optional; team on the which the inquiry is to be
--- 5574,5580 ----
       when no images have failed.
  
  _Syntax_:
!      ‘int _gfortran_caf_stopped_images (caf_team_t * team, int * kind)’
  
  _Arguments_:
       TEAM        optional; team on the which the inquiry is to be
*************** _NOTES_
*** 5590,5634 ****
  
  File: gfortran.info,  Node: _gfortran_caf_register,  Next: _gfortran_caf_deregister,  Prev: _gfortran_caf_stopped_images,  Up: Function ABI Documentation
  
! 7.2.8 '_gfortran_caf_register' -- Registering coarrays
  ------------------------------------------------------
  
  _Description_:
       Registers memory for a coarray and creates a token to identify the
!      coarray.  The routine is called for both coarrays with 'SAVE'
!      attribute and using an explicit 'ALLOCATE' statement.  If an error
!      occurs and STAT is a 'NULL' pointer, the function shall abort with
       printing an error message and starting the error termination.  If
       no error occurs and STAT is present, it shall be set to zero.
!      Otherwise, it shall be set to a positive value and, if not-'NULL',
       ERRMSG shall be set to a string describing the failure.  The
!      routine shall register the memory provided in the 'DATA'-component
!      of the array descriptor DESC, when that component is non-'NULL',
       else it shall allocate sufficient memory and provide a pointer to
!      it in the 'DATA'-component of DESC.  The array descriptor has rank
       zero, when a scalar object is to be registered and the array
       descriptor may be invalid after the call to
!      '_gfortran_caf_register'.  When an array is to be allocated the
       descriptor persists.
  
!      For 'CAF_REGTYPE_COARRAY_STATIC' and 'CAF_REGTYPE_COARRAY_ALLOC',
       the passed size is the byte size requested.  For
!      'CAF_REGTYPE_LOCK_STATIC', 'CAF_REGTYPE_LOCK_ALLOC' and
!      'CAF_REGTYPE_CRITICAL' it is the array size or one for a scalar.
  
!      When 'CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY' is used, then only a
       token for an allocatable or pointer component is created.  The
!      'SIZE' parameter is not used then.  On the contrary when
!      'CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY' is specified, then the
       TOKEN needs to be registered by a previous call with regtype
!      'CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY' and either the memory
       specified in the DESC's data-ptr is registered or allocate when the
!      data-ptr is 'NULL'.
  
  _Syntax_:
!      'void caf_register (size_t size, caf_register_t type, caf_token_t
       *token, gfc_descriptor_t *desc, int *stat, char *errmsg, size_t
!      errmsg_len)'
  
  _Arguments_:
       SIZE        For normal coarrays, the byte size of the
--- 5590,5634 ----
  
  File: gfortran.info,  Node: _gfortran_caf_register,  Next: _gfortran_caf_deregister,  Prev: _gfortran_caf_stopped_images,  Up: Function ABI Documentation
  
! 7.2.8 ‘_gfortran_caf_register’ -- Registering coarrays
  ------------------------------------------------------
  
  _Description_:
       Registers memory for a coarray and creates a token to identify the
!      coarray.  The routine is called for both coarrays with ‘SAVE’
!      attribute and using an explicit ‘ALLOCATE’ statement.  If an error
!      occurs and STAT is a ‘NULL’ pointer, the function shall abort with
       printing an error message and starting the error termination.  If
       no error occurs and STAT is present, it shall be set to zero.
!      Otherwise, it shall be set to a positive value and, if not-‘NULL’,
       ERRMSG shall be set to a string describing the failure.  The
!      routine shall register the memory provided in the ‘DATA’-component
!      of the array descriptor DESC, when that component is non-‘NULL’,
       else it shall allocate sufficient memory and provide a pointer to
!      it in the ‘DATA’-component of DESC.  The array descriptor has rank
       zero, when a scalar object is to be registered and the array
       descriptor may be invalid after the call to
!      ‘_gfortran_caf_register’.  When an array is to be allocated the
       descriptor persists.
  
!      For ‘CAF_REGTYPE_COARRAY_STATIC’ and ‘CAF_REGTYPE_COARRAY_ALLOC’,
       the passed size is the byte size requested.  For
!      ‘CAF_REGTYPE_LOCK_STATIC’, ‘CAF_REGTYPE_LOCK_ALLOC’ and
!      ‘CAF_REGTYPE_CRITICAL’ it is the array size or one for a scalar.
  
!      When ‘CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY’ is used, then only a
       token for an allocatable or pointer component is created.  The
!      ‘SIZE’ parameter is not used then.  On the contrary when
!      ‘CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY’ is specified, then the
       TOKEN needs to be registered by a previous call with regtype
!      ‘CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY’ and either the memory
       specified in the DESC's data-ptr is registered or allocate when the
!      data-ptr is ‘NULL’.
  
  _Syntax_:
!      ‘void caf_register (size_t size, caf_register_t type, caf_token_t
       *token, gfc_descriptor_t *desc, int *stat, char *errmsg, size_t
!      errmsg_len)’
  
  _Arguments_:
       SIZE        For normal coarrays, the byte size of the
*************** _Arguments_:
*** 5639,5647 ****
                   coarray.
       DESC        intent(inout) The (pseudo) array descriptor.
       STAT        intent(out) For allocatable coarrays, stores the
!                  STAT=; may be 'NULL'
       ERRMSG      intent(out) When an error occurs, this will be
!                  set to an error message; may be 'NULL'
       ERRMSG_LEN  the buffer size of errmsg.
  
  _NOTES_
--- 5639,5647 ----
                   coarray.
       DESC        intent(inout) The (pseudo) array descriptor.
       STAT        intent(out) For allocatable coarrays, stores the
!                  STAT=; may be ‘NULL’
       ERRMSG      intent(out) When an error occurs, this will be
!                  set to an error message; may be ‘NULL’
       ERRMSG_LEN  the buffer size of errmsg.
  
  _NOTES_
*************** _NOTES_
*** 5660,5666 ****
       allocation status.  Note that for critical blocks, the locking is
       only required on one image; in the locking statement, the processor
       shall always pass an image index of one for critical-block lock
!      variables ('CAF_REGTYPE_CRITICAL').  For lock types and
       critical-block variables, the initial value shall be unlocked (or,
       respectively, not in critical section) such as the value false; for
       event types, the initial state should be no event, e.g.  zero.
--- 5660,5666 ----
       allocation status.  Note that for critical blocks, the locking is
       only required on one image; in the locking statement, the processor
       shall always pass an image index of one for critical-block lock
!      variables (‘CAF_REGTYPE_CRITICAL’).  For lock types and
       critical-block variables, the initial value shall be unlocked (or,
       respectively, not in critical section) such as the value false; for
       event types, the initial state should be no event, e.g.  zero.
*************** _NOTES_
*** 5668,5674 ****
  
  File: gfortran.info,  Node: _gfortran_caf_deregister,  Next: _gfortran_caf_is_present,  Prev: _gfortran_caf_register,  Up: Function ABI Documentation
  
! 7.2.9 '_gfortran_caf_deregister' -- Deregistering coarrays
  ----------------------------------------------------------
  
  _Description_:
--- 5668,5674 ----
  
  File: gfortran.info,  Node: _gfortran_caf_deregister,  Next: _gfortran_caf_is_present,  Prev: _gfortran_caf_register,  Up: Function ABI Documentation
  
! 7.2.9 ‘_gfortran_caf_deregister’ -- Deregistering coarrays
  ----------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5677,5692 ****
       case of an error, this function shall fail with an error message,
       unless the STAT variable is not null.  The library is only expected
       to free memory it allocated itself during a call to
!      '_gfortran_caf_register'.
  
  _Syntax_:
!      'void caf_deregister (caf_token_t *token, caf_deregister_t type,
!      int *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       TOKEN       the token to free.
       TYPE        the type of action to take for the coarray.  A
!                  'CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY' is
                   allowed only for allocatable or pointer
                   components of derived type coarrays.  The action
                   only deallocates the local memory without
--- 5677,5692 ----
       case of an error, this function shall fail with an error message,
       unless the STAT variable is not null.  The library is only expected
       to free memory it allocated itself during a call to
!      ‘_gfortran_caf_register’.
  
  _Syntax_:
!      ‘void caf_deregister (caf_token_t *token, caf_deregister_t type,
!      int *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       TOKEN       the token to free.
       TYPE        the type of action to take for the coarray.  A
!                  ‘CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY’ is
                   allowed only for allocatable or pointer
                   components of derived type coarrays.  The action
                   only deallocates the local memory without
*************** _NOTES_
*** 5704,5710 ****
  
  File: gfortran.info,  Node: _gfortran_caf_is_present,  Next: _gfortran_caf_send,  Prev: _gfortran_caf_deregister,  Up: Function ABI Documentation
  
! 7.2.10 '_gfortran_caf_is_present' -- Query whether an allocatable or pointer component in a derived type coarray is allocated
  -----------------------------------------------------------------------------------------------------------------------------
  
  _Description_:
--- 5704,5710 ----
  
  File: gfortran.info,  Node: _gfortran_caf_is_present,  Next: _gfortran_caf_send,  Prev: _gfortran_caf_deregister,  Up: Function ABI Documentation
  
! 7.2.10 ‘_gfortran_caf_is_present’ -- Query whether an allocatable or pointer component in a derived type coarray is allocated
  -----------------------------------------------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5712,5719 ****
       in a derived type coarray is allocated on a remote image.
  
  _Syntax_:
!      'void _gfortran_caf_is_present (caf_token_t token, int image_index,
!      gfc_reference_t *ref)'
  
  _Arguments_:
       TOKEN       An opaque pointer identifying the coarray.
--- 5712,5719 ----
       in a derived type coarray is allocated on a remote image.
  
  _Syntax_:
!      ‘void _gfortran_caf_is_present (caf_token_t token, int image_index,
!      gfc_reference_t *ref)’
  
  _Arguments_:
       TOKEN       An opaque pointer identifying the coarray.
*************** _Arguments_:
*** 5727,5733 ****
  
  File: gfortran.info,  Node: _gfortran_caf_send,  Next: _gfortran_caf_get,  Prev: _gfortran_caf_is_present,  Up: Function ABI Documentation
  
! 7.2.11 '_gfortran_caf_send' -- Sending data from a local image to a remote image
  --------------------------------------------------------------------------------
  
  _Description_:
--- 5727,5733 ----
  
  File: gfortran.info,  Node: _gfortran_caf_send,  Next: _gfortran_caf_get,  Prev: _gfortran_caf_is_present,  Up: Function ABI Documentation
  
! 7.2.11 ‘_gfortran_caf_send’ -- Sending data from a local image to a remote image
  --------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5735,5744 ****
       local to a remote image identified by the image_index.
  
  _Syntax_:
!      'void _gfortran_caf_send (caf_token_t token, size_t offset, int
       image_index, gfc_descriptor_t *dest, caf_vector_t *dst_vector,
       gfc_descriptor_t *src, int dst_kind, int src_kind, bool
!      may_require_tmp, int *stat)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 5735,5744 ----
       local to a remote image identified by the image_index.
  
  _Syntax_:
!      ‘void _gfortran_caf_send (caf_token_t token, size_t offset, int
       image_index, gfc_descriptor_t *dest, caf_vector_t *dst_vector,
       gfc_descriptor_t *src, int dst_kind, int src_kind, bool
!      may_require_tmp, int *stat)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 5749,5755 ****
       IMAGE_INDEX intent(in) The ID of the remote image; must be a
                   positive number.
       DEST        intent(in) Array descriptor for the remote image
!                  for the bounds and the size.  The 'base_addr'
                   shall not be accessed.
       DST_VECTOR  intent(in) If not NULL, it contains the vector
                   subscript of the destination array; the values
--- 5749,5755 ----
       IMAGE_INDEX intent(in) The ID of the remote image; must be a
                   positive number.
       DEST        intent(in) Array descriptor for the remote image
!                  for the bounds and the size.  The ‘base_addr’
                   shall not be accessed.
       DST_VECTOR  intent(in) If not NULL, it contains the vector
                   subscript of the destination array; the values
*************** _Arguments_:
*** 5759,5771 ****
                   to be transferred to the remote image
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is 'false' when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is 'true'.
       STAT        intent(out) when non-NULL give the result of the
                   operation, i.e., zero on success and non-zero on
                   error.  When NULL and an error occurs, then an
--- 5759,5771 ----
                   to be transferred to the remote image
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is ‘false’ when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is ‘true’.
       STAT        intent(out) when non-NULL give the result of the
                   operation, i.e., zero on success and non-zero on
                   error.  When NULL and an error occurs, then an
*************** _NOTES_
*** 5776,5786 ****
       It is permitted to have IMAGE_INDEX equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using 'memmove' which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and 'memmove' takes
       care of overlap issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
--- 5776,5786 ----
       It is permitted to have IMAGE_INDEX equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using ‘memmove’ which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and ‘memmove’ takes
       care of overlap issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
*************** _NOTES_
*** 5790,5796 ****
  
  File: gfortran.info,  Node: _gfortran_caf_get,  Next: _gfortran_caf_sendget,  Prev: _gfortran_caf_send,  Up: Function ABI Documentation
  
! 7.2.12 '_gfortran_caf_get' -- Getting data from a remote image
  --------------------------------------------------------------
  
  _Description_:
--- 5790,5796 ----
  
  File: gfortran.info,  Node: _gfortran_caf_get,  Next: _gfortran_caf_sendget,  Prev: _gfortran_caf_send,  Up: Function ABI Documentation
  
! 7.2.12 ‘_gfortran_caf_get’ -- Getting data from a remote image
  --------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5798,5807 ****
       image identified by the image_index.
  
  _Syntax_:
!      'void _gfortran_caf_get (caf_token_t token, size_t offset, int
       image_index, gfc_descriptor_t *src, caf_vector_t *src_vector,
       gfc_descriptor_t *dest, int src_kind, int dst_kind, bool
!      may_require_tmp, int *stat)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 5798,5807 ----
       image identified by the image_index.
  
  _Syntax_:
!      ‘void _gfortran_caf_get (caf_token_t token, size_t offset, int
       image_index, gfc_descriptor_t *src, caf_vector_t *src_vector,
       gfc_descriptor_t *dest, int src_kind, int dst_kind, bool
!      may_require_tmp, int *stat)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 5815,5821 ****
                   to store the data retrieved from the remote
                   image
       SRC         intent(in) Array descriptor for the remote image
!                  for the bounds and the size.  The 'base_addr'
                   shall not be accessed.
       SRC_VECTOR  intent(in) If not NULL, it contains the vector
                   subscript of the source array; the values are
--- 5815,5821 ----
                   to store the data retrieved from the remote
                   image
       SRC         intent(in) Array descriptor for the remote image
!                  for the bounds and the size.  The ‘base_addr’
                   shall not be accessed.
       SRC_VECTOR  intent(in) If not NULL, it contains the vector
                   subscript of the source array; the values are
*************** _Arguments_:
*** 5823,5835 ****
                   argument.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is 'false' when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is 'true'.
       STAT        intent(out) When non-NULL give the result of the
                   operation, i.e., zero on success and non-zero on
                   error.  When NULL and an error occurs, then an
--- 5823,5835 ----
                   argument.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is ‘false’ when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is ‘true’.
       STAT        intent(out) When non-NULL give the result of the
                   operation, i.e., zero on success and non-zero on
                   error.  When NULL and an error occurs, then an
*************** _NOTES_
*** 5840,5850 ****
       It is permitted to have IMAGE_INDEX equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using 'memmove' which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and 'memmove' takes
       care of overlap issues).
  
       Note that the library has to handle numeric-type conversion and for
--- 5840,5850 ----
       It is permitted to have IMAGE_INDEX equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using ‘memmove’ which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and ‘memmove’ takes
       care of overlap issues).
  
       Note that the library has to handle numeric-type conversion and for
*************** _NOTES_
*** 5853,5859 ****
  
  File: gfortran.info,  Node: _gfortran_caf_sendget,  Next: _gfortran_caf_send_by_ref,  Prev: _gfortran_caf_get,  Up: Function ABI Documentation
  
! 7.2.13 '_gfortran_caf_sendget' -- Sending data between remote images
  --------------------------------------------------------------------
  
  _Description_:
--- 5853,5859 ----
  
  File: gfortran.info,  Node: _gfortran_caf_sendget,  Next: _gfortran_caf_send_by_ref,  Prev: _gfortran_caf_get,  Up: Function ABI Documentation
  
! 7.2.13 ‘_gfortran_caf_sendget’ -- Sending data between remote images
  --------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5862,5873 ****
       identified by the DST_IMAGE_INDEX.
  
  _Syntax_:
!      'void _gfortran_caf_sendget (caf_token_t dst_token, size_t
       dst_offset, int dst_image_index, gfc_descriptor_t *dest,
       caf_vector_t *dst_vector, caf_token_t src_token, size_t src_offset,
       int src_image_index, gfc_descriptor_t *src, caf_vector_t
       *src_vector, int dst_kind, int src_kind, bool may_require_tmp, int
!      *stat)'
  
  _Arguments_:
       DST_TOKEN   intent(in) An opaque pointer identifying the
--- 5862,5873 ----
       identified by the DST_IMAGE_INDEX.
  
  _Syntax_:
!      ‘void _gfortran_caf_sendget (caf_token_t dst_token, size_t
       dst_offset, int dst_image_index, gfc_descriptor_t *dest,
       caf_vector_t *dst_vector, caf_token_t src_token, size_t src_offset,
       int src_image_index, gfc_descriptor_t *src, caf_vector_t
       *src_vector, int dst_kind, int src_kind, bool may_require_tmp, int
!      *stat)’
  
  _Arguments_:
       DST_TOKEN   intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 5879,5885 ****
                   image; must be a positive number.
       DEST        intent(in) Array descriptor for the destination
                   remote image for the bounds and the size.  The
!                  'base_addr' shall not be accessed.
       DST_VECTOR  intent(int) If not NULL, it contains the vector
                   subscript of the destination array; the values
                   are relative to the dimension triplet of the
--- 5879,5885 ----
                   image; must be a positive number.
       DEST        intent(in) Array descriptor for the destination
                   remote image for the bounds and the size.  The
!                  ‘base_addr’ shall not be accessed.
       DST_VECTOR  intent(int) If not NULL, it contains the vector
                   subscript of the destination array; the values
                   are relative to the dimension triplet of the
*************** _Arguments_:
*** 5897,5909 ****
                   to be transferred to the remote image
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is 'false' when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is 'true'.
       STAT        intent(out) when non-NULL give the result of the
                   operation, i.e., zero on success and non-zero on
                   error.  When NULL and an error occurs, then an
--- 5897,5909 ----
                   to be transferred to the remote image
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is ‘false’ when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is ‘true’.
       STAT        intent(out) when non-NULL give the result of the
                   operation, i.e., zero on success and non-zero on
                   error.  When NULL and an error occurs, then an
*************** _NOTES_
*** 5915,5925 ****
       SRC_IMAGE_INDEX and DST_IMAGE_INDEX; the memory of the send-to and
       the send-from might (partially) overlap in that case.  The
       implementation has to take care that it handles this case, e.g.
!      using 'memmove' which handles (partially) overlapping memory.  If
       MAY_REQUIRE_TMP is true, the library might additionally create a
       temporary variable, unless additional checks show that this is not
       required (e.g.  because walking backward is possible or because
!      both arrays are contiguous and 'memmove' takes care of overlap
       issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
--- 5915,5925 ----
       SRC_IMAGE_INDEX and DST_IMAGE_INDEX; the memory of the send-to and
       the send-from might (partially) overlap in that case.  The
       implementation has to take care that it handles this case, e.g.
!      using ‘memmove’ which handles (partially) overlapping memory.  If
       MAY_REQUIRE_TMP is true, the library might additionally create a
       temporary variable, unless additional checks show that this is not
       required (e.g.  because walking backward is possible or because
!      both arrays are contiguous and ‘memmove’ takes care of overlap
       issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
*************** _NOTES_
*** 5929,5935 ****
  
  File: gfortran.info,  Node: _gfortran_caf_send_by_ref,  Next: _gfortran_caf_get_by_ref,  Prev: _gfortran_caf_sendget,  Up: Function ABI Documentation
  
! 7.2.14 '_gfortran_caf_send_by_ref' -- Sending data from a local image to a remote image with enhanced referencing options
  -------------------------------------------------------------------------------------------------------------------------
  
  _Description_:
--- 5929,5935 ----
  
  File: gfortran.info,  Node: _gfortran_caf_send_by_ref,  Next: _gfortran_caf_get_by_ref,  Prev: _gfortran_caf_sendget,  Up: Function ABI Documentation
  
! 7.2.14 ‘_gfortran_caf_send_by_ref’ -- Sending data from a local image to a remote image with enhanced referencing options
  -------------------------------------------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 5937,5946 ****
       local to a remote image identified by the IMAGE_INDEX.
  
  _Syntax_:
!      'void _gfortran_caf_send_by_ref (caf_token_t token, int
       image_index, gfc_descriptor_t *src, caf_reference_t *refs, int
       dst_kind, int src_kind, bool may_require_tmp, bool
!      dst_reallocatable, int *stat, int dst_type)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 5937,5946 ----
       local to a remote image identified by the IMAGE_INDEX.
  
  _Syntax_:
!      ‘void _gfortran_caf_send_by_ref (caf_token_t token, int
       image_index, gfc_descriptor_t *src, caf_reference_t *refs, int
       dst_kind, int src_kind, bool may_require_tmp, bool
!      dst_reallocatable, int *stat, int dst_type)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 5954,5973 ****
                   at least one entry.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is 'false' when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is 'true'.
       DST_REALLOCATABLEintent(in) Set when the destination is of
                   allocatable or pointer type and the refs will
                   allow reallocation, i.e., the ref is a full
                   array or component ref.
!      STAT        intent(out) When non-'NULL' give the result of
                   the operation, i.e., zero on success and
!                  non-zero on error.  When 'NULL' and an error
                   occurs, then an error message is printed and the
                   program is terminated.
       DST_TYPE    intent(in) Give the type of the destination.
--- 5954,5973 ----
                   at least one entry.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is ‘false’ when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is ‘true’.
       DST_REALLOCATABLEintent(in) Set when the destination is of
                   allocatable or pointer type and the refs will
                   allow reallocation, i.e., the ref is a full
                   array or component ref.
!      STAT        intent(out) When non-‘NULL’ give the result of
                   the operation, i.e., zero on success and
!                  non-zero on error.  When ‘NULL’ and an error
                   occurs, then an error message is printed and the
                   program is terminated.
       DST_TYPE    intent(in) Give the type of the destination.
*************** _NOTES_
*** 5979,5989 ****
       It is permitted to have IMAGE_INDEX equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using 'memmove' which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and 'memmove' takes
       care of overlap issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
--- 5979,5989 ----
       It is permitted to have IMAGE_INDEX equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using ‘memmove’ which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and ‘memmove’ takes
       care of overlap issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
*************** _NOTES_
*** 5998,6004 ****
  
  File: gfortran.info,  Node: _gfortran_caf_get_by_ref,  Next: _gfortran_caf_sendget_by_ref,  Prev: _gfortran_caf_send_by_ref,  Up: Function ABI Documentation
  
! 7.2.15 '_gfortran_caf_get_by_ref' -- Getting data from a remote image using enhanced references
  -----------------------------------------------------------------------------------------------
  
  _Description_:
--- 5998,6004 ----
  
  File: gfortran.info,  Node: _gfortran_caf_get_by_ref,  Next: _gfortran_caf_sendget_by_ref,  Prev: _gfortran_caf_send_by_ref,  Up: Function ABI Documentation
  
! 7.2.15 ‘_gfortran_caf_get_by_ref’ -- Getting data from a remote image using enhanced references
  -----------------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6006,6015 ****
       remote image identified by the IMAGE_INDEX.
  
  _Syntax_:
!      'void _gfortran_caf_get_by_ref (caf_token_t token, int image_index,
       caf_reference_t *refs, gfc_descriptor_t *dst, int dst_kind, int
       src_kind, bool may_require_tmp, bool dst_reallocatable, int *stat,
!      int src_type)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6006,6015 ----
       remote image identified by the IMAGE_INDEX.
  
  _Syntax_:
!      ‘void _gfortran_caf_get_by_ref (caf_token_t token, int image_index,
       caf_reference_t *refs, gfc_descriptor_t *dst, int dst_kind, int
       src_kind, bool may_require_tmp, bool dst_reallocatable, int *stat,
!      int src_type)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 6024,6043 ****
                   DST_REALLOCATABLE allows it.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is 'false' when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is 'true'.
       DST_REALLOCATABLEintent(in) Set when DST is of allocatable or
                   pointer type and its refs allow reallocation,
                   i.e., the full array or a component is
                   referenced.
!      STAT        intent(out) When non-'NULL' give the result of
                   the operation, i.e., zero on success and
!                  non-zero on error.  When 'NULL' and an error
                   occurs, then an error message is printed and the
                   program is terminated.
       SRC_TYPE    intent(in) Give the type of the source.  When
--- 6024,6043 ----
                   DST_REALLOCATABLE allows it.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is ‘false’ when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is ‘true’.
       DST_REALLOCATABLEintent(in) Set when DST is of allocatable or
                   pointer type and its refs allow reallocation,
                   i.e., the full array or a component is
                   referenced.
!      STAT        intent(out) When non-‘NULL’ give the result of
                   the operation, i.e., zero on success and
!                  non-zero on error.  When ‘NULL’ and an error
                   occurs, then an error message is printed and the
                   program is terminated.
       SRC_TYPE    intent(in) Give the type of the source.  When
*************** _Arguments_:
*** 6046,6059 ****
                   not known, but provided here.
  
  _NOTES_
!      It is permitted to have 'image_index' equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using 'memmove' which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and 'memmove' takes
       care of overlap issues).
  
       Note that the library has to handle numeric-type conversion and for
--- 6046,6059 ----
                   not known, but provided here.
  
  _NOTES_
!      It is permitted to have ‘image_index’ equal the current image; the
       memory of the send-to and the send-from might (partially) overlap
       in that case.  The implementation has to take care that it handles
!      this case, e.g.  using ‘memmove’ which handles (partially)
       overlapping memory.  If MAY_REQUIRE_TMP is true, the library might
       additionally create a temporary variable, unless additional checks
       show that this is not required (e.g.  because walking backward is
!      possible or because both arrays are contiguous and ‘memmove’ takes
       care of overlap issues).
  
       Note that the library has to handle numeric-type conversion and for
*************** _NOTES_
*** 6067,6073 ****
  
  File: gfortran.info,  Node: _gfortran_caf_sendget_by_ref,  Next: _gfortran_caf_lock,  Prev: _gfortran_caf_get_by_ref,  Up: Function ABI Documentation
  
! 7.2.16 '_gfortran_caf_sendget_by_ref' -- Sending data between remote images using enhanced references on both sides
  -------------------------------------------------------------------------------------------------------------------
  
  _Description_:
--- 6067,6073 ----
  
  File: gfortran.info,  Node: _gfortran_caf_sendget_by_ref,  Next: _gfortran_caf_lock,  Prev: _gfortran_caf_get_by_ref,  Up: Function ABI Documentation
  
! 7.2.16 ‘_gfortran_caf_sendget_by_ref’ -- Sending data between remote images using enhanced references on both sides
  -------------------------------------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6076,6086 ****
       identified by the DST_IMAGE_INDEX.
  
  _Syntax_:
!      'void _gfortran_caf_sendget_by_ref (caf_token_t dst_token, int
       dst_image_index, caf_reference_t *dst_refs, caf_token_t src_token,
       int src_image_index, caf_reference_t *src_refs, int dst_kind, int
       src_kind, bool may_require_tmp, int *dst_stat, int *src_stat, int
!      dst_type, int src_type)'
  
  _Arguments_:
       DST_TOKEN   intent(in) An opaque pointer identifying the
--- 6076,6086 ----
       identified by the DST_IMAGE_INDEX.
  
  _Syntax_:
!      ‘void _gfortran_caf_sendget_by_ref (caf_token_t dst_token, int
       dst_image_index, caf_reference_t *dst_refs, caf_token_t src_token,
       int src_image_index, caf_reference_t *src_refs, int dst_kind, int
       src_kind, bool may_require_tmp, int *dst_stat, int *src_stat, int
!      dst_type, int src_type)’
  
  _Arguments_:
       DST_TOKEN   intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 6098,6118 ****
                   structure to get the data.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is 'false' when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is 'true'.
!      DST_STAT    intent(out) when non-'NULL' give the result of
                   the send-operation, i.e., zero on success and
!                  non-zero on error.  When 'NULL' and an error
                   occurs, then an error message is printed and the
                   program is terminated.
!      SRC_STAT    intent(out) When non-'NULL' give the result of
                   the get-operation, i.e., zero on success and
!                  non-zero on error.  When 'NULL' and an error
                   occurs, then an error message is printed and the
                   program is terminated.
       DST_TYPE    intent(in) Give the type of the destination.
--- 6098,6118 ----
                   structure to get the data.
       DST_KIND    intent(in) Kind of the destination argument
       SRC_KIND    intent(in) Kind of the source argument
!      MAY_REQUIRE_TMPintent(in) The variable is ‘false’ when it is
                   known at compile time that the DEST and SRC
                   either cannot overlap or overlap (fully or
                   partially) such that walking SRC and DEST in
                   element wise element order (honoring the stride
                   value) will not lead to wrong results.
!                  Otherwise, the value is ‘true’.
!      DST_STAT    intent(out) when non-‘NULL’ give the result of
                   the send-operation, i.e., zero on success and
!                  non-zero on error.  When ‘NULL’ and an error
                   occurs, then an error message is printed and the
                   program is terminated.
!      SRC_STAT    intent(out) When non-‘NULL’ give the result of
                   the get-operation, i.e., zero on success and
!                  non-zero on error.  When ‘NULL’ and an error
                   occurs, then an error message is printed and the
                   program is terminated.
       DST_TYPE    intent(in) Give the type of the destination.
*************** _NOTES_
*** 6129,6139 ****
       SRC_IMAGE_INDEX and DST_IMAGE_INDEX; the memory of the send-to and
       the send-from might (partially) overlap in that case.  The
       implementation has to take care that it handles this case, e.g.
!      using 'memmove' which handles (partially) overlapping memory.  If
       MAY_REQUIRE_TMP is true, the library might additionally create a
       temporary variable, unless additional checks show that this is not
       required (e.g.  because walking backward is possible or because
!      both arrays are contiguous and 'memmove' takes care of overlap
       issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
--- 6129,6139 ----
       SRC_IMAGE_INDEX and DST_IMAGE_INDEX; the memory of the send-to and
       the send-from might (partially) overlap in that case.  The
       implementation has to take care that it handles this case, e.g.
!      using ‘memmove’ which handles (partially) overlapping memory.  If
       MAY_REQUIRE_TMP is true, the library might additionally create a
       temporary variable, unless additional checks show that this is not
       required (e.g.  because walking backward is possible or because
!      both arrays are contiguous and ‘memmove’ takes care of overlap
       issues).
  
       Note that the assignment of a scalar to an array is permitted.  In
*************** _NOTES_
*** 6148,6169 ****
  
  File: gfortran.info,  Node: _gfortran_caf_lock,  Next: _gfortran_caf_unlock,  Prev: _gfortran_caf_sendget_by_ref,  Up: Function ABI Documentation
  
! 7.2.17 '_gfortran_caf_lock' -- Locking a lock variable
  ------------------------------------------------------
  
  _Description_:
       Acquire a lock on the given image on a scalar locking variable or
       for the given array element for an array-valued variable.  If the
!      ACQUIRED_LOCK is 'NULL', the function returns after having obtained
!      the lock.  If it is non-'NULL', then ACQUIRED_LOCK is assigned the
       value true (one) when the lock could be obtained and false (zero)
       otherwise.  Locking a lock variable which has already been locked
       by the same image is an error.
  
  _Syntax_:
!      'void _gfortran_caf_lock (caf_token_t token, size_t index, int
       image_index, int *acquired_lock, int *stat, char *errmsg, size_t
!      errmsg_len)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6148,6169 ----
  
  File: gfortran.info,  Node: _gfortran_caf_lock,  Next: _gfortran_caf_unlock,  Prev: _gfortran_caf_sendget_by_ref,  Up: Function ABI Documentation
  
! 7.2.17 ‘_gfortran_caf_lock’ -- Locking a lock variable
  ------------------------------------------------------
  
  _Description_:
       Acquire a lock on the given image on a scalar locking variable or
       for the given array element for an array-valued variable.  If the
!      ACQUIRED_LOCK is ‘NULL’, the function returns after having obtained
!      the lock.  If it is non-‘NULL’, then ACQUIRED_LOCK is assigned the
       value true (one) when the lock could be obtained and false (zero)
       otherwise.  Locking a lock variable which has already been locked
       by the same image is an error.
  
  _Syntax_:
!      ‘void _gfortran_caf_lock (caf_token_t token, size_t index, int
       image_index, int *acquired_lock, int *stat, char *errmsg, size_t
!      errmsg_len)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _NOTES_
*** 6188,6194 ****
  
  File: gfortran.info,  Node: _gfortran_caf_unlock,  Next: _gfortran_caf_event_post,  Prev: _gfortran_caf_lock,  Up: Function ABI Documentation
  
! 7.2.18 '_gfortran_caf_lock' -- Unlocking a lock variable
  --------------------------------------------------------
  
  _Description_:
--- 6188,6194 ----
  
  File: gfortran.info,  Node: _gfortran_caf_unlock,  Next: _gfortran_caf_event_post,  Prev: _gfortran_caf_lock,  Up: Function ABI Documentation
  
! 7.2.18 ‘_gfortran_caf_lock’ -- Unlocking a lock variable
  --------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6198,6205 ****
       different image is an error.
  
  _Syntax_:
!      'void _gfortran_caf_unlock (caf_token_t token, size_t index, int
!      image_index, int *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6198,6205 ----
       different image is an error.
  
  _Syntax_:
!      ‘void _gfortran_caf_unlock (caf_token_t token, size_t index, int
!      image_index, int *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _NOTES_
*** 6223,6237 ****
  
  File: gfortran.info,  Node: _gfortran_caf_event_post,  Next: _gfortran_caf_event_wait,  Prev: _gfortran_caf_unlock,  Up: Function ABI Documentation
  
! 7.2.19 '_gfortran_caf_event_post' -- Post an event
  --------------------------------------------------
  
  _Description_:
       Increment the event count of the specified event variable.
  
  _Syntax_:
!      'void _gfortran_caf_event_post (caf_token_t token, size_t index,
!      int image_index, int *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6223,6237 ----
  
  File: gfortran.info,  Node: _gfortran_caf_event_post,  Next: _gfortran_caf_event_wait,  Prev: _gfortran_caf_unlock,  Up: Function ABI Documentation
  
! 7.2.19 ‘_gfortran_caf_event_post’ -- Post an event
  --------------------------------------------------
  
  _Description_:
       Increment the event count of the specified event variable.
  
  _Syntax_:
!      ‘void _gfortran_caf_event_post (caf_token_t token, size_t index,
!      int image_index, int *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _NOTES_
*** 6251,6262 ****
       variable.  The statement is an image-control statement but does not
       imply sync memory.  Still, all preceding push communications of
       this image to the specified remote image have to be completed
!      before 'event_wait' on the remote image returns.
  
  
  File: gfortran.info,  Node: _gfortran_caf_event_wait,  Next: _gfortran_caf_event_query,  Prev: _gfortran_caf_event_post,  Up: Function ABI Documentation
  
! 7.2.20 '_gfortran_caf_event_wait' -- Wait that an event occurred
  ----------------------------------------------------------------
  
  _Description_:
--- 6251,6262 ----
       variable.  The statement is an image-control statement but does not
       imply sync memory.  Still, all preceding push communications of
       this image to the specified remote image have to be completed
!      before ‘event_wait’ on the remote image returns.
  
  
  File: gfortran.info,  Node: _gfortran_caf_event_wait,  Next: _gfortran_caf_event_query,  Prev: _gfortran_caf_event_post,  Up: Function ABI Documentation
  
! 7.2.20 ‘_gfortran_caf_event_wait’ -- Wait that an event occurred
  ----------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6265,6272 ****
       amount and return.
  
  _Syntax_:
!      'void _gfortran_caf_event_wait (caf_token_t token, size_t index,
!      int until_count, int *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6265,6272 ----
       amount and return.
  
  _Syntax_:
!      ‘void _gfortran_caf_event_wait (caf_token_t token, size_t index,
!      int until_count, int *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _NOTES_
*** 6294,6314 ****
  
       The statement is an image-control statement but does not imply sync
       memory.  Still, all preceding push communications of this image to
!      the specified remote image have to be completed before 'event_wait'
       on the remote image returns.
  
  
  File: gfortran.info,  Node: _gfortran_caf_event_query,  Next: _gfortran_caf_sync_all,  Prev: _gfortran_caf_event_wait,  Up: Function ABI Documentation
  
! 7.2.21 '_gfortran_caf_event_query' -- Query event count
  -------------------------------------------------------
  
  _Description_:
       Return the event count of the specified event variable.
  
  _Syntax_:
!      'void _gfortran_caf_event_query (caf_token_t token, size_t index,
!      int image_index, int *count, int *stat)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6294,6314 ----
  
       The statement is an image-control statement but does not imply sync
       memory.  Still, all preceding push communications of this image to
!      the specified remote image have to be completed before ‘event_wait’
       on the remote image returns.
  
  
  File: gfortran.info,  Node: _gfortran_caf_event_query,  Next: _gfortran_caf_sync_all,  Prev: _gfortran_caf_event_wait,  Up: Function ABI Documentation
  
! 7.2.21 ‘_gfortran_caf_event_query’ -- Query event count
  -------------------------------------------------------
  
  _Description_:
       Return the event count of the specified event variable.
  
  _Syntax_:
!      ‘void _gfortran_caf_event_query (caf_token_t token, size_t index,
!      int image_index, int *count, int *stat)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 6324,6330 ****
  
  _NOTES_
       The typical use is to check the local event variable to only call
!      'event_wait' when the data is available.  However, a coindexed
       variable is permitted; there is no ordering or synchronization
       implied.  It acts like an atomic fetch of the value of the event
       variable.
--- 6324,6330 ----
  
  _NOTES_
       The typical use is to check the local event variable to only call
!      ‘event_wait’ when the data is available.  However, a coindexed
       variable is permitted; there is no ordering or synchronization
       implied.  It acts like an atomic fetch of the value of the event
       variable.
*************** _NOTES_
*** 6332,6338 ****
  
  File: gfortran.info,  Node: _gfortran_caf_sync_all,  Next: _gfortran_caf_sync_images,  Prev: _gfortran_caf_event_query,  Up: Function ABI Documentation
  
! 7.2.22 '_gfortran_caf_sync_all' -- All-image barrier
  ----------------------------------------------------
  
  _Description_:
--- 6332,6338 ----
  
  File: gfortran.info,  Node: _gfortran_caf_sync_all,  Next: _gfortran_caf_sync_images,  Prev: _gfortran_caf_event_query,  Up: Function ABI Documentation
  
! 7.2.22 ‘_gfortran_caf_sync_all’ -- All-image barrier
  ----------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6342,6349 ****
       pending data transfers of previous segment have completed.
  
  _Syntax_:
!      'void _gfortran_caf_sync_all (int *stat, char *errmsg, size_t
!      errmsg_len)'
  
  _Arguments_:
       STAT        intent(out) Stores the status STAT= and may be
--- 6342,6349 ----
       pending data transfers of previous segment have completed.
  
  _Syntax_:
!      ‘void _gfortran_caf_sync_all (int *stat, char *errmsg, size_t
!      errmsg_len)’
  
  _Arguments_:
       STAT        intent(out) Stores the status STAT= and may be
*************** _Arguments_:
*** 6355,6381 ****
  
  File: gfortran.info,  Node: _gfortran_caf_sync_images,  Next: _gfortran_caf_sync_memory,  Prev: _gfortran_caf_sync_all,  Up: Function ABI Documentation
  
! 7.2.23 '_gfortran_caf_sync_images' -- Barrier for selected images
  -----------------------------------------------------------------
  
  _Description_:
       Synchronization between the specified images; the program only
       continues on a given image after this function has been called on
       all images specified for that image.  Note that one image can wait
!      for all other images in the current team (e.g.  via 'sync
!      images(*)') while those only wait for that specific image.
!      Additionally, 'sync images' ensures that all pending data transfers
       of previous segments have completed.
  
  _Syntax_:
!      'void _gfortran_caf_sync_images (int count, int images[], int
!      *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       COUNT       intent(in) The number of images which are
                   provided in the next argument.  For a zero-sized
!                  array, the value is zero.  For 'sync images
!                  (*)', the value is -1.
       IMAGES      intent(in) An array with the images provided by
                   the user.  If COUNT is zero, a NULL pointer is
                   passed.
--- 6355,6381 ----
  
  File: gfortran.info,  Node: _gfortran_caf_sync_images,  Next: _gfortran_caf_sync_memory,  Prev: _gfortran_caf_sync_all,  Up: Function ABI Documentation
  
! 7.2.23 ‘_gfortran_caf_sync_images’ -- Barrier for selected images
  -----------------------------------------------------------------
  
  _Description_:
       Synchronization between the specified images; the program only
       continues on a given image after this function has been called on
       all images specified for that image.  Note that one image can wait
!      for all other images in the current team (e.g.  via ‘sync
!      images(*)’) while those only wait for that specific image.
!      Additionally, ‘sync images’ ensures that all pending data transfers
       of previous segments have completed.
  
  _Syntax_:
!      ‘void _gfortran_caf_sync_images (int count, int images[], int
!      *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       COUNT       intent(in) The number of images which are
                   provided in the next argument.  For a zero-sized
!                  array, the value is zero.  For ‘sync images
!                  (*)’, the value is -1.
       IMAGES      intent(in) An array with the images provided by
                   the user.  If COUNT is zero, a NULL pointer is
                   passed.
*************** _Arguments_:
*** 6388,6394 ****
  
  File: gfortran.info,  Node: _gfortran_caf_sync_memory,  Next: _gfortran_caf_error_stop,  Prev: _gfortran_caf_sync_images,  Up: Function ABI Documentation
  
! 7.2.24 '_gfortran_caf_sync_memory' -- Wait for completion of segment-memory operations
  --------------------------------------------------------------------------------------
  
  _Description_:
--- 6388,6394 ----
  
  File: gfortran.info,  Node: _gfortran_caf_sync_memory,  Next: _gfortran_caf_error_stop,  Prev: _gfortran_caf_sync_images,  Up: Function ABI Documentation
  
! 7.2.24 ‘_gfortran_caf_sync_memory’ -- Wait for completion of segment-memory operations
  --------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6397,6404 ****
       completed.
  
  _Syntax_:
!      'void _gfortran_caf_sync_memory (int *stat, char *errmsg, size_t
!      errmsg_len)'
  
  _Arguments_:
       STAT        intent(out) Stores the status STAT= and may be
--- 6397,6404 ----
       completed.
  
  _Syntax_:
!      ‘void _gfortran_caf_sync_memory (int *stat, char *errmsg, size_t
!      errmsg_len)’
  
  _Arguments_:
       STAT        intent(out) Stores the status STAT= and may be
*************** _Arguments_:
*** 6408,6428 ****
       ERRMSG_LEN  intent(in) the buffer size of errmsg
  
  _NOTE_ A simple implementation could be
!      '__asm__ __volatile__ ("":::"memory")' to prevent code movements.
  
  
  File: gfortran.info,  Node: _gfortran_caf_error_stop,  Next: _gfortran_caf_error_stop_str,  Prev: _gfortran_caf_sync_memory,  Up: Function ABI Documentation
  
! 7.2.25 '_gfortran_caf_error_stop' -- Error termination with exit code
  ---------------------------------------------------------------------
  
  _Description_:
!      Invoked for an 'ERROR STOP' statement which has an integer
       argument.  The function should terminate the program with the
       specified exit code.
  
  _Syntax_:
!      'void _gfortran_caf_error_stop (int error)'
  
  _Arguments_:
       ERROR       intent(in) The exit status to be used.
--- 6408,6428 ----
       ERRMSG_LEN  intent(in) the buffer size of errmsg
  
  _NOTE_ A simple implementation could be
!      ‘__asm__ __volatile__ ("":::"memory")’ to prevent code movements.
  
  
  File: gfortran.info,  Node: _gfortran_caf_error_stop,  Next: _gfortran_caf_error_stop_str,  Prev: _gfortran_caf_sync_memory,  Up: Function ABI Documentation
  
! 7.2.25 ‘_gfortran_caf_error_stop’ -- Error termination with exit code
  ---------------------------------------------------------------------
  
  _Description_:
!      Invoked for an ‘ERROR STOP’ statement which has an integer
       argument.  The function should terminate the program with the
       specified exit code.
  
  _Syntax_:
!      ‘void _gfortran_caf_error_stop (int error)’
  
  _Arguments_:
       ERROR       intent(in) The exit status to be used.
*************** _Arguments_:
*** 6430,6445 ****
  
  File: gfortran.info,  Node: _gfortran_caf_error_stop_str,  Next: _gfortran_caf_fail_image,  Prev: _gfortran_caf_error_stop,  Up: Function ABI Documentation
  
! 7.2.26 '_gfortran_caf_error_stop_str' -- Error termination with string
  ----------------------------------------------------------------------
  
  _Description_:
!      Invoked for an 'ERROR STOP' statement which has a string as
       argument.  The function should terminate the program with a
       nonzero-exit code.
  
  _Syntax_:
!      'void _gfortran_caf_error_stop (const char *string, size_t len)'
  
  _Arguments_:
       STRING      intent(in) the error message (not zero
--- 6430,6445 ----
  
  File: gfortran.info,  Node: _gfortran_caf_error_stop_str,  Next: _gfortran_caf_fail_image,  Prev: _gfortran_caf_error_stop,  Up: Function ABI Documentation
  
! 7.2.26 ‘_gfortran_caf_error_stop_str’ -- Error termination with string
  ----------------------------------------------------------------------
  
  _Description_:
!      Invoked for an ‘ERROR STOP’ statement which has a string as
       argument.  The function should terminate the program with a
       nonzero-exit code.
  
  _Syntax_:
!      ‘void _gfortran_caf_error_stop (const char *string, size_t len)’
  
  _Arguments_:
       STRING      intent(in) the error message (not zero
*************** _Arguments_:
*** 6449,6463 ****
  
  File: gfortran.info,  Node: _gfortran_caf_fail_image,  Next: _gfortran_caf_atomic_define,  Prev: _gfortran_caf_error_stop_str,  Up: Function ABI Documentation
  
! 7.2.27 '_gfortran_caf_fail_image' -- Mark the image failed and end its execution
  --------------------------------------------------------------------------------
  
  _Description_:
!      Invoked for an 'FAIL IMAGE' statement.  The function should
       terminate the current image.
  
  _Syntax_:
!      'void _gfortran_caf_fail_image ()'
  
  _NOTES_
       This function follows TS18508.
--- 6449,6463 ----
  
  File: gfortran.info,  Node: _gfortran_caf_fail_image,  Next: _gfortran_caf_atomic_define,  Prev: _gfortran_caf_error_stop_str,  Up: Function ABI Documentation
  
! 7.2.27 ‘_gfortran_caf_fail_image’ -- Mark the image failed and end its execution
  --------------------------------------------------------------------------------
  
  _Description_:
!      Invoked for an ‘FAIL IMAGE’ statement.  The function should
       terminate the current image.
  
  _Syntax_:
!      ‘void _gfortran_caf_fail_image ()’
  
  _NOTES_
       This function follows TS18508.
*************** _NOTES_
*** 6465,6480 ****
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_define,  Next: _gfortran_caf_atomic_ref,  Prev: _gfortran_caf_fail_image,  Up: Function ABI Documentation
  
! 7.2.28 '_gfortran_caf_atomic_define' -- Atomic variable assignment
  ------------------------------------------------------------------
  
  _Description_:
       Assign atomically a value to an integer or logical variable.
  
  _Syntax_:
!      'void _gfortran_caf_atomic_define (caf_token_t token, size_t
       offset, int image_index, void *value, int *stat, int type, int
!      kind)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6465,6480 ----
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_define,  Next: _gfortran_caf_atomic_ref,  Prev: _gfortran_caf_fail_image,  Up: Function ABI Documentation
  
! 7.2.28 ‘_gfortran_caf_atomic_define’ -- Atomic variable assignment
  ------------------------------------------------------------------
  
  _Description_:
       Assign atomically a value to an integer or logical variable.
  
  _Syntax_:
!      ‘void _gfortran_caf_atomic_define (caf_token_t token, size_t
       offset, int image_index, void *value, int *stat, int type, int
!      kind)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 6489,6502 ****
                   reference
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        intent(in) The data type, i.e.  'BT_INTEGER' (1)
!                  or 'BT_LOGICAL' (2).
!      KIND        intent(in) The kind value (only 4; always 'int')
  
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_ref,  Next: _gfortran_caf_atomic_cas,  Prev: _gfortran_caf_atomic_define,  Up: Function ABI Documentation
  
! 7.2.29 '_gfortran_caf_atomic_ref' -- Atomic variable reference
  --------------------------------------------------------------
  
  _Description_:
--- 6489,6502 ----
                   reference
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        intent(in) The data type, i.e.  ‘BT_INTEGER’ (1)
!                  or ‘BT_LOGICAL’ (2).
!      KIND        intent(in) The kind value (only 4; always ‘int’)
  
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_ref,  Next: _gfortran_caf_atomic_cas,  Prev: _gfortran_caf_atomic_define,  Up: Function ABI Documentation
  
! 7.2.29 ‘_gfortran_caf_atomic_ref’ -- Atomic variable reference
  --------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6504,6511 ****
       variable.
  
  _Syntax_:
!      'void _gfortran_caf_atomic_ref (caf_token_t token, size_t offset,
!      int image_index, void *value, int *stat, int type, int kind)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6504,6511 ----
       variable.
  
  _Syntax_:
!      ‘void _gfortran_caf_atomic_ref (caf_token_t token, size_t offset,
!      int image_index, void *value, int *stat, int type, int kind)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 6520,6533 ****
                   referenced variable.
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        the data type, i.e.  'BT_INTEGER' (1) or
!                  'BT_LOGICAL' (2).
!      KIND        The kind value (only 4; always 'int')
  
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_cas,  Next: _gfortran_caf_atomic_op,  Prev: _gfortran_caf_atomic_ref,  Up: Function ABI Documentation
  
! 7.2.30 '_gfortran_caf_atomic_cas' -- Atomic compare and swap
  ------------------------------------------------------------
  
  _Description_:
--- 6520,6533 ----
                   referenced variable.
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        the data type, i.e.  ‘BT_INTEGER’ (1) or
!                  ‘BT_LOGICAL’ (2).
!      KIND        The kind value (only 4; always ‘int’)
  
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_cas,  Next: _gfortran_caf_atomic_op,  Prev: _gfortran_caf_atomic_ref,  Up: Function ABI Documentation
  
! 7.2.30 ‘_gfortran_caf_atomic_cas’ -- Atomic compare and swap
  ------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6536,6544 ****
       the latter has the value specified by the passed condition value.
  
  _Syntax_:
!      'void _gfortran_caf_atomic_cas (caf_token_t token, size_t offset,
       int image_index, void *old, void *compare, void *new_val, int
!      *stat, int type, int kind)'
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
--- 6536,6544 ----
       the latter has the value specified by the passed condition value.
  
  _Syntax_:
!      ‘void _gfortran_caf_atomic_cas (caf_token_t token, size_t offset,
       int image_index, void *old, void *compare, void *new_val, int
!      *stat, int type, int kind)’
  
  _Arguments_:
       TOKEN       intent(in) An opaque pointer identifying the
*************** _Arguments_:
*** 6554,6591 ****
       COMPARE     intent(in) The value used for comparision.
       NEW_VAL     intent(in) The new value for the atomic
                   variable, assigned to the atomic variable, if
!                  'compare' equals the value of the atomic
                   variable.
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        intent(in) the data type, i.e.  'BT_INTEGER' (1)
!                  or 'BT_LOGICAL' (2).
!      KIND        intent(in) The kind value (only 4; always 'int')
  
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_op,  Next: _gfortran_caf_co_broadcast,  Prev: _gfortran_caf_atomic_cas,  Up: Function ABI Documentation
  
! 7.2.31 '_gfortran_caf_atomic_op' -- Atomic operation
  ----------------------------------------------------
  
  _Description_:
       Apply an operation atomically to an atomic integer or logical
       variable.  After the operation, OLD contains the value just before
       the operation, which, respectively, adds (GFC_CAF_ATOMIC_ADD)
!      atomically the 'value' to the atomic integer variable or does a
       bitwise AND, OR or exclusive OR between the atomic variable and
       VALUE; the result is then stored in the atomic variable.
  
  _Syntax_:
!      'void _gfortran_caf_atomic_op (int op, caf_token_t token, size_t
       offset, int image_index, void *value, void *old, int *stat, int
!      type, int kind)'
  
  _Arguments_:
       OP          intent(in) the operation to be performed;
!                  possible values 'GFC_CAF_ATOMIC_ADD' (1),
!                  'GFC_CAF_ATOMIC_AND' (2), 'GFC_CAF_ATOMIC_OR'
!                  (3), 'GFC_CAF_ATOMIC_XOR' (4).
       TOKEN       intent(in) An opaque pointer identifying the
                   coarray.
       OFFSET      intent(in) By which amount of bytes the actual
--- 6554,6591 ----
       COMPARE     intent(in) The value used for comparision.
       NEW_VAL     intent(in) The new value for the atomic
                   variable, assigned to the atomic variable, if
!                  ‘compare’ equals the value of the atomic
                   variable.
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        intent(in) the data type, i.e.  ‘BT_INTEGER’ (1)
!                  or ‘BT_LOGICAL’ (2).
!      KIND        intent(in) The kind value (only 4; always ‘int’)
  
  
  File: gfortran.info,  Node: _gfortran_caf_atomic_op,  Next: _gfortran_caf_co_broadcast,  Prev: _gfortran_caf_atomic_cas,  Up: Function ABI Documentation
  
! 7.2.31 ‘_gfortran_caf_atomic_op’ -- Atomic operation
  ----------------------------------------------------
  
  _Description_:
       Apply an operation atomically to an atomic integer or logical
       variable.  After the operation, OLD contains the value just before
       the operation, which, respectively, adds (GFC_CAF_ATOMIC_ADD)
!      atomically the ‘value’ to the atomic integer variable or does a
       bitwise AND, OR or exclusive OR between the atomic variable and
       VALUE; the result is then stored in the atomic variable.
  
  _Syntax_:
!      ‘void _gfortran_caf_atomic_op (int op, caf_token_t token, size_t
       offset, int image_index, void *value, void *old, int *stat, int
!      type, int kind)’
  
  _Arguments_:
       OP          intent(in) the operation to be performed;
!                  possible values ‘GFC_CAF_ATOMIC_ADD’ (1),
!                  ‘GFC_CAF_ATOMIC_AND’ (2), ‘GFC_CAF_ATOMIC_OR’
!                  (3), ‘GFC_CAF_ATOMIC_XOR’ (4).
       TOKEN       intent(in) An opaque pointer identifying the
                   coarray.
       OFFSET      intent(in) By which amount of bytes the actual
*************** _Arguments_:
*** 6598,6615 ****
                   had just before the atomic operation.
       VAL         intent(in) The new value for the atomic
                   variable, assigned to the atomic variable, if
!                  'compare' equals the value of the atomic
                   variable.
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        intent(in) the data type, i.e.  'BT_INTEGER' (1)
!                  or 'BT_LOGICAL' (2)
!      KIND        intent(in) the kind value (only 4; always 'int')
  
  
  File: gfortran.info,  Node: _gfortran_caf_co_broadcast,  Next: _gfortran_caf_co_max,  Prev: _gfortran_caf_atomic_op,  Up: Function ABI Documentation
  
! 7.2.32 '_gfortran_caf_co_broadcast' -- Sending data to all images
  -----------------------------------------------------------------
  
  _Description_:
--- 6598,6615 ----
                   had just before the atomic operation.
       VAL         intent(in) The new value for the atomic
                   variable, assigned to the atomic variable, if
!                  ‘compare’ equals the value of the atomic
                   variable.
       STAT        intent(out) Stores the status STAT= and may be
                   NULL.
!      TYPE        intent(in) the data type, i.e.  ‘BT_INTEGER’ (1)
!                  or ‘BT_LOGICAL’ (2)
!      KIND        intent(in) the kind value (only 4; always ‘int’)
  
  
  File: gfortran.info,  Node: _gfortran_caf_co_broadcast,  Next: _gfortran_caf_co_max,  Prev: _gfortran_caf_atomic_op,  Up: Function ABI Documentation
  
! 7.2.32 ‘_gfortran_caf_co_broadcast’ -- Sending data to all images
  -----------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6617,6624 ****
       team.  Has to be called collectively.
  
  _Syntax_:
!      'void _gfortran_caf_co_broadcast (gfc_descriptor_t *a, int
!      source_image, int *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       A           intent(inout) An array descriptor with the data
--- 6617,6624 ----
       team.  Has to be called collectively.
  
  _Syntax_:
!      ‘void _gfortran_caf_co_broadcast (gfc_descriptor_t *a, int
!      source_image, int *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       A           intent(inout) An array descriptor with the data
*************** _Arguments_:
*** 6635,6641 ****
  
  File: gfortran.info,  Node: _gfortran_caf_co_max,  Next: _gfortran_caf_co_min,  Prev: _gfortran_caf_co_broadcast,  Up: Function ABI Documentation
  
! 7.2.33 '_gfortran_caf_co_max' -- Collective maximum reduction
  -------------------------------------------------------------
  
  _Description_:
--- 6635,6641 ----
  
  File: gfortran.info,  Node: _gfortran_caf_co_max,  Next: _gfortran_caf_co_min,  Prev: _gfortran_caf_co_broadcast,  Up: Function ABI Documentation
  
! 7.2.33 ‘_gfortran_caf_co_max’ -- Collective maximum reduction
  -------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6646,6653 ****
       and character strings.
  
  _Syntax_:
!      'void _gfortran_caf_co_max (gfc_descriptor_t *a, int result_image,
!      int *stat, char *errmsg, int a_len, size_t errmsg_len)'
  
  _Arguments_:
       A           intent(inout) An array descriptor for the data
--- 6646,6653 ----
       and character strings.
  
  _Syntax_:
!      ‘void _gfortran_caf_co_max (gfc_descriptor_t *a, int result_image,
!      int *stat, char *errmsg, int a_len, size_t errmsg_len)’
  
  _Arguments_:
       A           intent(inout) An array descriptor for the data
*************** _NOTES_
*** 6671,6677 ****
  
  File: gfortran.info,  Node: _gfortran_caf_co_min,  Next: _gfortran_caf_co_sum,  Prev: _gfortran_caf_co_max,  Up: Function ABI Documentation
  
! 7.2.34 '_gfortran_caf_co_min' -- Collective minimum reduction
  -------------------------------------------------------------
  
  _Description_:
--- 6671,6677 ----
  
  File: gfortran.info,  Node: _gfortran_caf_co_min,  Next: _gfortran_caf_co_sum,  Prev: _gfortran_caf_co_max,  Up: Function ABI Documentation
  
! 7.2.34 ‘_gfortran_caf_co_min’ -- Collective minimum reduction
  -------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6682,6689 ****
       and character strings.
  
  _Syntax_:
!      'void _gfortran_caf_co_min (gfc_descriptor_t *a, int result_image,
!      int *stat, char *errmsg, int a_len, size_t errmsg_len)'
  
  _Arguments_:
       A           intent(inout) An array descriptor for the data
--- 6682,6689 ----
       and character strings.
  
  _Syntax_:
!      ‘void _gfortran_caf_co_min (gfc_descriptor_t *a, int result_image,
!      int *stat, char *errmsg, int a_len, size_t errmsg_len)’
  
  _Arguments_:
       A           intent(inout) An array descriptor for the data
*************** _NOTES_
*** 6707,6713 ****
  
  File: gfortran.info,  Node: _gfortran_caf_co_sum,  Next: _gfortran_caf_co_reduce,  Prev: _gfortran_caf_co_min,  Up: Function ABI Documentation
  
! 7.2.35 '_gfortran_caf_co_sum' -- Collective summing reduction
  -------------------------------------------------------------
  
  _Description_:
--- 6707,6713 ----
  
  File: gfortran.info,  Node: _gfortran_caf_co_sum,  Next: _gfortran_caf_co_reduce,  Prev: _gfortran_caf_co_min,  Up: Function ABI Documentation
  
! 7.2.35 ‘_gfortran_caf_co_sum’ -- Collective summing reduction
  -------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6718,6725 ****
       values only.
  
  _Syntax_:
!      'void _gfortran_caf_co_sum (gfc_descriptor_t *a, int result_image,
!      int *stat, char *errmsg, size_t errmsg_len)'
  
  _Arguments_:
       A           intent(inout) An array descriptor with the data
--- 6718,6725 ----
       values only.
  
  _Syntax_:
!      ‘void _gfortran_caf_co_sum (gfc_descriptor_t *a, int result_image,
!      int *stat, char *errmsg, size_t errmsg_len)’
  
  _Arguments_:
       A           intent(inout) An array descriptor with the data
*************** _NOTES_
*** 6742,6748 ****
  
  File: gfortran.info,  Node: _gfortran_caf_co_reduce,  Prev: _gfortran_caf_co_sum,  Up: Function ABI Documentation
  
! 7.2.36 '_gfortran_caf_co_reduce' -- Generic collective reduction
  ----------------------------------------------------------------
  
  _Description_:
--- 6742,6748 ----
  
  File: gfortran.info,  Node: _gfortran_caf_co_reduce,  Prev: _gfortran_caf_co_sum,  Up: Function ABI Documentation
  
! 7.2.36 ‘_gfortran_caf_co_reduce’ -- Generic collective reduction
  ----------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 6753,6769 ****
       mathematically commutative and associative operation.
  
       The OPR_FLAGS denote the following; the values are bitwise ored.
!      'GFC_CAF_BYREF' (1) if the result should be returned by reference;
!      'GFC_CAF_HIDDENLEN' (2) whether the result and argument string
!      lengths shall be specified as hidden arguments; 'GFC_CAF_ARG_VALUE'
       (4) whether the arguments shall be passed by value,
!      'GFC_CAF_ARG_DESC' (8) whether the arguments shall be passed by
       descriptor.
  
  _Syntax_:
!      'void _gfortran_caf_co_reduce (gfc_descriptor_t *a, void * (*opr)
       (void *, void *), int opr_flags, int result_image, int *stat, char
!      *errmsg, int a_len, size_t errmsg_len)'
  
  _Arguments_:
       A           intent(inout) An array descriptor with the data
--- 6753,6769 ----
       mathematically commutative and associative operation.
  
       The OPR_FLAGS denote the following; the values are bitwise ored.
!      ‘GFC_CAF_BYREF’ (1) if the result should be returned by reference;
!      ‘GFC_CAF_HIDDENLEN’ (2) whether the result and argument string
!      lengths shall be specified as hidden arguments; ‘GFC_CAF_ARG_VALUE’
       (4) whether the arguments shall be passed by value,
!      ‘GFC_CAF_ARG_DESC’ (8) whether the arguments shall be passed by
       descriptor.
  
  _Syntax_:
!      ‘void _gfortran_caf_co_reduce (gfc_descriptor_t *a, void * (*opr)
       (void *, void *), int opr_flags, int result_image, int *stat, char
!      *errmsg, int a_len, size_t errmsg_len)’
  
  _Arguments_:
       A           intent(inout) An array descriptor with the data
*************** File: gfortran.info,  Node: Intrinsic Pr
*** 6804,7091 ****
  * Menu:
  
  * Introduction:         Introduction to Intrinsics
! * 'ABORT':         ABORT,     Abort the program
! * 'ABS':           ABS,       Absolute value
! * 'ACCESS':        ACCESS,    Checks file access modes
! * 'ACHAR':         ACHAR,     Character in ASCII collating sequence
! * 'ACOS':          ACOS,      Arccosine function
! * 'ACOSD':         ACOSD,     Arccosine function, degrees
! * 'ACOSH':         ACOSH,     Inverse hyperbolic cosine function
! * 'ADJUSTL':       ADJUSTL,   Left adjust a string
! * 'ADJUSTR':       ADJUSTR,   Right adjust a string
! * 'AIMAG':         AIMAG,     Imaginary part of complex number
! * 'AINT':          AINT,      Truncate to a whole number
! * 'ALARM':         ALARM,     Set an alarm clock
! * 'ALL':           ALL,       Determine if all values are true
! * 'ALLOCATED':     ALLOCATED, Status of allocatable entity
! * 'AND':           AND,       Bitwise logical AND
! * 'ANINT':         ANINT,     Nearest whole number
! * 'ANY':           ANY,       Determine if any values are true
! * 'ASIN':          ASIN,      Arcsine function
! * 'ASIND':         ASIND,     Arcsine function, degrees
! * 'ASINH':         ASINH,     Inverse hyperbolic sine function
! * 'ASSOCIATED':    ASSOCIATED, Status of a pointer or pointer/target pair
! * 'ATAN':          ATAN,      Arctangent function
! * 'ATAND':         ATAND,     Arctangent function, degrees
! * 'ATAN2':         ATAN2,     Arctangent function
! * 'ATAN2D':        ATAN2D,    Arctangent function, degrees
! * 'ATANH':         ATANH,     Inverse hyperbolic tangent function
! * 'ATOMIC_ADD':    ATOMIC_ADD, Atomic ADD operation
! * 'ATOMIC_AND':    ATOMIC_AND, Atomic bitwise AND operation
! * 'ATOMIC_CAS':    ATOMIC_CAS, Atomic compare and swap
! * 'ATOMIC_DEFINE': ATOMIC_DEFINE, Setting a variable atomically
! * 'ATOMIC_FETCH_ADD': ATOMIC_FETCH_ADD, Atomic ADD operation with prior fetch
! * 'ATOMIC_FETCH_AND': ATOMIC_FETCH_AND, Atomic bitwise AND operation with prior fetch
! * 'ATOMIC_FETCH_OR': ATOMIC_FETCH_OR, Atomic bitwise OR operation with prior fetch
! * 'ATOMIC_FETCH_XOR': ATOMIC_FETCH_XOR, Atomic bitwise XOR operation with prior fetch
! * 'ATOMIC_OR':     ATOMIC_OR, Atomic bitwise OR operation
! * 'ATOMIC_REF':    ATOMIC_REF, Obtaining the value of a variable atomically
! * 'ATOMIC_XOR':    ATOMIC_XOR, Atomic bitwise OR operation
! * 'BACKTRACE':     BACKTRACE, Show a backtrace
! * 'BESSEL_J0':     BESSEL_J0, Bessel function of the first kind of order 0
! * 'BESSEL_J1':     BESSEL_J1, Bessel function of the first kind of order 1
! * 'BESSEL_JN':     BESSEL_JN, Bessel function of the first kind
! * 'BESSEL_Y0':     BESSEL_Y0, Bessel function of the second kind of order 0
! * 'BESSEL_Y1':     BESSEL_Y1, Bessel function of the second kind of order 1
! * 'BESSEL_YN':     BESSEL_YN, Bessel function of the second kind
! * 'BGE':           BGE,       Bitwise greater than or equal to
! * 'BGT':           BGT,       Bitwise greater than
! * 'BIT_SIZE':      BIT_SIZE,  Bit size inquiry function
! * 'BLE':           BLE,       Bitwise less than or equal to
! * 'BLT':           BLT,       Bitwise less than
! * 'BTEST':         BTEST,     Bit test function
! * 'C_ASSOCIATED':  C_ASSOCIATED, Status of a C pointer
! * 'C_F_POINTER':   C_F_POINTER, Convert C into Fortran pointer
! * 'C_F_PROCPOINTER': C_F_PROCPOINTER, Convert C into Fortran procedure pointer
! * 'C_FUNLOC':      C_FUNLOC,  Obtain the C address of a procedure
! * 'C_LOC':         C_LOC,     Obtain the C address of an object
! * 'C_SIZEOF':      C_SIZEOF,  Size in bytes of an expression
! * 'CEILING':       CEILING,   Integer ceiling function
! * 'CHAR':          CHAR,      Integer-to-character conversion function
! * 'CHDIR':         CHDIR,     Change working directory
! * 'CHMOD':         CHMOD,     Change access permissions of files
! * 'CMPLX':         CMPLX,     Complex conversion function
! * 'CO_BROADCAST':  CO_BROADCAST, Copy a value to all images the current set of images
! * 'CO_MAX':        CO_MAX,    Maximal value on the current set of images
! * 'CO_MIN':        CO_MIN,    Minimal value on the current set of images
! * 'CO_REDUCE':     CO_REDUCE, Reduction of values on the current set of images
! * 'CO_SUM':        CO_SUM,    Sum of values on the current set of images
! * 'COMMAND_ARGUMENT_COUNT': COMMAND_ARGUMENT_COUNT, Get number of command line arguments
! * 'COMPILER_OPTIONS': COMPILER_OPTIONS, Options passed to the compiler
! * 'COMPILER_VERSION': COMPILER_VERSION, Compiler version string
! * 'COMPLEX':       COMPLEX,   Complex conversion function
! * 'CONJG':         CONJG,     Complex conjugate function
! * 'COS':           COS,       Cosine function
! * 'COSD':          COSD,      Cosine function, degrees
! * 'COSH':          COSH,      Hyperbolic cosine function
! * 'COTAN':         COTAN,     Cotangent function
! * 'COTAND':        COTAND,    Cotangent function, degrees
! * 'COUNT':         COUNT,     Count occurrences of TRUE in an array
! * 'CPU_TIME':      CPU_TIME,  CPU time subroutine
! * 'CSHIFT':        CSHIFT,    Circular shift elements of an array
! * 'CTIME':         CTIME,     Subroutine (or function) to convert a time into a string
! * 'DATE_AND_TIME': DATE_AND_TIME, Date and time subroutine
! * 'DBLE':          DBLE,      Double precision conversion function
! * 'DCMPLX':        DCMPLX,    Double complex conversion function
! * 'DIGITS':        DIGITS,    Significant digits function
! * 'DIM':           DIM,       Positive difference
! * 'DOT_PRODUCT':   DOT_PRODUCT, Dot product function
! * 'DPROD':         DPROD,     Double product function
! * 'DREAL':         DREAL,     Double real part function
! * 'DSHIFTL':       DSHIFTL,   Combined left shift
! * 'DSHIFTR':       DSHIFTR,   Combined right shift
! * 'DTIME':         DTIME,     Execution time subroutine (or function)
! * 'EOSHIFT':       EOSHIFT,   End-off shift elements of an array
! * 'EPSILON':       EPSILON,   Epsilon function
! * 'ERF':           ERF,       Error function
! * 'ERFC':          ERFC,      Complementary error function
! * 'ERFC_SCALED':   ERFC_SCALED, Exponentially-scaled complementary error function
! * 'ETIME':         ETIME,     Execution time subroutine (or function)
! * 'EVENT_QUERY': EVENT_QUERY, Query whether a coarray event has occurred
! * 'EXECUTE_COMMAND_LINE': EXECUTE_COMMAND_LINE, Execute a shell command
! * 'EXIT':          EXIT,      Exit the program with status.
! * 'EXP':           EXP,       Exponential function
! * 'EXPONENT':      EXPONENT,  Exponent function
! * 'EXTENDS_TYPE_OF': EXTENDS_TYPE_OF,  Query dynamic type for extension
! * 'FDATE':         FDATE,     Subroutine (or function) to get the current time as a string
! * 'FGET':          FGET,      Read a single character in stream mode from stdin
! * 'FGETC':         FGETC,     Read a single character in stream mode
! * 'FINDLOC':       FINDLOC,   Search an array for a value
! * 'FLOOR':         FLOOR,     Integer floor function
! * 'FLUSH':         FLUSH,     Flush I/O unit(s)
! * 'FNUM':          FNUM,      File number function
! * 'FPUT':          FPUT,      Write a single character in stream mode to stdout
! * 'FPUTC':         FPUTC,     Write a single character in stream mode
! * 'FRACTION':      FRACTION,  Fractional part of the model representation
! * 'FREE':          FREE,      Memory de-allocation subroutine
! * 'FSEEK':         FSEEK,     Low level file positioning subroutine
! * 'FSTAT':         FSTAT,     Get file status
! * 'FTELL':         FTELL,     Current stream position
! * 'GAMMA':         GAMMA,     Gamma function
! * 'GERROR':        GERROR,    Get last system error message
! * 'GETARG':        GETARG,    Get command line arguments
! * 'GET_COMMAND':   GET_COMMAND, Get the entire command line
! * 'GET_COMMAND_ARGUMENT': GET_COMMAND_ARGUMENT, Get command line arguments
! * 'GETCWD':        GETCWD,    Get current working directory
! * 'GETENV':        GETENV,    Get an environmental variable
! * 'GET_ENVIRONMENT_VARIABLE': GET_ENVIRONMENT_VARIABLE, Get an environmental variable
! * 'GETGID':        GETGID,    Group ID function
! * 'GETLOG':        GETLOG,    Get login name
! * 'GETPID':        GETPID,    Process ID function
! * 'GETUID':        GETUID,    User ID function
! * 'GMTIME':        GMTIME,    Convert time to GMT info
! * 'HOSTNM':        HOSTNM,    Get system host name
! * 'HUGE':          HUGE,      Largest number of a kind
! * 'HYPOT':         HYPOT,     Euclidean distance function
! * 'IACHAR':        IACHAR,    Code in ASCII collating sequence
! * 'IALL':          IALL,      Bitwise AND of array elements
! * 'IAND':          IAND,      Bitwise logical and
! * 'IANY':          IANY,      Bitwise OR of array elements
! * 'IARGC':         IARGC,     Get the number of command line arguments
! * 'IBCLR':         IBCLR,     Clear bit
! * 'IBITS':         IBITS,     Bit extraction
! * 'IBSET':         IBSET,     Set bit
! * 'ICHAR':         ICHAR,     Character-to-integer conversion function
! * 'IDATE':         IDATE,     Current local time (day/month/year)
! * 'IEOR':          IEOR,      Bitwise logical exclusive or
! * 'IERRNO':        IERRNO,    Function to get the last system error number
! * 'IMAGE_INDEX':   IMAGE_INDEX, Cosubscript to image index conversion
! * 'INDEX':         INDEX intrinsic, Position of a substring within a string
! * 'INT':           INT,       Convert to integer type
! * 'INT2':          INT2,      Convert to 16-bit integer type
! * 'INT8':          INT8,      Convert to 64-bit integer type
! * 'IOR':           IOR,       Bitwise logical or
! * 'IPARITY':       IPARITY,   Bitwise XOR of array elements
! * 'IRAND':         IRAND,     Integer pseudo-random number
! * 'IS_CONTIGUOUS':  IS_CONTIGUOUS, Test whether an array is contiguous
! * 'IS_IOSTAT_END':  IS_IOSTAT_END, Test for end-of-file value
! * 'IS_IOSTAT_EOR':  IS_IOSTAT_EOR, Test for end-of-record value
! * 'ISATTY':        ISATTY,    Whether a unit is a terminal device
! * 'ISHFT':         ISHFT,     Shift bits
! * 'ISHFTC':        ISHFTC,    Shift bits circularly
! * 'ISNAN':         ISNAN,     Tests for a NaN
! * 'ITIME':         ITIME,     Current local time (hour/minutes/seconds)
! * 'KILL':          KILL,      Send a signal to a process
! * 'KIND':          KIND,      Kind of an entity
! * 'LBOUND':        LBOUND,    Lower dimension bounds of an array
! * 'LCOBOUND':      LCOBOUND,  Lower codimension bounds of an array
! * 'LEADZ':         LEADZ,     Number of leading zero bits of an integer
! * 'LEN':           LEN,       Length of a character entity
! * 'LEN_TRIM':      LEN_TRIM,  Length of a character entity without trailing blank characters
! * 'LGE':           LGE,       Lexical greater than or equal
! * 'LGT':           LGT,       Lexical greater than
! * 'LINK':          LINK,      Create a hard link
! * 'LLE':           LLE,       Lexical less than or equal
! * 'LLT':           LLT,       Lexical less than
! * 'LNBLNK':        LNBLNK,    Index of the last non-blank character in a string
! * 'LOC':           LOC,       Returns the address of a variable
! * 'LOG':           LOG,       Logarithm function
! * 'LOG10':         LOG10,     Base 10 logarithm function
! * 'LOG_GAMMA':     LOG_GAMMA, Logarithm of the Gamma function
! * 'LOGICAL':       LOGICAL,   Convert to logical type
! * 'LSHIFT':        LSHIFT,    Left shift bits
! * 'LSTAT':         LSTAT,     Get file status
! * 'LTIME':         LTIME,     Convert time to local time info
! * 'MALLOC':        MALLOC,    Dynamic memory allocation function
! * 'MASKL':         MASKL,     Left justified mask
! * 'MASKR':         MASKR,     Right justified mask
! * 'MATMUL':        MATMUL,    matrix multiplication
! * 'MAX':           MAX,       Maximum value of an argument list
! * 'MAXEXPONENT':   MAXEXPONENT, Maximum exponent of a real kind
! * 'MAXLOC':        MAXLOC,    Location of the maximum value within an array
! * 'MAXVAL':        MAXVAL,    Maximum value of an array
! * 'MCLOCK':        MCLOCK,    Time function
! * 'MCLOCK8':       MCLOCK8,   Time function (64-bit)
! * 'MERGE':         MERGE,     Merge arrays
! * 'MERGE_BITS':    MERGE_BITS, Merge of bits under mask
! * 'MIN':           MIN,       Minimum value of an argument list
! * 'MINEXPONENT':   MINEXPONENT, Minimum exponent of a real kind
! * 'MINLOC':        MINLOC,    Location of the minimum value within an array
! * 'MINVAL':        MINVAL,    Minimum value of an array
! * 'MOD':           MOD,       Remainder function
! * 'MODULO':        MODULO,    Modulo function
! * 'MOVE_ALLOC':    MOVE_ALLOC, Move allocation from one object to another
! * 'MVBITS':        MVBITS,    Move bits from one integer to another
! * 'NEAREST':       NEAREST,   Nearest representable number
! * 'NEW_LINE':      NEW_LINE,  New line character
! * 'NINT':          NINT,      Nearest whole number
! * 'NORM2':         NORM2,     Euclidean vector norm
! * 'NOT':           NOT,       Logical negation
! * 'NULL':          NULL,      Function that returns an disassociated pointer
! * 'NUM_IMAGES':    NUM_IMAGES, Number of images
! * 'OR':            OR,        Bitwise logical OR
! * 'PACK':          PACK,      Pack an array into an array of rank one
! * 'PARITY':        PARITY,    Reduction with exclusive OR
! * 'PERROR':        PERROR,    Print system error message
! * 'POPCNT':        POPCNT,    Number of bits set
! * 'POPPAR':        POPPAR,    Parity of the number of bits set
! * 'PRECISION':     PRECISION, Decimal precision of a real kind
! * 'PRESENT':       PRESENT,   Determine whether an optional dummy argument is specified
! * 'PRODUCT':       PRODUCT,   Product of array elements
! * 'RADIX':         RADIX,     Base of a data model
! * 'RAN':           RAN,       Real pseudo-random number
! * 'RAND':          RAND,      Real pseudo-random number
! * 'RANDOM_INIT':   RANDOM_INIT, Initialize pseudo-random number generator
! * 'RANDOM_NUMBER': RANDOM_NUMBER, Pseudo-random number
! * 'RANDOM_SEED':   RANDOM_SEED, Initialize a pseudo-random number sequence
! * 'RANGE':         RANGE,     Decimal exponent range
! * 'RANK' :         RANK,      Rank of a data object
! * 'REAL':          REAL,      Convert to real type
! * 'RENAME':        RENAME,    Rename a file
! * 'REPEAT':        REPEAT,    Repeated string concatenation
! * 'RESHAPE':       RESHAPE,   Function to reshape an array
! * 'RRSPACING':     RRSPACING, Reciprocal of the relative spacing
! * 'RSHIFT':        RSHIFT,    Right shift bits
! * 'SAME_TYPE_AS':  SAME_TYPE_AS,  Query dynamic types for equality
! * 'SCALE':         SCALE,     Scale a real value
! * 'SCAN':          SCAN,      Scan a string for the presence of a set of characters
! * 'SECNDS':        SECNDS,    Time function
! * 'SECOND':        SECOND,    CPU time function
! * 'SELECTED_CHAR_KIND': SELECTED_CHAR_KIND,  Choose character kind
! * 'SELECTED_INT_KIND': SELECTED_INT_KIND,  Choose integer kind
! * 'SELECTED_REAL_KIND': SELECTED_REAL_KIND,  Choose real kind
! * 'SET_EXPONENT':  SET_EXPONENT, Set the exponent of the model
! * 'SHAPE':         SHAPE,     Determine the shape of an array
! * 'SHIFTA':        SHIFTA,    Right shift with fill
! * 'SHIFTL':        SHIFTL,    Left shift
! * 'SHIFTR':        SHIFTR,    Right shift
! * 'SIGN':          SIGN,      Sign copying function
! * 'SIGNAL':        SIGNAL,    Signal handling subroutine (or function)
! * 'SIN':           SIN,       Sine function
! * 'SIND':          SIND,      Sine function, degrees
! * 'SINH':          SINH,      Hyperbolic sine function
! * 'SIZE':          SIZE,      Function to determine the size of an array
! * 'SIZEOF':        SIZEOF,    Determine the size in bytes of an expression
! * 'SLEEP':         SLEEP,     Sleep for the specified number of seconds
! * 'SPACING':       SPACING,   Smallest distance between two numbers of a given type
! * 'SPREAD':        SPREAD,    Add a dimension to an array
! * 'SQRT':          SQRT,      Square-root function
! * 'SRAND':         SRAND,     Reinitialize the random number generator
! * 'STAT':          STAT,      Get file status
! * 'STORAGE_SIZE':  STORAGE_SIZE, Storage size in bits
! * 'SUM':           SUM,       Sum of array elements
! * 'SYMLNK':        SYMLNK,    Create a symbolic link
! * 'SYSTEM':        SYSTEM,    Execute a shell command
! * 'SYSTEM_CLOCK':  SYSTEM_CLOCK, Time function
! * 'TAN':           TAN,       Tangent function
! * 'TAND':          TAND,      Tangent function, degrees
! * 'TANH':          TANH,      Hyperbolic tangent function
! * 'THIS_IMAGE':    THIS_IMAGE, Cosubscript index of this image
! * 'TIME':          TIME,      Time function
! * 'TIME8':         TIME8,     Time function (64-bit)
! * 'TINY':          TINY,      Smallest positive number of a real kind
! * 'TRAILZ':        TRAILZ,    Number of trailing zero bits of an integer
! * 'TRANSFER':      TRANSFER,  Transfer bit patterns
! * 'TRANSPOSE':     TRANSPOSE, Transpose an array of rank two
! * 'TRIM':          TRIM,      Remove trailing blank characters of a string
! * 'TTYNAM':        TTYNAM,    Get the name of a terminal device
! * 'UBOUND':        UBOUND,    Upper dimension bounds of an array
! * 'UCOBOUND':      UCOBOUND,  Upper codimension bounds of an array
! * 'UMASK':         UMASK,     Set the file creation mask
! * 'UNLINK':        UNLINK,    Remove a file from the file system
! * 'UNPACK':        UNPACK,    Unpack an array of rank one into an array
! * 'VERIFY':        VERIFY,    Scan a string for the absence of a set of characters
! * 'XOR':           XOR,       Bitwise logical exclusive or
  
  
  File: gfortran.info,  Node: Introduction to Intrinsics,  Next: ABORT,  Up: Intrinsic Procedures
--- 6804,7091 ----
  * Menu:
  
  * Introduction:         Introduction to Intrinsics
! * ‘ABORT’:         ABORT,     Abort the program
! * ‘ABS’:           ABS,       Absolute value
! * ‘ACCESS’:        ACCESS,    Checks file access modes
! * ‘ACHAR’:         ACHAR,     Character in ASCII collating sequence
! * ‘ACOS’:          ACOS,      Arccosine function
! * ‘ACOSD’:         ACOSD,     Arccosine function, degrees
! * ‘ACOSH’:         ACOSH,     Inverse hyperbolic cosine function
! * ‘ADJUSTL’:       ADJUSTL,   Left adjust a string
! * ‘ADJUSTR’:       ADJUSTR,   Right adjust a string
! * ‘AIMAG’:         AIMAG,     Imaginary part of complex number
! * ‘AINT’:          AINT,      Truncate to a whole number
! * ‘ALARM’:         ALARM,     Set an alarm clock
! * ‘ALL’:           ALL,       Determine if all values are true
! * ‘ALLOCATED’:     ALLOCATED, Status of allocatable entity
! * ‘AND’:           AND,       Bitwise logical AND
! * ‘ANINT’:         ANINT,     Nearest whole number
! * ‘ANY’:           ANY,       Determine if any values are true
! * ‘ASIN’:          ASIN,      Arcsine function
! * ‘ASIND’:         ASIND,     Arcsine function, degrees
! * ‘ASINH’:         ASINH,     Inverse hyperbolic sine function
! * ‘ASSOCIATED’:    ASSOCIATED, Status of a pointer or pointer/target pair
! * ‘ATAN’:          ATAN,      Arctangent function
! * ‘ATAND’:         ATAND,     Arctangent function, degrees
! * ‘ATAN2’:         ATAN2,     Arctangent function
! * ‘ATAN2D’:        ATAN2D,    Arctangent function, degrees
! * ‘ATANH’:         ATANH,     Inverse hyperbolic tangent function
! * ‘ATOMIC_ADD’:    ATOMIC_ADD, Atomic ADD operation
! * ‘ATOMIC_AND’:    ATOMIC_AND, Atomic bitwise AND operation
! * ‘ATOMIC_CAS’:    ATOMIC_CAS, Atomic compare and swap
! * ‘ATOMIC_DEFINE’: ATOMIC_DEFINE, Setting a variable atomically
! * ‘ATOMIC_FETCH_ADD’: ATOMIC_FETCH_ADD, Atomic ADD operation with prior fetch
! * ‘ATOMIC_FETCH_AND’: ATOMIC_FETCH_AND, Atomic bitwise AND operation with prior fetch
! * ‘ATOMIC_FETCH_OR’: ATOMIC_FETCH_OR, Atomic bitwise OR operation with prior fetch
! * ‘ATOMIC_FETCH_XOR’: ATOMIC_FETCH_XOR, Atomic bitwise XOR operation with prior fetch
! * ‘ATOMIC_OR’:     ATOMIC_OR, Atomic bitwise OR operation
! * ‘ATOMIC_REF’:    ATOMIC_REF, Obtaining the value of a variable atomically
! * ‘ATOMIC_XOR’:    ATOMIC_XOR, Atomic bitwise OR operation
! * ‘BACKTRACE’:     BACKTRACE, Show a backtrace
! * ‘BESSEL_J0’:     BESSEL_J0, Bessel function of the first kind of order 0
! * ‘BESSEL_J1’:     BESSEL_J1, Bessel function of the first kind of order 1
! * ‘BESSEL_JN’:     BESSEL_JN, Bessel function of the first kind
! * ‘BESSEL_Y0’:     BESSEL_Y0, Bessel function of the second kind of order 0
! * ‘BESSEL_Y1’:     BESSEL_Y1, Bessel function of the second kind of order 1
! * ‘BESSEL_YN’:     BESSEL_YN, Bessel function of the second kind
! * ‘BGE’:           BGE,       Bitwise greater than or equal to
! * ‘BGT’:           BGT,       Bitwise greater than
! * ‘BIT_SIZE’:      BIT_SIZE,  Bit size inquiry function
! * ‘BLE’:           BLE,       Bitwise less than or equal to
! * ‘BLT’:           BLT,       Bitwise less than
! * ‘BTEST’:         BTEST,     Bit test function
! * ‘C_ASSOCIATED’:  C_ASSOCIATED, Status of a C pointer
! * ‘C_F_POINTER’:   C_F_POINTER, Convert C into Fortran pointer
! * ‘C_F_PROCPOINTER’: C_F_PROCPOINTER, Convert C into Fortran procedure pointer
! * ‘C_FUNLOC’:      C_FUNLOC,  Obtain the C address of a procedure
! * ‘C_LOC’:         C_LOC,     Obtain the C address of an object
! * ‘C_SIZEOF’:      C_SIZEOF,  Size in bytes of an expression
! * ‘CEILING’:       CEILING,   Integer ceiling function
! * ‘CHAR’:          CHAR,      Integer-to-character conversion function
! * ‘CHDIR’:         CHDIR,     Change working directory
! * ‘CHMOD’:         CHMOD,     Change access permissions of files
! * ‘CMPLX’:         CMPLX,     Complex conversion function
! * ‘CO_BROADCAST’:  CO_BROADCAST, Copy a value to all images the current set of images
! * ‘CO_MAX’:        CO_MAX,    Maximal value on the current set of images
! * ‘CO_MIN’:        CO_MIN,    Minimal value on the current set of images
! * ‘CO_REDUCE’:     CO_REDUCE, Reduction of values on the current set of images
! * ‘CO_SUM’:        CO_SUM,    Sum of values on the current set of images
! * ‘COMMAND_ARGUMENT_COUNT’: COMMAND_ARGUMENT_COUNT, Get number of command line arguments
! * ‘COMPILER_OPTIONS’: COMPILER_OPTIONS, Options passed to the compiler
! * ‘COMPILER_VERSION’: COMPILER_VERSION, Compiler version string
! * ‘COMPLEX’:       COMPLEX,   Complex conversion function
! * ‘CONJG’:         CONJG,     Complex conjugate function
! * ‘COS’:           COS,       Cosine function
! * ‘COSD’:          COSD,      Cosine function, degrees
! * ‘COSH’:          COSH,      Hyperbolic cosine function
! * ‘COTAN’:         COTAN,     Cotangent function
! * ‘COTAND’:        COTAND,    Cotangent function, degrees
! * ‘COUNT’:         COUNT,     Count occurrences of TRUE in an array
! * ‘CPU_TIME’:      CPU_TIME,  CPU time subroutine
! * ‘CSHIFT’:        CSHIFT,    Circular shift elements of an array
! * ‘CTIME’:         CTIME,     Subroutine (or function) to convert a time into a string
! * ‘DATE_AND_TIME’: DATE_AND_TIME, Date and time subroutine
! * ‘DBLE’:          DBLE,      Double precision conversion function
! * ‘DCMPLX’:        DCMPLX,    Double complex conversion function
! * ‘DIGITS’:        DIGITS,    Significant digits function
! * ‘DIM’:           DIM,       Positive difference
! * ‘DOT_PRODUCT’:   DOT_PRODUCT, Dot product function
! * ‘DPROD’:         DPROD,     Double product function
! * ‘DREAL’:         DREAL,     Double real part function
! * ‘DSHIFTL’:       DSHIFTL,   Combined left shift
! * ‘DSHIFTR’:       DSHIFTR,   Combined right shift
! * ‘DTIME’:         DTIME,     Execution time subroutine (or function)
! * ‘EOSHIFT’:       EOSHIFT,   End-off shift elements of an array
! * ‘EPSILON’:       EPSILON,   Epsilon function
! * ‘ERF’:           ERF,       Error function
! * ‘ERFC’:          ERFC,      Complementary error function
! * ‘ERFC_SCALED’:   ERFC_SCALED, Exponentially-scaled complementary error function
! * ‘ETIME’:         ETIME,     Execution time subroutine (or function)
! * ‘EVENT_QUERY’: EVENT_QUERY, Query whether a coarray event has occurred
! * ‘EXECUTE_COMMAND_LINE’: EXECUTE_COMMAND_LINE, Execute a shell command
! * ‘EXIT’:          EXIT,      Exit the program with status.
! * ‘EXP’:           EXP,       Exponential function
! * ‘EXPONENT’:      EXPONENT,  Exponent function
! * ‘EXTENDS_TYPE_OF’: EXTENDS_TYPE_OF,  Query dynamic type for extension
! * ‘FDATE’:         FDATE,     Subroutine (or function) to get the current time as a string
! * ‘FGET’:          FGET,      Read a single character in stream mode from stdin
! * ‘FGETC’:         FGETC,     Read a single character in stream mode
! * ‘FINDLOC’:       FINDLOC,   Search an array for a value
! * ‘FLOOR’:         FLOOR,     Integer floor function
! * ‘FLUSH’:         FLUSH,     Flush I/O unit(s)
! * ‘FNUM’:          FNUM,      File number function
! * ‘FPUT’:          FPUT,      Write a single character in stream mode to stdout
! * ‘FPUTC’:         FPUTC,     Write a single character in stream mode
! * ‘FRACTION’:      FRACTION,  Fractional part of the model representation
! * ‘FREE’:          FREE,      Memory de-allocation subroutine
! * ‘FSEEK’:         FSEEK,     Low level file positioning subroutine
! * ‘FSTAT’:         FSTAT,     Get file status
! * ‘FTELL’:         FTELL,     Current stream position
! * ‘GAMMA’:         GAMMA,     Gamma function
! * ‘GERROR’:        GERROR,    Get last system error message
! * ‘GETARG’:        GETARG,    Get command line arguments
! * ‘GET_COMMAND’:   GET_COMMAND, Get the entire command line
! * ‘GET_COMMAND_ARGUMENT’: GET_COMMAND_ARGUMENT, Get command line arguments
! * ‘GETCWD’:        GETCWD,    Get current working directory
! * ‘GETENV’:        GETENV,    Get an environmental variable
! * ‘GET_ENVIRONMENT_VARIABLE’: GET_ENVIRONMENT_VARIABLE, Get an environmental variable
! * ‘GETGID’:        GETGID,    Group ID function
! * ‘GETLOG’:        GETLOG,    Get login name
! * ‘GETPID’:        GETPID,    Process ID function
! * ‘GETUID’:        GETUID,    User ID function
! * ‘GMTIME’:        GMTIME,    Convert time to GMT info
! * ‘HOSTNM’:        HOSTNM,    Get system host name
! * ‘HUGE’:          HUGE,      Largest number of a kind
! * ‘HYPOT’:         HYPOT,     Euclidean distance function
! * ‘IACHAR’:        IACHAR,    Code in ASCII collating sequence
! * ‘IALL’:          IALL,      Bitwise AND of array elements
! * ‘IAND’:          IAND,      Bitwise logical and
! * ‘IANY’:          IANY,      Bitwise OR of array elements
! * ‘IARGC’:         IARGC,     Get the number of command line arguments
! * ‘IBCLR’:         IBCLR,     Clear bit
! * ‘IBITS’:         IBITS,     Bit extraction
! * ‘IBSET’:         IBSET,     Set bit
! * ‘ICHAR’:         ICHAR,     Character-to-integer conversion function
! * ‘IDATE’:         IDATE,     Current local time (day/month/year)
! * ‘IEOR’:          IEOR,      Bitwise logical exclusive or
! * ‘IERRNO’:        IERRNO,    Function to get the last system error number
! * ‘IMAGE_INDEX’:   IMAGE_INDEX, Cosubscript to image index conversion
! * ‘INDEX’:         INDEX intrinsic, Position of a substring within a string
! * ‘INT’:           INT,       Convert to integer type
! * ‘INT2’:          INT2,      Convert to 16-bit integer type
! * ‘INT8’:          INT8,      Convert to 64-bit integer type
! * ‘IOR’:           IOR,       Bitwise logical or
! * ‘IPARITY’:       IPARITY,   Bitwise XOR of array elements
! * ‘IRAND’:         IRAND,     Integer pseudo-random number
! * ‘IS_CONTIGUOUS’:  IS_CONTIGUOUS, Test whether an array is contiguous
! * ‘IS_IOSTAT_END’:  IS_IOSTAT_END, Test for end-of-file value
! * ‘IS_IOSTAT_EOR’:  IS_IOSTAT_EOR, Test for end-of-record value
! * ‘ISATTY’:        ISATTY,    Whether a unit is a terminal device
! * ‘ISHFT’:         ISHFT,     Shift bits
! * ‘ISHFTC’:        ISHFTC,    Shift bits circularly
! * ‘ISNAN’:         ISNAN,     Tests for a NaN
! * ‘ITIME’:         ITIME,     Current local time (hour/minutes/seconds)
! * ‘KILL’:          KILL,      Send a signal to a process
! * ‘KIND’:          KIND,      Kind of an entity
! * ‘LBOUND’:        LBOUND,    Lower dimension bounds of an array
! * ‘LCOBOUND’:      LCOBOUND,  Lower codimension bounds of an array
! * ‘LEADZ’:         LEADZ,     Number of leading zero bits of an integer
! * ‘LEN’:           LEN,       Length of a character entity
! * ‘LEN_TRIM’:      LEN_TRIM,  Length of a character entity without trailing blank characters
! * ‘LGE’:           LGE,       Lexical greater than or equal
! * ‘LGT’:           LGT,       Lexical greater than
! * ‘LINK’:          LINK,      Create a hard link
! * ‘LLE’:           LLE,       Lexical less than or equal
! * ‘LLT’:           LLT,       Lexical less than
! * ‘LNBLNK’:        LNBLNK,    Index of the last non-blank character in a string
! * ‘LOC’:           LOC,       Returns the address of a variable
! * ‘LOG’:           LOG,       Logarithm function
! * ‘LOG10’:         LOG10,     Base 10 logarithm function
! * ‘LOG_GAMMA’:     LOG_GAMMA, Logarithm of the Gamma function
! * ‘LOGICAL’:       LOGICAL,   Convert to logical type
! * ‘LSHIFT’:        LSHIFT,    Left shift bits
! * ‘LSTAT’:         LSTAT,     Get file status
! * ‘LTIME’:         LTIME,     Convert time to local time info
! * ‘MALLOC’:        MALLOC,    Dynamic memory allocation function
! * ‘MASKL’:         MASKL,     Left justified mask
! * ‘MASKR’:         MASKR,     Right justified mask
! * ‘MATMUL’:        MATMUL,    matrix multiplication
! * ‘MAX’:           MAX,       Maximum value of an argument list
! * ‘MAXEXPONENT’:   MAXEXPONENT, Maximum exponent of a real kind
! * ‘MAXLOC’:        MAXLOC,    Location of the maximum value within an array
! * ‘MAXVAL’:        MAXVAL,    Maximum value of an array
! * ‘MCLOCK’:        MCLOCK,    Time function
! * ‘MCLOCK8’:       MCLOCK8,   Time function (64-bit)
! * ‘MERGE’:         MERGE,     Merge arrays
! * ‘MERGE_BITS’:    MERGE_BITS, Merge of bits under mask
! * ‘MIN’:           MIN,       Minimum value of an argument list
! * ‘MINEXPONENT’:   MINEXPONENT, Minimum exponent of a real kind
! * ‘MINLOC’:        MINLOC,    Location of the minimum value within an array
! * ‘MINVAL’:        MINVAL,    Minimum value of an array
! * ‘MOD’:           MOD,       Remainder function
! * ‘MODULO’:        MODULO,    Modulo function
! * ‘MOVE_ALLOC’:    MOVE_ALLOC, Move allocation from one object to another
! * ‘MVBITS’:        MVBITS,    Move bits from one integer to another
! * ‘NEAREST’:       NEAREST,   Nearest representable number
! * ‘NEW_LINE’:      NEW_LINE,  New line character
! * ‘NINT’:          NINT,      Nearest whole number
! * ‘NORM2’:         NORM2,     Euclidean vector norm
! * ‘NOT’:           NOT,       Logical negation
! * ‘NULL’:          NULL,      Function that returns an disassociated pointer
! * ‘NUM_IMAGES’:    NUM_IMAGES, Number of images
! * ‘OR’:            OR,        Bitwise logical OR
! * ‘PACK’:          PACK,      Pack an array into an array of rank one
! * ‘PARITY’:        PARITY,    Reduction with exclusive OR
! * ‘PERROR’:        PERROR,    Print system error message
! * ‘POPCNT’:        POPCNT,    Number of bits set
! * ‘POPPAR’:        POPPAR,    Parity of the number of bits set
! * ‘PRECISION’:     PRECISION, Decimal precision of a real kind
! * ‘PRESENT’:       PRESENT,   Determine whether an optional dummy argument is specified
! * ‘PRODUCT’:       PRODUCT,   Product of array elements
! * ‘RADIX’:         RADIX,     Base of a data model
! * ‘RAN’:           RAN,       Real pseudo-random number
! * ‘RAND’:          RAND,      Real pseudo-random number
! * ‘RANDOM_INIT’:   RANDOM_INIT, Initialize pseudo-random number generator
! * ‘RANDOM_NUMBER’: RANDOM_NUMBER, Pseudo-random number
! * ‘RANDOM_SEED’:   RANDOM_SEED, Initialize a pseudo-random number sequence
! * ‘RANGE’:         RANGE,     Decimal exponent range
! * ‘RANK’ :         RANK,      Rank of a data object
! * ‘REAL’:          REAL,      Convert to real type
! * ‘RENAME’:        RENAME,    Rename a file
! * ‘REPEAT’:        REPEAT,    Repeated string concatenation
! * ‘RESHAPE’:       RESHAPE,   Function to reshape an array
! * ‘RRSPACING’:     RRSPACING, Reciprocal of the relative spacing
! * ‘RSHIFT’:        RSHIFT,    Right shift bits
! * ‘SAME_TYPE_AS’:  SAME_TYPE_AS,  Query dynamic types for equality
! * ‘SCALE’:         SCALE,     Scale a real value
! * ‘SCAN’:          SCAN,      Scan a string for the presence of a set of characters
! * ‘SECNDS’:        SECNDS,    Time function
! * ‘SECOND’:        SECOND,    CPU time function
! * ‘SELECTED_CHAR_KIND’: SELECTED_CHAR_KIND,  Choose character kind
! * ‘SELECTED_INT_KIND’: SELECTED_INT_KIND,  Choose integer kind
! * ‘SELECTED_REAL_KIND’: SELECTED_REAL_KIND,  Choose real kind
! * ‘SET_EXPONENT’:  SET_EXPONENT, Set the exponent of the model
! * ‘SHAPE’:         SHAPE,     Determine the shape of an array
! * ‘SHIFTA’:        SHIFTA,    Right shift with fill
! * ‘SHIFTL’:        SHIFTL,    Left shift
! * ‘SHIFTR’:        SHIFTR,    Right shift
! * ‘SIGN’:          SIGN,      Sign copying function
! * ‘SIGNAL’:        SIGNAL,    Signal handling subroutine (or function)
! * ‘SIN’:           SIN,       Sine function
! * ‘SIND’:          SIND,      Sine function, degrees
! * ‘SINH’:          SINH,      Hyperbolic sine function
! * ‘SIZE’:          SIZE,      Function to determine the size of an array
! * ‘SIZEOF’:        SIZEOF,    Determine the size in bytes of an expression
! * ‘SLEEP’:         SLEEP,     Sleep for the specified number of seconds
! * ‘SPACING’:       SPACING,   Smallest distance between two numbers of a given type
! * ‘SPREAD’:        SPREAD,    Add a dimension to an array
! * ‘SQRT’:          SQRT,      Square-root function
! * ‘SRAND’:         SRAND,     Reinitialize the random number generator
! * ‘STAT’:          STAT,      Get file status
! * ‘STORAGE_SIZE’:  STORAGE_SIZE, Storage size in bits
! * ‘SUM’:           SUM,       Sum of array elements
! * ‘SYMLNK’:        SYMLNK,    Create a symbolic link
! * ‘SYSTEM’:        SYSTEM,    Execute a shell command
! * ‘SYSTEM_CLOCK’:  SYSTEM_CLOCK, Time function
! * ‘TAN’:           TAN,       Tangent function
! * ‘TAND’:          TAND,      Tangent function, degrees
! * ‘TANH’:          TANH,      Hyperbolic tangent function
! * ‘THIS_IMAGE’:    THIS_IMAGE, Cosubscript index of this image
! * ‘TIME’:          TIME,      Time function
! * ‘TIME8’:         TIME8,     Time function (64-bit)
! * ‘TINY’:          TINY,      Smallest positive number of a real kind
! * ‘TRAILZ’:        TRAILZ,    Number of trailing zero bits of an integer
! * ‘TRANSFER’:      TRANSFER,  Transfer bit patterns
! * ‘TRANSPOSE’:     TRANSPOSE, Transpose an array of rank two
! * ‘TRIM’:          TRIM,      Remove trailing blank characters of a string
! * ‘TTYNAM’:        TTYNAM,    Get the name of a terminal device
! * ‘UBOUND’:        UBOUND,    Upper dimension bounds of an array
! * ‘UCOBOUND’:      UCOBOUND,  Upper codimension bounds of an array
! * ‘UMASK’:         UMASK,     Set the file creation mask
! * ‘UNLINK’:        UNLINK,    Remove a file from the file system
! * ‘UNPACK’:        UNPACK,    Unpack an array of rank one into an array
! * ‘VERIFY’:        VERIFY,    Scan a string for the absence of a set of characters
! * ‘XOR’:           XOR,       Bitwise logical exclusive or
  
  
  File: gfortran.info,  Node: Introduction to Intrinsics,  Next: ABORT,  Up: Intrinsic Procedures
*************** intrinsic procedures for backwards compa
*** 7099,7128 ****
  between a description here and a description in the Fortran standards is
  unintentional, and the standard(s) should be considered authoritative.
  
!    The enumeration of the 'KIND' type parameter is processor defined in
  the Fortran 95 standard.  GNU Fortran defines the default integer type
! and default real type by 'INTEGER(KIND=4)' and 'REAL(KIND=4)',
  respectively.  The standard mandates that both data types shall have
  another kind, which have more precision.  On typical target
! architectures supported by 'gfortran', this kind type parameter is
! 'KIND=8'.  Hence, 'REAL(KIND=8)' and 'DOUBLE PRECISION' are equivalent.
  In the description of generic intrinsic procedures, the kind type
! parameter will be specified by 'KIND=*', and in the description of
  specific names for an intrinsic procedure the kind type parameter will
! be explicitly given (e.g., 'REAL(KIND=4)' or 'REAL(KIND=8)').  Finally,
! for brevity the optional 'KIND=' syntax will be omitted.
  
     Many of the intrinsic procedures take one or more optional arguments.
  This document follows the convention used in the Fortran 95 standard,
  and denotes such arguments by square brackets.
  
!    GNU Fortran offers the '-std=' command-line option, which can be used
  to restrict the set of intrinsic procedures to a given standard.  By
! default, 'gfortran' sets the '-std=gnu' option, and so all intrinsic
  procedures described here are accepted.  There is one caveat.  For a
! select group of intrinsic procedures, 'g77' implemented both a function
! and a subroutine.  Both classes have been implemented in 'gfortran' for
! backwards compatibility with 'g77'.  It is noted here that these
  functions and subroutines cannot be intermixed in a given subprogram.
  In the descriptions that follow, the applicable standard for each
  intrinsic procedure is noted.
--- 7099,7128 ----
  between a description here and a description in the Fortran standards is
  unintentional, and the standard(s) should be considered authoritative.
  
!    The enumeration of the ‘KIND’ type parameter is processor defined in
  the Fortran 95 standard.  GNU Fortran defines the default integer type
! and default real type by ‘INTEGER(KIND=4)’ and ‘REAL(KIND=4)’,
  respectively.  The standard mandates that both data types shall have
  another kind, which have more precision.  On typical target
! architectures supported by ‘gfortran’, this kind type parameter is
! ‘KIND=8’.  Hence, ‘REAL(KIND=8)’ and ‘DOUBLE PRECISION’ are equivalent.
  In the description of generic intrinsic procedures, the kind type
! parameter will be specified by ‘KIND=*’, and in the description of
  specific names for an intrinsic procedure the kind type parameter will
! be explicitly given (e.g., ‘REAL(KIND=4)’ or ‘REAL(KIND=8)’).  Finally,
! for brevity the optional ‘KIND=’ syntax will be omitted.
  
     Many of the intrinsic procedures take one or more optional arguments.
  This document follows the convention used in the Fortran 95 standard,
  and denotes such arguments by square brackets.
  
!    GNU Fortran offers the ‘-std=’ command-line option, which can be used
  to restrict the set of intrinsic procedures to a given standard.  By
! default, ‘gfortran’ sets the ‘-std=gnu’ option, and so all intrinsic
  procedures described here are accepted.  There is one caveat.  For a
! select group of intrinsic procedures, ‘g77’ implemented both a function
! and a subroutine.  Both classes have been implemented in ‘gfortran’ for
! backwards compatibility with ‘g77’.  It is noted here that these
  functions and subroutines cannot be intermixed in a given subprogram.
  In the descriptions that follow, the applicable standard for each
  intrinsic procedure is noted.
*************** intrinsic procedure is noted.
*** 7130,7142 ****
  
  File: gfortran.info,  Node: ABORT,  Next: ABS,  Prev: Introduction to Intrinsics,  Up: Intrinsic Procedures
  
! 8.2 'ABORT' -- Abort the program
  ================================
  
  _Description_:
!      'ABORT' causes immediate termination of the program.  On operating
!      systems that support a core dump, 'ABORT' will produce a core dump.
!      It will also print a backtrace, unless '-fno-backtrace' is given.
  
  _Standard_:
       GNU extension
--- 7130,7142 ----
  
  File: gfortran.info,  Node: ABORT,  Next: ABS,  Prev: Introduction to Intrinsics,  Up: Intrinsic Procedures
  
! 8.2 ‘ABORT’ -- Abort the program
  ================================
  
  _Description_:
!      ‘ABORT’ causes immediate termination of the program.  On operating
!      systems that support a core dump, ‘ABORT’ will produce a core dump.
!      It will also print a backtrace, unless ‘-fno-backtrace’ is given.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 7145,7151 ****
       Subroutine
  
  _Syntax_:
!      'CALL ABORT'
  
  _Return value_:
       Does not return.
--- 7145,7151 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL ABORT’
  
  _Return value_:
       Does not return.
*************** _See also_:
*** 7164,7174 ****
  
  File: gfortran.info,  Node: ABS,  Next: ACCESS,  Prev: ABORT,  Up: Intrinsic Procedures
  
! 8.3 'ABS' -- Absolute value
  ===========================
  
  _Description_:
!      'ABS(A)' computes the absolute value of 'A'.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
--- 7164,7174 ----
  
  File: gfortran.info,  Node: ABS,  Next: ACCESS,  Prev: ABORT,  Up: Intrinsic Procedures
  
! 8.3 ‘ABS’ -- Absolute value
  ===========================
  
  _Description_:
!      ‘ABS(A)’ computes the absolute value of ‘A’.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
*************** _Class_:
*** 7177,7191 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ABS(A)'
  
  _Arguments_:
!      A           The type of the argument shall be an 'INTEGER',
!                  'REAL', or 'COMPLEX'.
  
  _Return value_:
       The return value is of the same type and kind as the argument
!      except the return value is 'REAL' for a 'COMPLEX' argument.
  
  _Example_:
            program test_abs
--- 7177,7191 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ABS(A)’
  
  _Arguments_:
!      A           The type of the argument shall be an ‘INTEGER’,
!                  ‘REAL’, or ‘COMPLEX’.
  
  _Return value_:
       The return value is of the same type and kind as the argument
!      except the return value is ‘REAL’ for a ‘COMPLEX’ argument.
  
  _Example_:
            program test_abs
*************** _Example_:
*** 7200,7226 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ABS(A)'       'REAL(4) A'       'REAL(4)'      Fortran 77 and later
!      'CABS(A)'      'COMPLEX(4) A'    'REAL(4)'      Fortran 77 and later
!      'DABS(A)'      'REAL(8) A'       'REAL(8)'      Fortran 77 and later
!      'IABS(A)'      'INTEGER(4) A'    'INTEGER(4)'   Fortran 77 and later
!      'BABS(A)'      'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIABS(A)'     'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIABS(A)'     'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIABS(A)'     'INTEGER(8) A'    'INTEGER(8)'   GNU extension
!      'ZABS(A)'      'COMPLEX(8) A'    'REAL(8)'      GNU extension
!      'CDABS(A)'     'COMPLEX(8) A'    'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: ACCESS,  Next: ACHAR,  Prev: ABS,  Up: Intrinsic Procedures
  
! 8.4 'ACCESS' -- Checks file access modes
  ========================================
  
  _Description_:
!      'ACCESS(NAME, MODE)' checks whether the file NAME exists, is
       readable, writable or executable.  Except for the executable check,
!      'ACCESS' can be replaced by Fortran 95's 'INQUIRE'.
  
  _Standard_:
       GNU extension
--- 7200,7226 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ABS(A)’       ‘REAL(4) A’       ‘REAL(4)’      Fortran 77 and later
!      ‘CABS(A)’      ‘COMPLEX(4) A’    ‘REAL(4)’      Fortran 77 and later
!      ‘DABS(A)’      ‘REAL(8) A’       ‘REAL(8)’      Fortran 77 and later
!      ‘IABS(A)’      ‘INTEGER(4) A’    ‘INTEGER(4)’   Fortran 77 and later
!      ‘BABS(A)’      ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIABS(A)’     ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIABS(A)’     ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIABS(A)’     ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
!      ‘ZABS(A)’      ‘COMPLEX(8) A’    ‘REAL(8)’      GNU extension
!      ‘CDABS(A)’     ‘COMPLEX(8) A’    ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: ACCESS,  Next: ACHAR,  Prev: ABS,  Up: Intrinsic Procedures
  
! 8.4 ‘ACCESS’ -- Checks file access modes
  ========================================
  
  _Description_:
!      ‘ACCESS(NAME, MODE)’ checks whether the file NAME exists, is
       readable, writable or executable.  Except for the executable check,
!      ‘ACCESS’ can be replaced by Fortran 95's ‘INQUIRE’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 7229,7251 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = ACCESS(NAME, MODE)'
  
  _Arguments_:
!      NAME        Scalar 'CHARACTER' of default kind with the file
                   name.  Trailing blank are ignored unless the
!                  character 'achar(0)' is present, then all
!                  characters up to and excluding 'achar(0)' are
                   used as file name.
!      MODE        Scalar 'CHARACTER' of default kind with the file
!                  access mode, may be any concatenation of '"r"'
!                  (readable), '"w"' (writable) and '"x"'
!                  (executable), or '" "' to check for existence.
  
  _Return value_:
!      Returns a scalar 'INTEGER', which is '0' if the file is accessible
       in the given mode; otherwise or if an invalid argument has been
!      given for 'MODE' the value '1' is returned.
  
  _Example_:
            program access_test
--- 7229,7251 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = ACCESS(NAME, MODE)’
  
  _Arguments_:
!      NAME        Scalar ‘CHARACTER’ of default kind with the file
                   name.  Trailing blank are ignored unless the
!                  character ‘achar(0)’ is present, then all
!                  characters up to and excluding ‘achar(0)’ are
                   used as file name.
!      MODE        Scalar ‘CHARACTER’ of default kind with the file
!                  access mode, may be any concatenation of ‘"r"’
!                  (readable), ‘"w"’ (writable) and ‘"x"’
!                  (executable), or ‘" "’ to check for existence.
  
  _Return value_:
!      Returns a scalar ‘INTEGER’, which is ‘0’ if the file is accessible
       in the given mode; otherwise or if an invalid argument has been
!      given for ‘MODE’ the value ‘1’ is returned.
  
  _Example_:
            program access_test
*************** _Example_:
*** 7263,7273 ****
  
  File: gfortran.info,  Node: ACHAR,  Next: ACOS,  Prev: ACCESS,  Up: Intrinsic Procedures
  
! 8.5 'ACHAR' -- Character in ASCII collating sequence
  ====================================================
  
  _Description_:
!      'ACHAR(I)' returns the character located at position 'I' in the
       ASCII collating sequence.
  
  _Standard_:
--- 7263,7273 ----
  
  File: gfortran.info,  Node: ACHAR,  Next: ACOS,  Prev: ACCESS,  Up: Intrinsic Procedures
  
! 8.5 ‘ACHAR’ -- Character in ASCII collating sequence
  ====================================================
  
  _Description_:
!      ‘ACHAR(I)’ returns the character located at position ‘I’ in the
       ASCII collating sequence.
  
  _Standard_:
*************** _Class_:
*** 7277,7292 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ACHAR(I [, KIND])'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'CHARACTER' with a length of one.  If
       the KIND argument is present, the return value is of the specified
       kind and of the default kind otherwise.
  
--- 7277,7292 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ACHAR(I [, KIND])’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘CHARACTER’ with a length of one.  If
       the KIND argument is present, the return value is of the specified
       kind and of the default kind otherwise.
  
*************** _See also_:
*** 7308,7318 ****
  
  File: gfortran.info,  Node: ACOS,  Next: ACOSD,  Prev: ACHAR,  Up: Intrinsic Procedures
  
! 8.6 'ACOS' -- Arccosine function
  ================================
  
  _Description_:
!      'ACOS(X)' computes the arccosine of X (inverse of 'COS(X)').
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
--- 7308,7318 ----
  
  File: gfortran.info,  Node: ACOS,  Next: ACOSD,  Prev: ACHAR,  Up: Intrinsic Procedures
  
! 8.6 ‘ACOS’ -- Arccosine function
  ================================
  
  _Description_:
!      ‘ACOS(X)’ computes the arccosine of X (inverse of ‘COS(X)’).
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
*************** _Class_:
*** 7321,7332 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ACOS(X)'
  
  _Arguments_:
!      X           The type shall either be 'REAL' with a magnitude
                   that is less than or equal to one - or the type
!                  shall be 'COMPLEX'.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real part
--- 7321,7332 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ACOS(X)’
  
  _Arguments_:
!      X           The type shall either be ‘REAL’ with a magnitude
                   that is less than or equal to one - or the type
!                  shall be ‘COMPLEX’.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real part
*************** _Example_:
*** 7342,7349 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ACOS(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DACOS(X)'     'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  _See also_:
       Inverse function:
--- 7342,7349 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ACOS(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DACOS(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 7354,7365 ****
  
  File: gfortran.info,  Node: ACOSD,  Next: ACOSH,  Prev: ACOS,  Up: Intrinsic Procedures
  
! 8.7 'ACOSD' -- Arccosine function, degrees
  ==========================================
  
  _Description_:
!      'ACOSD(X)' computes the arccosine of X in degrees (inverse of
!      'COSD(X)').
  
  _Standard_:
       Fortran 2023
--- 7354,7365 ----
  
  File: gfortran.info,  Node: ACOSD,  Next: ACOSH,  Prev: ACOS,  Up: Intrinsic Procedures
  
! 8.7 ‘ACOSD’ -- Arccosine function, degrees
  ==========================================
  
  _Description_:
!      ‘ACOSD(X)’ computes the arccosine of X in degrees (inverse of
!      ‘COSD(X)’).
  
  _Standard_:
       Fortran 2023
*************** _Class_:
*** 7368,7377 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ACOSD(X)'
  
  _Arguments_:
!      X           The type shall either be 'REAL' with a magnitude
                   that is less than or equal to one.
  
  _Return value_:
--- 7368,7377 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ACOSD(X)’
  
  _Arguments_:
!      X           The type shall either be ‘REAL’ with a magnitude
                   that is less than or equal to one.
  
  _Return value_:
*************** _Example_:
*** 7388,7395 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ACOSD(X)'     'REAL(4) X'       'REAL(4)'      Fortran 2023
!      'DACOSD(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Inverse function:
--- 7388,7395 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ACOSD(X)’     ‘REAL(4) X’       ‘REAL(4)’      Fortran 2023
!      ‘DACOSD(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 7400,7410 ****
  
  File: gfortran.info,  Node: ACOSH,  Next: ADJUSTL,  Prev: ACOSD,  Up: Intrinsic Procedures
  
! 8.8 'ACOSH' -- Inverse hyperbolic cosine function
  =================================================
  
  _Description_:
!      'ACOSH(X)' computes the inverse hyperbolic cosine of X.
  
  _Standard_:
       Fortran 2008 and later
--- 7400,7410 ----
  
  File: gfortran.info,  Node: ACOSH,  Next: ADJUSTL,  Prev: ACOSD,  Up: Intrinsic Procedures
  
! 8.8 ‘ACOSH’ -- Inverse hyperbolic cosine function
  =================================================
  
  _Description_:
!      ‘ACOSH(X)’ computes the inverse hyperbolic cosine of X.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 7413,7422 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ACOSH(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has the same type and kind as X.  If X is complex,
--- 7413,7422 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ACOSH(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has the same type and kind as X.  If X is complex,
*************** _Example_:
*** 7432,7438 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DACOSH(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Inverse function:
--- 7432,7438 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DACOSH(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 7441,7451 ****
  
  File: gfortran.info,  Node: ADJUSTL,  Next: ADJUSTR,  Prev: ACOSH,  Up: Intrinsic Procedures
  
! 8.9 'ADJUSTL' -- Left adjust a string
  =====================================
  
  _Description_:
!      'ADJUSTL(STRING)' will left adjust a string by removing leading
       spaces.  Spaces are inserted at the end of the string as needed.
  
  _Standard_:
--- 7441,7451 ----
  
  File: gfortran.info,  Node: ADJUSTL,  Next: ADJUSTR,  Prev: ACOSH,  Up: Intrinsic Procedures
  
! 8.9 ‘ADJUSTL’ -- Left adjust a string
  =====================================
  
  _Description_:
!      ‘ADJUSTL(STRING)’ will left adjust a string by removing leading
       spaces.  Spaces are inserted at the end of the string as needed.
  
  _Standard_:
*************** _Class_:
*** 7455,7467 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ADJUSTL(STRING)'
  
  _Arguments_:
!      STRING      The type shall be 'CHARACTER'.
  
  _Return value_:
!      The return value is of type 'CHARACTER' and of the same kind as
       STRING where leading spaces are removed and the same number of
       spaces are inserted on the end of STRING.
  
--- 7455,7467 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ADJUSTL(STRING)’
  
  _Arguments_:
!      STRING      The type shall be ‘CHARACTER’.
  
  _Return value_:
!      The return value is of type ‘CHARACTER’ and of the same kind as
       STRING where leading spaces are removed and the same number of
       spaces are inserted on the end of STRING.
  
*************** _See also_:
*** 7479,7489 ****
  
  File: gfortran.info,  Node: ADJUSTR,  Next: AIMAG,  Prev: ADJUSTL,  Up: Intrinsic Procedures
  
! 8.10 'ADJUSTR' -- Right adjust a string
  =======================================
  
  _Description_:
!      'ADJUSTR(STRING)' will right adjust a string by removing trailing
       spaces.  Spaces are inserted at the start of the string as needed.
  
  _Standard_:
--- 7479,7489 ----
  
  File: gfortran.info,  Node: ADJUSTR,  Next: AIMAG,  Prev: ADJUSTL,  Up: Intrinsic Procedures
  
! 8.10 ‘ADJUSTR’ -- Right adjust a string
  =======================================
  
  _Description_:
!      ‘ADJUSTR(STRING)’ will right adjust a string by removing trailing
       spaces.  Spaces are inserted at the start of the string as needed.
  
  _Standard_:
*************** _Class_:
*** 7493,7505 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ADJUSTR(STRING)'
  
  _Arguments_:
!      STR         The type shall be 'CHARACTER'.
  
  _Return value_:
!      The return value is of type 'CHARACTER' and of the same kind as
       STRING where trailing spaces are removed and the same number of
       spaces are inserted at the start of STRING.
  
--- 7493,7505 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ADJUSTR(STRING)’
  
  _Arguments_:
!      STR         The type shall be ‘CHARACTER’.
  
  _Return value_:
!      The return value is of type ‘CHARACTER’ and of the same kind as
       STRING where trailing spaces are removed and the same number of
       spaces are inserted at the start of STRING.
  
*************** _See also_:
*** 7517,7529 ****
  
  File: gfortran.info,  Node: AIMAG,  Next: AINT,  Prev: ADJUSTR,  Up: Intrinsic Procedures
  
! 8.11 'AIMAG' -- Imaginary part of complex number
  ================================================
  
  _Description_:
!      'AIMAG(Z)' yields the imaginary part of complex argument 'Z'.  The
!      'IMAG(Z)' and 'IMAGPART(Z)' intrinsic functions are provided for
!      compatibility with 'g77', and their use in new code is strongly
       discouraged.
  
  _Standard_:
--- 7517,7529 ----
  
  File: gfortran.info,  Node: AIMAG,  Next: AINT,  Prev: ADJUSTR,  Up: Intrinsic Procedures
  
! 8.11 ‘AIMAG’ -- Imaginary part of complex number
  ================================================
  
  _Description_:
!      ‘AIMAG(Z)’ yields the imaginary part of complex argument ‘Z’.  The
!      ‘IMAG(Z)’ and ‘IMAGPART(Z)’ intrinsic functions are provided for
!      compatibility with ‘g77’, and their use in new code is strongly
       discouraged.
  
  _Standard_:
*************** _Class_:
*** 7533,7545 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = AIMAG(Z)'
  
  _Arguments_:
!      Z           The type of the argument shall be 'COMPLEX'.
  
  _Return value_:
!      The return value is of type 'REAL' with the kind type parameter of
       the argument.
  
  _Example_:
--- 7533,7545 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = AIMAG(Z)’
  
  _Arguments_:
!      Z           The type of the argument shall be ‘COMPLEX’.
  
  _Return value_:
!      The return value is of type ‘REAL’ with the kind type parameter of
       the argument.
  
  _Example_:
*************** _Example_:
*** 7554,7572 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'AIMAG(Z)'     'COMPLEX Z'       'REAL'         Fortran 77 and later
!      'DIMAG(Z)'     'COMPLEX(8) Z'    'REAL(8)'      GNU extension
!      'IMAG(Z)'      'COMPLEX Z'       'REAL'         GNU extension
!      'IMAGPART(Z)'  'COMPLEX Z'       'REAL'         GNU extension
  
  
  File: gfortran.info,  Node: AINT,  Next: ALARM,  Prev: AIMAG,  Up: Intrinsic Procedures
  
! 8.12 'AINT' -- Truncate to a whole number
  =========================================
  
  _Description_:
!      'AINT(A [, KIND])' truncates its argument to a whole number.
  
  _Standard_:
       Fortran 77 and later
--- 7554,7572 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘AIMAG(Z)’     ‘COMPLEX Z’       ‘REAL’         Fortran 77 and later
!      ‘DIMAG(Z)’     ‘COMPLEX(8) Z’    ‘REAL(8)’      GNU extension
!      ‘IMAG(Z)’      ‘COMPLEX Z’       ‘REAL’         GNU extension
!      ‘IMAGPART(Z)’  ‘COMPLEX Z’       ‘REAL’         GNU extension
  
  
  File: gfortran.info,  Node: AINT,  Next: ALARM,  Prev: AIMAG,  Up: Intrinsic Procedures
  
! 8.12 ‘AINT’ -- Truncate to a whole number
  =========================================
  
  _Description_:
!      ‘AINT(A [, KIND])’ truncates its argument to a whole number.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 7575,7593 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = AINT(A [, KIND])'
  
  _Arguments_:
!      A           The type of the argument shall be 'REAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'REAL' with the kind type parameter of
       the argument if the optional KIND is absent; otherwise, the kind
       type parameter will be given by KIND.  If the magnitude of X is
!      less than one, 'AINT(X)' returns zero.  If the magnitude is equal
       to or greater than one then it returns the largest whole number
       that does not exceed its magnitude.  The sign is the same as the
       sign of X.
--- 7575,7593 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = AINT(A [, KIND])’
  
  _Arguments_:
!      A           The type of the argument shall be ‘REAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘REAL’ with the kind type parameter of
       the argument if the optional KIND is absent; otherwise, the kind
       type parameter will be given by KIND.  If the magnitude of X is
!      less than one, ‘AINT(X)’ returns zero.  If the magnitude is equal
       to or greater than one then it returns the largest whole number
       that does not exceed its magnitude.  The sign is the same as the
       sign of X.
*************** _Example_:
*** 7605,7623 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'AINT(A)'      'REAL(4) A'       'REAL(4)'      Fortran 77 and later
!      'DINT(A)'      'REAL(8) A'       'REAL(8)'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: ALARM,  Next: ALL,  Prev: AINT,  Up: Intrinsic Procedures
  
! 8.13 'ALARM' -- Execute a routine after a given delay
  =====================================================
  
  _Description_:
!      'ALARM(SECONDS, HANDLER [, STATUS])' causes external subroutine
!      HANDLER to be executed after a delay of SECONDS by using 'alarm(2)'
!      to set up a signal and 'signal(2)' to catch it.  If STATUS is
       supplied, it will be returned with the number of seconds remaining
       until any previously scheduled alarm was due to be delivered, or
       zero if there was no previously scheduled alarm.
--- 7605,7623 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘AINT(A)’      ‘REAL(4) A’       ‘REAL(4)’      Fortran 77 and later
!      ‘DINT(A)’      ‘REAL(8) A’       ‘REAL(8)’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: ALARM,  Next: ALL,  Prev: AINT,  Up: Intrinsic Procedures
  
! 8.13 ‘ALARM’ -- Execute a routine after a given delay
  =====================================================
  
  _Description_:
!      ‘ALARM(SECONDS, HANDLER [, STATUS])’ causes external subroutine
!      HANDLER to be executed after a delay of SECONDS by using ‘alarm(2)’
!      to set up a signal and ‘signal(2)’ to catch it.  If STATUS is
       supplied, it will be returned with the number of seconds remaining
       until any previously scheduled alarm was due to be delivered, or
       zero if there was no previously scheduled alarm.
*************** _Class_:
*** 7629,7647 ****
       Subroutine
  
  _Syntax_:
!      'CALL ALARM(SECONDS, HANDLER [, STATUS])'
  
  _Arguments_:
       SECONDS     The type of the argument shall be a scalar
!                  'INTEGER'.  It is 'INTENT(IN)'.
!      HANDLER     Signal handler ('INTEGER FUNCTION' or
!                  'SUBROUTINE') or dummy/global 'INTEGER' scalar.
!                  The scalar values may be either 'SIG_IGN=1' to
!                  ignore the alarm generated or 'SIG_DFL=0' to set
!                  the default action.  It is 'INTENT(IN)'.
       STATUS      (Optional) STATUS shall be a scalar variable of
!                  the default 'INTEGER' kind.  It is
!                  'INTENT(OUT)'.
  
  _Example_:
            program test_alarm
--- 7629,7647 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL ALARM(SECONDS, HANDLER [, STATUS])’
  
  _Arguments_:
       SECONDS     The type of the argument shall be a scalar
!                  ‘INTEGER’.  It is ‘INTENT(IN)’.
!      HANDLER     Signal handler (‘INTEGER FUNCTION’ or
!                  ‘SUBROUTINE’) or dummy/global ‘INTEGER’ scalar.
!                  The scalar values may be either ‘SIG_IGN=1’ to
!                  ignore the alarm generated or ‘SIG_DFL=0’ to set
!                  the default action.  It is ‘INTENT(IN)’.
       STATUS      (Optional) STATUS shall be a scalar variable of
!                  the default ‘INTEGER’ kind.  It is
!                  ‘INTENT(OUT)’.
  
  _Example_:
            program test_alarm
*************** _Example_:
*** 7657,7667 ****
  
  File: gfortran.info,  Node: ALL,  Next: ALLOCATED,  Prev: ALARM,  Up: Intrinsic Procedures
  
! 8.14 'ALL' -- All values in MASK along DIM are true
  ===================================================
  
  _Description_:
!      'ALL(MASK [, DIM])' determines if all the values are true in MASK
       in the array along dimension DIM.
  
  _Standard_:
--- 7657,7667 ----
  
  File: gfortran.info,  Node: ALL,  Next: ALLOCATED,  Prev: ALARM,  Up: Intrinsic Procedures
  
! 8.14 ‘ALL’ -- All values in MASK along DIM are true
  ===================================================
  
  _Description_:
!      ‘ALL(MASK [, DIM])’ determines if all the values are true in MASK
       in the array along dimension DIM.
  
  _Standard_:
*************** _Class_:
*** 7671,7699 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = ALL(MASK [, DIM])'
  
  _Arguments_:
!      MASK        The type of the argument shall be 'LOGICAL' and
                   it shall not be scalar.
       DIM         (Optional) DIM shall be a scalar integer with a
                   value that lies between one and the rank of
                   MASK.
  
  _Return value_:
!      'ALL(MASK)' returns a scalar value of type 'LOGICAL' where the kind
       type parameter is the same as the kind type parameter of MASK.  If
!      DIM is present, then 'ALL(MASK, DIM)' returns an array with the
       rank of MASK minus 1.  The shape is determined from the shape of
       MASK where the DIM dimension is elided.
  
       (A)
!           'ALL(MASK)' is true if all elements of MASK are true.  It also
            is true if MASK has zero size; otherwise, it is false.
       (B)
!           If the rank of MASK is one, then 'ALL(MASK,DIM)' is equivalent
!           to 'ALL(MASK)'.  If the rank is greater than one, then
!           'ALL(MASK,DIM)' is determined by applying 'ALL' to the array
            sections.
  
  _Example_:
--- 7671,7699 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = ALL(MASK [, DIM])’
  
  _Arguments_:
!      MASK        The type of the argument shall be ‘LOGICAL’ and
                   it shall not be scalar.
       DIM         (Optional) DIM shall be a scalar integer with a
                   value that lies between one and the rank of
                   MASK.
  
  _Return value_:
!      ‘ALL(MASK)’ returns a scalar value of type ‘LOGICAL’ where the kind
       type parameter is the same as the kind type parameter of MASK.  If
!      DIM is present, then ‘ALL(MASK, DIM)’ returns an array with the
       rank of MASK minus 1.  The shape is determined from the shape of
       MASK where the DIM dimension is elided.
  
       (A)
!           ‘ALL(MASK)’ is true if all elements of MASK are true.  It also
            is true if MASK has zero size; otherwise, it is false.
       (B)
!           If the rank of MASK is one, then ‘ALL(MASK,DIM)’ is equivalent
!           to ‘ALL(MASK)’.  If the rank is greater than one, then
!           ‘ALL(MASK,DIM)’ is determined by applying ‘ALL’ to the array
            sections.
  
  _Example_:
*************** _Example_:
*** 7716,7747 ****
  
  File: gfortran.info,  Node: ALLOCATED,  Next: AND,  Prev: ALL,  Up: Intrinsic Procedures
  
! 8.15 'ALLOCATED' -- Status of an allocatable entity
  ===================================================
  
  _Description_:
!      'ALLOCATED(ARRAY)' and 'ALLOCATED(SCALAR)' check the allocation
       status of ARRAY and SCALAR, respectively.
  
  _Standard_:
!      Fortran 90 and later.  Note, the 'SCALAR=' keyword and allocatable
       scalar entities are available in Fortran 2003 and later.
  
  _Class_:
       Inquiry function
  
  _Syntax_:
!      'RESULT = ALLOCATED(ARRAY)'
!      'RESULT = ALLOCATED(SCALAR)'
  
  _Arguments_:
!      ARRAY       The argument shall be an 'ALLOCATABLE' array.
!      SCALAR      The argument shall be an 'ALLOCATABLE' scalar.
  
  _Return value_:
!      The return value is a scalar 'LOGICAL' with the default logical
       kind type parameter.  If the argument is allocated, then the result
!      is '.TRUE.'; otherwise, it returns '.FALSE.'
  
  _Example_:
            program test_allocated
--- 7716,7747 ----
  
  File: gfortran.info,  Node: ALLOCATED,  Next: AND,  Prev: ALL,  Up: Intrinsic Procedures
  
! 8.15 ‘ALLOCATED’ -- Status of an allocatable entity
  ===================================================
  
  _Description_:
!      ‘ALLOCATED(ARRAY)’ and ‘ALLOCATED(SCALAR)’ check the allocation
       status of ARRAY and SCALAR, respectively.
  
  _Standard_:
!      Fortran 90 and later.  Note, the ‘SCALAR=’ keyword and allocatable
       scalar entities are available in Fortran 2003 and later.
  
  _Class_:
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = ALLOCATED(ARRAY)’
!      ‘RESULT = ALLOCATED(SCALAR)’
  
  _Arguments_:
!      ARRAY       The argument shall be an ‘ALLOCATABLE’ array.
!      SCALAR      The argument shall be an ‘ALLOCATABLE’ scalar.
  
  _Return value_:
!      The return value is a scalar ‘LOGICAL’ with the default logical
       kind type parameter.  If the argument is allocated, then the result
!      is ‘.TRUE.’; otherwise, it returns ‘.FALSE.’
  
  _Example_:
            program test_allocated
*************** _Example_:
*** 7753,7763 ****
  
  File: gfortran.info,  Node: AND,  Next: ANINT,  Prev: ALLOCATED,  Up: Intrinsic Procedures
  
! 8.16 'AND' -- Bitwise logical AND
  =================================
  
  _Description_:
!      Bitwise logical 'AND'.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  For integer arguments, programmers should consider
--- 7753,7763 ----
  
  File: gfortran.info,  Node: AND,  Next: ANINT,  Prev: ALLOCATED,  Up: Intrinsic Procedures
  
! 8.16 ‘AND’ -- Bitwise logical AND
  =================================
  
  _Description_:
!      Bitwise logical ‘AND’.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  For integer arguments, programmers should consider
*************** _Class_:
*** 7771,7793 ****
       Function
  
  _Syntax_:
!      'RESULT = AND(I, J)'
  
  _Arguments_:
!      I           The type shall be either a scalar 'INTEGER' type
!                  or a scalar 'LOGICAL' type or a
                   boz-literal-constant.
       J           The type shall be the same as the type of I or a
                   boz-literal-constant.  I and J shall not both be
                   boz-literal-constants.  If either I or J is a
                   boz-literal-constant, then the other argument
!                  must be a scalar 'INTEGER'.
  
  _Return value_:
!      The return type is either a scalar 'INTEGER' or a scalar 'LOGICAL'.
       If the kind type parameters differ, then the smaller kind type is
       implicitly converted to larger kind, and the return has the larger
!      kind.  A boz-literal-constant is converted to an 'INTEGER' with the
       kind type parameter of the other argument as-if a call to *note
       INT:: occurred.
  
--- 7771,7793 ----
       Function
  
  _Syntax_:
!      ‘RESULT = AND(I, J)’
  
  _Arguments_:
!      I           The type shall be either a scalar ‘INTEGER’ type
!                  or a scalar ‘LOGICAL’ type or a
                   boz-literal-constant.
       J           The type shall be the same as the type of I or a
                   boz-literal-constant.  I and J shall not both be
                   boz-literal-constants.  If either I or J is a
                   boz-literal-constant, then the other argument
!                  must be a scalar ‘INTEGER’.
  
  _Return value_:
!      The return type is either a scalar ‘INTEGER’ or a scalar ‘LOGICAL’.
       If the kind type parameters differ, then the smaller kind type is
       implicitly converted to larger kind, and the return has the larger
!      kind.  A boz-literal-constant is converted to an ‘INTEGER’ with the
       kind type parameter of the other argument as-if a call to *note
       INT:: occurred.
  
*************** _See also_:
*** 7808,7818 ****
  
  File: gfortran.info,  Node: ANINT,  Next: ANY,  Prev: AND,  Up: Intrinsic Procedures
  
! 8.17 'ANINT' -- Nearest whole number
  ====================================
  
  _Description_:
!      'ANINT(A [, KIND])' rounds its argument to the nearest whole
       number.
  
  _Standard_:
--- 7808,7818 ----
  
  File: gfortran.info,  Node: ANINT,  Next: ANY,  Prev: AND,  Up: Intrinsic Procedures
  
! 8.17 ‘ANINT’ -- Nearest whole number
  ====================================
  
  _Description_:
!      ‘ANINT(A [, KIND])’ rounds its argument to the nearest whole
       number.
  
  _Standard_:
*************** _Class_:
*** 7822,7832 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ANINT(A [, KIND])'
  
  _Arguments_:
!      A           The type of the argument shall be 'REAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
--- 7822,7832 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ANINT(A [, KIND])’
  
  _Arguments_:
!      A           The type of the argument shall be ‘REAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
*************** _Return value_:
*** 7834,7841 ****
       The return value is of type real with the kind type parameter of
       the argument if the optional KIND is absent; otherwise, the kind
       type parameter will be given by KIND.  If A is greater than zero,
!      'ANINT(A)' returns 'AINT(X+0.5)'.  If A is less than or equal to
!      zero then it returns 'AINT(X-0.5)'.
  
  _Example_:
            program test_anint
--- 7834,7841 ----
       The return value is of type real with the kind type parameter of
       the argument if the optional KIND is absent; otherwise, the kind
       type parameter will be given by KIND.  If A is greater than zero,
!      ‘ANINT(A)’ returns ‘AINT(X+0.5)’.  If A is less than or equal to
!      zero then it returns ‘AINT(X-0.5)’.
  
  _Example_:
            program test_anint
*************** _Example_:
*** 7850,7867 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ANINT(A)'     'REAL(4) A'       'REAL(4)'      Fortran 77 and later
!      'DNINT(A)'     'REAL(8) A'       'REAL(8)'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: ANY,  Next: ASIN,  Prev: ANINT,  Up: Intrinsic Procedures
  
! 8.18 'ANY' -- Any value in MASK along DIM is true
  =================================================
  
  _Description_:
!      'ANY(MASK [, DIM])' determines if any of the values in the logical
!      array MASK along dimension DIM are '.TRUE.'.
  
  _Standard_:
       Fortran 90 and later
--- 7850,7867 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ANINT(A)’     ‘REAL(4) A’       ‘REAL(4)’      Fortran 77 and later
!      ‘DNINT(A)’     ‘REAL(8) A’       ‘REAL(8)’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: ANY,  Next: ASIN,  Prev: ANINT,  Up: Intrinsic Procedures
  
! 8.18 ‘ANY’ -- Any value in MASK along DIM is true
  =================================================
  
  _Description_:
!      ‘ANY(MASK [, DIM])’ determines if any of the values in the logical
!      array MASK along dimension DIM are ‘.TRUE.’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 7870,7898 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = ANY(MASK [, DIM])'
  
  _Arguments_:
!      MASK        The type of the argument shall be 'LOGICAL' and
                   it shall not be scalar.
       DIM         (Optional) DIM shall be a scalar integer with a
                   value that lies between one and the rank of
                   MASK.
  
  _Return value_:
!      'ANY(MASK)' returns a scalar value of type 'LOGICAL' where the kind
       type parameter is the same as the kind type parameter of MASK.  If
!      DIM is present, then 'ANY(MASK, DIM)' returns an array with the
       rank of MASK minus 1.  The shape is determined from the shape of
       MASK where the DIM dimension is elided.
  
       (A)
!           'ANY(MASK)' is true if any element of MASK is true; otherwise,
            it is false.  It also is false if MASK has zero size.
       (B)
!           If the rank of MASK is one, then 'ANY(MASK,DIM)' is equivalent
!           to 'ANY(MASK)'.  If the rank is greater than one, then
!           'ANY(MASK,DIM)' is determined by applying 'ANY' to the array
            sections.
  
  _Example_:
--- 7870,7898 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = ANY(MASK [, DIM])’
  
  _Arguments_:
!      MASK        The type of the argument shall be ‘LOGICAL’ and
                   it shall not be scalar.
       DIM         (Optional) DIM shall be a scalar integer with a
                   value that lies between one and the rank of
                   MASK.
  
  _Return value_:
!      ‘ANY(MASK)’ returns a scalar value of type ‘LOGICAL’ where the kind
       type parameter is the same as the kind type parameter of MASK.  If
!      DIM is present, then ‘ANY(MASK, DIM)’ returns an array with the
       rank of MASK minus 1.  The shape is determined from the shape of
       MASK where the DIM dimension is elided.
  
       (A)
!           ‘ANY(MASK)’ is true if any element of MASK is true; otherwise,
            it is false.  It also is false if MASK has zero size.
       (B)
!           If the rank of MASK is one, then ‘ANY(MASK,DIM)’ is equivalent
!           to ‘ANY(MASK)’.  If the rank is greater than one, then
!           ‘ANY(MASK,DIM)’ is determined by applying ‘ANY’ to the array
            sections.
  
  _Example_:
*************** _Example_:
*** 7915,7925 ****
  
  File: gfortran.info,  Node: ASIN,  Next: ASIND,  Prev: ANY,  Up: Intrinsic Procedures
  
! 8.19 'ASIN' -- Arcsine function
  ===============================
  
  _Description_:
!      'ASIN(X)' computes the arcsine of its X (inverse of 'SIN(X)').
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
--- 7915,7925 ----
  
  File: gfortran.info,  Node: ASIN,  Next: ASIND,  Prev: ANY,  Up: Intrinsic Procedures
  
! 8.19 ‘ASIN’ -- Arcsine function
  ===============================
  
  _Description_:
!      ‘ASIN(X)’ computes the arcsine of its X (inverse of ‘SIN(X)’).
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
*************** _Class_:
*** 7928,7939 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ASIN(X)'
  
  _Arguments_:
!      X           The type shall be either 'REAL' and a magnitude
                   that is less than or equal to one - or be
!                  'COMPLEX'.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real part
--- 7928,7939 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ASIN(X)’
  
  _Arguments_:
!      X           The type shall be either ‘REAL’ and a magnitude
                   that is less than or equal to one - or be
!                  ‘COMPLEX’.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real part
*************** _Example_:
*** 7949,7956 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ASIN(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DASIN(X)'     'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  _See also_:
       Inverse function:
--- 7949,7956 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ASIN(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DASIN(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 7961,7972 ****
  
  File: gfortran.info,  Node: ASIND,  Next: ASINH,  Prev: ASIN,  Up: Intrinsic Procedures
  
! 8.20 'ASIND' -- Arcsine function, degrees
  =========================================
  
  _Description_:
!      'ASIND(X)' computes the arcsine of its X in degrees (inverse of
!      'SIND(X)').
  
  _Standard_:
       Fortran 2023
--- 7961,7972 ----
  
  File: gfortran.info,  Node: ASIND,  Next: ASINH,  Prev: ASIN,  Up: Intrinsic Procedures
  
! 8.20 ‘ASIND’ -- Arcsine function, degrees
  =========================================
  
  _Description_:
!      ‘ASIND(X)’ computes the arcsine of its X in degrees (inverse of
!      ‘SIND(X)’).
  
  _Standard_:
       Fortran 2023
*************** _Class_:
*** 7975,7984 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ASIND(X)'
  
  _Arguments_:
!      X           The type shall be either 'REAL' and a magnitude
                   that is less than or equal to one.
  
  _Return value_:
--- 7975,7984 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ASIND(X)’
  
  _Arguments_:
!      X           The type shall be either ‘REAL’ and a magnitude
                   that is less than or equal to one.
  
  _Return value_:
*************** _Example_:
*** 7994,8001 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ASIND(X)'     'REAL(4) X'       'REAL(4)'      Fortran 2023
!      'DASIND(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Inverse function:
--- 7994,8001 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ASIND(X)’     ‘REAL(4) X’       ‘REAL(4)’      Fortran 2023
!      ‘DASIND(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 8006,8016 ****
  
  File: gfortran.info,  Node: ASINH,  Next: ASSOCIATED,  Prev: ASIND,  Up: Intrinsic Procedures
  
! 8.21 'ASINH' -- Inverse hyperbolic sine function
  ================================================
  
  _Description_:
!      'ASINH(X)' computes the inverse hyperbolic sine of X.
  
  _Standard_:
       Fortran 2008 and later
--- 8006,8016 ----
  
  File: gfortran.info,  Node: ASINH,  Next: ASSOCIATED,  Prev: ASIND,  Up: Intrinsic Procedures
  
! 8.21 ‘ASINH’ -- Inverse hyperbolic sine function
  ================================================
  
  _Description_:
!      ‘ASINH(X)’ computes the inverse hyperbolic sine of X.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 8019,8028 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ASINH(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value is of the same type and kind as X.  If X is
--- 8019,8028 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ASINH(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value is of the same type and kind as X.  If X is
*************** _Example_:
*** 8038,8044 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DASINH(X)'    'REAL(8) X'       'REAL(8)'      GNU extension.
  
  _See also_:
       Inverse function:
--- 8038,8044 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DASINH(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension.
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 8047,8057 ****
  
  File: gfortran.info,  Node: ASSOCIATED,  Next: ATAN,  Prev: ASINH,  Up: Intrinsic Procedures
  
! 8.22 'ASSOCIATED' -- Status of a pointer or pointer/target pair
  ===============================================================
  
  _Description_:
!      'ASSOCIATED(POINTER [, TARGET])' determines the status of the
       pointer POINTER or if POINTER is associated with the target TARGET.
  
  _Standard_:
--- 8047,8057 ----
  
  File: gfortran.info,  Node: ASSOCIATED,  Next: ATAN,  Prev: ASINH,  Up: Intrinsic Procedures
  
! 8.22 ‘ASSOCIATED’ -- Status of a pointer or pointer/target pair
  ===============================================================
  
  _Description_:
!      ‘ASSOCIATED(POINTER [, TARGET])’ determines the status of the
       pointer POINTER or if POINTER is associated with the target TARGET.
  
  _Standard_:
*************** _Class_:
*** 8061,8070 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = ASSOCIATED(POINTER [, TARGET])'
  
  _Arguments_:
!      POINTER     POINTER shall have the 'POINTER' attribute and
                   it can be of any type.
       TARGET      (Optional) TARGET shall be a pointer or a
                   target.  It must have the same type, kind type
--- 8061,8070 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = ASSOCIATED(POINTER [, TARGET])’
  
  _Arguments_:
!      POINTER     POINTER shall have the ‘POINTER’ attribute and
                   it can be of any type.
       TARGET      (Optional) TARGET shall be a pointer or a
                   target.  It must have the same type, kind type
*************** _Arguments_:
*** 8073,8082 ****
       undefined.
  
  _Return value_:
!      'ASSOCIATED(POINTER)' returns a scalar value of type 'LOGICAL(4)'.
       There are several cases:
       (A) When the optional TARGET is not present then
!           'ASSOCIATED(POINTER)' is true if POINTER is associated with a
            target; otherwise, it returns false.
       (B) If TARGET is present and a scalar target, the result is true if
            TARGET is not a zero-sized storage sequence and the target
--- 8073,8082 ----
       undefined.
  
  _Return value_:
!      ‘ASSOCIATED(POINTER)’ returns a scalar value of type ‘LOGICAL(4)’.
       There are several cases:
       (A) When the optional TARGET is not present then
!           ‘ASSOCIATED(POINTER)’ is true if POINTER is associated with a
            target; otherwise, it returns false.
       (B) If TARGET is present and a scalar target, the result is true if
            TARGET is not a zero-sized storage sequence and the target
*************** _See also_:
*** 8117,8127 ****
  
  File: gfortran.info,  Node: ATAN,  Next: ATAND,  Prev: ASSOCIATED,  Up: Intrinsic Procedures
  
! 8.23 'ATAN' -- Arctangent function
  ==================================
  
  _Description_:
!      'ATAN(X)' computes the arctangent of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument and for two arguments
--- 8117,8127 ----
  
  File: gfortran.info,  Node: ATAN,  Next: ATAND,  Prev: ASSOCIATED,  Up: Intrinsic Procedures
  
! 8.23 ‘ATAN’ -- Arctangent function
  ==================================
  
  _Description_:
!      ‘ATAN(X)’ computes the arctangent of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument and for two arguments
*************** _Class_:
*** 8131,8148 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ATAN(X)'
!      'RESULT = ATAN(Y, X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'; if Y is
                   present, X shall be REAL.
       Y           The type and kind type parameter shall be the
                   same as X.
  
  _Return value_:
       The return value is of the same type and kind as X.  If Y is
!      present, the result is identical to 'ATAN2(Y,X)'.  Otherwise, it
       the arcus tangent of X, where the real part of the result is in
       radians and lies in the range -\pi/2 \leq \Re \atan(x) \leq \pi/2.
  
--- 8131,8148 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ATAN(X)’
!      ‘RESULT = ATAN(Y, X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’; if Y is
                   present, X shall be REAL.
       Y           The type and kind type parameter shall be the
                   same as X.
  
  _Return value_:
       The return value is of the same type and kind as X.  If Y is
!      present, the result is identical to ‘ATAN2(Y,X)’.  Otherwise, it
       the arcus tangent of X, where the real part of the result is in
       radians and lies in the range -\pi/2 \leq \Re \atan(x) \leq \pi/2.
  
*************** _Example_:
*** 8155,8162 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ATAN(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DATAN(X)'     'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  _See also_:
       Inverse function:
--- 8155,8162 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ATAN(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DATAN(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 8167,8177 ****
  
  File: gfortran.info,  Node: ATAND,  Next: ATAN2,  Prev: ATAN,  Up: Intrinsic Procedures
  
! 8.24 'ATAND' -- Arctangent function, degrees
  ============================================
  
  _Description_:
!      'ATAND(X)' computes the arctangent of X in degrees (inverse of
       *note TAND::).
  
  _Standard_:
--- 8167,8177 ----
  
  File: gfortran.info,  Node: ATAND,  Next: ATAN2,  Prev: ATAN,  Up: Intrinsic Procedures
  
! 8.24 ‘ATAND’ -- Arctangent function, degrees
  ============================================
  
  _Description_:
!      ‘ATAND(X)’ computes the arctangent of X in degrees (inverse of
       *note TAND::).
  
  _Standard_:
*************** _Class_:
*** 8181,8190 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ATAND(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'; if Y is present, X
                   shall be REAL.
       Y           The type and kind type parameter shall be the
                   same as X.
--- 8181,8190 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ATAND(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’; if Y is present, X
                   shall be REAL.
       Y           The type and kind type parameter shall be the
                   same as X.
*************** _Example_:
*** 8202,8209 ****
  _Specific names_:
       Name              Argument          Return type    Standard
       --------------------------------------------------------------------------
!      'ATAND(X)'        'REAL(4) X'       'REAL(4)'      Fortran 2023
!      'DATAND(X)'       'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Inverse function:
--- 8202,8209 ----
  _Specific names_:
       Name              Argument          Return type    Standard
       --------------------------------------------------------------------------
!      ‘ATAND(X)’        ‘REAL(4) X’       ‘REAL(4)’      Fortran 2023
!      ‘DATAND(X)’       ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 8214,8224 ****
  
  File: gfortran.info,  Node: ATAN2,  Next: ATAN2D,  Prev: ATAND,  Up: Intrinsic Procedures
  
! 8.25 'ATAN2' -- Arctangent function
  ===================================
  
  _Description_:
!      'ATAN2(Y, X)' computes the principal value of the argument function
       of the complex number X + i Y. This function can be used to
       transform from Cartesian into polar coordinates and allows to
       determine the angle in the correct quadrant.
--- 8214,8224 ----
  
  File: gfortran.info,  Node: ATAN2,  Next: ATAN2D,  Prev: ATAND,  Up: Intrinsic Procedures
  
! 8.25 ‘ATAN2’ -- Arctangent function
  ===================================
  
  _Description_:
!      ‘ATAN2(Y, X)’ computes the principal value of the argument function
       of the complex number X + i Y. This function can be used to
       transform from Cartesian into polar coordinates and allows to
       determine the angle in the correct quadrant.
*************** _Class_:
*** 8230,8239 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ATAN2(Y, X)'
  
  _Arguments_:
!      Y           The type shall be 'REAL'.
       X           The type and kind type parameter shall be the
                   same as Y.  If Y is zero, then X must be
                   nonzero.
--- 8230,8239 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ATAN2(Y, X)’
  
  _Arguments_:
!      Y           The type shall be ‘REAL’.
       X           The type and kind type parameter shall be the
                   same as Y.  If Y is zero, then X must be
                   nonzero.
*************** _Example_:
*** 8257,8264 ****
  _Specific names_:
       Name             Argument         Return type    Standard
       -------------------------------------------------------------------------
!      'ATAN2(X, Y)'    'REAL(4) X, Y'   'REAL(4)'      Fortran 77 and later
!      'DATAN2(X, Y)'   'REAL(8) X, Y'   'REAL(8)'      Fortran 77 and later
  
  _See also_:
       Alias:
--- 8257,8264 ----
  _Specific names_:
       Name             Argument         Return type    Standard
       -------------------------------------------------------------------------
!      ‘ATAN2(X, Y)’    ‘REAL(4) X, Y’   ‘REAL(4)’      Fortran 77 and later
!      ‘DATAN2(X, Y)’   ‘REAL(8) X, Y’   ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       Alias:
*************** _See also_:
*** 8269,8279 ****
  
  File: gfortran.info,  Node: ATAN2D,  Next: ATANH,  Prev: ATAN2,  Up: Intrinsic Procedures
  
! 8.26 'ATAN2D' -- Arctangent function, degrees
  =============================================
  
  _Description_:
!      'ATAN2D(Y, X)' computes the principal value of the argument
       function of the complex number X + i Y in degrees.  This function
       can be used to transform from Cartesian into polar coordinates and
       allows to determine the angle in the correct quadrant.
--- 8269,8279 ----
  
  File: gfortran.info,  Node: ATAN2D,  Next: ATANH,  Prev: ATAN2,  Up: Intrinsic Procedures
  
! 8.26 ‘ATAN2D’ -- Arctangent function, degrees
  =============================================
  
  _Description_:
!      ‘ATAN2D(Y, X)’ computes the principal value of the argument
       function of the complex number X + i Y in degrees.  This function
       can be used to transform from Cartesian into polar coordinates and
       allows to determine the angle in the correct quadrant.
*************** _Class_:
*** 8285,8294 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ATAN2D(Y, X)'
  
  _Arguments_:
!      Y           The type shall be 'REAL'.
       X           The type and kind type parameter shall be the
                   same as Y.  If Y is zero, then X must be
                   nonzero.
--- 8285,8294 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ATAN2D(Y, X)’
  
  _Arguments_:
!      Y           The type shall be ‘REAL’.
       X           The type and kind type parameter shall be the
                   same as Y.  If Y is zero, then X must be
                   nonzero.
*************** _Example_:
*** 8312,8319 ****
  _Specific names_:
       Name              Argument          Return type    Standard
       --------------------------------------------------------------------------
!      'ATAN2D(X, Y)'    'REAL(4) X, Y'    'REAL(4)'      Fortran 2023
!      'DATAN2D(X, Y)'   'REAL(8) X, Y'    'REAL(8)'      GNU extension
  
  _See also_:
       Alias:
--- 8312,8319 ----
  _Specific names_:
       Name              Argument          Return type    Standard
       --------------------------------------------------------------------------
!      ‘ATAN2D(X, Y)’    ‘REAL(4) X, Y’    ‘REAL(4)’      Fortran 2023
!      ‘DATAN2D(X, Y)’   ‘REAL(8) X, Y’    ‘REAL(8)’      GNU extension
  
  _See also_:
       Alias:
*************** _See also_:
*** 8324,8334 ****
  
  File: gfortran.info,  Node: ATANH,  Next: ATOMIC_ADD,  Prev: ATAN2D,  Up: Intrinsic Procedures
  
! 8.27 'ATANH' -- Inverse hyperbolic tangent function
  ===================================================
  
  _Description_:
!      'ATANH(X)' computes the inverse hyperbolic tangent of X.
  
  _Standard_:
       Fortran 2008 and later
--- 8324,8334 ----
  
  File: gfortran.info,  Node: ATANH,  Next: ATOMIC_ADD,  Prev: ATAN2D,  Up: Intrinsic Procedures
  
! 8.27 ‘ATANH’ -- Inverse hyperbolic tangent function
  ===================================================
  
  _Description_:
!      ‘ATANH(X)’ computes the inverse hyperbolic tangent of X.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 8337,8346 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ATANH(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X.  If X is complex, the
--- 8337,8346 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ATANH(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X.  If X is complex, the
*************** _Example_:
*** 8356,8362 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DATANH(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Inverse function:
--- 8356,8362 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DATANH(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 8365,8382 ****
  
  File: gfortran.info,  Node: ATOMIC_ADD,  Next: ATOMIC_AND,  Prev: ATANH,  Up: Intrinsic Procedures
  
! 8.28 'ATOMIC_ADD' -- Atomic ADD operation
  =========================================
  
  _Description_:
!      'ATOMIC_ADD(ATOM, VALUE)' atomically adds the value of VALUE to the
       variable ATOM.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8365,8382 ----
  
  File: gfortran.info,  Node: ATOMIC_ADD,  Next: ATOMIC_AND,  Prev: ATANH,  Up: Intrinsic Procedures
  
! 8.28 ‘ATOMIC_ADD’ -- Atomic ADD operation
  =========================================
  
  _Description_:
!      ‘ATOMIC_ADD(ATOM, VALUE)’ atomically adds the value of VALUE to the
       variable ATOM.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8385,8395 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_ADD (ATOM, VALUE [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8385,8395 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_ADD (ATOM, VALUE [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8413,8430 ****
  
  File: gfortran.info,  Node: ATOMIC_AND,  Next: ATOMIC_CAS,  Prev: ATOMIC_ADD,  Up: Intrinsic Procedures
  
! 8.29 'ATOMIC_AND' -- Atomic bitwise AND operation
  =================================================
  
  _Description_:
!      'ATOMIC_AND(ATOM, VALUE)' atomically defines ATOM with the bitwise
       AND between the values of ATOM and VALUE.  When STAT is present and
       the invocation was successful, it is assigned the value 0.  If it
       is present and the invocation has failed, it is assigned a positive
       value; in particular, for a coindexed ATOM, if the remote image has
!      stopped, it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8413,8430 ----
  
  File: gfortran.info,  Node: ATOMIC_AND,  Next: ATOMIC_CAS,  Prev: ATOMIC_ADD,  Up: Intrinsic Procedures
  
! 8.29 ‘ATOMIC_AND’ -- Atomic bitwise AND operation
  =================================================
  
  _Description_:
!      ‘ATOMIC_AND(ATOM, VALUE)’ atomically defines ATOM with the bitwise
       AND between the values of ATOM and VALUE.  When STAT is present and
       the invocation was successful, it is assigned the value 0.  If it
       is present and the invocation has failed, it is assigned a positive
       value; in particular, for a coindexed ATOM, if the remote image has
!      stopped, it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8433,8443 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_AND (ATOM, VALUE [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8433,8443 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_AND (ATOM, VALUE [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8461,8480 ****
  
  File: gfortran.info,  Node: ATOMIC_CAS,  Next: ATOMIC_DEFINE,  Prev: ATOMIC_AND,  Up: Intrinsic Procedures
  
! 8.30 'ATOMIC_CAS' -- Atomic compare and swap
  ============================================
  
  _Description_:
!      'ATOMIC_CAS' compares the variable ATOM with the value of COMPARE;
       if the value is the same, ATOM is set to the value of NEW.
       Additionally, OLD is set to the value of ATOM that was used for the
       comparison.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8461,8480 ----
  
  File: gfortran.info,  Node: ATOMIC_CAS,  Next: ATOMIC_DEFINE,  Prev: ATOMIC_AND,  Up: Intrinsic Procedures
  
! 8.30 ‘ATOMIC_CAS’ -- Atomic compare and swap
  ============================================
  
  _Description_:
!      ‘ATOMIC_CAS’ compares the variable ATOM with the value of COMPARE;
       if the value is the same, ATOM is set to the value of NEW.
       Additionally, OLD is set to the value of ATOM that was used for the
       comparison.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8483,8494 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of either
!                  integer type with 'ATOMIC_INT_KIND' kind or
!                  logical type with 'ATOMIC_LOGICAL_KIND' kind.
       OLD         Scalar of the same type and kind as ATOM.
       COMPARE     Scalar variable of the same type and kind as
                   ATOM.
--- 8483,8494 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of either
!                  integer type with ‘ATOMIC_INT_KIND’ kind or
!                  logical type with ‘ATOMIC_LOGICAL_KIND’ kind.
       OLD         Scalar of the same type and kind as ATOM.
       COMPARE     Scalar variable of the same type and kind as
                   ATOM.
*************** _See also_:
*** 8512,8529 ****
  
  File: gfortran.info,  Node: ATOMIC_DEFINE,  Next: ATOMIC_FETCH_ADD,  Prev: ATOMIC_CAS,  Up: Intrinsic Procedures
  
! 8.31 'ATOMIC_DEFINE' -- Setting a variable atomically
  =====================================================
  
  _Description_:
!      'ATOMIC_DEFINE(ATOM, VALUE)' defines the variable ATOM with the
       value VALUE atomically.  When STAT is present and the invocation
       was successful, it is assigned the value 0.  If it is present and
       the invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       Fortran 2008 and later; with STAT, TS 18508 or later
--- 8512,8529 ----
  
  File: gfortran.info,  Node: ATOMIC_DEFINE,  Next: ATOMIC_FETCH_ADD,  Prev: ATOMIC_CAS,  Up: Intrinsic Procedures
  
! 8.31 ‘ATOMIC_DEFINE’ -- Setting a variable atomically
  =====================================================
  
  _Description_:
!      ‘ATOMIC_DEFINE(ATOM, VALUE)’ defines the variable ATOM with the
       value VALUE atomically.  When STAT is present and the invocation
       was successful, it is assigned the value 0.  If it is present and
       the invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       Fortran 2008 and later; with STAT, TS 18508 or later
*************** _Class_:
*** 8532,8543 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of either
!                  integer type with 'ATOMIC_INT_KIND' kind or
!                  logical type with 'ATOMIC_LOGICAL_KIND' kind.
                   
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
--- 8532,8543 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of either
!                  integer type with ‘ATOMIC_INT_KIND’ kind or
!                  logical type with ‘ATOMIC_LOGICAL_KIND’ kind.
                   
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
*************** _See also_:
*** 8563,8580 ****
  
  File: gfortran.info,  Node: ATOMIC_FETCH_ADD,  Next: ATOMIC_FETCH_AND,  Prev: ATOMIC_DEFINE,  Up: Intrinsic Procedures
  
! 8.32 'ATOMIC_FETCH_ADD' -- Atomic ADD operation with prior fetch
  ================================================================
  
  _Description_:
!      'ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)' atomically stores the value of
       ATOM in OLD and adds the value of VALUE to the variable ATOM.  When
       STAT is present and the invocation was successful, it is assigned
       the value 0.  If it is present and the invocation has failed, it is
       assigned a positive value; in particular, for a coindexed ATOM, if
       the remote image has stopped, it is assigned the value of
!      'ISO_FORTRAN_ENV''s 'STAT_STOPPED_IMAGE' and if the remote image
!      has failed, the value 'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8563,8580 ----
  
  File: gfortran.info,  Node: ATOMIC_FETCH_ADD,  Next: ATOMIC_FETCH_AND,  Prev: ATOMIC_DEFINE,  Up: Intrinsic Procedures
  
! 8.32 ‘ATOMIC_FETCH_ADD’ -- Atomic ADD operation with prior fetch
  ================================================================
  
  _Description_:
!      ‘ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)’ atomically stores the value of
       ATOM in OLD and adds the value of VALUE to the variable ATOM.  When
       STAT is present and the invocation was successful, it is assigned
       the value 0.  If it is present and the invocation has failed, it is
       assigned a positive value; in particular, for a coindexed ATOM, if
       the remote image has stopped, it is assigned the value of
!      ‘ISO_FORTRAN_ENV’'s ‘STAT_STOPPED_IMAGE’ and if the remote image
!      has failed, the value ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8583,8594 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
!                  'ATOMIC_LOGICAL_KIND' kind.
                   
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
--- 8583,8594 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
!                  ‘ATOMIC_LOGICAL_KIND’ kind.
                   
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
*************** _See also_:
*** 8614,8632 ****
  
  File: gfortran.info,  Node: ATOMIC_FETCH_AND,  Next: ATOMIC_FETCH_OR,  Prev: ATOMIC_FETCH_ADD,  Up: Intrinsic Procedures
  
! 8.33 'ATOMIC_FETCH_AND' -- Atomic bitwise AND operation with prior fetch
  ========================================================================
  
  _Description_:
!      'ATOMIC_AND(ATOM, VALUE)' atomically stores the value of ATOM in
       OLD and defines ATOM with the bitwise AND between the values of
       ATOM and VALUE.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8614,8632 ----
  
  File: gfortran.info,  Node: ATOMIC_FETCH_AND,  Next: ATOMIC_FETCH_OR,  Prev: ATOMIC_FETCH_ADD,  Up: Intrinsic Procedures
  
! 8.33 ‘ATOMIC_FETCH_AND’ -- Atomic bitwise AND operation with prior fetch
  ========================================================================
  
  _Description_:
!      ‘ATOMIC_AND(ATOM, VALUE)’ atomically stores the value of ATOM in
       OLD and defines ATOM with the bitwise AND between the values of
       ATOM and VALUE.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8635,8645 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8635,8645 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8664,8681 ****
  
  File: gfortran.info,  Node: ATOMIC_FETCH_OR,  Next: ATOMIC_FETCH_XOR,  Prev: ATOMIC_FETCH_AND,  Up: Intrinsic Procedures
  
! 8.34 'ATOMIC_FETCH_OR' -- Atomic bitwise OR operation with prior fetch
  ======================================================================
  
  _Description_:
!      'ATOMIC_OR(ATOM, VALUE)' atomically stores the value of ATOM in OLD
       and defines ATOM with the bitwise OR between the values of ATOM and
       VALUE.  When STAT is present and the invocation was successful, it
       is assigned the value 0.  If it is present and the invocation has
       failed, it is assigned a positive value; in particular, for a
       coindexed ATOM, if the remote image has stopped, it is assigned the
!      value of 'ISO_FORTRAN_ENV''s 'STAT_STOPPED_IMAGE' and if the remote
!      image has failed, the value 'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8664,8681 ----
  
  File: gfortran.info,  Node: ATOMIC_FETCH_OR,  Next: ATOMIC_FETCH_XOR,  Prev: ATOMIC_FETCH_AND,  Up: Intrinsic Procedures
  
! 8.34 ‘ATOMIC_FETCH_OR’ -- Atomic bitwise OR operation with prior fetch
  ======================================================================
  
  _Description_:
!      ‘ATOMIC_OR(ATOM, VALUE)’ atomically stores the value of ATOM in OLD
       and defines ATOM with the bitwise OR between the values of ATOM and
       VALUE.  When STAT is present and the invocation was successful, it
       is assigned the value 0.  If it is present and the invocation has
       failed, it is assigned a positive value; in particular, for a
       coindexed ATOM, if the remote image has stopped, it is assigned the
!      value of ‘ISO_FORTRAN_ENV’'s ‘STAT_STOPPED_IMAGE’ and if the remote
!      image has failed, the value ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8684,8694 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8684,8694 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8713,8731 ****
  
  File: gfortran.info,  Node: ATOMIC_FETCH_XOR,  Next: ATOMIC_OR,  Prev: ATOMIC_FETCH_OR,  Up: Intrinsic Procedures
  
! 8.35 'ATOMIC_FETCH_XOR' -- Atomic bitwise XOR operation with prior fetch
  ========================================================================
  
  _Description_:
!      'ATOMIC_XOR(ATOM, VALUE)' atomically stores the value of ATOM in
       OLD and defines ATOM with the bitwise XOR between the values of
       ATOM and VALUE.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8713,8731 ----
  
  File: gfortran.info,  Node: ATOMIC_FETCH_XOR,  Next: ATOMIC_OR,  Prev: ATOMIC_FETCH_OR,  Up: Intrinsic Procedures
  
! 8.35 ‘ATOMIC_FETCH_XOR’ -- Atomic bitwise XOR operation with prior fetch
  ========================================================================
  
  _Description_:
!      ‘ATOMIC_XOR(ATOM, VALUE)’ atomically stores the value of ATOM in
       OLD and defines ATOM with the bitwise XOR between the values of
       ATOM and VALUE.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8734,8744 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8734,8744 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8763,8780 ****
  
  File: gfortran.info,  Node: ATOMIC_OR,  Next: ATOMIC_REF,  Prev: ATOMIC_FETCH_XOR,  Up: Intrinsic Procedures
  
! 8.36 'ATOMIC_OR' -- Atomic bitwise OR operation
  ===============================================
  
  _Description_:
!      'ATOMIC_OR(ATOM, VALUE)' atomically defines ATOM with the bitwise
       AND between the values of ATOM and VALUE.  When STAT is present and
       the invocation was successful, it is assigned the value 0.  If it
       is present and the invocation has failed, it is assigned a positive
       value; in particular, for a coindexed ATOM, if the remote image has
!      stopped, it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8763,8780 ----
  
  File: gfortran.info,  Node: ATOMIC_OR,  Next: ATOMIC_REF,  Prev: ATOMIC_FETCH_XOR,  Up: Intrinsic Procedures
  
! 8.36 ‘ATOMIC_OR’ -- Atomic bitwise OR operation
  ===============================================
  
  _Description_:
!      ‘ATOMIC_OR(ATOM, VALUE)’ atomically defines ATOM with the bitwise
       AND between the values of ATOM and VALUE.  When STAT is present and
       the invocation was successful, it is assigned the value 0.  If it
       is present and the invocation has failed, it is assigned a positive
       value; in particular, for a coindexed ATOM, if the remote image has
!      stopped, it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8783,8793 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_OR (ATOM, VALUE [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8783,8793 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_OR (ATOM, VALUE [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8811,8828 ****
  
  File: gfortran.info,  Node: ATOMIC_REF,  Next: ATOMIC_XOR,  Prev: ATOMIC_OR,  Up: Intrinsic Procedures
  
! 8.37 'ATOMIC_REF' -- Obtaining the value of a variable atomically
  =================================================================
  
  _Description_:
!      'ATOMIC_DEFINE(ATOM, VALUE)' atomically assigns the value of the
       variable ATOM to VALUE.  When STAT is present and the invocation
       was successful, it is assigned the value 0.  If it is present and
       the invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       Fortran 2008 and later; with STAT, TS 18508 or later
--- 8811,8828 ----
  
  File: gfortran.info,  Node: ATOMIC_REF,  Next: ATOMIC_XOR,  Prev: ATOMIC_OR,  Up: Intrinsic Procedures
  
! 8.37 ‘ATOMIC_REF’ -- Obtaining the value of a variable atomically
  =================================================================
  
  _Description_:
!      ‘ATOMIC_DEFINE(ATOM, VALUE)’ atomically assigns the value of the
       variable ATOM to VALUE.  When STAT is present and the invocation
       was successful, it is assigned the value 0.  If it is present and
       the invocation has failed, it is assigned a positive value; in
       particular, for a coindexed ATOM, if the remote image has stopped,
!      it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       Fortran 2008 and later; with STAT, TS 18508 or later
*************** _Class_:
*** 8831,8845 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_REF(VALUE, ATOM [, STAT])'
  
  _Arguments_:
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
       ATOM        Scalar coarray or coindexed variable of either
!                  integer type with 'ATOMIC_INT_KIND' kind or
!                  logical type with 'ATOMIC_LOGICAL_KIND' kind.
       STAT        (optional) Scalar default-kind integer variable.
  
  _Example_:
--- 8831,8845 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_REF(VALUE, ATOM [, STAT])’
  
  _Arguments_:
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
       ATOM        Scalar coarray or coindexed variable of either
!                  integer type with ‘ATOMIC_INT_KIND’ kind or
!                  logical type with ‘ATOMIC_LOGICAL_KIND’ kind.
       STAT        (optional) Scalar default-kind integer variable.
  
  _Example_:
*************** _See also_:
*** 8867,8884 ****
  
  File: gfortran.info,  Node: ATOMIC_XOR,  Next: BACKTRACE,  Prev: ATOMIC_REF,  Up: Intrinsic Procedures
  
! 8.38 'ATOMIC_XOR' -- Atomic bitwise OR operation
  ================================================
  
  _Description_:
!      'ATOMIC_AND(ATOM, VALUE)' atomically defines ATOM with the bitwise
       XOR between the values of ATOM and VALUE.  When STAT is present and
       the invocation was successful, it is assigned the value 0.  If it
       is present and the invocation has failed, it is assigned a positive
       value; in particular, for a coindexed ATOM, if the remote image has
!      stopped, it is assigned the value of 'ISO_FORTRAN_ENV''s
!      'STAT_STOPPED_IMAGE' and if the remote image has failed, the value
!      'STAT_FAILED_IMAGE'.
  
  _Standard_:
       TS 18508 or later
--- 8867,8884 ----
  
  File: gfortran.info,  Node: ATOMIC_XOR,  Next: BACKTRACE,  Prev: ATOMIC_REF,  Up: Intrinsic Procedures
  
! 8.38 ‘ATOMIC_XOR’ -- Atomic bitwise OR operation
  ================================================
  
  _Description_:
!      ‘ATOMIC_AND(ATOM, VALUE)’ atomically defines ATOM with the bitwise
       XOR between the values of ATOM and VALUE.  When STAT is present and
       the invocation was successful, it is assigned the value 0.  If it
       is present and the invocation has failed, it is assigned a positive
       value; in particular, for a coindexed ATOM, if the remote image has
!      stopped, it is assigned the value of ‘ISO_FORTRAN_ENV’'s
!      ‘STAT_STOPPED_IMAGE’ and if the remote image has failed, the value
!      ‘STAT_FAILED_IMAGE’.
  
  _Standard_:
       TS 18508 or later
*************** _Class_:
*** 8887,8897 ****
       Atomic subroutine
  
  _Syntax_:
!      'CALL ATOMIC_XOR (ATOM, VALUE [, STAT])'
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with 'ATOMIC_INT_KIND' kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
--- 8887,8897 ----
       Atomic subroutine
  
  _Syntax_:
!      ‘CALL ATOMIC_XOR (ATOM, VALUE [, STAT])’
  
  _Arguments_:
       ATOM        Scalar coarray or coindexed variable of integer
!                  type with ‘ATOMIC_INT_KIND’ kind.
       VALUE       Scalar of the same type as ATOM.  If the kind is
                   different, the value is converted to the kind of
                   ATOM.
*************** _See also_:
*** 8915,8928 ****
  
  File: gfortran.info,  Node: BACKTRACE,  Next: BESSEL_J0,  Prev: ATOMIC_XOR,  Up: Intrinsic Procedures
  
! 8.39 'BACKTRACE' -- Show a backtrace
  ====================================
  
  _Description_:
!      'BACKTRACE' shows a backtrace at an arbitrary place in user code.
       Program execution continues normally afterwards.  The backtrace
!      information is printed to the unit corresponding to 'ERROR_UNIT' in
!      'ISO_FORTRAN_ENV'.
  
  _Standard_:
       GNU extension
--- 8915,8928 ----
  
  File: gfortran.info,  Node: BACKTRACE,  Next: BESSEL_J0,  Prev: ATOMIC_XOR,  Up: Intrinsic Procedures
  
! 8.39 ‘BACKTRACE’ -- Show a backtrace
  ====================================
  
  _Description_:
!      ‘BACKTRACE’ shows a backtrace at an arbitrary place in user code.
       Program execution continues normally afterwards.  The backtrace
!      information is printed to the unit corresponding to ‘ERROR_UNIT’ in
!      ‘ISO_FORTRAN_ENV’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 8931,8937 ****
       Subroutine
  
  _Syntax_:
!      'CALL BACKTRACE'
  
  _Arguments_:
       None
--- 8931,8937 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL BACKTRACE’
  
  _Arguments_:
       None
*************** _See also_:
*** 8942,8953 ****
  
  File: gfortran.info,  Node: BESSEL_J0,  Next: BESSEL_J1,  Prev: BACKTRACE,  Up: Intrinsic Procedures
  
! 8.40 'BESSEL_J0' -- Bessel function of the first kind of order 0
  ================================================================
  
  _Description_:
!      'BESSEL_J0(X)' computes the Bessel function of the first kind of
!      order 0 of X.  This function is available under the name 'BESJ0' as
       a GNU extension.
  
  _Standard_:
--- 8942,8953 ----
  
  File: gfortran.info,  Node: BESSEL_J0,  Next: BESSEL_J1,  Prev: BACKTRACE,  Up: Intrinsic Procedures
  
! 8.40 ‘BESSEL_J0’ -- Bessel function of the first kind of order 0
  ================================================================
  
  _Description_:
!      ‘BESSEL_J0(X)’ computes the Bessel function of the first kind of
!      order 0 of X.  This function is available under the name ‘BESJ0’ as
       a GNU extension.
  
  _Standard_:
*************** _Class_:
*** 8957,8969 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BESSEL_J0(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL' and lies in the range -
       0.4027... \leq Bessel (0,x) \leq 1.  It has the same kind as X.
  
  _Example_:
--- 8957,8969 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BESSEL_J0(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’ and lies in the range -
       0.4027... \leq Bessel (0,x) \leq 1.  It has the same kind as X.
  
  _Example_:
*************** _Example_:
*** 8975,8991 ****
  _Specific names_:
       Name            Argument         Return type    Standard
       -------------------------------------------------------------------------
!      'DBESJ0(X)'     'REAL(8) X'      'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_J1,  Next: BESSEL_JN,  Prev: BESSEL_J0,  Up: Intrinsic Procedures
  
! 8.41 'BESSEL_J1' -- Bessel function of the first kind of order 1
  ================================================================
  
  _Description_:
!      'BESSEL_J1(X)' computes the Bessel function of the first kind of
!      order 1 of X.  This function is available under the name 'BESJ1' as
       a GNU extension.
  
  _Standard_:
--- 8975,8991 ----
  _Specific names_:
       Name            Argument         Return type    Standard
       -------------------------------------------------------------------------
!      ‘DBESJ0(X)’     ‘REAL(8) X’      ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_J1,  Next: BESSEL_JN,  Prev: BESSEL_J0,  Up: Intrinsic Procedures
  
! 8.41 ‘BESSEL_J1’ -- Bessel function of the first kind of order 1
  ================================================================
  
  _Description_:
!      ‘BESSEL_J1(X)’ computes the Bessel function of the first kind of
!      order 1 of X.  This function is available under the name ‘BESJ1’ as
       a GNU extension.
  
  _Standard_:
*************** _Class_:
*** 8995,9007 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BESSEL_J1(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL' and lies in the range -
       0.5818... \leq Bessel (0,x) \leq 0.5818 .  It has the same kind as
       X.
  
--- 8995,9007 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BESSEL_J1(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’ and lies in the range -
       0.5818... \leq Bessel (0,x) \leq 0.5818 .  It has the same kind as
       X.
  
*************** _Example_:
*** 9014,9034 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DBESJ1(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_JN,  Next: BESSEL_Y0,  Prev: BESSEL_J1,  Up: Intrinsic Procedures
  
! 8.42 'BESSEL_JN' -- Bessel function of the first kind
  =====================================================
  
  _Description_:
!      'BESSEL_JN(N, X)' computes the Bessel function of the first kind of
!      order N of X.  This function is available under the name 'BESJN' as
       a GNU extension.  If N and X are arrays, their ranks and shapes
       shall conform.
  
!      'BESSEL_JN(N1, N2, X)' returns an array with the Bessel functions
       of the first kind of the orders N1 to N2.
  
  _Standard_:
--- 9014,9034 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DBESJ1(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_JN,  Next: BESSEL_Y0,  Prev: BESSEL_J1,  Up: Intrinsic Procedures
  
! 8.42 ‘BESSEL_JN’ -- Bessel function of the first kind
  =====================================================
  
  _Description_:
!      ‘BESSEL_JN(N, X)’ computes the Bessel function of the first kind of
!      order N of X.  This function is available under the name ‘BESJN’ as
       a GNU extension.  If N and X are arrays, their ranks and shapes
       shall conform.
  
!      ‘BESSEL_JN(N1, N2, X)’ returns an array with the Bessel functions
       of the first kind of the orders N1 to N2.
  
  _Standard_:
*************** _Standard_:
*** 9036,9058 ****
  
  _Class_:
       Elemental function, except for the transformational function
!      'BESSEL_JN(N1, N2, X)'
  
  _Syntax_:
!      'RESULT = BESSEL_JN(N, X)'
!      'RESULT = BESSEL_JN(N1, N2, X)'
  
  _Arguments_:
!      N           Shall be a scalar or an array of type 'INTEGER'.
       N1          Shall be a non-negative scalar of type
!                  'INTEGER'.
       N2          Shall be a non-negative scalar of type
!                  'INTEGER'.
!      X           Shall be a scalar or an array of type 'REAL';
!                  for 'BESSEL_JN(N1, N2, X)' it shall be scalar.
  
  _Return value_:
!      The return value is a scalar of type 'REAL'.  It has the same kind
       as X.
  
  _Note_:
--- 9036,9058 ----
  
  _Class_:
       Elemental function, except for the transformational function
!      ‘BESSEL_JN(N1, N2, X)’
  
  _Syntax_:
!      ‘RESULT = BESSEL_JN(N, X)’
!      ‘RESULT = BESSEL_JN(N1, N2, X)’
  
  _Arguments_:
!      N           Shall be a scalar or an array of type ‘INTEGER’.
       N1          Shall be a non-negative scalar of type
!                  ‘INTEGER’.
       N2          Shall be a non-negative scalar of type
!                  ‘INTEGER’.
!      X           Shall be a scalar or an array of type ‘REAL’;
!                  for ‘BESSEL_JN(N1, N2, X)’ it shall be scalar.
  
  _Return value_:
!      The return value is a scalar of type ‘REAL’.  It has the same kind
       as X.
  
  _Note_:
*************** _Example_:
*** 9069,9086 ****
  _Specific names_:
       Name             Argument         Return type    Standard
       -------------------------------------------------------------------------
!      'DBESJN(N, X)'   'INTEGER N'      'REAL(8)'      GNU extension
!                       'REAL(8) X'
  
  
  File: gfortran.info,  Node: BESSEL_Y0,  Next: BESSEL_Y1,  Prev: BESSEL_JN,  Up: Intrinsic Procedures
  
! 8.43 'BESSEL_Y0' -- Bessel function of the second kind of order 0
  =================================================================
  
  _Description_:
!      'BESSEL_Y0(X)' computes the Bessel function of the second kind of
!      order 0 of X.  This function is available under the name 'BESY0' as
       a GNU extension.
  
  _Standard_:
--- 9069,9086 ----
  _Specific names_:
       Name             Argument         Return type    Standard
       -------------------------------------------------------------------------
!      ‘DBESJN(N, X)’   ‘INTEGER N’      ‘REAL(8)’      GNU extension
!                       ‘REAL(8) X’
  
  
  File: gfortran.info,  Node: BESSEL_Y0,  Next: BESSEL_Y1,  Prev: BESSEL_JN,  Up: Intrinsic Procedures
  
! 8.43 ‘BESSEL_Y0’ -- Bessel function of the second kind of order 0
  =================================================================
  
  _Description_:
!      ‘BESSEL_Y0(X)’ computes the Bessel function of the second kind of
!      order 0 of X.  This function is available under the name ‘BESY0’ as
       a GNU extension.
  
  _Standard_:
*************** _Class_:
*** 9090,9102 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BESSEL_Y0(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL'.  It has the same kind as X.
  
  _Example_:
            program test_besy0
--- 9090,9102 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BESSEL_Y0(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’.  It has the same kind as X.
  
  _Example_:
            program test_besy0
*************** _Example_:
*** 9107,9123 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DBESY0(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_Y1,  Next: BESSEL_YN,  Prev: BESSEL_Y0,  Up: Intrinsic Procedures
  
! 8.44 'BESSEL_Y1' -- Bessel function of the second kind of order 1
  =================================================================
  
  _Description_:
!      'BESSEL_Y1(X)' computes the Bessel function of the second kind of
!      order 1 of X.  This function is available under the name 'BESY1' as
       a GNU extension.
  
  _Standard_:
--- 9107,9123 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DBESY0(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_Y1,  Next: BESSEL_YN,  Prev: BESSEL_Y0,  Up: Intrinsic Procedures
  
! 8.44 ‘BESSEL_Y1’ -- Bessel function of the second kind of order 1
  =================================================================
  
  _Description_:
!      ‘BESSEL_Y1(X)’ computes the Bessel function of the second kind of
!      order 1 of X.  This function is available under the name ‘BESY1’ as
       a GNU extension.
  
  _Standard_:
*************** _Class_:
*** 9127,9139 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BESSEL_Y1(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL'.  It has the same kind as X.
  
  _Example_:
            program test_besy1
--- 9127,9139 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BESSEL_Y1(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’.  It has the same kind as X.
  
  _Example_:
            program test_besy1
*************** _Example_:
*** 9144,9164 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DBESY1(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_YN,  Next: BGE,  Prev: BESSEL_Y1,  Up: Intrinsic Procedures
  
! 8.45 'BESSEL_YN' -- Bessel function of the second kind
  ======================================================
  
  _Description_:
!      'BESSEL_YN(N, X)' computes the Bessel function of the second kind
!      of order N of X.  This function is available under the name 'BESYN'
       as a GNU extension.  If N and X are arrays, their ranks and shapes
       shall conform.
  
!      'BESSEL_YN(N1, N2, X)' returns an array with the Bessel functions
       of the first kind of the orders N1 to N2.
  
  _Standard_:
--- 9144,9164 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DBESY1(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: BESSEL_YN,  Next: BGE,  Prev: BESSEL_Y1,  Up: Intrinsic Procedures
  
! 8.45 ‘BESSEL_YN’ -- Bessel function of the second kind
  ======================================================
  
  _Description_:
!      ‘BESSEL_YN(N, X)’ computes the Bessel function of the second kind
!      of order N of X.  This function is available under the name ‘BESYN’
       as a GNU extension.  If N and X are arrays, their ranks and shapes
       shall conform.
  
!      ‘BESSEL_YN(N1, N2, X)’ returns an array with the Bessel functions
       of the first kind of the orders N1 to N2.
  
  _Standard_:
*************** _Standard_:
*** 9166,9189 ****
  
  _Class_:
       Elemental function, except for the transformational function
!      'BESSEL_YN(N1, N2, X)'
  
  _Syntax_:
!      'RESULT = BESSEL_YN(N, X)'
!      'RESULT = BESSEL_YN(N1, N2, X)'
  
  _Arguments_:
!      N           Shall be a scalar or an array of type 'INTEGER'
                   .
       N1          Shall be a non-negative scalar of type
!                  'INTEGER'.
       N2          Shall be a non-negative scalar of type
!                  'INTEGER'.
!      X           Shall be a scalar or an array of type 'REAL';
!                  for 'BESSEL_YN(N1, N2, X)' it shall be scalar.
  
  _Return value_:
!      The return value is a scalar of type 'REAL'.  It has the same kind
       as X.
  
  _Note_:
--- 9166,9189 ----
  
  _Class_:
       Elemental function, except for the transformational function
!      ‘BESSEL_YN(N1, N2, X)’
  
  _Syntax_:
!      ‘RESULT = BESSEL_YN(N, X)’
!      ‘RESULT = BESSEL_YN(N1, N2, X)’
  
  _Arguments_:
!      N           Shall be a scalar or an array of type ‘INTEGER’
                   .
       N1          Shall be a non-negative scalar of type
!                  ‘INTEGER’.
       N2          Shall be a non-negative scalar of type
!                  ‘INTEGER’.
!      X           Shall be a scalar or an array of type ‘REAL’;
!                  for ‘BESSEL_YN(N1, N2, X)’ it shall be scalar.
  
  _Return value_:
!      The return value is a scalar of type ‘REAL’.  It has the same kind
       as X.
  
  _Note_:
*************** _Example_:
*** 9200,9212 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DBESYN(N,X)'  'INTEGER N'       'REAL(8)'      GNU extension
!                     'REAL(8) X'
  
  
  File: gfortran.info,  Node: BGE,  Next: BGT,  Prev: BESSEL_YN,  Up: Intrinsic Procedures
  
! 8.46 'BGE' -- Bitwise greater than or equal to
  ==============================================
  
  _Description_:
--- 9200,9212 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DBESYN(N,X)’  ‘INTEGER N’       ‘REAL(8)’      GNU extension
!                     ‘REAL(8) X’
  
  
  File: gfortran.info,  Node: BGE,  Next: BGT,  Prev: BESSEL_YN,  Up: Intrinsic Procedures
  
! 8.46 ‘BGE’ -- Bitwise greater than or equal to
  ==============================================
  
  _Description_:
*************** _Class_:
*** 9220,9234 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BGE(I, J)'
  
  _Arguments_:
!      I           Shall be of 'INTEGER' type.
!      J           Shall be of 'INTEGER' type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type 'LOGICAL' and of the default kind.
  
  _See also_:
       *note BGT::,
--- 9220,9234 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BGE(I, J)’
  
  _Arguments_:
!      I           Shall be of ‘INTEGER’ type.
!      J           Shall be of ‘INTEGER’ type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type ‘LOGICAL’ and of the default kind.
  
  _See also_:
       *note BGT::,
*************** _See also_:
*** 9238,9244 ****
  
  File: gfortran.info,  Node: BGT,  Next: BIT_SIZE,  Prev: BGE,  Up: Intrinsic Procedures
  
! 8.47 'BGT' -- Bitwise greater than
  ==================================
  
  _Description_:
--- 9238,9244 ----
  
  File: gfortran.info,  Node: BGT,  Next: BIT_SIZE,  Prev: BGE,  Up: Intrinsic Procedures
  
! 8.47 ‘BGT’ -- Bitwise greater than
  ==================================
  
  _Description_:
*************** _Class_:
*** 9251,9265 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BGT(I, J)'
  
  _Arguments_:
!      I           Shall be of 'INTEGER' type.
!      J           Shall be of 'INTEGER' type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type 'LOGICAL' and of the default kind.
  
  _See also_:
       *note BGE::,
--- 9251,9265 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BGT(I, J)’
  
  _Arguments_:
!      I           Shall be of ‘INTEGER’ type.
!      J           Shall be of ‘INTEGER’ type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type ‘LOGICAL’ and of the default kind.
  
  _See also_:
       *note BGE::,
*************** _See also_:
*** 9269,9281 ****
  
  File: gfortran.info,  Node: BIT_SIZE,  Next: BLE,  Prev: BGT,  Up: Intrinsic Procedures
  
! 8.48 'BIT_SIZE' -- Bit size inquiry function
  ============================================
  
  _Description_:
!      'BIT_SIZE(I)' returns the number of bits (integer precision plus
       sign bit) represented by the type of I.  The result of
!      'BIT_SIZE(I)' is independent of the actual value of I.
  
  _Standard_:
       Fortran 90 and later
--- 9269,9281 ----
  
  File: gfortran.info,  Node: BIT_SIZE,  Next: BLE,  Prev: BGT,  Up: Intrinsic Procedures
  
! 8.48 ‘BIT_SIZE’ -- Bit size inquiry function
  ============================================
  
  _Description_:
!      ‘BIT_SIZE(I)’ returns the number of bits (integer precision plus
       sign bit) represented by the type of I.  The result of
!      ‘BIT_SIZE(I)’ is independent of the actual value of I.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 9284,9296 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = BIT_SIZE(I)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER'
  
  _Example_:
            program test_bit_size
--- 9284,9296 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = BIT_SIZE(I)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’
  
  _Example_:
            program test_bit_size
*************** _Example_:
*** 9303,9309 ****
  
  File: gfortran.info,  Node: BLE,  Next: BLT,  Prev: BIT_SIZE,  Up: Intrinsic Procedures
  
! 8.49 'BLE' -- Bitwise less than or equal to
  ===========================================
  
  _Description_:
--- 9303,9309 ----
  
  File: gfortran.info,  Node: BLE,  Next: BLT,  Prev: BIT_SIZE,  Up: Intrinsic Procedures
  
! 8.49 ‘BLE’ -- Bitwise less than or equal to
  ===========================================
  
  _Description_:
*************** _Class_:
*** 9317,9331 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BLE(I, J)'
  
  _Arguments_:
!      I           Shall be of 'INTEGER' type.
!      J           Shall be of 'INTEGER' type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type 'LOGICAL' and of the default kind.
  
  _See also_:
       *note BGT::,
--- 9317,9331 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BLE(I, J)’
  
  _Arguments_:
!      I           Shall be of ‘INTEGER’ type.
!      J           Shall be of ‘INTEGER’ type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type ‘LOGICAL’ and of the default kind.
  
  _See also_:
       *note BGT::,
*************** _See also_:
*** 9335,9341 ****
  
  File: gfortran.info,  Node: BLT,  Next: BTEST,  Prev: BLE,  Up: Intrinsic Procedures
  
! 8.50 'BLT' -- Bitwise less than
  ===============================
  
  _Description_:
--- 9335,9341 ----
  
  File: gfortran.info,  Node: BLT,  Next: BTEST,  Prev: BLE,  Up: Intrinsic Procedures
  
! 8.50 ‘BLT’ -- Bitwise less than
  ===============================
  
  _Description_:
*************** _Class_:
*** 9348,9362 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BLT(I, J)'
  
  _Arguments_:
!      I           Shall be of 'INTEGER' type.
!      J           Shall be of 'INTEGER' type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type 'LOGICAL' and of the default kind.
  
  _See also_:
       *note BGE::,
--- 9348,9362 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BLT(I, J)’
  
  _Arguments_:
!      I           Shall be of ‘INTEGER’ type.
!      J           Shall be of ‘INTEGER’ type, and of the same kind
                   as I.
  
  _Return value_:
!      The return value is of type ‘LOGICAL’ and of the default kind.
  
  _See also_:
       *note BGE::,
*************** _See also_:
*** 9366,9376 ****
  
  File: gfortran.info,  Node: BTEST,  Next: C_ASSOCIATED,  Prev: BLT,  Up: Intrinsic Procedures
  
! 8.51 'BTEST' -- Bit test function
  =================================
  
  _Description_:
!      'BTEST(I,POS)' returns logical '.TRUE.' if the bit at POS in I is
       set.  The counting of the bits starts at 0.
  
  _Standard_:
--- 9366,9376 ----
  
  File: gfortran.info,  Node: BTEST,  Next: C_ASSOCIATED,  Prev: BLT,  Up: Intrinsic Procedures
  
! 8.51 ‘BTEST’ -- Bit test function
  =================================
  
  _Description_:
!      ‘BTEST(I,POS)’ returns logical ‘.TRUE.’ if the bit at POS in I is
       set.  The counting of the bits starts at 0.
  
  _Standard_:
*************** _Class_:
*** 9380,9393 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = BTEST(I, POS)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      POS         The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'LOGICAL'
  
  _Example_:
            program test_btest
--- 9380,9393 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = BTEST(I, POS)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      POS         The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘LOGICAL’
  
  _Example_:
            program test_btest
*************** _Example_:
*** 9403,9422 ****
  _Specific names_:
       Name            Argument             Return type   Standard
       --------------------------------------------------------------------------
!      'BTEST(I,POS)'  'INTEGER I,POS'      'LOGICAL'     Fortran 95 and later
!      'BBTEST(I,POS)' 'INTEGER(1) I,POS'   'LOGICAL(1)'  GNU extension
!      'BITEST(I,POS)' 'INTEGER(2) I,POS'   'LOGICAL(2)'  GNU extension
!      'BJTEST(I,POS)' 'INTEGER(4) I,POS'   'LOGICAL(4)'  GNU extension
!      'BKTEST(I,POS)' 'INTEGER(8) I,POS'   'LOGICAL(8)'  GNU extension
  
  
  File: gfortran.info,  Node: C_ASSOCIATED,  Next: C_F_POINTER,  Prev: BTEST,  Up: Intrinsic Procedures
  
! 8.52 'C_ASSOCIATED' -- Status of a C pointer
  ============================================
  
  _Description_:
!      'C_ASSOCIATED(c_ptr_1[, c_ptr_2])' determines the status of the C
       pointer C_PTR_1 or if C_PTR_1 is associated with the target
       C_PTR_2.
  
--- 9403,9422 ----
  _Specific names_:
       Name            Argument             Return type   Standard
       --------------------------------------------------------------------------
!      ‘BTEST(I,POS)’  ‘INTEGER I,POS’      ‘LOGICAL’     Fortran 95 and later
!      ‘BBTEST(I,POS)’ ‘INTEGER(1) I,POS’   ‘LOGICAL(1)’  GNU extension
!      ‘BITEST(I,POS)’ ‘INTEGER(2) I,POS’   ‘LOGICAL(2)’  GNU extension
!      ‘BJTEST(I,POS)’ ‘INTEGER(4) I,POS’   ‘LOGICAL(4)’  GNU extension
!      ‘BKTEST(I,POS)’ ‘INTEGER(8) I,POS’   ‘LOGICAL(8)’  GNU extension
  
  
  File: gfortran.info,  Node: C_ASSOCIATED,  Next: C_F_POINTER,  Prev: BTEST,  Up: Intrinsic Procedures
  
! 8.52 ‘C_ASSOCIATED’ -- Status of a C pointer
  ============================================
  
  _Description_:
!      ‘C_ASSOCIATED(c_ptr_1[, c_ptr_2])’ determines the status of the C
       pointer C_PTR_1 or if C_PTR_1 is associated with the target
       C_PTR_2.
  
*************** _Class_:
*** 9427,9440 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])'
  
  _Arguments_:
!      C_PTR_1     Scalar of the type 'C_PTR' or 'C_FUNPTR'.
       C_PTR_2     (Optional) Scalar of the same type as C_PTR_1.
  
  _Return value_:
!      The return value is of type 'LOGICAL'; it is '.false.' if either
       C_PTR_1 is a C NULL pointer or if C_PTR1 and C_PTR_2 point to
       different addresses.
  
--- 9427,9440 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])’
  
  _Arguments_:
!      C_PTR_1     Scalar of the type ‘C_PTR’ or ‘C_FUNPTR’.
       C_PTR_2     (Optional) Scalar of the same type as C_PTR_1.
  
  _Return value_:
!      The return value is of type ‘LOGICAL’; it is ‘.false.’ if either
       C_PTR_1 is a C NULL pointer or if C_PTR1 and C_PTR_2 point to
       different addresses.
  
*************** _See also_:
*** 9455,9465 ****
  
  File: gfortran.info,  Node: C_F_POINTER,  Next: C_F_PROCPOINTER,  Prev: C_ASSOCIATED,  Up: Intrinsic Procedures
  
! 8.53 'C_F_POINTER' -- Convert C into Fortran pointer
  ====================================================
  
  _Description_:
!      'C_F_POINTER(CPTR, FPTR[, SHAPE])' assigns the target of the C
       pointer CPTR to the Fortran pointer FPTR and specifies its shape.
  
  _Standard_:
--- 9455,9465 ----
  
  File: gfortran.info,  Node: C_F_POINTER,  Next: C_F_PROCPOINTER,  Prev: C_ASSOCIATED,  Up: Intrinsic Procedures
  
! 8.53 ‘C_F_POINTER’ -- Convert C into Fortran pointer
  ====================================================
  
  _Description_:
!      ‘C_F_POINTER(CPTR, FPTR[, SHAPE])’ assigns the target of the C
       pointer CPTR to the Fortran pointer FPTR and specifies its shape.
  
  _Standard_:
*************** _Class_:
*** 9469,9482 ****
       Subroutine
  
  _Syntax_:
!      'CALL C_F_POINTER(CPTR, FPTR[, SHAPE])'
  
  _Arguments_:
!      CPTR        scalar of the type 'C_PTR'.  It is 'INTENT(IN)'.
       FPTR        pointer interoperable with CPTR.  It is
!                  'INTENT(OUT)'.
!      SHAPE       (Optional) Rank-one array of type 'INTEGER' with
!                  'INTENT(IN)'.  It shall be present if and only
                   if FPTR is an array.  The size must be equal to
                   the rank of FPTR.
  
--- 9469,9482 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL C_F_POINTER(CPTR, FPTR[, SHAPE])’
  
  _Arguments_:
!      CPTR        scalar of the type ‘C_PTR’.  It is ‘INTENT(IN)’.
       FPTR        pointer interoperable with CPTR.  It is
!                  ‘INTENT(OUT)’.
!      SHAPE       (Optional) Rank-one array of type ‘INTEGER’ with
!                  ‘INTENT(IN)’.  It shall be present if and only
                   if FPTR is an array.  The size must be equal to
                   the rank of FPTR.
  
*************** _See also_:
*** 9503,9513 ****
  
  File: gfortran.info,  Node: C_F_PROCPOINTER,  Next: C_FUNLOC,  Prev: C_F_POINTER,  Up: Intrinsic Procedures
  
! 8.54 'C_F_PROCPOINTER' -- Convert C into Fortran procedure pointer
  ==================================================================
  
  _Description_:
!      'C_F_PROCPOINTER(CPTR, FPTR)' Assign the target of the C function
       pointer CPTR to the Fortran procedure pointer FPTR.
  
  _Standard_:
--- 9503,9513 ----
  
  File: gfortran.info,  Node: C_F_PROCPOINTER,  Next: C_FUNLOC,  Prev: C_F_POINTER,  Up: Intrinsic Procedures
  
! 8.54 ‘C_F_PROCPOINTER’ -- Convert C into Fortran procedure pointer
  ==================================================================
  
  _Description_:
!      ‘C_F_PROCPOINTER(CPTR, FPTR)’ Assign the target of the C function
       pointer CPTR to the Fortran procedure pointer FPTR.
  
  _Standard_:
*************** _Class_:
*** 9517,9529 ****
       Subroutine
  
  _Syntax_:
!      'CALL C_F_PROCPOINTER(cptr, fptr)'
  
  _Arguments_:
!      CPTR        scalar of the type 'C_FUNPTR'.  It is
!                  'INTENT(IN)'.
       FPTR        procedure pointer interoperable with CPTR.  It
!                  is 'INTENT(OUT)'.
  
  _Example_:
            program main
--- 9517,9529 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL C_F_PROCPOINTER(cptr, fptr)’
  
  _Arguments_:
!      CPTR        scalar of the type ‘C_FUNPTR’.  It is
!                  ‘INTENT(IN)’.
       FPTR        procedure pointer interoperable with CPTR.  It
!                  is ‘INTENT(OUT)’.
  
  _Example_:
            program main
*************** _See also_:
*** 9555,9565 ****
  
  File: gfortran.info,  Node: C_FUNLOC,  Next: C_LOC,  Prev: C_F_PROCPOINTER,  Up: Intrinsic Procedures
  
! 8.55 'C_FUNLOC' -- Obtain the C address of a procedure
  ======================================================
  
  _Description_:
!      'C_FUNLOC(x)' determines the C address of the argument.
  
  _Standard_:
       Fortran 2003 and later
--- 9555,9565 ----
  
  File: gfortran.info,  Node: C_FUNLOC,  Next: C_LOC,  Prev: C_F_PROCPOINTER,  Up: Intrinsic Procedures
  
! 8.55 ‘C_FUNLOC’ -- Obtain the C address of a procedure
  ======================================================
  
  _Description_:
!      ‘C_FUNLOC(x)’ determines the C address of the argument.
  
  _Standard_:
       Fortran 2003 and later
*************** _Class_:
*** 9568,9581 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = C_FUNLOC(x)'
  
  _Arguments_:
       X           Interoperable function or pointer to such
                   function.
  
  _Return value_:
!      The return value is of type 'C_FUNPTR' and contains the C address
       of the argument.
  
  _Example_:
--- 9568,9581 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = C_FUNLOC(x)’
  
  _Arguments_:
       X           Interoperable function or pointer to such
                   function.
  
  _Return value_:
!      The return value is of type ‘C_FUNPTR’ and contains the C address
       of the argument.
  
  _Example_:
*************** _See also_:
*** 9610,9620 ****
  
  File: gfortran.info,  Node: C_LOC,  Next: C_SIZEOF,  Prev: C_FUNLOC,  Up: Intrinsic Procedures
  
! 8.56 'C_LOC' -- Obtain the C address of an object
  =================================================
  
  _Description_:
!      'C_LOC(X)' determines the C address of the argument.
  
  _Standard_:
       Fortran 2003 and later
--- 9610,9620 ----
  
  File: gfortran.info,  Node: C_LOC,  Next: C_SIZEOF,  Prev: C_FUNLOC,  Up: Intrinsic Procedures
  
! 8.56 ‘C_LOC’ -- Obtain the C address of an object
  =================================================
  
  _Description_:
!      ‘C_LOC(X)’ determines the C address of the argument.
  
  _Standard_:
       Fortran 2003 and later
*************** _Class_:
*** 9623,9629 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = C_LOC(X)'
  
  _Arguments_:
       X       Shall have either the POINTER or TARGET attribute.
--- 9623,9629 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = C_LOC(X)’
  
  _Arguments_:
       X       Shall have either the POINTER or TARGET attribute.
*************** _Arguments_:
*** 9634,9640 ****
               
  
  _Return value_:
!      The return value is of type 'C_PTR' and contains the C address of
       the argument.
  
  _Example_:
--- 9634,9640 ----
               
  
  _Return value_:
!      The return value is of type ‘C_PTR’ and contains the C address of
       the argument.
  
  _Example_:
*************** _See also_:
*** 9656,9676 ****
  
  File: gfortran.info,  Node: C_SIZEOF,  Next: CEILING,  Prev: C_LOC,  Up: Intrinsic Procedures
  
! 8.57 'C_SIZEOF' -- Size in bytes of an expression
  =================================================
  
  _Description_:
!      'C_SIZEOF(X)' calculates the number of bytes of storage the
!      expression 'X' occupies.
  
  _Standard_:
       Fortran 2008
  
  _Class_:
!      Inquiry function of the module 'ISO_C_BINDING'
  
  _Syntax_:
!      'N = C_SIZEOF(X)'
  
  _Arguments_:
       X           The argument shall be an interoperable data
--- 9656,9676 ----
  
  File: gfortran.info,  Node: C_SIZEOF,  Next: CEILING,  Prev: C_LOC,  Up: Intrinsic Procedures
  
! 8.57 ‘C_SIZEOF’ -- Size in bytes of an expression
  =================================================
  
  _Description_:
!      ‘C_SIZEOF(X)’ calculates the number of bytes of storage the
!      expression ‘X’ occupies.
  
  _Standard_:
       Fortran 2008
  
  _Class_:
!      Inquiry function of the module ‘ISO_C_BINDING’
  
  _Syntax_:
!      ‘N = C_SIZEOF(X)’
  
  _Arguments_:
       X           The argument shall be an interoperable data
*************** _Arguments_:
*** 9678,9688 ****
  
  _Return value_:
       The return value is of type integer and of the system-dependent
!      kind 'C_SIZE_T' (from the 'ISO_C_BINDING' module).  Its value is
       the number of bytes occupied by the argument.  If the argument has
!      the 'POINTER' attribute, the number of bytes of the storage area
       pointed to is returned.  If the argument is of a derived type with
!      'POINTER' or 'ALLOCATABLE' components, the return value does not
       account for the sizes of the data pointed to by these components.
  
  _Example_:
--- 9678,9688 ----
  
  _Return value_:
       The return value is of type integer and of the system-dependent
!      kind ‘C_SIZE_T’ (from the ‘ISO_C_BINDING’ module).  Its value is
       the number of bytes occupied by the argument.  If the argument has
!      the ‘POINTER’ attribute, the number of bytes of the storage area
       pointed to is returned.  If the argument is of a derived type with
!      ‘POINTER’ or ‘ALLOCATABLE’ components, the return value does not
       account for the sizes of the data pointed to by these components.
  
  _Example_:
*************** _Example_:
*** 9691,9698 ****
               real(c_float) :: r, s(5)
               print *, (c_sizeof(s)/c_sizeof(r) == 5)
               end
!      The example will print 'T' unless you are using a platform where
!      default 'REAL' variables are unusually padded.
  
  _See also_:
       *note SIZEOF::,
--- 9691,9698 ----
               real(c_float) :: r, s(5)
               print *, (c_sizeof(s)/c_sizeof(r) == 5)
               end
!      The example will print ‘T’ unless you are using a platform where
!      default ‘REAL’ variables are unusually padded.
  
  _See also_:
       *note SIZEOF::,
*************** _See also_:
*** 9701,9711 ****
  
  File: gfortran.info,  Node: CEILING,  Next: CHAR,  Prev: C_SIZEOF,  Up: Intrinsic Procedures
  
! 8.58 'CEILING' -- Integer ceiling function
  ==========================================
  
  _Description_:
!      'CEILING(A)' returns the least integer greater than or equal to A.
  
  _Standard_:
       Fortran 95 and later
--- 9701,9711 ----
  
  File: gfortran.info,  Node: CEILING,  Next: CHAR,  Prev: C_SIZEOF,  Up: Intrinsic Procedures
  
! 8.58 ‘CEILING’ -- Integer ceiling function
  ==========================================
  
  _Description_:
!      ‘CEILING(A)’ returns the least integer greater than or equal to A.
  
  _Standard_:
       Fortran 95 and later
*************** _Class_:
*** 9714,9730 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = CEILING(A [, KIND])'
  
  _Arguments_:
!      A           The type shall be 'REAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER(KIND)' if KIND is present and
!      a default-kind 'INTEGER' otherwise.
  
  _Example_:
            program test_ceiling
--- 9714,9730 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = CEILING(A [, KIND])’
  
  _Arguments_:
!      A           The type shall be ‘REAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER(KIND)’ if KIND is present and
!      a default-kind ‘INTEGER’ otherwise.
  
  _Example_:
            program test_ceiling
*************** _See also_:
*** 9741,9751 ****
  
  File: gfortran.info,  Node: CHAR,  Next: CHDIR,  Prev: CEILING,  Up: Intrinsic Procedures
  
! 8.59 'CHAR' -- Character conversion function
  ============================================
  
  _Description_:
!      'CHAR(I [, KIND])' returns the character represented by the integer
       I.
  
  _Standard_:
--- 9741,9751 ----
  
  File: gfortran.info,  Node: CHAR,  Next: CHDIR,  Prev: CEILING,  Up: Intrinsic Procedures
  
! 8.59 ‘CHAR’ -- Character conversion function
  ============================================
  
  _Description_:
!      ‘CHAR(I [, KIND])’ returns the character represented by the integer
       I.
  
  _Standard_:
*************** _Class_:
*** 9755,9770 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = CHAR(I [, KIND])'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'CHARACTER(1)'
  
  _Example_:
            program test_char
--- 9755,9770 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = CHAR(I [, KIND])’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘CHARACTER(1)’
  
  _Example_:
            program test_char
*************** _Example_:
*** 9777,9783 ****
  _Specific names_:
       Name           Argument       Return type        Standard
       --------------------------------------------------------------------------
!      'CHAR(I)'      'INTEGER I'    'CHARACTER(LEN=1)' Fortran 77 and later
  
  _Note_:
       See *note ICHAR:: for a discussion of converting between numerical
--- 9777,9783 ----
  _Specific names_:
       Name           Argument       Return type        Standard
       --------------------------------------------------------------------------
!      ‘CHAR(I)’      ‘INTEGER I’    ‘CHARACTER(LEN=1)’ Fortran 77 and later
  
  _Note_:
       See *note ICHAR:: for a discussion of converting between numerical
*************** _See also_:
*** 9791,9797 ****
  
  File: gfortran.info,  Node: CHDIR,  Next: CHMOD,  Prev: CHAR,  Up: Intrinsic Procedures
  
! 8.60 'CHDIR' -- Change working directory
  ========================================
  
  _Description_:
--- 9791,9797 ----
  
  File: gfortran.info,  Node: CHDIR,  Next: CHMOD,  Prev: CHAR,  Up: Intrinsic Procedures
  
! 8.60 ‘CHDIR’ -- Change working directory
  ========================================
  
  _Description_:
*************** _Class_:
*** 9807,9820 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL CHDIR(NAME [, STATUS])'
!      'STATUS = CHDIR(NAME)'
  
  _Arguments_:
!      NAME        The type shall be 'CHARACTER' of default kind
                   and shall specify a valid path within the file
                   system.
!      STATUS      (Optional) 'INTEGER' status flag of the default
                   kind.  Returns 0 on success, and a system
                   specific and nonzero error code otherwise.
  
--- 9807,9820 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL CHDIR(NAME [, STATUS])’
!      ‘STATUS = CHDIR(NAME)’
  
  _Arguments_:
!      NAME        The type shall be ‘CHARACTER’ of default kind
                   and shall specify a valid path within the file
                   system.
!      STATUS      (Optional) ‘INTEGER’ status flag of the default
                   kind.  Returns 0 on success, and a system
                   specific and nonzero error code otherwise.
  
*************** _See also_:
*** 9834,9844 ****
  
  File: gfortran.info,  Node: CHMOD,  Next: CMPLX,  Prev: CHDIR,  Up: Intrinsic Procedures
  
! 8.61 'CHMOD' -- Change access permissions of files
  ==================================================
  
  _Description_:
!      'CHMOD' changes the permissions of a file.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 9834,9844 ----
  
  File: gfortran.info,  Node: CHMOD,  Next: CMPLX,  Prev: CHDIR,  Up: Intrinsic Procedures
  
! 8.61 ‘CHMOD’ -- Change access permissions of files
  ==================================================
  
  _Description_:
!      ‘CHMOD’ changes the permissions of a file.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 9850,9889 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL CHMOD(NAME, MODE[, STATUS])'
!      'STATUS = CHMOD(NAME, MODE)'
  
  _Arguments_:
  
!      NAME        Scalar 'CHARACTER' of default kind with the file
                   name.  Trailing blanks are ignored unless the
!                  character 'achar(0)' is present, then all
!                  characters up to and excluding 'achar(0)' are
                   used as the file name.
                   
!      MODE        Scalar 'CHARACTER' of default kind giving the
                   file permission.  MODE uses the same syntax as
!                  the 'chmod' utility as defined by the POSIX
                   standard.  The argument shall either be a string
                   of a nonnegative octal number or a symbolic
                   mode.
                   
!      STATUS      (optional) scalar 'INTEGER', which is '0' on
                   success and nonzero otherwise.
  
  _Return value_:
!      In either syntax, STATUS is set to '0' on success and nonzero
       otherwise.
  
  _Example_:
!      'CHMOD' as subroutine
            program chmod_test
              implicit none
              integer :: status
              call chmod('test.dat','u+x',status)
              print *, 'Status: ', status
            end program chmod_test
!      'CHMOD' as function:
            program chmod_test
              implicit none
              integer :: status
--- 9850,9889 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL CHMOD(NAME, MODE[, STATUS])’
!      ‘STATUS = CHMOD(NAME, MODE)’
  
  _Arguments_:
  
!      NAME        Scalar ‘CHARACTER’ of default kind with the file
                   name.  Trailing blanks are ignored unless the
!                  character ‘achar(0)’ is present, then all
!                  characters up to and excluding ‘achar(0)’ are
                   used as the file name.
                   
!      MODE        Scalar ‘CHARACTER’ of default kind giving the
                   file permission.  MODE uses the same syntax as
!                  the ‘chmod’ utility as defined by the POSIX
                   standard.  The argument shall either be a string
                   of a nonnegative octal number or a symbolic
                   mode.
                   
!      STATUS      (optional) scalar ‘INTEGER’, which is ‘0’ on
                   success and nonzero otherwise.
  
  _Return value_:
!      In either syntax, STATUS is set to ‘0’ on success and nonzero
       otherwise.
  
  _Example_:
!      ‘CHMOD’ as subroutine
            program chmod_test
              implicit none
              integer :: status
              call chmod('test.dat','u+x',status)
              print *, 'Status: ', status
            end program chmod_test
!      ‘CHMOD’ as function:
            program chmod_test
              implicit none
              integer :: status
*************** _Example_:
*** 9894,9904 ****
  
  File: gfortran.info,  Node: CMPLX,  Next: CO_BROADCAST,  Prev: CHMOD,  Up: Intrinsic Procedures
  
! 8.62 'CMPLX' -- Complex conversion function
  ===========================================
  
  _Description_:
!      'CMPLX(X [, Y [, KIND]])' returns a complex number where X is
       converted to the real component.  If Y is present it is converted
       to the imaginary component.  If Y is not present then the imaginary
       component is set to 0.0.  If X is complex then Y must not be
--- 9894,9904 ----
  
  File: gfortran.info,  Node: CMPLX,  Next: CO_BROADCAST,  Prev: CHMOD,  Up: Intrinsic Procedures
  
! 8.62 ‘CMPLX’ -- Complex conversion function
  ===========================================
  
  _Description_:
!      ‘CMPLX(X [, Y [, KIND]])’ returns a complex number where X is
       converted to the real component.  If Y is present it is converted
       to the imaginary component.  If Y is not present then the imaginary
       component is set to 0.0.  If X is complex then Y must not be
*************** _Class_:
*** 9911,9930 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = CMPLX(X [, Y [, KIND]])'
  
  _Arguments_:
!      X           The type may be 'INTEGER', 'REAL', or 'COMPLEX'.
!      Y           (Optional; only allowed if X is not 'COMPLEX'.)
!                  May be 'INTEGER' or 'REAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of 'COMPLEX' type, with a kind equal to KIND if
       it is specified.  If KIND is not specified, the result is of the
!      default 'COMPLEX' kind, regardless of the kinds of X and Y.
  
  _Example_:
            program test_cmplx
--- 9911,9930 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = CMPLX(X [, Y [, KIND]])’
  
  _Arguments_:
!      X           The type may be ‘INTEGER’, ‘REAL’, or ‘COMPLEX’.
!      Y           (Optional; only allowed if X is not ‘COMPLEX’.)
!                  May be ‘INTEGER’ or ‘REAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of ‘COMPLEX’ type, with a kind equal to KIND if
       it is specified.  If KIND is not specified, the result is of the
!      default ‘COMPLEX’ kind, regardless of the kinds of X and Y.
  
  _Example_:
            program test_cmplx
*************** _See also_:
*** 9941,9952 ****
  
  File: gfortran.info,  Node: CO_BROADCAST,  Next: CO_MAX,  Prev: CMPLX,  Up: Intrinsic Procedures
  
! 8.63 'CO_BROADCAST' -- Copy a value to all images the current set of images
  ===========================================================================
  
  _Description_:
!      'CO_BROADCAST' copies the value of argument A on the image with
!      image index 'SOURCE_IMAGE' to all images in the current team.  A
       becomes defined as if by intrinsic assignment.  If the execution
       was successful and STAT is present, it is assigned the value zero.
       If the execution failed, STAT gets assigned a nonzero value and, if
--- 9941,9952 ----
  
  File: gfortran.info,  Node: CO_BROADCAST,  Next: CO_MAX,  Prev: CMPLX,  Up: Intrinsic Procedures
  
! 8.63 ‘CO_BROADCAST’ -- Copy a value to all images the current set of images
  ===========================================================================
  
  _Description_:
!      ‘CO_BROADCAST’ copies the value of argument A on the image with
!      image index ‘SOURCE_IMAGE’ to all images in the current team.  A
       becomes defined as if by intrinsic assignment.  If the execution
       was successful and STAT is present, it is assigned the value zero.
       If the execution failed, STAT gets assigned a nonzero value and, if
*************** _Class_:
*** 9960,9966 ****
       Collective subroutine
  
  _Syntax_:
!      'CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])'
  
  _Arguments_:
       A              INTENT(INOUT) argument; shall have the same
--- 9960,9966 ----
       Collective subroutine
  
  _Syntax_:
!      ‘CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])’
  
  _Arguments_:
       A              INTENT(INOUT) argument; shall have the same
*************** _See also_:
*** 9993,10003 ****
  
  File: gfortran.info,  Node: CO_MAX,  Next: CO_MIN,  Prev: CO_BROADCAST,  Up: Intrinsic Procedures
  
! 8.64 'CO_MAX' -- Maximal value on the current set of images
  ===========================================================
  
  _Description_:
!      'CO_MAX' determines element-wise the maximal value of A on all
       images of the current team.  If RESULT_IMAGE is present, the
       maximum values are returned in A on the specified image only and
       the value of A on the other images become undefined.  If
--- 9993,10003 ----
  
  File: gfortran.info,  Node: CO_MAX,  Next: CO_MIN,  Prev: CO_BROADCAST,  Up: Intrinsic Procedures
  
! 8.64 ‘CO_MAX’ -- Maximal value on the current set of images
  ===========================================================
  
  _Description_:
!      ‘CO_MAX’ determines element-wise the maximal value of A on all
       images of the current team.  If RESULT_IMAGE is present, the
       maximum values are returned in A on the specified image only and
       the value of A on the other images become undefined.  If
*************** _Class_:
*** 10014,10020 ****
       Collective subroutine
  
  _Syntax_:
!      'CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])'
  
  _Arguments_:
       A              shall be an integer, real or character
--- 10014,10020 ----
       Collective subroutine
  
  _Syntax_:
!      ‘CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])’
  
  _Arguments_:
       A              shall be an integer, real or character
*************** _See also_:
*** 10046,10056 ****
  
  File: gfortran.info,  Node: CO_MIN,  Next: CO_REDUCE,  Prev: CO_MAX,  Up: Intrinsic Procedures
  
! 8.65 'CO_MIN' -- Minimal value on the current set of images
  ===========================================================
  
  _Description_:
!      'CO_MIN' determines element-wise the minimal value of A on all
       images of the current team.  If RESULT_IMAGE is present, the
       minimal values are returned in A on the specified image only and
       the value of A on the other images become undefined.  If
--- 10046,10056 ----
  
  File: gfortran.info,  Node: CO_MIN,  Next: CO_REDUCE,  Prev: CO_MAX,  Up: Intrinsic Procedures
  
! 8.65 ‘CO_MIN’ -- Minimal value on the current set of images
  ===========================================================
  
  _Description_:
!      ‘CO_MIN’ determines element-wise the minimal value of A on all
       images of the current team.  If RESULT_IMAGE is present, the
       minimal values are returned in A on the specified image only and
       the value of A on the other images become undefined.  If
*************** _Class_:
*** 10067,10073 ****
       Collective subroutine
  
  _Syntax_:
!      'CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])'
  
  _Arguments_:
       A              shall be an integer, real or character
--- 10067,10073 ----
       Collective subroutine
  
  _Syntax_:
!      ‘CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])’
  
  _Arguments_:
       A              shall be an integer, real or character
*************** _See also_:
*** 10099,10109 ****
  
  File: gfortran.info,  Node: CO_REDUCE,  Next: CO_SUM,  Prev: CO_MIN,  Up: Intrinsic Procedures
  
! 8.66 'CO_REDUCE' -- Reduction of values on the current set of images
  ====================================================================
  
  _Description_:
!      'CO_REDUCE' determines element-wise the reduction of the value of A
       on all images of the current team.  The pure function passed as
       OPERATION is used to pairwise reduce the values of A by passing
       either the value of A of different images or the result values of
--- 10099,10109 ----
  
  File: gfortran.info,  Node: CO_REDUCE,  Next: CO_SUM,  Prev: CO_MIN,  Up: Intrinsic Procedures
  
! 8.66 ‘CO_REDUCE’ -- Reduction of values on the current set of images
  ====================================================================
  
  _Description_:
!      ‘CO_REDUCE’ determines element-wise the reduction of the value of A
       on all images of the current team.  The pure function passed as
       OPERATION is used to pairwise reduce the values of A by passing
       either the value of A of different images or the result values of
*************** _Class_:
*** 10124,10133 ****
       Collective subroutine
  
  _Syntax_:
!      'CALL CO_REDUCE(A, OPERATION, [, RESULT_IMAGE, STAT, ERRMSG])'
  
  _Arguments_:
!      A              is an 'INTENT(INOUT)' argument and shall be
                      nonpolymorphic.  If it is allocatable, it
                      shall be allocated; if it is a pointer, it
                      shall be associated.  A shall have the same
--- 10124,10133 ----
       Collective subroutine
  
  _Syntax_:
!      ‘CALL CO_REDUCE(A, OPERATION, [, RESULT_IMAGE, STAT, ERRMSG])’
  
  _Arguments_:
!      A              is an ‘INTENT(INOUT)’ argument and shall be
                      nonpolymorphic.  If it is allocatable, it
                      shall be allocated; if it is a pointer, it
                      shall be associated.  A shall have the same
*************** _See also_:
*** 10182,10192 ****
  
  File: gfortran.info,  Node: CO_SUM,  Next: COMMAND_ARGUMENT_COUNT,  Prev: CO_REDUCE,  Up: Intrinsic Procedures
  
! 8.67 'CO_SUM' -- Sum of values on the current set of images
  ===========================================================
  
  _Description_:
!      'CO_SUM' sums up the values of each element of A on all images of
       the current team.  If RESULT_IMAGE is present, the summed-up values
       are returned in A on the specified image only and the value of A on
       the other images become undefined.  If RESULT_IMAGE is not present,
--- 10182,10192 ----
  
  File: gfortran.info,  Node: CO_SUM,  Next: COMMAND_ARGUMENT_COUNT,  Prev: CO_REDUCE,  Up: Intrinsic Procedures
  
! 8.67 ‘CO_SUM’ -- Sum of values on the current set of images
  ===========================================================
  
  _Description_:
!      ‘CO_SUM’ sums up the values of each element of A on all images of
       the current team.  If RESULT_IMAGE is present, the summed-up values
       are returned in A on the specified image only and the value of A on
       the other images become undefined.  If RESULT_IMAGE is not present,
*************** _Class_:
*** 10203,10209 ****
       Collective subroutine
  
  _Syntax_:
!      'CALL CO_SUM(A [, RESULT_IMAGE, STAT, ERRMSG])'
  
  _Arguments_:
       A              shall be an integer, real or complex
--- 10203,10209 ----
       Collective subroutine
  
  _Syntax_:
!      ‘CALL CO_SUM(A [, RESULT_IMAGE, STAT, ERRMSG])’
  
  _Arguments_:
       A              shall be an integer, real or complex
*************** _See also_:
*** 10236,10246 ****
  
  File: gfortran.info,  Node: COMMAND_ARGUMENT_COUNT,  Next: COMPILER_OPTIONS,  Prev: CO_SUM,  Up: Intrinsic Procedures
  
! 8.68 'COMMAND_ARGUMENT_COUNT' -- Get number of command line arguments
  =====================================================================
  
  _Description_:
!      'COMMAND_ARGUMENT_COUNT' returns the number of arguments passed on
       the command line when the containing program was invoked.
  
  _Standard_:
--- 10236,10246 ----
  
  File: gfortran.info,  Node: COMMAND_ARGUMENT_COUNT,  Next: COMPILER_OPTIONS,  Prev: CO_SUM,  Up: Intrinsic Procedures
  
! 8.68 ‘COMMAND_ARGUMENT_COUNT’ -- Get number of command line arguments
  =====================================================================
  
  _Description_:
!      ‘COMMAND_ARGUMENT_COUNT’ returns the number of arguments passed on
       the command line when the containing program was invoked.
  
  _Standard_:
*************** _Class_:
*** 10250,10262 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = COMMAND_ARGUMENT_COUNT()'
  
  _Arguments_:
       None
  
  _Return value_:
!      The return value is an 'INTEGER' of default kind.
  
  _Example_:
            program test_command_argument_count
--- 10250,10262 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = COMMAND_ARGUMENT_COUNT()’
  
  _Arguments_:
       None
  
  _Return value_:
!      The return value is an ‘INTEGER’ of default kind.
  
  _Example_:
            program test_command_argument_count
*************** _See also_:
*** 10272,10292 ****
  
  File: gfortran.info,  Node: COMPILER_OPTIONS,  Next: COMPILER_VERSION,  Prev: COMMAND_ARGUMENT_COUNT,  Up: Intrinsic Procedures
  
! 8.69 'COMPILER_OPTIONS' -- Options passed to the compiler
  =========================================================
  
  _Description_:
!      'COMPILER_OPTIONS' returns a string with the options used for
       compiling.
  
  _Standard_:
       Fortran 2008
  
  _Class_:
!      Inquiry function of the module 'ISO_FORTRAN_ENV'
  
  _Syntax_:
!      'STR = COMPILER_OPTIONS()'
  
  _Arguments_:
       None
--- 10272,10292 ----
  
  File: gfortran.info,  Node: COMPILER_OPTIONS,  Next: COMPILER_VERSION,  Prev: COMMAND_ARGUMENT_COUNT,  Up: Intrinsic Procedures
  
! 8.69 ‘COMPILER_OPTIONS’ -- Options passed to the compiler
  =========================================================
  
  _Description_:
!      ‘COMPILER_OPTIONS’ returns a string with the options used for
       compiling.
  
  _Standard_:
       Fortran 2008
  
  _Class_:
!      Inquiry function of the module ‘ISO_FORTRAN_ENV’
  
  _Syntax_:
!      ‘STR = COMPILER_OPTIONS()’
  
  _Arguments_:
       None
*************** _Arguments_:
*** 10294,10300 ****
  _Return value_:
       The return value is a default-kind string with system-dependent
       length.  It contains the compiler flags used to compile the file,
!      which called the 'COMPILER_OPTIONS' intrinsic.
  
  _Example_:
               use iso_fortran_env
--- 10294,10300 ----
  _Return value_:
       The return value is a default-kind string with system-dependent
       length.  It contains the compiler flags used to compile the file,
!      which called the ‘COMPILER_OPTIONS’ intrinsic.
  
  _Example_:
               use iso_fortran_env
*************** _See also_:
*** 10310,10330 ****
  
  File: gfortran.info,  Node: COMPILER_VERSION,  Next: COMPLEX,  Prev: COMPILER_OPTIONS,  Up: Intrinsic Procedures
  
! 8.70 'COMPILER_VERSION' -- Compiler version string
  ==================================================
  
  _Description_:
!      'COMPILER_VERSION' returns a string with the name and the version
       of the compiler.
  
  _Standard_:
       Fortran 2008
  
  _Class_:
!      Inquiry function of the module 'ISO_FORTRAN_ENV'
  
  _Syntax_:
!      'STR = COMPILER_VERSION()'
  
  _Arguments_:
       None
--- 10310,10330 ----
  
  File: gfortran.info,  Node: COMPILER_VERSION,  Next: COMPLEX,  Prev: COMPILER_OPTIONS,  Up: Intrinsic Procedures
  
! 8.70 ‘COMPILER_VERSION’ -- Compiler version string
  ==================================================
  
  _Description_:
!      ‘COMPILER_VERSION’ returns a string with the name and the version
       of the compiler.
  
  _Standard_:
       Fortran 2008
  
  _Class_:
!      Inquiry function of the module ‘ISO_FORTRAN_ENV’
  
  _Syntax_:
!      ‘STR = COMPILER_VERSION()’
  
  _Arguments_:
       None
*************** _See also_:
*** 10348,10358 ****
  
  File: gfortran.info,  Node: COMPLEX,  Next: CONJG,  Prev: COMPILER_VERSION,  Up: Intrinsic Procedures
  
! 8.71 'COMPLEX' -- Complex conversion function
  =============================================
  
  _Description_:
!      'COMPLEX(X, Y)' returns a complex number where X is converted to
       the real component and Y is converted to the imaginary component.
  
  _Standard_:
--- 10348,10358 ----
  
  File: gfortran.info,  Node: COMPLEX,  Next: CONJG,  Prev: COMPILER_VERSION,  Up: Intrinsic Procedures
  
! 8.71 ‘COMPLEX’ -- Complex conversion function
  =============================================
  
  _Description_:
!      ‘COMPLEX(X, Y)’ returns a complex number where X is converted to
       the real component and Y is converted to the imaginary component.
  
  _Standard_:
*************** _Class_:
*** 10362,10380 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = COMPLEX(X, Y)'
  
  _Arguments_:
!      X           The type may be 'INTEGER' or 'REAL'.
!      Y           The type may be 'INTEGER' or 'REAL'.
  
  _Return value_:
!      If X and Y are both of 'INTEGER' type, then the return value is of
!      default 'COMPLEX' type.
  
!      If X and Y are of 'REAL' type, or one is of 'REAL' type and one is
!      of 'INTEGER' type, then the return value is of 'COMPLEX' type with
!      a kind equal to that of the 'REAL' argument with the highest
       precision.
  
  _Example_:
--- 10362,10380 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = COMPLEX(X, Y)’
  
  _Arguments_:
!      X           The type may be ‘INTEGER’ or ‘REAL’.
!      Y           The type may be ‘INTEGER’ or ‘REAL’.
  
  _Return value_:
!      If X and Y are both of ‘INTEGER’ type, then the return value is of
!      default ‘COMPLEX’ type.
  
!      If X and Y are of ‘REAL’ type, or one is of ‘REAL’ type and one is
!      of ‘INTEGER’ type, then the return value is of ‘COMPLEX’ type with
!      a kind equal to that of the ‘REAL’ argument with the highest
       precision.
  
  _Example_:
*************** _See also_:
*** 10390,10401 ****
  
  File: gfortran.info,  Node: CONJG,  Next: COS,  Prev: COMPLEX,  Up: Intrinsic Procedures
  
! 8.72 'CONJG' -- Complex conjugate function
  ==========================================
  
  _Description_:
!      'CONJG(Z)' returns the conjugate of Z.  If Z is '(x, y)' then the
!      result is '(x, -y)'
  
  _Standard_:
       Fortran 77 and later, has an overload that is a GNU extension
--- 10390,10401 ----
  
  File: gfortran.info,  Node: CONJG,  Next: COS,  Prev: COMPLEX,  Up: Intrinsic Procedures
  
! 8.72 ‘CONJG’ -- Complex conjugate function
  ==========================================
  
  _Description_:
!      ‘CONJG(Z)’ returns the conjugate of Z.  If Z is ‘(x, y)’ then the
!      result is ‘(x, -y)’
  
  _Standard_:
       Fortran 77 and later, has an overload that is a GNU extension
*************** _Class_:
*** 10404,10416 ****
       Elemental function
  
  _Syntax_:
!      'Z = CONJG(Z)'
  
  _Arguments_:
!      Z           The type shall be 'COMPLEX'.
  
  _Return value_:
!      The return value is of type 'COMPLEX'.
  
  _Example_:
            program test_conjg
--- 10404,10416 ----
       Elemental function
  
  _Syntax_:
!      ‘Z = CONJG(Z)’
  
  _Arguments_:
!      Z           The type shall be ‘COMPLEX’.
  
  _Return value_:
!      The return value is of type ‘COMPLEX’.
  
  _Example_:
            program test_conjg
*************** _Example_:
*** 10425,10440 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DCONJG(Z)'    'COMPLEX(8) Z'    'COMPLEX(8)'   GNU extension
  
  
  File: gfortran.info,  Node: COS,  Next: COSD,  Prev: CONJG,  Up: Intrinsic Procedures
  
! 8.73 'COS' -- Cosine function
  =============================
  
  _Description_:
!      'COS(X)' computes the cosine of X.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
--- 10425,10440 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DCONJG(Z)’    ‘COMPLEX(8) Z’    ‘COMPLEX(8)’   GNU extension
  
  
  File: gfortran.info,  Node: COS,  Next: COSD,  Prev: CONJG,  Up: Intrinsic Procedures
  
! 8.73 ‘COS’ -- Cosine function
  =============================
  
  _Description_:
!      ‘COS(X)’ computes the cosine of X.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
*************** _Class_:
*** 10443,10456 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = COS(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real part
!      of the result is in radians.  If X is of the type 'REAL', the
       return value lies in the range -1 \leq \cos (x) \leq 1.
  
  _Example_:
--- 10443,10456 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = COS(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real part
!      of the result is in radians.  If X is of the type ‘REAL’, the
       return value lies in the range -1 \leq \cos (x) \leq 1.
  
  _Example_:
*************** _Example_:
*** 10462,10472 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'COS(X)'       'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DCOS(X)'      'REAL(8) X'       'REAL(8)'      Fortran 77 and later
!      'CCOS(X)'      'COMPLEX(4) X'    'COMPLEX(4)'   Fortran 77 and later
!      'ZCOS(X)'      'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDCOS(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  _See also_:
       Inverse function:
--- 10462,10472 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘COS(X)’       ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DCOS(X)’      ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
!      ‘CCOS(X)’      ‘COMPLEX(4) X’    ‘COMPLEX(4)’   Fortran 77 and later
!      ‘ZCOS(X)’      ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDCOS(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 10477,10487 ****
  
  File: gfortran.info,  Node: COSD,  Next: COSH,  Prev: COS,  Up: Intrinsic Procedures
  
! 8.74 'COSD' -- Cosine function, degrees
  =======================================
  
  _Description_:
!      'COSD(X)' computes the cosine of X in degrees.
  
  _Standard_:
       Fortran 2023
--- 10477,10487 ----
  
  File: gfortran.info,  Node: COSD,  Next: COSH,  Prev: COS,  Up: Intrinsic Procedures
  
! 8.74 ‘COSD’ -- Cosine function, degrees
  =======================================
  
  _Description_:
!      ‘COSD(X)’ computes the cosine of X in degrees.
  
  _Standard_:
       Fortran 2023
*************** _Class_:
*** 10490,10499 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = COSD(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
       The return value is of the same type and kind as X and lies in the
--- 10490,10499 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = COSD(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
       The return value is of the same type and kind as X and lies in the
*************** _Example_:
*** 10508,10518 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'COSD(X)'      'REAL(4) X'       'REAL(4)'      Fortran 2023
!      'DCOSD(X)'     'REAL(8) X'       'REAL(8)'      GNU extension
!      'CCOSD(X)'     'COMPLEX(4) X'    'COMPLEX(4)'   GNU extension
!      'ZCOSD(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDCOSD(X)'    'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  _See also_:
       Inverse function:
--- 10508,10518 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘COSD(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 2023
!      ‘DCOSD(X)’     ‘REAL(8) X’       ‘REAL(8)’      GNU extension
!      ‘CCOSD(X)’     ‘COMPLEX(4) X’    ‘COMPLEX(4)’   GNU extension
!      ‘ZCOSD(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDCOSD(X)’    ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 10523,10533 ****
  
  File: gfortran.info,  Node: COSH,  Next: COTAN,  Prev: COSD,  Up: Intrinsic Procedures
  
! 8.75 'COSH' -- Hyperbolic cosine function
  =========================================
  
  _Description_:
!      'COSH(X)' computes the hyperbolic cosine of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
--- 10523,10533 ----
  
  File: gfortran.info,  Node: COSH,  Next: COTAN,  Prev: COSD,  Up: Intrinsic Procedures
  
! 8.75 ‘COSH’ -- Hyperbolic cosine function
  =========================================
  
  _Description_:
!      ‘COSH(X)’ computes the hyperbolic cosine of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
*************** _Class_:
*** 10536,10549 ****
       Elemental function
  
  _Syntax_:
!      'X = COSH(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X.  If X is complex, the
!      imaginary part of the result is in radians.  If X is 'REAL', the
       return value has a lower bound of one, \cosh (x) \geq 1.
  
  _Example_:
--- 10536,10549 ----
       Elemental function
  
  _Syntax_:
!      ‘X = COSH(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X.  If X is complex, the
!      imaginary part of the result is in radians.  If X is ‘REAL’, the
       return value has a lower bound of one, \cosh (x) \geq 1.
  
  _Example_:
*************** _Example_:
*** 10555,10562 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'COSH(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DCOSH(X)'     'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  _See also_:
       Inverse function:
--- 10555,10562 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘COSH(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DCOSH(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 10565,10591 ****
  
  File: gfortran.info,  Node: COTAN,  Next: COTAND,  Prev: COSH,  Up: Intrinsic Procedures
  
! 8.76 'COTAN' -- Cotangent function
  ==================================
  
  _Description_:
!      'COTAN(X)' computes the cotangent of X.  Equivalent to 'COS(x)'
!      divided by 'SIN(x)', or '1 / TAN(x)'.
  
       This function is for compatibility only and should be avoided in
       favor of standard constructs wherever possible.
  
  _Standard_:
!      GNU extension, enabled with '-fdec-math'.
  
  _Class_:
       Elemental function
  
  _Syntax_:
!      'RESULT = COTAN(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
--- 10565,10591 ----
  
  File: gfortran.info,  Node: COTAN,  Next: COTAND,  Prev: COSH,  Up: Intrinsic Procedures
  
! 8.76 ‘COTAN’ -- Cotangent function
  ==================================
  
  _Description_:
!      ‘COTAN(X)’ computes the cotangent of X.  Equivalent to ‘COS(x)’
!      divided by ‘SIN(x)’, or ‘1 / TAN(x)’.
  
       This function is for compatibility only and should be avoided in
       favor of standard constructs wherever possible.
  
  _Standard_:
!      GNU extension, enabled with ‘-fdec-math’.
  
  _Class_:
       Elemental function
  
  _Syntax_:
!      ‘RESULT = COTAN(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
*************** _Example_:
*** 10600,10607 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'COTAN(X)'     'REAL(4) X'       'REAL(4)'      GNU extension
!      'DCOTAN(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Converse function:
--- 10600,10607 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘COTAN(X)’     ‘REAL(4) X’       ‘REAL(4)’      GNU extension
!      ‘DCOTAN(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Converse function:
*************** _See also_:
*** 10612,10623 ****
  
  File: gfortran.info,  Node: COTAND,  Next: COUNT,  Prev: COTAN,  Up: Intrinsic Procedures
  
! 8.77 'COTAND' -- Cotangent function, degrees
  ============================================
  
  _Description_:
!      'COTAND(X)' computes the cotangent of X in degrees.  Equivalent to
!      'COSD(x)' divided by 'SIND(x)', or '1 / TAND(x)'.
  
  _Standard_:
       GNU extension.
--- 10612,10623 ----
  
  File: gfortran.info,  Node: COTAND,  Next: COUNT,  Prev: COTAN,  Up: Intrinsic Procedures
  
! 8.77 ‘COTAND’ -- Cotangent function, degrees
  ============================================
  
  _Description_:
!      ‘COTAND(X)’ computes the cotangent of X in degrees.  Equivalent to
!      ‘COSD(x)’ divided by ‘SIND(x)’, or ‘1 / TAND(x)’.
  
  _Standard_:
       GNU extension.
*************** _Class_:
*** 10629,10638 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = COTAND(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
--- 10629,10638 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = COTAND(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
*************** _Example_:
*** 10647,10654 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'COTAND(X)'    'REAL(4) X'       'REAL(4)'      GNU extension
!      'DCOTAND(X)'   'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Converse function:
--- 10647,10654 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘COTAND(X)’    ‘REAL(4) X’       ‘REAL(4)’      GNU extension
!      ‘DCOTAND(X)’   ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Converse function:
*************** _See also_:
*** 10659,10674 ****
  
  File: gfortran.info,  Node: COUNT,  Next: CPU_TIME,  Prev: COTAND,  Up: Intrinsic Procedures
  
! 8.78 'COUNT' -- Count function
  ==============================
  
  _Description_:
  
!      Counts the number of '.TRUE.' elements in a logical MASK, or, if
       the DIM argument is supplied, counts the number of elements along
       each row of the array in the DIM direction.  If the array has zero
!      size, or all of the elements of MASK are '.FALSE.', then the result
!      is '0'.
  
  _Standard_:
       Fortran 90 and later, with KIND argument Fortran 2003 and later
--- 10659,10674 ----
  
  File: gfortran.info,  Node: COUNT,  Next: CPU_TIME,  Prev: COTAND,  Up: Intrinsic Procedures
  
! 8.78 ‘COUNT’ -- Count function
  ==============================
  
  _Description_:
  
!      Counts the number of ‘.TRUE.’ elements in a logical MASK, or, if
       the DIM argument is supplied, counts the number of elements along
       each row of the array in the DIM direction.  If the array has zero
!      size, or all of the elements of MASK are ‘.FALSE.’, then the result
!      is ‘0’.
  
  _Standard_:
       Fortran 90 and later, with KIND argument Fortran 2003 and later
*************** _Class_:
*** 10677,10693 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = COUNT(MASK [, DIM, KIND])'
  
  _Arguments_:
!      MASK        The type shall be 'LOGICAL'.
!      DIM         (Optional) The type shall be 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       present, the result is an array with a rank one less than the rank
       of ARRAY, and a size corresponding to the shape of ARRAY with the
--- 10677,10693 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = COUNT(MASK [, DIM, KIND])’
  
  _Arguments_:
!      MASK        The type shall be ‘LOGICAL’.
!      DIM         (Optional) The type shall be ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       present, the result is an array with a rank one less than the rank
       of ARRAY, and a size corresponding to the shape of ARRAY with the
*************** _Example_:
*** 10719,10738 ****
  
  File: gfortran.info,  Node: CPU_TIME,  Next: CSHIFT,  Prev: COUNT,  Up: Intrinsic Procedures
  
! 8.79 'CPU_TIME' -- CPU elapsed time in seconds
  ==============================================
  
  _Description_:
!      Returns a 'REAL' value representing the elapsed CPU time in
       seconds.  This is useful for testing segments of code to determine
       execution time.
  
       If a time source is available, time will be reported with
       microsecond resolution.  If no time source is available, TIME is
!      set to '-1.0'.
  
       Note that TIME may contain a, system dependent, arbitrary offset
!      and may not start with '0.0'.  For 'CPU_TIME', the absolute value
       is meaningless, only differences between subsequent calls to this
       subroutine, as shown in the example below, should be used.
  
--- 10719,10738 ----
  
  File: gfortran.info,  Node: CPU_TIME,  Next: CSHIFT,  Prev: COUNT,  Up: Intrinsic Procedures
  
! 8.79 ‘CPU_TIME’ -- CPU elapsed time in seconds
  ==============================================
  
  _Description_:
!      Returns a ‘REAL’ value representing the elapsed CPU time in
       seconds.  This is useful for testing segments of code to determine
       execution time.
  
       If a time source is available, time will be reported with
       microsecond resolution.  If no time source is available, TIME is
!      set to ‘-1.0’.
  
       Note that TIME may contain a, system dependent, arbitrary offset
!      and may not start with ‘0.0’.  For ‘CPU_TIME’, the absolute value
       is meaningless, only differences between subsequent calls to this
       subroutine, as shown in the example below, should be used.
  
*************** _Class_:
*** 10743,10752 ****
       Subroutine
  
  _Syntax_:
!      'CALL CPU_TIME(TIME)'
  
  _Arguments_:
!      TIME        The type shall be 'REAL' with 'INTENT(OUT)'.
  
  _Return value_:
       None
--- 10743,10752 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL CPU_TIME(TIME)’
  
  _Arguments_:
!      TIME        The type shall be ‘REAL’ with ‘INTENT(OUT)’.
  
  _Return value_:
       None
*************** _See also_:
*** 10767,10779 ****
  
  File: gfortran.info,  Node: CSHIFT,  Next: CTIME,  Prev: CPU_TIME,  Up: Intrinsic Procedures
  
! 8.80 'CSHIFT' -- Circular shift elements of an array
  ====================================================
  
  _Description_:
!      'CSHIFT(ARRAY, SHIFT [, DIM])' performs a circular shift on
       elements of ARRAY along the dimension of DIM.  If DIM is omitted it
!      is taken to be '1'.  DIM is a scalar of type 'INTEGER' in the range
       of 1 \leq DIM \leq n) where n is the rank of ARRAY.  If the rank of
       ARRAY is one, then all elements of ARRAY are shifted by SHIFT
       places.  If rank is greater than one, then all complete rank one
--- 10767,10779 ----
  
  File: gfortran.info,  Node: CSHIFT,  Next: CTIME,  Prev: CPU_TIME,  Up: Intrinsic Procedures
  
! 8.80 ‘CSHIFT’ -- Circular shift elements of an array
  ====================================================
  
  _Description_:
!      ‘CSHIFT(ARRAY, SHIFT [, DIM])’ performs a circular shift on
       elements of ARRAY along the dimension of DIM.  If DIM is omitted it
!      is taken to be ‘1’.  DIM is a scalar of type ‘INTEGER’ in the range
       of 1 \leq DIM \leq n) where n is the rank of ARRAY.  If the rank of
       ARRAY is one, then all elements of ARRAY are shifted by SHIFT
       places.  If rank is greater than one, then all complete rank one
*************** _Class_:
*** 10788,10799 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = CSHIFT(ARRAY, SHIFT [, DIM])'
  
  _Arguments_:
       ARRAY       Shall be an array of any type.
!      SHIFT       The type shall be 'INTEGER'.
!      DIM         The type shall be 'INTEGER'.
  
  _Return value_:
       Returns an array of same type and rank as the ARRAY argument.
--- 10788,10799 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = CSHIFT(ARRAY, SHIFT [, DIM])’
  
  _Arguments_:
       ARRAY       Shall be an array of any type.
!      SHIFT       The type shall be ‘INTEGER’.
!      DIM         The type shall be ‘INTEGER’.
  
  _Return value_:
       Returns an array of same type and rank as the ARRAY argument.
*************** _Example_:
*** 10815,10827 ****
  
  File: gfortran.info,  Node: CTIME,  Next: DATE_AND_TIME,  Prev: CSHIFT,  Up: Intrinsic Procedures
  
! 8.81 'CTIME' -- Convert a time into a string
  ============================================
  
  _Description_:
!      'CTIME' converts a system time value, such as returned by *note
!      TIME8::, to a string.  The output will be of the form 'Sat Aug 19
!      18:13:14 1995'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 10815,10827 ----
  
  File: gfortran.info,  Node: CTIME,  Next: DATE_AND_TIME,  Prev: CSHIFT,  Up: Intrinsic Procedures
  
! 8.81 ‘CTIME’ -- Convert a time into a string
  ============================================
  
  _Description_:
!      ‘CTIME’ converts a system time value, such as returned by *note
!      TIME8::, to a string.  The output will be of the form ‘Sat Aug 19
!      18:13:14 1995’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 10833,10845 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL CTIME(TIME, RESULT)'.
!      'RESULT = CTIME(TIME)'.
  
  _Arguments_:
!      TIME        The type shall be of type 'INTEGER'.
!      RESULT      The type shall be of type 'CHARACTER' and of
!                  default kind.  It is an 'INTENT(OUT)' argument.
                   If the length of this variable is too short for
                   the time and date string to fit completely, it
                   will be blank on procedure return.
--- 10833,10845 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL CTIME(TIME, RESULT)’.
!      ‘RESULT = CTIME(TIME)’.
  
  _Arguments_:
!      TIME        The type shall be of type ‘INTEGER’.
!      RESULT      The type shall be of type ‘CHARACTER’ and of
!                  default kind.  It is an ‘INTENT(OUT)’ argument.
                   If the length of this variable is too short for
                   the time and date string to fit completely, it
                   will be blank on procedure return.
*************** _See Also_:
*** 10869,10896 ****
  
  File: gfortran.info,  Node: DATE_AND_TIME,  Next: DBLE,  Prev: CTIME,  Up: Intrinsic Procedures
  
! 8.82 'DATE_AND_TIME' -- Date and time subroutine
  ================================================
  
  _Description_:
!      'DATE_AND_TIME(DATE, TIME, ZONE, VALUES)' gets the corresponding
       date and time information from the real-time system clock.  DATE is
!      'INTENT(OUT)' and of the form ccyymmdd.  TIME is 'INTENT(OUT)' and
!      of the form hhmmss.sss.  ZONE is 'INTENT(OUT)' and of the form
       (+-)hhmm, representing the difference with respect to Coordinated
       Universal Time (UTC). Unavailable time and date parameters return
       blanks.
  
!      VALUES is 'INTENT(OUT)' and provides the following:
  
!      'VALUES(1)':The year, including the century
!      'VALUES(2)':The month of the year
!      'VALUES(3)':The day of the month
!      'VALUES(4)':The time difference from UTC in minutes
!      'VALUES(5)':The hour of the day
!      'VALUES(6)':The minutes of the hour
!      'VALUES(7)':The seconds of the minute
!      'VALUES(8)':The milliseconds of the second
  
  _Standard_:
       Fortran 90 and later
--- 10869,10896 ----
  
  File: gfortran.info,  Node: DATE_AND_TIME,  Next: DBLE,  Prev: CTIME,  Up: Intrinsic Procedures
  
! 8.82 ‘DATE_AND_TIME’ -- Date and time subroutine
  ================================================
  
  _Description_:
!      ‘DATE_AND_TIME(DATE, TIME, ZONE, VALUES)’ gets the corresponding
       date and time information from the real-time system clock.  DATE is
!      ‘INTENT(OUT)’ and of the form ccyymmdd.  TIME is ‘INTENT(OUT)’ and
!      of the form hhmmss.sss.  ZONE is ‘INTENT(OUT)’ and of the form
       (+-)hhmm, representing the difference with respect to Coordinated
       Universal Time (UTC). Unavailable time and date parameters return
       blanks.
  
!      VALUES is ‘INTENT(OUT)’ and provides the following:
  
!      ‘VALUES(1)’:The year, including the century
!      ‘VALUES(2)’:The month of the year
!      ‘VALUES(3)’:The day of the month
!      ‘VALUES(4)’:The time difference from UTC in minutes
!      ‘VALUES(5)’:The hour of the day
!      ‘VALUES(6)’:The minutes of the hour
!      ‘VALUES(7)’:The seconds of the minute
!      ‘VALUES(8)’:The milliseconds of the second
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 10899,10914 ****
       Subroutine
  
  _Syntax_:
!      'CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])'
  
  _Arguments_:
!      DATE        (Optional) Scalar of type default 'CHARACTER'.
                   Recommended length is 8 or larger.
!      TIME        (Optional) Scalar of type default 'CHARACTER'.
                   Recommended length is 10 or larger.
!      ZONE        (Optional) Scalar of type default 'CHARACTER'.
                   Recommended length is 5 or larger.
!      VALUES      (Optional) Rank-1 array of type 'INTEGER' with a
                   decimal exponent range of at least four and
                   array size at least 8.
  
--- 10899,10914 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])’
  
  _Arguments_:
!      DATE        (Optional) Scalar of type default ‘CHARACTER’.
                   Recommended length is 8 or larger.
!      TIME        (Optional) Scalar of type default ‘CHARACTER’.
                   Recommended length is 10 or larger.
!      ZONE        (Optional) Scalar of type default ‘CHARACTER’.
                   Recommended length is 5 or larger.
!      VALUES      (Optional) Rank-1 array of type ‘INTEGER’ with a
                   decimal exponent range of at least four and
                   array size at least 8.
  
*************** _See also_:
*** 10937,10947 ****
  
  File: gfortran.info,  Node: DBLE,  Next: DCMPLX,  Prev: DATE_AND_TIME,  Up: Intrinsic Procedures
  
! 8.83 'DBLE' -- Double conversion function
  =========================================
  
  _Description_:
!      'DBLE(A)' Converts A to double precision real type.
  
  _Standard_:
       Fortran 77 and later
--- 10937,10947 ----
  
  File: gfortran.info,  Node: DBLE,  Next: DCMPLX,  Prev: DATE_AND_TIME,  Up: Intrinsic Procedures
  
! 8.83 ‘DBLE’ -- Double conversion function
  =========================================
  
  _Description_:
!      ‘DBLE(A)’ Converts A to double precision real type.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 10950,10960 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DBLE(A)'
  
  _Arguments_:
!      A           The type shall be 'INTEGER', 'REAL', or
!                  'COMPLEX'.
  
  _Return value_:
       The return value is of type double precision real.
--- 10950,10960 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DBLE(A)’
  
  _Arguments_:
!      A           The type shall be ‘INTEGER’, ‘REAL’, or
!                  ‘COMPLEX’.
  
  _Return value_:
       The return value is of type double precision real.
*************** _See also_:
*** 10973,10983 ****
  
  File: gfortran.info,  Node: DCMPLX,  Next: DIGITS,  Prev: DBLE,  Up: Intrinsic Procedures
  
! 8.84 'DCMPLX' -- Double complex conversion function
  ===================================================
  
  _Description_:
!      'DCMPLX(X [,Y])' returns a double complex number where X is
       converted to the real component.  If Y is present it is converted
       to the imaginary component.  If Y is not present then the imaginary
       component is set to 0.0.  If X is complex then Y must not be
--- 10973,10983 ----
  
  File: gfortran.info,  Node: DCMPLX,  Next: DIGITS,  Prev: DBLE,  Up: Intrinsic Procedures
  
! 8.84 ‘DCMPLX’ -- Double complex conversion function
  ===================================================
  
  _Description_:
!      ‘DCMPLX(X [,Y])’ returns a double complex number where X is
       converted to the real component.  If Y is present it is converted
       to the imaginary component.  If Y is not present then the imaginary
       component is set to 0.0.  If X is complex then Y must not be
*************** _Class_:
*** 10990,11004 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DCMPLX(X [, Y])'
  
  _Arguments_:
!      X           The type may be 'INTEGER', 'REAL', or 'COMPLEX'.
!      Y           (Optional if X is not 'COMPLEX'.)  May be
!                  'INTEGER' or 'REAL'.
  
  _Return value_:
!      The return value is of type 'COMPLEX(8)'
  
  _Example_:
            program test_dcmplx
--- 10990,11004 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DCMPLX(X [, Y])’
  
  _Arguments_:
!      X           The type may be ‘INTEGER’, ‘REAL’, or ‘COMPLEX’.
!      Y           (Optional if X is not ‘COMPLEX’.)  May be
!                  ‘INTEGER’ or ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘COMPLEX(8)’
  
  _Example_:
            program test_dcmplx
*************** _Example_:
*** 11015,11025 ****
  
  File: gfortran.info,  Node: DIGITS,  Next: DIM,  Prev: DCMPLX,  Up: Intrinsic Procedures
  
! 8.85 'DIGITS' -- Significant binary digits function
  ===================================================
  
  _Description_:
!      'DIGITS(X)' returns the number of significant binary digits of the
       internal model representation of X.  For example, on a system using
       a 32-bit floating point representation, a default real number would
       likely return 24.
--- 11015,11025 ----
  
  File: gfortran.info,  Node: DIGITS,  Next: DIM,  Prev: DCMPLX,  Up: Intrinsic Procedures
  
! 8.85 ‘DIGITS’ -- Significant binary digits function
  ===================================================
  
  _Description_:
!      ‘DIGITS(X)’ returns the number of significant binary digits of the
       internal model representation of X.  For example, on a system using
       a 32-bit floating point representation, a default real number would
       likely return 24.
*************** _Class_:
*** 11031,11043 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = DIGITS(X)'
  
  _Arguments_:
!      X           The type may be 'INTEGER' or 'REAL'.
  
  _Return value_:
!      The return value is of type 'INTEGER'.
  
  _Example_:
            program test_digits
--- 11031,11043 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = DIGITS(X)’
  
  _Arguments_:
!      X           The type may be ‘INTEGER’ or ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’.
  
  _Example_:
            program test_digits
*************** _Example_:
*** 11052,11062 ****
  
  File: gfortran.info,  Node: DIM,  Next: DOT_PRODUCT,  Prev: DIGITS,  Up: Intrinsic Procedures
  
! 8.86 'DIM' -- Positive difference
  =================================
  
  _Description_:
!      'DIM(X,Y)' returns the difference 'X-Y' if the result is positive;
       otherwise returns zero.
  
  _Standard_:
--- 11052,11062 ----
  
  File: gfortran.info,  Node: DIM,  Next: DOT_PRODUCT,  Prev: DIGITS,  Up: Intrinsic Procedures
  
! 8.86 ‘DIM’ -- Positive difference
  =================================
  
  _Description_:
!      ‘DIM(X,Y)’ returns the difference ‘X-Y’ if the result is positive;
       otherwise returns zero.
  
  _Standard_:
*************** _Class_:
*** 11066,11081 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DIM(X, Y)'
  
  _Arguments_:
!      X           The type shall be 'INTEGER' or 'REAL'
       Y           The type shall be the same type and kind as X.
                   (As a GNU extension, arguments of different
                   kinds are permitted.)
  
  _Return value_:
!      The return value is of type 'INTEGER' or 'REAL'.  (As a GNU
       extension, kind is the largest kind of the actual arguments.)
  
  _Example_:
--- 11066,11081 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DIM(X, Y)’
  
  _Arguments_:
!      X           The type shall be ‘INTEGER’ or ‘REAL’
       Y           The type shall be the same type and kind as X.
                   (As a GNU extension, arguments of different
                   kinds are permitted.)
  
  _Return value_:
!      The return value is of type ‘INTEGER’ or ‘REAL’.  (As a GNU
       extension, kind is the largest kind of the actual arguments.)
  
  _Example_:
*************** _Example_:
*** 11091,11114 ****
  _Specific names_:
       Name           Argument            Return type    Standard
       -------------------------------------------------------------------------
!      'DIM(X,Y)'     'REAL(4) X, Y'      'REAL(4)'      Fortran 77 and later
!      'IDIM(X,Y)'    'INTEGER(4) X, Y'   'INTEGER(4)'   Fortran 77 and later
!      'DDIM(X,Y)'    'REAL(8) X, Y'      'REAL(8)'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: DOT_PRODUCT,  Next: DPROD,  Prev: DIM,  Up: Intrinsic Procedures
  
! 8.87 'DOT_PRODUCT' -- Dot product function
  ==========================================
  
  _Description_:
!      'DOT_PRODUCT(VECTOR_A, VECTOR_B)' computes the dot product
       multiplication of two vectors VECTOR_A and VECTOR_B.  The two
       vectors may be either numeric or logical and must be arrays of rank
!      one and of equal size.  If the vectors are 'INTEGER' or 'REAL', the
!      result is 'SUM(VECTOR_A*VECTOR_B)'.  If the vectors are 'COMPLEX',
!      the result is 'SUM(CONJG(VECTOR_A)*VECTOR_B)'.  If the vectors are
!      'LOGICAL', the result is 'ANY(VECTOR_A .AND. VECTOR_B)'.
  
  _Standard_:
       Fortran 90 and later
--- 11091,11114 ----
  _Specific names_:
       Name           Argument            Return type    Standard
       -------------------------------------------------------------------------
!      ‘DIM(X,Y)’     ‘REAL(4) X, Y’      ‘REAL(4)’      Fortran 77 and later
!      ‘IDIM(X,Y)’    ‘INTEGER(4) X, Y’   ‘INTEGER(4)’   Fortran 77 and later
!      ‘DDIM(X,Y)’    ‘REAL(8) X, Y’      ‘REAL(8)’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: DOT_PRODUCT,  Next: DPROD,  Prev: DIM,  Up: Intrinsic Procedures
  
! 8.87 ‘DOT_PRODUCT’ -- Dot product function
  ==========================================
  
  _Description_:
!      ‘DOT_PRODUCT(VECTOR_A, VECTOR_B)’ computes the dot product
       multiplication of two vectors VECTOR_A and VECTOR_B.  The two
       vectors may be either numeric or logical and must be arrays of rank
!      one and of equal size.  If the vectors are ‘INTEGER’ or ‘REAL’, the
!      result is ‘SUM(VECTOR_A*VECTOR_B)’.  If the vectors are ‘COMPLEX’,
!      the result is ‘SUM(CONJG(VECTOR_A)*VECTOR_B)’.  If the vectors are
!      ‘LOGICAL’, the result is ‘ANY(VECTOR_A .AND. VECTOR_B)’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 11117,11134 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)'
  
  _Arguments_:
!      VECTOR_A    The type shall be numeric or 'LOGICAL', rank 1.
       VECTOR_B    The type shall be numeric if VECTOR_A is of
!                  numeric type or 'LOGICAL' if VECTOR_A is of type
!                  'LOGICAL'.  VECTOR_B shall be a rank-one array.
  
  _Return value_:
       If the arguments are numeric, the return value is a scalar of
!      numeric type, 'INTEGER', 'REAL', or 'COMPLEX'.  If the arguments
!      are 'LOGICAL', the return value is '.TRUE.' or '.FALSE.'.
  
  _Example_:
            program test_dot_prod
--- 11117,11134 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)’
  
  _Arguments_:
!      VECTOR_A    The type shall be numeric or ‘LOGICAL’, rank 1.
       VECTOR_B    The type shall be numeric if VECTOR_A is of
!                  numeric type or ‘LOGICAL’ if VECTOR_A is of type
!                  ‘LOGICAL’.  VECTOR_B shall be a rank-one array.
  
  _Return value_:
       If the arguments are numeric, the return value is a scalar of
!      numeric type, ‘INTEGER’, ‘REAL’, or ‘COMPLEX’.  If the arguments
!      are ‘LOGICAL’, the return value is ‘.TRUE.’ or ‘.FALSE.’.
  
  _Example_:
            program test_dot_prod
*************** _Example_:
*** 11145,11155 ****
  
  File: gfortran.info,  Node: DPROD,  Next: DREAL,  Prev: DOT_PRODUCT,  Up: Intrinsic Procedures
  
! 8.88 'DPROD' -- Double product function
  =======================================
  
  _Description_:
!      'DPROD(X,Y)' returns the product 'X*Y'.
  
  _Standard_:
       Fortran 77 and later
--- 11145,11155 ----
  
  File: gfortran.info,  Node: DPROD,  Next: DREAL,  Prev: DOT_PRODUCT,  Up: Intrinsic Procedures
  
! 8.88 ‘DPROD’ -- Double product function
  =======================================
  
  _Description_:
!      ‘DPROD(X,Y)’ returns the product ‘X*Y’.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 11158,11171 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DPROD(X, Y)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
!      Y           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL(8)'.
  
  _Example_:
            program test_dprod
--- 11158,11171 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DPROD(X, Y)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
!      Y           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL(8)’.
  
  _Example_:
            program test_dprod
*************** _Example_:
*** 11179,11194 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DPROD(X,Y)'   'REAL(4) X, Y'    'REAL(8)'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: DREAL,  Next: DSHIFTL,  Prev: DPROD,  Up: Intrinsic Procedures
  
! 8.89 'DREAL' -- Double real part function
  =========================================
  
  _Description_:
!      'DREAL(Z)' returns the real part of complex variable Z.
  
  _Standard_:
       GNU extension
--- 11179,11194 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DPROD(X,Y)’   ‘REAL(4) X, Y’    ‘REAL(8)’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: DREAL,  Next: DSHIFTL,  Prev: DPROD,  Up: Intrinsic Procedures
  
! 8.89 ‘DREAL’ -- Double real part function
  =========================================
  
  _Description_:
!      ‘DREAL(Z)’ returns the real part of complex variable Z.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 11197,11209 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DREAL(A)'
  
  _Arguments_:
!      A           The type shall be 'COMPLEX(8)'.
  
  _Return value_:
!      The return value is of type 'REAL(8)'.
  
  _Example_:
            program test_dreal
--- 11197,11209 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DREAL(A)’
  
  _Arguments_:
!      A           The type shall be ‘COMPLEX(8)’.
  
  _Return value_:
!      The return value is of type ‘REAL(8)’.
  
  _Example_:
            program test_dreal
*************** _See also_:
*** 11217,11227 ****
  
  File: gfortran.info,  Node: DSHIFTL,  Next: DSHIFTR,  Prev: DREAL,  Up: Intrinsic Procedures
  
! 8.90 'DSHIFTL' -- Combined left shift
  =====================================
  
  _Description_:
!      'DSHIFTL(I, J, SHIFT)' combines bits of I and J.  The rightmost
       SHIFT bits of the result are the leftmost SHIFT bits of J, and the
       remaining bits are the rightmost bits of I.
  
--- 11217,11227 ----
  
  File: gfortran.info,  Node: DSHIFTL,  Next: DSHIFTR,  Prev: DREAL,  Up: Intrinsic Procedures
  
! 8.90 ‘DSHIFTL’ -- Combined left shift
  =====================================
  
  _Description_:
!      ‘DSHIFTL(I, J, SHIFT)’ combines bits of I and J.  The rightmost
       SHIFT bits of the result are the leftmost SHIFT bits of J, and the
       remaining bits are the rightmost bits of I.
  
*************** _Class_:
*** 11232,11254 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DSHIFTL(I, J, SHIFT)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER' or a BOZ constant.
!      J           Shall be of type 'INTEGER' or a BOZ constant.
                   If both I and J have integer type, then they
                   shall have the same kind type parameter.  I and
                   J shall not both be BOZ constants.
!      SHIFT       Shall be of type 'INTEGER'.  It shall be
                   nonnegative.  If I is not a BOZ constant, then
                   SHIFT shall be less than or equal to
!                  'BIT_SIZE(I)'; otherwise, SHIFT shall be less
!                  than or equal to 'BIT_SIZE(J)'.
  
  _Return value_:
       If either I or J is a BOZ constant, it is first converted as if by
!      the intrinsic function 'INT' to an integer type with the kind type
       parameter of the other.
  
  _See also_:
--- 11232,11254 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DSHIFTL(I, J, SHIFT)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’ or a BOZ constant.
!      J           Shall be of type ‘INTEGER’ or a BOZ constant.
                   If both I and J have integer type, then they
                   shall have the same kind type parameter.  I and
                   J shall not both be BOZ constants.
!      SHIFT       Shall be of type ‘INTEGER’.  It shall be
                   nonnegative.  If I is not a BOZ constant, then
                   SHIFT shall be less than or equal to
!                  ‘BIT_SIZE(I)’; otherwise, SHIFT shall be less
!                  than or equal to ‘BIT_SIZE(J)’.
  
  _Return value_:
       If either I or J is a BOZ constant, it is first converted as if by
!      the intrinsic function ‘INT’ to an integer type with the kind type
       parameter of the other.
  
  _See also_:
*************** _See also_:
*** 11257,11267 ****
  
  File: gfortran.info,  Node: DSHIFTR,  Next: DTIME,  Prev: DSHIFTL,  Up: Intrinsic Procedures
  
! 8.91 'DSHIFTR' -- Combined right shift
  ======================================
  
  _Description_:
!      'DSHIFTR(I, J, SHIFT)' combines bits of I and J.  The leftmost
       SHIFT bits of the result are the rightmost SHIFT bits of I, and the
       remaining bits are the leftmost bits of J.
  
--- 11257,11267 ----
  
  File: gfortran.info,  Node: DSHIFTR,  Next: DTIME,  Prev: DSHIFTL,  Up: Intrinsic Procedures
  
! 8.91 ‘DSHIFTR’ -- Combined right shift
  ======================================
  
  _Description_:
!      ‘DSHIFTR(I, J, SHIFT)’ combines bits of I and J.  The leftmost
       SHIFT bits of the result are the rightmost SHIFT bits of I, and the
       remaining bits are the leftmost bits of J.
  
*************** _Class_:
*** 11272,11294 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = DSHIFTR(I, J, SHIFT)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER' or a BOZ constant.
!      J           Shall be of type 'INTEGER' or a BOZ constant.
                   If both I and J have integer type, then they
                   shall have the same kind type parameter.  I and
                   J shall not both be BOZ constants.
!      SHIFT       Shall be of type 'INTEGER'.  It shall be
                   nonnegative.  If I is not a BOZ constant, then
                   SHIFT shall be less than or equal to
!                  'BIT_SIZE(I)'; otherwise, SHIFT shall be less
!                  than or equal to 'BIT_SIZE(J)'.
  
  _Return value_:
       If either I or J is a BOZ constant, it is first converted as if by
!      the intrinsic function 'INT' to an integer type with the kind type
       parameter of the other.
  
  _See also_:
--- 11272,11294 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = DSHIFTR(I, J, SHIFT)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’ or a BOZ constant.
!      J           Shall be of type ‘INTEGER’ or a BOZ constant.
                   If both I and J have integer type, then they
                   shall have the same kind type parameter.  I and
                   J shall not both be BOZ constants.
!      SHIFT       Shall be of type ‘INTEGER’.  It shall be
                   nonnegative.  If I is not a BOZ constant, then
                   SHIFT shall be less than or equal to
!                  ‘BIT_SIZE(I)’; otherwise, SHIFT shall be less
!                  than or equal to ‘BIT_SIZE(J)’.
  
  _Return value_:
       If either I or J is a BOZ constant, it is first converted as if by
!      the intrinsic function ‘INT’ to an integer type with the kind type
       parameter of the other.
  
  _See also_:
*************** _See also_:
*** 11297,11313 ****
  
  File: gfortran.info,  Node: DTIME,  Next: EOSHIFT,  Prev: DSHIFTR,  Up: Intrinsic Procedures
  
! 8.92 'DTIME' -- Execution time subroutine (or function)
  =======================================================
  
  _Description_:
!      'DTIME(VALUES, TIME)' initially returns the number of seconds of
       runtime since the start of the process's execution in TIME.  VALUES
!      returns the user and system components of this time in 'VALUES(1)'
!      and 'VALUES(2)' respectively.  TIME is equal to 'VALUES(1) +
!      VALUES(2)'.
  
!      Subsequent invocations of 'DTIME' return values accumulated since
       the previous invocation.
  
       On some systems, the underlying timings are represented using types
--- 11297,11313 ----
  
  File: gfortran.info,  Node: DTIME,  Next: EOSHIFT,  Prev: DSHIFTR,  Up: Intrinsic Procedures
  
! 8.92 ‘DTIME’ -- Execution time subroutine (or function)
  =======================================================
  
  _Description_:
!      ‘DTIME(VALUES, TIME)’ initially returns the number of seconds of
       runtime since the start of the process's execution in TIME.  VALUES
!      returns the user and system components of this time in ‘VALUES(1)’
!      and ‘VALUES(2)’ respectively.  TIME is equal to ‘VALUES(1) +
!      VALUES(2)’.
  
!      Subsequent invocations of ‘DTIME’ return values accumulated since
       the previous invocation.
  
       On some systems, the underlying timings are represented using types
*************** _Description_:
*** 11318,11336 ****
  
       Please note, that this implementation is thread safe if used within
       OpenMP directives, i.e., its state will be consistent while called
!      from multiple threads.  However, if 'DTIME' is called from multiple
       threads, the result is still the time since the last invocation.
       This may not give the intended results.  If possible, use
!      'CPU_TIME' instead.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      VALUES and TIME are 'INTENT(OUT)' and provide the following:
  
!      'VALUES(1)':User time in seconds.
!      'VALUES(2)':System time in seconds.
!      'TIME':     Run time since start in seconds.
  
  _Standard_:
       GNU extension
--- 11318,11336 ----
  
       Please note, that this implementation is thread safe if used within
       OpenMP directives, i.e., its state will be consistent while called
!      from multiple threads.  However, if ‘DTIME’ is called from multiple
       threads, the result is still the time since the last invocation.
       This may not give the intended results.  If possible, use
!      ‘CPU_TIME’ instead.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      VALUES and TIME are ‘INTENT(OUT)’ and provide the following:
  
!      ‘VALUES(1)’:User time in seconds.
!      ‘VALUES(2)’:System time in seconds.
!      ‘TIME’:     Run time since start in seconds.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 11339,11350 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL DTIME(VALUES, TIME)'.
!      'TIME = DTIME(VALUES)', (not recommended).
  
  _Arguments_:
!      VALUES      The type shall be 'REAL(4), DIMENSION(2)'.
!      TIME        The type shall be 'REAL(4)'.
  
  _Return value_:
       Elapsed time in seconds since the last invocation or since the
--- 11339,11350 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL DTIME(VALUES, TIME)’.
!      ‘TIME = DTIME(VALUES)’, (not recommended).
  
  _Arguments_:
!      VALUES      The type shall be ‘REAL(4), DIMENSION(2)’.
!      TIME        The type shall be ‘REAL(4)’.
  
  _Return value_:
       Elapsed time in seconds since the last invocation or since the
*************** _See also_:
*** 11374,11386 ****
  
  File: gfortran.info,  Node: EOSHIFT,  Next: EPSILON,  Prev: DTIME,  Up: Intrinsic Procedures
  
! 8.93 'EOSHIFT' -- End-off shift elements of an array
  ====================================================
  
  _Description_:
!      'EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])' performs an end-off shift
       on elements of ARRAY along the dimension of DIM.  If DIM is omitted
!      it is taken to be '1'.  DIM is a scalar of type 'INTEGER' in the
       range of 1 \leq DIM \leq n) where n is the rank of ARRAY.  If the
       rank of ARRAY is one, then all elements of ARRAY are shifted by
       SHIFT places.  If rank is greater than one, then all complete rank
--- 11374,11386 ----
  
  File: gfortran.info,  Node: EOSHIFT,  Next: EPSILON,  Prev: DTIME,  Up: Intrinsic Procedures
  
! 8.93 ‘EOSHIFT’ -- End-off shift elements of an array
  ====================================================
  
  _Description_:
!      ‘EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])’ performs an end-off shift
       on elements of ARRAY along the dimension of DIM.  If DIM is omitted
!      it is taken to be ‘1’.  DIM is a scalar of type ‘INTEGER’ in the
       range of 1 \leq DIM \leq n) where n is the rank of ARRAY.  If the
       rank of ARRAY is one, then all elements of ARRAY are shifted by
       SHIFT places.  If rank is greater than one, then all complete rank
*************** _Description_:
*** 11394,11400 ****
       _Array      _Boundary Value_
       Type_
       Numeric     0 of the type and kind of ARRAY.
!      Logical     '.FALSE.'.
       Character(LEN)LEN blanks.
  
  _Standard_:
--- 11394,11400 ----
       _Array      _Boundary Value_
       Type_
       Numeric     0 of the type and kind of ARRAY.
!      Logical     ‘.FALSE.’.
       Character(LEN)LEN blanks.
  
  _Standard_:
*************** _Class_:
*** 11404,11416 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])'
  
  _Arguments_:
       ARRAY       May be any type, not scalar.
!      SHIFT       The type shall be 'INTEGER'.
       BOUNDARY    Same type as ARRAY.
!      DIM         The type shall be 'INTEGER'.
  
  _Return value_:
       Returns an array of same type and rank as the ARRAY argument.
--- 11404,11416 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])’
  
  _Arguments_:
       ARRAY       May be any type, not scalar.
!      SHIFT       The type shall be ‘INTEGER’.
       BOUNDARY    Same type as ARRAY.
!      DIM         The type shall be ‘INTEGER’.
  
  _Return value_:
       Returns an array of same type and rank as the ARRAY argument.
*************** _Example_:
*** 11432,11442 ****
  
  File: gfortran.info,  Node: EPSILON,  Next: ERF,  Prev: EOSHIFT,  Up: Intrinsic Procedures
  
! 8.94 'EPSILON' -- Epsilon function
  ==================================
  
  _Description_:
!      'EPSILON(X)' returns the smallest number E of the same kind as X
       such that 1 + E > 1.
  
  _Standard_:
--- 11432,11442 ----
  
  File: gfortran.info,  Node: EPSILON,  Next: ERF,  Prev: EOSHIFT,  Up: Intrinsic Procedures
  
! 8.94 ‘EPSILON’ -- Epsilon function
  ==================================
  
  _Description_:
!      ‘EPSILON(X)’ returns the smallest number E of the same kind as X
       such that 1 + E > 1.
  
  _Standard_:
*************** _Class_:
*** 11446,11455 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = EPSILON(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
       The return value is of same type as the argument.
--- 11446,11455 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = EPSILON(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
       The return value is of same type as the argument.
*************** _Example_:
*** 11465,11475 ****
  
  File: gfortran.info,  Node: ERF,  Next: ERFC,  Prev: EPSILON,  Up: Intrinsic Procedures
  
! 8.95 'ERF' -- Error function
  ============================
  
  _Description_:
!      'ERF(X)' computes the error function of X.
  
  _Standard_:
       Fortran 2008 and later
--- 11465,11475 ----
  
  File: gfortran.info,  Node: ERF,  Next: ERFC,  Prev: EPSILON,  Up: Intrinsic Procedures
  
! 8.95 ‘ERF’ -- Error function
  ============================
  
  _Description_:
!      ‘ERF(X)’ computes the error function of X.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 11478,11490 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ERF(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL', of the same kind as X and lies
       in the range -1 \leq erf (x) \leq 1 .
  
  _Example_:
--- 11478,11490 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ERF(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’, of the same kind as X and lies
       in the range -1 \leq erf (x) \leq 1 .
  
  _Example_:
*************** _Example_:
*** 11496,11511 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DERF(X)'      'REAL(8) X'       'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: ERFC,  Next: ERFC_SCALED,  Prev: ERF,  Up: Intrinsic Procedures
  
! 8.96 'ERFC' -- Error function
  =============================
  
  _Description_:
!      'ERFC(X)' computes the complementary error function of X.
  
  _Standard_:
       Fortran 2008 and later
--- 11496,11511 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DERF(X)’      ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: ERFC,  Next: ERFC_SCALED,  Prev: ERF,  Up: Intrinsic Procedures
  
! 8.96 ‘ERFC’ -- Error function
  =============================
  
  _Description_:
!      ‘ERFC(X)’ computes the complementary error function of X.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 11514,11526 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ERFC(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL' and of the same kind as X.  It
       lies in the range 0 \leq erfc (x) \leq 2 .
  
  _Example_:
--- 11514,11526 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ERFC(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’ and of the same kind as X.  It
       lies in the range 0 \leq erfc (x) \leq 2 .
  
  _Example_:
*************** _Example_:
*** 11532,11547 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DERFC(X)'     'REAL(8) X'       'REAL(8)'      GNU extension
  
  
  File: gfortran.info,  Node: ERFC_SCALED,  Next: ETIME,  Prev: ERFC,  Up: Intrinsic Procedures
  
! 8.97 'ERFC_SCALED' -- Error function
  ====================================
  
  _Description_:
!      'ERFC_SCALED(X)' computes the exponentially-scaled complementary
       error function of X.
  
  _Standard_:
--- 11532,11547 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DERFC(X)’     ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  
  File: gfortran.info,  Node: ERFC_SCALED,  Next: ETIME,  Prev: ERFC,  Up: Intrinsic Procedures
  
! 8.97 ‘ERFC_SCALED’ -- Error function
  ====================================
  
  _Description_:
!      ‘ERFC_SCALED(X)’ computes the exponentially-scaled complementary
       error function of X.
  
  _Standard_:
*************** _Class_:
*** 11551,11563 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ERFC_SCALED(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL' and of the same kind as X.
  
  _Example_:
            program test_erfc_scaled
--- 11551,11563 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ERFC_SCALED(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’ and of the same kind as X.
  
  _Example_:
            program test_erfc_scaled
*************** _Example_:
*** 11568,11582 ****
  
  File: gfortran.info,  Node: ETIME,  Next: EVENT_QUERY,  Prev: ERFC_SCALED,  Up: Intrinsic Procedures
  
! 8.98 'ETIME' -- Execution time subroutine (or function)
  =======================================================
  
  _Description_:
!      'ETIME(VALUES, TIME)' returns the number of seconds of runtime
       since the start of the process's execution in TIME.  VALUES returns
!      the user and system components of this time in 'VALUES(1)' and
!      'VALUES(2)' respectively.  TIME is equal to 'VALUES(1) +
!      VALUES(2)'.
  
       On some systems, the underlying timings are represented using types
       with sufficiently small limits that overflows (wrap around) are
--- 11568,11582 ----
  
  File: gfortran.info,  Node: ETIME,  Next: EVENT_QUERY,  Prev: ERFC_SCALED,  Up: Intrinsic Procedures
  
! 8.98 ‘ETIME’ -- Execution time subroutine (or function)
  =======================================================
  
  _Description_:
!      ‘ETIME(VALUES, TIME)’ returns the number of seconds of runtime
       since the start of the process's execution in TIME.  VALUES returns
!      the user and system components of this time in ‘VALUES(1)’ and
!      ‘VALUES(2)’ respectively.  TIME is equal to ‘VALUES(1) +
!      VALUES(2)’.
  
       On some systems, the underlying timings are represented using types
       with sufficiently small limits that overflows (wrap around) are
*************** _Description_:
*** 11587,11597 ****
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      VALUES and TIME are 'INTENT(OUT)' and provide the following:
  
!      'VALUES(1)':User time in seconds.
!      'VALUES(2)':System time in seconds.
!      'TIME':     Run time since start in seconds.
  
  _Standard_:
       GNU extension
--- 11587,11597 ----
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      VALUES and TIME are ‘INTENT(OUT)’ and provide the following:
  
!      ‘VALUES(1)’:User time in seconds.
!      ‘VALUES(2)’:System time in seconds.
!      ‘TIME’:     Run time since start in seconds.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 11600,11611 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL ETIME(VALUES, TIME)'.
!      'TIME = ETIME(VALUES)', (not recommended).
  
  _Arguments_:
!      VALUES      The type shall be 'REAL(4), DIMENSION(2)'.
!      TIME        The type shall be 'REAL(4)'.
  
  _Return value_:
       Elapsed time in seconds since the start of program execution.
--- 11600,11611 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL ETIME(VALUES, TIME)’.
!      ‘TIME = ETIME(VALUES)’, (not recommended).
  
  _Arguments_:
!      VALUES      The type shall be ‘REAL(4), DIMENSION(2)’.
!      TIME        The type shall be ‘REAL(4)’.
  
  _Return value_:
       Elapsed time in seconds since the start of program execution.
*************** _See also_:
*** 11634,11646 ****
  
  File: gfortran.info,  Node: EVENT_QUERY,  Next: EXECUTE_COMMAND_LINE,  Prev: ETIME,  Up: Intrinsic Procedures
  
! 8.99 'EVENT_QUERY' -- Query whether a coarray event has occurred
  ================================================================
  
  _Description_:
!      'EVENT_QUERY' assignes the number of events to COUNT which have
       been posted to the EVENT variable and not yet been removed by
!      calling 'EVENT WAIT'.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value and COUNT is
       assigned the value -1.
--- 11634,11646 ----
  
  File: gfortran.info,  Node: EVENT_QUERY,  Next: EXECUTE_COMMAND_LINE,  Prev: ETIME,  Up: Intrinsic Procedures
  
! 8.99 ‘EVENT_QUERY’ -- Query whether a coarray event has occurred
  ================================================================
  
  _Description_:
!      ‘EVENT_QUERY’ assignes the number of events to COUNT which have
       been posted to the EVENT variable and not yet been removed by
!      calling ‘EVENT WAIT’.  When STAT is present and the invocation was
       successful, it is assigned the value 0.  If it is present and the
       invocation has failed, it is assigned a positive value and COUNT is
       assigned the value -1.
*************** _Class_:
*** 11652,11662 ****
       subroutine
  
  _Syntax_:
!      'CALL EVENT_QUERY (EVENT, COUNT [, STAT])'
  
  _Arguments_:
!      EVENT       (intent(IN)) Scalar of type 'EVENT_TYPE',
!                  defined in 'ISO_FORTRAN_ENV'; shall not be
                   coindexed.
       COUNT       (intent(out))Scalar integer with at least the
                   precision of default integer.
--- 11652,11662 ----
       subroutine
  
  _Syntax_:
!      ‘CALL EVENT_QUERY (EVENT, COUNT [, STAT])’
  
  _Arguments_:
!      EVENT       (intent(IN)) Scalar of type ‘EVENT_TYPE’,
!                  defined in ‘ISO_FORTRAN_ENV’; shall not be
                   coindexed.
       COUNT       (intent(out))Scalar integer with at least the
                   precision of default integer.
*************** _Example_:
*** 11679,11712 ****
  
  File: gfortran.info,  Node: EXECUTE_COMMAND_LINE,  Next: EXIT,  Prev: EVENT_QUERY,  Up: Intrinsic Procedures
  
! 8.100 'EXECUTE_COMMAND_LINE' -- Execute a shell command
  =======================================================
  
  _Description_:
!      'EXECUTE_COMMAND_LINE' runs a shell command, synchronously or
       asynchronously.
  
!      The 'COMMAND' argument is passed to the shell and executed (The
!      shell is 'sh' on Unix systems, and 'cmd.exe' on Windows.).  If
!      'WAIT' is present and has the value false, the execution of the
       command is asynchronous if the system supports it; otherwise, the
!      command is executed synchronously using the C library's 'system'
       call.
  
       The three last arguments allow the user to get status information.
!      After synchronous execution, 'EXITSTAT' contains the integer exit
!      code of the command, as returned by 'system'.  'CMDSTAT' is set to
       zero if the command line was executed (whatever its exit status
!      was).  'CMDMSG' is assigned an error message if an error has
       occurred.
  
!      Note that the 'system' function need not be thread-safe.  It is the
!      responsibility of the user to ensure that 'system' is not called
       concurrently.
  
       For asynchronous execution on supported targets, the POSIX
!      'posix_spawn' or 'fork' functions are used.  Also, a signal handler
!      for the 'SIGCHLD' signal is installed.
  
  _Standard_:
       Fortran 2008 and later
--- 11679,11712 ----
  
  File: gfortran.info,  Node: EXECUTE_COMMAND_LINE,  Next: EXIT,  Prev: EVENT_QUERY,  Up: Intrinsic Procedures
  
! 8.100 ‘EXECUTE_COMMAND_LINE’ -- Execute a shell command
  =======================================================
  
  _Description_:
!      ‘EXECUTE_COMMAND_LINE’ runs a shell command, synchronously or
       asynchronously.
  
!      The ‘COMMAND’ argument is passed to the shell and executed (The
!      shell is ‘sh’ on Unix systems, and ‘cmd.exe’ on Windows.).  If
!      ‘WAIT’ is present and has the value false, the execution of the
       command is asynchronous if the system supports it; otherwise, the
!      command is executed synchronously using the C library's ‘system’
       call.
  
       The three last arguments allow the user to get status information.
!      After synchronous execution, ‘EXITSTAT’ contains the integer exit
!      code of the command, as returned by ‘system’.  ‘CMDSTAT’ is set to
       zero if the command line was executed (whatever its exit status
!      was).  ‘CMDMSG’ is assigned an error message if an error has
       occurred.
  
!      Note that the ‘system’ function need not be thread-safe.  It is the
!      responsibility of the user to ensure that ‘system’ is not called
       concurrently.
  
       For asynchronous execution on supported targets, the POSIX
!      ‘posix_spawn’ or ‘fork’ functions are used.  Also, a signal handler
!      for the ‘SIGCHLD’ signal is installed.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 11715,11731 ****
       Subroutine
  
  _Syntax_:
!      'CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT,
!      CMDMSG ])'
  
  _Arguments_:
!      COMMAND     Shall be a default 'CHARACTER' scalar.
!      WAIT        (Optional) Shall be a default 'LOGICAL' scalar.
!      EXITSTAT    (Optional) Shall be an 'INTEGER' of the default
                   kind.
!      CMDSTAT     (Optional) Shall be an 'INTEGER' of the default
                   kind.
!      CMDMSG      (Optional) Shall be an 'CHARACTER' scalar of the
                   default kind.
  
  _Example_:
--- 11715,11731 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT,
!      CMDMSG ])’
  
  _Arguments_:
!      COMMAND     Shall be a default ‘CHARACTER’ scalar.
!      WAIT        (Optional) Shall be a default ‘LOGICAL’ scalar.
!      EXITSTAT    (Optional) Shall be an ‘INTEGER’ of the default
                   kind.
!      CMDSTAT     (Optional) Shall be an ‘INTEGER’ of the default
                   kind.
!      CMDMSG      (Optional) Shall be an ‘CHARACTER’ scalar of the
                   default kind.
  
  _Example_:
*************** _Example_:
*** 11742,11748 ****
  
  _Note_:
  
!      Because this intrinsic is implemented in terms of the 'system'
       function call, its behavior with respect to signaling is processor
       dependent.  In particular, on POSIX-compliant systems, the SIGINT
       and SIGQUIT signals will be ignored, and the SIGCHLD will be
--- 11742,11748 ----
  
  _Note_:
  
!      Because this intrinsic is implemented in terms of the ‘system’
       function call, its behavior with respect to signaling is processor
       dependent.  In particular, on POSIX-compliant systems, the SIGINT
       and SIGQUIT signals will be ignored, and the SIGCHLD will be
*************** _See also_:
*** 11755,11765 ****
  
  File: gfortran.info,  Node: EXIT,  Next: EXP,  Prev: EXECUTE_COMMAND_LINE,  Up: Intrinsic Procedures
  
! 8.101 'EXIT' -- Exit the program with status.
  =============================================
  
  _Description_:
!      'EXIT' causes immediate termination of the program with status.  If
       status is omitted it returns the canonical _success_ for the
       system.  All Fortran I/O units are closed.
  
--- 11755,11765 ----
  
  File: gfortran.info,  Node: EXIT,  Next: EXP,  Prev: EXECUTE_COMMAND_LINE,  Up: Intrinsic Procedures
  
! 8.101 ‘EXIT’ -- Exit the program with status.
  =============================================
  
  _Description_:
!      ‘EXIT’ causes immediate termination of the program with status.  If
       status is omitted it returns the canonical _success_ for the
       system.  All Fortran I/O units are closed.
  
*************** _Class_:
*** 11770,11782 ****
       Subroutine
  
  _Syntax_:
!      'CALL EXIT([STATUS])'
  
  _Arguments_:
!      STATUS      Shall be an 'INTEGER' of the default kind.
  
  _Return value_:
!      'STATUS' is passed to the parent process on exit.
  
  _Example_:
            program test_exit
--- 11770,11782 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL EXIT([STATUS])’
  
  _Arguments_:
!      STATUS      Shall be an ‘INTEGER’ of the default kind.
  
  _Return value_:
!      ‘STATUS’ is passed to the parent process on exit.
  
  _Example_:
            program test_exit
*************** _See also_:
*** 11792,11802 ****
  
  File: gfortran.info,  Node: EXP,  Next: EXPONENT,  Prev: EXIT,  Up: Intrinsic Procedures
  
! 8.102 'EXP' -- Exponential function
  ===================================
  
  _Description_:
!      'EXP(X)' computes the base e exponential of X.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
--- 11792,11802 ----
  
  File: gfortran.info,  Node: EXP,  Next: EXPONENT,  Prev: EXIT,  Up: Intrinsic Procedures
  
! 8.102 ‘EXP’ -- Exponential function
  ===================================
  
  _Description_:
!      ‘EXP(X)’ computes the base e exponential of X.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
*************** _Class_:
*** 11805,11814 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = EXP(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X.
--- 11805,11814 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = EXP(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X.
*************** _Example_:
*** 11822,11841 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'EXP(X)'       'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DEXP(X)'      'REAL(8) X'       'REAL(8)'      Fortran 77 and later
!      'CEXP(X)'      'COMPLEX(4) X'    'COMPLEX(4)'   Fortran 77 and later
!      'ZEXP(X)'      'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDEXP(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  
  File: gfortran.info,  Node: EXPONENT,  Next: EXTENDS_TYPE_OF,  Prev: EXP,  Up: Intrinsic Procedures
  
! 8.103 'EXPONENT' -- Exponent function
  =====================================
  
  _Description_:
!      'EXPONENT(X)' returns the value of the exponent part of X.  If X is
       zero the value returned is zero.
  
  _Standard_:
--- 11822,11841 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘EXP(X)’       ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DEXP(X)’      ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
!      ‘CEXP(X)’      ‘COMPLEX(4) X’    ‘COMPLEX(4)’   Fortran 77 and later
!      ‘ZEXP(X)’      ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDEXP(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  
  File: gfortran.info,  Node: EXPONENT,  Next: EXTENDS_TYPE_OF,  Prev: EXP,  Up: Intrinsic Procedures
  
! 8.103 ‘EXPONENT’ -- Exponent function
  =====================================
  
  _Description_:
!      ‘EXPONENT(X)’ returns the value of the exponent part of X.  If X is
       zero the value returned is zero.
  
  _Standard_:
*************** _Class_:
*** 11845,11857 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = EXPONENT(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type default 'INTEGER'.
  
  _Example_:
            program test_exponent
--- 11845,11857 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = EXPONENT(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type default ‘INTEGER’.
  
  _Example_:
            program test_exponent
*************** _Example_:
*** 11865,11871 ****
  
  File: gfortran.info,  Node: EXTENDS_TYPE_OF,  Next: FDATE,  Prev: EXPONENT,  Up: Intrinsic Procedures
  
! 8.104 'EXTENDS_TYPE_OF' -- Query dynamic type for extension
  ===========================================================
  
  _Description_:
--- 11865,11871 ----
  
  File: gfortran.info,  Node: EXTENDS_TYPE_OF,  Next: FDATE,  Prev: EXPONENT,  Up: Intrinsic Procedures
  
! 8.104 ‘EXTENDS_TYPE_OF’ -- Query dynamic type for extension
  ===========================================================
  
  _Description_:
*************** _Class_:
*** 11878,11884 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = EXTENDS_TYPE_OF(A, MOLD)'
  
  _Arguments_:
       A           Shall be an object of extensible declared type
--- 11878,11884 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = EXTENDS_TYPE_OF(A, MOLD)’
  
  _Arguments_:
       A           Shall be an object of extensible declared type
*************** _See also_:
*** 11897,11909 ****
  
  File: gfortran.info,  Node: FDATE,  Next: FGET,  Prev: EXTENDS_TYPE_OF,  Up: Intrinsic Procedures
  
! 8.105 'FDATE' -- Get the current time as a string
  =================================================
  
  _Description_:
!      'FDATE(DATE)' returns the current date (using the same format as
!      *note CTIME::) in DATE.  It is equivalent to 'CALL CTIME(DATE,
!      TIME())'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 11897,11909 ----
  
  File: gfortran.info,  Node: FDATE,  Next: FGET,  Prev: EXTENDS_TYPE_OF,  Up: Intrinsic Procedures
  
! 8.105 ‘FDATE’ -- Get the current time as a string
  =================================================
  
  _Description_:
!      ‘FDATE(DATE)’ returns the current date (using the same format as
!      *note CTIME::) in DATE.  It is equivalent to ‘CALL CTIME(DATE,
!      TIME())’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 11915,11926 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FDATE(DATE)'.
!      'DATE = FDATE()'.
  
  _Arguments_:
!      DATE        The type shall be of type 'CHARACTER' of the
!                  default kind.  It is an 'INTENT(OUT)' argument.
                   If the length of this variable is too short for
                   the date and time string to fit completely, it
                   will be blank on procedure return.
--- 11915,11926 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FDATE(DATE)’.
!      ‘DATE = FDATE()’.
  
  _Arguments_:
!      DATE        The type shall be of type ‘CHARACTER’ of the
!                  default kind.  It is an ‘INTENT(OUT)’ argument.
                   If the length of this variable is too short for
                   the date and time string to fit completely, it
                   will be blank on procedure return.
*************** _See also_:
*** 11948,11954 ****
  
  File: gfortran.info,  Node: FGET,  Next: FGETC,  Prev: FDATE,  Up: Intrinsic Procedures
  
! 8.106 'FGET' -- Read a single character in stream mode from stdin
  =================================================================
  
  _Description_:
--- 11948,11954 ----
  
  File: gfortran.info,  Node: FGET,  Next: FGETC,  Prev: FDATE,  Up: Intrinsic Procedures
  
! 8.106 ‘FGET’ -- Read a single character in stream mode from stdin
  =================================================================
  
  _Description_:
*************** _Description_:
*** 11960,11967 ****
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the 'FGET' intrinsic is provided for backwards
!      compatibility with 'g77'.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
--- 11960,11967 ----
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the ‘FGET’ intrinsic is provided for backwards
!      compatibility with ‘g77’.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
*************** _Class_:
*** 11973,11985 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FGET(C [, STATUS])'
!      'STATUS = FGET(C)'
  
  _Arguments_:
!      C           The type shall be 'CHARACTER' and of default
                   kind.
!      STATUS      (Optional) status flag of type 'INTEGER'.
                   Returns 0 on success, -1 on end-of-file, and a
                   system specific positive error code otherwise.
  
--- 11973,11985 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FGET(C [, STATUS])’
!      ‘STATUS = FGET(C)’
  
  _Arguments_:
!      C           The type shall be ‘CHARACTER’ and of default
                   kind.
!      STATUS      (Optional) status flag of type ‘INTEGER’.
                   Returns 0 on success, -1 on end-of-file, and a
                   system specific positive error code otherwise.
  
*************** _See also_:
*** 12006,12012 ****
  
  File: gfortran.info,  Node: FGETC,  Next: FINDLOC,  Prev: FGET,  Up: Intrinsic Procedures
  
! 8.107 'FGETC' -- Read a single character in stream mode
  =======================================================
  
  _Description_:
--- 12006,12012 ----
  
  File: gfortran.info,  Node: FGETC,  Next: FINDLOC,  Prev: FGET,  Up: Intrinsic Procedures
  
! 8.107 ‘FGETC’ -- Read a single character in stream mode
  =======================================================
  
  _Description_:
*************** _Description_:
*** 12018,12025 ****
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the 'FGET' intrinsic is provided for backwards
!      compatibility with 'g77'.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
--- 12018,12025 ----
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the ‘FGET’ intrinsic is provided for backwards
!      compatibility with ‘g77’.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
*************** _Class_:
*** 12031,12044 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FGETC(UNIT, C [, STATUS])'
!      'STATUS = FGETC(UNIT, C)'
  
  _Arguments_:
!      UNIT        The type shall be 'INTEGER'.
!      C           The type shall be 'CHARACTER' and of default
                   kind.
!      STATUS      (Optional) status flag of type 'INTEGER'.
                   Returns 0 on success, -1 on end-of-file and a
                   system specific positive error code otherwise.
  
--- 12031,12044 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FGETC(UNIT, C [, STATUS])’
!      ‘STATUS = FGETC(UNIT, C)’
  
  _Arguments_:
!      UNIT        The type shall be ‘INTEGER’.
!      C           The type shall be ‘CHARACTER’ and of default
                   kind.
!      STATUS      (Optional) status flag of type ‘INTEGER’.
                   Returns 0 on success, -1 on end-of-file and a
                   system specific positive error code otherwise.
  
*************** _See also_:
*** 12064,12070 ****
  
  File: gfortran.info,  Node: FINDLOC,  Next: FLOOR,  Prev: FGETC,  Up: Intrinsic Procedures
  
! 8.108 'FINDLOC' -- Search an array for a value
  ==============================================
  
  _Description_:
--- 12064,12070 ----
  
  File: gfortran.info,  Node: FINDLOC,  Next: FLOOR,  Prev: FGETC,  Up: Intrinsic Procedures
  
! 8.108 ‘FINDLOC’ -- Search an array for a value
  ==============================================
  
  _Description_:
*************** _Description_:
*** 12072,12084 ****
       given in the VALUE argument, or, if the DIM argument is supplied,
       determines the locations of the elements equal to the VALUE
       argument element along each row of the array in the DIM direction.
!      If MASK is present, only the elements for which MASK is '.TRUE.'
       are considered.  If more than one element in the array has the
       value VALUE, the location returned is that of the first such
       element in array element order if the BACK is not present or if it
!      is '.FALSE.'.  If BACK is true, the location returned is that of
       the last such element.  If the array has zero size, or all of the
!      elements of MASK are '.FALSE.', then the result is an array of
       zeroes.  Similarly, if DIM is supplied and all of the elements of
       MASK along a given row are zero, the result value for that row is
       zero.
--- 12072,12084 ----
       given in the VALUE argument, or, if the DIM argument is supplied,
       determines the locations of the elements equal to the VALUE
       argument element along each row of the array in the DIM direction.
!      If MASK is present, only the elements for which MASK is ‘.TRUE.’
       are considered.  If more than one element in the array has the
       value VALUE, the location returned is that of the first such
       element in array element order if the BACK is not present or if it
!      is ‘.FALSE.’.  If BACK is true, the location returned is that of
       the last such element.  If the array has zero size, or all of the
!      elements of MASK are ‘.FALSE.’, then the result is an array of
       zeroes.  Similarly, if DIM is supplied and all of the elements of
       MASK along a given row are zero, the result value for that row is
       zero.
*************** _Class_:
*** 12090,12114 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = FINDLOC(ARRAY, VALUE, DIM [, MASK] [,KIND]
!      [,BACK])'
!      'RESULT = FINDLOC(ARRAY, VALUE, [, MASK] [,KIND]
!      [,BACK])'
  
  _Arguments_:
       ARRAY       Shall be an array of intrinsic type.
       VALUE       A scalar of intrinsic type which is in type
                   conformance with ARRAY.
!      DIM         (Optional) Shall be a scalar of type 'INTEGER',
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        (Optional) Shall be of type 'LOGICAL', and
                   conformable with ARRAY.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
!      BACK        (Optional) A scalar of type 'LOGICAL'.
  
  _Return value_:
       If DIM is absent, the result is a rank-one array with a length
--- 12090,12114 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = FINDLOC(ARRAY, VALUE, DIM [, MASK] [,KIND]
!      [,BACK])’
!      ‘RESULT = FINDLOC(ARRAY, VALUE, [, MASK] [,KIND]
!      [,BACK])’
  
  _Arguments_:
       ARRAY       Shall be an array of intrinsic type.
       VALUE       A scalar of intrinsic type which is in type
                   conformance with ARRAY.
!      DIM         (Optional) Shall be a scalar of type ‘INTEGER’,
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        (Optional) Shall be of type ‘LOGICAL’, and
                   conformable with ARRAY.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
!      BACK        (Optional) A scalar of type ‘LOGICAL’.
  
  _Return value_:
       If DIM is absent, the result is a rank-one array with a length
*************** _See also_:
*** 12126,12136 ****
  
  File: gfortran.info,  Node: FLOOR,  Next: FLUSH,  Prev: FINDLOC,  Up: Intrinsic Procedures
  
! 8.109 'FLOOR' -- Integer floor function
  =======================================
  
  _Description_:
!      'FLOOR(A)' returns the greatest integer less than or equal to A.
  
  _Standard_:
       Fortran 95 and later
--- 12126,12136 ----
  
  File: gfortran.info,  Node: FLOOR,  Next: FLUSH,  Prev: FINDLOC,  Up: Intrinsic Procedures
  
! 8.109 ‘FLOOR’ -- Integer floor function
  =======================================
  
  _Description_:
!      ‘FLOOR(A)’ returns the greatest integer less than or equal to A.
  
  _Standard_:
       Fortran 95 and later
*************** _Class_:
*** 12139,12155 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = FLOOR(A [, KIND])'
  
  _Arguments_:
!      A           The type shall be 'REAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER(KIND)' if KIND is present and
!      of default-kind 'INTEGER' otherwise.
  
  _Example_:
            program test_floor
--- 12139,12155 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = FLOOR(A [, KIND])’
  
  _Arguments_:
!      A           The type shall be ‘REAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER(KIND)’ if KIND is present and
!      of default-kind ‘INTEGER’ otherwise.
  
  _Example_:
            program test_floor
*************** _See also_:
*** 12166,12172 ****
  
  File: gfortran.info,  Node: FLUSH,  Next: FNUM,  Prev: FLOOR,  Up: Intrinsic Procedures
  
! 8.110 'FLUSH' -- Flush I/O unit(s)
  ==================================
  
  _Description_:
--- 12166,12172 ----
  
  File: gfortran.info,  Node: FLUSH,  Next: FNUM,  Prev: FLOOR,  Up: Intrinsic Procedures
  
! 8.110 ‘FLUSH’ -- Flush I/O unit(s)
  ==================================
  
  _Description_:
*************** _Class_:
*** 12181,12204 ****
       Subroutine
  
  _Syntax_:
!      'CALL FLUSH(UNIT)'
  
  _Arguments_:
!      UNIT        (Optional) The type shall be 'INTEGER'.
  
  _Note_:
!      Beginning with the Fortran 2003 standard, there is a 'FLUSH'
!      statement that should be preferred over the 'FLUSH' intrinsic.
  
!      The 'FLUSH' intrinsic and the Fortran 2003 'FLUSH' statement have
       identical effect: they flush the runtime library's I/O buffer so
       that the data becomes visible to other processes.  This does not
       guarantee that the data is committed to disk.
  
       On POSIX systems, you can request that all data is transferred to
!      the storage device by calling the 'fsync' function, with the POSIX
       file descriptor of the I/O unit as argument (retrieved with GNU
!      intrinsic 'FNUM').  The following example shows how:
  
              ! Declare the interface for POSIX fsync function
              interface
--- 12181,12204 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL FLUSH(UNIT)’
  
  _Arguments_:
!      UNIT        (Optional) The type shall be ‘INTEGER’.
  
  _Note_:
!      Beginning with the Fortran 2003 standard, there is a ‘FLUSH’
!      statement that should be preferred over the ‘FLUSH’ intrinsic.
  
!      The ‘FLUSH’ intrinsic and the Fortran 2003 ‘FLUSH’ statement have
       identical effect: they flush the runtime library's I/O buffer so
       that the data becomes visible to other processes.  This does not
       guarantee that the data is committed to disk.
  
       On POSIX systems, you can request that all data is transferred to
!      the storage device by calling the ‘fsync’ function, with the POSIX
       file descriptor of the I/O unit as argument (retrieved with GNU
!      intrinsic ‘FNUM’).  The following example shows how:
  
              ! Declare the interface for POSIX fsync function
              interface
*************** _Note_:
*** 12229,12240 ****
  
  File: gfortran.info,  Node: FNUM,  Next: FPUT,  Prev: FLUSH,  Up: Intrinsic Procedures
  
! 8.111 'FNUM' -- File number function
  ====================================
  
  _Description_:
!      'FNUM(UNIT)' returns the POSIX file descriptor number corresponding
!      to the open Fortran I/O unit 'UNIT'.
  
  _Standard_:
       GNU extension
--- 12229,12240 ----
  
  File: gfortran.info,  Node: FNUM,  Next: FPUT,  Prev: FLUSH,  Up: Intrinsic Procedures
  
! 8.111 ‘FNUM’ -- File number function
  ====================================
  
  _Description_:
!      ‘FNUM(UNIT)’ returns the POSIX file descriptor number corresponding
!      to the open Fortran I/O unit ‘UNIT’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 12243,12255 ****
       Function
  
  _Syntax_:
!      'RESULT = FNUM(UNIT)'
  
  _Arguments_:
!      UNIT        The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER'
  
  _Example_:
            program test_fnum
--- 12243,12255 ----
       Function
  
  _Syntax_:
!      ‘RESULT = FNUM(UNIT)’
  
  _Arguments_:
!      UNIT        The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’
  
  _Example_:
            program test_fnum
*************** _Example_:
*** 12263,12269 ****
  
  File: gfortran.info,  Node: FPUT,  Next: FPUTC,  Prev: FNUM,  Up: Intrinsic Procedures
  
! 8.112 'FPUT' -- Write a single character in stream mode to stdout
  =================================================================
  
  _Description_:
--- 12263,12269 ----
  
  File: gfortran.info,  Node: FPUT,  Next: FPUTC,  Prev: FNUM,  Up: Intrinsic Procedures
  
! 8.112 ‘FPUT’ -- Write a single character in stream mode to stdout
  =================================================================
  
  _Description_:
*************** _Description_:
*** 12275,12282 ****
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the 'FGET' intrinsic is provided for backwards
!      compatibility with 'g77'.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
--- 12275,12282 ----
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the ‘FGET’ intrinsic is provided for backwards
!      compatibility with ‘g77’.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
*************** _Class_:
*** 12288,12300 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FPUT(C [, STATUS])'
!      'STATUS = FPUT(C)'
  
  _Arguments_:
!      C           The type shall be 'CHARACTER' and of default
                   kind.
!      STATUS      (Optional) status flag of type 'INTEGER'.
                   Returns 0 on success, -1 on end-of-file and a
                   system specific positive error code otherwise.
  
--- 12288,12300 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FPUT(C [, STATUS])’
!      ‘STATUS = FPUT(C)’
  
  _Arguments_:
!      C           The type shall be ‘CHARACTER’ and of default
                   kind.
!      STATUS      (Optional) status flag of type ‘INTEGER’.
                   Returns 0 on success, -1 on end-of-file and a
                   system specific positive error code otherwise.
  
*************** _See also_:
*** 12315,12321 ****
  
  File: gfortran.info,  Node: FPUTC,  Next: FRACTION,  Prev: FPUT,  Up: Intrinsic Procedures
  
! 8.113 'FPUTC' -- Write a single character in stream mode
  ========================================================
  
  _Description_:
--- 12315,12321 ----
  
  File: gfortran.info,  Node: FPUTC,  Next: FRACTION,  Prev: FPUT,  Up: Intrinsic Procedures
  
! 8.113 ‘FPUTC’ -- Write a single character in stream mode
  ========================================================
  
  _Description_:
*************** _Description_:
*** 12327,12334 ****
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the 'FGET' intrinsic is provided for backwards
!      compatibility with 'g77'.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
--- 12327,12334 ----
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the ‘FGET’ intrinsic is provided for backwards
!      compatibility with ‘g77’.  GNU Fortran provides the Fortran 2003
       Stream facility.  Programmers should consider the use of new stream
       IO feature in new code for future portability.  See also *note
       Fortran 2003 status::.
*************** _Class_:
*** 12340,12353 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FPUTC(UNIT, C [, STATUS])'
!      'STATUS = FPUTC(UNIT, C)'
  
  _Arguments_:
!      UNIT        The type shall be 'INTEGER'.
!      C           The type shall be 'CHARACTER' and of default
                   kind.
!      STATUS      (Optional) status flag of type 'INTEGER'.
                   Returns 0 on success, -1 on end-of-file and a
                   system specific positive error code otherwise.
  
--- 12340,12353 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FPUTC(UNIT, C [, STATUS])’
!      ‘STATUS = FPUTC(UNIT, C)’
  
  _Arguments_:
!      UNIT        The type shall be ‘INTEGER’.
!      C           The type shall be ‘CHARACTER’ and of default
                   kind.
!      STATUS      (Optional) status flag of type ‘INTEGER’.
                   Returns 0 on success, -1 on end-of-file and a
                   system specific positive error code otherwise.
  
*************** _See also_:
*** 12371,12382 ****
  
  File: gfortran.info,  Node: FRACTION,  Next: FREE,  Prev: FPUTC,  Up: Intrinsic Procedures
  
! 8.114 'FRACTION' -- Fractional part of the model representation
  ===============================================================
  
  _Description_:
!      'FRACTION(X)' returns the fractional part of the model
!      representation of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 12371,12382 ----
  
  File: gfortran.info,  Node: FRACTION,  Next: FREE,  Prev: FPUTC,  Up: Intrinsic Procedures
  
! 8.114 ‘FRACTION’ -- Fractional part of the model representation
  ===============================================================
  
  _Description_:
!      ‘FRACTION(X)’ returns the fractional part of the model
!      representation of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 12385,12399 ****
       Elemental function
  
  _Syntax_:
!      'Y = FRACTION(X)'
  
  _Arguments_:
!      X           The type of the argument shall be a 'REAL'.
  
  _Return value_:
       The return value is of the same type and kind as the argument.  The
!      fractional part of the model representation of 'X' is returned; it
!      is 'X * RADIX(X)**(-EXPONENT(X))'.
  
  _Example_:
            program test_fraction
--- 12385,12399 ----
       Elemental function
  
  _Syntax_:
!      ‘Y = FRACTION(X)’
  
  _Arguments_:
!      X           The type of the argument shall be a ‘REAL’.
  
  _Return value_:
       The return value is of the same type and kind as the argument.  The
!      fractional part of the model representation of ‘X’ is returned; it
!      is ‘X * RADIX(X)**(-EXPONENT(X))’.
  
  _Example_:
            program test_fraction
*************** _Example_:
*** 12405,12419 ****
  
  File: gfortran.info,  Node: FREE,  Next: FSEEK,  Prev: FRACTION,  Up: Intrinsic Procedures
  
! 8.115 'FREE' -- Frees memory
  ============================
  
  _Description_:
!      Frees memory previously allocated by 'MALLOC'.  The 'FREE'
       intrinsic is an extension intended to be used with Cray pointers,
       and is provided in GNU Fortran to allow user to compile legacy
       code.  For new code using Fortran 95 pointers, the memory
!      de-allocation intrinsic is 'DEALLOCATE'.
  
  _Standard_:
       GNU extension
--- 12405,12419 ----
  
  File: gfortran.info,  Node: FREE,  Next: FSEEK,  Prev: FRACTION,  Up: Intrinsic Procedures
  
! 8.115 ‘FREE’ -- Frees memory
  ============================
  
  _Description_:
!      Frees memory previously allocated by ‘MALLOC’.  The ‘FREE’
       intrinsic is an extension intended to be used with Cray pointers,
       and is provided in GNU Fortran to allow user to compile legacy
       code.  For new code using Fortran 95 pointers, the memory
!      de-allocation intrinsic is ‘DEALLOCATE’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 12422,12431 ****
       Subroutine
  
  _Syntax_:
!      'CALL FREE(PTR)'
  
  _Arguments_:
!      PTR         The type shall be 'INTEGER'.  It represents the
                   location of the memory that should be
                   de-allocated.
  
--- 12422,12431 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL FREE(PTR)’
  
  _Arguments_:
!      PTR         The type shall be ‘INTEGER’.  It represents the
                   location of the memory that should be
                   de-allocated.
  
*************** _Return value_:
*** 12433,12439 ****
       None
  
  _Example_:
!      See 'MALLOC' for an example.
  
  _See also_:
       *note MALLOC::
--- 12433,12439 ----
       None
  
  _Example_:
!      See ‘MALLOC’ for an example.
  
  _See also_:
       *note MALLOC::
*************** _See also_:
*** 12441,12459 ****
  
  File: gfortran.info,  Node: FSEEK,  Next: FSTAT,  Prev: FREE,  Up: Intrinsic Procedures
  
! 8.116 'FSEEK' -- Low level file positioning subroutine
  ======================================================
  
  _Description_:
       Moves UNIT to the specified OFFSET.  If WHENCE is set to 0, the
!      OFFSET is taken as an absolute value 'SEEK_SET', if set to 1,
!      OFFSET is taken to be relative to the current position 'SEEK_CUR',
!      and if set to 2 relative to the end of the file 'SEEK_END'.  On
       error, STATUS is set to a nonzero value.  If STATUS the seek fails
       silently.
  
       This intrinsic routine is not fully backwards compatible with
!      'g77'.  In 'g77', the 'FSEEK' takes a statement label instead of a
       STATUS variable.  If FSEEK is used in old code, change
              CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
       to
--- 12441,12459 ----
  
  File: gfortran.info,  Node: FSEEK,  Next: FSTAT,  Prev: FREE,  Up: Intrinsic Procedures
  
! 8.116 ‘FSEEK’ -- Low level file positioning subroutine
  ======================================================
  
  _Description_:
       Moves UNIT to the specified OFFSET.  If WHENCE is set to 0, the
!      OFFSET is taken as an absolute value ‘SEEK_SET’, if set to 1,
!      OFFSET is taken to be relative to the current position ‘SEEK_CUR’,
!      and if set to 2 relative to the end of the file ‘SEEK_END’.  On
       error, STATUS is set to a nonzero value.  If STATUS the seek fails
       silently.
  
       This intrinsic routine is not fully backwards compatible with
!      ‘g77’.  In ‘g77’, the ‘FSEEK’ takes a statement label instead of a
       STATUS variable.  If FSEEK is used in old code, change
              CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
       to
*************** _Class_:
*** 12473,12487 ****
       Subroutine
  
  _Syntax_:
!      'CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])'
  
  _Arguments_:
!      UNIT        Shall be a scalar of type 'INTEGER'.
!      OFFSET      Shall be a scalar of type 'INTEGER'.
!      WHENCE      Shall be a scalar of type 'INTEGER'.  Its value
                   shall be either 0, 1 or 2.
       STATUS      (Optional) shall be a scalar of type
!                  'INTEGER(4)'.
  
  _Example_:
            PROGRAM test_fseek
--- 12473,12487 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])’
  
  _Arguments_:
!      UNIT        Shall be a scalar of type ‘INTEGER’.
!      OFFSET      Shall be a scalar of type ‘INTEGER’.
!      WHENCE      Shall be a scalar of type ‘INTEGER’.  Its value
                   shall be either 0, 1 or 2.
       STATUS      (Optional) shall be a scalar of type
!                  ‘INTEGER(4)’.
  
  _Example_:
            PROGRAM test_fseek
*************** _See also_:
*** 12511,12524 ****
  
  File: gfortran.info,  Node: FSTAT,  Next: FTELL,  Prev: FSEEK,  Up: Intrinsic Procedures
  
! 8.117 'FSTAT' -- Get file status
  ================================
  
  _Description_:
!      'FSTAT' is identical to *note STAT::, except that information about
       an already opened file is obtained.
  
!      The elements in 'VALUES' are the same as described by *note STAT::.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 12511,12524 ----
  
  File: gfortran.info,  Node: FSTAT,  Next: FTELL,  Prev: FSEEK,  Up: Intrinsic Procedures
  
! 8.117 ‘FSTAT’ -- Get file status
  ================================
  
  _Description_:
!      ‘FSTAT’ is identical to *note STAT::, except that information about
       an already opened file is obtained.
  
!      The elements in ‘VALUES’ are the same as described by *note STAT::.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 12530,12542 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FSTAT(UNIT, VALUES [, STATUS])'
!      'STATUS = FSTAT(UNIT, VALUES)'
  
  _Arguments_:
!      UNIT        An open I/O unit number of type 'INTEGER'.
!      VALUES      The type shall be 'INTEGER(4), DIMENSION(13)'.
!      STATUS      (Optional) status flag of type 'INTEGER(4)'.
                   Returns 0 on success and a system specific error
                   code otherwise.
  
--- 12530,12542 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FSTAT(UNIT, VALUES [, STATUS])’
!      ‘STATUS = FSTAT(UNIT, VALUES)’
  
  _Arguments_:
!      UNIT        An open I/O unit number of type ‘INTEGER’.
!      VALUES      The type shall be ‘INTEGER(4), DIMENSION(13)’.
!      STATUS      (Optional) status flag of type ‘INTEGER(4)’.
                   Returns 0 on success and a system specific error
                   code otherwise.
  
*************** _See also_:
*** 12552,12558 ****
  
  File: gfortran.info,  Node: FTELL,  Next: GAMMA,  Prev: FSTAT,  Up: Intrinsic Procedures
  
! 8.118 'FTELL' -- Current stream position
  ========================================
  
  _Description_:
--- 12552,12558 ----
  
  File: gfortran.info,  Node: FTELL,  Next: GAMMA,  Prev: FSTAT,  Up: Intrinsic Procedures
  
! 8.118 ‘FTELL’ -- Current stream position
  ========================================
  
  _Description_:
*************** _Class_:
*** 12568,12579 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL FTELL(UNIT, OFFSET)'
!      'OFFSET = FTELL(UNIT)'
  
  _Arguments_:
!      OFFSET      Shall of type 'INTEGER'.
!      UNIT        Shall of type 'INTEGER'.
  
  _Return value_:
       In either syntax, OFFSET is set to the current offset of unit
--- 12568,12579 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL FTELL(UNIT, OFFSET)’
!      ‘OFFSET = FTELL(UNIT)’
  
  _Arguments_:
!      OFFSET      Shall of type ‘INTEGER’.
!      UNIT        Shall of type ‘INTEGER’.
  
  _Return value_:
       In either syntax, OFFSET is set to the current offset of unit
*************** _See also_:
*** 12593,12603 ****
  
  File: gfortran.info,  Node: GAMMA,  Next: GERROR,  Prev: FTELL,  Up: Intrinsic Procedures
  
! 8.119 'GAMMA' -- Gamma function
  ===============================
  
  _Description_:
!      'GAMMA(X)' computes Gamma (\Gamma) of X.  For positive, integer
       values of X the Gamma function simplifies to the factorial function
       \Gamma(x)=(x-1)!.
  
--- 12593,12603 ----
  
  File: gfortran.info,  Node: GAMMA,  Next: GERROR,  Prev: FTELL,  Up: Intrinsic Procedures
  
! 8.119 ‘GAMMA’ -- Gamma function
  ===============================
  
  _Description_:
!      ‘GAMMA(X)’ computes Gamma (\Gamma) of X.  For positive, integer
       values of X the Gamma function simplifies to the factorial function
       \Gamma(x)=(x-1)!.
  
*************** _Class_:
*** 12608,12621 ****
       Elemental function
  
  _Syntax_:
!      'X = GAMMA(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL' and neither zero nor a
                   negative integer.
  
  _Return value_:
!      The return value is of type 'REAL' of the same kind as X.
  
  _Example_:
            program test_gamma
--- 12608,12621 ----
       Elemental function
  
  _Syntax_:
!      ‘X = GAMMA(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’ and neither zero nor a
                   negative integer.
  
  _Return value_:
!      The return value is of type ‘REAL’ of the same kind as X.
  
  _Example_:
            program test_gamma
*************** _Example_:
*** 12626,12632 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DGAMMA(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Logarithm of the Gamma function:
--- 12626,12632 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DGAMMA(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Logarithm of the Gamma function:
*************** _See also_:
*** 12635,12646 ****
  
  File: gfortran.info,  Node: GERROR,  Next: GETARG,  Prev: GAMMA,  Up: Intrinsic Procedures
  
! 8.120 'GERROR' -- Get last system error message
  ===============================================
  
  _Description_:
       Returns the system error message corresponding to the last system
!      error.  This resembles the functionality of 'strerror(3)' in C.
  
  _Standard_:
       GNU extension
--- 12635,12646 ----
  
  File: gfortran.info,  Node: GERROR,  Next: GETARG,  Prev: GAMMA,  Up: Intrinsic Procedures
  
! 8.120 ‘GERROR’ -- Get last system error message
  ===============================================
  
  _Description_:
       Returns the system error message corresponding to the last system
!      error.  This resembles the functionality of ‘strerror(3)’ in C.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 12649,12658 ****
       Subroutine
  
  _Syntax_:
!      'CALL GERROR(RESULT)'
  
  _Arguments_:
!      RESULT      Shall be of type 'CHARACTER' and of default
                   kind.
  
  _Example_:
--- 12649,12658 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GERROR(RESULT)’
  
  _Arguments_:
!      RESULT      Shall be of type ‘CHARACTER’ and of default
                   kind.
  
  _Example_:
*************** _See also_:
*** 12669,12675 ****
  
  File: gfortran.info,  Node: GETARG,  Next: GET_COMMAND,  Prev: GERROR,  Up: Intrinsic Procedures
  
! 8.121 'GETARG' -- Get command line arguments
  ============================================
  
  _Description_:
--- 12669,12675 ----
  
  File: gfortran.info,  Node: GETARG,  Next: GET_COMMAND,  Prev: GERROR,  Up: Intrinsic Procedures
  
! 8.121 ‘GETARG’ -- Get command line arguments
  ============================================
  
  _Description_:
*************** _Class_:
*** 12688,12703 ****
       Subroutine
  
  _Syntax_:
!      'CALL GETARG(POS, VALUE)'
  
  _Arguments_:
!      POS         Shall be of type 'INTEGER' and not wider than
                   the default integer kind; POS \geq 0
!      VALUE       Shall be of type 'CHARACTER' and of default
                   kind.
  
  _Return value_:
!      After 'GETARG' returns, the VALUE argument holds the POSth command
       line argument.  If VALUE cannot hold the argument, it is truncated
       to fit the length of VALUE.  If there are less than POS arguments
       specified at the command line, VALUE will be filled with blanks.
--- 12688,12703 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GETARG(POS, VALUE)’
  
  _Arguments_:
!      POS         Shall be of type ‘INTEGER’ and not wider than
                   the default integer kind; POS \geq 0
!      VALUE       Shall be of type ‘CHARACTER’ and of default
                   kind.
  
  _Return value_:
!      After ‘GETARG’ returns, the VALUE argument holds the POSth command
       line argument.  If VALUE cannot hold the argument, it is truncated
       to fit the length of VALUE.  If there are less than POS arguments
       specified at the command line, VALUE will be filled with blanks.
*************** _See also_:
*** 12726,12732 ****
  
  File: gfortran.info,  Node: GET_COMMAND,  Next: GET_COMMAND_ARGUMENT,  Prev: GETARG,  Up: Intrinsic Procedures
  
! 8.122 'GET_COMMAND' -- Get the entire command line
  ==================================================
  
  _Description_:
--- 12726,12732 ----
  
  File: gfortran.info,  Node: GET_COMMAND,  Next: GET_COMMAND_ARGUMENT,  Prev: GETARG,  Up: Intrinsic Procedures
  
! 8.122 ‘GET_COMMAND’ -- Get the entire command line
  ==================================================
  
  _Description_:
*************** _Class_:
*** 12740,12753 ****
       Subroutine
  
  _Syntax_:
!      'CALL GET_COMMAND([COMMAND, LENGTH, STATUS])'
  
  _Arguments_:
!      COMMAND     (Optional) shall be of type 'CHARACTER' and of
                   default kind.
!      LENGTH      (Optional) Shall be of type 'INTEGER' and of
                   default kind.
!      STATUS      (Optional) Shall be of type 'INTEGER' and of
                   default kind.
  
  _Return value_:
--- 12740,12753 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GET_COMMAND([COMMAND, LENGTH, STATUS])’
  
  _Arguments_:
!      COMMAND     (Optional) shall be of type ‘CHARACTER’ and of
                   default kind.
!      LENGTH      (Optional) Shall be of type ‘INTEGER’ and of
                   default kind.
!      STATUS      (Optional) Shall be of type ‘INTEGER’ and of
                   default kind.
  
  _Return value_:
*************** _See also_:
*** 12772,12778 ****
  
  File: gfortran.info,  Node: GET_COMMAND_ARGUMENT,  Next: GETCWD,  Prev: GET_COMMAND,  Up: Intrinsic Procedures
  
! 8.123 'GET_COMMAND_ARGUMENT' -- Get command line arguments
  ==========================================================
  
  _Description_:
--- 12772,12778 ----
  
  File: gfortran.info,  Node: GET_COMMAND_ARGUMENT,  Next: GETCWD,  Prev: GET_COMMAND,  Up: Intrinsic Procedures
  
! 8.123 ‘GET_COMMAND_ARGUMENT’ -- Get command line arguments
  ==========================================================
  
  _Description_:
*************** _Class_:
*** 12786,12805 ****
       Subroutine
  
  _Syntax_:
!      'CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])'
  
  _Arguments_:
!      NUMBER      Shall be a scalar of type 'INTEGER' and of
                   default kind, NUMBER \geq 0
!      VALUE       (Optional) Shall be a scalar of type 'CHARACTER'
                   and of default kind.
!      LENGTH      (Optional) Shall be a scalar of type 'INTEGER'
                   and of default kind.
!      STATUS      (Optional) Shall be a scalar of type 'INTEGER'
                   and of default kind.
  
  _Return value_:
!      After 'GET_COMMAND_ARGUMENT' returns, the VALUE argument holds the
       NUMBER-th command line argument.  If VALUE cannot hold the
       argument, it is truncated to fit the length of VALUE.  If there are
       less than NUMBER arguments specified at the command line, VALUE
--- 12786,12805 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])’
  
  _Arguments_:
!      NUMBER      Shall be a scalar of type ‘INTEGER’ and of
                   default kind, NUMBER \geq 0
!      VALUE       (Optional) Shall be a scalar of type ‘CHARACTER’
                   and of default kind.
!      LENGTH      (Optional) Shall be a scalar of type ‘INTEGER’
                   and of default kind.
!      STATUS      (Optional) Shall be a scalar of type ‘INTEGER’
                   and of default kind.
  
  _Return value_:
!      After ‘GET_COMMAND_ARGUMENT’ returns, the VALUE argument holds the
       NUMBER-th command line argument.  If VALUE cannot hold the
       argument, it is truncated to fit the length of VALUE.  If there are
       less than NUMBER arguments specified at the command line, VALUE
*************** _See also_:
*** 12832,12838 ****
  
  File: gfortran.info,  Node: GETCWD,  Next: GETENV,  Prev: GET_COMMAND_ARGUMENT,  Up: Intrinsic Procedures
  
! 8.124 'GETCWD' -- Get current working directory
  ===============================================
  
  _Description_:
--- 12832,12838 ----
  
  File: gfortran.info,  Node: GETCWD,  Next: GETENV,  Prev: GET_COMMAND_ARGUMENT,  Up: Intrinsic Procedures
  
! 8.124 ‘GETCWD’ -- Get current working directory
  ===============================================
  
  _Description_:
*************** _Class_:
*** 12848,12858 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL GETCWD(C [, STATUS])'
!      'STATUS = GETCWD(C)'
  
  _Arguments_:
!      C           The type shall be 'CHARACTER' and of default
                   kind.
       STATUS      (Optional) status flag.  Returns 0 on success, a
                   system specific and nonzero error code
--- 12848,12858 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL GETCWD(C [, STATUS])’
!      ‘STATUS = GETCWD(C)’
  
  _Arguments_:
!      C           The type shall be ‘CHARACTER’ and of default
                   kind.
       STATUS      (Optional) status flag.  Returns 0 on success, a
                   system specific and nonzero error code
*************** _See also_:
*** 12871,12877 ****
  
  File: gfortran.info,  Node: GETENV,  Next: GET_ENVIRONMENT_VARIABLE,  Prev: GETCWD,  Up: Intrinsic Procedures
  
! 8.125 'GETENV' -- Get an environmental variable
  ===============================================
  
  _Description_:
--- 12871,12877 ----
  
  File: gfortran.info,  Node: GETENV,  Next: GET_ENVIRONMENT_VARIABLE,  Prev: GETCWD,  Up: Intrinsic Procedures
  
! 8.125 ‘GETENV’ -- Get an environmental variable
  ===============================================
  
  _Description_:
*************** _Description_:
*** 12882,12890 ****
       of the *note GET_ENVIRONMENT_VARIABLE:: intrinsic defined by the
       Fortran 2003 standard.
  
!      Note that 'GETENV' need not be thread-safe.  It is the
       responsibility of the user to ensure that the environment is not
!      being updated concurrently with a call to the 'GETENV' intrinsic.
  
  _Standard_:
       GNU extension
--- 12882,12890 ----
       of the *note GET_ENVIRONMENT_VARIABLE:: intrinsic defined by the
       Fortran 2003 standard.
  
!      Note that ‘GETENV’ need not be thread-safe.  It is the
       responsibility of the user to ensure that the environment is not
!      being updated concurrently with a call to the ‘GETENV’ intrinsic.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 12893,12904 ****
       Subroutine
  
  _Syntax_:
!      'CALL GETENV(NAME, VALUE)'
  
  _Arguments_:
!      NAME        Shall be of type 'CHARACTER' and of default
                   kind.
!      VALUE       Shall be of type 'CHARACTER' and of default
                   kind.
  
  _Return value_:
--- 12893,12904 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GETENV(NAME, VALUE)’
  
  _Arguments_:
!      NAME        Shall be of type ‘CHARACTER’ and of default
                   kind.
!      VALUE       Shall be of type ‘CHARACTER’ and of default
                   kind.
  
  _Return value_:
*************** _See also_:
*** 12919,12934 ****
  
  File: gfortran.info,  Node: GET_ENVIRONMENT_VARIABLE,  Next: GETGID,  Prev: GETENV,  Up: Intrinsic Procedures
  
! 8.126 'GET_ENVIRONMENT_VARIABLE' -- Get an environmental variable
  =================================================================
  
  _Description_:
       Get the VALUE of the environmental variable NAME.
  
!      Note that 'GET_ENVIRONMENT_VARIABLE' need not be thread-safe.  It
       is the responsibility of the user to ensure that the environment is
       not being updated concurrently with a call to the
!      'GET_ENVIRONMENT_VARIABLE' intrinsic.
  
  _Standard_:
       Fortran 2003 and later
--- 12919,12934 ----
  
  File: gfortran.info,  Node: GET_ENVIRONMENT_VARIABLE,  Next: GETGID,  Prev: GETENV,  Up: Intrinsic Procedures
  
! 8.126 ‘GET_ENVIRONMENT_VARIABLE’ -- Get an environmental variable
  =================================================================
  
  _Description_:
       Get the VALUE of the environmental variable NAME.
  
!      Note that ‘GET_ENVIRONMENT_VARIABLE’ need not be thread-safe.  It
       is the responsibility of the user to ensure that the environment is
       not being updated concurrently with a call to the
!      ‘GET_ENVIRONMENT_VARIABLE’ intrinsic.
  
  _Standard_:
       Fortran 2003 and later
*************** _Class_:
*** 12937,12955 ****
       Subroutine
  
  _Syntax_:
!      'CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS,
!      TRIM_NAME)'
  
  _Arguments_:
!      NAME        Shall be a scalar of type 'CHARACTER' and of
                   default kind.
!      VALUE       (Optional) Shall be a scalar of type 'CHARACTER'
                   and of default kind.
!      LENGTH      (Optional) Shall be a scalar of type 'INTEGER'
                   and of default kind.
!      STATUS      (Optional) Shall be a scalar of type 'INTEGER'
                   and of default kind.
!      TRIM_NAME   (Optional) Shall be a scalar of type 'LOGICAL'
                   and of default kind.
  
  _Return value_:
--- 12937,12955 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS,
!      TRIM_NAME)’
  
  _Arguments_:
!      NAME        Shall be a scalar of type ‘CHARACTER’ and of
                   default kind.
!      VALUE       (Optional) Shall be a scalar of type ‘CHARACTER’
                   and of default kind.
!      LENGTH      (Optional) Shall be a scalar of type ‘INTEGER’
                   and of default kind.
!      STATUS      (Optional) Shall be a scalar of type ‘INTEGER’
                   and of default kind.
!      TRIM_NAME   (Optional) Shall be a scalar of type ‘LOGICAL’
                   and of default kind.
  
  _Return value_:
*************** _Return value_:
*** 12961,12967 ****
       variable; it is 1 if the environment variable does not exist and 2
       if the processor does not support environment variables; in all
       other cases STATUS is zero.  If TRIM_NAME is present with the value
!      '.FALSE.', the trailing blanks in NAME are significant; otherwise
       they are not part of the environment variable name.
  
  _Example_:
--- 12961,12967 ----
       variable; it is 1 if the environment variable does not exist and 2
       if the processor does not support environment variables; in all
       other cases STATUS is zero.  If TRIM_NAME is present with the value
!      ‘.FALSE.’, the trailing blanks in NAME are significant; otherwise
       they are not part of the environment variable name.
  
  _Example_:
*************** _Example_:
*** 12974,12980 ****
  
  File: gfortran.info,  Node: GETGID,  Next: GETLOG,  Prev: GET_ENVIRONMENT_VARIABLE,  Up: Intrinsic Procedures
  
! 8.127 'GETGID' -- Group ID function
  ===================================
  
  _Description_:
--- 12974,12980 ----
  
  File: gfortran.info,  Node: GETGID,  Next: GETLOG,  Prev: GET_ENVIRONMENT_VARIABLE,  Up: Intrinsic Procedures
  
! 8.127 ‘GETGID’ -- Group ID function
  ===================================
  
  _Description_:
*************** _Class_:
*** 12987,12999 ****
       Function
  
  _Syntax_:
!      'RESULT = GETGID()'
  
  _Return value_:
!      The return value of 'GETGID' is an 'INTEGER' of the default kind.
  
  _Example_:
!      See 'GETPID' for an example.
  
  _See also_:
       *note GETPID::,
--- 12987,12999 ----
       Function
  
  _Syntax_:
!      ‘RESULT = GETGID()’
  
  _Return value_:
!      The return value of ‘GETGID’ is an ‘INTEGER’ of the default kind.
  
  _Example_:
!      See ‘GETPID’ for an example.
  
  _See also_:
       *note GETPID::,
*************** _See also_:
*** 13002,13008 ****
  
  File: gfortran.info,  Node: GETLOG,  Next: GETPID,  Prev: GETGID,  Up: Intrinsic Procedures
  
! 8.128 'GETLOG' -- Get login name
  ================================
  
  _Description_:
--- 13002,13008 ----
  
  File: gfortran.info,  Node: GETLOG,  Next: GETPID,  Prev: GETGID,  Up: Intrinsic Procedures
  
! 8.128 ‘GETLOG’ -- Get login name
  ================================
  
  _Description_:
*************** _Class_:
*** 13015,13030 ****
       Subroutine
  
  _Syntax_:
!      'CALL GETLOG(C)'
  
  _Arguments_:
!      C           Shall be of type 'CHARACTER' and of default
                   kind.
  
  _Return value_:
       Stores the current user name in C.  (On systems where POSIX
!      functions 'geteuid' and 'getpwuid' are not available, and the
!      'getlogin' function is not implemented either, this will return a
       blank string.)
  
  _Example_:
--- 13015,13030 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GETLOG(C)’
  
  _Arguments_:
!      C           Shall be of type ‘CHARACTER’ and of default
                   kind.
  
  _Return value_:
       Stores the current user name in C.  (On systems where POSIX
!      functions ‘geteuid’ and ‘getpwuid’ are not available, and the
!      ‘getlogin’ function is not implemented either, this will return a
       blank string.)
  
  _Example_:
*************** _See also_:
*** 13040,13046 ****
  
  File: gfortran.info,  Node: GETPID,  Next: GETUID,  Prev: GETLOG,  Up: Intrinsic Procedures
  
! 8.129 'GETPID' -- Process ID function
  =====================================
  
  _Description_:
--- 13040,13046 ----
  
  File: gfortran.info,  Node: GETPID,  Next: GETUID,  Prev: GETLOG,  Up: Intrinsic Procedures
  
! 8.129 ‘GETPID’ -- Process ID function
  =====================================
  
  _Description_:
*************** _Class_:
*** 13053,13062 ****
       Function
  
  _Syntax_:
!      'RESULT = GETPID()'
  
  _Return value_:
!      The return value of 'GETPID' is an 'INTEGER' of the default kind.
  
  _Example_:
            program info
--- 13053,13062 ----
       Function
  
  _Syntax_:
!      ‘RESULT = GETPID()’
  
  _Return value_:
!      The return value of ‘GETPID’ is an ‘INTEGER’ of the default kind.
  
  _Example_:
            program info
*************** _See also_:
*** 13072,13078 ****
  
  File: gfortran.info,  Node: GETUID,  Next: GMTIME,  Prev: GETPID,  Up: Intrinsic Procedures
  
! 8.130 'GETUID' -- User ID function
  ==================================
  
  _Description_:
--- 13072,13078 ----
  
  File: gfortran.info,  Node: GETUID,  Next: GMTIME,  Prev: GETPID,  Up: Intrinsic Procedures
  
! 8.130 ‘GETUID’ -- User ID function
  ==================================
  
  _Description_:
*************** _Class_:
*** 13085,13097 ****
       Function
  
  _Syntax_:
!      'RESULT = GETUID()'
  
  _Return value_:
!      The return value of 'GETUID' is an 'INTEGER' of the default kind.
  
  _Example_:
!      See 'GETPID' for an example.
  
  _See also_:
       *note GETPID::,
--- 13085,13097 ----
       Function
  
  _Syntax_:
!      ‘RESULT = GETUID()’
  
  _Return value_:
!      The return value of ‘GETUID’ is an ‘INTEGER’ of the default kind.
  
  _Example_:
!      See ‘GETPID’ for an example.
  
  _See also_:
       *note GETPID::,
*************** _See also_:
*** 13100,13113 ****
  
  File: gfortran.info,  Node: GMTIME,  Next: HOSTNM,  Prev: GETUID,  Up: Intrinsic Procedures
  
! 8.131 'GMTIME' -- Convert time to GMT info
  ==========================================
  
  _Description_:
       Given a system time value TIME (as provided by the *note TIME::
       intrinsic), fills VALUES with values extracted from it appropriate
       to the UTC time zone (Universal Coordinated Time, also known in
!      some countries as GMT, Greenwich Mean Time), using 'gmtime(3)'.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  In new code, programmers should consider the use
--- 13100,13113 ----
  
  File: gfortran.info,  Node: GMTIME,  Next: HOSTNM,  Prev: GETUID,  Up: Intrinsic Procedures
  
! 8.131 ‘GMTIME’ -- Convert time to GMT info
  ==========================================
  
  _Description_:
       Given a system time value TIME (as provided by the *note TIME::
       intrinsic), fills VALUES with values extracted from it appropriate
       to the UTC time zone (Universal Coordinated Time, also known in
!      some countries as GMT, Greenwich Mean Time), using ‘gmtime(3)’.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  In new code, programmers should consider the use
*************** _Class_:
*** 13121,13133 ****
       Subroutine
  
  _Syntax_:
!      'CALL GMTIME(TIME, VALUES)'
  
  _Arguments_:
!      TIME        An 'INTEGER' scalar expression corresponding to
!                  a system time, with 'INTENT(IN)'.
!      VALUES      A default 'INTEGER' array with 9 elements, with
!                  'INTENT(OUT)'.
  
  _Return value_:
       The elements of VALUES are assigned as follows:
--- 13121,13133 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL GMTIME(TIME, VALUES)’
  
  _Arguments_:
!      TIME        An ‘INTEGER’ scalar expression corresponding to
!                  a system time, with ‘INTENT(IN)’.
!      VALUES      A default ‘INTEGER’ array with 9 elements, with
!                  ‘INTENT(OUT)’.
  
  _Return value_:
       The elements of VALUES are assigned as follows:
*************** _See also_:
*** 13154,13160 ****
  
  File: gfortran.info,  Node: HOSTNM,  Next: HUGE,  Prev: GMTIME,  Up: Intrinsic Procedures
  
! 8.132 'HOSTNM' -- Get system host name
  ======================================
  
  _Description_:
--- 13154,13160 ----
  
  File: gfortran.info,  Node: HOSTNM,  Next: HUGE,  Prev: GMTIME,  Up: Intrinsic Procedures
  
! 8.132 ‘HOSTNM’ -- Get system host name
  ======================================
  
  _Description_:
*************** _Class_:
*** 13171,13182 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL HOSTNM(C [, STATUS])'
!      'STATUS = HOSTNM(NAME)'
  
  _Arguments_:
!      C           Shall of type 'CHARACTER' and of default kind.
!      STATUS      (Optional) status flag of type 'INTEGER'.
                   Returns 0 on success, or a system specific error
                   code otherwise.
  
--- 13171,13182 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL HOSTNM(C [, STATUS])’
!      ‘STATUS = HOSTNM(NAME)’
  
  _Arguments_:
!      C           Shall of type ‘CHARACTER’ and of default kind.
!      STATUS      (Optional) status flag of type ‘INTEGER’.
                   Returns 0 on success, or a system specific error
                   code otherwise.
  
*************** _Return value_:
*** 13187,13198 ****
  
  File: gfortran.info,  Node: HUGE,  Next: HYPOT,  Prev: HOSTNM,  Up: Intrinsic Procedures
  
! 8.133 'HUGE' -- Largest number of a kind
  ========================================
  
  _Description_:
!      'HUGE(X)' returns the largest number that is not an infinity in the
!      model of the type of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 13187,13198 ----
  
  File: gfortran.info,  Node: HUGE,  Next: HYPOT,  Prev: HOSTNM,  Up: Intrinsic Procedures
  
! 8.133 ‘HUGE’ -- Largest number of a kind
  ========================================
  
  _Description_:
!      ‘HUGE(X)’ returns the largest number that is not an infinity in the
!      model of the type of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 13201,13210 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = HUGE(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL' or 'INTEGER'.
  
  _Return value_:
       The return value is of the same type and kind as X
--- 13201,13210 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = HUGE(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’ or ‘INTEGER’.
  
  _Return value_:
       The return value is of the same type and kind as X
*************** _Example_:
*** 13218,13228 ****
  
  File: gfortran.info,  Node: HYPOT,  Next: IACHAR,  Prev: HUGE,  Up: Intrinsic Procedures
  
! 8.134 'HYPOT' -- Euclidean distance function
  ============================================
  
  _Description_:
!      'HYPOT(X,Y)' is the Euclidean distance function.  It is equal to
       \sqrt{X^2 + Y^2}, without undue underflow or overflow.
  
  _Standard_:
--- 13218,13228 ----
  
  File: gfortran.info,  Node: HYPOT,  Next: IACHAR,  Prev: HUGE,  Up: Intrinsic Procedures
  
! 8.134 ‘HYPOT’ -- Euclidean distance function
  ============================================
  
  _Description_:
!      ‘HYPOT(X,Y)’ is the Euclidean distance function.  It is equal to
       \sqrt{X^2 + Y^2}, without undue underflow or overflow.
  
  _Standard_:
*************** _Class_:
*** 13232,13241 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = HYPOT(X, Y)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
       Y           The type and kind type parameter shall be the
                   same as X.
  
--- 13232,13241 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = HYPOT(X, Y)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
       Y           The type and kind type parameter shall be the
                   same as X.
  
*************** _Example_:
*** 13251,13262 ****
  
  File: gfortran.info,  Node: IACHAR,  Next: IALL,  Prev: HYPOT,  Up: Intrinsic Procedures
  
! 8.135 'IACHAR' -- Code in ASCII collating sequence
  ==================================================
  
  _Description_:
!      'IACHAR(C)' returns the code for the ASCII character in the first
!      character position of 'C'.
  
  _Standard_:
       Fortran 95 and later, with KIND argument Fortran 2003 and later
--- 13251,13262 ----
  
  File: gfortran.info,  Node: IACHAR,  Next: IALL,  Prev: HYPOT,  Up: Intrinsic Procedures
  
! 8.135 ‘IACHAR’ -- Code in ASCII collating sequence
  ==================================================
  
  _Description_:
!      ‘IACHAR(C)’ returns the code for the ASCII character in the first
!      character position of ‘C’.
  
  _Standard_:
       Fortran 95 and later, with KIND argument Fortran 2003 and later
*************** _Class_:
*** 13265,13280 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IACHAR(C [, KIND])'
  
  _Arguments_:
!      C           Shall be a scalar 'CHARACTER', with 'INTENT(IN)'
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
--- 13265,13280 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IACHAR(C [, KIND])’
  
  _Arguments_:
!      C           Shall be a scalar ‘CHARACTER’, with ‘INTENT(IN)’
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
*************** _See also_:
*** 13295,13306 ****
  
  File: gfortran.info,  Node: IALL,  Next: IAND,  Prev: IACHAR,  Up: Intrinsic Procedures
  
! 8.136 'IALL' -- Bitwise AND of array elements
  =============================================
  
  _Description_:
       Reduces with bitwise AND the elements of ARRAY along dimension DIM
!      if the corresponding element in MASK is 'TRUE'.
  
  _Standard_:
       Fortran 2008 and later
--- 13295,13306 ----
  
  File: gfortran.info,  Node: IALL,  Next: IAND,  Prev: IACHAR,  Up: Intrinsic Procedures
  
! 8.136 ‘IALL’ -- Bitwise AND of array elements
  =============================================
  
  _Description_:
       Reduces with bitwise AND the elements of ARRAY along dimension DIM
!      if the corresponding element in MASK is ‘TRUE’.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 13309,13323 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = IALL(ARRAY[, MASK])'
!      'RESULT = IALL(ARRAY, DIM[, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER'
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type 'LOGICAL' and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
--- 13309,13323 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = IALL(ARRAY[, MASK])’
!      ‘RESULT = IALL(ARRAY, DIM[, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type ‘LOGICAL’ and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
*************** _See also_:
*** 13348,13358 ****
  
  File: gfortran.info,  Node: IAND,  Next: IANY,  Prev: IALL,  Up: Intrinsic Procedures
  
! 8.137 'IAND' -- Bitwise logical and
  ===================================
  
  _Description_:
!      Bitwise logical 'AND'.
  
  _Standard_:
       Fortran 90 and later, with boz-literal-constant Fortran 2008 and
--- 13348,13358 ----
  
  File: gfortran.info,  Node: IAND,  Next: IANY,  Prev: IALL,  Up: Intrinsic Procedures
  
! 8.137 ‘IAND’ -- Bitwise logical and
  ===================================
  
  _Description_:
!      Bitwise logical ‘AND’.
  
  _Standard_:
       Fortran 90 and later, with boz-literal-constant Fortran 2008 and
*************** _Class_:
*** 13362,13379 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IAND(I, J)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER' or a
                   boz-literal-constant.
!      J           The type shall be 'INTEGER' with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
  
  _Return value_:
!      The return type is 'INTEGER' with the kind type parameter of the
!      arguments.  A boz-literal-constant is converted to an 'INTEGER'
       with the kind type parameter of the other argument as-if a call to
       *note INT:: occurred.
  
--- 13362,13379 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IAND(I, J)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’ or a
                   boz-literal-constant.
!      J           The type shall be ‘INTEGER’ with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
  
  _Return value_:
!      The return type is ‘INTEGER’ with the kind type parameter of the
!      arguments.  A boz-literal-constant is converted to an ‘INTEGER’
       with the kind type parameter of the other argument as-if a call to
       *note INT:: occurred.
  
*************** _Example_:
*** 13387,13397 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'IAND(A)'      'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BIAND(A)'     'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIAND(A)'     'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIAND(A)'     'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIAND(A)'     'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IOR::,
--- 13387,13397 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘IAND(A)’      ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BIAND(A)’     ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIAND(A)’     ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIAND(A)’     ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIAND(A)’     ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IOR::,
*************** _See also_:
*** 13404,13415 ****
  
  File: gfortran.info,  Node: IANY,  Next: IARGC,  Prev: IAND,  Up: Intrinsic Procedures
  
! 8.138 'IANY' -- Bitwise OR of array elements
  ============================================
  
  _Description_:
       Reduces with bitwise OR (inclusive or) the elements of ARRAY along
!      dimension DIM if the corresponding element in MASK is 'TRUE'.
  
  _Standard_:
       Fortran 2008 and later
--- 13404,13415 ----
  
  File: gfortran.info,  Node: IANY,  Next: IARGC,  Prev: IAND,  Up: Intrinsic Procedures
  
! 8.138 ‘IANY’ -- Bitwise OR of array elements
  ============================================
  
  _Description_:
       Reduces with bitwise OR (inclusive or) the elements of ARRAY along
!      dimension DIM if the corresponding element in MASK is ‘TRUE’.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 13418,13432 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = IANY(ARRAY[, MASK])'
!      'RESULT = IANY(ARRAY, DIM[, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER'
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type 'LOGICAL' and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
--- 13418,13432 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = IANY(ARRAY[, MASK])’
!      ‘RESULT = IANY(ARRAY, DIM[, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type ‘LOGICAL’ and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
*************** _See also_:
*** 13457,13467 ****
  
  File: gfortran.info,  Node: IARGC,  Next: IBCLR,  Prev: IANY,  Up: Intrinsic Procedures
  
! 8.139 'IARGC' -- Get the number of command line arguments
  =========================================================
  
  _Description_:
!      'IARGC' returns the number of arguments passed on the command line
       when the containing program was invoked.
  
       This intrinsic routine is provided for backwards compatibility with
--- 13457,13467 ----
  
  File: gfortran.info,  Node: IARGC,  Next: IBCLR,  Prev: IANY,  Up: Intrinsic Procedures
  
! 8.139 ‘IARGC’ -- Get the number of command line arguments
  =========================================================
  
  _Description_:
!      ‘IARGC’ returns the number of arguments passed on the command line
       when the containing program was invoked.
  
       This intrinsic routine is provided for backwards compatibility with
*************** _Class_:
*** 13476,13488 ****
       Function
  
  _Syntax_:
!      'RESULT = IARGC()'
  
  _Arguments_:
       None
  
  _Return value_:
!      The number of command line arguments, type 'INTEGER(4)'.
  
  _Example_:
       See *note GETARG::
--- 13476,13488 ----
       Function
  
  _Syntax_:
!      ‘RESULT = IARGC()’
  
  _Arguments_:
       None
  
  _Return value_:
!      The number of command line arguments, type ‘INTEGER(4)’.
  
  _Example_:
       See *note GETARG::
*************** _See also_:
*** 13498,13508 ****
  
  File: gfortran.info,  Node: IBCLR,  Next: IBITS,  Prev: IARGC,  Up: Intrinsic Procedures
  
! 8.140 'IBCLR' -- Clear bit
  ==========================
  
  _Description_:
!      'IBCLR' returns the value of I with the bit at position POS set to
       zero.
  
  _Standard_:
--- 13498,13508 ----
  
  File: gfortran.info,  Node: IBCLR,  Next: IBITS,  Prev: IARGC,  Up: Intrinsic Procedures
  
! 8.140 ‘IBCLR’ -- Clear bit
  ==========================
  
  _Description_:
!      ‘IBCLR’ returns the value of I with the bit at position POS set to
       zero.
  
  _Standard_:
*************** _Class_:
*** 13512,13534 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IBCLR(I, POS)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      POS         The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'IBCLR(A)'     'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BBCLR(A)'     'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIBCLR(A)'    'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIBCLR(A)'    'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIBCLR(A)'    'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IBITS::,
--- 13512,13534 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IBCLR(I, POS)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      POS         The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘IBCLR(A)’     ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BBCLR(A)’     ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIBCLR(A)’    ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIBCLR(A)’    ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIBCLR(A)’    ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IBITS::,
*************** _See also_:
*** 13541,13554 ****
  
  File: gfortran.info,  Node: IBITS,  Next: IBSET,  Prev: IBCLR,  Up: Intrinsic Procedures
  
! 8.141 'IBITS' -- Bit extraction
  ===============================
  
  _Description_:
!      'IBITS' extracts a field of length LEN from I, starting from bit
       position POS and extending left for LEN bits.  The result is
       right-justified and the remaining bits are zeroed.  The value of
!      'POS+LEN' must be less than or equal to the value 'BIT_SIZE(I)'.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
--- 13541,13554 ----
  
  File: gfortran.info,  Node: IBITS,  Next: IBSET,  Prev: IBCLR,  Up: Intrinsic Procedures
  
! 8.141 ‘IBITS’ -- Bit extraction
  ===============================
  
  _Description_:
!      ‘IBITS’ extracts a field of length LEN from I, starting from bit
       position POS and extending left for LEN bits.  The result is
       right-justified and the remaining bits are zeroed.  The value of
!      ‘POS+LEN’ must be less than or equal to the value ‘BIT_SIZE(I)’.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
*************** _Class_:
*** 13557,13580 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IBITS(I, POS, LEN)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      POS         The type shall be 'INTEGER'.
!      LEN         The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'IBITS(A)'     'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BBITS(A)'     'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIBITS(A)'    'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIBITS(A)'    'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIBITS(A)'    'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note BIT_SIZE::,
--- 13557,13580 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IBITS(I, POS, LEN)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      POS         The type shall be ‘INTEGER’.
!      LEN         The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘IBITS(A)’     ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BBITS(A)’     ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIBITS(A)’    ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIBITS(A)’    ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIBITS(A)’    ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note BIT_SIZE::,
*************** _See also_:
*** 13587,13597 ****
  
  File: gfortran.info,  Node: IBSET,  Next: ICHAR,  Prev: IBITS,  Up: Intrinsic Procedures
  
! 8.142 'IBSET' -- Set bit
  ========================
  
  _Description_:
!      'IBSET' returns the value of I with the bit at position POS set to
       one.
  
  _Standard_:
--- 13587,13597 ----
  
  File: gfortran.info,  Node: IBSET,  Next: ICHAR,  Prev: IBITS,  Up: Intrinsic Procedures
  
! 8.142 ‘IBSET’ -- Set bit
  ========================
  
  _Description_:
!      ‘IBSET’ returns the value of I with the bit at position POS set to
       one.
  
  _Standard_:
*************** _Class_:
*** 13601,13623 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IBSET(I, POS)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      POS         The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'IBSET(A)'     'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BBSET(A)'     'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIBSET(A)'    'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIBSET(A)'    'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIBSET(A)'    'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IBCLR::,
--- 13601,13623 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IBSET(I, POS)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      POS         The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘IBSET(A)’     ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BBSET(A)’     ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIBSET(A)’    ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIBSET(A)’    ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIBSET(A)’    ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IBCLR::,
*************** _See also_:
*** 13630,13641 ****
  
  File: gfortran.info,  Node: ICHAR,  Next: IDATE,  Prev: IBSET,  Up: Intrinsic Procedures
  
! 8.143 'ICHAR' -- Character-to-integer conversion function
  =========================================================
  
  _Description_:
!      'ICHAR(C)' returns the code for the character in the first
!      character position of 'C' in the system's native character set.
       The correspondence between characters and their codes is not
       necessarily the same across different GNU Fortran implementations.
  
--- 13630,13641 ----
  
  File: gfortran.info,  Node: ICHAR,  Next: IDATE,  Prev: IBSET,  Up: Intrinsic Procedures
  
! 8.143 ‘ICHAR’ -- Character-to-integer conversion function
  =========================================================
  
  _Description_:
!      ‘ICHAR(C)’ returns the code for the character in the first
!      character position of ‘C’ in the system's native character set.
       The correspondence between characters and their codes is not
       necessarily the same across different GNU Fortran implementations.
  
*************** _Class_:
*** 13646,13661 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ICHAR(C [, KIND])'
  
  _Arguments_:
!      C           Shall be a scalar 'CHARACTER', with 'INTENT(IN)'
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
--- 13646,13661 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ICHAR(C [, KIND])’
  
  _Arguments_:
!      C           Shall be a scalar ‘CHARACTER’, with ‘INTENT(IN)’
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
*************** _Example_:
*** 13667,13678 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ICHAR(C)'     'CHARACTER C'     'INTEGER(4)'   Fortran 77 and later
  
  _Note_:
       No intrinsic exists to convert between a numeric value and a
       formatted character string representation - for instance, given the
!      'CHARACTER' value ''154'', obtaining an 'INTEGER' or 'REAL' value
       with the value 154, or vice versa.  Instead, this functionality is
       provided by internal-file I/O, as in the following example:
            program read_val
--- 13667,13678 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ICHAR(C)’     ‘CHARACTER C’     ‘INTEGER(4)’   Fortran 77 and later
  
  _Note_:
       No intrinsic exists to convert between a numeric value and a
       formatted character string representation - for instance, given the
!      ‘CHARACTER’ value ‘'154'’, obtaining an ‘INTEGER’ or ‘REAL’ value
       with the value 154, or vice versa.  Instead, this functionality is
       provided by internal-file I/O, as in the following example:
            program read_val
*************** _See also_:
*** 13697,13707 ****
  
  File: gfortran.info,  Node: IDATE,  Next: IEOR,  Prev: ICHAR,  Up: Intrinsic Procedures
  
! 8.144 'IDATE' -- Get current local time subroutine (day/month/year)
  ===================================================================
  
  _Description_:
!      'IDATE(VALUES)' Fills VALUES with the numerical values at the
       current local time.  The day (in the range 1-31), month (in the
       range 1-12), and year appear in elements 1, 2, and 3 of VALUES,
       respectively.  The year has four significant digits.
--- 13697,13707 ----
  
  File: gfortran.info,  Node: IDATE,  Next: IEOR,  Prev: ICHAR,  Up: Intrinsic Procedures
  
! 8.144 ‘IDATE’ -- Get current local time subroutine (day/month/year)
  ===================================================================
  
  _Description_:
!      ‘IDATE(VALUES)’ Fills VALUES with the numerical values at the
       current local time.  The day (in the range 1-31), month (in the
       range 1-12), and year appear in elements 1, 2, and 3 of VALUES,
       respectively.  The year has four significant digits.
*************** _Class_:
*** 13718,13727 ****
       Subroutine
  
  _Syntax_:
!      'CALL IDATE(VALUES)'
  
  _Arguments_:
!      VALUES      The type shall be 'INTEGER, DIMENSION(3)' and
                   the kind shall be the default integer kind.
  
  _Return value_:
--- 13718,13727 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL IDATE(VALUES)’
  
  _Arguments_:
!      VALUES      The type shall be ‘INTEGER, DIMENSION(3)’ and
                   the kind shall be the default integer kind.
  
  _Return value_:
*************** _See also_:
*** 13742,13752 ****
  
  File: gfortran.info,  Node: IEOR,  Next: IERRNO,  Prev: IDATE,  Up: Intrinsic Procedures
  
! 8.145 'IEOR' -- Bitwise logical exclusive or
  ============================================
  
  _Description_:
!      'IEOR' returns the bitwise Boolean exclusive-OR of I and J.
  
  _Standard_:
       Fortran 90 and later, with boz-literal-constant Fortran 2008 and
--- 13742,13752 ----
  
  File: gfortran.info,  Node: IEOR,  Next: IERRNO,  Prev: IDATE,  Up: Intrinsic Procedures
  
! 8.145 ‘IEOR’ -- Bitwise logical exclusive or
  ============================================
  
  _Description_:
!      ‘IEOR’ returns the bitwise Boolean exclusive-OR of I and J.
  
  _Standard_:
       Fortran 90 and later, with boz-literal-constant Fortran 2008 and
*************** _Class_:
*** 13756,13784 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IEOR(I, J)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER' or a
                   boz-literal-constant.
!      J           The type shall be 'INTEGER' with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
  
  _Return value_:
!      The return type is 'INTEGER' with the kind type parameter of the
!      arguments.  A boz-literal-constant is converted to an 'INTEGER'
       with the kind type parameter of the other argument as-if a call to
       *note INT:: occurred.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'IEOR(A)'      'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BIEOR(A)'     'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIEOR(A)'     'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIEOR(A)'     'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIEOR(A)'     'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IOR::,
--- 13756,13784 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IEOR(I, J)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’ or a
                   boz-literal-constant.
!      J           The type shall be ‘INTEGER’ with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
  
  _Return value_:
!      The return type is ‘INTEGER’ with the kind type parameter of the
!      arguments.  A boz-literal-constant is converted to an ‘INTEGER’
       with the kind type parameter of the other argument as-if a call to
       *note INT:: occurred.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘IEOR(A)’      ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BIEOR(A)’     ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIEOR(A)’     ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIEOR(A)’     ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIEOR(A)’     ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IOR::,
*************** _See also_:
*** 13791,13801 ****
  
  File: gfortran.info,  Node: IERRNO,  Next: IMAGE_INDEX,  Prev: IEOR,  Up: Intrinsic Procedures
  
! 8.146 'IERRNO' -- Get the last system error number
  ==================================================
  
  _Description_:
!      Returns the last system error number, as given by the C 'errno'
       variable.
  
  _Standard_:
--- 13791,13801 ----
  
  File: gfortran.info,  Node: IERRNO,  Next: IMAGE_INDEX,  Prev: IEOR,  Up: Intrinsic Procedures
  
! 8.146 ‘IERRNO’ -- Get the last system error number
  ==================================================
  
  _Description_:
!      Returns the last system error number, as given by the C ‘errno’
       variable.
  
  _Standard_:
*************** _Class_:
*** 13805,13817 ****
       Function
  
  _Syntax_:
!      'RESULT = IERRNO()'
  
  _Arguments_:
       None
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _See also_:
--- 13805,13817 ----
       Function
  
  _Syntax_:
!      ‘RESULT = IERRNO()’
  
  _Arguments_:
       None
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _See also_:
*************** _See also_:
*** 13820,13826 ****
  
  File: gfortran.info,  Node: IMAGE_INDEX,  Next: INDEX intrinsic,  Prev: IERRNO,  Up: Intrinsic Procedures
  
! 8.147 'IMAGE_INDEX' -- Function that converts a cosubscript to an image index
  =============================================================================
  
  _Description_:
--- 13820,13826 ----
  
  File: gfortran.info,  Node: IMAGE_INDEX,  Next: INDEX intrinsic,  Prev: IERRNO,  Up: Intrinsic Procedures
  
! 8.147 ‘IMAGE_INDEX’ -- Function that converts a cosubscript to an image index
  =============================================================================
  
  _Description_:
*************** _Class_:
*** 13833,13839 ****
       Inquiry function.
  
  _Syntax_:
!      'RESULT = IMAGE_INDEX(COARRAY, SUB)'
  
  _Arguments_:
       COARRAY     Coarray of any type.
--- 13833,13839 ----
       Inquiry function.
  
  _Syntax_:
!      ‘RESULT = IMAGE_INDEX(COARRAY, SUB)’
  
  _Arguments_:
       COARRAY     Coarray of any type.
*************** _See also_:
*** 13857,13863 ****
  
  File: gfortran.info,  Node: INDEX intrinsic,  Next: INT,  Prev: IMAGE_INDEX,  Up: Intrinsic Procedures
  
! 8.148 'INDEX' -- Position of a substring within a string
  ========================================================
  
  _Description_:
--- 13857,13863 ----
  
  File: gfortran.info,  Node: INDEX intrinsic,  Next: INT,  Prev: IMAGE_INDEX,  Up: Intrinsic Procedures
  
! 8.148 ‘INDEX’ -- Position of a substring within a string
  ========================================================
  
  _Description_:
*************** _Class_:
*** 13874,13899 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])'
  
  _Arguments_:
!      STRING      Shall be a scalar 'CHARACTER', with 'INTENT(IN)'
!      SUBSTRING   Shall be a scalar 'CHARACTER', with 'INTENT(IN)'
!      BACK        (Optional) Shall be a scalar 'LOGICAL', with
!                  'INTENT(IN)'
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Specific names_:
       Name                      Argument    Return       Standard
                                             type
       --------------------------------------------------------------------------
!      'INDEX(STRING,SUBSTRING)' 'CHARACTER' 'INTEGER(4)' Fortran 77 and later
  
  _See also_:
       *note SCAN::,
--- 13874,13899 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])’
  
  _Arguments_:
!      STRING      Shall be a scalar ‘CHARACTER’, with ‘INTENT(IN)’
!      SUBSTRING   Shall be a scalar ‘CHARACTER’, with ‘INTENT(IN)’
!      BACK        (Optional) Shall be a scalar ‘LOGICAL’, with
!                  ‘INTENT(IN)’
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Specific names_:
       Name                      Argument    Return       Standard
                                             type
       --------------------------------------------------------------------------
!      ‘INDEX(STRING,SUBSTRING)’ ‘CHARACTER’ ‘INTEGER(4)’ Fortran 77 and later
  
  _See also_:
       *note SCAN::,
*************** _See also_:
*** 13902,13908 ****
  
  File: gfortran.info,  Node: INT,  Next: INT2,  Prev: INDEX intrinsic,  Up: Intrinsic Procedures
  
! 8.149 'INT' -- Convert to integer type
  ======================================
  
  _Description_:
--- 13902,13908 ----
  
  File: gfortran.info,  Node: INT,  Next: INT2,  Prev: INDEX intrinsic,  Up: Intrinsic Procedures
  
! 8.149 ‘INT’ -- Convert to integer type
  ======================================
  
  _Description_:
*************** _Class_:
*** 13916,13943 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = INT(A [, KIND))'
  
  _Arguments_:
!      A           Shall be of type 'INTEGER', 'REAL', or 'COMPLEX'
                   or a boz-literal-constant.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      These functions return a 'INTEGER' variable or array under the
       following rules:
  
       (A)
!           If A is of type 'INTEGER', 'INT(A) = A'
       (B)
!           If A is of type 'REAL' and |A| < 1, 'INT(A)' equals '0'.  If
!           |A| \geq 1, then 'INT(A)' is the integer whose magnitude is
            the largest integer that does not exceed the magnitude of A
            and whose sign is the same as the sign of A.
       (C)
!           If A is of type 'COMPLEX', rule B is applied to the real part
            of A.
  
  _Example_:
--- 13916,13943 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = INT(A [, KIND))’
  
  _Arguments_:
!      A           Shall be of type ‘INTEGER’, ‘REAL’, or ‘COMPLEX’
                   or a boz-literal-constant.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      These functions return a ‘INTEGER’ variable or array under the
       following rules:
  
       (A)
!           If A is of type ‘INTEGER’, ‘INT(A) = A’
       (B)
!           If A is of type ‘REAL’ and |A| < 1, ‘INT(A)’ equals ‘0’.  If
!           |A| \geq 1, then ‘INT(A)’ is the integer whose magnitude is
            the largest integer that does not exceed the magnitude of A
            and whose sign is the same as the sign of A.
       (C)
!           If A is of type ‘COMPLEX’, rule B is applied to the real part
            of A.
  
  _Example_:
*************** _Example_:
*** 13951,13969 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'INT(A)'       'REAL(4) A'       'INTEGER'      Fortran 77 and later
!      'IFIX(A)'      'REAL(4) A'       'INTEGER'      Fortran 77 and later
!      'IDINT(A)'     'REAL(8) A'       'INTEGER'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: INT2,  Next: INT8,  Prev: INT,  Up: Intrinsic Procedures
  
! 8.150 'INT2' -- Convert to 16-bit integer type
  ==============================================
  
  _Description_:
!      Convert to a 'KIND=2' integer type.  This is equivalent to the
!      standard 'INT' intrinsic with an optional argument of 'KIND=2', and
       is only included for backwards compatibility.
  
  _Standard_:
--- 13951,13969 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘INT(A)’       ‘REAL(4) A’       ‘INTEGER’      Fortran 77 and later
!      ‘IFIX(A)’      ‘REAL(4) A’       ‘INTEGER’      Fortran 77 and later
!      ‘IDINT(A)’     ‘REAL(8) A’       ‘INTEGER’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: INT2,  Next: INT8,  Prev: INT,  Up: Intrinsic Procedures
  
! 8.150 ‘INT2’ -- Convert to 16-bit integer type
  ==============================================
  
  _Description_:
!      Convert to a ‘KIND=2’ integer type.  This is equivalent to the
!      standard ‘INT’ intrinsic with an optional argument of ‘KIND=2’, and
       is only included for backwards compatibility.
  
  _Standard_:
*************** _Class_:
*** 13973,13986 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = INT2(A)'
  
  _Arguments_:
!      A           Shall be of type 'INTEGER', 'REAL', or
!                  'COMPLEX'.
  
  _Return value_:
!      The return value is a 'INTEGER(2)' variable.
  
  _See also_:
       *note INT::,
--- 13973,13986 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = INT2(A)’
  
  _Arguments_:
!      A           Shall be of type ‘INTEGER’, ‘REAL’, or
!                  ‘COMPLEX’.
  
  _Return value_:
!      The return value is a ‘INTEGER(2)’ variable.
  
  _See also_:
       *note INT::,
*************** _See also_:
*** 13989,14000 ****
  
  File: gfortran.info,  Node: INT8,  Next: IOR,  Prev: INT2,  Up: Intrinsic Procedures
  
! 8.151 'INT8' -- Convert to 64-bit integer type
  ==============================================
  
  _Description_:
!      Convert to a 'KIND=8' integer type.  This is equivalent to the
!      standard 'INT' intrinsic with an optional argument of 'KIND=8', and
       is only included for backwards compatibility.
  
  _Standard_:
--- 13989,14000 ----
  
  File: gfortran.info,  Node: INT8,  Next: IOR,  Prev: INT2,  Up: Intrinsic Procedures
  
! 8.151 ‘INT8’ -- Convert to 64-bit integer type
  ==============================================
  
  _Description_:
!      Convert to a ‘KIND=8’ integer type.  This is equivalent to the
!      standard ‘INT’ intrinsic with an optional argument of ‘KIND=8’, and
       is only included for backwards compatibility.
  
  _Standard_:
*************** _Class_:
*** 14004,14017 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = INT8(A)'
  
  _Arguments_:
!      A           Shall be of type 'INTEGER', 'REAL', or
!                  'COMPLEX'.
  
  _Return value_:
!      The return value is a 'INTEGER(8)' variable.
  
  _See also_:
       *note INT::,
--- 14004,14017 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = INT8(A)’
  
  _Arguments_:
!      A           Shall be of type ‘INTEGER’, ‘REAL’, or
!                  ‘COMPLEX’.
  
  _Return value_:
!      The return value is a ‘INTEGER(8)’ variable.
  
  _See also_:
       *note INT::,
*************** _See also_:
*** 14020,14030 ****
  
  File: gfortran.info,  Node: IOR,  Next: IPARITY,  Prev: INT8,  Up: Intrinsic Procedures
  
! 8.152 'IOR' -- Bitwise logical or
  =================================
  
  _Description_:
!      'IOR' returns the bitwise Boolean inclusive-OR of I and J.
  
  _Standard_:
       Fortran 90 and later, with boz-literal-constant Fortran 2008 and
--- 14020,14030 ----
  
  File: gfortran.info,  Node: IOR,  Next: IPARITY,  Prev: INT8,  Up: Intrinsic Procedures
  
! 8.152 ‘IOR’ -- Bitwise logical or
  =================================
  
  _Description_:
!      ‘IOR’ returns the bitwise Boolean inclusive-OR of I and J.
  
  _Standard_:
       Fortran 90 and later, with boz-literal-constant Fortran 2008 and
*************** _Class_:
*** 14034,14062 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IOR(I, J)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER' or a
                   boz-literal-constant.
!      J           The type shall be 'INTEGER' with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
  
  _Return value_:
!      The return type is 'INTEGER' with the kind type parameter of the
!      arguments.  A boz-literal-constant is converted to an 'INTEGER'
       with the kind type parameter of the other argument as-if a call to
       *note INT:: occurred.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'IOR(A)'       'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BIOR(A)'      'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IIOR(A)'      'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JIOR(A)'      'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KIOR(A)'      'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IEOR::,
--- 14034,14062 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IOR(I, J)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’ or a
                   boz-literal-constant.
!      J           The type shall be ‘INTEGER’ with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
  
  _Return value_:
!      The return type is ‘INTEGER’ with the kind type parameter of the
!      arguments.  A boz-literal-constant is converted to an ‘INTEGER’
       with the kind type parameter of the other argument as-if a call to
       *note INT:: occurred.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘IOR(A)’       ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BIOR(A)’      ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IIOR(A)’      ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JIOR(A)’      ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KIOR(A)’      ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IEOR::,
*************** _See also_:
*** 14069,14080 ****
  
  File: gfortran.info,  Node: IPARITY,  Next: IRAND,  Prev: IOR,  Up: Intrinsic Procedures
  
! 8.153 'IPARITY' -- Bitwise XOR of array elements
  ================================================
  
  _Description_:
       Reduces with bitwise XOR (exclusive or) the elements of ARRAY along
!      dimension DIM if the corresponding element in MASK is 'TRUE'.
  
  _Standard_:
       Fortran 2008 and later
--- 14069,14080 ----
  
  File: gfortran.info,  Node: IPARITY,  Next: IRAND,  Prev: IOR,  Up: Intrinsic Procedures
  
! 8.153 ‘IPARITY’ -- Bitwise XOR of array elements
  ================================================
  
  _Description_:
       Reduces with bitwise XOR (exclusive or) the elements of ARRAY along
!      dimension DIM if the corresponding element in MASK is ‘TRUE’.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 14083,14097 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = IPARITY(ARRAY[, MASK])'
!      'RESULT = IPARITY(ARRAY, DIM[, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER'
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type 'LOGICAL' and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
--- 14083,14097 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = IPARITY(ARRAY[, MASK])’
!      ‘RESULT = IPARITY(ARRAY, DIM[, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type ‘LOGICAL’ and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
*************** _See also_:
*** 14123,14142 ****
  
  File: gfortran.info,  Node: IRAND,  Next: IS_CONTIGUOUS,  Prev: IPARITY,  Up: Intrinsic Procedures
  
! 8.154 'IRAND' -- Integer pseudo-random number
  =============================================
  
  _Description_:
!      'IRAND(FLAG)' returns a pseudo-random number from a uniform
       distribution between 0 and a system-dependent limit (which is in
       most cases 2147483647).  If FLAG is 0, the next number in the
       current sequence is returned; if FLAG is 1, the generator is
!      restarted by 'CALL SRAND(0)'; if FLAG has any other value, it is
!      used as a new seed with 'SRAND'.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  It implements a simple modulo generator as
!      provided by 'g77'.  For new code, one should consider the use of
       *note RANDOM_NUMBER:: as it implements a superior algorithm.
  
  _Standard_:
--- 14123,14142 ----
  
  File: gfortran.info,  Node: IRAND,  Next: IS_CONTIGUOUS,  Prev: IPARITY,  Up: Intrinsic Procedures
  
! 8.154 ‘IRAND’ -- Integer pseudo-random number
  =============================================
  
  _Description_:
!      ‘IRAND(FLAG)’ returns a pseudo-random number from a uniform
       distribution between 0 and a system-dependent limit (which is in
       most cases 2147483647).  If FLAG is 0, the next number in the
       current sequence is returned; if FLAG is 1, the generator is
!      restarted by ‘CALL SRAND(0)’; if FLAG has any other value, it is
!      used as a new seed with ‘SRAND’.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  It implements a simple modulo generator as
!      provided by ‘g77’.  For new code, one should consider the use of
       *note RANDOM_NUMBER:: as it implements a superior algorithm.
  
  _Standard_:
*************** _Class_:
*** 14146,14158 ****
       Function
  
  _Syntax_:
!      'RESULT = IRAND(I)'
  
  _Arguments_:
!      I           Shall be a scalar 'INTEGER' of kind 4.
  
  _Return value_:
!      The return value is of 'INTEGER(kind=4)' type.
  
  _Example_:
            program test_irand
--- 14146,14158 ----
       Function
  
  _Syntax_:
!      ‘RESULT = IRAND(I)’
  
  _Arguments_:
!      I           Shall be a scalar ‘INTEGER’ of kind 4.
  
  _Return value_:
!      The return value is of ‘INTEGER(kind=4)’ type.
  
  _Example_:
            program test_irand
*************** _Example_:
*** 14166,14176 ****
  
  File: gfortran.info,  Node: IS_CONTIGUOUS,  Next: IS_IOSTAT_END,  Prev: IRAND,  Up: Intrinsic Procedures
  
! 8.155 'IS_CONTIGUOUS' -- Test whether an array is contiguous
  ============================================================
  
  _Description_:
!      'IS_CONTIGUOUS' tests whether an array is contiguous.
  
  _Standard_:
       Fortran 2008 and later
--- 14166,14176 ----
  
  File: gfortran.info,  Node: IS_CONTIGUOUS,  Next: IS_IOSTAT_END,  Prev: IRAND,  Up: Intrinsic Procedures
  
! 8.155 ‘IS_CONTIGUOUS’ -- Test whether an array is contiguous
  ============================================================
  
  _Description_:
!      ‘IS_CONTIGUOUS’ tests whether an array is contiguous.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 14179,14191 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = IS_CONTIGUOUS(ARRAY)'
  
  _Arguments_:
       ARRAY       Shall be an array of any type.
  
  _Return value_:
!      Returns a 'LOGICAL' of the default kind, which '.TRUE.' if ARRAY is
       contiguous and false otherwise.
  
  _Example_:
--- 14179,14191 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = IS_CONTIGUOUS(ARRAY)’
  
  _Arguments_:
       ARRAY       Shall be an array of any type.
  
  _Return value_:
!      Returns a ‘LOGICAL’ of the default kind, which ‘.TRUE.’ if ARRAY is
       contiguous and false otherwise.
  
  _Example_:
*************** _Example_:
*** 14208,14221 ****
  
  File: gfortran.info,  Node: IS_IOSTAT_END,  Next: IS_IOSTAT_EOR,  Prev: IS_CONTIGUOUS,  Up: Intrinsic Procedures
  
! 8.156 'IS_IOSTAT_END' -- Test for end-of-file value
  ===================================================
  
  _Description_:
!      'IS_IOSTAT_END' tests whether an variable has the value of the I/O
       status "end of file".  The function is equivalent to comparing the
!      variable with the 'IOSTAT_END' parameter of the intrinsic module
!      'ISO_FORTRAN_ENV'.
  
  _Standard_:
       Fortran 2003 and later
--- 14208,14221 ----
  
  File: gfortran.info,  Node: IS_IOSTAT_END,  Next: IS_IOSTAT_EOR,  Prev: IS_CONTIGUOUS,  Up: Intrinsic Procedures
  
! 8.156 ‘IS_IOSTAT_END’ -- Test for end-of-file value
  ===================================================
  
  _Description_:
!      ‘IS_IOSTAT_END’ tests whether an variable has the value of the I/O
       status "end of file".  The function is equivalent to comparing the
!      variable with the ‘IOSTAT_END’ parameter of the intrinsic module
!      ‘ISO_FORTRAN_ENV’.
  
  _Standard_:
       Fortran 2003 and later
*************** _Class_:
*** 14224,14238 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IS_IOSTAT_END(I)'
  
  _Arguments_:
!      I           Shall be of the type 'INTEGER'.
  
  _Return value_:
!      Returns a 'LOGICAL' of the default kind, which '.TRUE.' if I has
!      the value which indicates an end of file condition for 'IOSTAT='
!      specifiers, and is '.FALSE.' otherwise.
  
  _Example_:
            PROGRAM iostat
--- 14224,14238 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IS_IOSTAT_END(I)’
  
  _Arguments_:
!      I           Shall be of the type ‘INTEGER’.
  
  _Return value_:
!      Returns a ‘LOGICAL’ of the default kind, which ‘.TRUE.’ if I has
!      the value which indicates an end of file condition for ‘IOSTAT=’
!      specifiers, and is ‘.FALSE.’ otherwise.
  
  _Example_:
            PROGRAM iostat
*************** _Example_:
*** 14246,14259 ****
  
  File: gfortran.info,  Node: IS_IOSTAT_EOR,  Next: ISATTY,  Prev: IS_IOSTAT_END,  Up: Intrinsic Procedures
  
! 8.157 'IS_IOSTAT_EOR' -- Test for end-of-record value
  =====================================================
  
  _Description_:
!      'IS_IOSTAT_EOR' tests whether an variable has the value of the I/O
       status "end of record".  The function is equivalent to comparing
!      the variable with the 'IOSTAT_EOR' parameter of the intrinsic
!      module 'ISO_FORTRAN_ENV'.
  
  _Standard_:
       Fortran 2003 and later
--- 14246,14259 ----
  
  File: gfortran.info,  Node: IS_IOSTAT_EOR,  Next: ISATTY,  Prev: IS_IOSTAT_END,  Up: Intrinsic Procedures
  
! 8.157 ‘IS_IOSTAT_EOR’ -- Test for end-of-record value
  =====================================================
  
  _Description_:
!      ‘IS_IOSTAT_EOR’ tests whether an variable has the value of the I/O
       status "end of record".  The function is equivalent to comparing
!      the variable with the ‘IOSTAT_EOR’ parameter of the intrinsic
!      module ‘ISO_FORTRAN_ENV’.
  
  _Standard_:
       Fortran 2003 and later
*************** _Class_:
*** 14262,14276 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = IS_IOSTAT_EOR(I)'
  
  _Arguments_:
!      I           Shall be of the type 'INTEGER'.
  
  _Return value_:
!      Returns a 'LOGICAL' of the default kind, which '.TRUE.' if I has
!      the value which indicates an end of file condition for 'IOSTAT='
!      specifiers, and is '.FALSE.' otherwise.
  
  _Example_:
            PROGRAM iostat
--- 14262,14276 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = IS_IOSTAT_EOR(I)’
  
  _Arguments_:
!      I           Shall be of the type ‘INTEGER’.
  
  _Return value_:
!      Returns a ‘LOGICAL’ of the default kind, which ‘.TRUE.’ if I has
!      the value which indicates an end of file condition for ‘IOSTAT=’
!      specifiers, and is ‘.FALSE.’ otherwise.
  
  _Example_:
            PROGRAM iostat
*************** _Example_:
*** 14284,14290 ****
  
  File: gfortran.info,  Node: ISATTY,  Next: ISHFT,  Prev: IS_IOSTAT_EOR,  Up: Intrinsic Procedures
  
! 8.158 'ISATTY' -- Whether a unit is a terminal device
  =====================================================
  
  _Description_:
--- 14284,14290 ----
  
  File: gfortran.info,  Node: ISATTY,  Next: ISHFT,  Prev: IS_IOSTAT_EOR,  Up: Intrinsic Procedures
  
! 8.158 ‘ISATTY’ -- Whether a unit is a terminal device
  =====================================================
  
  _Description_:
*************** _Class_:
*** 14297,14310 ****
       Function
  
  _Syntax_:
!      'RESULT = ISATTY(UNIT)'
  
  _Arguments_:
!      UNIT        Shall be a scalar 'INTEGER'.
  
  _Return value_:
!      Returns '.TRUE.' if the UNIT is connected to a terminal device,
!      '.FALSE.' otherwise.
  
  _Example_:
            PROGRAM test_isatty
--- 14297,14310 ----
       Function
  
  _Syntax_:
!      ‘RESULT = ISATTY(UNIT)’
  
  _Arguments_:
!      UNIT        Shall be a scalar ‘INTEGER’.
  
  _Return value_:
!      Returns ‘.TRUE.’ if the UNIT is connected to a terminal device,
!      ‘.FALSE.’ otherwise.
  
  _Example_:
            PROGRAM test_isatty
*************** _See also_:
*** 14319,14333 ****
  
  File: gfortran.info,  Node: ISHFT,  Next: ISHFTC,  Prev: ISATTY,  Up: Intrinsic Procedures
  
! 8.159 'ISHFT' -- Shift bits
  ===========================
  
  _Description_:
!      'ISHFT' returns a value corresponding to I with all of the bits
       shifted SHIFT places.  A value of SHIFT greater than zero
       corresponds to a left shift, a value of zero corresponds to no
       shift, and a value less than zero corresponds to a right shift.  If
!      the absolute value of SHIFT is greater than 'BIT_SIZE(I)', the
       value is undefined.  Bits shifted out from the left end or right
       end are lost; zeros are shifted in from the opposite end.
  
--- 14319,14333 ----
  
  File: gfortran.info,  Node: ISHFT,  Next: ISHFTC,  Prev: ISATTY,  Up: Intrinsic Procedures
  
! 8.159 ‘ISHFT’ -- Shift bits
  ===========================
  
  _Description_:
!      ‘ISHFT’ returns a value corresponding to I with all of the bits
       shifted SHIFT places.  A value of SHIFT greater than zero
       corresponds to a left shift, a value of zero corresponds to no
       shift, and a value less than zero corresponds to a right shift.  If
!      the absolute value of SHIFT is greater than ‘BIT_SIZE(I)’, the
       value is undefined.  Bits shifted out from the left end or right
       end are lost; zeros are shifted in from the opposite end.
  
*************** _Class_:
*** 14338,14360 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ISHFT(I, SHIFT)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ISHFT(A)'     'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BSHFT(A)'     'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IISHFT(A)'    'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JISHFT(A)'    'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KISHFT(A)'    'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note ISHFTC::
--- 14338,14360 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ISHFT(I, SHIFT)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ISHFT(A)’     ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BSHFT(A)’     ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IISHFT(A)’    ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JISHFT(A)’    ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KISHFT(A)’    ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note ISHFTC::
*************** _See also_:
*** 14362,14379 ****
  
  File: gfortran.info,  Node: ISHFTC,  Next: ISNAN,  Prev: ISHFT,  Up: Intrinsic Procedures
  
! 8.160 'ISHFTC' -- Shift bits circularly
  =======================================
  
  _Description_:
!      'ISHFTC' returns a value corresponding to I with the rightmost SIZE
       bits shifted circularly SHIFT places; that is, bits shifted out one
       end are shifted into the opposite end.  A value of SHIFT greater
       than zero corresponds to a left shift, a value of zero corresponds
       to no shift, and a value less than zero corresponds to a right
       shift.  The absolute value of SHIFT must be less than SIZE.  If the
       SIZE argument is omitted, it is taken to be equivalent to
!      'BIT_SIZE(I)'.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
--- 14362,14379 ----
  
  File: gfortran.info,  Node: ISHFTC,  Next: ISNAN,  Prev: ISHFT,  Up: Intrinsic Procedures
  
! 8.160 ‘ISHFTC’ -- Shift bits circularly
  =======================================
  
  _Description_:
!      ‘ISHFTC’ returns a value corresponding to I with the rightmost SIZE
       bits shifted circularly SHIFT places; that is, bits shifted out one
       end are shifted into the opposite end.  A value of SHIFT greater
       than zero corresponds to a left shift, a value of zero corresponds
       to no shift, and a value less than zero corresponds to a right
       shift.  The absolute value of SHIFT must be less than SIZE.  If the
       SIZE argument is omitted, it is taken to be equivalent to
!      ‘BIT_SIZE(I)’.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
*************** _Class_:
*** 14382,14407 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = ISHFTC(I, SHIFT [, SIZE])'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
!      SIZE        (Optional) The type shall be 'INTEGER'; the
                   value must be greater than zero and less than or
!                  equal to 'BIT_SIZE(I)'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ISHFTC(A)'    'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BSHFTC(A)'    'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IISHFTC(A)'   'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JISHFTC(A)'   'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KISHFTC(A)'   'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note ISHFT::
--- 14382,14407 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = ISHFTC(I, SHIFT [, SIZE])’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
!      SIZE        (Optional) The type shall be ‘INTEGER’; the
                   value must be greater than zero and less than or
!                  equal to ‘BIT_SIZE(I)’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ISHFTC(A)’    ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BSHFTC(A)’    ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IISHFTC(A)’   ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JISHFTC(A)’   ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KISHFTC(A)’   ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note ISHFT::
*************** _See also_:
*** 14409,14419 ****
  
  File: gfortran.info,  Node: ISNAN,  Next: ITIME,  Prev: ISHFTC,  Up: Intrinsic Procedures
  
! 8.161 'ISNAN' -- Test for a NaN
  ===============================
  
  _Description_:
!      'ISNAN' tests whether a floating-point value is an IEEE
       Not-a-Number (NaN).
  _Standard_:
       GNU extension
--- 14409,14419 ----
  
  File: gfortran.info,  Node: ISNAN,  Next: ITIME,  Prev: ISHFTC,  Up: Intrinsic Procedures
  
! 8.161 ‘ISNAN’ -- Test for a NaN
  ===============================
  
  _Description_:
!      ‘ISNAN’ tests whether a floating-point value is an IEEE
       Not-a-Number (NaN).
  _Standard_:
       GNU extension
*************** _Class_:
*** 14422,14436 ****
       Elemental function
  
  _Syntax_:
!      'ISNAN(X)'
  
  _Arguments_:
!      X           Variable of the type 'REAL'.
                   
  
  _Return value_:
!      Returns a default-kind 'LOGICAL'.  The returned value is 'TRUE' if
!      X is a NaN and 'FALSE' otherwise.
  
  _Example_:
            program test_nan
--- 14422,14436 ----
       Elemental function
  
  _Syntax_:
!      ‘ISNAN(X)’
  
  _Arguments_:
!      X           Variable of the type ‘REAL’.
                   
  
  _Return value_:
!      Returns a default-kind ‘LOGICAL’.  The returned value is ‘TRUE’ if
!      X is a NaN and ‘FALSE’ otherwise.
  
  _Example_:
            program test_nan
*************** _Example_:
*** 14444,14454 ****
  
  File: gfortran.info,  Node: ITIME,  Next: KILL,  Prev: ISNAN,  Up: Intrinsic Procedures
  
! 8.162 'ITIME' -- Get current local time subroutine (hour/minutes/seconds)
  =========================================================================
  
  _Description_:
!      'ITIME(VALUES)' Fills VALUES with the numerical values at the
       current local time.  The hour (in the range 1-24), minute (in the
       range 1-60), and seconds (in the range 1-60) appear in elements 1,
       2, and 3 of VALUES, respectively.
--- 14444,14454 ----
  
  File: gfortran.info,  Node: ITIME,  Next: KILL,  Prev: ISNAN,  Up: Intrinsic Procedures
  
! 8.162 ‘ITIME’ -- Get current local time subroutine (hour/minutes/seconds)
  =========================================================================
  
  _Description_:
!      ‘ITIME(VALUES)’ Fills VALUES with the numerical values at the
       current local time.  The hour (in the range 1-24), minute (in the
       range 1-60), and seconds (in the range 1-60) appear in elements 1,
       2, and 3 of VALUES, respectively.
*************** _Class_:
*** 14465,14474 ****
       Subroutine
  
  _Syntax_:
!      'CALL ITIME(VALUES)'
  
  _Arguments_:
!      VALUES      The type shall be 'INTEGER, DIMENSION(3)' and
                   the kind shall be the default integer kind.
  
  _Return value_:
--- 14465,14474 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL ITIME(VALUES)’
  
  _Arguments_:
!      VALUES      The type shall be ‘INTEGER, DIMENSION(3)’ and
                   the kind shall be the default integer kind.
  
  _Return value_:
*************** _See also_:
*** 14489,14500 ****
  
  File: gfortran.info,  Node: KILL,  Next: KIND,  Prev: ITIME,  Up: Intrinsic Procedures
  
! 8.163 'KILL' -- Send a signal to a process
  ==========================================
  
  _Description_:
       Sends the signal specified by SIG to the process PID.  See
!      'kill(2)'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 14489,14500 ----
  
  File: gfortran.info,  Node: KILL,  Next: KIND,  Prev: ITIME,  Up: Intrinsic Procedures
  
! 8.163 ‘KILL’ -- Send a signal to a process
  ==========================================
  
  _Description_:
       Sends the signal specified by SIG to the process PID.  See
!      ‘kill(2)’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 14508,14524 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL KILL(PID, SIG [, STATUS])'
!      'STATUS = KILL(PID, SIG)'
  
  _Arguments_:
!      PID         Shall be a scalar 'INTEGER' with 'INTENT(IN)'.
!      SIG         Shall be a scalar 'INTEGER' with 'INTENT(IN)'.
       STATUS      [Subroutine](Optional) Shall be a scalar
!                  'INTEGER'.  Returns 0 on success; otherwise a
                   system-specific error code is returned.
       STATUS      [Function] The kind type parameter is that of
!                  'pid'.  Returns 0 on success; otherwise a
                   system-specific error code is returned.
  
  _See also_:
--- 14508,14524 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL KILL(PID, SIG [, STATUS])’
!      ‘STATUS = KILL(PID, SIG)’
  
  _Arguments_:
!      PID         Shall be a scalar ‘INTEGER’ with ‘INTENT(IN)’.
!      SIG         Shall be a scalar ‘INTEGER’ with ‘INTENT(IN)’.
       STATUS      [Subroutine](Optional) Shall be a scalar
!                  ‘INTEGER’.  Returns 0 on success; otherwise a
                   system-specific error code is returned.
       STATUS      [Function] The kind type parameter is that of
!                  ‘pid’.  Returns 0 on success; otherwise a
                   system-specific error code is returned.
  
  _See also_:
*************** _See also_:
*** 14528,14538 ****
  
  File: gfortran.info,  Node: KIND,  Next: LBOUND,  Prev: KILL,  Up: Intrinsic Procedures
  
! 8.164 'KIND' -- Kind of an entity
  =================================
  
  _Description_:
!      'KIND(X)' returns the kind value of the entity X.
  
  _Standard_:
       Fortran 95 and later
--- 14528,14538 ----
  
  File: gfortran.info,  Node: KIND,  Next: LBOUND,  Prev: KILL,  Up: Intrinsic Procedures
  
! 8.164 ‘KIND’ -- Kind of an entity
  =================================
  
  _Description_:
!      ‘KIND(X)’ returns the kind value of the entity X.
  
  _Standard_:
       Fortran 95 and later
*************** _Class_:
*** 14541,14555 ****
       Inquiry function
  
  _Syntax_:
!      'K = KIND(X)'
  
  _Arguments_:
!      X           Shall be of type 'LOGICAL', 'INTEGER', 'REAL',
!                  'COMPLEX' or 'CHARACTER'.  It may be scalar or
                   array valued.
  
  _Return value_:
!      The return value is a scalar of type 'INTEGER' and of the default
       integer kind.
  
  _Example_:
--- 14541,14555 ----
       Inquiry function
  
  _Syntax_:
!      ‘K = KIND(X)’
  
  _Arguments_:
!      X           Shall be of type ‘LOGICAL’, ‘INTEGER’, ‘REAL’,
!                  ‘COMPLEX’ or ‘CHARACTER’.  It may be scalar or
                   array valued.
  
  _Return value_:
!      The return value is a scalar of type ‘INTEGER’ and of the default
       integer kind.
  
  _Example_:
*************** _Example_:
*** 14564,14570 ****
  
  File: gfortran.info,  Node: LBOUND,  Next: LCOBOUND,  Prev: KIND,  Up: Intrinsic Procedures
  
! 8.165 'LBOUND' -- Lower dimension bounds of an array
  ====================================================
  
  _Description_:
--- 14564,14570 ----
  
  File: gfortran.info,  Node: LBOUND,  Next: LCOBOUND,  Prev: KIND,  Up: Intrinsic Procedures
  
! 8.165 ‘LBOUND’ -- Lower dimension bounds of an array
  ====================================================
  
  _Description_:
*************** _Class_:
*** 14577,14593 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = LBOUND(ARRAY [, DIM [, KIND]])'
  
  _Arguments_:
       ARRAY       Shall be an array, of any type.
!      DIM         (Optional) Shall be a scalar 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the lower bounds of ARRAY.  If
       DIM is present, the result is a scalar corresponding to the lower
--- 14577,14593 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = LBOUND(ARRAY [, DIM [, KIND]])’
  
  _Arguments_:
       ARRAY       Shall be an array, of any type.
!      DIM         (Optional) Shall be a scalar ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the lower bounds of ARRAY.  If
       DIM is present, the result is a scalar corresponding to the lower
*************** _See also_:
*** 14603,14609 ****
  
  File: gfortran.info,  Node: LCOBOUND,  Next: LEADZ,  Prev: LBOUND,  Up: Intrinsic Procedures
  
! 8.166 'LCOBOUND' -- Lower codimension bounds of an array
  ========================================================
  
  _Description_:
--- 14603,14609 ----
  
  File: gfortran.info,  Node: LCOBOUND,  Next: LEADZ,  Prev: LBOUND,  Up: Intrinsic Procedures
  
! 8.166 ‘LCOBOUND’ -- Lower codimension bounds of an array
  ========================================================
  
  _Description_:
*************** _Class_:
*** 14616,14632 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])'
  
  _Arguments_:
       ARRAY       Shall be an coarray, of any type.
!      DIM         (Optional) Shall be a scalar 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the lower cobounds of COARRAY.
       If DIM is present, the result is a scalar corresponding to the
--- 14616,14632 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])’
  
  _Arguments_:
       ARRAY       Shall be an coarray, of any type.
!      DIM         (Optional) Shall be a scalar ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the lower cobounds of COARRAY.
       If DIM is present, the result is a scalar corresponding to the
*************** _See also_:
*** 14639,14649 ****
  
  File: gfortran.info,  Node: LEADZ,  Next: LEN,  Prev: LCOBOUND,  Up: Intrinsic Procedures
  
! 8.167 'LEADZ' -- Number of leading zero bits of an integer
  ==========================================================
  
  _Description_:
!      'LEADZ' returns the number of leading zero bits of an integer.
  
  _Standard_:
       Fortran 2008 and later
--- 14639,14649 ----
  
  File: gfortran.info,  Node: LEADZ,  Next: LEN,  Prev: LCOBOUND,  Up: Intrinsic Procedures
  
! 8.167 ‘LEADZ’ -- Number of leading zero bits of an integer
  ==========================================================
  
  _Description_:
!      ‘LEADZ’ returns the number of leading zero bits of an integer.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 14652,14665 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LEADZ(I)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER'.
  
  _Return value_:
!      The type of the return value is the default 'INTEGER'.  If all the
!      bits of 'I' are zero, the result value is 'BIT_SIZE(I)'.
  
  _Example_:
            PROGRAM test_leadz
--- 14652,14665 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LEADZ(I)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’.
  
  _Return value_:
!      The type of the return value is the default ‘INTEGER’.  If all the
!      bits of ‘I’ are zero, the result value is ‘BIT_SIZE(I)’.
  
  _Example_:
            PROGRAM test_leadz
*************** _See also_:
*** 14676,14682 ****
  
  File: gfortran.info,  Node: LEN,  Next: LEN_TRIM,  Prev: LEADZ,  Up: Intrinsic Procedures
  
! 8.168 'LEN' -- Length of a character entity
  ===========================================
  
  _Description_:
--- 14676,14682 ----
  
  File: gfortran.info,  Node: LEN,  Next: LEN_TRIM,  Prev: LEADZ,  Up: Intrinsic Procedures
  
! 8.168 ‘LEN’ -- Length of a character entity
  ===========================================
  
  _Description_:
*************** _Class_:
*** 14692,14714 ****
       Inquiry function
  
  _Syntax_:
!      'L = LEN(STRING [, KIND])'
  
  _Arguments_:
!      STRING      Shall be a scalar or array of type 'CHARACTER',
!                  with 'INTENT(IN)'
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'LEN(STRING)'  'CHARACTER'       'INTEGER'      Fortran 77 and later
  
  _See also_:
       *note LEN_TRIM::,
--- 14692,14714 ----
       Inquiry function
  
  _Syntax_:
!      ‘L = LEN(STRING [, KIND])’
  
  _Arguments_:
!      STRING      Shall be a scalar or array of type ‘CHARACTER’,
!                  with ‘INTENT(IN)’
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘LEN(STRING)’  ‘CHARACTER’       ‘INTEGER’      Fortran 77 and later
  
  _See also_:
       *note LEN_TRIM::,
*************** _See also_:
*** 14718,14724 ****
  
  File: gfortran.info,  Node: LEN_TRIM,  Next: LGE,  Prev: LEN,  Up: Intrinsic Procedures
  
! 8.169 'LEN_TRIM' -- Length of a character entity without trailing blank characters
  ==================================================================================
  
  _Description_:
--- 14718,14724 ----
  
  File: gfortran.info,  Node: LEN_TRIM,  Next: LGE,  Prev: LEN,  Up: Intrinsic Procedures
  
! 8.169 ‘LEN_TRIM’ -- Length of a character entity without trailing blank characters
  ==================================================================================
  
  _Description_:
*************** _Class_:
*** 14732,14748 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LEN_TRIM(STRING [, KIND])'
  
  _Arguments_:
!      STRING      Shall be a scalar of type 'CHARACTER', with
!                  'INTENT(IN)'
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _See also_:
--- 14732,14748 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LEN_TRIM(STRING [, KIND])’
  
  _Arguments_:
!      STRING      Shall be a scalar of type ‘CHARACTER’, with
!                  ‘INTENT(IN)’
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _See also_:
*************** _See also_:
*** 14753,14759 ****
  
  File: gfortran.info,  Node: LGE,  Next: LGT,  Prev: LEN_TRIM,  Up: Intrinsic Procedures
  
! 8.170 'LGE' -- Lexical greater than or equal
  ============================================
  
  _Description_:
--- 14753,14759 ----
  
  File: gfortran.info,  Node: LGE,  Next: LGT,  Prev: LEN_TRIM,  Up: Intrinsic Procedures
  
! 8.170 ‘LGE’ -- Lexical greater than or equal
  ============================================
  
  _Description_:
*************** _Description_:
*** 14763,14771 ****
       same length, the shorter is compared as if spaces were appended to
       it to form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics 'LGE', 'LGT', 'LLE',
!      and 'LLT' differ from the corresponding intrinsic operators '.GE.',
!      '.GT.', '.LE.', and '.LT.', in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
--- 14763,14771 ----
       same length, the shorter is compared as if spaces were appended to
       it to form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics ‘LGE’, ‘LGT’, ‘LLE’,
!      and ‘LLT’ differ from the corresponding intrinsic operators ‘.GE.’,
!      ‘.GT.’, ‘.LE.’, and ‘.LT.’, in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
*************** _Class_:
*** 14776,14796 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LGE(STRING_A, STRING_B)'
  
  _Arguments_:
!      STRING_A    Shall be of default 'CHARACTER' type.
!      STRING_B    Shall be of default 'CHARACTER' type.
  
  _Return value_:
!      Returns '.TRUE.' if 'STRING_A >= STRING_B', and '.FALSE.'
       otherwise, based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      'LGE(STRING_A,STRING_B)' 'CHARACTER'  'LOGICAL'    Fortran 77 and later
  
  _See also_:
       *note LGT::,
--- 14776,14796 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LGE(STRING_A, STRING_B)’
  
  _Arguments_:
!      STRING_A    Shall be of default ‘CHARACTER’ type.
!      STRING_B    Shall be of default ‘CHARACTER’ type.
  
  _Return value_:
!      Returns ‘.TRUE.’ if ‘STRING_A >= STRING_B’, and ‘.FALSE.’
       otherwise, based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      ‘LGE(STRING_A,STRING_B)’ ‘CHARACTER’  ‘LOGICAL’    Fortran 77 and later
  
  _See also_:
       *note LGT::,
*************** _See also_:
*** 14800,14806 ****
  
  File: gfortran.info,  Node: LGT,  Next: LINK,  Prev: LGE,  Up: Intrinsic Procedures
  
! 8.171 'LGT' -- Lexical greater than
  ===================================
  
  _Description_:
--- 14800,14806 ----
  
  File: gfortran.info,  Node: LGT,  Next: LINK,  Prev: LGE,  Up: Intrinsic Procedures
  
! 8.171 ‘LGT’ -- Lexical greater than
  ===================================
  
  _Description_:
*************** _Description_:
*** 14810,14818 ****
       length, the shorter is compared as if spaces were appended to it to
       form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics 'LGE', 'LGT', 'LLE',
!      and 'LLT' differ from the corresponding intrinsic operators '.GE.',
!      '.GT.', '.LE.', and '.LT.', in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
--- 14810,14818 ----
       length, the shorter is compared as if spaces were appended to it to
       form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics ‘LGE’, ‘LGT’, ‘LLE’,
!      and ‘LLT’ differ from the corresponding intrinsic operators ‘.GE.’,
!      ‘.GT.’, ‘.LE.’, and ‘.LT.’, in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
*************** _Class_:
*** 14823,14843 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LGT(STRING_A, STRING_B)'
  
  _Arguments_:
!      STRING_A    Shall be of default 'CHARACTER' type.
!      STRING_B    Shall be of default 'CHARACTER' type.
  
  _Return value_:
!      Returns '.TRUE.' if 'STRING_A > STRING_B', and '.FALSE.' otherwise,
       based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      'LGT(STRING_A,STRING_B)' 'CHARACTER'  'LOGICAL'    Fortran 77 and later
  
  _See also_:
       *note LGE::,
--- 14823,14843 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LGT(STRING_A, STRING_B)’
  
  _Arguments_:
!      STRING_A    Shall be of default ‘CHARACTER’ type.
!      STRING_B    Shall be of default ‘CHARACTER’ type.
  
  _Return value_:
!      Returns ‘.TRUE.’ if ‘STRING_A > STRING_B’, and ‘.FALSE.’ otherwise,
       based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      ‘LGT(STRING_A,STRING_B)’ ‘CHARACTER’  ‘LOGICAL’    Fortran 77 and later
  
  _See also_:
       *note LGE::,
*************** _See also_:
*** 14847,14861 ****
  
  File: gfortran.info,  Node: LINK,  Next: LLE,  Prev: LGT,  Up: Intrinsic Procedures
  
! 8.172 'LINK' -- Create a hard link
  ==================================
  
  _Description_:
       Makes a (hard) link from file PATH1 to PATH2.  A null character
!      ('CHAR(0)') can be used to mark the end of the names in PATH1 and
       PATH2; otherwise, trailing blanks in the file names are ignored.
       If the STATUS argument is supplied, it contains 0 on success or a
!      nonzero error code upon return; see 'link(2)'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 14847,14861 ----
  
  File: gfortran.info,  Node: LINK,  Next: LLE,  Prev: LGT,  Up: Intrinsic Procedures
  
! 8.172 ‘LINK’ -- Create a hard link
  ==================================
  
  _Description_:
       Makes a (hard) link from file PATH1 to PATH2.  A null character
!      (‘CHAR(0)’) can be used to mark the end of the names in PATH1 and
       PATH2; otherwise, trailing blanks in the file names are ignored.
       If the STATUS argument is supplied, it contains 0 on success or a
!      nonzero error code upon return; see ‘link(2)’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 14867,14879 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL LINK(PATH1, PATH2 [, STATUS])'
!      'STATUS = LINK(PATH1, PATH2)'
  
  _Arguments_:
!      PATH1       Shall be of default 'CHARACTER' type.
!      PATH2       Shall be of default 'CHARACTER' type.
!      STATUS      (Optional) Shall be of default 'INTEGER' type.
  
  _See also_:
       *note SYMLNK::,
--- 14867,14879 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL LINK(PATH1, PATH2 [, STATUS])’
!      ‘STATUS = LINK(PATH1, PATH2)’
  
  _Arguments_:
!      PATH1       Shall be of default ‘CHARACTER’ type.
!      PATH2       Shall be of default ‘CHARACTER’ type.
!      STATUS      (Optional) Shall be of default ‘INTEGER’ type.
  
  _See also_:
       *note SYMLNK::,
*************** _See also_:
*** 14882,14888 ****
  
  File: gfortran.info,  Node: LLE,  Next: LLT,  Prev: LINK,  Up: Intrinsic Procedures
  
! 8.173 'LLE' -- Lexical less than or equal
  =========================================
  
  _Description_:
--- 14882,14888 ----
  
  File: gfortran.info,  Node: LLE,  Next: LLT,  Prev: LINK,  Up: Intrinsic Procedures
  
! 8.173 ‘LLE’ -- Lexical less than or equal
  =========================================
  
  _Description_:
*************** _Description_:
*** 14892,14900 ****
       same length, the shorter is compared as if spaces were appended to
       it to form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics 'LGE', 'LGT', 'LLE',
!      and 'LLT' differ from the corresponding intrinsic operators '.GE.',
!      '.GT.', '.LE.', and '.LT.', in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
--- 14892,14900 ----
       same length, the shorter is compared as if spaces were appended to
       it to form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics ‘LGE’, ‘LGT’, ‘LLE’,
!      and ‘LLT’ differ from the corresponding intrinsic operators ‘.GE.’,
!      ‘.GT.’, ‘.LE.’, and ‘.LT.’, in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
*************** _Class_:
*** 14905,14925 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LLE(STRING_A, STRING_B)'
  
  _Arguments_:
!      STRING_A    Shall be of default 'CHARACTER' type.
!      STRING_B    Shall be of default 'CHARACTER' type.
  
  _Return value_:
!      Returns '.TRUE.' if 'STRING_A <= STRING_B', and '.FALSE.'
       otherwise, based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      'LLE(STRING_A,STRING_B)' 'CHARACTER'  'LOGICAL'    Fortran 77 and later
  
  _See also_:
       *note LGE::,
--- 14905,14925 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LLE(STRING_A, STRING_B)’
  
  _Arguments_:
!      STRING_A    Shall be of default ‘CHARACTER’ type.
!      STRING_B    Shall be of default ‘CHARACTER’ type.
  
  _Return value_:
!      Returns ‘.TRUE.’ if ‘STRING_A <= STRING_B’, and ‘.FALSE.’
       otherwise, based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      ‘LLE(STRING_A,STRING_B)’ ‘CHARACTER’  ‘LOGICAL’    Fortran 77 and later
  
  _See also_:
       *note LGE::,
*************** _See also_:
*** 14929,14935 ****
  
  File: gfortran.info,  Node: LLT,  Next: LNBLNK,  Prev: LLE,  Up: Intrinsic Procedures
  
! 8.174 'LLT' -- Lexical less than
  ================================
  
  _Description_:
--- 14929,14935 ----
  
  File: gfortran.info,  Node: LLT,  Next: LNBLNK,  Prev: LLE,  Up: Intrinsic Procedures
  
! 8.174 ‘LLT’ -- Lexical less than
  ================================
  
  _Description_:
*************** _Description_:
*** 14939,14947 ****
       length, the shorter is compared as if spaces were appended to it to
       form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics 'LGE', 'LGT', 'LLE',
!      and 'LLT' differ from the corresponding intrinsic operators '.GE.',
!      '.GT.', '.LE.', and '.LT.', in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
--- 14939,14947 ----
       length, the shorter is compared as if spaces were appended to it to
       form a value that has the same length as the longer.
  
!      In general, the lexical comparison intrinsics ‘LGE’, ‘LGT’, ‘LLE’,
!      and ‘LLT’ differ from the corresponding intrinsic operators ‘.GE.’,
!      ‘.GT.’, ‘.LE.’, and ‘.LT.’, in that the latter use the processor's
       character ordering (which is not ASCII on some targets), whereas
       the former always use the ASCII ordering.
  
*************** _Class_:
*** 14952,14972 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LLT(STRING_A, STRING_B)'
  
  _Arguments_:
!      STRING_A    Shall be of default 'CHARACTER' type.
!      STRING_B    Shall be of default 'CHARACTER' type.
  
  _Return value_:
!      Returns '.TRUE.' if 'STRING_A < STRING_B', and '.FALSE.' otherwise,
       based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      'LLT(STRING_A,STRING_B)' 'CHARACTER'  'LOGICAL'    Fortran 77 and later
  
  _See also_:
       *note LGE::,
--- 14952,14972 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LLT(STRING_A, STRING_B)’
  
  _Arguments_:
!      STRING_A    Shall be of default ‘CHARACTER’ type.
!      STRING_B    Shall be of default ‘CHARACTER’ type.
  
  _Return value_:
!      Returns ‘.TRUE.’ if ‘STRING_A < STRING_B’, and ‘.FALSE.’ otherwise,
       based on the ASCII ordering.
  
  _Specific names_:
       Name                     Argument     Return       Standard
                                             type
       --------------------------------------------------------------------------
!      ‘LLT(STRING_A,STRING_B)’ ‘CHARACTER’  ‘LOGICAL’    Fortran 77 and later
  
  _See also_:
       *note LGE::,
*************** _See also_:
*** 14976,14987 ****
  
  File: gfortran.info,  Node: LNBLNK,  Next: LOC,  Prev: LLT,  Up: Intrinsic Procedures
  
! 8.175 'LNBLNK' -- Index of the last non-blank character in a string
  ===================================================================
  
  _Description_:
       Returns the length of a character string, ignoring any trailing
!      blanks.  This is identical to the standard 'LEN_TRIM' intrinsic,
       and is only included for backwards compatibility.
  
  _Standard_:
--- 14976,14987 ----
  
  File: gfortran.info,  Node: LNBLNK,  Next: LOC,  Prev: LLT,  Up: Intrinsic Procedures
  
! 8.175 ‘LNBLNK’ -- Index of the last non-blank character in a string
  ===================================================================
  
  _Description_:
       Returns the length of a character string, ignoring any trailing
!      blanks.  This is identical to the standard ‘LEN_TRIM’ intrinsic,
       and is only included for backwards compatibility.
  
  _Standard_:
*************** _Class_:
*** 14991,15004 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LNBLNK(STRING)'
  
  _Arguments_:
!      STRING      Shall be a scalar of type 'CHARACTER', with
!                  'INTENT(IN)'
  
  _Return value_:
!      The return value is of 'INTEGER(kind=4)' type.
  
  _See also_:
       *note INDEX intrinsic::,
--- 14991,15004 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LNBLNK(STRING)’
  
  _Arguments_:
!      STRING      Shall be a scalar of type ‘CHARACTER’, with
!                  ‘INTENT(IN)’
  
  _Return value_:
!      The return value is of ‘INTEGER(kind=4)’ type.
  
  _See also_:
       *note INDEX intrinsic::,
*************** _See also_:
*** 15007,15017 ****
  
  File: gfortran.info,  Node: LOC,  Next: LOG,  Prev: LNBLNK,  Up: Intrinsic Procedures
  
! 8.176 'LOC' -- Returns the address of a variable
  ================================================
  
  _Description_:
!      'LOC(X)' returns the address of X as an integer.
  
  _Standard_:
       GNU extension
--- 15007,15017 ----
  
  File: gfortran.info,  Node: LOC,  Next: LOG,  Prev: LNBLNK,  Up: Intrinsic Procedures
  
! 8.176 ‘LOC’ -- Returns the address of a variable
  ================================================
  
  _Description_:
!      ‘LOC(X)’ returns the address of X as an integer.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 15020,15032 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = LOC(X)'
  
  _Arguments_:
       X           Variable of any type.
  
  _Return value_:
!      The return value is of type 'INTEGER', with a 'KIND' corresponding
       to the size (in bytes) of a memory address on the target machine.
  
  _Example_:
--- 15020,15032 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = LOC(X)’
  
  _Arguments_:
       X           Variable of any type.
  
  _Return value_:
!      The return value is of type ‘INTEGER’, with a ‘KIND’ corresponding
       to the size (in bytes) of a memory address on the target machine.
  
  _Example_:
*************** _Example_:
*** 15040,15050 ****
  
  File: gfortran.info,  Node: LOG,  Next: LOG10,  Prev: LOC,  Up: Intrinsic Procedures
  
! 8.177 'LOG' -- Natural logarithm function
  =========================================
  
  _Description_:
!      'LOG(X)' computes the natural logarithm of X, i.e.  the logarithm
       to the base e.
  
  _Standard_:
--- 15040,15050 ----
  
  File: gfortran.info,  Node: LOG,  Next: LOG10,  Prev: LOC,  Up: Intrinsic Procedures
  
! 8.177 ‘LOG’ -- Natural logarithm function
  =========================================
  
  _Description_:
!      ‘LOG(X)’ computes the natural logarithm of X, i.e.  the logarithm
       to the base e.
  
  _Standard_:
*************** _Class_:
*** 15054,15067 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LOG(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
!      The return value is of type 'REAL' or 'COMPLEX'.  The kind type
!      parameter is the same as X.  If X is 'COMPLEX', the imaginary part
       \omega is in the range -\pi < \omega \leq \pi.
  
  _Example_:
--- 15054,15067 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LOG(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
!      The return value is of type ‘REAL’ or ‘COMPLEX’.  The kind type
!      parameter is the same as X.  If X is ‘COMPLEX’, the imaginary part
       \omega is in the range -\pi < \omega \leq \pi.
  
  _Example_:
*************** _Example_:
*** 15075,15094 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ALOG(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 or later
!      'DLOG(X)'      'REAL(8) X'       'REAL(8)'      Fortran 77 or later
!      'CLOG(X)'      'COMPLEX(4) X'    'COMPLEX(4)'   Fortran 77 or later
!      'ZLOG(X)'      'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDLOG(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  
  File: gfortran.info,  Node: LOG10,  Next: LOG_GAMMA,  Prev: LOG,  Up: Intrinsic Procedures
  
! 8.178 'LOG10' -- Base 10 logarithm function
  ===========================================
  
  _Description_:
!      'LOG10(X)' computes the base 10 logarithm of X.
  
  _Standard_:
       Fortran 77 and later
--- 15075,15094 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ALOG(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 or later
!      ‘DLOG(X)’      ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 or later
!      ‘CLOG(X)’      ‘COMPLEX(4) X’    ‘COMPLEX(4)’   Fortran 77 or later
!      ‘ZLOG(X)’      ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDLOG(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  
  File: gfortran.info,  Node: LOG10,  Next: LOG_GAMMA,  Prev: LOG,  Up: Intrinsic Procedures
  
! 8.178 ‘LOG10’ -- Base 10 logarithm function
  ===========================================
  
  _Description_:
!      ‘LOG10(X)’ computes the base 10 logarithm of X.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 15097,15109 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LOG10(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
!      The return value is of type 'REAL' or 'COMPLEX'.  The kind type
       parameter is the same as X.
  
  _Example_:
--- 15097,15109 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LOG10(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘REAL’ or ‘COMPLEX’.  The kind type
       parameter is the same as X.
  
  _Example_:
*************** _Example_:
*** 15115,15131 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'ALOG10(X)'    'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DLOG10(X)'    'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: LOG_GAMMA,  Next: LOGICAL,  Prev: LOG10,  Up: Intrinsic Procedures
  
! 8.179 'LOG_GAMMA' -- Logarithm of the Gamma function
  ====================================================
  
  _Description_:
!      'LOG_GAMMA(X)' computes the natural logarithm of the absolute value
       of the Gamma (\Gamma) function.
  
  _Standard_:
--- 15115,15131 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘ALOG10(X)’    ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DLOG10(X)’    ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: LOG_GAMMA,  Next: LOGICAL,  Prev: LOG10,  Up: Intrinsic Procedures
  
! 8.179 ‘LOG_GAMMA’ -- Logarithm of the Gamma function
  ====================================================
  
  _Description_:
!      ‘LOG_GAMMA(X)’ computes the natural logarithm of the absolute value
       of the Gamma (\Gamma) function.
  
  _Standard_:
*************** _Class_:
*** 15135,15148 ****
       Elemental function
  
  _Syntax_:
!      'X = LOG_GAMMA(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL' and neither zero nor a
                   negative integer.
  
  _Return value_:
!      The return value is of type 'REAL' of the same kind as X.
  
  _Example_:
            program test_log_gamma
--- 15135,15148 ----
       Elemental function
  
  _Syntax_:
!      ‘X = LOG_GAMMA(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’ and neither zero nor a
                   negative integer.
  
  _Return value_:
!      The return value is of type ‘REAL’ of the same kind as X.
  
  _Example_:
            program test_log_gamma
*************** _Example_:
*** 15153,15161 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'LGAMMA(X)'    'REAL(4) X'       'REAL(4)'      GNU extension
!      'ALGAMA(X)'    'REAL(4) X'       'REAL(4)'      GNU extension
!      'DLGAMA(X)'    'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Gamma function:
--- 15153,15161 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘LGAMMA(X)’    ‘REAL(4) X’       ‘REAL(4)’      GNU extension
!      ‘ALGAMA(X)’    ‘REAL(4) X’       ‘REAL(4)’      GNU extension
!      ‘DLGAMA(X)’    ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Gamma function:
*************** _See also_:
*** 15164,15174 ****
  
  File: gfortran.info,  Node: LOGICAL,  Next: LSHIFT,  Prev: LOG_GAMMA,  Up: Intrinsic Procedures
  
! 8.180 'LOGICAL' -- Convert to logical type
  ==========================================
  
  _Description_:
!      Converts one kind of 'LOGICAL' variable to another.
  
  _Standard_:
       Fortran 90 and later
--- 15164,15174 ----
  
  File: gfortran.info,  Node: LOGICAL,  Next: LSHIFT,  Prev: LOG_GAMMA,  Up: Intrinsic Procedures
  
! 8.180 ‘LOGICAL’ -- Convert to logical type
  ==========================================
  
  _Description_:
!      Converts one kind of ‘LOGICAL’ variable to another.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 15177,15192 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LOGICAL(L [, KIND])'
  
  _Arguments_:
!      L           The type shall be 'LOGICAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is a 'LOGICAL' value equal to L, with a kind
       corresponding to KIND, or of the default logical kind if KIND is
       not given.
  
--- 15177,15192 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LOGICAL(L [, KIND])’
  
  _Arguments_:
!      L           The type shall be ‘LOGICAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is a ‘LOGICAL’ value equal to L, with a kind
       corresponding to KIND, or of the default logical kind if KIND is
       not given.
  
*************** _See also_:
*** 15198,15215 ****
  
  File: gfortran.info,  Node: LSHIFT,  Next: LSTAT,  Prev: LOGICAL,  Up: Intrinsic Procedures
  
! 8.181 'LSHIFT' -- Left shift bits
  =================================
  
  _Description_:
!      'LSHIFT' returns a value corresponding to I with all of the bits
       shifted left by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to 'BIT_SIZE(I)', otherwise the result value is
       undefined.  Bits shifted out from the left end are lost; zeros are
       shifted in from the opposite end.
  
!      This function has been superseded by the 'ISHFT' intrinsic, which
!      is standard in Fortran 95 and later, and the 'SHIFTL' intrinsic,
       which is standard in Fortran 2008 and later.
  
  _Standard_:
--- 15198,15215 ----
  
  File: gfortran.info,  Node: LSHIFT,  Next: LSTAT,  Prev: LOGICAL,  Up: Intrinsic Procedures
  
! 8.181 ‘LSHIFT’ -- Left shift bits
  =================================
  
  _Description_:
!      ‘LSHIFT’ returns a value corresponding to I with all of the bits
       shifted left by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to ‘BIT_SIZE(I)’, otherwise the result value is
       undefined.  Bits shifted out from the left end are lost; zeros are
       shifted in from the opposite end.
  
!      This function has been superseded by the ‘ISHFT’ intrinsic, which
!      is standard in Fortran 95 and later, and the ‘SHIFTL’ intrinsic,
       which is standard in Fortran 2008 and later.
  
  _Standard_:
*************** _Class_:
*** 15219,15232 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = LSHIFT(I, SHIFT)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _See also_:
       *note ISHFT::,
--- 15219,15232 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = LSHIFT(I, SHIFT)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _See also_:
       *note ISHFT::,
*************** _See also_:
*** 15239,15253 ****
  
  File: gfortran.info,  Node: LSTAT,  Next: LTIME,  Prev: LSHIFT,  Up: Intrinsic Procedures
  
! 8.182 'LSTAT' -- Get file status
  ================================
  
  _Description_:
!      'LSTAT' is identical to *note STAT::, except that if path is a
       symbolic link, then the link itself is statted, not the file that
       it refers to.
  
!      The elements in 'VALUES' are the same as described by *note STAT::.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 15239,15253 ----
  
  File: gfortran.info,  Node: LSTAT,  Next: LTIME,  Prev: LSHIFT,  Up: Intrinsic Procedures
  
! 8.182 ‘LSTAT’ -- Get file status
  ================================
  
  _Description_:
!      ‘LSTAT’ is identical to *note STAT::, except that if path is a
       symbolic link, then the link itself is statted, not the file that
       it refers to.
  
!      The elements in ‘VALUES’ are the same as described by *note STAT::.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 15259,15272 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL LSTAT(NAME, VALUES [, STATUS])'
!      'STATUS = LSTAT(NAME, VALUES)'
  
  _Arguments_:
!      NAME        The type shall be 'CHARACTER' of the default
                   kind, a valid path within the file system.
!      VALUES      The type shall be 'INTEGER(4), DIMENSION(13)'.
!      STATUS      (Optional) status flag of type 'INTEGER(4)'.
                   Returns 0 on success and a system specific error
                   code otherwise.
  
--- 15259,15272 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL LSTAT(NAME, VALUES [, STATUS])’
!      ‘STATUS = LSTAT(NAME, VALUES)’
  
  _Arguments_:
!      NAME        The type shall be ‘CHARACTER’ of the default
                   kind, a valid path within the file system.
!      VALUES      The type shall be ‘INTEGER(4), DIMENSION(13)’.
!      STATUS      (Optional) status flag of type ‘INTEGER(4)’.
                   Returns 0 on success and a system specific error
                   code otherwise.
  
*************** _See also_:
*** 15282,15294 ****
  
  File: gfortran.info,  Node: LTIME,  Next: MALLOC,  Prev: LSTAT,  Up: Intrinsic Procedures
  
! 8.183 'LTIME' -- Convert time to local time info
  ================================================
  
  _Description_:
       Given a system time value TIME (as provided by the *note TIME::
       intrinsic), fills VALUES with values extracted from it appropriate
!      to the local time zone using 'localtime(3)'.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  In new code, programmers should consider the use
--- 15282,15294 ----
  
  File: gfortran.info,  Node: LTIME,  Next: MALLOC,  Prev: LSTAT,  Up: Intrinsic Procedures
  
! 8.183 ‘LTIME’ -- Convert time to local time info
  ================================================
  
  _Description_:
       Given a system time value TIME (as provided by the *note TIME::
       intrinsic), fills VALUES with values extracted from it appropriate
!      to the local time zone using ‘localtime(3)’.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  In new code, programmers should consider the use
*************** _Class_:
*** 15302,15314 ****
       Subroutine
  
  _Syntax_:
!      'CALL LTIME(TIME, VALUES)'
  
  _Arguments_:
!      TIME        An 'INTEGER' scalar expression corresponding to
!                  a system time, with 'INTENT(IN)'.
!      VALUES      A default 'INTEGER' array with 9 elements, with
!                  'INTENT(OUT)'.
  
  _Return value_:
       The elements of VALUES are assigned as follows:
--- 15302,15314 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL LTIME(TIME, VALUES)’
  
  _Arguments_:
!      TIME        An ‘INTEGER’ scalar expression corresponding to
!                  a system time, with ‘INTENT(IN)’.
!      VALUES      A default ‘INTEGER’ array with 9 elements, with
!                  ‘INTENT(OUT)’.
  
  _Return value_:
       The elements of VALUES are assigned as follows:
*************** _See also_:
*** 15335,15350 ****
  
  File: gfortran.info,  Node: MALLOC,  Next: MASKL,  Prev: LTIME,  Up: Intrinsic Procedures
  
! 8.184 'MALLOC' -- Allocate dynamic memory
  =========================================
  
  _Description_:
!      'MALLOC(SIZE)' allocates SIZE bytes of dynamic memory and returns
!      the address of the allocated memory.  The 'MALLOC' intrinsic is an
       extension intended to be used with Cray pointers, and is provided
       in GNU Fortran to allow the user to compile legacy code.  For new
       code using Fortran 95 pointers, the memory allocation intrinsic is
!      'ALLOCATE'.
  
  _Standard_:
       GNU extension
--- 15335,15350 ----
  
  File: gfortran.info,  Node: MALLOC,  Next: MASKL,  Prev: LTIME,  Up: Intrinsic Procedures
  
! 8.184 ‘MALLOC’ -- Allocate dynamic memory
  =========================================
  
  _Description_:
!      ‘MALLOC(SIZE)’ allocates SIZE bytes of dynamic memory and returns
!      the address of the allocated memory.  The ‘MALLOC’ intrinsic is an
       extension intended to be used with Cray pointers, and is provided
       in GNU Fortran to allow the user to compile legacy code.  For new
       code using Fortran 95 pointers, the memory allocation intrinsic is
!      ‘ALLOCATE’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 15353,15370 ****
       Function
  
  _Syntax_:
!      'PTR = MALLOC(SIZE)'
  
  _Arguments_:
!      SIZE        The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER(K)', with K such that
!      variables of type 'INTEGER(K)' have the same size as C pointers
!      ('sizeof(void *)').
  
  _Example_:
!      The following example demonstrates the use of 'MALLOC' and 'FREE'
       with Cray pointers.
  
            program test_malloc
--- 15353,15370 ----
       Function
  
  _Syntax_:
!      ‘PTR = MALLOC(SIZE)’
  
  _Arguments_:
!      SIZE        The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER(K)’, with K such that
!      variables of type ‘INTEGER(K)’ have the same size as C pointers
!      (‘sizeof(void *)’).
  
  _Example_:
!      The following example demonstrates the use of ‘MALLOC’ and ‘FREE’
       with Cray pointers.
  
            program test_malloc
*************** _See also_:
*** 15391,15401 ****
  
  File: gfortran.info,  Node: MASKL,  Next: MASKR,  Prev: MALLOC,  Up: Intrinsic Procedures
  
! 8.185 'MASKL' -- Left justified mask
  ====================================
  
  _Description_:
!      'MASKL(I[, KIND])' has its leftmost I bits set to 1, and the
       remaining bits set to 0.
  
  _Standard_:
--- 15391,15401 ----
  
  File: gfortran.info,  Node: MASKL,  Next: MASKR,  Prev: MALLOC,  Up: Intrinsic Procedures
  
! 8.185 ‘MASKL’ -- Left justified mask
  ====================================
  
  _Description_:
!      ‘MASKL(I[, KIND])’ has its leftmost I bits set to 1, and the
       remaining bits set to 0.
  
  _Standard_:
*************** _Class_:
*** 15405,15419 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MASKL(I[, KIND])'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER'.
       KIND        Shall be a scalar constant expression of type
!                  'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER'.  If KIND is present, it
       specifies the kind value of the return type; otherwise, it is of
       the default integer kind.
  
--- 15405,15419 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MASKL(I[, KIND])’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’.
       KIND        Shall be a scalar constant expression of type
!                  ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’.  If KIND is present, it
       specifies the kind value of the return type; otherwise, it is of
       the default integer kind.
  
*************** _See also_:
*** 15423,15433 ****
  
  File: gfortran.info,  Node: MASKR,  Next: MATMUL,  Prev: MASKL,  Up: Intrinsic Procedures
  
! 8.186 'MASKR' -- Right justified mask
  =====================================
  
  _Description_:
!      'MASKL(I[, KIND])' has its rightmost I bits set to 1, and the
       remaining bits set to 0.
  
  _Standard_:
--- 15423,15433 ----
  
  File: gfortran.info,  Node: MASKR,  Next: MATMUL,  Prev: MASKL,  Up: Intrinsic Procedures
  
! 8.186 ‘MASKR’ -- Right justified mask
  =====================================
  
  _Description_:
!      ‘MASKL(I[, KIND])’ has its rightmost I bits set to 1, and the
       remaining bits set to 0.
  
  _Standard_:
*************** _Class_:
*** 15437,15451 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MASKR(I[, KIND])'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER'.
       KIND        Shall be a scalar constant expression of type
!                  'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER'.  If KIND is present, it
       specifies the kind value of the return type; otherwise, it is of
       the default integer kind.
  
--- 15437,15451 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MASKR(I[, KIND])’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’.
       KIND        Shall be a scalar constant expression of type
!                  ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’.  If KIND is present, it
       specifies the kind value of the return type; otherwise, it is of
       the default integer kind.
  
*************** _See also_:
*** 15455,15461 ****
  
  File: gfortran.info,  Node: MATMUL,  Next: MAX,  Prev: MASKR,  Up: Intrinsic Procedures
  
! 8.187 'MATMUL' -- matrix multiplication
  =======================================
  
  _Description_:
--- 15455,15461 ----
  
  File: gfortran.info,  Node: MATMUL,  Next: MAX,  Prev: MASKR,  Up: Intrinsic Procedures
  
! 8.187 ‘MATMUL’ -- matrix multiplication
  =======================================
  
  _Description_:
*************** _Class_:
*** 15468,15481 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = MATMUL(MATRIX_A, MATRIX_B)'
  
  _Arguments_:
!      MATRIX_A    An array of 'INTEGER', 'REAL', 'COMPLEX', or
!                  'LOGICAL' type, with a rank of one or two.
!      MATRIX_B    An array of 'INTEGER', 'REAL', or 'COMPLEX' type
                   if MATRIX_A is of a numeric type; otherwise, an
!                  array of 'LOGICAL' type.  The rank shall be one
                   or two, and the first (or only) dimension of
                   MATRIX_B shall be equal to the last (or only)
                   dimension of MATRIX_A.  MATRIX_A and MATRIX_B
--- 15468,15481 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = MATMUL(MATRIX_A, MATRIX_B)’
  
  _Arguments_:
!      MATRIX_A    An array of ‘INTEGER’, ‘REAL’, ‘COMPLEX’, or
!                  ‘LOGICAL’ type, with a rank of one or two.
!      MATRIX_B    An array of ‘INTEGER’, ‘REAL’, or ‘COMPLEX’ type
                   if MATRIX_A is of a numeric type; otherwise, an
!                  array of ‘LOGICAL’ type.  The rank shall be one
                   or two, and the first (or only) dimension of
                   MATRIX_B shall be equal to the last (or only)
                   dimension of MATRIX_A.  MATRIX_A and MATRIX_B
*************** _Arguments_:
*** 15484,15495 ****
  _Return value_:
       The matrix product of MATRIX_A and MATRIX_B.  The type and kind of
       the result follow the usual type and kind promotion rules, as for
!      the '*' or '.AND.' operators.
  
  
  File: gfortran.info,  Node: MAX,  Next: MAXEXPONENT,  Prev: MATMUL,  Up: Intrinsic Procedures
  
! 8.188 'MAX' -- Maximum value of an argument list
  ================================================
  
  _Description_:
--- 15484,15495 ----
  _Return value_:
       The matrix product of MATRIX_A and MATRIX_B.  The type and kind of
       the result follow the usual type and kind promotion rules, as for
!      the ‘*’ or ‘.AND.’ operators.
  
  
  File: gfortran.info,  Node: MAX,  Next: MAXEXPONENT,  Prev: MATMUL,  Up: Intrinsic Procedures
  
! 8.188 ‘MAX’ -- Maximum value of an argument list
  ================================================
  
  _Description_:
*************** _Class_:
*** 15502,15511 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MAX(A1, A2 [, A3 [, ...]])'
  
  _Arguments_:
!      A1          The type shall be 'INTEGER' or 'REAL'.
       A2, A3,     An expression of the same type and kind as A1.
       ...         (As a GNU extension, arguments of different
                   kinds are permitted.)
--- 15502,15511 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MAX(A1, A2 [, A3 [, ...]])’
  
  _Arguments_:
!      A1          The type shall be ‘INTEGER’ or ‘REAL’.
       A2, A3,     An expression of the same type and kind as A1.
       ...         (As a GNU extension, arguments of different
                   kinds are permitted.)
*************** _Return value_:
*** 15517,15527 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'MAX0(A1)'     'INTEGER(4) A1'   'INTEGER(4)'   Fortran 77 and later
!      'AMAX0(A1)'    'INTEGER(4) A1'   'REAL(MAX(X))' Fortran 77 and later
!      'MAX1(A1)'     'REAL A1'         'INT(MAX(X))'  Fortran 77 and later
!      'AMAX1(A1)'    'REAL(4) A1'      'REAL(4)'      Fortran 77 and later
!      'DMAX1(A1)'    'REAL(8) A1'      'REAL(8)'      Fortran 77 and later
  
  _See also_:
       *note MAXLOC::
--- 15517,15527 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘MAX0(A1)’     ‘INTEGER(4) A1’   ‘INTEGER(4)’   Fortran 77 and later
!      ‘AMAX0(A1)’    ‘INTEGER(4) A1’   ‘REAL(MAX(X))’ Fortran 77 and later
!      ‘MAX1(A1)’     ‘REAL A1’         ‘INT(MAX(X))’  Fortran 77 and later
!      ‘AMAX1(A1)’    ‘REAL(4) A1’      ‘REAL(4)’      Fortran 77 and later
!      ‘DMAX1(A1)’    ‘REAL(8) A1’      ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       *note MAXLOC::
*************** _See also_:
*** 15531,15542 ****
  
  File: gfortran.info,  Node: MAXEXPONENT,  Next: MAXLOC,  Prev: MAX,  Up: Intrinsic Procedures
  
! 8.189 'MAXEXPONENT' -- Maximum exponent of a real kind
  ======================================================
  
  _Description_:
!      'MAXEXPONENT(X)' returns the maximum exponent in the model of the
!      type of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 15531,15542 ----
  
  File: gfortran.info,  Node: MAXEXPONENT,  Next: MAXLOC,  Prev: MAX,  Up: Intrinsic Procedures
  
! 8.189 ‘MAXEXPONENT’ -- Maximum exponent of a real kind
  ======================================================
  
  _Description_:
!      ‘MAXEXPONENT(X)’ returns the maximum exponent in the model of the
!      type of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 15545,15557 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = MAXEXPONENT(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _Example_:
--- 15545,15557 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = MAXEXPONENT(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _Example_:
*************** _Example_:
*** 15566,15572 ****
  
  File: gfortran.info,  Node: MAXLOC,  Next: MAXVAL,  Prev: MAXEXPONENT,  Up: Intrinsic Procedures
  
! 8.190 'MAXLOC' -- Location of the maximum value within an array
  ===============================================================
  
  _Description_:
--- 15566,15572 ----
  
  File: gfortran.info,  Node: MAXLOC,  Next: MAXVAL,  Prev: MAXEXPONENT,  Up: Intrinsic Procedures
  
! 8.190 ‘MAXLOC’ -- Location of the maximum value within an array
  ===============================================================
  
  _Description_:
*************** _Description_:
*** 15574,15591 ****
       maximum value, or, if the DIM argument is supplied, determines the
       locations of the maximum element along each row of the array in the
       DIM direction.  If MASK is present, only the elements for which
!      MASK is '.TRUE.' are considered.  If more than one element in the
       array has the maximum value, the location returned is that of the
       first such element in array element order if the BACK is not
       present, or is false; if BACK is true, the location returned is
       that of the last such element.  If the array has zero size, or all
!      of the elements of MASK are '.FALSE.', then the result is an array
       of zeroes.  Similarly, if DIM is supplied and all of the elements
       of MASK along a given row are zero, the result value for that row
       is zero.
  
  _Standard_:
!      Fortran 95 and later; ARRAY of 'CHARACTER' and the KIND argument
       are available in Fortran 2003 and later.  The BACK argument is
       available in Fortran 2008 and later.
  
--- 15574,15591 ----
       maximum value, or, if the DIM argument is supplied, determines the
       locations of the maximum element along each row of the array in the
       DIM direction.  If MASK is present, only the elements for which
!      MASK is ‘.TRUE.’ are considered.  If more than one element in the
       array has the maximum value, the location returned is that of the
       first such element in array element order if the BACK is not
       present, or is false; if BACK is true, the location returned is
       that of the last such element.  If the array has zero size, or all
!      of the elements of MASK are ‘.FALSE.’, then the result is an array
       of zeroes.  Similarly, if DIM is supplied and all of the elements
       of MASK along a given row are zero, the result value for that row
       is zero.
  
  _Standard_:
!      Fortran 95 and later; ARRAY of ‘CHARACTER’ and the KIND argument
       are available in Fortran 2003 and later.  The BACK argument is
       available in Fortran 2008 and later.
  
*************** _Class_:
*** 15593,15613 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = MAXLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])'
!      'RESULT = MAXLOC(ARRAY [, MASK] [,KIND] [,BACK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER' or 'REAL'.
!      DIM         (Optional) Shall be a scalar of type 'INTEGER',
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        Shall be of type 'LOGICAL', and conformable with
                   ARRAY.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
!      BACK        (Optional) A scalar of type 'LOGICAL'.
  
  _Return value_:
       If DIM is absent, the result is a rank-one array with a length
--- 15593,15613 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = MAXLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])’
!      ‘RESULT = MAXLOC(ARRAY [, MASK] [,KIND] [,BACK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’ or ‘REAL’.
!      DIM         (Optional) Shall be a scalar of type ‘INTEGER’,
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        Shall be of type ‘LOGICAL’, and conformable with
                   ARRAY.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
!      BACK        (Optional) A scalar of type ‘LOGICAL’.
  
  _Return value_:
       If DIM is absent, the result is a rank-one array with a length
*************** _See also_:
*** 15626,15641 ****
  
  File: gfortran.info,  Node: MAXVAL,  Next: MCLOCK,  Prev: MAXLOC,  Up: Intrinsic Procedures
  
! 8.191 'MAXVAL' -- Maximum value of an array
  ===========================================
  
  _Description_:
       Determines the maximum value of the elements in an array value, or,
       if the DIM argument is supplied, determines the maximum value along
       each row of the array in the DIM direction.  If MASK is present,
!      only the elements for which MASK is '.TRUE.' are considered.  If
       the array has zero size, or all of the elements of MASK are
!      '.FALSE.', then the result is '-HUGE(ARRAY)' if ARRAY is numeric,
       or a string of nulls if ARRAY is of character type.
  
  _Standard_:
--- 15626,15641 ----
  
  File: gfortran.info,  Node: MAXVAL,  Next: MCLOCK,  Prev: MAXLOC,  Up: Intrinsic Procedures
  
! 8.191 ‘MAXVAL’ -- Maximum value of an array
  ===========================================
  
  _Description_:
       Determines the maximum value of the elements in an array value, or,
       if the DIM argument is supplied, determines the maximum value along
       each row of the array in the DIM direction.  If MASK is present,
!      only the elements for which MASK is ‘.TRUE.’ are considered.  If
       the array has zero size, or all of the elements of MASK are
!      ‘.FALSE.’, then the result is ‘-HUGE(ARRAY)’ if ARRAY is numeric,
       or a string of nulls if ARRAY is of character type.
  
  _Standard_:
*************** _Class_:
*** 15645,15660 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = MAXVAL(ARRAY, DIM [, MASK])'
!      'RESULT = MAXVAL(ARRAY [, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER' or 'REAL'.
!      DIM         (Optional) Shall be a scalar of type 'INTEGER',
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        (Optional) Shall be of type 'LOGICAL', and
                   conformable with ARRAY.
  
  _Return value_:
--- 15645,15660 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = MAXVAL(ARRAY, DIM [, MASK])’
!      ‘RESULT = MAXVAL(ARRAY [, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’ or ‘REAL’.
!      DIM         (Optional) Shall be a scalar of type ‘INTEGER’,
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        (Optional) Shall be of type ‘LOGICAL’, and
                   conformable with ARRAY.
  
  _Return value_:
*************** _See also_:
*** 15671,15685 ****
  
  File: gfortran.info,  Node: MCLOCK,  Next: MCLOCK8,  Prev: MAXVAL,  Up: Intrinsic Procedures
  
! 8.192 'MCLOCK' -- Time function
  ===============================
  
  _Description_:
       Returns the number of clock ticks since the start of the process,
!      based on the function 'clock(3)' in the C standard library.
  
       This intrinsic is not fully portable, such as to systems with
!      32-bit 'INTEGER' types but supporting times wider than 32 bits.
       Therefore, the values returned by this intrinsic might be, or
       become, negative, or numerically less than previous values, during
       a single run of the compiled program.
--- 15671,15685 ----
  
  File: gfortran.info,  Node: MCLOCK,  Next: MCLOCK8,  Prev: MAXVAL,  Up: Intrinsic Procedures
  
! 8.192 ‘MCLOCK’ -- Time function
  ===============================
  
  _Description_:
       Returns the number of clock ticks since the start of the process,
!      based on the function ‘clock(3)’ in the C standard library.
  
       This intrinsic is not fully portable, such as to systems with
!      32-bit ‘INTEGER’ types but supporting times wider than 32 bits.
       Therefore, the values returned by this intrinsic might be, or
       become, negative, or numerically less than previous values, during
       a single run of the compiled program.
*************** _Class_:
*** 15691,15702 ****
       Function
  
  _Syntax_:
!      'RESULT = MCLOCK()'
  
  _Return value_:
!      The return value is a scalar of type 'INTEGER(4)', equal to the
!      number of clock ticks since the start of the process, or '-1' if
!      the system does not support 'clock(3)'.
  
  _See also_:
       *note CTIME::,
--- 15691,15702 ----
       Function
  
  _Syntax_:
!      ‘RESULT = MCLOCK()’
  
  _Return value_:
!      The return value is a scalar of type ‘INTEGER(4)’, equal to the
!      number of clock ticks since the start of the process, or ‘-1’ if
!      the system does not support ‘clock(3)’.
  
  _See also_:
       *note CTIME::,
*************** _See also_:
*** 15708,15724 ****
  
  File: gfortran.info,  Node: MCLOCK8,  Next: MERGE,  Prev: MCLOCK,  Up: Intrinsic Procedures
  
! 8.193 'MCLOCK8' -- Time function (64-bit)
  =========================================
  
  _Description_:
       Returns the number of clock ticks since the start of the process,
!      based on the function 'clock(3)' in the C standard library.
  
       _Warning:_ this intrinsic does not increase the range of the timing
!      values over that returned by 'clock(3)'.  On a system with a 32-bit
!      'clock(3)', 'MCLOCK8' will return a 32-bit value, even though it is
!      converted to a 64-bit 'INTEGER(8)' value.  That means overflows of
       the 32-bit value can still occur.  Therefore, the values returned
       by this intrinsic might be or become negative or numerically less
       than previous values during a single run of the compiled program.
--- 15708,15724 ----
  
  File: gfortran.info,  Node: MCLOCK8,  Next: MERGE,  Prev: MCLOCK,  Up: Intrinsic Procedures
  
! 8.193 ‘MCLOCK8’ -- Time function (64-bit)
  =========================================
  
  _Description_:
       Returns the number of clock ticks since the start of the process,
!      based on the function ‘clock(3)’ in the C standard library.
  
       _Warning:_ this intrinsic does not increase the range of the timing
!      values over that returned by ‘clock(3)’.  On a system with a 32-bit
!      ‘clock(3)’, ‘MCLOCK8’ will return a 32-bit value, even though it is
!      converted to a 64-bit ‘INTEGER(8)’ value.  That means overflows of
       the 32-bit value can still occur.  Therefore, the values returned
       by this intrinsic might be or become negative or numerically less
       than previous values during a single run of the compiled program.
*************** _Class_:
*** 15730,15741 ****
       Function
  
  _Syntax_:
!      'RESULT = MCLOCK8()'
  
  _Return value_:
!      The return value is a scalar of type 'INTEGER(8)', equal to the
!      number of clock ticks since the start of the process, or '-1' if
!      the system does not support 'clock(3)'.
  
  _See also_:
       *note CTIME::,
--- 15730,15741 ----
       Function
  
  _Syntax_:
!      ‘RESULT = MCLOCK8()’
  
  _Return value_:
!      The return value is a scalar of type ‘INTEGER(8)’, equal to the
!      number of clock ticks since the start of the process, or ‘-1’ if
!      the system does not support ‘clock(3)’.
  
  _See also_:
       *note CTIME::,
*************** _See also_:
*** 15747,15759 ****
  
  File: gfortran.info,  Node: MERGE,  Next: MERGE_BITS,  Prev: MCLOCK8,  Up: Intrinsic Procedures
  
! 8.194 'MERGE' -- Merge variables
  ================================
  
  _Description_:
       Select values from two arrays according to a logical mask.  The
!      result is equal to TSOURCE if MASK is '.TRUE.', or equal to FSOURCE
!      if it is '.FALSE.'.
  
  _Standard_:
       Fortran 90 and later
--- 15747,15759 ----
  
  File: gfortran.info,  Node: MERGE,  Next: MERGE_BITS,  Prev: MCLOCK8,  Up: Intrinsic Procedures
  
! 8.194 ‘MERGE’ -- Merge variables
  ================================
  
  _Description_:
       Select values from two arrays according to a logical mask.  The
!      result is equal to TSOURCE if MASK is ‘.TRUE.’, or equal to FSOURCE
!      if it is ‘.FALSE.’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 15762,15774 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MERGE(TSOURCE, FSOURCE, MASK)'
  
  _Arguments_:
       TSOURCE     May be of any type.
       FSOURCE     Shall be of the same type and type parameters as
                   TSOURCE.
!      MASK        Shall be of type 'LOGICAL'.
  
  _Return value_:
       The result is of the same type and type parameters as TSOURCE.
--- 15762,15774 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MERGE(TSOURCE, FSOURCE, MASK)’
  
  _Arguments_:
       TSOURCE     May be of any type.
       FSOURCE     Shall be of the same type and type parameters as
                   TSOURCE.
!      MASK        Shall be of type ‘LOGICAL’.
  
  _Return value_:
       The result is of the same type and type parameters as TSOURCE.
*************** _Return value_:
*** 15776,15786 ****
  
  File: gfortran.info,  Node: MERGE_BITS,  Next: MIN,  Prev: MERGE,  Up: Intrinsic Procedures
  
! 8.195 'MERGE_BITS' -- Merge of bits under mask
  ==============================================
  
  _Description_:
!      'MERGE_BITS(I, J, MASK)' merges the bits of I and J as determined
       by the mask.  The i-th bit of the result is equal to the i-th bit
       of I if the i-th bit of MASK is 1; it is equal to the i-th bit of J
       otherwise.
--- 15776,15786 ----
  
  File: gfortran.info,  Node: MERGE_BITS,  Next: MIN,  Prev: MERGE,  Up: Intrinsic Procedures
  
! 8.195 ‘MERGE_BITS’ -- Merge of bits under mask
  ==============================================
  
  _Description_:
!      ‘MERGE_BITS(I, J, MASK)’ merges the bits of I and J as determined
       by the mask.  The i-th bit of the result is equal to the i-th bit
       of I if the i-th bit of MASK is 1; it is equal to the i-th bit of J
       otherwise.
*************** _Class_:
*** 15792,15806 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MERGE_BITS(I, J, MASK)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER' or a
                   boz-literal-constant.
!      J           Shall be of type 'INTEGER' with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
!      MASK        Shall be of type 'INTEGER' or a
                   boz-literal-constant and of the same kind as I.
  
  _Return value_:
--- 15792,15806 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MERGE_BITS(I, J, MASK)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’ or a
                   boz-literal-constant.
!      J           Shall be of type ‘INTEGER’ with the same kind
                   type parameter as I or a boz-literal-constant.
                   I and J shall not both be boz-literal-constants.
!      MASK        Shall be of type ‘INTEGER’ or a
                   boz-literal-constant and of the same kind as I.
  
  _Return value_:
*************** _Return value_:
*** 15809,15815 ****
  
  File: gfortran.info,  Node: MIN,  Next: MINEXPONENT,  Prev: MERGE_BITS,  Up: Intrinsic Procedures
  
! 8.196 'MIN' -- Minimum value of an argument list
  ================================================
  
  _Description_:
--- 15809,15815 ----
  
  File: gfortran.info,  Node: MIN,  Next: MINEXPONENT,  Prev: MERGE_BITS,  Up: Intrinsic Procedures
  
! 8.196 ‘MIN’ -- Minimum value of an argument list
  ================================================
  
  _Description_:
*************** _Class_:
*** 15822,15831 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MIN(A1, A2 [, A3, ...])'
  
  _Arguments_:
!      A1          The type shall be 'INTEGER' or 'REAL'.
       A2, A3,     An expression of the same type and kind as A1.
       ...         (As a GNU extension, arguments of different
                   kinds are permitted.)
--- 15822,15831 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MIN(A1, A2 [, A3, ...])’
  
  _Arguments_:
!      A1          The type shall be ‘INTEGER’ or ‘REAL’.
       A2, A3,     An expression of the same type and kind as A1.
       ...         (As a GNU extension, arguments of different
                   kinds are permitted.)
*************** _Return value_:
*** 15837,15847 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'MIN0(A1)'     'INTEGER(4) A1'   'INTEGER(4)'   Fortran 77 and later
!      'AMIN0(A1)'    'INTEGER(4) A1'   'REAL(4)'      Fortran 77 and later
!      'MIN1(A1)'     'REAL A1'         'INTEGER(4)'   Fortran 77 and later
!      'AMIN1(A1)'    'REAL(4) A1'      'REAL(4)'      Fortran 77 and later
!      'DMIN1(A1)'    'REAL(8) A1'      'REAL(8)'      Fortran 77 and later
  
  _See also_:
       *note MAX::,
--- 15837,15847 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘MIN0(A1)’     ‘INTEGER(4) A1’   ‘INTEGER(4)’   Fortran 77 and later
!      ‘AMIN0(A1)’    ‘INTEGER(4) A1’   ‘REAL(4)’      Fortran 77 and later
!      ‘MIN1(A1)’     ‘REAL A1’         ‘INTEGER(4)’   Fortran 77 and later
!      ‘AMIN1(A1)’    ‘REAL(4) A1’      ‘REAL(4)’      Fortran 77 and later
!      ‘DMIN1(A1)’    ‘REAL(8) A1’      ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       *note MAX::,
*************** _See also_:
*** 15851,15862 ****
  
  File: gfortran.info,  Node: MINEXPONENT,  Next: MINLOC,  Prev: MIN,  Up: Intrinsic Procedures
  
! 8.197 'MINEXPONENT' -- Minimum exponent of a real kind
  ======================================================
  
  _Description_:
!      'MINEXPONENT(X)' returns the minimum exponent in the model of the
!      type of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 15851,15862 ----
  
  File: gfortran.info,  Node: MINEXPONENT,  Next: MINLOC,  Prev: MIN,  Up: Intrinsic Procedures
  
! 8.197 ‘MINEXPONENT’ -- Minimum exponent of a real kind
  ======================================================
  
  _Description_:
!      ‘MINEXPONENT(X)’ returns the minimum exponent in the model of the
!      type of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 15865,15886 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = MINEXPONENT(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _Example_:
!      See 'MAXEXPONENT' for an example.
  
  
  File: gfortran.info,  Node: MINLOC,  Next: MINVAL,  Prev: MINEXPONENT,  Up: Intrinsic Procedures
  
! 8.198 'MINLOC' -- Location of the minimum value within an array
  ===============================================================
  
  _Description_:
--- 15865,15886 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = MINEXPONENT(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _Example_:
!      See ‘MAXEXPONENT’ for an example.
  
  
  File: gfortran.info,  Node: MINLOC,  Next: MINVAL,  Prev: MINEXPONENT,  Up: Intrinsic Procedures
  
! 8.198 ‘MINLOC’ -- Location of the minimum value within an array
  ===============================================================
  
  _Description_:
*************** _Description_:
*** 15888,15905 ****
       minimum value, or, if the DIM argument is supplied, determines the
       locations of the minimum element along each row of the array in the
       DIM direction.  If MASK is present, only the elements for which
!      MASK is '.TRUE.' are considered.  If more than one element in the
       array has the minimum value, the location returned is that of the
       first such element in array element order if the BACK is not
       present, or is false; if BACK is true, the location returned is
       that of the last such element.  If the array has zero size, or all
!      of the elements of MASK are '.FALSE.', then the result is an array
       of zeroes.  Similarly, if DIM is supplied and all of the elements
       of MASK along a given row are zero, the result value for that row
       is zero.
  
  _Standard_:
!      Fortran 90 and later; ARRAY of 'CHARACTER' and the KIND argument
       are available in Fortran 2003 and later.  The BACK argument is
       available in Fortran 2008 and later.
  
--- 15888,15905 ----
       minimum value, or, if the DIM argument is supplied, determines the
       locations of the minimum element along each row of the array in the
       DIM direction.  If MASK is present, only the elements for which
!      MASK is ‘.TRUE.’ are considered.  If more than one element in the
       array has the minimum value, the location returned is that of the
       first such element in array element order if the BACK is not
       present, or is false; if BACK is true, the location returned is
       that of the last such element.  If the array has zero size, or all
!      of the elements of MASK are ‘.FALSE.’, then the result is an array
       of zeroes.  Similarly, if DIM is supplied and all of the elements
       of MASK along a given row are zero, the result value for that row
       is zero.
  
  _Standard_:
!      Fortran 90 and later; ARRAY of ‘CHARACTER’ and the KIND argument
       are available in Fortran 2003 and later.  The BACK argument is
       available in Fortran 2008 and later.
  
*************** _Class_:
*** 15907,15928 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = MINLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])'
!      'RESULT = MINLOC(ARRAY [, MASK], [,KIND] [,BACK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER', 'REAL' or
!                  'CHARACTER'.
!      DIM         (Optional) Shall be a scalar of type 'INTEGER',
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        Shall be of type 'LOGICAL', and conformable with
                   ARRAY.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
!      BACK        (Optional) A scalar of type 'LOGICAL'.
  
  _Return value_:
       If DIM is absent, the result is a rank-one array with a length
--- 15907,15928 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = MINLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])’
!      ‘RESULT = MINLOC(ARRAY [, MASK], [,KIND] [,BACK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’, ‘REAL’ or
!                  ‘CHARACTER’.
!      DIM         (Optional) Shall be a scalar of type ‘INTEGER’,
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        Shall be of type ‘LOGICAL’, and conformable with
                   ARRAY.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
!      BACK        (Optional) A scalar of type ‘LOGICAL’.
  
  _Return value_:
       If DIM is absent, the result is a rank-one array with a length
*************** _See also_:
*** 15941,15957 ****
  
  File: gfortran.info,  Node: MINVAL,  Next: MOD,  Prev: MINLOC,  Up: Intrinsic Procedures
  
! 8.199 'MINVAL' -- Minimum value of an array
  ===========================================
  
  _Description_:
       Determines the minimum value of the elements in an array value, or,
       if the DIM argument is supplied, determines the minimum value along
       each row of the array in the DIM direction.  If MASK is present,
!      only the elements for which MASK is '.TRUE.' are considered.  If
       the array has zero size, or all of the elements of MASK are
!      '.FALSE.', then the result is 'HUGE(ARRAY)' if ARRAY is numeric, or
!      a string of 'CHAR(255)' characters if ARRAY is of character type.
  
  _Standard_:
       Fortran 90 and later
--- 15941,15957 ----
  
  File: gfortran.info,  Node: MINVAL,  Next: MOD,  Prev: MINLOC,  Up: Intrinsic Procedures
  
! 8.199 ‘MINVAL’ -- Minimum value of an array
  ===========================================
  
  _Description_:
       Determines the minimum value of the elements in an array value, or,
       if the DIM argument is supplied, determines the minimum value along
       each row of the array in the DIM direction.  If MASK is present,
!      only the elements for which MASK is ‘.TRUE.’ are considered.  If
       the array has zero size, or all of the elements of MASK are
!      ‘.FALSE.’, then the result is ‘HUGE(ARRAY)’ if ARRAY is numeric, or
!      a string of ‘CHAR(255)’ characters if ARRAY is of character type.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 15960,15975 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = MINVAL(ARRAY, DIM [, MASK])'
!      'RESULT = MINVAL(ARRAY [, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER' or 'REAL'.
!      DIM         (Optional) Shall be a scalar of type 'INTEGER',
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        Shall be of type 'LOGICAL', and conformable with
                   ARRAY.
  
  _Return value_:
--- 15960,15975 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = MINVAL(ARRAY, DIM [, MASK])’
!      ‘RESULT = MINVAL(ARRAY [, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’ or ‘REAL’.
!      DIM         (Optional) Shall be a scalar of type ‘INTEGER’,
                   with a value between one and the rank of ARRAY,
                   inclusive.  It may not be an optional dummy
                   argument.
!      MASK        Shall be of type ‘LOGICAL’, and conformable with
                   ARRAY.
  
  _Return value_:
*************** _See also_:
*** 15986,15996 ****
  
  File: gfortran.info,  Node: MOD,  Next: MODULO,  Prev: MINVAL,  Up: Intrinsic Procedures
  
! 8.200 'MOD' -- Remainder function
  =================================
  
  _Description_:
!      'MOD(A,P)' computes the remainder of the division of A by P.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
--- 15986,15996 ----
  
  File: gfortran.info,  Node: MOD,  Next: MODULO,  Prev: MINVAL,  Up: Intrinsic Procedures
  
! 8.200 ‘MOD’ -- Remainder function
  =================================
  
  _Description_:
!      ‘MOD(A,P)’ computes the remainder of the division of A by P.
  
  _Standard_:
       Fortran 77 and later, has overloads that are GNU extensions
*************** _Class_:
*** 15999,16014 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MOD(A, P)'
  
  _Arguments_:
!      A           Shall be a scalar of type 'INTEGER' or 'REAL'.
       P           Shall be a scalar of the same type and kind as A
                   and not equal to zero.  (As a GNU extension,
                   arguments of different kinds are permitted.)
  
  _Return value_:
!      The return value is the result of 'A - (INT(A/P) * P)'.  The type
       and kind of the return value is the same as that of the arguments.
       The returned value has the same sign as A and a magnitude less than
       the magnitude of P. (As a GNU extension, kind is the largest kind
--- 15999,16014 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MOD(A, P)’
  
  _Arguments_:
!      A           Shall be a scalar of type ‘INTEGER’ or ‘REAL’.
       P           Shall be a scalar of the same type and kind as A
                   and not equal to zero.  (As a GNU extension,
                   arguments of different kinds are permitted.)
  
  _Return value_:
!      The return value is the result of ‘A - (INT(A/P) * P)’.  The type
       and kind of the return value is the same as that of the arguments.
       The returned value has the same sign as A and a magnitude less than
       the magnitude of P. (As a GNU extension, kind is the largest kind
*************** _Example_:
*** 16035,16047 ****
  _Specific names_:
       Name           Arguments          Return type    Standard
       ------------------------------------------------------------------------
!      'MOD(A,P)'     'INTEGER A,P'      'INTEGER'      Fortran 77 and later
!      'AMOD(A,P)'    'REAL(4) A,P'      'REAL(4)'      Fortran 77 and later
!      'DMOD(A,P)'    'REAL(8) A,P'      'REAL(8)'      Fortran 77 and later
!      'BMOD(A,P)'    'INTEGER(1) A,P'   'INTEGER(1)'   GNU extension
!      'IMOD(A,P)'    'INTEGER(2) A,P'   'INTEGER(2)'   GNU extension
!      'JMOD(A,P)'    'INTEGER(4) A,P'   'INTEGER(4)'   GNU extension
!      'KMOD(A,P)'    'INTEGER(8) A,P'   'INTEGER(8)'   GNU extension
  
  _See also_:
       *note MODULO::
--- 16035,16047 ----
  _Specific names_:
       Name           Arguments          Return type    Standard
       ------------------------------------------------------------------------
!      ‘MOD(A,P)’     ‘INTEGER A,P’      ‘INTEGER’      Fortran 77 and later
!      ‘AMOD(A,P)’    ‘REAL(4) A,P’      ‘REAL(4)’      Fortran 77 and later
!      ‘DMOD(A,P)’    ‘REAL(8) A,P’      ‘REAL(8)’      Fortran 77 and later
!      ‘BMOD(A,P)’    ‘INTEGER(1) A,P’   ‘INTEGER(1)’   GNU extension
!      ‘IMOD(A,P)’    ‘INTEGER(2) A,P’   ‘INTEGER(2)’   GNU extension
!      ‘JMOD(A,P)’    ‘INTEGER(4) A,P’   ‘INTEGER(4)’   GNU extension
!      ‘KMOD(A,P)’    ‘INTEGER(8) A,P’   ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note MODULO::
*************** _See also_:
*** 16049,16059 ****
  
  File: gfortran.info,  Node: MODULO,  Next: MOVE_ALLOC,  Prev: MOD,  Up: Intrinsic Procedures
  
! 8.201 'MODULO' -- Modulo function
  =================================
  
  _Description_:
!      'MODULO(A,P)' computes the A modulo P.
  
  _Standard_:
       Fortran 95 and later
--- 16049,16059 ----
  
  File: gfortran.info,  Node: MODULO,  Next: MOVE_ALLOC,  Prev: MOD,  Up: Intrinsic Procedures
  
! 8.201 ‘MODULO’ -- Modulo function
  =================================
  
  _Description_:
!      ‘MODULO(A,P)’ computes the A modulo P.
  
  _Standard_:
       Fortran 95 and later
*************** _Class_:
*** 16062,16071 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = MODULO(A, P)'
  
  _Arguments_:
!      A           Shall be a scalar of type 'INTEGER' or 'REAL'.
       P           Shall be a scalar of the same type and kind as
                   A.  It shall not be zero.  (As a GNU extension,
                   arguments of different kinds are permitted.)
--- 16062,16071 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = MODULO(A, P)’
  
  _Arguments_:
!      A           Shall be a scalar of type ‘INTEGER’ or ‘REAL’.
       P           Shall be a scalar of the same type and kind as
                   A.  It shall not be zero.  (As a GNU extension,
                   arguments of different kinds are permitted.)
*************** _Arguments_:
*** 16073,16083 ****
  _Return value_:
       The type and kind of the result are those of the arguments.  (As a
       GNU extension, kind is the largest kind of the actual arguments.)
!      If A and P are of type 'INTEGER':
!           'MODULO(A,P)' has the value R such that 'A=Q*P+R', where Q is
            an integer and R is between 0 (inclusive) and P (exclusive).
!      If A and P are of type 'REAL':
!           'MODULO(A,P)' has the value of 'A - FLOOR (A / P) * P'.
       The returned value has the same sign as P and a magnitude less than
       the magnitude of P.
  
--- 16073,16083 ----
  _Return value_:
       The type and kind of the result are those of the arguments.  (As a
       GNU extension, kind is the largest kind of the actual arguments.)
!      If A and P are of type ‘INTEGER’:
!           ‘MODULO(A,P)’ has the value R such that ‘A=Q*P+R’, where Q is
            an integer and R is between 0 (inclusive) and P (exclusive).
!      If A and P are of type ‘REAL’:
!           ‘MODULO(A,P)’ has the value of ‘A - FLOOR (A / P) * P’.
       The returned value has the same sign as P and a magnitude less than
       the magnitude of P.
  
*************** _See also_:
*** 16099,16109 ****
  
  File: gfortran.info,  Node: MOVE_ALLOC,  Next: MVBITS,  Prev: MODULO,  Up: Intrinsic Procedures
  
! 8.202 'MOVE_ALLOC' -- Move allocation from one object to another
  ================================================================
  
  _Description_:
!      'MOVE_ALLOC(FROM, TO)' moves the allocation from FROM to TO.  FROM
       will become deallocated in the process.
  
  _Standard_:
--- 16099,16109 ----
  
  File: gfortran.info,  Node: MOVE_ALLOC,  Next: MVBITS,  Prev: MODULO,  Up: Intrinsic Procedures
  
! 8.202 ‘MOVE_ALLOC’ -- Move allocation from one object to another
  ================================================================
  
  _Description_:
!      ‘MOVE_ALLOC(FROM, TO)’ moves the allocation from FROM to TO.  FROM
       will become deallocated in the process.
  
  _Standard_:
*************** _Class_:
*** 16113,16124 ****
       Pure subroutine
  
  _Syntax_:
!      'CALL MOVE_ALLOC(FROM, TO)'
  
  _Arguments_:
!      FROM        'ALLOCATABLE', 'INTENT(INOUT)', may be of any
                   type and kind.
!      TO          'ALLOCATABLE', 'INTENT(OUT)', shall be of the
                   same type, kind and rank as FROM.
  
  _Return value_:
--- 16113,16124 ----
       Pure subroutine
  
  _Syntax_:
!      ‘CALL MOVE_ALLOC(FROM, TO)’
  
  _Arguments_:
!      FROM        ‘ALLOCATABLE’, ‘INTENT(INOUT)’, may be of any
                   type and kind.
!      TO          ‘ALLOCATABLE’, ‘INTENT(OUT)’, shall be of the
                   same type, kind and rank as FROM.
  
  _Return value_:
*************** _Example_:
*** 16138,16152 ****
  
  File: gfortran.info,  Node: MVBITS,  Next: NEAREST,  Prev: MOVE_ALLOC,  Up: Intrinsic Procedures
  
! 8.203 'MVBITS' -- Move bits from one integer to another
  =======================================================
  
  _Description_:
!      Moves LEN bits from positions FROMPOS through 'FROMPOS+LEN-1' of
!      FROM to positions TOPOS through 'TOPOS+LEN-1' of TO.  The portion
       of argument TO not affected by the movement of bits is unchanged.
!      The values of 'FROMPOS+LEN-1' and 'TOPOS+LEN-1' must be less than
!      'BIT_SIZE(FROM)'.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
--- 16138,16152 ----
  
  File: gfortran.info,  Node: MVBITS,  Next: NEAREST,  Prev: MOVE_ALLOC,  Up: Intrinsic Procedures
  
! 8.203 ‘MVBITS’ -- Move bits from one integer to another
  =======================================================
  
  _Description_:
!      Moves LEN bits from positions FROMPOS through ‘FROMPOS+LEN-1’ of
!      FROM to positions TOPOS through ‘TOPOS+LEN-1’ of TO.  The portion
       of argument TO not affected by the movement of bits is unchanged.
!      The values of ‘FROMPOS+LEN-1’ and ‘TOPOS+LEN-1’ must be less than
!      ‘BIT_SIZE(FROM)’.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
*************** _Class_:
*** 16155,16178 ****
       Elemental subroutine
  
  _Syntax_:
!      'CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)'
  
  _Arguments_:
!      FROM        The type shall be 'INTEGER'.
!      FROMPOS     The type shall be 'INTEGER'.
!      LEN         The type shall be 'INTEGER'.
!      TO          The type shall be 'INTEGER', of the same kind as
                   FROM.
!      TOPOS       The type shall be 'INTEGER'.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'MVBITS(A)'    'INTEGER A'       'INTEGER'      Fortran 90 and later
!      'BMVBITS(A)'   'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'IMVBITS(A)'   'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JMVBITS(A)'   'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KMVBITS(A)'   'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IBCLR::,
--- 16155,16178 ----
       Elemental subroutine
  
  _Syntax_:
!      ‘CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)’
  
  _Arguments_:
!      FROM        The type shall be ‘INTEGER’.
!      FROMPOS     The type shall be ‘INTEGER’.
!      LEN         The type shall be ‘INTEGER’.
!      TO          The type shall be ‘INTEGER’, of the same kind as
                   FROM.
!      TOPOS       The type shall be ‘INTEGER’.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘MVBITS(A)’    ‘INTEGER A’       ‘INTEGER’      Fortran 90 and later
!      ‘BMVBITS(A)’   ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘IMVBITS(A)’   ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JMVBITS(A)’   ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KMVBITS(A)’   ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IBCLR::,
*************** _See also_:
*** 16185,16196 ****
  
  File: gfortran.info,  Node: NEAREST,  Next: NEW_LINE,  Prev: MVBITS,  Up: Intrinsic Procedures
  
! 8.204 'NEAREST' -- Nearest representable number
  ===============================================
  
  _Description_:
!      'NEAREST(X, S)' returns the processor-representable number nearest
!      to 'X' in the direction indicated by the sign of 'S'.
  
  _Standard_:
       Fortran 90 and later
--- 16185,16196 ----
  
  File: gfortran.info,  Node: NEAREST,  Next: NEW_LINE,  Prev: MVBITS,  Up: Intrinsic Procedures
  
! 8.204 ‘NEAREST’ -- Nearest representable number
  ===============================================
  
  _Description_:
!      ‘NEAREST(X, S)’ returns the processor-representable number nearest
!      to ‘X’ in the direction indicated by the sign of ‘S’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 16199,16215 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = NEAREST(X, S)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
!      S           Shall be of type 'REAL' and not equal to zero.
  
  _Return value_:
!      The return value is of the same type as 'X'.  If 'S' is positive,
!      'NEAREST' returns the processor-representable number greater than
!      'X' and nearest to it.  If 'S' is negative, 'NEAREST' returns the
!      processor-representable number smaller than 'X' and nearest to it.
  
  _Example_:
            program test_nearest
--- 16199,16215 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = NEAREST(X, S)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
!      S           Shall be of type ‘REAL’ and not equal to zero.
  
  _Return value_:
!      The return value is of the same type as ‘X’.  If ‘S’ is positive,
!      ‘NEAREST’ returns the processor-representable number greater than
!      ‘X’ and nearest to it.  If ‘S’ is negative, ‘NEAREST’ returns the
!      processor-representable number smaller than ‘X’ and nearest to it.
  
  _Example_:
            program test_nearest
*************** _Example_:
*** 16222,16232 ****
  
  File: gfortran.info,  Node: NEW_LINE,  Next: NINT,  Prev: NEAREST,  Up: Intrinsic Procedures
  
! 8.205 'NEW_LINE' -- New line character
  ======================================
  
  _Description_:
!      'NEW_LINE(C)' returns the new-line character.
  
  _Standard_:
       Fortran 2003 and later
--- 16222,16232 ----
  
  File: gfortran.info,  Node: NEW_LINE,  Next: NINT,  Prev: NEAREST,  Up: Intrinsic Procedures
  
! 8.205 ‘NEW_LINE’ -- New line character
  ======================================
  
  _Description_:
!      ‘NEW_LINE(C)’ returns the new-line character.
  
  _Standard_:
       Fortran 2003 and later
*************** _Class_:
*** 16235,16245 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = NEW_LINE(C)'
  
  _Arguments_:
       C           The argument shall be a scalar or array of the
!                  type 'CHARACTER'.
  
  _Return value_:
       Returns a CHARACTER scalar of length one with the new-line
--- 16235,16245 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = NEW_LINE(C)’
  
  _Arguments_:
       C           The argument shall be a scalar or array of the
!                  type ‘CHARACTER’.
  
  _Return value_:
       Returns a CHARACTER scalar of length one with the new-line
*************** _Example_:
*** 16254,16264 ****
  
  File: gfortran.info,  Node: NINT,  Next: NORM2,  Prev: NEW_LINE,  Up: Intrinsic Procedures
  
! 8.206 'NINT' -- Nearest whole number
  ====================================
  
  _Description_:
!      'NINT(A)' rounds its argument to the nearest whole number.
  
  _Standard_:
       Fortran 77 and later, with KIND argument Fortran 90 and later
--- 16254,16264 ----
  
  File: gfortran.info,  Node: NINT,  Next: NORM2,  Prev: NEW_LINE,  Up: Intrinsic Procedures
  
! 8.206 ‘NINT’ -- Nearest whole number
  ====================================
  
  _Description_:
!      ‘NINT(A)’ rounds its argument to the nearest whole number.
  
  _Standard_:
       Fortran 77 and later, with KIND argument Fortran 90 and later
*************** _Class_:
*** 16267,16284 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = NINT(A [, KIND])'
  
  _Arguments_:
!      A           The type of the argument shall be 'REAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
       Returns A with the fractional portion of its magnitude eliminated
       by rounding to the nearest whole number and with its sign
!      preserved, converted to an 'INTEGER' of the default kind.
  
  _Example_:
            program test_nint
--- 16267,16284 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = NINT(A [, KIND])’
  
  _Arguments_:
!      A           The type of the argument shall be ‘REAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
       Returns A with the fractional portion of its magnitude eliminated
       by rounding to the nearest whole number and with its sign
!      preserved, converted to an ‘INTEGER’ of the default kind.
  
  _Example_:
            program test_nint
*************** _Example_:
*** 16292,16299 ****
  _Specific names_:
       Name           Argument          Return Type    Standard
       -------------------------------------------------------------------------
!      'NINT(A)'      'REAL(4) A'       'INTEGER'      Fortran 77 and later
!      'IDNINT(A)'    'REAL(8) A'       'INTEGER'      Fortran 77 and later
  
  _See also_:
       *note CEILING::,
--- 16292,16299 ----
  _Specific names_:
       Name           Argument          Return Type    Standard
       -------------------------------------------------------------------------
!      ‘NINT(A)’      ‘REAL(4) A’       ‘INTEGER’      Fortran 77 and later
!      ‘IDNINT(A)’    ‘REAL(8) A’       ‘INTEGER’      Fortran 77 and later
  
  _See also_:
       *note CEILING::,
*************** _See also_:
*** 16302,16308 ****
  
  File: gfortran.info,  Node: NORM2,  Next: NOT,  Prev: NINT,  Up: Intrinsic Procedures
  
! 8.207 'NORM2' -- Euclidean vector norms
  =======================================
  
  _Description_:
--- 16302,16308 ----
  
  File: gfortran.info,  Node: NORM2,  Next: NOT,  Prev: NINT,  Up: Intrinsic Procedures
  
! 8.207 ‘NORM2’ -- Euclidean vector norms
  =======================================
  
  _Description_:
*************** _Class_:
*** 16316,16326 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = NORM2(ARRAY[, DIM])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'REAL'
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
  
--- 16316,16326 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = NORM2(ARRAY[, DIM])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘REAL’
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
  
*************** _Example_:
*** 16341,16351 ****
  
  File: gfortran.info,  Node: NOT,  Next: NULL,  Prev: NORM2,  Up: Intrinsic Procedures
  
! 8.208 'NOT' -- Logical negation
  ===============================
  
  _Description_:
!      'NOT' returns the bitwise Boolean inverse of I.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
--- 16341,16351 ----
  
  File: gfortran.info,  Node: NOT,  Next: NULL,  Prev: NORM2,  Up: Intrinsic Procedures
  
! 8.208 ‘NOT’ -- Logical negation
  ===============================
  
  _Description_:
!      ‘NOT’ returns the bitwise Boolean inverse of I.
  
  _Standard_:
       Fortran 90 and later, has overloads that are GNU extensions
*************** _Class_:
*** 16354,16375 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = NOT(I)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
  
  _Return value_:
!      The return type is 'INTEGER', of the same kind as the argument.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'NOT(A)'       'INTEGER A'       'INTEGER'      Fortran 95 and later
!      'BNOT(A)'      'INTEGER(1) A'    'INTEGER(1)'   GNU extension
!      'INOT(A)'      'INTEGER(2) A'    'INTEGER(2)'   GNU extension
!      'JNOT(A)'      'INTEGER(4) A'    'INTEGER(4)'   GNU extension
!      'KNOT(A)'      'INTEGER(8) A'    'INTEGER(8)'   GNU extension
  
  _See also_:
       *note IAND::,
--- 16354,16375 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = NOT(I)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return type is ‘INTEGER’, of the same kind as the argument.
  
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘NOT(A)’       ‘INTEGER A’       ‘INTEGER’      Fortran 95 and later
!      ‘BNOT(A)’      ‘INTEGER(1) A’    ‘INTEGER(1)’   GNU extension
!      ‘INOT(A)’      ‘INTEGER(2) A’    ‘INTEGER(2)’   GNU extension
!      ‘JNOT(A)’      ‘INTEGER(4) A’    ‘INTEGER(4)’   GNU extension
!      ‘KNOT(A)’      ‘INTEGER(8) A’    ‘INTEGER(8)’   GNU extension
  
  _See also_:
       *note IAND::,
*************** _See also_:
*** 16382,16388 ****
  
  File: gfortran.info,  Node: NULL,  Next: NUM_IMAGES,  Prev: NOT,  Up: Intrinsic Procedures
  
! 8.209 'NULL' -- Function that returns an disassociated pointer
  ==============================================================
  
  _Description_:
--- 16382,16388 ----
  
  File: gfortran.info,  Node: NULL,  Next: NUM_IMAGES,  Prev: NOT,  Up: Intrinsic Procedures
  
! 8.209 ‘NULL’ -- Function that returns an disassociated pointer
  ==============================================================
  
  _Description_:
*************** _Class_:
*** 16401,16407 ****
       Transformational function
  
  _Syntax_:
!      'PTR => NULL([MOLD])'
  
  _Arguments_:
       MOLD        (Optional) shall be a pointer of any association
--- 16401,16407 ----
       Transformational function
  
  _Syntax_:
!      ‘PTR => NULL([MOLD])’
  
  _Arguments_:
       MOLD        (Optional) shall be a pointer of any association
*************** _See also_:
*** 16419,16425 ****
  
  File: gfortran.info,  Node: NUM_IMAGES,  Next: OR,  Prev: NULL,  Up: Intrinsic Procedures
  
! 8.210 'NUM_IMAGES' -- Function that returns the number of images
  ================================================================
  
  _Description_:
--- 16419,16425 ----
  
  File: gfortran.info,  Node: NUM_IMAGES,  Next: OR,  Prev: NULL,  Up: Intrinsic Procedures
  
! 8.210 ‘NUM_IMAGES’ -- Function that returns the number of images
  ================================================================
  
  _Description_:
*************** _Class_:
*** 16433,16439 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = NUM_IMAGES(DISTANCE, FAILED)'
  
  _Arguments_:
       DISTANCE    (optional, intent(in)) Nonnegative scalar
--- 16433,16439 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = NUM_IMAGES(DISTANCE, FAILED)’
  
  _Arguments_:
       DISTANCE    (optional, intent(in)) Nonnegative scalar
*************** _Return value_:
*** 16448,16454 ****
       distance of DISTANCE from the invoking team.  If DISTANCE is larger
       than the distance to the initial team, the number of images of the
       initial team is returned.  If FAILED is not present the total
!      number of images is returned; if it has the value '.TRUE.', the
       number of failed images is returned, otherwise, the number of
       images which do have not the failed status.
  
--- 16448,16454 ----
       distance of DISTANCE from the invoking team.  If DISTANCE is larger
       than the distance to the initial team, the number of images of the
       initial team is returned.  If FAILED is not present the total
!      number of images is returned; if it has the value ‘.TRUE.’, the
       number of failed images is returned, otherwise, the number of
       images which do have not the failed status.
  
*************** _See also_:
*** 16470,16480 ****
  
  File: gfortran.info,  Node: OR,  Next: PACK,  Prev: NUM_IMAGES,  Up: Intrinsic Procedures
  
! 8.211 'OR' -- Bitwise logical OR
  ================================
  
  _Description_:
!      Bitwise logical 'OR'.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  For integer arguments, programmers should consider
--- 16470,16480 ----
  
  File: gfortran.info,  Node: OR,  Next: PACK,  Prev: NUM_IMAGES,  Up: Intrinsic Procedures
  
! 8.211 ‘OR’ -- Bitwise logical OR
  ================================
  
  _Description_:
!      Bitwise logical ‘OR’.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  For integer arguments, programmers should consider
*************** _Class_:
*** 16488,16510 ****
       Function
  
  _Syntax_:
!      'RESULT = OR(I, J)'
  
  _Arguments_:
!      I           The type shall be either a scalar 'INTEGER' type
!                  or a scalar 'LOGICAL' type or a
                   boz-literal-constant.
       J           The type shall be the same as the type of I or a
                   boz-literal-constant.  I and J shall not both be
                   boz-literal-constants.  If either I and J is a
                   boz-literal-constant, then the other argument
!                  must be a scalar 'INTEGER'.
  
  _Return value_:
!      The return type is either a scalar 'INTEGER' or a scalar 'LOGICAL'.
       If the kind type parameters differ, then the smaller kind type is
       implicitly converted to larger kind, and the return has the larger
!      kind.  A boz-literal-constant is converted to an 'INTEGER' with the
       kind type parameter of the other argument as-if a call to *note
       INT:: occurred.
  
--- 16488,16510 ----
       Function
  
  _Syntax_:
!      ‘RESULT = OR(I, J)’
  
  _Arguments_:
!      I           The type shall be either a scalar ‘INTEGER’ type
!                  or a scalar ‘LOGICAL’ type or a
                   boz-literal-constant.
       J           The type shall be the same as the type of I or a
                   boz-literal-constant.  I and J shall not both be
                   boz-literal-constants.  If either I and J is a
                   boz-literal-constant, then the other argument
!                  must be a scalar ‘INTEGER’.
  
  _Return value_:
!      The return type is either a scalar ‘INTEGER’ or a scalar ‘LOGICAL’.
       If the kind type parameters differ, then the smaller kind type is
       implicitly converted to larger kind, and the return has the larger
!      kind.  A boz-literal-constant is converted to an ‘INTEGER’ with the
       kind type parameter of the other argument as-if a call to *note
       INT:: occurred.
  
*************** _See also_:
*** 16525,16538 ****
  
  File: gfortran.info,  Node: PACK,  Next: PARITY,  Prev: OR,  Up: Intrinsic Procedures
  
! 8.212 'PACK' -- Pack an array into an array of rank one
  =======================================================
  
  _Description_:
       Stores the elements of ARRAY in an array of rank one.
  
       The beginning of the resulting array is made up of elements whose
!      MASK equals 'TRUE'.  Afterwards, positions are filled with elements
       taken from VECTOR.
  
  _Standard_:
--- 16525,16538 ----
  
  File: gfortran.info,  Node: PACK,  Next: PARITY,  Prev: OR,  Up: Intrinsic Procedures
  
! 8.212 ‘PACK’ -- Pack an array into an array of rank one
  =======================================================
  
  _Description_:
       Stores the elements of ARRAY in an array of rank one.
  
       The beginning of the resulting array is made up of elements whose
!      MASK equals ‘TRUE’.  Afterwards, positions are filled with elements
       taken from VECTOR.
  
  _Standard_:
*************** _Class_:
*** 16542,16554 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = PACK(ARRAY, MASK[,VECTOR])'
  
  _Arguments_:
       ARRAY       Shall be an array of any type.
!      MASK        Shall be an array of type 'LOGICAL' and of the
                   same size as ARRAY.  Alternatively, it may be a
!                  'LOGICAL' scalar.
       VECTOR      (Optional) shall be an array of the same type as
                   ARRAY and of rank one.  If present, the number
                   of elements in VECTOR shall be equal to or
--- 16542,16554 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = PACK(ARRAY, MASK[,VECTOR])’
  
  _Arguments_:
       ARRAY       Shall be an array of any type.
!      MASK        Shall be an array of type ‘LOGICAL’ and of the
                   same size as ARRAY.  Alternatively, it may be a
!                  ‘LOGICAL’ scalar.
       VECTOR      (Optional) shall be an array of the same type as
                   ARRAY and of rank one.  If present, the number
                   of elements in VECTOR shall be equal to or
*************** _Arguments_:
*** 16560,16566 ****
  _Return value_:
       The result is an array of rank one and the same type as that of
       ARRAY.  If VECTOR is present, the result size is that of VECTOR,
!      the number of 'TRUE' values in MASK otherwise.
  
  _Example_:
       Gathering nonzero elements from an array:
--- 16560,16566 ----
  _Return value_:
       The result is an array of rank one and the same type as that of
       ARRAY.  If VECTOR is present, the result size is that of VECTOR,
!      the number of ‘TRUE’ values in MASK otherwise.
  
  _Example_:
       Gathering nonzero elements from an array:
*************** _See also_:
*** 16585,16595 ****
  
  File: gfortran.info,  Node: PARITY,  Next: PERROR,  Prev: PACK,  Up: Intrinsic Procedures
  
! 8.213 'PARITY' -- Reduction with exclusive OR
  =============================================
  
  _Description_:
!      Calculates the parity, i.e.  the reduction using '.XOR.', of MASK
       along dimension DIM.
  
  _Standard_:
--- 16585,16595 ----
  
  File: gfortran.info,  Node: PARITY,  Next: PERROR,  Prev: PACK,  Up: Intrinsic Procedures
  
! 8.213 ‘PARITY’ -- Reduction with exclusive OR
  =============================================
  
  _Description_:
!      Calculates the parity, i.e.  the reduction using ‘.XOR.’, of MASK
       along dimension DIM.
  
  _Standard_:
*************** _Class_:
*** 16599,16609 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = PARITY(MASK[, DIM])'
  
  _Arguments_:
!      MASK        Shall be an array of type 'LOGICAL'
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of MASK.
  
--- 16599,16609 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = PARITY(MASK[, DIM])’
  
  _Arguments_:
!      MASK        Shall be an array of type ‘LOGICAL’
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of MASK.
  
*************** _Return value_:
*** 16611,16617 ****
       The result is of the same type as MASK.
  
       If DIM is absent, a scalar with the parity of all elements in MASK
!      is returned, i.e.  true if an odd number of elements is '.true.'
       and false otherwise.  If DIM is present, an array of rank n-1,
       where n equals the rank of ARRAY, and a shape similar to that of
       MASK with dimension DIM dropped is returned.
--- 16611,16617 ----
       The result is of the same type as MASK.
  
       If DIM is absent, a scalar with the parity of all elements in MASK
!      is returned, i.e.  true if an odd number of elements is ‘.true.’
       and false otherwise.  If DIM is present, an array of rank n-1,
       where n equals the rank of ARRAY, and a shape similar to that of
       MASK with dimension DIM dropped is returned.
*************** _Example_:
*** 16625,16637 ****
  
  File: gfortran.info,  Node: PERROR,  Next: POPCNT,  Prev: PARITY,  Up: Intrinsic Procedures
  
! 8.214 'PERROR' -- Print system error message
  ============================================
  
  _Description_:
!      Prints (on the C 'stderr' stream) a newline-terminated error
       message corresponding to the last system error.  This is prefixed
!      by STRING, a colon and a space.  See 'perror(3)'.
  
  _Standard_:
       GNU extension
--- 16625,16637 ----
  
  File: gfortran.info,  Node: PERROR,  Next: POPCNT,  Prev: PARITY,  Up: Intrinsic Procedures
  
! 8.214 ‘PERROR’ -- Print system error message
  ============================================
  
  _Description_:
!      Prints (on the C ‘stderr’ stream) a newline-terminated error
       message corresponding to the last system error.  This is prefixed
!      by STRING, a colon and a space.  See ‘perror(3)’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 16640,16649 ****
       Subroutine
  
  _Syntax_:
!      'CALL PERROR(STRING)'
  
  _Arguments_:
!      STRING      A scalar of type 'CHARACTER' and of the default
                   kind.
  
  _See also_:
--- 16640,16649 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL PERROR(STRING)’
  
  _Arguments_:
!      STRING      A scalar of type ‘CHARACTER’ and of the default
                   kind.
  
  _See also_:
*************** _See also_:
*** 16652,16663 ****
  
  File: gfortran.info,  Node: POPCNT,  Next: POPPAR,  Prev: PERROR,  Up: Intrinsic Procedures
  
! 8.215 'POPCNT' -- Number of bits set
  ====================================
  
  _Description_:
!      'POPCNT(I)' returns the number of bits set ('1' bits) in the binary
!      representation of 'I'.
  
  _Standard_:
       Fortran 2008 and later
--- 16652,16663 ----
  
  File: gfortran.info,  Node: POPCNT,  Next: POPPAR,  Prev: PERROR,  Up: Intrinsic Procedures
  
! 8.215 ‘POPCNT’ -- Number of bits set
  ====================================
  
  _Description_:
!      ‘POPCNT(I)’ returns the number of bits set ('1' bits) in the binary
!      representation of ‘I’.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 16666,16678 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = POPCNT(I)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _Example_:
--- 16666,16678 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = POPCNT(I)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _Example_:
*************** _See also_:
*** 16689,16701 ****
  
  File: gfortran.info,  Node: POPPAR,  Next: PRECISION,  Prev: POPCNT,  Up: Intrinsic Procedures
  
! 8.216 'POPPAR' -- Parity of the number of bits set
  ==================================================
  
  _Description_:
!      'POPPAR(I)' returns parity of the integer 'I', i.e.  the parity of
       the number of bits set ('1' bits) in the binary representation of
!      'I'.  It is equal to 0 if 'I' has an even number of bits set, and 1
       for an odd number of '1' bits.
  
  _Standard_:
--- 16689,16701 ----
  
  File: gfortran.info,  Node: POPPAR,  Next: PRECISION,  Prev: POPCNT,  Up: Intrinsic Procedures
  
! 8.216 ‘POPPAR’ -- Parity of the number of bits set
  ==================================================
  
  _Description_:
!      ‘POPPAR(I)’ returns parity of the integer ‘I’, i.e.  the parity of
       the number of bits set ('1' bits) in the binary representation of
!      ‘I’.  It is equal to 0 if ‘I’ has an even number of bits set, and 1
       for an odd number of '1' bits.
  
  _Standard_:
*************** _Class_:
*** 16705,16717 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = POPPAR(I)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _Example_:
--- 16705,16717 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = POPPAR(I)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _Example_:
*************** _See also_:
*** 16728,16739 ****
  
  File: gfortran.info,  Node: PRECISION,  Next: PRESENT,  Prev: POPPAR,  Up: Intrinsic Procedures
  
! 8.217 'PRECISION' -- Decimal precision of a real kind
  =====================================================
  
  _Description_:
!      'PRECISION(X)' returns the decimal precision in the model of the
!      type of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 16728,16739 ----
  
  File: gfortran.info,  Node: PRECISION,  Next: PRESENT,  Prev: POPPAR,  Up: Intrinsic Procedures
  
! 8.217 ‘PRECISION’ -- Decimal precision of a real kind
  =====================================================
  
  _Description_:
!      ‘PRECISION(X)’ returns the decimal precision in the model of the
!      type of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 16742,16755 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = PRECISION(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL' or 'COMPLEX'.  It may be
                   scalar or valued.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _Example_:
--- 16742,16755 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = PRECISION(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’ or ‘COMPLEX’.  It may be
                   scalar or valued.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _Example_:
*************** _See also_:
*** 16767,16773 ****
  
  File: gfortran.info,  Node: PRESENT,  Next: PRODUCT,  Prev: PRECISION,  Up: Intrinsic Procedures
  
! 8.218 'PRESENT' -- Determine whether an optional dummy argument is specified
  ============================================================================
  
  _Description_:
--- 16767,16773 ----
  
  File: gfortran.info,  Node: PRESENT,  Next: PRODUCT,  Prev: PRECISION,  Up: Intrinsic Procedures
  
! 8.218 ‘PRESENT’ -- Determine whether an optional dummy argument is specified
  ============================================================================
  
  _Description_:
*************** _Class_:
*** 16780,16786 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = PRESENT(A)'
  
  _Arguments_:
       A           May be of any type and may be a pointer, scalar
--- 16780,16786 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = PRESENT(A)’
  
  _Arguments_:
       A           May be of any type and may be a pointer, scalar
*************** _Arguments_:
*** 16790,16797 ****
                   function.
  
  _Return value_:
!      Returns either 'TRUE' if the optional argument A is present, or
!      'FALSE' otherwise.
  
  _Example_:
            PROGRAM test_present
--- 16790,16797 ----
                   function.
  
  _Return value_:
!      Returns either ‘TRUE’ if the optional argument A is present, or
!      ‘FALSE’ otherwise.
  
  _Example_:
            PROGRAM test_present
*************** _Example_:
*** 16806,16817 ****
  
  File: gfortran.info,  Node: PRODUCT,  Next: RADIX,  Prev: PRESENT,  Up: Intrinsic Procedures
  
! 8.219 'PRODUCT' -- Product of array elements
  ============================================
  
  _Description_:
       Multiplies the elements of ARRAY along dimension DIM if the
!      corresponding element in MASK is 'TRUE'.
  
  _Standard_:
       Fortran 90 and later
--- 16806,16817 ----
  
  File: gfortran.info,  Node: PRODUCT,  Next: RADIX,  Prev: PRESENT,  Up: Intrinsic Procedures
  
! 8.219 ‘PRODUCT’ -- Product of array elements
  ============================================
  
  _Description_:
       Multiplies the elements of ARRAY along dimension DIM if the
!      corresponding element in MASK is ‘TRUE’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 16820,16835 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = PRODUCT(ARRAY[, MASK])'
!      'RESULT = PRODUCT(ARRAY, DIM[, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER', 'REAL' or
!                  'COMPLEX'.
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type 'LOGICAL' and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
--- 16820,16835 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = PRODUCT(ARRAY[, MASK])’
!      ‘RESULT = PRODUCT(ARRAY, DIM[, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’, ‘REAL’ or
!                  ‘COMPLEX’.
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type ‘LOGICAL’ and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
*************** _See also_:
*** 16854,16864 ****
  
  File: gfortran.info,  Node: RADIX,  Next: RAN,  Prev: PRODUCT,  Up: Intrinsic Procedures
  
! 8.220 'RADIX' -- Base of a model number
  =======================================
  
  _Description_:
!      'RADIX(X)' returns the base of the model representing the entity X.
  
  _Standard_:
       Fortran 90 and later
--- 16854,16864 ----
  
  File: gfortran.info,  Node: RADIX,  Next: RAN,  Prev: PRODUCT,  Up: Intrinsic Procedures
  
! 8.220 ‘RADIX’ -- Base of a model number
  =======================================
  
  _Description_:
!      ‘RADIX(X)’ returns the base of the model representing the entity X.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 16867,16879 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = RADIX(X)'
  
  _Arguments_:
!      X           Shall be of type 'INTEGER' or 'REAL'
  
  _Return value_:
!      The return value is a scalar of type 'INTEGER' and of the default
       integer kind.
  
  _Example_:
--- 16867,16879 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = RADIX(X)’
  
  _Arguments_:
!      X           Shall be of type ‘INTEGER’ or ‘REAL’
  
  _Return value_:
!      The return value is a scalar of type ‘INTEGER’ and of the default
       integer kind.
  
  _Example_:
*************** _See also_:
*** 16887,16898 ****
  
  File: gfortran.info,  Node: RAN,  Next: RAND,  Prev: RADIX,  Up: Intrinsic Procedures
  
! 8.221 'RAN' -- Real pseudo-random number
  ========================================
  
  _Description_:
!      For compatibility with HP FORTRAN 77/iX, the 'RAN' intrinsic is
!      provided as an alias for 'RAND'.  See *note RAND:: for complete
       documentation.
  
  _Standard_:
--- 16887,16898 ----
  
  File: gfortran.info,  Node: RAN,  Next: RAND,  Prev: RADIX,  Up: Intrinsic Procedures
  
! 8.221 ‘RAN’ -- Real pseudo-random number
  ========================================
  
  _Description_:
!      For compatibility with HP FORTRAN 77/iX, the ‘RAN’ intrinsic is
!      provided as an alias for ‘RAND’.  See *note RAND:: for complete
       documentation.
  
  _Standard_:
*************** _See also_:
*** 16908,16926 ****
  
  File: gfortran.info,  Node: RAND,  Next: RANDOM_INIT,  Prev: RAN,  Up: Intrinsic Procedures
  
! 8.222 'RAND' -- Real pseudo-random number
  =========================================
  
  _Description_:
!      'RAND(FLAG)' returns a pseudo-random number from a uniform
       distribution between 0 and 1.  If FLAG is 0, the next number in the
       current sequence is returned; if FLAG is 1, the generator is
!      restarted by 'CALL SRAND(0)'; if FLAG has any other value, it is
!      used as a new seed with 'SRAND'.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  It implements a simple modulo generator as
!      provided by 'g77'.  For new code, one should consider the use of
       *note RANDOM_NUMBER:: as it implements a superior algorithm.
  
  _Standard_:
--- 16908,16926 ----
  
  File: gfortran.info,  Node: RAND,  Next: RANDOM_INIT,  Prev: RAN,  Up: Intrinsic Procedures
  
! 8.222 ‘RAND’ -- Real pseudo-random number
  =========================================
  
  _Description_:
!      ‘RAND(FLAG)’ returns a pseudo-random number from a uniform
       distribution between 0 and 1.  If FLAG is 0, the next number in the
       current sequence is returned; if FLAG is 1, the generator is
!      restarted by ‘CALL SRAND(0)’; if FLAG has any other value, it is
!      used as a new seed with ‘SRAND’.
  
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  It implements a simple modulo generator as
!      provided by ‘g77’.  For new code, one should consider the use of
       *note RANDOM_NUMBER:: as it implements a superior algorithm.
  
  _Standard_:
*************** _Class_:
*** 16930,16942 ****
       Function
  
  _Syntax_:
!      'RESULT = RAND(I)'
  
  _Arguments_:
!      I           Shall be a scalar 'INTEGER' of kind 4.
  
  _Return value_:
!      The return value is of 'REAL' type and the default kind.
  
  _Example_:
            program test_rand
--- 16930,16942 ----
       Function
  
  _Syntax_:
!      ‘RESULT = RAND(I)’
  
  _Arguments_:
!      I           Shall be a scalar ‘INTEGER’ of kind 4.
  
  _Return value_:
!      The return value is of ‘REAL’ type and the default kind.
  
  _Example_:
            program test_rand
*************** _See also_:
*** 16954,16965 ****
  
  File: gfortran.info,  Node: RANDOM_INIT,  Next: RANDOM_NUMBER,  Prev: RAND,  Up: Intrinsic Procedures
  
! 8.223 'RANDOM_INIT' -- Initialize a pseudo-random number generator
  ==================================================================
  
  _Description_:
       Initializes the state of the pseudorandom number generator used by
!      'RANDOM_NUMBER'.
  
  _Standard_:
       Fortran 2018
--- 16954,16965 ----
  
  File: gfortran.info,  Node: RANDOM_INIT,  Next: RANDOM_NUMBER,  Prev: RAND,  Up: Intrinsic Procedures
  
! 8.223 ‘RANDOM_INIT’ -- Initialize a pseudo-random number generator
  ==================================================================
  
  _Description_:
       Initializes the state of the pseudorandom number generator used by
!      ‘RANDOM_NUMBER’.
  
  _Standard_:
       Fortran 2018
*************** _Class_:
*** 16968,16993 ****
       Subroutine
  
  _Syntax_:
!      'CALL RANDOM_INIT(REPEATABLE, IMAGE_DISTINCT)'
  
  _Arguments_:
!      REPEATABLE         Shall be a scalar with a 'LOGICAL' type, and it
!                         is 'INTENT(IN)'.  If it is '.true.', the seed is
                          set to a processor-dependent value that is the
!                         same each time 'RANDOM_INIT' is called from the
                          same image.  The term "same image" means a
                          single instance of program execution.  The
                          sequence of random numbers is different for
                          repeated execution of the program.  If it is
!                         '.false.', the seed is set to a
                          processor-dependent value.
!      IMAGE_DISTINCT     Shall be a scalar with a 'LOGICAL' type, and it
!                         is 'INTENT(IN)'.  If it is '.true.', the seed is
                          set to a processor-dependent value that is
                          distinct from th seed set by a call to
!                         'RANDOM_INIT' in another image.  If it is
!                         '.false.', the seed is set to a value that does
!                         depend which image called 'RANDOM_INIT'.
  
  _Example_:
            program test_random_seed
--- 16968,16993 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL RANDOM_INIT(REPEATABLE, IMAGE_DISTINCT)’
  
  _Arguments_:
!      REPEATABLE         Shall be a scalar with a ‘LOGICAL’ type, and it
!                         is ‘INTENT(IN)’.  If it is ‘.true.’, the seed is
                          set to a processor-dependent value that is the
!                         same each time ‘RANDOM_INIT’ is called from the
                          same image.  The term "same image" means a
                          single instance of program execution.  The
                          sequence of random numbers is different for
                          repeated execution of the program.  If it is
!                         ‘.false.’, the seed is set to a
                          processor-dependent value.
!      IMAGE_DISTINCT     Shall be a scalar with a ‘LOGICAL’ type, and it
!                         is ‘INTENT(IN)’.  If it is ‘.true.’, the seed is
                          set to a processor-dependent value that is
                          distinct from th seed set by a call to
!                         ‘RANDOM_INIT’ in another image.  If it is
!                         ‘.false.’, the seed is set to a value that does
!                         depend which image called ‘RANDOM_INIT’.
  
  _Example_:
            program test_random_seed
*************** _See also_:
*** 17008,17014 ****
  
  File: gfortran.info,  Node: RANDOM_NUMBER,  Next: RANDOM_SEED,  Prev: RANDOM_INIT,  Up: Intrinsic Procedures
  
! 8.224 'RANDOM_NUMBER' -- Pseudo-random number
  =============================================
  
  _Description_:
--- 17008,17014 ----
  
  File: gfortran.info,  Node: RANDOM_NUMBER,  Next: RANDOM_SEED,  Prev: RANDOM_INIT,  Up: Intrinsic Procedures
  
! 8.224 ‘RANDOM_NUMBER’ -- Pseudo-random number
  =============================================
  
  _Description_:
*************** _Description_:
*** 17023,17029 ****
       Note that in a multi-threaded program (e.g.  using OpenMP
       directives), each thread will have its own random number state.
       For details of the seeding procedure, see the documentation for the
!      'RANDOM_SEED' intrinsic.
  
  _Standard_:
       Fortran 90 and later
--- 17023,17029 ----
       Note that in a multi-threaded program (e.g.  using OpenMP
       directives), each thread will have its own random number state.
       For details of the seeding procedure, see the documentation for the
!      ‘RANDOM_SEED’ intrinsic.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 17032,17041 ****
       Subroutine
  
  _Syntax_:
!      'CALL RANDOM_NUMBER(HARVEST)'
  
  _Arguments_:
!      HARVEST     Shall be a scalar or an array of type 'REAL'.
  
  _Example_:
            program test_random_number
--- 17032,17041 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL RANDOM_NUMBER(HARVEST)’
  
  _Arguments_:
!      HARVEST     Shall be a scalar or an array of type ‘REAL’.
  
  _Example_:
            program test_random_number
*************** _See also_:
*** 17050,17075 ****
  
  File: gfortran.info,  Node: RANDOM_SEED,  Next: RANGE,  Prev: RANDOM_NUMBER,  Up: Intrinsic Procedures
  
! 8.225 'RANDOM_SEED' -- Initialize a pseudo-random number sequence
  =================================================================
  
  _Description_:
       Restarts or queries the state of the pseudorandom number generator
!      used by 'RANDOM_NUMBER'.
  
!      If 'RANDOM_SEED' is called without arguments, it is seeded with
       random data retrieved from the operating system.
  
       As an extension to the Fortran standard, the GFortran
!      'RANDOM_NUMBER' supports multiple threads.  Each thread in a
!      multi-threaded program has its own seed.  When 'RANDOM_SEED' is
       called either without arguments or with the PUT argument, the given
       seed is copied into a master seed as well as the seed of the
!      current thread.  When a new thread uses 'RANDOM_NUMBER' for the
       first time, the seed is copied from the master seed, and forwarded
       N * 2^{128} steps to guarantee that the random stream does not
       alias any other stream in the system, where N is the number of
!      threads that have used 'RANDOM_NUMBER' so far during the program
       execution.
  
  _Standard_:
--- 17050,17075 ----
  
  File: gfortran.info,  Node: RANDOM_SEED,  Next: RANGE,  Prev: RANDOM_NUMBER,  Up: Intrinsic Procedures
  
! 8.225 ‘RANDOM_SEED’ -- Initialize a pseudo-random number sequence
  =================================================================
  
  _Description_:
       Restarts or queries the state of the pseudorandom number generator
!      used by ‘RANDOM_NUMBER’.
  
!      If ‘RANDOM_SEED’ is called without arguments, it is seeded with
       random data retrieved from the operating system.
  
       As an extension to the Fortran standard, the GFortran
!      ‘RANDOM_NUMBER’ supports multiple threads.  Each thread in a
!      multi-threaded program has its own seed.  When ‘RANDOM_SEED’ is
       called either without arguments or with the PUT argument, the given
       seed is copied into a master seed as well as the seed of the
!      current thread.  When a new thread uses ‘RANDOM_NUMBER’ for the
       first time, the seed is copied from the master seed, and forwarded
       N * 2^{128} steps to guarantee that the random stream does not
       alias any other stream in the system, where N is the number of
!      threads that have used ‘RANDOM_NUMBER’ so far during the program
       execution.
  
  _Standard_:
*************** _Class_:
*** 17079,17098 ****
       Subroutine
  
  _Syntax_:
!      'CALL RANDOM_SEED([SIZE, PUT, GET])'
  
  _Arguments_:
       SIZE        (Optional) Shall be a scalar and of type default
!                  'INTEGER', with 'INTENT(OUT)'.  It specifies the
                   minimum size of the arrays used with the PUT and
                   GET arguments.
       PUT         (Optional) Shall be an array of type default
!                  'INTEGER' and rank one.  It is 'INTENT(IN)' and
                   the size of the array must be larger than or
                   equal to the number returned by the SIZE
                   argument.
       GET         (Optional) Shall be an array of type default
!                  'INTEGER' and rank one.  It is 'INTENT(OUT)' and
                   the size of the array must be larger than or
                   equal to the number returned by the SIZE
                   argument.
--- 17079,17098 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL RANDOM_SEED([SIZE, PUT, GET])’
  
  _Arguments_:
       SIZE        (Optional) Shall be a scalar and of type default
!                  ‘INTEGER’, with ‘INTENT(OUT)’.  It specifies the
                   minimum size of the arrays used with the PUT and
                   GET arguments.
       PUT         (Optional) Shall be an array of type default
!                  ‘INTEGER’ and rank one.  It is ‘INTENT(IN)’ and
                   the size of the array must be larger than or
                   equal to the number returned by the SIZE
                   argument.
       GET         (Optional) Shall be an array of type default
!                  ‘INTEGER’ and rank one.  It is ‘INTENT(OUT)’ and
                   the size of the array must be larger than or
                   equal to the number returned by the SIZE
                   argument.
*************** _See also_:
*** 17116,17127 ****
  
  File: gfortran.info,  Node: RANGE,  Next: RANK,  Prev: RANDOM_SEED,  Up: Intrinsic Procedures
  
! 8.226 'RANGE' -- Decimal exponent range
  =======================================
  
  _Description_:
!      'RANGE(X)' returns the decimal exponent range in the model of the
!      type of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 17116,17127 ----
  
  File: gfortran.info,  Node: RANGE,  Next: RANK,  Prev: RANDOM_SEED,  Up: Intrinsic Procedures
  
! 8.226 ‘RANGE’ -- Decimal exponent range
  =======================================
  
  _Description_:
!      ‘RANGE(X)’ returns the decimal exponent range in the model of the
!      type of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 17130,17146 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = RANGE(X)'
  
  _Arguments_:
!      X           Shall be of type 'INTEGER', 'REAL' or 'COMPLEX'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.
  
  _Example_:
!      See 'PRECISION' for an example.
  _See also_:
       *note SELECTED_REAL_KIND::,
       *note PRECISION::
--- 17130,17146 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = RANGE(X)’
  
  _Arguments_:
!      X           Shall be of type ‘INTEGER’, ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.
  
  _Example_:
!      See ‘PRECISION’ for an example.
  _See also_:
       *note SELECTED_REAL_KIND::,
       *note PRECISION::
*************** _See also_:
*** 17148,17158 ****
  
  File: gfortran.info,  Node: RANK,  Next: REAL,  Prev: RANGE,  Up: Intrinsic Procedures
  
! 8.227 'RANK' -- Rank of a data object
  =====================================
  
  _Description_:
!      'RANK(A)' returns the rank of a scalar or array data object.
  
  _Standard_:
       Technical Specification (TS) 29113
--- 17148,17158 ----
  
  File: gfortran.info,  Node: RANK,  Next: REAL,  Prev: RANGE,  Up: Intrinsic Procedures
  
! 8.227 ‘RANK’ -- Rank of a data object
  =====================================
  
  _Description_:
!      ‘RANK(A)’ returns the rank of a scalar or array data object.
  
  _Standard_:
       Technical Specification (TS) 29113
*************** _Class_:
*** 17161,17173 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = RANK(A)'
  
  _Arguments_:
       A           can be of any type
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the default integer
       kind.  For arrays, their rank is returned; for scalars zero is
       returned.
  
--- 17161,17173 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = RANK(A)’
  
  _Arguments_:
       A           can be of any type
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the default integer
       kind.  For arrays, their rank is returned; for scalars zero is
       returned.
  
*************** _Example_:
*** 17182,17193 ****
  
  File: gfortran.info,  Node: REAL,  Next: RENAME,  Prev: RANK,  Up: Intrinsic Procedures
  
! 8.228 'REAL' -- Convert to real type
  ====================================
  
  _Description_:
!      'REAL(A [, KIND])' converts its argument A to a real type.  The
!      'REALPART' function is provided for compatibility with 'g77', and
       its use is strongly discouraged.
  
  _Standard_:
--- 17182,17193 ----
  
  File: gfortran.info,  Node: REAL,  Next: RENAME,  Prev: RANK,  Up: Intrinsic Procedures
  
! 8.228 ‘REAL’ -- Convert to real type
  ====================================
  
  _Description_:
!      ‘REAL(A [, KIND])’ converts its argument A to a real type.  The
!      ‘REALPART’ function is provided for compatibility with ‘g77’, and
       its use is strongly discouraged.
  
  _Standard_:
*************** _Class_:
*** 17198,17224 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = REAL(A [, KIND])'
!      'RESULT = REALPART(Z)'
  
  _Arguments_:
!      A           Shall be 'INTEGER', 'REAL', or 'COMPLEX'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      These functions return a 'REAL' variable or array under the
       following rules:
  
       (A)
!           'REAL(A)' is converted to a default real type if A is an
            integer or real variable.
       (B)
!           'REAL(A)' is converted to a real type with the kind type
            parameter of A if A is a complex variable.
       (C)
!           'REAL(A, KIND)' is converted to a real type with kind type
            parameter KIND if A is a complex, integer, or real variable.
  
  _Example_:
--- 17198,17224 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = REAL(A [, KIND])’
!      ‘RESULT = REALPART(Z)’
  
  _Arguments_:
!      A           Shall be ‘INTEGER’, ‘REAL’, or ‘COMPLEX’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      These functions return a ‘REAL’ variable or array under the
       following rules:
  
       (A)
!           ‘REAL(A)’ is converted to a default real type if A is an
            integer or real variable.
       (B)
!           ‘REAL(A)’ is converted to a real type with the kind type
            parameter of A if A is a complex variable.
       (C)
!           ‘REAL(A, KIND)’ is converted to a real type with kind type
            parameter KIND if A is a complex, integer, or real variable.
  
  _Example_:
*************** _Example_:
*** 17230,17241 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'FLOAT(A)'     'INTEGER(4)'      'REAL(4)'      Fortran 77 and later
!      'DFLOAT(A)'    'INTEGER(4)'      'REAL(8)'      GNU extension
!      'FLOATI(A)'    'INTEGER(2)'      'REAL(4)'      GNU extension (-fdec)
!      'FLOATJ(A)'    'INTEGER(4)'      'REAL(4)'      GNU extension (-fdec)
!      'FLOATK(A)'    'INTEGER(8)'      'REAL(4)'      GNU extension (-fdec)
!      'SNGL(A)'      'REAL(8)'         'REAL(4)'      Fortran 77 and later
  
  _See also_:
       *note DBLE::
--- 17230,17241 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘FLOAT(A)’     ‘INTEGER(4)’      ‘REAL(4)’      Fortran 77 and later
!      ‘DFLOAT(A)’    ‘INTEGER(4)’      ‘REAL(8)’      GNU extension
!      ‘FLOATI(A)’    ‘INTEGER(2)’      ‘REAL(4)’      GNU extension (-fdec)
!      ‘FLOATJ(A)’    ‘INTEGER(4)’      ‘REAL(4)’      GNU extension (-fdec)
!      ‘FLOATK(A)’    ‘INTEGER(8)’      ‘REAL(4)’      GNU extension (-fdec)
!      ‘SNGL(A)’      ‘REAL(8)’         ‘REAL(4)’      Fortran 77 and later
  
  _See also_:
       *note DBLE::
*************** _See also_:
*** 17243,17257 ****
  
  File: gfortran.info,  Node: RENAME,  Next: REPEAT,  Prev: REAL,  Up: Intrinsic Procedures
  
! 8.229 'RENAME' -- Rename a file
  ===============================
  
  _Description_:
       Renames a file from file PATH1 to PATH2.  A null character
!      ('CHAR(0)') can be used to mark the end of the names in PATH1 and
       PATH2; otherwise, trailing blanks in the file names are ignored.
       If the STATUS argument is supplied, it contains 0 on success or a
!      nonzero error code upon return; see 'rename(2)'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 17243,17257 ----
  
  File: gfortran.info,  Node: RENAME,  Next: REPEAT,  Prev: REAL,  Up: Intrinsic Procedures
  
! 8.229 ‘RENAME’ -- Rename a file
  ===============================
  
  _Description_:
       Renames a file from file PATH1 to PATH2.  A null character
!      (‘CHAR(0)’) can be used to mark the end of the names in PATH1 and
       PATH2; otherwise, trailing blanks in the file names are ignored.
       If the STATUS argument is supplied, it contains 0 on success or a
!      nonzero error code upon return; see ‘rename(2)’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 17263,17275 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL RENAME(PATH1, PATH2 [, STATUS])'
!      'STATUS = RENAME(PATH1, PATH2)'
  
  _Arguments_:
!      PATH1       Shall be of default 'CHARACTER' type.
!      PATH2       Shall be of default 'CHARACTER' type.
!      STATUS      (Optional) Shall be of default 'INTEGER' type.
  
  _See also_:
       *note LINK::
--- 17263,17275 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL RENAME(PATH1, PATH2 [, STATUS])’
!      ‘STATUS = RENAME(PATH1, PATH2)’
  
  _Arguments_:
!      PATH1       Shall be of default ‘CHARACTER’ type.
!      PATH2       Shall be of default ‘CHARACTER’ type.
!      STATUS      (Optional) Shall be of default ‘INTEGER’ type.
  
  _See also_:
       *note LINK::
*************** _See also_:
*** 17277,17283 ****
  
  File: gfortran.info,  Node: REPEAT,  Next: RESHAPE,  Prev: RENAME,  Up: Intrinsic Procedures
  
! 8.230 'REPEAT' -- Repeated string concatenation
  ===============================================
  
  _Description_:
--- 17277,17283 ----
  
  File: gfortran.info,  Node: REPEAT,  Next: RESHAPE,  Prev: RENAME,  Up: Intrinsic Procedures
  
! 8.230 ‘REPEAT’ -- Repeated string concatenation
  ===============================================
  
  _Description_:
*************** _Class_:
*** 17290,17303 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = REPEAT(STRING, NCOPIES)'
  
  _Arguments_:
!      STRING      Shall be scalar and of type 'CHARACTER'.
!      NCOPIES     Shall be scalar and of type 'INTEGER'.
  
  _Return value_:
!      A new scalar of type 'CHARACTER' built up from NCOPIES copies of
       STRING.
  
  _Example_:
--- 17290,17303 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = REPEAT(STRING, NCOPIES)’
  
  _Arguments_:
!      STRING      Shall be scalar and of type ‘CHARACTER’.
!      NCOPIES     Shall be scalar and of type ‘INTEGER’.
  
  _Return value_:
!      A new scalar of type ‘CHARACTER’ built up from NCOPIES copies of
       STRING.
  
  _Example_:
*************** _Example_:
*** 17308,17314 ****
  
  File: gfortran.info,  Node: RESHAPE,  Next: RRSPACING,  Prev: REPEAT,  Up: Intrinsic Procedures
  
! 8.231 'RESHAPE' -- Function to reshape an array
  ===============================================
  
  _Description_:
--- 17308,17314 ----
  
  File: gfortran.info,  Node: RESHAPE,  Next: RRSPACING,  Prev: REPEAT,  Up: Intrinsic Procedures
  
! 8.231 ‘RESHAPE’ -- Function to reshape an array
  ===============================================
  
  _Description_:
*************** _Class_:
*** 17323,17337 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])'
  
  _Arguments_:
       SOURCE      Shall be an array of any type.
!      SHAPE       Shall be of type 'INTEGER' and an array of rank
                   one.  Its values must be positive or zero.
       PAD         (Optional) shall be an array of the same type as
                   SOURCE.
!      ORDER       (Optional) shall be of type 'INTEGER' and an
                   array of the same shape as SHAPE.  Its values
                   shall be a permutation of the numbers from 1 to
                   n, where n is the size of SHAPE.  If ORDER is
--- 17323,17337 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])’
  
  _Arguments_:
       SOURCE      Shall be an array of any type.
!      SHAPE       Shall be of type ‘INTEGER’ and an array of rank
                   one.  Its values must be positive or zero.
       PAD         (Optional) shall be an array of the same type as
                   SOURCE.
!      ORDER       (Optional) shall be of type ‘INTEGER’ and an
                   array of the same shape as SHAPE.  Its values
                   shall be a permutation of the numbers from 1 to
                   n, where n is the size of SHAPE.  If ORDER is
*************** _See also_:
*** 17353,17363 ****
  
  File: gfortran.info,  Node: RRSPACING,  Next: RSHIFT,  Prev: RESHAPE,  Up: Intrinsic Procedures
  
! 8.232 'RRSPACING' -- Reciprocal of the relative spacing
  =======================================================
  
  _Description_:
!      'RRSPACING(X)' returns the reciprocal of the relative spacing of
       model numbers near X.
  
  _Standard_:
--- 17353,17363 ----
  
  File: gfortran.info,  Node: RRSPACING,  Next: RSHIFT,  Prev: RESHAPE,  Up: Intrinsic Procedures
  
! 8.232 ‘RRSPACING’ -- Reciprocal of the relative spacing
  =======================================================
  
  _Description_:
!      ‘RRSPACING(X)’ returns the reciprocal of the relative spacing of
       model numbers near X.
  
  _Standard_:
*************** _Class_:
*** 17367,17381 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = RRSPACING(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
  
  _Return value_:
       The return value is of the same type and kind as X.  The value
!      returned is equal to 'ABS(FRACTION(X)) *
!      FLOAT(RADIX(X))**DIGITS(X)'.
  
  _See also_:
       *note SPACING::
--- 17367,17381 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = RRSPACING(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
  
  _Return value_:
       The return value is of the same type and kind as X.  The value
!      returned is equal to ‘ABS(FRACTION(X)) *
!      FLOAT(RADIX(X))**DIGITS(X)’.
  
  _See also_:
       *note SPACING::
*************** _See also_:
*** 17383,17401 ****
  
  File: gfortran.info,  Node: RSHIFT,  Next: SAME_TYPE_AS,  Prev: RRSPACING,  Up: Intrinsic Procedures
  
! 8.233 'RSHIFT' -- Right shift bits
  ==================================
  
  _Description_:
!      'RSHIFT' returns a value corresponding to I with all of the bits
       shifted right by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to 'BIT_SIZE(I)', otherwise the result value is
       undefined.  Bits shifted out from the right end are lost.  The fill
       is arithmetic: the bits shifted in from the left end are equal to
       the leftmost bit, which in two's complement representation is the
       sign bit.
  
!      This function has been superseded by the 'SHIFTA' intrinsic, which
       is standard in Fortran 2008 and later.
  
  _Standard_:
--- 17383,17401 ----
  
  File: gfortran.info,  Node: RSHIFT,  Next: SAME_TYPE_AS,  Prev: RRSPACING,  Up: Intrinsic Procedures
  
! 8.233 ‘RSHIFT’ -- Right shift bits
  ==================================
  
  _Description_:
!      ‘RSHIFT’ returns a value corresponding to I with all of the bits
       shifted right by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to ‘BIT_SIZE(I)’, otherwise the result value is
       undefined.  Bits shifted out from the right end are lost.  The fill
       is arithmetic: the bits shifted in from the left end are equal to
       the leftmost bit, which in two's complement representation is the
       sign bit.
  
!      This function has been superseded by the ‘SHIFTA’ intrinsic, which
       is standard in Fortran 2008 and later.
  
  _Standard_:
*************** _Class_:
*** 17405,17418 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = RSHIFT(I, SHIFT)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _See also_:
       *note ISHFT::,
--- 17405,17418 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = RSHIFT(I, SHIFT)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _See also_:
       *note ISHFT::,
*************** _See also_:
*** 17425,17431 ****
  
  File: gfortran.info,  Node: SAME_TYPE_AS,  Next: SCALE,  Prev: RSHIFT,  Up: Intrinsic Procedures
  
! 8.234 'SAME_TYPE_AS' -- Query dynamic types for equality
  ========================================================
  
  _Description_:
--- 17425,17431 ----
  
  File: gfortran.info,  Node: SAME_TYPE_AS,  Next: SCALE,  Prev: RSHIFT,  Up: Intrinsic Procedures
  
! 8.234 ‘SAME_TYPE_AS’ -- Query dynamic types for equality
  ========================================================
  
  _Description_:
*************** _Class_:
*** 17438,17444 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = SAME_TYPE_AS(A, B)'
  
  _Arguments_:
       A           Shall be an object of extensible declared type
--- 17438,17444 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = SAME_TYPE_AS(A, B)’
  
  _Arguments_:
       A           Shall be an object of extensible declared type
*************** _See also_:
*** 17457,17467 ****
  
  File: gfortran.info,  Node: SCALE,  Next: SCAN,  Prev: SAME_TYPE_AS,  Up: Intrinsic Procedures
  
! 8.235 'SCALE' -- Scale a real value
  ===================================
  
  _Description_:
!      'SCALE(X,I)' returns 'X * RADIX(X)**I'.
  
  _Standard_:
       Fortran 90 and later
--- 17457,17467 ----
  
  File: gfortran.info,  Node: SCALE,  Next: SCAN,  Prev: SAME_TYPE_AS,  Up: Intrinsic Procedures
  
! 8.235 ‘SCALE’ -- Scale a real value
  ===================================
  
  _Description_:
!      ‘SCALE(X,I)’ returns ‘X * RADIX(X)**I’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 17470,17484 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SCALE(X, I)'
  
  _Arguments_:
!      X           The type of the argument shall be a 'REAL'.
!      I           The type of the argument shall be a 'INTEGER'.
  
  _Return value_:
       The return value is of the same type and kind as X.  Its value is
!      'X * RADIX(X)**I'.
  
  _Example_:
            program test_scale
--- 17470,17484 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SCALE(X, I)’
  
  _Arguments_:
!      X           The type of the argument shall be a ‘REAL’.
!      I           The type of the argument shall be a ‘INTEGER’.
  
  _Return value_:
       The return value is of the same type and kind as X.  Its value is
!      ‘X * RADIX(X)**I’.
  
  _Example_:
            program test_scale
*************** _Example_:
*** 17490,17504 ****
  
  File: gfortran.info,  Node: SCAN,  Next: SECNDS,  Prev: SCALE,  Up: Intrinsic Procedures
  
! 8.236 'SCAN' -- Scan a string for the presence of a set of characters
  =====================================================================
  
  _Description_:
       Scans a STRING for any of the characters in a SET of characters.
  
!      If BACK is either absent or equals 'FALSE', this function returns
       the position of the leftmost character of STRING that is in SET.
!      If BACK equals 'TRUE', the rightmost position is returned.  If no
       character of SET is found in STRING, the result is zero.
  
  _Standard_:
--- 17490,17504 ----
  
  File: gfortran.info,  Node: SCAN,  Next: SECNDS,  Prev: SCALE,  Up: Intrinsic Procedures
  
! 8.236 ‘SCAN’ -- Scan a string for the presence of a set of characters
  =====================================================================
  
  _Description_:
       Scans a STRING for any of the characters in a SET of characters.
  
!      If BACK is either absent or equals ‘FALSE’, this function returns
       the position of the leftmost character of STRING that is in SET.
!      If BACK equals ‘TRUE’, the rightmost position is returned.  If no
       character of SET is found in STRING, the result is zero.
  
  _Standard_:
*************** _Class_:
*** 17508,17525 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SCAN(STRING, SET[, BACK [, KIND]])'
  
  _Arguments_:
!      STRING      Shall be of type 'CHARACTER'.
!      SET         Shall be of type 'CHARACTER'.
!      BACK        (Optional) shall be of type 'LOGICAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
--- 17508,17525 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SCAN(STRING, SET[, BACK [, KIND]])’
  
  _Arguments_:
!      STRING      Shall be of type ‘CHARACTER’.
!      SET         Shall be of type ‘CHARACTER’.
!      BACK        (Optional) shall be of type ‘LOGICAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
*************** _See also_:
*** 17536,17546 ****
  
  File: gfortran.info,  Node: SECNDS,  Next: SECOND,  Prev: SCAN,  Up: Intrinsic Procedures
  
! 8.237 'SECNDS' -- Time function
  ===============================
  
  _Description_:
!      'SECNDS(X)' gets the time in seconds from the real-time system
       clock.  X is a reference time, also in seconds.  If this is zero,
       the time in seconds from midnight is returned.  This function is
       non-standard and its use is discouraged.
--- 17536,17546 ----
  
  File: gfortran.info,  Node: SECNDS,  Next: SECOND,  Prev: SCAN,  Up: Intrinsic Procedures
  
! 8.237 ‘SECNDS’ -- Time function
  ===============================
  
  _Description_:
!      ‘SECNDS(X)’ gets the time in seconds from the real-time system
       clock.  X is a reference time, also in seconds.  If this is zero,
       the time in seconds from midnight is returned.  This function is
       non-standard and its use is discouraged.
*************** _Class_:
*** 17552,17562 ****
       Function
  
  _Syntax_:
!      'RESULT = SECNDS (X)'
  
  _Arguments_:
!      T           Shall be of type 'REAL(4)'.
!      X           Shall be of type 'REAL(4)'.
  
  _Return value_:
       None
--- 17552,17562 ----
       Function
  
  _Syntax_:
!      ‘RESULT = SECNDS (X)’
  
  _Arguments_:
!      T           Shall be of type ‘REAL(4)’.
!      X           Shall be of type ‘REAL(4)’.
  
  _Return value_:
       None
*************** _Example_:
*** 17576,17588 ****
  
  File: gfortran.info,  Node: SECOND,  Next: SELECTED_CHAR_KIND,  Prev: SECNDS,  Up: Intrinsic Procedures
  
! 8.238 'SECOND' -- CPU time function
  ===================================
  
  _Description_:
!      Returns a 'REAL(4)' value representing the elapsed CPU time in
       seconds.  This provides the same functionality as the standard
!      'CPU_TIME' intrinsic, and is only included for backwards
       compatibility.
  
       This intrinsic is provided in both subroutine and function forms;
--- 17576,17588 ----
  
  File: gfortran.info,  Node: SECOND,  Next: SELECTED_CHAR_KIND,  Prev: SECNDS,  Up: Intrinsic Procedures
  
! 8.238 ‘SECOND’ -- CPU time function
  ===================================
  
  _Description_:
!      Returns a ‘REAL(4)’ value representing the elapsed CPU time in
       seconds.  This provides the same functionality as the standard
!      ‘CPU_TIME’ intrinsic, and is only included for backwards
       compatibility.
  
       This intrinsic is provided in both subroutine and function forms;
*************** _Class_:
*** 17595,17605 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL SECOND(TIME)'
!      'TIME = SECOND()'
  
  _Arguments_:
!      TIME        Shall be of type 'REAL(4)'.
  
  _Return value_:
       In either syntax, TIME is set to the process's current runtime in
--- 17595,17605 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL SECOND(TIME)’
!      ‘TIME = SECOND()’
  
  _Arguments_:
!      TIME        Shall be of type ‘REAL(4)’.
  
  _Return value_:
       In either syntax, TIME is set to the process's current runtime in
*************** _See also_:
*** 17611,17622 ****
  
  File: gfortran.info,  Node: SELECTED_CHAR_KIND,  Next: SELECTED_INT_KIND,  Prev: SECOND,  Up: Intrinsic Procedures
  
! 8.239 'SELECTED_CHAR_KIND' -- Choose character kind
  ===================================================
  
  _Description_:
  
!      'SELECTED_CHAR_KIND(NAME)' returns the kind value for the character
       set named NAME, if a character set with such a name is supported,
       or -1 otherwise.  Currently, supported character sets include
       "ASCII" and "DEFAULT", which are equivalent, and "ISO_10646"
--- 17611,17622 ----
  
  File: gfortran.info,  Node: SELECTED_CHAR_KIND,  Next: SELECTED_INT_KIND,  Prev: SECOND,  Up: Intrinsic Procedures
  
! 8.239 ‘SELECTED_CHAR_KIND’ -- Choose character kind
  ===================================================
  
  _Description_:
  
!      ‘SELECTED_CHAR_KIND(NAME)’ returns the kind value for the character
       set named NAME, if a character set with such a name is supported,
       or -1 otherwise.  Currently, supported character sets include
       "ASCII" and "DEFAULT", which are equivalent, and "ISO_10646"
*************** _Class_:
*** 17630,17636 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = SELECTED_CHAR_KIND(NAME)'
  
  _Arguments_:
       NAME        Shall be a scalar and of the default character
--- 17630,17636 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = SELECTED_CHAR_KIND(NAME)’
  
  _Arguments_:
       NAME        Shall be a scalar and of the default character
*************** _Example_:
*** 17660,17673 ****
  
  File: gfortran.info,  Node: SELECTED_INT_KIND,  Next: SELECTED_REAL_KIND,  Prev: SELECTED_CHAR_KIND,  Up: Intrinsic Procedures
  
! 8.240 'SELECTED_INT_KIND' -- Choose integer kind
  ================================================
  
  _Description_:
!      'SELECTED_INT_KIND(R)' return the kind value of the smallest
       integer type that can represent all values ranging from -10^R
       (exclusive) to 10^R (exclusive).  If there is no integer kind that
!      accommodates this range, 'SELECTED_INT_KIND' returns -1.
  
  _Standard_:
       Fortran 90 and later
--- 17660,17673 ----
  
  File: gfortran.info,  Node: SELECTED_INT_KIND,  Next: SELECTED_REAL_KIND,  Prev: SELECTED_CHAR_KIND,  Up: Intrinsic Procedures
  
! 8.240 ‘SELECTED_INT_KIND’ -- Choose integer kind
  ================================================
  
  _Description_:
!      ‘SELECTED_INT_KIND(R)’ return the kind value of the smallest
       integer type that can represent all values ranging from -10^R
       (exclusive) to 10^R (exclusive).  If there is no integer kind that
!      accommodates this range, ‘SELECTED_INT_KIND’ returns -1.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 17676,17685 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = SELECTED_INT_KIND(R)'
  
  _Arguments_:
!      R           Shall be a scalar and of type 'INTEGER'.
  
  _Example_:
            program large_integers
--- 17676,17685 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = SELECTED_INT_KIND(R)’
  
  _Arguments_:
!      R           Shall be a scalar and of type ‘INTEGER’.
  
  _Example_:
            program large_integers
*************** _Example_:
*** 17698,17751 ****
  
  File: gfortran.info,  Node: SELECTED_REAL_KIND,  Next: SET_EXPONENT,  Prev: SELECTED_INT_KIND,  Up: Intrinsic Procedures
  
! 8.241 'SELECTED_REAL_KIND' -- Choose real kind
  ==============================================
  
  _Description_:
!      'SELECTED_REAL_KIND(P,R)' returns the kind value of a real data
!      type with decimal precision of at least 'P' digits, exponent range
!      of at least 'R', and with a radix of 'RADIX'.
  
  _Standard_:
!      Fortran 90 and later, with 'RADIX' Fortran 2008 or later
  
  _Class_:
       Transformational function
  
  _Syntax_:
!      'RESULT = SELECTED_REAL_KIND([P, R, RADIX])'
  
  _Arguments_:
       P           (Optional) shall be a scalar and of type
!                  'INTEGER'.
       R           (Optional) shall be a scalar and of type
!                  'INTEGER'.
       RADIX       (Optional) shall be a scalar and of type
!                  'INTEGER'.
       Before Fortran 2008, at least one of the arguments R or P shall be
       present; since Fortran 2008, they are assumed to be zero if absent.
  
  _Return value_:
  
!      'SELECTED_REAL_KIND' returns the value of the kind type parameter
!      of a real data type with decimal precision of at least 'P' digits,
!      a decimal exponent range of at least 'R', and with the requested
!      'RADIX'.  If the 'RADIX' parameter is absent, real kinds with any
       radix can be returned.  If more than one real data type meet the
       criteria, the kind of the data type with the smallest decimal
       precision is returned.  If no real data type matches the criteria,
       the result is
       -1 if the processor does not support a real data type with a
!           precision greater than or equal to 'P', but the 'R' and
!           'RADIX' requirements can be fulfilled
       -2 if the processor does not support a real type with an exponent
!           range greater than or equal to 'R', but 'P' and 'RADIX' are
            fulfillable
!      -3 if 'RADIX' but not 'P' and 'R' requirements
            are fulfillable
!      -4 if 'RADIX' and either 'P' or 'R' requirements
            are fulfillable
!      -5 if there is no real type with the given 'RADIX'
  
  _Example_:
            program real_kinds
--- 17698,17751 ----
  
  File: gfortran.info,  Node: SELECTED_REAL_KIND,  Next: SET_EXPONENT,  Prev: SELECTED_INT_KIND,  Up: Intrinsic Procedures
  
! 8.241 ‘SELECTED_REAL_KIND’ -- Choose real kind
  ==============================================
  
  _Description_:
!      ‘SELECTED_REAL_KIND(P,R)’ returns the kind value of a real data
!      type with decimal precision of at least ‘P’ digits, exponent range
!      of at least ‘R’, and with a radix of ‘RADIX’.
  
  _Standard_:
!      Fortran 90 and later, with ‘RADIX’ Fortran 2008 or later
  
  _Class_:
       Transformational function
  
  _Syntax_:
!      ‘RESULT = SELECTED_REAL_KIND([P, R, RADIX])’
  
  _Arguments_:
       P           (Optional) shall be a scalar and of type
!                  ‘INTEGER’.
       R           (Optional) shall be a scalar and of type
!                  ‘INTEGER’.
       RADIX       (Optional) shall be a scalar and of type
!                  ‘INTEGER’.
       Before Fortran 2008, at least one of the arguments R or P shall be
       present; since Fortran 2008, they are assumed to be zero if absent.
  
  _Return value_:
  
!      ‘SELECTED_REAL_KIND’ returns the value of the kind type parameter
!      of a real data type with decimal precision of at least ‘P’ digits,
!      a decimal exponent range of at least ‘R’, and with the requested
!      ‘RADIX’.  If the ‘RADIX’ parameter is absent, real kinds with any
       radix can be returned.  If more than one real data type meet the
       criteria, the kind of the data type with the smallest decimal
       precision is returned.  If no real data type matches the criteria,
       the result is
       -1 if the processor does not support a real data type with a
!           precision greater than or equal to ‘P’, but the ‘R’ and
!           ‘RADIX’ requirements can be fulfilled
       -2 if the processor does not support a real type with an exponent
!           range greater than or equal to ‘R’, but ‘P’ and ‘RADIX’ are
            fulfillable
!      -3 if ‘RADIX’ but not ‘P’ and ‘R’ requirements
            are fulfillable
!      -4 if ‘RADIX’ and either ‘P’ or ‘R’ requirements
            are fulfillable
!      -5 if there is no real type with the given ‘RADIX’
  
  _Example_:
            program real_kinds
*************** _See also_:
*** 17768,17778 ****
  
  File: gfortran.info,  Node: SET_EXPONENT,  Next: SHAPE,  Prev: SELECTED_REAL_KIND,  Up: Intrinsic Procedures
  
! 8.242 'SET_EXPONENT' -- Set the exponent of the model
  =====================================================
  
  _Description_:
!      'SET_EXPONENT(X, I)' returns the real number whose fractional part
       is that of X and whose exponent part is I.
  
  _Standard_:
--- 17768,17778 ----
  
  File: gfortran.info,  Node: SET_EXPONENT,  Next: SHAPE,  Prev: SELECTED_REAL_KIND,  Up: Intrinsic Procedures
  
! 8.242 ‘SET_EXPONENT’ -- Set the exponent of the model
  =====================================================
  
  _Description_:
!      ‘SET_EXPONENT(X, I)’ returns the real number whose fractional part
       is that of X and whose exponent part is I.
  
  _Standard_:
*************** _Class_:
*** 17782,17797 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SET_EXPONENT(X, I)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
!      I           Shall be of type 'INTEGER'.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real
       number whose fractional part is that of X and whose exponent part
!      if I is returned; it is 'FRACTION(X) * RADIX(X)**I'.
  
  _Example_:
            PROGRAM test_setexp
--- 17782,17797 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SET_EXPONENT(X, I)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
!      I           Shall be of type ‘INTEGER’.
  
  _Return value_:
       The return value is of the same type and kind as X.  The real
       number whose fractional part is that of X and whose exponent part
!      if I is returned; it is ‘FRACTION(X) * RADIX(X)**I’.
  
  _Example_:
            PROGRAM test_setexp
*************** _Example_:
*** 17803,17809 ****
  
  File: gfortran.info,  Node: SHAPE,  Next: SHIFTA,  Prev: SET_EXPONENT,  Up: Intrinsic Procedures
  
! 8.243 'SHAPE' -- Determine the shape of an array
  ================================================
  
  _Description_:
--- 17803,17809 ----
  
  File: gfortran.info,  Node: SHAPE,  Next: SHIFTA,  Prev: SET_EXPONENT,  Up: Intrinsic Procedures
  
! 8.243 ‘SHAPE’ -- Determine the shape of an array
  ================================================
  
  _Description_:
*************** _Class_:
*** 17816,17833 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = SHAPE(SOURCE [, KIND])'
  
  _Arguments_:
       SOURCE      Shall be an array or scalar of any type.  If
                   SOURCE is a pointer it must be associated and
                   allocatable arrays must be allocated.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      An 'INTEGER' array of rank one with as many elements as SOURCE has
       dimensions.  The elements of the resulting array correspond to the
       extend of SOURCE along the respective dimensions.  If SOURCE is a
       scalar, the result is the rank one array of size zero.  If KIND is
--- 17816,17833 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = SHAPE(SOURCE [, KIND])’
  
  _Arguments_:
       SOURCE      Shall be an array or scalar of any type.  If
                   SOURCE is a pointer it must be associated and
                   allocatable arrays must be allocated.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      An ‘INTEGER’ array of rank one with as many elements as SOURCE has
       dimensions.  The elements of the resulting array correspond to the
       extend of SOURCE along the respective dimensions.  If SOURCE is a
       scalar, the result is the rank one array of size zero.  If KIND is
*************** _See also_:
*** 17848,17860 ****
  
  File: gfortran.info,  Node: SHIFTA,  Next: SHIFTL,  Prev: SHAPE,  Up: Intrinsic Procedures
  
! 8.244 'SHIFTA' -- Right shift with fill
  =======================================
  
  _Description_:
!      'SHIFTA' returns a value corresponding to I with all of the bits
       shifted right by SHIFT places.  SHIFT that be nonnegative and less
!      than or equal to 'BIT_SIZE(I)', otherwise the result value is
       undefined.  Bits shifted out from the right end are lost.  The fill
       is arithmetic: the bits shifted in from the left end are equal to
       the leftmost bit, which in two's complement representation is the
--- 17848,17860 ----
  
  File: gfortran.info,  Node: SHIFTA,  Next: SHIFTL,  Prev: SHAPE,  Up: Intrinsic Procedures
  
! 8.244 ‘SHIFTA’ -- Right shift with fill
  =======================================
  
  _Description_:
!      ‘SHIFTA’ returns a value corresponding to I with all of the bits
       shifted right by SHIFT places.  SHIFT that be nonnegative and less
!      than or equal to ‘BIT_SIZE(I)’, otherwise the result value is
       undefined.  Bits shifted out from the right end are lost.  The fill
       is arithmetic: the bits shifted in from the left end are equal to
       the leftmost bit, which in two's complement representation is the
*************** _Class_:
*** 17867,17880 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SHIFTA(I, SHIFT)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _See also_:
       *note SHIFTL::,
--- 17867,17880 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SHIFTA(I, SHIFT)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _See also_:
       *note SHIFTL::,
*************** _See also_:
*** 17883,17895 ****
  
  File: gfortran.info,  Node: SHIFTL,  Next: SHIFTR,  Prev: SHIFTA,  Up: Intrinsic Procedures
  
! 8.245 'SHIFTL' -- Left shift
  ============================
  
  _Description_:
!      'SHIFTL' returns a value corresponding to I with all of the bits
       shifted left by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to 'BIT_SIZE(I)', otherwise the result value is
       undefined.  Bits shifted out from the left end are lost, and bits
       shifted in from the right end are set to 0.
  
--- 17883,17895 ----
  
  File: gfortran.info,  Node: SHIFTL,  Next: SHIFTR,  Prev: SHIFTA,  Up: Intrinsic Procedures
  
! 8.245 ‘SHIFTL’ -- Left shift
  ============================
  
  _Description_:
!      ‘SHIFTL’ returns a value corresponding to I with all of the bits
       shifted left by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to ‘BIT_SIZE(I)’, otherwise the result value is
       undefined.  Bits shifted out from the left end are lost, and bits
       shifted in from the right end are set to 0.
  
*************** _Class_:
*** 17900,17913 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SHIFTL(I, SHIFT)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _See also_:
       *note SHIFTA::,
--- 17900,17913 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SHIFTL(I, SHIFT)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _See also_:
       *note SHIFTA::,
*************** _See also_:
*** 17916,17928 ****
  
  File: gfortran.info,  Node: SHIFTR,  Next: SIGN,  Prev: SHIFTL,  Up: Intrinsic Procedures
  
! 8.246 'SHIFTR' -- Right shift
  =============================
  
  _Description_:
!      'SHIFTR' returns a value corresponding to I with all of the bits
       shifted right by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to 'BIT_SIZE(I)', otherwise the result value is
       undefined.  Bits shifted out from the right end are lost, and bits
       shifted in from the left end are set to 0.
  
--- 17916,17928 ----
  
  File: gfortran.info,  Node: SHIFTR,  Next: SIGN,  Prev: SHIFTL,  Up: Intrinsic Procedures
  
! 8.246 ‘SHIFTR’ -- Right shift
  =============================
  
  _Description_:
!      ‘SHIFTR’ returns a value corresponding to I with all of the bits
       shifted right by SHIFT places.  SHIFT shall be nonnegative and less
!      than or equal to ‘BIT_SIZE(I)’, otherwise the result value is
       undefined.  Bits shifted out from the right end are lost, and bits
       shifted in from the left end are set to 0.
  
*************** _Class_:
*** 17933,17946 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SHIFTR(I, SHIFT)'
  
  _Arguments_:
!      I           The type shall be 'INTEGER'.
!      SHIFT       The type shall be 'INTEGER'.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of the same kind as I.
  
  _See also_:
       *note SHIFTA::,
--- 17933,17946 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SHIFTR(I, SHIFT)’
  
  _Arguments_:
!      I           The type shall be ‘INTEGER’.
!      SHIFT       The type shall be ‘INTEGER’.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of the same kind as I.
  
  _See also_:
       *note SHIFTA::,
*************** _See also_:
*** 17949,17959 ****
  
  File: gfortran.info,  Node: SIGN,  Next: SIGNAL,  Prev: SHIFTR,  Up: Intrinsic Procedures
  
! 8.247 'SIGN' -- Sign copying function
  =====================================
  
  _Description_:
!      'SIGN(A,B)' returns the value of A with the sign of B.
  
  _Standard_:
       Fortran 77 and later
--- 17949,17959 ----
  
  File: gfortran.info,  Node: SIGN,  Next: SIGNAL,  Prev: SHIFTR,  Up: Intrinsic Procedures
  
! 8.247 ‘SIGN’ -- Sign copying function
  =====================================
  
  _Description_:
!      ‘SIGN(A,B)’ returns the value of A with the sign of B.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 17962,17976 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SIGN(A, B)'
  
  _Arguments_:
!      A           Shall be of type 'INTEGER' or 'REAL'
       B           Shall be of the same type and kind as A.
  
  _Return value_:
       The kind of the return value is that of A and B.  If B \ge 0 then
!      the result is 'ABS(A)', else it is '-ABS(A)'.
  
  _Example_:
            program test_sign
--- 17962,17976 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SIGN(A, B)’
  
  _Arguments_:
!      A           Shall be of type ‘INTEGER’ or ‘REAL’
       B           Shall be of the same type and kind as A.
  
  _Return value_:
       The kind of the return value is that of A and B.  If B \ge 0 then
!      the result is ‘ABS(A)’, else it is ‘-ABS(A)’.
  
  _Example_:
            program test_sign
*************** _Example_:
*** 17986,18010 ****
  _Specific names_:
       Name           Arguments           Return type    Standard
       -------------------------------------------------------------------------
!      'SIGN(A,B)'    'REAL(4) A, B'      'REAL(4)'      Fortran 77 and later
!      'ISIGN(A,B)'   'INTEGER(4) A, B'   'INTEGER(4)'   Fortran 77 and later
!      'DSIGN(A,B)'   'REAL(8) A, B'      'REAL(8)'      Fortran 77 and later
  
  
  File: gfortran.info,  Node: SIGNAL,  Next: SIN,  Prev: SIGN,  Up: Intrinsic Procedures
  
! 8.248 'SIGNAL' -- Signal handling subroutine (or function)
  ==========================================================
  
  _Description_:
!      'SIGNAL(NUMBER, HANDLER [, STATUS])' causes external subroutine
       HANDLER to be executed with a single integer argument passed by
       value when signal NUMBER occurs.  If HANDLER is an integer, it can
       be used to turn off handling of signal NUMBER or revert to its
!      default action.  See 'signal(2)'.
  
!      If 'SIGNAL' is called as a subroutine and the STATUS argument is
!      supplied, it is set to the value returned by 'signal(2)'.
  
  _Standard_:
       GNU extension
--- 17986,18010 ----
  _Specific names_:
       Name           Arguments           Return type    Standard
       -------------------------------------------------------------------------
!      ‘SIGN(A,B)’    ‘REAL(4) A, B’      ‘REAL(4)’      Fortran 77 and later
!      ‘ISIGN(A,B)’   ‘INTEGER(4) A, B’   ‘INTEGER(4)’   Fortran 77 and later
!      ‘DSIGN(A,B)’   ‘REAL(8) A, B’      ‘REAL(8)’      Fortran 77 and later
  
  
  File: gfortran.info,  Node: SIGNAL,  Next: SIN,  Prev: SIGN,  Up: Intrinsic Procedures
  
! 8.248 ‘SIGNAL’ -- Signal handling subroutine (or function)
  ==========================================================
  
  _Description_:
!      ‘SIGNAL(NUMBER, HANDLER [, STATUS])’ causes external subroutine
       HANDLER to be executed with a single integer argument passed by
       value when signal NUMBER occurs.  If HANDLER is an integer, it can
       be used to turn off handling of signal NUMBER or revert to its
!      default action.  See ‘signal(2)’.
  
!      If ‘SIGNAL’ is called as a subroutine and the STATUS argument is
!      supplied, it is set to the value returned by ‘signal(2)’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 18013,18031 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL SIGNAL(NUMBER, HANDLER [, STATUS])'
!      'STATUS = SIGNAL(NUMBER, HANDLER)'
  
  _Arguments_:
!      NUMBER      Shall be a scalar integer, with 'INTENT(IN)'
!      HANDLER     Signal handler ('INTEGER FUNCTION' or
!                  'SUBROUTINE') or dummy/global 'INTEGER' scalar.
!                  'INTEGER'.  It is 'INTENT(IN)'.
       STATUS      (Optional) STATUS shall be a scalar integer.  It
!                  has 'INTENT(OUT)'.
  
  _Return value_:
!      The 'SIGNAL' function returns the value returned by 'signal(2)'.
  
  _Example_:
            module m_handler
--- 18013,18031 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL SIGNAL(NUMBER, HANDLER [, STATUS])’
!      ‘STATUS = SIGNAL(NUMBER, HANDLER)’
  
  _Arguments_:
!      NUMBER      Shall be a scalar integer, with ‘INTENT(IN)’
!      HANDLER     Signal handler (‘INTEGER FUNCTION’ or
!                  ‘SUBROUTINE’) or dummy/global ‘INTEGER’ scalar.
!                  ‘INTEGER’.  It is ‘INTENT(IN)’.
       STATUS      (Optional) STATUS shall be a scalar integer.  It
!                  has ‘INTENT(OUT)’.
  
  _Return value_:
!      The ‘SIGNAL’ function returns the value returned by ‘signal(2)’.
  
  _Example_:
            module m_handler
*************** _Example_:
*** 18049,18059 ****
  
  File: gfortran.info,  Node: SIN,  Next: SIND,  Prev: SIGNAL,  Up: Intrinsic Procedures
  
! 8.249 'SIN' -- Sine function
  ============================
  
  _Description_:
!      'SIN(X)' computes the sine of X.
  
  _Standard_:
       Fortran 77 and later
--- 18049,18059 ----
  
  File: gfortran.info,  Node: SIN,  Next: SIND,  Prev: SIGNAL,  Up: Intrinsic Procedures
  
! 8.249 ‘SIN’ -- Sine function
  ============================
  
  _Description_:
!      ‘SIN(X)’ computes the sine of X.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 18062,18071 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SIN(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X.
--- 18062,18071 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SIN(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X.
*************** _Example_:
*** 18079,18089 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'SIN(X)'       'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DSIN(X)'      'REAL(8) X'       'REAL(8)'      Fortran 77 and later
!      'CSIN(X)'      'COMPLEX(4) X'    'COMPLEX(4)'   Fortran 77 and later
!      'ZSIN(X)'      'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDSIN(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  _See also_:
       Inverse function:
--- 18079,18089 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘SIN(X)’       ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DSIN(X)’      ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
!      ‘CSIN(X)’      ‘COMPLEX(4) X’    ‘COMPLEX(4)’   Fortran 77 and later
!      ‘ZSIN(X)’      ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDSIN(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 18094,18104 ****
  
  File: gfortran.info,  Node: SIND,  Next: SINH,  Prev: SIN,  Up: Intrinsic Procedures
  
! 8.250 'SIND' -- Sine function, degrees
  ======================================
  
  _Description_:
!      'SIND(X)' computes the sine of X in degrees.
  
  _Standard_:
       Fortran 2023
--- 18094,18104 ----
  
  File: gfortran.info,  Node: SIND,  Next: SINH,  Prev: SIN,  Up: Intrinsic Procedures
  
! 8.250 ‘SIND’ -- Sine function, degrees
  ======================================
  
  _Description_:
!      ‘SIND(X)’ computes the sine of X in degrees.
  
  _Standard_:
       Fortran 2023
*************** _Class_:
*** 18107,18116 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SIND(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
--- 18107,18116 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SIND(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
*************** _Example_:
*** 18125,18135 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'SIND(X)'      'REAL(4) X'       'REAL(4)'      Fortran 2023
!      'DSIND(X)'     'REAL(8) X'       'REAL(8)'      GNU extension
!      'CSIND(X)'     'COMPLEX(4) X'    'COMPLEX(4)'   GNU extension
!      'ZSIND(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDSIND(X)'    'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  _See also_:
       Inverse function:
--- 18125,18135 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘SIND(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 2023
!      ‘DSIND(X)’     ‘REAL(8) X’       ‘REAL(8)’      GNU extension
!      ‘CSIND(X)’     ‘COMPLEX(4) X’    ‘COMPLEX(4)’   GNU extension
!      ‘ZSIND(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDSIND(X)’    ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 18140,18150 ****
  
  File: gfortran.info,  Node: SINH,  Next: SIZE,  Prev: SIND,  Up: Intrinsic Procedures
  
! 8.251 'SINH' -- Hyperbolic sine function
  ========================================
  
  _Description_:
!      'SINH(X)' computes the hyperbolic sine of X.
  
  _Standard_:
       Fortran 90 and later, for a complex argument Fortran 2008 or later,
--- 18140,18150 ----
  
  File: gfortran.info,  Node: SINH,  Next: SIZE,  Prev: SIND,  Up: Intrinsic Procedures
  
! 8.251 ‘SINH’ -- Hyperbolic sine function
  ========================================
  
  _Description_:
!      ‘SINH(X)’ computes the hyperbolic sine of X.
  
  _Standard_:
       Fortran 90 and later, for a complex argument Fortran 2008 or later,
*************** _Class_:
*** 18154,18163 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SINH(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X.
--- 18154,18163 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SINH(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X.
*************** _Example_:
*** 18171,18177 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'DSINH(X)'     'REAL(8) X'       'REAL(8)'      Fortran 90 and later
  
  _See also_:
       *note ASINH::
--- 18171,18177 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘DSINH(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 90 and later
  
  _See also_:
       *note ASINH::
*************** _See also_:
*** 18179,18185 ****
  
  File: gfortran.info,  Node: SIZE,  Next: SIZEOF,  Prev: SINH,  Up: Intrinsic Procedures
  
! 8.252 'SIZE' -- Determine the size of an array
  ==============================================
  
  _Description_:
--- 18179,18185 ----
  
  File: gfortran.info,  Node: SIZE,  Next: SIZEOF,  Prev: SINH,  Up: Intrinsic Procedures
  
! 8.252 ‘SIZE’ -- Determine the size of an array
  ==============================================
  
  _Description_:
*************** _Class_:
*** 18193,18213 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = SIZE(ARRAY[, DIM [, KIND]])'
  
  _Arguments_:
       ARRAY       Shall be an array of any type.  If ARRAY is a
                   pointer it must be associated and allocatable
                   arrays must be allocated.
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   and its value shall be in the range from 1 to n,
                   where n equals the rank of ARRAY.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
--- 18193,18213 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = SIZE(ARRAY[, DIM [, KIND]])’
  
  _Arguments_:
       ARRAY       Shall be an array of any type.  If ARRAY is a
                   pointer it must be associated and allocatable
                   arrays must be allocated.
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   and its value shall be in the range from 1 to n,
                   where n equals the rank of ARRAY.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
*************** _See also_:
*** 18222,18233 ****
  
  File: gfortran.info,  Node: SIZEOF,  Next: SLEEP,  Prev: SIZE,  Up: Intrinsic Procedures
  
! 8.253 'SIZEOF' -- Size in bytes of an expression
  ================================================
  
  _Description_:
!      'SIZEOF(X)' calculates the number of bytes of storage the
!      expression 'X' occupies.
  
  _Standard_:
       GNU extension
--- 18222,18233 ----
  
  File: gfortran.info,  Node: SIZEOF,  Next: SLEEP,  Prev: SIZE,  Up: Intrinsic Procedures
  
! 8.253 ‘SIZEOF’ -- Size in bytes of an expression
  ================================================
  
  _Description_:
!      ‘SIZEOF(X)’ calculates the number of bytes of storage the
!      expression ‘X’ occupies.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 18236,18242 ****
       Inquiry function
  
  _Syntax_:
!      'N = SIZEOF(X)'
  
  _Arguments_:
       X           The argument shall be of any type, rank or
--- 18236,18242 ----
       Inquiry function
  
  _Syntax_:
!      ‘N = SIZEOF(X)’
  
  _Arguments_:
       X           The argument shall be of any type, rank or
*************** _Return value_:
*** 18246,18254 ****
       The return value is of type integer and of the system-dependent
       kind C_SIZE_T (from the ISO_C_BINDING module).  Its value is the
       number of bytes occupied by the argument.  If the argument has the
!      'POINTER' attribute, the number of bytes of the storage area
       pointed to is returned.  If the argument is of a derived type with
!      'POINTER' or 'ALLOCATABLE' components, the return value does not
       account for the sizes of the data pointed to by these components.
       If the argument is polymorphic, the size according to the dynamic
       type is returned.  The argument may not be a procedure or procedure
--- 18246,18254 ----
       The return value is of type integer and of the system-dependent
       kind C_SIZE_T (from the ISO_C_BINDING module).  Its value is the
       number of bytes occupied by the argument.  If the argument has the
!      ‘POINTER’ attribute, the number of bytes of the storage area
       pointed to is returned.  If the argument is of a derived type with
!      ‘POINTER’ or ‘ALLOCATABLE’ components, the return value does not
       account for the sizes of the data pointed to by these components.
       If the argument is polymorphic, the size according to the dynamic
       type is returned.  The argument may not be a procedure or procedure
*************** _Example_:
*** 18261,18268 ****
               real :: r, s(5)
               print *, (sizeof(s)/sizeof(r) == 5)
               end
!      The example will print '.TRUE.' unless you are using a platform
!      where default 'REAL' variables are unusually padded.
  
  _See also_:
       *note C_SIZEOF::,
--- 18261,18268 ----
               real :: r, s(5)
               print *, (sizeof(s)/sizeof(r) == 5)
               end
!      The example will print ‘.TRUE.’ unless you are using a platform
!      where default ‘REAL’ variables are unusually padded.
  
  _See also_:
       *note C_SIZEOF::,
*************** _See also_:
*** 18271,18277 ****
  
  File: gfortran.info,  Node: SLEEP,  Next: SPACING,  Prev: SIZEOF,  Up: Intrinsic Procedures
  
! 8.254 'SLEEP' -- Sleep for the specified number of seconds
  ==========================================================
  
  _Description_:
--- 18271,18277 ----
  
  File: gfortran.info,  Node: SLEEP,  Next: SPACING,  Prev: SIZEOF,  Up: Intrinsic Procedures
  
! 8.254 ‘SLEEP’ -- Sleep for the specified number of seconds
  ==========================================================
  
  _Description_:
*************** _Class_:
*** 18285,18294 ****
       Subroutine
  
  _Syntax_:
!      'CALL SLEEP(SECONDS)'
  
  _Arguments_:
!      SECONDS     The type shall be of default 'INTEGER'.
  
  _Example_:
            program test_sleep
--- 18285,18294 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL SLEEP(SECONDS)’
  
  _Arguments_:
!      SECONDS     The type shall be of default ‘INTEGER’.
  
  _Example_:
            program test_sleep
*************** _Example_:
*** 18298,18304 ****
  
  File: gfortran.info,  Node: SPACING,  Next: SPREAD,  Prev: SLEEP,  Up: Intrinsic Procedures
  
! 8.255 'SPACING' -- Smallest distance between two numbers of a given type
  ========================================================================
  
  _Description_:
--- 18298,18304 ----
  
  File: gfortran.info,  Node: SPACING,  Next: SPREAD,  Prev: SLEEP,  Up: Intrinsic Procedures
  
! 8.255 ‘SPACING’ -- Smallest distance between two numbers of a given type
  ========================================================================
  
  _Description_:
*************** _Class_:
*** 18312,18321 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SPACING(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
  
  _Return value_:
       The result is of the same type as the input argument X.
--- 18312,18321 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SPACING(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
  
  _Return value_:
       The result is of the same type as the input argument X.
*************** _See also_:
*** 18335,18341 ****
  
  File: gfortran.info,  Node: SPREAD,  Next: SQRT,  Prev: SPACING,  Up: Intrinsic Procedures
  
! 8.256 'SPREAD' -- Add a dimension to an array
  =============================================
  
  _Description_:
--- 18335,18341 ----
  
  File: gfortran.info,  Node: SPREAD,  Next: SQRT,  Prev: SPACING,  Up: Intrinsic Procedures
  
! 8.256 ‘SPREAD’ -- Add a dimension to an array
  =============================================
  
  _Description_:
*************** _Class_:
*** 18349,18363 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = SPREAD(SOURCE, DIM, NCOPIES)'
  
  _Arguments_:
       SOURCE      Shall be a scalar or an array of any type and a
                   rank less than seven.
!      DIM         Shall be a scalar of type 'INTEGER' with a value
                   in the range from 1 to n+1, where n equals the
                   rank of SOURCE.
!      NCOPIES     Shall be a scalar of type 'INTEGER'.
  
  _Return value_:
       The result is an array of the same type as SOURCE and has rank n+1
--- 18349,18363 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = SPREAD(SOURCE, DIM, NCOPIES)’
  
  _Arguments_:
       SOURCE      Shall be a scalar or an array of any type and a
                   rank less than seven.
!      DIM         Shall be a scalar of type ‘INTEGER’ with a value
                   in the range from 1 to n+1, where n equals the
                   rank of SOURCE.
!      NCOPIES     Shall be a scalar of type ‘INTEGER’.
  
  _Return value_:
       The result is an array of the same type as SOURCE and has rank n+1
*************** _See also_:
*** 18376,18386 ****
  
  File: gfortran.info,  Node: SQRT,  Next: SRAND,  Prev: SPREAD,  Up: Intrinsic Procedures
  
! 8.257 'SQRT' -- Square-root function
  ====================================
  
  _Description_:
!      'SQRT(X)' computes the square root of X.
  
  _Standard_:
       Fortran 77 and later
--- 18376,18386 ----
  
  File: gfortran.info,  Node: SQRT,  Next: SRAND,  Prev: SPREAD,  Up: Intrinsic Procedures
  
! 8.257 ‘SQRT’ -- Square-root function
  ====================================
  
  _Description_:
!      ‘SQRT(X)’ computes the square root of X.
  
  _Standard_:
       Fortran 77 and later
*************** _Class_:
*** 18389,18401 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = SQRT(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
!      The return value is of type 'REAL' or 'COMPLEX'.  The kind type
       parameter is the same as X.
  
  _Example_:
--- 18389,18401 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = SQRT(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
!      The return value is of type ‘REAL’ or ‘COMPLEX’.  The kind type
       parameter is the same as X.
  
  _Example_:
*************** _Example_:
*** 18409,18429 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'SQRT(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DSQRT(X)'     'REAL(8) X'       'REAL(8)'      Fortran 77 and later
!      'CSQRT(X)'     'COMPLEX(4) X'    'COMPLEX(4)'   Fortran 77 and later
!      'ZSQRT(X)'     'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
!      'CDSQRT(X)'    'COMPLEX(8) X'    'COMPLEX(8)'   GNU extension
  
  
  File: gfortran.info,  Node: SRAND,  Next: STAT,  Prev: SQRT,  Up: Intrinsic Procedures
  
! 8.258 'SRAND' -- Reinitialize the random number generator
  =========================================================
  
  _Description_:
!      'SRAND' reinitializes the pseudo-random number generator called by
!      'RAND' and 'IRAND'.  The new seed used by the generator is
       specified by the required argument SEED.
  
  _Standard_:
--- 18409,18429 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘SQRT(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DSQRT(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
!      ‘CSQRT(X)’     ‘COMPLEX(4) X’    ‘COMPLEX(4)’   Fortran 77 and later
!      ‘ZSQRT(X)’     ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
!      ‘CDSQRT(X)’    ‘COMPLEX(8) X’    ‘COMPLEX(8)’   GNU extension
  
  
  File: gfortran.info,  Node: SRAND,  Next: STAT,  Prev: SQRT,  Up: Intrinsic Procedures
  
! 8.258 ‘SRAND’ -- Reinitialize the random number generator
  =========================================================
  
  _Description_:
!      ‘SRAND’ reinitializes the pseudo-random number generator called by
!      ‘RAND’ and ‘IRAND’.  The new seed used by the generator is
       specified by the required argument SEED.
  
  _Standard_:
*************** _Class_:
*** 18433,18458 ****
       Subroutine
  
  _Syntax_:
!      'CALL SRAND(SEED)'
  
  _Arguments_:
!      SEED        Shall be a scalar 'INTEGER(kind=4)'.
  
  _Return value_:
       Does not return anything.
  
  _Example_:
!      See 'RAND' and 'IRAND' for examples.
  
  _Notes_:
       The Fortran standard specifies the intrinsic subroutines
!      'RANDOM_SEED' to initialize the pseudo-random number generator and
!      'RANDOM_NUMBER' to generate pseudo-random numbers.  These
       subroutines should be used in new codes.
  
       Please note that in GNU Fortran, these two sets of intrinsics
!      ('RAND', 'IRAND' and 'SRAND' on the one hand, 'RANDOM_NUMBER' and
!      'RANDOM_SEED' on the other hand) access two independent
       pseudo-random number generators.
  
  _See also_:
--- 18433,18458 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL SRAND(SEED)’
  
  _Arguments_:
!      SEED        Shall be a scalar ‘INTEGER(kind=4)’.
  
  _Return value_:
       Does not return anything.
  
  _Example_:
!      See ‘RAND’ and ‘IRAND’ for examples.
  
  _Notes_:
       The Fortran standard specifies the intrinsic subroutines
!      ‘RANDOM_SEED’ to initialize the pseudo-random number generator and
!      ‘RANDOM_NUMBER’ to generate pseudo-random numbers.  These
       subroutines should be used in new codes.
  
       Please note that in GNU Fortran, these two sets of intrinsics
!      (‘RAND’, ‘IRAND’ and ‘SRAND’ on the one hand, ‘RANDOM_NUMBER’ and
!      ‘RANDOM_SEED’ on the other hand) access two independent
       pseudo-random number generators.
  
  _See also_:
*************** _See also_:
*** 18463,18469 ****
  
  File: gfortran.info,  Node: STAT,  Next: STORAGE_SIZE,  Prev: SRAND,  Up: Intrinsic Procedures
  
! 8.259 'STAT' -- Get file status
  ===============================
  
  _Description_:
--- 18463,18469 ----
  
  File: gfortran.info,  Node: STAT,  Next: STORAGE_SIZE,  Prev: SRAND,  Up: Intrinsic Procedures
  
! 8.259 ‘STAT’ -- Get file status
  ===============================
  
  _Description_:
*************** _Description_:
*** 18471,18491 ****
       required on the file itself, but execute (search) permission is
       required on all of the directories in path that lead to the file.
  
!      The elements that are obtained and stored in the array 'VALUES':
!      'VALUES(1)' Device ID
!      'VALUES(2)' Inode number
!      'VALUES(3)' File mode
!      'VALUES(4)' Number of links
!      'VALUES(5)' Owner's uid
!      'VALUES(6)' Owner's gid
!      'VALUES(7)' ID of device containing directory entry for file
                   (0 if not available)
!      'VALUES(8)' File size (bytes)
!      'VALUES(9)' Last access time
!      'VALUES(10)'Last modification time
!      'VALUES(11)'Last file status change time
!      'VALUES(12)'Preferred I/O block size (-1 if not available)
!      'VALUES(13)'Number of blocks allocated (-1 if not available)
  
       Not all these elements are relevant on all systems.  If an element
       is not relevant, it is returned as 0.
--- 18471,18491 ----
       required on the file itself, but execute (search) permission is
       required on all of the directories in path that lead to the file.
  
!      The elements that are obtained and stored in the array ‘VALUES’:
!      ‘VALUES(1)’ Device ID
!      ‘VALUES(2)’ Inode number
!      ‘VALUES(3)’ File mode
!      ‘VALUES(4)’ Number of links
!      ‘VALUES(5)’ Owner's uid
!      ‘VALUES(6)’ Owner's gid
!      ‘VALUES(7)’ ID of device containing directory entry for file
                   (0 if not available)
!      ‘VALUES(8)’ File size (bytes)
!      ‘VALUES(9)’ Last access time
!      ‘VALUES(10)’Last modification time
!      ‘VALUES(11)’Last file status change time
!      ‘VALUES(12)’Preferred I/O block size (-1 if not available)
!      ‘VALUES(13)’Number of blocks allocated (-1 if not available)
  
       Not all these elements are relevant on all systems.  If an element
       is not relevant, it is returned as 0.
*************** _Class_:
*** 18500,18513 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL STAT(NAME, VALUES [, STATUS])'
!      'STATUS = STAT(NAME, VALUES)'
  
  _Arguments_:
!      NAME        The type shall be 'CHARACTER', of the default
                   kind and a valid path within the file system.
!      VALUES      The type shall be 'INTEGER(4), DIMENSION(13)'.
!      STATUS      (Optional) status flag of type 'INTEGER(4)'.
                   Returns 0 on success and a system specific error
                   code otherwise.
  
--- 18500,18513 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL STAT(NAME, VALUES [, STATUS])’
!      ‘STATUS = STAT(NAME, VALUES)’
  
  _Arguments_:
!      NAME        The type shall be ‘CHARACTER’, of the default
                   kind and a valid path within the file system.
!      VALUES      The type shall be ‘INTEGER(4), DIMENSION(13)’.
!      STATUS      (Optional) status flag of type ‘INTEGER(4)’.
                   Returns 0 on success and a system specific error
                   code otherwise.
  
*************** _See also_:
*** 18544,18550 ****
  
  File: gfortran.info,  Node: STORAGE_SIZE,  Next: SUM,  Prev: STAT,  Up: Intrinsic Procedures
  
! 8.260 'STORAGE_SIZE' -- Storage size in bits
  ============================================
  
  _Description_:
--- 18544,18550 ----
  
  File: gfortran.info,  Node: STORAGE_SIZE,  Next: SUM,  Prev: STAT,  Up: Intrinsic Procedures
  
! 8.260 ‘STORAGE_SIZE’ -- Storage size in bits
  ============================================
  
  _Description_:
*************** _Standard_:
*** 18554,18560 ****
  _Class_:
       Inquiry function
  _Syntax_:
!      'RESULT = STORAGE_SIZE(A [, KIND])'
  
  _Arguments_:
       A           Shall be a scalar or array of any type.
--- 18554,18560 ----
  _Class_:
       Inquiry function
  _Syntax_:
!      ‘RESULT = STORAGE_SIZE(A [, KIND])’
  
  _Arguments_:
       A           Shall be a scalar or array of any type.
*************** _See also_:
*** 18574,18585 ****
  
  File: gfortran.info,  Node: SUM,  Next: SYMLNK,  Prev: STORAGE_SIZE,  Up: Intrinsic Procedures
  
! 8.261 'SUM' -- Sum of array elements
  ====================================
  
  _Description_:
       Adds the elements of ARRAY along dimension DIM if the corresponding
!      element in MASK is 'TRUE'.
  
  _Standard_:
       Fortran 90 and later
--- 18574,18585 ----
  
  File: gfortran.info,  Node: SUM,  Next: SYMLNK,  Prev: STORAGE_SIZE,  Up: Intrinsic Procedures
  
! 8.261 ‘SUM’ -- Sum of array elements
  ====================================
  
  _Description_:
       Adds the elements of ARRAY along dimension DIM if the corresponding
!      element in MASK is ‘TRUE’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 18588,18603 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = SUM(ARRAY[, MASK])'
!      'RESULT = SUM(ARRAY, DIM[, MASK])'
  
  _Arguments_:
!      ARRAY       Shall be an array of type 'INTEGER', 'REAL' or
!                  'COMPLEX'.
!      DIM         (Optional) shall be a scalar of type 'INTEGER'
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type 'LOGICAL' and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
--- 18588,18603 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = SUM(ARRAY[, MASK])’
!      ‘RESULT = SUM(ARRAY, DIM[, MASK])’
  
  _Arguments_:
!      ARRAY       Shall be an array of type ‘INTEGER’, ‘REAL’ or
!                  ‘COMPLEX’.
!      DIM         (Optional) shall be a scalar of type ‘INTEGER’
                   with a value in the range from 1 to n, where n
                   equals the rank of ARRAY.
!      MASK        (Optional) shall be of type ‘LOGICAL’ and either
                   be a scalar or an array of the same shape as
                   ARRAY.
  
*************** _See also_:
*** 18622,18637 ****
  
  File: gfortran.info,  Node: SYMLNK,  Next: SYSTEM,  Prev: SUM,  Up: Intrinsic Procedures
  
! 8.262 'SYMLNK' -- Create a symbolic link
  ========================================
  
  _Description_:
       Makes a symbolic link from file PATH1 to PATH2.  A null character
!      ('CHAR(0)') can be used to mark the end of the names in PATH1 and
       PATH2; otherwise, trailing blanks in the file names are ignored.
       If the STATUS argument is supplied, it contains 0 on success or a
!      nonzero error code upon return; see 'symlink(2)'.  If the system
!      does not supply 'symlink(2)', 'ENOSYS' is returned.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 18622,18637 ----
  
  File: gfortran.info,  Node: SYMLNK,  Next: SYSTEM,  Prev: SUM,  Up: Intrinsic Procedures
  
! 8.262 ‘SYMLNK’ -- Create a symbolic link
  ========================================
  
  _Description_:
       Makes a symbolic link from file PATH1 to PATH2.  A null character
!      (‘CHAR(0)’) can be used to mark the end of the names in PATH1 and
       PATH2; otherwise, trailing blanks in the file names are ignored.
       If the STATUS argument is supplied, it contains 0 on success or a
!      nonzero error code upon return; see ‘symlink(2)’.  If the system
!      does not supply ‘symlink(2)’, ‘ENOSYS’ is returned.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 18643,18655 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL SYMLNK(PATH1, PATH2 [, STATUS])'
!      'STATUS = SYMLNK(PATH1, PATH2)'
  
  _Arguments_:
!      PATH1       Shall be of default 'CHARACTER' type.
!      PATH2       Shall be of default 'CHARACTER' type.
!      STATUS      (Optional) Shall be of default 'INTEGER' type.
  
  _See also_:
       *note LINK::,
--- 18643,18655 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL SYMLNK(PATH1, PATH2 [, STATUS])’
!      ‘STATUS = SYMLNK(PATH1, PATH2)’
  
  _Arguments_:
!      PATH1       Shall be of default ‘CHARACTER’ type.
!      PATH2       Shall be of default ‘CHARACTER’ type.
!      STATUS      (Optional) Shall be of default ‘INTEGER’ type.
  
  _See also_:
       *note LINK::,
*************** _See also_:
*** 18658,18678 ****
  
  File: gfortran.info,  Node: SYSTEM,  Next: SYSTEM_CLOCK,  Prev: SYMLNK,  Up: Intrinsic Procedures
  
! 8.263 'SYSTEM' -- Execute a shell command
  =========================================
  
  _Description_:
!      Passes the command COMMAND to a shell (see 'system(3)').  If
       argument STATUS is present, it contains the value returned by
!      'system(3)', which is presumably 0 if the shell command succeeded.
       Note that which shell is used to invoke the command is
       system-dependent and environment-dependent.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the 'system' function need not be thread-safe.  It is the
!      responsibility of the user to ensure that 'system' is not called
       concurrently.
  
  _Standard_:
--- 18658,18678 ----
  
  File: gfortran.info,  Node: SYSTEM,  Next: SYSTEM_CLOCK,  Prev: SYMLNK,  Up: Intrinsic Procedures
  
! 8.263 ‘SYSTEM’ -- Execute a shell command
  =========================================
  
  _Description_:
!      Passes the command COMMAND to a shell (see ‘system(3)’).  If
       argument STATUS is present, it contains the value returned by
!      ‘system(3)’, which is presumably 0 if the shell command succeeded.
       Note that which shell is used to invoke the command is
       system-dependent and environment-dependent.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
  
!      Note that the ‘system’ function need not be thread-safe.  It is the
!      responsibility of the user to ensure that ‘system’ is not called
       concurrently.
  
  _Standard_:
*************** _Class_:
*** 18682,18693 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL SYSTEM(COMMAND [, STATUS])'
!      'STATUS = SYSTEM(COMMAND)'
  
  _Arguments_:
!      COMMAND     Shall be of default 'CHARACTER' type.
!      STATUS      (Optional) Shall be of default 'INTEGER' type.
  
  _See also_:
       *note EXECUTE_COMMAND_LINE::, which is part of the Fortran 2008
--- 18682,18693 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL SYSTEM(COMMAND [, STATUS])’
!      ‘STATUS = SYSTEM(COMMAND)’
  
  _Arguments_:
!      COMMAND     Shall be of default ‘CHARACTER’ type.
!      STATUS      (Optional) Shall be of default ‘INTEGER’ type.
  
  _See also_:
       *note EXECUTE_COMMAND_LINE::, which is part of the Fortran 2008
*************** _See also_:
*** 18696,18702 ****
  
  File: gfortran.info,  Node: SYSTEM_CLOCK,  Next: TAN,  Prev: SYSTEM,  Up: Intrinsic Procedures
  
! 8.264 'SYSTEM_CLOCK' -- Time function
  =====================================
  
  _Description_:
--- 18696,18702 ----
  
  File: gfortran.info,  Node: SYSTEM_CLOCK,  Next: TAN,  Prev: SYSTEM,  Up: Intrinsic Procedures
  
! 8.264 ‘SYSTEM_CLOCK’ -- Time function
  =====================================
  
  _Description_:
*************** _Description_:
*** 18713,18736 ****
       kinds), COUNT represents milliseconds, while for KIND=8 arguments
       (and larger integer kinds), COUNT typically represents micro- or
       nanoseconds depending on resolution of the underlying platform
!      clock.  COUNT_MAX usually equals 'HUGE(COUNT_MAX)'.  Note that the
       millisecond resolution of the KIND=4 version implies that the COUNT
       will wrap around in roughly 25 days.  In order to avoid issues with
       the wrap around and for more precise timing, please use the KIND=8
       version.
  
       If there is no clock, or querying the clock fails, COUNT is set to
!      '-HUGE(COUNT)', and COUNT_RATE and COUNT_MAX are set to zero.
  
       When running on a platform using the GNU C library (glibc) version
       2.16 or older, or a derivative thereof, the high resolution
       monotonic clock is available only when linking with the RT library.
!      This can be done explicitly by adding the '-lrt' flag when linking
       the application, but is also done implicitly when using OpenMP.
  
       On the Windows platform, the version with KIND=4 arguments uses the
!      'GetTickCount' function, whereas the KIND=8 version uses
!      'QueryPerformanceCounter' and 'QueryPerformanceCounterFrequency'.
       For more information, and potential caveats, please see the
       platform documentation.
  
--- 18713,18736 ----
       kinds), COUNT represents milliseconds, while for KIND=8 arguments
       (and larger integer kinds), COUNT typically represents micro- or
       nanoseconds depending on resolution of the underlying platform
!      clock.  COUNT_MAX usually equals ‘HUGE(COUNT_MAX)’.  Note that the
       millisecond resolution of the KIND=4 version implies that the COUNT
       will wrap around in roughly 25 days.  In order to avoid issues with
       the wrap around and for more precise timing, please use the KIND=8
       version.
  
       If there is no clock, or querying the clock fails, COUNT is set to
!      ‘-HUGE(COUNT)’, and COUNT_RATE and COUNT_MAX are set to zero.
  
       When running on a platform using the GNU C library (glibc) version
       2.16 or older, or a derivative thereof, the high resolution
       monotonic clock is available only when linking with the RT library.
!      This can be done explicitly by adding the ‘-lrt’ flag when linking
       the application, but is also done implicitly when using OpenMP.
  
       On the Windows platform, the version with KIND=4 arguments uses the
!      ‘GetTickCount’ function, whereas the KIND=8 version uses
!      ‘QueryPerformanceCounter’ and ‘QueryPerformanceCounterFrequency’.
       For more information, and potential caveats, please see the
       platform documentation.
  
*************** _Class_:
*** 18741,18755 ****
       Subroutine
  
  _Syntax_:
!      'CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])'
  
  _Arguments_:
       COUNT          (Optional) shall be a scalar of type
!                     'INTEGER' with 'INTENT(OUT)'.
       COUNT_RATE     (Optional) shall be a scalar of type
!                     'INTEGER' or 'REAL', with 'INTENT(OUT)'.
       COUNT_MAX      (Optional) shall be a scalar of type
!                     'INTEGER' with 'INTENT(OUT)'.
  
  _Example_:
            PROGRAM test_system_clock
--- 18741,18755 ----
       Subroutine
  
  _Syntax_:
!      ‘CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])’
  
  _Arguments_:
       COUNT          (Optional) shall be a scalar of type
!                     ‘INTEGER’ with ‘INTENT(OUT)’.
       COUNT_RATE     (Optional) shall be a scalar of type
!                     ‘INTEGER’ or ‘REAL’, with ‘INTENT(OUT)’.
       COUNT_MAX      (Optional) shall be a scalar of type
!                     ‘INTEGER’ with ‘INTENT(OUT)’.
  
  _Example_:
            PROGRAM test_system_clock
*************** _See also_:
*** 18765,18775 ****
  
  File: gfortran.info,  Node: TAN,  Next: TAND,  Prev: SYSTEM_CLOCK,  Up: Intrinsic Procedures
  
! 8.265 'TAN' -- Tangent function
  ===============================
  
  _Description_:
!      'TAN(X)' computes the tangent of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
--- 18765,18775 ----
  
  File: gfortran.info,  Node: TAN,  Next: TAND,  Prev: SYSTEM_CLOCK,  Up: Intrinsic Procedures
  
! 8.265 ‘TAN’ -- Tangent function
  ===============================
  
  _Description_:
!      ‘TAN(X)’ computes the tangent of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
*************** _Class_:
*** 18778,18787 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = TAN(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
--- 18778,18787 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = TAN(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X, and its value is in
*************** _Example_:
*** 18796,18803 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'TAN(X)'       'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DTAN(X)'      'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  _See also_:
       Inverse function:
--- 18796,18803 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘TAN(X)’       ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DTAN(X)’      ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 18808,18818 ****
  
  File: gfortran.info,  Node: TAND,  Next: TANH,  Prev: TAN,  Up: Intrinsic Procedures
  
! 8.266 'TAND' -- Tangent function, degrees
  =========================================
  
  _Description_:
!      'TAND(X)' computes the tangent of X in degrees.
  
  _Standard_:
       Fortran 2023
--- 18808,18818 ----
  
  File: gfortran.info,  Node: TAND,  Next: TANH,  Prev: TAN,  Up: Intrinsic Procedures
  
! 8.266 ‘TAND’ -- Tangent function, degrees
  =========================================
  
  _Description_:
!      ‘TAND(X)’ computes the tangent of X in degrees.
  
  _Standard_:
       Fortran 2023
*************** _Class_:
*** 18821,18830 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = TAND(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL'.
  
  _Return value_:
       The return value has same type and kind as X.
--- 18821,18830 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = TAND(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’.
  
  _Return value_:
       The return value has same type and kind as X.
*************** _Example_:
*** 18838,18845 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'TAND(X)'      'REAL(4) X'       'REAL(4)'      Fortran 2023
!      'DTAND(X)'     'REAL(8) X'       'REAL(8)'      GNU extension
  
  _See also_:
       Inverse function:
--- 18838,18845 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘TAND(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 2023
!      ‘DTAND(X)’     ‘REAL(8) X’       ‘REAL(8)’      GNU extension
  
  _See also_:
       Inverse function:
*************** _See also_:
*** 18850,18860 ****
  
  File: gfortran.info,  Node: TANH,  Next: THIS_IMAGE,  Prev: TAND,  Up: Intrinsic Procedures
  
! 8.267 'TANH' -- Hyperbolic tangent function
  ===========================================
  
  _Description_:
!      'TANH(X)' computes the hyperbolic tangent of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
--- 18850,18860 ----
  
  File: gfortran.info,  Node: TANH,  Next: THIS_IMAGE,  Prev: TAND,  Up: Intrinsic Procedures
  
! 8.267 ‘TANH’ -- Hyperbolic tangent function
  ===========================================
  
  _Description_:
!      ‘TANH(X)’ computes the hyperbolic tangent of X.
  
  _Standard_:
       Fortran 77 and later, for a complex argument Fortran 2008 or later
*************** _Class_:
*** 18863,18876 ****
       Elemental function
  
  _Syntax_:
!      'X = TANH(X)'
  
  _Arguments_:
!      X           The type shall be 'REAL' or 'COMPLEX'.
  
  _Return value_:
       The return value has same type and kind as X.  If X is complex, the
!      imaginary part of the result is in radians.  If X is 'REAL', the
       return value lies in the range - 1 \leq tanh(x) \leq 1 .
  
  _Example_:
--- 18863,18876 ----
       Elemental function
  
  _Syntax_:
!      ‘X = TANH(X)’
  
  _Arguments_:
!      X           The type shall be ‘REAL’ or ‘COMPLEX’.
  
  _Return value_:
       The return value has same type and kind as X.  If X is complex, the
!      imaginary part of the result is in radians.  If X is ‘REAL’, the
       return value lies in the range - 1 \leq tanh(x) \leq 1 .
  
  _Example_:
*************** _Example_:
*** 18882,18889 ****
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      'TANH(X)'      'REAL(4) X'       'REAL(4)'      Fortran 77 and later
!      'DTANH(X)'     'REAL(8) X'       'REAL(8)'      Fortran 77 and later
  
  _See also_:
       *note ATANH::
--- 18882,18889 ----
  _Specific names_:
       Name           Argument          Return type    Standard
       -------------------------------------------------------------------------
!      ‘TANH(X)’      ‘REAL(4) X’       ‘REAL(4)’      Fortran 77 and later
!      ‘DTANH(X)’     ‘REAL(8) X’       ‘REAL(8)’      Fortran 77 and later
  
  _See also_:
       *note ATANH::
*************** _See also_:
*** 18891,18897 ****
  
  File: gfortran.info,  Node: THIS_IMAGE,  Next: TIME,  Prev: TANH,  Up: Intrinsic Procedures
  
! 8.268 'THIS_IMAGE' -- Function that returns the cosubscript index of this image
  ===============================================================================
  
  _Description_:
--- 18891,18897 ----
  
  File: gfortran.info,  Node: THIS_IMAGE,  Next: TIME,  Prev: TANH,  Up: Intrinsic Procedures
  
! 8.268 ‘THIS_IMAGE’ -- Function that returns the cosubscript index of this image
  ===============================================================================
  
  _Description_:
*************** _Class_:
*** 18905,18913 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = THIS_IMAGE()'
!      'RESULT = THIS_IMAGE(DISTANCE)'
!      'RESULT = THIS_IMAGE(COARRAY [, DIM])'
  
  _Arguments_:
       DISTANCE    (optional, intent(in)) Nonnegative scalar
--- 18905,18913 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = THIS_IMAGE()’
!      ‘RESULT = THIS_IMAGE(DISTANCE)’
!      ‘RESULT = THIS_IMAGE(COARRAY [, DIM])’
  
  _Arguments_:
       DISTANCE    (optional, intent(in)) Nonnegative scalar
*************** _Return value_:
*** 18930,18936 ****
       rank-1 array with corank elements is returned, containing the
       cosubscripts for COARRAY specifying the invoking image.  If DIM is
       present, a scalar is returned, with the value of the DIM element of
!      'THIS_IMAGE(COARRAY)'.
  
  _Example_:
            INTEGER :: value[*]
--- 18930,18936 ----
       rank-1 array with corank elements is returned, containing the
       cosubscripts for COARRAY specifying the invoking image.  If DIM is
       present, a scalar is returned, with the value of the DIM element of
!      ‘THIS_IMAGE(COARRAY)’.
  
  _Example_:
            INTEGER :: value[*]
*************** _See also_:
*** 18954,18970 ****
  
  File: gfortran.info,  Node: TIME,  Next: TIME8,  Prev: THIS_IMAGE,  Up: Intrinsic Procedures
  
! 8.269 'TIME' -- Time function
  =============================
  
  _Description_:
       Returns the current time encoded as an integer (in the manner of
!      the function 'time(3)' in the C standard library).  This value is
       suitable for passing to *note CTIME::, *note GMTIME::, and *note
       LTIME::.
  
       This intrinsic is not fully portable, such as to systems with
!      32-bit 'INTEGER' types but supporting times wider than 32 bits.
       Therefore, the values returned by this intrinsic might be, or
       become, negative, or numerically less than previous values, during
       a single run of the compiled program.
--- 18954,18970 ----
  
  File: gfortran.info,  Node: TIME,  Next: TIME8,  Prev: THIS_IMAGE,  Up: Intrinsic Procedures
  
! 8.269 ‘TIME’ -- Time function
  =============================
  
  _Description_:
       Returns the current time encoded as an integer (in the manner of
!      the function ‘time(3)’ in the C standard library).  This value is
       suitable for passing to *note CTIME::, *note GMTIME::, and *note
       LTIME::.
  
       This intrinsic is not fully portable, such as to systems with
!      32-bit ‘INTEGER’ types but supporting times wider than 32 bits.
       Therefore, the values returned by this intrinsic might be, or
       become, negative, or numerically less than previous values, during
       a single run of the compiled program.
*************** _Class_:
*** 18980,18989 ****
       Function
  
  _Syntax_:
!      'RESULT = TIME()'
  
  _Return value_:
!      The return value is a scalar of type 'INTEGER(4)'.
  
  _See also_:
       *note DATE_AND_TIME::,
--- 18980,18989 ----
       Function
  
  _Syntax_:
!      ‘RESULT = TIME()’
  
  _Return value_:
!      The return value is a scalar of type ‘INTEGER(4)’.
  
  _See also_:
       *note DATE_AND_TIME::,
*************** _See also_:
*** 18996,19014 ****
  
  File: gfortran.info,  Node: TIME8,  Next: TINY,  Prev: TIME,  Up: Intrinsic Procedures
  
! 8.270 'TIME8' -- Time function (64-bit)
  =======================================
  
  _Description_:
       Returns the current time encoded as an integer (in the manner of
!      the function 'time(3)' in the C standard library).  This value is
       suitable for passing to *note CTIME::, *note GMTIME::, and *note
       LTIME::.
  
       _Warning:_ this intrinsic does not increase the range of the timing
!      values over that returned by 'time(3)'.  On a system with a 32-bit
!      'time(3)', 'TIME8' will return a 32-bit value, even though it is
!      converted to a 64-bit 'INTEGER(8)' value.  That means overflows of
       the 32-bit value can still occur.  Therefore, the values returned
       by this intrinsic might be or become negative or numerically less
       than previous values during a single run of the compiled program.
--- 18996,19014 ----
  
  File: gfortran.info,  Node: TIME8,  Next: TINY,  Prev: TIME,  Up: Intrinsic Procedures
  
! 8.270 ‘TIME8’ -- Time function (64-bit)
  =======================================
  
  _Description_:
       Returns the current time encoded as an integer (in the manner of
!      the function ‘time(3)’ in the C standard library).  This value is
       suitable for passing to *note CTIME::, *note GMTIME::, and *note
       LTIME::.
  
       _Warning:_ this intrinsic does not increase the range of the timing
!      values over that returned by ‘time(3)’.  On a system with a 32-bit
!      ‘time(3)’, ‘TIME8’ will return a 32-bit value, even though it is
!      converted to a 64-bit ‘INTEGER(8)’ value.  That means overflows of
       the 32-bit value can still occur.  Therefore, the values returned
       by this intrinsic might be or become negative or numerically less
       than previous values during a single run of the compiled program.
*************** _Class_:
*** 19020,19029 ****
       Function
  
  _Syntax_:
!      'RESULT = TIME8()'
  
  _Return value_:
!      The return value is a scalar of type 'INTEGER(8)'.
  
  _See also_:
       *note DATE_AND_TIME::,
--- 19020,19029 ----
       Function
  
  _Syntax_:
!      ‘RESULT = TIME8()’
  
  _Return value_:
!      The return value is a scalar of type ‘INTEGER(8)’.
  
  _See also_:
       *note DATE_AND_TIME::,
*************** _See also_:
*** 19036,19047 ****
  
  File: gfortran.info,  Node: TINY,  Next: TRAILZ,  Prev: TIME8,  Up: Intrinsic Procedures
  
! 8.271 'TINY' -- Smallest positive number of a real kind
  =======================================================
  
  _Description_:
!      'TINY(X)' returns the smallest positive (non zero) number in the
!      model of the type of 'X'.
  
  _Standard_:
       Fortran 90 and later
--- 19036,19047 ----
  
  File: gfortran.info,  Node: TINY,  Next: TRAILZ,  Prev: TIME8,  Up: Intrinsic Procedures
  
! 8.271 ‘TINY’ -- Smallest positive number of a real kind
  =======================================================
  
  _Description_:
!      ‘TINY(X)’ returns the smallest positive (non zero) number in the
!      model of the type of ‘X’.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 19050,19074 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = TINY(X)'
  
  _Arguments_:
!      X           Shall be of type 'REAL'.
  
  _Return value_:
       The return value is of the same type and kind as X
  
  _Example_:
!      See 'HUGE' for an example.
  
  
  File: gfortran.info,  Node: TRAILZ,  Next: TRANSFER,  Prev: TINY,  Up: Intrinsic Procedures
  
! 8.272 'TRAILZ' -- Number of trailing zero bits of an integer
  ============================================================
  
  _Description_:
!      'TRAILZ' returns the number of trailing zero bits of an integer.
  
  _Standard_:
       Fortran 2008 and later
--- 19050,19074 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = TINY(X)’
  
  _Arguments_:
!      X           Shall be of type ‘REAL’.
  
  _Return value_:
       The return value is of the same type and kind as X
  
  _Example_:
!      See ‘HUGE’ for an example.
  
  
  File: gfortran.info,  Node: TRAILZ,  Next: TRANSFER,  Prev: TINY,  Up: Intrinsic Procedures
  
! 8.272 ‘TRAILZ’ -- Number of trailing zero bits of an integer
  ============================================================
  
  _Description_:
!      ‘TRAILZ’ returns the number of trailing zero bits of an integer.
  
  _Standard_:
       Fortran 2008 and later
*************** _Class_:
*** 19077,19090 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = TRAILZ(I)'
  
  _Arguments_:
!      I           Shall be of type 'INTEGER'.
  
  _Return value_:
!      The type of the return value is the default 'INTEGER'.  If all the
!      bits of 'I' are zero, the result value is 'BIT_SIZE(I)'.
  
  _Example_:
            PROGRAM test_trailz
--- 19077,19090 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = TRAILZ(I)’
  
  _Arguments_:
!      I           Shall be of type ‘INTEGER’.
  
  _Return value_:
!      The type of the return value is the default ‘INTEGER’.  If all the
!      bits of ‘I’ are zero, the result value is ‘BIT_SIZE(I)’.
  
  _Example_:
            PROGRAM test_trailz
*************** _See also_:
*** 19100,19106 ****
  
  File: gfortran.info,  Node: TRANSFER,  Next: TRANSPOSE,  Prev: TRAILZ,  Up: Intrinsic Procedures
  
! 8.273 'TRANSFER' -- Transfer bit patterns
  =========================================
  
  _Description_:
--- 19100,19106 ----
  
  File: gfortran.info,  Node: TRANSFER,  Next: TRANSPOSE,  Prev: TRAILZ,  Up: Intrinsic Procedures
  
! 8.273 ‘TRANSFER’ -- Transfer bit patterns
  =========================================
  
  _Description_:
*************** _Class_:
*** 19118,19129 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = TRANSFER(SOURCE, MOLD[, SIZE])'
  
  _Arguments_:
       SOURCE      Shall be a scalar or an array of any type.
       MOLD        Shall be a scalar or an array of any type.
!      SIZE        (Optional) shall be a scalar of type 'INTEGER'.
  
  _Return value_:
       The result has the same type as MOLD, with the bit level
--- 19118,19129 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = TRANSFER(SOURCE, MOLD[, SIZE])’
  
  _Arguments_:
       SOURCE      Shall be a scalar or an array of any type.
       MOLD        Shall be a scalar or an array of any type.
!      SIZE        (Optional) shall be a scalar of type ‘INTEGER’.
  
  _Return value_:
       The result has the same type as MOLD, with the bit level
*************** _Return value_:
*** 19142,19149 ****
       valid representation of a variable of the same type as MOLD, the
       results are undefined, and subsequent operations on the result
       cannot be guaranteed to produce sensible behavior.  For example, it
!      is possible to create 'LOGICAL' variables for which 'VAR' and
!      '.NOT.VAR' both appear to be true.
  
  _Example_:
            PROGRAM test_transfer
--- 19142,19149 ----
       valid representation of a variable of the same type as MOLD, the
       results are undefined, and subsequent operations on the result
       cannot be guaranteed to produce sensible behavior.  For example, it
!      is possible to create ‘LOGICAL’ variables for which ‘VAR’ and
!      ‘.NOT.VAR’ both appear to be true.
  
  _Example_:
            PROGRAM test_transfer
*************** _Example_:
*** 19154,19165 ****
  
  File: gfortran.info,  Node: TRANSPOSE,  Next: TRIM,  Prev: TRANSFER,  Up: Intrinsic Procedures
  
! 8.274 'TRANSPOSE' -- Transpose an array of rank two
  ===================================================
  
  _Description_:
       Transpose an array of rank two.  Element (i, j) of the result has
!      the value 'MATRIX(j, i)', for all i, j.
  
  _Standard_:
       Fortran 90 and later
--- 19154,19165 ----
  
  File: gfortran.info,  Node: TRANSPOSE,  Next: TRIM,  Prev: TRANSFER,  Up: Intrinsic Procedures
  
! 8.274 ‘TRANSPOSE’ -- Transpose an array of rank two
  ===================================================
  
  _Description_:
       Transpose an array of rank two.  Element (i, j) of the result has
!      the value ‘MATRIX(j, i)’, for all i, j.
  
  _Standard_:
       Fortran 90 and later
*************** _Class_:
*** 19168,19187 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = TRANSPOSE(MATRIX)'
  
  _Arguments_:
       MATRIX      Shall be an array of any type and have a rank of
                   two.
  
  _Return value_:
!      The result has the same type as MATRIX, and has shape '(/ m, n /)'
!      if MATRIX has shape '(/ n, m /)'.
  
  
  File: gfortran.info,  Node: TRIM,  Next: TTYNAM,  Prev: TRANSPOSE,  Up: Intrinsic Procedures
  
! 8.275 'TRIM' -- Remove trailing blank characters of a string
  ============================================================
  
  _Description_:
--- 19168,19187 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = TRANSPOSE(MATRIX)’
  
  _Arguments_:
       MATRIX      Shall be an array of any type and have a rank of
                   two.
  
  _Return value_:
!      The result has the same type as MATRIX, and has shape ‘(/ m, n /)’
!      if MATRIX has shape ‘(/ n, m /)’.
  
  
  File: gfortran.info,  Node: TRIM,  Next: TTYNAM,  Prev: TRANSPOSE,  Up: Intrinsic Procedures
  
! 8.275 ‘TRIM’ -- Remove trailing blank characters of a string
  ============================================================
  
  _Description_:
*************** _Class_:
*** 19194,19206 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = TRIM(STRING)'
  
  _Arguments_:
!      STRING      Shall be a scalar of type 'CHARACTER'.
  
  _Return value_:
!      A scalar of type 'CHARACTER' which length is that of STRING less
       the number of trailing blanks.
  
  _Example_:
--- 19194,19206 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = TRIM(STRING)’
  
  _Arguments_:
!      STRING      Shall be a scalar of type ‘CHARACTER’.
  
  _Return value_:
!      A scalar of type ‘CHARACTER’ which length is that of STRING less
       the number of trailing blanks.
  
  _Example_:
*************** _See also_:
*** 19216,19227 ****
  
  File: gfortran.info,  Node: TTYNAM,  Next: UBOUND,  Prev: TRIM,  Up: Intrinsic Procedures
  
! 8.276 'TTYNAM' -- Get the name of a terminal device
  ===================================================
  
  _Description_:
       Get the name of a terminal device.  For more information, see
!      'ttyname(3)'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 19216,19227 ----
  
  File: gfortran.info,  Node: TTYNAM,  Next: UBOUND,  Prev: TRIM,  Up: Intrinsic Procedures
  
! 8.276 ‘TTYNAM’ -- Get the name of a terminal device
  ===================================================
  
  _Description_:
       Get the name of a terminal device.  For more information, see
!      ‘ttyname(3)’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 19233,19244 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL TTYNAM(UNIT, NAME)'
!      'NAME = TTYNAM(UNIT)'
  
  _Arguments_:
!      UNIT        Shall be a scalar 'INTEGER'.
!      NAME        Shall be of type 'CHARACTER'.
  
  _Example_:
            PROGRAM test_ttynam
--- 19233,19244 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL TTYNAM(UNIT, NAME)’
!      ‘NAME = TTYNAM(UNIT)’
  
  _Arguments_:
!      UNIT        Shall be a scalar ‘INTEGER’.
!      NAME        Shall be of type ‘CHARACTER’.
  
  _Example_:
            PROGRAM test_ttynam
*************** _See also_:
*** 19254,19260 ****
  
  File: gfortran.info,  Node: UBOUND,  Next: UCOBOUND,  Prev: TTYNAM,  Up: Intrinsic Procedures
  
! 8.277 'UBOUND' -- Upper dimension bounds of an array
  ====================================================
  
  _Description_:
--- 19254,19260 ----
  
  File: gfortran.info,  Node: UBOUND,  Next: UCOBOUND,  Prev: TTYNAM,  Up: Intrinsic Procedures
  
! 8.277 ‘UBOUND’ -- Upper dimension bounds of an array
  ====================================================
  
  _Description_:
*************** _Class_:
*** 19267,19283 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = UBOUND(ARRAY [, DIM [, KIND]])'
  
  _Arguments_:
       ARRAY       Shall be an array, of any type.
!      DIM         (Optional) Shall be a scalar 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the upper bounds of ARRAY.  If
       DIM is present, the result is a scalar corresponding to the upper
--- 19267,19283 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = UBOUND(ARRAY [, DIM [, KIND]])’
  
  _Arguments_:
       ARRAY       Shall be an array, of any type.
!      DIM         (Optional) Shall be a scalar ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the upper bounds of ARRAY.  If
       DIM is present, the result is a scalar corresponding to the upper
*************** _See also_:
*** 19293,19299 ****
  
  File: gfortran.info,  Node: UCOBOUND,  Next: UMASK,  Prev: UBOUND,  Up: Intrinsic Procedures
  
! 8.278 'UCOBOUND' -- Upper codimension bounds of an array
  ========================================================
  
  _Description_:
--- 19293,19299 ----
  
  File: gfortran.info,  Node: UCOBOUND,  Next: UMASK,  Prev: UBOUND,  Up: Intrinsic Procedures
  
! 8.278 ‘UCOBOUND’ -- Upper codimension bounds of an array
  ========================================================
  
  _Description_:
*************** _Class_:
*** 19306,19322 ****
       Inquiry function
  
  _Syntax_:
!      'RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])'
  
  _Arguments_:
       ARRAY       Shall be an coarray, of any type.
!      DIM         (Optional) Shall be a scalar 'INTEGER'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the lower cobounds of COARRAY.
       If DIM is present, the result is a scalar corresponding to the
--- 19306,19322 ----
       Inquiry function
  
  _Syntax_:
!      ‘RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])’
  
  _Arguments_:
       ARRAY       Shall be an coarray, of any type.
!      DIM         (Optional) Shall be a scalar ‘INTEGER’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.  If DIM is
       absent, the result is an array of the lower cobounds of COARRAY.
       If DIM is present, the result is a scalar corresponding to the
*************** _See also_:
*** 19329,19341 ****
  
  File: gfortran.info,  Node: UMASK,  Next: UNLINK,  Prev: UCOBOUND,  Up: Intrinsic Procedures
  
! 8.279 'UMASK' -- Set the file creation mask
  ===========================================
  
  _Description_:
       Sets the file creation mask to MASK.  If called as a function, it
       returns the old value.  If called as a subroutine and argument OLD
!      if it is supplied, it is set to the old value.  See 'umask(2)'.
  
  _Standard_:
       GNU extension
--- 19329,19341 ----
  
  File: gfortran.info,  Node: UMASK,  Next: UNLINK,  Prev: UCOBOUND,  Up: Intrinsic Procedures
  
! 8.279 ‘UMASK’ -- Set the file creation mask
  ===========================================
  
  _Description_:
       Sets the file creation mask to MASK.  If called as a function, it
       returns the old value.  If called as a subroutine and argument OLD
!      if it is supplied, it is set to the old value.  See ‘umask(2)’.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 19344,19368 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL UMASK(MASK [, OLD])'
!      'OLD = UMASK(MASK)'
  
  _Arguments_:
!      MASK        Shall be a scalar of type 'INTEGER'.
!      OLD         (Optional) Shall be a scalar of type 'INTEGER'.
  
  
  File: gfortran.info,  Node: UNLINK,  Next: UNPACK,  Prev: UMASK,  Up: Intrinsic Procedures
  
! 8.280 'UNLINK' -- Remove a file from the file system
  ====================================================
  
  _Description_:
!      Unlinks the file PATH.  A null character ('CHAR(0)') can be used to
       mark the end of the name in PATH; otherwise, trailing blanks in the
       file name are ignored.  If the STATUS argument is supplied, it
       contains 0 on success or a nonzero error code upon return; see
!      'unlink(2)'.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
--- 19344,19368 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL UMASK(MASK [, OLD])’
!      ‘OLD = UMASK(MASK)’
  
  _Arguments_:
!      MASK        Shall be a scalar of type ‘INTEGER’.
!      OLD         (Optional) Shall be a scalar of type ‘INTEGER’.
  
  
  File: gfortran.info,  Node: UNLINK,  Next: UNPACK,  Prev: UMASK,  Up: Intrinsic Procedures
  
! 8.280 ‘UNLINK’ -- Remove a file from the file system
  ====================================================
  
  _Description_:
!      Unlinks the file PATH.  A null character (‘CHAR(0)’) can be used to
       mark the end of the name in PATH; otherwise, trailing blanks in the
       file name are ignored.  If the STATUS argument is supplied, it
       contains 0 on success or a nonzero error code upon return; see
!      ‘unlink(2)’.
  
       This intrinsic is provided in both subroutine and function forms;
       however, only one form can be used in any given program unit.
*************** _Class_:
*** 19374,19385 ****
       Subroutine, function
  
  _Syntax_:
!      'CALL UNLINK(PATH [, STATUS])'
!      'STATUS = UNLINK(PATH)'
  
  _Arguments_:
!      PATH        Shall be of default 'CHARACTER' type.
!      STATUS      (Optional) Shall be of default 'INTEGER' type.
  
  _See also_:
       *note LINK::,
--- 19374,19385 ----
       Subroutine, function
  
  _Syntax_:
!      ‘CALL UNLINK(PATH [, STATUS])’
!      ‘STATUS = UNLINK(PATH)’
  
  _Arguments_:
!      PATH        Shall be of default ‘CHARACTER’ type.
!      STATUS      (Optional) Shall be of default ‘INTEGER’ type.
  
  _See also_:
       *note LINK::,
*************** _See also_:
*** 19388,19394 ****
  
  File: gfortran.info,  Node: UNPACK,  Next: VERIFY,  Prev: UNLINK,  Up: Intrinsic Procedures
  
! 8.281 'UNPACK' -- Unpack an array of rank one into an array
  ===========================================================
  
  _Description_:
--- 19388,19394 ----
  
  File: gfortran.info,  Node: UNPACK,  Next: VERIFY,  Prev: UNLINK,  Up: Intrinsic Procedures
  
! 8.281 ‘UNPACK’ -- Unpack an array of rank one into an array
  ===========================================================
  
  _Description_:
*************** _Class_:
*** 19401,19418 ****
       Transformational function
  
  _Syntax_:
!      'RESULT = UNPACK(VECTOR, MASK, FIELD)'
  
  _Arguments_:
       VECTOR      Shall be an array of any type and rank one.  It
                   shall have at least as many elements as MASK has
!                  'TRUE' values.
!      MASK        Shall be an array of type 'LOGICAL'.
       FIELD       Shall be of the same type as VECTOR and have the
                   same shape as MASK.
  
  _Return value_:
!      The resulting array corresponds to FIELD with 'TRUE' elements of
       MASK replaced by values from VECTOR in array element order.
  
  _Example_:
--- 19401,19418 ----
       Transformational function
  
  _Syntax_:
!      ‘RESULT = UNPACK(VECTOR, MASK, FIELD)’
  
  _Arguments_:
       VECTOR      Shall be an array of any type and rank one.  It
                   shall have at least as many elements as MASK has
!                  ‘TRUE’ values.
!      MASK        Shall be an array of type ‘LOGICAL’.
       FIELD       Shall be of the same type as VECTOR and have the
                   same shape as MASK.
  
  _Return value_:
!      The resulting array corresponds to FIELD with ‘TRUE’ elements of
       MASK replaced by values from VECTOR in array element order.
  
  _Example_:
*************** _See also_:
*** 19432,19447 ****
  
  File: gfortran.info,  Node: VERIFY,  Next: XOR,  Prev: UNPACK,  Up: Intrinsic Procedures
  
! 8.282 'VERIFY' -- Scan a string for characters not a given set
  ==============================================================
  
  _Description_:
       Verifies that all the characters in STRING belong to the set of
       characters in SET.
  
!      If BACK is either absent or equals 'FALSE', this function returns
       the position of the leftmost character of STRING that is not in
!      SET.  If BACK equals 'TRUE', the rightmost position is returned.
       If all characters of STRING are found in SET, the result is zero.
  
  _Standard_:
--- 19432,19447 ----
  
  File: gfortran.info,  Node: VERIFY,  Next: XOR,  Prev: UNPACK,  Up: Intrinsic Procedures
  
! 8.282 ‘VERIFY’ -- Scan a string for characters not a given set
  ==============================================================
  
  _Description_:
       Verifies that all the characters in STRING belong to the set of
       characters in SET.
  
!      If BACK is either absent or equals ‘FALSE’, this function returns
       the position of the leftmost character of STRING that is not in
!      SET.  If BACK equals ‘TRUE’, the rightmost position is returned.
       If all characters of STRING are found in SET, the result is zero.
  
  _Standard_:
*************** _Class_:
*** 19451,19468 ****
       Elemental function
  
  _Syntax_:
!      'RESULT = VERIFY(STRING, SET[, BACK [, KIND]])'
  
  _Arguments_:
!      STRING      Shall be of type 'CHARACTER'.
!      SET         Shall be of type 'CHARACTER'.
!      BACK        (Optional) shall be of type 'LOGICAL'.
!      KIND        (Optional) A scalar 'INTEGER' constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type 'INTEGER' and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
--- 19451,19468 ----
       Elemental function
  
  _Syntax_:
!      ‘RESULT = VERIFY(STRING, SET[, BACK [, KIND]])’
  
  _Arguments_:
!      STRING      Shall be of type ‘CHARACTER’.
!      SET         Shall be of type ‘CHARACTER’.
!      BACK        (Optional) shall be of type ‘LOGICAL’.
!      KIND        (Optional) A scalar ‘INTEGER’ constant
                   expression indicating the kind parameter of the
                   result.
  
  _Return value_:
!      The return value is of type ‘INTEGER’ and of kind KIND.  If KIND is
       absent, the return value is of default integer kind.
  
  _Example_:
*************** _See also_:
*** 19481,19487 ****
  
  File: gfortran.info,  Node: XOR,  Prev: VERIFY,  Up: Intrinsic Procedures
  
! 8.283 'XOR' -- Bitwise logical exclusive OR
  ===========================================
  
  _Description_:
--- 19481,19487 ----
  
  File: gfortran.info,  Node: XOR,  Prev: VERIFY,  Up: Intrinsic Procedures
  
! 8.283 ‘XOR’ -- Bitwise logical exclusive OR
  ===========================================
  
  _Description_:
*************** _Description_:
*** 19490,19496 ****
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  For integer arguments, programmers should consider
       the use of the *note IEOR:: intrinsic and for logical arguments the
!      '.NEQV.' operator, which are both defined by the Fortran standard.
  
  _Standard_:
       GNU extension
--- 19490,19496 ----
       This intrinsic routine is provided for backwards compatibility with
       GNU Fortran 77.  For integer arguments, programmers should consider
       the use of the *note IEOR:: intrinsic and for logical arguments the
!      ‘.NEQV.’ operator, which are both defined by the Fortran standard.
  
  _Standard_:
       GNU extension
*************** _Class_:
*** 19499,19521 ****
       Function
  
  _Syntax_:
!      'RESULT = XOR(I, J)'
  
  _Arguments_:
!      I           The type shall be either a scalar 'INTEGER' type
!                  or a scalar 'LOGICAL' type or a
                   boz-literal-constant.
       J           The type shall be the same as the type of I or a
                   boz-literal-constant.  I and J shall not both be
                   boz-literal-constants.  If either I and J is a
                   boz-literal-constant, then the other argument
!                  must be a scalar 'INTEGER'.
  
  _Return value_:
!      The return type is either a scalar 'INTEGER' or a scalar 'LOGICAL'.
       If the kind type parameters differ, then the smaller kind type is
       implicitly converted to larger kind, and the return has the larger
!      kind.  A boz-literal-constant is converted to an 'INTEGER' with the
       kind type parameter of the other argument as-if a call to *note
       INT:: occurred.
  
--- 19499,19521 ----
       Function
  
  _Syntax_:
!      ‘RESULT = XOR(I, J)’
  
  _Arguments_:
!      I           The type shall be either a scalar ‘INTEGER’ type
!                  or a scalar ‘LOGICAL’ type or a
                   boz-literal-constant.
       J           The type shall be the same as the type of I or a
                   boz-literal-constant.  I and J shall not both be
                   boz-literal-constants.  If either I and J is a
                   boz-literal-constant, then the other argument
!                  must be a scalar ‘INTEGER’.
  
  _Return value_:
!      The return type is either a scalar ‘INTEGER’ or a scalar ‘LOGICAL’.
       If the kind type parameters differ, then the smaller kind type is
       implicitly converted to larger kind, and the return has the larger
!      kind.  A boz-literal-constant is converted to an ‘INTEGER’ with the
       kind type parameter of the other argument as-if a call to *note
       INT:: occurred.
  
*************** File: gfortran.info,  Node: Intrinsic Mo
*** 19550,19670 ****
  
  File: gfortran.info,  Node: ISO_FORTRAN_ENV,  Next: ISO_C_BINDING,  Up: Intrinsic Modules
  
! 9.1 'ISO_FORTRAN_ENV'
  =====================
  
  _Standard_:
       Fortran 2003 and later, except when otherwise noted
  
!    The 'ISO_FORTRAN_ENV' module provides the following scalar
  default-integer named constants:
  
! 'ATOMIC_INT_KIND':
       Default-kind integer constant to be used as kind parameter when
       defining integer variables used in atomic operations.  (Fortran
       2008 or later.)
  
! 'ATOMIC_LOGICAL_KIND':
       Default-kind integer constant to be used as kind parameter when
       defining logical variables used in atomic operations.  (Fortran
       2008 or later.)
  
! 'CHARACTER_KINDS':
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the 'CHARACTER' type.  (Fortran 2008
       or later.)
  
! 'CHARACTER_STORAGE_SIZE':
       Size in bits of the character storage unit.
  
! 'ERROR_UNIT':
       Identifies the preconnected unit used for error reporting.
  
! 'FILE_STORAGE_SIZE':
       Size in bits of the file-storage unit.
  
! 'INPUT_UNIT':
!      Identifies the preconnected unit identified by the asterisk ('*')
!      in 'READ' statement.
  
! 'INT8', 'INT16', 'INT32', 'INT64':
       Kind type parameters to specify an INTEGER type with a storage size
       of 16, 32, and 64 bits.  It is negative if a target platform does
       not support the particular kind.  (Fortran 2008 or later.)
  
! 'INTEGER_KINDS':
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the 'INTEGER' type.  (Fortran 2008 or
       later.)
  
! 'IOSTAT_END':
!      The value assigned to the variable passed to the 'IOSTAT='
       specifier of an input/output statement if an end-of-file condition
       occurred.
  
! 'IOSTAT_EOR':
!      The value assigned to the variable passed to the 'IOSTAT='
       specifier of an input/output statement if an end-of-record
       condition occurred.
  
! 'IOSTAT_INQUIRE_INTERNAL_UNIT':
!      Scalar default-integer constant, used by 'INQUIRE' for the
!      'IOSTAT=' specifier to denote an that a unit number identifies an
       internal unit.  (Fortran 2008 or later.)
  
! 'NUMERIC_STORAGE_SIZE':
       The size in bits of the numeric storage unit.
  
! 'LOGICAL_KINDS':
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the 'LOGICAL' type.  (Fortran 2008 or
       later.)
  
! 'OUTPUT_UNIT':
!      Identifies the preconnected unit identified by the asterisk ('*')
!      in 'WRITE' statement.
  
! 'REAL32', 'REAL64', 'REAL128':
       Kind type parameters to specify a REAL type with a storage size of
       32, 64, and 128 bits.  It is negative if a target platform does not
       support the particular kind.  (Fortran 2008 or later.)
  
! 'REAL_KINDS':
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the 'REAL' type.  (Fortran 2008 or
       later.)
  
! 'STAT_LOCKED':
       Scalar default-integer constant used as STAT= return value by
!      'LOCK' to denote that the lock variable is locked by the executing
       image.  (Fortran 2008 or later.)
  
! 'STAT_LOCKED_OTHER_IMAGE':
       Scalar default-integer constant used as STAT= return value by
!      'UNLOCK' to denote that the lock variable is locked by another
       image.  (Fortran 2008 or later.)
  
! 'STAT_STOPPED_IMAGE':
       Positive, scalar default-integer constant used as STAT= return
       value if the argument in the statement requires synchronisation
       with an image, which has initiated the termination of the
       execution.  (Fortran 2008 or later.)
  
! 'STAT_FAILED_IMAGE':
       Positive, scalar default-integer constant used as STAT= return
       value if the argument in the statement requires communication with
       an image, which has is in the failed state.  (TS 18508 or later.)
  
! 'STAT_UNLOCKED':
       Scalar default-integer constant used as STAT= return value by
!      'UNLOCK' to denote that the lock variable is unlocked.  (Fortran
       2008 or later.)
  
     The module provides the following derived type:
  
! 'LOCK_TYPE':
!      Derived type with private components to be use with the 'LOCK' and
!      'UNLOCK' statement.  A variable of its type has to be always
       declared as coarray and may not appear in a variable-definition
       context.  (Fortran 2008 or later.)
  
--- 19550,19670 ----
  
  File: gfortran.info,  Node: ISO_FORTRAN_ENV,  Next: ISO_C_BINDING,  Up: Intrinsic Modules
  
! 9.1 ‘ISO_FORTRAN_ENV’
  =====================
  
  _Standard_:
       Fortran 2003 and later, except when otherwise noted
  
!    The ‘ISO_FORTRAN_ENV’ module provides the following scalar
  default-integer named constants:
  
! ‘ATOMIC_INT_KIND’:
       Default-kind integer constant to be used as kind parameter when
       defining integer variables used in atomic operations.  (Fortran
       2008 or later.)
  
! ‘ATOMIC_LOGICAL_KIND’:
       Default-kind integer constant to be used as kind parameter when
       defining logical variables used in atomic operations.  (Fortran
       2008 or later.)
  
! ‘CHARACTER_KINDS’:
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the ‘CHARACTER’ type.  (Fortran 2008
       or later.)
  
! ‘CHARACTER_STORAGE_SIZE’:
       Size in bits of the character storage unit.
  
! ‘ERROR_UNIT’:
       Identifies the preconnected unit used for error reporting.
  
! ‘FILE_STORAGE_SIZE’:
       Size in bits of the file-storage unit.
  
! ‘INPUT_UNIT’:
!      Identifies the preconnected unit identified by the asterisk (‘*’)
!      in ‘READ’ statement.
  
! ‘INT8’, ‘INT16’, ‘INT32’, ‘INT64’:
       Kind type parameters to specify an INTEGER type with a storage size
       of 16, 32, and 64 bits.  It is negative if a target platform does
       not support the particular kind.  (Fortran 2008 or later.)
  
! ‘INTEGER_KINDS’:
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the ‘INTEGER’ type.  (Fortran 2008 or
       later.)
  
! ‘IOSTAT_END’:
!      The value assigned to the variable passed to the ‘IOSTAT=’
       specifier of an input/output statement if an end-of-file condition
       occurred.
  
! ‘IOSTAT_EOR’:
!      The value assigned to the variable passed to the ‘IOSTAT=’
       specifier of an input/output statement if an end-of-record
       condition occurred.
  
! ‘IOSTAT_INQUIRE_INTERNAL_UNIT’:
!      Scalar default-integer constant, used by ‘INQUIRE’ for the
!      ‘IOSTAT=’ specifier to denote an that a unit number identifies an
       internal unit.  (Fortran 2008 or later.)
  
! ‘NUMERIC_STORAGE_SIZE’:
       The size in bits of the numeric storage unit.
  
! ‘LOGICAL_KINDS’:
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the ‘LOGICAL’ type.  (Fortran 2008 or
       later.)
  
! ‘OUTPUT_UNIT’:
!      Identifies the preconnected unit identified by the asterisk (‘*’)
!      in ‘WRITE’ statement.
  
! ‘REAL32’, ‘REAL64’, ‘REAL128’:
       Kind type parameters to specify a REAL type with a storage size of
       32, 64, and 128 bits.  It is negative if a target platform does not
       support the particular kind.  (Fortran 2008 or later.)
  
! ‘REAL_KINDS’:
       Default-kind integer constant array of rank one containing the
!      supported kind parameters of the ‘REAL’ type.  (Fortran 2008 or
       later.)
  
! ‘STAT_LOCKED’:
       Scalar default-integer constant used as STAT= return value by
!      ‘LOCK’ to denote that the lock variable is locked by the executing
       image.  (Fortran 2008 or later.)
  
! ‘STAT_LOCKED_OTHER_IMAGE’:
       Scalar default-integer constant used as STAT= return value by
!      ‘UNLOCK’ to denote that the lock variable is locked by another
       image.  (Fortran 2008 or later.)
  
! ‘STAT_STOPPED_IMAGE’:
       Positive, scalar default-integer constant used as STAT= return
       value if the argument in the statement requires synchronisation
       with an image, which has initiated the termination of the
       execution.  (Fortran 2008 or later.)
  
! ‘STAT_FAILED_IMAGE’:
       Positive, scalar default-integer constant used as STAT= return
       value if the argument in the statement requires communication with
       an image, which has is in the failed state.  (TS 18508 or later.)
  
! ‘STAT_UNLOCKED’:
       Scalar default-integer constant used as STAT= return value by
!      ‘UNLOCK’ to denote that the lock variable is unlocked.  (Fortran
       2008 or later.)
  
     The module provides the following derived type:
  
! ‘LOCK_TYPE’:
!      Derived type with private components to be use with the ‘LOCK’ and
!      ‘UNLOCK’ statement.  A variable of its type has to be always
       declared as coarray and may not appear in a variable-definition
       context.  (Fortran 2008 or later.)
  
*************** COMPILER_OPTIONS:: and *note COMPILER_VE
*** 19674,19680 ****
  
  File: gfortran.info,  Node: ISO_C_BINDING,  Next: IEEE modules,  Prev: ISO_FORTRAN_ENV,  Up: Intrinsic Modules
  
! 9.2 'ISO_C_BINDING'
  ===================
  
  _Standard_:
--- 19674,19680 ----
  
  File: gfortran.info,  Node: ISO_C_BINDING,  Next: IEEE modules,  Prev: ISO_FORTRAN_ENV,  Up: Intrinsic Modules
  
! 9.2 ‘ISO_C_BINDING’
  ===================
  
  _Standard_:
*************** _Standard_:
*** 19684,19798 ****
  definition can be found in the section Intrinsic Procedures of this
  manual.
  
! 'C_ASSOCIATED'
! 'C_F_POINTER'
! 'C_F_PROCPOINTER'
! 'C_FUNLOC'
! 'C_LOC'
! 'C_SIZEOF'
  
!    The 'ISO_C_BINDING' module provides the following named constants of
  type default integer, which can be used as KIND type parameters.
  
     In addition to the integer named constants required by the Fortran
! 2003 standard and 'C_PTRDIFF_T' of TS 29113, GNU Fortran provides as an
  extension named constants for the 128-bit integer types supported by the
! C compiler: 'C_INT128_T, C_INT_LEAST128_T, C_INT_FAST128_T'.
! Furthermore, if '_Float128' is supported in C, the named constants
! 'C_FLOAT128' and 'C_FLOAT128_COMPLEX' are defined.
  
  Fortran Type   Named constant          C type                   Extension
  ----------------------------------------------------------------------------
! 'INTEGER'      'C_INT'                 'int'
! 'INTEGER'      'C_SHORT'               'short int'
! 'INTEGER'      'C_LONG'                'long int'
! 'INTEGER'      'C_LONG_LONG'           'long long int'
! 'INTEGER'      'C_SIGNED_CHAR'         'signed
!                                        char'/'unsigned char'
! 'INTEGER'      'C_SIZE_T'              'size_t'
! 'INTEGER'      'C_INT8_T'              'int8_t'
! 'INTEGER'      'C_INT16_T'             'int16_t'
! 'INTEGER'      'C_INT32_T'             'int32_t'
! 'INTEGER'      'C_INT64_T'             'int64_t'
! 'INTEGER'      'C_INT128_T'            'int128_t'               Ext.
! 'INTEGER'      'C_INT_LEAST8_T'        'int_least8_t'
! 'INTEGER'      'C_INT_LEAST16_T'       'int_least16_t'
! 'INTEGER'      'C_INT_LEAST32_T'       'int_least32_t'
! 'INTEGER'      'C_INT_LEAST64_T'       'int_least64_t'
! 'INTEGER'      'C_INT_LEAST128_T'      'int_least128_t'         Ext.
! 'INTEGER'      'C_INT_FAST8_T'         'int_fast8_t'
! 'INTEGER'      'C_INT_FAST16_T'        'int_fast16_t'
! 'INTEGER'      'C_INT_FAST32_T'        'int_fast32_t'
! 'INTEGER'      'C_INT_FAST64_T'        'int_fast64_t'
! 'INTEGER'      'C_INT_FAST128_T'       'int_fast128_t'          Ext.
! 'INTEGER'      'C_INTMAX_T'            'intmax_t'
! 'INTEGER'      'C_INTPTR_T'            'intptr_t'
! 'INTEGER'      'C_PTRDIFF_T'           'ptrdiff_t'              TS 29113
! 'REAL'         'C_FLOAT'               'float'
! 'REAL'         'C_DOUBLE'              'double'
! 'REAL'         'C_LONG_DOUBLE'         'long double'
! 'REAL'         'C_FLOAT128'            '_Float128'              Ext.
! 'COMPLEX'      'C_FLOAT_COMPLEX'       'float _Complex'
! 'COMPLEX'      'C_DOUBLE_COMPLEX'      'double _Complex'
! 'COMPLEX'      'C_LONG_DOUBLE_COMPLEX' 'long double _Complex'
! 'COMPLEX'      'C_FLOAT128_COMPLEX'    '_Float128 _Complex'     Ext.
! 'LOGICAL'      'C_BOOL'                '_Bool'
! 'CHARACTER'    'C_CHAR'                'char'
  
     Additionally, the following parameters of type
! 'CHARACTER(KIND=C_CHAR)' are defined.
  
  Name           C definition                     Value
  ------------------------------------------------------------
! 'C_NULL_CHAR'  null character                   ''\0''
! 'C_ALERT'      alert                            ''\a''
! 'C_BACKSPACE'  backspace                        ''\b''
! 'C_FORM_FEED'  form feed                        ''\f''
! 'C_NEW_LINE'   new line                         ''\n''
! 'C_CARRIAGE_RETURN'carriage return              ''\r''
! 'C_HORIZONTAL_TAB'horizontal tab                ''\t''
! 'C_VERTICAL_TAB'vertical tab                    ''\v''
  
     Moreover, the following two named constants are defined:
  
  Name           Type
  --------------------------------------------------------------------------
! 'C_NULL_PTR'   'C_PTR'
! 'C_NULL_FUNPTR''C_FUNPTR'
  
!    Both are equivalent to the value 'NULL' in C.
  
  
  File: gfortran.info,  Node: IEEE modules,  Next: OpenMP Modules OMP_LIB and OMP_LIB_KINDS,  Prev: ISO_C_BINDING,  Up: Intrinsic Modules
  
! 9.3 IEEE modules: 'IEEE_EXCEPTIONS', 'IEEE_ARITHMETIC', and 'IEEE_FEATURES'
  ===========================================================================
  
  _Standard_:
       Fortran 2003 and later
  
!    The 'IEEE_EXCEPTIONS', 'IEEE_ARITHMETIC', and 'IEEE_FEATURES'
  intrinsic modules provide support for exceptions and IEEE arithmetic, as
  defined in Fortran 2003 and later standards, and the IEC 60559:1989
  standard (_Binary floating-point arithmetic for microprocessor
  systems_).  These modules are only provided on the following supported
  platforms:
  
!    * i386 and x86_64 processors
!    * platforms which use the GNU C Library (glibc)
!    * platforms with support for SysV/386 routines for floating point
       interface (including Solaris and BSDs)
!    * platforms with the AIX OS
  
     For full compliance with the Fortran standards, code using the
! 'IEEE_EXCEPTIONS' or 'IEEE_ARITHMETIC' modules should be compiled with
! the following options: '-fno-unsafe-math-optimizations -frounding-math
! -fsignaling-nans'.
  
  
  File: gfortran.info,  Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS,  Next: OpenACC Module OPENACC,  Prev: IEEE modules,  Up: Intrinsic Modules
  
! 9.4 OpenMP Modules 'OMP_LIB' and 'OMP_LIB_KINDS'
  ================================================
  
  _Standard_:
--- 19684,19798 ----
  definition can be found in the section Intrinsic Procedures of this
  manual.
  
! ‘C_ASSOCIATED’
! ‘C_F_POINTER’
! ‘C_F_PROCPOINTER’
! ‘C_FUNLOC’
! ‘C_LOC’
! ‘C_SIZEOF’
  
!    The ‘ISO_C_BINDING’ module provides the following named constants of
  type default integer, which can be used as KIND type parameters.
  
     In addition to the integer named constants required by the Fortran
! 2003 standard and ‘C_PTRDIFF_T’ of TS 29113, GNU Fortran provides as an
  extension named constants for the 128-bit integer types supported by the
! C compiler: ‘C_INT128_T, C_INT_LEAST128_T, C_INT_FAST128_T’.
! Furthermore, if ‘_Float128’ is supported in C, the named constants
! ‘C_FLOAT128’ and ‘C_FLOAT128_COMPLEX’ are defined.
  
  Fortran Type   Named constant          C type                   Extension
  ----------------------------------------------------------------------------
! ‘INTEGER’      ‘C_INT’                 ‘int’
! ‘INTEGER’      ‘C_SHORT’               ‘short int’
! ‘INTEGER’      ‘C_LONG’                ‘long int’
! ‘INTEGER’      ‘C_LONG_LONG’           ‘long long int’
! ‘INTEGER’      ‘C_SIGNED_CHAR’         ‘signed
!                                        char’/‘unsigned char’
! ‘INTEGER’      ‘C_SIZE_T’              ‘size_t’
! ‘INTEGER’      ‘C_INT8_T’              ‘int8_t’
! ‘INTEGER’      ‘C_INT16_T’             ‘int16_t’
! ‘INTEGER’      ‘C_INT32_T’             ‘int32_t’
! ‘INTEGER’      ‘C_INT64_T’             ‘int64_t’
! ‘INTEGER’      ‘C_INT128_T’            ‘int128_t’               Ext.
! ‘INTEGER’      ‘C_INT_LEAST8_T’        ‘int_least8_t’
! ‘INTEGER’      ‘C_INT_LEAST16_T’       ‘int_least16_t’
! ‘INTEGER’      ‘C_INT_LEAST32_T’       ‘int_least32_t’
! ‘INTEGER’      ‘C_INT_LEAST64_T’       ‘int_least64_t’
! ‘INTEGER’      ‘C_INT_LEAST128_T’      ‘int_least128_t’         Ext.
! ‘INTEGER’      ‘C_INT_FAST8_T’         ‘int_fast8_t’
! ‘INTEGER’      ‘C_INT_FAST16_T’        ‘int_fast16_t’
! ‘INTEGER’      ‘C_INT_FAST32_T’        ‘int_fast32_t’
! ‘INTEGER’      ‘C_INT_FAST64_T’        ‘int_fast64_t’
! ‘INTEGER’      ‘C_INT_FAST128_T’       ‘int_fast128_t’          Ext.
! ‘INTEGER’      ‘C_INTMAX_T’            ‘intmax_t’
! ‘INTEGER’      ‘C_INTPTR_T’            ‘intptr_t’
! ‘INTEGER’      ‘C_PTRDIFF_T’           ‘ptrdiff_t’              TS 29113
! ‘REAL’         ‘C_FLOAT’               ‘float’
! ‘REAL’         ‘C_DOUBLE’              ‘double’
! ‘REAL’         ‘C_LONG_DOUBLE’         ‘long double’
! ‘REAL’         ‘C_FLOAT128’            ‘_Float128’              Ext.
! ‘COMPLEX’      ‘C_FLOAT_COMPLEX’       ‘float _Complex’
! ‘COMPLEX’      ‘C_DOUBLE_COMPLEX’      ‘double _Complex’
! ‘COMPLEX’      ‘C_LONG_DOUBLE_COMPLEX’ ‘long double _Complex’
! ‘COMPLEX’      ‘C_FLOAT128_COMPLEX’    ‘_Float128 _Complex’     Ext.
! ‘LOGICAL’      ‘C_BOOL’                ‘_Bool’
! ‘CHARACTER’    ‘C_CHAR’                ‘char’
  
     Additionally, the following parameters of type
! ‘CHARACTER(KIND=C_CHAR)’ are defined.
  
  Name           C definition                     Value
  ------------------------------------------------------------
! ‘C_NULL_CHAR’  null character                   ‘'\0'’
! ‘C_ALERT’      alert                            ‘'\a'’
! ‘C_BACKSPACE’  backspace                        ‘'\b'’
! ‘C_FORM_FEED’  form feed                        ‘'\f'’
! ‘C_NEW_LINE’   new line                         ‘'\n'’
! ‘C_CARRIAGE_RETURN’carriage return              ‘'\r'’
! ‘C_HORIZONTAL_TAB’horizontal tab                ‘'\t'’
! ‘C_VERTICAL_TAB’vertical tab                    ‘'\v'’
  
     Moreover, the following two named constants are defined:
  
  Name           Type
  --------------------------------------------------------------------------
! ‘C_NULL_PTR’   ‘C_PTR’
! ‘C_NULL_FUNPTR’‘C_FUNPTR’
  
!    Both are equivalent to the value ‘NULL’ in C.
  
  
  File: gfortran.info,  Node: IEEE modules,  Next: OpenMP Modules OMP_LIB and OMP_LIB_KINDS,  Prev: ISO_C_BINDING,  Up: Intrinsic Modules
  
! 9.3 IEEE modules: ‘IEEE_EXCEPTIONS’, ‘IEEE_ARITHMETIC’, and ‘IEEE_FEATURES’
  ===========================================================================
  
  _Standard_:
       Fortran 2003 and later
  
!    The ‘IEEE_EXCEPTIONS’, ‘IEEE_ARITHMETIC’, and ‘IEEE_FEATURES’
  intrinsic modules provide support for exceptions and IEEE arithmetic, as
  defined in Fortran 2003 and later standards, and the IEC 60559:1989
  standard (_Binary floating-point arithmetic for microprocessor
  systems_).  These modules are only provided on the following supported
  platforms:
  
!    • i386 and x86_64 processors
!    • platforms which use the GNU C Library (glibc)
!    • platforms with support for SysV/386 routines for floating point
       interface (including Solaris and BSDs)
!    • platforms with the AIX OS
  
     For full compliance with the Fortran standards, code using the
! ‘IEEE_EXCEPTIONS’ or ‘IEEE_ARITHMETIC’ modules should be compiled with
! the following options: ‘-fno-unsafe-math-optimizations -frounding-math
! -fsignaling-nans’.
  
  
  File: gfortran.info,  Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS,  Next: OpenACC Module OPENACC,  Prev: IEEE modules,  Up: Intrinsic Modules
  
! 9.4 OpenMP Modules ‘OMP_LIB’ and ‘OMP_LIB_KINDS’
  ================================================
  
  _Standard_:
*************** _Standard_:
*** 19802,19810 ****
       Program Interface v5.2 (partially supported).
  
     The OpenMP Fortran runtime library routines are provided both in a
! form of two Fortran modules, named 'OMP_LIB' and 'OMP_LIB_KINDS', and in
! a form of a Fortran 'include' file named 'omp_lib.h'.  The procedures
! provided by 'OMP_LIB' can be found in the *note Introduction:
  (libgomp)Top. manual, the named constants defined in the modules are
  listed below.
  
--- 19802,19810 ----
       Program Interface v5.2 (partially supported).
  
     The OpenMP Fortran runtime library routines are provided both in a
! form of two Fortran modules, named ‘OMP_LIB’ and ‘OMP_LIB_KINDS’, and in
! a form of a Fortran ‘include’ file named ‘omp_lib.h’.  The procedures
! provided by ‘OMP_LIB’ can be found in the *note Introduction:
  (libgomp)Top. manual, the named constants defined in the modules are
  listed below.
  
*************** OpenMP Application Program Interface v5.
*** 19817,19969 ****
  and OpenMP Application Program Interface v5.2
  (https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf).
  
!    'OMP_LIB_KINDS' provides the following scalar default-integer named
  constants:
  
! 'omp_allocator_handle_kind'
! 'omp_alloctrait_key_kind'
! 'omp_alloctrait_val_kind'
! 'omp_depend_kind'
! 'omp_lock_kind'
! 'omp_lock_hint_kind'
! 'omp_nest_lock_kind'
! 'omp_pause_resource_kind'
! 'omp_memspace_handle_kind'
! 'omp_proc_bind_kind'
! 'omp_sched_kind'
! 'omp_sync_hint_kind'
  
!    'OMP_LIB' provides the scalar default-integer named constant
! 'openmp_version' with a value of the form YYYYMM, where 'yyyy' is the
  year and MM the month of the OpenMP version; for OpenMP v4.5 the value
! is '201511'.
  
     The following derived type:
  
! 'omp_alloctrait'
  
     The following scalar default-integer named constants:
! 'omp_initial_device'
! 'omp_invalid_device'
  
     The following scalar integer named constants of the kind
! 'omp_sched_kind':
  
! 'omp_sched_static'
! 'omp_sched_dynamic'
! 'omp_sched_guided'
! 'omp_sched_auto'
  
     And the following scalar integer named constants of the kind
! 'omp_proc_bind_kind':
  
! 'omp_proc_bind_false'
! 'omp_proc_bind_true'
! 'omp_proc_bind_primary'
! 'omp_proc_bind_master'
! 'omp_proc_bind_close'
! 'omp_proc_bind_spread'
  
     The following scalar integer named constants are of the kind
! 'omp_lock_hint_kind':
  
! 'omp_lock_hint_none'
! 'omp_lock_hint_uncontended'
! 'omp_lock_hint_contended'
! 'omp_lock_hint_nonspeculative'
! 'omp_lock_hint_speculative'
! 'omp_sync_hint_none'
! 'omp_sync_hint_uncontended'
! 'omp_sync_hint_contended'
! 'omp_sync_hint_nonspeculative'
! 'omp_sync_hint_speculative'
  
     And the following two scalar integer named constants are of the kind
! 'omp_pause_resource_kind':
  
! 'omp_pause_soft'
! 'omp_pause_hard'
  
     The following scalar integer named constants are of the kind
! 'omp_alloctrait_key_kind':
  
! 'omp_atk_sync_hint'
! 'omp_atk_alignment'
! 'omp_atk_access'
! 'omp_atk_pool_size'
! 'omp_atk_fallback'
! 'omp_atk_fb_data'
! 'omp_atk_pinned'
! 'omp_atk_partition'
  
     The following scalar integer named constants are of the kind
! 'omp_alloctrait_val_kind':
  
!      'omp_alloctrait_key_kind':
! 'omp_atv_default'
! 'omp_atv_false'
! 'omp_atv_true'
! 'omp_atv_contended'
! 'omp_atv_uncontended'
! 'omp_atv_serialized'
! 'omp_atv_sequential'
! 'omp_atv_private'
! 'omp_atv_all'
! 'omp_atv_thread'
! 'omp_atv_pteam'
! 'omp_atv_cgroup'
! 'omp_atv_default_mem_fb'
! 'omp_atv_null_fb'
! 'omp_atv_abort_fb'
! 'omp_atv_allocator_fb'
! 'omp_atv_environment'
! 'omp_atv_nearest'
! 'omp_atv_blocked'
  
     The following scalar integer named constants are of the kind
! 'omp_allocator_handle_kind':
  
! 'omp_null_allocator'
! 'omp_default_mem_alloc'
! 'omp_large_cap_mem_alloc'
! 'omp_const_mem_alloc'
! 'omp_high_bw_mem_alloc'
! 'omp_low_lat_mem_alloc'
! 'omp_cgroup_mem_alloc'
! 'omp_pteam_mem_alloc'
! 'omp_thread_mem_alloc'
  
     The following scalar integer named constants are of the kind
! 'omp_memspace_handle_kind':
  
! 'omp_default_mem_space'
! 'omp_large_cap_mem_space'
! 'omp_const_mem_space'
! 'omp_high_bw_mem_space'
! 'omp_low_lat_mem_space'
  
  
  File: gfortran.info,  Node: OpenACC Module OPENACC,  Prev: OpenMP Modules OMP_LIB and OMP_LIB_KINDS,  Up: Intrinsic Modules
  
! 9.5 OpenACC Module 'OPENACC'
  ============================
  
  _Standard_:
       OpenACC Application Programming Interface v2.6
  
     The OpenACC Fortran runtime library routines are provided both in a
! form of a Fortran 90 module, named 'OPENACC', and in form of a Fortran
! 'include' file named 'openacc_lib.h'.  The procedures provided by
! 'OPENACC' can be found in the *note Introduction: (libgomp)Top. manual,
  the named constants defined in the modules are listed below.
  
     For details refer to the actual OpenACC Application Programming
  Interface v2.6 (https://www.openacc.org/).
  
!    'OPENACC' provides the scalar default-integer named constant
! 'openacc_version' with a value of the form YYYYMM, where 'yyyy' is the
  year and MM the month of the OpenACC version; for OpenACC v2.6 the value
! is '201711'.
  
  
  File: gfortran.info,  Node: Contributing,  Next: Copying,  Prev: Intrinsic Modules,  Up: Top
--- 19817,19969 ----
  and OpenMP Application Program Interface v5.2
  (https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf).
  
!    ‘OMP_LIB_KINDS’ provides the following scalar default-integer named
  constants:
  
! ‘omp_allocator_handle_kind’
! ‘omp_alloctrait_key_kind’
! ‘omp_alloctrait_val_kind’
! ‘omp_depend_kind’
! ‘omp_lock_kind’
! ‘omp_lock_hint_kind’
! ‘omp_nest_lock_kind’
! ‘omp_pause_resource_kind’
! ‘omp_memspace_handle_kind’
! ‘omp_proc_bind_kind’
! ‘omp_sched_kind’
! ‘omp_sync_hint_kind’
  
!    ‘OMP_LIB’ provides the scalar default-integer named constant
! ‘openmp_version’ with a value of the form YYYYMM, where ‘yyyy’ is the
  year and MM the month of the OpenMP version; for OpenMP v4.5 the value
! is ‘201511’.
  
     The following derived type:
  
! ‘omp_alloctrait’
  
     The following scalar default-integer named constants:
! ‘omp_initial_device’
! ‘omp_invalid_device’
  
     The following scalar integer named constants of the kind
! ‘omp_sched_kind’:
  
! ‘omp_sched_static’
! ‘omp_sched_dynamic’
! ‘omp_sched_guided’
! ‘omp_sched_auto’
  
     And the following scalar integer named constants of the kind
! ‘omp_proc_bind_kind’:
  
! ‘omp_proc_bind_false’
! ‘omp_proc_bind_true’
! ‘omp_proc_bind_primary’
! ‘omp_proc_bind_master’
! ‘omp_proc_bind_close’
! ‘omp_proc_bind_spread’
  
     The following scalar integer named constants are of the kind
! ‘omp_lock_hint_kind’:
  
! ‘omp_lock_hint_none’
! ‘omp_lock_hint_uncontended’
! ‘omp_lock_hint_contended’
! ‘omp_lock_hint_nonspeculative’
! ‘omp_lock_hint_speculative’
! ‘omp_sync_hint_none’
! ‘omp_sync_hint_uncontended’
! ‘omp_sync_hint_contended’
! ‘omp_sync_hint_nonspeculative’
! ‘omp_sync_hint_speculative’
  
     And the following two scalar integer named constants are of the kind
! ‘omp_pause_resource_kind’:
  
! ‘omp_pause_soft’
! ‘omp_pause_hard’
  
     The following scalar integer named constants are of the kind
! ‘omp_alloctrait_key_kind’:
  
! ‘omp_atk_sync_hint’
! ‘omp_atk_alignment’
! ‘omp_atk_access’
! ‘omp_atk_pool_size’
! ‘omp_atk_fallback’
! ‘omp_atk_fb_data’
! ‘omp_atk_pinned’
! ‘omp_atk_partition’
  
     The following scalar integer named constants are of the kind
! ‘omp_alloctrait_val_kind’:
  
!      ‘omp_alloctrait_key_kind’:
! ‘omp_atv_default’
! ‘omp_atv_false’
! ‘omp_atv_true’
! ‘omp_atv_contended’
! ‘omp_atv_uncontended’
! ‘omp_atv_serialized’
! ‘omp_atv_sequential’
! ‘omp_atv_private’
! ‘omp_atv_all’
! ‘omp_atv_thread’
! ‘omp_atv_pteam’
! ‘omp_atv_cgroup’
! ‘omp_atv_default_mem_fb’
! ‘omp_atv_null_fb’
! ‘omp_atv_abort_fb’
! ‘omp_atv_allocator_fb’
! ‘omp_atv_environment’
! ‘omp_atv_nearest’
! ‘omp_atv_blocked’
  
     The following scalar integer named constants are of the kind
! ‘omp_allocator_handle_kind’:
  
! ‘omp_null_allocator’
! ‘omp_default_mem_alloc’
! ‘omp_large_cap_mem_alloc’
! ‘omp_const_mem_alloc’
! ‘omp_high_bw_mem_alloc’
! ‘omp_low_lat_mem_alloc’
! ‘omp_cgroup_mem_alloc’
! ‘omp_pteam_mem_alloc’
! ‘omp_thread_mem_alloc’
  
     The following scalar integer named constants are of the kind
! ‘omp_memspace_handle_kind’:
  
! ‘omp_default_mem_space’
! ‘omp_large_cap_mem_space’
! ‘omp_const_mem_space’
! ‘omp_high_bw_mem_space’
! ‘omp_low_lat_mem_space’
  
  
  File: gfortran.info,  Node: OpenACC Module OPENACC,  Prev: OpenMP Modules OMP_LIB and OMP_LIB_KINDS,  Up: Intrinsic Modules
  
! 9.5 OpenACC Module ‘OPENACC’
  ============================
  
  _Standard_:
       OpenACC Application Programming Interface v2.6
  
     The OpenACC Fortran runtime library routines are provided both in a
! form of a Fortran 90 module, named ‘OPENACC’, and in form of a Fortran
! ‘include’ file named ‘openacc_lib.h’.  The procedures provided by
! ‘OPENACC’ can be found in the *note Introduction: (libgomp)Top. manual,
  the named constants defined in the modules are listed below.
  
     For details refer to the actual OpenACC Application Programming
  Interface v2.6 (https://www.openacc.org/).
  
!    ‘OPENACC’ provides the scalar default-integer named constant
! ‘openacc_version’ with a value of the form YYYYMM, where ‘yyyy’ is the
  year and MM the month of the OpenACC version; for OpenACC v2.6 the value
! is ‘201711’.
  
  
  File: gfortran.info,  Node: Contributing,  Next: Copying,  Prev: Intrinsic Modules,  Up: Top
*************** with GCC was written by _Paul Brook_.
*** 20001,20050 ****
     The following individuals have contributed code and/or ideas and
  significant help to the GNU Fortran project (in alphabetical order):
  
!    - Janne Blomqvist
!    - Steven Bosscher
!    - Paul Brook
!    - Tobias Burnus
!    - Franc,ois-Xavier Coudert
!    - Bud Davis
!    - Jerry DeLisle
!    - Erik Edelmann
!    - Bernhard Fischer
!    - Daniel Franke
!    - Richard Guenther
!    - Richard Henderson
!    - Katherine Holcomb
!    - Jakub Jelinek
!    - Niels Kristian Bech Jensen
!    - Steven Johnson
!    - Steven G. Kargl
!    - Thomas Koenig
!    - Asher Langton
!    - H. J. Lu
!    - Toon Moene
!    - Brooks Moses
!    - Andrew Pinski
!    - Tim Prince
!    - Christopher D. Rickett
!    - Richard Sandiford
!    - Tobias Schlu"ter
!    - Roger Sayle
!    - Paul Thomas
!    - Andy Vaught
!    - Feng Wang
!    - Janus Weil
!    - Daniel Kraft
  
     The following people have contributed bug reports, smaller or larger
  patches, and much needed feedback and encouragement for the GNU Fortran
  project:
  
!    - Bill Clodius
!    - Dominique d'Humie`res
!    - Kate Hedstrom
!    - Erik Schnetter
!    - Gerhard Steinmetz
!    - Joost VandeVondele
  
     Many other individuals have helped debug, test and improve the GNU
  Fortran compiler over the past few years, and we welcome you to do the
--- 20001,20050 ----
     The following individuals have contributed code and/or ideas and
  significant help to the GNU Fortran project (in alphabetical order):
  
!    − Janne Blomqvist
!    − Steven Bosscher
!    − Paul Brook
!    − Tobias Burnus
!    − François-Xavier Coudert
!    − Bud Davis
!    − Jerry DeLisle
!    − Erik Edelmann
!    − Bernhard Fischer
!    − Daniel Franke
!    − Richard Guenther
!    − Richard Henderson
!    − Katherine Holcomb
!    − Jakub Jelinek
!    − Niels Kristian Bech Jensen
!    − Steven Johnson
!    − Steven G. Kargl
!    − Thomas Koenig
!    − Asher Langton
!    − H. J. Lu
!    − Toon Moene
!    − Brooks Moses
!    − Andrew Pinski
!    − Tim Prince
!    − Christopher D. Rickett
!    − Richard Sandiford
!    − Tobias Schlüter
!    − Roger Sayle
!    − Paul Thomas
!    − Andy Vaught
!    − Feng Wang
!    − Janus Weil
!    − Daniel Kraft
  
     The following people have contributed bug reports, smaller or larger
  patches, and much needed feedback and encouragement for the GNU Fortran
  project:
  
!    − Bill Clodius
!    − Dominique d'Humières
!    − Kate Hedstrom
!    − Erik Schnetter
!    − Gerhard Steinmetz
!    − Joost VandeVondele
  
     Many other individuals have helped debug, test and improve the GNU
  Fortran compiler over the past few years, and we welcome you to do the
*************** GNU General Public License
*** 20087,20093 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 20087,20093 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 20774,20784 ****
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!    The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 20774,20784 ----
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!    The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** GNU Free Documentation License
*** 20803,20809 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 20803,20809 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 20812,20818 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 20812,20818 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** more; major new features or packages con
*** 21323,21329 ****
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright (C) 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
--- 21323,21329 ----
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright © 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
*************** File: gfortran.info,  Node: Option Index
*** 21333,21340 ****
  Option Index
  ************
  
! 'gfortran''s command line options are indexed here without any initial
! '-' or '--'.  Where an option has both positive and negative forms (such
  as -foption and -fno-option), relevant entries in the manual are indexed
  under the most appropriate form; it may sometimes be useful to look up
  both forms.
--- 21333,21340 ----
  Option Index
  ************
  
! ‘gfortran’'s command line options are indexed here without any initial
! ‘-’ or ‘--’.  Where an option has both positive and negative forms (such
  as -foption and -fno-option), relevant entries in the manual are indexed
  under the most appropriate form; it may sometimes be useful to look up
  both forms.
*************** both forms.
*** 21412,21426 ****
  * fdec-structure:                        Fortran Dialect Options.
                                                                (line  71)
  * fdefault-double-8:                     Fortran Dialect Options.
!                                                               (line 270)
  * fdefault-integer-8:                    Fortran Dialect Options.
!                                                               (line 234)
  * fdefault-real-10:                      Fortran Dialect Options.
!                                                               (line 250)
  * fdefault-real-16:                      Fortran Dialect Options.
!                                                               (line 260)
  * fdefault-real-8:                       Fortran Dialect Options.
!                                                               (line 240)
  * fdollar-ok:                            Fortran Dialect Options.
                                                                (line 106)
  * fdump-fortran-global:                  Developer Options.   (line   9)
--- 21412,21426 ----
  * fdec-structure:                        Fortran Dialect Options.
                                                                (line  71)
  * fdefault-double-8:                     Fortran Dialect Options.
!                                                               (line 268)
  * fdefault-integer-8:                    Fortran Dialect Options.
!                                                               (line 232)
  * fdefault-real-10:                      Fortran Dialect Options.
!                                                               (line 248)
  * fdefault-real-16:                      Fortran Dialect Options.
!                                                               (line 258)
  * fdefault-real-8:                       Fortran Dialect Options.
!                                                               (line 238)
  * fdollar-ok:                            Fortran Dialect Options.
                                                                (line 106)
  * fdump-fortran-global:                  Developer Options.   (line   9)
*************** both forms.
*** 21450,21456 ****
  * finline-arg-packing:                   Code Gen Options.    (line 303)
  * finline-matmul-limit:                  Code Gen Options.    (line 347)
  * finteger-4-integer-8:                  Fortran Dialect Options.
!                                                               (line 278)
  * fintrinsic-modules-path DIR:           Directory Options.   (line  35)
  * fmax-array-constructor:                Code Gen Options.    (line 241)
  * fmax-errors=N:                         Error and Warning Options.
--- 21450,21456 ----
  * finline-arg-packing:                   Code Gen Options.    (line 303)
  * finline-matmul-limit:                  Code Gen Options.    (line 347)
  * finteger-4-integer-8:                  Fortran Dialect Options.
!                                                               (line 276)
  * fintrinsic-modules-path DIR:           Directory Options.   (line  35)
  * fmax-array-constructor:                Code Gen Options.    (line 241)
  * fmax-errors=N:                         Error and Warning Options.
*************** both forms.
*** 21468,21497 ****
  * fopenacc:                              Fortran Dialect Options.
                                                                (line 171)
  * fopenmp:                               Fortran Dialect Options.
!                                                               (line 181)
  * fopenmp-allocators:                    Fortran Dialect Options.
!                                                               (line 193)
  * fopenmp-simd:                          Fortran Dialect Options.
!                                                               (line 211)
  * fpack-derived:                         Code Gen Options.    (line 281)
  * fpad-source:                           Fortran Dialect Options.
                                                                (line 143)
  * fpp:                                   Preprocessing Options.
                                                                (line  42)
  * frange-check:                          Fortran Dialect Options.
!                                                               (line 222)
  * freal-4-real-10:                       Fortran Dialect Options.
!                                                               (line 288)
  * freal-4-real-16:                       Fortran Dialect Options.
!                                                               (line 288)
  * freal-4-real-8:                        Fortran Dialect Options.
!                                                               (line 288)
  * freal-8-real-10:                       Fortran Dialect Options.
!                                                               (line 288)
  * freal-8-real-16:                       Fortran Dialect Options.
!                                                               (line 288)
  * freal-8-real-4:                        Fortran Dialect Options.
!                                                               (line 288)
  * frealloc-lhs:                          Code Gen Options.    (line 428)
  * frecord-marker=LENGTH:                 Runtime Options.     (line  28)
  * frecursive:                            Code Gen Options.    (line 361)
--- 21468,21497 ----
  * fopenacc:                              Fortran Dialect Options.
                                                                (line 171)
  * fopenmp:                               Fortran Dialect Options.
!                                                               (line 180)
  * fopenmp-allocators:                    Fortran Dialect Options.
!                                                               (line 191)
  * fopenmp-simd:                          Fortran Dialect Options.
!                                                               (line 209)
  * fpack-derived:                         Code Gen Options.    (line 281)
  * fpad-source:                           Fortran Dialect Options.
                                                                (line 143)
  * fpp:                                   Preprocessing Options.
                                                                (line  42)
  * frange-check:                          Fortran Dialect Options.
!                                                               (line 220)
  * freal-4-real-10:                       Fortran Dialect Options.
!                                                               (line 286)
  * freal-4-real-16:                       Fortran Dialect Options.
!                                                               (line 286)
  * freal-4-real-8:                        Fortran Dialect Options.
!                                                               (line 286)
  * freal-8-real-10:                       Fortran Dialect Options.
!                                                               (line 286)
  * freal-8-real-16:                       Fortran Dialect Options.
!                                                               (line 286)
  * freal-8-real-4:                        Fortran Dialect Options.
!                                                               (line 286)
  * frealloc-lhs:                          Code Gen Options.    (line 428)
  * frecord-marker=LENGTH:                 Runtime Options.     (line  28)
  * frecursive:                            Code Gen Options.    (line 361)
*************** both forms.
*** 21505,21511 ****
  * fsyntax-only:                          Error and Warning Options.
                                                                (line  32)
  * ftest-forall-temp:                     Fortran Dialect Options.
!                                                               (line 335)
  * fworking-directory:                    Preprocessing Options.
                                                                (line  86)
  * H:                                     Preprocessing Options.
--- 21505,21511 ----
  * fsyntax-only:                          Error and Warning Options.
                                                                (line  32)
  * ftest-forall-temp:                     Fortran Dialect Options.
!                                                               (line 333)
  * fworking-directory:                    Preprocessing Options.
                                                                (line  86)
  * H:                                     Preprocessing Options.
*************** both forms.
*** 21536,21542 ****
  * static-libgfortran:                    Link Options.        (line  10)
  * static-libquadmath:                    Link Options.        (line  16)
  * std=STD option:                        Fortran Dialect Options.
!                                                               (line 316)
  * tail-call-workaround:                  Code Gen Options.    (line 207)
  * UNAME:                                 Preprocessing Options.
                                                                (line 216)
--- 21536,21542 ----
  * static-libgfortran:                    Link Options.        (line  10)
  * static-libquadmath:                    Link Options.        (line  16)
  * std=STD option:                        Fortran Dialect Options.
!                                                               (line 314)
  * tail-call-workaround:                  Code Gen Options.    (line 207)
  * UNAME:                                 Preprocessing Options.
                                                                (line 216)
*************** Keyword Index
*** 21622,21637 ****
  [index]
  * Menu:
  
- * $:                                     Fortran Dialect Options.
-                                                               (line 106)
- * %LOC:                                  Argument list functions.
-                                                               (line   6)
- * %REF:                                  Argument list functions.
-                                                               (line   6)
- * %VAL:                                  Argument list functions.
-                                                               (line   6)
- * &:                                     Error and Warning Options.
-                                                               (line  87)
  * _gfortran_set_args:                    _gfortran_set_args.  (line   6)
  * _gfortran_set_convert:                 _gfortran_set_convert.
                                                                (line   6)
--- 21622,21627 ----
*************** Keyword Index
*** 21642,21647 ****
--- 21632,21647 ----
                                                                (line   6)
  * _gfortran_set_record_marker:           _gfortran_set_record_marker.
                                                                (line   6)
+ * &:                                     Error and Warning Options.
+                                                               (line  87)
+ * %LOC:                                  Argument list functions.
+                                                               (line   6)
+ * %REF:                                  Argument list functions.
+                                                               (line   6)
+ * %VAL:                                  Argument list functions.
+                                                               (line   6)
+ * $:                                     Fortran Dialect Options.
+                                                               (line 106)
  * ABORT:                                 ABORT.               (line   6)
  * ABS:                                   ABS.                 (line   6)
  * absolute value:                        ABS.                 (line   6)
*************** Keyword Index
*** 21823,21828 ****
--- 21823,21829 ----
  * binary representation <1>:             POPPAR.              (line   6)
  * BIOR:                                  IOR.                 (line   6)
  * bit intrinsics checking:               Code Gen Options.    (line 143)
+ * BIT_SIZE:                              BIT_SIZE.            (line   6)
  * BITEST:                                BTEST.               (line   6)
  * bits set:                              POPCNT.              (line   6)
  * bits, AND of array elements:           IALL.                (line   6)
*************** Keyword Index
*** 21857,21863 ****
  * bitwise logical not:                   NOT.                 (line   6)
  * bitwise logical or:                    IOR.                 (line   6)
  * bitwise logical or <1>:                OR.                  (line   6)
- * BIT_SIZE:                              BIT_SIZE.            (line   6)
  * BJTEST:                                BTEST.               (line   6)
  * BKTEST:                                BTEST.               (line   6)
  * BLE:                                   BLE.                 (line   6)
--- 21858,21863 ----
*************** Keyword Index
*** 21882,21887 ****
--- 21882,21893 ----
                                                                (line   6)
  * C variable interoperability:           Interoperable Global Variables.
                                                                (line   6)
+ * C_ASSOCIATED:                          C_ASSOCIATED.        (line   6)
+ * C_F_POINTER:                           C_F_POINTER.         (line   6)
+ * C_F_PROCPOINTER:                       C_F_PROCPOINTER.     (line   6)
+ * C_FUNLOC:                              C_FUNLOC.            (line   6)
+ * C_LOC:                                 C_LOC.               (line   6)
+ * C_SIZEOF:                              C_SIZEOF.            (line   6)
  * CABS:                                  ABS.                 (line   6)
  * calling convention:                    Code Gen Options.    (line  27)
  * CARRIAGECONTROL:                       Extended I/O specifiers.
*************** Keyword Index
*** 21913,21923 ****
  * clock ticks <2>:                       SYSTEM_CLOCK.        (line   6)
  * CLOG:                                  LOG.                 (line   6)
  * CMPLX:                                 CMPLX.               (line   6)
! * coarray, IMAGE_INDEX:                  IMAGE_INDEX.         (line   6)
! * coarray, lower bound:                  LCOBOUND.            (line   6)
! * coarray, NUM_IMAGES:                   NUM_IMAGES.          (line   6)
! * coarray, THIS_IMAGE:                   THIS_IMAGE.          (line   6)
! * coarray, upper bound:                  UCOBOUND.            (line   6)
  * Coarray, _gfortran_caf_atomic_cas:     _gfortran_caf_atomic_cas.
                                                                (line   6)
  * Coarray, _gfortran_caf_atomic_define:  _gfortran_caf_atomic_define.
--- 21919,21929 ----
  * clock ticks <2>:                       SYSTEM_CLOCK.        (line   6)
  * CLOG:                                  LOG.                 (line   6)
  * CMPLX:                                 CMPLX.               (line   6)
! * CO_BROADCAST:                          CO_BROADCAST.        (line   6)
! * CO_MAX:                                CO_MAX.              (line   6)
! * CO_MIN:                                CO_MIN.              (line   6)
! * CO_REDUCE:                             CO_REDUCE.           (line   6)
! * CO_SUM:                                CO_SUM.              (line   6)
  * Coarray, _gfortran_caf_atomic_cas:     _gfortran_caf_atomic_cas.
                                                                (line   6)
  * Coarray, _gfortran_caf_atomic_define:  _gfortran_caf_atomic_define.
*************** Keyword Index
*** 21948,21957 ****
                                                                (line   6)
  * Coarray, _gfortran_caf_event_wait:     _gfortran_caf_event_wait.
                                                                (line   6)
- * Coarray, _gfortran_caf_failed_images:  _gfortran_caf_failed_images.
-                                                               (line   6)
  * Coarray, _gfortran_caf_fail_image:     _gfortran_caf_fail_image.
                                                                (line   6)
  * Coarray, _gfortran_caf_finish:         _gfortran_caf_finish.
                                                                (line   6)
  * Coarray, _gfortran_caf_get:            _gfortran_caf_get.   (line   6)
--- 21954,21963 ----
                                                                (line   6)
  * Coarray, _gfortran_caf_event_wait:     _gfortran_caf_event_wait.
                                                                (line   6)
  * Coarray, _gfortran_caf_fail_image:     _gfortran_caf_fail_image.
                                                                (line   6)
+ * Coarray, _gfortran_caf_failed_images:  _gfortran_caf_failed_images.
+                                                               (line   6)
  * Coarray, _gfortran_caf_finish:         _gfortran_caf_finish.
                                                                (line   6)
  * Coarray, _gfortran_caf_get:            _gfortran_caf_get.   (line   6)
*************** Keyword Index
*** 21968,21979 ****
  * Coarray, _gfortran_caf_register:       _gfortran_caf_register.
                                                                (line   6)
  * Coarray, _gfortran_caf_send:           _gfortran_caf_send.  (line   6)
  * Coarray, _gfortran_caf_sendget:        _gfortran_caf_sendget.
                                                                (line   6)
  * Coarray, _gfortran_caf_sendget_by_ref: _gfortran_caf_sendget_by_ref.
                                                                (line   6)
- * Coarray, _gfortran_caf_send_by_ref:    _gfortran_caf_send_by_ref.
-                                                               (line   6)
  * Coarray, _gfortran_caf_stopped_images: _gfortran_caf_stopped_images.
                                                                (line   6)
  * Coarray, _gfortran_caf_sync_all:       _gfortran_caf_sync_all.
--- 21974,21985 ----
  * Coarray, _gfortran_caf_register:       _gfortran_caf_register.
                                                                (line   6)
  * Coarray, _gfortran_caf_send:           _gfortran_caf_send.  (line   6)
+ * Coarray, _gfortran_caf_send_by_ref:    _gfortran_caf_send_by_ref.
+                                                               (line   6)
  * Coarray, _gfortran_caf_sendget:        _gfortran_caf_sendget.
                                                                (line   6)
  * Coarray, _gfortran_caf_sendget_by_ref: _gfortran_caf_sendget_by_ref.
                                                                (line   6)
  * Coarray, _gfortran_caf_stopped_images: _gfortran_caf_stopped_images.
                                                                (line   6)
  * Coarray, _gfortran_caf_sync_all:       _gfortran_caf_sync_all.
*************** Keyword Index
*** 21986,21991 ****
--- 21992,22002 ----
                                                                (line   6)
  * Coarray, _gfortran_caf_unlock:         _gfortran_caf_unlock.
                                                                (line   6)
+ * coarray, IMAGE_INDEX:                  IMAGE_INDEX.         (line   6)
+ * coarray, lower bound:                  LCOBOUND.            (line   6)
+ * coarray, NUM_IMAGES:                   NUM_IMAGES.          (line   6)
+ * coarray, THIS_IMAGE:                   THIS_IMAGE.          (line   6)
+ * coarray, upper bound:                  UCOBOUND.            (line   6)
  * coarrays:                              Code Gen Options.    (line 129)
  * Coarrays:                              Coarray Programming. (line   6)
  * code generation, conventions:          Code Gen Options.    (line   6)
*************** Keyword Index
*** 22000,22005 ****
--- 22011,22018 ----
                                                                (line   6)
  * command options:                       Invoking GNU Fortran.
                                                                (line   6)
+ * COMMAND_ARGUMENT_COUNT:                COMMAND_ARGUMENT_COUNT.
+                                                               (line   6)
  * command-line arguments:                COMMAND_ARGUMENT_COUNT.
                                                                (line   6)
  * command-line arguments <1>:            GETARG.              (line   6)
*************** Keyword Index
*** 22010,22023 ****
  * command-line arguments, number of:     COMMAND_ARGUMENT_COUNT.
                                                                (line   6)
  * command-line arguments, number of <1>: IARGC.               (line   6)
- * COMMAND_ARGUMENT_COUNT:                COMMAND_ARGUMENT_COUNT.
-                                                               (line   6)
  * COMMON:                                Volatile COMMON blocks.
                                                                (line   6)
  * compiler flags inquiry function:       COMPILER_OPTIONS.    (line   6)
- * compiler, name and version:            COMPILER_VERSION.    (line   6)
  * COMPILER_OPTIONS:                      COMPILER_OPTIONS.    (line   6)
  * COMPILER_VERSION:                      COMPILER_VERSION.    (line   6)
  * COMPLEX:                               COMPLEX.             (line   6)
  * complex conjugate:                     CONJG.               (line   6)
  * Complex function:                      Alternate complex function syntax.
--- 22023,22034 ----
  * command-line arguments, number of:     COMMAND_ARGUMENT_COUNT.
                                                                (line   6)
  * command-line arguments, number of <1>: IARGC.               (line   6)
  * COMMON:                                Volatile COMMON blocks.
                                                                (line   6)
  * compiler flags inquiry function:       COMPILER_OPTIONS.    (line   6)
  * COMPILER_OPTIONS:                      COMPILER_OPTIONS.    (line   6)
  * COMPILER_VERSION:                      COMPILER_VERSION.    (line   6)
+ * compiler, name and version:            COMPILER_VERSION.    (line   6)
  * COMPLEX:                               COMPLEX.             (line   6)
  * complex conjugate:                     CONJG.               (line   6)
  * Complex function:                      Alternate complex function syntax.
*************** Keyword Index
*** 22075,22085 ****
  * cotangent:                             COTAN.               (line   6)
  * cotangent, degrees:                    COTAND.              (line   6)
  * COUNT:                                 COUNT.               (line   6)
- * CO_BROADCAST:                          CO_BROADCAST.        (line   6)
- * CO_MAX:                                CO_MAX.              (line   6)
- * CO_MIN:                                CO_MIN.              (line   6)
- * CO_REDUCE:                             CO_REDUCE.           (line   6)
- * CO_SUM:                                CO_SUM.              (line   6)
  * CPP:                                   Preprocessing Options.
                                                                (line   6)
  * CPU_TIME:                              CPU_TIME.            (line   6)
--- 22086,22091 ----
*************** Keyword Index
*** 22097,22108 ****
  * current time <2>:                      ITIME.               (line   6)
  * current time <3>:                      TIME.                (line   6)
  * current time <4>:                      TIME8.               (line   6)
- * C_ASSOCIATED:                          C_ASSOCIATED.        (line   6)
- * C_FUNLOC:                              C_FUNLOC.            (line   6)
- * C_F_POINTER:                           C_F_POINTER.         (line   6)
- * C_F_PROCPOINTER:                       C_F_PROCPOINTER.     (line   6)
- * C_LOC:                                 C_LOC.               (line   6)
- * C_SIZEOF:                              C_SIZEOF.            (line   6)
  * DABS:                                  ABS.                 (line   6)
  * DACOS:                                 ACOS.                (line   6)
  * DACOSD:                                ACOSD.               (line   6)
--- 22103,22108 ----
*************** Keyword Index
*** 22115,22124 ****
  * DATAN2D:                               ATAN2D.              (line   6)
  * DATAND:                                ATAND.               (line   6)
  * DATANH:                                ATANH.               (line   6)
  * date, current:                         DATE_AND_TIME.       (line   6)
  * date, current <1>:                     FDATE.               (line   6)
  * date, current <2>:                     IDATE.               (line   6)
- * DATE_AND_TIME:                         DATE_AND_TIME.       (line   6)
  * DBESJ0:                                BESSEL_J0.           (line   6)
  * DBESJ1:                                BESSEL_J1.           (line   6)
  * DBESJN:                                BESSEL_JN.           (line   6)
--- 22115,22124 ----
  * DATAN2D:                               ATAN2D.              (line   6)
  * DATAND:                                ATAND.               (line   6)
  * DATANH:                                ATANH.               (line   6)
+ * DATE_AND_TIME:                         DATE_AND_TIME.       (line   6)
  * date, current:                         DATE_AND_TIME.       (line   6)
  * date, current <1>:                     FDATE.               (line   6)
  * date, current <2>:                     IDATE.               (line   6)
  * DBESJ0:                                BESSEL_J0.           (line   6)
  * DBESJ1:                                BESSEL_J1.           (line   6)
  * DBESJN:                                BESSEL_JN.           (line   6)
*************** Keyword Index
*** 22223,22230 ****
  * ETIME:                                 ETIME.               (line   6)
  * Euclidean distance:                    HYPOT.               (line   6)
  * Euclidean vector norm:                 NORM2.               (line   6)
- * Events, EVENT_QUERY:                   EVENT_QUERY.         (line   6)
  * EVENT_QUERY:                           EVENT_QUERY.         (line   6)
  * EXECUTE_COMMAND_LINE:                  EXECUTE_COMMAND_LINE.
                                                                (line   6)
  * EXIT:                                  EXIT.                (line   6)
--- 22223,22230 ----
  * ETIME:                                 ETIME.               (line   6)
  * Euclidean distance:                    HYPOT.               (line   6)
  * Euclidean vector norm:                 NORM2.               (line   6)
  * EVENT_QUERY:                           EVENT_QUERY.         (line   6)
+ * Events, EVENT_QUERY:                   EVENT_QUERY.         (line   6)
  * EXECUTE_COMMAND_LINE:                  EXECUTE_COMMAND_LINE.
                                                                (line   6)
  * EXIT:                                  EXIT.                (line   6)
*************** Keyword Index
*** 22335,22340 ****
--- 22335,22345 ----
  * Generating C prototypes from Fortran BIND(C) enteties: Interoperability Options.
                                                                (line   6)
  * GERROR:                                GERROR.              (line   6)
+ * GET_COMMAND:                           GET_COMMAND.         (line   6)
+ * GET_COMMAND_ARGUMENT:                  GET_COMMAND_ARGUMENT.
+                                                               (line   6)
+ * GET_ENVIRONMENT_VARIABLE:              GET_ENVIRONMENT_VARIABLE.
+                                                               (line   6)
  * GETARG:                                GETARG.              (line   6)
  * GETCWD:                                GETCWD.              (line   6)
  * GETENV:                                GETENV.              (line   6)
*************** Keyword Index
*** 22342,22352 ****
  * GETLOG:                                GETLOG.              (line   6)
  * GETPID:                                GETPID.              (line   6)
  * GETUID:                                GETUID.              (line   6)
- * GET_COMMAND:                           GET_COMMAND.         (line   6)
- * GET_COMMAND_ARGUMENT:                  GET_COMMAND_ARGUMENT.
-                                                               (line   6)
- * GET_ENVIRONMENT_VARIABLE:              GET_ENVIRONMENT_VARIABLE.
-                                                               (line   6)
  * GMTIME:                                GMTIME.              (line   6)
  * GNU Compiler Collection:               GNU Fortran and GCC. (line   6)
  * GNU Fortran command options:           Invoking GNU Fortran.
--- 22347,22352 ----
*************** Keyword Index
*** 22396,22405 ****
  * IISHFT:                                ISHFT.               (line   6)
  * IISHFTC:                               ISHFTC.              (line   6)
  * IMAG:                                  AIMAG.               (line   6)
  * images, cosubscript to image index conversion: IMAGE_INDEX. (line   6)
  * images, index of this image:           THIS_IMAGE.          (line   6)
  * images, number of:                     NUM_IMAGES.          (line   6)
- * IMAGE_INDEX:                           IMAGE_INDEX.         (line   6)
  * IMAGPART:                              AIMAG.               (line   6)
  * IMOD:                                  MOD.                 (line   6)
  * IMVBITS:                               MVBITS.              (line   6)
--- 22396,22405 ----
  * IISHFT:                                ISHFT.               (line   6)
  * IISHFTC:                               ISHFTC.              (line   6)
  * IMAG:                                  AIMAG.               (line   6)
+ * IMAGE_INDEX:                           IMAGE_INDEX.         (line   6)
  * images, cosubscript to image index conversion: IMAGE_INDEX. (line   6)
  * images, index of this image:           THIS_IMAGE.          (line   6)
  * images, number of:                     NUM_IMAGES.          (line   6)
  * IMAGPART:                              AIMAG.               (line   6)
  * IMOD:                                  MOD.                 (line   6)
  * IMVBITS:                               MVBITS.              (line   6)
*************** Keyword Index
*** 22444,22457 ****
  * IOSTAT, end of record:                 IS_IOSTAT_EOR.       (line   6)
  * IPARITY:                               IPARITY.             (line   6)
  * IRAND:                                 IRAND.               (line   6)
  * ISATTY:                                ISATTY.              (line   6)
  * ISHFT:                                 ISHFT.               (line   6)
  * ISHFTC:                                ISHFTC.              (line   6)
  * ISIGN:                                 SIGN.                (line   6)
  * ISNAN:                                 ISNAN.               (line   6)
- * IS_IOSTAT_END:                         IS_IOSTAT_END.       (line   6)
- * IS_IOSTAT_EOR:                         IS_CONTIGUOUS.       (line   6)
- * IS_IOSTAT_EOR <1>:                     IS_IOSTAT_EOR.       (line   6)
  * ITIME:                                 ITIME.               (line   6)
  * JIABS:                                 ABS.                 (line   6)
  * JIAND:                                 IAND.                (line   6)
--- 22444,22457 ----
  * IOSTAT, end of record:                 IS_IOSTAT_EOR.       (line   6)
  * IPARITY:                               IPARITY.             (line   6)
  * IRAND:                                 IRAND.               (line   6)
+ * IS_IOSTAT_END:                         IS_IOSTAT_END.       (line   6)
+ * IS_IOSTAT_EOR:                         IS_CONTIGUOUS.       (line   6)
+ * IS_IOSTAT_EOR <1>:                     IS_IOSTAT_EOR.       (line   6)
  * ISATTY:                                ISATTY.              (line   6)
  * ISHFT:                                 ISHFT.               (line   6)
  * ISHFTC:                                ISHFTC.              (line   6)
  * ISIGN:                                 SIGN.                (line   6)
  * ISNAN:                                 ISNAN.               (line   6)
  * ITIME:                                 ITIME.               (line   6)
  * JIABS:                                 ABS.                 (line   6)
  * JIAND:                                 IAND.                (line   6)
*************** Keyword Index
*** 22526,22531 ****
--- 22526,22532 ----
  * LOC <1>:                               LOC.                 (line   6)
  * location of a variable in memory:      LOC.                 (line   6)
  * LOG:                                   LOG.                 (line   6)
+ * LOG_GAMMA:                             LOG_GAMMA.           (line   6)
  * LOG10:                                 LOG10.               (line   6)
  * logarithm function:                    LOG.                 (line   6)
  * logarithm function with base 10:       LOG10.               (line   6)
*************** Keyword Index
*** 22543,22549 ****
  * logical, variable representation:      Internal representation of LOGICAL variables.
                                                                (line   6)
  * login name:                            GETLOG.              (line   6)
- * LOG_GAMMA:                             LOG_GAMMA.           (line   6)
  * loop interchange, Fortran:             Code Gen Options.    (line 455)
  * loop interchange, warning:             Error and Warning Options.
                                                                (line 130)
--- 22544,22549 ----
*************** Keyword Index
*** 22610,22622 ****
  * moving allocation:                     MOVE_ALLOC.          (line   6)
  * multiply array elements:               PRODUCT.             (line   6)
  * MVBITS:                                MVBITS.              (line   6)
! * NAME:                                  OPEN( ... NAME=).    (line   6)
  * Namelist:                              Extensions to namelist.
                                                                (line   6)
  * natural logarithm function:            LOG.                 (line   6)
  * NEAREST:                               NEAREST.             (line   6)
- * newline:                               NEW_LINE.            (line   6)
  * NEW_LINE:                              NEW_LINE.            (line   6)
  * NINT:                                  NINT.                (line   6)
  * norm, Euclidean:                       NORM2.               (line   6)
  * NORM2:                                 NORM2.               (line   6)
--- 22610,22622 ----
  * moving allocation:                     MOVE_ALLOC.          (line   6)
  * multiply array elements:               PRODUCT.             (line   6)
  * MVBITS:                                MVBITS.              (line   6)
! * NAME:                                  OPEN( ... NAME=).    (line   6)
  * Namelist:                              Extensions to namelist.
                                                                (line   6)
  * natural logarithm function:            LOG.                 (line   6)
  * NEAREST:                               NEAREST.             (line   6)
  * NEW_LINE:                              NEW_LINE.            (line   6)
+ * newline:                               NEW_LINE.            (line   6)
  * NINT:                                  NINT.                (line   6)
  * norm, Euclidean:                       NORM2.               (line   6)
  * NORM2:                                 NORM2.               (line   6)
*************** Keyword Index
*** 22632,22644 ****
                                                                (line 171)
  * OpenMP:                                OpenMP.              (line   6)
  * OpenMP Allocators:                     Fortran Dialect Options.
!                                                               (line 193)
  * OpenMP parallel:                       Fortran Dialect Options.
!                                                               (line 181)
  * OpenMP SIMD:                           Fortran Dialect Options.
!                                                               (line 211)
  * operators, unary:                      Unary operators.     (line   6)
! * operators, xor:                        .XOR. operator.      (line   6)
  * options inquiry function:              COMPILER_OPTIONS.    (line   6)
  * options, code generation:              Code Gen Options.    (line   6)
  * options, debugging:                    Debugging Options.   (line   6)
--- 22632,22644 ----
                                                                (line 171)
  * OpenMP:                                OpenMP.              (line   6)
  * OpenMP Allocators:                     Fortran Dialect Options.
!                                                               (line 191)
  * OpenMP parallel:                       Fortran Dialect Options.
!                                                               (line 180)
  * OpenMP SIMD:                           Fortran Dialect Options.
!                                                               (line 209)
  * operators, unary:                      Unary operators.     (line   6)
! * operators, xor:                        .XOR. operator.      (line   6)
  * options inquiry function:              COMPILER_OPTIONS.    (line   6)
  * options, code generation:              Code Gen Options.    (line   6)
  * options, debugging:                    Debugging Options.   (line   6)
*************** Keyword Index
*** 22658,22664 ****
  * options, preprocessor:                 Preprocessing Options.
                                                                (line   6)
  * options, real kind type promotion:     Fortran Dialect Options.
!                                                               (line 288)
  * options, run-time:                     Code Gen Options.    (line   6)
  * options, runtime:                      Runtime Options.     (line   6)
  * options, warnings:                     Error and Warning Options.
--- 22658,22664 ----
  * options, preprocessor:                 Preprocessing Options.
                                                                (line   6)
  * options, real kind type promotion:     Fortran Dialect Options.
!                                                               (line 286)
  * options, run-time:                     Code Gen Options.    (line   6)
  * options, runtime:                      Runtime Options.     (line   6)
  * options, warnings:                     Error and Warning Options.
*************** Keyword Index
*** 22851,22857 ****
  * sign copying:                          SIGN.                (line   6)
  * SIGNAL:                                SIGNAL.              (line   6)
  * SIMD:                                  Fortran Dialect Options.
!                                                               (line 211)
  * SIN:                                   SIN.                 (line   6)
  * SIND:                                  SIND.                (line   6)
  * sine:                                  SIN.                 (line   6)
--- 22851,22857 ----
  * sign copying:                          SIGN.                (line   6)
  * SIGNAL:                                SIGNAL.              (line   6)
  * SIMD:                                  Fortran Dialect Options.
!                                                               (line 209)
  * SIN:                                   SIN.                 (line   6)
  * SIND:                                  SIND.                (line   6)
  * sine:                                  SIN.                 (line   6)
*************** Keyword Index
*** 22923,22928 ****
--- 22923,22929 ----
  * syntax checking:                       Error and Warning Options.
                                                                (line  32)
  * SYSTEM:                                SYSTEM.              (line   6)
+ * SYSTEM_CLOCK:                          SYSTEM_CLOCK.        (line   6)
  * system, error handling:                GERROR.              (line   6)
  * system, error handling <1>:            IERRNO.              (line   6)
  * system, error handling <2>:            PERROR.              (line   6)
*************** Keyword Index
*** 22939,22945 ****
  * system, user ID:                       GETUID.              (line   6)
  * system, working directory:             CHDIR.               (line   6)
  * system, working directory <1>:         GETCWD.              (line   6)
- * SYSTEM_CLOCK:                          SYSTEM_CLOCK.        (line   6)
  * tabulators:                            Error and Warning Options.
                                                                (line 193)
  * TAN:                                   TAN.                 (line   6)
--- 22940,22945 ----
*************** Keyword Index
*** 23115,23576 ****
  
  
  Tag Table:
! Node: Top1950
! Node: Introduction3270
! Node: About GNU Fortran3617
! Node: GNU Fortran and GCC8601
! Node: Standards10678
! Node: Fortran 95 status12471
! Node: Fortran 2003 status13445
! Node: Fortran 2008 status13895
! Node: Fortran 2018 status14553
! Node: Invoking GNU Fortran16156
! Node: Option Summary18046
! Node: Fortran Dialect Options22390
! Node: Preprocessing Options39345
! Node: Error and Warning Options49343
! Node: Debugging Options61544
! Node: Directory Options65232
! Node: Link Options66667
! Node: Runtime Options67798
! Node: Developer Options70055
! Node: Code Gen Options72467
! Node: Interoperability Options93569
! Node: Environment Variables95644
! Node: Runtime96257
! Node: TMPDIR97428
! Node: GFORTRAN_STDIN_UNIT98098
! Node: GFORTRAN_STDOUT_UNIT98480
! Node: GFORTRAN_STDERR_UNIT98881
! Node: GFORTRAN_UNBUFFERED_ALL99283
! Node: GFORTRAN_UNBUFFERED_PRECONNECTED99814
! Node: GFORTRAN_SHOW_LOCUS100458
! Node: GFORTRAN_OPTIONAL_PLUS100954
! Node: GFORTRAN_LIST_SEPARATOR101432
! Node: GFORTRAN_CONVERT_UNIT102040
! Node: GFORTRAN_ERROR_BACKTRACE105325
! Node: GFORTRAN_FORMATTED_BUFFER_SIZE105921
! Node: GFORTRAN_UNFORMATTED_BUFFER_SIZE106369
! Node: Compiler Characteristics106798
! Node: KIND Type Parameters107597
! Node: Internal representation of LOGICAL variables109025
! Node: Evaluation of logical expressions109882
! Node: MAX and MIN intrinsics with REAL NaN arguments110733
! Node: Thread-safety of the runtime library111554
! Node: Data consistency and durability113959
! Node: Files opened without an explicit ACTION= specifier117069
! Node: File operations on symbolic links117760
! Node: File format of unformatted sequential files118880
! Node: Asynchronous I/O121254
! Node: Behavior on integer overflow121991
! Node: Extensions122764
! Node: Extensions implemented in GNU Fortran123369
! Node: Old-style kind specifications125314
! Node: Old-style variable initialization126416
! Node: Extensions to namelist127728
! Node: X format descriptor without count field130031
! Node: Commas in FORMAT specifications130558
! Node: Missing period in FORMAT specifications131311
! Node: Default widths for F, G and I format descriptors131907
! Node: I/O item lists132612
! Node: Q exponent-letter133006
! Node: BOZ literal constants133604
! Node: Real array indices135181
! Node: Unary operators135480
! Node: Implicitly convert LOGICAL and INTEGER values135894
! Node: Hollerith constants support136853
! Node: Character conversion139077
! Node: Cray pointers139971
! Node: CONVERT specifier145472
! Node: OpenMP147787
! Node: OpenACC150036
! Node: Argument list functions151177
! Node: Read/Write after EOF marker152820
! Node: STRUCTURE and RECORD153423
! Node: UNION and MAP158510
! Node: Type variants for integer intrinsics161478
! Node: AUTOMATIC and STATIC attributes163373
! Node: Form feed as whitespace164906
! Node: TYPE as an alias for PRINT165459
! Node: %LOC as an rvalue165924
! Node: .XOR. operator166571
! Node: Bitwise logical operators166971
! Node: Extended I/O specifiers168472
! Node: Legacy PARAMETER statements172192
! Node: Default exponents172797
! Node: Extensions not implemented in GNU Fortran173149
! Node: ENCODE and DECODE statements174116
! Node: Variable FORMAT expressions175447
! Node: Alternate complex function syntax176552
! Node: Volatile COMMON blocks177102
! Node: OPEN( ... NAME=)177604
! Node: Q edit descriptor178032
! Node: Mixed-Language Programming178984
! Node: Interoperability with C180217
! Node: Intrinsic Types181552
! Node: Derived Types and struct182573
! Node: Interoperable Global Variables183915
! Node: Interoperable Subroutines and Functions185190
! Node: Working with C Pointers188681
! Node: Further Interoperability of Fortran with C193346
! Node: GNU Fortran Compiler Directives194690
! Node: ATTRIBUTES directive195066
! Node: UNROLL directive198889
! Node: BUILTIN directive199534
! Node: IVDEP directive200376
! Node: VECTOR directive201289
! Node: NOVECTOR directive201795
! Node: Non-Fortran Main Program202288
! Node: _gfortran_set_args204476
! Node: _gfortran_set_options205414
! Node: _gfortran_set_convert209141
! Node: _gfortran_set_record_marker210009
! Node: _gfortran_set_fpe210819
! Node: _gfortran_set_max_subrecord_length212017
! Node: Naming and argument-passing conventions212940
! Node: Naming conventions213659
! Node: Argument passing conventions215131
! Node: Coarray Programming220506
! Node: Type and enum ABI Documentation220753
! Node: caf_token_t221051
! Node: caf_register_t221287
! Node: caf_deregister_t222498
! Node: caf_reference_t222999
! Node: caf_team_t227324
! Node: Function ABI Documentation227623
! Node: _gfortran_caf_init230073
! Node: _gfortran_caf_finish231499
! Node: _gfortran_caf_this_image232438
! Node: _gfortran_caf_num_images233193
! Node: _gfortran_caf_image_status234304
! Node: _gfortran_caf_failed_images235424
! Node: _gfortran_caf_stopped_images236594
! Node: _gfortran_caf_register237767
! Node: _gfortran_caf_deregister241948
! Node: _gfortran_caf_is_present243554
! Node: _gfortran_caf_send244633
! Node: _gfortran_caf_get247823
! Node: _gfortran_caf_sendget250904
! Node: _gfortran_caf_send_by_ref254815
! Node: _gfortran_caf_get_by_ref258424
! Node: _gfortran_caf_sendget_by_ref261943
! Node: _gfortran_caf_lock266239
! Node: _gfortran_caf_unlock268028
! Node: _gfortran_caf_event_post269509
! Node: _gfortran_caf_event_wait270957
! Node: _gfortran_caf_event_query273063
! Node: _gfortran_caf_sync_all274394
! Node: _gfortran_caf_sync_images275322
! Node: _gfortran_caf_sync_memory276857
! Node: _gfortran_caf_error_stop277849
! Node: _gfortran_caf_error_stop_str278453
! Node: _gfortran_caf_fail_image279158
! Node: _gfortran_caf_atomic_define279694
! Node: _gfortran_caf_atomic_ref281009
! Node: _gfortran_caf_atomic_cas282313
! Node: _gfortran_caf_atomic_op284074
! Node: _gfortran_caf_co_broadcast286176
! Node: _gfortran_caf_co_max287281
! Node: _gfortran_caf_co_min288907
! Node: _gfortran_caf_co_sum290527
! Node: _gfortran_caf_co_reduce292067
! Node: Intrinsic Procedures294711
! Node: Introduction to Intrinsics311915
! Node: ABORT314109
! Node: ABS314864
! Node: ACCESS316588
! Node: ACHAR318489
! Node: ACOS319703
! Node: ACOSD320992
! Node: ACOSH322204
! Node: ADJUSTL323290
! Node: ADJUSTR324237
! Node: AIMAG325192
! Node: AINT326642
! Node: ALARM328236
! Node: ALL329868
! Node: ALLOCATED331792
! Node: AND332931
! Node: ANINT334671
! Node: ANY336156
! Node: ASIN338082
! Node: ASIND339360
! Node: ASINH340550
! Node: ASSOCIATED341646
! Node: ATAN344657
! Node: ATAND346133
! Node: ATAN2347410
! Node: ATAN2D349279
! Node: ATANH351166
! Node: ATOMIC_ADD352262
! Node: ATOMIC_AND353811
! Node: ATOMIC_CAS355414
! Node: ATOMIC_DEFINE357283
! Node: ATOMIC_FETCH_ADD359022
! Node: ATOMIC_FETCH_AND360839
! Node: ATOMIC_FETCH_OR362644
! Node: ATOMIC_FETCH_XOR364436
! Node: ATOMIC_OR366234
! Node: ATOMIC_REF367834
! Node: ATOMIC_XOR369750
! Node: BACKTRACE371350
! Node: BESSEL_J0371930
! Node: BESSEL_J1373031
! Node: BESSEL_JN374133
! Node: BESSEL_Y0376038
! Node: BESSEL_Y1377078
! Node: BESSEL_YN378118
! Node: BGE380034
! Node: BGT380736
! Node: BIT_SIZE381396
! Node: BLE382218
! Node: BLT382910
! Node: BTEST383558
! Node: C_ASSOCIATED385003
! Node: C_F_POINTER386219
! Node: C_F_PROCPOINTER387659
! Node: C_FUNLOC389171
! Node: C_LOC390552
! Node: C_SIZEOF391841
! Node: CEILING393254
! Node: CHAR394267
! Node: CHDIR395581
! Node: CHMOD396755
! Node: CMPLX398670
! Node: CO_BROADCAST400113
! Node: CO_MAX401940
! Node: CO_MIN403848
! Node: CO_REDUCE405742
! Node: CO_SUM409318
! Node: COMMAND_ARGUMENT_COUNT411299
! Node: COMPILER_OPTIONS412221
! Node: COMPILER_VERSION413251
! Node: COMPLEX414219
! Node: CONJG415358
! Node: COS416414
! Node: COSD417785
! Node: COSH419018
! Node: COTAN420194
! Node: COTAND421436
! Node: COUNT422678
! Node: CPU_TIME424703
! Node: CSHIFT426065
! Node: CTIME427725
! Node: DATE_AND_TIME429248
! Node: DBLE431635
! Node: DCMPLX432430
! Node: DIGITS433612
! Node: DIM434579
! Node: DOT_PRODUCT435987
! Node: DPROD437630
! Node: DREAL438592
! Node: DSHIFTL439258
! Node: DSHIFTR440591
! Node: DTIME441925
! Node: EOSHIFT444631
! Node: EPSILON446704
! Node: ERF447431
! Node: ERFC448297
! Node: ERFC_SCALED449192
! Node: ETIME449885
! Node: EVENT_QUERY452055
! Node: EXECUTE_COMMAND_LINE453644
! Node: EXIT456424
! Node: EXP457307
! Node: EXPONENT458461
! Node: EXTENDS_TYPE_OF459225
! Node: FDATE460083
! Node: FGET461574
! Node: FGETC463411
! Node: FINDLOC465231
! Node: FLOOR467830
! Node: FLUSH468826
! Node: FNUM470705
! Node: FPUT471430
! Node: FPUTC473074
! Node: FRACTION474865
! Node: FREE475769
! Node: FSEEK476612
! Node: FSTAT478918
! Node: FTELL480019
! Node: GAMMA481001
! Node: GERROR482081
! Node: GETARG482834
! Node: GET_COMMAND484573
! Node: GET_COMMAND_ARGUMENT485952
! Node: GETCWD488004
! Node: GETENV488984
! Node: GET_ENVIRONMENT_VARIABLE490416
! Node: GETGID492579
! Node: GETLOG493121
! Node: GETPID493979
! Node: GETUID494714
! Node: GMTIME495235
! Node: HOSTNM497010
! Node: HUGE497931
! Node: HYPOT498653
! Node: IACHAR499479
! Node: IALL500657
! Node: IAND502152
! Node: IANY503909
! Node: IARGC505413
! Node: IBCLR506447
! Node: IBITS507670
! Node: IBSET509149
! Node: ICHAR510367
! Node: IDATE512582
! Node: IEOR513882
! Node: IERRNO515532
! Node: IMAGE_INDEX516080
! Node: INDEX intrinsic517107
! Node: INT518728
! Node: INT2520510
! Node: INT8521216
! Node: IOR521922
! Node: IPARITY523548
! Node: IRAND525111
! Node: IS_CONTIGUOUS526470
! Node: IS_IOSTAT_END527636
! Node: IS_IOSTAT_EOR528743
! Node: ISATTY529872
! Node: ISHFT530653
! Node: ISHFTC532177
! Node: ISNAN533939
! Node: ITIME534706
! Node: KILL536004
! Node: KIND537145
! Node: LBOUND538043
! Node: LCOBOUND539386
! Node: LEADZ540526
! Node: LEN541402
! Node: LEN_TRIM542743
! Node: LGE543741
! Node: LGT545354
! Node: LINK546932
! Node: LLE547976
! Node: LLT549576
! Node: LNBLNK551147
! Node: LOC551930
! Node: LOG552662
! Node: LOG10554098
! Node: LOG_GAMMA555076
! Node: LOGICAL556274
! Node: LSHIFT557098
! Node: LSTAT558230
! Node: LTIME559444
! Node: MALLOC561141
! Node: MASKL562603
! Node: MASKR563370
! Node: MATMUL564140
! Node: MAX565300
! Node: MAXEXPONENT566692
! Node: MAXLOC567509
! Node: MAXVAL570127
! Node: MCLOCK571774
! Node: MCLOCK8572812
! Node: MERGE574057
! Node: MERGE_BITS574809
! Node: MIN575848
! Node: MINEXPONENT577243
! Node: MINLOC577874
! Node: MINVAL580523
! Node: MOD582172
! Node: MODULO584357
! Node: MOVE_ALLOC585822
! Node: MVBITS586855
! Node: NEAREST588482
! Node: NEW_LINE589582
! Node: NINT590355
! Node: NORM2591769
! Node: NOT592908
! Node: NULL594053
! Node: NUM_IMAGES594961
! Node: OR596667
! Node: PACK598395
! Node: PARITY600439
! Node: PERROR601660
! Node: POPCNT602285
! Node: POPPAR603166
! Node: PRECISION604229
! Node: PRESENT605166
! Node: PRODUCT606278
! Node: RADIX607812
! Node: RAN608623
! Node: RAND609084
! Node: RANDOM_INIT610422
! Node: RANDOM_NUMBER612498
! Node: RANDOM_SEED613755
! Node: RANGE616230
! Node: RANK616915
! Node: REAL617696
! Node: RENAME619775
! Node: REPEAT620797
! Node: RESHAPE621525
! Node: RRSPACING622992
! Node: RSHIFT623685
! Node: SAME_TYPE_AS624873
! Node: SCALE625705
! Node: SCAN626486
! Node: SECNDS628049
! Node: SECOND629141
! Node: SELECTED_CHAR_KIND630017
! Node: SELECTED_INT_KIND631612
! Node: SELECTED_REAL_KIND632789
! Node: SET_EXPONENT635475
! Node: SHAPE636462
! Node: SHIFTA637891
! Node: SHIFTL638887
! Node: SHIFTR639752
! Node: SIGN640618
! Node: SIGNAL641909
! Node: SIN643869
! Node: SIND645049
! Node: SINH646254
! Node: SIZE647207
! Node: SIZEOF648531
! Node: SLEEP650191
! Node: SPACING650752
! Node: SPREAD651766
! Node: SQRT652917
! Node: SRAND654150
! Node: STAT655394
! Node: STORAGE_SIZE658576
! Node: SUM659460
! Node: SYMLNK660952
! Node: SYSTEM662092
! Node: SYSTEM_CLOCK663347
! Node: TAN666200
! Node: TAND667274
! Node: TANH668257
! Node: THIS_IMAGE669420
! Node: TIME671725
! Node: TIME8672916
! Node: TINY674135
! Node: TRAILZ674736
! Node: TRANSFER675569
! Node: TRANSPOSE677605
! Node: TRIM678295
! Node: TTYNAM679158
! Node: UBOUND680074
! Node: UCOBOUND681469
! Node: UMASK682611
! Node: UNLINK683293
! Node: UNPACK684278
! Node: VERIFY685578
! Node: XOR687312
! Node: Intrinsic Modules689127
! Node: ISO_FORTRAN_ENV689414
! Node: ISO_C_BINDING693815
! Node: IEEE modules697760
! Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS698901
! Node: OpenACC Module OPENACC703117
! Node: Contributing704043
! Node: Contributors704873
! Node: Projects706527
! Node: Copying707705
! Node: GNU Free Documentation License745256
! Node: Funding770385
! Node: Option Index772911
! Node: Keyword Index792323
  
  End Tag Table
--- 23115,23581 ----
  
  
  Tag Table:
! Node: Top1952
! Node: Introduction3284
! Node: About GNU Fortran3631
! Node: GNU Fortran and GCC8739
! Node: Standards10940
! Node: Fortran 95 status12737
! Node: Fortran 2003 status13719
! Node: Fortran 2008 status14169
! Node: Fortran 2018 status14843
! Node: Invoking GNU Fortran16544
! Node: Option Summary18478
! Node: Fortran Dialect Options22822
! Node: Preprocessing Options40669
! Node: Error and Warning Options51099
! Node: Debugging Options63880
! Node: Directory Options67724
! Node: Link Options69235
! Node: Runtime Options70394
! Node: Developer Options72739
! Node: Code Gen Options75207
! Node: Interoperability Options97097
! Node: Environment Variables99232
! Node: Runtime99857
! Node: TMPDIR101032
! Node: GFORTRAN_STDIN_UNIT101734
! Node: GFORTRAN_STDOUT_UNIT102120
! Node: GFORTRAN_STDERR_UNIT102525
! Node: GFORTRAN_UNBUFFERED_ALL102931
! Node: GFORTRAN_UNBUFFERED_PRECONNECTED103490
! Node: GFORTRAN_SHOW_LOCUS104166
! Node: GFORTRAN_OPTIONAL_PLUS104690
! Node: GFORTRAN_LIST_SEPARATOR105196
! Node: GFORTRAN_CONVERT_UNIT105812
! Node: GFORTRAN_ERROR_BACKTRACE109213
! Node: GFORTRAN_FORMATTED_BUFFER_SIZE109845
! Node: GFORTRAN_UNFORMATTED_BUFFER_SIZE110301
! Node: Compiler Characteristics110738
! Node: KIND Type Parameters111537
! Node: Internal representation of LOGICAL variables113057
! Node: Evaluation of logical expressions113954
! Node: MAX and MIN intrinsics with REAL NaN arguments114817
! Node: Thread-safety of the runtime library115670
! Node: Data consistency and durability118155
! Node: Files opened without an explicit ACTION= specifier121325
! Node: File operations on symbolic links122036
! Node: File format of unformatted sequential files123182
! Node: Asynchronous I/O125568
! Node: Behavior on integer overflow126317
! Node: Extensions127102
! Node: Extensions implemented in GNU Fortran127707
! Node: Old-style kind specifications129684
! Node: Old-style variable initialization130846
! Node: Extensions to namelist132182
! Node: X format descriptor without count field134533
! Node: Commas in FORMAT specifications135072
! Node: Missing period in FORMAT specifications135837
! Node: Default widths for F, G and I format descriptors136443
! Node: I/O item lists137166
! Node: Q exponent-letter137574
! Node: BOZ literal constants138208
! Node: Real array indices139885
! Node: Unary operators140188
! Node: Implicitly convert LOGICAL and INTEGER values140602
! Node: Hollerith constants support141625
! Node: Character conversion143909
! Node: Cray pointers144827
! Node: CONVERT specifier150440
! Node: OpenMP152843
! Node: OpenACC155164
! Node: Argument list functions156357
! Node: Read/Write after EOF marker158052
! Node: STRUCTURE and RECORD158671
! Node: UNION and MAP163834
! Node: Type variants for integer intrinsics166835
! Node: AUTOMATIC and STATIC attributes168994
! Node: Form feed as whitespace170591
! Node: TYPE as an alias for PRINT171144
! Node: %LOC as an rvalue171621
! Node: .XOR. operator172288
! Node: Bitwise logical operators172704
! Node: Extended I/O specifiers174289
! Node: Legacy PARAMETER statements178137
! Node: Default exponents178754
! Node: Extensions not implemented in GNU Fortran179118
! Node: ENCODE and DECODE statements180085
! Node: Variable FORMAT expressions181444
! Node: Alternate complex function syntax182561
! Node: Volatile COMMON blocks183127
! Node: OPEN( ... NAME=)183661
! Node: Q edit descriptor184113
! Node: Mixed-Language Programming185101
! Node: Interoperability with C186358
! Node: Intrinsic Types187729
! Node: Derived Types and struct188782
! Node: Interoperable Global Variables190152
! Node: Interoperable Subroutines and Functions191451
! Node: Working with C Pointers194994
! Node: Further Interoperability of Fortran with C199715
! Node: GNU Fortran Compiler Directives201083
! Node: ATTRIBUTES directive201459
! Node: UNROLL directive205462
! Node: BUILTIN directive206119
! Node: IVDEP directive206977
! Node: VECTOR directive207902
! Node: NOVECTOR directive208420
! Node: Non-Fortran Main Program208925
! Node: _gfortran_set_args211141
! Node: _gfortran_set_options212095
! Node: _gfortran_set_convert215938
! Node: _gfortran_set_record_marker216818
! Node: _gfortran_set_fpe217640
! Node: _gfortran_set_max_subrecord_length218874
! Node: Naming and argument-passing conventions219809
! Node: Naming conventions220528
! Node: Argument passing conventions222072
! Node: Coarray Programming227601
! Node: Type and enum ABI Documentation227848
! Node: caf_token_t228146
! Node: caf_register_t228390
! Node: caf_deregister_t229621
! Node: caf_reference_t230130
! Node: caf_team_t234487
! Node: Function ABI Documentation234790
! Node: _gfortran_caf_init237240
! Node: _gfortran_caf_finish238694
! Node: _gfortran_caf_this_image239645
! Node: _gfortran_caf_num_images240420
! Node: _gfortran_caf_image_status241547
! Node: _gfortran_caf_failed_images242687
! Node: _gfortran_caf_stopped_images243865
! Node: _gfortran_caf_register245046
! Node: _gfortran_caf_deregister249319
! Node: _gfortran_caf_is_present250941
! Node: _gfortran_caf_send252028
! Node: _gfortran_caf_get255246
! Node: _gfortran_caf_sendget258355
! Node: _gfortran_caf_send_by_ref262294
! Node: _gfortran_caf_get_by_ref265935
! Node: _gfortran_caf_sendget_by_ref269490
! Node: _gfortran_caf_lock273826
! Node: _gfortran_caf_unlock275631
! Node: _gfortran_caf_event_post277120
! Node: _gfortran_caf_event_wait278580
! Node: _gfortran_caf_event_query280698
! Node: _gfortran_caf_sync_all282041
! Node: _gfortran_caf_sync_images282977
! Node: _gfortran_caf_sync_memory284532
! Node: _gfortran_caf_error_stop285536
! Node: _gfortran_caf_error_stop_str286152
! Node: _gfortran_caf_fail_image286869
! Node: _gfortran_caf_atomic_define287417
! Node: _gfortran_caf_atomic_ref288752
! Node: _gfortran_caf_atomic_cas290076
! Node: _gfortran_caf_atomic_op291861
! Node: _gfortran_caf_co_broadcast294007
! Node: _gfortran_caf_co_max295120
! Node: _gfortran_caf_co_min296754
! Node: _gfortran_caf_co_sum298382
! Node: _gfortran_caf_co_reduce299930
! Node: Intrinsic Procedures302598
! Node: Introduction to Intrinsics320930
! Node: ABORT323192
! Node: ABS323967
! Node: ACCESS325847
! Node: ACHAR327816
! Node: ACOS329058
! Node: ACOSD330395
! Node: ACOSH331651
! Node: ADJUSTL332769
! Node: ADJUSTR333736
! Node: AIMAG334711
! Node: AINT336245
! Node: ALARM337891
! Node: ALL339583
! Node: ALLOCATED341555
! Node: AND342738
! Node: ANINT344514
! Node: ANY346055
! Node: ASIN348033
! Node: ASIND349359
! Node: ASINH350593
! Node: ASSOCIATED351721
! Node: ATAN354760
! Node: ATAND356288
! Node: ATAN2357605
! Node: ATAN2D359514
! Node: ATANH361441
! Node: ATOMIC_ADD362569
! Node: ATOMIC_AND364146
! Node: ATOMIC_CAS365777
! Node: ATOMIC_DEFINE367678
! Node: ATOMIC_FETCH_ADD369449
! Node: ATOMIC_FETCH_AND371298
! Node: ATOMIC_FETCH_OR373131
! Node: ATOMIC_FETCH_XOR374951
! Node: ATOMIC_OR376777
! Node: ATOMIC_REF378405
! Node: ATOMIC_XOR380353
! Node: BACKTRACE381981
! Node: BESSEL_J0382581
! Node: BESSEL_J1383718
! Node: BESSEL_JN384856
! Node: BESSEL_Y0386829
! Node: BESSEL_Y1387905
! Node: BESSEL_YN388981
! Node: BGE390965
! Node: BGT391687
! Node: BIT_SIZE392367
! Node: BLE393213
! Node: BLT393925
! Node: BTEST394593
! Node: C_ASSOCIATED396126
! Node: C_F_POINTER397370
! Node: C_F_PROCPOINTER398842
! Node: C_FUNLOC400378
! Node: C_LOC401775
! Node: C_SIZEOF403080
! Node: CEILING404541
! Node: CHAR405582
! Node: CHDIR406932
! Node: CHMOD408126
! Node: CMPLX410097
! Node: CO_BROADCAST411588
! Node: CO_MAX413431
! Node: CO_MIN415351
! Node: CO_REDUCE417257
! Node: CO_SUM420849
! Node: COMMAND_ARGUMENT_COUNT422842
! Node: COMPILER_OPTIONS423780
! Node: COMPILER_VERSION424830
! Node: COMPLEX425814
! Node: CONJG427009
! Node: COS428105
! Node: COSD429560
! Node: COSH430869
! Node: COTAN432093
! Node: COTAND433395
! Node: COUNT434689
! Node: CPU_TIME436750
! Node: CSHIFT438144
! Node: CTIME439832
! Node: DATE_AND_TIME441387
! Node: DBLE443850
! Node: DCMPLX444669
! Node: DIGITS445891
! Node: DIM446882
! Node: DOT_PRODUCT448358
! Node: DPROD450077
! Node: DREAL451079
! Node: DSHIFTL451765
! Node: DSHIFTR453134
! Node: DTIME454504
! Node: EOSHIFT457274
! Node: EPSILON459379
! Node: ERF460122
! Node: ERFC461020
! Node: ERFC_SCALED461947
! Node: ETIME462660
! Node: EVENT_QUERY464882
! Node: EXECUTE_COMMAND_LINE466495
! Node: EXIT469367
! Node: EXP470270
! Node: EXPONENT471504
! Node: EXTENDS_TYPE_OF472288
! Node: FDATE473154
! Node: FGET474673
! Node: FGETC476538
! Node: FINDLOC478390
! Node: FLOOR481029
! Node: FLUSH482053
! Node: FNUM483968
! Node: FPUT484717
! Node: FPUTC486389
! Node: FRACTION488212
! Node: FREE489144
! Node: FSEEK490015
! Node: FSTAT492369
! Node: FTELL493502
! Node: GAMMA494504
! Node: GERROR495616
! Node: GETARG496385
! Node: GET_COMMAND498144
! Node: GET_COMMAND_ARGUMENT499543
! Node: GETCWD501623
! Node: GETENV502619
! Node: GET_ENVIRONMENT_VARIABLE504075
! Node: GETGID506278
! Node: GETLOG506840
! Node: GETPID507722
! Node: GETUID508473
! Node: GMTIME509014
! Node: HOSTNM510817
! Node: HUGE511758
! Node: HYPOT512504
! Node: IACHAR513346
! Node: IALL514556
! Node: IAND516079
! Node: IANY517924
! Node: IARGC519456
! Node: IBCLR520506
! Node: IBITS521813
! Node: IBSET523388
! Node: ICHAR524690
! Node: IDATE526965
! Node: IEOR528281
! Node: IERRNO530019
! Node: IMAGE_INDEX530583
! Node: INDEX intrinsic531618
! Node: INT533291
! Node: INT2535165
! Node: INT8535907
! Node: IOR536649
! Node: IPARITY538363
! Node: IRAND539954
! Node: IS_CONTIGUOUS541345
! Node: IS_IOSTAT_END542531
! Node: IS_IOSTAT_EOR543678
! Node: ISATTY544847
! Node: ISHFT545648
! Node: ISHFTC547260
! Node: ISNAN549118
! Node: ITIME549913
! Node: KILL551227
! Node: KIND552408
! Node: LBOUND553342
! Node: LCOBOUND554705
! Node: LEADZ555865
! Node: LEN556769
! Node: LEN_TRIM558146
! Node: LGE559168
! Node: LGT560853
! Node: LINK562503
! Node: LLE563579
! Node: LLT565251
! Node: LNBLNK566894
! Node: LOC567701
! Node: LOG568453
! Node: LOG10569981
! Node: LOG_GAMMA571007
! Node: LOGICAL572261
! Node: LSHIFT573109
! Node: LSTAT574277
! Node: LTIME575523
! Node: MALLOC577248
! Node: MASKL578754
! Node: MASKR579545
! Node: MATMUL580339
! Node: MAX581547
! Node: MAXEXPONENT583015
! Node: MAXLOC583856
! Node: MAXVAL586522
! Node: MCLOCK588209
! Node: MCLOCK8589275
! Node: MERGE590560
! Node: MERGE_BITS591332
! Node: MIN592395
! Node: MINEXPONENT593866
! Node: MINLOC594525
! Node: MINVAL597226
! Node: MOD598919
! Node: MODULO601212
! Node: MOVE_ALLOC602721
! Node: MVBITS603782
! Node: NEAREST605517
! Node: NEW_LINE606673
! Node: NINT607462
! Node: NORM2608924
! Node: NOT610079
! Node: NULL611304
! Node: NUM_IMAGES612220
! Node: OR613938
! Node: PACK615702
! Node: PARITY617770
! Node: PERROR619015
! Node: POPCNT619660
! Node: POPPAR620565
! Node: PRECISION621660
! Node: PRESENT622625
! Node: PRODUCT623753
! Node: RADIX625323
! Node: RAN626158
! Node: RAND626631
! Node: RANDOM_INIT628001
! Node: RANDOM_NUMBER630133
! Node: RANDOM_SEED631406
! Node: RANGE633937
! Node: RANK634658
! Node: REAL635455
! Node: RENAME637662
! Node: REPEAT638716
! Node: RESHAPE639464
! Node: RRSPACING640947
! Node: RSHIFT641660
! Node: SAME_TYPE_AS642880
! Node: SCALE643720
! Node: SCAN644529
! Node: SECNDS646128
! Node: SECOND647240
! Node: SELECTED_CHAR_KIND648140
! Node: SELECTED_INT_KIND649747
! Node: SELECTED_REAL_KIND650944
! Node: SET_EXPONENT653742
! Node: SHAPE654753
! Node: SHIFTA656198
! Node: SHIFTL657222
! Node: SHIFTR658115
! Node: SIGN659009
! Node: SIGNAL660364
! Node: SIN662388
! Node: SIND663648
! Node: SINH664929
! Node: SIZE665914
! Node: SIZEOF667258
! Node: SLEEP668954
! Node: SPACING669527
! Node: SPREAD670553
! Node: SQRT671720
! Node: SRAND673041
! Node: STAT674345
! Node: STORAGE_SIZE677607
! Node: SUM678499
! Node: SYMLNK680027
! Node: SYSTEM681207
! Node: SYSTEM_CLOCK682498
! Node: TAN685411
! Node: TAND686529
! Node: TANH687552
! Node: THIS_IMAGE688763
! Node: TIME691088
! Node: TIME8692299
! Node: TINY693550
! Node: TRAILZ694175
! Node: TRANSFER695036
! Node: TRANSPOSE697096
! Node: TRIM697806
! Node: TTYNAM698685
! Node: UBOUND699625
! Node: UCOBOUND701040
! Node: UMASK702202
! Node: UNLINK702908
! Node: UNPACK703921
! Node: VERIFY705241
! Node: XOR707011
! Node: Intrinsic Modules708862
! Node: ISO_FORTRAN_ENV709149
! Node: ISO_C_BINDING713738
! Node: IEEE modules718235
! Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS719420
! Node: OpenACC Module OPENACC724032
! Node: Contributing724994
! Node: Contributors725824
! Node: Projects727556
! Node: Copying728734
! Node: GNU Free Documentation License766300
! Node: Funding791432
! Node: Option Index793957
! Node: Keyword Index813381
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/gcc/fortran/interface.cc gcc-14.3.0-RC-20260619/gcc/fortran/interface.cc
*** gcc-14.3.0/gcc/fortran/interface.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/interface.cc	Fri Jun 19 06:51:02 2026
*************** gfc_match_end_interface (void)
*** 452,462 ****
  
      case INTERFACE_DTIO:
      case INTERFACE_GENERIC:
        if (type != current_interface.type
! 	  || strcmp (current_interface.sym->name, name) != 0)
  	{
! 	  gfc_error ("Expecting %<END INTERFACE %s%> at %C",
! 		     current_interface.sym->name);
  	  m = MATCH_ERROR;
  	}
  
--- 452,471 ----
  
      case INTERFACE_DTIO:
      case INTERFACE_GENERIC:
+       /* If a use-associated symbol is renamed, check the local_name.   */
+       const char *local_name = current_interface.sym->name;
+ 
+       if (current_interface.sym->attr.use_assoc
+ 	  && current_interface.sym->attr.use_rename
+ 	  && current_interface.sym->ns->use_stmts->rename
+ 	  && (current_interface.sym->ns->use_stmts->rename->local_name[0]
+ 	      != '\0'))
+ 	local_name = current_interface.sym->ns->use_stmts->rename->local_name;
+ 
        if (type != current_interface.type
! 	  || strcmp (local_name, name) != 0)
  	{
! 	  gfc_error ("Expecting %<END INTERFACE %s%> at %C", local_name);
  	  m = MATCH_ERROR;
  	}
  
*************** matching_typebound_op (gfc_expr** tb_bas
*** 4622,4627 ****
--- 4631,4643 ----
  		gfc_actual_arglist* argcopy;
  		bool matches;
  
+ 		/* If expression matching comes here during parsing, eg. when
+ 		   parsing ASSOCIATE, generic TBPs have not yet been resolved
+ 		   and g->specific will not have been set. Wait for expression
+ 		   resolution by returning NULL.  */
+ 		if (!g->specific && !gfc_current_ns->resolved)
+ 		  return NULL;
+ 
  		gcc_assert (g->specific);
  		if (g->specific->error)
  		  continue;
diff -Nrcpad gcc-14.3.0/gcc/fortran/iresolve.cc gcc-14.3.0-RC-20260619/gcc/fortran/iresolve.cc
*** gcc-14.3.0/gcc/fortran/iresolve.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/iresolve.cc	Fri Jun 19 06:51:02 2026
*************** check_charlen_present (gfc_expr *source)
*** 103,108 ****
--- 103,127 ----
      }
  }
  
+ static gfc_intrinsic_sym *
+ copy_intrinsic_sym (const gfc_intrinsic_sym *src)
+ {
+   gfc_intrinsic_sym *copy = XCNEW (gfc_intrinsic_sym);
+   gfc_intrinsic_arg *head = NULL;
+   gfc_intrinsic_arg **tail = &head;
+ 
+   *copy = *src;
+   for (const gfc_intrinsic_arg *arg = src->formal; arg; arg = arg->next)
+     {
+       *tail = XCNEW (gfc_intrinsic_arg);
+       **tail = *arg;
+       (*tail)->next = NULL;
+       tail = &(*tail)->next;
+     }
+   copy->formal = head;
+   return copy;
+ }
+ 
  /* Helper function for resolving the "mask" argument.  */
  
  static void
*************** gfc_resolve_spread (gfc_expr *f, gfc_exp
*** 2645,2651 ****
      gfc_resolve_substring_charlen (source);
  
    if (source->ts.type == BT_CHARACTER)
!     check_charlen_present (source);
  
    f->ts = source->ts;
    f->rank = source->rank + 1;
--- 2664,2674 ----
      gfc_resolve_substring_charlen (source);
  
    if (source->ts.type == BT_CHARACTER)
!     {
!       check_charlen_present (source);
!       f->value.function.isym = copy_intrinsic_sym (f->value.function.isym);
!       f->value.function.isym->formal->ts = source->ts;
!     }
  
    f->ts = source->ts;
    f->rank = source->rank + 1;
diff -Nrcpad gcc-14.3.0/gcc/fortran/match.cc gcc-14.3.0-RC-20260619/gcc/fortran/match.cc
*** gcc-14.3.0/gcc/fortran/match.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/match.cc	Fri Jun 19 06:51:02 2026
*************** gfc_match_select_type (void)
*** 6668,6679 ****
    else
      {
        m = gfc_match (" %e ", &expr1);
!       if (m != MATCH_YES)
  	{
  	  std::swap (ns, gfc_current_ns);
  	  gfc_free_namespace (ns);
  	  return m;
  	}
      }
  
    m = gfc_match (" )%t");
--- 6668,6684 ----
    else
      {
        m = gfc_match (" %e ", &expr1);
!       if (m == MATCH_NO)
  	{
  	  std::swap (ns, gfc_current_ns);
  	  gfc_free_namespace (ns);
  	  return m;
  	}
+       /* On MATCH_ERROR, the temporary block namespace may already contain
+ 	 broken state from the failed expression match.  Avoid freeing it
+ 	 through the normal rollback path.  */
+       else if (m == MATCH_ERROR)
+ 	return m;
      }
  
    m = gfc_match (" )%t");
diff -Nrcpad gcc-14.3.0/gcc/fortran/openmp.cc gcc-14.3.0-RC-20260619/gcc/fortran/openmp.cc
*** gcc-14.3.0/gcc/fortran/openmp.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/openmp.cc	Fri Jun 19 06:51:02 2026
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 8996,9001 ****
--- 8996,9036 ----
  		      }
  		    break;
  		  case OMP_LIST_LINEAR:
+ 		    if (code)
+ 		      {
+ 			bool is_worksharing_for = false;
+ 			switch (code->op)
+ 			  {
+ 			  case EXEC_OMP_DO:
+ 			  case EXEC_OMP_PARALLEL_DO:
+ 			  case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+ 			  case EXEC_OMP_TARGET_PARALLEL_DO:
+ 			  case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+ 			  case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+ 			    is_worksharing_for = true;
+ 			    break;
+ 			  default:
+ 			    break;
+ 			  }
+ 
+ 			if (is_worksharing_for
+ 			    && (n->sym->attr.dimension
+ 				|| n->sym->attr.allocatable))
+ 			  {
+ 			    if (n->sym->attr.allocatable)
+ 			      gfc_error ("Sorry, ALLOCATABLE object %qs in "
+ 					 "LINEAR clause on worksharing-loop "
+ 					 "construct at %L is not yet supported",
+ 					 n->sym->name, &n->where);
+ 			    else
+ 			      gfc_error ("Sorry, array %qs in LINEAR clause "
+ 					 "on worksharing-loop construct at %L "
+ 					 "is not yet supported",
+ 					 n->sym->name, &n->where);
+ 			    break;
+ 			  }
+ 		      }
+ 
  		    if (code
  			&& n->u.linear.op != OMP_LINEAR_DEFAULT
  			&& n->u.linear.op != linear_op)
diff -Nrcpad gcc-14.3.0/gcc/fortran/parse.cc gcc-14.3.0-RC-20260619/gcc/fortran/parse.cc
*** gcc-14.3.0/gcc/fortran/parse.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/parse.cc	Fri Jun 19 06:51:02 2026
*************** parse_executable (gfc_statement st)
*** 6405,6410 ****
--- 6405,6432 ----
  }
  
  
+ /* Update statement function formal argument lists that reference OLD_SYM
+    to point to NEW_SYM instead.  This prevents use-after-free when
+    gfc_fixup_sibling_symbols replaces and frees a symbol that is also
+    used as a statement function dummy argument (PR95879).  */
+ 
+ static void
+ fixup_st_func_formals (gfc_symtree *st, gfc_symbol *old_sym,
+ 		       gfc_symbol *new_sym)
+ {
+   if (st == NULL)
+     return;
+ 
+   fixup_st_func_formals (st->left, old_sym, new_sym);
+   fixup_st_func_formals (st->right, old_sym, new_sym);
+ 
+   if (st->n.sym && st->n.sym->attr.proc == PROC_ST_FUNCTION)
+     for (gfc_formal_arglist *fa = st->n.sym->formal; fa; fa = fa->next)
+       if (fa->sym == old_sym)
+ 	fa->sym = new_sym;
+ }
+ 
+ 
  /* Fix the symbols for sibling functions.  These are incorrectly added to
     the child namespace as the parser didn't know about this procedure.  */
  
*************** gfc_fixup_sibling_symbols (gfc_symbol *s
*** 6456,6461 ****
--- 6478,6488 ----
  	  st->n.sym = sym;
  	  sym->refs++;
  
+ 	  /* Update statement function formal argument lists that still
+ 	     reference old_sym before releasing it (PR95879).  */
+ 	  fixup_st_func_formals (ns->sym_root, old_sym, sym);
+ 
+ 
  	  gfc_release_symbol (old_sym);
  	}
  
diff -Nrcpad gcc-14.3.0/gcc/fortran/primary.cc gcc-14.3.0-RC-20260619/gcc/fortran/primary.cc
*** gcc-14.3.0/gcc/fortran/primary.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/primary.cc	Fri Jun 19 06:51:02 2026
*************** gfc_variable_attr (gfc_expr *expr, gfc_t
*** 2887,2898 ****
--- 2887,2900 ----
  
  	if (comp->ts.type == BT_CLASS)
  	  {
+ 	    dimension = CLASS_DATA (comp)->attr.dimension;
  	    codimension = CLASS_DATA (comp)->attr.codimension;
  	    pointer = CLASS_DATA (comp)->attr.class_pointer;
  	    allocatable = CLASS_DATA (comp)->attr.allocatable;
  	  }
  	else
  	  {
+ 	    dimension = comp->attr.dimension;
  	    codimension = comp->attr.codimension;
  	    if (expr->ts.type == BT_CLASS && strcmp (comp->name, "_data") == 0)
  	      pointer = comp->attr.class_pointer;
*************** gfc_convert_to_structure_constructor (gf
*** 3367,3372 ****
--- 3369,3375 ----
  	  && this_comp->ts.u.cl && this_comp->ts.u.cl->length
  	  && this_comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
  	  && this_comp->ts.u.cl->length->ts.type == BT_INTEGER
+ 	  && actual->expr
  	  && actual->expr->ts.type == BT_CHARACTER
  	  && actual->expr->expr_type == EXPR_CONSTANT)
  	{
*************** gfc_convert_to_structure_constructor (gf
*** 3431,3457 ****
  	  goto cleanup;
  	}
  
!           /* If not explicitly a parent constructor, gather up the components
!              and build one.  */
!           if (comp && comp == sym->components
!                 && sym->attr.extension
! 		&& comp_tail->val
!                 && (!gfc_bt_struct (comp_tail->val->ts.type)
!                       ||
!                     comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
!             {
!               bool m;
  	      gfc_actual_arglist *arg_null = NULL;
  
  	      actual->expr = comp_tail->val;
  	      comp_tail->val = NULL;
  
!               m = gfc_convert_to_structure_constructor (NULL,
! 					comp->ts.u.derived, &comp_tail->val,
! 					comp->ts.u.derived->attr.zero_comp
! 					  ? &arg_null : &actual, true);
!               if (!m)
!                 goto cleanup;
  
  	      if (comp->ts.u.derived->attr.zero_comp)
  		{
--- 3434,3460 ----
  	  goto cleanup;
  	}
  
! 	  /* If not explicitly a parent constructor, gather up the components
! 	     and build one.  */
! 	  if (comp && comp == sym->components
! 	      && sym->attr.extension
! 	      && comp_tail->val
! 	      && (!gfc_bt_struct (comp_tail->val->ts.type)
! 		  || comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
! 	    {
! 	      bool m;
  	      gfc_actual_arglist *arg_null = NULL;
  
  	      actual->expr = comp_tail->val;
  	      comp_tail->val = NULL;
+ #define shorter gfc_convert_to_structure_constructor
+ 	      m = shorter (NULL, comp->ts.u.derived, &comp_tail->val,
+ 			   comp->ts.u.derived->attr.zero_comp ? &arg_null :
+ 								&actual, true);
+ #undef shorter
  
! 	      if (!m)
! 		goto cleanup;
  
  	      if (comp->ts.u.derived->attr.zero_comp)
  		{
diff -Nrcpad gcc-14.3.0/gcc/fortran/resolve.cc gcc-14.3.0-RC-20260619/gcc/fortran/resolve.cc
*** gcc-14.3.0/gcc/fortran/resolve.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/resolve.cc	Fri Jun 19 06:51:02 2026
*************** static int omp_workshare_flag;
*** 75,80 ****
--- 75,83 ----
  
  /* True if we are resolving a specification expression.  */
  static bool specification_expr = false;
+ /* The dummy whose character length or array bounds are currently being
+    resolved as a specification expression.  */
+ static gfc_symbol *specification_expr_symbol = NULL;
  
  /* The id of the last entry seen.  */
  static int current_entry_id;
*************** static bitmap_obstack labels_obstack;
*** 85,90 ****
--- 88,111 ----
  /* True when simplifying a EXPR_VARIABLE argument to an inquiry function.  */
  static bool inquiry_argument = false;
  
+ static bool
+ entry_dummy_seen_p (gfc_symbol *sym)
+ {
+   gfc_entry_list *entry;
+   gfc_formal_arglist *formal;
+ 
+   gcc_checking_assert (sym->attr.dummy && sym->ns == gfc_current_ns);
+ 
+   for (entry = gfc_current_ns->entries;
+        entry && entry->id <= current_entry_id;
+        entry = entry->next)
+     for (formal = entry->sym->formal; formal; formal = formal->next)
+       if (formal->sym && sym->name == formal->sym->name)
+ 	return true;
+ 
+   return false;
+ }
+ 
  
  /* Is the symbol host associated?  */
  static bool
*************** gfc_resolve_formal_arglist (gfc_symbol *
*** 282,287 ****
--- 303,309 ----
    for (f = proc->formal; f; f = f->next)
      {
        gfc_array_spec *as;
+       gfc_symbol *saved_specification_expr_symbol;
  
        sym = f->sym;
  
*************** gfc_resolve_formal_arglist (gfc_symbol *
*** 330,338 ****
--- 352,363 ----
  	   ? CLASS_DATA (sym)->as : sym->as;
  
        saved_specification_expr = specification_expr;
+       saved_specification_expr_symbol = specification_expr_symbol;
        specification_expr = true;
+       specification_expr_symbol = sym;
        gfc_resolve_array_spec (as, 0);
        specification_expr = saved_specification_expr;
+       specification_expr_symbol = saved_specification_expr_symbol;
  
        /* We can't tell if an array with dimension (:) is assumed or deferred
  	 shape until we know if it has the pointer or allocatable attributes.
*************** was_declared (gfc_symbol *sym)
*** 1611,1617 ****
    if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
        || a.optional || a.pointer || a.save || a.target || a.volatile_
        || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
!       || a.asynchronous || a.codimension)
      return 1;
  
    return 0;
--- 1636,1642 ----
    if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
        || a.optional || a.pointer || a.save || a.target || a.volatile_
        || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
!       || a.asynchronous || a.codimension || a.subroutine)
      return 1;
  
    return 0;
*************** resolve_global_procedure (gfc_symbol *sy
*** 2717,2733 ****
  	  /* This can happen if a binding name has been specified.  */
  	  if (gsym->binding_label && gsym->sym_name != def_sym->name)
  	    gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
  
! 	  if (def_sym->attr.entry_master || def_sym->attr.entry)
! 	    {
! 	      gfc_entry_list *entry;
! 	      for (entry = gsym->ns->entries; entry; entry = entry->next)
! 		if (strcmp (entry->sym->name, sym->name) == 0)
! 		  {
! 		    def_sym = entry->sym;
! 		    break;
! 		  }
! 	    }
  	}
  
        if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
--- 2742,2763 ----
  	  /* This can happen if a binding name has been specified.  */
  	  if (gsym->binding_label && gsym->sym_name != def_sym->name)
  	    gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
+ 	}
  
!       /* Look up the specific entry symbol so that interface checks use
! 	 the entry's own formal argument list, not the entry master's.
! 	 This must run even when resolved == -1 (recursive resolution in
! 	 progress), because def_sym starts as the namespace proc_name
! 	 which is the entry master with the combined formals.  */
!       if (def_sym->attr.entry_master || def_sym->attr.entry)
! 	{
! 	  gfc_entry_list *entry;
! 	  for (entry = gsym->ns->entries; entry; entry = entry->next)
! 	    if (strcmp (entry->sym->name, sym->name) == 0)
! 	      {
! 		def_sym = entry->sym;
! 		break;
! 	      }
  	}
  
        if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
*************** resolve_variable (gfc_expr *e)
*** 6069,6100 ****
        && cs_base->current
        && cs_base->current->op != EXEC_ENTRY)
      {
-       gfc_entry_list *entry;
-       gfc_formal_arglist *formal;
        int n;
!       bool seen, saved_specification_expr;
  
        /* If the symbol is a dummy...  */
        if (sym->attr.dummy && sym->ns == gfc_current_ns)
  	{
- 	  entry = gfc_current_ns->entries;
- 	  seen = false;
- 
- 	  /* ...test if the symbol is a parameter of previous entries.  */
- 	  for (; entry && entry->id <= current_entry_id; entry = entry->next)
- 	    for (formal = entry->sym->formal; formal; formal = formal->next)
- 	      {
- 		if (formal->sym && sym->name == formal->sym->name)
- 		  {
- 		    seen = true;
- 		    break;
- 		  }
- 	      }
- 
  	  /*  If it has not been seen as a dummy, this is an error.  */
! 	  if (!seen)
  	    {
! 	      if (specification_expr)
  		gfc_error ("Variable %qs, used in a specification expression"
  			   ", is referenced at %L before the ENTRY statement "
  			   "in which it is a parameter",
--- 6099,6121 ----
        && cs_base->current
        && cs_base->current->op != EXEC_ENTRY)
      {
        int n;
!       bool saved_specification_expr;
!       gfc_symbol *saved_specification_expr_symbol;
  
        /* If the symbol is a dummy...  */
        if (sym->attr.dummy && sym->ns == gfc_current_ns)
  	{
  	  /*  If it has not been seen as a dummy, this is an error.  */
! 	  if (!entry_dummy_seen_p (sym))
  	    {
! 	      if (specification_expr
! 		  && specification_expr_symbol
! 		  && specification_expr_symbol->attr.dummy
! 		  && specification_expr_symbol->ns == gfc_current_ns
! 		  && !entry_dummy_seen_p (specification_expr_symbol))
! 		;
! 	      else if (specification_expr)
  		gfc_error ("Variable %qs, used in a specification expression"
  			   ", is referenced at %L before the ENTRY statement "
  			   "in which it is a parameter",
*************** resolve_variable (gfc_expr *e)
*** 6109,6115 ****
--- 6130,6138 ----
  
        /* Now do the same check on the specification expressions.  */
        saved_specification_expr = specification_expr;
+       saved_specification_expr_symbol = specification_expr_symbol;
        specification_expr = true;
+       specification_expr_symbol = sym;
        if (sym->ts.type == BT_CHARACTER
  	  && !gfc_resolve_expr (sym->ts.u.cl->length))
  	t = false;
*************** resolve_variable (gfc_expr *e)
*** 6123,6128 ****
--- 6146,6152 ----
  	       t = false;
  	  }
        specification_expr = saved_specification_expr;
+       specification_expr_symbol = saved_specification_expr_symbol;
  
        if (t)
  	/* Update the symbol's entry level.  */
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13815,13821 ****
--- 13839,13847 ----
       This check is effected by the call to gfc_resolve_expr through
       is_non_constant_shape_array.  */
    bool saved_specification_expr = specification_expr;
+   gfc_symbol *saved_specification_expr_symbol = specification_expr_symbol;
    specification_expr = true;
+   specification_expr_symbol = sym;
  
    if (sym->ns->proc_name
        && (sym->ns->proc_name->attr.flavor == FL_MODULE
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13830,13835 ****
--- 13856,13862 ----
        gfc_error ("The module or main program array %qs at %L must "
  		 "have constant shape", sym->name, &sym->declared_at);
        specification_expr = saved_specification_expr;
+       specification_expr_symbol = saved_specification_expr_symbol;
        return false;
      }
  
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13855,13860 ****
--- 13882,13888 ----
  	  gfc_error ("Entity with assumed character length at %L must be a "
  		     "dummy argument or a PARAMETER", &sym->declared_at);
  	  specification_expr = saved_specification_expr;
+ 	  specification_expr_symbol = saved_specification_expr_symbol;
  	  return false;
  	}
  
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13862,13867 ****
--- 13890,13896 ----
  	{
  	  gfc_error (auto_save_msg, sym->name, &sym->declared_at);
  	  specification_expr = saved_specification_expr;
+ 	  specification_expr_symbol = saved_specification_expr_symbol;
  	  return false;
  	}
  
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13876,13881 ****
--- 13905,13911 ----
  	      gfc_error ("%qs at %L must have constant character length "
  			"in this context", sym->name, &sym->declared_at);
  	      specification_expr = saved_specification_expr;
+ 	      specification_expr_symbol = saved_specification_expr_symbol;
  	      return false;
  	    }
  	  if (sym->attr.in_common)
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13883,13888 ****
--- 13913,13919 ----
  	      gfc_error ("COMMON variable %qs at %L must have constant "
  			 "character length", sym->name, &sym->declared_at);
  	      specification_expr = saved_specification_expr;
+ 	      specification_expr_symbol = saved_specification_expr_symbol;
  	      return false;
  	    }
  	}
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13915,13920 ****
--- 13946,13952 ----
  	{
  	  gfc_error (auto_save_msg, sym->name, &sym->declared_at);
  	  specification_expr = saved_specification_expr;
+ 	  specification_expr_symbol = saved_specification_expr_symbol;
  	  return false;
  	}
      }
*************** resolve_fl_variable (gfc_symbol *sym, in
*** 13948,13953 ****
--- 13980,13986 ----
        else
  	goto no_init_error;
        specification_expr = saved_specification_expr;
+       specification_expr_symbol = saved_specification_expr_symbol;
        return false;
      }
  
*************** no_init_error:
*** 13956,13965 ****
--- 13989,14000 ----
      {
        bool res = resolve_fl_variable_derived (sym, no_init_flag);
        specification_expr = saved_specification_expr;
+       specification_expr_symbol = saved_specification_expr_symbol;
        return res;
      }
  
    specification_expr = saved_specification_expr;
+   specification_expr_symbol = saved_specification_expr_symbol;
    return true;
  }
  
*************** resolve_symbol_array_spec (gfc_symbol *s
*** 16305,16315 ****
--- 16340,16353 ----
    gfc_current_ns = gfc_get_spec_ns (sym);
  
    bool saved_specification_expr = specification_expr;
+   gfc_symbol *saved_specification_expr_symbol = specification_expr_symbol;
    specification_expr = true;
+   specification_expr_symbol = sym;
  
    bool result = gfc_resolve_array_spec (sym->as, check_constant);
  
    specification_expr = saved_specification_expr;
+   specification_expr_symbol = saved_specification_expr_symbol;
    gfc_current_ns = orig_current_ns;
  
    return result;
*************** skip_interfaces:
*** 17134,17139 ****
--- 17172,17181 ----
  	  || (a->dummy && !a->pointer && a->intent == INTENT_OUT
  	      && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY))
  	apply_default_init (sym);
+       else if (a->function && !a->pointer && !a->allocatable
+ 	       && !a->use_assoc && !a->used_in_submodule && sym->result)
+ 	/* Default initialization for function results.  */
+ 	apply_default_init (sym->result);
        else if (a->function && sym->result && a->access != ACCESS_PRIVATE
  	       && (sym->ts.u.derived->attr.alloc_comp
  		   || sym->ts.u.derived->attr.pointer_comp))
diff -Nrcpad gcc-14.3.0/gcc/fortran/scanner.cc gcc-14.3.0-RC-20260619/gcc/fortran/scanner.cc
*** gcc-14.3.0/gcc/fortran/scanner.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/scanner.cc	Fri Jun 19 06:51:02 2026
*************** skip_free_oacc_sentinel (locus start, lo
*** 776,781 ****
--- 776,783 ----
        if ((c = next_char ()) == ' ' || c == '\t'
  	  || continue_flag)
  	{
+ 	  if (!continue_flag && (c == ' ' || c == '\t'))
+ 	    openmp_flag = 0;
  	  while (gfc_is_whitespace (c))
  	    c = next_char ();
  	  if (c != '\n' && c != '!')
*************** skip_free_omp_sentinel (locus start, loc
*** 816,821 ****
--- 818,825 ----
        if ((c = next_char ()) == ' ' || c == '\t'
  	  || continue_flag)
  	{
+ 	  if (!continue_flag && (c == ' ' || c == '\t'))
+ 	    openacc_flag = 0;
  	  while (gfc_is_whitespace (c))
  	    c = next_char ();
  	  if (c != '\n' && c != '!')
diff -Nrcpad gcc-14.3.0/gcc/fortran/symbol.cc gcc-14.3.0-RC-20260619/gcc/fortran/symbol.cc
*** gcc-14.3.0/gcc/fortran/symbol.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/symbol.cc	Fri Jun 19 06:51:02 2026
*************** const mstring dtio_procs[] =
*** 98,106 ****
  
  /* This is to make sure the backend generates setup code in the correct
     order.  */
! 
! static int next_dummy_order = 1;
! 
  
  gfc_namespace *gfc_current_ns;
  gfc_namespace *gfc_global_ns_list;
--- 98,104 ----
  
  /* This is to make sure the backend generates setup code in the correct
     order.  */
! static int next_decl_order = 1;
  
  gfc_namespace *gfc_current_ns;
  gfc_namespace *gfc_global_ns_list;
*************** conflict:
*** 941,955 ****
  void
  gfc_set_sym_referenced (gfc_symbol *sym)
  {
- 
    if (sym->attr.referenced)
      return;
  
    sym->attr.referenced = 1;
  
!   /* Remember which order dummy variables are accessed in.  */
!   if (sym->attr.dummy)
!     sym->dummy_order = next_dummy_order++;
  }
  
  
--- 939,951 ----
  void
  gfc_set_sym_referenced (gfc_symbol *sym)
  {
    if (sym->attr.referenced)
      return;
  
    sym->attr.referenced = 1;
  
!   /* Remember the declaration order.  */
!   sym->decl_order = next_decl_order++;
  }
  
  
*************** gfc_find_component (gfc_symbol *sym, con
*** 2667,2672 ****
--- 2663,2683 ----
  /* Given a symbol, free all of the component structures and everything
     they point to.  */
  
+ void
+ gfc_free_component (gfc_component *p)
+ {
+   gfc_free_array_spec (p->as);
+   gfc_free_expr (p->initializer);
+   if (p->kind_expr)
+     gfc_free_expr (p->kind_expr);
+   if (p->param_list)
+     gfc_free_actual_arglist (p->param_list);
+   free (p->tb);
+   p->tb = NULL;
+   free (p);
+ }
+ 
+ 
  static void
  free_components (gfc_component *p)
  {
*************** free_components (gfc_component *p)
*** 2675,2690 ****
    for (; p; p = q)
      {
        q = p->next;
! 
!       gfc_free_array_spec (p->as);
!       gfc_free_expr (p->initializer);
!       if (p->kind_expr)
! 	gfc_free_expr (p->kind_expr);
!       if (p->param_list)
! 	gfc_free_actual_arglist (p->param_list);
!       free (p->tb);
!       p->tb = NULL;
!       free (p);
      }
  }
  
--- 2686,2692 ----
    for (; p; p = q)
      {
        q = p->next;
!       gfc_free_component (p);
      }
  }
  
*************** gfc_new_symtree (gfc_symtree **root, con
*** 3015,3021 ****
  
  /* Delete a symbol from the tree.  Does not free the symbol itself!  */
  
! static void
  gfc_delete_symtree (gfc_symtree **root, const char *name)
  {
    gfc_symtree st, *st0;
--- 3017,3023 ----
  
  /* Delete a symbol from the tree.  Does not free the symbol itself!  */
  
! void
  gfc_delete_symtree (gfc_symtree **root, const char *name)
  {
    gfc_symtree st, *st0;
*************** gfc_namespace *
*** 5460,5466 ****
  gfc_get_procedure_ns (gfc_symbol *sym)
  {
    if (sym->formal_ns
!       && sym->formal_ns->proc_name == sym)
      return sym->formal_ns;
  
    /* The above should have worked in most cases.  If it hasn't, try some other
--- 5462,5477 ----
  gfc_get_procedure_ns (gfc_symbol *sym)
  {
    if (sym->formal_ns
!       && sym->formal_ns->proc_name == sym
!       /* For module procedures used in submodules, there are two namespaces.
! 	 The one generated by the host association of the module is directly
! 	 accessible through SYM->FORMAL_NS but doesn't have any parent set.
! 	 The one generated by the parser is only accessible by walking the
! 	 contained namespace but has its parent set.  Prefer the one generated
! 	 by the parser below.  */
!       && !(sym->attr.used_in_submodule
! 	   && sym->attr.contained
! 	   && sym->formal_ns->parent == nullptr))
      return sym->formal_ns;
  
    /* The above should have worked in most cases.  If it hasn't, try some other
*************** gfc_get_procedure_ns (gfc_symbol *sym)
*** 5475,5480 ****
--- 5486,5495 ----
        if (ns->proc_name == sym)
  	return ns;
  
+   if (sym->formal_ns
+       && sym->formal_ns->proc_name == sym)
+     return sym->formal_ns;
+ 
    if (sym->formal)
      for (gfc_formal_arglist *f = sym->formal; f != nullptr; f = f->next)
        if (f->sym)
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-array.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-array.cc
*** gcc-14.3.0/gcc/fortran/trans-array.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-array.cc	Fri Jun 19 06:51:02 2026
*************** trans_array_bound_check (gfc_se * se, gf
*** 3664,3669 ****
--- 3664,3692 ----
  }
  
  
+ /* Helper functions to detect impure functions in an expression.  */
+ 
+ static const char *impure_name = NULL;
+ static bool
+ expr_contains_impure_fcn (gfc_expr *e, gfc_symbol* sym ATTRIBUTE_UNUSED,
+ 	 int* g ATTRIBUTE_UNUSED)
+ {
+   if (e && e->expr_type == EXPR_FUNCTION
+       && !gfc_pure_function (e, &impure_name)
+       && !gfc_implicit_pure_function (e))
+     return true;
+ 
+   return false;
+ }
+ 
+ static bool
+ gfc_expr_contains_impure_fcn (gfc_expr *e)
+ {
+   impure_name = NULL;
+   return gfc_traverse_expr (e, NULL, &expr_contains_impure_fcn, 0);
+ }
+ 
+ 
  /* Generate code for bounds checking for elemental dimensions.  */
  
  static void
*************** array_bound_check_elemental (gfc_se * se
*** 3686,3695 ****
--- 3709,3725 ----
  		{
  		  if (ar->dimen_type[dim] == DIMEN_ELEMENT)
  		    {
+ 		      if (gfc_expr_contains_impure_fcn (ar->start[dim]))
+ 			gfc_warning_now (0, "Bounds checking of the elemental "
+ 					 "index at %L will cause two calls to "
+ 					 "%qs, which is not declared to be "
+ 					 "PURE or is not implicitly pure.",
+ 					 &ar->start[dim]->where, impure_name);
  		      gfc_se indexse;
  		      gfc_init_se (&indexse, NULL);
  		      gfc_conv_expr_type (&indexse, ar->start[dim],
  					  gfc_array_index_type);
+ 		      gfc_add_block_to_block (&se->pre, &indexse.pre);
  		      trans_array_bound_check (se, ss, indexse.expr, dim,
  					       &ar->where,
  					       ar->as->type != AS_ASSUMED_SIZE
*************** gfc_trans_auto_array_allocation (tree de
*** 6888,6893 ****
--- 6918,6924 ----
    tree space;
    tree inittree;
    bool onstack;
+   bool back;
  
    gcc_assert (!(sym->attr.pointer || sym->attr.allocatable));
  
*************** gfc_trans_auto_array_allocation (tree de
*** 6899,6904 ****
--- 6930,6941 ----
    gcc_assert (GFC_ARRAY_TYPE_P (type));
    onstack = TREE_CODE (type) != POINTER_TYPE;
  
+   /* In the case of non-dummy symbols with dependencies on an old-fashioned
+      function result (ie. proc_name = proc_name->result), gfc_add_init_cleanup
+      must be called with the last, optional argument false so that the alloc-
+      ation occurs after the processing of the result.  */
+   back = sym->fn_result_dep;
+ 
    gfc_init_block (&init);
  
    /* Evaluate character string length.  */
*************** gfc_trans_auto_array_allocation (tree de
*** 6926,6932 ****
  
    if (onstack)
      {
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
        return;
      }
  
--- 6963,6970 ----
  
    if (onstack)
      {
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE,
! 			    back);
        return;
      }
  
*************** gfc_trans_auto_array_allocation (tree de
*** 7013,7022 ****
        addr = fold_build1_loc (gfc_get_location (&sym->declared_at),
  			      ADDR_EXPR, TREE_TYPE (decl), space);
        gfc_add_modify (&init, decl, addr);
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
        tmp = NULL_TREE;
      }
!   gfc_add_init_cleanup (block, inittree, tmp);
  }
  
  
--- 7051,7061 ----
        addr = fold_build1_loc (gfc_get_location (&sym->declared_at),
  			      ADDR_EXPR, TREE_TYPE (decl), space);
        gfc_add_modify (&init, decl, addr);
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE,
! 			    back);
        tmp = NULL_TREE;
      }
!   gfc_add_init_cleanup (block, inittree, tmp, back);
  }
  
  
*************** gfc_conv_array_parameter (gfc_se * se, g
*** 8645,8650 ****
--- 8684,8690 ----
    tree tmp = NULL_TREE;
    tree stmt;
    tree parent = DECL_CONTEXT (current_function_decl);
+   tree ctree = NULL_TREE;
    bool full_array_var;
    bool this_array_result;
    bool contiguous;
*************** gfc_conv_array_parameter (gfc_se * se, g
*** 8936,8949 ****
  	  tmp = build_fold_indirect_ref_loc (input_location, desc);
  
  	  gfc_ss * ss = gfc_walk_expr (expr);
! 	  if (!transposed_dims (ss))
! 	    gfc_conv_descriptor_data_set (&se->pre, tmp, ptr);
! 	  else
  	    {
  	      tree old_field, new_field;
- 
- 	      /* The original descriptor has transposed dims so we can't reuse
- 		 it directly; we have to create a new one.  */
  	      tree old_desc = tmp;
  	      tree new_desc = gfc_create_var (TREE_TYPE (old_desc), "arg_desc");
  
--- 8976,8989 ----
  	  tmp = build_fold_indirect_ref_loc (input_location, desc);
  
  	  gfc_ss * ss = gfc_walk_expr (expr);
! 	  if (!transposed_dims (ss) && expr->rank != -1)
! 	    {
! 	      if (!ctree)
! 		gfc_conv_descriptor_data_set (&se->pre, tmp, ptr);
! 	    }
! 	  else if (!ctree)
  	    {
  	      tree old_field, new_field;
  	      tree old_desc = tmp;
  	      tree new_desc = gfc_create_var (TREE_TYPE (old_desc), "arg_desc");
  
*************** gfc_conv_array_parameter (gfc_se * se, g
*** 8951,8967 ****
  	      new_field = gfc_conv_descriptor_dtype (new_desc);
  	      gfc_add_modify (&se->pre, new_field, old_field);
  
! 	      old_field = gfc_conv_descriptor_offset (old_desc);
! 	      new_field = gfc_conv_descriptor_offset (new_desc);
! 	      gfc_add_modify (&se->pre, new_field, old_field);
  
! 	      for (int i = 0; i < expr->rank; i++)
  		{
! 		  old_field = gfc_conv_descriptor_dimension (old_desc,
  			gfc_rank_cst[get_array_ref_dim_for_loop_dim (ss, i)]);
! 		  new_field = gfc_conv_descriptor_dimension (new_desc,
  			gfc_rank_cst[i]);
! 		  gfc_add_modify (&se->pre, new_field, old_field);
  		}
  
  	      if (flag_coarray == GFC_FCOARRAY_LIB
--- 8991,9065 ----
  	      new_field = gfc_conv_descriptor_dtype (new_desc);
  	      gfc_add_modify (&se->pre, new_field, old_field);
  
! 	      if (expr->rank == -1)
! 		{
! 		  tree idx = gfc_create_var (TREE_TYPE (gfc_conv_descriptor_rank
! 							(old_desc)),
! 					     "idx");
! 		  tree stride = gfc_create_var (gfc_array_index_type, "stride");
! 		  stmtblock_t loop_body;
  
! 		  gfc_conv_descriptor_offset_set (&se->pre, new_desc,
! 						  gfc_index_zero_node);
! 		  gfc_conv_descriptor_span_set (&se->pre, new_desc,
! 						gfc_conv_descriptor_span_get
! 						(old_desc));
! 		  gfc_add_modify (&se->pre, stride, gfc_index_one_node);
! 
! 		  gfc_init_block (&loop_body);
! 
! 		  old_field = gfc_conv_descriptor_lbound_get (old_desc, idx);
! 		  gfc_conv_descriptor_lbound_set (&loop_body, new_desc, idx,
! 						  old_field);
! 
! 		  old_field = gfc_conv_descriptor_ubound_get (old_desc, idx);
! 		  gfc_conv_descriptor_ubound_set (&loop_body, new_desc, idx,
! 						  old_field);
! 
! 		  gfc_conv_descriptor_stride_set (&loop_body, new_desc, idx,
! 						  stride);
! 
! 		  tree offset = fold_build2_loc (input_location, MULT_EXPR,
! 						 gfc_array_index_type, stride,
! 						 gfc_conv_descriptor_lbound_get
! 						 (new_desc, idx));
! 		  offset = fold_build2_loc (input_location, MINUS_EXPR,
! 					    gfc_array_index_type,
! 					    gfc_conv_descriptor_offset_get
! 					    (new_desc), offset);
! 		  gfc_conv_descriptor_offset_set (&loop_body, new_desc, offset);
! 
! 		  tree extent = gfc_conv_array_extent_dim
! 				(gfc_conv_descriptor_lbound_get (new_desc, idx),
! 				 gfc_conv_descriptor_ubound_get (new_desc, idx),
! 				 NULL);
! 		  extent = fold_build2_loc (input_location, MULT_EXPR,
! 					    gfc_array_index_type, stride,
! 					    extent);
! 		  gfc_add_modify (&loop_body, stride, extent);
! 
! 		  gfc_simple_for_loop (&se->pre, idx,
! 				       build_int_cst (TREE_TYPE (idx), 0),
! 				       gfc_conv_descriptor_rank (old_desc),
! 				       LT_EXPR,
! 				       build_int_cst (TREE_TYPE (idx), 1),
! 				       gfc_finish_block (&loop_body));
! 		}
! 	      else
  		{
! 		  /* The original descriptor has transposed dims so we can't
! 		     reuse it directly; we have to create a new one.  */
! 		  old_field = gfc_conv_descriptor_offset_get (old_desc);
! 		  gfc_conv_descriptor_offset_set (&se->pre, new_desc, old_field);
! 
! 		  for (int i = 0; i < expr->rank; i++)
! 		    {
! 		      old_field = gfc_conv_descriptor_dimension (old_desc,
  			gfc_rank_cst[get_array_ref_dim_for_loop_dim (ss, i)]);
! 		      new_field = gfc_conv_descriptor_dimension (new_desc,
  			gfc_rank_cst[i]);
! 		      gfc_add_modify (&se->pre, new_field, old_field);
! 		    }
  		}
  
  	      if (flag_coarray == GFC_FCOARRAY_LIB
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-decl.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-decl.cc
*** gcc-14.3.0/gcc/fortran/trans-decl.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-decl.cc	Fri Jun 19 06:51:02 2026
*************** along with GCC; see the file COPYING3.
*** 49,54 ****
--- 49,55 ----
  #include "omp-general.h"
  #include "attr-fnspec.h"
  #include "tree-iterator.h"
+ #include "dependency.h"
  
  #define MAX_LABEL_VALUE 99999
  
*************** gfc_finish_var_decl (tree decl, gfc_symb
*** 644,656 ****
  	  && (sym->ns->proc_name->backend_decl == current_function_decl
  	      || sym->result == sym))
  	gfc_add_decl_to_function (decl);
        else if (sym->ns->proc_name
  	       && sym->ns->proc_name->attr.flavor == FL_LABEL)
  	/* This is a BLOCK construct.  */
  	add_decl_as_local (decl);
-       else if (sym->ns->omp_affinity_iterators)
- 	/* This is a block-local iterator.  */
- 	add_decl_as_local (decl);
        else
  	gfc_add_decl_to_parent_function (decl);
      }
--- 645,670 ----
  	  && (sym->ns->proc_name->backend_decl == current_function_decl
  	      || sym->result == sym))
  	gfc_add_decl_to_function (decl);
+       else if (sym->ns->omp_affinity_iterators)
+ 	{
+ 	  /* Iterator variables are block-local; other variables in the
+ 	     iterator namespace (e.g. implicitly typed host-associated
+ 	     ones used in locator expressions) belong in the enclosing
+ 	     function.  */
+ 	  gfc_symbol *iter;
+ 	  for (iter = sym->ns->omp_affinity_iterators; iter;
+ 	       iter = iter->tlink)
+ 	    if (iter == sym)
+ 	      break;
+ 	  if (iter)
+ 	    add_decl_as_local (decl);
+ 	  else
+ 	    gfc_add_decl_to_function (decl);
+ 	}
        else if (sym->ns->proc_name
  	       && sym->ns->proc_name->attr.flavor == FL_LABEL)
  	/* This is a BLOCK construct.  */
  	add_decl_as_local (decl);
        else
  	gfc_add_decl_to_parent_function (decl);
      }
*************** gfc_allocate_lang_decl (tree decl)
*** 832,837 ****
--- 846,864 ----
      DECL_LANG_SPECIFIC (decl) = ggc_cleared_alloc<struct lang_decl> ();
  }
  
+ 
+ /* Determine order of two symbol declarations.  */
+ 
+ static bool
+ decl_order (gfc_symbol *sym1, gfc_symbol *sym2)
+ {
+   if (sym1->decl_order > sym2->decl_order)
+     return true;
+   else
+     return false;
+ }
+ 
+ 
  /* Remember a symbol to generate initialization/cleanup code at function
     entry/exit.  */
  
*************** gfc_defer_symbol_init (gfc_symbol * sym)
*** 849,866 ****
    last = head = sym->ns->proc_name;
    p = last->tlink;
  
    /* Make sure that setup code for dummy variables which are used in the
       setup of other variables is generated first.  */
    if (sym->attr.dummy)
      {
        /* Find the first dummy arg seen after us, or the first non-dummy arg.
!          This is a circular list, so don't go past the head.  */
        while (p != head
!              && (!p->attr.dummy || p->dummy_order > sym->dummy_order))
!         {
!           last = p;
!           p = p->tlink;
!         }
      }
    /* Insert in between last and p.  */
    last->tlink = sym;
--- 876,909 ----
    last = head = sym->ns->proc_name;
    p = last->tlink;
  
+   gfc_function_dependency (sym, head);
+ 
    /* Make sure that setup code for dummy variables which are used in the
       setup of other variables is generated first.  */
    if (sym->attr.dummy)
      {
        /* Find the first dummy arg seen after us, or the first non-dummy arg.
! 	 This is a circular list, so don't go past the head.  */
        while (p != head
! 	     && (!p->attr.dummy || decl_order (p, sym)))
! 	{
! 	  last = p;
! 	  p = p->tlink;
! 	}
!     }
!   else if (sym->fn_result_dep)
!     {
!       /* In the case of non-dummy symbols with dependencies on an old-fashioned
!      function result (ie. proc_name = proc_name->result), make sure that the
!      order in the tlink chain is such that the code appears in declaration
!      order. This ensures that mutual dependencies between these symbols are
!      respected.  */
!       while (p != head
! 	     && (!p->attr.result || decl_order (sym, p)))
! 	{
! 	  last = p;
! 	  p = p->tlink;
! 	}
      }
    /* Insert in between last and p.  */
    last->tlink = sym;
*************** gfc_get_symbol_decl (gfc_symbol * sym)
*** 1629,1634 ****
--- 1672,1692 ----
  	    sym->backend_decl = DECL_CHAIN (sym->backend_decl);
  	}
  
+       /* Automatic array indices in module procedures need the backend_decl
+ 	 to be extracted from the procedure formal arglist.  */
+       if (sym->attr.dummy && !sym->backend_decl)
+ 	{
+ 	  gfc_formal_arglist *f;
+ 	  for (f = sym->ns->proc_name->formal; f; f = f->next)
+ 	    {
+ 	      gfc_symbol *fsym = f->sym;
+ 	      if (strcmp (sym->name, fsym->name))
+ 		continue;
+ 	      sym->backend_decl = fsym->backend_decl;
+ 	      break;
+ 	     }
+ 	}
+ 
        /* Dummy variables should already have been created.  */
        gcc_assert (sym->backend_decl);
  
*************** build_entry_thunks (gfc_namespace * ns,
*** 2990,3004 ****
        tmp = build_int_cst (gfc_array_index_type, el->id);
        vec_safe_push (args, tmp);
  
!       if (thunk_sym->attr.function)
  	{
! 	  if (gfc_return_by_reference (ns->proc_name))
  	    {
  	      tree ref = DECL_ARGUMENTS (current_function_decl);
  	      vec_safe_push (args, ref);
  	      if (ns->proc_name->ts.type == BT_CHARACTER)
  		vec_safe_push (args, DECL_CHAIN (ref));
  	    }
  	}
  
        for (formal = gfc_sym_get_dummy_args (ns->proc_name); formal;
--- 3048,3107 ----
        tmp = build_int_cst (gfc_array_index_type, el->id);
        vec_safe_push (args, tmp);
  
!       /* When the master returns by reference, pass the result reference
! 	 and (for CHARACTER) the string length to the master call.  If the
! 	 thunk itself also returns by reference these are forwarded from
! 	 its own argument list; otherwise (bind(c) CHARACTER entry) we
! 	 create local temporaries and load the value after the call.  */
!       tree result_ref = NULL_TREE;
!       if (thunk_sym->attr.function
! 	  && gfc_return_by_reference (ns->proc_name))
  	{
! 	  if (gfc_return_by_reference (thunk_sym))
  	    {
  	      tree ref = DECL_ARGUMENTS (current_function_decl);
  	      vec_safe_push (args, ref);
  	      if (ns->proc_name->ts.type == BT_CHARACTER)
  		vec_safe_push (args, DECL_CHAIN (ref));
  	    }
+ 	  else
+ 	    {
+ 	      /* The thunk is bind(c) and returns CHARACTER by value, but
+ 		 the master returns by reference.  Create a local buffer
+ 		 and length to pass to the master call.  */
+ 	      tree chartype = gfc_get_char_type (thunk_sym->ts.kind);
+ 	      tree len;
+ 
+ 	      if (thunk_sym->ts.u.cl && thunk_sym->ts.u.cl->length)
+ 		{
+ 		  gfc_se se;
+ 		  gfc_init_se (&se, NULL);
+ 		  gfc_conv_expr (&se, thunk_sym->ts.u.cl->length);
+ 		  gfc_add_block_to_block (&body, &se.pre);
+ 		  len = se.expr;
+ 		  gfc_add_block_to_block (&body, &se.post);
+ 		}
+ 	      else
+ 		len = build_int_cst (gfc_charlen_type_node, 1);
+ 
+ 	      result_ref = build_decl (input_location, VAR_DECL,
+ 				       get_identifier ("__entry_result"),
+ 				       build_array_type (chartype,
+ 					 build_range_type (gfc_array_index_type,
+ 					   gfc_index_one_node,
+ 					   fold_convert (gfc_array_index_type,
+ 							 len))));
+ 	      DECL_ARTIFICIAL (result_ref) = 1;
+ 	      TREE_USED (result_ref) = 1;
+ 	      DECL_CONTEXT (result_ref) = current_function_decl;
+ 	      layout_decl (result_ref, 0);
+ 	      pushdecl (result_ref);
+ 
+ 	      vec_safe_push (args,
+ 			     build_fold_addr_expr_loc (input_location,
+ 						       result_ref));
+ 	      vec_safe_push (args, len);
+ 	    }
  	}
  
        for (formal = gfc_sym_get_dummy_args (ns->proc_name); formal;
*************** build_entry_thunks (gfc_namespace * ns,
*** 3045,3051 ****
        vec_safe_splice (args, string_args);
        tmp = ns->proc_name->backend_decl;
        tmp = build_call_expr_loc_vec (input_location, tmp, args);
!       if (ns->proc_name->attr.mixed_entry_master)
  	{
  	  tree union_decl, field;
  	  tree master_type = TREE_TYPE (ns->proc_name->backend_decl);
--- 3148,3171 ----
        vec_safe_splice (args, string_args);
        tmp = ns->proc_name->backend_decl;
        tmp = build_call_expr_loc_vec (input_location, tmp, args);
!       if (result_ref != NULL_TREE)
! 	{
! 	  /* The master returns by reference (void) but the bind(c) thunk
! 	     returns CHARACTER by value.  Execute the master call, then
! 	     load the first character from the local buffer.  */
! 	  gfc_add_expr_to_block (&body, tmp);
! 	  tmp = build4_loc (input_location, ARRAY_REF,
! 			    TREE_TYPE (TREE_TYPE (result_ref)),
! 			    result_ref, gfc_index_one_node,
! 			    NULL_TREE, NULL_TREE);
! 	  tmp = fold_convert (TREE_TYPE (DECL_RESULT (current_function_decl)),
! 			      tmp);
! 	  tmp = fold_build2_loc (input_location, MODIFY_EXPR,
! 			     TREE_TYPE (DECL_RESULT (current_function_decl)),
! 			     DECL_RESULT (current_function_decl), tmp);
! 	  tmp = build1_v (RETURN_EXPR, tmp);
! 	}
!       else if (ns->proc_name->attr.mixed_entry_master)
  	{
  	  tree union_decl, field;
  	  tree master_type = TREE_TYPE (ns->proc_name->backend_decl);
*************** gfc_trans_auto_character_variable (gfc_s
*** 4174,4185 ****
--- 4294,4312 ----
    stmtblock_t init;
    tree decl;
    tree tmp;
+   bool back;
  
    gcc_assert (sym->backend_decl);
    gcc_assert (sym->ts.u.cl && sym->ts.u.cl->length);
  
    gfc_init_block (&init);
  
+   /* In the case of non-dummy symbols with dependencies on an old-fashioned
+      function result (ie. proc_name = proc_name->result), gfc_add_init_cleanup
+      must be called with the last, optional argument false so that the process
+      ing of the character length occurs after the processing of the result.  */
+   back = sym->fn_result_dep;
+ 
    /* Evaluate the string length expression.  */
    gfc_conv_string_length (sym->ts.u.cl, NULL, &init);
  
*************** gfc_trans_auto_character_variable (gfc_s
*** 4192,4198 ****
    tmp = fold_build1_loc (input_location, DECL_EXPR, TREE_TYPE (decl), decl);
    gfc_add_expr_to_block (&init, tmp);
  
!   gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
  }
  
  /* Set the initial value of ASSIGN statement auxiliary variable explicitly.  */
--- 4319,4325 ----
    tmp = fold_build1_loc (input_location, DECL_EXPR, TREE_TYPE (decl), decl);
    gfc_add_expr_to_block (&init, tmp);
  
!   gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE, back);
  }
  
  /* Set the initial value of ASSIGN statement auxiliary variable explicitly.  */
*************** init_intent_out_dt (gfc_symbol * proc_sy
*** 4364,4370 ****
    tree tmp;
    tree present;
    gfc_symbol *s;
-   bool dealloc_with_value = false;
  
    gfc_init_block (&init);
    for (f = gfc_sym_get_dummy_args (proc_sym); f; f = f->next)
--- 4491,4496 ----
*************** init_intent_out_dt (gfc_symbol * proc_sy
*** 4395,4406 ****
  	   by the caller.  */
  	if (tmp == NULL_TREE && !s->attr.allocatable
  	    && s->ts.u.derived->attr.alloc_comp)
! 	  {
! 	    tmp = gfc_deallocate_alloc_comp (s->ts.u.derived,
! 					     s->backend_decl,
! 					     s->as ? s->as->rank : 0);
! 	    dealloc_with_value = s->value;
! 	  }
  
  	if (tmp != NULL_TREE && (s->attr.optional
  				 || s->ns->proc_name->attr.entry_master))
--- 4521,4529 ----
  	   by the caller.  */
  	if (tmp == NULL_TREE && !s->attr.allocatable
  	    && s->ts.u.derived->attr.alloc_comp)
! 	  tmp = gfc_deallocate_alloc_comp (s->ts.u.derived,
! 					   s->backend_decl,
! 					   s->as ? s->as->rank : 0);
  
  	if (tmp != NULL_TREE && (s->attr.optional
  				 || s->ns->proc_name->attr.entry_master))
*************** init_intent_out_dt (gfc_symbol * proc_sy
*** 4410,4423 ****
  			      present, tmp, build_empty_stmt (input_location));
  	  }
  
! 	if (tmp != NULL_TREE && !dealloc_with_value)
! 	  gfc_add_expr_to_block (&init, tmp);
! 	else if (s->value && !s->attr.allocatable)
! 	  {
! 	    gfc_add_expr_to_block (&init, tmp);
! 	    gfc_init_default_dt (s, &init, false);
! 	    dealloc_with_value = false;
! 	  }
        }
      else if (f->sym && f->sym->attr.intent == INTENT_OUT
  	     && f->sym->ts.type == BT_CLASS
--- 4533,4541 ----
  			      present, tmp, build_empty_stmt (input_location));
  	  }
  
! 	gfc_add_expr_to_block (&init, tmp);
! 	if (s->value && !s->attr.allocatable)
! 	  gfc_init_default_dt (s, &init, false);
        }
      else if (f->sym && f->sym->attr.intent == INTENT_OUT
  	     && f->sym->ts.type == BT_CLASS
*************** gfc_trans_deferred_vars (gfc_symbol * pr
*** 4879,4884 ****
--- 4997,5007 ----
  					NULL_TREE);
  		  continue;
  		}
+ 	      else if (sym->attr.codimension && !sym->attr.dimension)
+ 		{
+ 		  /* Scalar coarrays do not need array allocation.  */
+ 		  continue;
+ 		}
  	      else
  		{
  		  gfc_save_backend_locus (&loc);
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-expr.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-expr.cc
*** gcc-14.3.0/gcc/fortran/trans-expr.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-expr.cc	Fri Jun 19 06:51:02 2026
*************** gfc_conv_class_to_class (gfc_se *parmse,
*** 1174,1179 ****
--- 1174,1193 ----
    stmtblock_t block;
    bool full_array = false;
  
+   /* If this is the data field of a class temporary, the class expression
+      can be obtained and returned directly.  */
+   if (e->expr_type != EXPR_VARIABLE
+       && TREE_CODE (parmse->expr) == COMPONENT_REF
+       && !GFC_CLASS_TYPE_P (TREE_TYPE (parmse->expr))
+       && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (parmse->expr, 0))))
+     {
+       parmse->expr = TREE_OPERAND (parmse->expr, 0);
+       if (!VAR_P (parmse->expr))
+ 	parmse->expr = gfc_evaluate_now (parmse->expr, &parmse->pre);
+       parmse->expr = gfc_build_addr_expr (NULL_TREE, parmse->expr);
+       return;
+     }
+ 
    gfc_init_block (&block);
  
    class_ref = NULL;
*************** gfc_get_interface_mapping_charlen (gfc_i
*** 4435,4447 ****
  
  /* A subroutine of gfc_add_interface_mapping.  Return a descriptorless
     array variable that can be used as the actual argument for dummy
!    argument SYM.  Add any initialization code to BLOCK.  PACKED is as
!    for gfc_get_nodesc_array_type and DATA points to the first element
!    in the passed array.  */
  
  static tree
  gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym,
! 				 gfc_packed packed, tree data, tree len)
  {
    tree type;
    tree var;
--- 4449,4463 ----
  
  /* A subroutine of gfc_add_interface_mapping.  Return a descriptorless
     array variable that can be used as the actual argument for dummy
!    argument SYM, except in the case of assumed rank dummies of
!    non-intrinsic functions where the descriptor must be passed. Add any
!    initialization code to BLOCK. PACKED is as for gfc_get_nodesc_array_type
!    and DATA points to the first element in the passed array.  */
  
  static tree
  gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym,
! 				 gfc_packed packed, tree data, tree len,
! 				 bool assumed_rank_formal)
  {
    tree type;
    tree var;
*************** gfc_get_interface_mapping_array (stmtblo
*** 4450,4456 ****
      type = gfc_get_character_type_len (sym->ts.kind, len);
    else
      type = gfc_typenode_for_spec (&sym->ts);
!   type = gfc_get_nodesc_array_type (type, sym->as, packed,
  				    !sym->attr.target && !sym->attr.pointer
  				    && !sym->attr.proc_pointer);
  
--- 4466,4476 ----
      type = gfc_get_character_type_len (sym->ts.kind, len);
    else
      type = gfc_typenode_for_spec (&sym->ts);
! 
!   if (assumed_rank_formal)
!     type = TREE_TYPE (data);
!   else
!     type = gfc_get_nodesc_array_type (type, sym->as, packed,
  				    !sym->attr.target && !sym->attr.pointer
  				    && !sym->attr.proc_pointer);
  
*************** gfc_add_interface_mapping (gfc_interface
*** 4537,4542 ****
--- 4557,4563 ----
    new_sym->attr.allocatable = sym->attr.allocatable;
    new_sym->attr.flavor = sym->attr.flavor;
    new_sym->attr.function = sym->attr.function;
+   new_sym->attr.dummy = 0;
  
    /* Ensure that the interface is available and that
       descriptors are passed for array actual arguments.  */
*************** gfc_add_interface_mapping (gfc_interface
*** 4623,4637 ****
    else if (POINTER_TYPE_P (TREE_TYPE (se->expr))
  	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (se->expr))))
      {
        /* Get the actual argument's descriptor.  */
        desc = build_fold_indirect_ref_loc (input_location,
  				      se->expr);
  
        /* Create the replacement variable.  */
!       tmp = gfc_conv_descriptor_data_get (desc);
        value = gfc_get_interface_mapping_array (&se->pre, sym,
  					       PACKED_NO, tmp,
! 					       se->string_length);
  
        /* Use DESC to work out the upper bounds, strides and offset.  */
        gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc);
--- 4644,4670 ----
    else if (POINTER_TYPE_P (TREE_TYPE (se->expr))
  	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (se->expr))))
      {
+       bool assumed_rank_formal = false;
+ 
        /* Get the actual argument's descriptor.  */
        desc = build_fold_indirect_ref_loc (input_location,
  				      se->expr);
  
        /* Create the replacement variable.  */
!       if (sym->as && sym->as->type == AS_ASSUMED_RANK
! 	  && !(sym->ns && sym->ns->proc_name
! 	       && sym->ns->proc_name->attr.proc == PROC_INTRINSIC))
! 	{
! 	  assumed_rank_formal = true;
! 	  tmp = desc;
! 	}
!       else
! 	tmp = gfc_conv_descriptor_data_get (desc);
! 
        value = gfc_get_interface_mapping_array (&se->pre, sym,
  					       PACKED_NO, tmp,
! 					       se->string_length,
! 					       assumed_rank_formal);
  
        /* Use DESC to work out the upper bounds, strides and offset.  */
        gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc);
*************** gfc_add_interface_mapping (gfc_interface
*** 4640,4646 ****
      /* Otherwise we have a packed array.  */
      value = gfc_get_interface_mapping_array (&se->pre, sym,
  					     PACKED_FULL, se->expr,
! 					     se->string_length);
  
    new_sym->backend_decl = value;
  }
--- 4673,4680 ----
      /* Otherwise we have a packed array.  */
      value = gfc_get_interface_mapping_array (&se->pre, sym,
  					     PACKED_FULL, se->expr,
! 					     se->string_length,
! 					     false);
  
    new_sym->backend_decl = value;
  }
*************** gfc_apply_interface_mapping_to_expr (gfc
*** 4926,4932 ****
    /* TODO Find out why the condition on expr->symtree had to be moved into
       the loop rather than being outside it, as originally.  */
    for (sym = mapping->syms; sym; sym = sym->next)
!     if (expr->symtree && sym->old == expr->symtree->n.sym)
        {
  	if (sym->new_sym->n.sym->backend_decl)
  	  expr->symtree = sym->new_sym;
--- 4960,4966 ----
    /* TODO Find out why the condition on expr->symtree had to be moved into
       the loop rather than being outside it, as originally.  */
    for (sym = mapping->syms; sym; sym = sym->next)
!     if (expr->symtree && !strcmp (sym->old->name, expr->symtree->n.sym->name))
        {
  	if (sym->new_sym->n.sym->backend_decl)
  	  expr->symtree = sym->new_sym;
*************** gfc_conv_subref_array_arg (gfc_se *se, g
*** 5236,5242 ****
  
    gcc_assert (lse.ss == gfc_ss_terminator);
  
!   tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, true);
    gfc_add_expr_to_block (&body, tmp);
  
    /* Generate the copying loops.  */
--- 5270,5278 ----
  
    gcc_assert (lse.ss == gfc_ss_terminator);
  
!   /* Do not do deallocations when we are looking at a g77-style argument.  */
! 
!   tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, !g77);
    gfc_add_expr_to_block (&body, tmp);
  
    /* Generate the copying loops.  */
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7190,7195 ****
--- 7226,7241 ----
  	      gfc_init_block (&class_se.pre);
  	      gfc_init_block (&class_se.post);
  
+ 	      if (e->expr_type != EXPR_VARIABLE)
+ 		{
+ 		  int n;
+ 		  /* Set the bounds and offset correctly.  */
+ 		  for (n = 0; n < e->rank; n++)
+ 		    gfc_conv_shift_descriptor_lbound (&class_se.pre,
+ 						      class_se.expr,
+ 						      n, gfc_index_one_node);
+ 		}
+ 
  	      /* The conversion does not repackage the reference to a class
  	         array - _data descriptor.  */
  	      gfc_conv_class_to_class (&class_se, e, fsym->ts, false,
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7208,7213 ****
--- 7254,7291 ----
  					     : &parmse.pre;
  	      gfc_add_block_to_block (class_pre_block, &class_se.pre);
  	      gfc_add_block_to_block (&parmse.post, &class_se.post);
+ 
+ 	      if (e->expr_type == EXPR_OP
+ 		  && POINTER_TYPE_P (TREE_TYPE (parmse.expr))
+ 		  && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (parmse.expr, 0))))
+ 		{
+ 		  tree cond;
+ 		  tree dealloc_expr = gfc_finish_block (&parmse.post);
+ 		  tmp = TREE_OPERAND (parmse.expr, 0);
+ 		  gfc_init_block (&parmse.post);
+ 		  cond = gfc_class_data_get (tmp);
+ 		  tmp = gfc_deallocate_alloc_comp_no_caf (e->ts.u.derived,
+ 							  tmp, e->rank, true);
+ 		  gfc_add_expr_to_block (&parmse.post, tmp);
+ 		  cond = gfc_class_data_get (TREE_OPERAND (parmse.expr, 0));
+ 		  cond = gfc_conv_descriptor_data_get (cond);
+ 		  cond = fold_build2_loc (input_location, NE_EXPR,
+ 					  logical_type_node, cond,
+ 					  build_int_cst (TREE_TYPE (cond), 0));
+ 		  tmp = build3_v (COND_EXPR, cond, dealloc_expr,
+ 				  build_empty_stmt (input_location));
+ 
+ 		  /* This specific case should not be processed further and so
+ 		     bundle everything up and proceed to the next argument.  */
+ 		  if (fsym && need_interface_mapping && e)
+ 		    gfc_add_interface_mapping (&mapping, fsym, &parmse, e);
+ 		  gfc_add_expr_to_block (&parmse.post, tmp);
+ 		  gfc_add_block_to_block (&se->pre, &parmse.pre);
+ 		  gfc_add_block_to_block (&post, &parmse.post);
+ 		  gfc_add_block_to_block (&se->finalblock, &parmse.finalblock);
+ 		  vec_safe_push (arglist, parmse.expr);
+ 		  continue;
+ 		}
  	    }
  	  else
  	    {
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7329,7335 ****
  		       && (fsym->attr.target
  			   ? gfc_is_not_contiguous (e)
  			   : !gfc_is_simply_contiguous (e, false, true))
! 		       && gfc_expr_is_variable (e))
  		{
  		  gfc_conv_subref_array_arg (&parmse, e, nodesc_arg,
  					     fsym->attr.intent,
--- 7407,7414 ----
  		       && (fsym->attr.target
  			   ? gfc_is_not_contiguous (e)
  			   : !gfc_is_simply_contiguous (e, false, true))
! 		       && gfc_expr_is_variable (e)
! 		       && e->rank != -1)
  		{
  		  gfc_conv_subref_array_arg (&parmse, e, nodesc_arg,
  					     fsym->attr.intent,
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7717,7723 ****
  		msg = xasprintf ("Pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else if (attr.proc_pointer && !e->value.function.actual
! 		       && (fsym == NULL || !fsym_attr.proc_pointer))
  		msg = xasprintf ("Proc-pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else
--- 7796,7803 ----
  		msg = xasprintf ("Pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else if (attr.proc_pointer && !e->value.function.actual
! 		       && (fsym == NULL
! 			   || (!fsym_attr.proc_pointer && !fsym_attr.optional)))
  		msg = xasprintf ("Proc-pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else
*************** gfc_trans_arrayfunc_assign (gfc_expr * e
*** 11429,11434 ****
--- 11509,11519 ----
    gfc_symbol *sym = expr1->symtree->n.sym;
    bool finalizable =  gfc_may_be_finalized (expr1->ts);
  
+   /* If the symbol is host associated and has not been referenced in its name
+      space, it might be lacking a backend_decl and vtable.  */
+   if (sym->backend_decl == NULL_TREE)
+     return NULL_TREE;
+ 
    if (arrayfunc_assign_needs_temporary (expr1, expr2))
      return NULL;
  
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-intrinsic.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-intrinsic.cc
*** gcc-14.3.0/gcc/fortran/trans-intrinsic.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-intrinsic.cc	Fri Jun 19 06:51:02 2026
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8512,8518 ****
  				       argse.string_length);
        else if (arg->expr->ts.type == BT_CLASS)
  	{
! 	  class_ref = TREE_OPERAND (argse.expr, 0);
  	  tmp = gfc_class_vtab_size_get (class_ref);
  	  if (UNLIMITED_POLY (arg->expr))
  	    tmp = gfc_resize_class_size_with_len (&argse.pre, class_ref, tmp);
--- 8512,8523 ----
  				       argse.string_length);
        else if (arg->expr->ts.type == BT_CLASS)
  	{
! 	  if (UNLIMITED_POLY (source_expr)
! 	      && DECL_LANG_SPECIFIC (source_expr->symtree->n.sym->backend_decl))
! 	    class_ref = GFC_DECL_SAVED_DESCRIPTOR
! 	      (source_expr->symtree->n.sym->backend_decl);
! 	  else
! 	    class_ref = TREE_OPERAND (argse.expr, 0);
  	  tmp = gfc_class_vtab_size_get (class_ref);
  	  if (UNLIMITED_POLY (arg->expr))
  	    tmp = gfc_resize_class_size_with_len (&argse.pre, class_ref, tmp);
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-io.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-io.cc
*** gcc-14.3.0/gcc/fortran/trans-io.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-io.cc	Fri Jun 19 06:51:02 2026
*************** transfer_expr (gfc_se * se, gfc_typespec
*** 2496,2502 ****
  
  		  if (c->attr.dimension)
  		    {
! 		      tmp = transfer_array_component (tmp, c, & code->loc);
  		      gfc_add_expr_to_block (&se->pre, tmp);
  		    }
  		  else
--- 2496,2504 ----
  
  		  if (c->attr.dimension)
  		    {
! 		      tmp = transfer_array_component (tmp, c,
! 						      code ? &code->loc
! 						      : NULL);
  		      gfc_add_expr_to_block (&se->pre, tmp);
  		    }
  		  else
*************** gfc_trans_transfer (gfc_code * code)
*** 2630,2636 ****
  	 && ((expr->symtree->n.sym->ts.type == BT_DERIVED && expr->ts.deferred)
  	     || (expr->symtree->n.sym->assoc
  		 && expr->symtree->n.sym->assoc->variable)
! 	     || gfc_expr_attr (expr).pointer))
  	goto scalarize;
  
        /* With array-bounds checking enabled, force scalarization in some
--- 2632,2640 ----
  	 && ((expr->symtree->n.sym->ts.type == BT_DERIVED && expr->ts.deferred)
  	     || (expr->symtree->n.sym->assoc
  		 && expr->symtree->n.sym->assoc->variable)
! 	     || gfc_expr_attr (expr).pointer
! 	     || (expr->symtree->n.sym->attr.pointer
! 		 && gfc_expr_attr (expr).target)))
  	goto scalarize;
  
        /* With array-bounds checking enabled, force scalarization in some
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-openmp.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-openmp.cc
*** gcc-14.3.0/gcc/fortran/trans-openmp.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-openmp.cc	Fri Jun 19 06:51:02 2026
*************** gfc_has_alloc_comps (tree type, tree dec
*** 415,420 ****
--- 415,444 ----
    return false;
  }
  
+ /* Return true if TYPE is a class container for a POINTER entity.  */
+ 
+ static bool
+ gfc_is_class_pointer_type (tree type)
+ {
+   tree name;
+   const char *s;
+ 
+   if (POINTER_TYPE_P (type))
+     type = TREE_TYPE (type);
+ 
+   if (!GFC_CLASS_TYPE_P (type))
+     return false;
+ 
+   name = TYPE_NAME (type);
+   if (name && TREE_CODE (name) == TYPE_DECL)
+     name = DECL_NAME (name);
+   if (!name)
+     return false;
+ 
+   s = IDENTIFIER_POINTER (name);
+   return startswith (s, "__class_") && s[strlen (s) - 1] == 'p';
+ }
+ 
  /* Return true if TYPE is polymorphic but not with pointer attribute.  */
  
  static bool
*************** gfc_omp_clause_default_ctor (tree clause
*** 764,770 ****
        return NULL_TREE;
      }
  
!   gcc_assert (outer != NULL_TREE);
  
    /* Allocatable arrays and scalars in PRIVATE clauses need to be set to
       "not currently allocated" allocation status if outer
--- 788,796 ----
        return NULL_TREE;
      }
  
!   gcc_assert (outer != NULL_TREE
! 	      || (!GFC_DESCRIPTOR_TYPE_P (type)
! 		  && !gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))));
  
    /* Allocatable arrays and scalars in PRIVATE clauses need to be set to
       "not currently allocated" allocation status if outer
*************** gfc_omp_clause_copy_ctor (tree clause, t
*** 854,875 ****
  {
    tree type = TREE_TYPE (dest), ptr, size, call;
    tree decl_type = TREE_TYPE (OMP_CLAUSE_DECL (clause));
    tree cond, then_b, else_b;
    stmtblock_t block, cond_block;
  
    gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE
  	      || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR);
  
!   /* Privatize pointer, only; cf. gfc_omp_predetermined_sharing. */
!   if (DECL_P (OMP_CLAUSE_DECL (clause))
!       && GFC_DECL_ASSOCIATE_VAR_P (OMP_CLAUSE_DECL (clause)))
!     return build2 (MODIFY_EXPR, TREE_TYPE (dest), dest, src);
  
!   if (DECL_ARTIFICIAL (OMP_CLAUSE_DECL (clause))
!       && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (clause))
!       && GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_DECL (clause)))
!     decl_type
!       = TREE_TYPE (GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_DECL (clause)));
  
    if (gfc_is_polymorphic_nonptr (decl_type))
      {
--- 880,908 ----
  {
    tree type = TREE_TYPE (dest), ptr, size, call;
    tree decl_type = TREE_TYPE (OMP_CLAUSE_DECL (clause));
+   tree orig_decl = OMP_CLAUSE_DECL (clause);
    tree cond, then_b, else_b;
    stmtblock_t block, cond_block;
  
    gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE
  	      || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR);
  
!   if (DECL_ARTIFICIAL (orig_decl)
!       && DECL_LANG_SPECIFIC (orig_decl)
!       && GFC_DECL_SAVED_DESCRIPTOR (orig_decl))
!     {
!       orig_decl = GFC_DECL_SAVED_DESCRIPTOR (orig_decl);
!       decl_type = TREE_TYPE (orig_decl);
!     }
  
!   /* Privatize pointer association only; cf. gfc_omp_predetermined_sharing.
!      This includes scalar class pointers, whose tree type is still the class
!      record even though the Fortran entity has POINTER semantics.  */
!   if (DECL_P (orig_decl)
!       && (GFC_DECL_ASSOCIATE_VAR_P (orig_decl)
! 	  || GFC_DECL_GET_SCALAR_POINTER (orig_decl)
! 	  || gfc_is_class_pointer_type (decl_type)))
!     return build2 (MODIFY_EXPR, TREE_TYPE (dest), dest, src);
  
    if (gfc_is_polymorphic_nonptr (decl_type))
      {
*************** gfc_omp_clause_dtor (tree clause, tree d
*** 1377,1393 ****
  {
    tree type = TREE_TYPE (decl), tem;
    tree decl_type = TREE_TYPE (OMP_CLAUSE_DECL (clause));
  
!   /* Only pointer was privatized; cf. gfc_omp_clause_copy_ctor. */
!   if (DECL_P (OMP_CLAUSE_DECL (clause))
!       && GFC_DECL_ASSOCIATE_VAR_P (OMP_CLAUSE_DECL (clause)))
      return NULL_TREE;
  
-   if (DECL_ARTIFICIAL (OMP_CLAUSE_DECL (clause))
-       && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (clause))
-       && GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_DECL (clause)))
-     decl_type
- 	= TREE_TYPE (GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_DECL (clause)));
    if (gfc_is_polymorphic_nonptr (decl_type))
      {
        if (POINTER_TYPE_P (decl_type))
--- 1410,1433 ----
  {
    tree type = TREE_TYPE (decl), tem;
    tree decl_type = TREE_TYPE (OMP_CLAUSE_DECL (clause));
+   tree orig_decl = OMP_CLAUSE_DECL (clause);
  
!   if (DECL_ARTIFICIAL (orig_decl)
!       && DECL_LANG_SPECIFIC (orig_decl)
!       && GFC_DECL_SAVED_DESCRIPTOR (orig_decl))
!     {
!       orig_decl = GFC_DECL_SAVED_DESCRIPTOR (orig_decl);
!       decl_type = TREE_TYPE (orig_decl);
!     }
! 
!   /* Only pointer association was privatized; cf. gfc_omp_clause_copy_ctr.
!      Scalar class pointers must not finalize or free their targets here.  */
!   if (DECL_P (orig_decl)
!       && (GFC_DECL_ASSOCIATE_VAR_P (orig_decl)
! 	  || GFC_DECL_GET_SCALAR_POINTER (orig_decl)
! 	  || gfc_is_class_pointer_type (decl_type)))
      return NULL_TREE;
  
    if (gfc_is_polymorphic_nonptr (decl_type))
      {
        if (POINTER_TYPE_P (decl_type))
*************** gfc_omp_finish_clause (tree c, gimple_se
*** 1723,1731 ****
      }
    tree last = c;
    if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
!     OMP_CLAUSE_SIZE (c)
!       = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
! 		      : TYPE_SIZE_UNIT (TREE_TYPE (decl));
    if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
  		     NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
      OMP_CLAUSE_SIZE (c) = size_int (0);
--- 1763,1801 ----
      }
    tree last = c;
    if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
!     {
!       if (DECL_P (decl))
! 	 OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
!       else
! 	{
! 	  tree type = TREE_TYPE (decl);
! 	  tree size = TYPE_SIZE_UNIT (type);
! 	  /* For variable-length character types, TYPE_SIZE_UNIT is a
! 	     SAVE_EXPR.  Gimplifying the SAVE_EXPR (here or elsewhere)
! 	     resolves it in place, embedding a gimple temporary that
! 	     later causes an ICE in remap_type during inlining because
! 	     the temporary is not in scope (PR101760, PR102314).
! 	     Compute the size from the array domain and element size
! 	     to decouple completely from the type's SAVE_EXPRs.  */
! 	  if (size
! 	      && TREE_CODE (type) == ARRAY_TYPE
! 	      && TYPE_DOMAIN (type)
! 	      && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
! 	      && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
! 	    {
! 	      tree len = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
! 	      tree lb = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
! 	      tree eltsz = TYPE_SIZE_UNIT (TREE_TYPE (type));
! 	      len = fold_build2 (MINUS_EXPR, TREE_TYPE (len), len, lb);
! 	      len = fold_build2 (PLUS_EXPR, TREE_TYPE (len), len,
! 				 build_one_cst (TREE_TYPE (len)));
! 	      size = fold_build2 (MULT_EXPR, sizetype,
! 				  fold_convert (sizetype, len),
! 				  fold_convert (sizetype, eltsz));
! 	    }
! 	  OMP_CLAUSE_SIZE (c) = size;
! 	}
!    }
    if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
  		     NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
      OMP_CLAUSE_SIZE (c) = size_int (0);
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 3074,3080 ****
  		{
  		  tree ptr;
  		  gfc_init_se (&se, NULL);
! 		  if (n->expr->ref->u.ar.type == AR_ELEMENT)
  		    {
  		      gfc_conv_expr_reference (&se, n->expr);
  		      ptr = se.expr;
--- 3144,3154 ----
  		{
  		  tree ptr;
  		  gfc_init_se (&se, NULL);
! 		  /* The first ref can be an element selection on the base
! 		     object while the full expression still denotes an array,
! 		     e.g. x(j)%a.  Pick the lowering path from the overall
! 		     expression rank, not from the first REF_ARRAY.  */
! 		  if (n->expr->rank == 0)
  		    {
  		      gfc_conv_expr_reference (&se, n->expr);
  		      ptr = se.expr;
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 3315,3320 ****
--- 3389,3402 ----
  				       != BT_VOID))))
  		    {
  		      tree orig_decl = decl;
+ 		      bool bare_attach_detach
+ 			= (openacc
+ 			   && (n->u.map.op == OMP_MAP_ATTACH
+ 			       || n->u.map.op == OMP_MAP_DETACH)
+ 			   && !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))
+ 			   && !(POINTER_TYPE_P (TREE_TYPE (decl))
+ 				&& GFC_DESCRIPTOR_TYPE_P (TREE_TYPE
+ 							  (TREE_TYPE (decl)))));
  
  		      /* For nonallocatable, nonpointer arrays, a temporary
  			 variable is generated, but this one is only defined if
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 3339,3344 ****
--- 3421,3438 ----
  							     cond, tmp,
  							     NULL_TREE));
  			}
+ 		      /* Bare OpenACC attach/detach on scalar pointer-like
+ 			 variables wants a single attach operation on the
+ 			 pointer itself, not a standalone pointer-mapping
+ 			 node.  Component and descriptor cases have dedicated
+ 			 handling below; this covers the plain scalar path.  */
+ 		      if (bare_attach_detach)
+ 			{
+ 			  decl = build_fold_indirect_ref (decl);
+ 			  OMP_CLAUSE_DECL (node) = build_fold_addr_expr (decl);
+ 			  OMP_CLAUSE_SIZE (node) = size_zero_node;
+ 			  goto finalize_map_clause;
+ 			}
  		      /* For descriptor types, the unmapping happens below.  */
  		      if (op != EXEC_OMP_TARGET_EXIT_DATA
  			  || !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
*************** gfc_trans_omp_depobj (gfc_code *code)
*** 6243,6249 ****
        else if (n->expr && n->expr->ref->u.ar.type != AR_FULL)
  	{
  	  gfc_init_se (&se, NULL);
! 	  if (n->expr->ref->u.ar.type == AR_ELEMENT)
  	    {
  	      gfc_conv_expr_reference (&se, n->expr);
  	      var = se.expr;
--- 6337,6343 ----
        else if (n->expr && n->expr->ref->u.ar.type != AR_FULL)
  	{
  	  gfc_init_se (&se, NULL);
! 	  if (n->expr->rank == 0)
  	    {
  	      gfc_conv_expr_reference (&se, n->expr);
  	      var = se.expr;
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans-types.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans-types.cc
*** gcc-14.3.0/gcc/fortran/trans-types.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans-types.cc	Fri Jun 19 06:51:02 2026
*************** along with GCC; see the file COPYING3.
*** 39,45 ****
  #include "dwarf2out.h"	/* For struct array_descr_info.  */
  #include "attribs.h"
  #include "alias.h"
! 
  
  #if (GFC_MAX_DIMENSIONS < 10)
  #define GFC_RANK_DIGITS 1
--- 39,45 ----
  #include "dwarf2out.h"	/* For struct array_descr_info.  */
  #include "attribs.h"
  #include "alias.h"
! 
  
  #if (GFC_MAX_DIMENSIONS < 10)
  #define GFC_RANK_DIGITS 1
*************** gfc_get_pchar_type (int kind)
*** 1111,1117 ****
    return index < 0 ? 0 : gfc_pcharacter_types[index];
  }
  
! 
  /* Create a character type with the given kind and length.  */
  
  tree
--- 1111,1117 ----
    return index < 0 ? 0 : gfc_pcharacter_types[index];
  }
  
! 
  /* Create a character type with the given kind and length.  */
  
  tree
*************** gfc_get_character_type (int kind, gfc_ch
*** 1147,1153 ****
  
    return gfc_get_character_type_len (kind, len);
  }
! 
  /* Convert a basic type.  This will be an array for character types.  */
  
  tree
--- 1147,1153 ----
  
    return gfc_get_character_type_len (kind, len);
  }
! 
  /* Convert a basic type.  This will be an array for character types.  */
  
  tree
*************** gfc_typenode_for_spec (gfc_typespec * sp
*** 1243,1249 ****
      }
    return basetype;
  }
! 
  /* Build an INT_CST for constant expressions, otherwise return NULL_TREE.  */
  
  static tree
--- 1243,1249 ----
      }
    return basetype;
  }
! 
  /* Build an INT_CST for constant expressions, otherwise return NULL_TREE.  */
  
  static tree
*************** gfc_conv_array_bound (gfc_expr * expr)
*** 1256,1262 ****
    /* Otherwise return NULL.  */
    return NULL_TREE;
  }
! 
  /* Return the type of an element of the array.  Note that scalar coarrays
     are special.  In particular, for GFC_ARRAY_TYPE_P, the original argument
     (with POINTER_TYPE stripped) is returned.  */
--- 1256,1262 ----
    /* Otherwise return NULL.  */
    return NULL_TREE;
  }
! 
  /* Return the type of an element of the array.  Note that scalar coarrays
     are special.  In particular, for GFC_ARRAY_TYPE_P, the original argument
     (with POINTER_TYPE stripped) is returned.  */
*************** gfc_get_element_type (tree type)
*** 1296,1302 ****
  
    return element;
  }
! 
  /* Build an array.  This function is called from gfc_sym_type().
     Actually returns array descriptor type.
  
--- 1296,1302 ----
  
    return element;
  }
! 
  /* Build an array.  This function is called from gfc_sym_type().
     Actually returns array descriptor type.
  
*************** gfc_build_array_type (tree type, gfc_arr
*** 1468,1474 ****
  				    corank, lbound, ubound, 0, akind,
  				    restricted);
  }
! 
  /* Returns the struct descriptor_dimension type.  */
  
  static tree
--- 1468,1474 ----
  				    corank, lbound, ubound, 0, akind,
  				    restricted);
  }
! 
  /* Returns the struct descriptor_dimension type.  */
  
  static tree
*************** gfc_get_array_type_bounds (tree etype, i
*** 2096,2102 ****
  
    return fat_type;
  }
! 
  /* Build a pointer type. This function is called from gfc_sym_type().  */
  
  static tree
--- 2096,2102 ----
  
    return fat_type;
  }
! 
  /* Build a pointer type. This function is called from gfc_sym_type().  */
  
  static tree
*************** gfc_nonrestricted_type (tree t)
*** 2271,2277 ****
    return ret;
  }
  
! 
  /* Return the type for a symbol.  Special handling is required for character
     types to get the correct level of indirection.
     For functions return the return type.
--- 2271,2277 ----
    return ret;
  }
  
! 
  /* Return the type for a symbol.  Special handling is required for character
     types to get the correct level of indirection.
     For functions return the return type.
*************** gfc_sym_type (gfc_symbol * sym, bool is_
*** 2398,2404 ****
  
    return (type);
  }
! 
  /* Layout and output debug info for a record type.  */
  
  void
--- 2398,2404 ----
  
    return (type);
  }
! 
  /* Layout and output debug info for a record type.  */
  
  void
*************** gfc_finish_type (tree type)
*** 2413,2419 ****
    rest_of_type_compilation (type, 1);
    rest_of_decl_compilation (decl, 1, 0);
  }
! 
  /* Add a field of given NAME and TYPE to the context of a UNION_TYPE
     or RECORD_TYPE pointed to by CONTEXT.  The new field is chained
     to the end of the field list pointed to by *CHAIN.
--- 2413,2419 ----
    rest_of_type_compilation (type, 1);
    rest_of_decl_compilation (decl, 1, 0);
  }
! 
  /* Add a field of given NAME and TYPE to the context of a UNION_TYPE
     or RECORD_TYPE pointed to by CONTEXT.  The new field is chained
     to the end of the field list pointed to by *CHAIN.
*************** gfc_return_by_reference (gfc_symbol * sy
*** 2977,2983 ****
  
    return 0;
  }
! 
  static tree
  gfc_get_mixed_entry_union (gfc_namespace *ns)
  {
--- 2977,3004 ----
  
    return 0;
  }
! 
! static tree
! gfc_get_entry_result_type (gfc_symbol *sym)
! {
!   tree type;
! 
!   type = gfc_sym_type (sym->result);
! 
!   /* Mixed ENTRY master unions must use the ABI return type of each entry.
!      Under -ff2c, default REAL entries return C double even though their
!      Fortran result symbol remains default REAL.  */
!   if (flag_f2c
!       && sym->ts.type == BT_REAL
!       && sym->ts.kind == gfc_default_real_kind
!       && !sym->attr.pointer
!       && !sym->attr.allocatable
!       && !sym->attr.always_explicit)
!     type = gfc_get_real_type (gfc_default_double_kind);
! 
!   return type;
! }
! 
  static tree
  gfc_get_mixed_entry_union (gfc_namespace *ns)
  {
*************** gfc_get_mixed_entry_union (gfc_namespace
*** 3006,3012 ****
        if (el == el2)
  	gfc_add_field_to_struct_1 (type,
  				   get_identifier (el->sym->result->name),
! 				   gfc_sym_type (el->sym->result), &chain);
      }
  
    /* Finish off the type.  */
--- 3027,3034 ----
        if (el == el2)
  	gfc_add_field_to_struct_1 (type,
  				   get_identifier (el->sym->result->name),
! 				   gfc_get_entry_result_type (el->sym),
! 				   &chain);
      }
  
    /* Finish off the type.  */
*************** gfc_get_mixed_entry_union (gfc_namespace
*** 3014,3020 ****
    TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
    return type;
  }
! 
  /* Create a "fn spec" based on the formal arguments;
     cf. create_function_arglist.  */
  
--- 3036,3042 ----
    TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
    return type;
  }
! 
  /* Create a "fn spec" based on the formal arguments;
     cf. create_function_arglist.  */
  
*************** gfc_get_function_type (gfc_symbol * sym,
*** 3171,3176 ****
--- 3193,3199 ----
  	}
      }
    if (sym->backend_decl == error_mark_node && actual_args != NULL
+       && sym->ts.interface == NULL
        && sym->formal == NULL && (sym->attr.proc == PROC_EXTERNAL
  				 || sym->attr.proc == PROC_UNKNOWN))
      gfc_get_formal_from_actual_arglist (sym, actual_args);
*************** arg_type_list_done:
*** 3334,3340 ****
  
    return type;
  }
! 
  /* Language hooks for middle-end access to type nodes.  */
  
  /* Return an integer type with BITS bits of precision,
--- 3357,3363 ----
  
    return type;
  }
! 
  /* Language hooks for middle-end access to type nodes.  */
  
  /* Return an integer type with BITS bits of precision,
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans.cc gcc-14.3.0-RC-20260619/gcc/fortran/trans.cc
*** gcc-14.3.0/gcc/fortran/trans.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans.cc	Fri Jun 19 06:51:02 2026
*************** gfc_start_wrapped_block (gfc_wrapped_blo
*** 2803,2816 ****
  /* Add a new pair of initializers/clean-up code.  */
  
  void
! gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup)
  {
    gcc_assert (block);
  
    /* The new pair of init/cleanup should be "wrapped around" the existing
       block of code, thus the initialization is added to the front and the
       cleanup to the back.  */
!   add_expr_to_chain (&block->init, init, true);
    add_expr_to_chain (&block->cleanup, cleanup, false);
  }
  
--- 2803,2817 ----
  /* Add a new pair of initializers/clean-up code.  */
  
  void
! gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup,
! 		      bool back)
  {
    gcc_assert (block);
  
    /* The new pair of init/cleanup should be "wrapped around" the existing
       block of code, thus the initialization is added to the front and the
       cleanup to the back.  */
!   add_expr_to_chain (&block->init, init, !back);
    add_expr_to_chain (&block->cleanup, cleanup, false);
  }
  
diff -Nrcpad gcc-14.3.0/gcc/fortran/trans.h gcc-14.3.0-RC-20260619/gcc/fortran/trans.h
*** gcc-14.3.0/gcc/fortran/trans.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fortran/trans.h	Fri Jun 19 06:51:02 2026
*************** void gfc_conv_class_to_class (gfc_se *,
*** 471,477 ****
  void gfc_start_wrapped_block (gfc_wrapped_block* block, tree code);
  /* Add a pair of init/cleanup code to the block.  Each one might be a
     NULL_TREE if not required.  */
! void gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup);
  /* Finalize the block, that is, create a single expression encapsulating the
     original code together with init and clean-up code.  */
  tree gfc_finish_wrapped_block (gfc_wrapped_block* block);
--- 471,478 ----
  void gfc_start_wrapped_block (gfc_wrapped_block* block, tree code);
  /* Add a pair of init/cleanup code to the block.  Each one might be a
     NULL_TREE if not required.  */
! void gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup,
! 			   bool back = false);
  /* Finalize the block, that is, create a single expression encapsulating the
     original code together with init and clean-up code.  */
  tree gfc_finish_wrapped_block (gfc_wrapped_block* block);
diff -Nrcpad gcc-14.3.0/gcc/fwprop.cc gcc-14.3.0-RC-20260619/gcc/fwprop.cc
*** gcc-14.3.0/gcc/fwprop.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/fwprop.cc	Fri Jun 19 06:51:02 2026
*************** forward_propagate_into (use_info *use, b
*** 842,847 ****
--- 842,861 ----
    if (def_insn->is_artificial ())
      return false;
  
+   /* Do not propagate asms.  The only kind of propagation that would
+      succeed is propagation into a register move.  Such a propagation
+      is neutral if the destination of the move is a pseudo and unnecessarily
+      restricts the register allocator if the destination of the move is
+      a hard register.
+ 
+      Furthermore, unlike for a normal instruction, we cannot take a SET from an
+      asm and try dropping the CLOBBERs.  The recog process does not (and should
+      not try to) second-guess whether what the user wrote can be changed and
+      so it has to assume that any asm given to it is a fair reflection of
+      what the user wrote.  */
+   if (def_insn->is_asm ())
+     return false;
+ 
    rtx_insn *def_rtl = def_insn->rtl ();
    if (!NONJUMP_INSN_P (def_rtl))
      return false;
diff -Nrcpad gcc-14.3.0/gcc/generic-match-head.cc gcc-14.3.0-RC-20260619/gcc/generic-match-head.cc
*** gcc-14.3.0/gcc/generic-match-head.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/generic-match-head.cc	Fri Jun 19 06:51:02 2026
*************** optimize_successive_divisions_p (tree, t
*** 105,110 ****
--- 105,122 ----
    return false;
  }
  
+ /* Returns true if the expression T has no side effects
+    including not trapping. */
+ static inline bool
+ expr_no_side_effects_p (tree t)
+ {
+   if (TREE_SIDE_EFFECTS (t))
+     return false;
+   if (generic_expr_could_trap_p (t))
+     return false;
+   return true;
+ }
+ 
  /* Return true if EXPR1 and EXPR2 have the same value, but not necessarily
     same type.  The types can differ through nop conversions.  */
  
diff -Nrcpad gcc-14.3.0/gcc/gengtype-lex.cc gcc-14.3.0-RC-20260619/gcc/gengtype-lex.cc
*** gcc-14.3.0/gcc/gengtype-lex.cc	Fri May 23 11:04:34 2025
--- gcc-14.3.0-RC-20260619/gcc/gengtype-lex.cc	Fri Jun 19 06:52:38 2026
*************** int yy_flex_debug = 0;
*** 1191,1197 ****
  #define YY_MORE_ADJ 0
  #define YY_RESTORE_YY_MORE_OFFSET
  char *yytext;
! #line 1 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* -*- indented-text -*- */
  /* Process source files and output type information.
     Copyright (C) 2002-2024 Free Software Foundation, Inc.
--- 1191,1197 ----
  #define YY_MORE_ADJ 0
  #define YY_RESTORE_YY_MORE_OFFSET
  char *yytext;
! #line 1 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* -*- indented-text -*- */
  /* Process source files and output type information.
     Copyright (C) 2002-2024 Free Software Foundation, Inc.
*************** You should have received a copy of the G
*** 1212,1218 ****
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  #define YY_NO_INPUT 1
! #line 24 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  #ifdef HOST_GENERATOR_FILE
  #include "config.h"
  #define GENERATOR_FILE 1
--- 1212,1218 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  #define YY_NO_INPUT 1
! #line 24 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  #ifdef HOST_GENERATOR_FILE
  #include "config.h"
  #define GENERATOR_FILE 1
*************** update_lineno (const char *l, size_t len
*** 1241,1247 ****
  }
  
  #line 1238 "gengtype-lex.cc"
! #line 59 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
      /* Include '::' in identifiers to capture C++ scope qualifiers.  */
  
  #line 1242 "gengtype-lex.cc"
--- 1241,1247 ----
  }
  
  #line 1238 "gengtype-lex.cc"
! #line 59 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
      /* Include '::' in identifiers to capture C++ scope qualifiers.  */
  
  #line 1242 "gengtype-lex.cc"
*************** YY_DECL
*** 1465,1471 ****
  		}
  
  	{
! #line 67 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  
    /* Do this on entry to yylex():  */
    *yylval = 0;
--- 1465,1471 ----
  		}
  
  	{
! #line 67 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  
    /* Do this on entry to yylex():  */
    *yylval = 0;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1537,1543 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 78 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return TYPEDEF;
--- 1537,1543 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 78 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return TYPEDEF;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1550,1556 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 82 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
--- 1550,1556 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 82 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1563,1569 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 86 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return UNION;
--- 1563,1569 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 86 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return UNION;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1576,1582 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 90 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
--- 1576,1582 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 90 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1589,1595 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 94 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return EXTERN;
--- 1589,1595 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 94 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return EXTERN;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1602,1608 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 98 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STATIC;
--- 1602,1608 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 98 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STATIC;
*************** YY_RULE_SETUP
*** 1613,1637 ****
  
  case 7:
  YY_RULE_SETUP
! #line 106 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { BEGIN(in_struct_comment); }
  	YY_BREAK
  case 8:
  /* rule 8 can match eol */
  YY_RULE_SETUP
! #line 107 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 9:
  /* rule 9 can match eol */
  YY_RULE_SETUP
! #line 109 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 10:
  /* rule 10 can match eol */
  YY_RULE_SETUP
! #line 110 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 11:
--- 1613,1637 ----
  
  case 7:
  YY_RULE_SETUP
! #line 106 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { BEGIN(in_struct_comment); }
  	YY_BREAK
  case 8:
  /* rule 8 can match eol */
  YY_RULE_SETUP
! #line 107 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 9:
  /* rule 9 can match eol */
  YY_RULE_SETUP
! #line 109 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 10:
  /* rule 10 can match eol */
  YY_RULE_SETUP
! #line 110 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 11:
*************** YY_LINENO_REWIND_TO(yy_bp + 5);
*** 1641,1647 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 112 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* don't care */
  	YY_BREAK
  case 12:
--- 1641,1647 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 112 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* don't care */
  	YY_BREAK
  case 12:
*************** case 12:
*** 1650,1666 ****
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 114 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 13:
  /* rule 13 can match eol */
! #line 115 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 14:
  /* rule 14 can match eol */
! #line 116 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 15:
  /* rule 15 can match eol */
  YY_RULE_SETUP
! #line 116 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
      *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
      return IGNORABLE_CXX_KEYWORD;
--- 1650,1666 ----
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 114 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 13:
  /* rule 13 can match eol */
! #line 115 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 14:
  /* rule 14 can match eol */
! #line 116 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 15:
  /* rule 15 can match eol */
  YY_RULE_SETUP
! #line 116 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
      *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
      return IGNORABLE_CXX_KEYWORD;
*************** YY_LINENO_REWIND_TO(yy_bp + 3);
*** 1673,1679 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 3;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 120 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return GTY_TOKEN; }
  	YY_BREAK
  case 17:
--- 1673,1679 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 3;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 120 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return GTY_TOKEN; }
  	YY_BREAK
  case 17:
*************** YY_LINENO_REWIND_TO(yy_bp + 5);
*** 1683,1689 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 121 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return UNION; }
  	YY_BREAK
  case 18:
--- 1683,1689 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 121 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return UNION; }
  	YY_BREAK
  case 18:
*************** YY_LINENO_REWIND_TO(yy_bp + 6);
*** 1693,1699 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 6;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 122 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 19:
--- 1693,1699 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 6;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 122 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 19:
*************** YY_LINENO_REWIND_TO(yy_bp + 5);
*** 1703,1709 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 123 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 20:
--- 1703,1709 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 123 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 20:
*************** YY_LINENO_REWIND_TO(yy_bp + 7);
*** 1713,1719 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 7;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 124 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return TYPEDEF; }
  	YY_BREAK
  case 21:
--- 1713,1719 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 7;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 124 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return TYPEDEF; }
  	YY_BREAK
  case 21:
*************** YY_LINENO_REWIND_TO(yy_bp + 4);
*** 1723,1729 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 125 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return ENUM; }
  	YY_BREAK
  case 22:
--- 1723,1729 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 125 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return ENUM; }
  	YY_BREAK
  case 22:
*************** YY_LINENO_REWIND_TO(yy_bp + 9);
*** 1733,1739 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 9;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 126 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return PTR_ALIAS; }
  	YY_BREAK
  case 23:
--- 1733,1739 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 9;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 126 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return PTR_ALIAS; }
  	YY_BREAK
  case 23:
*************** YY_LINENO_REWIND_TO(yy_bp + 10);
*** 1743,1749 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 10;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 127 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return NESTED_PTR; }
  	YY_BREAK
  case 24:
--- 1743,1749 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 10;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 127 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return NESTED_PTR; }
  	YY_BREAK
  case 24:
*************** YY_LINENO_REWIND_TO(yy_bp + 4);
*** 1753,1764 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 128 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return USER_GTY; }
  	YY_BREAK
  case 25:
  YY_RULE_SETUP
! #line 129 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return NUM;
--- 1753,1764 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 128 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return USER_GTY; }
  	YY_BREAK
  case 25:
  YY_RULE_SETUP
! #line 129 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return NUM;
*************** case 26:
*** 1770,1780 ****
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 135 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 27:
  /* rule 27 can match eol */
  YY_RULE_SETUP
! #line 135 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    size_t len;
  
--- 1770,1780 ----
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 135 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 27:
  /* rule 27 can match eol */
  YY_RULE_SETUP
! #line 135 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    size_t len;
  
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1793,1799 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 146 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return ID;
--- 1793,1799 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 146 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return ID;
*************** YY_RULE_SETUP
*** 1802,1808 ****
  case 29:
  /* rule 29 can match eol */
  YY_RULE_SETUP
! #line 151 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return STRING;
--- 1802,1808 ----
  case 29:
  /* rule 29 can match eol */
  YY_RULE_SETUP
! #line 151 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return STRING;
*************** YY_RULE_SETUP
*** 1812,1818 ****
  case 30:
  /* rule 30 can match eol */
  YY_RULE_SETUP
! #line 156 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return ARRAY;
--- 1812,1818 ----
  case 30:
  /* rule 30 can match eol */
  YY_RULE_SETUP
! #line 156 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return ARRAY;
*************** YY_RULE_SETUP
*** 1821,1827 ****
  case 31:
  /* rule 31 can match eol */
  YY_RULE_SETUP
! #line 160 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
    return CHAR;
--- 1821,1827 ----
  case 31:
  /* rule 31 can match eol */
  YY_RULE_SETUP
! #line 160 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
    return CHAR;
*************** YY_RULE_SETUP
*** 1829,1847 ****
  	YY_BREAK
  case 32:
  YY_RULE_SETUP
! #line 165 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return ELLIPSIS; }
  	YY_BREAK
  case 33:
  YY_RULE_SETUP
! #line 166 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { return yytext[0]; }
  	YY_BREAK
  /* ignore pp-directives */
  case 34:
  /* rule 34 can match eol */
  YY_RULE_SETUP
! #line 169 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    update_lineno (yytext, yyleng);
  }
--- 1829,1847 ----
  	YY_BREAK
  case 32:
  YY_RULE_SETUP
! #line 165 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return ELLIPSIS; }
  	YY_BREAK
  case 33:
  YY_RULE_SETUP
! #line 166 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { return yytext[0]; }
  	YY_BREAK
  /* ignore pp-directives */
  case 34:
  /* rule 34 can match eol */
  YY_RULE_SETUP
! #line 169 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    update_lineno (yytext, yyleng);
  }
*************** YY_RULE_SETUP
*** 1849,1860 ****
  case 35:
  /* rule 35 can match eol */
  YY_RULE_SETUP
! #line 172 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {lexer_line.line++;}
  	YY_BREAK
  case 36:
  YY_RULE_SETUP
! #line 174 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, "unexpected character `%s'", yytext);
  }
--- 1849,1860 ----
  case 35:
  /* rule 35 can match eol */
  YY_RULE_SETUP
! #line 172 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {lexer_line.line++;}
  	YY_BREAK
  case 36:
  YY_RULE_SETUP
! #line 174 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, "unexpected character `%s'", yytext);
  }
*************** YY_RULE_SETUP
*** 1862,1897 ****
  
  case 37:
  YY_RULE_SETUP
! #line 179 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { BEGIN(in_comment); }
  	YY_BREAK
  case 38:
  /* rule 38 can match eol */
  YY_RULE_SETUP
! #line 180 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 39:
  /* rule 39 can match eol */
  YY_RULE_SETUP
! #line 181 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 40:
! #line 183 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 41:
  /* rule 41 can match eol */
! #line 184 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 42:
  /* rule 42 can match eol */
  YY_RULE_SETUP
! #line 184 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 43:
  /* rule 43 can match eol */
  YY_RULE_SETUP
! #line 185 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 44:
--- 1862,1897 ----
  
  case 37:
  YY_RULE_SETUP
! #line 179 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { BEGIN(in_comment); }
  	YY_BREAK
  case 38:
  /* rule 38 can match eol */
  YY_RULE_SETUP
! #line 180 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 39:
  /* rule 39 can match eol */
  YY_RULE_SETUP
! #line 181 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 40:
! #line 183 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 41:
  /* rule 41 can match eol */
! #line 184 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 42:
  /* rule 42 can match eol */
  YY_RULE_SETUP
! #line 184 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 43:
  /* rule 43 can match eol */
  YY_RULE_SETUP
! #line 185 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 44:
*************** YY_LINENO_REWIND_TO(yy_bp + 1);
*** 1901,1921 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 186 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 45:
  /* rule 45 can match eol */
  YY_RULE_SETUP
! #line 189 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 46:
! #line 191 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 47:
  YY_RULE_SETUP
! #line 191 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 48:
--- 1901,1921 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 186 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 45:
  /* rule 45 can match eol */
  YY_RULE_SETUP
! #line 189 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 46:
! #line 191 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 47:
  YY_RULE_SETUP
! #line 191 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 48:
*************** YY_LINENO_REWIND_TO(yy_bp + 1);
*** 1925,1949 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 192 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 49:
  YY_RULE_SETUP
! #line 195 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { BEGIN(INITIAL); } 
  	YY_BREAK
  case 50:
  YY_RULE_SETUP
! #line 196 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  { BEGIN(in_struct); }
  	YY_BREAK
  case 51:
! #line 199 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  case 52:
  YY_RULE_SETUP
! #line 199 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, 
  		 "unterminated comment or string; unexpected EOF");
--- 1925,1949 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 192 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 49:
  YY_RULE_SETUP
! #line 195 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { BEGIN(INITIAL); } 
  	YY_BREAK
  case 50:
  YY_RULE_SETUP
! #line 196 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  { BEGIN(in_struct); }
  	YY_BREAK
  case 51:
! #line 199 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  case 52:
  YY_RULE_SETUP
! #line 199 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, 
  		 "unterminated comment or string; unexpected EOF");
*************** YY_RULE_SETUP
*** 1952,1963 ****
  case 53:
  /* rule 53 can match eol */
  YY_RULE_SETUP
! #line 204 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 54:
  YY_RULE_SETUP
! #line 206 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  YY_FATAL_ERROR( "flex scanner jammed" );
  	YY_BREAK
  #line 1958 "gengtype-lex.cc"
--- 1952,1963 ----
  case 53:
  /* rule 53 can match eol */
  YY_RULE_SETUP
! #line 204 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 54:
  YY_RULE_SETUP
! #line 206 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  YY_FATAL_ERROR( "flex scanner jammed" );
  	YY_BREAK
  #line 1958 "gengtype-lex.cc"
*************** void yyfree (void * ptr )
*** 2935,2941 ****
  
  #define YYTABLES_NAME "yytables"
  
! #line 206 "/home/rguenther/src/releases/gcc-14.3.0/gcc-14.3.0/gcc/gengtype-lex.l"
  
  
  void
--- 2935,2941 ----
  
  #define YYTABLES_NAME "yytables"
  
! #line 206 "/home/rguenther/src/releases/gcc-14.3.0-RC-20260619/gcc-14.3.0-RC-20260619/gcc/gengtype-lex.l"
  
  
  void
diff -Nrcpad gcc-14.3.0/gcc/gimple-fold.cc gcc-14.3.0-RC-20260619/gcc/gimple-fold.cc
*** gcc-14.3.0/gcc/gimple-fold.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-fold.cc	Fri Jun 19 06:51:02 2026
*************** gimple_fold_builtin_memory_op (gimple_st
*** 936,941 ****
--- 936,943 ----
  	}
        goto done;
      }
+   else if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    else
      {
        /* We cannot (easily) change the type of the copy if it is a storage
*************** gimple_fold_builtin_bcmp (gimple_stmt_it
*** 1377,1382 ****
--- 1379,1386 ----
    /* Transform bcmp (a, b, len) into memcmp (a, b, len).  */
  
    gimple *stmt = gsi_stmt (*gsi);
+   if (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    tree a = gimple_call_arg (stmt, 0);
    tree b = gimple_call_arg (stmt, 1);
    tree len = gimple_call_arg (stmt, 2);
*************** gimple_fold_builtin_bcopy (gimple_stmt_i
*** 1403,1408 ****
--- 1407,1414 ----
       len) into memmove (dest, src, len).  */
  
    gimple *stmt = gsi_stmt (*gsi);
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    tree src = gimple_call_arg (stmt, 0);
    tree dest = gimple_call_arg (stmt, 1);
    tree len = gimple_call_arg (stmt, 2);
*************** gimple_fold_builtin_bzero (gimple_stmt_i
*** 1428,1433 ****
--- 1434,1441 ----
    /* Transform bzero (dest, len) into memset (dest, 0, len).  */
  
    gimple *stmt = gsi_stmt (*gsi);
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    tree dest = gimple_call_arg (stmt, 0);
    tree len = gimple_call_arg (stmt, 1);
  
*************** gimple_fold_builtin_memset (gimple_stmt_
*** 1457,1462 ****
--- 1465,1473 ----
        return true;
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    if (! tree_fits_uhwi_p (len))
      return false;
  
*************** gimple_fold_builtin_memset (gimple_stmt_
*** 1479,1498 ****
    if ((!INTEGRAL_TYPE_P (etype)
         && !POINTER_TYPE_P (etype))
        || TREE_CODE (etype) == BITINT_TYPE)
!     return NULL_TREE;
  
    if (! var_decl_component_p (var))
!     return NULL_TREE;
  
    length = tree_to_uhwi (len);
    if (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (etype)) != length
        || (GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (etype))
  	  != GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (etype)))
        || get_pointer_alignment (dest) / BITS_PER_UNIT < length)
!     return NULL_TREE;
  
    if (length > HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT)
!     return NULL_TREE;
  
    if (!type_has_mode_precision_p (etype))
      etype = lang_hooks.types.type_for_mode (SCALAR_INT_TYPE_MODE (etype),
--- 1490,1509 ----
    if ((!INTEGRAL_TYPE_P (etype)
         && !POINTER_TYPE_P (etype))
        || TREE_CODE (etype) == BITINT_TYPE)
!     return false;
  
    if (! var_decl_component_p (var))
!     return false;
  
    length = tree_to_uhwi (len);
    if (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (etype)) != length
        || (GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (etype))
  	  != GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (etype)))
        || get_pointer_alignment (dest) / BITS_PER_UNIT < length)
!     return false;
  
    if (length > HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT)
!     return false;
  
    if (!type_has_mode_precision_p (etype))
      etype = lang_hooks.types.type_for_mode (SCALAR_INT_TYPE_MODE (etype),
*************** gimple_fold_builtin_strcpy (gimple_stmt_
*** 2106,2112 ****
        return false;
      }
  
!   if (!len)
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
--- 2117,2123 ----
        return false;
      }
  
!   if (!len || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
*************** gimple_fold_builtin_strncpy (gimple_stmt
*** 2181,2187 ****
  
    /* OK transform into builtin memcpy.  */
    tree fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
!   if (!fn)
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
--- 2192,2198 ----
  
    /* OK transform into builtin memcpy.  */
    tree fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
*************** gimple_fold_builtin_strchr (gimple_stmt_
*** 2235,2241 ****
        return true;
      }
  
!   if (!integer_zerop (c))
      return false;
  
    /* Transform strrchr (s, 0) to strchr (s, 0) when optimizing for size.  */
--- 2246,2252 ----
        return true;
      }
  
!   if (!integer_zerop (c) || (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Transform strrchr (s, 0) to strchr (s, 0) when optimizing for size.  */
*************** gimple_fold_builtin_strstr (gimple_stmt_
*** 2333,2338 ****
--- 2344,2352 ----
        return true;
      }
  
+   if (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* Transform strstr (x, "c") into strchr (x, 'c').  */
    if (q[1] == '\0')
      {
*************** gimple_fold_builtin_strcat (gimple_stmt_
*** 2385,2390 ****
--- 2399,2407 ----
    if (!optimize_bb_for_speed_p (gimple_bb (stmt)))
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* See if we can store by pieces into (dst + strlen(dst)).  */
    tree newdst;
    tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
*************** gimple_fold_builtin_strcat_chk (gimple_s
*** 2454,2460 ****
    tree fn;
    const char *p;
  
- 
    p = c_getstr (src);
    /* If the SRC parameter is "", return DEST.  */
    if (p && *p == '\0')
--- 2471,2476 ----
*************** gimple_fold_builtin_strcat_chk (gimple_s
*** 2466,2471 ****
--- 2482,2490 ----
    if (! tree_fits_uhwi_p (size) || ! integer_all_onesp (size))
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* If __builtin_strcat_chk is used, assume strcat is available.  */
    fn = builtin_decl_explicit (BUILT_IN_STRCAT);
    if (!fn)
*************** gimple_fold_builtin_strncat (gimple_stmt
*** 2556,2562 ****
  
    /* If the replacement _DECL isn't initialized, don't do the
       transformation.  */
!   if (!fn)
      return false;
  
    /* Otherwise, emit a call to strcat.  */
--- 2575,2581 ----
  
    /* If the replacement _DECL isn't initialized, don't do the
       transformation.  */
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Otherwise, emit a call to strcat.  */
*************** gimple_fold_builtin_strncat_chk (gimple_
*** 2588,2593 ****
--- 2607,2615 ----
        return true;
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    if (! integer_all_onesp (size))
      {
        tree src_len = c_strlen (src, 1);
*************** gimple_fold_builtin_string_compare (gimp
*** 2678,2683 ****
--- 2700,2708 ----
        return true;
      }
  
+   if (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* Initially set to the number of characters, including the terminating
       nul if each array has one.   LENx == strnlen (Sx, LENx) implies that
       the array Sx is not terminated by a nul.
*************** gimple_fold_builtin_fputs (gimple_stmt_i
*** 2970,2976 ****
  	const char *p = c_getstr (arg0);
  	if (p != NULL)
  	  {
! 	    if (!fn_fputc)
  	      return false;
  
  	    gimple *repl
--- 2995,3001 ----
  	const char *p = c_getstr (arg0);
  	if (p != NULL)
  	  {
! 	    if (!fn_fputc || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
  	      return false;
  
  	    gimple *repl
*************** gimple_fold_builtin_fputs (gimple_stmt_i
*** 2989,2995 ****
  	  return false;
  	/* New argument list transforming fputs(string, stream) to
  	   fwrite(string, 1, len, stream).  */
! 	if (!fn_fwrite)
  	  return false;
  
  	gimple *repl
--- 3014,3020 ----
  	  return false;
  	/* New argument list transforming fputs(string, stream) to
  	   fwrite(string, 1, len, stream).  */
! 	if (!fn_fwrite || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
  	  return false;
  
  	gimple *repl
*************** gimple_fold_builtin_memory_chk (gimple_s
*** 3040,3045 ****
--- 3065,3073 ----
  	}
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    tree maxlen = get_maxval_strlen (len, SRK_INT_VALUE);
    if (! integer_all_onesp (size)
        && !known_lower (stmt, len, size)
*************** gimple_fold_builtin_stxcpy_chk (gimple_s
*** 3138,3143 ****
--- 3166,3174 ----
        return true;
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    tree maxlen = get_maxval_strlen (src, SRK_STRLENMAX);
    if (! integer_all_onesp (size))
      {
*************** gimple_fold_builtin_stxncpy_chk (gimple_
*** 3231,3237 ****
    /* If __builtin_st{r,p}ncpy_chk is used, assume st{r,p}ncpy is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_STPNCPY_CHK && !ignore
  			      ? BUILT_IN_STPNCPY : BUILT_IN_STRNCPY);
!   if (!fn)
      return false;
  
    gcall *repl = gimple_build_call (fn, 3, dest, src, len);
--- 3262,3268 ----
    /* If __builtin_st{r,p}ncpy_chk is used, assume st{r,p}ncpy is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_STPNCPY_CHK && !ignore
  			      ? BUILT_IN_STPNCPY : BUILT_IN_STRNCPY);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    gcall *repl = gimple_build_call (fn, 3, dest, src, len);
*************** gimple_fold_builtin_stpcpy (gimple_stmt_
*** 3252,3257 ****
--- 3283,3291 ----
    tree src = gimple_call_arg (stmt, 1);
    tree fn, lenp1;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* If the result is unused, replace stpcpy with strcpy.  */
    if (gimple_call_lhs (stmt) == NULL_TREE)
      {
*************** gimple_fold_builtin_snprintf_chk (gimple
*** 3369,3375 ****
       available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSNPRINTF_CHK
  			      ? BUILT_IN_VSNPRINTF : BUILT_IN_SNPRINTF);
!   if (!fn)
      return false;
  
    /* Replace the called function and the first 5 argument by 3 retaining
--- 3403,3409 ----
       available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSNPRINTF_CHK
  			      ? BUILT_IN_VSNPRINTF : BUILT_IN_SNPRINTF);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Replace the called function and the first 5 argument by 3 retaining
*************** gimple_fold_builtin_sprintf_chk (gimple_
*** 3456,3462 ****
    /* If __builtin_{,v}sprintf_chk is used, assume {,v}sprintf is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSPRINTF_CHK
  			      ? BUILT_IN_VSPRINTF : BUILT_IN_SPRINTF);
!   if (!fn)
      return false;
  
    /* Replace the called function and the first 4 argument by 2 retaining
--- 3490,3496 ----
    /* If __builtin_{,v}sprintf_chk is used, assume {,v}sprintf is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSPRINTF_CHK
  			      ? BUILT_IN_VSPRINTF : BUILT_IN_SPRINTF);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Replace the called function and the first 4 argument by 2 retaining
*************** gimple_fold_builtin_sprintf (gimple_stmt
*** 3505,3511 ****
      return false;
  
    tree fn = builtin_decl_implicit (BUILT_IN_STRCPY);
!   if (!fn)
      return false;
  
    /* If the format doesn't contain % args or %%, use strcpy.  */
--- 3539,3545 ----
      return false;
  
    tree fn = builtin_decl_implicit (BUILT_IN_STRCPY);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* If the format doesn't contain % args or %%, use strcpy.  */
*************** gimple_fold_builtin_snprintf (gimple_stm
*** 3618,3624 ****
    tree orig = NULL_TREE;
    const char *fmt_str = NULL;
  
!   if (gimple_call_num_args (stmt) > 4)
      return false;
  
    if (gimple_call_num_args (stmt) == 4)
--- 3652,3659 ----
    tree orig = NULL_TREE;
    const char *fmt_str = NULL;
  
!   if (gimple_call_num_args (stmt) > 4
!       || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    if (gimple_call_num_args (stmt) == 4)
*************** gimple_fold_builtin_fprintf (gimple_stmt
*** 3776,3781 ****
--- 3811,3819 ----
    if (!init_target_chars ())
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* If the format doesn't contain % args or %%, use strcpy.  */
    if (strchr (fmt_str, target_percent) == NULL)
      {
*************** gimple_fold_builtin_printf (gimple_stmt_
*** 3855,3860 ****
--- 3893,3901 ----
    if (gimple_call_lhs (stmt) != NULL_TREE)
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* Check whether the format is a literal string constant.  */
    fmt_str = c_getstr (fmt);
    if (fmt_str == NULL)
*************** gimple_fold_builtin_realloc (gimple_stmt
*** 4096,4101 ****
--- 4137,4145 ----
    tree arg = gimple_call_arg (stmt, 0);
    tree size = gimple_call_arg (stmt, 1);
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    if (operand_equal_p (arg, null_pointer_node, 0))
      {
        tree fn_malloc = builtin_decl_implicit (BUILT_IN_MALLOC);
*************** fold_stmt_1 (gimple_stmt_iterator *gsi,
*** 6362,6374 ****
        gimple_seq seq = NULL;
        gimple_match_op res_op;
        if (gimple_simplify (stmt, &res_op, inplace ? NULL : &seq,
! 			   valueize, valueize))
! 	{
! 	  if (replace_stmt_with_simplification (gsi, &res_op, &seq, inplace))
! 	    changed = true;
! 	  else
! 	    gimple_seq_discard (seq);
! 	}
      }
  
    stmt = gsi_stmt (*gsi);
--- 6406,6416 ----
        gimple_seq seq = NULL;
        gimple_match_op res_op;
        if (gimple_simplify (stmt, &res_op, inplace ? NULL : &seq,
! 			   valueize, valueize)
! 	  && replace_stmt_with_simplification (gsi, &res_op, &seq, inplace))
! 	changed = true;
!       else
! 	gimple_seq_discard (seq);
      }
  
    stmt = gsi_stmt (*gsi);
*************** fold_nonarray_ctor_reference (tree type,
*** 8199,8208 ****
  	    {
  	      if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
  		return NULL_TREE;
- 	      const unsigned int encoding_size
- 		= GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (cfield)));
  	      if (BYTES_BIG_ENDIAN)
! 		inner_offset += encoding_size - wi::to_offset (field_size);
  	    }
  
  	  return fold_ctor_reference (type, cval,
--- 8241,8257 ----
  	    {
  	      if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
  		return NULL_TREE;
  	      if (BYTES_BIG_ENDIAN)
! 		{
! 		  tree ctype = TREE_TYPE (cfield);
! 		  unsigned int encoding_size;
! 		  if (TYPE_MODE (ctype) != BLKmode)
! 		    encoding_size
! 		      = GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (ctype));
! 		  else
! 		    encoding_size = TREE_INT_CST_LOW (TYPE_SIZE (ctype));
! 		  inner_offset += encoding_size - wi::to_offset (field_size);
! 		}
  	    }
  
  	  return fold_ctor_reference (type, cval,
*************** fold_const_aggregate_ref_1 (tree t, tree
*** 8400,8418 ****
        base = get_ref_base_and_extent (t, &offset, &size, &max_size, &reverse);
        ctor = get_base_constructor (base, &offset, valueize);
  
        /* Empty constructor.  Always fold to 0.  */
        if (ctor == error_mark_node)
  	return build_zero_cst (TREE_TYPE (t));
!       /* We do not know precise address.  */
        if (!known_size_p (max_size) || maybe_ne (max_size, size))
  	return NULL_TREE;
-       /* We cannot determine ctor.  */
-       if (!ctor)
- 	return NULL_TREE;
- 
        /* Out of bound array access.  Value is undefined, but don't fold.  */
        if (maybe_lt (offset, 0))
  	return NULL_TREE;
  
        tem = fold_ctor_reference (TREE_TYPE (t), ctor, offset, size, base);
        if (tem)
--- 8449,8469 ----
        base = get_ref_base_and_extent (t, &offset, &size, &max_size, &reverse);
        ctor = get_base_constructor (base, &offset, valueize);
  
+       /* We cannot determine ctor.  */
+       if (!ctor)
+ 	return NULL_TREE;
        /* Empty constructor.  Always fold to 0.  */
        if (ctor == error_mark_node)
  	return build_zero_cst (TREE_TYPE (t));
!       /* We do not know precise access.  */
        if (!known_size_p (max_size) || maybe_ne (max_size, size))
  	return NULL_TREE;
        /* Out of bound array access.  Value is undefined, but don't fold.  */
        if (maybe_lt (offset, 0))
  	return NULL_TREE;
+       /* Access with reverse storage order.  */
+       if (reverse)
+ 	return NULL_TREE;
  
        tem = fold_ctor_reference (TREE_TYPE (t), ctor, offset, size, base);
        if (tem)
*************** fold_const_aggregate_ref_1 (tree t, tree
*** 8432,8438 ****
  	      && offset.is_constant (&coffset)
  	      && (coffset % BITS_PER_UNIT != 0
  		  || csize % BITS_PER_UNIT != 0)
- 	      && !reverse
  	      && BYTES_BIG_ENDIAN == WORDS_BIG_ENDIAN)
  	    {
  	      poly_int64 bitoffset;
--- 8483,8488 ----
diff -Nrcpad gcc-14.3.0/gcc/gimple-isel.cc gcc-14.3.0-RC-20260619/gcc/gimple-isel.cc
*** gcc-14.3.0/gcc/gimple-isel.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-isel.cc	Fri Jun 19 06:51:02 2026
*************** gimple_expand_vec_set_extract_expr (stru
*** 101,106 ****
--- 101,116 ----
        tree pos = TREE_OPERAND (ref, 1);
  
        tree view_op0 = TREE_OPERAND (op0, 0);
+ 
+       tree idx = TREE_OPERAND (ref, 1);
+       // if index is a constant, then check the bounds
+       poly_uint64 idx_poly;
+       if (poly_int_tree_p (idx, &idx_poly))
+ 	{
+ 	  poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (TREE_TYPE (view_op0));
+ 	  if (known_gt (idx_poly, nelts))
+ 	    return false;
+ 	}
        machine_mode outermode = TYPE_MODE (TREE_TYPE (view_op0));
        machine_mode extract_mode = TYPE_MODE (TREE_TYPE (ref));
  
diff -Nrcpad gcc-14.3.0/gcc/gimple-lower-bitint.cc gcc-14.3.0-RC-20260619/gcc/gimple-lower-bitint.cc
*** gcc-14.3.0/gcc/gimple-lower-bitint.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-lower-bitint.cc	Fri Jun 19 06:51:02 2026
*************** enum bitint_prec_kind {
*** 76,82 ****
  /* Caches to speed up bitint_precision_kind.  */
  
  static int small_max_prec, mid_min_prec, large_min_prec, huge_min_prec;
! static int limb_prec;
  
  /* Categorize _BitInt(PREC) as small, middle, large or huge.  */
  
--- 76,82 ----
  /* Caches to speed up bitint_precision_kind.  */
  
  static int small_max_prec, mid_min_prec, large_min_prec, huge_min_prec;
! static int limb_prec, abi_limb_prec;
  
  /* Categorize _BitInt(PREC) as small, middle, large or huge.  */
  
*************** bitint_precision_kind (int prec)
*** 106,111 ****
--- 106,114 ----
      large_min_prec = MAX_FIXED_MODE_SIZE + 1;
    if (!limb_prec)
      limb_prec = GET_MODE_PRECISION (limb_mode);
+   if (!abi_limb_prec)
+     abi_limb_prec
+       = GET_MODE_PRECISION (as_a <scalar_int_mode> (info.abi_limb_mode));
    if (!huge_min_prec)
      {
        if (4 * limb_prec >= MAX_FIXED_MODE_SIZE)
*************** bitint_large_huge::handle_load (gimple *
*** 1851,1856 ****
--- 1854,1863 ----
    edge eh_edge = NULL;
    gimple *g;
  
+   if (TREE_CODE (rhs1) == BIT_FIELD_REF
+       && integer_zerop (TREE_OPERAND (rhs1, 2)))
+     rhs1 = TREE_OPERAND (rhs1, 0);
+ 
    if (eh)
      {
        edge_iterator ei;
*************** range_to_prec (tree op, gimple *stmt)
*** 2213,2219 ****
     from that precision, if it is negative, the operand is sign-extended
     from -*PREC.  If PREC_STORED is NULL, it is the toplevel call,
     otherwise *PREC_STORED is prec from the innermost call without
!    range optimizations.  */
  
  tree
  bitint_large_huge::handle_operand_addr (tree op, gimple *stmt,
--- 2220,2226 ----
     from that precision, if it is negative, the operand is sign-extended
     from -*PREC.  If PREC_STORED is NULL, it is the toplevel call,
     otherwise *PREC_STORED is prec from the innermost call without
!    range optimizations (0 for uninitialized SSA_NAME).  */
  
  tree
  bitint_large_huge::handle_operand_addr (tree op, gimple *stmt,
*************** bitint_large_huge::handle_operand_addr (
*** 2318,2324 ****
  	    {
  	      *prec = TYPE_UNSIGNED (TREE_TYPE (op)) ? limb_prec : -limb_prec;
  	      if (prec_stored)
! 		*prec_stored = *prec;
  	      tree var = create_tmp_var (m_limb_type);
  	      TREE_ADDRESSABLE (var) = 1;
  	      ret = build_fold_addr_expr (var);
--- 2325,2331 ----
  	    {
  	      *prec = TYPE_UNSIGNED (TREE_TYPE (op)) ? limb_prec : -limb_prec;
  	      if (prec_stored)
! 		*prec_stored = 0;
  	      tree var = create_tmp_var (m_limb_type);
  	      TREE_ADDRESSABLE (var) = 1;
  	      ret = build_fold_addr_expr (var);
*************** bitint_large_huge::handle_operand_addr (
*** 2346,2351 ****
--- 2353,2360 ----
  		  tree rhs_type = TREE_TYPE (rhs1);
  		  int prec_stored_val = 0;
  		  ret = handle_operand_addr (rhs1, g, &prec_stored_val, prec);
+ 		  if (prec_stored)
+ 		    *prec_stored = prec_stored_val;
  		  if (TYPE_PRECISION (lhs_type) > TYPE_PRECISION (rhs_type))
  		    {
  		      if (TYPE_UNSIGNED (lhs_type)
*************** bitint_large_huge::handle_operand_addr (
*** 2354,2360 ****
  		    }
  		  else
  		    {
! 		      if (*prec > 0 && *prec < TYPE_PRECISION (lhs_type))
  			;
  		      else if (TYPE_UNSIGNED (lhs_type))
  			{
--- 2363,2371 ----
  		    }
  		  else
  		    {
! 		      if (prec_stored_val == 0)
! 			/* Non-widening cast of uninitialized value.  */;
! 		      else if (*prec > 0 && *prec < TYPE_PRECISION (lhs_type))
  			;
  		      else if (TYPE_UNSIGNED (lhs_type))
  			{
*************** static unsigned int
*** 6066,6072 ****
  gimple_lower_bitint (void)
  {
    small_max_prec = mid_min_prec = large_min_prec = huge_min_prec = 0;
!   limb_prec = 0;
  
    unsigned int i;
    for (i = 0; i < num_ssa_names; ++i)
--- 6077,6083 ----
  gimple_lower_bitint (void)
  {
    small_max_prec = mid_min_prec = large_min_prec = huge_min_prec = 0;
!   limb_prec = abi_limb_prec = 0;
  
    unsigned int i;
    for (i = 0; i < num_ssa_names; ++i)
*************** gimple_lower_bitint (void)
*** 6586,6600 ****
  	      if (is_gimple_assign (SSA_NAME_DEF_STMT (s)))
  		switch (gimple_assign_rhs_code (SSA_NAME_DEF_STMT (s)))
  		  {
  		  case IMAGPART_EXPR:
  		    {
! 		      tree rhs1 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (s));
  		      rhs1 = TREE_OPERAND (rhs1, 0);
  		      if (TREE_CODE (rhs1) == SSA_NAME)
  			{
  			  gimple *g = SSA_NAME_DEF_STMT (rhs1);
  			  if (optimizable_arith_overflow (g))
! 			    continue;
  			}
  		    }
  		    /* FALLTHRU */
--- 6597,6658 ----
  	      if (is_gimple_assign (SSA_NAME_DEF_STMT (s)))
  		switch (gimple_assign_rhs_code (SSA_NAME_DEF_STMT (s)))
  		  {
+ 		  case REALPART_EXPR:
  		  case IMAGPART_EXPR:
  		    {
! 		      gimple *ds = SSA_NAME_DEF_STMT (s);
! 		      tree rhs1 = gimple_assign_rhs1 (ds);
  		      rhs1 = TREE_OPERAND (rhs1, 0);
  		      if (TREE_CODE (rhs1) == SSA_NAME)
  			{
  			  gimple *g = SSA_NAME_DEF_STMT (rhs1);
  			  if (optimizable_arith_overflow (g))
! 			    {
! 			      if (gimple_assign_rhs_code (ds) == IMAGPART_EXPR)
! 				continue;
! 			      if (gimple_store_p (use_stmt))
! 				{
! 				  /* Punt if the cast use of IMAGPART_EXPR stmt
! 				     appears before the store use_stmt, because
! 				     optimizable arith overflow can't be
! 				     lowered at the store location in that case.
! 				     See PR121828.  */
! 				  gimple_stmt_iterator gsi
! 				    = gsi_for_stmt (use_stmt);
! 				  unsigned int cnt = 0;
! 				  do
! 				    {
! 				      gsi_prev_nondebug (&gsi);
! 				      if (gsi_end_p (gsi))
! 					break;
! 				      gimple *g2 = gsi_stmt (gsi);
! 				      if (g2 == ds)
! 					break;
! 				      if (++cnt == 64)
! 					break;
! 				      if (!gimple_assign_cast_p (g2))
! 					continue;
! 				      tree rhs2 = gimple_assign_rhs1 (g2);
! 				      if (TREE_CODE (rhs2) != SSA_NAME)
! 					continue;
! 				      gimple *g3 = SSA_NAME_DEF_STMT (rhs2);
! 				      if (!is_gimple_assign (g3))
! 					continue;
! 				      if (gimple_assign_rhs_code (g3)
! 					  != IMAGPART_EXPR)
! 					continue;
! 				      rhs2 = gimple_assign_rhs1 (g3);
! 				      rhs2 = TREE_OPERAND (rhs2, 0);
! 				      if (rhs2 != rhs1)
! 					continue;
! 				      cnt = 64;
! 				      break;
! 				    }
! 				  while (1);
! 				  if (cnt == 64)
! 				    break;
! 				}
! 			    }
  			}
  		    }
  		    /* FALLTHRU */
*************** gimple_lower_bitint (void)
*** 6604,6610 ****
  		  case TRUNC_DIV_EXPR:
  		  case TRUNC_MOD_EXPR:
  		  case FIX_TRUNC_EXPR:
- 		  case REALPART_EXPR:
  		    if (gimple_store_p (use_stmt)
  			&& is_gimple_assign (use_stmt)
  			&& !gimple_has_volatile_ops (use_stmt)
--- 6662,6667 ----
*************** gimple_lower_bitint (void)
*** 7024,7030 ****
  		       from smaller number.  */
  		    min_prec = prec;
  		  else
! 		    min_prec = CEIL (min_prec, limb_prec) * limb_prec;
  		  if (min_prec == 0)
  		    c = NULL_TREE;
  		  else if (min_prec == prec)
--- 7081,7100 ----
  		       from smaller number.  */
  		    min_prec = prec;
  		  else
! 		    {
! 		      min_prec = CEIL (min_prec, limb_prec) * limb_prec;
! 		      if (min_prec > (unsigned) limb_prec
! 			  && abi_limb_prec > limb_prec)
! 			{
! 			  /* For targets with ABI limb precision higher than
! 			     limb precision round to ABI limb precision,
! 			     otherwise c can contain padding bits.  */
! 			  min_prec
! 			    = CEIL (min_prec, abi_limb_prec) * abi_limb_prec;
! 			  if (min_prec > prec - rem - 2 * limb_prec)
! 			    min_prec = prec;
! 			}
! 		    }
  		  if (min_prec == 0)
  		    c = NULL_TREE;
  		  else if (min_prec == prec)
*************** gimple_lower_bitint (void)
*** 7065,7070 ****
--- 7135,7145 ----
  							   vtype, c));
  			}
  		      gsi_insert_on_edge (e, g);
+ 		      if (min_prec == prec)
+ 			{
+ 			  edge_insertions = true;
+ 			  break;
+ 			}
  		    }
  		  if (ext == 0)
  		    {
diff -Nrcpad gcc-14.3.0/gcc/gimple-match-head.cc gcc-14.3.0-RC-20260619/gcc/gimple-match-head.cc
*** gcc-14.3.0/gcc/gimple-match-head.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-match-head.cc	Fri Jun 19 06:51:02 2026
*************** optimize_vectors_before_lowering_p ()
*** 135,140 ****
--- 135,150 ----
    return !cfun || (cfun->curr_properties & PROP_gimple_lvec) == 0;
  }
  
+ /* Returns true if the expression T has no side effects
+    including not trapping. */
+ static inline bool
+ expr_no_side_effects_p (tree t)
+ {
+   /* For gimple, there should only be gimple val's here. */
+   gcc_assert (is_gimple_val (t));
+   return true;
+ }
+ 
  /* Return true if pow(cst, x) should be optimized into exp(log(cst) * x).
     As a workaround for SPEC CPU2017 628.pop2_s, don't do it if arg0
     is an exact integer, arg1 = phi_res +/- cst1 and phi_res = PHI <cst2, ...>
diff -Nrcpad gcc-14.3.0/gcc/gimple-range-fold.cc gcc-14.3.0-RC-20260619/gcc/gimple-range-fold.cc
*** gcc-14.3.0/gcc/gimple-range-fold.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-range-fold.cc	Fri Jun 19 06:51:02 2026
*************** fold_using_range::relation_fold_and_or (
*** 1174,1180 ****
      return;
  
    if (reverse_op2)
!     relation2 = relation_negate (relation2);
  
    // x && y is false if the relation intersection of the true cases is NULL.
    if (is_and && relation_intersect (relation1, relation2) == VREL_UNDEFINED)
--- 1174,1180 ----
      return;
  
    if (reverse_op2)
!     relation2 = relation_swap (relation2);
  
    // x && y is false if the relation intersection of the true cases is NULL.
    if (is_and && relation_intersect (relation1, relation2) == VREL_UNDEFINED)
diff -Nrcpad gcc-14.3.0/gcc/gimple-range-gori.cc gcc-14.3.0-RC-20260619/gcc/gimple-range-gori.cc
*** gcc-14.3.0/gcc/gimple-range-gori.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-range-gori.cc	Fri Jun 19 06:51:02 2026
*************** gori_map::exports (basic_block bb)
*** 383,388 ****
--- 383,410 ----
    return m_outgoing[bb->index];
  }
  
+ // Return the bitmap vector of all exports AND their dependencies from BB
+ // in TMPBIT.  Calculate if necessary.  Return TMPBIT.
+ 
+ bitmap
+ gori_map::exports_and_deps (basic_block bb, bitmap tmpbit)
+ {
+   if (bb->index >= (signed int)m_outgoing.length () || !m_outgoing[bb->index])
+     calculate_gori (bb);
+   bitmap_copy (tmpbit, m_outgoing[bb->index]);
+   if (!bitmap_empty_p (tmpbit))
+     {
+       tree name;
+       FOR_EACH_GORI_EXPORT_NAME (*this, bb, name)
+ 	{
+ 	  bitmap dep = get_def_chain (name);
+ 	  if (dep)
+ 	    bitmap_ior_into (tmpbit, dep);
+ 	}
+     }
+   return tmpbit;
+ }
+ 
  // Return the bitmap vector of all imports to BB.  Calculate if necessary.
  
  bitmap
diff -Nrcpad gcc-14.3.0/gcc/gimple-range-gori.h gcc-14.3.0-RC-20260619/gcc/gimple-range-gori.h
*** gcc-14.3.0/gcc/gimple-range-gori.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-range-gori.h	Fri Jun 19 06:51:02 2026
*************** public:
*** 99,104 ****
--- 99,105 ----
    bool is_export_p (tree name, basic_block bb = NULL);
    bool is_import_p (tree name, basic_block bb);
    bitmap exports (basic_block bb);
+   bitmap exports_and_deps (basic_block bb, bitmap tmpbit);
    bitmap imports (basic_block bb);
    void set_range_invariant (tree name, bool invariant = true);
  
*************** bool gori_on_edge (class ssa_cache &r, e
*** 224,230 ****
  bool gori_name_on_edge (vrange &r, tree name, edge e, range_query *q = NULL);
  
  // For each name that is an import into BB's exports..
! #define FOR_EACH_GORI_IMPORT_NAME(gori, bb, name)			\
    for (gori_export_iterator iter ((gori).imports ((bb)));	\
         ((name) = iter.get_name ());				\
         iter.next ())
--- 225,231 ----
  bool gori_name_on_edge (vrange &r, tree name, edge e, range_query *q = NULL);
  
  // For each name that is an import into BB's exports..
! #define FOR_EACH_GORI_IMPORT_NAME(gori, bb, name)		\
    for (gori_export_iterator iter ((gori).imports ((bb)));	\
         ((name) = iter.get_name ());				\
         iter.next ())
*************** bool gori_name_on_edge (vrange &r, tree
*** 235,240 ****
--- 236,247 ----
         ((name) = iter.get_name ());				\
         iter.next ())
  
+ // For each name and all their dependencies possibly exported from block BB.
+ #define FOR_EACH_GORI_EXPORT_AND_DEP_NAME(gori, bb, name, bm)	   \
+   for (gori_export_iterator iter ((gori).exports_and_deps ((bb),(bm))); \
+        ((name) = iter.get_name ());					   \
+        iter.next ())
+ 
  // Used to assist with iterating over the GORI export list in various ways
  class gori_export_iterator {
  public:
diff -Nrcpad gcc-14.3.0/gcc/gimple-range-op.cc gcc-14.3.0-RC-20260619/gcc/gimple-range-op.cc
*** gcc-14.3.0/gcc/gimple-range-op.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-range-op.cc	Fri Jun 19 06:51:02 2026
*************** gimple_range_op_handler::maybe_non_stand
*** 1164,1200 ****
    gcc_checking_assert (signed_op);
    range_op_handler unsigned_op (OP_WIDEN_MULT_UNSIGNED);
    gcc_checking_assert (unsigned_op);
  
    if (gimple_code (m_stmt) == GIMPLE_ASSIGN)
      switch (gimple_assign_rhs_code (m_stmt))
        {
  	case WIDEN_MULT_EXPR:
- 	{
  	  m_op1 = gimple_assign_rhs1 (m_stmt);
  	  m_op2 = gimple_assign_rhs2 (m_stmt);
! 	  tree ret = gimple_assign_lhs (m_stmt);
! 	  bool signed1 = TYPE_SIGN (TREE_TYPE (m_op1)) == SIGNED;
! 	  bool signed2 = TYPE_SIGN (TREE_TYPE (m_op2)) == SIGNED;
! 	  bool signed_ret = TYPE_SIGN (TREE_TYPE (ret)) == SIGNED;
! 
! 	  /* Normally these operands should all have the same sign, but
! 	     some passes and violate this by taking mismatched sign args.  At
! 	     the moment the only one that's possible is mismatch inputs and
! 	     unsigned output.  Once ranger supports signs for the operands we
! 	     can properly fix it,  for now only accept the case we can do
! 	     correctly.  */
! 	  if ((signed1 ^ signed2) && signed_ret)
! 	    return;
! 
! 	  if (signed2 && !signed1)
! 	    std::swap (m_op1, m_op2);
  
! 	  if (signed1 || signed2)
  	    m_operator = signed_op.range_op ();
  	  else
  	    m_operator = unsigned_op.range_op ();
  	  break;
! 	}
  	default:
  	  break;
        }
--- 1164,1194 ----
    gcc_checking_assert (signed_op);
    range_op_handler unsigned_op (OP_WIDEN_MULT_UNSIGNED);
    gcc_checking_assert (unsigned_op);
+   range_op_handler signed_unsigned_op (OP_WIDEN_MULT_SIGNED_UNSIGNED);
+   gcc_checking_assert (signed_unsigned_op);
+   bool signed1, signed2;
  
    if (gimple_code (m_stmt) == GIMPLE_ASSIGN)
      switch (gimple_assign_rhs_code (m_stmt))
        {
  	case WIDEN_MULT_EXPR:
  	  m_op1 = gimple_assign_rhs1 (m_stmt);
  	  m_op2 = gimple_assign_rhs2 (m_stmt);
! 	  signed1 = TYPE_SIGN (TREE_TYPE (m_op1)) == SIGNED;
! 	  signed2 = TYPE_SIGN (TREE_TYPE (m_op2)) == SIGNED;
  
! 	  if (signed1 != signed2)
! 	    {
! 	      if (signed2 && !signed1)
! 		std::swap (m_op1, m_op2);
! 	      m_operator = signed_unsigned_op.range_op ();
! 	    }
! 	  else if (signed1)
  	    m_operator = signed_op.range_op ();
  	  else
  	    m_operator = unsigned_op.range_op ();
  	  break;
! 
  	default:
  	  break;
        }
*************** gimple_range_op_handler::maybe_builtin_c
*** 1220,1225 ****
--- 1214,1221 ----
    switch (func)
      {
      case CFN_BUILT_IN_CONSTANT_P:
+       if (gimple_call_num_args (call) != 1)
+ 	return;
        m_op1 = gimple_call_arg (call, 0);
        if (irange::supports_p (TREE_TYPE (m_op1)))
  	m_operator = &op_cfn_constant_p;
*************** gimple_range_op_handler::maybe_builtin_c
*** 1228,1233 ****
--- 1224,1231 ----
        break;
  
      CASE_FLT_FN (CFN_BUILT_IN_SIGNBIT):
+       if (gimple_call_num_args (call) != 1)
+ 	return;
        m_op1 = gimple_call_arg (call, 0);
        m_operator = &op_cfn_signbit;
        break;
*************** gimple_range_op_handler::maybe_builtin_c
*** 1358,1364 ****
      default:
        {
  	unsigned arg;
! 	if (gimple_call_fnspec (call).returns_arg (&arg) && arg == 0)
  	  {
  	    m_op1 = gimple_call_arg (call, 0);
  	    m_operator = &op_cfn_pass_through_arg1;
--- 1356,1364 ----
      default:
        {
  	unsigned arg;
! 	if (gimple_call_fnspec (call).returns_arg (&arg)
! 	    && arg == 0
! 	    && gimple_call_num_args (call) > 0)
  	  {
  	    m_op1 = gimple_call_arg (call, 0);
  	    m_operator = &op_cfn_pass_through_arg1;
diff -Nrcpad gcc-14.3.0/gcc/gimple-ssa-isolate-paths.cc gcc-14.3.0-RC-20260619/gcc/gimple-ssa-isolate-paths.cc
*** gcc-14.3.0/gcc/gimple-ssa-isolate-paths.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-ssa-isolate-paths.cc	Fri Jun 19 06:51:02 2026
*************** handle_return_addr_local_phi_arg (basic_
*** 641,647 ****
        if (!return_stmt)
  	continue;
  
!       if (gimple_return_retval (return_stmt) != lhs)
  	continue;
  
        /* Add an entry for the return statement and the locations
--- 641,648 ----
        if (!return_stmt)
  	continue;
  
!       if (gimple_return_retval (return_stmt) != lhs
! 	  || !dominated_by_p (CDI_DOMINATORS, gimple_bb (use_stmt), bb))
  	continue;
  
        /* Add an entry for the return statement and the locations
*************** find_implicit_erroneous_behavior (void)
*** 715,738 ****
   	 is then dereferenced within BB.  This is somewhat overly
  	 conservative, but probably catches most of the interesting
  	 cases.   */
        for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
  	{
  	  gphi *phi = si.phi ();
  	  tree lhs = gimple_phi_result (phi);
  
- 	  /* Initial number of PHI arguments.  The result may change
- 	     from one iteration of the loop below to the next in
- 	     response to changes to the CFG but only the initial
- 	     value is stored below for use by diagnostics.  */
- 	  unsigned nargs = gimple_phi_num_args (phi);
- 
  	  /* PHI produces a pointer result.  See if any of the PHI's
  	     arguments are NULL.
  
  	     When we remove an edge, we want to reprocess the current
  	     index since the argument at that index will have been
  	     removed, hence the ugly way we update I for each iteration.  */
- 	  basic_block duplicate = NULL;
  	  for (unsigned i = 0, next_i = 0;
  	       i < gimple_phi_num_args (phi); i = next_i)
  	    {
--- 716,733 ----
   	 is then dereferenced within BB.  This is somewhat overly
  	 conservative, but probably catches most of the interesting
  	 cases.   */
+       basic_block duplicate = NULL;
        for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
  	{
  	  gphi *phi = si.phi ();
  	  tree lhs = gimple_phi_result (phi);
  
  	  /* PHI produces a pointer result.  See if any of the PHI's
  	     arguments are NULL.
  
  	     When we remove an edge, we want to reprocess the current
  	     index since the argument at that index will have been
  	     removed, hence the ugly way we update I for each iteration.  */
  	  for (unsigned i = 0, next_i = 0;
  	       i < gimple_phi_num_args (phi); i = next_i)
  	    {
*************** find_implicit_erroneous_behavior (void)
*** 742,756 ****
  	      /* Advance the argument index unless a path involving
  		 the current argument has been isolated.  */
  	      next_i = i + 1;
- 	      bool isolated = false;
- 	      duplicate = handle_return_addr_local_phi_arg (bb, duplicate, lhs,
- 							    arg, e, locmap,
- 							    nargs, &isolated);
- 	      if (isolated)
- 		{
- 		  cfg_altered = true;
- 		  next_i = i;
- 		}
  
  	      if (!integer_zerop (arg))
  		continue;
--- 737,742 ----
*************** find_implicit_erroneous_behavior (void)
*** 788,793 ****
--- 774,821 ----
  		}
  	    }
  	}
+ 
+       /* Then look for a PHI which have addresses of locals that
+ 	 are then returned.  */
+       duplicate = NULL;
+       for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
+ 	{
+ 	  gphi *phi = si.phi ();
+ 	  tree lhs = gimple_phi_result (phi);
+ 
+ 	  /* Initial number of PHI arguments.  The result may change
+ 	     from one iteration of the loop below to the next in
+ 	     response to changes to the CFG but only the initial
+ 	     value is stored below for use by diagnostics.  */
+ 	  unsigned nargs = gimple_phi_num_args (phi);
+ 
+ 	  /* PHI produces a pointer result.  See if any of the PHI's
+ 	     arguments are NULL.
+ 
+ 	     When we remove an edge, we want to reprocess the current
+ 	     index since the argument at that index will have been
+ 	     removed, hence the ugly way we update I for each iteration.  */
+ 	  for (unsigned i = 0, next_i = 0;
+ 	       i < gimple_phi_num_args (phi); i = next_i)
+ 	    {
+ 	      tree arg = gimple_phi_arg_def (phi, i);
+ 	      edge e = gimple_phi_arg_edge (phi, i);
+ 
+ 	      /* Advance the argument index unless a path involving
+ 		 the current argument has been isolated.  */
+ 	      next_i = i + 1;
+ 	      bool isolated = false;
+ 	      duplicate = handle_return_addr_local_phi_arg (bb, duplicate, lhs,
+ 							    arg, e, locmap,
+ 							    nargs, &isolated);
+ 	      if (isolated)
+ 		{
+ 		  cfg_altered = true;
+ 		  next_i = i;
+ 		}
+ 	    }
+ 	}
+ 
      }
  
    diag_returned_locals (false, locmap);
diff -Nrcpad gcc-14.3.0/gcc/gimple-ssa-store-merging.cc gcc-14.3.0-RC-20260619/gcc/gimple-ssa-store-merging.cc
*** gcc-14.3.0/gcc/gimple-ssa-store-merging.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple-ssa-store-merging.cc	Fri Jun 19 06:51:02 2026
*************** find_bswap_or_nop (gimple *stmt, struct
*** 1057,1062 ****
--- 1057,1064 ----
  		      if (count <= range / BITS_PER_MARKER)
  			{
  			  count = (count + i) * BITS_PER_MARKER % range;
+ 			  if (!count)
+ 			    return NULL;
  			  break;
  			}
  		      else
diff -Nrcpad gcc-14.3.0/gcc/gimple.h gcc-14.3.0-RC-20260619/gcc/gimple.h
*** gcc-14.3.0/gcc/gimple.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimple.h	Fri Jun 19 06:51:02 2026
*************** struct GTY((tag("GSS_ASSUME")))
*** 864,870 ****
     tell the runtime that it should begin the transaction in
     serial-irrevocable mode.  */
  #define GTMA_DOES_GO_IRREVOCABLE	(1u << 6)
! /* The transaction contains no instrumentation code whatsover, most
     likely because it is guaranteed to go irrevocable upon entry.  */
  #define GTMA_HAS_NO_INSTRUMENTATION	(1u << 7)
  
--- 864,870 ----
     tell the runtime that it should begin the transaction in
     serial-irrevocable mode.  */
  #define GTMA_DOES_GO_IRREVOCABLE	(1u << 6)
! /* The transaction contains no instrumentation code whatsoever, most
     likely because it is guaranteed to go irrevocable upon entry.  */
  #define GTMA_HAS_NO_INSTRUMENTATION	(1u << 7)
  
diff -Nrcpad gcc-14.3.0/gcc/gimplify-me.cc gcc-14.3.0-RC-20260619/gcc/gimplify-me.cc
*** gcc-14.3.0/gcc/gimplify-me.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimplify-me.cc	Fri Jun 19 06:51:02 2026
*************** gimple_regimplify_operands (gimple *stmt
*** 232,240 ****
  	  else if (i == 2
  		   && gimple_assign_single_p (stmt)
  		   && num_ops == 2)
! 	    gimplify_expr (&op, &pre, NULL,
! 			   rhs_predicate_for (gimple_assign_lhs (stmt)),
! 			   fb_rvalue);
  	  else if (i == 2 && is_gimple_call (stmt))
  	    {
  	      if (TREE_CODE (op) == FUNCTION_DECL)
--- 232,244 ----
  	  else if (i == 2
  		   && gimple_assign_single_p (stmt)
  		   && num_ops == 2)
! 	    {
! 	      if (gimple_clobber_p (stmt))
! 		continue;
! 	      gimplify_expr (&op, &pre, NULL,
! 			     rhs_predicate_for (gimple_assign_lhs (stmt)),
! 			     fb_rvalue);
! 	    }
  	  else if (i == 2 && is_gimple_call (stmt))
  	    {
  	      if (TREE_CODE (op) == FUNCTION_DECL)
*************** gimple_regimplify_operands (gimple *stmt
*** 253,260 ****
  	{
  	  bool need_temp = false;
  
! 	  if (gimple_assign_single_p (stmt)
! 	      && num_ops == 2)
  	    gimplify_expr (gimple_assign_rhs1_ptr (stmt), &pre, NULL,
  			   rhs_predicate_for (gimple_assign_lhs (stmt)),
  			   fb_rvalue);
--- 257,265 ----
  	{
  	  bool need_temp = false;
  
! 	  if (gimple_clobber_p (stmt))
! 	    ;
! 	  else if (gimple_assign_single_p (stmt) && num_ops == 2)
  	    gimplify_expr (gimple_assign_rhs1_ptr (stmt), &pre, NULL,
  			   rhs_predicate_for (gimple_assign_lhs (stmt)),
  			   fb_rvalue);
diff -Nrcpad gcc-14.3.0/gcc/gimplify.cc gcc-14.3.0-RC-20260619/gcc/gimplify.cc
*** gcc-14.3.0/gcc/gimplify.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/gimplify.cc	Fri Jun 19 06:51:02 2026
*************** gimplify_call_expr (tree *expr_p, gimple
*** 3874,3879 ****
--- 3874,3899 ----
  	  *expr_p = NULL_TREE;
  	  return GS_ALL_DONE;
  	}
+       else if (ifn == IFN_UBSAN_BOUNDS
+ 	       && nargs == 3
+ 	       && integer_onep (CALL_EXPR_ARG (*expr_p, 0)))
+ 	{
+ 	  /* If first argument is one, add TYPE_MAX_VALUE (TYPE_DOMAIN (t))
+ 	     to 3rd argument and change first argument to 0.  This is
+ 	     done by ubsan_instrument_bounds so that we can use the
+ 	     max value from gimplify_type_sizes here instead of original
+ 	     expression for VLAs.  */
+ 	  tree type = TREE_TYPE (CALL_EXPR_ARG (*expr_p, 0));
+ 	  CALL_EXPR_ARG (*expr_p, 0) = build_int_cst (type, 0);
+ 	  gcc_assert (TREE_CODE (type) == POINTER_TYPE);
+ 	  type = TREE_TYPE (type);
+ 	  gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
+ 	  tree maxv = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
+ 	  gcc_assert (maxv);
+ 	  tree arg3 = CALL_EXPR_ARG (*expr_p, 2);
+ 	  CALL_EXPR_ARG (*expr_p, 2)
+ 	    = fold_build2 (PLUS_EXPR, TREE_TYPE (arg3), maxv, arg3);
+ 	}
  
        for (i = 0; i < nargs; i++)
  	{
diff -Nrcpad gcc-14.3.0/gcc/glimits.h gcc-14.3.0-RC-20260619/gcc/glimits.h
*** gcc-14.3.0/gcc/glimits.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/glimits.h	Fri Jun 19 06:51:02 2026
*************** see the files COPYING3 and COPYING.RUNTI
*** 162,168 ****
  #  define BITINT_MAXWIDTH __BITINT_MAXWIDTH__
  # endif
  
! # define __STDC_VERSION_LIMITS_H__	202311L
  #endif
  
  #endif /* _LIMITS_H___ */
--- 162,170 ----
  #  define BITINT_MAXWIDTH __BITINT_MAXWIDTH__
  # endif
  
! # ifndef __STDC_VERSION_LIMITS_H__
! #  define __STDC_VERSION_LIMITS_H__	202311L
! # endif
  #endif
  
  #endif /* _LIMITS_H___ */
diff -Nrcpad gcc-14.3.0/gcc/ifcvt.cc gcc-14.3.0-RC-20260619/gcc/ifcvt.cc
*** gcc-14.3.0/gcc/ifcvt.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ifcvt.cc	Fri Jun 19 06:51:02 2026
*************** noce_emit_store_flag (struct noce_if_inf
*** 890,895 ****
--- 890,899 ----
    if (cond_complex || !SCALAR_INT_MODE_P (GET_MODE (x)))
      return NULL_RTX;
  
+   /* Don't try if mode of X is more than the max fixed mode size.  */
+   if (known_le (MAX_FIXED_MODE_SIZE, GET_MODE_BITSIZE (GET_MODE (x))))
+     return NULL_RTX;
+ 
    return emit_store_flag (x, code, XEXP (cond, 0),
  			  XEXP (cond, 1), VOIDmode,
  			  (code == LTU || code == LEU
*************** find_if_header (basic_block test_bb, int
*** 4926,4932 ****
        && cond_exec_find_if_block (&ce_info))
      goto success;
  
!   if (targetm.have_trap ()
        && optab_handler (ctrap_optab, word_mode) != CODE_FOR_nothing
        && find_cond_trap (test_bb, then_edge, else_edge))
      goto success;
--- 4930,4936 ----
        && cond_exec_find_if_block (&ce_info))
      goto success;
  
!   if (!reload_completed && targetm.have_trap ()
        && optab_handler (ctrap_optab, word_mode) != CODE_FOR_nothing
        && find_cond_trap (test_bb, then_edge, else_edge))
      goto success;
diff -Nrcpad gcc-14.3.0/gcc/input.cc gcc-14.3.0-RC-20260619/gcc/input.cc
*** gcc-14.3.0/gcc/input.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/input.cc	Fri Jun 19 06:51:02 2026
*************** public:
*** 120,129 ****
    unsigned m_use_count;
  
    /* The file_path is the key for identifying a particular file in
!      the cache.
!      For libcpp-using code, the underlying buffer for this field is
!      owned by the corresponding _cpp_file within the cpp_reader.  */
!   const char *m_file_path;
  
    FILE *m_fp;
  
--- 120,127 ----
    unsigned m_use_count;
  
    /* The file_path is the key for identifying a particular file in
!      the cache.  This copy is owned by the slot.  */
!   char *m_file_path;
  
    FILE *m_fp;
  
*************** file_cache::missing_trailing_newline_p (
*** 367,372 ****
--- 365,371 ----
  void
  file_cache_slot::evict ()
  {
+   free (m_file_path);
    m_file_path = NULL;
    if (m_fp)
      fclose (m_fp);
*************** file_cache_slot::create (const file_cach
*** 462,468 ****
  			 const char *file_path, FILE *fp,
  			 unsigned highest_use_count)
  {
!   m_file_path = file_path;
    if (m_fp)
      fclose (m_fp);
    m_fp = fp;
--- 461,467 ----
  			 const char *file_path, FILE *fp,
  			 unsigned highest_use_count)
  {
!   m_file_path = file_path ? xstrdup (file_path) : nullptr;
    if (m_fp)
      fclose (m_fp);
    m_fp = fp;
*************** file_cache_slot::file_cache_slot ()
*** 556,561 ****
--- 555,561 ----
  
  file_cache_slot::~file_cache_slot ()
  {
+   free (m_file_path);
    if (m_fp)
      {
        fclose (m_fp);
diff -Nrcpad gcc-14.3.0/gcc/ipa-cp.cc gcc-14.3.0-RC-20260619/gcc/ipa-cp.cc
*** gcc-14.3.0/gcc/ipa-cp.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ipa-cp.cc	Fri Jun 19 06:51:02 2026
*************** initialize_node_lattices (struct cgraph_
*** 1323,1332 ****
        int caller_count = 0;
        node->call_for_symbol_thunks_and_aliases (count_callers, &caller_count,
  						true);
-       gcc_checking_assert (caller_count > 0);
        if (caller_count == 1)
  	node->call_for_symbol_thunks_and_aliases (set_single_call_flag,
  						  NULL, true);
      }
    else
      {
--- 1323,1336 ----
        int caller_count = 0;
        node->call_for_symbol_thunks_and_aliases (count_callers, &caller_count,
  						true);
        if (caller_count == 1)
  	node->call_for_symbol_thunks_and_aliases (set_single_call_flag,
  						  NULL, true);
+       else if (caller_count == 0)
+ 	{
+ 	  gcc_checking_assert (!opt_for_fn (node->decl, flag_toplevel_reorder));
+ 	  variable = true;
+ 	}
      }
    else
      {
*************** self_recursive_pass_through_p (cgraph_ed
*** 5276,5284 ****
  			       bool simple = true)
  {
    enum availability availability;
!   if (cs->caller == cs->callee->function_symbol (&availability)
        && availability > AVAIL_INTERPOSABLE
-       && jfunc->type == IPA_JF_PASS_THROUGH
        && (!simple || ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
        && ipa_get_jf_pass_through_formal_id (jfunc) == i
        && ipa_node_params_sum->get (cs->caller)
--- 5280,5288 ----
  			       bool simple = true)
  {
    enum availability availability;
!   if (jfunc->type == IPA_JF_PASS_THROUGH
!       && cs->caller == cs->callee->function_symbol (&availability)
        && availability > AVAIL_INTERPOSABLE
        && (!simple || ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
        && ipa_get_jf_pass_through_formal_id (jfunc) == i
        && ipa_node_params_sum->get (cs->caller)
*************** self_recursive_pass_through_p (cgraph_ed
*** 5287,5292 ****
--- 5291,5315 ----
    return false;
  }
  
+ /* Return true if JFUNC, which describes the i-th parameter of call CS, is an
+    ancestor function with zero offset to itself when the cgraph_node involved
+    is not an IPA-CP clone.  */
+ 
+ static bool
+ self_recursive_ancestor_p (cgraph_edge *cs, ipa_jump_func *jfunc, int i)
+ {
+   enum availability availability;
+   if (jfunc->type == IPA_JF_ANCESTOR
+       && cs->caller == cs->callee->function_symbol (&availability)
+       && availability > AVAIL_INTERPOSABLE
+       && ipa_get_jf_ancestor_offset (jfunc) == 0
+       && ipa_get_jf_ancestor_formal_id (jfunc) == i
+       && ipa_node_params_sum->get (cs->caller)
+       && !ipa_node_params_sum->get (cs->caller)->ipcp_orig_node)
+     return true;
+   return false;
+ }
+ 
  /* Return true if JFUNC, which describes a part of an aggregate represented or
     pointed to by the i-th parameter of call CS, is a pass-through function to
     itself when the cgraph_node involved is not an IPA-CP clone..  When
*************** find_more_scalar_values_for_callers_subs
*** 5370,5375 ****
--- 5393,5400 ----
  				ipa_get_jf_pass_through_operand (jump_func),
  				type);
  	    }
+ 	  else if (self_recursive_ancestor_p (cs, jump_func, i))
+ 	    continue;
  	  else
  	    t = ipa_value_from_jfunc (ipa_node_params_sum->get (cs->caller),
  				      jump_func, type);
*************** push_agg_values_for_index_from_edge (str
*** 5535,5541 ****
  	      && !src_plats->aggs_bottom
  	      && (agg_jf_preserved || !src_plats->aggs_by_ref))
  	    {
! 	      if (interim && self_recursive_pass_through_p (cs, jfunc, index))
  		{
  		  interim->push_adjusted_values (src_idx, index, unit_delta,
  						 res);
--- 5560,5567 ----
  	      && !src_plats->aggs_bottom
  	      && (agg_jf_preserved || !src_plats->aggs_by_ref))
  	    {
! 	      if (interim && (self_recursive_pass_through_p (cs, jfunc, index)
! 			      || self_recursive_ancestor_p (cs, jfunc, index)))
  		{
  		  interim->push_adjusted_values (src_idx, index, unit_delta,
  						 res);
diff -Nrcpad gcc-14.3.0/gcc/ipa-modref-tree.cc gcc-14.3.0-RC-20260619/gcc/ipa-modref-tree.cc
*** gcc-14.3.0/gcc/ipa-modref-tree.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ipa-modref-tree.cc	Fri Jun 19 06:51:02 2026
*************** modref_access_node::operator == (modref_
*** 59,65 ****
  bool
  modref_access_node::contains (const modref_access_node &a) const
  {
!   poly_int64 aoffset_adj = 0;
    if (parm_index != MODREF_UNKNOWN_PARM)
      {
        if (parm_index != a.parm_index)
--- 59,65 ----
  bool
  modref_access_node::contains (const modref_access_node &a) const
  {
!   poly_offset_int aoffset_adj = 0;
    if (parm_index != MODREF_UNKNOWN_PARM)
      {
        if (parm_index != a.parm_index)
*************** modref_access_node::contains (const modr
*** 80,86 ****
  	      a.offset may result in non-negative offset again.
  	      Ubsan fails on val << LOG_BITS_PER_UNIT where val
  	      is negative.  */
! 	   aoffset_adj = (a.parm_offset - parm_offset)
  			 * BITS_PER_UNIT;
  	}
      }
--- 80,87 ----
  	      a.offset may result in non-negative offset again.
  	      Ubsan fails on val << LOG_BITS_PER_UNIT where val
  	      is negative.  */
! 	   aoffset_adj = (poly_offset_int::from (a.parm_offset, SIGNED)
! 			  - poly_offset_int::from (parm_offset, SIGNED))
  			 * BITS_PER_UNIT;
  	}
      }
*************** modref_access_node::contains (const modr
*** 96,105 ****
  	      || !known_le (size, a.size)))
  	return false;
        if (known_size_p (max_size))
! 	return known_subrange_p (a.offset + aoffset_adj,
! 				 a.max_size, offset, max_size);
        else
! 	return known_le (offset, a.offset + aoffset_adj);
      }
    return true;
  }
--- 97,110 ----
  	      || !known_le (size, a.size)))
  	return false;
        if (known_size_p (max_size))
! 	return known_subrange_p (poly_offset_int::from (a.offset, SIGNED)
! 				 + aoffset_adj, a.max_size,
! 				 poly_offset_int::from (offset, SIGNED),
! 				 max_size);
        else
! 	return known_le (poly_offset_int::from (offset, SIGNED),
! 			 poly_offset_int::from (a.offset, SIGNED)
! 			 + aoffset_adj);
      }
    return true;
  }
diff -Nrcpad gcc-14.3.0/gcc/ipa-modref.cc gcc-14.3.0-RC-20260619/gcc/ipa-modref.cc
*** gcc-14.3.0/gcc/ipa-modref.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ipa-modref.cc	Fri Jun 19 06:51:02 2026
*************** ipa_merge_modref_summary_after_inlining
*** 5327,5343 ****
  				      : NULL;
    class modref_summary_lto *callee_info_lto
  		 = summaries_lto ? summaries_lto->get (edge->callee) : NULL;
    int flags = flags_from_decl_or_type (edge->callee->decl);
!   /* Combine in outer flags.  */
!   cgraph_node *n;
!   for (n = edge->caller; n->inlined_to; n = n->callers->caller)
!     flags |= flags_from_decl_or_type (n->decl);
!   flags |= flags_from_decl_or_type (n->decl);
!   bool ignore_stores = ignore_stores_p (edge->caller->decl, flags);
  
    if (!callee_info && to_info)
      {
!       if (!(flags & (ECF_CONST | ECF_PURE | ECF_NOVOPS)))
  	to_info->loads->collapse ();
        if (!ignore_stores)
  	to_info->stores->collapse ();
--- 5327,5376 ----
  				      : NULL;
    class modref_summary_lto *callee_info_lto
  		 = summaries_lto ? summaries_lto->get (edge->callee) : NULL;
+ 
+   /* Compute effective ECF_CONST, ECF_PURE, ECF_NOVOPS,
+      ECF_LOOPING_CONST_OR_PURE and ignore_stores of the inlined function from
+      the point of view of caller of the function it is transitively inlined to.
+ 
+      Consider inline chain A->B->C, where (edge is the edge B->C).
+      ECF_CONST, ECF_PURE_ECF, ECF_NOVOPS and ignore_stores is the strongest
+      flag seen on the inline path.
+ 
+      ECF_LOOPING_CONST_OR_PURE is bit special since, for example if C
+      is ECF_CONST | ECF_LOOPING_CONST_OR_PURE and B is ECF_PURE, then outcome
+      is ECF_CONST and !ECF_LOOPING_CONST_OR_PURE.
+ 
+      Flags are later used to avoid merging info about side-effects of C which
+      are invisible to to the caller of A.  For example, it is possible for
+      const function to have local array and call non-const functions modifying
+      it.  */
+ 
    int flags = flags_from_decl_or_type (edge->callee->decl);
!   bool ignore_stores = ignore_stores_p (edge->callee->decl, flags);
! 
!   for (cgraph_node *n = edge->caller; n;
!        n = n->inlined_to ? n->callers->caller : NULL)
!     {
!       int f = flags_from_decl_or_type (n->decl);
! 
!       ignore_stores |= ignore_stores_p (n->decl, f);
!       /* If we see first CONST/PURE flag in the chain, take its
! 	 ECF_LOOPING_CONST_OR_PURE  */
!       if (!(flags & (ECF_CONST | ECF_PURE)) && (f & (ECF_CONST | ECF_PURE)))
! 	flags |= (f & ECF_LOOPING_CONST_OR_PURE);
!       /* If we already have ECF_CONST or ECF_PURE flag
! 	 just improve ECF_LOOPING_CONST_OR_PURE if possible.  */
!       else if ((flags & (ECF_CONST | ECF_PURE))
! 	       && (flags & ECF_LOOPING_CONST_OR_PURE)
! 	       && (f & (ECF_CONST | ECF_PURE))
! 	       && !(f & ECF_LOOPING_CONST_OR_PURE))
! 	flags &= ECF_LOOPING_CONST_OR_PURE;
!       flags |= f & (ECF_CONST | ECF_PURE | ECF_NOVOPS);
!     }
  
    if (!callee_info && to_info)
      {
!       if (!(flags & (ECF_CONST | ECF_NOVOPS)))
  	to_info->loads->collapse ();
        if (!ignore_stores)
  	to_info->stores->collapse ();
diff -Nrcpad gcc-14.3.0/gcc/ipa-param-manipulation.cc gcc-14.3.0-RC-20260619/gcc/ipa-param-manipulation.cc
*** gcc-14.3.0/gcc/ipa-param-manipulation.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ipa-param-manipulation.cc	Fri Jun 19 06:51:02 2026
*************** ipa_param_body_adjustments::prepare_debu
*** 1348,1355 ****
  	}
  
        gcc_assert (TREE_CODE (value) == SSA_NAME);
!       tree *d = m_dead_ssa_debug_equiv.get (value);
!       m_dead_ssa_debug_equiv.put (dead_ssa, *d);
        return true;
      }
  
--- 1348,1355 ----
  	}
  
        gcc_assert (TREE_CODE (value) == SSA_NAME);
!       tree d = *m_dead_ssa_debug_equiv.get (value);
!       m_dead_ssa_debug_equiv.put (dead_ssa, d);
        return true;
      }
  
diff -Nrcpad gcc-14.3.0/gcc/ira-color.cc gcc-14.3.0-RC-20260619/gcc/ira-color.cc
*** gcc-14.3.0/gcc/ira-color.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/ira-color.cc	Fri Jun 19 06:51:02 2026
*************** improve_allocation (void)
*** 3320,3325 ****
--- 3320,3328 ----
        for (j = 0; j < class_size; j++)
  	{
  	  hregno = ira_class_hard_regs[aclass][j];
+ 	  if (NUM_REGISTER_FILTERS
+ 	      && !test_register_filters (ALLOCNO_REGISTER_FILTERS (a), hregno))
+ 	    continue;
  	  if (check_hard_reg_p (a, hregno,
  				conflicting_regs, profitable_hard_regs)
  	      && min_cost > costs[hregno])
diff -Nrcpad gcc-14.3.0/gcc/lra-constraints.cc gcc-14.3.0-RC-20260619/gcc/lra-constraints.cc
*** gcc-14.3.0/gcc/lra-constraints.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lra-constraints.cc	Fri Jun 19 06:51:02 2026
*************** get_equiv (rtx x)
*** 538,543 ****
--- 538,544 ----
    rtx res;
  
    if (! REG_P (x) || (regno = REGNO (x)) < FIRST_PSEUDO_REGISTER
+       || regno >= ira_reg_equiv_len
        || ! ira_reg_equiv[regno].defined_p
        || ! ira_reg_equiv[regno].profitable_p
        || lra_get_regno_hard_regno (regno) >= 0)
diff -Nrcpad gcc-14.3.0/gcc/lra-remat.cc gcc-14.3.0-RC-20260619/gcc/lra-remat.cc
*** gcc-14.3.0/gcc/lra-remat.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lra-remat.cc	Fri Jun 19 06:51:02 2026
*************** typedef const struct cand *const_cand_t;
*** 81,88 ****
  
  /* Insn candidates for rematerialization.  The candidate insn should
     have the following properies:
!    o no any memory (as access to memory is non-profitable)
     o no INOUT regs (it means no non-paradoxical subreg of output reg)
     o one output spilled pseudo (or reload pseudo of a spilled pseudo)
     o all other pseudos are with assigned hard regs.  */
  struct cand
--- 81,90 ----
  
  /* Insn candidates for rematerialization.  The candidate insn should
     have the following properies:
!    o no any memory (as access to memory is non-profitable) or
!      div/mod operations (as they are usually more expensive than loads)
     o no INOUT regs (it means no non-paradoxical subreg of output reg)
+    o no multiple output pseudos
     o one output spilled pseudo (or reload pseudo of a spilled pseudo)
     o all other pseudos are with assigned hard regs.  */
  struct cand
*************** finish_cand_table (void)
*** 249,260 ****
  
  
  
! /* Return true if X contains memory or some UNSPEC.  We cannot just
!    check insn operands as memory or unspec might be not an operand
!    itself but contain an operand.  Insn with memory access is not
!    profitable for rematerialization.  Rematerialization of UNSPEC
!    might result in wrong code generation as the UNPEC effect is
!    unknown (e.g. generating a label).  */
  static bool
  bad_for_rematerialization_p (rtx x)
  {
--- 251,262 ----
  
  
  
! /* Return true if X contains memory, some UNSPEC, or expensive operations.  We
!    cannot just check insn operands as memory or unspec might be not an operand
!    itself but contain an operand.  Insns with memory access or expensive ones
!    are not profitable for rematerialization.  Rematerialization of UNSPEC might
!    result in wrong code generation as the UNPEC effect is unknown
!    (e.g. generating a label).  */
  static bool
  bad_for_rematerialization_p (rtx x)
  {
*************** bad_for_rematerialization_p (rtx x)
*** 262,268 ****
    const char *fmt;
    enum rtx_code code;
  
!   if (MEM_P (x) || GET_CODE (x) == UNSPEC || GET_CODE (x) == UNSPEC_VOLATILE)
      return true;
    code = GET_CODE (x);
    fmt = GET_RTX_FORMAT (code);
--- 264,274 ----
    const char *fmt;
    enum rtx_code code;
  
!   if (MEM_P (x) || GET_CODE (x) == UNSPEC || GET_CODE (x) == UNSPEC_VOLATILE
!       /* Usually the following operations are expensive and does not worth to
! 	 rematerialize: */
!       || GET_CODE(x) == DIV || GET_CODE(x) == UDIV
!       || GET_CODE(x) == MOD || GET_CODE(x) == UMOD)
      return true;
    code = GET_CODE (x);
    fmt = GET_RTX_FORMAT (code);
*************** operand_to_remat (rtx_insn *insn)
*** 308,315 ****
  	 cannot know sp offset at a rematerialization place.  */
        if (reg->regno == STACK_POINTER_REGNUM && frame_pointer_needed)
  	return -1;
!       else if (reg->type == OP_OUT && ! reg->subreg_p
! 	       && find_regno_note (insn, REG_UNUSED, reg->regno) == NULL)
  	{
  	  /* We permits only one spilled reg.  */
  	  if (found_reg != NULL)
--- 314,320 ----
  	 cannot know sp offset at a rematerialization place.  */
        if (reg->regno == STACK_POINTER_REGNUM && frame_pointer_needed)
  	return -1;
!       else if (reg->type == OP_OUT)
  	{
  	  /* We permits only one spilled reg.  */
  	  if (found_reg != NULL)
diff -Nrcpad gcc-14.3.0/gcc/lto/ChangeLog gcc-14.3.0-RC-20260619/gcc/lto/ChangeLog
*** gcc-14.3.0/gcc/lto/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/lto/ChangeLog	Fri Jun 19 06:51:02 2026
***************
*** 1,3 ****
--- 1,31 ----
+ 2026-02-26  Michal Jires  <mjires@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-01-11  Michal Jires  <mjires@suse.cz>
+ 
+ 	PR lto/121588
+ 	* lto-symtab.cc (lto_symtab_merge_symbols): Set body_removed
+ 	for symbols resolved outside of IR.
+ 
+ 2025-12-03  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	Backported from master:
+ 	2025-11-25  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lto-common.cc (lto_read_section_data): Avoid using SSIZE_MAX.
+ 
+ 2025-11-18  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	Backported from master:
+ 	2025-11-04  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lto.h (lto_section_slot): Set type of START to off_t.
+ 	* lto-common.cc (lto_read_section_data): Adjust.
+ 	* lto-object.cc (lto_obj_file_open): Set type of OFFSET to
+ 	int64_t.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/lto/lto-common.cc gcc-14.3.0-RC-20260619/gcc/lto/lto-common.cc
*** gcc-14.3.0/gcc/lto/lto-common.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lto/lto-common.cc	Fri Jun 19 06:51:02 2026
*************** static size_t page_mask;
*** 2377,2391 ****
  
  static char *
  lto_read_section_data (struct lto_file_decl_data *file_data,
! 		       intptr_t offset, size_t len)
  {
    char *result;
    static int fd = -1;
    static char *fd_name;
  #if LTO_MMAP_IO
!   intptr_t computed_len;
!   intptr_t computed_offset;
!   intptr_t diff;
  #endif
  
    /* Keep a single-entry file-descriptor cache.  The last file we
--- 2377,2391 ----
  
  static char *
  lto_read_section_data (struct lto_file_decl_data *file_data,
! 		       off_t offset, size_t len)
  {
    char *result;
    static int fd = -1;
    static char *fd_name;
  #if LTO_MMAP_IO
!   size_t computed_len;
!   off_t computed_offset;
!   off_t diff;
  #endif
  
    /* Keep a single-entry file-descriptor cache.  The last file we
*************** lto_read_section_data (struct lto_file_d
*** 2418,2426 ****
        page_mask = ~(page_size - 1);
      }
  
!   computed_offset = offset & page_mask;
    diff = offset - computed_offset;
!   computed_len = len + diff;
  
    result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
  			  fd, computed_offset);
--- 2418,2432 ----
        page_mask = ~(page_size - 1);
      }
  
!   computed_offset = offset & ((off_t) page_mask);
    diff = offset - computed_offset;
!   if (len > (((size_t) -1) >> 1) - diff)
!     {
!       fatal_error (input_location, "Cannot map %s: section is too long",
! 		   file_data->file_name);
!       return NULL;
!     }
!   computed_len = (size_t) diff + len;
  
    result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
  			  fd, computed_offset);
diff -Nrcpad gcc-14.3.0/gcc/lto/lto-object.cc gcc-14.3.0-RC-20260619/gcc/lto/lto-object.cc
*** gcc-14.3.0/gcc/lto/lto-object.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lto/lto-object.cc	Fri Jun 19 06:51:02 2026
*************** lto_file *
*** 69,78 ****
  lto_obj_file_open (const char *filename, bool writable)
  {
    const char *offset_p;
-   long loffset;
    int consumed;
    char *fname;
!   off_t offset;
    struct lto_simple_object *lo;
    const char *errmsg;
    int err;
--- 69,77 ----
  lto_obj_file_open (const char *filename, bool writable)
  {
    const char *offset_p;
    int consumed;
    char *fname;
!   int64_t offset;
    struct lto_simple_object *lo;
    const char *errmsg;
    int err;
*************** lto_obj_file_open (const char *filename,
*** 80,92 ****
    offset_p = strrchr (filename, '@');
    if (offset_p != NULL
        && offset_p != filename
!       && sscanf (offset_p, "@%li%n", &loffset, &consumed) >= 1
        && strlen (offset_p) == (unsigned int) consumed)
      {
        fname = XNEWVEC (char, offset_p - filename + 1);
        memcpy (fname, filename, offset_p - filename);
        fname[offset_p - filename] = '\0';
-       offset = (off_t) loffset;
      }
    else
      {
--- 79,90 ----
    offset_p = strrchr (filename, '@');
    if (offset_p != NULL
        && offset_p != filename
!       && sscanf (offset_p, "@%" PRIi64 "%n", &offset, &consumed) >= 1
        && strlen (offset_p) == (unsigned int) consumed)
      {
        fname = XNEWVEC (char, offset_p - filename + 1);
        memcpy (fname, filename, offset_p - filename);
        fname[offset_p - filename] = '\0';
      }
    else
      {
diff -Nrcpad gcc-14.3.0/gcc/lto/lto-symtab.cc gcc-14.3.0-RC-20260619/gcc/lto/lto-symtab.cc
*** gcc-14.3.0/gcc/lto/lto-symtab.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lto/lto-symtab.cc	Fri Jun 19 06:51:02 2026
*************** lto_symtab_merge_symbols (void)
*** 1040,1045 ****
--- 1040,1046 ----
  		      node->analyzed = node->definition = false;
  		      node->remove_all_references ();
  		    }
+ 		  node->body_removed = true;
  		}
  	      DECL_EXTERNAL (node->decl) = 1;
  	    }
diff -Nrcpad gcc-14.3.0/gcc/lto/lto.h gcc-14.3.0-RC-20260619/gcc/lto/lto.h
*** gcc-14.3.0/gcc/lto/lto.h	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lto/lto.h	Fri Jun 19 06:51:02 2026
*************** extern int lto_link_dump_id, decl_merge_
*** 58,64 ****
  struct lto_section_slot
  {
    const char *name;
!   intptr_t start;
    size_t len;
    struct lto_section_slot *next;
  };
--- 58,64 ----
  struct lto_section_slot
  {
    const char *name;
!   off_t start;
    size_t len;
    struct lto_section_slot *next;
  };
diff -Nrcpad gcc-14.3.0/gcc/lto-wrapper.cc gcc-14.3.0-RC-20260619/gcc/lto-wrapper.cc
*** gcc-14.3.0/gcc/lto-wrapper.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/lto-wrapper.cc	Fri Jun 19 06:51:02 2026
*************** debug_objcopy (const char *infile, bool
*** 1193,1210 ****
  
    const char *p;
    const char *orig_infile = infile;
!   off_t inoff = 0;
!   long loffset;
    int consumed;
    if ((p = strrchr (infile, '@'))
        && p != infile
!       && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
        && strlen (p) == (unsigned int) consumed)
      {
        char *fname = xstrdup (infile);
        fname[p - infile] = '\0';
        infile = fname;
-       inoff = (off_t) loffset;
      }
    int infd = open (infile, O_RDONLY | O_BINARY);
    if (infd == -1)
--- 1193,1208 ----
  
    const char *p;
    const char *orig_infile = infile;
!   int64_t inoff = 0;
    int consumed;
    if ((p = strrchr (infile, '@'))
        && p != infile
!       && sscanf (p, "@%" PRIi64 "%n", &inoff, &consumed) >= 1
        && strlen (p) == (unsigned int) consumed)
      {
        char *fname = xstrdup (infile);
        fname[p - infile] = '\0';
        infile = fname;
      }
    int infd = open (infile, O_RDONLY | O_BINARY);
    if (infd == -1)
*************** run_gcc (unsigned argc, char *argv[])
*** 1477,1484 ****
      {
        char *p;
        int fd;
!       off_t file_offset = 0;
!       long loffset;
        int consumed;
        char *filename = argv[i];
  
--- 1475,1481 ----
      {
        char *p;
        int fd;
!       int64_t file_offset = 0;
        int consumed;
        char *filename = argv[i];
  
*************** run_gcc (unsigned argc, char *argv[])
*** 1491,1504 ****
  	}
  
        if ((p = strrchr (argv[i], '@'))
! 	  && p != argv[i] 
! 	  && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
  	  && strlen (p) == (unsigned int) consumed)
  	{
  	  filename = XNEWVEC (char, p - argv[i] + 1);
  	  memcpy (filename, argv[i], p - argv[i]);
  	  filename[p - argv[i]] = '\0';
- 	  file_offset = (off_t) loffset;
  	}
        fd = open (filename, O_RDONLY | O_BINARY);
        /* Linker plugin passes -fresolution and -flinker-output options.
--- 1488,1500 ----
  	}
  
        if ((p = strrchr (argv[i], '@'))
! 	  && p != argv[i]
! 	  && sscanf (p, "@%" PRIi64 "%n", &file_offset, &consumed) >= 1
  	  && strlen (p) == (unsigned int) consumed)
  	{
  	  filename = XNEWVEC (char, p - argv[i] + 1);
  	  memcpy (filename, argv[i], p - argv[i]);
  	  filename[p - argv[i]] = '\0';
  	}
        fd = open (filename, O_RDONLY | O_BINARY);
        /* Linker plugin passes -fresolution and -flinker-output options.
*************** cont1:
*** 1779,1798 ****
        for (i = 0; i < num_offload_files; i++)
  	{
  	  char *p;
- 	  long loffset;
  	  int fd, consumed;
! 	  off_t file_offset = 0;
  	  char *filename = offload_argv[i];
  
  	  if ((p = strrchr (offload_argv[i], '@'))
  	      && p != offload_argv[i]
! 	      && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
  	      && strlen (p) == (unsigned int) consumed)
  	    {
  	      filename = XNEWVEC (char, p - offload_argv[i] + 1);
  	      memcpy (filename, offload_argv[i], p - offload_argv[i]);
  	      filename[p - offload_argv[i]] = '\0';
- 	      file_offset = (off_t) loffset;
  	    }
  	  fd = open (filename, O_RDONLY | O_BINARY);
  	  if (fd == -1)
--- 1775,1792 ----
        for (i = 0; i < num_offload_files; i++)
  	{
  	  char *p;
  	  int fd, consumed;
! 	  int64_t file_offset = 0;
  	  char *filename = offload_argv[i];
  
  	  if ((p = strrchr (offload_argv[i], '@'))
  	      && p != offload_argv[i]
! 	      && sscanf (p, "@%" PRIi64 "%n", &file_offset, &consumed) >= 1
  	      && strlen (p) == (unsigned int) consumed)
  	    {
  	      filename = XNEWVEC (char, p - offload_argv[i] + 1);
  	      memcpy (filename, offload_argv[i], p - offload_argv[i]);
  	      filename[p - offload_argv[i]] = '\0';
  	    }
  	  fd = open (filename, O_RDONLY | O_BINARY);
  	  if (fd == -1)
diff -Nrcpad gcc-14.3.0/gcc/machmode.def gcc-14.3.0-RC-20260619/gcc/machmode.def
*** gcc-14.3.0/gcc/machmode.def	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/machmode.def	Fri Jun 19 06:51:02 2026
*************** along with GCC; see the file COPYING3.
*** 148,159 ****
  	mode, with smaller numbers indicating a higher priority.
  
       VECTOR_BOOL_MODE (NAME, COUNT, COMPONENT, BYTESIZE)
!         Create a vector mode called NAME that contains COUNT boolean
!         elements and occupies BYTESIZE bytes in total.  Each boolean
!         element is of COMPONENT type and occupies (COUNT * BITS_PER_UNIT) /
!         BYTESIZE bits, with the element at index 0 occupying the lsb of the
!         first byte in memory.  Only the lowest bit of each element is
!         significant.
  
       OPAQUE_MODE (NAME, BYTESIZE)
          Create an opaque mode called NAME that is BYTESIZE bytes wide.
--- 148,159 ----
  	mode, with smaller numbers indicating a higher priority.
  
       VECTOR_BOOL_MODE (NAME, COUNT, COMPONENT, BYTESIZE)
! 	Create a vector mode called NAME that contains COUNT boolean
! 	elements and occupies BYTESIZE bytes in total.  Each boolean
! 	element is of COMPONENT type and occupies ((BYTESIZE * BITS_PER_UNIT)
! 	/ COUNT) bits, with the element at index 0 occupying the lsb of the
! 	first byte in memory.  Only the lowest bit of each element is
! 	significant.
  
       OPAQUE_MODE (NAME, BYTESIZE)
          Create an opaque mode called NAME that is BYTESIZE bytes wide.
diff -Nrcpad gcc-14.3.0/gcc/match.pd gcc-14.3.0-RC-20260619/gcc/match.pd
*** gcc-14.3.0/gcc/match.pd	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/match.pd	Fri Jun 19 06:51:02 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 196,202 ****
  (simplify (abs (convert @0))
   (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
        && !TYPE_UNSIGNED (TREE_TYPE (@0))
!       && element_precision (type) > element_precision (TREE_TYPE (@0)))
    (with { tree utype = unsigned_type_for (TREE_TYPE (@0)); }
     (convert (absu:utype @0)))))
  
--- 196,204 ----
  (simplify (abs (convert @0))
   (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
        && !TYPE_UNSIGNED (TREE_TYPE (@0))
!       && element_precision (type) > element_precision (TREE_TYPE (@0))
!       && (!VECTOR_TYPE_P (type)
! 	  || target_supports_op_p (TREE_TYPE (@0), ABSU_EXPR, optab_vector)))
    (with { tree utype = unsigned_type_for (TREE_TYPE (@0)); }
     (convert (absu:utype @0)))))
  
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 2906,2912 ****
  #if GENERIC
  (simplify
    (pointer_plus (convert:s (pointer_plus:s @0 @1)) @3)
!   (convert:type (pointer_plus @0 (plus @1 @3))))
  #endif
  
  /* Pattern match
--- 2908,2914 ----
  #if GENERIC
  (simplify
    (pointer_plus (convert:s (pointer_plus:s @0 @1)) @3)
!   (pointer_plus (convert:type @0) (plus @1 @3)))
  #endif
  
  /* Pattern match
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 4249,4255 ****
          (op:c @2 @1))
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_PRECISION (type) > 1
!        && (INTEGRAL_TYPE_P (TREE_TYPE (@0))))
         (op (mult (convert:type @0) @2) @1))))
  
  /* (zero_one != 0) ? z <op> y : y -> ((typeof(y))zero_one * z) <op> y */
--- 4251,4258 ----
          (op:c @2 @1))
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_PRECISION (type) > 1
!        && INTEGRAL_TYPE_P (TREE_TYPE (@0))
!        && expr_no_side_effects_p (@2))
         (op (mult (convert:type @0) @2) @1))))
  
  /* (zero_one != 0) ? z <op> y : y -> ((typeof(y))zero_one * z) <op> y */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 4261,4267 ****
          @1)
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_PRECISION (type) > 1
!        && (INTEGRAL_TYPE_P (TREE_TYPE (@0))))
         (op (mult (convert:type @0) @2) @1))))
  
  /* ?: Value replacement. */
--- 4264,4271 ----
          @1)
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_PRECISION (type) > 1
!        && INTEGRAL_TYPE_P (TREE_TYPE (@0))
!        && expr_no_side_effects_p (@2))
         (op (mult (convert:type @0) @2) @1))))
  
  /* ?: Value replacement. */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5159,5165 ****
   (if (VECTOR_TYPE_P (type) && VECTOR_TYPE_P (TREE_TYPE (@1))
        && known_eq (TYPE_VECTOR_SUBPARTS (type),
  		   TYPE_VECTOR_SUBPARTS (TREE_TYPE (@1)))
!       && tree_nop_conversion_p (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (@1))))
    (vec_cond @0 (view_convert! @1) (view_convert! @2))))
  
  /* Sink binary operation to branches, but only if we can fold it.  */
--- 5163,5171 ----
   (if (VECTOR_TYPE_P (type) && VECTOR_TYPE_P (TREE_TYPE (@1))
        && known_eq (TYPE_VECTOR_SUBPARTS (type),
  		   TYPE_VECTOR_SUBPARTS (TREE_TYPE (@1)))
!       && tree_nop_conversion_p (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (@1)))
!       && (expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
! 	  || !expand_vec_cond_expr_p (TREE_TYPE (@1), TREE_TYPE (@0), ERROR_MARK)))
    (vec_cond @0 (view_convert! @1) (view_convert! @2))))
  
  /* Sink binary operation to branches, but only if we can fold it.  */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5954,5960 ****
     (cnd (cmp @0 zerop) @1 (negate @1))
      (if (!HONOR_SIGNED_ZEROS (TREE_TYPE(@0))
  	 && !TYPE_UNSIGNED (TREE_TYPE(@0))
! 	 && bitwise_equal_p (@0, @1))
       (if (TYPE_UNSIGNED (type))
        (absu:type @0)
        (abs @0)))))
--- 5960,5968 ----
     (cnd (cmp @0 zerop) @1 (negate @1))
      (if (!HONOR_SIGNED_ZEROS (TREE_TYPE(@0))
  	 && !TYPE_UNSIGNED (TREE_TYPE(@0))
! 	 && bitwise_equal_p (@0, @1)
! 	 && (!VECTOR_TYPE_P (type)
! 	     || target_supports_op_p (type, ABS_EXPR, optab_vector)))
       (if (TYPE_UNSIGNED (type))
        (absu:type @0)
        (abs @0)))))
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5964,5970 ****
     (cnd (cmp @0 zerop) @1 (negate @1))
      (if (!HONOR_SIGNED_ZEROS (TREE_TYPE(@0))
  	 && !TYPE_UNSIGNED (TREE_TYPE(@0))
! 	 && bitwise_equal_p (@0, @1))
       (if ((ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
  	   && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))
  	  || TYPE_UNSIGNED (type))
--- 5972,5980 ----
     (cnd (cmp @0 zerop) @1 (negate @1))
      (if (!HONOR_SIGNED_ZEROS (TREE_TYPE(@0))
  	 && !TYPE_UNSIGNED (TREE_TYPE(@0))
! 	 && bitwise_equal_p (@0, @1)
! 	 && (!VECTOR_TYPE_P (type)
! 	     || target_supports_op_p (type, ABS_EXPR, optab_vector)))
       (if ((ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
  	   && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))
  	  || TYPE_UNSIGNED (type))
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 6000,6006 ****
    (simplify
     (cnd (cmp (minus@0 @1 @2) zerop) @0 (minus @2 @1))
     (if (!HONOR_SIGNED_ZEROS (type)
! 	&& !TYPE_UNSIGNED (type))
      (abs @0))))
   /* (A - B) <=/< 0 ? (A - B) : (B - A)    same as -abs (A - B) */
   (for cmp (le lt)
--- 6010,6018 ----
    (simplify
     (cnd (cmp (minus@0 @1 @2) zerop) @0 (minus @2 @1))
     (if (!HONOR_SIGNED_ZEROS (type)
! 	&& !TYPE_UNSIGNED (type)
! 	&& (!VECTOR_TYPE_P (type)
! 	    || target_supports_op_p (type, ABS_EXPR, optab_vector)))
      (abs @0))))
   /* (A - B) <=/< 0 ? (A - B) : (B - A)    same as -abs (A - B) */
   (for cmp (le lt)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 6009,6015 ****
     (if (!HONOR_SIGNED_ZEROS (type)
  	&& !TYPE_UNSIGNED (type))
      (if (ANY_INTEGRAL_TYPE_P (type)
! 	 && !TYPE_OVERFLOW_WRAPS (type))
       (with {
          tree utype = unsigned_type_for (type);
        }
--- 6021,6030 ----
     (if (!HONOR_SIGNED_ZEROS (type)
  	&& !TYPE_UNSIGNED (type))
      (if (ANY_INTEGRAL_TYPE_P (type)
! 	 && !TYPE_OVERFLOW_WRAPS (type)
! 	 && (!VECTOR_TYPE_P (type)
! 	     || (target_supports_op_p (type, ABS_EXPR, optab_vector)
! 		 && target_supports_op_p (type, NEGATE_EXPR, optab_vector))))
       (with {
          tree utype = unsigned_type_for (type);
        }
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7468,7474 ****
     (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
      (convert (gt @0 (trunc_div! { TYPE_MAX_VALUE (TREE_TYPE (@0)); } @1)))
      (if (TYPE_MIN_VALUE (TREE_TYPE (@0)))
!      (if (integer_minus_onep (@1))
        (convert (eq @0 { TYPE_MIN_VALUE (TREE_TYPE (@0)); }))
        (with
         {
--- 7483,7489 ----
     (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
      (convert (gt @0 (trunc_div! { TYPE_MAX_VALUE (TREE_TYPE (@0)); } @1)))
      (if (TYPE_MIN_VALUE (TREE_TYPE (@0)))
!      (if (!TYPE_UNSIGNED (TREE_TYPE (@1)) && integer_minus_onep (@1))
        (convert (eq @0 { TYPE_MIN_VALUE (TREE_TYPE (@0)); }))
        (with
         {
*************** and,
*** 9735,9744 ****
  	    unsigned int elt_bits = tree_to_uhwi (TYPE_SIZE (elt_type));
  	    tree size = bitsize_int (elt_bits);
  	    tree pos = bitsize_int (elt_bits * i); }
!      (view_convert
!       (bit_and:elt_type
!        (BIT_FIELD_REF:elt_type @0 { size; } { pos; })
!        { elt; })))))))
  
  /* Fold reduction of a single nonzero element constructor.  */
  (for reduc (IFN_REDUC_PLUS IFN_REDUC_IOR IFN_REDUC_XOR)
--- 9750,9760 ----
  	    unsigned int elt_bits = tree_to_uhwi (TYPE_SIZE (elt_type));
  	    tree size = bitsize_int (elt_bits);
  	    tree pos = bitsize_int (elt_bits * i); }
!      (if (compare_tree_int (TYPE_SIZE (type), elt_bits) == 0)
!       (view_convert
!        (bit_and:elt_type
!         (BIT_FIELD_REF:elt_type @0 { size; } { pos; })
!         { elt; }))))))))
  
  /* Fold reduction of a single nonzero element constructor.  */
  (for reduc (IFN_REDUC_PLUS IFN_REDUC_IOR IFN_REDUC_XOR)
*************** and,
*** 9747,9752 ****
--- 9763,9769 ----
  			 ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)) : @0);
  	    tree elt = ctor_single_nonzero_element (ctor); }
        (if (elt
+ 	   && types_match (type, TREE_TYPE (elt))
  	   && !HONOR_SNANS (type)
  	   && !HONOR_SIGNED_ZEROS (type))
  	{ elt; }))))
*************** and,
*** 9851,9863 ****
      {
        /* Create a vec_perm_indices for the integer vector.  */
        poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (type);
        bool single_arg = (op0 == op1);
!       vec_perm_indices sel (builder, single_arg ? 1 : 2, nelts);
      }
!     (if (sel.series_p (0, 1, 0, 1))
!      { op0; }
!      (if (sel.series_p (0, 1, nelts, 1))
!       { op1; }
        (with
         {
           if (!single_arg)
--- 9868,9881 ----
      {
        /* Create a vec_perm_indices for the integer vector.  */
        poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (type);
+       poly_uint64 nelts_in = TYPE_VECTOR_SUBPARTS (TREE_TYPE (op0));
        bool single_arg = (op0 == op1);
!       vec_perm_indices sel (builder, single_arg ? 1 : 2, nelts_in);
      }
!     (if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, 0, 1))
!      (view_convert @0)
!      (if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, nelts_in, 1))
!       (view_convert @1)
        (with
         {
           if (!single_arg)
*************** and,
*** 9869,9875 ****
  	         op0 = op1;
  	         sel.rotate_inputs (1);
  	       }
! 	     else if (known_ge (poly_uint64 (sel[0]), nelts))
  	       {
  	         std::swap (op0, op1);
  	         sel.rotate_inputs (1);
--- 9887,9893 ----
  	         op0 = op1;
  	         sel.rotate_inputs (1);
  	       }
! 	     else if (known_ge (poly_uint64 (sel[0]), nelts_in))
  	       {
  	         std::swap (op0, op1);
  	         sel.rotate_inputs (1);
*************** and,
*** 9904,9909 ****
--- 9922,9928 ----
  	      in that case.  But only if the vector mode is supported,
  	      otherwise this is invalid GIMPLE.  */
  	   if (op_mode != BLKmode
+ 	       && known_eq (nelts, nelts_in)
  	       && (TREE_CODE (cop0) == VECTOR_CST
  		   || TREE_CODE (cop0) == CONSTRUCTOR
  		   || TREE_CODE (cop1) == VECTOR_CST
*************** and,
*** 10313,10315 ****
--- 10332,10339 ----
        }
        (if (full_perm_p)
  	(vec_perm (op@3 @0 @1) @3 @2))))))
+ 
+ /* Strip nop-conversions __builtin_constant_p arguments.  */
+ (simplify
+  (BUILT_IN_CONSTANT_P (nop_convert@1 @0))
+  (BUILT_IN_CONSTANT_P @0))
diff -Nrcpad gcc-14.3.0/gcc/omp-expand.cc gcc-14.3.0-RC-20260619/gcc/omp-expand.cc
*** gcc-14.3.0/gcc/omp-expand.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/omp-expand.cc	Fri Jun 19 06:51:02 2026
*************** expand_omp_for_init_counts (struct omp_f
*** 1861,1866 ****
--- 1861,1867 ----
  	}
      }
    bool rect_count_seen = false;
+   bool init_n2 = SSA_VAR_P (fd->loop.n2) && zero_iter1_bb;
    for (i = 0; i < (fd->ordered ? fd->ordered : fd->collapse); i++)
      {
        tree itype = TREE_TYPE (fd->loops[i].v);
*************** expand_omp_for_init_counts (struct omp_f
*** 1885,1890 ****
--- 1886,1906 ----
  	{
  	  gcond *cond_stmt;
  	  tree n1, n2;
+ 	  if (init_n2 && i < fd->collapse && !rect_count_seen)
+ 	    {
+ 	      /* When called with non-NULL zero_iter1_bb, we won't clear
+ 		 fd->loop.n2 in the if (zero_iter_bb == NULL) code below
+ 		 and if it is prior to storing fd->loop.n2 where
+ 		 rect_count_seen is set, it could be used uninitialized.
+ 		 As zero_iter1_bb in that case can be reached also if there
+ 		 are non-zero iterations, the clearing can't be emitted
+ 		 to the zero_iter1_bb, but needs to be done before the
+ 		 condition.  */
+ 	      gassign *assign_stmt
+ 		= gimple_build_assign (fd->loop.n2, build_zero_cst (type));
+ 	      gsi_insert_before (gsi, assign_stmt, GSI_SAME_STMT);
+ 	      init_n2 = false;
+ 	    }
  	  n1 = fold_convert (itype, unshare_expr (fd->loops[i].n1));
  	  n1 = force_gimple_operand_gsi (gsi, n1, true, NULL_TREE,
  					 true, GSI_SAME_STMT);
*************** extract_omp_for_update_vars (struct omp_
*** 3249,3255 ****
  	  if (DECL_P (v) && TREE_ADDRESSABLE (v))
  	    v = force_gimple_operand_gsi (&gsi, v, true, NULL_TREE,
  					  false, GSI_CONTINUE_LINKING);
! 	  t = fold_build2 (fd->loops[i].cond_code, boolean_type_node, v, t);
  	  stmt = gimple_build_cond_empty (t);
  	  gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
  	  if (walk_tree (gimple_cond_lhs_ptr (as_a <gcond *> (stmt)),
--- 3265,3271 ----
  	  if (DECL_P (v) && TREE_ADDRESSABLE (v))
  	    v = force_gimple_operand_gsi (&gsi, v, true, NULL_TREE,
  					  false, GSI_CONTINUE_LINKING);
! 	  t = build2 (fd->loops[i].cond_code, boolean_type_node, v, t);
  	  stmt = gimple_build_cond_empty (t);
  	  gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
  	  if (walk_tree (gimple_cond_lhs_ptr (as_a <gcond *> (stmt)),
diff -Nrcpad gcc-14.3.0/gcc/omp-low.cc gcc-14.3.0-RC-20260619/gcc/omp-low.cc
*** gcc-14.3.0/gcc/omp-low.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/omp-low.cc	Fri Jun 19 06:51:02 2026
*************** lower_omp_regimplify_operands_p (tree *t
*** 14270,14275 ****
--- 14270,14277 ----
        lower_omp_regimplify_operands_data *ldata
  	= (lower_omp_regimplify_operands_data *) wi->info;
        tree o = maybe_lookup_decl (t, ldata->ctx);
+       if (o == NULL_TREE)
+ 	o = maybe_lookup_decl_in_outer_ctx (t, ldata->ctx);
        if (o != t)
  	{
  	  ldata->decls->safe_push (DECL_VALUE_EXPR (*tp));
*************** diagnose_sb_2 (gimple_stmt_iterator *gsi
*** 14930,14935 ****
--- 14932,14950 ----
  	    n = splay_tree_lookup (all_labels, (splay_tree_key) lab);
  	    if (n && diagnose_sb_0 (gsi_p, context, (gimple *) n->value))
  	      break;
+ 	  }
+       }
+       break;
+ 
+     case GIMPLE_ASM:
+       {
+ 	gasm *asm_stmt = as_a <gasm *> (stmt);
+ 	for (unsigned i = 0; i < gimple_asm_nlabels (asm_stmt); ++i)
+ 	  {
+ 	    tree lab = TREE_VALUE (gimple_asm_label_op (asm_stmt, i));
+ 	    n = splay_tree_lookup (all_labels, (splay_tree_key) lab);
+ 	    if (n && diagnose_sb_0 (gsi_p, context, (gimple *) n->value))
+ 	      break;
  	  }
        }
        break;
diff -Nrcpad gcc-14.3.0/gcc/optabs.cc gcc-14.3.0-RC-20260619/gcc/optabs.cc
*** gcc-14.3.0/gcc/optabs.cc	Fri May 23 11:02:04 2025
--- gcc-14.3.0-RC-20260619/gcc/optabs.cc	Fri Jun 19 06:51:02 2026
*************** force_expand_binop (machine_mode mode, o
*** 421,429 ****
    return true;
  }
  
! /* Create a new vector value in VMODE with all elements set to OP.  The
!    mode of OP must be the element mode of VMODE.  If OP is a constant,
!    then the return value will be a constant.  */
  
  rtx
  expand_vector_broadcast (machine_mode vmode, rtx op)
--- 421,429 ----
    return true;
  }
  
! /* Create a new vector value in VMODE with all elements set to OP.  If OP
!    is not a constant, the mode of it must be the element mode of VMODE.
!    If OP is a constant, then the return value will be a constant.  */
  
  rtx
  expand_vector_broadcast (machine_mode vmode, rtx op)
*************** avoid_expensive_constant (machine_mode m
*** 1368,1375 ****
  static rtx
  expand_binop_directly (enum insn_code icode, machine_mode mode, optab binoptab,
  		       rtx op0, rtx op1,
! 		       rtx target, int unsignedp, enum optab_methods methods,
! 		       rtx_insn *last)
  {
    machine_mode xmode0 = insn_data[(int) icode].operand[1].mode;
    machine_mode xmode1 = insn_data[(int) icode].operand[2].mode;
--- 1368,1374 ----
  static rtx
  expand_binop_directly (enum insn_code icode, machine_mode mode, optab binoptab,
  		       rtx op0, rtx op1,
! 		       rtx target, int unsignedp, enum optab_methods methods)
  {
    machine_mode xmode0 = insn_data[(int) icode].operand[1].mode;
    machine_mode xmode1 = insn_data[(int) icode].operand[2].mode;
*************** expand_binop_directly (enum insn_code ic
*** 1379,1384 ****
--- 1378,1384 ----
    rtx_insn *pat;
    rtx xop0 = op0, xop1 = op1;
    bool canonicalize_op1 = false;
+   rtx_insn *last = get_last_insn ();
  
    /* If it is a commutative operator and the modes would match
       if we would swap the operands, we can save the conversions.  */
*************** expand_binop_directly (enum insn_code ic
*** 1443,1452 ****
        tmp_mode = insn_data[(int) icode].operand[0].mode;
        if (VECTOR_MODE_P (mode)
  	  && maybe_ne (GET_MODE_NUNITS (tmp_mode), 2 * GET_MODE_NUNITS (mode)))
! 	{
! 	  delete_insns_since (last);
! 	  return NULL_RTX;
! 	}
      }
    else
      tmp_mode = mode;
--- 1443,1449 ----
        tmp_mode = insn_data[(int) icode].operand[0].mode;
        if (VECTOR_MODE_P (mode)
  	  && maybe_ne (GET_MODE_NUNITS (tmp_mode), 2 * GET_MODE_NUNITS (mode)))
! 	return NULL_RTX;
      }
    else
      tmp_mode = mode;
*************** expand_binop_directly (enum insn_code ic
*** 1466,1479 ****
  			       ops[1].value, ops[2].value, mode0))
  	{
  	  delete_insns_since (last);
! 	  return expand_binop (mode, binoptab, op0, op1, NULL_RTX,
! 			       unsignedp, methods);
  	}
  
        emit_insn (pat);
        return ops[0].value;
      }
!   delete_insns_since (last);
    return NULL_RTX;
  }
  
--- 1463,1476 ----
  			       ops[1].value, ops[2].value, mode0))
  	{
  	  delete_insns_since (last);
! 	  return expand_binop_directly (icode, mode, binoptab, op0, op1,
! 					NULL_RTX, unsignedp, methods);
  	}
  
        emit_insn (pat);
        return ops[0].value;
      }
! 
    return NULL_RTX;
  }
  
*************** expand_binop (machine_mode mode, optab b
*** 1542,1550 ****
        if (icode != CODE_FOR_nothing)
  	{
  	  temp = expand_binop_directly (icode, mode, binoptab, op0, op1,
! 					target, unsignedp, methods, last);
  	  if (temp)
  	    return temp;
  	}
      }
  
--- 1539,1548 ----
        if (icode != CODE_FOR_nothing)
  	{
  	  temp = expand_binop_directly (icode, mode, binoptab, op0, op1,
! 					target, unsignedp, methods);
  	  if (temp)
  	    return temp;
+ 	  delete_insns_since (last);
  	}
      }
  
*************** expand_binop (machine_mode mode, optab b
*** 1570,1578 ****
  			       NULL_RTX, unsignedp, OPTAB_DIRECT);
  
        temp = expand_binop_directly (icode, int_mode, otheroptab, op0, newop1,
! 				    target, unsignedp, methods, last);
        if (temp)
  	return temp;
      }
  
    /* If this is a multiply, see if we can do a widening operation that
--- 1568,1577 ----
  			       NULL_RTX, unsignedp, OPTAB_DIRECT);
  
        temp = expand_binop_directly (icode, int_mode, otheroptab, op0, newop1,
! 				    target, unsignedp, methods);
        if (temp)
  	return temp;
+       delete_insns_since (last);
      }
  
    /* If this is a multiply, see if we can do a widening operation that
*************** expand_binop (machine_mode mode, optab b
*** 1623,1644 ****
        if (otheroptab
  	  && (icode = optab_handler (otheroptab, mode)) != CODE_FOR_nothing)
  	{
! 	  /* The scalar may have been extended to be too wide.  Truncate
! 	     it back to the proper size to fit in the broadcast vector.  */
  	  scalar_mode inner_mode = GET_MODE_INNER (mode);
! 	  if (!CONST_INT_P (op1)
! 	      && (GET_MODE_BITSIZE (as_a <scalar_int_mode> (GET_MODE (op1)))
! 		  > GET_MODE_BITSIZE (inner_mode)))
! 	    op1 = force_reg (inner_mode,
! 			     simplify_gen_unary (TRUNCATE, inner_mode, op1,
! 						 GET_MODE (op1)));
  	  rtx vop1 = expand_vector_broadcast (mode, op1);
  	  if (vop1)
  	    {
  	      temp = expand_binop_directly (icode, mode, otheroptab, op0, vop1,
! 					    target, unsignedp, methods, last);
  	      if (temp)
  		return temp;
  	    }
  	}
      }
--- 1622,1654 ----
        if (otheroptab
  	  && (icode = optab_handler (otheroptab, mode)) != CODE_FOR_nothing)
  	{
! 	  /* The scalar may be wider or narrower than the vector element.
! 	     Truncate or extend it to the proper size to fit in the
! 	     broadcast vector.  */
  	  scalar_mode inner_mode = GET_MODE_INNER (mode);
! 	  if (!CONST_INT_P (op1))
! 	    {
! 	      auto mode1 = as_a <scalar_int_mode> (GET_MODE (op1));
! 	      int size1 = GET_MODE_BITSIZE (mode1);
! 	      int inner_size = GET_MODE_BITSIZE (inner_mode);
! 
! 	      if (size1 != inner_size)
! 		{
! 		  auto unary = size1 > inner_size ? TRUNCATE : ZERO_EXTEND;
! 		  op1 = force_reg (inner_mode,
! 				   simplify_gen_unary (unary, inner_mode,
! 						       op1, mode1));
! 		}
! 	    }
! 
  	  rtx vop1 = expand_vector_broadcast (mode, op1);
  	  if (vop1)
  	    {
  	      temp = expand_binop_directly (icode, mode, otheroptab, op0, vop1,
! 					    target, unsignedp, methods);
  	      if (temp)
  		return temp;
+ 	      delete_insns_since (last);
  	    }
  	}
      }
diff -Nrcpad gcc-14.3.0/gcc/po/be.gmo gcc-14.3.0-RC-20260619/gcc/po/be.gmo
*** gcc-14.3.0/gcc/po/be.gmo	Fri May 23 11:19:45 2025
--- gcc-14.3.0-RC-20260619/gcc/po/be.gmo	Fri Jun 19 07:07:43 2026
*************** Last-Translator: Ales Nyakhaychyk <nyakh
*** 19,25 ****
  Language-Team: Belarusian <i18n@tut.by>
  Language: be
  MIME-Version: 1.0
! Content-Type: text/plain; charset=utf-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  
--- 19,25 ----
  Language-Team: Belarusian <i18n@tut.by>
  Language: be
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  
diff -Nrcpad gcc-14.3.0/gcc/po/el.gmo gcc-14.3.0-RC-20260619/gcc/po/el.gmo
*** gcc-14.3.0/gcc/po/el.gmo	Fri May 23 11:19:45 2025
--- gcc-14.3.0-RC-20260619/gcc/po/el.gmo	Fri Jun 19 07:07:43 2026
*************** Last-Translator: Simos Xenitellis <simos
*** 30,36 ****
  Language-Team: Greek <nls@tux.hellug.gr>
  Language: el
  MIME-Version: 1.0
! Content-Type: text/plain; charset=utf-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  
--- 30,36 ----
  Language-Team: Greek <nls@tux.hellug.gr>
  Language: el
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  
diff -Nrcpad gcc-14.3.0/gcc/po/id.gmo gcc-14.3.0-RC-20260619/gcc/po/id.gmo
*** gcc-14.3.0/gcc/po/id.gmo	Fri May 23 11:19:45 2025
--- gcc-14.3.0-RC-20260619/gcc/po/id.gmo	Fri Jun 19 07:07:43 2026
*************** b$Zb)b/�bF�b4
*** 27,79 ****
  e+4e%`e%�e�e�e�e�e%f(Af-jf6�f�f(�fg$5g+Zg"�g-�g,�gh'!h!Ihkh1�h7�hL�hL>i*�iJ�iBj.Dj sj.�jO�jBkKVkJ�kK�kK9lJ�lK�l5m7Rm9�m9�mD�mDCn@�n	�n�n<�no-/o.]oB�o(�o)�o1"p<Tp/�p/�p7�p))q(Sq|q'�q'�q	�q�qr.,r[r"xr�r�r
�r7�r.sJs>`sN�sM�s3<tpt6�t<�t5u7:u-ru+�u-�u*�u1%vWvjv�vJ�v%�v&w&<w cw�wA�w�w�wx.xCxbxx,�x�x2�x$y9By-|y�y�yD�y=z#YzC}z<�zI�z%H{'n{ �{$�{-�{4
  |+?|k|�|�|!�|7�|1#}0U})�}9�}$�}#~ 3~T~!d~"�~�~*�~&�~5:O=�/�-�<&��c�8�B%�&h�$��3���+�+2�"^���
  ��	��)��+҂8��'7�4_���$��(ԃ"��/ �P�!g���*��)Ä,�)�=D�)��"��*υ+��&�-<�'j�)��&��5�'�A�-^�(����·9�!$�'F�'n�9��3Ј;�/@�2p�3��3׉/�3;�3o���)Ê$�@�$S�!x�����ȋ(݋Z�+a�"����ƌ8�$�.@�(o�(��4��9��70�=h�/��4֎.�.:�4i�.��.͏,��9)�9c�9��:א9�:L�9��9��W��WS���!���.�-0�$^�.��(��'ۓ�+#�O�-o�(��<Ɣ�!�(>�g����6�/>�%n�7��G̖@�$U�@z�@�����%�9�O�c�v�������Șݘ���7�K�^�o�������ʙݙ�9�3B�%v�(��FŚ+�+8�+d�+��,��,�4�XK�A��l�5S�;���ŝ1N�2����<Ş2� 5�2V�(��E��3��F,�'s���*��!�6�R=�/���� ա��(�=�"\�*���Ȣ)ݢ7�&?�#f�/��8��8�.,�3[�-��&��'�F�CS�=��8եO�^�0y�/��ڦD�15�,g�0��8ŧH��(G�$p�/��5Ũ��0�"?�'b���F��(�)�/;�6k�A��E� *�4K���4��ԫ�/�8�!X�z���'��)ڬ!�&�"9�&\� ������ԭ/�!�3�4F�${�����6Ԯ<�.H�'w�����ɯ%�
�,�@�9\�4��.˰)��$�?�>T�P��9�#�.B�2q�;���&��1�0P�'��-��G׳/�.O�4~�&��+ڴ0�7�+O� {�/��̵1�!�,;�<h���0Ķ!���#5�Y�=y�C��D��@�6`�����7ɸB�,D�'q�6��+й���!#�5E�#{��� ��Aߺ(!�	J�'T�&|�����*߻*
! �85�"n�����<ʼ2�5:�)p���%��"۽ �� �-@�"n�!��%��%پ �� �1�O�l��������V�-X�1����%�����.��:�?�K�b�%w�,��N��Q�Jk�I����E��a��DB�U��D�� "�WC���1����(��"� <�-]�-��6��#��#�8�D�&]���"����/���H/�Bx�)��V��Q<�R��c��8E�W~�a��i8�A����)��)�7H�*��4��V��S7�/��7��L��(@�&i�7��Y��x"�,��6��d��Od�-��-��2�+C�0o� ��_��:!�*\�:��+��F��$5�3Z�2��/��2��5$�PZ�A����
�2-�<`�2��9��F
! �*Q�6|�'��?��;�<W�$��!��P��4,�`a�6��1��,+�=X�#��0��@��-,�JZ�=��7��.�?J�H��,��n�Ao�3��F��7,�1d�8��0��/�?0�,p�@��"��>�-@�2n���X��4�#L�Ep�����M��F7�-~� ��G��)�.?�Rn���9��X�Hp�)��@��0$�/U���Y��3��42�g�%��#��A��
�>-�(l�.��!��'��'�I6�%�� ��!��-��?�W� q���p���73�6k�*��4��L�-O�7}�K��@�:B�}�+��/��#��;�BQ�1��.��2��(�4>�s�0��,��!��/�8C�/|�U��?�7B�5z�0��O��;1�]m�Z��T&�_{�y��7U�6��*��'���1�&I�3p���+��A��L1�&~�2��-��(�'/�4W���%����/��.�!M�&o�'��!����1��91�k���5��.���.�#D�Bh�A��2�� �#@�4d���-����'��!�@�/Z���<��'��%�%4�Z�]�a�j�s�#��'��T��*2�D]�,����/��)�-?�(m�%��&��%��%	"/&R'y�#��!+'1S��%�'�.9?-y&�'�:�#1=UD�:�8!L-n;�!� �"'>9f*�J�G ^)�-��+�&%VL�2�)�&.D"sA��(�#	4	!S	u	"�	#�	)�	�	
! �	
! 
  
! 
! ,
! E
  
! e
  
! p
  
! {
  
! �
  
! �
! &�
! !�
! �
  
! �
! 
! 
! 
! (
! 3!>
! `k@o+���z.�;�8
)=
,g
/�
,�
.�
A +b.�5��37F<~4�<�-EI-�6�H�6=)t����.�?(O-xG�-�/?LB�U�p%/�N�ZEp<�'�';CL:�@+H%t/�+�O�:F6�7�6�?'Ag:�=�>"3a=�2�CEJ:�H�5J^$q��D�P6_:�&�$�6@TH�H�G'oa�6�&' :N � a� <
! !?G!^�!1�!+"ED"E�"�"4�"T#8r#J�#&�#$$BB$I�$J�$;%V%u%�%A�%;�%6&&]&)z&
! �&�&6�&2�&@('#i'I�'G�'@(B`(1�(;�(#)75)"m)S�)@�)4%*GZ*L�*1�*>!+=`+'�+1�+C�+8<,"u,?�,<�,B-6X-U�-5�-v.l�.2�.G2/Lz/�/H�/!-0O0Fl07�0>�0T*1/1�1D�1C2<V2%�2)�2+�2s3B�3X�3W4sw4H�4[457�5/�5:�5N36�6,�6'�6D�6�77�7G�78+,8$X8}8-�8&�80�8("9K9k9"�94�9-�9#:"5:.X:1�:$�:4�:";*6;Da;=�;<�;=!<*_<L�<D�<L=Ci=F�=>�=A3>Fu>E�>P?GS?C�?/�?-@*=@:h@*�@2�@*A.,A.[A]�A1�AB -B2NB0�B0�B<�B; CR\CB�C�ChD(yDA�D�D�DSEnEE#�E/�E6�EIF,eF4�F-�F!�F%G)=G/gG�G�G#�G�GH)H"CHfH$�H0�H)�H-I4I8II"�I-�I�I�I�I J1J=JPJ*iJ"�J
�J#�J�JK5K'UK6}K"�K9�K9L8KL&�LU�L"M7$M3\MN�M6�M>N;UN=�N3�N:O)>O>hOc�OMPFYPM�P.�P6QETQ��Q$*RhORj�R#S?4S+tS,�S/�S;�SA9TQ{T]�TK+U;wU,�UU�U66VAmV8�V4�V+W&IWGpW+�W�WJX.NXA}X+�X5�X!YBAYK�Y?�Y.ZC?ZC�Z*�Z1�ZC$[h[.�[�[;�[U\*e\>�\M�\.]-L]*z]K�]K�]R=^O�^/�^;_1L_;~_"�_*�_9`9B`'|`M�`;�`&.aTUaO�a8�a�3b��b=lcL�cI�cIAd.�d2�d$�d(e#;e�_e2�e%,fYRf%�f3�f"g/)gBYg0�g1�g.�g8.h!gh�h�h3�h9�h3!iKUi5�i3�iAj1MjGjG�jGk6Wk!�k&�kK�k_#l�l0�l,�l7�lB5mKxmD�m(	n%2n0Xn/�n=�n-�n3%o Yo.zo�o,�o%�op$5p?Zp,�p+�p*�p.q?Mq>�q?�q>r9Kr3�r6�rD�rA5s9ws�sO�s<tA[t7�t:�tNuN_u,�u!�u<�u,:v1gv1�v0�vJ�v*Gw+rwN�w�w
x/-x/]x=�x2�x3�xH2y7{y.�y.�y zL2z%z�z2�z8�z+{8H{�{(�{R�{E|Nb|A�|4�|*(}0S}�}'�}B�}!~0~0E~Uv~4�~-@J3�P�"�93�7m�%��;ˀ.�<6�=s�?��3�8%�B^�+��;͂=	�<G�C��	ȃ҃=�.(�$W�.|�I��C��9�=W�.��>ąW�:[�:��Eц2�IJ�V��/�B�)^�P��;وC�6Y�8��ɉJ�#3�YW�4��T�X;�f��L��CH�]��S�Y>�%��.��7�%�%B�&h�4��=Ď�&!�'H�#p�(��a��(�H�JZ�7��KݐC)�2m�;��"ܑ��0�<�0T�6��+��+�/�/D�Ht�:��I��KB�D��iӔ4=�5r���1ȕ3��0.�p_�'Ж!��>�;Y�8��$Η4�6(�0_�1��5/��J(�Es�0��,�B�/Z�(��4��'�8�,I�,v�-��.ћ(�%)�'O�*w�B��0�-�0D�)u�/��*ϝ-��((�*Q�6|�(��(ܞ"�*(�"S�Bv�?��'��!�G-�Yu�=Ϡ0
�$>�/c�+��&��4�%�+A�*m�m������ģH�"-�1P�D��Ǥ[�[C�*��%ʥ4�!%�8G�1��7��3�7�-V�2����"ԧ��2	�7<�t�3��5Ǩ+��)�-G�4u�M��M��#F�8j�;���ߪ k���/��=ث;�=R�=��1ά=�4>�)s�'��fŭ2,�_�r�������{��k�f��L�4?�t�1��)��'�;�3M�0��)��#ܱ=�?>�2~�G��5��8/�4h�3��2ѳ9�9>�3x�%��"Ҵ+��
!�4/�+d�'��O��=�/F�(v�"��-¶=�=.�Al�Y��%�.�2;�-n�?��ܸ*��:�6S�/��D��9��:9�Kt�G���'�&E�#l�(����ٻ
! ��2�'4�W\�$��%ټ&��&�5;�%q�b��W��VR�B���7��Z6�+��'��4�:�(U�~���*��-����)�$<�a�*v�6��+��2�27�4j�2��2��2�28�2k�(��1��#���=�]�9l���	��-��%��9�.P�?�"��1��7�%L�-r���3��'��2�M�U�r���7��B��B"�(e�7��-��3��6(�#_���1��*��2��20�@c�<����@��@�YT�������=��>�>T�?��P��W$�,|�&��4��2�,8�5e�a��D��;B�;~�C��<��E;�8��L��I�,Q�4~�-��j��@L�H����9��]/�,��W��6�BI�R��"���C�9]�M��_��;E�F��/��J��8C�4|�>��2��9#�.]�3��A���E�1e�;��!��"��6�7O�/����%��1��7&�(^�.��$��0��&�?3�'s�!��*��&���2&�BY�B��4��=�:R�T��A��*$�O�d�)��*��4��6
�D�1[�1��"����0��1,�B^�$��?��@�YG�+��+��-��'�(B�9k�,��2��:�%@�#f�%��=��$��9�WM�/��%��1��M-�O{�?��&�/2�$b�,��&��/���)$�2N�'��4��.��9
�G�9^�<��5��*�.6�9e���8��;��C#�5g���*��(��;��35�;i�/��0��8�I?�+��o��'%�;M�5��5��4��%*�&P�'w�/��3��7�:;�Rv�@��A
! �.L�){�4��6��0�1B�t�c��8��1�HQ�H������6�4O�C��#��>��?+�'k�+��B��%�(�=�(V�'�$��������
�(�$E�j�+�)������	�'�%>�3d�7��7���(�*>�i�2|�2������J�<[�.��#����!
! �H,�Ou�E��G�8S�8��<��-�0�E�W�o�)w�-��.��0��-/�.]�)����"�������5�8O�����:������=+F0r�� ��,@P"h"��*�D�M6���"�!�@FRZ�0�4%.Z5�<�E�.Bnq/�0HA�3�.��*:G<�:�2�H-;v�+�-�-*	
X	;f	�	 �	�	!�	"
! 5
! %F
! !l
! $�
! ,�
! C�
! 9$0^.�!�"�0-4bx=�*�?�@?
A�
�
G�
:&7aB�1�((72`(�&�*�**93dC�;�+;DF�%�7�'%OMp�WKfA�^�RS1�1�
! )&5P'�H�'�+*K/v:�&�+<4q�-�8�"!2/T$�4�G�.&U
! f0q'�&�E�)7/a�/�/�:9A/{5�*�*67Hn(�/�=>NM�c�%?%eX�"�(1FxO���! ?' :g 3� /� 5!@<!K}!K�!1"-G"3u"�"&�"%�"&#'/#3W#=�#$�#*�#Y$0s$G�$"�$6%7F%:~%.�%)�%7&7J&9�&C�&A'EB'A�'A�'C(@P(�(5�(6�(*)!C)4e)E�)@�)9!*C[*�*�*�*:�*,!+/N+!~+;�+#�+&,+',.S,�,�,"�,.�,
-!-8-O-e-{-�-�-�-�-�-�-.*.@.V.l.�.�.�.�.�.�.//5/K/`/v/�/�/�/�/�/�/0+0A0W0m02�0�0�0&�0!	13+1;_1&�1#�1�15�1;/28k2:�2/�213$A3$f3�3#�3*�3#�348:4 s4B�4�4%�4+5,I5#v5.�5-�5A�5296*l6#�6)�66�6`7 }7�7�7�7*�78)(8)R8)|8)�8)�8)�8)$9)N9)x9)�9)�9"�9*:&D:%k: �:"�:�:�:;-;"G;j;�;�;�;'�;'<,6<8c<6�<"�<1�<(=G=%d=)�=)�=2�=@>R>$p>3�>�>D�>,?'E?Em?O�?.@+2@1^@*�@+�@#�@.A":A<]A(�A:�A?�A>BQ^B"�Ba�BH5C3~C.�C9�C;D2WD7�D7�D5�DC0EQtEW�E)F*HFDsF3�F-�F G0;GHlGV�G$H1HFH.ZH%�H$�H$�H'�H$!I/FI-vI%�I?�I4
! J/?J/oJ2�J&�J�J$KH6K7K.�K"�K	L#L$<LaL9{L�L(�L'�L)MEM>WM"�M�MH�M2NVKN,�N)�N5�N)/OYOwO'�O�O&�OP&!P+HP)tP4�P<�P'Q$8Q]Q"iQ4�Q4�Q@�Q-7R-eRI�R;�R[SLuSH�S<THHT+�T4�T9�T/,U3\U1�U�U#�UA�U1@VrV(�V1�V.�V/WLW_WzW�W�W4�W�W)
X"7XZXgX
yX5�X�X(�X�X(Y0EY"vYT�Y)�YZ34Z-hZ,�Z�Z*�Z/[98["r[��[U\$n\ �\8�\U�\;C]6]�]7�](^",^!O^"q^ �^C�^+�^"%_$H_#m_3�_>�_Y`8^`�`*�`0�`3a,9a5fa"�a �a?�a b?b@Xb[�bB�b58c,nc9�c<�c-d5@d7vd2�d�dHe4Je%e8�e2�e-f@?f.�f,�f9�f9g#Pg-tg8�g:�g7h>Nh6�h.�h-�h+!i;Mi=�i8�iEj*Fj8qj1�j<�j4k#Nk:rk	�k�k7�k)lI5l&l6�lF�lO$mOtm<�m7n-9ngn%}n�n@�nAo=Eo%�o"�o0�oM�oAKp(�pE�p5�pN2q�qH�q9�q.#r8Rr2�r$�r.�rs&s!Cses%�s*�s1�s;tCt*ct�t,�t5�t(u69u;pu�u/�u&�u!v@Av2�vM�vMw.Qwb�w@�w2$x%Wx6}xX�xL
yUZyU�yUzT\zU�zT{B\{D�{<�{G!|Ni|N�|H}	P}Z}@f}�}7�}9�}M,~3z~5�~3�~C4\6�<�+�+1�(]�*��*��	܀��- �'N�'v�����
݁<�5(�^�Lr�]��U�7s�!��<̓>
! �7I�8��7��8�9+�+e�-����#х��H�0[�+��$�� ݆"��M!�o�������ԇ��0/�`�:�/��E�30�#d���I��B�*-�MX�H��Z�,J�,w�#��(ȋ2�=$�/b�#����֌-�G!�6i�6��8׍I�2Z�1��$���$�%�?�/Z�7��?D�BG�-��.��E��-�@��W�)I�)s�4��%Ғ/��.(� W�x�
! ����4��6ד<�2K�8~���+ה3�'7�/_���G����*�):�-d�+��F��F�$L�-q�.��Η<�#%�+I�7u�7��(�"�31�-e� ����;ϙ"�7.�.f�E��;ۚC�*[�-��:��;�7+�;c�=��,ݜ6
! �2A�Gt�+��,��3�M�-g�_��)���>�%\�7��%��5��+�.B�@q�H��F��PB�6��>ʡ4	�5>�>t�5��5�4�BT�B��LڣF'�Fn�F��E��EB�a��a�L�d�$��8��4�#�*;�%f�&��#��,ק�5$�+Z�<�� è�*�,��E�Aѩ5�-I�Gw�P��G�5X�6��6ū���!�3�G�Y�j�}�������Ǭ۬����-�>�O�i�|�������ƭ5ܭ7�0J�"{�P��4�4$�4Y�4��4ï*��C#�Tg�I��t�/{�D����8r�9���2��()�R�4q�.��Gճ?�V]�0��!�.�$6�B[�X��@��8�'S�#{�/�� ϶$�9�)O�y�2��Aʷ1�.>�7m�:��3�.�1C�)u�)��5ɹP��OP�I��H�Y3�%��;��0� �S<�A��1Ҽ7�:<�Zw�/ҽ-�90�7j���7��&�+�E�Ta�3��+�5�9L�N��N��&$�4K�!��9��#���A�'a�-�� ��$��-��0+�\�z�'��3��#���$,�)Q�5{�����<��-!�O�o�I��K��;%�5a�����#��&��'�3�I�<f�:��5��-�!B�d�L��d��K4�-��:��>��O(�"x�1��;��;	�3E�4y�N��6��44�Ai�.��3��:�!I�3k�(��4����A�'^�)��=��!��@�/Q�*��+��'��F�GG�U��!��B�J�c�4z�M��,��(*�8S�-������!��C�)E�o�&��B��0��)�-6�(d�!����*��+��A&�$h� ����:��0	�6:�*q���$����!��!�,?�!l���+��-��"�+�=�\�z�������	CM����F3	�I���G�4-�	�!
  d���b	W
  �B�5�	���9		5�?8�;��	M	�	r�T
  �	�*m�.B���o	�����,�Q
--- 27,84 ----
  e+4e%`e%�e�e�e�e�e%f(Af-jf6�f�f(�fg$5g+Zg"�g-�g,�gh'!h!Ihkh1�h7�hL�hL>i*�iJ�iBj.Dj sj.�jO�jBkKVkJ�kK�kK9lJ�lK�l5m7Rm9�m9�mD�mDCn@�n	�n�n<�no-/o.]oB�o(�o)�o1"p<Tp/�p/�p7�p))q(Sq|q'�q'�q	�q�qr.,r[r"xr�r�r
�r7�r.sJs>`sN�sM�s3<tpt6�t<�t5u7:u-ru+�u-�u*�u1%vWvjv�vJ�v%�v&w&<w cw�wA�w�w�wx.xCxbxx,�x�x2�x$y9By-|y�y�yD�y=z#YzC}z<�zI�z%H{'n{ �{$�{-�{4
  |+?|k|�|�|!�|7�|1#}0U})�}9�}$�}#~ 3~T~!d~"�~�~*�~&�~5:O=�/�-�<&��c�8�B%�&h�$��3���+�+2�"^���
  ��	��)��+҂8��'7�4_���$��(ԃ"��/ �P�!g���*��)Ä,�)�=D�)��"��*υ+��&�-<�'j�)��&��5�'�A�-^�(����·9�!$�'F�'n�9��3Ј;�/@�2p�3��3׉/�3;�3o���)Ê$�@�$S�!x�����ȋ(݋Z�+a�"����ƌ8�$�.@�(o�(��4��9��70�=h�/��4֎.�.:�4i�.��.͏,��9)�9c�9��:א9�:L�9��9��W��WS���!���.�-0�$^�.��(��'ۓ�+#�O�-o�(��<Ɣ�!�(>�g����6�/>�%n�7��G̖@�$U�@z�@�����%�9�O�c�v�������Șݘ���7�K�^�o�������ʙݙ�9�3B�%v�(��FŚ+�+8�+d�+��,��,�4�XK�A��l�5S�;���ŝ1N�2����<Ş2� 5�2V�(��E��3��F,�'s���*��!�6�R=�/���� ա��(�=�"\�*���Ȣ)ݢ7�&?�#f�/��8��8�.,�3[�-��&��'�F�CS�=��8եO�^�0y�/��ڦD�15�,g�0��8ŧH��(G�$p�/��5Ũ��0�"?�'b���F��(�)�/;�6k�A��E� *�4K���4��ԫ�/�8�!X�z���'��)ڬ!�&�"9�&\� ������ԭ/�!�3�4F�${�����6Ԯ<�.H�'w�����ɯ%�
�,�@�9\�4��.˰)��$�?�>T�P��9�#�.B�2q�;���&��1�0P�'��-��G׳/�.O�4~�&��+ڴ0�7�+O� {�/��̵1�!�,;�<h���0Ķ!���#5�Y�=y�C��D��@�6`�����7ɸB�,D�'q�6��+й���!#�5E�#{��� ��Aߺ(!�	J�'T�&|�����*߻*
! �85�"n�����<ʼ2�5:�)p���%��"۽ �� �-@�"n�!��%��%پ �� �1�O�l��������Q�-S�1����%�����.��:��:�F�]�%r�,��N��Q�Jf�I�����E��a��D=�U��D�� �W>���1����(��"� 7�-X�-��6��#��#�3�?�&X��"����/��
! �H*�Bs�)��V��Q7�R��c��8@�Wy�a��i3�A����)��)�7C�*{�4��V��S2�/��7��L��(;�&d�7��Y��x�,��6��d��O_�-��-��2�+>�0j� ��_��:�*W�:��+��F��$0�3U�2��/��2��5�PU�A�����2(�<[�2��9��F�*L�6w�'��?��;�<R�$��!��P��4'�`\�6��1��,&�=S�#��0��@��-'�JU�=��7��.�?E�H��,��n��Aj�3��F��7'�1_�8��0��/��?+�,k�@��"��>��-;�2i���X��4�#G�Ek�����M��F2�-y� ��G��)�.:�Ri���9��X�Hk�)��@��0�/P���Y��3��4-�b�%|�#��A���>(�(g�.��!��'��'	�I1�%{� ��!��-��?�R� l���p���7.�6f�*��4��L��-J�7x�K��@��:=�x�+��/��#��;�BL�1��.��2��#�49�n�0��,��!��/�8>�/w�U��?��7=�5u�0��O��;,�]h�Z��T!�_v�y��7P�6��*��'���,�&D�3k���+��A��L,�&y�2��-��(�'*�4R���%����/��.�!H�&j�'��!����1��9,�f���5��.��
! �)�#?�Bc�A��2���#;�4_���-����'��!�;�/U���<��'��%	�%/�U�X�\�e�n�#��'��T��*-�DX�,����/��)�-:�(h�%��&��%��%"*&M't�#��!+"1N��%�'�.9:-t&�'�:�#,=PD�:�8!G-i;�!� �"'99a*�J�G Y)z�-��+�& VG�2�)�&.?"nA��(�#	/	!N	p	"	#�	)�	�	
! �	
! �	
! 
! ,
! @
  
! `
  
! k
  
! v
  
! �
  
! �
! &�
! !�
! �
  
! �
! �
  
! 

! 
! #
! .!9
! [f@j+���u.�;�8�)8
,b
/�
,�
.�
A+].�5��3
7A<y4�<�(ED-�6�H�68)o����.�?
! (J-sG�-�/?GB�U�p /�N�ZEk<�'�';>Lz:�@+C%o/�+�O�:A6|7�6�?"Ab:�=�>3\=�2�CEE:�H�5EY$l��D�P	6Z:�&�$�6@OH�H�G"ja�6�&" :I � a� <!?B!^�!1�!+"E?"E�"�"4�"T#8m#J�#&�#$$B=$I�$J�$;%Q%p%�%A�%;�%6!&X&)u&
! �&�&6�&2�&@#'#d'I�'G�'@(B[(1�(;�(#)70)"h)S�)@�)4 *GU*L�*1�*>+=[+'�+1�+C�+87,"p,?�,<�,B-6S-U�-5�-v.l�.2�.G-/Lu/�/H�/!(0J0Fg07�0>�0T%1/z1�1D�1C
2<Q2%�2)�2+�2s
! 3B~3X�3W4sr4H�4[/57�5/�5:�5N.6}6,�6'�6D�6�27�7G�78+'8$S8x8-�8&�80�8(9F9f9"�94�9-�9#:"0:.S:1�:$�:4�:";*1;D\;=�;<�;=<*Z<L�<D�<L=Cd=F�=>�=A.>Fp>E�>P�>GN?C�?/�?-
! @*8@:c@*�@2�@*�@.'A.VA]�A1�AB (B2IB0|B0�B<�B;CRWCB�C�ChD(tDA�D�D�DSEiEzE#�E/�E6�EIF,`F4�F-�F!�F%G)8G/bG�G�G#�G�GH$H">HaH$�H0�H)�H-I/I8DI"}I-�I�I�I�I J,J8JKJ*dJ"�J
�J#�J�J�J5K'PK6xK"�K9�K9L8FL&LU�L"�L7M3WMN�M6�M>N;PN=�N3�N:�N)9O>cOc�OMPFTPM�P.�P6QEOQ��Q$%RhJRj�RS?/S+oS,�S/�S;�SA4TQvT]�TK&U;rU,�UU�U61VAhV8�V4�V+W&DWGkW+�W�WJ�W.IXAxX+�X5�XYB<YKY?�Y.ZC:ZC~Z*�Z1�ZC[c[.�[�[;�[U
! \*`\>�\M�\.]-G]*u]K�]K�]R8^O�^/�^;_1G_;y_"�_*�_9`9=`'w`M�`;�`&)aTPaO�a8�a�.b��b=gcL�cI�cI<d.�d2�d$�d(
e#6e�Ze2�e%'fYMf%�f3�f"g/$gBTg0�g1�g.�g8)h!bh�h�h3�h9�h3iKPi5�i3�iAj1HjGzjG�jG
! k6Rk!�k&�kK�k_l~l0�l,�l7�lB0mKsmD�m(n%-n0Sn/�n=�n-�n3 o To.uo�o,�o%�op$0p?Up,�p+�p*�p.q?Hq>�q?�q>r9Fr3�r6�rD�rA0s9rs�sO�s<tAVt7�t:�tNuNZu,�u!�u<�u,5v1bv1�v0�vJ�v*Bw+mwN�w�wx/(x/Xx=�x2�x3�xH-y7vy.�y.�y zL-z%zz�z2�z8�z&{8C{|{(�{R�{E|N]|A�|4�|*#}0N}}'�}B�}!	~+~0@~Uq~4�~�~(@E3�P�"�9.�7h�%��;ƀ.�<1�=n�?��3�8 �BY�+��;Ȃ=�<B�C�	Ã̓=�.#�$R�.w�I��C��4�=R�.��>��W��:V�:��Ĕ2�IE�V��/�B�)Y�P��;ԈC�6T�8��ĉJ�#.�YR�4��T�X6�f��L��CC�]��S�Y9�%��.��7� �%=�&c�4��=����&�'C�#k�(��a��(�C�JU�7��KؐC$�2h�;��"ב��0�7�0O�6��+��+�/�/?�Ho�:��I�K=�D��iΔ48�5m���1Õ3��0)�pZ�'˖!�>�;T�8��$ɗ4�6#�0Z�1��5��/�J#�En�0��,�B�/U�(��4��'�8�,D�,q�-��.̛(��%$�'J�*r�B��0��-�0?�)p�/��*ʝ-��(#�*L�6w�(��(מ"�*#�"N�Bq�?��'���G(�Yp�=ʠ0�$9�/^�+��&��4�%�+<�*h�m��������Hߣ"(�1K�D}�¤[�[>�*��%ť4�! �8B�1{�7��3�7�-Q�2���"ϧ�2�77�o�3��5¨+��$�-B�4p�M��M�#A�8e�;���ڪ f���/��=ӫ;�=M�=��1ɬ=��49�)n�'��f��2'�Z�m�������{��k�f��L��4:�o�1��)��'�;�3H�0|�)��#ױ=��?9�2y�G��5��8*�4c�3��2̳9��99�3s�%��"ʹ+�
�4*�+_�'��O��=�/A�(q�"��-��=�=)�Ag�Y��%�)�26�-i�?��׸*�:�6N�/��D��9��:4�Ko�G���"�&@�#g�(����Ի
! �2��'/�WW�$��%Լ&��!�56�%l�b��W��VM�B���7��Z1�+��'��4�:�(P�y���*��-�����$�$7�\�*q�6��+��2��22�4e�2��2��2�23�2f�(��1��#���8�X�9g���	��-��%��9�.K�?z�"��1��7�%G�-m���3��'��2�H�P�m���7��B��B�(`�7��-��3��6#�#Z�~�1��*��2��2+�@^�<����@��;�YO�������=��>�>O�?��P��W�,w�&��4��2�,3�5`�a��D��;=�;y�C��<��E6�8|�L��I�,L�4y�-��j��@G�H����9��]*�,��W��6
�BD�R��"����C�9X�M��_��;@�F|�/��J��8>�4w�>��2��9�.X�3��A����E�1`�;��!��"��6�7J�/����%��1��7!�(Y�.��$��0��&�?.�'n�!��*��&��
! �2!�BT�B��4��=�:M�T��A��*�J�_�)~�*��4��6�?�1V�1��"����0��1'�BY�$��?��@�YB�+��+��-��"�(=�9f�,��2��:�%;�#a�%��=��$��9�WH�/��%��1��M(�Ov�?��&�/-�$]�,��&��/���)�2I�'|�4��.��9�B�9Y�<��5��*�.1�9`���8��;��C�5b���*��(��;��30�;d�/��0��8�I:�+��o��' �;H�5��5��4��%%�&K�'r�/��3��7��:6�Rq�@��A�.G�)v�4��6��0�1=�o�c��8��,�HL�H������6�4J�C�#��>��?&�'f�+��B��%��#�8�(Q�'z�$��������
	�(�$@�e�+z�)�������"�%9�3_�7��7���#�*9�d�2w�2������J�<V�.��#����!�H'�Op�E��G�8N�8��<��-��+�@�R�j�)r�-��.��0��-*�.X�)����"�������0�8J�����:������=+A0m�� ��,;K"c"��*�D�M1��"�!�@FMZ�0�4 .U5�<�E�.=nl/�0H<�3�.��*:B<}:�2�H(;q�+�-�-%	
S	;a	�	 �	�	!�	"
! 0
! %A
! !g
! $�
! ,�
! C�
! 90Y.�!�"�0�-/]s=�*�?�@:
A{
�
G�
:!7\B�1�(	(22[(�&�*�*	*43_C�;�+;?F{%�7�' OHp�W	KaA�^�RN1�1�)!5K'�H�'�+*F/q:�&�+</l�-�8�"
! !-/O$4�G�.!P
! a0l'�&�E�)2/\�/�/�:9</v5�*�*62Hi(�/�=>IM�c�%:%`X�"�(1AsO���! ?" :b 3� /� 5!@7!Kx!K�!1"-B"3p"�"&�"%�"&#'*#3R#=�#$�#*�#Y$0n$G�$"�$6
! %7A%:y%.�%)�%7
&7E&9}&C�&A�&E='A�'A�'C(@K(�(5�(6�(*)!>)4`)E�)@�)9*CV*�*�*�*:�*,+/I+!y+;�+#�+&�++",.N,},�,"�,.�,--3-J-`-v-�-�-�-�-�-�-.%.;.Q.g.~.�.�.�.�.�.//0/F/[/q/�/�/�/�/�/�/0&0<0R0h02~0�0�0&�0!13&1;Z1&�1#�1�15�1;*28f2:�2/�21
! 3$<3$a3�3#�3*�3#�34854 n4B�4�4%�4+5,D5#q5.�5-�5A�5246*g6#�6)�66�6`7 x7�7�7�7*�78)#8)M8)w8)�8)�8)�8)9)I9)s9)�9)�9"�9*:&?:%f: �:"�:�:�:	;(;"B;e;�;�;�;'�;'	<,1<8^<6�<"�<1�<#=B=%_=)�=)�=2�=@>M>$k>3�>�>D�>'?'@?Eh?O�?.�?+-@1Y@*�@+�@#�@.A"5A<XA(�A:�A?�A9BQYB"�Ba�BH0C3yC.�C9�C;D2RD7�D7�D5�DC+EQoEW�E)F*CFDnF3�F-�F G06GHgGV�G$H,HAH.UH%�H$�H$�H'�H$I/AI-qI%�I?�I4J/:J/jJ2�J&�J�J$KH1K7zK.�K"�KL#L$7L\L9vL�L(�L'�L)M@M>RM"�M�MH�M2NVFN,�N)�N5�N)*OTOrO'�O�O&�O�O&P+CP)oP4�P<�P'Q$3QXQ"dQ4�Q4�Q@�Q-2R-`RI�R;�R[SLpSH�S<THCT+�T4�T9�T/'U3WU1�U�U#�UA�U1;VmV(�V1�V.�V/WGWZWuW�W�W4�W�W)X"2XUXbX
tX5�X�X(�X�X(Y0@Y"qYT�Y)�YZ3/Z-cZ,�Z�Z*�Z/[93["m[��[U\$i\ �\8�\U�\;>]6z]�]7�](�]"'^!J^"l^ �^C�^+�^" _$C_#h_3�_>�_Y�_8Y`�`*�`0�`3a,4a5aa"�a �a?�ab:b@Sb[�bB�b53c,ic9�c<�c-
d5;d7qd2�d�dH�d4Ee%ze8�e2�e-f@:f.{f,�f9�f9g#Kg-og8�g:�g7h>Ih6�h.�h-�h+i;Hi=�i8�iE�i*Aj8lj1�j<�j4k#Ik:mk	�k�k7�k)lI0l&zl6�lF�lOmOom<�m7�m-4nbn%xn�n@�nA�n=@o%~o"�o0�oM�oAFp(�pE�p5�pN-q|qH�q9�q.r8Mr2�r$�r.�r
s!s!>s`s%s*�s1�s;t>t*^t�t,�t5�t(u64u;ku�u/�u&�u!v@<v2}vM�vM�v.Lwb{w@�w2x%Rx6xxX�xLyUUyU�yUzTWzU�zT{BW{D�{<�{G|Nd|N�|H}	K}U}@a}�}7�}9�}M'~3u~5�~3�~C4W6�<�+�+,�(X�*��*��	׀���-�'I�'q�����
؁<�5#�Y�Lm�]��U�7n�!��<ȃ>�7D�8|�7��8�9&�+`�-����#̅��H
�0V�+��$�� ؆"��M�j�������χ��0*�[�:z�/��E�3+�#_���I��B�*(�MS�H��Z�,E�,r�#��(Ë2�=�/]�#����ь-�G�6d�6��8ҍI�2U�1��$��ߎ$�%�:�/U�7��?��D��BB�-��.��E��(�@��W�)D�)n�4��%͒/�.#� R�s�
! ����4��6ғ<	�2F�8y���+Ҕ3��'2�/Z���G���*
! �)5�-_�+��F��F�$G�-l�.��ɗ<�# �+D�7p�7��(��"	�3,�-`� ����;ʙ"�7)�.a�E��;֚C�*V�-��:��;�7&�;^�=��,؜6�2<�Go�+��,��.�H�-b�_��)��9�%W�7}�%��5۟+�.=�@l�H��F��P=�6��>š4�59�>o�5��5�4�BO�B��LգF"�Fi�F��E��E=�a��a�G�_�$�8��4ݦ#�*6�%a�&��#��,ҧ��5�+U�<�� ��ߨ*��'��@�A̩5�-D�Gr�P��G�5S�6��6����	��.�B�T�e�x�������¬֬����(�9�J�d�w���������5׭7
�0E�"v�P��4�4�4T�4��4��*�C�Tb�I��t�/v�D����8m�9���2�($�M�4l�.��Gг?�VX�0��!�.�$1�BV�X��@�3�'N�#v�/�� ʶ$�9�)J�t�2��Aŷ1�.9�7h�:��3۸.�1>�)p�)��5ĹP��OK�I��H�Y.�%��;��0��S7�A��1ͼ7��:7�Zr�/ͽ-��9+�7e���7��&��+�@�T\�3��+�5�9G�N��N��&�4F�!{�9��#����A�'\�-�� ��$��-��0&�W�u�'��3��#��
! �$'�)L�5v�����<��-�J�j�I��K��; �5\�����#��&��'�.�D�<a�:��5��-�!=�_�L}�d��K/�-{�:��>��O#�"s�1��;��;�3@�4t�N��6��4/�Ad�.��3��:	�!D�3f�(��4����A�'Y�)��=��!��@�/L�*|�+��'��F��GB�U��!��B�E�^�4u�M��,��(%�8N�-������!��C��)@�j�&��B��0��$�-1�(_�!����*��+��A!�$c� ����:��0�65�*l���$����!��!�,:�!g���+��-��"�&�8�W�u�������	CM����F3	�I���G�4-�	�!
  d���b	W
  �B�5�	���9		5�?8�;��	M	�	r�T
  �	�*m�.B���o	�����,�Q
*************** Last-Translator: Arif E. Nugroho <arif_e
*** 396,402 ****
  Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>
  Language: id
  MIME-Version: 1.0
! Content-Type: text/plain; charset=ISO-8859-1
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  
--- 401,407 ----
  Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>
  Language: id
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  
diff -Nrcpad gcc-14.3.0/gcc/pointer-query.cc gcc-14.3.0-RC-20260619/gcc/pointer-query.cc
*** gcc-14.3.0/gcc/pointer-query.cc	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/pointer-query.cc	Fri Jun 19 06:51:03 2026
*************** get_offset_range (tree x, gimple *stmt,
*** 74,80 ****
      x = TREE_OPERAND (x, 0);
  
    tree type = TREE_TYPE (x);
!   if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
      return false;
  
     if (TREE_CODE (x) != INTEGER_CST
--- 74,85 ----
      x = TREE_OPERAND (x, 0);
  
    tree type = TREE_TYPE (x);
!   if ((!INTEGRAL_TYPE_P (type)
!        /* ???  We get along without caring about overflow by using
! 	  offset_int, but that falls apart when indexes are bigger
! 	  than pointer differences.  */
!        || TYPE_PRECISION (type) > TYPE_PRECISION (ptrdiff_type_node))
!       && !POINTER_TYPE_P (type))
      return false;
  
     if (TREE_CODE (x) != INTEGER_CST
diff -Nrcpad gcc-14.3.0/gcc/range-op-float.cc gcc-14.3.0-RC-20260619/gcc/range-op-float.cc
*** gcc-14.3.0/gcc/range-op-float.cc	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/range-op-float.cc	Fri Jun 19 06:51:03 2026
*************** operator_not_equal::fold_range (irange &
*** 759,764 ****
--- 759,767 ----
        // Avoid frelop_early_resolve() below as it could fold to FALSE
        // without regards to NANs.  This would be incorrect if trying
        // to fold x_5 != x_5 without prior knowledge of NANs.
+       // Still, if either operand is undefined, return VARYING.
+       if (empty_range_varying (r, type, op1, op2))
+ 	return true;
      }
    else if (frelop_early_resolve (r, type, op1, op2, trio, VREL_NE))
      return true;
diff -Nrcpad gcc-14.3.0/gcc/range-op.cc gcc-14.3.0-RC-20260619/gcc/range-op.cc
*** gcc-14.3.0/gcc/range-op.cc	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/range-op.cc	Fri Jun 19 06:51:03 2026
*************** operator_widen_mult_signed::wi_fold (ira
*** 2280,2291 ****
  				     const wide_int &rh_lb,
  				     const wide_int &rh_ub) const
  {
!   signop s = TYPE_SIGN (type);
! 
!   wide_int lh_wlb = wide_int::from (lh_lb, wi::get_precision (lh_lb) * 2, SIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, wi::get_precision (lh_ub) * 2, SIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, wi::get_precision (rh_lb) * 2, s);
!   wide_int rh_wub = wide_int::from (rh_ub, wi::get_precision (rh_ub) * 2, s);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
--- 2280,2289 ----
  				     const wide_int &rh_lb,
  				     const wide_int &rh_ub) const
  {
!   wide_int lh_wlb = wide_int::from (lh_lb, TYPE_PRECISION (type), SIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, TYPE_PRECISION (type), SIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, TYPE_PRECISION (type), SIGNED);
!   wide_int rh_wub = wide_int::from (rh_ub, TYPE_PRECISION (type), SIGNED);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
*************** operator_widen_mult_signed::wi_fold (ira
*** 2293,2299 ****
    return op_mult.wi_fold (r, type, lh_wlb, lh_wub, rh_wlb, rh_wub);
  }
  
- 
  class operator_widen_mult_unsigned : public range_operator
  {
  public:
--- 2291,2296 ----
*************** operator_widen_mult_unsigned::wi_fold (i
*** 2312,2323 ****
  				       const wide_int &rh_lb,
  				       const wide_int &rh_ub) const
  {
!   signop s = TYPE_SIGN (type);
  
!   wide_int lh_wlb = wide_int::from (lh_lb, wi::get_precision (lh_lb) * 2, UNSIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, wi::get_precision (lh_ub) * 2, UNSIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, wi::get_precision (rh_lb) * 2, s);
!   wide_int rh_wub = wide_int::from (rh_ub, wi::get_precision (rh_ub) * 2, s);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
--- 2309,2347 ----
  				       const wide_int &rh_lb,
  				       const wide_int &rh_ub) const
  {
!   wide_int lh_wlb = wide_int::from (lh_lb, TYPE_PRECISION (type), UNSIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, TYPE_PRECISION (type), UNSIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, TYPE_PRECISION (type), UNSIGNED);
!   wide_int rh_wub = wide_int::from (rh_ub, TYPE_PRECISION (type), UNSIGNED);
  
!   /* We don't expect a widening multiplication to be able to overflow but range
!      calculations for multiplications are complicated.  After widening the
!      operands lets call the base class.  */
!   return op_mult.wi_fold (r, type, lh_wlb, lh_wub, rh_wlb, rh_wub);
! }
! 
! class operator_widen_mult_signed_unsigned : public range_operator
! {
! public:
!   virtual void wi_fold (irange &r, tree type,
! 			const wide_int &lh_lb,
! 			const wide_int &lh_ub,
! 			const wide_int &rh_lb,
! 			const wide_int &rh_ub)
!     const;
! } op_widen_mult_signed_unsigned;
! 
! void
! operator_widen_mult_signed_unsigned::wi_fold (irange &r, tree type,
! 					      const wide_int &lh_lb,
! 					      const wide_int &lh_ub,
! 					      const wide_int &rh_lb,
! 					      const wide_int &rh_ub) const
! {
!   wide_int lh_wlb = wide_int::from (lh_lb, TYPE_PRECISION (type), SIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, TYPE_PRECISION (type), SIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, TYPE_PRECISION (type), UNSIGNED);
!   wide_int rh_wub = wide_int::from (rh_ub, TYPE_PRECISION (type), UNSIGNED);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
*************** range_op_table::initialize_integral_ops
*** 4452,4457 ****
--- 4476,4482 ----
    set (ABSU_EXPR, op_absu);
    set (OP_WIDEN_MULT_SIGNED, op_widen_mult_signed);
    set (OP_WIDEN_MULT_UNSIGNED, op_widen_mult_unsigned);
+   set (OP_WIDEN_MULT_SIGNED_UNSIGNED, op_widen_mult_signed_unsigned);
    set (OP_WIDEN_PLUS_SIGNED, op_widen_plus_signed);
    set (OP_WIDEN_PLUS_UNSIGNED, op_widen_plus_unsigned);
  
diff -Nrcpad gcc-14.3.0/gcc/range-op.h gcc-14.3.0-RC-20260619/gcc/range-op.h
*** gcc-14.3.0/gcc/range-op.h	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/range-op.h	Fri Jun 19 06:51:03 2026
*************** extern void wi_set_zero_nonzero_bits (tr
*** 287,297 ****
  // Add them to the end of the tree-code vector, and provide a name for
  // each allowing for easy access when required.
  
! #define OP_WIDEN_MULT_SIGNED	((unsigned) MAX_TREE_CODES)
! #define OP_WIDEN_MULT_UNSIGNED	((unsigned) MAX_TREE_CODES + 1)
! #define OP_WIDEN_PLUS_SIGNED	((unsigned) MAX_TREE_CODES + 2)
! #define OP_WIDEN_PLUS_UNSIGNED	((unsigned) MAX_TREE_CODES + 3)
! #define RANGE_OP_TABLE_SIZE	((unsigned) MAX_TREE_CODES + 4)
  
  // This implements the range operator tables as local objects.
  
--- 287,298 ----
  // Add them to the end of the tree-code vector, and provide a name for
  // each allowing for easy access when required.
  
! #define OP_WIDEN_MULT_SIGNED		((unsigned) MAX_TREE_CODES)
! #define OP_WIDEN_MULT_UNSIGNED		((unsigned) MAX_TREE_CODES + 1)
! #define OP_WIDEN_MULT_SIGNED_UNSIGNED	((unsigned) MAX_TREE_CODES + 2)
! #define OP_WIDEN_PLUS_SIGNED		((unsigned) MAX_TREE_CODES + 3)
! #define OP_WIDEN_PLUS_UNSIGNED		((unsigned) MAX_TREE_CODES + 4)
! #define RANGE_OP_TABLE_SIZE		((unsigned) MAX_TREE_CODES + 5)
  
  // This implements the range operator tables as local objects.
  
diff -Nrcpad gcc-14.3.0/gcc/real.cc gcc-14.3.0-RC-20260619/gcc/real.cc
*** gcc-14.3.0/gcc/real.cc	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/real.cc	Fri Jun 19 06:51:03 2026
*************** static int do_compare (const REAL_VALUE_
*** 101,107 ****
  static void do_fix_trunc (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
  
  static unsigned long rtd_divmod (REAL_VALUE_TYPE *, REAL_VALUE_TYPE *);
! static void decimal_from_integer (REAL_VALUE_TYPE *);
  static void decimal_integer_string (char *, const REAL_VALUE_TYPE *,
  				    size_t);
  
--- 101,107 ----
  static void do_fix_trunc (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
  
  static unsigned long rtd_divmod (REAL_VALUE_TYPE *, REAL_VALUE_TYPE *);
! static void decimal_from_integer (REAL_VALUE_TYPE *, int);
  static void decimal_integer_string (char *, const REAL_VALUE_TYPE *,
  				    size_t);
  
*************** real_from_integer (REAL_VALUE_TYPE *r, f
*** 2230,2236 ****
      {
        unsigned int len = val_in.get_precision ();
        int i, j, e = 0;
-       int maxbitlen = MAX_BITSIZE_MODE_ANY_INT + HOST_BITS_PER_WIDE_INT;
        const unsigned int realmax = (SIGNIFICAND_BITS / HOST_BITS_PER_WIDE_INT
  				    * HOST_BITS_PER_WIDE_INT);
  
--- 2230,2235 ----
*************** real_from_integer (REAL_VALUE_TYPE *r, f
*** 2238,2249 ****
        r->cl = rvc_normal;
        r->sign = wi::neg_p (val_in, sgn);
  
-       /* We have to ensure we can negate the largest negative number.  */
-       wide_int val = wide_int::from (val_in, maxbitlen, sgn);
- 
-       if (r->sign)
- 	val = -val;
- 
        /* Ensure a multiple of HOST_BITS_PER_WIDE_INT, ceiling, as elt
  	 won't work with precisions that are not a multiple of
  	 HOST_BITS_PER_WIDE_INT.  */
--- 2237,2242 ----
*************** real_from_integer (REAL_VALUE_TYPE *r, f
*** 2252,2258 ****
        /* Ensure we can represent the largest negative number.  */
        len += 1;
  
!       len = len/HOST_BITS_PER_WIDE_INT * HOST_BITS_PER_WIDE_INT;
  
        /* Cap the size to the size allowed by real.h.  */
        if (len > realmax)
--- 2245,2257 ----
        /* Ensure we can represent the largest negative number.  */
        len += 1;
  
!       len = len / HOST_BITS_PER_WIDE_INT * HOST_BITS_PER_WIDE_INT;
! 
!       /* We have to ensure we can negate the largest negative number.  */
!       wide_int val = wide_int::from (val_in, len, sgn);
! 
!       if (r->sign)
! 	val = -val;
  
        /* Cap the size to the size allowed by real.h.  */
        if (len > realmax)
*************** real_from_integer (REAL_VALUE_TYPE *r, f
*** 2260,2273 ****
  	  HOST_WIDE_INT cnt_l_z;
  	  cnt_l_z = wi::clz (val);
  
! 	  if (maxbitlen - cnt_l_z > realmax)
  	    {
! 	      e = maxbitlen - cnt_l_z - realmax;
  
  	      /* This value is too large, we must shift it right to
  		 preserve all the bits we can, and then bump the
! 		 exponent up by that amount.  */
! 	      val = wi::lrshift (val, e);
  	    }
  	  len = realmax;
  	}
--- 2259,2276 ----
  	  HOST_WIDE_INT cnt_l_z;
  	  cnt_l_z = wi::clz (val);
  
! 	  if (len - cnt_l_z > realmax)
  	    {
! 	      e = len - cnt_l_z - realmax;
  
  	      /* This value is too large, we must shift it right to
  		 preserve all the bits we can, and then bump the
! 		 exponent up by that amount, but or in 1 if any of
! 		 the shifted out bits are non-zero.  */
! 	      if (wide_int::from (val, e, UNSIGNED) != 0)
! 		val = wi::set_bit (wi::lrshift (val, e), 0);
! 	      else
! 		val = wi::lrshift (val, e);
  	    }
  	  len = realmax;
  	}
*************** real_from_integer (REAL_VALUE_TYPE *r, f
*** 2306,2312 ****
      }
  
    if (fmt.decimal_p ())
!     decimal_from_integer (r);
    if (fmt)
      real_convert (r, fmt, r);
  }
--- 2309,2317 ----
      }
  
    if (fmt.decimal_p ())
!     /* We need at most one decimal digits for each 3 bits of input
!        precision.  */
!     decimal_from_integer (r, val_in.get_precision () / 3);
    if (fmt)
      real_convert (r, fmt, r);
  }
*************** decimal_integer_string (char *str, const
*** 2361,2372 ****
  /* Convert a real with an integral value to decimal float.  */
  
  static void
! decimal_from_integer (REAL_VALUE_TYPE *r)
  {
    char str[256];
  
!   decimal_integer_string (str, r, sizeof (str) - 1);
!   decimal_real_from_string (r, str);
  }
  
  /* Returns 10**2**N.  */
--- 2366,2386 ----
  /* Convert a real with an integral value to decimal float.  */
  
  static void
! decimal_from_integer (REAL_VALUE_TYPE *r, int digits)
  {
    char str[256];
  
!   if (digits <= 256)
!     {
!       decimal_integer_string (str, r, sizeof (str) - 1);
!       decimal_real_from_string (r, str);
!     }
!   else
!     {
!       char *s = XALLOCAVEC (char, digits);
!       decimal_integer_string (s, r, digits - 1);
!       decimal_real_from_string (r, s);
!     }
  }
  
  /* Returns 10**2**N.  */
diff -Nrcpad gcc-14.3.0/gcc/regcprop.cc gcc-14.3.0-RC-20260619/gcc/regcprop.cc
*** gcc-14.3.0/gcc/regcprop.cc	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/regcprop.cc	Fri Jun 19 06:51:03 2026
***************
*** 36,41 ****
--- 36,42 ----
  #include "cfgrtl.h"
  #include "target.h"
  #include "function-abi.h"
+ #include "cfgcleanup.h"
  
  /* The following code does forward propagation of hard register copies.
     The object is to eliminate as many dependencies as possible, so that
*************** copyprop_hardreg_forward_1 (basic_block
*** 826,832 ****
  	  && !side_effects_p (SET_DEST (set)))
  	{
  	  bool last = insn == BB_END (bb);
! 	  delete_insn (insn);
  	  if (last)
  	    break;
  	  continue;
--- 827,833 ----
  	  && !side_effects_p (SET_DEST (set)))
  	{
  	  bool last = insn == BB_END (bb);
! 	  delete_insn_and_edges (insn);
  	  if (last)
  	    break;
  	  continue;
*************** pass_cprop_hardreg::execute (function *f
*** 1402,1407 ****
--- 1403,1409 ----
    auto_vec<int> *curr = &worklist1;
    auto_vec<int> *next = &worklist2;
    bool any_debug_changes = false;
+   bool any_changes = false;
  
    /* We need accurate notes.  Earlier passes such as if-conversion may
       leave notes in an inconsistent state.  */
*************** pass_cprop_hardreg::execute (function *f
*** 1421,1427 ****
    FOR_EACH_BB_FN (bb, fun)
      {
        if (cprop_hardreg_bb (bb, all_vd, visited))
! 	curr->safe_push (bb->index);
        if (all_vd[bb->index].n_debug_insn_changes)
  	any_debug_changes = true;
      }
--- 1423,1432 ----
    FOR_EACH_BB_FN (bb, fun)
      {
        if (cprop_hardreg_bb (bb, all_vd, visited))
! 	{
! 	  curr->safe_push (bb->index);
! 	  any_changes = true;
! 	}
        if (all_vd[bb->index].n_debug_insn_changes)
  	any_debug_changes = true;
      }
*************** pass_cprop_hardreg::execute (function *f
*** 1448,1454 ****
  	{
  	  bb = BASIC_BLOCK_FOR_FN (fun, index);
            if (cprop_hardreg_bb (bb, all_vd, visited))
! 	    next->safe_push (bb->index);
  	  if (all_vd[bb->index].n_debug_insn_changes)
  	    any_debug_changes = true;
  	}
--- 1453,1462 ----
  	{
  	  bb = BASIC_BLOCK_FOR_FN (fun, index);
            if (cprop_hardreg_bb (bb, all_vd, visited))
! 	    {
! 	      next->safe_push (bb->index);
! 	      any_changes = true;
! 	    }
  	  if (all_vd[bb->index].n_debug_insn_changes)
  	    any_debug_changes = true;
  	}
*************** pass_cprop_hardreg::execute (function *f
*** 1460,1465 ****
--- 1468,1482 ----
      }
  
    free (all_vd);
+ 
+   /* Copy propagation of the sp register into an mem's address
+      can cause what was a trapping instruction into
+      a non-trapping one so cleanup after that in the case of non-call
+      exceptions.  */
+   if (any_changes
+       && cfun->can_throw_non_call_exceptions
+       && purge_all_dead_edges ())
+     cleanup_cfg (0);
    return 0;
  }
  
diff -Nrcpad gcc-14.3.0/gcc/stmt.cc gcc-14.3.0-RC-20260619/gcc/stmt.cc
*** gcc-14.3.0/gcc/stmt.cc	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/stmt.cc	Fri Jun 19 06:51:03 2026
*************** parse_input_constraint (const char **con
*** 332,337 ****
--- 332,338 ----
  
    /* Make sure constraint has neither `=', `+', nor '&'.  */
  
+ repeat:
    for (j = 0; j < c_len; j += CONSTRAINT_LEN (constraint[j], constraint+j))
      switch (constraint[j])
        {
*************** parse_input_constraint (const char **con
*** 389,400 ****
  	      constraint = constraints[match];
  	      *constraint_p = constraint;
  	      c_len = strlen (constraint);
! 	      j = 0;
! 	      /* ??? At the end of the loop, we will skip the first part of
! 		 the matched constraint.  This assumes not only that the
! 		 other constraint is an output constraint, but also that
! 		 the '=' or '+' come first.  */
! 	      break;
  	    }
  	  else
  	    j = end - constraint;
--- 390,396 ----
  	      constraint = constraints[match];
  	      *constraint_p = constraint;
  	      c_len = strlen (constraint);
! 	      goto repeat;
  	    }
  	  else
  	    j = end - constraint;
diff -Nrcpad gcc-14.3.0/gcc/system.h gcc-14.3.0-RC-20260619/gcc/system.h
*** gcc-14.3.0/gcc/system.h	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/system.h	Fri Jun 19 06:51:03 2026
*************** extern int fprintf_unlocked (FILE *, con
*** 222,227 ****
--- 222,236 ----
  #ifdef INCLUDE_FUNCTIONAL
  # include <functional>
  #endif
+ #ifdef INCLUDE_SSTREAM
+ # include <sstream>
+ #endif
+ /* Some of the headers included by <memory> can use "abort" within a
+    namespace, e.g. "_VSTD::abort();", which fails after we use the
+    preprocessor to redefine "abort" as "fancy_abort" below.  */
+ #ifdef INCLUDE_MEMORY
+ # include <memory>
+ #endif
  # include <cstring>
  # include <initializer_list>
  # include <new>
*************** private:
*** 758,779 ****
  #define LIKELY(x) (__builtin_expect ((x), 1))
  #define UNLIKELY(x) (__builtin_expect ((x), 0))
  
- /* Some of the headers included by <memory> can use "abort" within a
-    namespace, e.g. "_VSTD::abort();", which fails after we use the
-    preprocessor to redefine "abort" as "fancy_abort" below.  */
- 
- #ifdef INCLUDE_MEMORY
- # include <memory>
- #endif
- 
  #ifdef INCLUDE_MUTEX
  # include <mutex>
  #endif
  
- #ifdef INCLUDE_SSTREAM
- # include <sstream>
- #endif
- 
  #ifdef INCLUDE_MALLOC_H
  #if defined(HAVE_MALLINFO) || defined(HAVE_MALLINFO2)
  #include <malloc.h>
--- 767,776 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/ChangeLog gcc-14.3.0-RC-20260619/gcc/testsuite/ChangeLog
*** gcc-14.3.0/gcc/testsuite/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/ChangeLog	Fri Jun 19 06:51:03 2026
***************
*** 1,3 ****
--- 1,2782 ----
+ 2026-06-17  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2026-06-09  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR middle-end/125621
+ 	* gcc.target/aarch64/torture/pr125621.c: New test.
+ 
+ 2026-06-17  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-05-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/124151
+ 	* gcc.dg/tree-ssa/pr124151.c: New test.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-06-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125774
+ 	* gcc.dg/torture/pr125774-1.c: New test.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-05-04  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR c++/65271
+ 	* g++.dg/cpp0x/rv-decl1.C: New test.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-03-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/124454
+ 	* gcc.dg/pr124454-1.c: New test.
+ 
+ 2026-06-17  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	Backported from master:
+ 	2026-02-19  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR rtl-optimization/116053
+ 	* gcc.dg/pr116053-1.c: 'dg-require-effective-target int128'.
+ 
+ 2026-06-17  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-02-18  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/116053
+ 	* gcc.dg/pr116053-1.c: New test.
+ 
+ 2026-06-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2026-06-03  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/125431
+ 	* gfortran.dg/vect/pr125431.f90: New test.
+ 
+ 2026-06-17  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2026-06-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/125795
+ 	* gcc.target/aarch64/pr125795.c: New test.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125501
+ 	* gcc.dg/pr125501.c: New.
+ 
+ 2026-06-12  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120560
+ 	* gcc.dg/pr120560.c: New.
+ 
+ 2026-06-12  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2025-07-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* g++.dg/lto/pr114790_0.C: New test.
+ 	* g++.dg/lto/pr114790_1.C: New test.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125025
+ 	* gcc.dg/torture/pr125025.c: New testcase.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125019
+ 	* gcc.dg/pr125019.c: New testcase.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-04-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124868
+ 	* gcc.dg/torture/pr124868.c: New testcase.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-03-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124555
+ 	* gcc.dg/torture/pr124555.c: New testcase.
+ 	* g++.dg/absvect.C: Restrict dump scan to x86-64 and force
+ 	-msse4 there.
+ 
+ 2026-06-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123596
+ 	* g++.dg/torture/pr123596.C: New testcase.
+ 
+ 2026-06-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2026-06-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125752
+ 	* gcc.target/avr/torture/fx-to-double.c: New test.
+ 
+ 2026-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gcc.dg/vec-perm-lower.c: Add -Wno-psabi to dg-options.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125376
+ 	* g++.dg/coroutines/pr125376.C: New test.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/125079
+ 	* gcc.dg/strlenopt-97.c: New test.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/125039
+ 	* gcc.c-torture/compile/pr125039.c: New test.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124133
+ 	* g++.target/powerpc/pr124133-1.C: New test.
+ 	* g++.target/powerpc/pr124133-2.C: New test.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/124682
+ 	* gcc.dg/torture/builtin-math-6.c (TESTIT_COMPLEX_R2_ISZ): Define.
+ 	(TESTIT_COMPLEX_R2_ALLNEG): Use TESTIT_COMPLEX_R2_ISZ instead of
+ 	TESTIT_COMPLEX_R2.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* go.test/go-test.exp (errchk): Use -translation binary instead of
+ 	-encoding binary for TCL 9 compatibility.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/124850
+ 	* g++.dg/other/anon-union8.C: New test.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124826
+ 	* gcc.dg/bitint-128.c: New test.
+ 
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* lib/mike-gcc.exp (postbase): Use switch instead of case for
+ 	TCL 9 compatibility.
+ 	* lib/mike-g++.exp (postbase): Likewise.
+ 
+ 2026-06-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/bigint1.adb: New  test.
+ 
+ 2026-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	Revert:
+ 	2026-06-08  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 		    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/123346
+ 	* g++.dg/cpp2a/constexpr-union10.C: New test.
+ 
+ 2026-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	Revert:
+ 	2026-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125315
+ 	* g++.dg/cpp2a/no_unique_address16.C: New test.
+ 
+ 2026-06-03  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-05-08  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125049
+ 	* gcc.target/loongarch/pr125049.c: New test.
+ 
+ 2026-05-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2026-05-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125409
+ 	* gcc.target/avr/torture/pr125409.h: New file.
+ 	* gcc.target/avr/torture/pr125409-fx24-ssk.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-ssr.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-suk.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-sur.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-usk.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-usr.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-uuk.c: New test.
+ 	* gcc.target/avr/torture/pr125409-fx24-uur.c: New test.
+ 
+ 2026-05-21  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-05-20  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/106546
+ 	* gfortran.dg/inline_matmul_27.f90: New test.
+ 
+ 2026-05-20  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/115260
+ 	* gfortran.dg/pr115260.f90: New test.
+ 
+ 2026-05-19  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR target/125351
+ 	* gcc.target/i386/pr125351.c: New test.
+ 
+ 2026-05-15  Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	Backported from master:
+ 	2025-12-21  Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	PR testsuite/123004
+ 	* jit.dg/all-non-failing-tests.h: Update comment about
+ 	test-cold-attribute.c.
+ 	* jit.dg/test-cold-attribute.c: Use -Oz to fix test.
+ 
+ 2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125315
+ 	* g++.dg/cpp2a/no_unique_address16.C: New test.
+ 
+ 2026-05-14  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR target/124316
+ 	* gcc.target/i386/pr124316.c: New test.
+ 
+ 2026-05-14  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-04-16  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 		    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/123346
+ 	* g++.dg/cpp2a/constexpr-union10.C: New test.
+ 
+ 2026-05-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/124632
+ 	* g++.dg/cpp23/explicit-obj-lambda2.C: Do strict GC and -Wall.
+ 
+ 2026-05-14  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-08  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/96986
+ 	* gfortran.dg/pr96986.f90: New test.
+ 
+ 2026-05-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-10  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/94978
+ 	* gfortran.dg/pr94978.f90: New test.
+ 
+ 2026-05-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-16  Paul Thomas  <pault@gcc.gnu.org>
+ 		    Steve Kargl  <kargls@comcast.net>
+ 
+ 	PR fortran/93832
+ 	* gfortran.dg/pr93832.f90: New test.
+ 
+ 2026-05-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-11  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/93814
+ 	* gfortran.dg/pr93814.f90: New test.
+ 
+ 2026-05-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-08  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/93715
+ 	* gfortran.dg/pr93715.f90: New test.
+ 
+ 2026-05-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-04-15  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/122976
+ 	* gcc.dg/tree-ssa/pr122976.c: New test.
+ 
+ 2026-05-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	* gfortran.dg/gomp/pr101760.f90: New test.
+ 	* gfortran.dg/gomp/pr102314.f90: New test.
+ 
+ 2026-05-12  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-07  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/85352
+ 	* gfortran.dg/pr85352.f90: New test.
+ 
+ 2026-05-09  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-07  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/107425
+ 	* gfortran.dg/gomp/pr107425.f90: New test.
+ 
+ 2026-05-09  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-06  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/79524
+ 	PR fortran/79524
+ 	* gfortran.dg/pr79524.f90: New test.
+ 
+ 2026-05-06  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-05  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/109788
+ 	* gfortran.dg/pr109788.f90: New test.
+ 
+ 2026-05-06  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-07  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/102430
+ 	* gfortran.dg/gomp/pr102430.f90: New test.
+ 
+ 2026-05-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-05-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/125089
+ 	* gdc.dg/pr125089.d: New test.
+ 
+ 2026-04-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/task6.ads, gnat.dg/task6.adb: New test.
+ 
+ 2026-04-30  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-04-22  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/124933
+ 	* lib/target-supports.exp (v8_1m_main_fp_hard): New arm
+ 	architecture variant.
+ 	* gcc.target/arm/pr124933.c: New test.
+ 	* gcc.target/arm/armv8_2-fp16-move-1.c: Update expected output.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-02-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124130
+ 	* g++.dg/torture/pr124130.C: New testcase.
+ 
+ 2026-04-22  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-03-10  Jan Hubicka  <jh@suse.cz>
+ 		    Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/120987
+ 	* g++.dg/torture/pr120987-1.C: New test.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/123416
+ 	* gcc.dg/torture/pr123416.c: New testcase.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123061
+ 	PR tree-optimization/123636
+ 	* gcc.dg/torture/pr123061.c: New testcase.
+ 	* gcc.dg/torture/pr123636.c: Likewise.
+ 	* gcc.dg/tree-ssa/ssa-lim-26.c: Likewise.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-03-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124677
+ 	* gcc.dg/vect/vect-pr124677.c: New testcase.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-02-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/124132
+ 	* gcc.dg/torture/pr124132.c: New testcase.
+ 
+ 2026-04-21  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-03  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/98203
+ 	PR fortran/98203
+ 	* gfortran.dg/gomp/pr98203.f90: New test.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-02-07  Tomáš Trnka  <trnka@scm.com>
+ 
+ 	PR fortran/116829
+ 	* gfortran.dg/derived_init_7.f90: New test.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-04-03  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/100155
+ 	* gfortran.dg/pr100155.f90: New test.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-27  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/102619
+ 	* gfortran.dg/pr102619.f90: New test.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-21  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/59104
+ 	* gfortran.dg/dependent_decls_3.f90: New test.
+ 
+ 2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-06-20  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/59104
+ 	* gfortran.dg/dependent_decls_2.f90: New test.
+ 
+ 2026-04-14  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121616
+ 	* gfortran.dg/alloc_comp_assign_17.f90: New test.
+ 
+ 2026-04-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 	    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/124751
+ 	* gfortran.dg/pr100194.f90: Run the testcase and add runtime
+ 	coverage for packed assumed-rank sections.
+ 
+ 2026-04-14  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-01  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/100194
+ 	* gfortran.dg/pr100194.f90: New test.
+ 
+ 2026-04-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-03-11  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123271
+ 	* gcc.target/arm/pr123271.c: New test.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-30  Christopher Albert  <albert@tugraz.at>
+ 
+ 	* gfortran.dg/goacc/omp-108382.f90: New test.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/95879
+ 	PR fortran/95879
+ 	* gfortran.dg/pr95879.f90: New test.
+ 
+ 2026-04-09  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-04-09  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/105192
+ 	* gcc.c-torture/compile/pr105192.c: New test.
+ 
+ 2026-04-08  Christophe Lyon  <christophe.lyon@arm.com>
+ 
+ 	Backported from master:
+ 	2026-04-02  Christophe Lyon  <christophe.lyon@arm.com>
+ 
+ 	PR target/124705
+ 	* gcc.dg/tree-ssa/gen-vect-26.c: Disable loop peeling check for
+ 	arm*-*-.
+ 	* gcc.dg/tree-ssa/gen-vect-28.c: Likewise.
+ 
+ 2026-04-08  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2026-04-01  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR target/124705
+ 	* gcc.dg/tree-ssa/gen-vect-26.c: Disable loop peeling check for
+ 	arm-none-eabi.
+ 	* gcc.dg/tree-ssa/gen-vect-28.c: Likewise.
+ 
+ 2026-04-05  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-20  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/120723
+ 	* gfortran.dg/goacc/pr120723.f90: New test.
+ 
+ 2026-04-02  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/102596
+ 	* gfortran.dg/pr102596.f90: New test.
+ 
+ 2026-03-31  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/opt107.adb: New test.
+ 	* gnat.dg/opt107_pkg.ads: New helper.
+ 
+ 2026-03-31  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2026-03-31  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR target/124712
+ 	* gcc.dg/vect/vect-fmax-2.c: Changed effective target vect_float
+ 	to vect_double.
+ 	* gcc.dg/vect/vect-fmax-3.c: Likewise.
+ 	* gcc.dg/vect/vect-fmin-2.c: Likewise.
+ 	* gcc.dg/vect/vect-fmin-3.c: Likewise.
+ 
+ 2026-03-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-02  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* g++.dg/cpp23/feat-cxx2b.C: Adjust expected __cpp_deduction_guides
+ 	value.
+ 	* g++.dg/cpp26/feat-cxx26.C: Likewise.
+ 
+ 2026-03-30  Daniele Sahebi  <daniele@mkryss.me>
+ 
+ 	Backported from master:
+ 	2025-11-22  Daniele Sahebi  <daniele@mkryss.me>
+ 		    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/122658
+ 	* g++.dg/cpp2a/consteval42.C: New test.
+ 
+ 2026-03-30  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-12-18  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 		    Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122070
+ 	* g++.dg/cpp23/class-deduction-inherited10.C: New test.
+ 	* g++.dg/cpp23/class-deduction-inherited9.C: New test.
+ 
+ 2026-03-30  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/122550
+ 	* g++.dg/cpp2a/concepts-friend18.C: New test.
+ 	* g++.dg/cpp2a/concepts-friend18a.C: New test.
+ 
+ 2026-03-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/97740
+ 	* g++.dg/cpp0x/constexpr-97740a.C: New test.
+ 	* g++.dg/cpp0x/constexpr-97740b.C: New test.
+ 
+ 2026-03-30  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-11  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/95338
+ 	* gfortran.dg/pr95338.f90: New test.
+ 
+ 2026-03-29  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/102459
+ 	* gfortran.dg/pr102459.f90: New test.
+ 
+ 2026-03-29  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-12  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/82721
+ 	* gfortran.dg/pr82721.f90: New test.
+ 
+ 2026-03-29  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-01-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/96087
+ 	* gfortran.dg/pr96087.f90: New test.
+ 
+ 2026-03-28  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-28  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	* gfortran.dg/pr84245.f90: New test.
+ 
+ 2026-03-25  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR middle-end/124491
+ 	* gcc.target/aarch64/torture/pr124491.c: New test.
+ 
+ 2026-03-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123175
+ 	* gcc.dg/torture/pr123175-1.c: New testcase.
+ 	* gcc.dg/torture/pr123175-2.c: Likewise.
+ 
+ 2026-03-25  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* gcc.dg/vec-perm-lower.c: New test.
+ 
+ 2026-03-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/119273
+ 	* gfortran.dg/pr119273.f90: New test.
+ 
+ 2026-03-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/105168
+ 	* gfortran.dg/pr105168.f90: New test.
+ 
+ 2026-03-23  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/generic_inst20.ads, gnat.dg/generic_inst20.adb: New test.
+ 	* gnat.dg/generic_inst20-sub.adb: New helper.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119532
+ 	* gcc.dg/torture/pr119532.c: New testcase.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/120182
+ 	* gcc.dg/torture/pr120182.c: New testcase.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR testsuite/123353
+ 	PR c/123156
+ 	* gcc.dg/torture/builtin-shufflevector-pr123156.c: Require le.
+ 
+ 2026-03-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-12-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c/123156
+ 	* gcc.dg/torture/builtin-shufflevector-pr123156.c: New testcase.
+ 
+ 2026-03-19  Mikael Morin  <morin-mikael@orange.fr>
+ 
+ 	Backported from master:
+ 	2025-09-24  Mikael Morin  <morin-mikael@orange.fr>
+ 
+ 	PR fortran/122046
+ 	* gfortran.dg/submodule_34.f90: New test.
+ 
+ 2026-03-19  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-19  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/124161
+ 	* gfortran.dg/pr124161.f90: New test.
+ 
+ 2026-03-17  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	* gcc.target/aarch64/sme/sme-shrinkwrap.c: Add -save-temp to
+ 	dg-options, and move [[gnu::noipa]] to callee.
+ 
+ 2026-03-17  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	* gcc.target/aarch64/sme/acle-asm/revd_bf16.c: Update checks.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_f16.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_f32.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_f64.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_s16.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_s32.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_s64.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_s8.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_u16.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_u32.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_u64.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/revd_u8.c: Likewise.
+ 
+ 2026-03-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/124489
+ 	* g++.dg/cpp0x/pr124489.C: New test.
+ 
+ 2026-03-16  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2026-02-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR middle-end/123775
+ 	* gcc.target/aarch64/sve2/pr123775.c: Add sve128 and sve2 hw
+ 	requirements.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123775
+ 	* gcc.target/aarch64/sve2/pr123775.c: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123741
+ 	* gfortran.dg/vect/vect-pr123741.f90: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123729
+ 	* g++.dg/torture/pr123729.C: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123602
+ 	* g++.dg/torture/pr123603.C: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123575
+ 	* g++.dg/pr123575.C: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123537
+ 	* gcc.dg/pr123537.c: New testcase.
+ 
+ 2026-03-16  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	Backported from master:
+ 	2026-01-08  Richard Sandiford  <rdsandiford@googlemail.com>
+ 		    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122793
+ 	* gcc.dg/vect/vect-pr122793.c: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-09-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/107997
+ 	PR tree-optimization/121844
+ 	* gcc.dg/torture/pr121844.c: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-05-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120341
+ 	* gcc.dg/torture/pr120341-1.c: New testcase.
+ 	* gcc.dg/torture/pr120341-2.c: Likewise.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/116296
+ 	* gcc.dg/torture/pr116296.c: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/111036
+ 	* gcc.dg/torture/pr111036.c: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/110043
+ 	* gcc.dg/torture/pr110043.c: New testcase.
+ 
+ 2026-03-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/109410
+ 	* gcc.dg/pr109410-2.c: New testcase.
+ 
+ 2026-03-16  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR target/124126
+ 	* g++.target/aarch64/pr124126-1.C: New test.
+ 
+ 2026-03-16  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR target/123285
+ 	* gcc.target/aarch64/pr123285-1.c: New test.
+ 
+ 2026-03-16  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	PR target/123457
+ 	* gcc.target/aarch64/pch/aarch64-pch.exp: Add new testsuite.
+ 	* gcc.target/aarch64/pch/pch_arm_acle.c: Add new test file.
+ 	* gcc.target/aarch64/pch/pch_arm_acle.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_acle_include_post.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_acle_include_post.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_multiple.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_multiple.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_multiple_include_post.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_multiple_include_post.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon_include_post.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon_include_post.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sme.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sme.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sme_include_post.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sme_include_post.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sve.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sve.hs: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sve_include_post.c: Likewise.
+ 	* gcc.target/aarch64/pch/pch_arm_sve_include_post.hs: Likewise.
+ 
+ 2026-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2026-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/106946
+ 	PR fortran/124482
+ 	* gfortran.dg/pr106946.f90: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/124450
+ 	* gfortran.dg/pr124450.f90: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/122000
+ 	* gcc.c-torture/execute/pr122000.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124135
+ 	* g++.dg/torture/pr124135-1.C: New test.
+ 	* g++.dg/torture/pr124135-2.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124358
+ 	* gcc.c-torture/execute/pr124358.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124366
+ 	* gcc.target/i386/cet-pr124366.c: New test.
+ 
+ 2026-03-15  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2026-03-04  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/124335
+ 	* gcc.target/i386/avx512fp16-pr124335.c: Require target
+ 	avx512fp16 instead of avx512bw.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124315
+ 	* gcc.target/i386/avx512f-pr124315.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124335
+ 	* gcc.target/i386/avx512fp16-pr124335.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/124288
+ 	* gcc.dg/torture/vec-cvt-1.c (FLTTEST): Use comma expression
+ 	to store into {flt,dbl}m{in,ax} and read from it again for
+ 	comparison.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123365
+ 	* gcc.c-torture/compile/pr123365.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124138
+ 	* gcc.dg/pr124138.c: New test.
+ 	* gcc.target/i386/avx512f-pr124138-1.c: New test.
+ 	* gcc.target/i386/avx512f-pr124138-2.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120685
+ 	* g++.dg/cpp23/auto-fncast19.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/124056
+ 	* gcc.target/i386/pr124056.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/116600
+ 	PR middle-end/123386
+ 	* gcc.c-torture/compile/pr116600.c: New test.
+ 	* gcc.c-torture/compile/pr123386.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123889
+ 	* g++.dg/cpp0x/constexpr-123889.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* gcc.dg/pr101312-1.c: New test.
+ 	* gcc.dg/pr101312-2.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123882
+ 	* gcc.dg/pr123882.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123978
+ 	* gcc.c-torture/execute/pr123978.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123818
+ 	* g++.dg/cpp0x/pr123818.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/122689
+ 	* gcc.dg/bitint-127.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121104
+ 	* gcc.dg/pr121104.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123864
+ 	* gcc.c-torture/execute/pr123864.c: New test.
+ 	* gcc.dg/torture/pr123864.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123876
+ 	* gcc.dg/gomp/pr123876.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR preprocessor/123273
+ 	* c-c++-common/cpp/dir-only-10.c: New test.
+ 	* c-c++-common/cpp/dir-only-11.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123578
+ 	* g++.dg/cpp2a/pr123578.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123667
+ 	* g++.dg/cpp1z/decomp66.C: New test.
+ 	* g++.dg/cpp1z/decomp67.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123684
+ 	* g++.dg/cpp0x/gen-attrs-90.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123703
+ 	* gcc.c-torture/compile/pr123703.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123597
+ 	* g++.dg/gomp/pr123597.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123513
+ 	* g++.dg/warn/Wmismatched-new-delete-10.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/123607
+ 	* g++.target/i386/avx512fp16-pr123607.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/120250
+ 	* gcc.c-torture/compile/pr120250.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123431
+ 	* gcc.dg/pr123431.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/111817
+ 	* c-c++-common/pr111817.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/123217
+ 	* gcc.target/i386/keylocker-pr123217.c: New test.
+ 	* gcc.target/i386/user_msr-pr123217.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/91388
+ 	* g++.dg/cpp1z/static_assert1.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/122772
+ 	* g++.dg/cpp1z/eval-order14.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/122834
+ 	* g++.dg/dfp/pr122834-1.C: New test.
+ 	* g++.dg/dfp/pr122834-2.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123018
+ 	* gcc.dg/pr123018.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122943
+ 	* gcc.c-torture/execute/pr122943.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120052
+ 	* c-c++-common/gomp/pr120052.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120564
+ 	* c-c++-common/gomp/pr120564.c: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/121445
+ 	* g++.dg/cpp1y/constexpr-121445.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120876
+ 	* g++.dg/parse/crash81.C: New test.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122394
+ 	* g++.dg/opt/pr122394.C: New test.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-02-12  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR c/105555
+ 	* gcc.dg/complex-10.c: New test.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-02-02  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123294
+ 	* gcc.dg/pr123294-1.c: New test.
+ 	* gcc.target/aarch64/pr123294-1.c: New test.
+ 
+ 2026-03-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Backported from master:
+ 	2026-01-18  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/123645
+ 	* gcc.dg/torture/pr123645-1.c: New test.
+ 	* gcc.dg/torture/pr123645-2.c: New test.
+ 
+ 2026-03-13  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/123845
+ 	PR libstdc++/114865
+ 	* g++.dg/cpp0x/constexpr-ex3.C: Adjust C++11 non-empty
+ 	constexpr constructor dg-error to a dg-warning.  Expect
+ 	a follow-up missing member initializer diagnostic in C++11 mode.
+ 	* g++.dg/cpp2a/constexpr-try1.C: Expect a follow-up
+ 	compound-statement in constexpr function diagnostic in C++11
+ 	mode.
+ 	* g++.dg/cpp2a/constexpr-try2.C: Likewise.  Adjust C++11
+ 	non-empty constexpr constructor dg-error to a dg-warning.
+ 	* g++.dg/cpp2a/constexpr-try3.C:  Adjust C++11 non-empty
+ 	constexpr constructor dg-error to a dg-warning.
+ 	* g++.dg/cpp0x/constexpr-ctor23.C: New test.
+ 
+ 2026-03-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-02-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/122856
+ 	* g++.dg/ipa/pr122856.C: New test.
+ 
+ 2026-03-09  Kalvis Duckmanton  <kalvisd@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-02-14  Kalvis Duckmanton  <kalvisd@gmail.com>
+ 
+ 	PR target/112400
+ 	* g++.dg/torture/pr112400.C: New file.
+ 
+ 2026-03-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-02-26  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR middle-end/124250
+ 	PR target/123807
+ 	* gcc.c-torture/compile/pr124250.c: New test.
+ 
+ 2026-03-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2026-02-25  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/124236
+ 	* lib/target-supports.exp
+ 	(check_effective_target_arm_v8_3a_complex_neon_hw): Fix default value.
+ 
+ 2026-02-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/unchecked_union3.ads: New test.
+ 
+ 2026-02-27  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-02-27  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/122097
+ 	* gcc.target/loongarch/pr122097.c (dg-final): Remove.
+ 
+ 2026-02-26  Michal Jires  <mjires@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-01-11  Michal Jires  <mjires@suse.cz>
+ 
+ 	PR lto/121588
+ 	* gcc.dg/lto/attr-weakref-2_0.c: New test.
+ 	* gcc.dg/lto/attr-weakref-2_1.c: New test.
+ 
+ 2026-02-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/protected_deref1.adb: New test.
+ 
+ 2026-02-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/106260
+ 	* g++.dg/ipa/pr106260.C: New test.
+ 
+ 2026-02-17  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2026-02-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117217
+ 	* g++.dg/torture/pr117217-1.C: New test.
+ 	* g++.dg/torture/pr117217-2.C: Likewise.
+ 
+ 2026-02-11  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	PR target/123624
+ 	* gcc.target/aarch64/sme/sme-shrinkwrap.c: New test.
+ 
+ 2026-02-08  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-02-08  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/124026
+ 	* gdc.dg/pr124026.d: New test.
+ 
+ 2026-02-05  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	Backported from master:
+ 	2026-01-28  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/123779
+ 	* g++.target/i386/pr123779.C: New test.
+ 
+ 2026-02-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/123548
+ 	* gcc.target/aarch64/pr123548.c: New test.
+ 
+ 2026-02-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2026-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/123887
+ 	* gcc.dg/torture/pr123887.c: New testcase.
+ 
+ 2026-02-02  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-09-25  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/116772
+ 	* gcc.dg/torture/pr116772-1.c: New test.
+ 
+ 2026-01-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/limited_with3.ads: New test.
+ 	* gnat.dg/specs/limited_with3-child.ads: New helper.
+ 	* gnat.dg/specs/limited_with3-child-grandchild.ads: Likewise.
+ 	* gnat.dg/specs/limited_with3-child-grandchild-grandgrandchild.ads:
+ 	Likewise.
+ 
+ 2026-01-30  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-30  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123264
+ 	* gdc.dg/pr123264.d: New test.
+ 
+ 2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/123766
+ 	* gcc.target/loongarch/vector/lasx/pr123766.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/pr123766.c: New test.
+ 
+ 2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-30  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/123807
+ 	* gcc.target/loongarch/vector/lsx/pr123807.c: New test.
+ 
+ 2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123407
+ 	* gdc.dg/pr123407a.d: New test.
+ 	* gdc.dg/pr123407b.d: New test.
+ 
+ 2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123046
+ 	* gdc.dg/pr123046.d: New test.
+ 
+ 2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-29  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123349
+ 	* gdc.dg/driver_debuglib.d: New test.
+ 	* gdc.dg/driver_defaultlib.d: New test.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119799
+ 	* gdc.dg/torture/pr119799.d: New test.
+ 	* gdc.dg/torture/imports/pr119799c.c: New test.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123419
+ 	* gdc.dg/pr123419.d: New test.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123798
+ 	* gdc.dg/pr123798.d: New test.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/121477
+ 	* gdc.dg/pr121477.d: New test.
+ 
+ 2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123422
+ 	* gdc.dg/torture/pr123422.d: New test.
+ 
+ 2026-01-27  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-01-27  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/120096
+ 	* gdc.dg/torture/pr120096.d: New test.
+ 
+ 2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/123676
+ 	* g++.dg/cpp2a/concepts-decltype5.C: New test.
+ 
+ 2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122494
+ 	PR c++/123814
+ 	* g++.dg/cpp2a/concepts-pr122494.C: New test.
+ 	* g++.dg/cpp2a/concepts-pr123814.C: New test.
+ 
+ 2026-01-23  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR target/119130
+ 	* gcc.target/powerpc/builtins-1-p9-runnable.c: Use same expected
+ 	results for both endian format.
+ 
+ 2026-01-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	Backported from master:
+ 	2026-01-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* gcc.target/i386/apx-broadcast.c: New test.
+ 
+ 2026-01-22  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-01-22  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123742
+ 	* gcc.target/arm/neon-smax16.c: New test.
+ 	* gcc.target/arm/neon-smin16.c: New test.
+ 
+ 2026-01-20  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/122215
+ 	* sparseset.supp: New.
+ 
+ 2026-01-19  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-19  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/117575
+ 	* g++.target/loongarch/pr117575.C: New test.
+ 
+ 2026-01-16  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/123121
+ 	* gcc.target/i386/pr123121.c: New.
+ 
+ 2026-01-16  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-16  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/123521
+ 	* gcc.target/loongarch/vector/lasx/pr123521.c: New test.
+ 
+ 2026-01-15  DengJianbo  <dengjianbo@loongson.cn>
+ 
+ 	Backported from master:
+ 	2026-01-15  DengJianbo  <dengjianbo@loongson.cn>
+ 
+ 	* gcc.target/loongarch/attr-model-6.c: New test.
+ 
+ 2026-01-14  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/123300
+ 	* gcc.dg/pr123300.c: New.
+ 
+ 2026-01-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2026-01-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr123484.c: New test.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* gnat.dg/specs/aggr9.ads: New test.
+ 
+ 2025-12-19  Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	PR debug/121964
+ 	* g++.target/aarch64/dwarf-bit-stride-func.C: New test.
+ 	* g++.target/aarch64/dwarf-bit-stride-pragma.C: New test.
+ 	* g++.target/aarch64/dwarf-bit-stride-pragma-sme.C: New test.
+ 	* g++.target/aarch64/sve/dwarf-bit-stride.C: New test.
+ 	* gcc.target/aarch64/dwarf-bit-stride-func.c: New test.
+ 	* gcc.target/aarch64/dwarf-bit-stride-pragma.c: New test.
+ 	* gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c: New test.
+ 	* gcc.target/aarch64/sve/dwarf-bit-stride.c: New test.
+ 
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/reduce4.adb: New test.
+ 	* gnat.dg/reduce5.adb: Likewise.
+ 
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/lto30.ads, gnat.dg/lto30.adb: New test.
+ 
+ 2025-11-28  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/122126
+ 	* gcc.dg/pr122126_vextr.c: New test.
+ 	* gcc.dg/pr122126_vset.c: New test.
+ 
+ 2025-11-27  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2025-11-26  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/122867
+ 	* gcc.target/arm/cbz-range.c: New test.
+ 
+ 2025-11-20  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2025-11-20  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/122695
+ 	* gcc.target/loongarch/pr122695-1.c: New test.
+ 	* gcc.target/loongarch/pr122695-2.c: New test.
+ 
+ 2025-11-18  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	Backported from master:
+ 	2025-11-04  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lib/lto.exp (lto-build-archive): New procedure.
+ 	(lto-execute-1): Use it.
+ 	(lto-link-and-maybe-run, lto-get-options-main): Handle ar-link.
+ 	* gcc.dg/lto/pr122515_0.c: New test case.
+ 	* gcc.dg/lto/pr122515_1.c: New file.
+ 	* gcc.dg/lto/pr122515_2.c: Likewise.
+ 	* gcc.dg/lto/pr122515_3.c: Likewise.
+ 	* gcc.dg/lto/pr122515_4.c: Likewise.
+ 	* gcc.dg/lto/pr122515_5.c: Likewise.
+ 	* gcc.dg/lto/pr122515_6.c: Likewise.
+ 	* gcc.dg/lto/pr122515_7.c: Likewise.
+ 	* gcc.dg/lto/pr122515_8.c: Likewise.
+ 	* gcc.dg/lto/pr122515_9.c: Likewise.
+ 
+ 2025-11-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122408
+ 	* gfortran.target/aarch64/pr122408_1.f90: New test.
+ 	* gfortran.target/aarch64/pr122408_2.f90: New test.
+ 
+ 2025-11-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122408
+ 	* gfortran.target/aarch64/aarch64.exp: New test.
+ 
+ 2025-11-12  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-11-12  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	PR target/122446
+ 	* gcc.target/i386/amxbf16-asmintel-1.c: Modify dg-final to check intel
+ 	form.
+ 	* gcc.target/i386/amxcomplex-asmintel-1.c: Ditto.
+ 	* gcc.target/i386/amxfp16-asmintel-1.c: Ditto.
+ 	* gcc.target/i386/amxint8-asmintel-1.c: Ditto.
+ 	* gcc.target/i386/amxtile-asmintel-1.c: Ditto.
+ 	* g++.target/i386/pr122446-1.C: New test.
+ 	* g++.target/i386/pr122446-amxbf16.C: Ditto.
+ 	* g++.target/i386/pr122446-amxcomplex.C: Ditto.
+ 	* g++.target/i386/pr122446-amxfp16.C: Ditto.
+ 	* g++.target/i386/pr122446-amxint8.C: Ditto.
+ 	* g++.target/i386/pr122446-amxtile.C: Ditto.
+ 
+ 2025-11-11  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-29  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122097
+ 	* gcc.target/loongarch/pr122097.c: New test.
+ 
+ 2025-11-07  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/122223
+ 	* gcc.target/arm/mve/intrinsics/pr122223.c: New test.
+ 	(cherry picked from commits
+ 	81e226440381cc3e033df7e58cc7793c9b4b4e25 and
+ 	a52888dc71924afb6cd187b0e5f18d2be4c68a07)
+ 
+ 2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/fnmam4-vec.c: New test.
+ 
+ 2025-10-28  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-27  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122323
+ 	* gcc.target/i386/builtin-copysign-8b.c: Add -mtune=generic.
+ 
+ 2025-10-26  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2025-10-26  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/121599
+ 	* gcc.target/aarch64/sve2/pr121599.c: Tolerate alterate insn
+ 	selection.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/107968
+ 	* gfortran.dg/implied_do_io_9.f90: New test.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/122206
+ 	* gfortran.dg/interface_abstract_6.f90: New test.
+ 
+ 2025-10-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122323
+ 	* gcc.target/i386/builtin-fabs-2.c: Also scan (%edi)for x32.
+ 
+ 2025-10-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99930
+ 	PR target/122323
+ 	* gcc.target/i386/builtin-copysign-2.c: New test.
+ 	* gcc.target/i386/builtin-copysign-3.c: Likewise.
+ 	* gcc.target/i386/builtin-copysign-4.c: Likewise.
+ 	* gcc.target/i386/builtin-copysign-5.c: Likewise.
+ 	* gcc.target/i386/builtin-copysign-6.c: Likewise.
+ 	* gcc.target/i386/builtin-copysign-7.c: Likewise.
+ 	* gcc.target/i386/builtin-copysign-8a.c: Likewise.
+ 	* gcc.target/i386/builtin-copysign-8b.c: Likewise.
+ 	* gcc.target/i386/builtin-fabs-1.c: Likewise.
+ 	* gcc.target/i386/builtin-fabs-2.c: Likewise.
+ 
+ 2025-10-21  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR target/121599
+ 	* gcc.target/aarch64/sve2/pr121599.c: New test.
+ 
+ 2025-10-21  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-19  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/118300
+ 	* gcc.dg/analyzer/ubsan-pr118300.c: New test.
+ 
+ 2025-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/renaming18.adb: New test.
+ 
+ 2025-10-16  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2025-10-13  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR tree-optimization/121772
+ 	* gcc.target/aarch64/torture/pr121772.c: Add -fchecking to
+ 	dg-options.
+ 
+ 2025-10-15  Alice Carlotti  <alice.carlotti@arm.com>
+ 
+ 	* gcc.target/aarch64/acle/rwsr-armv8p9.c: Fix pmsdsfr_el1
+ 	encoding.
+ 
+ 2025-10-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120757
+ 	* g++.dg/cpp1y/auto-fn66.C: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/122188
+ 	* gcc.dg/torture/pr122188.c: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/122188
+ 	* c-c++-common/pr122188.c: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122104
+ 	* gcc.target/i386/pr122104.c: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/121977
+ 	* g++.dg/gomp/pr121977.C: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/121828
+ 	* gcc.dg/bitint-126.c: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/118567
+ 	* gcc.target/powerpc/vsx-vectorize-9.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-10.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-11.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-12.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-13.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-14.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-15.c: New test.
+ 	* gcc.target/powerpc/vsx-vectorize-16.c: New test.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/118567
+ 	* gcc.target/powerpc/vsx-vectorize-1.c: Remove includes, checking
+ 	part of main1 and main.
+ 	* gcc.target/powerpc/vsx-vectorize-2.c: Remove includes, replace
+ 	bar definition with declaration, remove main.
+ 	* gcc.target/powerpc/vsx-vectorize-3.c: Likewise.
+ 	* gcc.target/powerpc/vsx-vectorize-4.c: Likewise.
+ 	* gcc.target/powerpc/vsx-vectorize-5.c: Likewise.
+ 	* gcc.target/powerpc/vsx-vectorize-6.c: Likewise.
+ 	* gcc.target/powerpc/vsx-vectorize-7.c: Likewise.
+ 	* gcc.target/powerpc/vsx-vectorize-8.c: Likewise.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/121453
+ 	* gcc.dg/gomp/pr121453.c: New test.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-09-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121870
+ 	* g++.dg/torture/pr121870.C: New testcase.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-08-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121370
+ 	* gcc.dg/torture/pr121370.c: New testcase.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121256
+ 	* gcc.dg/vect/vect-recurr-pr121256.c: New testcase.
+ 	* gcc.dg/vect/vect-recurr-pr121256-2.c: Likewise.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-15  Richard Biener  <rguenther@suse.de>
+ 		    Richard Sandiford   <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/121059
+ 	* gcc.dg/vect/pr121059.c: New testcase.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120944
+ 	* gcc.dg/torture/pr120944.c: New testcase.
+ 
+ 2025-10-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-07  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/120817
+ 	* gcc.dg/vect/pr120817.c: Add SVE HW check.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120817
+ 	* gcc.dg/vect/pr120817.c: New testcase.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-06-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120654
+ 	* gcc.dg/torture/pr120654.c: New testcase.
+ 
+ 2025-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-05-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120357
+ 	* gcc.dg/vect/vect-early-break_136-pr120357.c: New testcase.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122222
+ 	* gcc.target/avr/pr122222-sitod.c: New test.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122220
+ 	* gcc.target/avr/pr122220.c: New test.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122210
+ 	* gcc.target/avr/dtofx.c: New test.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122210
+ 	* gcc.target/avr/fxtod.c: New test.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* gcc.target/avr/sincos-1.c: New test.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122177
+ 	* gcc.target/avr/fminfmax-1.c: New test.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* gcc.target/avr/cmpdi-1.c: New test.
+ 
+ 2025-10-07  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-07  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122187
+ 	* gcc.target/avr/torture/pr122187.c: New test.
+ 
+ 2025-10-07  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-20  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/121981
+ 	* g++.dg/cpp2a/concepts-placeholder15.C: New test.
+ 
+ 2025-10-05  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-03  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121263
+ 	* gfortran.dg/transfer_class_5.f90: New test.
+ 
+ 2025-10-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/113536
+ 	* gnat.dg/reduce2.adb: New test.
+ 
+ 2025-10-03  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2025-09-15  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR tree-optimization/121772
+ 	* gcc.target/aarch64/torture/pr121772.c: New test.
+ 
+ 2025-09-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-08-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/89092
+ 	* gfortran.dg/pr89092.f90: New test.
+ 
+ 2025-09-18  hongtao.liu  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-09-18  hongtao.liu  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pieces-memcpy-18.c: Use -mtune=znver5
+ 	instead of -mtune=sapphirerapids.
+ 	* gcc.target/i386/pieces-memcpy-21.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-46.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-49.c: Ditto.
+ 
+ 2025-09-17  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2025-09-17  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* gcc.target/arm/fp16-aapcs.c: New test.
+ 	* gcc.target/arm/fp16-aapcs-1.c: Removed.
+ 	* gcc.target/arm/fp16-aapcs-2.c: Likewise.
+ 	* gcc.target/arm/fp16-aapcs-3.c: Likewise.
+ 	* gcc.target/arm/fp16-aapcs-4.c: Likewise.
+ 
+ 2025-09-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/121749
+ 	* gcc.target/aarch64/simd/pr121749.c: Use dg-assemble directive.
+ 
+ 2025-09-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/121749
+ 	* gcc.target/aarch64/simd/pr121749.c: New test.
+ 
+ 2025-09-15  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2025-09-09  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR c++/121801
+ 	* g++.dg/abi/pr121801.C: New test.
+ 
+ 2025-09-15  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-16  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/vector/vec-cmp-emu-1.c: New test.
+ 	* gcc.target/s390/vector/vec-cmp-emu-2.c: New test.
+ 	* gcc.target/s390/vector/vec-cmp-emu-3.c: New test.
+ 
+ 2025-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Revert:
+ 	2025-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr120691.c: New test.
+ 
+ 2025-08-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-08-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr120691.c: New test.
+ 
+ 2025-08-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-07-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121145
+ 	* gfortran.dg/pointer_check_15.f90: New test.
+ 
+ 2025-08-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-06-27  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/120784
+ 	* gfortran.dg/interface_63.f90: Extend testcase.
+ 
+ 2025-08-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-06-23  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/120784
+ 	* gfortran.dg/interface_63.f90: New test.
+ 
+ 2025-08-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-07-23  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/119085
+ 	* gcc.dg/tree-ssa/pr119085.c: New test.
+ 
+ 2025-08-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-07-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117423
+ 	* gcc.dg/tree-ssa/pr117423.c: New test.
+ 
+ 2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121118
+ 	* gcc.target/aarch64/sve/acle/general/pr121118_1.c: New test.
+ 
+ 2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/121253
+ 	* gcc.target/aarch64/pr121253.c: New test.
+ 
+ 2025-08-15  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	PR target/121449
+ 	* g++.target/aarch64/sve/pr121449.C: New test.
+ 
+ 2025-08-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 		    Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* lib/target-supports.exp (add_options_for_aarch64_sme)
+ 	(check_effective_target_aarch64_sme_hw): New procedures.
+ 	* g++.target/aarch64/sme/sme_throw_1.C: New test.
+ 	* g++.target/aarch64/sme/sme_throw_2.C: Likewise.
+ 
+ 2025-08-15  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-08-15  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/121542
+ 	* gcc.target/loongarch/pr121542.c: New test.
+ 
+ 2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121414
+ 	* gcc.target/aarch64/sme/pr121414_1.c: New test.
+ 
+ 2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121294
+ 	* gcc.target/aarch64/sve/acle/general/rev_2.c: New test.
+ 
+ 2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-08-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121294
+ 	* gcc.target/aarch64/sve/acle/general/perm_2.c: New test.
+ 	* gcc.target/aarch64/sve/acle/general/perm_3.c: Likewise.
+ 	* gcc.target/aarch64/sve/acle/general/perm_4.c: Likewise.
+ 	* gcc.target/aarch64/sve/acle/general/perm_5.c: Likewise.
+ 	* gcc.target/aarch64/sve/acle/general/perm_6.c: Likewise.
+ 	* gcc.target/aarch64/sve/acle/general/perm_7.c: Likewise.
+ 
+ 2025-08-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121208
+ 	* gcc.target/i386/pr121208-1a.c (dg-options): Add
+ 	-mno-sse -mno-mmx -mno-80387.
+ 	* gcc.target/i386/pr121208-1b.c (dg-options): Likewise.
+ 
+ 2025-08-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-28  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121208
+ 	* gcc.target/i386/pr121208-1a.c: New test.
+ 	* gcc.target/i386/pr121208-1b.c: Likewise.
+ 	* gcc.target/i386/pr121208-2a.c: Likewise.
+ 	* gcc.target/i386/pr121208-2b.c: Likewise.
+ 	* gcc.target/i386/pr121208-3a.c: Likewise.
+ 	* gcc.target/i386/pr121208-3b.c: Likewise.
+ 
+ 2025-08-11  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2025-05-21  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/vect/tsvc/vect-tsvc-s332.c: Require vect_early_break_hw.
+ 	* gcc.dg/vect/tsvc/vect-tsvc-s481.c: Likewise.
+ 	* gcc.dg/vect/tsvc/vect-tsvc-s482.c: Likewise.
+ 
+ 2025-08-10  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2025-08-10  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* lib/multiline.exp: Added pruning of .exe.
+ 
+ 2025-08-08  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-04  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/120620
+ 	* g++.dg/cpp2a/constexpr-dynamic19.C: New test.
+ 	* g++.dg/cpp2a/constexpr-dynamic1a.C: New test.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121413
+ 	* gcc.dg/torture/bitint-85.c: New test.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121127
+ 	* gcc.dg/bitint-125.c: New test.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/121322
+ 	* gcc.dg/pr121322.c: New test.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120954
+ 	* c-c++-common/Warray-bounds-11.c: New test.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120837
+ 	* gcc.dg/ubsan/pr120837.c: New test.
+ 
+ 2025-08-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/120919
+ 	* gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c (main): Change
+ 	sc, ss, si and sll vars from scalars to arrays of 2 elements,
+ 	initialize and test just the first one though.
+ 
+ 2025-08-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-31  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120800
+ 	* g++.dg/cpp0x/constexpr-array30.C: New test.
+ 
+ 2025-07-31  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-31  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	PR target/121028
+ 	* gcc.target/aarch64/sme/call_sm_switch_1.c: Tell check-function
+ 	-bodies not to ignore .inst directives, and replace the test for
+ 	"smstart sm" with one for it's encoding.
+ 	* gcc.target/aarch64/sme/call_sm_switch_11.c: Likewise.
+ 	* gcc.target/aarch64/sme/pr121028.c: New test.
+ 
+ 2025-07-31  Jeevitha  <jeevitha@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2025-07-24  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	PR testsuite/119382
+ 	* gcc.target/powerpc/vsx-builtin-7.c: Add '-fno-ipa-icf' to dg-options.
+ 
+ 2025-07-31  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120427
+ 	* gcc.target/i386/pr120427-5.c: New test.
+ 
+ 2025-07-31  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-07-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr121274.c: New test.
+ 
+ 2025-07-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120427
+ 	* gcc.target/i386/cold-attribute-4.c: Compile with -Oz.
+ 	* gcc.target/i386/pr120427-1.c: New test.
+ 	* gcc.target/i386/pr120427-2.c: Likewise.
+ 	* gcc.target/i386/pr120427-3.c: Likewise.
+ 	* gcc.target/i386/pr120427-4.c: Likewise.
+ 
+ 2025-07-28  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2025-07-17  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/121064
+ 	* gcc.target/loongarch/pr121064.c: New test.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121027
+ 	* gcc.target/aarch64/sve/acle/general/perm_1.c: New test.
+ 
+ 2025-07-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/121027
+ 	* gcc.target/aarch64/sve/permute_5.c: New test.
+ 
+ 2025-07-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120577
+ 	* g++.dg/cpp2a/constexpr-union9.C: New test.
+ 
+ 2025-07-22  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-08-15  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	* gcc.target/powerpc/float128-cmp2-runnable.c: Replace
+ 	ppc_float128_sw with ppc_float128_hw and remove p9vector_hw.
+ 
+ 2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121131
+ 	* gcc.dg/bitint-124.c: New test.
+ 
+ 2025-07-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* gcc.target/i386/pr120908.c: New test.
+ 
+ 2025-07-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/87097
+ 	* g++.dg/cpp0x/constexpr-array29.C: New test.
+ 
+ 2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121060
+ 	* gfortran.dg/associate_75.f90: New test.
+ 
+ 2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120940
+ 	* g++.dg/parse/pr120940.C: New test.
+ 	* g++.dg/warn/Wduplicated-branches9.C: New test.
+ 
+ 2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120471
+ 	* g++.dg/ubsan/pr120471.C: New test.
+ 	* g++.dg/parse/pr120471.C: New test.
+ 
+ 2025-07-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-06-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/120624
+ 	* gcc.target/aarch64/sme/za_state_7.c: New test.
+ 
+ 2025-06-27  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/sso20.adb: New test.
+ 
+ 2025-06-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116674
+ 	* g++.dg/vect/pr116674.cc: New testcase.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* gcc.dg/dfp/bitint-10.c: New test.
+ 	* gcc.dg/dfp/pr120631.c: New test.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* gcc.dg/dfp/bitint-9.c: New test.
+ 
+ 2025-06-13  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-06-12  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR middle-end/117811
+ 	PR testsuite/52641
+ 	* gcc.dg/torture/pr117811.c: Fix for int < 32 bit.
+ 
+ 2025-06-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-25  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR middle-end/117811
+ 	* gcc.dg/torture/pr117811.c: New test.
+ 
+ 2025-06-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/120638
+ 	* gcc.dg/pr120638.c: New test.
+ 
+ 2025-06-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120547
+ 	* gcc.dg/bitint-123.c: New test.
+ 
+ 2025-06-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/opt7.ads: New test.
+ 	* gnat.dg/specs/opt7_pkg.ads: New helper.
+ 	* gnat.dg/specs/opt7_pkg.adb: Likewise.
+ 
+ 2025-06-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120123
+ 	* g++.dg/cpp2a/concepts-lambda24.C: New test.
+ 
+ 2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/120480
+ 	* gcc.dg/pr120480.c: New test.
+ 
+ 2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/119834
+ 	* g++.target/s390/pr119834.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/120161
+ 	* g++.dg/template/unify13.C: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117239
+ 	* gcc.dg/pr117239.c: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/117358
+ 	* gcc.c-torture/compile/pr117358.c: New test.
+ 
+ 2025-05-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-05-15  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/85750
+ 	* gfortran.dg/alloc_comp_auto_array_3.f90: Adjust scan counts.
+ 	* gfortran.dg/alloc_comp_class_3.f03: Remove bogus warnings.
+ 	* gfortran.dg/alloc_comp_class_4.f03: Likewise.
+ 	* gfortran.dg/allocate_with_source_14.f03: Adjust scan count.
+ 	* gfortran.dg/derived_constructor_comps_6.f90: Likewise.
+ 	* gfortran.dg/derived_result_5.f90: New test.
+ 
+ 2025-05-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-08-30  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/98454
+ 	* gfortran.dg/alloc_comp_class_4.f03: Remove bogus pattern.
+ 	* gfortran.dg/pdt_26.f03: Adjust expected count.
+ 	* gfortran.dg/derived_result_3.f90: New test.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/Warray-bounds-11.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/Warray-bounds-11.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/Warray-bounds-11.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/Warray-bounds-11.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,21 ----
+ /* PR c++/120954 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Warray-bounds=2" } */
+ 
+ static const int a[32] = { 11, 12, 13, 14, 15 };
+ static const int b[32] = { 21, 22, 23, 24, 25 };
+ static const int c[32] = { 31, 32, 33, 34, 35 };
+ static const int d[32] = { 111, 112, 113, 114, 115 };
+ static const int e[32] = { 121, 122, 123, 124, 125 };
+ static const int f[32] = { 131, 132, 133, 134, 135 };
+ 
+ int
+ foo (int x, int y)
+ {
+   int r = 0;
+   if (x >= 0 && x < 32)
+     r = (y >= 4 ? (y >= 0x65 ? a : b ) : c)[x];
+   else if (x >= 0x100 && x < 0x120)
+     r = (y >= 4 ? (y >= 0x65 ? d : e ) : f)[x - 0x100];
+   return r;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/cpp/dir-only-10.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/cpp/dir-only-10.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/cpp/dir-only-10.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/cpp/dir-only-10.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,5 ----
+ /* PR preprocessor/123273 */
+ /* { dg-do preprocess } */
+ /* { dg-options -fdirectives-only } */
+ 
+ /* *\/""" */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/cpp/dir-only-11.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/cpp/dir-only-11.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/cpp/dir-only-11.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/cpp/dir-only-11.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,6 ----
+ /* PR preprocessor/123273 */
+ /* { dg-do preprocess } */
+ /* { dg-options -fdirectives-only } */
+ 
+ /* *\\
+ /""" */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/gomp/pr120052.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/gomp/pr120052.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/gomp/pr120052.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/gomp/pr120052.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,32 ----
+ /* PR middle-end/120052 */
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fsanitize=undefined" } */
+ 
+ void
+ foo (unsigned long s, long indx)
+ {
+   long counts[2][s];
+   #pragma omp parallel
+   #pragma omp masked
+   for (int i = 0; i < 2; i++)
+     counts[2][indx] = 1;
+ }
+ 
+ void
+ bar (unsigned long s, long indx)
+ {
+   long counts[2][s];
+   #pragma omp parallel shared(counts)
+   #pragma omp masked
+   for (int i = 0; i < 2; i++)
+     counts[2][indx] = 1;
+ }
+ 
+ void
+ baz (unsigned long s, long indx)
+ {
+   long counts[2][s];
+   #pragma omp parallel private(counts)
+   for (int i = 0; i < 2; i++)
+     counts[2][indx] = 1;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/gomp/pr120564.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/gomp/pr120564.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/gomp/pr120564.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/gomp/pr120564.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,15 ----
+ /* PR middle-end/120564 */
+ /* { dg-do compile } */
+ 
+ void bar (unsigned long long, unsigned long long, unsigned long long);
+ 
+ void
+ foo (void)
+ {
+   unsigned long long v1, v2, v3;
+ #pragma omp parallel for schedule(static, 32) collapse(3)
+   for (v1 = 0; v1 < 20; v1 += 2)
+     for (v2 = __LONG_LONG_MAX__; v2 > __LONG_LONG_MAX__; v2 -= 3)
+       for (v3 = 10; v3 > 0; v3--)
+ 	bar (v1, v2, v3);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/pr111817.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/pr111817.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/pr111817.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/pr111817.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,9 ----
+ /* PR middle-end/111817 */
+ /* { dg-do compile } */
+ 
+ int
+ foo (int x, int y)
+ {
+   asm ("" : "\n=g" (x) : "0" (y));	/* { dg-warning "output constraint '=' for operand 0 is not at the beginning" } */
+   return x;				/* { dg-error "invalid punctuation '\\\\x\[0-9a-zA-Z]*' in constraint" "" { target *-*-* } .-1 } */
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/c-c++-common/pr122188.c gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/pr122188.c
*** gcc-14.3.0/gcc/testsuite/c-c++-common/pr122188.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/c-c++-common/pr122188.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,15 ----
+ /* PR c/122188 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int
+ foo (const unsigned x, int y)
+ {
+   return __builtin_ctzg (x ? x : 4081577U, y);
+ }
+ 
+ int
+ bar (const unsigned x, int y)
+ {
+   return __builtin_clzg (x ? x : 4081577U, y);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/abi/pr121801.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/abi/pr121801.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/abi/pr121801.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/abi/pr121801.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/121801
+ // { dg-do compile { target { c++20 && float16 } } }
+ // { dg-add-options float16 }
+ 
+ template<_Float16 T> void f() {}
+ 
+ void uses() {
+   f<_Float16(1)>();
+   f<_Float16(2)>();
+ }
+ 
+ // { dg-final { scan-assembler "_Z1fILDF16_3c00EEvv" } }
+ // { dg-final { scan-assembler "_Z1fILDF16_4000EEvv" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/absvect.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/absvect.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/absvect.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/absvect.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -fdump-tree-phiopt1" } */
+ /* { dg-additional-options "-msse4" { target { x86_64-*-* i?86-*-* } } } */
+ /* { dg-final { scan-tree-dump-times " = ABS_EXPR <x_\[0-9]*\\\(D\\\)>;" 1 "phiopt1" { target { x86_64-*-* i?86-*-* } } } } */
+ 
+ typedef int v2si __attribute__ ((vector_size (2 * sizeof(int))));
+ typedef short v2hi __attribute__ ((vector_size (2 * sizeof(short))));
+ 
+ v2hi  absvect1 (v2hi x, int i) {
+     v2hi neg = -x;
+     return (x > 0) ? x : neg;
+ }
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/coroutines/pr125376.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/coroutines/pr125376.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/coroutines/pr125376.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/coroutines/pr125376.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,40 ----
+ // PR c++/125376
+ // { dg-do run { target c++26 } }
+ 
+ #include <coroutine>
+ 
+ struct task {
+   struct promise_type {
+     task get_return_object () noexcept { return {}; }
+     std::suspend_never initial_suspend () noexcept { return {}; }
+     std::suspend_never final_suspend ()   noexcept { return {}; }
+     void return_void () noexcept {}
+     void unhandled_exception () {}
+   };
+ };
+ 
+ struct A {
+   unsigned value = 42;
+   A () {}
+   ~A () { if (value != 42) __builtin_abort (); }
+ };
+ 
+ struct B {
+   unsigned value = 43;
+   B () {}
+   ~B () { if (value != 43) __builtin_abort (); }
+ };
+ 
+ task
+ foo ()
+ {
+   auto _ = A {};
+   auto _ = B {};
+   co_return;
+ }
+ 
+ int
+ main ()
+ {
+   foo ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-123889.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-123889.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-123889.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-123889.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/123889
+ // { dg-do compile { target c++11 } }
+ 
+ template <class T>
+ constexpr int func (T) {
+ // { dg-message "'constexpr int func\\\(T\\\) \\\[with T = int\\\]' is not usable as a 'constexpr' function because:" "" { target c++11_only } .-1 }
+ // { dg-error "body of 'constexpr' function 'constexpr int func\\\(T\\\) \\\[with T = int\\\]' not a return-statement" "" { target c++11_only } .-2 }
+   return 1;
+   return 2;
+ }
+ 
+ static_assert (func (1) == 1, "");
+ // { dg-error "non-constant condition for static assertion" "" { target c++11_only } .-1 }
+ // { dg-error "'constexpr int func\\\(T\\\) \\\[with T = int\\\]' called in a constant expression" "" { target c++11_only } .-2 }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-97740a.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-97740a.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-97740a.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-97740a.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/97740
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   constexpr const int* get() const { return &m; }
+ private:
+   int m;
+ } a;
+ 
+ struct B { const int* p; };
+ 
+ template<class T>
+ void f() {
+   constexpr B x = {a.get()}; // { dg-bogus "private" }
+   constexpr B y = {&a.m};    // { dg-error "private" }
+ }
+ 
+ template void f<int>();
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-97740b.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-97740b.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-97740b.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-97740b.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,20 ----
+ // PR c++/97740
+ // { dg-do compile { target c++14 } }
+ 
+ struct A {
+   constexpr const int* get() const { return &m; }
+ private:
+   int m;
+ } a;
+ 
+ struct B { const int* p; };
+ 
+ template<A* arg>
+ void f() {
+   [] (auto) {
+     constexpr B x = {arg->get()}; // { dg-bogus "private" }
+     constexpr B y = {&arg->m};    // { dg-error "private" }
+   }(0);
+ }
+ 
+ template void f<&a>();
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/87097
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   constexpr A() : data() {}
+   struct X { int n; };
+   X data[2];
+ };
+ 
+ static_assert((A(), true), "");
+ static_assert(A().data[0].n == 0, "");
+ static_assert(A().data[1].n == 0, "");
+ constexpr A x;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array30.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-array30.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-array30.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-array30.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/120800
+ // { dg-do compile { target c++11 } }
+ 
+ template<typename T>
+ struct Container
+ {
+  T m_data[1] {};
+ };
+ 
+ class Element
+ {
+ private:
+  Element() = default;
+ 
+ private:
+  bool m_bool1 { false };
+  bool m_bool2;
+ 
+  friend struct Container<Element>;
+ };
+ 
+ Container<Element> element;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor23.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor23.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor23.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor23.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,26 ----
+ // Verify we diagnose and accept, as an extension, a non-empty constexpr
+ // constructor body in C++11 mode.
+ // PR c++/123845
+ // { dg-do compile { target c++11_only } }
+ // { dg-options "" }
+ 
+ constexpr int negate(int n) { return -n; }
+ 
+ struct A {
+   int m;
+   constexpr A() : m(42) {
+     ++m;
+     m = negate(m);
+   } // { dg-warning "does not have empty body \[-Wc++14-extensions\]" }
+ };
+ static_assert(A().m == -43, "");
+ 
+ template<class T>
+ struct B {
+   int m;
+   constexpr B() : m(42) {
+     ++m;
+     m = negate(m);
+   } // { dg-warning "does not have empty body \[-Wc++14-extensions\]" }
+ };
+ static_assert(B<int>().m == -43, "");
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C	Fri Jun 19 06:51:03 2026
***************
*** 6,12 ****
  struct A
  {
    int i;
!   constexpr A(int _i) { i = _i; } // { dg-error "empty body|A::i" "" { target c++17_down } }
  };
  
  template <class T>
--- 6,13 ----
  struct A
  {
    int i;
!   constexpr A(int _i) { i = _i; } // { dg-warning "empty body" "" { target c++11_only } }
! 				  // { dg-error "'A::i' must be init" "" { target c++17_down } .-1 }
  };
  
  template <class T>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/gen-attrs-90.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/gen-attrs-90.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/gen-attrs-90.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/gen-attrs-90.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/123684
+ // { dg-do compile { target c++11 } }
+ 
+ inline namespace [[foo::abi_tag (1, 2, 3)]] A {}	// { dg-warning "'abi_tag' attribute directive ignored" }
+ inline namespace [[foo::visibility (1, 2, 3)]] B {}	// { dg-warning "'visibility' attribute directive ignored" }
+ inline namespace [[foo::deprecated (1, 2, 3)]] C {}	// { dg-warning "'deprecated' attribute directive ignored" }
+ inline namespace [[abi_tag (1, 2, 3)]] D {}		// { dg-warning "'abi_tag' attribute directive ignored" }
+ inline namespace [[visibility (1, 2, 3)]] E {}		// { dg-warning "'visibility' attribute directive ignored" }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/pr123818.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/pr123818.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/pr123818.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/pr123818.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,24 ----
+ // PR c++/123818
+ // { dg-do run { target c++11 } }
+ 
+ struct A { A (int x) : a (x) {} int a; };
+ struct B { A b; };
+ 
+ int
+ foo (B x = B { 42 })
+ {
+     return x.b.a;
+ }
+ 
+ int
+ bar (B x = B { 43 })
+ {
+     return x.b.a;
+ }
+ 
+ int
+ main ()
+ {
+   if (foo () != bar () - 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/pr124489.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/pr124489.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/pr124489.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/pr124489.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,9 ----
+ // PR c++/124489
+ // { dg-do compile { target c++11 } }
+ 
+ void
+ g ()
+ {
+   constexpr decltype(nullptr) dm = nullptr; // { dg-message ".constexpr std::nullptr_t dm. previously declared here" }
+   constexpr decltype(nullptr) dm = nullptr; // { dg-error "redeclaration of .constexpr std::nullptr_t dm." }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/rv-decl1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/rv-decl1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp0x/rv-decl1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp0x/rv-decl1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/65271
+ // { dg-do compile { target c++11 } }
+ 
+ struct {} && m0 = {};
+ union  {} && m1 = {};
+ class  {} && m2 = {};
+ enum   {} && m3 = {};
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,20 ----
+ // PR c++/120757
+ // { dg-do compile { target c++14 } }
+ 
+ template <typename> struct A
+ {
+   auto foo() {}
+ };
+ 
+ auto bar(void (A<int>::*)()) {}
+ 
+ template <int> auto baz()
+ {
+   bar(&A<int>::foo);
+ }
+ 
+ int main()
+ {
+   baz<0>();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-121445.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1y/constexpr-121445.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-121445.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1y/constexpr-121445.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/121445
+ // { dg-do compile { target c++14 } }
+ 
+ struct D {
+   const char *d;
+   const char *foo () { return ""; };			// { dg-message "declared here" "" { target c++20_down } }
+   constexpr D () : d (foo ()) {}			// { dg-error "call to non-'constexpr' function 'const char\\\* D::foo\\\(\\\)'" "" { target c++20_down } }
+   constexpr D &operator= (const char *) { return *this; }
+ };
+ struct S {
+   constexpr S ()
+   {
+     struct A { D a; };
+     struct B { A b; };
+     struct C { B c; };
+     C d {};
+     d.c.b.a = "";
+   }
+ };
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/decomp66.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/decomp66.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/decomp66.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/decomp66.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,23 ----
+ // PR c++/123667
+ // { dg-do compile { target c++14 } }
+ // { dg-options "" }
+ 
+ namespace std {
+   template <typename T> struct tuple_size;
+   template <int, typename> struct tuple_element;
+ }
+ 
+ struct A {
+   int i;
+   template <int I> int &get () { return i; }
+ };
+ 
+ template <> struct std::tuple_size <A> { static const int value = 2; };
+ template <int I> struct std::tuple_element <I,A> { using type = int; };
+ 
+ int
+ main ()
+ {
+   auto [ x, y ] = A { 0 };	// { dg-warning "structured bindings only available with" "" { target c++14_down } }
+   [] (auto t) { using z = decltype (x); } (1);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/decomp67.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/decomp67.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/decomp67.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/decomp67.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,33 ----
+ // PR c++/123667
+ // { dg-do compile { target c++11 } }
+ // { dg-options "" }
+ 
+ namespace std {
+   template <typename T> struct tuple_size;
+   template <int, typename> struct tuple_element;
+ }
+ 
+ struct A {
+   int i;
+   template <int I> int &get () { return i; }
+ };
+ 
+ template <> struct std::tuple_size <A> { static const int value = 2; };
+ template <int I> struct std::tuple_element <I,A> { using type = int; };
+ 
+ auto [ x, y ] = A { 0 };	// { dg-warning "structured bindings only available with" "" { target c++14_down } }
+ 
+ template <int N>
+ void
+ foo ()
+ {
+   using a = decltype (x);
+   auto [ x, y ] = A { 0 };	// { dg-warning "structured bindings only available with" "" { target c++14_down } }
+   using b = decltype (x);
+ }
+ 
+ void
+ bar ()
+ {
+   foo <42> ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/eval-order14.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/eval-order14.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/eval-order14.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/eval-order14.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,114 ----
+ // PR c++/122772
+ // { dg-do run }
+ 
+ struct S { int y : 7; } s;
+ struct T { int x; int z : 7; } t;
+ int cnt, mode;
+ 
+ int
+ foo ()
+ {
+ #if __cplusplus >= 201703L
+   if (cnt != 1 + (mode & 1))
+     __builtin_abort ();
+ #endif
+   ++cnt;
+   return 2;
+ }
+ 
+ int
+ bar ()
+ {
+ #if __cplusplus >= 201703L
+   if (cnt != 0)
+     __builtin_abort ();
+ #endif
+   ++cnt;
+   return 40;
+ }
+ 
+ S &
+ baz ()
+ {
+ #if __cplusplus >= 201703L
+   if (cnt != 2 + (mode & 1))
+     __builtin_abort ();
+ #endif
+   if (mode & 2)
+     __builtin_abort ();
+   ++cnt;
+   return s;
+ }
+ 
+ T &
+ qux ()
+ {
+ #if __cplusplus >= 201703L
+   if (cnt != 2 + (mode & 1))
+     __builtin_abort ();
+ #endif
+   if ((mode & 2) == 0)
+     __builtin_abort ();
+   ++cnt;
+   return t;
+ }
+ 
+ bool
+ fred (bool x)
+ {
+ #if __cplusplus >= 201703L
+   if (cnt != 1)
+     __builtin_abort ();
+ #endif
+   ++cnt;
+   return x;
+ }
+ 
+ void
+ plugh (bool b)
+ {
+   S x;
+   x.y = 5;
+   mode = 0;
+   cnt = 0;
+   (x.y = foo ()) += bar ();
+   if (cnt != 2 || x.y != 42)
+     __builtin_abort ();
+   x.y = 5;
+   cnt = 0;
+   (baz ().y = foo ()) += bar ();
+   if (cnt != 3 || s.y != 42)
+     __builtin_abort ();
+   s.y = 5;
+   mode = (b ? 0 : 2);
+   cnt = 0;
+   (b ? (baz ().y = foo ()) : (qux ().z = foo ())) += bar ();
+   if (cnt != 3 || (b ? (s.y != 42) : (t.z != 42)))
+     __builtin_abort ();
+   s.y = 5;
+   t.z = 5;
+   mode |= 1;
+   cnt = 0;
+   (fred (b) ? (baz ().y = foo ()) : (qux ().z = foo ())) += bar ();
+   if (cnt != 4 || (b ? (s.y != 42) : (t.z != 42)))
+     __builtin_abort ();
+   s.y = 5;
+   t.z = 5;
+   mode = 0;
+   cnt = 0;
+   ++x.y += bar ();
+   if (cnt != 1 || x.y != 46)
+     __builtin_abort ();
+   cnt = 0;
+   x.y = 9;
+   --x.y += bar ();
+   if (cnt != 1 || x.y != 48)
+     __builtin_abort ();
+ }
+ 
+ int
+ main ()
+ {
+   plugh (false);
+   plugh (true);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/static_assert1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/static_assert1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp1z/static_assert1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp1z/static_assert1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/91388
+ // Make sure we don't emit -Wreturn-type in functions with failed static_asserts.
+ // { dg-do compile { target c++17 } }
+ 
+ template <int N>
+ int
+ foo ()
+ {
+   if constexpr (N <= 42)
+     return N;
+   else
+     static_assert (false, "too high N");	// { dg-error "too high N" }
+ }						// { dg-bogus "no return statement in function returning non-void" }
+ 
+ int a = foo <0> ();
+ int b = foo <42> ();
+ int c = foo <100> ();
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/auto-fncast19.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/auto-fncast19.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/auto-fncast19.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/auto-fncast19.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/120685
+ // { dg-do compile { target c++11 } }
+ // { dg-options "" }
+ 
+ template <typename T>
+ void foo (decltype (auto (T ())) x) {}	// { dg-warning "'auto\\\(x\\\)' only available with" "" { target c++20_down } }
+ 
+ int
+ main ()
+ {
+   foo <int> (1);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited10.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited10.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited10.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited10.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/122070
+ // { dg-do compile { target c++23 } }
+ 
+ template<class T> struct A { A(T) {}; };
+ 
+ using B = A<int>;
+ 
+ template<class T=void>
+ struct C : B { using B::B; };
+ 
+ C c = 0;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited9.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited9.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited9.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited9.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,31 ----
+ // PR c++/122070
+ // { dg-do compile { target c++23 } }
+ 
+ namespace std {
+     using size_t = decltype(sizeof(0));
+     template<typename CharT>
+     struct basic_string_view {
+         const CharT* ptr;
+         size_t len;
+         constexpr basic_string_view(const CharT* p) : ptr(p), len(0) { while (p && p[len]) ++len; }
+     };
+     using string_view = basic_string_view<char>;
+ }
+ 
+ template<std::size_t N>
+ struct sized_string_view: std::string_view {
+     using std::string_view::string_view;
+ };
+ template<std::size_t N>
+ sized_string_view(const char (&str)[N]) -> sized_string_view<N - 1>;
+ 
+ constexpr auto string_builder(auto first, auto second, auto... trailing) {
+     constexpr auto is_last = sizeof...(trailing) == 0;
+     auto buffer = 1;
+     if constexpr (is_last) {
+         return buffer;
+     } else
+         return string_builder(buffer, trailing...);
+ }
+ 
+ constexpr auto copyright = string_builder(sized_string_view("a"), sized_string_view("b"), sized_string_view("c"));
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C	Fri Jun 19 06:51:03 2026
***************
*** 1,6 ****
--- 1,9 ----
  // P0847R7
  // { dg-do run { target c++23 } }
  
+ // PR c++/124632
+ // { dg-additional-options "-Wall --param ggc-min-expand=0 --param ggc-min-heapsize=0" }
+ 
  // recursive lambdas
  
  inline constexpr int correct_result = 5 + 4 + 3 + 2 + 1; 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C	Fri Jun 19 06:51:03 2026
***************
*** 352,359 ****
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 201907
! #  error "__cpp_deduction_guides != 201907"
  #endif
  
  #ifndef __cpp_if_constexpr
--- 352,359 ----
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 202207
! #  error "__cpp_deduction_guides != 202207"
  #endif
  
  #ifndef __cpp_if_constexpr
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C	Fri Jun 19 06:51:03 2026
***************
*** 352,359 ****
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 201907
! #  error "__cpp_deduction_guides != 201907"
  #endif
  
  #ifndef __cpp_if_constexpr
--- 352,359 ----
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 202207
! #  error "__cpp_deduction_guides != 202207"
  #endif
  
  #ifndef __cpp_if_constexpr
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/123676
+ // { dg-do compile { target c++20 } }
+ 
+ template<class...>
+ concept C = true;
+ 
+ template<class... Ts>
+ auto f() -> decltype(C<Ts...>) {
+   return true;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/122550
+ // { dg-do compile { target c++20 } }
+ 
+ struct Hasher;
+ template <class a>
+ concept C = true;
+ 
+ template<C T>
+ void add(Hasher&, T);
+ 
+ struct Hasher {
+     template<C T>
+     friend void add(Hasher& hasher, T integer) {}
+ };
+ 
+ int main() {
+     Hasher h;
+     add(h, 0);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/122550
+ // { dg-do compile { target c++20 } }
+ 
+ template<typename U>
+ struct Hasher;
+ 
+ template <class a>
+ concept C = true;
+ 
+ template<C T>
+ void add(Hasher<int>&, T);
+ 
+ template<>
+ struct Hasher<int> {
+     template<C T>
+     friend void add(Hasher& hasher, T integer) {}
+ };
+ 
+ int main() {
+     Hasher<int> h;
+     add(h, 0);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/120123
+ // { dg-do compile { target c++20 } }
+ 
+ struct H {
+     void member(int) {}
+     void call() {
+         [this]() {
+             [this](const auto& v)
+                 requires requires { /*this->*/member(v); }
+             { return member(v); }(0);
+         };
+     }
+ };
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/121981
+ // { dg-do compile { target c++20 } }
+ 
+ template<auto V>
+ concept C = requires { V; };
+ 
+ template<class T, auto V>
+ concept D = C<V>;
+ 
+ template<auto V, D<V> auto W>
+ struct A { };
+ 
+ template<auto V, D<V> T>
+ struct B { };
+ 
+ A<0, 1> a;
+ B<0, int> b;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr122494.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-pr122494.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr122494.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-pr122494.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,24 ----
+ // PR c++/122494
+ // { dg-do compile { target c++20 } }
+ 
+ template<class T>
+ concept C = false;
+ 
+ template<class T> requires (!C<T>)
+ struct A {
+   static constexpr unsigned v = 0;
+ };
+ 
+ template<class T>
+ struct B {
+   static constexpr unsigned v = A<T>::v;
+ 
+   constexpr static bool f() {
+     return [](auto) {
+       if (v == 0) { }
+       return true;
+     }(0);
+   }
+ };
+ 
+ static_assert(B<int>::f());
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr123814.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-pr123814.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr123814.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/concepts-pr123814.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,34 ----
+ // PR c++/123814
+ // { dg-do compile { target c++20 } }
+ // { dg-additional-options "-Wall --param ggc-min-expand=0 --param ggc-min-heapsize=0" }
+ 
+ namespace std {
+   struct source_location {
+     struct __impl {
+       const char *_M_file_name;
+       const char *_M_function_name;
+       unsigned _M_line;
+       unsigned _M_column;
+     };
+     static void current(const __impl* = __builtin_source_location());
+   };
+ } // namespace std
+ 
+ template <typename> concept same_as = true;
+ 
+ template <typename... Us>
+ concept one_of = (same_as<Us> || ...);
+ 
+ template <one_of<> T> constexpr int buffer_size_for_int = 0;
+ template <> constexpr int buffer_size_for_int<int> = 1;
+ 
+ template <int> using Basic_Characters = int;
+ 
+ template <typename T>
+ Basic_Characters<buffer_size_for_int<T>> to_characters() {
+   std::source_location::current();
+ } // { dg-warning "return statement" }
+ 
+ void go() {
+   to_characters<int>();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/consteval42.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/consteval42.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/consteval42.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/consteval42.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,21 ----
+ // PR c++/122658
+ // { dg-do compile { target c++20 } }
+ 
+ struct S {
+   consteval S () noexcept { }
+   consteval S (const S &) = default;
+ };
+ 
+ template <typename T>
+ S
+ foo ()
+ {
+   constexpr auto s = S();
+   return s;
+ }
+ 
+ S
+ bar ()
+ {
+   return foo <int> ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic19.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic19.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic19.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic19.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/120620
+ // { dg-do compile }
+ 
+ #include <cxxabi.h>
+ 
+ struct A* a;
+ 
+ void f() {
+   void* const p = abi::__dynamic_cast(&a, 0, 0, 42);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic1a.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic1a.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic1a.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic1a.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,6 ----
+ // Test that including <cxxabi.h>, whence the actual abi:__dynamic_cast
+ // is declared, doesn't affect our constexpr dynamic_cast handling.
+ // { dg-do compile { target c++20 } }
+ 
+ #include <cxxabi.h>
+ #include "constexpr-dynamic1.C"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-try1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-try1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-try1.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-try1.C	Fri Jun 19 06:51:03 2026
*************** struct S {
*** 32,37 ****
--- 32,38 ----
      } catch (int) {	// { dg-error "compound-statement in 'constexpr' function" "" { target c++11_only } }
      }			// { dg-error "compound-statement in 'constexpr' function" "" { target c++11_only } .-2 }
    } catch (...) {	// { dg-error "'constexpr' constructor does not have empty body" "" { target c++11_only } }
+ 		        // { dg-error "compound-statement in 'constexpr' function" "" { target c++11_only } .-1 }
    }
    int m;
  };
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C	Fri Jun 19 06:51:03 2026
*************** struct S {
*** 32,38 ****
      try {		// { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } }
      } catch (int) {	// { dg-warning "compound-statement in 'constexpr' function" "" { target c++11_only } }
      }			// { dg-warning "compound-statement in 'constexpr' function" "" { target c++11_only } .-2 }
!   } catch (...) {	// { dg-error "'constexpr' constructor does not have empty body" "" { target c++11_only } }
    }
    int m;
  };
--- 32,39 ----
      try {		// { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } }
      } catch (int) {	// { dg-warning "compound-statement in 'constexpr' function" "" { target c++11_only } }
      }			// { dg-warning "compound-statement in 'constexpr' function" "" { target c++11_only } .-2 }
!   } catch (...) {	// { dg-warning "'constexpr' constructor does not have empty body" "" { target c++11_only } }
! 			// { dg-warning "compound-statement in 'constexpr' function" "" { target c++11_only } .-1 }
    }
    int m;
  };
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C	Fri May 23 11:02:05 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C	Fri Jun 19 06:51:03 2026
*************** struct S {
*** 31,37 ****
      try {		// { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } }
      } catch (int) {
      }
!   } catch (...) {	// { dg-error "'constexpr' constructor does not have empty body" "" { target c++11_only } }
    }
    int m;
  };
--- 31,37 ----
      try {		// { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } }
      } catch (int) {
      }
!   } catch (...) {	// { dg-warning "'constexpr' constructor does not have empty body" "" { target c++11_only } }
    }
    int m;
  };
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,33 ----
+ // PR c++/120577
+ // { dg-do compile { target c++20 } }
+ 
+ template <class _Tp> struct optional {
+   union {
+     _Tp __val_;
+   };
+   template <class... _Args>
+   constexpr optional(_Args... __args)
+       : __val_(__args...) {}
+ };
+ template <class _Tp, class... _Args>
+ constexpr optional<_Tp> make_optional(_Args... __args) {
+   return optional<_Tp>(__args...);
+ }
+ 
+ struct __non_trivial_if {
+   constexpr __non_trivial_if() {}
+ };
+ struct allocator : __non_trivial_if {};
+ struct __padding {};
+ struct __short {
+   [[__no_unique_address__]] __padding __padding_;
+   int __data_;
+ };
+ struct basic_string {
+   union {
+     __short __s;
+   };
+   [[__no_unique_address__]] allocator __alloc_;
+   constexpr basic_string(int, int) {}
+ };
+ auto opt = make_optional<basic_string>(4, 'X');
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/pr123578.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/pr123578.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/cpp2a/pr123578.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/cpp2a/pr123578.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,9 ----
+ // PR c++/123578
+ // { dg-do compile { target c++20 } }
+ // { dg-options "-fdump-tree-all" }
+ 
+ namespace {
+   template <typename>
+   struct A { A (decltype ([] { return 0; } ())) {} };
+   A <int> b = 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/dfp/pr122834-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/dfp/pr122834-1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/dfp/pr122834-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/dfp/pr122834-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/122834
+ // { dg-do compile { target { c++11 && float128 } } }
+ // { dg-options "" }
+ // { dg-add-options float128 }
+ 
+ typedef decltype (0.0DL) A;
+ typedef _Float128 B;
+ void bar (A);			// { dg-message "initializing argument 1 of" }
+ 
+ void
+ foo (B x)
+ {
+   bar (x);			// { dg-warning "with unordered conversion rank" }
+ }
+ 
+ auto a = 0.0DL + 1.0F128;	// { dg-error "invalid operands to binary \\\+" }
+ auto b = 1.0F128 + 0.0DL;	// { dg-error "invalid operands to binary \\\+" }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/dfp/pr122834-2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/dfp/pr122834-2.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/dfp/pr122834-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/dfp/pr122834-2.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/122834
+ // { dg-do compile { target { c++11 && float16 } } }
+ // { dg-options "" }
+ // { dg-add-options float16 }
+ 
+ typedef decltype (0.0DL) A;
+ typedef _Float16 B;
+ void bar (A);
+ 
+ void
+ foo (B x)
+ {
+   bar (x);
+ }
+ 
+ auto a = 0.0DL + 1.0F16;
+ auto b = 1.0F16 + 0.0DL;
+ static_assert (__is_same_as (decltype (0.0DL + 1.0F16), decltype (0.0DL)));
+ static_assert (__is_same_as (decltype (1.0F16 + 0.0DL), decltype (0.0DL)));
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/gomp/pr121977.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/gomp/pr121977.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/gomp/pr121977.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/gomp/pr121977.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/121977
+ // { dg-do compile }
+ // { dg-additional-options "-ftrivial-auto-var-init=zero" }
+ 
+ struct T { T () {}; virtual ~T () {}; int t; };
+ struct S : virtual public T { int a; void foo (); };
+ 
+ void
+ S::foo ()
+ {
+ #pragma omp parallel
+   {
+     #pragma omp taskloop firstprivate (a, t) lastprivate (t)
+     for (int i = 0; i < a; i++)
+       t++;
+   }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/gomp/pr123597.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/gomp/pr123597.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/gomp/pr123597.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/gomp/pr123597.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,25 ----
+ // PR c++/123597
+ // { dg-do compile }
+ // { dg-additional-options "-fdump-tree-gimple" }
+ // { dg-final { scan-tree-dump-not " shared\\\(sum\\\)" "gimple" } }
+ 
+ template <typename T>
+ void
+ foo (T *x)
+ {
+   #pragma omp teams distribute parallel for collapse(2)
+   for (long i = 0; i < 5; i++)
+     for (long j = 0; j < 5; j++)
+       {
+         T sum = 0;
+         for (long k = 0; k < 5; k++)
+           sum += 2;
+         x[i + 5 * j] = sum;
+       }
+ }
+ 
+ void
+ bar (int *x)
+ {
+   foo (x);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/ipa/pr106260.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/ipa/pr106260.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/ipa/pr106260.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/ipa/pr106260.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,64 ----
+ // { dg-do compile }
+ // { dg-options "-O2 -std=gnu++14 -fwhole-program -fno-unit-at-a-time" }
+ 
+ struct A;
+ template <class T>
+ struct Q { Q (T); };
+ template<typename T, class D>
+ struct U {
+   ~U () { m1 (nullptr); }
+   D m2 ();
+   T *u;
+   void m1 (T *) { m2 () (u); }
+ };
+ struct F { F (int *); };
+ template <class, class T = F>
+ using W = Q<T>;
+ int a, b;
+ void fn1 (void *);
+ template <class T>
+ void
+ fn2 (T *x)
+ {
+   if (x)
+     x->~T();
+   fn1 (x);
+ }
+ template <typename T>
+ struct C {
+   void operator() (T *x) { fn2 (x); }
+ };
+ struct D;
+ template <typename T, typename D = C<T> >
+ using V = U<T, D>;
+ struct A {
+   A (int *);
+ };
+ struct S;
+ struct G {
+   V<S> m3 ();
+ };
+ struct S {
+   int e;
+   virtual ~S () {}
+ };
+ template<typename T>
+ struct H {
+   H (int, T x, int) : h(x) {}
+   G g;
+   void m4 () { g.m3 (); }
+   T h;
+ };
+ struct I {
+   I(A, W<D>);
+ };
+ void
+ test ()
+ {
+   A c (&b);
+   W<D> d (&b);
+   I e (c, d);
+   H<I> f (0, e, a);
+   f.m4 ();
+ }
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/ipa/pr122856.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/ipa/pr122856.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/ipa/pr122856.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/ipa/pr122856.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -std=gnu++11" } */
+ 
+ template <typename T>
+ class Base {
+ public:
+     virtual int get();
+     virtual ~Base() = default;
+ };
+ 
+ template <typename T>
+ class Derived : public Base<T> {
+ public:
+     int get() override { return Base<T>::get(); }
+ };
+ 
+ template <typename T>
+ int Base<T>::get() {
+ 
+     return static_cast<Derived<int>*>(this)->get();
+ }
+ 
+ int main() {
+     Derived<int> d;
+     return d.get();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/lto/pr114790_0.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/lto/pr114790_0.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/lto/pr114790_0.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/lto/pr114790_0.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-lto-do link }
+ // { dg-lto-options { { -w -flto -g -flto-partition=1to1 -O2 -shared -fPIC -fvisibility=hidden} } }
+ // { dg-require-effective-target fpic }
+ // { dg-require-effective-target shared }
+ struct APITracerContext {
+   virtual ~APITracerContext() = default;
+   virtual void releaseActivetracersList() = 0;
+ };
+ struct APITracerContextImp : APITracerContext {
+   ~APITracerContextImp() override;
+   void releaseActivetracersList() override;
+ };
+ struct APITracerContextImp globalAPITracerContextImp;
+ struct APITracerContextImp *pGlobalAPITracerContextImp = &globalAPITracerContextImp;
+ APITracerContextImp::~APITracerContextImp() {}
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/lto/pr114790_1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/lto/pr114790_1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/lto/pr114790_1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/lto/pr114790_1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,15 ----
+ struct APITracerContext {
+   virtual void releaseActivetracersList() = 0;
+ };
+ extern struct APITracerContextImp *pGlobalAPITracerContextImp;
+ struct APITracerContextImp : APITracerContext { void releaseActivetracersList();};
+ int g();
+ inline int
+ apiTracerWrapperImp(  ) {
+   for (int i = 0; i < g(); i++) 
+   pGlobalAPITracerContextImp->releaseActivetracersList();
+ }
+ __attribute__((visibility("default"))) int
+ zeCommandListAppendMemoryCopyTracing() {
+   return apiTracerWrapperImp(      );
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/opt/pr122394.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/opt/pr122394.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/opt/pr122394.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/opt/pr122394.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,20 ----
+ // PR tree-optimization/122394
+ // { dg-do compile { target c++23 } }
+ // { dg-options "-O1 -g" }
+ 
+ #include <compare>
+ 
+ struct A {
+   friend auto operator<=> (A, A) = default;
+   double a;
+ };
+ void foo ();
+ A b, c;
+ 
+ void
+ bar ()
+ {
+   bool d = c >= b;
+   if (d)
+     foo ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/other/anon-union8.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/other/anon-union8.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/other/anon-union8.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/other/anon-union8.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/124850
+ // { dg-do compile }
+ 
+ static union { int i; };
+ int &r = i;
+ 
+ int
+ foo ()
+ {
+   return r;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/parse/crash81.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/parse/crash81.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/parse/crash81.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/parse/crash81.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/120876
+ // { dg-do compile { target c++11 } }
+ 
+ template <typename T>
+ struct S {
+   static bool foo (decltype (bar (T {})));	// { dg-error "'bar' was not declared in this scope; did you mean 'baz'\\\?" }
+   static constexpr bool s = foo (0);
+ };
+ 
+ void
+ baz ()
+ {
+   S <int>::s;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/parse/pr120471.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/parse/pr120471.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/parse/pr120471.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/parse/pr120471.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,42 ----
+ // PR c++/120471
+ // { dg-do compile }
+ 
+ extern int a1[], a2[], a3[], a4[];
+ 
+ int corge (int);
+ 
+ int
+ foo (int p)
+ {
+   return (p ? a1 : a2)[1];
+ }
+ 
+ int
+ bar (int p, int q)
+ {
+   return (p ? a1 : a2)[q];
+ }
+ 
+ int
+ garply (int p, int q)
+ {
+   return (p ? a1 : a2)[corge (q)];
+ }
+ 
+ int
+ baz (int p, int q)
+ {
+   return (p ? q ? a1 : a2 : q ? a3 : a4)[1];
+ }
+ 
+ int
+ qux (int p, int q, int r)
+ {
+   return (p ? q ? a1 : a2 : q ? a3 : a4)[r];
+ }
+ 
+ int
+ fred (int p, int q, int r)
+ {
+   return (p ? q ? a1 : a2 : q ? a3 : a4)[corge (r)];
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/parse/pr120940.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/parse/pr120940.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/parse/pr120940.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/parse/pr120940.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/120940
+ // { dg-do run }
+ 
+ int a[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+ int b[8] = { 9, 10, 11, 12, 13, 14, 15, 16 };
+ 
+ __attribute__((noipa)) int
+ foo (int x, int y)
+ {
+   return (x ? a : b)[y];
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (1, 4) != 5 || foo (0, 6) != 15)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/pr123575.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/pr123575.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/pr123575.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/pr123575.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do compile }
+ // { dg-options "-O -Wno-psabi" }
+ 
+ typedef int __attribute__((vector_size(sizeof(int)*2))) v2i;
+ typedef long __attribute__((vector_size(sizeof(long)*2))) v2l;
+ 
+ v2l f(v2i a)
+ {
+   v2l  t = __builtin_convertvector(a, v2l);
+   t = t > 0 ? t : -t;
+   return t;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/template/unify13.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/template/unify13.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/template/unify13.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/template/unify13.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/120161
+ 
+ template<class T, class U>
+ struct mp_list { };
+ 
+ template<class T>
+ struct Wrap { struct type { }; };
+ 
+ struct A : mp_list<Wrap<int>::type, void>
+          , mp_list<Wrap<long>::type, void> { };
+ 
+ template<class U>
+ void f(mp_list<Wrap<int>::type, U>*);
+ 
+ int main() {
+   A a;
+   f(&a);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr112400.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr112400.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr112400.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr112400.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,114 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Wno-return-type" } */
+ 
+ typedef struct a *b;
+ template <typename c, typename d> c e(d);
+ enum f { g, h, i };
+ enum j { k, l, m, aa };
+ struct a {
+   f ab;
+ };
+ struct af {
+ } n;
+ struct ah;
+ class al;
+ b q;
+ void r(a *);
+ struct o : af {};
+ struct p : o {};
+ struct ag : p {};
+ j s(af *);
+ b t();
+ f fn4();
+ unsigned fn5(ag *);
+ b u(ag *, unsigned);
+ af *v(b(b), b);
+ static bool w(al *, af *, b(b), b aw, b *ax, j) {
+   r(ax[2]);
+   if (aw)
+     return false;
+ }
+ ag *ay;
+ void x(al *at, b as(b), b bb, b bc) {
+   switch (bb->ab)
+   case i:
+     if (af *bd = v(as, bb))
+       if (e<ah *>(bd))
+ 	switch (fn4())
+ 	case h: {
+ 	  b be;
+ 	  switch (be->ab)
+ 	  case i:
+ 	    if (af *bf = v(as, be))
+ 	      if (e<ah *>(bf))
+ 		if (ag *bg = e<ag *>(bf))
+ 		  switch (s(bg)) {
+ 		  case k:
+ 		    if (fn5(bg) == 1) {
+ 		      b bh = u(bg, 0);
+ 		      bh = t();
+ 		      switch (bc->ab)
+ 		      case g: {
+ 			b ax[]{be, bh, bc};
+ 			w(at, &n, as, q, ax, k);
+ 		      }
+ 		    }
+ 		    break;
+ 		  case l:
+ 		    if (fn5(bg) == 1) {
+ 		      b bh = u(bg, 0);
+ 		      bh = t();
+ 		      switch (bc->ab)
+ 		      case g: {
+ 			b ax[]{be, bh, bc};
+ 			w(at, &n, as, q, ax, l);
+ 		      }
+ 		    }
+ 		  }
+ 	}
+ 	  else switch (s(ay)) {
+ 	  case k:
+ 	    if (fn5(ay) == 1) {
+ 	      b be = u(ay, 0);
+ 	      be = t();
+ 	      switch (bc->ab)
+ 	      case g: {
+ 		b ax[]{bb, be, bc};
+ 		w(at, &n, as, q, ax, k);
+ 	      }
+ 	    }
+ 	    break;
+ 	  case l:
+ 	    if (fn5(ay) == 1) {
+ 	      b be = u(ay, 0);
+ 	      be = t();
+ 	      switch (bc->ab)
+ 	      case g: {
+ 		b ax[]{bb, be, bc};
+ 		w(at, &n, as, q, ax, l);
+ 	      }
+ 	    }
+ 	    break;
+ 	  case m:
+ 	    if (fn5(ay) == 1) {
+ 	      b be = u(ay, 0);
+ 	      be = t();
+ 	      switch (bc->ab)
+ 	      case g: {
+ 		b ax[]{bb, be, bc};
+ 		w(at, &n, as, q, ax, m);
+ 	      }
+ 	    }
+ 	    break;
+ 	  case aa:
+ 	    if (fn5(ay) == 1) {
+ 	      b be = u(ay, 0);
+ 	      be = t();
+ 	      switch (bc->ab)
+ 	      case g: {
+ 		b ax[]{bb, be, bc};
+ 		w(at, &n, as, q, ax, aa);
+ 	      }
+ 	    }
+ 	  }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr117217-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr117217-1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr117217-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr117217-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,24 ----
+ struct [[gnu::packed]] A {
+   int i;
+   bool b;
+ };
+ 
+ struct [[gnu::packed]] B {
+   int i;
+   bool b : 1;
+ };
+ 
+ struct E {
+   union Data {
+     A a;
+     B b;
+     Data(const B &b) : b(b) {}
+   } data;
+ };
+ 
+ extern B copy;
+ 
+ int main() {
+   E e{{B()}};
+   copy = e.data.b; // NEEDED FOR ICE
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr117217-2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr117217-2.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr117217-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr117217-2.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,24 ----
+ struct a {
+   int b;
+   long c;
+   long d;
+   bool f;
+ };
+ struct g {
+   int b;
+   long c;
+   long d;
+   bool : 1;
+ } h;
+ struct l {
+   union i {
+     a j;
+     g k;
+     i(g m) : k(m) {}
+   } data;
+ };
+ int main() {
+   l e{g()};
+   h = e.data.k;
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr120987-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr120987-1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr120987-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr120987-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,56 ----
+ // { dg-do run { target c++11 } }
+ // PR tree-optimization/120987
+ 
+ #include <memory>
+ #include <string>
+ #include <cstdlib>
+ 
+ #define ERROR_STRING  "012345678901234567"
+ 
+ struct gdb_exception
+ {
+   gdb_exception (const char *s)
+     : message (std::make_shared<std::string> (s))
+   {}
+ 
+   explicit gdb_exception (gdb_exception &&other) noexcept
+     : message (std::move (other.message))
+   {
+     volatile int a = 1;
+     if (a != 1)
+       abort ();
+   }
+   
+ 
+   std::shared_ptr<std::string> message;
+ };
+ 
+ void __attribute__((noinline, noclone))
+ throw_exception (gdb_exception &&exception)
+ {
+   throw gdb_exception (std::move (exception));
+ }
+ 
+ static void __attribute__((noinline, noclone))
+ parse_linespec (void)
+ {
+   struct gdb_exception file_exception (ERROR_STRING);
+   throw_exception (std::move (file_exception));
+ }
+ 
+ int
+ main (void)
+ {
+   try
+     {
+       parse_linespec ();
+     }
+   catch (const gdb_exception &e)
+     {
+       if (*e.message != ERROR_STRING)
+         __builtin_abort();
+       return 0;
+     }
+ 
+   __builtin_abort();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr121870.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr121870.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr121870.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr121870.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,20 ----
+ __attribute__((noreturn)) void f1(void)
+ {
+     while(true) {}
+ }
+ static void (*fptr)(void) = f1;
+ struct s1
+ {
+     ~s1() {
+         fptr();
+     }
+     void DoInner() {
+         fptr();
+     }
+ };
+ 
+ void f()
+ {
+     s1 xxx;
+     xxx.DoInner();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr123596.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr123596.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr123596.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr123596.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,18 ----
+ // { dg-do compile }
+ 
+ struct b {
+   ~b() {}
+ };
+ struct c {
+   c(long, const int &, b = b());
+ };
+ int _setjmp();
+ long d;
+ void e(int *);
+ int a;
+ int main()
+ {
+   auto f = [](int *data) { e(data); };
+   f(&a);
+   c(d, _setjmp());
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr123603.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr123603.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr123603.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr123603.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do compile }
+ 
+ void _setjmp();
+ void a() __attribute__((__noreturn__));
+ struct b {
+   b(int c) {
+     if (c)
+       a();
+   }
+   ~b();
+ };
+ int d;
+ void l(long);
+ void e() {
+   b a(d);
+   for (int f = 0; f < 10 ; ++f) {
+     l(f - 1);
+     _setjmp();
+   }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr123729.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr123729.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr123729.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr123729.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,60 ----
+ // { dg-do compile }
+ // { dg-additional-options "-std=gnu++20" }
+ 
+ #include <csetjmp>
+ #include <iostream>
+ 
+ template <typename T> struct A { using type = int; };
+ template <typename F, typename... G> struct B {};
+ template <typename F> struct B<F> { using type = F; };
+ struct {
+   template <typename... F,
+             typename Overload = typename B<typename A<F>::type...>::type>
+   int operator()(F...) {
+     int iArrFld_0_0;
+     for (int i = 7; i < 28; ++i)
+       ;
+     int i1 = 3;
+     try {
+       for (int i = 7; i < 28; ++i) {
+         for (int j = 0; j < 7; ++j)
+           if (iArrFld_0_0 == 0) {
+             for (int k = 0; k < 20000; ++k)
+               std::cout << "Hello, world!" << std::endl;
+           }
+         jmp_buf env2;
+         for (int i2 = 16; i2 < 350; ++i2)
+           for (int j2 = 1; j2 < 75; ++j2)
+             for (int k2 = 0; k2 < 16; ++k2) {
+               int temp2 = i2 + j2 + k2;
+               int mod2 = temp2 % 8;
+               {
+                 setjmp(env2) == 0;
+                 ;
+               }
+             }
+       }
+     } catch (const std::exception &e) {
+     }
+     auto lambda = [](int x) {
+       return [x](int y) {
+         int z = 0;
+         if (y > 0)
+           z = 1;
+         return z + x;
+       };
+     };
+     for (int i = 0; i < 1000; ++i) {
+       int m = 0;
+       auto f = lambda(i);
+       for (int j = 0; j < 100; ++j)
+         m += f(j);
+       i1 += m;
+     }
+     std::cout << "Final value of i1: " << i1 << std::endl;
+     return 0;
+   }
+ } a;
+ int main() {
+   auto f = a([] {});
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr124130.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr124130.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr124130.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr124130.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,15 ----
+ // { dg-do compile }
+ 
+ void __sigsetjmp_cancel() __attribute__((__returns_twice__));
+ struct basic_ostream {
+   basic_ostream &operator<<(basic_ostream &__pf(basic_ostream &)) {
+     return __pf(*this);
+   }
+ } cerr;
+ extern "C" void _exit(int);
+ enum { Exit_Internal_Error };
+ basic_ostream &report_error(basic_ostream &) { _exit(Exit_Internal_Error); }
+ void thread_pool_thread_main() {
+   __sigsetjmp_cancel();
+   cerr << report_error;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr124135-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr124135-1.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr124135-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr124135-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,20 ----
+ // PR tree-optimization/124135
+ // { dg-do compile }
+ 
+ void foo (char, long double *, int);
+ int qux (int);
+ 
+ long double
+ bar (int x)
+ {
+   long double a;
+   if (x)
+     foo (0, &a, qux (42));
+   return a;
+ }
+ 
+ void
+ baz (int x)
+ {
+   bar (x);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr124135-2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr124135-2.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/torture/pr124135-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/torture/pr124135-2.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,27 ----
+ // PR tree-optimization/124135
+ // { dg-do compile }
+ 
+ #ifdef __SIZEOF_FLOAT128__
+ void foo (char, __float128 *, int);
+ int qux (int);
+ 
+ __float128
+ bar (int x)
+ {
+   __float128 a;
+   if (x)
+     foo (0, &a, qux (42));
+   return a;
+ }
+ 
+ void
+ baz (int x)
+ {
+   bar (x);
+ }
+ #else
+ void
+ baz ()
+ {
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/ubsan/pr120471.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/ubsan/pr120471.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/ubsan/pr120471.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/ubsan/pr120471.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,21 ----
+ // PR c++/120471
+ // { dg-do run }
+ // { dg-options "-fsanitize=undefined" }
+ 
+ volatile int b[1], a[1];
+ 
+ void
+ foo (int x)
+ {
+   volatile int c = 21;
+   volatile int v = (x % 2 ? b : a)[c % 3];
+   if (v != 0)
+     __builtin_abort ();
+ }
+ 
+ int
+ main ()
+ {
+   foo (1);
+   foo (2);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/vect/pr116674.cc gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/vect/pr116674.cc
*** gcc-14.3.0/gcc/testsuite/g++.dg/vect/pr116674.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/vect/pr116674.cc	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,85 ----
+ // { dg-do compile }
+ // { dg-require-effective-target c++11 }
+ // { dg-additional-options "-Ofast" }
+ // { dg-additional-options "-march=x86-64-v3" { target { x86_64-*-* i?86-*-* } } }
+ 
+ namespace std {
+     typedef int a;
+     template <typename> struct b;
+     template <typename> class aa {};
+     template <typename c> c d(c e, c) { return e; }
+     template <typename c> struct b<aa<c>> {
+ 	using f = c;
+ 	using g = c *;
+ 	template <typename h> using j = aa<h>;
+     };
+ } // namespace std
+ namespace l {
+     template <typename ab> struct m : std::b<ab> {
+ 	typedef std::b<ab> n;
+ 	typedef typename n::f &q;
+ 	template <typename c> struct ac { typedef typename n::j<c> ad; };
+     };
+ } // namespace l
+ namespace std {
+     template <typename c, typename ab> struct o {
+ 	typedef typename l::m<ab>::ac<c>::ad ae;
+ 	typedef typename l::m<ae>::g g;
+ 	struct p {
+ 	    g af;
+ 	};
+ 	struct ag : p {
+ 	    ag(ae) {}
+ 	};
+ 	typedef ab u;
+ 	o(a, u e) : ah(e) {}
+ 	ag ah;
+     };
+     template <typename c, typename ab = aa<c>> class r : o<c, ab> {
+ 	typedef o<c, ab> s;
+ 	typedef typename s::ae ae;
+ 	typedef l::m<ae> w;
+ 
+     public:
+ 	c f;
+ 	typedef typename w::q q;
+ 	typedef a t;
+ 	typedef ab u;
+ 	r(t x, u e = u()) : s(ai(x, e), e) {}
+ 	q operator[](t x) { return *(this->ah.af + x); }
+ 	t ai(t x, u) { return x; }
+     };
+     extern "C" __attribute__((__simd__)) double exp(double);
+ } // namespace std
+ using namespace std;
+ int ak;
+ double v, y;
+ void am(double, int an, double, double, double, double, double, double, double,
+ 	double, double, double, int, double, double, double, double,
+ 	r<double> ap, double, double, double, double, double, double, double,
+ 	double, r<double> ar, r<double> as, double, double, r<double> at,
+ 	r<double> au, r<double> av, double, double) {
+     double ba;
+     for (int k;;)
+       for (int i; i < an; ++i) {
+ 	  y = i;
+ 	  v = d(y, 25.0);
+ 	  ba = exp(v);
+ 	  ar[i * (ak + 1)] = ba;
+ 	  as[i * (ak + 1)] = ar[i * (ak + 1)];
+ 	  if (k && ap[k]) {
+ 	      at[i * (ak + 1)] = av[i * (ak + 1)] = as[i * (ak + 1)];
+ 	      au[i * (ak + 1)] = ar[i * (ak + 1)];
+ 	  } else {
+ 	      au[i * (ak + 1)] = ba;
+ 	      at[i * (ak + 1)] = av[i * (ak + 1)] = k;
+ 	  }
+       }
+ }
+ void b(int bc) {
+     double bd, be, bf, bg, bh, ao, ap, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx,
+     by, aq, ar, as, bz, ca, at, au, av, cb, aw;
+     int bi;
+     am(bh, bc, bi, bi, bi, bi, bv, bw, bx, by, bu, bt, bi, ao, bn, bo, bp, ap, bq,
+        br, bs, bd, be, bf, bg, aq, ar, as, bz, ca, at, au, av, cb, aw);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/120940
+ // { dg-do compile }
+ // { dg-options "-Wduplicated-branches" }
+ 
+ static char a[16][8], b[16][8];
+ 
+ char *
+ foo (int x, int y)
+ {
+   return (x ? a : b)[y];
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-10.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-10.C
*** gcc-14.3.0/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-10.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-10.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,25 ----
+ // PR tree-optimization/123513
+ // { dg-do compile }
+ // { dg-options "-Wmismatched-new-delete" }
+ 
+ typedef __SIZE_TYPE__ size_t;
+ 
+ template <size_t N>
+ class A {};
+ struct B { B (); };
+ 
+ template <size_t N>
+ void *operator new (size_t, A <N> &);
+ 
+ template <size_t N>
+ void operator delete (void *, A <N> &);
+ 
+ void
+ foo (B *, A <1024> &);
+ 
+ void
+ bar ()
+ {
+   A <1024> a;
+   foo (new (a) B (), a);	// { dg-bogus "called on pointer returned from a mismatched allocation function" }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ [[gnu::target ("arch=armv9-a+sve")]]
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svcount_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sme.h>
+ 
+ #pragma GCC target "+sve2+sme2"
+ 
+ void fun ()
+ {
+   volatile svbool_t pred;
+   volatile svcount_t count;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ #pragma GCC target "+sve"
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/pr124126-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/pr124126-1.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/pr124126-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/pr124126-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-g" } */
+ /* PR target/124126 */
+ /* Make sure an array of uint64_t[8] works when
+    used before the inlcude of arm_acle.h.  */
+ 
+ typedef unsigned long uint64_t;
+ void executeSuperscalar(uint64_t (*r)[8]);
+ 
+ #include "arm_acle.h"
+ 
+ void initDatasetItem() {
+   uint64_t rl[8];
+   executeSuperscalar(&rl);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-do run { target { aarch64*-linux-gnu* && aarch64_sme_hw } } } */
+ /* { dg-options "-fnon-call-exceptions" } */
+ 
+ #include <signal.h>
+ #include <arm_sme.h>
+ 
+ static bool caught;
+ 
+ [[gnu::noipa]] void thrower(int)
+ {
+   throw 1;
+ }
+ 
+ [[gnu::noipa]] void bar()
+ {
+   *(volatile int *)0 = 0;
+ }
+ 
+ [[gnu::noipa]] void foo()
+ {
+   try
+     {
+       bar();
+     }
+   catch (int)
+     {
+       caught = true;
+     }
+ }
+ 
+ __arm_new("za") __arm_locally_streaming void sme_user()
+ {
+   svbool_t all = svptrue_b8();
+   for (unsigned int i = 0; i < svcntb(); ++i)
+     {
+       svint8_t expected = svindex_s8(i + 1, i);
+       svwrite_hor_za8_m(0, i, all, expected);
+     }
+   foo();
+   for (unsigned int i = 0; i < svcntb(); ++i)
+     {
+       svint8_t expected = svindex_s8(i + 1, i);
+       svint8_t actual = svread_hor_za8_m(svdup_s8(0), all, 0, i);
+       if (svptest_any(all, svcmpne(all, expected, actual)))
+ 	__builtin_abort();
+     }
+   if (!caught)
+     __builtin_abort();
+ }
+ 
+ int main()
+ {
+   signal(SIGSEGV, thrower);
+   sme_user();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do run { target { aarch64*-linux-gnu* && aarch64_sme_hw } } } */
+ /* { dg-options "-O2 -fnon-call-exceptions" } */
+ 
+ #include "sme_throw_1.C"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sve/pr121449.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sve/pr121449.C
*** gcc-14.3.0/gcc/testsuite/g++.target/aarch64/sve/pr121449.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/aarch64/sve/pr121449.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,44 ----
+ /* PR target/121449 */
+ /* { dg-do assemble { target aarch64_asm_sve_ok } } */
+ /* { dg-options "-O3 -save-temps" } */
+ 
+ struct example;
+ 
+ struct array {
+   unsigned length();
+   example *operator[](unsigned i) {
+     example **data = reinterpret_cast<example **>(this);
+     return data[i];
+   }
+ };
+ 
+ struct example {
+   int a[16];
+   bool is_even;
+   int version;
+   int count() { return is_even ? 2 : 1; }
+   void fun1(int, long);
+   void fun2(unsigned, unsigned);
+   void process(array &, array &);
+ };
+ 
+ bool found;
+ 
+ void example::process(array &a, array &b) {
+   for (unsigned i = 1; a.length(); i++) {
+     long total = 0;
+     for (unsigned k = 0; k <= i; k++) {
+       total += a[k]->count();
+     }
+     for (unsigned j = 0; j < i; j++) {
+       int major = b[j]->version;
+       if (found)
+         major += i;
+       fun1(i + 1, total);
+       fun2(j, major);
+     }
+   }
+ }
+ 
+ /* { dg-final { scan-assembler-not {\tld1b\t(z[0-9]+)\.d, p[0-7]/z, \[(z[0-9]+)\.d, #64\]} } } */
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/avx512fp16-pr123607.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/avx512fp16-pr123607.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/avx512fp16-pr123607.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/avx512fp16-pr123607.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,60 ----
+ // PR target/123607
+ // { dg-do assemble { target avx512fp16 } }
+ // { dg-options "-std=c++23 -O2 -mavx512fp16" }
+ 
+ namespace std::simd {
+ template <int> struct basic_mask {
+   bool _M_data;
+   bool operator[](int) { return _M_data; }
+ };
+ template <int _Ap>
+   requires(_Ap > 1)
+ struct basic_mask<_Ap> {
+   static constexpr int _N0 = _Ap / 2;
+   using _Mask1 = basic_mask<_N0>;
+   _Mask1 _M_data1;
+   static basic_mask _S_init(basic_mask<_N0>, _Mask1 __y) {
+     basic_mask __r;
+     __r._M_data1 = __y;
+     return __r;
+   }
+ };
+ template <int _Ap> struct basic_vec {
+   _Float16 _M_data;
+   using mask_type = basic_mask<_Ap>;
+   friend mask_type operator<(basic_vec __x, basic_vec __y) {
+     return mask_type(__x._M_data < __y._M_data);
+   }
+   friend basic_vec __select_impl(mask_type __k, basic_vec __t, basic_vec __f) {
+     return __k[0] ? __t : __f;
+   }
+ };
+ template <int _Ap>
+   requires(_Ap > 1)
+ struct basic_vec<_Ap> {
+   static constexpr int _N0 = _Ap / 2;
+   using _DataType1 = basic_vec<_N0>;
+   _DataType1 _M_data0;
+   _DataType1 _M_data1;
+   using mask_type = basic_mask<_Ap>;
+   static basic_vec _S_init(_DataType1 __y) {
+     basic_vec __r;
+     __r._M_data1 = __y;
+     return __r;
+   }
+   friend mask_type operator<(basic_vec __x, basic_vec __y) {
+     return mask_type::_S_init(__x._M_data0 < __y._M_data0,
+                               __x._M_data1 < __y._M_data1);
+   }
+   friend basic_vec __select_impl(mask_type __k, basic_vec __t, basic_vec __f) {
+     return _S_init(__select_impl(__k._M_data1, __t._M_data1, __f._M_data1));
+   }
+ };
+ basic_vec<4> b;
+ basic_vec<4> max(basic_vec<4> a) {
+   basic_mask __trans_tmp_1 = a < b;
+   return __select_impl(__trans_tmp_1, b, a);
+ }
+ }
+ namespace simd = std::simd;
+ simd::basic_vec test_runner___trans_tmp_2 = max(simd::basic_vec<4>());
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-1.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mamx-tile -mamx-int8 -O0" } */
+ /* { dg-final { scan-assembler "tdpbssd\[ \\t]+\[^\n\]*%tmm2+\[^\n\]*%tmm1+\[^\n\]*%tmm0" } } */
+ 
+ #include <immintrin.h>
+ 
+ template <int hello, int crazy, int gcc>
+ struct dpbssd
+ {
+   void operator()() { _tile_dpbssd(hello, crazy, gcc); }
+ };
+ 
+ void f()
+ {
+   dpbssd<0, 1, 2>()();
+ }
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxbf16.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxbf16.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxbf16.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxbf16.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mamx-tile -mamx-bf16 -O0" } */
+ /* { dg-final { scan-assembler "tdpbf16ps\[ \\t]+%tmm2,\[ \\t\]*%tmm1,\[ \\t\]*%tmm0" } } */
+ 
+ #include <immintrin.h>
+ 
+ template <int dst, int src1, int src2>
+ struct dpbf16ps
+ {
+   void operator()() { _tile_dpbf16ps(dst, src1, src2); }
+ };
+ 
+ void test_amx_bf16()
+ {
+   dpbf16ps<0, 1, 2>()();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxcomplex.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxcomplex.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxcomplex.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxcomplex.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mamx-tile -mamx-complex -O0" } */
+ /* { dg-final { scan-assembler "tcmmimfp16ps\[ \\t]+%tmm2,\[ \\t\]*%tmm1,\[ \\t\]*%tmm0" } } */
+ /* { dg-final { scan-assembler "tcmmrlfp16ps\[ \\t]+%tmm5,\[ \\t\]*%tmm4,\[ \\t\]*%tmm3" } } */
+ 
+ #include <immintrin.h>
+ 
+ template <int dst, int src1, int src2>
+ struct cmmimfp16ps
+ {
+   void operator()() { _tile_cmmimfp16ps(dst, src1, src2); }
+ };
+ 
+ template <int dst, int src1, int src2>
+ struct cmmrlfp16ps
+ {
+   void operator()() { _tile_cmmrlfp16ps(dst, src1, src2); }
+ };
+ 
+ void test_amx_complex()
+ {
+   cmmimfp16ps<0, 1, 2>()();
+   cmmrlfp16ps<3, 4, 5>()();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxfp16.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxfp16.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxfp16.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxfp16.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mamx-tile -mamx-fp16 -O0" } */
+ /* { dg-final { scan-assembler "tdpfp16ps\[ \\t]+%tmm2,\[ \\t\]*%tmm1,\[ \\t\]*%tmm0" } } */
+ 
+ #include <immintrin.h>
+ 
+ template <int dst, int src1, int src2>
+ struct dpfp16ps
+ {
+   void operator()() { _tile_dpfp16ps(dst, src1, src2); }
+ };
+ 
+ void test_amx_fp16()
+ {
+   dpfp16ps<0, 1, 2>()();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxint8.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxint8.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxint8.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxint8.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mamx-tile -mamx-int8 -O0" } */
+ /* { dg-final { scan-assembler "tdpbssd\[ \\t]+%tmm2,\[ \\t\]*%tmm1,\[ \\t\]*%tmm0" } } */
+ /* { dg-final { scan-assembler "tdpbsud\[ \\t]+%tmm5,\[ \\t\]*%tmm4,\[ \\t\]*%tmm3" } } */
+ /* { dg-final { scan-assembler "tdpbusd\[ \\t]+%tmm2,\[ \\t\]*%tmm1,\[ \\t\]*%tmm6" } } */
+ /* { dg-final { scan-assembler "tdpbuud\[ \\t]+%tmm1,\[ \\t\]*%tmm0,\[ \\t\]*%tmm7" } } */
+ 
+ #include <immintrin.h>
+ 
+ template <int dst, int src1, int src2>
+ struct dpbssd
+ {
+   void operator()() { _tile_dpbssd(dst, src1, src2); }
+ };
+ 
+ template <int dst, int src1, int src2>
+ struct dpbsud
+ {
+   void operator()() { _tile_dpbsud(dst, src1, src2); }
+ };
+ 
+ template <int dst, int src1, int src2>
+ struct dpbusd
+ {
+   void operator()() { _tile_dpbusd(dst, src1, src2); }
+ };
+ 
+ template <int dst, int src1, int src2>
+ struct dpbuud
+ {
+   void operator()() { _tile_dpbuud(dst, src1, src2); }
+ };
+ 
+ void test_amx_int8()
+ {
+   dpbssd<0, 1, 2>()();
+   dpbsud<3, 4, 5>()();
+   dpbusd<6, 1, 2>()();
+   dpbuud<7, 0, 1>()();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxtile.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxtile.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr122446-amxtile.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr122446-amxtile.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mamx-tile -O0" } */
+ /* { dg-final { scan-assembler "tileloadd\[ \\t]+\[^\n\]*,\[ \\t\]*%tmm0" } } */
+ /* { dg-final { scan-assembler "tilestored\[ \\t]+%tmm1," } } */
+ /* { dg-final { scan-assembler "tilezero\[ \\t]+%tmm3" } } */
+ /* { dg-final { scan-assembler "tileloaddt1\[ \\t]+\[^\n\]*,\[ \\t\]*%tmm2" } } */
+ 
+ #include <immintrin.h>
+ 
+ template <int tmm_num>
+ struct tile_loadd_test
+ {
+   void operator()(const void* base, int stride)
+   {
+     _tile_loadd(tmm_num, base, stride);
+   }
+ };
+ 
+ template <int tmm_num>
+ struct tile_stored_test
+ {
+   void operator()(void* base, int stride)
+   {
+     _tile_stored(tmm_num, base, stride);
+   }
+ };
+ 
+ template <int tmm_num>
+ struct tile_zero_test
+ {
+   void operator()() { _tile_zero(tmm_num); }
+ };
+ 
+ template <int tmm_num>
+ struct tile_stream_loadd_test
+ {
+   void operator()(const void* base, int stride)
+   {
+     _tile_stream_loadd(tmm_num, base, stride);
+   }
+ };
+ 
+ void test_amx_tile()
+ {
+   char buf[1024];
+   tile_loadd_test<0>()(buf, 64);
+   tile_stored_test<1>()(buf, 64);
+   tile_stream_loadd_test<2>()(buf, 64);
+   tile_zero_test<3>()();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/i386/pr123779.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr123779.C
*** gcc-14.3.0/gcc/testsuite/g++.target/i386/pr123779.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/i386/pr123779.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,56 ----
+ /* PR target/123779 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavx512vl -mavx512bw" } */
+ 
+ typedef char __v16qi __attribute__((__vector_size__(16)));
+ typedef short __v8hi __attribute__((__vector_size__(16)));
+ typedef int __v4si __attribute__((__vector_size__(16)));
+ typedef long long __v2di __attribute__((__vector_size__(16)));
+ 
+ typedef int __v8si __attribute__((__vector_size__(32)));
+ typedef long long __v4di __attribute__((__vector_size__(32)));
+ typedef long long __v8di __attribute__((__vector_size__(64)));
+ typedef unsigned char __mmask8;
+ 
+ long long g_mem;
+ 
+ #define MAKE_TEST_BLEND(NAME, DEST_T, SRC_INIT_T, PMOV_INPUT_CAST_T, \
+ 			PMOV_FUNC, BLEND_FUNC, BLEND_CAST_T, LOAD_VAL_TYPE, ...) \
+     DEST_T dest_##NAME, mask_src1_##NAME, mask_src2_##NAME, mask_##NAME, res_##NAME; \
+     void test_##NAME() \
+       { \
+         mask_##NAME = mask_src1_##NAME < mask_src2_##NAME; \
+         LOAD_VAL_TYPE val = (LOAD_VAL_TYPE)g_mem; \
+         SRC_INIT_T src_vec = { __VA_ARGS__ }; \
+         DEST_T extended = (DEST_T)PMOV_FUNC ((PMOV_INPUT_CAST_T)src_vec); \
+         res_##NAME = (DEST_T)BLEND_FUNC ( \
+             (BLEND_CAST_T)dest_##NAME, \
+             (BLEND_CAST_T)extended, \
+             (BLEND_CAST_T)mask_##NAME); \
+       }
+ 
+ #define MAKE_TEST_MASK(NAME, DEST_T, SRC_INIT_T, PMOV_INPUT_CAST_T, \
+ 		       PMOV_MASK_FUNC, LOAD_VAL_TYPE, ...) \
+     DEST_T dest_##NAME, res_##NAME; \
+     __mmask8 mask_##NAME; \
+     void test_##NAME() \
+       { \
+ 	LOAD_VAL_TYPE val = (LOAD_VAL_TYPE) g_mem; \
+ 	SRC_INIT_T src_vec = { __VA_ARGS__ }; \
+ 	res_##NAME = PMOV_MASK_FUNC ((PMOV_INPUT_CAST_T)src_vec, \
+ 				     dest_##NAME, \
+ 				     mask_##NAME);\
+       }  
+ 
+ 
+ MAKE_TEST_BLEND(v8qi_v8hi, __v8hi, __v2di, __v16qi, __builtin_ia32_pmovzxbw128, __builtin_ia32_pblendvb128, __v16qi, long long, val, 0)
+ MAKE_TEST_BLEND(v4qi_v4si, __v4si, __v4si, __v16qi, __builtin_ia32_pmovzxbd128, __builtin_ia32_pblendvb128, __v16qi, int, val, 0, 0, 0)
+ MAKE_TEST_BLEND(v4hi_v4si, __v4si, __v2di, __v8hi, __builtin_ia32_pmovzxwd128, __builtin_ia32_pblendvb128, __v16qi, long long, val, 0)
+ MAKE_TEST_BLEND(v2hi_v2di, __v2di, __v4si, __v8hi, __builtin_ia32_pmovzxwq128, __builtin_ia32_pblendvb128, __v16qi, int, val, 0, 0, 0)
+ MAKE_TEST_BLEND(v2si_v2di, __v2di, __v2di, __v4si, __builtin_ia32_pmovzxdq128, __builtin_ia32_pblendvb128, __v16qi, long long, val, 0)
+ 
+ 
+ MAKE_TEST_MASK(v8qi_v8si, __v8si, __v2di, __v16qi, __builtin_ia32_pmovzxbd256_mask, long long, val, 0)
+ MAKE_TEST_MASK(v4qi_v4di, __v4di, __v4si, __v16qi, __builtin_ia32_pmovzxbq256_mask, int, val, 0, 0, 0)
+ MAKE_TEST_MASK(v4hi_v4di, __v4di, __v2di, __v8hi, __builtin_ia32_pmovzxwq256_mask, long long, val, 0)
+ MAKE_TEST_MASK(v8qi_v8di, __v8di, __v2di, __v16qi, __builtin_ia32_pmovzxbq512_mask, long long, val, 0)
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/loongarch/pr117575.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/loongarch/pr117575.C
*** gcc-14.3.0/gcc/testsuite/g++.target/loongarch/pr117575.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/loongarch/pr117575.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,81 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ 
+ typedef long unsigned int size_t;
+ typedef unsigned char simde__mmask8;
+ typedef double simde_float64;
+ typedef simde_float64 simde__m512d __attribute__ ((__aligned__ ((64))))
+ __attribute__ ((__vector_size__ (64))) __attribute__ ((__may_alias__));
+ typedef simde_float64 simde__m256d __attribute__ ((__aligned__ ((32))))
+ __attribute__ ((__vector_size__ (32))) __attribute__ ((__may_alias__));
+ simde__m512d simde_mm512_set_pd (simde_float64 e7, simde_float64 e6,
+                                  simde_float64 e5, simde_float64 e4,
+                                  simde_float64 e3, simde_float64 e2,
+                                  simde_float64 e1, simde_float64 e0);
+ simde__m256d simde_mm256_maskz_mov_pd (simde__mmask8 k, simde__m256d a);
+ int simde_test_x86_assert_equal_f64x4_ (simde__m256d a, simde__m256d b);
+ 
+ typedef union
+ {
+ 
+   __attribute__ ((__aligned__ ((32)))) simde_float64 f64
+       __attribute__ ((__vector_size__ (32))) __attribute__ ((__may_alias__));
+ } simde__m256d_private;
+ __attribute__ ((__always_inline__)) inline static simde__m256d
+ simde__m256d_from_private (simde__m256d_private v)
+ {
+   simde__m256d r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ simde__m256d
+ simde_mm256_set_pd (simde_float64 e3, simde_float64 e2, simde_float64 e1,
+                     simde_float64 e0)
+ {
+ 
+   simde__m256d_private r_;
+ 
+   r_.f64[0] = e0;
+   r_.f64[1] = e1;
+   r_.f64[2] = e2;
+   r_.f64[3] = e3;
+ 
+   return simde__m256d_from_private (r_);
+ }
+ 
+ simde__m256d simde_mm512_extractf64x4_pd (simde__m512d a, int imm8);
+ int
+ test_simde_mm512_maskz_extractf64x4_pd (void)
+ {
+   const struct
+   {
+     simde__mmask8 k;
+     simde__m512d a;
+     simde__m256d r0;
+     simde__m256d r1;
+   } test_vec[2] = {
+     { 21,
+       simde_mm512_set_pd (-139.11, -172.36, -268.86, 393.53, -71.72, 36.69,
+                           98.47, -135.52),
+       simde_mm256_set_pd (0.00, 36.69, 0.00, -135.52),
+       simde_mm256_set_pd (0.00, -172.36, 0.00, 393.53) },
+     { 150,
+       simde_mm512_set_pd (-556.90, 522.06, 160.98, -932.28, 391.82, 600.12,
+                           -569.99, -491.12),
+       simde_mm256_set_pd (0.00, 600.12, -569.99, 0.00),
+       simde_mm256_set_pd (0.00, 522.06, 160.98, 0.00) },
+   };
+ 
+   for (size_t i = 0; i < (sizeof (test_vec) / sizeof (test_vec[0])); i++)
+     {
+       simde__m256d r;
+       r = simde_mm256_maskz_mov_pd (
+           test_vec[i].k, simde_mm512_extractf64x4_pd (test_vec[i].a, 0));
+       if (simde_test_x86_assert_equal_f64x4_ (r, test_vec[i].r0))
+         {
+           return 1;
+         }
+     }
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/powerpc/pr124133-1.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/powerpc/pr124133-1.C
*** gcc-14.3.0/gcc/testsuite/g++.target/powerpc/pr124133-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/powerpc/pr124133-1.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR target/124133
+ // { dg-options "-mdejagnu-cpu=power8 -mvsx" }
+ // { dg-require-effective-target powerpc_vsx }
+ 
+ typedef __INTPTR_TYPE__ intptr_t;
+ 
+ template <int>
+ void
+ foo (int x, short *y, intptr_t z)
+ {
+   __builtin_vec_vsx_ld ((x + z) * 2, y);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/powerpc/pr124133-2.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/powerpc/pr124133-2.C
*** gcc-14.3.0/gcc/testsuite/g++.target/powerpc/pr124133-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/powerpc/pr124133-2.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,14 ----
+ // PR target/124133
+ // { dg-options "-mdejagnu-cpu=power8 -mvsx -O2" }
+ // { dg-require-effective-target powerpc_vsx }
+ 
+ #include <altivec.h>
+ 
+ struct S { float d; unsigned char e[16]; };
+ 
+ template <typename T>
+ void
+ foo (const S *s)
+ {
+   vector signed char a = (vector signed char) vec_xl (0, s->e);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/g++.target/s390/pr119834.C gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/s390/pr119834.C
*** gcc-14.3.0/gcc/testsuite/g++.target/s390/pr119834.C	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/g++.target/s390/pr119834.C	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,76 ----
+ // PR target/119834
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-O2 -march=z900" }
+ 
+ int *a;
+ struct A;
+ struct B {
+   A begin ();
+   A end ();
+   operator bool * ();
+   void operator++ ();
+ };
+ template <typename T>
+ auto operator| (int, T x) -> decltype (x (0));
+ struct A : B { bool a; };
+ struct C { A operator () (int); };
+ enum D {} d;
+ int e;
+ void foo ();
+ struct E {
+   template <typename T>
+   T *garply ()
+   {
+     if (d)
+       return 0;
+     if (e)
+       foo ();
+     return reinterpret_cast<T *> (f);
+   }
+   template <typename>
+   void bar (long x, bool)
+   {
+     if (&g - f)
+       __builtin_memset (a, 0, x);
+     f += x;
+   }
+   template <typename T>
+   T *baz (T *x, long y, bool z = true)
+   {
+     if (d)
+       return nullptr;
+     bar<T> ((char *)x + y - f, z);
+     return x;
+   }
+   template <typename T>
+   void qux (T x) { baz (x, x->j); }
+   char *f, g;
+ } *h;
+ struct F {
+   template <typename T>
+   int corge (T x) { x.freddy (this); return 0; }
+   template <typename T>
+   int boo (T x) { corge (x); return 0; }
+ } i;
+ template <typename T>
+ struct G {
+   template <typename U> friend T operator+ (U, G);
+   template <typename U>
+   void waldo (F *x, G y, U z) { x->boo (z + y); }
+   template <typename... Ts>
+   void plugh (E *y, Ts... z) { T *x = y->garply<T> (); x->thud (y, z...); }
+ };
+ template <typename T> using H = G<T>;
+ struct I {
+   static constexpr unsigned j = 2;
+   void thud (E *x, A y) { x->qux (this); for (auto g : y) ; }
+ };
+ H<I> k;
+ struct J {
+   void freddy (F *) { C a; auto b = 0 | a; k.plugh (h, b); }
+ };
+ H<J> l;
+ struct K {
+   void freddy () { l.waldo (&i, l, this); }
+ };
+ void grault () { K m; m.freddy (); }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr105192.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr105192.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr105192.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr105192.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-additional-options "-fno-if-conversion -fharden-compares" } */
+ 
+ int a, b;
+ 
+ void
+ foo (void)
+ {
+   b = a % 0 > 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr116600.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr116600.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr116600.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr116600.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,24 ----
+ /* PR rtl-optimization/116600 */
+ 
+ int a, b;
+ int foo ();
+ 
+ int
+ bar ()
+ {
+   int c = ({ int d = 0, e = foo ();
+ 	     b = __builtin_expect (e, 1); if (b) ; else d = 4; d; });
+   if (c)
+     return c;
+   foo ();
+   if (a)
+     __asm__ goto ("" : : : : l);
+ l:
+   return 0;
+ }
+ 
+ void
+ baz ()
+ {
+   bar ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr117358.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr117358.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr117358.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr117358.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,17 ----
+ /* PR tree-optimization/117358 */
+ 
+ char a;
+ /* This attribute is bogus, snprintf isn't const.  Just verify we don't ICE on it.  */
+ int __attribute__((const)) snprintf (char *, __SIZE_TYPE__, const char *, ...);
+ 
+ long
+ foo (long d) 
+ { 
+   return snprintf (&a, d, ""); 
+ }
+ 
+ int
+ bar (void) 
+ { 
+   return foo (1); 
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr120250.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr120250.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr120250.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr120250.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,38 ----
+ /* PR target/120250 */
+ 
+ int a = 5, b = 7, c, *d;
+ void *l;
+ void foo (const char *s);
+ void bar (void);
+ void qux (const char *, int);
+ 
+ int
+ baz (int *d, int a, int b)
+ {
+   int c = 0;
+   for (int i = 0; i < a; ++i)
+     for (int j = 0; j < b; ++j)
+       c += d[i * b + j];
+   return c;
+ }
+ 
+ int
+ main ()
+ {
+   d = __builtin_malloc (a * b * sizeof (int));
+   if (!d)
+     {
+       foo ("foo");
+       __builtin_exit (1);
+     }
+   for (int i = 0; i < a; ++i)
+     for (int j = 0; j < b; ++j)
+       d[i * b + j] = i * b + j;
+   l = (void *) &bar;
+   goto *l;
+ bar:
+   c = baz (d, a, b);
+   qux ("bar", c);
+   __builtin_free (d);
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr123365.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr123365.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr123365.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr123365.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,7 ----
+ /* PR c/123365 */
+ 
+ void
+ foo ()
+ {
+   __asm__ volatile ("" : "+r" ((long long[]) { 0 }));
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr123386.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr123386.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr123386.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr123386.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,25 ----
+ /* PR middle-end/123386 */
+ 
+ char *a;
+ int b;
+ 
+ void
+ foo (char *)
+ {
+   if (b)
+     __builtin_abort ();
+ }
+ 
+ void
+ bar (char *c)
+ {
+   __asm__ goto ("" : : : : d);
+   foo (a);
+   __asm__ goto ("" : : : : d);
+   if (c)
+     bar (a);
+   __asm__ goto ("" : : : : d);
+ d:
+   if (b)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr123703.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr123703.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr123703.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr123703.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,10 ----
+ /* PR middle-end/123703 */
+ 
+ struct S { int a; };
+ struct S abs (int);
+ 
+ struct S
+ bar (int j)
+ {
+   return abs (j);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr124250.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr124250.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr124250.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr124250.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,8 ----
+ typedef long long v2i64 __attribute__ ((vector_size (16), aligned (16)));
+ v2i64 a, b;
+ 
+ void
+ test (int l)
+ {
+   a = b >> (-l);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr125039.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr125039.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/compile/pr125039.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/compile/pr125039.c	Fri Jun 19 06:51:03 2026
***************
*** 0 ****
--- 1,12 ----
+ /* PR tree-optimization/125039 */
+ 
+ void
+ foo ()
+ {
+   double b = b, c = c;
+   if (c)
+     c = -c;
+   double d = b == c ? b : c;
+   if (c != d)
+     foo ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr122000.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr122000.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr122000.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr122000.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* PR target/122000 */
+ 
+ char c = 1;
+ __attribute__((aligned (sizeof (unsigned long long)))) unsigned long long ll;
+ 
+ int
+ main ()
+ {
+ #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) && __SIZEOF_LONG_LONG__ == 8 && __CHAR_BIT__ == 8
+   unsigned long long x = __sync_add_and_fetch (&ll, c + 0xfedcba9876543210ULL);
+   if (x != 0xfedcba9876543211ULL)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr122943.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr122943.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr122943.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr122943.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,130 ----
+ /* PR tree-optimization/122943 */
+ 
+ __attribute__((noipa)) unsigned char
+ foo (long long val)
+ {
+   unsigned char result = 0;
+   switch (val)
+     {
+     case 0: result = 1; break;
+     case 1: result = 2; break;
+     case 2: result = 3; break;
+     default: break;
+     }
+   return result;
+ }
+ 
+ __attribute__((noipa)) unsigned char
+ bar (long long val)
+ {
+   unsigned char result = 1;
+   switch (val)
+     {
+     case 0: result = 8; break;
+     case 1: result = 31; break;
+     case 2: result = 72; break;
+     default: break;
+     }
+   return result;
+ }
+ 
+ #ifdef __SIZEOF_INT128__
+ __attribute__((noipa)) unsigned char
+ baz (__int128 val)
+ {
+   unsigned char result = 0;
+   switch (val)
+     {
+     case 0: result = 1; break;
+     case 1: result = 2; break;
+     case 2: result = 3; break;
+     default: break;
+     }
+   return result;
+ }
+ 
+ __attribute__((noipa)) unsigned char
+ qux (__int128 val)
+ {
+   unsigned char result = 1;
+   switch (val)
+     {
+     case 0: result = 8; break;
+     case 1: result = 31; break;
+     case 2: result = 72; break;
+     default: break;
+     }
+   return result;
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+   if (foo (-1) != 0)
+     __builtin_abort ();
+   if (foo (0) != 1)
+     __builtin_abort ();
+   if (foo (1) != 2)
+     __builtin_abort ();
+   if (foo (2) != 3)
+     __builtin_abort ();
+   if (foo (3) != 0)
+     __builtin_abort ();
+   if (foo (-__LONG_LONG_MAX__ - 1) != 0)
+     __builtin_abort ();
+   if (foo (-__LONG_LONG_MAX__) != 0)
+     __builtin_abort ();
+   if (foo (-__LONG_LONG_MAX__ + 1) != 0)
+     __builtin_abort ();
+   if (bar (-1) != 1)
+     __builtin_abort ();
+   if (bar (0) != 8)
+     __builtin_abort ();
+   if (bar (1) != 31)
+     __builtin_abort ();
+   if (bar (2) != 72)
+     __builtin_abort ();
+   if (bar (3) != 1)
+     __builtin_abort ();
+   if (bar (-__LONG_LONG_MAX__ - 1) != 1)
+     __builtin_abort ();
+   if (bar (-__LONG_LONG_MAX__) != 1)
+     __builtin_abort ();
+   if (bar (-__LONG_LONG_MAX__ + 1) != 1)
+     __builtin_abort ();
+ #ifdef __SIZEOF_INT128__
+   if (baz (-1) != 0)
+     __builtin_abort ();
+   if (baz (0) != 1)
+     __builtin_abort ();
+   if (baz (1) != 2)
+     __builtin_abort ();
+   if (baz (2) != 3)
+     __builtin_abort ();
+   if (baz (3) != 0)
+     __builtin_abort ();
+   if (baz (((__int128) 1) << 64) != 0)
+     __builtin_abort ();
+   if (baz ((((__int128) 1) << 64) + 1) != 0)
+     __builtin_abort ();
+   if (baz ((((__int128) 1) << 64) + 2) != 0)
+     __builtin_abort ();
+   if (qux (-1) != 1)
+     __builtin_abort ();
+   if (qux (0) != 8)
+     __builtin_abort ();
+   if (qux (1) != 31)
+     __builtin_abort ();
+   if (qux (2) != 72)
+     __builtin_abort ();
+   if (qux (3) != 1)
+     __builtin_abort ();
+   if (qux (((__int128) 1) << 64) != 1)
+     __builtin_abort ();
+   if (qux ((((__int128) 1) << 64) + 1) != 1)
+     __builtin_abort ();
+   if (qux ((((__int128) 1) << 64) + 2) != 1)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr123864.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr123864.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr123864.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr123864.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* PR tree-optimization/123864 */
+ 
+ [[gnu::noipa]] static int
+ foo (long long x)
+ {
+   return __builtin_mul_overflow_p (x, ~0U, x);
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (0))
+     __builtin_abort ();
+ #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 && __CHAR_BIT__ == 8
+   if (foo (__INT_MAX__ + 1LL))
+     __builtin_abort ();
+   if (!foo (__INT_MAX__ + 2LL))
+     __builtin_abort ();
+   if (foo (-__INT_MAX__ - 1LL))
+     __builtin_abort ();
+   if (!foo (-__INT_MAX__ - 2LL))
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr123978.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr123978.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr123978.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr123978.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,25 ----
+ /* PR middle-end/123978 */
+ 
+ struct A { unsigned b, c, *d; };
+ 
+ [[gnu::noipa]] int
+ foo (struct A *a)
+ {
+   __builtin_memset (a->d, 0, ((long long) sizeof (unsigned)) * a->b * a->c);
+   return 0;
+ }
+ 
+ int
+ main ()
+ {
+   struct A a;
+   unsigned b[256];
+   __builtin_memset (b, 0x55, sizeof (b));
+   a.b = 15;
+   a.c = 15;
+   a.d = b;
+   foo (&a);
+   for (int i = 0; i < 225; ++i)
+     if (b[i] != 0)
+       __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr124358.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr124358.c
*** gcc-14.3.0/gcc/testsuite/gcc.c-torture/execute/pr124358.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.c-torture/execute/pr124358.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,19 ----
+ /* PR tree-optimization/124358 */
+ 
+ [[gnu::noipa]] void
+ foo (int d)
+ {
+   static int u = 11;
+   if (d != u++)
+     __builtin_abort ();
+ }
+ 
+ int
+ main ()
+ {
+   int a[1][4] = { 11, 12, 13, 14 };
+   int (*p)[4] = a;
+   for (int i = 0; i < 1; i++)
+     for (int j = 0; j < 4; j++)
+       foo (*(*(p + i) + j));
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/analyzer/ubsan-pr118300.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/analyzer/ubsan-pr118300.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/analyzer/ubsan-pr118300.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/analyzer/ubsan-pr118300.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fsanitize=undefined" } */
+ 
+ #include <stdlib.h>
+ 
+ void test ()
+ {
+   int*** ptr = (int ***)malloc(sizeof(int**));
+   *ptr = (int **)malloc(sizeof(int*)); /* { dg-warning "dereference of possibly-NULL" } */
+   **ptr = (int *)malloc(sizeof(int)); /* { dg-warning "dereference of possibly-NULL" } */
+ 
+   free(**ptr);
+   free(*ptr);
+   free(ptr);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-123.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-123.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-123.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-123.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,26 ----
+ /* PR middle-end/120547 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ /* { dg-add-options float64 } */
+ /* { dg-require-effective-target float64 } */
+ 
+ #define CHECK(x, y) \
+   if ((_Float64) x != (_Float64) y				\
+       || (_Float64) (x + 1) != (_Float64) (y + 1))		\
+     __builtin_abort ()
+ 
+ int
+ main ()
+ {
+   unsigned long long a = 0x20000000000001ULL << 7;
+   volatile unsigned long long b = a;
+   CHECK (a, b);
+ #if __BITINT_MAXWIDTH__ >= 4096
+   unsigned _BitInt(4096) c = ((unsigned _BitInt(4096)) 0x20000000000001ULL) << 253;
+   volatile unsigned _BitInt(4096) d = c;
+   CHECK (c, d);
+   unsigned _BitInt(4096) e = ((unsigned _BitInt(4096)) 0x20000000000001ULL) << 931;
+   volatile unsigned _BitInt(4096) f = e;
+   CHECK (e, f);
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-124.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-124.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-124.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-124.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,30 ----
+ /* PR tree-optimization/121131 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 156
+ struct A { _BitInt(156) b : 135; };
+ 
+ static inline _BitInt(156)
+ foo (struct A *x)
+ {
+   return x[1].b;
+ }
+ 
+ __attribute__((noipa)) _BitInt(156)
+ bar (void)
+ {
+   struct A a[] = { 1, 1, -13055525270329736316393717310914023773847wb,
+ 		   1, 1, 1, 1, 1, 1, 1, 1, 1 };
+   return foo (&a[1]);
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 156
+   if (bar () != -13055525270329736316393717310914023773847wb)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-125.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-125.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-125.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-125.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,15 ----
+ /* PR tree-optimization/121127 */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2 -w" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 576
+ _BitInt(575)
+ foo (void)
+ {
+   _BitInt(576) d;
+   _BitInt(575) e = d * 42wb;
+   return e;
+ }
+ #else
+ int i;
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-126.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-126.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-126.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-126.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,26 ----
+ /* PR middle-end/121828 */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-std=c23 -O2" } */
+ 
+ void baz (int);
+ #if __BITINT_MAXWIDTH__ >= 255
+ unsigned _BitInt(255) a;
+ 
+ void
+ foo (int x, int y)
+ {
+   unsigned _BitInt(255) b;
+   int t = __builtin_sub_overflow (y, x, &b);
+   baz (t);
+   a = b;
+ }
+ 
+ void
+ bar (int x, int y)
+ {
+   unsigned _BitInt(255) b;
+   bool t = __builtin_sub_overflow (y, x, &b);
+   a = b;
+   baz (t);
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-127.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-127.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-127.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-127.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,28 ----
+ /* PR middle-end/122689 */
+ /* { dg-do run { target { bitint } } } */
+ /* { dg-options "-O" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 12419
+ const _BitInt(12419) n =  ;
+ 
+ unsigned g;
+ 
+ _BitInt(6)
+ foo (unsigned a, unsigned b, unsigned c, unsigned _BitInt(256) z,
+      unsigned _BitInt(12419) y)
+ {
+   y /= b;
+   unsigned _BitInt(12419) ay = a * y;
+   g -= (n >= ay ? n : ay) % c;
+   return z;
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 12419
+   if (foo (0, 5, 5, 2, 0) != 2)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-128.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-128.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/bitint-128.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/bitint-128.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,27 ----
+ /* PR tree-optimization/124826 */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ typedef float V __attribute__((vector_size (16 * sizeof (float))));
+ 
+ union {
+ #if __BITINT_MAXWIDTH__ >= 256
+   _BitInt(256) b;
+ #endif
+   V v;
+ } u;
+ 
+ void
+ foo (int c)
+ {
+   u.v -= c ? 0.f : 1.f;
+ #if __BITINT_MAXWIDTH__ >= 256
+   u.b *= c;
+ #endif
+ }
+ 
+ int
+ main ()
+ {
+   foo (2);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/complex-10.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/complex-10.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/complex-10.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/complex-10.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ 
+ /* PR c/105555 */
+ 
+ struct C {
+   __complex int i;
+ };
+ struct C p[10];
+ int *foo1(void) {
+   return &__real(p->i);
+ }
+ 
+ int *foo2(void) {
+   return &__imag(p->i);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/dfp/bitint-10.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/dfp/bitint-10.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/dfp/bitint-10.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/dfp/bitint-10.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,49 ----
+ /* PR middle-end/120631 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 128
+ _Decimal128 a = 123456789135792468012345678900000000000.0dl;
+ _BitInt(128) b = 123456789135792468012345678900000000000wb;
+ _Decimal64 c = 12345678913579000000000000000000000000.0dd;
+ _BitInt(127) d = 12345678913579000000000000000000000000wb;
+ #endif
+ #if __BITINT_MAXWIDTH__ >= 256
+ _Decimal128 m = 1234567891357924680123456789000000000000000000000000000000000000000000000000.0dl;
+ _BitInt(256) n = 1234567891357924680123456789000000000000000000000000000000000000000000000000wb;
+ _Decimal64 o = 1234567891357900000000000000000000000000000000000000000000000000000000000000.0dd;
+ _BitInt(255) p = 1234567891357900000000000000000000000000000000000000000000000000000000000000wb;
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 128
+   if (a != b || (_BitInt(128)) a != b || c != d || (_BitInt(127)) c != d)
+     __builtin_abort ();
+   _Decimal128 e = 123456789135792468012345678900000000000.0dl;
+   _BitInt(128) f = 123456789135792468012345678900000000000wb;
+   _Decimal128 g = 123456789135792468012345678900000000000wb;
+   _BitInt(128) h = 123456789135792468012345678900000000000.0dl;
+   _Decimal64 i = 12345678913579000000000000000000000000.0dd;
+   _BitInt(128) j = 12345678913579000000000000000000000000wb;
+   _Decimal64 k = 12345678913579000000000000000000000000wb;
+   _BitInt(128) l = 12345678913579000000000000000000000000.0dd;
+   if (e != g || f != h || i != k || j != l)
+     __builtin_abort ();
+ #endif
+ #if __BITINT_MAXWIDTH__ >= 256
+   if (m != n || (_BitInt(256)) m != n || o != p || (_BitInt(255)) o != p)
+     __builtin_abort ();
+   _Decimal128 q = 1234567891357924680123456789000000000000000000000000000000000000000000000000.0dl;
+   _BitInt(256) r = 1234567891357924680123456789000000000000000000000000000000000000000000000000wb;
+   _Decimal128 s = 1234567891357924680123456789000000000000000000000000000000000000000000000000wb;
+   _BitInt(256) t = 1234567891357924680123456789000000000000000000000000000000000000000000000000.0dl;
+   _Decimal64 u = 1234567891357900000000000000000000000000000000000000000000000000000000000000.0dd;
+   _BitInt(255) v = 1234567891357900000000000000000000000000000000000000000000000000000000000000wb;
+   _Decimal64 w = 1234567891357900000000000000000000000000000000000000000000000000000000000000wb;
+   _BitInt(255) x = 1234567891357900000000000000000000000000000000000000000000000000000000000000.0dd;
+   if (q != s || r != t || u != w || v != x)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/dfp/bitint-9.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/dfp/bitint-9.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/dfp/bitint-9.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/dfp/bitint-9.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,29 ----
+ /* PR middle-end/120631 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 2048
+ _Decimal128 a =  .0dl;
+ _BitInt(2048) b =  ;
+ _Decimal64 c = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0dd;
+ _BitInt(1536) d = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wb;
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 2048
+   if (a != b || (_BitInt(2048)) a != b || c != d || (_BitInt(1536)) c != d)
+     __builtin_abort ();
+   _Decimal128 e =  .0dl;
+   _BitInt(2048) f =  ;
+   _Decimal128 g =  ;
+   _BitInt(2048) h =  .0dl;
+   _Decimal64 i = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0dd;
+   _BitInt(1536) j = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wb;
+   _Decimal64 k = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wb;
+   _BitInt(1536) l = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0dd;
+   if (e != g || f != h || i != k || j != l)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/dfp/pr120631.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/dfp/pr120631.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/dfp/pr120631.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/dfp/pr120631.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,25 ----
+ /* PR middle-end/120631 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ _Decimal64 a = 1234567891357900000.0dd;
+ long long b = 1234567891357900000LL;
+ _Decimal32 c = 1234567000000000000.0df;
+ long long d = 1234567000000000000LL;
+ 
+ int
+ main ()
+ {
+   if (a != b || (long long) a != b || c != d || (long long) c != d)
+     __builtin_abort ();
+   _Decimal64 e = 1234567891357900000.0dd;
+   long long f = 1234567891357900000LL;
+   _Decimal64 g = 1234567891357900000LL;
+   long long h = 1234567891357900000.0dd;
+   _Decimal32 i = 1234567000000000000.0df;
+   long long j = 1234567000000000000LL;
+   _Decimal32 k = 1234567000000000000LL;
+   long long l = 1234567000000000000.0df;
+   if (e != g || f != h || i != k || j != l)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/gomp/pr121453.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/gomp/pr121453.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/gomp/pr121453.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/gomp/pr121453.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,18 ----
+ /* PR middle-end/121453 */
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -O2 -Wuninitialized" } */
+ 
+ void bar (int, int, int);
+ int v[40][40][40];
+ 
+ void
+ foo (int x, int y, int z)
+ {
+   int i, j, k;
+ #pragma omp parallel for simd collapse(3)
+   for (k = 1; k <= z; ++k)
+     for (j = 2; j <= y - 1; ++j)
+       for (i = 1; i <= x; ++i)
+ 	v[i][j][k] = 0;
+   bar (i, j, k);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/gomp/pr123876.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/gomp/pr123876.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/gomp/pr123876.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/gomp/pr123876.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,69 ----
+ /* PR middle-end/123876 */
+ 
+ void
+ foo ()
+ {
+ lab:
+ #pragma omp simd
+   for (int i = 0; i < 4; i++)
+     asm goto ("" : : : : lab);			/* { dg-error "invalid branch to/from OpenMP structured block" } */
+ #pragma omp for
+   for (int i = 0; i < 4; i++)
+    asm goto ("" : : : : lab);			/* { dg-error "invalid branch to/from OpenMP structured block" } */
+ #pragma omp parallel
+   asm goto ("" : : : : lab);			/* { dg-error "invalid branch to/from OpenMP structured block" } */
+ }
+ 
+ void
+ bar ()
+ {
+ lab3:
+ #pragma omp simd
+   for (int i = 0; i < 4; i++)
+     {
+     lab1:
+     lab2:
+       asm goto ("" : : : : lab1, lab2, lab3);	/* { dg-error "invalid branch to/from OpenMP structured block" } */
+     }
+ #pragma omp for
+   for (int i = 0; i < 4; i++)
+     {
+     lab4:
+     lab5:
+       asm goto ("" : : : : lab4, lab5, lab3);	/* { dg-error "invalid branch to/from OpenMP structured block" } */
+     }
+ #pragma omp parallel
+   {
+   lab6:
+   lab7:
+     asm goto ("" : : : : lab6, lab7, lab3);	/* { dg-error "invalid branch to/from OpenMP structured block" } */
+   }
+ }
+ 
+ void
+ baz ()
+ {
+ #pragma omp simd
+   for (int i = 0; i < 4; i++)
+     {
+     lab1:
+     lab2:
+       asm goto ("" : : : : lab1, lab2, lab3);
+     lab3:;
+     }
+ #pragma omp for
+   for (int i = 0; i < 4; i++)
+     {
+     lab4:
+     lab5:
+       asm goto ("" : : : : lab4, lab5, lab6);
+     lab6:;
+     }
+ #pragma omp parallel
+   {
+   lab7:
+   lab8:
+     asm goto ("" : : : : lab7, lab8, lab9);
+   lab9:;
+   }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/attr-weakref-2_0.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/attr-weakref-2_0.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/attr-weakref-2_0.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/attr-weakref-2_0.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-lto-do link } */
+ /* { dg-lto-options {{-O2 -flto}} } */
+ 
+ #define __weak __attribute__((__weak__))
+ void __weak other() {}
+ void __weak fn() {}
+ 
+ int main() {
+   fn();
+   other();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/attr-weakref-2_1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/attr-weakref-2_1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/attr-weakref-2_1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/attr-weakref-2_1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,3 ----
+ /* { dg-options {{-fno-lto}} } */
+ 
+ void fn() {}
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_0.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_0.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_0.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_0.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-lto-do ar-link } */
+ /* { dg-lto-options { { -flto=auto -ffat-lto-objects } } } */
+ 
+ extern int bar_7 (int);
+ 
+ int main (void)
+ {
+   return bar_7 (42);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_1;
+ 
+ A_1 a1_1 = {1};
+ A_1 a2_1 = {2};
+ 
+ int bar_1 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_2;
+ 
+ A_2 a1_2 = {1};
+ A_2 a2_2 = {2};
+ 
+ int bar_2 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_3.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_3.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_3.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_3;
+ 
+ A_3 a1_3 = {1};
+ A_3 a2_3 = {2};
+ 
+ int bar_3 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_4.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_4.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_4.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_4;
+ 
+ A_4 a1_4 = {1};
+ A_4 a2_4 = {2};
+ 
+ int bar_4 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_5.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_5.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_5.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_5.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_5;
+ 
+ A_5 a1_5 = {1};
+ A_5 a2_5 = {2};
+ 
+ int bar_5 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_6.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_6.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_6.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_6.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_6;
+ 
+ A_6 a1_6 = {1};
+ A_6 a2_6 = {2};
+ 
+ int bar_6 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_7.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_7.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_7.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_7.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_7;
+ 
+ A_7 a1_7 = {1};
+ A_7 a2_7 = {2};
+ 
+ int bar_7 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_8.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_8.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_8.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_8.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_8;
+ 
+ A_8 a1_8 = {1};
+ A_8 a2_8 = {2};
+ 
+ int bar_8 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_9.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_9.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/lto/pr122515_9.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/lto/pr122515_9.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_9;
+ 
+ A_9 a1_9 = {1};
+ A_9 a2_9 = {2};
+ 
+ int bar_9 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr101312-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr101312-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr101312-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr101312-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,4 ----
+ /* PR c/101312 */
+ /* { dg-do compile } */
+ 
+ volatile int a[1] __attribute__((may_alias));
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr101312-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr101312-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr101312-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr101312-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,5 ----
+ /* PR c/101312 */
+ /* { dg-do compile } */
+ /* { dg-options "-g" } */
+ 
+ volatile int a[1] __attribute__((may_alias));
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr109410-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr109410-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr109410-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr109410-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,5 ----
+ /* PR tree-optimization/109410 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -g" } */
+ 
+ #include "pr109410.c"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr116053-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr116053-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr116053-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr116053-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -finstrument-functions -fno-forward-propagate -fno-delete-dead-exceptions -fnon-call-exceptions" } */
+ /* { dg-require-effective-target exceptions } */
+ /* { dg-require-effective-target int128 } */
+ 
+ /* PR rtl-optimization/116053 */
+ 
+ void
+ foo (__int128 x)
+ {
+   x = *(__int128 *) __builtin_memset (&x, 0, 10);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr117239.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr117239.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr117239.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr117239.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,42 ----
+ /* PR rtl-optimization/117239 */
+ /* { dg-do run } */
+ /* { dg-options "-fno-inline -O2" } */
+ /* { dg-additional-options "-fschedule-insns" { target i?86-*-* x86_64-*-* } } */
+ 
+ int a, b, c = 1, d;
+ 
+ int
+ foo (void)
+ {
+   return a;
+ }
+ 
+ struct A {
+   int e, f, g, h;
+   short i;
+   int j;
+ };
+ 
+ void
+ bar (int x, struct A y)
+ {
+   if (y.j == 1)
+     c = 0;
+ }
+ 
+ int
+ baz (struct A x)
+ {
+   return b;
+ }
+ 
+ int
+ main ()
+ {
+   struct A k = { 0, 0, 0, 0, 0, 1 };
+   d = baz (k);
+   bar (foo (), k);
+   if (c != 0)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr120480.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr120480.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr120480.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr120480.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,11 ----
+ /* PR target/120480 */
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ 
+ struct S { int a, b, c; } s;
+ 
+ void
+ foo (void)
+ {
+   struct S t = s;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr120560.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr120560.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr120560.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr120560.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fno-tree-ccp -fdump-tree-evrp" } */
+ int main() {
+   int a = -1, b = 2, c = 1;
+   if (a >= 0)
+     c = 0;
+   while (1) {
+     if (-b + c - 7 >= 0)
+       return 0;
+     b = b - 1000 - 2147482648;
+   }
+ }
+ /* { dg-final { scan-tree-dump "return 0"  "evrp" } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr120638.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr120638.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr120638.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr120638.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,31 ----
+ /* PR tree-optimization/120638 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ffast-math" } */
+ 
+ extern float sqrtf (float x);
+ 
+ __attribute__((noipa)) float
+ foo (unsigned int s)
+ {
+   return 0.5f / sqrtf (1.f + s);
+ }
+ 
+ __attribute__((noipa)) float
+ bar (float s)
+ {
+   if (s < 0.0 || s > 65535.0f)
+     __builtin_unreachable ();
+   return 0.5f / sqrtf (1.f + s);
+ }
+ 
+ int
+ main ()
+ {
+   if (__builtin_fabsf (foo (3) - 0.25f) > 0.00390625f
+       || __builtin_fabsf (foo (15) - 0.125f) > 0.00390625f
+       || __builtin_fabsf (foo (63) - 0.0625f) > 0.00390625f
+       || __builtin_fabsf (bar (3.0f) - 0.25f) > 0.00390625f
+       || __builtin_fabsf (bar (15.0f) - 0.125f) > 0.00390625f
+       || __builtin_fabsf (bar (63.0f) - 0.0625f) > 0.00390625f)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr121104.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr121104.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr121104.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr121104.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/121104 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ static unsigned long
+ foo (unsigned long x, unsigned long y,
+      unsigned long z, unsigned long *w)
+ {
+   int r;
+   unsigned long a = __builtin_sub_overflow (x, y, &r);
+   unsigned long b = __builtin_sub_overflow (r, z, &r);
+   *w = a + b;
+   return r;
+ }
+ 
+ unsigned long
+ bar (unsigned long *p, unsigned long *q)
+ {
+   unsigned long c;
+   p[0] = foo (p[0], q[0], 0, &c);
+   p[1] = foo (p[1], q[1], c, &c);
+   return c;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr121322.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr121322.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr121322.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr121322.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* PR middle-end/121322 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ unsigned long long
+ foo (unsigned long long *p)
+ {
+   unsigned long long a = *p;
+   unsigned long long b = __builtin_bswap64 (a);
+   return ((b << 32)
+ 	  | ((b >> 8) & 0xff000000ULL)
+ 	  | ((b >> 24) & 0xff0000ULL)
+ 	  | ((b >> 40) & 0xff00ULL));
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr122126_vextr.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr122126_vextr.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr122126_vextr.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr122126_vextr.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-additional-options "-mavx2" { target avx2 } } */
+ 
+ #define vect16 __attribute__((vector_size(16)))
+ void ub_set() {
+   volatile vect16 unsigned BS_VAR_0;
+   unsigned a = BS_VAR_0[12];
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr122126_vset.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr122126_vset.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr122126_vset.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr122126_vset.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-additional-options "-mavx2" { target avx2 } } */
+ 
+ #define vect16 __attribute__((vector_size(16)))
+ void ub_set() {
+   volatile vect16 unsigned BS_VAR_0;
+   BS_VAR_0[12] = 4;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr123018.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123018.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr123018.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123018.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,17 ----
+ /* PR c/123018 */
+ /* { dg-do compile } */
+ 
+ struct A {
+   int x : 8 __attribute__ ((vector_size (8)));	/* { dg-error "bit-field 'x' has invalid type" } */
+ };
+ struct B {
+   float x : 8;					/* { dg-error "bit-field 'x' has invalid type" } */
+ };
+ struct C {
+   int : 8 __attribute__ ((vector_size (8)));	/* { dg-error "bit-field '\[^\n\r]*anonymous\[^\n\r]*' has invalid type" } */
+   int x;
+ };
+ struct D {
+   float : 8;					/* { dg-error "bit-field '\[^\n\r]*anonymous\[^\n\r]*' has invalid type" } */
+   int x;
+ };
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr123294-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123294-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr123294-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123294-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fno-tree-dse -fno-tree-dce" } */
+ /* PR rtl-optimization/123294 */
+ 
+ typedef unsigned a;
+ int b;
+ void g(__attribute__((__vector_size__(4 * sizeof(a)))) a *);
+ a d() {
+   __attribute__((__vector_size__(4 * sizeof(a)))) a e[5];
+   if (0 > b) {
+     __attribute__((__vector_size__(8 * sizeof(a)))) a f = {b, b};
+     e[0] = __builtin_shufflevector(f, f, 0, 1, 2, 3);
+   }
+   return 1;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr123300.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123300.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr123300.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123300.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-vrp1" } */
+ [[gnu::noipa]] void
+ bar (int a, int b)
+ {
+   if (a < 0)
+     __builtin_abort ();
+ }
+ 
+ [[gnu::noipa]] void
+ foo (int n, int p)
+ {
+   for (int i = n; i-- > 0;)
+     {
+       const int x = 1 << i;
+       if (x <= 0)
+ 	__builtin_unreachable ();
+       if (p)
+ 	bar (i, x);
+     }
+ }
+ 
+ int
+ main ()
+ {
+   foo (4, 1);
+ }
+ /* { dg-final { scan-tree-dump "__builtin_unreachable" "vrp1" } } */
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr123431.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123431.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr123431.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123431.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,19 ----
+ /* PR tree-optimization/123431 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ extern void foo (int);
+ 
+ extern inline __attribute__((always_inline)) void
+ bar (int x, ...)
+ {
+   if (__builtin_constant_p (__builtin_va_arg_pack ()))
+     foo (x);
+ }
+ 
+ void
+ baz (int x)
+ {
+   bar (1, 2);
+   bar (3, x);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr123537.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123537.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr123537.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123537.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-options "-O2" } */
+ 
+ typedef __attribute__((__vector_size__(16))) __int128 V;
+ 
+ union {
+   _Complex long c;
+   V v;
+ } u;
+ 
+ __int128 j;
+ int i;
+ 
+ void
+ foo()
+ {
+   u.v &= 4;
+   i %= u.c ? 3 : j;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr123882.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123882.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr123882.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr123882.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ /* PR c/123882 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23" } */
+ 
+ typedef int T;
+ void foo (unsigned long, T[]);
+ void foo (unsigned long x, T[restrict x]);
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr124138.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr124138.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr124138.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr124138.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,20 ----
+ /* PR target/124138 */
+ /* { dg-do run } */
+ /* { dg-options "-Wno-psabi" } */
+ 
+ typedef __attribute__((__vector_size__ (8 * sizeof (unsigned long long)))) unsigned long long V;
+ 
+ [[gnu::noipa]] V
+ foo (V x)
+ {
+   return __builtin_shuffle (x, (V) { 0, 1, 2, 5, 4, 5, 6, 7 });
+ }
+ 
+ int
+ main ()
+ {
+   V x = foo ((V) { 1, 2, 3, 4, 5, 6, 7, 8 });
+   if (x[0] != 1 || x[1] != 2 || x[2] != 3 || x[3] != 6
+       || x[4] != 5 || x[5] != 6 || x[6] != 7 || x[7] != 8)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr124454-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr124454-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr124454-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr124454-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 -fno-forward-propagate -fnon-call-exceptions -fno-dse -fprofile-generate -fopenmp -finstrument-functions" } */
+ /* { dg-additional-options "-mno-outline-atomics" { target aarch64*-*-* } } */
+ 
+ /* PR rtl-optimization/124454 */
+ 
+ int a, b;
+ 
+ void
+ foo()
+ {
+   long c;
+   a *= b;
+   b = *(char *)__builtin_memset(&c, 1, 4);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr125019.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr125019.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr125019.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr125019.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fno-vect-cost-model -fno-tree-dce -fno-tree-pre" } */
+ 
+ int a, b, c, d;
+ void e(unsigned f) {
+   for (c = 0; c < 2; c++) {
+     b = d;
+     d = f;
+     for (a = 0; a < 2; a++)
+       ;
+   }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/pr125501.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr125501.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/pr125501.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/pr125501.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,35 ----
+ // { dg-do run }
+ // { dg-options "-O3" }
+ 
+ #include <stdint.h>
+ int64_t g2, g27, g10;
+ static void *g13, *g24;
+ _Bool f11___trans_tmp_1, f11_c17;
+ void __attribute__((noinline)) f11(int64_t a0, void *a4, void *a5)
+ {
+     _Bool ob6;
+     int32_t v12;
+     int64_t v15;
+ lbl_entry:
+ lbl_sw_def4:
+     ob6 = g13 == a4;
+     if (ob6 || f11_c17) return;
+     if (f11___trans_tmp_1) v12 = g10;
+     a0 = (char *)a5 - (char *)a4;
+     ob6 = 0 == a0;
+     *(_Bool *)4 = 0;
+     if (ob6) goto lbl_b22;
+     __builtin_unreachable();
+ lbl_b22:
+     g27 = v12;
+     switch (v15)
+     {
+         case 6009053803839173278: goto lbl_sw_def4;
+         case 70689892217558167: goto lbl_entry;
+     }
+ }
+ 
+ int main()
+ {
+     f11(0, 0, g24);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/strlenopt-97.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/strlenopt-97.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/strlenopt-97.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/strlenopt-97.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,33 ----
+ /* PR tree-optimization/125079 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-strlen1" } */
+ /* { dg-final { scan-tree-dump-times "__builtin___strcpy_chk \\\(" 1 "strlen1" } } */
+ /* { dg-final { scan-tree-dump-not "__builtin___strcpy_chk \\\(\[^\n\r]*, 64\\\)" "strlen1" } } */
+ /* { dg-final { scan-tree-dump-times "__builtin___stpcpy_chk \\\(" 1 "strlen1" } } */
+ /* { dg-final { scan-tree-dump-not "__builtin___stpcpy_chk \\\(\[^\n\r]*, 128\\\)" "strlen1" } } */
+ 
+ typedef __SIZE_TYPE__ size_t;
+ void foo (char *, int);
+ char *stpcpy (char *, const char *);
+ 
+ size_t
+ bar (char *r)
+ {
+   char buf[64];
+   foo (buf, 0);
+   size_t ret = __builtin_strlen (buf);
+   __builtin___strcat_chk (buf, r, 64);
+   foo (buf, 1);
+   return ret;
+ }
+ 
+ size_t
+ baz (char *r)
+ {
+   char buf[128];
+   foo (buf, 2);
+   __builtin___strcat_chk (buf, r, 128);
+   size_t ret = __builtin_strlen (buf);
+   foo (buf, 3);
+   return ret;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/bitint-85.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/bitint-85.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/bitint-85.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/bitint-85.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-std=c23 -pedantic-errors" } */
+ /* { dg-skip-if "" { ! run_expensive_tests }  { "*" } { "-O0" "-O2" } } */
+ /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 1024
+ constexpr _BitInt(1024) d = -541140097068598424394740839221562143161511518875518765552323978870598341733206554363735813878577506997168480201818027232521wb;
+ int c;
+ 
+ static inline void
+ foo (_BitInt(1024) b, _BitInt(1024) *r)
+ {
+   if (c)
+     b = 0;
+   *r = b;
+ }
+ 
+ [[gnu::noipa]] void
+ bar (_BitInt(1024) y)
+ {
+   if (y != d)
+     __builtin_abort ();
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 1024
+   _BitInt(1024) x;
+   foo (d, &x);
+   bar (x);
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/builtin-math-6.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/builtin-math-6.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/builtin-math-6.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/builtin-math-6.c	Fri Jun 19 06:51:04 2026
*************** extern void link_error(int, int);
*** 155,180 ****
      link_error(__LINE__, VAL_NUM); \
    } while (0)
  
! /* For complex numbers, call the TESTIT_COMPLEX_R2 macro for all
     combinations of neg and conj.  */
  #define TESTIT_COMPLEX_R2_ALLNEG(FUNC, ARG0, ARG1, RES1, RES2, RES3, RES4, RES5,\
   RES6, RES7, RES8, RES9, RES10, RES11, RES12, RES13, RES14, RES15, RES16) do{ \
!   TESTIT_COMPLEX_R2(1, FUNC, (_Complex float)(ARG0),(_Complex float)(ARG1), RES1);\
!   TESTIT_COMPLEX_R2(2, FUNC, (_Complex float)(ARG0),CONJ(ARG1), RES2); \
!   TESTIT_COMPLEX_R2(3, FUNC, (_Complex float)(ARG0),-(_Complex float)(ARG1), RES3); \
!   TESTIT_COMPLEX_R2(4, FUNC, (_Complex float)(ARG0),-CONJ(ARG1), RES4); \
!   TESTIT_COMPLEX_R2(5, FUNC, -(_Complex float)(ARG0),(_Complex float)(ARG1), RES5); \
!   TESTIT_COMPLEX_R2(6, FUNC, -(_Complex float)(ARG0),CONJ(ARG1), RES6); \
!   TESTIT_COMPLEX_R2(7, FUNC, -(_Complex float)(ARG0),-(_Complex float)(ARG1), RES7); \
!   TESTIT_COMPLEX_R2(8, FUNC, -(_Complex float)(ARG0),-CONJ(ARG1), RES8); \
!   TESTIT_COMPLEX_R2(9, FUNC, CONJ(ARG0),(_Complex float)(ARG1), RES9); \
!   TESTIT_COMPLEX_R2(10, FUNC, CONJ(ARG0),CONJ(ARG1), RES10); \
!   TESTIT_COMPLEX_R2(11, FUNC, CONJ(ARG0),-(_Complex float)(ARG1), RES11); \
!   TESTIT_COMPLEX_R2(12, FUNC, CONJ(ARG0),-CONJ(ARG1), RES12); \
!   TESTIT_COMPLEX_R2(13, FUNC, -CONJ(ARG0),(_Complex float)(ARG1), RES13); \
!   TESTIT_COMPLEX_R2(14, FUNC, -CONJ(ARG0),CONJ(ARG1), RES14); \
!   TESTIT_COMPLEX_R2(15, FUNC, -CONJ(ARG0),-(_Complex float)(ARG1), RES15); \
!   TESTIT_COMPLEX_R2(16, FUNC, -CONJ(ARG0),-CONJ(ARG1), RES16); \
  } while (0)
  
  int main (void)
--- 155,201 ----
      link_error(__LINE__, VAL_NUM); \
    } while (0)
  
! /* Similar to TESTIT_COMPLEX_R2, but doesn't check sign of imag part
!    if imag part is zero.  MPC between 1.3.1 and 1.4.0 changed the
!    handling of it.  */
! #define TESTIT_COMPLEX_R2_ISZ(VAL_NUM, FUNC, ARG0, ARG1, RES) do { \
!   if (COMPLEX_DIFF1PCT_F (__builtin_##FUNC##f(ARG0, ARG1), (RES)) \
!       || CKSGN_F (__real__ (__builtin_##FUNC##f(ARG0, ARG1)), __real__ (RES)) \
!       || (__imag__ (RES) != 0 \
! 	  && CKSGN_F (__imag__ (__builtin_##FUNC##f(ARG0, ARG1)), __imag__ (RES)))) \
!     link_error(__LINE__, VAL_NUM); \
!   if (COMPLEX_DIFF1PCT (__builtin_##FUNC(ARG0, ARG1), (RES)) \
!       || CKSGN (__real__ (__builtin_##FUNC(ARG0, ARG1)), __real__ (RES)) \
!       || (__imag__ (RES) != 0 \
! 	  && CKSGN (__imag__ (__builtin_##FUNC(ARG0, ARG1)), __imag__ (RES)))) \
!     link_error(__LINE__, VAL_NUM); \
!   if (COMPLEX_DIFF1PCT_L (__builtin_##FUNC##l(ARG0, ARG1), (RES)) \
!       || CKSGN_L (__real__ (__builtin_##FUNC##l(ARG0, ARG1)), __real__ (RES)) \
!       || (__imag__ (RES) != 0 \
! 	  && CKSGN_L (__imag__ (__builtin_##FUNC##l(ARG0, ARG1)), __imag__ (RES)))) \
!     link_error(__LINE__, VAL_NUM); \
!   } while (0)
! 
! /* For complex numbers, call the TESTIT_COMPLEX_R2_ISZ macro for all
     combinations of neg and conj.  */
  #define TESTIT_COMPLEX_R2_ALLNEG(FUNC, ARG0, ARG1, RES1, RES2, RES3, RES4, RES5,\
   RES6, RES7, RES8, RES9, RES10, RES11, RES12, RES13, RES14, RES15, RES16) do{ \
!   TESTIT_COMPLEX_R2_ISZ(1, FUNC, (_Complex float)(ARG0),(_Complex float)(ARG1), RES1);\
!   TESTIT_COMPLEX_R2_ISZ(2, FUNC, (_Complex float)(ARG0),CONJ(ARG1), RES2); \
!   TESTIT_COMPLEX_R2_ISZ(3, FUNC, (_Complex float)(ARG0),-(_Complex float)(ARG1), RES3); \
!   TESTIT_COMPLEX_R2_ISZ(4, FUNC, (_Complex float)(ARG0),-CONJ(ARG1), RES4); \
!   TESTIT_COMPLEX_R2_ISZ(5, FUNC, -(_Complex float)(ARG0),(_Complex float)(ARG1), RES5); \
!   TESTIT_COMPLEX_R2_ISZ(6, FUNC, -(_Complex float)(ARG0),CONJ(ARG1), RES6); \
!   TESTIT_COMPLEX_R2_ISZ(7, FUNC, -(_Complex float)(ARG0),-(_Complex float)(ARG1), RES7); \
!   TESTIT_COMPLEX_R2_ISZ(8, FUNC, -(_Complex float)(ARG0),-CONJ(ARG1), RES8); \
!   TESTIT_COMPLEX_R2_ISZ(9, FUNC, CONJ(ARG0),(_Complex float)(ARG1), RES9); \
!   TESTIT_COMPLEX_R2_ISZ(10, FUNC, CONJ(ARG0),CONJ(ARG1), RES10); \
!   TESTIT_COMPLEX_R2_ISZ(11, FUNC, CONJ(ARG0),-(_Complex float)(ARG1), RES11); \
!   TESTIT_COMPLEX_R2_ISZ(12, FUNC, CONJ(ARG0),-CONJ(ARG1), RES12); \
!   TESTIT_COMPLEX_R2_ISZ(13, FUNC, -CONJ(ARG0),(_Complex float)(ARG1), RES13); \
!   TESTIT_COMPLEX_R2_ISZ(14, FUNC, -CONJ(ARG0),CONJ(ARG1), RES14); \
!   TESTIT_COMPLEX_R2_ISZ(15, FUNC, -CONJ(ARG0),-(_Complex float)(ARG1), RES15); \
!   TESTIT_COMPLEX_R2_ISZ(16, FUNC, -CONJ(ARG0),-CONJ(ARG1), RES16); \
  } while (0)
  
  int main (void)
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/builtin-shufflevector-pr123156.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/builtin-shufflevector-pr123156.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/builtin-shufflevector-pr123156.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/builtin-shufflevector-pr123156.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run { target le } } */
+ 
+ #include <stdint.h>
+ 
+ #define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
+ #define BITCAST(T, F, arg)                                                     \
+     ((union {                                                                  \
+         F src;                                                                 \
+         T dst;                                                                 \
+     })arg)                                                                     \
+         .dst
+ 
+ uint64_t func_1()
+ {
+     BS_VEC(uint64_t, 32) BS_VAR_0;
+     BS_VAR_0 = BITCAST(
+         BS_VEC(uint64_t, 32), BS_VEC(uint8_t, 256),
+         __builtin_shufflevector(
+             (BS_VEC(uint8_t, 2)){ 2 }, (BS_VEC(uint8_t, 2)){}, 1, 0, 2, 2, 2, 3,
+             1, 2, 3, 1, 3, 3, 2, 1, 3, 0, 2, 2, 1, 2, 1, 3, 1, 1, 0, 0, 2, 0, 3,
+             2, 2, 0, 1, 3, 1, 2, 0, 2, 0, 3, 0, 0, 2, 0, 2, 1, 3, 2, 3, 2, 1, 1,
+             2, 3, 3, 3, 3, 0, 1, 2, 3, 2, 0, 2, 2, 2, 0, 3, 3, 3, 1, 3, 0, 0, 2,
+             3, 1, 1, 2, 2, 1, 2, 0, 0, 3, 2, 2, 3, 2, 2, 3, 2, 0, 2, 2, 0, 2, 1,
+             3, 1, 0, 2, 1, 3, 2, 1, 0, 2, 3, 0, 1, 3, 2, 1, 3, 1, 1, 3, 2, 2, 0,
+             3, 2, 2, 0, 3, 0, 3, 2, 3, 1, 3, 2, 3, 3, 2, 2, 0, 0, 0, 2, 1, 3, 1,
+             2, 2, 3, 0, 1, 3, 1, 1, 2, 0, 1, 2, 1, 2, 0, 2, 0, 2, 3, 3, 3, 1, 2,
+             0, 3, 1, 2, 0, 1, 0, 3, 0, 0, 3, 2, 2, 0, 3, 1, 2, 0, 1, 1, 3, 0, 1,
+             3, 1, 3, 2, 1, 3, 1, 2, 1, 1, 0, 1, 3, 3, 2, 3, 2, 2, 0, 2, 2, 2, 1,
+             1, 0, 3, 1, 3, 0, 3, 0, 0, 1, 3, 3, 1, 2, 1, 1, 3, 1, 0, 2, 1, 3, 2,
+             1, 3, 2, 2, 2, 3, 2, 0, 1, 3, 3, 3, 0, 0, 0, 1, 3, 2, 2, 1));
+     return BS_VAR_0[0];
+ }
+ 
+ int main()
+ {
+     uint64_t BS_CHECKSUM = func_1();
+     if (BS_CHECKSUM != 0x0000000000000200ull)
+       __builtin_abort ();
+     return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr110043.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr110043.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr110043.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr110043.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target int128 } */
+ 
+ __int128 g_116_1;
+ extern char g_521[][8];
+ void func_24() {
+   for (; g_116_1 >= 0;)
+     g_521[g_116_1][g_116_1] &= 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr111036.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr111036.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr111036.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr111036.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ 
+ #include <stdlib.h>
+ 
+ __attribute__((aligned(32))) static struct
+ {
+   unsigned long long available_cmd_ids_per_core[2];
+ } _rl2c_cmd_id_data;
+ 
+ static inline void __attribute__((always_inline))
+ foo (void *base, size_t length)
+ {
+   unsigned long int p = (unsigned long int) base;
+   if (__builtin_constant_p(p) && (p & 31) == 0) { exit (0); } 
+   else if (__builtin_constant_p(length)) { exit (0); } 
+   else { exit (0); }
+ }
+ 
+ int main(int argc, char **argv)
+ {
+   foo(&_rl2c_cmd_id_data, sizeof(*(&_rl2c_cmd_id_data)));
+   return 0;
+ }
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr116296.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr116296.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr116296.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr116296.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target int32plus } */
+ 
+ short g(unsigned long h, int i[11][11], short c)
+ {
+   for (unsigned long j = 0; j < h; j -= 0x105f000000000000ull)
+     c = c > i[j][j];
+   return c;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr116772-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr116772-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr116772-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr116772-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ /* PR middle-end/116772  */
+ /* The division by `/b` should not
+    be made uncondtional. */
+ 
+ int mult0(int a,int b) __attribute__((noipa));
+ 
+ int mult0(int a,int b){
+   return (b!=0 ? (a/b)*b : 0);
+ }
+ 
+ int bit_and0(int a,int b) __attribute__((noipa));
+ 
+ int bit_and0(int a,int b){
+   return (b!=0 ? (a/b)&b : 0);
+ }
+ 
+ int main() {
+   if (mult0(3, 0) != 0)
+     __builtin_abort();
+   if (bit_and0(3, 0) != 0)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr117811.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr117811.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr117811.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr117811.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do run } */
+ 
+ #include <string.h>
+ 
+ typedef int v4 __attribute__((vector_size (4 * sizeof (int))));
+ 
+ void __attribute__((noclone,noinline)) do_shift (v4 *vec, int shift)
+ {
+   v4 t = *vec;
+ 
+   if (shift > 0)
+   {
+     t = t >> shift;
+   }
+ 
+   *vec = t;
+ }
+ 
+ int main ()
+ {
+ #if __SIZEOF_INT__ >= 4
+   v4 vec =  {0x1000000, 0x2000, 0x300, 0x40};
+   v4 vec2 = {0x100000,  0x200,  0x30,  0x4};
+ #else
+   v4 vec =  {0x4000, 0x2000, 0x300, 0x40};
+   v4 vec2 = {0x400,  0x200,  0x30,  0x4};
+ #endif
+   do_shift (&vec, 4);
+   if (memcmp (&vec, &vec2, sizeof (v4)) != 0)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr119532.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr119532.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr119532.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr119532.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target fixed_point } */
+ 
+ extern _Fract sinuhk_deg (unsigned short _Accum);
+ 
+ _Fract cosuhk_deg (unsigned short _Accum deg)
+ {
+   unsigned short _Accum _90_deg = 90uhk;
+   __asm ("" : "+r" (_90_deg));
+ 
+   return deg <= _90_deg
+     ? sinuhk_deg (_90_deg - deg)
+     : -sinuhk_deg (deg - _90_deg);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120182.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120182.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120182.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120182.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do run { target { { *-*-linux* *-*-gnu* *-*-uclinux* } && mmap } } } */
+ 
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <sys/mman.h>
+ 
+ struct S
+ {
+   struct S *next;
+ };
+ 
+ static void __attribute__((noipa))
+ allocate(void *addr, unsigned long long size)
+ {
+   void *ptr = mmap((void *)addr, size,
+ 		   PROT_READ | PROT_WRITE,
+ 		   MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE,
+ 		   -1, 0);
+   if(ptr != addr)
+     exit(0);
+ }
+ 
+ int main (void)
+ {
+   int size = 0x8000;
+   char *ptr = (char *)0x288000ull;
+   allocate((void *)ptr, size);
+ 
+   struct S *s1 = (struct S *)ptr;
+   struct S *s2 = (struct S *)256;
+   for (int i = 0; i < 3; i++)
+     {
+       for(char *addr = (char *)s1; addr < (char *)s1 + sizeof(*s1); ++addr)
+ 	*addr = 0;
+ 
+       if(s1->next)
+ 	s1->next = s1->next->next = s2;
+       else
+ 	s1->next = s2;
+     }
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120341-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120341-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120341-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120341-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fallow-store-data-races" } */
+ 
+ char a, *b;
+ int main()
+ {
+   b = "0";
+   if (a)
+     b[0]++;
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120341-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120341-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120341-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120341-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fallow-store-data-races" } */
+ 
+ char a, *b;
+ int main()
+ {
+   while (a)
+     {
+       b = "0";
+       b[0]++;
+     }
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120654.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120654.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120654.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120654.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ 
+ int a, c, e, f, h, j;
+ long g, k;
+ void *malloc(long);
+ void free(void *);
+ int b(int m) {
+   if (m || a)
+     return 1;
+   return 0.0f;
+ }
+ int d(int m, int p2) { return b(m) + m + (1 + p2 + p2); }
+ int i() {
+   long l[] = {2, 9, 7, 8, g, g, 9, 0, 2, g};
+   e = l[c] << 6;
+ }
+ void n() {
+   long o;
+   int *p = malloc(sizeof(int));
+   k = 1 % j;
+   for (; i() + f + h; o++)
+     if (p[d(j + 6, (int)k + 1992695866) + h + f + j + (int)k - 1 + o])
+       free(p);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120944.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120944.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr120944.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr120944.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */
+ /* { dg-additional-options "-fdump-tree-optimized" } */
+ 
+ #include <stdlib.h>
+ 
+ typedef union {
+   int u32;
+   struct
+   {
+      int A:1;
+      int B:2;
+      int C:3;
+   };
+ } u_t;
+ 
+ typedef union {
+    volatile int u[3];
+    volatile struct {
+         u_t a;
+         int b;
+         int c;
+    };
+ } DATA;
+ 
+ void foo (volatile DATA *d)
+ {
+      d->a.u32 = ~0;
+      u_t u = d->a;
+      int v = u.A;
+      if (v)
+         abort();
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "if \\\(" 1 "optimized" } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr121370.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr121370.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr121370.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr121370.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target int32plus } */
+ 
+ int a;
+ int main()
+ {
+   int c = -2147483647;
+   int d = -2147483647;
+   int e = 2147483647;
+   if (0)
+   f:
+     e = d + e - 2;
+ g:
+   if (d - c - e > 0) {
+     a = -c;
+     if (a + d) {
+       d = 1;
+       goto g;
+     }
+     return 0;
+   }
+   if (e)
+     goto f;
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr121844.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr121844.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr121844.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr121844.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ 
+ typedef unsigned long a;
+ int b[] = {};
+ int **c;
+ short d(a *e, int f)
+ {
+   *c = &f;
+   for (;;)
+     asm goto("" : : : : g);
+   for (; f; f--) {
+     asm goto("" : : : : g);
+   g:
+     *e ^= b[f + 1];
+   }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr122188.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr122188.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr122188.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr122188.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,33 ----
+ /* PR c/122188 */
+ /* { dg-do run } */
+ 
+ int
+ foo (unsigned x, int y)
+ {
+   unsigned a = x;
+   int b = y;
+   int ret = __builtin_ctzg (x++, y++);
+   if (x != a + 1 || y != b + 1)
+     __builtin_abort ();
+   return ret;
+ }
+ 
+ int
+ bar (unsigned x, int y)
+ {
+   unsigned a = x;
+   int b = y;
+   int ret = __builtin_clzg (x++, y++);
+   if (x != a + 1 || y != b + 1)
+     __builtin_abort ();
+   return ret;
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (0, 42) != 42 || foo (1, 5) != 0 || foo (4, 17) != 2)
+     __builtin_abort ();
+   if (bar (0, 42) != 42 || bar (~0U, 5) != 0 || bar (~0U >> 4, 17) != 4)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123061.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123061.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123061.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123061.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-ffinite-loops" } */
+ 
+ int a, b, c;
+ int d() {
+   while (a)
+     ;
+   return 0;
+ }
+ static int e(int f, int g) {
+   c = f;
+   while (1) {
+     f = 0;
+     do {
+       c = -c;
+       if (c >= 0)
+         goto h;
+     } while (-1 / b);
+     return d();
+   h:
+     b = g;
+   }
+ }
+ int main()
+ {
+   while (e(-4, 3))
+     ;
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123175-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123175-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123175-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123175-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fgimple" } */
+ 
+ typedef int v4si __attribute__((vector_size(16)));
+ typedef int v2si __attribute__((vector_size(8)));
+ typedef char v4qi __attribute__((vector_size(4)));
+ 
+ v4si res;
+ v2si a;
+ v2si b;
+ 
+ void __attribute__((noipa)) __GIMPLE() foo ()
+ {
+   v2si a_;
+   v2si b_;
+   v4si res_;
+   a_ = a;
+   b_ = b;
+   res_ = __VEC_PERM (a_, b_, _Literal (v4qi) { 0, 1, 2, 3 });
+   res = res_;
+ }
+ 
+ int main()
+ {
+   a = (v2si){ 4, 3 };
+   b = (v2si){ 2, 1 };
+   foo ();
+   if (res[0] != 4 || res[1] != 3 || res[2] != 2 || res[3] != 1)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123175-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123175-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123175-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123175-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fgimple" } */
+ 
+ typedef int v4si __attribute__((vector_size(16)));
+ typedef int v2si __attribute__((vector_size(8)));
+ typedef char v4qi __attribute__((vector_size(4)));
+ 
+ v4si res;
+ v2si a;
+ v2si b;
+ 
+ void __attribute__((noipa)) __GIMPLE() foo ()
+ {
+   v2si a_;
+   v2si b_;
+   v4si res_;
+   a_ = a;
+   b_ = b;
+   res_ = __VEC_PERM (a_, b_, _Literal (v4qi) { 0, 2, 2, 1 });
+   res = res_;
+ }
+ 
+ int main()
+ {
+   a = (v2si){ 4, 3 };
+   b = (v2si){ 2, 1 };
+   foo ();
+   if (res[0] != 4 || res[1] != 2 || res[2] != 2 || res[3] != 3)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123416.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123416.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123416.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123416.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fno-strict-aliasing" } */
+ 
+ struct a {
+   int b;
+ } c;
+ 
+ int d;
+ 
+ static struct a
+ g()
+ {
+   int a[2], b, f = 0;
+   for (; f < 2; f++)
+     a[f] = 1;
+   b = a[0];
+   if (b)
+     return c;
+ }
+ int main()
+ {
+   c.b = 1;
+   struct a e = g();
+   c = g();
+   if (!c.b || !e.b)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123636.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123636.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123636.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123636.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do run } */
+ 
+ int main()
+ {
+   int g_58;
+   _Bool g_170 = 0;
+   int m = 0;
+   for (int i = 0; i < 2; i++)
+     {
+       int arr[3] = {};
+ label:
+       g_58 = g_170 == 0;
+       for (int a = 0; a < 3; a++)
+ 	m += arr[a];
+       for (int j = 0; j != 7; ++j)
+ 	for (int k = 0; k < 2; k++)
+ 	  {
+ 	    --g_170;
+ 	    if (g_58) goto label;
+ 	    arr[0] = 2;
+ 	  }
+     }
+   if (m != 0)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123645-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123645-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123645-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123645-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ 
+ /* PR tree-optimization/123645 */
+ /* Phi-opt was transforming f into __builtin_popcount which was incorrect. */
+ 
+ __attribute__((noinline))
+ int f(unsigned a)
+ {
+   return a < 1 ? __builtin_popcount(a) : 0;
+ }
+ 
+ int main()
+ {
+   if (f(1) != 0)
+     __builtin_abort();
+   if (f(0) != 0)
+     __builtin_abort();
+   if (f(2) != 0)
+     __builtin_abort();
+   if (f(3) != 0)
+     __builtin_abort();
+   if (f(-1) != 0)
+     __builtin_abort();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123645-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123645-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123645-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123645-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ 
+ /* PR tree-optimization/123645 */
+ /* Phi-opt was transforming f into __builtin_bswap which was incorrect. */
+ 
+ __attribute__((noinline))
+ int f(unsigned a)
+ {
+   return a < 1 ? __builtin_bswap32(a) : 0;
+ }
+ 
+ int main()
+ {
+   if (f(1) != 0)
+     __builtin_abort();
+   if (f(0) != 0)
+     __builtin_abort();
+   if (f(2) != 0)
+     __builtin_abort();
+   if (f(3) != 0)
+     __builtin_abort();
+   if (f(-1) != 0)
+     __builtin_abort();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123864.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123864.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123864.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123864.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,28 ----
+ /* PR tree-optimization/123864 */
+ /* { dg-do run { target int128 } } */
+ 
+ int u, v, x;
+ 
+ [[gnu::noipa]] static void
+ foo ()
+ {
+   __int128 c = (__int128) 0xa5ee4bc88ULL << 64;
+   long long b = 0x207b8a7f7LL;
+   int a = 4;
+   long long y;
+   __builtin_add_overflow (a, v, &y);
+   c *= y;
+   
+   unsigned z;
+   if (__builtin_add_overflow (b, u, &z))
+     z = 0xffffffffU;
+   x = __builtin_mul_overflow_p (z, c, c);
+ }
+ 
+ int
+ main ()
+ {
+   foo ();
+   if (!x)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123887.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123887.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr123887.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr123887.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do run } */
+ 
+ typedef struct {
+     unsigned s;
+ } struct_t;
+ 
+ struct_t *p;
+ _Bool cond;
+ int v = 1;
+ int main()
+ {
+   int u = 1 + (cond ? p->s : 0);
+   return u - v;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr124132.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr124132.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr124132.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr124132.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-w" } */
+ 
+ char slow_mul1_dst1, code_some_shards___gf_mulc__0, code_some_shards_lim;
+ long slow_mul1_dst_max;
+ long long code_some_shards_pos;
+ void code_some_shards()
+ {
+   char *dst = &slow_mul1_dst1;
+   for (; dst < &code_some_shards_lim; dst++)
+     {
+       if (code_some_shards_pos < slow_mul1_dst_max)
+         *dst = code_some_shards___gf_mulc__0;
+       code_some_shards_pos += 1;
+     }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr124555.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr124555.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr124555.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr124555.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-additional-options "-fwrapv" } */
+ 
+ int vsad8_c_y;
+ char *vsad8_c_s1, *vsad8_c_s2;
+ long vsad8_c_stride;
+ int vsad8_c()
+ {
+   int score, x;
+   for (; vsad8_c_y; vsad8_c_y++)
+     {
+       x = 0;
+       for (; x < 8; x++)
+ 	score += (vsad8_c_s1[x] - vsad8_c_s2[x] - vsad8_c_s1[x + vsad8_c_stride]
+ 	    + vsad8_c_s2[x + vsad8_c_stride]) >= 0
+ 	    ? vsad8_c_s1[x] - vsad8_c_s2[x] -
+ 	    vsad8_c_s1[x + vsad8_c_stride] +
+ 	    vsad8_c_s2[x + vsad8_c_stride]
+ 	    : -(vsad8_c_s1[x] - vsad8_c_s2[x] -
+ 		vsad8_c_s1[x + vsad8_c_stride] +
+ 		vsad8_c_s2[x + vsad8_c_stride]);
+       vsad8_c_s1 += vsad8_c_stride;
+       vsad8_c_s2 += vsad8_c_stride;
+     }
+   return score;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr124868.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr124868.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr124868.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr124868.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ /* { dg-additional-options "-fisolate-erroneous-paths-dereference" } */
+ 
+ int a;
+ static void __attribute__((noipa)) c(int b) {}
+ static int * __attribute__((noipa))
+ d()
+ {
+   int g = 0, *h = &g;
+   if (a)
+     {
+       int **i = &h;
+       *i = 0;
+     }
+   c(*h);
+   return h; /* { dg-warning "address of local variable" } */
+ }
+ int
+ main()
+ {
+   d();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr125025.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr125025.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr125025.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr125025.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fsanitize=undefined" } */
+ 
+ void f2(signed char a0)
+ {
+   signed char v4;
+   _Bool c7;
+   signed char v8 = 91;
+   v4 = v8 + v8;
+   v8 = 15 - 50;
+   a0 = v8 * v4;
+   v8 = v4 - a0;
+ lbl_br10:
+   c7 = a0 <= 0;
+   if (c7)
+     return;
+   v4 = v8 - 24;
+   a0 = a0 + v4;
+   goto lbl_br10;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr125774-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr125774-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/pr125774-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/pr125774-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
+ /* PR tree-optimization/125774 */
+ 
+ __attribute__((noipa))
+ _Bool __GIMPLE (ssa,startwith("dom2"))
+ f (int a, int b)
+ {
+   _Bool _3;
+   _Bool _4;
+   _Bool _5;
+ 
+   __BB(2):
+   _3 = a_1(D) > b_2(D);
+   _4 = b_2(D) > a_1(D);
+   _5 = _3 | _4;
+   return _5;
+ }
+ 
+ __attribute__((noipa))
+ _Bool __GIMPLE (ssa,startwith("dom2"))
+ f1 (int a, int b)
+ {
+   _Bool _3;
+   _Bool _4;
+   _Bool _5;
+ 
+   __BB(2):
+   _3 = a_1(D) > b_2(D);
+   _4 = a_1(D) < b_2(D);
+   _5 = _3 | _4;
+   return _5;
+ }
+ 
+ int main()
+ {
+   int a = 10, b = 10;
+   if (f(a,b))
+     __builtin_abort();
+   if (f1(a,b))
+     __builtin_abort();
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "return 1" "optimized" } } */
+ /* Both functions should be optimized to `a_1 != b_2`. */
+ /* { dg-final { scan-tree-dump-times "a_1.D. != b_2.D." 2 "optimized" { target __OPTIMIZE__ } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/torture/vec-cvt-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/vec-cvt-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/torture/vec-cvt-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/torture/vec-cvt-1.c	Fri Jun 19 06:51:04 2026
*************** flttointtest##intt (void)						\
*** 55,76 ****
    else									\
      {									\
        vf2 = fltmin = min - 1.0f;					\
!       for (vf = 1.0f; (fltmin = vf2 + vf) == vf2; vf = vf * 2.0f)	\
  	;								\
      }									\
    vf2 = fltmax = max + 1.0f;						\
!   for (vf = 1.0f; (fltmax = vf2 - vf) == vf2; vf = vf * 2.0f)		\
      ;									\
    if (min == 0)								\
      dblmin = 0.0;							\
    else									\
      {									\
        vd2 = dblmin = min - 1.0;						\
!       for (vd = 1.0; (dblmin = vd2 + vd) == vd2; vd = vd * 2.0)		\
  	;								\
      }									\
    vd2 = dblmax = max + 1.0;						\
!   for (vd = 1.0; (dblmax = vd2 - vd) == vd2; vd = vd * 2.0)		\
      ;									\
    for (i = 0; i < N; i++)						\
      {									\
--- 55,76 ----
    else									\
      {									\
        vf2 = fltmin = min - 1.0f;					\
!       for (vf = 1.0f; fltmin = vf2 + vf, fltmin == vf2; vf = vf * 2.0f)	\
  	;								\
      }									\
    vf2 = fltmax = max + 1.0f;						\
!   for (vf = 1.0f; fltmax = vf2 - vf, fltmax == vf2; vf = vf * 2.0f)	\
      ;									\
    if (min == 0)								\
      dblmin = 0.0;							\
    else									\
      {									\
        vd2 = dblmin = min - 1.0;						\
!       for (vd = 1.0; dblmin = vd2 + vd, dblmin == vd2; vd = vd * 2.0)	\
  	;								\
      }									\
    vd2 = dblmax = max + 1.0;						\
!   for (vd = 1.0; dblmax = vd2 - vd, dblmax == vd2; vd = vd * 2.0)	\
      ;									\
    for (i = 0; i < N; i++)						\
      {									\
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c	Fri Jun 19 06:51:04 2026
*************** int main ()
*** 32,36 ****
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* pru-*-* } } } } } */
  /* IBM Z does not require special alignment for vectorization.  */
! /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { avr-*-* pru-*-* s390*-*-* } } } } } */
! /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { avr-*-* pru-*-* s390*-*-* } } } } } */
--- 32,36 ----
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* pru-*-* } } } } } */
  /* IBM Z does not require special alignment for vectorization.  */
! /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { arm*-*-* avr-*-* pru-*-* s390*-*-* } } } } } */
! /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { arm*-*-* avr-*-* pru-*-* s390*-*-* } } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c	Fri Jun 19 06:51:04 2026
*************** int main (void)
*** 39,43 ****
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* pru-*-* } } } } } */
  /* IBM Z does not require special alignment for vectorization.  */
! /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { avr-*-* pru-*-* s390*-*-* } } } } } */
! /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { avr-*-* pru-*-* s390*-*-* } } } } } */
--- 39,43 ----
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* pru-*-* } } } } } */
  /* IBM Z does not require special alignment for vectorization.  */
! /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { arm*-*-* avr-*-* pru-*-* s390*-*-* } } } } } */
! /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { arm*-*-* avr-*-* pru-*-* s390*-*-* } } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-options "-O1" } */
+ 
+ struct s4 {
+     int _0;
+ };
+ struct s1 {
+     unsigned char _4;
+     long _1;
+ };
+ struct s2 {
+     union {
+         struct s3 {
+             unsigned char _1;
+             struct s4 _0;
+         } var_0;
+         struct s1 var_1;
+     } DATA;
+ };
+ int f1(int arg0) { return arg0 > 12345; }
+ __attribute__((noinline))
+ struct s4 f2(int arg0) {
+     struct s4 rv = {arg0};
+     return rv;
+ }
+ struct s2 f3(int arg0) {
+     struct s2 rv;
+     struct s1 var6 = {0};
+     struct s4 var7;
+     if (f1(arg0)) {
+         rv.DATA.var_1 = var6;
+         return rv;
+     } else {
+         rv.DATA.var_0._1 = 2;
+         var7 = f2(arg0);
+         rv.DATA.var_0._0 = var7;
+         return rv;
+     }
+ }
+ int main() {
+   if (f3(12345).DATA.var_0._0._0 == 12345)
+     ;
+   else
+     __builtin_abort();
+   if (f3(12344).DATA.var_0._0._0 == 12344)
+     ;
+   else
+     __builtin_abort();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr119085.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr119085.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr119085.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr119085.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do run } */
+ /* { dg-options "-O1" } */
+ 
+ struct with_hole {
+   int x;
+   long y;
+ };
+ struct without_hole {
+   int x;
+   int y;
+ };
+ union u {
+   struct with_hole with_hole;
+   struct without_hole without_hole;
+ };
+ 
+ void __attribute__((noinline))
+ test (union u *up, union u u)
+ {
+   union u u2;
+   volatile int f = 0;
+   u2 = u;
+   if (f)
+     u2.with_hole = u.with_hole;
+   *up = u2;
+ }
+ 
+ int main(void)
+ {
+   union u u;
+   union u u2;
+   u2.without_hole.y = -1;
+   test (&u, u2);
+   if (u.without_hole.y != -1)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr122976.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr122976.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr122976.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr122976.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,105 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ typedef unsigned long NI;
+ 
+ struct inner_t_Content
+ {
+   int x[8], y[16];
+   char a[10], b[20], c[30];
+ };
+ 
+ struct inner_t {
+   NI len;
+   struct inner_t_Content* p;
+ };
+ 
+ struct outer_t {
+   struct inner_t bytes;
+   NI position;
+ };
+ 
+ struct localo_t {
+   struct outer_t fo;
+   char stuff[222];
+ };
+ 
+ struct alien_t {
+   NI Field0;
+   struct inner_t Field1;
+ };
+ 
+ static struct inner_t_Content gic;
+ struct inner_t gis;
+ struct outer_t gos;
+ volatile int vgi;
+ 
+ int __attribute__((noipa))
+ get_int (void)
+ {
+   return 0;
+ }
+ 
+ struct inner_t __attribute__((noipa))
+ get_inner_t ()
+ {
+   struct inner_t v = {0, (void *)0};
+   return v;
+ }
+ 
+ void __attribute__((noipa))
+ use_inner_t (struct inner_t v)
+ {
+   gis = v;
+ }
+ 
+ void __attribute__((noipa))
+ init (void)
+ {
+   gos.bytes.len = 15;
+   gos.bytes.p = &gic;
+ }
+ 
+ void __attribute__((noipa))
+ check (void)
+ {
+   if (gis.p != &gic)
+     __builtin_abort ();
+ }
+ 
+ static void foo (int m, struct outer_t *a)
+ {
+   struct inner_t lis;
+ 
+   if (m == 20)
+       ((struct alien_t *) a)->Field1.len = 0;
+   if (m == 21)
+     lis = get_inner_t ();
+   else
+     lis = a->bytes;
+ 
+   vgi = get_int ();
+   if (m < 1)
+     use_inner_t (lis);
+   if (get_int ())
+     vgi = ((struct alien_t *) a)->Field1.len;
+ 
+ }
+ 
+ void bar (struct outer_t pos)
+ {
+   struct localo_t los;
+   los.fo = pos;
+   los.fo.bytes.len = get_int ();
+   foo (get_int (), &los.fo);
+   gos = los.fo;
+ }
+ 
+ int main (int argc, char **argv)
+ {
+   init ();
+   for (int i = 0; i <= get_int (); i++)
+     bar (gos);
+   check ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ 
+ typedef struct {
+   _Bool : 1;
+ } Http2Identifier;
+ typedef struct {
+   _Bool is_end;
+   Http2Identifier identifier;
+ } Http2DataFrame;
+ typedef struct {
+   Http2Identifier identifier;
+   _Bool end_headers;
+ } Http2ContinuationFrame;
+ typedef struct {
+   union {
+     Http2DataFrame data;
+     Http2ContinuationFrame continuation;
+   };
+ } Http2Frame;
+ typedef struct {
+   Http2Identifier stream_identifier;
+ } Http2RawHeader;
+ Http2RawHeader parse_http2_continuation_frame_http2_raw_header;
+ Http2Frame gh2f;
+ void http2_send_and_receive_preface() {
+   Http2ContinuationFrame continuation_frame = {
+       parse_http2_continuation_frame_http2_raw_header.stream_identifier, 0};
+   Http2Frame frame = {.continuation = continuation_frame};
+   gh2f = frame;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-26.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-26.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-26.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-26.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -fdump-tree-lim2-details" } */
+ 
+ void foo (int n, int m, int *a, int *p, int * __restrict q)
+ {
+   for (int i = 0; i < n; ++i)
+     {
+       int j = 0;
+       do
+         {
+           q[j] = *a * p[i];
+         }
+       while (++j < m);
+     }
+ }
+ 
+ /* Verify we can hoist *a two levels.  */ 
+ /* { dg-final { scan-tree-dump-times "out of loop 1" 1 "lim2" } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/ubsan/pr120837.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/ubsan/pr120837.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/ubsan/pr120837.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/ubsan/pr120837.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,32 ----
+ /* PR c/120837 */
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fsanitize=undefined -fno-sanitize-recover=undefined" } */
+ 
+ [[gnu::noipa]] void
+ bar (void **x, void **y)
+ {
+   x[0] = 0;
+   x[1] = 0;
+   x[2] = 0;
+   y[0] = 0;
+   y[1] = 0;
+   y[2] = 0;
+   y[3] = 0;
+   y[4] = 0;
+ }
+ 
+ [[gnu::noipa]] void *
+ foo (int x, int y)
+ {
+   void *a[3];
+   void *b[5];
+   bar (a, b);
+   return (x > y ? b : a)[y - 1];
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (2, 1) != 0)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vec-perm-lower.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vec-perm-lower.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vec-perm-lower.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vec-perm-lower.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fgimple -O2 -Wno-psabi" } */
+ 
+ typedef char v8qi __attribute__ ((vector_size (8)));
+ typedef char v16qi __attribute__ ((vector_size (16)));
+ 
+ v16qi __GIMPLE (ssa)
+ foo (v8qi a, v8qi b)
+ {
+   v16qi _5;
+ 
+   __BB(2):
+   _5 = __VEC_PERM (a, b, _Literal (unsigned char [[gnu::vector_size(16)]]) { _Literal (unsigned char) 0, _Literal (unsigned char) 16, _Literal (unsigned char) 1, _Literal (unsigned char) 17, _Literal (unsigned char) 2, _Literal (unsigned char) 18, _Literal (unsigned char) 3, _Literal (unsigned char) 19, _Literal (unsigned char) 4, _Literal (unsigned char) 20, _Literal (unsigned char) 5, _Literal (unsigned char) 21, _Literal (unsigned char) 6, _Literal (unsigned char) 22, _Literal (unsigned char) 7, _Literal (unsigned char) 23 });
+   return _5;
+ 
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/pr120817.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/pr120817.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/pr120817.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/pr120817.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-additional-options "-O1" } */
+ /* { dg-require-effective-target aarch64_sve_hw { target aarch64*-*-* } } */
+ /* { dg-additional-options "-march=armv8-a+sve -mtune=neoverse-n2" { target aarch64*-*-* } } */
+ 
+ #include "tree-vect.h"
+ 
+ typedef struct {
+     int _M_current;
+ } __normal_iterator;
+ 
+ typedef struct {
+     char _M_elems[5];
+ } array_5;
+ 
+ __normal_iterator __trans_tmp_1 = {-5};
+ 
+ __attribute__((noipa))
+ array_5 copySourceIntoTarget() {
+     array_5 target;
+     char* target_it = target._M_elems;
+ 
+     while (__trans_tmp_1._M_current != 0) {
+         *target_it = 1;
+         __trans_tmp_1._M_current++;
+         target_it++;
+     }
+ 
+     return target;
+ }
+ 
+ int main ()
+ {
+   check_vect ();
+ 
+   array_5 res = copySourceIntoTarget();
+ 
+ #pragma GCC novector
+   for (int i = 0; i < 5; i++)
+     if (res._M_elems[i] != 1)
+       __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/pr121059.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/pr121059.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/pr121059.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/pr121059.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 --param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-march=x86-64-v4" { target avx512f } } */
+ 
+ typedef struct {
+   long left, right, top, bottom;
+ } MngBox;
+ typedef struct {
+   MngBox object_clip[6];
+   char exists[256], frozen[];
+ } MngReadInfo;
+ MngReadInfo mng_info;
+ 
+ long ReadMNGImage_i;
+ 
+ void ReadMNGImage(int ReadMNGImage_i)
+ {
+   for (; ReadMNGImage_i < 256; ReadMNGImage_i++)
+     if (mng_info.exists[ReadMNGImage_i] && mng_info.frozen[ReadMNGImage_i])
+       mng_info.object_clip[ReadMNGImage_i].left =
+           mng_info.object_clip[ReadMNGImage_i].right =
+               mng_info.object_clip[ReadMNGImage_i].top =
+                   mng_info.object_clip[ReadMNGImage_i].bottom = 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c	Fri Jun 19 06:51:04 2026
***************
*** 3,8 ****
--- 3,9 ----
  
  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
  /* { dg-require-effective-target vect_float } */
+ /* { dg-require-effective-target vect_early_break_hw } */
  /* { dg-add-options vect_early_break } */
  
  #include "tsvc.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c	Fri Jun 19 06:51:04 2026
***************
*** 3,8 ****
--- 3,9 ----
  
  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
  /* { dg-require-effective-target vect_float } */
+ /* { dg-require-effective-target vect_early_break_hw } */
  /* { dg-add-options vect_early_break } */
  
  #include "tsvc.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c	Fri Jun 19 06:51:04 2026
***************
*** 3,8 ****
--- 3,9 ----
  
  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
  /* { dg-require-effective-target vect_float } */
+ /* { dg-require-effective-target vect_early_break_hw } */
  /* { dg-add-options vect_early_break } */
  
  #include "tsvc.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-early-break_136-pr120357.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-early-break_136-pr120357.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-early-break_136-pr120357.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-early-break_136-pr120357.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-add-options vect_early_break } */
+ /* { dg-additional-options "-O3" } */
+ 
+ char a;
+ unsigned long long t[2][22];
+ int u[22];
+ void f(void)
+ {
+   for (int v = 0; v < 22; v++)
+     for (_Bool w = 0; w < (u[v] < 0) + 1; w = 1)
+       a *= 0 != t[w][v];
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmax-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmax-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmax-2.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmax-2.c	Fri Jun 19 06:51:04 2026
***************
*** 1,4 ****
! /* { dg-require-effective-target vect_float } */
  
  #define TYPE double
  #define FN __builtin_fmax
--- 1,4 ----
! /* { dg-require-effective-target vect_double } */
  
  #define TYPE double
  #define FN __builtin_fmax
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmax-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmax-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmax-3.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmax-3.c	Fri Jun 19 06:51:04 2026
***************
*** 1,4 ****
! /* { dg-require-effective-target vect_float } */
  
  #include "tree-vect.h"
  
--- 1,4 ----
! /* { dg-require-effective-target vect_double } */
  
  #include "tree-vect.h"
  
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmin-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmin-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmin-2.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmin-2.c	Fri Jun 19 06:51:04 2026
***************
*** 1,4 ****
! /* { dg-require-effective-target vect_float } */
  
  #ifndef TYPE
  #define TYPE double
--- 1,4 ----
! /* { dg-require-effective-target vect_double } */
  
  #ifndef TYPE
  #define TYPE double
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmin-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmin-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-fmin-3.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-fmin-3.c	Fri Jun 19 06:51:04 2026
***************
*** 1,4 ****
! /* { dg-require-effective-target vect_float } */
  
  #include "tree-vect.h"
  
--- 1,4 ----
! /* { dg-require-effective-target vect_double } */
  
  #include "tree-vect.h"
  
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-pr122793.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-pr122793.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-pr122793.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-pr122793.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-additional-options "-msse4" { target sse4_runtime } } */
+ 
+ #include "tree-vect.h"
+ 
+ static void
+ foo (unsigned char *d, unsigned char *s, int e, int f)
+ {
+   for (int i = 0; i < 4; i++)
+     {
+       d[0] = s[-2];
+       d[5] = (s[5] + s[6]) * 2 - (s[4] + s[7]);
+       d[6] = (s[6] + s[7]) * 2 - (s[5] + s[8]);
+       d[7] = (s[7] + s[8]) * 2 - (s[6] + s[9]);
+       d += e;
+       s += f;
+     }
+ }
+ 
+ unsigned char s[128] = { 2 }, d[128];
+ 
+ int
+ main ()
+ {
+   check_vect ();
+   foo (d, s + 2, 16, 16);
+   if (d[5] != 0)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-pr124677.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-pr124677.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-pr124677.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-pr124677.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 -fno-tree-copy-prop" } */
+ 
+ int printf(const char *, ...);
+ int a, b, c, d, e;
+ int g(int h) { return h >> a; }
+ int main()
+ {
+   int j = c;
+   while (a)
+     while (1)
+       {
+ 	while (1)
+ 	  {
+ 	    for (e = 0; e < 16; e++)
+ 	      {
+ 		d = b;
+ 		j && (b = g(2));
+ 	      }
+ 	    break;
+ 	  }
+ 	printf("%d\n", b);
+       }
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-additional-options "-mavx2" { target avx2_runtime } } */
+ 
+ #include "tree-vect.h"
+ 
+ #define B 0
+ #define G 1
+ #define R 2
+ 
+ int red = 153;
+ int green = 66;
+ int blue = 187;
+ 
+ static void __attribute__((noipa))
+ sub_left_prediction_bgr32(int *restrict dst, int *restrict src)
+ {
+   for (int i = 0; i < 8; i++) {
+     int rt = src[i * 3 + R];
+     int gt = src[i * 3 + G];
+     int bt = src[i * 3 + B];
+ 
+     dst[i * 3 + R] = rt - red;
+     dst[i * 3 + G] = gt - green;
+     dst[i * 3 + B] = bt - blue;
+ 
+     red = rt;
+     green = gt;
+     blue = bt;
+   }
+ }
+ 
+ int main()
+ {
+   int dst[8*3];
+   int src[8*3] = { 160, 73, 194, 17, 33, 99, 0, 12, 283, 87, 73, 11,
+ 		   9, 7, 1, 23, 19, 13, 77, 233, 97, 78, 2, 5 };
+   int dst2[8*3] = {-27, 7, 41, -143, -40, -95, -17, -21, 184, 87, 61,
+       -272, -78, -66, -10, 14, 12, 12, 54, 214, 84, 1, -231, -92};
+ 
+   check_vect ();
+ 
+   sub_left_prediction_bgr32(dst, src);
+ 
+ #pragma GCC novector
+   for (int i = 0; i < 8*3; ++i)
+     if (dst[i] != dst2[i])
+       __builtin_abort();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256.c
*** gcc-14.3.0/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.dg/vect/vect-recurr-pr121256.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-additional-options "-mavx2" { target avx2_runtime } } */
+ 
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <stdlib.h>
+ #include "tree-vect.h"
+ 
+ #define B 0
+ #define G 1
+ #define R 2
+ #define A 3
+ 
+ int red = 153;
+ int green = 66;
+ int blue = 187;
+ int alpha = 255;
+ 
+ static void __attribute__((noipa))
+ sub_left_prediction_bgr32(uint8_t *restrict dst, uint8_t *restrict src, int w)
+ {
+   for (int i = 0; i < 8; i++) {
+     int rt = src[i * 4 + R];
+     int gt = src[i * 4 + G];
+     int bt = src[i * 4 + B];
+     int at = src[i * 4 + A];
+ 
+     dst[i * 4 + R] = rt - red;
+     dst[i * 4 + G] = gt - green;
+     dst[i * 4 + B] = bt - blue;
+     dst[i * 4 + A] = at - alpha;
+ 
+     red = rt;
+     green = gt;
+     blue = bt;
+     alpha = at;
+   }
+ }
+ 
+ int main()
+ {
+   check_vect ();
+ 
+   uint8_t *dst = calloc(36, sizeof(uint8_t));
+   uint8_t *src = calloc(36, sizeof(uint8_t));
+ 
+   src[R] = 160;
+   src[G] = 73;
+   src[B] = 194;
+   src[A] = 255;
+ 
+   sub_left_prediction_bgr32(dst, src, 33);
+   if (dst[R] != 7 || dst[B] != 7 || dst[A] != 0)
+     __builtin_abort();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c	Fri Jun 19 06:51:04 2026
*************** readwrite_armv8p9a_sysregs ()
*** 74,80 ****
    a = __arm_rsr64 ("pmicfiltr_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c9_c6_0" } } */
    a = __arm_rsr64 ("pmicntr_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c9_c4_0" } } */
    a = __arm_rsr64 ("pmicntsvr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s2_0_c14_c12_0" } } */
!   a = __arm_rsr64 ("pmsdsfr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_4_c9_c10_4" } } */
    a = __arm_rsr64 ("pmsscr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c13_3" } } */
    a = __arm_rsr64 ("pmuacr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c14_4" } } */
    a = __arm_rsr64 ("por_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c10_c2_4" } } */
--- 74,80 ----
    a = __arm_rsr64 ("pmicfiltr_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c9_c6_0" } } */
    a = __arm_rsr64 ("pmicntr_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c9_c4_0" } } */
    a = __arm_rsr64 ("pmicntsvr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s2_0_c14_c12_0" } } */
!   a = __arm_rsr64 ("pmsdsfr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c10_4" } } */
    a = __arm_rsr64 ("pmsscr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c13_3" } } */
    a = __arm_rsr64 ("pmuacr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c14_4" } } */
    a = __arm_rsr64 ("por_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c10_c2_4" } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ __attribute__((target("arch=armv9-a+sve")))
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 2 } }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVCount_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 2 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #pragma GCC target "+sve2+sme2"
+ 
+ void fun ()
+ {
+   volatile __SVBool_t pred;
+   volatile __SVCount_t count;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ #pragma GCC target "+sve"
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/aarch64-pch.exp gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/aarch64-pch.exp
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/aarch64-pch.exp	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/aarch64-pch.exp	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,52 ----
+ #  Regression driver checking precompiled header compatibility of acle headers.
+ #  Copyright (C) 2025 Free Software Foundation, Inc.
+ #  Contributed by ARM Ltd.
+ #
+ #  This file is part of GCC.
+ #
+ #  GCC is free software; you can redistribute it and/or modify it
+ #  under the terms of the GNU General Public License as published by
+ #  the Free Software Foundation; either version 3, or (at your option)
+ #  any later version.
+ #
+ #  GCC is distributed in the hope that it will be useful, but
+ #  WITHOUT ANY WARRANTY; without even the implied warranty of
+ #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ #  General Public License for more details.
+ #
+ #  You should have received a copy of the GNU General Public License
+ #  along with GCC; see the file COPYING3.  If not see
+ #  <http://www.gnu.org/licenses/>.  */
+ 
+ # GCC testsuite checking acle headers can be included in precompiled headers
+ # that uses the `dg.exp' driver.
+ 
+ # Exit immediately if this isn't an AArch64 target.
+ if {![istarget aarch64*-*-*] } then {
+   return
+ }
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
+ load_lib dg-pch.exp
+ load_lib torture-options.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ torture-init
+ set-torture-options $DG_TORTURE_OPTIONS
+ pch-init
+ 
+ set arch_flags "-march=armv8.5-a+sve2+sme"
+ set old_dg_do_what_default "${dg-do-what-default}"
+ # Main loop.
+ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
+   global torture_without_loops
+   dg-flags-pch $subdir $test $arch_flags \
+   	[concat [list {-O0 -g}] $torture_without_loops] ".h"
+ }
+ 
+ # All done.
+ pch-finish
+ torture-finish
+ dg-finish
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #include "pch_arm_acle.h"
+ 
+ uint32_t ror(uint32_t a, uint32_t b)
+ {
+   return __ror(a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_acle.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ #include "pch_arm_acle_include_post.h"
+ #include <arm_acle.h>
+ 
+ uint32_t ror(uint32_t a, uint32_t b)
+ {
+   return __ror(a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_acle_include_post.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_acle.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #include "pch_arm_multiple.h"
+ 
+ svint32_t add_vectors(svint32_t a, svint32_t b)
+ {
+   return svadd_s32_z(svptrue_b32(), a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #pragma once
+ #include <arm_sme.h>
+ #include <arm_sve.h>
+ #include <arm_neon_sve_bridge.h>
+ #include <arm_neon.h>
+ #include <arm_acle.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,11 ----
+ #include "pch_arm_multiple_include_post.h"
+ #include <arm_sme.h>
+ #include <arm_sve.h>
+ #include <arm_neon_sve_bridge.h>
+ #include <arm_neon.h>
+ #include <arm_acle.h>
+ 
+ svint32_t add_vectors(svint32_t a, svint32_t b)
+ {
+   return svadd_s32_z(svptrue_b32(), a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_multiple_include_post.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #pragma once
+ #include <arm_sme.h>
+ #include <arm_sve.h>
+ #include <arm_neon_sve_bridge.h>
+ #include <arm_neon.h>
+ #include <arm_acle.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #include "pch_arm_neon.h"
+ 
+ uint32x4_t add_vectors(uint32x4_t a, uint32x4_t b)
+ {
+   return vaddq_u32(a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_neon.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ #include "pch_arm_neon_include_post.h"
+ #include "arm_neon.h"
+ 
+ uint32x4_t add_vectors(uint32x4_t a, uint32x4_t b)
+ {
+   return vaddq_u32(a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_include_post.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_neon.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #include "pch_arm_neon_sve_bridge.h"
+ 
+ svint8_t set(svint8_t a, int8x16_t b)
+ {
+   return svset_neonq(a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_neon_sve_bridge.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ #include "pch_arm_neon_sve_bridge_include_post.h"
+ #include <arm_neon_sve_bridge.h>
+ 
+ svint8_t set(svint8_t a, int8x16_t b)
+ {
+   return svset_neonq(a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_neon_sve_bridge_include_post.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_neon_sve_bridge.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #include "pch_arm_sme.h"
+ 
+ void st(svbool_t pg, void *ptr, uint32_t slice_base) 
+   __arm_streaming __arm_inout("za"){
+   svst1_hor_za8(0, slice_base, pg, ptr);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_sme.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ #include "pch_arm_sme_include_post.h"
+ #include <arm_sme.h>
+ 
+ void st(svbool_t pg, void *ptr, uint32_t slice_base) 
+   __arm_streaming __arm_inout("za"){
+   svst1_hor_za8(0, slice_base, pg, ptr);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sme_include_post.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_sme.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ #include "pch_arm_sve.h"
+ 
+ svint32_t add_vectors(svint32_t a, svint32_t b)
+ {
+   return svadd_s32_z(svptrue_b32(), a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_sve.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ #include "pch_arm_sve_include_post.h"
+ #include "arm_sve.h"
+ 
+ svint32_t add_vectors(svint32_t a, svint32_t b)
+ {
+   return svadd_s32_z(svptrue_b32(), a, b);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.hs gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.hs
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.hs	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pch/pch_arm_sve_include_post.hs	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,2 ----
+ #pragma once
+ #include <arm_sve.h>
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr121253.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr121253.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr121253.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr121253.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-options "-O" } */
+ 
+ struct s128 {
+     long a, b;
+ };
+ 
+ struct s128 foo(void) {
+     struct s128 ret;
+     asm("mov %0, #0 \n\t"
+         "mov %R0, #0 \n\t"
+         "mov x0, #12345"
+         : "=r" (ret) : : "x0");
+     return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not {mov x0, #0} } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr123285-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr123285-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr123285-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr123285-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3" } */
+ /* PR target/123285 */
+ 
+ #define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
+ 
+ /* f used to allocate v30 to either a or b and the inline-asm
+    would clobber the v30. */
+ [[gnu::noipa]]
+ BS_VEC(int, 8) f(BS_VEC(int, 8) a, BS_VEC(int, 8) b)
+ {
+   a+=b;
+   asm("movi v30.16b, 0":::"v30");
+   a+=b;
+   return a;
+ }
+ [[gnu::noipa]]
+ BS_VEC(int, 8) f1(BS_VEC(int, 8) a, BS_VEC(int, 8) b)
+ {
+   a+=b;
+   a+=b;
+   return a;
+ }
+ 
+ int main()
+ {
+   BS_VEC(int, 8) a = {0,1,2,3,4,5,6,7};
+   BS_VEC(int, 8) b = {8,9,10,11,12,13,14};
+   BS_VEC(int, 8) c0 = f(a,b);
+   BS_VEC(int, 8) c1 = f1(a,b);
+   for(int i=0;i<8;i++)
+   if ( c0[i] != c1[i] )
+     __builtin_abort ();
+ }
+ 
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr123294-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr123294-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr123294-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr123294-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ /* PR rtl-optimization/123294 */
+ 
+ #include <arm_neon.h>
+ 
+ typedef unsigned a;
+ int b;
+ a d() {
+   __attribute__((__vector_size__(4 * sizeof(a)))) a e[5];
+   if (0 > b) {
+     __attribute__((__vector_size__(8 * sizeof(a)))) a f = {b, b};
+     e[0] = __builtin_shufflevector(f, f, 0, 1, 2, 3);
+   }
+   while (vqadd_u64((uint64x1_t){3}, (uint64x1_t){0})[0])
+     ;
+   return e[0][3];
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr123548.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr123548.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr123548.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr123548.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_acle.h>
+ 
+ void
+ test (void *a)
+ {
+   __pldx (1, 1, 1, a);
+ }
+ /*
+ ** test:
+ **...
+ **	prfm\tPSTL2STRM, \[x[0-9]+\]
+ **...
+ **	ret
+ */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr125795.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr125795.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/pr125795.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/pr125795.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,47 ----
+ /* PR target/125795 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -funroll-loops" } */
+ 
+ /* This loop is vectorized with LD2 (deinterleave) and TBL (lane reversal),
+    then unrolled.  The unrolled body builds a full-width (32 FPR) early-ra
+    color group, which used to trigger a "1U << 32" undefined shift in
+    early_ra::allocate_colors.  As a result the long-lived TBL permute index
+    was wrongly allocated to the same FPR as an LD2 tuple destination and got
+    clobbered, so the result was miscomputed.  */
+ 
+ extern void abort (void);
+ 
+ #define N 256
+ 
+ static int __attribute__ ((noipa))
+ foo (void)
+ {
+   int k[N];
+   int k2[N];
+   int i;
+ 
+   for (i = 0; i < N; i++)
+     k2[i] = i;
+ 
+   for (i = 0; i < 64; i++)
+     {
+       k[i] = k2[2 * i + 0];
+       k[255 - i] = k2[2 * i + 1];
+       k[64 + i] = k2[2 * i + 128];
+       k[191 - i] = k2[2 * i + 129];
+     }
+ 
+   for (i = 0; i < N; i++)
+     if (k[i] != ((i < 128) ? (2 * i) : (511 - 2 * i)))
+       return 1;
+ 
+   return 0;
+ }
+ 
+ int
+ main (void)
+ {
+   if (foo ())
+     abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/simd/pr121749.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/simd/pr121749.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/simd/pr121749.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do assemble } */
+ /* { dg-options "-O2" } */
+ 
+ #include <arm_neon.h>
+ 
+ uint32_t
+ foo (uint64_t v0)
+ {
+   return vqshrnd_n_u64 (vshrd_n_u64 (v0, 26), 7);
+ }
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_bf16_m_tied1, svbfl
*** 22,30 ****
  
  /*
  ** revd_bf16_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_bf16_m_tied2, svbfloat16_t,
--- 22,29 ----
  
  /*
  ** revd_bf16_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_bf16_m_tied2, svbfloat16_t,
*************** TEST_UNIFORM_Z (revd_bf16_m_tied2, svbfl
*** 33,40 ****
  
  /*
  ** revd_bf16_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_bf16_m_untied, svbfloat16_t,
--- 32,39 ----
  
  /*
  ** revd_bf16_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_bf16_m_untied, svbfloat16_t,
*************** TEST_UNIFORM_Z (revd_bf16_x_tied1, svbfl
*** 67,74 ****
  
  /*
  ** revd_bf16_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_bf16_x_untied, svbfloat16_t,
--- 66,73 ----
  
  /*
  ** revd_bf16_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_bf16_x_untied, svbfloat16_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_f16_m_tied1, svfloa
*** 22,30 ****
  
  /*
  ** revd_f16_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f16_m_tied2, svfloat16_t,
--- 22,29 ----
  
  /*
  ** revd_f16_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f16_m_tied2, svfloat16_t,
*************** TEST_UNIFORM_Z (revd_f16_m_tied2, svfloa
*** 33,40 ****
  
  /*
  ** revd_f16_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f16_m_untied, svfloat16_t,
--- 32,39 ----
  
  /*
  ** revd_f16_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f16_m_untied, svfloat16_t,
*************** TEST_UNIFORM_Z (revd_f16_x_tied1, svfloa
*** 67,74 ****
  
  /*
  ** revd_f16_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f16_x_untied, svfloat16_t,
--- 66,73 ----
  
  /*
  ** revd_f16_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f16_x_untied, svfloat16_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_f32_m_tied1, svfloa
*** 22,30 ****
  
  /*
  ** revd_f32_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f32_m_tied2, svfloat32_t,
--- 22,29 ----
  
  /*
  ** revd_f32_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f32_m_tied2, svfloat32_t,
*************** TEST_UNIFORM_Z (revd_f32_m_tied2, svfloa
*** 33,40 ****
  
  /*
  ** revd_f32_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f32_m_untied, svfloat32_t,
--- 32,39 ----
  
  /*
  ** revd_f32_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f32_m_untied, svfloat32_t,
*************** TEST_UNIFORM_Z (revd_f32_x_tied1, svfloa
*** 67,74 ****
  
  /*
  ** revd_f32_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f32_x_untied, svfloat32_t,
--- 66,73 ----
  
  /*
  ** revd_f32_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f32_x_untied, svfloat32_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_f64_m_tied1, svfloa
*** 22,30 ****
  
  /*
  ** revd_f64_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f64_m_tied2, svfloat64_t,
--- 22,29 ----
  
  /*
  ** revd_f64_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f64_m_tied2, svfloat64_t,
*************** TEST_UNIFORM_Z (revd_f64_m_tied2, svfloa
*** 33,40 ****
  
  /*
  ** revd_f64_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f64_m_untied, svfloat64_t,
--- 32,39 ----
  
  /*
  ** revd_f64_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f64_m_untied, svfloat64_t,
*************** TEST_UNIFORM_Z (revd_f64_x_tied1, svfloa
*** 67,74 ****
  
  /*
  ** revd_f64_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_f64_x_untied, svfloat64_t,
--- 66,73 ----
  
  /*
  ** revd_f64_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_f64_x_untied, svfloat64_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_s16_m_tied1, svint1
*** 22,30 ****
  
  /*
  ** revd_s16_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s16_m_tied2, svint16_t,
--- 22,29 ----
  
  /*
  ** revd_s16_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s16_m_tied2, svint16_t,
*************** TEST_UNIFORM_Z (revd_s16_m_tied2, svint1
*** 33,40 ****
  
  /*
  ** revd_s16_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s16_m_untied, svint16_t,
--- 32,39 ----
  
  /*
  ** revd_s16_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s16_m_untied, svint16_t,
*************** TEST_UNIFORM_Z (revd_s16_x_tied1, svint1
*** 67,74 ****
  
  /*
  ** revd_s16_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s16_x_untied, svint16_t,
--- 66,73 ----
  
  /*
  ** revd_s16_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s16_x_untied, svint16_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_s32_m_tied1, svint3
*** 22,30 ****
  
  /*
  ** revd_s32_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s32_m_tied2, svint32_t,
--- 22,29 ----
  
  /*
  ** revd_s32_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s32_m_tied2, svint32_t,
*************** TEST_UNIFORM_Z (revd_s32_m_tied2, svint3
*** 33,40 ****
  
  /*
  ** revd_s32_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s32_m_untied, svint32_t,
--- 32,39 ----
  
  /*
  ** revd_s32_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s32_m_untied, svint32_t,
*************** TEST_UNIFORM_Z (revd_s32_x_tied1, svint3
*** 67,74 ****
  
  /*
  ** revd_s32_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s32_x_untied, svint32_t,
--- 66,73 ----
  
  /*
  ** revd_s32_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s32_x_untied, svint32_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_s64_m_tied1, svint6
*** 22,30 ****
  
  /*
  ** revd_s64_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s64_m_tied2, svint64_t,
--- 22,29 ----
  
  /*
  ** revd_s64_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s64_m_tied2, svint64_t,
*************** TEST_UNIFORM_Z (revd_s64_m_tied2, svint6
*** 33,40 ****
  
  /*
  ** revd_s64_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s64_m_untied, svint64_t,
--- 32,39 ----
  
  /*
  ** revd_s64_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s64_m_untied, svint64_t,
*************** TEST_UNIFORM_Z (revd_s64_x_tied1, svint6
*** 67,74 ****
  
  /*
  ** revd_s64_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s64_x_untied, svint64_t,
--- 66,73 ----
  
  /*
  ** revd_s64_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s64_x_untied, svint64_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s8.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s8.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s8.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s8.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_s8_m_tied1, svint8_
*** 22,30 ****
  
  /*
  ** revd_s8_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s8_m_tied2, svint8_t,
--- 22,29 ----
  
  /*
  ** revd_s8_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s8_m_tied2, svint8_t,
*************** TEST_UNIFORM_Z (revd_s8_m_tied2, svint8_
*** 33,40 ****
  
  /*
  ** revd_s8_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s8_m_untied, svint8_t,
--- 32,39 ----
  
  /*
  ** revd_s8_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s8_m_untied, svint8_t,
*************** TEST_UNIFORM_Z (revd_s8_x_tied1, svint8_
*** 67,74 ****
  
  /*
  ** revd_s8_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_s8_x_untied, svint8_t,
--- 66,73 ----
  
  /*
  ** revd_s8_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_s8_x_untied, svint8_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u16.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u16.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_u16_m_tied1, svuint
*** 22,30 ****
  
  /*
  ** revd_u16_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u16_m_tied2, svuint16_t,
--- 22,29 ----
  
  /*
  ** revd_u16_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u16_m_tied2, svuint16_t,
*************** TEST_UNIFORM_Z (revd_u16_m_tied2, svuint
*** 33,40 ****
  
  /*
  ** revd_u16_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u16_m_untied, svuint16_t,
--- 32,39 ----
  
  /*
  ** revd_u16_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u16_m_untied, svuint16_t,
*************** TEST_UNIFORM_Z (revd_u16_x_tied1, svuint
*** 67,74 ****
  
  /*
  ** revd_u16_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u16_x_untied, svuint16_t,
--- 66,73 ----
  
  /*
  ** revd_u16_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u16_x_untied, svuint16_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u32.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u32.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u32.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u32.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_u32_m_tied1, svuint
*** 22,30 ****
  
  /*
  ** revd_u32_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u32_m_tied2, svuint32_t,
--- 22,29 ----
  
  /*
  ** revd_u32_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u32_m_tied2, svuint32_t,
*************** TEST_UNIFORM_Z (revd_u32_m_tied2, svuint
*** 33,40 ****
  
  /*
  ** revd_u32_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u32_m_untied, svuint32_t,
--- 32,39 ----
  
  /*
  ** revd_u32_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u32_m_untied, svuint32_t,
*************** TEST_UNIFORM_Z (revd_u32_x_tied1, svuint
*** 67,74 ****
  
  /*
  ** revd_u32_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u32_x_untied, svuint32_t,
--- 66,73 ----
  
  /*
  ** revd_u32_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u32_x_untied, svuint32_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u64.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u64.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u64.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u64.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_u64_m_tied1, svuint
*** 22,30 ****
  
  /*
  ** revd_u64_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u64_m_tied2, svuint64_t,
--- 22,29 ----
  
  /*
  ** revd_u64_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u64_m_tied2, svuint64_t,
*************** TEST_UNIFORM_Z (revd_u64_m_tied2, svuint
*** 33,40 ****
  
  /*
  ** revd_u64_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u64_m_untied, svuint64_t,
--- 32,39 ----
  
  /*
  ** revd_u64_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u64_m_untied, svuint64_t,
*************** TEST_UNIFORM_Z (revd_u64_x_tied1, svuint
*** 67,74 ****
  
  /*
  ** revd_u64_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u64_x_untied, svuint64_t,
--- 66,73 ----
  
  /*
  ** revd_u64_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u64_x_untied, svuint64_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u8.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u8.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u8.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_u8.c	Fri Jun 19 06:51:04 2026
*************** TEST_UNIFORM_Z (revd_u8_m_tied1, svuint8
*** 22,30 ****
  
  /*
  ** revd_u8_m_tied2:
! **	mov	(z[0-9]+)\.d, z0\.d
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, \1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u8_m_tied2, svuint8_t,
--- 22,29 ----
  
  /*
  ** revd_u8_m_tied2:
! **	revd	z1\.q, p0/m, z0\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u8_m_tied2, svuint8_t,
*************** TEST_UNIFORM_Z (revd_u8_m_tied2, svuint8
*** 33,40 ****
  
  /*
  ** revd_u8_m_untied:
! **	movprfx	z0, z2
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u8_m_untied, svuint8_t,
--- 32,39 ----
  
  /*
  ** revd_u8_m_untied:
! **	revd	z2\.q, p0/m, z1\.q
! **	mov	z0.d, z2.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u8_m_untied, svuint8_t,
*************** TEST_UNIFORM_Z (revd_u8_x_tied1, svuint8
*** 67,74 ****
  
  /*
  ** revd_u8_x_untied:
! **	movprfx	z0, z1
! **	revd	z0\.q, p0/m, z1\.q
  **	ret
  */
  TEST_UNIFORM_Z (revd_u8_x_untied, svuint8_t,
--- 66,73 ----
  
  /*
  ** revd_u8_x_untied:
! **	revd	z1\.q, p0/m, z1\.q
! **	mov	z0.d, z1.d
  **	ret
  */
  TEST_UNIFORM_Z (revd_u8_x_untied, svuint8_t,
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c	Fri Jun 19 06:51:04 2026
***************
*** 1,5 ****
  // { dg-options "-O -fomit-frame-pointer -fno-optimize-sibling-calls -funwind-tables" }
! // { dg-final { check-function-bodies "**" "" } }
  
  void ns_callee ();
   void s_callee () [[arm::streaming]];
--- 1,5 ----
  // { dg-options "-O -fomit-frame-pointer -fno-optimize-sibling-calls -funwind-tables" }
! // { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {\t\.inst} } }
  
  void ns_callee ();
   void s_callee () [[arm::streaming]];
*************** sc_caller_x1 (int *ptr, int a) [[arm::st
*** 218,224 ****
  **	bl	ns_callee_stack
  **	ldr	x16, \[x29, #?16\]
  **	tbz	x16, 0, .*
! **	smstart	sm
  **	...
  */
  void
--- 218,224 ----
  **	bl	ns_callee_stack
  **	ldr	x16, \[x29, #?16\]
  **	tbz	x16, 0, .*
! **	.inst 0xd503437f // smstart sm
  **	...
  */
  void
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c	Fri Jun 19 06:51:04 2026
***************
*** 1,5 ****
  // { dg-options "-O -fomit-frame-pointer -fno-optimize-sibling-calls -funwind-tables -mtrack-speculation" }
! // { dg-final { check-function-bodies "**" "" } }
  
  void ns_callee ();
   void s_callee () [[arm::streaming]];
--- 1,6 ----
  // { dg-options "-O -fomit-frame-pointer -fno-optimize-sibling-calls -funwind-tables -mtrack-speculation" }
! // { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {\t\.inst} } }
! 
  
  void ns_callee ();
   void s_callee () [[arm::streaming]];
*************** sc_caller_x1 (int *ptr, int a) [[arm::st
*** 196,202 ****
  **	tst	x16, #?1
  **	beq	[^\n]*
  **	csel	x15, x15, xzr, ne
! **	smstart	sm
  **	...
  */
  void
--- 197,203 ----
  **	tst	x16, #?1
  **	beq	[^\n]*
  **	csel	x15, x15, xzr, ne
! **	.inst 0xd503437f // smstart sm
  **	...
  */
  void
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/pr121028.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/pr121028.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/pr121028.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/pr121028.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,46 ----
+ // PR121028
+ // { dg-do assemble { target aarch64_asm_sme_ok } }
+ // { dg-options "-O --save-temps" }
+ // { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {\t\.inst} } }
+ 
+ void ns_callee ();
+ 
+ /*
+ ** sc_caller_sme:
+ **	...
+ **	mrs	x16, svcr
+ **	str	x16, \[x29, #?16\]
+ **	ldr	x16, \[x29, #?16\]
+ **	tbz	x16, 0, .*
+ **	smstop	sm
+ **	bl	ns_callee
+ **	ldr	x16, \[x29, #?16\]
+ **	tbz	x16, 0, .*
+ **	smstart	sm
+ **	...
+ */
+ void sc_caller_sme() __arm_streaming_compatible
+ {
+     ns_callee ();
+ }
+ 
+ #pragma GCC target "+nosme"
+ 
+ /*
+ ** sc_caller_nosme:
+ **	...
+ **	bl	__arm_sme_state
+ **	str	x0, \[x29, #?16\]
+ **	ldr	x16, \[x29, #?16\]
+ **	tbz	x16, 0, .*
+ **	.inst 0xd503427f // smstop sm
+ **	bl	ns_callee
+ **	ldr	x16, \[x29, #?16\]
+ **	tbz	x16, 0, .*
+ **	.inst 0xd503437f // smstart sm
+ **	...
+ */
+ void sc_caller_nosme() __arm_streaming_compatible
+ {
+     ns_callee ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/pr121414_1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/pr121414_1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/pr121414_1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/pr121414_1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,27 ----
+ #pragma GCC target "+sme2"
+ 
+ void f1() __arm_streaming_compatible {}
+ void f2() __arm_streaming {}
+ void f3() __arm_in("za") {}
+ void f4() __arm_out("za") {}
+ void f5() __arm_inout("za") {}
+ void f6() __arm_in("zt0") {}
+ void f7() __arm_out("zt0") {}
+ void f8() __arm_inout("zt0") {}
+ 
+ __arm_locally_streaming void g1() {}
+ __arm_new("za") void g2() {}
+ __arm_new("zt0") void g3() {}
+ 
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf1\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf2\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf3\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf4\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf5\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf6\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf7\n} } } */
+ /* { dg-final { scan-assembler {\t\.variant_pcs\tf8\n} } } */
+ 
+ /* { dg-final { scan-assembler-not {\t\.variant_pcs\tg1\n} } } */
+ /* { dg-final { scan-assembler-not {\t\.variant_pcs\tg2\n} } } */
+ /* { dg-final { scan-assembler-not {\t\.variant_pcs\tg3\n} } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/sme-shrinkwrap.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/sme-shrinkwrap.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/sme-shrinkwrap.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/sme-shrinkwrap.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,78 ----
+ /* { dg-options "-O3 -fshrink-wrap -save-temps" } */
+ /* { dg-do run { target { aarch64_sme_hw && aarch64_sve_hw } } } */
+ /* { dg-do compile { target { ! { aarch64_sme_hw && aarch64_sve_hw } } } } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sme.h>
+ 
+ #pragma GCC target "+sve"
+ 
+ [[gnu::noipa]]
+ __arm_streaming
+ int callee (int x)
+ {
+   return 0;
+ }
+ 
+ /*
+ ** foo:
+ **	cbnz	w0, [^\n]*
+ **	cntd	x0
+ **	ret
+ **	...
+ */
+ __arm_streaming
+ int foo(int x)
+ {
+     if (x)
+         return callee(3);
+     return svcntd();
+ }
+ 
+ /*
+ ** bar:
+ **	...
+ **	smstart	[^\n]*
+ **	...
+ ** (
+ **	cntd	[^\n]*
+ **	...
+ **	cbn?z	[^\n]*
+ ** |
+ **	cbn?z	[^\n]*
+ **	...
+ **	cntd	[^\n]*
+ ** )
+ **	...
+ */
+ 
+ [[gnu::noipa]]
+ __arm_locally_streaming
+ int bar(int x)
+ {
+     if (x)
+         return callee(3);
+     return svcntd();
+ }
+ 
+ /*
+ ** baz:
+ **	cbnz	w0, [^\n]*
+ **	cntd	x0
+ **	ret
+ **	...
+ */
+ __arm_streaming
+ int baz(int x)
+ {
+     if (x)
+         return callee(3);
+     return svcntd();
+ }
+ 
+ int main()
+ {
+   if (bar(0) != svcntsd())
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,21 ----
+ // { dg-options "-O -fno-optimize-sibling-calls -fomit-frame-pointer" }
+ 
+ #include <arm_sme.h>
+ 
+ void callee();
+ 
+ __arm_new("za") __arm_locally_streaming int test()
+ {
+   svbool_t all = svptrue_b8();
+   svint8_t expected = svindex_s8(1, 1);
+   svwrite_hor_za8_m(0, 0, all, expected);
+ 
+   callee();
+ 
+   svint8_t actual = svread_hor_za8_m(svdup_s8(0), all, 0, 0);
+   return svptest_any(all, svcmpne(all, expected, actual));
+ }
+ 
+ // { dg-final { scan-assembler {\tbl\t__arm_tpidr2_save\n} } }
+ // { dg-final { scan-assembler {\tbl\t__arm_tpidr2_restore\n} } }
+ // { dg-final { scan-assembler-times {\tsmstart\tza\n} 2 } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-options "-O2 -msve-vector-bits=256" } */
+ 
+ #include <arm_sve.h>
+ typedef svbfloat16_t vls_bfloat16_t __attribute__((arm_sve_vector_bits(32 * 8)));
+ svbfloat16_t foo(vls_bfloat16_t a, vls_bfloat16_t b)
+ {
+   svbfloat16_t zero = svreinterpret_bf16_f32 (svdup_n_f32 (0.0f));
+   return svzip2_bf16(zero, svuzp1_bf16(a,b));
+ }
+ 
+ 
+ /* { dg-final { scan-assembler-times {\tuzp1\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tzip2\t} 1 } } */
+ /* { dg-final { scan-assembler-not {\ttbl\t} } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** test1:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	trn1	p0\.h, p[0-3]\.h, \1\.h
+ **	ret
+ */
+ svbool_t
+ test1 ()
+ {
+   return svtrn1_b16 (svptrue_b8 (), svptrue_b16 ());
+ }
+ 
+ /*
+ ** test2:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	trn1	p0\.h, \1\.h, p[0-3]\.h
+ **	ret
+ */
+ svbool_t
+ test2 ()
+ {
+   return svtrn1_b16 (svptrue_b16 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test3:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	trn1	p0\.s, p[0-3]\.s, \1\.s
+ **	ret
+ */
+ svbool_t
+ test3 ()
+ {
+   return svtrn1_b32 (svptrue_b8 (), svptrue_b32 ());
+ }
+ 
+ /*
+ ** test4:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	trn1	p0\.s, \1\.s, p[0-3]\.s
+ **	ret
+ */
+ svbool_t
+ test4 ()
+ {
+   return svtrn1_b32 (svptrue_b32 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test5:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	trn1	p0\.d, p[0-3]\.d, \1\.d
+ **	ret
+ */
+ svbool_t
+ test5 ()
+ {
+   return svtrn1_b64 (svptrue_b8 (), svptrue_b64 ());
+ }
+ 
+ /*
+ ** test6:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	trn1	p0\.d, \1\.d, p[0-3]\.d
+ **	ret
+ */
+ svbool_t
+ test6 ()
+ {
+   return svtrn1_b64 (svptrue_b64 (), svptrue_b8 ());
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_3.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_3.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_3.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** test1:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	trn2	p0\.h, p[0-3]\.h, \1\.h
+ **	ret
+ */
+ svbool_t
+ test1 ()
+ {
+   return svtrn2_b16 (svptrue_b8 (), svptrue_b16 ());
+ }
+ 
+ /*
+ ** test2:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	trn2	p0\.h, \1\.h, p[0-3]\.h
+ **	ret
+ */
+ svbool_t
+ test2 ()
+ {
+   return svtrn2_b16 (svptrue_b16 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test3:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	trn2	p0\.s, p[0-3]\.s, \1\.s
+ **	ret
+ */
+ svbool_t
+ test3 ()
+ {
+   return svtrn2_b32 (svptrue_b8 (), svptrue_b32 ());
+ }
+ 
+ /*
+ ** test4:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	trn2	p0\.s, \1\.s, p[0-3]\.s
+ **	ret
+ */
+ svbool_t
+ test4 ()
+ {
+   return svtrn2_b32 (svptrue_b32 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test5:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	trn2	p0\.d, p[0-3]\.d, \1\.d
+ **	ret
+ */
+ svbool_t
+ test5 ()
+ {
+   return svtrn2_b64 (svptrue_b8 (), svptrue_b64 ());
+ }
+ 
+ /*
+ ** test6:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	trn2	p0\.d, \1\.d, p[0-3]\.d
+ **	ret
+ */
+ svbool_t
+ test6 ()
+ {
+   return svtrn2_b64 (svptrue_b64 (), svptrue_b8 ());
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_4.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_4.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_4.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** test1:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	zip1	p0\.h, p[0-3]\.h, \1\.h
+ **	ret
+ */
+ svbool_t
+ test1 ()
+ {
+   return svzip1_b16 (svptrue_b8 (), svptrue_b16 ());
+ }
+ 
+ /*
+ ** test2:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	zip1	p0\.h, \1\.h, p[0-3]\.h
+ **	ret
+ */
+ svbool_t
+ test2 ()
+ {
+   return svzip1_b16 (svptrue_b16 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test3:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	zip1	p0\.s, p[0-3]\.s, \1\.s
+ **	ret
+ */
+ svbool_t
+ test3 ()
+ {
+   return svzip1_b32 (svptrue_b8 (), svptrue_b32 ());
+ }
+ 
+ /*
+ ** test4:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	zip1	p0\.s, \1\.s, p[0-3]\.s
+ **	ret
+ */
+ svbool_t
+ test4 ()
+ {
+   return svzip1_b32 (svptrue_b32 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test5:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	zip1	p0\.d, p[0-3]\.d, \1\.d
+ **	ret
+ */
+ svbool_t
+ test5 ()
+ {
+   return svzip1_b64 (svptrue_b8 (), svptrue_b64 ());
+ }
+ 
+ /*
+ ** test6:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	zip1	p0\.d, \1\.d, p[0-3]\.d
+ **	ret
+ */
+ svbool_t
+ test6 ()
+ {
+   return svzip1_b64 (svptrue_b64 (), svptrue_b8 ());
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_5.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_5.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_5.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_5.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** test1:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	zip2	p0\.h, p[0-3]\.h, \1\.h
+ **	ret
+ */
+ svbool_t
+ test1 ()
+ {
+   return svzip2_b16 (svptrue_b8 (), svptrue_b16 ());
+ }
+ 
+ /*
+ ** test2:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	zip2	p0\.h, \1\.h, p[0-3]\.h
+ **	ret
+ */
+ svbool_t
+ test2 ()
+ {
+   return svzip2_b16 (svptrue_b16 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test3:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	zip2	p0\.s, p[0-3]\.s, \1\.s
+ **	ret
+ */
+ svbool_t
+ test3 ()
+ {
+   return svzip2_b32 (svptrue_b8 (), svptrue_b32 ());
+ }
+ 
+ /*
+ ** test4:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	zip2	p0\.s, \1\.s, p[0-3]\.s
+ **	ret
+ */
+ svbool_t
+ test4 ()
+ {
+   return svzip2_b32 (svptrue_b32 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test5:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	zip2	p0\.d, p[0-3]\.d, \1\.d
+ **	ret
+ */
+ svbool_t
+ test5 ()
+ {
+   return svzip2_b64 (svptrue_b8 (), svptrue_b64 ());
+ }
+ 
+ /*
+ ** test6:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	zip2	p0\.d, \1\.d, p[0-3]\.d
+ **	ret
+ */
+ svbool_t
+ test6 ()
+ {
+   return svzip2_b64 (svptrue_b64 (), svptrue_b8 ());
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_6.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_6.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_6.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_6.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** test1:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	uzp1	p0\.h, p[0-3]\.h, \1\.h
+ **	ret
+ */
+ svbool_t
+ test1 ()
+ {
+   return svuzp1_b16 (svptrue_b8 (), svptrue_b16 ());
+ }
+ 
+ /*
+ ** test2:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	uzp1	p0\.h, \1\.h, p[0-3]\.h
+ **	ret
+ */
+ svbool_t
+ test2 ()
+ {
+   return svuzp1_b16 (svptrue_b16 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test3:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	uzp1	p0\.s, p[0-3]\.s, \1\.s
+ **	ret
+ */
+ svbool_t
+ test3 ()
+ {
+   return svuzp1_b32 (svptrue_b8 (), svptrue_b32 ());
+ }
+ 
+ /*
+ ** test4:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	uzp1	p0\.s, \1\.s, p[0-3]\.s
+ **	ret
+ */
+ svbool_t
+ test4 ()
+ {
+   return svuzp1_b32 (svptrue_b32 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test5:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	uzp1	p0\.d, p[0-3]\.d, \1\.d
+ **	ret
+ */
+ svbool_t
+ test5 ()
+ {
+   return svuzp1_b64 (svptrue_b8 (), svptrue_b64 ());
+ }
+ 
+ /*
+ ** test6:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	uzp1	p0\.d, \1\.d, p[0-3]\.d
+ **	ret
+ */
+ svbool_t
+ test6 ()
+ {
+   return svuzp1_b64 (svptrue_b64 (), svptrue_b8 ());
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_7.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_7.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_7.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/perm_7.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** test1:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	uzp2	p0\.h, p[0-3]\.h, \1\.h
+ **	ret
+ */
+ svbool_t
+ test1 ()
+ {
+   return svuzp2_b16 (svptrue_b8 (), svptrue_b16 ());
+ }
+ 
+ /*
+ ** test2:
+ **	...
+ **	ptrue	(p[0-3])\.h, all
+ **	...
+ **	uzp2	p0\.h, \1\.h, p[0-3]\.h
+ **	ret
+ */
+ svbool_t
+ test2 ()
+ {
+   return svuzp2_b16 (svptrue_b16 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test3:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	uzp2	p0\.s, p[0-3]\.s, \1\.s
+ **	ret
+ */
+ svbool_t
+ test3 ()
+ {
+   return svuzp2_b32 (svptrue_b8 (), svptrue_b32 ());
+ }
+ 
+ /*
+ ** test4:
+ **	...
+ **	ptrue	(p[0-3])\.s, all
+ **	...
+ **	uzp2	p0\.s, \1\.s, p[0-3]\.s
+ **	ret
+ */
+ svbool_t
+ test4 ()
+ {
+   return svuzp2_b32 (svptrue_b32 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** test5:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	uzp2	p0\.d, p[0-3]\.d, \1\.d
+ **	ret
+ */
+ svbool_t
+ test5 ()
+ {
+   return svuzp2_b64 (svptrue_b8 (), svptrue_b64 ());
+ }
+ 
+ /*
+ ** test6:
+ **	...
+ **	ptrue	(p[0-3])\.d, all
+ **	...
+ **	uzp2	p0\.d, \1\.d, p[0-3]\.d
+ **	ret
+ */
+ svbool_t
+ test6 ()
+ {
+   return svuzp2_b64 (svptrue_b64 (), svptrue_b8 ());
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr121118_1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr121118_1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr121118_1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr121118_1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-options "-O2 -msve-vector-bits=512" } */
+ 
+ typedef __SVBool_t fixed_bool __attribute__((arm_sve_vector_bits(512)));
+ 
+ #define TEST_CONST(NAME, CONST)						\
+   fixed_bool								\
+   NAME ()								\
+   {									\
+     union { unsigned long long i; fixed_bool pg; } u = { CONST };	\
+     return u.pg;							\
+   }
+ 
+ TEST_CONST (test1, 0x02aaaaaaaa)
+ TEST_CONST (test2, 0x0155555557)
+ TEST_CONST (test3, 0x0013333333333333ULL)
+ TEST_CONST (test4, 0x0011111111111113ULL)
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev_2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev_2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev_2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev_2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ #include <arm_sve.h>
+ 
+ svbool_t test1()
+ {
+   return svrev_b16 (svptrue_b16 ());
+ }
+ 
+ svbool_t test2()
+ {
+   return svrev_b32 (svptrue_b32 ());
+ }
+ 
+ svbool_t test3()
+ {
+   return svrev_b64 (svptrue_b64 ());
+ }
+ 
+ /* { dg-final { scan-assembler {\tptrue\tp[0-7]\.h} } } */
+ /* { dg-final { scan-assembler {\tptrue\tp[0-7]\.s} } } */
+ /* { dg-final { scan-assembler {\tptrue\tp[0-7]\.d} } } */
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.b} } } */
+ /* { dg-final { scan-assembler {\trev\tp0\.h} } } */
+ /* { dg-final { scan-assembler {\trev\tp0\.s} } } */
+ /* { dg-final { scan-assembler {\trev\tp0\.d} } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/permute_5.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/permute_5.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve/permute_5.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve/permute_5.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-options "-O -msve-vector-bits=256" } */
+ 
+ typedef __SVBfloat16_t vbfloat16 __attribute__((arm_sve_vector_bits(256)));
+ 
+ vbfloat16
+ foo (vbfloat16 x, vbfloat16 y)
+ {
+   return __builtin_shufflevector (x, y, 0, 2, 1, 3, 16, 19, 17, 18,
+ 				  8, 9, 10, 11, 23, 22, 21, 20);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,31 ----
+ /* PR target/121599.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ /*
+ ** foo:
+ **	movi?	[vdz]([0-9]+)\.?b?, #0
+ **	movprfx	z0\.b, p0/z, z0\.b
+ **	usqadd	z0\.b, p0/m, z0\.b, z\1\.b
+ **	ret
+ */
+ svuint8_t foo (svbool_t pg, svuint8_t op1)
+ {
+     return svsqadd_u8_z (pg, op1, svdup_s8 (0));
+ }
+ 
+ /*
+ ** bar:
+ **	movi?	[vdz]([0-9]+)\.?b?, #0
+ **	movprfx	z0\.b, p0/z, z0\.b
+ **	suqadd	z0\.b, p0/m, z0\.b, z\1\.b
+ **	ret
+ */
+ svint8_t bar (svbool_t pg, svint8_t op1)
+ {
+     return svuqadd_n_s8_z (pg, op1, 0);
+ }
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do run { target { aarch64_sve128_hw && aarch64_sve2_hw } } } */
+ /* { dg-additional-options "-O3 -march=armv9-a+sve2 -msve-vector-bits=128 --param aarch64-autovec-preference=sve-only" } */
+ 
+ int main(int argc, char *argv[]) {
+ 
+     __attribute__((vector_size((4) * sizeof(int)))) int i0;
+     __attribute__((vector_size((4) * sizeof(int)))) int i1;
+     __attribute__((vector_size((4) * sizeof(int)))) int ires;
+     int i;
+ 
+     i0 = (__attribute__((vector_size((4) * sizeof(int)))) int){(int)argc, 1, 2,
+                                                                10};
+     i1 = (__attribute__((vector_size((4) * sizeof(int)))) int){0, 3, 2,
+                                                                (int)-23};
+     ;
+     do {
+         ires = (i0 > i1);
+         do {
+             int __i;
+             for (__i = 0; __i < 4; __i++) {
+                 if ((ires)[__i] != ((i0)[__i] > (i1)[__i] ? -1 : 0)) {
+                     __builtin_printf("%i != (("
+                                      "%i"
+                                      " "
+                                      ">"
+                                      " "
+                                      "%i"
+                                      " ? -1 : 0) ",
+                                      (ires)[__i], (i0)[__i], (i1)[__i]);
+                     __builtin_abort();
+                 }
+             }
+         } while (0);
+     } while (0);
+ 
+     return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fchecking" } */
+ #include <arm_neon.h>
+ int16_t f(int16x4_t b) {
+   return vaddvq_s16(vcombine_s16(b, vdup_n_s16 (0)));
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr124491.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/torture/pr124491.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr124491.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/torture/pr124491.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=armv8.2-a+sve -msve-vector-bits=256" } */
+ #include <arm_sve.h>
+ svint64_t foo(long x, long y) {
+   return svdupq_n_s64(x, y);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr125621.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/torture/pr125621.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr125621.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/aarch64/torture/pr125621.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=armv8.2-a+sve -fsanitize=undefined" } */
+ #include <arm_sve.h>
+ 
+ long foo(long x) {
+   return (long)svcntd() * x;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c	Fri Jun 19 06:51:04 2026
***************
*** 8,14 ****
  /*
  **test_load_1:
  **	...
! **	vld1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
  */
  __fp16
--- 8,14 ----
  /*
  **test_load_1:
  **	...
! **	vldr.16	s[0-9]+, \[r[0-9]+\]
  **	...
  */
  __fp16
*************** test_load_1 (__fp16* a)
*** 20,26 ****
  /*
  **test_load_2:
  **	...
! **	vld1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
  */
  __fp16
--- 20,26 ----
  /*
  **test_load_2:
  **	...
! **	vldr.16	s[0-9]+, \[r[0-9]+\]
  **	...
  */
  __fp16
*************** test_load_2 (__fp16* a, int i)
*** 32,38 ****
  /*
  **test_store_1:
  **	...
! **	vst1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
  */
  void
--- 32,38 ----
  /*
  **test_store_1:
  **	...
! **	vstr.16	s[0-9]+, \[r[0-9]+\]
  **	...
  */
  void
*************** test_store_1 (__fp16* a, __fp16 b)
*** 44,50 ****
  /*
  **test_store_2:
  **	...
! **	vst1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
  */
  void
--- 44,50 ----
  /*
  **test_store_2:
  **	...
! **	vstr.16	s[0-9]+, \[r[0-9]+\]
  **	...
  */
  void
*************** test_store_2 (__fp16* a, int i, __fp16 b
*** 56,64 ****
  /*
  **test_load_store_1:
  **	...
! **	vld1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
! **	vst1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
  */
  __fp16
--- 56,64 ----
  /*
  **test_load_store_1:
  **	...
! **	vldr.16	s[0-9]+, \[r[0-9]+\]
  **	...
! **	vstr.16	s[0-9]+, \[r[0-9]+\]
  **	...
  */
  __fp16
*************** test_load_store_1 (__fp16* a, int i, __f
*** 70,78 ****
  /*
  **test_load_store_2:
  **	...
! **	vld1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
! **	vst1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
  **	...
  */
  __fp16
--- 70,78 ----
  /*
  **test_load_store_2:
  **	...
! **	vldr.16	s[0-9]+, \[r[0-9]+\, #4]
  **	...
! **	vstr.16	s[0-9]+, \[r[0-9]+\]
  **	...
  */
  __fp16
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/cbz-range.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/cbz-range.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/cbz-range.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/cbz-range.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,114 ----
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_arch_v7a_ok } */
+ /* { dg-options "-O -mthumb" } */
+ /* { dg-add-options arm_arch_v7a } */
+ 
+ #define f "movw r0, #0;movw r0, #0;movw r0, #0;"
+ #define f2 f f
+ #define f4 f2 f2
+ #define f8 f4 f4
+ #define f16 f8 f8
+ #define f32 f16 f16
+ #define f64 f32 f32
+ #define f128 f64 f64
+ #define f256 f128 f128
+ #define f512 f256 f256
+ #define f1024 f512 f512
+ #define f2048 f1024 f1024
+ #define f4096 f2048 f2048
+ #define f8192 f4096 f4096
+ #define f16384 f8192 f8192
+ #define f32768 f16384 f16384
+ #define f65536 f32768 f32768
+ #define f131072 f65536 f65536
+ int a;
+ 
+ int cbz1(int g)
+ {
+   if (g)
+     asm(f8);
+   return a;
+ }
+ 
+ int cbz2(int g)
+ {
+   asm ("": "+h"(g));
+   if (g)
+     asm(f8);
+   return a;
+ }
+ 
+ int cbz3(int g)
+ {
+   if (g)
+     asm(f16);
+   return a;
+ }
+ 
+ int cbz4(int g)
+ {
+   asm ("": "+h"(g));
+   if (g)
+     asm(f16);
+   return a;
+ }
+ 
+ int cbz5(int g)
+ {
+   if (g)
+     asm(f131072);
+   return a;
+ }
+ 
+ int cbz6(int g)
+ {
+   asm ("": "+h"(g));
+   if (g)
+     asm(f131072);
+   return a;
+ }
+ 
+ int cbnz1(int g)
+ {
+   if (!g)
+     asm(f8);
+   return a;
+ }
+ 
+ int cbnz2(int g)
+ {
+   asm ("": "+h"(g));
+   if (!g)
+     asm(f8);
+   return a;
+ }
+ 
+ int cbnz3(int g)
+ {
+   if (!g)
+     asm(f16);
+   return a;
+ }
+ 
+ int cbnz4(int g)
+ {
+   asm ("": "+h"(g));
+   if (!g)
+     asm(f16);
+   return a;
+ }
+ 
+ int cbnz5(int g)
+ {
+   if (!g)
+     asm(f131072);
+   return a;
+ }
+ 
+ int cbnz6(int g)
+ {
+   asm ("": "+h"(g));
+   if (!g)
+     asm(f131072);
+   return a;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,65 ****
- /* { dg-do compile }  */
- /* { dg-require-effective-target arm_hard_vfp_ok }  */
- /* { dg-require-effective-target arm_fp16_ok } */
- /* { dg-options "-O2" }  */
- /* { dg-add-options arm_fp16_ieee } */
- /* { dg-final { check-function-bodies "**" "" "" } } */
- 
- /* Test __fp16 arguments and return value in registers (hard-float).  */
- 
- void
- swap (__fp16, __fp16);
- 
- /*
- ** F:
- ** ...
- ** (
- 
- Below block is for non-armv8.1
- ** (
- **	vmov\.f32	(s[3-9]|s1[0-5]), s0
- ** ...
- **	vmov\.f32	s0, s1
- ** ...
- **	vmov\.f32	s1, \1
- ** |
- **	vmov\.f32	(s[3-9]|s1[0-5]), s1
- ** ...
- **	vmov\.f32	s1, s0
- ** ...
- **	vmov\.f32	s0, \2
- ** )
- **	vstr\.32	s2, \[sp, #4\]	@ int
- **	bl	swap
- **	vldr\.32	s2, \[sp, #4\]	@ int
- **	vmov\.f32	s0, s2
- 
- ** |
- 
- Below block is for armv8.1
- ** (
- **	vmov	(s[3-9]|s1[0-5]), s0	@ __fp16
- ** ...
- **	vmov	s0, s1	@ __fp16
- ** ...
- **	vmov	s1, \3	@ __fp16
- ** |
- **	vmov	(s[3-9]|s1[0-5]), s1	@ __fp16
- ** ...
- **	vmov	s1, s0	@ __fp16
- ** ...
- **	vmov	s0, \4	@ __fp16
- ** )
- **	vstr\.32	s2, \[sp, #4\]	@ int
- **	bl	swap
- **	vldr\.16	s0, \[sp, #4\]
- 
- ** )
- ** ...
- */
- __fp16
- F (__fp16 a, __fp16 b, __fp16 c)
- {
-   swap (b, a);
-   return c;
- }
--- 0 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile }  */
- /* { dg-require-effective-target arm_fp16_ok } */
- /* { dg-options "-mfloat-abi=softfp -O2 -mno-long-calls" }  */
- /* { dg-add-options arm_fp16_ieee } */
- /* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" } } */
- /* { dg-final { check-function-bodies "**" "" "" } } */
- 
- /* Test __fp16 arguments and return value in registers (softfp).  */
- 
- void
- swap (__fp16, __fp16);
- 
- /*
- ** F:
- ** ...
- ** (
- **	mov	r3, r0	@ __fp16
- ** ...
- **	mov	r0, r1	@ __fp16
- ** ...
- **	mov	r1, r3	@ __fp16
- ** |
- **	mov	r3, r1	@ __fp16
- ** ...
- **	mov	r1, r0	@ __fp16
- ** ...
- **	mov	r0, r3	@ __fp16
- ** )
- ** ...
- */
- /*
- ** F: { target arm_little_endian }
- ** ...
- **	str	r2, \[sp, #4\]
- **	bl	swap
- **	ldrh	r0, \[sp, #4\]	@ __fp16
- ** ...
- */
- __fp16
- F (__fp16 a, __fp16 b, __fp16 c)
- {
-   swap (b, a);
-   return c;
- }
--- 0 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,65 ****
- /* { dg-do compile }  */
- /* { dg-require-effective-target arm_hard_vfp_ok }  */
- /* { dg-require-effective-target arm_fp16_alternative_ok } */
- /* { dg-options "-O2" }  */
- /* { dg-add-options arm_fp16_alternative } */
- /* { dg-final { check-function-bodies "**" "" "" } } */
- 
- /* Test __fp16 arguments and return value in registers (hard-float).  */
- 
- void
- swap (__fp16, __fp16);
- 
- /*
- ** F:
- ** ...
- ** (
- 
- Below block is for non-armv8.1
- ** (
- **	vmov\.f32	(s[3-9]|s1[0-5]), s0
- ** ...
- **	vmov\.f32	s0, s1
- ** ...
- **	vmov\.f32	s1, \1
- ** |
- **	vmov\.f32	(s[3-9]|s1[0-5]), s1
- ** ...
- **	vmov\.f32	s1, s0
- ** ...
- **	vmov\.f32	s0, \2
- ** )
- **	vstr\.32	s2, \[sp, #4\]	@ int
- **	bl	swap
- **	vldr\.32	s2, \[sp, #4\]	@ int
- **	vmov\.f32	s0, s2
- 
- ** |
- 
- Below block is for armv8.1
- ** (
- **	vmov	(s[3-9]|s1[0-5]), s0
- ** ...
- **	vmov	s0, s1
- ** ...
- **	vmov	s1, \3
- ** |
- **	vmov	(s[3-9]|s1[0-5]), s1
- ** ...
- **	vmov	s1, s0
- ** ...
- **	vmov	s0, \4
- ** )
- **	vstr\.32	s2, \[sp, #4\]	@ int
- **	bl	swap
- **	vldr\.16	s0, \[sp, #4\]
- 
- ** )
- ** ...
- */
- __fp16
- F (__fp16 a, __fp16 b, __fp16 c)
- {
-   swap (b, a);
-   return c;
- }
--- 0 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile }  */
- /* { dg-require-effective-target arm_fp16_alternative_ok } */
- /* { dg-options "-mfloat-abi=softfp -O2" }  */
- /* { dg-add-options arm_fp16_alternative } */
- /* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" } } */
- /* { dg-final { check-function-bodies "**" "" "" } } */
- 
- /* Test __fp16 arguments and return value in registers (softfp).  */
- 
- void
- swap (__fp16, __fp16);
- 
- /*
- ** F:
- ** ...
- ** (
- **	mov	r3, r0	@ __fp16
- ** ...
- **	mov	r0, r1	@ __fp16
- ** ...
- **	mov	r1, r3	@ __fp16
- ** |
- **	mov	r3, r1	@ __fp16
- ** ...
- **	mov	r1, r0	@ __fp16
- ** ...
- **	mov	r0, r3	@ __fp16
- ** )
- ** ...
- */
- /*
- ** F: { target arm_little_endian }
- ** ...
- **	str	r2, \[sp, #4\]
- **	bl	swap
- **	ldrh	r0, \[sp, #4\]	@ __fp16
- ** ...
- */
- __fp16
- F (__fp16 a, __fp16 b, __fp16 c)
- {
-   swap (b, a);
-   return c;
- }
--- 0 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/fp16-aapcs.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/fp16-aapcs.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile }  */
+ /* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-O2" }  */
+ /* { dg-add-options arm_fp16_alternative } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ /* Test __fp16 arguments and return value in registers.  */
+ 
+ __fp16 f();
+ void g(__fp16);
+ void h();
+ 
+ /*
+ ** test:
+ ** ...
+ **	bl	f
+ **	bl	g
+ ** ...
+ */
+ int test()
+ {
+     g(f());
+     h();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/pr122223.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/mve/intrinsics/pr122223.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/pr122223.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/mve/intrinsics/pr122223.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
+ /* { dg-add-options arm_v8_1m_mve_fp } */
+ /* { dg-additional-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* PR target/122223.  */
+ 
+ #include <arm_mve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ **foo:
+ **	...
+ **	vmov.f32	(q[0-9]+), #0.0  @ v4sf
+ **	...
+ **	vbic	q[0-9]+, q[0-9]+, \1
+ **	...
+ */
+ float32x4_t foo() {
+   float32x4_t a = vdupq_n_f32(1.0f); /* 0x3f800000 */
+   float32x4_t b = vbicq_f32(a, a);   /* 0x3f800000 & ~0x3f800000 => 0x00000000 */
+   float32x4_t c = vbicq_f32(a, b);   /* 0x3f800000 & ~0x00000000 => 0x3f800000 */
+   return c;
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/neon-smax16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/neon-smax16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/neon-smax16.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/neon-smax16.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */
+ /* { dg-add-options arm_v8_2a_fp16_neon } */
+ /* { dg-additional-options "-std=c23 -Ofast" } */
+ void foo(void);
+ extern _Float16 main_in[];
+ void bar() {
+   _Float16 out = 0.0;
+   for (int i = 0; i < 100; i++)
+     if (out < main_in[i])
+       out = main_in[i];
+   if (out)
+     foo();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/neon-smin16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/neon-smin16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/neon-smin16.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/neon-smin16.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */
+ /* { dg-add-options arm_v8_2a_fp16_neon } */
+ /* { dg-additional-options "-std=c23 -Ofast" } */
+ void foo(void);
+ extern _Float16 main_in[];
+ void bar() {
+   _Float16 out = 0.0;
+   for (int i = 0; i < 100; i++)
+     if (out > main_in[i])
+       out = main_in[i];
+   if (out)
+     foo();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/pr123271.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/pr123271.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/pr123271.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/pr123271.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-options "-O2 -ftrapv" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ int sub(int a, int b)
+ {
+   return a - b;
+ }
+ 
+ /*
+ ** sub:
+ ** ...
+ ** (
+ **	bl	__subvsi3
+ ** |
+    Not generated yet, but would be equally acceptable.
+ **	subs	r0, r0, r1
+ **	bv[sc]	.*
+ ** )
+ ** ...
+ */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/arm/pr124933.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/pr124933.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/arm/pr124933.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/arm/pr124933.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-require-effective-target arm_arch_v8_1m_main_fp_hard_ok } */
+ /* { dg-add-options arm_arch_v8_1m_main_fp_hard } */
+ /* { dg-additional-options "-O2 -mfp16-format=ieee" } */
+ /* { dg-do assemble } */
+ 
+ __fp16 f;
+ __fp16 g;
+ 
+ void __attribute__((noinline,noclone)) h (__fp16 x)
+ {
+   g = x;
+ }
+ 
+ void __attribute__((noinline,noclone)) i ()
+ {
+   h (f);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/cmpdi-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/cmpdi-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/cmpdi-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/cmpdi-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,149 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */
+ 
+ typedef __INT8_TYPE__   int8_t;
+ typedef __UINT8_TYPE__  uint8_t;
+ typedef __UINT16_TYPE__ uint16_t;
+ typedef __UINT64_TYPE__ uint64_t;
+ typedef __INT64_TYPE__  int64_t;
+ 
+ #define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X))
+ 
+ const __flash uint64_t mant[] =
+   {
+     0x0000000000000,
+     0x0000000000001,
+     0x0000000000100,
+     0x0000000010000,
+     0x0000001000000,
+     0x0000100000000,
+     0x0010000000000,
+     0x1000000000000,
+     0x00000000000ff,
+     0x00000000000ff,
+     0x000000000ffff,
+     0x0000000ffffff,
+     0x00000ffffffff,
+     0x000ffffffffff,
+     0x0ffffffffffff,
+     0xfffffffffffff,
+     0xfffffffffff00,
+     0xfffffffff0000,
+     0xfffffff000000,
+     0xfffff00000000,
+     0xfff0000000000,
+     0xff00000000000,
+     0xf000000000000,
+     0x7ffffffffffff,
+     0x8000000000000,
+     0x8000000000001,
+     0xffffffffffffe
+   };
+ 
+ const __flash uint16_t expo[] =
+   {
+     0x000,
+     0x001,
+     0x002,
+     0x7fe,
+     0x7ff
+   };
+ 
+ #define SMASK ((uint64_t) 1 << 63)
+ #define xNAN 0x7f
+ 
+ char d64_nan_p (uint64_t a)
+ {
+   return (a & ~SMASK) > (uint64_t) 0x7ff << 52;
+ }
+ 
+ int8_t cmp_d64 (uint64_t a, uint64_t b)
+ {
+   if (d64_nan_p (a) || d64_nan_p (b))
+     return xNAN;
+ 
+   if (a & SMASK)     a = SMASK - a;
+   if (b & SMASK)     b = SMASK - b;
+   __asm ("" : "+r" (a));
+   __asm ("" : "+r" (b));
+ 
+   return a == b
+     ? 0
+     : (int64_t) a > (int64_t) b ? 1 : -1;
+ }
+ 
+ extern int8_t eq (uint64_t, uint64_t) __asm("__eqdf2");
+ extern int8_t ne (uint64_t, uint64_t) __asm("__nedf2");
+ extern int8_t ge (uint64_t, uint64_t) __asm("__gedf2");
+ extern int8_t gt (uint64_t, uint64_t) __asm("__gtdf2");
+ extern int8_t le (uint64_t, uint64_t) __asm("__ledf2");
+ extern int8_t lt (uint64_t, uint64_t) __asm("__ltdf2");
+ extern int8_t unord (uint64_t, uint64_t) __asm("__unorddf2");
+ 
+ void test1 (uint64_t a, uint64_t b)
+ {
+   int8_t d, c = cmp_d64 (a, b);
+   d = eq (a, b);
+   if (c == xNAN && d) __builtin_exit (1);
+   if (c != xNAN && d != (c == 0)) __builtin_exit (2);
+ 
+   d = ne (a, b);
+   if (c == xNAN && d) __builtin_exit (3);
+   if (c != xNAN && d != (c != 0)) __builtin_exit (4);
+ 
+   d = ge (a, b);
+   if (c == xNAN && d) __builtin_exit (5);
+   if (c != xNAN && d != (c >= 0)) __builtin_exit (6);
+ 
+   d = gt (a, b);
+   if (c == xNAN && d) __builtin_exit (7);
+   if (c != xNAN && d != (c > 0)) __builtin_exit (8);
+ 
+   d = le (a, b);
+   if (c == xNAN && d) __builtin_exit (9);
+   if (c != xNAN && d != (c <= 0)) __builtin_exit (10);
+ 
+   d = lt (a, b);
+   if (c == xNAN && d) __builtin_exit (11);
+   if (c != xNAN && d != (c < 0)) __builtin_exit (12);
+ 
+   d = unord (a, b);
+   if (c == xNAN && !d) __builtin_exit (13);
+   if (c != xNAN && d) __builtin_exit (14);
+ }
+ 
+ 
+ void testAB (uint64_t a, uint64_t b)
+ {
+   test1 (a, b);
+   test1 (a, b ^ SMASK);
+   test1 (a ^ SMASK, b);
+   test1 (a ^ SMASK, b ^ SMASK);
+ }
+ 
+ void testA (uint64_t a)
+ {
+   for (uint8_t i = 0; i < ARRAY_SIZE (mant); ++i)
+     {
+       uint64_t b = mant[i];
+       for (uint8_t j = 0; j < ARRAY_SIZE (expo); ++j)
+ 	testAB (a, b | ((uint64_t) expo[j] << 52));
+     }
+ }
+ 
+ void tests (void)
+ {
+   for (uint8_t i = 0; i < ARRAY_SIZE (mant); ++i)
+     {
+       uint64_t a = mant[i];
+       for (uint8_t j = 0; j < ARRAY_SIZE (expo); ++j)
+ 	testA (a | ((uint64_t) expo[j] << 52));
+     }
+ }
+ 
+ 
+ int main (void)
+ {
+   tests ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/dtofx.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/dtofx.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/dtofx.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/dtofx.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,98 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues -Wno-pedantic } } */
+ 
+ #include <stdfix.h>
+ 
+ #if __SIZEOF_LONG_DOUBLE__ == 8
+ 
+ typedef long double D;
+ 
+ volatile D d0 = 0;
+ volatile D dm15 = -1.5;
+ volatile D dp15 = +1.5;
+ volatile D dm05 = -0.5;
+ volatile D dp05 = +0.5;
+ 
+ void test0 (void)
+ {
+   if (0hk != (short accum) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0uhk != (unsigned short accum) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0hr != (short fract) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0uhr != (unsigned short fract) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0k != (accum) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0uk != (unsigned accum) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0r != (fract) d0)
+     __builtin_exit (__LINE__);
+ 
+   if (0ur != (unsigned fract) d0)
+     __builtin_exit (__LINE__);
+ }
+ 
+ void testp (void)
+ {
+   if (0.5hr != (short fract) dp05)
+     __builtin_exit (__LINE__);
+ 
+   if (0.5uhr != (unsigned short fract) dp05)
+     __builtin_exit (__LINE__);
+ 
+   if (0.5r != (fract) dp05)
+     __builtin_exit (__LINE__);
+ 
+   if (0.5ur != (unsigned fract) dp05)
+     __builtin_exit (__LINE__);
+ 
+   if (1.5hk != (short accum) dp15)
+     __builtin_exit (__LINE__);
+ 
+   if (1.5uhk != (unsigned short accum) dp15)
+     __builtin_exit (__LINE__);
+ 
+   if (1.5k != (accum) dp15)
+     __builtin_exit (__LINE__);
+ 
+   if (1.5uk != (unsigned accum) dp15)
+     __builtin_exit (__LINE__);
+ }
+ 
+ void testm (void)
+ {
+   if (-0.5hr != (short fract) dm05)
+     __builtin_exit (__LINE__);
+ 
+   if (-0.5r != (fract) dm05)
+     __builtin_exit (__LINE__);
+ 
+   if (-1.5hk != (short accum) dm15)
+     __builtin_exit (__LINE__);
+ 
+   if (-1.5k != (accum) dm15)
+     __builtin_exit (__LINE__);
+ }
+ 
+ int main (void)
+ {
+   test0 ();
+   testp ();
+   testm ();
+ 
+   return 0;
+ }
+ #else
+ int main (void)
+ {
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/fminfmax-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/fminfmax-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/fminfmax-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/fminfmax-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */
+ 
+ typedef __INT8_TYPE__   int8_t;
+ typedef __UINT8_TYPE__  uint8_t;
+ typedef __UINT16_TYPE__ uint16_t;
+ typedef __UINT64_TYPE__ uint64_t;
+ typedef __INT64_TYPE__  int64_t;
+ 
+ #define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X))
+ 
+ const __flash uint64_t vals[] =
+   {
+     // NaNs
+     0xffffffffffffffff,
+     0x7fffffffffffffff,
+     0xfff0000000000001,
+     0x7ff0000000000001,
+ 
+     // Some non-NaN doubles, increasing in magnitude.
+     0xfff0000000000000, // -Inf
+     0xffefffffffffffff,
+     0xffe0000000000000,
+     0x8010000000000000,
+     0x800fffffffffffff,
+     0x800ffffffffffffe,
+     0x8007fffffffffffe,
+     0x8000000000000001,
+     0x0000000000000000,
+     0x0000000000000001,
+     0x0007fffffffffffe,
+     0x000ffffffffffffe,
+     0x000fffffffffffff,
+     0x0010000000000000,
+     0x7fe0000000000000,
+     0x7fefffffffffffff,
+     0x7ff0000000000000  // +Inf
+   };
+ 
+ #define SMASK ((uint64_t) 1 << 63)
+ 
+ char d64_nan_p (uint64_t a)
+ {
+   return (a & ~SMASK) > (uint64_t) 0x7ff << 52;
+ }
+ 
+ extern uint64_t xmin (uint64_t, uint64_t) __asm("__fmin");
+ extern uint64_t xmax (uint64_t, uint64_t) __asm("__fmax");
+ 
+ void test_fmin (uint8_t i, uint8_t j)
+ {
+   uint64_t a = vals[i];
+   uint64_t b = vals[j];
+   uint64_t m = xmin (a, b);
+ 
+   char a_nan_p = d64_nan_p (a);
+   char b_nan_p = d64_nan_p (b);
+ 
+   if (a_nan_p + b_nan_p == 2)
+     {
+       if (!d64_nan_p (m))
+ 	__builtin_exit (__LINE__);
+     }
+   else
+     {
+       uint64_t r = 0?0
+ 	: a_nan_p ? b
+ 	: b_nan_p ? a
+ 	: i < j ? a : b;
+       if (r != m)
+ 	__builtin_exit (__LINE__);
+     }
+ }
+ 
+ 
+ void test_fmax (uint8_t i, uint8_t j)
+ {
+   uint64_t a = vals[i];
+   uint64_t b = vals[j];
+   uint64_t m = xmax (a, b);
+ 
+   char a_nan_p = d64_nan_p (a);
+   char b_nan_p = d64_nan_p (b);
+ 
+   if (a_nan_p + b_nan_p == 2)
+     {
+       if (!d64_nan_p (m))
+ 	__builtin_exit (__LINE__);
+     }
+   else
+     {
+       uint64_t r = 0?0
+ 	: a_nan_p ? b
+ 	: b_nan_p ? a
+ 	: i > j ? a : b;
+       if (r != m)
+ 	__builtin_exit (__LINE__);
+     }
+ }
+ 
+ 
+ void tests (void)
+ {
+   for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i)
+     for (uint8_t j = 0; j < ARRAY_SIZE (vals); ++j)
+       {
+ 	test_fmin (i, j);
+       }
+ }
+ 
+ 
+ int main (void)
+ {
+   tests ();
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/fxtod.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/fxtod.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/fxtod.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/fxtod.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,115 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues -fwrapv -Wno-overflow } } */
+ 
+ #include <stdfix.h>
+ 
+ #if __SIZEOF_LONG_DOUBLE__ == 8
+ 
+ #define NI __attribute__((noipa))
+ 
+ typedef long double D;
+ 
+ extern D ldexpl (D, int);
+ 
+ typedef short fract hr_t;
+ typedef unsigned short fract uhr_t;
+ typedef fract r_t;
+ typedef unsigned fract ur_t;
+ 
+ typedef short accum hk_t;
+ typedef unsigned short accum uhk_t;
+ typedef accum k_t;
+ typedef unsigned accum uk_t;
+ 
+ #define FBITuhr 8
+ #define FBIThr  7
+ #define FBITur  16
+ #define FBITr   15
+ 
+ #define FBITuhk 8
+ #define FBIThk  7
+ #define FBITuk  16
+ #define FBITk   15
+ 
+ #define VALff(S) ((2ul << (8 * sizeof (S##bits(0)) - 1)) - 1)
+ #define VAL80(S) (1ul << (8 * sizeof (S##bits(0)) - 1))
+ #define VAL00(S) 0
+ #define VAL01(S) 1
+ 
+ 
+ #define TEST_U(S, V)				\
+   NI void test_##S##_##V (void)			\
+   {						\
+     S##_t x = S##bits (VAL##V (S));		\
+     __asm ("" : "+r" (x));			\
+     D d = (D) x;				\
+     D z = ldexpl (VAL##V (S), - FBIT##S);	\
+     if (d != z)					\
+       __builtin_exit (1);			\
+   }
+ 
+ #define TEST_S(S, V)				\
+   NI void test_##S##_##V (void)			\
+   {						\
+     uint32_t u32 = (VAL##V (S) & VAL80 (S))	\
+       ? 1u + (VAL##V (S) ^ VALff (S))		\
+       : VAL##V (S);				\
+     S##_t x = S##bits (VAL##V (S));		\
+     __asm ("" : "+r" (x));			\
+     D d = (D) x;				\
+     D z = ldexpl (u32, - FBIT##S);		\
+     int s = (VAL##V (S) & VAL80 (S)) != 0;	\
+     if (s == 0 && d != z)			\
+       __builtin_exit (2);			\
+     if (s == 1 && d != -z)			\
+       __builtin_exit (3);			\
+   }
+ 
+ #define TESTS_U(S)				\
+   TEST_U (S, 00)				\
+   TEST_U (S, 01)				\
+   TEST_U (S, ff)				\
+   TEST_U (S, 80)
+ 
+ #define TESTS_S(S)				\
+   TEST_S (S, 00)				\
+   TEST_S (S, 01)				\
+   TEST_S (S, ff)				\
+   TEST_S (S, 80)
+ 
+ TESTS_U (uhr)
+ TESTS_U (ur)
+ TESTS_U (uhk)
+ TESTS_U (uk)
+ 
+ TESTS_S (hr)
+ TESTS_S (r)
+ TESTS_S (hk)
+ TESTS_S (k)
+ 
+ #define RUN(S)		\
+   test_##S##_00 ();	\
+   test_##S##_01 ();	\
+   test_##S##_ff ();	\
+   test_##S##_80 ()
+   
+ int main (void)
+ {
+   RUN (uhr);
+   RUN (ur);
+   RUN (uhk);
+   RUN (uk);
+ 
+   RUN (hr);
+   RUN (r);
+   RUN (hk);
+   RUN (k);
+ 
+   return 0;
+ }
+ #else
+ int main (void)
+ {
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/pr122220.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/pr122220.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/pr122220.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/pr122220.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */
+ 
+ #if __SIZEOF_LONG_DOUBLE__ == 8
+ 
+ typedef long double D;
+ typedef __INT32_TYPE__ int32_t;
+ 
+ D dd = -0x1p31L;
+   
+ int main (void)
+ {
+   if ((int32_t) dd != -0x7fffffff - 1)
+     __builtin_abort();
+ 
+   return 0;
+ }
+ #else
+ int main (void)
+ {
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/pr122222-sitod.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/pr122222-sitod.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/pr122222-sitod.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/pr122222-sitod.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */
+ 
+ #if __SIZEOF_LONG_DOUBLE__ == 8
+ 
+ typedef long double D;
+ typedef __INT32_TYPE__  int32_t;
+ typedef __UINT32_TYPE__ uint32_t;
+ typedef __UINT8_TYPE__  uint8_t;
+ 
+ #define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X))
+ 
+ void testu (void)
+ {
+   static const volatile __flash uint32_t vals[] =
+     {
+       0, 1ul, -1ul, (-1ul) << 1,
+       1ul << 31, 1ul << 30, 1ul << 29, 1ul << 28, 1ul << 27, 1ul << 26,
+       1ul << 25, 1ul << 24, 0xff, 123456789
+     };
+ 
+   for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i)
+     {
+       D x = (D) vals[i];
+       __asm ("" : "+r" (x));
+       if ((uint32_t) x != vals[i])
+ 	__builtin_exit (__LINE__);
+     }
+ }
+ 
+ void tests (void)
+ {
+   static const volatile __flash int32_t vals[] =
+     {
+       0, 1L, -1L, 0x7fffffff, -0x7fffffff, -0x7fffffff - 1,
+       -123456789
+     };
+ 
+   for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i)
+     {
+       D x = (D) vals[i];
+       __asm ("" : "+r" (x));
+       if ((int32_t) x != vals[i])
+ 	__builtin_exit (__LINE__);
+     }
+ }
+ 
+ int main (void)
+ {
+   testu ();
+   tests ();
+ 
+   return 0;
+ }
+ #else
+ int main (void)
+ {
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/sincos-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/sincos-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/sincos-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/sincos-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */
+ 
+ #if __SIZEOF_LONG_DOUBLE__ == 8
+ typedef long double D;
+ 
+ extern void sincosl (D, D*, D*);
+ extern D sinl (D);
+ extern D cosl (D);
+ 
+ D s1, c1;
+ 
+ int main (void)
+ {
+   for (D x = -20; x < 20; x += 1.1)
+     {
+       sincosl (x, &s1, &c1);
+ 
+       __asm ("" : "+r" (x) :: "memory");
+ 
+       if (s1 != sinl (x))
+ 	__builtin_exit (1);
+ 
+       if (c1 != cosl (x))
+ 	__builtin_exit (2);
+     }
+ 
+   return 0;
+ }
+ #else
+ int main (void)
+ {
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/fx-to-double.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/fx-to-double.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/fx-to-double.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/fx-to-double.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,88 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ typedef long double DD;
+ 
+ typedef long long _Fract dq_t;
+ typedef long long _Accum ta_t;
+ typedef long _Accum da_t;
+ typedef unsigned long long _Fract udq_t;
+ typedef unsigned long long _Accum uta_t;
+ typedef unsigned long _Accum uda_t;
+ 
+ #define NI __attribute__((noipa))
+ 
+ #define MK_CONV(T)				\
+   NI DD T##2d (T##_t x)				\
+   {						\
+     __asm ("" : "+r" (x));			\
+     return (DD) x;				\
+   }						\
+ 						\
+   NI T##_t d2##T (DD x)				\
+   {						\
+     __asm ("" : "+r" (x));			\
+     return (T##_t) x;				\
+   }
+ 
+ 
+ MK_CONV (da)
+ MK_CONV (ta)
+ MK_CONV (dq)
+ 
+ MK_CONV (uda)
+ MK_CONV (uta)
+ MK_CONV (udq)
+ 
+ #define TEST(T)					\
+   do {						\
+     T##_t fx = d2##T (x);			\
+     DD y = T##2d (fx);				\
+     if (y != x)					\
+       __builtin_exit (__LINE__);		\
+   } while (0)
+ 
+ 
+ NI void test_s (DD x)
+ {
+   TEST (da);
+   TEST (ta);
+ 
+   if (x < 1.0L && x >= -1.0L)
+     TEST (dq);
+ }
+ 
+ 
+ NI void test_u (long double x)
+ {
+   TEST (uda);
+   TEST (uta);
+ 
+   if (x < 1.0L)
+     TEST (udq);
+ }
+ 
+ void test (DD x)
+ {
+   if (x >= 0)
+     test_u (x);
+ 
+   test_s (x);
+ }
+ 
+ int main (void)
+ {
+   test (+0.0L);
+   test (-0.0L);
+ 
+   test (+1.0L);
+   test (-1.0L);
+ 
+   test (-0x0.cafe123p0);
+   test (+0x0.cafe123p0);
+ 
+   test (+0x1234.cafe123p0);
+   test (-0x1234.cafe123p0);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr122187.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr122187.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr122187.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr122187.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options { -std=c99 } } */
+ 
+ typedef __UINT32_TYPE__ uint32_t;
+ typedef __UINT16_TYPE__ uint16_t;
+ typedef __UINT8_TYPE__ uint8_t;
+ 
+ #define PINB (*(volatile uint8_t*) (13 + __AVR_SFR_OFFSET__))
+ #define PB1 1
+ 
+ uint16_t fun (void)
+ {
+     uint16_t h = 0;
+     for (uint32_t s = 0; s < 0x10000; ++s)
+         h += (PINB >> PB1) & 1;
+     return h;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssk.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssk.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssk.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssk.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __int24
+ #define UU signed
+ #define FX _Accum
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssr.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssr.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssr.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-ssr.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __int24
+ #define UU signed
+ #define FX _Fract
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-suk.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-suk.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-suk.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-suk.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __int24
+ #define UU unsigned
+ #define FX _Accum
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-sur.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-sur.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-sur.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-sur.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __int24
+ #define UU unsigned
+ #define FX _Fract
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usk.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usk.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usk.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usk.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __uint24
+ #define UU signed
+ #define FX _Accum
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usr.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usr.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usr.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-usr.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __uint24
+ #define UU signed
+ #define FX _Fract
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uuk.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uuk.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uuk.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uuk.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __uint24
+ #define UU unsigned
+ #define FX _Accum
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uur.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uur.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uur.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uur.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do link { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+ 
+ #define TT __uint24
+ #define UU unsigned
+ #define FX _Fract
+ 
+ #include "pr125409.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409.h gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409.h
*** gcc-14.3.0/gcc/testsuite/gcc.target/avr/torture/pr125409.h	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/avr/torture/pr125409.h	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,16 ----
+ UU FX fx_fun (TT x) { return x; }
+ TT fun_fx (UU FX x) { return x; }
+ 
+ short UU FX hfx_fun (TT x) { return x; }
+ TT fun_hfx (UU short FX x) { return x; }
+ 
+ long UU FX lfx_fun (TT x) { return x; }
+ TT fun_lfx (UU long FX x) { return x; }
+ 
+ long long UU FX llfx_fun (TT x) { return x; }
+ TT fun_llfx (UU long long FX x) { return x; }
+ 
+ int main (void)
+ {
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c	Fri Jun 19 06:51:04 2026
***************
*** 1,7 ****
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-bf16 -masm=intel" } */
! /* { dg-final { scan-assembler "tdpbf16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
  #include <immintrin.h>
  
  void TEST ()
--- 1,7 ----
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-bf16 -masm=intel" } */
! /* { dg-final { scan-assembler "tdpbf16ps\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
  #include <immintrin.h>
  
  void TEST ()
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c	Fri Jun 19 06:51:04 2026
***************
*** 1,8 ****
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-complex -masm=intel" } */
! /* { dg-final { scan-assembler "tcmmimfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
! /* { dg-final { scan-assembler "tcmmrlfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
  #include <immintrin.h>
  
  void TEST()
--- 1,8 ----
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-complex -masm=intel" } */
! /* { dg-final { scan-assembler "tcmmimfp16ps\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
! /* { dg-final { scan-assembler "tcmmrlfp16ps\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
  #include <immintrin.h>
  
  void TEST()
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c	Fri Jun 19 06:51:04 2026
***************
*** 1,7 ****
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-fp16 -masm=intel" } */
! /* { dg-final { scan-assembler "tdpfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
  #include <immintrin.h>
  
  void TEST ()
--- 1,7 ----
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-fp16 -masm=intel" } */
! /* { dg-final { scan-assembler "tdpfp16ps\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
  #include <immintrin.h>
  
  void TEST ()
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c	Fri Jun 19 06:51:04 2026
***************
*** 1,10 ****
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-int8 -masm=intel" } */
! /* { dg-final { scan-assembler "tdpbssd\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
! /* { dg-final { scan-assembler "tdpbsud\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } *
! /* { dg-final { scan-assembler "tdpbusd\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
! /* { dg-final { scan-assembler "tdpbuud\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3"  } } */
  #include <immintrin.h>
  
  void TEST ()
--- 1,10 ----
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-O2 -mamx-int8 -masm=intel" } */
! /* { dg-final { scan-assembler "tdpbssd\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
! /* { dg-final { scan-assembler "tdpbsud\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
! /* { dg-final { scan-assembler "tdpbusd\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
! /* { dg-final { scan-assembler "tdpbuud\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
  #include <immintrin.h>
  
  void TEST ()
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c	Fri Jun 19 06:51:04 2026
***************
*** 4,13 ****
  /* { dg-final { scan-assembler "ldtilecfg\[ \\t]"  } } */
  /* { dg-final { scan-assembler "sttilecfg\[ \\t]"  } } */
  /* { dg-final { scan-assembler "tilerelease"  } } */
! /* { dg-final { scan-assembler "tileloadd\[ \\t]%tmm\[0-9\]"  } } */
! /* { dg-final { scan-assembler "tileloaddt1\[ \\t]%tmm\[0-9\]"  } } */
! /* { dg-final { scan-assembler "tilestored\[ \\t]\[^\n\]+\[^\n\]*%tmm\[0-9\]"  } } */
! /* { dg-final { scan-assembler "tilezero\[ \\t]+\[^\n\]*%tmm\[0-9\]"  } } */
  #include <immintrin.h>
  
  extern int a[];
--- 4,13 ----
  /* { dg-final { scan-assembler "ldtilecfg\[ \\t]"  } } */
  /* { dg-final { scan-assembler "sttilecfg\[ \\t]"  } } */
  /* { dg-final { scan-assembler "tilerelease"  } } */
! /* { dg-final { scan-assembler "tileloadd\[ \\t]tmm\[0-9\]"  } } */
! /* { dg-final { scan-assembler "tileloaddt1\[ \\t]tmm\[0-9\]"  } } */
! /* { dg-final { scan-assembler "tilestored\[ \\t]\[^\n\]+\[^\n\]*tmm\[0-9\]"  } } */
! /* { dg-final { scan-assembler "tilezero\[ \\t]+\[^\n%\]*tmm\[0-9\]"  } } */
  #include <immintrin.h>
  
  extern int a[];
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/apx-broadcast.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/apx-broadcast.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/apx-broadcast.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/apx-broadcast.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do assemble { target { apxf && { ! ia32 } } } } */
+ /* { dg-options "-mavx512vl -mapxf -O2" } */
+ 
+ #include <stdint.h>
+ #include <immintrin.h>
+ 
+ void broadcast_avx2(int *sx, __m256i *coeff, __m128i *temp) {
+   
+   __m256i semp[8];
+ 
+ 
+   for (int i = 0; i < 8; i++)
+     {
+       asm volatile ("" : : : "r8", "r9", "r10", "r11", "r12", "r13",
+ 		    "r14", "r15", "rax", "rcx", "rsi", "rdi", "rdx");
+       register volatile uint64_t sm asm ("%r16") = i;
+       semp[i] = _mm256_broadcastsi128_si256(temp[sm]);
+     }
+ 
+   coeff[0] = _mm256_unpacklo_epi64(semp[0], semp[1]);
+   coeff[1] = _mm256_unpackhi_epi64(semp[2], semp[3]);
+   coeff[2] = _mm256_unpacklo_epi64(semp[4], semp[5]);
+   coeff[3] = _mm256_unpackhi_epi64(semp[6], semp[7]);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512f-pr124138-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512f-pr124138-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512f-pr124138-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512f-pr124138-1.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,24 ----
+ /* PR target/124138 */
+ /* { dg-do run } */
+ /* { dg-options "-mavx512f" } */
+ /* { dg-require-effective-target avx512f } */
+ 
+ #define AVX512F
+ #include "avx512f-helper.h"
+ 
+ typedef __attribute__((__vector_size__ (64))) unsigned long long V;
+ 
+ [[gnu::noipa]] V
+ foo (V x)
+ {
+   return __builtin_shuffle (x, (V) { 0, 1, 2, 5, 4, 5, 6, 7 });
+ }
+ 
+ void
+ TEST ()
+ {
+   V x = foo ((V) { 1, 2, 3, 4, 5, 6, 7, 8 });
+   if (x[0] != 1 || x[1] != 2 || x[2] != 3 || x[3] != 6
+       || x[4] != 5 || x[5] != 6 || x[6] != 7 || x[7] != 8)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512f-pr124138-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512f-pr124138-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512f-pr124138-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512f-pr124138-2.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,25 ----
+ /* PR target/124138 */
+ /* { dg-do run } */
+ /* { dg-options "-mavx512f" } */
+ /* { dg-require-effective-target avx512f } */
+ 
+ #define AVX512F
+ #include "avx512f-helper.h"
+ 
+ typedef __attribute__((__vector_size__ (64))) unsigned long long V;
+ typedef __attribute__((__vector_size__ (64))) double W;
+ 
+ [[gnu::noipa]] W
+ foo (W x)
+ {
+   return __builtin_shuffle (x, (V) { 0, 1, 2, 5, 4, 5, 6, 7 });
+ }
+ 
+ void
+ TEST ()
+ {
+   W x = foo ((W) { 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5 });
+   if (x[0] != 1.5 || x[1] != 2.5 || x[2] != 3.5 || x[3] != 6.5
+       || x[4] != 5.5 || x[5] != 6.5 || x[6] != 7.5 || x[7] != 8.5)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512f-pr124315.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512f-pr124315.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512f-pr124315.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512f-pr124315.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,33 ----
+ /* PR target/124315 */
+ /* { dg-do compile { target masm_intel } } */
+ /* { dg-options "-O2 -mavx512f -masm=intel" } */
+ /* { dg-final { scan-assembler "\tvfmadd231sd\txmm0{k\[0-7]}, xmm1, xmm2, {ru-sae}" } } */
+ /* { dg-final { scan-assembler "\tvfmsub231sd\txmm0{k\[0-7]}, xmm1, xmm2, {ru-sae}" } } */
+ /* { dg-final { scan-assembler "\tvfnmadd231sd\txmm0{k\[0-7]}, xmm1, xmm2, {ru-sae}" } } */
+ /* { dg-final { scan-assembler "\tvfnmsub231sd\txmm0{k\[0-7]}, xmm1, xmm2, {ru-sae}" } } */
+ 
+ #include <x86intrin.h>
+ 
+ __m128d
+ foo (__m128d b, __m128d w, __m128d a,  __mmask8 u)
+ {
+   return _mm_mask3_fmadd_round_sd (w, a, b, u, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC);
+ }
+ 
+ __m128d
+ bar (__m128d b, __m128d w, __m128d a, __mmask8 u)
+ {
+   return _mm_mask3_fmsub_round_sd (w, a, b, u, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC);
+ }
+ 
+ __m128d
+ baz (__m128d b, __m128d w, __m128d a,  __mmask8 u)
+ {
+   return _mm_mask3_fnmadd_round_sd (w, a, b, u, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC);
+ }
+ 
+ __m128d
+ qux (__m128d b, __m128d w, __m128d a,  __mmask8 u)
+ {
+   return _mm_mask3_fnmsub_round_sd (w, a, b, u, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512fp16-pr124335.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512fp16-pr124335.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/avx512fp16-pr124335.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/avx512fp16-pr124335.c	Fri Jun 19 06:51:04 2026
***************
*** 0 ****
--- 1,13 ----
+ /* PR target/124335 */
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target masm_intel } */
+ /* { dg-options "-mavx512fp16 -masm=intel" } */
+ /* { dg-require-effective-target avx512fp16 } */
+ 
+ #include <x86intrin.h>
+ 
+ __m128h
+ foo (_Float16 const *x, __mmask8 y)
+ {
+   return _mm_maskz_load_sh (y, x);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-2.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	andps	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ float
+ foo (float x)
+ {
+   return __builtin_copysignf (x, 0.0);
+ }
+ 
+ /* { dg-final { scan-assembler-times ".long	0" 3 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times ".long	2147483647" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-3.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-3.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	orps	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ float
+ foo (float x)
+ {
+   return __builtin_copysignf (x, -3.0);
+ }
+ 
+ /* { dg-final { scan-assembler-times ".long	0" 3 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times ".long	-2147483648" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-4.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-4.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-4.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pand	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ __float128
+ foo (__float128 x)
+ {
+   return __builtin_copysignq (x, 0.0);
+ }
+ 
+ /* { dg-final { scan-assembler-times ".long	-1" 3 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times ".long	2147483647" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-5.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-5.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-5.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-5.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pand	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ __float128
+ foo (__float128 x)
+ {
+   return __builtin_copysignq (0.0, x);
+ }
+ 
+ /* { dg-final { scan-assembler-times ".long	0" 3 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times ".long	-2147483648" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-6.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-6.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-6.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-6.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pand	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ __float128
+ foo (__float128 x)
+ {
+   return __builtin_copysignq (x, 3.4);
+ }
+ 
+ /* { dg-final { scan-assembler-times ".long	-1" 3 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times ".long	2147483647" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-7.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-7.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-7.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-7.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pand	.LC[0-9]+\(%rip\), %xmm0
+ **	por	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ __float128
+ foo (__float128 x)
+ {
+   return __builtin_copysignq (3.4, x);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pand	.LC[0-9]+\(%rip\), %xmm0
+ **	pand	.LC[0-9]+\(%rip\), %xmm1
+ **	por	%xmm1, %xmm0
+ **	ret
+ **...
+ */
+ 
+ __float128
+ foo (__float128 x, __float128 y)
+ {
+   return __builtin_copysignq (x, y);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -mavx -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqa	.LC[0-9]+\(%rip\), %xmm2
+ **	vpandn	%xmm0, %xmm2, %xmm0
+ **	vpand	%xmm2, %xmm1, %xmm1
+ **	vpor	%xmm1, %xmm0, %xmm0
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-copysign-8a.c"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-fabs-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-fabs-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-fabs-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-fabs-1.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,23 ----
+ /* PR target/122323 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	orps	.LC[0-9]+\(%rip\), %xmm0
+ **	ret
+ **...
+ */
+ 
+ float
+ foo (float x)
+ {
+   return -__builtin_fabsf (x);
+ }
+ 
+ /* { dg-final { scan-assembler-times ".long	0" 3 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times ".long	-2147483648" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-fabs-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-fabs-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/builtin-fabs-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/builtin-fabs-2.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,28 ----
+ /* PR target/99930 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	ja	.L[0-9]+
+ **	movss	4\(%(e|r)di\), %xmm2
+ **	orps	%xmm2, %xmm1
+ **	comiss	%xmm1, %xmm0
+ **	seta	%al
+ **	ret
+ **...
+ */
+ 
+ #include <stdbool.h>
+ 
+ bool
+ foo (float n[2], float m)
+ {
+   for (int i = 0; i < 2; i++)
+     if (m > -__builtin_fabsf (n[i]))
+       return true;
+   return false;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/cet-pr124366.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/cet-pr124366.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/cet-pr124366.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/cet-pr124366.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,31 ----
+ /* PR target/124366 */
+ /* { dg-do assemble { target { cet && masm_intel } } } */
+ /* { dg-options "-O2 -mshstk -masm=intel" } */
+ 
+ #include <x86intrin.h>
+ 
+ void
+ wrssd (unsigned int x, void *y)
+ {
+   _wrssd (x, y);
+ }
+ 
+ void
+ wrussd (unsigned int x, void *y)
+ {
+   _wrussd (x, y);
+ }
+ 
+ #ifdef __x86_64__
+ void
+ wrssq (unsigned long long x, void *y)
+ {
+   _wrssq (x, y);
+ }
+ 
+ void
+ wrussq (unsigned long long x, void *y)
+ {
+   _wrussq (x, y);
+ }
+ #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/cold-attribute-4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/cold-attribute-4.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/cold-attribute-4.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/cold-attribute-4.c	Fri Jun 19 06:51:05 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2" } */
  #include <string.h>
  
  int
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-Oz" } */
  #include <string.h>
  
  int
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/keylocker-pr123217.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/keylocker-pr123217.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/keylocker-pr123217.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/keylocker-pr123217.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,13 ----
+ /* PR target/123217 */
+ /* { dg-do compile } */
+ /* { dg-options "-mkl -O0" } */
+ 
+ __attribute__((__vector_size__(16))) long long v, w;
+ 
+ unsigned
+ foo (void *p, void *q)
+ {
+   unsigned x = __builtin_ia32_encodekey128_u32 (0U, v, p);
+   unsigned y = __builtin_ia32_encodekey256_u32 (0U, v, w, q);
+   return x + y;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c	Fri Jun 19 06:51:05 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=sapphirerapids" } */
  
  extern char *dst, *src;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=znver5" } */
  
  extern char *dst, *src;
  
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c	Fri Jun 19 06:51:05 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=sapphirerapids -march=x86-64 -mavx2" } */
  
  extern char *dst, *src;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=znver5 -march=x86-64 -mavx2" } */
  
  extern char *dst, *src;
  
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-46.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memset-46.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-46.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memset-46.c	Fri Jun 19 06:51:05 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=sapphirerapids" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=znver5" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-49.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memset-49.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-49.c	Fri May 23 11:02:06 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pieces-memset-49.c	Fri Jun 19 06:51:05 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=sapphirerapids -march=x86-64 -mavx2" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=znver5 -march=x86-64 -mavx2" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-1.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=sapphirerapids" } */
+ /* { dg-final { scan-assembler-not "and\[lq\]?\[\\t \]+\\\$0, \[0-9\]*\\(" } } */
+ 
+ struct __pthread_mutex_s
+ {
+   int __lock;
+   unsigned int __count;
+   int __owner;
+   unsigned int __nusers;
+   int __kind;
+   short __spins;
+   short __elision;
+   void *p[2];
+ };
+ typedef union
+ {
+   struct __pthread_mutex_s __data;
+   char __size[40];
+   long int __align;
+ } pthread_mutex_t;
+ typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
+ void
+ foo (__rtld_lock_recursive_t *lock, int i)
+ {
+   lock[i] = (__rtld_lock_recursive_t) {{ { 0, 0, 0, 0, 1,
+       0, 0, { ((void *)0) , ((void *)0) } } }};
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-2.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=sapphirerapids" } */
+ /* { dg-final { scan-assembler-not "or\[lq\]?\[\\t \]+\\\$-1, \[0-9\]*\\(" } } */
+ 
+ struct __pthread_mutex_s
+ {
+   int __lock;
+   unsigned int __count;
+   int __owner;
+   unsigned int __nusers;
+   int __kind;
+   short __spins;
+   short __elision;
+   void *p[2];
+ };
+ typedef union
+ {
+   struct __pthread_mutex_s __data;
+   char __size[40];
+   long int __align;
+ } pthread_mutex_t;
+ typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
+ void
+ foo (__rtld_lock_recursive_t *lock, int i)
+ {
+   lock[i] = (__rtld_lock_recursive_t) {{ { -1, -1, -1, -1, 1,
+       -1, -1, { ((void *)-1) , ((void *)-1) } } }};
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-3.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-3.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ typedef int SItype __attribute__ ((mode (SI)));
+ typedef unsigned int USItype __attribute__ ((mode (SI)));
+ typedef unsigned int UDItype __attribute__ ((mode (DI)));
+ typedef UDItype __attribute__ ((__may_alias__)) bar_t;
+ 
+ static inline __attribute__((__always_inline__)) SItype
+ bar (const bar_t **p, SItype prec)
+ {
+   bar_t mslimb = 0;
+   SItype i = 20;
+   SItype n = ((USItype) prec) % 4;
+   if (n)
+     {
+       prec -= n;
+       if (prec == 0)
+ 	return 1;
+       mslimb = (*p)[i];
+     }
+   while (mslimb == 0)
+     {
+       prec -= 4;
+       if (prec == 0)
+ 	return 1;
+       --i;
+       mslimb = (*p)[i];
+     }
+   return prec;
+ }
+ UDItype
+ foo (const bar_t *i, SItype iprec)
+ {
+   iprec = bar (&i, iprec);
+   USItype aiprec = iprec < 0 ? -iprec : iprec;
+   bar_t msb = *i;
+   UDItype mantissa = 0;
+   if (aiprec % 4)
+     msb &= ((bar_t) 1 << aiprec) - 1;
+   if (aiprec >= 54)
+     mantissa = (UDItype) msb << 32;
+ 
+   return (mantissa ^ (UDItype) 0x20000000000000);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-4.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-4.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-4.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ #include "cold-attribute-4.c"
+ 
+ /* { dg-final { scan-assembler "movl" } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-5.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-5.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120427-5.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120427-5.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-Oz" } */
+ 
+ long long
+ func1 (void)
+ {
+   return -1;
+ }
+ /* { dg-final { scan-assembler-times "pushq\[ \\t\]+\\\$-1" 1 } } */
+ /* { dg-final { scan-assembler-times "popq\[ \\t\]+%rax" 1 } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120908.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120908.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr120908.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr120908.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target { lp64 && fpic } } } */
+ /* { dg-options "-O2 -fpic -mtls-dialect=gnu -mcmodel=large" } */
+ 
+ extern __thread long bar1;
+ long *
+ foo1 (void)
+ {
+   return &bar1;
+ }
+ 
+ static __thread long bar2;
+ long *
+ foo2 (void)
+ {
+   return &bar2;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-1a.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-1a.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-1a.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fPIC -mno-sse -mno-mmx -mno-80387 -mtls-dialect=gnu" } */
+ 
+ extern __thread int bar;
+ extern void func (void);
+ 
+ __attribute__((no_caller_saved_registers))
+ void
+ foo (int error)
+ {
+   bar = 1; /* { dg-error -mtls-dialect=gnu2 } */
+   if (error == 0)
+     func ();
+   bar = 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-1b.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-1b.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-1b.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fPIC -mno-sse -mno-mmx -mno-80387 -mtls-dialect=gnu2" } */
+ 
+ #include "pr121208-1a.c"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-2a.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-2a.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-2a.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fPIC -mtls-dialect=gnu" } */
+ 
+ typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+ extern __thread int bar;
+ extern void func (void);
+ 
+ __attribute__((target("general-regs-only")))
+ __attribute__((interrupt))
+ void
+ foo (void *frame, uword_t error)
+ {
+   bar = 1; /* { dg-error -mtls-dialect=gnu2 } */
+   if (error == 0)
+     func ();
+   bar = 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-2b.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-2b.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-2b.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fPIC -mtls-dialect=gnu2" } */
+ 
+ #include "pr121208-2a.c"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-3a.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-3a.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-3a.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-3a.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fPIC -mtls-dialect=gnu" } */
+ 
+ typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+ extern __thread int bar;
+ extern void func (void);
+ 
+ __attribute__((target("general-regs-only")))
+ __attribute__((interrupt))
+ void
+ foo (void *frame)
+ {
+   bar = 1; /* { dg-error -mtls-dialect=gnu2 } */
+   if (frame == 0)
+     func ();
+   bar = 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-3b.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-3b.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121208-3b.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121208-3b.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fPIC -mtls-dialect=gnu2" } */
+ 
+ #include "pr121208-3a.c"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121274.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121274.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr121274.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr121274.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-march=x86-64-v4 -O2" } */
+ /* { dg-final { scan-assembler-not "vpextrq" } } */
+ /* { dg-final { scan-assembler-not "vpinsrq" } } */
+ 
+ typedef int v16si __attribute__((vector_size(64)));
+ typedef int v4si __attribute__((vector_size(16)));
+ 
+ v4si f(v16si x)
+ {
+   return __builtin_shufflevector(x, x, 0, 1, 2, 3);
+ }
+ 
+ v4si g(v16si x)
+ {
+ return __builtin_shufflevector(x, x, 4, 5, 6, 7);
+ }
+ 
+ v4si f1(__int128 *x)
+ {
+   __int128 t = *x;
+   asm("":"+x"(t));
+   return (v4si)t;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr122104.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr122104.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr122104.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr122104.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,12 ----
+ /* PR tree-optimization/122104 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-widening_mul-alias" } */
+ /* { dg-final { scan-tree-dump "\\.MUL_OVERFLOW" "widening_mul" } } */
+ /* { dg-final { scan-tree-dump-not "# RANGE \\\[irange\\\] unsigned int \\\[1, " "widening_mul" } } */
+ 
+ int
+ foo (int x)
+ {
+   int r = (unsigned) x * 35;
+   return x && ((unsigned) r / x) != 35U;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr123121.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr123121.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr123121.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr123121.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,57 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target lp64 } */
+ /* { dg-options "-O3 -fno-ipa-cp -fschedule-insns" } */
+ 
+ int a[256], d, e, f, g, h, j, v[] = {0, -6, 0};;
+ unsigned c;
+ unsigned k(int l, unsigned m) { return (l & 6777215) ^ a[(l ^ m) & 55]; }
+ int n(int l, int m[]) {
+   int i = 0;
+   for (; i < l; ++i) {
+     e = c >> 8 ^ a[m[i] & 255];
+     d = e;
+     d = k(d, m[i] >> 8 & 255);
+     d = k(d, m[i] >> 6);
+     f = (d & 6777215) ^ a[d & 5];
+     c = f;
+   }
+   return f;
+ }
+ int o() {
+   n(8, (int[]){g});
+   return n(6, (int[]){h});
+ }
+ int p(int l, int m[], int q, int r) {
+   int s = r = j + 1;
+   s = -(4 % q - 1);
+   if (r)
+     goto t;
+  ad:
+   l = 6 - l;
+   if (l)
+     goto ae;
+  t:
+   m[0] = s;
+   j = r;
+   goto af;
+  ae:
+   if (o())
+     goto ad;
+  af:
+   r = -s - m[1] - 8;
+   s = 1 % m[0] - s;
+   m[1] = 1 / r;
+   int a[] = {l, m[0], m[1], m[2], q, r, r, s};
+   return n(8, a);
+ }
+ int main() {
+   for (int i = 0; i < 256; i++) {
+     unsigned b = i;
+     if (i & 1)
+       b = b >> 1 ^ 3988292384;
+     a[i] = b;
+   }
+   if (p(1, v, 5, 0) / 100000)
+     p(1, 0, 5, 0);
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr123484.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr123484.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr123484.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr123484.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavx512vl -mavx512fp16 " }*/
+ typedef __attribute__((__vector_size__ (8))) _Float16 F;
+ int a, b;
+ F f, *p;
+ 
+ void
+ foo ()
+ {
+   do
+     {
+       f /= b ? *p : (F) {40};
+ l:
+     }
+   while (a);
+   goto l;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr124056.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr124056.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr124056.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr124056.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,61 ----
+ /* PR middle-end/124056 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -masm=att" } */
+ 
+ int v;
+ 
+ [[gnu::noipa]] void
+ foo (void)
+ {
+   v = 42;
+ }
+ 
+ [[gnu::noipa]] void
+ bar (void)
+ {
+   v = 43;
+ }
+ 
+ [[gnu::noipa]] int
+ baz (void)
+ {
+   _Bool err;
+   __asm goto ("movl %1, %%ecx\n\t"
+ 	       "test %%ecx, %%ecx\n\t"
+ 	       "js 1f\n\t"
+ 	       "jmp %l[lab]\n\t"
+ 	    "1: cmpl $-1, %%ecx"
+ 	       : "=@ccz" (err) : "m" (v) : "ecx" : lab);
+   if (err)
+     {
+       bar ();
+       return -1;
+     }
+   return 0;
+ 
+  lab:
+   if (err)
+     {
+       foo ();
+       return -2;
+     }
+ 
+   return 1;
+ }
+ 
+ int
+ main ()
+ {
+   v = 0;
+   if (baz () != -2 || v != 42)
+     __builtin_abort ();
+   v = 1;
+   if (baz () != 1 || v != 1)
+     __builtin_abort ();
+   v = -1;
+   if (baz () != -1 || v != 43)
+     __builtin_abort ();
+   v = -2;
+   if (baz () != 0 || v != -2)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr124316.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr124316.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr124316.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr124316.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mptwrite" } */
+ #include <x86gprintrin.h>
+ 
+ unsigned long long ull;
+ unsigned u;
+ void foo()
+ {
+     _ptwrite64(ull);
+     _ptwrite32(u);
+ }
+ 
+ /* { dg-final { scan-assembler-times "ptwritel" 1 } } */
+ /* { dg-final { scan-assembler-times "ptwriteq" 1 } } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr125351.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr125351.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/pr125351.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/pr125351.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,3 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mptwrite -masm=intel" } */
+ void foo() { __builtin_ia32_ptwrite32(0); }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/i386/user_msr-pr123217.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/user_msr-pr123217.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/i386/user_msr-pr123217.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/i386/user_msr-pr123217.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,10 ----
+ /* PR target/123217 */
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-musermsr -O0" } */
+ 
+ unsigned long long
+ foo (unsigned long long x)
+ {
+   unsigned long long y = __builtin_ia32_urdmsr (x);
+   return y;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/attr-model-6.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/attr-model-6.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/attr-model-6.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/attr-model-6.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs=none -mcmodel=normal -O2 -fno-pic" } */
+ /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,x" } } */
+ /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,y" } } */
+ /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,counter" } } */
+ 
+ #define ATTR_MODEL_TEST
+ #include "attr-model-test.c"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mlasx -ftree-vectorize" } */
+ /* { dg-require-effective-target loongarch_asx } */
+ 
+ void
+ foo (float *u, float x, float *y, float z)
+ {
+   int i;
+   for (i = 0; i < 1024; i++)
+     *(u++) = (x - y[i] * z);
+ }
+ 
+ /* { dg-final { scan-assembler-not "\tvori.b"} } */
+ /* { dg-final { scan-assembler-not "\txvori.b"} } */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr121064.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr121064.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr121064.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr121064.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-require-effective-target loongarch_sx_hw } */
+ /* { dg-do run } */
+ /* { dg-options "-march=loongarch64 -mfpu=64 -mlsx -O3" } */
+ 
+ typedef __INT32_TYPE__ int32_t;
+ typedef unsigned __INT32_TYPE__ uint32_t;
+ 
+ __attribute__ ((noipa)) static int32_t
+ long_filter_ehigh_3830_1 (int32_t *buffer, int length)
+ {
+   int i, j;
+   int32_t dotprod = 0;
+   int32_t delay[4] = { 0 };
+   uint32_t coeffs[4] = { 0 };
+ 
+   for (i = 0; i < length; i++)
+     {
+       dotprod = 0;
+       for (j = 3; j >= 0; j--)
+         {
+           dotprod += delay[j] * coeffs[j];
+           coeffs[j] += ((delay[j] >> 31) | 1);
+         }
+       for (j = 3; j > 0; j--)
+         delay[j] = delay[j - 1];
+       delay[0] = buffer[i];
+     }
+ 
+   return dotprod;
+ }
+ 
+ int
+ main ()
+ {
+   int32_t buffer[] = { -1, 1 };
+   if (long_filter_ehigh_3830_1 (buffer, 2) != -1)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr121542.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr121542.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr121542.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr121542.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mrecip=all  -mfrecipe -mabi=lp64d -march=loongarch64 -mfpu=64 -msimd=lasx -Ofast" } */
+ 
+ typedef long unsigned int STRLEN;
+ typedef struct sv SV;
+ struct sv
+ {
+   void *sv_any;
+   unsigned int sv_refcnt;
+   unsigned int sv_flags;
+ };
+ typedef struct xpv XPV;
+ struct xpv
+ {
+   char *xpv_pv;
+   STRLEN xpv_cur;
+   STRLEN xpv_len;
+ };
+ typedef unsigned long UV;
+ extern char *PL_bufend;
+ extern char *d;
+ SV *Perl_newSV (STRLEN len);
+ 
+ char *
+ S_scan_const (char *start)
+ {
+   register char *send = PL_bufend;
+   SV *sv = Perl_newSV (send - start);
+   register char *s = start;
+   UV uv;
+ 
+   while (s < send)
+     {
+       if (!(((UV)(uv)) < 0x80))
+         {
+           int hicount = 0;
+           unsigned char *c;
+           for (c = (unsigned char *)((XPV *)(sv)->sv_any)->xpv_pv;
+                c < (unsigned char *)d; c++)
+             {
+               if (!(((UV)(*c)) < 0x80))
+                 {
+                   hicount++;
+                 }
+             }
+           d += hicount;
+           *d++ = (char)uv;
+         }
+ 
+       s++;
+     }
+ 
+   return s;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr122097.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr122097.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr122097.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr122097.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,270 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mabi=lp64d -mlsx" } */
+ 
+ typedef long unsigned int size_t;
+ typedef unsigned char simde__mmask8;
+ typedef long simde__m128i __attribute__ ((__aligned__ ((16))))
+ __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ typedef union
+ {
+ 
+   __attribute__ ((__aligned__ ((16)))) long i64
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ } simde__m128i_private;
+ typedef double simde_float64;
+ typedef simde_float64 simde__m128d __attribute__ ((__aligned__ ((16))))
+ __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ typedef long int int_fast32_t;
+ typedef union
+ {
+ 
+   __attribute__ ((__aligned__ ((16)))) int_fast32_t i32f
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+   __attribute__ ((__aligned__ ((16)))) long i64
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+   __attribute__ ((__aligned__ ((16)))) simde_float64 f64
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ } simde__m128d_private;
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde__m128d_from_private (simde__m128d_private v)
+ {
+   simde__m128d r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_set_pd (simde_float64 e1, simde_float64 e0)
+ {
+ 
+   simde__m128d_private r_;
+   r_.f64[0] = e0;
+   r_.f64[1] = e1;
+ 
+   return simde__m128d_from_private (r_);
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128i
+ simde_mm_castpd_si128 (simde__m128d a)
+ {
+   simde__m128i r;
+   __builtin_memcpy (&r, &a, sizeof (a));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128i
+ simde__m128i_from_private (simde__m128i_private v)
+ {
+   simde__m128i r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128i_private
+ simde__m128i_to_private (simde__m128i v)
+ {
+   simde__m128i_private r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_castsi128_pd (simde__m128i a)
+ {
+   simde__m128d r;
+   __builtin_memcpy (&r, &a, sizeof (a));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128i
+ simde_mm_mask_mov_epi64 (simde__m128i src, simde__mmask8 k, simde__m128i a)
+ {
+ 
+   simde__m128i_private src_ = simde__m128i_to_private (src),
+                        a_ = simde__m128i_to_private (a), r_;
+ 
+   for (size_t i = 0; i < (sizeof (r_.i64) / sizeof (r_.i64[0])); i++)
+     {
+       r_.i64[i] = ((k >> i) & 1) ? a_.i64[i] : src_.i64[i];
+     }
+ 
+   return simde__m128i_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_mask_mov_pd (simde__m128d src, simde__mmask8 k, simde__m128d a)
+ {
+   return simde_mm_castsi128_pd (simde_mm_mask_mov_epi64 (
+       simde_mm_castpd_si128 (src), k, simde_mm_castpd_si128 (a)));
+ }
+ 
+ static double
+ simde_test_f64_precision_to_slop (int precision)
+ {
+   return __builtin_expect (!!(precision == 0x7fffffff), 0)
+              ? 0.0
+              : __builtin_pow (10.0, -((double)(precision)));
+ }
+ __attribute__ ((__always_inline__)) inline static void
+ simde_mm_storeu_pd (simde_float64 *mem_addr, simde__m128d a)
+ {
+ 
+   __builtin_memcpy (mem_addr, &a, sizeof (a));
+ }
+ int simde_test_equal_f64 (simde_float64 a, simde_float64 b,
+                           simde_float64 slop);
+ void simde_test_debug_printf_ (const char *format, ...);
+ static int
+ simde_assert_equal_vf64_ (size_t vec_len, simde_float64 const a[(vec_len)],
+                           simde_float64 const b[(vec_len)], simde_float64 slop,
+                           const char *filename, int line, const char *astr,
+                           const char *bstr)
+ {
+   for (size_t i = 0; i < vec_len; i++)
+     {
+       if (__builtin_expect (!!(!simde_test_equal_f64 (a[i], b[i], slop)), 0))
+         {
+           simde_test_debug_printf_ (
+               "%s:%d: assertion failed: %s[%zu] ~= %s[%zu] (%f ~= %f)\n",
+               filename, line, astr, i, bstr, i, ((double)(a[i])),
+               ((double)(b[i])));
+           return 1;
+         }
+     }
+   return 0;
+ }
+ static int
+ simde_test_x86_assert_equal_f64x2_ (simde__m128d a, simde__m128d b,
+                                     simde_float64 slop, const char *filename,
+                                     int line, const char *astr,
+                                     const char *bstr)
+ {
+   simde_float64 a_[sizeof (a) / sizeof (simde_float64)],
+       b_[sizeof (a) / sizeof (simde_float64)];
+   simde_mm_storeu_pd (a_, a);
+   simde_mm_storeu_pd (b_, b);
+   return simde_assert_equal_vf64_ (sizeof (a_) / sizeof (a_[0]), a_, b_, slop,
+                                    filename, line, astr, bstr);
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d_private
+ simde__m128d_to_private (simde__m128d v)
+ {
+   simde__m128d_private r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_min_pd (simde__m128d a, simde__m128d b)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b);
+ 
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = (a_.f64[i] < b_.f64[i]) ? a_.f64[i] : b_.f64[i];
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_max_pd (simde__m128d a, simde__m128d b)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b);
+ 
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = (a_.f64[i] > b_.f64[i]) ? a_.f64[i] : b_.f64[i];
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_x_mm_abs_pd (simde__m128d a)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a);
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = __builtin_fabs (a_.f64[i]);
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_cmple_pd (simde__m128d a, simde__m128d b)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b);
+ 
+   r_.i64 = ((__typeof__ (r_.i64))((a_.f64 <= b_.f64)));
+   return simde__m128d_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_x_mm_select_pd (simde__m128d a, simde__m128d b, simde__m128d mask)
+ {
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b),
+                            mask_ = simde__m128d_to_private (mask);
+ 
+   r_.i64 = a_.i64 ^ ((a_.i64 ^ b_.i64) & mask_.i64);
+   return simde__m128d_from_private (r_);
+ }
+ simde__m128d simde_mm_cmpge_pd (simde__m128d a, simde__m128d b);
+ 
+ simde__m128d
+ simde_x_mm_copysign_pd (simde__m128d dest, simde__m128d src)
+ {
+   simde__m128d_private r_, dest_ = simde__m128d_to_private (dest),
+                            src_ = simde__m128d_to_private (src);
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = __builtin_copysign (dest_.f64[i], src_.f64[i]);
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ simde__m128d simde_mm_or_pd (simde__m128d a, simde__m128d b);
+ 
+ simde__m128d simde_mm_set1_pd (simde_float64 a);
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_range_pd (simde__m128d a, simde__m128d b, int imm8)
+ {
+   simde__m128d r;
+ 
+   r = simde_x_mm_select_pd (
+       b, a, simde_mm_cmple_pd (simde_x_mm_abs_pd (a), simde_x_mm_abs_pd (b)));
+ 
+   r = simde_x_mm_copysign_pd (r, a);
+ 
+   return r;
+ }
+ int
+ test_simde_mm_mask_range_pd (void)
+ {
+ 
+   simde__m128d src, a, b, e, r;
+ 
+   src = simde_mm_set_pd (-2.92, -85.39);
+   a = simde_mm_set_pd (-47.59, -122.31);
+   b = simde_mm_set_pd (877.42, 69.15);
+   e = simde_mm_set_pd (-47.59, -69.15);
+   r = simde_mm_mask_mov_pd (src, 143, simde_mm_range_pd (a, b, 2));
+   do
+     {
+       if (simde_test_x86_assert_equal_f64x2_ (
+               r, e, simde_test_f64_precision_to_slop (1),
+               "../test/x86/avx512/range.c", 1454, "r", "e"))
+         {
+           return 1;
+         }
+     }
+   while (0);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr122695-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr122695-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr122695-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr122695-1.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -mlasx" } */
+ /* { dg-require-effective-target loongarch_asx_hw } */
+ 
+ [[gnu::vector_size (32)]] char a, b, c;
+ 
+ [[gnu::noipa]] void
+ test (void)
+ {
+   a = __builtin_shuffle (a, b, c);
+ }
+ 
+ int
+ main (void)
+ {
+   a = (typeof (a)){} + 5;
+   b = (typeof (a)){} + 6;
+   c = (typeof (a)){} + 64;
+   test ();
+   if (a[0] != 5)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr122695-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr122695-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr122695-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr122695-2.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -mlasx" } */
+ /* { dg-require-effective-target loongarch_asx_hw } */
+ 
+ [[gnu::vector_size(32)]] short a, b, c;
+ 
+ [[gnu::noipa]] void
+ test (void)
+ {
+   a = __builtin_shuffle(a, b, c) + c;
+ }
+ 
+ int
+ main (void)
+ {
+   a = (typeof (a)){} + 1;
+   b = (typeof (b)){} + 2;
+   c = (typeof (c)){} + 128;
+   test ();
+   if (a[0] != 129)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr125049.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr125049.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/pr125049.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/pr125049.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,50 ----
+ /* PR 125049: ensure stack canary and its address are not leaked.  */
+ /* { dg-options "-O2 -fstack-protector-strong -ffixed-r30 -ffixed-r31" } */
+ /* { dg-do run } */
+ /* { dg-require-effective-target fstack_protector } */
+ 
+ extern long __stack_chk_guard;
+ register long s7 asm ("s7"), *s8 asm ("s8");
+ 
+ [[gnu::zero_call_used_regs ("all"), gnu::noipa]] void
+ init_test (void)
+ {
+   s7 = __stack_chk_guard;
+   s8 = &__stack_chk_guard;
+ }
+ 
+ [[gnu::always_inline]] static inline void
+ check_reg (void)
+ {
+ #pragma GCC unroll 30
+   for (int i = 4; i < 30; i++)
+     asm goto (
+       "beq $r%0,$s7,%l[error]\n\t"
+       "beq $r%0,$s8,%l[error]\n\t"
+       :
+       : "i" (i)
+       :
+       : error
+     );
+   return;
+ error:
+   __builtin_trap ();
+ }
+ 
+ [[gnu::noipa]] void
+ test (void)
+ {
+   char buf[256];
+   asm ("":"+m"(buf));
+ 
+   check_reg ();
+ }
+ 
+ int
+ main (void)
+ {
+   init_test ();
+   test ();
+ 
+   check_reg ();
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123521.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123521.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123521.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123521.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -msimd=lasx" } */
+ 
+ typedef long long v4i64 __attribute__ ((vector_size (32), aligned (32)));
+ extern long long *x_si;
+ v4i64
+ test (void)
+ {
+   v4i64 a = { x_si[1], x_si[0], 0x411, 0x411 };
+   return a;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123766.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123766.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123766.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr123766.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx  -Werror -Wextra" } */
+ 
+ #include <lasxintrin.h>
+ 
+ __m256i v = {0, 0, 0, 0};
+ 
+ #define TEST(NAME)			  \
+   void test_##NAME (void)		  \
+   {					  \
+     long long r[4];			  \
+     __lasx_##NAME (v, r, 0);		  \
+   }
+ 
+ TEST (xvst);
+ TEST (xvstx);
+ 
+ #define TEST1(NAME, TYPE, NUM)		  \
+   void test_##NAME (void)		  \
+   {					  \
+     TYPE r[NUM];			  \
+     __lasx_##NAME (v, r, 0, 0);		  \
+   }
+ 
+ TEST1 (xvstelm_b, char, 32);
+ TEST1 (xvstelm_h, short, 16);
+ TEST1 (xvstelm_w, int, 8);
+ TEST1 (xvstelm_d, long long, 4);
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123766.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123766.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123766.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123766.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx  -Werror -Wextra" } */
+ 
+ #include <lsxintrin.h>
+ 
+ __m128i v = {0, 0};
+ 
+ #define TEST(NAME)			  \
+   void test_##NAME (void)		  \
+   {					  \
+     long long r[2];			  \
+     __lsx_##NAME (v, r, 0);		  \
+   }
+ 
+ TEST (vst);
+ TEST (vstx);
+ 
+ #define TEST1(NAME, TYPE, NUM)		  \
+   void test_##NAME (void)		  \
+   {					  \
+     TYPE r[NUM];			  \
+     __lsx_##NAME (v, r, 0, 0);		  \
+   }
+ 
+ TEST1 (vstelm_b, char, 16);
+ TEST1 (vstelm_h, short, 8);
+ TEST1 (vstelm_w, int, 4);
+ TEST1 (vstelm_d, long long, 2);
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123807.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123807.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123807.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr123807.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0 -msimd=lsx" } */
+ 
+ typedef long long v2i64 __attribute__ ((__vector_size__ (16)));
+ v2i64 a, b;
+ void
+ test (int imm8)
+ {
+   b = a << imm8;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c	Fri Jun 19 06:51:05 2026
*************** int
*** 27,36 ****
  main () {
    int i;
    signed long sl;
!   signed char sc, expected_sc;
!   signed short ss, expected_ss;
!   signed int si, expected_si;
!   signed long long int sll, expected_sll;
    signed char *psc;
    signed short *pss;
    signed int *psi;
--- 27,36 ----
  main () {
    int i;
    signed long sl;
!   signed char sc[2], expected_sc;
!   signed short ss[2], expected_ss;
!   signed int si[2], expected_si;
!   signed long long int sll[2], expected_sll;
    signed char *psc;
    signed short *pss;
    signed int *psi;
*************** main () {
*** 41,96 ****
    printf("Data to store [%d] = 0x%llx %llx\n", i, val.ull[1], val.ull[0]);
  #endif
  
!   psc = &sc;
!   pss = &ss;
!   psi = &si;
!   psll = &sll;
  
    sl = 1;
!   sc = 0xA1;
    expected_sc = 0xA1;
    __builtin_altivec_tr_stxvrbx (store_data, sl, psc);
  
!   if (expected_sc != sc & 0xFF)
  #if DEBUG
      printf(" ERROR: Signed char = 0x%x doesn't match expected value 0x%x\n",
! 	   sc & 0xFF, expected_sc);
  #else
      abort();
  #endif
  
!   ss = 0x52;
    expected_ss = 0x1752;
    __builtin_altivec_tr_stxvrhx (store_data, sl, pss);
  
!   if (expected_ss != ss & 0xFFFF)
  #if DEBUG
      printf(" ERROR: Signed short = 0x%x doesn't match expected value 0x%x\n",
! 	   ss, expected_ss) & 0xFFFF;
  #else
      abort();
  #endif
  
!   si = 0x21;
    expected_si = 0x54321721;
    __builtin_altivec_tr_stxvrwx (store_data, sl, psi);
  
!   if (expected_si != si)
  #if DEBUG
      printf(" ERROR: Signed int = 0x%x doesn't match expected value 0x%x\n",
! 	   si, expected_si);
  #else
      abort();
  #endif
  
!   sll = 0x12FFULL;
    expected_sll = 0xdcba9876543217FF;
    __builtin_altivec_tr_stxvrdx (store_data, sl, psll);
  
!   if (expected_sll != sll)
  #if DEBUG
      printf(" ERROR: Signed long long int = 0x%llx doesn't match expected value 0x%llx\n",
! 	   sll, expected_sll);
  #else
      abort();
  #endif
--- 41,96 ----
    printf("Data to store [%d] = 0x%llx %llx\n", i, val.ull[1], val.ull[0]);
  #endif
  
!   psc = &sc[0];
!   pss = &ss[0];
!   psi = &si[0];
!   psll = &sll[0];
  
    sl = 1;
!   sc[0] = 0xA1;
    expected_sc = 0xA1;
    __builtin_altivec_tr_stxvrbx (store_data, sl, psc);
  
!   if (expected_sc != sc[0] & 0xFF)
  #if DEBUG
      printf(" ERROR: Signed char = 0x%x doesn't match expected value 0x%x\n",
! 	   sc[0] & 0xFF, expected_sc);
  #else
      abort();
  #endif
  
!   ss[0] = 0x52;
    expected_ss = 0x1752;
    __builtin_altivec_tr_stxvrhx (store_data, sl, pss);
  
!   if (expected_ss != ss[0] & 0xFFFF)
  #if DEBUG
      printf(" ERROR: Signed short = 0x%x doesn't match expected value 0x%x\n",
! 	   ss[0], expected_ss) & 0xFFFF;
  #else
      abort();
  #endif
  
!   si[0] = 0x21;
    expected_si = 0x54321721;
    __builtin_altivec_tr_stxvrwx (store_data, sl, psi);
  
!   if (expected_si != si[0])
  #if DEBUG
      printf(" ERROR: Signed int = 0x%x doesn't match expected value 0x%x\n",
! 	   si[0], expected_si);
  #else
      abort();
  #endif
  
!   sll[0] = 0x12FFULL;
    expected_sll = 0xdcba9876543217FF;
    __builtin_altivec_tr_stxvrdx (store_data, sl, psll);
  
!   if (expected_sll != sll[0])
  #if DEBUG
      printf(" ERROR: Signed long long int = 0x%llx doesn't match expected value 0x%llx\n",
! 	   sll[0], expected_sll);
  #else
      abort();
  #endif
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c	Fri Jun 19 06:51:05 2026
*************** int main() {
*** 16,28 ****
    vfb = (vector float){10.0, -2.0, 70.0, 999.0 };
  
    /* Expected results.  */
- #ifdef __BIG_ENDIAN__
-   vexpected = (vector unsigned short) { 0x4900, 0xc000, 0x5460, 0x63ce,
- 					0x3666, 0x3e66, 0x4d00, 0x563e };
- #else
    vexpected = (vector unsigned short) { 0x3666, 0x3e66, 0x4d00, 0x563e,
  					0x4900, 0xc000, 0x5460, 0x63ce };
- #endif
  
  /*
       vresult = vec_pack_to_short_fp32 (vfa, vfb);
--- 16,23 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c	Fri Jun 19 06:51:05 2026
***************
*** 1,6 ****
  /* { dg-do run } */
! /* { dg-require-effective-target ppc_float128_sw } */
! /* { dg-require-effective-target p9vector_hw } */
  /* { dg-options "-O2 -mdejagnu-cpu=power9 " } */
  
  #define NAN_Q __builtin_nanq ("")
--- 1,5 ----
  /* { dg-do run } */
! /* { dg-require-effective-target ppc_float128_hw } */
  /* { dg-options "-O2 -mdejagnu-cpu=power9 " } */
  
  #define NAN_Q __builtin_nanq ("")
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c	Fri Jun 19 06:51:05 2026
***************
*** 1,7 ****
  /* { dg-do compile { target { powerpc*-*-* } } } */
  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
  /* { dg-require-effective-target powerpc_vsx_ok } */
! /* { dg-options "-O2 -mdejagnu-cpu=power7 -fno-inline-functions" } */
  
  /* Test simple extract/insert/slat operations.  Make sure all types are
     supported with various options.  */
--- 1,15 ----
  /* { dg-do compile { target { powerpc*-*-* } } } */
  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
  /* { dg-require-effective-target powerpc_vsx_ok } */
! /* { dg-options "-O2 -mdejagnu-cpu=power7 -fno-inline-functions -fno-ipa-icf" } */
! 
! /* PR testsuite/119382
!    Note: Added -fno-ipa-icf to disable Interprocedural Identical Code
!    Folding (ICF). Without this, insert_di_0_v2 is merged with insert_di_0
!    due to improved alias analysis introduced in commit r15-7961-gdc47161c1f32c3.
!    This results in the compiler replacing insert_di_0_v2 with a tail call to
!    insert_di_0, altering expected test behavior. Disabling ICF ensures correct
!    execution of the test.  */
  
  /* Test simple extract/insert/slat operations.  Make sure all types are
     supported with various options.  */
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c	Fri Jun 19 06:51:05 2026
***************
*** 4,11 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-tree-loop-distribute-patterns -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-align-1.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  /* Compile time known misalignment. Cannot use loop peeling to align
     the store.  */
--- 4,9 ----
*************** main1 (struct foo * __restrict__ p)
*** 28,50 ****
      {
        p->y[i] = x[i];
      }
- 
-   /* check results:  */
-   for (i = 0; i < N; i++)
-     {
-       if (p->y[i] != x[i])
- 	abort ();
-     }
-   return 0;
- }
- 
- 
- int main (void)
- {
-   int i;
-   struct foo *p = malloc (2*sizeof (struct foo));
-   
-   main1 (p);
    return 0;
  }
  
--- 26,31 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-10.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-10.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-10.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-10.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-2.c"
+ 
+ __attribute__ ((noinline))
+ void bar (float *pd, float *pa, float *pb, float *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] * pc[i]))
+ 	abort ();
+       if (pd[i] != 5.0)
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   float d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,&d[1],a,b,c);
+   main1 (N-2,&d[1],a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-11.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-11.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-11.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-11.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-3.c"
+ 
+ __attribute__ ((noinline))
+ void bar (short *pa, short *pb, short *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] * pc[i]))
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   short a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   short b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   short c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,a,b,c);
+   main1 (N-2,a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-12.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-12.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-12.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-12.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-4.c"
+ 
+ __attribute__ ((noinline))
+ void bar (double *pa, double *pb, double *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] * pc[i]))
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   double a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   double b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   double c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,a,b,c);
+   main1 (N-2,a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-13.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-13.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-13.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-13.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-5.c"
+ 
+ __attribute__ ((noinline))
+ void bar (char *pa, char *pb, char *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] + pc[i]))
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   char a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   char b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   char c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,a,b,c);
+   main1 (N-2,a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-14.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-14.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-14.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-14.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-6.c"
+ 
+ __attribute__ ((noinline))
+ void bar (double *pd, double *pa, double *pb, double *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] * pc[i]))
+ 	abort ();
+       if (pd[i] != 5.0)
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   double a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   double d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   double b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   double c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,&d[1],a,b,c);
+   main1 (N-2,&d[1],a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-15.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-15.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-15.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-15.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-7.c"
+ 
+ __attribute__ ((noinline))
+ void bar (int *pd, int *pa, int *pb, int *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] * pc[i]))
+ 	abort ();
+       if (pd[i] != 5.0)
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   int a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   int d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   int b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   int c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,&d[1],a,b,c);
+   main1 (N-2,&d[1],a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-16.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-16.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-16.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-16.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-95.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-8.c"
+ 
+ __attribute__ ((noinline))
+ void bar (short *pd, short *pa, short *pb, short *pc) 
+ {
+   int i;
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (pa[i] != (pb[i] * pc[i]))
+ 	abort ();
+       if (pd[i] != 5.0)
+ 	abort ();
+     }
+ 
+   return;
+ }
+ 
+ int main (void)
+ {
+   int i;
+   short a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   short d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+   short b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
+   short c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
+ 
+   main1 (N,&d[1],a,b,c);
+   main1 (N-2,&d[1],a,b,c);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c	Fri Jun 19 06:51:05 2026
***************
*** 4,31 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (float *pd, float *pa, float *pb, float *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] * pc[i]))
! 	abort ();
!       if (pd[i] != 5.0)
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, float * __restrict__ pd, float * __restrict__ pa, float * __restrict__ pb, float * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (float *pd, float *pa, float *pb, float *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, float * __restrict__ pd, float * __restrict__ pa, float * __restrict__ pb, float * __restrict__ pc)
*************** main1 (int n, float * __restrict__ pd, f
*** 42,61 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   float d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,&d[1],a,b,c);
-   main1 (N-2,&d[1],a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
--- 24,29 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c	Fri Jun 19 06:51:05 2026
***************
*** 4,29 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (short *pa, short *pb, short *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] * pc[i]))
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, short * __restrict__ pa, short * __restrict__ pb, short * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (short *pa, short *pb, short *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, short * __restrict__ pa, short * __restrict__ pb, short * __restrict__ pc)
*************** main1 (int n, short * __restrict__ pa, s
*** 39,57 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   short a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   short b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   short c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,a,b,c);
-   main1 (N-2,a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
--- 23,28 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c	Fri Jun 19 06:51:05 2026
***************
*** 4,29 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (double *pa, double *pb, double *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] * pc[i]))
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, double * __restrict__ pa, double * __restrict__ pb, double * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (double *pa, double *pb, double *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, double * __restrict__ pa, double * __restrict__ pb, double * __restrict__ pc)
*************** main1 (int n, double * __restrict__ pa,
*** 39,57 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   double a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   double b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   double c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,a,b,c);
-   main1 (N-2,a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
--- 23,28 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c	Fri Jun 19 06:51:05 2026
***************
*** 4,29 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (char *pa, char *pb, char *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] + pc[i]))
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, char * __restrict__ pa, char * __restrict__ pb, char * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (char *pa, char *pb, char *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, char * __restrict__ pa, char * __restrict__ pb, char * __restrict__ pc)
*************** main1 (int n, char * __restrict__ pa, ch
*** 39,57 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   char a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   char b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   char c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,a,b,c);
-   main1 (N-2,a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
--- 23,28 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c	Fri Jun 19 06:51:05 2026
***************
*** 4,31 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (double *pd, double *pa, double *pb, double *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] * pc[i]))
! 	abort ();
!       if (pd[i] != 5.0)
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, double * __restrict__ pd, double * __restrict__ pa, double * __restrict__ pb, double * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (double *pd, double *pa, double *pb, double *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, double * __restrict__ pd, double * __restrict__ pa, double * __restrict__ pb, double * __restrict__ pc)
*************** main1 (int n, double * __restrict__ pd,
*** 42,61 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   double a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   double d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   double b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   double c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,&d[1],a,b,c);
-   main1 (N-2,&d[1],a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
--- 24,29 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c	Fri Jun 19 06:51:05 2026
***************
*** 4,31 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (int *pd, int *pa, int *pb, int *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] * pc[i]))
! 	abort ();
!       if (pd[i] != 5.0)
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, int * __restrict__ pd, int * __restrict__ pa, int * __restrict__ pb, int * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (int *pd, int *pa, int *pb, int *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, int * __restrict__ pd, int * __restrict__ pa, int * __restrict__ pb, int * __restrict__ pc)
*************** main1 (int n, int * __restrict__ pd, int
*** 42,61 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   int a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   int d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   int b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   int c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,&d[1],a,b,c);
-   main1 (N-2,&d[1],a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
--- 24,29 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c	Fri Jun 19 06:51:05 2026
***************
*** 4,31 ****
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
- #include <stdlib.h>
- #include <stdarg.h>
  
  #define N 256
  
! __attribute__ ((noinline))
! void bar (short *pd, short *pa, short *pb, short *pc) 
! {
!   int i;
! 
!   /* check results:  */
!   for (i = 0; i < N; i++)
!     {
!       if (pa[i] != (pb[i] * pc[i]))
! 	abort ();
!       if (pd[i] != 5.0)
! 	abort ();
!     }
! 
!   return;
! }
! 
  
  __attribute__ ((noinline)) int
  main1 (int n, short * __restrict__ pd, short * __restrict__ pa, short * __restrict__ pb, short * __restrict__ pc)
--- 4,13 ----
  /* { dg-options "-mdejagnu-cpu=power7 -O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
  
  /* Taken from vect/vect-95.c.  */
  
  #define N 256
  
! void bar (short *pd, short *pa, short *pb, short *pc);
  
  __attribute__ ((noinline)) int
  main1 (int n, short * __restrict__ pd, short * __restrict__ pa, short * __restrict__ pb, short * __restrict__ pc)
*************** main1 (int n, short * __restrict__ pd, s
*** 42,61 ****
  
    return 0;
  }
- 
- int main (void)
- {
-   int i;
-   short a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   short d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-   short b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
-   short c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
- 
-   main1 (N,&d[1],a,b,c);
-   main1 (N-2,&d[1],a,b,c);
- 
-   return 0;
- }
  
  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
--- 24,29 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ftree-vectorize -fno-tree-loop-distribute-patterns -fno-vect-cost-model -fdump-tree-vect-details" } */
+ 
+ /* Taken from vect/vect-align-1.c.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #include "vsx-vectorize-1.c"
+ 
+ int main (void)
+ {
+   int i;
+   struct foo *p = malloc (2*sizeof (struct foo));
+   
+   main1 (p);
+ 
+   /* check results:  */
+   for (i = 0; i < N; i++)
+     {
+       if (p->y[i] != x[i])
+ 	abort ();
+     }
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-1.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-1.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-1.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mzarch -march=z13" } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ typedef __attribute__ ((vector_size (16))) signed __int128 v1ti;
+ typedef __attribute__ ((vector_size (16))) unsigned __int128 uv1ti;
+ 
+ /*
+ ** eq:
+ **	vceqg	(%v[0-9]+),%v[0-9]+,%v[0-9]+
+ **	vpdi	(%v[0-9]+),\1,\1,4
+ **	vn	%v24,(\1,\2|\2,\1)
+ **	br	%r14
+ */
+ 
+ v1ti
+ eq (v1ti x, v1ti y)
+ {
+   return x == y;
+ }
+ 
+ /*
+ ** ueq:
+ **	vceqg	(%v[0-9]+),%v[0-9]+,%v[0-9]+
+ **	vpdi	(%v[0-9]+),\1,\1,4
+ **	vn	%v24,(\1,\2|\2,\1)
+ **	br	%r14
+ */
+ 
+ uv1ti
+ ueq (uv1ti x, uv1ti y)
+ {
+   return x == y;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-2.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-2.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-2.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z13" } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-final { scan-assembler-times {\tvchg\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvchlg\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvceqg\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvpdi\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvn\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvo\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvrepg\t} 1 } } */
+ 
+ typedef __attribute__ ((vector_size (16))) __int128 v1ti;
+ 
+ v1ti
+ gt (v1ti x, v1ti y)
+ {
+   return x > y;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-3.c gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-3.c
*** gcc-14.3.0/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-3.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gcc.target/s390/vector/vec-cmp-emu-3.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z13" } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-final { scan-assembler-times {\tvchlg\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvceqg\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvpdi\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvn\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvo\t} 1 } } */
+ /* { dg-final { scan-assembler-times {\tvrepg\t} 1 } } */
+ 
+ typedef __attribute__ ((vector_size (16))) unsigned __int128 uv1ti;
+ 
+ uv1ti
+ gt (uv1ti x, uv1ti y)
+ {
+   return x > y;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/driver_debuglib.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/driver_debuglib.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/driver_debuglib.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/driver_debuglib.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,2 ----
+ // { dg-do compile }
+ // { dg-additional-options "-debuglib=a -debuglib=b" }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/driver_defaultlib.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/driver_defaultlib.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/driver_defaultlib.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/driver_defaultlib.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,2 ----
+ // { dg-do compile }
+ // { dg-additional-options "-defaultlib=a -defaultlib=b" }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr121477.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr121477.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr121477.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr121477.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do compile }
+ // { dg-additional-options "-fpreview=bitfields" }
+ struct S121477
+ {
+     int x : 4;
+ }
+ 
+ void f121477(S121477 s)
+ {
+     asm {"%0" :: "m" (s.x); } // { dg-error "cannot take address of bit-field" }
+     asm {"%0" : "=m" (s.x); } // { dg-error "cannot take address of bit-field" }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr123046.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123046.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr123046.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123046.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,10 ----
+ // { dg-do compile }
+ ulong pure_hashOf(const ref typeof(*null) key)
+ {
+     return hashOf(key);
+ }
+ 
+ ulong hashOf(const typeof(*null) val)
+ {
+     return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr123264.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123264.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr123264.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123264.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,8 ----
+ // { dg-do compile }
+ // { dg-options "-fdump-tree-original" }
+ struct S123264
+ {
+     void infinite(const S123264) { }
+     auto fn = &infinite;
+ }
+ // { dg-final { scan-tree-dump "const struct S123264" "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr123407a.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123407a.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr123407a.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123407a.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ // { dg-do compile }
+ module pr123407;
+ pragma(mangle, "ice") int fun();
+ pragma(mangle, "ice") int var; // { dg-error "matches conflicting symbols" }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr123407b.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123407b.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr123407b.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123407b.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ // { dg-do compile }
+ module pr123407;
+ int fun();
+ extern(C) int _D8pr1234073funFZi; // { dg-error "matches conflicting symbols" }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr123419.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123419.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr123419.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123419.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do compile }
+ struct S123419 {}
+ 
+ void t123419(T)(T _) {}
+ 
+ void f123419()
+ {
+     t123419(__traits(initSymbol, S123419));
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr123798.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123798.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr123798.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr123798.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ // { dg-do compile }
+ // { dg-additional-options "-fpreview=bitfields" }
+ class C123798
+ {
+     int a : 4;
+     long b : 8;
+ }
+ 
+ struct S123798
+ {
+     int a = 1;
+     int b : 4;
+     long c : 8;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr124026.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr124026.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr124026.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr124026.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,21 ----
+ // { dg-do compile }
+ struct UDA
+ {
+     int delegate() foo;
+ }
+ 
+ static UDA getUDA(alias S)()
+ {
+     return __traits(getAttributes, S)[0];
+ }
+ 
+ struct S124026
+ {
+     @UDA({ return 42; }) int a;
+ }
+ 
+ void f124026()
+ {
+     S124026 m;
+     enum uda = getUDA!(m.a);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/pr125089.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr125089.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/pr125089.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/pr125089.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do compile }
+ struct R125089
+ {
+     S125089.T st;
+ }
+ 
+ struct S125089
+ {
+     struct T
+     {
+         void* v;
+         ~this() {}
+     }
+ 
+     T t;
+     this(R125089 r)
+     {
+         this.t = r.st;
+     }
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/torture/imports/pr119799c.c gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/imports/pr119799c.c
*** gcc-14.3.0/gcc/testsuite/gdc.dg/torture/imports/pr119799c.c	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/imports/pr119799c.c	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ inline void fn119799()
+ {
+     static struct {} s119799;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/torture/pr119799.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/pr119799.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/torture/pr119799.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/pr119799.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do compile }
+ // { dg-additional-files "imports/pr119799c.c" }
+ // { dg-additional-options "-I[srcdir]" }
+ import imports.pr119799c;
+ 
+ void test()
+ {
+     fn119799;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/torture/pr120096.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/pr120096.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/torture/pr120096.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/pr120096.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,18 ----
+ // { dg-do run }
+ // { dg-additional-options "-fpreview=dip1000" }
+ // { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+ struct S
+ {
+     this(int p) nothrow @nogc @safe
+     { f = p; }
+     int f;
+ }
+ 
+ int main() nothrow @nogc @safe
+ {
+     scope S[] sa = [S(1), S(2)];
+ 
+     assert(sa[0].f == 1);
+     assert(sa[1].f == 2);
+     return 0;
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gdc.dg/torture/pr123422.d gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/pr123422.d
*** gcc-14.3.0/gcc/testsuite/gdc.dg/torture/pr123422.d	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gdc.dg/torture/pr123422.d	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,25 ----
+ // { dg-do run }
+ // { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+ struct S123422
+ {
+     S123422* ptr;
+     this(int) { ptr = &this; }
+     this(ref inout S123422) { ptr = &this; }
+ }
+ 
+ struct V123422
+ {
+     S123422 s;
+     this(int) { s = S123422(1); }
+ }
+ 
+ S123422 foo()
+ {
+     return V123422(1).s;
+ }
+ 
+ void main()
+ {
+     S123422 s = foo();
+     assert(&s == s.ptr);
+ }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,96 ----
+ ! { dg-do run }
+ ! PR fortran/121616
+ !
+ ! Test fix for intrinsic assignment to allocatable scalar polymorphic component
+ 
+ program p
+   call pr121616 ()
+   call test_ts  ()
+ end
+ 
+ ! Derived from original PR (contributed by Jean Vézina)
+ subroutine pr121616 ()
+   implicit none
+   integer :: i
+   type general
+      class(*), allocatable :: x
+   end type general
+   type(general) :: a(4), b(4)
+   ! Intrinsic assignment to a variable of unlimited polymorphic type
+   a(1)%x = 1
+   a(2)%x = 3.14
+   a(3)%x = .true.
+   a(4)%x = 'abc'
+   ! The workaround was to use a structure constructor
+   b(1) = general(1)
+   b(2) = general(3.14)
+   b(3) = general(.true.)
+   b(4) = general('abc') 
+   do i = 1, 4
+      if (.not. allocated (a(i)%x)) stop 10+i
+      if (.not. allocated (b(i)%x)) stop 20+i
+      call prt (a(i)%x, b(i)%x)
+   end do
+   do i = 1, 4
+      deallocate (a(i)%x, b(i)%x)
+   end do
+ contains
+   subroutine prt (x, y)
+     class(*), intent(in) :: x, y
+     select type (v=>x)
+     type is (integer)
+        print *,v
+     type is (real)
+        print *,v
+     type is (logical)
+        print *,v
+     type is (character(*))
+        print *,v
+     class default
+        error stop 99
+     end select
+     if (.not. same_type_as (x, y)) stop 30+i
+   end subroutine prt
+ end
+ 
+ ! Contributed by a friend (private communication)
+ subroutine test_ts ()
+   implicit none
+ 
+   type :: t_inner
+     integer :: i
+   end type
+ 
+   type :: t_outer
+     class(t_inner), allocatable :: inner
+   end type
+ 
+   class(t_inner), allocatable :: inner
+   type(t_outer),  allocatable :: outer(:)
+   integer :: i
+ 
+   allocate(t_inner :: inner)
+   inner% i = 0
+ 
+   !------------------------------------------------
+   ! Size of outer must be > 1 for the bug to appear
+   !------------------------------------------------
+   allocate(outer(2))
+ 
+   !------------------------------
+   ! Loop is necessary for the bug
+   !------------------------------
+   do i = 1, size(outer)
+     write(*,*) i
+     !----------------------------------------------------
+     ! Expect intrinsic assignment to polymorphic variable
+     !----------------------------------------------------
+     outer(i)% inner = inner
+     deallocate (outer(i)% inner)
+   end do
+ 
+   write(*,*) 'Loop DONE'
+   deallocate(outer)
+   deallocate(inner)
+   write(*,*) 'Dellocation DONE'
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90	Fri Jun 19 06:51:05 2026
*************** contains
*** 25,30 ****
      allocate (array(1)%bigarr)
    end function
  end
! ! { dg-final { scan-tree-dump-times "builtin_malloc" 3 "original" } }
  ! { dg-final { scan-tree-dump-times "builtin_free" 3 "original" } }
! ! { dg-final { scan-tree-dump-times "while \\(1\\)" 4 "original" } }
--- 25,30 ----
      allocate (array(1)%bigarr)
    end function
  end
! ! { dg-final { scan-tree-dump-times "builtin_malloc" 4 "original" } }
  ! { dg-final { scan-tree-dump-times "builtin_free" 3 "original" } }
! ! { dg-final { scan-tree-dump-times "while \\(1\\)" 5 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03	Fri Jun 19 06:51:05 2026
*************** contains
*** 45,55 ****
      type(c), value :: d
    end subroutine
  
!   type(c) function c_init()  ! { dg-warning "not set" }
    end function
  
    subroutine sub(d)
      type(u), value :: d
    end subroutine
  end program test_pr58586
- 
--- 45,54 ----
      type(c), value :: d
    end subroutine
  
!   type(c) function c_init()
    end function
  
    subroutine sub(d)
      type(u), value :: d
    end subroutine
  end program test_pr58586
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03	Fri Jun 19 06:51:05 2026
*************** contains
*** 51,64 ****
      type(t), value :: d
    end subroutine
  
!   type(c) function c_init() ! { dg-warning "not set" }
    end function
  
    class(c) function c_init2() ! { dg-warning "not set" }
      allocatable :: c_init2
    end function
  
!   type(c) function d_init(this) ! { dg-warning "not set" }
      class(d) :: this
    end function
  
--- 51,64 ----
      type(t), value :: d
    end subroutine
  
!   type(c) function c_init()
    end function
  
    class(c) function c_init2() ! { dg-warning "not set" }
      allocatable :: c_init2
    end function
  
!   type(c) function d_init(this)
      class(d) :: this
    end function
  
*************** contains
*** 71,77 ****
      allocatable :: t_init
    end function
  
!   type(t) function static_t_init() ! { dg-warning "not set" }
    end function
  end module test_pr58586_mod
  
--- 71,77 ----
      allocatable :: t_init
    end function
  
!   type(t) function static_t_init()
    end function
  end module test_pr58586_mod
  
*************** program test_pr58586
*** 102,105 ****
    call add_c(oe%init())
    deallocate(oe)
  end program
- 
--- 102,104 ----
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03	Fri Jun 19 06:51:05 2026
*************** program main
*** 210,214 ****
    call v%free()
    deallocate(av)
  end program
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 22 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 29 "original" } }
--- 210,214 ----
    call v%free()
    deallocate(av)
  end program
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 23 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 29 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/associate_75.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/associate_75.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/associate_75.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/associate_75.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do run }
+ !
+ ! Test fix for PR121060.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module subdomain_m
+   implicit none
+ 
+   type subdomain_t 
+     real :: s_ = 99.
+   contains
+     generic :: operator(.laplacian.) => laplacian
+     procedure laplacian
+   end type
+ 
+ contains
+ 
+   function laplacian(rhs)
+     class(subdomain_t), intent(in) :: rhs
+     type(subdomain_t) laplacian
+     laplacian%s_ = rhs%s_ + 42
+   end function
+ 
+ end module
+ 
+   use subdomain_m
+   implicit none
+ 
+   type operands_t
+     real :: s_
+   end type
+ 
+   type(subdomain_t) phi
+   type(operands_t) operands
+ 
+   associate(laplacian_phi => .laplacian. phi) ! ICE because specific not found.
+     operands = approximates(laplacian_phi%s_)
+   end associate
+ 
+   if (int (operands%s_) /= 42) stop 1
+ contains
+ 
+   function approximates(actual)
+     real actual 
+     type(operands_t) approximates
+     approximates%s_ = actual - 99
+   end function
+ 
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/dependent_decls_2.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/dependent_decls_2.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/dependent_decls_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/dependent_decls_2.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,89 ----
+ ! { dg-do run }
+ !
+ ! Fix for PR59104 in which the dependence on the old style function result
+ ! was not taken into account in the ordering of auto array allocation and
+ ! characters with dependent lengths.
+ !
+ ! Contributed by Tobias Burnus  <burnus@gcc.gnu.org>
+ !
+ module m
+    implicit none
+    integer, parameter :: dp = kind([double precision::])
+    contains
+       function f(x)
+          integer, intent(in) :: x
+          real(dp) f(x/2)
+          real(dp) g(x/2)
+          integer y(size (f)+1)              ! This was the original problem
+          integer z(size (f) + size (y))     ! Found in development of the fix
+          integer w(size (f) + size (y) + x) ! Check dummy is OK
+          integer :: l1(size(y))
+          integer :: l2(size(z))
+          integer :: l3(size(w))
+          f = 10.0
+          y = 1                              ! Stop -Wall from complaining
+          z = 1; g = 1; w = 1; l1 = 1; l2 = 1; l3 = 1
+          if (size (f) .ne. 1) stop 1
+          if (size (g) .ne. 1) stop 2
+          if (size (y) .ne. 2) stop 3
+          if (size (z) .ne. 3) stop 4
+          if (size (w) .ne. 5) stop 5
+          if (size (l1) .ne. 2) stop 6       ! Check indirect dependencies
+          if (size (l2) .ne. 3) stop 7
+          if (size (l3) .ne. 5) stop 8
+ 
+       end function f
+       function e(x) result(f)
+          integer, intent(in) :: x
+          real(dp) f(x/2)
+          real(dp) g(x/2)
+          integer y(size (f)+1)
+          integer z(size (f) + size (y))     ! As was this.
+          integer w(size (f) + size (y) + x)
+          integer :: l1(size(y))
+          integer :: l2(size(z))
+          integer :: l3(size(w))
+          f = 10.0
+          y = 1; z = 1; g = 1; w = 1; l1 = 1; l2 = 1; l3 = 1
+          if (size (f) .ne. 2) stop 9
+          if (size (g) .ne. 2) stop 10
+          if (size (y) .ne. 3) stop 11
+          if (size (z) .ne. 5) stop 12
+          if (size (w) .ne. 9) stop 13
+          if (size (l1) .ne. 3) stop 14      ! Check indirect dependencies
+          if (size (l2) .ne. 5) stop 15
+          if (size (l3) .ne. 9) stop 16
+       end function
+       function d(x)  ! After fixes to arrays, what was needed was known!
+         integer, intent(in) :: x
+         character(len = x/2) :: d
+         character(len = len (d)) :: line
+         character(len = len (d) + len (line)) :: line2
+         character(len = len (d) + len (line) + x) :: line3
+ ! Commented out lines give implicit type warnings with gfortran and nagfor
+ !        character(len = len (d)) :: line4 (len (line3))
+         character(len = len (line3)) :: line4 (len (line3))
+ !        character(len = size(len4, 1)) :: line5
+         line = repeat ("a", len (d))
+         line2 = repeat ("b", x)
+         line3 = repeat ("c", len (line3))
+         if (len (line2) .ne. x) stop 17
+         if (line3 .ne. "cccccccc") stop 18
+         d = line
+         line4 = line3
+         if (size (line4) .ne. 8) stop 19
+         if (any (line4 .ne. "cccccccc")) stop 20
+       end
+ end module m
+ 
+ program p
+    use m
+    implicit none
+    real(dp) y
+ 
+    y = sum (f (2))
+    if (int (y) .ne. 10) stop 21
+    y = sum (e (4))
+    if (int (y) .ne. 20) stop 22
+    if (d (4) .ne. "aa") stop 23
+ end program p
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/dependent_decls_3.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/dependent_decls_3.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/dependent_decls_3.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/dependent_decls_3.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,26 ----
+ ! { dg-do run }
+ !
+ ! Fix a regression caused by the fix for PR59104.
+ !
+ ! Contributed by Harald Anlauf  <anlauf@gcc.gnu.org>
+ !
+ program p
+   implicit none
+   integer, parameter :: nx = 64, ny = 32
+   real               :: x(nx,ny), s(nx/2,ny), d(nx/2,ny)
+ 
+   s = 0.0
+   d = 0.0
+   call sub (x,s,d)
+   if (sum(s) .ne. 256) stop 1
+   if (sum(d) .ne. 256) stop 2  ! Stopped with sum(d) == 0.
+ contains
+   subroutine sub  (v, w, d)
+     real, intent(in)  :: v(:,:)
+     real, intent(out), dimension (size (v,dim=1)/4,size (v,dim=2)/2) :: w, d
+     w = 1.0
+     d = 1.0
+     if (any (shape (w) .ne. [nx/4, ny/2])) stop 3
+     if (any (shape (d) .ne. [nx/4, ny/2])) print *, shape (d)  ! Printed "0 0" here
+   end subroutine sub
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90	Fri Jun 19 06:51:05 2026
*************** contains
*** 129,133 ****
      prt_spec = name
    end function new_prt_spec3
  end program main
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 15 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 33 "original" } }
--- 129,133 ----
      prt_spec = name
    end function new_prt_spec3
  end program main
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 16 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 33 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_init_7.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_init_7.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_init_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_init_7.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,58 ----
+ ! { dg-do run }
+ ! Check that finalizable intent(out) dummy arguments are first finalized
+ ! and then correctly default-initialized (PR116829)
+ !
+ ! Contributed by Tomas Trnka  <trnka@scm.com>
+ !
+ module FinalizableIntentOutTestModule
+    implicit none
+ 
+    type :: AapType
+       integer  :: i = 0
+    contains
+       final    :: Finalizer
+    end type
+    integer :: ctr = 0
+    logical :: err1 = .false.
+    logical :: err2 = .false.
+ contains
+ 
+    subroutine Finalizer(self)
+       type(AapType), intent(inout) :: self
+ 
+       ! Fail if Finalizer gets called again on an already finalized object
+       if (self%i == 42) err1 = .true.
+ 
+       self%i = 42 ! Nobody should ever see this value after finalization
+       ctr = ctr + 1
+    end subroutine
+ 
+ end module
+ 
+ 
+ program test
+    use FinalizableIntentOutTestModule
+ 
+    implicit none
+ 
+    type(AapType) :: aap
+ 
+    ! Set "i" to nonzero so that initialization in MakeAap has something to do
+    aap%i = 1
+ 
+    call MakeAap(aap)
+    
+    if (err1) stop 1
+    if (err2) stop 2      ! This was failing
+    if (ctr /= 1) stop 3  ! Belt and braces to ensure number of final calls correct.
+ 
+ contains
+ 
+    subroutine MakeAap(a)
+       type(AapType), intent(out) :: a
+ 
+       ! Fail if "a" wasn't initialized properly
+       if (a%i /= 0)  err2 = .true.
+    end subroutine
+ 
+ end program
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_result_3.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_result_3.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_result_3.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_result_3.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,158 ----
+ ! { dg-do run }
+ ! PR fortran/98454 - default-initialization of derived-type function results
+ 
+ program test
+   implicit none
+   type t
+      integer :: unit = -1
+   end type t
+   type u
+      integer, allocatable :: unit(:)
+   end type u
+   type(t) :: x, x3(3)
+   type(u) :: y, y4(4)
+ 
+   ! Scalar function result, DT with default initializer
+   x = t(42)
+   if (x% unit /= 42) stop 1
+   x = g()
+   if (x% unit /= -1) stop 2
+   x = t(42)
+   x = f()
+   if (x% unit /= -1) stop 3
+   x = t(42)
+   x = h()
+   if (x% unit /= -1) stop 4
+   x = t(42)
+   x = k()
+   if (x% unit /= -1) stop 5
+ 
+   ! Array function result, DT with default initializer
+   x3 = t(13)
+   if (any (x3% unit /= 13)) stop 11
+   x3 = f3()
+   if (any (x3% unit /= -1)) stop 12
+   x3 = t(13)
+   x3 = g3()
+   if (any (x3% unit /= -1)) stop 13
+   x3 = t(13)
+   x3 = h3()
+   if (any (x3% unit /= -1)) stop 14
+   x3 = t(13)
+   x3 = k3()
+   if (any (x3% unit /= -1)) stop 15
+ 
+   ! Scalar function result, DT with allocatable component
+   y = u()
+   if (allocated (y% unit)) stop 21
+   allocate (y% unit(42))
+   y = m()
+   if (allocated (y% unit)) stop 22
+   allocate (y% unit(42))
+   y = n()
+   if (allocated (y% unit)) stop 23
+   allocate (y% unit(42))
+   y = o()
+   if (allocated (y% unit)) stop 24
+   allocate (y% unit(42))
+   y = p()
+   if (allocated (y% unit)) stop 25
+ 
+   ! Array function result, DT with allocatable component
+   y4 = u()
+   if (allocated (y4(1)% unit)) stop 31
+   allocate (y4(1)% unit(42))
+   y4 = m4()
+   if (allocated (y4(1)% unit)) stop 32
+   y4 = u()
+   allocate (y4(1)% unit(42))
+   y4 = n4()
+   if (allocated (y4(1)% unit)) stop 33
+ 
+   y4 = u()
+   allocate (y4(1)% unit(42))
+   y4 = o4()
+   if (allocated (y4(1)% unit)) stop 34
+   y4 = u()
+   allocate (y4(1)% unit(42))
+   y4 = p4()
+   if (allocated (y4(1)% unit)) stop 35
+ 
+ contains
+ 
+   ! Function result not referenced within function body
+   function f()
+     type(t) :: f
+   end function f
+ 
+   function k() result (f)
+     type(t) :: f
+   end function k
+ 
+   ! Function result referenced within function body
+   function g()
+     type(t) :: g
+     if (g% unit /= -1) stop 41
+   end function g
+ 
+   function h() result (g)
+     type(t) :: g
+     if (g% unit /= -1) stop 42
+   end function h
+ 
+   ! Function result not referenced within function body
+   function f3 ()
+     type(t) :: f3(3)
+   end function f3
+ 
+   function k3() result (f3)
+     type(t) :: f3(3)
+   end function k3
+ 
+   ! Function result referenced within function body
+   function g3()
+     type(t) :: g3(3)
+     if (any (g3% unit /= -1)) stop 43
+   end function g3
+ 
+   function h3() result (g3)
+     type(t) :: g3(3)
+     if (any (g3% unit /= -1)) stop 44
+   end function h3
+ 
+   function m()
+     type(u) :: m
+   end function m
+ 
+   function n() result (f)
+     type(u) :: f
+   end function n
+ 
+   function o()
+     type(u) :: o
+     if (allocated (o% unit)) stop 71
+   end function o
+ 
+   function p() result (f)
+     type(u) :: f
+     if (allocated (f% unit)) stop 72
+   end function p
+ 
+   function m4()
+     type(u) :: m4(4)
+   end function m4
+ 
+   function n4() result (f)
+     type(u) :: f(4)
+   end function n4
+ 
+   function o4()
+     type(u) :: o4(4)
+     if (allocated (o4(1)% unit)) stop 73
+   end function o4
+ 
+   function p4() result (f)
+     type(u) :: f(4)
+     if (allocated (f(1)% unit)) stop 74
+   end function p4
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_result_5.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_result_5.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/derived_result_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/derived_result_5.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,123 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -Wreturn-type" }
+ !
+ ! PR fortran/85750 - default-initialization and functions returning derived type
+ 
+ module bar
+   implicit none
+   type ilist
+     integer          :: count = 42
+     integer, pointer :: ptr(:) => null()
+   end type ilist
+ 
+   type jlist
+     real, allocatable :: a(:)
+     integer           :: count = 23
+   end type jlist
+ 
+ contains
+ 
+   function make_list(i)
+     integer,     intent(in)   :: i
+     type(ilist), dimension(2) :: make_list
+     make_list(i)%count = i
+   end function make_list
+ 
+   function make_list_res(i) result(list)
+     integer,     intent(in)   :: i
+     type(ilist), dimension(2) :: list
+     list(i)%count = i
+   end function make_list_res
+ 
+   function make_jlist(i)
+     integer,     intent(in)   :: i
+     type(jlist), dimension(2) :: make_jlist
+     make_jlist(i)%count = i
+   end function make_jlist
+ 
+   function make_jlist_res(i) result(list)
+     integer,     intent(in)   :: i
+     type(jlist), dimension(2) :: list
+     list(i)%count = i
+   end function make_jlist_res
+ 
+   function empty_ilist()
+     type(ilist), dimension(2) :: empty_ilist
+   end function
+ 
+   function empty_jlist()
+     type(jlist), dimension(2) :: empty_jlist
+   end function
+ 
+   function empty_ilist_res() result (res)
+     type(ilist), dimension(2) :: res
+   end function
+ 
+   function empty_jlist_res() result (res)
+     type(jlist), dimension(2) :: res
+   end function
+ 
+ end module bar
+ 
+ program foo
+   use bar
+   implicit none
+   type(ilist)              :: mylist(2) = ilist(count=-2)
+   type(jlist), allocatable :: yourlist(:)
+ 
+   mylist = ilist(count=-1)
+   if (any (mylist%count /= [-1,-1])) stop 1
+   mylist = empty_ilist()
+   if (any (mylist%count /= [42,42])) stop 2
+   mylist = ilist(count=-1)
+   mylist = empty_ilist_res()
+   if (any (mylist%count /= [42,42])) stop 3
+ 
+   allocate(yourlist(1:2))
+   if (any (yourlist%count /= [23,23])) stop 4
+   yourlist = jlist(count=-1)
+   if (any (yourlist%count /= [-1,-1])) stop 5
+   yourlist = empty_jlist()
+   if (any (yourlist%count /= [23,23])) stop 6
+   yourlist = jlist(count=-1)
+   yourlist = empty_jlist_res()
+   if (any (yourlist%count /= [23,23])) stop 7
+ 
+   mylist = make_list(1)
+   if (any (mylist%count /= [1,42])) stop 11
+   mylist = make_list(2)
+   if (any (mylist%count /= [42,2])) stop 12
+   mylist = (make_list(1))
+   if (any (mylist%count /= [1,42])) stop 13
+   mylist = [make_list(2)]
+   if (any (mylist%count /= [42,2])) stop 14
+ 
+   mylist = make_list_res(1)
+   if (any (mylist%count /= [1,42])) stop 21
+   mylist = make_list_res(2)
+   if (any (mylist%count /= [42,2])) stop 22
+   mylist = (make_list_res(1))
+   if (any (mylist%count /= [1,42])) stop 23
+   mylist = [make_list_res(2)]
+   if (any (mylist%count /= [42,2])) stop 24
+ 
+   yourlist = make_jlist(1)
+   if (any (yourlist%count /= [1,23])) stop 31
+   yourlist = make_jlist(2)
+   if (any (yourlist%count /= [23,2])) stop 32
+   yourlist = (make_jlist(1))
+   if (any (yourlist%count /= [1,23])) stop 33
+   yourlist = [make_jlist(2)]
+   if (any (yourlist%count /= [23,2])) stop 34
+ 
+   yourlist = make_jlist_res(1)
+   if (any (yourlist%count /= [1,23])) stop 41
+   yourlist = make_jlist_res(2)
+   if (any (yourlist%count /= [23,2])) stop 42
+   yourlist = (make_jlist_res(1))
+   if (any (yourlist%count /= [1,23])) stop 43
+   yourlist = [make_jlist_res(2)]
+   if (any (yourlist%count /= [23,2])) stop 44
+ 
+   deallocate (yourlist)
+ end program foo
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,22 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fopenmp" }
+ 
+ module m_108382_a
+   implicit none
+   integer :: x, y
+ 
+ !$acc declare copyin(x, &
+ !$acc   y)
+ !$omp declare target(x, &
+ !$omp   y)
+ end module m_108382_a
+ 
+ module m_108382_b
+   implicit none
+   integer :: x, y
+ 
+ !$omp declare target(x, &
+ !$omp   y)
+ !$acc declare copyin(x, &
+ !$acc   y)
+ end module m_108382_b
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/goacc/pr120723.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/goacc/pr120723.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/goacc/pr120723.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/goacc/pr120723.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,20 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fdump-tree-original" }
+ !
+ ! PR fortran/120723 - scalar OpenACC attach/detach must not lower through a
+ ! standalone pointer-mapping node.
+ 
+ implicit none (type, external)
+ integer, pointer :: a, b(:)
+ integer, allocatable :: c, d(:)
+ 
+ ! Scalar pointer and allocatable items used to ICE here.
+ !$acc enter data attach(a, c)
+ !$acc enter data attach(b, d)
+ !$acc exit data detach(a, c)
+ !$acc exit data detach(b, d)
+ 
+ ! { dg-final { scan-tree-dump-times "(?n)#pragma acc enter data map\\(attach:a \\\[bias: 0\\\]\\) map\\(attach:c \\\[bias: 0\\\]\\);$" 1 "original" } }
+ ! { dg-final { scan-tree-dump-times "(?n)#pragma acc exit data map\\(detach:a \\\[bias: 0\\\]\\) map\\(detach:c \\\[bias: 0\\\]\\);$" 1 "original" } }
+ 
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr101760.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr101760.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr101760.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr101760.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ ! PR fortran/101760
+ ! { dg-do compile }
+ ! { dg-options "-fopenmp -O1" }
+ 
+ ! Verify that deferred-length character variables with the TARGET attribute
+ ! in OpenMP target regions do not ICE during inlining.
+ 
+ program p
+    character(:), allocatable, target :: x
+    logical :: l
+    !$omp target map(from: l)
+    l = allocated (x)
+    !$omp end target
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr102314.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr102314.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr102314.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr102314.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,19 ----
+ ! PR fortran/102314
+ ! { dg-do compile }
+ ! { dg-options "-fopenmp -O2" }
+ 
+ ! Verify that deferred-length character allocatables used inside
+ ! OpenMP target regions do not ICE during SSA verification or inlining.
+ 
+ program p
+    character(:), allocatable :: y
+    call s(y)
+    !$omp target
+    y = 'abc'
+    !$omp end target
+ contains
+    subroutine s(x)
+       character(:), allocatable :: x
+       x = '123'
+    end
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr102430.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr102430.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr102430.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr102430.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-do compile }
+ ! { dg-options "-fopenmp" }
+ ! PR fortran/102430
+ 
+ program p
+   integer :: a(2)
+   !$omp parallel do linear(a)  ! { dg-error "Sorry, array" }
+   do i = 1, 8
+     a = a + 1
+   end do
+ end program p
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr107425.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr107425.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr107425.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr107425.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-do compile }
+ ! { dg-options "-fopenmp" }
+ !
+ ! PR fortran/107425
+ ! ICE in gimplify_var_or_parm_decl when an implicitly typed variable
+ ! is used as a subscript in an iterator depend clause.
+ 
+ program p
+    integer :: x(8)
+    !$omp taskwait depend(iterator(i=1:8), in:x(j))
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr98203.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr98203.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/gomp/pr98203.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/gomp/pr98203.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do compile }
+ ! PR fortran/98203
+ ! Contributed by G. Steinmetz <gscfq@t-online.de>
+ !
+ ! ICE in gfc_trans_omp_do with collapse(2) and non-unit stride.
+ 
+ subroutine s
+   integer :: i, j
+   !$omp parallel do collapse(2)
+   do i = 1, 10, 2
+     do j = 1, 10
+     end do
+   end do
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/implied_do_io_9.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/implied_do_io_9.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/implied_do_io_9.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,72 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2" }
+ !
+ ! PR fortran/107968
+ !
+ ! Verify that array I/O optimization is not used for a section
+ ! of an array pointer as the pointee can be non-contiguous
+ !
+ ! Contributed by Nils Dreier
+ 
+ PROGRAM foo
+   implicit none
+ 
+   TYPE t_geographical_coordinates
+      REAL :: lon
+      REAL :: lat
+   END TYPE t_geographical_coordinates
+ 
+   TYPE t_vertices
+      REAL, POINTER          :: vlon(:) => null()
+      REAL, POINTER          :: vlat(:) => null()
+   END TYPE t_vertices
+ 
+   TYPE(t_geographical_coordinates), TARGET :: vertex(2)
+   TYPE(t_vertices), POINTER :: vertices_pointer
+   TYPE(t_vertices), TARGET  :: vertices_target
+ 
+   character(24)           :: s0, s1, s2
+   character(*), parameter :: fmt = '(2f8.3)'
+ 
+   ! initialization
+   vertex%lon = [1,3]
+   vertex%lat = [2,4]
+ 
+   ! obtain pointer to (non-contiguous) field
+   vertices_target%vlon => vertex%lon
+ 
+   ! reference output of write
+   write (s0,fmt) vertex%lon
+ 
+   ! set pointer vertices_pointer in a subroutine
+   CALL set_vertices_pointer(vertices_target)
+ 
+   write (s1,fmt) vertices_pointer%vlon
+   write (s2,fmt) vertices_pointer%vlon(1:)
+   if (s1 /= s0 .or. s2 /= s0) then
+      print *, s0, s1, s2
+      stop 3
+   end if
+ 
+ CONTAINS
+ 
+   SUBROUTINE set_vertices_pointer(vertices)
+     TYPE(t_vertices), POINTER, INTENT(IN) :: vertices
+ 
+     vertices_pointer => vertices
+ 
+     write (s1,fmt) vertices        %vlon
+     write (s2,fmt) vertices        %vlon(1:)
+     if (s1 /= s0 .or. s2 /= s0) then
+        print *, s0, s1, s2
+        stop 1
+     end if
+ 
+     write (s1,fmt) vertices_pointer%vlon
+     write (s2,fmt) vertices_pointer%vlon(1:)
+     if (s1 /= s0 .or. s2 /= s0) then
+        print *, s0, s1, s2
+        stop 2
+     end if
+   END SUBROUTINE set_vertices_pointer
+ END PROGRAM foo
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/inline_matmul_27.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/inline_matmul_27.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/inline_matmul_27.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/inline_matmul_27.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,63 ----
+ ! { dg-do run }
+ ! { dg-options "-O2 -fcheck=bounds -fno-automatic" }
+ ! PR fortran/106546 - FE temporaries have to be automatic
+ ! Original test case by Solomon Gibbs
+ 
+ subroutine do_multiply()
+   implicit none
+   
+   integer :: rank
+   real(8) :: draw
+ 
+   real(8) :: x1(6), x2(6)
+   real(8), allocatable :: K(:,:), J(:,:), z(:)
+ 
+   character(len=300) :: out
+   ! Randomly select rank of operation 0 ... 6
+   call random_number(draw)
+   if (draw .lt. 1/7.0d0) then
+      rank = 0
+   elseif (draw .lt. 2/7.0d0) then
+      rank = 1
+   elseif (draw .lt. 3/7.0d0) then
+      rank = 2
+   elseif (draw .lt. 4/7.0d0) then
+      rank = 3
+   elseif (draw .lt. 5/7.0d0) then
+      rank = 4
+   elseif (draw .lt. 6/7.0d0) then
+      rank = 5
+   else
+      rank = 6
+   endif
+ 
+   allocate(K(rank, 6))
+   allocate(J(rank, rank))
+   allocate(z(rank))
+ 
+   call random_number(x1)
+   call random_number(x2)
+   call random_number(K)
+   call random_number(J)
+   call random_number(z)
+ 
+   ! multiply allocatables using array temporaries
+   ! Problem occurs here
+   z = matmul(J, matmul(K, x2 - x1))
+ 
+   ! Output z to prevent optimizer elimination
+   write (out,*) rank," ",z
+ 
+   deallocate(z, J, K)
+   
+ end subroutine do_multiply
+   
+ program bogus
+   implicit none
+ 
+   integer :: i
+   do i=1,100
+      call do_multiply()
+   end do
+   
+ end program bogus
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/interface_63.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/interface_63.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/interface_63.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/interface_63.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,97 ----
+ ! { dg-do compile }
+ ! PR fortran/120784 - fix checking of renamed-on-use interface name
+ !
+ ! Contributed by Matt Thompson  <matthew.thompson at nasa dot gov>
+ 
+ module A_mod
+   implicit none
+ 
+   interface Get
+      procedure :: get_1
+      procedure :: get_2
+   end interface Get
+ 
+ contains
+ 
+   subroutine get_1(i)
+     integer :: i
+     i = 5
+   end subroutine get_1
+ 
+   subroutine get_2(x)
+     real :: x
+     x = 4
+   end subroutine get_2
+ end module A_mod
+ 
+ module B_mod
+   use A_mod, only : MyGet => Get
+   implicit none
+ 
+   interface MyGet
+      procedure :: other_get
+   end interface MyGet
+ 
+ contains
+ 
+   subroutine other_get(c)
+     character(1) :: c
+     c = 'a'
+   end subroutine other_get
+ 
+   subroutine check_get ()
+     character :: c
+     integer   :: i
+     real      :: r
+     call myget (c)
+     call myget (i)
+     call myget (r)
+   end subroutine check_get
+ 
+ end module B_MOD
+ 
+ program p
+   use b_mod, only: myget
+   implicit none
+   character :: c
+   integer   :: i
+   real      :: r
+   call myget (c)
+   call myget (i)
+   call myget (r)
+ end
+ 
+ ! Check that we do not regress on the following:
+ 
+ module mod1
+   implicit none
+ 
+   interface local
+     module procedure local_data
+   end interface local
+ 
+ contains
+ 
+   logical function local_data (data) result (local)
+     real, intent(in) :: data
+     local = .true.
+   end function local_data
+ 
+ end module mod1
+ 
+ module mod2
+   use mod1, only: local
+   implicit none
+ 
+   interface local
+      module procedure local_invt
+   end interface local
+ 
+ contains
+ 
+   logical function local_invt (invt) result (local)
+     integer, intent(in) :: invt
+     local = .true.
+   end function local_invt
+ 
+ end module mod2
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/interface_abstract_6.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/interface_abstract_6.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/interface_abstract_6.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,53 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original" }
+ !
+ ! PR fortran/122206
+ !
+ ! Verify that procedure interfaces are "stable"
+ 
+ module test_example
+   use, intrinsic :: iso_c_binding, only: c_double, c_int
+   implicit none
+ 
+   abstract interface
+      function simple_interface(iarg1, arg2) bind(c) result(res)
+        import c_double, c_int
+        integer(c_int), value, intent(in) :: iarg1
+        real(c_double), value, intent(in) :: arg2
+        real(c_double) :: res
+      end function simple_interface
+   end interface
+ 
+   procedure(simple_interface), bind(c,name="simple_function") :: simple_function
+ 
+   interface
+      function other_interface(iarg1, arg2) result(res)
+        import c_double, c_int
+        integer(c_int), value, intent(in) :: iarg1
+        real(c_double), value, intent(in) :: arg2
+        real(c_double) :: res
+      end function other_interface
+   end interface
+ 
+   procedure(other_interface) :: other_function
+ 
+ contains
+   subroutine test_example_interface
+     implicit none
+     integer(c_int) :: iarg1 = 2
+     real(c_double) :: arg2  = 10.
+     real(c_double) :: val1, val2
+ 
+     val1 = simple_function(iarg1, arg2)
+     val2 = simple_function(iarg1, arg2)
+     if (val1 /= val2) stop 1
+ 
+     val1 = other_function(iarg1, arg2)
+     val2 = other_function(iarg1, arg2)
+     if (val1 /= val2) stop 2
+ 
+   end subroutine test_example_interface
+ end module test_example
+ 
+ ! { dg-final { scan-tree-dump-times "simple_function \\(iarg1, arg2\\);" 2 "original"} }
+ ! { dg-final { scan-tree-dump-times "other_function \\(iarg1, arg2\\);" 2 "original"} }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pdt_26.f03 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pdt_26.f03
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pdt_26.f03	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pdt_26.f03	Fri Jun 19 06:51:05 2026
*************** program test_pdt
*** 43,46 ****
    if (any (c(1)%foo .ne. [13,15,17])) STOP 2
  end program test_pdt
  ! { dg-final { scan-tree-dump-times "__builtin_free" 8 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 8 "original" } }
--- 43,46 ----
    if (any (c(1)%foo .ne. [13,15,17])) STOP 2
  end program test_pdt
  ! { dg-final { scan-tree-dump-times "__builtin_free" 8 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 9 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pointer_check_15.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pointer_check_15.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pointer_check_15.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pointer_check_15.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,46 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O -fcheck=pointer -fdump-tree-original" }
+ !
+ ! PR fortran/121145
+ ! Erroneous runtime error: Proc-pointer actual argument 'ptr' is not associated
+ !
+ ! Contributed by Federico Perini.
+ 
+ module m
+   implicit none
+ 
+   abstract interface
+      subroutine fun(x)
+        real, intent(in) :: x
+      end subroutine fun
+   end interface   
+ 
+ contains
+ 
+   subroutine with_fun(sub)
+     procedure(fun), optional :: sub
+     if (present(sub)) stop 1
+   end subroutine   
+ 
+   subroutine with_non_optional(sub)
+     procedure(fun) :: sub
+   end subroutine   
+ 
+ end module m
+ 
+ program p
+   use m
+   implicit none
+ 
+   procedure(fun), pointer :: ptr1 => null()
+   procedure(fun), pointer :: ptr2 => null()
+   
+   call with_fun()
+   call with_fun(sub=ptr1)               ! no runtime check here
+ 
+   if (associated (ptr2)) then
+      call with_non_optional(sub=ptr2)   ! runtime check here
+   end if
+ end  
+ 
+ ! { dg-final { scan-tree-dump-times "Proc-pointer actual argument .'ptr2.'" 1 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr100155.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr100155.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr100155.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr100155.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,43 ----
+ ! { dg-do run }
+ ! Test the fix for PR100155 in which the parentheses caused an ICE
+ ! in evaluation the specification expression for 'z'. Note that the
+ ! recursive attribute is not a factor in the ICE (see PR105168).
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module m1
+    type t
+      integer, allocatable :: i
+    end type
+    integer :: ctr = 0, vals = 0
+    integer, parameter :: no_calls = 6
+ contains
+    recursive function f(x) result(z)
+       class(t) :: x(:)
+       type(t) :: z(size(x)+1)
+       class(t), allocatable :: a(:)
+       type(t), allocatable :: b(:)
+       ctr = ctr + 1
+       allocate (t :: a(1))
+       a(1)%i = ctr
+       if (ctr <= no_calls - 1) then
+           b = f((a)) ! <== parentheses
+       else
+           allocate (b(a(1)%i))
+           b(1)%i = ctr
+       end if
+       vals = vals + b(1)%i
+       z(1) = t(b(1)%i)
+    end 
+ end module m1
+ 
+   use m1
+   type (t) :: dummy(1)
+   type(t), allocatable :: res(:)
+   dummy = t(1)
+   res = f (dummy);
+   if (ctr /= no_calls) stop 1
+   if (vals /= (2 * sum ([(i, i = 1, no_calls)]) - no_calls)) stop 2
+   if (size (res) /= 2) stop 3
+   deallocate (res)
+   deallocate (dummy(1)%i)
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr100194.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr100194.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr100194.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr100194.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,98 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/100194
+ ! ICE in gfc_trans_create_temp_array when passing a non-contiguous
+ ! assumed-rank array to a contiguous assumed-rank dummy argument.
+ !
+ ! Contributed by Martin Diehl <m.diehl@kit.edu>
+ 
+ subroutine s(x)
+    real :: x(..)
+    call t(x)
+ contains
+    subroutine t(y)
+       real, contiguous :: y(..)
+    end
+ end
+ 
+ ! The following from the PR, these compiled OK before the patch.
+ !
+ ! Contributed by G. Steinmetz <gscfq@t-online.de>
+ 
+ subroutine z3(x)
+    real, contiguous :: x(..)
+    call t(x)
+ contains
+    subroutine t(y)
+       real, contiguous :: y(..)
+    end
+ end
+ 
+ subroutine z2(x)
+    real, contiguous :: x(..)
+    call t(x)
+ contains
+    subroutine t(y)
+       real :: y(..)
+    end
+ end
+ 
+ ! Runtime follow-up from Paul Thomas <pault@gcc.gnu.org>.
+ 
+ program p
+   implicit none
+   interface
+     subroutine pr100194_runtime(x, res)
+       integer :: x(..)
+       integer, allocatable :: res(:)
+     end subroutine pr100194_runtime
+   end interface
+ 
+   type :: ty
+     character(4) :: chr
+     integer :: r(2)
+   end type ty
+ 
+   integer :: x(4) = [42, 84, 126, 168]
+   type(ty) :: y = ty("abcd", [42, 84])
+   integer, allocatable :: z(:)
+   integer, allocatable :: u(:, :)
+ 
+   u = reshape ([x, 4 * x, 16 * x, 64 * x], [4, 4])
+ 
+   call pr100194_runtime(x, z)
+   if (any (z /= [84, 168, 252, 336])) stop 1
+ 
+   call pr100194_runtime(x(1:4:2), z)
+   if (any (z /= [84, 252])) stop 2
+ 
+   call pr100194_runtime(x([1, 3, 4, 2]), z)
+   if (any (z /= [84, 252, 336, 168])) stop 3
+ 
+   call pr100194_runtime(y%r, z)
+   if (any (z /= [84, 168])) stop 4
+ 
+   call pr100194_runtime(u(1, :), z)
+   if (any (z /= [84, 336, 1344, 5376])) stop 5
+ 
+   call pr100194_runtime(u(:, 1), z)
+   if (any (z /= [84, 168, 252, 336])) stop 6
+ end program p
+ 
+ subroutine pr100194_runtime(x, res)
+   integer :: x(..)
+   integer, allocatable :: res(:)
+ 
+   call t(x)
+ 
+ contains
+ 
+   subroutine t(y)
+     integer, contiguous :: y(..)
+ 
+     select rank (y)
+       rank (1)
+         res = 2 * y
+     end select
+   end subroutine t
+ end subroutine pr100194_runtime
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr102459.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr102459.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr102459.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr102459.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fopenmp" }
+ 
+ program p
+   type t
+     integer :: a(2)
+   end type
+   type(t) :: x(8)
+ 
+   !$omp task depend (iterator(j=1:8), out:x(j)%a)
+   !$omp end task
+ 
+   !$omp task depend (iterator(j=1:8), out:x(j)%a(1))
+   !$omp end task
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr102596.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr102596.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr102596.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr102596.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,13 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fopenmp" }
+ 
+ program p
+   integer, allocatable :: r
+ 
+   allocate (r)
+   r = 0
+ 
+   !$omp target parallel reduction(task, +:r)
+   r = r + 1
+   !$omp end target parallel
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr102619.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr102619.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr102619.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr102619.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR102619.
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ program p
+   implicit none
+   real :: w(2,3)
+   real, allocatable :: y(:)
+   y = h(w)                        ! Caused an ICE
+   if (size (y) /= product (shape (w))) stop 1
+   if (any (int (y) /= [1,2,3,4,5,6])) stop 2
+   deallocate (y)
+ contains
+   function h(x) result (g)
+     real :: x(..)
+     real :: g(product(shape(x)))
+     integer :: i
+     if (any (shape (x) /= shape (w))) stop 3
+     g = [(real(i),i=1,size(g))]
+   end
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr105168.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr105168.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr105168.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr105168.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,38 ----
+ ! { dg-do run }
+ ! Test fix for PR105168, in which nterface mapping was failing with CLASS 'x'
+ ! and parentheses around the actual argument.
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module m
+    type t
+       integer :: a
+    contains
+       final :: final_t
+    end type
+    integer :: cntr = 0
+ contains
+    function f(x, factor) result(z)
+       class(t) :: x(:) ! Worked, with or without parentheses if s/CLASS/TYPE/
+       type(t) :: z(2)
+       integer :: factor
+       z = x            ! Seg fault here
+       z%a = factor * z%a
+    end
+    impure elemental subroutine final_t (arg)
+       type (t), intent(in) :: arg
+       cntr = cntr + 1
+    end subroutine
+ end module
+ program p
+    use m
+    class(t), allocatable :: y(:), z(:)
+    y = [t(2),t(4)]
+    allocate (t :: z(2))
+    z = f((y), 1)          ! Failed even with parentheses removed
+    if (any(z%a /= [2,4])) stop 1
+    z = f(y, 2)            ! Failed but now OK
+    if (any (z%a /= [4,8])) stop 2
+    deallocate (y, z)
+    if (cntr /= 16) stop 3 ! 6 for each assignment and 4 for deallocation
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr106946.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr106946.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr106946.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr106946.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,30 ----
+ ! { dg-do compile }
+ ! PR fortran/106946
+ ! ICE in resolve_component on invalid CLASS declaration with missing comma.
+ !
+ ! The bad declarations below should diagnose and continue without leaving
+ ! behind dangling CLASS container symbols in the surrounding namespace.
+ 
+ program p
+   type :: u
+   end type
+ 
+   type :: v
+   end type
+ 
+   type :: w
+   end type
+ 
+   type :: t1
+     class(u), allocatable :: a b  ! { dg-error "Syntax error in data declaration" }
+   end type
+ 
+   type :: t2
+     class(v), pointer :: p q  ! { dg-error "Syntax error in data declaration" }
+   end type
+ 
+   type :: t3
+     class(w), allocatable :: ok
+     class(w), allocatable :: x y  ! { dg-error "Syntax error in data declaration" }
+   end type
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr109788.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr109788.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr109788.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr109788.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,10 ----
+ ! { dg-do compile }
+ ! { dg-options "-Os -fdump-tree-original-raw" }
+ ! { dg-final { scan-tree-dump {(?s)identifier_node  strg: _gfortran_spread_char_scalar.*?function_type.*?prms: @[0-9]+.*?tree_list[^\n]*chan: @[0-9]+.*?tree_list[^\n]*chan: @[0-9]+.*?tree_list[^\n]*chan: @[0-9]+.*?tree_list[^\n]*chan: @[0-9]+.*?tree_list[^\n]*chan: @[0-9]+.*?tree_list[^\n]*chan: @8} "original" } }
+ 
+ character(3) :: a = 'abc'
+ 
+ associate (y => spread(trim(a), 1, 2) // 'd')
+   if (size(y) /= 2) stop 1
+ end associate
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr115260.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr115260.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr115260.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr115260.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do run }
+ ! PR 115260 - this got corrupted output.
+ ! Original test case by Steve Mullerworth
+ 
+ program usegnufields
+   implicit none
+   type :: field_type
+     real,    allocatable :: data(:)
+     integer, allocatable :: idata(:)
+   end type field_type
+   type :: fieldholder
+     type(field_type) :: fieldset(2,4)
+   end type fieldholder
+   type(fieldholder) :: myfields
+ 
+   allocate(myfields%fieldset(2,1)%data(3))
+   allocate(myfields%fieldset(2,1)%idata(3))
+   myfields%fieldset(2,1)%data =1.0
+   myfields%fieldset(2,1)%idata=2
+ 
+   call setfields (myfields%fieldset(2,1:4))
+ !  print *,'After calling setfields with fieldset(2,1:4)'
+ !  print *,myfields%fieldset(2,1)%data
+ !  print *,myfields%fieldset(2,1)%idata
+   if (any (myfields%fieldset(2,1)%data  /= 1.0)) stop 1
+   if (any (myfields%fieldset(2,1)%idata /= 2  )) stop 2
+ 
+ contains
+   subroutine setfields (fieldset)
+     type(field_type), intent(inout) :: fieldset(1:4) ! corruption with -O
+ !    print *,'In setfields:'
+ !    print *,fieldset(1)%data
+ !    print *,fieldset(1)%idata
+   end subroutine setfields
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr119273.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr119273.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr119273.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr119273.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,70 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original -fcheck=bounds" }
+ !
+ ! Test the fix forPR119273, which caused false bounds check errors.
+ !
+ ! Contributed by Jingwei Xing  <xingjingwei666@gmail.com>
+ !
+ module test_module
+     type :: test_type_father
+         integer :: val
+     contains
+         procedure :: test_function3
+     end type test_type_father
+ 
+     type, extends(test_type_father) :: test_type_child
+     contains
+         procedure :: test_function1
+     end type test_type_child
+ 
+     integer :: ii
+ 
+     contains
+     function test_function1(a) result(out)
+         class(test_type_child), intent(in) :: a
+         integer :: out
+         ii = a%val  ! Make this function implicitly impure.
+         out = a%val
+     end function
+     pure function test_function2(a) result(out)
+         type(test_type_child), intent(in) :: a
+         integer :: out
+         out = a%val
+     end function
+     pure function test_function3(a) result(out)
+         class(test_type_father), intent(in) :: a
+         integer :: out
+         out = a%val
+     end function
+ end module
+ 
+ program test
+     use test_module
+     implicit none
+     type(test_type_child) :: a
+     type(test_type_father) :: b
+     class(test_type_child), allocatable :: c
+     integer, target :: temp_int(1,1)
+     integer, pointer :: d(:)
+     a%val = 0
+     associate(temp => temp_int(:,a%test_function1() + 1)) ! { dg-warning "is not implicitly pure" }
+     end associate
+     a%val = 1
+     associate(temp => temp_int(:,test_function2(a)))
+     end associate
+     b%val = 1
+     associate(temp => temp_int(:,b%test_function3()))
+     end associate
+     associate(temp => temp_int(:,test_function3(b)))
+     end associate
+     allocate (c, source = a)
+     associate(temp => temp_int(:,c%test_function1())) ! { dg-warning "is not implicitly pure" }
+     end associate
+ 
+ ! Demonstrate that this bug was not specific to the ASSOCIATE statement but,
+ ! rather to it being a pointer assignment, when the selector is a variable.
+     d => temp_int(:,a%test_function1()) ! { dg-warning "is not implicitly pure" }
+ 
+ end program test
+ ! Test for the missing vptr assignments to the class actual temporaries.
+ ! { dg-final { scan-tree-dump-times "class..._vptr =" 8 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr124161.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr124161.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr124161.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr124161.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,61 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for the regression caused by r16-669-gd31ab498b12ebb - See line 59.
+ !
+ ! Contributed by Zaak Beekman  <zbeekman@gmail.com>
+ !
+ module inner_m
+     implicit none
+     type :: dt_t
+         integer, allocatable :: val
+     end type
+     type, abstract :: inner_t
+     contains
+         procedure(summary_i), deferred :: summary
+     end type
+     abstract interface
+         function summary_i(self)
+             import :: inner_t, dt_t
+             class(inner_t), intent(in) :: self
+             type(dt_t) :: summary_i
+         end function
+     end interface
+ end module inner_m
+ 
+ module concrete_m
+     use inner_m, only: inner_t, dt_t
+     implicit none
+     type, extends(inner_t) :: concrete_t
+     contains
+         procedure :: summary
+     end type
+ contains
+     function summary(self)
+         class(concrete_t), intent(in) :: self
+         type(dt_t) :: summary
+     end function
+ end module concrete_m
+ 
+ module outer_m
+     use inner_m, only: inner_t, dt_t
+     use concrete_m, only: concrete_t
+     implicit none
+     type :: outer_t
+         class(inner_t), allocatable :: component
+     contains
+         procedure :: summary
+     end type
+     interface
+         module function summary(self) result(res)
+             class(outer_t), intent(in) :: self
+             type(dt_t) :: res
+         end function
+     end interface
+ end module outer_m
+ 
+ submodule(outer_m) outer_impl
+ contains
+     module procedure summary
+         res = self%component%summary()  ! ICE in trans_scalar_assign here
+     end procedure
+ end submodule outer_impl
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr124450.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr124450.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr124450.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr124450.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ ! PR fortran/124450
+ ! { dg-do compile }
+ 
+   type ta
+     integer(kind=4) :: a(1)
+     integer(kind=4) :: b(1)
+   end type ta
+   type tb
+     type(ta) :: c(1) = ta(1, 2)
+   end type tb
+   type(tb) :: e = tb(ta(3, 4))
+ 
+   print *, e
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr79524.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr79524.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr79524.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr79524.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,9 ----
+ ! { dg-do compile }
+ ! { dg-set-target-env-var MALLOC_PERTURB_ "165" }
+ ! PR fortran/79524
+ ! Reject parameter arrays with variable-length CHARACTER elements without
+ ! leaving the temporary charlen from the failed declaration on cl_list.
+ program p
+   character(*), parameter :: z(2) = [character(n) :: 'x', 'y'] ! { dg-error "Cannot initialize parameter array" }
+   character(*), parameter :: w(2) = [character(n+1) :: 'a', 'b'] ! { dg-error "Cannot initialize parameter array" }
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr82721.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr82721.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr82721.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr82721.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,9 ----
+ ! { dg-do compile }
+ ! { dg-set-target-env-var MALLOC_PERTURB_ "165" }
+ ! PR fortran/82721
+ ! Reject a duplicate declaration without leaving the CHARACTER length
+ ! expression from the failed statement on the namespace charlen list.
+ 
+ integer :: b
+ character(len(c)) :: b  ! { dg-error "already has basic type of INTEGER" }
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr84245.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr84245.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr84245.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr84245.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,7 ----
+ ! { dg-do compile }
+ ! { dg-options "-w" }
+ 
+ program p
+   select type (x%a) ! { dg-error "Unexpected '%'.*nonderived-type variable 'x'" }
+   end select        ! { dg-error "Expecting END PROGRAM statement" }
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr85352.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr85352.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr85352.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr85352.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,44 ----
+ ! { dg-do compile }
+ 
+ subroutine expa (ip, iq, sabb)
+   implicit none
+   integer, intent(in) :: ip, iq
+   real :: sabb(25, 8), arg(25), argj, dist
+   integer :: i, j
+   integer :: nuca, nucb, nucab, nuco
+ 
+   arg = [(i * 7.5, i = 1, 25)]
+   nuca = nuco (ip)
+   nucb = nuco (iq)
+   nucab = nuca * nucb
+   dist = 0.7854
+   do j = 1, nucab
+     argj = min (arg(j) * dist, 80.0)
+     sabb(j, 1) = exp (-argj)
+   end do
+   call acomp (sabb, nuca)
+   return
+ entry rfinit
+   stop 1
+ end subroutine expa
+ 
+ subroutine acomp (saab, nuca)
+   implicit none
+   real :: aaint, saab
+   integer :: i, ip, iq, j, nuc1, nuca
+   dimension saab(nuca, nuca), aaint(nuc1, nuc1)
+ 
+   do i = 2, nuca
+     do j = 1, i - 1
+       saab(j, i) = saab(j, i) * 2.0d0
+       saab(i, j) = 0.0d0
+     end do
+   end do
+   return
+ entry aaexp (aaint, nuc1)
+   do ip = 2, nuc1
+     do iq = 1, ip - 1
+       aaint(iq, ip) = 0.5d0 * (aaint(iq, ip) + aaint(ip, iq))
+     end do
+   end do
+ end subroutine acomp
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr89092.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr89092.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr89092.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr89092.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,49 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original" }
+ module AModule
+    implicit none
+    private
+    public Foo
+ 
+    interface Foo
+       module procedure FooPrivate
+    end interface
+ contains
+    subroutine FooPrivate(x)
+       integer :: x
+ 
+       write(*,*) 'Foo(integer)'
+    end subroutine
+ end module
+ module BModule
+    implicit none
+    private
+ 
+    type, public :: BType
+    contains
+       procedure :: Foo
+    end type
+ contains
+    subroutine Foo(self)
+       class(BType) :: self
+ 
+       write(*,*) 'Foo(BType)'
+    end subroutine
+ end module
+ program iface_tbp_test
+    use AModule
+    implicit none
+ 
+    call test()
+ 
+ contains
+    subroutine test()
+       use BModule
+ 
+       type(BType) :: y
+ 
+       call y%Foo()
+       call Foo(1)
+    end subroutine
+ end program
+ ! { dg-final { scan-tree-dump-times "foo \\(&class.2\\)" 1 "original" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr93715.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr93715.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr93715.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr93715.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-do compile }
+ ! { dg-options "-fcoarray=single" }
+ !
+ ! PR fortran/93715
+ ! A scalar coarray used in asynchronous I/O caused an ICE in
+ ! gfc_trans_auto_array_allocation.
+ 
+ program p
+    integer :: a, b[*]
+    read (1, *, asynchronous='yes') a, b
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr93814.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr93814.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr93814.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr93814.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,99 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/93814 - ICE in build_entry_thunks with CHARACTER ENTRY
+ ! and bind(c).
+ !
+ ! Verify that CHARACTER function results with ENTRY and bind(c) compile
+ ! and execute correctly, covering all combinations of bind(c) on the
+ ! function and its entries.
+ 
+ ! Both function and entry have bind(c).
+ function f1() bind(c)
+   character :: f1, g1
+   f1 = "a"
+   return
+   entry g1() bind(c)
+   g1 = "b"
+ end
+ 
+ ! Only function has bind(c), entry does not.
+ function f2() bind(c)
+   character(1) :: f2, g2
+   f2 = "c"
+   return
+   entry g2()
+   g2 = "d"
+ end function
+ 
+ ! Only entry has bind(c), function does not.
+ function f3()
+   character(1) :: f3, g3
+   f3 = "e"
+   return
+   entry g3() bind(c)
+   g3 = "f"
+ end function
+ 
+ ! Neither function nor entry have bind(c) (baseline).
+ function f4()
+   character :: f4, g4
+   f4 = "g"
+   return
+   entry g4()
+   g4 = "h"
+ end
+ 
+ ! Integer with bind(c) (should still work).
+ function f5() bind(c)
+   integer :: f5, g5
+   f5 = 42
+   return
+   entry g5() bind(c)
+   g5 = 84
+ end
+ 
+ program p
+   interface
+     function f1() bind(c)
+       character :: f1
+     end
+     function g1() bind(c)
+       character :: g1
+     end
+     function f2() bind(c)
+       character(1) :: f2
+     end
+     function g2()
+       character(1) :: g2
+     end
+     function f3()
+       character(1) :: f3
+     end
+     function g3() bind(c)
+       character(1) :: g3
+     end
+     function f4()
+       character :: f4
+     end
+     function g4()
+       character :: g4
+     end
+     function f5() bind(c)
+       integer :: f5
+     end
+     function g5() bind(c)
+       integer :: g5
+     end
+   end interface
+ 
+   if (f1() /= "a") stop 1
+   if (g1() /= "b") stop 2
+   if (f2() /= "c") stop 3
+   if (g2() /= "d") stop 4
+   if (f3() /= "e") stop 5
+   if (g3() /= "f") stop 6
+   if (f4() /= "g") stop 7
+   if (g4() /= "h") stop 8
+   if (f5() /= 42)  stop 9
+   if (g5() /= 84)  stop 10
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr93832.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr93832.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr93832.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr93832.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,37 ----
+ module m
+ contains
+    subroutine comment0
+       type t
+          character :: a
+          integer :: b
+          integer :: c(t(1))            ! { dg-error "No initializer for component .b." }
+       end type
+       type(t) :: z = t('a', 2, [3])    ! { dg-error "Bad array spec of component .c." }
+    end
+ 
+    subroutine comment3a
+       type t
+          character :: a
+          integer :: b
+          integer :: c(t(1, "rubbish")) ! { dg-error "No initializer for component .c." }
+       end type
+       type(t) :: z = t('a', 2, [3])    ! { dg-error "Bad array spec of component .c." }
+    end
+ 
+    subroutine comment3b
+       type t
+          character :: a
+          integer :: b
+          integer :: c(t(1, "rubbish", [7])) ! { dg-error "Derived type or class expression" }
+       end type
+       type(t) :: z = t('a', 2, [3])    ! { dg-error "Bad array spec of component .c." }
+    end
+ 
+    subroutine comment9
+       type t
+          character :: a
+          integer :: b(t(1))            ! { dg-error "No initializer for component .b." }
+       end type
+       type(t) :: x = t('a', 2)
+    end
+ end module
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr94978.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr94978.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr94978.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr94978.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,24 ----
+ ! { dg-do compile }
+ ! { dg-options "-Wdo-subscript" }
+ 
+ implicit none
+ 
+ integer(4) :: i, j
+ integer(4) :: pascal(0:8, 0:8)
+ 
+ do i = 0, 8
+   pascal(i, 0) = 1
+   do j = 1, i - 1
+     pascal(i, j) = pascal(i - 1, j) + pascal(i - 1, j - 1) ! { dg-bogus "Array reference at \\(1\\) out of bounds" }
+   end do
+   do j = i, 8
+     pascal(i, j) = 0
+   end do
+   pascal(i, i) = 1
+ end do
+ 
+ do i = 0, 8
+   print '(9I4)', pascal(i, :)
+ end do
+ 
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr95338.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr95338.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr95338.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr95338.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,27 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O1 -ff2c" }
+ !
+ ! PR fortran/95338 - mixed ENTRY results with -ff2c must use the ABI
+ ! return type in the master union.
+ 
+ module m
+ contains
+   function f(x)
+     integer :: x
+     integer :: f
+     real :: g
+ 
+     f = x
+     return
+ 
+     entry g(x)
+     g = x
+   end
+ end
+ 
+ program p
+   use m
+ 
+   if (f(1) /= 1) stop 1
+   if (g(1) /= 1.0) stop 2
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr95879.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr95879.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr95879.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr95879.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,30 ----
+ ! { dg-do compile }
+ ! { dg-options "-std=f2018" }
+ ! PR fortran/95879
+ ! Contributed by G. Steinmetz <gscfq@t-online.de>
+ !
+ ! Use-after-free in gfc_resolve_formal_arglist when a contained subroutine
+ ! has a statement function whose dummy argument name matches a symbol
+ ! replaced by gfc_fixup_sibling_symbols.
+ 
+ module m1
+ contains
+    integer function f(x) bind(c)
+       use iso_c_binding
+    contains
+       subroutine s
+          c_funloc(f) = x  ! { dg-warning "Obsolescent feature: Statement function" }
+       end
+    end
+ end
+ 
+ module m2
+ contains
+    integer function f(x)
+       use iso_c_binding
+    contains
+       subroutine s
+          c_funloc(f) = x  ! { dg-warning "Obsolescent feature: Statement function" }
+       end
+    end
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr96087.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr96087.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr96087.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr96087.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,46 ----
+ ! { dg-do run }
+ 
+ module m
+    interface
+       module function f(a, n, b) result(z)
+          integer, intent(in) :: n
+          real :: z(n + 1)
+          real :: a, b
+       end
+    end interface
+ contains
+    module procedure f
+       integer :: i
+       do i = 1, size(z)
+         z(i) = real(i)
+       end do
+    end procedure
+ end
+ 
+ ! Comment 1
+ module n
+    interface
+       module subroutine g(n, z)
+          integer, intent(in) :: n
+          real :: z(n)
+       end
+    end interface
+ contains
+    module procedure g
+       z = 1
+       if (int (sum (z)) /= n) stop 1
+    end procedure
+ end
+ 
+   use m
+   use n
+   real, allocatable :: r(:)
+   integer :: i = 2
+   r = f (1.0, i+1, 2.0)
+   if (any (r .ne. [(real(i), i = 1,4)])) stop 2
+   if (any (f (3.0, 1, 4.0) .ne. [(real(i), i = 1,2)])) stop 3
+ 
+   r = [(real (i), i = 10,20)]
+   call g (5, r)
+   if (int (sum (r)) /= (sum ([(i, i = 15,20)]) + 5)) stop 4
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/pr96986.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr96986.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/pr96986.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/pr96986.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,25 ----
+ ! { dg-do compile }
+ ! { dg-options "-std=legacy" }
+ !
+ ! PR fortran/96986
+ ! Calling an ENTRY with no volatile arguments incorrectly required an
+ ! explicit interface because the volatile attribute from a sibling ENTRY
+ ! was checked against the master procedure's combined formal list.
+ 
+ subroutine volatile_test ()
+   implicit none
+   integer, volatile :: va
+ 
+   entry fun_a()
+   return
+ 
+   entry fun_b(va)
+     call fun_c()
+   return
+ end subroutine volatile_test
+ 
+ subroutine fun_c ()
+   implicit none
+   call fun_a()  ! Must not require explicit interface
+   return
+ end subroutine fun_c
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/submodule_34.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/submodule_34.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/submodule_34.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/submodule_34.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,63 ----
+ ! { dg-do compile }
+ !
+ ! PR fortran/122046
+ ! The check for illegal recursion used to trigger on assertion when resolving
+ ! the array spec of the dummy argument in the submodule
+ !
+ ! Contributed by Tomáš Trnka <trnka@scm.com>
+ 
+ module ChemicalSystemModule
+ 
+    implicit none
+    private
+ 
+    type, public :: ChemicalSystemType
+    contains
+       procedure, public  :: NumAtoms
+    end type
+ 
+ contains
+ 
+    elemental integer function NumAtoms(self)
+       class(ChemicalSystemType), intent(in) :: self
+ 
+       NumAtoms = 123
+ 
+    end function
+ 
+ end module
+ 
+ module ChemicalSystemUtilsModule
+ 
+    use ChemicalSystemModule
+ 
+    implicit none
+    private
+ 
+    public :: ChemicalSystemRMSD
+ 
+    interface
+ 
+       module subroutine ChemicalSystemRMSD(modelSys, rmsdGrad)
+          type(ChemicalSystemType), intent(in)  :: modelSys
+          real                    , intent(out) :: rmsdGrad(3,modelSys%NumAtoms())
+       end subroutine
+ 
+    end interface
+ 
+ end module
+ 
+ submodule(ChemicalSystemUtilsModule) ChemicalSystemUtilsSubModule
+    use ChemicalSystemModule
+ 
+    implicit none
+ 
+ contains
+ 
+    module subroutine ChemicalSystemRMSD(modelSys, rmsdGrad)
+       type(ChemicalSystemType), intent(in)   :: modelSys
+       real                    , intent(out)  :: rmsdGrad(3,modelSys%NumAtoms())
+    end subroutine
+ 
+ end submodule
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/transfer_class_5.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/transfer_class_5.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/transfer_class_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/transfer_class_5.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,53 ----
+ ! { dg-do run }
+ ! PR fortran/121263 - fix TRANSFER with rank 1 unlimited polymorhpic
+ !
+ ! Based on original testcase by Chris Cox.
+ 
+ module stdlib_hashmap_wrappers
+   implicit none
+ contains
+   subroutine set_rank_one_key_int( key, value )
+     integer, allocatable, intent(inout) :: key(:)
+     class(*), intent(in)                :: value(:)
+     key = transfer( value, key )
+   end subroutine
+ 
+   subroutine set_rank_one_key_cx ( key, value )
+     complex, allocatable, intent(inout) :: key(:)
+     class(*), intent(in)                :: value(:)
+     key = transfer( value, key )
+   end subroutine
+ 
+   subroutine set_first_key_int   ( key, value )
+     integer, intent(inout) :: key
+     class(*), intent(in)   :: value(:)
+     key = transfer( value(1), key )
+   end subroutine
+ end module
+ 
+ program p
+   use stdlib_hashmap_wrappers
+   implicit none
+   integer, allocatable :: a(:), b(:)
+   complex, allocatable :: c(:), d(:)
+   class(*),allocatable :: z(:)
+   integer :: m
+   a = [1, 2, 3, 4, 5]
+   c = cmplx (a, -a)
+   call set_rank_one_key_int (b, a)
+   call set_rank_one_key_cx  (d, c)
+   call set_first_key_int    (m, a)
+ ! print *, b
+ ! print *, d
+   if (size (a) /= size (b)) stop 1
+   if (any  (a  /=       b)) stop 2
+   if (size (c) /= size (d)) stop 3
+   if (any  (c  /=       d)) stop 4
+   if (m /= 1) stop 5
+   deallocate (d)
+   z = c
+   d = transfer (z, d)
+   if (size (c) /= size (d)) stop 6
+   if (any  (c  /=       d)) stop 7
+   deallocate (a, b, c, d, z)
+ end program p
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/vect/pr125431.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/vect/pr125431.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/vect/pr125431.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/vect/pr125431.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,16 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-O2 -ffp-contract=off" }
+ ! { dg-additional-options "-march=armv8.3-a" { target { aarch64*-*-* } } }
+ 
+ subroutine foo(a,b,c)
+ 
+   complex :: a(6,6)
+   complex :: b(6,6)
+   complex :: c(6,6)
+ 
+   c = MATMUL(a, b)
+ 
+ end subroutine foo
+ 
+ ! { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target { vect_float } }  } }
+ ! { dg-final { scan-tree-dump-not "Found COMPLEX_MUL" "vect" } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.dg/vect/vect-pr123741.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/vect/vect-pr123741.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.dg/vect/vect-pr123741.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.dg/vect/vect-pr123741.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Ofast" }
+ ! { dg-additional-options "-mavx2" { target avx2 } }
+ 
+ module m1
+ parameter( n1=5,n2=5,n3=5,n4=5 )
+ integer:: p(n1,n2,n3,n4)
+ 
+ contains
+ subroutine s1(i,nn2,nn4)
+ integer:: i(n1,n2,n3,n4)
+ i= p
+ forall (k2=1:nn2,k4=1:nn4,mod(k2,3)/=0 .and. mod(k4,3)/=0) 
+ where( mod(i(:,k2,:,k4),4) /=0 ) &
+  i(:,k2,:,k4) = i(:,k2,:,k4) + 1.0 / real(k2+k4 -1)
+ end forall
+ end subroutine
+ 
+ subroutine s2(i,nn2,nn4)
+ integer:: i(n1,n2,n3,n4)
+ integer,allocatable:: temp(:,:,:,:)
+ i= p
+ allocate(temp(n1,n2,n3,n4))
+ do k4=1,nn4
+ do k2=1,nn2
+ if (mod(k2,3)/=0 .and. mod(k4,3)/=0)then
+ where( mod(i(:,k2,:,k4),4) /=0 ) &
+  temp(:,k2,:,k4) = i(:,k2,:,k4) +1.0 / real(k2+k4 -1)
+ end if
+ end do
+ end do
+ do k4=1,nn4
+ do k2=1,nn2
+ if (mod(k2,3)/=0 .and. mod(k4,3)/=0)then
+ where( mod(i(:,k2,:,k4),4) /=0 ) &
+  i(:,k2,:,k4) = temp(:,k2,:,k4)
+ end if
+ end do
+ end do
+ end subroutine
+ end
+ 
+ use m1
+ integer:: i1(n1,n2,n3,n4),i2(n1,n2,n3,n4)
+ p= reshape([(k,k=1,(n1)*(n2)*(n3)*(n4))],[n1,n2,n3,n4])
+ call s1(i1,n2,n4)
+ call s2(i2,n2,n4)
+ if (any(i1/=i2)) print *,101
+ print *,'OK'
+ end
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.target/aarch64/aarch64.exp gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.target/aarch64/aarch64.exp
*** gcc-14.3.0/gcc/testsuite/gfortran.target/aarch64/aarch64.exp	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.target/aarch64/aarch64.exp	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,45 ----
+ #   Copyright (C) 2025 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ # 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ # 
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Exit immediately if this isn't a aarch64 target.
+ if { ![istarget aarch64*-*-*] } then {
+   return
+ }
+ 
+ # Make sure there is a fortran compiler to test.
+ if { ![check_no_compiler_messages fortran_available assembly {
+ ! Fortran
+ program P
+   stop
+ end program P
+ } ""] } {
+     return
+ }
+ 
+ # Load support procs.
+ load_lib gfortran-dg.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ gfortran-dg-runtest [lsort \
+    [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ] ] "" ""
+ 
+ # All done.
+ dg-finish
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,61 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-O2 -march=armv8.3-a" }
+ 
+ subroutine c_add_ab(n, a, c, b)         ! C += A * B
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_add_ab
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) + a * b(k)
+   end do
+ end subroutine c_add_ab
+ 
+ subroutine c_sub_ab(n, a, c, b)         ! C -= A * B
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_sub_ab
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) - a * b(k)
+   end do
+ end subroutine c_sub_ab
+ 
+ subroutine c_add_a_conjb(n, a, c, b)    ! C += A * conj(B)
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_add_a_conjb
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) + a * conjg(b(k))
+   end do
+ end subroutine c_add_a_conjb
+ 
+ subroutine c_sub_a_conjb(n, a, c, b)    ! C -= A * conj(B)
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_sub_a_conjb
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) - a * conjg(b(k))
+   end do
+ end subroutine c_sub_a_conjb
+ 
+ ! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, #0} 2 } }
+ ! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, #270} 2 } }
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90 gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90
*** gcc-14.3.0/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,140 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2" }
+ ! { dg-additional-options "-O2 -march=armv8.3-a" { target arm_v8_3a_complex_neon_hw } }
+ 
+ module util
+   use iso_fortran_env, only: real64, int64
+   implicit none
+ contains
+   pure logical function bitwise_eq(x, y)
+     complex(real64), intent(in) :: x, y
+     integer(int64) :: xr, xi, yr, yi
+     xr = transfer(real(x,kind=real64), 0_int64)
+     xi = transfer(aimag(x),             0_int64)
+     yr = transfer(real(y,kind=real64),  0_int64)
+     yi = transfer(aimag(y),              0_int64)
+     bitwise_eq = (xr == yr) .and. (xi == yi)
+   end function bitwise_eq
+ 
+   subroutine check_equal(tag, got, ref, nfail)
+     character(*), intent(in) :: tag
+     complex(real64), intent(in) :: got(:), ref(:)
+     integer, intent(inout) :: nfail
+     integer :: i
+     do i = 1, size(got)
+       if (.not. bitwise_eq(got(i), ref(i))) then
+         nfail = nfail + 1
+         write(*,'(A,": mismatch at i=",I0, "  got=",2ES16.8,"  ref=",2ES16.8)') &
+              trim(tag), i, real(got(i)), aimag(got(i)), real(ref(i)), aimag(ref(i))
+       end if
+     end do
+   end subroutine check_equal
+ end module util
+ 
+ module fcmla_ops
+   use iso_fortran_env, only: real64
+   implicit none
+ contains
+   subroutine c_add_ab(n, a, c, b)         ! C += A * B
+     !GCC$ ATTRIBUTES noinline :: c_add_ab
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) + a * b(k)
+     end do
+   end subroutine c_add_ab
+ 
+   subroutine c_sub_ab(n, a, c, b)         ! C -= A * B
+     !GCC$ ATTRIBUTES noinline :: c_sub_ab
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) - a * b(k)
+     end do
+   end subroutine c_sub_ab
+ 
+   subroutine c_add_a_conjb(n, a, c, b)    ! C += A * conj(B)
+     !GCC$ ATTRIBUTES noinline :: c_add_a_conjb
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) + a * conjg(b(k))
+     end do
+   end subroutine c_add_a_conjb
+ 
+   subroutine c_sub_a_conjb(n, a, c, b)    ! C -= A * conj(B)
+     !GCC$ ATTRIBUTES noinline :: c_sub_a_conjb
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) - a * conjg(b(k))
+     end do
+   end subroutine c_sub_a_conjb
+ end module fcmla_ops
+ 
+ program fcmla_accum_pairs
+   use iso_fortran_env, only: real64
+   use util
+   use fcmla_ops
+   implicit none
+ 
+   integer, parameter :: n = 4
+   complex(real64) :: a, b(n), c0(n)
+   complex(real64) :: c_add_ab_got(n),      c_add_ab_ref(n)
+   complex(real64) :: c_sub_ab_got(n),      c_sub_ab_ref(n)
+   complex(real64) :: c_add_conjb_got(n),   c_add_conjb_ref(n)
+   complex(real64) :: c_sub_conjb_got(n),   c_sub_conjb_ref(n)
+   integer :: i, fails
+ 
+   ! Constants (include a signed-zero lane)
+   a    = cmplx( 2.0_real64, -3.0_real64, kind=real64)
+   b(1) = cmplx( 1.5_real64, -2.0_real64, kind=real64)
+   b(2) = cmplx(-4.0_real64,  5.0_real64, kind=real64)
+   b(3) = cmplx(-0.0_real64,  0.0_real64, kind=real64)
+   b(4) = cmplx( 0.25_real64, 3.0_real64, kind=real64)
+ 
+   c0(1) = cmplx( 1.0_real64, -2.0_real64, kind=real64)
+   c0(2) = cmplx( 3.0_real64, -4.0_real64, kind=real64)
+   c0(3) = cmplx(-5.0_real64,  6.0_real64, kind=real64)
+   c0(4) = cmplx( 0.0_real64,  0.0_real64, kind=real64)
+ 
+   ! Run each form
+   c_add_ab_got    = c0; call c_add_ab     (n, a, c_add_ab_got,    b)
+   c_sub_ab_got    = c0; call c_sub_ab     (n, a, c_sub_ab_got,    b)
+   c_add_conjb_got = c0; call c_add_a_conjb(n, a, c_add_conjb_got, b)
+   c_sub_conjb_got = c0; call c_sub_a_conjb(n, a, c_sub_conjb_got, b)
+ 
+   ! Scalar references
+   do i = 1, n
+     c_add_ab_ref(i)    = c0(i) + a * b(i)
+     c_sub_ab_ref(i)    = c0(i) - a * b(i)
+     c_add_conjb_ref(i) = c0(i) + a * conjg(b(i))
+     c_sub_conjb_ref(i) = c0(i) - a * conjg(b(i))
+   end do
+ 
+   ! Bitwise checks
+   fails = 0
+   call check_equal("C +=  A*B       ", c_add_ab_got,    c_add_ab_ref,    fails)
+   call check_equal("C -=  A*B       ", c_sub_ab_got,    c_sub_ab_ref,    fails)
+   call check_equal("C +=  A*conj(B) ", c_add_conjb_got, c_add_conjb_ref, fails)
+   call check_equal("C -=  A*conj(B) ", c_sub_conjb_got, c_sub_conjb_ref, fails)
+ 
+   if (fails == 0) then
+     stop 0
+   else
+     stop 1
+   end if
+ end program fcmla_accum_pairs
+ 
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/bigint1.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/bigint1.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/bigint1.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/bigint1.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,27 ----
+ -- { dg-do run }
+ -- { dg-options "-gnat2022 -gnata" }
+ 
+ with Ada.Numerics.Big_Numbers.Big_Integers;
+ use Ada.Numerics.Big_Numbers.Big_Integers;
+ 
+ procedure Bigint1 is
+ 
+   Minus_One   : constant Big_Integer := To_Big_Integer (-1);
+   Minus_Two   : constant Big_Integer := To_Big_Integer (-2);
+   Minus_Three : constant Big_Integer := To_Big_Integer (-3);
+ 
+ begin
+ 
+   pragma Assert (Minus_One ** 1 = Minus_One);
+   pragma Assert (Minus_One ** 2 = To_Big_Integer (1));
+   pragma Assert (Minus_One ** 3 = Minus_One);
+ 
+   pragma Assert (Minus_Two ** 1 = Minus_Two);
+   pragma Assert (Minus_Two ** 2 = To_Big_Integer (4));
+   pragma Assert (Minus_Two ** 3 = To_Big_Integer (-8));
+ 
+   pragma Assert (Minus_Three ** 1 = Minus_Three);
+   pragma Assert (Minus_Three ** 2 = To_Big_Integer (9));
+   pragma Assert (Minus_Three ** 3 = To_Big_Integer (-27));
+ 
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/generic_inst20-sub.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/generic_inst20-sub.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/generic_inst20-sub.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/generic_inst20-sub.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,14 ----
+ -- { dg-excess-errors "cannot generate code" }
+ 
+ separate (Generic_Inst20)
+ 
+ package body Sub is
+    function F return Boolean is
+    begin
+       return True;
+    end F;
+    generic
+    package G is
+    end G;
+    package I is new G;
+ end Sub;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/generic_inst20.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/generic_inst20.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/generic_inst20.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/generic_inst20.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,5 ----
+ -- { dg-do compile }
+ 
+ package body Generic_Inst20 is
+    package body Sub is separate;
+ end Generic_Inst20;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/generic_inst20.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/generic_inst20.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/generic_inst20.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/generic_inst20.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,6 ----
+ package Generic_Inst20 is
+    pragma Elaborate_Body;
+    package Sub is
+       function F return Boolean;
+    end Sub;
+ end Generic_Inst20;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/lto30.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/lto30.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/lto30.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/lto30.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,31 ----
+ -- { dg-do compile }
+ -- { dg-options "-flto" { target lto } }
+ 
+ with Ada.Unchecked_Conversion;
+ with System;
+ 
+ package body Lto30 is
+ 
+    generic
+       type T is private;
+    package Unbounded_Arrays is
+       type Unbounded_Array is array (Natural range 1 .. Natural'Last) of T;
+       type Unbounded_Array_Access is access Unbounded_Array;
+       function Convert is new
+          Ada.Unchecked_Conversion (System.Address, Unbounded_Array_Access);
+    end Unbounded_Arrays;
+ 
+    package Atom_Arrays is new Unbounded_Arrays (Ptr);
+    use Atom_Arrays;
+ 
+    procedure Proc is
+       procedure Foo (Targets : access Unbounded_Array_Access);
+       pragma Import (Ada, Foo, "Foo");
+ 
+       Output : aliased Unbounded_Array_Access;
+ 
+    begin
+       Foo (Output'Unchecked_Access);
+    end;
+ 
+ end Lto30;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/lto30.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/lto30.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/lto30.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/lto30.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,13 ----
+ package Lto30 is
+ 
+    type Rec is private;
+ 
+    type Ptr is access all Rec;
+ 
+    procedure Proc;
+ 
+ private
+ 
+    type Rec is null record;
+ 
+ end Lto30;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/opt107.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/opt107.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/opt107.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/opt107.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,27 ----
+ -- { dg-do compile }
+ -- { dg-options "-O" }
+ 
+ with Opt107_Pkg; use Opt107_Pkg;
+ 
+ function Opt107 return Rec is
+    R : Rec;
+ begin
+    R.W1A := B_A_7;
+    R.W1B := 0;
+    R.W1C := C_A;
+    R.W1D := (Spare => 0,
+              D_A => 0,
+              D_B => 0,
+              D_C => 0,
+              D_D => 0);
+    R.W2B := (Spare => 0,
+              E_A => 0,
+              E_B => 0,
+              E_C => 0,
+              E_D => 0,
+              E_E => 0,
+              E_F => 0,
+              E_G => 0,
+              E_H => 0);
+    return R;
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/opt107_pkg.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/opt107_pkg.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/opt107_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/opt107_pkg.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,156 ----
+ with System;
+ with Unchecked_Conversion;
+ 
+ package Opt107_Pkg is
+ 
+    Word_Size : constant := 32;
+    type Word_Type is mod 2 ** Word_Size;
+    for Word_Type'Size use Word_Size;
+ 
+    Word : constant := Word_Size / System.Storage_Unit;
+ 
+    Halfword_Size : constant := Word_Size / 2;
+    
+    type Halfword_Type is range 0 .. 2 ** Halfword_Size - 1;
+    for Halfword_Type'Size use Halfword_Size;
+ 
+    type One_Bit_Type is mod 2 ** 1;
+    for One_Bit_Type'Size use 1;
+    
+    type Four_Bit_Type is mod 2 ** 4;
+    for Four_Bit_Type'Size use 4;
+ 
+    type Seven_Bit_Type is mod 2 ** 7;
+    for Seven_Bit_Type'Size use 7;
+ 
+    type Eight_Bit_Type is mod 2 ** 8;
+    for Eight_Bit_Type'Size use 8;
+ 
+    type Twelve_Bit_Type is mod 2 ** 12;
+    for Twelve_Bit_Type'Size use 12;
+    
+    type Thirty_One_Bit_Type is mod 2 ** 31;
+    for Thirty_One_Bit_Type'Size use 31;
+ 
+    type W0_Type is record
+       A : Eight_Bit_Type;
+       B : Eight_Bit_Type;
+       C : Halfword_Type;
+    end record;
+ 
+    for W0_Type use record
+       A at Word * 0 range 24 .. 31;
+       B at Word * 0 range 16 .. 23;
+       C at Word * 0 range 0 .. 15;
+    end record;
+    for W0_Type'Size use Word_Size;
+ 
+    type A_Type is (A0, A1);
+    for A_Type use (A0 => 0, A1 => 1);
+    for A_Type'Size use 1;
+    
+    type B_Type is (B_A_1,
+                    B_A_2,
+                    B_A_3,
+                    B_A_4,
+                    B_A_5,
+                    B_A_6,
+                    B_A_7,
+                    B_A_8,
+                    B_B_1,
+                    B_B_2,
+                    B_B_3,
+                    B_B_4,
+                    B_B_5,
+                    B_B_6,
+                    B_B_7,
+                    B_B_8);
+ 
+    for B_Type use (B_A_1 => 8#00#,
+                    B_A_2 => 8#01#,
+                    B_A_3 => 8#02#,
+                    B_A_4 => 8#03#,
+                    B_A_5 => 8#04#,
+                    B_A_6 => 8#05#,
+                    B_A_7 => 8#06#,
+                    B_A_8 => 8#07#,
+                    B_B_1 => 8#10#,
+                    B_B_2 => 8#11#,
+                    B_B_3 => 8#12#,
+                    B_B_4 => 8#13#,
+                    B_B_5 => 8#14#,
+                    B_B_6 => 8#15#,
+                    B_B_7 => 8#16#,
+                    B_B_8 => 8#17#);
+    for B_Type'Size use 8;
+    
+    type C_Type is (C_A, C_B);
+    for C_Type use (C_A => 0, C_B => 2);
+    for C_Type'Size use 4;
+    
+    type D_Type is record
+       Spare : Twelve_Bit_Type;
+       D_A : One_Bit_Type;
+       D_B : One_Bit_Type;
+       D_C : One_Bit_Type;
+       D_D : One_Bit_Type;
+    end record;
+ 
+    for D_Type use record
+       Spare at 0 range 4 .. 15;
+       D_A at 0 range 3 .. 3;
+       D_B at 0 range 2 .. 2;
+       D_C at 0 range 1 .. 1;
+       D_D at 0 range 0 .. 0;
+    end record;
+    for D_Type'Size use Halfword_Size;
+ 
+    type E_Type is record
+       Spare : Seven_Bit_Type;
+       E_A : One_Bit_Type;
+       E_B : One_Bit_Type;
+       E_C : One_Bit_Type;
+       E_D : One_Bit_Type;
+       E_E : One_Bit_Type;
+       E_F : One_Bit_Type;
+       E_G : One_Bit_Type;
+       E_H : One_Bit_Type;
+    end record;
+ 
+    for E_Type use record
+       Spare at 0 range 8 .. 14;
+       E_A at 0 range 7 .. 7;
+       E_B at 0 range 6 .. 6;
+       E_C at 0 range 5 .. 5;
+       E_D at 0 range 4 .. 4;
+       E_E at 0 range 3 .. 3;
+       E_F at 0 range 2 .. 2;
+       E_G at 0 range 1 .. 1;
+       E_H at 0 range 0 .. 0;
+    end record;
+    for E_Type'Size use 15;
+ 
+    type Rec is record
+       W0 : W0_Type;
+       W1A : B_Type;
+       W1B : Four_Bit_Type;
+       W1C : C_Type;
+       W1D : D_Type;
+       W2A : A_Type;
+       W2B : E_Type;
+       W2C : Halfword_Type;
+    end record;
+ 
+    for Rec use record
+       W0  at Word * 0 range  0 .. 31;
+       W1A at Word * 1 range 24 .. 31;
+       W1B at Word * 1 range 20 .. 23;
+       W1C at Word * 1 range 16 .. 19;
+       W1D at Word * 1 range  0 .. 15;
+       W2A at Word * 2 range 31 .. 31;
+       W2B at Word * 2 range 16 .. 30;
+       W2C at Word * 2 range  0 .. 15;
+    end record;
+    for Rec'Size use 6 * Halfword_Size;
+ 
+ end Opt107_Pkg;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/protected_deref1.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/protected_deref1.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/protected_deref1.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/protected_deref1.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,32 ----
+ -- { dg-do run }
+ 
+ with Ada.Text_IO;
+ 
+ procedure Protected_Deref1 is
+ 
+    protected type Fallback_Hit_Counter_Type is
+       procedure Handler;
+    end Fallback_Hit_Counter_Type;
+ 
+    protected body Fallback_Hit_Counter_Type is
+       procedure Handler is
+       begin
+          Ada.Text_IO.Put_Line ("Test");
+       end Handler;
+    end Fallback_Hit_Counter_Type;
+ 
+    Fallback_Hit_Counter : access Fallback_Hit_Counter_Type :=
+      new Fallback_Hit_Counter_Type;
+ 
+    type X is access protected procedure;
+ 
+    A : X := Fallback_Hit_Counter.all.Handler'Access;
+    B : X := Fallback_Hit_Counter.Handler'Access;
+ 
+ begin
+    A.all;
+    B.all;
+    if A /= B then
+       raise Program_Error;
+    end if;
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/reduce2.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/reduce2.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/reduce2.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/reduce2.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,18 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ procedure Reduce2 is
+ 
+   subtype Value is Natural range 0 .. 255;
+ 
+   function Do_Something (Accumulator : Value; Symbol : Character) return Value
+     is (((Accumulator + Character'Pos (Symbol)) * 17) mod 256);
+ 
+   function Do_It_By_Reduction (S : String) return Value is
+     (S'Reduce (Do_Something, 0));
+ 
+   Test_It : constant Value := Do_It_By_Reduction ("Hello, world!");
+ 
+ begin
+   null;
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/reduce4.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/reduce4.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/reduce4.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/reduce4.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ procedure Reduce4 (S : String) is
+ begin
+   if [for E of S => 1]'Reduce ("+", 0) = 3 then
+     null;
+   end if;
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/reduce5.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/reduce5.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/reduce5.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/reduce5.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,36 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ with Ada.Text_IO; use Ada.Text_IO;
+ 
+ procedure Reduce5 is
+    subtype Chunk_Number is Natural range 1 .. 8;
+    Grid  : array (1 .. 80, 1 .. 100) of Boolean := (others => (others => False));
+    Partial_Sum, Partial_Max : array (Chunk_Number) of Natural := (others => 0);
+    Partial_Min              : array (Chunk_Number) of Natural := (others => Natural'Last);
+ 
+ begin
+    for I in Grid'Range (1) loop
+       Grid (I, 1) := (for all J in Grid'Range (2) => Grid (I, J) = True);
+    end loop;
+ 
+    for I in Grid'Range (1) loop
+       declare
+          True_Count : constant Natural :=
+            [for J in Grid'Range(2) => (if Grid (I, J) then 1 else 0)]'Reduce("+",0);
+       begin
+          Partial_Sum (I) := @ + True_Count;
+          Partial_Min (I) := Natural'Min (@, True_Count);
+          Partial_Max (I) := Natural'Max (@, True_Count);
+       end;
+    end loop;
+ 
+   Put_Line ("Total=" & Natural'Image (Partial_Sum'Reduce ("+", 0)) &
+             ", Min=" & Natural'Image (Partial_Min'Reduce(Natural'Min, Natural'Last)) &
+             ", Max=" & Natural'Image (Partial_Max'Reduce(Natural'Max, 0)));
+ 
+   Put_Line ("Total=" & Partial_Sum'Reduce ("+", 0)'Image &
+             ", Min=" & Partial_Min'Reduce(Natural'Min, Natural'Last)'Image &
+             ", Max=" & Partial_Max'Reduce(Natural'Max, 0)'Image);
+ 
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/renaming18.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/renaming18.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/renaming18.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/renaming18.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,24 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatwu" }
+ 
+ procedure Renaming18 is
+ 
+   type T is record
+     Item : Integer;
+   end record;
+ 
+   A_T : T;
+   Item : Integer renames A_T.Item;
+ 
+   type VFA_T is record
+     Item : Integer;
+   end record
+   with Volatile_Full_Access;
+ 
+   A_VFA_T : VFA_T;
+   VFA_Item : Integer renames A_VFA_T.Item; -- { dg-bogus "is not referenced" }
+ 
+ begin
+   Item := 42;
+   VFA_Item := 42;
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/aggr9.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/aggr9.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/aggr9.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/aggr9.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,26 ----
+ -- PR ada/123289
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ package Aggr9 is
+ 
+    type JSON_Value is tagged null record;
+    type JSON_Object is new JSON_Value with null record
+      with Aggregate => (Empty => Empty, Add_Named => Insert); -- { dg-error "exactly one" }
+    type JSON_Integer is new JSON_Value with null record
+      with Integer_Literal => From_Universal_Image;
+ 
+    function Empty return JSON_Object
+    is (null record);
+ 
+    procedure Insert
+       (O : in out JSON_Object; Key : String; Value : JSON_Integer'Class)
+    is null;
+ 
+    procedure Insert (O : in out JSON_Object; Key : String; Value : String)
+    is null;
+ 
+    function From_Universal_Image (Value : String) return JSON_Integer
+    is (null record);
+ 
+ end Aggr9;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild-grandgrandchild.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild-grandgrandchild.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild-grandgrandchild.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild-grandgrandchild.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,5 ----
+ package Limited_With3.Child.Grandchild.Grandgrandchild is
+ 
+   function F return T is (Three);
+ 
+ end Limited_With3.Child.Grandchild.Grandgrandchild;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3-child-grandchild.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,5 ----
+ package Limited_With3.Child.Grandchild is
+ 
+   function F return T is (Two);
+ 
+ end Limited_With3.Child.Grandchild;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3-child.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3-child.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3-child.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3-child.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,7 ----
+ package Limited_With3.Child is
+ 
+   type T is (One, Two, Three);
+ 
+   function F return T is (One);
+ 
+ end Limited_With3.Child;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/limited_with3.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/limited_with3.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,4 ----
+ limited with Limited_With3.Child;
+ 
+ package Limited_With3 is
+ end Limited_With3;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/opt7.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/opt7.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/opt7.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/opt7.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,15 ----
+ -- { dg-do compile }
+ -- { dg-options "-O2 -gnatn" }
+ 
+ with Opt7_Pkg; use Opt7_Pkg;
+ 
+ package Opt7 is
+ 
+   type Rec is record
+     E : Enum;
+   end record;
+ 
+   function Image (R : Rec) return String is
+     (if R.E = A then Image (R.E) else "");
+ 
+ end Opt7;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,15 ----
+ package body Opt7_Pkg is
+ 
+   type Constant_String_Access is access constant String;
+ 
+   type Enum_Name is array (Enum) of Constant_String_Access;
+ 
+   Enum_Name_Table : constant Enum_Name :=
+     (A => new String'("A"), B => new String'("B"));
+ 
+   function Image (E : Enum) return String is
+   begin
+     return Enum_Name_Table (E).all;
+   end Image;
+ 
+ end Opt7_Pkg;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-excess-errors "no code generated" }
+ 
+ package Opt7_Pkg is
+ 
+   type Enum is (A, B);
+ 
+   function Image (E : Enum) return String with Inline;
+ 
+ end Opt7_Pkg;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/specs/unchecked_union3.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/unchecked_union3.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/specs/unchecked_union3.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/specs/unchecked_union3.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,80 ----
+ -- { dg-do compile }
+ 
+ with Interfaces;
+ 
+ package Unchecked_Union3 is
+ 
+    type T_CAN_ID is mod 2**29 with
+       Default_Value => 0,
+       Size          => 29;
+ 
+    type T_Node_ID is mod 2**7 with
+       Size          => 7,
+       Default_Value => 0;
+ 
+    type T_Message_Type_ID is new Interfaces.Unsigned_16;
+ 
+    type T_Service_Type_ID is new Interfaces.Unsigned_8;
+ 
+    type T_Priority is mod 2**5 with
+       Size          => 5,
+       Default_Value => 0;
+ 
+    type T_Format_Selector is
+      (CAN_Fields,
+       DroneCAN_Fields);
+ 
+    type T_Frame_Selector is
+      (Message_Frame,
+       Anonymous_Frame,
+       Service_Frame);
+ 
+    type Unsigned_2 is mod 2**2 with
+       Size          => 2,
+       Default_Value => 0;
+ 
+    type Unsigned_14 is mod 2**14 with
+       Size          => 14,
+       Default_Value => 0;
+ 
+    type T_Header (Format_Selector : T_Format_Selector := DroneCAN_Fields;
+       Frame_Selector              : T_Frame_Selector  := Message_Frame) is record
+       case Format_Selector is
+          when CAN_Fields =>
+             CAN_ID : T_CAN_ID;
+ 
+          when DroneCAN_Fields =>
+             Source_Node_ID      : T_Node_ID;
+             Service_Not_Message : Boolean := False;
+             Priority            : T_Priority;
+ 
+             case Frame_Selector is
+                when Message_Frame =>
+                   Message_Type_ID : T_Message_Type_ID;
+                when Anonymous_Frame =>
+                   Message_Type_ID_Lower_Bits : Unsigned_2;
+                   Discriminator              : Unsigned_14;
+                when Service_Frame =>
+                   Destination_Node_ID  : T_Node_ID;
+                   Request_Not_Response : Boolean := False;
+                   Service_Type_ID      : T_Service_Type_ID;
+             end case;
+       end case;
+    end record with
+       Unchecked_Union,
+       Size => 29;
+ 
+    for T_Header use record
+       CAN_ID                     at 0 range  0 .. 28;
+       Source_Node_ID             at 0 range  0 ..  6;
+       Service_Not_Message        at 0 range  7 ..  7;
+       Priority                   at 0 range 24 .. 28;
+       Message_Type_ID            at 0 range  8 .. 23;
+       Message_Type_ID_Lower_Bits at 0 range  8 ..  9;
+       Discriminator              at 0 range 10 .. 23;
+       Destination_Node_ID        at 0 range  8 .. 14;
+       Request_Not_Response       at 0 range 15 .. 15;
+       Service_Type_ID            at 0 range 16 .. 23;
+    end record;
+ 
+ end Unchecked_Union3;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/sso20.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/sso20.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/sso20.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/sso20.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,29 ----
+ --  { dg-do run }
+ --  { dg-options "-O" }
+ 
+ with Ada.Unchecked_Conversion;
+ with Interfaces;  use Interfaces;
+ with System;      use System;
+ 
+ procedure SSO20 is
+ 
+   type Bytes_Ref is array (1 .. 4) of Unsigned_8
+     with Convention => Ada_Pass_By_Reference;
+ 
+   type U32_BE is record
+     Value : Unsigned_32;
+   end record
+     with
+       Pack,
+       Bit_Order            => High_Order_First,
+       Scalar_Storage_Order => High_Order_First;
+ 
+   function Conv is new Ada.Unchecked_Conversion (Bytes_Ref, U32_BE);
+ 
+   function Value (B : Bytes_Ref) return Unsigned_32 is (Conv (B).Value);
+ 
+ begin
+   if Value ((16#11#, 16#22#, 16#33#, 16#44#)) /= 16#11223344# then
+      raise Program_Error;
+   end if;
+ end;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/task6.adb gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/task6.adb
*** gcc-14.3.0/gcc/testsuite/gnat.dg/task6.adb	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/task6.adb	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,15 ----
+ -- { dg-do compile }
+ 
+ package body Task6 is
+ 
+    task body T is
+    begin
+      accept E;
+    end T;
+ 
+    function Make return T is
+    begin
+      return Ret : T;
+    end;
+ 
+ end Task6;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/gnat.dg/task6.ads gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/task6.ads
*** gcc-14.3.0/gcc/testsuite/gnat.dg/task6.ads	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/gnat.dg/task6.ads	Fri Jun 19 06:51:05 2026
***************
*** 0 ****
--- 1,13 ----
+ package Task6 is
+ 
+   type Int is task interface;
+ 
+   procedure E (T: Int) is abstract;
+ 
+   task type T is new Int with
+     entry E;
+   end T;
+ 
+   function Make return T;
+ 
+ end Task6;
diff -Nrcpad gcc-14.3.0/gcc/testsuite/go.test/go-test.exp gcc-14.3.0-RC-20260619/gcc/testsuite/go.test/go-test.exp
*** gcc-14.3.0/gcc/testsuite/go.test/go-test.exp	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/go.test/go-test.exp	Fri Jun 19 06:51:05 2026
*************** proc errchk { test opts } {
*** 82,90 ****
  	set filename "errchk-$filename"
      }
      set fdin [open $test r]
!     fconfigure $fdin -encoding binary
      set fdout [open $filename w]
!     fconfigure $fdout -encoding binary
      while { [gets $fdin copy_line] >= 0 } {
  	if [string match "*////*" $copy_line] {
  	    puts $fdout $copy_line
--- 82,90 ----
  	set filename "errchk-$filename"
      }
      set fdin [open $test r]
!     fconfigure $fdin -translation binary
      set fdout [open $filename w]
!     fconfigure $fdout -translation binary
      while { [gets $fdin copy_line] >= 0 } {
  	if [string match "*////*" $copy_line] {
  	    puts $fdout $copy_line
diff -Nrcpad gcc-14.3.0/gcc/testsuite/jit.dg/all-non-failing-tests.h gcc-14.3.0-RC-20260619/gcc/testsuite/jit.dg/all-non-failing-tests.h
*** gcc-14.3.0/gcc/testsuite/jit.dg/all-non-failing-tests.h	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/jit.dg/all-non-failing-tests.h	Fri Jun 19 06:51:05 2026
***************
*** 125,132 ****
  #undef create_code
  #undef verify_code
  
! /* test-cold-attribute.c: This can't be in the testcases array as it needs
!    the `-O2` flag.  */
  
  /* test-constants.c */
  #define create_code create_code_constants
--- 125,132 ----
  #undef create_code
  #undef verify_code
  
! /* test-cold-attribute.c: This can't be in the testcases array as it needs a
!    specific optimization flag.  */
  
  /* test-constants.c */
  #define create_code create_code_constants
diff -Nrcpad gcc-14.3.0/gcc/testsuite/jit.dg/test-cold-attribute.c gcc-14.3.0-RC-20260619/gcc/testsuite/jit.dg/test-cold-attribute.c
*** gcc-14.3.0/gcc/testsuite/jit.dg/test-cold-attribute.c	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/jit.dg/test-cold-attribute.c	Fri Jun 19 06:51:05 2026
***************
*** 8,15 ****
  #define TEST_ESCHEWS_SET_OPTIONS
  static void set_options (gcc_jit_context *ctxt, const char *argv0)
  {
!   // Set "-O2".
!   gcc_jit_context_set_int_option(ctxt, GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 2);
  }
  
  #define TEST_COMPILING_TO_FILE
--- 8,15 ----
  #define TEST_ESCHEWS_SET_OPTIONS
  static void set_options (gcc_jit_context *ctxt, const char *argv0)
  {
!   // Set "-Oz".
!   gcc_jit_context_add_command_line_option (ctxt, "-Oz");
  }
  
  #define TEST_COMPILING_TO_FILE
diff -Nrcpad gcc-14.3.0/gcc/testsuite/lib/lto.exp gcc-14.3.0-RC-20260619/gcc/testsuite/lib/lto.exp
*** gcc-14.3.0/gcc/testsuite/lib/lto.exp	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/lib/lto.exp	Fri Jun 19 06:51:05 2026
*************** proc lto-obj { source dest optall optfil
*** 309,314 ****
--- 309,351 ----
      ${tool}_check_compile "$testcase $dest assemble" $optstr $dest $comp_output
  }
  
+ proc lto-build-archive { testname objlist dest } {
+     global testcase
+     global tool
+     global GCC_UNDER_TEST
+ 
+     upvar dg-messages-by-file dg-messages-by-file
+ 
+     verbose "lto-build-archive" 2
+     file_on_host delete $dest
+ 
+     # Check that all of the objects were built successfully.
+     foreach obj [split $objlist] {
+ 	if ![file_on_host exists $obj] then {
+ 	    unresolved "$testcase $testname build-archive"
+ 	    return
+ 	}
+     }
+ 
+     # Hack up the gcc-ar command from $GCC_UNDER_TEST.
+     set ar_cmd [file dirname [lindex $GCC_UNDER_TEST 0]]
+     set ar_cmd "$ar_cmd/gcc-ar [lrange $GCC_UNDER_TEST 1 end]"
+     set ar_output [remote_exec host "$ar_cmd rcs $dest $objlist"]
+     set retval [lindex $ar_output 0]
+     set retmsg [lindex $ar_output 1]
+ 
+     # If any message remains, we fail.  Don't bother overriding tool since
+     # we're not really looking to match any specific error or warning patterns
+     # here.
+     if ![string match "0" $retval] then {
+ 	${tool}_fail $testcase "ar returned $retval: $retmsg"
+ 	return 0
+     } else {
+ 	${tool}_pass $testcase "archive"
+ 	return 0
+     }
+ }
+ 
  # lto-link-and-maybe-run -- link the object files and run the executable
  # if compile_type is set to "run"
  #
*************** proc lto-link-and-maybe-run { testname o
*** 379,385 ****
      }
  
      # Return if we only needed to link.
!     if { ![string compare "link" $compile_type] } {
  	return
      }
  
--- 416,423 ----
      }
  
      # Return if we only needed to link.
!     if { ![string compare "link" $compile_type] \
!         || ![string compare "ar-link" $compile_type] } {
  	return
      }
  
*************** proc lto-get-options-main { src } {
*** 510,515 ****
--- 548,555 ----
  		set compile_type "run"
  	    } elseif { ![string compare "link" $dgdo] } {
  		set compile_type "link"
+ 	    } elseif { ![string compare "ar-link" $dgdo] } {
+ 		set compile_type "ar-link"
  	    } else {
  		warning "lto.exp does not support dg-lto-do $dgdo"
  	    }
*************** proc lto-execute-1 { src1 sid } {
*** 691,696 ****
--- 731,742 ----
      # Get the base name of this test, for use in messages.
      set testcase [lindex ${src_list} 0]
  
+     # The test needs to build all but the main file into an archive and then
+     # link them all together.
+     if { ![string compare "ar-link" $compile_type] } {
+         set arname "${sid}_${base}.a"
+     }
+ 
      # Remove the $srcdir and $tmpdir prefixes from $src1.  (It would
      # be possible to use "regsub" here, if we were careful to escape
      # all regular expression characters in $srcdir and $tmpdir, but
*************** proc lto-execute-1 { src1 sid } {
*** 755,762 ****
--- 801,824 ----
  	    incr i
  	}
  
+ 	# Bundle all but the main file into an archive. Update objlist to only
+ 	# have the archive and the last file.
+ 	if { ![string compare "ar-link" $compile_type] } {
+ 	    set mainsrc [lindex $obj_list 0]
+ 	    set obj_list [lrange $obj_list 1 end]
+ 	    lto-build-archive \
+ 		"[lindex $obj_list 1]-[lindex $obj_list end]" \
+ 		$obj_list $arname
+ 
+ 	    set obj_list ""
+ 	    lappend obj_list $mainsrc
+ 	    lappend obj_list $arname
+ 	    set num_srcs 2
+ 	}
+ 
  	# Link (using the compiler under test), run, and clean up tests.
  	if { ![string compare "run" $compile_type] \
+ 	     || ![string compare "ar-link" $compile_type] \
  	     || ![string compare "link" $compile_type] } {
  
  	    # Filter out any link options we were asked to suppress.
*************** proc lto-execute-1 { src1 sid } {
*** 772,777 ****
--- 834,843 ----
  		    "[lindex $obj_list 0]-[lindex $obj_list end]" \
  		    $obj_list $execname $filtered ${dg-extra-ld-options} \
  		    $filtered
+ 
+ 	    if (![string compare "ar-link" $compile_type]) {
+ 		file_on_host delete $arname
+ 	      }
  	}
  
  
*************** proc lto-execute-1 { src1 sid } {
*** 818,823 ****
--- 884,890 ----
  	unset testname_with_flags
  	
  	if { ![string compare "run" $compile_type] \
+ 	     || ![string compare "ar-link" $compile_type] \
  	     || ![string compare "link" $compile_type] } {
  	    file_on_host delete $execname
  	}
diff -Nrcpad gcc-14.3.0/gcc/testsuite/lib/mike-g++.exp gcc-14.3.0-RC-20260619/gcc/testsuite/lib/mike-g++.exp
*** gcc-14.3.0/gcc/testsuite/lib/mike-g++.exp	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/lib/mike-g++.exp	Fri Jun 19 06:51:05 2026
*************** proc postbase  { src_code run groups arg
*** 101,107 ****
  
      set compile_type "none"
  
!     case $actions {
  	compile
  	{
  	    set compile_type "assembly"
--- 101,107 ----
  
      set compile_type "none"
  
!     switch $actions {
  	compile
  	{
  	    set compile_type "assembly"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/lib/mike-gcc.exp gcc-14.3.0-RC-20260619/gcc/testsuite/lib/mike-gcc.exp
*** gcc-14.3.0/gcc/testsuite/lib/mike-gcc.exp	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/lib/mike-gcc.exp	Fri Jun 19 06:51:05 2026
*************** proc postbase  { src_code run groups arg
*** 105,111 ****
  
      set compile_type "none"
  
!     case $actions {
  	compile
  	{
  	    set compile_type "assembly"
--- 105,111 ----
  
      set compile_type "none"
  
!     switch $actions {
  	compile
  	{
  	    set compile_type "assembly"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/lib/multiline.exp gcc-14.3.0-RC-20260619/gcc/testsuite/lib/multiline.exp
*** gcc-14.3.0/gcc/testsuite/lib/multiline.exp	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/lib/multiline.exp	Fri Jun 19 06:51:05 2026
*************** proc handle-multiline-outputs { text } {
*** 153,158 ****
--- 153,161 ----
      # If dg-enable-nn-line-numbers was provided, then obscure source-margin
      # line numbers by converting them to "NN" form.
      set text [maybe-handle-nn-line-numbers $text]
+ 
+     # Remove Windows .exe suffix
+     regsub -all "(as|cc1|cc1plus|collect2|f951|ld|lto-wrapper)\.exe?:" $text {\1:} text
      
      set index 0
      foreach entry $multiline_expected_outputs {
diff -Nrcpad gcc-14.3.0/gcc/testsuite/lib/target-supports.exp gcc-14.3.0-RC-20260619/gcc/testsuite/lib/target-supports.exp
*** gcc-14.3.0/gcc/testsuite/lib/target-supports.exp	Fri May 23 11:02:07 2025
--- gcc-14.3.0-RC-20260619/gcc/testsuite/lib/target-supports.exp	Fri Jun 19 06:51:05 2026
*************** proc add_options_for_aarch64_sve { flags
*** 5388,5393 ****
--- 5388,5400 ----
      return "$flags -march=armv8.2-a+sve"
  }
  
+ proc add_options_for_aarch64_sme { flags } {
+     if { ![istarget aarch64*-*-*] || [check_effective_target_aarch64_sme] } {
+ 	return "$flags"
+     }
+     return "$flags -march=armv9-a+sme"
+ }
+ 
  # Return 1 if this is an ARM target supporting the FP16 alternative
  # format.  Some multilibs may be incompatible with the options needed.  Also
  # set et_arm_fp16_alternative_flags to the best options to add.
*************** foreach { armfunc armflag armdefs } {
*** 5680,5685 ****
--- 5687,5693 ----
  	v8_1m_main "-march=armv8.1-m.main+fp -mthumb" __ARM_ARCH_8M_MAIN__
  	v8_1m_main_pacbti "-march=armv8.1-m.main+pacbti+fp -mthumb"
  		"__ARM_ARCH_8M_MAIN__ && __ARM_FEATURE_BTI && __ARM_FEATURE_PAUTH"
+ 	v8_1m_main_fp_hard "-march=armv8.1-m.main+pacbti+fp -mthumb -mfpu=auto -mfloat-abi=hard" "__ARM_ARCH_8M_MAIN__ && (__ARM_FP & 2)"
  	v9a "-march=armv9-a+simd" __ARM_ARCH_9A__ } {
      eval [string map [list FUNC $armfunc FLAG $armflag DEFS $armdefs ] {
  	proc check_effective_target_arm_arch_FUNC_ok { } {
*************** foreach N { 128 256 512 1024 2048 } {
*** 6037,6042 ****
--- 6045,6066 ----
      }]
  }
  
+ # Return true if this is an AArch64 target that can run SME code.
+ 
+ proc check_effective_target_aarch64_sme_hw { } {
+     if { ![istarget aarch64*-*-*] } {
+ 	return 0
+     }
+     return [check_runtime aarch64_sme_hw_available {
+ 	int
+ 	main (void)
+ 	{
+ 	  asm volatile ("rdsvl x0, #1");
+ 	  return 0;
+ 	}
+     } [add_options_for_aarch64_sme ""]]
+ }
+ 
  proc check_effective_target_arm_neonv2_hw { } {
      return [check_runtime arm_neon_hwv2_available {
  	#include "arm_neon.h"
*************** proc add_options_for_arm_v8_3a_fp16_comp
*** 12986,12992 ****
  
  proc check_effective_target_arm_v8_3a_complex_neon_hw { } {
      if { ![check_effective_target_arm_v8_3a_complex_neon_ok] } {
!         return 1;
      }
      return [check_runtime arm_v8_3a_complex_neon_hw_available {
          #include "arm_neon.h"
--- 13010,13016 ----
  
  proc check_effective_target_arm_v8_3a_complex_neon_hw { } {
      if { ![check_effective_target_arm_v8_3a_complex_neon_ok] } {
! 	return 0;
      }
      return [check_runtime arm_v8_3a_complex_neon_hw_available {
          #include "arm_neon.h"
diff -Nrcpad gcc-14.3.0/gcc/testsuite/sparseset.supp gcc-14.3.0-RC-20260619/gcc/testsuite/sparseset.supp
*** gcc-14.3.0/gcc/testsuite/sparseset.supp	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/gcc/testsuite/sparseset.supp	Fri Jun 19 06:51:06 2026
***************
*** 0 ****
--- 1,10 ----
+ {
+    SPARSESET1
+    Memcheck:Cond
+    fun:sparseset_bit_p
+ }
+ {
+    SPARSESET2
+    Memcheck:Value8
+    fun:sparseset_bit_p
+ }
diff -Nrcpad gcc-14.3.0/gcc/tree-chrec.cc gcc-14.3.0-RC-20260619/gcc/tree-chrec.cc
*** gcc-14.3.0/gcc/tree-chrec.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-chrec.cc	Fri Jun 19 06:51:06 2026
*************** convert_affine_scev (class loop *loop, t
*** 1490,1496 ****
    new_step = *step;
    if (TYPE_PRECISION (step_type) > TYPE_PRECISION (ct) && TYPE_UNSIGNED (ct))
      {
!       tree signed_ct = build_nonstandard_integer_type (TYPE_PRECISION (ct), 0);
        new_step = chrec_convert (signed_ct, new_step, at_stmt,
                                  use_overflow_semantics);
      }
--- 1490,1496 ----
    new_step = *step;
    if (TYPE_PRECISION (step_type) > TYPE_PRECISION (ct) && TYPE_UNSIGNED (ct))
      {
!       tree signed_ct = signed_type_for (ct);
        new_step = chrec_convert (signed_ct, new_step, at_stmt,
                                  use_overflow_semantics);
      }
diff -Nrcpad gcc-14.3.0/gcc/tree-eh.cc gcc-14.3.0-RC-20260619/gcc/tree-eh.cc
*** gcc-14.3.0/gcc/tree-eh.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-eh.cc	Fri Jun 19 06:51:06 2026
*************** sink_clobbers (basic_block bb,
*** 3740,3745 ****
--- 3740,3757 ----
      }
    if (first_sunk)
      {
+       /* If there isn't a single predecessor but no virtual PHI node
+ 	 create one and arrange for virtual operands to be renamed as
+ 	 we cannot be sure all incoming edges will updated from sinking
+ 	 something.  */
+       if (!vphi && !single_pred_p (succbb))
+ 	{
+ 	  vphi = create_phi_node (gimple_vop (cfun), succbb);
+ 	  FOR_EACH_EDGE (e, ei, succbb->preds)
+ 	    add_phi_arg (vphi, gimple_vop (cfun), e, UNKNOWN_LOCATION);
+ 	  mark_virtual_operands_for_renaming (cfun);
+ 	  todo |= TODO_update_ssa_only_virtuals;
+ 	}
        /* Adjust virtual operands if we sunk across a virtual PHI.  */
        if (vphi)
  	{
*************** sink_clobbers (basic_block bb,
*** 3759,3772 ****
  		   gimple_vuse (last_sunk));
  	  SET_USE (gimple_vuse_op (last_sunk), phi_def);
  	}
-       /* If there isn't a single predecessor but no virtual PHI node
-          arrange for virtual operands to be renamed.  */
-       else if (!single_pred_p (succbb)
- 	       && TREE_CODE (gimple_vuse (last_sunk)) == SSA_NAME)
- 	{
- 	  mark_virtual_operand_for_renaming (gimple_vuse (last_sunk));
- 	  todo |= TODO_update_ssa_only_virtuals;
- 	}
      }
  
    return todo;
--- 3771,3776 ----
diff -Nrcpad gcc-14.3.0/gcc/tree-inline.cc gcc-14.3.0-RC-20260619/gcc/tree-inline.cc
*** gcc-14.3.0/gcc/tree-inline.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-inline.cc	Fri Jun 19 06:51:06 2026
*************** copy_edges_for_bb (basic_block bb, profi
*** 2711,2716 ****
--- 2711,2719 ----
  	      make_single_succ_edge (copy_stmt_bb, abnormal_goto_dest,
  				     EDGE_ABNORMAL);
  	      gimple_call_set_ctrl_altering (copy_stmt, true);
+ 	      if (is_a <gcall *> (copy_stmt)
+ 		  && (gimple_call_flags (copy_stmt) & ECF_NORETURN))
+ 		fixup_noreturn_call (copy_stmt);
  	    }
  	}
  
*************** copy_debug_stmts (copy_body_data *id)
*** 3322,3328 ****
      return;
  
    for (gdebug *stmt : id->debug_stmts)
!     copy_debug_stmt (stmt, id);
  
    id->debug_stmts.release ();
  }
--- 3325,3333 ----
      return;
  
    for (gdebug *stmt : id->debug_stmts)
!     /* But avoid re-processing debug stmts that have been elided.  */
!     if (gimple_bb (stmt))
!       copy_debug_stmt (stmt, id);
  
    id->debug_stmts.release ();
  }
*************** expand_call_inline (basic_block bb, gimp
*** 5232,5238 ****
    if (use_retvar && gimple_call_lhs (stmt))
      {
        gimple *old_stmt = stmt;
!       stmt = gimple_build_assign (gimple_call_lhs (stmt), use_retvar);
        gimple_set_location (stmt, gimple_location (old_stmt));
        gsi_replace (&stmt_gsi, stmt, false);
        maybe_clean_or_replace_eh_stmt (old_stmt, stmt);
--- 5237,5256 ----
    if (use_retvar && gimple_call_lhs (stmt))
      {
        gimple *old_stmt = stmt;
!       tree lhs = gimple_call_lhs (stmt);
!       if (!is_gimple_reg (lhs)
! 	  && !is_gimple_reg (use_retvar)
! 	  && is_gimple_reg_type (TREE_TYPE (lhs)))
! 	{
! 	  /* If both lhs and use_retvar aren't gimple regs, yet have
! 	     gimple reg type, copy through a temporary SSA_NAME.  */
! 	  gimple *g = gimple_build_assign (make_ssa_name (TREE_TYPE (lhs)),
! 					   use_retvar);
! 	  gimple_set_location (g, gimple_location (old_stmt));
! 	  gsi_insert_before (&stmt_gsi, g, GSI_SAME_STMT);
! 	  use_retvar = gimple_assign_lhs (g);
! 	}
!       stmt = gimple_build_assign (lhs, use_retvar);
        gimple_set_location (stmt, gimple_location (old_stmt));
        gsi_replace (&stmt_gsi, stmt, false);
        maybe_clean_or_replace_eh_stmt (old_stmt, stmt);
diff -Nrcpad gcc-14.3.0/gcc/tree-object-size.cc gcc-14.3.0-RC-20260619/gcc/tree-object-size.cc
*** gcc-14.3.0/gcc/tree-object-size.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-object-size.cc	Fri Jun 19 06:51:06 2026
*************** object_sizes_set_temp (struct object_siz
*** 319,327 ****
    tree val = object_sizes_get (osi, varno);
  
    if (size_initval_p (val, osi->object_size_type))
!     object_sizes_set (osi, varno,
! 		      make_ssa_name (sizetype),
! 		      make_ssa_name (sizetype));
  }
  
  /* Initialize OFFSET_LIMIT variable.  */
--- 319,329 ----
    tree val = object_sizes_get (osi, varno);
  
    if (size_initval_p (val, osi->object_size_type))
!     {
!       val = make_ssa_name (sizetype);
!       tree wholeval = make_ssa_name (sizetype);
!       object_sizes_set (osi, varno, val, wholeval);
!     }
  }
  
  /* Initialize OFFSET_LIMIT variable.  */
diff -Nrcpad gcc-14.3.0/gcc/tree-phinodes.h gcc-14.3.0-RC-20260619/gcc/tree-phinodes.h
*** gcc-14.3.0/gcc/tree-phinodes.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-phinodes.h	Fri Jun 19 06:51:06 2026
*************** phi_arg_index_from_use (use_operand_p us
*** 50,62 ****
  {
    struct phi_arg_d *element, *root;
    size_t index;
!   gimple *phi;
  
    /* Since the use is the first thing in a PHI argument element, we can
       calculate its index based on casting it to an argument, and performing
       pointer arithmetic.  */
  
!   phi = USE_STMT (use);
  
    element = (struct phi_arg_d *)use;
    root = gimple_phi_arg (phi, 0);
--- 50,62 ----
  {
    struct phi_arg_d *element, *root;
    size_t index;
!   gphi *phi;
  
    /* Since the use is the first thing in a PHI argument element, we can
       calculate its index based on casting it to an argument, and performing
       pointer arithmetic.  */
  
!   phi = as_a <gphi *> (USE_STMT (use));
  
    element = (struct phi_arg_d *)use;
    root = gimple_phi_arg (phi, 0);
*************** phi_arg_index_from_use (use_operand_p us
*** 71,74 ****
--- 71,83 ----
   return index;
  }
  
+ /* Return the edge into the PHI node USE.  */
+ 
+ inline edge
+ phi_arg_edge_from_use (use_operand_p use)
+ {
+   gphi *phi = as_a <gphi *> (USE_STMT (use));
+   return gimple_phi_arg_edge (phi, phi_arg_index_from_use (use));
+ }
+ 
  #endif /* GCC_TREE_PHINODES_H */
diff -Nrcpad gcc-14.3.0/gcc/tree-scalar-evolution.cc gcc-14.3.0-RC-20260619/gcc/tree-scalar-evolution.cc
*** gcc-14.3.0/gcc/tree-scalar-evolution.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-scalar-evolution.cc	Fri Jun 19 06:51:06 2026
*************** scev_dfs::add_to_evolution_1 (tree chrec
*** 669,674 ****
--- 669,685 ----
  	  to_add = chrec_convert (type, to_add, at_stmt);
  	  right = chrec_convert_rhs (type, right, at_stmt);
  	  right = chrec_fold_plus (chrec_type (right), right, to_add);
+ 	  /* When we have an evolution in a non-wrapping type and
+ 	     in the process of accumulating CHREC_RIGHT there was
+ 	     overflow this indicates in the association that happened
+ 	     in building the CHREC clearly involved UB.  Avoid this.
+ 	     In building a CHREC we basically turn (a + INCR1) + INCR2
+ 	     into a + (INCR1 + INCR2) which is not always valid.
+ 	     Note this check only catches few invalid cases.  */
+ 	  if ((INTEGRAL_TYPE_P (type) && ! TYPE_OVERFLOW_WRAPS (type))
+ 	      && TREE_CODE (right) == INTEGER_CST
+ 	      && TREE_OVERFLOW (right))
+ 	    return chrec_dont_know;
  	  return build_polynomial_chrec (var, left, right);
  	}
        else
diff -Nrcpad gcc-14.3.0/gcc/tree-sra.cc gcc-14.3.0-RC-20260619/gcc/tree-sra.cc
*** gcc-14.3.0/gcc/tree-sra.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-sra.cc	Fri Jun 19 06:51:06 2026
*************** build_debug_ref_for_model (location_t lo
*** 2080,2095 ****
  }
  
  /* Construct a memory reference consisting of component_refs and array_refs to
!    a part of an aggregate *RES (which is of type TYPE).  The requested part
!    should have type EXP_TYPE at be the given OFFSET.  This function might not
!    succeed, it returns true when it does and only then *RES points to something
!    meaningful.  This function should be used only to build expressions that we
!    might need to present to user (e.g. in warnings).  In all other situations,
     build_ref_for_model or build_ref_for_offset should be used instead.  */
  
  static bool
  build_user_friendly_ref_for_offset (tree *res, tree type, HOST_WIDE_INT offset,
! 				    tree exp_type)
  {
    while (1)
      {
--- 2080,2099 ----
  }
  
  /* Construct a memory reference consisting of component_refs and array_refs to
!    a part of an aggregate *RES which is of type TYPE.  The requested part
!    should have type EXP_TYPE at the given OFFSET.  CUR_SIZE must be the size of
!    *RES unless it is known that *RES alone cannot be the result.  This function
!    might not succeed, it returns true when it does and only then *RES points to
!    something meaningful.
! 
!    This function should be used only to build expressions that we might need to
!    present to user (e.g. in warnings).  In all other situations,
     build_ref_for_model or build_ref_for_offset should be used instead.  */
  
  static bool
  build_user_friendly_ref_for_offset (tree *res, tree type, HOST_WIDE_INT offset,
! 				    HOST_WIDE_INT cur_size, tree exp_type,
! 				    HOST_WIDE_INT exp_size)
  {
    while (1)
      {
*************** build_user_friendly_ref_for_offset (tree
*** 2097,2103 ****
        tree tr_size, index, minidx;
        HOST_WIDE_INT el_size;
  
!       if (offset == 0 && exp_type
  	  && types_compatible_p (exp_type, type))
  	return true;
  
--- 2101,2108 ----
        tree tr_size, index, minidx;
        HOST_WIDE_INT el_size;
  
!       if (offset == 0
! 	  && cur_size == exp_size
  	  && types_compatible_p (exp_type, type))
  	return true;
  
*************** build_user_friendly_ref_for_offset (tree
*** 2135,2141 ****
  			     NULL_TREE);
  	      expr_ptr = &expr;
  	      if (build_user_friendly_ref_for_offset (expr_ptr, TREE_TYPE (fld),
! 						      offset - pos, exp_type))
  		{
  		  *res = expr;
  		  return true;
--- 2140,2147 ----
  			     NULL_TREE);
  	      expr_ptr = &expr;
  	      if (build_user_friendly_ref_for_offset (expr_ptr, TREE_TYPE (fld),
! 						      offset - pos, size,
! 						      exp_type, exp_size))
  		{
  		  *res = expr;
  		  return true;
*************** build_user_friendly_ref_for_offset (tree
*** 2158,2174 ****
  	  *res = build4 (ARRAY_REF, TREE_TYPE (type), *res, index,
  			 NULL_TREE, NULL_TREE);
  	  offset = offset % el_size;
  	  type = TREE_TYPE (type);
  	  break;
  
  	default:
! 	  if (offset != 0)
! 	    return false;
! 
! 	  if (exp_type)
! 	    return false;
! 	  else
! 	    return true;
  	}
      }
  }
--- 2164,2175 ----
  	  *res = build4 (ARRAY_REF, TREE_TYPE (type), *res, index,
  			 NULL_TREE, NULL_TREE);
  	  offset = offset % el_size;
+ 	  cur_size = el_size;
  	  type = TREE_TYPE (type);
  	  break;
  
  	default:
! 	  return false;
  	}
      }
  }
*************** path_comparable_for_same_access (tree ex
*** 2315,2320 ****
--- 2316,2326 ----
      {
        if (!zerop (TREE_OPERAND (expr, 1)))
  	return false;
+       gcc_assert (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
+ 		  && DECL_P (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)));
+       if (TYPE_MAIN_VARIANT (TREE_TYPE (expr))
+ 	  != TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (TREE_OPERAND (expr, 0), 0))))
+ 	return false;
      }
    else
      gcc_assert (DECL_P (expr));
*************** sort_and_splice_var_accesses (tree var)
*** 2480,2485 ****
--- 2486,2497 ----
  		}
  	      unscalarizable_region = true;
  	    }
+ 	  /* If there the same place is accessed with two incompatible
+ 	     aggregate types, trying to base total scalarization on either of
+ 	     them can be wrong.  */
+ 	  if (!first_scalar && !types_compatible_p (access->type, ac2->type))
+ 	    bitmap_set_bit (cannot_scalarize_away_bitmap,
+ 			    DECL_UID (access->base));
  
  	  if (grp_same_access_path
  	      && (!ac2->grp_same_access_path
*************** analyze_access_subtree (struct access *r
*** 2865,2871 ****
  
    for (child = root->first_child; child; child = child->next_sibling)
      {
!       hole |= covered_to < child->offset;
        sth_created |= analyze_access_subtree (child, root,
  					     allow_replacements && !scalar
  					     && !root->grp_partial_lhs,
--- 2877,2886 ----
  
    for (child = root->first_child; child; child = child->next_sibling)
      {
!       if (totally)
! 	covered_to = child->offset;
!       else
! 	hole |= covered_to < child->offset;
        sth_created |= analyze_access_subtree (child, root,
  					     allow_replacements && !scalar
  					     && !root->grp_partial_lhs,
*************** analyze_access_subtree (struct access *r
*** 2876,2881 ****
--- 2891,2898 ----
  	covered_to += child->size;
        else
  	hole = true;
+       if (totally && !hole)
+ 	covered_to = limit;
      }
  
    if (allow_replacements && scalar && !root->first_child
*************** analyze_access_subtree (struct access *r
*** 2948,2954 ****
  	root->grp_total_scalarization = 0;
      }
  
!   if (!hole || totally)
      root->grp_covered = 1;
    else if (root->grp_write || comes_initialized_p (root->base))
      root->grp_unscalarized_data = 1; /* not covered and written to */
--- 2965,2971 ----
  	root->grp_total_scalarization = 0;
      }
  
!   if (!hole)
      root->grp_covered = 1;
    else if (root->grp_write || comes_initialized_p (root->base))
      root->grp_unscalarized_data = 1; /* not covered and written to */
*************** create_artificial_child_access (struct a
*** 3019,3025 ****
    struct access *access = access_pool.allocate ();
    memset (access, 0, sizeof (struct access));
    if (!build_user_friendly_ref_for_offset (&expr, TREE_TYPE (expr), new_offset,
! 					   model->type))
      {
        access->grp_no_warning = true;
        expr = build_ref_for_model (EXPR_LOCATION (parent->base), parent->base,
--- 3036,3043 ----
    struct access *access = access_pool.allocate ();
    memset (access, 0, sizeof (struct access));
    if (!build_user_friendly_ref_for_offset (&expr, TREE_TYPE (expr), new_offset,
! 					   parent->size, model->type,
! 					   model->size))
      {
        access->grp_no_warning = true;
        expr = build_ref_for_model (EXPR_LOCATION (parent->base), parent->base,
*************** propagate_subaccesses_from_rhs (struct a
*** 3158,3165 ****
  	  tree t = lacc->base;
  
  	  lacc->type = racc->type;
  	  if (build_user_friendly_ref_for_offset (&t, TREE_TYPE (t),
! 						  lacc->offset, racc->type))
  	    {
  	      lacc->expr = t;
  	      lacc->grp_same_access_path = true;
--- 3176,3186 ----
  	  tree t = lacc->base;
  
  	  lacc->type = racc->type;
+ 	  /* We know racc and lacc are of different types so can pass -1 as
+ 	     cur_size.  */
  	  if (build_user_friendly_ref_for_offset (&t, TREE_TYPE (t),
! 						  lacc->offset, -1,
! 						  racc->type, racc->size))
  	    {
  	      lacc->expr = t;
  	      lacc->grp_same_access_path = true;
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-dom.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-dom.cc
*** gcc-14.3.0/gcc/tree-ssa-dom.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-dom.cc	Fri Jun 19 06:51:06 2026
*************** dom_opt_dom_walker::set_global_ranges_fr
*** 1429,1434 ****
--- 1429,1440 ----
        || !assert_unreachable_fallthru_edge_p (pred_e))
      return;
  
+   // Bail if the condition leading to the assert has 2 ssa-names.
+   // See PR 125501.
+   if ((TREE_CODE (gimple_cond_lhs (stmt)) == SSA_NAME
+       && TREE_CODE (gimple_cond_rhs (stmt)) == SSA_NAME))
+     return;
+ 
    tree name;
    gori_compute &gori = m_ranger->gori ();
    FOR_EACH_GORI_EXPORT_NAME (gori, pred_e->src, name)
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-dse.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-dse.cc
*** gcc-14.3.0/gcc/tree-ssa-dse.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-dse.cc	Fri Jun 19 06:51:06 2026
*************** initialize_ao_ref_for_dse (gimple *stmt,
*** 182,191 ****
  	       can provide a may-def variant.  */
  	    if (may_def_ok)
  	      {
! 		ao_ref_init_from_ptr_and_size (
! 		  write, gimple_call_arg (stmt, 0),
! 		  TYPE_SIZE_UNIT (
! 		    TREE_TYPE (gimple_call_arg (stmt, stored_value_index))));
  		return true;
  	      }
  	    break;
--- 182,191 ----
  	       can provide a may-def variant.  */
  	    if (may_def_ok)
  	      {
! 		ao_ref_init_from_ptr_and_range (
! 		  write, gimple_call_arg (stmt, 0), true, 0, -1,
! 		  tree_to_poly_int64 (TYPE_SIZE (
! 		    TREE_TYPE (gimple_call_arg (stmt, stored_value_index)))));
  		return true;
  	      }
  	    break;
*************** compute_trims (ao_ref *ref, sbitmap live
*** 424,431 ****
       the bitmap extends through ref->max_size, so we know that in the original
       bitmap bits 0 .. ref->max_size were true.  But we need to check that this
       covers the bytes of REF exactly.  */
!   const unsigned int align = known_alignment (ref->offset);
!   if ((align > 0 && align < BITS_PER_UNIT)
        || !known_eq (ref->size, ref->max_size))
      return;
  
--- 424,433 ----
       the bitmap extends through ref->max_size, so we know that in the original
       bitmap bits 0 .. ref->max_size were true.  But we need to check that this
       covers the bytes of REF exactly.  */
!   const unsigned int offset_align = known_alignment (ref->offset);
!   const unsigned int size_align = known_alignment (ref->size);
!   if ((offset_align > 0 && offset_align < BITS_PER_UNIT)
!       || (size_align > 0 && size_align < BITS_PER_UNIT)
        || !known_eq (ref->size, ref->max_size))
      return;
  
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-loop-im.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-im.cc
*** gcc-14.3.0/gcc/tree-ssa-loop-im.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-im.cc	Fri Jun 19 06:51:06 2026
*************** can_sm_ref_p (class loop *loop, im_mem_r
*** 3223,3229 ****
       explicitly.  */
    base = get_base_address (ref->mem.ref);
    if ((tree_could_trap_p (ref->mem.ref)
!        || (DECL_P (base) && TREE_READONLY (base)))
        /* ???  We can at least use false here, allowing loads?  We
  	 are forcing conditional stores if the ref is not always
  	 stored to later anyway.  So this would only guard
--- 3223,3230 ----
       explicitly.  */
    base = get_base_address (ref->mem.ref);
    if ((tree_could_trap_p (ref->mem.ref)
!        || (DECL_P (base) && TREE_READONLY (base))
!        || TREE_CODE (base) == STRING_CST)
        /* ???  We can at least use false here, allowing loads?  We
  	 are forcing conditional stores if the ref is not always
  	 stored to later anyway.  So this would only guard
*************** fill_always_executed_in_1 (class loop *l
*** 3344,3437 ****
    edge e;
    class loop *inn_loop = loop;
  
!   if (ALWAYS_EXECUTED_IN (loop->header) == NULL)
      {
!       auto_vec<basic_block, 64> worklist;
!       worklist.reserve_exact (loop->num_nodes);
!       worklist.quick_push (loop->header);
!       do
! 	{
! 	  edge_iterator ei;
! 	  bb = worklist.pop ();
  
! 	  if (!flow_bb_inside_loop_p (inn_loop, bb))
! 	    {
! 	      /* When we are leaving a possibly infinite inner loop
! 		 we have to stop processing.  */
! 	      if (!finite_loop_p (inn_loop))
! 		break;
! 	      /* If the loop was finite we can continue with processing
! 		 the loop we exited to.  */
! 	      inn_loop = bb->loop_father;
! 	    }
  
! 	  if (dominated_by_p (CDI_DOMINATORS, loop->latch, bb))
! 	    last = bb;
  
! 	  if (bitmap_bit_p (contains_call, bb->index))
! 	    break;
  
! 	  /* If LOOP exits from this BB stop processing.  */
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
! 	    if (!flow_bb_inside_loop_p (loop, e->dest))
! 	      break;
! 	  if (e)
! 	    break;
  
! 	  /* A loop might be infinite (TODO use simple loop analysis
! 	     to disprove this if possible).  */
! 	  if (bb->flags & BB_IRREDUCIBLE_LOOP)
! 	    break;
  
! 	  if (bb->loop_father->header == bb)
! 	    /* Record that we enter into a subloop since it might not
! 	       be finite.  */
! 	    /* ???  Entering into a not always executed subloop makes
! 	       fill_always_executed_in quadratic in loop depth since
! 	       we walk those loops N times.  This is not a problem
! 	       in practice though, see PR102253 for a worst-case testcase.  */
! 	    inn_loop = bb->loop_father;
  
! 	  /* Walk the body of LOOP sorted by dominance relation.  Additionally,
! 	     if a basic block S dominates the latch, then only blocks dominated
! 	     by S are after it.
! 	     This is get_loop_body_in_dom_order using a worklist algorithm and
! 	     stopping once we are no longer interested in visiting further
! 	     blocks.  */
! 	  unsigned old_len = worklist.length ();
! 	  unsigned postpone = 0;
! 	  for (basic_block son = first_dom_son (CDI_DOMINATORS, bb);
! 	       son;
! 	       son = next_dom_son (CDI_DOMINATORS, son))
! 	    {
! 	      if (!flow_bb_inside_loop_p (loop, son))
! 		continue;
! 	      if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
! 		postpone = worklist.length ();
! 	      worklist.quick_push (son);
! 	    }
! 	  if (postpone)
! 	    /* Postponing the block that dominates the latch means
! 	       processing it last and thus putting it earliest in the
! 	       worklist.  */
! 	    std::swap (worklist[old_len], worklist[postpone]);
  	}
!       while (!worklist.is_empty ());
  
!       while (1)
  	{
  	  if (dump_enabled_p ())
  	    dump_printf (MSG_NOTE, "BB %d is always executed in loop %d\n",
  			 last->index, loop->num);
  	  SET_ALWAYS_EXECUTED_IN (last, loop);
- 	  if (last == loop->header)
- 	    break;
- 	  last = get_immediate_dominator (CDI_DOMINATORS, last);
  	}
      }
- 
-   for (loop = loop->inner; loop; loop = loop->next)
-     fill_always_executed_in_1 (loop, contains_call);
  }
  
  /* Fills ALWAYS_EXECUTED_IN information for basic blocks, i.e.
--- 3345,3440 ----
    edge e;
    class loop *inn_loop = loop;
  
!   for (class loop *inner = loop->inner; inner; inner = inner->next)
!     fill_always_executed_in_1 (inner, contains_call);
! 
!   auto_vec<basic_block, 64> worklist;
!   worklist.reserve_exact (loop->num_nodes);
!   worklist.quick_push (loop->header);
!   do
      {
!       edge_iterator ei;
!       bb = worklist.pop ();
  
!       if (!flow_bb_inside_loop_p (inn_loop, bb))
! 	{
! 	  /* When we are leaving a possibly infinite inner loop
! 	     we have to stop processing.  */
! 	  if (!finite_loop_p (inn_loop))
! 	    break;
! 	  /* If the loop was finite we can continue with processing
! 	     the loop we exited to.  */
! 	  inn_loop = bb->loop_father;
! 	}
  
!       if (dominated_by_p (CDI_DOMINATORS, loop->latch, bb))
! 	last = bb;
  
!       if (bitmap_bit_p (contains_call, bb->index))
! 	break;
  
!       /* If LOOP exits from this BB stop processing.  */
!       FOR_EACH_EDGE (e, ei, bb->succs)
! 	if (!flow_bb_inside_loop_p (loop, e->dest))
! 	  break;
!       if (e)
! 	break;
  
!       /* A loop might be infinite (TODO use simple loop analysis
! 	 to disprove this if possible).  */
!       if (bb->flags & BB_IRREDUCIBLE_LOOP)
! 	break;
  
!       if (bb->loop_father->header == bb)
! 	/* Record that we enter into a subloop since it might not
! 	   be finite.  */
! 	/* ???  Entering into a not always executed subloop makes
! 	   fill_always_executed_in quadratic in loop depth since
! 	   we walk those loops N times.  This is not a problem
! 	   in practice though, see PR102253 for a worst-case testcase.  */
! 	inn_loop = bb->loop_father;
  
!       /* Walk the body of LOOP sorted by dominance relation.  Additionally,
! 	 if a basic block S dominates the latch, then only blocks dominated
! 	 by S are after it.
! 	 This is get_loop_body_in_dom_order using a worklist algorithm and
! 	 stopping once we are no longer interested in visiting further
! 	 blocks.  */
!       unsigned old_len = worklist.length ();
!       unsigned postpone = 0;
!       for (basic_block son = first_dom_son (CDI_DOMINATORS, bb);
! 	   son;
! 	   son = next_dom_son (CDI_DOMINATORS, son))
! 	{
! 	  if (!flow_bb_inside_loop_p (loop, son))
! 	    continue;
! 	  if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
! 	    postpone = worklist.length ();
! 	  worklist.quick_push (son);
  	}
!       if (postpone)
! 	/* Postponing the block that dominates the latch means
! 	   processing it last and thus putting it earliest in the
! 	   worklist.  */
! 	std::swap (worklist[old_len], worklist[postpone]);
!     }
!   while (!worklist.is_empty ());
  
!   while (1)
!     {
!       if (last->loop_father == loop
! 	  || (ALWAYS_EXECUTED_IN (last)
! 	      && loop_outer (ALWAYS_EXECUTED_IN (last)) == loop))
  	{
  	  if (dump_enabled_p ())
  	    dump_printf (MSG_NOTE, "BB %d is always executed in loop %d\n",
  			 last->index, loop->num);
  	  SET_ALWAYS_EXECUTED_IN (last, loop);
  	}
+       if (last == loop->header)
+ 	break;
+       last = get_immediate_dominator (CDI_DOMINATORS, last);
      }
  }
  
  /* Fills ALWAYS_EXECUTED_IN information for basic blocks, i.e.
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-loop-ivopts.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-ivopts.cc
*** gcc-14.3.0/gcc/tree-ssa-loop-ivopts.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-ivopts.cc	Fri Jun 19 06:51:06 2026
*************** add_candidate_1 (struct ivopts_data *dat
*** 3273,3278 ****
--- 3273,3284 ----
  static bool
  allow_ip_end_pos_p (class loop *loop)
  {
+   /* Do not allow IP_END when creating the IV would need to split the
+      latch edge as that makes all IP_NORMAL invalid.  */
+   auto pos = gsi_last_bb (ip_end_pos (loop));
+   if (!gsi_end_p (pos) && stmt_ends_bb_p (*pos))
+     return false;
+ 
    if (!ip_normal_pos (loop))
      return true;
  
*************** create_new_iv (struct ivopts_data *data,
*** 7287,7298 ****
      case IP_END:
        incr_pos = gsi_last_bb (ip_end_pos (data->current_loop));
        after = true;
!       if (!gsi_end_p (incr_pos) && stmt_ends_bb_p (gsi_stmt (incr_pos)))
! 	{
! 	  edge e = find_edge (gsi_bb (incr_pos), data->current_loop->header);
! 	  incr_pos = gsi_after_labels (split_edge (e));
! 	  after = false;
! 	}
        break;
  
      case IP_AFTER_USE:
--- 7293,7299 ----
      case IP_END:
        incr_pos = gsi_last_bb (ip_end_pos (data->current_loop));
        after = true;
!       gcc_assert (gsi_end_p (incr_pos) || !stmt_ends_bb_p (*incr_pos));
        break;
  
      case IP_AFTER_USE:
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-loop-niter.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-niter.cc
*** gcc-14.3.0/gcc/tree-ssa-loop-niter.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-niter.cc	Fri Jun 19 06:51:06 2026
*************** number_of_iterations_ne (class loop *loo
*** 987,994 ****
       if BNDS->below in the result is nonnegative.  */
    if (tree_int_cst_sign_bit (iv->step))
      {
!       s = fold_convert (niter_type,
! 			fold_build1 (NEGATE_EXPR, type, iv->step));
        c = fold_build2 (MINUS_EXPR, niter_type,
  		       fold_convert (niter_type, iv->base),
  		       fold_convert (niter_type, final));
--- 987,994 ----
       if BNDS->below in the result is nonnegative.  */
    if (tree_int_cst_sign_bit (iv->step))
      {
!       s = fold_build1 (NEGATE_EXPR, niter_type,
! 		       fold_convert (niter_type, iv->step));
        c = fold_build2 (MINUS_EXPR, niter_type,
  		       fold_convert (niter_type, iv->base),
  		       fold_convert (niter_type, final));
*************** number_of_iterations_lt (class loop *loo
*** 1632,1639 ****
    if (integer_nonzerop (iv0->step))
      step = fold_convert (niter_type, iv0->step);
    else
!     step = fold_convert (niter_type,
! 			 fold_build1 (NEGATE_EXPR, type, iv1->step));
  
    /* If we can determine the final value of the control iv exactly, we can
       transform the condition to != comparison.  In particular, this will be
--- 1632,1639 ----
    if (integer_nonzerop (iv0->step))
      step = fold_convert (niter_type, iv0->step);
    else
!     step = fold_build1 (NEGATE_EXPR, niter_type,
! 			fold_convert (niter_type, iv1->step));
  
    /* If we can determine the final value of the control iv exactly, we can
       transform the condition to != comparison.  In particular, this will be
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-loop-split.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-split.cc
*** gcc-14.3.0/gcc/tree-ssa-loop-split.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-split.cc	Fri Jun 19 06:51:06 2026
*************** compute_new_first_bound (gimple_seq *stm
*** 458,478 ****
    tree end = force_gimple_operand (niter->bound, &stmts2,
  					true, NULL_TREE);
    gimple_seq_add_seq_without_update (stmts, stmts2);
!   if (POINTER_TYPE_P (TREE_TYPE (enddiff)))
!     {
!       tree tem = gimple_convert (stmts, sizetype, enddiff);
!       tem = gimple_build (stmts, NEGATE_EXPR, sizetype, tem);
!       enddiff = gimple_build (stmts, POINTER_PLUS_EXPR,
! 			      TREE_TYPE (enddiff),
! 			      end, tem);
!     }
    else
      enddiff = gimple_build (stmts, MINUS_EXPR, TREE_TYPE (enddiff),
  			    end, enddiff);
  
    /* Compute guard_init + (end-beg).  */
    tree newbound;
-   enddiff = gimple_convert (stmts, TREE_TYPE (guard_init), enddiff);
    if (POINTER_TYPE_P (TREE_TYPE (guard_init)))
      {
        enddiff = gimple_convert (stmts, sizetype, enddiff);
--- 458,472 ----
    tree end = force_gimple_operand (niter->bound, &stmts2,
  					true, NULL_TREE);
    gimple_seq_add_seq_without_update (stmts, stmts2);
!   if (POINTER_TYPE_P (TREE_TYPE (controlbase)))
!     enddiff = gimple_build (stmts, POINTER_DIFF_EXPR,
! 			    ssizetype, end, enddiff);
    else
      enddiff = gimple_build (stmts, MINUS_EXPR, TREE_TYPE (enddiff),
  			    end, enddiff);
  
    /* Compute guard_init + (end-beg).  */
    tree newbound;
    if (POINTER_TYPE_P (TREE_TYPE (guard_init)))
      {
        enddiff = gimple_convert (stmts, sizetype, enddiff);
*************** compute_new_first_bound (gimple_seq *stm
*** 481,488 ****
  			       guard_init, enddiff);
      }
    else
!     newbound = gimple_build (stmts, PLUS_EXPR, TREE_TYPE (guard_init),
! 			     guard_init, enddiff);
  
    /* Depending on the direction of the IVs the new bound for the first
       loop is the minimum or maximum of old bound and border.
--- 475,485 ----
  			       guard_init, enddiff);
      }
    else
!     {
!       enddiff = gimple_convert (stmts, TREE_TYPE (guard_init), enddiff);
!       newbound = gimple_build (stmts, PLUS_EXPR, TREE_TYPE (guard_init),
! 			       guard_init, enddiff);
!     }
  
    /* Depending on the direction of the IVs the new bound for the first
       loop is the minimum or maximum of old bound and border.
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-loop-unswitch.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-unswitch.cc
*** gcc-14.3.0/gcc/tree-ssa-loop-unswitch.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-loop-unswitch.cc	Fri Jun 19 06:51:06 2026
*************** hoist_guard (class loop *loop, edge guar
*** 1511,1517 ****
  
    if (skip_count > e->count ())
      {
!       fprintf (dump_file, "  Capping count; expect profile inconsistency\n");
        skip_count = e->count ();
      }
    if (dump_enabled_p ())
--- 1511,1518 ----
  
    if (skip_count > e->count ())
      {
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, "  Capping count; expect profile inconsistency\n");
        skip_count = e->count ();
      }
    if (dump_enabled_p ())
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-math-opts.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-math-opts.cc
*** gcc-14.3.0/gcc/tree-ssa-math-opts.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-math-opts.cc	Fri Jun 19 06:51:06 2026
*************** pass_cse_reciprocals::execute (function
*** 1052,1057 ****
--- 1052,1058 ----
  		    continue;
  
  		  gimple_replace_ssa_lhs (call, arg1);
+ 		  reset_flow_sensitive_info (arg1);
  		  if (gimple_call_internal_p (call) != (ifn != IFN_LAST))
  		    {
  		      auto_vec<tree, 4> args;
*************** convert_plusminus_to_widen (gimple_stmt_
*** 3037,3042 ****
--- 3038,3048 ----
    if (to_mode == from_mode)
      return false;
  
+   /* For fixed point types, the mode classes could be different
+      so reject that case. */
+   if (GET_MODE_CLASS (from_mode) != GET_MODE_CLASS (to_mode))
+     return false;
+ 
    from_unsigned1 = TYPE_UNSIGNED (type1);
    from_unsigned2 = TYPE_UNSIGNED (type2);
    optype = type1;
*************** maybe_optimize_guarding_check (vec<gimpl
*** 3867,3872 ****
--- 3873,3879 ----
    else
      gimple_cond_make_false (zero_cond);
    update_stmt (zero_cond);
+   reset_flow_sensitive_info_in_bb (bb);
    *cfg_changed = true;
  }
  
*************** match_uaddc_usubc (gimple_stmt_iterator
*** 4977,4983 ****
  			TYPE_MODE (type)) == CODE_FOR_nothing
        || (rhs[2]
  	  && optab_handler (code == PLUS_EXPR ? uaddc5_optab : usubc5_optab,
! 			    TYPE_MODE (type)) == CODE_FOR_nothing))
      return false;
    tree arg1, arg2, arg3 = NULL_TREE;
    gimple *re1 = NULL, *re2 = NULL;
--- 4984,4994 ----
  			TYPE_MODE (type)) == CODE_FOR_nothing
        || (rhs[2]
  	  && optab_handler (code == PLUS_EXPR ? uaddc5_optab : usubc5_optab,
! 			    TYPE_MODE (type)) == CODE_FOR_nothing)
!       || !types_compatible_p (type,
! 			      TREE_TYPE (TREE_TYPE (gimple_call_lhs (ovf1))))
!       || !types_compatible_p (type,
! 			      TREE_TYPE (TREE_TYPE (gimple_call_lhs (ovf2)))))
      return false;
    tree arg1, arg2, arg3 = NULL_TREE;
    gimple *re1 = NULL, *re2 = NULL;
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-phiopt.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-phiopt.cc
*** gcc-14.3.0/gcc/tree-ssa-phiopt.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-phiopt.cc	Fri Jun 19 06:51:06 2026
*************** spaceship_replacement (basic_block cond_
*** 2824,2833 ****
  	    {
  	      if (has_cast_debug_uses)
  		{
! 		  tree temp3 = make_node (DEBUG_EXPR_DECL);
! 		  DECL_ARTIFICIAL (temp3) = 1;
! 		  TREE_TYPE (temp3) = TREE_TYPE (orig_use_lhs);
! 		  SET_DECL_MODE (temp3, TYPE_MODE (type));
  		  t = fold_convert (TREE_TYPE (temp3), temp2);
  		  g = gimple_build_debug_bind (temp3, t, phi);
  		  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
--- 2824,2831 ----
  	    {
  	      if (has_cast_debug_uses)
  		{
! 		  tree temp3
! 		    = build_debug_expr_decl (TREE_TYPE (orig_use_lhs));
  		  t = fold_convert (TREE_TYPE (temp3), temp2);
  		  g = gimple_build_debug_bind (temp3, t, phi);
  		  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
*************** cond_removal_in_builtin_zero_pattern (ba
*** 3048,3063 ****
        || arg != gimple_cond_lhs (cond))
      return false;
  
!   /* Canonicalize.  */
!   if ((e2->flags & EDGE_TRUE_VALUE
!        && gimple_cond_code (cond) == NE_EXPR)
!       || (e1->flags & EDGE_TRUE_VALUE
! 	  && gimple_cond_code (cond) == EQ_EXPR))
      {
        std::swap (arg0, arg1);
-       std::swap (e1, e2);
      }
  
    /* Check PHI arguments.  */
    if (lhs != arg0
        || TREE_CODE (arg1) != INTEGER_CST)
--- 3046,3081 ----
        || arg != gimple_cond_lhs (cond))
      return false;
  
!   edge true_edge, false_edge;
!   /* We need to know which is the true edge and which is the false
!      edge so that we know when to invert the condition below.  */
!   extract_true_false_edges_from_block (cond_bb, &true_edge, &false_edge);
! 
!   /* Forward the edges over the middle basic block.  */
!   if (true_edge->dest == middle_bb)
!     true_edge = EDGE_SUCC (true_edge->dest, 0);
!   if (false_edge->dest == middle_bb)
!     false_edge = EDGE_SUCC (false_edge->dest, 0);
! 
!   /* Canonicalize the args with respect to the edges,
!      arg0 is from the true edge and arg1 is from the
!      false edge.
!      That is `cond ? arg0 : arg1`.*/
!   if (true_edge == e1)
!     gcc_assert (false_edge == e2);
!   else
      {
+       gcc_assert (false_edge == e1);
+       gcc_assert (true_edge == e2);
        std::swap (arg0, arg1);
      }
  
+   /* Canonicalize the args such that we get:
+      `arg != 0 ? arg0 : arg1`. So swap arg0/arg1
+      around if cond was an equals.  */
+   if (gimple_cond_code (cond) == EQ_EXPR)
+     std::swap (arg0, arg1);
+ 
    /* Check PHI arguments.  */
    if (lhs != arg0
        || TREE_CODE (arg1) != INTEGER_CST)
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-pre.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-pre.cc
*** gcc-14.3.0/gcc/tree-ssa-pre.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-pre.cc	Fri Jun 19 06:51:06 2026
*************** find_or_generate_expression (basic_block
*** 2795,2801 ****
    if (leader)
      {
        if (leader->kind == NAME)
! 	return PRE_EXPR_NAME (leader);
        else if (leader->kind == CONSTANT)
  	return PRE_EXPR_CONSTANT (leader);
  
--- 2795,2806 ----
    if (leader)
      {
        if (leader->kind == NAME)
! 	{
! 	  tree name = PRE_EXPR_NAME (leader);
! 	  if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
! 	    return NULL_TREE;
! 	  return name;
! 	}
        else if (leader->kind == CONSTANT)
  	return PRE_EXPR_CONSTANT (leader);
  
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-propagate.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-propagate.cc
*** gcc-14.3.0/gcc/tree-ssa-propagate.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-propagate.cc	Fri Jun 19 06:51:06 2026
*************** substitute_and_fold_engine::substitute_a
*** 1011,1016 ****
--- 1011,1018 ----
    while (!walker.stmts_to_fixup.is_empty ())
      {
        gimple *stmt = walker.stmts_to_fixup.pop ();
+       if (!gimple_bb (stmt))
+ 	continue;
        if (dump_file && dump_flags & TDF_DETAILS)
  	{
  	  fprintf (dump_file, "Fixing up noreturn call ");
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-reassoc.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-reassoc.cc
*** gcc-14.3.0/gcc/tree-ssa-reassoc.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-reassoc.cc	Fri Jun 19 06:51:06 2026
*************** build_and_add_sum (tree type, tree op1,
*** 1568,1574 ****
    if ((!op1def || gimple_nop_p (op1def))
        && (!op2def || gimple_nop_p (op2def)))
      {
!       gsi = gsi_after_labels (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
        if (!gsi_end_p (gsi)
  	  && is_gimple_call (gsi_stmt (gsi))
  	  && (gimple_call_flags (gsi_stmt (gsi)) & ECF_RETURNS_TWICE))
--- 1568,1575 ----
    if ((!op1def || gimple_nop_p (op1def))
        && (!op2def || gimple_nop_p (op2def)))
      {
!       gsi = gsi_start_nondebug_after_labels_bb
! 		(single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
        if (!gsi_end_p (gsi)
  	  && is_gimple_call (gsi_stmt (gsi))
  	  && (gimple_call_flags (gsi_stmt (gsi)) & ECF_RETURNS_TWICE))
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-sccvn.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-sccvn.cc
*** gcc-14.3.0/gcc/tree-ssa-sccvn.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-sccvn.cc	Fri Jun 19 06:51:06 2026
*************** fully_constant_vn_reference_p (vn_refere
*** 1592,1597 ****
--- 1592,1599 ----
  	      ++i;
  	      break;
  	    }
+ 	  if (operands[i].reverse)
+ 	    return NULL_TREE;
  	  if (known_eq (operands[i].off, -1))
  	    return NULL_TREE;
  	  off += operands[i].off;
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 2807,2813 ****
           we find a VN result with exactly the same value as the
  	 possible clobber.  In this case we can ignore the clobber
  	 and return the found value.  */
!       if (is_gimple_reg_type (TREE_TYPE (lhs))
  	  && types_compatible_p (TREE_TYPE (lhs), vr->type)
  	  && (ref->ref || data->orig_ref.ref)
  	  && !data->mask
--- 2809,2816 ----
           we find a VN result with exactly the same value as the
  	 possible clobber.  In this case we can ignore the clobber
  	 and return the found value.  */
!       if (!gimple_has_volatile_ops (def_stmt)
! 	  && is_gimple_reg_type (TREE_TYPE (lhs))
  	  && types_compatible_p (TREE_TYPE (lhs), vr->type)
  	  && (ref->ref || data->orig_ref.ref)
  	  && !data->mask
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3091,3097 ****
    else if (is_gimple_reg_type (vr->type)
  	   && gimple_assign_single_p (def_stmt)
  	   && gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR
! 	   && CONSTRUCTOR_NELTS (gimple_assign_rhs1 (def_stmt)) == 0)
      {
        tree base2;
        poly_int64 offset2, size2, maxsize2;
--- 3094,3101 ----
    else if (is_gimple_reg_type (vr->type)
  	   && gimple_assign_single_p (def_stmt)
  	   && gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR
! 	   && CONSTRUCTOR_NELTS (gimple_assign_rhs1 (def_stmt)) == 0
! 	   && !TREE_THIS_VOLATILE (gimple_assign_lhs (def_stmt)))
      {
        tree base2;
        poly_int64 offset2, size2, maxsize2;
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3147,3152 ****
--- 3151,3157 ----
  	   && !reverse_storage_order_for_component_p (vr->operands)
  	   && !contains_storage_order_barrier_p (vr->operands)
  	   && gimple_assign_single_p (def_stmt)
+ 	   && !TREE_THIS_VOLATILE (gimple_assign_lhs (def_stmt))
  	   && CHAR_BIT == 8
  	   && BITS_PER_UNIT == 8
  	   && BYTES_BIG_ENDIAN == WORDS_BIG_ENDIAN
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3305,3310 ****
--- 3310,3316 ----
  	   && !reverse_storage_order_for_component_p (vr->operands)
  	   && !contains_storage_order_barrier_p (vr->operands)
  	   && gimple_assign_single_p (def_stmt)
+ 	   && !TREE_THIS_VOLATILE (gimple_assign_lhs (def_stmt))
  	   && TREE_CODE (gimple_assign_rhs1 (def_stmt)) == SSA_NAME)
      {
        tree lhs = gimple_assign_lhs (def_stmt);
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3516,3521 ****
--- 3522,3528 ----
       the copy kills ref.  */
    else if (data->vn_walk_kind == VN_WALKREWRITE
  	   && gimple_assign_single_p (def_stmt)
+ 	   && !gimple_has_volatile_ops (def_stmt)
  	   && (DECL_P (gimple_assign_rhs1 (def_stmt))
  	       || TREE_CODE (gimple_assign_rhs1 (def_stmt)) == MEM_REF
  	       || handled_component_p (gimple_assign_rhs1 (def_stmt))))
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-strlen.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-strlen.cc
*** gcc-14.3.0/gcc/tree-ssa-strlen.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-strlen.cc	Fri Jun 19 06:51:06 2026
*************** get_string_length (strinfo *si)
*** 850,856 ****
       attempt to compute the length from the call statement.  */
    if (si->stmt)
      {
!       gimple *stmt = si->stmt, *lenstmt;
        tree callee, lhs, fn, tem;
        location_t loc;
        gimple_stmt_iterator gsi;
--- 850,856 ----
       attempt to compute the length from the call statement.  */
    if (si->stmt)
      {
!       gimple *stmt = si->stmt, *lenstmt = NULL, *g;
        tree callee, lhs, fn, tem;
        location_t loc;
        gimple_stmt_iterator gsi;
*************** get_string_length (strinfo *si)
*** 885,895 ****
                lhs = force_gimple_operand_gsi (&gsi, lhs, true, NULL_TREE,
                                                true, GSI_SAME_STMT);
              }
! 	  lenstmt = gimple_build_assign
  			(make_ssa_name (TREE_TYPE (gimple_call_arg (stmt, 0))),
  			 POINTER_PLUS_EXPR,tem, lhs);
! 	  gsi_insert_before (&gsi, lenstmt, GSI_SAME_STMT);
! 	  gimple_call_set_arg (stmt, 0, gimple_assign_lhs (lenstmt));
  	  lhs = NULL_TREE;
  	  /* FALLTHRU */
  	case BUILT_IN_STRCPY:
--- 885,895 ----
                lhs = force_gimple_operand_gsi (&gsi, lhs, true, NULL_TREE,
                                                true, GSI_SAME_STMT);
              }
! 	  g = gimple_build_assign
  			(make_ssa_name (TREE_TYPE (gimple_call_arg (stmt, 0))),
  			 POINTER_PLUS_EXPR,tem, lhs);
! 	  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
! 	  gimple_call_set_arg (stmt, 0, gimple_assign_lhs (g));
  	  lhs = NULL_TREE;
  	  /* FALLTHRU */
  	case BUILT_IN_STRCPY:
*************** get_string_length (strinfo *si)
*** 908,913 ****
--- 908,924 ----
  	  gimple_call_set_fndecl (stmt, fn);
  	  lhs = make_ssa_name (TREE_TYPE (TREE_TYPE (fn)), stmt);
  	  gimple_call_set_lhs (stmt, lhs);
+ 	  if (DECL_FUNCTION_CODE (callee) == BUILT_IN_STRCAT_CHK)
+ 	    {
+ 	      tree objsz = gimple_call_lhs (lenstmt);
+ 	      gimple *g
+ 		= gimple_build_assign (make_ssa_name (TREE_TYPE (objsz)),
+ 				       MINUS_EXPR, gimple_call_arg (stmt, 2),
+ 				       objsz);
+ 	      gimple_set_location (g, gimple_location (stmt));
+ 	      gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+ 	      gimple_call_set_arg (stmt, 2, gimple_assign_lhs (g));
+ 	    }
  	  update_stmt (stmt);
  	  if (dump_file && (dump_flags & TDF_DETAILS) != 0)
  	    {
*************** strlen_pass::handle_builtin_memcmp ()
*** 4011,4018 ****
  	  tree ptrtype = build_pointer_type_for_mode (char_type_node,
  						      ptr_mode, true);
  	  off = build_int_cst (ptrtype, 0);
! 	  arg1 = build2_loc (loc, MEM_REF, type, arg1, off);
! 	  arg2 = build2_loc (loc, MEM_REF, type, arg2, off);
  	  tree tem1 = fold_const_aggregate_ref (arg1);
  	  if (tem1)
  	    arg1 = tem1;
--- 4022,4037 ----
  	  tree ptrtype = build_pointer_type_for_mode (char_type_node,
  						      ptr_mode, true);
  	  off = build_int_cst (ptrtype, 0);
! 
! 	  /* Create unaligned types if needed. */
! 	  tree type1 = type, type2 = type;
! 	  if (TYPE_ALIGN (type1) > align1)
! 	    type1 = build_aligned_type (type1, align1);
! 	  if (TYPE_ALIGN (type2) > align2)
! 	    type2 = build_aligned_type (type2, align2);
! 
! 	  arg1 = build2_loc (loc, MEM_REF, type1, arg1, off);
! 	  arg2 = build2_loc (loc, MEM_REF, type2, arg2, off);
  	  tree tem1 = fold_const_aggregate_ref (arg1);
  	  if (tem1)
  	    arg1 = tem1;
diff -Nrcpad gcc-14.3.0/gcc/tree-ssa-structalias.cc gcc-14.3.0-RC-20260619/gcc/tree-ssa-structalias.cc
*** gcc-14.3.0/gcc/tree-ssa-structalias.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-ssa-structalias.cc	Fri Jun 19 06:51:06 2026
*************** get_constraint_for_1 (tree t, vec<ce_s>
*** 3615,3621 ****
  		    size = -1;
  		  for (; curr; curr = vi_next (curr))
  		    {
! 		      if (curr->offset - vi->offset < size)
  			{
  			  cs.var = curr->id;
  			  results->safe_push (cs);
--- 3615,3624 ----
  		    size = -1;
  		  for (; curr; curr = vi_next (curr))
  		    {
! 		      /* The start of the access might happen anywhere
! 			 within vi, so conservatively assume it was
! 			 at its end.  */
! 		      if (curr->offset - (vi->offset + vi->size - 1) < size)
  			{
  			  cs.var = curr->id;
  			  results->safe_push (cs);
diff -Nrcpad gcc-14.3.0/gcc/tree-switch-conversion.cc gcc-14.3.0-RC-20260619/gcc/tree-switch-conversion.cc
*** gcc-14.3.0/gcc/tree-switch-conversion.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-switch-conversion.cc	Fri Jun 19 06:51:06 2026
*************** void
*** 716,722 ****
  switch_conversion::build_arrays ()
  {
    tree arr_index_type;
!   tree tidx, sub, utype, tidxtype;
    gimple *stmt;
    gimple_stmt_iterator gsi;
    gphi_iterator gpi;
--- 716,722 ----
  switch_conversion::build_arrays ()
  {
    tree arr_index_type;
!   tree tidx, uidx, sub, utype, tidxtype;
    gimple *stmt;
    gimple_stmt_iterator gsi;
    gphi_iterator gpi;
*************** switch_conversion::build_arrays ()
*** 741,759 ****
      tidxtype = utype;
  
    arr_index_type = build_index_type (m_range_size);
!   tidx = make_ssa_name (tidxtype);
    sub = fold_build2_loc (loc, MINUS_EXPR, utype,
  			 fold_convert_loc (loc, utype, m_index_expr),
  			 fold_convert_loc (loc, utype, m_range_min));
-   sub = fold_convert (tidxtype, sub);
    sub = force_gimple_operand_gsi (&gsi, sub,
  				  false, NULL, true, GSI_SAME_STMT);
!   stmt = gimple_build_assign (tidx, sub);
  
    gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
-   update_stmt (stmt);
    m_arr_ref_first = stmt;
  
    for (gpi = gsi_start_phis (m_final_bb), i = 0;
         !gsi_end_p (gpi); gsi_next (&gpi))
      {
--- 741,765 ----
      tidxtype = utype;
  
    arr_index_type = build_index_type (m_range_size);
!   uidx = make_ssa_name (utype);
    sub = fold_build2_loc (loc, MINUS_EXPR, utype,
  			 fold_convert_loc (loc, utype, m_index_expr),
  			 fold_convert_loc (loc, utype, m_range_min));
    sub = force_gimple_operand_gsi (&gsi, sub,
  				  false, NULL, true, GSI_SAME_STMT);
!   stmt = gimple_build_assign (uidx, sub);
  
    gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
    m_arr_ref_first = stmt;
  
+   tidx = uidx;
+   if (tidxtype != utype)
+     {
+       tidx = make_ssa_name (tidxtype);
+       stmt = gimple_build_assign (tidx, NOP_EXPR, uidx);
+       gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
+     }
+ 
    for (gpi = gsi_start_phis (m_final_bb), i = 0;
         !gsi_end_p (gpi); gsi_next (&gpi))
      {
diff -Nrcpad gcc-14.3.0/gcc/tree-tailcall.cc gcc-14.3.0-RC-20260619/gcc/tree-tailcall.cc
*** gcc-14.3.0/gcc/tree-tailcall.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-tailcall.cc	Fri Jun 19 06:51:06 2026
*************** process_assignment (gassign *stmt,
*** 329,334 ****
--- 329,338 ----
      if (FLOAT_TYPE_P (TREE_TYPE (DECL_RESULT (current_function_decl))))
        return FAIL;
  
+   /* We at least cannot build -1 for all fixed point types.  */
+   if (FIXED_POINT_TYPE_P (TREE_TYPE (DECL_RESULT (current_function_decl))))
+     return FAIL;
+ 
    if (rhs_class == GIMPLE_UNARY_RHS
        && op0 == *ass_var)
      ;
diff -Nrcpad gcc-14.3.0/gcc/tree-vect-data-refs.cc gcc-14.3.0-RC-20260619/gcc/tree-vect-data-refs.cc
*** gcc-14.3.0/gcc/tree-vect-data-refs.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vect-data-refs.cc	Fri Jun 19 06:51:06 2026
*************** vect_can_force_dr_alignment_p (const_tre
*** 7058,7064 ****
      return false;
  
    if (decl_in_symtab_p (decl)
!       && !symtab_node::get (decl)->can_increase_alignment_p ())
      return false;
  
    if (TREE_STATIC (decl))
--- 7058,7065 ----
      return false;
  
    if (decl_in_symtab_p (decl)
!       && (!symtab_node::get (decl)
! 	  || !symtab_node::get (decl)->can_increase_alignment_p ()))
      return false;
  
    if (TREE_STATIC (decl))
diff -Nrcpad gcc-14.3.0/gcc/tree-vect-generic.cc gcc-14.3.0-RC-20260619/gcc/tree-vect-generic.cc
*** gcc-14.3.0/gcc/tree-vect-generic.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vect-generic.cc	Fri Jun 19 06:51:06 2026
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1506,1516 ****
    tree mask = gimple_assign_rhs3 (stmt);
    tree vec0 = gimple_assign_rhs1 (stmt);
    tree vec1 = gimple_assign_rhs2 (stmt);
    tree vect_type = TREE_TYPE (vec0);
    tree mask_type = TREE_TYPE (mask);
    tree vect_elt_type = TREE_TYPE (vect_type);
    tree mask_elt_type = TREE_TYPE (mask_type);
!   unsigned HOST_WIDE_INT elements;
    vec<constructor_elt, va_gc> *v;
    tree constr, t, si, i_val;
    tree vec0tmp = NULL_TREE, vec1tmp = NULL_TREE, masktmp = NULL_TREE;
--- 1506,1517 ----
    tree mask = gimple_assign_rhs3 (stmt);
    tree vec0 = gimple_assign_rhs1 (stmt);
    tree vec1 = gimple_assign_rhs2 (stmt);
+   tree res_vect_type = TREE_TYPE (gimple_assign_lhs (stmt));
    tree vect_type = TREE_TYPE (vec0);
    tree mask_type = TREE_TYPE (mask);
    tree vect_elt_type = TREE_TYPE (vect_type);
    tree mask_elt_type = TREE_TYPE (mask_type);
!   unsigned HOST_WIDE_INT elements, in_elements;
    vec<constructor_elt, va_gc> *v;
    tree constr, t, si, i_val;
    tree vec0tmp = NULL_TREE, vec1tmp = NULL_TREE, masktmp = NULL_TREE;
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1518,1524 ****
    location_t loc = gimple_location (gsi_stmt (*gsi));
    unsigned i;
  
!   if (!TYPE_VECTOR_SUBPARTS (vect_type).is_constant (&elements))
      return;
  
    if (TREE_CODE (mask) == SSA_NAME)
--- 1519,1526 ----
    location_t loc = gimple_location (gsi_stmt (*gsi));
    unsigned i;
  
!   if (!TYPE_VECTOR_SUBPARTS (res_vect_type).is_constant (&elements)
!       || !TYPE_VECTOR_SUBPARTS (vect_type).is_constant (&in_elements))
      return;
  
    if (TREE_CODE (mask) == SSA_NAME)
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1534,1540 ****
    if (TREE_CODE (mask) == VECTOR_CST
        && tree_to_vec_perm_builder (&sel_int, mask))
      {
!       vec_perm_indices indices (sel_int, 2, elements);
        machine_mode vmode = TYPE_MODE (vect_type);
        tree lhs_type = TREE_TYPE (gimple_assign_lhs (stmt));
        machine_mode lhs_mode = TYPE_MODE (lhs_type);
--- 1536,1542 ----
    if (TREE_CODE (mask) == VECTOR_CST
        && tree_to_vec_perm_builder (&sel_int, mask))
      {
!       vec_perm_indices indices (sel_int, 2, in_elements);
        machine_mode vmode = TYPE_MODE (vect_type);
        tree lhs_type = TREE_TYPE (gimple_assign_lhs (stmt));
        machine_mode lhs_mode = TYPE_MODE (lhs_type);
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1621,1630 ****
  	  unsigned HOST_WIDE_INT index;
  
  	  index = TREE_INT_CST_LOW (i_val);
! 	  if (!tree_fits_uhwi_p (i_val) || index >= elements)
! 	    i_val = build_int_cst (mask_elt_type, index & (elements - 1));
  
!           if (two_operand_p && (index & elements) != 0)
  	    t = vector_element (gsi, vec1, i_val, &vec1tmp);
  	  else
  	    t = vector_element (gsi, vec0, i_val, &vec0tmp);
--- 1623,1632 ----
  	  unsigned HOST_WIDE_INT index;
  
  	  index = TREE_INT_CST_LOW (i_val);
! 	  if (!tree_fits_uhwi_p (i_val) || index >= in_elements)
! 	    i_val = build_int_cst (mask_elt_type, index & (in_elements - 1));
  
! 	  if (two_operand_p && (index & in_elements) != 0)
  	    t = vector_element (gsi, vec1, i_val, &vec1tmp);
  	  else
  	    t = vector_element (gsi, vec0, i_val, &vec0tmp);
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1678,1686 ****
      }
  
    if (constant_p)
!     constr = build_vector_from_ctor (vect_type, v);
    else
!     constr = build_constructor (vect_type, v);
    gimple_assign_set_rhs_from_tree (gsi, constr);
    update_stmt (gsi_stmt (*gsi));
  }
--- 1680,1688 ----
      }
  
    if (constant_p)
!     constr = build_vector_from_ctor (res_vect_type, v);
    else
!     constr = build_constructor (res_vect_type, v);
    gimple_assign_set_rhs_from_tree (gsi, constr);
    update_stmt (gsi_stmt (*gsi));
  }
diff -Nrcpad gcc-14.3.0/gcc/tree-vect-loop.cc gcc-14.3.0-RC-20260619/gcc/tree-vect-loop.cc
*** gcc-14.3.0/gcc/tree-vect-loop.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vect-loop.cc	Fri Jun 19 06:51:06 2026
*************** vect_create_epilog_for_reduction (loop_v
*** 6134,6140 ****
        /* Create an induction variable.  */
        gimple_stmt_iterator incr_gsi;
        bool insert_after;
!       vect_iv_increment_position (loop_exit, &incr_gsi, &insert_after);
        create_iv (series_vect, PLUS_EXPR, vec_step, NULL_TREE, loop, &incr_gsi,
  		 insert_after, &indx_before_incr, &indx_after_incr);
  
--- 6134,6141 ----
        /* Create an induction variable.  */
        gimple_stmt_iterator incr_gsi;
        bool insert_after;
!       vect_iv_increment_position (LOOP_VINFO_IV_EXIT (loop_vinfo),
! 				  &incr_gsi, &insert_after);
        create_iv (series_vect, PLUS_EXPR, vec_step, NULL_TREE, loop, &incr_gsi,
  		 insert_after, &indx_before_incr, &indx_after_incr);
  
*************** vect_create_epilog_for_reduction (loop_v
*** 6973,6980 ****
            scalar_result = scalar_results[k];
            FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, orig_name)
  	    {
  	      FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
! 		SET_USE (use_p, scalar_result);
  	      update_stmt (use_stmt);
  	    }
          }
--- 6974,6990 ----
            scalar_result = scalar_results[k];
            FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, orig_name)
  	    {
+ 	      gphi *use_phi = dyn_cast <gphi *> (use_stmt);
  	      FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
! 		{
! 		  if (use_phi
! 		      && (phi_arg_edge_from_use (use_p)->flags & EDGE_ABNORMAL))
! 		    {
! 		      gcc_assert (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig_name));
! 		      SSA_NAME_OCCURS_IN_ABNORMAL_PHI (scalar_result) = 1;
! 		    }
! 		  SET_USE (use_p, scalar_result);
! 		}
  	      update_stmt (use_stmt);
  	    }
          }
*************** vectorizable_recurr (loop_vec_info loop_
*** 9205,9210 ****
--- 9215,9250 ----
        return false;
      }
  
+   /* We need to be able to build a { ..., a, b } init vector with
+      dist number of distinct trailing values.  Always possible
+      when dist == 1 or when nunits is constant or when the initializations
+      are uniform.  */
+   tree uniform_initval = NULL_TREE;
+   edge pe = loop_preheader_edge (LOOP_VINFO_LOOP (loop_vinfo));
+   if (slp_node)
+     for (stmt_vec_info s : SLP_TREE_SCALAR_STMTS (slp_node))
+       {
+ 	gphi *phi = as_a <gphi *> (s->stmt);
+ 	if (! uniform_initval)
+ 	  uniform_initval = PHI_ARG_DEF_FROM_EDGE (phi, pe);
+ 	else if (! operand_equal_p (uniform_initval,
+ 				    PHI_ARG_DEF_FROM_EDGE (phi, pe)))
+ 	  {
+ 	    uniform_initval = NULL_TREE;
+ 	    break;
+ 	  }
+       }
+   else
+     uniform_initval = PHI_ARG_DEF_FROM_EDGE (phi, pe);
+   if (!uniform_initval && !nunits.is_constant ())
+     {
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			 "cannot build initialization vector for "
+ 			 "first order recurrence\n");
+       return false;
+     }
+ 
    /* First-order recurrence autovectorization needs to handle permutation
       with indices = [nunits-1, nunits, nunits+1, ...].  */
    vec_perm_builder sel (nunits, 1, 3);
*************** vectorizable_recurr (loop_vec_info loop_
*** 9273,9293 ****
        return true;
      }
  
!   edge pe = loop_preheader_edge (LOOP_VINFO_LOOP (loop_vinfo));
!   basic_block bb = gimple_bb (phi);
!   tree preheader = PHI_ARG_DEF_FROM_EDGE (phi, pe);
!   if (!useless_type_conversion_p (TREE_TYPE (vectype), TREE_TYPE (preheader)))
      {
!       gimple_seq stmts = NULL;
!       preheader = gimple_convert (&stmts, TREE_TYPE (vectype), preheader);
!       gsi_insert_seq_on_edge_immediate (pe, stmts);
      }
!   tree vec_init = build_vector_from_val (vectype, preheader);
    vec_init = vect_init_vector (loop_vinfo, stmt_info, vec_init, vectype, NULL);
  
    /* Create the vectorized first-order PHI node.  */
    tree vec_dest = vect_get_new_vect_var (vectype,
  					 vect_simple_var, "vec_recur_");
    gphi *new_phi = create_phi_node (vec_dest, bb);
    add_phi_arg (new_phi, vec_init, pe, UNKNOWN_LOCATION);
  
--- 9313,9350 ----
        return true;
      }
  
!   tree vec_init;
!   if (! uniform_initval)
      {
!       vec<constructor_elt, va_gc> *v = NULL;
!       vec_alloc (v, nunits.to_constant ());
!       for (unsigned i = 0; i < nunits.to_constant () - dist; ++i)
! 	CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
! 				build_zero_cst (TREE_TYPE (vectype)));
!       for (stmt_vec_info s : SLP_TREE_SCALAR_STMTS (slp_node))
! 	{
! 	  gphi *phi = as_a <gphi *> (s->stmt);
! 	  tree preheader = PHI_ARG_DEF_FROM_EDGE (phi, pe);
! 	  if (!useless_type_conversion_p (TREE_TYPE (vectype),
! 					  TREE_TYPE (preheader)))
! 	    {
! 	      gimple_seq stmts = NULL;
! 	      preheader = gimple_convert (&stmts,
! 					  TREE_TYPE (vectype), preheader);
! 	      gsi_insert_seq_on_edge_immediate (pe, stmts);
! 	    }
! 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, preheader);
! 	}
!       vec_init = build_constructor (vectype, v);
      }
!   else
!     vec_init = uniform_initval;
    vec_init = vect_init_vector (loop_vinfo, stmt_info, vec_init, vectype, NULL);
  
    /* Create the vectorized first-order PHI node.  */
    tree vec_dest = vect_get_new_vect_var (vectype,
  					 vect_simple_var, "vec_recur_");
+   basic_block bb = gimple_bb (phi);
    gphi *new_phi = create_phi_node (vec_dest, bb);
    add_phi_arg (new_phi, vec_init, pe, UNKNOWN_LOCATION);
  
*************** vectorizable_recurr (loop_vec_info loop_
*** 9301,9307 ****
    edge le = loop_latch_edge (LOOP_VINFO_LOOP (loop_vinfo));
    gimple *latch_def = SSA_NAME_DEF_STMT (PHI_ARG_DEF_FROM_EDGE (phi, le));
    gimple_stmt_iterator gsi2 = gsi_for_stmt (latch_def);
!   gsi_next (&gsi2);
  
    for (unsigned i = 0; i < ncopies; ++i)
      {
--- 9358,9370 ----
    edge le = loop_latch_edge (LOOP_VINFO_LOOP (loop_vinfo));
    gimple *latch_def = SSA_NAME_DEF_STMT (PHI_ARG_DEF_FROM_EDGE (phi, le));
    gimple_stmt_iterator gsi2 = gsi_for_stmt (latch_def);
!   do
!     {
!       gsi_next (&gsi2);
!     }
!   /* Skip inserted vectorized stmts for the latch definition.  We have to
!      insert after those.  */
!   while (gsi_stmt (gsi2) && gimple_uid (gsi_stmt (gsi2)) == 0);
  
    for (unsigned i = 0; i < ncopies; ++i)
      {
diff -Nrcpad gcc-14.3.0/gcc/tree-vect-slp-patterns.cc gcc-14.3.0-RC-20260619/gcc/tree-vect-slp-patterns.cc
*** gcc-14.3.0/gcc/tree-vect-slp-patterns.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vect-slp-patterns.cc	Fri Jun 19 06:51:06 2026
*************** compatible_complex_nodes_p (slp_compat_n
*** 841,855 ****
    return true;
  }
  
  static inline bool
  vect_validate_multiplication (slp_tree_to_load_perm_map_t *perm_cache,
  			      slp_compat_nodes_map_t *compat_cache,
! 			      vec<slp_tree> &left_op,
! 			      vec<slp_tree> &right_op,
! 			      bool subtract,
  			      enum _conj_status *_status)
  {
-   auto_vec<slp_tree> ops;
    enum _conj_status stats = CONJ_NONE;
  
    /* The complex operations can occur in two layouts and two permute sequences
--- 841,863 ----
    return true;
  }
  
+ 
+ /* Check to see if the oprands to two multiplies, 2 each in LEFT_OP and
+    RIGHT_OP match a complex multiplication  or complex multiply-and-accumulate
+    or complex multiply-and-subtract pattern.  Do this using the permute cache
+    PERM_CACHE and the combination compatibility list COMPAT_CACHE.  If
+    the operation is successful the macthing operands are returned in OPS and
+    _STATUS indicates if the operation matched includes a conjugate of one of the
+    operands.  If the operation succeeds True is returned, otherwise False and
+    the values in ops are meaningless.  */
  static inline bool
  vect_validate_multiplication (slp_tree_to_load_perm_map_t *perm_cache,
  			      slp_compat_nodes_map_t *compat_cache,
! 			      const vec<slp_tree> &left_op,
! 			      const vec<slp_tree> &right_op,
! 			      bool subtract, vec<slp_tree> &ops,
  			      enum _conj_status *_status)
  {
    enum _conj_status stats = CONJ_NONE;
  
    /* The complex operations can occur in two layouts and two permute sequences
*************** vect_validate_multiplication (slp_tree_t
*** 880,910 ****
    bool neg0 = vect_match_expression_p (right_op[0], NEGATE_EXPR);
    bool neg1 = vect_match_expression_p (right_op[1], NEGATE_EXPR);
  
    /* Determine which style we're looking at.  We only have different ones
       whenever a conjugate is involved.  */
    if (neg0 && neg1)
      ;
    else if (neg0)
      {
!       right_op[0] = SLP_TREE_CHILDREN (right_op[0])[0];
        stats = CONJ_FST;
        if (subtract)
  	perm = 0;
      }
    else if (neg1)
      {
!       right_op[1] = SLP_TREE_CHILDREN (right_op[1])[0];
        stats = CONJ_SND;
        perm = 1;
      }
  
    *_status = stats;
  
-   /* Flatten the inputs after we've remapped them.  */
-   ops.create (4);
-   ops.safe_splice (left_op);
-   ops.safe_splice (right_op);
- 
    /* Extract out the elements to check.  */
    slp_tree op0 = ops[styles[style][0]];
    slp_tree op1 = ops[styles[style][1]];
--- 888,918 ----
    bool neg0 = vect_match_expression_p (right_op[0], NEGATE_EXPR);
    bool neg1 = vect_match_expression_p (right_op[1], NEGATE_EXPR);
  
+   /* Create the combined inputs after remapping and flattening.  */
+   ops.create (4);
+   ops.safe_splice (left_op);
+   ops.safe_splice (right_op);
+ 
    /* Determine which style we're looking at.  We only have different ones
       whenever a conjugate is involved.  */
    if (neg0 && neg1)
      ;
    else if (neg0)
      {
!       ops[2] = SLP_TREE_CHILDREN (right_op[0])[0];
        stats = CONJ_FST;
        if (subtract)
  	perm = 0;
      }
    else if (neg1)
      {
!       ops[3] = SLP_TREE_CHILDREN (right_op[1])[0];
        stats = CONJ_SND;
        perm = 1;
      }
  
    *_status = stats;
  
    /* Extract out the elements to check.  */
    slp_tree op0 = ops[styles[style][0]];
    slp_tree op1 = ops[styles[style][1]];
*************** complex_mul_pattern::matches (complex_op
*** 1023,1028 ****
--- 1031,1041 ----
    if (op != MINUS_PLUS)
      return IFN_LAST;
  
+   /* It's only valid to form FMAs and MUL with -ffp-contract=fast.  */
+   if (flag_fp_contract_mode != FP_CONTRACT_FAST
+       && FLOAT_TYPE_P (SLP_TREE_VECTYPE (*node)))
+     return IFN_LAST;
+ 
    auto childs = *ops;
    auto l0node = SLP_TREE_CHILDREN (childs[0]);
  
*************** complex_mul_pattern::matches (complex_op
*** 1035,1045 ****
    auto_vec<slp_tree> left_op, right_op;
    slp_tree add0 = NULL;
  
!   /* Check if we may be a multiply add.  It's only valid to form FMAs
!      with -ffp-contract=fast.  */
    if (!mul0
-       && (flag_fp_contract_mode == FP_CONTRACT_FAST
- 	  || !FLOAT_TYPE_P (SLP_TREE_VECTYPE (*node)))
        && vect_match_expression_p (l0node[0], PLUS_EXPR))
      {
        auto vals = SLP_TREE_CHILDREN (l0node[0]);
--- 1048,1055 ----
    auto_vec<slp_tree> left_op, right_op;
    slp_tree add0 = NULL;
  
!   /* Check if we may be a multiply add.  */
    if (!mul0
        && vect_match_expression_p (l0node[0], PLUS_EXPR))
      {
        auto vals = SLP_TREE_CHILDREN (l0node[0]);
*************** complex_mul_pattern::matches (complex_op
*** 1067,1081 ****
      return IFN_LAST;
  
    enum _conj_status status;
    if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 				     right_op, false, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
        if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 					 right_op, false, &status))
  	return IFN_LAST;
      }
  
--- 1077,1092 ----
      return IFN_LAST;
  
    enum _conj_status status;
+   auto_vec<slp_tree> res_ops;
    if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 				     right_op, false, res_ops, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
        if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 					 right_op, false, res_ops, &status))
  	return IFN_LAST;
      }
  
*************** complex_mul_pattern::matches (complex_op
*** 1103,1126 ****
    if (add0)
      ops->quick_push (add0);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, left_op[0]);
    if (kind == PERM_EVENODD || kind == PERM_TOP)
      {
!       ops->quick_push (left_op[1]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (left_op[0]);
      }
    else if (kind == PERM_EVENEVEN && status != CONJ_SND)
      {
!       ops->quick_push (left_op[0]);
!       ops->quick_push (right_op[0]);
!       ops->quick_push (left_op[1]);
      }
    else
      {
!       ops->quick_push (left_op[0]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (left_op[1]);
      }
  
    return ifn;
--- 1114,1137 ----
    if (add0)
      ops->quick_push (add0);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, res_ops[0]);
    if (kind == PERM_EVENODD || kind == PERM_TOP)
      {
!       ops->quick_push (res_ops[1]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[0]);
      }
    else if (kind == PERM_EVENEVEN && status != CONJ_SND)
      {
!       ops->quick_push (res_ops[0]);
!       ops->quick_push (res_ops[2]);
!       ops->quick_push (res_ops[1]);
      }
    else
      {
!       ops->quick_push (res_ops[0]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[1]);
      }
  
    return ifn;
*************** complex_fms_pattern::matches (complex_op
*** 1269,1274 ****
--- 1280,1290 ----
    if (!vect_match_expression_p (root, MINUS_EXPR))
      return IFN_LAST;
  
+   /* It's only valid to form FMSs with -ffp-contract=fast.  */
+   if (flag_fp_contract_mode != FP_CONTRACT_FAST
+       && FLOAT_TYPE_P (SLP_TREE_VECTYPE (*ref_node)))
+     return IFN_LAST;
+ 
    /* TODO: Support invariants here, with the new layout CADD now
  	   can match before we get a chance to try CFMS.  */
    auto nodes = SLP_TREE_CHILDREN (root);
*************** complex_fms_pattern::matches (complex_op
*** 1292,1306 ****
      return IFN_LAST;
  
    enum _conj_status status;
    if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 				     left_op, true, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
        if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 					 left_op, true, &status))
  	return IFN_LAST;
      }
  
--- 1308,1324 ----
      return IFN_LAST;
  
    enum _conj_status status;
+   auto_vec<slp_tree> res_ops;
    if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 				     left_op, true, res_ops, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
+       auto_vec<slp_tree> res_ops;
        if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 					 left_op, true, res_ops, &status))
  	return IFN_LAST;
      }
  
*************** complex_fms_pattern::matches (complex_op
*** 1315,1334 ****
    ops->truncate (0);
    ops->create (4);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, right_op[0]);
    if (kind == PERM_EVENODD)
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (right_op[0]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (left_op[1]);
      }
    else
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (right_op[0]);
!       ops->quick_push (left_op[0]);
      }
  
    return ifn;
--- 1333,1352 ----
    ops->truncate (0);
    ops->create (4);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, res_ops[2]);
    if (kind == PERM_EVENODD)
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (res_ops[2]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[1]);
      }
    else
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[2]);
!       ops->quick_push (res_ops[0]);
      }
  
    return ifn;
diff -Nrcpad gcc-14.3.0/gcc/tree-vect-slp.cc gcc-14.3.0-RC-20260619/gcc/tree-vect-slp.cc
*** gcc-14.3.0/gcc/tree-vect-slp.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vect-slp.cc	Fri Jun 19 06:51:06 2026
*************** vect_transform_slp_perm_load (vec_info *
*** 8865,8871 ****
  
     otherwise add:
  
!       <new SSA name> = FIRST_DEF.  */
  
  static void
  vect_add_slp_permutation (vec_info *vinfo, gimple_stmt_iterator *gsi,
--- 8865,8875 ----
  
     otherwise add:
  
!       <new SSA name> = VEC_PERM_EXPR <FIRST_DEF, SECOND_DEF,
! 				      { N, N+1, N+2, ... }>
! 
!    where N == IDENTITY_OFFSET which is either zero or equal to the
!    number of elements of the result.  */
  
  static void
  vect_add_slp_permutation (vec_info *vinfo, gimple_stmt_iterator *gsi,
*************** vect_add_slp_permutation (vec_info *vinf
*** 8905,8940 ****
  				       first_def, second_def,
  				       mask_vec);
      }
!   else if (!types_compatible_p (TREE_TYPE (first_def), vectype))
      {
!       /* For identity permutes we still need to handle the case
! 	 of offsetted extracts or concats.  */
!       unsigned HOST_WIDE_INT c;
!       auto first_def_nunits
! 	= TYPE_VECTOR_SUBPARTS (TREE_TYPE (first_def));
!       if (known_le (TYPE_VECTOR_SUBPARTS (vectype), first_def_nunits))
  	{
! 	  unsigned HOST_WIDE_INT elsz
! 	    = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (first_def))));
! 	  tree lowpart = build3 (BIT_FIELD_REF, vectype, first_def,
! 				 TYPE_SIZE (vectype),
! 				 bitsize_int (identity_offset * elsz));
! 	  perm_stmt = gimple_build_assign (perm_dest, lowpart);
  	}
!       else if (constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype),
! 				    first_def_nunits, &c) && c == 2)
  	{
! 	  tree ctor = build_constructor_va (vectype, 2, NULL_TREE, first_def,
! 					    NULL_TREE, second_def);
! 	  perm_stmt = gimple_build_assign (perm_dest, ctor);
  	}
-       else
- 	gcc_unreachable ();
-     }
-   else
-     {
-       /* We need a copy here in case the def was external.  */
-       perm_stmt = gimple_build_assign (perm_dest, first_def);
      }
    vect_finish_stmt_generation (vinfo, NULL, perm_stmt, gsi);
    /* Store the vector statement in NODE.  */
--- 8909,8955 ----
  				       first_def, second_def,
  				       mask_vec);
      }
!   else
      {
!       auto def_nunits = TYPE_VECTOR_SUBPARTS (TREE_TYPE (first_def));
!       unsigned HOST_WIDE_INT vecno;
!       poly_uint64 eltno;
!       if (!can_div_trunc_p (poly_uint64 (identity_offset), def_nunits,
! 			    &vecno, &eltno))
! 	gcc_unreachable ();
!       tree def = vecno & 1 ? second_def : first_def;
!       if (!types_compatible_p (TREE_TYPE (def), vectype))
  	{
! 	  /* For identity permutes we still need to handle the case
! 	     of offsetted extracts or concats.  */
! 	  unsigned HOST_WIDE_INT c;
! 	  if (known_le (TYPE_VECTOR_SUBPARTS (vectype), def_nunits))
! 	    {
! 	      unsigned HOST_WIDE_INT elsz
! 		= tree_to_uhwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (def))));
! 	      tree lowpart = build3 (BIT_FIELD_REF, vectype, def,
! 				     TYPE_SIZE (vectype),
! 				     bitsize_int (eltno * elsz));
! 	      perm_stmt = gimple_build_assign (perm_dest, lowpart);
! 	    }
! 	  else if (constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype),
! 					def_nunits, &c) && c == 2)
! 	    {
! 	      gcc_assert (known_eq (identity_offset, 0U));
! 	      tree ctor = build_constructor_va (vectype, 2,
! 						NULL_TREE, first_def,
! 						NULL_TREE, second_def);
! 	      perm_stmt = gimple_build_assign (perm_dest, ctor);
! 	    }
! 	  else
! 	    gcc_unreachable ();
  	}
!       else
  	{
! 	  /* We need a copy here in case the def was external.  */
! 	  gcc_assert (known_eq (eltno, 0U));
! 	  perm_stmt = gimple_build_assign (perm_dest, def);
  	}
      }
    vect_finish_stmt_generation (vinfo, NULL, perm_stmt, gsi);
    /* Store the vector statement in NODE.  */
diff -Nrcpad gcc-14.3.0/gcc/tree-vect-stmts.cc gcc-14.3.0-RC-20260619/gcc/tree-vect-stmts.cc
*** gcc-14.3.0/gcc/tree-vect-stmts.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vect-stmts.cc	Fri Jun 19 06:51:06 2026
*************** vectorizable_simd_clone_call (vec_info *
*** 3945,3950 ****
--- 3945,3952 ----
  
    vec<tree>& simd_clone_info = (slp_node ? SLP_TREE_SIMD_CLONE_INFO (slp_node)
  				: STMT_VINFO_SIMD_CLONE_INFO (stmt_info));
+   if (!vec_stmt)
+     simd_clone_info.truncate (0);
    arginfo.reserve (nargs, true);
    auto_vec<slp_tree> slp_op;
    slp_op.safe_grow_cleared (nargs);
*************** vectorizable_simd_clone_call (vec_info *
*** 3993,4002 ****
  
        /* For linear arguments, the analyze phase should have saved
  	 the base and step in {STMT_VINFO,SLP_TREE}_SIMD_CLONE_INFO.  */
!       if (i * 3 + 4 <= simd_clone_info.length ()
  	  && simd_clone_info[i * 3 + 2])
  	{
- 	  gcc_assert (vec_stmt);
  	  thisarginfo.linear_step = tree_to_shwi (simd_clone_info[i * 3 + 2]);
  	  thisarginfo.op = simd_clone_info[i * 3 + 1];
  	  thisarginfo.simd_lane_linear
--- 3995,4004 ----
  
        /* For linear arguments, the analyze phase should have saved
  	 the base and step in {STMT_VINFO,SLP_TREE}_SIMD_CLONE_INFO.  */
!       if (vec_stmt
! 	  && i * 3 + 4 <= simd_clone_info.length ()
  	  && simd_clone_info[i * 3 + 2])
  	{
  	  thisarginfo.linear_step = tree_to_shwi (simd_clone_info[i * 3 + 2]);
  	  thisarginfo.op = simd_clone_info[i * 3 + 1];
  	  thisarginfo.simd_lane_linear
*************** vectorizable_simd_clone_call (vec_info *
*** 4051,4057 ****
    unsigned group_size = slp_node ? SLP_TREE_LANES (slp_node) : 1;
    unsigned int badness = 0;
    struct cgraph_node *bestn = NULL;
!   if (simd_clone_info.exists ())
      bestn = cgraph_node::get (simd_clone_info[0]);
    else
      for (struct cgraph_node *n = node->simd_clones; n != NULL;
--- 4053,4059 ----
    unsigned group_size = slp_node ? SLP_TREE_LANES (slp_node) : 1;
    unsigned int badness = 0;
    struct cgraph_node *bestn = NULL;
!   if (vec_stmt)
      bestn = cgraph_node::get (simd_clone_info[0]);
    else
      for (struct cgraph_node *n = node->simd_clones; n != NULL;
*************** vectorizable_operation (vec_info *vinfo,
*** 6556,6562 ****
    poly_uint64 nunits_in;
    poly_uint64 nunits_out;
    tree vectype_out;
!   int ncopies, vec_num;
    int i;
    vec<tree> vec_oprnds0 = vNULL;
    vec<tree> vec_oprnds1 = vNULL;
--- 6558,6565 ----
    poly_uint64 nunits_in;
    poly_uint64 nunits_out;
    tree vectype_out;
!   unsigned int ncopies;
!   unsigned vec_num;
    int i;
    vec<tree> vec_oprnds0 = vNULL;
    vec<tree> vec_oprnds1 = vNULL;
*************** vectorizable_operation (vec_info *vinfo,
*** 7133,7140 ****
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op0,
! 								 ncopies}))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
--- 7136,7143 ----
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains
! 						   ({ op0, vec_num * ncopies}))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
*************** vectorizable_operation (vec_info *vinfo,
*** 7143,7150 ****
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op1,
! 								 ncopies }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
--- 7146,7153 ----
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains
! 						  ({ op1, vec_num * ncopies }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
*************** vectorizable_store (vec_info *vinfo,
*** 8763,8769 ****
  					  memory_access_type, loop_lens);
      }
  
!   if (mask && !costing_p)
      LOOP_VINFO_HAS_MASK_STORE (loop_vinfo) = true;
  
    /* In case the vectorization factor (VF) is bigger than the number
--- 8766,8772 ----
  					  memory_access_type, loop_lens);
      }
  
!   if (loop_vinfo && mask && !costing_p)
      LOOP_VINFO_HAS_MASK_STORE (loop_vinfo) = true;
  
    /* In case the vectorization factor (VF) is bigger than the number
*************** supportable_widening_operation (vec_info
*** 14261,14266 ****
--- 14264,14271 ----
  
        internal_fn lo, hi, even, odd;
        lookup_hilo_internal_fn (ifn, &lo, &hi);
+       if (BYTES_BIG_ENDIAN)
+ 	std::swap (lo, hi);
        *code1 = as_combined_fn (lo);
        *code2 = as_combined_fn (hi);
        optab1 = direct_internal_fn_optab (lo, {vectype, vectype});
diff -Nrcpad gcc-14.3.0/gcc/tree-vrp.cc gcc-14.3.0-RC-20260619/gcc/tree-vrp.cc
*** gcc-14.3.0/gcc/tree-vrp.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree-vrp.cc	Fri Jun 19 06:51:06 2026
*************** along with GCC; see the file COPYING3.
*** 86,99 ****
  class remove_unreachable {
  public:
    remove_unreachable (gimple_ranger &r, bool all) : m_ranger (r), final_p (all)
!     { m_list.create (30); }
!   ~remove_unreachable () { m_list.release (); }
    void handle_early (gimple *s, edge e);
    void maybe_register (gimple *s);
    bool remove_and_update_globals ();
    vec<std::pair<int, int> > m_list;
    gimple_ranger &m_ranger;
    bool final_p;
  };
  
  // Check if block BB has a __builtin_unreachable () call on one arm, and
--- 86,101 ----
  class remove_unreachable {
  public:
    remove_unreachable (gimple_ranger &r, bool all) : m_ranger (r), final_p (all)
!     { m_list.create (30); m_tmp = BITMAP_ALLOC (NULL); }
!   ~remove_unreachable () { BITMAP_FREE (m_tmp); m_list.release (); }
    void handle_early (gimple *s, edge e);
    void maybe_register (gimple *s);
    bool remove_and_update_globals ();
+   bool fully_replaceable (tree name, basic_block bb);
    vec<std::pair<int, int> > m_list;
    gimple_ranger &m_ranger;
    bool final_p;
+   bitmap m_tmp;
  };
  
  // Check if block BB has a __builtin_unreachable () call on one arm, and
*************** remove_unreachable::maybe_register (gimp
*** 139,146 ****
  //    goto <bb 3>; [0.00%]
  //  Any additional use of _1 or _2 in this block invalidates early replacement.
  
! static bool
! fully_replaceable (tree name, basic_block bb)
  {
    use_operand_p use_p;
    imm_use_iterator iter;
--- 141,148 ----
  //    goto <bb 3>; [0.00%]
  //  Any additional use of _1 or _2 in this block invalidates early replacement.
  
! bool
! remove_unreachable::fully_replaceable (tree name, basic_block bb)
  {
    use_operand_p use_p;
    imm_use_iterator iter;
*************** remove_unreachable::handle_early (gimple
*** 208,216 ****
    gcc_checking_assert (gimple_outgoing_range_stmt_p (e->src) == s);
    gcc_checking_assert (!final_p);
  
!   // Check if every export use is dominated by this branch.
    tree name;
!   FOR_EACH_GORI_EXPORT_NAME (m_ranger.gori (), e->src, name)
      {
        if (!fully_replaceable (name, e->src))
  	return;
--- 210,220 ----
    gcc_checking_assert (gimple_outgoing_range_stmt_p (e->src) == s);
    gcc_checking_assert (!final_p);
  
!   // Check if every export and its dependencies are dominated by this branch.
!   // Dependencies are required as it needs to dominate potential
!   // recalculations.  See PR 123300.
    tree name;
!   FOR_EACH_GORI_EXPORT_AND_DEP_NAME (m_ranger.gori (), e->src, name, m_tmp)
      {
        if (!fully_replaceable (name, e->src))
  	return;
diff -Nrcpad gcc-14.3.0/gcc/tree.cc gcc-14.3.0-RC-20260619/gcc/tree.cc
*** gcc-14.3.0/gcc/tree.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/tree.cc	Fri Jun 19 06:51:06 2026
*************** simple_cst_equal (const_tree t1, const_t
*** 6616,6628 ****
  	vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
  
  	if (vec_safe_length (v1) != vec_safe_length (v2))
! 	  return false;
  
          for (idx = 0; idx < vec_safe_length (v1); ++idx)
! 	  /* ??? Should we handle also fields here? */
! 	  if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
! 	    return false;
! 	return true;
        }
  
      case SAVE_EXPR:
--- 6616,6642 ----
  	vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
  
  	if (vec_safe_length (v1) != vec_safe_length (v2))
! 	  return 0;
  
          for (idx = 0; idx < vec_safe_length (v1); ++idx)
! 	  {
! 	    if ((*v1)[idx].index
! 		&& TREE_CODE ((*v1)[idx].index) == FIELD_DECL)
! 	      {
! 		if ((*v1)[idx].index != (*v2)[idx].index)
! 		  return 0;
! 	      }
! 	    else
! 	      {
! 		cmp = simple_cst_equal ((*v1)[idx].index, (*v2)[idx].index);
! 		if (cmp <= 0)
! 		  return cmp;
! 	      }
! 	    cmp = simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value);
! 	    if (cmp <= 0)
! 	      return cmp;
! 	  }
! 	return 1;
        }
  
      case SAVE_EXPR:
*************** verify_type (const_tree t)
*** 14160,14169 ****
      }
    if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
     {
!       error ("%<TYPE_CANONICAL%> of main variant is not main variant");
!       debug_tree (ct);
!       debug_tree (TYPE_MAIN_VARIANT (ct));
!       error_found = true;
     }
  
  
--- 14174,14198 ----
      }
    if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
     {
!      /* This can happen when build_type_attribute_variant is called on
! 	C/C++ arrays of qualified types.  volatile int[2] is unqualified
! 	ARRAY_TYPE with volatile int element type.
! 	TYPE_CANONICAL (volatile int) is itself and so is
! 	TYPE_CANONICAL (volatile int[2]).  build_type_attribute_qual_variant
! 	creates a distinct type copy (so TYPE_MAIN_VARIANT is itself) and sets
! 	its TYPE_CANONICAL to the unqualified ARRAY_TYPE (so volatile int[2]).
! 	But this is not the TYPE_MAIN_VARIANT, which is int[2].  So, just
! 	verify that TYPE_MAIN_VARIANT (ct) is already the final type we
! 	need.  */
!       tree mvc = TYPE_MAIN_VARIANT (ct);
!       if (TYPE_CANONICAL (mvc) != mvc)
! 	{
! 	  error ("main variant of %<TYPE_CANONICAL%> of main variant is not"
! 		 " its own %<TYPE_CANONICAL%>");
! 	  debug_tree (ct);
! 	  debug_tree (TYPE_MAIN_VARIANT (ct));
! 	  error_found = true;
! 	}
     }
  
  
*************** valid_new_delete_pair_p (tree new_asm, t
*** 15014,15019 ****
--- 15043,15055 ----
    if ((new_name[2] != 'w' || delete_name[2] != 'l')
        && (new_name[2] != 'a' || delete_name[2] != 'a'))
      return false;
+   if (new_name[3] == 'I' || delete_name[3] == 'I')
+     {
+       /* When ::operator new or ::operator delete are function templates,
+ 	 return uncertain mismatch, we need demangler in that case.  */
+       *pcertain = false;
+       return false;
+     }
    /* 'j', 'm' and 'y' correspond to size_t.  */
    if (new_name[3] != 'j' && new_name[3] != 'm' && new_name[3] != 'y')
      return false;
diff -Nrcpad gcc-14.3.0/gcc/var-tracking.cc gcc-14.3.0-RC-20260619/gcc/var-tracking.cc
*** gcc-14.3.0/gcc/var-tracking.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/var-tracking.cc	Fri Jun 19 06:51:06 2026
*************** val_store (dataflow_set *set, rtx val, r
*** 2519,2525 ****
  	  struct elt_loc_list *l;
  	  for (l = v->locs; l; l = l->next)
  	    {
! 	      fprintf (dump_file, "\n%i: ", INSN_UID (l->setting_insn));
  	      print_inline_rtx (dump_file, l->loc, 0);
  	    }
  	}
--- 2519,2526 ----
  	  struct elt_loc_list *l;
  	  for (l = v->locs; l; l = l->next)
  	    {
! 	      fprintf (dump_file, "\n%i: ",
! 		       l->setting_insn ? INSN_UID (l->setting_insn) : -1);
  	      print_inline_rtx (dump_file, l->loc, 0);
  	    }
  	}
diff -Nrcpad gcc-14.3.0/gcc/vr-values.cc gcc-14.3.0-RC-20260619/gcc/vr-values.cc
*** gcc-14.3.0/gcc/vr-values.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/gcc/vr-values.cc	Fri Jun 19 06:51:06 2026
*************** range_from_loop_direction (irange &r, tr
*** 245,258 ****
      r.set_varying (type);
    else if (dir == EV_DIR_GROWS)
      {
!       if (wi::gt_p (begin.lower_bound (), end.upper_bound (), sign))
  	r.set_varying (type);
        else
  	r = int_range<1> (type, begin.lower_bound (), end.upper_bound ());
      }
    else
      {
!       if (wi::gt_p (end.lower_bound (), begin.upper_bound (), sign))
  	r.set_varying (type);
        else
  	r = int_range<1> (type, end.lower_bound (), begin.upper_bound ());
--- 245,258 ----
      r.set_varying (type);
    else if (dir == EV_DIR_GROWS)
      {
!       if (wi::ge_p (begin.lower_bound (), end.upper_bound (), sign))
  	r.set_varying (type);
        else
  	r = int_range<1> (type, begin.lower_bound (), end.upper_bound ());
      }
    else
      {
!       if (wi::ge_p (end.lower_bound (), begin.upper_bound (), sign))
  	r.set_varying (type);
        else
  	r = int_range<1> (type, end.lower_bound (), begin.upper_bound ());
*************** range_fits_type_p (const irange *vr,
*** 983,988 ****
--- 983,992 ----
    widest_int tem;
    signop src_sgn;
  
+   /* Now we can only handle ranges with constant bounds.  */
+   if (vr->undefined_p () || vr->varying_p ())
+     return false;
+ 
    /* We can only handle integral and pointer types.  */
    src_type = vr->type ();
    if (!INTEGRAL_TYPE_P (src_type)
*************** range_fits_type_p (const irange *vr,
*** 991,1007 ****
  
    /* An extension is fine unless VR is SIGNED and dest_sgn is UNSIGNED,
       and so is an identity transform.  */
!   src_precision = TYPE_PRECISION (vr->type ());
    src_sgn = TYPE_SIGN (src_type);
    if ((src_precision < dest_precision
         && !(dest_sgn == UNSIGNED && src_sgn == SIGNED))
        || (src_precision == dest_precision && src_sgn == dest_sgn))
      return true;
  
-   /* Now we can only handle ranges with constant bounds.  */
-   if (vr->undefined_p () || vr->varying_p ())
-     return false;
- 
    wide_int vrmin = vr->lower_bound ();
    wide_int vrmax = vr->upper_bound ();
  
--- 995,1007 ----
  
    /* An extension is fine unless VR is SIGNED and dest_sgn is UNSIGNED,
       and so is an identity transform.  */
!   src_precision = TYPE_PRECISION (src_type);
    src_sgn = TYPE_SIGN (src_type);
    if ((src_precision < dest_precision
         && !(dest_sgn == UNSIGNED && src_sgn == SIGNED))
        || (src_precision == dest_precision && src_sgn == dest_sgn))
      return true;
  
    wide_int vrmin = vr->lower_bound ();
    wide_int vrmax = vr->upper_bound ();
  
diff -Nrcpad gcc-14.3.0/libcody/ChangeLog gcc-14.3.0-RC-20260619/libcody/ChangeLog
*** gcc-14.3.0/libcody/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libcody/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,20 ----
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* cody.hh (S2C): For __cpp_char8_t >= 201811 use char8_t instead of
+ 	char in argument type.
+ 	(MessageBuffer::Space): Revert 2025-11-15 change.
+ 	(MessageBuffer::Append): For __cpp_char8_t >= 201811 add overload
+ 	with char8_t const * type of first argument.
+ 	(Packet::Packet): Similarly for first argument.
+ 	* client.cc (CommunicationError, Client::ProcessResponse,
+ 	Client::Connect, ConnectResponse, PathnameResponse, OKResponse,
+ 	IncludeTranslateResponse): Cast u8 string literals to (const char *)
+ 	where needed.
+ 	* server.cc (Server::ProcessRequests, ConnectRequest): Likewise.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libcody/client.cc gcc-14.3.0-RC-20260619/libcody/client.cc
*** gcc-14.3.0/libcody/client.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libcody/client.cc	Fri Jun 19 06:51:06 2026
*************** int Client::CommunicateWithServer ()
*** 97,103 ****
  
  static Packet CommunicationError (int err)
  {
!   std::string e {u8"communication error:"};
    e.append (strerror (err));
  
    return Packet (Client::PC_ERROR, std::move (e));
--- 97,103 ----
  
  static Packet CommunicationError (int err)
  {
!   std::string e {(const char *) u8"communication error:"};
    e.append (strerror (err));
  
    return Packet (Client::PC_ERROR, std::move (e));
*************** Packet Client::ProcessResponse (std::vec
*** 110,142 ****
      {
        if (e == EINVAL)
  	{
! 	  std::string msg (u8"malformed string '");
  	  msg.append (words[0]);
! 	  msg.append (u8"'");
  	  return Packet (Client::PC_ERROR, std::move (msg));
  	}
        else
! 	return Packet (Client::PC_ERROR, u8"missing response");
      }
  
    Assert (!words.empty ());
!   if (words[0] == u8"ERROR")
      return Packet (Client::PC_ERROR,
! 		   words.size () == 2 ? words[1]: u8"malformed error response");
  
    if (isLast && !read.IsAtEnd ())
      return Packet (Client::PC_ERROR,
! 		   std::string (u8"unexpected extra response"));
  
    Assert (code < Detail::RC_HWM);
    Packet result (responseTable[code] (words));
    result.SetRequest (code);
    if (result.GetCode () == Client::PC_ERROR && result.GetString ().empty ())
      {
!       std::string msg {u8"malformed response '"};
  
        read.LexedLine (msg);
!       msg.append (u8"'");
        result.GetString () = std::move (msg);
      }
    else if (result.GetCode () == Client::PC_CONNECT)
--- 110,143 ----
      {
        if (e == EINVAL)
  	{
! 	  std::string msg ((const char *) u8"malformed string '");
  	  msg.append (words[0]);
! 	  msg.append ((const char *) u8"'");
  	  return Packet (Client::PC_ERROR, std::move (msg));
  	}
        else
! 	return Packet (Client::PC_ERROR, (const char *) u8"missing response");
      }
  
    Assert (!words.empty ());
!   if (words[0] == (const char *) u8"ERROR")
      return Packet (Client::PC_ERROR,
! 		   words.size () == 2 ? words[1]
! 		   : (const char *) u8"malformed error response");
  
    if (isLast && !read.IsAtEnd ())
      return Packet (Client::PC_ERROR,
! 		   std::string ((const char *) u8"unexpected extra response"));
  
    Assert (code < Detail::RC_HWM);
    Packet result (responseTable[code] (words));
    result.SetRequest (code);
    if (result.GetCode () == Client::PC_ERROR && result.GetString ().empty ())
      {
!       std::string msg {(const char *) u8"malformed response '"};
  
        read.LexedLine (msg);
!       msg.append ((const char *) u8"'");
        result.GetString () = std::move (msg);
      }
    else if (result.GetCode () == Client::PC_CONNECT)
*************** Packet Client::Connect (char const *agen
*** 199,205 ****
  			  size_t alen, size_t ilen)
  {
    write.BeginLine ();
!   write.AppendWord (u8"HELLO");
    write.AppendInteger (Version);
    write.AppendWord (agent, true, alen);
    write.AppendWord (ident, true, ilen);
--- 200,206 ----
  			  size_t alen, size_t ilen)
  {
    write.BeginLine ();
!   write.AppendWord ((const char *) u8"HELLO");
    write.AppendInteger (Version);
    write.AppendWord (agent, true, alen);
    write.AppendWord (ident, true, ilen);
*************** Packet Client::Connect (char const *agen
*** 211,217 ****
  // HELLO $version $agent [$flags]
  Packet ConnectResponse (std::vector<std::string> &words)
  {
!   if (words[0] == u8"HELLO" && (words.size () == 3 || words.size () == 4))
      {
        char *eptr;
        unsigned long val = strtoul (words[1].c_str (), &eptr, 10);
--- 212,219 ----
  // HELLO $version $agent [$flags]
  Packet ConnectResponse (std::vector<std::string> &words)
  {
!   if (words[0] == (const char *) u8"HELLO"
!       && (words.size () == 3 || words.size () == 4))
      {
        char *eptr;
        unsigned long val = strtoul (words[1].c_str (), &eptr, 10);
*************** Packet Client::ModuleRepo ()
*** 247,253 ****
  // PATHNAME $dir | ERROR
  Packet PathnameResponse (std::vector<std::string> &words)
  {
!   if (words[0] == u8"PATHNAME" && words.size () == 2)
      return Packet (Client::PC_PATHNAME, std::move (words[1]));
  
    return Packet (Client::PC_ERROR, u8"");
--- 249,255 ----
  // PATHNAME $dir | ERROR
  Packet PathnameResponse (std::vector<std::string> &words)
  {
!   if (words[0] == (const char *) u8"PATHNAME" && words.size () == 2)
      return Packet (Client::PC_PATHNAME, std::move (words[1]));
  
    return Packet (Client::PC_ERROR, u8"");
*************** Packet PathnameResponse (std::vector<std
*** 256,262 ****
  // OK or ERROR
  Packet OKResponse (std::vector<std::string> &words)
  {
!   if (words[0] == u8"OK")
      return Packet (Client::PC_OK);
    else
      return Packet (Client::PC_ERROR,
--- 258,264 ----
  // OK or ERROR
  Packet OKResponse (std::vector<std::string> &words)
  {
!   if (words[0] == (const char *) u8"OK")
      return Packet (Client::PC_OK);
    else
      return Packet (Client::PC_ERROR,
*************** Packet Client::IncludeTranslate (char co
*** 319,329 ****
  // PATHNAME $cmifile
  Packet IncludeTranslateResponse (std::vector<std::string> &words)
  {
!   if (words[0] == u8"BOOL" && words.size () == 2)
      {
!       if (words[1] == u8"FALSE")
! 	return Packet (Client::PC_BOOL, 0);
!       else if (words[1] == u8"TRUE")
  	return Packet (Client::PC_BOOL, 1);
        else
  	return Packet (Client::PC_ERROR, u8"");
--- 321,331 ----
  // PATHNAME $cmifile
  Packet IncludeTranslateResponse (std::vector<std::string> &words)
  {
!   if (words[0] == (const char *) u8"BOOL" && words.size () == 2)
      {
!       if (words[1] == (const char *) u8"FALSE")
! 	return Packet (Client::PC_BOOL);
!       else if (words[1] == (const char *) u8"TRUE")
  	return Packet (Client::PC_BOOL, 1);
        else
  	return Packet (Client::PC_ERROR, u8"");
diff -Nrcpad gcc-14.3.0/libcody/cody.hh gcc-14.3.0-RC-20260619/libcody/cody.hh
*** gcc-14.3.0/libcody/cody.hh	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libcody/cody.hh	Fri Jun 19 06:51:06 2026
*************** namespace Detail  {
*** 47,58 ****
--- 47,67 ----
  
  // C++11 doesn't have utf8 character literals :(
  
+ #if __cpp_char8_t >= 201811
+ template<unsigned I>
+ constexpr char S2C (char8_t const (&s)[I])
+ {
+   static_assert (I == 2, "only single octet strings may be converted");
+   return s[0];
+ }
+ #else
  template<unsigned I>
  constexpr char S2C (char const (&s)[I])
  {
    static_assert (I == 2, "only single octet strings may be converted");
    return s[0];
  }
+ #endif
  
  /// Internal buffering class.  Used to concatenate outgoing messages
  /// and Lex incoming ones.
*************** public:
*** 123,128 ****
--- 132,144 ----
        Space ();
      Append (str, maybe_quote, len);
    }
+ #if __cpp_char8_t >= 201811
+   void AppendWord (char8_t const *str, bool maybe_quote = false,
+ 		   size_t len = ~size_t (0))
+   {
+     AppendWord ((const char *) str, maybe_quote, len);
+   }
+ #endif
    /// Add a word as with AppendWord
    /// @param str the string to append
    /// @param maybe_quote string might need quoting, as for Append
*************** public:
*** 264,269 ****
--- 280,291 ----
      : string (s), cat (STRING), code (c)
    {
    }
+ #if __cpp_char8_t >= 201811
+   Packet (unsigned c, const char8_t *s)
+     : string ((const char *) s), cat (STRING), code (c)
+   {
+   }
+ #endif
    Packet (unsigned c, std::vector<std::string> &&v)
      : vector (std::move (v)), cat (VECTOR), code (c)
    {
diff -Nrcpad gcc-14.3.0/libcody/server.cc gcc-14.3.0-RC-20260619/libcody/server.cc
*** gcc-14.3.0/libcody/server.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libcody/server.cc	Fri Jun 19 06:51:06 2026
*************** static RequestPair
*** 36,47 ****
    const requestTable[Detail::RC_HWM] =
    {
      // Same order as enum RequestCode
!     RequestPair {u8"HELLO", nullptr},
!     RequestPair {u8"MODULE-REPO", ModuleRepoRequest},
!     RequestPair {u8"MODULE-EXPORT", ModuleExportRequest},
!     RequestPair {u8"MODULE-IMPORT", ModuleImportRequest},
!     RequestPair {u8"MODULE-COMPILED", ModuleCompiledRequest},
!     RequestPair {u8"INCLUDE-TRANSLATE", IncludeTranslateRequest},
    };
  }
  
--- 36,47 ----
    const requestTable[Detail::RC_HWM] =
    {
      // Same order as enum RequestCode
!     RequestPair {(const char *) u8"HELLO", nullptr},
!     RequestPair {(const char *) u8"MODULE-REPO", ModuleRepoRequest},
!     RequestPair {(const char *) u8"MODULE-EXPORT", ModuleExportRequest},
!     RequestPair {(const char *) u8"MODULE-IMPORT", ModuleImportRequest},
!     RequestPair {(const char *) u8"MODULE-COMPILED", ModuleCompiledRequest},
!     RequestPair {(const char *) u8"INCLUDE-TRANSLATE", IncludeTranslateRequest},
    };
  }
  
*************** void Server::ProcessRequests (void)
*** 135,155 ****
  	  std::string msg;
  
  	  if (err > 0)
! 	    msg = u8"error processing '";
  	  else if (ix >= Detail::RC_HWM)
! 	    msg = u8"unrecognized '";
  	  else if (IsConnected () && ix == Detail::RC_CONNECT)
! 	    msg = u8"already connected '";
  	  else if (!IsConnected () && ix != Detail::RC_CONNECT)
! 	    msg = u8"not connected '";
  	  else
! 	    msg = u8"malformed '";
  
  	  read.LexedLine (msg);
! 	  msg.append (u8"'");
  	  if (err > 0)
  	    {
! 	      msg.append (u8" ");
  	      msg.append (strerror (err));
  	    }
  	  resolver->ErrorResponse (this, std::move (msg));
--- 135,155 ----
  	  std::string msg;
  
  	  if (err > 0)
! 	    msg = (const char *) u8"error processing '";
  	  else if (ix >= Detail::RC_HWM)
! 	    msg = (const char *) u8"unrecognized '";
  	  else if (IsConnected () && ix == Detail::RC_CONNECT)
! 	    msg = (const char *) u8"already connected '";
  	  else if (!IsConnected () && ix != Detail::RC_CONNECT)
! 	    msg = (const char *) u8"not connected '";
  	  else
! 	    msg = (const char *) u8"malformed '";
  
  	  read.LexedLine (msg);
! 	  msg.append ((const char *) u8"'");
  	  if (err > 0)
  	    {
! 	      msg.append ((const char *) u8" ");
  	      msg.append (strerror (err));
  	    }
  	  resolver->ErrorResponse (this, std::move (msg));
*************** Resolver *ConnectRequest (Server *s, Res
*** 176,182 ****
      return nullptr;
  
    if (words.size () == 3)
!     words.emplace_back (u8"");
    unsigned version = ParseUnsigned (words[1]);
    if (version == ~0u)
      return nullptr;
--- 176,182 ----
      return nullptr;
  
    if (words.size () == 3)
!     words.emplace_back ((const char *) u8"");
    unsigned version = ParseUnsigned (words[1]);
    if (version == ~0u)
      return nullptr;
diff -Nrcpad gcc-14.3.0/libcpp/ChangeLog gcc-14.3.0-RC-20260619/libcpp/ChangeLog
*** gcc-14.3.0/libcpp/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libcpp/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,29 ----
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR preprocessor/105412
+ 	* files.cc (_cpp_stack_file): Call deps_add_dep even on
+ 	empty file path.
+ 	* mkdeps.cc (class mkdeps): Add first_phony_dep member.
+ 	(mkdeps::mkdeps ()): Initialize it to 1.
+ 	(deps_add_dep): When called first with "" argument, decrease
+ 	d->first_phony_dep to 0.
+ 	(make_write): For -MP iterate from d->first_phony_dep
+ 	rather than 1.
+ 
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR preprocessor/123273
+ 	* lex.cc (cpp_directive_only_process): Only go to done_comment
+ 	for '/' if star is true and esc is false.  When seeing '\\' with
+ 	esc set to true, clear esc as well as star instead of keeping esc
+ 	set.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libcpp/files.cc gcc-14.3.0-RC-20260619/libcpp/files.cc
*** gcc-14.3.0/libcpp/files.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libcpp/files.cc	Fri Jun 19 06:51:06 2026
*************** _cpp_stack_file (cpp_reader *pfile, _cpp
*** 972,978 ****
        /* Add the file to the dependencies on its first inclusion.  */
        if (CPP_OPTION (pfile, deps.style) > (sysp != 0)
  	  && !file->stack_count
- 	  && file->path[0]
  	  && !(pfile->main_file == file
  	       && CPP_OPTION (pfile, deps.ignore_main_file)))
  	deps_add_dep (pfile->deps, file->path);
--- 972,977 ----
diff -Nrcpad gcc-14.3.0/libcpp/lex.cc gcc-14.3.0-RC-20260619/libcpp/lex.cc
*** gcc-14.3.0/libcpp/lex.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libcpp/lex.cc	Fri Jun 19 06:51:06 2026
*************** cpp_directive_only_process (cpp_reader *
*** 5369,5375 ****
  		    switch (c)
  		      {
  		      case '\\':
! 			esc = true;
  			break;
  
  		      case '\r':
--- 5369,5381 ----
  		    switch (c)
  		      {
  		      case '\\':
! 			if (esc)
! 			  {
! 			    star = false;
! 			    esc = false;
! 			  }
! 			else
! 			  esc = true;
  			break;
  
  		      case '\r':
*************** cpp_directive_only_process (cpp_reader *
*** 5400,5406 ****
  			break;
  
  		      case '/':
! 			if (star)
  			  goto done_comment;
  			/* FALLTHROUGH  */
  
--- 5406,5412 ----
  			break;
  
  		      case '/':
! 			if (star && !esc)
  			  goto done_comment;
  			/* FALLTHROUGH  */
  
diff -Nrcpad gcc-14.3.0/libcpp/mkdeps.cc gcc-14.3.0-RC-20260619/libcpp/mkdeps.cc
*** gcc-14.3.0/libcpp/mkdeps.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libcpp/mkdeps.cc	Fri Jun 19 06:51:06 2026
*************** public:
*** 81,88 ****
    };
  
    mkdeps ()
!     : primary_output (NULL), module_name (NULL), cmi_name (NULL)
!     , is_header_unit (false), is_exported (false), quote_lwm (0)
    {
    }
    ~mkdeps ()
--- 81,89 ----
    };
  
    mkdeps ()
!     : primary_output (NULL), module_name (NULL), cmi_name (NULL),
!       is_header_unit (false), is_exported (false), quote_lwm (0),
!       first_phony_dep (1)
    {
    }
    ~mkdeps ()
*************** public:
*** 118,123 ****
--- 119,125 ----
    bool is_header_unit;
    bool is_exported;
    unsigned short quote_lwm;
+   unsigned int first_phony_dep;
  };
  
  /* Apply Make quoting to STR, TRAIL.  Note that it's not possible to
*************** fdeps_add_target (struct mkdeps *d, cons
*** 318,328 ****
  void
  deps_add_dep (class mkdeps *d, const char *t)
  {
!   gcc_assert (*t);
! 
!   t = apply_vpath (d, t);
  
!   d->deps.push (xstrdup (t));
  }
  
  void
--- 320,336 ----
  void
  deps_add_dep (class mkdeps *d, const char *t)
  {
!   if (*t)
!     {
!       t = apply_vpath (d, t);
  
!       d->deps.push (xstrdup (t));
!     }
!   /* When called first with "", remember we should
!      emit for -MP all dependencies rather than just
!      second and following dependency.  See PR105412.  */
!   else if (d->deps.size () == 0)
!     d->first_phony_dep = 0;
  }
  
  void
*************** make_write (const cpp_reader *pfile, FIL
*** 439,445 ****
        make_write_vec (d->deps, fp, column, colmax);
        fputs ("\n", fp);
        if (CPP_OPTION (pfile, deps.phony_targets))
! 	for (unsigned i = 1; i < d->deps.size (); i++)
  	  fprintf (fp, "%s:\n", munge (d->deps[i]));
      }
  
--- 447,453 ----
        make_write_vec (d->deps, fp, column, colmax);
        fputs ("\n", fp);
        if (CPP_OPTION (pfile, deps.phony_targets))
! 	for (unsigned i = d->first_phony_dep; i < d->deps.size (); i++)
  	  fprintf (fp, "%s:\n", munge (d->deps[i]));
      }
  
diff -Nrcpad gcc-14.3.0/libcpp/po/be.gmo gcc-14.3.0-RC-20260619/libcpp/po/be.gmo
*** gcc-14.3.0/libcpp/po/be.gmo	Fri May 23 11:19:24 2025
--- gcc-14.3.0-RC-20260619/libcpp/po/be.gmo	Fri Jun 19 07:07:27 2026
*************** Last-Translator: Ales Nyakhaychyk <nyakh
*** 5,11 ****
  Language-Team: Belarusian <i18n@tut.by>
  Language: be
  MIME-Version: 1.0
! Content-Type: text/plain; charset=utf-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  %s - гэта блёчная прылада%s - вельмі вялікіпустая сімвальная канстантапрапушчан завяршаючы сімвал %cмнагасімвальная сімвальная канстантанезавершаныя каментарыі
\ No newline at end of file
--- 5,11 ----
  Language-Team: Belarusian <i18n@tut.by>
  Language: be
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  %s - гэта блёчная прылада%s - вельмі вялікіпустая сімвальная канстантапрапушчан завяршаючы сімвал %cмнагасімвальная сімвальная канстантанезавершаныя каментарыі
\ No newline at end of file
diff -Nrcpad gcc-14.3.0/libcpp/po/ca.gmo gcc-14.3.0-RC-20260619/libcpp/po/ca.gmo
*** gcc-14.3.0/libcpp/po/ca.gmo	Fri May 23 11:19:24 2025
--- gcc-14.3.0-RC-20260619/libcpp/po/ca.gmo	Fri Jun 19 07:07:27 2026
***************
*** 1,6 ****
  �����|	�&�*�?
[
x
�
�
$�
�
�
�
$#D h�2�'��1M]6d'�$�5�(Gc.}0�-�:,Fgs+�0+8d$�,�D�0Hd(� ��9�9  Z/{)�&�5�%2!X"z�.��<!^w$��,�E� A
! b'm+��(�0*4+_$��#�#�**?)j��1�3�9*d�����'/"Wz5�)�$�':&T"{7�)�>SZ8��*�8(R${$�'�+�342h1�1�4�/4 )d -� '� -� !/0!`!Cp!6�!7�!#"8".I"x"&�"(�"%�" # $#|E#(�$,�$D%!]%%�%�%,�%�%&&)&':&b&~&)�&8�&&�&&!'H'e''�'H�'.�''(;7(*s(#�(�(2�(A)5Q)J�);�)}*(�*:�*5�*&+6B+0y+I�+3�+(,A,3^,0�,�,7�,D-\-.|--�-'�-@.)B.%l.'�.#�.3�./ */EK/�/�//�/�/:0BK0+�0
! �03�02�0,1.E1.t1.�16�1,	262/R2)�2.�23�2'373T3Ck3;�3K�3+74c4�4 �4�4%�4!�405,P5}5:�5-�526176i6,�6%�6?�6/7!H7&j7$�7`�728J85Q8<�8+�82�84#9;X9?�9�9:�93/:2c:2�:8�:-;-0;*^;(�;*�;�;9�;4<KS<B�<=�< =:=9K=�=&�=1�=&�=%>'B>c:qp�	~��+�0@7-G*A8'nO�Cmit%|�
  #K"gIy�6$Bvu/�jYaRHx5Ddk�(r�3M>��!��lb}wQL4=�ZF
<�P\?9USV_[.X�{N&J,W�1�h�f) oEz^`];e���T2s"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" re-asserted"%s" redefined"/*" within comment#%s expects "FILENAME" or <FILENAME>#%s is a GCC extension#else after #else#else without #if#endif without #if#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma once in main file#pragma system_header ignored outside include file%.*s is not a valid universal character%s in preprocessing directive%s is a block device%s is shorter than expected%s is too large%s: %s%s: not used because `%.*s' defined as `%s' not `%.*s'%s: not used because `%.*s' not defined%s: not used because `%s' is defined'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' in identifier or number'?' without following ':'("%s" is an alternative token for "%s" in C++)(this will be reported only once per input file)C++ style comments are not allowed in ISO C90CPP arithmetic must be at least as precise as a target intCPP half-integer narrower than CPP characterCPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bitsISO C does not permit named variadic macrosISO C99 requires whitespace after the macro nameMultiple include guards may be useful for:
  NULL directory in find_file\x used with no following hex digits_Pragma takes a parenthesized string literal__VA_ARGS__ can only appear in the expansion of a C99 variadic macroanonymous variadic macros were introduced in C99assertion without predicateattempt to use poisoned "%s"backslash and newline separated by spacebackslash-newline at end of filecannot find source file %scharacter 0x%lx is not in the basic source character set
  character 0x%lx is not unibyte in execution character setcomma operator in operand of #ifconversion from %s to %s not supported by iconvconverting UCN to execution character setconverting UCN to source character setconverting escape sequence to execution character setconverting to execution character setcould not determine date and timecppchar_t must be an unsigned typecurrent file is older than %sdetected recursion whilst expanding macro "%s"division by zero in #ifduplicate macro parameter "%s"embedding a directive within macro arguments is not portableempty character constantempty filename in #%sextra tokens at end of #%s directivefailure to convert %s to %sfloating constant in preprocessor expressionfunction-like macro "%s" must be used with arguments in traditional Chex escape sequence out of rangeiconv_openimaginary constants are a GCC extensionimaginary number in preprocessor expressionimpossible operator '%u'incomplete universal character name %.*sinteger constant is so large that it is unsignedinteger constant is too large for its typeinteger overflow in preprocessor expressioninvalid #pragma GCC poison directiveinvalid built-in macro "%s"invalid flag "%s" in line directiveinvalid preprocessing directive #%sinvalid string literal, ignoring final '\'invalid suffix "%.*s" on floating constantinvalid suffix "%.*s" on integer constantline number out of rangemacro "%s" is not usedmacro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified in traditional Cmacro names must be identifiersmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' in expressionmissing ')' to complete answermissing terminating > charactermissing whitespace after the macro namemulti-character character constantmulti-line commentno iconv implementation, cannot convert from %s to %sno include path in which to search for %sno macro name given in #%s directivenon-ISO-standard escape sequence, '\%c'null character(s) ignorednull character(s) preserved in literaloctal escape sequence out of rangeone or more PCH files were found, but they were invalidoperator "defined" requires an identifierpoisoning existing macro "%s"predicate must be an identifierpredicate's answer is emptypreprocessor arithmetic has maximum precision of %lu bits; target requires %lu bitsregistering "%s" as both a pragma and a pragma namespacestdoutstyle of line directive is a GCC extensionsuggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csyntax error in macro parameter listtarget char is less than 8 bits widetarget int is narrower than target chartarget wchar_t is narrower than target charthe conditional began herethe left operand of "%s" changes sign when promotedthe meaning of '\%c' is different in traditional Cthe meaning of '\a' is different in traditional Cthe meaning of '\x' is different in traditional Cthe right operand of "%s" changes sign when promotedthis is the location of the previous definitionthis use of "defined" may not be portabletraditional C ignores #%s with the # indentedtraditional C rejects the "%.*s" suffixtraditional C rejects the unary plus operatortrigraph ??%c converted to %ctrigraph ??%c ignored, use -trigraphs to enableundefining "%s"universal character %.*s is not valid at the start of an identifieruniversal character %.*s is not valid in an identifieruniversal character names are only valid in C++ and C99unspellable token %sunterminated #%sunterminated argument list invoking macro "%s"unterminated commentuse -Winvalid-pch for more informationuse of C99 hexadecimal floating constantuse of C99 long long integer constantwhile reading precompiled headerwhile writing precompiled headerProject-Id-Version: cpplib-4.0.1
--- 1,7 ----
  �����|	�&�*�?
[
x
�
�
$�
�
�
�
$#D h�2�'��1M]6d'�$�5�(Gc.}0�-�:,Fgs+�0+8d$�,�D�0Hd(� ��9�9  Z/{)�&�5�%2!X"z�.��<!^w$��,�E� A
! b'm+��(�0*4+_$��#�#�**?)j��1�3�9*d�����'/"Wz5�)�$�':&T"{7�)�>SZ8��*�8(R${$�'�+�342h1�1�4�/4 )d -� '� -� !/0!`!Cp!6�!7�!#"8".I"x"&�"(�"%�" # $#wE#*�$.�$F%#^%�%�%�%,�%�%&&/&'@&h&�&)�&9�&)'&+'R'p'�'�'J�'0�')!(<K(,�(#�(�(3�(C()6l)K�)>�)�.*(�*;�*9+O+8k+1�+K�+4",W,q,4�,1�,�,:-HL-�-/�-/�-(.D>.+�.%�.'�.%�.3#/W/!p/G�/�/�//0?0;Z0C�0-�0
! 1613J1~10�10�1/�17)2-a2�21�2*�2/	3493(n3�3�3D�3=4KO4+�4�4�4!5"5%>5#d51�5/�5�5;
! 6.F62u65�6�6-�6')7BQ7/�7!�7&�7%
8d382�8�88�8<9+H94t95�9=�9A:!_:;�:4�:3�:3&;9Z;1�;.�;*�;( <+I<u<9�<�<N�<E;=A�=�=�=9�=(>(?>2h>'�>&�>(�>c:qp�	~��+�0@7-G*A8'nO�Cmit%|�
  #K"gIy�6$Bvu/�jYaRHx5Ddk�(r�3M>��!��lb}wQL4=�ZF
<�P\?9USV_[.X�{N&J,W�1�h�f) oEz^`];e���T2s"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" re-asserted"%s" redefined"/*" within comment#%s expects "FILENAME" or <FILENAME>#%s is a GCC extension#else after #else#else without #if#endif without #if#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma once in main file#pragma system_header ignored outside include file%.*s is not a valid universal character%s in preprocessing directive%s is a block device%s is shorter than expected%s is too large%s: %s%s: not used because `%.*s' defined as `%s' not `%.*s'%s: not used because `%.*s' not defined%s: not used because `%s' is defined'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' in identifier or number'?' without following ':'("%s" is an alternative token for "%s" in C++)(this will be reported only once per input file)C++ style comments are not allowed in ISO C90CPP arithmetic must be at least as precise as a target intCPP half-integer narrower than CPP characterCPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bitsISO C does not permit named variadic macrosISO C99 requires whitespace after the macro nameMultiple include guards may be useful for:
  NULL directory in find_file\x used with no following hex digits_Pragma takes a parenthesized string literal__VA_ARGS__ can only appear in the expansion of a C99 variadic macroanonymous variadic macros were introduced in C99assertion without predicateattempt to use poisoned "%s"backslash and newline separated by spacebackslash-newline at end of filecannot find source file %scharacter 0x%lx is not in the basic source character set
  character 0x%lx is not unibyte in execution character setcomma operator in operand of #ifconversion from %s to %s not supported by iconvconverting UCN to execution character setconverting UCN to source character setconverting escape sequence to execution character setconverting to execution character setcould not determine date and timecppchar_t must be an unsigned typecurrent file is older than %sdetected recursion whilst expanding macro "%s"division by zero in #ifduplicate macro parameter "%s"embedding a directive within macro arguments is not portableempty character constantempty filename in #%sextra tokens at end of #%s directivefailure to convert %s to %sfloating constant in preprocessor expressionfunction-like macro "%s" must be used with arguments in traditional Chex escape sequence out of rangeiconv_openimaginary constants are a GCC extensionimaginary number in preprocessor expressionimpossible operator '%u'incomplete universal character name %.*sinteger constant is so large that it is unsignedinteger constant is too large for its typeinteger overflow in preprocessor expressioninvalid #pragma GCC poison directiveinvalid built-in macro "%s"invalid flag "%s" in line directiveinvalid preprocessing directive #%sinvalid string literal, ignoring final '\'invalid suffix "%.*s" on floating constantinvalid suffix "%.*s" on integer constantline number out of rangemacro "%s" is not usedmacro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified in traditional Cmacro names must be identifiersmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' in expressionmissing ')' to complete answermissing terminating > charactermissing whitespace after the macro namemulti-character character constantmulti-line commentno iconv implementation, cannot convert from %s to %sno include path in which to search for %sno macro name given in #%s directivenon-ISO-standard escape sequence, '\%c'null character(s) ignorednull character(s) preserved in literaloctal escape sequence out of rangeone or more PCH files were found, but they were invalidoperator "defined" requires an identifierpoisoning existing macro "%s"predicate must be an identifierpredicate's answer is emptypreprocessor arithmetic has maximum precision of %lu bits; target requires %lu bitsregistering "%s" as both a pragma and a pragma namespacestdoutstyle of line directive is a GCC extensionsuggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csyntax error in macro parameter listtarget char is less than 8 bits widetarget int is narrower than target chartarget wchar_t is narrower than target charthe conditional began herethe left operand of "%s" changes sign when promotedthe meaning of '\%c' is different in traditional Cthe meaning of '\a' is different in traditional Cthe meaning of '\x' is different in traditional Cthe right operand of "%s" changes sign when promotedthis is the location of the previous definitionthis use of "defined" may not be portabletraditional C ignores #%s with the # indentedtraditional C rejects the "%.*s" suffixtraditional C rejects the unary plus operatortrigraph ??%c converted to %ctrigraph ??%c ignored, use -trigraphs to enableundefining "%s"universal character %.*s is not valid at the start of an identifieruniversal character %.*s is not valid in an identifieruniversal character names are only valid in C++ and C99unspellable token %sunterminated #%sunterminated argument list invoking macro "%s"unterminated commentuse -Winvalid-pch for more informationuse of C99 hexadecimal floating constantuse of C99 long long integer constantwhile reading precompiled headerwhile writing precompiled headerProject-Id-Version: cpplib-4.0.1
*************** Last-Translator: Mateu Gilles <gilles@ma
*** 10,18 ****
  Language-Team: Catalan <ca@dodds.net>
  Language: ca
  MIME-Version: 1.0
! Content-Type: text/plain; charset=ISO-8859-1
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
! "%s" despr�s de # no �s un enter positiu"%s" despr�s de #line no �s un enter positiuno es pot usar "%s" com un nom de macro perqu� �s un operador en C++"%s" no �s un nom de fitxer v�lid"%s" reafirmat"%s" re-definit"/*" dintre d'un comentari#%s espera "NOM_DE_FITXER" o <NOM_DE_FITXER>#%s �s una extenci� del GCC#else despr�s de #else#else sense #if#endif sense #if#include_next en el fitxer font primarija s'ha desat #pragma %s %sja s'ha desat #pragma %s#pragma una vegada en el fitxer principal#pragma system_header ignorat fora del fitxer d'inclusi�%.*s no �s un car�cter universal v�lid%s en una directiva de preprocessament%s �s un dispositiu de blocs%s �s m�s curt qu'esperat%s �s massa gran%s: %s%s: no utilitzat perqu� "%.*s" est� definit com a "%s" i no com a "%.*s"%s: no utilitzat perqu� "%.*s" no est� definit%s: no utilitzat perqu� "%s" �s definit"##" no pot apareixer en o al final d'una expansi� de macro"#" no �s seguit per un par�metre de macro"$" en un identificador o un nombre "?" sense el ":" seg�ent("%s" �s un element alternatiu per a  "%s" en C++)(aix� es reportar� solament una vegada per cada fitxer d'entrada)els comentaris d'estil C++ no s�n permesos en ISO C90l'aritm�tica de CPP ha de ser almenys tan precisa com un int de l'objectiuel half-integer de CPP �s m�s estret que el car�cter de CPPCPP no pot manejar constants de car�cter amples m�s enll� de %lu bits en aquest ordinador, per� l'objectiu requereix %lu bitsISO C no permet macros variadic nomenatsISO C99 requereix espais en blanc despr�s del nom de macroM�ltiples gu�rdies d'inclusi� poden ser �tils per a:
! directori NULL en find_filees va usar \x sense d�gits hexadecimales a continuaci�_Pragma pren una cadena literal entre par�ntesis__VA_ARGS__ solament pot apar�ixer en l'expansi� d'una macro variadic C99els macros variadic an�nims es van introduir en C99afirmaci� sense predicatintent d'usar "%s" enverinatbarra invertida i fi de l�nia separats per un espaibarra invertida i nova l�nia al final del fitxerno es pot trobar la font %sel car�cter 0x%lx no �s en el joc de car�cters de base
! el car�cter 0x%lx no �s mono octet en el joc de car�cters d'execuci�operador coma en operant de #ificonv no dona suport a la conversi� de %s a %sconvertint UCN al joc de car�cters d'execuci�convertint UCN al joc font de car�ctersconvertint una seq��ncia d'escapa al joc de car�cters d'execuci�convertint al joc de car�cters d'execuci�no es pot determinar la data i l'horacppchar_t ha de ser d'un tipus unsignedel fitxer actual �s m�s vell que %swhilst recursiu detectat en expandint la macro "%s"divisi� per zero en #ifpar�metre de macro "%s" duplicatl'incrustaci� d'una directiva entre arguments de macro no �s portableconstant de car�ter buidanom de fitxer buit en #%selements superflus al final de la directiva #%sfallada convertint %s a %sconstant de coma flotant en l'expressi� del preprocessadorla funci� de macro "%s" s'ha d'usar amb arguments en C tradicionalseq��ncia d'escapa hexadecimal fora de rangiconv_openles constants imagin�ries s�n una extensi� d'el GCCnombre imaginari en l'expressi� del preprocessadoroperador "%u" impossibleel nom de car�cter universal %.*s �s incompletla constant entera �s tan gran que �s unsignedla constant entera �s massa gran pel seu tipusdesbordament d'enter en l'expressi� del preprocessadordirectiva #pragma de GCC enverinada inv�lidamacro interna "%s" inv�lidaindicador "%s" inv�lid en la directiva de l�niadirectiva de preprocessament #%s inv�lidacadena literal inv�lida, s'ignora el "\" finalsufix "%.*s" inv�lid en la constant de coma flotantsufix "%.*s" inv�lid en constant enteranombre de l�nia fora de rangno s'usa la macro "%s"la macro "%s" va rebre %u arguments, per� en va prendre solament %ula macro "%s" requereix %u arguments, per� nom�s %u passatsl'argument de macro "%s" hauria de ser convertit en cadena en C traditionalels noms de macro han de ser identificadorsfalta "(" abans del predicat"(" faltant en l'expressi�")" faltant despr�s de "defined"")" faltant en l'expressi�falta ")" per a completar la respostafalta el car�cter de terminaci� >espais en blanc faltant despr�s del nom de macroconstant de car�cter amb m�ltiples car�cterscomentari en m�ltiples l�niescap implementaci� de iconv, no es pot convertir de %s a %sno hi ha ruta d'inclusi� en la qual cercar %sno es va donar un nom de macro en la directiva #%sseq��ncia d'escapa que no �s est�ndard ISO, "\%c"car�ter(es) nul(s) ignoratscar�cter(es) nul(s) preservats en la literalseq��ncia d'escapa octal fora de rangun o m�s fitxers PCH varen ser trobats, per� varen ser inv�lidsl'operador "defined" requereix un identificadorenverinant la macro existent "%s"el predicat ha de ser un identificadorel predicat de la resposta est� buitl'aritm�tica del preprocesador t� una precisi� m�xima de %lu bits; l'objectiu requereix %lu bitsdesant "%s" com a pragma i espai de noms de pragmastdoutla directiva d'estil de l�nia �s una extenci� del GCCes suggereix ocultar #%s del C tradicional amb el # indentates suggereix no usar #elif en C tradicionalerror sint�ctic en la llista de par�metre de macroel char de l'objectiu t� menys de 8 bits d'ampliariael int de l'objectiu �s m�s estret qu'el char de l'objectiuel wchar_t de l'objectiu �s m�s estret qu'el char de l'objectiuel condicional va comen�ar aqu�l'operant esquera de "%s" canvia el signe quan �s promogutel significat de "\%c" �s diferent en C tradicionalel significat de "\a" �s diferent en C tradicionalel significat de "\x" �s diferent en C tradicionall'operant dreta de "%s" canvia el signe quan �s promogutaquesta �s la ubicaci� de la definici� pr�viaaquest �s de "defined" podria no ser portableC tradicional ignora #%s amb el # indentatel C tradicional rebutja el sufix "%.*s"C tradicional rebutja l'operador unari m�strigraph ??%c convertit a %cs'ignora el trigraph ??%c, usi -trigraphs per permetre-hoesborrant la definici� de "%s"el nom de car�cter universal  %.*s no �s v�lid a l'inici d'un identificadorel nom de car�cter universal  %.*s no �s v�lid en un identificadorels noms de car�cter universals nom�s s�n v�lids en C++ i C99Element %s impronunciable#%s sense acabarllista d'arguments sense acabar a l'invocar la macro "%s"comentari sense acabarusi -Winvalid-pch per a m�s informaci��s d'una constant de coma flotant hexadecimal C99�s d'una constant entera long long C99mentre llegint cap�alera precompiladamentre escrivint cap�alera precompilada
\ No newline at end of file
--- 11,19 ----
  Language-Team: Catalan <ca@dodds.net>
  Language: ca
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
! "%s" desprès de # no és un enter positiu"%s" desprès de #line no és un enter positiuno es pot usar "%s" com un nom de macro perquè és un operador en C++"%s" no és un nom de fitxer vàlid"%s" reafirmat"%s" re-definit"/*" dintre d'un comentari#%s espera "NOM_DE_FITXER" o <NOM_DE_FITXER>#%s és una extenció del GCC#else després de #else#else sense #if#endif sense #if#include_next en el fitxer font primarija s'ha desat #pragma %s %sja s'ha desat #pragma %s#pragma una vegada en el fitxer principal#pragma system_header ignorat fora del fitxer d'inclusió%.*s no és un caràcter universal vàlid%s en una directiva de preprocessament%s és un dispositiu de blocs%s és més curt qu'esperat%s és massa gran%s: %s%s: no utilitzat perquè "%.*s" està definit com a "%s" i no com a "%.*s"%s: no utilitzat perquè "%.*s" no està definit%s: no utilitzat perquè "%s" és definit"##" no pot apareixer en o al final d'una expansió de macro"#" no és seguit per un paràmetre de macro"$" en un identificador o un nombre "?" sense el ":" següent("%s" és un element alternatiu per a  "%s" en C++)(això es reportarà solament una vegada per cada fitxer d'entrada)els comentaris d'estil C++ no són permesos en ISO C90l'aritmètica de CPP ha de ser almenys tan precisa com un int de l'objectiuel half-integer de CPP és més estret que el caràcter de CPPCPP no pot manejar constants de caràcter amples més enllà de %lu bits en aquest ordinador, però l'objectiu requereix %lu bitsISO C no permet macros variadic nomenatsISO C99 requereix espais en blanc després del nom de macroMúltiples guàrdies d'inclusió poden ser útils per a:
! directori NULL en find_filees va usar \x sense dígits hexadecimales a continuació_Pragma pren una cadena literal entre parèntesis__VA_ARGS__ solament pot aparèixer en l'expansió d'una macro variadic C99els macros variadic anònims es van introduir en C99afirmació sense predicatintent d'usar "%s" enverinatbarra invertida i fi de línia separats per un espaibarra invertida i nova línia al final del fitxerno es pot trobar la font %sel caràcter 0x%lx no és en el joc de caràcters de base
! el caràcter 0x%lx no és mono octet en el joc de caràcters d'execucióoperador coma en operant de #ificonv no dona suport a la conversió de %s a %sconvertint UCN al joc de caràcters d'execucióconvertint UCN al joc font de caràctersconvertint una seqüència d'escapa al joc de caràcters d'execucióconvertint al joc de caràcters d'execucióno es pot determinar la data i l'horacppchar_t ha de ser d'un tipus unsignedel fitxer actual és més vell que %swhilst recursiu detectat en expandint la macro "%s"divisió per zero en #ifparàmetre de macro "%s" duplicatl'incrustació d'una directiva entre arguments de macro no és portableconstant de caràter buidanom de fitxer buit en #%selements superflus al final de la directiva #%sfallada convertint %s a %sconstant de coma flotant en l'expressió del preprocessadorla funció de macro "%s" s'ha d'usar amb arguments en C tradicionalseqüència d'escapa hexadecimal fora de rangiconv_openles constants imaginàries són una extensió d'el GCCnombre imaginari en l'expressió del preprocessadoroperador "%u" impossibleel nom de caràcter universal %.*s és incompletla constant entera és tan gran que és unsignedla constant entera és massa gran pel seu tipusdesbordament d'enter en l'expressió del preprocessadordirectiva #pragma de GCC enverinada invàlidamacro interna "%s" invàlidaindicador "%s" invàlid en la directiva de líniadirectiva de preprocessament #%s invàlidacadena literal invàlida, s'ignora el "\" finalsufix "%.*s" invàlid en la constant de coma flotantsufix "%.*s" invàlid en constant enteranombre de línia fora de rangno s'usa la macro "%s"la macro "%s" va rebre %u arguments, però en va prendre solament %ula macro "%s" requereix %u arguments, però només %u passatsl'argument de macro "%s" hauria de ser convertit en cadena en C traditionalels noms de macro han de ser identificadorsfalta "(" abans del predicat"(" faltant en l'expressió")" faltant després de "defined"")" faltant en l'expressiófalta ")" per a completar la respostafalta el caràcter de terminació >espais en blanc faltant després del nom de macroconstant de caràcter amb múltiples caràcterscomentari en múltiples líniescap implementació de iconv, no es pot convertir de %s a %sno hi ha ruta d'inclusió en la qual cercar %sno es va donar un nom de macro en la directiva #%sseqüència d'escapa que no és estàndard ISO, "\%c"caràter(es) nul(s) ignoratscaràcter(es) nul(s) preservats en la literalseqüència d'escapa octal fora de rangun o més fitxers PCH varen ser trobats, però varen ser invàlidsl'operador "defined" requereix un identificadorenverinant la macro existent "%s"el predicat ha de ser un identificadorel predicat de la resposta està buitl'aritmètica del preprocesador té una precisió màxima de %lu bits; l'objectiu requereix %lu bitsdesant "%s" com a pragma i espai de noms de pragmastdoutla directiva d'estil de línia és una extenció del GCCes suggereix ocultar #%s del C tradicional amb el # indentates suggereix no usar #elif en C tradicionalerror sintàctic en la llista de paràmetre de macroel char de l'objectiu té menys de 8 bits d'ampliariael int de l'objectiu és més estret qu'el char de l'objectiuel wchar_t de l'objectiu és més estret qu'el char de l'objectiuel condicional va començar aquíl'operant esquera de "%s" canvia el signe quan és promogutel significat de "\%c" és diferent en C tradicionalel significat de "\a" és diferent en C tradicionalel significat de "\x" és diferent en C tradicionall'operant dreta de "%s" canvia el signe quan és promogutaquesta és la ubicació de la definició prèviaaquest ùs de "defined" podria no ser portableC tradicional ignora #%s amb el # indentatel C tradicional rebutja el sufix "%.*s"C tradicional rebutja l'operador unari méstrigraph ??%c convertit a %cs'ignora el trigraph ??%c, usi -trigraphs per permetre-hoesborrant la definició de "%s"el nom de caràcter universal  %.*s no és vàlid a l'inici d'un identificadorel nom de caràcter universal  %.*s no és vàlid en un identificadorels noms de caràcter universals nomès són vàlids en C++ i C99Element %s impronunciable#%s sense acabarllista d'arguments sense acabar a l'invocar la macro "%s"comentari sense acabarusi -Winvalid-pch per a més informacióús d'una constant de coma flotant hexadecimal C99ús d'una constant entera long long C99mentre llegint capçalera precompiladamentre escrivint capçalera precompilada
\ No newline at end of file
diff -Nrcpad gcc-14.3.0/libcpp/po/el.gmo gcc-14.3.0-RC-20260619/libcpp/po/el.gmo
*** gcc-14.3.0/libcpp/po/el.gmo	Fri May 23 11:19:24 2025
--- gcc-14.3.0-RC-20260619/libcpp/po/el.gmo	Fri Jun 19 07:07:27 2026
***************
*** 1,11 ****
! ��Dl���� �}�DY\(c#else after #else%s%s: %smissing terminating %c characterProject-Id-Version: gcc 3.2
  Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/
  PO-Revision-Date: 2002-08-18 15:46+0100
  Last-Translator: Simos Xenitellis <simos@hellug.gr>
  Language-Team: Greek <nls@tux.hellug.gr>
  Language: el
  MIME-Version: 1.0
! Content-Type: text/plain; charset=iso-8859-7
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
! #else ���� ��� #else%s%s: %s���� ���������� ���������� ���������� %c
\ No newline at end of file
--- 1,11 ----
! ��Dl���� �x�?[^Je#else after #else%s%s: %smissing terminating %c characterProject-Id-Version: gcc 3.2
  Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/
  PO-Revision-Date: 2002-08-18 15:46+0100
  Last-Translator: Simos Xenitellis <simos@hellug.gr>
  Language-Team: Greek <nls@tux.hellug.gr>
  Language: el
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
! #else μετά από #else%s%s: %sέχει παραληφθεί τερματικός χαρακτήρας %c
\ No newline at end of file
diff -Nrcpad gcc-14.3.0/libcpp/po/eo.gmo gcc-14.3.0-RC-20260619/libcpp/po/eo.gmo
*** gcc-14.3.0/libcpp/po/eo.gmo	Fri May 23 11:19:24 2025
--- gcc-14.3.0-RC-20260619/libcpp/po/eo.gmo	Fri Jun 19 07:07:27 2026
*************** Last-Translator: Felipe Castro <fefcas@g
*** 13,19 ****
  Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>
  Language: eo
  MIME-Version: 1.0
! Content-Type: text/plain; charset=utf-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  X-Generator: Poedit 2.4.2
--- 13,19 ----
  Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>
  Language: eo
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  X-Generator: Poedit 2.4.2
diff -Nrcpad gcc-14.3.0/libcpp/po/id.gmo gcc-14.3.0-RC-20260619/libcpp/po/id.gmo
*** gcc-14.3.0/libcpp/po/id.gmo	Fri May 23 11:19:24 2025
--- gcc-14.3.0-RC-20260619/libcpp/po/id.gmo	Fri Jun 19 07:07:27 2026
***************
*** 1,9 ****
  �����L&	*0?[����$�!(J\n$�#� ��2'8`c����6�''($P-u5�(�.80g-�:�,g.+�0��+?$[,�<�D�/D0Z��%��(	 2S9n9� �/)3&]5�%�!�""%H.f��<�	"$8])y,�E� 
  71B't+��(�0
  *;+f�$�#�$�.2#a)�#�*�*�))8S��1�3�9"\|����  ( 'H "p � 5� )� $!'+!S!&m!"�!7�!)�!"7"W"Ss".�"8�"</#$l#D�#�#*�#-$86$(o$$�$$�$'�$+
! %6%3Q%2�%1�%1�%4&/Q&)�&-�&'�&-'/'/M'}'�'"�'C�'6(7B(z(�(�(�(.�(
)")&:)(a) �) �)��)+x+/�+`�+(5,^,o,,+�,�,6�,-,-<--M-{-�-!�-5�-/.<.?.^. ~.�.�.I�.*/5,/-b/4�/?�//050U0:k08�0/�0G12W1r�1.�11,2,^2/�2 �2.�243?@3L�3�3�30�3-4%F49l4&�40�4(�4&'56N58�5%�50�5%6!;61]6!�6(�6'�6+7!.7/P7�7�7C�788'78_80}8,�8L�8)(9
! R9<]9.�9*�9�9*:1;:-m:+�:�:(�:&	;'0;X;6v;+�;/�;%	<1/<2a<2�<A�<!	=+=;F=<�=7�=(�= ><>V>s>#�>�>�>�>!
! ?,?@A?E�?6�?(�?(@$B@+g@E�@6�@!A-2A`AYxA5�ABBFKB,�BO�BC2C8ICJ�C6�C)D(.D'WD+D�D7�D+�D**E*UE8�E*�E4�E3F&MF)tF�F=�F�FG-,GHZGA�G6�G&H&CHjH�H7�H�H�H2I3AI!uI!�Igc/j~K�ODr]&��_�x�i),!+.�%��?'<1���|Td�2B�F��;�Nyl�Xp"�s�zGqA�J�v=�Z>�#��Mf�R	:�{��E�(b��6u9o5S�7e�h-w�Cm
  0 }�[�
�����Q�W�UV@���H^a\8YkL*`Pt��n��$I�43"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" re-asserted"%s" redefined"/*" within comment#%s expects "FILENAME" or <FILENAME>#%s is a GCC extension#%s is a deprecated GCC extension#else after #else#else without #if#endif without #if#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma once in main file#pragma system_header ignored outside include file%.*s is not a valid universal character%s%s in preprocessing directive%s is a block device%s is shorter than expected%s is too large%s: %s%s: not used because `%.*s' defined as `%s' not `%.*s'%s: not used because `%.*s' is poisoned%s: not used because `%.*s' not defined%s: not used because `%s' is defined%s: not used because `__COUNTER__' is invalid'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' in identifier or number'?' without following ':'("%s" is an alternative token for "%s" in C++)(this will be reported only once per input file)C++ style comments are not allowed in ISO C90CPP arithmetic must be at least as precise as a target intCPP half-integer narrower than CPP characterCPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bitsISO C does not permit named variadic macrosISO C99 requires whitespace after the macro nameIn _cpp_valid_ucn but not a UCNMultiple include guards may be useful for:
  NULL directory in find_file\x used with no following hex digits_Pragma takes a parenthesized string literal__COUNTER__ expanded inside directive with -fdirectives-only__VA_ARGS__ can only appear in the expansion of a C99 variadic macro`%.*s' is not in NFC`%.*s' is not in NFKCanonymous variadic macros were introduced in C99assertion without predicateassertions are a GCC extensionassertions are a deprecated extensionattempt to use poisoned "%s"backslash and newline separated by spacebackslash-newline at end of filecannot find source file %scharacter 0x%lx is not in the basic source character set
  character 0x%lx is not unibyte in execution character setcomma operator in operand of #ifconversion from %s to %s not supported by iconvconverting UCN to execution character setconverting UCN to source character setconverting escape sequence to execution character setconverting to execution character setcould not determine date and timecould not determine file timestampcppchar_t must be an unsigned typecurrent file is older than %sdetected recursion whilst expanding macro "%s"division by zero in #ifduplicate macro parameter "%s"embedding a directive within macro arguments is not portableempty character constantempty filename in #%sextra tokens at end of #%s directivefailure to convert %s to %sfixed-point constants are a GCC extensionfloating constant in preprocessor expressionfunction-like macro "%s" must be used with arguments in traditional Chex escape sequence out of rangeiconv_openidentifier "%s" is a special operator name in C++imaginary constants are a GCC extensionimaginary number in preprocessor expressionimpossible operator '%u'incomplete universal character name %.*sinteger constant is so large that it is unsignedinteger constant is too large for its typeinteger overflow in preprocessor expressioninvalid #%s directiveinvalid #pragma GCC poison directiveinvalid #pragma pop_macro directiveinvalid #pragma push_macro directiveinvalid built-in macro "%s"invalid character '%c' in raw string delimiterinvalid flag "%s" in line directiveinvalid prefix "0b" for floating constantinvalid preprocessing directive #%sinvalid string literal, ignoring final '\'invalid suffix "%.*s" on floating constantinvalid suffix "%.*s" on integer constantinvalid suffix "%.*s" with hexadecimal floating constantline number out of rangemacro "%s" is not usedmacro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified in traditional Cmacro names must be identifiersmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' in expressionmissing ')' to complete answermissing terminating %c charactermissing terminating > charactermissing whitespace after the macro namemulti-character character constantmulti-line commentno iconv implementation, cannot convert from %s to %sno include path in which to search for %sno macro name given in #%s directivenon-ISO-standard escape sequence, '\%c'null character(s) ignorednull character(s) preserved in literaloctal escape sequence out of rangeone or more PCH files were found, but they were invalidoperator "defined" requires an identifierpoisoning existing macro "%s"predicate must be an identifierpredicate's answer is emptypreprocessor arithmetic has maximum precision of %lu bits; target requires %lu bitsraw string delimiter longer than 16 charactersregistering "%s" as both a pragma and a pragma namespaceregistering pragma "%s" with name expansion and no namespaceregistering pragma with NULL handlerregistering pragmas in namespace "%s" with mismatched name expansionstdoutstyle of line directive is a GCC extensionsuffix for double constant is a GCC extensionsuggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csyntax error in macro parameter listtarget char is less than 8 bits widetarget int is narrower than target chartarget wchar_t is narrower than target charthe conditional began herethe left operand of "%s" changes sign when promotedthe meaning of '\%c' is different in traditional Cthe meaning of '\a' is different in traditional Cthe meaning of '\x' is different in traditional Cthe right operand of "%s" changes sign when promotedthis is the location of the previous definitionthis use of "defined" may not be portabletraditional C ignores #%s with the # indentedtraditional C rejects the "%.*s" suffixtraditional C rejects the unary plus operatortrigraph ??%c converted to %ctrigraph ??%c ignored, use -trigraphs to enableunbalanced stack in %sundefining "%s"unexpected end of file after #lineuniversal character %.*s is not valid at the start of an identifieruniversal character %.*s is not valid in an identifieruniversal character names are only valid in C++ and C99unknown escape sequence: '\%c'unknown escape sequence: '\%s'unspellable token %sunterminated #%sunterminated argument list invoking macro "%s"unterminated commentunterminated raw stringuse -Winvalid-pch for more informationuse of C99 hexadecimal floating constantwhile reading precompiled headerwhile writing precompiled headerProject-Id-Version: cpplib 4.5-b20100204
--- 1,10 ----
  �����L&	*0?[����$�!(J\n$�#� ��2'8`c����6�''($P-u5�(�.80g-�:�,g.+�0��+?$[,�<�D�/D0Z��%��(	 2S9n9� �/)3&]5�%�!�""%H.f��<�	"$8])y,�E� 
  71B't+��(�0
  *;+f�$�#�$�.2#a)�#�*�*�))8S��1�3�9"\|����  ( 'H "p � 5� )� $!'+!S!&m!"�!7�!)�!"7"W"Ss".�"8�"</#$l#D�#�#*�#-$86$(o$$�$$�$'�$+
! %6%3Q%2�%1�%1�%4&/Q&)�&-�&'�&-'/'/M'}'�'"�'C�'6(7B(z(�(�(�(.�(
)")&:)(a) �) �)��)+s+/�+`�+(0,Y,j,z,+�,�,6�,-'-7--H-v-�-!�-5�-/.7.:.Y. y.�.�.I�.*�.5'/-]/4�/?�//000P0:f08�0/�0G
! 12R1r�1.�11'2,Y2/�2 �2.�243?;3L{3�3�30�3(4%A49g4&�40�4(�4&"56I58�5%�50�5%6!661X6!�6(�6'�6+�6!)7/K7{7�7C�7�78'28Z80x8,�8L�8)#9
! M9<X9.�9*�9�9*:16:-h:+�:�:(�:&;'+;S;6q;+�;/�;%<1*<2\<2�<A�<!=&=;A=<}=7�=(�=>7>Q>n>#�>�>�>�>!?'?@<?E}?6�?(�?#@$=@+b@E�@6�@!A--A[AYsA5�ABBFFB,�BO�B
! C2C8DCJ}C6�C)�C()D'RD+zD�D7�D+�D*%E*PE8{E*�E4�E3F&HF)oF�F=�F�FG-'GHUGA�G6�G&H&>HeH�H7�H�H�H2	I3<I!pI!�Igc/j~K�ODr]&��_�x�i),!+.�%��?'<1���|Td�2B�F��;�Nyl�Xp"�s�zGqA�J�v=�Z>�#��Mf�R	:�{��E�(b��6u9o5S�7e�h-w�Cm
  0 }�[�
�����Q�W�UV@���H^a\8YkL*`Pt��n��$I�43"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" re-asserted"%s" redefined"/*" within comment#%s expects "FILENAME" or <FILENAME>#%s is a GCC extension#%s is a deprecated GCC extension#else after #else#else without #if#endif without #if#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma once in main file#pragma system_header ignored outside include file%.*s is not a valid universal character%s%s in preprocessing directive%s is a block device%s is shorter than expected%s is too large%s: %s%s: not used because `%.*s' defined as `%s' not `%.*s'%s: not used because `%.*s' is poisoned%s: not used because `%.*s' not defined%s: not used because `%s' is defined%s: not used because `__COUNTER__' is invalid'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' in identifier or number'?' without following ':'("%s" is an alternative token for "%s" in C++)(this will be reported only once per input file)C++ style comments are not allowed in ISO C90CPP arithmetic must be at least as precise as a target intCPP half-integer narrower than CPP characterCPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bitsISO C does not permit named variadic macrosISO C99 requires whitespace after the macro nameIn _cpp_valid_ucn but not a UCNMultiple include guards may be useful for:
  NULL directory in find_file\x used with no following hex digits_Pragma takes a parenthesized string literal__COUNTER__ expanded inside directive with -fdirectives-only__VA_ARGS__ can only appear in the expansion of a C99 variadic macro`%.*s' is not in NFC`%.*s' is not in NFKCanonymous variadic macros were introduced in C99assertion without predicateassertions are a GCC extensionassertions are a deprecated extensionattempt to use poisoned "%s"backslash and newline separated by spacebackslash-newline at end of filecannot find source file %scharacter 0x%lx is not in the basic source character set
  character 0x%lx is not unibyte in execution character setcomma operator in operand of #ifconversion from %s to %s not supported by iconvconverting UCN to execution character setconverting UCN to source character setconverting escape sequence to execution character setconverting to execution character setcould not determine date and timecould not determine file timestampcppchar_t must be an unsigned typecurrent file is older than %sdetected recursion whilst expanding macro "%s"division by zero in #ifduplicate macro parameter "%s"embedding a directive within macro arguments is not portableempty character constantempty filename in #%sextra tokens at end of #%s directivefailure to convert %s to %sfixed-point constants are a GCC extensionfloating constant in preprocessor expressionfunction-like macro "%s" must be used with arguments in traditional Chex escape sequence out of rangeiconv_openidentifier "%s" is a special operator name in C++imaginary constants are a GCC extensionimaginary number in preprocessor expressionimpossible operator '%u'incomplete universal character name %.*sinteger constant is so large that it is unsignedinteger constant is too large for its typeinteger overflow in preprocessor expressioninvalid #%s directiveinvalid #pragma GCC poison directiveinvalid #pragma pop_macro directiveinvalid #pragma push_macro directiveinvalid built-in macro "%s"invalid character '%c' in raw string delimiterinvalid flag "%s" in line directiveinvalid prefix "0b" for floating constantinvalid preprocessing directive #%sinvalid string literal, ignoring final '\'invalid suffix "%.*s" on floating constantinvalid suffix "%.*s" on integer constantinvalid suffix "%.*s" with hexadecimal floating constantline number out of rangemacro "%s" is not usedmacro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified in traditional Cmacro names must be identifiersmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' in expressionmissing ')' to complete answermissing terminating %c charactermissing terminating > charactermissing whitespace after the macro namemulti-character character constantmulti-line commentno iconv implementation, cannot convert from %s to %sno include path in which to search for %sno macro name given in #%s directivenon-ISO-standard escape sequence, '\%c'null character(s) ignorednull character(s) preserved in literaloctal escape sequence out of rangeone or more PCH files were found, but they were invalidoperator "defined" requires an identifierpoisoning existing macro "%s"predicate must be an identifierpredicate's answer is emptypreprocessor arithmetic has maximum precision of %lu bits; target requires %lu bitsraw string delimiter longer than 16 charactersregistering "%s" as both a pragma and a pragma namespaceregistering pragma "%s" with name expansion and no namespaceregistering pragma with NULL handlerregistering pragmas in namespace "%s" with mismatched name expansionstdoutstyle of line directive is a GCC extensionsuffix for double constant is a GCC extensionsuggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csyntax error in macro parameter listtarget char is less than 8 bits widetarget int is narrower than target chartarget wchar_t is narrower than target charthe conditional began herethe left operand of "%s" changes sign when promotedthe meaning of '\%c' is different in traditional Cthe meaning of '\a' is different in traditional Cthe meaning of '\x' is different in traditional Cthe right operand of "%s" changes sign when promotedthis is the location of the previous definitionthis use of "defined" may not be portabletraditional C ignores #%s with the # indentedtraditional C rejects the "%.*s" suffixtraditional C rejects the unary plus operatortrigraph ??%c converted to %ctrigraph ??%c ignored, use -trigraphs to enableunbalanced stack in %sundefining "%s"unexpected end of file after #lineuniversal character %.*s is not valid at the start of an identifieruniversal character %.*s is not valid in an identifieruniversal character names are only valid in C++ and C99unknown escape sequence: '\%c'unknown escape sequence: '\%s'unspellable token %sunterminated #%sunterminated argument list invoking macro "%s"unterminated commentunterminated raw stringuse -Winvalid-pch for more informationuse of C99 hexadecimal floating constantwhile reading precompiled headerwhile writing precompiled headerProject-Id-Version: cpplib 4.5-b20100204
*************** Last-Translator: Arif E. Nugroho <arif_e
*** 13,19 ****
  Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>
  Language: id
  MIME-Version: 1.0
! Content-Type: text/plain; charset=ISO-8859-1
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  "%s" setelah # bukan sebuah integer positif"%s" setelah #line bukan sebuah integer positif"%s" tidak dapat digunakan sebagai sebuah nama makro karena ini adalah sebuah operator dalam C++"%s" bukan sebuah nama berkas yang valid"%s" re-asserted"%s" redefinisi"/*" di dalam komentar#%s diduga "NAMA BERKAS" atau <NAMA BERKAS>#%s adalah sebuah ekstensi GCC#%s adalah sebuah ekstensi GCC yang sudah ditinggalkan#else setelah #else#else tanpa #if#endif tanpa #if#include_next dalam berkas kode program utama#pragma %s %s telah terdaftar#pragma %s telah terdaftar#pragma sekali dalam berkas utama#pragma system_header diabaikan diluar berkas include%.*s bukan sebuah karakter universal yang valid%s%s dalam direktif preprosesing%s adalah sebuah perangkat blok%s lebih pendek dari yang diduga%s terlalu besar%s: %s%s: tidak digunakan karena `%.*s' didefinisikan sebagai `%s' bukan `%.*s'%s: tidak digunakan karena `%.*s' teracuni%s: tidak digunakan karena `%.*s' tidak didefinisikan%s: tidak digunakan karena `%s' didefinisikan%s: tidak digunakan karena `__COUNTER__' tidak valid'##' tidak dapat muncul baik diakhir dari sebuah ekspansi makro'#' tidak diikuti dengan sebuah parameter makro'$' dalam identifier atau angka'?' tanpa diikuti ':'("%s" adalah sebuah tanda alternatif untuk "%s" dalam C++)(ini hanya akan dilaporkan sekali setiap berkas masukan)komentar gaya C++ tidak diijinkan dalam ISO C90aritmetik CPP harus paling tidak sama tepatnya dengan sebuah target intCPP integer-setengah lebih kecil dari karakter CPPCPP di host ini tidak dapat menangani konstanta karakter lebar diatas %lu bits, tetapi target membutuhkan %lu bitsISO C tidak mengijinkan makro variadik bernamaISO C99 membutuhkan whitespace setelah nama makroDalam _cpp_valid_ucn tetapi bukan sebuah UCNMultiple include guards mungkin berguna untuk:
--- 14,20 ----
  Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>
  Language: id
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  "%s" setelah # bukan sebuah integer positif"%s" setelah #line bukan sebuah integer positif"%s" tidak dapat digunakan sebagai sebuah nama makro karena ini adalah sebuah operator dalam C++"%s" bukan sebuah nama berkas yang valid"%s" re-asserted"%s" redefinisi"/*" di dalam komentar#%s diduga "NAMA BERKAS" atau <NAMA BERKAS>#%s adalah sebuah ekstensi GCC#%s adalah sebuah ekstensi GCC yang sudah ditinggalkan#else setelah #else#else tanpa #if#endif tanpa #if#include_next dalam berkas kode program utama#pragma %s %s telah terdaftar#pragma %s telah terdaftar#pragma sekali dalam berkas utama#pragma system_header diabaikan diluar berkas include%.*s bukan sebuah karakter universal yang valid%s%s dalam direktif preprosesing%s adalah sebuah perangkat blok%s lebih pendek dari yang diduga%s terlalu besar%s: %s%s: tidak digunakan karena `%.*s' didefinisikan sebagai `%s' bukan `%.*s'%s: tidak digunakan karena `%.*s' teracuni%s: tidak digunakan karena `%.*s' tidak didefinisikan%s: tidak digunakan karena `%s' didefinisikan%s: tidak digunakan karena `__COUNTER__' tidak valid'##' tidak dapat muncul baik diakhir dari sebuah ekspansi makro'#' tidak diikuti dengan sebuah parameter makro'$' dalam identifier atau angka'?' tanpa diikuti ':'("%s" adalah sebuah tanda alternatif untuk "%s" dalam C++)(ini hanya akan dilaporkan sekali setiap berkas masukan)komentar gaya C++ tidak diijinkan dalam ISO C90aritmetik CPP harus paling tidak sama tepatnya dengan sebuah target intCPP integer-setengah lebih kecil dari karakter CPPCPP di host ini tidak dapat menangani konstanta karakter lebar diatas %lu bits, tetapi target membutuhkan %lu bitsISO C tidak mengijinkan makro variadik bernamaISO C99 membutuhkan whitespace setelah nama makroDalam _cpp_valid_ucn tetapi bukan sebuah UCNMultiple include guards mungkin berguna untuk:
diff -Nrcpad gcc-14.3.0/libcpp/po/zh_CN.gmo gcc-14.3.0-RC-20260619/libcpp/po/zh_CN.gmo
*** gcc-14.3.0/libcpp/po/zh_CN.gmo	Fri May 23 11:19:24 2025
--- gcc-14.3.0-RC-20260619/libcpp/po/zh_CN.gmo	Fri Jun 19 07:07:27 2026
*************** Last-Translator: Zhanhaoxiang Zhang <zzh
*** 11,17 ****
  Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>
  Language: zh_CN
  MIME-Version: 1.0
! Content-Type: text/plain; charset=utf-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  X-Generator: Poedit 3.4.2
--- 11,17 ----
  Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>
  Language: zh_CN
  MIME-Version: 1.0
! Content-Type: text/plain; charset=UTF-8
  Content-Transfer-Encoding: 8bit
  X-Bugs: Report translation errors to the Language-Team address.
  X-Generator: Poedit 3.4.2
diff -Nrcpad gcc-14.3.0/libffi/doc/libffi.info gcc-14.3.0-RC-20260619/libffi/doc/libffi.info
*** gcc-14.3.0/libffi/doc/libffi.info	Fri May 23 11:28:17 2025
--- gcc-14.3.0-RC-20260619/libffi/doc/libffi.info	Fri Jun 19 07:15:01 2026
***************
*** 1,9 ****
! This is libffi.info, produced by makeinfo version 6.5 from libffi.texi.
  
  This manual is for libffi, a portable foreign function interface
  library.
  
!    Copyright (C) 2008-2019, 2021 Anthony Green and Red Hat, Inc.
  
     Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files (the
--- 1,9 ----
! This is libffi.info, produced by makeinfo version 7.1 from libffi.texi.
  
  This manual is for libffi, a portable foreign function interface
  library.
  
!    Copyright © 2008-2019, 2021 Anthony Green and Red Hat, Inc.
  
     Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files (the
*************** libffi
*** 38,44 ****
  This manual is for libffi, a portable foreign function interface
  library.
  
!    Copyright (C) 2008-2019, 2021 Anthony Green and Red Hat, Inc.
  
     Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files (the
--- 38,44 ----
  This manual is for libffi, a portable foreign function interface
  library.
  
!    Copyright © 2008-2019, 2021 Anthony Green and Red Hat, Inc.
  
     Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files (the
*************** File: libffi.info,  Node: Introduction,
*** 75,103 ****
  
  Compilers for high level languages generate code that follow certain
  conventions.  These conventions are necessary, in part, for separate
! compilation to work.  One such convention is the "calling convention".
  The calling convention is a set of assumptions made by the compiler
  about where function arguments will be found on entry to a function.  A
  calling convention also specifies where the return value for a function
! is found.  The calling convention is also sometimes called the "ABI" or
! "Application Binary Interface".
  
     Some programs may not know at the time of compilation what arguments
  are to be passed to a function.  For instance, an interpreter may be
  told at run-time about the number and types of arguments used to call a
! given function.  'Libffi' can be used in such programs to provide a
  bridge from the interpreter program to compiled code.
  
!    The 'libffi' library provides a portable, high level programming
  interface to various calling conventions.  This allows a programmer to
  call any function specified by a call interface description at run time.
  
     FFI stands for Foreign Function Interface.  A foreign function
  interface is the popular name for the interface that allows code written
! in one language to call code written in another language.  The 'libffi'
  library really only provides the lowest, machine dependent layer of a
  fully featured foreign function interface.  A layer must exist above
! 'libffi' that handles type conversions for values passed between the two
  languages.
  
  
--- 75,103 ----
  
  Compilers for high level languages generate code that follow certain
  conventions.  These conventions are necessary, in part, for separate
! compilation to work.  One such convention is the “calling convention”.
  The calling convention is a set of assumptions made by the compiler
  about where function arguments will be found on entry to a function.  A
  calling convention also specifies where the return value for a function
! is found.  The calling convention is also sometimes called the “ABI” or
! “Application Binary Interface”.
  
     Some programs may not know at the time of compilation what arguments
  are to be passed to a function.  For instance, an interpreter may be
  told at run-time about the number and types of arguments used to call a
! given function.  ‘Libffi’ can be used in such programs to provide a
  bridge from the interpreter program to compiled code.
  
!    The ‘libffi’ library provides a portable, high level programming
  interface to various calling conventions.  This allows a programmer to
  call any function specified by a call interface description at run time.
  
     FFI stands for Foreign Function Interface.  A foreign function
  interface is the popular name for the interface that allows code written
! in one language to call code written in another language.  The ‘libffi’
  library really only provides the lowest, machine dependent layer of a
  fully featured foreign function interface.  A layer must exist above
! ‘libffi’ that handles type conversions for values passed between the two
  languages.
  
  
*************** File: libffi.info,  Node: The Basics,  N
*** 122,166 ****
  2.1 The Basics
  ==============
  
! 'Libffi' assumes that you have a pointer to the function you wish to
  call and that you know the number and types of arguments to pass it, as
  well as the return type of the function.
  
!    The first thing you must do is create an 'ffi_cif' object that
  matches the signature of the function you wish to call.  This is a
  separate step because it is common to make multiple calls using a single
! 'ffi_cif'.  The "cif" in 'ffi_cif' stands for Call InterFace.  To
! prepare a call interface object, use the function 'ffi_prep_cif'.
  
   -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI,
            unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES)
       This initializes CIF according to the given parameters.
  
!      ABI is the ABI to use; normally 'FFI_DEFAULT_ABI' is what you want.
       *note Multiple ABIs:: for more information.
  
       NARGS is the number of arguments that this function accepts.
  
!      RTYPE is a pointer to an 'ffi_type' structure that describes the
       return type of the function.  *Note Types::.
  
!      ARGTYPES is a vector of 'ffi_type' pointers.  ARGTYPES must have
       NARGS elements.  If NARGS is 0, this argument is ignored.
  
!      'ffi_prep_cif' returns a 'libffi' status code, of type
!      'ffi_status'.  This will be either 'FFI_OK' if everything worked
!      properly; 'FFI_BAD_TYPEDEF' if one of the 'ffi_type' objects is
!      incorrect; or 'FFI_BAD_ABI' if the ABI parameter is invalid.
  
     If the function being called is variadic (varargs) then
! 'ffi_prep_cif_var' must be used instead of 'ffi_prep_cif'.
  
   -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi ABI,
            unsigned int NFIXEDARGS, unsigned int NTOTALARGS, ffi_type
            *RTYPE, ffi_type **ARGTYPES)
       This initializes CIF according to the given parameters for a call
       to a variadic function.  In general its operation is the same as
!      for 'ffi_prep_cif' except that:
  
       NFIXEDARGS is the number of fixed arguments, prior to any variadic
       arguments.  It must be greater than zero.
--- 122,166 ----
  2.1 The Basics
  ==============
  
! ‘Libffi’ assumes that you have a pointer to the function you wish to
  call and that you know the number and types of arguments to pass it, as
  well as the return type of the function.
  
!    The first thing you must do is create an ‘ffi_cif’ object that
  matches the signature of the function you wish to call.  This is a
  separate step because it is common to make multiple calls using a single
! ‘ffi_cif’.  The “cif” in ‘ffi_cif’ stands for Call InterFace.  To
! prepare a call interface object, use the function ‘ffi_prep_cif’.
  
   -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI,
            unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES)
       This initializes CIF according to the given parameters.
  
!      ABI is the ABI to use; normally ‘FFI_DEFAULT_ABI’ is what you want.
       *note Multiple ABIs:: for more information.
  
       NARGS is the number of arguments that this function accepts.
  
!      RTYPE is a pointer to an ‘ffi_type’ structure that describes the
       return type of the function.  *Note Types::.
  
!      ARGTYPES is a vector of ‘ffi_type’ pointers.  ARGTYPES must have
       NARGS elements.  If NARGS is 0, this argument is ignored.
  
!      ‘ffi_prep_cif’ returns a ‘libffi’ status code, of type
!      ‘ffi_status’.  This will be either ‘FFI_OK’ if everything worked
!      properly; ‘FFI_BAD_TYPEDEF’ if one of the ‘ffi_type’ objects is
!      incorrect; or ‘FFI_BAD_ABI’ if the ABI parameter is invalid.
  
     If the function being called is variadic (varargs) then
! ‘ffi_prep_cif_var’ must be used instead of ‘ffi_prep_cif’.
  
   -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi ABI,
            unsigned int NFIXEDARGS, unsigned int NTOTALARGS, ffi_type
            *RTYPE, ffi_type **ARGTYPES)
       This initializes CIF according to the given parameters for a call
       to a variadic function.  In general its operation is the same as
!      for ‘ffi_prep_cif’ except that:
  
       NFIXEDARGS is the number of fixed arguments, prior to any variadic
       arguments.  It must be greater than zero.
*************** prepare a call interface object, use the
*** 168,216 ****
       NTOTALARGS the total number of arguments, including variadic and
       fixed arguments.  ARGTYPES must have this many elements.
  
!      'ffi_prep_cif_var' will return 'FFI_BAD_ARGTYPE' if any of the
!      variable argument types are 'ffi_type_float' (promote to
!      'ffi_type_double' first), or any integer type small than an int
       (promote to an int-sized type first).
  
       Note that, different cif's must be prepped for calls to the same
       function when different numbers of arguments are passed.
  
!      Also note that a call to 'ffi_prep_cif_var' with
       NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to
!      'ffi_prep_cif'.
  
!    Note that the resulting 'ffi_cif' holds pointers to all the
! 'ffi_type' objects that were used during initialization.  You must
  ensure that these type objects have a lifetime at least as long as that
! of the 'ffi_cif'.
  
!    To call a function using an initialized 'ffi_cif', use the 'ffi_call'
  function:
  
   -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void
            **AVALUES)
       This calls the function FN according to the description given in
!      CIF.  CIF must have already been prepared using 'ffi_prep_cif'.
  
       RVALUE is a pointer to a chunk of memory that will hold the result
       of the function call.  This must be large enough to hold the
       result, no smaller than the system register size (generally 32 or
       64 bits), and must be suitably aligned; it is the caller's
       responsibility to ensure this.  If CIF declares that the function
!      returns 'void' (using 'ffi_type_void'), then RVALUE is ignored.
  
!      In most situations, 'libffi' will handle promotion according to the
       ABI. However, for historical reasons, there is a special case with
       return values that must be handled by your code.  In particular,
!      for integral (not 'struct') types that are narrower than the system
!      register size, the return value will be widened by 'libffi'.
!      'libffi' provides a type, 'ffi_arg', that can be used as the return
       type.  For example, if the CIF was defined with a return type of
!      'char', 'libffi' will try to store a full 'ffi_arg' into the return
       value.
  
!      AVALUES is a vector of 'void *' pointers that point to the memory
       locations holding the argument values for a call.  If CIF declares
       that the function has no arguments (i.e., NARGS was 0), then
       AVALUES is ignored.  Note that argument values may be modified by
--- 168,216 ----
       NTOTALARGS the total number of arguments, including variadic and
       fixed arguments.  ARGTYPES must have this many elements.
  
!      ‘ffi_prep_cif_var’ will return ‘FFI_BAD_ARGTYPE’ if any of the
!      variable argument types are ‘ffi_type_float’ (promote to
!      ‘ffi_type_double’ first), or any integer type small than an int
       (promote to an int-sized type first).
  
       Note that, different cif's must be prepped for calls to the same
       function when different numbers of arguments are passed.
  
!      Also note that a call to ‘ffi_prep_cif_var’ with
       NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to
!      ‘ffi_prep_cif’.
  
!    Note that the resulting ‘ffi_cif’ holds pointers to all the
! ‘ffi_type’ objects that were used during initialization.  You must
  ensure that these type objects have a lifetime at least as long as that
! of the ‘ffi_cif’.
  
!    To call a function using an initialized ‘ffi_cif’, use the ‘ffi_call’
  function:
  
   -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void
            **AVALUES)
       This calls the function FN according to the description given in
!      CIF.  CIF must have already been prepared using ‘ffi_prep_cif’.
  
       RVALUE is a pointer to a chunk of memory that will hold the result
       of the function call.  This must be large enough to hold the
       result, no smaller than the system register size (generally 32 or
       64 bits), and must be suitably aligned; it is the caller's
       responsibility to ensure this.  If CIF declares that the function
!      returns ‘void’ (using ‘ffi_type_void’), then RVALUE is ignored.
  
!      In most situations, ‘libffi’ will handle promotion according to the
       ABI. However, for historical reasons, there is a special case with
       return values that must be handled by your code.  In particular,
!      for integral (not ‘struct’) types that are narrower than the system
!      register size, the return value will be widened by ‘libffi’.
!      ‘libffi’ provides a type, ‘ffi_arg’, that can be used as the return
       type.  For example, if the CIF was defined with a return type of
!      ‘char’, ‘libffi’ will try to store a full ‘ffi_arg’ into the return
       value.
  
!      AVALUES is a vector of ‘void *’ pointers that point to the memory
       locations holding the argument values for a call.  If CIF declares
       that the function has no arguments (i.e., NARGS was 0), then
       AVALUES is ignored.  Note that argument values may be modified by
*************** function:
*** 219,228 ****
  
       Note that while the return value must be register-sized, arguments
       should exactly match their declared type.  For example, if an
!      argument is a 'short', then the entry in AVALUES should point to an
!      object declared as 'short'; but if the return type is 'short', then
       RVALUE should point to an object declared as a larger type -
!      usually 'ffi_arg'.
  
  
  File: libffi.info,  Node: Simple Example,  Next: Types,  Prev: The Basics,  Up: Using libffi
--- 219,228 ----
  
       Note that while the return value must be register-sized, arguments
       should exactly match their declared type.  For example, if an
!      argument is a ‘short’, then the entry in AVALUES should point to an
!      object declared as ‘short’; but if the return type is ‘short’, then
       RVALUE should point to an object declared as a larger type -
!      usually ‘ffi_arg’.
  
  
  File: libffi.info,  Node: Simple Example,  Next: Types,  Prev: The Basics,  Up: Using libffi
*************** File: libffi.info,  Node: Simple Example
*** 230,236 ****
  2.2 Simple Example
  ==================
  
! Here is a trivial example that calls 'puts' a few times.
  
       #include <stdio.h>
       #include <ffi.h>
--- 230,236 ----
  2.2 Simple Example
  ==================
  
! Here is a trivial example that calls ‘puts’ a few times.
  
       #include <stdio.h>
       #include <ffi.h>
*************** File: libffi.info,  Node: Primitive Type
*** 287,377 ****
  2.3.1 Primitive Types
  ---------------------
  
! 'Libffi' provides a number of built-in type descriptors that can be used
  to describe argument and return types:
  
! 'ffi_type_void'
!      The type 'void'.  This cannot be used for argument types, only for
       return values.
  
! 'ffi_type_uint8'
       An unsigned, 8-bit integer type.
  
! 'ffi_type_sint8'
       A signed, 8-bit integer type.
  
! 'ffi_type_uint16'
       An unsigned, 16-bit integer type.
  
! 'ffi_type_sint16'
       A signed, 16-bit integer type.
  
! 'ffi_type_uint32'
       An unsigned, 32-bit integer type.
  
! 'ffi_type_sint32'
       A signed, 32-bit integer type.
  
! 'ffi_type_uint64'
       An unsigned, 64-bit integer type.
  
! 'ffi_type_sint64'
       A signed, 64-bit integer type.
  
! 'ffi_type_float'
!      The C 'float' type.
  
! 'ffi_type_double'
!      The C 'double' type.
  
! 'ffi_type_uchar'
!      The C 'unsigned char' type.
  
! 'ffi_type_schar'
!      The C 'signed char' type.  (Note that there is not an exact
!      equivalent to the C 'char' type in 'libffi'; ordinarily you should
!      either use 'ffi_type_schar' or 'ffi_type_uchar' depending on
!      whether 'char' is signed.)
  
! 'ffi_type_ushort'
!      The C 'unsigned short' type.
  
! 'ffi_type_sshort'
!      The C 'short' type.
  
! 'ffi_type_uint'
!      The C 'unsigned int' type.
  
! 'ffi_type_sint'
!      The C 'int' type.
  
! 'ffi_type_ulong'
!      The C 'unsigned long' type.
  
! 'ffi_type_slong'
!      The C 'long' type.
  
! 'ffi_type_longdouble'
!      On platforms that have a C 'long double' type, this is defined.  On
       other platforms, it is not.
  
! 'ffi_type_pointer'
!      A generic 'void *' pointer.  You should use this for all pointers,
       regardless of their real type.
  
! 'ffi_type_complex_float'
!      The C '_Complex float' type.
  
! 'ffi_type_complex_double'
!      The C '_Complex double' type.
  
! 'ffi_type_complex_longdouble'
!      The C '_Complex long double' type.  On platforms that have a C
!      'long double' type, this is defined.  On other platforms, it is
       not.
  
!    Each of these is of type 'ffi_type', so you must take the address
! when passing to 'ffi_prep_cif'.
  
  
  File: libffi.info,  Node: Structures,  Next: Size and Alignment,  Prev: Primitive Types,  Up: Types
--- 287,377 ----
  2.3.1 Primitive Types
  ---------------------
  
! ‘Libffi’ provides a number of built-in type descriptors that can be used
  to describe argument and return types:
  
! ‘ffi_type_void’
!      The type ‘void’.  This cannot be used for argument types, only for
       return values.
  
! ‘ffi_type_uint8’
       An unsigned, 8-bit integer type.
  
! ‘ffi_type_sint8’
       A signed, 8-bit integer type.
  
! ‘ffi_type_uint16’
       An unsigned, 16-bit integer type.
  
! ‘ffi_type_sint16’
       A signed, 16-bit integer type.
  
! ‘ffi_type_uint32’
       An unsigned, 32-bit integer type.
  
! ‘ffi_type_sint32’
       A signed, 32-bit integer type.
  
! ‘ffi_type_uint64’
       An unsigned, 64-bit integer type.
  
! ‘ffi_type_sint64’
       A signed, 64-bit integer type.
  
! ‘ffi_type_float’
!      The C ‘float’ type.
  
! ‘ffi_type_double’
!      The C ‘double’ type.
  
! ‘ffi_type_uchar’
!      The C ‘unsigned char’ type.
  
! ‘ffi_type_schar’
!      The C ‘signed char’ type.  (Note that there is not an exact
!      equivalent to the C ‘char’ type in ‘libffi’; ordinarily you should
!      either use ‘ffi_type_schar’ or ‘ffi_type_uchar’ depending on
!      whether ‘char’ is signed.)
  
! ‘ffi_type_ushort’
!      The C ‘unsigned short’ type.
  
! ‘ffi_type_sshort’
!      The C ‘short’ type.
  
! ‘ffi_type_uint’
!      The C ‘unsigned int’ type.
  
! ‘ffi_type_sint’
!      The C ‘int’ type.
  
! ‘ffi_type_ulong’
!      The C ‘unsigned long’ type.
  
! ‘ffi_type_slong’
!      The C ‘long’ type.
  
! ‘ffi_type_longdouble’
!      On platforms that have a C ‘long double’ type, this is defined.  On
       other platforms, it is not.
  
! ‘ffi_type_pointer’
!      A generic ‘void *’ pointer.  You should use this for all pointers,
       regardless of their real type.
  
! ‘ffi_type_complex_float’
!      The C ‘_Complex float’ type.
  
! ‘ffi_type_complex_double’
!      The C ‘_Complex double’ type.
  
! ‘ffi_type_complex_longdouble’
!      The C ‘_Complex long double’ type.  On platforms that have a C
!      ‘long double’ type, this is defined.  On other platforms, it is
       not.
  
!    Each of these is of type ‘ffi_type’, so you must take the address
! when passing to ‘ffi_prep_cif’.
  
  
  File: libffi.info,  Node: Structures,  Next: Size and Alignment,  Prev: Primitive Types,  Up: Types
*************** File: libffi.info,  Node: Structures,  N
*** 379,408 ****
  2.3.2 Structures
  ----------------
  
! 'libffi' is perfectly happy passing structures back and forth.  You must
! first describe the structure to 'libffi' by creating a new 'ffi_type'
  object for it.
  
   -- Data type: ffi_type
!      The 'ffi_type' has the following members:
!      'size_t size'
!           This is set by 'libffi'; you should initialize it to zero.
  
!      'unsigned short alignment'
!           This is set by 'libffi'; you should initialize it to zero.
  
!      'unsigned short type'
!           For a structure, this should be set to 'FFI_TYPE_STRUCT'.
  
!      'ffi_type **elements'
!           This is a 'NULL'-terminated array of pointers to 'ffi_type'
            objects.  There is one element per field of the struct.
  
!           Note that 'libffi' has no special support for bit-fields.  You
            must manage these manually.
  
!    The 'size' and 'alignment' fields will be filled in by 'ffi_prep_cif'
! or 'ffi_prep_cif_var', as needed.
  
  
  File: libffi.info,  Node: Size and Alignment,  Next: Arrays Unions Enums,  Prev: Structures,  Up: Types
--- 379,408 ----
  2.3.2 Structures
  ----------------
  
! ‘libffi’ is perfectly happy passing structures back and forth.  You must
! first describe the structure to ‘libffi’ by creating a new ‘ffi_type’
  object for it.
  
   -- Data type: ffi_type
!      The ‘ffi_type’ has the following members:
!      ‘size_t size’
!           This is set by ‘libffi’; you should initialize it to zero.
  
!      ‘unsigned short alignment’
!           This is set by ‘libffi’; you should initialize it to zero.
  
!      ‘unsigned short type’
!           For a structure, this should be set to ‘FFI_TYPE_STRUCT’.
  
!      ‘ffi_type **elements’
!           This is a ‘NULL’-terminated array of pointers to ‘ffi_type’
            objects.  There is one element per field of the struct.
  
!           Note that ‘libffi’ has no special support for bit-fields.  You
            must manage these manually.
  
!    The ‘size’ and ‘alignment’ fields will be filled in by ‘ffi_prep_cif’
! or ‘ffi_prep_cif_var’, as needed.
  
  
  File: libffi.info,  Node: Size and Alignment,  Next: Arrays Unions Enums,  Prev: Structures,  Up: Types
*************** File: libffi.info,  Node: Size and Align
*** 410,433 ****
  2.3.3 Size and Alignment
  ------------------------
  
! 'libffi' will set the 'size' and 'alignment' fields of an 'ffi_type'
  object for you.  It does so using its knowledge of the ABI.
  
     You might expect that you can simply read these fields for a type
! that has been laid out by 'libffi'.  However, there are some caveats.
  
!    * The size or alignment of some of the built-in types may vary
       depending on the chosen ABI.
  
!    * The size and alignment of a new structure type will not be set by
!      'libffi' until it has been passed to 'ffi_prep_cif' or
!      'ffi_get_struct_offsets'.
  
!    * A structure type cannot be shared across ABIs.  Instead each ABI
       needs its own copy of the structure type.
  
     So, before examining these fields, it is safest to pass the
! 'ffi_type' object to 'ffi_prep_cif' or 'ffi_get_struct_offsets' first.
  This function will do all the needed setup.
  
       ffi_type *desired_type;
--- 410,433 ----
  2.3.3 Size and Alignment
  ------------------------
  
! ‘libffi’ will set the ‘size’ and ‘alignment’ fields of an ‘ffi_type’
  object for you.  It does so using its knowledge of the ABI.
  
     You might expect that you can simply read these fields for a type
! that has been laid out by ‘libffi’.  However, there are some caveats.
  
!    • The size or alignment of some of the built-in types may vary
       depending on the chosen ABI.
  
!    • The size and alignment of a new structure type will not be set by
!      ‘libffi’ until it has been passed to ‘ffi_prep_cif’ or
!      ‘ffi_get_struct_offsets’.
  
!    • A structure type cannot be shared across ABIs.  Instead each ABI
       needs its own copy of the structure type.
  
     So, before examining these fields, it is safest to pass the
! ‘ffi_type’ object to ‘ffi_prep_cif’ or ‘ffi_get_struct_offsets’ first.
  This function will do all the needed setup.
  
       ffi_type *desired_type;
*************** This function will do all the needed set
*** 440,446 ****
           unsigned short alignment = desired_type->alignment;
         }
  
!    'libffi' also provides a way to get the offsets of the members of a
  structure.
  
   -- Function: ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type
--- 440,446 ----
           unsigned short alignment = desired_type->alignment;
         }
  
!    ‘libffi’ also provides a way to get the offsets of the members of a
  structure.
  
   -- Function: ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type
*************** structure.
*** 451,464 ****
  
       OFFSETS is an out parameter.  The caller is responsible for
       providing enough space for all the results to be written - one
!      element per element type in STRUCT_TYPE.  If OFFSETS is 'NULL',
       then the type will be laid out but not otherwise modified.  This
       can be useful for accessing the type's size or layout, as mentioned
       above.
  
!      This function returns 'FFI_OK' on success; 'FFI_BAD_ABI' if ABI is
!      invalid; or 'FFI_BAD_TYPEDEF' if STRUCT_TYPE is invalid in some
!      way.  Note that only 'FFI_STRUCT' types are valid here.
  
  
  File: libffi.info,  Node: Arrays Unions Enums,  Next: Type Example,  Prev: Size and Alignment,  Up: Types
--- 451,464 ----
  
       OFFSETS is an out parameter.  The caller is responsible for
       providing enough space for all the results to be written - one
!      element per element type in STRUCT_TYPE.  If OFFSETS is ‘NULL’,
       then the type will be laid out but not otherwise modified.  This
       can be useful for accessing the type's size or layout, as mentioned
       above.
  
!      This function returns ‘FFI_OK’ on success; ‘FFI_BAD_ABI’ if ABI is
!      invalid; or ‘FFI_BAD_TYPEDEF’ if STRUCT_TYPE is invalid in some
!      way.  Note that only ‘FFI_STRUCT’ types are valid here.
  
  
  File: libffi.info,  Node: Arrays Unions Enums,  Next: Type Example,  Prev: Size and Alignment,  Up: Types
*************** File: libffi.info,  Node: Arrays Unions
*** 469,479 ****
  2.3.4.1 Arrays
  ..............
  
! 'libffi' does not have direct support for arrays or unions.  However,
  they can be emulated using structures.
  
!    To emulate an array, simply create an 'ffi_type' using
! 'FFI_TYPE_STRUCT' with as many members as there are elements in the
  array.
  
       ffi_type array_type;
--- 469,479 ----
  2.3.4.1 Arrays
  ..............
  
! ‘libffi’ does not have direct support for arrays or unions.  However,
  they can be emulated using structures.
  
!    To emulate an array, simply create an ‘ffi_type’ using
! ‘FFI_TYPE_STRUCT’ with as many members as there are elements in the
  array.
  
       ffi_type array_type;
*************** array.
*** 491,506 ****
  
     Note that arrays cannot be passed or returned by value in C -
  structure types created like this should only be used to refer to
! members of real 'FFI_TYPE_STRUCT' objects.
  
     However, a phony array type like this will not cause any errors from
! 'libffi' if you use it as an argument or return type.  This may be
  confusing.
  
  2.3.4.2 Unions
  ..............
  
! A union can also be emulated using 'FFI_TYPE_STRUCT'.  In this case,
  however, you must make sure that the size and alignment match the real
  requirements of the union.
  
--- 491,506 ----
  
     Note that arrays cannot be passed or returned by value in C -
  structure types created like this should only be used to refer to
! members of real ‘FFI_TYPE_STRUCT’ objects.
  
     However, a phony array type like this will not cause any errors from
! ‘libffi’ if you use it as an argument or return type.  This may be
  confusing.
  
  2.3.4.2 Unions
  ..............
  
! A union can also be emulated using ‘FFI_TYPE_STRUCT’.  In this case,
  however, you must make sure that the size and alignment match the real
  requirements of the union.
  
*************** requirements of the union.
*** 508,514 ****
  out.  Then, give the new structure type a single element; the size of
  the largest element; and the largest alignment seen as well.
  
!    This example uses the 'ffi_prep_cif' trick to ensure that each
  element type is laid out.
  
       ffi_abi desired_abi;
--- 508,514 ----
  out.  Then, give the new structure type a single element; the size of
  the largest element; and the largest alignment seen as well.
  
!    This example uses the ‘ffi_prep_cif’ trick to ensure that each
  element type is laid out.
  
       ffi_abi desired_abi;
*************** element type is laid out.
*** 542,552 ****
  2.3.4.3 Enumerations
  ....................
  
! 'libffi' does not have any special support for C 'enum's.  Although any
! given 'enum' is implemented using a specific underlying integral type,
! exactly which type will be used cannot be determined by 'libffi' - it
  may depend on the values in the enumeration or on compiler flags such as
! '-fshort-enums'.  *Note (gcc)Structures unions enumerations and
  bit-fields implementation::, for more information about how GCC handles
  enumerations.
  
--- 542,552 ----
  2.3.4.3 Enumerations
  ....................
  
! ‘libffi’ does not have any special support for C ‘enum’s.  Although any
! given ‘enum’ is implemented using a specific underlying integral type,
! exactly which type will be used cannot be determined by ‘libffi’ - it
  may depend on the values in the enumeration or on compiler flags such as
! ‘-fshort-enums’.  *Note (gcc)Structures unions enumerations and
  bit-fields implementation::, for more information about how GCC handles
  enumerations.
  
*************** File: libffi.info,  Node: Type Example,
*** 556,563 ****
  2.3.5 Type Example
  ------------------
  
! The following example initializes a 'ffi_type' object representing the
! 'tm' struct from Linux's 'time.h'.
  
     Here is how the struct is defined:
  
--- 556,563 ----
  2.3.5 Type Example
  ------------------
  
! The following example initializes a ‘ffi_type’ object representing the
! ‘tm’ struct from Linux's ‘time.h’.
  
     Here is how the struct is defined:
  
*************** The following example initializes a 'ffi
*** 576,582 ****
           __const char *__tm_zone__;
       };
  
!    Here is the corresponding code to describe this struct to 'libffi':
  
           {
             ffi_type tm_type;
--- 576,582 ----
           __const char *__tm_zone__;
       };
  
!    Here is the corresponding code to describe this struct to ‘libffi’:
  
           {
             ffi_type tm_type;
*************** File: libffi.info,  Node: Complex,  Next
*** 604,641 ****
  2.3.6 Complex Types
  -------------------
  
! 'libffi' supports the complex types defined by the C99 standard
! ('_Complex float', '_Complex double' and '_Complex long double' with the
! built-in type descriptors 'ffi_type_complex_float',
! 'ffi_type_complex_double' and 'ffi_type_complex_longdouble'.
  
!    Custom complex types like '_Complex int' can also be used.  An
! 'ffi_type' object has to be defined to describe the complex type to
! 'libffi'.
  
   -- Data type: ffi_type
!      'size_t size'
            This must be manually set to the size of the complex type.
  
!      'unsigned short alignment'
            This must be manually set to the alignment of the complex
            type.
  
!      'unsigned short type'
!           For a complex type, this must be set to 'FFI_TYPE_COMPLEX'.
  
!      'ffi_type **elements'
  
!           This is a 'NULL'-terminated array of pointers to 'ffi_type'
!           objects.  The first element is set to the 'ffi_type' of the
            complex's base type.  The second element must be set to
!           'NULL'.
  
     The section *note Complex Type Example:: shows a way to determine the
! 'size' and 'alignment' members in a platform independent way.
  
!    For platforms that have no complex support in 'libffi' yet, the
! functions 'ffi_prep_cif' and 'ffi_prep_args' abort the program if they
  encounter a complex type.
  
  
--- 604,641 ----
  2.3.6 Complex Types
  -------------------
  
! ‘libffi’ supports the complex types defined by the C99 standard
! (‘_Complex float’, ‘_Complex double’ and ‘_Complex long double’ with the
! built-in type descriptors ‘ffi_type_complex_float’,
! ‘ffi_type_complex_double’ and ‘ffi_type_complex_longdouble’.
  
!    Custom complex types like ‘_Complex int’ can also be used.  An
! ‘ffi_type’ object has to be defined to describe the complex type to
! ‘libffi’.
  
   -- Data type: ffi_type
!      ‘size_t size’
            This must be manually set to the size of the complex type.
  
!      ‘unsigned short alignment’
            This must be manually set to the alignment of the complex
            type.
  
!      ‘unsigned short type’
!           For a complex type, this must be set to ‘FFI_TYPE_COMPLEX’.
  
!      ‘ffi_type **elements’
  
!           This is a ‘NULL’-terminated array of pointers to ‘ffi_type’
!           objects.  The first element is set to the ‘ffi_type’ of the
            complex's base type.  The second element must be set to
!           ‘NULL’.
  
     The section *note Complex Type Example:: shows a way to determine the
! ‘size’ and ‘alignment’ members in a platform independent way.
  
!    For platforms that have no complex support in ‘libffi’ yet, the
! functions ‘ffi_prep_cif’ and ‘ffi_prep_args’ abort the program if they
  encounter a complex type.
  
  
*************** File: libffi.info,  Node: Multiple ABIs,
*** 732,740 ****
  =================
  
  A given platform may provide multiple different ABIs at once.  For
! instance, the x86 platform has both 'stdcall' and 'fastcall' functions.
  
!    'libffi' provides some support for this.  However, this is
  necessarily platform-specific.
  
  
--- 732,740 ----
  =================
  
  A given platform may provide multiple different ABIs at once.  For
! instance, the x86 platform has both ‘stdcall’ and ‘fastcall’ functions.
  
!    ‘libffi’ provides some support for this.  However, this is
  necessarily platform-specific.
  
  
*************** File: libffi.info,  Node: The Closure AP
*** 743,755 ****
  2.5 The Closure API
  ===================
  
! 'libffi' also provides a way to write a generic function - a function
  that can accept and decode any combination of arguments.  This can be
  useful when writing an interpreter, or to provide wrappers for arbitrary
  functions.
  
!    This facility is called the "closure API". Closures are not supported
! on all platforms; you can check the 'FFI_CLOSURES' define to determine
  whether they are supported on the current platform.
  
     Because closures work by assembling a tiny function at runtime, they
--- 743,755 ----
  2.5 The Closure API
  ===================
  
! ‘libffi’ also provides a way to write a generic function - a function
  that can accept and decode any combination of arguments.  This can be
  useful when writing an interpreter, or to provide wrappers for arbitrary
  functions.
  
!    This facility is called the “closure API”. Closures are not supported
! on all platforms; you can check the ‘FFI_CLOSURES’ define to determine
  whether they are supported on the current platform.
  
     Because closures work by assembling a tiny function at runtime, they
*************** Memory management for closures is handle
*** 761,788 ****
       pointer to the writable address, and sets *CODE to the
       corresponding executable address.
  
!      SIZE should be sufficient to hold a 'ffi_closure' object.
  
   -- Function: void ffi_closure_free (void *WRITABLE)
!      Free memory allocated using 'ffi_closure_alloc'.  The argument is
       the writable address that was returned.
  
     Once you have allocated the memory for a closure, you must construct
! a 'ffi_cif' describing the function call.  Finally you can prepare the
  closure function:
  
   -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE,
            ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void
            **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC)
       Prepare a closure function.  The arguments to
!      'ffi_prep_closure_loc' are:
  
       CLOSURE
!           The address of a 'ffi_closure' object; this is the writable
!           address returned by 'ffi_closure_alloc'.
  
       CIF
!           The 'ffi_cif' describing the function parameters.  Note that
            this object, and the types to which it refers, must be kept
            alive until the closure itself is freed.
  
--- 761,788 ----
       pointer to the writable address, and sets *CODE to the
       corresponding executable address.
  
!      SIZE should be sufficient to hold a ‘ffi_closure’ object.
  
   -- Function: void ffi_closure_free (void *WRITABLE)
!      Free memory allocated using ‘ffi_closure_alloc’.  The argument is
       the writable address that was returned.
  
     Once you have allocated the memory for a closure, you must construct
! a ‘ffi_cif’ describing the function call.  Finally you can prepare the
  closure function:
  
   -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE,
            ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void
            **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC)
       Prepare a closure function.  The arguments to
!      ‘ffi_prep_closure_loc’ are:
  
       CLOSURE
!           The address of a ‘ffi_closure’ object; this is the writable
!           address returned by ‘ffi_closure_alloc’.
  
       CIF
!           The ‘ffi_cif’ describing the function parameters.  Note that
            this object, and the types to which it refers, must be kept
            alive until the closure itself is freed.
  
*************** closure function:
*** 791,819 ****
            closure function.
  
       CODELOC
!           The executable address returned by 'ffi_closure_alloc'.
  
       FUN
            The function which will be called when the closure is invoked.
            It is called with the arguments:
  
            CIF
!                The 'ffi_cif' passed to 'ffi_prep_closure_loc'.
  
            RET
                 A pointer to the memory used for the function's return
                 value.
  
!                If the function is declared as returning 'void', then
                 this value is garbage and should not be used.
  
                 Otherwise, FUN must fill the object to which this points,
                 following the same special promotion behavior as
!                'ffi_call'.  That is, in most cases, RET points to an
                 object of exactly the size of the type specified when CIF
                 was constructed.  However, integral types narrower than
                 the system register size are widened.  In these cases
!                your program may assume that RET points to an 'ffi_arg'
                 object.
  
            ARGS
--- 791,819 ----
            closure function.
  
       CODELOC
!           The executable address returned by ‘ffi_closure_alloc’.
  
       FUN
            The function which will be called when the closure is invoked.
            It is called with the arguments:
  
            CIF
!                The ‘ffi_cif’ passed to ‘ffi_prep_closure_loc’.
  
            RET
                 A pointer to the memory used for the function's return
                 value.
  
!                If the function is declared as returning ‘void’, then
                 this value is garbage and should not be used.
  
                 Otherwise, FUN must fill the object to which this points,
                 following the same special promotion behavior as
!                ‘ffi_call’.  That is, in most cases, RET points to an
                 object of exactly the size of the type specified when CIF
                 was constructed.  However, integral types narrower than
                 the system register size are widened.  In these cases
!                your program may assume that RET points to an ‘ffi_arg’
                 object.
  
            ARGS
*************** closure function:
*** 822,836 ****
  
            USER_DATA
                 The same USER_DATA that was passed to
!                'ffi_prep_closure_loc'.
  
!      'ffi_prep_closure_loc' will return 'FFI_OK' if everything went ok,
!      and one of the other 'ffi_status' values on error.
  
!      After calling 'ffi_prep_closure_loc', you can cast CODELOC to the
       appropriate pointer-to-function type.
  
!    You may see old code referring to 'ffi_prep_closure'.  This function
  is deprecated, as it cannot handle the need for separate writable and
  executable addresses.
  
--- 822,836 ----
  
            USER_DATA
                 The same USER_DATA that was passed to
!                ‘ffi_prep_closure_loc’.
  
!      ‘ffi_prep_closure_loc’ will return ‘FFI_OK’ if everything went ok,
!      and one of the other ‘ffi_status’ values on error.
  
!      After calling ‘ffi_prep_closure_loc’, you can cast CODELOC to the
       appropriate pointer-to-function type.
  
!    You may see old code referring to ‘ffi_prep_closure’.  This function
  is deprecated, as it cannot handle the need for separate writable and
  executable addresses.
  
*************** File: libffi.info,  Node: Closure Exampl
*** 840,847 ****
  2.6 Closure Example
  ===================
  
! A trivial example that creates a new 'puts' by binding 'fputs' with
! 'stdout'.
  
       #include <stdio.h>
       #include <ffi.h>
--- 840,847 ----
  2.6 Closure Example
  ===================
  
! A trivial example that creates a new ‘puts’ by binding ‘fputs’ with
! ‘stdout’.
  
       #include <stdio.h>
       #include <ffi.h>
*************** File: libffi.info,  Node: Thread Safety,
*** 899,919 ****
  2.7 Thread Safety
  =================
  
! 'libffi' is not completely thread-safe.  However, many parts are, and if
  you follow some simple rules, you can use it safely in a multi-threaded
  program.
  
!    * 'ffi_prep_cif' may modify the 'ffi_type' objects passed to it.  It
       is best to ensure that only a single thread prepares a given
!      'ffi_cif' at a time.
  
!    * On some platforms, 'ffi_prep_cif' may modify the size and alignment
       of some types, depending on the chosen ABI. On these platforms, if
       you switch between ABIs, you must ensure that there is only one
!      call to 'ffi_prep_cif' at a time.
  
       Currently the only affected platform is PowerPC and the only
!      affected type is 'long double'.
  
  
  File: libffi.info,  Node: Memory Usage,  Next: Missing Features,  Prev: Using libffi,  Up: Top
--- 899,919 ----
  2.7 Thread Safety
  =================
  
! ‘libffi’ is not completely thread-safe.  However, many parts are, and if
  you follow some simple rules, you can use it safely in a multi-threaded
  program.
  
!    • ‘ffi_prep_cif’ may modify the ‘ffi_type’ objects passed to it.  It
       is best to ensure that only a single thread prepares a given
!      ‘ffi_cif’ at a time.
  
!    • On some platforms, ‘ffi_prep_cif’ may modify the size and alignment
       of some types, depending on the chosen ABI. On these platforms, if
       you switch between ABIs, you must ensure that there is only one
!      call to ‘ffi_prep_cif’ at a time.
  
       Currently the only affected platform is PowerPC and the only
!      affected type is ‘long double’.
  
  
  File: libffi.info,  Node: Memory Usage,  Next: Missing Features,  Prev: Using libffi,  Up: Top
*************** File: libffi.info,  Node: Memory Usage,
*** 921,956 ****
  3 Memory Usage
  **************
  
! Note that memory allocated by 'ffi_closure_alloc' and freed by
! 'ffi_closure_free' does not come from the same general pool of memory
! that 'malloc' and 'free' use.  To accomodate security settings, 'libffi'
  may aquire memory, for example, by mapping temporary files into multiple
  places in the address space (once to write out the closure, a second to
  execute it).  The search follows this list, using the first that works:
  
!    * A anonymous mapping (i.e.  not file-backed)
  
!    * 'memfd_create()', if the kernel supports it.
  
!    * A file created in the directory referenced by the environment
!      variable 'LIBFFI_TMPDIR'.
  
!    * Likewise for the environment variable 'TMPDIR'.
  
!    * A file created in '/tmp'.
  
!    * A file created in '/var/tmp'.
  
!    * A file created in '/dev/shm'.
  
!    * A file created in the user's home directory ('$HOME').
  
!    * A file created in any directory listed in '/etc/mtab'.
  
!    * A file created in any directory listed in '/proc/mounts'.
  
     If security settings prohibit using any of these for closures,
! 'ffi_closure_alloc' will fail.
  
  
  File: libffi.info,  Node: Missing Features,  Next: Index,  Prev: Memory Usage,  Up: Top
--- 921,956 ----
  3 Memory Usage
  **************
  
! Note that memory allocated by ‘ffi_closure_alloc’ and freed by
! ‘ffi_closure_free’ does not come from the same general pool of memory
! that ‘malloc’ and ‘free’ use.  To accomodate security settings, ‘libffi’
  may aquire memory, for example, by mapping temporary files into multiple
  places in the address space (once to write out the closure, a second to
  execute it).  The search follows this list, using the first that works:
  
!    • A anonymous mapping (i.e.  not file-backed)
  
!    • ‘memfd_create()’, if the kernel supports it.
  
!    • A file created in the directory referenced by the environment
!      variable ‘LIBFFI_TMPDIR’.
  
!    • Likewise for the environment variable ‘TMPDIR’.
  
!    • A file created in ‘/tmp’.
  
!    • A file created in ‘/var/tmp’.
  
!    • A file created in ‘/dev/shm’.
  
!    • A file created in the user's home directory (‘$HOME’).
  
!    • A file created in any directory listed in ‘/etc/mtab’.
  
!    • A file created in any directory listed in ‘/proc/mounts’.
  
     If security settings prohibit using any of these for closures,
! ‘ffi_closure_alloc’ will fail.
  
  
  File: libffi.info,  Node: Missing Features,  Next: Index,  Prev: Memory Usage,  Up: Top
*************** File: libffi.info,  Node: Missing Featur
*** 958,973 ****
  4 Missing Features
  ******************
  
! 'libffi' is missing a few features.  We welcome patches to add support
  for these.
  
!    * Variadic closures.
  
!    * There is no support for bit fields in structures.
  
!    * The "raw" API is undocumented.
  
!    * The Go API is undocumented.
  
  
  File: libffi.info,  Node: Index,  Prev: Missing Features,  Up: Top
--- 958,973 ----
  4 Missing Features
  ******************
  
! ‘libffi’ is missing a few features.  We welcome patches to add support
  for these.
  
!    • Variadic closures.
  
!    • There is no support for bit fields in structures.
  
!    • The "raw" API is undocumented.
  
!    • The Go API is undocumented.
  
  
  File: libffi.info,  Node: Index,  Prev: Missing Features,  Up: Top
*************** Index
*** 986,994 ****
  * closures:                              The Closure API.      (line 13)
  * FFI:                                   Introduction.         (line 31)
  * ffi_call:                              The Basics.           (line 72)
- * FFI_CLOSURES:                          The Closure API.      (line 13)
  * ffi_closure_alloc:                     The Closure API.      (line 19)
  * ffi_closure_free:                      The Closure API.      (line 26)
  * ffi_get_struct_offsets:                Size and Alignment.   (line 39)
  * ffi_prep_cif:                          The Basics.           (line 16)
  * ffi_prep_cif_var:                      The Basics.           (line 39)
--- 986,994 ----
  * closures:                              The Closure API.      (line 13)
  * FFI:                                   Introduction.         (line 31)
  * ffi_call:                              The Basics.           (line 72)
  * ffi_closure_alloc:                     The Closure API.      (line 19)
  * ffi_closure_free:                      The Closure API.      (line 26)
+ * FFI_CLOSURES:                          The Closure API.      (line 13)
  * ffi_get_struct_offsets:                Size and Alignment.   (line 39)
  * ffi_prep_cif:                          The Basics.           (line 16)
  * ffi_prep_cif_var:                      The Basics.           (line 39)
*************** Index
*** 1033,1057 ****
  
  
  Tag Table:
! Node: Top1394
! Node: Introduction2923
! Node: Using libffi4555
! Node: The Basics5084
! Node: Simple Example10191
! Node: Types11222
! Node: Primitive Types11733
! Node: Structures13854
! Node: Size and Alignment14893
! Node: Arrays Unions Enums17090
! Node: Type Example20019
! Node: Complex21310
! Node: Complex Type Example22728
! Node: Multiple ABIs25780
! Node: The Closure API26151
! Node: Closure Example29977
! Node: Thread Safety31609
! Node: Memory Usage32410
! Node: Missing Features33605
! Node: Index33970
  
  End Tag Table
--- 1033,1062 ----
  
  
  Tag Table:
! Node: Top1393
! Node: Introduction2921
! Node: Using libffi4581
! Node: The Basics5110
! Node: Simple Example10401
! Node: Types11436
! Node: Primitive Types11947
! Node: Structures14264
! Node: Size and Alignment15375
! Node: Arrays Unions Enums17646
! Node: Type Example20623
! Node: Complex21930
! Node: Complex Type Example23444
! Node: Multiple ABIs26496
! Node: The Closure API26879
! Node: Closure Example30793
! Node: Thread Safety32437
! Node: Memory Usage33270
! Node: Missing Features34545
! Node: Index34922
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/libgcc/ChangeLog gcc-14.3.0-RC-20260619/libgcc/ChangeLog
*** gcc-14.3.0/libgcc/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libgcc/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,13 ----
+ 2025-08-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-07-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 		    Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state):
+ 	If a signal was raised while there was an uncommitted lazy save,
+ 	commit the save as part of the unwind process.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libgcc/config/aarch64/linux-unwind.h gcc-14.3.0-RC-20260619/libgcc/config/aarch64/linux-unwind.h
*** gcc-14.3.0/libgcc/config/aarch64/linux-unwind.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/aarch64/linux-unwind.h	Fri Jun 19 06:51:06 2026
***************
*** 27,33 ****
  
  #include <signal.h>
  #include <sys/ucontext.h>
! 
  
  /* Since insns are always stored LE, on a BE system the opcodes will
     be loaded byte-reversed.  Therefore, define two sets of opcodes,
--- 27,33 ----
  
  #include <signal.h>
  #include <sys/ucontext.h>
! #include <stdint.h>
  
  /* Since insns are always stored LE, on a BE system the opcodes will
     be loaded byte-reversed.  Therefore, define two sets of opcodes,
***************
*** 43,48 ****
--- 43,64 ----
  
  #define MD_FALLBACK_FRAME_STATE_FOR aarch64_fallback_frame_state
  
+ #ifndef FPSIMD_MAGIC
+ #define FPSIMD_MAGIC 0x46508001
+ #endif
+ 
+ #ifndef TPIDR2_MAGIC
+ #define TPIDR2_MAGIC 0x54504902
+ #endif
+ 
+ #ifndef ZA_MAGIC
+ #define ZA_MAGIC 0x54366345
+ #endif
+ 
+ #ifndef EXTRA_MAGIC
+ #define EXTRA_MAGIC 0x45585401
+ #endif
+ 
  static _Unwind_Reason_Code
  aarch64_fallback_frame_state (struct _Unwind_Context *context,
  			      _Unwind_FrameState * fs)
*************** aarch64_fallback_frame_state (struct _Un
*** 58,63 ****
--- 74,94 ----
      ucontext_t uc;
    };
  
+   struct tpidr2_block
+   {
+     uint64_t za_save_buffer;
+     uint16_t num_za_save_slices;
+     uint8_t reserved[6];
+   };
+ 
+   struct za_block
+   {
+     struct _aarch64_ctx head;
+     uint16_t vl;
+     uint16_t reserved[3];
+     uint64_t data;
+   };
+ 
    struct rt_sigframe *rt_;
    _Unwind_Ptr new_cfa;
    unsigned *pc = context->ra;
*************** aarch64_fallback_frame_state (struct _Un
*** 103,113 ****
--- 134,148 ----
       field can be used to skip over unrecognized context extensions.
       The end of the context sequence is marked by a context with magic
       0 or size 0.  */
+   struct tpidr2_block *tpidr2 = 0;
+   struct za_block *za_ctx = 0;
+ 
    for (extension_marker = (struct _aarch64_ctx *) &sc->__reserved;
         extension_marker->magic;
         extension_marker = (struct _aarch64_ctx *)
         ((unsigned char *) extension_marker + extension_marker->size))
      {
+     restart:
        if (extension_marker->magic == FPSIMD_MAGIC)
  	{
  	  struct fpsimd_context *ctx =
*************** aarch64_fallback_frame_state (struct _Un
*** 139,150 ****
--- 174,256 ----
  	      fs->regs.reg[AARCH64_DWARF_V0 + i].loc.offset = offset;
  	    }
  	}
+       else if (extension_marker->magic == TPIDR2_MAGIC)
+ 	{
+ 	  /* A TPIDR2 context.
+ 
+ 	     All the casting is to support big-endian ILP32.  We could read
+ 	     directly into TPIDR2 otherwise.  */
+ 	  struct { struct _aarch64_ctx h; uint64_t tpidr2; } *ctx
+ 		  = (void *)extension_marker;
+ #if defined (__ILP32__)
+ 	  tpidr2 = (struct tpidr2_block *) (uintptr_t) ctx->tpidr2;
+ #else
+ 	  tpidr2 = (struct tpidr2_block *) ctx->tpidr2;
+ #endif
+ 	}
+       else if (extension_marker->magic == ZA_MAGIC)
+ 	/* A ZA context.  We interpret this later.  */
+ 	za_ctx = (void *)extension_marker;
+       else if (extension_marker->magic == EXTRA_MAGIC)
+ 	{
+ 	  /* Extra context.  The ABI guarantees that the next _aarch64_ctx
+ 	     in the current list will be the zero terminator, so we can simply
+ 	     switch to the new list and continue from there.  The new list is
+ 	     also zero-terminated.
+ 
+ 	     As above, the casting is to support big-endian ILP32.  */
+ 	  struct { struct _aarch64_ctx h; uint64_t next; } *ctx
+ 		  = (void *)extension_marker;
+ #if defined (__ILP32__)
+ 	  extension_marker = (struct _aarch64_ctx *) (uintptr_t) ctx->next;
+ #else
+ 	  extension_marker = (struct _aarch64_ctx *) ctx->next;
+ #endif
+ 	  goto restart;
+ 	}
        else
  	{
  	  /* There is context provided that we do not recognize!  */
  	}
      }
  
+   /* Signal handlers are entered with ZA in the off state (TPIDR2_ELO==0 and
+      PSTATE.ZA==0).  The normal process when transitioning from ZA being
+      dormant to ZA being off is to commit the lazy save; see the AAPCS64
+      for details.  However, this is not done when entering a signal handler.
+      Instead, linux saves the old contents of ZA and TPIDR2_EL0 to the
+      sigcontext without interpreting them further.
+ 
+      Therefore, if a signal handler throws an exception to code outside the
+      signal handler, the unwinder must commit the lazy save after the fact.
+      Committing a lazy save means:
+ 
+      (1) Storing the contents of ZA into the buffer provided by TPIDR2_EL0.
+      (2) Setting TPIDR2_EL0 to zero.
+      (3) Turning ZA off.
+ 
+      (2) and (3) have already been done by the call to __libgcc_arm_za_disable.
+      (1) involves copying data from the ZA sigcontext entry to the
+      corresponding lazy save buffer.  */
+   if (tpidr2 && za_ctx && tpidr2->za_save_buffer)
+     {
+       /* There is a 16-bit vector length (measured in bytes) at ZA_CTX + 8.
+ 	 The data itself starts at ZA_CTX + 16.
+ 	 As above, the casting is to support big-endian ILP32.  */
+       uint16_t vl = za_ctx->vl;
+ #if defined (__ILP32__)
+       void *save_buffer = (void *) (uintptr_t) tpidr2->za_save_buffer;
+       const void *za_buffer = (void *) (uintptr_t) &za_ctx->data;
+ #else
+       void *save_buffer = (void *) tpidr2->za_save_buffer;
+       const void *za_buffer = (void *) &za_ctx->data;
+ #endif
+       uint64_t num_slices = tpidr2->num_za_save_slices;
+       if (num_slices > vl)
+ 	num_slices = vl;
+       memcpy (save_buffer, za_buffer, num_slices * vl);
+     }
+ 
    fs->regs.how[31] = REG_SAVED_OFFSET;
    fs->regs.reg[31].loc.offset = (_Unwind_Ptr) & (sc->sp) - new_cfa;
  
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/ChangeLog gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/ChangeLog
*** gcc-14.3.0/libgcc/config/avr/libf7/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,113 ----
+ 2026-06-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2026-06-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125752
+ 	* libf7-asm.sx (ufx64_to_d, d_to_fx64): New DEFUNs.
+ 	(__fractdadf, __fractudadf, __fracttadf, __fractutadf)
+ 	(__fractdqdf, __fractudqdf): New _DEFUNs.
+ 	* libf7-common.mk (F7_ASM_PARTS) Add: fx2D, D2fx,
+ 	dq2D, udq2D, da2D, uda2D, ta2D uta2D.
+ 	(F7F): Add d_to_fx64, ufx64_to_d, sfx64_to_d.
+ 	* libf7.c (d_to_ufx, d_to_sfx): New protos.
+ 	(__fractdfda, __fractdfuda, __fractdfta, __fractdfuta)
+ 	(__fractdfdq, __fractdfudq): New modules.
+ 	* t-libf7 (LIBF7_DF_CONV): Add fractdfda,
+ 	fractdfta, fractdfdq, fractdfuda, fractdfuta, fractdfudq.
+ 	* f7-renames.h: Rebuild.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122222
+ 	* libf7-asm.sx (D_floatsidf, D_floatunsidf): New modules.
+ 	* libf7-common.mk (F7_ASM_PARTS): Add D_floatsidf, D_floatunsidf.
+ 	(F7F, g_dx): Remove floatunsidf, floatsidf.
+ 	* libf7.c (f7_set_s32): Don't alias to f7_floatsidf.
+ 	(f7_set_u32): Don't alias to f7_floatunsidf.
+ 	* f7-renames.h: Rebuild
+ 	* f7-wraps.h: Rebuild.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122220
+ 	* libf7-asm.sx (to_integer): Return 0x80... on negative overflow.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122210
+ 	* libf7-common.mk (F7_ASM_PARTS): Add D2<fx> modules.
+ 	* libf7-asm.sx: Implement the D2<fx> modules.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122210
+ 	* libf7-common.mk (F7_ASM_PARTS): Add <fx>2D modules.
+ 	* libf7-asm.sx: Implement the <fx>2D modules.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* libf7-common.mk (F7_ASM_PARTS): Add D_sincos.
+ 	* libf7-asm.sx: (D_sincos): New module implements sincos / sincosl.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122177
+ 	* libf7-common.mk (m_ddd): Remove: fmin, fmax.
+ 	(F7_ASM_PARTS): Add: D_fminfmax.
+ 	* libf7-asm.sx (D_fmanfmax): New module.
+ 	* f7-wraps.h: Rebuild.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-10-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* libf7-common.mk (g_xdd_cmp): Remove le, lt, ge, gt, ne, eq, unord.
+ 	(F7_ASM_PARTS): Add D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord.
+ 	* libf7-asm.sx (D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord):
+ 	New modules.
+ 	* f7-wraps.h: Rebuild.
+ 
+ 2025-10-09  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-05-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/120442
+ 	* libf7-common.mk (LIBF_C_PARTS, m_ddd): Add fdim.
+ 	* libf7.h (f7_fdim): New proto.
+ 	* libf7.c (f7_fdim): New function.
+ 	* f7renames.sh (f7_fdim): Add rename.
+ 	* f7-wraps.h: Rebuild
+ 	* f7-renames.h: Rebuild
+ 
+ 2025-05-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-05-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/120441
+ 	* libf7.c (f7_exp): Limit aa->expo to 10 (not to 9).
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/f7-renames.h gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/f7-renames.h
*** gcc-14.3.0/libgcc/config/avr/libf7/f7-renames.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/f7-renames.h	Fri Jun 19 06:51:06 2026
***************
*** 97,102 ****
--- 97,103 ----
  #define f7_acos __f7_acos
  #define f7_atan __f7_atan
  #define f7_atan2 __f7_atan2
+ #define f7_fdim __f7_fdim
  #define f7_mul_noround __f7_mul_noround
  #define f7_sqrt16_round __f7_sqrt16_round
  #define f7_sqrt16_floor __f7_sqrt16_floor
***************
*** 158,165 ****
  #define f7_min __f7_min
  #define f7_max __f7_max
  #define f7_exp10 __f7_exp10
- #define f7_floatunsidf __f7_floatunsidf
- #define f7_floatsidf __f7_floatsidf
  #define f7_extendsfdf2 __f7_extendsfdf2
  #define f7_fixdfsi __f7_fixdfsi
  #define f7_fixdfdi __f7_fixdfdi
--- 159,164 ----
***************
*** 223,228 ****
--- 222,230 ----
  #define f7_sqrt16_floor_asm __f7_sqrt16_floor_asm
  #define f7_lshrdi3_asm __f7_lshrdi3_asm
  #define f7_ashldi3_asm __f7_ashldi3_asm
+ #define f7_d_to_fx64_asm __f7_d_to_fx64_asm
+ #define f7_ufx64_to_d_asm __f7_ufx64_to_d_asm
+ #define f7_sfx64_to_d_asm __f7_sfx64_to_d_asm
  #define f7_class_D_asm __f7_class_D_asm
  #define f7_call_ddd_asm __f7_call_ddd_asm
  #define f7_call_xdd_asm __f7_call_xdd_asm
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/f7-wraps.h gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/f7-wraps.h
*** gcc-14.3.0/libgcc/config/avr/libf7/f7-wraps.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/f7-wraps.h	Fri Jun 19 06:51:06 2026
*************** _ENDF __divdf3
*** 79,155 ****
  #endif /* F7MOD_D_div_ */
  
  ;; Functions that usually live in libgcc: __<name>df2 for <name> in:
! ;; le lt ge gt ne eq unord
! 
! ;; bool __ledf2 (double, double)  ; le
! #ifdef F7MOD_D_le_
! _DEFUN __ledf2
!     .global F7_NAME(le_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(le_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(le_impl)))
!     F7jmp   call_xdd
! _ENDF __ledf2
! #endif /* F7MOD_D_le_ */
! 
! ;; bool __ltdf2 (double, double)  ; lt
! #ifdef F7MOD_D_lt_
! _DEFUN __ltdf2
!     .global F7_NAME(lt_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(lt_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(lt_impl)))
!     F7jmp   call_xdd
! _ENDF __ltdf2
! #endif /* F7MOD_D_lt_ */
! 
! ;; bool __gedf2 (double, double)  ; ge
! #ifdef F7MOD_D_ge_
! _DEFUN __gedf2
!     .global F7_NAME(ge_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(ge_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(ge_impl)))
!     F7jmp   call_xdd
! _ENDF __gedf2
! #endif /* F7MOD_D_ge_ */
! 
! ;; bool __gtdf2 (double, double)  ; gt
! #ifdef F7MOD_D_gt_
! _DEFUN __gtdf2
!     .global F7_NAME(gt_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(gt_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(gt_impl)))
!     F7jmp   call_xdd
! _ENDF __gtdf2
! #endif /* F7MOD_D_gt_ */
! 
! ;; bool __nedf2 (double, double)  ; ne
! #ifdef F7MOD_D_ne_
! _DEFUN __nedf2
!     .global F7_NAME(ne_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(ne_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(ne_impl)))
!     F7jmp   call_xdd
! _ENDF __nedf2
! #endif /* F7MOD_D_ne_ */
! 
! ;; bool __eqdf2 (double, double)  ; eq
! #ifdef F7MOD_D_eq_
! _DEFUN __eqdf2
!     .global F7_NAME(eq_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(eq_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(eq_impl)))
!     F7jmp   call_xdd
! _ENDF __eqdf2
! #endif /* F7MOD_D_eq_ */
! 
! ;; bool __unorddf2 (double, double)  ; unord
! #ifdef F7MOD_D_unord_
! _DEFUN __unorddf2
!     .global F7_NAME(unord_impl)
!     ldi     ZH,     hi8(gs(F7_NAME(unord_impl)))
!     ldi     ZL,     lo8(gs(F7_NAME(unord_impl)))
!     F7jmp   call_xdd
! _ENDF __unorddf2
! #endif /* F7MOD_D_unord_ */
  
  ;; Functions that usually live in libgcc: __<name> for <name> in:
  ;; fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
--- 79,85 ----
  #endif /* F7MOD_D_div_ */
  
  ;; Functions that usually live in libgcc: __<name>df2 for <name> in:
! ;; (none)
  
  ;; Functions that usually live in libgcc: __<name> for <name> in:
  ;; fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
*************** _ENDF __truncdfsf2
*** 205,231 ****
  #endif /* F7MOD_D_truncdfsf2_ */
  
  ;; Functions that usually live in libgcc: __<name> for <name> in:
! ;; floatunsidf floatsidf extendsfdf2
! 
! ;; double __floatunsidf (type_t)  ; floatunsidf
! #ifdef F7MOD_D_floatunsidf_
! _DEFUN __floatunsidf
!     .global F7_NAME(floatunsidf)
!     ldi     ZH,     hi8(gs(F7_NAME(floatunsidf)))
!     ldi     ZL,     lo8(gs(F7_NAME(floatunsidf)))
!     F7jmp   call_dx
! _ENDF __floatunsidf
! #endif /* F7MOD_D_floatunsidf_ */
! 
! ;; double __floatsidf (type_t)  ; floatsidf
! #ifdef F7MOD_D_floatsidf_
! _DEFUN __floatsidf
!     .global F7_NAME(floatsidf)
!     ldi     ZH,     hi8(gs(F7_NAME(floatsidf)))
!     ldi     ZL,     lo8(gs(F7_NAME(floatsidf)))
!     F7jmp   call_dx
! _ENDF __floatsidf
! #endif /* F7MOD_D_floatsidf_ */
  
  ;; double __extendsfdf2 (type_t)  ; extendsfdf2
  #ifdef F7MOD_D_extendsfdf2_
--- 135,141 ----
  #endif /* F7MOD_D_truncdfsf2_ */
  
  ;; Functions that usually live in libgcc: __<name> for <name> in:
! ;; extendsfdf2
  
  ;; double __extendsfdf2 (type_t)  ; extendsfdf2
  #ifdef F7MOD_D_extendsfdf2_
*************** _ENDF __extendsfdf2
*** 239,245 ****
  
  ;; Functions that usually live in libm:  Depending on [long] double layout,
  ;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
! ;; pow fmin fmax fmod hypot atan2
  
  ;; double __pow (double, double)
  #ifdef F7MOD_D_pow_
--- 149,155 ----
  
  ;; Functions that usually live in libm:  Depending on [long] double layout,
  ;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
! ;; pow fmod hypot atan2 fdim
  
  ;; double __pow (double, double)
  #ifdef F7MOD_D_pow_
*************** _DEFUN __pow
*** 253,282 ****
  _ENDF __pow
  #endif /* F7MOD_D_pow_ */
  
- ;; double __fmin (double, double)
- #ifdef F7MOD_D_fmin_
- _DEFUN __fmin
-     DALIAS fmin
-     LALIAS fminl
-     .global F7_NAME(fmin)
-     ldi     ZH,     hi8(gs(F7_NAME(fmin)))
-     ldi     ZL,     lo8(gs(F7_NAME(fmin)))
-     F7jmp   call_ddd
- _ENDF __fmin
- #endif /* F7MOD_D_fmin_ */
- 
- ;; double __fmax (double, double)
- #ifdef F7MOD_D_fmax_
- _DEFUN __fmax
-     DALIAS fmax
-     LALIAS fmaxl
-     .global F7_NAME(fmax)
-     ldi     ZH,     hi8(gs(F7_NAME(fmax)))
-     ldi     ZL,     lo8(gs(F7_NAME(fmax)))
-     F7jmp   call_ddd
- _ENDF __fmax
- #endif /* F7MOD_D_fmax_ */
- 
  ;; double __fmod (double, double)
  #ifdef F7MOD_D_fmod_
  _DEFUN __fmod
--- 163,168 ----
*************** _DEFUN __atan2
*** 313,318 ****
--- 199,216 ----
  _ENDF __atan2
  #endif /* F7MOD_D_atan2_ */
  
+ ;; double __fdim (double, double)
+ #ifdef F7MOD_D_fdim_
+ _DEFUN __fdim
+     DALIAS fdim
+     LALIAS fdiml
+     .global F7_NAME(fdim)
+     ldi     ZH,     hi8(gs(F7_NAME(fdim)))
+     ldi     ZL,     lo8(gs(F7_NAME(fdim)))
+     F7jmp   call_ddd
+ _ENDF __fdim
+ #endif /* F7MOD_D_fdim_ */
+ 
  ;; Functions that usually live in libm:  Depending on [long] double layout,
  ;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
  ;; ldexp frexp
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/f7renames.sh gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/f7renames.sh
*** gcc-14.3.0/libgcc/config/avr/libf7/f7renames.sh	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/f7renames.sh	Fri Jun 19 06:51:06 2026
*************** EOF
*** 35,43 ****
  
      c)
          if [ x${PRE} != xf7_ ]; then
!             echo " "
              echo "/* Renames for libf7.c, libf7.h.  */"
!             echo " "
              for x in $*; do
                  echo "#define f7_$x ${PRE}$x"
              done
--- 35,43 ----
  
      c)
          if [ x${PRE} != xf7_ ]; then
!             echo ""
              echo "/* Renames for libf7.c, libf7.h.  */"
!             echo ""
              for x in $*; do
                  echo "#define f7_$x ${PRE}$x"
              done
*************** EOF
*** 46,54 ****
  
      cst)
          if [ x${PRE} != xf7_ ]; then
!             echo " "
              echo "/* Renames for libf7.c, libf7.h.  */"
!             echo " "
              for x in $*; do
                  echo "#define f7_const_${x}   ${PRE}const_${x}"
                  echo "#define f7_const_${x}_P ${PRE}const_${x}_P"
--- 46,54 ----
  
      cst)
          if [ x${PRE} != xf7_ ]; then
!             echo ""
              echo "/* Renames for libf7.c, libf7.h.  */"
!             echo ""
              for x in $*; do
                  echo "#define f7_const_${x}   ${PRE}const_${x}"
                  echo "#define f7_const_${x}_P ${PRE}const_${x}_P"
*************** EOF
*** 58,66 ****
  
      asm)
          if [ x${PRE} != xf7_ ]; then
!             echo " "
              echo "/* Renames for libf7-asm.sx, f7-wraps.h.  */"
!             echo " "
              for x in $*; do
                  echo "#define f7_${x}_asm ${PRE}${x}_asm"
              done
--- 58,66 ----
  
      asm)
          if [ x${PRE} != xf7_ ]; then
!             echo ""
              echo "/* Renames for libf7-asm.sx, f7-wraps.h.  */"
!             echo ""
              for x in $*; do
                  echo "#define f7_${x}_asm ${PRE}${x}_asm"
              done
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/libf7-asm.sx gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7-asm.sx
*** gcc-14.3.0/libgcc/config/avr/libf7/libf7-asm.sx	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7-asm.sx	Fri Jun 19 06:51:06 2026
*************** DEFUN to_integer
*** 618,638 ****
  .Lsaturate.T:
  
  #if F7_HAVE_Inf
!     brtc .Lset_0x7fff
!     ;; -Inf  =>  return 1 + INTxx_MIN
!     mov     ZL,     Flags
!     .global __clr_8
!     XCALL   __clr_8
!     ldi     C6,     0x80
! 
!     ldi     CA+0,   0x01
! 
!     sbrs    Mask,   5
!     ldi     CA+4,   0x01
! 
!     sbrs    Mask,   4
!     ldi     CA+6,   0x01
!     ret
  
  .Lset_0x7fff:
      ;; +Inf  =>  return INTxx_MAX
--- 618,624 ----
  .Lsaturate.T:
  
  #if F7_HAVE_Inf
!     brts .Lset_0x8000
  
  .Lset_0x7fff:
      ;; +Inf  =>  return INTxx_MAX
*************** DEFUN to_integer
*** 644,650 ****
  #endif /* F7_HAVE_Inf */
  
  .Lset_0x8000:
!     ;; NaN  =>  return INTxx_MIN
      .global __clr_8
      XCALL   __clr_8
      ldi     C6,     0x80
--- 630,636 ----
  #endif /* F7_HAVE_Inf */
  
  .Lset_0x8000:
!     ;; NaN  or -Inf =>  return INTxx_MIN
      .global __clr_8
      XCALL   __clr_8
      ldi     C6,     0x80
*************** ENDF class_D
*** 1727,1732 ****
--- 1713,2033 ----
  #endif /* F7MOD_D_class_ */
  
  
+ #ifdef F7MOD_D_cmp_
+ 
+ #define A0  18
+ #define A1  A0 + 1
+ #define A2  A0 + 2
+ #define A3  A0 + 3
+ #define A4  A0 + 4
+ #define A5  A0 + 5
+ #define A6  A0 + 6
+ #define A7  A0 + 7
+ 
+ #define B0  10
+ #define B1  B0 + 1
+ #define B2  B0 + 2
+ #define B3  B0 + 3
+ #define B4  B0 + 4
+ #define B5  B0 + 5
+ #define B6  B0 + 6
+ #define B7  B0 + 7
+ 
+ #define AA5  XH
+ #define AA6  ZL
+ #define AA7  ZH
+ 
+ #define BB0  A0
+ #define BB1  A1
+ #define BB2  A2
+ #define BB3  A3
+ #define BB4  A4
+ #define BB5  A5
+ #define BB6  A6
+ #define BB7  A7
+ 
+ ;;; Helper for __<cmp>df2 and __unorddf2.
+ ;;; T = 1: Comparison is unordered.
+ ;;; T = 0: Comparison is ordered, and Z, N, C, S flags are set according
+ ;;; to compare (double A, double B) as if set by a signed int comparison.
+ ;;; Note that f(+0) = f(-0) = 0.
+ ;;; In any case:
+ ;;; -  return R24 = 1.
+ ;;; -  return R25.0 = isNaN (A)
+ ;;; -  return R25.1 = isNaN (B)
+ DEFUN D_cmp
+     rcall   D_cmp.map_i64
+     bld     __tmp_reg__, 0
+     push    __tmp_reg__
+     ;; Save A somewhere else...
+     wmov    AA6, A6
+     mov     AA5, A5
+     push    A4
+     push    A3
+     push    A2
+     push    A1
+     mov     r0,  A0
+     ;; ... so that we can use D_cmp.map_i64 on B.
+     wmov    BB6, B6
+     wmov    BB4, B4
+     wmov    BB2, B2
+     wmov    BB0, B0
+     rcall   D_cmp.map_i64
+     ;; Run the following code even when B is NaN (T=1) so as to pop the regs.
+     ;; In the non-NaN case, AA and BB can be compared like int64_t for the
+     ;; sake of comparing A and B as double.
+     CP      r0,  BB0  $  pop r0
+     cpc     r0,  BB1  $  pop r0
+     cpc     r0,  BB2  $  pop r0
+     cpc     r0,  BB3  $  pop r0
+     cpc     r0,  BB4
+     cpc     AA5, BB5
+     cpc     AA6, BB6
+     cpc     AA7, BB7
+     pop     r25
+     ;; R25.0 <=> A is NaN
+     ;; R25.1 <=> B is NaN
+     ;; T <=> comparison is unordered
+     bld     r25, 1
+     sbrc    r25, 0
+     set
+     ldi     r24, 1
+     ret
+ 
+ ;;; A is NaN: Set T=1.
+ ;;; A is not a NaN: Set T=0, and map double A to int64_t such that
+ ;;; f(A) <cmp> f(B)  iff  A <cmp> B, i.e. we can treat the result
+ ;;; as int64_t for the matter of double comparison.
+ ;;; Clobbers: XL.
+ D_cmp.map_i64:
+     bst     A7, 7
+     cbr     A7, 0x80
+     ;; If Inf < |A|, then we have a NaN.
+     CP      __zero_reg__, A0
+     cpc     __zero_reg__, A1
+     cpc     __zero_reg__, A2
+     cpc     __zero_reg__, A3
+     cpc     __zero_reg__, A4
+     cpc     __zero_reg__, A5
+     ldi     XL, lo8(0x7ff0)     $    cpc    XL, A6
+     ldi     XL, hi8(0x7ff0)     $    cpc    XL, A7
+     brlo .Lunord
+     brtc 9f
+     clt
+     .global __negdi2
+     XJMP    __negdi2
+ .Lunord:
+     set
+ 9:  ret
+ 
+ ENDF D_cmp
+ #endif /* F7MOD_D_cmp_ */
+ 
+ 
+ ;; bool __ledf2 (double, double);
+ #ifdef F7MOD_D_le_
+ _DEFUN __ledf2
+     F7call  D_cmp
+     brts 0f
+     breq 1f
+     brlt 1f
+ 0:  ldi     r24, 0
+ 1:  ret
+ _ENDF __ledf2
+ #endif /* F7MOD_D_le_ */
+ 
+ ;; bool __ltdf2 (double, double);
+ #ifdef F7MOD_D_lt_
+ _DEFUN __ltdf2
+     F7call  D_cmp
+     brts 0f
+     brlt 1f
+ 0:  ldi     r24, 0
+ 1:  ret
+ _ENDF __ltdf2
+ #endif /* F7MOD_D_lt_ */
+ 
+ ;; bool __gedf2 (double, double);
+ #ifdef F7MOD_D_ge_
+ _DEFUN __gedf2
+     F7call  D_cmp
+     brts 0f
+     brge 1f
+ 0:  ldi     r24, 0
+ 1:  ret
+ _ENDF __gedf2
+ #endif /* F7MOD_D_ge_ */
+ 
+ ;; bool __gtdf2 (double, double);
+ #ifdef F7MOD_D_gt_
+ _DEFUN __gtdf2
+     F7call  D_cmp
+     brts 0f
+     breq 0f
+     brge 1f
+ 0:  ldi     r24, 0
+ 1:  ret
+ _ENDF __gtdf2
+ #endif /* F7MOD_D_gt_ */
+ 
+ ;; bool __nedf2 (double, double);
+ #ifdef F7MOD_D_ne_
+ _DEFUN __nedf2
+     F7call  D_cmp
+     brts 0f
+     brne 1f
+ 0:  ldi     r24, 0
+ 1:  ret
+ _ENDF __nedf2
+ #endif /* F7MOD_D_ne_ */
+ 
+ ;; bool __eqdf2 (double, double);
+ #ifdef F7MOD_D_eq_
+ _DEFUN __eqdf2
+     F7call  D_cmp
+     brts 0f
+     breq 1f
+ 0:  ldi     r24, 0
+ 1:  ret
+ _ENDF __eqdf2
+ #endif /* F7MOD_D_eq_ */
+ 
+ ;; bool __unorddf2 (double, double);
+ #ifdef F7MOD_D_unord_
+ _DEFUN __unorddf2
+     F7call  D_cmp
+     bld     r24, 0
+     ret
+ _ENDF __unorddf2
+ #endif /* F7MOD_D_unord_ */
+ 
+ #ifdef F7MOD_D_fminfmax_
+ _DEFUN __fmin
+ DALIAS fmin
+ LALIAS fminl
+     inc     __zero_reg__
+ 
+ _LABEL __fmax
+ DALIAS fmax
+ LALIAS fmaxl
+     ;; Push A[].
+     push    r25
+     push    r24
+     push    r23
+     push    r22
+     push    r21
+     push    r20
+     push    r19
+     push    r18
+     ;; fmin or fmax
+     push    __zero_reg__
+     clr     __zero_reg__
+ 
+     XCALL   __gedf2
+ 
+     pop     __tmp_reg__
+     andi    r25, 0x3            ; NaNs?
+     brne .Lnan
+     ;; No NaNs involved.
+     eor     __tmp_reg__, r24    ; (f == fmin) ^ (A >= B)
+     brne 1f
+ 2:
+     ;; Return B since the cases are:
+     ;; fmax && A < B
+     ;; fmin && A >= B
+ #ifdef __AVR_XMEGA__
+     in      XL, __SP_L__
+     in      XH, __SP_H__
+     adiw    XL, 8
+     out     __SP_L__, XL
+     out     __SP_H__, XH
+ #else
+     pop r0  $  pop r0  $  pop r0  $  pop r0
+     pop r0  $  pop r0  $  pop r0  $  pop r0
+ #endif
+     wmov    r24, r16
+     wmov    r22, r14
+     wmov    r20, r12
+     wmov    r18, r10
+     ret
+ 1:
+     ;; Return A since the cases are:
+     ;; fmax && A >= B
+     ;; fmin && A < B
+     pop     r18
+     pop     r19
+     pop     r20
+     pop     r21
+     pop     r22
+     pop     r23
+     pop     r24
+     pop     r25
+     ret
+ 
+ .Lnan:
+     ;; There are NaNs.
+     ;; When only the 1st argument is a NaN, then return the 2nd argument
+     cpi     r25, 0x1
+     breq 2b
+     ;; When the 2nd argument is a NaN, then return the 1st argument.
+     ;; When both arguments are NaNs, then return NaN (e.g. the 1st argument).
+     rjmp 1b
+ _ENDF __fmax
+ #endif /* F7MOD_D_fminfmax_ */
+ 
+ 
+ #ifdef F7MOD_D_sincos_
+ ;;; void sincos (double R18, double *R16, double *R14);
+ _DEFUN __sincos
+ DALIAS sincos
+ LALIAS sincosl
+ 
+ #define n_pushed    4
+ #define n_frame    (2 * F7_SIZEOF)
+     do_prologue_saves n_pushed, n_frame
+     ;; Y = FramePointer + 1
+     adiw    Y,      1
+     ;; R16 = frame-arg 1
+     wmov    r16,    Y
+     ;; The double argument is in R18[].
+     XCALL   F7_NAME (set_double_impl)
+     ;; void f7_sincos (f7_t *ss, f7_t *cc, const f7_t *aa)
+     ;; Note that aa may equal ss or cc.
+     wmov    r20,    r16                 ; aa
+     wmov    r24,    r16                 ; ss = FP + 1
+     subi    r16,    lo8(-F7_SIZEOF)
+     sbci    r17,    hi8(-F7_SIZEOF)
+     wmov    r22,    r16                 ; cc = FP + 1 + F7_SIZEOF
+     XCALL   F7_NAME (sincos)
+ 
+     ;; double R18 = get_double (cc)
+     wmov    r24,    r16
+     XCALL   F7_NAME (get_double)
+     wmov    XL,     r14                 ; double *pcos
+     rcall   store.r18.X                 ; *pcos = R18
+ 
+     ;; double R18 = get_double (ss)
+     wmov    r24,    Y
+     XCALL   F7_NAME (get_double)
+     ldd     XL,     Y + n_frame + 3     ; Saved R16
+     ldd     XH,     Y + n_frame + 2     ; Saved R17
+     rcall   store.r18.X                 ; *psin = R18
+ 
+     do_epilogue_restores n_pushed, n_frame
+ 
+ store.r18.X:
+     st      X+,     r18
+     st      X+,     r19
+     st      X+,     r20
+     st      X+,     r21
+     st      X+,     r22
+     st      X+,     r23
+     st      X+,     r24
+     st      X+,     r25
+     ret
+ _ENDF __sincos
+ #endif /* F7MOD_D_sincos_ */
+ 
  #ifdef F7MOD_call_dd_
  
  ;; Provide double wrappers for functions that operate on f7_t and get f7_t*.
*************** _DEFUN __powidf2
*** 1894,1897 ****
--- 2195,2591 ----
  _ENDF __powidf2
  #endif /* F7MOD_D_powi_ */
  
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Fixed-point -> double conversions.
+ 
+ ;;; The double exponent starts at bit 52 since the encoded mantissa has 52 bits.
+ ;;; Note that when X is a multiple of 16, then dex_lo(x) evaluates to 0.
+ #define DEX16(x)  (x) << (52 - 48)
+ #define dex_lo(x) lo8 (DEX16 (x))
+ #define dex_hi(x) hi8 (DEX16 (x))
+ 
+ #ifdef F7MOD_usa2D_
+ _DEFUN __fractusadf
+     ;; Convert USI to DF.
+     XCALL   __floatunsidf
+     ;; The MSB indicates a value of 0.
+     cpse    r25, __zero_reg__
+     ;; Divide non-zero values by 2^16 in order to adjust for FBIT = 16.
+     subi    r25, dex_hi (16)
+     ret
+ _ENDF __fractusadf
+ #endif /* F7MOD_usa2D_ */
+ 
+ #ifdef F7MOD_sa2D_
+ _DEFUN __fractsadf
+     ;; Convert SI to DF.
+     XCALL   __floatsidf
+     ;; The MSB indicates a value of 0.
+     tst     r25
+     breq 0f
+     ;; Divide non-zero values by 2^15 in order to adjust for FBIT = 15.
+     subi    r24, dex_lo (15)
+     sbci    r25, dex_hi (15)
+ 0:  ret
+ _ENDF __fractsadf
+ #endif /* F7MOD_sa2D_ */
+ 
+ #ifdef F7MOD_uha2D_
+ _DEFUN __fractuhadf
+     ;; Extend UHA to USA.
+     clr     r22
+     mov     r23, r24
+     mov     r24, r25
+     clr     r25
+     XJMP    __fractusadf
+ _ENDF __fractuhadf
+ #endif /* F7MOD_uha2D_ */
+ 
+ #ifdef F7MOD_ha2D_
+ _DEFUN __fracthadf
+     ;; Extend HA to SA.
+     clr     r22
+     mov     r23, r24
+     mov     r24, r25
+     lsl     r25
+     sbc     r25, r25
+     XJMP    __fractsadf
+ _ENDF __fracthadf
+ #endif /* F7MOD_ha2D_ */
+ 
+ 
+ #ifdef F7MOD_usq2D_
+ _DEFUN __fractusqdf
+     ;; Convert USI to DF.
+     XCALL   __floatunsidf
+     ;; The MSB indicates a value of 0.
+     cpse    r25, __zero_reg__
+     ;; Divide non-zero values by 2^32 in order to adjust for FBIT = 32.
+     subi    r25, dex_hi (32)
+     ret
+ _ENDF __fractusqdf
+ #endif /* F7MOD_usq2D_ */
+ 
+ #ifdef F7MOD_sq2D_
+ _DEFUN __fractsqdf
+     ;; Convert SI to DF.
+     XCALL   __floatsidf
+     ;; The MSB indicates a value of 0.
+     tst     r25
+     breq 0f
+     ;; Divide non-zero values by 2^31 in order to adjust for FBIT = 31.
+     subi    r24, dex_lo (31)
+     sbci    r25, dex_hi (31)
+ 0:  ret
+ _ENDF __fractsqdf
+ #endif /* F7MOD_sq2D_ */
+ 
+ #ifdef F7MOD_uqq2D_
+ _DEFUN __fractuqqdf
+     ;; Extend UQQ to UHQ.
+     mov     r25, r24
+     clr     r24
+ _LABEL __fractuhqdf
+     ;; Extend UHQ to USQ.
+     clr     r23
+     clr     r22
+     XJMP    __fractusqdf
+ _ENDF __fractuqqdf
+ #endif /* F7MOD_uqq2D_ */
+ 
+ #ifdef F7MOD_qq2D_
+ _DEFUN __fractqqdf
+     ;; Extend QQ to HQ.
+     mov     r25, r24
+     clr     r24
+ _LABEL __fracthqdf
+     ;; Extend HQ to SQ.
+     clr     r23
+     clr     r22
+     XJMP    __fractsqdf
+ _ENDF __fractqqdf
+ #endif /* F7MOD_qq2D_ */
+ 
+ 
+ #ifdef F7MOD_fx2D_
+ ;;; Convert an [un]signed 64-bit fixed point value R18[] to double.
+ ;;;    double ufx64_to_d (ufx64_t R18, uint8_t fbit R30);
+ ;;;    double sfx64_to_d (sfx64_t R18, uint8_t fbit R30);
+ ;;; FBIT accounts for the fractional bits of the fixed point type,
+ ;;; e.g. pass __DA_FBIT__ for long accum etc.
+ DEFUN ufx64_to_d
+     push    r30
+     XCALL __floatundidf
+     rjmp  1f
+ 
+ LABEL sfx64_to_d
+     push    r30
+     XCALL __floatdidf
+ 1:  pop     r30
+ 
+     ;; The MSB indicates a value of 0.  Notice that at this point,
+     ;; we have a normal floating point number with a biased exponent
+     ;; that won't underflow below.
+     tst     r25
+     breq 0f
+ 
+     ;; Subtract fbit from the double exponent.  R30[] = fbit << 4.
+     swap    r30
+     mov     r31, r30
+     andi    r30, lo8 (0x0ff0)
+     andi    r31, hi8 (0x0ff0)
+     sub     r24, r30
+     sbc     r25, r31
+ 
+ 0:  ret
+ ENDF ufx64_to_d
+ #endif /* F7MOD_fx2D_ */
+ 
+ #ifdef F7MOD_da2D_
+ _DEFUN __fractdadf
+     ldi     r30, __DA_FBIT__
+     F7jmp   sfx64_to_d
+ _ENDF __fractdadf
+ #endif /* F7MOD_da2D_ */
+ 
+ #ifdef F7MOD_uda2D_
+ _DEFUN __fractudadf
+     ldi     r30, __UDA_FBIT__
+     F7jmp   ufx64_to_d
+ _ENDF __fractudadf
+ #endif /* F7MOD_uda2D_ */
+ 
+ #ifdef F7MOD_ta2D_
+ _DEFUN __fracttadf
+     ldi     r30, __TA_FBIT__
+     F7jmp   sfx64_to_d
+ _ENDF __fracttadf
+ #endif /* F7MOD_ta2D_ */
+ 
+ #ifdef F7MOD_uta2D_
+ _DEFUN __fractutadf
+     ldi     r30, __UTA_FBIT__
+     F7jmp   ufx64_to_d
+ _ENDF __fractutadf
+ #endif /* F7MOD_uta2D_ */
+ 
+ #ifdef F7MOD_dq2D_
+ _DEFUN __fractdqdf
+     ldi     r30, __DQ_FBIT__
+     F7jmp   sfx64_to_d
+ _ENDF __fractdqdf
+ #endif /* F7MOD_dq2D_ */
+ 
+ #ifdef F7MOD_udq2D_
+ _DEFUN __fractudqdf
+     ldi     r30, __UDQ_FBIT__
+     F7jmp   ufx64_to_d
+ _ENDF __fractudqdf
+ #endif /* F7MOD_udq2D_ */
+ 
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; Double -> fixed-point conversions.
+ 
+ #ifdef F7MOD_D2qq_
+ _DEFUN __fractdfqq
+     ;; Multiply with 2^{24+7} to get a QQ result in r25.
+     subi    r24, dex_lo (-31)
+     sbci    r25, dex_hi (-31)
+     XCALL   __fixdfsi
+     mov     r24, r25
+     ret
+ _ENDF __fractdfqq
+ #endif /* F7MOD_D2qq_ */
+ 
+ #ifdef F7MOD_D2uqq_
+ _DEFUN __fractdfuqq
+     ;; Multiply with 2^{24+8} to get a UQQ result in r25.
+     subi    r25, dex_hi (-32)
+     XCALL   __fixunsdfsi
+     mov     r24, r25
+     ret
+ _ENDF __fractdfuqq
+ #endif /* F7MOD_D2uqq_ */
+ 
+ #ifdef F7MOD_D2ha_
+ _DEFUN __fractdfha
+     ;; Multiply with 2^{16+7} to get a HA result in r25:r24
+     subi    r24, dex_lo (-23)
+     sbci    r25, dex_hi (-23)
+     XJMP    __fixdfsi
+ _ENDF __fractdfha
+ #endif /* F7MOD_D2ha_ */
+ 
+ #ifdef F7MOD_D2uha_
+ _DEFUN __fractdfuha
+     ;; Multiply with 2^24 to get a UHA result in r25:r24.
+     subi    r24, dex_lo (-24)
+     sbci    r25, dex_hi (-24)
+     XJMP    __fixunsdfsi
+ _ENDF __fractdfuha
+ #endif /* F7MOD_D2uha_ */
+ 
+ #ifdef F7MOD_D2hq_
+ _DEFUN __fractdfhq
+     ;; Multiply with 2^{16+15} to get a HQ result in r25:r24
+     ;; resp. with 2^31 to get a SQ result in r25:r22.
+ _LABEL __fractdfsq
+     subi    r24, dex_lo (-31)
+     sbci    r25, dex_hi (-31)
+     XJMP    __fixdfsi
+ _ENDF __fractdfhq
+ #endif /* F7MOD_D2hq_ */
+ 
+ #ifdef F7MOD_D2uhq_
+ _DEFUN __fractdfuhq
+     ;; Multiply with 2^{16+16} to get a UHQ result in r25:r24
+     ;; resp. with 2^32 to get a USQ result in r25:r22.
+ _LABEL  __fractdfusq
+     subi    r25, dex_hi (-32)
+     XJMP    __fixunsdfsi
+ _ENDF __fractdfuhq
+ #endif /* F7MOD_D2uhq_ */
+ 
+ #ifdef F7MOD_D2sa_
+ _DEFUN __fractdfsa
+     ;; Multiply with 2^15 to get a SA result in r25:r22.
+     subi    r24, dex_lo (-15)
+     sbci    r25, dex_hi (-15)
+     XJMP    __fixdfsi
+ _ENDF __fractdfsa
+ #endif /* F7MOD_D2sa_ */
+ 
+ #ifdef F7MOD_D2usa_
+ _DEFUN __fractdfusa
+     ;; Multiply with 2^16 to get a USA result in r25:r22.
+     subi    r25, dex_hi (-16)
+     XJMP    __fixunsdfsi
+ _ENDF __fractdfusa
+ #endif /* F7MOD_D2usa_ */
+ 
+ 
+ #ifdef F7MOD_D2fx_
+ ;;; Convert double R18 to a 64-bit fixed point value.
+ ;;; R18 d_to_fx64 (double R18, int8_t fbit R16);
+ ;;; |FBIT| accounts for the extra fbits compared to [u]int64_t.
+ ;;; FBIT < 0 indicates a signed conversion.
+ ;;; FBIT > 0 indicates an unsigned conversion.
+ DEFUN d_to_fx64
+     do_prologue_saves  4, F7_SIZEOF
+ 
+     ;; Y = FramePointer + 1
+     adiw    Y,      1
+ 
+     ;; FP + 1 = (f7_t) arg
+     wmov    r16,    Y
+ 
+     ;; Convert double R18 to f7_t *R16.
+     XCALL   F7_NAME (set_double_impl)
+ 
+     ;; Prepare for *R24 = ldexp (*R24, R22).  ldexp() accounts for the
+     ;; fractional bits of the fixed point value, i.e. we have to <<= FBIT.
+     wmov    r24,    r16
+     ;; Zero-extend FBIT.
+     clr     r23
+     ;; R16 has been clobbered.  Fetch it from where prologue_saves put it.
+     ldd     r22,    Y + F7_SIZEOF + 3       ; Saved R16
+     tst     r22
+     brmi 1f
+ 
+     ;; Positive FBIT indicates an unsigned conversion.
+     XCALL   F7_NAME (Ildexp)
+     XCALL   F7_NAME (get_u64)
+     rjmp 9f
+ 
+ 1:  ;; Negative FBIT indicates a signed conversion.
+     neg     r22                 ; FBIT := |FBIT|
+     XCALL   F7_NAME (Ildexp)
+     XCALL   F7_NAME (get_s64)
+ 
+ 9:  do_epilogue_restores  4, F7_SIZEOF
+ ENDF d_to_fx64
+ #endif /* F7MOD_D2fx_ */
+ 
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; [u]int32_t -> double conversions.
+ 
+ ;; double __floatsidf (int32_t);
+ #ifdef F7MOD_D_floatsidf_
+ _DEFUN __floatsidf
+     bst     r25, 7
+     brtc    0f
+     XCALL   __negsi2
+ 0:  XJMP    __floatunsidf.ge0
+ _ENDF __floatsidf
+ #endif /* F7MOD_D_floatsidf_ */
+ 
+ ;; double __floatunsidf (uint32_t);
+ #ifdef F7MOD_D_floatunsidf_
+ _DEFUN __floatunsidf
+     clt
+ _LABEL __floatunsidf.ge0
+     ;; Zero-extend SI at the low end.
+     clr     r18
+     clr     r19
+     wmov    r20,    r18
+     ;; Input is zero?
+     sbiw    r24,    0
+     sbci    r23,    0
+     sbci    r22,    0
+     breq 9f
+     ;; No: The double exponent of 0x80000000 is 31 plus a bias of 1023.
+     ;; Align the SI value such that the MSBit is as R25.4.
+     ;; For each << we have to subtract 1 from the exponent, and for
+     ;; each >> we have to add 1.  Since we want the MSB in R25.4 and
+     ;; not in R25.7, the initial exponent must be reduced by 3.
+     ldi     Xl,     dex_lo (31 + 1023 - 3)
+     ldi     Xh,     dex_hi (31 + 1023 - 3)
+     ;; Move the MSByte to R25.
+ 1:  tst     r25
+     brne 2f
+     subi    Xl,     dex_lo (8)
+     sbci    Xh,     dex_hi (8)
+     mov     r25,    r24
+     mov     r24,    r23
+     mov     r23,    r22
+     clr     r22
+     rjmp    1b
+ 2:  ;; Now we have R25 != 0.
+     cpi     r25,    0x20
+     brlo 3f
+     adiw    Xl,     DEX16 (1)
+     lsr     r25
+     ror     r24
+     ror     r23
+     ror     r22
+     ror     r21
+     rjmp 2b
+ 3:  cpi     r25,    0x10
+     brsh 4f
+     sbiw    Xl,     DEX16 (1)
+     lsl     r22
+     rol     r23
+     rol     r24
+     rol     r25
+     rjmp 3b
+ 4:  ;; Move the mantissa into place and clear the redundant leading 1.
+     cbr     r25,    0x10
+     mov     r20,    r21
+     mov     r21,    r22
+     mov     r22,    r23
+     mov     r23,    r24
+     mov     r24,    r25
+     ;; Insert the biased exponent.
+     or      r24,    Xl
+     mov     r25,    Xh
+     ;; Insert the sign.
+     bld     r25,    7
+ 9:  ret
+ _ENDF __floatunsidf
+ #endif /* F7MOD_D_floatunsidf_ */
+ 
+ 
  #endif /* !AVR_TINY */
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/libf7-common.mk gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7-common.mk
*** gcc-14.3.0/libgcc/config/avr/libf7/libf7-common.mk	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7-common.mk	Fri Jun 19 06:51:06 2026
*************** F7_C_PARTS += set_float get_float get_do
*** 8,14 ****
  F7_C_PARTS += fabs neg fmin fmax minmax truncx trunc floor ceil round lround
  F7_C_PARTS += horner logx log log10 log2 exp pow10 pow powi
  F7_C_PARTS += sin cos tan cotan sincos sinh cosh tanh sinhcosh
! F7_C_PARTS += asinacos asin acos atan atan2
  F7_C_PARTS += abscmp_msb_ge cmp cmp_abs cmp_unordered
  
  F7_C_PARTS += const_1 const_1_2 const_1_3
--- 8,14 ----
  F7_C_PARTS += fabs neg fmin fmax minmax truncx trunc floor ceil round lround
  F7_C_PARTS += horner logx log log10 log2 exp pow10 pow powi
  F7_C_PARTS += sin cos tan cotan sincos sinh cosh tanh sinhcosh
! F7_C_PARTS += asinacos asin acos atan atan2 fdim
  F7_C_PARTS += abscmp_msb_ge cmp cmp_abs cmp_unordered
  
  F7_C_PARTS += const_1 const_1_2 const_1_3
*************** F7_ASM_PARTS += addsub_mant_scaled store
*** 22,40 ****
  F7_ASM_PARTS += to_integer to_unsigned clz normalize_with_carry normalize
  F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div
  
! F7_ASM_PARTS += D_class D_fma D_powi
  F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs
  
  F7_ASM_PARTS += call_dd call_ddd
  
  # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx)
  # and give f7_asm_D_*.o modules.
  g_ddd += add sub mul div
! g_xdd_cmp += le lt ge gt ne eq unord
! g_dx += floatunsidf floatsidf extendsfdf2
  g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
  
! m_ddd += pow fmin fmax fmod hypot atan2
  m_ddx += ldexp frexp
  m_dd += sqrt cbrt exp exp10 pow10 log log10 log2 sin cos tan cotan asin acos atan
  m_dd += ceil floor trunc round sinh cosh tanh
--- 22,54 ----
  F7_ASM_PARTS += to_integer to_unsigned clz normalize_with_carry normalize
  F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div
  
! F7_ASM_PARTS += D_class D_fma D_powi D_sincos
  F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs
+ F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord D_fminfmax
  
  F7_ASM_PARTS += call_dd call_ddd
  
+ # Fixed-point -> double conversions
+ F7_ASM_PARTS += qq2D uqq2D            sq2D usq2D dq2D udq2D
+ F7_ASM_PARTS +=            ha2D uha2D sa2D usa2D da2D uda2D ta2D uta2D
+ F7_ASM_PARTS += fx2D
+ 
+ # Double -> fixed-point conversions
+ F7_ASM_PARTS += D2qq D2uqq D2hq D2uhq
+ F7_ASM_PARTS +=            D2ha D2uha D2sa D2usa
+ F7_ASM_PARTS += D2fx
+ 
+ # Integer -> double conversions
+ F7_ASM_PARTS += D_floatsidf D_floatunsidf
+ 
  # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx)
  # and give f7_asm_D_*.o modules.
  g_ddd += add sub mul div
! g_xdd_cmp +=
! g_dx += extendsfdf2
  g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
  
! m_ddd += pow fmod hypot atan2 fdim
  m_ddx += ldexp frexp
  m_dd += sqrt cbrt exp exp10 pow10 log log10 log2 sin cos tan cotan asin acos atan
  m_dd += ceil floor trunc round sinh cosh tanh
*************** F7F += lrint ldexp frexp exp logx log lo
*** 59,65 ****
  F7F += minmax fmax fmin floor ceil round lround trunc truncx
  F7F += horner pow10 exp10 pow powi
  F7F += sin cos tan cotan sincos sinh cosh tanh sinhcosh
! F7F += asinacos asin acos atan atan2
  F7F += mul_noround sqrt16_round sqrt16_floor
  F7F += clr_mant_lsbs abscmp_msb_ge lshrdi3 ashldi3
  F7F += assert
--- 73,79 ----
  F7F += minmax fmax fmin floor ceil round lround trunc truncx
  F7F += horner pow10 exp10 pow powi
  F7F += sin cos tan cotan sincos sinh cosh tanh sinhcosh
! F7F += asinacos asin acos atan atan2 fdim
  F7F += mul_noround sqrt16_round sqrt16_floor
  F7F += clr_mant_lsbs abscmp_msb_ge lshrdi3 ashldi3
  F7F += assert
*************** F7F += set_eps set_1pow2
*** 82,88 ****
  
  # Renames for ALIASes without own module.
  F7F += min max exp10
! F7F += floatunsidf floatsidf extendsfdf2
  F7F += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
  
  # Renames for f7-const.def.
--- 96,102 ----
  
  # Renames for ALIASes without own module.
  F7F += min max exp10
! F7F += extendsfdf2
  F7F += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
  
  # Renames for f7-const.def.
*************** F7F_asm += set_u64 set_s64 addsub_mant_s
*** 95,101 ****
  F7F_asm += to_integer to_unsigned clr_mant_lsbs
  F7F_asm += div sqrt_approx sqrt16_round sqrt16_floor
  F7F_asm += lshrdi3 ashldi3
! 
  F7F_asm += class_D
  
  F7F_asm += call_ddd call_xdd call_ddx
--- 109,115 ----
  F7F_asm += to_integer to_unsigned clr_mant_lsbs
  F7F_asm += div sqrt_approx sqrt16_round sqrt16_floor
  F7F_asm += lshrdi3 ashldi3
! F7F_asm += d_to_fx64 ufx64_to_d sfx64_to_d
  F7F_asm += class_D
  
  F7F_asm += call_ddd call_xdd call_ddx
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/libf7.c gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7.c
*** gcc-14.3.0/libgcc/config/avr/libf7/libf7.c	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7.c	Fri Jun 19 06:51:06 2026
*************** f7_double_t __floatdidf (int64_t x)
*** 140,145 ****
--- 140,197 ----
  #endif // F7MOD_floatdidf_
  
  
+ extern uint64_t d_to_ufx (f7_double_t, int8_t) F7ASM(f7_d_to_fx64_asm);
+ extern int64_t  d_to_sfx (f7_double_t, int8_t) F7ASM(f7_d_to_fx64_asm);
+ 
+ #ifdef F7MOD_fractdfda_
+ F7_WEAK
+ int64_t __fractdfda (f7_double_t d)
+ {
+   return d_to_sfx (d, -__DA_FBIT__);
+ }
+ #endif // F7MOD_fractdfda_
+ 
+ #ifdef F7MOD_fractdfuda_
+ F7_WEAK
+ uint64_t __fractdfuda (f7_double_t d)
+ {
+   return d_to_ufx (d, __UDA_FBIT__);
+ }
+ #endif // F7MOD_fractdfuda_
+ 
+ #ifdef F7MOD_fractdfta_
+ F7_WEAK
+ int64_t __fractdfta (f7_double_t d)
+ {
+   return d_to_sfx (d, -__TA_FBIT__);
+ }
+ #endif // F7MOD_fractdfta_
+ 
+ #ifdef F7MOD_fractdfuta_
+ F7_WEAK
+ uint64_t __fractdfuta (f7_double_t d)
+ {
+   return d_to_ufx (d, __UTA_FBIT__);
+ }
+ #endif // F7MOD_fractdfuta_
+ 
+ #ifdef F7MOD_fractdfdq_
+ F7_WEAK
+ int64_t __fractdfdq (f7_double_t d)
+ {
+   return d_to_sfx (d, -__DQ_FBIT__);
+ }
+ #endif // F7MOD_fractdfdq_
+ 
+ #ifdef F7MOD_fractdfudq_
+ F7_WEAK
+ uint64_t __fractdfudq (f7_double_t d)
+ {
+   return d_to_ufx (d, __UDQ_FBIT__);
+ }
+ #endif // F7MOD_fractdfudq_
+ 
+ 
  #ifdef F7MOD_init_
  f7_t* f7_init_impl (uint64_t mant, uint8_t flags, f7_t *cc, int16_t expo)
  {
*************** f7_t* f7_set_s32 (f7_t *cc, int32_t i32)
*** 207,213 ****
    cc->flags = flags;
    return cc;
  }
- ALIAS (f7_set_s32, f7_floatsidf)
  #endif // F7MOD_set_s32_
  
  
--- 259,264 ----
*************** f7_t* f7_set_u32 (f7_t *cc, uint32_t u32
*** 219,225 ****
    cc->expo = 31;
    return f7_normalize_asm (cc);
  }
- ALIAS (f7_set_u32, f7_floatunsidf)
  #endif // F7MOD_set_u32_
  
  
--- 270,275 ----
*************** void f7_sub (f7_t *cc, const f7_t *aa, c
*** 918,923 ****
--- 968,988 ----
  #endif // F7MOD_sub_
  
  
+ #ifdef F7MOD_fdim_
+ F7_WEAK
+ void f7_fdim (f7_t *cc, const f7_t *aa, const f7_t *bb)
+ {
+   int8_t cmp = f7_cmp_unordered (aa, bb, true /*with_sign*/);
+   if (cmp == INT8_MIN)
+     return f7_set_nan (cc);
+   if (cmp < 0)
+     return f7_clr (cc);
+ 
+   f7_sub (cc, aa, bb);
+ }
+ #endif // F7MOD_fdim_
+ 
+ 
  #ifdef F7MOD_addsub_
  static void return_with_sign (f7_t *cc, const f7_t *aa, int8_t c_sign)
  {
*************** void f7_exp (f7_t *cc, const f7_t *aa)
*** 1639,1648 ****
      return f7_set_nan (cc);
  
    /* The maximal exponent of 2 for a double is 1023, hence we may limit
!      to  |A| < 1023 * ln2 ~ 709.  We limit to  1024 ~ 1.99 * 2^9  */
  
    if (f7_class_inf (a_class)
!       || (f7_class_nonzero (a_class) && aa->expo >= 9))
      {
        if (f7_class_sign (a_class))
  	return f7_clr (cc);
--- 1704,1713 ----
      return f7_set_nan (cc);
  
    /* The maximal exponent of 2 for a double is 1023, hence we may limit
!      to  |A| < 1023 * ln2 ~ 709.  We limit to  1024 = 2^10  */
  
    if (f7_class_inf (a_class)
!       || (f7_class_nonzero (a_class) && aa->expo >= 10))
      {
        if (f7_class_sign (a_class))
  	return f7_clr (cc);
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/libf7.h gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7.h
*** gcc-14.3.0/libgcc/config/avr/libf7/libf7.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/libf7.h	Fri Jun 19 06:51:06 2026
*************** extern void f7_cos (f7_t*, const f7_t*);
*** 608,613 ****
--- 608,614 ----
  extern void f7_tan (f7_t*, const f7_t*);
  extern void f7_atan (f7_t*, const f7_t*);
  extern void f7_atan2 (f7_t*, const f7_t*, const f7_t*);
+ extern void f7_fdim (f7_t*, const f7_t*, const f7_t*);
  extern void f7_asin (f7_t*, const f7_t*);
  extern void f7_acos (f7_t*, const f7_t*);
  extern void f7_tanh (f7_t*, const f7_t*);
diff -Nrcpad gcc-14.3.0/libgcc/config/avr/libf7/t-libf7 gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/t-libf7
*** gcc-14.3.0/libgcc/config/avr/libf7/t-libf7	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/avr/libf7/t-libf7	Fri Jun 19 06:51:06 2026
*************** F7_PREFIX = __f7_
*** 9,14 ****
--- 9,16 ----
  include $(libf7)/libf7-common.mk
  
  LIBF7_DF_CONV +=  floatundidf floatdidf # floatunsidf floatsidf
+ LIBF7_DF_CONV +=  fractdfda fractdfta fractdfdq
+ LIBF7_DF_CONV +=  fractdfuda fractdfuta fractdfudq
  
  # Wrappers like f7_lt_impl for f7_lt etc. because the latter is inline.
  LIBF7_DF_CMP  += lt le gt ge ne eq unord
diff -Nrcpad gcc-14.3.0/libgcc/config/libbid/ChangeLog gcc-14.3.0-RC-20260619/libgcc/config/libbid/ChangeLog
*** gcc-14.3.0/libgcc/config/libbid/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libgcc/config/libbid/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,29 ----
+ 2025-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Revert:
+ 	2025-08-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/120691
+ 	* bid128_div.c: Fix _Decimal128 arithmetic error under
+ 	FE_UPWARD.
+ 	* bid128_rem.c: Ditto.
+ 	* bid128_sqrt.c: Ditto.
+ 	* bid64_div.c (bid64_div): Ditto.
+ 	* bid64_sqrt.c (bid64_sqrt): Ditto.
+ 
+ 2025-08-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-08-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/120691
+ 	* bid128_div.c: Fix _Decimal128 arithmetic error under
+ 	FE_UPWARD.
+ 	* bid128_rem.c: Ditto.
+ 	* bid128_sqrt.c: Ditto.
+ 	* bid64_div.c (bid64_div): Ditto.
+ 	* bid64_sqrt.c (bid64_sqrt): Ditto.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libgomp/ChangeLog gcc-14.3.0-RC-20260619/libgomp/ChangeLog
*** gcc-14.3.0/libgomp/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libgomp/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,14 ----
+ 2026-04-02  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	* testsuite/libgomp.fortran/pr120286.f90: New test.
+ 
+ 2026-03-15  Frank Scheiner  <frank.scheiner@web.de>
+ 
+ 	Backported from master:
+ 	2025-11-25  Frank Scheiner  <frank.scheiner@web.de>
+ 
+ 	* affinity-fmt.c: Make char *q a pointer to a const char.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libgomp/affinity-fmt.c gcc-14.3.0-RC-20260619/libgomp/affinity-fmt.c
*** gcc-14.3.0/libgomp/affinity-fmt.c	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libgomp/affinity-fmt.c	Fri Jun 19 06:51:06 2026
*************** gomp_display_affinity (char *buffer, siz
*** 327,333 ****
  	      }
  	  if (c == '{')
  	    {
! 	      char *q = strchr (p + 1, '}');
  	      if (q)
  		gomp_fatal ("unsupported long type name '%.*s' in affinity "
  			    "format", (int) (q - (p + 1)), p + 1);
--- 327,333 ----
  	      }
  	  if (c == '{')
  	    {
! 	      const char *q = strchr (p + 1, '}');
  	      if (q)
  		gomp_fatal ("unsupported long type name '%.*s' in affinity "
  			    "format", (int) (q - (p + 1)), p + 1);
diff -Nrcpad gcc-14.3.0/libgomp/libgomp.info gcc-14.3.0-RC-20260619/libgomp/libgomp.info
*** gcc-14.3.0/libgomp/libgomp.info	Fri May 23 11:24:14 2025
--- gcc-14.3.0-RC-20260619/libgomp/libgomp.info	Fri Jun 19 07:11:10 2026
***************
*** 1,7 ****
! This is libgomp.info, produced by makeinfo version 6.5 from
  libgomp.texi.
  
! Copyright (C) 2006-2024 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
--- 1,7 ----
! This is libgomp.info, produced by makeinfo version 7.1 from
  libgomp.texi.
  
! Copyright © 2006-2024 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
*************** C/C++ and Fortran.
*** 33,39 ****
     Published by the Free Software Foundation 51 Franklin Street, Fifth
  Floor Boston, MA 02110-1301 USA
  
!    Copyright (C) 2006-2024 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
--- 33,39 ----
     Published by the Free Software Foundation 51 Franklin Street, Fifth
  Floor Boston, MA 02110-1301 USA
  
!    Copyright © 2006-2024 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
*************** software.  Copies published by the Free
*** 54,60 ****
  for GNU development.
  
  
! File: libgomp.info,  Node: Top,  Next: Enabling OpenMP
  
  Introduction
  ************
--- 54,60 ----
  for GNU development.
  
  
! File: libgomp.info,  Node: Top,  Next: Enabling OpenMP,  Up: (dir)
  
  Introduction
  ************
*************** File: libgomp.info,  Node: Enabling Open
*** 114,130 ****
  *****************
  
  To activate the OpenMP extensions for C/C++ and Fortran, the
! compile-time flag '-fopenmp' must be specified.  For C and C++, this
! enables the handling of the OpenMP directives using '#pragma omp' and
! the '[[omp::directive(...)]]', '[[omp::sequence(...)]]' and
! '[[omp::decl(...)]]' attributes.  For Fortran, it enables for free
! source form the '!$omp' sentinel for directives and the '!$' conditional
! compilation sentinel and for fixed source form the 'c$omp', '*$omp' and
! '!$omp' sentinels for directives and the 'c$', '*$' and '!$' conditional
  compilation sentinels.  The flag also arranges for automatic linking of
  the OpenMP runtime library (*note Runtime Library Routines::).
  
!    The '-fopenmp-simd' flag can be used to enable a subset of OpenMP
  directives that do not require the linking of either the OpenMP runtime
  library or the POSIX threads library.
  
--- 114,130 ----
  *****************
  
  To activate the OpenMP extensions for C/C++ and Fortran, the
! compile-time flag ‘-fopenmp’ must be specified.  For C and C++, this
! enables the handling of the OpenMP directives using ‘#pragma omp’ and
! the ‘[[omp::directive(...)]]’, ‘[[omp::sequence(...)]]’ and
! ‘[[omp::decl(...)]]’ attributes.  For Fortran, it enables for free
! source form the ‘!$omp’ sentinel for directives and the ‘!$’ conditional
! compilation sentinel and for fixed source form the ‘c$omp’, ‘*$omp’ and
! ‘!$omp’ sentinels for directives and the ‘c$’, ‘*$’ and ‘!$’ conditional
  compilation sentinels.  The flag also arranges for automatic linking of
  the OpenMP runtime library (*note Runtime Library Routines::).
  
!    The ‘-fopenmp-simd’ flag can be used to enable a subset of OpenMP
  directives that do not require the linking of either the OpenMP runtime
  library or the POSIX threads library.
  
*************** File: libgomp.info,  Node: OpenMP Implem
*** 146,154 ****
  * OpenMP 5.2:: Feature completion status to 5.2 specification
  * OpenMP Technical Report 12:: Feature completion status to second 6.0 preview
  
! The '_OPENMP' preprocessor macro and Fortran's 'openmp_version'
! parameter, provided by 'omp_lib.h' and the 'omp_lib' module, have the
! value '201511' (i.e.  OpenMP 4.5).
  
  
  File: libgomp.info,  Node: OpenMP 4.5,  Next: OpenMP 5.0,  Up: OpenMP Implementation Status
--- 146,154 ----
  * OpenMP 5.2:: Feature completion status to 5.2 specification
  * OpenMP Technical Report 12:: Feature completion status to second 6.0 preview
  
! The ‘_OPENMP’ preprocessor macro and Fortran's ‘openmp_version’
! parameter, provided by ‘omp_lib.h’ and the ‘omp_lib’ module, have the
! value ‘201511’ (i.e.  OpenMP 4.5).
  
  
  File: libgomp.info,  Node: OpenMP 4.5,  Next: OpenMP 5.0,  Up: OpenMP Implementation Status
*************** Array shaping
*** 173,258 ****
  Array sections with non-unit strides in C   N
  and C++
  Iterators                                   Y
! 'metadirective' directive                   N
! 'declare variant' directive                 P       _simd_ traits
                                                      not handled
                                                      correctly
  TARGET-OFFLOAD-VAR ICV and                  Y
! 'OMP_TARGET_OFFLOAD' env variable
  Nested-parallel changes to                  Y
  MAX-ACTIVE-LEVELS-VAR ICV
! 'requires' directive                        P       complete but no
                                                      non-host device
                                                      provides
!                                                     'unified_shared_memory'
! 'teams' construct outside an enclosing      Y
  target region
  Non-rectangular loop nests                  P       Full support for
                                                      C/C++, partial
                                                      for Fortran
                                                      (PR110735
                                                      (https://gcc.gnu.org/PR110735))
! '!=' as relational-op in canonical loop     Y
  form for C/C++
! 'nonmonotonic' as default loop schedule     Y
  modifier for worksharing-loop constructs
  Collapse of associated loops that are       Y
  imperfectly nested loops
! Clauses 'if', 'nontemporal' and             Y
! 'order(concurrent)' in 'simd' construct
! 'atomic' constructs in 'simd'               Y
! 'loop' construct                            Y
! 'order(concurrent)' clause                  Y
! 'scan' directive and 'in_scan' modifier     Y
! for the 'reduction' clause
! 'in_reduction' clause on 'task'             Y
  constructs
! 'in_reduction' clause on 'target'           P       'nowait' only
  constructs                                          stub
! 'task_reduction' clause with 'taskgroup'    Y
! 'task' modifier to 'reduction' clause       Y
! 'affinity' clause to 'task' construct       Y       Stub only
! 'detach' clause to 'task' construct         Y
! 'omp_fulfill_event' runtime routine         Y
! 'reduction' and 'in_reduction' clauses on   Y
! 'taskloop' and 'taskloop simd' constructs
! 'taskloop' construct cancelable by          Y
! 'cancel' construct
! 'mutexinoutset' _dependence-type_ for       Y
! 'depend' clause
  Predefined memory spaces, memory            Y       See also
  allocators, allocator traits                        *note Memory allocation::
  Memory management routines                  Y
! 'allocate' directive                        P       Only C for
                                                      stack/automatic
                                                      and Fortran for
                                                      stack/automatic
                                                      and
                                                      allocatable/pointer
                                                      variables
! 'allocate' clause                           P       Initial support
! 'use_device_addr' clause on 'target data'   Y
! 'ancestor' modifier on 'device' clause      Y
  Implicit declare target directive           Y
! Discontiguous array section with 'target    N
! update' construct
! C/C++'s lvalue expressions in 'to',         Y
! 'from' and 'map' clauses
! C/C++'s lvalue expressions in 'depend'      Y
  clauses
! Nested 'declare target' directive           Y
! Combined 'master' constructs                Y
! 'depend' clause on 'taskwait'               Y
! Weak memory ordering clauses on 'atomic'    Y
! and 'flush' construct
! 'hint' clause on the 'atomic' construct     Y       Stub only
! 'depobj' construct and depend objects       Y
  Lock hints were renamed to                  Y
  synchronization hints
! 'conditional' modifier to 'lastprivate'     Y
  clause
  Map-order clarifications                    P
! 'close' _map-type-modifier_                 Y
  Mapping C/C++ pointer variables and to      P
  assign the address of device memory
  mapped by an array section
--- 173,258 ----
  Array sections with non-unit strides in C   N
  and C++
  Iterators                                   Y
! ‘metadirective’ directive                   N
! ‘declare variant’ directive                 P       _simd_ traits
                                                      not handled
                                                      correctly
  TARGET-OFFLOAD-VAR ICV and                  Y
! ‘OMP_TARGET_OFFLOAD’ env variable
  Nested-parallel changes to                  Y
  MAX-ACTIVE-LEVELS-VAR ICV
! ‘requires’ directive                        P       complete but no
                                                      non-host device
                                                      provides
!                                                     ‘unified_shared_memory’
! ‘teams’ construct outside an enclosing      Y
  target region
  Non-rectangular loop nests                  P       Full support for
                                                      C/C++, partial
                                                      for Fortran
                                                      (PR110735
                                                      (https://gcc.gnu.org/PR110735))
! ‘!=’ as relational-op in canonical loop     Y
  form for C/C++
! ‘nonmonotonic’ as default loop schedule     Y
  modifier for worksharing-loop constructs
  Collapse of associated loops that are       Y
  imperfectly nested loops
! Clauses ‘if’, ‘nontemporal’ and             Y
! ‘order(concurrent)’ in ‘simd’ construct
! ‘atomic’ constructs in ‘simd’               Y
! ‘loop’ construct                            Y
! ‘order(concurrent)’ clause                  Y
! ‘scan’ directive and ‘in_scan’ modifier     Y
! for the ‘reduction’ clause
! ‘in_reduction’ clause on ‘task’             Y
  constructs
! ‘in_reduction’ clause on ‘target’           P       ‘nowait’ only
  constructs                                          stub
! ‘task_reduction’ clause with ‘taskgroup’    Y
! ‘task’ modifier to ‘reduction’ clause       Y
! ‘affinity’ clause to ‘task’ construct       Y       Stub only
! ‘detach’ clause to ‘task’ construct         Y
! ‘omp_fulfill_event’ runtime routine         Y
! ‘reduction’ and ‘in_reduction’ clauses on   Y
! ‘taskloop’ and ‘taskloop simd’ constructs
! ‘taskloop’ construct cancelable by          Y
! ‘cancel’ construct
! ‘mutexinoutset’ _dependence-type_ for       Y
! ‘depend’ clause
  Predefined memory spaces, memory            Y       See also
  allocators, allocator traits                        *note Memory allocation::
  Memory management routines                  Y
! ‘allocate’ directive                        P       Only C for
                                                      stack/automatic
                                                      and Fortran for
                                                      stack/automatic
                                                      and
                                                      allocatable/pointer
                                                      variables
! ‘allocate’ clause                           P       Initial support
! ‘use_device_addr’ clause on ‘target data’   Y
! ‘ancestor’ modifier on ‘device’ clause      Y
  Implicit declare target directive           Y
! Discontiguous array section with ‘target    N
! update’ construct
! C/C++'s lvalue expressions in ‘to’,         Y
! ‘from’ and ‘map’ clauses
! C/C++'s lvalue expressions in ‘depend’      Y
  clauses
! Nested ‘declare target’ directive           Y
! Combined ‘master’ constructs                Y
! ‘depend’ clause on ‘taskwait’               Y
! Weak memory ordering clauses on ‘atomic’    Y
! and ‘flush’ construct
! ‘hint’ clause on the ‘atomic’ construct     Y       Stub only
! ‘depobj’ construct and depend objects       Y
  Lock hints were renamed to                  Y
  synchronization hints
! ‘conditional’ modifier to ‘lastprivate’     Y
  clause
  Map-order clarifications                    P
! ‘close’ _map-type-modifier_                 Y
  Mapping C/C++ pointer variables and to      P
  assign the address of device memory
  mapped by an array section
*************** Mapping of Fortran pointer and
*** 260,274 ****
  allocatable variables, including pointer            with allocatable
  and allocatable components of variables             components
                                                      unsupported
! 'defaultmap' extensions                     Y
! 'declare mapper' directive                  N
! 'omp_get_supported_active_levels' routine   Y
  Runtime routines and environment            Y
  variables to display runtime thread
  affinity information
! 'omp_pause_resource' and                    Y
! 'omp_pause_resource_all' runtime routines
! 'omp_get_device_num' runtime routine        Y
  OMPT interface                              N
  OMPD interface                              N
  
--- 260,274 ----
  allocatable variables, including pointer            with allocatable
  and allocatable components of variables             components
                                                      unsupported
! ‘defaultmap’ extensions                     Y
! ‘declare mapper’ directive                  N
! ‘omp_get_supported_active_levels’ routine   Y
  Runtime routines and environment            Y
  variables to display runtime thread
  affinity information
! ‘omp_pause_resource’ and                    Y
! ‘omp_pause_resource_all’ runtime routines
! ‘omp_get_device_num’ runtime routine        Y
  OMPT interface                              N
  OMPD interface                              N
  
*************** Description
*** 292,373 ****
  -----------------------------------------------------------------------
  OpenMP directive as C++ attribute           Y
  specifiers
! 'omp_all_memory' reserved locator           Y
  _target_device trait_ in OpenMP Context     N
! 'target_device' selector set in context     N
  selectors
! C/C++'s 'declare variant' directive:        N
  elision support of preprocessed code
! 'declare variant': new clauses              N
! 'adjust_args' and 'append_args'
! 'dispatch' construct                        N
  device-specific ICV settings with           Y
  environment variables
! 'assume' and 'assumes' directives           Y
! 'nothing' directive                         Y
! 'error' directive                           Y
! 'masked' construct                          Y
! 'scope' directive                           Y
  Loop transformation constructs              N
! 'strict' modifier in the 'grainsize' and    Y
! 'num_tasks' clauses of the 'taskloop'
  construct
! 'align' clause in 'allocate' directive      P       Only C and
                                                      Fortran (and not
                                                      for static
                                                      variables)
! 'align' modifier in 'allocate' clause       Y
! 'thread_limit' clause to 'target'           Y
  construct
! 'has_device_addr' clause to 'target'        Y
  construct
! Iterators in 'target update' motion         N
! clauses and 'map' clauses
  Indirect calls to the device version of a   Y
! procedure or function in 'target' regions
! 'interop' directive                         N
! 'omp_interop_t' object support in runtime   N
  routines
! 'nowait' clause in 'taskwait' directive     Y
! Extensions to the 'atomic' directive        Y
! 'seq_cst' clause on a 'flush' construct     Y
! 'inoutset' argument to the 'depend'         Y
  clause
! 'private' and 'firstprivate' argument to    Y
! 'default' clause in C and C++
! 'present' argument to 'defaultmap' clause   Y
! 'omp_set_num_teams',                        Y
! 'omp_set_teams_thread_limit',
! 'omp_get_max_teams',
! 'omp_get_teams_thread_limit' runtime
  routines
! 'omp_target_is_accessible' runtime          Y
  routine
! 'omp_target_memcpy_async' and               Y
! 'omp_target_memcpy_rect_async' runtime
  routines
! 'omp_get_mapped_ptr' runtime routine        Y
! 'omp_calloc', 'omp_realloc',                Y
! 'omp_aligned_alloc' and
! 'omp_aligned_calloc' runtime routines
! 'omp_alloctrait_key_t' enum:                Y
! 'omp_atv_serialized' added,
! 'omp_atv_default' changed
! 'omp_display_env' runtime routine           Y
! 'ompt_scope_endpoint_t' enum:               N
! 'ompt_scope_beginend'
! 'ompt_sync_region_t' enum additions         N
! 'ompt_state_t' enum:                        N
! 'ompt_state_wait_barrier_implementation'
! and 'ompt_state_wait_barrier_teams'
! 'ompt_callback_target_data_op_emi_t',       N
! 'ompt_callback_target_emi_t',
! 'ompt_callback_target_map_emi_t' and
! 'ompt_callback_target_submit_emi_t'
! 'ompt_callback_error_t' type                N
! 'OMP_PLACES' syntax extensions              Y
! 'OMP_NUM_TEAMS' and                         Y
! 'OMP_TEAMS_THREAD_LIMIT' environment
  variables
  
  Other new OpenMP 5.1 features
--- 292,373 ----
  -----------------------------------------------------------------------
  OpenMP directive as C++ attribute           Y
  specifiers
! ‘omp_all_memory’ reserved locator           Y
  _target_device trait_ in OpenMP Context     N
! ‘target_device’ selector set in context     N
  selectors
! C/C++'s ‘declare variant’ directive:        N
  elision support of preprocessed code
! ‘declare variant’: new clauses              N
! ‘adjust_args’ and ‘append_args’
! ‘dispatch’ construct                        N
  device-specific ICV settings with           Y
  environment variables
! ‘assume’ and ‘assumes’ directives           Y
! ‘nothing’ directive                         Y
! ‘error’ directive                           Y
! ‘masked’ construct                          Y
! ‘scope’ directive                           Y
  Loop transformation constructs              N
! ‘strict’ modifier in the ‘grainsize’ and    Y
! ‘num_tasks’ clauses of the ‘taskloop’
  construct
! ‘align’ clause in ‘allocate’ directive      P       Only C and
                                                      Fortran (and not
                                                      for static
                                                      variables)
! ‘align’ modifier in ‘allocate’ clause       Y
! ‘thread_limit’ clause to ‘target’           Y
  construct
! ‘has_device_addr’ clause to ‘target’        Y
  construct
! Iterators in ‘target update’ motion         N
! clauses and ‘map’ clauses
  Indirect calls to the device version of a   Y
! procedure or function in ‘target’ regions
! ‘interop’ directive                         N
! ‘omp_interop_t’ object support in runtime   N
  routines
! ‘nowait’ clause in ‘taskwait’ directive     Y
! Extensions to the ‘atomic’ directive        Y
! ‘seq_cst’ clause on a ‘flush’ construct     Y
! ‘inoutset’ argument to the ‘depend’         Y
  clause
! ‘private’ and ‘firstprivate’ argument to    Y
! ‘default’ clause in C and C++
! ‘present’ argument to ‘defaultmap’ clause   Y
! ‘omp_set_num_teams’,                        Y
! ‘omp_set_teams_thread_limit’,
! ‘omp_get_max_teams’,
! ‘omp_get_teams_thread_limit’ runtime
  routines
! ‘omp_target_is_accessible’ runtime          Y
  routine
! ‘omp_target_memcpy_async’ and               Y
! ‘omp_target_memcpy_rect_async’ runtime
  routines
! ‘omp_get_mapped_ptr’ runtime routine        Y
! ‘omp_calloc’, ‘omp_realloc’,                Y
! ‘omp_aligned_alloc’ and
! ‘omp_aligned_calloc’ runtime routines
! ‘omp_alloctrait_key_t’ enum:                Y
! ‘omp_atv_serialized’ added,
! ‘omp_atv_default’ changed
! ‘omp_display_env’ runtime routine           Y
! ‘ompt_scope_endpoint_t’ enum:               N
! ‘ompt_scope_beginend’
! ‘ompt_sync_region_t’ enum additions         N
! ‘ompt_state_t’ enum:                        N
! ‘ompt_state_wait_barrier_implementation’
! and ‘ompt_state_wait_barrier_teams’
! ‘ompt_callback_target_data_op_emi_t’,       N
! ‘ompt_callback_target_emi_t’,
! ‘ompt_callback_target_map_emi_t’ and
! ‘ompt_callback_target_submit_emi_t’
! ‘ompt_callback_error_t’ type                N
! ‘OMP_PLACES’ syntax extensions              Y
! ‘OMP_NUM_TEAMS’ and                         Y
! ‘OMP_TEAMS_THREAD_LIMIT’ environment
  variables
  
  Other new OpenMP 5.1 features
*************** Support of strictly structured blocks in
*** 379,402 ****
  Fortran
  Support of structured block sequences in    Y
  C/C++
! 'unconstrained' and 'reproducible'          Y
! modifiers on 'order' clause
! Support 'begin/end declare target' syntax   Y
  in C/C++
  Pointer predetermined firstprivate          N
  getting initialized to address of
  matching mapped list item per 5.1, Sect.
  2.21.7.2
  For Fortran, diagnose placing declarative   N
! before/between 'USE', 'IMPORT', and
! 'IMPLICIT' as invalid
  Optional comma between directive and        Y
! clause in the '#pragma' form
! 'indirect' clause in 'declare target'       Y
! 'device_type(nohost)'/'device_type(host)'   N
  for variables
! 'present' modifier to the 'map', 'to' and   Y
! 'from' clauses
  
  
  File: libgomp.info,  Node: OpenMP 5.2,  Next: OpenMP Technical Report 12,  Prev: OpenMP 5.1,  Up: OpenMP Implementation Status
--- 379,402 ----
  Fortran
  Support of structured block sequences in    Y
  C/C++
! ‘unconstrained’ and ‘reproducible’          Y
! modifiers on ‘order’ clause
! Support ‘begin/end declare target’ syntax   Y
  in C/C++
  Pointer predetermined firstprivate          N
  getting initialized to address of
  matching mapped list item per 5.1, Sect.
  2.21.7.2
  For Fortran, diagnose placing declarative   N
! before/between ‘USE’, ‘IMPORT’, and
! ‘IMPLICIT’ as invalid
  Optional comma between directive and        Y
! clause in the ‘#pragma’ form
! ‘indirect’ clause in ‘declare target’       Y
! ‘device_type(nohost)’/‘device_type(host)’   N
  for variables
! ‘present’ modifier to the ‘map’, ‘to’ and   Y
! ‘from’ clauses
  
  
  File: libgomp.info,  Node: OpenMP 5.2,  Next: OpenMP Technical Report 12,  Prev: OpenMP 5.1,  Up: OpenMP Implementation Status
*************** New features listed in Appendix B of the
*** 409,470 ****
  
  Description                                 Status  Comments
  -----------------------------------------------------------------------
! 'omp_in_explicit_task' routine and          Y
  EXPLICIT-TASK-VAR ICV
! 'omp'/'ompx'/'omx' sentinels and            N/A     warning for
! 'omp_'/'ompx_' namespaces                           'ompx/omx'
                                                      sentinels(1)
! Clauses on 'end' directive can be on        Y
  directive
! 'destroy' clause with destroy-var           Y
! argument on 'depobj'
! Deprecation of no-argument 'destroy'        N
! clause on 'depobj'
! 'linear' clause syntax changes and 'step'   Y
  modifier
  Deprecation of minus operator for           N
  reductions
! Deprecation of separating 'map' modifiers   N
  without comma
! 'declare mapper' with iterator and          N
! 'present' modifiers
  If a matching mapped list item is not       Y
  found in the data environment, the
  pointer retains its original value
! New 'enter' clause as alias for 'to' on     Y
  declare target directive
! Deprecation of 'to' clause on declare       N
  target directive
  Extended list of directives permitted in    Y
  Fortran pure procedures
! New 'allocators' directive for Fortran      Y
! Deprecation of 'allocate' directive for     N
  Fortran allocatables/pointers
! Optional paired 'end' directive with        N
! 'dispatch'
! New 'memspace' and 'traits' modifiers for   N
! 'uses_allocators'
  Deprecation of traits array following the   N
  allocator_handle expression in
! 'uses_allocators'
! New 'otherwise' clause as alias for         N
! 'default' on metadirectives
! Deprecation of 'default' clause on          N
  metadirectives
! Deprecation of delimited form of 'declare   N
! target'
  Reproducible semantics changed for          N
! 'order(concurrent)'
! 'allocate' and 'firstprivate' clauses on    Y
! 'scope'
! 'ompt_callback_work'                        N
! Default map-type for the 'map' clause in    Y
! 'target enter/exit data'
! New 'doacross' clause as alias for          Y
! 'depend' with 'source'/'sink' modifier
! Deprecation of 'depend' with                N
! 'source'/'sink' modifier
! 'omp_cur_iteration' keyword                 Y
  
  Other new OpenMP 5.2 features
  -----------------------------
--- 409,470 ----
  
  Description                                 Status  Comments
  -----------------------------------------------------------------------
! ‘omp_in_explicit_task’ routine and          Y
  EXPLICIT-TASK-VAR ICV
! ‘omp’/‘ompx’/‘omx’ sentinels and            N/A     warning for
! ‘omp_’/‘ompx_’ namespaces                           ‘ompx/omx’
                                                      sentinels(1)
! Clauses on ‘end’ directive can be on        Y
  directive
! ‘destroy’ clause with destroy-var           Y
! argument on ‘depobj’
! Deprecation of no-argument ‘destroy’        N
! clause on ‘depobj’
! ‘linear’ clause syntax changes and ‘step’   Y
  modifier
  Deprecation of minus operator for           N
  reductions
! Deprecation of separating ‘map’ modifiers   N
  without comma
! ‘declare mapper’ with iterator and          N
! ‘present’ modifiers
  If a matching mapped list item is not       Y
  found in the data environment, the
  pointer retains its original value
! New ‘enter’ clause as alias for ‘to’ on     Y
  declare target directive
! Deprecation of ‘to’ clause on declare       N
  target directive
  Extended list of directives permitted in    Y
  Fortran pure procedures
! New ‘allocators’ directive for Fortran      Y
! Deprecation of ‘allocate’ directive for     N
  Fortran allocatables/pointers
! Optional paired ‘end’ directive with        N
! ‘dispatch’
! New ‘memspace’ and ‘traits’ modifiers for   N
! ‘uses_allocators’
  Deprecation of traits array following the   N
  allocator_handle expression in
! ‘uses_allocators’
! New ‘otherwise’ clause as alias for         N
! ‘default’ on metadirectives
! Deprecation of ‘default’ clause on          N
  metadirectives
! Deprecation of delimited form of ‘declare   N
! target’
  Reproducible semantics changed for          N
! ‘order(concurrent)’
! ‘allocate’ and ‘firstprivate’ clauses on    Y
! ‘scope’
! ‘ompt_callback_work’                        N
! Default map-type for the ‘map’ clause in    Y
! ‘target enter/exit data’
! New ‘doacross’ clause as alias for          Y
! ‘depend’ with ‘source’/‘sink’ modifier
! Deprecation of ‘depend’ with                N
! ‘source’/‘sink’ modifier
! ‘omp_cur_iteration’ keyword                 Y
  
  Other new OpenMP 5.2 features
  -----------------------------
*************** Description
*** 474,499 ****
  For Fortran, optional comma between         N
  directive and clause
  Conforming device numbers and               Y
! 'omp_initial_device' and
! 'omp_invalid_device' enum/PARAMETER
  Initial value of DEFAULT-DEVICE-VAR ICV     Y
! with 'OMP_TARGET_OFFLOAD=mandatory'
! 'all' as _implicit-behavior_ for            Y
! 'defaultmap'
  _interop_types_ in any position of the      N
! modifier list for the 'init' clause of
! the 'interop' construct
  Invoke virtual member functions of C++      N
  objects created on the host device on
  other devices
  
     ---------- Footnotes ----------
  
!    (1) The 'ompx' sentinel as C/C++ pragma and C++ attributes are warned
! for with '-Wunknown-pragmas' (implied by '-Wall') and '-Wattributes'
  (enabled by default), respectively; for Fortran free-source code, there
! is a warning enabled by default and, for fixed-source code, the 'omx'
! sentinel is warned for with '-Wsurprising' (enabled by '-Wall').
  Unknown clauses are always rejected with an error.
  
  
--- 474,499 ----
  For Fortran, optional comma between         N
  directive and clause
  Conforming device numbers and               Y
! ‘omp_initial_device’ and
! ‘omp_invalid_device’ enum/PARAMETER
  Initial value of DEFAULT-DEVICE-VAR ICV     Y
! with ‘OMP_TARGET_OFFLOAD=mandatory’
! ‘all’ as _implicit-behavior_ for            Y
! ‘defaultmap’
  _interop_types_ in any position of the      N
! modifier list for the ‘init’ clause of
! the ‘interop’ construct
  Invoke virtual member functions of C++      N
  objects created on the host device on
  other devices
  
     ---------- Footnotes ----------
  
!    (1) The ‘ompx’ sentinel as C/C++ pragma and C++ attributes are warned
! for with ‘-Wunknown-pragmas’ (implied by ‘-Wall’) and ‘-Wattributes’
  (enabled by default), respectively; for Fortran free-source code, there
! is a warning enabled by default and, for fixed-source code, the ‘omx’
! sentinel is warned for with ‘-Wsurprising’ (enabled by ‘-Wall’).
  Unknown clauses are always rejected with an error.
  
  
*************** Features deprecated in versions 5.2, 5.1
*** 511,527 ****
  and 5.0 were removed                                compatibility
  Full support for C23 was added              P
  Full support for C++23 was added            P
! '_ALL' suffix to the device-scope           P       Host device
  environment variables                               number wrongly
                                                      accepted
! 'num_threads' now accepts a list            N
  Supporting increments with abstract names   N
! in 'OMP_PLACES'
! Extension of 'OMP_DEFAULT_DEVICE' and new   N
! 'OMP_AVAILABLE_DEVICES' environment vars
! New 'OMP_THREADS_RESERVE' environment       N
  variable
! The 'decl' attribute was added to the C++   Y
  attribute syntax
  The OpenMP directive syntax was extended    Y
  to include C 23 attribute specifiers
--- 511,527 ----
  and 5.0 were removed                                compatibility
  Full support for C23 was added              P
  Full support for C++23 was added            P
! ‘_ALL’ suffix to the device-scope           P       Host device
  environment variables                               number wrongly
                                                      accepted
! ‘num_threads’ now accepts a list            N
  Supporting increments with abstract names   N
! in ‘OMP_PLACES’
! Extension of ‘OMP_DEFAULT_DEVICE’ and new   N
! ‘OMP_AVAILABLE_DEVICES’ environment vars
! New ‘OMP_THREADS_RESERVE’ environment       N
  variable
! The ‘decl’ attribute was added to the C++   Y
  attribute syntax
  The OpenMP directive syntax was extended    Y
  to include C 23 attribute specifiers
*************** and, for C/C++, with unlimited curly
*** 539,612 ****
  braces supported
  For Fortran, atomic compare with storing    N
  the comparison result
! New 'looprange' clause                      N
  Ref-count change for                        N
! 'use_device_ptr'/'use_device_addr'
  Support for inductions                      N
  Implicit reduction identifiers of C++       N
  classes
  Change of the _map-type_ property from      N
  _ultimate_ to _default_
! 'self' modifier to 'map' and 'self' as      N
! 'defaultmap' argument
  Mapping of _assumed-size arrays_ in C,      N
  C++ and Fortran
! 'groupprivate' directive                    N
! 'local' clause to 'declare target'          N
  directive
! 'part_size' allocator trait                 N
! 'pin_device', 'preferred_device' and        N
! 'target_access' allocator traits
! 'access' allocator trait changes            N
! Extension of 'interop' operation of         N
! 'append_args', allowing all modifiers of
! the 'init' clause
! 'interop' clause to 'dispatch'              N
! 'message' and 'severity' clauses to         N
! 'parallel' directive
! 'self' clause to 'requires' directive       N
! 'no_openmp_constructs' assumptions clause   N
! 'reverse' loop-transformation construct     N
! 'interchange' loop-transformation           N
  construct
! 'fuse' loop-transformation construct        N
! 'apply' code to loop-transforming           N
  constructs
! 'omp_curr_progress_width' identifier        N
! 'safesync' clause to the 'parallel'         N
  construct
! 'omp_get_max_progress_width' runtime        N
  routine
! 'strict' modifier keyword to                N
! 'num_threads'
! 'atomic' permitted in a construct with      N
! 'order(concurrent)'
! 'workdistribute' directive for Fortran      N       Renamed just
                                                      after TR12;
                                                      added in TR12 as
!                                                     'coexecute'
  Fortran DO CONCURRENT as associated loop    N
! in a 'loop' construct
! 'threadset' clause in task-generating       N
  constructs
! 'nowait' clause with reverse-offload        N
! 'target' directives
! Boolean argument to 'nowait' and            N
! 'nogroup' may be non constant
! 'memscope' clause to 'atomic' and 'flush'   N
! 'omp_is_free_agent' and                     N
! 'omp_ancestor_is_free_agent' routines
! 'omp_target_memset' and                     N
! 'omp_target_memset_rect_async' routines
  Routines for obtaining memory               N
  spaces/allocators for shared/device
  memory
! 'omp_get_memspace_num_resources' routine    N
! 'omp_get_submemspace' routine               N
! 'ompt_target_data_transfer' and             N
! 'ompt_target_data_transfer_async' values
! in 'ompt_target_data_op_t' enum
! 'ompt_get_buffer_limits' OMPT routine       N
  
  Other new TR 12 features
  ------------------------
--- 539,612 ----
  braces supported
  For Fortran, atomic compare with storing    N
  the comparison result
! New ‘looprange’ clause                      N
  Ref-count change for                        N
! ‘use_device_ptr’/‘use_device_addr’
  Support for inductions                      N
  Implicit reduction identifiers of C++       N
  classes
  Change of the _map-type_ property from      N
  _ultimate_ to _default_
! ‘self’ modifier to ‘map’ and ‘self’ as      N
! ‘defaultmap’ argument
  Mapping of _assumed-size arrays_ in C,      N
  C++ and Fortran
! ‘groupprivate’ directive                    N
! ‘local’ clause to ‘declare target’          N
  directive
! ‘part_size’ allocator trait                 N
! ‘pin_device’, ‘preferred_device’ and        N
! ‘target_access’ allocator traits
! ‘access’ allocator trait changes            N
! Extension of ‘interop’ operation of         N
! ‘append_args’, allowing all modifiers of
! the ‘init’ clause
! ‘interop’ clause to ‘dispatch’              N
! ‘message’ and ‘severity’ clauses to         N
! ‘parallel’ directive
! ‘self’ clause to ‘requires’ directive       N
! ‘no_openmp_constructs’ assumptions clause   N
! ‘reverse’ loop-transformation construct     N
! ‘interchange’ loop-transformation           N
  construct
! ‘fuse’ loop-transformation construct        N
! ‘apply’ code to loop-transforming           N
  constructs
! ‘omp_curr_progress_width’ identifier        N
! ‘safesync’ clause to the ‘parallel’         N
  construct
! ‘omp_get_max_progress_width’ runtime        N
  routine
! ‘strict’ modifier keyword to                N
! ‘num_threads’
! ‘atomic’ permitted in a construct with      N
! ‘order(concurrent)’
! ‘workdistribute’ directive for Fortran      N       Renamed just
                                                      after TR12;
                                                      added in TR12 as
!                                                     ‘coexecute’
  Fortran DO CONCURRENT as associated loop    N
! in a ‘loop’ construct
! ‘threadset’ clause in task-generating       N
  constructs
! ‘nowait’ clause with reverse-offload        N
! ‘target’ directives
! Boolean argument to ‘nowait’ and            N
! ‘nogroup’ may be non constant
! ‘memscope’ clause to ‘atomic’ and ‘flush’   N
! ‘omp_is_free_agent’ and                     N
! ‘omp_ancestor_is_free_agent’ routines
! ‘omp_target_memset’ and                     N
! ‘omp_target_memset_rect_async’ routines
  Routines for obtaining memory               N
  spaces/allocators for shared/device
  memory
! ‘omp_get_memspace_num_resources’ routine    N
! ‘omp_get_submemspace’ routine               N
! ‘ompt_target_data_transfer’ and             N
! ‘ompt_target_data_transfer_async’ values
! in ‘ompt_target_data_op_t’ enum
! ‘ompt_get_buffer_limits’ OMPT routine       N
  
  Other new TR 12 features
  ------------------------
*************** Canonical loop nest enclosed in
*** 615,623 ****
  (multiple) curly braces (C/C++) or BLOCK
  constructs (Fortran)
  Relaxed Fortran restrictions to the         N
! 'aligned' clause
  Mapping lambda captures                     N
! New 'omp_pause_stop_tool' constant for      N
  omp_pause_resource
  
  
--- 615,623 ----
  (multiple) curly braces (C/C++) or BLOCK
  constructs (Fortran)
  Relaxed Fortran restrictions to the         N
! ‘aligned’ clause
  Mapping lambda captures                     N
! New ‘omp_pause_stop_tool’ constant for      N
  omp_pause_resource
  
  
*************** C linkage and do not throw exceptions.
*** 679,698 ****
  
  File: libgomp.info,  Node: omp_set_num_threads,  Next: omp_get_num_threads,  Up: Thread Team Routines
  
! 3.1.1 'omp_set_num_threads' - Set upper team size limit
  -------------------------------------------------------
  
  _Description_:
       Specifies the number of threads used by default in subsequent
!      parallel sections, if those do not specify a 'num_threads' clause.
!      The argument of 'omp_set_num_threads' shall be a positive integer.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_num_threads(int num_threads);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_num_threads(num_threads)'
!                     'integer, intent(in) :: num_threads'
  
  _See also_:
       *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
--- 679,698 ----
  
  File: libgomp.info,  Node: omp_set_num_threads,  Next: omp_get_num_threads,  Up: Thread Team Routines
  
! 3.1.1 ‘omp_set_num_threads’ - Set upper team size limit
  -------------------------------------------------------
  
  _Description_:
       Specifies the number of threads used by default in subsequent
!      parallel sections, if those do not specify a ‘num_threads’ clause.
!      The argument of ‘omp_set_num_threads’ shall be a positive integer.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_num_threads(int num_threads);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_num_threads(num_threads)’
!                     ‘integer, intent(in) :: num_threads’
  
  _See also_:
       *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
*************** _Reference_:
*** 704,728 ****
  
  File: libgomp.info,  Node: omp_get_num_threads,  Next: omp_get_max_threads,  Prev: omp_set_num_threads,  Up: Thread Team Routines
  
! 3.1.2 'omp_get_num_threads' - Size of the active team
  -----------------------------------------------------
  
  _Description_:
       Returns the number of threads in the current team.  In a sequential
!      section of the program 'omp_get_num_threads' returns 1.
  
       The default team size may be initialized at startup by the
!      'OMP_NUM_THREADS' environment variable.  At runtime, the size of
!      the current team may be set either by the 'NUM_THREADS' clause or
!      by 'omp_set_num_threads'.  If none of the above were used to define
!      a specific value and 'OMP_DYNAMIC' is disabled, one thread per CPU
       online is used.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_num_threads(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_num_threads()'
  
  _See also_:
       *note omp_get_max_threads::, *note omp_set_num_threads::, *note
--- 704,728 ----
  
  File: libgomp.info,  Node: omp_get_num_threads,  Next: omp_get_max_threads,  Prev: omp_set_num_threads,  Up: Thread Team Routines
  
! 3.1.2 ‘omp_get_num_threads’ - Size of the active team
  -----------------------------------------------------
  
  _Description_:
       Returns the number of threads in the current team.  In a sequential
!      section of the program ‘omp_get_num_threads’ returns 1.
  
       The default team size may be initialized at startup by the
!      ‘OMP_NUM_THREADS’ environment variable.  At runtime, the size of
!      the current team may be set either by the ‘NUM_THREADS’ clause or
!      by ‘omp_set_num_threads’.  If none of the above were used to define
!      a specific value and ‘OMP_DYNAMIC’ is disabled, one thread per CPU
       online is used.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_num_threads(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_num_threads()’
  
  _See also_:
       *note omp_get_max_threads::, *note omp_set_num_threads::, *note
*************** _Reference_:
*** 734,751 ****
  
  File: libgomp.info,  Node: omp_get_max_threads,  Next: omp_get_thread_num,  Prev: omp_get_num_threads,  Up: Thread Team Routines
  
! 3.1.3 'omp_get_max_threads' - Maximum number of threads of parallel region
  --------------------------------------------------------------------------
  
  _Description_:
       Return the maximum number of threads used for the current parallel
!      region that does not use the clause 'num_threads'.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_max_threads(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_max_threads()'
  
  _See also_:
       *note omp_set_num_threads::, *note omp_set_dynamic::, *note
--- 734,751 ----
  
  File: libgomp.info,  Node: omp_get_max_threads,  Next: omp_get_thread_num,  Prev: omp_get_num_threads,  Up: Thread Team Routines
  
! 3.1.3 ‘omp_get_max_threads’ - Maximum number of threads of parallel region
  --------------------------------------------------------------------------
  
  _Description_:
       Return the maximum number of threads used for the current parallel
!      region that does not use the clause ‘num_threads’.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_max_threads(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_max_threads()’
  
  _See also_:
       *note omp_set_num_threads::, *note omp_set_dynamic::, *note
*************** _Reference_:
*** 757,777 ****
  
  File: libgomp.info,  Node: omp_get_thread_num,  Next: omp_in_parallel,  Prev: omp_get_max_threads,  Up: Thread Team Routines
  
! 3.1.4 'omp_get_thread_num' - Current thread ID
  ----------------------------------------------
  
  _Description_:
       Returns a unique thread identification number within the current
!      team.  In a sequential parts of the program, 'omp_get_thread_num'
       always returns 0.  In parallel regions the return value varies from
!      0 to 'omp_get_num_threads'-1 inclusive.  The return value of the
       primary thread of a team is always 0.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_thread_num(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_thread_num()'
  
  _See also_:
       *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
--- 757,777 ----
  
  File: libgomp.info,  Node: omp_get_thread_num,  Next: omp_in_parallel,  Prev: omp_get_max_threads,  Up: Thread Team Routines
  
! 3.1.4 ‘omp_get_thread_num’ - Current thread ID
  ----------------------------------------------
  
  _Description_:
       Returns a unique thread identification number within the current
!      team.  In a sequential parts of the program, ‘omp_get_thread_num’
       always returns 0.  In parallel regions the return value varies from
!      0 to ‘omp_get_num_threads’-1 inclusive.  The return value of the
       primary thread of a team is always 0.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_thread_num(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_thread_num()’
  
  _See also_:
       *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
*************** _Reference_:
*** 782,800 ****
  
  File: libgomp.info,  Node: omp_in_parallel,  Next: omp_set_dynamic,  Prev: omp_get_thread_num,  Up: Thread Team Routines
  
! 3.1.5 'omp_in_parallel' - Whether a parallel region is active
  -------------------------------------------------------------
  
  _Description_:
!      This function returns 'true' if currently running in parallel,
!      'false' otherwise.  Here, 'true' and 'false' represent their
       language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   'int omp_in_parallel(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_in_parallel()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.6.
--- 782,800 ----
  
  File: libgomp.info,  Node: omp_in_parallel,  Next: omp_set_dynamic,  Prev: omp_get_thread_num,  Up: Thread Team Routines
  
! 3.1.5 ‘omp_in_parallel’ - Whether a parallel region is active
  -------------------------------------------------------------
  
  _Description_:
!      This function returns ‘true’ if currently running in parallel,
!      ‘false’ otherwise.  Here, ‘true’ and ‘false’ represent their
       language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_in_parallel(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_in_parallel()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.6.
*************** _Reference_:
*** 802,822 ****
  
  File: libgomp.info,  Node: omp_set_dynamic,  Next: omp_get_dynamic,  Prev: omp_in_parallel,  Up: Thread Team Routines
  
! 3.1.6 'omp_set_dynamic' - Enable/disable dynamic teams
  ------------------------------------------------------
  
  _Description_:
       Enable or disable the dynamic adjustment of the number of threads
       within a team.  The function takes the language-specific equivalent
!      of 'true' and 'false', where 'true' enables dynamic adjustment of
!      team sizes and 'false' disables it.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_dynamic(int dynamic_threads);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_dynamic(dynamic_threads)'
!                     'logical, intent(in) :: dynamic_threads'
  
  _See also_:
       *note OMP_DYNAMIC::, *note omp_get_dynamic::
--- 802,822 ----
  
  File: libgomp.info,  Node: omp_set_dynamic,  Next: omp_get_dynamic,  Prev: omp_in_parallel,  Up: Thread Team Routines
  
! 3.1.6 ‘omp_set_dynamic’ - Enable/disable dynamic teams
  ------------------------------------------------------
  
  _Description_:
       Enable or disable the dynamic adjustment of the number of threads
       within a team.  The function takes the language-specific equivalent
!      of ‘true’ and ‘false’, where ‘true’ enables dynamic adjustment of
!      team sizes and ‘false’ disables it.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_dynamic(int dynamic_threads);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_dynamic(dynamic_threads)’
!                     ‘logical, intent(in) :: dynamic_threads’
  
  _See also_:
       *note OMP_DYNAMIC::, *note omp_get_dynamic::
*************** _Reference_:
*** 827,849 ****
  
  File: libgomp.info,  Node: omp_get_dynamic,  Next: omp_get_cancellation,  Prev: omp_set_dynamic,  Up: Thread Team Routines
  
! 3.1.7 'omp_get_dynamic' - Dynamic teams setting
  -----------------------------------------------
  
  _Description_:
!      This function returns 'true' if enabled, 'false' otherwise.  Here,
!      'true' and 'false' represent their language-specific counterparts.
  
       The dynamic team setting may be initialized at startup by the
!      'OMP_DYNAMIC' environment variable or at runtime using
!      'omp_set_dynamic'.  If undefined, dynamic adjustment is disabled by
       default.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_dynamic(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_get_dynamic()'
  
  _See also_:
       *note omp_set_dynamic::, *note OMP_DYNAMIC::
--- 827,849 ----
  
  File: libgomp.info,  Node: omp_get_dynamic,  Next: omp_get_cancellation,  Prev: omp_set_dynamic,  Up: Thread Team Routines
  
! 3.1.7 ‘omp_get_dynamic’ - Dynamic teams setting
  -----------------------------------------------
  
  _Description_:
!      This function returns ‘true’ if enabled, ‘false’ otherwise.  Here,
!      ‘true’ and ‘false’ represent their language-specific counterparts.
  
       The dynamic team setting may be initialized at startup by the
!      ‘OMP_DYNAMIC’ environment variable or at runtime using
!      ‘omp_set_dynamic’.  If undefined, dynamic adjustment is disabled by
       default.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_dynamic(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_get_dynamic()’
  
  _See also_:
       *note omp_set_dynamic::, *note OMP_DYNAMIC::
*************** _Reference_:
*** 854,873 ****
  
  File: libgomp.info,  Node: omp_get_cancellation,  Next: omp_set_nested,  Prev: omp_get_dynamic,  Up: Thread Team Routines
  
! 3.1.8 'omp_get_cancellation' - Whether cancellation support is enabled
  ----------------------------------------------------------------------
  
  _Description_:
!      This function returns 'true' if cancellation is activated, 'false'
!      otherwise.  Here, 'true' and 'false' represent their
!      language-specific counterparts.  Unless 'OMP_CANCELLATION' is set
       true, cancellations are deactivated.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_cancellation(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_get_cancellation()'
  
  _See also_:
       *note OMP_CANCELLATION::
--- 854,873 ----
  
  File: libgomp.info,  Node: omp_get_cancellation,  Next: omp_set_nested,  Prev: omp_get_dynamic,  Up: Thread Team Routines
  
! 3.1.8 ‘omp_get_cancellation’ - Whether cancellation support is enabled
  ----------------------------------------------------------------------
  
  _Description_:
!      This function returns ‘true’ if cancellation is activated, ‘false’
!      otherwise.  Here, ‘true’ and ‘false’ represent their
!      language-specific counterparts.  Unless ‘OMP_CANCELLATION’ is set
       true, cancellations are deactivated.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_cancellation(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_get_cancellation()’
  
  _See also_:
       *note OMP_CANCELLATION::
*************** _Reference_:
*** 878,906 ****
  
  File: libgomp.info,  Node: omp_set_nested,  Next: omp_get_nested,  Prev: omp_get_cancellation,  Up: Thread Team Routines
  
! 3.1.9 'omp_set_nested' - Enable/disable nested parallel regions
  ---------------------------------------------------------------
  
  _Description_:
       Enable or disable nested parallel regions, i.e., whether team
       members are allowed to create new teams.  The function takes the
!      language-specific equivalent of 'true' and 'false', where 'true'
!      enables dynamic adjustment of team sizes and 'false' disables it.
  
       Enabling nested parallel regions also sets the maximum number of
       active nested regions to the maximum supported.  Disabling nested
       parallel regions sets the maximum number of active nested regions
       to one.
  
!      Note that the 'omp_set_nested' API routine was deprecated in the
!      OpenMP specification 5.2 in favor of 'omp_set_max_active_levels'.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_nested(int nested);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_nested(nested)'
!                     'logical, intent(in) :: nested'
  
  _See also_:
       *note omp_get_nested::, *note omp_set_max_active_levels::, *note
--- 878,906 ----
  
  File: libgomp.info,  Node: omp_set_nested,  Next: omp_get_nested,  Prev: omp_get_cancellation,  Up: Thread Team Routines
  
! 3.1.9 ‘omp_set_nested’ - Enable/disable nested parallel regions
  ---------------------------------------------------------------
  
  _Description_:
       Enable or disable nested parallel regions, i.e., whether team
       members are allowed to create new teams.  The function takes the
!      language-specific equivalent of ‘true’ and ‘false’, where ‘true’
!      enables dynamic adjustment of team sizes and ‘false’ disables it.
  
       Enabling nested parallel regions also sets the maximum number of
       active nested regions to the maximum supported.  Disabling nested
       parallel regions sets the maximum number of active nested regions
       to one.
  
!      Note that the ‘omp_set_nested’ API routine was deprecated in the
!      OpenMP specification 5.2 in favor of ‘omp_set_max_active_levels’.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_nested(int nested);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_nested(nested)’
!                     ‘logical, intent(in) :: nested’
  
  _See also_:
       *note omp_get_nested::, *note omp_set_max_active_levels::, *note
*************** _Reference_:
*** 912,948 ****
  
  File: libgomp.info,  Node: omp_get_nested,  Next: omp_set_schedule,  Prev: omp_set_nested,  Up: Thread Team Routines
  
! 3.1.10 'omp_get_nested' - Nested parallel regions
  -------------------------------------------------
  
  _Description_:
!      This function returns 'true' if nested parallel regions are
!      enabled, 'false' otherwise.  Here, 'true' and 'false' represent
       their language-specific counterparts.
  
       The state of nested parallel regions at startup depends on several
!      environment variables.  If 'OMP_MAX_ACTIVE_LEVELS' is defined and
       is set to greater than one, then nested parallel regions will be
!      enabled.  If not defined, then the value of the 'OMP_NESTED'
       environment variable will be followed if defined.  If neither are
!      defined, then if either 'OMP_NUM_THREADS' or 'OMP_PROC_BIND' are
       defined with a list of more than one value, then nested parallel
       regions are enabled.  If none of these are defined, then nested
       parallel regions are disabled by default.
  
       Nested parallel regions can be enabled or disabled at runtime using
!      'omp_set_nested', or by setting the maximum number of nested
!      regions with 'omp_set_max_active_levels' to one to disable, or
       above one to enable.
  
!      Note that the 'omp_get_nested' API routine was deprecated in the
!      OpenMP specification 5.2 in favor of 'omp_get_max_active_levels'.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_nested(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_get_nested()'
  
  _See also_:
       *note omp_get_max_active_levels::, *note omp_set_nested::, *note
--- 912,948 ----
  
  File: libgomp.info,  Node: omp_get_nested,  Next: omp_set_schedule,  Prev: omp_set_nested,  Up: Thread Team Routines
  
! 3.1.10 ‘omp_get_nested’ - Nested parallel regions
  -------------------------------------------------
  
  _Description_:
!      This function returns ‘true’ if nested parallel regions are
!      enabled, ‘false’ otherwise.  Here, ‘true’ and ‘false’ represent
       their language-specific counterparts.
  
       The state of nested parallel regions at startup depends on several
!      environment variables.  If ‘OMP_MAX_ACTIVE_LEVELS’ is defined and
       is set to greater than one, then nested parallel regions will be
!      enabled.  If not defined, then the value of the ‘OMP_NESTED’
       environment variable will be followed if defined.  If neither are
!      defined, then if either ‘OMP_NUM_THREADS’ or ‘OMP_PROC_BIND’ are
       defined with a list of more than one value, then nested parallel
       regions are enabled.  If none of these are defined, then nested
       parallel regions are disabled by default.
  
       Nested parallel regions can be enabled or disabled at runtime using
!      ‘omp_set_nested’, or by setting the maximum number of nested
!      regions with ‘omp_set_max_active_levels’ to one to disable, or
       above one to enable.
  
!      Note that the ‘omp_get_nested’ API routine was deprecated in the
!      OpenMP specification 5.2 in favor of ‘omp_get_max_active_levels’.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_nested(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_get_nested()’
  
  _See also_:
       *note omp_get_max_active_levels::, *note omp_set_nested::, *note
*************** _Reference_:
*** 954,978 ****
  
  File: libgomp.info,  Node: omp_set_schedule,  Next: omp_get_schedule,  Prev: omp_get_nested,  Up: Thread Team Routines
  
! 3.1.11 'omp_set_schedule' - Set the runtime scheduling method
  -------------------------------------------------------------
  
  _Description_:
       Sets the runtime scheduling method.  The KIND argument can have the
!      value 'omp_sched_static', 'omp_sched_dynamic', 'omp_sched_guided'
!      or 'omp_sched_auto'.  Except for 'omp_sched_auto', the chunk size
       is set to the value of CHUNK_SIZE if positive, or to the default
!      value if zero or negative.  For 'omp_sched_auto' the CHUNK_SIZE
       argument is ignored.
  
  _C/C++_
!      _Prototype_:   'void omp_set_schedule(omp_sched_t kind, int
!                     chunk_size);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_schedule(kind, chunk_size)'
!                     'integer(kind=omp_sched_kind) kind'
!                     'integer chunk_size'
  
  _See also_:
       *note omp_get_schedule:: *note OMP_SCHEDULE::
--- 954,978 ----
  
  File: libgomp.info,  Node: omp_set_schedule,  Next: omp_get_schedule,  Prev: omp_get_nested,  Up: Thread Team Routines
  
! 3.1.11 ‘omp_set_schedule’ - Set the runtime scheduling method
  -------------------------------------------------------------
  
  _Description_:
       Sets the runtime scheduling method.  The KIND argument can have the
!      value ‘omp_sched_static’, ‘omp_sched_dynamic’, ‘omp_sched_guided’
!      or ‘omp_sched_auto’.  Except for ‘omp_sched_auto’, the chunk size
       is set to the value of CHUNK_SIZE if positive, or to the default
!      value if zero or negative.  For ‘omp_sched_auto’ the CHUNK_SIZE
       argument is ignored.
  
  _C/C++_
!      _Prototype_:   ‘void omp_set_schedule(omp_sched_t kind, int
!                     chunk_size);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_schedule(kind, chunk_size)’
!                     ‘integer(kind=omp_sched_kind) kind’
!                     ‘integer chunk_size’
  
  _See also_:
       *note omp_get_schedule:: *note OMP_SCHEDULE::
*************** _Reference_:
*** 983,1005 ****
  
  File: libgomp.info,  Node: omp_get_schedule,  Next: omp_get_teams_thread_limit,  Prev: omp_set_schedule,  Up: Thread Team Routines
  
! 3.1.12 'omp_get_schedule' - Obtain the runtime scheduling method
  ----------------------------------------------------------------
  
  _Description_:
       Obtain the runtime scheduling method.  The KIND argument is set to
!      'omp_sched_static', 'omp_sched_dynamic', 'omp_sched_guided' or
!      'omp_sched_auto'.  The second argument, CHUNK_SIZE, is set to the
       chunk size.
  
  _C/C++_
!      _Prototype_:   'void omp_get_schedule(omp_sched_t *kind, int
!                     *chunk_size);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_get_schedule(kind, chunk_size)'
!                     'integer(kind=omp_sched_kind) kind'
!                     'integer chunk_size'
  
  _See also_:
       *note omp_set_schedule::, *note OMP_SCHEDULE::
--- 983,1005 ----
  
  File: libgomp.info,  Node: omp_get_schedule,  Next: omp_get_teams_thread_limit,  Prev: omp_set_schedule,  Up: Thread Team Routines
  
! 3.1.12 ‘omp_get_schedule’ - Obtain the runtime scheduling method
  ----------------------------------------------------------------
  
  _Description_:
       Obtain the runtime scheduling method.  The KIND argument is set to
!      ‘omp_sched_static’, ‘omp_sched_dynamic’, ‘omp_sched_guided’ or
!      ‘omp_sched_auto’.  The second argument, CHUNK_SIZE, is set to the
       chunk size.
  
  _C/C++_
!      _Prototype_:   ‘void omp_get_schedule(omp_sched_t *kind, int
!                     *chunk_size);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_get_schedule(kind, chunk_size)’
!                     ‘integer(kind=omp_sched_kind) kind’
!                     ‘integer chunk_size’
  
  _See also_:
       *note omp_set_schedule::, *note OMP_SCHEDULE::
*************** _Reference_:
*** 1010,1016 ****
  
  File: libgomp.info,  Node: omp_get_teams_thread_limit,  Next: omp_get_supported_active_levels,  Prev: omp_get_schedule,  Up: Thread Team Routines
  
! 3.1.13 'omp_get_teams_thread_limit' - Maximum number of threads imposed by teams
  --------------------------------------------------------------------------------
  
  _Description_:
--- 1010,1016 ----
  
  File: libgomp.info,  Node: omp_get_teams_thread_limit,  Next: omp_get_supported_active_levels,  Prev: omp_get_schedule,  Up: Thread Team Routines
  
! 3.1.13 ‘omp_get_teams_thread_limit’ - Maximum number of threads imposed by teams
  --------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1018,1027 ****
       in each team created by a teams construct.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_teams_thread_limit(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_teams_thread_limit()'
  
  _See also_:
       *note omp_set_teams_thread_limit::, *note OMP_TEAMS_THREAD_LIMIT::
--- 1018,1027 ----
       in each team created by a teams construct.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_teams_thread_limit(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_teams_thread_limit()’
  
  _See also_:
       *note omp_set_teams_thread_limit::, *note OMP_TEAMS_THREAD_LIMIT::
*************** _Reference_:
*** 1032,1038 ****
  
  File: libgomp.info,  Node: omp_get_supported_active_levels,  Next: omp_set_max_active_levels,  Prev: omp_get_teams_thread_limit,  Up: Thread Team Routines
  
! 3.1.14 'omp_get_supported_active_levels' - Maximum number of active regions supported
  -------------------------------------------------------------------------------------
  
  _Description_:
--- 1032,1038 ----
  
  File: libgomp.info,  Node: omp_get_supported_active_levels,  Next: omp_set_max_active_levels,  Prev: omp_get_teams_thread_limit,  Up: Thread Team Routines
  
! 3.1.14 ‘omp_get_supported_active_levels’ - Maximum number of active regions supported
  -------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1040,1049 ****
       regions supported by this implementation.
  
  _C/C++_
!      _Prototype_:   'int omp_get_supported_active_levels(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_supported_active_levels()'
  
  _See also_:
       *note omp_get_max_active_levels::, *note
--- 1040,1049 ----
       regions supported by this implementation.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_supported_active_levels(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_supported_active_levels()’
  
  _See also_:
       *note omp_get_max_active_levels::, *note
*************** _Reference_:
*** 1055,1074 ****
  
  File: libgomp.info,  Node: omp_set_max_active_levels,  Next: omp_get_max_active_levels,  Prev: omp_get_supported_active_levels,  Up: Thread Team Routines
  
! 3.1.15 'omp_set_max_active_levels' - Limits the number of active parallel regions
  ---------------------------------------------------------------------------------
  
  _Description_:
       This function limits the maximum allowed number of nested, active
       parallel regions.  MAX_LEVELS must be less or equal to the value
!      returned by 'omp_get_supported_active_levels'.
  
  _C/C++_
!      _Prototype_:   'void omp_set_max_active_levels(int max_levels);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_max_active_levels(max_levels)'
!                     'integer max_levels'
  
  _See also_:
       *note omp_get_max_active_levels::, *note omp_get_active_level::,
--- 1055,1074 ----
  
  File: libgomp.info,  Node: omp_set_max_active_levels,  Next: omp_get_max_active_levels,  Prev: omp_get_supported_active_levels,  Up: Thread Team Routines
  
! 3.1.15 ‘omp_set_max_active_levels’ - Limits the number of active parallel regions
  ---------------------------------------------------------------------------------
  
  _Description_:
       This function limits the maximum allowed number of nested, active
       parallel regions.  MAX_LEVELS must be less or equal to the value
!      returned by ‘omp_get_supported_active_levels’.
  
  _C/C++_
!      _Prototype_:   ‘void omp_set_max_active_levels(int max_levels);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_max_active_levels(max_levels)’
!                     ‘integer max_levels’
  
  _See also_:
       *note omp_get_max_active_levels::, *note omp_get_active_level::,
*************** _Reference_:
*** 1080,1086 ****
  
  File: libgomp.info,  Node: omp_get_max_active_levels,  Next: omp_get_level,  Prev: omp_set_max_active_levels,  Up: Thread Team Routines
  
! 3.1.16 'omp_get_max_active_levels' - Current maximum number of active regions
  -----------------------------------------------------------------------------
  
  _Description_:
--- 1080,1086 ----
  
  File: libgomp.info,  Node: omp_get_max_active_levels,  Next: omp_get_level,  Prev: omp_set_max_active_levels,  Up: Thread Team Routines
  
! 3.1.16 ‘omp_get_max_active_levels’ - Current maximum number of active regions
  -----------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1088,1097 ****
       parallel regions.
  
  _C/C++_
!      _Prototype_:   'int omp_get_max_active_levels(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_max_active_levels()'
  
  _See also_:
       *note omp_set_max_active_levels::, *note omp_get_active_level::
--- 1088,1097 ----
       parallel regions.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_max_active_levels(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_max_active_levels()’
  
  _See also_:
       *note omp_set_max_active_levels::, *note omp_get_active_level::
*************** _Reference_:
*** 1102,1108 ****
  
  File: libgomp.info,  Node: omp_get_level,  Next: omp_get_ancestor_thread_num,  Prev: omp_get_max_active_levels,  Up: Thread Team Routines
  
! 3.1.17 'omp_get_level' - Obtain the current nesting level
  ---------------------------------------------------------
  
  _Description_:
--- 1102,1108 ----
  
  File: libgomp.info,  Node: omp_get_level,  Next: omp_get_ancestor_thread_num,  Prev: omp_get_max_active_levels,  Up: Thread Team Routines
  
! 3.1.17 ‘omp_get_level’ - Obtain the current nesting level
  ---------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1110,1119 ****
       which enclose the calling call.
  
  _C/C++_
!      _Prototype_:   'int omp_get_level(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_level()'
  
  _See also_:
       *note omp_get_active_level::
--- 1110,1119 ----
       which enclose the calling call.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_level(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_level()’
  
  _See also_:
       *note omp_get_active_level::
*************** _Reference_:
*** 1124,1144 ****
  
  File: libgomp.info,  Node: omp_get_ancestor_thread_num,  Next: omp_get_team_size,  Prev: omp_get_level,  Up: Thread Team Routines
  
! 3.1.18 'omp_get_ancestor_thread_num' - Ancestor thread ID
  ---------------------------------------------------------
  
  _Description_:
       This function returns the thread identification number for the
       given nesting level of the current thread.  For values of LEVEL
!      outside zero to 'omp_get_level' -1 is returned; if LEVEL is
!      'omp_get_level' the result is identical to 'omp_get_thread_num'.
  
  _C/C++_
!      _Prototype_:   'int omp_get_ancestor_thread_num(int level);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_ancestor_thread_num(level)'
!                     'integer level'
  
  _See also_:
       *note omp_get_level::, *note omp_get_thread_num::, *note
--- 1124,1144 ----
  
  File: libgomp.info,  Node: omp_get_ancestor_thread_num,  Next: omp_get_team_size,  Prev: omp_get_level,  Up: Thread Team Routines
  
! 3.1.18 ‘omp_get_ancestor_thread_num’ - Ancestor thread ID
  ---------------------------------------------------------
  
  _Description_:
       This function returns the thread identification number for the
       given nesting level of the current thread.  For values of LEVEL
!      outside zero to ‘omp_get_level’ -1 is returned; if LEVEL is
!      ‘omp_get_level’ the result is identical to ‘omp_get_thread_num’.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_ancestor_thread_num(int level);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_ancestor_thread_num(level)’
!                     ‘integer level’
  
  _See also_:
       *note omp_get_level::, *note omp_get_thread_num::, *note
*************** _Reference_:
*** 1150,1171 ****
  
  File: libgomp.info,  Node: omp_get_team_size,  Next: omp_get_active_level,  Prev: omp_get_ancestor_thread_num,  Up: Thread Team Routines
  
! 3.1.19 'omp_get_team_size' - Number of threads in a team
  --------------------------------------------------------
  
  _Description_:
       This function returns the number of threads in a thread team to
       which either the current thread or its ancestor belongs.  For
!      values of LEVEL outside zero to 'omp_get_level', -1 is returned; if
!      LEVEL is zero, 1 is returned, and for 'omp_get_level', the result
!      is identical to 'omp_get_num_threads'.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_team_size(int level);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_team_size(level)'
!                     'integer level'
  
  _See also_:
       *note omp_get_num_threads::, *note omp_get_level::, *note
--- 1150,1171 ----
  
  File: libgomp.info,  Node: omp_get_team_size,  Next: omp_get_active_level,  Prev: omp_get_ancestor_thread_num,  Up: Thread Team Routines
  
! 3.1.19 ‘omp_get_team_size’ - Number of threads in a team
  --------------------------------------------------------
  
  _Description_:
       This function returns the number of threads in a thread team to
       which either the current thread or its ancestor belongs.  For
!      values of LEVEL outside zero to ‘omp_get_level’, -1 is returned; if
!      LEVEL is zero, 1 is returned, and for ‘omp_get_level’, the result
!      is identical to ‘omp_get_num_threads’.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_team_size(int level);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_team_size(level)’
!                     ‘integer level’
  
  _See also_:
       *note omp_get_num_threads::, *note omp_get_level::, *note
*************** _Reference_:
*** 1177,1183 ****
  
  File: libgomp.info,  Node: omp_get_active_level,  Prev: omp_get_team_size,  Up: Thread Team Routines
  
! 3.1.20 'omp_get_active_level' - Number of parallel regions
  ----------------------------------------------------------
  
  _Description_:
--- 1177,1183 ----
  
  File: libgomp.info,  Node: omp_get_active_level,  Prev: omp_get_team_size,  Up: Thread Team Routines
  
! 3.1.20 ‘omp_get_active_level’ - Number of parallel regions
  ----------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1185,1194 ****
       blocks, which enclose the calling call.
  
  _C/C++_
!      _Prototype_:   'int omp_get_active_level(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_active_level()'
  
  _See also_:
       *note omp_get_level::, *note omp_get_max_active_levels::, *note
--- 1185,1194 ----
       blocks, which enclose the calling call.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_active_level(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_active_level()’
  
  _See also_:
       *note omp_get_level::, *note omp_get_max_active_levels::, *note
*************** C linkage and do not throw exceptions.
*** 1213,1235 ****
  
  File: libgomp.info,  Node: omp_get_proc_bind,  Up: Thread Affinity Routines
  
! 3.2.1 'omp_get_proc_bind' - Whether threads may be moved between CPUs
  ---------------------------------------------------------------------
  
  _Description_:
       This functions returns the currently active thread affinity policy,
!      which is set via 'OMP_PROC_BIND'.  Possible values are
!      'omp_proc_bind_false', 'omp_proc_bind_true',
!      'omp_proc_bind_primary', 'omp_proc_bind_master',
!      'omp_proc_bind_close' and 'omp_proc_bind_spread', where
!      'omp_proc_bind_master' is an alias for 'omp_proc_bind_primary'.
  
  _C/C++_:
!      _Prototype_:   'omp_proc_bind_t omp_get_proc_bind(void);'
  
  _Fortran_:
!      _Interface_:   'integer(kind=omp_proc_bind_kind) function
!                     omp_get_proc_bind()'
  
  _See also_:
       *note OMP_PROC_BIND::, *note OMP_PLACES::, *note
--- 1213,1235 ----
  
  File: libgomp.info,  Node: omp_get_proc_bind,  Up: Thread Affinity Routines
  
! 3.2.1 ‘omp_get_proc_bind’ - Whether threads may be moved between CPUs
  ---------------------------------------------------------------------
  
  _Description_:
       This functions returns the currently active thread affinity policy,
!      which is set via ‘OMP_PROC_BIND’.  Possible values are
!      ‘omp_proc_bind_false’, ‘omp_proc_bind_true’,
!      ‘omp_proc_bind_primary’, ‘omp_proc_bind_master’,
!      ‘omp_proc_bind_close’ and ‘omp_proc_bind_spread’, where
!      ‘omp_proc_bind_master’ is an alias for ‘omp_proc_bind_primary’.
  
  _C/C++_:
!      _Prototype_:   ‘omp_proc_bind_t omp_get_proc_bind(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer(kind=omp_proc_bind_kind) function
!                     omp_get_proc_bind()’
  
  _See also_:
       *note OMP_PROC_BIND::, *note OMP_PLACES::, *note
*************** File: libgomp.info,  Node: Teams Region
*** 1244,1250 ****
  3.3 Teams Region Routines
  =========================
  
! Routines controlling the league of teams that are executed in a 'teams'
  region.  They have C linkage and do not throw exceptions.
  
  * Menu:
--- 1244,1250 ----
  3.3 Teams Region Routines
  =========================
  
! Routines controlling the league of teams that are executed in a ‘teams’
  region.  They have C linkage and do not throw exceptions.
  
  * Menu:
*************** region.  They have C linkage and do not
*** 1259,1275 ****
  
  File: libgomp.info,  Node: omp_get_num_teams,  Next: omp_get_team_num,  Up: Teams Region Routines
  
! 3.3.1 'omp_get_num_teams' - Number of teams
  -------------------------------------------
  
  _Description_:
       Returns the number of teams in the current team region.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_num_teams(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_num_teams()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.32.
--- 1259,1275 ----
  
  File: libgomp.info,  Node: omp_get_num_teams,  Next: omp_get_team_num,  Up: Teams Region Routines
  
! 3.3.1 ‘omp_get_num_teams’ - Number of teams
  -------------------------------------------
  
  _Description_:
       Returns the number of teams in the current team region.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_num_teams(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_num_teams()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.32.
*************** _Reference_:
*** 1277,1293 ****
  
  File: libgomp.info,  Node: omp_get_team_num,  Next: omp_set_num_teams,  Prev: omp_get_num_teams,  Up: Teams Region Routines
  
! 3.3.2 'omp_get_team_num' - Get team number
  ------------------------------------------
  
  _Description_:
       Returns the team number of the calling thread.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_team_num(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_team_num()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.33.
--- 1277,1293 ----
  
  File: libgomp.info,  Node: omp_get_team_num,  Next: omp_set_num_teams,  Prev: omp_get_num_teams,  Up: Teams Region Routines
  
! 3.3.2 ‘omp_get_team_num’ - Get team number
  ------------------------------------------
  
  _Description_:
       Returns the team number of the calling thread.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_team_num(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_team_num()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.33.
*************** _Reference_:
*** 1295,1314 ****
  
  File: libgomp.info,  Node: omp_set_num_teams,  Next: omp_get_max_teams,  Prev: omp_get_team_num,  Up: Teams Region Routines
  
! 3.3.3 'omp_set_num_teams' - Set upper teams limit for teams construct
  ---------------------------------------------------------------------
  
  _Description_:
       Specifies the upper bound for number of teams created by the teams
!      construct which does not specify a 'num_teams' clause.  The
!      argument of 'omp_set_num_teams' shall be a positive integer.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_num_teams(int num_teams);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_num_teams(num_teams)'
!                     'integer, intent(in) :: num_teams'
  
  _See also_:
       *note OMP_NUM_TEAMS::, *note omp_get_num_teams::, *note
--- 1295,1314 ----
  
  File: libgomp.info,  Node: omp_set_num_teams,  Next: omp_get_max_teams,  Prev: omp_get_team_num,  Up: Teams Region Routines
  
! 3.3.3 ‘omp_set_num_teams’ - Set upper teams limit for teams construct
  ---------------------------------------------------------------------
  
  _Description_:
       Specifies the upper bound for number of teams created by the teams
!      construct which does not specify a ‘num_teams’ clause.  The
!      argument of ‘omp_set_num_teams’ shall be a positive integer.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_num_teams(int num_teams);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_num_teams(num_teams)’
!                     ‘integer, intent(in) :: num_teams’
  
  _See also_:
       *note OMP_NUM_TEAMS::, *note omp_get_num_teams::, *note
*************** _Reference_:
*** 1320,1337 ****
  
  File: libgomp.info,  Node: omp_get_max_teams,  Next: omp_set_teams_thread_limit,  Prev: omp_set_num_teams,  Up: Teams Region Routines
  
! 3.3.4 'omp_get_max_teams' - Maximum number of teams of teams region
  -------------------------------------------------------------------
  
  _Description_:
       Return the maximum number of teams used for the teams region that
!      does not use the clause 'num_teams'.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_max_teams(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_max_teams()'
  
  _See also_:
       *note omp_set_num_teams::, *note omp_get_num_teams::
--- 1320,1337 ----
  
  File: libgomp.info,  Node: omp_get_max_teams,  Next: omp_set_teams_thread_limit,  Prev: omp_set_num_teams,  Up: Teams Region Routines
  
! 3.3.4 ‘omp_get_max_teams’ - Maximum number of teams of teams region
  -------------------------------------------------------------------
  
  _Description_:
       Return the maximum number of teams used for the teams region that
!      does not use the clause ‘num_teams’.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_max_teams(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_max_teams()’
  
  _See also_:
       *note omp_set_num_teams::, *note omp_get_num_teams::
*************** _Reference_:
*** 1342,1362 ****
  
  File: libgomp.info,  Node: omp_set_teams_thread_limit,  Next: omp_get_thread_limit,  Prev: omp_get_max_teams,  Up: Teams Region Routines
  
! 3.3.5 'omp_set_teams_thread_limit' - Set upper thread limit for teams construct
  -------------------------------------------------------------------------------
  
  _Description_:
       Specifies the upper bound for number of threads that are available
       for each team created by the teams construct which does not specify
!      a 'thread_limit' clause.  The argument of
!      'omp_set_teams_thread_limit' shall be a positive integer.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_teams_thread_limit(int thread_limit);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_teams_thread_limit(thread_limit)'
!                     'integer, intent(in) :: thread_limit'
  
  _See also_:
       *note OMP_TEAMS_THREAD_LIMIT::, *note omp_get_teams_thread_limit::,
--- 1342,1362 ----
  
  File: libgomp.info,  Node: omp_set_teams_thread_limit,  Next: omp_get_thread_limit,  Prev: omp_get_max_teams,  Up: Teams Region Routines
  
! 3.3.5 ‘omp_set_teams_thread_limit’ - Set upper thread limit for teams construct
  -------------------------------------------------------------------------------
  
  _Description_:
       Specifies the upper bound for number of threads that are available
       for each team created by the teams construct which does not specify
!      a ‘thread_limit’ clause.  The argument of
!      ‘omp_set_teams_thread_limit’ shall be a positive integer.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_teams_thread_limit(int thread_limit);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_teams_thread_limit(thread_limit)’
!                     ‘integer, intent(in) :: thread_limit’
  
  _See also_:
       *note OMP_TEAMS_THREAD_LIMIT::, *note omp_get_teams_thread_limit::,
*************** _Reference_:
*** 1368,1384 ****
  
  File: libgomp.info,  Node: omp_get_thread_limit,  Prev: omp_set_teams_thread_limit,  Up: Teams Region Routines
  
! 3.3.6 'omp_get_thread_limit' - Maximum number of threads
  --------------------------------------------------------
  
  _Description_:
       Return the maximum number of threads of the program.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_thread_limit(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_thread_limit()'
  
  _See also_:
       *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
--- 1368,1384 ----
  
  File: libgomp.info,  Node: omp_get_thread_limit,  Prev: omp_set_teams_thread_limit,  Up: Teams Region Routines
  
! 3.3.6 ‘omp_get_thread_limit’ - Maximum number of threads
  --------------------------------------------------------
  
  _Description_:
       Return the maximum number of threads of the program.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_thread_limit(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_thread_limit()’
  
  _See also_:
       *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
*************** throw exceptions.
*** 1404,1410 ****
  
  File: libgomp.info,  Node: omp_get_max_task_priority,  Next: omp_in_explicit_task,  Up: Tasking Routines
  
! 3.4.1 'omp_get_max_task_priority' - Maximum priority value
  ----------------------------------------------------------
  
  that can be set for tasks.
--- 1404,1410 ----
  
  File: libgomp.info,  Node: omp_get_max_task_priority,  Next: omp_in_explicit_task,  Up: Tasking Routines
  
! 3.4.1 ‘omp_get_max_task_priority’ - Maximum priority value
  ----------------------------------------------------------
  
  that can be set for tasks.
*************** _Description_:
*** 1413,1422 ****
       tasks.
  
  _C/C++_
!      _Prototype_:   'int omp_get_max_task_priority(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_max_task_priority()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.29.
--- 1413,1422 ----
       tasks.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_max_task_priority(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_max_task_priority()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.29.
*************** _Reference_:
*** 1424,1445 ****
  
  File: libgomp.info,  Node: omp_in_explicit_task,  Next: omp_in_final,  Prev: omp_get_max_task_priority,  Up: Tasking Routines
  
! 3.4.2 'omp_in_explicit_task' - Whether a given task is an explicit task
  -----------------------------------------------------------------------
  
  _Description_:
       The function returns the EXPLICIT-TASK-VAR ICV; it returns true
       when the encountering task was generated by a task-generating
!      construct such as 'target', 'task' or 'taskloop'.  Otherwise, the
       encountering task is in an implicit task region such as generated
!      by the implicit or explicit 'parallel' region and
!      'omp_in_explicit_task' returns false.
  
  _C/C++_
!      _Prototype_:   'int omp_in_explicit_task(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_in_explicit_task()'
  
  _Reference_:
       OpenMP specification v5.2 (https://www.openmp.org), Section 18.5.2.
--- 1424,1445 ----
  
  File: libgomp.info,  Node: omp_in_explicit_task,  Next: omp_in_final,  Prev: omp_get_max_task_priority,  Up: Tasking Routines
  
! 3.4.2 ‘omp_in_explicit_task’ - Whether a given task is an explicit task
  -----------------------------------------------------------------------
  
  _Description_:
       The function returns the EXPLICIT-TASK-VAR ICV; it returns true
       when the encountering task was generated by a task-generating
!      construct such as ‘target’, ‘task’ or ‘taskloop’.  Otherwise, the
       encountering task is in an implicit task region such as generated
!      by the implicit or explicit ‘parallel’ region and
!      ‘omp_in_explicit_task’ returns false.
  
  _C/C++_
!      _Prototype_:   ‘int omp_in_explicit_task(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_in_explicit_task()’
  
  _Reference_:
       OpenMP specification v5.2 (https://www.openmp.org), Section 18.5.2.
*************** _Reference_:
*** 1447,1465 ****
  
  File: libgomp.info,  Node: omp_in_final,  Prev: omp_in_explicit_task,  Up: Tasking Routines
  
! 3.4.3 'omp_in_final' - Whether in final or included task region
  ---------------------------------------------------------------
  
  _Description_:
!      This function returns 'true' if currently running in a final or
!      included task region, 'false' otherwise.  Here, 'true' and 'false'
       represent their language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   'int omp_in_final(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_in_final()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.21.
--- 1447,1465 ----
  
  File: libgomp.info,  Node: omp_in_final,  Prev: omp_in_explicit_task,  Up: Tasking Routines
  
! 3.4.3 ‘omp_in_final’ - Whether in final or included task region
  ---------------------------------------------------------------
  
  _Description_:
!      This function returns ‘true’ if currently running in a final or
!      included task region, ‘false’ otherwise.  Here, ‘true’ and ‘false’
       represent their language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_in_final(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_in_final()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.21.
*************** linkage and do not throw exceptions.
*** 1481,1487 ****
  
  File: libgomp.info,  Node: omp_pause_resource,  Next: omp_pause_resource_all,  Up: Resource Relinquishing Routines
  
! 3.5.1 'omp_pause_resource' - Release OpenMP resources on a device
  -----------------------------------------------------------------
  
  _Description_:
--- 1481,1487 ----
  
  File: libgomp.info,  Node: omp_pause_resource,  Next: omp_pause_resource_all,  Up: Resource Relinquishing Routines
  
! 3.5.1 ‘omp_pause_resource’ - Release OpenMP resources on a device
  -----------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1495,1507 ****
       have finalized execution.
  
  _C/C++_:
!      _Prototype_:   'int omp_pause_resource(omp_pause_resource_t kind, int
!                     device_num);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_pause_resource(kind, device_num)'
!                     'integer (kind=omp_pause_resource_kind) kind'
!                     'integer device_num'
  
  _Reference_:
       OpenMP specification v5.0 (https://www.openmp.org), Section 3.2.43.
--- 1495,1507 ----
       have finalized execution.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_pause_resource(omp_pause_resource_t kind, int
!                     device_num);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_pause_resource(kind, device_num)’
!                     ‘integer (kind=omp_pause_resource_kind) kind’
!                     ‘integer device_num’
  
  _Reference_:
       OpenMP specification v5.0 (https://www.openmp.org), Section 3.2.43.
*************** _Reference_:
*** 1509,1515 ****
  
  File: libgomp.info,  Node: omp_pause_resource_all,  Prev: omp_pause_resource,  Up: Resource Relinquishing Routines
  
! 3.5.2 'omp_pause_resource_all' - Release OpenMP resources on all devices
  ------------------------------------------------------------------------
  
  _Description_:
--- 1509,1515 ----
  
  File: libgomp.info,  Node: omp_pause_resource_all,  Prev: omp_pause_resource,  Up: Resource Relinquishing Routines
  
! 3.5.2 ‘omp_pause_resource_all’ - Release OpenMP resources on all devices
  ------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1522,1532 ****
       region have finalized execution.
  
  _C/C++_:
!      _Prototype_:   'int omp_pause_resource(omp_pause_resource_t kind);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_pause_resource(kind)'
!                     'integer (kind=omp_pause_resource_kind) kind'
  
  _See also_:
       *note omp_pause_resource::
--- 1522,1532 ----
       region have finalized execution.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_pause_resource(omp_pause_resource_t kind);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_pause_resource(kind)’
!                     ‘integer (kind=omp_pause_resource_kind) kind’
  
  _See also_:
       *note omp_pause_resource::
*************** linkage and do not throw exceptions.
*** 1556,1572 ****
  
  File: libgomp.info,  Node: omp_get_num_procs,  Next: omp_set_default_device,  Up: Device Information Routines
  
! 3.6.1 'omp_get_num_procs' - Number of processors online
  -------------------------------------------------------
  
  _Description_:
       Returns the number of processors online on that device.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_num_procs(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_num_procs()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.5.
--- 1556,1572 ----
  
  File: libgomp.info,  Node: omp_get_num_procs,  Next: omp_set_default_device,  Up: Device Information Routines
  
! 3.6.1 ‘omp_get_num_procs’ - Number of processors online
  -------------------------------------------------------
  
  _Description_:
       Returns the number of processors online on that device.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_num_procs(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_num_procs()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.5.
*************** _Reference_:
*** 1574,1580 ****
  
  File: libgomp.info,  Node: omp_set_default_device,  Next: omp_get_default_device,  Prev: omp_get_num_procs,  Up: Device Information Routines
  
! 3.6.2 'omp_set_default_device' - Set the default device for target regions
  --------------------------------------------------------------------------
  
  _Description_:
--- 1574,1580 ----
  
  File: libgomp.info,  Node: omp_set_default_device,  Next: omp_get_default_device,  Prev: omp_get_num_procs,  Up: Device Information Routines
  
! 3.6.2 ‘omp_set_default_device’ - Set the default device for target regions
  --------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1582,1592 ****
       The argument shall be a nonnegative device number.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_default_device(int device_num);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_default_device(device_num)'
!                     'integer device_num'
  
  _See also_:
       *note OMP_DEFAULT_DEVICE::, *note omp_get_default_device::
--- 1582,1592 ----
       The argument shall be a nonnegative device number.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_default_device(int device_num);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_default_device(device_num)’
!                     ‘integer device_num’
  
  _See also_:
       *note OMP_DEFAULT_DEVICE::, *note omp_get_default_device::
*************** _Reference_:
*** 1597,1613 ****
  
  File: libgomp.info,  Node: omp_get_default_device,  Next: omp_get_num_devices,  Prev: omp_set_default_device,  Up: Device Information Routines
  
! 3.6.3 'omp_get_default_device' - Get the default device for target regions
  --------------------------------------------------------------------------
  
  _Description_:
       Get the default device for target regions without device clause.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_default_device(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_default_device()'
  
  _See also_:
       *note OMP_DEFAULT_DEVICE::, *note omp_set_default_device::
--- 1597,1613 ----
  
  File: libgomp.info,  Node: omp_get_default_device,  Next: omp_get_num_devices,  Prev: omp_set_default_device,  Up: Device Information Routines
  
! 3.6.3 ‘omp_get_default_device’ - Get the default device for target regions
  --------------------------------------------------------------------------
  
  _Description_:
       Get the default device for target regions without device clause.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_default_device(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_default_device()’
  
  _See also_:
       *note OMP_DEFAULT_DEVICE::, *note omp_set_default_device::
*************** _Reference_:
*** 1618,1634 ****
  
  File: libgomp.info,  Node: omp_get_num_devices,  Next: omp_get_device_num,  Prev: omp_get_default_device,  Up: Device Information Routines
  
! 3.6.4 'omp_get_num_devices' - Number of target devices
  ------------------------------------------------------
  
  _Description_:
       Returns the number of target devices.
  
  _C/C++_:
!      _Prototype_:   'int omp_get_num_devices(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_num_devices()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.31.
--- 1618,1634 ----
  
  File: libgomp.info,  Node: omp_get_num_devices,  Next: omp_get_device_num,  Prev: omp_get_default_device,  Up: Device Information Routines
  
! 3.6.4 ‘omp_get_num_devices’ - Number of target devices
  ------------------------------------------------------
  
  _Description_:
       Returns the number of target devices.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_get_num_devices(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_num_devices()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.31.
*************** _Reference_:
*** 1636,1655 ****
  
  File: libgomp.info,  Node: omp_get_device_num,  Next: omp_is_initial_device,  Prev: omp_get_num_devices,  Up: Device Information Routines
  
! 3.6.5 'omp_get_device_num' - Return device number of current device
  -------------------------------------------------------------------
  
  _Description_:
       This function returns a device number that represents the device
       that the current thread is executing on.  For OpenMP 5.0, this must
!      be equal to the value returned by the 'omp_get_initial_device'
       function when called from the host.
  
  _C/C++_
!      _Prototype_:   'int omp_get_device_num(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_device_num()'
  
  _See also_:
       *note omp_get_initial_device::
--- 1636,1655 ----
  
  File: libgomp.info,  Node: omp_get_device_num,  Next: omp_is_initial_device,  Prev: omp_get_num_devices,  Up: Device Information Routines
  
! 3.6.5 ‘omp_get_device_num’ - Return device number of current device
  -------------------------------------------------------------------
  
  _Description_:
       This function returns a device number that represents the device
       that the current thread is executing on.  For OpenMP 5.0, this must
!      be equal to the value returned by the ‘omp_get_initial_device’
       function when called from the host.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_device_num(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_device_num()’
  
  _See also_:
       *note omp_get_initial_device::
*************** _Reference_:
*** 1660,1678 ****
  
  File: libgomp.info,  Node: omp_is_initial_device,  Next: omp_get_initial_device,  Prev: omp_get_device_num,  Up: Device Information Routines
  
! 3.6.6 'omp_is_initial_device' - Whether executing on the host device
  --------------------------------------------------------------------
  
  _Description_:
!      This function returns 'true' if currently running on the host
!      device, 'false' otherwise.  Here, 'true' and 'false' represent
       their language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   'int omp_is_initial_device(void);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_is_initial_device()'
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.34.
--- 1660,1678 ----
  
  File: libgomp.info,  Node: omp_is_initial_device,  Next: omp_get_initial_device,  Prev: omp_get_device_num,  Up: Device Information Routines
  
! 3.6.6 ‘omp_is_initial_device’ - Whether executing on the host device
  --------------------------------------------------------------------
  
  _Description_:
!      This function returns ‘true’ if currently running on the host
!      device, ‘false’ otherwise.  Here, ‘true’ and ‘false’ represent
       their language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_is_initial_device(void);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_is_initial_device()’
  
  _Reference_:
       OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.34.
*************** _Reference_:
*** 1680,1698 ****
  
  File: libgomp.info,  Node: omp_get_initial_device,  Prev: omp_is_initial_device,  Up: Device Information Routines
  
! 3.6.7 'omp_get_initial_device' - Return device number of initial device
  -----------------------------------------------------------------------
  
  _Description_:
       This function returns a device number that represents the host
       device.  For OpenMP 5.1, this must be equal to the value returned
!      by the 'omp_get_num_devices' function.
  
  _C/C++_
!      _Prototype_:   'int omp_get_initial_device(void);'
  
  _Fortran_:
!      _Interface_:   'integer function omp_get_initial_device()'
  
  _See also_:
       *note omp_get_num_devices::
--- 1680,1698 ----
  
  File: libgomp.info,  Node: omp_get_initial_device,  Prev: omp_is_initial_device,  Up: Device Information Routines
  
! 3.6.7 ‘omp_get_initial_device’ - Return device number of initial device
  -----------------------------------------------------------------------
  
  _Description_:
       This function returns a device number that represents the host
       device.  For OpenMP 5.1, this must be equal to the value returned
!      by the ‘omp_get_num_devices’ function.
  
  _C/C++_
!      _Prototype_:   ‘int omp_get_initial_device(void);’
  
  _Fortran_:
!      _Interface_:   ‘integer function omp_get_initial_device()’
  
  _See also_:
       *note omp_get_num_devices::
*************** pointers on devices.  They have C linkag
*** 1726,1732 ****
  
  File: libgomp.info,  Node: omp_target_alloc,  Next: omp_target_free,  Up: Device Memory Routines
  
! 3.7.1 'omp_target_alloc' - Allocate device memory
  -------------------------------------------------
  
  _Description_:
--- 1726,1732 ----
  
  File: libgomp.info,  Node: omp_target_alloc,  Next: omp_target_free,  Up: Device Memory Routines
  
! 3.7.1 ‘omp_target_alloc’ - Allocate device memory
  -------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1737,1760 ****
       In GCC, when the device is the host or the device shares memory
       with the host, the memory is allocated on the host; in that case,
       when SIZE is zero, either NULL or a unique pointer value that can
!      later be successfully passed to 'omp_target_free' is returned.
       When the allocation is not performed on the host, a null pointer is
       returned when SIZE is zero; in that case, additionally a diagnostic
       might be printed to standard error (stderr).
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'void *omp_target_alloc(size_t size, int device_num)'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_target_alloc(size, device_num)
!                     bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_int,
!                     c_size_t'
!                     'integer(c_size_t), value :: size'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_free::, *note omp_target_associate_ptr::
--- 1737,1760 ----
       In GCC, when the device is the host or the device shares memory
       with the host, the memory is allocated on the host; in that case,
       when SIZE is zero, either NULL or a unique pointer value that can
!      later be successfully passed to ‘omp_target_free’ is returned.
       When the allocation is not performed on the host, a null pointer is
       returned when SIZE is zero; in that case, additionally a diagnostic
       might be printed to standard error (stderr).
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘void *omp_target_alloc(size_t size, int device_num)’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_target_alloc(size, device_num)
!                     bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_int,
!                     c_size_t’
!                     ‘integer(c_size_t), value :: size’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_free::, *note omp_target_associate_ptr::
*************** _Reference_:
*** 1765,1792 ****
  
  File: libgomp.info,  Node: omp_target_free,  Next: omp_target_is_present,  Prev: omp_target_alloc,  Up: Device Memory Routines
  
! 3.7.2 'omp_target_free' - Free device memory
  --------------------------------------------
  
  _Description_:
!      This routine frees memory allocated by the 'omp_target_alloc'
       routine.  The DEVICE_PTR argument must be either a null pointer or
!      a device pointer returned by 'omp_target_alloc' for the specified
!      'device_num'.  The device number DEVICE_NUM must be a conforming
       device number.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'void omp_target_free(void *device_ptr, int device_num)'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_target_free(device_ptr, device_num)
!                     bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_int'
!                     'type(c_ptr), value :: device_ptr'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_alloc::, *note omp_target_disassociate_ptr::
--- 1765,1792 ----
  
  File: libgomp.info,  Node: omp_target_free,  Next: omp_target_is_present,  Prev: omp_target_alloc,  Up: Device Memory Routines
  
! 3.7.2 ‘omp_target_free’ - Free device memory
  --------------------------------------------
  
  _Description_:
!      This routine frees memory allocated by the ‘omp_target_alloc’
       routine.  The DEVICE_PTR argument must be either a null pointer or
!      a device pointer returned by ‘omp_target_alloc’ for the specified
!      ‘device_num’.  The device number DEVICE_NUM must be a conforming
       device number.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘void omp_target_free(void *device_ptr, int device_num)’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_target_free(device_ptr, device_num)
!                     bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_int’
!                     ‘type(c_ptr), value :: device_ptr’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_alloc::, *note omp_target_disassociate_ptr::
*************** _Reference_:
*** 1797,1803 ****
  
  File: libgomp.info,  Node: omp_target_is_present,  Next: omp_target_is_accessible,  Prev: omp_target_free,  Up: Device Memory Routines
  
! 3.7.3 'omp_target_is_present' - Check whether storage is mapped
  ---------------------------------------------------------------
  
  _Description_:
--- 1797,1803 ----
  
  File: libgomp.info,  Node: omp_target_is_present,  Next: omp_target_is_accessible,  Prev: omp_target_free,  Up: Device Memory Routines
  
! 3.7.3 ‘omp_target_is_present’ - Check whether storage is mapped
  ---------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1806,1834 ****
       returns a nonzero value and otherwise zero.
  
       In GCC, this includes self mapping such that
!      'omp_target_is_present' returns _true_ when DEVICE_NUM specifies
       the host or when the host and the device share memory.  If PTR is a
       null pointer, TRUE is returned and if DEVICE_NUM is an invalid
       device number, FALSE is returned.
  
       If those conditions do not apply, _true_ is returned if the
!      association has been established by an explicit or implicit 'map'
!      clause, the 'declare target' directive or a call to the
!      'omp_target_associate_ptr' routine.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'int omp_target_is_present(const void *ptr,'
!                     ' int device_num)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function omp_target_is_present(ptr, &'
!                     ' device_num) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_int'
!                     'type(c_ptr), value :: ptr'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_associate_ptr::
--- 1806,1834 ----
       returns a nonzero value and otherwise zero.
  
       In GCC, this includes self mapping such that
!      ‘omp_target_is_present’ returns _true_ when DEVICE_NUM specifies
       the host or when the host and the device share memory.  If PTR is a
       null pointer, TRUE is returned and if DEVICE_NUM is an invalid
       device number, FALSE is returned.
  
       If those conditions do not apply, _true_ is returned if the
!      association has been established by an explicit or implicit ‘map’
!      clause, the ‘declare target’ directive or a call to the
!      ‘omp_target_associate_ptr’ routine.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_is_present(const void *ptr,’
!                     ‘ int device_num)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function omp_target_is_present(ptr, &’
!                     ‘ device_num) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_int’
!                     ‘type(c_ptr), value :: ptr’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_associate_ptr::
*************** _Reference_:
*** 1839,1845 ****
  
  File: libgomp.info,  Node: omp_target_is_accessible,  Next: omp_target_memcpy,  Prev: omp_target_is_present,  Up: Device Memory Routines
  
! 3.7.4 'omp_target_is_accessible' - Check whether memory is device accessible
  ----------------------------------------------------------------------------
  
  _Description_:
--- 1839,1845 ----
  
  File: libgomp.info,  Node: omp_target_is_accessible,  Next: omp_target_memcpy,  Prev: omp_target_is_present,  Up: Device Memory Routines
  
! 3.7.4 ‘omp_target_is_accessible’ - Check whether memory is device accessible
  ----------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1857,1879 ****
       this memory is only available on a non-host device that can access
       all host memory ([uniform] shared memory access).
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'int omp_target_is_accessible(const void *ptr,'
!                     ' size_t size,'
!                     ' int device_num)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function omp_target_is_accessible(ptr,
!                     &'
!                     ' size, device_num) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int'
!                     'type(c_ptr), value :: ptr'
!                     'integer(c_size_t), value :: size'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_associate_ptr::
--- 1857,1879 ----
       this memory is only available on a non-host device that can access
       all host memory ([uniform] shared memory access).
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_is_accessible(const void *ptr,’
!                     ‘ size_t size,’
!                     ‘ int device_num)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function omp_target_is_accessible(ptr,
!                     &’
!                     ‘ size, device_num) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int’
!                     ‘type(c_ptr), value :: ptr’
!                     ‘integer(c_size_t), value :: size’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_associate_ptr::
*************** _Reference_:
*** 1884,1890 ****
  
  File: libgomp.info,  Node: omp_target_memcpy,  Next: omp_target_memcpy_async,  Prev: omp_target_is_accessible,  Up: Device Memory Routines
  
! 3.7.5 'omp_target_memcpy' - Copy data between devices
  -----------------------------------------------------
  
  _Description_:
--- 1884,1890 ----
  
  File: libgomp.info,  Node: omp_target_memcpy,  Next: omp_target_memcpy_async,  Prev: omp_target_is_accessible,  Up: Device Memory Routines
  
! 3.7.5 ‘omp_target_memcpy’ - Copy data between devices
  -----------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1895,1923 ****
       to the destination device's DST address shifted by DST_OFFSET.  The
       routine returns zero on success and non-zero otherwise.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'int omp_target_memcpy(void *dst,'
!                     ' const void *src,'
!                     ' size_t length,'
!                     ' size_t dst_offset,'
!                     ' size_t src_offset,'
!                     ' int dst_device_num,'
!                     ' int src_device_num)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function omp_target_memcpy( &'
!                     ' dst, src, length, dst_offset, src_offset, &'
!                     ' dst_device_num, src_device_num) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int'
!                     'type(c_ptr), value :: dst, src'
!                     'integer(c_size_t), value :: length, dst_offset,
!                     src_offset'
!                     'integer(c_int), value :: dst_device_num,
!                     src_device_num'
  
  _See also_:
       *note omp_target_memcpy_async::, *note omp_target_memcpy_rect::
--- 1895,1923 ----
       to the destination device's DST address shifted by DST_OFFSET.  The
       routine returns zero on success and non-zero otherwise.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_memcpy(void *dst,’
!                     ‘ const void *src,’
!                     ‘ size_t length,’
!                     ‘ size_t dst_offset,’
!                     ‘ size_t src_offset,’
!                     ‘ int dst_device_num,’
!                     ‘ int src_device_num)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function omp_target_memcpy( &’
!                     ‘ dst, src, length, dst_offset, src_offset, &’
!                     ‘ dst_device_num, src_device_num) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int’
!                     ‘type(c_ptr), value :: dst, src’
!                     ‘integer(c_size_t), value :: length, dst_offset,
!                     src_offset’
!                     ‘integer(c_int), value :: dst_device_num,
!                     src_device_num’
  
  _See also_:
       *note omp_target_memcpy_async::, *note omp_target_memcpy_rect::
*************** _Reference_:
*** 1928,1934 ****
  
  File: libgomp.info,  Node: omp_target_memcpy_async,  Next: omp_target_memcpy_rect,  Prev: omp_target_memcpy,  Up: Device Memory Routines
  
! 3.7.6 'omp_target_memcpy_async' - Copy data between devices asynchronously
  --------------------------------------------------------------------------
  
  _Description_:
--- 1928,1934 ----
  
  File: libgomp.info,  Node: omp_target_memcpy_async,  Next: omp_target_memcpy_rect,  Prev: omp_target_memcpy,  Up: Device Memory Routines
  
! 3.7.6 ‘omp_target_memcpy_async’ - Copy data between devices asynchronously
  --------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1943,1975 ****
       ignored.  The routine returns zero if the copying process has
       successfully been started and non-zero otherwise.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'int omp_target_memcpy_async(void *dst,'
!                     ' const void *src,'
!                     ' size_t length,'
!                     ' size_t dst_offset,'
!                     ' size_t src_offset,'
!                     ' int dst_device_num,'
!                     ' int src_device_num,'
!                     ' int depobj_count,'
!                     ' omp_depend_t *depobj_list)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function omp_target_memcpy_async( &'
!                     ' dst, src, length, dst_offset, src_offset, &'
!                     ' dst_device_num, src_device_num, &'
!                     ' depobj_count, depobj_list) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int'
!                     'type(c_ptr), value :: dst, src'
!                     'integer(c_size_t), value :: length, dst_offset,
!                     src_offset'
!                     'integer(c_int), value :: dst_device_num,
!                     src_device_num, depobj_count'
!                     'integer(omp_depend_kind), optional :: depobj_list(*)'
  
  _See also_:
       *note omp_target_memcpy::, *note omp_target_memcpy_rect_async::
--- 1943,1975 ----
       ignored.  The routine returns zero if the copying process has
       successfully been started and non-zero otherwise.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_memcpy_async(void *dst,’
!                     ‘ const void *src,’
!                     ‘ size_t length,’
!                     ‘ size_t dst_offset,’
!                     ‘ size_t src_offset,’
!                     ‘ int dst_device_num,’
!                     ‘ int src_device_num,’
!                     ‘ int depobj_count,’
!                     ‘ omp_depend_t *depobj_list)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function omp_target_memcpy_async( &’
!                     ‘ dst, src, length, dst_offset, src_offset, &’
!                     ‘ dst_device_num, src_device_num, &’
!                     ‘ depobj_count, depobj_list) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int’
!                     ‘type(c_ptr), value :: dst, src’
!                     ‘integer(c_size_t), value :: length, dst_offset,
!                     src_offset’
!                     ‘integer(c_int), value :: dst_device_num,
!                     src_device_num, depobj_count’
!                     ‘integer(omp_depend_kind), optional :: depobj_list(*)’
  
  _See also_:
       *note omp_target_memcpy::, *note omp_target_memcpy_rect_async::
*************** _Reference_:
*** 1980,1986 ****
  
  File: libgomp.info,  Node: omp_target_memcpy_rect,  Next: omp_target_memcpy_rect_async,  Prev: omp_target_memcpy_async,  Up: Device Memory Routines
  
! 3.7.7 'omp_target_memcpy_rect' - Copy a subvolume of data between devices
  -------------------------------------------------------------------------
  
  _Description_:
--- 1980,1986 ----
  
  File: libgomp.info,  Node: omp_target_memcpy_rect,  Next: omp_target_memcpy_rect_async,  Prev: omp_target_memcpy_async,  Up: Device Memory Routines
  
! 3.7.7 ‘omp_target_memcpy_rect’ - Copy a subvolume of data between devices
  -------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 1999,2005 ****
       supported.  In order to find implementation-specific maximally
       supported number of dimensions, the routine returns this value when
       invoked with a null pointer to both the DST and SRC arguments.  As
!      GCC supports arbitrary dimensions, it returns 'INT_MAX'.
  
       The device-number arguments must be conforming device numbers, the
       SRC and DST must be either both null pointers or all of the
--- 1999,2005 ----
       supported.  In order to find implementation-specific maximally
       supported number of dimensions, the routine returns this value when
       invoked with a null pointer to both the DST and SRC arguments.  As
!      GCC supports arbitrary dimensions, it returns ‘INT_MAX’.
  
       The device-number arguments must be conforming device numbers, the
       SRC and DST must be either both null pointers or all of the
*************** _Description_:
*** 2007,2043 ****
       positive and the VOLUME, offset and dimension arrays must have at
       least NUM_DIMS dimensions.
  
!      Running this routine in a 'target' region is not supported except
       on the initial device.
  
  _C/C++_
!      _Prototype_:   'int omp_target_memcpy_rect(void *dst,'
!                     ' const void *src,'
!                     ' size_t element_size,'
!                     ' int num_dims,'
!                     ' const size_t *volume,'
!                     ' const size_t *dst_offset,'
!                     ' const size_t *src_offset,'
!                     ' const size_t *dst_dimensions,'
!                     ' const size_t *src_dimensions,'
!                     ' int dst_device_num,'
!                     ' int src_device_num)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function omp_target_memcpy_rect( &'
!                     ' dst, src, element_size, num_dims, volume, &'
!                     ' dst_offset, src_offset, dst_dimensions, &'
!                     ' src_dimensions, dst_device_num, src_device_num)
!                     bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int'
!                     'type(c_ptr), value :: dst, src'
!                     'integer(c_size_t), value :: element_size, dst_offset,
!                     src_offset'
!                     'integer(c_size_t), value :: volume, dst_dimensions,
!                     src_dimensions'
!                     'integer(c_int), value :: num_dims, dst_device_num,
!                     src_device_num'
  
  _See also_:
       *note omp_target_memcpy_rect_async::, *note omp_target_memcpy::
--- 2007,2043 ----
       positive and the VOLUME, offset and dimension arrays must have at
       least NUM_DIMS dimensions.
  
!      Running this routine in a ‘target’ region is not supported except
       on the initial device.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_memcpy_rect(void *dst,’
!                     ‘ const void *src,’
!                     ‘ size_t element_size,’
!                     ‘ int num_dims,’
!                     ‘ const size_t *volume,’
!                     ‘ const size_t *dst_offset,’
!                     ‘ const size_t *src_offset,’
!                     ‘ const size_t *dst_dimensions,’
!                     ‘ const size_t *src_dimensions,’
!                     ‘ int dst_device_num,’
!                     ‘ int src_device_num)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function omp_target_memcpy_rect( &’
!                     ‘ dst, src, element_size, num_dims, volume, &’
!                     ‘ dst_offset, src_offset, dst_dimensions, &’
!                     ‘ src_dimensions, dst_device_num, src_device_num)
!                     bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int’
!                     ‘type(c_ptr), value :: dst, src’
!                     ‘integer(c_size_t), value :: element_size, dst_offset,
!                     src_offset’
!                     ‘integer(c_size_t), value :: volume, dst_dimensions,
!                     src_dimensions’
!                     ‘integer(c_int), value :: num_dims, dst_device_num,
!                     src_device_num’
  
  _See also_:
       *note omp_target_memcpy_rect_async::, *note omp_target_memcpy::
*************** _Reference_:
*** 2048,2054 ****
  
  File: libgomp.info,  Node: omp_target_memcpy_rect_async,  Next: omp_target_associate_ptr,  Prev: omp_target_memcpy_rect,  Up: Device Memory Routines
  
! 3.7.8 'omp_target_memcpy_rect_async' - Copy a subvolume of data between devices asynchronously
  ----------------------------------------------------------------------------------------------
  
  _Description_:
--- 2048,2054 ----
  
  File: libgomp.info,  Node: omp_target_memcpy_rect_async,  Next: omp_target_associate_ptr,  Prev: omp_target_memcpy_rect,  Up: Device Memory Routines
  
! 3.7.8 ‘omp_target_memcpy_rect_async’ - Copy a subvolume of data between devices asynchronously
  ----------------------------------------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2070,2076 ****
       supported.  In order to find implementation-specific maximally
       supported number of dimensions, the routine returns this value when
       invoked with a null pointer to both the DST and SRC arguments.  As
!      GCC supports arbitrary dimensions, it returns 'INT_MAX'.
  
       The device-number arguments must be conforming device numbers, the
       SRC and DST must be either both null pointers or all of the
--- 2070,2076 ----
       supported.  In order to find implementation-specific maximally
       supported number of dimensions, the routine returns this value when
       invoked with a null pointer to both the DST and SRC arguments.  As
!      GCC supports arbitrary dimensions, it returns ‘INT_MAX’.
  
       The device-number arguments must be conforming device numbers, the
       SRC and DST must be either both null pointers or all of the
*************** _Description_:
*** 2078,2119 ****
       positive and the VOLUME, offset and dimension arrays must have at
       least NUM_DIMS dimensions.
  
!      Running this routine in a 'target' region is not supported except
       on the initial device.
  
  _C/C++_
!      _Prototype_:   'int omp_target_memcpy_rect_async(void *dst,'
!                     ' const void *src,'
!                     ' size_t element_size,'
!                     ' int num_dims,'
!                     ' const size_t *volume,'
!                     ' const size_t *dst_offset,'
!                     ' const size_t *src_offset,'
!                     ' const size_t *dst_dimensions,'
!                     ' const size_t *src_dimensions,'
!                     ' int dst_device_num,'
!                     ' int src_device_num,'
!                     ' int depobj_count,'
!                     ' omp_depend_t *depobj_list)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function omp_target_memcpy_rect_async(
!                     &'
!                     ' dst, src, element_size, num_dims, volume, &'
!                     ' dst_offset, src_offset, dst_dimensions, &'
!                     ' src_dimensions, dst_device_num, src_device_num, &'
!                     ' depobj_count, depobj_list) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int'
!                     'type(c_ptr), value :: dst, src'
!                     'integer(c_size_t), value :: element_size, dst_offset,
!                     src_offset'
!                     'integer(c_size_t), value :: volume, dst_dimensions,
!                     src_dimensions'
!                     'integer(c_int), value :: num_dims, dst_device_num,
!                     src_device_num'
!                     'integer(c_int), value :: depobj_count'
!                     'integer(omp_depend_kind), optional :: depobj_list(*)'
  
  _See also_:
       *note omp_target_memcpy_rect::, *note omp_target_memcpy_async::
--- 2078,2119 ----
       positive and the VOLUME, offset and dimension arrays must have at
       least NUM_DIMS dimensions.
  
!      Running this routine in a ‘target’ region is not supported except
       on the initial device.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_memcpy_rect_async(void *dst,’
!                     ‘ const void *src,’
!                     ‘ size_t element_size,’
!                     ‘ int num_dims,’
!                     ‘ const size_t *volume,’
!                     ‘ const size_t *dst_offset,’
!                     ‘ const size_t *src_offset,’
!                     ‘ const size_t *dst_dimensions,’
!                     ‘ const size_t *src_dimensions,’
!                     ‘ int dst_device_num,’
!                     ‘ int src_device_num,’
!                     ‘ int depobj_count,’
!                     ‘ omp_depend_t *depobj_list)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function omp_target_memcpy_rect_async(
!                     &’
!                     ‘ dst, src, element_size, num_dims, volume, &’
!                     ‘ dst_offset, src_offset, dst_dimensions, &’
!                     ‘ src_dimensions, dst_device_num, src_device_num, &’
!                     ‘ depobj_count, depobj_list) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t,
!                     c_int’
!                     ‘type(c_ptr), value :: dst, src’
!                     ‘integer(c_size_t), value :: element_size, dst_offset,
!                     src_offset’
!                     ‘integer(c_size_t), value :: volume, dst_dimensions,
!                     src_dimensions’
!                     ‘integer(c_int), value :: num_dims, dst_device_num,
!                     src_device_num’
!                     ‘integer(c_int), value :: depobj_count’
!                     ‘integer(omp_depend_kind), optional :: depobj_list(*)’
  
  _See also_:
       *note omp_target_memcpy_rect::, *note omp_target_memcpy_async::
*************** _Reference_:
*** 2124,2137 ****
  
  File: libgomp.info,  Node: omp_target_associate_ptr,  Next: omp_target_disassociate_ptr,  Prev: omp_target_memcpy_rect_async,  Up: Device Memory Routines
  
! 3.7.9 'omp_target_associate_ptr' - Associate a device pointer with a host pointer
  ---------------------------------------------------------------------------------
  
  _Description_:
       This routine associates storage on the host with storage on a
       device identified by DEVICE_NUM.  The device pointer is usually
!      obtained by calling 'omp_target_alloc' or by other means (but not
!      by using the 'map' clauses or the 'declare target' directive).  The
       host pointer should point to memory that has a storage size of at
       least SIZE.
  
--- 2124,2137 ----
  
  File: libgomp.info,  Node: omp_target_associate_ptr,  Next: omp_target_disassociate_ptr,  Prev: omp_target_memcpy_rect_async,  Up: Device Memory Routines
  
! 3.7.9 ‘omp_target_associate_ptr’ - Associate a device pointer with a host pointer
  ---------------------------------------------------------------------------------
  
  _Description_:
       This routine associates storage on the host with storage on a
       device identified by DEVICE_NUM.  The device pointer is usually
!      obtained by calling ‘omp_target_alloc’ or by other means (but not
!      by using the ‘map’ clauses or the ‘declare target’ directive).  The
       host pointer should point to memory that has a storage size of at
       least SIZE.
  
*************** _Description_:
*** 2140,2182 ****
       mapping; the storage size should be at least DEVICE_OFFSET plus
       SIZE.
  
!      After the association, the host pointer can be used in a 'map'
!      clause and in the 'to' and 'from' clauses of the 'target update'
       directive to transfer data between the associated pointers.  The
       reference count of such associated storage is infinite.  The
!      association can be removed by calling 'omp_target_disassociate_ptr'
       which should be done before the lifetime of either storage ends.
  
!      The routine returns nonzero ('EINVAL') when the DEVICE_NUM invalid,
       for when the initial device or the associated device shares memory
!      with the host.  'omp_target_associate_ptr' returns zero if HOST_PTR
       points into already associated storage that is fully inside of a
       previously associated memory.  Otherwise, if the association was
       successful zero is returned; if none of the cases above apply,
!      nonzero ('EINVAL') is returned.
  
!      The 'omp_target_is_present' routine can be used to test whether
       associated storage for a device pointer exists.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'int omp_target_associate_ptr(const void *host_ptr,'
!                     ' const void *device_ptr,'
!                     ' size_t size,'
!                     ' size_t device_offset,'
!                     ' int device_num)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function
!                     omp_target_associate_ptr(host_ptr, &'
!                     ' device_ptr, size, device_offset, device_num) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_int,
!                     c_size_t'
!                     'type(c_ptr), value :: host_ptr, device_ptr'
!                     'integer(c_size_t), value :: size, device_offset'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_disassociate_ptr::, *note omp_target_is_present::,
--- 2140,2182 ----
       mapping; the storage size should be at least DEVICE_OFFSET plus
       SIZE.
  
!      After the association, the host pointer can be used in a ‘map’
!      clause and in the ‘to’ and ‘from’ clauses of the ‘target update’
       directive to transfer data between the associated pointers.  The
       reference count of such associated storage is infinite.  The
!      association can be removed by calling ‘omp_target_disassociate_ptr’
       which should be done before the lifetime of either storage ends.
  
!      The routine returns nonzero (‘EINVAL’) when the DEVICE_NUM invalid,
       for when the initial device or the associated device shares memory
!      with the host.  ‘omp_target_associate_ptr’ returns zero if HOST_PTR
       points into already associated storage that is fully inside of a
       previously associated memory.  Otherwise, if the association was
       successful zero is returned; if none of the cases above apply,
!      nonzero (‘EINVAL’) is returned.
  
!      The ‘omp_target_is_present’ routine can be used to test whether
       associated storage for a device pointer exists.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_associate_ptr(const void *host_ptr,’
!                     ‘ const void *device_ptr,’
!                     ‘ size_t size,’
!                     ‘ size_t device_offset,’
!                     ‘ int device_num)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function
!                     omp_target_associate_ptr(host_ptr, &’
!                     ‘ device_ptr, size, device_offset, device_num) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_int,
!                     c_size_t’
!                     ‘type(c_ptr), value :: host_ptr, device_ptr’
!                     ‘integer(c_size_t), value :: size, device_offset’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_disassociate_ptr::, *note omp_target_is_present::,
*************** _Reference_:
*** 2188,2226 ****
  
  File: libgomp.info,  Node: omp_target_disassociate_ptr,  Next: omp_get_mapped_ptr,  Prev: omp_target_associate_ptr,  Up: Device Memory Routines
  
! 3.7.10 'omp_target_disassociate_ptr' - Remove device-host pointer association
  -----------------------------------------------------------------------------
  
  _Description_:
       This routine removes the storage association established by calling
!      'omp_target_associate_ptr' and sets the reference count to zero,
!      even if 'omp_target_associate_ptr' was invoked multiple times for
!      for host pointer 'ptr'.  If applicable, the device memory needs to
       be freed by the user.
  
       If an associated device storage location for the DEVICE_NUM was
       found and has infinite reference count, the association is removed
!      and zero is returned.  In all other cases, nonzero ('EINVAL') is
       returned and no other action is taken.
  
       Note that passing a host pointer where the association to the
!      device pointer was established with the 'declare target' directive
       yields undefined behavior.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'int omp_target_disassociate_ptr(const void *ptr,'
!                     ' int device_num)'
  
  _Fortran_:
!      _Interface_:   'integer(c_int) function
!                     omp_target_disassociate_ptr(ptr, &'
!                     ' device_num) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_int'
!                     'type(c_ptr), value :: ptr'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_associate_ptr::
--- 2188,2226 ----
  
  File: libgomp.info,  Node: omp_target_disassociate_ptr,  Next: omp_get_mapped_ptr,  Prev: omp_target_associate_ptr,  Up: Device Memory Routines
  
! 3.7.10 ‘omp_target_disassociate_ptr’ - Remove device-host pointer association
  -----------------------------------------------------------------------------
  
  _Description_:
       This routine removes the storage association established by calling
!      ‘omp_target_associate_ptr’ and sets the reference count to zero,
!      even if ‘omp_target_associate_ptr’ was invoked multiple times for
!      for host pointer ‘ptr’.  If applicable, the device memory needs to
       be freed by the user.
  
       If an associated device storage location for the DEVICE_NUM was
       found and has infinite reference count, the association is removed
!      and zero is returned.  In all other cases, nonzero (‘EINVAL’) is
       returned and no other action is taken.
  
       Note that passing a host pointer where the association to the
!      device pointer was established with the ‘declare target’ directive
       yields undefined behavior.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘int omp_target_disassociate_ptr(const void *ptr,’
!                     ‘ int device_num)’
  
  _Fortran_:
!      _Interface_:   ‘integer(c_int) function
!                     omp_target_disassociate_ptr(ptr, &’
!                     ‘ device_num) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_int’
!                     ‘type(c_ptr), value :: ptr’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_associate_ptr::
*************** _Reference_:
*** 2231,2265 ****
  
  File: libgomp.info,  Node: omp_get_mapped_ptr,  Prev: omp_target_disassociate_ptr,  Up: Device Memory Routines
  
! 3.7.11 'omp_get_mapped_ptr' - Return device pointer to a host pointer
  ---------------------------------------------------------------------
  
  _Description_:
       If the device number is refers to the initial device or to a device
       with memory accessible from the host (shared memory), the
!      'omp_get_mapped_ptr' routines returns the value of the passed PTR.
       Otherwise, if associated storage to the passed host pointer PTR
       exists on device associated with DEVICE_NUM, it returns that
       pointer.  In all other cases and in cases of an error, a null
       pointer is returned.
  
       The association of storage location is established either via an
!      explicit or implicit 'map' clause, the 'declare target' directive
!      or the 'omp_target_associate_ptr' routine.
  
!      Running this routine in a 'target' region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   'void *omp_get_mapped_ptr(const void *ptr, int
!                     device_num);'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_get_mapped_ptr(ptr,
!                     device_num) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only: c_ptr, c_int'
!                     'type(c_ptr), value :: ptr'
!                     'integer(c_int), value :: device_num'
  
  _See also_:
       *note omp_target_associate_ptr::
--- 2231,2265 ----
  
  File: libgomp.info,  Node: omp_get_mapped_ptr,  Prev: omp_target_disassociate_ptr,  Up: Device Memory Routines
  
! 3.7.11 ‘omp_get_mapped_ptr’ - Return device pointer to a host pointer
  ---------------------------------------------------------------------
  
  _Description_:
       If the device number is refers to the initial device or to a device
       with memory accessible from the host (shared memory), the
!      ‘omp_get_mapped_ptr’ routines returns the value of the passed PTR.
       Otherwise, if associated storage to the passed host pointer PTR
       exists on device associated with DEVICE_NUM, it returns that
       pointer.  In all other cases and in cases of an error, a null
       pointer is returned.
  
       The association of storage location is established either via an
!      explicit or implicit ‘map’ clause, the ‘declare target’ directive
!      or the ‘omp_target_associate_ptr’ routine.
  
!      Running this routine in a ‘target’ region except on the initial
       device is not supported.
  
  _C/C++_
!      _Prototype_:   ‘void *omp_get_mapped_ptr(const void *ptr, int
!                     device_num);’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_get_mapped_ptr(ptr,
!                     device_num) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only: c_ptr, c_int’
!                     ‘type(c_ptr), value :: ptr’
!                     ‘integer(c_int), value :: device_num’
  
  _See also_:
       *note omp_target_associate_ptr::
*************** routines have C linkage and do not throw
*** 2292,2298 ****
  
  File: libgomp.info,  Node: omp_init_lock,  Next: omp_init_nest_lock,  Up: Lock Routines
  
! 3.8.1 'omp_init_lock' - Initialize simple lock
  ----------------------------------------------
  
  _Description_:
--- 2292,2298 ----
  
  File: libgomp.info,  Node: omp_init_lock,  Next: omp_init_nest_lock,  Up: Lock Routines
  
! 3.8.1 ‘omp_init_lock’ - Initialize simple lock
  ----------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2300,2310 ****
       unlocked state.
  
  _C/C++_:
!      _Prototype_:   'void omp_init_lock(omp_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_init_lock(svar)'
!                     'integer(omp_lock_kind), intent(out) :: svar'
  
  _See also_:
       *note omp_destroy_lock::
--- 2300,2310 ----
       unlocked state.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_init_lock(omp_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_init_lock(svar)’
!                     ‘integer(omp_lock_kind), intent(out) :: svar’
  
  _See also_:
       *note omp_destroy_lock::
*************** _Reference_:
*** 2315,2321 ****
  
  File: libgomp.info,  Node: omp_init_nest_lock,  Next: omp_destroy_lock,  Prev: omp_init_lock,  Up: Lock Routines
  
! 3.8.2 'omp_init_nest_lock' - Initialize nested lock
  ---------------------------------------------------
  
  _Description_:
--- 2315,2321 ----
  
  File: libgomp.info,  Node: omp_init_nest_lock,  Next: omp_destroy_lock,  Prev: omp_init_lock,  Up: Lock Routines
  
! 3.8.2 ‘omp_init_nest_lock’ - Initialize nested lock
  ---------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2323,2333 ****
       unlocked state and the nesting count is set to zero.
  
  _C/C++_:
!      _Prototype_:   'void omp_init_nest_lock(omp_nest_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_init_nest_lock(nvar)'
!                     'integer(omp_nest_lock_kind), intent(out) :: nvar'
  
  _See also_:
       *note omp_destroy_nest_lock::
--- 2323,2333 ----
       unlocked state and the nesting count is set to zero.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_init_nest_lock(omp_nest_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_init_nest_lock(nvar)’
!                     ‘integer(omp_nest_lock_kind), intent(out) :: nvar’
  
  _See also_:
       *note omp_destroy_nest_lock::
*************** _Reference_:
*** 2338,2344 ****
  
  File: libgomp.info,  Node: omp_destroy_lock,  Next: omp_destroy_nest_lock,  Prev: omp_init_nest_lock,  Up: Lock Routines
  
! 3.8.3 'omp_destroy_lock' - Destroy simple lock
  ----------------------------------------------
  
  _Description_:
--- 2338,2344 ----
  
  File: libgomp.info,  Node: omp_destroy_lock,  Next: omp_destroy_nest_lock,  Prev: omp_init_nest_lock,  Up: Lock Routines
  
! 3.8.3 ‘omp_destroy_lock’ - Destroy simple lock
  ----------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2346,2356 ****
       must be in the unlocked state.
  
  _C/C++_:
!      _Prototype_:   'void omp_destroy_lock(omp_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_destroy_lock(svar)'
!                     'integer(omp_lock_kind), intent(inout) :: svar'
  
  _See also_:
       *note omp_init_lock::
--- 2346,2356 ----
       must be in the unlocked state.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_destroy_lock(omp_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_destroy_lock(svar)’
!                     ‘integer(omp_lock_kind), intent(inout) :: svar’
  
  _See also_:
       *note omp_init_lock::
*************** _Reference_:
*** 2361,2367 ****
  
  File: libgomp.info,  Node: omp_destroy_nest_lock,  Next: omp_set_lock,  Prev: omp_destroy_lock,  Up: Lock Routines
  
! 3.8.4 'omp_destroy_nest_lock' - Destroy nested lock
  ---------------------------------------------------
  
  _Description_:
--- 2361,2367 ----
  
  File: libgomp.info,  Node: omp_destroy_nest_lock,  Next: omp_set_lock,  Prev: omp_destroy_lock,  Up: Lock Routines
  
! 3.8.4 ‘omp_destroy_nest_lock’ - Destroy nested lock
  ---------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2370,2380 ****
       zero.
  
  _C/C++_:
!      _Prototype_:   'void omp_destroy_nest_lock(omp_nest_lock_t *);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_destroy_nest_lock(nvar)'
!                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
  
  _See also_:
       *note omp_init_lock::
--- 2370,2380 ----
       zero.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_destroy_nest_lock(omp_nest_lock_t *);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_destroy_nest_lock(nvar)’
!                     ‘integer(omp_nest_lock_kind), intent(inout) :: nvar’
  
  _See also_:
       *note omp_init_lock::
*************** _Reference_:
*** 2385,2405 ****
  
  File: libgomp.info,  Node: omp_set_lock,  Next: omp_set_nest_lock,  Prev: omp_destroy_nest_lock,  Up: Lock Routines
  
! 3.8.5 'omp_set_lock' - Wait for and set simple lock
  ---------------------------------------------------
  
  _Description_:
       Before setting a simple lock, the lock variable must be initialized
!      by 'omp_init_lock'.  The calling thread is blocked until the lock
       is available.  If the lock is already held by the current thread, a
       deadlock occurs.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_lock(omp_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_lock(svar)'
!                     'integer(omp_lock_kind), intent(inout) :: svar'
  
  _See also_:
       *note omp_init_lock::, *note omp_test_lock::, *note
--- 2385,2405 ----
  
  File: libgomp.info,  Node: omp_set_lock,  Next: omp_set_nest_lock,  Prev: omp_destroy_nest_lock,  Up: Lock Routines
  
! 3.8.5 ‘omp_set_lock’ - Wait for and set simple lock
  ---------------------------------------------------
  
  _Description_:
       Before setting a simple lock, the lock variable must be initialized
!      by ‘omp_init_lock’.  The calling thread is blocked until the lock
       is available.  If the lock is already held by the current thread, a
       deadlock occurs.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_lock(omp_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_lock(svar)’
!                     ‘integer(omp_lock_kind), intent(inout) :: svar’
  
  _See also_:
       *note omp_init_lock::, *note omp_test_lock::, *note
*************** _Reference_:
*** 2411,2431 ****
  
  File: libgomp.info,  Node: omp_set_nest_lock,  Next: omp_unset_lock,  Prev: omp_set_lock,  Up: Lock Routines
  
! 3.8.6 'omp_set_nest_lock' - Wait for and set nested lock
  --------------------------------------------------------
  
  _Description_:
       Before setting a nested lock, the lock variable must be initialized
!      by 'omp_init_nest_lock'.  The calling thread is blocked until the
       lock is available.  If the lock is already held by the current
       thread, the nesting count for the lock is incremented.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_nest_lock(omp_nest_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_nest_lock(nvar)'
!                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
  
  _See also_:
       *note omp_init_nest_lock::, *note omp_unset_nest_lock::
--- 2411,2431 ----
  
  File: libgomp.info,  Node: omp_set_nest_lock,  Next: omp_unset_lock,  Prev: omp_set_lock,  Up: Lock Routines
  
! 3.8.6 ‘omp_set_nest_lock’ - Wait for and set nested lock
  --------------------------------------------------------
  
  _Description_:
       Before setting a nested lock, the lock variable must be initialized
!      by ‘omp_init_nest_lock’.  The calling thread is blocked until the
       lock is available.  If the lock is already held by the current
       thread, the nesting count for the lock is incremented.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_nest_lock(omp_nest_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_nest_lock(nvar)’
!                     ‘integer(omp_nest_lock_kind), intent(inout) :: nvar’
  
  _See also_:
       *note omp_init_nest_lock::, *note omp_unset_nest_lock::
*************** _Reference_:
*** 2436,2458 ****
  
  File: libgomp.info,  Node: omp_unset_lock,  Next: omp_unset_nest_lock,  Prev: omp_set_nest_lock,  Up: Lock Routines
  
! 3.8.7 'omp_unset_lock' - Unset simple lock
  ------------------------------------------
  
  _Description_:
       A simple lock about to be unset must have been locked by
!      'omp_set_lock' or 'omp_test_lock' before.  In addition, the lock
!      must be held by the thread calling 'omp_unset_lock'.  Then, the
       lock becomes unlocked.  If one or more threads attempted to set the
       lock before, one of them is chosen to, again, set the lock to
       itself.
  
  _C/C++_:
!      _Prototype_:   'void omp_unset_lock(omp_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_unset_lock(svar)'
!                     'integer(omp_lock_kind), intent(inout) :: svar'
  
  _See also_:
       *note omp_set_lock::, *note omp_test_lock::
--- 2436,2458 ----
  
  File: libgomp.info,  Node: omp_unset_lock,  Next: omp_unset_nest_lock,  Prev: omp_set_nest_lock,  Up: Lock Routines
  
! 3.8.7 ‘omp_unset_lock’ - Unset simple lock
  ------------------------------------------
  
  _Description_:
       A simple lock about to be unset must have been locked by
!      ‘omp_set_lock’ or ‘omp_test_lock’ before.  In addition, the lock
!      must be held by the thread calling ‘omp_unset_lock’.  Then, the
       lock becomes unlocked.  If one or more threads attempted to set the
       lock before, one of them is chosen to, again, set the lock to
       itself.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_unset_lock(omp_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_unset_lock(svar)’
!                     ‘integer(omp_lock_kind), intent(inout) :: svar’
  
  _See also_:
       *note omp_set_lock::, *note omp_test_lock::
*************** _Reference_:
*** 2463,2486 ****
  
  File: libgomp.info,  Node: omp_unset_nest_lock,  Next: omp_test_lock,  Prev: omp_unset_lock,  Up: Lock Routines
  
! 3.8.8 'omp_unset_nest_lock' - Unset nested lock
  -----------------------------------------------
  
  _Description_:
       A nested lock about to be unset must have been locked by
!      'omp_set_nested_lock' or 'omp_test_nested_lock' before.  In
       addition, the lock must be held by the thread calling
!      'omp_unset_nested_lock'.  If the nesting count drops to zero, the
       lock becomes unlocked.  If one ore more threads attempted to set
       the lock before, one of them is chosen to, again, set the lock to
       itself.
  
  _C/C++_:
!      _Prototype_:   'void omp_unset_nest_lock(omp_nest_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_unset_nest_lock(nvar)'
!                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
  
  _See also_:
       *note omp_set_nest_lock::
--- 2463,2486 ----
  
  File: libgomp.info,  Node: omp_unset_nest_lock,  Next: omp_test_lock,  Prev: omp_unset_lock,  Up: Lock Routines
  
! 3.8.8 ‘omp_unset_nest_lock’ - Unset nested lock
  -----------------------------------------------
  
  _Description_:
       A nested lock about to be unset must have been locked by
!      ‘omp_set_nested_lock’ or ‘omp_test_nested_lock’ before.  In
       addition, the lock must be held by the thread calling
!      ‘omp_unset_nested_lock’.  If the nesting count drops to zero, the
       lock becomes unlocked.  If one ore more threads attempted to set
       the lock before, one of them is chosen to, again, set the lock to
       itself.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_unset_nest_lock(omp_nest_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_unset_nest_lock(nvar)’
!                     ‘integer(omp_nest_lock_kind), intent(inout) :: nvar’
  
  _See also_:
       *note omp_set_nest_lock::
*************** _Reference_:
*** 2491,2512 ****
  
  File: libgomp.info,  Node: omp_test_lock,  Next: omp_test_nest_lock,  Prev: omp_unset_nest_lock,  Up: Lock Routines
  
! 3.8.9 'omp_test_lock' - Test and set simple lock if available
  -------------------------------------------------------------
  
  _Description_:
       Before setting a simple lock, the lock variable must be initialized
!      by 'omp_init_lock'.  Contrary to 'omp_set_lock', 'omp_test_lock'
       does not block if the lock is not available.  This function returns
!      'true' upon success, 'false' otherwise.  Here, 'true' and 'false'
       represent their language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   'int omp_test_lock(omp_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_test_lock(svar)'
!                     'integer(omp_lock_kind), intent(inout) :: svar'
  
  _See also_:
       *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
--- 2491,2512 ----
  
  File: libgomp.info,  Node: omp_test_lock,  Next: omp_test_nest_lock,  Prev: omp_unset_nest_lock,  Up: Lock Routines
  
! 3.8.9 ‘omp_test_lock’ - Test and set simple lock if available
  -------------------------------------------------------------
  
  _Description_:
       Before setting a simple lock, the lock variable must be initialized
!      by ‘omp_init_lock’.  Contrary to ‘omp_set_lock’, ‘omp_test_lock’
       does not block if the lock is not available.  This function returns
!      ‘true’ upon success, ‘false’ otherwise.  Here, ‘true’ and ‘false’
       represent their language-specific counterparts.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_test_lock(omp_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_test_lock(svar)’
!                     ‘integer(omp_lock_kind), intent(inout) :: svar’
  
  _See also_:
       *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
*************** _Reference_:
*** 2517,2538 ****
  
  File: libgomp.info,  Node: omp_test_nest_lock,  Prev: omp_test_lock,  Up: Lock Routines
  
! 3.8.10 'omp_test_nest_lock' - Test and set nested lock if available
  -------------------------------------------------------------------
  
  _Description_:
       Before setting a nested lock, the lock variable must be initialized
!      by 'omp_init_nest_lock'.  Contrary to 'omp_set_nest_lock',
!      'omp_test_nest_lock' does not block if the lock is not available.
       If the lock is already held by the current thread, the new nesting
       count is returned.  Otherwise, the return value equals zero.
  
  _C/C++_:
!      _Prototype_:   'int omp_test_nest_lock(omp_nest_lock_t *lock);'
  
  _Fortran_:
!      _Interface_:   'logical function omp_test_nest_lock(nvar)'
!                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
  
  _See also_:
       *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
--- 2517,2538 ----
  
  File: libgomp.info,  Node: omp_test_nest_lock,  Prev: omp_test_lock,  Up: Lock Routines
  
! 3.8.10 ‘omp_test_nest_lock’ - Test and set nested lock if available
  -------------------------------------------------------------------
  
  _Description_:
       Before setting a nested lock, the lock variable must be initialized
!      by ‘omp_init_nest_lock’.  Contrary to ‘omp_set_nest_lock’,
!      ‘omp_test_nest_lock’ does not block if the lock is not available.
       If the lock is already held by the current thread, the new nesting
       count is returned.  Otherwise, the return value equals zero.
  
  _C/C++_:
!      _Prototype_:   ‘int omp_test_nest_lock(omp_nest_lock_t *lock);’
  
  _Fortran_:
!      _Interface_:   ‘logical function omp_test_nest_lock(nvar)’
!                     ‘integer(omp_nest_lock_kind), intent(inout) :: nvar’
  
  _See also_:
       *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
*************** and do not throw exceptions.
*** 2557,2563 ****
  
  File: libgomp.info,  Node: omp_get_wtick,  Next: omp_get_wtime,  Up: Timing Routines
  
! 3.9.1 'omp_get_wtick' - Get timer precision
  -------------------------------------------
  
  _Description_:
--- 2557,2563 ----
  
  File: libgomp.info,  Node: omp_get_wtick,  Next: omp_get_wtime,  Up: Timing Routines
  
! 3.9.1 ‘omp_get_wtick’ - Get timer precision
  -------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2565,2574 ****
       successive clock ticks.
  
  _C/C++_:
!      _Prototype_:   'double omp_get_wtick(void);'
  
  _Fortran_:
!      _Interface_:   'double precision function omp_get_wtick()'
  
  _See also_:
       *note omp_get_wtime::
--- 2565,2574 ----
       successive clock ticks.
  
  _C/C++_:
!      _Prototype_:   ‘double omp_get_wtick(void);’
  
  _Fortran_:
!      _Interface_:   ‘double precision function omp_get_wtick()’
  
  _See also_:
       *note omp_get_wtime::
*************** _Reference_:
*** 2579,2585 ****
  
  File: libgomp.info,  Node: omp_get_wtime,  Prev: omp_get_wtick,  Up: Timing Routines
  
! 3.9.2 'omp_get_wtime' - Elapsed wall clock time
  -----------------------------------------------
  
  _Description_:
--- 2579,2585 ----
  
  File: libgomp.info,  Node: omp_get_wtime,  Prev: omp_get_wtick,  Up: Timing Routines
  
! 3.9.2 ‘omp_get_wtime’ - Elapsed wall clock time
  -----------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2590,2599 ****
       execution of the program.
  
  _C/C++_:
!      _Prototype_:   'double omp_get_wtime(void);'
  
  _Fortran_:
!      _Interface_:   'double precision function omp_get_wtime()'
  
  _See also_:
       *note omp_get_wtick::
--- 2590,2599 ----
       execution of the program.
  
  _C/C++_:
!      _Prototype_:   ‘double omp_get_wtime(void);’
  
  _Fortran_:
!      _Interface_:   ‘double precision function omp_get_wtime()’
  
  _See also_:
       *note omp_get_wtick::
*************** exceptions.
*** 2617,2623 ****
  
  File: libgomp.info,  Node: omp_fulfill_event,  Up: Event Routine
  
! 3.10.1 'omp_fulfill_event' - Fulfill and destroy an OpenMP event
  ----------------------------------------------------------------
  
  _Description_:
--- 2617,2623 ----
  
  File: libgomp.info,  Node: omp_fulfill_event,  Up: Event Routine
  
! 3.10.1 ‘omp_fulfill_event’ - Fulfill and destroy an OpenMP event
  ----------------------------------------------------------------
  
  _Description_:
*************** _Description_:
*** 2626,2642 ****
       clauses on task constructs - the effect of fulfilling the event is
       to allow the task to complete.
  
!      The result of calling 'omp_fulfill_event' with an event handle
       other than that generated by a detach clause is undefined.  Calling
       it with an event handle that has already been fulfilled is also
       undefined.
  
  _C/C++_:
!      _Prototype_:   'void omp_fulfill_event(omp_event_handle_t event);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_fulfill_event(event)'
!                     'integer (kind=omp_event_handle_kind) :: event'
  
  _Reference_:
       OpenMP specification v5.0 (https://www.openmp.org), Section 3.5.1.
--- 2626,2642 ----
       clauses on task constructs - the effect of fulfilling the event is
       to allow the task to complete.
  
!      The result of calling ‘omp_fulfill_event’ with an event handle
       other than that generated by a detach clause is undefined.  Calling
       it with an event handle that has already been fulfilled is also
       undefined.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_fulfill_event(omp_event_handle_t event);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_fulfill_event(event)’
!                     ‘integer (kind=omp_event_handle_kind) :: event’
  
  _Reference_:
       OpenMP specification v5.0 (https://www.openmp.org), Section 3.5.1.
*************** C linkage and do not throw exceptions.
*** 2666,2700 ****
  
  File: libgomp.info,  Node: omp_init_allocator,  Next: omp_destroy_allocator,  Up: Memory Management Routines
  
! 3.11.1 'omp_init_allocator' - Create an allocator
  -------------------------------------------------
  
  _Description_:
       Create an allocator that uses the specified memory space and has
       the specified traits; if an allocator that fulfills the
!      requirements cannot be created, 'omp_null_allocator' is returned.
  
       The predefined memory spaces and available traits can be found at
       *note OMP_ALLOCATOR::, where the trait names have to be prefixed by
!      'omp_atk_' (e.g.  'omp_atk_pinned') and the named trait values by
!      'omp_atv_' (e.g.  'omp_atv_true'); additionally, 'omp_atv_default'
       may be used as trait value to specify that the default value should
       be used.
  
  _C/C++_:
!      _Prototype_:   'omp_allocator_handle_t omp_init_allocator('
!                     ' omp_memspace_handle_t memspace,'
!                     ' int ntraits,'
!                     ' const omp_alloctrait_t traits[]);'
  
  _Fortran_:
!      _Interface_:   'function omp_init_allocator(memspace, ntraits, traits)'
!                     'integer (omp_allocator_handle_kind) ::
!                     omp_init_allocator'
!                     'integer (omp_memspace_handle_kind), intent(in) ::
!                     memspace'
!                     'integer, intent(in) :: ntraits'
!                     'type (omp_alloctrait), intent(in) :: traits(*)'
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
--- 2666,2700 ----
  
  File: libgomp.info,  Node: omp_init_allocator,  Next: omp_destroy_allocator,  Up: Memory Management Routines
  
! 3.11.1 ‘omp_init_allocator’ - Create an allocator
  -------------------------------------------------
  
  _Description_:
       Create an allocator that uses the specified memory space and has
       the specified traits; if an allocator that fulfills the
!      requirements cannot be created, ‘omp_null_allocator’ is returned.
  
       The predefined memory spaces and available traits can be found at
       *note OMP_ALLOCATOR::, where the trait names have to be prefixed by
!      ‘omp_atk_’ (e.g.  ‘omp_atk_pinned’) and the named trait values by
!      ‘omp_atv_’ (e.g.  ‘omp_atv_true’); additionally, ‘omp_atv_default’
       may be used as trait value to specify that the default value should
       be used.
  
  _C/C++_:
!      _Prototype_:   ‘omp_allocator_handle_t omp_init_allocator(’
!                     ‘ omp_memspace_handle_t memspace,’
!                     ‘ int ntraits,’
!                     ‘ const omp_alloctrait_t traits[]);’
  
  _Fortran_:
!      _Interface_:   ‘function omp_init_allocator(memspace, ntraits, traits)’
!                     ‘integer (omp_allocator_handle_kind) ::
!                     omp_init_allocator’
!                     ‘integer (omp_memspace_handle_kind), intent(in) ::
!                     memspace’
!                     ‘integer, intent(in) :: ntraits’
!                     ‘type (omp_alloctrait), intent(in) :: traits(*)’
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
*************** _Reference_:
*** 2706,2728 ****
  
  File: libgomp.info,  Node: omp_destroy_allocator,  Next: omp_set_default_allocator,  Prev: omp_init_allocator,  Up: Memory Management Routines
  
! 3.11.2 'omp_destroy_allocator' - Destroy an allocator
  -----------------------------------------------------
  
  _Description_:
       Releases all resources used by a memory allocator, which must not
       represent a predefined memory allocator.  Accessing memory after
       its allocator has been destroyed has unspecified behavior.  Passing
!      'omp_null_allocator' to the routine is permitted but has no effect.
  
  _C/C++_:
!      _Prototype_:   'void omp_destroy_allocator (omp_allocator_handle_t
!                     allocator);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_destroy_allocator(allocator)'
!                     'integer (omp_allocator_handle_kind), intent(in) ::
!                     allocator'
  
  _See also_:
       *note omp_init_allocator::
--- 2706,2728 ----
  
  File: libgomp.info,  Node: omp_destroy_allocator,  Next: omp_set_default_allocator,  Prev: omp_init_allocator,  Up: Memory Management Routines
  
! 3.11.2 ‘omp_destroy_allocator’ - Destroy an allocator
  -----------------------------------------------------
  
  _Description_:
       Releases all resources used by a memory allocator, which must not
       represent a predefined memory allocator.  Accessing memory after
       its allocator has been destroyed has unspecified behavior.  Passing
!      ‘omp_null_allocator’ to the routine is permitted but has no effect.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_destroy_allocator (omp_allocator_handle_t
!                     allocator);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_destroy_allocator(allocator)’
!                     ‘integer (omp_allocator_handle_kind), intent(in) ::
!                     allocator’
  
  _See also_:
       *note omp_init_allocator::
*************** _Reference_:
*** 2733,2754 ****
  
  File: libgomp.info,  Node: omp_set_default_allocator,  Next: omp_get_default_allocator,  Prev: omp_destroy_allocator,  Up: Memory Management Routines
  
! 3.11.3 'omp_set_default_allocator' - Set the default allocator
  --------------------------------------------------------------
  
  _Description_:
       Sets the default allocator that is used when no allocator has been
!      specified in the 'allocate' or 'allocator' clause or if an OpenMP
!      memory routine is invoked with the 'omp_null_allocator' allocator.
  
  _C/C++_:
!      _Prototype_:   'void omp_set_default_allocator(omp_allocator_handle_t
!                     allocator);'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_set_default_allocator(allocator)'
!                     'integer (omp_allocator_handle_kind), intent(in) ::
!                     allocator'
  
  _See also_:
       *note omp_get_default_allocator::, *note omp_init_allocator::,
--- 2733,2754 ----
  
  File: libgomp.info,  Node: omp_set_default_allocator,  Next: omp_get_default_allocator,  Prev: omp_destroy_allocator,  Up: Memory Management Routines
  
! 3.11.3 ‘omp_set_default_allocator’ - Set the default allocator
  --------------------------------------------------------------
  
  _Description_:
       Sets the default allocator that is used when no allocator has been
!      specified in the ‘allocate’ or ‘allocator’ clause or if an OpenMP
!      memory routine is invoked with the ‘omp_null_allocator’ allocator.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_set_default_allocator(omp_allocator_handle_t
!                     allocator);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_set_default_allocator(allocator)’
!                     ‘integer (omp_allocator_handle_kind), intent(in) ::
!                     allocator’
  
  _See also_:
       *note omp_get_default_allocator::, *note omp_init_allocator::,
*************** _Reference_:
*** 2760,2781 ****
  
  File: libgomp.info,  Node: omp_get_default_allocator,  Next: omp_alloc,  Prev: omp_set_default_allocator,  Up: Memory Management Routines
  
! 3.11.4 'omp_get_default_allocator' - Get the default allocator
  --------------------------------------------------------------
  
  _Description_:
       The routine returns the default allocator that is used when no
!      allocator has been specified in the 'allocate' or 'allocator'
       clause or if an OpenMP memory routine is invoked with the
!      'omp_null_allocator' allocator.
  
  _C/C++_:
!      _Prototype_:   'omp_allocator_handle_t omp_get_default_allocator();'
  
  _Fortran_:
!      _Interface_:   'function omp_get_default_allocator()'
!                     'integer (omp_allocator_handle_kind) ::
!                     omp_get_default_allocator'
  
  _See also_:
       *note omp_set_default_allocator::, *note OMP_ALLOCATOR::
--- 2760,2781 ----
  
  File: libgomp.info,  Node: omp_get_default_allocator,  Next: omp_alloc,  Prev: omp_set_default_allocator,  Up: Memory Management Routines
  
! 3.11.4 ‘omp_get_default_allocator’ - Get the default allocator
  --------------------------------------------------------------
  
  _Description_:
       The routine returns the default allocator that is used when no
!      allocator has been specified in the ‘allocate’ or ‘allocator’
       clause or if an OpenMP memory routine is invoked with the
!      ‘omp_null_allocator’ allocator.
  
  _C/C++_:
!      _Prototype_:   ‘omp_allocator_handle_t omp_get_default_allocator();’
  
  _Fortran_:
!      _Interface_:   ‘function omp_get_default_allocator()’
!                     ‘integer (omp_allocator_handle_kind) ::
!                     omp_get_default_allocator’
  
  _See also_:
       *note omp_set_default_allocator::, *note OMP_ALLOCATOR::
*************** _Reference_:
*** 2786,2829 ****
  
  File: libgomp.info,  Node: omp_alloc,  Next: omp_aligned_alloc,  Prev: omp_get_default_allocator,  Up: Memory Management Routines
  
! 3.11.5 'omp_alloc' - Memory allocation with an allocator
  --------------------------------------------------------
  
  _Description_:
       Allocate memory with the specified allocator, which can either be a
!      predefined allocator, an allocator handle or 'omp_null_allocator'.
!      If the allocators is 'omp_null_allocator', the allocator specified
       by the DEF-ALLOCATOR-VAR ICV is used.  SIZE must be a nonnegative
       number denoting the number of bytes to be allocated; if SIZE is
!      zero, 'omp_alloc' will return a null pointer.  If successful, a
       pointer to the allocated memory is returned, otherwise the
!      'fallback' trait of the allocator determines the behavior.  The
       content of the allocated memory is unspecified.
  
!      In 'target' regions, either the 'dynamic_allocators' clause must
!      appear on a 'requires' directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      'omp_null_allocator'.
  
!      Memory allocated by 'omp_alloc' must be freed using 'omp_free'.
  
  _C_:
!      _Prototype_:   'void* omp_alloc(size_t size,'
!                     ' omp_allocator_handle_t allocator)'
  
  _C++_:
!      _Prototype_:   'void* omp_alloc(size_t size,'
!                     ' omp_allocator_handle_t allocator=omp_null_allocator)'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_alloc(size, allocator)
!                     bind(C)'
!                     'use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t'
!                     'integer (c_size_t), value :: size'
!                     'integer (omp_allocator_handle_kind), value ::
!                     allocator'
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
--- 2786,2829 ----
  
  File: libgomp.info,  Node: omp_alloc,  Next: omp_aligned_alloc,  Prev: omp_get_default_allocator,  Up: Memory Management Routines
  
! 3.11.5 ‘omp_alloc’ - Memory allocation with an allocator
  --------------------------------------------------------
  
  _Description_:
       Allocate memory with the specified allocator, which can either be a
!      predefined allocator, an allocator handle or ‘omp_null_allocator’.
!      If the allocators is ‘omp_null_allocator’, the allocator specified
       by the DEF-ALLOCATOR-VAR ICV is used.  SIZE must be a nonnegative
       number denoting the number of bytes to be allocated; if SIZE is
!      zero, ‘omp_alloc’ will return a null pointer.  If successful, a
       pointer to the allocated memory is returned, otherwise the
!      ‘fallback’ trait of the allocator determines the behavior.  The
       content of the allocated memory is unspecified.
  
!      In ‘target’ regions, either the ‘dynamic_allocators’ clause must
!      appear on a ‘requires’ directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      ‘omp_null_allocator’.
  
!      Memory allocated by ‘omp_alloc’ must be freed using ‘omp_free’.
  
  _C_:
!      _Prototype_:   ‘void* omp_alloc(size_t size,’
!                     ‘ omp_allocator_handle_t allocator)’
  
  _C++_:
!      _Prototype_:   ‘void* omp_alloc(size_t size,’
!                     ‘ omp_allocator_handle_t allocator=omp_null_allocator)’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_alloc(size, allocator)
!                     bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t’
!                     ‘integer (c_size_t), value :: size’
!                     ‘integer (omp_allocator_handle_kind), value ::
!                     allocator’
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
*************** _Reference_:
*** 2836,2886 ****
  
  File: libgomp.info,  Node: omp_aligned_alloc,  Next: omp_free,  Prev: omp_alloc,  Up: Memory Management Routines
  
! 3.11.6 'omp_aligned_alloc' - Memory allocation with an allocator and alignment
  ------------------------------------------------------------------------------
  
  _Description_:
       Allocate memory with the specified allocator, which can either be a
!      predefined allocator, an allocator handle or 'omp_null_allocator'.
!      If the allocators is 'omp_null_allocator', the allocator specified
       by the DEF-ALLOCATOR-VAR ICV is used.  ALIGNMENT must be a positive
       power of two and SIZE must be a nonnegative number that is a
       multiple of the alignment and denotes the number of bytes to be
!      allocated; if SIZE is zero, 'omp_aligned_alloc' will return a null
       pointer.  The alignment will be at least the maximal value required
!      by 'alignment' trait of the allocator and the value of the passed
       ALIGNMENT argument.  If successful, a pointer to the allocated
!      memory is returned, otherwise the 'fallback' trait of the allocator
       determines the behavior.  The content of the allocated memory is
       unspecified.
  
!      In 'target' regions, either the 'dynamic_allocators' clause must
!      appear on a 'requires' directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      'omp_null_allocator'.
  
!      Memory allocated by 'omp_aligned_alloc' must be freed using
!      'omp_free'.
  
  _C_:
!      _Prototype_:   'void* omp_aligned_alloc(size_t alignment,'
!                     ' size_t size,'
!                     ' omp_allocator_handle_t allocator)'
  
  _C++_:
!      _Prototype_:   'void* omp_aligned_alloc(size_t alignment,'
!                     ' size_t size,'
!                     ' omp_allocator_handle_t allocator=omp_null_allocator)'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_aligned_alloc(alignment, size,
!                     allocator) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t'
!                     'integer (c_size_t), value :: alignment, size'
!                     'integer (omp_allocator_handle_kind), value ::
!                     allocator'
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
--- 2836,2886 ----
  
  File: libgomp.info,  Node: omp_aligned_alloc,  Next: omp_free,  Prev: omp_alloc,  Up: Memory Management Routines
  
! 3.11.6 ‘omp_aligned_alloc’ - Memory allocation with an allocator and alignment
  ------------------------------------------------------------------------------
  
  _Description_:
       Allocate memory with the specified allocator, which can either be a
!      predefined allocator, an allocator handle or ‘omp_null_allocator’.
!      If the allocators is ‘omp_null_allocator’, the allocator specified
       by the DEF-ALLOCATOR-VAR ICV is used.  ALIGNMENT must be a positive
       power of two and SIZE must be a nonnegative number that is a
       multiple of the alignment and denotes the number of bytes to be
!      allocated; if SIZE is zero, ‘omp_aligned_alloc’ will return a null
       pointer.  The alignment will be at least the maximal value required
!      by ‘alignment’ trait of the allocator and the value of the passed
       ALIGNMENT argument.  If successful, a pointer to the allocated
!      memory is returned, otherwise the ‘fallback’ trait of the allocator
       determines the behavior.  The content of the allocated memory is
       unspecified.
  
!      In ‘target’ regions, either the ‘dynamic_allocators’ clause must
!      appear on a ‘requires’ directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      ‘omp_null_allocator’.
  
!      Memory allocated by ‘omp_aligned_alloc’ must be freed using
!      ‘omp_free’.
  
  _C_:
!      _Prototype_:   ‘void* omp_aligned_alloc(size_t alignment,’
!                     ‘ size_t size,’
!                     ‘ omp_allocator_handle_t allocator)’
  
  _C++_:
!      _Prototype_:   ‘void* omp_aligned_alloc(size_t alignment,’
!                     ‘ size_t size,’
!                     ‘ omp_allocator_handle_t allocator=omp_null_allocator)’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_aligned_alloc(alignment, size,
!                     allocator) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t’
!                     ‘integer (c_size_t), value :: alignment, size’
!                     ‘integer (omp_allocator_handle_kind), value ::
!                     allocator’
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
*************** _Reference_:
*** 2893,2928 ****
  
  File: libgomp.info,  Node: omp_free,  Next: omp_calloc,  Prev: omp_aligned_alloc,  Up: Memory Management Routines
  
! 3.11.7 'omp_free' - Freeing memory allocated with OpenMP routines
  -----------------------------------------------------------------
  
  _Description_:
!      The 'omp_free' routine deallocates memory previously allocated by
       an OpenMP memory-management routine.  The PTR argument must point
       to such memory or be a null pointer; if it is a null pointer, no
       operation is performed.  If specified, the ALLOCATOR argument must
       be either the memory allocator that was used for the allocation or
!      'omp_null_allocator'; if it is 'omp_null_allocator', the
       implementation will determine the value automatically.
  
!      Calling 'omp_free' invokes undefined behavior if the memory was
       already deallocated or when the used allocator has already been
       destroyed.
  
  _C_:
!      _Prototype_:   'void omp_free(void *ptr,'
!                     ' omp_allocator_handle_t allocator)'
  
  _C++_:
!      _Prototype_:   'void omp_free(void *ptr,'
!                     ' omp_allocator_handle_t allocator=omp_null_allocator)'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_free(ptr, allocator) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only : c_ptr'
!                     'type (c_ptr), value :: ptr'
!                     'integer (omp_allocator_handle_kind), value ::
!                     allocator'
  
  _See also_:
       *note omp_alloc::, *note omp_aligned_alloc::, *note omp_calloc::,
--- 2893,2928 ----
  
  File: libgomp.info,  Node: omp_free,  Next: omp_calloc,  Prev: omp_aligned_alloc,  Up: Memory Management Routines
  
! 3.11.7 ‘omp_free’ - Freeing memory allocated with OpenMP routines
  -----------------------------------------------------------------
  
  _Description_:
!      The ‘omp_free’ routine deallocates memory previously allocated by
       an OpenMP memory-management routine.  The PTR argument must point
       to such memory or be a null pointer; if it is a null pointer, no
       operation is performed.  If specified, the ALLOCATOR argument must
       be either the memory allocator that was used for the allocation or
!      ‘omp_null_allocator’; if it is ‘omp_null_allocator’, the
       implementation will determine the value automatically.
  
!      Calling ‘omp_free’ invokes undefined behavior if the memory was
       already deallocated or when the used allocator has already been
       destroyed.
  
  _C_:
!      _Prototype_:   ‘void omp_free(void *ptr,’
!                     ‘ omp_allocator_handle_t allocator)’
  
  _C++_:
!      _Prototype_:   ‘void omp_free(void *ptr,’
!                     ‘ omp_allocator_handle_t allocator=omp_null_allocator)’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_free(ptr, allocator) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only : c_ptr’
!                     ‘type (c_ptr), value :: ptr’
!                     ‘integer (omp_allocator_handle_kind), value ::
!                     allocator’
  
  _See also_:
       *note omp_alloc::, *note omp_aligned_alloc::, *note omp_calloc::,
*************** _Reference_:
*** 2934,2978 ****
  
  File: libgomp.info,  Node: omp_calloc,  Next: omp_aligned_calloc,  Prev: omp_free,  Up: Memory Management Routines
  
! 3.11.8 'omp_calloc' - Allocate nullified memory with an allocator
  -----------------------------------------------------------------
  
  _Description_:
       Allocate zero-initialized memory with the specified allocator,
       which can either be a predefined allocator, an allocator handle or
!      'omp_null_allocator'.  If the allocators is 'omp_null_allocator',
       the allocator specified by the DEF-ALLOCATOR-VAR ICV is used.  The
       to-be allocated memory is for an array with NMEMB elements, each
       having a size of SIZE bytes.  Both NMEMB and SIZE must be
!      nonnegative numbers; if either of them is zero, 'omp_calloc' will
       return a null pointer.  If successful, a pointer to the
       zero-initialized allocated memory is returned, otherwise the
!      'fallback' trait of the allocator determines the behavior.
  
!      In 'target' regions, either the 'dynamic_allocators' clause must
!      appear on a 'requires' directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      'omp_null_allocator'.
  
!      Memory allocated by 'omp_calloc' must be freed using 'omp_free'.
  
  _C_:
!      _Prototype_:   'void* omp_calloc(size_t nmemb, size_t size,'
!                     ' omp_allocator_handle_t allocator)'
  
  _C++_:
!      _Prototype_:   'void* omp_calloc(size_t nmemb, size_t size,'
!                     ' omp_allocator_handle_t allocator=omp_null_allocator)'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_calloc(nmemb, size, allocator)
!                     bind(C)'
!                     'use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t'
!                     'integer (c_size_t), value :: nmemb, size'
!                     'integer (omp_allocator_handle_kind), value ::
!                     allocator'
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
--- 2934,2978 ----
  
  File: libgomp.info,  Node: omp_calloc,  Next: omp_aligned_calloc,  Prev: omp_free,  Up: Memory Management Routines
  
! 3.11.8 ‘omp_calloc’ - Allocate nullified memory with an allocator
  -----------------------------------------------------------------
  
  _Description_:
       Allocate zero-initialized memory with the specified allocator,
       which can either be a predefined allocator, an allocator handle or
!      ‘omp_null_allocator’.  If the allocators is ‘omp_null_allocator’,
       the allocator specified by the DEF-ALLOCATOR-VAR ICV is used.  The
       to-be allocated memory is for an array with NMEMB elements, each
       having a size of SIZE bytes.  Both NMEMB and SIZE must be
!      nonnegative numbers; if either of them is zero, ‘omp_calloc’ will
       return a null pointer.  If successful, a pointer to the
       zero-initialized allocated memory is returned, otherwise the
!      ‘fallback’ trait of the allocator determines the behavior.
  
!      In ‘target’ regions, either the ‘dynamic_allocators’ clause must
!      appear on a ‘requires’ directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      ‘omp_null_allocator’.
  
!      Memory allocated by ‘omp_calloc’ must be freed using ‘omp_free’.
  
  _C_:
!      _Prototype_:   ‘void* omp_calloc(size_t nmemb, size_t size,’
!                     ‘ omp_allocator_handle_t allocator)’
  
  _C++_:
!      _Prototype_:   ‘void* omp_calloc(size_t nmemb, size_t size,’
!                     ‘ omp_allocator_handle_t allocator=omp_null_allocator)’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_calloc(nmemb, size, allocator)
!                     bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t’
!                     ‘integer (c_size_t), value :: nmemb, size’
!                     ‘integer (omp_allocator_handle_kind), value ::
!                     allocator’
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
*************** _Reference_:
*** 2985,3034 ****
  
  File: libgomp.info,  Node: omp_aligned_calloc,  Next: omp_realloc,  Prev: omp_calloc,  Up: Memory Management Routines
  
! 3.11.9 'omp_aligned_calloc' - Allocate aligned nullified memory with an allocator
  ---------------------------------------------------------------------------------
  
  _Description_:
       Allocate zero-initialized memory with the specified allocator,
       which can either be a predefined allocator, an allocator handle or
!      'omp_null_allocator'.  If the allocators is 'omp_null_allocator',
       the allocator specified by the DEF-ALLOCATOR-VAR ICV is used.  The
       to-be allocated memory is for an array with NMEMB elements, each
       having a size of SIZE bytes.  Both NMEMB and SIZE must be
       nonnegative numbers; if either of them is zero,
!      'omp_aligned_calloc' will return a null pointer.  ALIGNMENT must be
       a positive power of two and SIZE must be a multiple of the
       alignment; the alignment will be at least the maximal value
!      required by 'alignment' trait of the allocator and the value of the
       passed ALIGNMENT argument.  If successful, a pointer to the
       zero-initialized allocated memory is returned, otherwise the
!      'fallback' trait of the allocator determines the behavior.
  
!      In 'target' regions, either the 'dynamic_allocators' clause must
!      appear on a 'requires' directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      'omp_null_allocator'.
  
!      Memory allocated by 'omp_aligned_calloc' must be freed using
!      'omp_free'.
  
  _C_:
!      _Prototype_:   'void* omp_aligned_calloc(size_t nmemb, size_t size,'
!                     ' omp_allocator_handle_t allocator)'
  
  _C++_:
!      _Prototype_:   'void* omp_aligned_calloc(size_t nmemb, size_t size,'
!                     ' omp_allocator_handle_t allocator=omp_null_allocator)'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_aligned_calloc(nmemb, size,
!                     allocator) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t'
!                     'integer (c_size_t), value :: nmemb, size'
!                     'integer (omp_allocator_handle_kind), value ::
!                     allocator'
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
--- 2985,3034 ----
  
  File: libgomp.info,  Node: omp_aligned_calloc,  Next: omp_realloc,  Prev: omp_calloc,  Up: Memory Management Routines
  
! 3.11.9 ‘omp_aligned_calloc’ - Allocate aligned nullified memory with an allocator
  ---------------------------------------------------------------------------------
  
  _Description_:
       Allocate zero-initialized memory with the specified allocator,
       which can either be a predefined allocator, an allocator handle or
!      ‘omp_null_allocator’.  If the allocators is ‘omp_null_allocator’,
       the allocator specified by the DEF-ALLOCATOR-VAR ICV is used.  The
       to-be allocated memory is for an array with NMEMB elements, each
       having a size of SIZE bytes.  Both NMEMB and SIZE must be
       nonnegative numbers; if either of them is zero,
!      ‘omp_aligned_calloc’ will return a null pointer.  ALIGNMENT must be
       a positive power of two and SIZE must be a multiple of the
       alignment; the alignment will be at least the maximal value
!      required by ‘alignment’ trait of the allocator and the value of the
       passed ALIGNMENT argument.  If successful, a pointer to the
       zero-initialized allocated memory is returned, otherwise the
!      ‘fallback’ trait of the allocator determines the behavior.
  
!      In ‘target’ regions, either the ‘dynamic_allocators’ clause must
!      appear on a ‘requires’ directive in the same compilation unit - or
       the ALLOCATOR argument may only be a constant expression with the
       value of one of the predefined allocators and may not be
!      ‘omp_null_allocator’.
  
!      Memory allocated by ‘omp_aligned_calloc’ must be freed using
!      ‘omp_free’.
  
  _C_:
!      _Prototype_:   ‘void* omp_aligned_calloc(size_t nmemb, size_t size,’
!                     ‘ omp_allocator_handle_t allocator)’
  
  _C++_:
!      _Prototype_:   ‘void* omp_aligned_calloc(size_t nmemb, size_t size,’
!                     ‘ omp_allocator_handle_t allocator=omp_null_allocator)’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_aligned_calloc(nmemb, size,
!                     allocator) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t’
!                     ‘integer (c_size_t), value :: nmemb, size’
!                     ‘integer (omp_allocator_handle_kind), value ::
!                     allocator’
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
*************** _Reference_:
*** 3041,3051 ****
  
  File: libgomp.info,  Node: omp_realloc,  Prev: omp_aligned_calloc,  Up: Memory Management Routines
  
! 3.11.10 'omp_realloc' - Reallocate memory allocated with OpenMP routines
  ------------------------------------------------------------------------
  
  _Description_:
!      The 'omp_realloc' routine deallocates memory to which PTR points to
       and allocates new memory with the specified ALLOCATOR argument; the
       new memory will have the content of the old memory up to the
       minimum of the old size and the new SIZE, otherwise the content of
--- 3041,3051 ----
  
  File: libgomp.info,  Node: omp_realloc,  Prev: omp_aligned_calloc,  Up: Memory Management Routines
  
! 3.11.10 ‘omp_realloc’ - Reallocate memory allocated with OpenMP routines
  ------------------------------------------------------------------------
  
  _Description_:
!      The ‘omp_realloc’ routine deallocates memory to which PTR points to
       and allocates new memory with the specified ALLOCATOR argument; the
       new memory will have the content of the old memory up to the
       minimum of the old size and the new SIZE, otherwise the content of
*************** _Description_:
*** 3056,3107 ****
       routine.
  
       The ALLOCATOR and FREE_ALLOCATOR arguments must be a predefined
!      allocator, an allocator handle or 'omp_null_allocator'.  If
!      FREE_ALLOCATOR is 'omp_null_allocator', the implementation
       automatically determines the allocator used for the allocation of
!      PTR.  If ALLOCATOR is 'omp_null_allocator' and PTR is not a null
!      pointer, the same allocator as 'free_allocator' is used and when
       PTR is a null pointer the allocator specified by the
       DEF-ALLOCATOR-VAR ICV is used.
  
       The SIZE must be a nonnegative number denoting the number of bytes
!      to be allocated; if SIZE is zero, 'omp_realloc' will return free
       the memory and return a null pointer.  When SIZE is nonzero: if
       successful, a pointer to the allocated memory is returned,
!      otherwise the 'fallback' trait of the allocator determines the
       behavior.
  
!      In 'target' regions, either the 'dynamic_allocators' clause must
!      appear on a 'requires' directive in the same compilation unit - or
       the FREE_ALLOCATOR and ALLOCATOR arguments may only be a constant
       expression with the value of one of the predefined allocators and
!      may not be 'omp_null_allocator'.
  
!      Memory allocated by 'omp_realloc' must be freed using 'omp_free'.
!      Calling 'omp_free' invokes undefined behavior if the memory was
       already deallocated or when the used allocator has already been
       destroyed.
  
  _C_:
!      _Prototype_:   'void* omp_realloc(void *ptr, size_t size,'
!                     ' omp_allocator_handle_t allocator,'
!                     ' omp_allocator_handle_t free_allocator)'
  
  _C++_:
!      _Prototype_:   'void* omp_realloc(void *ptr, size_t size,'
!                     ' omp_allocator_handle_t allocator=omp_null_allocator,'
!                     ' omp_allocator_handle_t
!                     free_allocator=omp_null_allocator)'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function omp_realloc(ptr, size, allocator,
!                     free_allocator) bind(C)'
!                     'use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t'
!                     'type(C_ptr), value :: ptr'
!                     'integer (c_size_t), value :: size'
!                     'integer (omp_allocator_handle_kind), value ::
!                     allocator, free_allocator'
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
--- 3056,3107 ----
       routine.
  
       The ALLOCATOR and FREE_ALLOCATOR arguments must be a predefined
!      allocator, an allocator handle or ‘omp_null_allocator’.  If
!      FREE_ALLOCATOR is ‘omp_null_allocator’, the implementation
       automatically determines the allocator used for the allocation of
!      PTR.  If ALLOCATOR is ‘omp_null_allocator’ and PTR is not a null
!      pointer, the same allocator as ‘free_allocator’ is used and when
       PTR is a null pointer the allocator specified by the
       DEF-ALLOCATOR-VAR ICV is used.
  
       The SIZE must be a nonnegative number denoting the number of bytes
!      to be allocated; if SIZE is zero, ‘omp_realloc’ will return free
       the memory and return a null pointer.  When SIZE is nonzero: if
       successful, a pointer to the allocated memory is returned,
!      otherwise the ‘fallback’ trait of the allocator determines the
       behavior.
  
!      In ‘target’ regions, either the ‘dynamic_allocators’ clause must
!      appear on a ‘requires’ directive in the same compilation unit - or
       the FREE_ALLOCATOR and ALLOCATOR arguments may only be a constant
       expression with the value of one of the predefined allocators and
!      may not be ‘omp_null_allocator’.
  
!      Memory allocated by ‘omp_realloc’ must be freed using ‘omp_free’.
!      Calling ‘omp_free’ invokes undefined behavior if the memory was
       already deallocated or when the used allocator has already been
       destroyed.
  
  _C_:
!      _Prototype_:   ‘void* omp_realloc(void *ptr, size_t size,’
!                     ‘ omp_allocator_handle_t allocator,’
!                     ‘ omp_allocator_handle_t free_allocator)’
  
  _C++_:
!      _Prototype_:   ‘void* omp_realloc(void *ptr, size_t size,’
!                     ‘ omp_allocator_handle_t allocator=omp_null_allocator,’
!                     ‘ omp_allocator_handle_t
!                     free_allocator=omp_null_allocator)’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function omp_realloc(ptr, size, allocator,
!                     free_allocator) bind(C)’
!                     ‘use, intrinsic :: iso_c_binding, only : c_ptr,
!                     c_size_t’
!                     ‘type(C_ptr), value :: ptr’
!                     ‘integer (c_size_t), value :: size’
!                     ‘integer (omp_allocator_handle_kind), value ::
!                     allocator, free_allocator’
  
  _See also_:
       *note OMP_ALLOCATOR::, *note Memory allocation::, *note
*************** ICVs.  It has C linkage and does not thr
*** 3127,3180 ****
  
  File: libgomp.info,  Node: omp_display_env,  Up: Environment Display Routine
  
! 3.12.1 'omp_display_env' - print the initial ICV values
  -------------------------------------------------------
  
  _Description_:
       Each time this routine is invoked, the OpenMP version number and
       initial value of internal control variables (ICVs) is printed on
!      'stderr'.  The displayed values are those at startup after
       evaluating the environment variables; later calls to API routines
       or clauses used in enclosing constructs do not affect the output.
  
!      If the VERBOSE argument is 'false', only the OpenMP version and
!      standard OpenMP ICVs are shown; if it is 'true', additionally, the
       GCC-specific ICVs are shown.
  
!      The output consists of multiple lines and starts with 'OPENMP
!      DISPLAY ENVIRONMENT BEGIN' followed by the name-value lines and
!      ends with 'OPENMP DISPLAY ENVIRONMENT END'.  The NAME is followed
       by an equal sign and the VALUE is enclosed in single quotes.
  
!      The first line has as NAME either '_OPENMP' or 'openmp_version' and
       shows as value the supported OpenMP version number (4-digit year,
       2-digit month) of the implementation, matching the value of the
!      '_OPENMP' macro and, in Fortran, the named constant
!      'openmp_version'.
  
       In each of the succeeding lines, the NAME matches the
       environment-variable name of an ICV and shows its value.  Those
       line are might be prefixed by pair of brackets and a space, where
       the brackets enclose a comma-separated list of devices to which the
       ICV-value combination applies to; the value can either be a numeric
!      device number or an abstract name denoting all devices ('all'), the
!      initial host device ('host') or all devices but the host
!      ('device').  Note that the same ICV might be printed multiple times
       for multiple devices, even if all have the same value.
  
!      The effect when invoked from within a 'target' region is
       unspecified.
  
  _C/C++_:
!      _Prototype_:   'void omp_display_env(int verbose)'
  
  _Fortran_:
!      _Interface_:   'subroutine omp_display_env(vebose)'
!                     'logical, intent(in) :: verbose'
  
  _Example_:
       Note that the GCC-specific ICVs, such as the shown
!      'GOMP_SPINCOUNT', are only printed when VARBOSE set to 'true'.
  
            OPENMP DISPLAY ENVIRONMENT BEGIN
              _OPENMP = '201511'
--- 3127,3180 ----
  
  File: libgomp.info,  Node: omp_display_env,  Up: Environment Display Routine
  
! 3.12.1 ‘omp_display_env’ - print the initial ICV values
  -------------------------------------------------------
  
  _Description_:
       Each time this routine is invoked, the OpenMP version number and
       initial value of internal control variables (ICVs) is printed on
!      ‘stderr’.  The displayed values are those at startup after
       evaluating the environment variables; later calls to API routines
       or clauses used in enclosing constructs do not affect the output.
  
!      If the VERBOSE argument is ‘false’, only the OpenMP version and
!      standard OpenMP ICVs are shown; if it is ‘true’, additionally, the
       GCC-specific ICVs are shown.
  
!      The output consists of multiple lines and starts with ‘OPENMP
!      DISPLAY ENVIRONMENT BEGIN’ followed by the name-value lines and
!      ends with ‘OPENMP DISPLAY ENVIRONMENT END’.  The NAME is followed
       by an equal sign and the VALUE is enclosed in single quotes.
  
!      The first line has as NAME either ‘_OPENMP’ or ‘openmp_version’ and
       shows as value the supported OpenMP version number (4-digit year,
       2-digit month) of the implementation, matching the value of the
!      ‘_OPENMP’ macro and, in Fortran, the named constant
!      ‘openmp_version’.
  
       In each of the succeeding lines, the NAME matches the
       environment-variable name of an ICV and shows its value.  Those
       line are might be prefixed by pair of brackets and a space, where
       the brackets enclose a comma-separated list of devices to which the
       ICV-value combination applies to; the value can either be a numeric
!      device number or an abstract name denoting all devices (‘all’), the
!      initial host device (‘host’) or all devices but the host
!      (‘device’).  Note that the same ICV might be printed multiple times
       for multiple devices, even if all have the same value.
  
!      The effect when invoked from within a ‘target’ region is
       unspecified.
  
  _C/C++_:
!      _Prototype_:   ‘void omp_display_env(int verbose)’
  
  _Fortran_:
!      _Interface_:   ‘subroutine omp_display_env(vebose)’
!                     ‘logical, intent(in) :: verbose’
  
  _Example_:
       Note that the GCC-specific ICVs, such as the shown
!      ‘GOMP_SPINCOUNT’, are only printed when VARBOSE set to ‘true’.
  
            OPENMP DISPLAY ENVIRONMENT BEGIN
              _OPENMP = '201511'
*************** File: libgomp.info,  Node: Environment V
*** 3198,3217 ****
  4 OpenMP Environment Variables
  ******************************
  
! The environment variables which beginning with 'OMP_' are defined by
  section 4 of the OpenMP specification in version 4.5 or in a later
! version of the specification, while those beginning with 'GOMP_' are GNU
! extensions.  Most 'OMP_' environment variables have an associated
  internal control variable (ICV).
  
     For any OpenMP environment variable that sets an ICV and is neither
! 'OMP_DEFAULT_DEVICE' nor has global ICV scope, associated
  device-specific environment variables exist.  For them, the environment
! variable without suffix affects the host.  The suffix '_DEV_' followed
  by a non-negative device number less that the number of available
! devices sets the ICV for the corresponding device.  The suffix '_DEV'
  sets the ICV of all non-host devices for which a device-specific
! corresponding environment variable has not been set while the '_ALL'
  suffix sets the ICV of all host and non-host devices for which a more
  specific corresponding environment variable is not set.
  
--- 3198,3217 ----
  4 OpenMP Environment Variables
  ******************************
  
! The environment variables which beginning with ‘OMP_’ are defined by
  section 4 of the OpenMP specification in version 4.5 or in a later
! version of the specification, while those beginning with ‘GOMP_’ are GNU
! extensions.  Most ‘OMP_’ environment variables have an associated
  internal control variable (ICV).
  
     For any OpenMP environment variable that sets an ICV and is neither
! ‘OMP_DEFAULT_DEVICE’ nor has global ICV scope, associated
  device-specific environment variables exist.  For them, the environment
! variable without suffix affects the host.  The suffix ‘_DEV_’ followed
  by a non-negative device number less that the number of available
! devices sets the ICV for the corresponding device.  The suffix ‘_DEV’
  sets the ICV of all non-host devices for which a device-specific
! corresponding environment variable has not been set while the ‘_ALL’
  suffix sets the ICV of all host and non-host devices for which a more
  specific corresponding environment variable is not set.
  
*************** specific corresponding environment varia
*** 3246,3271 ****
  
  File: libgomp.info,  Node: OMP_ALLOCATOR,  Next: OMP_AFFINITY_FORMAT,  Up: Environment Variables
  
! 4.1 'OMP_ALLOCATOR' - Set the default allocator
  ===============================================
  
  _ICV:_ DEF-ALLOCATOR-VAR
  _Scope:_ data environment
  _Description_:
       Sets the default allocator that is used when no allocator has been
!      specified in the 'allocate' or 'allocator' clause or if an OpenMP
!      memory routine is invoked with the 'omp_null_allocator' allocator.
!      If unset, 'omp_default_mem_alloc' is used.
  
       The value can either be a predefined allocator or a predefined
       memory space or a predefined memory space followed by a colon and a
       comma-separated list of memory trait and value pairs, separated by
!      '='.
  
       Note: The corresponding device environment variables are currently
       not supported.  Therefore, the non-host DEF-ALLOCATOR-VAR ICVs are
!      always initialized to 'omp_default_mem_alloc'.  However, on all
!      devices, the 'omp_set_default_allocator' API routine can be used to
       change value.
  
       Predefined allocators            Associated predefined memory
--- 3246,3271 ----
  
  File: libgomp.info,  Node: OMP_ALLOCATOR,  Next: OMP_AFFINITY_FORMAT,  Up: Environment Variables
  
! 4.1 ‘OMP_ALLOCATOR’ - Set the default allocator
  ===============================================
  
  _ICV:_ DEF-ALLOCATOR-VAR
  _Scope:_ data environment
  _Description_:
       Sets the default allocator that is used when no allocator has been
!      specified in the ‘allocate’ or ‘allocator’ clause or if an OpenMP
!      memory routine is invoked with the ‘omp_null_allocator’ allocator.
!      If unset, ‘omp_default_mem_alloc’ is used.
  
       The value can either be a predefined allocator or a predefined
       memory space or a predefined memory space followed by a colon and a
       comma-separated list of memory trait and value pairs, separated by
!      ‘=’.
  
       Note: The corresponding device environment variables are currently
       not supported.  Therefore, the non-host DEF-ALLOCATOR-VAR ICVs are
!      always initialized to ‘omp_default_mem_alloc’.  However, on all
!      devices, the ‘omp_set_default_allocator’ API routine can be used to
       change value.
  
       Predefined allocators            Associated predefined memory
*************** _Description_:
*** 3285,3316 ****
  
       The predefined allocators use the default values for the traits, as
       listed below.  Except that the last three allocators have the
!      'access' trait set to 'cgroup', 'pteam', and 'thread',
       respectively.
  
       Trait              Allowed values                Default value
       --------------------------------------------------------------------
!      'sync_hint'        'contended', 'uncontended',   'contended'
!                         'serialized', 'private'
!      'alignment'        Positive integer being a      1 byte
                          power of two
!      'access'           'all', 'cgroup', 'pteam',     'all'
!                         'thread'
!      'pool_size'        Positive integer              See
                                                        *note Memory allocation::
!      'fallback'         'default_mem_fb',             See below
!                         'null_fb', 'abort_fb',
!                         'allocator_fb'
!      'fb_data'          _unsupported as it needs an   (none)
                          allocator handle_
!      'pinned'           'true', 'false'               'false'
!      'partition'        'environment', 'nearest',     'environment'
!                         'blocked', 'interleaved'
  
!      For the 'fallback' trait, the default value is 'null_fb' for the
!      'omp_default_mem_alloc' allocator and any allocator that is
       associated with device memory; for all other allocators, it is
!      'default_mem_fb' by default.
  
       Examples:
            OMP_ALLOCATOR=omp_high_bw_mem_alloc
--- 3285,3316 ----
  
       The predefined allocators use the default values for the traits, as
       listed below.  Except that the last three allocators have the
!      ‘access’ trait set to ‘cgroup’, ‘pteam’, and ‘thread’,
       respectively.
  
       Trait              Allowed values                Default value
       --------------------------------------------------------------------
!      ‘sync_hint’        ‘contended’, ‘uncontended’,   ‘contended’
!                         ‘serialized’, ‘private’
!      ‘alignment’        Positive integer being a      1 byte
                          power of two
!      ‘access’           ‘all’, ‘cgroup’, ‘pteam’,     ‘all’
!                         ‘thread’
!      ‘pool_size’        Positive integer              See
                                                        *note Memory allocation::
!      ‘fallback’         ‘default_mem_fb’,             See below
!                         ‘null_fb’, ‘abort_fb’,
!                         ‘allocator_fb’
!      ‘fb_data’          _unsupported as it needs an   (none)
                          allocator handle_
!      ‘pinned’           ‘true’, ‘false’               ‘false’
!      ‘partition’        ‘environment’, ‘nearest’,     ‘environment’
!                         ‘blocked’, ‘interleaved’
  
!      For the ‘fallback’ trait, the default value is ‘null_fb’ for the
!      ‘omp_default_mem_alloc’ allocator and any allocator that is
       associated with device memory; for all other allocators, it is
!      ‘default_mem_fb’ by default.
  
       Examples:
            OMP_ALLOCATOR=omp_high_bw_mem_alloc
*************** _Reference_:
*** 3327,3359 ****
  
  File: libgomp.info,  Node: OMP_AFFINITY_FORMAT,  Next: OMP_CANCELLATION,  Prev: OMP_ALLOCATOR,  Up: Environment Variables
  
! 4.2 'OMP_AFFINITY_FORMAT' - Set the format string used for affinity display
  ===========================================================================
  
  _ICV:_ AFFINITY-FORMAT-VAR
  _Scope:_ device
  _Description_:
       Sets the format string used when displaying OpenMP thread affinity
!      information.  Special values are output using '%' followed by an
       optional size specification and then either the single-character
!      field type or its long name enclosed in curly braces; using '%%'
       displays a literal percent.  The size specification consists of an
!      optional '0.' or '.' followed by a positive integer, specifying the
!      minimal width of the output.  With '0.' and numerical values, the
!      output is padded with zeros on the left; with '.', the output is
       padded by spaces on the left; otherwise, the output is padded by
!      spaces on the right.  If unset, the value is "'level %L thread %i
!      affinity %A'".
  
       Supported field types are:
  
!      t       team_num           value returned by 'omp_get_team_num'
!      T       num_teams          value returned by 'omp_get_num_teams'
!      L       nesting_level      value returned by 'omp_get_level'
!      n       thread_num         value returned by 'omp_get_thread_num'
!      N       num_threads        value returned by 'omp_get_num_threads'
       a       ancestor_tnum      value returned by
!                                 'omp_get_ancestor_thread_num(omp_get_level()-1)'
       H       host               name of the host that executes the thread
       P       process_id         process identifier
       i       native_thread_id   native thread identifier
--- 3327,3359 ----
  
  File: libgomp.info,  Node: OMP_AFFINITY_FORMAT,  Next: OMP_CANCELLATION,  Prev: OMP_ALLOCATOR,  Up: Environment Variables
  
! 4.2 ‘OMP_AFFINITY_FORMAT’ - Set the format string used for affinity display
  ===========================================================================
  
  _ICV:_ AFFINITY-FORMAT-VAR
  _Scope:_ device
  _Description_:
       Sets the format string used when displaying OpenMP thread affinity
!      information.  Special values are output using ‘%’ followed by an
       optional size specification and then either the single-character
!      field type or its long name enclosed in curly braces; using ‘%%’
       displays a literal percent.  The size specification consists of an
!      optional ‘0.’ or ‘.’ followed by a positive integer, specifying the
!      minimal width of the output.  With ‘0.’ and numerical values, the
!      output is padded with zeros on the left; with ‘.’, the output is
       padded by spaces on the left; otherwise, the output is padded by
!      spaces on the right.  If unset, the value is "‘level %L thread %i
!      affinity %A’".
  
       Supported field types are:
  
!      t       team_num           value returned by ‘omp_get_team_num’
!      T       num_teams          value returned by ‘omp_get_num_teams’
!      L       nesting_level      value returned by ‘omp_get_level’
!      n       thread_num         value returned by ‘omp_get_thread_num’
!      N       num_threads        value returned by ‘omp_get_num_threads’
       a       ancestor_tnum      value returned by
!                                 ‘omp_get_ancestor_thread_num(omp_get_level()-1)’
       H       host               name of the host that executes the thread
       P       process_id         process identifier
       i       native_thread_id   native thread identifier
*************** _Description_:
*** 3366,3373 ****
  
            OMP_AFFINITY_FORMAT="%0.2a!%n!%.4L!%N;%.2t;%0.2T;%{team_num};%{num_teams};%A"
  
!      with either 'OMP_DISPLAY_AFFINITY' being set or when calling
!      'omp_display_affinity' with 'NULL' or an empty string, the program
       might display the following:
  
            00!0!   1!4; 0;01;0;1;0-11
--- 3366,3373 ----
  
            OMP_AFFINITY_FORMAT="%0.2a!%n!%.4L!%N;%.2t;%0.2T;%{team_num};%{num_teams};%A"
  
!      with either ‘OMP_DISPLAY_AFFINITY’ being set or when calling
!      ‘omp_display_affinity’ with ‘NULL’ or an empty string, the program
       might display the following:
  
            00!0!   1!4; 0;01;0;1;0-11
*************** _Reference_:
*** 3384,3397 ****
  
  File: libgomp.info,  Node: OMP_CANCELLATION,  Next: OMP_DISPLAY_AFFINITY,  Prev: OMP_AFFINITY_FORMAT,  Up: Environment Variables
  
! 4.3 'OMP_CANCELLATION' - Set whether cancellation is activated
  ==============================================================
  
  _ICV:_ CANCEL-VAR
  _Scope:_ global
  _Description_:
!      If set to 'TRUE', the cancellation is activated.  If set to 'FALSE'
!      or if unset, cancellation is disabled and the 'cancel' construct is
       ignored.
  
  _See also_:
--- 3384,3397 ----
  
  File: libgomp.info,  Node: OMP_CANCELLATION,  Next: OMP_DISPLAY_AFFINITY,  Prev: OMP_AFFINITY_FORMAT,  Up: Environment Variables
  
! 4.3 ‘OMP_CANCELLATION’ - Set whether cancellation is activated
  ==============================================================
  
  _ICV:_ CANCEL-VAR
  _Scope:_ global
  _Description_:
!      If set to ‘TRUE’, the cancellation is activated.  If set to ‘FALSE’
!      or if unset, cancellation is disabled and the ‘cancel’ construct is
       ignored.
  
  _See also_:
*************** _Reference_:
*** 3403,3416 ****
  
  File: libgomp.info,  Node: OMP_DISPLAY_AFFINITY,  Next: OMP_DISPLAY_ENV,  Prev: OMP_CANCELLATION,  Up: Environment Variables
  
! 4.4 'OMP_DISPLAY_AFFINITY' - Display thread affinity information
  ================================================================
  
  _ICV:_ DISPLAY-AFFINITY-VAR
  _Scope:_ global
  _Description_:
!      If set to 'FALSE' or if unset, affinity displaying is disabled.  If
!      set to 'TRUE', the runtime displays affinity information about
       OpenMP threads in a parallel region upon entering the region and
       every time any change occurs.
  
--- 3403,3416 ----
  
  File: libgomp.info,  Node: OMP_DISPLAY_AFFINITY,  Next: OMP_DISPLAY_ENV,  Prev: OMP_CANCELLATION,  Up: Environment Variables
  
! 4.4 ‘OMP_DISPLAY_AFFINITY’ - Display thread affinity information
  ================================================================
  
  _ICV:_ DISPLAY-AFFINITY-VAR
  _Scope:_ global
  _Description_:
!      If set to ‘FALSE’ or if unset, affinity displaying is disabled.  If
!      set to ‘TRUE’, the runtime displays affinity information about
       OpenMP threads in a parallel region upon entering the region and
       every time any change occurs.
  
*************** _Reference_:
*** 3423,3439 ****
  
  File: libgomp.info,  Node: OMP_DISPLAY_ENV,  Next: OMP_DEFAULT_DEVICE,  Prev: OMP_DISPLAY_AFFINITY,  Up: Environment Variables
  
! 4.5 'OMP_DISPLAY_ENV' - Show OpenMP version and environment variables
  =====================================================================
  
  _ICV:_ none
  _Scope:_ not applicable
  _Description_:
!      If set to 'TRUE', the runtime displays the same information to
!      'stderr' as shown by the 'omp_display_env' routine invoked with
!      VERBOSE argument set to 'false'.  If set to 'VERBOSE', the same
       information is shown as invoking the routine with VERBOSE set to
!      'true'.  If unset or set to 'FALSE', this information is not shown.
       The result for any other value is unspecified.
  
  _See also_:
--- 3423,3439 ----
  
  File: libgomp.info,  Node: OMP_DISPLAY_ENV,  Next: OMP_DEFAULT_DEVICE,  Prev: OMP_DISPLAY_AFFINITY,  Up: Environment Variables
  
! 4.5 ‘OMP_DISPLAY_ENV’ - Show OpenMP version and environment variables
  =====================================================================
  
  _ICV:_ none
  _Scope:_ not applicable
  _Description_:
!      If set to ‘TRUE’, the runtime displays the same information to
!      ‘stderr’ as shown by the ‘omp_display_env’ routine invoked with
!      VERBOSE argument set to ‘false’.  If set to ‘VERBOSE’, the same
       information is shown as invoking the routine with VERBOSE set to
!      ‘true’.  If unset or set to ‘FALSE’, this information is not shown.
       The result for any other value is unspecified.
  
  _See also_:
*************** _Reference_:
*** 3445,3463 ****
  
  File: libgomp.info,  Node: OMP_DEFAULT_DEVICE,  Next: OMP_DYNAMIC,  Prev: OMP_DISPLAY_ENV,  Up: Environment Variables
  
! 4.6 'OMP_DEFAULT_DEVICE' - Set the device used in target regions
  ================================================================
  
  _ICV:_ DEFAULT-DEVICE-VAR
  _Scope:_ data environment
  _Description_:
!      Set to choose the device which is used in a 'target' region, unless
!      the value is overridden by 'omp_set_default_device' or by a
!      'device' clause.  The value shall be the nonnegative device number.
       If no device with the given device number exists, the code is
!      executed on the host.  If unset, 'OMP_TARGET_OFFLOAD' is
!      'mandatory' and no non-host devices are available, it is set to
!      'omp_invalid_device'.  Otherwise, if unset, device number 0 is
       used.
  
  _See also_:
--- 3445,3463 ----
  
  File: libgomp.info,  Node: OMP_DEFAULT_DEVICE,  Next: OMP_DYNAMIC,  Prev: OMP_DISPLAY_ENV,  Up: Environment Variables
  
! 4.6 ‘OMP_DEFAULT_DEVICE’ - Set the device used in target regions
  ================================================================
  
  _ICV:_ DEFAULT-DEVICE-VAR
  _Scope:_ data environment
  _Description_:
!      Set to choose the device which is used in a ‘target’ region, unless
!      the value is overridden by ‘omp_set_default_device’ or by a
!      ‘device’ clause.  The value shall be the nonnegative device number.
       If no device with the given device number exists, the code is
!      executed on the host.  If unset, ‘OMP_TARGET_OFFLOAD’ is
!      ‘mandatory’ and no non-host devices are available, it is set to
!      ‘omp_invalid_device’.  Otherwise, if unset, device number 0 is
       used.
  
  _See also_:
*************** _Reference_:
*** 3470,3476 ****
  
  File: libgomp.info,  Node: OMP_DYNAMIC,  Next: OMP_MAX_ACTIVE_LEVELS,  Prev: OMP_DEFAULT_DEVICE,  Up: Environment Variables
  
! 4.7 'OMP_DYNAMIC' - Dynamic adjustment of threads
  =================================================
  
  _ICV:_ DYN-VAR
--- 3470,3476 ----
  
  File: libgomp.info,  Node: OMP_DYNAMIC,  Next: OMP_MAX_ACTIVE_LEVELS,  Prev: OMP_DEFAULT_DEVICE,  Up: Environment Variables
  
! 4.7 ‘OMP_DYNAMIC’ - Dynamic adjustment of threads
  =================================================
  
  _ICV:_ DYN-VAR
*************** _Scope:_ global
*** 3478,3484 ****
  _Description_:
       Enable or disable the dynamic adjustment of the number of threads
       within a team.  The value of this environment variable shall be
!      'TRUE' or 'FALSE'.  If undefined, dynamic adjustment is disabled by
       default.
  
  _See also_:
--- 3478,3484 ----
  _Description_:
       Enable or disable the dynamic adjustment of the number of threads
       within a team.  The value of this environment variable shall be
!      ‘TRUE’ or ‘FALSE’.  If undefined, dynamic adjustment is disabled by
       default.
  
  _See also_:
*************** _Reference_:
*** 3490,3496 ****
  
  File: libgomp.info,  Node: OMP_MAX_ACTIVE_LEVELS,  Next: OMP_MAX_TASK_PRIORITY,  Prev: OMP_DYNAMIC,  Up: Environment Variables
  
! 4.8 'OMP_MAX_ACTIVE_LEVELS' - Set the maximum number of nested parallel regions
  ===============================================================================
  
  _ICV:_ MAX-ACTIVE-LEVELS-VAR
--- 3490,3496 ----
  
  File: libgomp.info,  Node: OMP_MAX_ACTIVE_LEVELS,  Next: OMP_MAX_TASK_PRIORITY,  Prev: OMP_DYNAMIC,  Up: Environment Variables
  
! 4.8 ‘OMP_MAX_ACTIVE_LEVELS’ - Set the maximum number of nested parallel regions
  ===============================================================================
  
  _ICV:_ MAX-ACTIVE-LEVELS-VAR
*************** _Scope:_ data environment
*** 3498,3505 ****
  _Description_:
       Specifies the initial value for the maximum number of nested
       parallel regions.  The value of this variable shall be a positive
!      integer.  If undefined, then if 'OMP_NESTED' is defined and set to
!      true, or if 'OMP_NUM_THREADS' or 'OMP_PROC_BIND' are defined and
       set to a list with more than one item, the maximum number of nested
       parallel regions is initialized to the largest number supported,
       otherwise it is set to one.
--- 3498,3505 ----
  _Description_:
       Specifies the initial value for the maximum number of nested
       parallel regions.  The value of this variable shall be a positive
!      integer.  If undefined, then if ‘OMP_NESTED’ is defined and set to
!      true, or if ‘OMP_NUM_THREADS’ or ‘OMP_PROC_BIND’ are defined and
       set to a list with more than one item, the maximum number of nested
       parallel regions is initialized to the largest number supported,
       otherwise it is set to one.
*************** _Reference_:
*** 3514,3520 ****
  
  File: libgomp.info,  Node: OMP_MAX_TASK_PRIORITY,  Next: OMP_NESTED,  Prev: OMP_MAX_ACTIVE_LEVELS,  Up: Environment Variables
  
! 4.9 'OMP_MAX_TASK_PRIORITY' - Set the maximum priority
  ======================================================
  
  number that can be set for a task.
--- 3514,3520 ----
  
  File: libgomp.info,  Node: OMP_MAX_TASK_PRIORITY,  Next: OMP_NESTED,  Prev: OMP_MAX_ACTIVE_LEVELS,  Up: Environment Variables
  
! 4.9 ‘OMP_MAX_TASK_PRIORITY’ - Set the maximum priority
  ======================================================
  
  number that can be set for a task.
*************** _Reference_:
*** 3535,3541 ****
  
  File: libgomp.info,  Node: OMP_NESTED,  Next: OMP_NUM_TEAMS,  Prev: OMP_MAX_TASK_PRIORITY,  Up: Environment Variables
  
! 4.10 'OMP_NESTED' - Nested parallel regions
  ===========================================
  
  _ICV:_ MAX-ACTIVE-LEVELS-VAR
--- 3535,3541 ----
  
  File: libgomp.info,  Node: OMP_NESTED,  Next: OMP_NUM_TEAMS,  Prev: OMP_MAX_TASK_PRIORITY,  Up: Environment Variables
  
! 4.10 ‘OMP_NESTED’ - Nested parallel regions
  ===========================================
  
  _ICV:_ MAX-ACTIVE-LEVELS-VAR
*************** _Scope:_ data environment
*** 3543,3559 ****
  _Description_:
       Enable or disable nested parallel regions, i.e., whether team
       members are allowed to create new teams.  The value of this
!      environment variable shall be 'TRUE' or 'FALSE'.  If set to 'TRUE',
       the number of maximum active nested regions supported is by default
       set to the maximum supported, otherwise it is set to one.  If
!      'OMP_MAX_ACTIVE_LEVELS' is defined, its setting overrides this
       setting.  If both are undefined, nested parallel regions are
!      enabled if 'OMP_NUM_THREADS' or 'OMP_PROC_BINDS' are defined to a
       list with more than one item, otherwise they are disabled by
       default.
  
!      Note that the 'OMP_NESTED' environment variable was deprecated in
!      the OpenMP specification 5.2 in favor of 'OMP_MAX_ACTIVE_LEVELS'.
  
  _See also_:
       *note omp_set_max_active_levels::, *note omp_set_nested::, *note
--- 3543,3559 ----
  _Description_:
       Enable or disable nested parallel regions, i.e., whether team
       members are allowed to create new teams.  The value of this
!      environment variable shall be ‘TRUE’ or ‘FALSE’.  If set to ‘TRUE’,
       the number of maximum active nested regions supported is by default
       set to the maximum supported, otherwise it is set to one.  If
!      ‘OMP_MAX_ACTIVE_LEVELS’ is defined, its setting overrides this
       setting.  If both are undefined, nested parallel regions are
!      enabled if ‘OMP_NUM_THREADS’ or ‘OMP_PROC_BINDS’ are defined to a
       list with more than one item, otherwise they are disabled by
       default.
  
!      Note that the ‘OMP_NESTED’ environment variable was deprecated in
!      the OpenMP specification 5.2 in favor of ‘OMP_MAX_ACTIVE_LEVELS’.
  
  _See also_:
       *note omp_set_max_active_levels::, *note omp_set_nested::, *note
*************** _Reference_:
*** 3565,3578 ****
  
  File: libgomp.info,  Node: OMP_NUM_TEAMS,  Next: OMP_NUM_THREADS,  Prev: OMP_NESTED,  Up: Environment Variables
  
! 4.11 'OMP_NUM_TEAMS' - Specifies the number of teams to use by teams region
  ===========================================================================
  
  _ICV:_ NTEAMS-VAR
  _Scope:_ device
  _Description_:
       Specifies the upper bound for number of teams to use in teams
!      regions without explicit 'num_teams' clause.  The value of this
       variable shall be a positive integer.  If undefined it defaults to
       0 which means implementation defined upper bound.
  
--- 3565,3578 ----
  
  File: libgomp.info,  Node: OMP_NUM_TEAMS,  Next: OMP_NUM_THREADS,  Prev: OMP_NESTED,  Up: Environment Variables
  
! 4.11 ‘OMP_NUM_TEAMS’ - Specifies the number of teams to use by teams region
  ===========================================================================
  
  _ICV:_ NTEAMS-VAR
  _Scope:_ device
  _Description_:
       Specifies the upper bound for number of teams to use in teams
!      regions without explicit ‘num_teams’ clause.  The value of this
       variable shall be a positive integer.  If undefined it defaults to
       0 which means implementation defined upper bound.
  
*************** _Reference_:
*** 3585,3591 ****
  
  File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_PROC_BIND,  Prev: OMP_NUM_TEAMS,  Up: Environment Variables
  
! 4.12 'OMP_NUM_THREADS' - Specifies the number of threads to use
  ===============================================================
  
  _ICV:_ NTHREADS-VAR
--- 3585,3591 ----
  
  File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_PROC_BIND,  Prev: OMP_NUM_TEAMS,  Up: Environment Variables
  
! 4.12 ‘OMP_NUM_THREADS’ - Specifies the number of threads to use
  ===============================================================
  
  _ICV:_ NTHREADS-VAR
*************** _Reference_:
*** 3611,3639 ****
  
  File: libgomp.info,  Node: OMP_PROC_BIND,  Next: OMP_PLACES,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
  
! 4.13 'OMP_PROC_BIND' - Whether threads may be moved between CPUs
  ================================================================
  
  _ICV:_ BIND-VAR
  _Scope:_ data environment
  _Description_:
       Specifies whether threads may be moved between processors.  If set
!      to 'TRUE', OpenMP threads should not be moved; if set to 'FALSE'
       they may be moved.  Alternatively, a comma separated list with the
!      values 'PRIMARY', 'MASTER', 'CLOSE' and 'SPREAD' can be used to
       specify the thread affinity policy for the corresponding nesting
!      level.  With 'PRIMARY' and 'MASTER' the worker threads are in the
!      same place partition as the primary thread.  With 'CLOSE' those are
       kept close to the primary thread in contiguous place partitions.
!      And with 'SPREAD' a sparse distribution across the place partitions
       is used.  Specifying more than one item in the list automatically
       enables nesting by default.
  
       When a list is specified, it also affects the MAX-ACTIVE-LEVELS-VAR
       ICV as described in *note OMP_MAX_ACTIVE_LEVELS::.
  
!      When undefined, 'OMP_PROC_BIND' defaults to 'TRUE' when
!      'OMP_PLACES' or 'GOMP_CPU_AFFINITY' is set and 'FALSE' otherwise.
  
  _See also_:
       *note omp_get_proc_bind::, *note GOMP_CPU_AFFINITY::, *note
--- 3611,3639 ----
  
  File: libgomp.info,  Node: OMP_PROC_BIND,  Next: OMP_PLACES,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
  
! 4.13 ‘OMP_PROC_BIND’ - Whether threads may be moved between CPUs
  ================================================================
  
  _ICV:_ BIND-VAR
  _Scope:_ data environment
  _Description_:
       Specifies whether threads may be moved between processors.  If set
!      to ‘TRUE’, OpenMP threads should not be moved; if set to ‘FALSE’
       they may be moved.  Alternatively, a comma separated list with the
!      values ‘PRIMARY’, ‘MASTER’, ‘CLOSE’ and ‘SPREAD’ can be used to
       specify the thread affinity policy for the corresponding nesting
!      level.  With ‘PRIMARY’ and ‘MASTER’ the worker threads are in the
!      same place partition as the primary thread.  With ‘CLOSE’ those are
       kept close to the primary thread in contiguous place partitions.
!      And with ‘SPREAD’ a sparse distribution across the place partitions
       is used.  Specifying more than one item in the list automatically
       enables nesting by default.
  
       When a list is specified, it also affects the MAX-ACTIVE-LEVELS-VAR
       ICV as described in *note OMP_MAX_ACTIVE_LEVELS::.
  
!      When undefined, ‘OMP_PROC_BIND’ defaults to ‘TRUE’ when
!      ‘OMP_PLACES’ or ‘GOMP_CPU_AFFINITY’ is set and ‘FALSE’ otherwise.
  
  _See also_:
       *note omp_get_proc_bind::, *note GOMP_CPU_AFFINITY::, *note
*************** _Reference_:
*** 3645,3651 ****
  
  File: libgomp.info,  Node: OMP_PLACES,  Next: OMP_STACKSIZE,  Prev: OMP_PROC_BIND,  Up: Environment Variables
  
! 4.14 'OMP_PLACES' - Specifies on which CPUs the threads should be placed
  ========================================================================
  
  _ICV:_ PLACE-PARTITION-VAR
--- 3645,3651 ----
  
  File: libgomp.info,  Node: OMP_PLACES,  Next: OMP_STACKSIZE,  Prev: OMP_PROC_BIND,  Up: Environment Variables
  
! 4.14 ‘OMP_PLACES’ - Specifies on which CPUs the threads should be placed
  ========================================================================
  
  _ICV:_ PLACE-PARTITION-VAR
*************** _Scope:_ implicit tasks
*** 3653,3669 ****
  _Description_:
       The thread placement can be either specified using an abstract name
       or by an explicit list of the places.  The abstract names
!      'threads', 'cores', 'sockets', 'll_caches' and 'numa_domains' can
       be optionally followed by a positive number in parentheses, which
!      denotes the how many places shall be created.  With 'threads' each
!      place corresponds to a single hardware thread; 'cores' to a single
       core with the corresponding number of hardware threads; with
!      'sockets' the place corresponds to a single socket; with
!      'll_caches' to a set of cores that shares the last level cache on
!      the device; and 'numa_domains' to a set of cores for which their
       closest memory on the device is the same memory and at a similar
       distance from the cores.  The resulting placement can be shown by
!      setting the 'OMP_DISPLAY_ENV' environment variable.
  
       Alternatively, the placement can be specified explicitly as
       comma-separated list of places.  A place is specified by set of
--- 3653,3669 ----
  _Description_:
       The thread placement can be either specified using an abstract name
       or by an explicit list of the places.  The abstract names
!      ‘threads’, ‘cores’, ‘sockets’, ‘ll_caches’ and ‘numa_domains’ can
       be optionally followed by a positive number in parentheses, which
!      denotes the how many places shall be created.  With ‘threads’ each
!      place corresponds to a single hardware thread; ‘cores’ to a single
       core with the corresponding number of hardware threads; with
!      ‘sockets’ the place corresponds to a single socket; with
!      ‘ll_caches’ to a set of cores that shares the last level cache on
!      the device; and ‘numa_domains’ to a set of cores for which their
       closest memory on the device is the same memory and at a similar
       distance from the cores.  The resulting placement can be shown by
!      setting the ‘OMP_DISPLAY_ENV’ environment variable.
  
       Alternatively, the placement can be specified explicitly as
       comma-separated list of places.  A place is specified by set of
*************** _Description_:
*** 3676,3691 ****
       interval, a colon followed by the count is placed after the
       hardware thread number or the place.  Optionally, the length can be
       followed by a colon and the stride number - otherwise a unit stride
!      is assumed.  Placing an exclamation mark ('!') directly before a
       curly brace or numbers inside the curly braces (excluding
       intervals) excludes those hardware threads.
  
       For instance, the following specifies the same places list:
!      '"{0,1,2}, {3,4,6}, {7,8,9}, {10,11,12}"'; '"{0:3}, {3:3}, {7:3},
!      {10:3}"'; and '"{0:2}:4:3"'.
  
!      If 'OMP_PLACES' and 'GOMP_CPU_AFFINITY' are unset and
!      'OMP_PROC_BIND' is either unset or 'false', threads may be moved
       between CPUs following no placement policy.
  
  _See also_:
--- 3676,3691 ----
       interval, a colon followed by the count is placed after the
       hardware thread number or the place.  Optionally, the length can be
       followed by a colon and the stride number - otherwise a unit stride
!      is assumed.  Placing an exclamation mark (‘!’) directly before a
       curly brace or numbers inside the curly braces (excluding
       intervals) excludes those hardware threads.
  
       For instance, the following specifies the same places list:
!      ‘"{0,1,2}, {3,4,6}, {7,8,9}, {10,11,12}"’; ‘"{0:3}, {3:3}, {7:3},
!      {10:3}"’; and ‘"{0:2}:4:3"’.
  
!      If ‘OMP_PLACES’ and ‘GOMP_CPU_AFFINITY’ are unset and
!      ‘OMP_PROC_BIND’ is either unset or ‘false’, threads may be moved
       between CPUs following no placement policy.
  
  _See also_:
*************** _Reference_:
*** 3698,3713 ****
  
  File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_SCHEDULE,  Prev: OMP_PLACES,  Up: Environment Variables
  
! 4.15 'OMP_STACKSIZE' - Set default thread stack size
  ====================================================
  
  _ICV:_ STACKSIZE-VAR
  _Scope:_ device
  _Description_:
       Set the default thread stack size in kilobytes, unless the number
!      is suffixed by 'B', 'K', 'M' or 'G', in which case the size is,
       respectively, in bytes, kilobytes, megabytes or gigabytes.  This is
!      different from 'pthread_attr_setstacksize' which gets the number of
       bytes as an argument.  If the stack size cannot be set due to
       system constraints, an error is reported and the initial stack size
       is left unchanged.  If undefined, the stack size is system
--- 3698,3713 ----
  
  File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_SCHEDULE,  Prev: OMP_PLACES,  Up: Environment Variables
  
! 4.15 ‘OMP_STACKSIZE’ - Set default thread stack size
  ====================================================
  
  _ICV:_ STACKSIZE-VAR
  _Scope:_ device
  _Description_:
       Set the default thread stack size in kilobytes, unless the number
!      is suffixed by ‘B’, ‘K’, ‘M’ or ‘G’, in which case the size is,
       respectively, in bytes, kilobytes, megabytes or gigabytes.  This is
!      different from ‘pthread_attr_setstacksize’ which gets the number of
       bytes as an argument.  If the stack size cannot be set due to
       system constraints, an error is reported and the initial stack size
       is left unchanged.  If undefined, the stack size is system
*************** _Reference_:
*** 3722,3736 ****
  
  File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_TARGET_OFFLOAD,  Prev: OMP_STACKSIZE,  Up: Environment Variables
  
! 4.16 'OMP_SCHEDULE' - How threads are scheduled
  ===============================================
  
  _ICV:_ RUN-SCHED-VAR
  _Scope:_ data environment
  _Description_:
!      Allows to specify 'schedule type' and 'chunk size'.  The value of
!      the variable shall have the form: 'type[,chunk]' where 'type' is
!      one of 'static', 'dynamic', 'guided' or 'auto' The optional 'chunk'
       size shall be a positive integer.  If undefined, dynamic scheduling
       and a chunk size of 1 is used.
  
--- 3722,3736 ----
  
  File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_TARGET_OFFLOAD,  Prev: OMP_STACKSIZE,  Up: Environment Variables
  
! 4.16 ‘OMP_SCHEDULE’ - How threads are scheduled
  ===============================================
  
  _ICV:_ RUN-SCHED-VAR
  _Scope:_ data environment
  _Description_:
!      Allows to specify ‘schedule type’ and ‘chunk size’.  The value of
!      the variable shall have the form: ‘type[,chunk]’ where ‘type’ is
!      one of ‘static’, ‘dynamic’, ‘guided’ or ‘auto’ The optional ‘chunk’
       size shall be a positive integer.  If undefined, dynamic scheduling
       and a chunk size of 1 is used.
  
*************** _Reference_:
*** 3744,3774 ****
  
  File: libgomp.info,  Node: OMP_TARGET_OFFLOAD,  Next: OMP_TEAMS_THREAD_LIMIT,  Prev: OMP_SCHEDULE,  Up: Environment Variables
  
! 4.17 'OMP_TARGET_OFFLOAD' - Controls offloading behavior
  ========================================================
  
  _ICV:_ TARGET-OFFLOAD-VAR
  _Scope:_ global
  _Description_:
       Specifies the behavior with regard to offloading code to a device.
!      This variable can be set to one of three values - 'MANDATORY',
!      'DISABLED' or 'DEFAULT'.
  
!      If set to 'MANDATORY', the program terminates with an error if any
       device construct or device memory routine uses a device that is
       unavailable or not supported by the implementation, or uses a
!      non-conforming device number.  If set to 'DISABLED', then
       offloading is disabled and all code runs on the host.  If set to
!      'DEFAULT', the program tries offloading to the device first, then
       falls back to running code on the host if it cannot.
  
!      If undefined, then the program behaves as if 'DEFAULT' was set.
  
!      Note: Even with 'MANDATORY', no run-time termination is performed
!      when the device number in a 'device' clause or argument to a device
       memory routine is for host, which includes using the device number
       in the DEFAULT-DEVICE-VAR ICV. However, the initial value of the
!      DEFAULT-DEVICE-VAR ICV is affected by 'MANDATORY'.
  
  _See also_:
       *note OMP_DEFAULT_DEVICE::
--- 3744,3774 ----
  
  File: libgomp.info,  Node: OMP_TARGET_OFFLOAD,  Next: OMP_TEAMS_THREAD_LIMIT,  Prev: OMP_SCHEDULE,  Up: Environment Variables
  
! 4.17 ‘OMP_TARGET_OFFLOAD’ - Controls offloading behavior
  ========================================================
  
  _ICV:_ TARGET-OFFLOAD-VAR
  _Scope:_ global
  _Description_:
       Specifies the behavior with regard to offloading code to a device.
!      This variable can be set to one of three values - ‘MANDATORY’,
!      ‘DISABLED’ or ‘DEFAULT’.
  
!      If set to ‘MANDATORY’, the program terminates with an error if any
       device construct or device memory routine uses a device that is
       unavailable or not supported by the implementation, or uses a
!      non-conforming device number.  If set to ‘DISABLED’, then
       offloading is disabled and all code runs on the host.  If set to
!      ‘DEFAULT’, the program tries offloading to the device first, then
       falls back to running code on the host if it cannot.
  
!      If undefined, then the program behaves as if ‘DEFAULT’ was set.
  
!      Note: Even with ‘MANDATORY’, no run-time termination is performed
!      when the device number in a ‘device’ clause or argument to a device
       memory routine is for host, which includes using the device number
       in the DEFAULT-DEVICE-VAR ICV. However, the initial value of the
!      DEFAULT-DEVICE-VAR ICV is affected by ‘MANDATORY’.
  
  _See also_:
       *note OMP_DEFAULT_DEVICE::
*************** _Reference_:
*** 3779,3785 ****
  
  File: libgomp.info,  Node: OMP_TEAMS_THREAD_LIMIT,  Next: OMP_THREAD_LIMIT,  Prev: OMP_TARGET_OFFLOAD,  Up: Environment Variables
  
! 4.18 'OMP_TEAMS_THREAD_LIMIT' - Set the maximum number of threads imposed by teams
  ==================================================================================
  
  _ICV:_ TEAMS-THREAD-LIMIT-VAR
--- 3779,3785 ----
  
  File: libgomp.info,  Node: OMP_TEAMS_THREAD_LIMIT,  Next: OMP_THREAD_LIMIT,  Prev: OMP_TARGET_OFFLOAD,  Up: Environment Variables
  
! 4.18 ‘OMP_TEAMS_THREAD_LIMIT’ - Set the maximum number of threads imposed by teams
  ==================================================================================
  
  _ICV:_ TEAMS-THREAD-LIMIT-VAR
*************** _Scope:_ device
*** 3787,3793 ****
  _Description_:
       Specifies an upper bound for the number of threads to use by each
       contention group created by a teams construct without explicit
!      'thread_limit' clause.  The value of this variable shall be a
       positive integer.  If undefined, the value of 0 is used which
       stands for an implementation defined upper limit.
  
--- 3787,3793 ----
  _Description_:
       Specifies an upper bound for the number of threads to use by each
       contention group created by a teams construct without explicit
!      ‘thread_limit’ clause.  The value of this variable shall be a
       positive integer.  If undefined, the value of 0 is used which
       stands for an implementation defined upper limit.
  
*************** _Reference_:
*** 3800,3806 ****
  
  File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_TEAMS_THREAD_LIMIT,  Up: Environment Variables
  
! 4.19 'OMP_THREAD_LIMIT' - Set the maximum number of threads
  ===========================================================
  
  _ICV:_ THREAD-LIMIT-VAR
--- 3800,3806 ----
  
  File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_TEAMS_THREAD_LIMIT,  Up: Environment Variables
  
! 4.19 ‘OMP_THREAD_LIMIT’ - Set the maximum number of threads
  ===========================================================
  
  _ICV:_ THREAD-LIMIT-VAR
*************** _Reference_:
*** 3819,3831 ****
  
  File: libgomp.info,  Node: OMP_WAIT_POLICY,  Next: GOMP_CPU_AFFINITY,  Prev: OMP_THREAD_LIMIT,  Up: Environment Variables
  
! 4.20 'OMP_WAIT_POLICY' - How waiting threads are handled
  ========================================================
  
  _Description_:
       Specifies whether waiting threads should be active or passive.  If
!      the value is 'PASSIVE', waiting threads should not consume CPU
!      power while waiting; while the value is 'ACTIVE' specifies that
       they should.  If undefined, threads wait actively for a short time
       before waiting passively.
  
--- 3819,3831 ----
  
  File: libgomp.info,  Node: OMP_WAIT_POLICY,  Next: GOMP_CPU_AFFINITY,  Prev: OMP_THREAD_LIMIT,  Up: Environment Variables
  
! 4.20 ‘OMP_WAIT_POLICY’ - How waiting threads are handled
  ========================================================
  
  _Description_:
       Specifies whether waiting threads should be active or passive.  If
!      the value is ‘PASSIVE’, waiting threads should not consume CPU
!      power while waiting; while the value is ‘ACTIVE’ specifies that
       they should.  If undefined, threads wait actively for a short time
       before waiting passively.
  
*************** _Reference_:
*** 3838,3844 ****
  
  File: libgomp.info,  Node: GOMP_CPU_AFFINITY,  Next: GOMP_DEBUG,  Prev: OMP_WAIT_POLICY,  Up: Environment Variables
  
! 4.21 'GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
  ========================================================
  
  _Description_:
--- 3838,3844 ----
  
  File: libgomp.info,  Node: GOMP_CPU_AFFINITY,  Next: GOMP_DEBUG,  Prev: OMP_WAIT_POLICY,  Up: Environment Variables
  
! 4.21 ‘GOMP_CPU_AFFINITY’ - Bind threads to specific CPUs
  ========================================================
  
  _Description_:
*************** _Description_:
*** 3846,3871 ****
       space-separated or comma-separated list of CPUs.  This list may
       contain different kinds of entries: either single CPU numbers in
       any order, a range of CPUs (M-N) or a range with some stride
!      (M-N:S). CPU numbers are zero based.  For example,
!      'GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' binds the initial thread to
       CPU 0, the second to CPU 3, the third to CPU 1, the fourth to CPU
       2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8, 10,
       12, and 14 respectively and then starts assigning back from the
!      beginning of the list.  'GOMP_CPU_AFFINITY=0' binds all threads to
       CPU 0.
  
       There is no libgomp library routine to determine whether a CPU
       affinity specification is in effect.  As a workaround,
!      language-specific library functions, e.g., 'getenv' in C or
!      'GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
!      setting of the 'GOMP_CPU_AFFINITY' environment variable.  A defined
       CPU affinity on startup cannot be changed or disabled during the
       runtime of the application.
  
!      If both 'GOMP_CPU_AFFINITY' and 'OMP_PROC_BIND' are set,
!      'OMP_PROC_BIND' has a higher precedence.  If neither has been set
!      and 'OMP_PROC_BIND' is unset, or when 'OMP_PROC_BIND' is set to
!      'FALSE', the host system handles the assignment of threads to CPUs.
  
  _See also_:
       *note OMP_PLACES::, *note OMP_PROC_BIND::
--- 3846,3871 ----
       space-separated or comma-separated list of CPUs.  This list may
       contain different kinds of entries: either single CPU numbers in
       any order, a range of CPUs (M-N) or a range with some stride
!      (M-N:S).  CPU numbers are zero based.  For example,
!      ‘GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"’ binds the initial thread to
       CPU 0, the second to CPU 3, the third to CPU 1, the fourth to CPU
       2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8, 10,
       12, and 14 respectively and then starts assigning back from the
!      beginning of the list.  ‘GOMP_CPU_AFFINITY=0’ binds all threads to
       CPU 0.
  
       There is no libgomp library routine to determine whether a CPU
       affinity specification is in effect.  As a workaround,
!      language-specific library functions, e.g., ‘getenv’ in C or
!      ‘GET_ENVIRONMENT_VARIABLE’ in Fortran, may be used to query the
!      setting of the ‘GOMP_CPU_AFFINITY’ environment variable.  A defined
       CPU affinity on startup cannot be changed or disabled during the
       runtime of the application.
  
!      If both ‘GOMP_CPU_AFFINITY’ and ‘OMP_PROC_BIND’ are set,
!      ‘OMP_PROC_BIND’ has a higher precedence.  If neither has been set
!      and ‘OMP_PROC_BIND’ is unset, or when ‘OMP_PROC_BIND’ is set to
!      ‘FALSE’, the host system handles the assignment of threads to CPUs.
  
  _See also_:
       *note OMP_PLACES::, *note OMP_PROC_BIND::
*************** _See also_:
*** 3873,3884 ****
  
  File: libgomp.info,  Node: GOMP_DEBUG,  Next: GOMP_STACKSIZE,  Prev: GOMP_CPU_AFFINITY,  Up: Environment Variables
  
! 4.22 'GOMP_DEBUG' - Enable debugging output
  ===========================================
  
  _Description_:
!      Enable debugging output.  The variable should be set to '0'
!      (disabled, also the default if not set), or '1' (enabled).
  
       If enabled, some debugging output is printed during execution.
       This is currently not specified in more detail, and subject to
--- 3873,3884 ----
  
  File: libgomp.info,  Node: GOMP_DEBUG,  Next: GOMP_STACKSIZE,  Prev: GOMP_CPU_AFFINITY,  Up: Environment Variables
  
! 4.22 ‘GOMP_DEBUG’ - Enable debugging output
  ===========================================
  
  _Description_:
!      Enable debugging output.  The variable should be set to ‘0’
!      (disabled, also the default if not set), or ‘1’ (enabled).
  
       If enabled, some debugging output is printed during execution.
       This is currently not specified in more detail, and subject to
*************** _Description_:
*** 3887,3898 ****
  
  File: libgomp.info,  Node: GOMP_STACKSIZE,  Next: GOMP_SPINCOUNT,  Prev: GOMP_DEBUG,  Up: Environment Variables
  
! 4.23 'GOMP_STACKSIZE' - Set default thread stack size
  =====================================================
  
  _Description_:
       Set the default thread stack size in kilobytes.  This is different
!      from 'pthread_attr_setstacksize' which gets the number of bytes as
       an argument.  If the stack size cannot be set due to system
       constraints, an error is reported and the initial stack size is
       left unchanged.  If undefined, the stack size is system dependent.
--- 3887,3898 ----
  
  File: libgomp.info,  Node: GOMP_STACKSIZE,  Next: GOMP_SPINCOUNT,  Prev: GOMP_DEBUG,  Up: Environment Variables
  
! 4.23 ‘GOMP_STACKSIZE’ - Set default thread stack size
  =====================================================
  
  _Description_:
       Set the default thread stack size in kilobytes.  This is different
!      from ‘pthread_attr_setstacksize’ which gets the number of bytes as
       an argument.  If the stack size cannot be set due to system
       constraints, an error is reported and the initial stack size is
       left unchanged.  If undefined, the stack size is system dependent.
*************** _Reference_:
*** 3909,3931 ****
  
  File: libgomp.info,  Node: GOMP_SPINCOUNT,  Next: GOMP_RTEMS_THREAD_POOLS,  Prev: GOMP_STACKSIZE,  Up: Environment Variables
  
! 4.24 'GOMP_SPINCOUNT' - Set the busy-wait spin count
  ====================================================
  
  _Description_:
       Determines how long a threads waits actively with consuming CPU
       power before waiting passively without consuming CPU power.  The
!      value may be either 'INFINITE', 'INFINITY' to always wait actively
       or an integer which gives the number of spins of the busy-wait
       loop.  The integer may optionally be followed by the following
!      suffixes acting as multiplication factors: 'k' (kilo, thousand),
!      'M' (mega, million), 'G' (giga, billion), or 'T' (tera, trillion).
!      If undefined, 0 is used when 'OMP_WAIT_POLICY' is 'PASSIVE',
!      300,000 is used when 'OMP_WAIT_POLICY' is undefined and 30 billion
!      is used when 'OMP_WAIT_POLICY' is 'ACTIVE'.  If there are more
       OpenMP threads than available CPUs, 1000 and 100 spins are used for
!      'OMP_WAIT_POLICY' being 'ACTIVE' or undefined, respectively; unless
!      the 'GOMP_SPINCOUNT' is lower or 'OMP_WAIT_POLICY' is 'PASSIVE'.
  
  _See also_:
       *note OMP_WAIT_POLICY::
--- 3909,3931 ----
  
  File: libgomp.info,  Node: GOMP_SPINCOUNT,  Next: GOMP_RTEMS_THREAD_POOLS,  Prev: GOMP_STACKSIZE,  Up: Environment Variables
  
! 4.24 ‘GOMP_SPINCOUNT’ - Set the busy-wait spin count
  ====================================================
  
  _Description_:
       Determines how long a threads waits actively with consuming CPU
       power before waiting passively without consuming CPU power.  The
!      value may be either ‘INFINITE’, ‘INFINITY’ to always wait actively
       or an integer which gives the number of spins of the busy-wait
       loop.  The integer may optionally be followed by the following
!      suffixes acting as multiplication factors: ‘k’ (kilo, thousand),
!      ‘M’ (mega, million), ‘G’ (giga, billion), or ‘T’ (tera, trillion).
!      If undefined, 0 is used when ‘OMP_WAIT_POLICY’ is ‘PASSIVE’,
!      300,000 is used when ‘OMP_WAIT_POLICY’ is undefined and 30 billion
!      is used when ‘OMP_WAIT_POLICY’ is ‘ACTIVE’.  If there are more
       OpenMP threads than available CPUs, 1000 and 100 spins are used for
!      ‘OMP_WAIT_POLICY’ being ‘ACTIVE’ or undefined, respectively; unless
!      the ‘GOMP_SPINCOUNT’ is lower or ‘OMP_WAIT_POLICY’ is ‘PASSIVE’.
  
  _See also_:
       *note OMP_WAIT_POLICY::
*************** _See also_:
*** 3933,3971 ****
  
  File: libgomp.info,  Node: GOMP_RTEMS_THREAD_POOLS,  Prev: GOMP_SPINCOUNT,  Up: Environment Variables
  
! 4.25 'GOMP_RTEMS_THREAD_POOLS' - Set the RTEMS specific thread pools
  ====================================================================
  
  _Description_:
       This environment variable is only used on the RTEMS real-time
       operating system.  It determines the scheduler instance specific
!      thread pools.  The format for 'GOMP_RTEMS_THREAD_POOLS' is a list
!      of optional '<thread-pool-count>[$<priority>]@<scheduler-name>'
!      configurations separated by ':' where:
!         * '<thread-pool-count>' is the thread pool count for this
            scheduler instance.
!         * '$<priority>' is an optional priority for the worker threads
!           of a thread pool according to 'pthread_setschedparam'.  In
            case a priority value is omitted, then a worker thread
            inherits the priority of the OpenMP primary thread that
            created it.  The priority of the worker thread is not changed
            after creation, even if a new OpenMP primary thread using the
            worker has a different priority.
!         * '@<scheduler-name>' is the scheduler instance name according
            to the RTEMS application configuration.
       In case no thread pool configuration is specified for a scheduler
       instance, then each OpenMP primary thread of this scheduler
       instance uses its own dynamically allocated thread pool.  To limit
       the worker thread count of the thread pools, each OpenMP primary
!      thread must call 'omp_set_num_threads'.
  _Example_:
!      Lets suppose we have three scheduler instances 'IO', 'WRK0', and
!      'WRK1' with 'GOMP_RTEMS_THREAD_POOLS' set to '"1@WRK0:3$4@WRK1"'.
       Then there are no thread pool restrictions for scheduler instance
!      'IO'.  In the scheduler instance 'WRK0' there is one thread pool
       available.  Since no priority is specified for this scheduler
       instance, the worker thread inherits the priority of the OpenMP
!      primary thread that created it.  In the scheduler instance 'WRK1'
       there are three thread pools available and their worker threads run
       at priority four.
  
--- 3933,3971 ----
  
  File: libgomp.info,  Node: GOMP_RTEMS_THREAD_POOLS,  Prev: GOMP_SPINCOUNT,  Up: Environment Variables
  
! 4.25 ‘GOMP_RTEMS_THREAD_POOLS’ - Set the RTEMS specific thread pools
  ====================================================================
  
  _Description_:
       This environment variable is only used on the RTEMS real-time
       operating system.  It determines the scheduler instance specific
!      thread pools.  The format for ‘GOMP_RTEMS_THREAD_POOLS’ is a list
!      of optional ‘<thread-pool-count>[$<priority>]@<scheduler-name>’
!      configurations separated by ‘:’ where:
!         • ‘<thread-pool-count>’ is the thread pool count for this
            scheduler instance.
!         • ‘$<priority>’ is an optional priority for the worker threads
!           of a thread pool according to ‘pthread_setschedparam’.  In
            case a priority value is omitted, then a worker thread
            inherits the priority of the OpenMP primary thread that
            created it.  The priority of the worker thread is not changed
            after creation, even if a new OpenMP primary thread using the
            worker has a different priority.
!         • ‘@<scheduler-name>’ is the scheduler instance name according
            to the RTEMS application configuration.
       In case no thread pool configuration is specified for a scheduler
       instance, then each OpenMP primary thread of this scheduler
       instance uses its own dynamically allocated thread pool.  To limit
       the worker thread count of the thread pools, each OpenMP primary
!      thread must call ‘omp_set_num_threads’.
  _Example_:
!      Lets suppose we have three scheduler instances ‘IO’, ‘WRK0’, and
!      ‘WRK1’ with ‘GOMP_RTEMS_THREAD_POOLS’ set to ‘"1@WRK0:3$4@WRK1"’.
       Then there are no thread pool restrictions for scheduler instance
!      ‘IO’.  In the scheduler instance ‘WRK0’ there is one thread pool
       available.  Since no priority is specified for this scheduler
       instance, the worker thread inherits the priority of the OpenMP
!      primary thread that created it.  In the scheduler instance ‘WRK1’
       there are three thread pools available and their worker threads run
       at priority four.
  
*************** File: libgomp.info,  Node: Enabling Open
*** 3976,3984 ****
  ******************
  
  To activate the OpenACC extensions for C/C++ and Fortran, the
! compile-time flag '-fopenacc' must be specified.  This enables the
! OpenACC directive '#pragma acc' in C/C++ and, in Fortran, the '!$acc'
! sentinel in free source form and the 'c$acc', '*$acc' and '!$acc'
  sentinels in fixed source form.  The flag also arranges for automatic
  linking of the OpenACC runtime library (*note OpenACC Runtime Library
  Routines::).
--- 3976,3984 ----
  ******************
  
  To activate the OpenACC extensions for C/C++ and Fortran, the
! compile-time flag ‘-fopenacc’ must be specified.  This enables the
! OpenACC directive ‘#pragma acc’ in C/C++ and, in Fortran, the ‘!$acc’
! sentinel in free source form and the ‘c$acc’, ‘*$acc’ and ‘!$acc’
  sentinels in fixed source form.  The flag also arranges for automatic
  linking of the OpenACC runtime library (*note OpenACC Runtime Library
  Routines::).
*************** File: libgomp.info,  Node: OpenACC Runti
*** 3998,4004 ****
  The runtime routines described here are defined by section 3 of the
  OpenACC specifications in version 2.6.  They have C linkage, and do not
  throw exceptions.  Generally, they are available only for the host, with
! the exception of 'acc_on_device', which is available for both the host
  and the acceleration device.
  
  * Menu:
--- 3998,4004 ----
  The runtime routines described here are defined by section 3 of the
  OpenACC specifications in version 2.6.  They have C linkage, and do not
  throw exceptions.  Generally, they are available only for the host, with
! the exception of ‘acc_on_device’, which is available for both the host
  and the acceleration device.
  
  * Menu:
*************** API routines for the OpenACC Profiling I
*** 4072,4078 ****
  
  File: libgomp.info,  Node: acc_get_num_devices,  Next: acc_set_device_type,  Up: OpenACC Runtime Library Routines
  
! 6.1 'acc_get_num_devices' - Get number of devices for given device type
  =======================================================================
  
  _Description_
--- 4072,4078 ----
  
  File: libgomp.info,  Node: acc_get_num_devices,  Next: acc_set_device_type,  Up: OpenACC Runtime Library Routines
  
! 6.1 ‘acc_get_num_devices’ - Get number of devices for given device type
  =======================================================================
  
  _Description_
*************** _Description_
*** 4080,4090 ****
       available for the device type specified in DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   'int acc_get_num_devices(acc_device_t devicetype);'
  
  _Fortran_:
!      _Interface_:   'integer function acc_get_num_devices(devicetype)'
!                     'integer(kind=acc_device_kind) devicetype'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4080,4090 ----
       available for the device type specified in DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   ‘int acc_get_num_devices(acc_device_t devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘integer function acc_get_num_devices(devicetype)’
!                     ‘integer(kind=acc_device_kind) devicetype’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4093,4099 ****
  
  File: libgomp.info,  Node: acc_set_device_type,  Next: acc_get_device_type,  Prev: acc_get_num_devices,  Up: OpenACC Runtime Library Routines
  
! 6.2 'acc_set_device_type' - Set type of device accelerator to use.
  ==================================================================
  
  _Description_
--- 4093,4099 ----
  
  File: libgomp.info,  Node: acc_set_device_type,  Next: acc_get_device_type,  Prev: acc_get_num_devices,  Up: OpenACC Runtime Library Routines
  
! 6.2 ‘acc_set_device_type’ - Set type of device accelerator to use.
  ==================================================================
  
  _Description_
*************** _Description_
*** 4102,4112 ****
       kernels region.
  
  _C/C++_:
!      _Prototype_:   'acc_set_device_type(acc_device_t devicetype);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_set_device_type(devicetype)'
!                     'integer(kind=acc_device_kind) devicetype'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4102,4112 ----
       kernels region.
  
  _C/C++_:
!      _Prototype_:   ‘acc_set_device_type(acc_device_t devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_set_device_type(devicetype)’
!                     ‘integer(kind=acc_device_kind) devicetype’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4115,4139 ****
  
  File: libgomp.info,  Node: acc_get_device_type,  Next: acc_set_device_num,  Prev: acc_set_device_type,  Up: OpenACC Runtime Library Routines
  
! 6.3 'acc_get_device_type' - Get type of device accelerator to be used.
  ======================================================================
  
  _Description_
       This function returns what device type will be used when executing
       a parallel or kernels region.
  
!      This function returns 'acc_device_none' if 'acc_get_device_type' is
!      called from 'acc_ev_device_init_start', 'acc_ev_device_init_end'
       callbacks of the OpenACC Profiling Interface (*note OpenACC
       Profiling Interface::), that is, if the device is currently being
       initialized.
  
  _C/C++_:
!      _Prototype_:   'acc_device_t acc_get_device_type(void);'
  
  _Fortran_:
!      _Interface_:   'function acc_get_device_type(void)'
!                     'integer(kind=acc_device_kind) acc_get_device_type'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4115,4139 ----
  
  File: libgomp.info,  Node: acc_get_device_type,  Next: acc_set_device_num,  Prev: acc_set_device_type,  Up: OpenACC Runtime Library Routines
  
! 6.3 ‘acc_get_device_type’ - Get type of device accelerator to be used.
  ======================================================================
  
  _Description_
       This function returns what device type will be used when executing
       a parallel or kernels region.
  
!      This function returns ‘acc_device_none’ if ‘acc_get_device_type’ is
!      called from ‘acc_ev_device_init_start’, ‘acc_ev_device_init_end’
       callbacks of the OpenACC Profiling Interface (*note OpenACC
       Profiling Interface::), that is, if the device is currently being
       initialized.
  
  _C/C++_:
!      _Prototype_:   ‘acc_device_t acc_get_device_type(void);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_get_device_type(void)’
!                     ‘integer(kind=acc_device_kind) acc_get_device_type’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4142,4148 ****
  
  File: libgomp.info,  Node: acc_set_device_num,  Next: acc_get_device_num,  Prev: acc_get_device_type,  Up: OpenACC Runtime Library Routines
  
! 6.4 'acc_set_device_num' - Set device number to use.
  ====================================================
  
  _Description_
--- 4142,4148 ----
  
  File: libgomp.info,  Node: acc_set_device_num,  Next: acc_get_device_num,  Prev: acc_get_device_type,  Up: OpenACC Runtime Library Routines
  
! 6.4 ‘acc_set_device_num’ - Set device number to use.
  ====================================================
  
  _Description_
*************** _Description_
*** 4151,4163 ****
       DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   'acc_set_device_num(int devicenum, acc_device_t
!                     devicetype);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_set_device_num(devicenum, devicetype)'
!                     'integer devicenum'
!                     'integer(kind=acc_device_kind) devicetype'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4151,4163 ----
       DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   ‘acc_set_device_num(int devicenum, acc_device_t
!                     devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_set_device_num(devicenum, devicetype)’
!                     ‘integer devicenum’
!                     ‘integer(kind=acc_device_kind) devicetype’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4166,4172 ****
  
  File: libgomp.info,  Node: acc_get_device_num,  Next: acc_get_property,  Prev: acc_set_device_num,  Up: OpenACC Runtime Library Routines
  
! 6.5 'acc_get_device_num' - Get device number to be used.
  ========================================================
  
  _Description_
--- 4166,4172 ----
  
  File: libgomp.info,  Node: acc_get_device_num,  Next: acc_get_property,  Prev: acc_set_device_num,  Up: OpenACC Runtime Library Routines
  
! 6.5 ‘acc_get_device_num’ - Get device number to be used.
  ========================================================
  
  _Description_
*************** _Description_
*** 4175,4186 ****
       parallel or kernels region.
  
  _C/C++_:
!      _Prototype_:   'int acc_get_device_num(acc_device_t devicetype);'
  
  _Fortran_:
!      _Interface_:   'function acc_get_device_num(devicetype)'
!                     'integer(kind=acc_device_kind) devicetype'
!                     'integer acc_get_device_num'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4175,4186 ----
       parallel or kernels region.
  
  _C/C++_:
!      _Prototype_:   ‘int acc_get_device_num(acc_device_t devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_get_device_num(devicetype)’
!                     ‘integer(kind=acc_device_kind) devicetype’
!                     ‘integer acc_get_device_num’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4189,4233 ****
  
  File: libgomp.info,  Node: acc_get_property,  Next: acc_async_test,  Prev: acc_get_device_num,  Up: OpenACC Runtime Library Routines
  
! 6.6 'acc_get_property' - Get device property.
  =============================================
  
  _Description_
       These routines return the value of the specified PROPERTY for the
       device being queried according to DEVICENUM and DEVICETYPE.
       Integer-valued and string-valued properties are returned by
!      'acc_get_property' and 'acc_get_property_string' respectively.  The
!      Fortran 'acc_get_property_string' subroutine returns the string
       retrieved in its fourth argument while the remaining entry points
       are functions, which pass the return value as their result.
  
       Note for Fortran, only: the OpenACC technical committee corrected
       and, hence, modified the interface introduced in OpenACC 2.6.  The
!      kind-value parameter 'acc_device_property' has been renamed to
!      'acc_device_property_kind' for consistency and the return type of
!      the 'acc_get_property' function is now a 'c_size_t' integer instead
!      of a 'acc_device_property' integer.  The parameter
!      'acc_device_property' is still provided, but might be removed in a
       future version of GCC.
  
  _C/C++_:
!      _Prototype_:   'size_t acc_get_property(int devicenum, acc_device_t
!                     devicetype, acc_device_property_t property);'
!      _Prototype_:   'const char *acc_get_property_string(int devicenum,
                      acc_device_t devicetype, acc_device_property_t
!                     property);'
  
  _Fortran_:
!      _Interface_:   'function acc_get_property(devicenum, devicetype,
!                     property)'
!      _Interface_:   'subroutine acc_get_property_string(devicenum,
!                     devicetype, property, string)'
!                     'use ISO_C_Binding, only: c_size_t'
!                     'integer devicenum'
!                     'integer(kind=acc_device_kind) devicetype'
!                     'integer(kind=acc_device_property_kind) property'
!                     'integer(kind=c_size_t) acc_get_property'
!                     'character(*) string'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4189,4233 ----
  
  File: libgomp.info,  Node: acc_get_property,  Next: acc_async_test,  Prev: acc_get_device_num,  Up: OpenACC Runtime Library Routines
  
! 6.6 ‘acc_get_property’ - Get device property.
  =============================================
  
  _Description_
       These routines return the value of the specified PROPERTY for the
       device being queried according to DEVICENUM and DEVICETYPE.
       Integer-valued and string-valued properties are returned by
!      ‘acc_get_property’ and ‘acc_get_property_string’ respectively.  The
!      Fortran ‘acc_get_property_string’ subroutine returns the string
       retrieved in its fourth argument while the remaining entry points
       are functions, which pass the return value as their result.
  
       Note for Fortran, only: the OpenACC technical committee corrected
       and, hence, modified the interface introduced in OpenACC 2.6.  The
!      kind-value parameter ‘acc_device_property’ has been renamed to
!      ‘acc_device_property_kind’ for consistency and the return type of
!      the ‘acc_get_property’ function is now a ‘c_size_t’ integer instead
!      of a ‘acc_device_property’ integer.  The parameter
!      ‘acc_device_property’ is still provided, but might be removed in a
       future version of GCC.
  
  _C/C++_:
!      _Prototype_:   ‘size_t acc_get_property(int devicenum, acc_device_t
!                     devicetype, acc_device_property_t property);’
!      _Prototype_:   ‘const char *acc_get_property_string(int devicenum,
                      acc_device_t devicetype, acc_device_property_t
!                     property);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_get_property(devicenum, devicetype,
!                     property)’
!      _Interface_:   ‘subroutine acc_get_property_string(devicenum,
!                     devicetype, property, string)’
!                     ‘use ISO_C_Binding, only: c_size_t’
!                     ‘integer devicenum’
!                     ‘integer(kind=acc_device_kind) devicetype’
!                     ‘integer(kind=acc_device_property_kind) property’
!                     ‘integer(kind=c_size_t) acc_get_property’
!                     ‘character(*) string’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4236,4258 ****
  
  File: libgomp.info,  Node: acc_async_test,  Next: acc_async_test_all,  Prev: acc_get_property,  Up: OpenACC Runtime Library Routines
  
! 6.7 'acc_async_test' - Test for completion of a specific asynchronous operation.
  ================================================================================
  
  _Description_
       This function tests for completion of the asynchronous operation
       specified in ARG.  In C/C++, a non-zero value is returned to
       indicate the specified asynchronous operation has completed while
!      Fortran returns 'true'.  If the asynchronous operation has not
!      completed, C/C++ returns zero and Fortran returns 'false'.
  
  _C/C++_:
!      _Prototype_:   'int acc_async_test(int arg);'
  
  _Fortran_:
!      _Interface_:   'function acc_async_test(arg)'
!                     'integer(kind=acc_handle_kind) arg'
!                     'logical acc_async_test'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4236,4258 ----
  
  File: libgomp.info,  Node: acc_async_test,  Next: acc_async_test_all,  Prev: acc_get_property,  Up: OpenACC Runtime Library Routines
  
! 6.7 ‘acc_async_test’ - Test for completion of a specific asynchronous operation.
  ================================================================================
  
  _Description_
       This function tests for completion of the asynchronous operation
       specified in ARG.  In C/C++, a non-zero value is returned to
       indicate the specified asynchronous operation has completed while
!      Fortran returns ‘true’.  If the asynchronous operation has not
!      completed, C/C++ returns zero and Fortran returns ‘false’.
  
  _C/C++_:
!      _Prototype_:   ‘int acc_async_test(int arg);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_async_test(arg)’
!                     ‘integer(kind=acc_handle_kind) arg’
!                     ‘logical acc_async_test’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4261,4282 ****
  
  File: libgomp.info,  Node: acc_async_test_all,  Next: acc_wait,  Prev: acc_async_test,  Up: OpenACC Runtime Library Routines
  
! 6.8 'acc_async_test_all' - Tests for completion of all asynchronous operations.
  ===============================================================================
  
  _Description_
       This function tests for completion of all asynchronous operations.
       In C/C++, a non-zero value is returned to indicate all asynchronous
!      operations have completed while Fortran returns 'true'.  If any
       asynchronous operation has not completed, C/C++ returns zero and
!      Fortran returns 'false'.
  
  _C/C++_:
!      _Prototype_:   'int acc_async_test_all(void);'
  
  _Fortran_:
!      _Interface_:   'function acc_async_test()'
!                     'logical acc_get_device_num'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4261,4282 ----
  
  File: libgomp.info,  Node: acc_async_test_all,  Next: acc_wait,  Prev: acc_async_test,  Up: OpenACC Runtime Library Routines
  
! 6.8 ‘acc_async_test_all’ - Tests for completion of all asynchronous operations.
  ===============================================================================
  
  _Description_
       This function tests for completion of all asynchronous operations.
       In C/C++, a non-zero value is returned to indicate all asynchronous
!      operations have completed while Fortran returns ‘true’.  If any
       asynchronous operation has not completed, C/C++ returns zero and
!      Fortran returns ‘false’.
  
  _C/C++_:
!      _Prototype_:   ‘int acc_async_test_all(void);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_async_test()’
!                     ‘logical acc_get_device_num’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4285,4291 ****
  
  File: libgomp.info,  Node: acc_wait,  Next: acc_wait_all,  Prev: acc_async_test_all,  Up: OpenACC Runtime Library Routines
  
! 6.9 'acc_wait' - Wait for completion of a specific asynchronous operation.
  ==========================================================================
  
  _Description_
--- 4285,4291 ----
  
  File: libgomp.info,  Node: acc_wait,  Next: acc_wait_all,  Prev: acc_async_test_all,  Up: OpenACC Runtime Library Routines
  
! 6.9 ‘acc_wait’ - Wait for completion of a specific asynchronous operation.
  ==========================================================================
  
  _Description_
*************** _Description_
*** 4293,4310 ****
       specified in ARG.
  
  _C/C++_:
!      _Prototype_:   'acc_wait(arg);'
!      _Prototype     'acc_async_wait(arg);'
       (OpenACC 1.0
       compatibility)_:
  
  _Fortran_:
!      _Interface_:   'subroutine acc_wait(arg)'
!                     'integer(acc_handle_kind) arg'
!      _Interface     'subroutine acc_async_wait(arg)'
       (OpenACC 1.0
       compatibility)_:
!                     'integer(acc_handle_kind) arg'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4293,4310 ----
       specified in ARG.
  
  _C/C++_:
!      _Prototype_:   ‘acc_wait(arg);’
!      _Prototype     ‘acc_async_wait(arg);’
       (OpenACC 1.0
       compatibility)_:
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_wait(arg)’
!                     ‘integer(acc_handle_kind) arg’
!      _Interface     ‘subroutine acc_async_wait(arg)’
       (OpenACC 1.0
       compatibility)_:
!                     ‘integer(acc_handle_kind) arg’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4313,4319 ****
  
  File: libgomp.info,  Node: acc_wait_all,  Next: acc_wait_all_async,  Prev: acc_wait,  Up: OpenACC Runtime Library Routines
  
! 6.10 'acc_wait_all' - Waits for completion of all asynchronous operations.
  ==========================================================================
  
  _Description_
--- 4313,4319 ----
  
  File: libgomp.info,  Node: acc_wait_all,  Next: acc_wait_all_async,  Prev: acc_wait,  Up: OpenACC Runtime Library Routines
  
! 6.10 ‘acc_wait_all’ - Waits for completion of all asynchronous operations.
  ==========================================================================
  
  _Description_
*************** _Description_
*** 4321,4334 ****
       operations.
  
  _C/C++_:
!      _Prototype_:   'acc_wait_all(void);'
!      _Prototype     'acc_async_wait_all(void);'
       (OpenACC 1.0
       compatibility)_:
  
  _Fortran_:
!      _Interface_:   'subroutine acc_wait_all()'
!      _Interface     'subroutine acc_async_wait_all()'
       (OpenACC 1.0
       compatibility)_:
  
--- 4321,4334 ----
       operations.
  
  _C/C++_:
!      _Prototype_:   ‘acc_wait_all(void);’
!      _Prototype     ‘acc_async_wait_all(void);’
       (OpenACC 1.0
       compatibility)_:
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_wait_all()’
!      _Interface     ‘subroutine acc_async_wait_all()’
       (OpenACC 1.0
       compatibility)_:
  
*************** _Reference_:
*** 4339,4345 ****
  
  File: libgomp.info,  Node: acc_wait_all_async,  Next: acc_wait_async,  Prev: acc_wait_all,  Up: OpenACC Runtime Library Routines
  
! 6.11 'acc_wait_all_async' - Wait for completion of all asynchronous operations.
  ===============================================================================
  
  _Description_
--- 4339,4345 ----
  
  File: libgomp.info,  Node: acc_wait_all_async,  Next: acc_wait_async,  Prev: acc_wait_all,  Up: OpenACC Runtime Library Routines
  
! 6.11 ‘acc_wait_all_async’ - Wait for completion of all asynchronous operations.
  ===============================================================================
  
  _Description_
*************** _Description_
*** 4348,4358 ****
       on any queue.
  
  _C/C++_:
!      _Prototype_:   'acc_wait_all_async(int async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_wait_all_async(async)'
!                     'integer(acc_handle_kind) async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4348,4358 ----
       on any queue.
  
  _C/C++_:
!      _Prototype_:   ‘acc_wait_all_async(int async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_wait_all_async(async)’
!                     ‘integer(acc_handle_kind) async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4361,4367 ****
  
  File: libgomp.info,  Node: acc_wait_async,  Next: acc_init,  Prev: acc_wait_all_async,  Up: OpenACC Runtime Library Routines
  
! 6.12 'acc_wait_async' - Wait for completion of asynchronous operations.
  =======================================================================
  
  _Description_
--- 4361,4367 ----
  
  File: libgomp.info,  Node: acc_wait_async,  Next: acc_init,  Prev: acc_wait_all_async,  Up: OpenACC Runtime Library Routines
  
! 6.12 ‘acc_wait_async’ - Wait for completion of asynchronous operations.
  =======================================================================
  
  _Description_
*************** _Description_
*** 4369,4379 ****
       all asynchronous operations enqueued on queue ARG.
  
  _C/C++_:
!      _Prototype_:   'acc_wait_async(int arg, int async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_wait_async(arg, async)'
!                     'integer(acc_handle_kind) arg, async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4369,4379 ----
       all asynchronous operations enqueued on queue ARG.
  
  _C/C++_:
!      _Prototype_:   ‘acc_wait_async(int arg, int async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_wait_async(arg, async)’
!                     ‘integer(acc_handle_kind) arg, async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4382,4388 ****
  
  File: libgomp.info,  Node: acc_init,  Next: acc_shutdown,  Prev: acc_wait_async,  Up: OpenACC Runtime Library Routines
  
! 6.13 'acc_init' - Initialize runtime for a specific device type.
  ================================================================
  
  _Description_
--- 4382,4388 ----
  
  File: libgomp.info,  Node: acc_init,  Next: acc_shutdown,  Prev: acc_wait_async,  Up: OpenACC Runtime Library Routines
  
! 6.13 ‘acc_init’ - Initialize runtime for a specific device type.
  ================================================================
  
  _Description_
*************** _Description_
*** 4390,4400 ****
       in DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   'acc_init(acc_device_t devicetype);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_init(devicetype)'
!                     'integer(acc_device_kind) devicetype'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4390,4400 ----
       in DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   ‘acc_init(acc_device_t devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_init(devicetype)’
!                     ‘integer(acc_device_kind) devicetype’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4403,4409 ****
  
  File: libgomp.info,  Node: acc_shutdown,  Next: acc_on_device,  Prev: acc_init,  Up: OpenACC Runtime Library Routines
  
! 6.14 'acc_shutdown' - Shuts down the runtime for a specific device type.
  ========================================================================
  
  _Description_
--- 4403,4409 ----
  
  File: libgomp.info,  Node: acc_shutdown,  Next: acc_on_device,  Prev: acc_init,  Up: OpenACC Runtime Library Routines
  
! 6.14 ‘acc_shutdown’ - Shuts down the runtime for a specific device type.
  ========================================================================
  
  _Description_
*************** _Description_
*** 4411,4421 ****
       in DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   'acc_shutdown(acc_device_t devicetype);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_shutdown(devicetype)'
!                     'integer(acc_device_kind) devicetype'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4411,4421 ----
       in DEVICETYPE.
  
  _C/C++_:
!      _Prototype_:   ‘acc_shutdown(acc_device_t devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_shutdown(devicetype)’
!                     ‘integer(acc_device_kind) devicetype’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4424,4447 ****
  
  File: libgomp.info,  Node: acc_on_device,  Next: acc_malloc,  Prev: acc_shutdown,  Up: OpenACC Runtime Library Routines
  
! 6.15 'acc_on_device' - Whether executing on a particular device
  ===============================================================
  
  _Description_:
       This function returns whether the program is executing on a
       particular device specified in DEVICETYPE.  In C/C++ a non-zero
       value is returned to indicate the device is executing on the
!      specified device type.  In Fortran, 'true' is returned.  If the
       program is not executing on the specified device type C/C++ returns
!      zero, while Fortran returns 'false'.
  
  _C/C++_:
!      _Prototype_:   'acc_on_device(acc_device_t devicetype);'
  
  _Fortran_:
!      _Interface_:   'function acc_on_device(devicetype)'
!                     'integer(acc_device_kind) devicetype'
!                     'logical acc_on_device'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4424,4447 ----
  
  File: libgomp.info,  Node: acc_on_device,  Next: acc_malloc,  Prev: acc_shutdown,  Up: OpenACC Runtime Library Routines
  
! 6.15 ‘acc_on_device’ - Whether executing on a particular device
  ===============================================================
  
  _Description_:
       This function returns whether the program is executing on a
       particular device specified in DEVICETYPE.  In C/C++ a non-zero
       value is returned to indicate the device is executing on the
!      specified device type.  In Fortran, ‘true’ is returned.  If the
       program is not executing on the specified device type C/C++ returns
!      zero, while Fortran returns ‘false’.
  
  _C/C++_:
!      _Prototype_:   ‘acc_on_device(acc_device_t devicetype);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_on_device(devicetype)’
!                     ‘integer(acc_device_kind) devicetype’
!                     ‘logical acc_on_device’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4450,4456 ****
  
  File: libgomp.info,  Node: acc_malloc,  Next: acc_free,  Prev: acc_on_device,  Up: OpenACC Runtime Library Routines
  
! 6.16 'acc_malloc' - Allocate device memory.
  ===========================================
  
  _Description_
--- 4450,4456 ----
  
  File: libgomp.info,  Node: acc_malloc,  Next: acc_free,  Prev: acc_on_device,  Up: OpenACC Runtime Library Routines
  
! 6.16 ‘acc_malloc’ - Allocate device memory.
  ===========================================
  
  _Description_
*************** _Description_
*** 4458,4468 ****
       the device address of the allocated memory.
  
  _C/C++_:
!      _Prototype_:   'd_void* acc_malloc(size_t bytes);'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function acc_malloc(bytes)'
!                     'integer(c_size_t), value :: bytes'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4458,4468 ----
       the device address of the allocated memory.
  
  _C/C++_:
!      _Prototype_:   ‘d_void* acc_malloc(size_t bytes);’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function acc_malloc(bytes)’
!                     ‘integer(c_size_t), value :: bytes’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4472,4490 ****
  
  File: libgomp.info,  Node: acc_free,  Next: acc_copyin,  Prev: acc_malloc,  Up: OpenACC Runtime Library Routines
  
! 6.17 'acc_free' - Free device memory.
  =====================================
  
  _Description_
       Free previously allocated device memory at the device address
!      'data_dev'.
  
  _C/C++_:
!      _Prototype_:   'void acc_free(d_void *data_dev);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_free(data_dev)'
!                     'type(c_ptr), value :: data_dev'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4472,4490 ----
  
  File: libgomp.info,  Node: acc_free,  Next: acc_copyin,  Prev: acc_malloc,  Up: OpenACC Runtime Library Routines
  
! 6.17 ‘acc_free’ - Free device memory.
  =====================================
  
  _Description_
       Free previously allocated device memory at the device address
!      ‘data_dev’.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_free(d_void *data_dev);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_free(data_dev)’
!                     ‘type(c_ptr), value :: data_dev’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4494,4500 ****
  
  File: libgomp.info,  Node: acc_copyin,  Next: acc_present_or_copyin,  Prev: acc_free,  Up: OpenACC Runtime Library Routines
  
! 6.18 'acc_copyin' - Allocate device memory and copy host memory to it.
  ======================================================================
  
  _Description_
--- 4494,4500 ----
  
  File: libgomp.info,  Node: acc_copyin,  Next: acc_present_or_copyin,  Prev: acc_free,  Up: OpenACC Runtime Library Routines
  
! 6.18 ‘acc_copyin’ - Allocate device memory and copy host memory to it.
  ======================================================================
  
  _Description_
*************** _Description_
*** 4507,4529 ****
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   'void *acc_copyin(h_void *a, size_t len);'
!      _Prototype_:   'void *acc_copyin_async(h_void *a, size_t len, int
!                     async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_copyin(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_copyin(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_copyin_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_copyin_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4507,4529 ----
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_copyin(h_void *a, size_t len);’
!      _Prototype_:   ‘void *acc_copyin_async(h_void *a, size_t len, int
!                     async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_copyin(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_copyin(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_copyin_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_copyin_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4532,4538 ****
  
  File: libgomp.info,  Node: acc_present_or_copyin,  Next: acc_create,  Prev: acc_copyin,  Up: OpenACC Runtime Library Routines
  
! 6.19 'acc_present_or_copyin' - If the data is not present on the device, allocate device memory and copy from host memory.
  ==========================================================================================================================
  
  _Description_
--- 4532,4538 ----
  
  File: libgomp.info,  Node: acc_present_or_copyin,  Next: acc_create,  Prev: acc_copyin,  Up: OpenACC Runtime Library Routines
  
! 6.19 ‘acc_present_or_copyin’ - If the data is not present on the device, allocate device memory and copy from host memory.
  ==========================================================================================================================
  
  _Description_
*************** _Description_
*** 4545,4569 ****
       specifies a contiguous array section.  The second form A specifies
       a variable or array element and LEN specifies the length in bytes.
  
!      Note that 'acc_present_or_copyin' and 'acc_pcopyin' exist for
       backward compatibility with OpenACC 2.0; use *note acc_copyin::
       instead.
  
  _C/C++_:
!      _Prototype_:   'void *acc_present_or_copyin(h_void *a, size_t len);'
!      _Prototype_:   'void *acc_pcopyin(h_void *a, size_t len);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_present_or_copyin(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_present_or_copyin(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_pcopyin(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_pcopyin(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4545,4569 ----
       specifies a contiguous array section.  The second form A specifies
       a variable or array element and LEN specifies the length in bytes.
  
!      Note that ‘acc_present_or_copyin’ and ‘acc_pcopyin’ exist for
       backward compatibility with OpenACC 2.0; use *note acc_copyin::
       instead.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_present_or_copyin(h_void *a, size_t len);’
!      _Prototype_:   ‘void *acc_pcopyin(h_void *a, size_t len);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_present_or_copyin(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_present_or_copyin(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_pcopyin(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_pcopyin(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4572,4578 ****
  
  File: libgomp.info,  Node: acc_create,  Next: acc_present_or_create,  Prev: acc_present_or_copyin,  Up: OpenACC Runtime Library Routines
  
! 6.20 'acc_create' - Allocate device memory and map it to host memory.
  =====================================================================
  
  _Description_
--- 4572,4578 ----
  
  File: libgomp.info,  Node: acc_create,  Next: acc_present_or_create,  Prev: acc_present_or_copyin,  Up: OpenACC Runtime Library Routines
  
! 6.20 ‘acc_create’ - Allocate device memory and map it to host memory.
  =====================================================================
  
  _Description_
*************** _Description_
*** 4586,4608 ****
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   'void *acc_create(h_void *a, size_t len);'
!      _Prototype_:   'void *acc_create_async(h_void *a, size_t len, int
!                     async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_create(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_create(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_create_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_create_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4586,4608 ----
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_create(h_void *a, size_t len);’
!      _Prototype_:   ‘void *acc_create_async(h_void *a, size_t len, int
!                     async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_create(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_create(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_create_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_create_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4611,4617 ****
  
  File: libgomp.info,  Node: acc_present_or_create,  Next: acc_copyout,  Prev: acc_create,  Up: OpenACC Runtime Library Routines
  
! 6.21 'acc_present_or_create' - If the data is not present on the device, allocate device memory and map it to host memory.
  ==========================================================================================================================
  
  _Description_
--- 4611,4617 ----
  
  File: libgomp.info,  Node: acc_present_or_create,  Next: acc_copyout,  Prev: acc_create,  Up: OpenACC Runtime Library Routines
  
! 6.21 ‘acc_present_or_create’ - If the data is not present on the device, allocate device memory and map it to host memory.
  ==========================================================================================================================
  
  _Description_
*************** _Description_
*** 4624,4648 ****
       specifies a contiguous array section.  The second form A specifies
       a variable or array element and LEN specifies the length in bytes.
  
!      Note that 'acc_present_or_create' and 'acc_pcreate' exist for
       backward compatibility with OpenACC 2.0; use *note acc_create::
       instead.
  
  _C/C++_:
!      _Prototype_:   'void *acc_present_or_create(h_void *a, size_t len)'
!      _Prototype_:   'void *acc_pcreate(h_void *a, size_t len)'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_present_or_create(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_present_or_create(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_pcreate(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_pcreate(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4624,4648 ----
       specifies a contiguous array section.  The second form A specifies
       a variable or array element and LEN specifies the length in bytes.
  
!      Note that ‘acc_present_or_create’ and ‘acc_pcreate’ exist for
       backward compatibility with OpenACC 2.0; use *note acc_create::
       instead.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_present_or_create(h_void *a, size_t len)’
!      _Prototype_:   ‘void *acc_pcreate(h_void *a, size_t len)’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_present_or_create(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_present_or_create(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_pcreate(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_pcreate(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4651,4657 ****
  
  File: libgomp.info,  Node: acc_copyout,  Next: acc_delete,  Prev: acc_present_or_create,  Up: OpenACC Runtime Library Routines
  
! 6.22 'acc_copyout' - Copy device memory to host memory.
  =======================================================
  
  _Description_
--- 4651,4657 ----
  
  File: libgomp.info,  Node: acc_copyout,  Next: acc_delete,  Prev: acc_present_or_create,  Up: OpenACC Runtime Library Routines
  
! 6.22 ‘acc_copyout’ - Copy device memory to host memory.
  =======================================================
  
  _Description_
*************** _Description_
*** 4663,4699 ****
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   'acc_copyout(h_void *a, size_t len);'
!      _Prototype_:   'acc_copyout_async(h_void *a, size_t len, int async);'
!      _Prototype_:   'acc_copyout_finalize(h_void *a, size_t len);'
!      _Prototype_:   'acc_copyout_finalize_async(h_void *a, size_t len, int
!                     async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_copyout(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_copyout(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_copyout_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_copyout_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_copyout_finalize(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_copyout_finalize(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_copyout_finalize_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_copyout_finalize_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4663,4699 ----
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   ‘acc_copyout(h_void *a, size_t len);’
!      _Prototype_:   ‘acc_copyout_async(h_void *a, size_t len, int async);’
!      _Prototype_:   ‘acc_copyout_finalize(h_void *a, size_t len);’
!      _Prototype_:   ‘acc_copyout_finalize_async(h_void *a, size_t len, int
!                     async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_copyout(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_copyout(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_copyout_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_copyout_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_copyout_finalize(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_copyout_finalize(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_copyout_finalize_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_copyout_finalize_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4702,4708 ****
  
  File: libgomp.info,  Node: acc_delete,  Next: acc_update_device,  Prev: acc_copyout,  Up: OpenACC Runtime Library Routines
  
! 6.23 'acc_delete' - Free device memory.
  =======================================
  
  _Description_
--- 4702,4708 ----
  
  File: libgomp.info,  Node: acc_delete,  Next: acc_update_device,  Prev: acc_copyout,  Up: OpenACC Runtime Library Routines
  
! 6.23 ‘acc_delete’ - Free device memory.
  =======================================
  
  _Description_
*************** _Description_
*** 4714,4750 ****
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   'acc_delete(h_void *a, size_t len);'
!      _Prototype_:   'acc_delete_async(h_void *a, size_t len, int async);'
!      _Prototype_:   'acc_delete_finalize(h_void *a, size_t len);'
!      _Prototype_:   'acc_delete_finalize_async(h_void *a, size_t len, int
!                     async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_delete(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_delete(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_delete_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_delete_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_delete_finalize(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_delete_finalize(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_delete_async_finalize(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_delete_async_finalize(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4714,4750 ----
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   ‘acc_delete(h_void *a, size_t len);’
!      _Prototype_:   ‘acc_delete_async(h_void *a, size_t len, int async);’
!      _Prototype_:   ‘acc_delete_finalize(h_void *a, size_t len);’
!      _Prototype_:   ‘acc_delete_finalize_async(h_void *a, size_t len, int
!                     async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_delete(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_delete(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_delete_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_delete_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_delete_finalize(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_delete_finalize(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_delete_async_finalize(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_delete_async_finalize(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4753,4759 ****
  
  File: libgomp.info,  Node: acc_update_device,  Next: acc_update_self,  Prev: acc_delete,  Up: OpenACC Runtime Library Routines
  
! 6.24 'acc_update_device' - Update device memory from mapped host memory.
  ========================================================================
  
  _Description_
--- 4753,4759 ----
  
  File: libgomp.info,  Node: acc_update_device,  Next: acc_update_self,  Prev: acc_delete,  Up: OpenACC Runtime Library Routines
  
! 6.24 ‘acc_update_device’ - Update device memory from mapped host memory.
  ========================================================================
  
  _Description_
*************** _Description_
*** 4766,4787 ****
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   'acc_update_device(h_void *a, size_t len);'
!      _Prototype_:   'acc_update_device(h_void *a, size_t len, async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_update_device(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_update_device(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_update_device_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_update_device_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4766,4787 ----
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   ‘acc_update_device(h_void *a, size_t len);’
!      _Prototype_:   ‘acc_update_device(h_void *a, size_t len, async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_update_device(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_update_device(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_update_device_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_update_device_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4790,4796 ****
  
  File: libgomp.info,  Node: acc_update_self,  Next: acc_map_data,  Prev: acc_update_device,  Up: OpenACC Runtime Library Routines
  
! 6.25 'acc_update_self' - Update host memory from mapped device memory.
  ======================================================================
  
  _Description_
--- 4790,4796 ----
  
  File: libgomp.info,  Node: acc_update_self,  Next: acc_map_data,  Prev: acc_update_device,  Up: OpenACC Runtime Library Routines
  
! 6.25 ‘acc_update_self’ - Update host memory from mapped device memory.
  ======================================================================
  
  _Description_
*************** _Description_
*** 4803,4825 ****
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   'acc_update_self(h_void *a, size_t len);'
!      _Prototype_:   'acc_update_self_async(h_void *a, size_t len, int
!                     async);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_update_self(a)'
!                     'type, dimension(:[,:]...) :: a'
!      _Interface_:   'subroutine acc_update_self(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!      _Interface_:   'subroutine acc_update_self_async(a, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer(acc_handle_kind) :: async'
!      _Interface_:   'subroutine acc_update_self_async(a, len, async)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'integer(acc_handle_kind) :: async'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4803,4825 ----
       a variable or array element and LEN specifies the length in bytes.
  
  _C/C++_:
!      _Prototype_:   ‘acc_update_self(h_void *a, size_t len);’
!      _Prototype_:   ‘acc_update_self_async(h_void *a, size_t len, int
!                     async);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_update_self(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!      _Interface_:   ‘subroutine acc_update_self(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!      _Interface_:   ‘subroutine acc_update_self_async(a, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer(acc_handle_kind) :: async’
!      _Interface_:   ‘subroutine acc_update_self_async(a, len, async)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘integer(acc_handle_kind) :: async’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4828,4834 ****
  
  File: libgomp.info,  Node: acc_map_data,  Next: acc_unmap_data,  Prev: acc_update_self,  Up: OpenACC Runtime Library Routines
  
! 6.26 'acc_map_data' - Map previously allocated device memory to host memory.
  ============================================================================
  
  _Description_
--- 4828,4834 ----
  
  File: libgomp.info,  Node: acc_map_data,  Next: acc_unmap_data,  Prev: acc_update_self,  Up: OpenACC Runtime Library Routines
  
! 6.26 ‘acc_map_data’ - Map previously allocated device memory to host memory.
  ============================================================================
  
  _Description_
*************** _Description_
*** 4838,4851 ****
       length of BYTES.
  
  _C/C++_:
!      _Prototype_:   'void acc_map_data(h_void *data_arg, d_void *data_dev,
!                     size_t bytes);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_map_data(data_arg, data_dev, bytes)'
!                     'type(*), dimension(*) :: data_arg'
!                     'type(c_ptr), value :: data_dev'
!                     'integer(c_size_t), value :: bytes'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4838,4851 ----
       length of BYTES.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_map_data(h_void *data_arg, d_void *data_dev,
!                     size_t bytes);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_map_data(data_arg, data_dev, bytes)’
!                     ‘type(*), dimension(*) :: data_arg’
!                     ‘type(c_ptr), value :: data_dev’
!                     ‘integer(c_size_t), value :: bytes’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4855,4861 ****
  
  File: libgomp.info,  Node: acc_unmap_data,  Next: acc_deviceptr,  Prev: acc_map_data,  Up: OpenACC Runtime Library Routines
  
! 6.27 'acc_unmap_data' - Unmap device memory from host memory.
  =============================================================
  
  _Description_
--- 4855,4861 ----
  
  File: libgomp.info,  Node: acc_unmap_data,  Next: acc_deviceptr,  Prev: acc_map_data,  Up: OpenACC Runtime Library Routines
  
! 6.27 ‘acc_unmap_data’ - Unmap device memory from host memory.
  =============================================================
  
  _Description_
*************** _Description_
*** 4863,4873 ****
       latter specified by DATA_ARG.
  
  _C/C++_:
!      _Prototype_:   'void acc_unmap_data(h_void *data_arg);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_unmap_data(data_arg)'
!                     'type(*), dimension(*) :: data_arg'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4863,4873 ----
       latter specified by DATA_ARG.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_unmap_data(h_void *data_arg);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_unmap_data(data_arg)’
!                     ‘type(*), dimension(*) :: data_arg’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4877,4883 ****
  
  File: libgomp.info,  Node: acc_deviceptr,  Next: acc_hostptr,  Prev: acc_unmap_data,  Up: OpenACC Runtime Library Routines
  
! 6.28 'acc_deviceptr' - Get device pointer associated with specific host address.
  ================================================================================
  
  _Description_
--- 4877,4883 ----
  
  File: libgomp.info,  Node: acc_deviceptr,  Next: acc_hostptr,  Prev: acc_unmap_data,  Up: OpenACC Runtime Library Routines
  
! 6.28 ‘acc_deviceptr’ - Get device pointer associated with specific host address.
  ================================================================================
  
  _Description_
*************** _Description_
*** 4885,4895 ****
       the host address specified by DATA_ARG.
  
  _C/C++_:
!      _Prototype_:   'void *acc_deviceptr(h_void *data_arg);'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function acc_deviceptr(data_arg)'
!                     'type(*), dimension(*) :: data_arg'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4885,4895 ----
       the host address specified by DATA_ARG.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_deviceptr(h_void *data_arg);’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function acc_deviceptr(data_arg)’
!                     ‘type(*), dimension(*) :: data_arg’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4899,4905 ****
  
  File: libgomp.info,  Node: acc_hostptr,  Next: acc_is_present,  Prev: acc_deviceptr,  Up: OpenACC Runtime Library Routines
  
! 6.29 'acc_hostptr' - Get host pointer associated with specific device address.
  ==============================================================================
  
  _Description_
--- 4899,4905 ----
  
  File: libgomp.info,  Node: acc_hostptr,  Next: acc_is_present,  Prev: acc_deviceptr,  Up: OpenACC Runtime Library Routines
  
! 6.29 ‘acc_hostptr’ - Get host pointer associated with specific device address.
  ==============================================================================
  
  _Description_
*************** _Description_
*** 4907,4917 ****
       device address specified by DATA_DEV.
  
  _C/C++_:
!      _Prototype_:   'void *acc_hostptr(d_void *data_dev);'
  
  _Fortran_:
!      _Interface_:   'type(c_ptr) function acc_hostptr(data_dev)'
!                     'type(c_ptr), value :: data_dev'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4907,4917 ----
       device address specified by DATA_DEV.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_hostptr(d_void *data_dev);’
  
  _Fortran_:
!      _Interface_:   ‘type(c_ptr) function acc_hostptr(data_dev)’
!                     ‘type(c_ptr), value :: data_dev’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4921,4927 ****
  
  File: libgomp.info,  Node: acc_is_present,  Next: acc_memcpy_to_device,  Prev: acc_hostptr,  Up: OpenACC Runtime Library Routines
  
! 6.30 'acc_is_present' - Indicate whether host variable / array is present on device.
  ====================================================================================
  
  _Description_
--- 4921,4927 ----
  
  File: libgomp.info,  Node: acc_is_present,  Next: acc_memcpy_to_device,  Prev: acc_hostptr,  Up: OpenACC Runtime Library Routines
  
! 6.30 ‘acc_is_present’ - Indicate whether host variable / array is present on device.
  ====================================================================================
  
  _Description_
*************** _Description_
*** 4934,4954 ****
       In Fortran, two (2) forms are supported.  In the first form, A
       specifies a contiguous array section.  The second form A specifies
       a variable or array element and LEN specifies the length in bytes.
!      If the host memory is mapped to device memory, then a 'true' is
!      returned.  Otherwise, a 'false' is return to indicate the mapped
       memory is not present.
  
  _C/C++_:
!      _Prototype_:   'int acc_is_present(h_void *a, size_t len);'
  
  _Fortran_:
!      _Interface_:   'function acc_is_present(a)'
!                     'type, dimension(:[,:]...) :: a'
!                     'logical acc_is_present'
!      _Interface_:   'function acc_is_present(a, len)'
!                     'type, dimension(:[,:]...) :: a'
!                     'integer len'
!                     'logical acc_is_present'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4934,4954 ----
       In Fortran, two (2) forms are supported.  In the first form, A
       specifies a contiguous array section.  The second form A specifies
       a variable or array element and LEN specifies the length in bytes.
!      If the host memory is mapped to device memory, then a ‘true’ is
!      returned.  Otherwise, a ‘false’ is return to indicate the mapped
       memory is not present.
  
  _C/C++_:
!      _Prototype_:   ‘int acc_is_present(h_void *a, size_t len);’
  
  _Fortran_:
!      _Interface_:   ‘function acc_is_present(a)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘logical acc_is_present’
!      _Interface_:   ‘function acc_is_present(a, len)’
!                     ‘type, dimension(:[,:]...) :: a’
!                     ‘integer len’
!                     ‘logical acc_is_present’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4957,4963 ****
  
  File: libgomp.info,  Node: acc_memcpy_to_device,  Next: acc_memcpy_from_device,  Prev: acc_is_present,  Up: OpenACC Runtime Library Routines
  
! 6.31 'acc_memcpy_to_device' - Copy host memory to device memory.
  ================================================================
  
  _Description_
--- 4957,4963 ----
  
  File: libgomp.info,  Node: acc_memcpy_to_device,  Next: acc_memcpy_from_device,  Prev: acc_is_present,  Up: OpenACC Runtime Library Routines
  
! 6.31 ‘acc_memcpy_to_device’ - Copy host memory to device memory.
  ================================================================
  
  _Description_
*************** _Description_
*** 4966,4985 ****
       DATA_DEV_DEST for a length of BYTES bytes.
  
  _C/C++_:
!      _Prototype_:   'void acc_memcpy_to_device(d_void* data_dev_dest,'
!                     'h_void* data_host_src, size_t bytes);'
!      _Prototype_:   'void acc_memcpy_to_device_async(d_void* data_dev_dest,'
!                     'h_void* data_host_src, size_t bytes, int async_arg);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_memcpy_to_device(data_dev_dest, &'
!                     'data_host_src, bytes)'
!      _Interface_:   'subroutine acc_memcpy_to_device_async(data_dev_dest, &'
!                     'data_host_src, bytes, async_arg)'
!                     'type(c_ptr), value :: data_dev_dest'
!                     'type(*), dimension(*) :: data_host_src'
!                     'integer(c_size_t), value :: bytes'
!                     'integer(acc_handle_kind), value :: async_arg'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4966,4985 ----
       DATA_DEV_DEST for a length of BYTES bytes.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_memcpy_to_device(d_void* data_dev_dest,’
!                     ‘h_void* data_host_src, size_t bytes);’
!      _Prototype_:   ‘void acc_memcpy_to_device_async(d_void* data_dev_dest,’
!                     ‘h_void* data_host_src, size_t bytes, int async_arg);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_memcpy_to_device(data_dev_dest, &’
!                     ‘data_host_src, bytes)’
!      _Interface_:   ‘subroutine acc_memcpy_to_device_async(data_dev_dest, &’
!                     ‘data_host_src, bytes, async_arg)’
!                     ‘type(c_ptr), value :: data_dev_dest’
!                     ‘type(*), dimension(*) :: data_host_src’
!                     ‘integer(c_size_t), value :: bytes’
!                     ‘integer(acc_handle_kind), value :: async_arg’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 4989,4995 ****
  
  File: libgomp.info,  Node: acc_memcpy_from_device,  Next: acc_attach,  Prev: acc_memcpy_to_device,  Up: OpenACC Runtime Library Routines
  
! 6.32 'acc_memcpy_from_device' - Copy device memory to host memory.
  ==================================================================
  
  _Description_
--- 4989,4995 ----
  
  File: libgomp.info,  Node: acc_memcpy_from_device,  Next: acc_attach,  Prev: acc_memcpy_to_device,  Up: OpenACC Runtime Library Routines
  
! 6.32 ‘acc_memcpy_from_device’ - Copy device memory to host memory.
  ==================================================================
  
  _Description_
*************** _Description_
*** 4998,5019 ****
       DATA_HOST_DEST for a length of BYTES bytes.
  
  _C/C++_:
!      _Prototype_:   'void acc_memcpy_from_device(h_void* data_host_dest,'
!                     'd_void* data_dev_src, size_t bytes);'
!      _Prototype_:   'void acc_memcpy_from_device_async(h_void*
!                     data_host_dest,'
!                     'd_void* data_dev_src, size_t bytes, int async_arg);'
  
  _Fortran_:
!      _Interface_:   'subroutine acc_memcpy_from_device(data_host_dest, &'
!                     'data_dev_src, bytes)'
!      _Interface_:   'subroutine acc_memcpy_from_device_async(data_host_dest,
!                     &'
!                     'data_dev_src, bytes, async_arg)'
!                     'type(*), dimension(*) :: data_host_dest'
!                     'type(c_ptr), value :: data_dev_src'
!                     'integer(c_size_t), value :: bytes'
!                     'integer(acc_handle_kind), value :: async_arg'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 4998,5019 ----
       DATA_HOST_DEST for a length of BYTES bytes.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_memcpy_from_device(h_void* data_host_dest,’
!                     ‘d_void* data_dev_src, size_t bytes);’
!      _Prototype_:   ‘void acc_memcpy_from_device_async(h_void*
!                     data_host_dest,’
!                     ‘d_void* data_dev_src, size_t bytes, int async_arg);’
  
  _Fortran_:
!      _Interface_:   ‘subroutine acc_memcpy_from_device(data_host_dest, &’
!                     ‘data_dev_src, bytes)’
!      _Interface_:   ‘subroutine acc_memcpy_from_device_async(data_host_dest,
!                     &’
!                     ‘data_dev_src, bytes, async_arg)’
!                     ‘type(*), dimension(*) :: data_host_dest’
!                     ‘type(c_ptr), value :: data_dev_src’
!                     ‘integer(c_size_t), value :: bytes’
!                     ‘integer(acc_handle_kind), value :: async_arg’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5023,5029 ****
  
  File: libgomp.info,  Node: acc_attach,  Next: acc_detach,  Prev: acc_memcpy_from_device,  Up: OpenACC Runtime Library Routines
  
! 6.33 'acc_attach' - Let device pointer point to device-pointer target.
  ======================================================================
  
  _Description_
--- 5023,5029 ----
  
  File: libgomp.info,  Node: acc_attach,  Next: acc_detach,  Prev: acc_memcpy_from_device,  Up: OpenACC Runtime Library Routines
  
! 6.33 ‘acc_attach’ - Let device pointer point to device-pointer target.
  ======================================================================
  
  _Description_
*************** _Description_
*** 5031,5038 ****
       host-pointer address to pointing to the corresponding device data.
  
  _C/C++_:
!      _Prototype_:   'void acc_attach(h_void **ptr_addr);'
!      _Prototype_:   'void acc_attach_async(h_void **ptr_addr, int async);'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 5031,5038 ----
       host-pointer address to pointing to the corresponding device data.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_attach(h_void **ptr_addr);’
!      _Prototype_:   ‘void acc_attach_async(h_void **ptr_addr, int async);’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5041,5047 ****
  
  File: libgomp.info,  Node: acc_detach,  Next: acc_get_current_cuda_device,  Prev: acc_attach,  Up: OpenACC Runtime Library Routines
  
! 6.34 'acc_detach' - Let device pointer point to host-pointer target.
  ====================================================================
  
  _Description_
--- 5041,5047 ----
  
  File: libgomp.info,  Node: acc_detach,  Next: acc_get_current_cuda_device,  Prev: acc_attach,  Up: OpenACC Runtime Library Routines
  
! 6.34 ‘acc_detach’ - Let device pointer point to host-pointer target.
  ====================================================================
  
  _Description_
*************** _Description_
*** 5049,5059 ****
       device-pointer address to pointing to the corresponding host data.
  
  _C/C++_:
!      _Prototype_:   'void acc_detach(h_void **ptr_addr);'
!      _Prototype_:   'void acc_detach_async(h_void **ptr_addr, int async);'
!      _Prototype_:   'void acc_detach_finalize(h_void **ptr_addr);'
!      _Prototype_:   'void acc_detach_finalize_async(h_void **ptr_addr, int
!                     async);'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 5049,5059 ----
       device-pointer address to pointing to the corresponding host data.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_detach(h_void **ptr_addr);’
!      _Prototype_:   ‘void acc_detach_async(h_void **ptr_addr, int async);’
!      _Prototype_:   ‘void acc_detach_finalize(h_void **ptr_addr);’
!      _Prototype_:   ‘void acc_detach_finalize_async(h_void **ptr_addr, int
!                     async);’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5062,5068 ****
  
  File: libgomp.info,  Node: acc_get_current_cuda_device,  Next: acc_get_current_cuda_context,  Prev: acc_detach,  Up: OpenACC Runtime Library Routines
  
! 6.35 'acc_get_current_cuda_device' - Get CUDA device handle.
  ============================================================
  
  _Description_
--- 5062,5068 ----
  
  File: libgomp.info,  Node: acc_get_current_cuda_device,  Next: acc_get_current_cuda_context,  Prev: acc_detach,  Up: OpenACC Runtime Library Routines
  
! 6.35 ‘acc_get_current_cuda_device’ - Get CUDA device handle.
  ============================================================
  
  _Description_
*************** _Description_
*** 5070,5076 ****
       same as used by the CUDA Runtime or Driver API's.
  
  _C/C++_:
!      _Prototype_:   'void *acc_get_current_cuda_device(void);'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 5070,5076 ----
       same as used by the CUDA Runtime or Driver API's.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_get_current_cuda_device(void);’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5079,5085 ****
  
  File: libgomp.info,  Node: acc_get_current_cuda_context,  Next: acc_get_cuda_stream,  Prev: acc_get_current_cuda_device,  Up: OpenACC Runtime Library Routines
  
! 6.36 'acc_get_current_cuda_context' - Get CUDA context handle.
  ==============================================================
  
  _Description_
--- 5079,5085 ----
  
  File: libgomp.info,  Node: acc_get_current_cuda_context,  Next: acc_get_cuda_stream,  Prev: acc_get_current_cuda_device,  Up: OpenACC Runtime Library Routines
  
! 6.36 ‘acc_get_current_cuda_context’ - Get CUDA context handle.
  ==============================================================
  
  _Description_
*************** _Description_
*** 5087,5093 ****
       same as used by the CUDA Runtime or Driver API's.
  
  _C/C++_:
!      _Prototype_:   'void *acc_get_current_cuda_context(void);'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 5087,5093 ----
       same as used by the CUDA Runtime or Driver API's.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_get_current_cuda_context(void);’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5096,5102 ****
  
  File: libgomp.info,  Node: acc_get_cuda_stream,  Next: acc_set_cuda_stream,  Prev: acc_get_current_cuda_context,  Up: OpenACC Runtime Library Routines
  
! 6.37 'acc_get_cuda_stream' - Get CUDA stream handle.
  ====================================================
  
  _Description_
--- 5096,5102 ----
  
  File: libgomp.info,  Node: acc_get_cuda_stream,  Next: acc_set_cuda_stream,  Prev: acc_get_current_cuda_context,  Up: OpenACC Runtime Library Routines
  
! 6.37 ‘acc_get_cuda_stream’ - Get CUDA stream handle.
  ====================================================
  
  _Description_
*************** _Description_
*** 5105,5111 ****
       API's.
  
  _C/C++_:
!      _Prototype_:   'void *acc_get_cuda_stream(int async);'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 5105,5111 ----
       API's.
  
  _C/C++_:
!      _Prototype_:   ‘void *acc_get_cuda_stream(int async);’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5114,5120 ****
  
  File: libgomp.info,  Node: acc_set_cuda_stream,  Next: acc_prof_register,  Prev: acc_get_cuda_stream,  Up: OpenACC Runtime Library Routines
  
! 6.38 'acc_set_cuda_stream' - Set CUDA stream handle.
  ====================================================
  
  _Description_
--- 5114,5120 ----
  
  File: libgomp.info,  Node: acc_set_cuda_stream,  Next: acc_prof_register,  Prev: acc_get_cuda_stream,  Up: OpenACC Runtime Library Routines
  
! 6.38 ‘acc_set_cuda_stream’ - Set CUDA stream handle.
  ====================================================
  
  _Description_
*************** _Description_
*** 5122,5133 ****
       the queue ASYNC.
  
       This cannot be used to change the stream handle associated with
!      'acc_async_sync'.
  
       The return value is not specified.
  
  _C/C++_:
!      _Prototype_:   'int acc_set_cuda_stream(int async, void *stream);'
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
--- 5122,5133 ----
       the queue ASYNC.
  
       This cannot be used to change the stream handle associated with
!      ‘acc_async_sync’.
  
       The return value is not specified.
  
  _C/C++_:
!      _Prototype_:   ‘int acc_set_cuda_stream(int async, void *stream);’
  
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section
*************** _Reference_:
*** 5136,5150 ****
  
  File: libgomp.info,  Node: acc_prof_register,  Next: acc_prof_unregister,  Prev: acc_set_cuda_stream,  Up: OpenACC Runtime Library Routines
  
! 6.39 'acc_prof_register' - Register callbacks.
  ==============================================
  
  _Description_:
       This function registers callbacks.
  
  _C/C++_:
!      _Prototype_:   'void acc_prof_register (acc_event_t, acc_prof_callback,
!                     acc_register_t);'
  
  _See also_:
       *note OpenACC Profiling Interface::
--- 5136,5150 ----
  
  File: libgomp.info,  Node: acc_prof_register,  Next: acc_prof_unregister,  Prev: acc_set_cuda_stream,  Up: OpenACC Runtime Library Routines
  
! 6.39 ‘acc_prof_register’ - Register callbacks.
  ==============================================
  
  _Description_:
       This function registers callbacks.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_prof_register (acc_event_t, acc_prof_callback,
!                     acc_register_t);’
  
  _See also_:
       *note OpenACC Profiling Interface::
*************** _Reference_:
*** 5155,5169 ****
  
  File: libgomp.info,  Node: acc_prof_unregister,  Next: acc_prof_lookup,  Prev: acc_prof_register,  Up: OpenACC Runtime Library Routines
  
! 6.40 'acc_prof_unregister' - Unregister callbacks.
  ==================================================
  
  _Description_:
       This function unregisters callbacks.
  
  _C/C++_:
!      _Prototype_:   'void acc_prof_unregister (acc_event_t,
!                     acc_prof_callback, acc_register_t);'
  
  _See also_:
       *note OpenACC Profiling Interface::
--- 5155,5169 ----
  
  File: libgomp.info,  Node: acc_prof_unregister,  Next: acc_prof_lookup,  Prev: acc_prof_register,  Up: OpenACC Runtime Library Routines
  
! 6.40 ‘acc_prof_unregister’ - Unregister callbacks.
  ==================================================
  
  _Description_:
       This function unregisters callbacks.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_prof_unregister (acc_event_t,
!                     acc_prof_callback, acc_register_t);’
  
  _See also_:
       *note OpenACC Profiling Interface::
*************** _Reference_:
*** 5174,5187 ****
  
  File: libgomp.info,  Node: acc_prof_lookup,  Next: acc_register_library,  Prev: acc_prof_unregister,  Up: OpenACC Runtime Library Routines
  
! 6.41 'acc_prof_lookup' - Obtain inquiry functions.
  ==================================================
  
  _Description_:
       Function to obtain inquiry functions.
  
  _C/C++_:
!      _Prototype_:   'acc_query_fn acc_prof_lookup (const char *);'
  
  _See also_:
       *note OpenACC Profiling Interface::
--- 5174,5187 ----
  
  File: libgomp.info,  Node: acc_prof_lookup,  Next: acc_register_library,  Prev: acc_prof_unregister,  Up: OpenACC Runtime Library Routines
  
! 6.41 ‘acc_prof_lookup’ - Obtain inquiry functions.
  ==================================================
  
  _Description_:
       Function to obtain inquiry functions.
  
  _C/C++_:
!      _Prototype_:   ‘acc_query_fn acc_prof_lookup (const char *);’
  
  _See also_:
       *note OpenACC Profiling Interface::
*************** _Reference_:
*** 5192,5206 ****
  
  File: libgomp.info,  Node: acc_register_library,  Prev: acc_prof_lookup,  Up: OpenACC Runtime Library Routines
  
! 6.42 'acc_register_library' - Library registration.
  ===================================================
  
  _Description_:
       Function for library registration.
  
  _C/C++_:
!      _Prototype_:   'void acc_register_library (acc_prof_reg, acc_prof_reg,
!                     acc_prof_lookup_func);'
  
  _See also_:
       *note OpenACC Profiling Interface::, *note ACC_PROFLIB::
--- 5192,5206 ----
  
  File: libgomp.info,  Node: acc_register_library,  Prev: acc_prof_lookup,  Up: OpenACC Runtime Library Routines
  
! 6.42 ‘acc_register_library’ - Library registration.
  ===================================================
  
  _Description_:
       Function for library registration.
  
  _C/C++_:
!      _Prototype_:   ‘void acc_register_library (acc_prof_reg, acc_prof_reg,
!                     acc_prof_lookup_func);’
  
  _See also_:
       *note OpenACC Profiling Interface::, *note ACC_PROFLIB::
*************** File: libgomp.info,  Node: OpenACC Envir
*** 5214,5222 ****
  7 OpenACC Environment Variables
  *******************************
  
! The variables 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM' are defined by
  section 4 of the OpenACC specification in version 2.0.  The variable
! 'ACC_PROFLIB' is defined by section 4 of the OpenACC specification in
  version 2.6.
  
  * Menu:
--- 5214,5222 ----
  7 OpenACC Environment Variables
  *******************************
  
! The variables ‘ACC_DEVICE_TYPE’ and ‘ACC_DEVICE_NUM’ are defined by
  section 4 of the OpenACC specification in version 2.0.  The variable
! ‘ACC_PROFLIB’ is defined by section 4 of the OpenACC specification in
  version 2.6.
  
  * Menu:
*************** version 2.6.
*** 5228,5234 ****
  
  File: libgomp.info,  Node: ACC_DEVICE_TYPE,  Next: ACC_DEVICE_NUM,  Up: OpenACC Environment Variables
  
! 7.1 'ACC_DEVICE_TYPE'
  =====================
  
  _Description_:
--- 5228,5234 ----
  
  File: libgomp.info,  Node: ACC_DEVICE_TYPE,  Next: ACC_DEVICE_NUM,  Up: OpenACC Environment Variables
  
! 7.1 ‘ACC_DEVICE_TYPE’
  =====================
  
  _Description_:
*************** _Description_:
*** 5237,5252 ****
       favoring a non-host device type.
  
       Supported values in GCC (if compiled in) are
!         * 'host'
!         * 'nvidia'
!         * 'radeon'
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section 4.1.
  
  
  File: libgomp.info,  Node: ACC_DEVICE_NUM,  Next: ACC_PROFLIB,  Prev: ACC_DEVICE_TYPE,  Up: OpenACC Environment Variables
  
! 7.2 'ACC_DEVICE_NUM'
  ====================
  
  _Description_:
--- 5237,5252 ----
       favoring a non-host device type.
  
       Supported values in GCC (if compiled in) are
!         • ‘host’
!         • ‘nvidia’
!         • ‘radeon’
  _Reference_:
       OpenACC specification v2.6 (https://www.openacc.org), section 4.1.
  
  
  File: libgomp.info,  Node: ACC_DEVICE_NUM,  Next: ACC_PROFLIB,  Prev: ACC_DEVICE_TYPE,  Up: OpenACC Environment Variables
  
! 7.2 ‘ACC_DEVICE_NUM’
  ====================
  
  _Description_:
*************** _Reference_:
*** 5259,5272 ****
  
  File: libgomp.info,  Node: ACC_PROFLIB,  Prev: ACC_DEVICE_NUM,  Up: OpenACC Environment Variables
  
! 7.3 'ACC_PROFLIB'
  =================
  
  _Description_:
       Semicolon-separated list of dynamic libraries that are loaded as
       profiling libraries.  Each library must provide at least the
!      'acc_register_library' routine.  Each library file is found as
!      described by the documentation of 'dlopen' of your operating
       system.
  _See also_:
       *note acc_register_library::, *note OpenACC Profiling Interface::
--- 5259,5272 ----
  
  File: libgomp.info,  Node: ACC_PROFLIB,  Prev: ACC_DEVICE_NUM,  Up: OpenACC Environment Variables
  
! 7.3 ‘ACC_PROFLIB’
  =================
  
  _Description_:
       Semicolon-separated list of dynamic libraries that are loaded as
       profiling libraries.  Each library must provide at least the
!      ‘acc_register_library’ routine.  Each library file is found as
!      described by the documentation of ‘dlopen’ of your operating
       system.
  _See also_:
       *note acc_register_library::, *note OpenACC Profiling Interface::
*************** File: libgomp.info,  Node: CUDA Streams
*** 5280,5286 ****
  8 CUDA Streams Usage
  ********************
  
! This applies to the 'nvptx' plugin only.
  
     The library provides elements that perform asynchronous movement of
  data and asynchronous operation of computing constructs.  This
--- 5280,5286 ----
  8 CUDA Streams Usage
  ********************
  
! This applies to the ‘nvptx’ plugin only.
  
     The library provides elements that perform asynchronous movement of
  data and asynchronous operation of computing constructs.  This
*************** streams(1).
*** 5289,5315 ****
  
     The primary means by that the asynchronous functionality is accessed
  is through the use of those OpenACC directives which make use of the
! 'async' and 'wait' clauses.  When the 'async' clause is first used with
! a directive, it creates a CUDA stream.  If an 'async-argument' is used
! with the 'async' clause, then the stream is associated with the
! specified 'async-argument'.
  
     Following the creation of an association between a CUDA stream and
! the 'async-argument' of an 'async' clause, both the 'wait' clause and
! the 'wait' directive can be used.  When either the clause or directive
  is used after stream creation, it creates a rendezvous point whereby
  execution waits until all operations associated with the
! 'async-argument', that is, stream, have completed.
  
     Normally, the management of the streams that are created as a result
! of using the 'async' clause, is done without any intervention by the
! caller.  This implies the association between the 'async-argument' and
  the CUDA stream is maintained for the lifetime of the program.  However,
  this association can be changed through the use of the library function
! 'acc_set_cuda_stream'.  When the function 'acc_set_cuda_stream' is
! called, the CUDA stream that was originally associated with the 'async'
  clause is destroyed.  Caution should be taken when changing the
! association as subsequent references to the 'async-argument' refer to a
  different CUDA stream.
  
     ---------- Footnotes ----------
--- 5289,5315 ----
  
     The primary means by that the asynchronous functionality is accessed
  is through the use of those OpenACC directives which make use of the
! ‘async’ and ‘wait’ clauses.  When the ‘async’ clause is first used with
! a directive, it creates a CUDA stream.  If an ‘async-argument’ is used
! with the ‘async’ clause, then the stream is associated with the
! specified ‘async-argument’.
  
     Following the creation of an association between a CUDA stream and
! the ‘async-argument’ of an ‘async’ clause, both the ‘wait’ clause and
! the ‘wait’ directive can be used.  When either the clause or directive
  is used after stream creation, it creates a rendezvous point whereby
  execution waits until all operations associated with the
! ‘async-argument’, that is, stream, have completed.
  
     Normally, the management of the streams that are created as a result
! of using the ‘async’ clause, is done without any intervention by the
! caller.  This implies the association between the ‘async-argument’ and
  the CUDA stream is maintained for the lifetime of the program.  However,
  this association can be changed through the use of the library function
! ‘acc_set_cuda_stream’.  When the function ‘acc_set_cuda_stream’ is
! called, the CUDA stream that was originally associated with the ‘async’
  clause is destroyed.  Caution should be taken when changing the
! association as subsequent references to the ‘async-argument’ refer to a
  different CUDA stream.
  
     ---------- Footnotes ----------
*************** library and the CUBLAS and Runtime libra
*** 5337,5343 ****
  
  In this first use case (see below), a function in the CUBLAS library is
  called prior to any of the functions in the OpenACC library.  More
! specifically, the function 'cublasCreate()'.
  
     When invoked, the function initializes the library and allocates the
  hardware resources on the host and the device on behalf of the caller.
--- 5337,5343 ----
  
  In this first use case (see below), a function in the CUBLAS library is
  called prior to any of the functions in the OpenACC library.  More
! specifically, the function ‘cublasCreate()’.
  
     When invoked, the function initializes the library and allocates the
  hardware resources on the host and the device on behalf of the caller.
*************** hardware resources on the host.
*** 5350,5364 ****
  
     Prior to calling the OpenACC function that initializes the library
  and allocate the host hardware resources, you need to acquire the device
! number that was allocated during the call to 'cublasCreate()'.  The
! invoking of the runtime library function 'cudaGetDevice()' accomplishes
  this.  Once acquired, the device number is passed along with the device
  type as parameters to the OpenACC library function
! 'acc_set_device_num()'.
  
!    Once the call to 'acc_set_device_num()' has completed, the OpenACC
  library uses the context that was created during the call to
! 'cublasCreate()'.  In other words, both libraries share the same
  context.
  
           /* Create the handle */
--- 5350,5364 ----
  
     Prior to calling the OpenACC function that initializes the library
  and allocate the host hardware resources, you need to acquire the device
! number that was allocated during the call to ‘cublasCreate()’.  The
! invoking of the runtime library function ‘cudaGetDevice()’ accomplishes
  this.  Once acquired, the device number is passed along with the device
  type as parameters to the OpenACC library function
! ‘acc_set_device_num()’.
  
!    Once the call to ‘acc_set_device_num()’ has completed, the OpenACC
  library uses the context that was created during the call to
! ‘cublasCreate()’.  In other words, both libraries share the same
  context.
  
           /* Create the handle */
*************** context.
*** 5387,5411 ****
  
  In this second use case (see below), a function in the OpenACC library
  is called prior to any of the functions in the CUBLAS library.  More
! specifically, the function 'acc_set_device_num()'.
  
!    In the use case presented here, the function 'acc_set_device_num()'
  is used to both initialize the OpenACC library and allocate the hardware
  resources on the host and the device.  In the call to the function, the
  call parameters specify which device to use and what device type to use,
! i.e., 'acc_device_nvidia'.  It should be noted that this is but one
  method to initialize the OpenACC library and allocate the appropriate
  hardware resources.  Other methods are available through the use of
  environment variables and these is discussed in the next section.
  
!    Once the call to 'acc_set_device_num()' has completed, other OpenACC
  functions can be called as seen with multiple calls being made to
! 'acc_copyin()'.  In addition, calls can be made to functions in the
! CUBLAS library.  In the use case a call to 'cublasCreate()' is made
! subsequent to the calls to 'acc_copyin()'.  As seen in the previous use
! case, a call to 'cublasCreate()' initializes the CUBLAS library and
  allocates the hardware resources on the host and the device.  However,
! since the device has already been allocated, 'cublasCreate()' only
  initializes the CUBLAS library and allocates the appropriate hardware
  resources on the host.  The context that was created as part of the
  OpenACC initialization is shared with the CUBLAS library, similarly to
--- 5387,5411 ----
  
  In this second use case (see below), a function in the OpenACC library
  is called prior to any of the functions in the CUBLAS library.  More
! specifically, the function ‘acc_set_device_num()’.
  
!    In the use case presented here, the function ‘acc_set_device_num()’
  is used to both initialize the OpenACC library and allocate the hardware
  resources on the host and the device.  In the call to the function, the
  call parameters specify which device to use and what device type to use,
! i.e., ‘acc_device_nvidia’.  It should be noted that this is but one
  method to initialize the OpenACC library and allocate the appropriate
  hardware resources.  Other methods are available through the use of
  environment variables and these is discussed in the next section.
  
!    Once the call to ‘acc_set_device_num()’ has completed, other OpenACC
  functions can be called as seen with multiple calls being made to
! ‘acc_copyin()’.  In addition, calls can be made to functions in the
! CUBLAS library.  In the use case a call to ‘cublasCreate()’ is made
! subsequent to the calls to ‘acc_copyin()’.  As seen in the previous use
! case, a call to ‘cublasCreate()’ initializes the CUBLAS library and
  allocates the hardware resources on the host and the device.  However,
! since the device has already been allocated, ‘cublasCreate()’ only
  initializes the CUBLAS library and allocates the appropriate hardware
  resources on the host.  The context that was created as part of the
  OpenACC initialization is shared with the CUBLAS library, similarly to
*************** the first use case.
*** 5457,5473 ****
  
  There are two environment variables associated with the OpenACC library
  that may be used to control the device type and device number:
! 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM', respectively.  These two
  environment variables can be used as an alternative to calling
! 'acc_set_device_num()'.  As seen in the second use case, the device type
! and device number were specified using 'acc_set_device_num()'.  If
  however, the aforementioned environment variables were set, then the
! call to 'acc_set_device_num()' would not be required.
  
     The use of the environment variables is only relevant when an OpenACC
! function is called prior to a call to 'cudaCreate()'.  If 'cudaCreate()'
  is called prior to a call to an OpenACC function, then you must call
! 'acc_set_device_num()'(2)
  
     ---------- Footnotes ----------
  
--- 5457,5473 ----
  
  There are two environment variables associated with the OpenACC library
  that may be used to control the device type and device number:
! ‘ACC_DEVICE_TYPE’ and ‘ACC_DEVICE_NUM’, respectively.  These two
  environment variables can be used as an alternative to calling
! ‘acc_set_device_num()’.  As seen in the second use case, the device type
! and device number were specified using ‘acc_set_device_num()’.  If
  however, the aforementioned environment variables were set, then the
! call to ‘acc_set_device_num()’ would not be required.
  
     The use of the environment variables is only relevant when an OpenACC
! function is called prior to a call to ‘cudaCreate()’.  If ‘cudaCreate()’
  is called prior to a call to an OpenACC function, then you must call
! ‘acc_set_device_num()’(2)
  
     ---------- Footnotes ----------
  
*************** is called prior to a call to an OpenACC
*** 5476,5483 ****
  Interoperability", in "CUDA Driver API", TRM-06703-001, Version 5.5, for
  additional information on library interoperability.
  
!    (2) More complete information about 'ACC_DEVICE_TYPE' and
! 'ACC_DEVICE_NUM' can be found in sections 4.1 and 4.2 of the OpenACC
  (https://www.openacc.org) Application Programming Interface”, Version
  2.6.
  
--- 5476,5483 ----
  Interoperability", in "CUDA Driver API", TRM-06703-001, Version 5.5, for
  additional information on library interoperability.
  
!    (2) More complete information about ‘ACC_DEVICE_TYPE’ and
! ‘ACC_DEVICE_NUM’ can be found in sections 4.1 and 4.2 of the OpenACC
  (https://www.openacc.org) Application Programming Interface”, Version
  2.6.
  
*************** performance is impacted to some degree o
*** 5504,5735 ****
  enabled: for example, because of the _runtime_ (libgomp) calling into a
  third-party _library_ for every event that has been registered.
  
!    We're not yet accounting for the fact that 'OpenACC events may occur
! during event processing'.  We just handle one case specially, as
! required by CUDA 9.0 'nvprof', that 'acc_get_device_type' (*note
! acc_get_device_type::)) may be called from 'acc_ev_device_init_start',
! 'acc_ev_device_init_end' callbacks.
  
     We're not yet implementing initialization via a
! 'acc_register_library' function that is either statically linked in, or
! dynamically via 'LD_PRELOAD'.  Initialization via 'acc_register_library'
! functions dynamically loaded via the 'ACC_PROFLIB' environment variable
! does work, as does directly calling 'acc_prof_register',
! 'acc_prof_unregister', 'acc_prof_lookup'.
  
     As currently there are no inquiry functions defined, calls to
! 'acc_prof_lookup' always returns 'NULL'.
  
     There aren't separate _start_, _stop_ events defined for the event
! types 'acc_ev_create', 'acc_ev_delete', 'acc_ev_alloc', 'acc_ev_free'.
  It's not clear if these should be triggered before or after the actual
  device-specific call is made.  We trigger them after.
  
     Remarks about data provided to callbacks:
  
! 'acc_prof_info.event_type'
       It's not clear if for _nested_ event callbacks (for example,
!      'acc_ev_enqueue_launch_start' as part of a parent compute
       construct), this should be set for the nested event
!      ('acc_ev_enqueue_launch_start'), or if the value of the parent
!      construct should remain ('acc_ev_compute_construct_start').  In
       this implementation, the value generally corresponds to the
       innermost nested event type.
  
! 'acc_prof_info.device_type'
  
!         * For 'acc_ev_compute_construct_start', and in presence of an
!           'if' clause with _false_ argument, this still refers to the
            offloading device type.  It's not clear if that's the expected
            behavior.
  
!         * Complementary to the item before, for
!           'acc_ev_compute_construct_end', this is set to
!           'acc_device_host' in presence of an 'if' clause with _false_
            argument.  It's not clear if that's the expected behavior.
  
! 'acc_prof_info.thread_id'
!      Always '-1'; not yet implemented.
  
! 'acc_prof_info.async'
  
!         * Not yet implemented correctly for
!           'acc_ev_compute_construct_start'.
  
!         * In a compute construct, for host-fallback
!           execution/'acc_device_host' it always is 'acc_async_sync'.  It
            is unclear if that is the expected behavior.
  
!         * For 'acc_ev_device_init_start' and 'acc_ev_device_init_end',
!           it will always be 'acc_async_sync'.  It is unclear if that is
            the expected behavior.
  
! 'acc_prof_info.async_queue'
!      There is no 'limited number of asynchronous queues' in libgomp.
!      This always has the same value as 'acc_prof_info.async'.
  
! 'acc_prof_info.src_file'
!      Always 'NULL'; not yet implemented.
  
! 'acc_prof_info.func_name'
!      Always 'NULL'; not yet implemented.
  
! 'acc_prof_info.line_no'
!      Always '-1'; not yet implemented.
  
! 'acc_prof_info.end_line_no'
!      Always '-1'; not yet implemented.
  
! 'acc_prof_info.func_line_no'
!      Always '-1'; not yet implemented.
  
! 'acc_prof_info.func_end_line_no'
!      Always '-1'; not yet implemented.
  
! 'acc_event_info.event_type', 'acc_event_info.*.event_type'
!      Relating to 'acc_prof_info.event_type' discussed above, in this
       implementation, this will always be the same value as
!      'acc_prof_info.event_type'.
  
! 'acc_event_info.*.parent_construct'
  
!         * Will be 'acc_construct_parallel' for all OpenACC compute
            constructs as well as many OpenACC Runtime API calls; should
            be the one matching the actual construct, or
!           'acc_construct_runtime_api', respectively.
  
!         * Will be 'acc_construct_enter_data' or
!           'acc_construct_exit_data' when processing variable mappings
            specified in OpenACC _declare_ directives; should be
!           'acc_construct_declare'.
  
!         * For implicit 'acc_ev_device_init_start',
!           'acc_ev_device_init_end', and explicit as well as implicit
!           'acc_ev_alloc', 'acc_ev_free', 'acc_ev_enqueue_upload_start',
!           'acc_ev_enqueue_upload_end', 'acc_ev_enqueue_download_start',
!           and 'acc_ev_enqueue_download_end', will be
!           'acc_construct_parallel'; should reflect the real parent
            construct.
  
! 'acc_event_info.*.implicit'
!      For 'acc_ev_alloc', 'acc_ev_free', 'acc_ev_enqueue_upload_start',
!      'acc_ev_enqueue_upload_end', 'acc_ev_enqueue_download_start', and
!      'acc_ev_enqueue_download_end', this currently will be '1' also for
       explicit usage.
  
! 'acc_event_info.data_event.var_name'
!      Always 'NULL'; not yet implemented.
  
! 'acc_event_info.data_event.host_ptr'
!      For 'acc_ev_alloc', and 'acc_ev_free', this is always 'NULL'.
  
! 'typedef union acc_api_info'
!      ... as printed in '5.2.3. Third Argument: API-Specific
!      Information'.  This should obviously be 'typedef _struct_
!      acc_api_info'.
  
! 'acc_api_info.device_api'
       Possibly not yet implemented correctly for
!      'acc_ev_compute_construct_start', 'acc_ev_device_init_start',
!      'acc_ev_device_init_end': will always be 'acc_device_api_none' for
!      these event types.  For 'acc_ev_enter_data_start', it will be
!      'acc_device_api_none' in some cases.
  
! 'acc_api_info.device_type'
!      Always the same as 'acc_prof_info.device_type'.
  
! 'acc_api_info.vendor'
!      Always '-1'; not yet implemented.
  
! 'acc_api_info.device_handle'
!      Always 'NULL'; not yet implemented.
  
! 'acc_api_info.context_handle'
!      Always 'NULL'; not yet implemented.
  
! 'acc_api_info.async_handle'
!      Always 'NULL'; not yet implemented.
  
     Remarks about certain event types:
  
! 'acc_ev_device_init_start', 'acc_ev_device_init_end'
  
!         * When a compute construct triggers implicit
!           'acc_ev_device_init_start' and 'acc_ev_device_init_end'
            events, they currently aren't _nested within_ the
!           corresponding 'acc_ev_compute_construct_start' and
!           'acc_ev_compute_construct_end', but they're currently observed
!           _before_ 'acc_ev_compute_construct_start'.  It's not clear
            what to do: the standard asks us provide a lot of details to
!           the 'acc_ev_compute_construct_start' callback, without
            (implicitly) initializing a device before?
  
!         * Callbacks for these event types will not be invoked for calls
!           to the 'acc_set_device_type' and 'acc_set_device_num'
            functions.  It's not clear if they should be.
  
! 'acc_ev_enter_data_start', 'acc_ev_enter_data_end', 'acc_ev_exit_data_start', 'acc_ev_exit_data_end'
  
!         * Callbacks for these event types will also be invoked for
            OpenACC _host_data_ constructs.  It's not clear if they should
            be.
  
!         * Callbacks for these event types will also be invoked when
            processing variable mappings specified in OpenACC _declare_
            directives.  It's not clear if they should be.
  
     Callbacks for the following event types will be invoked, but dispatch
  and information provided therein has not yet been thoroughly reviewed:
  
!    * 'acc_ev_alloc'
!    * 'acc_ev_free'
!    * 'acc_ev_update_start', 'acc_ev_update_end'
!    * 'acc_ev_enqueue_upload_start', 'acc_ev_enqueue_upload_end'
!    * 'acc_ev_enqueue_download_start', 'acc_ev_enqueue_download_end'
  
     During device initialization, and finalization, respectively,
  callbacks for the following event types will not yet be invoked:
  
!    * 'acc_ev_alloc'
!    * 'acc_ev_free'
  
     Callbacks for the following event types have not yet been
  implemented, so currently won't be invoked:
  
!    * 'acc_ev_device_shutdown_start', 'acc_ev_device_shutdown_end'
!    * 'acc_ev_runtime_shutdown'
!    * 'acc_ev_create', 'acc_ev_delete'
!    * 'acc_ev_wait_start', 'acc_ev_wait_end'
  
     For the following runtime library functions, not all expected
  callbacks will be invoked (mostly concerning implicit device
  initialization):
  
!    * 'acc_get_num_devices'
!    * 'acc_set_device_type'
!    * 'acc_get_device_type'
!    * 'acc_set_device_num'
!    * 'acc_get_device_num'
!    * 'acc_init'
!    * 'acc_shutdown'
  
     Aside from implicit device initialization, for the following runtime
  library functions, no callbacks will be invoked for shared-memory
  offloading devices (it's not clear if they should be):
  
!    * 'acc_malloc'
!    * 'acc_free'
!    * 'acc_copyin', 'acc_present_or_copyin', 'acc_copyin_async'
!    * 'acc_create', 'acc_present_or_create', 'acc_create_async'
!    * 'acc_copyout', 'acc_copyout_async', 'acc_copyout_finalize',
!      'acc_copyout_finalize_async'
!    * 'acc_delete', 'acc_delete_async', 'acc_delete_finalize',
!      'acc_delete_finalize_async'
!    * 'acc_update_device', 'acc_update_device_async'
!    * 'acc_update_self', 'acc_update_self_async'
!    * 'acc_map_data', 'acc_unmap_data'
!    * 'acc_memcpy_to_device', 'acc_memcpy_to_device_async'
!    * 'acc_memcpy_from_device', 'acc_memcpy_from_device_async'
  
  
  File: libgomp.info,  Node: OpenMP-Implementation Specifics,  Next: Offload-Target Specifics,  Prev: OpenACC Profiling Interface,  Up: Top
--- 5504,5735 ----
  enabled: for example, because of the _runtime_ (libgomp) calling into a
  third-party _library_ for every event that has been registered.
  
!    We're not yet accounting for the fact that ‘OpenACC events may occur
! during event processing’.  We just handle one case specially, as
! required by CUDA 9.0 ‘nvprof’, that ‘acc_get_device_type’ (*note
! acc_get_device_type::)) may be called from ‘acc_ev_device_init_start’,
! ‘acc_ev_device_init_end’ callbacks.
  
     We're not yet implementing initialization via a
! ‘acc_register_library’ function that is either statically linked in, or
! dynamically via ‘LD_PRELOAD’.  Initialization via ‘acc_register_library’
! functions dynamically loaded via the ‘ACC_PROFLIB’ environment variable
! does work, as does directly calling ‘acc_prof_register’,
! ‘acc_prof_unregister’, ‘acc_prof_lookup’.
  
     As currently there are no inquiry functions defined, calls to
! ‘acc_prof_lookup’ always returns ‘NULL’.
  
     There aren't separate _start_, _stop_ events defined for the event
! types ‘acc_ev_create’, ‘acc_ev_delete’, ‘acc_ev_alloc’, ‘acc_ev_free’.
  It's not clear if these should be triggered before or after the actual
  device-specific call is made.  We trigger them after.
  
     Remarks about data provided to callbacks:
  
! ‘acc_prof_info.event_type’
       It's not clear if for _nested_ event callbacks (for example,
!      ‘acc_ev_enqueue_launch_start’ as part of a parent compute
       construct), this should be set for the nested event
!      (‘acc_ev_enqueue_launch_start’), or if the value of the parent
!      construct should remain (‘acc_ev_compute_construct_start’).  In
       this implementation, the value generally corresponds to the
       innermost nested event type.
  
! ‘acc_prof_info.device_type’
  
!         • For ‘acc_ev_compute_construct_start’, and in presence of an
!           ‘if’ clause with _false_ argument, this still refers to the
            offloading device type.  It's not clear if that's the expected
            behavior.
  
!         • Complementary to the item before, for
!           ‘acc_ev_compute_construct_end’, this is set to
!           ‘acc_device_host’ in presence of an ‘if’ clause with _false_
            argument.  It's not clear if that's the expected behavior.
  
! ‘acc_prof_info.thread_id’
!      Always ‘-1’; not yet implemented.
  
! ‘acc_prof_info.async’
  
!         • Not yet implemented correctly for
!           ‘acc_ev_compute_construct_start’.
  
!         • In a compute construct, for host-fallback
!           execution/‘acc_device_host’ it always is ‘acc_async_sync’.  It
            is unclear if that is the expected behavior.
  
!         • For ‘acc_ev_device_init_start’ and ‘acc_ev_device_init_end’,
!           it will always be ‘acc_async_sync’.  It is unclear if that is
            the expected behavior.
  
! ‘acc_prof_info.async_queue’
!      There is no ‘limited number of asynchronous queues’ in libgomp.
!      This always has the same value as ‘acc_prof_info.async’.
  
! ‘acc_prof_info.src_file’
!      Always ‘NULL’; not yet implemented.
  
! ‘acc_prof_info.func_name’
!      Always ‘NULL’; not yet implemented.
  
! ‘acc_prof_info.line_no’
!      Always ‘-1’; not yet implemented.
  
! ‘acc_prof_info.end_line_no’
!      Always ‘-1’; not yet implemented.
  
! ‘acc_prof_info.func_line_no’
!      Always ‘-1’; not yet implemented.
  
! ‘acc_prof_info.func_end_line_no’
!      Always ‘-1’; not yet implemented.
  
! ‘acc_event_info.event_type’, ‘acc_event_info.*.event_type’
!      Relating to ‘acc_prof_info.event_type’ discussed above, in this
       implementation, this will always be the same value as
!      ‘acc_prof_info.event_type’.
  
! ‘acc_event_info.*.parent_construct’
  
!         • Will be ‘acc_construct_parallel’ for all OpenACC compute
            constructs as well as many OpenACC Runtime API calls; should
            be the one matching the actual construct, or
!           ‘acc_construct_runtime_api’, respectively.
  
!         • Will be ‘acc_construct_enter_data’ or
!           ‘acc_construct_exit_data’ when processing variable mappings
            specified in OpenACC _declare_ directives; should be
!           ‘acc_construct_declare’.
  
!         • For implicit ‘acc_ev_device_init_start’,
!           ‘acc_ev_device_init_end’, and explicit as well as implicit
!           ‘acc_ev_alloc’, ‘acc_ev_free’, ‘acc_ev_enqueue_upload_start’,
!           ‘acc_ev_enqueue_upload_end’, ‘acc_ev_enqueue_download_start’,
!           and ‘acc_ev_enqueue_download_end’, will be
!           ‘acc_construct_parallel’; should reflect the real parent
            construct.
  
! ‘acc_event_info.*.implicit’
!      For ‘acc_ev_alloc’, ‘acc_ev_free’, ‘acc_ev_enqueue_upload_start’,
!      ‘acc_ev_enqueue_upload_end’, ‘acc_ev_enqueue_download_start’, and
!      ‘acc_ev_enqueue_download_end’, this currently will be ‘1’ also for
       explicit usage.
  
! ‘acc_event_info.data_event.var_name’
!      Always ‘NULL’; not yet implemented.
  
! ‘acc_event_info.data_event.host_ptr’
!      For ‘acc_ev_alloc’, and ‘acc_ev_free’, this is always ‘NULL’.
  
! ‘typedef union acc_api_info’
!      ... as printed in ‘5.2.3. Third Argument: API-Specific
!      Information’.  This should obviously be ‘typedef _struct_
!      acc_api_info’.
  
! ‘acc_api_info.device_api’
       Possibly not yet implemented correctly for
!      ‘acc_ev_compute_construct_start’, ‘acc_ev_device_init_start’,
!      ‘acc_ev_device_init_end’: will always be ‘acc_device_api_none’ for
!      these event types.  For ‘acc_ev_enter_data_start’, it will be
!      ‘acc_device_api_none’ in some cases.
  
! ‘acc_api_info.device_type’
!      Always the same as ‘acc_prof_info.device_type’.
  
! ‘acc_api_info.vendor’
!      Always ‘-1’; not yet implemented.
  
! ‘acc_api_info.device_handle’
!      Always ‘NULL’; not yet implemented.
  
! ‘acc_api_info.context_handle’
!      Always ‘NULL’; not yet implemented.
  
! ‘acc_api_info.async_handle’
!      Always ‘NULL’; not yet implemented.
  
     Remarks about certain event types:
  
! ‘acc_ev_device_init_start’, ‘acc_ev_device_init_end’
  
!         • When a compute construct triggers implicit
!           ‘acc_ev_device_init_start’ and ‘acc_ev_device_init_end’
            events, they currently aren't _nested within_ the
!           corresponding ‘acc_ev_compute_construct_start’ and
!           ‘acc_ev_compute_construct_end’, but they're currently observed
!           _before_ ‘acc_ev_compute_construct_start’.  It's not clear
            what to do: the standard asks us provide a lot of details to
!           the ‘acc_ev_compute_construct_start’ callback, without
            (implicitly) initializing a device before?
  
!         • Callbacks for these event types will not be invoked for calls
!           to the ‘acc_set_device_type’ and ‘acc_set_device_num’
            functions.  It's not clear if they should be.
  
! ‘acc_ev_enter_data_start’, ‘acc_ev_enter_data_end’, ‘acc_ev_exit_data_start’, ‘acc_ev_exit_data_end’
  
!         • Callbacks for these event types will also be invoked for
            OpenACC _host_data_ constructs.  It's not clear if they should
            be.
  
!         • Callbacks for these event types will also be invoked when
            processing variable mappings specified in OpenACC _declare_
            directives.  It's not clear if they should be.
  
     Callbacks for the following event types will be invoked, but dispatch
  and information provided therein has not yet been thoroughly reviewed:
  
!    • ‘acc_ev_alloc’
!    • ‘acc_ev_free’
!    • ‘acc_ev_update_start’, ‘acc_ev_update_end’
!    • ‘acc_ev_enqueue_upload_start’, ‘acc_ev_enqueue_upload_end’
!    • ‘acc_ev_enqueue_download_start’, ‘acc_ev_enqueue_download_end’
  
     During device initialization, and finalization, respectively,
  callbacks for the following event types will not yet be invoked:
  
!    • ‘acc_ev_alloc’
!    • ‘acc_ev_free’
  
     Callbacks for the following event types have not yet been
  implemented, so currently won't be invoked:
  
!    • ‘acc_ev_device_shutdown_start’, ‘acc_ev_device_shutdown_end’
!    • ‘acc_ev_runtime_shutdown’
!    • ‘acc_ev_create’, ‘acc_ev_delete’
!    • ‘acc_ev_wait_start’, ‘acc_ev_wait_end’
  
     For the following runtime library functions, not all expected
  callbacks will be invoked (mostly concerning implicit device
  initialization):
  
!    • ‘acc_get_num_devices’
!    • ‘acc_set_device_type’
!    • ‘acc_get_device_type’
!    • ‘acc_set_device_num’
!    • ‘acc_get_device_num’
!    • ‘acc_init’
!    • ‘acc_shutdown’
  
     Aside from implicit device initialization, for the following runtime
  library functions, no callbacks will be invoked for shared-memory
  offloading devices (it's not clear if they should be):
  
!    • ‘acc_malloc’
!    • ‘acc_free’
!    • ‘acc_copyin’, ‘acc_present_or_copyin’, ‘acc_copyin_async’
!    • ‘acc_create’, ‘acc_present_or_create’, ‘acc_create_async’
!    • ‘acc_copyout’, ‘acc_copyout_async’, ‘acc_copyout_finalize’,
!      ‘acc_copyout_finalize_async’
!    • ‘acc_delete’, ‘acc_delete_async’, ‘acc_delete_finalize’,
!      ‘acc_delete_finalize_async’
!    • ‘acc_update_device’, ‘acc_update_device_async’
!    • ‘acc_update_self’, ‘acc_update_self_async’
!    • ‘acc_map_data’, ‘acc_unmap_data’
!    • ‘acc_memcpy_to_device’, ‘acc_memcpy_to_device_async’
!    • ‘acc_memcpy_from_device’, ‘acc_memcpy_from_device_async’
  
  
  File: libgomp.info,  Node: OpenMP-Implementation Specifics,  Next: Offload-Target Specifics,  Prev: OpenACC Profiling Interface,  Up: Top
*************** File: libgomp.info,  Node: OpenMP Contex
*** 5773,5800 ****
  11.2 OpenMP Context Selectors
  =============================
  
! 'vendor' is always 'gnu'.  References are to the GCC manual.
  
!    For the host compiler, 'kind' always matches 'host'; for the
! offloading architectures AMD GCN and Nvidia PTX, 'kind' always matches
! 'gpu'.  For the x86 family of computers, AMD GCN and Nvidia PTX the
  following traits are supported in addition; while OpenMP is supported on
! more architectures, GCC currently does not match any 'arch' or 'isa'
  traits for those.
  
! 'arch'                                          'isa'
  -----------------------------------------------------------------------
! 'x86', 'x86_64', 'i386', 'i486', 'i586',        See '-m...' flags in
! 'i686', 'ia32'                                  "x86 Options"
!                                                 (without '-m')
! 'amdgcn', 'gcn'                                 See '-march=' in
                                                  "AMD GCN Options"(1)
! 'nvptx', 'nvptx64'                              See '-march=' in
                                                  "Nvidia PTX Options"
  
     ---------- Footnotes ----------
  
!    (1) Additionally, 'gfx803' is supported as an alias for 'fiji'.
  
  
  File: libgomp.info,  Node: Memory allocation,  Prev: OpenMP Context Selectors,  Up: OpenMP-Implementation Specifics
--- 5773,5800 ----
  11.2 OpenMP Context Selectors
  =============================
  
! ‘vendor’ is always ‘gnu’.  References are to the GCC manual.
  
!    For the host compiler, ‘kind’ always matches ‘host’; for the
! offloading architectures AMD GCN and Nvidia PTX, ‘kind’ always matches
! ‘gpu’.  For the x86 family of computers, AMD GCN and Nvidia PTX the
  following traits are supported in addition; while OpenMP is supported on
! more architectures, GCC currently does not match any ‘arch’ or ‘isa’
  traits for those.
  
! ‘arch’                                          ‘isa’
  -----------------------------------------------------------------------
! ‘x86’, ‘x86_64’, ‘i386’, ‘i486’, ‘i586’,        See ‘-m...’ flags in
! ‘i686’, ‘ia32’                                  "x86 Options"
!                                                 (without ‘-m’)
! ‘amdgcn’, ‘gcn’                                 See ‘-march=’ in
                                                  "AMD GCN Options"(1)
! ‘nvptx’, ‘nvptx64’                              See ‘-march=’ in
                                                  "Nvidia PTX Options"
  
     ---------- Footnotes ----------
  
!    (1) Additionally, ‘gfx803’ is supported as an alias for ‘fiji’.
  
  
  File: libgomp.info,  Node: Memory allocation,  Prev: OpenMP Context Selectors,  Up: OpenMP-Implementation Specifics
*************** File: libgomp.info,  Node: Memory alloca
*** 5804,5890 ****
  
  The description below applies to:
  
!    * Explicit use of the OpenMP API routines, see *note Memory
       Management Routines::.
!    * The 'allocate' clause, except when the 'allocator' modifier is a
!      constant expression with value 'omp_default_mem_alloc' and no
!      'align' modifier has been specified.  (In that case, the normal
!      'malloc' allocation is used.)
!    * Using the 'allocate' directive for automatic/stack variables,
!      except when the 'allocator' clause is a constant expression with
!      value 'omp_default_mem_alloc' and no 'align' clause has been
       specified.  (In that case, the normal allocation is used: stack
!      allocation and, sometimes for Fortran, also 'malloc' [depending on
!      flags such as '-fstack-arrays'].)
!    * Using the 'allocate' directive for variable in static memory is
       currently not supported (compile time error).
!    * In Fortran, the 'allocators' directive and the executable
!      'allocate' directive for Fortran pointers and allocatables is
       supported, but requires that files containing those directives has
!      to be compiled with '-fopenmp-allocators'.  Additionally, all files
       that might explicitly or implicitly deallocate memory allocated
       that way must also be compiled with that option.
  
     For the available predefined allocators and, as applicable, their
  associated predefined memory spaces and for the available traits and
  their default values, see *note OMP_ALLOCATOR::.  Predefined allocators
! without an associated memory space use the 'omp_default_mem_space'
  memory space.
  
     For the memory spaces, the following applies:
!    * 'omp_default_mem_space' is supported
!    * 'omp_const_mem_space' maps to 'omp_default_mem_space'
!    * 'omp_low_lat_mem_space' is only available on supported devices, and
!      maps to 'omp_default_mem_space' otherwise.
!    * 'omp_large_cap_mem_space' maps to 'omp_default_mem_space', unless
       the memkind library is available
!    * 'omp_high_bw_mem_space' maps to 'omp_default_mem_space', unless the
       memkind library is available
  
     On Linux systems, where the memkind library
! (https://github.com/memkind/memkind) ('libmemkind.so.0') is available at
  runtime, it is used when creating memory allocators requesting
  
!    * the memory space 'omp_high_bw_mem_space'
!    * the memory space 'omp_large_cap_mem_space'
!    * the 'partition' trait 'interleaved'; note that for
!      'omp_large_cap_mem_space' the allocation will not be interleaved
  
     On Linux systems, where the numa library
! (https://github.com/numactl/numactl) ('libnuma.so.1') is available at
  runtime, it used when creating memory allocators requesting
  
!    * the 'partition' trait 'nearest', except when both the libmemkind
       library is available and the memory space is either
!      'omp_large_cap_mem_space' or 'omp_high_bw_mem_space'
  
     Note that the numa library will round up the allocation size to a
  multiple of the system page size; therefore, consider using it only with
! large data or by sharing allocations via the 'pool_size' trait.
  Furthermore, the Linux kernel does not guarantee that an allocation will
  always be on the nearest NUMA node nor that after reallocation the same
  node will be used.  Note additionally that, on Linux, the default
  setting of the memory placement policy is to use the current node;
  therefore, unless the memory placement policy has been overridden, the
! 'partition' trait 'environment' (the default) will be effectively a
! 'nearest' allocation.
  
     Additional notes regarding the traits:
!    * The 'pinned' trait is supported on Linux hosts, but is subject to
!      the OS 'ulimit'/'rlimit' locked memory settings.
!    * The default for the 'pool_size' trait is no pool and for every
       (re)allocation the associated library routine is called, which
       might internally use a memory pool.
!    * For the 'partition' trait, the partition part size will be the same
!      as the requested size (i.e.  'interleaved' or 'blocked' has no
!      effect), except for 'interleaved' when the memkind library is
!      available.  Furthermore, for 'nearest' and unless the numa library
       is available, the memory might not be on the same NUMA node as
       thread that allocated the memory; on Linux, this is in particular
       the case when the memory placement policy is set to preferred.
!    * The 'access' trait has no effect such that memory is always
       accessible by all threads.
!    * The 'sync_hint' trait has no effect.
  
     See also: *note Offload-Target Specifics::
  
--- 5804,5890 ----
  
  The description below applies to:
  
!    • Explicit use of the OpenMP API routines, see *note Memory
       Management Routines::.
!    • The ‘allocate’ clause, except when the ‘allocator’ modifier is a
!      constant expression with value ‘omp_default_mem_alloc’ and no
!      ‘align’ modifier has been specified.  (In that case, the normal
!      ‘malloc’ allocation is used.)
!    • Using the ‘allocate’ directive for automatic/stack variables,
!      except when the ‘allocator’ clause is a constant expression with
!      value ‘omp_default_mem_alloc’ and no ‘align’ clause has been
       specified.  (In that case, the normal allocation is used: stack
!      allocation and, sometimes for Fortran, also ‘malloc’ [depending on
!      flags such as ‘-fstack-arrays’].)
!    • Using the ‘allocate’ directive for variable in static memory is
       currently not supported (compile time error).
!    • In Fortran, the ‘allocators’ directive and the executable
!      ‘allocate’ directive for Fortran pointers and allocatables is
       supported, but requires that files containing those directives has
!      to be compiled with ‘-fopenmp-allocators’.  Additionally, all files
       that might explicitly or implicitly deallocate memory allocated
       that way must also be compiled with that option.
  
     For the available predefined allocators and, as applicable, their
  associated predefined memory spaces and for the available traits and
  their default values, see *note OMP_ALLOCATOR::.  Predefined allocators
! without an associated memory space use the ‘omp_default_mem_space’
  memory space.
  
     For the memory spaces, the following applies:
!    • ‘omp_default_mem_space’ is supported
!    • ‘omp_const_mem_space’ maps to ‘omp_default_mem_space’
!    • ‘omp_low_lat_mem_space’ is only available on supported devices, and
!      maps to ‘omp_default_mem_space’ otherwise.
!    • ‘omp_large_cap_mem_space’ maps to ‘omp_default_mem_space’, unless
       the memkind library is available
!    • ‘omp_high_bw_mem_space’ maps to ‘omp_default_mem_space’, unless the
       memkind library is available
  
     On Linux systems, where the memkind library
! (https://github.com/memkind/memkind) (‘libmemkind.so.0’) is available at
  runtime, it is used when creating memory allocators requesting
  
!    • the memory space ‘omp_high_bw_mem_space’
!    • the memory space ‘omp_large_cap_mem_space’
!    • the ‘partition’ trait ‘interleaved’; note that for
!      ‘omp_large_cap_mem_space’ the allocation will not be interleaved
  
     On Linux systems, where the numa library
! (https://github.com/numactl/numactl) (‘libnuma.so.1’) is available at
  runtime, it used when creating memory allocators requesting
  
!    • the ‘partition’ trait ‘nearest’, except when both the libmemkind
       library is available and the memory space is either
!      ‘omp_large_cap_mem_space’ or ‘omp_high_bw_mem_space’
  
     Note that the numa library will round up the allocation size to a
  multiple of the system page size; therefore, consider using it only with
! large data or by sharing allocations via the ‘pool_size’ trait.
  Furthermore, the Linux kernel does not guarantee that an allocation will
  always be on the nearest NUMA node nor that after reallocation the same
  node will be used.  Note additionally that, on Linux, the default
  setting of the memory placement policy is to use the current node;
  therefore, unless the memory placement policy has been overridden, the
! ‘partition’ trait ‘environment’ (the default) will be effectively a
! ‘nearest’ allocation.
  
     Additional notes regarding the traits:
!    • The ‘pinned’ trait is supported on Linux hosts, but is subject to
!      the OS ‘ulimit’/‘rlimit’ locked memory settings.
!    • The default for the ‘pool_size’ trait is no pool and for every
       (re)allocation the associated library routine is called, which
       might internally use a memory pool.
!    • For the ‘partition’ trait, the partition part size will be the same
!      as the requested size (i.e.  ‘interleaved’ or ‘blocked’ has no
!      effect), except for ‘interleaved’ when the memkind library is
!      available.  Furthermore, for ‘nearest’ and unless the numa library
       is available, the memory might not be on the same NUMA node as
       thread that allocated the memory; on Linux, this is in particular
       the case when the memory placement policy is set to preferred.
!    • The ‘access’ trait has no effect such that memory is always
       accessible by all threads.
!    • The ‘sync_hint’ trait has no effect.
  
     See also: *note Offload-Target Specifics::
  
*************** File: libgomp.info,  Node: AMD Radeon,
*** 5908,5967 ****
  =====================
  
  On the hardware side, there is the hierarchy (fine to coarse):
!    * work item (thread)
!    * wavefront
!    * work group
!    * compute unit (CU)
  
     All OpenMP and OpenACC levels are used, i.e.
!    * OpenMP's simd and OpenACC's vector map to work items (thread)
!    * OpenMP's threads ("parallel") and OpenACC's workers map to
       wavefronts
!    * OpenMP's teams and OpenACC's gang use a threadpool with the size of
       the number of teams or gangs, respectively.
  
     The used sizes are
!    * Number of teams is the specified 'num_teams' (OpenMP) or
!      'num_gangs' (OpenACC) or otherwise the number of CU. It is limited
       by two times the number of CU.
!    * Number of wavefronts is 4 for gfx900 and 16 otherwise;
!      'num_threads' (OpenMP) and 'num_workers' (OpenACC) overrides this
       if smaller.
!    * The wavefront has 102 scalars and 64 vectors
!    * Number of workitems is always 64
!    * The hardware permits maximally 40 workgroups/CU and 16
       wavefronts/workgroup up to a limit of 40 wavefronts in total per
       CU.
!    * 80 scalars registers and 24 vector registers in non-kernel
       functions (the chosen procedure-calling API).
!    * For the kernel itself: as many as register pressure demands (number
       of teams and number of threads, scaled down if registers are
       exhausted)
  
     The implementation remark:
!    * I/O within OpenMP target regions and OpenACC parallel/kernels is
!      supported using the C library 'printf' functions and the Fortran
!      'print'/'write' statements.
!    * Reverse offload regions (i.e.  'target' regions with
!      'device(ancestor:1)') are processed serially per 'target' region
       such that the next reverse offload region is only executed after
       the previous one returned.
!    * OpenMP code that has a 'requires' directive with
!      'unified_shared_memory' will remove any GCN device from the list of
       available devices ("host fallback").
!    * The available stack size can be changed using the 'GCN_STACK_SIZE'
       environment variable; the default is 32 kiB per thread.
!    * Low-latency memory ('omp_low_lat_mem_space') is supported when the
!      the 'access' trait is set to 'cgroup'.  The default pool size is
       automatically scaled to share the 64 kiB LDS memory between the
       number of teams configured to run on each compute-unit, but may be
       adjusted at runtime by setting environment variable
!      'GOMP_GCN_LOWLAT_POOL=BYTES'.
!    * 'omp_low_lat_mem_alloc' cannot be used with true low-latency memory
!      because the definition implies the 'omp_atv_all' trait; main
       graphics memory is used instead.
!    * 'omp_cgroup_mem_alloc', 'omp_pteam_mem_alloc', and
!      'omp_thread_mem_alloc', all use low-latency memory as first
       preference, and fall back to main graphics memory when the
       low-latency pool is exhausted.
  
--- 5908,5967 ----
  =====================
  
  On the hardware side, there is the hierarchy (fine to coarse):
!    • work item (thread)
!    • wavefront
!    • work group
!    • compute unit (CU)
  
     All OpenMP and OpenACC levels are used, i.e.
!    • OpenMP's simd and OpenACC's vector map to work items (thread)
!    • OpenMP's threads ("parallel") and OpenACC's workers map to
       wavefronts
!    • OpenMP's teams and OpenACC's gang use a threadpool with the size of
       the number of teams or gangs, respectively.
  
     The used sizes are
!    • Number of teams is the specified ‘num_teams’ (OpenMP) or
!      ‘num_gangs’ (OpenACC) or otherwise the number of CU. It is limited
       by two times the number of CU.
!    • Number of wavefronts is 4 for gfx900 and 16 otherwise;
!      ‘num_threads’ (OpenMP) and ‘num_workers’ (OpenACC) overrides this
       if smaller.
!    • The wavefront has 102 scalars and 64 vectors
!    • Number of workitems is always 64
!    • The hardware permits maximally 40 workgroups/CU and 16
       wavefronts/workgroup up to a limit of 40 wavefronts in total per
       CU.
!    • 80 scalars registers and 24 vector registers in non-kernel
       functions (the chosen procedure-calling API).
!    • For the kernel itself: as many as register pressure demands (number
       of teams and number of threads, scaled down if registers are
       exhausted)
  
     The implementation remark:
!    • I/O within OpenMP target regions and OpenACC parallel/kernels is
!      supported using the C library ‘printf’ functions and the Fortran
!      ‘print’/‘write’ statements.
!    • Reverse offload regions (i.e.  ‘target’ regions with
!      ‘device(ancestor:1)’) are processed serially per ‘target’ region
       such that the next reverse offload region is only executed after
       the previous one returned.
!    • OpenMP code that has a ‘requires’ directive with
!      ‘unified_shared_memory’ will remove any GCN device from the list of
       available devices ("host fallback").
!    • The available stack size can be changed using the ‘GCN_STACK_SIZE’
       environment variable; the default is 32 kiB per thread.
!    • Low-latency memory (‘omp_low_lat_mem_space’) is supported when the
!      the ‘access’ trait is set to ‘cgroup’.  The default pool size is
       automatically scaled to share the 64 kiB LDS memory between the
       number of teams configured to run on each compute-unit, but may be
       adjusted at runtime by setting environment variable
!      ‘GOMP_GCN_LOWLAT_POOL=BYTES’.
!    • ‘omp_low_lat_mem_alloc’ cannot be used with true low-latency memory
!      because the definition implies the ‘omp_atv_all’ trait; main
       graphics memory is used instead.
!    • ‘omp_cgroup_mem_alloc’, ‘omp_pteam_mem_alloc’, and
!      ‘omp_thread_mem_alloc’, all use low-latency memory as first
       preference, and fall back to main graphics memory when the
       low-latency pool is exhausted.
  
*************** File: libgomp.info,  Node: nvptx,  Prev:
*** 5972,6044 ****
  ==========
  
  On the hardware side, there is the hierarchy (fine to coarse):
!    * thread
!    * warp
!    * thread block
!    * streaming multiprocessor
  
     All OpenMP and OpenACC levels are used, i.e.
!    * OpenMP's simd and OpenACC's vector map to threads
!    * OpenMP's threads ("parallel") and OpenACC's workers map to warps
!    * OpenMP's teams and OpenACC's gang use a threadpool with the size of
       the number of teams or gangs, respectively.
  
     The used sizes are
!    * The 'warp_size' is always 32
!    * CUDA kernel launched: 'dim={#teams,1,1},
!      blocks={#threads,warp_size,1}'.
!    * The number of teams is limited by the number of blocks the device
       can host simultaneously.
  
     Additional information can be obtained by setting the environment
! variable to 'GOMP_DEBUG=1' (very verbose; grep for 'kernel.*launch' for
  launch parameters).
  
     GCC generates generic PTX ISA code, which is just-in-time compiled by
  CUDA, which caches the JIT in the user's directory (see CUDA
  documentation; can be tuned by the environment variables
! 'CUDA_CACHE_{DISABLE,MAXSIZE,PATH}'.
  
!    Note: While PTX ISA is generic, the '-mptx=' and '-march='
  commandline options still affect the used PTX ISA code and, thus, the
  requirements on CUDA version and hardware.
  
     The implementation remark:
!    * I/O within OpenMP target regions and OpenACC parallel/kernels is
!      supported using the C library 'printf' functions.  Note that the
!      Fortran 'print'/'write' statements are not supported, yet.
!    * Compilation OpenMP code that contains 'requires reverse_offload'
!      requires at least '-march=sm_35', compiling for '-march=sm_30' is
       not supported.
!    * For code containing reverse offload (i.e.  'target' regions with
!      'device(ancestor:1)'), there is a slight performance penalty for
       _all_ target regions, consisting mostly of shutdown delay Per
       device, reverse offload regions are processed serially such that
       the next reverse offload region is only executed after the previous
       one returned.
!    * OpenMP code that has a 'requires' directive with
!      'unified_shared_memory' will remove any nvptx device from the list
       of available devices ("host fallback").
!    * The default per-warp stack size is 128 kiB; see also '-msoft-stack'
       in the GCC manual.
!    * The OpenMP routines 'omp_target_memcpy_rect' and
!      'omp_target_memcpy_rect_async' and the 'target update' directive
       for non-contiguous list items will use the 2D and 3D memory-copy
       functions of the CUDA library.  Higher dimensions will call those
       functions in a loop and are therefore supported.
!    * Low-latency memory ('omp_low_lat_mem_space') is supported when the
!      the 'access' trait is set to 'cgroup', the ISA is at least 'sm_53',
       and the PTX version is at least 4.1.  The default pool size is 8
       kiB per team, but may be adjusted at runtime by setting environment
!      variable 'GOMP_NVPTX_LOWLAT_POOL=BYTES'.  The maximum value is
       limited by the available hardware, and care should be taken that
       the selected pool size does not unduly limit the number of teams
       that can run simultaneously.
!    * 'omp_low_lat_mem_alloc' cannot be used with true low-latency memory
!      because the definition implies the 'omp_atv_all' trait; main
       graphics memory is used instead.
!    * 'omp_cgroup_mem_alloc', 'omp_pteam_mem_alloc', and
!      'omp_thread_mem_alloc', all use low-latency memory as first
       preference, and fall back to main graphics memory when the
       low-latency pool is exhausted.
  
--- 5972,6044 ----
  ==========
  
  On the hardware side, there is the hierarchy (fine to coarse):
!    • thread
!    • warp
!    • thread block
!    • streaming multiprocessor
  
     All OpenMP and OpenACC levels are used, i.e.
!    • OpenMP's simd and OpenACC's vector map to threads
!    • OpenMP's threads ("parallel") and OpenACC's workers map to warps
!    • OpenMP's teams and OpenACC's gang use a threadpool with the size of
       the number of teams or gangs, respectively.
  
     The used sizes are
!    • The ‘warp_size’ is always 32
!    • CUDA kernel launched: ‘dim={#teams,1,1},
!      blocks={#threads,warp_size,1}’.
!    • The number of teams is limited by the number of blocks the device
       can host simultaneously.
  
     Additional information can be obtained by setting the environment
! variable to ‘GOMP_DEBUG=1’ (very verbose; grep for ‘kernel.*launch’ for
  launch parameters).
  
     GCC generates generic PTX ISA code, which is just-in-time compiled by
  CUDA, which caches the JIT in the user's directory (see CUDA
  documentation; can be tuned by the environment variables
! ‘CUDA_CACHE_{DISABLE,MAXSIZE,PATH}’.
  
!    Note: While PTX ISA is generic, the ‘-mptx=’ and ‘-march=’
  commandline options still affect the used PTX ISA code and, thus, the
  requirements on CUDA version and hardware.
  
     The implementation remark:
!    • I/O within OpenMP target regions and OpenACC parallel/kernels is
!      supported using the C library ‘printf’ functions.  Note that the
!      Fortran ‘print’/‘write’ statements are not supported, yet.
!    • Compilation OpenMP code that contains ‘requires reverse_offload’
!      requires at least ‘-march=sm_35’, compiling for ‘-march=sm_30’ is
       not supported.
!    • For code containing reverse offload (i.e.  ‘target’ regions with
!      ‘device(ancestor:1)’), there is a slight performance penalty for
       _all_ target regions, consisting mostly of shutdown delay Per
       device, reverse offload regions are processed serially such that
       the next reverse offload region is only executed after the previous
       one returned.
!    • OpenMP code that has a ‘requires’ directive with
!      ‘unified_shared_memory’ will remove any nvptx device from the list
       of available devices ("host fallback").
!    • The default per-warp stack size is 128 kiB; see also ‘-msoft-stack’
       in the GCC manual.
!    • The OpenMP routines ‘omp_target_memcpy_rect’ and
!      ‘omp_target_memcpy_rect_async’ and the ‘target update’ directive
       for non-contiguous list items will use the 2D and 3D memory-copy
       functions of the CUDA library.  Higher dimensions will call those
       functions in a loop and are therefore supported.
!    • Low-latency memory (‘omp_low_lat_mem_space’) is supported when the
!      the ‘access’ trait is set to ‘cgroup’, the ISA is at least ‘sm_53’,
       and the PTX version is at least 4.1.  The default pool size is 8
       kiB per team, but may be adjusted at runtime by setting environment
!      variable ‘GOMP_NVPTX_LOWLAT_POOL=BYTES’.  The maximum value is
       limited by the available hardware, and care should be taken that
       the selected pool size does not unduly limit the number of teams
       that can run simultaneously.
!    • ‘omp_low_lat_mem_alloc’ cannot be used with true low-latency memory
!      because the definition implies the ‘omp_atv_all’ trait; main
       graphics memory is used instead.
!    • ‘omp_cgroup_mem_alloc’, ‘omp_pteam_mem_alloc’, and
!      ‘omp_thread_mem_alloc’, all use low-latency memory as first
       preference, and fall back to main graphics memory when the
       low-latency pool is exhausted.
  
*************** File: libgomp.info,  Node: Implementing
*** 6110,6116 ****
  13.3 Implementing ATOMIC construct
  ==================================
  
! The target should implement the '__sync' builtins.
  
     Failing that we could add
  
--- 6110,6116 ----
  13.3 Implementing ATOMIC construct
  ==================================
  
! The target should implement the ‘__sync’ builtins.
  
     Failing that we could add
  
*************** File: libgomp.info,  Node: Implementing
*** 6126,6132 ****
  13.4 Implementing FLUSH construct
  =================================
  
! Expands to the '__sync_synchronize' builtin.
  
  
  File: libgomp.info,  Node: Implementing BARRIER construct,  Next: Implementing THREADPRIVATE construct,  Prev: Implementing FLUSH construct,  Up: The libgomp ABI
--- 6126,6132 ----
  13.4 Implementing FLUSH construct
  =================================
  
! Expands to the ‘__sync_synchronize’ builtin.
  
  
  File: libgomp.info,  Node: Implementing BARRIER construct,  Next: Implementing THREADPRIVATE construct,  Prev: Implementing FLUSH construct,  Up: The libgomp ABI
*************** File: libgomp.info,  Node: Implementing
*** 6142,6148 ****
  13.6 Implementing THREADPRIVATE construct
  =========================================
  
! In _most_ cases we can map this directly to '__thread'.  Except that OMP
  allows constructors for C++ objects.  We can either refuse to support
  this (how often is it used?)  or we can implement something akin to
  .ctors.
--- 6142,6148 ----
  13.6 Implementing THREADPRIVATE construct
  =========================================
  
! In _most_ cases we can map this directly to ‘__thread’.  Except that OMP
  allows constructors for C++ objects.  We can either refuse to support
  this (how often is it used?)  or we can implement something akin to
  .ctors.
*************** thing I can figure is that we do somethi
*** 6197,6203 ****
  
     where the "x=x" and "y=y" assignments actually have different uids
  for the two variables, i.e.  not something you could write directly in
! C. Presumably this only makes sense if the "outer" x and y are global
  variables.
  
     COPYPRIVATE would work the same way, except the structure broadcast
--- 6197,6203 ----
  
     where the "x=x" and "y=y" assignments actually have different uids
  for the two variables, i.e.  not something you could write directly in
! C.  Presumably this only makes sense if the "outer" x and y are global
  variables.
  
     COPYPRIVATE would work the same way, except the structure broadcast
*************** assign team ids.
*** 6257,6263 ****
         void GOMP_parallel_end (void)
  
     Tears down the team and returns us to the previous
! 'omp_in_parallel()' state.
  
  
  File: libgomp.info,  Node: Implementing FOR construct,  Next: Implementing ORDERED construct,  Prev: Implementing PARALLEL construct,  Up: The libgomp ABI
--- 6257,6263 ----
         void GOMP_parallel_end (void)
  
     Tears down the team and returns us to the previous
! ‘omp_in_parallel()’ state.
  
  
  File: libgomp.info,  Node: Implementing FOR construct,  Next: Implementing ORDERED construct,  Prev: Implementing PARALLEL construct,  Up: The libgomp ABI
*************** GNU General Public License
*** 6429,6435 ****
  
                          Version 3, 29 June 2007
  
!      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
--- 6429,6435 ----
  
                          Version 3, 29 June 2007
  
!      Copyright © 2007 Free Software Foundation, Inc. <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies of this
       license document, but changing it is not allowed.
*************** mail.
*** 7116,7126 ****
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type 'show c' for details.
  
!    The hypothetical commands 'show w' and 'show c' should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
--- 7116,7126 ----
  notice like this when it starts in an interactive mode:
  
       PROGRAM Copyright (C) YEAR NAME OF AUTHOR
!      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
       This is free software, and you are welcome to redistribute it
!      under certain conditions; type ‘show c’ for details.
  
!    The hypothetical commands ‘show w’ and ‘show c’ should show the
  appropriate parts of the General Public License.  Of course, your
  program's commands might be different; for a GUI interface, you would
  use an "about box".
*************** GNU Free Documentation License
*** 7145,7151 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 7145,7151 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 7154,7160 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 7154,7160 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** more; major new features or packages con
*** 7665,7671 ****
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright (C) 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
--- 7665,7671 ----
  proper thing to do" when distributing free software for a fee, we can
  assure a steady flow of resources into making more free software.
  
!      Copyright © 1994 Free Software Foundation, Inc.
       Verbatim copying and redistribution of this section is permitted
       without royalty; alteration is not permitted.
  
*************** Library Index
*** 7724,7933 ****
  
  
  Tag Table:
! Node: Top2083
! Node: Enabling OpenMP4900
! Node: OpenMP Implementation Status6081
! Node: OpenMP 4.56777
! Node: OpenMP 5.06953
! Node: OpenMP 5.112374
! Node: OpenMP 5.216686
! Ref: OpenMP 5.2-Footnote-119831
! Node: OpenMP Technical Report 1220232
! Node: Runtime Library Routines24759
! Node: Thread Team Routines25392
! Node: omp_set_num_threads26979
! Node: omp_get_num_threads27825
! Node: omp_get_max_threads28916
! Node: omp_get_thread_num29671
! Node: omp_in_parallel30540
! Node: omp_set_dynamic31190
! Node: omp_get_dynamic32057
! Node: omp_get_cancellation32932
! Node: omp_set_nested33726
! Node: omp_get_nested35045
! Node: omp_set_schedule36787
! Node: omp_get_schedule37866
! Node: omp_get_teams_thread_limit38814
! Node: omp_get_supported_active_levels39582
! Node: omp_set_max_active_levels40387
! Node: omp_get_max_active_levels41336
! Node: omp_get_level42059
! Node: omp_get_ancestor_thread_num42693
! Node: omp_get_team_size43615
! Node: omp_get_active_level44586
! Node: Thread Affinity Routines45278
! Node: omp_get_proc_bind45678
! Node: Teams Region Routines46650
! Node: omp_get_num_teams47358
! Node: omp_get_team_num47844
! Node: omp_set_num_teams48343
! Node: omp_get_max_teams49215
! Node: omp_set_teams_thread_limit49907
! Node: omp_get_thread_limit50912
! Node: Tasking Routines51512
! Node: omp_get_max_task_priority52023
! Node: omp_in_explicit_task52606
! Node: omp_in_final53496
! Node: Resource Relinquishing Routines54139
! Node: omp_pause_resource54611
! Node: omp_pause_resource_all55704
! Node: Device Information Routines56691
! Node: omp_get_num_procs57509
! Node: omp_set_default_device58030
! Node: omp_get_default_device58829
! Node: omp_get_num_devices59518
! Node: omp_get_device_num60053
! Node: omp_is_initial_device60868
! Node: omp_get_initial_device61572
! Node: Device Memory Routines62307
! Node: omp_target_alloc63347
! Node: omp_target_free64922
! Node: omp_target_is_present66110
! Node: omp_target_is_accessible67782
! Node: omp_target_memcpy69596
! Node: omp_target_memcpy_async71410
! Node: omp_target_memcpy_rect73789
! Node: omp_target_memcpy_rect_async76993
! Node: omp_target_associate_ptr80765
! Node: omp_target_disassociate_ptr83730
! Node: omp_get_mapped_ptr85483
! Node: Lock Routines87026
! Node: omp_init_lock87874
! Node: omp_init_nest_lock88499
! Node: omp_destroy_lock89221
! Node: omp_destroy_nest_lock89896
! Node: omp_set_lock90634
! Node: omp_set_nest_lock91492
! Node: omp_unset_lock92388
! Node: omp_unset_nest_lock93317
! Node: omp_test_lock94311
! Node: omp_test_nest_lock95289
! Node: Timing Routines96277
! Node: omp_get_wtick96654
! Node: omp_get_wtime97209
! Node: Event Routine97978
! Node: omp_fulfill_event98311
! Node: Memory Management Routines99303
! Node: omp_init_allocator100219
! Node: omp_destroy_allocator101848
! Node: omp_set_default_allocator102832
! Node: omp_get_default_allocator103866
! Node: omp_alloc104807
! Node: omp_aligned_alloc106910
! Node: omp_free109440
! Node: omp_calloc111095
! Node: omp_aligned_calloc113314
! Node: omp_realloc115866
! Node: Environment Display Routine119252
! Node: omp_display_env119628
! Node: Environment Variables122462
! Node: OMP_ALLOCATOR125243
! Node: OMP_AFFINITY_FORMAT129053
! Node: OMP_CANCELLATION131661
! Node: OMP_DISPLAY_AFFINITY132261
! Node: OMP_DISPLAY_ENV132956
! Node: OMP_DEFAULT_DEVICE133806
! Node: OMP_DYNAMIC134814
! Node: OMP_MAX_ACTIVE_LEVELS135441
! Node: OMP_MAX_TASK_PRIORITY136466
! Node: OMP_NESTED137169
! Node: OMP_NUM_TEAMS138418
! Node: OMP_NUM_THREADS139127
! Node: OMP_PROC_BIND140143
! Node: OMP_PLACES141664
! Node: OMP_STACKSIZE144400
! Node: OMP_SCHEDULE145302
! Node: OMP_TARGET_OFFLOAD146049
! Node: OMP_TEAMS_THREAD_LIMIT147536
! Node: OMP_THREAD_LIMIT148389
! Node: OMP_WAIT_POLICY149049
! Node: GOMP_CPU_AFFINITY149741
! Node: GOMP_DEBUG151459
! Node: GOMP_STACKSIZE151961
! Node: GOMP_SPINCOUNT152792
! Node: GOMP_RTEMS_THREAD_POOLS153996
! Node: Enabling OpenACC156171
! Node: OpenACC Runtime Library Routines156993
! Node: acc_get_num_devices161274
! Node: acc_set_device_type162000
! Node: acc_get_device_type162764
! Node: acc_set_device_num163777
! Node: acc_get_device_num164594
! Node: acc_get_property165393
! Node: acc_async_test167605
! Node: acc_async_test_all168576
! Node: acc_wait169459
! Node: acc_wait_all170322
! Node: acc_wait_all_async171083
! Node: acc_wait_async171835
! Node: acc_init172543
! Node: acc_shutdown173188
! Node: acc_on_device173855
! Node: acc_malloc174844
! Node: acc_free175552
! Node: acc_copyin176196
! Node: acc_present_or_copyin177783
! Node: acc_create179551
! Node: acc_present_or_create181183
! Node: acc_copyout182959
! Node: acc_delete185263
! Node: acc_update_device187510
! Node: acc_update_self189084
! Node: acc_map_data190674
! Node: acc_unmap_data191746
! Node: acc_deviceptr192488
! Node: acc_hostptr193283
! Node: acc_is_present194067
! Node: acc_memcpy_to_device195594
! Node: acc_memcpy_from_device197029
! Node: acc_attach198514
! Node: acc_detach199181
! Node: acc_get_current_cuda_device200020
! Node: acc_get_current_cuda_context200605
! Node: acc_get_cuda_stream201205
! Node: acc_set_cuda_stream201796
! Node: acc_prof_register202467
! Node: acc_prof_unregister203026
! Node: acc_prof_lookup203593
! Node: acc_register_library204114
! Node: OpenACC Environment Variables204680
! Node: ACC_DEVICE_TYPE205169
! Node: ACC_DEVICE_NUM205696
! Node: ACC_PROFLIB206167
! Node: CUDA Streams Usage206773
! Ref: CUDA Streams Usage-Footnote-1208665
! Node: OpenACC Library Interoperability208774
! Ref: OpenACC Library Interoperability-Footnote-1215123
! Ref: OpenACC Library Interoperability-Footnote-2215375
! Node: OpenACC Profiling Interface215583
! Node: OpenMP-Implementation Specifics225581
! Node: Implementation-defined ICV Initialization225900
! Node: OpenMP Context Selectors227071
! Ref: OpenMP Context Selectors-Footnote-1228352
! Node: Memory allocation228420
! Node: Offload-Target Specifics233065
! Node: AMD Radeon233356
! Node: nvptx236294
! Node: The libgomp ABI239921
! Node: Implementing MASTER construct240771
! Node: Implementing CRITICAL construct241188
! Node: Implementing ATOMIC construct241929
! Node: Implementing FLUSH construct242412
! Node: Implementing BARRIER construct242685
! Node: Implementing THREADPRIVATE construct242956
! Node: Implementing PRIVATE clause243611
! Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses244194
! Node: Implementing REDUCTION clause245520
! Node: Implementing PARALLEL construct246080
! Node: Implementing FOR construct247339
! Node: Implementing ORDERED construct249339
! Node: Implementing SECTIONS construct249647
! Node: Implementing SINGLE construct250415
! Node: Implementing OpenACC's PARALLEL construct251129
! Node: Reporting Bugs251389
! Node: Copying251752
! Node: GNU Free Documentation License289304
! Node: Funding314432
! Node: Library Index316958
  
  End Tag Table
--- 7724,7938 ----
  
  
  Tag Table:
! Node: Top2081
! Node: Enabling OpenMP4910
! Node: OpenMP Implementation Status6147
! Node: OpenMP 4.56863
! Node: OpenMP 5.07039
! Node: OpenMP 5.112740
! Node: OpenMP 5.217404
! Ref: OpenMP 5.2-Footnote-120765
! Node: OpenMP Technical Report 1221194
! Node: Runtime Library Routines25993
! Node: Thread Team Routines26626
! Node: omp_set_num_threads28213
! Node: omp_get_num_threads29083
! Node: omp_get_max_threads30206
! Node: omp_get_thread_num30977
! Node: omp_in_parallel31866
! Node: omp_set_dynamic32544
! Node: omp_get_dynamic33443
! Node: omp_get_cancellation34354
! Node: omp_set_nested35180
! Node: omp_get_nested36539
! Node: omp_set_schedule38341
! Node: omp_get_schedule39464
! Node: omp_get_teams_thread_limit40448
! Node: omp_get_supported_active_levels41228
! Node: omp_set_max_active_levels42045
! Node: omp_get_max_active_levels43014
! Node: omp_get_level43749
! Node: omp_get_ancestor_thread_num44395
! Node: omp_get_team_size45345
! Node: omp_get_active_level46344
! Node: Thread Affinity Routines47048
! Node: omp_get_proc_bind47448
! Node: Teams Region Routines48468
! Node: omp_get_num_teams49180
! Node: omp_get_team_num49678
! Node: omp_set_num_teams50189
! Node: omp_get_max_teams51085
! Node: omp_set_teams_thread_limit51793
! Node: omp_get_thread_limit52822
! Node: Tasking Routines53434
! Node: omp_get_max_task_priority53945
! Node: omp_in_explicit_task54540
! Node: omp_in_final55462
! Node: Resource Relinquishing Routines56133
! Node: omp_pause_resource56605
! Node: omp_pause_resource_all57718
! Node: Device Information Routines58721
! Node: omp_get_num_procs59539
! Node: omp_set_default_device60072
! Node: omp_get_default_device60887
! Node: omp_get_num_devices61588
! Node: omp_get_device_num62135
! Node: omp_is_initial_device62966
! Node: omp_get_initial_device63698
! Node: Device Memory Routines64449
! Node: omp_target_alloc65489
! Node: omp_target_free67096
! Node: omp_target_is_present68324
! Node: omp_target_is_accessible70048
! Node: omp_target_memcpy71906
! Node: omp_target_memcpy_async73784
! Node: omp_target_memcpy_rect76243
! Node: omp_target_memcpy_rect_async79539
! Node: omp_target_associate_ptr83423
! Node: omp_target_disassociate_ptr86488
! Node: omp_get_mapped_ptr88297
! Node: Lock Routines89884
! Node: omp_init_lock90732
! Node: omp_init_nest_lock91373
! Node: omp_destroy_lock92111
! Node: omp_destroy_nest_lock92802
! Node: omp_set_lock93556
! Node: omp_set_nest_lock94434
! Node: omp_unset_lock95350
! Node: omp_unset_nest_lock96307
! Node: omp_test_lock97329
! Node: omp_test_nest_lock98351
! Node: Timing Routines99367
! Node: omp_get_wtick99744
! Node: omp_get_wtime100311
! Node: Event Routine101092
! Node: omp_fulfill_event101425
! Node: Memory Management Routines102437
! Node: omp_init_allocator103353
! Node: omp_destroy_allocator105046
! Node: omp_set_default_allocator106050
! Node: omp_get_default_allocator107112
! Node: omp_alloc108081
! Node: omp_aligned_alloc110260
! Node: omp_free112878
! Node: omp_calloc114585
! Node: omp_aligned_calloc116880
! Node: omp_realloc119512
! Node: Environment Display Routine123002
! Node: omp_display_env123378
! Node: Environment Variables126288
! Node: OMP_ALLOCATOR129097
! Node: OMP_AFFINITY_FORMAT133091
! Node: OMP_CANCELLATION135767
! Node: OMP_DISPLAY_AFFINITY136383
! Node: OMP_DISPLAY_ENV137090
! Node: OMP_DEFAULT_DEVICE137972
! Node: OMP_DYNAMIC139008
! Node: OMP_MAX_ACTIVE_LEVELS139647
! Node: OMP_MAX_TASK_PRIORITY140688
! Node: OMP_NESTED141395
! Node: OMP_NUM_TEAMS142680
! Node: OMP_NUM_THREADS143397
! Node: OMP_PROC_BIND144417
! Node: OMP_PLACES146002
! Node: OMP_STACKSIZE148818
! Node: OMP_SCHEDULE149744
! Node: OMP_TARGET_OFFLOAD150531
! Node: OMP_TEAMS_THREAD_LIMIT152062
! Node: OMP_THREAD_LIMIT152923
! Node: OMP_WAIT_POLICY153587
! Node: GOMP_CPU_AFFINITY154291
! Node: GOMP_DEBUG156058
! Node: GOMP_STACKSIZE156572
! Node: GOMP_SPINCOUNT157411
! Node: GOMP_RTEMS_THREAD_POOLS158683
! Node: Enabling OpenACC160932
! Node: OpenACC Runtime Library Routines161778
! Node: acc_get_num_devices166063
! Node: acc_set_device_type166805
! Node: acc_get_device_type167585
! Node: acc_set_device_num168630
! Node: acc_get_device_num169467
! Node: acc_get_property170286
! Node: acc_async_test172578
! Node: acc_async_test_all173577
! Node: acc_wait174484
! Node: acc_wait_all175375
! Node: acc_wait_all_async176156
! Node: acc_wait_async176924
! Node: acc_init177648
! Node: acc_shutdown178309
! Node: acc_on_device178992
! Node: acc_malloc180009
! Node: acc_free180733
! Node: acc_copyin181397
! Node: acc_present_or_copyin183044
! Node: acc_create184872
! Node: acc_present_or_create186564
! Node: acc_copyout188400
! Node: acc_delete190820
! Node: acc_update_device193183
! Node: acc_update_self194817
! Node: acc_map_data196467
! Node: acc_unmap_data197563
! Node: acc_deviceptr198321
! Node: acc_hostptr199132
! Node: acc_is_present199932
! Node: acc_memcpy_to_device201503
! Node: acc_memcpy_from_device202990
! Node: acc_attach204527
! Node: acc_detach205206
! Node: acc_get_current_cuda_device206065
! Node: acc_get_current_cuda_context206658
! Node: acc_get_cuda_stream207266
! Node: acc_set_cuda_stream207865
! Node: acc_prof_register208548
! Node: acc_prof_unregister209115
! Node: acc_prof_lookup209690
! Node: acc_register_library210219
! Node: OpenACC Environment Variables210793
! Node: ACC_DEVICE_TYPE211294
! Node: ACC_DEVICE_NUM211843
! Node: ACC_PROFLIB212318
! Node: CUDA Streams Usage212936
! Ref: CUDA Streams Usage-Footnote-1214900
! Node: OpenACC Library Interoperability215009
! Ref: OpenACC Library Interoperability-Footnote-1221450
! Ref: OpenACC Library Interoperability-Footnote-2221702
! Node: OpenACC Profiling Interface221918
! Node: OpenMP-Implementation Specifics232674
! Node: Implementation-defined ICV Initialization232993
! Node: OpenMP Context Selectors234164
! Ref: OpenMP Context Selectors-Footnote-1235545
! Node: Memory allocation235621
! Node: Offload-Target Specifics240508
! Node: AMD Radeon240799
! Node: nvptx243867
! Node: The libgomp ABI247656
! Node: Implementing MASTER construct248506
! Node: Implementing CRITICAL construct248923
! Node: Implementing ATOMIC construct249664
! Node: Implementing FLUSH construct250151
! Node: Implementing BARRIER construct250428
! Node: Implementing THREADPRIVATE construct250699
! Node: Implementing PRIVATE clause251358
! Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses251941
! Node: Implementing REDUCTION clause253268
! Node: Implementing PARALLEL construct253828
! Node: Implementing FOR construct255091
! Node: Implementing ORDERED construct257091
! Node: Implementing SECTIONS construct257399
! Node: Implementing SINGLE construct258167
! Node: Implementing OpenACC's PARALLEL construct258881
! Node: Reporting Bugs259141
! Node: Copying259504
! Node: GNU Free Documentation License297071
! Node: Funding322202
! Node: Library Index324727
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/libgomp/testsuite/libgomp.fortran/pr120286.f90 gcc-14.3.0-RC-20260619/libgomp/testsuite/libgomp.fortran/pr120286.f90
*** gcc-14.3.0/libgomp/testsuite/libgomp.fortran/pr120286.f90	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libgomp/testsuite/libgomp.fortran/pr120286.f90	Fri Jun 19 06:51:06 2026
***************
*** 0 ****
--- 1,49 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/120286 - scalar class pointers in OpenMP private/firstprivate
+ ! clauses must preserve association status without taking ownership.
+ 
+ program main
+   implicit none
+ 
+   type foo_t
+     integer :: dummy
+   end type foo_t
+ 
+   type fooPtr_t
+     class(foo_t), pointer :: p
+   end type fooPtr_t
+ 
+   type fooPtrStack_t
+     class(fooPtr_t), allocatable :: list(:)
+   end type fooPtrStack_t
+ 
+   type(fooPtrStack_t) :: x
+   class(foo_t), pointer :: ptr
+   integer :: it, n
+   logical :: ok
+ 
+   allocate (x%list(1))
+   allocate (x%list(1)%p)
+   x%list(1)%p%dummy = 7
+ 
+   do it = 1, 16
+ !$omp parallel do default(none) num_threads(2) private(n, ptr) shared(x)
+     do n = 1, 1
+       ptr => x%list(n)%p
+     end do
+ !$omp end parallel do
+   end do
+ 
+   if (.not. associated (x%list(1)%p)) stop 1
+   if (x%list(1)%p%dummy /= 7) stop 2
+ 
+   ptr => x%list(1)%p
+   ok = .false.
+ 
+ !$omp parallel default(none) num_threads(1) firstprivate(ptr) shared(x, ok)
+   ok = associated (ptr, x%list(1)%p) .and. ptr%dummy == 7
+ !$omp end parallel
+ 
+   if (.not. ok) stop 3
+ end program main
diff -Nrcpad gcc-14.3.0/libiberty/ChangeLog gcc-14.3.0-RC-20260619/libiberty/ChangeLog
*** gcc-14.3.0/libiberty/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libiberty/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,12 ----
+ 2026-03-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/124365
+ 	* simple-object.c (handle_lto_debug_sections): Also copy over
+ 	.ARM.attributes section.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libiberty/simple-object.c gcc-14.3.0-RC-20260619/libiberty/simple-object.c
*** gcc-14.3.0/libiberty/simple-object.c	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libiberty/simple-object.c	Fri Jun 19 06:51:06 2026
*************** handle_lto_debug_sections (const char *n
*** 310,315 ****
--- 310,319 ----
    /* Copy over .BTF section under the same name if present.  */
    else if (strcmp (name, ".BTF") == 0)
      return strcpy (newname, name);
+   /* Copy over .ARM.attributes section under the same name if present.  AArch64
+      aeabi attributes are present in this section.  */
+   else if (strcmp (name, ".ARM.attributes") == 0)
+     return strcpy (newname, name);
    free (newname);
    return NULL;
  }
diff -Nrcpad gcc-14.3.0/libitm/libitm.info gcc-14.3.0-RC-20260619/libitm/libitm.info
*** gcc-14.3.0/libitm/libitm.info	Fri May 23 11:26:20 2025
--- gcc-14.3.0-RC-20260619/libitm/libitm.info	Fri Jun 19 07:13:10 2026
***************
*** 1,6 ****
! This is libitm.info, produced by makeinfo version 6.5 from libitm.texi.
  
! Copyright (C) 2011-2024 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.2 or
--- 1,6 ----
! This is libitm.info, produced by makeinfo version 7.1 from libitm.texi.
  
! Copyright © 2011-2024 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.2 or
*************** END-INFO-DIR-ENTRY
*** 15,21 ****
  
     This manual documents the GNU Transactional Memory Library.
  
!    Copyright (C) 2011-2024 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.2 or
--- 15,21 ----
  
     This manual documents the GNU Transactional Memory Library.
  
!    Copyright © 2011-2024 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.2 or
*************** File: libitm.info,  Node: Enabling libit
*** 53,61 ****
  1 Enabling libitm
  *****************
  
! To activate support for TM in C/C++, the compile-time flag '-fgnu-tm'
  must be specified.  This enables TM language-level constructs such as
! transaction statements (e.g., '__transaction_atomic', *note C/C++
  Language Constructs for TM:: for details).
  
  
--- 53,61 ----
  1 Enabling libitm
  *****************
  
! To activate support for TM in C/C++, the compile-time flag ‘-fgnu-tm’
  must be specified.  This enables TM language-level constructs such as
! transaction statements (e.g., ‘__transaction_atomic’, *note C/C++
  Language Constructs for TM:: for details).
  
  
*************** File: libitm.info,  Node: C/C++ Language
*** 66,78 ****
  
  Transactions are supported in C++ and C in the form of transaction
  statements, transaction expressions, and function transactions.  In the
! following example, both 'a' and 'b' will be read and the difference will
! be written to 'c', all atomically and isolated from other transactions:
  
       __transaction_atomic { c = a - b; }
  
     Therefore, another thread can use the following code to concurrently
! update 'b' without ever causing 'c' to hold a negative value (and
  without having to use other synchronization constructs such as locks or
  C++11 atomics):
  
--- 66,78 ----
  
  Transactions are supported in C++ and C in the form of transaction
  statements, transaction expressions, and function transactions.  In the
! following example, both ‘a’ and ‘b’ will be read and the difference will
! be written to ‘c’, all atomically and isolated from other transactions:
  
       __transaction_atomic { c = a - b; }
  
     Therefore, another thread can use the following code to concurrently
! update ‘b’ without ever causing ‘c’ to hold a negative value (and
  without having to use other synchronization constructs such as locks or
  C++11 atomics):
  
*************** these stack frames' lifetimes will end b
*** 159,165 ****
  3.3.9 Store allocation
  ----------------------
  
! There is no 'getTransaction' function.
  
  3.3.10 [No changes] Naming conventions
  --------------------------------------
--- 159,165 ----
  3.3.9 Store allocation
  ----------------------
  
! There is no ‘getTransaction’ function.
  
  3.3.10 [No changes] Naming conventions
  --------------------------------------
*************** Currently, this is not implemented.
*** 172,179 ****
  3.4 Types and macros list
  =========================
  
! '_ITM_codeProperties' has changed, *note Starting a transaction:
! txn-code-properties.  '_ITM_srcLocation' is not used.
  
  3.5 Function list
  =================
--- 172,179 ----
  3.4 Types and macros list
  =========================
  
! ‘_ITM_codeProperties’ has changed, *note Starting a transaction:
! txn-code-properties.  ‘_ITM_srcLocation’ is not used.
  
  3.5 Function list
  =================
*************** These functions are not part of the ABI.
*** 195,201 ****
  3.5.5 State manipulation functions
  ----------------------------------
  
! There is no 'getTransaction' function.  Transaction identifiers for
  nested transactions will be ordered but not necessarily sequential
  (i.e., for a nested transaction's identifier IN and its enclosing
  transaction's identifier IE, it is guaranteed that IN >= IE).
--- 195,201 ----
  3.5.5 State manipulation functions
  ----------------------------------
  
! There is no ‘getTransaction’ function.  Transaction identifiers for
  nested transactions will be ordered but not necessarily sequential
  (i.e., for a nested transaction's identifier IN and its enclosing
  transaction's identifier IE, it is guaranteed that IN >= IE).
*************** transaction's identifier IE, it is guara
*** 209,223 ****
  3.5.7.1 Transaction code properties
  ...................................
  
! The bit 'hasNoXMMUpdate' is instead called 'hasNoVectorUpdate'.  Iff it
  is set, vector register save/restore is not necessary for any target
  machine.
  
!    The 'hasNoFloatUpdate' bit ('0x0010') is new.  Iff it is set,
  floating point register save/restore is not necessary for any target
  machine.
  
!    'undoLogCode' is not supported and a fatal runtime error will be
  raised if this bit is set.  It is not properly defined in the ABI why
  barriers other than undo logging are not present; Are they not necessary
  (e.g., a transaction operating purely on thread-local data) or have they
--- 209,223 ----
  3.5.7.1 Transaction code properties
  ...................................
  
! The bit ‘hasNoXMMUpdate’ is instead called ‘hasNoVectorUpdate’.  Iff it
  is set, vector register save/restore is not necessary for any target
  machine.
  
!    The ‘hasNoFloatUpdate’ bit (‘0x0010’) is new.  Iff it is set,
  floating point register save/restore is not necessary for any target
  machine.
  
!    ‘undoLogCode’ is not supported and a fatal runtime error will be
  raised if this bit is set.  It is not properly defined in the ABI why
  barriers other than undo logging are not present; Are they not necessary
  (e.g., a transaction operating purely on thread-local data) or have they
*************** synchronization (e.g., serial mode) migh
*** 226,244 ****
  specification suggests that the latter might be the case, but the former
  seems to be more useful.
  
!    The 'readOnly' bit ('0x4000') is new.  *TODO* Lexical or dynamic
  scope?
  
!    'hasNoRetry' is not supported.  If this bit is not set, but
! 'hasNoAbort' is set, the library can assume that transaction rollback
  will not be requested.
  
     It would be useful if the absence of externally-triggered rollbacks
  would be reported for the dynamic scope as well, not just for the
! lexical scope ('hasNoAbort').  Without this, a library cannot exploit
  this together with flat nesting.
  
!    'exceptionBlock' is not supported because exception blocks are not
  used.
  
  3.5.7.2 [No changes] Windows exception state
--- 226,244 ----
  specification suggests that the latter might be the case, but the former
  seems to be more useful.
  
!    The ‘readOnly’ bit (‘0x4000’) is new.  *TODO* Lexical or dynamic
  scope?
  
!    ‘hasNoRetry’ is not supported.  If this bit is not set, but
! ‘hasNoAbort’ is set, the library can assume that transaction rollback
  will not be requested.
  
     It would be useful if the absence of externally-triggered rollbacks
  would be reported for the dynamic scope as well, not just for the
! lexical scope (‘hasNoAbort’).  Without this, a library cannot exploit
  this together with flat nesting.
  
!    ‘exceptionBlock’ is not supported because exception blocks are not
  used.
  
  3.5.7.2 [No changes] Windows exception state
*************** used.
*** 253,279 ****
  3.5.8 Aborting a transaction
  ----------------------------
  
! '_ITM_rollbackTransaction' is not supported.  '_ITM_abortTransaction' is
! supported but the abort reasons 'exceptionBlockAbort', 'TMConflict', and
! 'userRetry' are not supported.  There are no exception blocks in
  general, so the related cases also do not have to be considered.  To
! encode '__transaction_cancel [[outer]]', compilers must set the new
! 'outerAbort' bit ('0x10') additionally to the 'userAbort' bit in the
  abort reason.
  
  3.5.9 Committing a transaction
  ------------------------------
  
  The exception handling (EH) scheme is different.  The Intel ABI requires
! the '_ITM_tryCommitTransaction' function that will return even when the
  commit failed and will have to be matched with calls to either
! '_ITM_abortTransaction' or '_ITM_commitTransaction'.  In contrast, gcc
  relies on transactional wrappers for the functions of the Exception
  Handling ABI and on one additional commit function (shown below).  This
  allows the TM to keep track of EH internally and thus it does not have
  to embed the cleanup of EH state into the existing EH code in the
! program.  '_ITM_tryCommitTransaction' is not supported.
! '_ITM_commitTransactionToId' is also not supported because the
  propagation of thrown exceptions will not bypass commits of nested
  transactions.
  
--- 253,279 ----
  3.5.8 Aborting a transaction
  ----------------------------
  
! ‘_ITM_rollbackTransaction’ is not supported.  ‘_ITM_abortTransaction’ is
! supported but the abort reasons ‘exceptionBlockAbort’, ‘TMConflict’, and
! ‘userRetry’ are not supported.  There are no exception blocks in
  general, so the related cases also do not have to be considered.  To
! encode ‘__transaction_cancel [[outer]]’, compilers must set the new
! ‘outerAbort’ bit (‘0x10’) additionally to the ‘userAbort’ bit in the
  abort reason.
  
  3.5.9 Committing a transaction
  ------------------------------
  
  The exception handling (EH) scheme is different.  The Intel ABI requires
! the ‘_ITM_tryCommitTransaction’ function that will return even when the
  commit failed and will have to be matched with calls to either
! ‘_ITM_abortTransaction’ or ‘_ITM_commitTransaction’.  In contrast, gcc
  relies on transactional wrappers for the functions of the Exception
  Handling ABI and on one additional commit function (shown below).  This
  allows the TM to keep track of EH internally and thus it does not have
  to embed the cleanup of EH state into the existing EH code in the
! program.  ‘_ITM_tryCommitTransaction’ is not supported.
! ‘_ITM_commitTransactionToId’ is also not supported because the
  propagation of thrown exceptions will not bypass commits of nested
  transactions.
  
*************** transactions.
*** 285,328 ****
       void _ITM_cxa_end_catch (void);
  
     The EH scheme changed in version 6 of GCC. Previously, the compiler
! added a call to '_ITM_commitTransactionEH' to commit a transaction if an
! exception could be in flight at this position in the code; 'exc_ptr' is
  the address of the current exception and must be non-zero.  Now, the
  compiler must catch all exceptions that are about to be thrown out of a
! transaction and call '_ITM_commitTransactionEH' from the catch clause,
! with 'exc_ptr' being zero.
  
     Note that the old EH scheme never worked completely in GCC's
  implementation; libitm currently does not try to be compatible with the
  old scheme.
  
!    The '_ITM_cxa...' functions are transactional wrappers for the
! respective '__cxa...' functions and must be called instead of these in
! transactional code.  '_ITM_cxa_free_exception' is new in GCC 6.
  
     To support this EH scheme, libstdc++ needs to provide one additional
! function ('_cxa_tm_cleanup'), which is used by the TM to clean up the
  exception handling state while rolling back a transaction:
  
       void __cxa_tm_cleanup (void *unthrown_obj, void *cleanup_exc,
                              unsigned int caught_count);
  
!    Since GCC 6, 'unthrown_obj' is not used anymore and always null;
! prior to that, 'unthrown_obj' is non-null if the program called
! '__cxa_allocate_exception' for this exception but did not yet called
! '__cxa_throw' for it.  'cleanup_exc' is non-null if the program is
  currently processing a cleanup along an exception path but has not
! caught this exception yet.  'caught_count' is the nesting depth of
! '__cxa_begin_catch' within the transaction (which can be counted by the
! TM using '_ITM_cxa_begin_catch' and '_ITM_cxa_end_catch');
! '__cxa_tm_cleanup' then performs rollback by essentially performing
! '__cxa_end_catch' that many times.
  
  3.5.10 Exception handling support
  ---------------------------------
  
  Currently, there is no support for functionality like
! '__transaction_cancel throw' as described in the C++ TM specification.
  Supporting this should be possible with the EH scheme explained
  previously because via the transactional wrappers for the EH ABI, the TM
  is able to observe and intercept EH.
--- 285,328 ----
       void _ITM_cxa_end_catch (void);
  
     The EH scheme changed in version 6 of GCC. Previously, the compiler
! added a call to ‘_ITM_commitTransactionEH’ to commit a transaction if an
! exception could be in flight at this position in the code; ‘exc_ptr’ is
  the address of the current exception and must be non-zero.  Now, the
  compiler must catch all exceptions that are about to be thrown out of a
! transaction and call ‘_ITM_commitTransactionEH’ from the catch clause,
! with ‘exc_ptr’ being zero.
  
     Note that the old EH scheme never worked completely in GCC's
  implementation; libitm currently does not try to be compatible with the
  old scheme.
  
!    The ‘_ITM_cxa...’ functions are transactional wrappers for the
! respective ‘__cxa...’ functions and must be called instead of these in
! transactional code.  ‘_ITM_cxa_free_exception’ is new in GCC 6.
  
     To support this EH scheme, libstdc++ needs to provide one additional
! function (‘_cxa_tm_cleanup’), which is used by the TM to clean up the
  exception handling state while rolling back a transaction:
  
       void __cxa_tm_cleanup (void *unthrown_obj, void *cleanup_exc,
                              unsigned int caught_count);
  
!    Since GCC 6, ‘unthrown_obj’ is not used anymore and always null;
! prior to that, ‘unthrown_obj’ is non-null if the program called
! ‘__cxa_allocate_exception’ for this exception but did not yet called
! ‘__cxa_throw’ for it.  ‘cleanup_exc’ is non-null if the program is
  currently processing a cleanup along an exception path but has not
! caught this exception yet.  ‘caught_count’ is the nesting depth of
! ‘__cxa_begin_catch’ within the transaction (which can be counted by the
! TM using ‘_ITM_cxa_begin_catch’ and ‘_ITM_cxa_end_catch’);
! ‘__cxa_tm_cleanup’ then performs rollback by essentially performing
! ‘__cxa_end_catch’ that many times.
  
  3.5.10 Exception handling support
  ---------------------------------
  
  Currently, there is no support for functionality like
! ‘__transaction_cancel throw’ as described in the C++ TM specification.
  Supporting this should be possible with the EH scheme explained
  previously because via the transactional wrappers for the EH ABI, the TM
  is able to observe and intercept EH.
*************** is able to observe and intercept EH.
*** 341,347 ****
  
  If either the source or destination memory region is to be accessed
  nontransactionally, then source and destination regions must not be
! overlapping.  The respective '_ITM_memmove' functions are still
  available but a fatal runtime error will be raised if such regions do
  overlap.  To support this functionality, the ABI would have to specify
  how the intersection of the regions has to be accessed (i.e.,
--- 341,347 ----
  
  If either the source or destination memory region is to be accessed
  nontransactionally, then source and destination regions must not be
! overlapping.  The respective ‘_ITM_memmove’ functions are still
  available but a fatal runtime error will be raised if such regions do
  overlap.  To support this functionality, the ABI would have to specify
  how the intersection of the regions has to be accessed (i.e.,
*************** transactionally or nontransactionally).
*** 357,378 ****
  ----------------------------------------------
  
  Commit actions will get executed in the same order in which the
! respective calls to '_ITM_addUserCommitAction' happened.  Only
! '_ITM_noTransactionId' is allowed as value for the
! 'resumingTransactionId' argument.  Commit actions get executed after
  privatization safety has been ensured.
  
     Undo actions will get executed in reverse order compared to the order
! in which the respective calls to '_ITM_addUserUndoAction' happened.  The
  ordering of undo actions w.r.t.  the roll-back of other actions (e.g.,
  data transfers or memory allocations) is undefined.
  
!    '_ITM_getThreadnum' is not supported currently because its only
  purpose is to provide a thread ID that matches some assumed performance
  tuning output, but this output is not part of the ABI nor further
  defined by it.
  
!    '_ITM_dropReferences' is not supported currently because its
  semantics and the intention behind it is not entirely clear.  The
  specification suggests that this function is necessary because of
  certain orderings of data transfer undos and the releasing of memory
--- 357,378 ----
  ----------------------------------------------
  
  Commit actions will get executed in the same order in which the
! respective calls to ‘_ITM_addUserCommitAction’ happened.  Only
! ‘_ITM_noTransactionId’ is allowed as value for the
! ‘resumingTransactionId’ argument.  Commit actions get executed after
  privatization safety has been ensured.
  
     Undo actions will get executed in reverse order compared to the order
! in which the respective calls to ‘_ITM_addUserUndoAction’ happened.  The
  ordering of undo actions w.r.t.  the roll-back of other actions (e.g.,
  data transfers or memory allocations) is undefined.
  
!    ‘_ITM_getThreadnum’ is not supported currently because its only
  purpose is to provide a thread ID that matches some assumed performance
  tuning output, but this output is not part of the ABI nor further
  defined by it.
  
!    ‘_ITM_dropReferences’ is not supported currently because its
  semantics and the intention behind it is not entirely clear.  The
  specification suggests that this function is necessary because of
  certain orderings of data transfer undos and the releasing of memory
*************** live throughout the life-time of the TM
*** 401,407 ****
  
     *TODO* The intention was always to drop the registration functions
  entirely, and create a new ELF Phdr describing the linker-sorted table.
! Much like what currently happens for 'PT_GNU_EH_FRAME'.  This work kept
  getting bogged down in how to represent the N different code generation
  variants.  We clearly needed at least two--SW and HW transactional
  clones--but there was always a suggestion of more variants for different
--- 401,407 ----
  
     *TODO* The intention was always to drop the registration functions
  entirely, and create a new ELF Phdr describing the linker-sorted table.
! Much like what currently happens for ‘PT_GNU_EH_FRAME’.  This work kept
  getting bogged down in how to represent the N different code generation
  variants.  We clearly needed at least two--SW and HW transactional
  clones--but there was always a suggestion of more variants for different
*************** pointer, whereas the second will raise a
*** 426,433 ****
              __attribute__((__malloc__)) ITM_PURE;
       void _ITM_free (void *) ITM_PURE;
  
!    These functions are essentially transactional wrappers for 'malloc',
! 'calloc', and 'free'.  Within transactions, the compiler should replace
  calls to the original functions with calls to the wrapper functions.
  
     libitm also provides transactional clones of C++ memory management
--- 426,433 ----
              __attribute__((__malloc__)) ITM_PURE;
       void _ITM_free (void *) ITM_PURE;
  
!    These functions are essentially transactional wrappers for ‘malloc’,
! ‘calloc’, and ‘free’.  Within transactions, the compiler should replace
  calls to the original functions with calls to the wrapper functions.
  
     libitm also provides transactional clones of C++ memory management
*************** File: libitm.info,  Node: Internals,  Ne
*** 469,482 ****
  
  libitm supports several ways of synchronizing transactions with each
  other.  These TM methods (or TM algorithms) are implemented in the form
! of subclasses of 'abi_dispatch', which provide methods for transactional
  loads and stores as well as callbacks for rollback and commit.  All
  methods that are compatible with each other (i.e., that let concurrently
  running transactions still synchronize correctly even if different
  methods are used) belong to the same TM method group.  Pointers to TM
  methods can be obtained using the factory methods prefixed with
! 'dispatch_' in 'libitm_i.h'.  There are two special methods,
! 'dispatch_serial' and 'dispatch_serialirr', that are compatible with all
  methods because they run transactions completely in serial mode.
  
  4.1.1 TM method life cycle
--- 469,482 ----
  
  libitm supports several ways of synchronizing transactions with each
  other.  These TM methods (or TM algorithms) are implemented in the form
! of subclasses of ‘abi_dispatch’, which provide methods for transactional
  loads and stores as well as callbacks for rollback and commit.  All
  methods that are compatible with each other (i.e., that let concurrently
  running transactions still synchronize correctly even if different
  methods are used) belong to the same TM method group.  Pointers to TM
  methods can be obtained using the factory methods prefixed with
! ‘dispatch_’ in ‘libitm_i.h’.  There are two special methods,
! ‘dispatch_serial’ and ‘dispatch_serialirr’, that are compatible with all
  methods because they run transactions completely in serial mode.
  
  4.1.1 TM method life cycle
*************** methods because they run transactions co
*** 484,508 ****
  
  The state of TM methods does not change after construction, but they do
  alter the state of transactions that use this method.  However, because
! per-transaction data gets used by several methods, 'gtm_thread' is
  responsible for setting an initial state that is useful for all methods.
  After that, methods are responsible for resetting/clearing this state on
  each rollback or commit (of outermost transactions), so that the
  transaction executed next is not affected by the previous transaction.
  
     There is also global state associated with each method group, which
! is initialized and shut down ('method_group::init()' and 'fini()') when
! switching between method groups (see 'retry.cc').
  
  4.1.2 Selecting the default method
  ----------------------------------
  
  The default method that libitm uses for freshly started transactions
  (but not necessarily for restarted transactions) can be set via an
! environment variable ('ITM_DEFAULT_METHOD'), whose value should be equal
  to the name of one of the factory methods returning abi_dispatch
  subclasses but without the "dispatch_" prefix (e.g., "serialirr" instead
! of 'GTM::dispatch_serialirr()').
  
     Note that this environment variable is only a hint for libitm and
  might not be supported in the future.
--- 484,508 ----
  
  The state of TM methods does not change after construction, but they do
  alter the state of transactions that use this method.  However, because
! per-transaction data gets used by several methods, ‘gtm_thread’ is
  responsible for setting an initial state that is useful for all methods.
  After that, methods are responsible for resetting/clearing this state on
  each rollback or commit (of outermost transactions), so that the
  transaction executed next is not affected by the previous transaction.
  
     There is also global state associated with each method group, which
! is initialized and shut down (‘method_group::init()’ and ‘fini()’) when
! switching between method groups (see ‘retry.cc’).
  
  4.1.2 Selecting the default method
  ----------------------------------
  
  The default method that libitm uses for freshly started transactions
  (but not necessarily for restarted transactions) can be set via an
! environment variable (‘ITM_DEFAULT_METHOD’), whose value should be equal
  to the name of one of the factory methods returning abi_dispatch
  subclasses but without the "dispatch_" prefix (e.g., "serialirr" instead
! of ‘GTM::dispatch_serialirr()’).
  
     Note that this environment variable is only a hint for libitm and
  might not be supported in the future.
*************** independently of the enclosing transacti
*** 522,528 ****
  
     Flat nesting is the default nesting mode, but closed nesting is
  supported and used when transactions contain user-controlled aborts
! ('__transaction_cancel' statements).  We assume that user-controlled
  aborts are rare in typical code and used mostly in exceptional
  situations.  Thus, it makes more sense to use flat nesting by default to
  avoid the performance overhead of the additional checkpoints required
--- 522,528 ----
  
     Flat nesting is the default nesting mode, but closed nesting is
  supported and used when transactions contain user-controlled aborts
! (‘__transaction_cancel’ statements).  We assume that user-controlled
  aborts are rare in typical code and used mostly in exceptional
  situations.  Thus, it makes more sense to use flat nesting by default to
  avoid the performance overhead of the additional checkpoints required
*************** public/shared part of a transaction obje
*** 578,587 ****
  method-group-specific state.
  
     The former category (protected by the serial lock) includes:
!    * The list of active threads that have used transactions.
!    * The tables that map functions to their transactional clones.
!    * The current selection of which method group to use.
!    * Some method-group-specific data, or invariants of this data.  For
       example, resetting a method group to its initial state is handled
       by switching to the same method group, so the serial lock protects
       such resetting as well.
--- 578,587 ----
  method-group-specific state.
  
     The former category (protected by the serial lock) includes:
!    • The list of active threads that have used transactions.
!    • The tables that map functions to their transactional clones.
!    • The current selection of which method group to use.
!    • Some method-group-specific data, or invariants of this data.  For
       example, resetting a method group to its initial state is handled
       by switching to the same method group, so the serial lock protects
       such resetting as well.
*************** also not released before commit.
*** 606,629 ****
  
     Lock acquisition / blocking rules:
  
!    * Transactions must become active or serial before they are allowed
       to use method-group-specific locks or blocking (i.e., the serial
       lock must be acquired before those other locks, either in serial or
       nonserial mode).
  
!    * Any number of threads that do not currently run active transactions
       can block while trying to get the serial lock in exclusive mode.
       Note that active transactions must not block when trying to upgrade
       to serial mode unless there is no other transaction that is trying
       that (the latter is ensured by the serial lock implementation.
  
!    * Method groups must prevent deadlocks on their locks.  In
       particular, they must also be prepared for another active
       transaction that has acquired method-group-specific locks but is
       blocked during an attempt to upgrade to being a serial transaction.
       See below for details.
  
!    * Serial transactions can acquire method-group-specific locks because
       there will be no other active nor serial transaction.
  
     There is no single rule for per-method-group blocking because this
--- 606,629 ----
  
     Lock acquisition / blocking rules:
  
!    • Transactions must become active or serial before they are allowed
       to use method-group-specific locks or blocking (i.e., the serial
       lock must be acquired before those other locks, either in serial or
       nonserial mode).
  
!    • Any number of threads that do not currently run active transactions
       can block while trying to get the serial lock in exclusive mode.
       Note that active transactions must not block when trying to upgrade
       to serial mode unless there is no other transaction that is trying
       that (the latter is ensured by the serial lock implementation.
  
!    • Method groups must prevent deadlocks on their locks.  In
       particular, they must also be prepared for another active
       transaction that has acquired method-group-specific locks but is
       blocked during an attempt to upgrade to being a serial transaction.
       See below for details.
  
!    • Serial transactions can acquire method-group-specific locks because
       there will be no other active nor serial transaction.
  
     There is no single rule for per-method-group blocking because this
*************** to consider a potential deadlock due to
*** 635,649 ****
  
     If there can be upgrades to serial mode after the acquisition of
  per-method-group locks, then TM methods need to avoid those deadlocks:
!    * When upgrading to a serial transaction, after acquiring exclusive
       rights to the serial lock but before waiting for concurrent active
       transactions to finish (*note Serial lock implementation:
       serial-lock-impl. for details), we have to wake up all active
       transactions waiting on the upgrader's per-method-group locks.
!    * Active transactions blocking on per-method-group locks need to
       check the serial lock and abort if there is a pending serial
       transaction.
!    * Lost wake-ups have to be prevented (e.g., by changing a bit in each
       per-method-group lock before doing the wake-up, and only blocking
       on this lock using a futex if this bit is not group).
  
--- 635,649 ----
  
     If there can be upgrades to serial mode after the acquisition of
  per-method-group locks, then TM methods need to avoid those deadlocks:
!    • When upgrading to a serial transaction, after acquiring exclusive
       rights to the serial lock but before waiting for concurrent active
       transactions to finish (*note Serial lock implementation:
       serial-lock-impl. for details), we have to wake up all active
       transactions waiting on the upgrader's per-method-group locks.
!    • Active transactions blocking on per-method-group locks need to
       check the serial lock and abort if there is a pending serial
       transaction.
!    • Lost wake-ups have to be prevented (e.g., by changing a bit in each
       per-method-group lock before doing the wake-up, and only blocking
       on this lock using a futex if this bit is not group).
  
*************** serial lock (read-to-write upgrade is si
*** 700,707 ****
       if (need_blocking) goto slowpath;
  
     Releasing a lock in this spin-lock version then just consists of
! resetting 'tx->shared_state' to inactive or clearing
! 'serial_lock.exclusive'.
  
     However, we can't rely on a pure spinlock because we need to get the
  OS involved at some time (e.g., when there are more threads than CPUs to
--- 700,707 ----
       if (need_blocking) goto slowpath;
  
     Releasing a lock in this spin-lock version then just consists of
! resetting ‘tx->shared_state’ to inactive or clearing
! ‘serial_lock.exclusive’.
  
     However, we can't rely on a pure spinlock because we need to get the
  OS involved at some time (e.g., when there are more threads than CPUs to
*************** slow path, either based on pthread mutex
*** 713,730 ****
  
  libitm has to consider the following cases of reentrancy:
  
!    * Transaction calls unsafe code that starts a new transaction: The
       outer transaction will become a serial transaction before executing
       unsafe code.  Therefore, nesting within serial transactions must
       work, even if the nested transaction is called from within
       uninstrumented code.
  
!    * Transaction calls either a transactional wrapper or safe code,
       which in turn starts a new transaction: It is not yet defined in
       the specification whether this is allowed.  Thus, it is undefined
       whether libitm supports this.
  
!    * Code that starts new transactions might be called from within any
       part of libitm: This kind of reentrancy would likely be rather
       complex and can probably be avoided.  Therefore, it is not
       supported.
--- 713,730 ----
  
  libitm has to consider the following cases of reentrancy:
  
!    • Transaction calls unsafe code that starts a new transaction: The
       outer transaction will become a serial transaction before executing
       unsafe code.  Therefore, nesting within serial transactions must
       work, even if the nested transaction is called from within
       uninstrumented code.
  
!    • Transaction calls either a transactional wrapper or safe code,
       which in turn starts a new transaction: It is not yet defined in
       the specification whether this is allowed.  Thus, it is undefined
       whether libitm supports this.
  
!    • Code that starts new transactions might be called from within any
       part of libitm: This kind of reentrancy would likely be rather
       complex and can probably be avoided.  Therefore, it is not
       supported.
*************** GNU Free Documentation License
*** 804,810 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 804,810 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 813,819 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 813,819 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** Library Index
*** 1294,1308 ****
  
  
  Tag Table:
! Node: Top1141
! Node: Enabling libitm2045
! Node: C/C++ Language Constructs for TM2440
! Node: The libitm ABI3923
! Ref: txn-code-properties7721
! Node: Internals18814
! Ref: serial-lock-impl28852
! Ref: progress-guarantees33613
! Node: GNU Free Documentation License35891
! Node: Library Index61026
  
  End Tag Table
--- 1294,1313 ----
  
  
  Tag Table:
! Node: Top1139
! Node: Enabling libitm2043
! Node: C/C++ Language Constructs for TM2446
! Node: The libitm ABI3949
! Ref: txn-code-properties7763
! Node: Internals19080
! Ref: serial-lock-impl29188
! Ref: progress-guarantees33963
! Node: GNU Free Documentation License36241
! Node: Library Index61379
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/libphobos/ChangeLog gcc-14.3.0-RC-20260619/libphobos/ChangeLog
*** gcc-14.3.0/libphobos/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libphobos/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,22 ----
+ 2025-09-07  Sam James  <sam@gentoo.org>
+ 
+ 	Backported from master:
+ 	2025-09-07  Sam James  <sam@gentoo.org>
+ 
+ 	* configure.tgt: Add hppa[12]*-*-linux* as a supported target.
+ 
+ 2025-09-07  Sam James  <sam@gentoo.org>
+ 
+ 	Backported from master:
+ 	2025-05-06  Sam James  <sam@gentoo.org>
+ 
+ 	* configure.tgt: Add sparc64-unknown-linux-gnu as a supported target.
+ 
+ 2025-09-07  Matthias Klose  <doko@ubuntu.com>
+ 
+ 	* configure.tgt: Add powerpc64le--linux-gnu as a supported target
+ 	when configured with --with-long-double-format=ieee.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libphobos/configure.tgt gcc-14.3.0-RC-20260619/libphobos/configure.tgt
*** gcc-14.3.0/libphobos/configure.tgt	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libphobos/configure.tgt	Fri Jun 19 06:51:06 2026
*************** case "${target}" in
*** 36,42 ****
    arm*-*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
!   hppa-*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    loongarch*-*-linux*)
--- 36,42 ----
    arm*-*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
!   hppa-*-linux* | hppa[12]*-*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    loongarch*-*-linux*)
*************** case "${target}" in
*** 48,53 ****
--- 48,62 ----
    power*-*-freebsd*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
+   powerpc64le-*linux*)
+ 	LIBPHOBOS_SUPPORTED=yes
+ 	case "$ac_configure_args" in
+ 	  *--with-long-double-format=ieee*)
+ 	    ;;
+ 	  *)
+ 	    LIBDRUNTIME_ONLY=yes
+ 	esac
+ 	;;
    power*-*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	LIBDRUNTIME_ONLY=yes
*************** case "${target}" in
*** 58,64 ****
    s390*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
!   sparc*-*-solaris2.11*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    *-*-darwin9* | *-*-darwin1[01]*)
--- 67,73 ----
    s390*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
!   sparc64-*-linux* | sparc*-*-solaris2.11*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    *-*-darwin9* | *-*-darwin1[01]*)
diff -Nrcpad gcc-14.3.0/libquadmath/libquadmath.info gcc-14.3.0-RC-20260619/libquadmath/libquadmath.info
*** gcc-14.3.0/libquadmath/libquadmath.info	Fri May 23 11:26:18 2025
--- gcc-14.3.0-RC-20260619/libquadmath/libquadmath.info	Fri Jun 19 07:13:08 2026
***************
*** 1,7 ****
! This is libquadmath.info, produced by makeinfo version 6.5 from
  libquadmath.texi.
  
! Copyright (C) 2010-2024 Free Software Foundation, Inc.
  
       Permission is granted to copy, distribute and/or modify this
       document under the terms of the GNU Free Documentation License,
--- 1,7 ----
! This is libquadmath.info, produced by makeinfo version 7.1 from
  libquadmath.texi.
  
! Copyright © 2010-2024 Free Software Foundation, Inc.
  
       Permission is granted to copy, distribute and/or modify this
       document under the terms of the GNU Free Documentation License,
*************** END-INFO-DIR-ENTRY
*** 23,29 ****
     Published by the Free Software Foundation 51 Franklin Street, Fifth
  Floor Boston, MA 02110-1301 USA
  
!    Copyright (C) 2010-2024 Free Software Foundation, Inc.
  
       Permission is granted to copy, distribute and/or modify this
       document under the terms of the GNU Free Documentation License,
--- 23,29 ----
     Published by the Free Software Foundation 51 Franklin Street, Fifth
  Floor Boston, MA 02110-1301 USA
  
!    Copyright © 2010-2024 Free Software Foundation, Inc.
  
       Permission is granted to copy, distribute and/or modify this
       document under the terms of the GNU Free Documentation License,
*************** File: libquadmath.info,  Node: Typedef a
*** 62,102 ****
  1 Typedef and constants
  ***********************
  
! The following data type has been defined via 'typedef'.
  
! '__complex128': '__float128'-based complex number
  
     The following macros are defined, which give the numeric limits of
! the '__float128' data type.
  
! 'FLT128_MAX': largest finite number
! 'FLT128_MIN': smallest positive number with full precision
! 'FLT128_EPSILON': difference between 1 and the next larger
       representable number
! 'FLT128_DENORM_MIN': smallest positive denormalized number
! 'FLT128_MANT_DIG': number of digits in the mantissa (bit precision)
! 'FLT128_MIN_EXP': maximal negative exponent
! 'FLT128_MAX_EXP': maximal positive exponent
! 'FLT128_DIG': number of decimal digits in the mantissa
! 'FLT128_MIN_10_EXP': maximal negative decimal exponent
! 'FLT128_MAX_10_EXP': maximal positive decimal exponent
  
!    The following mathematical constants of type '__float128' are
  defined.
  
! 'M_Eq': the constant e (Euler's number)
! 'M_LOG2Eq': binary logarithm of 2
! 'M_LOG10Eq': common, decimal logarithm of 2
! 'M_LN2q': natural logarithm of 2
! 'M_LN10q': natural logarithm of 10
! 'M_PIq': pi
! 'M_PI_2q': pi divided by two
! 'M_PI_4q': pi divided by four
! 'M_1_PIq': one over pi
! 'M_2_PIq': one over two pi
! 'M_2_SQRTPIq': two over square root of pi
! 'M_SQRT2q': square root of 2
! 'M_SQRT1_2q': one over square root of 2
  
  
  File: libquadmath.info,  Node: Math Library Routines,  Next: I/O Library Routines,  Prev: Typedef and constants,  Up: Top
--- 62,102 ----
  1 Typedef and constants
  ***********************
  
! The following data type has been defined via ‘typedef’.
  
! ‘__complex128’: ‘__float128’-based complex number
  
     The following macros are defined, which give the numeric limits of
! the ‘__float128’ data type.
  
! ‘FLT128_MAX’: largest finite number
! ‘FLT128_MIN’: smallest positive number with full precision
! ‘FLT128_EPSILON’: difference between 1 and the next larger
       representable number
! ‘FLT128_DENORM_MIN’: smallest positive denormalized number
! ‘FLT128_MANT_DIG’: number of digits in the mantissa (bit precision)
! ‘FLT128_MIN_EXP’: maximal negative exponent
! ‘FLT128_MAX_EXP’: maximal positive exponent
! ‘FLT128_DIG’: number of decimal digits in the mantissa
! ‘FLT128_MIN_10_EXP’: maximal negative decimal exponent
! ‘FLT128_MAX_10_EXP’: maximal positive decimal exponent
  
!    The following mathematical constants of type ‘__float128’ are
  defined.
  
! ‘M_Eq’: the constant e (Euler's number)
! ‘M_LOG2Eq’: binary logarithm of 2
! ‘M_LOG10Eq’: common, decimal logarithm of 2
! ‘M_LN2q’: natural logarithm of 2
! ‘M_LN10q’: natural logarithm of 10
! ‘M_PIq’: pi
! ‘M_PI_2q’: pi divided by two
! ‘M_PI_4q’: pi divided by four
! ‘M_1_PIq’: one over pi
! ‘M_2_PIq’: one over two pi
! ‘M_2_SQRTPIq’: two over square root of pi
! ‘M_SQRT2q’: square root of 2
! ‘M_SQRT1_2q’: one over square root of 2
  
  
  File: libquadmath.info,  Node: Math Library Routines,  Next: I/O Library Routines,  Prev: Typedef and constants,  Up: Top
*************** File: libquadmath.info,  Node: Math Libr
*** 106,204 ****
  
  The following mathematical functions are available:
  
! 'acosq': arc cosine function
! 'acoshq': inverse hyperbolic cosine function
! 'asinq': arc sine function
! 'asinhq': inverse hyperbolic sine function
! 'atanq': arc tangent function
! 'atanhq': inverse hyperbolic tangent function
! 'atan2q': arc tangent function
! 'cbrtq': cube root function
! 'ceilq': ceiling value function
! 'copysignq': copy sign of a number
! 'coshq': hyperbolic cosine function
! 'cosq': cosine function
! 'erfq': error function
! 'erfcq': complementary error function
! 'exp2q': base 2 exponential function
! 'expq': exponential function
! 'expm1q': exponential minus 1 function
! 'fabsq': absolute value function
! 'fdimq': positive difference function
! 'finiteq': check finiteness of value
! 'floorq': floor value function
! 'fmaq': fused multiply and add
! 'fmaxq': determine maximum of two values
! 'fminq': determine minimum of two values
! 'fmodq': remainder value function
! 'frexpq': extract mantissa and exponent
! 'hypotq': Eucledian distance function
! 'ilogbq': get exponent of the value
! 'isinfq': check for infinity
! 'isnanq': check for not a number
! 'issignalingq': check for signaling not a number
! 'j0q': Bessel function of the first kind, first order
! 'j1q': Bessel function of the first kind, second order
! 'jnq': Bessel function of the first kind, N-th order
! 'ldexpq': load exponent of the value
! 'lgammaq': logarithmic gamma function
! 'llrintq': round to nearest integer value
! 'llroundq': round to nearest integer value away from zero
! 'logbq': get exponent of the value
! 'logq': natural logarithm function
! 'log10q': base 10 logarithm function
! 'log1pq': compute natural logarithm of the value plus one
! 'log2q': base 2 logarithm function
! 'lrintq': round to nearest integer value
! 'lroundq': round to nearest integer value away from zero
! 'modfq': decompose the floating-point number
! 'nanq': return quiet NaN
! 'nearbyintq': round to nearest integer
! 'nextafterq': next representable floating-point number
! 'powq': power function
! 'remainderq': remainder function
! 'remquoq': remainder and part of quotient
! 'rintq': round-to-nearest integral value
! 'roundq': round-to-nearest integral value, return '__float128'
! 'scalblnq': compute exponent using 'FLT_RADIX'
! 'scalbnq': compute exponent using 'FLT_RADIX'
! 'signbitq': return sign bit
! 'sincosq': calculate sine and cosine simultaneously
! 'sinhq': hyperbolic sine function
! 'sinq': sine function
! 'sqrtq': square root function
! 'tanq': tangent function
! 'tanhq': hyperbolic tangent function
! 'tgammaq': true gamma function
! 'truncq': round to integer, towards zero
! 'y0q': Bessel function of the second kind, first order
! 'y1q': Bessel function of the second kind, second order
! 'ynq': Bessel function of the second kind, N-th order
! 'cabsq' complex absolute value function
! 'cargq': calculate the argument
! 'cimagq' imaginary part of complex number
! 'crealq': real part of complex number
! 'cacoshq': complex arc hyperbolic cosine function
! 'cacosq': complex arc cosine function
! 'casinhq': complex arc hyperbolic sine function
! 'casinq': complex arc sine function
! 'catanhq': complex arc hyperbolic tangent function
! 'catanq': complex arc tangent function
! 'ccosq' complex cosine function:
! 'ccoshq': complex hyperbolic cosine function
! 'cexpq': complex exponential function
! 'cexpiq': computes the exponential function of "i" times a
       real value
! 'clogq': complex natural logarithm
! 'clog10q': complex base 10 logarithm
! 'conjq': complex conjugate function
! 'cpowq': complex power function
! 'cprojq': project into Riemann Sphere
! 'csinq': complex sine function
! 'csinhq': complex hyperbolic sine function
! 'csqrtq': complex square root
! 'ctanq': complex tangent function
! 'ctanhq': complex hyperbolic tangent function
  
  
  File: libquadmath.info,  Node: I/O Library Routines,  Next: GNU Free Documentation License,  Prev: Math Library Routines,  Up: Top
--- 106,204 ----
  
  The following mathematical functions are available:
  
! ‘acosq’: arc cosine function
! ‘acoshq’: inverse hyperbolic cosine function
! ‘asinq’: arc sine function
! ‘asinhq’: inverse hyperbolic sine function
! ‘atanq’: arc tangent function
! ‘atanhq’: inverse hyperbolic tangent function
! ‘atan2q’: arc tangent function
! ‘cbrtq’: cube root function
! ‘ceilq’: ceiling value function
! ‘copysignq’: copy sign of a number
! ‘coshq’: hyperbolic cosine function
! ‘cosq’: cosine function
! ‘erfq’: error function
! ‘erfcq’: complementary error function
! ‘exp2q’: base 2 exponential function
! ‘expq’: exponential function
! ‘expm1q’: exponential minus 1 function
! ‘fabsq’: absolute value function
! ‘fdimq’: positive difference function
! ‘finiteq’: check finiteness of value
! ‘floorq’: floor value function
! ‘fmaq’: fused multiply and add
! ‘fmaxq’: determine maximum of two values
! ‘fminq’: determine minimum of two values
! ‘fmodq’: remainder value function
! ‘frexpq’: extract mantissa and exponent
! ‘hypotq’: Eucledian distance function
! ‘ilogbq’: get exponent of the value
! ‘isinfq’: check for infinity
! ‘isnanq’: check for not a number
! ‘issignalingq’: check for signaling not a number
! ‘j0q’: Bessel function of the first kind, first order
! ‘j1q’: Bessel function of the first kind, second order
! ‘jnq’: Bessel function of the first kind, N-th order
! ‘ldexpq’: load exponent of the value
! ‘lgammaq’: logarithmic gamma function
! ‘llrintq’: round to nearest integer value
! ‘llroundq’: round to nearest integer value away from zero
! ‘logbq’: get exponent of the value
! ‘logq’: natural logarithm function
! ‘log10q’: base 10 logarithm function
! ‘log1pq’: compute natural logarithm of the value plus one
! ‘log2q’: base 2 logarithm function
! ‘lrintq’: round to nearest integer value
! ‘lroundq’: round to nearest integer value away from zero
! ‘modfq’: decompose the floating-point number
! ‘nanq’: return quiet NaN
! ‘nearbyintq’: round to nearest integer
! ‘nextafterq’: next representable floating-point number
! ‘powq’: power function
! ‘remainderq’: remainder function
! ‘remquoq’: remainder and part of quotient
! ‘rintq’: round-to-nearest integral value
! ‘roundq’: round-to-nearest integral value, return ‘__float128’
! ‘scalblnq’: compute exponent using ‘FLT_RADIX’
! ‘scalbnq’: compute exponent using ‘FLT_RADIX’
! ‘signbitq’: return sign bit
! ‘sincosq’: calculate sine and cosine simultaneously
! ‘sinhq’: hyperbolic sine function
! ‘sinq’: sine function
! ‘sqrtq’: square root function
! ‘tanq’: tangent function
! ‘tanhq’: hyperbolic tangent function
! ‘tgammaq’: true gamma function
! ‘truncq’: round to integer, towards zero
! ‘y0q’: Bessel function of the second kind, first order
! ‘y1q’: Bessel function of the second kind, second order
! ‘ynq’: Bessel function of the second kind, N-th order
! ‘cabsq’ complex absolute value function
! ‘cargq’: calculate the argument
! ‘cimagq’ imaginary part of complex number
! ‘crealq’: real part of complex number
! ‘cacoshq’: complex arc hyperbolic cosine function
! ‘cacosq’: complex arc cosine function
! ‘casinhq’: complex arc hyperbolic sine function
! ‘casinq’: complex arc sine function
! ‘catanhq’: complex arc hyperbolic tangent function
! ‘catanq’: complex arc tangent function
! ‘ccosq’ complex cosine function:
! ‘ccoshq’: complex hyperbolic cosine function
! ‘cexpq’: complex exponential function
! ‘cexpiq’: computes the exponential function of "i" times a
       real value
! ‘clogq’: complex natural logarithm
! ‘clog10q’: complex base 10 logarithm
! ‘conjq’: complex conjugate function
! ‘cpowq’: complex power function
! ‘cprojq’: project into Riemann Sphere
! ‘csinq’: complex sine function
! ‘csinhq’: complex hyperbolic sine function
! ‘csqrtq’: complex square root
! ‘ctanq’: complex tangent function
! ‘ctanhq’: complex hyperbolic tangent function
  
  
  File: libquadmath.info,  Node: I/O Library Routines,  Next: GNU Free Documentation License,  Prev: Math Library Routines,  Up: Top
*************** File: libquadmath.info,  Node: I/O Libra
*** 208,232 ****
  
  * Menu:
  
! * 'strtoflt128':          strtoflt128,          Convert from string
! * 'quadmath_snprintf':    quadmath_snprintf,    Convert to string
  
  
  File: libquadmath.info,  Node: strtoflt128,  Next: quadmath_snprintf,  Up: I/O Library Routines
  
! 3.1 'strtoflt128' -- Convert from string
  ========================================
  
! The function 'strtoflt128' converts a string into a '__float128' number.
  
  Syntax
!      '__float128 strtoflt128 (const char *s, char **sp)'
  
  _Arguments_:
       S           input string
       SP          the address of the next character in the string
  
!      The argument SP contains, if not 'NULL', the address of the next
       character following the parts of the string, which have been read.
  
  Example
--- 208,232 ----
  
  * Menu:
  
! * ‘strtoflt128’:          strtoflt128,          Convert from string
! * ‘quadmath_snprintf’:    quadmath_snprintf,    Convert to string
  
  
  File: libquadmath.info,  Node: strtoflt128,  Next: quadmath_snprintf,  Up: I/O Library Routines
  
! 3.1 ‘strtoflt128’ -- Convert from string
  ========================================
  
! The function ‘strtoflt128’ converts a string into a ‘__float128’ number.
  
  Syntax
!      ‘__float128 strtoflt128 (const char *s, char **sp)’
  
  _Arguments_:
       S           input string
       SP          the address of the next character in the string
  
!      The argument SP contains, if not ‘NULL’, the address of the next
       character following the parts of the string, which have been read.
  
  Example
*************** Example
*** 244,262 ****
  
  File: libquadmath.info,  Node: quadmath_snprintf,  Prev: strtoflt128,  Up: I/O Library Routines
  
! 3.2 'quadmath_snprintf' -- Convert to string
  ============================================
  
! The function 'quadmath_snprintf' converts a '__float128' floating-point
! number into a string.  It is a specialized alternative to 'snprintf',
  where the format string is restricted to a single conversion specifier
! with 'Q' modifier and conversion specifier 'e', 'E', 'f', 'F', 'g', 'G',
! 'a' or 'A', with no extra characters before or after the conversion
! specifier.  The '%m$' or '*m$' style must not be used in the format.
  
  Syntax
!      'int quadmath_snprintf (char *s, size_t size, const char *format,
!      ...)'
  
  _Arguments_:
       S           output string
--- 244,262 ----
  
  File: libquadmath.info,  Node: quadmath_snprintf,  Prev: strtoflt128,  Up: I/O Library Routines
  
! 3.2 ‘quadmath_snprintf’ -- Convert to string
  ============================================
  
! The function ‘quadmath_snprintf’ converts a ‘__float128’ floating-point
! number into a string.  It is a specialized alternative to ‘snprintf’,
  where the format string is restricted to a single conversion specifier
! with ‘Q’ modifier and conversion specifier ‘e’, ‘E’, ‘f’, ‘F’, ‘g’, ‘G’,
! ‘a’ or ‘A’, with no extra characters before or after the conversion
! specifier.  The ‘%m$’ or ‘*m$’ style must not be used in the format.
  
  Syntax
!      ‘int quadmath_snprintf (char *s, size_t size, const char *format,
!      ...)’
  
  _Arguments_:
       S           output string
*************** _Arguments_:
*** 265,271 ****
  
  Note
       On some targets when supported by the C library hooks are installed
!      for 'printf' family of functions, so that 'printf ("%Qe", 1.2Q);'
       etc. works too.
  
  Example
--- 265,271 ----
  
  Note
       On some targets when supported by the C library hooks are installed
!      for ‘printf’ family of functions, so that ‘printf ("%Qe", 1.2Q);’
       etc. works too.
  
  Example
*************** GNU Free Documentation License
*** 313,319 ****
  
                       Version 1.3, 3 November 2008
  
!      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
--- 313,319 ----
  
                       Version 1.3, 3 November 2008
  
!      Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
       <https://www.fsf.org>
  
       Everyone is permitted to copy and distribute verbatim copies
*************** GNU Free Documentation License
*** 322,328 ****
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document "free" in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
--- 322,328 ----
    0. PREAMBLE
  
       The purpose of this License is to make a manual, textbook, or other
!      functional and useful document “free” in the sense of freedom: to
       assure everyone the effective freedom to copy and redistribute it,
       with or without modifying it, either commercially or
       noncommercially.  Secondarily, this License preserves for the
*************** reported via <https://gcc.gnu.org/bugs/>
*** 799,811 ****
  
  
  Tag Table:
! Node: Top1633
! Node: Typedef and constants2367
! Node: Math Library Routines3786
! Node: I/O Library Routines7623
! Node: strtoflt1287948
! Node: quadmath_snprintf8708
! Node: GNU Free Documentation License10919
! Node: Reporting Bugs36071
  
  End Tag Table
--- 799,816 ----
  
  
  Tag Table:
! Node: Top1631
! Node: Typedef and constants2365
! Node: Math Library Routines3896
! Node: I/O Library Routines8113
! Node: strtoflt1288446
! Node: quadmath_snprintf9226
! Node: GNU Free Documentation License11509
! Node: Reporting Bugs36664
  
  End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-14.3.0/libsanitizer/ChangeLog gcc-14.3.0-RC-20260619/libsanitizer/ChangeLog
*** gcc-14.3.0/libsanitizer/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libsanitizer/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,22 ----
+ 2026-04-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* sanitizer_common/sanitizer_platform_limits_posix.cpp: Cherry picked
+ 	from LLVM commit 3dc4fd6dd41100f051a63642f449b16324389c96.
+ 
+ 2025-07-31  Florian Weimer  <fweimer@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-02  Florian Weimer  <fweimer@redhat.com>
+ 		    Tom Stellard  <tstellar@redhat.com>
+ 
+ 	* sanitizer_common/sanitizer_common_interceptors_ioctl.inc: Cherry
+ 	picked from LLVM commit 59978b21ad9c65276ee8e14f26759691b8a65763.
+ 	* sanitizer_common/sanitizer_platform_limits_posix.cpp: Likewise.
+ 	* sanitizer_common/sanitizer_platform_limits_posix.h: Likewise.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc gcc-14.3.0-RC-20260619/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
*** gcc-14.3.0/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc	Fri Jun 19 06:51:06 2026
*************** static void ioctl_table_fill() {
*** 338,354 ****
    _(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int));
    _(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int));
    _(TCFLSH, NONE, 0);
- #if SANITIZER_GLIBC
-   _(TCGETA, WRITE, struct_termio_sz);
- #endif
    _(TCGETS, WRITE, struct_termios_sz);
    _(TCSBRK, NONE, 0);
    _(TCSBRKP, NONE, 0);
- #if SANITIZER_GLIBC
-   _(TCSETA, READ, struct_termio_sz);
-   _(TCSETAF, READ, struct_termio_sz);
-   _(TCSETAW, READ, struct_termio_sz);
- #endif
    _(TCSETS, READ, struct_termios_sz);
    _(TCSETSF, READ, struct_termios_sz);
    _(TCSETSW, READ, struct_termios_sz);
--- 338,346 ----
diff -Nrcpad gcc-14.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp gcc-14.3.0-RC-20260619/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
*** gcc-14.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp	Fri Jun 19 06:51:06 2026
*************** typedef struct user_fpregs elf_fpregset_
*** 145,160 ****
  #if defined(__mips64)
  # include <sys/procfs.h>
  #endif
! #include <sys/user.h>
! #include <linux/if_eql.h>
! #include <linux/if_plip.h>
! #include <linux/lp.h>
! #include <linux/mroute.h>
! #include <linux/mroute6.h>
! #include <linux/scc.h>
! #include <linux/serial.h>
! #include <sys/msg.h>
! #include <sys/ipc.h>
  #endif  // SANITIZER_ANDROID
  
  #include <link.h>
--- 145,159 ----
  #if defined(__mips64)
  # include <sys/procfs.h>
  #endif
! #      include <linux/if_eql.h>
! #      include <linux/if_plip.h>
! #      include <linux/lp.h>
! #      include <linux/mroute.h>
! #      include <linux/mroute6.h>
! #      include <linux/serial.h>
! #      include <sys/ipc.h>
! #      include <sys/msg.h>
! #      include <sys/user.h>
  #endif  // SANITIZER_ANDROID
  
  #include <link.h>
*************** unsigned struct_ElfW_Phdr_sz = sizeof(El
*** 479,487 ****
    unsigned struct_input_id_sz = sizeof(struct input_id);
    unsigned struct_mtpos_sz = sizeof(struct mtpos);
    unsigned struct_rtentry_sz = sizeof(struct rtentry);
- #if SANITIZER_GLIBC || SANITIZER_ANDROID
-   unsigned struct_termio_sz = sizeof(struct termio);
- #endif
    unsigned struct_vt_consize_sz = sizeof(struct vt_consize);
    unsigned struct_vt_sizes_sz = sizeof(struct vt_sizes);
    unsigned struct_vt_stat_sz = sizeof(struct vt_stat);
--- 478,483 ----
*************** unsigned struct_ElfW_Phdr_sz = sizeof(El
*** 520,527 ****
    unsigned struct_kbsentry_sz = sizeof(struct kbsentry);
    unsigned struct_mtconfiginfo_sz = sizeof(struct mtconfiginfo);
    unsigned struct_nr_parms_struct_sz = sizeof(struct nr_parms_struct);
-   unsigned struct_scc_modem_sz = sizeof(struct scc_modem);
-   unsigned struct_scc_stat_sz = sizeof(struct scc_stat);
    unsigned struct_serial_multiport_struct_sz
        = sizeof(struct serial_multiport_struct);
    unsigned struct_serial_struct_sz = sizeof(struct serial_struct);
--- 516,521 ----
*************** unsigned struct_ElfW_Phdr_sz = sizeof(El
*** 758,770 ****
    unsigned IOCTL_SOUND_PCM_WRITE_FILTER = SOUND_PCM_WRITE_FILTER;
  #endif // SOUND_VERSION
    unsigned IOCTL_TCFLSH = TCFLSH;
-   unsigned IOCTL_TCGETA = TCGETA;
    unsigned IOCTL_TCGETS = TCGETS;
    unsigned IOCTL_TCSBRK = TCSBRK;
    unsigned IOCTL_TCSBRKP = TCSBRKP;
-   unsigned IOCTL_TCSETA = TCSETA;
-   unsigned IOCTL_TCSETAF = TCSETAF;
-   unsigned IOCTL_TCSETAW = TCSETAW;
    unsigned IOCTL_TCSETS = TCSETS;
    unsigned IOCTL_TCSETSF = TCSETSF;
    unsigned IOCTL_TCSETSW = TCSETSW;
--- 752,760 ----
diff -Nrcpad gcc-14.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h gcc-14.3.0-RC-20260619/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
*** gcc-14.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h	Fri Jun 19 06:51:06 2026
*************** extern unsigned struct_hd_geometry_sz;
*** 1012,1018 ****
  extern unsigned struct_input_absinfo_sz;
  extern unsigned struct_input_id_sz;
  extern unsigned struct_mtpos_sz;
- extern unsigned struct_termio_sz;
  extern unsigned struct_vt_consize_sz;
  extern unsigned struct_vt_sizes_sz;
  extern unsigned struct_vt_stat_sz;
--- 1012,1017 ----
*************** extern unsigned IOCTL_SNDCTL_COPR_SENDMS
*** 1257,1269 ****
  extern unsigned IOCTL_SNDCTL_COPR_WCODE;
  extern unsigned IOCTL_SNDCTL_COPR_WDATA;
  extern unsigned IOCTL_TCFLSH;
- extern unsigned IOCTL_TCGETA;
  extern unsigned IOCTL_TCGETS;
  extern unsigned IOCTL_TCSBRK;
  extern unsigned IOCTL_TCSBRKP;
- extern unsigned IOCTL_TCSETA;
- extern unsigned IOCTL_TCSETAF;
- extern unsigned IOCTL_TCSETAW;
  extern unsigned IOCTL_TCSETS;
  extern unsigned IOCTL_TCSETSF;
  extern unsigned IOCTL_TCSETSW;
--- 1256,1264 ----
diff -Nrcpad gcc-14.3.0/libstdc++-v3/ChangeLog gcc-14.3.0-RC-20260619/libstdc++-v3/ChangeLog
*** gcc-14.3.0/libstdc++-v3/ChangeLog	Fri May 23 11:02:57 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/ChangeLog	Fri Jun 19 06:51:06 2026
***************
*** 1,3 ****
--- 1,815 ----
+ 2026-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* include/bits/regex_compiler.h (_Compiler::_M_pop): Uglify ret
+ 	variable name.
+ 
+ 2026-05-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122062
+ 	* include/bits/random.tcc (__detail::__normalize): Use void cast
+ 	for operands of comma operator.
+ 	(piecewise_linear_distribution): Likewise.
+ 	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc:
+ 	New test.
+ 
+ 2026-05-21  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2026-02-12  Xi Ruoyao  <xry111@xry111.site>
+ 		    Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/17_intro/badnames.cc (__unused): Do not define.
+ 	* testsuite/17_intro/names.cc [glibc == 2.43] (__unused): Undef.
+ 
+ 2026-05-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdata.zi: Import new file from 2026b release.
+ 
+ 2026-05-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/125369
+ 	* include/bits/chrono_io.h (__detail::_Parser::operator()):
+ 	Check for errors when parsing digits for a %z format.
+ 	* testsuite/std/time/parse/125369.cc: New test.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/chrono (chrono::__detail::__get_leap_second_info):
+ 	Update expiry date for leap seconds list.
+ 	* src/c++20/tzdb.cc (tzdb_list::_Node::_S_read_leap_seconds):
+ 	Likewise.
+ 	* src/c++20/tzdata.zi: Import new file from 2026a release.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/chrono (chrono::__detail::__get_leap_second_info):
+ 	Update expiry date for leap seconds list.
+ 	* src/c++20/tzdb.cc (tzdb_list::_Node::_S_read_leap_seconds):
+ 	Likewise.
+ 	* src/c++20/tzdata.zi: Import new file from 2025c release.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120390
+ 	* include/bits/stl_construct.h (_Destroy_aux::__destroy_n): New
+ 	static member function.
+ 	(_Destroy_aux<true>::__destroy_n): Likewise.
+ 	(_Destroy_n_aux): Remove.
+ 	(_Destroy(ForwardIterator, ForwardIterator)): Remove
+ 	static_assert. Use is_trivially_destructible instead of
+ 	__has_trivial_destructor.
+ 	(_Destroy_n): Likewise. Use _Destroy_aux::__destroy_n instead of
+ 	_Destroy_n_aux::__destroy_n.
+ 	* testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc:
+ 	Adjust dg-error strings. Move destroy_n tests to ...
+ 	* testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_n_neg.cc:
+ 	New test.
+ 	* testsuite/23_containers/vector/cons/destructible_debug_neg.cc:
+ 	Adjust dg-error strings.
+ 	* testsuite/23_containers/vector/cons/destructible_neg.cc:
+ 	Likewise.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_construct.h (_Destroy(FwdIter, FwdIter)): Use
+ 	'if constexpr' instead of dispatching to a member function of a
+ 	class template.
+ 	(_Destroy_n(FwdIter, Size)): Likewise.
+ 	(_Destroy_aux, _Destroy_n_aux): Only define for C++98.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/102259
+ 	* config/io/basic_file_stdio.cc (basic_file::xsgetn): Limit n to
+ 	_GLIBCXX_MAX_READ_SIZE if that macro is defined.
+ 	* config/os/bsd/darwin/os_defines.h (_GLIBCXX_MAX_READ_SIZE):
+ 	Define to INT_MAX-1.
+ 	* config/os/bsd/freebsd/os_defines.h (_GLIBCXX_MAX_READ_SIZE):
+ 	Likewise.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_path.cc (path::operator+=): Use pointer
+ 	comparison to detect aliasing instead of a loop.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120029
+ 	* src/c++17/fs_path.cc (path::operator+=(const path&)): Handle
+ 	parameters that alias the path or one of its components.
+ 	* testsuite/27_io/filesystem/path/concat/120029.cc: New test.
+ 	* testsuite/experimental/filesystem/path/concat/120029.cc: New
+ 	test.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/std/time/clock/local/io.cc: Call test_format.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120293
+ 	* include/bits/chrono_io.h (_M_format_to_ostream): Add special
+ 	case for local_time convertible to local_days.
+ 	* testsuite/std/time/clock/local/io.cc: Check formatting of
+ 	chrono::local_days.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/chrono_io.h (from_stream): Fix conversions in
+ 	overloads for gps_time and tai_time.
+ 	* testsuite/std/time/clock/file/io.cc: Test round tripping using
+ 	chrono::parse. Add additional std::format tests.
+ 	* testsuite/std/time/clock/gps/io.cc: Likewise.
+ 	* testsuite/std/time/clock/local/io.cc: Likewise.
+ 	* testsuite/std/time/clock/tai/io.cc: Likewise.
+ 	* testsuite/std/time/clock/utc/io.cc: Likewise.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-30  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/chrono_io.h (__local_fmt_t): Remove unused
+ 	declaration.
+ 	(__formatter_chrono::_M_format_to_ostream): Add explicit
+ 	handling for specializations of __local_time_fmt, including the
+ 	time zone abbreviation in the output if __is_neg is true.
+ 	(formatter<chrono::tai_time<D>>::format): Add comment.
+ 	(formatter<chrono::gps_time<D>>::format): Likewise.
+ 	(formatter<chrono::__detail::__local_time_fmt::format): Call
+ 	_M_format with true for the __is_neg flag.
+ 	* testsuite/std/time/clock/gps/io.cc: Remove unused variable.
+ 	* testsuite/std/time/clock/local/io.cc: Fix test error that
+ 	checked tai_time instead of local_time. Add tests for
+ 	local-time-format-t formatting.
+ 	* testsuite/std/time/clock/system/io.cc: Check empty
+ 	chrono-specs.
+ 	* testsuite/std/time/clock/tai/io.cc: Likewise.
+ 	* testsuite/std/time/zoned_time/io.cc: Likewise.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121771
+ 	* include/std/tuple (tuple::tuple(const Elements&...)): Use
+ 	type_identity_t to prevent constructor being used for CTAD.
+ 	(tuple::tuple(allocator_arg_t, const A&, const Elements&...)):
+ 	Likewise.
+ 	* testsuite/20_util/tuple/cons/121771.cc: New test.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122567
+ 	* src/c++20/tzdb.cc (tzdb::current_zone): Loop over all trailing
+ 	components of /etc/localtime path. Use readlink instead of
+ 	std::filesystem::read_symlink.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/123100
+ 	* include/std/sstream (basic_stringbuf::str()&&): Handle the
+ 	case where _M_string is not being used for the buffer.
+ 	* testsuite/27_io/basic_stringbuf/str/char/123100.cc: New test.
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-05-05  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/109965
+ 	* doc/doxygen/mainpage.html: Link to topics.html instead of
+ 	modules.html
+ 
+ 2026-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/118088
+ 	* include/bits/stl_queue.h (priority_queue(priority_queue&&)):
+ 	Clear the source object after moving from it.
+ 	(priority_queue(priority_queue&&, const Alloc&)): Likewise.
+ 	(operator=(priority_queue&&)): Likewise.
+ 	* testsuite/23_containers/priority_queue/118088.cc: New test.
+ 
+ 2026-04-22  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-04-14  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/version.def (stdbit_h, stdckdint_h): Define.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/c_compatibility/stdbit.h (__cpp_lib_stdbit_h): Define
+ 	and use it in guards.
+ 	* include/c_compatibility/stdckdint.h (__cpp_lib_stdckdint_h):
+ 	Define and use it in guards.
+ 
+ 2026-03-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/122842
+ 	* include/bits/ranges_base.h (__access:_CBegin): Define in
+ 	terms of const_iterator directly, not const_iterator_t.
+ 	(__access::_CEnd): Likewise in terms of const_sentinel vs
+ 	const_sentinel_t.
+ 	(const_iterator_t): Move down definition and define in terms
+ 	of ranges::cbegin as per LWG 3946.
+ 	(const_sentinel_t): Likewise in terms of ranges::cend.
+ 	* testsuite/24_iterators/const_iterator/1.cc (test02): Correct
+ 	test for int[], std::array and std::vector.  Also test
+ 	std::string.
+ 
+ 2026-03-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdb.cc [_AIX]: Change #ifndef to #ifdef.
+ 
+ 2026-03-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/124568
+ 	* testsuite/24_iterators/istreambuf_iterator/105580.cc: Add
+ 	no_pch option.
+ 
+ 2026-03-16  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-05  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/124124
+ 	* testsuite/29_atomics/atomic/cons/zero_padding.cc: Limit size of
+ 	test types to four bytes.
+ 
+ 2026-03-16  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/105580
+ 	* include/std/streambuf (streambuf::gptr, streambuf::egptr)
+ 	(streambuf::gbump): Surround with pragma disabling -Wnull-dereference.
+ 	* testsuite/24_iterators/istreambuf_iterator/105580.cc: New test.
+ 	(cherry picked from commits
+ 	8758503918a91dacff4dbc7126eced21787fbfc9
+ 	bfc2b87f8244a13ab00e8e3fe2af1d6d18fcaa36
+ 	a523d1ecc89dcb7ea205e3de22d00443d4a0d91d)
+ 
+ 2026-03-13  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-12  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/114865
+ 	* include/std/atomic (atomic<_Tp>::atomic(_Tp)) [C++11]:
+ 	Enable __builtin_clear_padding logic.
+ 	* testsuite/29_atomics/atomic/compare_exchange_padding.cc: Enable
+ 	this test in earlier modes, including C++11.
+ 	* testsuite/29_atomics/atomic/cons/zero_padding.cc [C++11]:
+ 	Enable tests verifying cleared padding bits for a non-static-init
+ 	std::atomic object.
+ 
+ 2026-03-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-03-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/124363
+ 	* include/std/string_view: Adjust comment on #endif to match #if
+ 	condition. Likewise for header guard.
+ 
+ 2026-02-26  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/123875
+ 	* include/bits/atomic_base.h (__atomic_impl::__clear_padding):
+ 	Use if constexpr unconditionally.
+ 	(__atomic_float<_Fp>::__atomic_float(_Fp)): Skip __clear_padding
+ 	call for constant evaluation.
+ 	* include/std/atomic (atomic<_Tp>::atomic(_Tp)): Likewise.
+ 	* testsuite/29_atomics/atomic/cons/zero_padding.cc: New test.
+ 	* testsuite/29_atomics/atomic_float/zero_padding.cc: New test.
+ 	(cherry picked from commits
+ 	6b550d69fe7cb62ea6e240ce7a4ba29ce33aa1b1
+ 	682c95b808724e6f876ea709b873ac6771704d7b
+ 	060d7c2a9c1fe16d23d98a74287fdb7c73ddb784
+ 	f3ba5ad088cebe117f857329a35b95d18d97a808)
+ 
+ 2026-02-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* python/libstdcxx/v6/xmethods.py (ListMethodsMatcher.match):
+ 	Fix lookup for node type.
+ 
+ 2026-02-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122821
+ 	* python/libstdcxx/v6/xmethods.py (_versioned_namespace): Remove
+ 	global variable.
+ 	(is_specialization_of): Do not use _versioned_namespace. Add
+ 	__debug:: to regex.
+ 
+ 2026-02-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/123991
+ 	* include/bits/basic_string.h (compare(size_type, size_type, T)):
+ 	Remove noexcept-specifier.
+ 	(compare(size_type, size_type, T, size_type, size_type)):
+ 	Likewise.
+ 	* include/bits/cow_string.h (compare(size_type, size_type, T)):
+ 	Remove noexcept-specifier.
+ 	(compare(size_type, size_type, T, size_type, size_type)):
+ 	Likewise.
+ 	* testsuite/21_strings/basic_string/operations/compare/char/123991.cc:
+ 	New test.
+ 	* testsuite/21_strings/basic_string/operations/compare/wchar_t/123991.cc:
+ 	New test.
+ 
+ 2026-02-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-02-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/124024
+ 	* include/bits/out_ptr.h (out_ptr): Fix doxygen comment to refer
+ 	to the right function.
+ 	(inout_ptr): Improve markup in doxygen comment.
+ 
+ 2026-02-06  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-26  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/90192
+ 	* include/bits/stl_vector.h (vector<T>::_M_fill_append): Declare.
+ 	(vector<T>::fill): Use _M_fill_append instead of _M_fill_insert.
+ 	* include/bits/vector.tcc (vector<T>::_M_fill_append): Define
+ 	(vector<T>::_M_fill_insert): Delegate to _M_fill_append when
+ 	elements are appended.
+ 	* testsuite/23_containers/vector/modifiers/moveable.cc: Updated
+ 	copycount for inserting at the end (appending).
+ 	* testsuite/23_containers/vector/modifiers/resize.cc: New test.
+ 	* testsuite/backward/hash_set/check_construct_destroy.cc: Updated
+ 	copycount, the hash_set constructor uses insert to fill buckets
+ 	with nullptrs.
+ 
+ 2026-02-05  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	Backported from master:
+ 	2026-01-19  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/114153
+ 	* include/bits/ranges_cmp.h (__detail::__less_builtin_ptr_cmp):
+ 	Add __not_overloaded_spaceship spaceship check.
+ 	* include/bits/stl_function.h (greater<void>::operator())
+ 	(less<void>::operator(), greater_equal<void>::operator())
+ 	(less_equal<void>::operator()): Implement using if constexpr.
+ 	(greater<void>::__S_cmp, less<void>::__S_cmp)
+ 	(greater_equal<void>::__ptr_comp, less_equal<void>::S_cmp):
+ 	Remove.
+ 	(greater<void>::__ptr_cmp, less<void>::__ptr_cmp)
+ 	(greater_equal<void>::__ptr_comp, less_equal<void>::ptr_cmp): Change
+ 	tostatic constexpr variable. Define in terms of requires expressions
+ 	and __not_overloaded_spaceship check.
+ 	* include/std/concepts: (__detail::__not_overloaded_spaceship):
+ 	Define.
+ 	* libsupc++/compare: (__detail::__3way_builtin_ptr_cmp): Use
+ 	__not_overloaded_spaceship concept.
+ 	* testsuite/20_util/function_objects/comparisons_pointer_spaceship.cc: New test.
+ 
+ 2026-01-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/Makefile.am: Add stdckdint.h.
+ 	* include/Makefile.in: Regenerate.
+ 	* include/c_compatibility/stdckdint.h: New file.
+ 	* testsuite/26_numerics/stdckdint/1.cc: New test.
+ 	* testsuite/26_numerics/stdckdint/2_neg.cc: New test.
+ 
+ 2026-01-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/Makefile.am: Add stdbit.h.
+ 	* include/Makefile.in: Regenerate.
+ 	* include/c_compatibility/stdbit.h: New file.
+ 	* testsuite/20_util/stdbit/1.cc: New test.
+ 	* testsuite/20_util/stdbit/2_neg.cc: New test.
+ 
+ 2026-01-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/105857
+ 	* config/locale/dragonfly/codecvt_members.cc (do_length): Limit
+ 	size of alloca buffer to 4k.
+ 	* config/locale/gnu/codecvt_members.cc (do_length): Likewise.
+ 	* testsuite/22_locale/codecvt/length/wchar_t/105857.cc: New
+ 	test.
+ 
+ 2026-01-23  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-01-10  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	* src/c++11/system_error.cc (system_error_category) [_WIN32]:
+ 	Use FormatMessageA function instead of FormatMessage macro.
+ 	* testsuite/19_diagnostics/error_category/system_category.cc:
+ 	Fix typo in __MINGW32__ macro name.  Adjust behavior on the
+ 	mingw32 target.
+ 
+ 2026-01-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/123147
+ 	* include/bits/chrono_io.h (_Parser::operator()) <%S>: Use a
+ 	buffer of narrow characters to be parsed by std::from_chars.
+ 	* testsuite/std/time/parse/parse.cc: Check wchar_t parsing.
+ 
+ 2026-01-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-12-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/atomic_wait.h (__detail::__atomic_compare): Use
+ 	std::addressof instead of &.
+ 	* include/std/atomic (atomic::wait, atomic::notify_one)
+ 	(atomic::notify_all): Likewise.
+ 
+ 2025-11-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122726
+ 	* src/filesystem/ops-common.h [_GLIBCXX_FILESYSTEM_IS_WINDOWS]
+ 	(rename): Use __last_system_error to set errno accurately.
+ 	* testsuite/27_io/filesystem/operations/rename.cc: Test
+ 	error_code matches errc::no_such_file_or_directory.
+ 
+ 2025-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/any: Add diagnostic pragmas to disable warning
+ 	about std::aligned_storage being deprecated.
+ 
+ 2025-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/atomic_base.h (__atomic_base<T*>::_M_type_size):
+ 	Replace overloaded functions with static _S_type_size.
+ 	* include/std/atomic (atomic<T*>): Use is_object_v instead of
+ 	is_object.
+ 	* testsuite/29_atomics/atomic/operators/pointer_partial_void.cc:
+ 	Add dg-warning for -Wpointer-arith warning.
+ 
+ 2025-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/20_util/bind/dangling_ref.cc: Add an additional
+ 	dg-warning for -Wreturn-local-addr warning.
+ 	* testsuite/30_threads/packaged_task/cons/dangling_ref.cc:
+ 	Likewise.
+ 
+ 2025-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-11-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122661
+ 	* include/bits/forward_list.h (forward_list::assign(I, I)): Fix
+ 	value category in is_assignable check.
+ 	* testsuite/23_containers/forward_list/modifiers/122661.cc:
+ 	New test.
+ 
+ 2025-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/118681
+ 	* src/c++17/memory_resource.cc (choose_block_size): New
+ 	function.
+ 	(synchronized_pool_resource::do_allocate): Use choose_block_size
+ 	to determine appropriate block size.
+ 	(synchronized_pool_resource::do_deallocate): Likewise
+ 	(unsynchronized_pool_resource::do_allocate): Likewise.
+ 	(unsynchronized_pool_resource::do_deallocate): Likewise
+ 	* testsuite/20_util/synchronized_pool_resource/118681.cc: New
+ 	test.
+ 	* testsuite/20_util/unsynchronized_pool_resource/118681.cc: New
+ 	test.
+ 
+ 2025-10-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122322
+ 	* configure.ac (with_newlib) <*-rtems*>: Remove
+ 	HAVE_SYS_IOCT4YL_H, _GLIBCXX_USE_LINK, _GLIBCXX_USE_READLINK,
+ 	_GLIBCXX_USE_SYMLINK, _GLIBCXX_USE_TRUNCATE, and
+ 	_GLIBCXX_USE_FDOPENDIR. Remove duplicates.
+ 	* configure: Regenerate.
+ 
+ 2025-10-15  Joel Sherrill  <joel@rtems.org>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac (newlib, *-rtems*): Add HAVE_SYS_IOCTL_H,
+ 	HAVE_SYS_STAT_H, HAVE_SYS_TYPES_H, HAVE_S_ISREG, HAVE_UNISTD_H,
+ 	HAVE_UNLINKAT, _GLIBCXX_USE_CHMOD, _GLIBCXX_USE_MKDIR,
+ 	_GLIBCXX_USE_CHDIR, _GLIBCXX_USE_GETCWD, _GLIBCXX_USE_UTIME,
+ 	_GLIBCXX_USE_LINK, _GLIBCXX_USE_READLINK, _GLIBCXX_USE_SYMLINK,
+ 	_GLIBCXX_USE_TRUNCATE and _GLIBCXX_USE_FDOPENDIR.
+ 
+ 2025-10-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/121827
+ 	* include/precompiled/extc++.h: Don't include ext/cast.h which is an
+ 	internal header.
+ 	* include/ext/pointer.h: Include bits/c++config.h before
+ 	#if _GLIBCXX_HOSTED.
+ 
+ 2025-10-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122168
+ 	* testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Add
+ 	dg-error for additional error seen with -Wsystem-headers.
+ 
+ 2025-10-01  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-24  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* testsuite/17_intro/names.cc: Undefine 'u' on s390*-linux.
+ 
+ 2025-10-01  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-17  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* testsuite/20_util/bind/dangling_ref.cc: Compile with
+ 	-Wsystem-headers.
+ 	* testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Likewise.
+ 	* testsuite/29_atomics/atomic/operators/pointer_partial_void.cc:
+ 	Likewise.
+ 	* testsuite/30_threads/packaged_task/cons/dangling_ref.cc:
+ 	Likewise.
+ 
+ 2025-09-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117276
+ 	* include/pstl/parallel_backend_tbb.h (__func_task::finalize):
+ 	Make deallocation unconditional.
+ 
+ 2025-09-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/unique_ptr.h: Remove blank line.
+ 
+ 2025-09-09  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-05  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* doc/html/manual/status.html: Regenerate.
+ 	* doc/xml/manual/status_cxx2011.xml: Add entry for bad_function_call.
+ 	* doc/xml/manual/status_cxx2017.xml: Add entries for bad_any_cast
+ 	and nullptr_t output. Update entry for sf.cmath. Fix stable name for
+ 	mem.res.
+ 
+ 2025-09-09  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-05  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* doc/html/manual/status.html: Regenerate the file.
+ 	* doc/xml/manual/status_cxx2017.xml: Addd more entires.
+ 
+ 2025-09-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120698
+ 	* doc/xml/manual/configure.xml: Do not claim that vtv is enabled
+ 	by default.
+ 	* doc/html/manual/configure.html: Regenerate.
+ 
+ 2025-09-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/110853
+ 	* include/bits/stl_pair.h [C++20] (pair(const T1&, const T2&)):
+ 	Use std::type_identity_t<T1> for first parameter.
+ 	* testsuite/20_util/pair/cons/110853.cc: New test.
+ 
+ 2025-09-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121745
+ 	* include/bits/stl_pair.h (get): Use forward instead of move in
+ 	std::get<T> overloads for rvalue pairs.
+ 	* testsuite/20_util/pair/astuple/get_by_type.cc: Check all value
+ 	categories and cv-qualification.
+ 
+ 2025-09-04  Yihan Wang  <yronglin777@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-09-03  Yihan Wang  <yronglin777@gmail.com>
+ 
+ 	* include/std/expected (expected(U&&)): Add missing constraint
+ 	as per LWG 4222.
+ 	* testsuite/20_util/expected/lwg4222.cc: New test.
+ 
+ 2025-09-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/expected (expected): Constrain constructors to
+ 	prevent problematic bool conversions, as per LWG 3836.
+ 	* testsuite/20_util/expected/lwg3836.cc: New test.
+ 
+ 2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-01  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/23_containers/unordered_set/pr115285.cc: Include
+ 	missing header for std::vector.
+ 
+ 2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/regex_compiler.h (_Compiler::_S_validate): Add
+ 	diagnostic pragma to disable -Wswitch warning.
+ 
+ 2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121496
+ 	* include/std/mutex (__timed_mutex_impl::_M_try_wait_until):
+ 	Change preprocessor condition to use #if instead of #ifdef.
+ 	(recursive_timed_mutex::_M_clocklock): Likewise.
+ 	* testsuite/30_threads/timed_mutex/121496.cc: New test.
+ 
+ 2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-08-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121374
+ 	* include/std/limits (numeric_limits<__float128>::max_digits10):
+ 	Fix value.
+ 	* testsuite/18_support/numeric_limits/128bit.cc: Check value.
+ 
+ 2025-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121097
+ 	* include/c_global/cmath (hypot): Use __promote_3 instead of
+ 	__promoted.
+ 
+ 2025-06-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-05  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120548
+ 	* include/std/format (__formatter_fp::_M_localize): Do not
+ 	include a leading sign character in the string to be grouped.
+ 	* testsuite/std/format/functions/format.cc: Check grouping when
+ 	sign is present in the output.
+ 
+ 2025-06-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/format (__formatter_fp::_M_localize): Add comments
+ 	and micro-optimize string copy.
+ 
+ 2025-06-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-06-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/99832
+ 	* include/bits/chrono.h (system_clock::to_time_t): Add
+ 	always_inline attribute to be agnostic to the underlying type of
+ 	time_t.
+ 	(system_clock::from_time_t): Add always_inline for consistency
+ 	with to_time_t.
+ 	* testsuite/20_util/system_clock/99832.cc: New test.
+ 
+ 2025-06-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/faq.xml: Update URL for archived SGI STL docs.
+ 	* doc/xml/manual/containers.xml: Likewise.
+ 	* doc/xml/manual/extensions.xml: Likewise.
+ 	* doc/xml/manual/using.xml: Likewise.
+ 	* doc/xml/manual/utilities.xml: Likewise.
+ 	* doc/html/*: Regenerate.
+ 
+ 2025-06-05  Giuseppe D'Angelo  <giuseppe.dangelo@kdab.com>
+ 
+ 	Backported from master:
+ 	2025-03-14  Giuseppe D'Angelo  <giuseppe.dangelo@kdab.com>
+ 
+ 	* include/bits/shared_ptr_base.h (lock): Fixed a compile error
+ 	when calling lock() on a weak_ptr<T[]>, by removing an
+ 	erroneous usage of element_type from within lock().
+ 	* testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc:
+ 	Add more tests for array types.
+ 	* testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc:
+ 	Likewise.
+ 	* testsuite/20_util/shared_ptr/requirements/1.cc: New test.
+ 	* testsuite/20_util/weak_ptr/requirements/1.cc: New test.
+ 
  2025-05-23  Release Manager
  
  	* GCC 14.3.0 released.
diff -Nrcpad gcc-14.3.0/libstdc++-v3/config/io/basic_file_stdio.cc gcc-14.3.0-RC-20260619/libstdc++-v3/config/io/basic_file_stdio.cc
*** gcc-14.3.0/libstdc++-v3/config/io/basic_file_stdio.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/config/io/basic_file_stdio.cc	Fri Jun 19 06:51:06 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 338,343 ****
--- 338,349 ----
      if (__ret == 0 && ferror(this->file()))
        __ret = -1;
  #else
+ 
+ #ifdef _GLIBCXX_MAX_READ_SIZE
+     if (__builtin_expect(__n > _GLIBCXX_MAX_READ_SIZE, 0))
+       __n = _GLIBCXX_MAX_READ_SIZE;
+ #endif
+ 
      do
        __ret = read(this->fd(), __s, __n);
      while (__ret == -1L && errno == EINTR);
diff -Nrcpad gcc-14.3.0/libstdc++-v3/config/locale/dragonfly/codecvt_members.cc gcc-14.3.0-RC-20260619/libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
*** gcc-14.3.0/libstdc++-v3/config/locale/dragonfly/codecvt_members.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/config/locale/dragonfly/codecvt_members.cc	Fri Jun 19 06:51:06 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 226,237 ****
  
      // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
      // in case we advance past it and then continue, in a loop.
!     // NB: mbsnrtowcs is a GNU extension
  
      // A dummy internal buffer is needed in order for mbsnrtocws to consider
      // its fourth parameter (it wouldn't with NULL as first parameter).
      wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
! 							   * __max));
      while (__from < __end && __max)
        {
  	const extern_type* __from_chunk_end;
--- 226,239 ----
  
      // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
      // in case we advance past it and then continue, in a loop.
!     // NB: mbsnrtowcs is in POSIX.1-2008
! 
!     const size_t __to_len = 1024; // Size of alloca'd output buffer
  
      // A dummy internal buffer is needed in order for mbsnrtocws to consider
      // its fourth parameter (it wouldn't with NULL as first parameter).
      wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
! 							   * __to_len));
      while (__from < __end && __max)
        {
  	const extern_type* __from_chunk_end;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 244,250 ****
  	const extern_type* __tmp_from = __from;
  	size_t __conv = mbsnrtowcs(__to, &__from,
  				   __from_chunk_end - __from,
! 				   __max, &__state);
  	if (__conv == static_cast<size_t>(-1))
  	  {
  	    // In case of error, in order to stop at the exact place we
--- 246,253 ----
  	const extern_type* __tmp_from = __from;
  	size_t __conv = mbsnrtowcs(__to, &__from,
  				   __from_chunk_end - __from,
! 				   __max > __to_len ? __to_len : __max,
! 				   &__state);
  	if (__conv == static_cast<size_t>(-1))
  	  {
  	    // In case of error, in order to stop at the exact place we
diff -Nrcpad gcc-14.3.0/libstdc++-v3/config/locale/gnu/codecvt_members.cc gcc-14.3.0-RC-20260619/libstdc++-v3/config/locale/gnu/codecvt_members.cc
*** gcc-14.3.0/libstdc++-v3/config/locale/gnu/codecvt_members.cc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/config/locale/gnu/codecvt_members.cc	Fri Jun 19 06:51:06 2026
*************** namespace
*** 230,241 ****
  
      // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
      // in case we advance past it and then continue, in a loop.
!     // NB: mbsnrtowcs is a GNU extension
  
      // A dummy internal buffer is needed in order for mbsnrtocws to consider
      // its fourth parameter (it wouldn't with NULL as first parameter).
      wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
! 							   * __max));
      while (__from < __end && __max)
        {
  	const extern_type* __from_chunk_end;
--- 230,243 ----
  
      // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
      // in case we advance past it and then continue, in a loop.
!     // NB: mbsnrtowcs is in POSIX.1-2008
! 
!     const size_t __to_len = 1024; // Size of alloca'd output buffer
  
      // A dummy internal buffer is needed in order for mbsnrtocws to consider
      // its fourth parameter (it wouldn't with NULL as first parameter).
      wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
! 							   * __to_len));
      while (__from < __end && __max)
        {
  	const extern_type* __from_chunk_end;
*************** namespace
*** 248,254 ****
  	const extern_type* __tmp_from = __from;
  	size_t __conv = mbsnrtowcs(__to, &__from,
  				   __from_chunk_end - __from,
! 				   __max, &__state);
  	if (__conv == static_cast<size_t>(-1))
  	  {
  	    // In case of error, in order to stop at the exact place we
--- 250,257 ----
  	const extern_type* __tmp_from = __from;
  	size_t __conv = mbsnrtowcs(__to, &__from,
  				   __from_chunk_end - __from,
! 				   __max > __to_len ? __to_len : __max,
! 				   &__state);
  	if (__conv == static_cast<size_t>(-1))
  	  {
  	    // In case of error, in order to stop at the exact place we
diff -Nrcpad gcc-14.3.0/libstdc++-v3/config/os/bsd/darwin/os_defines.h gcc-14.3.0-RC-20260619/libstdc++-v3/config/os/bsd/darwin/os_defines.h
*** gcc-14.3.0/libstdc++-v3/config/os/bsd/darwin/os_defines.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/config/os/bsd/darwin/os_defines.h	Fri Jun 19 06:51:06 2026
***************
*** 54,57 ****
--- 54,60 ----
  // No support for referencing weak symbols without a definition.
  #define _GLIBCXX_USE_WEAK_REF 0
  
+ // read(2) can return EINVAL for n >= INT_MAX.
+ #define _GLIBCXX_MAX_READ_SIZE (__INT_MAX__ - 1)
+ 
  #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/config/os/bsd/freebsd/os_defines.h gcc-14.3.0-RC-20260619/libstdc++-v3/config/os/bsd/freebsd/os_defines.h
*** gcc-14.3.0/libstdc++-v3/config/os/bsd/freebsd/os_defines.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/config/os/bsd/freebsd/os_defines.h	Fri Jun 19 06:51:06 2026
***************
*** 40,43 ****
--- 40,46 ----
  #define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK 1
  #define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC defined _XOPEN_SOURCE
  
+ // read(2) can return EINVAL for n >= INT_MAX.
+ #define _GLIBCXX_MAX_READ_SIZE (__INT_MAX__ - 1)
+ 
  #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/configure gcc-14.3.0-RC-20260619/libstdc++-v3/configure
*** gcc-14.3.0/libstdc++-v3/configure	Fri May 23 11:03:15 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/configure	Fri Jun 19 06:51:06 2026
*************** _ACEOF
*** 28592,28597 ****
--- 28592,28601 ----
  
          $as_echo "#define HAVE_LINK 1" >>confdefs.h
  
+         $as_echo "#define HAVE_SYS_STAT_H 1" >>confdefs.h
+ 
+         $as_echo "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
+ 
          $as_echo "#define HAVE_QUICK_EXIT 1" >>confdefs.h
  
          $as_echo "#define HAVE_READLINK 1" >>confdefs.h
*************** _ACEOF
*** 28606,28613 ****
--- 28610,28635 ----
  
          $as_echo "#define HAVE_SYMLINK 1" >>confdefs.h
  
+         $as_echo "#define HAVE_S_ISREG 1" >>confdefs.h
+ 
          $as_echo "#define HAVE_TRUNCATE 1" >>confdefs.h
  
+         $as_echo "#define HAVE_UNISTD_H 1" >>confdefs.h
+ 
+         $as_echo "#define HAVE_UNLINKAT 1" >>confdefs.h
+ 
+         $as_echo "#define HAVE_USLEEP 1" >>confdefs.h
+ 
+         $as_echo "#define _GLIBCXX_USE_CHMOD 1" >>confdefs.h
+ 
+         $as_echo "#define _GLIBCXX_USE_MKDIR 1" >>confdefs.h
+ 
+         $as_echo "#define _GLIBCXX_USE_CHDIR 1" >>confdefs.h
+ 
+         $as_echo "#define _GLIBCXX_USE_GETCWD 1" >>confdefs.h
+ 
+         $as_echo "#define _GLIBCXX_USE_UTIME 1" >>confdefs.h
+ 
          $as_echo "#define HAVE_USLEEP 1" >>confdefs.h
  
          ;;
diff -Nrcpad gcc-14.3.0/libstdc++-v3/configure.ac gcc-14.3.0-RC-20260619/libstdc++-v3/configure.ac
*** gcc-14.3.0/libstdc++-v3/configure.ac	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/configure.ac	Fri Jun 19 06:51:06 2026
*************** dnl # rather than hardcoding that inform
*** 391,396 ****
--- 391,398 ----
          AC_DEFINE(HAVE_ALIGNED_ALLOC)
          AC_DEFINE(HAVE_AT_QUICK_EXIT)
          AC_DEFINE(HAVE_LINK)
+         AC_DEFINE(HAVE_SYS_STAT_H)
+         AC_DEFINE(HAVE_SYS_TYPES_H)
          AC_DEFINE(HAVE_QUICK_EXIT)
          AC_DEFINE(HAVE_READLINK)
          AC_DEFINE(HAVE_SETENV)
*************** dnl # rather than hardcoding that inform
*** 398,404 ****
--- 400,415 ----
          AC_DEFINE(HAVE_SOCKATMARK)
          AC_DEFINE(HAVE_STRERROR_L)
          AC_DEFINE(HAVE_SYMLINK)
+         AC_DEFINE(HAVE_S_ISREG)
          AC_DEFINE(HAVE_TRUNCATE)
+         AC_DEFINE(HAVE_UNISTD_H)
+         AC_DEFINE(HAVE_UNLINKAT)
+         AC_DEFINE(HAVE_USLEEP)
+         AC_DEFINE(_GLIBCXX_USE_CHMOD)
+         AC_DEFINE(_GLIBCXX_USE_MKDIR)
+         AC_DEFINE(_GLIBCXX_USE_CHDIR)
+         AC_DEFINE(_GLIBCXX_USE_GETCWD)
+         AC_DEFINE(_GLIBCXX_USE_UTIME)
          AC_DEFINE(HAVE_USLEEP)
          ;;
      esac
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/doxygen/mainpage.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/doxygen/mainpage.html
*** gcc-14.3.0/libstdc++-v3/doc/doxygen/mainpage.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/doxygen/mainpage.html	Fri Jun 19 06:51:06 2026
***************
*** 38,44 ****
  
  <p>Here are entry points to all the pages generated by Doxygen:
     <ul>
!     <li><a href="modules.html">Modules</a></li>
  
      <li>Namespaces
      <ul>
--- 38,44 ----
  
  <p>Here are entry points to all the pages generated by Doxygen:
     <ul>
!     <li><a href="topics.html">Topics</a></li>
  
      <li>Namespaces
      <ul>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/faq.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/faq.html
*** gcc-14.3.0/libstdc++-v3/doc/html/faq.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/faq.html	Fri Jun 19 06:51:06 2026
***************
*** 796,802 ****
      Libstdc++-v3 incorporates a lot of code from
      <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">the SGI STL</a>
      (the final merge was from
!     <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/whats_new.html" target="_top">release 3.3</a>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </p><p>
--- 796,802 ----
      Libstdc++-v3 incorporates a lot of code from
      <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">the SGI STL</a>
      (the final merge was from
!     <a class="link" href="https://web.archive.org/web/20171206110416/http://www.sgi.com/tech/stl/whats_new.html" target="_top">release 3.3</a>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </p><p>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/configure.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/configure.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/configure.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/configure.html	Fri Jun 19 06:51:06 2026
***************
*** 268,274 ****
          operations (e.g. the library is configured for armv7 and then code
          is compiled with <code class="option">-march=armv5t</code>) then the program
          might rely on support in libgcc to provide the atomics.
!     </p></dd><dt><span class="term"><code class="code">--enable-vtable-verify</code>[default]</span></dt><dd><p>Use <code class="code">-fvtable-verify=std</code> to compile the C++
      runtime with instrumentation for vtable verification. All virtual
      functions in the standard library will be verified at runtime.
      Types impacted include <code class="classname">locale</code> and
--- 268,274 ----
          operations (e.g. the library is configured for armv7 and then code
          is compiled with <code class="option">-march=armv5t</code>) then the program
          might rely on support in libgcc to provide the atomics.
!     </p></dd><dt><span class="term"><code class="code">--enable-vtable-verify</code></span></dt><dd><p>Use <code class="code">-fvtable-verify=std</code> to compile the C++
      runtime with instrumentation for vtable verification. All virtual
      functions in the standard library will be verified at runtime.
      Types impacted include <code class="classname">locale</code> and
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/containers.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/containers.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/containers.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/containers.html	Fri Jun 19 06:51:06 2026
***************
*** 11,17 ****
       Yes it is, at least using the <a class="link" href="using_dual_abi.html" title="Dual ABI">old
       ABI</a>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
     </p><div class="blockquote"><blockquote class="blockquote"><p>
         The size() member function, for list and slist, takes time
         proportional to the number of elements in the list.  This was a
--- 11,17 ----
       Yes it is, at least using the <a class="link" href="using_dual_abi.html" title="Dual ABI">old
       ABI</a>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <a class="link" href="https://web.archive.org/web/20161222192301/http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
     </p><div class="blockquote"><blockquote class="blockquote"><p>
         The size() member function, for list and slist, takes time
         proportional to the number of elements in the list.  This was a
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/ext_numerics.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/ext_numerics.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/ext_numerics.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/ext_numerics.html	Fri Jun 19 06:51:06 2026
***************
*** 14,20 ****
     The operation functor must be associative.
  </p><p>The <code class="code">iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/iota.html" target="_top">SGI
     documentation</a>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code class="code">value</code> to <code class="code">*first</code>,
     <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
--- 14,20 ----
     The operation functor must be associative.
  </p><p>The <code class="code">iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <a class="link" href="https://web.archive.org/web/20170201044840/http://www.sgi.com/tech/stl/iota.html" target="_top">SGI
     documentation</a>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code class="code">value</code> to <code class="code">*first</code>,
     <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/ext_sgi.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/ext_sgi.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/ext_sgi.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/ext_sgi.html	Fri Jun 19 06:51:06 2026
***************
*** 28,39 ****
        and sets.
     </p><p>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/HashFunction.html" target="_top">hashing
        function</a> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/hash.html" target="_top">hash</a>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </p><p>The hashing classes support all the usual associative container
--- 28,39 ----
        and sets.
     </p><p>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <a class="link" href="https://web.archive.org/web/20171230172024/http://www.sgi.com/tech/stl/HashFunction.html" target="_top">hashing
        function</a> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <a class="link" href="https://web.archive.org/web/20171230172200/http://www.sgi.com/tech/stl/hash.html" target="_top">hash</a>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </p><p>The hashing classes support all the usual associative container
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/status.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/status.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/status.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/status.html	Fri Jun 19 06:51:06 2026
*************** the GCC 14 release series.
*** 255,260 ****
--- 255,263 ----
        <span class="emphasis"><em>20.7.2.0 [util.smartptr.weakptr]</em></span>
        <code class="code">what()</code> returns <code class="literal">"bad_weak_ptr"</code>.
     </p><p>
+       <span class="emphasis"><em>20.8.11.1 [func.wrap.badcall]</em></span>
+       <code class="code">what()</code> returns <code class="literal">"bad_function_call"</code>.
+    </p><p>
        <span class="emphasis"><em>20.8.9.1.3 [func.bind.place]/1</em></span> There are 29
        placeholders defined and the placeholder types are
        <code class="literal">CopyAssignable</code>.
*************** since C++14 and the implementation is co
*** 1054,1060 ****
        <code class="literal">"std::visit: variant is valueless"</code>,
        or <code class="literal">"std::visit&lt;R&gt;: variant is valueless"</code>.
     </p><p>
!       <span class="emphasis"><em>23.12.5.2 [memory.resource.pool.options]</em></span>
        Let S equal <code class="code">numeric_limits&lt;size_t&gt;::digits</code>.
        The limit for maximum number of blocks in a chunk is given by
        <span class="mathphrase">2<sup>N</sup>-1</span>,
--- 1057,1067 ----
        <code class="literal">"std::visit: variant is valueless"</code>,
        or <code class="literal">"std::visit&lt;R&gt;: variant is valueless"</code>.
     </p><p>
!       <span class="emphasis"><em>23.8.2 [any.bad_any_cast]</em></span>
!       <code class="code">what()</code> returns <code class="literal">"bad any_cast"</code>.
!    </p><p>
!       <span class="emphasis"><em>23.12.5 [mem.res.pool.options]</em></span>,
!       <span class="emphasis"><em>23.12.5 [mem.res.pool.mem]</em></span>
        Let S equal <code class="code">numeric_limits&lt;size_t&gt;::digits</code>.
        The limit for maximum number of blocks in a chunk is given by
        <span class="mathphrase">2<sup>N</sup>-1</span>,
*************** since C++14 and the implementation is co
*** 1065,1071 ****
        otherwise 3072 when <span class="mathphrase">S &gt; 16</span>,
        otherwise 768.
     </p><p>
!       <span class="emphasis"><em>23.12.6.1 [memory.resource.monotonic.buffer.ctor]</em></span>
        The default <code class="code">next_buffer_size</code> is <code class="code">128 * sizeof(void*)</code>.
        The default growth factor is <code class="code">1.5</code>.
     </p><p>
--- 1072,1078 ----
        otherwise 3072 when <span class="mathphrase">S &gt; 16</span>,
        otherwise 768.
     </p><p>
!       <span class="emphasis"><em>23.12.6.1 [mem.res.monotonic.buffer.ctor]</em></span>
        The default <code class="code">next_buffer_size</code> is <code class="code">128 * sizeof(void*)</code>.
        The default growth factor is <code class="code">1.5</code>.
     </p><p>
*************** since C++14 and the implementation is co
*** 1100,1109 ****
        races depends on the target C library that provides the function.
     </p><p>
        <span class="emphasis"><em>29.9.5 [sf.cmath]</em></span>
!       The effect of calling the mathematical special functions with large
!       inputs should be documented here.
     </p><p>
!       <span class="emphasis"><em>30.10.2.1 [fs.conform.9945]</em></span>
        The behavior of the filesystem library implementation will depend on
        the target operating system. Some features will not be supported
        on some targets. Symbolic links and file permissions
--- 1107,1120 ----
        races depends on the target C library that provides the function.
     </p><p>
        <span class="emphasis"><em>29.9.5 [sf.cmath]</em></span>
!       Calling the mathematical special functions with large inputs is supported
!       but the results may be imprecise.
     </p><p>
!       <span class="emphasis"><em>30.7.5.2.3 [ostream.inserters]</em></span>
!       NTCTS for <code class="code">nullptr_t</code> is <code class="literal">"nullptr"</code>.
!    </p><p>
!       <span class="emphasis"><em>30.10.2.1 [fs.conform.9945]</em></span>,
!       <span class="emphasis"><em>30.10.2.2 [fs.conform.os]</em></span>
        The behavior of the filesystem library implementation will depend on
        the target operating system. Some features will not be supported
        on some targets. Symbolic links and file permissions
*************** since C++14 and the implementation is co
*** 1139,1145 ****
        Specifically, it is not possible to rename a directory to replace another
        directory (POSIX requires that to work if the directory being
        replaced is empty).
!     </p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="iso.2017.par2ts"></a>Parallelism 2 TS</h5></div></div></div><p>
          <span class="emphasis"><em>9.3 [parallel.simd.abi]</em></span>
          <code class="code">max_fixed_size&lt;T&gt;</code> is 32, except when targetting
          AVX512BW and <code class="code">sizeof(T)</code> is 1.
--- 1150,1169 ----
        Specifically, it is not possible to rename a directory to replace another
        directory (POSIX requires that to work if the directory being
        replaced is empty).
!    </p><p>
!       <span class="emphasis"><em>30.10.29.2 [fs.enum.file_type]</em></span>,
!       <span class="emphasis"><em>30.10.34.3 [fs.op.copy]</em></span>,
!       <span class="emphasis"><em>30.10.34.35 [fs.op.status]</em></span>
!       No additional file types are supported, and there are no
!       implementation-defined enumerators in
!       <code class="code">std::filesystem::file_type</code>.
!    </p><p>
!      <span class="emphasis"><em>30.10.32 [fs.class.directory_iterator]</em></span>,
!      <span class="emphasis"><em>30.10.33 [fs.class.rec.dir.itr]</em></span>
!      Any directory-like file types supported by
!      <code class="code">opendir</code>/<code class="code">readdir</code>
!      (or <code class="code">_wopendir</code>/<code class="code">_wreaddir</code> on Windows).
!    </p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="iso.2017.par2ts"></a>Parallelism 2 TS</h5></div></div></div><p>
          <span class="emphasis"><em>9.3 [parallel.simd.abi]</em></span>
          <code class="code">max_fixed_size&lt;T&gt;</code> is 32, except when targetting
          AVX512BW and <code class="code">sizeof(T)</code> is 1.
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/using_concurrency.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/using_concurrency.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/using_concurrency.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/using_concurrency.html	Fri Jun 19 06:51:06 2026
*************** The standard places requirements on the
*** 40,46 ****
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI STL</a> definition of thread safety, which the library used
  prior to the 2011 standard.
  </p><p>The library strives to be thread-safe when all of the following
  	 conditions are met:
--- 40,46 ----
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <a class="link" href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI STL</a> definition of thread safety, which the library used
  prior to the 2011 standard.
  </p><p>The library strives to be thread-safe when all of the following
  	 conditions are met:
*************** gcc version 4.1.2 20070925 (Red Hat 4.1.
*** 243,252 ****
        threaded and non-threaded code), see Chapter 17.
     </p><p>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html</a> and
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html" target="_top">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html</a>.
     </p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
        container-memory allocator on those pages.  For the sake of this
--- 243,252 ----
        threaded and non-threaded code), see Chapter 17.
     </p><p>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <a class="link" href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI's
!       https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html</a> and
!       <a class="link" href="https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html" target="_top">SGI's
!       https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html</a>.
     </p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
        container-memory allocator on those pages.  For the sake of this
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/html/manual/utilities.html gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/utilities.html
*** gcc-14.3.0/libstdc++-v3/doc/html/manual/utilities.html	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/html/manual/utilities.html	Fri Jun 19 06:51:06 2026
***************
*** 11,16 ****
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html" target="_top">their
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html</a>.
     </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="std_contents.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
\ No newline at end of file
--- 11,16 ----
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <a class="link" href="https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html" target="_top">their
!       https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html</a>.
     </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="std_contents.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
\ No newline at end of file
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/faq.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/faq.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/faq.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/faq.xml	Fri Jun 19 06:51:06 2026
***************
*** 1130,1136 ****
      Libstdc++-v3 incorporates a lot of code from
      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">the SGI STL</link>
      (the final merge was from
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/whats_new.html">release 3.3</link>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </para>
--- 1130,1136 ----
      Libstdc++-v3 incorporates a lot of code from
      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">the SGI STL</link>
      (the final merge was from
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171206110416/http://www.sgi.com/tech/stl/whats_new.html">release 3.3</link>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </para>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/configure.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/configure.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/configure.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/configure.xml	Fri Jun 19 06:51:06 2026
***************
*** 438,444 ****
      </para>
   </listitem></varlistentry>
  
!  <varlistentry><term><code>--enable-vtable-verify</code>[default]</term>
   <listitem>
      <para>Use <code>-fvtable-verify=std</code> to compile the C++
      runtime with instrumentation for vtable verification. All virtual
--- 438,444 ----
      </para>
   </listitem></varlistentry>
  
!  <varlistentry><term><code>--enable-vtable-verify</code></term>
   <listitem>
      <para>Use <code>-fvtable-verify=std</code> to compile the C++
      runtime with instrumentation for vtable verification. All virtual
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/containers.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/containers.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/containers.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/containers.xml	Fri Jun 19 06:51:06 2026
***************
*** 28,34 ****
       Yes it is, at least using the <link linkend="manual.intro.using.abi">old
       ABI</link>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/FAQ.html">their FAQ</link>:
     </para>
     <blockquote>
       <para>
--- 28,34 ----
       Yes it is, at least using the <link linkend="manual.intro.using.abi">old
       ABI</link>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20161222192301/http://www.sgi.com/tech/stl/FAQ.html">their FAQ</link>:
     </para>
     <blockquote>
       <para>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/extensions.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/extensions.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/extensions.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/extensions.xml	Fri Jun 19 06:51:07 2026
*************** extensions, be aware of two things:
*** 227,238 ****
     </para>
     <para>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/HashFunction.html">hashing
        function</link> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/hash.html">hash</link>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </para>
--- 227,238 ----
     </para>
     <para>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171230172024/http://www.sgi.com/tech/stl/HashFunction.html">hashing
        function</link> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171230172200/http://www.sgi.com/tech/stl/hash.html">hash</link>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </para>
*************** get_temporary_buffer(5, (int*)0);
*** 394,400 ****
  </para>
  <para>The <code>iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/iota.html">SGI
     documentation</link>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code>value</code> to <code>*first</code>,
     <code>value + 1</code> to<code> *(first + 1)</code> and so on."
--- 394,400 ----
  </para>
  <para>The <code>iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20170201044840/http://www.sgi.com/tech/stl/iota.html">SGI
     documentation</link>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code>value</code> to <code>*first</code>,
     <code>value + 1</code> to<code> *(first + 1)</code> and so on."
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/status_cxx2011.xml	Fri Jun 19 06:51:07 2026
*************** the GCC 14 release series.
*** 2614,2619 ****
--- 2614,2624 ----
     </para>
  
     <para>
+       <emphasis>20.8.11.1 [func.wrap.badcall]</emphasis>
+       <code>what()</code> returns <literal>"bad_function_call"</literal>.
+    </para>
+ 
+    <para>
        <emphasis>20.8.9.1.3 [func.bind.place]/1</emphasis> There are 29
        placeholders defined and the placeholder types are
        <literal>CopyAssignable</literal>.
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/status_cxx2017.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/status_cxx2017.xml	Fri Jun 19 06:51:07 2026
*************** since C++14 and the implementation is co
*** 2918,2924 ****
     </para>
  
     <para>
!       <emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis>
        Let S equal <code>numeric_limits&lt;size_t&gt;::digits</code>.
        The limit for maximum number of blocks in a chunk is given by
        <inlineequation><mathphrase>2<superscript>N</superscript>-1</mathphrase></inlineequation>,
--- 2918,2930 ----
     </para>
  
     <para>
!       <emphasis>23.8.2 [any.bad_any_cast]</emphasis>
!       <code>what()</code> returns <literal>"bad any_cast"</literal>.
!    </para>
! 
!    <para>
!       <emphasis>23.12.5 [mem.res.pool.options]</emphasis>,
!       <emphasis>23.12.5 [mem.res.pool.mem]</emphasis>
        Let S equal <code>numeric_limits&lt;size_t&gt;::digits</code>.
        The limit for maximum number of blocks in a chunk is given by
        <inlineequation><mathphrase>2<superscript>N</superscript>-1</mathphrase></inlineequation>,
*************** since C++14 and the implementation is co
*** 2931,2937 ****
     </para>
  
     <para>
!       <emphasis>23.12.6.1 [memory.resource.monotonic.buffer.ctor]</emphasis>
        The default <code>next_buffer_size</code> is <code>128 * sizeof(void*)</code>.
        The default growth factor is <code>1.5</code>.
     </para>
--- 2937,2943 ----
     </para>
  
     <para>
!       <emphasis>23.12.6.1 [mem.res.monotonic.buffer.ctor]</emphasis>
        The default <code>next_buffer_size</code> is <code>128 * sizeof(void*)</code>.
        The default growth factor is <code>1.5</code>.
     </para>
*************** since C++14 and the implementation is co
*** 2981,2992 ****
  
     <para>
        <emphasis>29.9.5 [sf.cmath]</emphasis>
!       The effect of calling the mathematical special functions with large
!       inputs should be documented here.
     </para>
  
     <para>
!       <emphasis>30.10.2.1 [fs.conform.9945]</emphasis>
        The behavior of the filesystem library implementation will depend on
        the target operating system. Some features will not be supported
        on some targets. Symbolic links and file permissions
--- 2987,3004 ----
  
     <para>
        <emphasis>29.9.5 [sf.cmath]</emphasis>
!       Calling the mathematical special functions with large inputs is supported
!       but the results may be imprecise.
     </para>
  
     <para>
!       <emphasis>30.7.5.2.3 [ostream.inserters]</emphasis>
!       NTCTS for <code>nullptr_t</code> is <literal>"nullptr"</literal>.
!    </para>
! 
!    <para>
!       <emphasis>30.10.2.1 [fs.conform.9945]</emphasis>,
!       <emphasis>30.10.2.2 [fs.conform.os]</emphasis>
        The behavior of the filesystem library implementation will depend on
        the target operating system. Some features will not be supported
        on some targets. Symbolic links and file permissions
*************** since C++14 and the implementation is co
*** 3023,3029 ****
        If <code>!is_regular_file(p)</code>, an error is reported.
     </para>
  
!     <para>
        <emphasis>30.10.15.32 [fs.op.rename]</emphasis>
        On Windows, <code>filesystem::rename</code>
        is implemented by calling <code>MoveFileExW</code> and so
--- 3035,3041 ----
        If <code>!is_regular_file(p)</code>, an error is reported.
     </para>
  
!    <para>
        <emphasis>30.10.15.32 [fs.op.rename]</emphasis>
        On Windows, <code>filesystem::rename</code>
        is implemented by calling <code>MoveFileExW</code> and so
*************** since C++14 and the implementation is co
*** 3032,3039 ****
        Specifically, it is not possible to rename a directory to replace another
        directory (POSIX requires that to work if the directory being
        replaced is empty).
!     </para>
  
  
     <section xml:id="iso.2017.par2ts" xreflabel="Implementation Specific Behavior of the Parallelism 2 TS"><info><title>Parallelism 2 TS</title></info>
  
--- 3044,3067 ----
        Specifically, it is not possible to rename a directory to replace another
        directory (POSIX requires that to work if the directory being
        replaced is empty).
!    </para>
  
+    <para>
+       <emphasis>30.10.29.2 [fs.enum.file_type]</emphasis>,
+       <emphasis>30.10.34.3 [fs.op.copy]</emphasis>,
+       <emphasis>30.10.34.35 [fs.op.status]</emphasis>
+       No additional file types are supported, and there are no
+       implementation-defined enumerators in
+       <code>std::filesystem::file_type</code>.
+    </para>
+ 
+    <para>
+      <emphasis>30.10.32 [fs.class.directory_iterator]</emphasis>,
+      <emphasis>30.10.33 [fs.class.rec.dir.itr]</emphasis>
+      Any directory-like file types supported by
+      <code>opendir</code>/<code>readdir</code>
+      (or <code>_wopendir</code>/<code>_wreaddir</code> on Windows).
+    </para>
  
     <section xml:id="iso.2017.par2ts" xreflabel="Implementation Specific Behavior of the Parallelism 2 TS"><info><title>Parallelism 2 TS</title></info>
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/using.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/using.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/using.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/using.xml	Fri Jun 19 06:51:07 2026
*************** The standard places requirements on the
*** 1929,1935 ****
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety, which the library used
  prior to the 2011 standard.
  </para>
  
--- 1929,1935 ----
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety, which the library used
  prior to the 2011 standard.
  </para>
  
*************** gcc version 4.1.2 20070925 (Red Hat 4.1.
*** 2214,2223 ****
     </para>
     <para>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html</link> and
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html</link>.
     </para>
     <para><emphasis>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
--- 2214,2223 ----
     </para>
     <para>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html">SGI's
!       https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html</link> and
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html">SGI's
!       https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html</link>.
     </para>
     <para><emphasis>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
diff -Nrcpad gcc-14.3.0/libstdc++-v3/doc/xml/manual/utilities.xml gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/utilities.xml
*** gcc-14.3.0/libstdc++-v3/doc/xml/manual/utilities.xml	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/doc/xml/manual/utilities.xml	Fri Jun 19 06:51:07 2026
***************
*** 22,29 ****
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html">their
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html</link>.
     </para>
  </section>
  
--- 22,29 ----
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html">their
!       https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html</link>.
     </para>
  </section>
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/Makefile.am gcc-14.3.0-RC-20260619/libstdc++-v3/include/Makefile.am
*** gcc-14.3.0/libstdc++-v3/include/Makefile.am	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/Makefile.am	Fri Jun 19 06:51:07 2026
*************** c_compatibility_headers = \
*** 907,912 ****
--- 907,914 ----
  	${c_compatibility_srcdir}/tgmath.h \
  	${c_compatibility_srcdir}/math.h \
  	${c_compatibility_srcdir}/stdatomic.h \
+ 	${c_compatibility_srcdir}/stdbit.h \
+ 	${c_compatibility_srcdir}/stdckdint.h \
  	${c_compatibility_srcdir}/stdlib.h
  endif
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/Makefile.in gcc-14.3.0-RC-20260619/libstdc++-v3/include/Makefile.in
*** gcc-14.3.0/libstdc++-v3/include/Makefile.in	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/Makefile.in	Fri Jun 19 06:51:07 2026
*************** c_compatibility_builddir = .
*** 1244,1249 ****
--- 1244,1251 ----
  @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@	${c_compatibility_srcdir}/tgmath.h \
  @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@	${c_compatibility_srcdir}/math.h \
  @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@	${c_compatibility_srcdir}/stdatomic.h \
+ @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@	${c_compatibility_srcdir}/stdbit.h \
+ @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@	${c_compatibility_srcdir}/stdckdint.h \
  @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@	${c_compatibility_srcdir}/stdlib.h
  
  @GLIBCXX_C_HEADERS_C_STD_TRUE@c_compatibility_headers = 
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/atomic_base.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/atomic_base.h
*** gcc-14.3.0/libstdc++-v3/include/bits/atomic_base.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/atomic_base.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 686,697 ****
  
        __pointer_type 	_M_p _GLIBCXX20_INIT(nullptr);
  
!       // Factored out to facilitate explicit specialization.
!       constexpr ptrdiff_t
!       _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); }
! 
!       constexpr ptrdiff_t
!       _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); }
  
      public:
        __atomic_base() noexcept = default;
--- 686,694 ----
  
        __pointer_type 	_M_p _GLIBCXX20_INIT(nullptr);
  
!       static constexpr ptrdiff_t
!       _S_type_size(ptrdiff_t __d)
!       { return __d * sizeof(_PTp); }
  
      public:
        __atomic_base() noexcept = default;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 741,782 ****
  
        __pointer_type
        operator++() noexcept
!       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator++() volatile noexcept
!       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator--() noexcept
!       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator--() volatile noexcept
!       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator+=(ptrdiff_t __d) noexcept
!       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator+=(ptrdiff_t __d) volatile noexcept
!       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator-=(ptrdiff_t __d) noexcept
!       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator-=(ptrdiff_t __d) volatile noexcept
!       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        bool
--- 738,779 ----
  
        __pointer_type
        operator++() noexcept
!       { return __atomic_add_fetch(&_M_p, _S_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator++() volatile noexcept
!       { return __atomic_add_fetch(&_M_p, _S_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator--() noexcept
!       { return __atomic_sub_fetch(&_M_p, _S_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator--() volatile noexcept
!       { return __atomic_sub_fetch(&_M_p, _S_type_size(1),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator+=(ptrdiff_t __d) noexcept
!       { return __atomic_add_fetch(&_M_p, _S_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator+=(ptrdiff_t __d) volatile noexcept
!       { return __atomic_add_fetch(&_M_p, _S_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator-=(ptrdiff_t __d) noexcept
!       { return __atomic_sub_fetch(&_M_p, _S_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        __pointer_type
        operator-=(ptrdiff_t __d) volatile noexcept
!       { return __atomic_sub_fetch(&_M_p, _S_type_size(__d),
  				  int(memory_order_seq_cst)); }
  
        bool
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 931,952 ****
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_add(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) noexcept
!       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); }
  
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_add(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) volatile noexcept
!       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); }
  
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_sub(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) noexcept
!       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); }
  
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_sub(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) volatile noexcept
!       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); }
      };
  
    namespace __atomic_impl
--- 928,949 ----
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_add(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) noexcept
!       { return __atomic_fetch_add(&_M_p, _S_type_size(__d), int(__m)); }
  
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_add(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) volatile noexcept
!       { return __atomic_fetch_add(&_M_p, _S_type_size(__d), int(__m)); }
  
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_sub(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) noexcept
!       { return __atomic_fetch_sub(&_M_p, _S_type_size(__d), int(__m)); }
  
        _GLIBCXX_ALWAYS_INLINE __pointer_type
        fetch_sub(ptrdiff_t __d,
  		memory_order __m = memory_order_seq_cst) volatile noexcept
!       { return __atomic_fetch_sub(&_M_p, _S_type_size(__d), int(__m)); }
      };
  
    namespace __atomic_impl
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 967,979 ****
  #endif
        }
  
      template<typename _Tp>
        _GLIBCXX_ALWAYS_INLINE _GLIBCXX14_CONSTEXPR _Tp*
        __clear_padding(_Tp& __val) noexcept
        {
  	auto* __ptr = std::__addressof(__val);
  #if __has_builtin(__builtin_clear_padding)
! 	if _GLIBCXX17_CONSTEXPR (__atomic_impl::__maybe_has_padding<_Tp>())
  	  __builtin_clear_padding(__ptr);
  #endif
  	return __ptr;
--- 964,979 ----
  #endif
        }
  
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wc++17-extensions"
+ 
      template<typename _Tp>
        _GLIBCXX_ALWAYS_INLINE _GLIBCXX14_CONSTEXPR _Tp*
        __clear_padding(_Tp& __val) noexcept
        {
  	auto* __ptr = std::__addressof(__val);
  #if __has_builtin(__builtin_clear_padding)
! 	if constexpr (__atomic_impl::__maybe_has_padding<_Tp>())
  	  __builtin_clear_padding(__ptr);
  #endif
  	return __ptr;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 983,991 ****
      template<typename _Tp>
        using _Val = typename remove_volatile<_Tp>::type;
  
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wc++17-extensions"
- 
      template<bool _AtomicRef = false, typename _Tp>
        _GLIBCXX_ALWAYS_INLINE bool
        __compare_exchange(_Tp& __val, _Val<_Tp>& __e, _Val<_Tp>& __i,
--- 983,988 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1283,1289 ****
  
        constexpr
        __atomic_float(_Fp __t) : _M_fp(__t)
!       { __atomic_impl::__clear_padding(_M_fp); }
  
        __atomic_float(const __atomic_float&) = delete;
        __atomic_float& operator=(const __atomic_float&) = delete;
--- 1280,1289 ----
  
        constexpr
        __atomic_float(_Fp __t) : _M_fp(__t)
!       { 
!  	if (!std::__is_constant_evaluated())
! 	  __atomic_impl::__clear_padding(_M_fp);
!       }
  
        __atomic_float(const __atomic_float&) = delete;
        __atomic_float& operator=(const __atomic_float&) = delete;
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/atomic_wait.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/atomic_wait.h
*** gcc-14.3.0/libstdc++-v3/include/bits/atomic_wait.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/atomic_wait.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 186,192 ****
        bool __atomic_compare(const _Tp& __a, const _Tp& __b)
        {
  	// TODO make this do the correct padding bit ignoring comparison
! 	return __builtin_memcmp(&__a, &__b, sizeof(_Tp)) == 0;
        }
  
      struct __waiter_pool_base
--- 186,193 ----
        bool __atomic_compare(const _Tp& __a, const _Tp& __b)
        {
  	// TODO make this do the correct padding bit ignoring comparison
! 	return __builtin_memcmp(std::addressof(__a), std::addressof(__b),
! 				sizeof(_Tp)) == 0;
        }
  
      struct __waiter_pool_base
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/basic_string.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/basic_string.h
*** gcc-14.3.0/libstdc++-v3/include/bits/basic_string.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/basic_string.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CXX11
*** 3272,3278 ****
  	_GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
  	_If_sv<_Tp, int>
  	compare(size_type __pos, size_type __n, const _Tp& __svt) const
- 	noexcept(is_same<_Tp, __sv_type>::value)
  	{
  	  __sv_type __sv = __svt;
  	  return __sv_type(*this).substr(__pos, __n).compare(__sv);
--- 3272,3277 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_CXX11
*** 3293,3299 ****
  	_If_sv<_Tp, int>
  	compare(size_type __pos1, size_type __n1, const _Tp& __svt,
  		size_type __pos2, size_type __n2 = npos) const
- 	noexcept(is_same<_Tp, __sv_type>::value)
  	{
  	  __sv_type __sv = __svt;
  	  return __sv_type(*this)
--- 3292,3297 ----
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/chrono.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/chrono.h
*** gcc-14.3.0/libstdc++-v3/include/bits/chrono.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/chrono.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 1239,1244 ****
--- 1239,1245 ----
        now() noexcept;
  
        // Map to C API
+       [[__gnu__::__always_inline__]]
        static std::time_t
        to_time_t(const time_point& __t) noexcept
        {
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 1246,1251 ****
--- 1247,1253 ----
  			   (__t.time_since_epoch()).count());
        }
  
+       [[__gnu__::__always_inline__]]
        static time_point
        from_time_t(std::time_t __t) noexcept
        {
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/chrono_io.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/chrono_io.h
*** gcc-14.3.0/libstdc++-v3/include/bits/chrono_io.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/chrono_io.h	Fri Jun 19 06:51:07 2026
*************** namespace __detail
*** 156,161 ****
--- 156,162 ----
  namespace __detail
  {
    // An unspecified type returned by `chrono::local_time_format`.
+   // This is called `local-time-format-t` in the standard.
    template<typename _Duration>
      struct __local_time_fmt
      {
*************** namespace __detail
*** 163,170 ****
        const string* _M_abbrev;
        const seconds* _M_offset_sec;
      };
- 
-   struct __local_fmt_t;
  }
  /// @endcond
  
--- 164,169 ----
*************** namespace __format
*** 695,707 ****
  	  using ::std::chrono::__detail::__utc_leap_second;
  	  using ::std::chrono::__detail::__local_time_fmt;
  
  	  if constexpr (__is_specialization_of<_Tp, __local_time_fmt>)
- 	    return _M_format_to_ostream(__t._M_time, __fc, false);
- 	  else
  	    {
! 	      basic_ostringstream<_CharT> __os;
! 	      __os.imbue(_M_locale(__fc));
  
  	      if constexpr (__is_specialization_of<_Tp, __utc_leap_second>)
  		__os << __t._M_date << ' ' << __t._M_time;
  	      else if constexpr (chrono::__is_time_point_v<_Tp>)
--- 694,727 ----
  	  using ::std::chrono::__detail::__utc_leap_second;
  	  using ::std::chrono::__detail::__local_time_fmt;
  
+ 	  basic_ostringstream<_CharT> __os;
+ 	  __os.imbue(_M_locale(__fc));
+ 
  	  if constexpr (__is_specialization_of<_Tp, __local_time_fmt>)
  	    {
! 	      // Format as "{:L%F %T}"
! 	      auto __days = chrono::floor<chrono::days>(__t._M_time);
! 	      __os << chrono::year_month_day(__days) << ' '
! 		   << chrono::hh_mm_ss(__t._M_time - __days);
  
+ 	      // For __local_time_fmt the __is_neg flags says whether to
+ 	      // append " %Z" to the result.
+ 	      if (__is_neg)
+ 		{
+ 		  if (!__t._M_abbrev) [[unlikely]]
+ 		    __format::__no_timezone_available();
+ 		  else if constexpr (is_same_v<_CharT, char>)
+ 		    __os << ' ' << *__t._M_abbrev;
+ 		  else
+ 		    {
+ 		      __os << L' ';
+ 		      for (char __c : *__t._M_abbrev)
+ 			__os << __c;
+ 		    }
+ 		}
+ 	    }
+ 	  else
+ 	    {
  	      if constexpr (__is_specialization_of<_Tp, __utc_leap_second>)
  		__os << __t._M_date << ' ' << __t._M_time;
  	      else if constexpr (chrono::__is_time_point_v<_Tp>)
*************** namespace __format
*** 713,718 ****
--- 733,741 ----
  		  // sys_time with period greater or equal to days:
  		  if constexpr (is_convertible_v<_Tp, chrono::sys_days>)
  		    __os << _S_date(__t);
+ 		  // Or a local_time with period greater or equal to days:
+ 		  else if constexpr (is_convertible_v<_Tp, chrono::local_days>)
+ 		    __os << _S_date(__t);
  		  else // Or it's formatted as "{:L%F %T}":
  		    {
  		      auto __days = chrono::floor<chrono::days>(__t);
*************** namespace __format
*** 727,737 ****
  		      __os << _S_plus_minus[1];
  		  __os << __t;
  		}
- 
- 	      auto __str = std::move(__os).str();
- 	      return __format::__write_padded_as_spec(__str, __str.size(),
- 						      __fc, _M_spec);
  	    }
  	}
  
        static constexpr const _CharT* _S_chars
--- 750,760 ----
  		      __os << _S_plus_minus[1];
  		  __os << __t;
  		}
  	    }
+ 
+ 	  auto __str = std::move(__os).str();
+ 	  return __format::__write_padded_as_spec(__str, __str.size(),
+ 						  __fc, _M_spec);
  	}
  
        static constexpr const _CharT* _S_chars
*************** namespace __format
*** 2022,2027 ****
--- 2045,2052 ----
  	       _FormatContext& __fc) const
  	{
  	  // Convert to __local_time_fmt with abbrev "TAI" and offset 0s.
+ 	  // We use __local_time_fmt and not sys_time (as the standard implies)
+ 	  // because %Z for sys_time would print "UTC" and we want "TAI" here.
  
  	  // Offset is 1970y/January/1 - 1958y/January/1
  	  constexpr chrono::days __tai_offset = chrono::days(4383);
*************** namespace __format
*** 2052,2057 ****
--- 2077,2084 ----
  	       _FormatContext& __fc) const
  	{
  	  // Convert to __local_time_fmt with abbrev "GPS" and offset 0s.
+ 	  // We use __local_time_fmt and not sys_time (as the standard implies)
+ 	  // because %Z for sys_time would print "UTC" and we want "GPS" here.
  
  	  // Offset is 1980y/January/Sunday[1] - 1970y/January/1
  	  constexpr chrono::days __gps_offset = chrono::days(3657);
*************** namespace __format
*** 2118,2124 ****
  	typename _FormatContext::iterator
  	format(const chrono::__detail::__local_time_fmt<_Duration>& __t,
  	       _FormatContext& __ctx) const
! 	{ return _M_f._M_format(__t, __ctx); }
  
      private:
        __format::__formatter_chrono<_CharT> _M_f;
--- 2145,2151 ----
  	typename _FormatContext::iterator
  	format(const chrono::__detail::__local_time_fmt<_Duration>& __t,
  	       _FormatContext& __ctx) const
! 	{ return _M_f._M_format(__t, __ctx, /* use %Z for {} */ true); }
  
      private:
        __format::__formatter_chrono<_CharT> _M_f;
*************** namespace __detail
*** 2837,2844 ****
  	    __is.setstate(ios_base::failbit);
  	  else
  	    {
! 	      auto __st = __p._M_sys_days + __p._M_time - *__offset;
! 	      auto __tt = tai_clock::from_utc(utc_clock::from_sys(__st));
  	      __tp = chrono::time_point_cast<_Duration>(__tt);
  	    }
  	}
--- 2864,2872 ----
  	    __is.setstate(ios_base::failbit);
  	  else
  	    {
! 	      constexpr sys_days __epoch(-days(4383)); // 1958y/1/1
! 	      auto __d = __p._M_sys_days - __epoch + __p._M_time - *__offset;
! 	      tai_time<common_type_t<_Duration, seconds>> __tt(__d);
  	      __tp = chrono::time_point_cast<_Duration>(__tt);
  	    }
  	}
*************** namespace __detail
*** 2875,2883 ****
  	    __is.setstate(ios_base::failbit);
  	  else
  	    {
! 	      auto __st = __p._M_sys_days + __p._M_time - *__offset;
! 	      auto __tt = gps_clock::from_utc(utc_clock::from_sys(__st));
! 	      __tp = chrono::time_point_cast<_Duration>(__tt);
  	    }
  	}
        return __is;
--- 2903,2912 ----
  	    __is.setstate(ios_base::failbit);
  	  else
  	    {
! 	      constexpr sys_days __epoch(days(3657)); // 1980y/1/Sunday[1]
! 	      auto __d = __p._M_sys_days - __epoch + __p._M_time - *__offset;
! 	      gps_time<common_type_t<_Duration, seconds>> __gt(__d);
! 	      __tp = chrono::time_point_cast<_Duration>(__gt);
  	    }
  	}
        return __is;
*************** namespace __detail
*** 3659,3672 ****
  		    }
  		  else // Read fractional seconds
  		    {
! 		      basic_stringstream<_CharT> __buf;
  		      auto __digit = _S_try_read_digit(__is, __err);
  		      if (__digit != -1)
  			{
! 			  __buf.put(_CharT('0') + __digit);
  			  __digit = _S_try_read_digit(__is, __err);
  			  if (__digit != -1)
! 			    __buf.put(_CharT('0') + __digit);
  			}
  
  		      auto __i = __is.peek();
--- 3688,3701 ----
  		    }
  		  else // Read fractional seconds
  		    {
! 		      stringstream __buf;
  		      auto __digit = _S_try_read_digit(__is, __err);
  		      if (__digit != -1)
  			{
! 			  __buf.put('0' + __digit);
  			  __digit = _S_try_read_digit(__is, __err);
  			  if (__digit != -1)
! 			    __buf.put('0' + __digit);
  			}
  
  		      auto __i = __is.peek();
*************** namespace __detail
*** 3691,3697 ****
  				{
  				  __digit = _S_try_read_digit(__is, __err);
  				  if (__digit != -1)
! 				    __buf.put(_CharT('0') + __digit);
  				  else
  				    break;
  				}
--- 3720,3726 ----
  				{
  				  __digit = _S_try_read_digit(__is, __err);
  				  if (__digit != -1)
! 				    __buf.put('0' + __digit);
  				  else
  				    break;
  				}
*************** namespace __detail
*** 3914,3921 ****
  		      else
  			{
  			  // Read hh
! 			  __hh = 10 * _S_try_read_digit(__is, __err);
! 			  __hh += _S_try_read_digit(__is, __err);
  			}
  
  		      if (__is_failed(__err))
--- 3943,3954 ----
  		      else
  			{
  			  // Read hh
! 			  auto __d1 = _S_try_read_digit(__is, __err);
! 			  auto __d2 = _S_try_read_digit(__is, __err);
! 			  if (__d1 >= 0 && __d2 >= 0) [[likely]]
! 			    __hh = 10 * __d1 + __d2;
! 			  else
! 			    __err |= ios_base::failbit;
  			}
  
  		      if (__is_failed(__err))
*************** namespace __detail
*** 3949,3956 ****
  		      int_least32_t __mm = 0;
  		      if (__read_mm)
  			{
! 			  __mm = 10 * _S_try_read_digit(__is, __err);
! 			  __mm += _S_try_read_digit(__is, __err);
  			}
  
  		      if (!__is_failed(__err))
--- 3982,3993 ----
  		      int_least32_t __mm = 0;
  		      if (__read_mm)
  			{
! 			  auto __d1 = _S_try_read_digit(__is, __err);
! 			  auto __d2 = _S_try_read_digit(__is, __err);
! 			  if (__d1 >= 0 && __d2 >= 0) [[likely]]
! 			    __mm = 10 * __d1 + __d2;
! 			  else
! 			    __err |= ios_base::failbit;
  			}
  
  		      if (!__is_failed(__err))
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/cow_string.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/cow_string.h
*** gcc-14.3.0/libstdc++-v3/include/bits/cow_string.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/cow_string.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2847,2853 ****
        template<typename _Tp>
  	_If_sv<_Tp, int>
  	compare(size_type __pos, size_type __n, const _Tp& __svt) const
- 	noexcept(is_same<_Tp, __sv_type>::value)
  	{
  	  __sv_type __sv = __svt;
  	  return __sv_type(*this).substr(__pos, __n).compare(__sv);
--- 2847,2852 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2867,2873 ****
  	_If_sv<_Tp, int>
  	compare(size_type __pos1, size_type __n1, const _Tp& __svt,
  		size_type __pos2, size_type __n2 = npos) const
- 	noexcept(is_same<_Tp, __sv_type>::value)
  	{
  	  __sv_type __sv = __svt;
  	  return __sv_type(*this)
--- 2866,2871 ----
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/forward_list.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/forward_list.h
*** gcc-14.3.0/libstdc++-v3/include/bits/forward_list.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/forward_list.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 670,676 ****
  	void
  	assign(_InputIterator __first, _InputIterator __last)
  	{
! 	  typedef is_assignable<_Tp, decltype(*__first)> __assignable;
  	  _M_assign(__first, __last, __assignable());
  	}
  
--- 670,676 ----
  	void
  	assign(_InputIterator __first, _InputIterator __last)
  	{
! 	  typedef is_assignable<_Tp&, decltype(*__first)> __assignable;
  	  _M_assign(__first, __last, __assignable());
  	}
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/out_ptr.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/out_ptr.h
*** gcc-14.3.0/libstdc++-v3/include/bits/out_ptr.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/out_ptr.h	Fri Jun 19 06:51:07 2026
*************** namespace __detail
*** 395,401 ****
     * @tparam _Pointer The type of pointer to convert to.
     * @param __s The pointer that should take ownership of the result.
     * @param __args... Arguments to use when resetting the smart pointer.
!    * @return A std::inout_ptr_t referring to `__s`.
     * @since C++23
     * @headerfile <memory>
     */
--- 395,401 ----
     * @tparam _Pointer The type of pointer to convert to.
     * @param __s The pointer that should take ownership of the result.
     * @param __args... Arguments to use when resetting the smart pointer.
!    * @return A `std::out_ptr_t` referring to `__s`.
     * @since C++23
     * @headerfile <memory>
     */
*************** namespace __detail
*** 416,422 ****
     * @tparam _Pointer The type of pointer to convert to.
     * @param __s The pointer that should take ownership of the result.
     * @param __args... Arguments to use when resetting the smart pointer.
!    * @return A std::inout_ptr_t referring to `__s`.
     * @since C++23
     * @headerfile <memory>
     */
--- 416,422 ----
     * @tparam _Pointer The type of pointer to convert to.
     * @param __s The pointer that should take ownership of the result.
     * @param __args... Arguments to use when resetting the smart pointer.
!    * @return A `std::inout_ptr_t` referring to `__s`.
     * @since C++23
     * @headerfile <memory>
     */
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/random.tcc gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/random.tcc
*** gcc-14.3.0/libstdc++-v3/include/bits/random.tcc	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/random.tcc	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 83,89 ****
        __normalize(_InputIterator __first, _InputIterator __last,
  		  _OutputIterator __result, const _Tp& __factor)
        {
! 	for (; __first != __last; ++__first, ++__result)
  	  *__result = *__first / __factor;
  	return __result;
        }
--- 83,89 ----
        __normalize(_InputIterator __first, _InputIterator __last,
  		  _OutputIterator __result, const _Tp& __factor)
        {
! 	for (; __first != __last; ++__first, (void) ++__result)
  	  *__result = *__first / __factor;
  	return __result;
        }
*************** namespace __detail
*** 3075,3081 ****
  		 _InputIteratorW __wbegin)
        : _M_int(), _M_den(), _M_cp(), _M_m()
        {
! 	for (; __bbegin != __bend; ++__bbegin, ++__wbegin)
  	  {
  	    _M_int.push_back(*__bbegin);
  	    _M_den.push_back(*__wbegin);
--- 3075,3081 ----
  		 _InputIteratorW __wbegin)
        : _M_int(), _M_den(), _M_cp(), _M_m()
        {
! 	for (; __bbegin != __bend; ++__bbegin, (void) ++__wbegin)
  	  {
  	    _M_int.push_back(*__bbegin);
  	    _M_den.push_back(*__wbegin);
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/ranges_base.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/ranges_base.h
*** gcc-14.3.0/libstdc++-v3/include/bits/ranges_base.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/ranges_base.h	Fri Jun 19 06:51:07 2026
*************** namespace ranges
*** 514,524 ****
      using sentinel_t = decltype(ranges::end(std::declval<_Range&>()));
  
  #if __glibcxx_ranges_as_const // >= C++23
!   template<range _Range>
!     using const_iterator_t = const_iterator<iterator_t<_Range>>;
! 
!   template<range _Range>
!     using const_sentinel_t = const_sentinel<sentinel_t<_Range>>;
  
    template<range _Range>
      using range_const_reference_t = iter_const_reference_t<iterator_t<_Range>>;
--- 514,520 ----
      using sentinel_t = decltype(ranges::end(std::declval<_Range&>()));
  
  #if __glibcxx_ranges_as_const // >= C++23
!   // const_iterator_t and const_sentinel_t defined below.
  
    template<range _Range>
      using range_const_reference_t = iter_const_reference_t<iterator_t<_Range>>;
*************** namespace ranges
*** 670,676 ****
  			    (ranges::begin(__access::__possibly_const_range(__t))); }
  	{
  	  auto& __r = __access::__possibly_const_range(__t);
! 	  return const_iterator_t<decltype(__r)>(ranges::begin(__r));
  	}
  #else
        template<typename _Tp>
--- 666,672 ----
  			    (ranges::begin(__access::__possibly_const_range(__t))); }
  	{
  	  auto& __r = __access::__possibly_const_range(__t);
! 	  return const_iterator<decltype(ranges::begin(__r))>(ranges::begin(__r));
  	}
  #else
        template<typename _Tp>
*************** namespace ranges
*** 698,704 ****
  			    (ranges::end(__access::__possibly_const_range(__t))); }
  	{
  	  auto& __r = __access::__possibly_const_range(__t);
! 	  return const_sentinel_t<decltype(__r)>(ranges::end(__r));
  	}
  #else
        template<typename _Tp>
--- 694,700 ----
  			    (ranges::end(__access::__possibly_const_range(__t))); }
  	{
  	  auto& __r = __access::__possibly_const_range(__t);
! 	  return const_sentinel<decltype(ranges::end(__r))>(ranges::end(__r));
  	}
  #else
        template<typename _Tp>
*************** namespace ranges
*** 802,807 ****
--- 798,813 ----
      inline constexpr ranges::__access::_CData cdata{};
    }
  
+ #if __glibcxx_ranges_as_const // >= C++23
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 3946. The definition of const_iterator_t should be reworked
+   template<range _Range>
+     using const_iterator_t = decltype(ranges::cbegin(std::declval<_Range&>()));
+ 
+   template<range _Range>
+     using const_sentinel_t = decltype(ranges::cend(std::declval<_Range&>()));
+ #endif
+ 
    namespace __detail
    {
      template<typename _Tp>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/ranges_cmp.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/ranges_cmp.h
*** gcc-14.3.0/libstdc++-v3/include/bits/ranges_cmp.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/ranges_cmp.h	Fri Jun 19 06:51:07 2026
*************** namespace ranges
*** 68,77 ****
  	= requires (_Tp&& __t, _Up&& __u) { { __t < __u } -> same_as<bool>; }
  	  && convertible_to<_Tp, const volatile void*>
  	  && convertible_to<_Up, const volatile void*>
! 	  && (! requires(_Tp&& __t, _Up&& __u)
  	      { operator<(std::forward<_Tp>(__t), std::forward<_Up>(__u)); }
! 	      && ! requires(_Tp&& __t, _Up&& __u)
! 	      { std::forward<_Tp>(__t).operator<(std::forward<_Up>(__u)); });
    } // namespace __detail
  
    // [range.cmp] Concept-constrained comparisons
--- 68,78 ----
  	= requires (_Tp&& __t, _Up&& __u) { { __t < __u } -> same_as<bool>; }
  	  && convertible_to<_Tp, const volatile void*>
  	  && convertible_to<_Up, const volatile void*>
! 	  && ! requires(_Tp&& __t, _Up&& __u)
  	      { operator<(std::forward<_Tp>(__t), std::forward<_Up>(__u)); }
! 	  && ! requires(_Tp&& __t, _Up&& __u)
! 	      { std::forward<_Tp>(__t).operator<(std::forward<_Up>(__u)); }
! 	  && std::__detail::__not_overloaded_spaceship<_Tp, _Up>;
    } // namespace __detail
  
    // [range.cmp] Concept-constrained comparisons
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/regex_compiler.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/regex_compiler.h
*** gcc-14.3.0/libstdc++-v3/include/bits/regex_compiler.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/regex_compiler.h	Fri Jun 19 06:51:07 2026
*************** namespace __detail
*** 170,178 ****
        _StateSeqT
        _M_pop()
        {
! 	auto ret = _M_stack.top();
  	_M_stack.pop();
! 	return ret;
        }
  
        static _FlagT
--- 170,178 ----
        _StateSeqT
        _M_pop()
        {
! 	auto __ret = _M_stack.top();
  	_M_stack.pop();
! 	return __ret;
        }
  
        static _FlagT
*************** namespace __detail
*** 188,195 ****
--- 188,198 ----
  	  case grep:
  	  case egrep:
  	    return __f;
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wswitch" // do not warn about non-enumerator
  	  case _FlagT(0):
  	    return __f | ECMAScript;
+ #pragma GCC diagnostic pop
  	  default:
  	    std::__throw_regex_error(_S_grammar, "conflicting grammar options");
  	  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/shared_ptr_base.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/shared_ptr_base.h
*** gcc-14.3.0/libstdc++-v3/include/bits/shared_ptr_base.h	Fri May 23 11:02:08 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/shared_ptr_base.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2069,2075 ****
  
        __shared_ptr<_Tp, _Lp>
        lock() const noexcept
!       { return __shared_ptr<element_type, _Lp>(*this, std::nothrow); }
  
        long
        use_count() const noexcept
--- 2069,2075 ----
  
        __shared_ptr<_Tp, _Lp>
        lock() const noexcept
!       { return __shared_ptr<_Tp, _Lp>(*this, std::nothrow); }
  
        long
        use_count() const noexcept
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/stl_construct.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_construct.h
*** gcc-14.3.0/libstdc++-v3/include/bits/stl_construct.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_construct.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 152,157 ****
--- 152,161 ----
  #endif
      }
  
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wc++17-extensions" // for if-constexpr
+ 
+ #if __cplusplus < 201103L
    template<bool>
      struct _Destroy_aux
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 162,167 ****
--- 166,180 ----
  	  for (; __first != __last; ++__first)
  	    std::_Destroy(std::__addressof(*__first));
  	}
+ 
+       template<typename _ForwardIterator, typename _Size>
+ 	static _GLIBCXX20_CONSTEXPR _ForwardIterator
+ 	__destroy_n(_ForwardIterator __first, _Size __count)
+ 	{
+ 	  for (; __count > 0; (void)++__first, --__count)
+ 	    std::_Destroy(std::__addressof(*__first));
+ 	  return __first;
+ 	}
      };
  
    template<>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 170,176 ****
--- 183,198 ----
        template<typename _ForwardIterator>
          static void
          __destroy(_ForwardIterator, _ForwardIterator) { }
+ 
+       template<typename _ForwardIterator, typename _Size>
+ 	static _ForwardIterator
+ 	__destroy_n(_ForwardIterator __first, _Size __count)
+ 	{
+ 	  std::advance(__first, __count);
+ 	  return __first;
+ 	}
      };
+ #endif
  
    /**
     * Destroy a range of objects.  If the value_type of the object has
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 184,226 ****
        typedef typename iterator_traits<_ForwardIterator>::value_type
                         _Value_type;
  #if __cplusplus >= 201103L
!       // A deleted destructor is trivial, this ensures we reject such types:
!       static_assert(is_destructible<_Value_type>::value,
! 		    "value type is destructible");
! #endif
  #if __cpp_constexpr_dynamic_alloc // >= C++20
!       if (std::__is_constant_evaluated())
! 	return std::_Destroy_aux<false>::__destroy(__first, __last);
  #endif
        std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
  	__destroy(__first, __last);
      }
  
-   template<bool>
-     struct _Destroy_n_aux
-     {
-       template<typename _ForwardIterator, typename _Size>
- 	static _GLIBCXX20_CONSTEXPR _ForwardIterator
- 	__destroy_n(_ForwardIterator __first, _Size __count)
- 	{
- 	  for (; __count > 0; (void)++__first, --__count)
- 	    std::_Destroy(std::__addressof(*__first));
- 	  return __first;
- 	}
-     };
- 
-   template<>
-     struct _Destroy_n_aux<true>
-     {
-       template<typename _ForwardIterator, typename _Size>
-         static _ForwardIterator
-         __destroy_n(_ForwardIterator __first, _Size __count)
- 	{
- 	  std::advance(__first, __count);
- 	  return __first;
- 	}
-     };
- 
    /**
     * Destroy a range of objects.  If the value_type of the object has
     * a trivial destructor, the compiler should optimize all of this
--- 206,225 ----
        typedef typename iterator_traits<_ForwardIterator>::value_type
                         _Value_type;
  #if __cplusplus >= 201103L
!       if constexpr (!is_trivially_destructible<_Value_type>::value)
! 	for (; __first != __last; ++__first)
! 	  std::_Destroy(std::__addressof(*__first));
  #if __cpp_constexpr_dynamic_alloc // >= C++20
!       else if (std::__is_constant_evaluated())
! 	for (; __first != __last; ++__first)
! 	  std::destroy_at(std::__addressof(*__first));
  #endif
+ #else
        std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
  	__destroy(__first, __last);
+ #endif
      }
  
    /**
     * Destroy a range of objects.  If the value_type of the object has
     * a trivial destructor, the compiler should optimize all of this
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 233,249 ****
        typedef typename iterator_traits<_ForwardIterator>::value_type
                         _Value_type;
  #if __cplusplus >= 201103L
!       // A deleted destructor is trivial, this ensures we reject such types:
!       static_assert(is_destructible<_Value_type>::value,
! 		    "value type is destructible");
! #endif
  #if __cpp_constexpr_dynamic_alloc // >= C++20
!       if (std::__is_constant_evaluated())
! 	return std::_Destroy_n_aux<false>::__destroy_n(__first, __count);
  #endif
!       return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>::
  	__destroy_n(__first, __count);
      }
  
  #if __glibcxx_raw_memory_algorithms // >= C++17
    template <typename _ForwardIterator>
--- 232,254 ----
        typedef typename iterator_traits<_ForwardIterator>::value_type
                         _Value_type;
  #if __cplusplus >= 201103L
!       if constexpr (!is_trivially_destructible<_Value_type>::value)
! 	for (; __count > 0; (void)++__first, --__count)
! 	  std::_Destroy(std::__addressof(*__first));
  #if __cpp_constexpr_dynamic_alloc // >= C++20
!       else if (std::__is_constant_evaluated())
! 	for (; __count > 0; (void)++__first, --__count)
! 	  std::destroy_at(std::__addressof(*__first));
  #endif
!       else
! 	std::advance(__first, __count);
!       return __first;
! #else
!       return std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
  	__destroy_n(__first, __count);
+ #endif
      }
+ #pragma GCC diagnostic pop
  
  #if __glibcxx_raw_memory_algorithms // >= C++17
    template <typename _ForwardIterator>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/stl_function.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_function.h
*** gcc-14.3.0/libstdc++-v3/include/bits/stl_function.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_function.h	Fri Jun 19 06:51:07 2026
***************
*** 59,64 ****
--- 59,67 ----
  #if __cplusplus > 201103L
  #include <bits/move.h>
  #endif
+ #if __cplusplus >= 202002L
+ #include <concepts>
+ #endif
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 525,532 ****
  	noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u))
  	{
! 	  return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
! 			__ptr_cmp<_Tp, _Up>{});
  	}
  
        template<typename _Tp, typename _Up>
--- 528,542 ----
  	noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u))
  	{
! #pragma GCC diagnostic push
! #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
! 	  if constexpr (__ptr_cmp<_Tp, _Up>)
! 	    return greater<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	  else
! 	    return std::forward<_Tp>(__t) > std::forward<_Up>(__u);
! #pragma GCC diagnostic pop
  	}
  
        template<typename _Tp, typename _Up>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 537,556 ****
        typedef __is_transparent is_transparent;
  
      private:
!       template <typename _Tp, typename _Up>
! 	static constexpr decltype(auto)
! 	_S_cmp(_Tp&& __t, _Up&& __u, false_type)
! 	{ return std::forward<_Tp>(__t) > std::forward<_Up>(__u); }
! 
!       template <typename _Tp, typename _Up>
! 	static constexpr bool
! 	_S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
  	{
! 	  return greater<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	}
! 
        // True if there is no viable operator> member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
--- 547,566 ----
        typedef __is_transparent is_transparent;
  
      private:
! #if __cplusplus >= 202002L
!       template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = requires
  	{
! 	  requires
! 	       ! requires
! 		{ operator>(std::declval<_Tp>(), std::declval<_Up>()); }
! 	    && ! requires
! 		{ std::declval<_Tp>().operator>(std::declval<_Up>()); }
! 	    && __detail::__not_overloaded_spaceship<_Tp, _Up>
! 	    && is_convertible_v<_Tp, const volatile void*>
! 	    && is_convertible_v<_Up, const volatile void*>;
! 	};
! #else
        // True if there is no viable operator> member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 572,580 ****
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
! 	      is_convertible<_Tp, const volatile void*>,
! 	      is_convertible<_Up, const volatile void*>>;
      };
  
    /// One of the @link comparison_functors comparison functors@endlink.
--- 582,592 ----
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = __and_<
! 	  __not_overloaded<_Tp, _Up>,
! 	  is_convertible<_Tp, const volatile void*>,
! 	  is_convertible<_Up, const volatile void*>>::value;
! #endif
      };
  
    /// One of the @link comparison_functors comparison functors@endlink.
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 587,594 ****
  	noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
  	{
! 	  return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
! 			__ptr_cmp<_Tp, _Up>{});
  	}
  
        template<typename _Tp, typename _Up>
--- 599,613 ----
  	noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
  	{
! #pragma GCC diagnostic push
! #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
! 	  if constexpr (__ptr_cmp<_Tp, _Up>)
! 	    return less<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	  else
! 	    return std::forward<_Tp>(__t) < std::forward<_Up>(__u);
! #pragma GCC diagnostic pop
  	}
  
        template<typename _Tp, typename _Up>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 599,618 ****
        typedef __is_transparent is_transparent;
  
      private:
!       template <typename _Tp, typename _Up>
! 	static constexpr decltype(auto)
! 	_S_cmp(_Tp&& __t, _Up&& __u, false_type)
! 	{ return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
! 
!       template <typename _Tp, typename _Up>
! 	static constexpr bool
! 	_S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
  	{
! 	  return less<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	}
! 
        // True if there is no viable operator< member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
--- 618,637 ----
        typedef __is_transparent is_transparent;
  
      private:
! #if __cplusplus >= 202002L
!       template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = requires
  	{
! 	  requires
! 	       ! requires
! 		{ operator<(std::declval<_Tp>(), std::declval<_Up>()); }
! 	    && ! requires
! 		{ std::declval<_Tp>().operator<(std::declval<_Up>()); }
! 	    && __detail::__not_overloaded_spaceship<_Tp, _Up>
! 	    && is_convertible_v<_Tp, const volatile void*>
! 	    && is_convertible_v<_Up, const volatile void*>;
! 	};
! #else
        // True if there is no viable operator< member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 634,642 ****
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
! 	      is_convertible<_Tp, const volatile void*>,
! 	      is_convertible<_Up, const volatile void*>>;
      };
  
    /// One of the @link comparison_functors comparison functors@endlink.
--- 653,663 ----
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = __and_<
! 	  __not_overloaded<_Tp, _Up>,
! 	  is_convertible<_Tp, const volatile void*>,
! 	  is_convertible<_Up, const volatile void*>>::value;
! #endif
      };
  
    /// One of the @link comparison_functors comparison functors@endlink.
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 649,656 ****
  	noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))
  	{
! 	  return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
! 			__ptr_cmp<_Tp, _Up>{});
  	}
  
        template<typename _Tp, typename _Up>
--- 670,684 ----
  	noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))
  	{
! #pragma GCC diagnostic push
! #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
! 	  if constexpr (__ptr_cmp<_Tp, _Up>)
! 	    return greater_equal<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	  else
! 	    return std::forward<_Tp>(__t) >= std::forward<_Up>(__u);
! #pragma GCC diagnostic pop
  	}
  
        template<typename _Tp, typename _Up>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 661,680 ****
        typedef __is_transparent is_transparent;
  
      private:
!       template <typename _Tp, typename _Up>
! 	static constexpr decltype(auto)
! 	_S_cmp(_Tp&& __t, _Up&& __u, false_type)
! 	{ return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); }
! 
!       template <typename _Tp, typename _Up>
! 	static constexpr bool
! 	_S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
  	{
! 	  return greater_equal<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	}
! 
        // True if there is no viable operator>= member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
--- 689,708 ----
        typedef __is_transparent is_transparent;
  
      private:
! #if __cplusplus >= 202002L
!       template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = requires
  	{
! 	  requires
! 	       ! requires
! 		{ operator>=(std::declval<_Tp>(), std::declval<_Up>()); }
! 	    && ! requires
! 		{ std::declval<_Tp>().operator>=(std::declval<_Up>()); }
! 	    && __detail::__not_overloaded_spaceship<_Tp, _Up>
! 	    && is_convertible_v<_Tp, const volatile void*>
! 	    && is_convertible_v<_Up, const volatile void*>;
! 	};
! #else
        // True if there is no viable operator>= member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 696,704 ****
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
! 	      is_convertible<_Tp, const volatile void*>,
! 	      is_convertible<_Up, const volatile void*>>;
      };
  
    /// One of the @link comparison_functors comparison functors@endlink.
--- 724,734 ----
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = __and_<
! 	  __not_overloaded<_Tp, _Up>,
! 	  is_convertible<_Tp, const volatile void*>,
! 	  is_convertible<_Up, const volatile void*>>::value;
! #endif
      };
  
    /// One of the @link comparison_functors comparison functors@endlink.
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 711,718 ****
  	noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))
  	{
! 	  return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
! 			__ptr_cmp<_Tp, _Up>{});
  	}
  
        template<typename _Tp, typename _Up>
--- 741,755 ----
  	noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)))
  	-> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))
  	{
! #pragma GCC diagnostic push
! #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
! 	  if constexpr (__ptr_cmp<_Tp, _Up>)
! 	    return less_equal<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	  else
! 	    return std::forward<_Tp>(__t) <= std::forward<_Up>(__u);
! #pragma GCC diagnostic pop
  	}
  
        template<typename _Tp, typename _Up>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 723,742 ****
        typedef __is_transparent is_transparent;
  
      private:
!       template <typename _Tp, typename _Up>
! 	static constexpr decltype(auto)
! 	_S_cmp(_Tp&& __t, _Up&& __u, false_type)
! 	{ return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); }
! 
!       template <typename _Tp, typename _Up>
! 	static constexpr bool
! 	_S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
  	{
! 	  return less_equal<const volatile void*>{}(
! 	      static_cast<const volatile void*>(std::forward<_Tp>(__t)),
! 	      static_cast<const volatile void*>(std::forward<_Up>(__u)));
! 	}
! 
        // True if there is no viable operator<= member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
--- 760,779 ----
        typedef __is_transparent is_transparent;
  
      private:
! #if __cplusplus >= 202002L
!       template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = requires
  	{
! 	  requires
! 	       ! requires
! 		{ operator<=(std::declval<_Tp>(), std::declval<_Up>()); }
! 	    && ! requires
! 		{ std::declval<_Tp>().operator<=(std::declval<_Up>()); }
! 	    && __detail::__not_overloaded_spaceship<_Tp, _Up>
! 	    && is_convertible_v<_Tp, const volatile void*>
! 	    && is_convertible_v<_Up, const volatile void*>;
! 	};
! #else
        // True if there is no viable operator<= member function.
        template<typename _Tp, typename _Up, typename = void>
  	struct __not_overloaded2 : true_type { };
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 758,766 ****
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
! 	      is_convertible<_Tp, const volatile void*>,
! 	      is_convertible<_Up, const volatile void*>>;
      };
  #endif // __glibcxx_transparent_operators
    /** @}  */
--- 795,805 ----
  	: false_type { };
  
        template<typename _Tp, typename _Up>
! 	static constexpr bool __ptr_cmp = __and_<
! 	  __not_overloaded<_Tp, _Up>,
! 	  is_convertible<_Tp, const volatile void*>,
! 	  is_convertible<_Up, const volatile void*>>::value;
! #endif
      };
  #endif // __glibcxx_transparent_operators
    /** @}  */
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/stl_pair.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_pair.h
*** gcc-14.3.0/libstdc++-v3/include/bits/stl_pair.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_pair.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 425,431 ****
  
        /// Constructor accepting lvalues of `first_type` and `second_type`
        constexpr explicit(!_S_convertible<const _T1&, const _T2&>())
!       pair(const _T1& __x, const _T2& __y)
        noexcept(_S_nothrow_constructible<const _T1&, const _T2&>())
        requires (_S_constructible<const _T1&, const _T2&>())
        : first(__x), second(__y)
--- 425,431 ----
  
        /// Constructor accepting lvalues of `first_type` and `second_type`
        constexpr explicit(!_S_convertible<const _T1&, const _T2&>())
!       pair(const type_identity_t<_T1>& __x, const _T2& __y)
        noexcept(_S_nothrow_constructible<const _T1&, const _T2&>())
        requires (_S_constructible<const _T1&, const _T2&>())
        : first(__x), second(__y)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1286,1297 ****
    template <typename _Tp, typename _Up>
      constexpr _Tp&&
      get(pair<_Tp, _Up>&& __p) noexcept
!     { return std::move(__p.first); }
  
    template <typename _Tp, typename _Up>
      constexpr const _Tp&&
      get(const pair<_Tp, _Up>&& __p) noexcept
!     { return std::move(__p.first); }
  
    template <typename _Tp, typename _Up>
      constexpr _Tp&
--- 1286,1297 ----
    template <typename _Tp, typename _Up>
      constexpr _Tp&&
      get(pair<_Tp, _Up>&& __p) noexcept
!     { return std::forward<_Tp>(__p.first); }
  
    template <typename _Tp, typename _Up>
      constexpr const _Tp&&
      get(const pair<_Tp, _Up>&& __p) noexcept
!     { return std::forward<const _Tp>(__p.first); }
  
    template <typename _Tp, typename _Up>
      constexpr _Tp&
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1306,1317 ****
    template <typename _Tp, typename _Up>
      constexpr _Tp&&
      get(pair<_Up, _Tp>&& __p) noexcept
!     { return std::move(__p.second); }
  
    template <typename _Tp, typename _Up>
      constexpr const _Tp&&
      get(const pair<_Up, _Tp>&& __p) noexcept
!     { return std::move(__p.second); }
  #endif // __glibcxx_tuples_by_type
  
  
--- 1306,1317 ----
    template <typename _Tp, typename _Up>
      constexpr _Tp&&
      get(pair<_Up, _Tp>&& __p) noexcept
!     { return std::forward<_Tp>(__p.second); }
  
    template <typename _Tp, typename _Up>
      constexpr const _Tp&&
      get(const pair<_Up, _Tp>&& __p) noexcept
!     { return std::forward<const _Tp>(__p.second); }
  #endif // __glibcxx_tuples_by_type
  
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/stl_queue.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_queue.h
*** gcc-14.3.0/libstdc++-v3/include/bits/stl_queue.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_queue.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 564,569 ****
--- 564,589 ----
        : c(std::move(__s)), comp(__x)
        { std::make_heap(c.begin(), c.end(), comp); }
  
+       priority_queue(const priority_queue&) = default;
+       priority_queue& operator=(const priority_queue&) = default;
+ 
+       priority_queue(priority_queue&& __q)
+       noexcept(__and_<is_nothrow_move_constructible<_Sequence>,
+ 		      is_nothrow_move_constructible<_Compare>>::value)
+       : c(std::move(__q.c)), comp(std::move(__q.comp))
+       { __q.c.clear(); }
+ 
+       priority_queue&
+       operator=(priority_queue&& __q)
+       noexcept(__and_<is_nothrow_move_assignable<_Sequence>,
+ 		      is_nothrow_move_assignable<_Compare>>::value)
+       {
+ 	c = std::move(__q.c);
+ 	__q.c.clear();
+ 	comp = std::move(__q.comp);
+ 	return *this;
+       }
+ 
        template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
  	explicit
  	priority_queue(const _Alloc& __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 592,598 ****
  
        template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
  	priority_queue(priority_queue&& __q, const _Alloc& __a)
! 	: c(std::move(__q.c), __a), comp(std::move(__q.comp)) { }
  #endif
  
        /**
--- 612,619 ----
  
        template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
  	priority_queue(priority_queue&& __q, const _Alloc& __a)
! 	: c(std::move(__q.c), __a), comp(std::move(__q.comp))
! 	{ __q.c.clear(); }
  #endif
  
        /**
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 607,614 ****
         *  the copy according to @a __x.
         *
         *  For more information on function objects, see the
!        *  documentation on @link functors functor base
!        *  classes@endlink.
         */
  #if __cplusplus < 201103L
        template<typename _InputIterator>
--- 628,634 ----
         *  the copy according to @a __x.
         *
         *  For more information on function objects, see the
!        *  documentation on @link functors functor base classes@endlink.
         */
  #if __cplusplus < 201103L
        template<typename _InputIterator>
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/stl_vector.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_vector.h
*** gcc-14.3.0/libstdc++-v3/include/bits/stl_vector.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/stl_vector.h	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1047,1053 ****
        resize(size_type __new_size, const value_type& __x)
        {
  	if (__new_size > size())
! 	  _M_fill_insert(end(), __new_size - size(), __x);
  	else if (__new_size < size())
  	  _M_erase_at_end(this->_M_impl._M_start + __new_size);
        }
--- 1047,1053 ----
        resize(size_type __new_size, const value_type& __x)
        {
  	if (__new_size > size())
! 	  _M_fill_append(__new_size - size(), __x);
  	else if (__new_size < size())
  	  _M_erase_at_end(this->_M_impl._M_start + __new_size);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1068,1074 ****
        resize(size_type __new_size, value_type __x = value_type())
        {
  	if (__new_size > size())
! 	  _M_fill_insert(end(), __new_size - size(), __x);
  	else if (__new_size < size())
  	  _M_erase_at_end(this->_M_impl._M_start + __new_size);
        }
--- 1068,1074 ----
        resize(size_type __new_size, value_type __x = value_type())
        {
  	if (__new_size > size())
! 	  _M_fill_append(__new_size - size(), __x);
  	else if (__new_size < size())
  	  _M_erase_at_end(this->_M_impl._M_start + __new_size);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1828,1833 ****
--- 1828,1838 ----
        void
        _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
  
+       // Called by resize(n,x), and the _M_fill_insert(end(), n, x)
+       _GLIBCXX20_CONSTEXPR
+       void
+       _M_fill_append(size_type __n, const value_type& __x);
+ 
  #if __cplusplus >= 201103L
        // Called by resize(n).
        _GLIBCXX20_CONSTEXPR
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/unique_ptr.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/unique_ptr.h
*** gcc-14.3.0/libstdc++-v3/include/bits/unique_ptr.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/unique_ptr.h	Fri Jun 19 06:51:07 2026
***************
*** 1,4 ****
- 
  // unique_ptr implementation -*- C++ -*-
  
  // Copyright (C) 2008-2024 Free Software Foundation, Inc.
--- 1,3 ----
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/vector.tcc gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/vector.tcc
*** gcc-14.3.0/libstdc++-v3/include/bits/vector.tcc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/vector.tcc	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 702,709 ****
      {
        if (__n != 0)
  	{
! 	  if (size_type(this->_M_impl._M_end_of_storage
! 			- this->_M_impl._M_finish) >= __n)
  	    {
  #if __cplusplus < 201103L
  	      value_type __x_copy = __x;
--- 702,711 ----
      {
        if (__n != 0)
  	{
! 	  if (__position.base() == this->_M_impl._M_finish)
! 	    _M_fill_append(__n, __x);
! 	  else if (size_type(this->_M_impl._M_end_of_storage
! 			       - this->_M_impl._M_finish) >= __n)
  	    {
  #if __cplusplus < 201103L
  	      value_type __x_copy = __x;
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 798,803 ****
--- 800,859 ----
  	}
      }
  
+   template<typename _Tp, typename _Alloc>
+     _GLIBCXX20_CONSTEXPR
+     void
+     vector<_Tp, _Alloc>::
+     _M_fill_append(size_type __n, const value_type& __x)
+     {
+        if (size_type(this->_M_impl._M_end_of_storage
+ 		     - this->_M_impl._M_finish) >= __n)
+ 	 {
+ 	   _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+ 	   this->_M_impl._M_finish =
+ 	     std::__uninitialized_fill_n_a(this->_M_impl._M_finish, __n, __x,
+ 					   _M_get_Tp_allocator());
+ 	   _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
+ 	 }
+        else
+ 	 {
+ 	   // Make local copies of these members because the compiler thinks
+ 	   // the allocator can alter them if 'this' is globally reachable.
+ 	   pointer __old_start = this->_M_impl._M_start;
+ 	   pointer __old_finish = this->_M_impl._M_finish;
+ 	   const size_type __old_size = __old_finish - __old_start;
+ 
+ 	   const size_type __len =
+ 	     _M_check_len(__n, "vector::_M_fill_append");
+ 	   pointer __new_start(this->_M_allocate(__len));
+ 	   pointer __new_finish(__new_start + __old_size);
+ 	   __try
+ 	     {
+ 	       // See _M_realloc_insert above.
+ 	       __new_finish = std::__uninitialized_fill_n_a(
+ 				__new_finish, __n, __x,
+ 				_M_get_Tp_allocator());
+ 	       std::__uninitialized_move_if_noexcept_a(
+ 		 __old_start, __old_finish, __new_start,
+ 		 _M_get_Tp_allocator());
+ 	     }
+ 	   __catch(...)
+ 	     {
+ 		std::_Destroy(__new_start + __old_size, __new_finish,
+ 			      _M_get_Tp_allocator());
+ 		_M_deallocate(__new_start, __len);
+ 		__throw_exception_again;
+ 	      }
+ 	   std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
+ 	   _GLIBCXX_ASAN_ANNOTATE_REINIT;
+ 	   _M_deallocate(__old_start,
+ 			 this->_M_impl._M_end_of_storage - __old_start);
+ 	   this->_M_impl._M_start = __new_start;
+ 	   this->_M_impl._M_finish = __new_finish;
+ 	   this->_M_impl._M_end_of_storage = __new_start + __len;
+ 	 }
+     }
+ 
  #if __cplusplus >= 201103L
    template<typename _Tp, typename _Alloc>
      _GLIBCXX20_CONSTEXPR
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/version.def gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/version.def
*** gcc-14.3.0/libstdc++-v3/include/bits/version.def	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/version.def	Fri Jun 19 06:51:07 2026
*************** ftms = {
*** 1616,1621 ****
--- 1616,1637 ----
  };
  
  ftms = {
+   name = stdbit_h;
+   values = {
+     v = 202603;
+     cxxmin = 26;
+   };
+ };
+ 
+ ftms = {
+   name = stdckdint_h;
+   values = {
+     v = 202603;
+     cxxmin = 26;
+   };
+ };
+ 
+ ftms = {
    name = adaptor_iterator_pair_constructor;
    values = {
      v = 202106;
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/bits/version.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/version.h
*** gcc-14.3.0/libstdc++-v3/include/bits/version.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/bits/version.h	Fri Jun 19 06:51:07 2026
***************
*** 1798,1803 ****
--- 1798,1823 ----
  #endif /* !defined(__cpp_lib_stdatomic_h) && defined(__glibcxx_want_stdatomic_h) */
  #undef __glibcxx_want_stdatomic_h
  
+ #if !defined(__cpp_lib_stdbit_h)
+ # if (__cplusplus >  202302L)
+ #  define __glibcxx_stdbit_h 202603L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdbit_h)
+ #   define __cpp_lib_stdbit_h 202603L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_stdbit_h) */
+ #undef __glibcxx_want_stdbit_h
+ 
+ #if !defined(__cpp_lib_stdckdint_h)
+ # if (__cplusplus >  202302L)
+ #  define __glibcxx_stdckdint_h 202603L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdckdint_h)
+ #   define __cpp_lib_stdckdint_h 202603L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_stdckdint_h) */
+ #undef __glibcxx_want_stdckdint_h
+ 
  #if !defined(__cpp_lib_adaptor_iterator_pair_constructor)
  # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_adaptor_iterator_pair_constructor 202106L
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/c_compatibility/stdbit.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/c_compatibility/stdbit.h
*** gcc-14.3.0/libstdc++-v3/include/c_compatibility/stdbit.h	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/c_compatibility/stdbit.h	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,586 ----
+ // C compatibility header <stdbit.h> -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ /** @file include/stdbit.h
+  *  This is a Standard C++ Library header.
+  */
+ 
+ #ifndef _GLIBCXX_STDBIT_H
+ #define _GLIBCXX_STDBIT_H
+ 
+ #define __glibcxx_want_stdbit_h
+ #include <bits/version.h>
+ 
+ #ifdef __cpp_lib_stdbit_h // C++ >= 26
+ 
+ #include <bit>
+ 
+ #define __STDC_VERSION_STDBIT_H__ 202311L
+ 
+ #define __STDC_ENDIAN_BIG__     __ORDER_BIG_ENDIAN__
+ #define __STDC_ENDIAN_LITTLE__  __ORDER_LITTLE_ENDIAN__
+ #define __STDC_ENDIAN_NATIVE__  __BYTE_ORDER__
+ 
+ #ifndef _GLIBCXX_DOXYGEN
+ // We define these in our own namespace, but let Doxygen think otherwise.
+ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+ {
+ #endif
+ 
+ /** Count the number of leading zero bits
+  *
+  * @param  __value An unsigned integer.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_leading_zeros(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::countl_zero(__value);
+ }
+ 
+ inline unsigned int
+ stdc_leading_zeros_uc(unsigned char __value)
+ { return stdc_leading_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_leading_zeros_us(unsigned short __value)
+ { return stdc_leading_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_leading_zeros_ui(unsigned int __value)
+ { return stdc_leading_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_leading_zeros_ul(unsigned long int __value)
+ { return stdc_leading_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_leading_zeros_ull(unsigned long long int __value)
+ { return stdc_leading_zeros(__value); }
+ /// @}
+ 
+ /** Count the number of leading one bits
+  *
+  * @param  __value An unsigned integer.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_leading_ones(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::countl_one(__value);
+ }
+ 
+ inline unsigned int
+ stdc_leading_ones_uc(unsigned char __value)
+ { return stdc_leading_ones(__value); }
+ 
+ inline unsigned int
+ stdc_leading_ones_us(unsigned short __value)
+ { return stdc_leading_ones(__value); }
+ 
+ inline unsigned int
+ stdc_leading_ones_ui(unsigned int __value)
+ { return stdc_leading_ones(__value); }
+ 
+ inline unsigned int
+ stdc_leading_ones_ul(unsigned long int __value)
+ { return stdc_leading_ones(__value); }
+ 
+ inline unsigned int
+ stdc_leading_ones_ull(unsigned long long int __value)
+ { return stdc_leading_ones(__value); }
+ /// @}
+ 
+ /** Count the number of trailing zero bits
+  *
+  * @param  __value An unsigned integer.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_trailing_zeros(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::countr_zero(__value);
+ }
+ 
+ inline unsigned int
+ stdc_trailing_zeros_uc(unsigned char __value)
+ { return stdc_trailing_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_zeros_us(unsigned short __value)
+ { return stdc_trailing_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_zeros_ui(unsigned int __value)
+ { return stdc_trailing_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_zeros_ul(unsigned long int __value)
+ { return stdc_trailing_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_zeros_ull(unsigned long long int __value)
+ { return stdc_trailing_zeros(__value); }
+ /// @}
+ 
+ /** Count the number of trailing one bits
+  *
+  * @param  __value An unsigned integer.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_trailing_ones(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::countr_one(__value);
+ }
+ 
+ inline unsigned int
+ stdc_trailing_ones_uc(unsigned char __value)
+ { return stdc_trailing_ones(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_ones_us(unsigned short __value)
+ { return stdc_trailing_ones(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_ones_ui(unsigned int __value)
+ { return stdc_trailing_ones(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_ones_ul(unsigned long int __value)
+ { return stdc_trailing_ones(__value); }
+ 
+ inline unsigned int
+ stdc_trailing_ones_ull(unsigned long long int __value)
+ { return stdc_trailing_ones(__value); }
+ /// @}
+ 
+ /** Find the leftmost (i.e. most significant) zero bit
+  *
+  * @param  __value An unsigned integer.
+  * @return The one-based index of the first zero bit counting from the left,
+  *         or zero if there are no zero bits.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_first_leading_zero(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value);
+ }
+ 
+ inline unsigned int
+ stdc_first_leading_zero_uc(unsigned char __value)
+ { return stdc_first_leading_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_zero_us(unsigned short __value)
+ { return stdc_first_leading_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_zero_ui(unsigned int __value)
+ { return stdc_first_leading_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_zero_ul(unsigned long int __value)
+ { return stdc_first_leading_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_zero_ull(unsigned long long int __value)
+ { return stdc_first_leading_zero(__value); }
+ /// @}
+ 
+ /** Find the leftmost (i.e. most significant) one bit
+  *
+  * @param  __value An unsigned integer.
+  * @return The one-based index of the first one bit counting from the left,
+  *         or zero if there are no one bits.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_first_leading_one(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return __value == 0 ? 0 : 1 + std::countl_zero(__value);
+ }
+ 
+ inline unsigned int
+ stdc_first_leading_one_uc(unsigned char __value)
+ { return stdc_first_leading_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_one_us(unsigned short __value)
+ { return stdc_first_leading_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_one_ui(unsigned int __value)
+ { return stdc_first_leading_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_one_ul(unsigned long int __value)
+ { return stdc_first_leading_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_leading_one_ull(unsigned long long int __value)
+ { return stdc_first_leading_one(__value); }
+ /// @}
+ 
+ /** Find the rightmost (i.e. least significant) zero bit
+  *
+  * @param  __value An unsigned integer.
+  * @return The one-based index of the first zero bit counting from the right,
+  *         or zero if there are no zero bits.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_first_trailing_zero(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value);
+ }
+ 
+ inline unsigned int
+ stdc_first_trailing_zero_uc(unsigned char __value)
+ { return stdc_first_trailing_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_zero_us(unsigned short __value)
+ { return stdc_first_trailing_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_zero_ui(unsigned int __value)
+ { return stdc_first_trailing_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_zero_ul(unsigned long int __value)
+ { return stdc_first_trailing_zero(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_zero_ull(unsigned long long int __value)
+ { return stdc_first_trailing_zero(__value); }
+ /// @}
+ 
+ /** Find the rightmost (i.e. least significant) one bit
+  *
+  * @param  __value An unsigned integer.
+  * @return The one-based index of the first one bit counting from the right,
+  *         or zero if there are no one bits.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_first_trailing_one(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return __value == 0 ? 0 : 1 + std::countr_zero(__value);
+ }
+ 
+ inline unsigned int
+ stdc_first_trailing_one_uc(unsigned char __value)
+ { return stdc_first_trailing_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_one_us(unsigned short __value)
+ { return stdc_first_trailing_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_one_ui(unsigned int __value)
+ { return stdc_first_trailing_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_one_ul(unsigned long int __value)
+ { return stdc_first_trailing_one(__value); }
+ 
+ inline unsigned int
+ stdc_first_trailing_one_ull(unsigned long long int __value)
+ { return stdc_first_trailing_one(__value); }
+ /// @}
+ 
+ /** Count zeros
+  *
+  * @param  __value An unsigned integer.
+  * @return The total number of zero bits in `__value`.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_count_zeros(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::popcount(_Tp(~__value));
+ }
+ 
+ inline unsigned int
+ stdc_count_zeros_uc(unsigned char __value)
+ { return stdc_count_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_count_zeros_us(unsigned short __value)
+ { return stdc_count_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_count_zeros_ui(unsigned int __value)
+ { return stdc_count_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_count_zeros_ul(unsigned long int __value)
+ { return stdc_count_zeros(__value); }
+ 
+ inline unsigned int
+ stdc_count_zeros_ull(unsigned long long int __value)
+ { return stdc_count_zeros(__value); }
+ /// @}
+ 
+ /** Count ones
+  *
+  * @param  __value An unsigned integer.
+  * @return The total number of one bits in `__value`.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_count_ones(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::popcount(__value);
+ }
+ 
+ inline unsigned int
+ stdc_count_ones_uc(unsigned char __value)
+ { return stdc_count_ones(__value); }
+ 
+ inline unsigned int
+ stdc_count_ones_us(unsigned short __value)
+ { return stdc_count_ones(__value); }
+ 
+ inline unsigned int
+ stdc_count_ones_ui(unsigned int __value)
+ { return stdc_count_ones(__value); }
+ 
+ inline unsigned int
+ stdc_count_ones_ul(unsigned long int __value)
+ { return stdc_count_ones(__value); }
+ 
+ inline unsigned int
+ stdc_count_ones_ull(unsigned long long int __value)
+ { return stdc_count_ones(__value); }
+ /// @}
+ 
+ /** Power of two check
+  *
+  * @param  __value An unsigned integer.
+  * @return True if the value has a single bit set, false otherwise.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline bool
+ stdc_has_single_bit(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::has_single_bit(__value);
+ }
+ 
+ inline bool
+ stdc_has_single_bit_uc(unsigned char __value)
+ { return stdc_has_single_bit(__value); }
+ 
+ inline bool
+ stdc_has_single_bit_us(unsigned short __value)
+ { return stdc_has_single_bit(__value); }
+ 
+ inline bool
+ stdc_has_single_bit_ui(unsigned int __value)
+ { return stdc_has_single_bit(__value); }
+ 
+ inline bool
+ stdc_has_single_bit_ul(unsigned long int __value)
+ { return stdc_has_single_bit(__value); }
+ 
+ inline bool
+ stdc_has_single_bit_ull(unsigned long long int __value)
+ { return stdc_has_single_bit(__value); }
+ /// @}
+ 
+ /** Bit width
+  *
+  * @param  __value An unsigned integer.
+  * @return The minimum number of bits needed to represent `__value`.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline unsigned int
+ stdc_bit_width(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::bit_width(__value);
+ }
+ 
+ inline unsigned int
+ stdc_bit_width_uc(unsigned char __value)
+ { return stdc_bit_width(__value); }
+ 
+ inline unsigned int
+ stdc_bit_width_us(unsigned short __value)
+ { return stdc_bit_width(__value); }
+ 
+ inline unsigned int
+ stdc_bit_width_ui(unsigned int __value)
+ { return stdc_bit_width(__value); }
+ 
+ inline unsigned int
+ stdc_bit_width_ul(unsigned long int __value)
+ { return stdc_bit_width(__value); }
+ 
+ inline unsigned int
+ stdc_bit_width_ull(unsigned long long int __value)
+ { return stdc_bit_width(__value); }
+ /// @}
+ 
+ /** Bit floor
+  *
+  * @param  __value An unsigned integer.
+  * @return The largest power of two that is not greater than `__value`.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline _Tp
+ stdc_bit_floor(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   return std::bit_floor(__value);
+ }
+ 
+ inline unsigned char
+ stdc_bit_floor_uc(unsigned char __value)
+ { return stdc_bit_floor(__value); }
+ 
+ inline unsigned short
+ stdc_bit_floor_us(unsigned short __value)
+ { return stdc_bit_floor(__value); }
+ 
+ inline unsigned int
+ stdc_bit_floor_ui(unsigned int __value)
+ { return stdc_bit_floor(__value); }
+ 
+ inline unsigned long int
+ stdc_bit_floor_ul(unsigned long int __value)
+ { return stdc_bit_floor(__value); }
+ 
+ inline unsigned long long int
+ stdc_bit_floor_ull(unsigned long long int __value)
+ { return stdc_bit_floor(__value); }
+ /// @}
+ 
+ /** Bit ceiling
+  *
+  * Unlike `std::bit_ceil`, this is defined to return zero for values which
+  * are not representable in the return type.
+  *
+  * @param  __value An unsigned integer.
+  * @return The smallest power of two that is not less than `__value`.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp>
+ inline _Tp
+ stdc_bit_ceil(_Tp __value)
+ {
+   static_assert(std::__unsigned_integer<_Tp>);
+   constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - 1);
+   return (__value & __msb) ? 0 : std::bit_ceil(__value);
+ }
+ 
+ inline unsigned char
+ stdc_bit_ceil_uc(unsigned char __value)
+ { return stdc_bit_ceil(__value); }
+ 
+ inline unsigned short
+ stdc_bit_ceil_us(unsigned short __value)
+ { return stdc_bit_ceil(__value); }
+ 
+ inline unsigned int
+ stdc_bit_ceil_ui(unsigned int __value)
+ { return stdc_bit_ceil(__value); }
+ 
+ inline unsigned long int
+ stdc_bit_ceil_ul(unsigned long int __value)
+ { return stdc_bit_ceil(__value); }
+ 
+ inline unsigned long long int
+ stdc_bit_ceil_ull(unsigned long long int __value)
+ { return stdc_bit_ceil(__value); }
+ /// @}
+ 
+ #ifndef _GLIBCXX_DOXYGEN
+ } // namespace __gnu_cxx
+ #define _GLIBCXX_STDBIT_FUNC(F) \
+   using __gnu_cxx::F ## _uc; \
+   using __gnu_cxx::F ## _us; \
+   using __gnu_cxx::F ## _ui; \
+   using __gnu_cxx::F ## _ul; \
+   using __gnu_cxx::F ## _ull; \
+   using __gnu_cxx::F
+ _GLIBCXX_STDBIT_FUNC(stdc_leading_zeros);
+ _GLIBCXX_STDBIT_FUNC(stdc_leading_ones);
+ _GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros);
+ _GLIBCXX_STDBIT_FUNC(stdc_trailing_ones);
+ _GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero);
+ _GLIBCXX_STDBIT_FUNC(stdc_first_leading_one);
+ _GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero);
+ _GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one);
+ _GLIBCXX_STDBIT_FUNC(stdc_count_zeros);
+ _GLIBCXX_STDBIT_FUNC(stdc_count_ones);
+ _GLIBCXX_STDBIT_FUNC(stdc_has_single_bit);
+ _GLIBCXX_STDBIT_FUNC(stdc_bit_width);
+ _GLIBCXX_STDBIT_FUNC(stdc_bit_floor);
+ _GLIBCXX_STDBIT_FUNC(stdc_bit_ceil);
+ #undef _GLIBCXX_STDBIT_FUNC
+ #endif // !DOXYGEN
+ #endif // __cpp_lib_stdbit_h
+ 
+ #endif // _GLIBCXX_STDBIT_H
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/c_compatibility/stdckdint.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/c_compatibility/stdckdint.h
*** gcc-14.3.0/libstdc++-v3/include/c_compatibility/stdckdint.h	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/c_compatibility/stdckdint.h	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,117 ----
+ // C compatibility header <stdckdint.h> -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ /** @file include/stdckdint.h
+  *  This is a Standard C++ Library header.
+  */
+ 
+ #ifndef _GLIBCXX_STDCKDINT_H
+ #define _GLIBCXX_STDCKDINT_H
+ 
+ #define __glibcxx_want_stdckdint_h
+ #include <bits/version.h>
+ 
+ #ifdef __cpp_lib_stdckdint_h // C++ >= 26
+ 
+ #include <type_traits>
+ #include <concepts>
+ 
+ #define __STDC_VERSION_STDCKDINT_H__ 202311L
+ 
+ #ifndef _GLIBCXX_DOXYGEN
+ // We define these in our own namespace, but let Doxygen think otherwise.
+ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+ {
+ #endif
+ /// @cond undocumented
+ namespace __detail
+ {
+   template<typename _Tp>
+     concept __cv_unqual_signed_or_unsigned_integer_type
+       = std::same_as<_Tp, std::remove_cv_t<_Tp>>
+ 	  && std::__is_standard_integer<_Tp>::value;
+ }
+ /// @endcond
+ 
+ /** Checked integer arithmetic
+  *
+  * Performs arithmetic on `__a` and `__b` and stores the result in `*__result`,
+  * with overflow detection.
+  * The arithmetic is performed in infinite signed precision, without overflow,
+  * then converted to the result type, `_Tp1`. If the converted result is not
+  * equal to the infinite precision result, the stored result is wrapped to the
+  * width of `_Tp1` and `true` is returned. Otherwise, the stored result is
+  * correct and `false` is returned.
+  *
+  * @param __result A pointer to a signed or unsigned integer type.
+  * @param __a      A signed or unsigned integer type.
+  * @param __b      A signed or unsigned integer type.
+  * @return True if overflow occurred, false otherwise.
+  * @since C++26
+  * @{
+  */
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+   inline bool
+   ckd_add(_Tp1* __result, _Tp2 __a, _Tp3 __b)
+   {
+     using __gnu_cxx::__detail::__cv_unqual_signed_or_unsigned_integer_type;
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp1>);
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp2>);
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp3>);
+     return __builtin_add_overflow(__a, __b, __result);
+   }
+ 
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+   inline bool
+   ckd_sub(_Tp1* __result, _Tp2 __a, _Tp3 __b)
+   {
+     using __gnu_cxx::__detail::__cv_unqual_signed_or_unsigned_integer_type;
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp1>);
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp2>);
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp3>);
+     return __builtin_sub_overflow(__a, __b, __result);
+   }
+ 
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+   inline bool
+   ckd_mul(_Tp1* __result, _Tp2 __a, _Tp3 __b)
+   {
+     using __gnu_cxx::__detail::__cv_unqual_signed_or_unsigned_integer_type;
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp1>);
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp2>);
+     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp3>);
+     return __builtin_mul_overflow(__a, __b, __result);
+   }
+ /// @}
+ #ifndef _GLIBCXX_DOXYGEN
+ }
+ 
+ using __gnu_cxx::ckd_add;
+ using __gnu_cxx::ckd_sub;
+ using __gnu_cxx::ckd_mul;
+ #endif
+ 
+ #endif // __cpp_lib_stdckdint_h
+ 
+ #endif // _GLIBCXX_STDCKDINT_H
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/c_global/cmath gcc-14.3.0-RC-20260619/libstdc++-v3/include/c_global/cmath
*** gcc-14.3.0/libstdc++-v3/include/c_global/cmath	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/c_global/cmath	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3785,3794 ****
    { return std::__hypot3<long double>(__x, __y, __z); }
  
    template<typename _Tp, typename _Up, typename _Vp>
!     __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
      hypot(_Tp __x, _Up __y, _Vp __z)
      {
!       using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
        return std::__hypot3<__type>(__x, __y, __z);
      }
  
--- 3785,3794 ----
    { return std::__hypot3<long double>(__x, __y, __z); }
  
    template<typename _Tp, typename _Up, typename _Vp>
!     typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
      hypot(_Tp __x, _Up __y, _Vp __z)
      {
!       using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type;
        return std::__hypot3<__type>(__x, __y, __z);
      }
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/ext/pointer.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/ext/pointer.h
*** gcc-14.3.0/libstdc++-v3/include/ext/pointer.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/ext/pointer.h	Fri Jun 19 06:51:07 2026
***************
*** 38,43 ****
--- 38,44 ----
  
  #pragma GCC system_header
  
+ #include <bits/c++config.h>
  #if _GLIBCXX_HOSTED
  #  include <iosfwd>
  #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/precompiled/extc++.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/precompiled/extc++.h
*** gcc-14.3.0/libstdc++-v3/include/precompiled/extc++.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/precompiled/extc++.h	Fri Jun 19 06:51:07 2026
***************
*** 37,43 ****
  #endif
  #include <ext/alloc_traits.h>
  #include <ext/atomicity.h>
- #include <ext/cast.h>
  #include <ext/iterator>
  #include <ext/numeric_traits.h>
  #include <ext/pointer.h>
--- 37,42 ----
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/pstl/parallel_backend_tbb.h gcc-14.3.0-RC-20260619/libstdc++-v3/include/pstl/parallel_backend_tbb.h
*** gcc-14.3.0/libstdc++-v3/include/pstl/parallel_backend_tbb.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/pstl/parallel_backend_tbb.h	Fri Jun 19 06:51:07 2026
*************** class __root_task
*** 521,527 ****
      friend class __func_task<_Func>;
  };
  
! #else  // TBB_INTERFACE_VERSION <= 12000
  class __task : public tbb::detail::d1::task
  {
    protected:
--- 521,527 ----
      friend class __func_task<_Func>;
  };
  
! #else  // TBB_INTERFACE_VERSION > 12000
  class __task : public tbb::detail::d1::task
  {
    protected:
*************** class __func_task : public __task
*** 656,665 ****
  
          _PSTL_ASSERT(__parent != nullptr);
          _PSTL_ASSERT(__parent->_M_refcount.load(std::memory_order_relaxed) > 0);
!         if (--__parent->_M_refcount == 0)
          {
              _PSTL_ASSERT(__next == nullptr);
-             __alloc.deallocate(this, *__ed);
              return __parent;
          }
  
--- 656,671 ----
  
          _PSTL_ASSERT(__parent != nullptr);
          _PSTL_ASSERT(__parent->_M_refcount.load(std::memory_order_relaxed) > 0);
! 
!         auto __refcount = --__parent->_M_refcount;
! 
!         // Placing the deallocation after the refcount decrement allows another thread to proceed with tree
!         // folding concurrently with this task cleanup.
!         __alloc.deallocate(this, *__ed);
! 
!         if (__refcount == 0)
          {
              _PSTL_ASSERT(__next == nullptr);
              return __parent;
          }
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/any gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/any
*** gcc-14.3.0/libstdc++-v3/include/std/any	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/any	Fri Jun 19 06:51:07 2026
***************
*** 42,47 ****
--- 42,50 ----
  #include <type_traits>
  #include <bits/utility.h> // in_place_type_t
  
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" // aligned_storage
+ 
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 661,665 ****
--- 664,670 ----
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace std
  
+ #pragma GCC diagnostic pop
+ 
  #endif // __cpp_lib_any
  #endif // _GLIBCXX_ANY
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/atomic gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/atomic
*** gcc-14.3.0/libstdc++-v3/include/std/atomic	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/atomic	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 235,247 ****
        atomic& operator=(const atomic&) = delete;
        atomic& operator=(const atomic&) volatile = delete;
  
        constexpr atomic(_Tp __i) noexcept : _M_i(__i)
        {
! #if __cplusplus >= 201402L && __has_builtin(__builtin_clear_padding)
  	if _GLIBCXX17_CONSTEXPR (__atomic_impl::__maybe_has_padding<_Tp>())
! 	  __builtin_clear_padding(std::__addressof(_M_i));
  #endif
        }
  
        operator _Tp() const noexcept
        { return load(); }
--- 235,251 ----
        atomic& operator=(const atomic&) = delete;
        atomic& operator=(const atomic&) volatile = delete;
  
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wc++14-extensions" // constexpr ctor body
        constexpr atomic(_Tp __i) noexcept : _M_i(__i)
        {
! #if __has_builtin(__builtin_clear_padding)
  	if _GLIBCXX17_CONSTEXPR (__atomic_impl::__maybe_has_padding<_Tp>())
! 	  if (!std::__is_constant_evaluated())
! 	    __builtin_clear_padding(std::__addressof(_M_i));
  #endif
        }
+ #pragma GCC diagnostic pop
  
        operator _Tp() const noexcept
        { return load(); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 395,415 ****
        void
        wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept
        {
! 	std::__atomic_wait_address_v(&_M_i, __old,
! 			   [__m, this] { return this->load(__m); });
        }
  
        // TODO add const volatile overload
  
        void
        notify_one() noexcept
!       { std::__atomic_notify_address(&_M_i, false); }
  
        void
        notify_all() noexcept
!       { std::__atomic_notify_address(&_M_i, true); }
  #endif // __cpp_lib_atomic_wait
- 
      };
  #undef _GLIBCXX20_INIT
  
--- 399,418 ----
        void
        wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept
        {
! 	std::__atomic_wait_address_v(std::addressof(_M_i), __old,
! 				     [__m, this] { return this->load(__m); });
        }
  
        // TODO add const volatile overload
  
        void
        notify_one() noexcept
!       { std::__atomic_notify_address(std::addressof(_M_i), false); }
  
        void
        notify_all() noexcept
!       { std::__atomic_notify_address(std::addressof(_M_i), true); }
  #endif // __cpp_lib_atomic_wait
      };
  #undef _GLIBCXX20_INIT
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 450,456 ****
        operator++(int) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b++;
        }
--- 453,459 ----
        operator++(int) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b++;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 459,465 ****
        operator++(int) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b++;
        }
--- 462,468 ----
        operator++(int) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b++;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 468,474 ****
        operator--(int) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b--;
        }
--- 471,477 ----
        operator--(int) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b--;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 477,483 ****
        operator--(int) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b--;
        }
--- 480,486 ----
        operator--(int) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b--;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 486,492 ****
        operator++() noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return ++_M_b;
        }
--- 489,495 ----
        operator++() noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return ++_M_b;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 495,501 ****
        operator++() volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return ++_M_b;
        }
--- 498,504 ----
        operator++() volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return ++_M_b;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 504,510 ****
        operator--() noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return --_M_b;
        }
--- 507,513 ----
        operator--() noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return --_M_b;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 513,519 ****
        operator--() volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return --_M_b;
        }
--- 516,522 ----
        operator--() volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return --_M_b;
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 522,528 ****
        operator+=(ptrdiff_t __d) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.operator+=(__d);
        }
--- 525,531 ----
        operator+=(ptrdiff_t __d) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.operator+=(__d);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 531,537 ****
        operator+=(ptrdiff_t __d) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.operator+=(__d);
        }
--- 534,540 ----
        operator+=(ptrdiff_t __d) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.operator+=(__d);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 540,546 ****
        operator-=(ptrdiff_t __d) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.operator-=(__d);
        }
--- 543,549 ----
        operator-=(ptrdiff_t __d) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.operator-=(__d);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 549,555 ****
        operator-=(ptrdiff_t __d) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.operator-=(__d);
        }
--- 552,558 ----
        operator-=(ptrdiff_t __d) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.operator-=(__d);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 670,676 ****
  		memory_order __m = memory_order_seq_cst) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.fetch_add(__d, __m);
        }
--- 673,679 ----
  		memory_order __m = memory_order_seq_cst) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.fetch_add(__d, __m);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 680,686 ****
  		memory_order __m = memory_order_seq_cst) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.fetch_add(__d, __m);
        }
--- 683,689 ----
  		memory_order __m = memory_order_seq_cst) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.fetch_add(__d, __m);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 690,696 ****
  		memory_order __m = memory_order_seq_cst) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.fetch_sub(__d, __m);
        }
--- 693,699 ----
  		memory_order __m = memory_order_seq_cst) noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.fetch_sub(__d, __m);
        }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 700,706 ****
  		memory_order __m = memory_order_seq_cst) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object<_Tp>::value, "pointer to object type" );
  #endif
  	return _M_b.fetch_sub(__d, __m);
        }
--- 703,709 ----
  		memory_order __m = memory_order_seq_cst) volatile noexcept
        {
  #if __cplusplus >= 201703L
! 	static_assert( is_object_v<_Tp>, "pointer to object type" );
  #endif
  	return _M_b.fetch_sub(__d, __m);
        }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/chrono gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/chrono
*** gcc-14.3.0/libstdc++-v3/include/std/chrono	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/chrono	Fri Jun 19 06:51:07 2026
*************** namespace __detail
*** 3243,3249 ****
        };
        // The list above is known to be valid until (at least) this date
        // and only contains positive leap seconds.
!       const sys_seconds __expires(1766880000s); // 2025-12-28 00:00:00 UTC
  
  #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
        if (__ss > __expires)
--- 3243,3249 ----
        };
        // The list above is known to be valid until (at least) this date
        // and only contains positive leap seconds.
!       constexpr sys_seconds __expires(1798416000s); // 2026-12-28 00:00:00 UTC
  
  #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
        if (__ss > __expires)
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/concepts gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/concepts
*** gcc-14.3.0/libstdc++-v3/include/std/concepts	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/concepts	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 382,387 ****
--- 382,403 ----
    template<typename _Rel, typename _Tp, typename _Up>
      concept strict_weak_order = relation<_Rel, _Tp, _Up>;
  
+   namespace __detail
+   {
+     // operator<=> are automatically reversed, so we need to consider
+     // both directions if types are different.
+     template<typename _Tp, typename _Up>
+       concept __not_overloaded_spaceship
+         =  ! requires(_Tp&& __t, _Up&& __u)
+ 	    { operator<=>(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); }
+ 	&& ! requires(_Tp&& __t, _Up&& __u)
+ 	    { static_cast<_Tp&&>(__t).operator<=>(static_cast<_Up&&>(__u)); }
+ 	&& (is_same_v<_Tp, _Up>
+ 	    || (! requires(_Tp&& __t, _Up&& __u)
+ 	         { operator<=>(static_cast<_Up&&>(__u), static_cast<_Tp&&>(__t)); }
+ 	       && ! requires(_Tp&& __t, _Up&& __u)
+ 	         { static_cast<_Up&&>(__u).operator<=>(static_cast<_Tp&&>(__t)); }));
+   }
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
  #endif // __cpp_lib_concepts
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/expected gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/expected
*** gcc-14.3.0/libstdc++-v3/include/std/expected	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/expected	Fri Jun 19 06:51:07 2026
*************** namespace __expected
*** 314,319 ****
--- 314,330 ----
  	  __guard.release();
  	}
      }
+ 
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 3836. std::expected<bool, E1> conversion constructor
+   // expected(const expected<U, G>&) should take precedence over
+   // expected(U&&) with operator bool
+ 
+   // If T is cv bool, remove_cvref_t<U> is not a specialization of expected.
+   template<typename _Tp, typename _Up>
+     concept __not_constructing_bool_from_expected
+       = ! is_same_v<remove_cv_t<_Tp>, bool>
+ 	  || ! __is_expected<remove_cvref_t<_Up>>;
  }
  /// @endcond
  
*************** namespace __expected
*** 327,352 ****
        static_assert( ! __expected::__is_unexpected<remove_cv_t<_Tp>> );
        static_assert( __expected::__can_be_unexpected<_Er> );
  
!       template<typename _Up, typename _Err, typename _Unex = unexpected<_Er>>
  	static constexpr bool __cons_from_expected
! 	  = __or_v<is_constructible<_Tp, expected<_Up, _Err>&>,
! 		   is_constructible<_Tp, expected<_Up, _Err>>,
! 		   is_constructible<_Tp, const expected<_Up, _Err>&>,
! 		   is_constructible<_Tp, const expected<_Up, _Err>>,
! 		   is_convertible<expected<_Up, _Err>&, _Tp>,
! 		   is_convertible<expected<_Up, _Err>, _Tp>,
! 		   is_convertible<const expected<_Up, _Err>&, _Tp>,
! 		   is_convertible<const expected<_Up, _Err>, _Tp>,
! 		   is_constructible<_Unex, expected<_Up, _Err>&>,
! 		   is_constructible<_Unex, expected<_Up, _Err>>,
! 		   is_constructible<_Unex, const expected<_Up, _Err>&>,
! 		   is_constructible<_Unex, const expected<_Up, _Err>>
  		  >;
  
!       template<typename _Up, typename _Err>
  	constexpr static bool __explicit_conv
  	  = __or_v<__not_<is_convertible<_Up, _Tp>>,
! 		   __not_<is_convertible<_Err, _Er>>
  		  >;
  
        template<typename _Up>
--- 338,378 ----
        static_assert( ! __expected::__is_unexpected<remove_cv_t<_Tp>> );
        static_assert( __expected::__can_be_unexpected<_Er> );
  
!       // If T is not cv bool, converts-from-any-cvref<T, expected<U, G>> and
!       // is_constructible<unexpected<E>, cv expected<U, G> ref-qual> are false.
!       template<typename _Up, typename _Gr, typename _Unex = unexpected<_Er>,
! 	       typename = remove_cv_t<_Tp>>
  	static constexpr bool __cons_from_expected
! 	  = __or_v<is_constructible<_Tp, expected<_Up, _Gr>&>,
! 		   is_constructible<_Tp, expected<_Up, _Gr>>,
! 		   is_constructible<_Tp, const expected<_Up, _Gr>&>,
! 		   is_constructible<_Tp, const expected<_Up, _Gr>>,
! 		   is_convertible<expected<_Up, _Gr>&, _Tp>,
! 		   is_convertible<expected<_Up, _Gr>, _Tp>,
! 		   is_convertible<const expected<_Up, _Gr>&, _Tp>,
! 		   is_convertible<const expected<_Up, _Gr>, _Tp>,
! 		   is_constructible<_Unex, expected<_Up, _Gr>&>,
! 		   is_constructible<_Unex, expected<_Up, _Gr>>,
! 		   is_constructible<_Unex, const expected<_Up, _Gr>&>,
! 		   is_constructible<_Unex, const expected<_Up, _Gr>>
  		  >;
  
!       // _GLIBCXX_RESOLVE_LIB_DEFECTS
!       // If t is cv bool, we know it can be constructed from expected<U, G>,
!       // but we don't want to cause the expected(U&&) constructor to be used,
!       // so we only check the is_constructible<unexpected<E>, ...> cases.
!       template<typename _Up, typename _Gr, typename _Unex>
! 	static constexpr bool __cons_from_expected<_Up, _Gr, _Unex, bool>
! 	  = __or_v<is_constructible<_Unex, expected<_Up, _Gr>&>,
! 		   is_constructible<_Unex, expected<_Up, _Gr>>,
! 		   is_constructible<_Unex, const expected<_Up, _Gr>&>,
! 		   is_constructible<_Unex, const expected<_Up, _Gr>>
! 		  >;
! 
!       template<typename _Up, typename _Gr>
  	constexpr static bool __explicit_conv
  	  = __or_v<__not_<is_convertible<_Up, _Tp>>,
! 		   __not_<is_convertible<_Gr, _Er>>
  		  >;
  
        template<typename _Up>
*************** namespace __expected
*** 445,452 ****
        template<typename _Up = _Tp>
  	requires (!is_same_v<remove_cvref_t<_Up>, expected>)
  	  && (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
! 	  && (!__expected::__is_unexpected<remove_cvref_t<_Up>>)
  	  && is_constructible_v<_Tp, _Up>
  	constexpr explicit(!is_convertible_v<_Up, _Tp>)
  	expected(_Up&& __v)
  	noexcept(is_nothrow_constructible_v<_Tp, _Up>)
--- 471,480 ----
        template<typename _Up = _Tp>
  	requires (!is_same_v<remove_cvref_t<_Up>, expected>)
  	  && (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
! 	  && (!is_same_v<remove_cvref_t<_Up>, unexpect_t>)
  	  && is_constructible_v<_Tp, _Up>
+ 	  && (!__expected::__is_unexpected<remove_cvref_t<_Up>>)
+ 	  && __expected::__not_constructing_bool_from_expected<_Tp, _Up>
  	constexpr explicit(!is_convertible_v<_Up, _Tp>)
  	expected(_Up&& __v)
  	noexcept(is_nothrow_constructible_v<_Tp, _Up>)
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/format gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/format
*** gcc-14.3.0/libstdc++-v3/include/std/format	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/format	Fri Jun 19 06:51:07 2026
*************** namespace __format
*** 1831,1855 ****
  	if (__grp.empty() && __point == __dot)
  	  return __lstr; // Locale uses '.' and no grouping.
  
! 	size_t __d = __str.find(__dot);
! 	size_t __e = min(__d, __str.find(__exp));
  	if (__e == __str.npos)
  	  __e = __str.size();
! 	const size_t __r = __str.size() - __e;
  	auto __overwrite = [&](_CharT* __p, size_t) {
! 	  auto __end = std::__add_grouping(__p, __np.thousands_sep(),
  					   __grp.data(), __grp.size(),
! 					   __str.data(), __str.data() + __e);
! 	  if (__r)
  	    {
  	      if (__d != __str.npos)
  		{
! 		  *__end = __point;
  		  ++__end;
  		  ++__e;
  		}
! 	      if (__r > 1)
! 		__end += __str.copy(__end, __str.npos, __e);
  	    }
  	  return (__end - __p);
  	};
--- 1831,1865 ----
  	if (__grp.empty() && __point == __dot)
  	  return __lstr; // Locale uses '.' and no grouping.
  
! 	size_t __d = __str.find(__dot); // Index of radix character (if any).
! 	size_t __e = min(__d, __str.find(__exp)); // First of radix or exponent
  	if (__e == __str.npos)
  	  __e = __str.size();
! 	const size_t __r = __str.size() - __e; // Length of remainder.
  	auto __overwrite = [&](_CharT* __p, size_t) {
! 	  // Apply grouping to the digits before the radix or exponent.
! 	  int __off = 0;
! 	  if (auto __c = __str.front(); __c == '-' || __c == '+' || __c == ' ')
! 	    {
! 	      *__p = __c;
! 	      __off = 1;
! 	    }
! 	  auto __end = std::__add_grouping(__p + __off, __np.thousands_sep(),
  					   __grp.data(), __grp.size(),
! 					   __str.data() + __off,
! 					   __str.data() + __e);
! 	  if (__r) // If there's a fractional part or exponent
  	    {
  	      if (__d != __str.npos)
  		{
! 		  *__end = __point; // Add the locale's radix character.
  		  ++__end;
  		  ++__e;
  		}
! 	      const size_t __rlen = __str.size() - __e;
! 	      // Append fractional digits and/or exponent:
! 	      char_traits<_CharT>::copy(__end, __str.data() + __e, __rlen);
! 	      __end += __rlen;
  	    }
  	  return (__end - __p);
  	};
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/limits gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/limits
*** gcc-14.3.0/libstdc++-v3/include/std/limits	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/limits	Fri Jun 19 06:51:07 2026
*************** __glibcxx_float_n(128)
*** 2122,2128 ****
        static _GLIBCXX_USE_CONSTEXPR int digits = 113;
        static _GLIBCXX_USE_CONSTEXPR int digits10 = 33;
  #if __cplusplus >= 201103L
!       static constexpr int max_digits10 = 35;
  #endif
        static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
        static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
--- 2122,2128 ----
        static _GLIBCXX_USE_CONSTEXPR int digits = 113;
        static _GLIBCXX_USE_CONSTEXPR int digits10 = 33;
  #if __cplusplus >= 201103L
!       static constexpr int max_digits10 = 36;
  #endif
        static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
        static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/mutex gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/mutex
*** gcc-14.3.0/libstdc++-v3/include/std/mutex	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/mutex	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 188,194 ****
  	  return static_cast<_Derived*>(this)->_M_timedlock(__ts);
  	}
  
! #ifdef _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        template<typename _Duration>
  	bool
  	_M_try_lock_until(const chrono::time_point<chrono::steady_clock,
--- 188,194 ----
  	  return static_cast<_Derived*>(this)->_M_timedlock(__ts);
  	}
  
! #if _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        template<typename _Duration>
  	bool
  	_M_try_lock_until(const chrono::time_point<chrono::steady_clock,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 375,381 ****
        _M_timedlock(const __gthread_time_t& __ts)
        { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); }
  
! #ifdef _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        bool
        _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts)
        { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); }
--- 375,381 ----
        _M_timedlock(const __gthread_time_t& __ts)
        { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); }
  
! #if _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        bool
        _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts)
        { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/sstream gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/sstream
*** gcc-14.3.0/libstdc++-v3/include/std/sstream	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/sstream	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CXX11
*** 273,280 ****
        {
  	if (char_type* __hi = _M_high_mark())
  	  {
! 	    // Set length to end of character sequence and add null terminator.
! 	    _M_string._M_set_length(_M_high_mark() - this->pbase());
  	  }
  	auto __str = std::move(_M_string);
  	_M_string.clear();
--- 273,283 ----
        {
  	if (char_type* __hi = _M_high_mark())
  	  {
! 	    if (_M_string.data() == this->pbase()) [[likely]]
! 	      // Set length to end of sequence and add null terminator.
! 	      _M_string._M_set_length(__hi - this->pbase());
! 	    else
! 	      _M_string.assign(this->pbase(), __hi);
  	  }
  	auto __str = std::move(_M_string);
  	_M_string.clear();
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/streambuf gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/streambuf
*** gcc-14.3.0/libstdc++-v3/include/std/streambuf	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/streambuf	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 488,493 ****
--- 488,497 ----
        char_type*
        eback() const { return _M_in_beg; }
  
+ // Required to silence false-positive warnings originating from istream_iterator::operator++,
+ // see PR105580.
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wnull-dereference"
        char_type*
        gptr()  const { return _M_in_cur;  }
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 503,508 ****
--- 507,513 ----
        */
        void
        gbump(int __n) { _M_in_cur += __n; }
+ #pragma GCC diagnostic pop
  
        /**
         *  @brief  Setting the three read area pointers.
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/string_view gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/string_view
*** gcc-14.3.0/libstdc++-v3/include/std/string_view	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/string_view	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_END_NAMESPACE_VERSION
*** 906,911 ****
  
  #include <bits/string_view.tcc>
  
! #endif // __cplusplus <= 201402L
  
! #endif // _GLIBCXX_EXPERIMENTAL_STRING_VIEW
--- 906,911 ----
  
  #include <bits/string_view.tcc>
  
! #endif // C++17
  
! #endif // _GLIBCXX_STRING_VIEW
diff -Nrcpad gcc-14.3.0/libstdc++-v3/include/std/tuple gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/tuple
*** gcc-14.3.0/libstdc++-v3/include/std/tuple	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/include/std/tuple	Fri Jun 19 06:51:07 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 972,978 ****
        // Defined as a template to work around PR libstdc++/116440.
        template<typename = void>
  	constexpr explicit(!__convertible<const _Elements&...>())
! 	tuple(const _Elements&... __elements)
  	noexcept(__nothrow_constructible<const _Elements&...>())
  	requires (__constructible<const _Elements&...>())
  	: _Inherited(__elements...)
--- 972,978 ----
        // Defined as a template to work around PR libstdc++/116440.
        template<typename = void>
  	constexpr explicit(!__convertible<const _Elements&...>())
! 	tuple(const type_identity_t<_Elements>&... __elements)
  	noexcept(__nothrow_constructible<const _Elements&...>())
  	requires (__constructible<const _Elements&...>())
  	: _Inherited(__elements...)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1164,1170 ****
        template<typename _Alloc>
  	constexpr explicit(!__convertible<const _Elements&...>())
  	tuple(allocator_arg_t __tag, const _Alloc& __a,
! 	      const _Elements&... __elements)
  	requires (__constructible<const _Elements&...>())
  	: _Inherited(__tag, __a, __elements...)
  	{ }
--- 1164,1170 ----
        template<typename _Alloc>
  	constexpr explicit(!__convertible<const _Elements&...>())
  	tuple(allocator_arg_t __tag, const _Alloc& __a,
! 	      const type_identity_t<_Elements>&... __elements)
  	requires (__constructible<const _Elements&...>())
  	: _Inherited(__tag, __a, __elements...)
  	{ }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1473,1486 ****
        template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
  	       _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
  	constexpr
! 	tuple(const _Elements&... __elements)
  	noexcept(__nothrow_constructible<const _Elements&...>())
  	: _Inherited(__elements...) { }
  
        template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
  	       _ExplicitCtor<_NotEmpty, const _Elements&...> = false>
  	explicit constexpr
! 	tuple(const _Elements&... __elements)
  	noexcept(__nothrow_constructible<const _Elements&...>())
  	: _Inherited(__elements...) { }
  
--- 1473,1486 ----
        template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
  	       _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
  	constexpr
! 	tuple(const __type_identity_t<_Elements>&... __elements)
  	noexcept(__nothrow_constructible<const _Elements&...>())
  	: _Inherited(__elements...) { }
  
        template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
  	       _ExplicitCtor<_NotEmpty, const _Elements&...> = false>
  	explicit constexpr
! 	tuple(const __type_identity_t<_Elements>&... __elements)
  	noexcept(__nothrow_constructible<const _Elements&...>())
  	: _Inherited(__elements...) { }
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1565,1571 ****
  	       _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
  	_GLIBCXX20_CONSTEXPR
  	tuple(allocator_arg_t __tag, const _Alloc& __a,
! 	      const _Elements&... __elements)
  	: _Inherited(__tag, __a, __elements...) { }
  
        template<typename _Alloc, bool _NotEmpty = (sizeof...(_Elements) >= 1),
--- 1565,1571 ----
  	       _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
  	_GLIBCXX20_CONSTEXPR
  	tuple(allocator_arg_t __tag, const _Alloc& __a,
! 	      const __type_identity_t<_Elements>&... __elements)
  	: _Inherited(__tag, __a, __elements...) { }
  
        template<typename _Alloc, bool _NotEmpty = (sizeof...(_Elements) >= 1),
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1573,1579 ****
  	_GLIBCXX20_CONSTEXPR
  	explicit
  	tuple(allocator_arg_t __tag, const _Alloc& __a,
! 	      const _Elements&... __elements)
  	: _Inherited(__tag, __a, __elements...) { }
  
        template<typename _Alloc, typename... _UElements,
--- 1573,1579 ----
  	_GLIBCXX20_CONSTEXPR
  	explicit
  	tuple(allocator_arg_t __tag, const _Alloc& __a,
! 	      const __type_identity_t<_Elements>&... __elements)
  	: _Inherited(__tag, __a, __elements...) { }
  
        template<typename _Alloc, typename... _UElements,
diff -Nrcpad gcc-14.3.0/libstdc++-v3/libsupc++/compare gcc-14.3.0-RC-20260619/libstdc++-v3/libsupc++/compare
*** gcc-14.3.0/libstdc++-v3/libsupc++/compare	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/libsupc++/compare	Fri Jun 19 06:51:07 2026
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 531,540 ****
  	  { static_cast<_Tp&&>(__t) <=> static_cast<_Up&&>(__u); }
  	  && convertible_to<_Tp, const volatile void*>
  	  && convertible_to<_Up, const volatile void*>
! 	  && ! requires(_Tp&& __t, _Up&& __u)
! 	  { operator<=>(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); }
! 	  && ! requires(_Tp&& __t, _Up&& __u)
! 	  { static_cast<_Tp&&>(__t).operator<=>(static_cast<_Up&&>(__u)); };
    } // namespace __detail
  
    // _GLIBCXX_RESOLVE_LIB_DEFECTS
--- 531,537 ----
  	  { static_cast<_Tp&&>(__t) <=> static_cast<_Up&&>(__u); }
  	  && convertible_to<_Tp, const volatile void*>
  	  && convertible_to<_Up, const volatile void*>
! 	  && __not_overloaded_spaceship<_Tp, _Up>;
    } // namespace __detail
  
    // _GLIBCXX_RESOLVE_LIB_DEFECTS
diff -Nrcpad gcc-14.3.0/libstdc++-v3/python/libstdcxx/v6/xmethods.py gcc-14.3.0-RC-20260619/libstdc++-v3/python/libstdcxx/v6/xmethods.py
*** gcc-14.3.0/libstdc++-v3/python/libstdcxx/v6/xmethods.py	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/python/libstdcxx/v6/xmethods.py	Fri Jun 19 06:51:07 2026
*************** def get_bool_type():
*** 28,35 ****
  def get_std_size_type():
      return gdb.lookup_type('std::size_t')
  
- _versioned_namespace = '__8::'
- 
  def is_specialization_of(x, template_name):
      """
      Test whether a type is a specialization of the named class template.
--- 28,33 ----
*************** def is_specialization_of(x, template_nam
*** 39,46 ****
      """
      if isinstance(x, gdb.Type):
          x = x.tag
!     template_name = '(%s)?%s' % (_versioned_namespace, template_name)
!     return re.match(r'^std::(__\d::)?%s<.*>$' % template_name, x) is not None
  
  class LibStdCxxXMethod(gdb.xmethod.XMethod):
      def __init__(self, name, worker_class):
--- 37,43 ----
      """
      if isinstance(x, gdb.Type):
          x = x.tag
!     return re.match(r'^std::(__\d::|__debug::)?%s<.*>$' % template_name, x) is not None
  
  class LibStdCxxXMethod(gdb.xmethod.XMethod):
      def __init__(self, name, worker_class):
*************** class ListMethodsMatcher(gdb.xmethod.XMe
*** 445,451 ****
          if method is None or not method.enabled:
              return None
          val_type = class_type.template_argument(0)
!         node_type = gdb.lookup_type(str(class_type) + '::_Node').pointer()
          return method.worker_class(val_type, node_type)
  
  # Xmethods for std::vector
--- 442,448 ----
          if method is None or not method.enabled:
              return None
          val_type = class_type.template_argument(0)
!         node_type = gdb.lookup_type(str(class_type) + '::_Node_ptr')
          return method.worker_class(val_type, node_type)
  
  # Xmethods for std::vector
diff -Nrcpad gcc-14.3.0/libstdc++-v3/src/c++11/system_error.cc gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++11/system_error.cc
*** gcc-14.3.0/libstdc++-v3/src/c++11/system_error.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++11/system_error.cc	Fri Jun 19 06:51:07 2026
*************** namespace
*** 157,178 ****
  #if defined(_WIN32) && !defined(__CYGWIN__)
        char* buf = nullptr;
        auto len
! 	= FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
! 			| FORMAT_MESSAGE_ALLOCATE_BUFFER,
! 			nullptr,
! 			i,
! 			LANG_USER_DEFAULT,
! 			reinterpret_cast<LPTSTR>(&buf),
! 			0,
! 			nullptr);
        if (len > 0)
        {
  	struct deleter {
  	  void operator()(void* p) const { ::LocalFree(p); }
  	};
  	std::unique_ptr<char[], deleter> guard(buf);
! 	if (len > 3 && !__builtin_memcmp(buf + len - 3, ".\r\n", 3)) [[likely]]
! 	  len -= 3;
  	return string(buf, len);
        }
        return string("Unknown error code");
--- 157,179 ----
  #if defined(_WIN32) && !defined(__CYGWIN__)
        char* buf = nullptr;
        auto len
! 	= FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM
! 			 | FORMAT_MESSAGE_ALLOCATE_BUFFER
! 			 | FORMAT_MESSAGE_IGNORE_INSERTS,
! 			 nullptr,
! 			 i,
! 			 LANG_USER_DEFAULT,
! 			 reinterpret_cast<LPTSTR>(&buf),
! 			 0,
! 			 nullptr);
        if (len > 0)
        {
  	struct deleter {
  	  void operator()(void* p) const { ::LocalFree(p); }
  	};
  	std::unique_ptr<char[], deleter> guard(buf);
! 	if (len > 2 && !__builtin_memcmp (buf + len - 2, "\r\n", 2)) [[likely]]
! 	  len -= 2 + (buf[len - 3] == '.');
  	return string(buf, len);
        }
        return string("Unknown error code");
diff -Nrcpad gcc-14.3.0/libstdc++-v3/src/c++17/fs_path.cc gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++17/fs_path.cc
*** gcc-14.3.0/libstdc++-v3/src/c++17/fs_path.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++17/fs_path.cc	Fri Jun 19 06:51:07 2026
*************** path::operator+=(const path& p)
*** 880,885 ****
--- 880,897 ----
        return *this;
      }
  
+   // Handle p += p which would otherwise access dangling pointers after
+   // reallocating _M_cmpts and _M_pathname.
+   if (&p == this) [[unlikely]]
+     return *this += p.native();
+   // Handle p += *i where i is in [p.begin(),p.end()), for the same reason.
+   if (_M_type() == _Type::_Multi && p._M_type() != _Type::_Multi)
+     {
+       const auto first = _M_cmpts.begin(), last = first + _M_cmpts.size();
+       if (!std::less<>()(&p, first) && std::less<>()(&p, last)) [[unlikely]]
+ 	return *this += p.native();
+     }
+ 
  #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
    if (_M_type() == _Type::_Root_name
        || (_M_type() == _Type::_Filename && _M_pathname.size() == 1))
diff -Nrcpad gcc-14.3.0/libstdc++-v3/src/c++17/memory_resource.cc gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++17/memory_resource.cc
*** gcc-14.3.0/libstdc++-v3/src/c++17/memory_resource.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++17/memory_resource.cc	Fri Jun 19 06:51:07 2026
*************** namespace pmr
*** 179,186 ****
    // versions will not use this symbol.
    monotonic_buffer_resource::~monotonic_buffer_resource() { release(); }
  
!   namespace {
! 
    // aligned_size<N> stores the size and alignment of a memory allocation.
    // The size must be a multiple of N, leaving the low log2(N) bits free
    // to store the base-2 logarithm of the alignment.
--- 179,186 ----
    // versions will not use this symbol.
    monotonic_buffer_resource::~monotonic_buffer_resource() { release(); }
  
! namespace
! {
    // aligned_size<N> stores the size and alignment of a memory allocation.
    // The size must be a multiple of N, leaving the low log2(N) bits free
    // to store the base-2 logarithm of the alignment.
*************** namespace pmr
*** 218,224 ****
      return (n + alignment - 1) & ~(alignment - 1);
    }
  
!   } // namespace
  
    // Memory allocated by the upstream resource is managed in a linked list
    // of _Chunk objects. A _Chunk object recording the size and alignment of
--- 218,224 ----
      return (n + alignment - 1) & ~(alignment - 1);
    }
  
! } // namespace
  
    // Memory allocated by the upstream resource is managed in a linked list
    // of _Chunk objects. A _Chunk object recording the size and alignment of
*************** namespace pmr
*** 304,311 ****
  
    // Helper types for synchronized_pool_resource & unsynchronized_pool_resource
  
!   namespace {
! 
    // Simple bitset with runtime size.
    // Tracks which blocks in a pool chunk are used/unused.
    struct bitset
--- 304,311 ----
  
    // Helper types for synchronized_pool_resource & unsynchronized_pool_resource
  
! namespace
! {
    // Simple bitset with runtime size.
    // Tracks which blocks in a pool chunk are used/unused.
    struct bitset
*************** namespace pmr
*** 632,638 ****
  
    static_assert(sizeof(big_block) == (2 * sizeof(void*)));
  
!   } // namespace
  
    // A pool that serves blocks of a particular size.
    // Each pool manages a number of chunks.
--- 632,638 ----
  
    static_assert(sizeof(big_block) == (2 * sizeof(void*)));
  
! } // namespace
  
    // A pool that serves blocks of a particular size.
    // Each pool manages a number of chunks.
*************** namespace pmr
*** 864,870 ****
      using big_block::big_block;
    };
  
!   namespace {
  
    constexpr size_t pool_sizes[] = {
        8, 16, 24,
--- 864,879 ----
      using big_block::big_block;
    };
  
! namespace
! {
!   // N.B. it is important that we don't skip any power of two sizes if there
!   // is a non-power of two size between them, e.g. must not have pool sizes
!   // of 24 and 40 without having a pool size of 32. Otherwise an allocation
!   // of 32 bytes with alignment 16 would choose the 40-byte pool which is not
!   // correctly aligned for 16-byte alignment. It would be OK (but suboptimal)
!   // to have no pool of size 32 if we have pool sizes of 16 and 64 and no
!   // non-power of two sizes between those, because the example of (32, 16)
!   // would choose the 64-byte pool, which would be correctly aligned.
  
    constexpr size_t pool_sizes[] = {
        8, 16, 24,
*************** namespace pmr
*** 979,985 ****
    using exclusive_lock = lock_guard<shared_mutex>;
  #endif
  
!   } // namespace
  
    __pool_resource::
    __pool_resource(const pool_options& opts, memory_resource* upstream)
--- 988,994 ----
    using exclusive_lock = lock_guard<shared_mutex>;
  #endif
  
! } // namespace
  
    __pool_resource::
    __pool_resource(const pool_options& opts, memory_resource* upstream)
*************** namespace pmr
*** 1071,1082 ****
      return p;
    }
  
  #ifdef _GLIBCXX_HAS_GTHREADS
    // synchronized_pool_resource members.
  
    /* Notes on implementation and thread safety:
     *
!    * Each synchronized_pool_resource manages an linked list of N+1 _TPools
     * objects, where N is the number of threads using the pool resource.
     * Each _TPools object has its own set of pools, with their own chunks.
     * The first element of the list, _M_tpools[0], can be used by any thread.
--- 1080,1112 ----
      return p;
    }
  
+   // Determine the appropriate allocation size, rounding up to a multiple
+   // of the alignment if needed.
+   static inline size_t
+   choose_block_size(size_t bytes, size_t alignment)
+   {
+     if (bytes == 0) [[unlikely]]
+       return alignment;
+ 
+     // Use bit_ceil in case alignment is invalid (i.e. not a power of two).
+     size_t mask = std::__bit_ceil(alignment) - 1;
+     // Round up to a multiple of alignment.
+     size_t block_size = (bytes + mask) & ~mask;
+ 
+     if (block_size >= bytes) [[likely]]
+       return block_size;
+ 
+     // Wrapped around to zero, bytes must have been impossibly large.
+     return numeric_limits<size_t>::max();
+   }
+ 
+ 
  #ifdef _GLIBCXX_HAS_GTHREADS
    // synchronized_pool_resource members.
  
    /* Notes on implementation and thread safety:
     *
!    * Each synchronized_pool_resource manages a linked list of N+1 _TPools
     * objects, where N is the number of threads using the pool resource.
     * Each _TPools object has its own set of pools, with their own chunks.
     * The first element of the list, _M_tpools[0], can be used by any thread.
*************** namespace pmr
*** 1243,1249 ****
    synchronized_pool_resource::
    do_allocate(size_t bytes, size_t alignment)
    {
!     const auto block_size = std::max(bytes, alignment);
      const pool_options opts = _M_impl._M_opts;
      if (block_size <= opts.largest_required_pool_block)
        {
--- 1273,1279 ----
    synchronized_pool_resource::
    do_allocate(size_t bytes, size_t alignment)
    {
!     const auto block_size = choose_block_size(bytes, alignment);
      const pool_options opts = _M_impl._M_opts;
      if (block_size <= opts.largest_required_pool_block)
        {
*************** namespace pmr
*** 1290,1296 ****
    synchronized_pool_resource::
    do_deallocate(void* p, size_t bytes, size_t alignment)
    {
!     size_t block_size = std::max(bytes, alignment);
      if (block_size <= _M_impl._M_opts.largest_required_pool_block)
        {
  	const ptrdiff_t index = pool_index(block_size, _M_impl._M_npools);
--- 1320,1326 ----
    synchronized_pool_resource::
    do_deallocate(void* p, size_t bytes, size_t alignment)
    {
!     size_t block_size = choose_block_size(bytes, alignment);
      if (block_size <= _M_impl._M_opts.largest_required_pool_block)
        {
  	const ptrdiff_t index = pool_index(block_size, _M_impl._M_npools);
*************** namespace pmr
*** 1449,1455 ****
    void*
    unsynchronized_pool_resource::do_allocate(size_t bytes, size_t alignment)
    {
!     const auto block_size = std::max(bytes, alignment);
      if (block_size <= _M_impl._M_opts.largest_required_pool_block)
        {
  	// Recreate pools if release() has been called:
--- 1479,1485 ----
    void*
    unsynchronized_pool_resource::do_allocate(size_t bytes, size_t alignment)
    {
!     const auto block_size = choose_block_size(bytes, alignment);
      if (block_size <= _M_impl._M_opts.largest_required_pool_block)
        {
  	// Recreate pools if release() has been called:
*************** namespace pmr
*** 1466,1472 ****
    unsynchronized_pool_resource::
    do_deallocate(void* p, size_t bytes, size_t alignment)
    {
!     size_t block_size = std::max(bytes, alignment);
      if (block_size <= _M_impl._M_opts.largest_required_pool_block)
        {
  	if (auto pool = _M_find_pool(block_size))
--- 1496,1502 ----
    unsynchronized_pool_resource::
    do_deallocate(void* p, size_t bytes, size_t alignment)
    {
!     size_t block_size = choose_block_size(bytes, alignment);
      if (block_size <= _M_impl._M_opts.largest_required_pool_block)
        {
  	if (auto pool = _M_find_pool(block_size))
diff -Nrcpad gcc-14.3.0/libstdc++-v3/src/c++20/tzdata.zi gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++20/tzdata.zi
*** gcc-14.3.0/libstdc++-v3/src/c++20/tzdata.zi	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++20/tzdata.zi	Fri Jun 19 06:51:07 2026
***************
*** 1,4 ****
! # version 2025b
  # This zic input file is in the public domain.
  R d 1916 o - Jun 14 23s 1 S
  R d 1916 1919 - O Su>=1 23s 0 -
--- 1,5 ----
! # version 2026b
! # redo posix_only
  # This zic input file is in the public domain.
  R d 1916 o - Jun 14 23s 1 S
  R d 1916 1919 - O Su>=1 23s 0 -
*************** R MT 1974 o - S 16 0s 0 -
*** 1304,1311 ****
  R MT 1975 1979 - Ap Su>=15 2 1 S
  R MT 1975 1980 - S Su>=15 2 0 -
  R MT 1980 o - Mar 31 2 1 S
! R MD 1997 ma - Mar lastSu 2 1 S
! R MD 1997 ma - O lastSu 3 0 -
  R O 1918 1919 - S 16 2s 0 -
  R O 1919 o - Ap 15 2s 1 S
  R O 1944 o - Ap 3 2s 1 S
--- 1305,1312 ----
  R MT 1975 1979 - Ap Su>=15 2 1 S
  R MT 1975 1980 - S Su>=15 2 0 -
  R MT 1980 o - Mar 31 2 1 S
! R MD 1997 2021 - Mar lastSu 2 1 S
! R MD 1997 2021 - O lastSu 3 0 -
  R O 1918 1919 - S 16 2s 0 -
  R O 1919 o - Ap 15 2s 1 S
  R O 1944 o - Ap 3 2s 1 S
*************** Z America/Tijuana -7:48:4 - LMT 1922 Ja
*** 2951,2959 ****
  -8 1 PDT 1951 S 30 2
  -8 - PST 1952 Ap 27 2
  -8 1 PDT 1952 S 28 2
! -8 - PST 1954
! -8 CA P%sT 1961
! -8 - PST 1976
  -8 u P%sT 1996
  -8 m P%sT 2001
  -8 u P%sT 2002 F 20
--- 2952,2958 ----
  -8 1 PDT 1951 S 30 2
  -8 - PST 1952 Ap 27 2
  -8 1 PDT 1952 S 28 2
! -8 CA P%sT 1967
  -8 u P%sT 1996
  -8 m P%sT 2001
  -8 u P%sT 2002 F 20
*************** Z America/Toronto -5:17:32 - LMT 1895
*** 2967,2973 ****
  -5 C E%sT
  Z America/Vancouver -8:12:28 - LMT 1884
  -8 Va P%sT 1987
! -8 C P%sT
  Z America/Whitehorse -9:0:12 - LMT 1900 Au 20
  -9 Y Y%sT 1965
  -9 Yu Y%sT 1966 F 27
--- 2966,2974 ----
  -5 C E%sT
  Z America/Vancouver -8:12:28 - LMT 1884
  -8 Va P%sT 1987
! -8 C P%sT 2026 Mar 9
! -8 1 PDT 2026 N 1 2
! -7 - MST
  Z America/Whitehorse -9:0:12 - LMT 1900 Au 20
  -9 Y Y%sT 1965
  -9 Yu Y%sT 1966 F 27
*************** Z Europe/Chisinau 1:55:20 - LMT 1880
*** 3668,3674 ****
  3 R MSK/MSD 1990 May 6 2
  2 R EE%sT 1992
  2 e EE%sT 1997
! 2 MD EE%sT
  Z Europe/Dublin -0:25:21 - LMT 1880 Au 2
  -0:25:21 - DMT 1916 May 21 2s
  -0:25:21 1 IST 1916 O 1 2s
--- 3669,3676 ----
  3 R MSK/MSD 1990 May 6 2
  2 R EE%sT 1992
  2 e EE%sT 1997
! 2 MD EE%sT 2022
! 2 E EE%sT
  Z Europe/Dublin -0:25:21 - LMT 1880 Au 2
  -0:25:21 - DMT 1916 May 21 2s
  -0:25:21 1 IST 1916 O 1 2s
diff -Nrcpad gcc-14.3.0/libstdc++-v3/src/c++20/tzdb.cc gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++20/tzdb.cc
*** gcc-14.3.0/libstdc++-v3/src/c++20/tzdb.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/src/c++20/tzdb.cc	Fri Jun 19 06:51:07 2026
***************
*** 35,43 ****
  #include <atomic>     // atomic<T*>, atomic<int>
  #include <memory>     // atomic<shared_ptr<T>>
  #include <mutex>      // mutex
! #include <filesystem> // filesystem::read_symlink
  
! #ifndef _AIX
  # include <cstdlib>   // getenv
  #endif
  
--- 35,47 ----
  #include <atomic>     // atomic<T*>, atomic<int>
  #include <memory>     // atomic<shared_ptr<T>>
  #include <mutex>      // mutex
! #include <iomanip>    // quoted
  
! #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_UNISTD_H)
! # include <unistd.h>  // readlink
! #endif
! 
! #ifdef _AIX
  # include <cstdlib>   // getenv
  #endif
  
*************** namespace std::chrono
*** 1188,1195 ****
    pair<vector<leap_second>, bool>
    tzdb_list::_Node::_S_read_leap_seconds()
    {
!     // This list is valid until at least 2025-12-28 00:00:00 UTC.
!     auto expires = sys_days{2025y/12/28};
      vector<leap_second> leaps
      {
        (leap_second)  78796800, // 1 Jul 1972
--- 1192,1199 ----
    pair<vector<leap_second>, bool>
    tzdb_list::_Node::_S_read_leap_seconds()
    {
!     // This list is valid until at least 2026-12-28 00:00:00 UTC.
!     constexpr auto expires = sys_days{2026y/12/28};
      vector<leap_second> leaps
      {
        (leap_second)  78796800, // 1 Jul 1972
*************** namespace std::chrono
*** 1734,1761 ****
    tzdb::current_zone() const
    {
      // TODO cache this function's result?
  
  #ifndef _AIX
!     // Repeat the preprocessor condition used by filesystem::read_symlink,
!     // to avoid a dependency on src/c++17/fs_ops.o if it won't work anyway.
! #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_SYS_STAT_H)
!     error_code ec;
!     // This should be a symlink to e.g. /usr/share/zoneinfo/Europe/London
!     auto path = filesystem::read_symlink("/etc/localtime", ec);
!     if (!ec)
        {
! 	auto first = path.begin(), last = path.end();
! 	if (std::distance(first, last) > 2)
  	  {
! 	    --last;
! 	    string name = last->string();
! 	    if (auto tz = do_locate_zone(this->zones, this->links, name))
! 	      return tz;
! 	    --last;
! 	    name = last->string() + '/' + name;
! 	    if (auto tz = do_locate_zone(this->zones, this->links, name))
  	      return tz;
  	  }
        }
  #endif
      // Otherwise, look for a file naming the time zone.
--- 1738,1824 ----
    tzdb::current_zone() const
    {
      // TODO cache this function's result?
+     // Could check the modification time of /etc/localtime, and not re-read
+     // it if it hasn't changed. reload_tzdb() could clear the cache too,
+     // to have a way to force a re-read.
  
  #ifndef _AIX
! #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_UNISTD_H)
!     string_view str;
!     char buf[128]; // strlen("../usr/share/zoneinfo/...") is usually < 55
!     string dynbuf;
!     // /etc/localtime should be a symlink that ends with a zone name,
!     // e.g. /etc/localtime -> /usr/share/zoneinfo/Europe/London
!     // https://www.freedesktop.org/software/systemd/man/latest/localtime.html
!     // This should work on GNU/Linux, macOS, NetBSD, and OpenBSD.
!     // Some FreeBSD systems also use a symlink for /etc/localtime.
!     // Use readlink directly to avoid std::filesystem overhead.
!     if (auto n = ::readlink("/etc/localtime", buf, sizeof(buf)); n > 0)
        {
! 	if (static_cast<size_t>(n) < sizeof(buf))
! 	  str = string_view(buf, n);
! 	else [[unlikely]]
  	  {
! 	    // We read the symlink but it didn't fit in buf[], use dynbuf.
! 	    do
! 	      {
! 		n *= 2;
! 		dynbuf.__resize_and_overwrite(n, [](char* p, size_t len) {
! 		  auto n2 = ::readlink("/etc/localtime", p, len);
! 		  if (n2 == -1) // symlink removed or replaced by file?!
! 		    __throw_runtime_error("tzdb: error reading /etc/localtime");
! 		  const size_t r = n2;
! 		  return r < len ? r : 0;
! 		});
! 	      }
! 	    while (dynbuf.empty());
! 	    str = dynbuf;
! 	  }
!       }
! 
!     if (!str.empty())
!       {
! 	// Remove any redundant slashes so we can match zone names.
! 	// e.g. /usr/share/zoneinfo/Europe//London is a valid symlink,
! 	// but won't match against "Europe/London".
! 	if (auto pos = str.rfind("//"); pos != str.npos) [[unlikely]]
! 	  {
! 	    if (str.data() != dynbuf.data())
! 	      dynbuf = str;
! 	    string::size_type spos = pos;
! 	    do
! 	      {
! 		dynbuf.erase(spos, 1);
! 		spos = dynbuf.rfind("//", spos);
! 	      }
! 	    while (spos != dynbuf.npos);
! 	    str = dynbuf;
! 	  }
! 
! 	// Check the trailing components of the path against known zone names.
! 	// Valid IANA times zones can have one, two, or three parts, e.g.
! 	// "UTC", "Europe/London", and "America/Indiana/Indianapolis".
! 	// Custom tzdata.zi files could in theory use four or more parts.
! 
! 	auto pos = str.rfind('/');
! 	while (pos != str.npos && pos != 0)
! 	  {
! 	    if (auto tz = do_locate_zone(this->zones, this->links,
! 					 str.substr(pos + 1)))
  	      return tz;
+ 	    pos = str.rfind('/', pos - 1);
  	  }
+ 	// If we didn't match yet, try once more so that we will match
+ 	// a symlink to a relative path such as "Europe/London"
+ 	// or symlink to an absolute path such as "/Europe/London".
+ 	// Both cases seem unlikely because it would require either
+ 	// /etc/Europe or /Europe to be a directory (or a symlink to one)
+ 	// containing the TZif files, but it's theoretically possible.
+ 	// If pos==npos then pos+1 wraps to 0 and we use the whole string.
+ 	// If pos==0 then substr(1) discards the leading slash.
+ 	if (auto tz = do_locate_zone(this->zones, this->links,
+ 				     str.substr(pos + 1)))
+ 	  return tz;
        }
  #endif
      // Otherwise, look for a file naming the time zone.
*************** namespace std::chrono
*** 1792,1798 ****
  		  return tz;
  	      }
        }
! #else
      // AIX stores current zone in $TZ in /etc/environment but the value
      // is typically a POSIX time zone name, not IANA zone.
      // https://developer.ibm.com/articles/au-aix-posix/
--- 1855,1866 ----
  		  return tz;
  	      }
        }
! 
!     // FIXME: For DragonFly BSD /etc/localtime is a copy of one of the
!     // zone files in /usr/share/zoneinfo so we need to compare its contents
!     // to each one until we find a match.
! 
! #else // _AIX
      // AIX stores current zone in $TZ in /etc/environment but the value
      // is typically a POSIX time zone name, not IANA zone.
      // https://developer.ibm.com/articles/au-aix-posix/
diff -Nrcpad gcc-14.3.0/libstdc++-v3/src/filesystem/ops-common.h gcc-14.3.0-RC-20260619/libstdc++-v3/src/filesystem/ops-common.h
*** gcc-14.3.0/libstdc++-v3/src/filesystem/ops-common.h	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/src/filesystem/ops-common.h	Fri Jun 19 06:51:07 2026
*************** namespace __gnu_posix
*** 159,168 ****
      if (MoveFileExW(oldname, newname,
  		    MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED))
        return 0;
!     if (GetLastError() == ERROR_ACCESS_DENIED)
!       errno = EACCES;
!     else
!       errno = EIO;
      return -1;
    }
  
--- 159,165 ----
      if (MoveFileExW(oldname, newname,
  		    MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED))
        return 0;
!     errno = std::__last_system_error().default_error_condition().value();
      return -1;
    }
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/17_intro/badnames.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/17_intro/badnames.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/17_intro/badnames.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/17_intro/badnames.cc	Fri Jun 19 06:51:07 2026
***************
*** 67,73 ****
  
  // BSD adds:
  #define __used		__used is a BADNAME
! #define __unused	__unused is a BADNAME
          // __inline	(glibc uses this so can't test here)
          // _Complex	(glibc uses this so can't test here)
  #define __istype	__istype is a BADNAME
--- 67,73 ----
  
  // BSD adds:
  #define __used		__used is a BADNAME
!         // __unused	(glibc uses this so can't test here)
          // __inline	(glibc uses this so can't test here)
          // _Complex	(glibc uses this so can't test here)
  #define __istype	__istype is a BADNAME
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/17_intro/names.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/17_intro/names.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/17_intro/names.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/17_intro/names.cc	Fri Jun 19 06:51:07 2026
***************
*** 280,285 ****
--- 280,287 ----
  // <sys/ucontext.h> defines fpreg_t::d and fpreg_t::f
  #undef d
  #undef f
+ // <asm/types.h> defines __vector128::u
+ #undef u
  #endif
  
  #if defined (__linux__) && defined (__sparc__)
***************
*** 289,295 ****
  #if defined (__linux__) || defined (__gnu_hurd__)
  #if __has_include(<features.h>)
  #include <features.h>
! #if __GLIBC__ == 2 && __GLIBC_MINOR__ < 19
  // Glibc defines this prior to 2.19
  #undef __unused
  #endif
--- 291,297 ----
  #if defined (__linux__) || defined (__gnu_hurd__)
  #if __has_include(<features.h>)
  #include <features.h>
! #if __GLIBC__ == 2 && (__GLIBC_MINOR__ < 19 || __GLIBC_MINOR__ == 43)
  // Glibc defines this prior to 2.19
  #undef __unused
  #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc	Fri Jun 19 06:51:07 2026
***************
*** 4,9 ****
--- 4,14 ----
  
  #if __SIZEOF_FLOAT128__
  __extension__ template class std::numeric_limits<__float128>;
+ 
+ # if __cplusplus >= 201103L
+ static_assert( std::numeric_limits<__float128>::max_digits10 == 36,
+ 	       "PR libstdc++/121374" );
+ # endif
  #endif
  
  #if __SIZEOF_INT128__
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc	Fri Jun 19 06:51:07 2026
***************
*** 21,26 ****
--- 21,31 ----
  #include <locale>
  #include <testsuite_hooks.h>
  
+ #if defined __MINGW32__ || defined __MINGW64__
+ #define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+ #endif
+ 
  void
  test01()
  {
*************** test02()
*** 34,40 ****
    const std::error_category& cat = std::system_category();
    std::error_condition cond;
  
! #if defined __MING32__ || defined __MINGW64__
    cond = cat.default_error_condition(8); // ERROR_NOT_ENOUGH_MEMORY
    VERIFY( cond.value() == ENOMEM );
    VERIFY( cond.category() == std::generic_category() );
--- 39,45 ----
    const std::error_category& cat = std::system_category();
    std::error_condition cond;
  
! #if defined __MINGW32__ || defined __MINGW64__
    cond = cat.default_error_condition(8); // ERROR_NOT_ENOUGH_MEMORY
    VERIFY( cond.value() == ENOMEM );
    VERIFY( cond.category() == std::generic_category() );
*************** test03()
*** 112,120 ****
    // set "C" locale to get expected message
    auto loc = std::locale::global(std::locale::classic());
  
! #if defined __MING32__ || defined __MINGW64__
    std::string msg = std::system_category().message(5); // ERROR_ACCESS_DENIED
!   VERIFY(msg == "Access denied");
  #else
    std::string msg = std::system_category().message(EBADF);
    VERIFY( msg.find("file") != std::string::npos );
--- 117,133 ----
    // set "C" locale to get expected message
    auto loc = std::locale::global(std::locale::classic());
  
! #if defined __MINGW32__ || defined __MINGW64__
!   // On Windows, set thread preferred UI languages to "en-US"
!   // to get expected message
!   ULONG num_langs = 1;
!   SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, L"en-US\0", &num_langs);
! 
    std::string msg = std::system_category().message(5); // ERROR_ACCESS_DENIED
!   // Windows returns "Access is denied" but Wine returns "Access denied".
!   VERIFY(msg == "Access is denied" || msg == "Access denied");
! 
!   SetThreadPreferredUILanguages(MUI_RESET_FILTERS, nullptr, nullptr);
  #else
    std::string msg = std::system_category().message(EBADF);
    VERIFY( msg.find("file") != std::string::npos );
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc	Fri Jun 19 06:51:07 2026
***************
*** 1,9 ****
--- 1,11 ----
  // { dg-do compile { target c++11 } }
+ // { dg-additional-options "-Wsystem-headers" }
  #include <functional>
  
  int f();
  auto b = std::bind<const int&>(f);
  int i = b(); // { dg-error "here" "" { target { c++14_down } } }
  // { dg-error "dangling reference" "" { target { c++14_down } } 0 }
+ // { dg-error "reference to temporary" "" { target { c++14_down } } 0 }
  // { dg-error "no matching function" "" { target c++17 } 0 }
  // { dg-error "enable_if" "" { target c++17 } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/expected/lwg3836.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/expected/lwg3836.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/expected/lwg3836.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/expected/lwg3836.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,34 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <expected>
+ #include <testsuite_hooks.h>
+ 
+ constexpr void
+ test_convert_contained_value_to_bool()
+ {
+   struct BaseError { };
+   struct DerivedError : BaseError { };
+ 
+   std::expected<bool, DerivedError> e = false;
+ 
+   // Should use expected(const expected<U, G>&) ctor, not expected(U&&):
+   std::expected<bool, BaseError> e2 = e;
+ 
+   // Contained value should be e.value() not static_cast<bool>(e):
+   VERIFY( e2.value() == false );
+ 
+   std::expected<bool, DerivedError> e3(std::unexpect);
+   std::expected<const bool, BaseError> e4 = e3;
+   // Should have error, not static_cast<bool>(e3):
+   VERIFY( ! e4.has_value() );
+ }
+ 
+ int main()
+ {
+   test_convert_contained_value_to_bool();
+ 
+   static_assert([] {
+     test_convert_contained_value_to_bool();
+     return true;
+   }());
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/expected/lwg4222.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/expected/lwg4222.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/expected/lwg4222.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/expected/lwg4222.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,39 ----
+ // { dg-do run { target c++23 } }
+ 
+ // LWG 4222. 'expected' constructor from a single value missing a constraint
+ 
+ #include <expected>
+ #include <type_traits>
+ #include <testsuite_hooks.h>
+ 
+ struct T {
+   explicit T(auto) {}
+ };
+ struct E {
+   E(int) {}
+ };
+ 
+ struct V {
+  explicit constexpr V(std::unexpect_t) {}
+ };
+ 
+ static_assert(!std::is_constructible_v<std::expected<T, E>, std::unexpect_t>);
+ static_assert(!std::is_constructible_v<std::expected<T, E>, std::unexpect_t &>);
+ static_assert(!std::is_constructible_v<std::expected<T, E>, std::unexpect_t &&>);
+ static_assert(!std::is_constructible_v<std::expected<T, E>, const std::unexpect_t>);
+ static_assert(!std::is_constructible_v<std::expected<T, E>, const std::unexpect_t &>);
+ static_assert(!std::is_constructible_v<std::expected<T, E>, const std::unexpect_t &&>);
+ 
+ constexpr bool test() {
+   std::expected<V, int> e1(std::in_place, std::unexpect);
+   VERIFY( e1.has_value() );
+   std::expected<int, V> e2(std::unexpect, std::unexpect);
+   VERIFY( !e2.has_value() );
+   return true;
+ }
+ 
+ int main() {
+   test();
+   static_assert(test());
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer_spaceship.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer_spaceship.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer_spaceship.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer_spaceship.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,336 ----
+ // { dg-do run { target c++20 } }
+ 
+ #include <compare>
+ #include <cstring>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ constexpr const char arr[] = "efgh\0abcd\0ijkl";
+ constexpr const char* s1 = arr;
+ constexpr const char* s2 = arr+5;
+ constexpr const char* s3 = arr+6;
+ 
+ struct CStrNone
+ {
+   const char* str;
+ 
+   constexpr
+   operator const char*() const
+   { return str; }
+ };
+ 
+ template<typename ResultCreator>
+ struct CStrMem
+ {
+   const char* str;
+ 
+   constexpr
+   operator const char*() const
+   { return str; }
+ 
+   auto operator<=>(CStrMem const& rhs) const
+   { return ResultCreator::create(std::strcmp(this->str, rhs.str)); }
+ 
+   auto operator<=>(const char* rhs) const
+   { return ResultCreator::create(std::strcmp(this->str, rhs)); }
+ };
+ 
+ template<typename ResultCreator>
+ struct CStrFriend
+ {
+   const char* str;
+ 
+   constexpr
+   operator const char*() const
+   { return str; }
+ 
+   friend auto operator<=>(CStrFriend lhs, CStrFriend rhs)
+   { return ResultCreator::create(std::strcmp(lhs.str, rhs.str)); }
+ 
+   friend auto operator<=>(CStrFriend lhs, const char* rhs)
+   { return ResultCreator::create(std::strcmp(lhs.str, rhs)); }
+ };
+ 
+ template<typename ResultCreator>
+ struct CStrFree
+ {
+   const char* str;
+ 
+   constexpr
+   operator const char*() const
+   { return str; }
+ };
+ 
+ template<typename RC>
+ auto operator<=>(CStrFree<RC> lhs, CStrFree<RC> rhs)
+ { return RC::create(std::strcmp(lhs.str, rhs.str)); }
+ 
+ template<typename RC>
+ auto operator<=>(CStrFree<RC> lhs, const char* rhs)
+ { return RC::create(std::strcmp(lhs.str, rhs)); }
+ 
+ template<typename ResultCreator>
+ struct CStrMixed
+ {
+   const char* str;
+ 
+   constexpr
+   operator const char*() const
+   { return str; }
+ };
+ 
+ template<typename RC>
+ auto operator<=>(CStrMixed<RC> lhs, CStrMixed<RC> rhs)
+ { return RC::create(std::strcmp(lhs.str, rhs.str)); }
+ 
+ template<typename RC>
+ auto operator<=>(CStrMixed<RC> lhs, CStrFree<RC> rhs)
+ { return RC::create(std::strcmp(lhs.str, rhs.str)); }
+ 
+ // If the type returned from shapeship does not support relational
+ // operators, then synthesized operators are ill-formed, SFINAEable.
+ struct ReturnVoid
+ {
+   constexpr static void
+   create(int) { }
+ };
+ 
+ struct NoOperators
+ {
+   constexpr static NoOperators
+   create(int)
+   { return NoOperators(); }
+ };
+ 
+ // std defined ordering types are expected
+ template<typename Ord = std::strong_ordering>
+ struct ReturnOrd
+ {
+   constexpr static Ord
+   create(int cmp)
+   { return cmp <=> 0; }
+ };
+ 
+ // However, other types that provide required
+ // operators are supported.
+ struct ReturnInt
+ {
+   constexpr static int
+   create(int cmp)
+   { return cmp; }
+ };
+ 
+ struct CustomOrd
+ {
+   constexpr static CustomOrd
+   create(int cmp)
+   { return CustomOrd(cmp); }
+ 
+   CustomOrd() = default;
+ 
+   explicit constexpr
+   CustomOrd(int cmp)
+   : v(cmp) {}
+ 
+   friend constexpr bool
+   operator<(CustomOrd c, std::nullptr_t)
+   { return c.v < 0; }
+ 
+   friend constexpr bool
+   operator<(std::nullptr_t, CustomOrd c)
+   { return 0 < c.v; }
+ 
+   friend constexpr bool
+   operator>(CustomOrd c, std::nullptr_t)
+   { return c.v > 0; }
+ 
+   friend constexpr bool
+   operator>(std::nullptr_t, CustomOrd c)
+   { return 0 > c.v; }
+ 
+   friend constexpr bool
+   operator<=(CustomOrd c, std::nullptr_t)
+   { return c.v <= 0; }
+ 
+   friend constexpr bool
+   operator<=(std::nullptr_t, CustomOrd c)
+   { return 0 <= c.v; }
+ 
+   friend constexpr bool
+   operator>=(CustomOrd c, std::nullptr_t)
+   { return c.v >= 0; }
+ 
+   friend constexpr bool
+   operator>=(std::nullptr_t, CustomOrd c)
+   { return 0 >= c.v; }
+ 
+   friend constexpr CustomOrd
+   operator<=>(CustomOrd c, std::nullptr_t)
+   { return c; }
+ 
+   friend constexpr CustomOrd
+   operator<=>(std::nullptr_t, CustomOrd c)
+   { return CustomOrd(-c.v); }
+ 
+ private:
+   int v = 0;
+ };
+ 
+ template<typename CStr1, typename CStr2>
+ void
+ test_relational(bool use_overloaded)
+ {
+   CStr1 cs1{s1}; CStr2 cs2{s2};
+ 
+   if (use_overloaded)
+   {
+     // Overloaded operaetors compare content of the string,
+     // and cs1 > cs2;
+ 
+     VERIFY( !(cs1 < cs2) );
+     VERIFY( !std::less<>{}(cs1, cs2) );
+     VERIFY( !std::ranges::less{}(cs1, cs2) );
+ 
+     VERIFY( (cs1 > cs2) );
+     VERIFY( std::greater<>{}(cs1, cs2) );
+     VERIFY( std::ranges::greater{}(cs1, cs2) );
+ 
+     VERIFY( !(cs1 < cs2) );
+     VERIFY( !std::less_equal<>{}(cs1, cs2) );
+     VERIFY( !std::ranges::less_equal{}(cs1, cs2) );
+ 
+     VERIFY( (cs1 > cs2) );
+     VERIFY( std::greater_equal<>{}(cs1, cs2) );
+     VERIFY( std::ranges::greater_equal{}(cs1, cs2) );
+   }
+   else
+   {
+     // Without overloaded operators, we comapre pointers,
+     // and cs1 < cs2;
+ 
+     VERIFY( (cs1 < cs2) );
+     VERIFY( std::less<>{}(cs1, cs2) );
+     VERIFY( std::ranges::less{}(cs1, cs2) );
+ 
+     VERIFY( !(cs1 > cs2) );
+     VERIFY( !std::greater<>{}(cs1, cs2) );
+     VERIFY( !std::ranges::greater{}(cs1, cs2) );
+ 
+     VERIFY( (cs1 < cs2) );
+     VERIFY( std::less_equal<>{}(cs1, cs2) );
+     VERIFY( std::ranges::less_equal{}(cs1, cs2) );
+ 
+     VERIFY( !(cs1 > cs2) );
+     VERIFY( !std::greater_equal<>{}(cs1, cs2) );
+     VERIFY( !std::ranges::greater_equal{}(cs1, cs2) );
+   }
+ }
+ 
+ template<typename CStr>
+ void
+ test_relational_type(bool use_overloaded)
+ {
+   test_relational<CStr, CStr>(use_overloaded);
+   test_relational<CStr, const char*>(use_overloaded);
+   test_relational<const char*, CStr>(use_overloaded);
+ }
+ 
+ template<typename RC>
+ void
+ test_relational_return()
+ {
+   test_relational_type<CStrMem<RC>>(true);
+   test_relational_type<CStrFriend<RC>>(true);
+   test_relational_type<CStrFree<RC>>(true);
+   test_relational<CStrMixed<RC>, CStrFree<RC>>(true);
+   test_relational<CStrFree<RC>, CStrMixed<RC>>(true);
+ }
+ 
+ template<typename CStr1, typename CStr2>
+ void
+ test_spaceship(bool use_overloaded)
+ {
+   CStr1 cs1{s1}; CStr2 cs2{s2};
+ 
+   if (use_overloaded)
+   {
+     // Overloaded operaetors compare content of the string,
+     // and cs1 > cs2;
+     VERIFY( (cs1 <=> cs2) > 0 );
+     VERIFY( std::compare_three_way{}(cs1, cs2) > 0 );
+   }
+   else
+   {
+     // Without overloaded operators, we comapre pointers,
+     // and cs1 < cs2;
+     VERIFY( (cs1 <=> cs2) < 0 );
+     VERIFY( std::compare_three_way{}(cs1, cs2) < 0 );
+   }
+ }
+ 
+ template<typename CStr>
+ void
+ test_spaceship_type(bool use_overloaded)
+ {
+   test_spaceship<CStr, CStr>(use_overloaded);
+   test_spaceship<CStr, const char*>(use_overloaded);
+   test_spaceship<const char*, CStr>(use_overloaded);
+ }
+ 
+ template<typename Ordering>
+ void
+ test_std_ordering()
+ {
+   using RC = ReturnOrd<Ordering>;
+   test_relational_return<RC>();
+   test_spaceship_type<CStrMem<RC>>(true);
+   test_spaceship_type<CStrFriend<RC>>(true);
+   test_spaceship_type<CStrFree<RC>>(true);
+   test_spaceship<CStrMixed<RC>, CStrFree<RC>>(true);
+   test_spaceship<CStrFree<RC>, CStrMixed<RC>>(true);
+ }
+ 
+ template<typename CStr1, typename CStr2>
+ void
+ test_no_relational()
+ {
+   CStr1 c1{}; CStr2 c2{};
+   static_assert(!requires { c1 < c2; });
+   static_assert(!requires { c1 > c2; });
+   static_assert(!requires { c1 <= c2; });
+   static_assert(!requires { c1 >= c2; });
+ }
+ 
+ template<typename CStr>
+ void
+ test_no_relational_type()
+ {
+   test_no_relational<CStr, CStr>();
+   test_no_relational<CStr, const char*>();
+   test_no_relational<const char*, CStr>();
+ }
+ 
+ template<typename RC>
+ void
+ test_no_relational_return()
+ {
+   test_no_relational_type<CStrMem<RC>>();
+   test_no_relational_type<CStrFriend<RC>>();
+   test_no_relational_type<CStrFree<RC>>();
+   test_no_relational<CStrMixed<RC>, CStrFree<RC>>();
+   test_no_relational<CStrFree<RC>, CStrMixed<RC>>();
+ }
+ 
+ int main()
+ {
+   test_std_ordering<std::strong_ordering>();
+   test_std_ordering<std::weak_ordering>();
+   test_std_ordering<std::partial_ordering>();
+ 
+   test_relational_type<CStrNone>(false);
+   test_relational_return<ReturnInt>();
+   test_relational_return<CustomOrd>();
+ 
+   test_no_relational_return<ReturnVoid>();
+   test_no_relational_return<NoOperators>();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc	Fri Jun 19 06:51:07 2026
*************** void test01()
*** 33,35 ****
--- 33,87 ----
    const int&&  cpsecond __attribute__((unused)) =
      std::get<int>(std::move(cp));
  }
+ 
+ // PR libstdc++/121745 return of get(pair<_Up, _Tp>&& __p) may be ill-formed
+ void
+ test_pr121745(std::pair<float&, int&> p)
+ {
+   float& pfirst = std::get<float&>(std::move(p));
+   int& psecond  = std::get<int&>(std::move(p));
+ 
+   const auto& p2 = p;
+   float& p2first = std::get<float&>(std::move(p2));
+   int& p2second  = std::get<int&>(std::move(p2));
+ }
+ 
+ template<typename T, typename Pair>
+ using get_t = decltype(std::get<T>(std::declval<Pair>()));
+ 
+ // Check that get<T>(Pair) returns Ret
+ template<typename T, typename Pair, typename Ret>
+ constexpr bool verify = std::is_same<get_t<T, Pair>, Ret>::value;
+ 
+ template<typename T1, typename T2>
+ void
+ check()
+ {
+   // Overloads for accessing first member
+   static_assert( verify<T1, std::pair<T1, T2>&, T1&>,
+ 		 "T1& get(pair<T1, T2>&)" );
+   static_assert( verify<T1, const std::pair<T1, T2>&, const T1&>,
+ 		 "const T1& get(const pair<T1, T2>&)" );
+   static_assert( verify<T1, std::pair<T1, T2>&&, T1&&>,
+ 		 "T1&& get(pair<T1, T2>&&)" );
+   static_assert( verify<T1, const std::pair<T1, T2>&&, const T1&&>,
+ 		 "const T1&& get(const pair<T1, T2>&&)" );
+ 
+   // Overloads for accessing second member
+   static_assert( verify<T2, std::pair<T1, T2>&, T2&>,
+ 		 "T2& get(pair<T1, T2>&)" );
+   static_assert( verify<T2, const std::pair<T1, T2>&, const T2&>,
+ 		 "const T2& get(const pair<T1, T2>&)" );
+   static_assert( verify<T2, std::pair<T1, T2>&&, T2&&>,
+ 		 "T2&& get(pair<T1, T2>&&)" );
+   static_assert( verify<T2, const std::pair<T1, T2>&&, const T2&&>,
+ 		 "const T2&& get(const pair<T1, T2>&&)" );
+ }
+ 
+ void
+ test_all()
+ {
+   check<float, int>();
+   check<float&, int&>();
+   check<float&&, int&&>();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/pair/cons/110853.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/pair/cons/110853.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/pair/cons/110853.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/pair/cons/110853.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,10 ----
+ // { dg-do compile { target c++17 } }
+ // PR libstdc++/110853
+ // Bad interaction between deduction guide with decay and constraints
+ // (CTAD, std::pair and function lvalue)
+ 
+ #include <utility>
+ 
+ void func() {}
+ std::pair p(1, func);
+ std::pair<int, void (*)()>& r = p;
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc	Fri Jun 19 06:51:07 2026
***************
*** 1,6 ****
  // { dg-do compile { target c++11 } }
  // { dg-require-cstdint "" }
! 
  // 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
  
  // Copyright (C) 2008-2024 Free Software Foundation, Inc.
--- 1,6 ----
  // { dg-do compile { target c++11 } }
  // { dg-require-cstdint "" }
! // { dg-additional-options "-Wsystem-headers" }
  // 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
  
  // Copyright (C) 2008-2024 Free Software Foundation, Inc.
*************** test02()
*** 48,52 ****
--- 48,53 ----
  // { dg-error "overflow in multiplication" "" { target *-*-* } 105 }
  // { dg-error "overflow in constant expression" "" { target *-*-* } 0 }
  // { dg-error "narrowing conversion" "" { target *-*-* } 0 }
+ // { dg-error "overflow in expression" "" { target *-*-* } 112 }
  // { dg-prune-output "out of range" }
  // { dg-prune-output "not usable in a constant expression" }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,33 ----
+ // { dg-do compile { target c++11 } }
+ // { dg-require-effective-target hosted }
+ 
+ #include <memory>
+ #include <testsuite_tr1.h>
+ 
+ using namespace __gnu_test;
+ 
+ void
+ test01()
+ {
+   std::shared_ptr<ClassType> ptr;
+   std::shared_ptr<const ClassType> ptr2 = ptr;
+ 
+ #if __cpp_lib_shared_ptr_arrays >= 201611L
+   std::shared_ptr<ClassType[10]> ptr_array;
+   std::shared_ptr<ClassType[]> ptr_array2 = ptr_array;
+   std::shared_ptr<ClassType const []> ptr_array3 = ptr_array;
+ #endif
+ }
+ 
+ void
+ test02()
+ {
+   std::shared_ptr<IncompleteClass> ptr;
+   std::shared_ptr<const IncompleteClass> ptr2 = ptr;
+ 
+ #if __cpp_lib_shared_ptr_arrays >= 201611L
+   std::shared_ptr<IncompleteClass[10]> ptr_array;
+   std::shared_ptr<IncompleteClass[]> ptr_array2 = ptr_array;
+   std::shared_ptr<IncompleteClass const []> ptr_array3 = ptr_array;
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc	Fri Jun 19 06:51:07 2026
*************** template class std::shared_ptr<int>;
*** 28,30 ****
--- 28,42 ----
  template class std::shared_ptr<void>;
  template class std::shared_ptr<ClassType>;
  template class std::shared_ptr<IncompleteClass>;
+ 
+ #if __cpp_lib_shared_ptr_arrays >= 201611L
+ template class std::shared_ptr<ClassType []>;
+ template class std::shared_ptr<ClassType [42]>;
+ template class std::shared_ptr<ClassType const []>;
+ template class std::shared_ptr<ClassType const [42]>;
+ 
+ template class std::shared_ptr<IncompleteClass []>;
+ template class std::shared_ptr<IncompleteClass [42]>;
+ template class std::shared_ptr<IncompleteClass const []>;
+ template class std::shared_ptr<IncompleteClass const [42]>;
+ #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_n_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_n_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_n_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_n_neg.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,59 ----
+ // Copyright (C) 2017-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ // { dg-do compile { target c++17 } }
+ 
+ #include <memory>
+ 
+ // This has a trivial destructor, but should not be destructible!
+ struct DeletedDtor {
+   ~DeletedDtor() = delete;
+ };
+ 
+ void
+ test01()
+ {
+   alignas(DeletedDtor) unsigned char buf[sizeof(DeletedDtor)];
+   auto p = ::new (buf) DeletedDtor();
+   std::destroy_n(p, 1);
+ }
+ 
+ class PrivateDtor {
+   ~PrivateDtor() { }
+ };
+ 
+ void
+ test02()
+ {
+   alignas(PrivateDtor) unsigned char buf[sizeof(PrivateDtor)];
+   auto p = ::new (buf) PrivateDtor();
+   std::destroy_n(p, 1);
+ }
+ 
+ #if __cpp_constexpr_dynamic_alloc // >= C++20
+ consteval bool
+ test03()
+ {
+   DeletedDtor* p = nullptr;
+   std::destroy_n(p, 0);
+   return true;
+ }
+ static_assert(test03());
+ #endif
+ 
+ // { dg-error "deleted function .*DeletedDtor" "" { target *-*-* } 0 }
+ // { dg-error "PrivateDtor.* is private" "" { target *-*-* } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc	Fri Jun 19 06:51:07 2026
*************** test01()
*** 29,36 ****
  {
    alignas(DeletedDtor) unsigned char buf[sizeof(DeletedDtor)];
    auto p = ::new (buf) DeletedDtor();
!   std::destroy(p, p + 1);	// { dg-error "here" }
!   std::destroy_n(p, 1);		// { dg-error "here" }
  }
  
  class PrivateDtor {
--- 29,35 ----
  {
    alignas(DeletedDtor) unsigned char buf[sizeof(DeletedDtor)];
    auto p = ::new (buf) DeletedDtor();
!   std::destroy(p, p + 1);
  }
  
  class PrivateDtor {
*************** test02()
*** 42,49 ****
  {
    alignas(PrivateDtor) unsigned char buf[sizeof(PrivateDtor)];
    auto p = ::new (buf) PrivateDtor();
!   std::destroy(p, p + 1);	// { dg-error "here" }
!   std::destroy_n(p, 1);		// { dg-error "here" }
  }
  
! // { dg-error "value type is destructible" "" { target *-*-* } 0 }
--- 41,59 ----
  {
    alignas(PrivateDtor) unsigned char buf[sizeof(PrivateDtor)];
    auto p = ::new (buf) PrivateDtor();
!   std::destroy(p, p + 1);
  }
  
! #if __cpp_constexpr_dynamic_alloc // >= C++20
! consteval bool
! test03()
! {
!   DeletedDtor* p = nullptr;
!   std::destroy(p, p);
!   return true;
! }
! static_assert(test03());
! #endif
! 
! // { dg-error "deleted function .*DeletedDtor" "" { target *-*-* } 0 }
! // { dg-error "PrivateDtor.* is private" "" { target *-*-* } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/stdbit/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/stdbit/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/stdbit/1.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/stdbit/1.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,320 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <stdbit.h>
+ 
+ #if __STDC_VERSION_STDBIT_H__ != 202311L
+ # error "__STDC_VERSION_STDBIT_H__ not defined correctly in <stdbit.h>"
+ #endif
+ #ifndef __STDC_ENDIAN_BIG__
+ # error "__STDC_ENDIAN_BIG__ is not defined in <stdbit.h>"
+ #endif
+ #ifndef __STDC_ENDIAN_LITTLE__
+ # error "__STDC_ENDIAN_LITTLE__ is not defined in <stdbit.h>"
+ #endif
+ #ifndef __STDC_ENDIAN_NATIVE__
+ # error "__STDC_ENDIAN_NATIVE__ is not defined in <stdbit.h>"
+ #endif
+ 
+ #include <testsuite_hooks.h>
+ #include <limits.h>
+ 
+ void
+ test_leading_zeros()
+ {
+   VERIFY( stdc_leading_zeros_uc(0) == CHAR_BIT );
+   VERIFY( stdc_leading_zeros_uc(UCHAR_MAX) == 0 );
+   VERIFY( stdc_leading_zeros_uc(CHAR_MAX) == (CHAR_MIN ? 1 : 0) );
+   VERIFY( stdc_leading_zeros_uc(UCHAR_MAX >> 3) == 3 );
+   VERIFY( stdc_leading_zeros_uc((unsigned char)(UCHAR_MAX << 3)) == 0 );
+ 
+   // TODO: replace __X_WIDTH__ with the standard macros once they're in C++26
+   VERIFY( stdc_leading_zeros_us(0) == __SHRT_WIDTH__ );
+   VERIFY( stdc_leading_zeros_us(USHRT_MAX) == 0 );
+   VERIFY( stdc_leading_zeros_us(USHRT_MAX >> 11) == 11 );
+ 
+   VERIFY( stdc_leading_zeros_ui(0) == __INT_WIDTH__ );
+   VERIFY( stdc_leading_zeros_ui(UINT_MAX) == 0 );
+   VERIFY( stdc_leading_zeros_ui(UINT_MAX >> 11) == 11 );
+ 
+   VERIFY( stdc_leading_zeros_ul(0) == __LONG_WIDTH__ );
+   VERIFY( stdc_leading_zeros_ul(ULONG_MAX) == 0 );
+   VERIFY( stdc_leading_zeros_ul(ULONG_MAX >> 19) == 19 );
+ 
+   VERIFY( stdc_leading_zeros_ull(0) == __LONG_LONG_WIDTH__ );
+   VERIFY( stdc_leading_zeros_ull(ULLONG_MAX) == 0 );
+   VERIFY( stdc_leading_zeros_ull(ULLONG_MAX >> 33) == 33 );
+   VERIFY( stdc_leading_zeros_ull(7) == (__LONG_LONG_WIDTH__ - 3) );
+ 
+   VERIFY( stdc_leading_zeros(7U) == (__INT_WIDTH__ - 3) );
+   VERIFY( stdc_leading_zeros(7UL) == (__LONG_WIDTH__ - 3) );
+   VERIFY( stdc_leading_zeros(7ULL) == (__LONG_LONG_WIDTH__ - 3) );
+ 
+   static_assert( std::is_same_v<decltype(stdc_leading_zeros(0UL)), unsigned> );
+ }
+ 
+ void
+ test_leading_ones()
+ {
+   VERIFY( stdc_leading_ones_uc(0) == 0 );
+   VERIFY( stdc_leading_ones_uc(UCHAR_MAX) == CHAR_BIT );
+   VERIFY( stdc_leading_ones_uc(CHAR_MAX) == (CHAR_MIN ? 0 : CHAR_BIT) );
+   VERIFY( stdc_leading_ones_uc(UCHAR_MAX >> 3) == 0 );
+   VERIFY( stdc_leading_ones_uc((unsigned char)(UCHAR_MAX << 3)) == (CHAR_BIT - 3) );
+ 
+   VERIFY( stdc_leading_ones_us(0) == 0 );
+   VERIFY( stdc_leading_ones_us(USHRT_MAX) == __SHRT_WIDTH__ );
+   VERIFY( stdc_leading_ones_us((unsigned short)(USHRT_MAX << 11)) == (__SHRT_WIDTH__ - 11) );
+   VERIFY( stdc_leading_ones_us(USHRT_MAX >> 11) == 0 );
+ 
+   VERIFY( stdc_leading_ones_ui(0) == 0 );
+   VERIFY( stdc_leading_ones_ui(UINT_MAX) == __INT_WIDTH__ );
+   VERIFY( stdc_leading_ones_ui(UINT_MAX << 11) == (__INT_WIDTH__ - 11) );
+ 
+   VERIFY( stdc_leading_ones_ul(0) == 0 );
+   VERIFY( stdc_leading_ones_ul(ULONG_MAX) == __LONG_WIDTH__ );
+   VERIFY( stdc_leading_ones_ul(ULONG_MAX << 19) == (__LONG_WIDTH__ - 19) );
+ 
+   VERIFY( stdc_leading_ones_ull(0) == 0 );
+   VERIFY( stdc_leading_ones_ull(ULLONG_MAX) == __LONG_LONG_WIDTH__ );
+   VERIFY( stdc_leading_ones_ull(ULLONG_MAX << 33) == (__LONG_LONG_WIDTH__ - 33) );
+ 
+   VERIFY( stdc_leading_ones(-1U << 2) == (__INT_WIDTH__ - 2) );
+   VERIFY( stdc_leading_ones(-1UL << 3) == (__LONG_WIDTH__ - 3) );
+   VERIFY( stdc_leading_ones(-1ULL << 4) == (__LONG_LONG_WIDTH__ - 4) );
+ 
+   static_assert( std::is_same_v<decltype(stdc_leading_ones(0UL)), unsigned> );
+ }
+ 
+ void
+ test_trailing_zeros()
+ {
+   VERIFY( stdc_trailing_zeros_uc((unsigned char)(UCHAR_MAX << 5)) == 5 );
+   VERIFY( stdc_trailing_zeros_us((unsigned short)(USHRT_MAX << 5)) == 5 );
+   VERIFY( stdc_trailing_zeros_ui(UINT_MAX << 9) == 9 );
+   VERIFY( stdc_trailing_zeros_ul(ULONG_MAX << 19) == 19 );
+   VERIFY( stdc_trailing_zeros_ull(ULLONG_MAX << 39) == 39 );
+   VERIFY( stdc_trailing_zeros(8U) == 3 );
+ 
+   static_assert( std::is_same_v<decltype(stdc_trailing_zeros(0UL)), unsigned> );
+ }
+ 
+ void
+ test_trailing_ones()
+ {
+   VERIFY( stdc_trailing_ones_uc((unsigned char)3) == 2 );
+   VERIFY( stdc_trailing_ones_uc((unsigned char)135) == 3 );
+   VERIFY( stdc_trailing_ones_us((unsigned short)7) == 3 );
+   VERIFY( stdc_trailing_ones_us((unsigned short)23) == 3 );
+   VERIFY( stdc_trailing_ones_us((unsigned short)235) == 2 );
+   VERIFY( stdc_trailing_ones_ui(11U) == 2 );
+   VERIFY( stdc_trailing_ones_ui(15U) == 4 );
+   VERIFY( stdc_trailing_ones_ul(ULONG_MAX) == __LONG_WIDTH__ );
+   VERIFY( stdc_trailing_ones_ull(ULLONG_MAX) == __LONG_LONG_WIDTH__ );
+   VERIFY( stdc_trailing_ones(7U) == 3 );
+ 
+   static_assert( std::is_same_v<decltype(stdc_trailing_ones(0UL)), unsigned> );
+ }
+ 
+ void
+ test_first_leading_zero()
+ {
+   VERIFY( stdc_first_leading_zero_uc(0) == 1 );
+   VERIFY( stdc_first_leading_zero_uc(UCHAR_MAX) == 0 );
+   VERIFY( stdc_first_leading_zero_uc(UCHAR_MAX ^ 0b111) == (CHAR_BIT - 2) );
+   VERIFY( stdc_first_leading_zero_us(USHRT_MAX) == 0 );
+   VERIFY( stdc_first_leading_zero_us(USHRT_MAX ^ 0b111) == (__SHRT_WIDTH__ - 2) );
+   VERIFY( stdc_first_leading_zero_ui(UINT_MAX ^ 0b10111) == (__INT_WIDTH__ - 4) );
+   VERIFY( stdc_first_leading_zero_ul(ULONG_MAX ^ 0b10111) == (__LONG_WIDTH__ - 4) );
+   VERIFY( stdc_first_leading_zero_ull(ULLONG_MAX ^ 0b10111) == (__LONG_LONG_WIDTH__ - 4) );
+ 
+   VERIFY( stdc_first_leading_zero(0U) == 1 );
+   VERIFY( stdc_first_leading_zero(-1U ^ 0b1111) == (__INT_WIDTH__ - 3) );
+ 
+   static_assert( std::is_same_v<decltype(stdc_first_leading_zero(0UL)), unsigned> );
+ }
+ 
+ void
+ test_first_leading_one()
+ {
+   VERIFY( stdc_first_leading_one_uc(0) == 0 );
+   VERIFY( stdc_first_leading_one_uc(0b00100) == (CHAR_BIT - 2) );
+   VERIFY( stdc_first_leading_one_ui(0b001100) == (__INT_WIDTH__ - 3) );
+   VERIFY( stdc_first_leading_one_ul(0b101100) == (__LONG_WIDTH__ - 5) );
+   VERIFY( stdc_first_leading_one_ull(0b1110000) == (__LONG_LONG_WIDTH__ - 6) );
+ 
+   VERIFY( stdc_first_leading_one(0U) == 0 );
+   VERIFY( stdc_first_leading_one(-1U >> 4) == 5 );
+   VERIFY( stdc_first_leading_one(-1ULL >> 43) == 44 );
+ 
+   static_assert( std::is_same_v<decltype(stdc_first_leading_one(0UL)), unsigned> );
+ }
+ 
+ void
+ test_first_trailing_zero()
+ {
+   VERIFY( stdc_first_trailing_zero_uc(0) == 1 );
+   VERIFY( stdc_first_trailing_zero_uc(1) == 2 );
+   VERIFY( stdc_first_trailing_zero_uc(7) == 4 );
+   VERIFY( stdc_first_trailing_zero_us(15) == 5 );
+   VERIFY( stdc_first_trailing_zero_ui(15) == 5 );
+   VERIFY( stdc_first_trailing_zero_ul(15) == 5 );
+   VERIFY( stdc_first_trailing_zero_ull(15) == 5 );
+ 
+   VERIFY( stdc_first_trailing_zero(15U) == 5 );
+ 
+   static_assert( std::is_same_v<decltype(stdc_first_trailing_zero(0UL)), unsigned> );
+ }
+ 
+ void
+ test_first_trailing_one()
+ {
+   VERIFY( stdc_first_trailing_one_uc(0) == 0 );
+   VERIFY( stdc_first_trailing_one_uc(1) == 1 );
+   VERIFY( stdc_first_trailing_one_uc(7) == 1 );
+   VERIFY( stdc_first_trailing_one_us(16) == 5 );
+   VERIFY( stdc_first_trailing_one_ui(16) == 5 );
+   VERIFY( stdc_first_trailing_one_ul(16) == 5 );
+   VERIFY( stdc_first_trailing_one_ull(16) == 5 );
+ 
+   VERIFY( stdc_first_trailing_one(16U) == 5 );
+   VERIFY( stdc_first_trailing_one(-1ULL << 17) == 18 );
+ 
+   static_assert( std::is_same_v<decltype(stdc_first_trailing_one(0UL)), unsigned> );
+ }
+ 
+ void
+ test_count_zeros()
+ {
+   VERIFY( stdc_count_zeros_uc(0b101010) == (CHAR_BIT - 3) );
+   VERIFY( stdc_count_zeros_us(0b1010101) == (__SHRT_WIDTH__ - 4) );
+   VERIFY( stdc_count_zeros_ui(0b1010101111) == (__INT_WIDTH__ - 7) );
+   VERIFY( stdc_count_zeros_ul(0b10101011110101) == (__LONG_WIDTH__ - 9) );
+   VERIFY( stdc_count_zeros_ull(0b10101011110101) == (__LONG_LONG_WIDTH__ - 9) );
+ 
+   VERIFY( stdc_count_zeros(0b111UL) == (__LONG_WIDTH__ - 3) );
+   VERIFY( stdc_count_zeros(0U) == __INT_WIDTH__ );
+ 
+   // std::popcount returns signed int, stdc_count_zeros_uc returns unsigned int.
+   static_assert( std::is_same_v<decltype(stdc_count_zeros_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_zeros_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_zeros_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_zeros_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_zeros_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_zeros_uc(0u)), unsigned> );
+ }
+ 
+ void
+ test_count_ones()
+ {
+   VERIFY( stdc_count_ones_uc(0b101010) == 3 );
+   VERIFY( stdc_count_ones_us(0b1010101) == 4 );
+   VERIFY( stdc_count_ones_ui(0b1010101111) == 7 );
+   VERIFY( stdc_count_ones_ul(0b10101011110101) == 9 );
+   VERIFY( stdc_count_ones_ull(0b10101011110101) == 9 );
+ 
+   VERIFY( stdc_count_ones(0b10101011110101U) == 9 );
+   VERIFY( stdc_count_ones(0U) == 0 );
+ 
+   // std::popcount returns signed int, stdc_count_ones_uc returns unsigned int.
+   static_assert( std::is_same_v<decltype(stdc_count_ones_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_ones_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_ones_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_ones_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_ones_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_count_ones_uc(0u)), unsigned> );
+ }
+ 
+ void
+ test_has_single_bit()
+ {
+   VERIFY ( ! stdc_has_single_bit_uc(0) );
+   VERIFY ( ! stdc_has_single_bit_uc(41) );
+   VERIFY ( stdc_has_single_bit_uc(1) );
+   VERIFY ( stdc_has_single_bit_uc(64) );
+   VERIFY ( stdc_has_single_bit_us(1 << 7) );
+   VERIFY ( stdc_has_single_bit_ui(1 << 11) );
+   VERIFY ( stdc_has_single_bit_ul(1 << 14) );
+   VERIFY ( stdc_has_single_bit_ull(1 << 24) );
+ 
+   VERIFY ( stdc_has_single_bit(64U) );
+   VERIFY ( stdc_has_single_bit(128UL) );
+   VERIFY ( ! stdc_has_single_bit(129UL) );
+ }
+ 
+ void
+ test_bit_width()
+ {
+   VERIFY( stdc_bit_width_uc(0) == 0 );
+   VERIFY( stdc_bit_width_uc(7) == 3 );
+   VERIFY( stdc_bit_width_uc(0b10101) == 5 );
+   VERIFY( stdc_bit_width_us(0b101010) == 6 );
+   VERIFY( stdc_bit_width_ui(0b1010101) == 7 );
+   VERIFY( stdc_bit_width_ul(ULONG_MAX) == __LONG_WIDTH__ );
+   VERIFY( stdc_bit_width_ull(ULLONG_MAX >> 2) == (__LONG_LONG_WIDTH__ - 2) );
+ 
+   VERIFY( stdc_bit_width(0b1010101U) == 7U );
+ 
+   // std::bit_width returns signed int, stdc_bit_width returns unsigned int.
+   static_assert( std::is_same_v<decltype(stdc_bit_width_uc(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_bit_width_us(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_bit_width_ui(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_bit_width_ul(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_bit_width_ul(0)), unsigned> );
+   static_assert( std::is_same_v<decltype(stdc_bit_width(0u)), unsigned> );
+ }
+ 
+ void
+ test_bit_floor()
+ {
+   VERIFY( stdc_bit_floor_uc(0) == 0 );
+   VERIFY( stdc_bit_floor_uc(7) == 4 );
+   VERIFY( stdc_bit_floor_uc(0b10101) == 0b10000 );
+   VERIFY( stdc_bit_floor_us(0b101010) == 0b100000 );
+   VERIFY( stdc_bit_floor_ui(0b1010101) == 0b1000000 );
+   VERIFY( stdc_bit_floor_ul(ULONG_MAX) == (1ul << (__LONG_WIDTH__ - 1)) );
+   VERIFY( stdc_bit_floor_ull(1000000) == (1ULL << 19) );
+ 
+   VERIFY( stdc_bit_floor(0b1010101U) == 0b1000000 );
+ }
+ 
+ void
+ test_bit_ceil()
+ {
+   VERIFY( stdc_bit_ceil_uc(0) == 1 );
+   VERIFY( stdc_bit_ceil_uc(1) == 1 );
+   VERIFY( stdc_bit_ceil_uc(2) == 2 );
+   VERIFY( stdc_bit_ceil_uc(3) == 4 );
+   VERIFY( stdc_bit_ceil_us(11) == 16 );
+   VERIFY( stdc_bit_ceil_ui(257) == 512 );
+   VERIFY( stdc_bit_ceil_ul(1048) == 2048 );
+   VERIFY( stdc_bit_ceil_ull(1000000) == (1ULL << 20) );
+ 
+   VERIFY( stdc_bit_ceil(0b1010101U) == 0b10000000 );
+ }
+ 
+ int main()
+ {
+   test_leading_zeros();
+   test_leading_ones();
+   test_trailing_zeros();
+   test_trailing_ones();
+   test_first_leading_zero();
+   test_first_leading_one();
+   test_first_trailing_zero();
+   test_first_trailing_one();
+   test_count_zeros();
+   test_count_ones();
+   test_has_single_bit();
+   test_bit_width();
+   test_bit_floor();
+   test_bit_ceil();
+ }
+ 
+ #include <bit>
+ // The standard doesn't require these values to match,
+ // so this is specific to libstdc++.
+ #ifdef _GLIBCXX_RELEASE
+ static_assert(__STDC_ENDIAN_BIG__    == (int)std::endian::big);
+ static_assert(__STDC_ENDIAN_LITTLE__ == (int)std::endian::little);
+ static_assert(__STDC_ENDIAN_NATIVE__ == (int)std::endian::native);
+ #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/stdbit/2_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/stdbit/2_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/stdbit/2_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/stdbit/2_neg.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,45 ----
+ // { dg-do compile { target c++26 } }
+ 
+ #include <stdbit.h>
+ 
+ void
+ test_mandates()
+ {
+   // Mandates: T is an unsigned integer type.
+ 
+   ::stdc_leading_zeros(1); // { dg-error "here" }
+   ::stdc_leading_ones(1); // { dg-error "here" }
+   ::stdc_trailing_zeros(1); // { dg-error "here" }
+   ::stdc_trailing_ones(1); // { dg-error "here" }
+   ::stdc_first_leading_zero(1); // { dg-error "here" }
+   ::stdc_first_leading_one(1); // { dg-error "here" }
+   ::stdc_first_trailing_zero(1); // { dg-error "here" }
+   ::stdc_first_trailing_one(1); // { dg-error "here" }
+   ::stdc_count_zeros(1); // { dg-error "here" }
+   ::stdc_count_ones(1); // { dg-error "here" }
+   ::stdc_has_single_bit(1); // { dg-error "here" }
+   ::stdc_bit_width(1); // { dg-error "here" }
+   ::stdc_bit_floor(1); // { dg-error "here" }
+   ::stdc_bit_ceil(1); // { dg-error "here" }
+ 
+   ::stdc_leading_zeros(1.0); // { dg-error "here" }
+   ::stdc_leading_ones(1.0); // { dg-error "here" }
+   ::stdc_trailing_zeros(1.0); // { dg-error "here" }
+   ::stdc_trailing_ones(1.0); // { dg-error "here" }
+   ::stdc_first_leading_zero(1.0); // { dg-error "here" }
+   ::stdc_first_leading_one(1.0); // { dg-error "here" }
+   ::stdc_first_trailing_zero(1.0); // { dg-error "here" }
+   ::stdc_first_trailing_one(1.0); // { dg-error "here" }
+   ::stdc_count_zeros(1.0); // { dg-error "here" }
+   ::stdc_count_ones(1.0); // { dg-error "here" }
+   ::stdc_has_single_bit(1.0); // { dg-error "here" }
+   ::stdc_bit_width(1.0); // { dg-error "here" }
+   ::stdc_bit_floor(1.0); // { dg-error "here" }
+   ::stdc_bit_ceil(1.0); // { dg-error "here" }
+ }
+ 
+ // { dg-prune-output "static assertion failed" }
+ // { dg-prune-output "no matching function" }
+ // { dg-prune-output "wrong type" }
+ // { dg-prune-output "invalid operands" }
+ // { dg-prune-output "non-integral type" }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/synchronized_pool_resource/118681.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/synchronized_pool_resource/118681.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/synchronized_pool_resource/118681.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/synchronized_pool_resource/118681.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,6 ----
+ // { dg-do run { target c++17 } }
+ // { dg-require-gthreads "" }
+ // Bug 118681 - unsynchronized_pool_resource may fail to respect alignment
+ 
+ #define RESOURCE std::pmr::synchronized_pool_resource
+ #include "../unsynchronized_pool_resource/118681.cc"
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/system_clock/99832.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/system_clock/99832.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/system_clock/99832.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/system_clock/99832.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,14 ----
+ // { dg-options "-O0 -g0" }
+ // { dg-do compile { target c++20 } }
+ // { dg-final { scan-assembler-not "system_clock9to_time_t" } }
+ 
+ // Bug libstdc++/99832
+ // std::chrono::system_clock::to_time_t needs ABI tag for 32-bit time_t
+ 
+ #include <chrono>
+ 
+ std::time_t
+ test_pr99832(std::chrono::system_clock::time_point t)
+ {
+   return std::chrono::system_clock::to_time_t(t);
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/tuple/cons/121771.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/tuple/cons/121771.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/tuple/cons/121771.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/tuple/cons/121771.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,45 ----
+ // { dg-do compile { target c++17 } }
+ 
+ // Bug 121771 - std::tuple CTAD fails for lvalue reference to function type
+ 
+ #include <tuple>
+ #include <memory>
+ 
+ void func();
+ 
+ std::tuple t(func);
+ std::tuple<void (*)()>& r = t;
+ 
+ struct Explicit {
+     Explicit();
+     explicit Explicit(const Explicit&);
+ } ex;
+ 
+ std::tuple t2(func, 1);
+ std::tuple<void (*)(), int>& r2 = t2;
+ 
+ std::tuple t2x(ex, func);
+ std::tuple<Explicit, void (*)()>& r2x = t2x;
+ 
+ std::tuple t3(1, func, 3);
+ std::tuple<int, void (*)(), int>& r3 = t3;
+ 
+ std::tuple t3x(ex, 2, func);
+ std::tuple<Explicit, int, void (*)()>& r3x = t3x;
+ 
+ std::allocator<int> alloc;
+ 
+ std::tuple ta(std::allocator_arg, alloc, func);
+ std::tuple<void (*)()>& ra = ta;
+ 
+ std::tuple ta2(std::allocator_arg, alloc, func, 1);
+ std::tuple<void (*)(), int>& ra2 = ta2;
+ 
+ std::tuple ta2x(std::allocator_arg, alloc, ex, func);
+ std::tuple<Explicit, void (*)()>& ra2x = ta2x;
+ 
+ std::tuple ta3(std::allocator_arg, alloc, 1, func, 3);
+ std::tuple<int, void (*)(), int>& ra3 = ta3;
+ 
+ std::tuple ta3x(std::allocator_arg, alloc, ex, 2, func);
+ std::tuple<Explicit, int, void (*)()>& ra3x = ta3x;
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/118681.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/118681.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/118681.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/118681.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,58 ----
+ // { dg-do run { target c++17 } }
+ // Bug 118681 - unsynchronized_pool_resource may fail to respect alignment
+ 
+ #include <memory_resource>
+ #include <cstdio>
+ #include <testsuite_hooks.h>
+ 
+ #ifndef RESOURCE
+ # define RESOURCE std::pmr::unsynchronized_pool_resource
+ #endif
+ 
+ bool any_misaligned = false;
+ 
+ bool
+ is_aligned(void* p, [[maybe_unused]] std::size_t size, std::size_t alignment)
+ {
+   const bool misaligned = reinterpret_cast<std::uintptr_t>(p) % alignment;
+ #ifdef DEBUG
+   std::printf("allocate(%2zu, %2zu): %p is aligned %scorrectly\n",
+ 	      size, alignment, p, misaligned ? "in" : "");
+   any_misaligned |= misaligned;
+   return true;
+ #endif
+   return ! misaligned;
+ }
+ 
+ void
+ test_alignment(std::pmr::memory_resource& res, bool dealloc)
+ {
+   for (std::size_t alignment : { 8, 16, 32, 64 })
+   {
+     for (std::size_t size : { 9, 12, 24, 40, 48, 56, 72 })
+     {
+       void* p1 = res.allocate(size, alignment);
+       void* p2 = res.allocate(size, alignment);
+ 
+       VERIFY( is_aligned(p1, size, alignment) );
+       VERIFY( is_aligned(p2, size, alignment) );
+ 
+       if (dealloc)
+       {
+ 	res.deallocate(p1, size, alignment);
+ 	res.deallocate(p2, size, alignment);
+       }
+     }
+   }
+ }
+ 
+ int main()
+ {
+   RESOURCE res;
+   test_alignment(res, true);
+   res.release();
+   test_alignment(res, false);
+   res.release();
+ 
+   VERIFY( ! any_misaligned );
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,33 ----
+ // { dg-do compile { target c++11 } }
+ // { dg-require-effective-target hosted }
+ 
+ #include <memory>
+ #include <testsuite_tr1.h>
+ 
+ using namespace __gnu_test;
+ 
+ void
+ test01()
+ {
+   std::weak_ptr<ClassType> ptr;
+   std::weak_ptr<const ClassType> ptr2 = ptr;
+ 
+ #if __cpp_lib_shared_ptr_arrays >= 201611L
+   std::weak_ptr<ClassType[10]> ptr_array;
+   std::weak_ptr<ClassType[]> ptr_array2 = ptr_array;
+   std::weak_ptr<ClassType const []> ptr_array3 = ptr_array;
+ #endif
+ }
+ 
+ void
+ test02()
+ {
+   std::weak_ptr<IncompleteClass> ptr;
+   std::weak_ptr<const IncompleteClass> ptr2 = ptr;
+ 
+ #if __cpp_lib_shared_ptr_arrays >= 201611L
+   std::weak_ptr<IncompleteClass[10]> ptr_array;
+   std::weak_ptr<IncompleteClass[]> ptr_array2 = ptr_array;
+   std::weak_ptr<IncompleteClass const []> ptr_array3 = ptr_array;
+ #endif
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc	Fri Jun 19 06:51:07 2026
*************** template class std::weak_ptr<int>;
*** 28,30 ****
--- 28,42 ----
  template class std::weak_ptr<void>;
  template class std::weak_ptr<ClassType>;
  template class std::weak_ptr<IncompleteClass>;
+ 
+ #if __cpp_lib_shared_ptr_arrays >= 201611L
+ template class std::weak_ptr<ClassType []>;
+ template class std::weak_ptr<ClassType [42]>;
+ template class std::weak_ptr<ClassType const []>;
+ template class std::weak_ptr<ClassType const [42]>;
+ 
+ template class std::weak_ptr<IncompleteClass []>;
+ template class std::weak_ptr<IncompleteClass [42]>;
+ template class std::weak_ptr<IncompleteClass const []>;
+ template class std::weak_ptr<IncompleteClass const [42]>;
+ #endif
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/123991.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/123991.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/123991.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/123991.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,56 ----
+ // { dg-do run { target c++17 } }
+ 
+ // Bug 123991 - std::string::compare crashes instead of throwing
+ 
+ #include <string>
+ #include <string_view>
+ #include <stdexcept>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_compare_3arg()
+ {
+   std::string_view sv;
+   std::string s;
+   static_assert( ! noexcept(s.compare(0, 0, sv)) );
+ #ifdef __cpp_exceptions
+   try
+   {
+     (void) s.compare(1, 0, sv);
+     VERIFY(false);
+   }
+   catch (const std::out_of_range&)
+   { }
+ #endif
+ }
+ 
+ void
+ test_compare_5arg()
+ {
+   std::string_view sv;
+   std::string s;
+   static_assert( ! noexcept(s.compare(0, 0, sv, 0, 0)) );
+ #ifdef __cpp_exceptions
+   try
+   {
+     (void) s.compare(1, 0, sv, 0, 0);
+     VERIFY(false);
+   }
+   catch (const std::out_of_range&)
+   { }
+ 
+   try
+   {
+     (void) s.compare(0, 0, sv, 1, 0);
+     VERIFY(false);
+   }
+   catch (const std::out_of_range&)
+   { }
+ #endif
+ }
+ 
+ int main()
+ {
+   test_compare_3arg();
+   test_compare_5arg();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/123991.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/123991.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/123991.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/123991.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,56 ----
+ // { dg-do run { target c++17 } }
+ 
+ // Bug 123991 - std::string::compare crashes instead of throwing
+ 
+ #include <string>
+ #include <string_view>
+ #include <stdexcept>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_compare_3arg()
+ {
+   std::wstring_view sv;
+   std::wstring s;
+   static_assert( ! noexcept(s.compare(0, 0, sv)) );
+ #ifdef __cpp_exceptions
+   try
+   {
+     (void) s.compare(1, 0, sv);
+     VERIFY(false);
+   }
+   catch (const std::out_of_range&)
+   { }
+ #endif
+ }
+ 
+ void
+ test_compare_5arg()
+ {
+   std::wstring_view sv;
+   std::wstring s;
+   static_assert( ! noexcept(s.compare(0, 0, sv, 0, 0)) );
+ #ifdef __cpp_exceptions
+   try
+   {
+     (void) s.compare(1, 0, sv, 0, 0);
+     VERIFY(false);
+   }
+   catch (const std::out_of_range&)
+   { }
+ 
+   try
+   {
+     (void) s.compare(0, 0, sv, 1, 0);
+     VERIFY(false);
+   }
+   catch (const std::out_of_range&)
+   { }
+ #endif
+ }
+ 
+ int main()
+ {
+   test_compare_3arg();
+   test_compare_5arg();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/105857.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/105857.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/105857.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/105857.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,21 ----
+ // { dg-do run }
+ 
+ // Bug libstdc++/105857 codecvt::do_length causes unexpected buffer overflow
+ 
+ #include <locale>
+ #include <testsuite_hooks.h>
+ 
+ int main()
+ {
+   std::string s(1050, 'a');
+   typedef std::codecvt<wchar_t, char, std::mbstate_t> Cvt;
+   const Cvt& cvt = std::use_facet<Cvt>(std::locale());
+   const char* from = s.c_str();
+   const char* from_end = s.c_str() + s.size();
+   std::size_t max = std::size_t(-1) / 4 + 2;
+   std::mbstate_t state = std::mbstate_t();
+   int n = cvt.length(state, from, from_end, max);
+   VERIFY( n == s.size() );
+   n = cvt.length(state, from, from_end, 2);
+   VERIFY( n == 2 );
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do compile { target c++11 } }
+ 
+ // Bug 122661 - Incorrect value category handling in forward_list::assign
+ 
+ #include <forward_list>
+ 
+ struct S
+ {
+   S();
+   S& operator=(S const&) & = delete;
+   S& operator=(S const&) &&;
+ };
+ 
+ void
+ test_pr122661()
+ {
+   std::forward_list<S> fl;
+   S* iter = nullptr;
+   fl.assign(iter, iter);
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/priority_queue/118088.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/priority_queue/118088.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/priority_queue/118088.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/priority_queue/118088.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,83 ----
+ // { dg-do run { target c++11 } }
+ 
+ #include <queue>
+ #include <vector>
+ #include <testsuite_hooks.h>
+ 
+ template<typename T, typename Seq>
+ bool
+ check(std::priority_queue<T, Seq>& p)
+ {
+   if (!p.empty())
+     {
+       T prev = p.top();
+       p.pop();
+       while (!p.empty())
+ 	{
+ 	  if ( prev < p.top() )
+ 	    return false;
+ 	  prev = p.top();
+ 	  p.pop();
+ 	}
+     }
+   return true;
+ }
+ 
+ // A vector-like type that has a non-empty moved-from state.
+ struct Vector : std::vector<int>
+ {
+   using Base = std::vector<int>;
+ 
+   using Base::Base;
+ 
+   Vector(const Vector&) = default;
+   Vector& operator=(const Vector&) = default;
+ 
+   Vector(Vector&& v) : Base(static_cast<const Base&>(v))
+   {
+     invalidate_heap(v);
+   }
+ 
+   Vector(Vector&& v, const std::allocator<int>&)
+   : Base(static_cast<const Base&>(v))
+   {
+     invalidate_heap(v);
+   }
+ 
+   Vector&
+   operator=(Vector&& v)
+   {
+     static_cast<Base&>(*this) = static_cast<const Base&>(v);
+     invalidate_heap(v);
+     return *this;
+   }
+ 
+   void invalidate_heap(Base& v) { v = {1,2,3}; }
+ };
+ 
+ void
+ test_moves()
+ {
+   std::priority_queue<int, Vector> p;
+   p.push(1);
+   p.push(3);
+   p.push(5);
+   p.push(2);
+   p.push(2);
+   p.push(2);
+   p.push(2);
+   std::priority_queue<int, Vector> p2 = std::move(p);
+   VERIFY( check(p) );
+ 
+   // Allocator-extended move constructor:
+   std::priority_queue<int, Vector> p3(std::move(p2), std::allocator<int>());
+   VERIFY( check(p2) );
+ 
+   p2 = std::move(p3);
+   VERIFY( check(p3) );
+ }
+ 
+ int main()
+ {
+   test_moves();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/unordered_set/pr115285.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/unordered_set/pr115285.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/unordered_set/pr115285.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/unordered_set/pr115285.cc	Fri Jun 19 06:51:07 2026
***************
*** 2,9 ****
  
  // libstdc++/115285
  
- #include <string>
  #include <unordered_set>
  
  #include <testsuite_hooks.h>
  
--- 2,10 ----
  
  // libstdc++/115285
  
  #include <unordered_set>
+ #include <string>
+ #include <vector>
  
  #include <testsuite_hooks.h>
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc	Fri Jun 19 06:51:07 2026
*************** test02()
*** 43,53 ****
    std::vector<PrivateDtor> v;
  }
  
! // { dg-error "value type is destructible" "" { target *-*-* } 0 }
  
  // In Debug Mode the "required from here" errors come from <debug/vector>
  // { dg-error "required from here" "" { target *-*-* } 180 }
- 
- // Needed because of PR c++/92193
- // { dg-prune-output "deleted function" }
- // { dg-prune-output "private within this context" }
--- 43,50 ----
    std::vector<PrivateDtor> v;
  }
  
! // { dg-error "deleted function .*DeletedDtor" "" { target *-*-* } 0 }
! // { dg-error "PrivateDtor.* is private" "" { target *-*-* } 0 }
  
  // In Debug Mode the "required from here" errors come from <debug/vector>
  // { dg-error "required from here" "" { target *-*-* } 180 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc	Fri Jun 19 06:51:07 2026
*************** test02()
*** 42,49 ****
    std::vector<PrivateDtor> v; // { dg-error "here" }
  }
  
! // { dg-error "value type is destructible" "" { target *-*-* } 0 }
! 
! // Needed because of PR c++/92193
! // { dg-prune-output "deleted function" }
! // { dg-prune-output "private within this context" }
--- 42,46 ----
    std::vector<PrivateDtor> v; // { dg-error "here" }
  }
  
! // { dg-error "deleted function .*DeletedDtor" "" { target *-*-* } 0 }
! // { dg-error "PrivateDtor.* is private" "" { target *-*-* } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc	Fri Jun 19 06:51:07 2026
*************** test05()
*** 109,117 ****
    // when it doesn't reallocate the buffer.
    VERIFY(copycounter::copycount == 20 + 1);
    a.insert(a.end(), 50, c);
!   VERIFY(copycounter::copycount == 70 + 2);
    a.insert(a.begin() + 50, 100, c);
!   VERIFY(copycounter::copycount == 170 + 3);
  }
  
  
--- 109,119 ----
    // when it doesn't reallocate the buffer.
    VERIFY(copycounter::copycount == 20 + 1);
    a.insert(a.end(), 50, c);
!   // expect when inserting at the end (appending), where existing
!   // elements are not modified
!   VERIFY(copycounter::copycount == 70 + 1);
    a.insert(a.begin() + 50, 100, c);
!   VERIFY(copycounter::copycount == 170 + 2);
  }
  
  
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/resize.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/modifiers/resize.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/resize.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/23_containers/vector/modifiers/resize.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,69 ----
+ // { dg-do run }
+ 
+ #include <vector>
+ #include <testsuite_hooks.h>
+ 
+ struct NoAssign
+ {
+   NoAssign(int p) : val(p) {}
+   const int val;
+ };
+ 
+ struct PrivateAssign
+ {
+   PrivateAssign(int p) : val(p) {}
+   PrivateAssign(const PrivateAssign& rhs) : val(rhs.val) {}
+ 
+   int val;
+ 
+ private:
+   PrivateAssign& operator=(const PrivateAssign&);
+ };
+ 
+ #if __cplusplus >= 201102L
+ struct DeletedAssign
+ {
+   DeletedAssign(int p) : val(p) {}
+   DeletedAssign(const DeletedAssign& rhs) : val(rhs.val) {}
+ 
+   DeletedAssign& operator=(const DeletedAssign&) = delete;
+ 
+   int val;
+ };
+ #endif
+ 
+ template<typename T>
+ void
+ testPR90129()
+ {
+   std::vector<T> v;
+   v.resize(5, T(5));
+   VERIFY( v.size() == 5 );
+   VERIFY( v.front().val == 5 );
+   VERIFY( v.back().val == 5 );
+ 
+   v.resize(10, T(10));
+   VERIFY( v.size() == 10 );
+   VERIFY( v.front().val == 5 );
+   VERIFY( v.back().val == 10 );
+ 
+   v.resize(7, T(7));
+   VERIFY( v.size() == 7 );
+   VERIFY( v.front().val == 5 );
+   VERIFY( v.back().val == 10 );
+ 
+   v.resize(3, T(3));
+   VERIFY( v.size() == 3 );
+   VERIFY( v.front().val == 5 );
+   VERIFY( v.back().val == 5 );
+ }
+ 
+ int main()
+ {
+   testPR90129<NoAssign>();
+   testPR90129<PrivateAssign>();
+ #if __cplusplus >= 201102L
+   testPR90129<DeletedAssign>();
+ #endif
+   return 0;
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc	Fri Jun 19 06:51:07 2026
*************** test01()
*** 42,53 ****
      }
  }
  
! template<class Range, bool Const>
  void
  test02()
  {
    if constexpr (Const)
      {
        static_assert( ranges::constant_range<Range> );
        static_assert( std::same_as<ranges::const_iterator_t<Range>, ranges::iterator_t<Range>> );
        static_assert( std::same_as<ranges::const_sentinel_t<Range>, ranges::sentinel_t<Range>> );
--- 42,54 ----
      }
  }
  
! template<class Range, bool Const, bool Constable = Const>
  void
  test02()
  {
    if constexpr (Const)
      {
+       static_assert(Constable);
        static_assert( ranges::constant_range<Range> );
        static_assert( std::same_as<ranges::const_iterator_t<Range>, ranges::iterator_t<Range>> );
        static_assert( std::same_as<ranges::const_sentinel_t<Range>, ranges::sentinel_t<Range>> );
*************** test02()
*** 64,72 ****
        static_assert( !ranges::constant_range<Range> );
        using Wrapped = std::basic_const_iterator<ranges::iterator_t<Range>>;
  
!       static_assert( std::same_as<ranges::const_iterator_t<Range>, Wrapped> );
!       if constexpr (ranges::common_range<Range>)
! 	static_assert( std::same_as<ranges::const_sentinel_t<Range>, Wrapped> );
        static_assert( std::same_as<ranges::range_const_reference_t<Range>,
  				 std::iter_reference_t<Wrapped>> );
  
--- 65,85 ----
        static_assert( !ranges::constant_range<Range> );
        using Wrapped = std::basic_const_iterator<ranges::iterator_t<Range>>;
  
!       if constexpr (Constable)
! 	{
! 	  // Verify LWG 3946 changes to const_iterator/sentinel_t (PR122842).
! 	  static_assert( std::same_as<ranges::const_iterator_t<Range>,
! 				      ranges::iterator_t<const Range>> );
! 	  static_assert( std::same_as<ranges::const_sentinel_t<Range>,
! 				      ranges::sentinel_t<const Range>> );
! 	}
!       else
! 	{
! 	  static_assert( std::same_as<ranges::const_iterator_t<Range>, Wrapped> );
! 	  if constexpr (ranges::common_range<Range>)
! 	    static_assert( std::same_as<ranges::const_sentinel_t<Range>, Wrapped> );
! 	}
! 
        static_assert( std::same_as<ranges::range_const_reference_t<Range>,
  				 std::iter_reference_t<Wrapped>> );
  
*************** main()
*** 138,150 ****
    test01<std::string_view::iterator, true>();
    test01<std::vector<bool>::const_iterator, true>();
  
!   test02<int[42], false>();
    test02<test_input_range<int>, false>();
    test02<test_forward_range<int>, false>();
    test02<test_bidirectional_range<int>, false>();
    test02<test_random_access_range<int>, false>();
!   test02<std::array<int, 3>, false>();
!   test02<std::vector<bool>, false>();
  
    test02<const int[42], true>();
    test02<test_input_range<const int>, true>();
--- 151,164 ----
    test01<std::string_view::iterator, true>();
    test01<std::vector<bool>::const_iterator, true>();
  
!   test02<int[42], false, true>();
    test02<test_input_range<int>, false>();
    test02<test_forward_range<int>, false>();
    test02<test_bidirectional_range<int>, false>();
    test02<test_random_access_range<int>, false>();
!   test02<std::array<int, 3>, false, true>();
!   test02<std::vector<bool>, false, true>();
!   test02<std::string, false, true>();
  
    test02<const int[42], true>();
    test02<test_input_range<const int>, true>();
*************** main()
*** 155,160 ****
--- 169,175 ----
    test02<const std::array<int, 3>, true>();
    test02<std::string_view, true>();
    test02<const std::vector<bool>, true>();
+   test02<const std::string, true>();
  
    test03();
    test04();
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-compile }
+ // { dg-additional-options "-Wnull-dereference" }
+ // { dg-add-options no_pch }
+ 
+ #include <string>
+ #include <sstream>
+ 
+ int main()
+ {
+   std::istringstream in("Hello, world");
+   std::istreambuf_iterator<char> it(in), end;
+   std::string ss(it, end);
+   return 0;
+ }
+ 
+ // { dg-bogus "null pointer dereference" "" { target *-*-* } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-do compile { target c++11 } }
+ 
+ // PR libstdc++/122062
+ // piecewise_linear_distribution(firstB, lastB, firstW) invokes comma operator
+ 
+ #include <random>
+ #include <testsuite_iterators.h>
+ 
+ void
+ test_pr122062()
+ {
+   double b[1]{};
+   double w[1]{};
+   __gnu_test::random_access_container<double> B(b), W(w);
+   std::piecewise_linear_distribution<double> p(B.begin(), B.end(), W.begin());
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/26_numerics/stdckdint/1.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/26_numerics/stdckdint/1.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/26_numerics/stdckdint/1.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/26_numerics/stdckdint/1.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,63 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <stdckdint.h>
+ 
+ #if __STDC_VERSION_STDCKDINT_H__ != 202311L
+ # error "__STDC_VERSION_STDCKDINT_H__ not defined correctly in <stdckdint.h>"
+ #endif
+ 
+ #include <limits.h>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_add()
+ {
+   int result;
+   bool overflow;
+ 
+   overflow = ::ckd_add(&result, (unsigned)INT_MAX, 1LL);
+   VERIFY( overflow );
+   VERIFY( result == INT_MIN );
+ 
+   overflow = ::ckd_add(&result, (long long)INT_MIN, -1);
+   VERIFY( overflow );
+   VERIFY( result == INT_MAX );
+ 
+   overflow = ::ckd_add(&result, 99u, 100ll);
+   VERIFY( ! overflow );
+   VERIFY( result == 199 );
+ }
+ 
+ void
+ test_sub()
+ {
+   int result;
+   bool overflow;
+ 
+   overflow = ::ckd_sub(&result, -1, -5);
+   VERIFY( ! overflow );
+   VERIFY( result == 4 );
+ }
+ 
+ void
+ test_mul()
+ {
+   long long result;
+   bool overflow;
+ 
+   overflow = ::ckd_mul(&result, INT_MIN, -1);
+   VERIFY( ! overflow );
+   VERIFY( result == -(long long)INT_MIN );
+ 
+   unsigned uresult;
+   overflow = ::ckd_mul(&uresult, INT_MIN, -1);
+   VERIFY( ! overflow );
+   VERIFY( result == (unsigned)INT_MAX + 1u );
+ }
+ 
+ int main()
+ {
+   test_add();
+   test_sub();
+   test_mul();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/26_numerics/stdckdint/2_neg.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/26_numerics/stdckdint/2_neg.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/26_numerics/stdckdint/2_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/26_numerics/stdckdint/2_neg.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,39 ----
+ // { dg-do compile { target c++26 } }
+ 
+ #include <stdckdint.h>
+ 
+ void
+ test_add(int i, char c, bool b)
+ {
+   ::ckd_add(&i, c, 1); // { dg-error "here" }
+   ::ckd_add(&i, 1, c); // { dg-error "here" }
+   ::ckd_add(&i, b, 2); // { dg-error "here" }
+   ::ckd_add(&i, 2, b); // { dg-error "here" }
+   ::ckd_add(&c, 3, 3); // { dg-error "here" }
+   ::ckd_add((const int*)&i, 4, 4); // { dg-error "here" }
+ }
+ 
+ void
+ test_sub(int i, char c, bool b)
+ {
+   ::ckd_sub(&i, c, 1); // { dg-error "here" }
+   ::ckd_sub(&i, 1, c); // { dg-error "here" }
+   ::ckd_sub(&i, b, 2); // { dg-error "here" }
+   ::ckd_sub(&i, 2, b); // { dg-error "here" }
+   ::ckd_sub(&c, 3, 3); // { dg-error "here" }
+   ::ckd_sub((const int*)&i, 4, 4); // { dg-error "here" }
+ }
+ 
+ void
+ test_mul(int i, char c, bool b)
+ {
+   ::ckd_mul(&i, c, 1); // { dg-error "here" }
+   ::ckd_mul(&i, 1, c); // { dg-error "here" }
+   ::ckd_mul(&i, b, 2); // { dg-error "here" }
+   ::ckd_mul(&i, 2, b); // { dg-error "here" }
+   ::ckd_mul(&c, 3, 3); // { dg-error "here" }
+   ::ckd_mul((const int*)&i, 4, 4); // { dg-error "here" }
+ }
+ 
+ // { dg-prune-output "static assertion failed" }
+ // { dg-prune-output "pointer to 'const'" }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/123100.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/123100.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/123100.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/123100.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,58 ----
+ // { dg-do run }
+ 
+ #include <sstream>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test01()
+ {
+   const int n = 20;
+   const char data[n] = "abcde";
+   char buf[n] = "0123456789";
+   std::string expected("abcde56789\0\0\0\0\0\0\0\0\0\0", n);
+ 
+   std::ostringstream out;
+   out.rdbuf()->pubsetbuf(buf, n);
+   out << data;
+   VERIFY( out.str() == expected );
+   VERIFY( out.str() == expected );
+ #if __cplusplus >= 201103L
+   VERIFY( std::move(out).str() == expected );
+ #if __cplusplus >= 202002L && _GLIBCXX_USE_CXX11_ABI
+   expected.clear();
+ #endif
+   VERIFY( out.str() == expected );
+   VERIFY( std::move(out).str() == expected );
+ #endif
+ }
+ 
+ void
+ test02()
+ {
+   const int n = 20;
+   const char data[n] = "abcde";
+   char buf[n] = "0123456789";
+   std::string expected("abcde56789\0\0\0\0\0\0\0\0\0\0", n);
+ 
+   std::ostringstream out;
+   out << std::string(n * 2, 'a');
+   VERIFY( out.str() == std::string(n * 2, 'a') );
+   out.rdbuf()->pubsetbuf(buf, n);
+   out << data; // writes 6 chars
+   VERIFY( out.str() == expected );
+   VERIFY( out.str() == expected );
+ #if __cplusplus >= 201103L
+   VERIFY( std::move(out).str() == expected );
+ #if __cplusplus >= 202002L && _GLIBCXX_USE_CXX11_ABI
+   expected.clear();
+ #endif
+   VERIFY( out.str() == expected );
+   VERIFY( std::move(out).str() == expected );
+ #endif
+ }
+ 
+ int main()
+ {
+   test01();
+   test02();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc	Fri Jun 19 06:51:07 2026
*************** test_directories()
*** 170,179 ****
--- 170,189 ----
    fs::remove_all(dir, ec);
  }
  
+ void
+ test_pr122726()
+ {
+   std::error_code ec;
+   const auto nonesuch = __gnu_test::nonexistent_path();
+   fs::rename(nonesuch, "new-name", ec);
+   VERIFY( ec == std::make_error_code(std::errc::no_such_file_or_directory) );
+ }
+ 
  int
  main()
  {
    test01();
    test_symlinks();
    test_directories();
+   test_pr122726();
  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,72 ----
+ // { dg-do run { target c++17 } }
+ 
+ // Bug libstdc++/120029
+ // Dangling iterator usage in path::operator+=(const path& p) when this == p
+ 
+ #include <filesystem>
+ #include <testsuite_hooks.h>
+ 
+ namespace fs = std::filesystem;
+ 
+ void
+ test_root_dir()
+ {
+   fs::path p = "/";
+   p += p;
+   p += p;
+   VERIFY( p == "////" );
+   p += p.filename();
+   VERIFY( p == "////" );
+   p += *std::prev(p.end());
+   VERIFY( p == "////" );
+ }
+ 
+ void
+ test_root_name()
+ {
+   fs::path p = "C:/";
+   p += p;
+   p += p;
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += p.filename();
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += *std::prev(p.end());
+   VERIFY( p == "C:/C:/C:/C:/" );
+ }
+ 
+ void
+ test_filename()
+ {
+   fs::path p = "file";
+   p += p;
+   p += p;
+   VERIFY( p == "filefilefilefile" );
+   p += p.filename();
+   VERIFY( p == "filefilefilefilefilefilefilefile" );
+   p += *std::prev(p.end());
+   VERIFY( p == "filefilefilefilefilefilefilefilefilefilefilefilefilefilefilefile" );
+ }
+ 
+ void
+ test_multi()
+ {
+   fs::path p = "/home/username/Documents/mu";
+   p += p;
+   p += p;
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu" );
+   p += p.filename();
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumu" );
+   p += *std::prev(p.end());
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumumumu" );
+   auto n = std::distance(p.begin(), p.end());
+   for (int i = 0; i < n; ++i)
+     p += *std::next(p.begin(), i);
+ }
+ 
+ int main()
+ {
+   test_root_dir();
+   test_root_name();
+   test_filename();
+   test_multi();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc	Fri Jun 19 06:51:07 2026
***************
*** 1,4 ****
! // { dg-do run { target c++20 } }
  // { dg-require-atomic-cmpxchg-word "" }
  // { dg-add-options libatomic }
  // { dg-additional-options "-fno-tree-sra" }
--- 1,4 ----
! // { dg-do run { target c++11 } }
  // { dg-require-atomic-cmpxchg-word "" }
  // { dg-add-options libatomic }
  // { dg-additional-options "-fno-tree-sra" }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic/cons/zero_padding.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic/cons/zero_padding.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic/cons/zero_padding.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic/cons/zero_padding.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,75 ----
+ // { dg-do run { target c++11 } }
+ // { dg-require-atomic-cmpxchg-word "" }
+ // { dg-add-options libatomic }
+ 
+ #include <atomic>
+ #include <cstring>
+ #include <testsuite_hooks.h>
+ 
+ struct TailPadding { short i; char c; };
+ TailPadding ztail{1, 2}; // zeroed-padding
+ constexpr std::atomic<TailPadding> ctail(TailPadding{1,2});
+ std::atomic<TailPadding> gtail(TailPadding{1,2});
+ 
+ struct MidPadding { char c; short i; };
+ MidPadding zmid{1, 2}; // zeroed-padding
+ constexpr std::atomic<MidPadding> cmid(MidPadding{1,2});
+ std::atomic<MidPadding> gmid(MidPadding{1,2});
+ 
+ struct BitPadding { int : 4; int i : 5; int : 4; int j : 5; int : 4;  };
+ BitPadding zbit{1, 2}; // zeroed-padding
+ constexpr std::atomic<BitPadding> cbit(BitPadding{1,2});
+ std::atomic<BitPadding> gbit(BitPadding{1,2});
+ 
+ struct Ctor
+ {
+   Ctor() = default;
+ 
+   constexpr Ctor(char pc, short pi)
+     : c(pc), i(pi)
+   {}
+ 
+   char c;
+   short i;
+ };
+ 
+ Ctor zctor{1, 2}; // zeroed-padding
+ constexpr std::atomic<Ctor> cctor(Ctor{1,2});
+ std::atomic<Ctor> gctor(Ctor{1,2});
+ 
+ template<typename T>
+ void test_struct(std::atomic<T>& g, const T& zp)
+ {
+   T const d{3, 4};
+   T t;
+ 
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( g.compare_exchange_strong(t, d) );
+ 
+   static std::atomic<T> st(T{1, 2});
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( st.compare_exchange_strong(t, d) );
+ 
+   thread_local std::atomic<T> tl(T{1, 2});
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( tl.compare_exchange_strong(t, d) );
+ 
+   std::atomic<T> l(T{1, 2});
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( l.compare_exchange_strong(t, d) );
+ 
+   std::atomic<T>* h = new std::atomic<T>(T{1, 2});
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( h->compare_exchange_strong(t, d) );
+   delete h;
+ 
+   constexpr std::atomic<T> cl(T{1, 2});
+ }
+ 
+ int main()
+ {
+   test_struct(gtail, ztail);
+   test_struct(gmid, zmid);
+   test_struct(gbit, zbit);
+   test_struct(gctor, zctor);
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc	Fri Jun 19 06:51:07 2026
***************
*** 1,6 ****
--- 1,7 ----
  // { dg-do run { target { c++11_only || c++14_only } } }
  // { dg-require-atomic-builtins "" }
  // { dg-require-effective-target hosted }
+ // { dg-additional-options "-Wsystem-headers" }
  
  // Copyright (C) 2012-2024 Free Software Foundation, Inc.
  //
*************** int main(void)
*** 68,70 ****
--- 69,72 ----
  
    return 0;
  }
+ // { dg-warning "invalid application of 'sizeof' to a void type" "" { target *-*-* } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic_float/zero_padding.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic_float/zero_padding.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/29_atomics/atomic_float/zero_padding.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/29_atomics/atomic_float/zero_padding.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,45 ----
+ // { dg-do run { target c++20 } }
+ // { dg-require-effective-target libatomic_available }
+ // { dg-additional-options "[atomic_link_flags [get_multilibs]] -latomic" }
+ 
+ #include <atomic>
+ #include <cstring>
+ #include <testsuite_hooks.h>
+ 
+ long double zld(10.5);
+ constexpr std::atomic<long double> cld(10.5);
+ std::atomic<long double> gld(10.5);
+ 
+ template<typename T>
+ void test_floating(std::atomic<T>& g, const T& zp)
+ {
+   T const d = T(7.5);
+   T t;
+ 
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( g.compare_exchange_strong(t, d) );
+ 
+   static std::atomic<T> st(T(10.5));
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( st.compare_exchange_strong(t, d) );
+ 
+   thread_local std::atomic<T> tl(T(10.5));
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( tl.compare_exchange_strong(t, d) );
+ 
+   std::atomic<T> l(T(10.5));
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( l.compare_exchange_strong(t, d) );
+ 
+   std::atomic<T>* h = new std::atomic<T>(T(10.5));
+   std::memcpy(&t, &zp, sizeof(T));
+   VERIFY( h->compare_exchange_strong(t, d) );
+   delete h;
+ 
+   constexpr std::atomic<T> cl(T(10.5));
+ }
+ 
+ int main()
+ {
+   test_floating(gld, zld);
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc	Fri Jun 19 06:51:07 2026
***************
*** 1,4 ****
--- 1,5 ----
  // { dg-do compile { target c++11 } }
+ // { dg-additional-options "-Wsystem-headers" }
  #include <future>
  
  // C++20 [futures.task.members]
***************
*** 7,12 ****
--- 8,14 ----
  int f();
  std::packaged_task<const int&()> task(f);
  // { dg-error "dangling reference" "" { target { c++14_down } } 0 }
+ // { dg-error "reference to temporary" "" { target { c++14_down } } 0 }
  // { dg-error "no matching function" "" { target c++17 } 0 }
  // { dg-error "enable_if" "" { target c++17 } 0 }
  // { dg-error "static assertion failed" "" { target c++17 } 0 }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,14 ----
+ // { dg-do compile { target { { i?86-*-linux* x86_64-*-linux* } && lp64 } } }
+ // { dg-require-effective-target c++11 }
+ // { dg-options "-fsanitize=thread" }
+ 
+ // PR libstdc++/121496 no member named '_M_clocklock' with -fsanitize=thread
+ 
+ #include <mutex>
+ #include <chrono>
+ 
+ void
+ test_pr121496(std::timed_mutex& m)
+ {
+   (void) m.try_lock_until(std::chrono::steady_clock::time_point{});
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc	Fri Jun 19 06:51:07 2026
*************** int main()
*** 39,88 ****
  
    int buckets;
  
-   // For C++11 and later add 1 to all counts, because the std::vector used
-   // internally by the hashtable creates and destroys a temporary object
-   // using its allocator.
-   const int extra = __cplusplus >= 201102L ? 1 : 0;
- 
    tracker_allocator_counter::reset();
    {
      Container c;
      buckets = c.bucket_count();
!     ok = check_construct_destroy("empty container", buckets+extra, extra) && ok;
    }
!   ok = check_construct_destroy("empty container", buckets+extra, buckets+extra) && ok;
  
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
!     ok = check_construct_destroy("Construct from range", buckets+10+extra, extra) && ok;
    }
!   ok = check_construct_destroy("Construct from range", buckets+10+extra, buckets+10+extra) && ok;
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
      c.insert(arr10a[0]);
!     ok = check_construct_destroy("Insert element", buckets+11+extra, extra) && ok;
    }
!   ok = check_construct_destroy("Insert element", buckets+11+extra, buckets+11+extra) && ok;
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
      c.insert(arr10a, arr10a+3);
!     ok = check_construct_destroy("Insert short range", buckets+13+extra, extra) && ok;
    }
!   ok = check_construct_destroy("Insert short range", buckets+13+extra, buckets+13+extra) && ok;
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
      c.insert(arr10a, arr10a+10);
!     ok = check_construct_destroy("Insert long range", buckets+20+extra, extra) && ok;
    }
!   ok = check_construct_destroy("Insert long range", buckets+20+extra, buckets+20+extra) && ok;
  
    return ok ? 0 : 1;
  }
--- 39,83 ----
  
    int buckets;
  
    tracker_allocator_counter::reset();
    {
      Container c;
      buckets = c.bucket_count();
!     ok = check_construct_destroy("empty container", buckets, 0) && ok;
    }
!   ok = check_construct_destroy("empty container", buckets, buckets) && ok;
  
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
!     ok = check_construct_destroy("Construct from range", buckets+10, 0) && ok;
    }
!   ok = check_construct_destroy("Construct from range", buckets+10, buckets+10) && ok;
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
      c.insert(arr10a[0]);
!     ok = check_construct_destroy("Insert element", buckets+11, 0) && ok;
    }
!   ok = check_construct_destroy("Insert element", buckets+11, buckets+11) && ok;
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
      c.insert(arr10a, arr10a+3);
!     ok = check_construct_destroy("Insert short range", buckets+13, 0) && ok;
    }
!   ok = check_construct_destroy("Insert short range", buckets+13, buckets+13) && ok;
  
    tracker_allocator_counter::reset();
    {
      Container c(arr10, arr10 + 10);
      c.insert(arr10a, arr10a+10);
!     ok = check_construct_destroy("Insert long range", buckets+20, 0) && ok;
    }
!   ok = check_construct_destroy("Insert long range", buckets+20, buckets+20) && ok;
  
    return ok ? 0 : 1;
  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,74 ----
+ // { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
+ // { dg-do run { target c++11 } }
+ // { dg-require-filesystem-ts "" }
+ 
+ // Bug libstdc++/120029
+ // Dangling iterator usage in path::operator+=(const path& p) when this == p
+ 
+ #include <experimental/filesystem>
+ #include <testsuite_hooks.h>
+ 
+ namespace fs = std::experimental::filesystem;
+ 
+ void
+ test_root_dir()
+ {
+   fs::path p = "/";
+   p += p;
+   p += p;
+   VERIFY( p == "////" );
+   p += p.filename();
+   VERIFY( p == "////////" );
+   p += *std::prev(p.end());
+   VERIFY( p == "////////////////" );
+ }
+ 
+ void
+ test_root_name()
+ {
+   fs::path p = "C:/";
+   p += p;
+   p += p;
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += p.filename(); // For Filesystem TS the filename is "."
+   VERIFY( p == "C:/C:/C:/C:/." );
+   p += *std::prev(p.end());
+   VERIFY( p == "C:/C:/C:/C:/.." );
+ }
+ 
+ void
+ test_filename()
+ {
+   fs::path p = "file";
+   p += p;
+   p += p;
+   VERIFY( p == "filefilefilefile" );
+   p += p.filename();
+   VERIFY( p == "filefilefilefilefilefilefilefile" );
+   p += *std::prev(p.end());
+   VERIFY( p == "filefilefilefilefilefilefilefilefilefilefilefilefilefilefilefile" );
+ }
+ 
+ void
+ test_multi()
+ {
+   fs::path p = "/home/username/Documents/mu";
+   p += p;
+   p += p;
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu" );
+   p += p.filename();
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumu" );
+   p += *std::prev(p.end());
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumumumu" );
+   auto n = std::distance(p.begin(), p.end());
+   for (int i = 0; i < n; ++i)
+     p += *std::next(p.begin(), i);
+ }
+ 
+ int main()
+ {
+   test_root_dir();
+   test_root_name();
+   test_filename();
+   test_multi();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/format/functions/format.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/format/functions/format.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/format/functions/format.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/format/functions/format.cc	Fri Jun 19 06:51:07 2026
*************** test_locale()
*** 256,261 ****
--- 256,271 ----
    s = std::format(eloc, "{0:Le} {0:Lf} {0:Lg}", -nan);
    VERIFY( s == "-nan -nan -nan" );
  
+   // PR libstdc++/120548 format confuses a negative sign for a thousands digit
+   s = std::format(bloc, "{:L}", -123.45);
+   VERIFY( s == "-123.45" );
+   s = std::format(bloc, "{:-L}", -876543.21);
+   VERIFY( s == "-876,543.21" );
+   s = std::format(bloc, "{:+L}", 333.22);
+   VERIFY( s == "+333.22" );
+   s = std::format(bloc, "{: L}", 999.44);
+   VERIFY( s == " 999.44" );
+ 
    // Restore
    std::locale::global(cloc);
  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/file/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/file/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/file/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/file/io.cc	Fri Jun 19 06:51:07 2026
*************** test_format()
*** 32,37 ****
--- 32,45 ----
    auto ft = clock_cast<file_clock>(sys_days(2024y/January/21)) + 0ms + 2.5s;
    s = std::format("{}", ft);
    VERIFY( s == "2024-01-21 00:00:02.500");
+ 
+   const std::chrono::file_time<std::chrono::seconds> t0{};
+   s = std::format("{:%Z %z %Ez %Oz}", t0);
+   VERIFY( s == "UTC +0000 +00:00 +00:00" );
+ 
+   s = std::format("{}", t0);
+   // chrono::file_clock epoch is unspecified, so this is libstdc++-specific.
+   VERIFY( s == "2174-01-01 00:00:00" );
  }
  
  void
*************** test_parse()
*** 49,54 ****
--- 57,77 ----
    VERIFY( tp == clock_cast<file_clock>(expected) );
    VERIFY( abbrev == "BST" );
    VERIFY( offset == 60min );
+ 
+   // Test round trip
+   std::stringstream ss;
+   ss << clock_cast<file_clock>(expected) << " 0123456";
+   VERIFY( ss >> parse("%F %T %z%Z", tp, abbrev, offset) );
+   VERIFY( ss.eof() );
+   VERIFY( (tp + offset) == clock_cast<file_clock>(expected) );
+   VERIFY( abbrev == "456" );
+   VERIFY( offset == (1h + 23min) );
+ 
+   ss.str("");
+   ss.clear();
+   ss << file_time<seconds>{};
+   VERIFY( ss >> parse("%F %T", tp) );
+   VERIFY( tp.time_since_epoch() == 0s );
  }
  
  int main()
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/gps/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/gps/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/gps/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/gps/io.cc	Fri Jun 19 06:51:07 2026
*************** test_ostream()
*** 22,28 ****
    ss << gt;
    VERIFY( ss.str() == "2000-01-01 00:00:13" );
  
-   gps_time<duration<float>> gtf = gt;
    ss.str("");
    ss.clear();
    ss << (gps_time<duration<long double>>(gt) + 20ms);
--- 22,27 ----
*************** test_format()
*** 43,55 ****
    // PR libstdc++/113500
    s = std::format("{}", gt + 150ms + 10.5s);
    VERIFY( s == "2000-01-01 00:00:23.650" );
  }
  
  void
  test_parse()
  {
    using namespace std::chrono;
!   const sys_seconds expected = sys_days(2023y/August/9) + 20h + 44min + 3s;
    gps_seconds tp;
  
    minutes offset;
--- 42,60 ----
    // PR libstdc++/113500
    s = std::format("{}", gt + 150ms + 10.5s);
    VERIFY( s == "2000-01-01 00:00:23.650" );
+ 
+   s = std::format("{:%Z %z %Ez %Oz}", gt);
+   VERIFY( s == "GPS +0000 +00:00 +00:00" );
+ 
+   s = std::format("{}", gps_seconds{});
+   VERIFY( s == "1980-01-06 00:00:00" );
  }
  
  void
  test_parse()
  {
    using namespace std::chrono;
!   const sys_seconds expected = sys_days(2023y/August/9) + 20h + 43min + 45s;
    gps_seconds tp;
  
    minutes offset;
*************** test_parse()
*** 60,65 ****
--- 65,84 ----
    VERIFY( tp == clock_cast<gps_clock>(expected) );
    VERIFY( abbrev == "BST" );
    VERIFY( offset == 60min );
+ 
+   // Test round trip
+   std::stringstream ss;
+   ss << clock_cast<gps_clock>(expected) << " GPS -1234";
+   VERIFY( ss >> parse("%F %T %Z %z", tp, abbrev, offset) );
+   VERIFY( ! ss.eof() );
+   VERIFY( (tp + offset) == clock_cast<gps_clock>(expected) );
+   VERIFY( abbrev == "GPS" );
+   VERIFY( offset == -(12h + 34min) );
+ 
+   ss.str("");
+   ss << gps_seconds{};
+   VERIFY( ss >> parse("%F %T", tp) );
+   VERIFY( tp.time_since_epoch() == 0s );
  }
  
  int main()
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/local/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/local/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/local/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/local/io.cc	Fri Jun 19 06:51:07 2026
***************
*** 8,21 ****
  void
  test_ostream()
  {
    using std::format;
    using namespace std::chrono;
  
!   auto st = sys_days{2000y/January/1};
!   auto tt = clock_cast<tai_clock>(st);
  
!   auto s = format("{0:%F %T %Z} == {1:%F %T %Z}", st, tt);
!   VERIFY( s == "2000-01-01 00:00:00 UTC == 2000-01-01 00:00:32 TAI" );
  }
  
  void
--- 8,97 ----
  void
  test_ostream()
  {
+   using namespace std::chrono;
+ 
+   auto lt = local_time<seconds>(1722198122s);
+ 
+   std::ostringstream ss;
+   ss << lt;
+   auto s = ss.str();
+   ss.str("");
+   ss.clear();
+   ss << sys_time<seconds>{lt.time_since_epoch()};
+   auto s2 = ss.str();
+   VERIFY( s == s2 );
+ }
+ 
+ void
+ test_format()
+ {
    using std::format;
    using namespace std::chrono;
  
!   auto lt = local_seconds(1722198122s);
  
! #if __cpp_exceptions
!   auto args = std::make_format_args(lt);
!   try
!   {
!     (void) std::vformat("{:%Z}", args);
!     VERIFY(false);
!   }
!   catch (const std::format_error&)
!   {
!   }
!   try
!   {
!     (void) std::vformat("{:%z}", args);
!     VERIFY(false);
!   }
!   catch (const std::format_error&)
!   {
!   }
! #endif
! 
!   auto s = format("{0:%F %T %a}", lt);
!   VERIFY( s == "2024-07-28 20:22:02 Sun" );
! 
!   s = format("{}", lt);
!   VERIFY( s == "2024-07-28 20:22:02" );
! 
!   // Test formatting for chrono::local_time_format and local-time-format-t too:
!   auto ltf = local_time_format(lt);
!   s = std::format("{:%F %T %a %b}", ltf);
!   VERIFY( s == "2024-07-28 20:22:02 Sun Jul" );
! #if __cpp_exceptions
!   try
!   {
!     (void) std::format("{:%Z}", ltf);
!     VERIFY(false);
!   }
!   catch (const std::format_error&)
!   {
!   }
!   try
!   {
!     (void) std::format("{:%z}", ltf);
!     VERIFY(false);
!   }
!   catch (const std::format_error&)
!   {
!   }
! #endif
!   std::string abbrev = "FOO";
!   seconds off = -3600s;
!   ltf = local_time_format(lt, &abbrev, &off);
!   s = std::format("{}", ltf);
!   VERIFY( s == "2024-07-28 20:22:02 FOO" );
!   s = std::format("{:%Z %T %F %z %Ez}", ltf);
!   __builtin_puts(s.c_str());
!   VERIFY( s == "FOO 20:22:02 2024-07-28 -0100 -01:00" );
! 
!   s = std::format("{}", local_seconds{});
!   VERIFY( s == "1970-01-01 00:00:00" );
! 
!   s = std::format("{}", local_days{}); // PR libstdc++/120293
!   VERIFY( s == "1970-01-01" );
  }
  
  void
*************** test_parse()
*** 33,42 ****
--- 109,133 ----
    VERIFY( tp == local_seconds(expected.time_since_epoch()) );
    VERIFY( abbrev == "BST" );
    VERIFY( offset == 60min );
+ 
+   // Test round trip
+   std::stringstream ss;
+   ss << local_seconds{expected.time_since_epoch()} << " X 0123";
+   VERIFY( ss >> parse("%F %T %Z %z", tp, abbrev, offset) );
+   VERIFY( ! ss.eof() );
+   VERIFY( tp == local_seconds{expected.time_since_epoch()} );
+   VERIFY( abbrev == "X" );
+   VERIFY( offset == (1h + 23min) );
+ 
+   ss.str("");
+   ss << local_seconds{};
+   VERIFY( ss >> parse("%F %T", tp) );
+   VERIFY( tp.time_since_epoch() == 0s );
  }
  
  int main()
  {
    test_ostream();
+   test_format();
    test_parse();
  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/system/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/system/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/system/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/system/io.cc	Fri Jun 19 06:51:07 2026
*************** test_format()
*** 64,76 ****
  		 " | 25.708 | 17:26:25.708 | 1 | 51 | 51 | 1 | 51 | 12/19/22"
  		 " | 17:26:25 | 22 | 2022 | +0000 | UTC" );
  
    auto loc = std::locale::classic();
    auto smod = std::format(loc, "{:%Ec %EC %Od %Oe %OH %OI %Om %OM %OS %Ou %OU"
  			       " %Ow %OW %Ex %EX %Oy %Ey %EY %Ez %Oz}", t);
    s = std::format("{:%c %C %d %e %H %I %m %M %S %u %U"
  		  " %w %W %x %X %y %y %Y +00:00 +00:00}",
! 		  std::chrono::time_point_cast<std::chrono::seconds>(t));
    VERIFY( smod == s );
  }
  
  void
--- 64,82 ----
  		 " | 25.708 | 17:26:25.708 | 1 | 51 | 51 | 1 | 51 | 12/19/22"
  		 " | 17:26:25 | 22 | 2022 | +0000 | UTC" );
  
+   auto st = std::chrono::time_point_cast<std::chrono::seconds>(t);
    auto loc = std::locale::classic();
    auto smod = std::format(loc, "{:%Ec %EC %Od %Oe %OH %OI %Om %OM %OS %Ou %OU"
  			       " %Ow %OW %Ex %EX %Oy %Ey %EY %Ez %Oz}", t);
    s = std::format("{:%c %C %d %e %H %I %m %M %S %u %U"
  		  " %w %W %x %X %y %y %Y +00:00 +00:00}",
! 		  st);
    VERIFY( smod == s );
+ 
+   s = std::format("{}", t);
+   VERIFY( s == "2022-12-19 17:26:25.708" );
+   s = std::format("{0:} {0:=<21}", st);
+   VERIFY( s == "2022-12-19 17:26:25 2022-12-19 17:26:25==" );
  }
  
  void
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/tai/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/tai/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/tai/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/tai/io.cc	Fri Jun 19 06:51:07 2026
*************** test_ostream()
*** 16,21 ****
--- 16,46 ----
  
    auto s = format("{0:%F %T %Z} == {1:%F %T %Z}", st, tt);
    VERIFY( s == "2000-01-01 00:00:00 UTC == 2000-01-01 00:00:32 TAI" );
+ 
+   s = std::format("{:=>21}", tt);
+   VERIFY( s == "==2000-01-01 00:00:32" );
+ }
+ 
+ void
+ test_format()
+ {
+   using std::format;
+   using namespace std::chrono;
+ 
+   auto st = sys_days{2000y/January/1};
+   auto tt = clock_cast<tai_clock>(st);
+   auto s = std::format("{}", tt);
+   VERIFY( s == "2000-01-01 00:00:32" );
+ 
+   // PR libstdc++/113500
+   s = std::format("{}", tt + 150ms);
+   VERIFY( s == "2000-01-01 00:00:32.150" );
+ 
+   s = std::format("{:%Z %z %Ez %Oz}", tt);
+   VERIFY( s == "TAI +0000 +00:00 +00:00" );
+ 
+   s = std::format("{}", tai_seconds{});
+   VERIFY( s == "1958-01-01 00:00:00" );
  }
  
  void
*************** test_parse()
*** 27,42 ****
  
    minutes offset;
    std::string abbrev;
!   std::istringstream is("8/9/23 214403 +1 BST#");
    VERIFY( is >> parse("%D %2H%2M%2S %Oz %Z", tp, abbrev, offset) );
    VERIFY( ! is.eof() );
    VERIFY( tp == clock_cast<tai_clock>(expected) );
    VERIFY( abbrev == "BST" );
    VERIFY( offset == 60min );
  }
  
  int main()
  {
    test_ostream();
    test_parse();
  }
--- 52,82 ----
  
    minutes offset;
    std::string abbrev;
!   std::istringstream is("8/9/23 214440 +1 BST#");
    VERIFY( is >> parse("%D %2H%2M%2S %Oz %Z", tp, abbrev, offset) );
    VERIFY( ! is.eof() );
    VERIFY( tp == clock_cast<tai_clock>(expected) );
    VERIFY( abbrev == "BST" );
    VERIFY( offset == 60min );
+ 
+   // Test round trip
+   std::stringstream ss;
+   ss << clock_cast<tai_clock>(expected) << " TAI 0123";
+   VERIFY( ss >> parse("%F %T %Z %z", tp, abbrev, offset) );
+   VERIFY( ! ss.eof() );
+   VERIFY( (tp + offset) == clock_cast<tai_clock>(expected) );
+   VERIFY( abbrev == "TAI" );
+   VERIFY( offset == (1h + 23min) );
+ 
+   ss.str("");
+   ss << tai_seconds{};
+   VERIFY( ss >> parse("%F %T", tp) );
+   VERIFY( tp.time_since_epoch() == 0s );
  }
  
  int main()
  {
    test_ostream();
+   test_format();
    test_parse();
  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/utc/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/utc/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/clock/utc/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/clock/utc/io.cc	Fri Jun 19 06:51:07 2026
*************** test_format()
*** 116,121 ****
--- 116,128 ----
    // PR libstdc++/113500
    s = std::format("{}", leap + 100ms + 2.5s);
    VERIFY( s == "2017-01-01 00:00:01.600");
+ 
+   std::chrono::utc_seconds t0{};
+   s = std::format("{:%Z %z %Ez %Oz}", t0);
+   VERIFY( s == "UTC +0000 +00:00 +00:00" );
+ 
+   s = std::format("{}", t0);
+   VERIFY( s == "1970-01-01 00:00:00" );
  }
  
  void
*************** test_parse()
*** 146,151 ****
--- 153,173 ----
    VERIFY( is >> parse("%G-W%V-%u %T", tp) );
    VERIFY( ! is.eof() );
    VERIFY( tp == clock_cast<utc_clock>(expected) );
+ 
+   // Test round trip
+   std::stringstream ss;
+   ss << clock_cast<utc_clock>(expected) << " 0012 UTC";
+   VERIFY( ss >> parse("%F %T %z %Z", tp, abbrev, offset) );
+   VERIFY( ss.eof() );
+   VERIFY( (tp + offset) == clock_cast<utc_clock>(expected) );
+   VERIFY( abbrev == "UTC" );
+   VERIFY( offset == 12min );
+ 
+   ss.str("");
+   ss.clear();
+   ss << utc_seconds{};
+   VERIFY( ss >> parse("%F %T", tp) );
+   VERIFY( tp.time_since_epoch() == 0s );
  }
  
  int main()
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/parse/125369.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/parse/125369.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/parse/125369.cc	Thu Jan  1 00:00:00 1970
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/parse/125369.cc	Fri Jun 19 06:51:07 2026
***************
*** 0 ****
--- 1,65 ----
+ // { dg-do run { target c++20 } }
+ 
+ #include <chrono>
+ #include <sstream>
+ #include <testsuite_hooks.h>
+ 
+ using namespace std::chrono;
+ 
+ const std::string input = "2026-05-18 15:26:48 ";
+ const std::string fmt = "%F %T %";
+ sys_seconds ss;
+ minutes offset{};
+ std::string abbrev;
+ 
+ void
+ test_parse_z()
+ {
+   for (auto suffix : {"Z", "+", "+Z", "-A", "+1Z", "+010", "+010Z"})
+   {
+     std::istringstream in{input + suffix};
+     from_stream(in, (fmt + "z").c_str(), ss, &abbrev, &offset);
+ 
+     VERIFY( in.fail() );
+     VERIFY( ss == sys_seconds(0s) );
+     VERIFY( offset == 0min );
+     VERIFY( abbrev.empty() );
+   }
+ }
+ 
+ void
+ test_parse_Ez()
+ {
+   for (auto suffix : {"Z", "+", "-", "+01:", "+01:X"})
+   {
+     std::istringstream in{input + suffix};
+     from_stream(in, (fmt + "Ez").c_str(), ss, &abbrev, &offset);
+ 
+     VERIFY( in.fail() );
+     VERIFY( ss == sys_seconds(0s) );
+     VERIFY( offset == 0min );
+     VERIFY( abbrev.empty() );
+   }
+ }
+ 
+ void
+ test_parse_Oz()
+ {
+   for (auto suffix : {"Z", "+", "-", "+01:", "+01:X"})
+   {
+     std::istringstream in{input + suffix};
+     from_stream(in, (fmt + "Oz").c_str(), ss, &abbrev, &offset);
+ 
+     VERIFY( in.fail() );
+     VERIFY( ss == sys_seconds(0s) );
+     VERIFY( offset == 0min );
+     VERIFY( abbrev.empty() );
+   }
+ }
+ 
+ int main()
+ {
+   test_parse_z();
+   test_parse_Ez();
+   test_parse_Oz();
+ }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/parse/parse.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/parse/parse.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/parse/parse.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/parse/parse.cc	Fri Jun 19 06:51:07 2026
*************** test_modifiers()
*** 317,322 ****
--- 317,335 ----
    VERIFY( s == 12s );
  }
  
+ void
+ test_wchar()
+ {
+   std::wistringstream is;
+   std::chrono::duration<double, std::milli> ms;
+ 
+   is.clear();
+   is.str(L"0.125");
+   is >> parse(L"%S", ms);
+   VERIFY( is.good() );
+   VERIFY( ms.count() == 125 );
+ }
+ 
  int main()
  {
    test_recommended_practice();
*************** int main()
*** 324,327 ****
--- 337,341 ----
    test_whitespace();
    test_errors();
    test_modifiers();
+   test_wchar();
  }
diff -Nrcpad gcc-14.3.0/libstdc++-v3/testsuite/std/time/zoned_time/io.cc gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/zoned_time/io.cc
*** gcc-14.3.0/libstdc++-v3/testsuite/std/time/zoned_time/io.cc	Fri May 23 11:02:09 2025
--- gcc-14.3.0-RC-20260619/libstdc++-v3/testsuite/std/time/zoned_time/io.cc	Fri Jun 19 06:51:07 2026
*************** test_format()
*** 37,42 ****
--- 37,43 ----
  	       " | 25.708 | 12:26:25.708 | 1 | 51 | 51 | 1 | 51 | 12/19/22"
  	       " | 12:26:25 | 22 | 2022 | -0500 | EST" );
  
+ #ifdef _GLIBCXX_USE_WCHAR_T
    std::wstring ws = std::format(L"{:%a | %A | %b | %B | %c"
  				 " | %C | %d | %D | %e | %F | %g | %G | %h"
  				 " | %H | %I | %j | %m | %M | %p | %r | %R"
*************** test_format()
*** 47,52 ****
--- 48,54 ----
  		 " | 12 | 12 | 353 | 12 | 26 | PM | 12:26:25 PM | 12:26"
  		 " | 25.708 | 12:26:25.708 | 1 | 51 | 51 | 1 | 51 | 12/19/22"
  		 " | 12:26:25 | 22 | 2022 | -0500 | EST" );
+ #endif
  
    auto loc = std::locale::classic();
    auto smod = std::format(loc, "{:%Ec %EC %Od %Oe %OH %OI %Om %OM %OS %Ou %OU"
*************** test_format()
*** 55,60 ****
--- 57,71 ----
  		  " %w %W %x %X %y %y %Y -05:00 -05:00}",
  		  zoned_time<seconds>(zone, time_point_cast<seconds>(t)));
    VERIFY( smod == s );
+ 
+   s = std::format("{}", zt);
+   VERIFY( s == "2022-12-19 12:26:25.708 EST" );
+   s = std::format("{1:=>30}", 1, zt);
+   VERIFY( s == "===2022-12-19 12:26:25.708 EST" );
+ #ifdef _GLIBCXX_USE_WCHAR_T
+   ws = std::format(L"{:+^34}", zoned_time<microseconds>(zone, t));
+   VERIFY( ws == L"++2022-12-19 12:26:25.708000 EST++" );
+ #endif
  }
  
  int main()
